use crate::jamo::{자모, assemble};

// This code is auto-generated by gen.rs
pub fn fsm(자모s: Vec<자모>) -> String {
    let mut curr_state = 0;
    let mut count = 0;

    let cut_at = loop {
        count += 1;
        let curr_char = if count <= 자모s.len() { 자모s.get(자모s.len() - count) } else { None };

        match curr_state {
            0 => match curr_char {
                Some(자모::종성(12596)  /* ㄴ */) => { curr_state = 1; continue; },
                Some(자모::종성(12601)  /* ㄹ */) => { curr_state = 3; continue; },
                Some(자모::종성(12615)  /* ㅇ */) => { curr_state = 6; continue; },
                Some(자모::중성(12623)  /* ㅏ */) => { curr_state = 7; continue; },
                Some(자모::중성(12627)  /* ㅓ */) => { curr_state = 10; continue; },
                Some(자모::중성(12628)  /* ㅔ */) => { curr_state = 9; continue; },
                Some(자모::중성(12631)  /* ㅗ */) => { curr_state = 5; continue; },
                Some(자모::중성(12632)  /* ㅘ */) => { curr_state = 4; continue; },
                Some(자모::중성(12642)  /* ㅢ */) => { curr_state = 8; continue; },
                Some(자모::중성(12643)  /* ㅣ */) => { curr_state = 2; continue; },
                _ => { break 0; },
            },
            1 => match curr_char {
                Some(자모::중성(12623)  /* ㅏ */) => { curr_state = 12; continue; },
                Some(자모::중성(12629)  /* ㅕ */) => { curr_state = 13; continue; },
                Some(자모::중성(12641)  /* ㅡ */) => { curr_state = 11; continue; },
                _ => { break 0; },
            },
            2 => match curr_char {
                Some(자모::초성(12615)  /* ㅇ */) => { curr_state = 14; continue; },
                Some(자모::초성(12616)  /* ㅈ */) => { curr_state = 15; continue; },
                _ => { break 0; },
            },
            3 => match curr_char {
                Some(자모::중성(12641)  /* ㅡ */) => { curr_state = 16; continue; },
                _ => { break 0; },
            },
            4 => match curr_char {
                Some(자모::초성(12593)  /* ㄱ */) => { curr_state = 17; continue; },
                Some(자모::초성(12615)  /* ㅇ */) => { curr_state = 18; continue; },
                _ => { break 0; },
            },
            5 => match curr_char {
                Some(자모::초성(12593)  /* ㄱ */) => { curr_state = 20; continue; },
                Some(자모::초성(12599)  /* ㄷ */) => { curr_state = 21; continue; },
                Some(자모::초성(12601)  /* ㄹ */) => { curr_state = 19; continue; },
                _ => { break 0; },
            },
            6 => match curr_char {
                Some(자모::중성(12623)  /* ㅏ */) => { curr_state = 22; continue; },
                _ => { break 0; },
            },
            7 => match curr_char {
                Some(자모::초성(12593)  /* ㄱ */) => { curr_state = 23; continue; },
                Some(자모::초성(12599)  /* ㄷ */) => { curr_state = 24; continue; },
                _ => { break 0; },
            },
            8 => match curr_char {
                Some(자모::초성(12615)  /* ㅇ */) => { curr_state = 25; continue; },
                _ => { break 0; },
            },
            9 => match curr_char {
                Some(자모::초성(12593)  /* ㄱ */) => { curr_state = 27; continue; },
                Some(자모::초성(12594)  /* ㄲ */) => { curr_state = 29; continue; },
                Some(자모::초성(12599)  /* ㄷ */) => { curr_state = 30; continue; },
                Some(자모::초성(12615)  /* ㅇ */) => { curr_state = 26; continue; },
                Some(자모::초성(12620)  /* ㅌ */) => { curr_state = 28; continue; },
                _ => { break 0; },
            },
            10 => match curr_char {
                Some(자모::초성(12613)  /* ㅅ */) => { curr_state = 31; continue; },
                Some(자모::초성(12620)  /* ㅌ */) => { curr_state = 32; continue; },
                _ => { break 0; },
            },
            11 => match curr_char {
                Some(자모::초성(12596)  /* ㄴ */) => { curr_state = 34; continue; },
                Some(자모::초성(12615)  /* ㅇ */) => { curr_state = 33; continue; },
                _ => { break 0; },
            },
            12 => match curr_char {
                Some(자모::초성(12609)  /* ㅁ */) => { curr_state = 35; continue; },
                _ => { break 0; },
            },
            13 => match curr_char {
                Some(자모::초성(12609)  /* ㅁ */) => { curr_state = 36; continue; },
                _ => { break 0; },
            },
            14 => match curr_char {
                Some(자모::종성(12593)  /* ㄱ */) => { curr_state = 37; continue; },
                Some(자모::종성(12594)  /* ㄲ */) => { curr_state = 38; continue; },
                Some(자모::종성(12595)  /* ㄳ */) => { curr_state = 39; continue; },
                Some(자모::종성(12596)  /* ㄴ */) => { curr_state = 40; continue; },
                Some(자모::종성(12597)  /* ㄵ */) => { curr_state = 41; continue; },
                Some(자모::종성(12598)  /* ㄶ */) => { curr_state = 42; continue; },
                Some(자모::종성(12599)  /* ㄷ */) => { curr_state = 43; continue; },
                Some(자모::종성(12601)  /* ㄹ */) => { curr_state = 44; continue; },
                Some(자모::종성(12602)  /* ㄺ */) => { curr_state = 45; continue; },
                Some(자모::종성(12603)  /* ㄻ */) => { curr_state = 46; continue; },
                Some(자모::종성(12604)  /* ㄼ */) => { curr_state = 47; continue; },
                Some(자모::종성(12605)  /* ㄽ */) => { curr_state = 48; continue; },
                Some(자모::종성(12606)  /* ㄾ */) => { curr_state = 49; continue; },
                Some(자모::종성(12607)  /* ㄿ */) => { curr_state = 50; continue; },
                Some(자모::종성(12608)  /* ㅀ */) => { curr_state = 51; continue; },
                Some(자모::종성(12609)  /* ㅁ */) => { curr_state = 52; continue; },
                Some(자모::종성(12610)  /* ㅂ */) => { curr_state = 53; continue; },
                Some(자모::종성(12612)  /* ㅄ */) => { curr_state = 54; continue; },
                Some(자모::종성(12613)  /* ㅅ */) => { curr_state = 55; continue; },
                Some(자모::종성(12614)  /* ㅆ */) => { curr_state = 56; continue; },
                Some(자모::종성(12615)  /* ㅇ */) => { curr_state = 57; continue; },
                Some(자모::종성(12616)  /* ㅈ */) => { curr_state = 58; continue; },
                Some(자모::종성(12618)  /* ㅊ */) => { curr_state = 59; continue; },
                Some(자모::종성(12619)  /* ㅋ */) => { curr_state = 60; continue; },
                Some(자모::종성(12620)  /* ㅌ */) => { curr_state = 61; continue; },
                Some(자모::종성(12621)  /* ㅍ */) => { curr_state = 62; continue; },
                Some(자모::종성(12622)  /* ㅎ */) => { curr_state = 63; continue; },
                _ => { break 0; },
            },
            15 => match curr_char {
                Some(자모::종성(12596)  /* ㄴ */) => { curr_state = 65; continue; },
                Some(자모::중성(12623)  /* ㅏ */) => { curr_state = 64; continue; },
                _ => { break 0; },
            },
            16 => match curr_char {
                Some(자모::초성(12601)  /* ㄹ */) => { curr_state = 67; continue; },
                Some(자모::초성(12615)  /* ㅇ */) => { curr_state = 66; continue; },
                _ => { break 0; },
            },
            17 => match curr_char {
                Some(자모::종성(12593)  /* ㄱ */) => { curr_state = 68; continue; },
                Some(자모::종성(12594)  /* ㄲ */) => { curr_state = 69; continue; },
                Some(자모::종성(12595)  /* ㄳ */) => { curr_state = 70; continue; },
                Some(자모::종성(12596)  /* ㄴ */) => { curr_state = 71; continue; },
                Some(자모::종성(12597)  /* ㄵ */) => { curr_state = 72; continue; },
                Some(자모::종성(12598)  /* ㄶ */) => { curr_state = 73; continue; },
                Some(자모::종성(12599)  /* ㄷ */) => { curr_state = 74; continue; },
                Some(자모::종성(12601)  /* ㄹ */) => { curr_state = 75; continue; },
                Some(자모::종성(12602)  /* ㄺ */) => { curr_state = 76; continue; },
                Some(자모::종성(12603)  /* ㄻ */) => { curr_state = 77; continue; },
                Some(자모::종성(12604)  /* ㄼ */) => { curr_state = 78; continue; },
                Some(자모::종성(12605)  /* ㄽ */) => { curr_state = 79; continue; },
                Some(자모::종성(12606)  /* ㄾ */) => { curr_state = 80; continue; },
                Some(자모::종성(12607)  /* ㄿ */) => { curr_state = 81; continue; },
                Some(자모::종성(12608)  /* ㅀ */) => { curr_state = 82; continue; },
                Some(자모::종성(12609)  /* ㅁ */) => { curr_state = 83; continue; },
                Some(자모::종성(12610)  /* ㅂ */) => { curr_state = 84; continue; },
                Some(자모::종성(12612)  /* ㅄ */) => { curr_state = 85; continue; },
                Some(자모::종성(12613)  /* ㅅ */) => { curr_state = 86; continue; },
                Some(자모::종성(12614)  /* ㅆ */) => { curr_state = 87; continue; },
                Some(자모::종성(12615)  /* ㅇ */) => { curr_state = 88; continue; },
                Some(자모::종성(12616)  /* ㅈ */) => { curr_state = 89; continue; },
                Some(자모::종성(12618)  /* ㅊ */) => { curr_state = 90; continue; },
                Some(자모::종성(12619)  /* ㅋ */) => { curr_state = 91; continue; },
                Some(자모::종성(12620)  /* ㅌ */) => { curr_state = 92; continue; },
                Some(자모::종성(12621)  /* ㅍ */) => { curr_state = 93; continue; },
                Some(자모::종성(12622)  /* ㅎ */) => { curr_state = 94; continue; },
                _ => { break 0; },
            },
            18 => match curr_char {
                Some(자모::중성(12623)  /* ㅏ */) => { curr_state = 95; continue; },
                Some(자모::중성(12624)  /* ㅐ */) => { curr_state = 96; continue; },
                Some(자모::중성(12625)  /* ㅑ */) => { curr_state = 97; continue; },
                Some(자모::중성(12626)  /* ㅒ */) => { curr_state = 98; continue; },
                Some(자모::중성(12627)  /* ㅓ */) => { curr_state = 99; continue; },
                Some(자모::중성(12628)  /* ㅔ */) => { curr_state = 100; continue; },
                Some(자모::중성(12629)  /* ㅕ */) => { curr_state = 101; continue; },
                Some(자모::중성(12630)  /* ㅖ */) => { curr_state = 102; continue; },
                Some(자모::중성(12631)  /* ㅗ */) => { curr_state = 103; continue; },
                Some(자모::중성(12632)  /* ㅘ */) => { curr_state = 104; continue; },
                Some(자모::중성(12633)  /* ㅙ */) => { curr_state = 105; continue; },
                Some(자모::중성(12634)  /* ㅚ */) => { curr_state = 106; continue; },
                Some(자모::중성(12635)  /* ㅛ */) => { curr_state = 107; continue; },
                Some(자모::중성(12636)  /* ㅜ */) => { curr_state = 108; continue; },
                Some(자모::중성(12637)  /* ㅝ */) => { curr_state = 109; continue; },
                Some(자모::중성(12638)  /* ㅞ */) => { curr_state = 110; continue; },
                Some(자모::중성(12639)  /* ㅟ */) => { curr_state = 111; continue; },
                Some(자모::중성(12640)  /* ㅠ */) => { curr_state = 112; continue; },
                Some(자모::중성(12641)  /* ㅡ */) => { curr_state = 113; continue; },
                Some(자모::중성(12642)  /* ㅢ */) => { curr_state = 114; continue; },
                Some(자모::중성(12643)  /* ㅣ */) => { curr_state = 115; continue; },
                _ => { break 0; },
            },
            19 => match curr_char {
                Some(자모::중성(12641)  /* ㅡ */) => { curr_state = 116; continue; },
                _ => { break count - 1; },
            },
            20 => match curr_char {
                Some(자모::중성(12623)  /* ㅏ */) => { curr_state = 117; continue; },
                Some(자모::중성(12643)  /* ㅣ */) => { curr_state = 118; continue; },
                _ => { break 0; },
            },
            21 => match curr_char {
                _ => { break count - 1; },
            },
            22 => match curr_char {
                Some(자모::초성(12601)  /* ㄹ */) => { curr_state = 119; continue; },
                _ => { break 0; },
            },
            23 => match curr_char {
                Some(자모::중성(12623)  /* ㅏ */) => { curr_state = 120; continue; },
                Some(자모::중성(12624)  /* ㅐ */) => { curr_state = 121; continue; },
                Some(자모::중성(12625)  /* ㅑ */) => { curr_state = 122; continue; },
                Some(자모::중성(12626)  /* ㅒ */) => { curr_state = 123; continue; },
                Some(자모::중성(12627)  /* ㅓ */) => { curr_state = 124; continue; },
                Some(자모::중성(12628)  /* ㅔ */) => { curr_state = 125; continue; },
                Some(자모::중성(12629)  /* ㅕ */) => { curr_state = 126; continue; },
                Some(자모::중성(12630)  /* ㅖ */) => { curr_state = 127; continue; },
                Some(자모::중성(12631)  /* ㅗ */) => { curr_state = 128; continue; },
                Some(자모::중성(12632)  /* ㅘ */) => { curr_state = 129; continue; },
                Some(자모::중성(12633)  /* ㅙ */) => { curr_state = 130; continue; },
                Some(자모::중성(12634)  /* ㅚ */) => { curr_state = 131; continue; },
                Some(자모::중성(12635)  /* ㅛ */) => { curr_state = 132; continue; },
                Some(자모::중성(12636)  /* ㅜ */) => { curr_state = 133; continue; },
                Some(자모::중성(12637)  /* ㅝ */) => { curr_state = 134; continue; },
                Some(자모::중성(12638)  /* ㅞ */) => { curr_state = 135; continue; },
                Some(자모::중성(12639)  /* ㅟ */) => { curr_state = 136; continue; },
                Some(자모::중성(12640)  /* ㅠ */) => { curr_state = 137; continue; },
                Some(자모::중성(12641)  /* ㅡ */) => { curr_state = 138; continue; },
                Some(자모::중성(12642)  /* ㅢ */) => { curr_state = 139; continue; },
                Some(자모::중성(12643)  /* ㅣ */) => { curr_state = 140; continue; },
                _ => { break 0; },
            },
            24 => match curr_char {
                Some(자모::중성(12623)  /* ㅏ */) => { curr_state = 142; continue; },
                Some(자모::중성(12643)  /* ㅣ */) => { curr_state = 141; continue; },
                _ => { break 0; },
            },
            25 => match curr_char {
                _ => { break count - 1; },
            },
            26 => match curr_char {
                _ => { break count - 1; },
            },
            27 => match curr_char {
                Some(자모::중성(12628)  /* ㅔ */) => { curr_state = 143; continue; },
                _ => { break 0; },
            },
            28 => match curr_char {
                Some(자모::종성(12596)  /* ㄴ */) => { curr_state = 144; continue; },
                _ => { break 0; },
            },
            29 => match curr_char {
                _ => { break count - 1; },
            },
            30 => match curr_char {
                Some(자모::종성(12596)  /* ㄴ */) => { curr_state = 145; continue; },
                _ => { break 0; },
            },
            31 => match curr_char {
                Some(자모::중성(12628)  /* ㅔ */) => { curr_state = 146; continue; },
                _ => { break 0; },
            },
            32 => match curr_char {
                Some(자모::중성(12636)  /* ㅜ */) => { curr_state = 147; continue; },
                _ => { break 0; },
            },
            33 => match curr_char {
                Some(자모::종성(12593)  /* ㄱ */) => { curr_state = 148; continue; },
                Some(자모::종성(12594)  /* ㄲ */) => { curr_state = 149; continue; },
                Some(자모::종성(12595)  /* ㄳ */) => { curr_state = 150; continue; },
                Some(자모::종성(12596)  /* ㄴ */) => { curr_state = 151; continue; },
                Some(자모::종성(12597)  /* ㄵ */) => { curr_state = 152; continue; },
                Some(자모::종성(12598)  /* ㄶ */) => { curr_state = 153; continue; },
                Some(자모::종성(12599)  /* ㄷ */) => { curr_state = 154; continue; },
                Some(자모::종성(12601)  /* ㄹ */) => { curr_state = 155; continue; },
                Some(자모::종성(12602)  /* ㄺ */) => { curr_state = 156; continue; },
                Some(자모::종성(12603)  /* ㄻ */) => { curr_state = 157; continue; },
                Some(자모::종성(12604)  /* ㄼ */) => { curr_state = 158; continue; },
                Some(자모::종성(12605)  /* ㄽ */) => { curr_state = 159; continue; },
                Some(자모::종성(12606)  /* ㄾ */) => { curr_state = 160; continue; },
                Some(자모::종성(12607)  /* ㄿ */) => { curr_state = 161; continue; },
                Some(자모::종성(12608)  /* ㅀ */) => { curr_state = 162; continue; },
                Some(자모::종성(12609)  /* ㅁ */) => { curr_state = 163; continue; },
                Some(자모::종성(12610)  /* ㅂ */) => { curr_state = 164; continue; },
                Some(자모::종성(12612)  /* ㅄ */) => { curr_state = 165; continue; },
                Some(자모::종성(12613)  /* ㅅ */) => { curr_state = 166; continue; },
                Some(자모::종성(12614)  /* ㅆ */) => { curr_state = 167; continue; },
                Some(자모::종성(12615)  /* ㅇ */) => { curr_state = 168; continue; },
                Some(자모::종성(12616)  /* ㅈ */) => { curr_state = 169; continue; },
                Some(자모::종성(12618)  /* ㅊ */) => { curr_state = 170; continue; },
                Some(자모::종성(12619)  /* ㅋ */) => { curr_state = 171; continue; },
                Some(자모::종성(12620)  /* ㅌ */) => { curr_state = 172; continue; },
                Some(자모::종성(12621)  /* ㅍ */) => { curr_state = 173; continue; },
                Some(자모::종성(12622)  /* ㅎ */) => { curr_state = 174; continue; },
                _ => { break 0; },
            },
            34 => match curr_char {
                Some(자모::중성(12623)  /* ㅏ */) => { curr_state = 175; continue; },
                Some(자모::중성(12624)  /* ㅐ */) => { curr_state = 176; continue; },
                Some(자모::중성(12625)  /* ㅑ */) => { curr_state = 177; continue; },
                Some(자모::중성(12626)  /* ㅒ */) => { curr_state = 178; continue; },
                Some(자모::중성(12627)  /* ㅓ */) => { curr_state = 179; continue; },
                Some(자모::중성(12628)  /* ㅔ */) => { curr_state = 180; continue; },
                Some(자모::중성(12629)  /* ㅕ */) => { curr_state = 181; continue; },
                Some(자모::중성(12630)  /* ㅖ */) => { curr_state = 182; continue; },
                Some(자모::중성(12631)  /* ㅗ */) => { curr_state = 183; continue; },
                Some(자모::중성(12632)  /* ㅘ */) => { curr_state = 184; continue; },
                Some(자모::중성(12633)  /* ㅙ */) => { curr_state = 185; continue; },
                Some(자모::중성(12634)  /* ㅚ */) => { curr_state = 186; continue; },
                Some(자모::중성(12635)  /* ㅛ */) => { curr_state = 187; continue; },
                Some(자모::중성(12636)  /* ㅜ */) => { curr_state = 188; continue; },
                Some(자모::중성(12637)  /* ㅝ */) => { curr_state = 189; continue; },
                Some(자모::중성(12638)  /* ㅞ */) => { curr_state = 190; continue; },
                Some(자모::중성(12639)  /* ㅟ */) => { curr_state = 191; continue; },
                Some(자모::중성(12640)  /* ㅠ */) => { curr_state = 192; continue; },
                Some(자모::중성(12641)  /* ㅡ */) => { curr_state = 193; continue; },
                Some(자모::중성(12642)  /* ㅢ */) => { curr_state = 194; continue; },
                Some(자모::중성(12643)  /* ㅣ */) => { curr_state = 195; continue; },
                _ => { break 0; },
            },
            35 => match curr_char {
                Some(자모::중성(12643)  /* ㅣ */) => { curr_state = 196; continue; },
                _ => { break count - 1; },
            },
            36 => match curr_char {
                Some(자모::중성(12623)  /* ㅏ */) => { curr_state = 198; continue; },
                Some(자모::중성(12643)  /* ㅣ */) => { curr_state = 197; continue; },
                _ => { break 0; },
            },
            37 => match curr_char {
                _ => { break count - 2; },
            },
            38 => match curr_char {
                _ => { break count - 2; },
            },
            39 => match curr_char {
                _ => { break count - 2; },
            },
            40 => match curr_char {
                _ => { break count - 2; },
            },
            41 => match curr_char {
                _ => { break count - 2; },
            },
            42 => match curr_char {
                _ => { break count - 2; },
            },
            43 => match curr_char {
                _ => { break count - 2; },
            },
            44 => match curr_char {
                _ => { break count - 2; },
            },
            45 => match curr_char {
                _ => { break count - 2; },
            },
            46 => match curr_char {
                _ => { break count - 2; },
            },
            47 => match curr_char {
                _ => { break count - 2; },
            },
            48 => match curr_char {
                _ => { break count - 2; },
            },
            49 => match curr_char {
                _ => { break count - 2; },
            },
            50 => match curr_char {
                _ => { break count - 2; },
            },
            51 => match curr_char {
                _ => { break count - 2; },
            },
            52 => match curr_char {
                _ => { break count - 2; },
            },
            53 => match curr_char {
                _ => { break count - 2; },
            },
            54 => match curr_char {
                _ => { break count - 2; },
            },
            55 => match curr_char {
                _ => { break count - 2; },
            },
            56 => match curr_char {
                _ => { break count - 2; },
            },
            57 => match curr_char {
                _ => { break count - 2; },
            },
            58 => match curr_char {
                _ => { break count - 2; },
            },
            59 => match curr_char {
                _ => { break count - 2; },
            },
            60 => match curr_char {
                _ => { break count - 2; },
            },
            61 => match curr_char {
                _ => { break count - 2; },
            },
            62 => match curr_char {
                _ => { break count - 2; },
            },
            63 => match curr_char {
                _ => { break count - 2; },
            },
            64 => match curr_char {
                Some(자모::초성(12594)  /* ㄲ */) => { curr_state = 199; continue; },
                _ => { break 0; },
            },
            65 => match curr_char {
                Some(자모::중성(12623)  /* ㅏ */) => { curr_state = 201; continue; },
                Some(자모::중성(12643)  /* ㅣ */) => { curr_state = 200; continue; },
                _ => { break 0; },
            },
            66 => match curr_char {
                Some(자모::종성(12593)  /* ㄱ */) => { curr_state = 202; continue; },
                Some(자모::종성(12594)  /* ㄲ */) => { curr_state = 203; continue; },
                Some(자모::종성(12595)  /* ㄳ */) => { curr_state = 204; continue; },
                Some(자모::종성(12596)  /* ㄴ */) => { curr_state = 205; continue; },
                Some(자모::종성(12597)  /* ㄵ */) => { curr_state = 206; continue; },
                Some(자모::종성(12598)  /* ㄶ */) => { curr_state = 207; continue; },
                Some(자모::종성(12599)  /* ㄷ */) => { curr_state = 208; continue; },
                Some(자모::종성(12601)  /* ㄹ */) => { curr_state = 209; continue; },
                Some(자모::종성(12602)  /* ㄺ */) => { curr_state = 210; continue; },
                Some(자모::종성(12603)  /* ㄻ */) => { curr_state = 211; continue; },
                Some(자모::종성(12604)  /* ㄼ */) => { curr_state = 212; continue; },
                Some(자모::종성(12605)  /* ㄽ */) => { curr_state = 213; continue; },
                Some(자모::종성(12606)  /* ㄾ */) => { curr_state = 214; continue; },
                Some(자모::종성(12607)  /* ㄿ */) => { curr_state = 215; continue; },
                Some(자모::종성(12608)  /* ㅀ */) => { curr_state = 216; continue; },
                Some(자모::종성(12609)  /* ㅁ */) => { curr_state = 217; continue; },
                Some(자모::종성(12610)  /* ㅂ */) => { curr_state = 218; continue; },
                Some(자모::종성(12612)  /* ㅄ */) => { curr_state = 219; continue; },
                Some(자모::종성(12613)  /* ㅅ */) => { curr_state = 220; continue; },
                Some(자모::종성(12614)  /* ㅆ */) => { curr_state = 221; continue; },
                Some(자모::종성(12615)  /* ㅇ */) => { curr_state = 222; continue; },
                Some(자모::종성(12616)  /* ㅈ */) => { curr_state = 223; continue; },
                Some(자모::종성(12618)  /* ㅊ */) => { curr_state = 224; continue; },
                Some(자모::종성(12619)  /* ㅋ */) => { curr_state = 225; continue; },
                Some(자모::종성(12620)  /* ㅌ */) => { curr_state = 226; continue; },
                Some(자모::종성(12621)  /* ㅍ */) => { curr_state = 227; continue; },
                Some(자모::종성(12622)  /* ㅎ */) => { curr_state = 228; continue; },
                _ => { break 0; },
            },
            67 => match curr_char {
                Some(자모::중성(12623)  /* ㅏ */) => { curr_state = 229; continue; },
                Some(자모::중성(12624)  /* ㅐ */) => { curr_state = 230; continue; },
                Some(자모::중성(12625)  /* ㅑ */) => { curr_state = 231; continue; },
                Some(자모::중성(12626)  /* ㅒ */) => { curr_state = 232; continue; },
                Some(자모::중성(12627)  /* ㅓ */) => { curr_state = 233; continue; },
                Some(자모::중성(12628)  /* ㅔ */) => { curr_state = 234; continue; },
                Some(자모::중성(12629)  /* ㅕ */) => { curr_state = 235; continue; },
                Some(자모::중성(12630)  /* ㅖ */) => { curr_state = 236; continue; },
                Some(자모::중성(12631)  /* ㅗ */) => { curr_state = 237; continue; },
                Some(자모::중성(12632)  /* ㅘ */) => { curr_state = 238; continue; },
                Some(자모::중성(12633)  /* ㅙ */) => { curr_state = 239; continue; },
                Some(자모::중성(12634)  /* ㅚ */) => { curr_state = 240; continue; },
                Some(자모::중성(12635)  /* ㅛ */) => { curr_state = 241; continue; },
                Some(자모::중성(12636)  /* ㅜ */) => { curr_state = 242; continue; },
                Some(자모::중성(12637)  /* ㅝ */) => { curr_state = 243; continue; },
                Some(자모::중성(12638)  /* ㅞ */) => { curr_state = 244; continue; },
                Some(자모::중성(12639)  /* ㅟ */) => { curr_state = 245; continue; },
                Some(자모::중성(12640)  /* ㅠ */) => { curr_state = 246; continue; },
                Some(자모::중성(12641)  /* ㅡ */) => { curr_state = 247; continue; },
                Some(자모::중성(12642)  /* ㅢ */) => { curr_state = 248; continue; },
                Some(자모::중성(12643)  /* ㅣ */) => { curr_state = 249; continue; },
                _ => { break 0; },
            },
            68 => match curr_char {
                _ => { break count - 2; },
            },
            69 => match curr_char {
                _ => { break count - 2; },
            },
            70 => match curr_char {
                _ => { break count - 2; },
            },
            71 => match curr_char {
                _ => { break count - 2; },
            },
            72 => match curr_char {
                _ => { break count - 2; },
            },
            73 => match curr_char {
                _ => { break count - 2; },
            },
            74 => match curr_char {
                _ => { break count - 2; },
            },
            75 => match curr_char {
                _ => { break count - 2; },
            },
            76 => match curr_char {
                _ => { break count - 2; },
            },
            77 => match curr_char {
                _ => { break count - 2; },
            },
            78 => match curr_char {
                _ => { break count - 2; },
            },
            79 => match curr_char {
                _ => { break count - 2; },
            },
            80 => match curr_char {
                _ => { break count - 2; },
            },
            81 => match curr_char {
                _ => { break count - 2; },
            },
            82 => match curr_char {
                _ => { break count - 2; },
            },
            83 => match curr_char {
                _ => { break count - 2; },
            },
            84 => match curr_char {
                _ => { break count - 2; },
            },
            85 => match curr_char {
                _ => { break count - 2; },
            },
            86 => match curr_char {
                _ => { break count - 2; },
            },
            87 => match curr_char {
                _ => { break count - 2; },
            },
            88 => match curr_char {
                _ => { break count - 2; },
            },
            89 => match curr_char {
                _ => { break count - 2; },
            },
            90 => match curr_char {
                _ => { break count - 2; },
            },
            91 => match curr_char {
                _ => { break count - 2; },
            },
            92 => match curr_char {
                _ => { break count - 2; },
            },
            93 => match curr_char {
                _ => { break count - 2; },
            },
            94 => match curr_char {
                _ => { break count - 2; },
            },
            95 => match curr_char {
                _ => { break count - 2; },
            },
            96 => match curr_char {
                _ => { break count - 2; },
            },
            97 => match curr_char {
                _ => { break count - 2; },
            },
            98 => match curr_char {
                _ => { break count - 2; },
            },
            99 => match curr_char {
                _ => { break count - 2; },
            },
            100 => match curr_char {
                _ => { break count - 2; },
            },
            101 => match curr_char {
                _ => { break count - 2; },
            },
            102 => match curr_char {
                _ => { break count - 2; },
            },
            103 => match curr_char {
                _ => { break count - 2; },
            },
            104 => match curr_char {
                _ => { break count - 2; },
            },
            105 => match curr_char {
                _ => { break count - 2; },
            },
            106 => match curr_char {
                _ => { break count - 2; },
            },
            107 => match curr_char {
                _ => { break count - 2; },
            },
            108 => match curr_char {
                _ => { break count - 2; },
            },
            109 => match curr_char {
                _ => { break count - 2; },
            },
            110 => match curr_char {
                _ => { break count - 2; },
            },
            111 => match curr_char {
                _ => { break count - 2; },
            },
            112 => match curr_char {
                _ => { break count - 2; },
            },
            113 => match curr_char {
                _ => { break count - 2; },
            },
            114 => match curr_char {
                _ => { break count - 2; },
            },
            115 => match curr_char {
                _ => { break count - 2; },
            },
            116 => match curr_char {
                Some(자모::초성(12615)  /* ㅇ */) => { curr_state = 250; continue; },
                _ => { break 0; },
            },
            117 => match curr_char {
                Some(자모::초성(12601)  /* ㄹ */) => { curr_state = 251; continue; },
                Some(자모::초성(12622)  /* ㅎ */) => { curr_state = 252; continue; },
                _ => { break 0; },
            },
            118 => match curr_char {
                Some(자모::초성(12615)  /* ㅇ */) => { curr_state = 253; continue; },
                _ => { break 0; },
            },
            119 => match curr_char {
                Some(자모::중성(12623)  /* ㅏ */) => { curr_state = 255; continue; },
                Some(자모::중성(12624)  /* ㅐ */) => { curr_state = 256; continue; },
                Some(자모::중성(12625)  /* ㅑ */) => { curr_state = 257; continue; },
                Some(자모::중성(12626)  /* ㅒ */) => { curr_state = 258; continue; },
                Some(자모::중성(12627)  /* ㅓ */) => { curr_state = 259; continue; },
                Some(자모::중성(12628)  /* ㅔ */) => { curr_state = 260; continue; },
                Some(자모::중성(12629)  /* ㅕ */) => { curr_state = 261; continue; },
                Some(자모::중성(12630)  /* ㅖ */) => { curr_state = 262; continue; },
                Some(자모::중성(12631)  /* ㅗ */) => { curr_state = 263; continue; },
                Some(자모::중성(12632)  /* ㅘ */) => { curr_state = 264; continue; },
                Some(자모::중성(12633)  /* ㅙ */) => { curr_state = 265; continue; },
                Some(자모::중성(12634)  /* ㅚ */) => { curr_state = 266; continue; },
                Some(자모::중성(12635)  /* ㅛ */) => { curr_state = 267; continue; },
                Some(자모::중성(12636)  /* ㅜ */) => { curr_state = 268; continue; },
                Some(자모::중성(12637)  /* ㅝ */) => { curr_state = 269; continue; },
                Some(자모::중성(12638)  /* ㅞ */) => { curr_state = 270; continue; },
                Some(자모::중성(12639)  /* ㅟ */) => { curr_state = 271; continue; },
                Some(자모::중성(12640)  /* ㅠ */) => { curr_state = 272; continue; },
                Some(자모::중성(12641)  /* ㅡ */) => { curr_state = 273; continue; },
                Some(자모::중성(12642)  /* ㅢ */) => { curr_state = 274; continue; },
                Some(자모::중성(12643)  /* ㅣ */) => { curr_state = 254; continue; },
                _ => { break 0; },
            },
            120 => match curr_char {
                _ => { break count - 2; },
            },
            121 => match curr_char {
                _ => { break count - 2; },
            },
            122 => match curr_char {
                _ => { break count - 2; },
            },
            123 => match curr_char {
                _ => { break count - 2; },
            },
            124 => match curr_char {
                _ => { break count - 2; },
            },
            125 => match curr_char {
                _ => { break count - 2; },
            },
            126 => match curr_char {
                _ => { break count - 2; },
            },
            127 => match curr_char {
                _ => { break count - 2; },
            },
            128 => match curr_char {
                _ => { break count - 2; },
            },
            129 => match curr_char {
                _ => { break count - 2; },
            },
            130 => match curr_char {
                _ => { break count - 2; },
            },
            131 => match curr_char {
                _ => { break count - 2; },
            },
            132 => match curr_char {
                _ => { break count - 2; },
            },
            133 => match curr_char {
                _ => { break count - 2; },
            },
            134 => match curr_char {
                _ => { break count - 2; },
            },
            135 => match curr_char {
                _ => { break count - 2; },
            },
            136 => match curr_char {
                _ => { break count - 2; },
            },
            137 => match curr_char {
                _ => { break count - 2; },
            },
            138 => match curr_char {
                _ => { break count - 2; },
            },
            139 => match curr_char {
                _ => { break count - 2; },
            },
            140 => match curr_char {
                _ => { break count - 2; },
            },
            141 => match curr_char {
                Some(자모::초성(12596)  /* ㄴ */) => { curr_state = 275; continue; },
                Some(자모::초성(12615)  /* ㅇ */) => { curr_state = 276; continue; },
                _ => { break 0; },
            },
            142 => match curr_char {
                Some(자모::초성(12622)  /* ㅎ */) => { curr_state = 277; continue; },
                _ => { break 0; },
            },
            143 => match curr_char {
                Some(자모::초성(12615)  /* ㅇ */) => { curr_state = 278; continue; },
                _ => { break 0; },
            },
            144 => match curr_char {
                Some(자모::중성(12623)  /* ㅏ */) => { curr_state = 279; continue; },
                _ => { break 0; },
            },
            145 => match curr_char {
                Some(자모::중성(12623)  /* ㅏ */) => { curr_state = 281; continue; },
                Some(자모::중성(12643)  /* ㅣ */) => { curr_state = 280; continue; },
                _ => { break 0; },
            },
            146 => match curr_char {
                Some(자모::초성(12615)  /* ㅇ */) => { curr_state = 282; continue; },
                _ => { break 0; },
            },
            147 => match curr_char {
                Some(자모::초성(12610)  /* ㅂ */) => { curr_state = 283; continue; },
                _ => { break 0; },
            },
            148 => match curr_char {
                _ => { break count - 2; },
            },
            149 => match curr_char {
                _ => { break count - 2; },
            },
            150 => match curr_char {
                _ => { break count - 2; },
            },
            151 => match curr_char {
                _ => { break count - 2; },
            },
            152 => match curr_char {
                _ => { break count - 2; },
            },
            153 => match curr_char {
                _ => { break count - 2; },
            },
            154 => match curr_char {
                _ => { break count - 2; },
            },
            155 => match curr_char {
                _ => { break count - 2; },
            },
            156 => match curr_char {
                _ => { break count - 2; },
            },
            157 => match curr_char {
                _ => { break count - 2; },
            },
            158 => match curr_char {
                _ => { break count - 2; },
            },
            159 => match curr_char {
                _ => { break count - 2; },
            },
            160 => match curr_char {
                _ => { break count - 2; },
            },
            161 => match curr_char {
                _ => { break count - 2; },
            },
            162 => match curr_char {
                _ => { break count - 2; },
            },
            163 => match curr_char {
                _ => { break count - 2; },
            },
            164 => match curr_char {
                _ => { break count - 2; },
            },
            165 => match curr_char {
                _ => { break count - 2; },
            },
            166 => match curr_char {
                _ => { break count - 2; },
            },
            167 => match curr_char {
                _ => { break count - 2; },
            },
            168 => match curr_char {
                _ => { break count - 2; },
            },
            169 => match curr_char {
                _ => { break count - 2; },
            },
            170 => match curr_char {
                _ => { break count - 2; },
            },
            171 => match curr_char {
                _ => { break count - 2; },
            },
            172 => match curr_char {
                _ => { break count - 2; },
            },
            173 => match curr_char {
                _ => { break count - 2; },
            },
            174 => match curr_char {
                _ => { break count - 2; },
            },
            175 => match curr_char {
                _ => { break count - 2; },
            },
            176 => match curr_char {
                _ => { break count - 2; },
            },
            177 => match curr_char {
                _ => { break count - 2; },
            },
            178 => match curr_char {
                _ => { break count - 2; },
            },
            179 => match curr_char {
                _ => { break count - 2; },
            },
            180 => match curr_char {
                _ => { break count - 2; },
            },
            181 => match curr_char {
                _ => { break count - 2; },
            },
            182 => match curr_char {
                _ => { break count - 2; },
            },
            183 => match curr_char {
                _ => { break count - 2; },
            },
            184 => match curr_char {
                _ => { break count - 2; },
            },
            185 => match curr_char {
                _ => { break count - 2; },
            },
            186 => match curr_char {
                _ => { break count - 2; },
            },
            187 => match curr_char {
                _ => { break count - 2; },
            },
            188 => match curr_char {
                _ => { break count - 2; },
            },
            189 => match curr_char {
                _ => { break count - 2; },
            },
            190 => match curr_char {
                _ => { break count - 2; },
            },
            191 => match curr_char {
                _ => { break count - 2; },
            },
            192 => match curr_char {
                _ => { break count - 2; },
            },
            193 => match curr_char {
                _ => { break count - 2; },
            },
            194 => match curr_char {
                _ => { break count - 2; },
            },
            195 => match curr_char {
                _ => { break count - 2; },
            },
            196 => match curr_char {
                Some(자모::초성(12616)  /* ㅈ */) => { curr_state = 284; continue; },
                _ => { break 0; },
            },
            197 => match curr_char {
                Some(자모::초성(12615)  /* ㅇ */) => { curr_state = 285; continue; },
                _ => { break 0; },
            },
            198 => match curr_char {
                Some(자모::초성(12622)  /* ㅎ */) => { curr_state = 286; continue; },
                _ => { break 0; },
            },
            199 => match curr_char {
                _ => { break count - 1; },
            },
            200 => match curr_char {
                Some(자모::초성(12615)  /* ㅇ */) => { curr_state = 287; continue; },
                _ => { break 0; },
            },
            201 => match curr_char {
                Some(자모::초성(12622)  /* ㅎ */) => { curr_state = 288; continue; },
                _ => { break 0; },
            },
            202 => match curr_char {
                _ => { break count - 2; },
            },
            203 => match curr_char {
                _ => { break count - 2; },
            },
            204 => match curr_char {
                _ => { break count - 2; },
            },
            205 => match curr_char {
                _ => { break count - 2; },
            },
            206 => match curr_char {
                _ => { break count - 2; },
            },
            207 => match curr_char {
                _ => { break count - 2; },
            },
            208 => match curr_char {
                _ => { break count - 2; },
            },
            209 => match curr_char {
                _ => { break count - 2; },
            },
            210 => match curr_char {
                _ => { break count - 2; },
            },
            211 => match curr_char {
                _ => { break count - 2; },
            },
            212 => match curr_char {
                _ => { break count - 2; },
            },
            213 => match curr_char {
                _ => { break count - 2; },
            },
            214 => match curr_char {
                _ => { break count - 2; },
            },
            215 => match curr_char {
                _ => { break count - 2; },
            },
            216 => match curr_char {
                _ => { break count - 2; },
            },
            217 => match curr_char {
                _ => { break count - 2; },
            },
            218 => match curr_char {
                _ => { break count - 2; },
            },
            219 => match curr_char {
                _ => { break count - 2; },
            },
            220 => match curr_char {
                _ => { break count - 2; },
            },
            221 => match curr_char {
                _ => { break count - 2; },
            },
            222 => match curr_char {
                _ => { break count - 2; },
            },
            223 => match curr_char {
                _ => { break count - 2; },
            },
            224 => match curr_char {
                _ => { break count - 2; },
            },
            225 => match curr_char {
                _ => { break count - 2; },
            },
            226 => match curr_char {
                _ => { break count - 2; },
            },
            227 => match curr_char {
                _ => { break count - 2; },
            },
            228 => match curr_char {
                _ => { break count - 2; },
            },
            229 => match curr_char {
                _ => { break count - 2; },
            },
            230 => match curr_char {
                _ => { break count - 2; },
            },
            231 => match curr_char {
                _ => { break count - 2; },
            },
            232 => match curr_char {
                _ => { break count - 2; },
            },
            233 => match curr_char {
                _ => { break count - 2; },
            },
            234 => match curr_char {
                _ => { break count - 2; },
            },
            235 => match curr_char {
                _ => { break count - 2; },
            },
            236 => match curr_char {
                _ => { break count - 2; },
            },
            237 => match curr_char {
                _ => { break count - 2; },
            },
            238 => match curr_char {
                _ => { break count - 2; },
            },
            239 => match curr_char {
                _ => { break count - 2; },
            },
            240 => match curr_char {
                _ => { break count - 2; },
            },
            241 => match curr_char {
                _ => { break count - 2; },
            },
            242 => match curr_char {
                _ => { break count - 2; },
            },
            243 => match curr_char {
                _ => { break count - 2; },
            },
            244 => match curr_char {
                _ => { break count - 2; },
            },
            245 => match curr_char {
                _ => { break count - 2; },
            },
            246 => match curr_char {
                _ => { break count - 2; },
            },
            247 => match curr_char {
                _ => { break count - 2; },
            },
            248 => match curr_char {
                _ => { break count - 2; },
            },
            249 => match curr_char {
                _ => { break count - 2; },
            },
            250 => match curr_char {
                Some(자모::종성(12593)  /* ㄱ */) => { curr_state = 289; continue; },
                Some(자모::종성(12594)  /* ㄲ */) => { curr_state = 290; continue; },
                Some(자모::종성(12595)  /* ㄳ */) => { curr_state = 291; continue; },
                Some(자모::종성(12596)  /* ㄴ */) => { curr_state = 292; continue; },
                Some(자모::종성(12597)  /* ㄵ */) => { curr_state = 293; continue; },
                Some(자모::종성(12598)  /* ㄶ */) => { curr_state = 294; continue; },
                Some(자모::종성(12599)  /* ㄷ */) => { curr_state = 295; continue; },
                Some(자모::종성(12601)  /* ㄹ */) => { curr_state = 296; continue; },
                Some(자모::종성(12602)  /* ㄺ */) => { curr_state = 297; continue; },
                Some(자모::종성(12603)  /* ㄻ */) => { curr_state = 298; continue; },
                Some(자모::종성(12604)  /* ㄼ */) => { curr_state = 299; continue; },
                Some(자모::종성(12605)  /* ㄽ */) => { curr_state = 300; continue; },
                Some(자모::종성(12606)  /* ㄾ */) => { curr_state = 301; continue; },
                Some(자모::종성(12607)  /* ㄿ */) => { curr_state = 302; continue; },
                Some(자모::종성(12608)  /* ㅀ */) => { curr_state = 303; continue; },
                Some(자모::종성(12609)  /* ㅁ */) => { curr_state = 304; continue; },
                Some(자모::종성(12610)  /* ㅂ */) => { curr_state = 305; continue; },
                Some(자모::종성(12612)  /* ㅄ */) => { curr_state = 306; continue; },
                Some(자모::종성(12613)  /* ㅅ */) => { curr_state = 307; continue; },
                Some(자모::종성(12614)  /* ㅆ */) => { curr_state = 308; continue; },
                Some(자모::종성(12615)  /* ㅇ */) => { curr_state = 309; continue; },
                Some(자모::종성(12616)  /* ㅈ */) => { curr_state = 310; continue; },
                Some(자모::종성(12618)  /* ㅊ */) => { curr_state = 311; continue; },
                Some(자모::종성(12619)  /* ㅋ */) => { curr_state = 312; continue; },
                Some(자모::종성(12620)  /* ㅌ */) => { curr_state = 313; continue; },
                Some(자모::종성(12621)  /* ㅍ */) => { curr_state = 314; continue; },
                Some(자모::종성(12622)  /* ㅎ */) => { curr_state = 315; continue; },
                _ => { break 0; },
            },
            251 => match curr_char {
                Some(자모::중성(12623)  /* ㅏ */) => { curr_state = 317; continue; },
                Some(자모::중성(12624)  /* ㅐ */) => { curr_state = 318; continue; },
                Some(자모::중성(12625)  /* ㅑ */) => { curr_state = 319; continue; },
                Some(자모::중성(12626)  /* ㅒ */) => { curr_state = 320; continue; },
                Some(자모::중성(12627)  /* ㅓ */) => { curr_state = 321; continue; },
                Some(자모::중성(12628)  /* ㅔ */) => { curr_state = 322; continue; },
                Some(자모::중성(12629)  /* ㅕ */) => { curr_state = 323; continue; },
                Some(자모::중성(12630)  /* ㅖ */) => { curr_state = 324; continue; },
                Some(자모::중성(12631)  /* ㅗ */) => { curr_state = 325; continue; },
                Some(자모::중성(12632)  /* ㅘ */) => { curr_state = 326; continue; },
                Some(자모::중성(12633)  /* ㅙ */) => { curr_state = 327; continue; },
                Some(자모::중성(12634)  /* ㅚ */) => { curr_state = 328; continue; },
                Some(자모::중성(12635)  /* ㅛ */) => { curr_state = 329; continue; },
                Some(자모::중성(12636)  /* ㅜ */) => { curr_state = 330; continue; },
                Some(자모::중성(12637)  /* ㅝ */) => { curr_state = 331; continue; },
                Some(자모::중성(12638)  /* ㅞ */) => { curr_state = 332; continue; },
                Some(자모::중성(12639)  /* ㅟ */) => { curr_state = 333; continue; },
                Some(자모::중성(12640)  /* ㅠ */) => { curr_state = 334; continue; },
                Some(자모::중성(12641)  /* ㅡ */) => { curr_state = 335; continue; },
                Some(자모::중성(12642)  /* ㅢ */) => { curr_state = 336; continue; },
                Some(자모::중성(12643)  /* ㅣ */) => { curr_state = 316; continue; },
                _ => { break 0; },
            },
            252 => match curr_char {
                _ => { break count - 1; },
            },
            253 => match curr_char {
                _ => { break count - 1; },
            },
            254 => match curr_char {
                Some(자모::초성(12615)  /* ㅇ */) => { curr_state = 337; continue; },
                _ => { break count - 2; },
            },
            255 => match curr_char {
                _ => { break count - 2; },
            },
            256 => match curr_char {
                _ => { break count - 2; },
            },
            257 => match curr_char {
                _ => { break count - 2; },
            },
            258 => match curr_char {
                _ => { break count - 2; },
            },
            259 => match curr_char {
                _ => { break count - 2; },
            },
            260 => match curr_char {
                _ => { break count - 2; },
            },
            261 => match curr_char {
                _ => { break count - 2; },
            },
            262 => match curr_char {
                _ => { break count - 2; },
            },
            263 => match curr_char {
                _ => { break count - 2; },
            },
            264 => match curr_char {
                _ => { break count - 2; },
            },
            265 => match curr_char {
                _ => { break count - 2; },
            },
            266 => match curr_char {
                _ => { break count - 2; },
            },
            267 => match curr_char {
                _ => { break count - 2; },
            },
            268 => match curr_char {
                _ => { break count - 2; },
            },
            269 => match curr_char {
                _ => { break count - 2; },
            },
            270 => match curr_char {
                _ => { break count - 2; },
            },
            271 => match curr_char {
                _ => { break count - 2; },
            },
            272 => match curr_char {
                _ => { break count - 2; },
            },
            273 => match curr_char {
                _ => { break count - 2; },
            },
            274 => match curr_char {
                _ => { break count - 2; },
            },
            275 => match curr_char {
                Some(자모::종성(12610)  /* ㅂ */) => { curr_state = 338; continue; },
                _ => { break 0; },
            },
            276 => match curr_char {
                _ => { break count - 1; },
            },
            277 => match curr_char {
                _ => { break count - 1; },
            },
            278 => match curr_char {
                _ => { break count - 1; },
            },
            279 => match curr_char {
                Some(자모::초성(12622)  /* ㅎ */) => { curr_state = 339; continue; },
                _ => { break 0; },
            },
            280 => match curr_char {
                Some(자모::초성(12615)  /* ㅇ */) => { curr_state = 340; continue; },
                _ => { break 0; },
            },
            281 => match curr_char {
                Some(자모::초성(12622)  /* ㅎ */) => { curr_state = 341; continue; },
                _ => { break 0; },
            },
            282 => match curr_char {
                _ => { break count - 1; },
            },
            283 => match curr_char {
                _ => { break count - 1; },
            },
            284 => match curr_char {
                Some(자모::중성(12623)  /* ㅏ */) => { curr_state = 343; continue; },
                Some(자모::중성(12643)  /* ㅣ */) => { curr_state = 342; continue; },
                _ => { break 0; },
            },
            285 => match curr_char {
                _ => { break count - 1; },
            },
            286 => match curr_char {
                _ => { break count - 1; },
            },
            287 => match curr_char {
                _ => { break count - 1; },
            },
            288 => match curr_char {
                _ => { break count - 1; },
            },
            289 => match curr_char {
                _ => { break count - 2; },
            },
            290 => match curr_char {
                _ => { break count - 2; },
            },
            291 => match curr_char {
                _ => { break count - 2; },
            },
            292 => match curr_char {
                _ => { break count - 2; },
            },
            293 => match curr_char {
                _ => { break count - 2; },
            },
            294 => match curr_char {
                _ => { break count - 2; },
            },
            295 => match curr_char {
                _ => { break count - 2; },
            },
            296 => match curr_char {
                _ => { break count - 2; },
            },
            297 => match curr_char {
                _ => { break count - 2; },
            },
            298 => match curr_char {
                _ => { break count - 2; },
            },
            299 => match curr_char {
                _ => { break count - 2; },
            },
            300 => match curr_char {
                _ => { break count - 2; },
            },
            301 => match curr_char {
                _ => { break count - 2; },
            },
            302 => match curr_char {
                _ => { break count - 2; },
            },
            303 => match curr_char {
                _ => { break count - 2; },
            },
            304 => match curr_char {
                _ => { break count - 2; },
            },
            305 => match curr_char {
                _ => { break count - 2; },
            },
            306 => match curr_char {
                _ => { break count - 2; },
            },
            307 => match curr_char {
                _ => { break count - 2; },
            },
            308 => match curr_char {
                _ => { break count - 2; },
            },
            309 => match curr_char {
                _ => { break count - 2; },
            },
            310 => match curr_char {
                _ => { break count - 2; },
            },
            311 => match curr_char {
                _ => { break count - 2; },
            },
            312 => match curr_char {
                _ => { break count - 2; },
            },
            313 => match curr_char {
                _ => { break count - 2; },
            },
            314 => match curr_char {
                _ => { break count - 2; },
            },
            315 => match curr_char {
                _ => { break count - 2; },
            },
            316 => match curr_char {
                Some(자모::초성(12615)  /* ㅇ */) => { curr_state = 344; continue; },
                _ => { break count - 2; },
            },
            317 => match curr_char {
                _ => { break count - 2; },
            },
            318 => match curr_char {
                _ => { break count - 2; },
            },
            319 => match curr_char {
                _ => { break count - 2; },
            },
            320 => match curr_char {
                _ => { break count - 2; },
            },
            321 => match curr_char {
                _ => { break count - 2; },
            },
            322 => match curr_char {
                _ => { break count - 2; },
            },
            323 => match curr_char {
                _ => { break count - 2; },
            },
            324 => match curr_char {
                _ => { break count - 2; },
            },
            325 => match curr_char {
                _ => { break count - 2; },
            },
            326 => match curr_char {
                _ => { break count - 2; },
            },
            327 => match curr_char {
                _ => { break count - 2; },
            },
            328 => match curr_char {
                _ => { break count - 2; },
            },
            329 => match curr_char {
                _ => { break count - 2; },
            },
            330 => match curr_char {
                _ => { break count - 2; },
            },
            331 => match curr_char {
                _ => { break count - 2; },
            },
            332 => match curr_char {
                _ => { break count - 2; },
            },
            333 => match curr_char {
                _ => { break count - 2; },
            },
            334 => match curr_char {
                _ => { break count - 2; },
            },
            335 => match curr_char {
                _ => { break count - 2; },
            },
            336 => match curr_char {
                _ => { break count - 2; },
            },
            337 => match curr_char {
                Some(자모::종성(12593)  /* ㄱ */) => { curr_state = 345; continue; },
                Some(자모::종성(12594)  /* ㄲ */) => { curr_state = 346; continue; },
                Some(자모::종성(12595)  /* ㄳ */) => { curr_state = 347; continue; },
                Some(자모::종성(12596)  /* ㄴ */) => { curr_state = 348; continue; },
                Some(자모::종성(12597)  /* ㄵ */) => { curr_state = 349; continue; },
                Some(자모::종성(12598)  /* ㄶ */) => { curr_state = 350; continue; },
                Some(자모::종성(12599)  /* ㄷ */) => { curr_state = 351; continue; },
                Some(자모::종성(12601)  /* ㄹ */) => { curr_state = 352; continue; },
                Some(자모::종성(12602)  /* ㄺ */) => { curr_state = 353; continue; },
                Some(자모::종성(12603)  /* ㄻ */) => { curr_state = 354; continue; },
                Some(자모::종성(12604)  /* ㄼ */) => { curr_state = 355; continue; },
                Some(자모::종성(12605)  /* ㄽ */) => { curr_state = 356; continue; },
                Some(자모::종성(12606)  /* ㄾ */) => { curr_state = 357; continue; },
                Some(자모::종성(12607)  /* ㄿ */) => { curr_state = 358; continue; },
                Some(자모::종성(12608)  /* ㅀ */) => { curr_state = 359; continue; },
                Some(자모::종성(12609)  /* ㅁ */) => { curr_state = 360; continue; },
                Some(자모::종성(12610)  /* ㅂ */) => { curr_state = 361; continue; },
                Some(자모::종성(12612)  /* ㅄ */) => { curr_state = 362; continue; },
                Some(자모::종성(12613)  /* ㅅ */) => { curr_state = 363; continue; },
                Some(자모::종성(12614)  /* ㅆ */) => { curr_state = 364; continue; },
                Some(자모::종성(12615)  /* ㅇ */) => { curr_state = 365; continue; },
                Some(자모::종성(12616)  /* ㅈ */) => { curr_state = 366; continue; },
                Some(자모::종성(12618)  /* ㅊ */) => { curr_state = 367; continue; },
                Some(자모::종성(12619)  /* ㅋ */) => { curr_state = 368; continue; },
                Some(자모::종성(12620)  /* ㅌ */) => { curr_state = 369; continue; },
                Some(자모::종성(12621)  /* ㅍ */) => { curr_state = 370; continue; },
                Some(자모::종성(12622)  /* ㅎ */) => { curr_state = 371; continue; },
                _ => { break 0; },
            },
            338 => match curr_char {
                Some(자모::중성(12623)  /* ㅏ */) => { curr_state = 373; continue; },
                Some(자모::중성(12643)  /* ㅣ */) => { curr_state = 372; continue; },
                _ => { break 0; },
            },
            339 => match curr_char {
                _ => { break count - 1; },
            },
            340 => match curr_char {
                _ => { break count - 1; },
            },
            341 => match curr_char {
                _ => { break count - 1; },
            },
            342 => match curr_char {
                Some(자모::초성(12615)  /* ㅇ */) => { curr_state = 374; continue; },
                _ => { break 0; },
            },
            343 => match curr_char {
                Some(자모::초성(12622)  /* ㅎ */) => { curr_state = 375; continue; },
                _ => { break 0; },
            },
            344 => match curr_char {
                Some(자모::종성(12593)  /* ㄱ */) => { curr_state = 376; continue; },
                Some(자모::종성(12594)  /* ㄲ */) => { curr_state = 377; continue; },
                Some(자모::종성(12595)  /* ㄳ */) => { curr_state = 378; continue; },
                Some(자모::종성(12596)  /* ㄴ */) => { curr_state = 379; continue; },
                Some(자모::종성(12597)  /* ㄵ */) => { curr_state = 380; continue; },
                Some(자모::종성(12598)  /* ㄶ */) => { curr_state = 381; continue; },
                Some(자모::종성(12599)  /* ㄷ */) => { curr_state = 382; continue; },
                Some(자모::종성(12601)  /* ㄹ */) => { curr_state = 383; continue; },
                Some(자모::종성(12602)  /* ㄺ */) => { curr_state = 384; continue; },
                Some(자모::종성(12603)  /* ㄻ */) => { curr_state = 385; continue; },
                Some(자모::종성(12604)  /* ㄼ */) => { curr_state = 386; continue; },
                Some(자모::종성(12605)  /* ㄽ */) => { curr_state = 387; continue; },
                Some(자모::종성(12606)  /* ㄾ */) => { curr_state = 388; continue; },
                Some(자모::종성(12607)  /* ㄿ */) => { curr_state = 389; continue; },
                Some(자모::종성(12608)  /* ㅀ */) => { curr_state = 390; continue; },
                Some(자모::종성(12609)  /* ㅁ */) => { curr_state = 391; continue; },
                Some(자모::종성(12610)  /* ㅂ */) => { curr_state = 392; continue; },
                Some(자모::종성(12612)  /* ㅄ */) => { curr_state = 393; continue; },
                Some(자모::종성(12613)  /* ㅅ */) => { curr_state = 394; continue; },
                Some(자모::종성(12614)  /* ㅆ */) => { curr_state = 395; continue; },
                Some(자모::종성(12615)  /* ㅇ */) => { curr_state = 396; continue; },
                Some(자모::종성(12616)  /* ㅈ */) => { curr_state = 397; continue; },
                Some(자모::종성(12618)  /* ㅊ */) => { curr_state = 398; continue; },
                Some(자모::종성(12619)  /* ㅋ */) => { curr_state = 399; continue; },
                Some(자모::종성(12620)  /* ㅌ */) => { curr_state = 400; continue; },
                Some(자모::종성(12621)  /* ㅍ */) => { curr_state = 401; continue; },
                Some(자모::종성(12622)  /* ㅎ */) => { curr_state = 402; continue; },
                _ => { break 0; },
            },
            345 => match curr_char {
                _ => { break count - 2; },
            },
            346 => match curr_char {
                _ => { break count - 2; },
            },
            347 => match curr_char {
                _ => { break count - 2; },
            },
            348 => match curr_char {
                _ => { break count - 2; },
            },
            349 => match curr_char {
                _ => { break count - 2; },
            },
            350 => match curr_char {
                _ => { break count - 2; },
            },
            351 => match curr_char {
                _ => { break count - 2; },
            },
            352 => match curr_char {
                _ => { break count - 2; },
            },
            353 => match curr_char {
                _ => { break count - 2; },
            },
            354 => match curr_char {
                _ => { break count - 2; },
            },
            355 => match curr_char {
                _ => { break count - 2; },
            },
            356 => match curr_char {
                _ => { break count - 2; },
            },
            357 => match curr_char {
                _ => { break count - 2; },
            },
            358 => match curr_char {
                _ => { break count - 2; },
            },
            359 => match curr_char {
                _ => { break count - 2; },
            },
            360 => match curr_char {
                _ => { break count - 2; },
            },
            361 => match curr_char {
                _ => { break count - 2; },
            },
            362 => match curr_char {
                _ => { break count - 2; },
            },
            363 => match curr_char {
                _ => { break count - 2; },
            },
            364 => match curr_char {
                _ => { break count - 2; },
            },
            365 => match curr_char {
                _ => { break count - 2; },
            },
            366 => match curr_char {
                _ => { break count - 2; },
            },
            367 => match curr_char {
                _ => { break count - 2; },
            },
            368 => match curr_char {
                _ => { break count - 2; },
            },
            369 => match curr_char {
                _ => { break count - 2; },
            },
            370 => match curr_char {
                _ => { break count - 2; },
            },
            371 => match curr_char {
                _ => { break count - 2; },
            },
            372 => match curr_char {
                Some(자모::초성(12615)  /* ㅇ */) => { curr_state = 403; continue; },
                _ => { break 0; },
            },
            373 => match curr_char {
                Some(자모::초성(12622)  /* ㅎ */) => { curr_state = 404; continue; },
                _ => { break 0; },
            },
            374 => match curr_char {
                _ => { break count - 1; },
            },
            375 => match curr_char {
                _ => { break count - 1; },
            },
            376 => match curr_char {
                _ => { break count - 2; },
            },
            377 => match curr_char {
                _ => { break count - 2; },
            },
            378 => match curr_char {
                _ => { break count - 2; },
            },
            379 => match curr_char {
                _ => { break count - 2; },
            },
            380 => match curr_char {
                _ => { break count - 2; },
            },
            381 => match curr_char {
                _ => { break count - 2; },
            },
            382 => match curr_char {
                _ => { break count - 2; },
            },
            383 => match curr_char {
                _ => { break count - 2; },
            },
            384 => match curr_char {
                _ => { break count - 2; },
            },
            385 => match curr_char {
                _ => { break count - 2; },
            },
            386 => match curr_char {
                _ => { break count - 2; },
            },
            387 => match curr_char {
                _ => { break count - 2; },
            },
            388 => match curr_char {
                _ => { break count - 2; },
            },
            389 => match curr_char {
                _ => { break count - 2; },
            },
            390 => match curr_char {
                _ => { break count - 2; },
            },
            391 => match curr_char {
                _ => { break count - 2; },
            },
            392 => match curr_char {
                _ => { break count - 2; },
            },
            393 => match curr_char {
                _ => { break count - 2; },
            },
            394 => match curr_char {
                _ => { break count - 2; },
            },
            395 => match curr_char {
                _ => { break count - 2; },
            },
            396 => match curr_char {
                _ => { break count - 2; },
            },
            397 => match curr_char {
                _ => { break count - 2; },
            },
            398 => match curr_char {
                _ => { break count - 2; },
            },
            399 => match curr_char {
                _ => { break count - 2; },
            },
            400 => match curr_char {
                _ => { break count - 2; },
            },
            401 => match curr_char {
                _ => { break count - 2; },
            },
            402 => match curr_char {
                _ => { break count - 2; },
            },
            403 => match curr_char {
                _ => { break count - 1; },
            },
            404 => match curr_char {
                _ => { break count - 1; },
            },
            _ => unreachable!(),
        }
    };

    assemble(&자모s[..(자모s.len() - cut_at)].to_vec())
}
