HEX
Server: Apache/2.4.41 (Ubuntu)
System: Linux ip-172-31-42-149 5.15.0-1084-aws #91~20.04.1-Ubuntu SMP Fri May 2 07:00:04 UTC 2025 aarch64
User: ubuntu (1000)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: //home/ubuntu/neovim/build/src/nvim/auto/regexp.c.i
# 1 "/home/ubuntu/neovim/src/nvim/regexp.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "/usr/include/stdc-predef.h" 1 3 4
# 1 "<command-line>" 2
# 1 "/home/ubuntu/neovim/src/nvim/regexp.c"
# 9 "/home/ubuntu/neovim/src/nvim/regexp.c"
# 1 "/usr/include/assert.h" 1 3 4
# 35 "/usr/include/assert.h" 3 4
# 1 "/usr/include/features.h" 1 3 4
# 461 "/usr/include/features.h" 3 4
# 1 "/usr/include/aarch64-linux-gnu/sys/cdefs.h" 1 3 4
# 452 "/usr/include/aarch64-linux-gnu/sys/cdefs.h" 3 4
# 1 "/usr/include/aarch64-linux-gnu/bits/wordsize.h" 1 3 4
# 453 "/usr/include/aarch64-linux-gnu/sys/cdefs.h" 2 3 4
# 1 "/usr/include/aarch64-linux-gnu/bits/long-double.h" 1 3 4
# 454 "/usr/include/aarch64-linux-gnu/sys/cdefs.h" 2 3 4
# 462 "/usr/include/features.h" 2 3 4
# 485 "/usr/include/features.h" 3 4
# 1 "/usr/include/aarch64-linux-gnu/gnu/stubs.h" 1 3 4




# 1 "/usr/include/aarch64-linux-gnu/bits/wordsize.h" 1 3 4
# 6 "/usr/include/aarch64-linux-gnu/gnu/stubs.h" 2 3 4


# 1 "/usr/include/aarch64-linux-gnu/gnu/stubs-lp64.h" 1 3 4
# 9 "/usr/include/aarch64-linux-gnu/gnu/stubs.h" 2 3 4
# 486 "/usr/include/features.h" 2 3 4
# 36 "/usr/include/assert.h" 2 3 4
# 66 "/usr/include/assert.h" 3 4




# 69 "/usr/include/assert.h" 3 4
extern void __assert_fail (const char *__assertion, const char *__file,
      unsigned int __line, const char *__function)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__noreturn__));


extern void __assert_perror_fail (int __errnum, const char *__file,
      unsigned int __line, const char *__function)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__noreturn__));




extern void __assert (const char *__assertion, const char *__file, int __line)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__noreturn__));



# 10 "/home/ubuntu/neovim/src/nvim/regexp.c" 2
# 1 "/usr/include/ctype.h" 1 3 4
# 26 "/usr/include/ctype.h" 3 4
# 1 "/usr/include/aarch64-linux-gnu/bits/types.h" 1 3 4
# 27 "/usr/include/aarch64-linux-gnu/bits/types.h" 3 4
# 1 "/usr/include/aarch64-linux-gnu/bits/wordsize.h" 1 3 4
# 28 "/usr/include/aarch64-linux-gnu/bits/types.h" 2 3 4
# 1 "/usr/include/aarch64-linux-gnu/bits/timesize.h" 1 3 4
# 19 "/usr/include/aarch64-linux-gnu/bits/timesize.h" 3 4
# 1 "/usr/include/aarch64-linux-gnu/bits/wordsize.h" 1 3 4
# 20 "/usr/include/aarch64-linux-gnu/bits/timesize.h" 2 3 4
# 29 "/usr/include/aarch64-linux-gnu/bits/types.h" 2 3 4


typedef unsigned char __u_char;
typedef unsigned short int __u_short;
typedef unsigned int __u_int;
typedef unsigned long int __u_long;


typedef signed char __int8_t;
typedef unsigned char __uint8_t;
typedef signed short int __int16_t;
typedef unsigned short int __uint16_t;
typedef signed int __int32_t;
typedef unsigned int __uint32_t;

typedef signed long int __int64_t;
typedef unsigned long int __uint64_t;






typedef __int8_t __int_least8_t;
typedef __uint8_t __uint_least8_t;
typedef __int16_t __int_least16_t;
typedef __uint16_t __uint_least16_t;
typedef __int32_t __int_least32_t;
typedef __uint32_t __uint_least32_t;
typedef __int64_t __int_least64_t;
typedef __uint64_t __uint_least64_t;



typedef long int __quad_t;
typedef unsigned long int __u_quad_t;







typedef long int __intmax_t;
typedef unsigned long int __uintmax_t;
# 141 "/usr/include/aarch64-linux-gnu/bits/types.h" 3 4
# 1 "/usr/include/aarch64-linux-gnu/bits/typesizes.h" 1 3 4
# 142 "/usr/include/aarch64-linux-gnu/bits/types.h" 2 3 4
# 1 "/usr/include/aarch64-linux-gnu/bits/time64.h" 1 3 4
# 143 "/usr/include/aarch64-linux-gnu/bits/types.h" 2 3 4


typedef unsigned long int __dev_t;
typedef unsigned int __uid_t;
typedef unsigned int __gid_t;
typedef unsigned long int __ino_t;
typedef unsigned long int __ino64_t;
typedef unsigned int __mode_t;
typedef unsigned int __nlink_t;
typedef long int __off_t;
typedef long int __off64_t;
typedef int __pid_t;
typedef struct { int __val[2]; } __fsid_t;
typedef long int __clock_t;
typedef unsigned long int __rlim_t;
typedef unsigned long int __rlim64_t;
typedef unsigned int __id_t;
typedef long int __time_t;
typedef unsigned int __useconds_t;
typedef long int __suseconds_t;

typedef int __daddr_t;
typedef int __key_t;


typedef int __clockid_t;


typedef void * __timer_t;


typedef int __blksize_t;




typedef long int __blkcnt_t;
typedef long int __blkcnt64_t;


typedef unsigned long int __fsblkcnt_t;
typedef unsigned long int __fsblkcnt64_t;


typedef unsigned long int __fsfilcnt_t;
typedef unsigned long int __fsfilcnt64_t;


typedef long int __fsword_t;

typedef long int __ssize_t;


typedef long int __syscall_slong_t;

typedef unsigned long int __syscall_ulong_t;



typedef __off64_t __loff_t;
typedef char *__caddr_t;


typedef long int __intptr_t;


typedef unsigned int __socklen_t;




typedef int __sig_atomic_t;
# 27 "/usr/include/ctype.h" 2 3 4


# 39 "/usr/include/ctype.h" 3 4
# 1 "/usr/include/aarch64-linux-gnu/bits/endian.h" 1 3 4
# 35 "/usr/include/aarch64-linux-gnu/bits/endian.h" 3 4
# 1 "/usr/include/aarch64-linux-gnu/bits/endianness.h" 1 3 4
# 36 "/usr/include/aarch64-linux-gnu/bits/endian.h" 2 3 4
# 40 "/usr/include/ctype.h" 2 3 4






enum
{
  _ISupper = ((0) < 8 ? ((1 << (0)) << 8) : ((1 << (0)) >> 8)),
  _ISlower = ((1) < 8 ? ((1 << (1)) << 8) : ((1 << (1)) >> 8)),
  _ISalpha = ((2) < 8 ? ((1 << (2)) << 8) : ((1 << (2)) >> 8)),
  _ISdigit = ((3) < 8 ? ((1 << (3)) << 8) : ((1 << (3)) >> 8)),
  _ISxdigit = ((4) < 8 ? ((1 << (4)) << 8) : ((1 << (4)) >> 8)),
  _ISspace = ((5) < 8 ? ((1 << (5)) << 8) : ((1 << (5)) >> 8)),
  _ISprint = ((6) < 8 ? ((1 << (6)) << 8) : ((1 << (6)) >> 8)),
  _ISgraph = ((7) < 8 ? ((1 << (7)) << 8) : ((1 << (7)) >> 8)),
  _ISblank = ((8) < 8 ? ((1 << (8)) << 8) : ((1 << (8)) >> 8)),
  _IScntrl = ((9) < 8 ? ((1 << (9)) << 8) : ((1 << (9)) >> 8)),
  _ISpunct = ((10) < 8 ? ((1 << (10)) << 8) : ((1 << (10)) >> 8)),
  _ISalnum = ((11) < 8 ? ((1 << (11)) << 8) : ((1 << (11)) >> 8))
};
# 79 "/usr/include/ctype.h" 3 4
extern const unsigned short int **__ctype_b_loc (void)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
extern const __int32_t **__ctype_tolower_loc (void)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
extern const __int32_t **__ctype_toupper_loc (void)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
# 108 "/usr/include/ctype.h" 3 4
extern int isalnum (int) __attribute__ ((__nothrow__ , __leaf__));
extern int isalpha (int) __attribute__ ((__nothrow__ , __leaf__));
extern int iscntrl (int) __attribute__ ((__nothrow__ , __leaf__));
extern int isdigit (int) __attribute__ ((__nothrow__ , __leaf__));
extern int islower (int) __attribute__ ((__nothrow__ , __leaf__));
extern int isgraph (int) __attribute__ ((__nothrow__ , __leaf__));
extern int isprint (int) __attribute__ ((__nothrow__ , __leaf__));
extern int ispunct (int) __attribute__ ((__nothrow__ , __leaf__));
extern int isspace (int) __attribute__ ((__nothrow__ , __leaf__));
extern int isupper (int) __attribute__ ((__nothrow__ , __leaf__));
extern int isxdigit (int) __attribute__ ((__nothrow__ , __leaf__));



extern int tolower (int __c) __attribute__ ((__nothrow__ , __leaf__));


extern int toupper (int __c) __attribute__ ((__nothrow__ , __leaf__));




extern int isblank (int) __attribute__ ((__nothrow__ , __leaf__));




extern int isctype (int __c, int __mask) __attribute__ ((__nothrow__ , __leaf__));






extern int isascii (int __c) __attribute__ ((__nothrow__ , __leaf__));



extern int toascii (int __c) __attribute__ ((__nothrow__ , __leaf__));



extern int _toupper (int) __attribute__ ((__nothrow__ , __leaf__));
extern int _tolower (int) __attribute__ ((__nothrow__ , __leaf__));
# 237 "/usr/include/ctype.h" 3 4
# 1 "/usr/include/aarch64-linux-gnu/bits/types/locale_t.h" 1 3 4
# 22 "/usr/include/aarch64-linux-gnu/bits/types/locale_t.h" 3 4
# 1 "/usr/include/aarch64-linux-gnu/bits/types/__locale_t.h" 1 3 4
# 28 "/usr/include/aarch64-linux-gnu/bits/types/__locale_t.h" 3 4
struct __locale_struct
{

  struct __locale_data *__locales[13];


  const unsigned short int *__ctype_b;
  const int *__ctype_tolower;
  const int *__ctype_toupper;


  const char *__names[13];
};

typedef struct __locale_struct *__locale_t;
# 23 "/usr/include/aarch64-linux-gnu/bits/types/locale_t.h" 2 3 4

typedef __locale_t locale_t;
# 238 "/usr/include/ctype.h" 2 3 4
# 251 "/usr/include/ctype.h" 3 4
extern int isalnum_l (int, locale_t) __attribute__ ((__nothrow__ , __leaf__));
extern int isalpha_l (int, locale_t) __attribute__ ((__nothrow__ , __leaf__));
extern int iscntrl_l (int, locale_t) __attribute__ ((__nothrow__ , __leaf__));
extern int isdigit_l (int, locale_t) __attribute__ ((__nothrow__ , __leaf__));
extern int islower_l (int, locale_t) __attribute__ ((__nothrow__ , __leaf__));
extern int isgraph_l (int, locale_t) __attribute__ ((__nothrow__ , __leaf__));
extern int isprint_l (int, locale_t) __attribute__ ((__nothrow__ , __leaf__));
extern int ispunct_l (int, locale_t) __attribute__ ((__nothrow__ , __leaf__));
extern int isspace_l (int, locale_t) __attribute__ ((__nothrow__ , __leaf__));
extern int isupper_l (int, locale_t) __attribute__ ((__nothrow__ , __leaf__));
extern int isxdigit_l (int, locale_t) __attribute__ ((__nothrow__ , __leaf__));

extern int isblank_l (int, locale_t) __attribute__ ((__nothrow__ , __leaf__));



extern int __tolower_l (int __c, locale_t __l) __attribute__ ((__nothrow__ , __leaf__));
extern int tolower_l (int __c, locale_t __l) __attribute__ ((__nothrow__ , __leaf__));


extern int __toupper_l (int __c, locale_t __l) __attribute__ ((__nothrow__ , __leaf__));
extern int toupper_l (int __c, locale_t __l) __attribute__ ((__nothrow__ , __leaf__));
# 327 "/usr/include/ctype.h" 3 4

# 11 "/home/ubuntu/neovim/src/nvim/regexp.c" 2
# 1 "/usr/include/inttypes.h" 1 3 4
# 27 "/usr/include/inttypes.h" 3 4
# 1 "/usr/lib/gcc/aarch64-linux-gnu/9/include/stdint.h" 1 3 4
# 9 "/usr/lib/gcc/aarch64-linux-gnu/9/include/stdint.h" 3 4
# 1 "/usr/include/stdint.h" 1 3 4
# 26 "/usr/include/stdint.h" 3 4
# 1 "/usr/include/aarch64-linux-gnu/bits/libc-header-start.h" 1 3 4
# 27 "/usr/include/stdint.h" 2 3 4

# 1 "/usr/include/aarch64-linux-gnu/bits/wchar.h" 1 3 4
# 29 "/usr/include/stdint.h" 2 3 4
# 1 "/usr/include/aarch64-linux-gnu/bits/wordsize.h" 1 3 4
# 30 "/usr/include/stdint.h" 2 3 4




# 1 "/usr/include/aarch64-linux-gnu/bits/stdint-intn.h" 1 3 4
# 24 "/usr/include/aarch64-linux-gnu/bits/stdint-intn.h" 3 4
typedef __int8_t int8_t;
typedef __int16_t int16_t;
typedef __int32_t int32_t;
typedef __int64_t int64_t;
# 35 "/usr/include/stdint.h" 2 3 4


# 1 "/usr/include/aarch64-linux-gnu/bits/stdint-uintn.h" 1 3 4
# 24 "/usr/include/aarch64-linux-gnu/bits/stdint-uintn.h" 3 4
typedef __uint8_t uint8_t;
typedef __uint16_t uint16_t;
typedef __uint32_t uint32_t;
typedef __uint64_t uint64_t;
# 38 "/usr/include/stdint.h" 2 3 4





typedef __int_least8_t int_least8_t;
typedef __int_least16_t int_least16_t;
typedef __int_least32_t int_least32_t;
typedef __int_least64_t int_least64_t;


typedef __uint_least8_t uint_least8_t;
typedef __uint_least16_t uint_least16_t;
typedef __uint_least32_t uint_least32_t;
typedef __uint_least64_t uint_least64_t;





typedef signed char int_fast8_t;

typedef long int int_fast16_t;
typedef long int int_fast32_t;
typedef long int int_fast64_t;
# 71 "/usr/include/stdint.h" 3 4
typedef unsigned char uint_fast8_t;

typedef unsigned long int uint_fast16_t;
typedef unsigned long int uint_fast32_t;
typedef unsigned long int uint_fast64_t;
# 87 "/usr/include/stdint.h" 3 4
typedef long int intptr_t;


typedef unsigned long int uintptr_t;
# 101 "/usr/include/stdint.h" 3 4
typedef __intmax_t intmax_t;
typedef __uintmax_t uintmax_t;
# 10 "/usr/lib/gcc/aarch64-linux-gnu/9/include/stdint.h" 2 3 4
# 28 "/usr/include/inttypes.h" 2 3 4






typedef unsigned int __gwchar_t;
# 266 "/usr/include/inttypes.h" 3 4





typedef struct
  {
    long int quot;
    long int rem;
  } imaxdiv_t;
# 290 "/usr/include/inttypes.h" 3 4
extern intmax_t imaxabs (intmax_t __n) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));


extern imaxdiv_t imaxdiv (intmax_t __numer, intmax_t __denom)
      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));


extern intmax_t strtoimax (const char *__restrict __nptr,
      char **__restrict __endptr, int __base) __attribute__ ((__nothrow__ , __leaf__));


extern uintmax_t strtoumax (const char *__restrict __nptr,
       char ** __restrict __endptr, int __base) __attribute__ ((__nothrow__ , __leaf__));


extern intmax_t wcstoimax (const __gwchar_t *__restrict __nptr,
      __gwchar_t **__restrict __endptr, int __base)
     __attribute__ ((__nothrow__ , __leaf__));


extern uintmax_t wcstoumax (const __gwchar_t *__restrict __nptr,
       __gwchar_t ** __restrict __endptr, int __base)
     __attribute__ ((__nothrow__ , __leaf__));
# 432 "/usr/include/inttypes.h" 3 4

# 12 "/home/ubuntu/neovim/src/nvim/regexp.c" 2
# 1 "/usr/lib/gcc/aarch64-linux-gnu/9/include/limits.h" 1 3 4
# 34 "/usr/lib/gcc/aarch64-linux-gnu/9/include/limits.h" 3 4
# 1 "/usr/lib/gcc/aarch64-linux-gnu/9/include/syslimits.h" 1 3 4






# 1 "/usr/lib/gcc/aarch64-linux-gnu/9/include/limits.h" 1 3 4
# 194 "/usr/lib/gcc/aarch64-linux-gnu/9/include/limits.h" 3 4
# 1 "/usr/include/limits.h" 1 3 4
# 26 "/usr/include/limits.h" 3 4
# 1 "/usr/include/aarch64-linux-gnu/bits/libc-header-start.h" 1 3 4
# 27 "/usr/include/limits.h" 2 3 4
# 183 "/usr/include/limits.h" 3 4
# 1 "/usr/include/aarch64-linux-gnu/bits/posix1_lim.h" 1 3 4
# 27 "/usr/include/aarch64-linux-gnu/bits/posix1_lim.h" 3 4
# 1 "/usr/include/aarch64-linux-gnu/bits/wordsize.h" 1 3 4
# 28 "/usr/include/aarch64-linux-gnu/bits/posix1_lim.h" 2 3 4
# 161 "/usr/include/aarch64-linux-gnu/bits/posix1_lim.h" 3 4
# 1 "/usr/include/aarch64-linux-gnu/bits/local_lim.h" 1 3 4
# 39 "/usr/include/aarch64-linux-gnu/bits/local_lim.h" 3 4
# 1 "/usr/include/linux/limits.h" 1 3 4
# 40 "/usr/include/aarch64-linux-gnu/bits/local_lim.h" 2 3 4
# 162 "/usr/include/aarch64-linux-gnu/bits/posix1_lim.h" 2 3 4
# 184 "/usr/include/limits.h" 2 3 4



# 1 "/usr/include/aarch64-linux-gnu/bits/posix2_lim.h" 1 3 4
# 188 "/usr/include/limits.h" 2 3 4



# 1 "/usr/include/aarch64-linux-gnu/bits/xopen_lim.h" 1 3 4
# 64 "/usr/include/aarch64-linux-gnu/bits/xopen_lim.h" 3 4
# 1 "/usr/include/aarch64-linux-gnu/bits/uio_lim.h" 1 3 4
# 65 "/usr/include/aarch64-linux-gnu/bits/xopen_lim.h" 2 3 4
# 192 "/usr/include/limits.h" 2 3 4
# 195 "/usr/lib/gcc/aarch64-linux-gnu/9/include/limits.h" 2 3 4
# 8 "/usr/lib/gcc/aarch64-linux-gnu/9/include/syslimits.h" 2 3 4
# 35 "/usr/lib/gcc/aarch64-linux-gnu/9/include/limits.h" 2 3 4
# 13 "/home/ubuntu/neovim/src/nvim/regexp.c" 2
# 1 "/usr/lib/gcc/aarch64-linux-gnu/9/include/stdbool.h" 1 3 4
# 14 "/home/ubuntu/neovim/src/nvim/regexp.c" 2
# 1 "/usr/lib/gcc/aarch64-linux-gnu/9/include/stddef.h" 1 3 4
# 143 "/usr/lib/gcc/aarch64-linux-gnu/9/include/stddef.h" 3 4
typedef long int ptrdiff_t;
# 209 "/usr/lib/gcc/aarch64-linux-gnu/9/include/stddef.h" 3 4
typedef long unsigned int size_t;
# 321 "/usr/lib/gcc/aarch64-linux-gnu/9/include/stddef.h" 3 4
typedef unsigned int wchar_t;
# 415 "/usr/lib/gcc/aarch64-linux-gnu/9/include/stddef.h" 3 4
typedef struct {
  long long __max_align_ll __attribute__((__aligned__(__alignof__(long long))));
  long double __max_align_ld __attribute__((__aligned__(__alignof__(long double))));
# 426 "/usr/lib/gcc/aarch64-linux-gnu/9/include/stddef.h" 3 4
} max_align_t;
# 15 "/home/ubuntu/neovim/src/nvim/regexp.c" 2
# 1 "/usr/include/string.h" 1 3 4
# 26 "/usr/include/string.h" 3 4
# 1 "/usr/include/aarch64-linux-gnu/bits/libc-header-start.h" 1 3 4
# 27 "/usr/include/string.h" 2 3 4






# 1 "/usr/lib/gcc/aarch64-linux-gnu/9/include/stddef.h" 1 3 4
# 34 "/usr/include/string.h" 2 3 4
# 43 "/usr/include/string.h" 3 4
extern void *memcpy (void *__restrict __dest, const void *__restrict __src,
       size_t __n) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));


extern void *memmove (void *__dest, const void *__src, size_t __n)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));





extern void *memccpy (void *__restrict __dest, const void *__restrict __src,
        int __c, size_t __n)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));




extern void *memset (void *__s, int __c, size_t __n) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));


extern int memcmp (const void *__s1, const void *__s2, size_t __n)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
# 91 "/usr/include/string.h" 3 4
extern void *memchr (const void *__s, int __c, size_t __n)
      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
# 104 "/usr/include/string.h" 3 4
extern void *rawmemchr (const void *__s, int __c)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
# 115 "/usr/include/string.h" 3 4
extern void *memrchr (const void *__s, int __c, size_t __n)
      __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));





extern char *strcpy (char *__restrict __dest, const char *__restrict __src)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));

extern char *strncpy (char *__restrict __dest,
        const char *__restrict __src, size_t __n)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));


extern char *strcat (char *__restrict __dest, const char *__restrict __src)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));

extern char *strncat (char *__restrict __dest, const char *__restrict __src,
        size_t __n) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));


extern int strcmp (const char *__s1, const char *__s2)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));

extern int strncmp (const char *__s1, const char *__s2, size_t __n)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));


extern int strcoll (const char *__s1, const char *__s2)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));

extern size_t strxfrm (char *__restrict __dest,
         const char *__restrict __src, size_t __n)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2)));






extern int strcoll_l (const char *__s1, const char *__s2, locale_t __l)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2, 3)));


extern size_t strxfrm_l (char *__dest, const char *__src, size_t __n,
    locale_t __l) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2, 4)));





extern char *strdup (const char *__s)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__malloc__)) __attribute__ ((__nonnull__ (1)));






extern char *strndup (const char *__string, size_t __n)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__malloc__)) __attribute__ ((__nonnull__ (1)));
# 226 "/usr/include/string.h" 3 4
extern char *strchr (const char *__s, int __c)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
# 253 "/usr/include/string.h" 3 4
extern char *strrchr (const char *__s, int __c)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
# 266 "/usr/include/string.h" 3 4
extern char *strchrnul (const char *__s, int __c)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));





extern size_t strcspn (const char *__s, const char *__reject)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));


extern size_t strspn (const char *__s, const char *__accept)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
# 303 "/usr/include/string.h" 3 4
extern char *strpbrk (const char *__s, const char *__accept)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
# 330 "/usr/include/string.h" 3 4
extern char *strstr (const char *__haystack, const char *__needle)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));




extern char *strtok (char *__restrict __s, const char *__restrict __delim)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2)));



extern char *__strtok_r (char *__restrict __s,
    const char *__restrict __delim,
    char **__restrict __save_ptr)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2, 3)));

extern char *strtok_r (char *__restrict __s, const char *__restrict __delim,
         char **__restrict __save_ptr)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2, 3)));
# 360 "/usr/include/string.h" 3 4
extern char *strcasestr (const char *__haystack, const char *__needle)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));







extern void *memmem (const void *__haystack, size_t __haystacklen,
       const void *__needle, size_t __needlelen)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 3)));



extern void *__mempcpy (void *__restrict __dest,
   const void *__restrict __src, size_t __n)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
extern void *mempcpy (void *__restrict __dest,
        const void *__restrict __src, size_t __n)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));




extern size_t strlen (const char *__s)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));




extern size_t strnlen (const char *__string, size_t __maxlen)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));




extern char *strerror (int __errnum) __attribute__ ((__nothrow__ , __leaf__));
# 421 "/usr/include/string.h" 3 4
extern char *strerror_r (int __errnum, char *__buf, size_t __buflen)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2))) ;





extern char *strerror_l (int __errnum, locale_t __l) __attribute__ ((__nothrow__ , __leaf__));



# 1 "/usr/include/strings.h" 1 3 4
# 23 "/usr/include/strings.h" 3 4
# 1 "/usr/lib/gcc/aarch64-linux-gnu/9/include/stddef.h" 1 3 4
# 24 "/usr/include/strings.h" 2 3 4










extern int bcmp (const void *__s1, const void *__s2, size_t __n)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));


extern void bcopy (const void *__src, void *__dest, size_t __n)
  __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));


extern void bzero (void *__s, size_t __n) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
# 68 "/usr/include/strings.h" 3 4
extern char *index (const char *__s, int __c)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
# 96 "/usr/include/strings.h" 3 4
extern char *rindex (const char *__s, int __c)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));






extern int ffs (int __i) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));





extern int ffsl (long int __l) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
__extension__ extern int ffsll (long long int __ll)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));



extern int strcasecmp (const char *__s1, const char *__s2)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));


extern int strncasecmp (const char *__s1, const char *__s2, size_t __n)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));






extern int strcasecmp_l (const char *__s1, const char *__s2, locale_t __loc)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2, 3)));



extern int strncasecmp_l (const char *__s1, const char *__s2,
     size_t __n, locale_t __loc)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2, 4)));



# 433 "/usr/include/string.h" 2 3 4



extern void explicit_bzero (void *__s, size_t __n) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));



extern char *strsep (char **__restrict __stringp,
       const char *__restrict __delim)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));




extern char *strsignal (int __sig) __attribute__ ((__nothrow__ , __leaf__));


extern char *__stpcpy (char *__restrict __dest, const char *__restrict __src)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
extern char *stpcpy (char *__restrict __dest, const char *__restrict __src)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));



extern char *__stpncpy (char *__restrict __dest,
   const char *__restrict __src, size_t __n)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
extern char *stpncpy (char *__restrict __dest,
        const char *__restrict __src, size_t __n)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));




extern int strverscmp (const char *__s1, const char *__s2)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));


extern char *strfry (char *__string) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));


extern void *memfrob (void *__s, size_t __n) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
# 487 "/usr/include/string.h" 3 4
extern char *basename (const char *__filename) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
# 499 "/usr/include/string.h" 3 4

# 16 "/home/ubuntu/neovim/src/nvim/regexp.c" 2
# 1 "/home/ubuntu/neovim/.deps/usr/include/uv.h" 1
# 56 "/home/ubuntu/neovim/.deps/usr/include/uv.h"
# 1 "/home/ubuntu/neovim/.deps/usr/include/uv/errno.h" 1
# 25 "/home/ubuntu/neovim/.deps/usr/include/uv/errno.h"
# 1 "/usr/include/errno.h" 1 3 4
# 28 "/usr/include/errno.h" 3 4
# 1 "/usr/include/aarch64-linux-gnu/bits/errno.h" 1 3 4
# 26 "/usr/include/aarch64-linux-gnu/bits/errno.h" 3 4
# 1 "/usr/include/linux/errno.h" 1 3 4
# 1 "/usr/include/aarch64-linux-gnu/asm/errno.h" 1 3 4
# 1 "/usr/include/asm-generic/errno.h" 1 3 4




# 1 "/usr/include/asm-generic/errno-base.h" 1 3 4
# 6 "/usr/include/asm-generic/errno.h" 2 3 4
# 1 "/usr/include/aarch64-linux-gnu/asm/errno.h" 2 3 4
# 1 "/usr/include/linux/errno.h" 2 3 4
# 27 "/usr/include/aarch64-linux-gnu/bits/errno.h" 2 3 4
# 29 "/usr/include/errno.h" 2 3 4








extern int *__errno_location (void) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));







extern char *program_invocation_name;
extern char *program_invocation_short_name;

# 1 "/usr/include/aarch64-linux-gnu/bits/types/error_t.h" 1 3 4
# 22 "/usr/include/aarch64-linux-gnu/bits/types/error_t.h" 3 4
typedef int error_t;
# 49 "/usr/include/errno.h" 2 3 4




# 26 "/home/ubuntu/neovim/.deps/usr/include/uv/errno.h" 2
# 57 "/home/ubuntu/neovim/.deps/usr/include/uv.h" 2
# 1 "/home/ubuntu/neovim/.deps/usr/include/uv/version.h" 1
# 58 "/home/ubuntu/neovim/.deps/usr/include/uv.h" 2
# 1 "/usr/lib/gcc/aarch64-linux-gnu/9/include/stddef.h" 1 3 4
# 59 "/home/ubuntu/neovim/.deps/usr/include/uv.h" 2
# 1 "/usr/include/stdio.h" 1 3 4
# 27 "/usr/include/stdio.h" 3 4
# 1 "/usr/include/aarch64-linux-gnu/bits/libc-header-start.h" 1 3 4
# 28 "/usr/include/stdio.h" 2 3 4





# 1 "/usr/lib/gcc/aarch64-linux-gnu/9/include/stddef.h" 1 3 4
# 34 "/usr/include/stdio.h" 2 3 4


# 1 "/usr/lib/gcc/aarch64-linux-gnu/9/include/stdarg.h" 1 3 4
# 40 "/usr/lib/gcc/aarch64-linux-gnu/9/include/stdarg.h" 3 4
typedef __builtin_va_list __gnuc_va_list;
# 37 "/usr/include/stdio.h" 2 3 4


# 1 "/usr/include/aarch64-linux-gnu/bits/types/__fpos_t.h" 1 3 4




# 1 "/usr/include/aarch64-linux-gnu/bits/types/__mbstate_t.h" 1 3 4
# 13 "/usr/include/aarch64-linux-gnu/bits/types/__mbstate_t.h" 3 4
typedef struct
{
  int __count;
  union
  {
    unsigned int __wch;
    char __wchb[4];
  } __value;
} __mbstate_t;
# 6 "/usr/include/aarch64-linux-gnu/bits/types/__fpos_t.h" 2 3 4




typedef struct _G_fpos_t
{
  __off_t __pos;
  __mbstate_t __state;
} __fpos_t;
# 40 "/usr/include/stdio.h" 2 3 4
# 1 "/usr/include/aarch64-linux-gnu/bits/types/__fpos64_t.h" 1 3 4
# 10 "/usr/include/aarch64-linux-gnu/bits/types/__fpos64_t.h" 3 4
typedef struct _G_fpos64_t
{
  __off64_t __pos;
  __mbstate_t __state;
} __fpos64_t;
# 41 "/usr/include/stdio.h" 2 3 4
# 1 "/usr/include/aarch64-linux-gnu/bits/types/__FILE.h" 1 3 4



struct _IO_FILE;
typedef struct _IO_FILE __FILE;
# 42 "/usr/include/stdio.h" 2 3 4
# 1 "/usr/include/aarch64-linux-gnu/bits/types/FILE.h" 1 3 4



struct _IO_FILE;


typedef struct _IO_FILE FILE;
# 43 "/usr/include/stdio.h" 2 3 4
# 1 "/usr/include/aarch64-linux-gnu/bits/types/struct_FILE.h" 1 3 4
# 35 "/usr/include/aarch64-linux-gnu/bits/types/struct_FILE.h" 3 4
struct _IO_FILE;
struct _IO_marker;
struct _IO_codecvt;
struct _IO_wide_data;




typedef void _IO_lock_t;





struct _IO_FILE
{
  int _flags;


  char *_IO_read_ptr;
  char *_IO_read_end;
  char *_IO_read_base;
  char *_IO_write_base;
  char *_IO_write_ptr;
  char *_IO_write_end;
  char *_IO_buf_base;
  char *_IO_buf_end;


  char *_IO_save_base;
  char *_IO_backup_base;
  char *_IO_save_end;

  struct _IO_marker *_markers;

  struct _IO_FILE *_chain;

  int _fileno;
  int _flags2;
  __off_t _old_offset;


  unsigned short _cur_column;
  signed char _vtable_offset;
  char _shortbuf[1];

  _IO_lock_t *_lock;







  __off64_t _offset;

  struct _IO_codecvt *_codecvt;
  struct _IO_wide_data *_wide_data;
  struct _IO_FILE *_freeres_list;
  void *_freeres_buf;
  size_t __pad5;
  int _mode;

  char _unused2[15 * sizeof (int) - 4 * sizeof (void *) - sizeof (size_t)];
};
# 44 "/usr/include/stdio.h" 2 3 4


# 1 "/usr/include/aarch64-linux-gnu/bits/types/cookie_io_functions_t.h" 1 3 4
# 27 "/usr/include/aarch64-linux-gnu/bits/types/cookie_io_functions_t.h" 3 4
typedef __ssize_t cookie_read_function_t (void *__cookie, char *__buf,
                                          size_t __nbytes);







typedef __ssize_t cookie_write_function_t (void *__cookie, const char *__buf,
                                           size_t __nbytes);







typedef int cookie_seek_function_t (void *__cookie, __off64_t *__pos, int __w);


typedef int cookie_close_function_t (void *__cookie);






typedef struct _IO_cookie_io_functions_t
{
  cookie_read_function_t *read;
  cookie_write_function_t *write;
  cookie_seek_function_t *seek;
  cookie_close_function_t *close;
} cookie_io_functions_t;
# 47 "/usr/include/stdio.h" 2 3 4





typedef __gnuc_va_list va_list;
# 63 "/usr/include/stdio.h" 3 4
typedef __off_t off_t;






typedef __off64_t off64_t;






typedef __ssize_t ssize_t;






typedef __fpos_t fpos_t;




typedef __fpos64_t fpos64_t;
# 133 "/usr/include/stdio.h" 3 4
# 1 "/usr/include/aarch64-linux-gnu/bits/stdio_lim.h" 1 3 4
# 134 "/usr/include/stdio.h" 2 3 4



extern FILE *stdin;
extern FILE *stdout;
extern FILE *stderr;






extern int remove (const char *__filename) __attribute__ ((__nothrow__ , __leaf__));

extern int rename (const char *__old, const char *__new) __attribute__ ((__nothrow__ , __leaf__));



extern int renameat (int __oldfd, const char *__old, int __newfd,
       const char *__new) __attribute__ ((__nothrow__ , __leaf__));
# 164 "/usr/include/stdio.h" 3 4
extern int renameat2 (int __oldfd, const char *__old, int __newfd,
        const char *__new, unsigned int __flags) __attribute__ ((__nothrow__ , __leaf__));







extern FILE *tmpfile (void) ;
# 183 "/usr/include/stdio.h" 3 4
extern FILE *tmpfile64 (void) ;



extern char *tmpnam (char *__s) __attribute__ ((__nothrow__ , __leaf__)) ;




extern char *tmpnam_r (char *__s) __attribute__ ((__nothrow__ , __leaf__)) ;
# 204 "/usr/include/stdio.h" 3 4
extern char *tempnam (const char *__dir, const char *__pfx)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__malloc__)) ;







extern int fclose (FILE *__stream);




extern int fflush (FILE *__stream);
# 227 "/usr/include/stdio.h" 3 4
extern int fflush_unlocked (FILE *__stream);
# 237 "/usr/include/stdio.h" 3 4
extern int fcloseall (void);
# 246 "/usr/include/stdio.h" 3 4
extern FILE *fopen (const char *__restrict __filename,
      const char *__restrict __modes) ;




extern FILE *freopen (const char *__restrict __filename,
        const char *__restrict __modes,
        FILE *__restrict __stream) ;
# 270 "/usr/include/stdio.h" 3 4
extern FILE *fopen64 (const char *__restrict __filename,
        const char *__restrict __modes) ;
extern FILE *freopen64 (const char *__restrict __filename,
   const char *__restrict __modes,
   FILE *__restrict __stream) ;




extern FILE *fdopen (int __fd, const char *__modes) __attribute__ ((__nothrow__ , __leaf__)) ;





extern FILE *fopencookie (void *__restrict __magic_cookie,
     const char *__restrict __modes,
     cookie_io_functions_t __io_funcs) __attribute__ ((__nothrow__ , __leaf__)) ;




extern FILE *fmemopen (void *__s, size_t __len, const char *__modes)
  __attribute__ ((__nothrow__ , __leaf__)) ;




extern FILE *open_memstream (char **__bufloc, size_t *__sizeloc) __attribute__ ((__nothrow__ , __leaf__)) ;





extern void setbuf (FILE *__restrict __stream, char *__restrict __buf) __attribute__ ((__nothrow__ , __leaf__));



extern int setvbuf (FILE *__restrict __stream, char *__restrict __buf,
      int __modes, size_t __n) __attribute__ ((__nothrow__ , __leaf__));




extern void setbuffer (FILE *__restrict __stream, char *__restrict __buf,
         size_t __size) __attribute__ ((__nothrow__ , __leaf__));


extern void setlinebuf (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__));







extern int fprintf (FILE *__restrict __stream,
      const char *__restrict __format, ...);




extern int printf (const char *__restrict __format, ...);

extern int sprintf (char *__restrict __s,
      const char *__restrict __format, ...) __attribute__ ((__nothrow__));





extern int vfprintf (FILE *__restrict __s, const char *__restrict __format,
       __gnuc_va_list __arg);




extern int vprintf (const char *__restrict __format, __gnuc_va_list __arg);

extern int vsprintf (char *__restrict __s, const char *__restrict __format,
       __gnuc_va_list __arg) __attribute__ ((__nothrow__));



extern int snprintf (char *__restrict __s, size_t __maxlen,
       const char *__restrict __format, ...)
     __attribute__ ((__nothrow__)) __attribute__ ((__format__ (__printf__, 3, 4)));

extern int vsnprintf (char *__restrict __s, size_t __maxlen,
        const char *__restrict __format, __gnuc_va_list __arg)
     __attribute__ ((__nothrow__)) __attribute__ ((__format__ (__printf__, 3, 0)));





extern int vasprintf (char **__restrict __ptr, const char *__restrict __f,
        __gnuc_va_list __arg)
     __attribute__ ((__nothrow__)) __attribute__ ((__format__ (__printf__, 2, 0))) ;
extern int __asprintf (char **__restrict __ptr,
         const char *__restrict __fmt, ...)
     __attribute__ ((__nothrow__)) __attribute__ ((__format__ (__printf__, 2, 3))) ;
extern int asprintf (char **__restrict __ptr,
       const char *__restrict __fmt, ...)
     __attribute__ ((__nothrow__)) __attribute__ ((__format__ (__printf__, 2, 3))) ;




extern int vdprintf (int __fd, const char *__restrict __fmt,
       __gnuc_va_list __arg)
     __attribute__ ((__format__ (__printf__, 2, 0)));
extern int dprintf (int __fd, const char *__restrict __fmt, ...)
     __attribute__ ((__format__ (__printf__, 2, 3)));







extern int fscanf (FILE *__restrict __stream,
     const char *__restrict __format, ...) ;




extern int scanf (const char *__restrict __format, ...) ;

extern int sscanf (const char *__restrict __s,
     const char *__restrict __format, ...) __attribute__ ((__nothrow__ , __leaf__));






extern int fscanf (FILE *__restrict __stream, const char *__restrict __format, ...) __asm__ ("" "__isoc99_fscanf")

                               ;
extern int scanf (const char *__restrict __format, ...) __asm__ ("" "__isoc99_scanf")
                              ;
extern int sscanf (const char *__restrict __s, const char *__restrict __format, ...) __asm__ ("" "__isoc99_sscanf") __attribute__ ((__nothrow__ , __leaf__))

                      ;
# 432 "/usr/include/stdio.h" 3 4
extern int vfscanf (FILE *__restrict __s, const char *__restrict __format,
      __gnuc_va_list __arg)
     __attribute__ ((__format__ (__scanf__, 2, 0))) ;





extern int vscanf (const char *__restrict __format, __gnuc_va_list __arg)
     __attribute__ ((__format__ (__scanf__, 1, 0))) ;


extern int vsscanf (const char *__restrict __s,
      const char *__restrict __format, __gnuc_va_list __arg)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__format__ (__scanf__, 2, 0)));




extern int vfscanf (FILE *__restrict __s, const char *__restrict __format, __gnuc_va_list __arg) __asm__ ("" "__isoc99_vfscanf")



     __attribute__ ((__format__ (__scanf__, 2, 0))) ;
extern int vscanf (const char *__restrict __format, __gnuc_va_list __arg) __asm__ ("" "__isoc99_vscanf")

     __attribute__ ((__format__ (__scanf__, 1, 0))) ;
extern int vsscanf (const char *__restrict __s, const char *__restrict __format, __gnuc_va_list __arg) __asm__ ("" "__isoc99_vsscanf") __attribute__ ((__nothrow__ , __leaf__))



     __attribute__ ((__format__ (__scanf__, 2, 0)));
# 485 "/usr/include/stdio.h" 3 4
extern int fgetc (FILE *__stream);
extern int getc (FILE *__stream);





extern int getchar (void);






extern int getc_unlocked (FILE *__stream);
extern int getchar_unlocked (void);
# 510 "/usr/include/stdio.h" 3 4
extern int fgetc_unlocked (FILE *__stream);
# 521 "/usr/include/stdio.h" 3 4
extern int fputc (int __c, FILE *__stream);
extern int putc (int __c, FILE *__stream);





extern int putchar (int __c);
# 537 "/usr/include/stdio.h" 3 4
extern int fputc_unlocked (int __c, FILE *__stream);







extern int putc_unlocked (int __c, FILE *__stream);
extern int putchar_unlocked (int __c);






extern int getw (FILE *__stream);


extern int putw (int __w, FILE *__stream);







extern char *fgets (char *__restrict __s, int __n, FILE *__restrict __stream)
     ;
# 587 "/usr/include/stdio.h" 3 4
extern char *fgets_unlocked (char *__restrict __s, int __n,
        FILE *__restrict __stream) ;
# 603 "/usr/include/stdio.h" 3 4
extern __ssize_t __getdelim (char **__restrict __lineptr,
                             size_t *__restrict __n, int __delimiter,
                             FILE *__restrict __stream) ;
extern __ssize_t getdelim (char **__restrict __lineptr,
                           size_t *__restrict __n, int __delimiter,
                           FILE *__restrict __stream) ;







extern __ssize_t getline (char **__restrict __lineptr,
                          size_t *__restrict __n,
                          FILE *__restrict __stream) ;







extern int fputs (const char *__restrict __s, FILE *__restrict __stream);





extern int puts (const char *__s);






extern int ungetc (int __c, FILE *__stream);






extern size_t fread (void *__restrict __ptr, size_t __size,
       size_t __n, FILE *__restrict __stream) ;




extern size_t fwrite (const void *__restrict __ptr, size_t __size,
        size_t __n, FILE *__restrict __s);
# 662 "/usr/include/stdio.h" 3 4
extern int fputs_unlocked (const char *__restrict __s,
      FILE *__restrict __stream);
# 673 "/usr/include/stdio.h" 3 4
extern size_t fread_unlocked (void *__restrict __ptr, size_t __size,
         size_t __n, FILE *__restrict __stream) ;
extern size_t fwrite_unlocked (const void *__restrict __ptr, size_t __size,
          size_t __n, FILE *__restrict __stream);







extern int fseek (FILE *__stream, long int __off, int __whence);




extern long int ftell (FILE *__stream) ;




extern void rewind (FILE *__stream);
# 707 "/usr/include/stdio.h" 3 4
extern int fseeko (FILE *__stream, __off_t __off, int __whence);




extern __off_t ftello (FILE *__stream) ;
# 731 "/usr/include/stdio.h" 3 4
extern int fgetpos (FILE *__restrict __stream, fpos_t *__restrict __pos);




extern int fsetpos (FILE *__stream, const fpos_t *__pos);
# 750 "/usr/include/stdio.h" 3 4
extern int fseeko64 (FILE *__stream, __off64_t __off, int __whence);
extern __off64_t ftello64 (FILE *__stream) ;
extern int fgetpos64 (FILE *__restrict __stream, fpos64_t *__restrict __pos);
extern int fsetpos64 (FILE *__stream, const fpos64_t *__pos);



extern void clearerr (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__));

extern int feof (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__)) ;

extern int ferror (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__)) ;



extern void clearerr_unlocked (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__));
extern int feof_unlocked (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__)) ;
extern int ferror_unlocked (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__)) ;







extern void perror (const char *__s);





# 1 "/usr/include/aarch64-linux-gnu/bits/sys_errlist.h" 1 3 4
# 26 "/usr/include/aarch64-linux-gnu/bits/sys_errlist.h" 3 4
extern int sys_nerr;
extern const char *const sys_errlist[];


extern int _sys_nerr;
extern const char *const _sys_errlist[];
# 782 "/usr/include/stdio.h" 2 3 4




extern int fileno (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__)) ;




extern int fileno_unlocked (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__)) ;
# 800 "/usr/include/stdio.h" 3 4
extern FILE *popen (const char *__command, const char *__modes) ;





extern int pclose (FILE *__stream);





extern char *ctermid (char *__s) __attribute__ ((__nothrow__ , __leaf__));





extern char *cuserid (char *__s);




struct obstack;


extern int obstack_printf (struct obstack *__restrict __obstack,
      const char *__restrict __format, ...)
     __attribute__ ((__nothrow__)) __attribute__ ((__format__ (__printf__, 2, 3)));
extern int obstack_vprintf (struct obstack *__restrict __obstack,
       const char *__restrict __format,
       __gnuc_va_list __args)
     __attribute__ ((__nothrow__)) __attribute__ ((__format__ (__printf__, 2, 0)));







extern void flockfile (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__));



extern int ftrylockfile (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__)) ;


extern void funlockfile (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__));
# 858 "/usr/include/stdio.h" 3 4
extern int __uflow (FILE *);
extern int __overflow (FILE *, int);
# 873 "/usr/include/stdio.h" 3 4

# 60 "/home/ubuntu/neovim/.deps/usr/include/uv.h" 2




# 63 "/home/ubuntu/neovim/.deps/usr/include/uv.h"
struct uv__queue {
  struct uv__queue* next;
  struct uv__queue* prev;
};




# 1 "/home/ubuntu/neovim/.deps/usr/include/uv/unix.h" 1
# 25 "/home/ubuntu/neovim/.deps/usr/include/uv/unix.h"
# 1 "/usr/include/aarch64-linux-gnu/sys/types.h" 1 3 4
# 27 "/usr/include/aarch64-linux-gnu/sys/types.h" 3 4







# 33 "/usr/include/aarch64-linux-gnu/sys/types.h" 3 4
typedef __u_char u_char;
typedef __u_short u_short;
typedef __u_int u_int;
typedef __u_long u_long;
typedef __quad_t quad_t;
typedef __u_quad_t u_quad_t;
typedef __fsid_t fsid_t;


typedef __loff_t loff_t;




typedef __ino_t ino_t;






typedef __ino64_t ino64_t;




typedef __dev_t dev_t;




typedef __gid_t gid_t;




typedef __mode_t mode_t;




typedef __nlink_t nlink_t;




typedef __uid_t uid_t;
# 97 "/usr/include/aarch64-linux-gnu/sys/types.h" 3 4
typedef __pid_t pid_t;





typedef __id_t id_t;
# 114 "/usr/include/aarch64-linux-gnu/sys/types.h" 3 4
typedef __daddr_t daddr_t;
typedef __caddr_t caddr_t;





typedef __key_t key_t;




# 1 "/usr/include/aarch64-linux-gnu/bits/types/clock_t.h" 1 3 4






typedef __clock_t clock_t;
# 127 "/usr/include/aarch64-linux-gnu/sys/types.h" 2 3 4

# 1 "/usr/include/aarch64-linux-gnu/bits/types/clockid_t.h" 1 3 4






typedef __clockid_t clockid_t;
# 129 "/usr/include/aarch64-linux-gnu/sys/types.h" 2 3 4
# 1 "/usr/include/aarch64-linux-gnu/bits/types/time_t.h" 1 3 4






typedef __time_t time_t;
# 130 "/usr/include/aarch64-linux-gnu/sys/types.h" 2 3 4
# 1 "/usr/include/aarch64-linux-gnu/bits/types/timer_t.h" 1 3 4






typedef __timer_t timer_t;
# 131 "/usr/include/aarch64-linux-gnu/sys/types.h" 2 3 4



typedef __useconds_t useconds_t;



typedef __suseconds_t suseconds_t;





# 1 "/usr/lib/gcc/aarch64-linux-gnu/9/include/stddef.h" 1 3 4
# 145 "/usr/include/aarch64-linux-gnu/sys/types.h" 2 3 4



typedef unsigned long int ulong;
typedef unsigned short int ushort;
typedef unsigned int uint;







typedef __uint8_t u_int8_t;
typedef __uint16_t u_int16_t;
typedef __uint32_t u_int32_t;
typedef __uint64_t u_int64_t;


typedef int register_t __attribute__ ((__mode__ (__word__)));
# 176 "/usr/include/aarch64-linux-gnu/sys/types.h" 3 4
# 1 "/usr/include/endian.h" 1 3 4
# 35 "/usr/include/endian.h" 3 4
# 1 "/usr/include/aarch64-linux-gnu/bits/byteswap.h" 1 3 4
# 33 "/usr/include/aarch64-linux-gnu/bits/byteswap.h" 3 4
static __inline __uint16_t
__bswap_16 (__uint16_t __bsx)
{

  return __builtin_bswap16 (__bsx);



}






static __inline __uint32_t
__bswap_32 (__uint32_t __bsx)
{

  return __builtin_bswap32 (__bsx);



}
# 69 "/usr/include/aarch64-linux-gnu/bits/byteswap.h" 3 4
__extension__ static __inline __uint64_t
__bswap_64 (__uint64_t __bsx)
{

  return __builtin_bswap64 (__bsx);



}
# 36 "/usr/include/endian.h" 2 3 4
# 1 "/usr/include/aarch64-linux-gnu/bits/uintn-identity.h" 1 3 4
# 32 "/usr/include/aarch64-linux-gnu/bits/uintn-identity.h" 3 4
static __inline __uint16_t
__uint16_identity (__uint16_t __x)
{
  return __x;
}

static __inline __uint32_t
__uint32_identity (__uint32_t __x)
{
  return __x;
}

static __inline __uint64_t
__uint64_identity (__uint64_t __x)
{
  return __x;
}
# 37 "/usr/include/endian.h" 2 3 4
# 177 "/usr/include/aarch64-linux-gnu/sys/types.h" 2 3 4


# 1 "/usr/include/aarch64-linux-gnu/sys/select.h" 1 3 4
# 30 "/usr/include/aarch64-linux-gnu/sys/select.h" 3 4
# 1 "/usr/include/aarch64-linux-gnu/bits/select.h" 1 3 4
# 31 "/usr/include/aarch64-linux-gnu/sys/select.h" 2 3 4


# 1 "/usr/include/aarch64-linux-gnu/bits/types/sigset_t.h" 1 3 4



# 1 "/usr/include/aarch64-linux-gnu/bits/types/__sigset_t.h" 1 3 4




typedef struct
{
  unsigned long int __val[(1024 / (8 * sizeof (unsigned long int)))];
} __sigset_t;
# 5 "/usr/include/aarch64-linux-gnu/bits/types/sigset_t.h" 2 3 4


typedef __sigset_t sigset_t;
# 34 "/usr/include/aarch64-linux-gnu/sys/select.h" 2 3 4



# 1 "/usr/include/aarch64-linux-gnu/bits/types/struct_timeval.h" 1 3 4







struct timeval
{
  __time_t tv_sec;
  __suseconds_t tv_usec;
};
# 38 "/usr/include/aarch64-linux-gnu/sys/select.h" 2 3 4

# 1 "/usr/include/aarch64-linux-gnu/bits/types/struct_timespec.h" 1 3 4
# 10 "/usr/include/aarch64-linux-gnu/bits/types/struct_timespec.h" 3 4
struct timespec
{
  __time_t tv_sec;



  __syscall_slong_t tv_nsec;
# 26 "/usr/include/aarch64-linux-gnu/bits/types/struct_timespec.h" 3 4
};
# 40 "/usr/include/aarch64-linux-gnu/sys/select.h" 2 3 4
# 49 "/usr/include/aarch64-linux-gnu/sys/select.h" 3 4
typedef long int __fd_mask;
# 59 "/usr/include/aarch64-linux-gnu/sys/select.h" 3 4
typedef struct
  {



    __fd_mask fds_bits[1024 / (8 * (int) sizeof (__fd_mask))];





  } fd_set;






typedef __fd_mask fd_mask;
# 91 "/usr/include/aarch64-linux-gnu/sys/select.h" 3 4

# 101 "/usr/include/aarch64-linux-gnu/sys/select.h" 3 4
extern int select (int __nfds, fd_set *__restrict __readfds,
     fd_set *__restrict __writefds,
     fd_set *__restrict __exceptfds,
     struct timeval *__restrict __timeout);
# 113 "/usr/include/aarch64-linux-gnu/sys/select.h" 3 4
extern int pselect (int __nfds, fd_set *__restrict __readfds,
      fd_set *__restrict __writefds,
      fd_set *__restrict __exceptfds,
      const struct timespec *__restrict __timeout,
      const __sigset_t *__restrict __sigmask);
# 126 "/usr/include/aarch64-linux-gnu/sys/select.h" 3 4

# 180 "/usr/include/aarch64-linux-gnu/sys/types.h" 2 3 4





typedef __blksize_t blksize_t;






typedef __blkcnt_t blkcnt_t;



typedef __fsblkcnt_t fsblkcnt_t;



typedef __fsfilcnt_t fsfilcnt_t;
# 219 "/usr/include/aarch64-linux-gnu/sys/types.h" 3 4
typedef __blkcnt64_t blkcnt64_t;
typedef __fsblkcnt64_t fsblkcnt64_t;
typedef __fsfilcnt64_t fsfilcnt64_t;





# 1 "/usr/include/aarch64-linux-gnu/bits/pthreadtypes.h" 1 3 4
# 23 "/usr/include/aarch64-linux-gnu/bits/pthreadtypes.h" 3 4
# 1 "/usr/include/aarch64-linux-gnu/bits/thread-shared-types.h" 1 3 4
# 44 "/usr/include/aarch64-linux-gnu/bits/thread-shared-types.h" 3 4
# 1 "/usr/include/aarch64-linux-gnu/bits/pthreadtypes-arch.h" 1 3 4
# 45 "/usr/include/aarch64-linux-gnu/bits/thread-shared-types.h" 2 3 4




typedef struct __pthread_internal_list
{
  struct __pthread_internal_list *__prev;
  struct __pthread_internal_list *__next;
} __pthread_list_t;

typedef struct __pthread_internal_slist
{
  struct __pthread_internal_slist *__next;
} __pthread_slist_t;
# 74 "/usr/include/aarch64-linux-gnu/bits/thread-shared-types.h" 3 4
# 1 "/usr/include/aarch64-linux-gnu/bits/struct_mutex.h" 1 3 4
# 27 "/usr/include/aarch64-linux-gnu/bits/struct_mutex.h" 3 4
struct __pthread_mutex_s
{
  int __lock ;
  unsigned int __count;
  int __owner;

  unsigned int __nusers;
# 58 "/usr/include/aarch64-linux-gnu/bits/struct_mutex.h" 3 4
  int __kind;




  int __spins;
  __pthread_list_t __list;
# 74 "/usr/include/aarch64-linux-gnu/bits/struct_mutex.h" 3 4
};
# 75 "/usr/include/aarch64-linux-gnu/bits/thread-shared-types.h" 2 3 4
# 87 "/usr/include/aarch64-linux-gnu/bits/thread-shared-types.h" 3 4
# 1 "/usr/include/aarch64-linux-gnu/bits/struct_rwlock.h" 1 3 4
# 23 "/usr/include/aarch64-linux-gnu/bits/struct_rwlock.h" 3 4
struct __pthread_rwlock_arch_t
{
  unsigned int __readers;
  unsigned int __writers;
  unsigned int __wrphase_futex;
  unsigned int __writers_futex;
  unsigned int __pad3;
  unsigned int __pad4;
  int __cur_writer;
  int __shared;
  unsigned long int __pad1;
  unsigned long int __pad2;
  unsigned int __flags;
};
# 88 "/usr/include/aarch64-linux-gnu/bits/thread-shared-types.h" 2 3 4




struct __pthread_cond_s
{
  __extension__ union
  {
    __extension__ unsigned long long int __wseq;
    struct
    {
      unsigned int __low;
      unsigned int __high;
    } __wseq32;
  };
  __extension__ union
  {
    __extension__ unsigned long long int __g1_start;
    struct
    {
      unsigned int __low;
      unsigned int __high;
    } __g1_start32;
  };
  unsigned int __g_refs[2] ;
  unsigned int __g_size[2];
  unsigned int __g1_orig_size;
  unsigned int __wrefs;
  unsigned int __g_signals[2];
};
# 24 "/usr/include/aarch64-linux-gnu/bits/pthreadtypes.h" 2 3 4



typedef unsigned long int pthread_t;




typedef union
{
  char __size[8];
  int __align;
} pthread_mutexattr_t;




typedef union
{
  char __size[8];
  int __align;
} pthread_condattr_t;



typedef unsigned int pthread_key_t;



typedef int pthread_once_t;


union pthread_attr_t
{
  char __size[64];
  long int __align;
};

typedef union pthread_attr_t pthread_attr_t;




typedef union
{
  struct __pthread_mutex_s __data;
  char __size[48];
  long int __align;
} pthread_mutex_t;


typedef union
{
  struct __pthread_cond_s __data;
  char __size[48];
  __extension__ long long int __align;
} pthread_cond_t;





typedef union
{
  struct __pthread_rwlock_arch_t __data;
  char __size[56];
  long int __align;
} pthread_rwlock_t;

typedef union
{
  char __size[8];
  long int __align;
} pthread_rwlockattr_t;





typedef volatile int pthread_spinlock_t;




typedef union
{
  char __size[32];
  long int __align;
} pthread_barrier_t;

typedef union
{
  char __size[8];
  int __align;
} pthread_barrierattr_t;
# 228 "/usr/include/aarch64-linux-gnu/sys/types.h" 2 3 4



# 26 "/home/ubuntu/neovim/.deps/usr/include/uv/unix.h" 2
# 1 "/usr/include/aarch64-linux-gnu/sys/stat.h" 1 3 4
# 99 "/usr/include/aarch64-linux-gnu/sys/stat.h" 3 4


# 1 "/usr/include/aarch64-linux-gnu/bits/stat.h" 1 3 4
# 27 "/usr/include/aarch64-linux-gnu/bits/stat.h" 3 4
# 1 "/usr/include/aarch64-linux-gnu/bits/wordsize.h" 1 3 4
# 28 "/usr/include/aarch64-linux-gnu/bits/stat.h" 2 3 4
# 58 "/usr/include/aarch64-linux-gnu/bits/stat.h" 3 4
struct stat
  {
    __dev_t st_dev;
    __ino_t st_ino;
    __mode_t st_mode;
    __nlink_t st_nlink;
    __uid_t st_uid;
    __gid_t st_gid;
    __dev_t st_rdev;
    __dev_t __pad1;
    __off_t st_size;
    __blksize_t st_blksize;
    int __pad2;
    __blkcnt_t st_blocks;







    struct timespec st_atim;
    struct timespec st_mtim;
    struct timespec st_ctim;
# 93 "/usr/include/aarch64-linux-gnu/bits/stat.h" 3 4
    int __glibc_reserved[2];
  };




struct stat64
  {
    __dev_t st_dev;
    __ino64_t st_ino;
    __mode_t st_mode;
    __nlink_t st_nlink;
    __uid_t st_uid;
    __gid_t st_gid;
    __dev_t st_rdev;
    __dev_t __pad1;
    __off64_t st_size;
    __blksize_t st_blksize;
    int __pad2;
    __blkcnt64_t st_blocks;







    struct timespec st_atim;
    struct timespec st_mtim;
    struct timespec st_ctim;
# 131 "/usr/include/aarch64-linux-gnu/bits/stat.h" 3 4
    int __glibc_reserved[2];
  };
# 102 "/usr/include/aarch64-linux-gnu/sys/stat.h" 2 3 4
# 205 "/usr/include/aarch64-linux-gnu/sys/stat.h" 3 4
extern int stat (const char *__restrict __file,
   struct stat *__restrict __buf) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));



extern int fstat (int __fd, struct stat *__buf) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2)));
# 224 "/usr/include/aarch64-linux-gnu/sys/stat.h" 3 4
extern int stat64 (const char *__restrict __file,
     struct stat64 *__restrict __buf) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
extern int fstat64 (int __fd, struct stat64 *__buf) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2)));







extern int fstatat (int __fd, const char *__restrict __file,
      struct stat *__restrict __buf, int __flag)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2, 3)));
# 249 "/usr/include/aarch64-linux-gnu/sys/stat.h" 3 4
extern int fstatat64 (int __fd, const char *__restrict __file,
        struct stat64 *__restrict __buf, int __flag)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2, 3)));







extern int lstat (const char *__restrict __file,
    struct stat *__restrict __buf) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
# 272 "/usr/include/aarch64-linux-gnu/sys/stat.h" 3 4
extern int lstat64 (const char *__restrict __file,
      struct stat64 *__restrict __buf)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));





extern int chmod (const char *__file, __mode_t __mode)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));





extern int lchmod (const char *__file, __mode_t __mode)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));




extern int fchmod (int __fd, __mode_t __mode) __attribute__ ((__nothrow__ , __leaf__));





extern int fchmodat (int __fd, const char *__file, __mode_t __mode,
       int __flag)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2))) ;






extern __mode_t umask (__mode_t __mask) __attribute__ ((__nothrow__ , __leaf__));




extern __mode_t getumask (void) __attribute__ ((__nothrow__ , __leaf__));



extern int mkdir (const char *__path, __mode_t __mode)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));





extern int mkdirat (int __fd, const char *__path, __mode_t __mode)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2)));






extern int mknod (const char *__path, __mode_t __mode, __dev_t __dev)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));





extern int mknodat (int __fd, const char *__path, __mode_t __mode,
      __dev_t __dev) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2)));





extern int mkfifo (const char *__path, __mode_t __mode)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));





extern int mkfifoat (int __fd, const char *__path, __mode_t __mode)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2)));





extern int utimensat (int __fd, const char *__path,
        const struct timespec __times[2],
        int __flags)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2)));




extern int futimens (int __fd, const struct timespec __times[2]) __attribute__ ((__nothrow__ , __leaf__));
# 395 "/usr/include/aarch64-linux-gnu/sys/stat.h" 3 4
extern int __fxstat (int __ver, int __fildes, struct stat *__stat_buf)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3)));
extern int __xstat (int __ver, const char *__filename,
      struct stat *__stat_buf) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2, 3)));
extern int __lxstat (int __ver, const char *__filename,
       struct stat *__stat_buf) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2, 3)));
extern int __fxstatat (int __ver, int __fildes, const char *__filename,
         struct stat *__stat_buf, int __flag)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3, 4)));
# 428 "/usr/include/aarch64-linux-gnu/sys/stat.h" 3 4
extern int __fxstat64 (int __ver, int __fildes, struct stat64 *__stat_buf)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3)));
extern int __xstat64 (int __ver, const char *__filename,
        struct stat64 *__stat_buf) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2, 3)));
extern int __lxstat64 (int __ver, const char *__filename,
         struct stat64 *__stat_buf) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2, 3)));
extern int __fxstatat64 (int __ver, int __fildes, const char *__filename,
    struct stat64 *__stat_buf, int __flag)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3, 4)));

extern int __xmknod (int __ver, const char *__path, __mode_t __mode,
       __dev_t *__dev) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2, 4)));

extern int __xmknodat (int __ver, int __fd, const char *__path,
         __mode_t __mode, __dev_t *__dev)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3, 5)));


# 1 "/usr/include/aarch64-linux-gnu/bits/statx.h" 1 3 4
# 31 "/usr/include/aarch64-linux-gnu/bits/statx.h" 3 4
# 1 "/usr/include/linux/stat.h" 1 3 4




# 1 "/usr/include/linux/types.h" 1 3 4




# 1 "/usr/include/aarch64-linux-gnu/asm/types.h" 1 3 4
# 1 "/usr/include/asm-generic/types.h" 1 3 4






# 1 "/usr/include/asm-generic/int-ll64.h" 1 3 4
# 12 "/usr/include/asm-generic/int-ll64.h" 3 4
# 1 "/usr/include/aarch64-linux-gnu/asm/bitsperlong.h" 1 3 4
# 22 "/usr/include/aarch64-linux-gnu/asm/bitsperlong.h" 3 4
# 1 "/usr/include/asm-generic/bitsperlong.h" 1 3 4
# 23 "/usr/include/aarch64-linux-gnu/asm/bitsperlong.h" 2 3 4
# 13 "/usr/include/asm-generic/int-ll64.h" 2 3 4







typedef __signed__ char __s8;
typedef unsigned char __u8;

typedef __signed__ short __s16;
typedef unsigned short __u16;

typedef __signed__ int __s32;
typedef unsigned int __u32;


__extension__ typedef __signed__ long long __s64;
__extension__ typedef unsigned long long __u64;
# 8 "/usr/include/asm-generic/types.h" 2 3 4
# 1 "/usr/include/aarch64-linux-gnu/asm/types.h" 2 3 4
# 6 "/usr/include/linux/types.h" 2 3 4



# 1 "/usr/include/linux/posix_types.h" 1 3 4




# 1 "/usr/include/linux/stddef.h" 1 3 4
# 6 "/usr/include/linux/posix_types.h" 2 3 4
# 25 "/usr/include/linux/posix_types.h" 3 4
typedef struct {
 unsigned long fds_bits[1024 / (8 * sizeof(long))];
} __kernel_fd_set;


typedef void (*__kernel_sighandler_t)(int);


typedef int __kernel_key_t;
typedef int __kernel_mqd_t;

# 1 "/usr/include/aarch64-linux-gnu/asm/posix_types.h" 1 3 4




typedef unsigned short __kernel_old_uid_t;
typedef unsigned short __kernel_old_gid_t;


# 1 "/usr/include/asm-generic/posix_types.h" 1 3 4
# 15 "/usr/include/asm-generic/posix_types.h" 3 4
typedef long __kernel_long_t;
typedef unsigned long __kernel_ulong_t;



typedef __kernel_ulong_t __kernel_ino_t;



typedef unsigned int __kernel_mode_t;



typedef int __kernel_pid_t;



typedef int __kernel_ipc_pid_t;



typedef unsigned int __kernel_uid_t;
typedef unsigned int __kernel_gid_t;



typedef __kernel_long_t __kernel_suseconds_t;



typedef int __kernel_daddr_t;



typedef unsigned int __kernel_uid32_t;
typedef unsigned int __kernel_gid32_t;
# 59 "/usr/include/asm-generic/posix_types.h" 3 4
typedef unsigned int __kernel_old_dev_t;
# 72 "/usr/include/asm-generic/posix_types.h" 3 4
typedef __kernel_ulong_t __kernel_size_t;
typedef __kernel_long_t __kernel_ssize_t;
typedef __kernel_long_t __kernel_ptrdiff_t;




typedef struct {
 int val[2];
} __kernel_fsid_t;





typedef __kernel_long_t __kernel_off_t;
typedef long long __kernel_loff_t;
typedef __kernel_long_t __kernel_time_t;
typedef long long __kernel_time64_t;
typedef __kernel_long_t __kernel_clock_t;
typedef int __kernel_timer_t;
typedef int __kernel_clockid_t;
typedef char * __kernel_caddr_t;
typedef unsigned short __kernel_uid16_t;
typedef unsigned short __kernel_gid16_t;
# 10 "/usr/include/aarch64-linux-gnu/asm/posix_types.h" 2 3 4
# 37 "/usr/include/linux/posix_types.h" 2 3 4
# 10 "/usr/include/linux/types.h" 2 3 4
# 24 "/usr/include/linux/types.h" 3 4
typedef __u16 __le16;
typedef __u16 __be16;
typedef __u32 __le32;
typedef __u32 __be32;
typedef __u64 __le64;
typedef __u64 __be64;

typedef __u16 __sum16;
typedef __u32 __wsum;
# 47 "/usr/include/linux/types.h" 3 4
typedef unsigned __poll_t;
# 6 "/usr/include/linux/stat.h" 2 3 4
# 56 "/usr/include/linux/stat.h" 3 4
struct statx_timestamp {
 __s64 tv_sec;
 __u32 tv_nsec;
 __s32 __reserved;
};
# 99 "/usr/include/linux/stat.h" 3 4
struct statx {

 __u32 stx_mask;
 __u32 stx_blksize;
 __u64 stx_attributes;

 __u32 stx_nlink;
 __u32 stx_uid;
 __u32 stx_gid;
 __u16 stx_mode;
 __u16 __spare0[1];

 __u64 stx_ino;
 __u64 stx_size;
 __u64 stx_blocks;
 __u64 stx_attributes_mask;

 struct statx_timestamp stx_atime;
 struct statx_timestamp stx_btime;
 struct statx_timestamp stx_ctime;
 struct statx_timestamp stx_mtime;

 __u32 stx_rdev_major;
 __u32 stx_rdev_minor;
 __u32 stx_dev_major;
 __u32 stx_dev_minor;

 __u64 __spare2[14];

};
# 32 "/usr/include/aarch64-linux-gnu/bits/statx.h" 2 3 4







# 1 "/usr/include/aarch64-linux-gnu/bits/statx-generic.h" 1 3 4
# 25 "/usr/include/aarch64-linux-gnu/bits/statx-generic.h" 3 4
# 1 "/usr/include/aarch64-linux-gnu/bits/types/struct_statx_timestamp.h" 1 3 4
# 26 "/usr/include/aarch64-linux-gnu/bits/statx-generic.h" 2 3 4
# 1 "/usr/include/aarch64-linux-gnu/bits/types/struct_statx.h" 1 3 4
# 27 "/usr/include/aarch64-linux-gnu/bits/statx-generic.h" 2 3 4
# 53 "/usr/include/aarch64-linux-gnu/bits/statx-generic.h" 3 4



int statx (int __dirfd, const char *__restrict __path, int __flags,
           unsigned int __mask, struct statx *__restrict __buf)
  __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2, 5)));


# 39 "/usr/include/aarch64-linux-gnu/bits/statx.h" 2 3 4
# 447 "/usr/include/aarch64-linux-gnu/sys/stat.h" 2 3 4
# 534 "/usr/include/aarch64-linux-gnu/sys/stat.h" 3 4

# 27 "/home/ubuntu/neovim/.deps/usr/include/uv/unix.h" 2
# 1 "/usr/include/fcntl.h" 1 3 4
# 28 "/usr/include/fcntl.h" 3 4







# 1 "/usr/include/aarch64-linux-gnu/bits/fcntl.h" 1 3 4
# 40 "/usr/include/aarch64-linux-gnu/bits/fcntl.h" 3 4
struct flock
  {
    short int l_type;
    short int l_whence;
    __off_t l_start;
    __off_t l_len;
    __pid_t l_pid;
  };


struct flock64
  {
    short int l_type;
    short int l_whence;
    __off64_t l_start;
    __off64_t l_len;
    __pid_t l_pid;
  };



# 1 "/usr/include/aarch64-linux-gnu/bits/fcntl-linux.h" 1 3 4
# 38 "/usr/include/aarch64-linux-gnu/bits/fcntl-linux.h" 3 4
# 1 "/usr/include/aarch64-linux-gnu/bits/types/struct_iovec.h" 1 3 4
# 23 "/usr/include/aarch64-linux-gnu/bits/types/struct_iovec.h" 3 4
# 1 "/usr/lib/gcc/aarch64-linux-gnu/9/include/stddef.h" 1 3 4
# 24 "/usr/include/aarch64-linux-gnu/bits/types/struct_iovec.h" 2 3 4


struct iovec
  {
    void *iov_base;
    size_t iov_len;
  };
# 39 "/usr/include/aarch64-linux-gnu/bits/fcntl-linux.h" 2 3 4
# 265 "/usr/include/aarch64-linux-gnu/bits/fcntl-linux.h" 3 4
enum __pid_type
  {
    F_OWNER_TID = 0,
    F_OWNER_PID,
    F_OWNER_PGRP,
    F_OWNER_GID = F_OWNER_PGRP
  };


struct f_owner_ex
  {
    enum __pid_type type;
    __pid_t pid;
  };
# 353 "/usr/include/aarch64-linux-gnu/bits/fcntl-linux.h" 3 4
# 1 "/usr/include/linux/falloc.h" 1 3 4
# 354 "/usr/include/aarch64-linux-gnu/bits/fcntl-linux.h" 2 3 4



struct file_handle
{
  unsigned int handle_bytes;
  int handle_type;

  unsigned char f_handle[0];
};
# 392 "/usr/include/aarch64-linux-gnu/bits/fcntl-linux.h" 3 4





extern __ssize_t readahead (int __fd, __off64_t __offset, size_t __count)
    __attribute__ ((__nothrow__ , __leaf__));






extern int sync_file_range (int __fd, __off64_t __offset, __off64_t __count,
       unsigned int __flags);






extern __ssize_t vmsplice (int __fdout, const struct iovec *__iov,
      size_t __count, unsigned int __flags);





extern __ssize_t splice (int __fdin, __off64_t *__offin, int __fdout,
    __off64_t *__offout, size_t __len,
    unsigned int __flags);





extern __ssize_t tee (int __fdin, int __fdout, size_t __len,
        unsigned int __flags);






extern int fallocate (int __fd, int __mode, __off_t __offset, __off_t __len);
# 447 "/usr/include/aarch64-linux-gnu/bits/fcntl-linux.h" 3 4
extern int fallocate64 (int __fd, int __mode, __off64_t __offset,
   __off64_t __len);




extern int name_to_handle_at (int __dfd, const char *__name,
         struct file_handle *__handle, int *__mnt_id,
         int __flags) __attribute__ ((__nothrow__ , __leaf__));





extern int open_by_handle_at (int __mountdirfd, struct file_handle *__handle,
         int __flags);




# 61 "/usr/include/aarch64-linux-gnu/bits/fcntl.h" 2 3 4
# 36 "/usr/include/fcntl.h" 2 3 4
# 78 "/usr/include/fcntl.h" 3 4
# 1 "/usr/include/aarch64-linux-gnu/bits/stat.h" 1 3 4
# 79 "/usr/include/fcntl.h" 2 3 4
# 148 "/usr/include/fcntl.h" 3 4
extern int fcntl (int __fd, int __cmd, ...);
# 157 "/usr/include/fcntl.h" 3 4
extern int fcntl64 (int __fd, int __cmd, ...);
# 168 "/usr/include/fcntl.h" 3 4
extern int open (const char *__file, int __oflag, ...) __attribute__ ((__nonnull__ (1)));
# 178 "/usr/include/fcntl.h" 3 4
extern int open64 (const char *__file, int __oflag, ...) __attribute__ ((__nonnull__ (1)));
# 192 "/usr/include/fcntl.h" 3 4
extern int openat (int __fd, const char *__file, int __oflag, ...)
     __attribute__ ((__nonnull__ (2)));
# 203 "/usr/include/fcntl.h" 3 4
extern int openat64 (int __fd, const char *__file, int __oflag, ...)
     __attribute__ ((__nonnull__ (2)));
# 214 "/usr/include/fcntl.h" 3 4
extern int creat (const char *__file, mode_t __mode) __attribute__ ((__nonnull__ (1)));
# 224 "/usr/include/fcntl.h" 3 4
extern int creat64 (const char *__file, mode_t __mode) __attribute__ ((__nonnull__ (1)));
# 243 "/usr/include/fcntl.h" 3 4
extern int lockf (int __fd, int __cmd, off_t __len);
# 252 "/usr/include/fcntl.h" 3 4
extern int lockf64 (int __fd, int __cmd, off64_t __len);







extern int posix_fadvise (int __fd, off_t __offset, off_t __len,
     int __advise) __attribute__ ((__nothrow__ , __leaf__));
# 272 "/usr/include/fcntl.h" 3 4
extern int posix_fadvise64 (int __fd, off64_t __offset, off64_t __len,
       int __advise) __attribute__ ((__nothrow__ , __leaf__));
# 282 "/usr/include/fcntl.h" 3 4
extern int posix_fallocate (int __fd, off_t __offset, off_t __len);
# 293 "/usr/include/fcntl.h" 3 4
extern int posix_fallocate64 (int __fd, off64_t __offset, off64_t __len);
# 304 "/usr/include/fcntl.h" 3 4

# 28 "/home/ubuntu/neovim/.deps/usr/include/uv/unix.h" 2
# 1 "/usr/include/dirent.h" 1 3 4
# 27 "/usr/include/dirent.h" 3 4

# 61 "/usr/include/dirent.h" 3 4
# 1 "/usr/include/aarch64-linux-gnu/bits/dirent.h" 1 3 4
# 22 "/usr/include/aarch64-linux-gnu/bits/dirent.h" 3 4
struct dirent
  {

    __ino_t d_ino;
    __off_t d_off;




    unsigned short int d_reclen;
    unsigned char d_type;
    char d_name[256];
  };


struct dirent64
  {
    __ino64_t d_ino;
    __off64_t d_off;
    unsigned short int d_reclen;
    unsigned char d_type;
    char d_name[256];
  };
# 62 "/usr/include/dirent.h" 2 3 4
# 97 "/usr/include/dirent.h" 3 4
enum
  {
    DT_UNKNOWN = 0,

    DT_FIFO = 1,

    DT_CHR = 2,

    DT_DIR = 4,

    DT_BLK = 6,

    DT_REG = 8,

    DT_LNK = 10,

    DT_SOCK = 12,

    DT_WHT = 14

  };
# 127 "/usr/include/dirent.h" 3 4
typedef struct __dirstream DIR;






extern DIR *opendir (const char *__name) __attribute__ ((__nonnull__ (1)));






extern DIR *fdopendir (int __fd);







extern int closedir (DIR *__dirp) __attribute__ ((__nonnull__ (1)));
# 162 "/usr/include/dirent.h" 3 4
extern struct dirent *readdir (DIR *__dirp) __attribute__ ((__nonnull__ (1)));
# 173 "/usr/include/dirent.h" 3 4
extern struct dirent64 *readdir64 (DIR *__dirp) __attribute__ ((__nonnull__ (1)));
# 183 "/usr/include/dirent.h" 3 4
extern int readdir_r (DIR *__restrict __dirp,
        struct dirent *__restrict __entry,
        struct dirent **__restrict __result)
     __attribute__ ((__nonnull__ (1, 2, 3))) __attribute__ ((__deprecated__));
# 201 "/usr/include/dirent.h" 3 4
extern int readdir64_r (DIR *__restrict __dirp,
   struct dirent64 *__restrict __entry,
   struct dirent64 **__restrict __result)
  __attribute__ ((__nonnull__ (1, 2, 3))) __attribute__ ((__deprecated__));




extern void rewinddir (DIR *__dirp) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));





extern void seekdir (DIR *__dirp, long int __pos) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));


extern long int telldir (DIR *__dirp) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));





extern int dirfd (DIR *__dirp) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
# 245 "/usr/include/dirent.h" 3 4
# 1 "/usr/lib/gcc/aarch64-linux-gnu/9/include/stddef.h" 1 3 4
# 246 "/usr/include/dirent.h" 2 3 4
# 255 "/usr/include/dirent.h" 3 4
extern int scandir (const char *__restrict __dir,
      struct dirent ***__restrict __namelist,
      int (*__selector) (const struct dirent *),
      int (*__cmp) (const struct dirent **,
      const struct dirent **))
     __attribute__ ((__nonnull__ (1, 2)));
# 278 "/usr/include/dirent.h" 3 4
extern int scandir64 (const char *__restrict __dir,
        struct dirent64 ***__restrict __namelist,
        int (*__selector) (const struct dirent64 *),
        int (*__cmp) (const struct dirent64 **,
        const struct dirent64 **))
     __attribute__ ((__nonnull__ (1, 2)));
# 293 "/usr/include/dirent.h" 3 4
extern int scandirat (int __dfd, const char *__restrict __dir,
        struct dirent ***__restrict __namelist,
        int (*__selector) (const struct dirent *),
        int (*__cmp) (const struct dirent **,
        const struct dirent **))
     __attribute__ ((__nonnull__ (2, 3)));
# 315 "/usr/include/dirent.h" 3 4
extern int scandirat64 (int __dfd, const char *__restrict __dir,
   struct dirent64 ***__restrict __namelist,
   int (*__selector) (const struct dirent64 *),
   int (*__cmp) (const struct dirent64 **,
          const struct dirent64 **))
     __attribute__ ((__nonnull__ (2, 3)));




extern int alphasort (const struct dirent **__e1,
        const struct dirent **__e2)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
# 340 "/usr/include/dirent.h" 3 4
extern int alphasort64 (const struct dirent64 **__e1,
   const struct dirent64 **__e2)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
# 353 "/usr/include/dirent.h" 3 4
extern __ssize_t getdirentries (int __fd, char *__restrict __buf,
    size_t __nbytes,
    __off_t *__restrict __basep)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2, 4)));
# 370 "/usr/include/dirent.h" 3 4
extern __ssize_t getdirentries64 (int __fd, char *__restrict __buf,
      size_t __nbytes,
      __off64_t *__restrict __basep)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2, 4)));






extern int versionsort (const struct dirent **__e1,
   const struct dirent **__e2)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
# 396 "/usr/include/dirent.h" 3 4
extern int versionsort64 (const struct dirent64 **__e1,
     const struct dirent64 **__e2)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));





# 1 "/usr/include/aarch64-linux-gnu/bits/dirent_ext.h" 1 3 4
# 23 "/usr/include/aarch64-linux-gnu/bits/dirent_ext.h" 3 4






extern __ssize_t getdents64 (int __fd, void *__buffer, size_t __length)
  __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2)));



# 405 "/usr/include/dirent.h" 2 3 4
# 29 "/home/ubuntu/neovim/.deps/usr/include/uv/unix.h" 2

# 1 "/usr/include/aarch64-linux-gnu/sys/socket.h" 1 3 4
# 24 "/usr/include/aarch64-linux-gnu/sys/socket.h" 3 4




# 1 "/usr/lib/gcc/aarch64-linux-gnu/9/include/stddef.h" 1 3 4
# 29 "/usr/include/aarch64-linux-gnu/sys/socket.h" 2 3 4




# 1 "/usr/include/aarch64-linux-gnu/bits/socket.h" 1 3 4
# 27 "/usr/include/aarch64-linux-gnu/bits/socket.h" 3 4
# 1 "/usr/lib/gcc/aarch64-linux-gnu/9/include/stddef.h" 1 3 4
# 28 "/usr/include/aarch64-linux-gnu/bits/socket.h" 2 3 4





typedef __socklen_t socklen_t;




# 1 "/usr/include/aarch64-linux-gnu/bits/socket_type.h" 1 3 4
# 24 "/usr/include/aarch64-linux-gnu/bits/socket_type.h" 3 4
enum __socket_type
{
  SOCK_STREAM = 1,


  SOCK_DGRAM = 2,


  SOCK_RAW = 3,

  SOCK_RDM = 4,

  SOCK_SEQPACKET = 5,


  SOCK_DCCP = 6,

  SOCK_PACKET = 10,







  SOCK_CLOEXEC = 02000000,


  SOCK_NONBLOCK = 00004000


};
# 39 "/usr/include/aarch64-linux-gnu/bits/socket.h" 2 3 4
# 175 "/usr/include/aarch64-linux-gnu/bits/socket.h" 3 4
# 1 "/usr/include/aarch64-linux-gnu/bits/sockaddr.h" 1 3 4
# 28 "/usr/include/aarch64-linux-gnu/bits/sockaddr.h" 3 4
typedef unsigned short int sa_family_t;
# 176 "/usr/include/aarch64-linux-gnu/bits/socket.h" 2 3 4


struct sockaddr
  {
    sa_family_t sa_family;
    char sa_data[14];
  };
# 191 "/usr/include/aarch64-linux-gnu/bits/socket.h" 3 4
struct sockaddr_storage
  {
    sa_family_t ss_family;
    char __ss_padding[(128 - (sizeof (unsigned short int)) - sizeof (unsigned long int))];
    unsigned long int __ss_align;
  };



enum
  {
    MSG_OOB = 0x01,

    MSG_PEEK = 0x02,

    MSG_DONTROUTE = 0x04,



    MSG_TRYHARD = MSG_DONTROUTE,


    MSG_CTRUNC = 0x08,

    MSG_PROXY = 0x10,

    MSG_TRUNC = 0x20,

    MSG_DONTWAIT = 0x40,

    MSG_EOR = 0x80,

    MSG_WAITALL = 0x100,

    MSG_FIN = 0x200,

    MSG_SYN = 0x400,

    MSG_CONFIRM = 0x800,

    MSG_RST = 0x1000,

    MSG_ERRQUEUE = 0x2000,

    MSG_NOSIGNAL = 0x4000,

    MSG_MORE = 0x8000,

    MSG_WAITFORONE = 0x10000,

    MSG_BATCH = 0x40000,

    MSG_ZEROCOPY = 0x4000000,

    MSG_FASTOPEN = 0x20000000,


    MSG_CMSG_CLOEXEC = 0x40000000



  };




struct msghdr
  {
    void *msg_name;
    socklen_t msg_namelen;

    struct iovec *msg_iov;
    size_t msg_iovlen;

    void *msg_control;
    size_t msg_controllen;




    int msg_flags;
  };


struct cmsghdr
  {
    size_t cmsg_len;




    int cmsg_level;
    int cmsg_type;

    __extension__ unsigned char __cmsg_data [];

  };
# 305 "/usr/include/aarch64-linux-gnu/bits/socket.h" 3 4
extern struct cmsghdr *__cmsg_nxthdr (struct msghdr *__mhdr,
          struct cmsghdr *__cmsg) __attribute__ ((__nothrow__ , __leaf__));
# 332 "/usr/include/aarch64-linux-gnu/bits/socket.h" 3 4
enum
  {
    SCM_RIGHTS = 0x01


    , SCM_CREDENTIALS = 0x02


  };



struct ucred
{
  pid_t pid;
  uid_t uid;
  gid_t gid;
};




# 1 "/usr/include/aarch64-linux-gnu/asm/socket.h" 1 3 4
# 1 "/usr/include/asm-generic/socket.h" 1 3 4





# 1 "/usr/include/aarch64-linux-gnu/asm/sockios.h" 1 3 4
# 1 "/usr/include/asm-generic/sockios.h" 1 3 4
# 1 "/usr/include/aarch64-linux-gnu/asm/sockios.h" 2 3 4
# 7 "/usr/include/asm-generic/socket.h" 2 3 4
# 1 "/usr/include/aarch64-linux-gnu/asm/socket.h" 2 3 4
# 355 "/usr/include/aarch64-linux-gnu/bits/socket.h" 2 3 4






struct linger
  {
    int l_onoff;
    int l_linger;
  };
# 34 "/usr/include/aarch64-linux-gnu/sys/socket.h" 2 3 4


# 1 "/usr/include/aarch64-linux-gnu/bits/types/struct_osockaddr.h" 1 3 4





struct osockaddr
{
  unsigned short int sa_family;
  unsigned char sa_data[14];
};
# 37 "/usr/include/aarch64-linux-gnu/sys/socket.h" 2 3 4




enum
{
  SHUT_RD = 0,

  SHUT_WR,

  SHUT_RDWR

};
# 79 "/usr/include/aarch64-linux-gnu/sys/socket.h" 3 4
typedef union { struct sockaddr *__restrict __sockaddr__; struct sockaddr_at *__restrict __sockaddr_at__; struct sockaddr_ax25 *__restrict __sockaddr_ax25__; struct sockaddr_dl *__restrict __sockaddr_dl__; struct sockaddr_eon *__restrict __sockaddr_eon__; struct sockaddr_in *__restrict __sockaddr_in__; struct sockaddr_in6 *__restrict __sockaddr_in6__; struct sockaddr_inarp *__restrict __sockaddr_inarp__; struct sockaddr_ipx *__restrict __sockaddr_ipx__; struct sockaddr_iso *__restrict __sockaddr_iso__; struct sockaddr_ns *__restrict __sockaddr_ns__; struct sockaddr_un *__restrict __sockaddr_un__; struct sockaddr_x25 *__restrict __sockaddr_x25__;
       } __SOCKADDR_ARG __attribute__ ((__transparent_union__));


typedef union { const struct sockaddr *__restrict __sockaddr__; const struct sockaddr_at *__restrict __sockaddr_at__; const struct sockaddr_ax25 *__restrict __sockaddr_ax25__; const struct sockaddr_dl *__restrict __sockaddr_dl__; const struct sockaddr_eon *__restrict __sockaddr_eon__; const struct sockaddr_in *__restrict __sockaddr_in__; const struct sockaddr_in6 *__restrict __sockaddr_in6__; const struct sockaddr_inarp *__restrict __sockaddr_inarp__; const struct sockaddr_ipx *__restrict __sockaddr_ipx__; const struct sockaddr_iso *__restrict __sockaddr_iso__; const struct sockaddr_ns *__restrict __sockaddr_ns__; const struct sockaddr_un *__restrict __sockaddr_un__; const struct sockaddr_x25 *__restrict __sockaddr_x25__;
       } __CONST_SOCKADDR_ARG __attribute__ ((__transparent_union__));





struct mmsghdr
  {
    struct msghdr msg_hdr;
    unsigned int msg_len;

  };






extern int socket (int __domain, int __type, int __protocol) __attribute__ ((__nothrow__ , __leaf__));





extern int socketpair (int __domain, int __type, int __protocol,
         int __fds[2]) __attribute__ ((__nothrow__ , __leaf__));


extern int bind (int __fd, __CONST_SOCKADDR_ARG __addr, socklen_t __len)
     __attribute__ ((__nothrow__ , __leaf__));


extern int getsockname (int __fd, __SOCKADDR_ARG __addr,
   socklen_t *__restrict __len) __attribute__ ((__nothrow__ , __leaf__));
# 126 "/usr/include/aarch64-linux-gnu/sys/socket.h" 3 4
extern int connect (int __fd, __CONST_SOCKADDR_ARG __addr, socklen_t __len);



extern int getpeername (int __fd, __SOCKADDR_ARG __addr,
   socklen_t *__restrict __len) __attribute__ ((__nothrow__ , __leaf__));






extern ssize_t send (int __fd, const void *__buf, size_t __n, int __flags);






extern ssize_t recv (int __fd, void *__buf, size_t __n, int __flags);






extern ssize_t sendto (int __fd, const void *__buf, size_t __n,
         int __flags, __CONST_SOCKADDR_ARG __addr,
         socklen_t __addr_len);
# 163 "/usr/include/aarch64-linux-gnu/sys/socket.h" 3 4
extern ssize_t recvfrom (int __fd, void *__restrict __buf, size_t __n,
    int __flags, __SOCKADDR_ARG __addr,
    socklen_t *__restrict __addr_len);







extern ssize_t sendmsg (int __fd, const struct msghdr *__message,
   int __flags);







extern int sendmmsg (int __fd, struct mmsghdr *__vmessages,
       unsigned int __vlen, int __flags);







extern ssize_t recvmsg (int __fd, struct msghdr *__message, int __flags);







extern int recvmmsg (int __fd, struct mmsghdr *__vmessages,
       unsigned int __vlen, int __flags,
       struct timespec *__tmo);






extern int getsockopt (int __fd, int __level, int __optname,
         void *__restrict __optval,
         socklen_t *__restrict __optlen) __attribute__ ((__nothrow__ , __leaf__));




extern int setsockopt (int __fd, int __level, int __optname,
         const void *__optval, socklen_t __optlen) __attribute__ ((__nothrow__ , __leaf__));





extern int listen (int __fd, int __n) __attribute__ ((__nothrow__ , __leaf__));
# 232 "/usr/include/aarch64-linux-gnu/sys/socket.h" 3 4
extern int accept (int __fd, __SOCKADDR_ARG __addr,
     socklen_t *__restrict __addr_len);






extern int accept4 (int __fd, __SOCKADDR_ARG __addr,
      socklen_t *__restrict __addr_len, int __flags);
# 250 "/usr/include/aarch64-linux-gnu/sys/socket.h" 3 4
extern int shutdown (int __fd, int __how) __attribute__ ((__nothrow__ , __leaf__));




extern int sockatmark (int __fd) __attribute__ ((__nothrow__ , __leaf__));







extern int isfdtype (int __fd, int __fdtype) __attribute__ ((__nothrow__ , __leaf__));
# 272 "/usr/include/aarch64-linux-gnu/sys/socket.h" 3 4

# 31 "/home/ubuntu/neovim/.deps/usr/include/uv/unix.h" 2
# 1 "/usr/include/netinet/in.h" 1 3 4
# 27 "/usr/include/netinet/in.h" 3 4



typedef uint32_t in_addr_t;
struct in_addr
  {
    in_addr_t s_addr;
  };


# 1 "/usr/include/aarch64-linux-gnu/bits/in.h" 1 3 4
# 142 "/usr/include/aarch64-linux-gnu/bits/in.h" 3 4
struct ip_opts
  {
    struct in_addr ip_dst;
    char ip_opts[40];
  };


struct ip_mreqn
  {
    struct in_addr imr_multiaddr;
    struct in_addr imr_address;
    int imr_ifindex;
  };


struct in_pktinfo
  {
    int ipi_ifindex;
    struct in_addr ipi_spec_dst;
    struct in_addr ipi_addr;
  };
# 38 "/usr/include/netinet/in.h" 2 3 4


enum
  {
    IPPROTO_IP = 0,

    IPPROTO_ICMP = 1,

    IPPROTO_IGMP = 2,

    IPPROTO_IPIP = 4,

    IPPROTO_TCP = 6,

    IPPROTO_EGP = 8,

    IPPROTO_PUP = 12,

    IPPROTO_UDP = 17,

    IPPROTO_IDP = 22,

    IPPROTO_TP = 29,

    IPPROTO_DCCP = 33,

    IPPROTO_IPV6 = 41,

    IPPROTO_RSVP = 46,

    IPPROTO_GRE = 47,

    IPPROTO_ESP = 50,

    IPPROTO_AH = 51,

    IPPROTO_MTP = 92,

    IPPROTO_BEETPH = 94,

    IPPROTO_ENCAP = 98,

    IPPROTO_PIM = 103,

    IPPROTO_COMP = 108,

    IPPROTO_SCTP = 132,

    IPPROTO_UDPLITE = 136,

    IPPROTO_MPLS = 137,

    IPPROTO_RAW = 255,

    IPPROTO_MAX
  };





enum
  {
    IPPROTO_HOPOPTS = 0,

    IPPROTO_ROUTING = 43,

    IPPROTO_FRAGMENT = 44,

    IPPROTO_ICMPV6 = 58,

    IPPROTO_NONE = 59,

    IPPROTO_DSTOPTS = 60,

    IPPROTO_MH = 135

  };



typedef uint16_t in_port_t;


enum
  {
    IPPORT_ECHO = 7,
    IPPORT_DISCARD = 9,
    IPPORT_SYSTAT = 11,
    IPPORT_DAYTIME = 13,
    IPPORT_NETSTAT = 15,
    IPPORT_FTP = 21,
    IPPORT_TELNET = 23,
    IPPORT_SMTP = 25,
    IPPORT_TIMESERVER = 37,
    IPPORT_NAMESERVER = 42,
    IPPORT_WHOIS = 43,
    IPPORT_MTP = 57,

    IPPORT_TFTP = 69,
    IPPORT_RJE = 77,
    IPPORT_FINGER = 79,
    IPPORT_TTYLINK = 87,
    IPPORT_SUPDUP = 95,


    IPPORT_EXECSERVER = 512,
    IPPORT_LOGINSERVER = 513,
    IPPORT_CMDSERVER = 514,
    IPPORT_EFSSERVER = 520,


    IPPORT_BIFFUDP = 512,
    IPPORT_WHOSERVER = 513,
    IPPORT_ROUTESERVER = 520,


    IPPORT_RESERVED = 1024,


    IPPORT_USERRESERVED = 5000
  };
# 212 "/usr/include/netinet/in.h" 3 4
struct in6_addr
  {
    union
      {
 uint8_t __u6_addr8[16];
 uint16_t __u6_addr16[8];
 uint32_t __u6_addr32[4];
      } __in6_u;





  };


extern const struct in6_addr in6addr_any;
extern const struct in6_addr in6addr_loopback;
# 238 "/usr/include/netinet/in.h" 3 4
struct sockaddr_in
  {
    sa_family_t sin_family;
    in_port_t sin_port;
    struct in_addr sin_addr;


    unsigned char sin_zero[sizeof (struct sockaddr)
      - (sizeof (unsigned short int))
      - sizeof (in_port_t)
      - sizeof (struct in_addr)];
  };



struct sockaddr_in6
  {
    sa_family_t sin6_family;
    in_port_t sin6_port;
    uint32_t sin6_flowinfo;
    struct in6_addr sin6_addr;
    uint32_t sin6_scope_id;
  };




struct ip_mreq
  {

    struct in_addr imr_multiaddr;


    struct in_addr imr_interface;
  };

struct ip_mreq_source
  {

    struct in_addr imr_multiaddr;


    struct in_addr imr_interface;


    struct in_addr imr_sourceaddr;
  };




struct ipv6_mreq
  {

    struct in6_addr ipv6mr_multiaddr;


    unsigned int ipv6mr_interface;
  };




struct group_req
  {

    uint32_t gr_interface;


    struct sockaddr_storage gr_group;
  };

struct group_source_req
  {

    uint32_t gsr_interface;


    struct sockaddr_storage gsr_group;


    struct sockaddr_storage gsr_source;
  };



struct ip_msfilter
  {

    struct in_addr imsf_multiaddr;


    struct in_addr imsf_interface;


    uint32_t imsf_fmode;


    uint32_t imsf_numsrc;

    struct in_addr imsf_slist[1];
  };





struct group_filter
  {

    uint32_t gf_interface;


    struct sockaddr_storage gf_group;


    uint32_t gf_fmode;


    uint32_t gf_numsrc;

    struct sockaddr_storage gf_slist[1];
};
# 375 "/usr/include/netinet/in.h" 3 4
extern uint32_t ntohl (uint32_t __netlong) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
extern uint16_t ntohs (uint16_t __netshort)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
extern uint32_t htonl (uint32_t __hostlong)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
extern uint16_t htons (uint16_t __hostshort)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));




# 1 "/usr/include/aarch64-linux-gnu/bits/byteswap.h" 1 3 4
# 387 "/usr/include/netinet/in.h" 2 3 4
# 1 "/usr/include/aarch64-linux-gnu/bits/uintn-identity.h" 1 3 4
# 388 "/usr/include/netinet/in.h" 2 3 4
# 503 "/usr/include/netinet/in.h" 3 4
extern int bindresvport (int __sockfd, struct sockaddr_in *__sock_in) __attribute__ ((__nothrow__ , __leaf__));


extern int bindresvport6 (int __sockfd, struct sockaddr_in6 *__sock_in)
     __attribute__ ((__nothrow__ , __leaf__));
# 533 "/usr/include/netinet/in.h" 3 4
struct cmsghdr;



struct in6_pktinfo
  {
    struct in6_addr ipi6_addr;
    unsigned int ipi6_ifindex;
  };


struct ip6_mtuinfo
  {
    struct sockaddr_in6 ip6m_addr;
    uint32_t ip6m_mtu;
  };



extern int inet6_option_space (int __nbytes)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__deprecated__));
extern int inet6_option_init (void *__bp, struct cmsghdr **__cmsgp,
         int __type) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__deprecated__));
extern int inet6_option_append (struct cmsghdr *__cmsg,
    const uint8_t *__typep, int __multx,
    int __plusy) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__deprecated__));
extern uint8_t *inet6_option_alloc (struct cmsghdr *__cmsg, int __datalen,
        int __multx, int __plusy)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__deprecated__));
extern int inet6_option_next (const struct cmsghdr *__cmsg,
         uint8_t **__tptrp)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__deprecated__));
extern int inet6_option_find (const struct cmsghdr *__cmsg,
         uint8_t **__tptrp, int __type)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__deprecated__));



extern int inet6_opt_init (void *__extbuf, socklen_t __extlen) __attribute__ ((__nothrow__ , __leaf__));
extern int inet6_opt_append (void *__extbuf, socklen_t __extlen, int __offset,
        uint8_t __type, socklen_t __len, uint8_t __align,
        void **__databufp) __attribute__ ((__nothrow__ , __leaf__));
extern int inet6_opt_finish (void *__extbuf, socklen_t __extlen, int __offset)
     __attribute__ ((__nothrow__ , __leaf__));
extern int inet6_opt_set_val (void *__databuf, int __offset, void *__val,
         socklen_t __vallen) __attribute__ ((__nothrow__ , __leaf__));
extern int inet6_opt_next (void *__extbuf, socklen_t __extlen, int __offset,
      uint8_t *__typep, socklen_t *__lenp,
      void **__databufp) __attribute__ ((__nothrow__ , __leaf__));
extern int inet6_opt_find (void *__extbuf, socklen_t __extlen, int __offset,
      uint8_t __type, socklen_t *__lenp,
      void **__databufp) __attribute__ ((__nothrow__ , __leaf__));
extern int inet6_opt_get_val (void *__databuf, int __offset, void *__val,
         socklen_t __vallen) __attribute__ ((__nothrow__ , __leaf__));



extern socklen_t inet6_rth_space (int __type, int __segments) __attribute__ ((__nothrow__ , __leaf__));
extern void *inet6_rth_init (void *__bp, socklen_t __bp_len, int __type,
        int __segments) __attribute__ ((__nothrow__ , __leaf__));
extern int inet6_rth_add (void *__bp, const struct in6_addr *__addr) __attribute__ ((__nothrow__ , __leaf__));
extern int inet6_rth_reverse (const void *__in, void *__out) __attribute__ ((__nothrow__ , __leaf__));
extern int inet6_rth_segments (const void *__bp) __attribute__ ((__nothrow__ , __leaf__));
extern struct in6_addr *inet6_rth_getaddr (const void *__bp, int __index)
     __attribute__ ((__nothrow__ , __leaf__));





extern int getipv4sourcefilter (int __s, struct in_addr __interface_addr,
    struct in_addr __group, uint32_t *__fmode,
    uint32_t *__numsrc, struct in_addr *__slist)
     __attribute__ ((__nothrow__ , __leaf__));


extern int setipv4sourcefilter (int __s, struct in_addr __interface_addr,
    struct in_addr __group, uint32_t __fmode,
    uint32_t __numsrc,
    const struct in_addr *__slist)
     __attribute__ ((__nothrow__ , __leaf__));



extern int getsourcefilter (int __s, uint32_t __interface_addr,
       const struct sockaddr *__group,
       socklen_t __grouplen, uint32_t *__fmode,
       uint32_t *__numsrc,
       struct sockaddr_storage *__slist) __attribute__ ((__nothrow__ , __leaf__));


extern int setsourcefilter (int __s, uint32_t __interface_addr,
       const struct sockaddr *__group,
       socklen_t __grouplen, uint32_t __fmode,
       uint32_t __numsrc,
       const struct sockaddr_storage *__slist) __attribute__ ((__nothrow__ , __leaf__));



# 32 "/home/ubuntu/neovim/.deps/usr/include/uv/unix.h" 2
# 1 "/usr/include/netinet/tcp.h" 1 3 4
# 93 "/usr/include/netinet/tcp.h" 3 4
typedef uint32_t tcp_seq;




struct tcphdr
  {
    __extension__ union
    {
      struct
      {
 uint16_t th_sport;
 uint16_t th_dport;
 tcp_seq th_seq;
 tcp_seq th_ack;

 uint8_t th_x2:4;
 uint8_t th_off:4;





 uint8_t th_flags;






 uint16_t th_win;
 uint16_t th_sum;
 uint16_t th_urp;
      };
      struct
      {
 uint16_t source;
 uint16_t dest;
 uint32_t seq;
 uint32_t ack_seq;

 uint16_t res1:4;
 uint16_t doff:4;
 uint16_t fin:1;
 uint16_t syn:1;
 uint16_t rst:1;
 uint16_t psh:1;
 uint16_t ack:1;
 uint16_t urg:1;
 uint16_t res2:2;
# 156 "/usr/include/netinet/tcp.h" 3 4
 uint16_t window;
 uint16_t check;
 uint16_t urg_ptr;
      };
    };
};

enum
{
  TCP_ESTABLISHED = 1,
  TCP_SYN_SENT,
  TCP_SYN_RECV,
  TCP_FIN_WAIT1,
  TCP_FIN_WAIT2,
  TCP_TIME_WAIT,
  TCP_CLOSE,
  TCP_CLOSE_WAIT,
  TCP_LAST_ACK,
  TCP_LISTEN,
  TCP_CLOSING
};
# 217 "/usr/include/netinet/tcp.h" 3 4
enum tcp_ca_state
{
  TCP_CA_Open = 0,
  TCP_CA_Disorder = 1,
  TCP_CA_CWR = 2,
  TCP_CA_Recovery = 3,
  TCP_CA_Loss = 4
};

struct tcp_info
{
  uint8_t tcpi_state;
  uint8_t tcpi_ca_state;
  uint8_t tcpi_retransmits;
  uint8_t tcpi_probes;
  uint8_t tcpi_backoff;
  uint8_t tcpi_options;
  uint8_t tcpi_snd_wscale : 4, tcpi_rcv_wscale : 4;

  uint32_t tcpi_rto;
  uint32_t tcpi_ato;
  uint32_t tcpi_snd_mss;
  uint32_t tcpi_rcv_mss;

  uint32_t tcpi_unacked;
  uint32_t tcpi_sacked;
  uint32_t tcpi_lost;
  uint32_t tcpi_retrans;
  uint32_t tcpi_fackets;


  uint32_t tcpi_last_data_sent;
  uint32_t tcpi_last_ack_sent;
  uint32_t tcpi_last_data_recv;
  uint32_t tcpi_last_ack_recv;


  uint32_t tcpi_pmtu;
  uint32_t tcpi_rcv_ssthresh;
  uint32_t tcpi_rtt;
  uint32_t tcpi_rttvar;
  uint32_t tcpi_snd_ssthresh;
  uint32_t tcpi_snd_cwnd;
  uint32_t tcpi_advmss;
  uint32_t tcpi_reordering;

  uint32_t tcpi_rcv_rtt;
  uint32_t tcpi_rcv_space;

  uint32_t tcpi_total_retrans;
};
# 276 "/usr/include/netinet/tcp.h" 3 4
struct tcp_md5sig
{
  struct sockaddr_storage tcpm_addr;
  uint8_t tcpm_flags;
  uint8_t tcpm_prefixlen;
  uint16_t tcpm_keylen;
  uint32_t __tcpm_pad;
  uint8_t tcpm_key[80];
};


struct tcp_repair_opt
{
  uint32_t opt_code;
  uint32_t opt_val;
};


enum
{
  TCP_NO_QUEUE,
  TCP_RECV_QUEUE,
  TCP_SEND_QUEUE,
  TCP_QUEUES_NR,
};
# 319 "/usr/include/netinet/tcp.h" 3 4
struct tcp_cookie_transactions
{
  uint16_t tcpct_flags;
  uint8_t __tcpct_pad1;
  uint8_t tcpct_cookie_desired;
  uint16_t tcpct_s_data_desired;
  uint16_t tcpct_used;
  uint8_t tcpct_value[536U];
};


struct tcp_repair_window
{
  uint32_t snd_wl1;
  uint32_t snd_wnd;
  uint32_t max_window;
  uint32_t rcv_wnd;
  uint32_t rcv_wup;
};


struct tcp_zerocopy_receive
{
  uint64_t address;
  uint32_t length;
  uint32_t recv_skip_hint;
};
# 33 "/home/ubuntu/neovim/.deps/usr/include/uv/unix.h" 2
# 1 "/usr/include/arpa/inet.h" 1 3 4
# 30 "/usr/include/arpa/inet.h" 3 4




extern in_addr_t inet_addr (const char *__cp) __attribute__ ((__nothrow__ , __leaf__));


extern in_addr_t inet_lnaof (struct in_addr __in) __attribute__ ((__nothrow__ , __leaf__));



extern struct in_addr inet_makeaddr (in_addr_t __net, in_addr_t __host)
     __attribute__ ((__nothrow__ , __leaf__));


extern in_addr_t inet_netof (struct in_addr __in) __attribute__ ((__nothrow__ , __leaf__));



extern in_addr_t inet_network (const char *__cp) __attribute__ ((__nothrow__ , __leaf__));



extern char *inet_ntoa (struct in_addr __in) __attribute__ ((__nothrow__ , __leaf__));




extern int inet_pton (int __af, const char *__restrict __cp,
        void *__restrict __buf) __attribute__ ((__nothrow__ , __leaf__));




extern const char *inet_ntop (int __af, const void *__restrict __cp,
         char *__restrict __buf, socklen_t __len)
     __attribute__ ((__nothrow__ , __leaf__));






extern int inet_aton (const char *__cp, struct in_addr *__inp) __attribute__ ((__nothrow__ , __leaf__));



extern char *inet_neta (in_addr_t __net, char *__buf, size_t __len) __attribute__ ((__nothrow__ , __leaf__));




extern char *inet_net_ntop (int __af, const void *__cp, int __bits,
       char *__buf, size_t __len) __attribute__ ((__nothrow__ , __leaf__));




extern int inet_net_pton (int __af, const char *__cp,
     void *__buf, size_t __len) __attribute__ ((__nothrow__ , __leaf__));




extern unsigned int inet_nsap_addr (const char *__cp,
        unsigned char *__buf, int __len) __attribute__ ((__nothrow__ , __leaf__));



extern char *inet_nsap_ntoa (int __len, const unsigned char *__cp,
        char *__buf) __attribute__ ((__nothrow__ , __leaf__));



# 34 "/home/ubuntu/neovim/.deps/usr/include/uv/unix.h" 2
# 1 "/usr/include/netdb.h" 1 3 4
# 32 "/usr/include/netdb.h" 3 4
# 1 "/usr/include/rpc/netdb.h" 1 3 4
# 42 "/usr/include/rpc/netdb.h" 3 4
# 1 "/usr/lib/gcc/aarch64-linux-gnu/9/include/stddef.h" 1 3 4
# 43 "/usr/include/rpc/netdb.h" 2 3 4



struct rpcent
{
  char *r_name;
  char **r_aliases;
  int r_number;
};

extern void setrpcent (int __stayopen) __attribute__ ((__nothrow__ , __leaf__));
extern void endrpcent (void) __attribute__ ((__nothrow__ , __leaf__));
extern struct rpcent *getrpcbyname (const char *__name) __attribute__ ((__nothrow__ , __leaf__));
extern struct rpcent *getrpcbynumber (int __number) __attribute__ ((__nothrow__ , __leaf__));
extern struct rpcent *getrpcent (void) __attribute__ ((__nothrow__ , __leaf__));


extern int getrpcbyname_r (const char *__name, struct rpcent *__result_buf,
      char *__buffer, size_t __buflen,
      struct rpcent **__result) __attribute__ ((__nothrow__ , __leaf__));

extern int getrpcbynumber_r (int __number, struct rpcent *__result_buf,
        char *__buffer, size_t __buflen,
        struct rpcent **__result) __attribute__ ((__nothrow__ , __leaf__));

extern int getrpcent_r (struct rpcent *__result_buf, char *__buffer,
   size_t __buflen, struct rpcent **__result) __attribute__ ((__nothrow__ , __leaf__));



# 33 "/usr/include/netdb.h" 2 3 4



# 1 "/usr/include/aarch64-linux-gnu/bits/types/sigevent_t.h" 1 3 4



# 1 "/usr/include/aarch64-linux-gnu/bits/wordsize.h" 1 3 4
# 5 "/usr/include/aarch64-linux-gnu/bits/types/sigevent_t.h" 2 3 4

# 1 "/usr/include/aarch64-linux-gnu/bits/types/__sigval_t.h" 1 3 4
# 24 "/usr/include/aarch64-linux-gnu/bits/types/__sigval_t.h" 3 4
union sigval
{
  int sival_int;
  void *sival_ptr;
};

typedef union sigval __sigval_t;
# 7 "/usr/include/aarch64-linux-gnu/bits/types/sigevent_t.h" 2 3 4
# 22 "/usr/include/aarch64-linux-gnu/bits/types/sigevent_t.h" 3 4
typedef struct sigevent
  {
    __sigval_t sigev_value;
    int sigev_signo;
    int sigev_notify;

    union
      {
 int _pad[((64 / sizeof (int)) - 4)];



 __pid_t _tid;

 struct
   {
     void (*_function) (__sigval_t);
     pthread_attr_t *_attribute;
   } _sigev_thread;
      } _sigev_un;
  } sigevent_t;
# 37 "/usr/include/netdb.h" 2 3 4



# 1 "/usr/include/aarch64-linux-gnu/bits/netdb.h" 1 3 4
# 26 "/usr/include/aarch64-linux-gnu/bits/netdb.h" 3 4
struct netent
{
  char *n_name;
  char **n_aliases;
  int n_addrtype;
  uint32_t n_net;
};
# 41 "/usr/include/netdb.h" 2 3 4
# 51 "/usr/include/netdb.h" 3 4








extern int *__h_errno_location (void) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
# 90 "/usr/include/netdb.h" 3 4
extern void herror (const char *__str) __attribute__ ((__nothrow__ , __leaf__));


extern const char *hstrerror (int __err_num) __attribute__ ((__nothrow__ , __leaf__));




struct hostent
{
  char *h_name;
  char **h_aliases;
  int h_addrtype;
  int h_length;
  char **h_addr_list;



};






extern void sethostent (int __stay_open);





extern void endhostent (void);






extern struct hostent *gethostent (void);






extern struct hostent *gethostbyaddr (const void *__addr, __socklen_t __len,
          int __type);





extern struct hostent *gethostbyname (const char *__name);
# 153 "/usr/include/netdb.h" 3 4
extern struct hostent *gethostbyname2 (const char *__name, int __af);
# 165 "/usr/include/netdb.h" 3 4
extern int gethostent_r (struct hostent *__restrict __result_buf,
    char *__restrict __buf, size_t __buflen,
    struct hostent **__restrict __result,
    int *__restrict __h_errnop);

extern int gethostbyaddr_r (const void *__restrict __addr, __socklen_t __len,
       int __type,
       struct hostent *__restrict __result_buf,
       char *__restrict __buf, size_t __buflen,
       struct hostent **__restrict __result,
       int *__restrict __h_errnop);

extern int gethostbyname_r (const char *__restrict __name,
       struct hostent *__restrict __result_buf,
       char *__restrict __buf, size_t __buflen,
       struct hostent **__restrict __result,
       int *__restrict __h_errnop);

extern int gethostbyname2_r (const char *__restrict __name, int __af,
        struct hostent *__restrict __result_buf,
        char *__restrict __buf, size_t __buflen,
        struct hostent **__restrict __result,
        int *__restrict __h_errnop);
# 196 "/usr/include/netdb.h" 3 4
extern void setnetent (int __stay_open);





extern void endnetent (void);






extern struct netent *getnetent (void);






extern struct netent *getnetbyaddr (uint32_t __net, int __type);





extern struct netent *getnetbyname (const char *__name);
# 235 "/usr/include/netdb.h" 3 4
extern int getnetent_r (struct netent *__restrict __result_buf,
   char *__restrict __buf, size_t __buflen,
   struct netent **__restrict __result,
   int *__restrict __h_errnop);

extern int getnetbyaddr_r (uint32_t __net, int __type,
      struct netent *__restrict __result_buf,
      char *__restrict __buf, size_t __buflen,
      struct netent **__restrict __result,
      int *__restrict __h_errnop);

extern int getnetbyname_r (const char *__restrict __name,
      struct netent *__restrict __result_buf,
      char *__restrict __buf, size_t __buflen,
      struct netent **__restrict __result,
      int *__restrict __h_errnop);




struct servent
{
  char *s_name;
  char **s_aliases;
  int s_port;
  char *s_proto;
};






extern void setservent (int __stay_open);





extern void endservent (void);






extern struct servent *getservent (void);






extern struct servent *getservbyname (const char *__name, const char *__proto);






extern struct servent *getservbyport (int __port, const char *__proto);
# 306 "/usr/include/netdb.h" 3 4
extern int getservent_r (struct servent *__restrict __result_buf,
    char *__restrict __buf, size_t __buflen,
    struct servent **__restrict __result);

extern int getservbyname_r (const char *__restrict __name,
       const char *__restrict __proto,
       struct servent *__restrict __result_buf,
       char *__restrict __buf, size_t __buflen,
       struct servent **__restrict __result);

extern int getservbyport_r (int __port, const char *__restrict __proto,
       struct servent *__restrict __result_buf,
       char *__restrict __buf, size_t __buflen,
       struct servent **__restrict __result);




struct protoent
{
  char *p_name;
  char **p_aliases;
  int p_proto;
};






extern void setprotoent (int __stay_open);





extern void endprotoent (void);






extern struct protoent *getprotoent (void);





extern struct protoent *getprotobyname (const char *__name);





extern struct protoent *getprotobynumber (int __proto);
# 372 "/usr/include/netdb.h" 3 4
extern int getprotoent_r (struct protoent *__restrict __result_buf,
     char *__restrict __buf, size_t __buflen,
     struct protoent **__restrict __result);

extern int getprotobyname_r (const char *__restrict __name,
        struct protoent *__restrict __result_buf,
        char *__restrict __buf, size_t __buflen,
        struct protoent **__restrict __result);

extern int getprotobynumber_r (int __proto,
          struct protoent *__restrict __result_buf,
          char *__restrict __buf, size_t __buflen,
          struct protoent **__restrict __result);
# 393 "/usr/include/netdb.h" 3 4
extern int setnetgrent (const char *__netgroup);







extern void endnetgrent (void);
# 410 "/usr/include/netdb.h" 3 4
extern int getnetgrent (char **__restrict __hostp,
   char **__restrict __userp,
   char **__restrict __domainp);
# 421 "/usr/include/netdb.h" 3 4
extern int innetgr (const char *__netgroup, const char *__host,
      const char *__user, const char *__domain);







extern int getnetgrent_r (char **__restrict __hostp,
     char **__restrict __userp,
     char **__restrict __domainp,
     char *__restrict __buffer, size_t __buflen);
# 449 "/usr/include/netdb.h" 3 4
extern int rcmd (char **__restrict __ahost, unsigned short int __rport,
   const char *__restrict __locuser,
   const char *__restrict __remuser,
   const char *__restrict __cmd, int *__restrict __fd2p);
# 461 "/usr/include/netdb.h" 3 4
extern int rcmd_af (char **__restrict __ahost, unsigned short int __rport,
      const char *__restrict __locuser,
      const char *__restrict __remuser,
      const char *__restrict __cmd, int *__restrict __fd2p,
      sa_family_t __af);
# 477 "/usr/include/netdb.h" 3 4
extern int rexec (char **__restrict __ahost, int __rport,
    const char *__restrict __name,
    const char *__restrict __pass,
    const char *__restrict __cmd, int *__restrict __fd2p);
# 489 "/usr/include/netdb.h" 3 4
extern int rexec_af (char **__restrict __ahost, int __rport,
       const char *__restrict __name,
       const char *__restrict __pass,
       const char *__restrict __cmd, int *__restrict __fd2p,
       sa_family_t __af);
# 503 "/usr/include/netdb.h" 3 4
extern int ruserok (const char *__rhost, int __suser,
      const char *__remuser, const char *__locuser);
# 513 "/usr/include/netdb.h" 3 4
extern int ruserok_af (const char *__rhost, int __suser,
         const char *__remuser, const char *__locuser,
         sa_family_t __af);
# 526 "/usr/include/netdb.h" 3 4
extern int iruserok (uint32_t __raddr, int __suser,
       const char *__remuser, const char *__locuser);
# 537 "/usr/include/netdb.h" 3 4
extern int iruserok_af (const void *__raddr, int __suser,
   const char *__remuser, const char *__locuser,
   sa_family_t __af);
# 549 "/usr/include/netdb.h" 3 4
extern int rresvport (int *__alport);
# 558 "/usr/include/netdb.h" 3 4
extern int rresvport_af (int *__alport, sa_family_t __af);






struct addrinfo
{
  int ai_flags;
  int ai_family;
  int ai_socktype;
  int ai_protocol;
  socklen_t ai_addrlen;
  struct sockaddr *ai_addr;
  char *ai_canonname;
  struct addrinfo *ai_next;
};



struct gaicb
{
  const char *ar_name;
  const char *ar_service;
  const struct addrinfo *ar_request;
  struct addrinfo *ar_result;

  int __return;
  int __glibc_reserved[5];
};
# 660 "/usr/include/netdb.h" 3 4
extern int getaddrinfo (const char *__restrict __name,
   const char *__restrict __service,
   const struct addrinfo *__restrict __req,
   struct addrinfo **__restrict __pai);


extern void freeaddrinfo (struct addrinfo *__ai) __attribute__ ((__nothrow__ , __leaf__));


extern const char *gai_strerror (int __ecode) __attribute__ ((__nothrow__ , __leaf__));





extern int getnameinfo (const struct sockaddr *__restrict __sa,
   socklen_t __salen, char *__restrict __host,
   socklen_t __hostlen, char *__restrict __serv,
   socklen_t __servlen, int __flags);
# 690 "/usr/include/netdb.h" 3 4
extern int getaddrinfo_a (int __mode, struct gaicb *__list[__restrict],
     int __ent, struct sigevent *__restrict __sig);
# 701 "/usr/include/netdb.h" 3 4
extern int gai_suspend (const struct gaicb *const __list[], int __ent,
   const struct timespec *__timeout);


extern int gai_error (struct gaicb *__req) __attribute__ ((__nothrow__ , __leaf__));


extern int gai_cancel (struct gaicb *__gaicbp) __attribute__ ((__nothrow__ , __leaf__));



# 35 "/home/ubuntu/neovim/.deps/usr/include/uv/unix.h" 2

# 1 "/usr/include/termios.h" 1 3 4
# 35 "/usr/include/termios.h" 3 4




# 1 "/usr/include/aarch64-linux-gnu/bits/termios.h" 1 3 4
# 23 "/usr/include/aarch64-linux-gnu/bits/termios.h" 3 4
typedef unsigned char cc_t;
typedef unsigned int speed_t;
typedef unsigned int tcflag_t;

# 1 "/usr/include/aarch64-linux-gnu/bits/termios-struct.h" 1 3 4
# 24 "/usr/include/aarch64-linux-gnu/bits/termios-struct.h" 3 4
struct termios
  {
    tcflag_t c_iflag;
    tcflag_t c_oflag;
    tcflag_t c_cflag;
    tcflag_t c_lflag;
    cc_t c_line;
    cc_t c_cc[32];
    speed_t c_ispeed;
    speed_t c_ospeed;


  };
# 28 "/usr/include/aarch64-linux-gnu/bits/termios.h" 2 3 4
# 1 "/usr/include/aarch64-linux-gnu/bits/termios-c_cc.h" 1 3 4
# 29 "/usr/include/aarch64-linux-gnu/bits/termios.h" 2 3 4
# 1 "/usr/include/aarch64-linux-gnu/bits/termios-c_iflag.h" 1 3 4
# 30 "/usr/include/aarch64-linux-gnu/bits/termios.h" 2 3 4
# 1 "/usr/include/aarch64-linux-gnu/bits/termios-c_oflag.h" 1 3 4
# 31 "/usr/include/aarch64-linux-gnu/bits/termios.h" 2 3 4
# 53 "/usr/include/aarch64-linux-gnu/bits/termios.h" 3 4
# 1 "/usr/include/aarch64-linux-gnu/bits/termios-baud.h" 1 3 4
# 54 "/usr/include/aarch64-linux-gnu/bits/termios.h" 2 3 4

# 1 "/usr/include/aarch64-linux-gnu/bits/termios-c_cflag.h" 1 3 4
# 56 "/usr/include/aarch64-linux-gnu/bits/termios.h" 2 3 4
# 1 "/usr/include/aarch64-linux-gnu/bits/termios-c_lflag.h" 1 3 4
# 57 "/usr/include/aarch64-linux-gnu/bits/termios.h" 2 3 4
# 74 "/usr/include/aarch64-linux-gnu/bits/termios.h" 3 4
# 1 "/usr/include/aarch64-linux-gnu/bits/termios-tcflow.h" 1 3 4
# 75 "/usr/include/aarch64-linux-gnu/bits/termios.h" 2 3 4

# 1 "/usr/include/aarch64-linux-gnu/bits/termios-misc.h" 1 3 4
# 76 "/usr/include/aarch64-linux-gnu/bits/termios.h" 2 3 4
# 40 "/usr/include/termios.h" 2 3 4
# 48 "/usr/include/termios.h" 3 4
extern speed_t cfgetospeed (const struct termios *__termios_p) __attribute__ ((__nothrow__ , __leaf__));


extern speed_t cfgetispeed (const struct termios *__termios_p) __attribute__ ((__nothrow__ , __leaf__));


extern int cfsetospeed (struct termios *__termios_p, speed_t __speed) __attribute__ ((__nothrow__ , __leaf__));


extern int cfsetispeed (struct termios *__termios_p, speed_t __speed) __attribute__ ((__nothrow__ , __leaf__));



extern int cfsetspeed (struct termios *__termios_p, speed_t __speed) __attribute__ ((__nothrow__ , __leaf__));




extern int tcgetattr (int __fd, struct termios *__termios_p) __attribute__ ((__nothrow__ , __leaf__));



extern int tcsetattr (int __fd, int __optional_actions,
        const struct termios *__termios_p) __attribute__ ((__nothrow__ , __leaf__));




extern void cfmakeraw (struct termios *__termios_p) __attribute__ ((__nothrow__ , __leaf__));



extern int tcsendbreak (int __fd, int __duration) __attribute__ ((__nothrow__ , __leaf__));





extern int tcdrain (int __fd);



extern int tcflush (int __fd, int __queue_selector) __attribute__ ((__nothrow__ , __leaf__));



extern int tcflow (int __fd, int __action) __attribute__ ((__nothrow__ , __leaf__));




extern __pid_t tcgetsid (int __fd) __attribute__ ((__nothrow__ , __leaf__));




# 1 "/usr/include/aarch64-linux-gnu/sys/ttydefaults.h" 1 3 4
# 105 "/usr/include/termios.h" 2 3 4



# 37 "/home/ubuntu/neovim/.deps/usr/include/uv/unix.h" 2
# 1 "/usr/include/pwd.h" 1 3 4
# 27 "/usr/include/pwd.h" 3 4





# 1 "/usr/lib/gcc/aarch64-linux-gnu/9/include/stddef.h" 1 3 4
# 33 "/usr/include/pwd.h" 2 3 4
# 49 "/usr/include/pwd.h" 3 4
struct passwd
{
  char *pw_name;
  char *pw_passwd;

  __uid_t pw_uid;
  __gid_t pw_gid;
  char *pw_gecos;
  char *pw_dir;
  char *pw_shell;
};
# 72 "/usr/include/pwd.h" 3 4
extern void setpwent (void);





extern void endpwent (void);





extern struct passwd *getpwent (void);
# 94 "/usr/include/pwd.h" 3 4
extern struct passwd *fgetpwent (FILE *__stream) __attribute__ ((__nonnull__ (1)));







extern int putpwent (const struct passwd *__restrict __p,
       FILE *__restrict __f);






extern struct passwd *getpwuid (__uid_t __uid);





extern struct passwd *getpwnam (const char *__name) __attribute__ ((__nonnull__ (1)));
# 139 "/usr/include/pwd.h" 3 4
extern int getpwent_r (struct passwd *__restrict __resultbuf,
         char *__restrict __buffer, size_t __buflen,
         struct passwd **__restrict __result)
         __attribute__ ((__nonnull__ (1, 2, 4)));


extern int getpwuid_r (__uid_t __uid,
         struct passwd *__restrict __resultbuf,
         char *__restrict __buffer, size_t __buflen,
         struct passwd **__restrict __result)
         __attribute__ ((__nonnull__ (2, 3, 5)));

extern int getpwnam_r (const char *__restrict __name,
         struct passwd *__restrict __resultbuf,
         char *__restrict __buffer, size_t __buflen,
         struct passwd **__restrict __result)
         __attribute__ ((__nonnull__ (1, 2, 3, 5)));
# 166 "/usr/include/pwd.h" 3 4
extern int fgetpwent_r (FILE *__restrict __stream,
   struct passwd *__restrict __resultbuf,
   char *__restrict __buffer, size_t __buflen,
   struct passwd **__restrict __result)
   __attribute__ ((__nonnull__ (1, 2, 3, 5)));
# 184 "/usr/include/pwd.h" 3 4
extern int getpw (__uid_t __uid, char *__buffer);



# 38 "/home/ubuntu/neovim/.deps/usr/include/uv/unix.h" 2


# 1 "/usr/include/semaphore.h" 1 3 4
# 28 "/usr/include/semaphore.h" 3 4
# 1 "/usr/include/aarch64-linux-gnu/bits/semaphore.h" 1 3 4
# 35 "/usr/include/aarch64-linux-gnu/bits/semaphore.h" 3 4
typedef union
{
  char __size[32];
  long long int __align;
} sem_t;
# 29 "/usr/include/semaphore.h" 2 3 4






extern int sem_init (sem_t *__sem, int __pshared, unsigned int __value)
  __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));


extern int sem_destroy (sem_t *__sem) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));


extern sem_t *sem_open (const char *__name, int __oflag, ...)
  __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));


extern int sem_close (sem_t *__sem) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));


extern int sem_unlink (const char *__name) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));





extern int sem_wait (sem_t *__sem) __attribute__ ((__nonnull__ (1)));






extern int sem_timedwait (sem_t *__restrict __sem,
     const struct timespec *__restrict __abstime)
  __attribute__ ((__nonnull__ (1, 2)));



extern int sem_clockwait (sem_t *__restrict __sem,
     clockid_t clock,
     const struct timespec *__restrict __abstime)
  __attribute__ ((__nonnull__ (1, 3)));



extern int sem_trywait (sem_t *__sem) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));


extern int sem_post (sem_t *__sem) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));


extern int sem_getvalue (sem_t *__restrict __sem, int *__restrict __sval)
  __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));



# 41 "/home/ubuntu/neovim/.deps/usr/include/uv/unix.h" 2
# 1 "/usr/include/aarch64-linux-gnu/sys/param.h" 1 3 4
# 23 "/usr/include/aarch64-linux-gnu/sys/param.h" 3 4
# 1 "/usr/lib/gcc/aarch64-linux-gnu/9/include/stddef.h" 1 3 4
# 24 "/usr/include/aarch64-linux-gnu/sys/param.h" 2 3 4


# 1 "/usr/lib/gcc/aarch64-linux-gnu/9/include/limits.h" 1 3 4
# 27 "/usr/include/aarch64-linux-gnu/sys/param.h" 2 3 4

# 1 "/usr/include/signal.h" 1 3 4
# 27 "/usr/include/signal.h" 3 4



# 1 "/usr/include/aarch64-linux-gnu/bits/signum.h" 1 3 4
# 26 "/usr/include/aarch64-linux-gnu/bits/signum.h" 3 4
# 1 "/usr/include/aarch64-linux-gnu/bits/signum-generic.h" 1 3 4
# 27 "/usr/include/aarch64-linux-gnu/bits/signum.h" 2 3 4
# 31 "/usr/include/signal.h" 2 3 4

# 1 "/usr/include/aarch64-linux-gnu/bits/types/sig_atomic_t.h" 1 3 4







typedef __sig_atomic_t sig_atomic_t;
# 33 "/usr/include/signal.h" 2 3 4
# 57 "/usr/include/signal.h" 3 4
# 1 "/usr/include/aarch64-linux-gnu/bits/types/siginfo_t.h" 1 3 4



# 1 "/usr/include/aarch64-linux-gnu/bits/wordsize.h" 1 3 4
# 5 "/usr/include/aarch64-linux-gnu/bits/types/siginfo_t.h" 2 3 4
# 16 "/usr/include/aarch64-linux-gnu/bits/types/siginfo_t.h" 3 4
# 1 "/usr/include/aarch64-linux-gnu/bits/siginfo-arch.h" 1 3 4
# 17 "/usr/include/aarch64-linux-gnu/bits/types/siginfo_t.h" 2 3 4
# 36 "/usr/include/aarch64-linux-gnu/bits/types/siginfo_t.h" 3 4
typedef struct
  {
    int si_signo;

    int si_errno;

    int si_code;





    int __pad0;


    union
      {
 int _pad[((128 / sizeof (int)) - 4)];


 struct
   {
     __pid_t si_pid;
     __uid_t si_uid;
   } _kill;


 struct
   {
     int si_tid;
     int si_overrun;
     __sigval_t si_sigval;
   } _timer;


 struct
   {
     __pid_t si_pid;
     __uid_t si_uid;
     __sigval_t si_sigval;
   } _rt;


 struct
   {
     __pid_t si_pid;
     __uid_t si_uid;
     int si_status;
     __clock_t si_utime;
     __clock_t si_stime;
   } _sigchld;


 struct
   {
     void *si_addr;
    
     short int si_addr_lsb;
     union
       {

  struct
    {
      void *_lower;
      void *_upper;
    } _addr_bnd;

  __uint32_t _pkey;
       } _bounds;
   } _sigfault;


 struct
   {
     long int si_band;
     int si_fd;
   } _sigpoll;



 struct
   {
     void *_call_addr;
     int _syscall;
     unsigned int _arch;
   } _sigsys;

      } _sifields;
  } siginfo_t ;
# 58 "/usr/include/signal.h" 2 3 4
# 1 "/usr/include/aarch64-linux-gnu/bits/siginfo-consts.h" 1 3 4
# 35 "/usr/include/aarch64-linux-gnu/bits/siginfo-consts.h" 3 4
enum
{
  SI_ASYNCNL = -60,
  SI_DETHREAD = -7,

  SI_TKILL,
  SI_SIGIO,

  SI_ASYNCIO,
  SI_MESGQ,
  SI_TIMER,





  SI_QUEUE,
  SI_USER,
  SI_KERNEL = 0x80
# 66 "/usr/include/aarch64-linux-gnu/bits/siginfo-consts.h" 3 4
};




enum
{
  ILL_ILLOPC = 1,

  ILL_ILLOPN,

  ILL_ILLADR,

  ILL_ILLTRP,

  ILL_PRVOPC,

  ILL_PRVREG,

  ILL_COPROC,

  ILL_BADSTK,

  ILL_BADIADDR

};


enum
{
  FPE_INTDIV = 1,

  FPE_INTOVF,

  FPE_FLTDIV,

  FPE_FLTOVF,

  FPE_FLTUND,

  FPE_FLTRES,

  FPE_FLTINV,

  FPE_FLTSUB,

  FPE_FLTUNK = 14,

  FPE_CONDTRAP

};


enum
{
  SEGV_MAPERR = 1,

  SEGV_ACCERR,

  SEGV_BNDERR,

  SEGV_PKUERR,

  SEGV_ACCADI,

  SEGV_ADIDERR,

  SEGV_ADIPERR

};


enum
{
  BUS_ADRALN = 1,

  BUS_ADRERR,

  BUS_OBJERR,

  BUS_MCEERR_AR,

  BUS_MCEERR_AO

};




enum
{
  TRAP_BRKPT = 1,

  TRAP_TRACE,

  TRAP_BRANCH,

  TRAP_HWBKPT,

  TRAP_UNK

};




enum
{
  CLD_EXITED = 1,

  CLD_KILLED,

  CLD_DUMPED,

  CLD_TRAPPED,

  CLD_STOPPED,

  CLD_CONTINUED

};


enum
{
  POLL_IN = 1,

  POLL_OUT,

  POLL_MSG,

  POLL_ERR,

  POLL_PRI,

  POLL_HUP

};





# 1 "/usr/include/aarch64-linux-gnu/bits/siginfo-consts-arch.h" 1 3 4
# 210 "/usr/include/aarch64-linux-gnu/bits/siginfo-consts.h" 2 3 4
# 59 "/usr/include/signal.h" 2 3 4



# 1 "/usr/include/aarch64-linux-gnu/bits/types/sigval_t.h" 1 3 4
# 16 "/usr/include/aarch64-linux-gnu/bits/types/sigval_t.h" 3 4
typedef __sigval_t sigval_t;
# 63 "/usr/include/signal.h" 2 3 4




# 1 "/usr/include/aarch64-linux-gnu/bits/sigevent-consts.h" 1 3 4
# 27 "/usr/include/aarch64-linux-gnu/bits/sigevent-consts.h" 3 4
enum
{
  SIGEV_SIGNAL = 0,

  SIGEV_NONE,

  SIGEV_THREAD,


  SIGEV_THREAD_ID = 4


};
# 68 "/usr/include/signal.h" 2 3 4




typedef void (*__sighandler_t) (int);




extern __sighandler_t __sysv_signal (int __sig, __sighandler_t __handler)
     __attribute__ ((__nothrow__ , __leaf__));

extern __sighandler_t sysv_signal (int __sig, __sighandler_t __handler)
     __attribute__ ((__nothrow__ , __leaf__));






extern __sighandler_t signal (int __sig, __sighandler_t __handler)
     __attribute__ ((__nothrow__ , __leaf__));
# 112 "/usr/include/signal.h" 3 4
extern int kill (__pid_t __pid, int __sig) __attribute__ ((__nothrow__ , __leaf__));






extern int killpg (__pid_t __pgrp, int __sig) __attribute__ ((__nothrow__ , __leaf__));



extern int raise (int __sig) __attribute__ ((__nothrow__ , __leaf__));



extern __sighandler_t ssignal (int __sig, __sighandler_t __handler)
     __attribute__ ((__nothrow__ , __leaf__));
extern int gsignal (int __sig) __attribute__ ((__nothrow__ , __leaf__));




extern void psignal (int __sig, const char *__s);


extern void psiginfo (const siginfo_t *__pinfo, const char *__s);
# 151 "/usr/include/signal.h" 3 4
extern int sigpause (int __sig) __asm__ ("__xpg_sigpause");
# 170 "/usr/include/signal.h" 3 4
extern int sigblock (int __mask) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__deprecated__));


extern int sigsetmask (int __mask) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__deprecated__));


extern int siggetmask (void) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__deprecated__));
# 185 "/usr/include/signal.h" 3 4
typedef __sighandler_t sighandler_t;




typedef __sighandler_t sig_t;





extern int sigemptyset (sigset_t *__set) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));


extern int sigfillset (sigset_t *__set) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));


extern int sigaddset (sigset_t *__set, int __signo) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));


extern int sigdelset (sigset_t *__set, int __signo) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));


extern int sigismember (const sigset_t *__set, int __signo)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));



extern int sigisemptyset (const sigset_t *__set) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));


extern int sigandset (sigset_t *__set, const sigset_t *__left,
        const sigset_t *__right) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2, 3)));


extern int sigorset (sigset_t *__set, const sigset_t *__left,
       const sigset_t *__right) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2, 3)));




# 1 "/usr/include/aarch64-linux-gnu/bits/sigaction.h" 1 3 4
# 27 "/usr/include/aarch64-linux-gnu/bits/sigaction.h" 3 4
struct sigaction
  {


    union
      {

 __sighandler_t sa_handler;

 void (*sa_sigaction) (int, siginfo_t *, void *);
      }
    __sigaction_handler;







    __sigset_t sa_mask;


    int sa_flags;


    void (*sa_restorer) (void);
  };
# 227 "/usr/include/signal.h" 2 3 4


extern int sigprocmask (int __how, const sigset_t *__restrict __set,
   sigset_t *__restrict __oset) __attribute__ ((__nothrow__ , __leaf__));






extern int sigsuspend (const sigset_t *__set) __attribute__ ((__nonnull__ (1)));


extern int sigaction (int __sig, const struct sigaction *__restrict __act,
        struct sigaction *__restrict __oact) __attribute__ ((__nothrow__ , __leaf__));


extern int sigpending (sigset_t *__set) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));







extern int sigwait (const sigset_t *__restrict __set, int *__restrict __sig)
     __attribute__ ((__nonnull__ (1, 2)));







extern int sigwaitinfo (const sigset_t *__restrict __set,
   siginfo_t *__restrict __info) __attribute__ ((__nonnull__ (1)));






extern int sigtimedwait (const sigset_t *__restrict __set,
    siginfo_t *__restrict __info,
    const struct timespec *__restrict __timeout)
     __attribute__ ((__nonnull__ (1)));



extern int sigqueue (__pid_t __pid, int __sig, const union sigval __val)
     __attribute__ ((__nothrow__ , __leaf__));
# 286 "/usr/include/signal.h" 3 4
extern const char *const _sys_siglist[(64 + 1)];
extern const char *const sys_siglist[(64 + 1)];



# 1 "/usr/include/aarch64-linux-gnu/bits/sigcontext.h" 1 3 4
# 30 "/usr/include/aarch64-linux-gnu/bits/sigcontext.h" 3 4
# 1 "/usr/include/aarch64-linux-gnu/asm/sigcontext.h" 1 3 4
# 28 "/usr/include/aarch64-linux-gnu/asm/sigcontext.h" 3 4
struct sigcontext {
 __u64 fault_address;

 __u64 regs[31];
 __u64 sp;
 __u64 pc;
 __u64 pstate;

 __u8 __reserved[4096] __attribute__((__aligned__(16)));
};
# 66 "/usr/include/aarch64-linux-gnu/asm/sigcontext.h" 3 4
struct _aarch64_ctx {
 __u32 magic;
 __u32 size;
};



struct fpsimd_context {
 struct _aarch64_ctx head;
 __u32 fpsr;
 __u32 fpcr;
 __uint128_t vregs[32];
};
# 92 "/usr/include/aarch64-linux-gnu/asm/sigcontext.h" 3 4
struct esr_context {
 struct _aarch64_ctx head;
 __u64 esr;
};
# 125 "/usr/include/aarch64-linux-gnu/asm/sigcontext.h" 3 4
struct extra_context {
 struct _aarch64_ctx head;
 __u64 datap;
 __u32 size;
 __u32 __reserved[3];
};



struct sve_context {
 struct _aarch64_ctx head;
 __u16 vl;
 __u16 __reserved[3];
};



# 1 "/usr/include/aarch64-linux-gnu/asm/sve_context.h" 1 3 4
# 143 "/usr/include/aarch64-linux-gnu/asm/sigcontext.h" 2 3 4
# 31 "/usr/include/aarch64-linux-gnu/bits/sigcontext.h" 2 3 4



# 1 "/usr/lib/gcc/aarch64-linux-gnu/9/include/stddef.h" 1 3 4
# 35 "/usr/include/aarch64-linux-gnu/bits/sigcontext.h" 2 3 4
# 292 "/usr/include/signal.h" 2 3 4


extern int sigreturn (struct sigcontext *__scp) __attribute__ ((__nothrow__ , __leaf__));






# 1 "/usr/lib/gcc/aarch64-linux-gnu/9/include/stddef.h" 1 3 4
# 302 "/usr/include/signal.h" 2 3 4

# 1 "/usr/include/aarch64-linux-gnu/bits/types/stack_t.h" 1 3 4
# 23 "/usr/include/aarch64-linux-gnu/bits/types/stack_t.h" 3 4
# 1 "/usr/lib/gcc/aarch64-linux-gnu/9/include/stddef.h" 1 3 4
# 24 "/usr/include/aarch64-linux-gnu/bits/types/stack_t.h" 2 3 4


typedef struct
  {
    void *ss_sp;
    int ss_flags;
    size_t ss_size;
  } stack_t;
# 304 "/usr/include/signal.h" 2 3 4


# 1 "/usr/include/aarch64-linux-gnu/sys/ucontext.h" 1 3 4
# 36 "/usr/include/aarch64-linux-gnu/sys/ucontext.h" 3 4
# 1 "/usr/include/aarch64-linux-gnu/sys/procfs.h" 1 3 4
# 33 "/usr/include/aarch64-linux-gnu/sys/procfs.h" 3 4
# 1 "/usr/include/aarch64-linux-gnu/sys/time.h" 1 3 4
# 34 "/usr/include/aarch64-linux-gnu/sys/time.h" 3 4

# 52 "/usr/include/aarch64-linux-gnu/sys/time.h" 3 4
struct timezone
  {
    int tz_minuteswest;
    int tz_dsttime;
  };
# 66 "/usr/include/aarch64-linux-gnu/sys/time.h" 3 4
extern int gettimeofday (struct timeval *__restrict __tv,
    void *__restrict __tz) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));







extern int settimeofday (const struct timeval *__tv,
    const struct timezone *__tz)
     __attribute__ ((__nothrow__ , __leaf__));





extern int adjtime (const struct timeval *__delta,
      struct timeval *__olddelta) __attribute__ ((__nothrow__ , __leaf__));




enum __itimer_which
  {

    ITIMER_REAL = 0,


    ITIMER_VIRTUAL = 1,



    ITIMER_PROF = 2

  };



struct itimerval
  {

    struct timeval it_interval;

    struct timeval it_value;
  };




typedef enum __itimer_which __itimer_which_t;






extern int getitimer (__itimer_which_t __which,
        struct itimerval *__value) __attribute__ ((__nothrow__ , __leaf__));




extern int setitimer (__itimer_which_t __which,
        const struct itimerval *__restrict __new,
        struct itimerval *__restrict __old) __attribute__ ((__nothrow__ , __leaf__));




extern int utimes (const char *__file, const struct timeval __tvp[2])
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));



extern int lutimes (const char *__file, const struct timeval __tvp[2])
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));


extern int futimes (int __fd, const struct timeval __tvp[2]) __attribute__ ((__nothrow__ , __leaf__));






extern int futimesat (int __fd, const char *__file,
        const struct timeval __tvp[2]) __attribute__ ((__nothrow__ , __leaf__));
# 187 "/usr/include/aarch64-linux-gnu/sys/time.h" 3 4

# 34 "/usr/include/aarch64-linux-gnu/sys/procfs.h" 2 3 4

# 1 "/usr/include/aarch64-linux-gnu/sys/user.h" 1 3 4
# 22 "/usr/include/aarch64-linux-gnu/sys/user.h" 3 4
struct user_regs_struct
{
  unsigned long long regs[31];
  unsigned long long sp;
  unsigned long long pc;
  unsigned long long pstate;
};

struct user_fpsimd_struct
{
  __uint128_t vregs[32];
  unsigned int fpsr;
  unsigned int fpcr;
};
# 36 "/usr/include/aarch64-linux-gnu/sys/procfs.h" 2 3 4




# 1 "/usr/include/aarch64-linux-gnu/bits/procfs.h" 1 3 4
# 25 "/usr/include/aarch64-linux-gnu/bits/procfs.h" 3 4
typedef __uint64_t elf_greg_t;






typedef elf_greg_t elf_gregset_t[(sizeof (struct user_regs_struct) / sizeof (elf_greg_t))];


typedef struct user_fpsimd_struct elf_fpregset_t;
# 41 "/usr/include/aarch64-linux-gnu/sys/procfs.h" 2 3 4



# 1 "/usr/include/aarch64-linux-gnu/bits/procfs-id.h" 1 3 4
# 24 "/usr/include/aarch64-linux-gnu/bits/procfs-id.h" 3 4
typedef unsigned int __pr_uid_t;
typedef unsigned int __pr_gid_t;
# 45 "/usr/include/aarch64-linux-gnu/sys/procfs.h" 2 3 4




struct elf_siginfo
  {
    int si_signo;
    int si_code;
    int si_errno;
  };
# 63 "/usr/include/aarch64-linux-gnu/sys/procfs.h" 3 4
struct elf_prstatus
  {
    struct elf_siginfo pr_info;
    short int pr_cursig;
    unsigned long int pr_sigpend;
    unsigned long int pr_sighold;
    __pid_t pr_pid;
    __pid_t pr_ppid;
    __pid_t pr_pgrp;
    __pid_t pr_sid;
    struct timeval pr_utime;
    struct timeval pr_stime;
    struct timeval pr_cutime;
    struct timeval pr_cstime;
    elf_gregset_t pr_reg;
    int pr_fpvalid;
  };




struct elf_prpsinfo
  {
    char pr_state;
    char pr_sname;
    char pr_zomb;
    char pr_nice;
    unsigned long int pr_flag;
    __pr_uid_t pr_uid;
    __pr_gid_t pr_gid;
    int pr_pid, pr_ppid, pr_pgrp, pr_sid;

    char pr_fname[16];
    char pr_psargs[(80)];
  };






typedef void *psaddr_t;

# 1 "/usr/include/aarch64-linux-gnu/bits/procfs-prregset.h" 1 3 4
# 24 "/usr/include/aarch64-linux-gnu/bits/procfs-prregset.h" 3 4
typedef elf_gregset_t __prgregset_t;
typedef elf_fpregset_t __prfpregset_t;
# 107 "/usr/include/aarch64-linux-gnu/sys/procfs.h" 2 3 4


typedef __prgregset_t prgregset_t;
typedef __prfpregset_t prfpregset_t;



typedef __pid_t lwpid_t;


typedef struct elf_prstatus prstatus_t;
typedef struct elf_prpsinfo prpsinfo_t;





# 1 "/usr/include/aarch64-linux-gnu/bits/procfs-extra.h" 1 3 4
# 125 "/usr/include/aarch64-linux-gnu/sys/procfs.h" 2 3 4
# 37 "/usr/include/aarch64-linux-gnu/sys/ucontext.h" 2 3 4


typedef elf_greg_t greg_t;


typedef elf_gregset_t gregset_t;


typedef elf_fpregset_t fpregset_t;






typedef struct
  {
    unsigned long long int fault_address;
    unsigned long long int regs[31];
    unsigned long long int sp;
    unsigned long long int pc;
    unsigned long long int pstate;




    unsigned char __reserved[4096] __attribute__ ((__aligned__ (16)));
  } mcontext_t;


typedef struct ucontext_t
  {
    unsigned long uc_flags;
    struct ucontext_t *uc_link;
    stack_t uc_stack;
    sigset_t uc_sigmask;
    mcontext_t uc_mcontext;
  } ucontext_t;
# 307 "/usr/include/signal.h" 2 3 4







extern int siginterrupt (int __sig, int __interrupt) __attribute__ ((__nothrow__ , __leaf__));

# 1 "/usr/include/aarch64-linux-gnu/bits/sigstack.h" 1 3 4
# 317 "/usr/include/signal.h" 2 3 4
# 1 "/usr/include/aarch64-linux-gnu/bits/ss_flags.h" 1 3 4
# 27 "/usr/include/aarch64-linux-gnu/bits/ss_flags.h" 3 4
enum
{
  SS_ONSTACK = 1,

  SS_DISABLE

};
# 318 "/usr/include/signal.h" 2 3 4



extern int sigaltstack (const stack_t *__restrict __ss,
   stack_t *__restrict __oss) __attribute__ ((__nothrow__ , __leaf__));




# 1 "/usr/include/aarch64-linux-gnu/bits/types/struct_sigstack.h" 1 3 4
# 23 "/usr/include/aarch64-linux-gnu/bits/types/struct_sigstack.h" 3 4
struct sigstack
  {
    void *ss_sp;
    int ss_onstack;
  };
# 328 "/usr/include/signal.h" 2 3 4







extern int sigstack (struct sigstack *__ss, struct sigstack *__oss)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__deprecated__));






extern int sighold (int __sig) __attribute__ ((__nothrow__ , __leaf__));


extern int sigrelse (int __sig) __attribute__ ((__nothrow__ , __leaf__));


extern int sigignore (int __sig) __attribute__ ((__nothrow__ , __leaf__));


extern __sighandler_t sigset (int __sig, __sighandler_t __disp) __attribute__ ((__nothrow__ , __leaf__));






# 1 "/usr/include/aarch64-linux-gnu/bits/sigthread.h" 1 3 4
# 31 "/usr/include/aarch64-linux-gnu/bits/sigthread.h" 3 4
extern int pthread_sigmask (int __how,
       const __sigset_t *__restrict __newmask,
       __sigset_t *__restrict __oldmask)__attribute__ ((__nothrow__ , __leaf__));


extern int pthread_kill (pthread_t __threadid, int __signo) __attribute__ ((__nothrow__ , __leaf__));



extern int pthread_sigqueue (pthread_t __threadid, int __signo,
        const union sigval __value) __attribute__ ((__nothrow__ , __leaf__));
# 360 "/usr/include/signal.h" 2 3 4






extern int __libc_current_sigrtmin (void) __attribute__ ((__nothrow__ , __leaf__));

extern int __libc_current_sigrtmax (void) __attribute__ ((__nothrow__ , __leaf__));





# 1 "/usr/include/aarch64-linux-gnu/bits/signal_ext.h" 1 3 4
# 29 "/usr/include/aarch64-linux-gnu/bits/signal_ext.h" 3 4
extern int tgkill (__pid_t __tgid, __pid_t __tid, int __signal);
# 375 "/usr/include/signal.h" 2 3 4


# 29 "/usr/include/aarch64-linux-gnu/sys/param.h" 2 3 4


# 1 "/usr/include/aarch64-linux-gnu/bits/param.h" 1 3 4
# 28 "/usr/include/aarch64-linux-gnu/bits/param.h" 3 4
# 1 "/usr/include/linux/param.h" 1 3 4




# 1 "/usr/include/aarch64-linux-gnu/asm/param.h" 1 3 4
# 22 "/usr/include/aarch64-linux-gnu/asm/param.h" 3 4
# 1 "/usr/include/asm-generic/param.h" 1 3 4
# 23 "/usr/include/aarch64-linux-gnu/asm/param.h" 2 3 4
# 6 "/usr/include/linux/param.h" 2 3 4
# 29 "/usr/include/aarch64-linux-gnu/bits/param.h" 2 3 4
# 32 "/usr/include/aarch64-linux-gnu/sys/param.h" 2 3 4
# 42 "/home/ubuntu/neovim/.deps/usr/include/uv/unix.h" 2

# 1 "/usr/include/pthread.h" 1 3 4
# 22 "/usr/include/pthread.h" 3 4
# 1 "/usr/include/sched.h" 1 3 4
# 29 "/usr/include/sched.h" 3 4
# 1 "/usr/lib/gcc/aarch64-linux-gnu/9/include/stddef.h" 1 3 4
# 30 "/usr/include/sched.h" 2 3 4
# 43 "/usr/include/sched.h" 3 4
# 1 "/usr/include/aarch64-linux-gnu/bits/sched.h" 1 3 4
# 76 "/usr/include/aarch64-linux-gnu/bits/sched.h" 3 4
# 1 "/usr/include/aarch64-linux-gnu/bits/types/struct_sched_param.h" 1 3 4
# 23 "/usr/include/aarch64-linux-gnu/bits/types/struct_sched_param.h" 3 4
struct sched_param
{
  int sched_priority;
};
# 77 "/usr/include/aarch64-linux-gnu/bits/sched.h" 2 3 4





extern int clone (int (*__fn) (void *__arg), void *__child_stack,
    int __flags, void *__arg, ...) __attribute__ ((__nothrow__ , __leaf__));


extern int unshare (int __flags) __attribute__ ((__nothrow__ , __leaf__));


extern int sched_getcpu (void) __attribute__ ((__nothrow__ , __leaf__));


extern int getcpu (unsigned int *, unsigned int *) __attribute__ ((__nothrow__ , __leaf__));


extern int setns (int __fd, int __nstype) __attribute__ ((__nothrow__ , __leaf__));



# 44 "/usr/include/sched.h" 2 3 4
# 1 "/usr/include/aarch64-linux-gnu/bits/cpu-set.h" 1 3 4
# 32 "/usr/include/aarch64-linux-gnu/bits/cpu-set.h" 3 4
typedef unsigned long int __cpu_mask;






typedef struct
{
  __cpu_mask __bits[1024 / (8 * sizeof (__cpu_mask))];
} cpu_set_t;
# 115 "/usr/include/aarch64-linux-gnu/bits/cpu-set.h" 3 4


extern int __sched_cpucount (size_t __setsize, const cpu_set_t *__setp)
     __attribute__ ((__nothrow__ , __leaf__));
extern cpu_set_t *__sched_cpualloc (size_t __count) __attribute__ ((__nothrow__ , __leaf__)) ;
extern void __sched_cpufree (cpu_set_t *__set) __attribute__ ((__nothrow__ , __leaf__));


# 45 "/usr/include/sched.h" 2 3 4









extern int sched_setparam (__pid_t __pid, const struct sched_param *__param)
     __attribute__ ((__nothrow__ , __leaf__));


extern int sched_getparam (__pid_t __pid, struct sched_param *__param) __attribute__ ((__nothrow__ , __leaf__));


extern int sched_setscheduler (__pid_t __pid, int __policy,
          const struct sched_param *__param) __attribute__ ((__nothrow__ , __leaf__));


extern int sched_getscheduler (__pid_t __pid) __attribute__ ((__nothrow__ , __leaf__));


extern int sched_yield (void) __attribute__ ((__nothrow__ , __leaf__));


extern int sched_get_priority_max (int __algorithm) __attribute__ ((__nothrow__ , __leaf__));


extern int sched_get_priority_min (int __algorithm) __attribute__ ((__nothrow__ , __leaf__));


extern int sched_rr_get_interval (__pid_t __pid, struct timespec *__t) __attribute__ ((__nothrow__ , __leaf__));
# 121 "/usr/include/sched.h" 3 4
extern int sched_setaffinity (__pid_t __pid, size_t __cpusetsize,
         const cpu_set_t *__cpuset) __attribute__ ((__nothrow__ , __leaf__));


extern int sched_getaffinity (__pid_t __pid, size_t __cpusetsize,
         cpu_set_t *__cpuset) __attribute__ ((__nothrow__ , __leaf__));



# 23 "/usr/include/pthread.h" 2 3 4
# 1 "/usr/include/time.h" 1 3 4
# 29 "/usr/include/time.h" 3 4
# 1 "/usr/lib/gcc/aarch64-linux-gnu/9/include/stddef.h" 1 3 4
# 30 "/usr/include/time.h" 2 3 4



# 1 "/usr/include/aarch64-linux-gnu/bits/time.h" 1 3 4
# 73 "/usr/include/aarch64-linux-gnu/bits/time.h" 3 4
# 1 "/usr/include/aarch64-linux-gnu/bits/timex.h" 1 3 4
# 26 "/usr/include/aarch64-linux-gnu/bits/timex.h" 3 4
struct timex
{
  unsigned int modes;
  __syscall_slong_t offset;
  __syscall_slong_t freq;
  __syscall_slong_t maxerror;
  __syscall_slong_t esterror;
  int status;
  __syscall_slong_t constant;
  __syscall_slong_t precision;
  __syscall_slong_t tolerance;
  struct timeval time;
  __syscall_slong_t tick;
  __syscall_slong_t ppsfreq;
  __syscall_slong_t jitter;
  int shift;
  __syscall_slong_t stabil;
  __syscall_slong_t jitcnt;
  __syscall_slong_t calcnt;
  __syscall_slong_t errcnt;
  __syscall_slong_t stbcnt;

  int tai;


  int :32; int :32; int :32; int :32;
  int :32; int :32; int :32; int :32;
  int :32; int :32; int :32;
};
# 74 "/usr/include/aarch64-linux-gnu/bits/time.h" 2 3 4




extern int clock_adjtime (__clockid_t __clock_id, struct timex *__utx) __attribute__ ((__nothrow__ , __leaf__));


# 34 "/usr/include/time.h" 2 3 4





# 1 "/usr/include/aarch64-linux-gnu/bits/types/struct_tm.h" 1 3 4






struct tm
{
  int tm_sec;
  int tm_min;
  int tm_hour;
  int tm_mday;
  int tm_mon;
  int tm_year;
  int tm_wday;
  int tm_yday;
  int tm_isdst;


  long int tm_gmtoff;
  const char *tm_zone;




};
# 40 "/usr/include/time.h" 2 3 4
# 48 "/usr/include/time.h" 3 4
# 1 "/usr/include/aarch64-linux-gnu/bits/types/struct_itimerspec.h" 1 3 4







struct itimerspec
  {
    struct timespec it_interval;
    struct timespec it_value;
  };
# 49 "/usr/include/time.h" 2 3 4
struct sigevent;
# 68 "/usr/include/time.h" 3 4




extern clock_t clock (void) __attribute__ ((__nothrow__ , __leaf__));


extern time_t time (time_t *__timer) __attribute__ ((__nothrow__ , __leaf__));


extern double difftime (time_t __time1, time_t __time0)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));


extern time_t mktime (struct tm *__tp) __attribute__ ((__nothrow__ , __leaf__));





extern size_t strftime (char *__restrict __s, size_t __maxsize,
   const char *__restrict __format,
   const struct tm *__restrict __tp) __attribute__ ((__nothrow__ , __leaf__));




extern char *strptime (const char *__restrict __s,
         const char *__restrict __fmt, struct tm *__tp)
     __attribute__ ((__nothrow__ , __leaf__));






extern size_t strftime_l (char *__restrict __s, size_t __maxsize,
     const char *__restrict __format,
     const struct tm *__restrict __tp,
     locale_t __loc) __attribute__ ((__nothrow__ , __leaf__));



extern char *strptime_l (const char *__restrict __s,
    const char *__restrict __fmt, struct tm *__tp,
    locale_t __loc) __attribute__ ((__nothrow__ , __leaf__));





extern struct tm *gmtime (const time_t *__timer) __attribute__ ((__nothrow__ , __leaf__));



extern struct tm *localtime (const time_t *__timer) __attribute__ ((__nothrow__ , __leaf__));




extern struct tm *gmtime_r (const time_t *__restrict __timer,
       struct tm *__restrict __tp) __attribute__ ((__nothrow__ , __leaf__));



extern struct tm *localtime_r (const time_t *__restrict __timer,
          struct tm *__restrict __tp) __attribute__ ((__nothrow__ , __leaf__));




extern char *asctime (const struct tm *__tp) __attribute__ ((__nothrow__ , __leaf__));


extern char *ctime (const time_t *__timer) __attribute__ ((__nothrow__ , __leaf__));






extern char *asctime_r (const struct tm *__restrict __tp,
   char *__restrict __buf) __attribute__ ((__nothrow__ , __leaf__));


extern char *ctime_r (const time_t *__restrict __timer,
        char *__restrict __buf) __attribute__ ((__nothrow__ , __leaf__));




extern char *__tzname[2];
extern int __daylight;
extern long int __timezone;




extern char *tzname[2];



extern void tzset (void) __attribute__ ((__nothrow__ , __leaf__));



extern int daylight;
extern long int timezone;
# 190 "/usr/include/time.h" 3 4
extern time_t timegm (struct tm *__tp) __attribute__ ((__nothrow__ , __leaf__));


extern time_t timelocal (struct tm *__tp) __attribute__ ((__nothrow__ , __leaf__));


extern int dysize (int __year) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));
# 205 "/usr/include/time.h" 3 4
extern int nanosleep (const struct timespec *__requested_time,
        struct timespec *__remaining);



extern int clock_getres (clockid_t __clock_id, struct timespec *__res) __attribute__ ((__nothrow__ , __leaf__));


extern int clock_gettime (clockid_t __clock_id, struct timespec *__tp) __attribute__ ((__nothrow__ , __leaf__));


extern int clock_settime (clockid_t __clock_id, const struct timespec *__tp)
     __attribute__ ((__nothrow__ , __leaf__));






extern int clock_nanosleep (clockid_t __clock_id, int __flags,
       const struct timespec *__req,
       struct timespec *__rem);


extern int clock_getcpuclockid (pid_t __pid, clockid_t *__clock_id) __attribute__ ((__nothrow__ , __leaf__));




extern int timer_create (clockid_t __clock_id,
    struct sigevent *__restrict __evp,
    timer_t *__restrict __timerid) __attribute__ ((__nothrow__ , __leaf__));


extern int timer_delete (timer_t __timerid) __attribute__ ((__nothrow__ , __leaf__));


extern int timer_settime (timer_t __timerid, int __flags,
     const struct itimerspec *__restrict __value,
     struct itimerspec *__restrict __ovalue) __attribute__ ((__nothrow__ , __leaf__));


extern int timer_gettime (timer_t __timerid, struct itimerspec *__value)
     __attribute__ ((__nothrow__ , __leaf__));


extern int timer_getoverrun (timer_t __timerid) __attribute__ ((__nothrow__ , __leaf__));





extern int timespec_get (struct timespec *__ts, int __base)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
# 274 "/usr/include/time.h" 3 4
extern int getdate_err;
# 283 "/usr/include/time.h" 3 4
extern struct tm *getdate (const char *__string);
# 297 "/usr/include/time.h" 3 4
extern int getdate_r (const char *__restrict __string,
        struct tm *__restrict __resbufp);



# 24 "/usr/include/pthread.h" 2 3 4



# 1 "/usr/include/aarch64-linux-gnu/bits/setjmp.h" 1 3 4
# 30 "/usr/include/aarch64-linux-gnu/bits/setjmp.h" 3 4
__extension__ typedef unsigned long long __jmp_buf [22];
# 28 "/usr/include/pthread.h" 2 3 4
# 1 "/usr/include/aarch64-linux-gnu/bits/wordsize.h" 1 3 4
# 29 "/usr/include/pthread.h" 2 3 4




enum
{
  PTHREAD_CREATE_JOINABLE,

  PTHREAD_CREATE_DETACHED

};



enum
{
  PTHREAD_MUTEX_TIMED_NP,
  PTHREAD_MUTEX_RECURSIVE_NP,
  PTHREAD_MUTEX_ERRORCHECK_NP,
  PTHREAD_MUTEX_ADAPTIVE_NP

  ,
  PTHREAD_MUTEX_NORMAL = PTHREAD_MUTEX_TIMED_NP,
  PTHREAD_MUTEX_RECURSIVE = PTHREAD_MUTEX_RECURSIVE_NP,
  PTHREAD_MUTEX_ERRORCHECK = PTHREAD_MUTEX_ERRORCHECK_NP,
  PTHREAD_MUTEX_DEFAULT = PTHREAD_MUTEX_NORMAL



  , PTHREAD_MUTEX_FAST_NP = PTHREAD_MUTEX_TIMED_NP

};




enum
{
  PTHREAD_MUTEX_STALLED,
  PTHREAD_MUTEX_STALLED_NP = PTHREAD_MUTEX_STALLED,
  PTHREAD_MUTEX_ROBUST,
  PTHREAD_MUTEX_ROBUST_NP = PTHREAD_MUTEX_ROBUST
};





enum
{
  PTHREAD_PRIO_NONE,
  PTHREAD_PRIO_INHERIT,
  PTHREAD_PRIO_PROTECT
};
# 100 "/usr/include/pthread.h" 3 4
enum
{
  PTHREAD_RWLOCK_PREFER_READER_NP,
  PTHREAD_RWLOCK_PREFER_WRITER_NP,
  PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP,
  PTHREAD_RWLOCK_DEFAULT_NP = PTHREAD_RWLOCK_PREFER_READER_NP
};
# 120 "/usr/include/pthread.h" 3 4
enum
{
  PTHREAD_INHERIT_SCHED,

  PTHREAD_EXPLICIT_SCHED

};



enum
{
  PTHREAD_SCOPE_SYSTEM,

  PTHREAD_SCOPE_PROCESS

};



enum
{
  PTHREAD_PROCESS_PRIVATE,

  PTHREAD_PROCESS_SHARED

};
# 155 "/usr/include/pthread.h" 3 4
struct _pthread_cleanup_buffer
{
  void (*__routine) (void *);
  void *__arg;
  int __canceltype;
  struct _pthread_cleanup_buffer *__prev;
};


enum
{
  PTHREAD_CANCEL_ENABLE,

  PTHREAD_CANCEL_DISABLE

};
enum
{
  PTHREAD_CANCEL_DEFERRED,

  PTHREAD_CANCEL_ASYNCHRONOUS

};
# 193 "/usr/include/pthread.h" 3 4





extern int pthread_create (pthread_t *__restrict __newthread,
      const pthread_attr_t *__restrict __attr,
      void *(*__start_routine) (void *),
      void *__restrict __arg) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 3)));





extern void pthread_exit (void *__retval) __attribute__ ((__noreturn__));







extern int pthread_join (pthread_t __th, void **__thread_return);




extern int pthread_tryjoin_np (pthread_t __th, void **__thread_return) __attribute__ ((__nothrow__ , __leaf__));







extern int pthread_timedjoin_np (pthread_t __th, void **__thread_return,
     const struct timespec *__abstime);
# 238 "/usr/include/pthread.h" 3 4
extern int pthread_clockjoin_np (pthread_t __th, void **__thread_return,
                                 clockid_t __clockid,
     const struct timespec *__abstime);






extern int pthread_detach (pthread_t __th) __attribute__ ((__nothrow__ , __leaf__));



extern pthread_t pthread_self (void) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));


extern int pthread_equal (pthread_t __thread1, pthread_t __thread2)
  __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));







extern int pthread_attr_init (pthread_attr_t *__attr) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));


extern int pthread_attr_destroy (pthread_attr_t *__attr)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));


extern int pthread_attr_getdetachstate (const pthread_attr_t *__attr,
     int *__detachstate)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));


extern int pthread_attr_setdetachstate (pthread_attr_t *__attr,
     int __detachstate)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));



extern int pthread_attr_getguardsize (const pthread_attr_t *__attr,
          size_t *__guardsize)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));


extern int pthread_attr_setguardsize (pthread_attr_t *__attr,
          size_t __guardsize)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));



extern int pthread_attr_getschedparam (const pthread_attr_t *__restrict __attr,
           struct sched_param *__restrict __param)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));


extern int pthread_attr_setschedparam (pthread_attr_t *__restrict __attr,
           const struct sched_param *__restrict
           __param) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));


extern int pthread_attr_getschedpolicy (const pthread_attr_t *__restrict
     __attr, int *__restrict __policy)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));


extern int pthread_attr_setschedpolicy (pthread_attr_t *__attr, int __policy)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));


extern int pthread_attr_getinheritsched (const pthread_attr_t *__restrict
      __attr, int *__restrict __inherit)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));


extern int pthread_attr_setinheritsched (pthread_attr_t *__attr,
      int __inherit)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));



extern int pthread_attr_getscope (const pthread_attr_t *__restrict __attr,
      int *__restrict __scope)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));


extern int pthread_attr_setscope (pthread_attr_t *__attr, int __scope)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));


extern int pthread_attr_getstackaddr (const pthread_attr_t *__restrict
          __attr, void **__restrict __stackaddr)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2))) __attribute__ ((__deprecated__));





extern int pthread_attr_setstackaddr (pthread_attr_t *__attr,
          void *__stackaddr)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__deprecated__));


extern int pthread_attr_getstacksize (const pthread_attr_t *__restrict
          __attr, size_t *__restrict __stacksize)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));




extern int pthread_attr_setstacksize (pthread_attr_t *__attr,
          size_t __stacksize)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));



extern int pthread_attr_getstack (const pthread_attr_t *__restrict __attr,
      void **__restrict __stackaddr,
      size_t *__restrict __stacksize)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2, 3)));




extern int pthread_attr_setstack (pthread_attr_t *__attr, void *__stackaddr,
      size_t __stacksize) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));





extern int pthread_attr_setaffinity_np (pthread_attr_t *__attr,
     size_t __cpusetsize,
     const cpu_set_t *__cpuset)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 3)));



extern int pthread_attr_getaffinity_np (const pthread_attr_t *__attr,
     size_t __cpusetsize,
     cpu_set_t *__cpuset)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 3)));


extern int pthread_getattr_default_np (pthread_attr_t *__attr)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));



extern int pthread_setattr_default_np (const pthread_attr_t *__attr)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));




extern int pthread_getattr_np (pthread_t __th, pthread_attr_t *__attr)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2)));







extern int pthread_setschedparam (pthread_t __target_thread, int __policy,
      const struct sched_param *__param)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3)));


extern int pthread_getschedparam (pthread_t __target_thread,
      int *__restrict __policy,
      struct sched_param *__restrict __param)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2, 3)));


extern int pthread_setschedprio (pthread_t __target_thread, int __prio)
     __attribute__ ((__nothrow__ , __leaf__));




extern int pthread_getname_np (pthread_t __target_thread, char *__buf,
          size_t __buflen)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2)));


extern int pthread_setname_np (pthread_t __target_thread, const char *__name)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2)));





extern int pthread_getconcurrency (void) __attribute__ ((__nothrow__ , __leaf__));


extern int pthread_setconcurrency (int __level) __attribute__ ((__nothrow__ , __leaf__));







extern int pthread_yield (void) __attribute__ ((__nothrow__ , __leaf__));




extern int pthread_setaffinity_np (pthread_t __th, size_t __cpusetsize,
       const cpu_set_t *__cpuset)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3)));


extern int pthread_getaffinity_np (pthread_t __th, size_t __cpusetsize,
       cpu_set_t *__cpuset)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3)));
# 470 "/usr/include/pthread.h" 3 4
extern int pthread_once (pthread_once_t *__once_control,
    void (*__init_routine) (void)) __attribute__ ((__nonnull__ (1, 2)));
# 482 "/usr/include/pthread.h" 3 4
extern int pthread_setcancelstate (int __state, int *__oldstate);



extern int pthread_setcanceltype (int __type, int *__oldtype);


extern int pthread_cancel (pthread_t __th);




extern void pthread_testcancel (void);




typedef struct
{
  struct
  {
    __jmp_buf __cancel_jmp_buf;
    int __mask_was_saved;
  } __cancel_jmp_buf[1];
  void *__pad[4];
} __pthread_unwind_buf_t __attribute__ ((__aligned__));
# 516 "/usr/include/pthread.h" 3 4
struct __pthread_cleanup_frame
{
  void (*__cancel_routine) (void *);
  void *__cancel_arg;
  int __do_it;
  int __cancel_type;
};
# 656 "/usr/include/pthread.h" 3 4
extern void __pthread_register_cancel (__pthread_unwind_buf_t *__buf)
     ;
# 668 "/usr/include/pthread.h" 3 4
extern void __pthread_unregister_cancel (__pthread_unwind_buf_t *__buf)
  ;
# 691 "/usr/include/pthread.h" 3 4
extern void __pthread_register_cancel_defer (__pthread_unwind_buf_t *__buf)
     ;
# 704 "/usr/include/pthread.h" 3 4
extern void __pthread_unregister_cancel_restore (__pthread_unwind_buf_t *__buf)
  ;



extern void __pthread_unwind_next (__pthread_unwind_buf_t *__buf)
     __attribute__ ((__noreturn__))

     __attribute__ ((__weak__))

     ;



struct __jmp_buf_tag;
extern int __sigsetjmp (struct __jmp_buf_tag *__env, int __savemask) __attribute__ ((__nothrow__));





extern int pthread_mutex_init (pthread_mutex_t *__mutex,
          const pthread_mutexattr_t *__mutexattr)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));


extern int pthread_mutex_destroy (pthread_mutex_t *__mutex)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));


extern int pthread_mutex_trylock (pthread_mutex_t *__mutex)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));


extern int pthread_mutex_lock (pthread_mutex_t *__mutex)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));



extern int pthread_mutex_timedlock (pthread_mutex_t *__restrict __mutex,
        const struct timespec *__restrict
        __abstime) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));



extern int pthread_mutex_clocklock (pthread_mutex_t *__restrict __mutex,
        clockid_t __clockid,
        const struct timespec *__restrict
        __abstime) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 3)));



extern int pthread_mutex_unlock (pthread_mutex_t *__mutex)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));



extern int pthread_mutex_getprioceiling (const pthread_mutex_t *
      __restrict __mutex,
      int *__restrict __prioceiling)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));



extern int pthread_mutex_setprioceiling (pthread_mutex_t *__restrict __mutex,
      int __prioceiling,
      int *__restrict __old_ceiling)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 3)));




extern int pthread_mutex_consistent (pthread_mutex_t *__mutex)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));

extern int pthread_mutex_consistent_np (pthread_mutex_t *__mutex)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
# 789 "/usr/include/pthread.h" 3 4
extern int pthread_mutexattr_init (pthread_mutexattr_t *__attr)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));


extern int pthread_mutexattr_destroy (pthread_mutexattr_t *__attr)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));


extern int pthread_mutexattr_getpshared (const pthread_mutexattr_t *
      __restrict __attr,
      int *__restrict __pshared)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));


extern int pthread_mutexattr_setpshared (pthread_mutexattr_t *__attr,
      int __pshared)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));



extern int pthread_mutexattr_gettype (const pthread_mutexattr_t *__restrict
          __attr, int *__restrict __kind)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));




extern int pthread_mutexattr_settype (pthread_mutexattr_t *__attr, int __kind)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));



extern int pthread_mutexattr_getprotocol (const pthread_mutexattr_t *
       __restrict __attr,
       int *__restrict __protocol)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));



extern int pthread_mutexattr_setprotocol (pthread_mutexattr_t *__attr,
       int __protocol)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));


extern int pthread_mutexattr_getprioceiling (const pthread_mutexattr_t *
          __restrict __attr,
          int *__restrict __prioceiling)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));


extern int pthread_mutexattr_setprioceiling (pthread_mutexattr_t *__attr,
          int __prioceiling)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));



extern int pthread_mutexattr_getrobust (const pthread_mutexattr_t *__attr,
     int *__robustness)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));

extern int pthread_mutexattr_getrobust_np (const pthread_mutexattr_t *__attr,
        int *__robustness)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));



extern int pthread_mutexattr_setrobust (pthread_mutexattr_t *__attr,
     int __robustness)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));

extern int pthread_mutexattr_setrobust_np (pthread_mutexattr_t *__attr,
        int __robustness)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
# 871 "/usr/include/pthread.h" 3 4
extern int pthread_rwlock_init (pthread_rwlock_t *__restrict __rwlock,
    const pthread_rwlockattr_t *__restrict
    __attr) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));


extern int pthread_rwlock_destroy (pthread_rwlock_t *__rwlock)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));


extern int pthread_rwlock_rdlock (pthread_rwlock_t *__rwlock)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));


extern int pthread_rwlock_tryrdlock (pthread_rwlock_t *__rwlock)
  __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));



extern int pthread_rwlock_timedrdlock (pthread_rwlock_t *__restrict __rwlock,
           const struct timespec *__restrict
           __abstime) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));



extern int pthread_rwlock_clockrdlock (pthread_rwlock_t *__restrict __rwlock,
           clockid_t __clockid,
           const struct timespec *__restrict
           __abstime) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 3)));



extern int pthread_rwlock_wrlock (pthread_rwlock_t *__rwlock)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));


extern int pthread_rwlock_trywrlock (pthread_rwlock_t *__rwlock)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));



extern int pthread_rwlock_timedwrlock (pthread_rwlock_t *__restrict __rwlock,
           const struct timespec *__restrict
           __abstime) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));



extern int pthread_rwlock_clockwrlock (pthread_rwlock_t *__restrict __rwlock,
           clockid_t __clockid,
           const struct timespec *__restrict
           __abstime) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 3)));



extern int pthread_rwlock_unlock (pthread_rwlock_t *__rwlock)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));





extern int pthread_rwlockattr_init (pthread_rwlockattr_t *__attr)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));


extern int pthread_rwlockattr_destroy (pthread_rwlockattr_t *__attr)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));


extern int pthread_rwlockattr_getpshared (const pthread_rwlockattr_t *
       __restrict __attr,
       int *__restrict __pshared)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));


extern int pthread_rwlockattr_setpshared (pthread_rwlockattr_t *__attr,
       int __pshared)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));


extern int pthread_rwlockattr_getkind_np (const pthread_rwlockattr_t *
       __restrict __attr,
       int *__restrict __pref)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));


extern int pthread_rwlockattr_setkind_np (pthread_rwlockattr_t *__attr,
       int __pref) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));







extern int pthread_cond_init (pthread_cond_t *__restrict __cond,
         const pthread_condattr_t *__restrict __cond_attr)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));


extern int pthread_cond_destroy (pthread_cond_t *__cond)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));


extern int pthread_cond_signal (pthread_cond_t *__cond)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));


extern int pthread_cond_broadcast (pthread_cond_t *__cond)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));






extern int pthread_cond_wait (pthread_cond_t *__restrict __cond,
         pthread_mutex_t *__restrict __mutex)
     __attribute__ ((__nonnull__ (1, 2)));
# 997 "/usr/include/pthread.h" 3 4
extern int pthread_cond_timedwait (pthread_cond_t *__restrict __cond,
       pthread_mutex_t *__restrict __mutex,
       const struct timespec *__restrict __abstime)
     __attribute__ ((__nonnull__ (1, 2, 3)));
# 1010 "/usr/include/pthread.h" 3 4
extern int pthread_cond_clockwait (pthread_cond_t *__restrict __cond,
       pthread_mutex_t *__restrict __mutex,
       __clockid_t __clock_id,
       const struct timespec *__restrict __abstime)
     __attribute__ ((__nonnull__ (1, 2, 4)));





extern int pthread_condattr_init (pthread_condattr_t *__attr)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));


extern int pthread_condattr_destroy (pthread_condattr_t *__attr)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));


extern int pthread_condattr_getpshared (const pthread_condattr_t *
     __restrict __attr,
     int *__restrict __pshared)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));


extern int pthread_condattr_setpshared (pthread_condattr_t *__attr,
     int __pshared) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));



extern int pthread_condattr_getclock (const pthread_condattr_t *
          __restrict __attr,
          __clockid_t *__restrict __clock_id)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));


extern int pthread_condattr_setclock (pthread_condattr_t *__attr,
          __clockid_t __clock_id)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
# 1056 "/usr/include/pthread.h" 3 4
extern int pthread_spin_init (pthread_spinlock_t *__lock, int __pshared)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));


extern int pthread_spin_destroy (pthread_spinlock_t *__lock)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));


extern int pthread_spin_lock (pthread_spinlock_t *__lock)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));


extern int pthread_spin_trylock (pthread_spinlock_t *__lock)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));


extern int pthread_spin_unlock (pthread_spinlock_t *__lock)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));






extern int pthread_barrier_init (pthread_barrier_t *__restrict __barrier,
     const pthread_barrierattr_t *__restrict
     __attr, unsigned int __count)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));


extern int pthread_barrier_destroy (pthread_barrier_t *__barrier)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));


extern int pthread_barrier_wait (pthread_barrier_t *__barrier)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));



extern int pthread_barrierattr_init (pthread_barrierattr_t *__attr)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));


extern int pthread_barrierattr_destroy (pthread_barrierattr_t *__attr)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));


extern int pthread_barrierattr_getpshared (const pthread_barrierattr_t *
        __restrict __attr,
        int *__restrict __pshared)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));


extern int pthread_barrierattr_setpshared (pthread_barrierattr_t *__attr,
        int __pshared)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
# 1123 "/usr/include/pthread.h" 3 4
extern int pthread_key_create (pthread_key_t *__key,
          void (*__destr_function) (void *))
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));


extern int pthread_key_delete (pthread_key_t __key) __attribute__ ((__nothrow__ , __leaf__));


extern void *pthread_getspecific (pthread_key_t __key) __attribute__ ((__nothrow__ , __leaf__));


extern int pthread_setspecific (pthread_key_t __key,
    const void *__pointer) __attribute__ ((__nothrow__ , __leaf__)) ;




extern int pthread_getcpuclockid (pthread_t __thread_id,
      __clockid_t *__clock_id)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2)));
# 1157 "/usr/include/pthread.h" 3 4
extern int pthread_atfork (void (*__prepare) (void),
      void (*__parent) (void),
      void (*__child) (void)) __attribute__ ((__nothrow__ , __leaf__));
# 1171 "/usr/include/pthread.h" 3 4

# 44 "/home/ubuntu/neovim/.deps/usr/include/uv/unix.h" 2


# 1 "/home/ubuntu/neovim/.deps/usr/include/uv/threadpool.h" 1
# 30 "/home/ubuntu/neovim/.deps/usr/include/uv/threadpool.h"

# 30 "/home/ubuntu/neovim/.deps/usr/include/uv/threadpool.h"
struct uv__work {
  void (*work)(struct uv__work *w);
  void (*done)(struct uv__work *w, int status);
  struct uv_loop_s* loop;
  struct uv__queue wq;
};
# 47 "/home/ubuntu/neovim/.deps/usr/include/uv/unix.h" 2


# 1 "/home/ubuntu/neovim/.deps/usr/include/uv/linux.h" 1
# 50 "/home/ubuntu/neovim/.deps/usr/include/uv/unix.h" 2
# 85 "/home/ubuntu/neovim/.deps/usr/include/uv/unix.h"
struct uv__io_s;
struct uv_loop_s;

typedef void (*uv__io_cb)(struct uv_loop_s* loop,
                          struct uv__io_s* w,
                          unsigned int events);
typedef struct uv__io_s uv__io_t;

struct uv__io_s {
  uv__io_cb cb;
  struct uv__queue pending_queue;
  struct uv__queue watcher_queue;
  unsigned int pevents;
  unsigned int events;
  int fd;
 
};
# 120 "/home/ubuntu/neovim/.deps/usr/include/uv/unix.h"
typedef struct uv_buf_t {
  char* base;
  size_t len;
} uv_buf_t;

typedef int uv_file;
typedef int uv_os_sock_t;
typedef int uv_os_fd_t;
typedef pid_t uv_pid_t;



typedef pthread_once_t uv_once_t;
typedef pthread_t uv_thread_t;
typedef pthread_mutex_t uv_mutex_t;
typedef pthread_rwlock_t uv_rwlock_t;
typedef sem_t uv_sem_t;
typedef pthread_cond_t uv_cond_t;
typedef pthread_key_t uv_key_t;
# 161 "/home/ubuntu/neovim/.deps/usr/include/uv/unix.h"
typedef pthread_barrier_t uv_barrier_t;



typedef gid_t uv_gid_t;
typedef uid_t uv_uid_t;

typedef struct dirent uv__dirent_t;
# 215 "/home/ubuntu/neovim/.deps/usr/include/uv/unix.h"
typedef struct {
  void* handle;
  char* errmsg;
} uv_lib_t;
# 72 "/home/ubuntu/neovim/.deps/usr/include/uv.h" 2
# 191 "/home/ubuntu/neovim/.deps/usr/include/uv.h"
typedef enum {

  UV_E2BIG = (-(
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h" 3 4
 7
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h"
 )), UV_EACCES = (-(
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h" 3 4
 13
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h"
 )), UV_EADDRINUSE = (-(
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h" 3 4
 98
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h"
 )), UV_EADDRNOTAVAIL = (-(
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h" 3 4
 99
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h"
 )), UV_EAFNOSUPPORT = (-(
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h" 3 4
 97
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h"
 )), UV_EAGAIN = (-(
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h" 3 4
 11
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h"
 )), UV_EAI_ADDRFAMILY = (-3000), UV_EAI_AGAIN = (-3001), UV_EAI_BADFLAGS = (-3002), UV_EAI_BADHINTS = (-3013), UV_EAI_CANCELED = (-3003), UV_EAI_FAIL = (-3004), UV_EAI_FAMILY = (-3005), UV_EAI_MEMORY = (-3006), UV_EAI_NODATA = (-3007), UV_EAI_NONAME = (-3008), UV_EAI_OVERFLOW = (-3009), UV_EAI_PROTOCOL = (-3014), UV_EAI_SERVICE = (-3010), UV_EAI_SOCKTYPE = (-3011), UV_EALREADY = (-(
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h" 3 4
 114
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h"
 )), UV_EBADF = (-(
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h" 3 4
 9
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h"
 )), UV_EBUSY = (-(
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h" 3 4
 16
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h"
 )), UV_ECANCELED = (-(
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h" 3 4
 125
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h"
 )), UV_ECHARSET = (-4080), UV_ECONNABORTED = (-(
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h" 3 4
 103
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h"
 )), UV_ECONNREFUSED = (-(
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h" 3 4
 111
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h"
 )), UV_ECONNRESET = (-(
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h" 3 4
 104
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h"
 )), UV_EDESTADDRREQ = (-(
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h" 3 4
 89
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h"
 )), UV_EEXIST = (-(
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h" 3 4
 17
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h"
 )), UV_EFAULT = (-(
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h" 3 4
 14
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h"
 )), UV_EFBIG = (-(
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h" 3 4
 27
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h"
 )), UV_EHOSTUNREACH = (-(
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h" 3 4
 113
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h"
 )), UV_EINTR = (-(
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h" 3 4
 4
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h"
 )), UV_EINVAL = (-(
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h" 3 4
 22
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h"
 )), UV_EIO = (-(
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h" 3 4
 5
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h"
 )), UV_EISCONN = (-(
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h" 3 4
 106
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h"
 )), UV_EISDIR = (-(
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h" 3 4
 21
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h"
 )), UV_ELOOP = (-(
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h" 3 4
 40
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h"
 )), UV_EMFILE = (-(
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h" 3 4
 24
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h"
 )), UV_EMSGSIZE = (-(
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h" 3 4
 90
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h"
 )), UV_ENAMETOOLONG = (-(
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h" 3 4
 36
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h"
 )), UV_ENETDOWN = (-(
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h" 3 4
 100
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h"
 )), UV_ENETUNREACH = (-(
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h" 3 4
 101
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h"
 )), UV_ENFILE = (-(
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h" 3 4
 23
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h"
 )), UV_ENOBUFS = (-(
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h" 3 4
 105
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h"
 )), UV_ENODEV = (-(
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h" 3 4
 19
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h"
 )), UV_ENOENT = (-(
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h" 3 4
 2
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h"
 )), UV_ENOMEM = (-(
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h" 3 4
 12
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h"
 )), UV_ENONET = (-(
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h" 3 4
 64
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h"
 )), UV_ENOPROTOOPT = (-(
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h" 3 4
 92
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h"
 )), UV_ENOSPC = (-(
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h" 3 4
 28
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h"
 )), UV_ENOSYS = (-(
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h" 3 4
 38
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h"
 )), UV_ENOTCONN = (-(
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h" 3 4
 107
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h"
 )), UV_ENOTDIR = (-(
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h" 3 4
 20
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h"
 )), UV_ENOTEMPTY = (-(
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h" 3 4
 39
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h"
 )), UV_ENOTSOCK = (-(
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h" 3 4
 88
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h"
 )), UV_ENOTSUP = (-(
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h" 3 4
 95
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h"
 )), UV_EOVERFLOW = (-(
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h" 3 4
 75
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h"
 )), UV_EPERM = (-(
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h" 3 4
 1
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h"
 )), UV_EPIPE = (-(
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h" 3 4
 32
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h"
 )), UV_EPROTO = (-(
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h" 3 4
 71
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h"
 )), UV_EPROTONOSUPPORT = (-(
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h" 3 4
 93
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h"
 )), UV_EPROTOTYPE = (-(
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h" 3 4
 91
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h"
 )), UV_ERANGE = (-(
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h" 3 4
 34
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h"
 )), UV_EROFS = (-(
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h" 3 4
 30
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h"
 )), UV_ESHUTDOWN = (-(
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h" 3 4
 108
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h"
 )), UV_ESPIPE = (-(
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h" 3 4
 29
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h"
 )), UV_ESRCH = (-(
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h" 3 4
 3
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h"
 )), UV_ETIMEDOUT = (-(
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h" 3 4
 110
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h"
 )), UV_ETXTBSY = (-(
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h" 3 4
 26
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h"
 )), UV_EXDEV = (-(
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h" 3 4
 18
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h"
 )), UV_UNKNOWN = (-4094), UV_EOF = (-4095), UV_ENXIO = (-(
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h" 3 4
 6
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h"
 )), UV_EMLINK = (-(
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h" 3 4
 31
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h"
 )), UV_EHOSTDOWN = (-(
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h" 3 4
 112
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h"
 )), UV_EREMOTEIO = (-(
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h" 3 4
 121
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h"
 )), UV_ENOTTY = (-(
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h" 3 4
 25
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h"
 )), UV_EFTYPE = (-4028), UV_EILSEQ = (-(
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h" 3 4
 84
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h"
 )), UV_ESOCKTNOSUPPORT = (-(
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h" 3 4
 94
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h"
 )), UV_ENODATA = (-(
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h" 3 4
 61
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h"
 )), UV_EUNATCH = (-(
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h" 3 4
 49
# 193 "/home/ubuntu/neovim/.deps/usr/include/uv.h"
 )),

  UV_ERRNO_MAX = (-4095) - 1
} uv_errno_t;

typedef enum {
  UV_UNKNOWN_HANDLE = 0,

  UV_ASYNC, UV_CHECK, UV_FS_EVENT, UV_FS_POLL, UV_HANDLE, UV_IDLE, UV_NAMED_PIPE, UV_POLL, UV_PREPARE, UV_PROCESS, UV_STREAM, UV_TCP, UV_TIMER, UV_TTY, UV_UDP, UV_SIGNAL,

  UV_FILE,
  UV_HANDLE_TYPE_MAX
} uv_handle_type;

typedef enum {
  UV_UNKNOWN_REQ = 0,

  UV_REQ, UV_CONNECT, UV_WRITE, UV_SHUTDOWN, UV_UDP_SEND, UV_FS, UV_WORK, UV_GETADDRINFO, UV_GETNAMEINFO, UV_RANDOM,

 
  UV_REQ_TYPE_MAX
} uv_req_type;



typedef struct uv_loop_s uv_loop_t;
typedef struct uv_handle_s uv_handle_t;
typedef struct uv_dir_s uv_dir_t;
typedef struct uv_stream_s uv_stream_t;
typedef struct uv_tcp_s uv_tcp_t;
typedef struct uv_udp_s uv_udp_t;
typedef struct uv_pipe_s uv_pipe_t;
typedef struct uv_tty_s uv_tty_t;
typedef struct uv_poll_s uv_poll_t;
typedef struct uv_timer_s uv_timer_t;
typedef struct uv_prepare_s uv_prepare_t;
typedef struct uv_check_s uv_check_t;
typedef struct uv_idle_s uv_idle_t;
typedef struct uv_async_s uv_async_t;
typedef struct uv_process_s uv_process_t;
typedef struct uv_fs_event_s uv_fs_event_t;
typedef struct uv_fs_poll_s uv_fs_poll_t;
typedef struct uv_signal_s uv_signal_t;


typedef struct uv_req_s uv_req_t;
typedef struct uv_getaddrinfo_s uv_getaddrinfo_t;
typedef struct uv_getnameinfo_s uv_getnameinfo_t;
typedef struct uv_shutdown_s uv_shutdown_t;
typedef struct uv_write_s uv_write_t;
typedef struct uv_connect_s uv_connect_t;
typedef struct uv_udp_send_s uv_udp_send_t;
typedef struct uv_fs_s uv_fs_t;
typedef struct uv_work_s uv_work_t;
typedef struct uv_random_s uv_random_t;


typedef struct uv_env_item_s uv_env_item_t;
typedef struct uv_cpu_info_s uv_cpu_info_t;
typedef struct uv_interface_address_s uv_interface_address_t;
typedef struct uv_dirent_s uv_dirent_t;
typedef struct uv_passwd_s uv_passwd_t;
typedef struct uv_group_s uv_group_t;
typedef struct uv_utsname_s uv_utsname_t;
typedef struct uv_statfs_s uv_statfs_t;

typedef struct uv_metrics_s uv_metrics_t;

typedef enum {
  UV_LOOP_BLOCK_SIGNAL = 0,
  UV_METRICS_IDLE_TIME
} uv_loop_option;

typedef enum {
  UV_RUN_DEFAULT = 0,
  UV_RUN_ONCE,
  UV_RUN_NOWAIT
} uv_run_mode;


__attribute__((visibility("default"))) unsigned int uv_version(void);
__attribute__((visibility("default"))) const char* uv_version_string(void);

typedef void* (*uv_malloc_func)(size_t size);
typedef void* (*uv_realloc_func)(void* ptr, size_t size);
typedef void* (*uv_calloc_func)(size_t count, size_t size);
typedef void (*uv_free_func)(void* ptr);

__attribute__((visibility("default"))) void uv_library_shutdown(void);

__attribute__((visibility("default"))) int uv_replace_allocator(uv_malloc_func malloc_func,
                                   uv_realloc_func realloc_func,
                                   uv_calloc_func calloc_func,
                                   uv_free_func free_func);

__attribute__((visibility("default"))) uv_loop_t* uv_default_loop(void);
__attribute__((visibility("default"))) int uv_loop_init(uv_loop_t* loop);
__attribute__((visibility("default"))) int uv_loop_close(uv_loop_t* loop);





__attribute__((visibility("default"))) uv_loop_t* uv_loop_new(void);





__attribute__((visibility("default"))) void uv_loop_delete(uv_loop_t*);
__attribute__((visibility("default"))) size_t uv_loop_size(void);
__attribute__((visibility("default"))) int uv_loop_alive(const uv_loop_t* loop);
__attribute__((visibility("default"))) int uv_loop_configure(uv_loop_t* loop, uv_loop_option option, ...);
__attribute__((visibility("default"))) int uv_loop_fork(uv_loop_t* loop);

__attribute__((visibility("default"))) int uv_run(uv_loop_t*, uv_run_mode mode);
__attribute__((visibility("default"))) void uv_stop(uv_loop_t*);

__attribute__((visibility("default"))) void uv_ref(uv_handle_t*);
__attribute__((visibility("default"))) void uv_unref(uv_handle_t*);
__attribute__((visibility("default"))) int uv_has_ref(const uv_handle_t*);

__attribute__((visibility("default"))) void uv_update_time(uv_loop_t*);
__attribute__((visibility("default"))) uint64_t uv_now(const uv_loop_t*);

__attribute__((visibility("default"))) int uv_backend_fd(const uv_loop_t*);
__attribute__((visibility("default"))) int uv_backend_timeout(const uv_loop_t*);

typedef void (*uv_alloc_cb)(uv_handle_t* handle,
                            size_t suggested_size,
                            uv_buf_t* buf);
typedef void (*uv_read_cb)(uv_stream_t* stream,
                           ssize_t nread,
                           const uv_buf_t* buf);
typedef void (*uv_write_cb)(uv_write_t* req, int status);
typedef void (*uv_connect_cb)(uv_connect_t* req, int status);
typedef void (*uv_shutdown_cb)(uv_shutdown_t* req, int status);
typedef void (*uv_connection_cb)(uv_stream_t* server, int status);
typedef void (*uv_close_cb)(uv_handle_t* handle);
typedef void (*uv_poll_cb)(uv_poll_t* handle, int status, int events);
typedef void (*uv_timer_cb)(uv_timer_t* handle);
typedef void (*uv_async_cb)(uv_async_t* handle);
typedef void (*uv_prepare_cb)(uv_prepare_t* handle);
typedef void (*uv_check_cb)(uv_check_t* handle);
typedef void (*uv_idle_cb)(uv_idle_t* handle);
typedef void (*uv_exit_cb)(uv_process_t*, int64_t exit_status, int term_signal);
typedef void (*uv_walk_cb)(uv_handle_t* handle, void* arg);
typedef void (*uv_fs_cb)(uv_fs_t* req);
typedef void (*uv_work_cb)(uv_work_t* req);
typedef void (*uv_after_work_cb)(uv_work_t* req, int status);
typedef void (*uv_getaddrinfo_cb)(uv_getaddrinfo_t* req,
                                  int status,
                                  struct addrinfo* res);
typedef void (*uv_getnameinfo_cb)(uv_getnameinfo_t* req,
                                  int status,
                                  const char* hostname,
                                  const char* service);
typedef void (*uv_random_cb)(uv_random_t* req,
                             int status,
                             void* buf,
                             size_t buflen);

typedef enum {
  UV_CLOCK_MONOTONIC,
  UV_CLOCK_REALTIME
} uv_clock_id;


typedef struct {
  long tv_sec;
  long tv_nsec;
} uv_timespec_t;

typedef struct {
  int64_t tv_sec;
  int32_t tv_nsec;
} uv_timespec64_t;


typedef struct {
  long tv_sec;
  long tv_usec;
} uv_timeval_t;

typedef struct {
  int64_t tv_sec;
  int32_t tv_usec;
} uv_timeval64_t;

typedef struct {
  uint64_t st_dev;
  uint64_t st_mode;
  uint64_t st_nlink;
  uint64_t st_uid;
  uint64_t st_gid;
  uint64_t st_rdev;
  uint64_t st_ino;
  uint64_t st_size;
  uint64_t st_blksize;
  uint64_t st_blocks;
  uint64_t st_flags;
  uint64_t st_gen;
  uv_timespec_t st_atim;
  uv_timespec_t st_mtim;
  uv_timespec_t st_ctim;
  uv_timespec_t st_birthtim;
} uv_stat_t;


typedef void (*uv_fs_event_cb)(uv_fs_event_t* handle,
                               const char* filename,
                               int events,
                               int status);

typedef void (*uv_fs_poll_cb)(uv_fs_poll_t* handle,
                              int status,
                              const uv_stat_t* prev,
                              const uv_stat_t* curr);

typedef void (*uv_signal_cb)(uv_signal_t* handle, int signum);


typedef enum {
  UV_LEAVE_GROUP = 0,
  UV_JOIN_GROUP
} uv_membership;


__attribute__((visibility("default"))) int uv_translate_sys_error(int sys_errno);

__attribute__((visibility("default"))) const char* uv_strerror(int err);
__attribute__((visibility("default"))) char* uv_strerror_r(int err, char* buf, size_t buflen);

__attribute__((visibility("default"))) const char* uv_err_name(int err);
__attribute__((visibility("default"))) char* uv_err_name_r(int err, char* buf, size_t buflen);
# 440 "/home/ubuntu/neovim/.deps/usr/include/uv.h"
struct uv_req_s {
  void* data; uv_req_type type; void* reserved[6];
};






__attribute__((visibility("default"))) int uv_shutdown(uv_shutdown_t* req,
                          uv_stream_t* handle,
                          uv_shutdown_cb cb);

struct uv_shutdown_s {
  void* data; uv_req_type type; void* reserved[6];
  uv_stream_t* handle;
  uv_shutdown_cb cb;
 
};
# 477 "/home/ubuntu/neovim/.deps/usr/include/uv.h"
struct uv_handle_s {
  void* data; uv_loop_t* loop; uv_handle_type type; uv_close_cb close_cb; struct uv__queue handle_queue; union { int fd; void* reserved[4]; } u; uv_handle_t* next_closing; unsigned int flags;
};

__attribute__((visibility("default"))) size_t uv_handle_size(uv_handle_type type);
__attribute__((visibility("default"))) uv_handle_type uv_handle_get_type(const uv_handle_t* handle);
__attribute__((visibility("default"))) const char* uv_handle_type_name(uv_handle_type type);
__attribute__((visibility("default"))) void* uv_handle_get_data(const uv_handle_t* handle);
__attribute__((visibility("default"))) uv_loop_t* uv_handle_get_loop(const uv_handle_t* handle);
__attribute__((visibility("default"))) void uv_handle_set_data(uv_handle_t* handle, void* data);

__attribute__((visibility("default"))) size_t uv_req_size(uv_req_type type);
__attribute__((visibility("default"))) void* uv_req_get_data(const uv_req_t* req);
__attribute__((visibility("default"))) void uv_req_set_data(uv_req_t* req, void* data);
__attribute__((visibility("default"))) uv_req_type uv_req_get_type(const uv_req_t* req);
__attribute__((visibility("default"))) const char* uv_req_type_name(uv_req_type type);

__attribute__((visibility("default"))) int uv_is_active(const uv_handle_t* handle);

__attribute__((visibility("default"))) void uv_walk(uv_loop_t* loop, uv_walk_cb walk_cb, void* arg);


__attribute__((visibility("default"))) void uv_print_all_handles(uv_loop_t* loop, FILE* stream);
__attribute__((visibility("default"))) void uv_print_active_handles(uv_loop_t* loop, FILE* stream);

__attribute__((visibility("default"))) void uv_close(uv_handle_t* handle, uv_close_cb close_cb);

__attribute__((visibility("default"))) int uv_send_buffer_size(uv_handle_t* handle, int* value);
__attribute__((visibility("default"))) int uv_recv_buffer_size(uv_handle_t* handle, int* value);

__attribute__((visibility("default"))) int uv_fileno(const uv_handle_t* handle, uv_os_fd_t* fd);

__attribute__((visibility("default"))) uv_buf_t uv_buf_init(char* base, unsigned int len);

__attribute__((visibility("default"))) int uv_pipe(uv_file fds[2], int read_flags, int write_flags);
__attribute__((visibility("default"))) int uv_socketpair(int type,
                            int protocol,
                            uv_os_sock_t socket_vector[2],
                            int flags0,
                            int flags1);
# 533 "/home/ubuntu/neovim/.deps/usr/include/uv.h"
struct uv_stream_s {
  void* data; uv_loop_t* loop; uv_handle_type type; uv_close_cb close_cb; struct uv__queue handle_queue; union { int fd; void* reserved[4]; } u; uv_handle_t* next_closing; unsigned int flags;
  size_t write_queue_size; uv_alloc_cb alloc_cb; uv_read_cb read_cb; uv_connect_t *connect_req; uv_shutdown_t *shutdown_req; uv__io_t io_watcher; struct uv__queue write_queue; struct uv__queue write_completed_queue; uv_connection_cb connection_cb; int delayed_error; int accepted_fd; void* queued_fds;
};

__attribute__((visibility("default"))) size_t uv_stream_get_write_queue_size(const uv_stream_t* stream);

__attribute__((visibility("default"))) int uv_listen(uv_stream_t* stream, int backlog, uv_connection_cb cb);
__attribute__((visibility("default"))) int uv_accept(uv_stream_t* server, uv_stream_t* client);

__attribute__((visibility("default"))) int uv_read_start(uv_stream_t*,
                            uv_alloc_cb alloc_cb,
                            uv_read_cb read_cb);
__attribute__((visibility("default"))) int uv_read_stop(uv_stream_t*);

__attribute__((visibility("default"))) int uv_write(uv_write_t* req,
                       uv_stream_t* handle,
                       const uv_buf_t bufs[],
                       unsigned int nbufs,
                       uv_write_cb cb);
__attribute__((visibility("default"))) int uv_write2(uv_write_t* req,
                        uv_stream_t* handle,
                        const uv_buf_t bufs[],
                        unsigned int nbufs,
                        uv_stream_t* send_handle,
                        uv_write_cb cb);
__attribute__((visibility("default"))) int uv_try_write(uv_stream_t* handle,
                           const uv_buf_t bufs[],
                           unsigned int nbufs);
__attribute__((visibility("default"))) int uv_try_write2(uv_stream_t* handle,
                            const uv_buf_t bufs[],
                            unsigned int nbufs,
                            uv_stream_t* send_handle);


struct uv_write_s {
  void* data; uv_req_type type; void* reserved[6];
  uv_write_cb cb;
  uv_stream_t* send_handle;
  uv_stream_t* handle;
  struct uv__queue queue; unsigned int write_index; uv_buf_t* bufs; unsigned int nbufs; int error; uv_buf_t bufsml[4];
};


__attribute__((visibility("default"))) int uv_is_readable(const uv_stream_t* handle);
__attribute__((visibility("default"))) int uv_is_writable(const uv_stream_t* handle);

__attribute__((visibility("default"))) int uv_stream_set_blocking(uv_stream_t* handle, int blocking);

__attribute__((visibility("default"))) int uv_is_closing(const uv_handle_t* handle);







struct uv_tcp_s {
  void* data; uv_loop_t* loop; uv_handle_type type; uv_close_cb close_cb; struct uv__queue handle_queue; union { int fd; void* reserved[4]; } u; uv_handle_t* next_closing; unsigned int flags;
  size_t write_queue_size; uv_alloc_cb alloc_cb; uv_read_cb read_cb; uv_connect_t *connect_req; uv_shutdown_t *shutdown_req; uv__io_t io_watcher; struct uv__queue write_queue; struct uv__queue write_completed_queue; uv_connection_cb connection_cb; int delayed_error; int accepted_fd; void* queued_fds;
 
};

__attribute__((visibility("default"))) int uv_tcp_init(uv_loop_t*, uv_tcp_t* handle);
__attribute__((visibility("default"))) int uv_tcp_init_ex(uv_loop_t*, uv_tcp_t* handle, unsigned int flags);
__attribute__((visibility("default"))) int uv_tcp_open(uv_tcp_t* handle, uv_os_sock_t sock);
__attribute__((visibility("default"))) int uv_tcp_nodelay(uv_tcp_t* handle, int enable);
__attribute__((visibility("default"))) int uv_tcp_keepalive(uv_tcp_t* handle,
                               int enable,
                               unsigned int delay);
__attribute__((visibility("default"))) int uv_tcp_simultaneous_accepts(uv_tcp_t* handle, int enable);

enum uv_tcp_flags {

  UV_TCP_IPV6ONLY = 1
};

__attribute__((visibility("default"))) int uv_tcp_bind(uv_tcp_t* handle,
                          const struct sockaddr* addr,
                          unsigned int flags);
__attribute__((visibility("default"))) int uv_tcp_getsockname(const uv_tcp_t* handle,
                                 struct sockaddr* name,
                                 int* namelen);
__attribute__((visibility("default"))) int uv_tcp_getpeername(const uv_tcp_t* handle,
                                 struct sockaddr* name,
                                 int* namelen);
__attribute__((visibility("default"))) int uv_tcp_close_reset(uv_tcp_t* handle, uv_close_cb close_cb);
__attribute__((visibility("default"))) int uv_tcp_connect(uv_connect_t* req,
                             uv_tcp_t* handle,
                             const struct sockaddr* addr,
                             uv_connect_cb cb);


struct uv_connect_s {
  void* data; uv_req_type type; void* reserved[6];
  uv_connect_cb cb;
  uv_stream_t* handle;
  struct uv__queue queue;
};






enum uv_udp_flags {

  UV_UDP_IPV6ONLY = 1,




  UV_UDP_PARTIAL = 2,
# 654 "/home/ubuntu/neovim/.deps/usr/include/uv.h"
  UV_UDP_REUSEADDR = 4,




  UV_UDP_MMSG_CHUNK = 8,





  UV_UDP_MMSG_FREE = 16,







  UV_UDP_LINUX_RECVERR = 32,



  UV_UDP_RECVMMSG = 256
};

typedef void (*uv_udp_send_cb)(uv_udp_send_t* req, int status);
typedef void (*uv_udp_recv_cb)(uv_udp_t* handle,
                               ssize_t nread,
                               const uv_buf_t* buf,
                               const struct sockaddr* addr,
                               unsigned flags);


struct uv_udp_s {
  void* data; uv_loop_t* loop; uv_handle_type type; uv_close_cb close_cb; struct uv__queue handle_queue; union { int fd; void* reserved[4]; } u; uv_handle_t* next_closing; unsigned int flags;





  size_t send_queue_size;



  size_t send_queue_count;
  uv_alloc_cb alloc_cb; uv_udp_recv_cb recv_cb; uv__io_t io_watcher; struct uv__queue write_queue; struct uv__queue write_completed_queue;
};


struct uv_udp_send_s {
  void* data; uv_req_type type; void* reserved[6];
  uv_udp_t* handle;
  uv_udp_send_cb cb;
  struct uv__queue queue; struct sockaddr_storage addr; unsigned int nbufs; uv_buf_t* bufs; ssize_t status; uv_udp_send_cb send_cb; uv_buf_t bufsml[4];
};

__attribute__((visibility("default"))) int uv_udp_init(uv_loop_t*, uv_udp_t* handle);
__attribute__((visibility("default"))) int uv_udp_init_ex(uv_loop_t*, uv_udp_t* handle, unsigned int flags);
__attribute__((visibility("default"))) int uv_udp_open(uv_udp_t* handle, uv_os_sock_t sock);
__attribute__((visibility("default"))) int uv_udp_bind(uv_udp_t* handle,
                          const struct sockaddr* addr,
                          unsigned int flags);
__attribute__((visibility("default"))) int uv_udp_connect(uv_udp_t* handle, const struct sockaddr* addr);

__attribute__((visibility("default"))) int uv_udp_getpeername(const uv_udp_t* handle,
                                 struct sockaddr* name,
                                 int* namelen);
__attribute__((visibility("default"))) int uv_udp_getsockname(const uv_udp_t* handle,
                                 struct sockaddr* name,
                                 int* namelen);
__attribute__((visibility("default"))) int uv_udp_set_membership(uv_udp_t* handle,
                                    const char* multicast_addr,
                                    const char* interface_addr,
                                    uv_membership membership);
__attribute__((visibility("default"))) int uv_udp_set_source_membership(uv_udp_t* handle,
                                           const char* multicast_addr,
                                           const char* interface_addr,
                                           const char* source_addr,
                                           uv_membership membership);
__attribute__((visibility("default"))) int uv_udp_set_multicast_loop(uv_udp_t* handle, int on);
__attribute__((visibility("default"))) int uv_udp_set_multicast_ttl(uv_udp_t* handle, int ttl);
__attribute__((visibility("default"))) int uv_udp_set_multicast_interface(uv_udp_t* handle,
                                             const char* interface_addr);
__attribute__((visibility("default"))) int uv_udp_set_broadcast(uv_udp_t* handle, int on);
__attribute__((visibility("default"))) int uv_udp_set_ttl(uv_udp_t* handle, int ttl);
__attribute__((visibility("default"))) int uv_udp_send(uv_udp_send_t* req,
                          uv_udp_t* handle,
                          const uv_buf_t bufs[],
                          unsigned int nbufs,
                          const struct sockaddr* addr,
                          uv_udp_send_cb send_cb);
__attribute__((visibility("default"))) int uv_udp_try_send(uv_udp_t* handle,
                              const uv_buf_t bufs[],
                              unsigned int nbufs,
                              const struct sockaddr* addr);
__attribute__((visibility("default"))) int uv_udp_recv_start(uv_udp_t* handle,
                                uv_alloc_cb alloc_cb,
                                uv_udp_recv_cb recv_cb);
__attribute__((visibility("default"))) int uv_udp_using_recvmmsg(const uv_udp_t* handle);
__attribute__((visibility("default"))) int uv_udp_recv_stop(uv_udp_t* handle);
__attribute__((visibility("default"))) size_t uv_udp_get_send_queue_size(const uv_udp_t* handle);
__attribute__((visibility("default"))) size_t uv_udp_get_send_queue_count(const uv_udp_t* handle);







struct uv_tty_s {
  void* data; uv_loop_t* loop; uv_handle_type type; uv_close_cb close_cb; struct uv__queue handle_queue; union { int fd; void* reserved[4]; } u; uv_handle_t* next_closing; unsigned int flags;
  size_t write_queue_size; uv_alloc_cb alloc_cb; uv_read_cb read_cb; uv_connect_t *connect_req; uv_shutdown_t *shutdown_req; uv__io_t io_watcher; struct uv__queue write_queue; struct uv__queue write_completed_queue; uv_connection_cb connection_cb; int delayed_error; int accepted_fd; void* queued_fds;
  struct termios orig_termios; int mode;
};

typedef enum {

  UV_TTY_MODE_NORMAL,

  UV_TTY_MODE_RAW,

  UV_TTY_MODE_IO
} uv_tty_mode_t;

typedef enum {




  UV_TTY_SUPPORTED,



  UV_TTY_UNSUPPORTED
} uv_tty_vtermstate_t;


__attribute__((visibility("default"))) int uv_tty_init(uv_loop_t*, uv_tty_t*, uv_file fd, int readable);
__attribute__((visibility("default"))) int uv_tty_set_mode(uv_tty_t*, uv_tty_mode_t mode);
__attribute__((visibility("default"))) int uv_tty_reset_mode(void);
__attribute__((visibility("default"))) int uv_tty_get_winsize(uv_tty_t*, int* width, int* height);
__attribute__((visibility("default"))) void uv_tty_set_vterm_state(uv_tty_vtermstate_t state);
__attribute__((visibility("default"))) int uv_tty_get_vterm_state(uv_tty_vtermstate_t* state);
# 809 "/home/ubuntu/neovim/.deps/usr/include/uv.h"
__attribute__((visibility("default"))) uv_handle_type uv_guess_handle(uv_file file);

enum {
  UV_PIPE_NO_TRUNCATE = 1u << 0
};







struct uv_pipe_s {
  void* data; uv_loop_t* loop; uv_handle_type type; uv_close_cb close_cb; struct uv__queue handle_queue; union { int fd; void* reserved[4]; } u; uv_handle_t* next_closing; unsigned int flags;
  size_t write_queue_size; uv_alloc_cb alloc_cb; uv_read_cb read_cb; uv_connect_t *connect_req; uv_shutdown_t *shutdown_req; uv__io_t io_watcher; struct uv__queue write_queue; struct uv__queue write_completed_queue; uv_connection_cb connection_cb; int delayed_error; int accepted_fd; void* queued_fds;
  int ipc;
  const char* pipe_fname;
};

__attribute__((visibility("default"))) int uv_pipe_init(uv_loop_t*, uv_pipe_t* handle, int ipc);
__attribute__((visibility("default"))) int uv_pipe_open(uv_pipe_t*, uv_file file);
__attribute__((visibility("default"))) int uv_pipe_bind(uv_pipe_t* handle, const char* name);
__attribute__((visibility("default"))) int uv_pipe_bind2(uv_pipe_t* handle,
                            const char* name,
                            size_t namelen,
                            unsigned int flags);
__attribute__((visibility("default"))) void uv_pipe_connect(uv_connect_t* req,
                               uv_pipe_t* handle,
                               const char* name,
                               uv_connect_cb cb);
__attribute__((visibility("default"))) int uv_pipe_connect2(uv_connect_t* req,
                               uv_pipe_t* handle,
                               const char* name,
                               size_t namelen,
                               unsigned int flags,
                               uv_connect_cb cb);
__attribute__((visibility("default"))) int uv_pipe_getsockname(const uv_pipe_t* handle,
                                  char* buffer,
                                  size_t* size);
__attribute__((visibility("default"))) int uv_pipe_getpeername(const uv_pipe_t* handle,
                                  char* buffer,
                                  size_t* size);
__attribute__((visibility("default"))) void uv_pipe_pending_instances(uv_pipe_t* handle, int count);
__attribute__((visibility("default"))) int uv_pipe_pending_count(uv_pipe_t* handle);
__attribute__((visibility("default"))) uv_handle_type uv_pipe_pending_type(uv_pipe_t* handle);
__attribute__((visibility("default"))) int uv_pipe_chmod(uv_pipe_t* handle, int flags);


struct uv_poll_s {
  void* data; uv_loop_t* loop; uv_handle_type type; uv_close_cb close_cb; struct uv__queue handle_queue; union { int fd; void* reserved[4]; } u; uv_handle_t* next_closing; unsigned int flags;
  uv_poll_cb poll_cb;
  uv__io_t io_watcher;
};

enum uv_poll_event {
  UV_READABLE = 1,
  UV_WRITABLE = 2,
  UV_DISCONNECT = 4,
  UV_PRIORITIZED = 8
};

__attribute__((visibility("default"))) int uv_poll_init(uv_loop_t* loop, uv_poll_t* handle, int fd);
__attribute__((visibility("default"))) int uv_poll_init_socket(uv_loop_t* loop,
                                  uv_poll_t* handle,
                                  uv_os_sock_t socket);
__attribute__((visibility("default"))) int uv_poll_start(uv_poll_t* handle, int events, uv_poll_cb cb);
__attribute__((visibility("default"))) int uv_poll_stop(uv_poll_t* handle);


struct uv_prepare_s {
  void* data; uv_loop_t* loop; uv_handle_type type; uv_close_cb close_cb; struct uv__queue handle_queue; union { int fd; void* reserved[4]; } u; uv_handle_t* next_closing; unsigned int flags;
  uv_prepare_cb prepare_cb; struct uv__queue queue;
};

__attribute__((visibility("default"))) int uv_prepare_init(uv_loop_t*, uv_prepare_t* prepare);
__attribute__((visibility("default"))) int uv_prepare_start(uv_prepare_t* prepare, uv_prepare_cb cb);
__attribute__((visibility("default"))) int uv_prepare_stop(uv_prepare_t* prepare);


struct uv_check_s {
  void* data; uv_loop_t* loop; uv_handle_type type; uv_close_cb close_cb; struct uv__queue handle_queue; union { int fd; void* reserved[4]; } u; uv_handle_t* next_closing; unsigned int flags;
  uv_check_cb check_cb; struct uv__queue queue;
};

__attribute__((visibility("default"))) int uv_check_init(uv_loop_t*, uv_check_t* check);
__attribute__((visibility("default"))) int uv_check_start(uv_check_t* check, uv_check_cb cb);
__attribute__((visibility("default"))) int uv_check_stop(uv_check_t* check);


struct uv_idle_s {
  void* data; uv_loop_t* loop; uv_handle_type type; uv_close_cb close_cb; struct uv__queue handle_queue; union { int fd; void* reserved[4]; } u; uv_handle_t* next_closing; unsigned int flags;
  uv_idle_cb idle_cb; struct uv__queue queue;
};

__attribute__((visibility("default"))) int uv_idle_init(uv_loop_t*, uv_idle_t* idle);
__attribute__((visibility("default"))) int uv_idle_start(uv_idle_t* idle, uv_idle_cb cb);
__attribute__((visibility("default"))) int uv_idle_stop(uv_idle_t* idle);


struct uv_async_s {
  void* data; uv_loop_t* loop; uv_handle_type type; uv_close_cb close_cb; struct uv__queue handle_queue; union { int fd; void* reserved[4]; } u; uv_handle_t* next_closing; unsigned int flags;
  uv_async_cb async_cb; struct uv__queue queue; int pending;
};

__attribute__((visibility("default"))) int uv_async_init(uv_loop_t*,
                            uv_async_t* async,
                            uv_async_cb async_cb);
__attribute__((visibility("default"))) int uv_async_send(uv_async_t* async);







struct uv_timer_s {
  void* data; uv_loop_t* loop; uv_handle_type type; uv_close_cb close_cb; struct uv__queue handle_queue; union { int fd; void* reserved[4]; } u; uv_handle_t* next_closing; unsigned int flags;
  uv_timer_cb timer_cb; union { void* heap[3]; struct uv__queue queue; } node; uint64_t timeout; uint64_t repeat; uint64_t start_id;
};

__attribute__((visibility("default"))) int uv_timer_init(uv_loop_t*, uv_timer_t* handle);
__attribute__((visibility("default"))) int uv_timer_start(uv_timer_t* handle,
                             uv_timer_cb cb,
                             uint64_t timeout,
                             uint64_t repeat);
__attribute__((visibility("default"))) int uv_timer_stop(uv_timer_t* handle);
__attribute__((visibility("default"))) int uv_timer_again(uv_timer_t* handle);
__attribute__((visibility("default"))) void uv_timer_set_repeat(uv_timer_t* handle, uint64_t repeat);
__attribute__((visibility("default"))) uint64_t uv_timer_get_repeat(const uv_timer_t* handle);
__attribute__((visibility("default"))) uint64_t uv_timer_get_due_in(const uv_timer_t* handle);







struct uv_getaddrinfo_s {
  void* data; uv_req_type type; void* reserved[6];

  uv_loop_t* loop;

  struct uv__work work_req; uv_getaddrinfo_cb cb; struct addrinfo* hints; char* hostname; char* service; struct addrinfo* addrinfo; int retcode;
};


__attribute__((visibility("default"))) int uv_getaddrinfo(uv_loop_t* loop,
                             uv_getaddrinfo_t* req,
                             uv_getaddrinfo_cb getaddrinfo_cb,
                             const char* node,
                             const char* service,
                             const struct addrinfo* hints);
__attribute__((visibility("default"))) void uv_freeaddrinfo(struct addrinfo* ai);







struct uv_getnameinfo_s {
  void* data; uv_req_type type; void* reserved[6];

  uv_loop_t* loop;

  struct uv__work work_req; uv_getnameinfo_cb getnameinfo_cb; struct sockaddr_storage storage; int flags; char host[
# 974 "/home/ubuntu/neovim/.deps/usr/include/uv.h" 3 4
 1025
# 974 "/home/ubuntu/neovim/.deps/usr/include/uv.h"
 ]; char service[
# 974 "/home/ubuntu/neovim/.deps/usr/include/uv.h" 3 4
 32
# 974 "/home/ubuntu/neovim/.deps/usr/include/uv.h"
 ]; int retcode;
};

__attribute__((visibility("default"))) int uv_getnameinfo(uv_loop_t* loop,
                             uv_getnameinfo_t* req,
                             uv_getnameinfo_cb getnameinfo_cb,
                             const struct sockaddr* addr,
                             int flags);



typedef enum {
  UV_IGNORE = 0x00,
  UV_CREATE_PIPE = 0x01,
  UV_INHERIT_FD = 0x02,
  UV_INHERIT_STREAM = 0x04,






  UV_READABLE_PIPE = 0x10,
  UV_WRITABLE_PIPE = 0x20,







  UV_NONBLOCK_PIPE = 0x40,
  UV_OVERLAPPED_PIPE = 0x40
} uv_stdio_flags;

typedef struct uv_stdio_container_s {
  uv_stdio_flags flags;

  union {
    uv_stream_t* stream;
    int fd;
  } data;
} uv_stdio_container_t;

typedef struct uv_process_options_s {
  uv_exit_cb exit_cb;
  const char* file;






  char** args;




  char** env;




  const char* cwd;




  unsigned int flags;
# 1052 "/home/ubuntu/neovim/.deps/usr/include/uv.h"
  int stdio_count;
  uv_stdio_container_t* stdio;





  uv_uid_t uid;
  uv_gid_t gid;
} uv_process_options_t;




enum uv_process_flags {





  UV_PROCESS_SETUID = (1 << 0),





  UV_PROCESS_SETGID = (1 << 1),





  UV_PROCESS_WINDOWS_VERBATIM_ARGUMENTS = (1 << 2),







  UV_PROCESS_DETACHED = (1 << 3),




  UV_PROCESS_WINDOWS_HIDE = (1 << 4),





  UV_PROCESS_WINDOWS_HIDE_CONSOLE = (1 << 5),





  UV_PROCESS_WINDOWS_HIDE_GUI = (1 << 6),






  UV_PROCESS_WINDOWS_FILE_PATH_EXACT_NAME = (1 << 7)
};




struct uv_process_s {
  void* data; uv_loop_t* loop; uv_handle_type type; uv_close_cb close_cb; struct uv__queue handle_queue; union { int fd; void* reserved[4]; } u; uv_handle_t* next_closing; unsigned int flags;
  uv_exit_cb exit_cb;
  int pid;
  struct uv__queue queue; int status;
};

__attribute__((visibility("default"))) int uv_spawn(uv_loop_t* loop,
                       uv_process_t* handle,
                       const uv_process_options_t* options);
__attribute__((visibility("default"))) int uv_process_kill(uv_process_t*, int signum);
__attribute__((visibility("default"))) int uv_kill(int pid, int signum);
__attribute__((visibility("default"))) uv_pid_t uv_process_get_pid(const uv_process_t*);





struct uv_work_s {
  void* data; uv_req_type type; void* reserved[6];
  uv_loop_t* loop;
  uv_work_cb work_cb;
  uv_after_work_cb after_work_cb;
  struct uv__work work_req;
};

__attribute__((visibility("default"))) int uv_queue_work(uv_loop_t* loop,
                            uv_work_t* req,
                            uv_work_cb work_cb,
                            uv_after_work_cb after_work_cb);

__attribute__((visibility("default"))) int uv_cancel(uv_req_t* req);


struct uv_cpu_times_s {
  uint64_t user;
  uint64_t nice;
  uint64_t sys;
  uint64_t idle;
  uint64_t irq;
};

struct uv_cpu_info_s {
  char* model;
  int speed;
  struct uv_cpu_times_s cpu_times;
};

struct uv_interface_address_s {
  char* name;
  char phys_addr[6];
  int is_internal;
  union {
    struct sockaddr_in address4;
    struct sockaddr_in6 address6;
  } address;
  union {
    struct sockaddr_in netmask4;
    struct sockaddr_in6 netmask6;
  } netmask;
};

struct uv_passwd_s {
  char* username;
  unsigned long uid;
  unsigned long gid;
  char* shell;
  char* homedir;
};

struct uv_group_s {
  char* groupname;
  unsigned long gid;
  char** members;
};

struct uv_utsname_s {
  char sysname[256];
  char release[256];
  char version[256];
  char machine[256];



};

struct uv_statfs_s {
  uint64_t f_type;
  uint64_t f_bsize;
  uint64_t f_blocks;
  uint64_t f_bfree;
  uint64_t f_bavail;
  uint64_t f_files;
  uint64_t f_ffree;
  uint64_t f_spare[4];
};

typedef enum {
  UV_DIRENT_UNKNOWN,
  UV_DIRENT_FILE,
  UV_DIRENT_DIR,
  UV_DIRENT_LINK,
  UV_DIRENT_FIFO,
  UV_DIRENT_SOCKET,
  UV_DIRENT_CHAR,
  UV_DIRENT_BLOCK
} uv_dirent_type_t;

struct uv_dirent_s {
  const char* name;
  uv_dirent_type_t type;
};

__attribute__((visibility("default"))) char** uv_setup_args(int argc, char** argv);
__attribute__((visibility("default"))) int uv_get_process_title(char* buffer, size_t size);
__attribute__((visibility("default"))) int uv_set_process_title(const char* title);
__attribute__((visibility("default"))) int uv_resident_set_memory(size_t* rss);
__attribute__((visibility("default"))) int uv_uptime(double* uptime);
__attribute__((visibility("default"))) uv_os_fd_t uv_get_osfhandle(int fd);
__attribute__((visibility("default"))) int uv_open_osfhandle(uv_os_fd_t os_fd);

typedef struct {
   uv_timeval_t ru_utime;
   uv_timeval_t ru_stime;
   uint64_t ru_maxrss;
   uint64_t ru_ixrss;
   uint64_t ru_idrss;
   uint64_t ru_isrss;
   uint64_t ru_minflt;
   uint64_t ru_majflt;
   uint64_t ru_nswap;
   uint64_t ru_inblock;
   uint64_t ru_oublock;
   uint64_t ru_msgsnd;
   uint64_t ru_msgrcv;
   uint64_t ru_nsignals;
   uint64_t ru_nvcsw;
   uint64_t ru_nivcsw;
} uv_rusage_t;

__attribute__((visibility("default"))) int uv_getrusage(uv_rusage_t* rusage);

__attribute__((visibility("default"))) int uv_os_homedir(char* buffer, size_t* size);
__attribute__((visibility("default"))) int uv_os_tmpdir(char* buffer, size_t* size);
__attribute__((visibility("default"))) int uv_os_get_passwd(uv_passwd_t* pwd);
__attribute__((visibility("default"))) void uv_os_free_passwd(uv_passwd_t* pwd);
__attribute__((visibility("default"))) int uv_os_get_passwd2(uv_passwd_t* pwd, uv_uid_t uid);
__attribute__((visibility("default"))) int uv_os_get_group(uv_group_t* grp, uv_uid_t gid);
__attribute__((visibility("default"))) void uv_os_free_group(uv_group_t* grp);
__attribute__((visibility("default"))) uv_pid_t uv_os_getpid(void);
__attribute__((visibility("default"))) uv_pid_t uv_os_getppid(void);
# 1291 "/home/ubuntu/neovim/.deps/usr/include/uv.h"
__attribute__((visibility("default"))) int uv_os_getpriority(uv_pid_t pid, int* priority);
__attribute__((visibility("default"))) int uv_os_setpriority(uv_pid_t pid, int priority);

enum {
  UV_THREAD_PRIORITY_HIGHEST = 2,
  UV_THREAD_PRIORITY_ABOVE_NORMAL = 1,
  UV_THREAD_PRIORITY_NORMAL = 0,
  UV_THREAD_PRIORITY_BELOW_NORMAL = -1,
  UV_THREAD_PRIORITY_LOWEST = -2,
};

__attribute__((visibility("default"))) int uv_thread_getpriority(uv_thread_t tid, int* priority);
__attribute__((visibility("default"))) int uv_thread_setpriority(uv_thread_t tid, int priority);

__attribute__((visibility("default"))) unsigned int uv_available_parallelism(void);
__attribute__((visibility("default"))) int uv_cpu_info(uv_cpu_info_t** cpu_infos, int* count);
__attribute__((visibility("default"))) void uv_free_cpu_info(uv_cpu_info_t* cpu_infos, int count);
__attribute__((visibility("default"))) int uv_cpumask_size(void);

__attribute__((visibility("default"))) int uv_interface_addresses(uv_interface_address_t** addresses,
                                     int* count);
__attribute__((visibility("default"))) void uv_free_interface_addresses(uv_interface_address_t* addresses,
                                           int count);

struct uv_env_item_s {
  char* name;
  char* value;
};

__attribute__((visibility("default"))) int uv_os_environ(uv_env_item_t** envitems, int* count);
__attribute__((visibility("default"))) void uv_os_free_environ(uv_env_item_t* envitems, int count);
__attribute__((visibility("default"))) int uv_os_getenv(const char* name, char* buffer, size_t* size);
__attribute__((visibility("default"))) int uv_os_setenv(const char* name, const char* value);
__attribute__((visibility("default"))) int uv_os_unsetenv(const char* name);
# 1337 "/home/ubuntu/neovim/.deps/usr/include/uv.h"
__attribute__((visibility("default"))) int uv_os_gethostname(char* buffer, size_t* size);

__attribute__((visibility("default"))) int uv_os_uname(uv_utsname_t* buffer);

struct uv_metrics_s {
  uint64_t loop_count;
  uint64_t events;
  uint64_t events_waiting;

  uint64_t* reserved[13];
};

__attribute__((visibility("default"))) int uv_metrics_info(uv_loop_t* loop, uv_metrics_t* metrics);
__attribute__((visibility("default"))) uint64_t uv_metrics_idle_time(uv_loop_t* loop);

typedef enum {
  UV_FS_UNKNOWN = -1,
  UV_FS_CUSTOM,
  UV_FS_OPEN,
  UV_FS_CLOSE,
  UV_FS_READ,
  UV_FS_WRITE,
  UV_FS_SENDFILE,
  UV_FS_STAT,
  UV_FS_LSTAT,
  UV_FS_FSTAT,
  UV_FS_FTRUNCATE,
  UV_FS_UTIME,
  UV_FS_FUTIME,
  UV_FS_ACCESS,
  UV_FS_CHMOD,
  UV_FS_FCHMOD,
  UV_FS_FSYNC,
  UV_FS_FDATASYNC,
  UV_FS_UNLINK,
  UV_FS_RMDIR,
  UV_FS_MKDIR,
  UV_FS_MKDTEMP,
  UV_FS_RENAME,
  UV_FS_SCANDIR,
  UV_FS_LINK,
  UV_FS_SYMLINK,
  UV_FS_READLINK,
  UV_FS_CHOWN,
  UV_FS_FCHOWN,
  UV_FS_REALPATH,
  UV_FS_COPYFILE,
  UV_FS_LCHOWN,
  UV_FS_OPENDIR,
  UV_FS_READDIR,
  UV_FS_CLOSEDIR,
  UV_FS_STATFS,
  UV_FS_MKSTEMP,
  UV_FS_LUTIME
} uv_fs_type;

struct uv_dir_s {
  uv_dirent_t* dirents;
  size_t nentries;
  void* reserved[4];
  DIR* dir;
};


struct uv_fs_s {
  void* data; uv_req_type type; void* reserved[6];
  uv_fs_type fs_type;
  uv_loop_t* loop;
  uv_fs_cb cb;
  ssize_t result;
  void* ptr;
  const char* path;
  uv_stat_t statbuf;
  const char *new_path; uv_file file; int flags; mode_t mode; unsigned int nbufs; uv_buf_t* bufs; off_t off; uv_uid_t uid; uv_gid_t gid; double atime; double mtime; struct uv__work work_req; uv_buf_t bufsml[4];
};

__attribute__((visibility("default"))) uv_fs_type uv_fs_get_type(const uv_fs_t*);
__attribute__((visibility("default"))) ssize_t uv_fs_get_result(const uv_fs_t*);
__attribute__((visibility("default"))) int uv_fs_get_system_error(const uv_fs_t*);
__attribute__((visibility("default"))) void* uv_fs_get_ptr(const uv_fs_t*);
__attribute__((visibility("default"))) const char* uv_fs_get_path(const uv_fs_t*);
__attribute__((visibility("default"))) uv_stat_t* uv_fs_get_statbuf(uv_fs_t*);

__attribute__((visibility("default"))) void uv_fs_req_cleanup(uv_fs_t* req);
__attribute__((visibility("default"))) int uv_fs_close(uv_loop_t* loop,
                          uv_fs_t* req,
                          uv_file file,
                          uv_fs_cb cb);
__attribute__((visibility("default"))) int uv_fs_open(uv_loop_t* loop,
                         uv_fs_t* req,
                         const char* path,
                         int flags,
                         int mode,
                         uv_fs_cb cb);
__attribute__((visibility("default"))) int uv_fs_read(uv_loop_t* loop,
                         uv_fs_t* req,
                         uv_file file,
                         const uv_buf_t bufs[],
                         unsigned int nbufs,
                         int64_t offset,
                         uv_fs_cb cb);
__attribute__((visibility("default"))) int uv_fs_unlink(uv_loop_t* loop,
                           uv_fs_t* req,
                           const char* path,
                           uv_fs_cb cb);
__attribute__((visibility("default"))) int uv_fs_write(uv_loop_t* loop,
                          uv_fs_t* req,
                          uv_file file,
                          const uv_buf_t bufs[],
                          unsigned int nbufs,
                          int64_t offset,
                          uv_fs_cb cb);
# 1467 "/home/ubuntu/neovim/.deps/usr/include/uv.h"
__attribute__((visibility("default"))) int uv_fs_copyfile(uv_loop_t* loop,
                             uv_fs_t* req,
                             const char* path,
                             const char* new_path,
                             int flags,
                             uv_fs_cb cb);
__attribute__((visibility("default"))) int uv_fs_mkdir(uv_loop_t* loop,
                          uv_fs_t* req,
                          const char* path,
                          int mode,
                          uv_fs_cb cb);
__attribute__((visibility("default"))) int uv_fs_mkdtemp(uv_loop_t* loop,
                            uv_fs_t* req,
                            const char* tpl,
                            uv_fs_cb cb);
__attribute__((visibility("default"))) int uv_fs_mkstemp(uv_loop_t* loop,
                            uv_fs_t* req,
                            const char* tpl,
                            uv_fs_cb cb);
__attribute__((visibility("default"))) int uv_fs_rmdir(uv_loop_t* loop,
                          uv_fs_t* req,
                          const char* path,
                          uv_fs_cb cb);
__attribute__((visibility("default"))) int uv_fs_scandir(uv_loop_t* loop,
                            uv_fs_t* req,
                            const char* path,
                            int flags,
                            uv_fs_cb cb);
__attribute__((visibility("default"))) int uv_fs_scandir_next(uv_fs_t* req,
                                 uv_dirent_t* ent);
__attribute__((visibility("default"))) int uv_fs_opendir(uv_loop_t* loop,
                            uv_fs_t* req,
                            const char* path,
                            uv_fs_cb cb);
__attribute__((visibility("default"))) int uv_fs_readdir(uv_loop_t* loop,
                            uv_fs_t* req,
                            uv_dir_t* dir,
                            uv_fs_cb cb);
__attribute__((visibility("default"))) int uv_fs_closedir(uv_loop_t* loop,
                             uv_fs_t* req,
                             uv_dir_t* dir,
                             uv_fs_cb cb);
__attribute__((visibility("default"))) int uv_fs_stat(uv_loop_t* loop,
                         uv_fs_t* req,
                         const char* path,
                         uv_fs_cb cb);
__attribute__((visibility("default"))) int uv_fs_fstat(uv_loop_t* loop,
                          uv_fs_t* req,
                          uv_file file,
                          uv_fs_cb cb);
__attribute__((visibility("default"))) int uv_fs_rename(uv_loop_t* loop,
                           uv_fs_t* req,
                           const char* path,
                           const char* new_path,
                           uv_fs_cb cb);
__attribute__((visibility("default"))) int uv_fs_fsync(uv_loop_t* loop,
                          uv_fs_t* req,
                          uv_file file,
                          uv_fs_cb cb);
__attribute__((visibility("default"))) int uv_fs_fdatasync(uv_loop_t* loop,
                              uv_fs_t* req,
                              uv_file file,
                              uv_fs_cb cb);
__attribute__((visibility("default"))) int uv_fs_ftruncate(uv_loop_t* loop,
                              uv_fs_t* req,
                              uv_file file,
                              int64_t offset,
                              uv_fs_cb cb);
__attribute__((visibility("default"))) int uv_fs_sendfile(uv_loop_t* loop,
                             uv_fs_t* req,
                             uv_file out_fd,
                             uv_file in_fd,
                             int64_t in_offset,
                             size_t length,
                             uv_fs_cb cb);
__attribute__((visibility("default"))) int uv_fs_access(uv_loop_t* loop,
                           uv_fs_t* req,
                           const char* path,
                           int mode,
                           uv_fs_cb cb);
__attribute__((visibility("default"))) int uv_fs_chmod(uv_loop_t* loop,
                          uv_fs_t* req,
                          const char* path,
                          int mode,
                          uv_fs_cb cb);
__attribute__((visibility("default"))) int uv_fs_utime(uv_loop_t* loop,
                          uv_fs_t* req,
                          const char* path,
                          double atime,
                          double mtime,
                          uv_fs_cb cb);
__attribute__((visibility("default"))) int uv_fs_futime(uv_loop_t* loop,
                           uv_fs_t* req,
                           uv_file file,
                           double atime,
                           double mtime,
                           uv_fs_cb cb);
__attribute__((visibility("default"))) int uv_fs_lutime(uv_loop_t* loop,
                           uv_fs_t* req,
                           const char* path,
                           double atime,
                           double mtime,
                           uv_fs_cb cb);
__attribute__((visibility("default"))) int uv_fs_lstat(uv_loop_t* loop,
                          uv_fs_t* req,
                          const char* path,
                          uv_fs_cb cb);
__attribute__((visibility("default"))) int uv_fs_link(uv_loop_t* loop,
                         uv_fs_t* req,
                         const char* path,
                         const char* new_path,
                         uv_fs_cb cb);
# 1592 "/home/ubuntu/neovim/.deps/usr/include/uv.h"
__attribute__((visibility("default"))) int uv_fs_symlink(uv_loop_t* loop,
                            uv_fs_t* req,
                            const char* path,
                            const char* new_path,
                            int flags,
                            uv_fs_cb cb);
__attribute__((visibility("default"))) int uv_fs_readlink(uv_loop_t* loop,
                             uv_fs_t* req,
                             const char* path,
                             uv_fs_cb cb);
__attribute__((visibility("default"))) int uv_fs_realpath(uv_loop_t* loop,
                             uv_fs_t* req,
                             const char* path,
                             uv_fs_cb cb);
__attribute__((visibility("default"))) int uv_fs_fchmod(uv_loop_t* loop,
                           uv_fs_t* req,
                           uv_file file,
                           int mode,
                           uv_fs_cb cb);
__attribute__((visibility("default"))) int uv_fs_chown(uv_loop_t* loop,
                          uv_fs_t* req,
                          const char* path,
                          uv_uid_t uid,
                          uv_gid_t gid,
                          uv_fs_cb cb);
__attribute__((visibility("default"))) int uv_fs_fchown(uv_loop_t* loop,
                           uv_fs_t* req,
                           uv_file file,
                           uv_uid_t uid,
                           uv_gid_t gid,
                           uv_fs_cb cb);
__attribute__((visibility("default"))) int uv_fs_lchown(uv_loop_t* loop,
                           uv_fs_t* req,
                           const char* path,
                           uv_uid_t uid,
                           uv_gid_t gid,
                           uv_fs_cb cb);
__attribute__((visibility("default"))) int uv_fs_statfs(uv_loop_t* loop,
                           uv_fs_t* req,
                           const char* path,
                           uv_fs_cb cb);


enum uv_fs_event {
  UV_RENAME = 1,
  UV_CHANGE = 2
};


struct uv_fs_event_s {
  void* data; uv_loop_t* loop; uv_handle_type type; uv_close_cb close_cb; struct uv__queue handle_queue; union { int fd; void* reserved[4]; } u; uv_handle_t* next_closing; unsigned int flags;

  char* path;
  uv_fs_event_cb cb; struct uv__queue watchers; int wd;
};





struct uv_fs_poll_s {
  void* data; uv_loop_t* loop; uv_handle_type type; uv_close_cb close_cb; struct uv__queue handle_queue; union { int fd; void* reserved[4]; } u; uv_handle_t* next_closing; unsigned int flags;

  void* poll_ctx;
};

__attribute__((visibility("default"))) int uv_fs_poll_init(uv_loop_t* loop, uv_fs_poll_t* handle);
__attribute__((visibility("default"))) int uv_fs_poll_start(uv_fs_poll_t* handle,
                               uv_fs_poll_cb poll_cb,
                               const char* path,
                               unsigned int interval);
__attribute__((visibility("default"))) int uv_fs_poll_stop(uv_fs_poll_t* handle);
__attribute__((visibility("default"))) int uv_fs_poll_getpath(uv_fs_poll_t* handle,
                                 char* buffer,
                                 size_t* size);


struct uv_signal_s {
  void* data; uv_loop_t* loop; uv_handle_type type; uv_close_cb close_cb; struct uv__queue handle_queue; union { int fd; void* reserved[4]; } u; uv_handle_t* next_closing; unsigned int flags;
  uv_signal_cb signal_cb;
  int signum;
  struct { struct uv_signal_s* rbe_left; struct uv_signal_s* rbe_right; struct uv_signal_s* rbe_parent; int rbe_color; } tree_entry; unsigned int caught_signals; unsigned int dispatched_signals;
};

__attribute__((visibility("default"))) int uv_signal_init(uv_loop_t* loop, uv_signal_t* handle);
__attribute__((visibility("default"))) int uv_signal_start(uv_signal_t* handle,
                              uv_signal_cb signal_cb,
                              int signum);
__attribute__((visibility("default"))) int uv_signal_start_oneshot(uv_signal_t* handle,
                                      uv_signal_cb signal_cb,
                                      int signum);
__attribute__((visibility("default"))) int uv_signal_stop(uv_signal_t* handle);

__attribute__((visibility("default"))) void uv_loadavg(double avg[3]);





enum uv_fs_event_flags {







  UV_FS_EVENT_WATCH_ENTRY = 1,
# 1708 "/home/ubuntu/neovim/.deps/usr/include/uv.h"
  UV_FS_EVENT_STAT = 2,






  UV_FS_EVENT_RECURSIVE = 4
};


__attribute__((visibility("default"))) int uv_fs_event_init(uv_loop_t* loop, uv_fs_event_t* handle);
__attribute__((visibility("default"))) int uv_fs_event_start(uv_fs_event_t* handle,
                                uv_fs_event_cb cb,
                                const char* path,
                                unsigned int flags);
__attribute__((visibility("default"))) int uv_fs_event_stop(uv_fs_event_t* handle);
__attribute__((visibility("default"))) int uv_fs_event_getpath(uv_fs_event_t* handle,
                                  char* buffer,
                                  size_t* size);

__attribute__((visibility("default"))) int uv_ip4_addr(const char* ip, int port, struct sockaddr_in* addr);
__attribute__((visibility("default"))) int uv_ip6_addr(const char* ip, int port, struct sockaddr_in6* addr);

__attribute__((visibility("default"))) int uv_ip4_name(const struct sockaddr_in* src, char* dst, size_t size);
__attribute__((visibility("default"))) int uv_ip6_name(const struct sockaddr_in6* src, char* dst, size_t size);
__attribute__((visibility("default"))) int uv_ip_name(const struct sockaddr* src, char* dst, size_t size);

__attribute__((visibility("default"))) int uv_inet_ntop(int af, const void* src, char* dst, size_t size);
__attribute__((visibility("default"))) int uv_inet_pton(int af, const char* src, void* dst);


struct uv_random_s {
  void* data; uv_req_type type; void* reserved[6];

  uv_loop_t* loop;

  int status;
  void* buf;
  size_t buflen;
  uv_random_cb cb;
  struct uv__work work_req;
};

__attribute__((visibility("default"))) int uv_random(uv_loop_t* loop,
                        uv_random_t* req,
                        void *buf,
                        size_t buflen,
                        unsigned flags,
                        uv_random_cb cb);
# 1767 "/home/ubuntu/neovim/.deps/usr/include/uv.h"
__attribute__((visibility("default"))) int uv_if_indextoname(unsigned int ifindex,
                                char* buffer,
                                size_t* size);
__attribute__((visibility("default"))) int uv_if_indextoiid(unsigned int ifindex,
                               char* buffer,
                               size_t* size);

__attribute__((visibility("default"))) int uv_exepath(char* buffer, size_t* size);

__attribute__((visibility("default"))) int uv_cwd(char* buffer, size_t* size);

__attribute__((visibility("default"))) int uv_chdir(const char* dir);

__attribute__((visibility("default"))) uint64_t uv_get_free_memory(void);
__attribute__((visibility("default"))) uint64_t uv_get_total_memory(void);
__attribute__((visibility("default"))) uint64_t uv_get_constrained_memory(void);
__attribute__((visibility("default"))) uint64_t uv_get_available_memory(void);

__attribute__((visibility("default"))) int uv_clock_gettime(uv_clock_id clock_id, uv_timespec64_t* ts);
__attribute__((visibility("default"))) uint64_t uv_hrtime(void);
__attribute__((visibility("default"))) void uv_sleep(unsigned int msec);

__attribute__((visibility("default"))) void uv_disable_stdio_inheritance(void);

__attribute__((visibility("default"))) int uv_dlopen(const char* filename, uv_lib_t* lib);
__attribute__((visibility("default"))) void uv_dlclose(uv_lib_t* lib);
__attribute__((visibility("default"))) int uv_dlsym(uv_lib_t* lib, const char* name, void** ptr);
__attribute__((visibility("default"))) const char* uv_dlerror(const uv_lib_t* lib);

__attribute__((visibility("default"))) int uv_mutex_init(uv_mutex_t* handle);
__attribute__((visibility("default"))) int uv_mutex_init_recursive(uv_mutex_t* handle);
__attribute__((visibility("default"))) void uv_mutex_destroy(uv_mutex_t* handle);
__attribute__((visibility("default"))) void uv_mutex_lock(uv_mutex_t* handle);
__attribute__((visibility("default"))) int uv_mutex_trylock(uv_mutex_t* handle);
__attribute__((visibility("default"))) void uv_mutex_unlock(uv_mutex_t* handle);

__attribute__((visibility("default"))) int uv_rwlock_init(uv_rwlock_t* rwlock);
__attribute__((visibility("default"))) void uv_rwlock_destroy(uv_rwlock_t* rwlock);
__attribute__((visibility("default"))) void uv_rwlock_rdlock(uv_rwlock_t* rwlock);
__attribute__((visibility("default"))) int uv_rwlock_tryrdlock(uv_rwlock_t* rwlock);
__attribute__((visibility("default"))) void uv_rwlock_rdunlock(uv_rwlock_t* rwlock);
__attribute__((visibility("default"))) void uv_rwlock_wrlock(uv_rwlock_t* rwlock);
__attribute__((visibility("default"))) int uv_rwlock_trywrlock(uv_rwlock_t* rwlock);
__attribute__((visibility("default"))) void uv_rwlock_wrunlock(uv_rwlock_t* rwlock);

__attribute__((visibility("default"))) int uv_sem_init(uv_sem_t* sem, unsigned int value);
__attribute__((visibility("default"))) void uv_sem_destroy(uv_sem_t* sem);
__attribute__((visibility("default"))) void uv_sem_post(uv_sem_t* sem);
__attribute__((visibility("default"))) void uv_sem_wait(uv_sem_t* sem);
__attribute__((visibility("default"))) int uv_sem_trywait(uv_sem_t* sem);

__attribute__((visibility("default"))) int uv_cond_init(uv_cond_t* cond);
__attribute__((visibility("default"))) void uv_cond_destroy(uv_cond_t* cond);
__attribute__((visibility("default"))) void uv_cond_signal(uv_cond_t* cond);
__attribute__((visibility("default"))) void uv_cond_broadcast(uv_cond_t* cond);

__attribute__((visibility("default"))) int uv_barrier_init(uv_barrier_t* barrier, unsigned int count);
__attribute__((visibility("default"))) void uv_barrier_destroy(uv_barrier_t* barrier);
__attribute__((visibility("default"))) int uv_barrier_wait(uv_barrier_t* barrier);

__attribute__((visibility("default"))) void uv_cond_wait(uv_cond_t* cond, uv_mutex_t* mutex);
__attribute__((visibility("default"))) int uv_cond_timedwait(uv_cond_t* cond,
                                uv_mutex_t* mutex,
                                uint64_t timeout);

__attribute__((visibility("default"))) void uv_once(uv_once_t* guard, void (*callback)(void));

__attribute__((visibility("default"))) int uv_key_create(uv_key_t* key);
__attribute__((visibility("default"))) void uv_key_delete(uv_key_t* key);
__attribute__((visibility("default"))) void* uv_key_get(uv_key_t* key);
__attribute__((visibility("default"))) void uv_key_set(uv_key_t* key, void* value);

__attribute__((visibility("default"))) int uv_gettimeofday(uv_timeval64_t* tv);

typedef void (*uv_thread_cb)(void* arg);

__attribute__((visibility("default"))) int uv_thread_create(uv_thread_t* tid, uv_thread_cb entry, void* arg);

typedef enum {
  UV_THREAD_NO_FLAGS = 0x00,
  UV_THREAD_HAS_STACK_SIZE = 0x01
} uv_thread_create_flags;

struct uv_thread_options_s {
  unsigned int flags;
  size_t stack_size;

};

typedef struct uv_thread_options_s uv_thread_options_t;

__attribute__((visibility("default"))) int uv_thread_create_ex(uv_thread_t* tid,
                                  const uv_thread_options_t* params,
                                  uv_thread_cb entry,
                                  void* arg);
__attribute__((visibility("default"))) int uv_thread_setaffinity(uv_thread_t* tid,
                                    char* cpumask,
                                    char* oldmask,
                                    size_t mask_size);
__attribute__((visibility("default"))) int uv_thread_getaffinity(uv_thread_t* tid,
                                    char* cpumask,
                                    size_t mask_size);
__attribute__((visibility("default"))) int uv_thread_getcpu(void);
__attribute__((visibility("default"))) uv_thread_t uv_thread_self(void);
__attribute__((visibility("default"))) int uv_thread_join(uv_thread_t *tid);
__attribute__((visibility("default"))) int uv_thread_equal(const uv_thread_t* t1, const uv_thread_t* t2);



union uv_any_handle {
  uv_async_t async; uv_check_t check; uv_fs_event_t fs_event; uv_fs_poll_t fs_poll; uv_handle_t handle; uv_idle_t idle; uv_pipe_t pipe; uv_poll_t poll; uv_prepare_t prepare; uv_process_t process; uv_stream_t stream; uv_tcp_t tcp; uv_timer_t timer; uv_tty_t tty; uv_udp_t udp; uv_signal_t signal;
};

union uv_any_req {
  uv_req_t req; uv_connect_t connect; uv_write_t write; uv_shutdown_t shutdown; uv_udp_send_t udp_send; uv_fs_t fs; uv_work_t work; uv_getaddrinfo_t getaddrinfo; uv_getnameinfo_t getnameinfo; uv_random_t random;
};



struct uv_loop_s {

  void* data;

  unsigned int active_handles;
  struct uv__queue handle_queue;
  union {
    void* unused;
    unsigned int count;
  } active_reqs;

  void* internal_fields;

  unsigned int stop_flag;
  unsigned long flags; int backend_fd; struct uv__queue pending_queue; struct uv__queue watcher_queue; uv__io_t** watchers; unsigned int nwatchers; unsigned int nfds; struct uv__queue wq; uv_mutex_t wq_mutex; uv_async_t wq_async; uv_rwlock_t cloexec_lock; uv_handle_t* closing_handles; struct uv__queue process_handles; struct uv__queue prepare_handles; struct uv__queue check_handles; struct uv__queue idle_handles; struct uv__queue async_handles; void (*async_unused)(void); uv__io_t async_io_watcher; int async_wfd; struct { void* min; unsigned int nelts; } timer_heap; uint64_t timer_counter; uint64_t time; int signal_pipefd[2]; uv__io_t signal_io_watcher; uv_signal_t child_watcher; int emfile_fd; uv__io_t inotify_read_watcher; void* inotify_watchers; int inotify_fd;
};

__attribute__((visibility("default"))) void* uv_loop_get_data(const uv_loop_t*);
__attribute__((visibility("default"))) void uv_loop_set_data(uv_loop_t*, void* data);


size_t uv_utf16_length_as_wtf8(const uint16_t* utf16,
                               ssize_t utf16_len);
int uv_utf16_to_wtf8(const uint16_t* utf16,
                     ssize_t utf16_len,
                     char** wtf8_ptr,
                     size_t* wtf8_len_ptr);
ssize_t uv_wtf8_length_as_utf16(const char* wtf8);
void uv_wtf8_to_utf16(const char* wtf8,
                      uint16_t* utf16,
                      size_t utf16_len);
# 17 "/home/ubuntu/neovim/src/nvim/regexp.c" 2

# 1 "/home/ubuntu/neovim/src/nvim/ascii_defs.h" 1
       



# 1 "/home/ubuntu/neovim/src/nvim/os/os_defs.h" 1
       



# 1 "/usr/include/stdlib.h" 1 3 4
# 25 "/usr/include/stdlib.h" 3 4
# 1 "/usr/include/aarch64-linux-gnu/bits/libc-header-start.h" 1 3 4
# 26 "/usr/include/stdlib.h" 2 3 4





# 1 "/usr/lib/gcc/aarch64-linux-gnu/9/include/stddef.h" 1 3 4
# 32 "/usr/include/stdlib.h" 2 3 4







# 1 "/usr/include/aarch64-linux-gnu/bits/waitflags.h" 1 3 4
# 52 "/usr/include/aarch64-linux-gnu/bits/waitflags.h" 3 4

# 52 "/usr/include/aarch64-linux-gnu/bits/waitflags.h" 3 4
typedef enum
{
  P_ALL,
  P_PID,
  P_PGID
} idtype_t;
# 40 "/usr/include/stdlib.h" 2 3 4
# 1 "/usr/include/aarch64-linux-gnu/bits/waitstatus.h" 1 3 4
# 41 "/usr/include/stdlib.h" 2 3 4
# 55 "/usr/include/stdlib.h" 3 4
# 1 "/usr/include/aarch64-linux-gnu/bits/floatn.h" 1 3 4
# 23 "/usr/include/aarch64-linux-gnu/bits/floatn.h" 3 4
# 1 "/usr/include/aarch64-linux-gnu/bits/long-double.h" 1 3 4
# 24 "/usr/include/aarch64-linux-gnu/bits/floatn.h" 2 3 4
# 95 "/usr/include/aarch64-linux-gnu/bits/floatn.h" 3 4
# 1 "/usr/include/aarch64-linux-gnu/bits/floatn-common.h" 1 3 4
# 24 "/usr/include/aarch64-linux-gnu/bits/floatn-common.h" 3 4
# 1 "/usr/include/aarch64-linux-gnu/bits/long-double.h" 1 3 4
# 25 "/usr/include/aarch64-linux-gnu/bits/floatn-common.h" 2 3 4
# 96 "/usr/include/aarch64-linux-gnu/bits/floatn.h" 2 3 4
# 56 "/usr/include/stdlib.h" 2 3 4


typedef struct
  {
    int quot;
    int rem;
  } div_t;



typedef struct
  {
    long int quot;
    long int rem;
  } ldiv_t;





__extension__ typedef struct
  {
    long long int quot;
    long long int rem;
  } lldiv_t;
# 97 "/usr/include/stdlib.h" 3 4
extern size_t __ctype_get_mb_cur_max (void) __attribute__ ((__nothrow__ , __leaf__)) ;



extern double atof (const char *__nptr)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) ;

extern int atoi (const char *__nptr)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) ;

extern long int atol (const char *__nptr)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) ;



__extension__ extern long long int atoll (const char *__nptr)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) ;



extern double strtod (const char *__restrict __nptr,
        char **__restrict __endptr)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));



extern float strtof (const char *__restrict __nptr,
       char **__restrict __endptr) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));

extern long double strtold (const char *__restrict __nptr,
       char **__restrict __endptr)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
# 140 "/usr/include/stdlib.h" 3 4
extern _Float32 strtof32 (const char *__restrict __nptr,
     char **__restrict __endptr)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));



extern _Float64 strtof64 (const char *__restrict __nptr,
     char **__restrict __endptr)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));



extern _Float128 strtof128 (const char *__restrict __nptr,
       char **__restrict __endptr)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));



extern _Float32x strtof32x (const char *__restrict __nptr,
       char **__restrict __endptr)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));



extern _Float64x strtof64x (const char *__restrict __nptr,
       char **__restrict __endptr)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
# 176 "/usr/include/stdlib.h" 3 4
extern long int strtol (const char *__restrict __nptr,
   char **__restrict __endptr, int __base)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));

extern unsigned long int strtoul (const char *__restrict __nptr,
      char **__restrict __endptr, int __base)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));



__extension__
extern long long int strtoq (const char *__restrict __nptr,
        char **__restrict __endptr, int __base)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));

__extension__
extern unsigned long long int strtouq (const char *__restrict __nptr,
           char **__restrict __endptr, int __base)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));




__extension__
extern long long int strtoll (const char *__restrict __nptr,
         char **__restrict __endptr, int __base)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));

__extension__
extern unsigned long long int strtoull (const char *__restrict __nptr,
     char **__restrict __endptr, int __base)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));




extern int strfromd (char *__dest, size_t __size, const char *__format,
       double __f)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3)));

extern int strfromf (char *__dest, size_t __size, const char *__format,
       float __f)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3)));

extern int strfroml (char *__dest, size_t __size, const char *__format,
       long double __f)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3)));
# 232 "/usr/include/stdlib.h" 3 4
extern int strfromf32 (char *__dest, size_t __size, const char * __format,
         _Float32 __f)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3)));



extern int strfromf64 (char *__dest, size_t __size, const char * __format,
         _Float64 __f)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3)));



extern int strfromf128 (char *__dest, size_t __size, const char * __format,
   _Float128 __f)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3)));



extern int strfromf32x (char *__dest, size_t __size, const char * __format,
   _Float32x __f)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3)));



extern int strfromf64x (char *__dest, size_t __size, const char * __format,
   _Float64x __f)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3)));
# 274 "/usr/include/stdlib.h" 3 4
extern long int strtol_l (const char *__restrict __nptr,
     char **__restrict __endptr, int __base,
     locale_t __loc) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 4)));

extern unsigned long int strtoul_l (const char *__restrict __nptr,
        char **__restrict __endptr,
        int __base, locale_t __loc)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 4)));

__extension__
extern long long int strtoll_l (const char *__restrict __nptr,
    char **__restrict __endptr, int __base,
    locale_t __loc)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 4)));

__extension__
extern unsigned long long int strtoull_l (const char *__restrict __nptr,
       char **__restrict __endptr,
       int __base, locale_t __loc)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 4)));

extern double strtod_l (const char *__restrict __nptr,
   char **__restrict __endptr, locale_t __loc)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 3)));

extern float strtof_l (const char *__restrict __nptr,
         char **__restrict __endptr, locale_t __loc)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 3)));

extern long double strtold_l (const char *__restrict __nptr,
         char **__restrict __endptr,
         locale_t __loc)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 3)));
# 316 "/usr/include/stdlib.h" 3 4
extern _Float32 strtof32_l (const char *__restrict __nptr,
       char **__restrict __endptr,
       locale_t __loc)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 3)));



extern _Float64 strtof64_l (const char *__restrict __nptr,
       char **__restrict __endptr,
       locale_t __loc)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 3)));



extern _Float128 strtof128_l (const char *__restrict __nptr,
         char **__restrict __endptr,
         locale_t __loc)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 3)));



extern _Float32x strtof32x_l (const char *__restrict __nptr,
         char **__restrict __endptr,
         locale_t __loc)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 3)));



extern _Float64x strtof64x_l (const char *__restrict __nptr,
         char **__restrict __endptr,
         locale_t __loc)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 3)));
# 385 "/usr/include/stdlib.h" 3 4
extern char *l64a (long int __n) __attribute__ ((__nothrow__ , __leaf__)) ;


extern long int a64l (const char *__s)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) ;
# 401 "/usr/include/stdlib.h" 3 4
extern long int random (void) __attribute__ ((__nothrow__ , __leaf__));


extern void srandom (unsigned int __seed) __attribute__ ((__nothrow__ , __leaf__));





extern char *initstate (unsigned int __seed, char *__statebuf,
   size_t __statelen) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2)));



extern char *setstate (char *__statebuf) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));







struct random_data
  {
    int32_t *fptr;
    int32_t *rptr;
    int32_t *state;
    int rand_type;
    int rand_deg;
    int rand_sep;
    int32_t *end_ptr;
  };

extern int random_r (struct random_data *__restrict __buf,
       int32_t *__restrict __result) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));

extern int srandom_r (unsigned int __seed, struct random_data *__buf)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2)));

extern int initstate_r (unsigned int __seed, char *__restrict __statebuf,
   size_t __statelen,
   struct random_data *__restrict __buf)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2, 4)));

extern int setstate_r (char *__restrict __statebuf,
         struct random_data *__restrict __buf)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));





extern int rand (void) __attribute__ ((__nothrow__ , __leaf__));

extern void srand (unsigned int __seed) __attribute__ ((__nothrow__ , __leaf__));



extern int rand_r (unsigned int *__seed) __attribute__ ((__nothrow__ , __leaf__));







extern double drand48 (void) __attribute__ ((__nothrow__ , __leaf__));
extern double erand48 (unsigned short int __xsubi[3]) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));


extern long int lrand48 (void) __attribute__ ((__nothrow__ , __leaf__));
extern long int nrand48 (unsigned short int __xsubi[3])
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));


extern long int mrand48 (void) __attribute__ ((__nothrow__ , __leaf__));
extern long int jrand48 (unsigned short int __xsubi[3])
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));


extern void srand48 (long int __seedval) __attribute__ ((__nothrow__ , __leaf__));
extern unsigned short int *seed48 (unsigned short int __seed16v[3])
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
extern void lcong48 (unsigned short int __param[7]) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));





struct drand48_data
  {
    unsigned short int __x[3];
    unsigned short int __old_x[3];
    unsigned short int __c;
    unsigned short int __init;
    __extension__ unsigned long long int __a;

  };


extern int drand48_r (struct drand48_data *__restrict __buffer,
        double *__restrict __result) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
extern int erand48_r (unsigned short int __xsubi[3],
        struct drand48_data *__restrict __buffer,
        double *__restrict __result) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));


extern int lrand48_r (struct drand48_data *__restrict __buffer,
        long int *__restrict __result)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
extern int nrand48_r (unsigned short int __xsubi[3],
        struct drand48_data *__restrict __buffer,
        long int *__restrict __result)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));


extern int mrand48_r (struct drand48_data *__restrict __buffer,
        long int *__restrict __result)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
extern int jrand48_r (unsigned short int __xsubi[3],
        struct drand48_data *__restrict __buffer,
        long int *__restrict __result)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));


extern int srand48_r (long int __seedval, struct drand48_data *__buffer)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2)));

extern int seed48_r (unsigned short int __seed16v[3],
       struct drand48_data *__buffer) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));

extern int lcong48_r (unsigned short int __param[7],
        struct drand48_data *__buffer)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));




extern void *malloc (size_t __size) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__malloc__))
     __attribute__ ((__alloc_size__ (1))) ;

extern void *calloc (size_t __nmemb, size_t __size)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__malloc__)) __attribute__ ((__alloc_size__ (1, 2))) ;






extern void *realloc (void *__ptr, size_t __size)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__)) __attribute__ ((__alloc_size__ (2)));







extern void *reallocarray (void *__ptr, size_t __nmemb, size_t __size)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__))
     __attribute__ ((__alloc_size__ (2, 3)));



extern void free (void *__ptr) __attribute__ ((__nothrow__ , __leaf__));


# 1 "/usr/include/alloca.h" 1 3 4
# 24 "/usr/include/alloca.h" 3 4
# 1 "/usr/lib/gcc/aarch64-linux-gnu/9/include/stddef.h" 1 3 4
# 25 "/usr/include/alloca.h" 2 3 4







extern void *alloca (size_t __size) __attribute__ ((__nothrow__ , __leaf__));






# 569 "/usr/include/stdlib.h" 2 3 4





extern void *valloc (size_t __size) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__malloc__))
     __attribute__ ((__alloc_size__ (1))) ;




extern int posix_memalign (void **__memptr, size_t __alignment, size_t __size)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))) ;




extern void *aligned_alloc (size_t __alignment, size_t __size)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__malloc__)) __attribute__ ((__alloc_size__ (2))) ;



extern void abort (void) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__noreturn__));



extern int atexit (void (*__func) (void)) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));







extern int at_quick_exit (void (*__func) (void)) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));






extern int on_exit (void (*__func) (int __status, void *__arg), void *__arg)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));





extern void exit (int __status) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__noreturn__));





extern void quick_exit (int __status) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__noreturn__));





extern void _Exit (int __status) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__noreturn__));




extern char *getenv (const char *__name) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))) ;




extern char *secure_getenv (const char *__name)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))) ;






extern int putenv (char *__string) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));





extern int setenv (const char *__name, const char *__value, int __replace)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2)));


extern int unsetenv (const char *__name) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));






extern int clearenv (void) __attribute__ ((__nothrow__ , __leaf__));
# 675 "/usr/include/stdlib.h" 3 4
extern char *mktemp (char *__template) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
# 688 "/usr/include/stdlib.h" 3 4
extern int mkstemp (char *__template) __attribute__ ((__nonnull__ (1))) ;
# 698 "/usr/include/stdlib.h" 3 4
extern int mkstemp64 (char *__template) __attribute__ ((__nonnull__ (1))) ;
# 710 "/usr/include/stdlib.h" 3 4
extern int mkstemps (char *__template, int __suffixlen) __attribute__ ((__nonnull__ (1))) ;
# 720 "/usr/include/stdlib.h" 3 4
extern int mkstemps64 (char *__template, int __suffixlen)
     __attribute__ ((__nonnull__ (1))) ;
# 731 "/usr/include/stdlib.h" 3 4
extern char *mkdtemp (char *__template) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))) ;
# 742 "/usr/include/stdlib.h" 3 4
extern int mkostemp (char *__template, int __flags) __attribute__ ((__nonnull__ (1))) ;
# 752 "/usr/include/stdlib.h" 3 4
extern int mkostemp64 (char *__template, int __flags) __attribute__ ((__nonnull__ (1))) ;
# 762 "/usr/include/stdlib.h" 3 4
extern int mkostemps (char *__template, int __suffixlen, int __flags)
     __attribute__ ((__nonnull__ (1))) ;
# 774 "/usr/include/stdlib.h" 3 4
extern int mkostemps64 (char *__template, int __suffixlen, int __flags)
     __attribute__ ((__nonnull__ (1))) ;
# 784 "/usr/include/stdlib.h" 3 4
extern int system (const char *__command) ;





extern char *canonicalize_file_name (const char *__name)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))) ;
# 800 "/usr/include/stdlib.h" 3 4
extern char *realpath (const char *__restrict __name,
         char *__restrict __resolved) __attribute__ ((__nothrow__ , __leaf__)) ;






typedef int (*__compar_fn_t) (const void *, const void *);


typedef __compar_fn_t comparison_fn_t;



typedef int (*__compar_d_fn_t) (const void *, const void *, void *);




extern void *bsearch (const void *__key, const void *__base,
        size_t __nmemb, size_t __size, __compar_fn_t __compar)
     __attribute__ ((__nonnull__ (1, 2, 5))) ;







extern void qsort (void *__base, size_t __nmemb, size_t __size,
     __compar_fn_t __compar) __attribute__ ((__nonnull__ (1, 4)));

extern void qsort_r (void *__base, size_t __nmemb, size_t __size,
       __compar_d_fn_t __compar, void *__arg)
  __attribute__ ((__nonnull__ (1, 4)));




extern int abs (int __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)) ;
extern long int labs (long int __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)) ;


__extension__ extern long long int llabs (long long int __x)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)) ;






extern div_t div (int __numer, int __denom)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)) ;
extern ldiv_t ldiv (long int __numer, long int __denom)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)) ;


__extension__ extern lldiv_t lldiv (long long int __numer,
        long long int __denom)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)) ;
# 872 "/usr/include/stdlib.h" 3 4
extern char *ecvt (double __value, int __ndigit, int *__restrict __decpt,
     int *__restrict __sign) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3, 4))) ;




extern char *fcvt (double __value, int __ndigit, int *__restrict __decpt,
     int *__restrict __sign) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3, 4))) ;




extern char *gcvt (double __value, int __ndigit, char *__buf)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3))) ;




extern char *qecvt (long double __value, int __ndigit,
      int *__restrict __decpt, int *__restrict __sign)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3, 4))) ;
extern char *qfcvt (long double __value, int __ndigit,
      int *__restrict __decpt, int *__restrict __sign)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3, 4))) ;
extern char *qgcvt (long double __value, int __ndigit, char *__buf)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3))) ;




extern int ecvt_r (double __value, int __ndigit, int *__restrict __decpt,
     int *__restrict __sign, char *__restrict __buf,
     size_t __len) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3, 4, 5)));
extern int fcvt_r (double __value, int __ndigit, int *__restrict __decpt,
     int *__restrict __sign, char *__restrict __buf,
     size_t __len) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3, 4, 5)));

extern int qecvt_r (long double __value, int __ndigit,
      int *__restrict __decpt, int *__restrict __sign,
      char *__restrict __buf, size_t __len)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3, 4, 5)));
extern int qfcvt_r (long double __value, int __ndigit,
      int *__restrict __decpt, int *__restrict __sign,
      char *__restrict __buf, size_t __len)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3, 4, 5)));





extern int mblen (const char *__s, size_t __n) __attribute__ ((__nothrow__ , __leaf__));


extern int mbtowc (wchar_t *__restrict __pwc,
     const char *__restrict __s, size_t __n) __attribute__ ((__nothrow__ , __leaf__));


extern int wctomb (char *__s, wchar_t __wchar) __attribute__ ((__nothrow__ , __leaf__));



extern size_t mbstowcs (wchar_t *__restrict __pwcs,
   const char *__restrict __s, size_t __n) __attribute__ ((__nothrow__ , __leaf__));

extern size_t wcstombs (char *__restrict __s,
   const wchar_t *__restrict __pwcs, size_t __n)
     __attribute__ ((__nothrow__ , __leaf__));







extern int rpmatch (const char *__response) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))) ;
# 957 "/usr/include/stdlib.h" 3 4
extern int getsubopt (char **__restrict __optionp,
        char *const *__restrict __tokens,
        char **__restrict __valuep)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2, 3))) ;







extern int posix_openpt (int __oflag) ;







extern int grantpt (int __fd) __attribute__ ((__nothrow__ , __leaf__));



extern int unlockpt (int __fd) __attribute__ ((__nothrow__ , __leaf__));




extern char *ptsname (int __fd) __attribute__ ((__nothrow__ , __leaf__)) ;






extern int ptsname_r (int __fd, char *__buf, size_t __buflen)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2)));


extern int getpt (void);






extern int getloadavg (double __loadavg[], int __nelem)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));
# 1013 "/usr/include/stdlib.h" 3 4
# 1 "/usr/include/aarch64-linux-gnu/bits/stdlib-float.h" 1 3 4
# 1014 "/usr/include/stdlib.h" 2 3 4
# 1023 "/usr/include/stdlib.h" 3 4

# 6 "/home/ubuntu/neovim/src/nvim/os/os_defs.h" 2



# 1 "/home/ubuntu/neovim/build/cmake.config/auto/config.h" 1
       
# 10 "/home/ubuntu/neovim/src/nvim/os/os_defs.h" 2
# 20 "/home/ubuntu/neovim/src/nvim/os/os_defs.h"
# 1 "/home/ubuntu/neovim/src/nvim/os/unix_defs.h" 1
       
# 11 "/home/ubuntu/neovim/src/nvim/os/unix_defs.h"
# 1 "/usr/include/unistd.h" 1 3 4
# 27 "/usr/include/unistd.h" 3 4

# 202 "/usr/include/unistd.h" 3 4
# 1 "/usr/include/aarch64-linux-gnu/bits/posix_opt.h" 1 3 4
# 203 "/usr/include/unistd.h" 2 3 4



# 1 "/usr/include/aarch64-linux-gnu/bits/environments.h" 1 3 4
# 22 "/usr/include/aarch64-linux-gnu/bits/environments.h" 3 4
# 1 "/usr/include/aarch64-linux-gnu/bits/wordsize.h" 1 3 4
# 23 "/usr/include/aarch64-linux-gnu/bits/environments.h" 2 3 4
# 207 "/usr/include/unistd.h" 2 3 4
# 226 "/usr/include/unistd.h" 3 4
# 1 "/usr/lib/gcc/aarch64-linux-gnu/9/include/stddef.h" 1 3 4
# 227 "/usr/include/unistd.h" 2 3 4
# 287 "/usr/include/unistd.h" 3 4
extern int access (const char *__name, int __type) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));




extern int euidaccess (const char *__name, int __type)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));


extern int eaccess (const char *__name, int __type)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));






extern int faccessat (int __fd, const char *__file, int __type, int __flag)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2))) ;
# 334 "/usr/include/unistd.h" 3 4
extern __off_t lseek (int __fd, __off_t __offset, int __whence) __attribute__ ((__nothrow__ , __leaf__));
# 345 "/usr/include/unistd.h" 3 4
extern __off64_t lseek64 (int __fd, __off64_t __offset, int __whence)
     __attribute__ ((__nothrow__ , __leaf__));






extern int close (int __fd);






extern ssize_t read (int __fd, void *__buf, size_t __nbytes) ;





extern ssize_t write (int __fd, const void *__buf, size_t __n) ;
# 376 "/usr/include/unistd.h" 3 4
extern ssize_t pread (int __fd, void *__buf, size_t __nbytes,
        __off_t __offset) ;






extern ssize_t pwrite (int __fd, const void *__buf, size_t __n,
         __off_t __offset) ;
# 404 "/usr/include/unistd.h" 3 4
extern ssize_t pread64 (int __fd, void *__buf, size_t __nbytes,
   __off64_t __offset) ;


extern ssize_t pwrite64 (int __fd, const void *__buf, size_t __n,
    __off64_t __offset) ;







extern int pipe (int __pipedes[2]) __attribute__ ((__nothrow__ , __leaf__)) ;




extern int pipe2 (int __pipedes[2], int __flags) __attribute__ ((__nothrow__ , __leaf__)) ;
# 432 "/usr/include/unistd.h" 3 4
extern unsigned int alarm (unsigned int __seconds) __attribute__ ((__nothrow__ , __leaf__));
# 444 "/usr/include/unistd.h" 3 4
extern unsigned int sleep (unsigned int __seconds);







extern __useconds_t ualarm (__useconds_t __value, __useconds_t __interval)
     __attribute__ ((__nothrow__ , __leaf__));






extern int usleep (__useconds_t __useconds);
# 469 "/usr/include/unistd.h" 3 4
extern int pause (void);



extern int chown (const char *__file, __uid_t __owner, __gid_t __group)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))) ;



extern int fchown (int __fd, __uid_t __owner, __gid_t __group) __attribute__ ((__nothrow__ , __leaf__)) ;




extern int lchown (const char *__file, __uid_t __owner, __gid_t __group)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))) ;






extern int fchownat (int __fd, const char *__file, __uid_t __owner,
       __gid_t __group, int __flag)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2))) ;



extern int chdir (const char *__path) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))) ;



extern int fchdir (int __fd) __attribute__ ((__nothrow__ , __leaf__)) ;
# 511 "/usr/include/unistd.h" 3 4
extern char *getcwd (char *__buf, size_t __size) __attribute__ ((__nothrow__ , __leaf__)) ;





extern char *get_current_dir_name (void) __attribute__ ((__nothrow__ , __leaf__));







extern char *getwd (char *__buf)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__deprecated__)) ;




extern int dup (int __fd) __attribute__ ((__nothrow__ , __leaf__)) ;


extern int dup2 (int __fd, int __fd2) __attribute__ ((__nothrow__ , __leaf__));




extern int dup3 (int __fd, int __fd2, int __flags) __attribute__ ((__nothrow__ , __leaf__));



extern char **__environ;

extern char **environ;





extern int execve (const char *__path, char *const __argv[],
     char *const __envp[]) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));




extern int fexecve (int __fd, char *const __argv[], char *const __envp[])
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2)));




extern int execv (const char *__path, char *const __argv[])
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));



extern int execle (const char *__path, const char *__arg, ...)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));



extern int execl (const char *__path, const char *__arg, ...)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));



extern int execvp (const char *__file, char *const __argv[])
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));




extern int execlp (const char *__file, const char *__arg, ...)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));




extern int execvpe (const char *__file, char *const __argv[],
      char *const __envp[])
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));





extern int nice (int __inc) __attribute__ ((__nothrow__ , __leaf__)) ;




extern void _exit (int __status) __attribute__ ((__noreturn__));





# 1 "/usr/include/aarch64-linux-gnu/bits/confname.h" 1 3 4
# 24 "/usr/include/aarch64-linux-gnu/bits/confname.h" 3 4
enum
  {
    _PC_LINK_MAX,

    _PC_MAX_CANON,

    _PC_MAX_INPUT,

    _PC_NAME_MAX,

    _PC_PATH_MAX,

    _PC_PIPE_BUF,

    _PC_CHOWN_RESTRICTED,

    _PC_NO_TRUNC,

    _PC_VDISABLE,

    _PC_SYNC_IO,

    _PC_ASYNC_IO,

    _PC_PRIO_IO,

    _PC_SOCK_MAXBUF,

    _PC_FILESIZEBITS,

    _PC_REC_INCR_XFER_SIZE,

    _PC_REC_MAX_XFER_SIZE,

    _PC_REC_MIN_XFER_SIZE,

    _PC_REC_XFER_ALIGN,

    _PC_ALLOC_SIZE_MIN,

    _PC_SYMLINK_MAX,

    _PC_2_SYMLINKS

  };


enum
  {
    _SC_ARG_MAX,

    _SC_CHILD_MAX,

    _SC_CLK_TCK,

    _SC_NGROUPS_MAX,

    _SC_OPEN_MAX,

    _SC_STREAM_MAX,

    _SC_TZNAME_MAX,

    _SC_JOB_CONTROL,

    _SC_SAVED_IDS,

    _SC_REALTIME_SIGNALS,

    _SC_PRIORITY_SCHEDULING,

    _SC_TIMERS,

    _SC_ASYNCHRONOUS_IO,

    _SC_PRIORITIZED_IO,

    _SC_SYNCHRONIZED_IO,

    _SC_FSYNC,

    _SC_MAPPED_FILES,

    _SC_MEMLOCK,

    _SC_MEMLOCK_RANGE,

    _SC_MEMORY_PROTECTION,

    _SC_MESSAGE_PASSING,

    _SC_SEMAPHORES,

    _SC_SHARED_MEMORY_OBJECTS,

    _SC_AIO_LISTIO_MAX,

    _SC_AIO_MAX,

    _SC_AIO_PRIO_DELTA_MAX,

    _SC_DELAYTIMER_MAX,

    _SC_MQ_OPEN_MAX,

    _SC_MQ_PRIO_MAX,

    _SC_VERSION,

    _SC_PAGESIZE,


    _SC_RTSIG_MAX,

    _SC_SEM_NSEMS_MAX,

    _SC_SEM_VALUE_MAX,

    _SC_SIGQUEUE_MAX,

    _SC_TIMER_MAX,




    _SC_BC_BASE_MAX,

    _SC_BC_DIM_MAX,

    _SC_BC_SCALE_MAX,

    _SC_BC_STRING_MAX,

    _SC_COLL_WEIGHTS_MAX,

    _SC_EQUIV_CLASS_MAX,

    _SC_EXPR_NEST_MAX,

    _SC_LINE_MAX,

    _SC_RE_DUP_MAX,

    _SC_CHARCLASS_NAME_MAX,


    _SC_2_VERSION,

    _SC_2_C_BIND,

    _SC_2_C_DEV,

    _SC_2_FORT_DEV,

    _SC_2_FORT_RUN,

    _SC_2_SW_DEV,

    _SC_2_LOCALEDEF,


    _SC_PII,

    _SC_PII_XTI,

    _SC_PII_SOCKET,

    _SC_PII_INTERNET,

    _SC_PII_OSI,

    _SC_POLL,

    _SC_SELECT,

    _SC_UIO_MAXIOV,

    _SC_IOV_MAX = _SC_UIO_MAXIOV,

    _SC_PII_INTERNET_STREAM,

    _SC_PII_INTERNET_DGRAM,

    _SC_PII_OSI_COTS,

    _SC_PII_OSI_CLTS,

    _SC_PII_OSI_M,

    _SC_T_IOV_MAX,



    _SC_THREADS,

    _SC_THREAD_SAFE_FUNCTIONS,

    _SC_GETGR_R_SIZE_MAX,

    _SC_GETPW_R_SIZE_MAX,

    _SC_LOGIN_NAME_MAX,

    _SC_TTY_NAME_MAX,

    _SC_THREAD_DESTRUCTOR_ITERATIONS,

    _SC_THREAD_KEYS_MAX,

    _SC_THREAD_STACK_MIN,

    _SC_THREAD_THREADS_MAX,

    _SC_THREAD_ATTR_STACKADDR,

    _SC_THREAD_ATTR_STACKSIZE,

    _SC_THREAD_PRIORITY_SCHEDULING,

    _SC_THREAD_PRIO_INHERIT,

    _SC_THREAD_PRIO_PROTECT,

    _SC_THREAD_PROCESS_SHARED,


    _SC_NPROCESSORS_CONF,

    _SC_NPROCESSORS_ONLN,

    _SC_PHYS_PAGES,

    _SC_AVPHYS_PAGES,

    _SC_ATEXIT_MAX,

    _SC_PASS_MAX,


    _SC_XOPEN_VERSION,

    _SC_XOPEN_XCU_VERSION,

    _SC_XOPEN_UNIX,

    _SC_XOPEN_CRYPT,

    _SC_XOPEN_ENH_I18N,

    _SC_XOPEN_SHM,


    _SC_2_CHAR_TERM,

    _SC_2_C_VERSION,

    _SC_2_UPE,


    _SC_XOPEN_XPG2,

    _SC_XOPEN_XPG3,

    _SC_XOPEN_XPG4,


    _SC_CHAR_BIT,

    _SC_CHAR_MAX,

    _SC_CHAR_MIN,

    _SC_INT_MAX,

    _SC_INT_MIN,

    _SC_LONG_BIT,

    _SC_WORD_BIT,

    _SC_MB_LEN_MAX,

    _SC_NZERO,

    _SC_SSIZE_MAX,

    _SC_SCHAR_MAX,

    _SC_SCHAR_MIN,

    _SC_SHRT_MAX,

    _SC_SHRT_MIN,

    _SC_UCHAR_MAX,

    _SC_UINT_MAX,

    _SC_ULONG_MAX,

    _SC_USHRT_MAX,


    _SC_NL_ARGMAX,

    _SC_NL_LANGMAX,

    _SC_NL_MSGMAX,

    _SC_NL_NMAX,

    _SC_NL_SETMAX,

    _SC_NL_TEXTMAX,


    _SC_XBS5_ILP32_OFF32,

    _SC_XBS5_ILP32_OFFBIG,

    _SC_XBS5_LP64_OFF64,

    _SC_XBS5_LPBIG_OFFBIG,


    _SC_XOPEN_LEGACY,

    _SC_XOPEN_REALTIME,

    _SC_XOPEN_REALTIME_THREADS,


    _SC_ADVISORY_INFO,

    _SC_BARRIERS,

    _SC_BASE,

    _SC_C_LANG_SUPPORT,

    _SC_C_LANG_SUPPORT_R,

    _SC_CLOCK_SELECTION,

    _SC_CPUTIME,

    _SC_THREAD_CPUTIME,

    _SC_DEVICE_IO,

    _SC_DEVICE_SPECIFIC,

    _SC_DEVICE_SPECIFIC_R,

    _SC_FD_MGMT,

    _SC_FIFO,

    _SC_PIPE,

    _SC_FILE_ATTRIBUTES,

    _SC_FILE_LOCKING,

    _SC_FILE_SYSTEM,

    _SC_MONOTONIC_CLOCK,

    _SC_MULTI_PROCESS,

    _SC_SINGLE_PROCESS,

    _SC_NETWORKING,

    _SC_READER_WRITER_LOCKS,

    _SC_SPIN_LOCKS,

    _SC_REGEXP,

    _SC_REGEX_VERSION,

    _SC_SHELL,

    _SC_SIGNALS,

    _SC_SPAWN,

    _SC_SPORADIC_SERVER,

    _SC_THREAD_SPORADIC_SERVER,

    _SC_SYSTEM_DATABASE,

    _SC_SYSTEM_DATABASE_R,

    _SC_TIMEOUTS,

    _SC_TYPED_MEMORY_OBJECTS,

    _SC_USER_GROUPS,

    _SC_USER_GROUPS_R,

    _SC_2_PBS,

    _SC_2_PBS_ACCOUNTING,

    _SC_2_PBS_LOCATE,

    _SC_2_PBS_MESSAGE,

    _SC_2_PBS_TRACK,

    _SC_SYMLOOP_MAX,

    _SC_STREAMS,

    _SC_2_PBS_CHECKPOINT,


    _SC_V6_ILP32_OFF32,

    _SC_V6_ILP32_OFFBIG,

    _SC_V6_LP64_OFF64,

    _SC_V6_LPBIG_OFFBIG,


    _SC_HOST_NAME_MAX,

    _SC_TRACE,

    _SC_TRACE_EVENT_FILTER,

    _SC_TRACE_INHERIT,

    _SC_TRACE_LOG,


    _SC_LEVEL1_ICACHE_SIZE,

    _SC_LEVEL1_ICACHE_ASSOC,

    _SC_LEVEL1_ICACHE_LINESIZE,

    _SC_LEVEL1_DCACHE_SIZE,

    _SC_LEVEL1_DCACHE_ASSOC,

    _SC_LEVEL1_DCACHE_LINESIZE,

    _SC_LEVEL2_CACHE_SIZE,

    _SC_LEVEL2_CACHE_ASSOC,

    _SC_LEVEL2_CACHE_LINESIZE,

    _SC_LEVEL3_CACHE_SIZE,

    _SC_LEVEL3_CACHE_ASSOC,

    _SC_LEVEL3_CACHE_LINESIZE,

    _SC_LEVEL4_CACHE_SIZE,

    _SC_LEVEL4_CACHE_ASSOC,

    _SC_LEVEL4_CACHE_LINESIZE,



    _SC_IPV6 = _SC_LEVEL1_ICACHE_SIZE + 50,

    _SC_RAW_SOCKETS,


    _SC_V7_ILP32_OFF32,

    _SC_V7_ILP32_OFFBIG,

    _SC_V7_LP64_OFF64,

    _SC_V7_LPBIG_OFFBIG,


    _SC_SS_REPL_MAX,


    _SC_TRACE_EVENT_NAME_MAX,

    _SC_TRACE_NAME_MAX,

    _SC_TRACE_SYS_MAX,

    _SC_TRACE_USER_EVENT_MAX,


    _SC_XOPEN_STREAMS,


    _SC_THREAD_ROBUST_PRIO_INHERIT,

    _SC_THREAD_ROBUST_PRIO_PROTECT

  };


enum
  {
    _CS_PATH,


    _CS_V6_WIDTH_RESTRICTED_ENVS,



    _CS_GNU_LIBC_VERSION,

    _CS_GNU_LIBPTHREAD_VERSION,


    _CS_V5_WIDTH_RESTRICTED_ENVS,



    _CS_V7_WIDTH_RESTRICTED_ENVS,



    _CS_LFS_CFLAGS = 1000,

    _CS_LFS_LDFLAGS,

    _CS_LFS_LIBS,

    _CS_LFS_LINTFLAGS,

    _CS_LFS64_CFLAGS,

    _CS_LFS64_LDFLAGS,

    _CS_LFS64_LIBS,

    _CS_LFS64_LINTFLAGS,


    _CS_XBS5_ILP32_OFF32_CFLAGS = 1100,

    _CS_XBS5_ILP32_OFF32_LDFLAGS,

    _CS_XBS5_ILP32_OFF32_LIBS,

    _CS_XBS5_ILP32_OFF32_LINTFLAGS,

    _CS_XBS5_ILP32_OFFBIG_CFLAGS,

    _CS_XBS5_ILP32_OFFBIG_LDFLAGS,

    _CS_XBS5_ILP32_OFFBIG_LIBS,

    _CS_XBS5_ILP32_OFFBIG_LINTFLAGS,

    _CS_XBS5_LP64_OFF64_CFLAGS,

    _CS_XBS5_LP64_OFF64_LDFLAGS,

    _CS_XBS5_LP64_OFF64_LIBS,

    _CS_XBS5_LP64_OFF64_LINTFLAGS,

    _CS_XBS5_LPBIG_OFFBIG_CFLAGS,

    _CS_XBS5_LPBIG_OFFBIG_LDFLAGS,

    _CS_XBS5_LPBIG_OFFBIG_LIBS,

    _CS_XBS5_LPBIG_OFFBIG_LINTFLAGS,


    _CS_POSIX_V6_ILP32_OFF32_CFLAGS,

    _CS_POSIX_V6_ILP32_OFF32_LDFLAGS,

    _CS_POSIX_V6_ILP32_OFF32_LIBS,

    _CS_POSIX_V6_ILP32_OFF32_LINTFLAGS,

    _CS_POSIX_V6_ILP32_OFFBIG_CFLAGS,

    _CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS,

    _CS_POSIX_V6_ILP32_OFFBIG_LIBS,

    _CS_POSIX_V6_ILP32_OFFBIG_LINTFLAGS,

    _CS_POSIX_V6_LP64_OFF64_CFLAGS,

    _CS_POSIX_V6_LP64_OFF64_LDFLAGS,

    _CS_POSIX_V6_LP64_OFF64_LIBS,

    _CS_POSIX_V6_LP64_OFF64_LINTFLAGS,

    _CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS,

    _CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS,

    _CS_POSIX_V6_LPBIG_OFFBIG_LIBS,

    _CS_POSIX_V6_LPBIG_OFFBIG_LINTFLAGS,


    _CS_POSIX_V7_ILP32_OFF32_CFLAGS,

    _CS_POSIX_V7_ILP32_OFF32_LDFLAGS,

    _CS_POSIX_V7_ILP32_OFF32_LIBS,

    _CS_POSIX_V7_ILP32_OFF32_LINTFLAGS,

    _CS_POSIX_V7_ILP32_OFFBIG_CFLAGS,

    _CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS,

    _CS_POSIX_V7_ILP32_OFFBIG_LIBS,

    _CS_POSIX_V7_ILP32_OFFBIG_LINTFLAGS,

    _CS_POSIX_V7_LP64_OFF64_CFLAGS,

    _CS_POSIX_V7_LP64_OFF64_LDFLAGS,

    _CS_POSIX_V7_LP64_OFF64_LIBS,

    _CS_POSIX_V7_LP64_OFF64_LINTFLAGS,

    _CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS,

    _CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS,

    _CS_POSIX_V7_LPBIG_OFFBIG_LIBS,

    _CS_POSIX_V7_LPBIG_OFFBIG_LINTFLAGS,


    _CS_V6_ENV,

    _CS_V7_ENV

  };
# 610 "/usr/include/unistd.h" 2 3 4


extern long int pathconf (const char *__path, int __name)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));


extern long int fpathconf (int __fd, int __name) __attribute__ ((__nothrow__ , __leaf__));


extern long int sysconf (int __name) __attribute__ ((__nothrow__ , __leaf__));



extern size_t confstr (int __name, char *__buf, size_t __len) __attribute__ ((__nothrow__ , __leaf__));




extern __pid_t getpid (void) __attribute__ ((__nothrow__ , __leaf__));


extern __pid_t getppid (void) __attribute__ ((__nothrow__ , __leaf__));


extern __pid_t getpgrp (void) __attribute__ ((__nothrow__ , __leaf__));


extern __pid_t __getpgid (__pid_t __pid) __attribute__ ((__nothrow__ , __leaf__));

extern __pid_t getpgid (__pid_t __pid) __attribute__ ((__nothrow__ , __leaf__));






extern int setpgid (__pid_t __pid, __pid_t __pgid) __attribute__ ((__nothrow__ , __leaf__));
# 660 "/usr/include/unistd.h" 3 4
extern int setpgrp (void) __attribute__ ((__nothrow__ , __leaf__));






extern __pid_t setsid (void) __attribute__ ((__nothrow__ , __leaf__));



extern __pid_t getsid (__pid_t __pid) __attribute__ ((__nothrow__ , __leaf__));



extern __uid_t getuid (void) __attribute__ ((__nothrow__ , __leaf__));


extern __uid_t geteuid (void) __attribute__ ((__nothrow__ , __leaf__));


extern __gid_t getgid (void) __attribute__ ((__nothrow__ , __leaf__));


extern __gid_t getegid (void) __attribute__ ((__nothrow__ , __leaf__));




extern int getgroups (int __size, __gid_t __list[]) __attribute__ ((__nothrow__ , __leaf__)) ;



extern int group_member (__gid_t __gid) __attribute__ ((__nothrow__ , __leaf__));






extern int setuid (__uid_t __uid) __attribute__ ((__nothrow__ , __leaf__)) ;




extern int setreuid (__uid_t __ruid, __uid_t __euid) __attribute__ ((__nothrow__ , __leaf__)) ;




extern int seteuid (__uid_t __uid) __attribute__ ((__nothrow__ , __leaf__)) ;






extern int setgid (__gid_t __gid) __attribute__ ((__nothrow__ , __leaf__)) ;




extern int setregid (__gid_t __rgid, __gid_t __egid) __attribute__ ((__nothrow__ , __leaf__)) ;




extern int setegid (__gid_t __gid) __attribute__ ((__nothrow__ , __leaf__)) ;





extern int getresuid (__uid_t *__ruid, __uid_t *__euid, __uid_t *__suid)
     __attribute__ ((__nothrow__ , __leaf__));



extern int getresgid (__gid_t *__rgid, __gid_t *__egid, __gid_t *__sgid)
     __attribute__ ((__nothrow__ , __leaf__));



extern int setresuid (__uid_t __ruid, __uid_t __euid, __uid_t __suid)
     __attribute__ ((__nothrow__ , __leaf__)) ;



extern int setresgid (__gid_t __rgid, __gid_t __egid, __gid_t __sgid)
     __attribute__ ((__nothrow__ , __leaf__)) ;






extern __pid_t fork (void) __attribute__ ((__nothrow__));







extern __pid_t vfork (void) __attribute__ ((__nothrow__ , __leaf__));





extern char *ttyname (int __fd) __attribute__ ((__nothrow__ , __leaf__));



extern int ttyname_r (int __fd, char *__buf, size_t __buflen)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2))) ;



extern int isatty (int __fd) __attribute__ ((__nothrow__ , __leaf__));




extern int ttyslot (void) __attribute__ ((__nothrow__ , __leaf__));




extern int link (const char *__from, const char *__to)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2))) ;




extern int linkat (int __fromfd, const char *__from, int __tofd,
     const char *__to, int __flags)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2, 4))) ;




extern int symlink (const char *__from, const char *__to)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2))) ;




extern ssize_t readlink (const char *__restrict __path,
    char *__restrict __buf, size_t __len)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2))) ;




extern int symlinkat (const char *__from, int __tofd,
        const char *__to) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 3))) ;


extern ssize_t readlinkat (int __fd, const char *__restrict __path,
      char *__restrict __buf, size_t __len)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2, 3))) ;



extern int unlink (const char *__name) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));



extern int unlinkat (int __fd, const char *__name, int __flag)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2)));



extern int rmdir (const char *__path) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));



extern __pid_t tcgetpgrp (int __fd) __attribute__ ((__nothrow__ , __leaf__));


extern int tcsetpgrp (int __fd, __pid_t __pgrp_id) __attribute__ ((__nothrow__ , __leaf__));






extern char *getlogin (void);







extern int getlogin_r (char *__name, size_t __name_len) __attribute__ ((__nonnull__ (1)));




extern int setlogin (const char *__name) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));







# 1 "/usr/include/aarch64-linux-gnu/bits/getopt_posix.h" 1 3 4
# 27 "/usr/include/aarch64-linux-gnu/bits/getopt_posix.h" 3 4
# 1 "/usr/include/aarch64-linux-gnu/bits/getopt_core.h" 1 3 4
# 28 "/usr/include/aarch64-linux-gnu/bits/getopt_core.h" 3 4








extern char *optarg;
# 50 "/usr/include/aarch64-linux-gnu/bits/getopt_core.h" 3 4
extern int optind;




extern int opterr;



extern int optopt;
# 91 "/usr/include/aarch64-linux-gnu/bits/getopt_core.h" 3 4
extern int getopt (int ___argc, char *const *___argv, const char *__shortopts)
       __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2, 3)));


# 28 "/usr/include/aarch64-linux-gnu/bits/getopt_posix.h" 2 3 4


# 49 "/usr/include/aarch64-linux-gnu/bits/getopt_posix.h" 3 4

# 870 "/usr/include/unistd.h" 2 3 4







extern int gethostname (char *__name, size_t __len) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));






extern int sethostname (const char *__name, size_t __len)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))) ;



extern int sethostid (long int __id) __attribute__ ((__nothrow__ , __leaf__)) ;





extern int getdomainname (char *__name, size_t __len)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))) ;
extern int setdomainname (const char *__name, size_t __len)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))) ;





extern int vhangup (void) __attribute__ ((__nothrow__ , __leaf__));


extern int revoke (const char *__file) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))) ;







extern int profil (unsigned short int *__sample_buffer, size_t __size,
     size_t __offset, unsigned int __scale)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1)));





extern int acct (const char *__name) __attribute__ ((__nothrow__ , __leaf__));



extern char *getusershell (void) __attribute__ ((__nothrow__ , __leaf__));
extern void endusershell (void) __attribute__ ((__nothrow__ , __leaf__));
extern void setusershell (void) __attribute__ ((__nothrow__ , __leaf__));





extern int daemon (int __nochdir, int __noclose) __attribute__ ((__nothrow__ , __leaf__)) ;






extern int chroot (const char *__path) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))) ;



extern char *getpass (const char *__prompt) __attribute__ ((__nonnull__ (1)));







extern int fsync (int __fd);





extern int syncfs (int __fd) __attribute__ ((__nothrow__ , __leaf__));






extern long int gethostid (void);


extern void sync (void) __attribute__ ((__nothrow__ , __leaf__));





extern int getpagesize (void) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__));




extern int getdtablesize (void) __attribute__ ((__nothrow__ , __leaf__));
# 991 "/usr/include/unistd.h" 3 4
extern int truncate (const char *__file, __off_t __length)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))) ;
# 1003 "/usr/include/unistd.h" 3 4
extern int truncate64 (const char *__file, __off64_t __length)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))) ;
# 1014 "/usr/include/unistd.h" 3 4
extern int ftruncate (int __fd, __off_t __length) __attribute__ ((__nothrow__ , __leaf__)) ;
# 1024 "/usr/include/unistd.h" 3 4
extern int ftruncate64 (int __fd, __off64_t __length) __attribute__ ((__nothrow__ , __leaf__)) ;
# 1035 "/usr/include/unistd.h" 3 4
extern int brk (void *__addr) __attribute__ ((__nothrow__ , __leaf__)) ;





extern void *sbrk (intptr_t __delta) __attribute__ ((__nothrow__ , __leaf__));
# 1056 "/usr/include/unistd.h" 3 4
extern long int syscall (long int __sysno, ...) __attribute__ ((__nothrow__ , __leaf__));
# 1107 "/usr/include/unistd.h" 3 4
ssize_t copy_file_range (int __infd, __off64_t *__pinoff,
    int __outfd, __off64_t *__poutoff,
    size_t __length, unsigned int __flags);





extern int fdatasync (int __fildes);
# 1124 "/usr/include/unistd.h" 3 4
extern char *crypt (const char *__key, const char *__salt)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));







extern void swab (const void *__restrict __from, void *__restrict __to,
    ssize_t __n) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2)));
# 1161 "/usr/include/unistd.h" 3 4
int getentropy (void *__buffer, size_t __length) ;
# 1170 "/usr/include/unistd.h" 3 4
# 1 "/usr/include/aarch64-linux-gnu/bits/unistd_ext.h" 1 3 4
# 34 "/usr/include/aarch64-linux-gnu/bits/unistd_ext.h" 3 4
extern __pid_t gettid (void) __attribute__ ((__nothrow__ , __leaf__));
# 1171 "/usr/include/unistd.h" 2 3 4


# 12 "/home/ubuntu/neovim/src/nvim/os/unix_defs.h" 2
# 21 "/home/ubuntu/neovim/src/nvim/os/os_defs.h" 2
# 133 "/home/ubuntu/neovim/src/nvim/os/os_defs.h"

# 133 "/home/ubuntu/neovim/src/nvim/os/os_defs.h"
typedef off_t off_T;
# 6 "/home/ubuntu/neovim/src/nvim/ascii_defs.h" 2
# 91 "/home/ubuntu/neovim/src/nvim/ascii_defs.h"
static inline 
# 91 "/home/ubuntu/neovim/src/nvim/ascii_defs.h" 3 4
             _Bool 
# 91 "/home/ubuntu/neovim/src/nvim/ascii_defs.h"
                  ascii_iswhite(int c)
  FUNC_ATTR_CONST FUNC_ATTR_ALWAYS_INLINE
{
  return c == ' ' || c == '\t';
}




static inline 
# 100 "/home/ubuntu/neovim/src/nvim/ascii_defs.h" 3 4
             _Bool 
# 100 "/home/ubuntu/neovim/src/nvim/ascii_defs.h"
                  ascii_iswhite_or_nul(int c)
  FUNC_ATTR_CONST FUNC_ATTR_ALWAYS_INLINE
{
  return ascii_iswhite(c) || c == '\000';
}
# 115 "/home/ubuntu/neovim/src/nvim/ascii_defs.h"
static inline 
# 115 "/home/ubuntu/neovim/src/nvim/ascii_defs.h" 3 4
             _Bool 
# 115 "/home/ubuntu/neovim/src/nvim/ascii_defs.h"
                  ascii_isdigit(int c)
  FUNC_ATTR_CONST FUNC_ATTR_ALWAYS_INLINE
{
  return c >= '0' && c <= '9';
}




static inline 
# 124 "/home/ubuntu/neovim/src/nvim/ascii_defs.h" 3 4
             _Bool 
# 124 "/home/ubuntu/neovim/src/nvim/ascii_defs.h"
                  ascii_isxdigit(int c)
  FUNC_ATTR_CONST FUNC_ATTR_ALWAYS_INLINE
{
  return (c >= '0' && c <= '9')
         || (c >= 'a' && c <= 'f')
         || (c >= 'A' && c <= 'F');
}




static inline 
# 135 "/home/ubuntu/neovim/src/nvim/ascii_defs.h" 3 4
             _Bool 
# 135 "/home/ubuntu/neovim/src/nvim/ascii_defs.h"
                  ascii_isident(int c)
  FUNC_ATTR_CONST FUNC_ATTR_ALWAYS_INLINE
{
  return ASCII_ISALNUM(c) || c == '_';
}




static inline 
# 144 "/home/ubuntu/neovim/src/nvim/ascii_defs.h" 3 4
             _Bool 
# 144 "/home/ubuntu/neovim/src/nvim/ascii_defs.h"
                  ascii_isbdigit(int c)
  FUNC_ATTR_CONST FUNC_ATTR_ALWAYS_INLINE
{
  return (c == '0' || c == '1');
}




static inline 
# 153 "/home/ubuntu/neovim/src/nvim/ascii_defs.h" 3 4
             _Bool 
# 153 "/home/ubuntu/neovim/src/nvim/ascii_defs.h"
                  ascii_isodigit(int c)
  FUNC_ATTR_CONST FUNC_ATTR_ALWAYS_INLINE
{
  return (c >= '0' && c <= '7');
}





static inline 
# 163 "/home/ubuntu/neovim/src/nvim/ascii_defs.h" 3 4
             _Bool 
# 163 "/home/ubuntu/neovim/src/nvim/ascii_defs.h"
                  ascii_isspace(int c)
  FUNC_ATTR_CONST FUNC_ATTR_ALWAYS_INLINE
{
  return (c >= 9 && c <= 13) || c == ' ';
}
# 19 "/home/ubuntu/neovim/src/nvim/regexp.c" 2
# 1 "/home/ubuntu/neovim/src/nvim/buffer_defs.h" 1
       





# 1 "/home/ubuntu/neovim/src/nvim/arglist_defs.h" 1
       

# 1 "/home/ubuntu/neovim/src/nvim/garray_defs.h" 1
       

# 1 "/usr/lib/gcc/aarch64-linux-gnu/9/include/stddef.h" 1 3 4
# 4 "/home/ubuntu/neovim/src/nvim/garray_defs.h" 2




typedef struct {
  int ga_len;
  int ga_maxlen;
  int ga_itemsize;
  int ga_growsize;
  void *ga_data;
} garray_T;
# 4 "/home/ubuntu/neovim/src/nvim/arglist_defs.h" 2



typedef struct {
  garray_T al_ga;
  int al_refcount;
  int id;
} alist_T;




typedef struct {
  char *ae_fname;
  int ae_fnum;
} aentry_T;
# 8 "/home/ubuntu/neovim/src/nvim/buffer_defs.h" 2
# 1 "/home/ubuntu/neovim/src/nvim/grid_defs.h" 1
       


# 1 "/usr/lib/gcc/aarch64-linux-gnu/9/include/stddef.h" 1 3 4
# 5 "/home/ubuntu/neovim/src/nvim/grid_defs.h" 2


# 1 "/home/ubuntu/neovim/src/nvim/pos_defs.h" 1
       




typedef int32_t linenr_T;




typedef int colnr_T;



enum { MAXLNUM = 0x7fffffff, };



enum { MAXCOL = 0x7fffffff, };

enum { MINLNUM = 1, };

enum { MINCOL = 1, };


typedef struct {
  linenr_T lnum;
  colnr_T col;
  colnr_T coladd;
} pos_T;


typedef struct {
  linenr_T lnum;
  colnr_T col;
} lpos_T;
# 8 "/home/ubuntu/neovim/src/nvim/grid_defs.h" 2
# 1 "/home/ubuntu/neovim/src/nvim/types_defs.h" 1
       




typedef void *vim_acl_T;



typedef uint32_t schar_T;
typedef int32_t sattr_T;

typedef int32_t sscratch_T;


typedef int handle_T;




typedef int LuaRef;


typedef double float_T;

typedef struct MsgpackRpcRequestHandler MsgpackRpcRequestHandler;

typedef union {
  float_T (*float_func)(float_T);
  const MsgpackRpcRequestHandler *api_handler;
  void *null;
} EvalFuncData;

typedef handle_T NS;

typedef uint64_t proftime_T;

typedef enum {
  kNone = -1,
  kFalse = 0,
  kTrue = 1,
} TriState;






typedef int64_t OptInt;

enum { SIGN_WIDTH = 2, };

typedef struct file_buffer buf_T;
typedef struct loop Loop;
typedef struct regprog regprog_T;
typedef struct syn_state synstate_T;
typedef struct terminal Terminal;
typedef struct window_S win_T;

typedef struct {
  uint32_t nitems;
  uint32_t nbytes;
  char data[];
} AdditionalData;
# 9 "/home/ubuntu/neovim/src/nvim/grid_defs.h" 2





enum {
  kZIndexDefaultGrid = 0,
  kZIndexFloatDefault = 50,
  kZIndexPopupMenu = 100,
  kZIndexMessages = 200,
  kZIndexCmdlinePopupMenu = 250,
};
# 48 "/home/ubuntu/neovim/src/nvim/grid_defs.h"
typedef struct ScreenGrid ScreenGrid;
struct ScreenGrid {
  handle_T handle;

  schar_T *chars;
  sattr_T *attrs;
  colnr_T *vcols;
  size_t *line_offset;



  int *dirty_col;


  int rows;
  int cols;


  
# 66 "/home/ubuntu/neovim/src/nvim/grid_defs.h" 3 4
 _Bool 
# 66 "/home/ubuntu/neovim/src/nvim/grid_defs.h"
      valid;



  
# 70 "/home/ubuntu/neovim/src/nvim/grid_defs.h" 3 4
 _Bool 
# 70 "/home/ubuntu/neovim/src/nvim/grid_defs.h"
      throttled;





  int row_offset;
  int col_offset;
  ScreenGrid *target;


  
# 81 "/home/ubuntu/neovim/src/nvim/grid_defs.h" 3 4
 _Bool 
# 81 "/home/ubuntu/neovim/src/nvim/grid_defs.h"
      blending;


  
# 84 "/home/ubuntu/neovim/src/nvim/grid_defs.h" 3 4
 _Bool 
# 84 "/home/ubuntu/neovim/src/nvim/grid_defs.h"
      focusable;


  int zindex;





  int comp_row;
  int comp_col;




  int comp_width;
  int comp_height;



  size_t comp_index;



  
# 108 "/home/ubuntu/neovim/src/nvim/grid_defs.h" 3 4
 _Bool 
# 108 "/home/ubuntu/neovim/src/nvim/grid_defs.h"
      comp_disabled;
};





typedef struct {
  int args[3];
  int icell;
  int ncells;
  int coloff;
  int cur_attr;
  int clear_width;
  
# 122 "/home/ubuntu/neovim/src/nvim/grid_defs.h" 3 4
 _Bool 
# 122 "/home/ubuntu/neovim/src/nvim/grid_defs.h"
      wrap;
} GridLineEvent;
# 9 "/home/ubuntu/neovim/src/nvim/buffer_defs.h" 2
# 1 "/home/ubuntu/neovim/src/nvim/mapping_defs.h" 1
       



# 1 "/home/ubuntu/neovim/src/nvim/eval/typval_defs.h" 1
       


# 1 "/usr/lib/gcc/aarch64-linux-gnu/9/include/limits.h" 1 3 4
# 5 "/home/ubuntu/neovim/src/nvim/eval/typval_defs.h" 2



# 1 "/home/ubuntu/neovim/src/nvim/hashtab_defs.h" 1
       

# 1 "/usr/lib/gcc/aarch64-linux-gnu/9/include/stddef.h" 1 3 4
# 4 "/home/ubuntu/neovim/src/nvim/hashtab_defs.h" 2


typedef size_t hash_T;
# 24 "/home/ubuntu/neovim/src/nvim/hashtab_defs.h"
typedef struct {

  hash_T hi_hash;







  char *hi_key;
} hashitem_T;

enum {




  HT_INIT_SIZE = 16,
};







typedef struct {
  hash_T ht_mask;

  size_t ht_used;
  size_t ht_filled;
  int ht_changed;
  int ht_locked;
  hashitem_T *ht_array;

  hashitem_T ht_smallarray[HT_INIT_SIZE];
} hashtab_T;
# 9 "/home/ubuntu/neovim/src/nvim/eval/typval_defs.h" 2
# 1 "/home/ubuntu/neovim/src/nvim/lib/queue_defs.h" 1
# 20 "/home/ubuntu/neovim/src/nvim/lib/queue_defs.h"
       

# 1 "/usr/lib/gcc/aarch64-linux-gnu/9/include/stddef.h" 1 3 4
# 23 "/home/ubuntu/neovim/src/nvim/lib/queue_defs.h" 2

typedef struct queue {
  struct queue *next;
  struct queue *prev;
} QUEUE;
# 49 "/home/ubuntu/neovim/src/nvim/lib/queue_defs.h"
static inline int QUEUE_EMPTY(const QUEUE *const q)
  FUNC_ATTR_ALWAYS_INLINE FUNC_ATTR_PURE FUNC_ATTR_WARN_UNUSED_RESULT
{
  return q == q->next;
}



static inline void QUEUE_INIT(QUEUE *const q)
  FUNC_ATTR_ALWAYS_INLINE
{
  q->next = q;
  q->prev = q;
}

static inline void QUEUE_ADD(QUEUE *const h, QUEUE *const n)
  FUNC_ATTR_ALWAYS_INLINE
{
  h->prev->next = n->next;
  n->next->prev = h->prev;
  h->prev = n->prev;
  h->prev->next = h;
}

static inline void QUEUE_INSERT_HEAD(QUEUE *const h, QUEUE *const q)
  FUNC_ATTR_ALWAYS_INLINE
{
  q->next = h->next;
  q->prev = h;
  q->next->prev = q;
  h->next = q;
}

static inline void QUEUE_INSERT_TAIL(QUEUE *const h, QUEUE *const q)
  FUNC_ATTR_ALWAYS_INLINE
{
  q->next = h;
  q->prev = h->prev;
  q->prev->next = q;
  h->prev = q;
}

static inline void QUEUE_REMOVE(QUEUE *const q)
  FUNC_ATTR_ALWAYS_INLINE
{
  q->prev->next = q->next;
  q->next->prev = q->prev;
}
# 10 "/home/ubuntu/neovim/src/nvim/eval/typval_defs.h" 2




typedef int64_t varnumber_T;
typedef uint64_t uvarnumber_T;

enum {

  DO_NOT_FREE_CNT = (0x7fffffff / 2),
};


enum ListLenSpecials {




  kListLenUnknown = -1,





  kListLenShouldKnow = -2,



  kListLenMayKnow = -3,
};
# 51 "/home/ubuntu/neovim/src/nvim/eval/typval_defs.h"
typedef struct listvar_S list_T;
typedef struct dictvar_S dict_T;
typedef struct partial_S partial_T;
typedef struct blobvar_S blob_T;

typedef struct ufunc ufunc_T;

typedef enum {
  kCallbackNone = 0,
  kCallbackFuncref,
  kCallbackPartial,
  kCallbackLua,
} CallbackType;

typedef struct {
  union {
    char *funcref;
    partial_T *partial;
    LuaRef luaref;
  } data;
  CallbackType type;
} Callback;





typedef struct {
  Callback callback;
  char *key_pattern;
  size_t key_pattern_len;
  QUEUE node;
  
# 83 "/home/ubuntu/neovim/src/nvim/eval/typval_defs.h" 3 4
 _Bool 
# 83 "/home/ubuntu/neovim/src/nvim/eval/typval_defs.h"
      busy;
  
# 84 "/home/ubuntu/neovim/src/nvim/eval/typval_defs.h" 3 4
 _Bool 
# 84 "/home/ubuntu/neovim/src/nvim/eval/typval_defs.h"
      needs_free;
} DictWatcher;


typedef enum {
  kBoolVarFalse,
  kBoolVarTrue,
} BoolVarValue;


typedef enum {
  kSpecialVarNull,
} SpecialVarValue;


typedef enum {
  VAR_UNLOCKED = 0,
  VAR_LOCKED = 1,
  VAR_FIXED = 2,
} VarLockStatus;


typedef enum {
  VAR_UNKNOWN = 0,
  VAR_NUMBER,
  VAR_STRING,
  VAR_FUNC,
  VAR_LIST,
  VAR_DICT,
  VAR_FLOAT,
  VAR_BOOL,
  VAR_SPECIAL,
  VAR_PARTIAL,
  VAR_BLOB,
} VarType;


enum {
  VAR_TYPE_NUMBER = 0,
  VAR_TYPE_STRING = 1,
  VAR_TYPE_FUNC = 2,
  VAR_TYPE_LIST = 3,
  VAR_TYPE_DICT = 4,
  VAR_TYPE_FLOAT = 5,
  VAR_TYPE_BOOL = 6,
  VAR_TYPE_SPECIAL = 7,
  VAR_TYPE_BLOB = 10,
};


typedef struct {
  VarType v_type;
  VarLockStatus v_lock;
  union typval_vval_union {
    varnumber_T v_number;
    BoolVarValue v_bool;
    SpecialVarValue v_special;
    float_T v_float;
    char *v_string;
    list_T *v_list;
    dict_T *v_dict;
    partial_T *v_partial;
    blob_T *v_blob;
  } vval;
} typval_T;
# 157 "/home/ubuntu/neovim/src/nvim/eval/typval_defs.h"
typedef enum {
  VAR_NO_SCOPE = 0,
  VAR_SCOPE = 1,
  VAR_DEF_SCOPE = 2,

} ScopeType;


typedef struct listitem_S listitem_T;

struct listitem_S {
  listitem_T *li_next;
  listitem_T *li_prev;
  typval_T li_tv;
};


typedef struct listwatch_S listwatch_T;

struct listwatch_S {
  listitem_T *lw_item;
  listwatch_T *lw_next;
};



struct listvar_S {
  listitem_T *lv_first;
  listitem_T *lv_last;
  listwatch_T *lv_watch;
  listitem_T *lv_idx_item;
  list_T *lv_copylist;
  list_T *lv_used_next;
  list_T *lv_used_prev;
  int lv_refcount;
  int lv_len;
  int lv_idx;
  int lv_copyID;
  VarLockStatus lv_lock;

  LuaRef lua_table_ref;
};


typedef struct {
  list_T sl_list;
  listitem_T sl_items[10];
} staticList10_T;
# 233 "/home/ubuntu/neovim/src/nvim/eval/typval_defs.h"
typedef struct { typval_T di_tv; uint8_t di_flags; char di_key[1]; } ScopeDictDictItem;






typedef struct { typval_T di_tv; uint8_t di_flags; char di_key[]; } dictitem_T;


typedef enum {
  DI_FLAGS_RO = 1,
  DI_FLAGS_RO_SBX = 2,
  DI_FLAGS_FIX = 4,
  DI_FLAGS_LOCK = 8,
  DI_FLAGS_ALLOC = 16,
} DictItemFlags;


struct dictvar_S {
  VarLockStatus dv_lock;
  ScopeType dv_scope;

  int dv_refcount;
  int dv_copyID;
  hashtab_T dv_hashtab;
  dict_T *dv_copydict;
  dict_T *dv_used_next;
  dict_T *dv_used_prev;
  QUEUE watchers;

  LuaRef lua_table_ref;
};


struct blobvar_S {
  garray_T bv_ga;
  int bv_refcount;
  VarLockStatus bv_lock;
};


typedef int scid_T;
# 285 "/home/ubuntu/neovim/src/nvim/eval/typval_defs.h"
typedef struct {
  scid_T sc_sid;
  int sc_seq;
  linenr_T sc_lnum;
} sctx_T;


typedef struct {
  sctx_T script_ctx;
  uint64_t channel_id;
} LastSet;

enum { MAX_FUNC_ARGS = 20, };
enum { VAR_SHORT_LEN = 20, };
enum { FIXVAR_CNT = 12, };


typedef struct funccall_S funccall_T;

struct funccall_S {
  ufunc_T *fc_func;
  int fc_linenr;
  int fc_returned;
  struct { typval_T di_tv; uint8_t di_flags; char di_key[VAR_SHORT_LEN + 1]; } fc_fixvar[FIXVAR_CNT];
  dict_T fc_l_vars;
  ScopeDictDictItem fc_l_vars_var;
  dict_T fc_l_avars;
  ScopeDictDictItem fc_l_avars_var;
  list_T fc_l_varlist;
  listitem_T fc_l_listitems[MAX_FUNC_ARGS];
  typval_T *fc_rettv;
  linenr_T fc_breakpoint;
  int fc_dbg_tick;
  int fc_level;
  garray_T fc_defer;
  proftime_T fc_prof_child;
  funccall_T *fc_caller;

  int fc_refcount;
  int fc_copyID;
  garray_T fc_ufuncs;
};


struct ufunc {
  int uf_varargs;
  int uf_flags;
  int uf_calls;
  
# 333 "/home/ubuntu/neovim/src/nvim/eval/typval_defs.h" 3 4
 _Bool 
# 333 "/home/ubuntu/neovim/src/nvim/eval/typval_defs.h"
      uf_cleared;
  garray_T uf_args;
  garray_T uf_def_args;
  garray_T uf_lines;
  int uf_profiling;
  int uf_prof_initialized;
  LuaRef uf_luaref;

  int uf_tm_count;
  proftime_T uf_tm_total;
  proftime_T uf_tm_self;
  proftime_T uf_tm_children;

  int *uf_tml_count;
  proftime_T *uf_tml_total;
  proftime_T *uf_tml_self;
  proftime_T uf_tml_start;
  proftime_T uf_tml_children;
  proftime_T uf_tml_wait;
  int uf_tml_idx;
  int uf_tml_execed;
  sctx_T uf_script_ctx;

  int uf_refcount;
  funccall_T *uf_scoped;
  char *uf_name_exp;

  char uf_name[];


};

struct partial_S {
  int pt_refcount;
  int pt_copyID;
  char *pt_name;
  ufunc_T *pt_func;
  
# 370 "/home/ubuntu/neovim/src/nvim/eval/typval_defs.h" 3 4
 _Bool 
# 370 "/home/ubuntu/neovim/src/nvim/eval/typval_defs.h"
      pt_auto;

  int pt_argc;
  typval_T *pt_argv;
  dict_T *pt_dict;
};


typedef struct ht_stack_S {
  hashtab_T *ht;
  struct ht_stack_S *prev;
} ht_stack_T;


typedef struct list_stack_S {
  list_T *list;
  struct list_stack_S *prev;
} list_stack_T;
# 6 "/home/ubuntu/neovim/src/nvim/mapping_defs.h" 2

enum { MAXMAPLEN = 50, };


typedef struct mapblock mapblock_T;
struct mapblock {
  mapblock_T *m_next;
  mapblock_T *m_alt;


  char *m_keys;
  char *m_str;
  char *m_orig_str;
  LuaRef m_luaref;
  int m_keylen;
  int m_mode;
  int m_simplified;
  int m_noremap;
  char m_silent;
  char m_nowait;
  char m_expr;
  sctx_T m_script_ctx;
  char *m_desc;
  
# 29 "/home/ubuntu/neovim/src/nvim/mapping_defs.h" 3 4
 _Bool 
# 29 "/home/ubuntu/neovim/src/nvim/mapping_defs.h"
      m_replace_keycodes;
};
# 10 "/home/ubuntu/neovim/src/nvim/buffer_defs.h" 2
# 1 "/home/ubuntu/neovim/src/nvim/marktree_defs.h" 1
       


# 1 "/usr/lib/gcc/aarch64-linux-gnu/9/include/stddef.h" 1 3 4
# 5 "/home/ubuntu/neovim/src/nvim/marktree_defs.h" 2


# 1 "/home/ubuntu/neovim/src/nvim/decoration_defs.h" 1
       



# 1 "/home/ubuntu/neovim/src/klib/kvec.h" 1
# 43 "/home/ubuntu/neovim/src/klib/kvec.h"
# 1 "/home/ubuntu/neovim/src/nvim/memory.h" 1
       






# 1 "/home/ubuntu/neovim/src/nvim/macros_defs.h" 1
       
# 9 "/home/ubuntu/neovim/src/nvim/memory.h" 2
# 1 "/home/ubuntu/neovim/src/nvim/memory_defs.h" 1
       

# 1 "/usr/lib/gcc/aarch64-linux-gnu/9/include/stddef.h" 1 3 4
# 4 "/home/ubuntu/neovim/src/nvim/memory_defs.h" 2

typedef struct consumed_blk {
  struct consumed_blk *prev;
} *ArenaMem;

typedef struct {
  char *cur_blk;
  size_t pos, size;
} Arena;
# 10 "/home/ubuntu/neovim/src/nvim/memory.h" 2


typedef void *(*MemMalloc)(size_t);


typedef void (*MemFree)(void *);


typedef void *(*MemCalloc)(size_t, size_t);


typedef void *(*MemRealloc)(void *, size_t);
# 42 "/home/ubuntu/neovim/src/nvim/memory.h"
extern size_t arena_alloc_count ;
# 44 "/home/ubuntu/neovim/src/klib/kvec.h" 2
# 170 "/home/ubuntu/neovim/src/klib/kvec.h"
static inline void *_memcpy_free(void *restrict dest, void *restrict src, size_t size)
  REAL_FATTR_NONNULL_ALL REAL_FATTR_NONNULL_RET REAL_FATTR_ALWAYS_INLINE;


static inline void *_memcpy_free(void *const restrict dest, void *const restrict src,
                                 const size_t size)
{
  memcpy(dest, src, size);
  do { void **ptr_ = (void **)&(src); xfree(*ptr_); *ptr_ = 
# 178 "/home/ubuntu/neovim/src/klib/kvec.h" 3 4
 ((void *)0)
# 178 "/home/ubuntu/neovim/src/klib/kvec.h"
 ; (void)(*ptr_); } while (0);
  return dest;
}
# 6 "/home/ubuntu/neovim/src/nvim/decoration_defs.h" 2
# 1 "/home/ubuntu/neovim/src/nvim/api/private/defs.h" 1
       
# 28 "/home/ubuntu/neovim/src/nvim/api/private/defs.h"
typedef enum {
  kErrorTypeNone = -1,
  kErrorTypeException,
  kErrorTypeValidation,
} ErrorType;

typedef enum {
  kMessageTypeUnknown = -1,

  kMessageTypeRequest = 0,
  kMessageTypeResponse = 1,
  kMessageTypeNotification = 2,
  kMessageTypeRedrawEvent = 3,
} MessageType;
# 57 "/home/ubuntu/neovim/src/nvim/api/private/defs.h"
static inline 
# 57 "/home/ubuntu/neovim/src/nvim/api/private/defs.h" 3 4
             _Bool 
# 57 "/home/ubuntu/neovim/src/nvim/api/private/defs.h"
                  is_internal_call(const uint64_t channel_id)
  FUNC_ATTR_ALWAYS_INLINE FUNC_ATTR_CONST
{
  return !!(channel_id & (((uint64_t)1) << (sizeof(uint64_t) * 8 - 1)));
}

typedef struct {
  ErrorType type;
  char *msg;
} Error;

typedef 
# 68 "/home/ubuntu/neovim/src/nvim/api/private/defs.h" 3 4
       _Bool 
# 68 "/home/ubuntu/neovim/src/nvim/api/private/defs.h"
            Boolean;
typedef int64_t Integer;
typedef double Float;







typedef struct {
  char *data;
  size_t size;
} String;

typedef handle_T Buffer;
typedef handle_T Window;
typedef handle_T Tabpage;

typedef struct object Object;
typedef struct { size_t size; size_t capacity; Object *items; } Array;

typedef struct key_value_pair KeyValuePair;
typedef struct { size_t size; size_t capacity; KeyValuePair *items; } Dictionary;

typedef struct { size_t size; size_t capacity; String *items; } StringArray;

typedef enum {
  kObjectTypeNil = 0,
  kObjectTypeBoolean,
  kObjectTypeInteger,
  kObjectTypeFloat,
  kObjectTypeString,
  kObjectTypeArray,
  kObjectTypeDictionary,
  kObjectTypeLuaRef,

  kObjectTypeBuffer,
  kObjectTypeWindow,
  kObjectTypeTabpage,
} ObjectType;

typedef enum {
  kUnpackTypeStringArray = -1,
} UnpackType;
# 122 "/home/ubuntu/neovim/src/nvim/api/private/defs.h"
struct object {
  ObjectType type;
  union {
    Boolean boolean;
    Integer integer;
    Float floating;
    String string;
    Array array;
    Dictionary dictionary;
    LuaRef luaref;
  } data;
};

struct key_value_pair {
  String key;
  Object value;
};

typedef uint64_t OptionalKeys;
typedef Integer HLGroupID;


typedef struct {
  OptionalKeys is_set_;
} OptKeySet;

typedef struct {
  char *str;
  size_t ptr_off;
  int type;
  int opt_index;
  
# 153 "/home/ubuntu/neovim/src/nvim/api/private/defs.h" 3 4
 _Bool 
# 153 "/home/ubuntu/neovim/src/nvim/api/private/defs.h"
      is_hlgroup;
} KeySetLink;

typedef KeySetLink *(*FieldHashfn)(const char *str, size_t len);
# 7 "/home/ubuntu/neovim/src/nvim/decoration_defs.h" 2




typedef struct {
  char *text;
  int hl_id;
} VirtTextChunk;

typedef struct { size_t size; size_t capacity; VirtTextChunk *items; } VirtText;



typedef enum {
  kVPosEndOfLine,
  kVPosOverlay,
  kVPosWinCol,
  kVPosRightAlign,
  kVPosInline,
} VirtTextPos;

typedef struct { size_t size; size_t capacity; struct virt_line { VirtText line; 
# 28 "/home/ubuntu/neovim/src/nvim/decoration_defs.h" 3 4
       _Bool 
# 28 "/home/ubuntu/neovim/src/nvim/decoration_defs.h"
       left_col; } *items; } VirtLines;

typedef uint16_t DecorPriority;



typedef enum {
  kHlModeUnknown,
  kHlModeReplace,
  kHlModeCombine,
  kHlModeBlend,
} HlMode;

enum {
  kSHIsSign = 1,
  kSHHlEol = 2,
  kSHUIWatched = 4,
  kSHUIWatchedOverlay = 8,
  kSHSpellOn = 16,
  kSHSpellOff = 32,
  kSHConceal = 64,
};

typedef struct {
  uint16_t flags;
  DecorPriority priority;
  int hl_id;
  schar_T conceal_char;
} DecorHighlightInline;



typedef struct {
  uint16_t flags;
  DecorPriority priority;
  int hl_id;
  schar_T text[SIGN_WIDTH];


  char *sign_name;
  int sign_add_id;
  int number_hl_id;
  int line_hl_id;
  int cursorline_hl_id;
  uint32_t next;
  const char *url;
} DecorSignHighlight;




enum {
  kVTIsLines = 1,
  kVTHide = 2,
  kVTLinesAbove = 4,
  kVTRepeatLinebreak = 8,
};

typedef struct DecorVirtText DecorVirtText;
struct DecorVirtText {
  uint8_t flags;
  uint8_t hl_mode;
  DecorPriority priority;
  int width;
  int col;
  VirtTextPos pos;

  union {
    VirtText virt_text;
    VirtLines virt_lines;
  } data;
  DecorVirtText *next;
};





typedef struct {
  uint32_t sh_idx;
  DecorVirtText *vt;
} DecorExt;


typedef union {
  DecorHighlightInline hl;
  DecorExt ext;
} DecorInlineData;





typedef struct {
  
# 122 "/home/ubuntu/neovim/src/nvim/decoration_defs.h" 3 4
 _Bool 
# 122 "/home/ubuntu/neovim/src/nvim/decoration_defs.h"
      ext;
  DecorInlineData data;
} DecorInline;




typedef struct {
  NS ns_id;

  enum {
    kDecorProviderActive = 1,
    kDecorProviderWinDisabled = 2,
    kDecorProviderRedrawDisabled = 3,
    kDecorProviderDisabled = 4,
  } state;

  LuaRef redraw_start;
  LuaRef redraw_buf;
  LuaRef redraw_win;
  LuaRef redraw_line;
  LuaRef redraw_end;
  LuaRef hl_def;
  LuaRef spell_nav;
  int hl_valid;
  
# 147 "/home/ubuntu/neovim/src/nvim/decoration_defs.h" 3 4
 _Bool 
# 147 "/home/ubuntu/neovim/src/nvim/decoration_defs.h"
      hl_cached;

  uint8_t error_count;
} DecorProvider;
# 8 "/home/ubuntu/neovim/src/nvim/marktree_defs.h" 2
# 1 "/home/ubuntu/neovim/src/nvim/map_defs.h" 1
       






# 1 "/home/ubuntu/neovim/src/nvim/assert_defs.h" 1
       


# 1 "/home/ubuntu/neovim/src/nvim/log.h" 1
       
# 21 "/home/ubuntu/neovim/src/nvim/log.h"
# 1 "/usr/lib/gcc/aarch64-linux-gnu/9/include/sanitizer/asan_interface.h" 1 3 4
# 15 "/usr/lib/gcc/aarch64-linux-gnu/9/include/sanitizer/asan_interface.h" 3 4
# 1 "/usr/lib/gcc/aarch64-linux-gnu/9/include/sanitizer/common_interface_defs.h" 1 3 4
# 14 "/usr/lib/gcc/aarch64-linux-gnu/9/include/sanitizer/common_interface_defs.h" 3 4
# 1 "/usr/lib/gcc/aarch64-linux-gnu/9/include/stddef.h" 1 3 4
# 15 "/usr/lib/gcc/aarch64-linux-gnu/9/include/sanitizer/common_interface_defs.h" 2 3 4
# 26 "/usr/lib/gcc/aarch64-linux-gnu/9/include/sanitizer/common_interface_defs.h" 3 4
  
# 26 "/usr/lib/gcc/aarch64-linux-gnu/9/include/sanitizer/common_interface_defs.h" 3 4
 typedef struct {

    int coverage_sandboxed;



    intptr_t coverage_fd;




    unsigned int coverage_max_block_size;
  } __sanitizer_sandbox_arguments;


  void __sanitizer_set_report_path(const char *path);


  void __sanitizer_set_report_fd(void *fd);




  void __sanitizer_sandbox_on_notify(__sanitizer_sandbox_arguments *args);




  void __sanitizer_report_error_summary(const char *error_summary);




  uint16_t __sanitizer_unaligned_load16(const void *p);
  uint32_t __sanitizer_unaligned_load32(const void *p);
  uint64_t __sanitizer_unaligned_load64(const void *p);
  void __sanitizer_unaligned_store16(void *p, uint16_t x);
  void __sanitizer_unaligned_store32(void *p, uint32_t x);
  void __sanitizer_unaligned_store64(void *p, uint64_t x);




  int __sanitizer_acquire_crash_state();
# 101 "/usr/lib/gcc/aarch64-linux-gnu/9/include/sanitizer/common_interface_defs.h" 3 4
  void __sanitizer_annotate_contiguous_container(const void *beg,
                                                 const void *end,
                                                 const void *old_mid,
                                                 const void *new_mid);






  int __sanitizer_verify_contiguous_container(const void *beg, const void *mid,
                                              const void *end);




  const void *__sanitizer_contiguous_container_find_bad_address(
      const void *beg, const void *mid, const void *end);


  void __sanitizer_print_stack_trace(void);
# 133 "/usr/lib/gcc/aarch64-linux-gnu/9/include/sanitizer/common_interface_defs.h" 3 4
  void __sanitizer_symbolize_pc(void *pc, const char *fmt, char *out_buf,
                                size_t out_buf_size);

  void __sanitizer_symbolize_global(void *data_ptr, const char *fmt,
                                    char *out_buf, size_t out_buf_size);



  void __sanitizer_set_death_callback(void (*callback)(void));







  void __sanitizer_weak_hook_memcmp(void *called_pc, const void *s1,
                                    const void *s2, size_t n, int result);
  void __sanitizer_weak_hook_strncmp(void *called_pc, const char *s1,
                                    const char *s2, size_t n, int result);
  void __sanitizer_weak_hook_strncasecmp(void *called_pc, const char *s1,
                                         const char *s2, size_t n, int result);
  void __sanitizer_weak_hook_strcmp(void *called_pc, const char *s1,
                                    const char *s2, int result);
  void __sanitizer_weak_hook_strcasecmp(void *called_pc, const char *s1,
                                        const char *s2, int result);
  void __sanitizer_weak_hook_strstr(void *called_pc, const char *s1,
                                    const char *s2, char *result);
  void __sanitizer_weak_hook_strcasestr(void *called_pc, const char *s1,
                                        const char *s2, char *result);
  void __sanitizer_weak_hook_memmem(void *called_pc,
                                    const void *s1, size_t len1,
                                    const void *s2, size_t len2, void *result);






  void __sanitizer_print_memory_profile(size_t top_percent,
                                        size_t max_number_of_contexts);
# 191 "/usr/lib/gcc/aarch64-linux-gnu/9/include/sanitizer/common_interface_defs.h" 3 4
  void __sanitizer_start_switch_fiber(void **fake_stack_save,
                                      const void *bottom, size_t size);
  void __sanitizer_finish_switch_fiber(void *fake_stack_save,
                                       const void **bottom_old,
                                       size_t *size_old);



  int __sanitizer_get_module_and_offset_for_pc(void *pc, char *module_path,
                                               size_t module_path_len,
                                               void **pc_offset);
# 16 "/usr/lib/gcc/aarch64-linux-gnu/9/include/sanitizer/asan_interface.h" 2 3 4
# 28 "/usr/lib/gcc/aarch64-linux-gnu/9/include/sanitizer/asan_interface.h" 3 4
  void __asan_poison_memory_region(void const volatile *addr, size_t size);







  void __asan_unpoison_memory_region(void const volatile *addr, size_t size);
# 54 "/usr/lib/gcc/aarch64-linux-gnu/9/include/sanitizer/asan_interface.h" 3 4
  int __asan_address_is_poisoned(void const volatile *addr);



  void *__asan_region_is_poisoned(void *beg, size_t size);


  void __asan_describe_address(void *addr);



  int __asan_report_present(void);





  void *__asan_get_report_pc(void);
  void *__asan_get_report_bp(void);
  void *__asan_get_report_sp(void);
  void *__asan_get_report_address(void);
  int __asan_get_report_access_type(void);
  size_t __asan_get_report_access_size(void);
  const char *__asan_get_report_description(void);
# 86 "/usr/lib/gcc/aarch64-linux-gnu/9/include/sanitizer/asan_interface.h" 3 4
  const char *__asan_locate_address(void *addr, char *name, size_t name_size,
                                    void **region_address, size_t *region_size);




  size_t __asan_get_alloc_stack(void *addr, void **trace, size_t size,
                                int *thread_id);




  size_t __asan_get_free_stack(void *addr, void **trace, size_t size,
                               int *thread_id);



  void __asan_get_shadow_mapping(size_t *shadow_scale, size_t *shadow_offset);




  void __asan_report_error(void *pc, void *bp, void *sp,
                           void *addr, int is_write, size_t access_size);


  void __asan_set_death_callback(void (*callback)(void));

  void __asan_set_error_report_callback(void (*callback)(const char*));




  void __asan_on_error(void);


  void __asan_print_accumulated_stats(void);



  const char* __asan_default_options(void);






  void *__asan_get_current_fake_stack(void);
# 142 "/usr/lib/gcc/aarch64-linux-gnu/9/include/sanitizer/asan_interface.h" 3 4
  void *__asan_addr_is_in_fake_stack(void *fake_stack, void *addr, void **beg,
                                     void **end);



  void __asan_handle_no_return(void);
# 22 "/home/ubuntu/neovim/src/nvim/log.h" 2
# 5 "/home/ubuntu/neovim/src/nvim/assert_defs.h" 2
# 9 "/home/ubuntu/neovim/src/nvim/map_defs.h" 2
# 1 "/home/ubuntu/neovim/src/nvim/highlight_defs.h" 1
       







# 8 "/home/ubuntu/neovim/src/nvim/highlight_defs.h"
typedef int32_t RgbValue;




typedef enum {
  HL_INVERSE = 0x01,
  HL_BOLD = 0x02,
  HL_ITALIC = 0x04,

  HL_UNDERLINE_MASK = 0x38,
  HL_UNDERLINE = 0x08,
  HL_UNDERCURL = 0x10,
  HL_UNDERDOUBLE = 0x18,
  HL_UNDERDOTTED = 0x20,
  HL_UNDERDASHED = 0x28,

  HL_STANDOUT = 0x0040,
  HL_STRIKETHROUGH = 0x0080,
  HL_ALTFONT = 0x0100,

  HL_NOCOMBINE = 0x0400,
  HL_BG_INDEXED = 0x0800,
  HL_FG_INDEXED = 0x1000,
  HL_DEFAULT = 0x2000,
  HL_GLOBAL = 0x4000,
} HlAttrFlags;



typedef struct {
  int16_t rgb_ae_attr, cterm_ae_attr;
  RgbValue rgb_fg_color, rgb_bg_color, rgb_sp_color;
  int16_t cterm_fg_color, cterm_bg_color;
  int32_t hl_blend;
  int32_t url;
} HlAttrs;
# 60 "/home/ubuntu/neovim/src/nvim/highlight_defs.h"
typedef enum {
  HLF_8 = 0,

  HLF_EOB,
  HLF_TERM,
  HLF_TERMNC,
  HLF_AT,
  HLF_D,
  HLF_E,
  HLF_I,
  HLF_L,
  HLF_LC,
  HLF_M,
  HLF_CM,
  HLF_N,
  HLF_LNA,
  HLF_LNB,
  HLF_CLN,
  HLF_CLS,
  HLF_CLF,
  HLF_R,
  HLF_S,
  HLF_SNC,
  HLF_C,
  HLF_VSP,
  HLF_T,
  HLF_V,
  HLF_VNC,
  HLF_W,
  HLF_WM,
  HLF_FL,
  HLF_FC,
  HLF_ADD,
  HLF_CHD,
  HLF_DED,
  HLF_TXD,
  HLF_SC,
  HLF_CONCEAL,
  HLF_SPB,
  HLF_SPC,
  HLF_SPR,
  HLF_SPL,
  HLF_PNI,
  HLF_PSI,
  HLF_PMNI,
  HLF_PMSI,
  HLF_PNK,
  HLF_PSK,
  HLF_PNX,
  HLF_PSX,
  HLF_PSB,
  HLF_PST,
  HLF_TP,
  HLF_TPS,
  HLF_TPF,
  HLF_CUC,
  HLF_CUL,
  HLF_MC,
  HLF_QFL,
  HLF_0,
  HLF_INACTIVE,
  HLF_MSGSEP,
  HLF_NFLOAT,
  HLF_MSG,
  HLF_BORDER,
  HLF_WBR,
  HLF_WBRNC,
  HLF_CU,
  HLF_BTITLE,
  HLF_BFOOTER,
  HLF_TS,
  HLF_TSNC,
  HLF_COUNT,
} hlf_T;

typedef enum {
  kHlUnknown,
  kHlUI,
  kHlSyntax,
  kHlTerminal,
  kHlCombine,
  kHlBlend,
  kHlBlendThrough,
  kHlInvalid,
} HlKind;

typedef struct {
  HlAttrs attr;
  HlKind kind;
  int id1;
  int id2;
  int winid;
} HlEntry;

typedef struct {
  int ns_id;
  int syn_id;
} ColorKey;


typedef struct {
  int attr_id;
  int link_id;
  int version;
  
# 164 "/home/ubuntu/neovim/src/nvim/highlight_defs.h" 3 4
 _Bool 
# 164 "/home/ubuntu/neovim/src/nvim/highlight_defs.h"
      is_default;
  
# 165 "/home/ubuntu/neovim/src/nvim/highlight_defs.h" 3 4
 _Bool 
# 165 "/home/ubuntu/neovim/src/nvim/highlight_defs.h"
      link_global;
} ColorItem;



enum { HLATTRS_DICT_SIZE = 16, };
# 10 "/home/ubuntu/neovim/src/nvim/map_defs.h" 2







typedef const char *cstr_t;
typedef void *ptr_t;



static inline uint32_t hash_String(String s)
{
  uint32_t h = 0;
  for (size_t i = 0; i < s.size; i++) {
    h = (h << 5) - h + (uint8_t)s.data[i];
  }
  return h;
}

static inline 
# 31 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
             _Bool 
# 31 "/home/ubuntu/neovim/src/nvim/map_defs.h"
                  equal_String(String a, String b)
{
  if (a.size != b.size) {
    return 
# 34 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
          0
# 34 "/home/ubuntu/neovim/src/nvim/map_defs.h"
               ;
  }

  return (a.size == 0) || (memcmp(a.data, b.data, a.size) == 0);
}





static const int value_init_int = 0;
static const ptr_t value_init_ptr_t = 
# 45 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
                                     ((void *)0)
# 45 "/home/ubuntu/neovim/src/nvim/map_defs.h"
                                         ;
static const ssize_t value_init_ssize_t = -1;
static const uint32_t value_init_uint32_t = 0;
static const uint64_t value_init_uint64_t = 0;
static const int64_t value_init_int64_t = 0;
static const String value_init_String = { .data = 
# 50 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
                                       ((void *)0)
# 50 "/home/ubuntu/neovim/src/nvim/map_defs.h"
                                       , .size = 0 };
static const ColorItem value_init_ColorItem = { .attr_id = -1, .link_id = -1, .version = -1, .is_default = 
# 51 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
                                             0
# 51 "/home/ubuntu/neovim/src/nvim/map_defs.h"
                                             , .link_global = 
# 51 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
                                             0 
# 51 "/home/ubuntu/neovim/src/nvim/map_defs.h"
                                             };



typedef struct {
  uint32_t n_buckets;
  uint32_t size;
  uint32_t n_occupied;
  uint32_t upper_bound;
  uint32_t n_keys;
  uint32_t keys_capacity;
  uint32_t *hash;
} MapHash;
# 75 "/home/ubuntu/neovim/src/nvim/map_defs.h"
typedef enum {
  kMHExisting = 0,
  kMHNewKeyDidFit,
  kMHNewKeyRealloc,
} MHPutStatus;

void mh_clear(MapHash *h);
void mh_realloc(MapHash *h, uint32_t n_min_buckets);
# 144 "/home/ubuntu/neovim/src/nvim/map_defs.h"
typedef struct { MapHash h; char *keys; } Set_glyph; uint32_t mh_find_bucket_glyph(Set_glyph *set, String key, 
# 144 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
_Bool 
# 144 "/home/ubuntu/neovim/src/nvim/map_defs.h"
put); uint32_t mh_get_glyph(Set_glyph *set, String key); void mh_rehash_glyph(Set_glyph *set); uint32_t mh_put_glyph(Set_glyph *set, String key, MHPutStatus *new);
typedef struct { MapHash h; int *keys; } Set_int; uint32_t mh_find_bucket_int(Set_int *set, int key, 
# 145 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
_Bool 
# 145 "/home/ubuntu/neovim/src/nvim/map_defs.h"
put); uint32_t mh_get_int(Set_int *set, int key); void mh_rehash_int(Set_int *set); uint32_t mh_put_int(Set_int *set, int key, MHPutStatus *new); uint32_t mh_delete_int(Set_int *set, int *key); static inline 
# 145 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
_Bool 
# 145 "/home/ubuntu/neovim/src/nvim/map_defs.h"
set_put_int(Set_int *set, int key, int **key_alloc) { MHPutStatus status; uint32_t k = mh_put_int(set, key, &status); if (key_alloc) { *key_alloc = &set->keys[k]; } return status != kMHExisting; } static inline int set_del_int(Set_int *set, int key) { mh_delete_int(set, &key); return key; } static inline 
# 145 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
_Bool 
# 145 "/home/ubuntu/neovim/src/nvim/map_defs.h"
set_has_int(Set_int *set, int key) { return mh_get_int(set, key) != 
# 145 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
(4294967295U)
# 145 "/home/ubuntu/neovim/src/nvim/map_defs.h"
; }
typedef struct { MapHash h; cstr_t *keys; } Set_cstr_t; uint32_t mh_find_bucket_cstr_t(Set_cstr_t *set, cstr_t key, 
# 146 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
_Bool 
# 146 "/home/ubuntu/neovim/src/nvim/map_defs.h"
put); uint32_t mh_get_cstr_t(Set_cstr_t *set, cstr_t key); void mh_rehash_cstr_t(Set_cstr_t *set); uint32_t mh_put_cstr_t(Set_cstr_t *set, cstr_t key, MHPutStatus *new); uint32_t mh_delete_cstr_t(Set_cstr_t *set, cstr_t *key); static inline 
# 146 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
_Bool 
# 146 "/home/ubuntu/neovim/src/nvim/map_defs.h"
set_put_cstr_t(Set_cstr_t *set, cstr_t key, cstr_t **key_alloc) { MHPutStatus status; uint32_t k = mh_put_cstr_t(set, key, &status); if (key_alloc) { *key_alloc = &set->keys[k]; } return status != kMHExisting; } static inline cstr_t set_del_cstr_t(Set_cstr_t *set, cstr_t key) { mh_delete_cstr_t(set, &key); return key; } static inline 
# 146 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
_Bool 
# 146 "/home/ubuntu/neovim/src/nvim/map_defs.h"
set_has_cstr_t(Set_cstr_t *set, cstr_t key) { return mh_get_cstr_t(set, key) != 
# 146 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
(4294967295U)
# 146 "/home/ubuntu/neovim/src/nvim/map_defs.h"
; }
typedef struct { MapHash h; ptr_t *keys; } Set_ptr_t; uint32_t mh_find_bucket_ptr_t(Set_ptr_t *set, ptr_t key, 
# 147 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
_Bool 
# 147 "/home/ubuntu/neovim/src/nvim/map_defs.h"
put); uint32_t mh_get_ptr_t(Set_ptr_t *set, ptr_t key); void mh_rehash_ptr_t(Set_ptr_t *set); uint32_t mh_put_ptr_t(Set_ptr_t *set, ptr_t key, MHPutStatus *new); uint32_t mh_delete_ptr_t(Set_ptr_t *set, ptr_t *key); static inline 
# 147 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
_Bool 
# 147 "/home/ubuntu/neovim/src/nvim/map_defs.h"
set_put_ptr_t(Set_ptr_t *set, ptr_t key, ptr_t **key_alloc) { MHPutStatus status; uint32_t k = mh_put_ptr_t(set, key, &status); if (key_alloc) { *key_alloc = &set->keys[k]; } return status != kMHExisting; } static inline ptr_t set_del_ptr_t(Set_ptr_t *set, ptr_t key) { mh_delete_ptr_t(set, &key); return key; } static inline 
# 147 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
_Bool 
# 147 "/home/ubuntu/neovim/src/nvim/map_defs.h"
set_has_ptr_t(Set_ptr_t *set, ptr_t key) { return mh_get_ptr_t(set, key) != 
# 147 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
(4294967295U)
# 147 "/home/ubuntu/neovim/src/nvim/map_defs.h"
; }
typedef struct { MapHash h; uint64_t *keys; } Set_uint64_t; uint32_t mh_find_bucket_uint64_t(Set_uint64_t *set, uint64_t key, 
# 148 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
_Bool 
# 148 "/home/ubuntu/neovim/src/nvim/map_defs.h"
put); uint32_t mh_get_uint64_t(Set_uint64_t *set, uint64_t key); void mh_rehash_uint64_t(Set_uint64_t *set); uint32_t mh_put_uint64_t(Set_uint64_t *set, uint64_t key, MHPutStatus *new); uint32_t mh_delete_uint64_t(Set_uint64_t *set, uint64_t *key); static inline 
# 148 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
_Bool 
# 148 "/home/ubuntu/neovim/src/nvim/map_defs.h"
set_put_uint64_t(Set_uint64_t *set, uint64_t key, uint64_t **key_alloc) { MHPutStatus status; uint32_t k = mh_put_uint64_t(set, key, &status); if (key_alloc) { *key_alloc = &set->keys[k]; } return status != kMHExisting; } static inline uint64_t set_del_uint64_t(Set_uint64_t *set, uint64_t key) { mh_delete_uint64_t(set, &key); return key; } static inline 
# 148 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
_Bool 
# 148 "/home/ubuntu/neovim/src/nvim/map_defs.h"
set_has_uint64_t(Set_uint64_t *set, uint64_t key) { return mh_get_uint64_t(set, key) != 
# 148 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
(4294967295U)
# 148 "/home/ubuntu/neovim/src/nvim/map_defs.h"
; }
typedef struct { MapHash h; int64_t *keys; } Set_int64_t; uint32_t mh_find_bucket_int64_t(Set_int64_t *set, int64_t key, 
# 149 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
_Bool 
# 149 "/home/ubuntu/neovim/src/nvim/map_defs.h"
put); uint32_t mh_get_int64_t(Set_int64_t *set, int64_t key); void mh_rehash_int64_t(Set_int64_t *set); uint32_t mh_put_int64_t(Set_int64_t *set, int64_t key, MHPutStatus *new); uint32_t mh_delete_int64_t(Set_int64_t *set, int64_t *key); static inline 
# 149 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
_Bool 
# 149 "/home/ubuntu/neovim/src/nvim/map_defs.h"
set_put_int64_t(Set_int64_t *set, int64_t key, int64_t **key_alloc) { MHPutStatus status; uint32_t k = mh_put_int64_t(set, key, &status); if (key_alloc) { *key_alloc = &set->keys[k]; } return status != kMHExisting; } static inline int64_t set_del_int64_t(Set_int64_t *set, int64_t key) { mh_delete_int64_t(set, &key); return key; } static inline 
# 149 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
_Bool 
# 149 "/home/ubuntu/neovim/src/nvim/map_defs.h"
set_has_int64_t(Set_int64_t *set, int64_t key) { return mh_get_int64_t(set, key) != 
# 149 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
(4294967295U)
# 149 "/home/ubuntu/neovim/src/nvim/map_defs.h"
; }
typedef struct { MapHash h; uint32_t *keys; } Set_uint32_t; uint32_t mh_find_bucket_uint32_t(Set_uint32_t *set, uint32_t key, 
# 150 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
_Bool 
# 150 "/home/ubuntu/neovim/src/nvim/map_defs.h"
put); uint32_t mh_get_uint32_t(Set_uint32_t *set, uint32_t key); void mh_rehash_uint32_t(Set_uint32_t *set); uint32_t mh_put_uint32_t(Set_uint32_t *set, uint32_t key, MHPutStatus *new); uint32_t mh_delete_uint32_t(Set_uint32_t *set, uint32_t *key); static inline 
# 150 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
_Bool 
# 150 "/home/ubuntu/neovim/src/nvim/map_defs.h"
set_put_uint32_t(Set_uint32_t *set, uint32_t key, uint32_t **key_alloc) { MHPutStatus status; uint32_t k = mh_put_uint32_t(set, key, &status); if (key_alloc) { *key_alloc = &set->keys[k]; } return status != kMHExisting; } static inline uint32_t set_del_uint32_t(Set_uint32_t *set, uint32_t key) { mh_delete_uint32_t(set, &key); return key; } static inline 
# 150 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
_Bool 
# 150 "/home/ubuntu/neovim/src/nvim/map_defs.h"
set_has_uint32_t(Set_uint32_t *set, uint32_t key) { return mh_get_uint32_t(set, key) != 
# 150 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
(4294967295U)
# 150 "/home/ubuntu/neovim/src/nvim/map_defs.h"
; }
typedef struct { MapHash h; String *keys; } Set_String; uint32_t mh_find_bucket_String(Set_String *set, String key, 
# 151 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
_Bool 
# 151 "/home/ubuntu/neovim/src/nvim/map_defs.h"
put); uint32_t mh_get_String(Set_String *set, String key); void mh_rehash_String(Set_String *set); uint32_t mh_put_String(Set_String *set, String key, MHPutStatus *new); uint32_t mh_delete_String(Set_String *set, String *key); static inline 
# 151 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
_Bool 
# 151 "/home/ubuntu/neovim/src/nvim/map_defs.h"
set_put_String(Set_String *set, String key, String **key_alloc) { MHPutStatus status; uint32_t k = mh_put_String(set, key, &status); if (key_alloc) { *key_alloc = &set->keys[k]; } return status != kMHExisting; } static inline String set_del_String(Set_String *set, String key) { mh_delete_String(set, &key); return key; } static inline 
# 151 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
_Bool 
# 151 "/home/ubuntu/neovim/src/nvim/map_defs.h"
set_has_String(Set_String *set, String key) { return mh_get_String(set, key) != 
# 151 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
(4294967295U)
# 151 "/home/ubuntu/neovim/src/nvim/map_defs.h"
; }
typedef struct { MapHash h; HlEntry *keys; } Set_HlEntry; uint32_t mh_find_bucket_HlEntry(Set_HlEntry *set, HlEntry key, 
# 152 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
_Bool 
# 152 "/home/ubuntu/neovim/src/nvim/map_defs.h"
put); uint32_t mh_get_HlEntry(Set_HlEntry *set, HlEntry key); void mh_rehash_HlEntry(Set_HlEntry *set); uint32_t mh_put_HlEntry(Set_HlEntry *set, HlEntry key, MHPutStatus *new); uint32_t mh_delete_HlEntry(Set_HlEntry *set, HlEntry *key); static inline 
# 152 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
_Bool 
# 152 "/home/ubuntu/neovim/src/nvim/map_defs.h"
set_put_HlEntry(Set_HlEntry *set, HlEntry key, HlEntry **key_alloc) { MHPutStatus status; uint32_t k = mh_put_HlEntry(set, key, &status); if (key_alloc) { *key_alloc = &set->keys[k]; } return status != kMHExisting; } static inline HlEntry set_del_HlEntry(Set_HlEntry *set, HlEntry key) { mh_delete_HlEntry(set, &key); return key; } static inline 
# 152 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
_Bool 
# 152 "/home/ubuntu/neovim/src/nvim/map_defs.h"
set_has_HlEntry(Set_HlEntry *set, HlEntry key) { return mh_get_HlEntry(set, key) != 
# 152 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
(4294967295U)
# 152 "/home/ubuntu/neovim/src/nvim/map_defs.h"
; }
typedef struct { MapHash h; ColorKey *keys; } Set_ColorKey; uint32_t mh_find_bucket_ColorKey(Set_ColorKey *set, ColorKey key, 
# 153 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
_Bool 
# 153 "/home/ubuntu/neovim/src/nvim/map_defs.h"
put); uint32_t mh_get_ColorKey(Set_ColorKey *set, ColorKey key); void mh_rehash_ColorKey(Set_ColorKey *set); uint32_t mh_put_ColorKey(Set_ColorKey *set, ColorKey key, MHPutStatus *new); uint32_t mh_delete_ColorKey(Set_ColorKey *set, ColorKey *key); static inline 
# 153 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
_Bool 
# 153 "/home/ubuntu/neovim/src/nvim/map_defs.h"
set_put_ColorKey(Set_ColorKey *set, ColorKey key, ColorKey **key_alloc) { MHPutStatus status; uint32_t k = mh_put_ColorKey(set, key, &status); if (key_alloc) { *key_alloc = &set->keys[k]; } return status != kMHExisting; } static inline ColorKey set_del_ColorKey(Set_ColorKey *set, ColorKey key) { mh_delete_ColorKey(set, &key); return key; } static inline 
# 153 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
_Bool 
# 153 "/home/ubuntu/neovim/src/nvim/map_defs.h"
set_has_ColorKey(Set_ColorKey *set, ColorKey key) { return mh_get_ColorKey(set, key) != 
# 153 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
(4294967295U)
# 153 "/home/ubuntu/neovim/src/nvim/map_defs.h"
; }

typedef struct { Set_int set; int *values; } Map_intint; static inline int map_get_intint(Map_intint *map, int key) { uint32_t k = mh_get_int(&map->set, key); return k == 
# 155 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
(4294967295U) 
# 155 "/home/ubuntu/neovim/src/nvim/map_defs.h"
? value_init_int : map->values[k]; } int *map_ref_intint(Map_intint *map, int key, int **key_alloc); int *map_put_ref_intint(Map_intint *map, int key, int **key_alloc, 
# 155 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
_Bool 
# 155 "/home/ubuntu/neovim/src/nvim/map_defs.h"
*new_item); static inline void map_put_intint(Map_intint *map, int key, int value) { int *val = map_put_ref_intint(map, key, 
# 155 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
((void *)0)
# 155 "/home/ubuntu/neovim/src/nvim/map_defs.h"
, 
# 155 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
((void *)0)
# 155 "/home/ubuntu/neovim/src/nvim/map_defs.h"
); *val = value; } int map_del_intint(Map_intint *map, int key, int *key_alloc);
typedef struct { Set_int set; ptr_t *values; } Map_intptr_t; static inline ptr_t map_get_intptr_t(Map_intptr_t *map, int key) { uint32_t k = mh_get_int(&map->set, key); return k == 
# 156 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
(4294967295U) 
# 156 "/home/ubuntu/neovim/src/nvim/map_defs.h"
? value_init_ptr_t : map->values[k]; } ptr_t *map_ref_intptr_t(Map_intptr_t *map, int key, int **key_alloc); ptr_t *map_put_ref_intptr_t(Map_intptr_t *map, int key, int **key_alloc, 
# 156 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
_Bool 
# 156 "/home/ubuntu/neovim/src/nvim/map_defs.h"
*new_item); static inline void map_put_intptr_t(Map_intptr_t *map, int key, ptr_t value) { ptr_t *val = map_put_ref_intptr_t(map, key, 
# 156 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
((void *)0)
# 156 "/home/ubuntu/neovim/src/nvim/map_defs.h"
, 
# 156 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
((void *)0)
# 156 "/home/ubuntu/neovim/src/nvim/map_defs.h"
); *val = value; } ptr_t map_del_intptr_t(Map_intptr_t *map, int key, int *key_alloc);
typedef struct { Set_cstr_t set; ptr_t *values; } Map_cstr_tptr_t; static inline ptr_t map_get_cstr_tptr_t(Map_cstr_tptr_t *map, cstr_t key) { uint32_t k = mh_get_cstr_t(&map->set, key); return k == 
# 157 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
(4294967295U) 
# 157 "/home/ubuntu/neovim/src/nvim/map_defs.h"
? value_init_ptr_t : map->values[k]; } ptr_t *map_ref_cstr_tptr_t(Map_cstr_tptr_t *map, cstr_t key, cstr_t **key_alloc); ptr_t *map_put_ref_cstr_tptr_t(Map_cstr_tptr_t *map, cstr_t key, cstr_t **key_alloc, 
# 157 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
_Bool 
# 157 "/home/ubuntu/neovim/src/nvim/map_defs.h"
*new_item); static inline void map_put_cstr_tptr_t(Map_cstr_tptr_t *map, cstr_t key, ptr_t value) { ptr_t *val = map_put_ref_cstr_tptr_t(map, key, 
# 157 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
((void *)0)
# 157 "/home/ubuntu/neovim/src/nvim/map_defs.h"
, 
# 157 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
((void *)0)
# 157 "/home/ubuntu/neovim/src/nvim/map_defs.h"
); *val = value; } ptr_t map_del_cstr_tptr_t(Map_cstr_tptr_t *map, cstr_t key, cstr_t *key_alloc);
typedef struct { Set_cstr_t set; int *values; } Map_cstr_tint; static inline int map_get_cstr_tint(Map_cstr_tint *map, cstr_t key) { uint32_t k = mh_get_cstr_t(&map->set, key); return k == 
# 158 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
(4294967295U) 
# 158 "/home/ubuntu/neovim/src/nvim/map_defs.h"
? value_init_int : map->values[k]; } int *map_ref_cstr_tint(Map_cstr_tint *map, cstr_t key, cstr_t **key_alloc); int *map_put_ref_cstr_tint(Map_cstr_tint *map, cstr_t key, cstr_t **key_alloc, 
# 158 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
_Bool 
# 158 "/home/ubuntu/neovim/src/nvim/map_defs.h"
*new_item); static inline void map_put_cstr_tint(Map_cstr_tint *map, cstr_t key, int value) { int *val = map_put_ref_cstr_tint(map, key, 
# 158 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
((void *)0)
# 158 "/home/ubuntu/neovim/src/nvim/map_defs.h"
, 
# 158 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
((void *)0)
# 158 "/home/ubuntu/neovim/src/nvim/map_defs.h"
); *val = value; } int map_del_cstr_tint(Map_cstr_tint *map, cstr_t key, cstr_t *key_alloc);
typedef struct { Set_ptr_t set; ptr_t *values; } Map_ptr_tptr_t; static inline ptr_t map_get_ptr_tptr_t(Map_ptr_tptr_t *map, ptr_t key) { uint32_t k = mh_get_ptr_t(&map->set, key); return k == 
# 159 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
(4294967295U) 
# 159 "/home/ubuntu/neovim/src/nvim/map_defs.h"
? value_init_ptr_t : map->values[k]; } ptr_t *map_ref_ptr_tptr_t(Map_ptr_tptr_t *map, ptr_t key, ptr_t **key_alloc); ptr_t *map_put_ref_ptr_tptr_t(Map_ptr_tptr_t *map, ptr_t key, ptr_t **key_alloc, 
# 159 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
_Bool 
# 159 "/home/ubuntu/neovim/src/nvim/map_defs.h"
*new_item); static inline void map_put_ptr_tptr_t(Map_ptr_tptr_t *map, ptr_t key, ptr_t value) { ptr_t *val = map_put_ref_ptr_tptr_t(map, key, 
# 159 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
((void *)0)
# 159 "/home/ubuntu/neovim/src/nvim/map_defs.h"
, 
# 159 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
((void *)0)
# 159 "/home/ubuntu/neovim/src/nvim/map_defs.h"
); *val = value; } ptr_t map_del_ptr_tptr_t(Map_ptr_tptr_t *map, ptr_t key, ptr_t *key_alloc);
typedef struct { Set_uint32_t set; ptr_t *values; } Map_uint32_tptr_t; static inline ptr_t map_get_uint32_tptr_t(Map_uint32_tptr_t *map, uint32_t key) { uint32_t k = mh_get_uint32_t(&map->set, key); return k == 
# 160 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
(4294967295U) 
# 160 "/home/ubuntu/neovim/src/nvim/map_defs.h"
? value_init_ptr_t : map->values[k]; } ptr_t *map_ref_uint32_tptr_t(Map_uint32_tptr_t *map, uint32_t key, uint32_t **key_alloc); ptr_t *map_put_ref_uint32_tptr_t(Map_uint32_tptr_t *map, uint32_t key, uint32_t **key_alloc, 
# 160 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
_Bool 
# 160 "/home/ubuntu/neovim/src/nvim/map_defs.h"
*new_item); static inline void map_put_uint32_tptr_t(Map_uint32_tptr_t *map, uint32_t key, ptr_t value) { ptr_t *val = map_put_ref_uint32_tptr_t(map, key, 
# 160 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
((void *)0)
# 160 "/home/ubuntu/neovim/src/nvim/map_defs.h"
, 
# 160 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
((void *)0)
# 160 "/home/ubuntu/neovim/src/nvim/map_defs.h"
); *val = value; } ptr_t map_del_uint32_tptr_t(Map_uint32_tptr_t *map, uint32_t key, uint32_t *key_alloc);
typedef struct { Set_uint64_t set; ptr_t *values; } Map_uint64_tptr_t; static inline ptr_t map_get_uint64_tptr_t(Map_uint64_tptr_t *map, uint64_t key) { uint32_t k = mh_get_uint64_t(&map->set, key); return k == 
# 161 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
(4294967295U) 
# 161 "/home/ubuntu/neovim/src/nvim/map_defs.h"
? value_init_ptr_t : map->values[k]; } ptr_t *map_ref_uint64_tptr_t(Map_uint64_tptr_t *map, uint64_t key, uint64_t **key_alloc); ptr_t *map_put_ref_uint64_tptr_t(Map_uint64_tptr_t *map, uint64_t key, uint64_t **key_alloc, 
# 161 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
_Bool 
# 161 "/home/ubuntu/neovim/src/nvim/map_defs.h"
*new_item); static inline void map_put_uint64_tptr_t(Map_uint64_tptr_t *map, uint64_t key, ptr_t value) { ptr_t *val = map_put_ref_uint64_tptr_t(map, key, 
# 161 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
((void *)0)
# 161 "/home/ubuntu/neovim/src/nvim/map_defs.h"
, 
# 161 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
((void *)0)
# 161 "/home/ubuntu/neovim/src/nvim/map_defs.h"
); *val = value; } ptr_t map_del_uint64_tptr_t(Map_uint64_tptr_t *map, uint64_t key, uint64_t *key_alloc);
typedef struct { Set_uint64_t set; ssize_t *values; } Map_uint64_tssize_t; static inline ssize_t map_get_uint64_tssize_t(Map_uint64_tssize_t *map, uint64_t key) { uint32_t k = mh_get_uint64_t(&map->set, key); return k == 
# 162 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
(4294967295U) 
# 162 "/home/ubuntu/neovim/src/nvim/map_defs.h"
? value_init_ssize_t : map->values[k]; } ssize_t *map_ref_uint64_tssize_t(Map_uint64_tssize_t *map, uint64_t key, uint64_t **key_alloc); ssize_t *map_put_ref_uint64_tssize_t(Map_uint64_tssize_t *map, uint64_t key, uint64_t **key_alloc, 
# 162 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
_Bool 
# 162 "/home/ubuntu/neovim/src/nvim/map_defs.h"
*new_item); static inline void map_put_uint64_tssize_t(Map_uint64_tssize_t *map, uint64_t key, ssize_t value) { ssize_t *val = map_put_ref_uint64_tssize_t(map, key, 
# 162 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
((void *)0)
# 162 "/home/ubuntu/neovim/src/nvim/map_defs.h"
, 
# 162 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
((void *)0)
# 162 "/home/ubuntu/neovim/src/nvim/map_defs.h"
); *val = value; } ssize_t map_del_uint64_tssize_t(Map_uint64_tssize_t *map, uint64_t key, uint64_t *key_alloc);
typedef struct { Set_uint64_t set; uint64_t *values; } Map_uint64_tuint64_t; static inline uint64_t map_get_uint64_tuint64_t(Map_uint64_tuint64_t *map, uint64_t key) { uint32_t k = mh_get_uint64_t(&map->set, key); return k == 
# 163 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
(4294967295U) 
# 163 "/home/ubuntu/neovim/src/nvim/map_defs.h"
? value_init_uint64_t : map->values[k]; } uint64_t *map_ref_uint64_tuint64_t(Map_uint64_tuint64_t *map, uint64_t key, uint64_t **key_alloc); uint64_t *map_put_ref_uint64_tuint64_t(Map_uint64_tuint64_t *map, uint64_t key, uint64_t **key_alloc, 
# 163 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
_Bool 
# 163 "/home/ubuntu/neovim/src/nvim/map_defs.h"
*new_item); static inline void map_put_uint64_tuint64_t(Map_uint64_tuint64_t *map, uint64_t key, uint64_t value) { uint64_t *val = map_put_ref_uint64_tuint64_t(map, key, 
# 163 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
((void *)0)
# 163 "/home/ubuntu/neovim/src/nvim/map_defs.h"
, 
# 163 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
((void *)0)
# 163 "/home/ubuntu/neovim/src/nvim/map_defs.h"
); *val = value; } uint64_t map_del_uint64_tuint64_t(Map_uint64_tuint64_t *map, uint64_t key, uint64_t *key_alloc);
typedef struct { Set_int64_t set; int64_t *values; } Map_int64_tint64_t; static inline int64_t map_get_int64_tint64_t(Map_int64_tint64_t *map, int64_t key) { uint32_t k = mh_get_int64_t(&map->set, key); return k == 
# 164 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
(4294967295U) 
# 164 "/home/ubuntu/neovim/src/nvim/map_defs.h"
? value_init_int64_t : map->values[k]; } int64_t *map_ref_int64_tint64_t(Map_int64_tint64_t *map, int64_t key, int64_t **key_alloc); int64_t *map_put_ref_int64_tint64_t(Map_int64_tint64_t *map, int64_t key, int64_t **key_alloc, 
# 164 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
_Bool 
# 164 "/home/ubuntu/neovim/src/nvim/map_defs.h"
*new_item); static inline void map_put_int64_tint64_t(Map_int64_tint64_t *map, int64_t key, int64_t value) { int64_t *val = map_put_ref_int64_tint64_t(map, key, 
# 164 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
((void *)0)
# 164 "/home/ubuntu/neovim/src/nvim/map_defs.h"
, 
# 164 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
((void *)0)
# 164 "/home/ubuntu/neovim/src/nvim/map_defs.h"
); *val = value; } int64_t map_del_int64_tint64_t(Map_int64_tint64_t *map, int64_t key, int64_t *key_alloc);
typedef struct { Set_int64_t set; ptr_t *values; } Map_int64_tptr_t; static inline ptr_t map_get_int64_tptr_t(Map_int64_tptr_t *map, int64_t key) { uint32_t k = mh_get_int64_t(&map->set, key); return k == 
# 165 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
(4294967295U) 
# 165 "/home/ubuntu/neovim/src/nvim/map_defs.h"
? value_init_ptr_t : map->values[k]; } ptr_t *map_ref_int64_tptr_t(Map_int64_tptr_t *map, int64_t key, int64_t **key_alloc); ptr_t *map_put_ref_int64_tptr_t(Map_int64_tptr_t *map, int64_t key, int64_t **key_alloc, 
# 165 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
_Bool 
# 165 "/home/ubuntu/neovim/src/nvim/map_defs.h"
*new_item); static inline void map_put_int64_tptr_t(Map_int64_tptr_t *map, int64_t key, ptr_t value) { ptr_t *val = map_put_ref_int64_tptr_t(map, key, 
# 165 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
((void *)0)
# 165 "/home/ubuntu/neovim/src/nvim/map_defs.h"
, 
# 165 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
((void *)0)
# 165 "/home/ubuntu/neovim/src/nvim/map_defs.h"
); *val = value; } ptr_t map_del_int64_tptr_t(Map_int64_tptr_t *map, int64_t key, int64_t *key_alloc);
typedef struct { Set_uint32_t set; uint32_t *values; } Map_uint32_tuint32_t; static inline uint32_t map_get_uint32_tuint32_t(Map_uint32_tuint32_t *map, uint32_t key) { uint32_t k = mh_get_uint32_t(&map->set, key); return k == 
# 166 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
(4294967295U) 
# 166 "/home/ubuntu/neovim/src/nvim/map_defs.h"
? value_init_uint32_t : map->values[k]; } uint32_t *map_ref_uint32_tuint32_t(Map_uint32_tuint32_t *map, uint32_t key, uint32_t **key_alloc); uint32_t *map_put_ref_uint32_tuint32_t(Map_uint32_tuint32_t *map, uint32_t key, uint32_t **key_alloc, 
# 166 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
_Bool 
# 166 "/home/ubuntu/neovim/src/nvim/map_defs.h"
*new_item); static inline void map_put_uint32_tuint32_t(Map_uint32_tuint32_t *map, uint32_t key, uint32_t value) { uint32_t *val = map_put_ref_uint32_tuint32_t(map, key, 
# 166 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
((void *)0)
# 166 "/home/ubuntu/neovim/src/nvim/map_defs.h"
, 
# 166 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
((void *)0)
# 166 "/home/ubuntu/neovim/src/nvim/map_defs.h"
); *val = value; } uint32_t map_del_uint32_tuint32_t(Map_uint32_tuint32_t *map, uint32_t key, uint32_t *key_alloc);
typedef struct { Set_String set; int *values; } Map_Stringint; static inline int map_get_Stringint(Map_Stringint *map, String key) { uint32_t k = mh_get_String(&map->set, key); return k == 
# 167 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
(4294967295U) 
# 167 "/home/ubuntu/neovim/src/nvim/map_defs.h"
? value_init_int : map->values[k]; } int *map_ref_Stringint(Map_Stringint *map, String key, String **key_alloc); int *map_put_ref_Stringint(Map_Stringint *map, String key, String **key_alloc, 
# 167 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
_Bool 
# 167 "/home/ubuntu/neovim/src/nvim/map_defs.h"
*new_item); static inline void map_put_Stringint(Map_Stringint *map, String key, int value) { int *val = map_put_ref_Stringint(map, key, 
# 167 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
((void *)0)
# 167 "/home/ubuntu/neovim/src/nvim/map_defs.h"
, 
# 167 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
((void *)0)
# 167 "/home/ubuntu/neovim/src/nvim/map_defs.h"
); *val = value; } int map_del_Stringint(Map_Stringint *map, String key, String *key_alloc);
typedef struct { Set_int set; String *values; } Map_intString; static inline String map_get_intString(Map_intString *map, int key) { uint32_t k = mh_get_int(&map->set, key); return k == 
# 168 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
(4294967295U) 
# 168 "/home/ubuntu/neovim/src/nvim/map_defs.h"
? value_init_String : map->values[k]; } String *map_ref_intString(Map_intString *map, int key, int **key_alloc); String *map_put_ref_intString(Map_intString *map, int key, int **key_alloc, 
# 168 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
_Bool 
# 168 "/home/ubuntu/neovim/src/nvim/map_defs.h"
*new_item); static inline void map_put_intString(Map_intString *map, int key, String value) { String *val = map_put_ref_intString(map, key, 
# 168 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
((void *)0)
# 168 "/home/ubuntu/neovim/src/nvim/map_defs.h"
, 
# 168 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
((void *)0)
# 168 "/home/ubuntu/neovim/src/nvim/map_defs.h"
); *val = value; } String map_del_intString(Map_intString *map, int key, int *key_alloc);
typedef struct { Set_ColorKey set; ColorItem *values; } Map_ColorKeyColorItem; static inline ColorItem map_get_ColorKeyColorItem(Map_ColorKeyColorItem *map, ColorKey key) { uint32_t k = mh_get_ColorKey(&map->set, key); return k == 
# 169 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
(4294967295U) 
# 169 "/home/ubuntu/neovim/src/nvim/map_defs.h"
? value_init_ColorItem : map->values[k]; } ColorItem *map_ref_ColorKeyColorItem(Map_ColorKeyColorItem *map, ColorKey key, ColorKey **key_alloc); ColorItem *map_put_ref_ColorKeyColorItem(Map_ColorKeyColorItem *map, ColorKey key, ColorKey **key_alloc, 
# 169 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
_Bool 
# 169 "/home/ubuntu/neovim/src/nvim/map_defs.h"
*new_item); static inline void map_put_ColorKeyColorItem(Map_ColorKeyColorItem *map, ColorKey key, ColorItem value) { ColorItem *val = map_put_ref_ColorKeyColorItem(map, key, 
# 169 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
((void *)0)
# 169 "/home/ubuntu/neovim/src/nvim/map_defs.h"
, 
# 169 "/home/ubuntu/neovim/src/nvim/map_defs.h" 3 4
((void *)0)
# 169 "/home/ubuntu/neovim/src/nvim/map_defs.h"
); *val = value; } ColorItem map_del_ColorKeyColorItem(Map_ColorKeyColorItem *map, ColorKey key, ColorKey *key_alloc);
# 236 "/home/ubuntu/neovim/src/nvim/map_defs.h"
void pmap_del2(Map_cstr_tptr_t *map, const char *key);
# 9 "/home/ubuntu/neovim/src/nvim/marktree_defs.h" 2

enum {
  MT_MAX_DEPTH = 20,
  MT_BRANCH_FACTOR = 10,



  MT_LOG2_BRANCH = 5,
};

typedef struct {
  int32_t row;
  int32_t col;
} MTPos;




typedef enum {
  kMTMetaInline,
  kMTMetaLines,
  kMTMetaSignHL,
  kMTMetaSignText,
  kMTMetaCount,
} MetaIndex;




typedef const uint32_t *MetaFilter;

typedef struct mtnode_s MTNode;

typedef struct {
  MTPos pos;
  int lvl;
  MTNode *x;
  int i;
  struct {
    int oldcol;
    int i;
  } s[MT_MAX_DEPTH];

  size_t intersect_idx;
  MTPos intersect_pos;
  MTPos intersect_pos_x;
} MarkTreeIter;
# 65 "/home/ubuntu/neovim/src/nvim/marktree_defs.h"
typedef struct {
  MTPos pos;
  uint32_t ns;
  uint32_t id;
  uint16_t flags;
  DecorInlineData decor_data;
} MTKey;

typedef struct {
  MTKey start;
  MTPos end_pos;
  
# 76 "/home/ubuntu/neovim/src/nvim/marktree_defs.h" 3 4
 _Bool 
# 76 "/home/ubuntu/neovim/src/nvim/marktree_defs.h"
      end_right_gravity;
} MTPair;

typedef struct { size_t size; size_t capacity; uint64_t *items; uint64_t init_array[4]; } Intersection;



struct mtnode_inner_s {
  MTNode *i_ptr[2 * MT_BRANCH_FACTOR];
  uint32_t i_meta[2 * MT_BRANCH_FACTOR][kMTMetaCount];
};

struct mtnode_s {
  int32_t n;
  int16_t level;
  int16_t p_idx;
  Intersection intersect;
  MTNode *parent;
  MTKey key[2 * MT_BRANCH_FACTOR - 1];
  struct mtnode_inner_s s[];
};

typedef struct {
  MTNode *root;
  uint32_t meta_root[kMTMetaCount];
  size_t n_keys, n_nodes;
  Map_uint64_tptr_t id2node[1];
} MarkTree;
# 11 "/home/ubuntu/neovim/src/nvim/buffer_defs.h" 2
# 1 "/home/ubuntu/neovim/src/nvim/memline_defs.h" 1
       

# 1 "/home/ubuntu/neovim/src/nvim/memfile_defs.h" 1
       
# 14 "/home/ubuntu/neovim/src/nvim/memfile_defs.h"
typedef int64_t blocknr_T;
# 27 "/home/ubuntu/neovim/src/nvim/memfile_defs.h"
typedef struct {
  blocknr_T bh_bnum;

  void *bh_data;
  unsigned bh_page_count;



  unsigned bh_flags;
} bhdr_T;

typedef enum {
  MF_DIRTY_NO = 0,
  MF_DIRTY_YES,
  MF_DIRTY_YES_NOSYNC,
} mfdirty_T;


typedef struct {
  char *mf_fname;
  char *mf_ffname;
  int mf_fd;
  int mf_flags;
  
# 50 "/home/ubuntu/neovim/src/nvim/memfile_defs.h" 3 4
 _Bool 
# 50 "/home/ubuntu/neovim/src/nvim/memfile_defs.h"
      mf_reopen;
  bhdr_T *mf_free_first;



  Map_int64_tptr_t mf_hash;




  Map_int64_tint64_t mf_trans;

  blocknr_T mf_blocknr_max;
  blocknr_T mf_blocknr_min;
  blocknr_T mf_neg_count;
  blocknr_T mf_infile_count;
  unsigned mf_page_size;
  mfdirty_T mf_dirty;
} memfile_T;
# 4 "/home/ubuntu/neovim/src/nvim/memline_defs.h" 2







typedef struct {
  blocknr_T ip_bnum;
  linenr_T ip_low;
  linenr_T ip_high;
  int ip_index;
} infoptr_T;

typedef struct {
  int mlcs_numlines;
  int mlcs_totalsize;
} chunksize_T;
# 43 "/home/ubuntu/neovim/src/nvim/memline_defs.h"
typedef struct {
  linenr_T ml_line_count;

  memfile_T *ml_mfp;

  infoptr_T *ml_stack;
  int ml_stack_top;
  int ml_stack_size;






  int ml_flags;

  colnr_T ml_line_len;
  linenr_T ml_line_lnum;
  char *ml_line_ptr;
  size_t ml_line_offset;
  int ml_line_offset_ff;

  bhdr_T *ml_locked;
  linenr_T ml_locked_low;
  linenr_T ml_locked_high;
  int ml_locked_lineadd;
  chunksize_T *ml_chunksize;
  int ml_numchunks;
  int ml_usedchunks;
} memline_T;
# 12 "/home/ubuntu/neovim/src/nvim/buffer_defs.h" 2
# 1 "/home/ubuntu/neovim/src/nvim/option_defs.h" 1
       


# 1 "/usr/lib/gcc/aarch64-linux-gnu/9/include/stddef.h" 1 3 4
# 5 "/home/ubuntu/neovim/src/nvim/option_defs.h" 2


# 1 "/home/ubuntu/neovim/src/nvim/cmdexpand_defs.h" 1
       


# 1 "/usr/lib/gcc/aarch64-linux-gnu/9/include/stddef.h" 1 3 4
# 5 "/home/ubuntu/neovim/src/nvim/cmdexpand_defs.h" 2



typedef enum {
  XP_PREFIX_NONE,
  XP_PREFIX_NO,
  XP_PREFIX_INV,
} xp_prefix_T;

enum { EXPAND_BUF_LEN = 256, };


typedef struct {
  char *xp_pattern;

  int xp_context;
  size_t xp_pattern_len;
  xp_prefix_T xp_prefix;
  char *xp_arg;
  LuaRef xp_luaref;
  sctx_T xp_script_ctx;
  int xp_backslash;

  
# 28 "/home/ubuntu/neovim/src/nvim/cmdexpand_defs.h" 3 4
 _Bool 
# 28 "/home/ubuntu/neovim/src/nvim/cmdexpand_defs.h"
      xp_shell;


  int xp_numfiles;
  int xp_col;
  int xp_selected;
  char *xp_orig;
  char **xp_files;
  char *xp_line;
  char xp_buf[EXPAND_BUF_LEN];
} expand_T;


enum {
  XP_BS_NONE = 0,
  XP_BS_ONE = 0x1,
  XP_BS_THREE = 0x2,
  XP_BS_COMMA = 0x4,
};


enum {
  EXPAND_UNSUCCESSFUL = -2,
  EXPAND_OK = -1,
  EXPAND_NOTHING = 0,
  EXPAND_COMMANDS,
  EXPAND_FILES,
  EXPAND_DIRECTORIES,
  EXPAND_SETTINGS,
  EXPAND_BOOL_SETTINGS,
  EXPAND_TAGS,
  EXPAND_OLD_SETTING,
  EXPAND_HELP,
  EXPAND_BUFFERS,
  EXPAND_EVENTS,
  EXPAND_MENUS,
  EXPAND_SYNTAX,
  EXPAND_HIGHLIGHT,
  EXPAND_AUGROUP,
  EXPAND_USER_VARS,
  EXPAND_MAPPINGS,
  EXPAND_TAGS_LISTFILES,
  EXPAND_FUNCTIONS,
  EXPAND_USER_FUNC,
  EXPAND_EXPRESSION,
  EXPAND_MENUNAMES,
  EXPAND_USER_COMMANDS,
  EXPAND_USER_CMD_FLAGS,
  EXPAND_USER_NARGS,
  EXPAND_USER_COMPLETE,
  EXPAND_ENV_VARS,
  EXPAND_LANGUAGE,
  EXPAND_COLORS,
  EXPAND_COMPILER,
  EXPAND_USER_DEFINED,
  EXPAND_USER_LIST,
  EXPAND_USER_LUA,
  EXPAND_SHELLCMD,
  EXPAND_SIGN,
  EXPAND_PROFILE,
  EXPAND_FILETYPE,
  EXPAND_FILES_IN_PATH,
  EXPAND_OWNSYNTAX,
  EXPAND_LOCALES,
  EXPAND_HISTORY,
  EXPAND_USER,
  EXPAND_SYNTIME,
  EXPAND_USER_ADDR_TYPE,
  EXPAND_PACKADD,
  EXPAND_MESSAGES,
  EXPAND_MAPCLEAR,
  EXPAND_ARGLIST,
  EXPAND_DIFF_BUFFERS,
  EXPAND_BREAKPOINT,
  EXPAND_SCRIPTNAMES,
  EXPAND_RUNTIME,
  EXPAND_STRING_SETTING,
  EXPAND_SETTING_SUBTRACT,
  EXPAND_ARGOPT,
  EXPAND_KEYMAP,
  EXPAND_DIRS_IN_CDPATH,
  EXPAND_CHECKHEALTH,
  EXPAND_LUA,
};


typedef char *(*CompleteListItemGetter)(expand_T *, int);
# 8 "/home/ubuntu/neovim/src/nvim/option_defs.h" 2
# 1 "/home/ubuntu/neovim/src/nvim/regexp_defs.h" 1
# 10 "/home/ubuntu/neovim/src/nvim/regexp_defs.h"
       







enum {




  NSUBEXP = 10,
};

typedef struct regengine regengine_T;







typedef struct {
  regprog_T *regprog;
  lpos_T startpos[NSUBEXP];
  lpos_T endpos[NSUBEXP];

  colnr_T rmm_matchcol;
  int rmm_ic;
  colnr_T rmm_maxcol;
} regmmatch_T;


typedef enum {
  OPTION_MAGIC_NOT_SET,
  OPTION_MAGIC_ON,
  OPTION_MAGIC_OFF,
} optmagic_T;





typedef enum {
  MAGIC_NONE = 1,
  MAGIC_OFF = 2,
  MAGIC_ON = 3,
  MAGIC_ALL = 4,
} magic_T;




typedef struct {
  regprog_T *regprog;
  char *startp[NSUBEXP];
  char *endp[NSUBEXP];

  colnr_T rm_matchcol;
  
# 71 "/home/ubuntu/neovim/src/nvim/regexp_defs.h" 3 4
 _Bool 
# 71 "/home/ubuntu/neovim/src/nvim/regexp_defs.h"
      rm_ic;
} regmatch_T;




typedef struct {
  int16_t refcnt;
  uint8_t *matches[NSUBEXP];
} reg_extmatch_T;


enum {
  REGSUB_COPY = 1,
  REGSUB_MAGIC = 2,
  REGSUB_BACKSLASH = 4,
};
# 9 "/home/ubuntu/neovim/src/nvim/option_defs.h" 2
# 17 "/home/ubuntu/neovim/src/nvim/option_defs.h"
typedef enum {
  kOptValTypeNil = -1,
  kOptValTypeBoolean,
  kOptValTypeNumber,
  kOptValTypeString,
} OptValType;




typedef uint32_t OptTypeFlags;

typedef union {

  TriState boolean;
  OptInt number;
  String string;
} OptValData;


typedef struct {
  OptValType type;
  OptValData data;
} OptVal;


typedef enum {
  OP_NONE = 0,
  OP_ADDING,
  OP_PREPENDING,
  OP_REMOVING,
} set_op_T;



typedef struct {


  void *os_varp;
  OptIndex os_idx;
  int os_flags;



  OptValData os_oldval;

  OptValData os_newval;



  
# 67 "/home/ubuntu/neovim/src/nvim/option_defs.h" 3 4
 _Bool 
# 67 "/home/ubuntu/neovim/src/nvim/option_defs.h"
      os_value_checked;

  
# 69 "/home/ubuntu/neovim/src/nvim/option_defs.h" 3 4
 _Bool 
# 69 "/home/ubuntu/neovim/src/nvim/option_defs.h"
      os_value_changed;




  
# 74 "/home/ubuntu/neovim/src/nvim/option_defs.h" 3 4
 _Bool 
# 74 "/home/ubuntu/neovim/src/nvim/option_defs.h"
      os_restore_chartab;




  char *os_errbuf;

  size_t os_errbuflen;

  void *os_win;
  void *os_buf;
} optset_T;






typedef const char *(*opt_did_set_cb_T)(optset_T *args);



typedef struct {

  char *oe_varp;

  char *oe_opt_value;


  
# 103 "/home/ubuntu/neovim/src/nvim/option_defs.h" 3 4
 _Bool 
# 103 "/home/ubuntu/neovim/src/nvim/option_defs.h"
      oe_append;

  
# 105 "/home/ubuntu/neovim/src/nvim/option_defs.h" 3 4
 _Bool 
# 105 "/home/ubuntu/neovim/src/nvim/option_defs.h"
      oe_include_orig_val;


  regmatch_T *oe_regmatch;

  expand_T *oe_xp;




  char *oe_set_arg;
} optexpand_T;
# 128 "/home/ubuntu/neovim/src/nvim/option_defs.h"
typedef int (*opt_expand_cb_T)(optexpand_T *args, int *numMatches, char ***matches);


typedef enum {
  kOptReqGlobal = 0,
  kOptReqWin = 1,
  kOptReqBuf = 2,
} OptReqScope;
# 13 "/home/ubuntu/neovim/src/nvim/buffer_defs.h" 2
# 1 "/home/ubuntu/neovim/src/nvim/os/fs_defs.h" 1
       




typedef struct {
  uv_stat_t stat;
} FileInfo;


typedef struct {
  uint64_t inode;
  uint64_t device_id;
} FileID;



typedef struct {
  uv_fs_t request;
  uv_dirent_t ent;
} Directory;
# 14 "/home/ubuntu/neovim/src/nvim/buffer_defs.h" 2
# 1 "/home/ubuntu/neovim/src/nvim/statusline_defs.h" 1
       



# 1 "/home/ubuntu/neovim/src/nvim/fold_defs.h" 1
       





typedef struct {
  linenr_T fi_lnum;
  int fi_level;

  int fi_low_level;
  linenr_T fi_lines;
} foldinfo_T;

enum { FOLD_TEXT_LEN = 51, };
# 6 "/home/ubuntu/neovim/src/nvim/statusline_defs.h" 2
# 1 "/home/ubuntu/neovim/src/nvim/sign_defs.h" 1
       





typedef struct {
  schar_T text[SIGN_WIDTH];
  int hl_id;
} SignTextAttrs;


typedef struct {
  char *sn_name;
  char *sn_icon;
  schar_T sn_text[SIGN_WIDTH];
  int sn_line_hl;
  int sn_text_hl;
  int sn_cul_hl;
  int sn_num_hl;
  int sn_priority;
} sign_T;

typedef struct {
  DecorSignHighlight *sh;
  uint32_t id;
} SignItem;

enum { SIGN_SHOW_MAX = 9, };
enum { SIGN_DEF_PRIO = 10, };
# 7 "/home/ubuntu/neovim/src/nvim/statusline_defs.h" 2


typedef struct {
  enum {
    kStlClickDisabled = 0,
    kStlClickTabSwitch,
    kStlClickTabClose,
    kStlClickFuncRun,
  } type;
  int tabnr;
  char *func;
} StlClickDefinition;


typedef struct {
  StlClickDefinition def;
  const char *start;
} StlClickRecord;


typedef struct stl_hlrec stl_hlrec_t;
struct stl_hlrec {
  char *start;
  int userhl;
};


typedef struct stl_item stl_item_t;
struct stl_item {

  char *start;

  char *cmd;

  int minwid;

  int maxwid;
  enum {
    Normal,
    Empty,
    Group,
    Separate,
    Highlight,
    TabPage,
    ClickFunc,
    Trunc,
  } type;
};


typedef struct {
  int width;
  int num_attr;
  int sign_cul_id;
  
# 61 "/home/ubuntu/neovim/src/nvim/statusline_defs.h" 3 4
 _Bool 
# 61 "/home/ubuntu/neovim/src/nvim/statusline_defs.h"
      draw;
  
# 62 "/home/ubuntu/neovim/src/nvim/statusline_defs.h" 3 4
 _Bool 
# 62 "/home/ubuntu/neovim/src/nvim/statusline_defs.h"
      use_cul;
  stl_hlrec_t *hlrec;
  foldinfo_T foldinfo;
  SignTextAttrs *sattrs;
} statuscol_T;
# 15 "/home/ubuntu/neovim/src/nvim/buffer_defs.h" 2
# 1 "/home/ubuntu/neovim/src/nvim/undo_defs.h" 1
       



# 1 "/home/ubuntu/neovim/src/nvim/extmark_defs.h" 1
       




typedef ptrdiff_t bcount_t;

typedef struct undo_object ExtmarkUndoObject;
typedef struct { size_t size; size_t capacity; ExtmarkUndoObject *items; } extmark_undo_vec_t;



typedef enum {
  kExtmarkNOOP,
  kExtmarkUndo,
  kExtmarkNoUndo,
  kExtmarkUndoNoRedo,
} ExtmarkOp;
# 6 "/home/ubuntu/neovim/src/nvim/undo_defs.h" 2
# 1 "/home/ubuntu/neovim/src/nvim/mark_defs.h" 1
       



# 1 "/home/ubuntu/neovim/src/nvim/func_attr.h" 1
# 6 "/home/ubuntu/neovim/src/nvim/mark_defs.h" 2
# 1 "/home/ubuntu/neovim/src/nvim/os/time_defs.h" 1
       


typedef uint64_t Timestamp;
# 7 "/home/ubuntu/neovim/src/nvim/mark_defs.h" 2
# 18 "/home/ubuntu/neovim/src/nvim/mark_defs.h"
typedef enum {
  kMarkMoveSuccess = 1,
  kMarkMoveFailed = 2,
  kMarkSwitchedBuf = 4,
  kMarkChangedCol = 8,
  kMarkChangedLine = 16,
  kMarkChangedCursor = 32,
  kMarkChangedView = 64,
} MarkMoveRes;


typedef enum {
  kMarkBeginLine = 1,
  kMarkContext = 2,
  KMarkNoContext = 4,
  kMarkSetView = 8,
  kMarkJumpList = 16,
} MarkMove;


typedef enum {
  kMarkBufLocal,
  kMarkAll,
  kMarkAllNoResolve,
} MarkGet;
# 69 "/home/ubuntu/neovim/src/nvim/mark_defs.h"
typedef struct {
  linenr_T topline_offset;

} fmarkv_T;




typedef struct {
  pos_T mark;
  int fnum;
  Timestamp timestamp;
  fmarkv_T view;
  AdditionalData *additional_data;
} fmark_T;




typedef struct {
  fmark_T fmark;
  char *fname;
} xfmark_T;




static inline 
# 96 "/home/ubuntu/neovim/src/nvim/mark_defs.h" 3 4
             _Bool 
# 96 "/home/ubuntu/neovim/src/nvim/mark_defs.h"
                  lt(pos_T a, pos_T b)
  FUNC_ATTR_CONST FUNC_ATTR_ALWAYS_INLINE
{
  if (a.lnum != b.lnum) {
    return a.lnum < b.lnum;
  } else if (a.col != b.col) {
    return a.col < b.col;
  } else {
    return a.coladd < b.coladd;
  }
}

static inline 
# 108 "/home/ubuntu/neovim/src/nvim/mark_defs.h" 3 4
             _Bool 
# 108 "/home/ubuntu/neovim/src/nvim/mark_defs.h"
                  equalpos(pos_T a, pos_T b)
  FUNC_ATTR_CONST FUNC_ATTR_ALWAYS_INLINE
{
  return (a.lnum == b.lnum) && (a.col == b.col) && (a.coladd == b.coladd);
}

static inline 
# 114 "/home/ubuntu/neovim/src/nvim/mark_defs.h" 3 4
             _Bool 
# 114 "/home/ubuntu/neovim/src/nvim/mark_defs.h"
                  ltoreq(pos_T a, pos_T b)
  FUNC_ATTR_CONST FUNC_ATTR_ALWAYS_INLINE
{
  return lt(a, b) || equalpos(a, b);
}

static inline void clearpos(pos_T *a)
  FUNC_ATTR_ALWAYS_INLINE
{
  a->lnum = 0;
  a->col = 0;
  a->coladd = 0;
}
# 7 "/home/ubuntu/neovim/src/nvim/undo_defs.h" 2

enum { UNDO_HASH_SIZE = 32, };

typedef struct u_header u_header_T;


typedef struct {
  pos_T vi_start;
  pos_T vi_end;
  int vi_mode;
  colnr_T vi_curswant;
} visualinfo_T;

typedef struct u_entry u_entry_T;
struct u_entry {
  u_entry_T *ue_next;
  linenr_T ue_top;
  linenr_T ue_bot;
  linenr_T ue_lcount;
  char **ue_array;
  linenr_T ue_size;



};

struct u_header {


  union {
    u_header_T *ptr;
    int seq;
  } uh_next;
  union {
    u_header_T *ptr;
    int seq;
  } uh_prev;
  union {
    u_header_T *ptr;
    int seq;
  } uh_alt_next;
  union {
    u_header_T *ptr;
    int seq;
  } uh_alt_prev;
  int uh_seq;
  int uh_walk;
  u_entry_T *uh_entry;
  u_entry_T *uh_getbot_entry;
  pos_T uh_cursor;
  colnr_T uh_cursor_vcol;
  int uh_flags;
  fmark_T uh_namedm[('z' - 'a' + 1)];
  extmark_undo_vec_t uh_extmark;
  visualinfo_T uh_visual;
  time_t uh_time;
  int uh_save_nr;




};


enum {
  UH_CHANGED = 0x01,
  UH_EMPTYBUF = 0x02,
  UH_RELOAD = 0x04,
};
# 16 "/home/ubuntu/neovim/src/nvim/buffer_defs.h" 2



typedef struct {
  buf_T *br_buf;
  int br_fnum;
  int br_buf_free_count;
} bufref_T;
# 73 "/home/ubuntu/neovim/src/nvim/buffer_defs.h"
typedef struct wininfo_S wininfo_T;
typedef struct frame_S frame_T;
typedef uint64_t disptick_T;


typedef struct {
  char *tagname;
  fmark_T fmark;
  int cur_match;
  int cur_fnum;
  char *user_data;
} taggy_T;




typedef struct {
  int wo_arab;

  int wo_bri;

  char *wo_briopt;

  int wo_diff;

  char *wo_fdc;

  char *wo_fdc_save;

  int wo_fen;

  int wo_fen_save;


  char *wo_fdi;

  OptInt wo_fdl;

  OptInt wo_fdl_save;


  char *wo_fdm;

  char *wo_fdm_save;

  OptInt wo_fml;

  OptInt wo_fdn;

  char *wo_fde;

  char *wo_fdt;

  char *wo_fmr;

  int wo_lbr;

  int wo_list;

  int wo_nu;

  int wo_rnu;

  char *wo_ve;

  unsigned wo_ve_flags;

  OptInt wo_nuw;

  int wo_wfb;

  int wo_wfh;

  int wo_wfw;

  int wo_pvw;

  int wo_rl;

  char *wo_rlc;

  OptInt wo_scr;

  int wo_sms;

  int wo_spell;

  int wo_cuc;

  int wo_cul;

  char *wo_culopt;

  char *wo_cc;

  char *wo_sbr;

  char *wo_stc;

  char *wo_stl;

  char *wo_wbr;

  int wo_scb;

  int wo_diff_saved;

  int wo_scb_save;

  int wo_wrap;

  int wo_wrap_save;

  char *wo_cocu;

  OptInt wo_cole;

  int wo_crb;

  int wo_crb_save;

  char *wo_scl;

  OptInt wo_siso;

  OptInt wo_so;

  char *wo_winhl;

  char *wo_lcs;

  char *wo_fcs;

  OptInt wo_winbl;


  LastSet wo_script_ctx[WV_COUNT];

} winopt_T;
# 221 "/home/ubuntu/neovim/src/nvim/buffer_defs.h"
struct wininfo_S {
  wininfo_T *wi_next;
  wininfo_T *wi_prev;
  win_T *wi_win;
  fmark_T wi_mark;
  
# 226 "/home/ubuntu/neovim/src/nvim/buffer_defs.h" 3 4
 _Bool 
# 226 "/home/ubuntu/neovim/src/nvim/buffer_defs.h"
      wi_optset;
  winopt_T wi_opt;
  
# 228 "/home/ubuntu/neovim/src/nvim/buffer_defs.h" 3 4
 _Bool 
# 228 "/home/ubuntu/neovim/src/nvim/buffer_defs.h"
      wi_fold_manual;
  garray_T wi_folds;
  int wi_changelistidx;
};
# 251 "/home/ubuntu/neovim/src/nvim/buffer_defs.h"
typedef struct qf_info_S qf_info_T;


typedef struct {
  proftime_T total;
  proftime_T slowest;
  int count;
  int match;
} syn_time_T;



typedef struct {
  hashtab_T b_keywtab;
  hashtab_T b_keywtab_ic;
  
# 266 "/home/ubuntu/neovim/src/nvim/buffer_defs.h" 3 4
 _Bool 
# 266 "/home/ubuntu/neovim/src/nvim/buffer_defs.h"
      b_syn_error;
  
# 267 "/home/ubuntu/neovim/src/nvim/buffer_defs.h" 3 4
 _Bool 
# 267 "/home/ubuntu/neovim/src/nvim/buffer_defs.h"
      b_syn_slow;
  int b_syn_ic;
  int b_syn_foldlevel;
  int b_syn_spell;
  garray_T b_syn_patterns;
  garray_T b_syn_clusters;
  int b_spell_cluster_id;
  int b_nospell_cluster_id;
  int b_syn_containedin;

  int b_syn_sync_flags;
  int16_t b_syn_sync_id;
  linenr_T b_syn_sync_minlines;
  linenr_T b_syn_sync_maxlines;
  linenr_T b_syn_sync_linebreaks;
  char *b_syn_linecont_pat;
  regprog_T *b_syn_linecont_prog;
  syn_time_T b_syn_linecont_time;
  int b_syn_linecont_ic;
  int b_syn_topgrp;
  int b_syn_conceal;
  int b_syn_folditems;
# 302 "/home/ubuntu/neovim/src/nvim/buffer_defs.h"
  synstate_T *b_sst_array;
  int b_sst_len;
  synstate_T *b_sst_first;
  synstate_T *b_sst_firstfree;
  int b_sst_freecount;
  linenr_T b_sst_check_lnum;
  disptick_T b_sst_lasttick;


  garray_T b_langp;
  
# 312 "/home/ubuntu/neovim/src/nvim/buffer_defs.h" 3 4
 _Bool 
# 312 "/home/ubuntu/neovim/src/nvim/buffer_defs.h"
      b_spell_ismw[256];
  char *b_spell_ismw_mb;
  char *b_p_spc;
  regprog_T *b_cap_prog;
  char *b_p_spf;
  char *b_p_spl;
  char *b_p_spo;


  unsigned b_p_spo_flags;
  int b_cjk;
  uint8_t b_syn_chartab[32];
  char *b_syn_isk;
} synblock_T;




typedef struct { typval_T di_tv; uint8_t di_flags; char di_key[sizeof("changedtick")]; } ChangedtickDictItem;

typedef struct {
  LuaRef on_lines;
  LuaRef on_bytes;
  LuaRef on_changedtick;
  LuaRef on_detach;
  LuaRef on_reload;
  
# 338 "/home/ubuntu/neovim/src/nvim/buffer_defs.h" 3 4
 _Bool 
# 338 "/home/ubuntu/neovim/src/nvim/buffer_defs.h"
      utf_sizes;
  
# 339 "/home/ubuntu/neovim/src/nvim/buffer_defs.h" 3 4
 _Bool 
# 339 "/home/ubuntu/neovim/src/nvim/buffer_defs.h"
      preview;
} BufUpdateCallbacks;
# 356 "/home/ubuntu/neovim/src/nvim/buffer_defs.h"
struct file_buffer {
  handle_T handle;


  memline_T b_ml;

  buf_T *b_next;
  buf_T *b_prev;

  int b_nwindows;

  int b_flags;
  int b_locked;

  int b_locked_split;

  int b_ro_locked;






  char *b_ffname;
  char *b_sfname;

  char *b_fname;


  
# 385 "/home/ubuntu/neovim/src/nvim/buffer_defs.h" 3 4
 _Bool 
# 385 "/home/ubuntu/neovim/src/nvim/buffer_defs.h"
      file_id_valid;
  FileID file_id;

  int b_changed;

  
# 390 "/home/ubuntu/neovim/src/nvim/buffer_defs.h" 3 4
 _Bool 
# 390 "/home/ubuntu/neovim/src/nvim/buffer_defs.h"
      b_changed_invalid;






  ChangedtickDictItem changedtick_di;

  varnumber_T b_last_changedtick;

  varnumber_T b_last_changedtick_i;
  varnumber_T b_last_changedtick_pum;

  
# 404 "/home/ubuntu/neovim/src/nvim/buffer_defs.h" 3 4
 _Bool 
# 404 "/home/ubuntu/neovim/src/nvim/buffer_defs.h"
      b_saving;




  
# 409 "/home/ubuntu/neovim/src/nvim/buffer_defs.h" 3 4
 _Bool 
# 409 "/home/ubuntu/neovim/src/nvim/buffer_defs.h"
      b_mod_set;

  linenr_T b_mod_top;
  linenr_T b_mod_bot;

  linenr_T b_mod_xlines;

  wininfo_T *b_wininfo;
  disptick_T b_mod_tick_syn;
  disptick_T b_mod_tick_decor;


  int64_t b_mtime;
  int64_t b_mtime_ns;
  int64_t b_mtime_read;
  int64_t b_mtime_read_ns;
  uint64_t b_orig_size;
  int b_orig_mode;
  time_t b_last_used;


  fmark_T b_namedm[('z' - 'a' + 1)];


  visualinfo_T b_visual;
  int b_visual_mode_eval;

  fmark_T b_last_cursor;

  fmark_T b_last_insert;
  fmark_T b_last_change;


  fmark_T b_changelist[100];
  int b_changelistlen;
  
# 444 "/home/ubuntu/neovim/src/nvim/buffer_defs.h" 3 4
 _Bool 
# 444 "/home/ubuntu/neovim/src/nvim/buffer_defs.h"
      b_new_change;



  uint64_t b_chartab[4];


  mapblock_T *(b_maphash[256]);


  mapblock_T *b_first_abbr;

  garray_T b_ucmds;

  pos_T b_op_start;
  pos_T b_op_start_orig;
  pos_T b_op_end;

  
# 462 "/home/ubuntu/neovim/src/nvim/buffer_defs.h" 3 4
 _Bool 
# 462 "/home/ubuntu/neovim/src/nvim/buffer_defs.h"
      b_marks_read;

  
# 464 "/home/ubuntu/neovim/src/nvim/buffer_defs.h" 3 4
 _Bool 
# 464 "/home/ubuntu/neovim/src/nvim/buffer_defs.h"
      b_modified_was_set;
  
# 465 "/home/ubuntu/neovim/src/nvim/buffer_defs.h" 3 4
 _Bool 
# 465 "/home/ubuntu/neovim/src/nvim/buffer_defs.h"
      b_did_filetype;
  
# 466 "/home/ubuntu/neovim/src/nvim/buffer_defs.h" 3 4
 _Bool 
# 466 "/home/ubuntu/neovim/src/nvim/buffer_defs.h"
      b_keep_filetype;
# 475 "/home/ubuntu/neovim/src/nvim/buffer_defs.h"
  
# 475 "/home/ubuntu/neovim/src/nvim/buffer_defs.h" 3 4
 _Bool 
# 475 "/home/ubuntu/neovim/src/nvim/buffer_defs.h"
      b_au_did_filetype;


  u_header_T *b_u_oldhead;
  u_header_T *b_u_newhead;

  u_header_T *b_u_curhead;
  int b_u_numhead;
  
# 483 "/home/ubuntu/neovim/src/nvim/buffer_defs.h" 3 4
 _Bool 
# 483 "/home/ubuntu/neovim/src/nvim/buffer_defs.h"
      b_u_synced;
  int b_u_seq_last;
  int b_u_save_nr_last;
  int b_u_seq_cur;
  time_t b_u_time_cur;
  int b_u_save_nr_cur;


  char *b_u_line_ptr;
  linenr_T b_u_line_lnum;
  colnr_T b_u_line_colnr;

  
# 495 "/home/ubuntu/neovim/src/nvim/buffer_defs.h" 3 4
 _Bool 
# 495 "/home/ubuntu/neovim/src/nvim/buffer_defs.h"
      b_scanned;


  OptInt b_p_iminsert;
  OptInt b_p_imsearch;





  int16_t b_kmap_state;


  garray_T b_kmap_ga;




  
# 513 "/home/ubuntu/neovim/src/nvim/buffer_defs.h" 3 4
 _Bool 
# 513 "/home/ubuntu/neovim/src/nvim/buffer_defs.h"
      b_p_initialized;

  LastSet b_p_script_ctx[BV_COUNT];

  int b_p_ai;
  int b_p_ai_nopaste;
  char *b_p_bkc;
  unsigned b_bkc_flags;
  int b_p_ci;
  int b_p_bin;
  int b_p_bomb;
  char *b_p_bh;
  char *b_p_bt;
  int b_has_qf_entry;
  int b_p_bl;
  OptInt b_p_channel;
  int b_p_cin;
  char *b_p_cino;
  char *b_p_cink;
  char *b_p_cinw;
  char *b_p_cinsd;
  char *b_p_com;
  char *b_p_cms;
  char *b_p_cot;
  unsigned b_cot_flags;
  char *b_p_cpt;



  char *b_p_cfu;
  Callback b_cfu_cb;
  char *b_p_ofu;
  Callback b_ofu_cb;
  char *b_p_tfu;
  Callback b_tfu_cb;
  int b_p_eof;
  int b_p_eol;
  int b_p_fixeol;
  int b_p_et;
  int b_p_et_nobin;
  int b_p_et_nopaste;
  char *b_p_fenc;
  char *b_p_ff;
  char *b_p_ft;
  char *b_p_fo;
  char *b_p_flp;
  int b_p_inf;
  char *b_p_isk;
  char *b_p_def;
  char *b_p_inc;
  char *b_p_inex;
  uint32_t b_p_inex_flags;
  char *b_p_inde;
  uint32_t b_p_inde_flags;
  char *b_p_indk;
  char *b_p_fp;
  char *b_p_fex;
  uint32_t b_p_fex_flags;
  char *b_p_kp;
  int b_p_lisp;
  char *b_p_lop;
  char *b_p_menc;
  char *b_p_mps;
  int b_p_ml;
  int b_p_ml_nobin;
  int b_p_ma;
  char *b_p_nf;
  int b_p_pi;
  char *b_p_qe;
  int b_p_ro;
  OptInt b_p_sw;
  OptInt b_p_scbk;
  int b_p_si;
  OptInt b_p_sts;
  OptInt b_p_sts_nopaste;
  char *b_p_sua;
  int b_p_swf;
  OptInt b_p_smc;
  char *b_p_syn;
  OptInt b_p_ts;
  OptInt b_p_tw;
  OptInt b_p_tw_nobin;
  OptInt b_p_tw_nopaste;
  OptInt b_p_wm;
  OptInt b_p_wm_nobin;
  OptInt b_p_wm_nopaste;
  char *b_p_vsts;
  colnr_T *b_p_vsts_array;
  char *b_p_vsts_nopaste;
  char *b_p_vts;
  colnr_T *b_p_vts_array;
  char *b_p_keymap;


  char *b_p_gp;
  char *b_p_mp;
  char *b_p_efm;
  char *b_p_ep;
  char *b_p_path;
  int b_p_ar;
  char *b_p_tags;
  char *b_p_tc;
  unsigned b_tc_flags;
  char *b_p_dict;
  char *b_p_tsr;
  char *b_p_tsrfu;
  Callback b_tsrfu_cb;
  OptInt b_p_ul;
  int b_p_udf;
  char *b_p_lw;




  int b_ind_level;
  int b_ind_open_imag;
  int b_ind_no_brace;
  int b_ind_first_open;
  int b_ind_open_extra;
  int b_ind_close_extra;
  int b_ind_open_left_imag;
  int b_ind_jump_label;
  int b_ind_case;
  int b_ind_case_code;
  int b_ind_case_break;
  int b_ind_param;
  int b_ind_func_type;
  int b_ind_comment;
  int b_ind_in_comment;
  int b_ind_in_comment2;
  int b_ind_cpp_baseclass;
  int b_ind_continuation;
  int b_ind_unclosed;
  int b_ind_unclosed2;
  int b_ind_unclosed_noignore;
  int b_ind_unclosed_wrapped;
  int b_ind_unclosed_whiteok;
  int b_ind_matching_paren;
  int b_ind_paren_prev;
  int b_ind_maxparen;
  int b_ind_maxcomment;
  int b_ind_scopedecl;
  int b_ind_scopedecl_code;
  int b_ind_java;
  int b_ind_js;
  int b_ind_keep_case_label;
  int b_ind_hash_comment;
  int b_ind_cpp_namespace;
  int b_ind_if_for_while;
  int b_ind_cpp_extern_c;
  int b_ind_pragma;

  linenr_T b_no_eol_lnum;


  int b_start_eof;
  int b_start_eol;
  int b_start_ffc;
  char *b_start_fenc;
  int b_bad_char;
  int b_start_bomb;

  ScopeDictDictItem b_bufvar;
  dict_T *b_vars;




  
# 681 "/home/ubuntu/neovim/src/nvim/buffer_defs.h" 3 4
 _Bool 
# 681 "/home/ubuntu/neovim/src/nvim/buffer_defs.h"
      b_may_swap;
  
# 682 "/home/ubuntu/neovim/src/nvim/buffer_defs.h" 3 4
 _Bool 
# 682 "/home/ubuntu/neovim/src/nvim/buffer_defs.h"
      b_did_warn;






  
# 689 "/home/ubuntu/neovim/src/nvim/buffer_defs.h" 3 4
 _Bool 
# 689 "/home/ubuntu/neovim/src/nvim/buffer_defs.h"
      b_help;

  
# 691 "/home/ubuntu/neovim/src/nvim/buffer_defs.h" 3 4
 _Bool 
# 691 "/home/ubuntu/neovim/src/nvim/buffer_defs.h"
      b_spell;


  char *b_prompt_text;
  Callback b_prompt_callback;
  Callback b_prompt_interrupt;
  int b_prompt_insert;


  synblock_T b_s;



  struct {
    int max;
    int count[SIGN_SHOW_MAX];
    
# 707 "/home/ubuntu/neovim/src/nvim/buffer_defs.h" 3 4
   _Bool 
# 707 "/home/ubuntu/neovim/src/nvim/buffer_defs.h"
        resized;
    
# 708 "/home/ubuntu/neovim/src/nvim/buffer_defs.h" 3 4
   _Bool 
# 708 "/home/ubuntu/neovim/src/nvim/buffer_defs.h"
        autom;


  } b_signcols;

  Terminal *terminal;

  AdditionalData *additional_data;

  int b_mapped_ctrl_c;

  MarkTree b_marktree[1];
  Map_uint32_tuint32_t b_extmark_ns[1];



  struct { size_t size; size_t capacity; uint64_t *items; } update_channels;

  struct { size_t size; size_t capacity; BufUpdateCallbacks *items; } update_callbacks;


  
# 729 "/home/ubuntu/neovim/src/nvim/buffer_defs.h" 3 4
 _Bool 
# 729 "/home/ubuntu/neovim/src/nvim/buffer_defs.h"
      update_need_codepoints;





  size_t deleted_bytes;
  size_t deleted_bytes2;
  size_t deleted_codepoints;
  size_t deleted_codeunits;


  int flush_count;
};
# 759 "/home/ubuntu/neovim/src/nvim/buffer_defs.h"
typedef struct diffblock_S diff_T;
struct diffblock_S {
  diff_T *df_next;
  linenr_T df_lnum[8];
  linenr_T df_count[8];
  
# 764 "/home/ubuntu/neovim/src/nvim/buffer_defs.h" 3 4
 _Bool 
# 764 "/home/ubuntu/neovim/src/nvim/buffer_defs.h"
      is_linematched;

};
# 776 "/home/ubuntu/neovim/src/nvim/buffer_defs.h"
typedef struct tabpage_S tabpage_T;
struct tabpage_S {
  handle_T handle;
  tabpage_T *tp_next;
  frame_T *tp_topframe;
  win_T *tp_curwin;
  win_T *tp_prevwin;
  win_T *tp_firstwin;
  win_T *tp_lastwin;
  int64_t tp_old_Rows_avail;
  int64_t tp_old_Columns;

  OptInt tp_ch_used;

  diff_T *tp_first_diff;
  buf_T *(tp_diffbuf[8]);
  int tp_diff_invalid;
  int tp_diff_update;
  frame_T *(tp_snapshot[2]);
  ScopeDictDictItem tp_winvar;
  dict_T *tp_vars;
  char *tp_localdir;
  char *tp_prevdir;
};
# 811 "/home/ubuntu/neovim/src/nvim/buffer_defs.h"
typedef struct {
  linenr_T wl_lnum;
  uint16_t wl_size;
  char wl_valid;
  char wl_folded;
  linenr_T wl_lastlnum;
} wline_T;



struct frame_S {
  char fr_layout;
  int fr_width;
  int fr_newwidth;
  int fr_height;
  int fr_newheight;
  frame_T *fr_parent;
  frame_T *fr_next;

  frame_T *fr_prev;


  frame_T *fr_child;
  win_T *fr_win;

};
# 846 "/home/ubuntu/neovim/src/nvim/buffer_defs.h"
typedef struct {
  regmmatch_T rm;

  buf_T *buf;
  linenr_T lnum;
  int attr;
  int attr_cur;
  linenr_T first_lnum;
  colnr_T startcol;
  colnr_T endcol;
  
# 856 "/home/ubuntu/neovim/src/nvim/buffer_defs.h" 3 4
 _Bool 
# 856 "/home/ubuntu/neovim/src/nvim/buffer_defs.h"
      is_addpos;
  
# 857 "/home/ubuntu/neovim/src/nvim/buffer_defs.h" 3 4
 _Bool 
# 857 "/home/ubuntu/neovim/src/nvim/buffer_defs.h"
      has_cursor;
  proftime_T tm;
} match_T;


typedef struct {
  linenr_T lnum;
  colnr_T col;
  int len;
} llpos_T;



typedef struct matchitem matchitem_T;
struct matchitem {
  matchitem_T *mit_next;
  int mit_id;
  int mit_priority;



  char *mit_pattern;
  regmmatch_T mit_match;

  llpos_T *mit_pos_array;
  int mit_pos_count;
  int mit_pos_cur;
  linenr_T mit_toplnum;
  linenr_T mit_botlnum;

  match_T mit_hl;
  int mit_hlg_id;
  int mit_conceal_char;
};

typedef int FloatAnchor;

enum {
  kFloatAnchorEast = 1,
  kFloatAnchorSouth = 2,
};


typedef enum {
  kFloatRelativeEditor = 0,
  kFloatRelativeWindow = 1,
  kFloatRelativeCursor = 2,
  kFloatRelativeMouse = 3,
} FloatRelative;


typedef enum {
  kWinSplitLeft = 0,
  kWinSplitRight = 1,
  kWinSplitAbove = 2,
  kWinSplitBelow = 3,
} WinSplit;

typedef enum {
  kWinStyleUnused = 0,
  kWinStyleMinimal,
} WinStyle;

typedef enum {
  kAlignLeft = 0,
  kAlignCenter = 1,
  kAlignRight = 2,
} AlignTextPos;

typedef enum {
  kBorderTextTitle = 0,
  kBorderTextFooter = 1,
} BorderTextType;


typedef struct {
  Window window;
  lpos_T bufpos;
  int height, width;
  double row, col;
  FloatAnchor anchor;
  FloatRelative relative;
  
# 939 "/home/ubuntu/neovim/src/nvim/buffer_defs.h" 3 4
 _Bool 
# 939 "/home/ubuntu/neovim/src/nvim/buffer_defs.h"
      external;
  
# 940 "/home/ubuntu/neovim/src/nvim/buffer_defs.h" 3 4
 _Bool 
# 940 "/home/ubuntu/neovim/src/nvim/buffer_defs.h"
      focusable;
  WinSplit split;
  int zindex;
  WinStyle style;
  
# 944 "/home/ubuntu/neovim/src/nvim/buffer_defs.h" 3 4
 _Bool 
# 944 "/home/ubuntu/neovim/src/nvim/buffer_defs.h"
      border;
  
# 945 "/home/ubuntu/neovim/src/nvim/buffer_defs.h" 3 4
 _Bool 
# 945 "/home/ubuntu/neovim/src/nvim/buffer_defs.h"
      shadow;
  char border_chars[8][32];
  int border_hl_ids[8];
  int border_attr[8];
  
# 949 "/home/ubuntu/neovim/src/nvim/buffer_defs.h" 3 4
 _Bool 
# 949 "/home/ubuntu/neovim/src/nvim/buffer_defs.h"
      title;
  AlignTextPos title_pos;
  VirtText title_chunks;
  int title_width;
  
# 953 "/home/ubuntu/neovim/src/nvim/buffer_defs.h" 3 4
 _Bool 
# 953 "/home/ubuntu/neovim/src/nvim/buffer_defs.h"
      footer;
  AlignTextPos footer_pos;
  VirtText footer_chunks;
  int footer_width;
  
# 957 "/home/ubuntu/neovim/src/nvim/buffer_defs.h" 3 4
 _Bool 
# 957 "/home/ubuntu/neovim/src/nvim/buffer_defs.h"
      noautocmd;
  
# 958 "/home/ubuntu/neovim/src/nvim/buffer_defs.h" 3 4
 _Bool 
# 958 "/home/ubuntu/neovim/src/nvim/buffer_defs.h"
      fixed;
  
# 959 "/home/ubuntu/neovim/src/nvim/buffer_defs.h" 3 4
 _Bool 
# 959 "/home/ubuntu/neovim/src/nvim/buffer_defs.h"
      hide;
} WinConfig;
# 976 "/home/ubuntu/neovim/src/nvim/buffer_defs.h"
typedef struct {
  int w_topline_save;
  int w_topline_corr;
  pos_T w_cursor_save;
  pos_T w_cursor_corr;
} pos_save_T;


typedef struct {
  schar_T eol;
  schar_T ext;
  schar_T prec;
  schar_T nbsp;
  schar_T space;
  schar_T tab1;
  schar_T tab2;
  schar_T tab3;
  schar_T lead;
  schar_T trail;
  schar_T *multispace;
  schar_T *leadmultispace;
  schar_T conceal;
} lcs_chars_T;


typedef struct {
  schar_T stl;
  schar_T stlnc;
  schar_T wbr;
  schar_T horiz;
  schar_T horizup;
  schar_T horizdown;
  schar_T vert;
  schar_T vertleft;
  schar_T vertright;
  schar_T verthoriz;
  schar_T fold;
  schar_T foldopen;
  schar_T foldclosed;
  schar_T foldsep;
  schar_T diff;
  schar_T msgsep;
  schar_T eob;
  schar_T lastline;
} fcs_chars_T;




struct window_S {
  handle_T handle;

  buf_T *w_buffer;


  synblock_T *w_s;

  int w_ns_hl;
  int w_ns_hl_winhl;
  int w_ns_hl_active;
  int *w_ns_hl_attr;

  Set_uint32_t w_ns_set;

  int w_hl_id_normal;
  int w_hl_attr_normal;
  int w_hl_attr_normalnc;

  int w_hl_needs_update;

  win_T *w_prev;
  win_T *w_next;
  
# 1048 "/home/ubuntu/neovim/src/nvim/buffer_defs.h" 3 4
 _Bool 
# 1048 "/home/ubuntu/neovim/src/nvim/buffer_defs.h"
      w_locked;

  frame_T *w_frame;

  pos_T w_cursor;

  colnr_T w_curswant;



  int w_set_curswant;



  linenr_T w_cursorline;


  linenr_T w_last_cursorline;


  char w_old_visual_mode;
  linenr_T w_old_cursor_lnum;
  colnr_T w_old_cursor_fcol;
  colnr_T w_old_cursor_lcol;
  linenr_T w_old_visual_lnum;
  colnr_T w_old_visual_col;
  colnr_T w_old_curswant;

  linenr_T w_last_cursor_lnum_rnu;


  lcs_chars_T w_p_lcs_chars;


  fcs_chars_T w_p_fcs_chars;



  linenr_T w_topline;

  char w_topline_was_set;

  int w_topfill;
  int w_old_topfill;
  
# 1092 "/home/ubuntu/neovim/src/nvim/buffer_defs.h" 3 4
 _Bool 
# 1092 "/home/ubuntu/neovim/src/nvim/buffer_defs.h"
      w_botfill;

  
# 1094 "/home/ubuntu/neovim/src/nvim/buffer_defs.h" 3 4
 _Bool 
# 1094 "/home/ubuntu/neovim/src/nvim/buffer_defs.h"
      w_old_botfill;
  colnr_T w_leftcol;


  colnr_T w_skipcol;




  linenr_T w_last_topline;
  int w_last_topfill;
  colnr_T w_last_leftcol;
  colnr_T w_last_skipcol;
  int w_last_width;
  int w_last_height;





  int w_winrow;
  int w_height;

  int w_prev_winrow;
  int w_prev_height;
  int w_status_height;
  int w_winbar_height;
  int w_wincol;
  int w_width;
  int w_hsep_height;
  int w_vsep_width;
  pos_save_T w_save_cursor;
  
# 1126 "/home/ubuntu/neovim/src/nvim/buffer_defs.h" 3 4
 _Bool 
# 1126 "/home/ubuntu/neovim/src/nvim/buffer_defs.h"
      w_do_win_fix_cursor;

  int w_winrow_off;
  int w_wincol_off;




  int w_height_inner;
  int w_width_inner;

  int w_height_request;
  int w_width_request;

  int w_border_adj[4];

  int w_height_outer;
  int w_width_outer;







  int w_valid;
  pos_T w_valid_cursor;
  colnr_T w_valid_leftcol;
  colnr_T w_valid_skipcol;

  
# 1156 "/home/ubuntu/neovim/src/nvim/buffer_defs.h" 3 4
 _Bool 
# 1156 "/home/ubuntu/neovim/src/nvim/buffer_defs.h"
      w_viewport_invalid;
  linenr_T w_viewport_last_topline;
  linenr_T w_viewport_last_botline;
  linenr_T w_viewport_last_topfill;
  linenr_T w_viewport_last_skipcol;



  int w_cline_height;
  
# 1165 "/home/ubuntu/neovim/src/nvim/buffer_defs.h" 3 4
 _Bool 
# 1165 "/home/ubuntu/neovim/src/nvim/buffer_defs.h"
      w_cline_folded;

  int w_cline_row;

  colnr_T w_virtcol;
# 1179 "/home/ubuntu/neovim/src/nvim/buffer_defs.h"
  int w_wrow, w_wcol;

  linenr_T w_botline;

  int w_empty_rows;
  int w_filler_rows;
# 1195 "/home/ubuntu/neovim/src/nvim/buffer_defs.h"
  int w_lines_valid;
  wline_T *w_lines;

  garray_T w_folds;
  
# 1199 "/home/ubuntu/neovim/src/nvim/buffer_defs.h" 3 4
 _Bool 
# 1199 "/home/ubuntu/neovim/src/nvim/buffer_defs.h"
      w_fold_manual;

  
# 1201 "/home/ubuntu/neovim/src/nvim/buffer_defs.h" 3 4
 _Bool 
# 1201 "/home/ubuntu/neovim/src/nvim/buffer_defs.h"
      w_foldinvalid;

  int w_nrwidth;

  int w_scwidth;
  int w_minscwidth;
  int w_maxscwidth;



  int w_redr_type;
  int w_upd_rows;

  linenr_T w_redraw_top;
  linenr_T w_redraw_bot;
  
# 1216 "/home/ubuntu/neovim/src/nvim/buffer_defs.h" 3 4
 _Bool 
# 1216 "/home/ubuntu/neovim/src/nvim/buffer_defs.h"
      w_redr_status;
  
# 1217 "/home/ubuntu/neovim/src/nvim/buffer_defs.h" 3 4
 _Bool 
# 1217 "/home/ubuntu/neovim/src/nvim/buffer_defs.h"
      w_redr_border;
  
# 1218 "/home/ubuntu/neovim/src/nvim/buffer_defs.h" 3 4
 _Bool 
# 1218 "/home/ubuntu/neovim/src/nvim/buffer_defs.h"
      w_redr_statuscol;


  pos_T w_stl_cursor;
  colnr_T w_stl_virtcol;
  linenr_T w_stl_topline;
  linenr_T w_stl_line_count;
  int w_stl_topfill;
  char w_stl_empty;
  int w_stl_recording;
  int w_stl_state;
  int w_stl_visual_mode;

  int w_alt_fnum;

  alist_T *w_alist;
  int w_arg_idx;

  int w_arg_idx_invalid;

  char *w_localdir;
  char *w_prevdir;





  winopt_T w_onebuf_opt;
  winopt_T w_allbuf_opt;




  uint32_t w_p_stl_flags;
  uint32_t w_p_wbr_flags;
  uint32_t w_p_fde_flags;
  uint32_t w_p_fdt_flags;
  int *w_p_cc_cols;
  uint8_t w_p_culopt_flags;

  int w_briopt_min;
  int w_briopt_shift;
  
# 1260 "/home/ubuntu/neovim/src/nvim/buffer_defs.h" 3 4
 _Bool 
# 1260 "/home/ubuntu/neovim/src/nvim/buffer_defs.h"
      w_briopt_sbr;
  int w_briopt_list;
  int w_briopt_vcol;

  int w_scbind_pos;

  ScopeDictDictItem w_winvar;
  dict_T *w_vars;




  pos_T w_pcmark;
  pos_T w_prev_pcmark;


  xfmark_T w_jumplist[100];
  int w_jumplistlen;
  int w_jumplistidx;

  int w_changelistidx;

  matchitem_T *w_match_head;
  int w_next_match_id;





  taggy_T w_tagstack[20];
  int w_tagstackidx;
  int w_tagstacklen;

  ScreenGrid w_grid;
  ScreenGrid w_grid_alloc;
  
# 1295 "/home/ubuntu/neovim/src/nvim/buffer_defs.h" 3 4
 _Bool 
# 1295 "/home/ubuntu/neovim/src/nvim/buffer_defs.h"
      w_pos_changed;
  
# 1296 "/home/ubuntu/neovim/src/nvim/buffer_defs.h" 3 4
 _Bool 
# 1296 "/home/ubuntu/neovim/src/nvim/buffer_defs.h"
      w_floating;
  
# 1297 "/home/ubuntu/neovim/src/nvim/buffer_defs.h" 3 4
 _Bool 
# 1297 "/home/ubuntu/neovim/src/nvim/buffer_defs.h"
      w_float_is_info;
  WinConfig w_config;





  int w_fraction;
  int w_prev_fraction_row;

  linenr_T w_nrwidth_line_count;
  linenr_T w_statuscol_line_count;
  int w_nrwidth_width;

  qf_info_T *w_llist;


  qf_info_T *w_llist_ref;


  StlClickDefinition *w_status_click_defs;

  size_t w_status_click_defs_size;


  StlClickDefinition *w_winbar_click_defs;

  size_t w_winbar_click_defs_size;


  StlClickDefinition *w_statuscol_click_defs;

  size_t w_statuscol_click_defs_size;
};
# 20 "/home/ubuntu/neovim/src/nvim/regexp.c" 2
# 1 "/home/ubuntu/neovim/src/nvim/charset.h" 1
       




# 1 "/home/ubuntu/neovim/src/nvim/option_vars.h" 1
       
# 207 "/home/ubuntu/neovim/src/nvim/option_vars.h"
enum {
  SHM_RO = 'r',
  SHM_MOD = 'm',
  SHM_LINES = 'l',
  SHM_WRI = 'w',
  SHM_ABBREVIATIONS = 'a',
  SHM_WRITE = 'W',
  SHM_TRUNC = 't',
  SHM_TRUNCALL = 'T',
  SHM_OVER = 'o',
  SHM_OVERALL = 'O',
  SHM_SEARCH = 's',
  SHM_ATTENTION = 'A',
  SHM_INTRO = 'I',
  SHM_COMPLETIONMENU = 'c',
  SHM_COMPLETIONSCAN = 'C',
  SHM_RECORDING = 'q',
  SHM_FILEINFO = 'F',
  SHM_SEARCHCOUNT = 'S',
};
# 272 "/home/ubuntu/neovim/src/nvim/option_vars.h"
enum {
  STL_FILEPATH = 'f',
  STL_FULLPATH = 'F',
  STL_FILENAME = 't',
  STL_COLUMN = 'c',
  STL_VIRTCOL = 'v',
  STL_VIRTCOL_ALT = 'V',
  STL_LINE = 'l',
  STL_NUMLINES = 'L',
  STL_BUFNO = 'n',
  STL_KEYMAP = 'k',
  STL_OFFSET = 'o',
  STL_OFFSET_X = 'O',
  STL_BYTEVAL = 'b',
  STL_BYTEVAL_X = 'B',
  STL_ROFLAG = 'r',
  STL_ROFLAG_ALT = 'R',
  STL_HELPFLAG = 'h',
  STL_HELPFLAG_ALT = 'H',
  STL_FILETYPE = 'y',
  STL_FILETYPE_ALT = 'Y',
  STL_PREVIEWFLAG = 'w',
  STL_PREVIEWFLAG_ALT = 'W',
  STL_MODIFIED = 'm',
  STL_MODIFIED_ALT = 'M',
  STL_QUICKFIX = 'q',
  STL_PERCENTAGE = 'p',
  STL_ALTPERCENT = 'P',
  STL_ARGLISTSTAT = 'a',
  STL_PAGENUM = 'N',
  STL_SHOWCMD = 'S',
  STL_FOLDCOL = 'C',
  STL_SIGNCOL = 's',
  STL_VIM_EXPR = '{',
  STL_SEPARATE = '=',
  STL_TRUNCMARK = '<',
  STL_USER_HL = '*',
  STL_HIGHLIGHT = '#',
  STL_TABPAGENR = 'T',
  STL_TABCLOSENR = 'X',
  STL_CLICK_FUNC = '@',
};
# 353 "/home/ubuntu/neovim/src/nvim/option_vars.h"
extern char *p_ambw;
extern int p_acd;
extern int p_ai;
extern int p_bin;
extern int p_bomb;
extern int p_bl;
extern int p_cin;
extern OptInt p_channel;
extern char *p_cink;
extern char *p_cinsd;
extern char *p_cinw;
extern char *p_cfu;
extern char *p_ofu;
extern char *p_tsrfu;
extern int p_ci;
extern int p_ar;
extern int p_aw;
extern int p_awa;
extern char *p_bs;
extern char *p_bg;
extern int p_bk;
extern char *p_bkc;
extern unsigned bkc_flags;





extern char *p_bdir;
extern char *p_bex;
extern char *p_bo;
extern char breakat_flags[256];
extern unsigned bo_flags;
# 408 "/home/ubuntu/neovim/src/nvim/option_vars.h"
extern char *p_bsk;
extern char *p_breakat;
extern char *p_bh;
extern char *p_bt;
extern char *p_cmp;
extern unsigned cmp_flags;


extern char *p_enc;
extern int p_deco;
extern char *p_ccv;
extern char *p_cino;
extern char *p_cedit;
extern char *p_cb;
extern unsigned cb_flags;



extern OptInt p_cwh;
extern OptInt p_ch;
extern char *p_cms;
extern char *p_cpt;
extern OptInt p_columns;
extern int p_confirm;
extern char *p_cot;
extern unsigned cot_flags;
# 449 "/home/ubuntu/neovim/src/nvim/option_vars.h"
extern OptInt p_pb;
extern OptInt p_ph;
extern OptInt p_pw;
extern char *p_com;
extern char *p_cpo;
extern char *p_debug;
extern char *p_def;
extern char *p_inc;
extern char *p_dip;
extern char *p_dex;
extern char *p_dict;
extern int p_dg;
extern char *p_dir;
extern char *p_dy;
extern unsigned dy_flags;





extern char *p_ead;
extern int p_emoji;
extern int p_ea;
extern char *p_ep;
extern int p_eb;
extern char *p_ef;
extern char *p_efm;
extern char *p_gefm;
extern char *p_gp;
extern int p_eof;
extern int p_eol;
extern char *p_ei;
extern int p_et;
extern int p_exrc;
extern char *p_fenc;
extern char *p_fencs;
extern char *p_ff;
extern char *p_ffs;
extern int p_fic;
extern char *p_ft;
extern char *p_fcs;
extern int p_fixeol;
extern char *p_fcl;
extern OptInt p_fdls;
extern char *p_fdo;
extern unsigned fdo_flags;
# 506 "/home/ubuntu/neovim/src/nvim/option_vars.h"
extern char *p_fex;
extern char *p_flp;
extern char *p_fo;
extern char *p_fp;
extern int p_fs;
extern int p_gd;
extern char *p_guicursor;
extern char *p_guifont;
extern char *p_guifontwide;
extern char *p_hf;
extern OptInt p_hh;
extern char *p_hlg;
extern int p_hid;
extern char *p_hl;
extern int p_hls;
extern OptInt p_hi;
extern int p_arshape;
extern int p_icon;
extern char *p_iconstring;
extern int p_ic;
extern OptInt p_iminsert;
extern OptInt p_imsearch;
extern int p_inf;
extern char *p_inex;
extern int p_is;
extern char *p_inde;
extern char *p_indk;
extern char *p_icm;
extern char *p_isf;
extern char *p_isi;
extern char *p_isk;
extern char *p_isp;
extern int p_js;
extern char *p_jop;
extern unsigned jop_flags;



extern char *p_keymap;
extern char *p_kp;
extern char *p_km;
extern char *p_langmap;
extern int p_lnr;
extern int p_lrm;
extern char *p_lm;
extern OptInt p_lines;
extern OptInt p_linespace;
extern int p_lisp;
extern char *p_lop;
extern char *p_lispwords;
extern OptInt p_ls;
extern OptInt p_stal;
extern char *p_lcs;

extern int p_lz;
extern int p_lpl;
extern int p_magic;
extern char *p_menc;
extern char *p_mef;
extern char *p_mp;
extern char *p_mps;
extern OptInt p_mat;
extern OptInt p_mfd;
extern OptInt p_mmd;
extern OptInt p_mmp;
extern OptInt p_mis;
extern char *p_msm;
extern int p_ml;
extern int p_mle;
extern OptInt p_mls;
extern int p_ma;
extern int p_mod;
extern char *p_mouse;
extern char *p_mousem;
extern int p_mousemev;
extern int p_mousef;
extern int p_mh;
extern char *p_mousescroll;
extern OptInt p_mousescroll_vert ;
extern OptInt p_mousescroll_hor ;
extern OptInt p_mouset;
extern int p_more;
extern char *p_nf;
extern char *p_opfunc;
extern char *p_para;
extern int p_paste;
extern char *p_pex;
extern char *p_pm;
extern char *p_path;
extern char *p_cdpath;
extern int p_pi;
extern OptInt p_pyx;
extern char *p_qe;
extern int p_ro;
extern char *p_rdb;
extern unsigned rdb_flags;
# 610 "/home/ubuntu/neovim/src/nvim/option_vars.h"
extern OptInt p_rdt;
extern OptInt p_re;
extern OptInt p_report;
extern OptInt p_pvh;
extern int p_ari;
extern int p_ri;
extern int p_ru;
extern char *p_ruf;
extern char *p_pp;
extern char *p_qftf;
extern char *p_rtp;
extern OptInt p_scbk;
extern OptInt p_sj;
extern OptInt p_so;
extern char *p_sbo;
extern char *p_sections;
extern int p_secure;
extern char *p_sel;
extern char *p_slm;
extern char *p_ssop;
extern unsigned ssop_flags;
# 651 "/home/ubuntu/neovim/src/nvim/option_vars.h"
extern char *p_sh;
extern char *p_shcf;
extern char *p_sp;
extern char *p_shq;
extern char *p_sxq;
extern char *p_sxe;
extern char *p_srr;
extern int p_stmp;



extern char *p_stl;
extern char *p_wbr;
extern int p_sr;
extern OptInt p_sw;
extern char *p_shm;
extern char *p_sbr;
extern int p_sc;
extern char *p_sloc;
extern int p_sft;
extern int p_sm;
extern int p_smd;
extern OptInt p_ss;
extern OptInt p_siso;
extern int p_scs;
extern int p_si;
extern int p_sta;
extern OptInt p_sts;
extern int p_sb;
extern char *p_sua;
extern int p_swf;
extern OptInt p_smc;
extern OptInt p_tpm;
extern char *p_tal;
extern char *p_tpf;
extern unsigned tpf_flags;







extern char *p_tfu;
extern char *p_spc;
extern char *p_spf;
extern char *p_spl;
extern char *p_spo;
extern unsigned spo_flags;
extern char *p_sps;
extern int p_spr;
extern int p_sol;
extern char *p_su;
extern char *p_swb;
extern unsigned swb_flags;







extern char *p_spk;
extern char *p_syn;
extern char *p_tcl;
extern unsigned tcl_flags;


extern OptInt p_ts;
extern int p_tbs;
extern char *p_tc;
extern unsigned tc_flags;





extern OptInt p_tl;
extern int p_tr;
extern char *p_tags;
extern int p_tgst;
extern int p_tbidi;
extern OptInt p_tw;
extern int p_to;
extern int p_timeout;
extern OptInt p_tm;
extern int p_title;
extern OptInt p_titlelen;
extern char *p_titleold;
extern char *p_titlestring;
extern char *p_tsr;
extern int p_tgc;
extern int p_ttimeout;
extern OptInt p_ttm;
extern char *p_udir;
extern int p_udf;
extern OptInt p_ul;
extern OptInt p_ur;
extern OptInt p_uc;
extern OptInt p_ut;
extern char *p_shada;
extern char *p_shadafile;
extern int p_termsync;
extern char *p_vsts;
extern char *p_vts;
extern char *p_vdir;
extern char *p_vop;
extern unsigned vop_flags;
extern int p_vb;
extern char *p_ve;
extern unsigned ve_flags;






extern OptInt p_verbose;



extern char *p_vfile;

extern int p_warn;
extern char *p_wop;
extern unsigned wop_flags;



extern OptInt p_window;
extern char *p_wak;
extern char *p_wig;
extern char *p_ww;
extern OptInt p_wc;
extern OptInt p_wcm;
extern int p_wic;
extern char *p_wim;
extern int p_wmnu;
extern OptInt p_wh;
extern OptInt p_wmh;
extern OptInt p_wmw;
extern OptInt p_wiw;
extern OptInt p_wm;
extern int p_ws;
extern int p_write;
extern int p_wa;
extern int p_wb;
extern OptInt p_wd;
extern int p_cdh;
# 7 "/home/ubuntu/neovim/src/nvim/charset.h" 2
# 1 "/home/ubuntu/neovim/src/nvim/strings.h" 1
       

# 1 "/usr/lib/gcc/aarch64-linux-gnu/9/include/stdarg.h" 1 3 4
# 4 "/home/ubuntu/neovim/src/nvim/strings.h" 2
# 13 "/home/ubuntu/neovim/src/nvim/strings.h"
typedef struct { size_t size; size_t capacity; char *items; } StringBuilder;





typedef struct {
  int key;
  char *value;
  size_t length;
} keyvalue_T;
# 41 "/home/ubuntu/neovim/src/nvim/strings.h"
static inline char *strappend(char *const dst, const char *const src)
  FUNC_ATTR_ALWAYS_INLINE FUNC_ATTR_NONNULL_ALL
    FUNC_ATTR_NONNULL_RET FUNC_ATTR_WARN_UNUSED_RESULT
{
  const size_t src_len = strlen(src);
  return (char *)memmove(dst, src, src_len) + src_len;
}
# 8 "/home/ubuntu/neovim/src/nvim/charset.h" 2


typedef enum {
  STR2NR_DEC = 0,
  STR2NR_BIN = (1 << 0),
  STR2NR_OCT = (1 << 1),
  STR2NR_HEX = (1 << 2),
  STR2NR_OOCT = (1 << 3),







  STR2NR_FORCE = (1 << 7),

  STR2NR_ALL = STR2NR_BIN | STR2NR_OCT | STR2NR_HEX | STR2NR_OOCT,

  STR2NR_NO_OCT = STR2NR_BIN | STR2NR_HEX | STR2NR_OOCT,
  STR2NR_QUOTE = (1 << 4),
} ChStr2NrFlags;
# 38 "/home/ubuntu/neovim/src/nvim/charset.h"
static inline 
# 38 "/home/ubuntu/neovim/src/nvim/charset.h" 3 4
             _Bool 
# 38 "/home/ubuntu/neovim/src/nvim/charset.h"
                  vim_isbreak(int c)
  FUNC_ATTR_CONST FUNC_ATTR_ALWAYS_INLINE
{
  return breakat_flags[(uint8_t)c];
}
# 21 "/home/ubuntu/neovim/src/nvim/regexp.c" 2
# 1 "/home/ubuntu/neovim/src/nvim/errors.h" 1
       

# 1 "/home/ubuntu/neovim/src/nvim/gettext_defs.h" 1
       


# 1 "/usr/include/libintl.h" 1 3 4
# 34 "/usr/include/libintl.h" 3 4






# 39 "/usr/include/libintl.h" 3 4
extern char *gettext (const char *__msgid)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__format_arg__ (1)));



extern char *dgettext (const char *__domainname, const char *__msgid)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__format_arg__ (2)));
extern char *__dgettext (const char *__domainname, const char *__msgid)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__format_arg__ (2)));



extern char *dcgettext (const char *__domainname,
   const char *__msgid, int __category)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__format_arg__ (2)));
extern char *__dcgettext (const char *__domainname,
     const char *__msgid, int __category)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__format_arg__ (2)));




extern char *ngettext (const char *__msgid1, const char *__msgid2,
         unsigned long int __n)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__format_arg__ (1))) __attribute__ ((__format_arg__ (2)));



extern char *dngettext (const char *__domainname, const char *__msgid1,
   const char *__msgid2, unsigned long int __n)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__format_arg__ (2))) __attribute__ ((__format_arg__ (3)));



extern char *dcngettext (const char *__domainname, const char *__msgid1,
    const char *__msgid2, unsigned long int __n,
    int __category)
     __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__format_arg__ (2))) __attribute__ ((__format_arg__ (3)));





extern char *textdomain (const char *__domainname) __attribute__ ((__nothrow__ , __leaf__));



extern char *bindtextdomain (const char *__domainname,
        const char *__dirname) __attribute__ ((__nothrow__ , __leaf__));



extern char *bind_textdomain_codeset (const char *__domainname,
          const char *__codeset) __attribute__ ((__nothrow__ , __leaf__));
# 121 "/usr/include/libintl.h" 3 4

# 5 "/home/ubuntu/neovim/src/nvim/gettext_defs.h" 2
# 4 "/home/ubuntu/neovim/src/nvim/errors.h" 2







# 10 "/home/ubuntu/neovim/src/nvim/errors.h"
extern const char e_abort[] ;
extern const char e_afterinit[] ;
extern const char e_api_spawn_failed[] ;
extern const char e_argreq[] ;
extern const char e_backslash[] ;
extern const char e_cmdwin[] ;
extern const char e_curdir[] ;
extern const char e_invalid_buffer_name_str[] ;
extern const char e_command_too_recursive[] ;
extern const char e_buffer_is_not_loaded[] ;
extern const char e_endif[] ;
extern const char e_endtry[] ;
extern const char e_endwhile[] ;
extern const char e_endfor[] ;
extern const char e_while[] ;
extern const char e_for[] ;
extern const char e_exists[] ;
extern const char e_failed[] ;
extern const char e_internal[] ;
extern const char e_intern2[] ;
extern const char e_interr[] ;
extern const char e_invarg[] ;
extern const char e_invarg2[] ;
extern const char e_invargval[] ;
extern const char e_invargNval[] ;
extern const char e_duparg2[] ;
extern const char e_invexpr2[] ;
extern const char e_invrange[] ;
extern const char e_invcmd[] ;
extern const char e_isadir2[] ;
extern const char e_no_spell[] ;
extern const char e_invchan[] ;
extern const char e_invchanjob[] ;
extern const char e_jobtblfull[] ;
extern const char e_jobspawn[] ;
extern const char e_channotpty[] ;
extern const char e_stdiochan2[] ;
extern const char e_invstream[] ;
extern const char e_invstreamrpc[] ;
extern const char e_streamkey[] ;
extern const char e_libcall[] ;
extern const char e_fsync[] ;
extern const char e_mkdir[] ;
extern const char e_markinval[] ;
extern const char e_marknotset[] ;
extern const char e_modifiable[] ;
extern const char e_nesting[] ;
extern const char e_noalt[] ;
extern const char e_noabbr[] ;
extern const char e_nobang[] ;
extern const char e_nogroup[] ;
extern const char e_noinstext[] ;
extern const char e_nolastcmd[] ;
extern const char e_nomap[] ;
extern const char e_nomatch[] ;
extern const char e_nomatch2[] ;
extern const char e_noname[] ;
extern const char e_nopresub[] ;
extern const char e_noprev[] ;
extern const char e_noprevre[] ;
extern const char e_norange[] ;
extern const char e_noroom[] ;
extern const char e_notmp[] ;
extern const char e_notopen[] ;
extern const char e_notopen_2[] ;
extern const char e_notread[] ;
extern const char e_null[] ;
extern const char e_number_exp[] ;
extern const char e_openerrf[] ;
extern const char e_outofmem[] ;
extern const char e_patnotf[] ;
extern const char e_patnotf2[] ;
extern const char e_positive[] ;
extern const char e_prev_dir[] ;

extern const char e_no_errors[] ;
extern const char e_loclist[] ;
extern const char e_re_damg[] ;
extern const char e_re_corr[] ;
extern const char e_readonly[] ;
extern const char e_letwrong[] ;
extern const char e_illvar[] ;
extern const char e_cannot_mod[] ;
extern const char e_readonlyvar[] ;
extern const char e_stringreq[] ;
extern const char e_dictreq[] ;
extern const char e_blobidx[] ;
extern const char e_invalblob[] ;
extern const char e_toomanyarg[] ;
extern const char e_toofewarg[] ;
extern const char e_dictkey[] ;
extern const char e_dictkey_len[] ;
extern const char e_listreq[] ;
extern const char e_listblobreq[] ;
extern const char e_listdictarg[] ;
extern const char e_listdictblobarg[] ;
extern const char e_readerrf[] ;
extern const char e_sandbox[] ;
extern const char e_secure[] ;
extern const char e_textlock[] ;
extern const char e_screenmode[] ;
extern const char e_scroll[] ;
extern const char e_shellempty[] ;
extern const char e_signdata[] ;
extern const char e_swapclose[] ;
extern const char e_toocompl[] ;
extern const char e_longname[] ;
extern const char e_toomsbra[] ;
extern const char e_toomany[] ;
extern const char e_trailing[] ;
extern const char e_trailing_arg[] ;
extern const char e_umark[] ;
extern const char e_wildexpand[] ;
extern const char e_winheight[] ;
extern const char e_winwidth[] ;
extern const char e_write[] ;
extern const char e_zerocount[] ;
extern const char e_usingsid[] ;
extern const char e_missingparen[] ;
extern const char e_empty_buffer[] ;
extern const char e_nobufnr[] ;

extern const char e_str_not_inside_function[] ;

extern const char e_invalpat[] ;
extern const char e_bufloaded[] ;
extern const char e_notset[] ;
extern const char e_invalidreg[] ;
extern const char e_dirnotf[] ;
extern const char e_au_recursive[] ;
extern const char e_menu_only_exists_in_another_mode[]
;
extern const char e_autocmd_close[] ;
extern const char e_listarg[] ;
extern const char e_unsupportedoption[] ;
extern const char e_fnametoolong[] ;
extern const char e_using_float_as_string[] ;
extern const char e_cannot_edit_other_buf[] ;
extern const char e_using_number_as_bool_nr[] ;
extern const char e_not_callable_type_str[] ;
extern const char e_auabort[] ;

extern const char e_api_error[] ;

extern const char e_luv_api_disabled[] ;

extern const char e_floatonly[] ;
extern const char e_floatexchange[] ;

extern const char e_cannot_define_autocommands_for_all_events[] ;

extern const char e_resulting_text_too_long[] ;

extern const char e_line_number_out_of_range[] ;

extern const char e_highlight_group_name_invalid_char[] ;

extern const char e_highlight_group_name_too_long[] ;

extern const char e_invalid_column_number_nr[] ;
extern const char e_invalid_line_number_nr[] ;

extern const char e_stray_closing_curly_str[]
;
extern const char e_missing_close_curly_str[]
;

extern const char e_val_too_large[] ;

extern const char e_undobang_cannot_redo_or_move_branch[]
;

extern const char e_winfixbuf_cannot_go_to_buffer[]
;

extern const char e_trustfile[] ;

extern const char e_unknown_option2[] ;

extern const char top_bot_msg[] ;
extern const char bot_top_msg[] ;

extern const char line_msg[] ;
# 22 "/home/ubuntu/neovim/src/nvim/regexp.c" 2
# 1 "/home/ubuntu/neovim/src/nvim/eval.h" 1
       


# 1 "/usr/lib/gcc/aarch64-linux-gnu/9/include/stddef.h" 1 3 4
# 5 "/home/ubuntu/neovim/src/nvim/eval.h" 2


# 1 "/home/ubuntu/neovim/src/nvim/channel_defs.h" 1
       




# 1 "/home/ubuntu/neovim/src/nvim/event/defs.h" 1
       

# 1 "/usr/include/assert.h" 1 3 4
# 4 "/home/ubuntu/neovim/src/nvim/event/defs.h" 2







enum { EVENT_HANDLER_MAX_ARGC = 10, };

typedef void (*argv_callback)(void **argv);
typedef struct {
  argv_callback handler;
  void *argv[EVENT_HANDLER_MAX_ARGC];
} Event;



typedef struct multiqueue MultiQueue;
typedef void (*PutCallback)(MultiQueue *multiq, void *data);

typedef struct signal_watcher SignalWatcher;
typedef void (*signal_cb)(SignalWatcher *watcher, int signum, void *data);
typedef void (*signal_close_cb)(SignalWatcher *watcher, void *data);

struct signal_watcher {
  uv_signal_t uv;
  void *data;
  signal_cb cb;
  signal_close_cb close_cb;
  MultiQueue *events;
};

typedef struct time_watcher TimeWatcher;
typedef void (*time_cb)(TimeWatcher *watcher, void *data);

struct time_watcher {
  uv_timer_t uv;
  void *data;
  time_cb cb, close_cb;
  MultiQueue *events;
  
# 44 "/home/ubuntu/neovim/src/nvim/event/defs.h" 3 4
 _Bool 
# 44 "/home/ubuntu/neovim/src/nvim/event/defs.h"
      blockable;
};

typedef struct wbuffer WBuffer;
typedef void (*wbuffer_data_finalizer)(void *data);

struct wbuffer {
  size_t size, refcount;
  char *data;
  wbuffer_data_finalizer cb;
};

typedef struct stream Stream;
typedef struct rstream RStream;
# 66 "/home/ubuntu/neovim/src/nvim/event/defs.h"
typedef size_t (*stream_read_cb)(RStream *stream, const char *read_data, size_t count, void *data,
                                 
# 67 "/home/ubuntu/neovim/src/nvim/event/defs.h" 3 4
                                _Bool 
# 67 "/home/ubuntu/neovim/src/nvim/event/defs.h"
                                     eof);







typedef void (*stream_write_cb)(Stream *stream, void *data, int status);

typedef void (*stream_close_cb)(Stream *stream, void *data);

struct stream {
  
# 80 "/home/ubuntu/neovim/src/nvim/event/defs.h" 3 4
 _Bool 
# 80 "/home/ubuntu/neovim/src/nvim/event/defs.h"
      closed;
  union {
    uv_pipe_t pipe;
    uv_tcp_t tcp;
    uv_idle_t idle;



  } uv;
  uv_stream_t *uvstream;
  uv_file fd;
  void *cb_data;
  stream_close_cb close_cb, internal_close_cb;
  void *close_cb_data, *internal_data;
  size_t pending_reqs;
  MultiQueue *events;


  stream_write_cb write_cb;
  size_t curmem;
  size_t maxmem;
};

struct rstream {
  Stream s;
  
# 105 "/home/ubuntu/neovim/src/nvim/event/defs.h" 3 4
 _Bool 
# 105 "/home/ubuntu/neovim/src/nvim/event/defs.h"
      did_eof;
  
# 106 "/home/ubuntu/neovim/src/nvim/event/defs.h" 3 4
 _Bool 
# 106 "/home/ubuntu/neovim/src/nvim/event/defs.h"
      want_read;
  
# 107 "/home/ubuntu/neovim/src/nvim/event/defs.h" 3 4
 _Bool 
# 107 "/home/ubuntu/neovim/src/nvim/event/defs.h"
      pending_read;
  
# 108 "/home/ubuntu/neovim/src/nvim/event/defs.h" 3 4
 _Bool 
# 108 "/home/ubuntu/neovim/src/nvim/event/defs.h"
      paused_full;
  char *buffer;
  char *read_pos;
  char *write_pos;
  uv_buf_t uvbuf;
  stream_read_cb read_cb;
  size_t num_bytes;
  int64_t fpos;
};



typedef struct socket_watcher SocketWatcher;
typedef void (*socket_cb)(SocketWatcher *watcher, int result, void *data);
typedef void (*socket_close_cb)(SocketWatcher *watcher, void *data);

struct socket_watcher {

  char addr[256];

  union {
    struct {
      uv_tcp_t handle;
      struct addrinfo *addrinfo;
    } tcp;
    struct {
      uv_pipe_t handle;
    } pipe;
  } uv;
  uv_stream_t *stream;
  void *data;
  socket_cb cb;
  socket_close_cb close_cb;
  MultiQueue *events;
};

typedef enum {
  kProcessTypeUv,
  kProcessTypePty,
} ProcessType;

typedef struct process Process;
typedef void (*process_exit_cb)(Process *proc, int status, void *data);
typedef void (*internal_process_cb)(Process *proc);

struct process {
  ProcessType type;
  Loop *loop;
  void *data;
  int pid, status, refcount;
  uint8_t exit_signal;
  uint64_t stopped_time;
  const char *cwd;
  char **argv;
  const char *exepath;
  dict_T *env;
  Stream in;
  RStream out, err;

  process_exit_cb cb;
  internal_process_cb internal_exit_cb, internal_close_cb;
  
# 169 "/home/ubuntu/neovim/src/nvim/event/defs.h" 3 4
 _Bool 
# 169 "/home/ubuntu/neovim/src/nvim/event/defs.h"
      closed, detach, overlapped, fwd_err;
  MultiQueue *events;
};
# 7 "/home/ubuntu/neovim/src/nvim/channel_defs.h" 2




typedef enum {
  kChannelStreamProc,
  kChannelStreamSocket,
  kChannelStreamStdio,
  kChannelStreamStderr,
  kChannelStreamInternal,
} ChannelStreamType;

typedef enum {
  kChannelPartStdin,
  kChannelPartStdout,
  kChannelPartStderr,
  kChannelPartRpc,
  kChannelPartAll,
} ChannelPart;

typedef enum {
  kChannelStdinPipe,
  kChannelStdinNull,
} ChannelStdinMode;

typedef struct {
  RStream in;
  Stream out;
} StdioPair;

typedef struct {
  
# 38 "/home/ubuntu/neovim/src/nvim/channel_defs.h" 3 4
 _Bool 
# 38 "/home/ubuntu/neovim/src/nvim/channel_defs.h"
      closed;
} StderrState;

typedef struct {
  LuaRef cb;
  
# 43 "/home/ubuntu/neovim/src/nvim/channel_defs.h" 3 4
 _Bool 
# 43 "/home/ubuntu/neovim/src/nvim/channel_defs.h"
      closed;
} InternalState;

typedef struct {
  Callback cb;
  dict_T *self;
  garray_T buffer;
  
# 50 "/home/ubuntu/neovim/src/nvim/channel_defs.h" 3 4
 _Bool 
# 50 "/home/ubuntu/neovim/src/nvim/channel_defs.h"
      eof;
  
# 51 "/home/ubuntu/neovim/src/nvim/channel_defs.h" 3 4
 _Bool 
# 51 "/home/ubuntu/neovim/src/nvim/channel_defs.h"
      buffered;
  
# 52 "/home/ubuntu/neovim/src/nvim/channel_defs.h" 3 4
 _Bool 
# 52 "/home/ubuntu/neovim/src/nvim/channel_defs.h"
      fwd_err;
  const char *type;
} CallbackReader;
# 8 "/home/ubuntu/neovim/src/nvim/eval.h" 2


# 1 "/home/ubuntu/neovim/src/nvim/eval_defs.h" 1
       

# 1 "/home/ubuntu/neovim/src/nvim/ex_cmds_defs.h" 1
       





# 1 "/home/ubuntu/neovim/src/nvim/ex_eval_defs.h" 1
       
# 10 "/home/ubuntu/neovim/src/nvim/ex_eval_defs.h"
typedef struct eslist_elem eslist_T;
struct eslist_elem {
  int saved_emsg_silent;
  eslist_T *next;
};

enum {


  CSTACK_LEN = 50,
};

typedef struct {
  int cs_flags[CSTACK_LEN];
  char cs_pending[CSTACK_LEN];
  union {
    void *csp_rv[CSTACK_LEN];
    void *csp_ex[CSTACK_LEN];
  } cs_pend;
  void *cs_forinfo[CSTACK_LEN];
  int cs_line[CSTACK_LEN];
  int cs_idx;
  int cs_looplevel;
  int cs_trylevel;
  eslist_T *cs_emsg_silent_list;
  int cs_lflags;
} cstack_T;





enum {
  CSF_TRUE = 0x0001,
  CSF_ACTIVE = 0x0002,
  CSF_ELSE = 0x0004,
  CSF_WHILE = 0x0008,
  CSF_FOR = 0x0010,

  CSF_TRY = 0x0100,
  CSF_FINALLY = 0x0200,
  CSF_THROWN = 0x0800,
  CSF_CAUGHT = 0x1000,
  CSF_FINISHED = 0x2000,
  CSF_SILENT = 0x4000,
};





enum {
  CSTP_NONE = 0,
  CSTP_ERROR = 1,
  CSTP_INTERRUPT = 2,
  CSTP_THROW = 4,
  CSTP_BREAK = 8,
  CSTP_CONTINUE = 16,
  CSTP_RETURN = 24,
  CSTP_FINISH = 32,
};


enum {
  CSL_HAD_LOOP = 1,
  CSL_HAD_ENDLOOP = 2,
  CSL_HAD_CONT = 4,
  CSL_HAD_FINA = 8,
};





typedef struct msglist msglist_T;
struct msglist {
  msglist_T *next;
  char *msg;
  char *throw_msg;
  char *sfile;
  linenr_T slnum;
  
# 91 "/home/ubuntu/neovim/src/nvim/ex_eval_defs.h" 3 4
 _Bool 
# 91 "/home/ubuntu/neovim/src/nvim/ex_eval_defs.h"
      multiline;
};


typedef enum {
  ET_USER,
  ET_ERROR,
  ET_INTERRUPT,
} except_type_T;



typedef struct vim_exception except_T;
struct vim_exception {
  except_type_T type;
  char *value;
  msglist_T *messages;
  char *throw_name;
  linenr_T throw_lnum;
  except_T *caught;
};




typedef struct cleanup_stuff cleanup_T;
struct cleanup_stuff {
  int pending;
  except_T *exception;
};



typedef struct exception_state_S exception_state_T;
struct exception_state_S {
  except_T *estate_current_exception;
  
# 127 "/home/ubuntu/neovim/src/nvim/ex_eval_defs.h" 3 4
 _Bool 
# 127 "/home/ubuntu/neovim/src/nvim/ex_eval_defs.h"
      estate_did_throw;
  
# 128 "/home/ubuntu/neovim/src/nvim/ex_eval_defs.h" 3 4
 _Bool 
# 128 "/home/ubuntu/neovim/src/nvim/ex_eval_defs.h"
      estate_need_rethrow;
  int estate_trylevel;
  int estate_did_emsg;
};
# 8 "/home/ubuntu/neovim/src/nvim/ex_cmds_defs.h" 2
# 72 "/home/ubuntu/neovim/src/nvim/ex_cmds_defs.h"
typedef enum {
  ADDR_LINES,
  ADDR_WINDOWS,
  ADDR_ARGUMENTS,
  ADDR_LOADED_BUFFERS,
  ADDR_BUFFERS,
  ADDR_TABS,
  ADDR_TABS_RELATIVE,
  ADDR_QUICKFIX_VALID,
  ADDR_QUICKFIX,
  ADDR_UNSIGNED,
  ADDR_OTHER,
  ADDR_NONE,
} cmd_addr_T;

typedef struct exarg exarg_T;






typedef void (*ex_func_T)(exarg_T *eap);
typedef int (*ex_preview_func_T)(exarg_T *eap, int cmdpreview_ns, handle_T cmdpreview_bufnr);
# 109 "/home/ubuntu/neovim/src/nvim/ex_cmds_defs.h"
typedef enum {
  CALLABLE_NONE,
  CALLABLE_EX,
  CALLABLE_CB,
} AucmdExecutableType;

typedef struct aucmd_executable_t AucmdExecutable;
struct aucmd_executable_t {
  AucmdExecutableType type;
  union {
    char *cmd;
    Callback cb;
  } callable;
};



typedef char *(*LineGetter)(int, void *, int, 
# 126 "/home/ubuntu/neovim/src/nvim/ex_cmds_defs.h" 3 4
                                             _Bool
# 126 "/home/ubuntu/neovim/src/nvim/ex_cmds_defs.h"
                                                 );


typedef struct {
  char *cmd_name;
  ex_func_T cmd_func;
  ex_preview_func_T cmd_preview_func;
  uint32_t cmd_argt;
  cmd_addr_T cmd_addr_type;
} CommandDefinition;


struct exarg {
  char *arg;
  char **args;
  size_t *arglens;
  size_t argc;
  char *nextcmd;
  char *cmd;
  char **cmdlinep;
  char *cmdline_tofree;
  cmdidx_T cmdidx;
  uint32_t argt;
  int skip;
  int forceit;
  int addr_count;
  linenr_T line1;
  linenr_T line2;
  cmd_addr_T addr_type;
  int flags;
  char *do_ecmd_cmd;
  linenr_T do_ecmd_lnum;
  int append;
  int usefilter;
  int amount;
  int regname;
  int force_bin;
  int read_edit;
  int mkdir_p;
  int force_ff;
  int force_enc;
  int bad_char;
  int useridx;
  char *errmsg;
  LineGetter ea_getline;
  void *cookie;
  cstack_T *cstack;
};
# 183 "/home/ubuntu/neovim/src/nvim/ex_cmds_defs.h"
enum {
  CMOD_SANDBOX = 0x0001,
  CMOD_SILENT = 0x0002,
  CMOD_ERRSILENT = 0x0004,
  CMOD_UNSILENT = 0x0008,
  CMOD_NOAUTOCMD = 0x0010,
  CMOD_HIDE = 0x0020,
  CMOD_BROWSE = 0x0040,
  CMOD_CONFIRM = 0x0080,
  CMOD_KEEPALT = 0x0100,
  CMOD_KEEPMARKS = 0x0200,
  CMOD_KEEPJUMPS = 0x0400,
  CMOD_LOCKMARKS = 0x0800,
  CMOD_KEEPPATTERNS = 0x1000,
  CMOD_NOSWAPFILE = 0x2000,
};




typedef struct {
  int cmod_flags;

  int cmod_split;
  int cmod_tab;
  char *cmod_filter_pat;
  regmatch_T cmod_filter_regmatch;
  
# 210 "/home/ubuntu/neovim/src/nvim/ex_cmds_defs.h" 3 4
 _Bool 
# 210 "/home/ubuntu/neovim/src/nvim/ex_cmds_defs.h"
      cmod_filter_force;

  int cmod_verbose;


  char *cmod_save_ei;
  int cmod_did_sandbox;
  OptInt cmod_verbose_save;
  int cmod_save_msg_silent;
  int cmod_save_msg_scroll;
  int cmod_did_esilent;
} cmdmod_T;


typedef struct {
  cmdmod_T cmdmod;
  struct {
    
# 227 "/home/ubuntu/neovim/src/nvim/ex_cmds_defs.h" 3 4
   _Bool 
# 227 "/home/ubuntu/neovim/src/nvim/ex_cmds_defs.h"
        file;
    
# 228 "/home/ubuntu/neovim/src/nvim/ex_cmds_defs.h" 3 4
   _Bool 
# 228 "/home/ubuntu/neovim/src/nvim/ex_cmds_defs.h"
        bar;
  } magic;
} CmdParseInfo;


typedef struct {
  char *sub;
  Timestamp timestamp;
  AdditionalData *additional_data;
} SubReplacementString;
# 4 "/home/ubuntu/neovim/src/nvim/eval_defs.h" 2


typedef enum {
  kMPNil,
  kMPBoolean,
  kMPInteger,
  kMPFloat,
  kMPString,
  kMPArray,
  kMPMap,
  kMPExt,
} MessagePackType;




typedef struct {
  int eval_flags;


  LineGetter eval_getline;
  void *eval_cookie;


  char *eval_tofree;
} evalarg_T;
# 11 "/home/ubuntu/neovim/src/nvim/eval.h" 2





# 1 "/home/ubuntu/neovim/src/nvim/mbyte_defs.h" 1
       




# 1 "/home/ubuntu/neovim/src/nvim/iconv_defs.h" 1
       


# 1 "/usr/include/iconv.h" 1 3 4
# 23 "/usr/include/iconv.h" 3 4
# 1 "/usr/lib/gcc/aarch64-linux-gnu/9/include/stddef.h" 1 3 4
# 24 "/usr/include/iconv.h" 2 3 4






# 29 "/usr/include/iconv.h" 3 4
typedef void *iconv_t;







extern iconv_t iconv_open (const char *__tocode, const char *__fromcode);




extern size_t iconv (iconv_t __cd, char **__restrict __inbuf,
       size_t *__restrict __inbytesleft,
       char **__restrict __outbuf,
       size_t *__restrict __outbytesleft);





extern int iconv_close (iconv_t __cd);


# 5 "/home/ubuntu/neovim/src/nvim/iconv_defs.h" 2
# 7 "/home/ubuntu/neovim/src/nvim/mbyte_defs.h" 2


# 8 "/home/ubuntu/neovim/src/nvim/mbyte_defs.h"
enum {



  MB_MAXBYTES = 21,

  MB_MAXCHAR = 6,
};


enum {
  ENC_8BIT = 0x01,
  ENC_DBCS = 0x02,
  ENC_UNICODE = 0x04,

  ENC_ENDIAN_B = 0x10,
  ENC_ENDIAN_L = 0x20,

  ENC_2BYTE = 0x40,
  ENC_4BYTE = 0x80,
  ENC_2WORD = 0x100,

  ENC_LATIN1 = 0x200,
  ENC_LATIN9 = 0x400,
  ENC_MACROMAN = 0x800,
};


typedef enum {
  CONV_NONE = 0,
  CONV_TO_UTF8 = 1,
  CONV_9_TO_UTF8 = 2,
  CONV_TO_LATIN1 = 3,
  CONV_TO_LATIN9 = 4,
  CONV_ICONV = 5,
} ConvFlags;
# 52 "/home/ubuntu/neovim/src/nvim/mbyte_defs.h"
typedef struct {
  int vc_type;
  int vc_factor;
  iconv_t vc_fd;
  
# 56 "/home/ubuntu/neovim/src/nvim/mbyte_defs.h" 3 4
 _Bool 
# 56 "/home/ubuntu/neovim/src/nvim/mbyte_defs.h"
      vc_fail;

} vimconv_T;

typedef struct {
  int32_t value;
  int len;
} CharInfo;

typedef struct {
  char *ptr;
  CharInfo chr;
} StrCharInfo;

typedef struct {
  int8_t begin_off;
  int8_t end_off;
} CharBoundsOff;
# 17 "/home/ubuntu/neovim/src/nvim/eval.h" 2
# 1 "/home/ubuntu/neovim/src/nvim/msgpack_rpc/channel_defs.h" 1
       




# 1 "/home/ubuntu/neovim/src/nvim/api/private/dispatch.h" 1
       
# 10 "/home/ubuntu/neovim/src/nvim/api/private/dispatch.h"
typedef Object (*ApiDispatchWrapper)(uint64_t channel_id, Array args, Arena *arena, Error *error);



struct MsgpackRpcRequestHandler {
  const char *name;
  ApiDispatchWrapper fn;
  
# 17 "/home/ubuntu/neovim/src/nvim/api/private/dispatch.h" 3 4
 _Bool 
# 17 "/home/ubuntu/neovim/src/nvim/api/private/dispatch.h"
      fast;



  
# 21 "/home/ubuntu/neovim/src/nvim/api/private/dispatch.h" 3 4
 _Bool 
# 21 "/home/ubuntu/neovim/src/nvim/api/private/dispatch.h"
      ret_alloc;

};

extern const MsgpackRpcRequestHandler method_handlers[];
# 7 "/home/ubuntu/neovim/src/nvim/msgpack_rpc/channel_defs.h" 2


typedef struct Channel Channel;
typedef struct Unpacker Unpacker;

typedef enum {
  kClientTypeUnknown = -1,
  kClientTypeRemote = 0,
  kClientTypeMsgpackRpc = 5,
  kClientTypeUi = 1,
  kClientTypeEmbedder = 2,
  kClientTypeHost = 3,
  kClientTypePlugin = 4,
} ClientType;

typedef struct {
  uint32_t request_id;
  
# 24 "/home/ubuntu/neovim/src/nvim/msgpack_rpc/channel_defs.h" 3 4
 _Bool 
# 24 "/home/ubuntu/neovim/src/nvim/msgpack_rpc/channel_defs.h"
      returned, errored;
  Object result;
  ArenaMem result_mem;
} ChannelCallFrame;

typedef struct {
  MessageType type;
  Channel *channel;
  MsgpackRpcRequestHandler handler;
  Array args;
  uint32_t request_id;
  Arena used_mem;
} RequestEvent;

typedef struct {
  
# 39 "/home/ubuntu/neovim/src/nvim/msgpack_rpc/channel_defs.h" 3 4
 _Bool 
# 39 "/home/ubuntu/neovim/src/nvim/msgpack_rpc/channel_defs.h"
      closed;
  Unpacker *unpacker;
  uint32_t next_request_id;
  struct { size_t size; size_t capacity; ChannelCallFrame * *items; } call_stack;
  Dictionary info;
  ClientType client_type;
} RpcState;
# 18 "/home/ubuntu/neovim/src/nvim/eval.h" 2

# 1 "/home/ubuntu/neovim/src/nvim/os/fileio_defs.h" 1
       





typedef struct {
  int fd;
  char *buffer;
  char *read_pos;
  char *write_pos;
  
# 12 "/home/ubuntu/neovim/src/nvim/os/fileio_defs.h" 3 4
 _Bool 
# 12 "/home/ubuntu/neovim/src/nvim/os/fileio_defs.h"
      wr;
  
# 13 "/home/ubuntu/neovim/src/nvim/os/fileio_defs.h" 3 4
 _Bool 
# 13 "/home/ubuntu/neovim/src/nvim/os/fileio_defs.h"
      eof;
  
# 14 "/home/ubuntu/neovim/src/nvim/os/fileio_defs.h" 3 4
 _Bool 
# 14 "/home/ubuntu/neovim/src/nvim/os/fileio_defs.h"
      non_blocking;
  uint64_t bytes_read;
} FileDescriptor;
# 28 "/home/ubuntu/neovim/src/nvim/os/fileio_defs.h"
static inline 
# 28 "/home/ubuntu/neovim/src/nvim/os/fileio_defs.h" 3 4
             _Bool 
# 28 "/home/ubuntu/neovim/src/nvim/os/fileio_defs.h"
                  file_eof(const FileDescriptor *const fp)
  FUNC_ATTR_ALWAYS_INLINE FUNC_ATTR_WARN_UNUSED_RESULT FUNC_ATTR_NONNULL_ALL
{
  return fp->eof && fp->read_pos == fp->write_pos;
}






static inline int file_fd(const FileDescriptor *const fp)
  FUNC_ATTR_ALWAYS_INLINE FUNC_ATTR_WARN_UNUSED_RESULT FUNC_ATTR_NONNULL_ALL
{
  return fp->fd;
}
# 20 "/home/ubuntu/neovim/src/nvim/eval.h" 2
# 1 "/home/ubuntu/neovim/src/nvim/os/stdpaths_defs.h" 1
       


typedef enum {
  kXDGNone = -1,
  kXDGConfigHome,
  kXDGDataHome,
  kXDGCacheHome,
  kXDGStateHome,
  kXDGRuntimeDir,
  kXDGConfigDirs,
  kXDGDataDirs,
} XDGVarType;
# 21 "/home/ubuntu/neovim/src/nvim/eval.h" 2

# 1 "/home/ubuntu/neovim/src/nvim/vim_defs.h" 1
       







enum {

  NUMBUFLEN = 65,
};




typedef enum {
  kDirectionNotSet = 0,
  FORWARD = 1,
  BACKWARD = -1,
  FORWARD_FILE = 3,
  BACKWARD_FILE = -3,
} Direction;



typedef enum {
  kUnknown,
  kWorking,
  kBroken,
} WorkingStatus;







typedef enum {
  kCdScopeInvalid = -1,
  kCdScopeWindow,
  kCdScopeTabpage,
  kCdScopeGlobal,
} CdScope;





typedef enum {
  kCdCauseOther = -1,
  kCdCauseManual,
  kCdCauseWindow,
  kCdCauseAuto,
} CdCause;
# 23 "/home/ubuntu/neovim/src/nvim/eval.h" 2
# 52 "/home/ubuntu/neovim/src/nvim/eval.h"
typedef struct {
  const char *ll_name;
  size_t ll_name_len;
  char *ll_exp_name;
  typval_T *ll_tv;

  listitem_T *ll_li;
  list_T *ll_list;
  
# 60 "/home/ubuntu/neovim/src/nvim/eval.h" 3 4
 _Bool 
# 60 "/home/ubuntu/neovim/src/nvim/eval.h"
      ll_range;
  
# 61 "/home/ubuntu/neovim/src/nvim/eval.h" 3 4
 _Bool 
# 61 "/home/ubuntu/neovim/src/nvim/eval.h"
      ll_empty2;
  int ll_n1;
  int ll_n2;
  dict_T *ll_dict;
  dictitem_T *ll_di;
  char *ll_newkey;
  blob_T *ll_blob;
} lval_T;


typedef enum {
  VAR_FLAVOUR_DEFAULT = 1,
  VAR_FLAVOUR_SESSION = 2,
  VAR_FLAVOUR_SHADA = 4,
} var_flavour_T;


typedef enum {
  VV_COUNT,
  VV_COUNT1,
  VV_PREVCOUNT,
  VV_ERRMSG,
  VV_WARNINGMSG,
  VV_STATUSMSG,
  VV_SHELL_ERROR,
  VV_THIS_SESSION,
  VV_VERSION,
  VV_LNUM,
  VV_TERMREQUEST,
  VV_TERMRESPONSE,
  VV_FNAME,
  VV_LANG,
  VV_LC_TIME,
  VV_CTYPE,
  VV_CC_FROM,
  VV_CC_TO,
  VV_FNAME_IN,
  VV_FNAME_OUT,
  VV_FNAME_NEW,
  VV_FNAME_DIFF,
  VV_CMDARG,
  VV_FOLDSTART,
  VV_FOLDEND,
  VV_FOLDDASHES,
  VV_FOLDLEVEL,
  VV_PROGNAME,
  VV_SEND_SERVER,
  VV_DYING,
  VV_EXCEPTION,
  VV_THROWPOINT,
  VV_REG,
  VV_CMDBANG,
  VV_INSERTMODE,
  VV_VAL,
  VV_KEY,
  VV_PROFILING,
  VV_FCS_REASON,
  VV_FCS_CHOICE,
  VV_BEVAL_BUFNR,
  VV_BEVAL_WINNR,
  VV_BEVAL_WINID,
  VV_BEVAL_LNUM,
  VV_BEVAL_COL,
  VV_BEVAL_TEXT,
  VV_SCROLLSTART,
  VV_SWAPNAME,
  VV_SWAPCHOICE,
  VV_SWAPCOMMAND,
  VV_CHAR,
  VV_MOUSE_WIN,
  VV_MOUSE_WINID,
  VV_MOUSE_LNUM,
  VV_MOUSE_COL,
  VV_OP,
  VV_SEARCHFORWARD,
  VV_HLSEARCH,
  VV_OLDFILES,
  VV_WINDOWID,
  VV_PROGPATH,
  VV_COMPLETED_ITEM,
  VV_OPTION_NEW,
  VV_OPTION_OLD,
  VV_OPTION_OLDLOCAL,
  VV_OPTION_OLDGLOBAL,
  VV_OPTION_COMMAND,
  VV_OPTION_TYPE,
  VV_ERRORS,
  VV_FALSE,
  VV_TRUE,
  VV_NULL,
  VV_NUMBERMAX,
  VV_NUMBERMIN,
  VV_NUMBERSIZE,
  VV_VIM_DID_ENTER,
  VV_TESTING,
  VV_TYPE_NUMBER,
  VV_TYPE_STRING,
  VV_TYPE_FUNC,
  VV_TYPE_LIST,
  VV_TYPE_DICT,
  VV_TYPE_FLOAT,
  VV_TYPE_BOOL,
  VV_TYPE_BLOB,
  VV_EVENT,
  VV_ECHOSPACE,
  VV_ARGV,
  VV_COLLATE,
  VV_EXITING,
  VV_MAXCOL,

  VV_STDERR,
  VV_MSGPACK_TYPES,
  VV__NULL_STRING,
  VV__NULL_LIST,
  VV__NULL_DICT,
  VV__NULL_BLOB,
  VV_LUA,
  VV_RELNUM,
  VV_VIRTNUM,
} VimVarIndex;


extern const list_T *eval_msgpack_type_lists[(kMPExt + 1)];


typedef struct {
  
# 187 "/home/ubuntu/neovim/src/nvim/eval.h" 3 4
 _Bool 
# 187 "/home/ubuntu/neovim/src/nvim/eval.h"
      sve_did_save;
  hashtab_T sve_hashtab;
} save_v_event_T;


typedef enum {
  TFN_INT = 1,
  TFN_QUIET = 2,
  TFN_NO_AUTOLOAD = 4,
  TFN_NO_DEREF = 8,
  TFN_READ_ONLY = 16,
} TransFunctionNameFlags;


typedef enum {
  GLV_QUIET = TFN_QUIET,
  GLV_NO_AUTOLOAD = TFN_NO_AUTOLOAD,
  GLV_READ_ONLY = TFN_READ_ONLY,

} GetLvalFlags;






typedef struct {
  TimeWatcher tw;
  int timer_id;
  int repeat_count;
  int refcount;
  int emsg_count;
  int64_t timeout;
  
# 220 "/home/ubuntu/neovim/src/nvim/eval.h" 3 4
 _Bool 
# 220 "/home/ubuntu/neovim/src/nvim/eval.h"
      stopped;
  
# 221 "/home/ubuntu/neovim/src/nvim/eval.h" 3 4
 _Bool 
# 221 "/home/ubuntu/neovim/src/nvim/eval.h"
      paused;
  Callback callback;
} timer_T;


typedef enum {
  EXPR_UNKNOWN = 0,
  EXPR_EQUAL,
  EXPR_NEQUAL,
  EXPR_GREATER,
  EXPR_GEQUAL,
  EXPR_SMALLER,
  EXPR_SEQUAL,
  EXPR_MATCH,
  EXPR_NOMATCH,
  EXPR_IS,
  EXPR_ISNOT,
} exprtype_T;


extern 
# 241 "/home/ubuntu/neovim/src/nvim/eval.h" 3 4
      _Bool 
# 241 "/home/ubuntu/neovim/src/nvim/eval.h"
           *eval_lavars_used;





enum {
  EVAL_EVALUATE = 1,
};


extern evalarg_T EVALARG_EVALUATE ;
# 23 "/home/ubuntu/neovim/src/nvim/regexp.c" 2
# 1 "/home/ubuntu/neovim/src/nvim/eval/typval.h" 1
       

# 1 "/usr/include/assert.h" 1 3 4
# 4 "/home/ubuntu/neovim/src/nvim/eval/typval.h" 2

# 1 "/usr/lib/gcc/aarch64-linux-gnu/9/include/stddef.h" 1 3 4
# 6 "/home/ubuntu/neovim/src/nvim/eval/typval.h" 2





# 1 "/home/ubuntu/neovim/src/nvim/hashtab.h" 1
       

# 1 "/usr/lib/gcc/aarch64-linux-gnu/9/include/stddef.h" 1 3 4
# 4 "/home/ubuntu/neovim/src/nvim/hashtab.h" 2






extern char hash_removed;
# 12 "/home/ubuntu/neovim/src/nvim/eval/typval.h" 2



# 1 "/home/ubuntu/neovim/src/nvim/message.h" 1
       



# 1 "/usr/lib/gcc/aarch64-linux-gnu/9/include/stddef.h" 1 3 4
# 6 "/home/ubuntu/neovim/src/nvim/message.h" 2




# 1 "/home/ubuntu/neovim/src/nvim/message_defs.h" 1
       





typedef struct {
  String text;
  int attr;
} HlMessageChunk;

typedef struct { size_t size; size_t capacity; HlMessageChunk *items; } HlMessage;


typedef struct msg_hist {
  struct msg_hist *next;
  char *msg;
  const char *kind;
  int attr;
  
# 20 "/home/ubuntu/neovim/src/nvim/message_defs.h" 3 4
 _Bool 
# 20 "/home/ubuntu/neovim/src/nvim/message_defs.h"
      multiline;
  HlMessage multiattr;
} MessageHistoryEntry;
# 11 "/home/ubuntu/neovim/src/nvim/message.h" 2


enum {
  VIM_GENERIC = 0,
  VIM_ERROR = 1,
  VIM_WARNING = 2,
  VIM_INFO = 3,
  VIM_QUESTION = 4,
  VIM_LAST_TYPE = 4,
};


enum {
  VIM_YES = 2,
  VIM_NO = 3,
  VIM_CANCEL = 4,
  VIM_ALL = 5,
  VIM_DISCARDALL = 6,
};

enum { MSG_HIST = 0x1000, };


extern MessageHistoryEntry *first_msg_hist;

extern MessageHistoryEntry *last_msg_hist;

extern 
# 38 "/home/ubuntu/neovim/src/nvim/message.h" 3 4
      _Bool 
# 38 "/home/ubuntu/neovim/src/nvim/message.h"
           msg_ext_need_clear ;



extern ScreenGrid msg_grid ;
extern int msg_grid_pos ;







extern ScreenGrid msg_grid_adj ;


extern int msg_scrolled_at_flush ;

extern int msg_grid_scroll_discount ;

extern int msg_listdo_overwrite ;
# 16 "/home/ubuntu/neovim/src/nvim/eval/typval.h" 2
# 34 "/home/ubuntu/neovim/src/nvim/eval/typval.h"
static inline void tv_list_ref(list_T *const l)
  FUNC_ATTR_ALWAYS_INLINE
{
  if (l == 
# 37 "/home/ubuntu/neovim/src/nvim/eval/typval.h" 3 4
          ((void *)0)
# 37 "/home/ubuntu/neovim/src/nvim/eval/typval.h"
              ) {
    return;
  }
  l->lv_refcount++;
}





static inline void tv_list_set_ret(typval_T *const tv, list_T *const l)
  FUNC_ATTR_ALWAYS_INLINE FUNC_ATTR_NONNULL_ARG(1)
{
  tv->v_type = VAR_LIST;
  tv->vval.v_list = l;
  tv_list_ref(l);
}






static inline VarLockStatus tv_list_locked(const list_T *const l)
  FUNC_ATTR_PURE FUNC_ATTR_WARN_UNUSED_RESULT
{
  if (l == 
# 63 "/home/ubuntu/neovim/src/nvim/eval/typval.h" 3 4
          ((void *)0)
# 63 "/home/ubuntu/neovim/src/nvim/eval/typval.h"
              ) {
    return VAR_FIXED;
  }
  return l->lv_lock;
}







static inline void tv_list_set_lock(list_T *const l, const VarLockStatus lock)
{
  if (l == 
# 77 "/home/ubuntu/neovim/src/nvim/eval/typval.h" 3 4
          ((void *)0)
# 77 "/home/ubuntu/neovim/src/nvim/eval/typval.h"
              ) {
    
# 78 "/home/ubuntu/neovim/src/nvim/eval/typval.h" 3 4
   ((void) sizeof ((
# 78 "/home/ubuntu/neovim/src/nvim/eval/typval.h"
   lock == VAR_FIXED
# 78 "/home/ubuntu/neovim/src/nvim/eval/typval.h" 3 4
   ) ? 1 : 0), __extension__ ({ if (
# 78 "/home/ubuntu/neovim/src/nvim/eval/typval.h"
   lock == VAR_FIXED
# 78 "/home/ubuntu/neovim/src/nvim/eval/typval.h" 3 4
   ) ; else __assert_fail (
# 78 "/home/ubuntu/neovim/src/nvim/eval/typval.h"
   "lock == VAR_FIXED"
# 78 "/home/ubuntu/neovim/src/nvim/eval/typval.h" 3 4
   , "/home/ubuntu/neovim/src/nvim/eval/typval.h", 78, __extension__ __PRETTY_FUNCTION__); }))
# 78 "/home/ubuntu/neovim/src/nvim/eval/typval.h"
                            ;
    return;
  }
  l->lv_lock = lock;
}







static inline void tv_list_set_copyid(list_T *const l, const int copyid)
  FUNC_ATTR_NONNULL_ALL
{
  l->lv_copyID = copyid;
}




static inline int tv_list_len(const list_T *const l)
  FUNC_ATTR_PURE FUNC_ATTR_WARN_UNUSED_RESULT
{
  if (l == 
# 102 "/home/ubuntu/neovim/src/nvim/eval/typval.h" 3 4
          ((void *)0)
# 102 "/home/ubuntu/neovim/src/nvim/eval/typval.h"
              ) {
    return 0;
  }
  return l->lv_len;
}






static inline int tv_list_copyid(const list_T *const l)
  FUNC_ATTR_PURE FUNC_ATTR_WARN_UNUSED_RESULT FUNC_ATTR_NONNULL_ALL
{
  return l->lv_copyID;
}
# 126 "/home/ubuntu/neovim/src/nvim/eval/typval.h"
static inline list_T *tv_list_latest_copy(const list_T *const l)
  FUNC_ATTR_PURE FUNC_ATTR_WARN_UNUSED_RESULT FUNC_ATTR_NONNULL_ALL
{
  return l->lv_copylist;
}







static inline int tv_list_uidx(const list_T *const l, int n)
  FUNC_ATTR_PURE FUNC_ATTR_WARN_UNUSED_RESULT
{

  if (n < 0) {
    n += tv_list_len(l);
  }


  if (n < 0 || n >= tv_list_len(l)) {
    return -1;
  }
  return n;
}
# 160 "/home/ubuntu/neovim/src/nvim/eval/typval.h"
static inline 
# 160 "/home/ubuntu/neovim/src/nvim/eval/typval.h" 3 4
             _Bool 
# 160 "/home/ubuntu/neovim/src/nvim/eval/typval.h"
                  tv_list_has_watchers(const list_T *const l)
  FUNC_ATTR_PURE FUNC_ATTR_WARN_UNUSED_RESULT
{
  return l && l->lv_watch;
}






static inline listitem_T *tv_list_first(const list_T *const l)
  FUNC_ATTR_PURE FUNC_ATTR_WARN_UNUSED_RESULT
{
  if (l == 
# 174 "/home/ubuntu/neovim/src/nvim/eval/typval.h" 3 4
          ((void *)0)
# 174 "/home/ubuntu/neovim/src/nvim/eval/typval.h"
              ) {
    return 
# 175 "/home/ubuntu/neovim/src/nvim/eval/typval.h" 3 4
          ((void *)0)
# 175 "/home/ubuntu/neovim/src/nvim/eval/typval.h"
              ;
  }
  return l->lv_first;
}






static inline listitem_T *tv_list_last(const list_T *const l)
  FUNC_ATTR_PURE FUNC_ATTR_WARN_UNUSED_RESULT
{
  if (l == 
# 188 "/home/ubuntu/neovim/src/nvim/eval/typval.h" 3 4
          ((void *)0)
# 188 "/home/ubuntu/neovim/src/nvim/eval/typval.h"
              ) {
    return 
# 189 "/home/ubuntu/neovim/src/nvim/eval/typval.h" 3 4
          ((void *)0)
# 189 "/home/ubuntu/neovim/src/nvim/eval/typval.h"
              ;
  }
  return l->lv_last;
}





static inline void tv_dict_set_ret(typval_T *const tv, dict_T *const d)
  FUNC_ATTR_ALWAYS_INLINE FUNC_ATTR_NONNULL_ARG(1)
{
  tv->v_type = VAR_DICT;
  tv->vval.v_dict = d;
  if (d != 
# 203 "/home/ubuntu/neovim/src/nvim/eval/typval.h" 3 4
          ((void *)0)
# 203 "/home/ubuntu/neovim/src/nvim/eval/typval.h"
              ) {
    d->dv_refcount++;
  }
}




static inline long tv_dict_len(const dict_T *const d)
  FUNC_ATTR_PURE FUNC_ATTR_WARN_UNUSED_RESULT
{
  if (d == 
# 214 "/home/ubuntu/neovim/src/nvim/eval/typval.h" 3 4
          ((void *)0)
# 214 "/home/ubuntu/neovim/src/nvim/eval/typval.h"
              ) {
    return 0;
  }
  return (long)d->dv_hashtab.ht_used;
}






static inline 
# 225 "/home/ubuntu/neovim/src/nvim/eval/typval.h" 3 4
             _Bool 
# 225 "/home/ubuntu/neovim/src/nvim/eval/typval.h"
                  tv_dict_is_watched(const dict_T *const d)
  FUNC_ATTR_PURE FUNC_ATTR_WARN_UNUSED_RESULT
{
  return d && !QUEUE_EMPTY(&d->watchers);
}







static inline void tv_blob_set_ret(typval_T *const tv, blob_T *const b)
  FUNC_ATTR_ALWAYS_INLINE FUNC_ATTR_NONNULL_ARG(1)
{
  tv->v_type = VAR_BLOB;
  tv->vval.v_blob = b;
  if (b != 
# 242 "/home/ubuntu/neovim/src/nvim/eval/typval.h" 3 4
          ((void *)0)
# 242 "/home/ubuntu/neovim/src/nvim/eval/typval.h"
              ) {
    b->bv_refcount++;
  }
}




static inline int tv_blob_len(const blob_T *const b)
  FUNC_ATTR_PURE FUNC_ATTR_WARN_UNUSED_RESULT
{
  if (b == 
# 253 "/home/ubuntu/neovim/src/nvim/eval/typval.h" 3 4
          ((void *)0)
# 253 "/home/ubuntu/neovim/src/nvim/eval/typval.h"
              ) {
    return 0;
  }
  return b->bv_ga.ga_len;
}







static inline uint8_t tv_blob_get(const blob_T *const b, int idx)
  FUNC_ATTR_ALWAYS_INLINE FUNC_ATTR_NONNULL_ALL FUNC_ATTR_WARN_UNUSED_RESULT
{
  return ((uint8_t *)b->bv_ga.ga_data)[idx];
}






static inline void tv_blob_set(blob_T *const blob, int idx, uint8_t c)
  FUNC_ATTR_ALWAYS_INLINE FUNC_ATTR_NONNULL_ALL
{
  ((uint8_t *)blob->bv_ga.ga_data)[idx] = c;
}






static inline void tv_init(typval_T *const tv)
{
  if (tv != 
# 289 "/home/ubuntu/neovim/src/nvim/eval/typval.h" 3 4
           ((void *)0)
# 289 "/home/ubuntu/neovim/src/nvim/eval/typval.h"
               ) {
    memset(tv, 0, sizeof(*tv));
  }
}





extern const char *const tv_empty_string;


extern 
# 301 "/home/ubuntu/neovim/src/nvim/eval/typval.h" 3 4
      _Bool 
# 301 "/home/ubuntu/neovim/src/nvim/eval/typval.h"
           tv_in_free_unref_items;
# 395 "/home/ubuntu/neovim/src/nvim/eval/typval.h"
static inline 
# 395 "/home/ubuntu/neovim/src/nvim/eval/typval.h" 3 4
             _Bool 
# 395 "/home/ubuntu/neovim/src/nvim/eval/typval.h"
                  tv_get_float_chk(const typval_T *const tv, float_T *const ret_f)
  FUNC_ATTR_NONNULL_ALL FUNC_ATTR_WARN_UNUSED_RESULT
{
  if (tv->v_type == VAR_FLOAT) {
    *ret_f = tv->vval.v_float;
    return 
# 400 "/home/ubuntu/neovim/src/nvim/eval/typval.h" 3 4
          1
# 400 "/home/ubuntu/neovim/src/nvim/eval/typval.h"
              ;
  }
  if (tv->v_type == VAR_NUMBER) {
    *ret_f = (float_T)tv->vval.v_number;
    return 
# 404 "/home/ubuntu/neovim/src/nvim/eval/typval.h" 3 4
          1
# 404 "/home/ubuntu/neovim/src/nvim/eval/typval.h"
              ;
  }
  semsg("%s", gettext("E808: Number or Float required"));
  return 
# 407 "/home/ubuntu/neovim/src/nvim/eval/typval.h" 3 4
        0
# 407 "/home/ubuntu/neovim/src/nvim/eval/typval.h"
             ;
}





static inline DictWatcher *tv_dict_watcher_node_data(QUEUE *q)
  FUNC_ATTR_ALWAYS_INLINE FUNC_ATTR_NONNULL_ALL FUNC_ATTR_NONNULL_RET
    FUNC_ATTR_NO_SANITIZE_ADDRESS FUNC_ATTR_PURE FUNC_ATTR_WARN_UNUSED_RESULT
{
  return ((DictWatcher *)((char *)(q) - 
# 418 "/home/ubuntu/neovim/src/nvim/eval/typval.h" 3 4
        __builtin_offsetof (
# 418 "/home/ubuntu/neovim/src/nvim/eval/typval.h"
        DictWatcher
# 418 "/home/ubuntu/neovim/src/nvim/eval/typval.h" 3 4
        , 
# 418 "/home/ubuntu/neovim/src/nvim/eval/typval.h"
        node
# 418 "/home/ubuntu/neovim/src/nvim/eval/typval.h" 3 4
        )
# 418 "/home/ubuntu/neovim/src/nvim/eval/typval.h"
        ));
}
# 428 "/home/ubuntu/neovim/src/nvim/eval/typval.h"
static inline 
# 428 "/home/ubuntu/neovim/src/nvim/eval/typval.h" 3 4
             _Bool 
# 428 "/home/ubuntu/neovim/src/nvim/eval/typval.h"
                  tv_is_func(const typval_T tv)
  FUNC_ATTR_WARN_UNUSED_RESULT FUNC_ATTR_ALWAYS_INLINE FUNC_ATTR_CONST
{
  return tv.v_type == VAR_FUNC || tv.v_type == VAR_PARTIAL;
}
# 24 "/home/ubuntu/neovim/src/nvim/regexp.c" 2
# 1 "/home/ubuntu/neovim/src/nvim/eval/userfunc.h" 1
       


# 1 "/usr/lib/gcc/aarch64-linux-gnu/9/include/stddef.h" 1 3 4
# 5 "/home/ubuntu/neovim/src/nvim/eval/userfunc.h" 2
# 34 "/home/ubuntu/neovim/src/nvim/eval/userfunc.h"
typedef struct {
  dict_T *fd_dict;
  char *fd_newkey;
  dictitem_T *fd_di;
} funcdict_T;

typedef struct funccal_entry funccal_entry_T;
struct funccal_entry {
  void *top_funccal;
  funccal_entry_T *next;
};


typedef enum {
  FCERR_UNKNOWN = 0,
  FCERR_TOOMANY = 1,
  FCERR_TOOFEW = 2,
  FCERR_SCRIPT = 3,
  FCERR_DICT = 4,
  FCERR_NONE = 5,
  FCERR_OTHER = 6,
  FCERR_DELETED = 7,
  FCERR_NOTMETHOD = 8,
} FnameTransError;


typedef int (*ArgvFunc)(int current_argcount, typval_T *argv, int partial_argcount,
                        ufunc_T *called_func);


typedef struct {
  ArgvFunc fe_argv_func;

  linenr_T fe_firstline;
  linenr_T fe_lastline;
  
# 69 "/home/ubuntu/neovim/src/nvim/eval/userfunc.h" 3 4
 _Bool 
# 69 "/home/ubuntu/neovim/src/nvim/eval/userfunc.h"
      *fe_doesrange;
  
# 70 "/home/ubuntu/neovim/src/nvim/eval/userfunc.h" 3 4
 _Bool 
# 70 "/home/ubuntu/neovim/src/nvim/eval/userfunc.h"
      fe_evaluate;
  partial_T *fe_partial;
  dict_T *fe_selfdict;
  typval_T *fe_basetv;
  
# 74 "/home/ubuntu/neovim/src/nvim/eval/userfunc.h" 3 4
 _Bool 
# 74 "/home/ubuntu/neovim/src/nvim/eval/userfunc.h"
      fe_found_var;

} funcexe_T;
# 25 "/home/ubuntu/neovim/src/nvim/regexp.c" 2
# 1 "/home/ubuntu/neovim/src/nvim/garray.h" 1
       


# 1 "/usr/lib/gcc/aarch64-linux-gnu/9/include/stddef.h" 1 3 4
# 5 "/home/ubuntu/neovim/src/nvim/garray.h" 2
# 26 "/home/ubuntu/neovim/src/nvim/regexp.c" 2


# 1 "/home/ubuntu/neovim/src/nvim/globals.h" 1
       






# 1 "/home/ubuntu/neovim/src/nvim/event/loop.h" 1
       




# 1 "/home/ubuntu/neovim/src/klib/klist.h" 1
# 29 "/home/ubuntu/neovim/src/klib/klist.h"
# 1 "/usr/include/assert.h" 1 3 4
# 30 "/home/ubuntu/neovim/src/klib/klist.h" 2


# 1 "/home/ubuntu/neovim/src/nvim/func_attr.h" 1
# 33 "/home/ubuntu/neovim/src/klib/klist.h" 2
# 7 "/home/ubuntu/neovim/src/nvim/event/loop.h" 2



typedef void *WatcherPtr;


struct __kl1_WatcherPtr { WatcherPtr data; struct __kl1_WatcherPtr *next; }; typedef struct __kl1_WatcherPtr kl1_WatcherPtr; typedef struct { size_t cnt, n, max; kl1_WatcherPtr **buf; } kmp_WatcherPtr_t; static inline kmp_WatcherPtr_t *kmp_init_WatcherPtr(void) { return (kmp_WatcherPtr_t *)xcalloc(1, sizeof(kmp_WatcherPtr_t)); } static inline void kmp_destroy_WatcherPtr(kmp_WatcherPtr_t *mp) __attribute__((unused)); static inline void kmp_destroy_WatcherPtr(kmp_WatcherPtr_t *mp) { size_t k; for (k = 0; k < mp->n; k++) { ; do { void **ptr_ = (void **)&(mp->buf[k]); xfree(*ptr_); *ptr_ = 
# 13 "/home/ubuntu/neovim/src/nvim/event/loop.h" 3 4
((void *)0)
# 13 "/home/ubuntu/neovim/src/nvim/event/loop.h"
; (void)(*ptr_); } while (0); } do { void **ptr_ = (void **)&(mp->buf); xfree(*ptr_); *ptr_ = 
# 13 "/home/ubuntu/neovim/src/nvim/event/loop.h" 3 4
((void *)0)
# 13 "/home/ubuntu/neovim/src/nvim/event/loop.h"
; (void)(*ptr_); } while (0); do { void **ptr_ = (void **)&(mp); xfree(*ptr_); *ptr_ = 
# 13 "/home/ubuntu/neovim/src/nvim/event/loop.h" 3 4
((void *)0)
# 13 "/home/ubuntu/neovim/src/nvim/event/loop.h"
; (void)(*ptr_); } while (0); } static inline kl1_WatcherPtr *kmp_alloc_WatcherPtr(kmp_WatcherPtr_t *mp) { mp->cnt++; if (mp->n == 0) { return (kl1_WatcherPtr *)xcalloc(1, sizeof(kl1_WatcherPtr)); } return mp->buf[--mp->n]; } static inline void kmp_free_WatcherPtr(kmp_WatcherPtr_t *mp, kl1_WatcherPtr *p) { mp->cnt--; if (mp->n == mp->max) { mp->max = mp->max ? (mp->max << 1) : 16; mp->buf = (kl1_WatcherPtr **)xrealloc(mp->buf, sizeof(kl1_WatcherPtr *) * mp->max); } mp->buf[mp->n++] = p; } typedef struct { kl1_WatcherPtr *head, *tail; kmp_WatcherPtr_t *mp; size_t size; } kl_WatcherPtr_t; static inline kl_WatcherPtr_t *kl_init_WatcherPtr(void) { kl_WatcherPtr_t *kl = (kl_WatcherPtr_t *)xcalloc(1, sizeof(kl_WatcherPtr_t)); kl->mp = kmp_init_WatcherPtr(); kl->head = kl->tail = kmp_alloc_WatcherPtr(kl->mp); kl->head->next = 0; return kl; } static inline void kl_destroy_WatcherPtr(kl_WatcherPtr_t *kl) __attribute__((unused)); static inline void kl_destroy_WatcherPtr(kl_WatcherPtr_t *kl) { kl1_WatcherPtr *p; for (p = kl->head; p != kl->tail; p = p->next) { kmp_free_WatcherPtr(kl->mp, p); } kmp_free_WatcherPtr(kl->mp, p); kmp_destroy_WatcherPtr(kl->mp); do { void **ptr_ = (void **)&(kl); xfree(*ptr_); *ptr_ = 
# 13 "/home/ubuntu/neovim/src/nvim/event/loop.h" 3 4
((void *)0)
# 13 "/home/ubuntu/neovim/src/nvim/event/loop.h"
; (void)(*ptr_); } while (0); } static inline void kl_push_WatcherPtr(kl_WatcherPtr_t *kl, WatcherPtr d) { kl1_WatcherPtr *q, *p = kmp_alloc_WatcherPtr(kl->mp); q = kl->tail; p->next = 0; kl->tail->next = p; kl->tail = p; kl->size++; q->data = d; } static inline WatcherPtr kl_shift_at_WatcherPtr(kl_WatcherPtr_t *kl, kl1_WatcherPtr **n) { 
# 13 "/home/ubuntu/neovim/src/nvim/event/loop.h" 3 4
((void) sizeof ((
# 13 "/home/ubuntu/neovim/src/nvim/event/loop.h"
(*n)->next
# 13 "/home/ubuntu/neovim/src/nvim/event/loop.h" 3 4
) ? 1 : 0), __extension__ ({ if (
# 13 "/home/ubuntu/neovim/src/nvim/event/loop.h"
(*n)->next
# 13 "/home/ubuntu/neovim/src/nvim/event/loop.h" 3 4
) ; else __assert_fail (
# 13 "/home/ubuntu/neovim/src/nvim/event/loop.h"
"(*n)->next"
# 13 "/home/ubuntu/neovim/src/nvim/event/loop.h" 3 4
, "/home/ubuntu/neovim/src/nvim/event/loop.h", 13, __extension__ __PRETTY_FUNCTION__); }))
# 13 "/home/ubuntu/neovim/src/nvim/event/loop.h"
; kl1_WatcherPtr *p; kl->size--; p = *n; *n = (*n)->next; if (p == kl->head) { kl->head = *n; } WatcherPtr d = p->data; kmp_free_WatcherPtr(kl->mp, p); return d; }

struct loop {
  uv_loop_t uv;
  MultiQueue *events;
  MultiQueue *thread_events;
# 28 "/home/ubuntu/neovim/src/nvim/event/loop.h"
  MultiQueue *fast_events;


  kl_WatcherPtr_t *children;
  uv_signal_t children_watcher;
  uv_timer_t children_kill_timer;


  uv_timer_t poll_timer;

  uv_timer_t exit_delay_timer;

  uv_async_t async;
  uv_mutex_t mutex;
  int recursive;
  
# 43 "/home/ubuntu/neovim/src/nvim/event/loop.h" 3 4
 _Bool 
# 43 "/home/ubuntu/neovim/src/nvim/event/loop.h"
      closing;
};
# 9 "/home/ubuntu/neovim/src/nvim/globals.h" 2


# 1 "/home/ubuntu/neovim/src/nvim/getchar_defs.h" 1
       


# 1 "/usr/lib/gcc/aarch64-linux-gnu/9/include/stddef.h" 1 3 4
# 5 "/home/ubuntu/neovim/src/nvim/getchar_defs.h" 2





typedef struct buffblock {
  struct buffblock *b_next;
  char b_str[1];
} buffblock_T;


typedef struct {
  buffblock_T bh_first;
  buffblock_T *bh_curr;
  size_t bh_index;
  size_t bh_space;
} buffheader_T;

typedef struct {
  buffheader_T sr_redobuff;
  buffheader_T sr_old_redobuff;
} save_redo_T;


typedef struct {
  uint8_t *tb_buf;
  uint8_t *tb_noremap;
  int tb_buflen;
  int tb_off;
  int tb_len;
  int tb_maplen;
  int tb_silent;
  int tb_no_abbr_cnt;
  int tb_change_cnt;
} typebuf_T;


typedef struct {
  typebuf_T save_typebuf;
  
# 44 "/home/ubuntu/neovim/src/nvim/getchar_defs.h" 3 4
 _Bool 
# 44 "/home/ubuntu/neovim/src/nvim/getchar_defs.h"
      typebuf_valid;
  int old_char;
  int old_mod_mask;
  buffheader_T save_readbuf1;
  buffheader_T save_readbuf2;
  String save_inputbuf;
} tasave_T;




enum RemapValues {
  REMAP_YES = 0,
  REMAP_NONE = -1,
  REMAP_SCRIPT = -2,
  REMAP_SKIP = -3,
};
# 12 "/home/ubuntu/neovim/src/nvim/globals.h" 2


# 1 "/home/ubuntu/neovim/src/nvim/menu_defs.h" 1
       






enum {
  MENU_INDEX_INVALID = -1,
  MENU_INDEX_NORMAL = 0,
  MENU_INDEX_VISUAL = 1,
  MENU_INDEX_SELECT = 2,
  MENU_INDEX_OP_PENDING = 3,
  MENU_INDEX_INSERT = 4,
  MENU_INDEX_CMDLINE = 5,
  MENU_INDEX_TERMINAL = 6,
  MENU_INDEX_TIP = 7,
  MENU_MODES = 8,
};





enum {
  MENU_NORMAL_MODE = 1 << MENU_INDEX_NORMAL,
  MENU_VISUAL_MODE = 1 << MENU_INDEX_VISUAL,
  MENU_SELECT_MODE = 1 << MENU_INDEX_SELECT,
  MENU_OP_PENDING_MODE = 1 << MENU_INDEX_OP_PENDING,
  MENU_INSERT_MODE = 1 << MENU_INDEX_INSERT,
  MENU_CMDLINE_MODE = 1 << MENU_INDEX_CMDLINE,
  MENU_TERMINAL_MODE = 1 << MENU_INDEX_TERMINAL,
  MENU_TIP_MODE = 1 << MENU_INDEX_TIP,
  MENU_ALL_MODES = (1 << MENU_INDEX_TIP) - 1,
};






typedef struct VimMenu vimmenu_T;

struct VimMenu {
  int modes;
  int enabled;
  char *name;
  char *dname;
  char *en_name;

  char *en_dname;
  int mnemonic;
  char *actext;
  int priority;
  char *strings[MENU_MODES];
  int noremap[MENU_MODES];
  
# 57 "/home/ubuntu/neovim/src/nvim/menu_defs.h" 3 4
 _Bool 
# 57 "/home/ubuntu/neovim/src/nvim/menu_defs.h"
      silent[MENU_MODES];
  vimmenu_T *children;
  vimmenu_T *parent;
  vimmenu_T *next;
};
# 15 "/home/ubuntu/neovim/src/nvim/globals.h" 2

# 1 "/home/ubuntu/neovim/src/nvim/runtime_defs.h" 1
       



# 1 "/home/ubuntu/neovim/src/nvim/autocmd_defs.h" 1
       


# 1 "/usr/lib/gcc/aarch64-linux-gnu/9/include/stddef.h" 1 3 4
# 5 "/home/ubuntu/neovim/src/nvim/autocmd_defs.h" 2
# 16 "/home/ubuntu/neovim/src/nvim/autocmd_defs.h"
typedef struct {
  int use_aucmd_win_idx;
  handle_T save_curwin_handle;
  handle_T new_curwin_handle;
  handle_T save_prevwin_handle;
  bufref_T new_curbuf;
  char *tp_localdir;
  char *globaldir;
  
# 24 "/home/ubuntu/neovim/src/nvim/autocmd_defs.h" 3 4
 _Bool 
# 24 "/home/ubuntu/neovim/src/nvim/autocmd_defs.h"
      save_VIsual_active;
  int save_State;
  int save_prompt_insert;
} aco_save_T;

typedef struct {
  size_t refcount;
  char *pat;
  regprog_T *reg_prog;
  int group;
  int patlen;
  int buflocal_nr;
  char allow_dirs;
} AutoPat;

typedef struct {
  AucmdExecutable exec;
  AutoPat *pat;
  int64_t id;
  char *desc;
  sctx_T script_ctx;
  
# 45 "/home/ubuntu/neovim/src/nvim/autocmd_defs.h" 3 4
 _Bool 
# 45 "/home/ubuntu/neovim/src/nvim/autocmd_defs.h"
      once;
  
# 46 "/home/ubuntu/neovim/src/nvim/autocmd_defs.h" 3 4
 _Bool 
# 46 "/home/ubuntu/neovim/src/nvim/autocmd_defs.h"
      nested;
} AutoCmd;


typedef struct AutoPatCmd_S AutoPatCmd;
struct AutoPatCmd_S {
  AutoPat *lastpat;
  size_t auidx;
  size_t ausize;
  char *fname;
  char *sfname;
  char *tail;
  int group;
  event_T event;
  sctx_T script_ctx;
  int arg_bufnr;
  Object *data;
  AutoPatCmd *next;
};

typedef struct { size_t size; size_t capacity; AutoCmd *items; } AutoCmdVec;
# 6 "/home/ubuntu/neovim/src/nvim/runtime_defs.h" 2

typedef enum {
  ETYPE_TOP,
  ETYPE_SCRIPT,
  ETYPE_UFUNC,
  ETYPE_AUCMD,
  ETYPE_MODELINE,
  ETYPE_EXCEPT,
  ETYPE_ARGS,
  ETYPE_ENV,
  ETYPE_INTERNAL,
  ETYPE_SPELL,
} etype_T;


typedef struct {
  linenr_T es_lnum;
  char *es_name;
  etype_T es_type;
  union {
    sctx_T *sctx;
    ufunc_T *ufunc;
    AutoPatCmd *aucmd;
    except_T *except;
  } es_info;
} estack_T;


typedef enum {
  ESTACK_NONE,
  ESTACK_SFILE,
  ESTACK_STACK,
  ESTACK_SCRIPT,
} estack_arg_T;



typedef struct {
  ScopeDictDictItem sv_var;
  dict_T sv_dict;
} scriptvar_T;

typedef struct {
  scriptvar_T *sn_vars;

  char *sn_name;
  
# 52 "/home/ubuntu/neovim/src/nvim/runtime_defs.h" 3 4
 _Bool 
# 52 "/home/ubuntu/neovim/src/nvim/runtime_defs.h"
      sn_prof_on;
  
# 53 "/home/ubuntu/neovim/src/nvim/runtime_defs.h" 3 4
 _Bool 
# 53 "/home/ubuntu/neovim/src/nvim/runtime_defs.h"
      sn_pr_force;
  proftime_T sn_pr_child;
  int sn_pr_nest;

  int sn_pr_count;
  proftime_T sn_pr_total;
  proftime_T sn_pr_self;
  proftime_T sn_pr_start;
  proftime_T sn_pr_children;

  garray_T sn_prl_ga;
  proftime_T sn_prl_start;
  proftime_T sn_prl_children;
  proftime_T sn_prl_wait;
  linenr_T sn_prl_idx;
  int sn_prl_execed;
} scriptitem_T;

typedef 
# 71 "/home/ubuntu/neovim/src/nvim/runtime_defs.h" 3 4
       _Bool 
# 71 "/home/ubuntu/neovim/src/nvim/runtime_defs.h"
            (*DoInRuntimepathCB)(int, char **, 
# 71 "/home/ubuntu/neovim/src/nvim/runtime_defs.h" 3 4
                                               _Bool
# 71 "/home/ubuntu/neovim/src/nvim/runtime_defs.h"
                                                   , void *);
# 17 "/home/ubuntu/neovim/src/nvim/globals.h" 2
# 1 "/home/ubuntu/neovim/src/nvim/state_defs.h" 1
       

typedef struct vim_state VimState;

typedef int (*state_check_callback)(VimState *state);
typedef int (*state_execute_callback)(VimState *state, int key);

struct vim_state {
  state_check_callback check;
  state_execute_callback execute;
};
# 20 "/home/ubuntu/neovim/src/nvim/state_defs.h"
enum {
  MODE_NORMAL = 0x01,
  MODE_VISUAL = 0x02,
  MODE_OP_PENDING = 0x04,
  MODE_CMDLINE = 0x08,
  MODE_INSERT = 0x10,
  MODE_LANGMAP = 0x20,
  MODE_SELECT = 0x40,
  MODE_TERMINAL = 0x80,

  MAP_ALL_MODES = 0xff,

  REPLACE_FLAG = 0x100,
  MODE_REPLACE = REPLACE_FLAG | MODE_INSERT,
  VREPLACE_FLAG = 0x200,
  MODE_VREPLACE = REPLACE_FLAG | VREPLACE_FLAG | MODE_INSERT,
  MODE_LREPLACE = REPLACE_FLAG | MODE_LANGMAP,

  MODE_NORMAL_BUSY = 0x1000 | MODE_NORMAL,
  MODE_HITRETURN = 0x2000 | MODE_NORMAL,
  MODE_ASKMORE = 0x3000,
  MODE_SETWSIZE = 0x4000,
  MODE_EXTERNCMD = 0x5000,
  MODE_SHOWMATCH = 0x6000 | MODE_INSERT,
  MODE_CONFIRM = 0x7000,
};
# 18 "/home/ubuntu/neovim/src/nvim/globals.h" 2
# 1 "/home/ubuntu/neovim/src/nvim/syntax_defs.h" 1
       
# 12 "/home/ubuntu/neovim/src/nvim/syntax_defs.h"
struct sp_syn {
  int inc_tag;
  int16_t id;
  int16_t *cont_in_list;
};


typedef struct keyentry keyentry_T;

struct keyentry {
  keyentry_T *ke_next;
  struct sp_syn k_syn;
  int16_t *next_list;
  int flags;
  int k_char;
  char keyword[];
};


typedef struct {
  int bs_idx;
  int bs_flags;
  int bs_seqnr;
  int bs_cchar;
  reg_extmatch_T *bs_extmatch;
} bufstate_T;



struct syn_state {
  synstate_T *sst_next;
  linenr_T sst_lnum;
  union {
    bufstate_T sst_stack[7];
    garray_T sst_ga;
  } sst_union;
  int sst_next_flags;
  int sst_stacksize;
  int16_t *sst_next_list;

  disptick_T sst_tick;
  linenr_T sst_change_lnum;

};
# 19 "/home/ubuntu/neovim/src/nvim/globals.h" 2
# 84 "/home/ubuntu/neovim/src/nvim/globals.h"
extern struct nvim_stats_s {
  int64_t fsync;
  int64_t redraw;
  int16_t log_skip;
} g_stats ;
# 102 "/home/ubuntu/neovim/src/nvim/globals.h"
extern int Rows ;
extern int Columns ;



extern int mod_mask ;



extern int vgetc_mod_mask ;
extern int vgetc_char ;
# 121 "/home/ubuntu/neovim/src/nvim/globals.h"
extern int cmdline_row;

extern 
# 123 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 123 "/home/ubuntu/neovim/src/nvim/globals.h"
           redraw_cmdline ;
extern 
# 124 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 124 "/home/ubuntu/neovim/src/nvim/globals.h"
           redraw_mode ;
extern 
# 125 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 125 "/home/ubuntu/neovim/src/nvim/globals.h"
           clear_cmdline ;
extern 
# 126 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 126 "/home/ubuntu/neovim/src/nvim/globals.h"
           mode_displayed ;
extern int cmdline_star ;
extern 
# 128 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 128 "/home/ubuntu/neovim/src/nvim/globals.h"
           redrawing_cmdline ;
extern 
# 129 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 129 "/home/ubuntu/neovim/src/nvim/globals.h"
           cmdline_was_last_drawn ;

extern 
# 131 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 131 "/home/ubuntu/neovim/src/nvim/globals.h"
           exec_from_reg ;





extern colnr_T dollar_vcol ;



extern char *edit_submode ;
extern char *edit_submode_pre ;
extern char *edit_submode_extra ;
extern hlf_T edit_submode_highl;


extern 
# 147 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 147 "/home/ubuntu/neovim/src/nvim/globals.h"
           cmdmsg_rl ;
extern int msg_col;
extern int msg_row;
extern int msg_scrolled;


extern 
# 153 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 153 "/home/ubuntu/neovim/src/nvim/globals.h"
           msg_scrolled_ign ;


extern 
# 156 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 156 "/home/ubuntu/neovim/src/nvim/globals.h"
           msg_did_scroll ;

extern char *keep_msg ;
extern int keep_msg_attr ;
extern 
# 160 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 160 "/home/ubuntu/neovim/src/nvim/globals.h"
           need_fileinfo ;
extern int msg_scroll ;
extern 
# 162 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 162 "/home/ubuntu/neovim/src/nvim/globals.h"
           msg_didout ;
extern 
# 163 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 163 "/home/ubuntu/neovim/src/nvim/globals.h"
           msg_didany ;
extern 
# 164 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 164 "/home/ubuntu/neovim/src/nvim/globals.h"
           msg_nowait ;
extern int emsg_off ;

extern 
# 167 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 167 "/home/ubuntu/neovim/src/nvim/globals.h"
           info_message ;
extern 
# 168 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 168 "/home/ubuntu/neovim/src/nvim/globals.h"
           msg_hist_off ;
extern 
# 169 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 169 "/home/ubuntu/neovim/src/nvim/globals.h"
           need_clr_eos ;

extern int emsg_skip ;

extern 
# 173 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 173 "/home/ubuntu/neovim/src/nvim/globals.h"
           emsg_severe ;


extern char *emsg_assert_fails_msg ;
extern long emsg_assert_fails_lnum ;
extern char *emsg_assert_fails_context ;

extern 
# 180 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 180 "/home/ubuntu/neovim/src/nvim/globals.h"
           did_endif ;
extern dict_T vimvardict;
extern dict_T globvardict;


extern int did_emsg;

extern 
# 187 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 187 "/home/ubuntu/neovim/src/nvim/globals.h"
           called_vim_beep;
extern 
# 188 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 188 "/home/ubuntu/neovim/src/nvim/globals.h"
           did_emsg_syntax;

extern int called_emsg;
extern int ex_exitval ;
extern 
# 192 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 192 "/home/ubuntu/neovim/src/nvim/globals.h"
           emsg_on_display ;
extern 
# 193 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 193 "/home/ubuntu/neovim/src/nvim/globals.h"
           rc_did_emsg ;

extern int no_wait_return ;
extern 
# 196 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 196 "/home/ubuntu/neovim/src/nvim/globals.h"
           need_wait_return ;
extern 
# 197 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 197 "/home/ubuntu/neovim/src/nvim/globals.h"
           did_wait_return ;

extern 
# 199 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 199 "/home/ubuntu/neovim/src/nvim/globals.h"
           need_maketitle ;

extern 
# 201 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 201 "/home/ubuntu/neovim/src/nvim/globals.h"
           quit_more ;
extern int vgetc_busy ;

extern 
# 204 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 204 "/home/ubuntu/neovim/src/nvim/globals.h"
           didset_vim ;
extern 
# 205 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 205 "/home/ubuntu/neovim/src/nvim/globals.h"
           didset_vimruntime ;



extern int lines_left ;
extern 
# 210 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 210 "/home/ubuntu/neovim/src/nvim/globals.h"
           msg_no_more ;


extern int ex_nesting_level ;
extern int debug_break_level ;
extern 
# 215 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 215 "/home/ubuntu/neovim/src/nvim/globals.h"
           debug_did_msg ;
extern int debug_tick ;
extern int debug_backtrace_level ;





extern int do_profiling ;




extern except_T *current_exception;



extern 
# 232 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 232 "/home/ubuntu/neovim/src/nvim/globals.h"
           did_throw ;



extern 
# 236 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 236 "/home/ubuntu/neovim/src/nvim/globals.h"
           need_rethrow ;



extern 
# 240 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 240 "/home/ubuntu/neovim/src/nvim/globals.h"
           check_cstack ;



extern int trylevel ;







extern 
# 252 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 252 "/home/ubuntu/neovim/src/nvim/globals.h"
           force_abort ;
# 262 "/home/ubuntu/neovim/src/nvim/globals.h"
extern msglist_T **msg_list ;





extern 
# 268 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 268 "/home/ubuntu/neovim/src/nvim/globals.h"
           suppress_errthrow ;





extern except_T *caught_stack ;
# 284 "/home/ubuntu/neovim/src/nvim/globals.h"
extern 
# 284 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 284 "/home/ubuntu/neovim/src/nvim/globals.h"
           may_garbage_collect ;
extern 
# 285 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 285 "/home/ubuntu/neovim/src/nvim/globals.h"
           want_garbage_collect ;
extern 
# 286 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 286 "/home/ubuntu/neovim/src/nvim/globals.h"
           garbage_collect_at_exit ;
# 301 "/home/ubuntu/neovim/src/nvim/globals.h"
extern sctx_T current_sctx ;

extern uint64_t current_channel_id ;

extern 
# 305 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 305 "/home/ubuntu/neovim/src/nvim/globals.h"
           did_source_packages ;



extern struct caller_scope {
  sctx_T script_ctx;
  estack_T es_entry;
  char *autocmd_fname, *autocmd_match;
  
# 313 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
 _Bool 
# 313 "/home/ubuntu/neovim/src/nvim/globals.h"
      autocmd_fname_full;
  int autocmd_bufnr;
  void *funccalp;
} provider_caller_scope;
extern int provider_call_nesting ;

extern int t_colors ;


extern int include_none ;
extern int include_default ;
extern int include_link ;





extern 
# 330 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 330 "/home/ubuntu/neovim/src/nvim/globals.h"
           highlight_match ;
extern linenr_T search_match_lines;
extern colnr_T search_match_endcol;
extern linenr_T search_first_line ;
extern linenr_T search_last_line ;

extern 
# 336 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 336 "/home/ubuntu/neovim/src/nvim/globals.h"
           no_smartcase ;

extern 
# 338 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 338 "/home/ubuntu/neovim/src/nvim/globals.h"
           need_check_timestamps ;

extern 
# 340 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 340 "/home/ubuntu/neovim/src/nvim/globals.h"
           did_check_timestamps ;

extern int no_check_timestamps ;


extern int mouse_grid;
extern int mouse_row;
extern int mouse_col;
extern 
# 348 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 348 "/home/ubuntu/neovim/src/nvim/globals.h"
           mouse_past_bottom ;
extern 
# 349 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 349 "/home/ubuntu/neovim/src/nvim/globals.h"
           mouse_past_eol ;
extern int mouse_dragging ;



extern vimmenu_T *root_menu ;


extern 
# 357 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 357 "/home/ubuntu/neovim/src/nvim/globals.h"
           sys_menu ;




extern win_T *firstwin;
extern win_T *lastwin;
extern win_T *prevwin ;
# 379 "/home/ubuntu/neovim/src/nvim/globals.h"
extern win_T *curwin;



extern frame_T *topframe;




extern tabpage_T *first_tabpage;
extern tabpage_T *curtab;
extern tabpage_T *lastused_tabpage;
extern 
# 391 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 391 "/home/ubuntu/neovim/src/nvim/globals.h"
           redraw_tabline ;






extern buf_T *firstbuf ;
extern buf_T *lastbuf ;
extern buf_T *curbuf ;
# 413 "/home/ubuntu/neovim/src/nvim/globals.h"
extern alist_T global_alist;
extern int max_alist_id ;
extern 
# 415 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 415 "/home/ubuntu/neovim/src/nvim/globals.h"
           arg_had_last ;


extern int ru_col;
extern int ru_wid;
extern int sc_col;





extern int starting ;

extern 
# 428 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 428 "/home/ubuntu/neovim/src/nvim/globals.h"
           exiting ;

extern int v_dying ;

extern 
# 432 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 432 "/home/ubuntu/neovim/src/nvim/globals.h"
           stdin_isatty ;

extern 
# 434 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 434 "/home/ubuntu/neovim/src/nvim/globals.h"
           stdout_isatty ;

extern 
# 436 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 436 "/home/ubuntu/neovim/src/nvim/globals.h"
           stderr_isatty ;


extern int stdin_fd ;


extern 
# 442 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 442 "/home/ubuntu/neovim/src/nvim/globals.h"
           full_screen ;


extern int secure ;



extern int textlock ;



extern int allbuf_lock ;



extern int sandbox ;


extern 
# 460 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 460 "/home/ubuntu/neovim/src/nvim/globals.h"
           silent_mode ;


extern pos_T VIsual;

extern 
# 465 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 465 "/home/ubuntu/neovim/src/nvim/globals.h"
           VIsual_active ;

extern 
# 467 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 467 "/home/ubuntu/neovim/src/nvim/globals.h"
           VIsual_select ;

extern int VIsual_select_reg ;

extern int restart_VIsual_select ;

extern int VIsual_reselect;

extern int VIsual_mode ;

extern 
# 477 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 477 "/home/ubuntu/neovim/src/nvim/globals.h"
           redo_VIsual_busy ;


extern int resel_VIsual_mode ;
extern linenr_T resel_VIsual_line_count;
extern colnr_T resel_VIsual_vcol;



extern pos_T where_paste_started;





extern 
# 492 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 492 "/home/ubuntu/neovim/src/nvim/globals.h"
           did_ai ;



extern colnr_T ai_col ;





extern int end_comment_pending ;





extern 
# 508 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 508 "/home/ubuntu/neovim/src/nvim/globals.h"
           did_syncbind ;



extern 
# 512 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 512 "/home/ubuntu/neovim/src/nvim/globals.h"
           did_si ;



extern 
# 516 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 516 "/home/ubuntu/neovim/src/nvim/globals.h"
           can_si ;



extern 
# 520 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 520 "/home/ubuntu/neovim/src/nvim/globals.h"
           can_si_back ;

extern int old_indent ;


extern pos_T saved_cursor ;


extern pos_T Insstart;





extern pos_T Insstart_orig;


extern linenr_T orig_line_count ;
extern int vr_lines_changed ;


extern int inhibit_delete_count ;
# 558 "/home/ubuntu/neovim/src/nvim/globals.h"
extern char *fenc_default ;
# 567 "/home/ubuntu/neovim/src/nvim/globals.h"
extern int State ;

extern 
# 569 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 569 "/home/ubuntu/neovim/src/nvim/globals.h"
           debug_mode ;
extern 
# 570 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 570 "/home/ubuntu/neovim/src/nvim/globals.h"
           finish_op ;
extern int opcount ;
extern int motion_force ;


extern 
# 575 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 575 "/home/ubuntu/neovim/src/nvim/globals.h"
           exmode_active ;


extern 
# 578 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 578 "/home/ubuntu/neovim/src/nvim/globals.h"
           pending_exmode_active ;

extern 
# 580 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 580 "/home/ubuntu/neovim/src/nvim/globals.h"
           ex_no_reprint ;


extern 
# 583 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 583 "/home/ubuntu/neovim/src/nvim/globals.h"
           cmdpreview ;

extern int reg_recording ;
extern int reg_executing ;

extern 
# 588 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 588 "/home/ubuntu/neovim/src/nvim/globals.h"
           pending_end_reg_executing ;
extern int reg_recorded ;

extern int no_mapping ;
extern int no_zero_mapping ;
extern int allow_keys ;
extern int no_u_sync ;
extern int u_sync_once ;


extern 
# 598 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 598 "/home/ubuntu/neovim/src/nvim/globals.h"
           force_restart_edit ;

extern int restart_edit ;
extern 
# 601 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 601 "/home/ubuntu/neovim/src/nvim/globals.h"
           arrow_used;



extern 
# 605 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 605 "/home/ubuntu/neovim/src/nvim/globals.h"
           ins_at_eol ;


extern 
# 608 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 608 "/home/ubuntu/neovim/src/nvim/globals.h"
           no_abbr ;

extern int mapped_ctrl_c ;
extern 
# 611 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 611 "/home/ubuntu/neovim/src/nvim/globals.h"
           ctrl_c_interrupts ;

extern cmdmod_T cmdmod;

extern int msg_silent ;
extern int emsg_silent ;
extern 
# 617 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 617 "/home/ubuntu/neovim/src/nvim/globals.h"
           emsg_noredir ;
extern 
# 618 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 618 "/home/ubuntu/neovim/src/nvim/globals.h"
           cmd_silent ;

extern 
# 620 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 620 "/home/ubuntu/neovim/src/nvim/globals.h"
           in_assert_fails ;
# 629 "/home/ubuntu/neovim/src/nvim/globals.h"
extern int swap_exists_action ;
extern 
# 630 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 630 "/home/ubuntu/neovim/src/nvim/globals.h"
           swap_exists_did_quit ;

extern char IObuff[(1024 + 1)];
extern char NameBuff[4096];
extern char msg_buf[480];
extern char os_buf[

                                            4096



];


extern int RedrawingDisabled ;

extern 
# 646 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 646 "/home/ubuntu/neovim/src/nvim/globals.h"
           readonlymode ;
extern 
# 647 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 647 "/home/ubuntu/neovim/src/nvim/globals.h"
           recoverymode ;


extern typebuf_T typebuf ;



extern 
# 654 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 654 "/home/ubuntu/neovim/src/nvim/globals.h"
           typebuf_was_empty ;

extern int ex_normal_busy ;
extern int expr_map_lock ;
extern 
# 658 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 658 "/home/ubuntu/neovim/src/nvim/globals.h"
           ignore_script ;
extern 
# 659 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 659 "/home/ubuntu/neovim/src/nvim/globals.h"
           stop_insert_mode;
extern 
# 660 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 660 "/home/ubuntu/neovim/src/nvim/globals.h"
           KeyTyped;
extern int KeyStuffed;
extern int maptick ;

extern int must_redraw ;
extern 
# 665 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 665 "/home/ubuntu/neovim/src/nvim/globals.h"
           skip_redraw ;
extern 
# 666 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 666 "/home/ubuntu/neovim/src/nvim/globals.h"
           do_redraw ;
extern 
# 667 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 667 "/home/ubuntu/neovim/src/nvim/globals.h"
           must_redraw_pum ;


extern 
# 670 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 670 "/home/ubuntu/neovim/src/nvim/globals.h"
           need_highlight_changed ;

extern FILE *scriptout ;



extern 
# 676 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 676 "/home/ubuntu/neovim/src/nvim/globals.h"
           got_int ;
extern 
# 677 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 677 "/home/ubuntu/neovim/src/nvim/globals.h"
           bangredo ;
extern int searchcmdlen;
extern int reg_do_extmatch ;



extern reg_extmatch_T *re_extmatch_in ;

extern reg_extmatch_T *re_extmatch_out ;

extern 
# 687 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 687 "/home/ubuntu/neovim/src/nvim/globals.h"
           did_outofmem_msg ;
extern 
# 688 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 688 "/home/ubuntu/neovim/src/nvim/globals.h"
           did_swapwrite_msg ;
extern int global_busy ;
extern 
# 690 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 690 "/home/ubuntu/neovim/src/nvim/globals.h"
           listcmd_busy ;
extern 
# 691 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 691 "/home/ubuntu/neovim/src/nvim/globals.h"
           need_start_insertmode ;




extern char last_mode[4] ;
extern char *last_cmdline ;
extern char *repeat_cmdline ;
extern char *new_last_cmdline ;

extern int postponed_split ;
extern int postponed_split_flags ;
extern int postponed_split_tab ;
extern int g_do_tagpreview ;

extern 
# 706 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 706 "/home/ubuntu/neovim/src/nvim/globals.h"
           g_tag_at_cursor ;



extern int replace_offset ;

extern char *escape_chars ;

extern 
# 714 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 714 "/home/ubuntu/neovim/src/nvim/globals.h"
           keep_help_flag ;





extern char *empty_string_option ;

extern 
# 722 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 722 "/home/ubuntu/neovim/src/nvim/globals.h"
           redir_off ;
extern FILE *redir_fd ;
extern int redir_reg ;
extern 
# 725 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 725 "/home/ubuntu/neovim/src/nvim/globals.h"
           redir_vname ;
extern garray_T *capture_ga ;

extern uint8_t langmap_mapchar[256];

extern int save_p_ls ;
extern int save_p_wmh ;
extern int wild_menu_showing ;
enum {
  WM_SHOWN = 1,
  WM_SCROLLED = 2,
  WM_LIST = 3,
};




extern char *globaldir ;

extern char *last_chdir_reason ;


extern 
# 747 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 747 "/home/ubuntu/neovim/src/nvim/globals.h"
           km_stopsel ;
extern 
# 748 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 748 "/home/ubuntu/neovim/src/nvim/globals.h"
           km_startsel ;

extern int cmdwin_type ;
extern int cmdwin_result ;
extern int cmdwin_level ;
extern buf_T *cmdwin_buf ;
extern win_T *cmdwin_win ;
extern win_T *cmdwin_old_curwin ;

extern char no_lines_msg[] ;




extern int sub_nsubs;
extern linenr_T sub_nlines;


extern uint8_t wim_flags[4];




extern int stl_syntax ;


extern 
# 774 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 774 "/home/ubuntu/neovim/src/nvim/globals.h"
           no_hlsearch ;

extern 
# 776 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 776 "/home/ubuntu/neovim/src/nvim/globals.h"
           typebuf_was_filled ;
# 787 "/home/ubuntu/neovim/src/nvim/globals.h"
extern TriState virtual_op ;


extern disptick_T display_tick ;



extern linenr_T spell_redraw_lnum ;

extern FILE *time_fd ;




extern int vim_ignored;


extern 
# 804 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 804 "/home/ubuntu/neovim/src/nvim/globals.h"
           embedded_mode ;

extern 
# 806 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 806 "/home/ubuntu/neovim/src/nvim/globals.h"
           headless_mode ;


extern char windowsVersion[20] ;



extern optmagic_T magic_overruled ;


extern 
# 816 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 816 "/home/ubuntu/neovim/src/nvim/globals.h"
           skip_win_fix_cursor ;

extern 
# 818 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 818 "/home/ubuntu/neovim/src/nvim/globals.h"
           skip_win_fix_scroll ;

extern 
# 820 "/home/ubuntu/neovim/src/nvim/globals.h" 3 4
      _Bool 
# 820 "/home/ubuntu/neovim/src/nvim/globals.h"
           skip_update_topline ;
# 29 "/home/ubuntu/neovim/src/nvim/regexp.c" 2
# 1 "/home/ubuntu/neovim/src/nvim/keycodes.h" 1
       
# 97 "/home/ubuntu/neovim/src/nvim/keycodes.h"
enum key_extra {
  KE_S_UP = 4,
  KE_S_DOWN = 5,


  KE_S_F1 = 6,
  KE_S_F2 = 7,
  KE_S_F3 = 8,
  KE_S_F4 = 9,
  KE_S_F5 = 10,
  KE_S_F6 = 11,
  KE_S_F7 = 12,
  KE_S_F8 = 13,
  KE_S_F9 = 14,
  KE_S_F10 = 15,

  KE_S_F11 = 16,
  KE_S_F12 = 17,
  KE_S_F13 = 18,
  KE_S_F14 = 19,
  KE_S_F15 = 20,
  KE_S_F16 = 21,
  KE_S_F17 = 22,
  KE_S_F18 = 23,
  KE_S_F19 = 24,
  KE_S_F20 = 25,

  KE_S_F21 = 26,
  KE_S_F22 = 27,
  KE_S_F23 = 28,
  KE_S_F24 = 29,
  KE_S_F25 = 30,
  KE_S_F26 = 31,
  KE_S_F27 = 32,
  KE_S_F28 = 33,
  KE_S_F29 = 34,
  KE_S_F30 = 35,

  KE_S_F31 = 36,
  KE_S_F32 = 37,
  KE_S_F33 = 38,
  KE_S_F34 = 39,
  KE_S_F35 = 40,
  KE_S_F36 = 41,
  KE_S_F37 = 42,

  KE_MOUSE = 43,



  KE_LEFTMOUSE = 44,
  KE_LEFTDRAG = 45,
  KE_LEFTRELEASE = 46,
  KE_MIDDLEMOUSE = 47,
  KE_MIDDLEDRAG = 48,
  KE_MIDDLERELEASE = 49,
  KE_RIGHTMOUSE = 50,
  KE_RIGHTDRAG = 51,
  KE_RIGHTRELEASE = 52,

  KE_IGNORE = 53,

  KE_TAB = 54,
  KE_S_TAB_OLD = 55,


  KE_XF1 = 57,
  KE_XF2 = 58,
  KE_XF3 = 59,
  KE_XF4 = 60,
  KE_XEND = 61,
  KE_ZEND = 62,
  KE_XHOME = 63,
  KE_ZHOME = 64,
  KE_XUP = 65,
  KE_XDOWN = 66,
  KE_XLEFT = 67,
  KE_XRIGHT = 68,

  KE_LEFTMOUSE_NM = 69,
  KE_LEFTRELEASE_NM = 70,

  KE_S_XF1 = 71,
  KE_S_XF2 = 72,
  KE_S_XF3 = 73,
  KE_S_XF4 = 74,




  KE_MOUSEDOWN = 75,
  KE_MOUSEUP = 76,
  KE_MOUSELEFT = 77,
  KE_MOUSERIGHT = 78,

  KE_KINS = 79,
  KE_KDEL = 80,


  KE_SNR = 82,
  KE_PLUG = 83,
  KE_CMDWIN = 84,

  KE_C_LEFT = 85,
  KE_C_RIGHT = 86,
  KE_C_HOME = 87,
  KE_C_END = 88,

  KE_X1MOUSE = 89,
  KE_X1DRAG = 90,
  KE_X1RELEASE = 91,
  KE_X2MOUSE = 92,
  KE_X2DRAG = 93,
  KE_X2RELEASE = 94,

  KE_DROP = 95,

  KE_NOP = 97,


  KE_MOUSEMOVE = 100,

  KE_EVENT = 102,
  KE_LUA = 103,
  KE_COMMAND = 104,
};
# 476 "/home/ubuntu/neovim/src/nvim/keycodes.h"
enum {
  REPTERM_FROM_PART = 1,
  REPTERM_DO_LT = 2,
  REPTERM_NO_SPECIAL = 4,
  REPTERM_NO_SIMPLIFY = 8,
};


enum {
  FSK_KEYCODE = 0x01,
  FSK_KEEP_X_KEY = 0x02,
  FSK_IN_STRING = 0x04,
  FSK_SIMPLIFY = 0x08,
};
# 30 "/home/ubuntu/neovim/src/nvim/regexp.c" 2

# 1 "/home/ubuntu/neovim/src/nvim/mark.h" 1
       

# 1 "/usr/include/locale.h" 1 3 4
# 28 "/usr/include/locale.h" 3 4
# 1 "/usr/lib/gcc/aarch64-linux-gnu/9/include/stddef.h" 1 3 4
# 29 "/usr/include/locale.h" 2 3 4
# 1 "/usr/include/aarch64-linux-gnu/bits/locale.h" 1 3 4
# 30 "/usr/include/locale.h" 2 3 4


# 51 "/usr/include/locale.h" 3 4

# 51 "/usr/include/locale.h" 3 4
struct lconv
{


  char *decimal_point;
  char *thousands_sep;





  char *grouping;





  char *int_curr_symbol;
  char *currency_symbol;
  char *mon_decimal_point;
  char *mon_thousands_sep;
  char *mon_grouping;
  char *positive_sign;
  char *negative_sign;
  char int_frac_digits;
  char frac_digits;

  char p_cs_precedes;

  char p_sep_by_space;

  char n_cs_precedes;

  char n_sep_by_space;






  char p_sign_posn;
  char n_sign_posn;


  char int_p_cs_precedes;

  char int_p_sep_by_space;

  char int_n_cs_precedes;

  char int_n_sep_by_space;






  char int_p_sign_posn;
  char int_n_sign_posn;
# 118 "/usr/include/locale.h" 3 4
};



extern char *setlocale (int __category, const char *__locale) __attribute__ ((__nothrow__ , __leaf__));


extern struct lconv *localeconv (void) __attribute__ ((__nothrow__ , __leaf__));
# 141 "/usr/include/locale.h" 3 4
extern locale_t newlocale (int __category_mask, const char *__locale,
      locale_t __base) __attribute__ ((__nothrow__ , __leaf__));
# 176 "/usr/include/locale.h" 3 4
extern locale_t duplocale (locale_t __dataset) __attribute__ ((__nothrow__ , __leaf__));



extern void freelocale (locale_t __dataset) __attribute__ ((__nothrow__ , __leaf__));






extern locale_t uselocale (locale_t __dataset) __attribute__ ((__nothrow__ , __leaf__));








# 4 "/home/ubuntu/neovim/src/nvim/mark.h" 2






# 1 "/home/ubuntu/neovim/src/nvim/os/time.h" 1
       

# 1 "/usr/lib/gcc/aarch64-linux-gnu/9/include/stddef.h" 1 3 4
# 4 "/home/ubuntu/neovim/src/nvim/os/time.h" 2
# 11 "/home/ubuntu/neovim/src/nvim/mark.h" 2








# 18 "/home/ubuntu/neovim/src/nvim/mark.h"
static inline int mark_global_index(const char name)
  FUNC_ATTR_CONST
{
  return (((unsigned)(name) >= 'A' && (unsigned)(name) <= 'Z')
          ? (name - 'A')
          : (ascii_isdigit(name)
             ? (('z' - 'a' + 1) + (name - '0'))
             : -1));
}


static inline int mark_local_index(const char name)
  FUNC_ATTR_CONST
{
  return (((unsigned)(name) >= 'a' && (unsigned)(name) <= 'z')
          ? (name - 'a')
          : (name == '"'
             ? ('z' - 'a' + 1)
             : (name == '^'
                ? ('z' - 'a' + 1) + 1
                : (name == '.'
                   ? ('z' - 'a' + 1) + 2
                   : -1))));
}


extern xfmark_T namedfm[(('z' - 'a' + 1) + ('9' - '0' + 1))] ;
# 32 "/home/ubuntu/neovim/src/nvim/regexp.c" 2

# 1 "/home/ubuntu/neovim/src/nvim/mbyte.h" 1
       
# 19 "/home/ubuntu/neovim/src/nvim/mbyte.h"
enum {
  kInvalidByteCells = 4,
};
# 30 "/home/ubuntu/neovim/src/nvim/mbyte.h"
extern const uint8_t utf8len_tab_zero[256];

extern const uint8_t utf8len_tab[256];
# 57 "/home/ubuntu/neovim/src/nvim/mbyte.h"
static inline 
# 57 "/home/ubuntu/neovim/src/nvim/mbyte.h" 3 4
             _Bool 
# 57 "/home/ubuntu/neovim/src/nvim/mbyte.h"
                  utf_is_trail_byte(uint8_t const byte)
  FUNC_ATTR_CONST FUNC_ATTR_ALWAYS_INLINE
{

  return (uint8_t)(byte & 0xC0U) == 0x80U;
}
# 71 "/home/ubuntu/neovim/src/nvim/mbyte.h"
static inline CharInfo utf_ptr2CharInfo(char const *const p_in)
  FUNC_ATTR_NONNULL_ALL FUNC_ATTR_PURE FUNC_ATTR_WARN_UNUSED_RESULT FUNC_ATTR_ALWAYS_INLINE
{
  uint8_t const *const p = (uint8_t const *)p_in;
  uint8_t const first = *p;
  if (first < 0x80) {
    return (CharInfo){ .value = first, .len = 1 };
  } else {
    int len = utf8len_tab[first];
    int32_t const code_point = utf_ptr2CharInfo_impl(p, (uintptr_t)len);
    if (code_point < 0) {
      len = 1;
    }
    return (CharInfo){ .value = code_point, .len = len };
  }
}





static inline StrCharInfo utfc_next(StrCharInfo cur)
  FUNC_ATTR_NONNULL_ALL FUNC_ATTR_ALWAYS_INLINE FUNC_ATTR_PURE
{
  int32_t prev_code = cur.chr.value;
  uint8_t *next = (uint8_t *)(cur.ptr + cur.chr.len);

  while (
# 98 "/home/ubuntu/neovim/src/nvim/mbyte.h" 3 4
        1
# 98 "/home/ubuntu/neovim/src/nvim/mbyte.h"
            ) {
    if (__builtin_expect((*next < 0x80U), (
# 99 "/home/ubuntu/neovim/src/nvim/mbyte.h" 3 4
       1
# 99 "/home/ubuntu/neovim/src/nvim/mbyte.h"
       ))) {
      return (StrCharInfo){
        .ptr = (char *)next,
        .chr = (CharInfo){ .value = *next, .len = 1 },
      };
    }
    uint8_t const next_len = utf8len_tab[*next];
    int32_t const next_code = utf_ptr2CharInfo_impl(next, (uintptr_t)next_len);
    if (!utf_char_composinglike(prev_code, next_code)) {
      return (StrCharInfo){
        .ptr = (char *)next,
        .chr = (CharInfo){ .value = next_code, .len = (next_code < 0 ? 1 : next_len) },
      };
    }

    prev_code = next_code;
    next += next_len;
  }
}

static inline StrCharInfo utf_ptr2StrCharInfo(char *ptr)
  FUNC_ATTR_NONNULL_ALL FUNC_ATTR_ALWAYS_INLINE FUNC_ATTR_PURE
{
  return (StrCharInfo){ .ptr = ptr, .chr = utf_ptr2CharInfo(ptr) };
}
# 34 "/home/ubuntu/neovim/src/nvim/regexp.c" 2

# 1 "/home/ubuntu/neovim/src/nvim/memline.h" 1
       
# 36 "/home/ubuntu/neovim/src/nvim/regexp.c" 2



# 1 "/home/ubuntu/neovim/src/nvim/os/input.h" 1
       
# 10 "/home/ubuntu/neovim/src/nvim/os/input.h"
extern 
# 10 "/home/ubuntu/neovim/src/nvim/os/input.h" 3 4
      _Bool 
# 10 "/home/ubuntu/neovim/src/nvim/os/input.h"
           used_stdin ;
# 40 "/home/ubuntu/neovim/src/nvim/regexp.c" 2
# 1 "/home/ubuntu/neovim/src/nvim/plines.h" 1
       
# 10 "/home/ubuntu/neovim/src/nvim/plines.h"
typedef 
# 10 "/home/ubuntu/neovim/src/nvim/plines.h" 3 4
       _Bool 
# 10 "/home/ubuntu/neovim/src/nvim/plines.h"
            CSType;

enum {
  kCharsizeRegular,
  kCharsizeFast,
};


typedef struct {
  win_T *win;
  char *line;

  
# 22 "/home/ubuntu/neovim/src/nvim/plines.h" 3 4
 _Bool 
# 22 "/home/ubuntu/neovim/src/nvim/plines.h"
      use_tabstop;
  int indent_width;


  int virt_row;
  int cur_text_width_left;
  int cur_text_width_right;

  int max_head_vcol;
  MarkTreeIter iter[1];
} CharsizeArg;

typedef struct {
  int width;
  int head;
} CharSize;
# 52 "/home/ubuntu/neovim/src/nvim/plines.h"
static inline CharSize win_charsize(CSType cstype, int vcol, char *ptr, int32_t chr,
                                    CharsizeArg *csarg)
  FUNC_ATTR_NONNULL_ALL FUNC_ATTR_WARN_UNUSED_RESULT FUNC_ATTR_ALWAYS_INLINE
{
  if (cstype == kCharsizeFast) {
    return charsize_fast(csarg, vcol, chr);
  } else {
    return charsize_regular(csarg, ptr, vcol, chr);
  }
}







static inline int linetabsize_str(char *s)
  FUNC_ATTR_NONNULL_ALL FUNC_ATTR_WARN_UNUSED_RESULT FUNC_ATTR_ALWAYS_INLINE
{
  return linetabsize_col(0, s);
}
# 82 "/home/ubuntu/neovim/src/nvim/plines.h"
static inline int win_linetabsize(win_T *wp, linenr_T lnum, char *line, colnr_T len)
  FUNC_ATTR_NONNULL_ALL FUNC_ATTR_WARN_UNUSED_RESULT FUNC_ATTR_ALWAYS_INLINE
{
  CharsizeArg csarg;
  CSType const cstype = init_charsize_arg(&csarg, wp, lnum, line);
  if (cstype == kCharsizeFast) {
    return linesize_fast(&csarg, 0, len);
  } else {
    return linesize_regular(&csarg, 0, len);
  }
}
# 41 "/home/ubuntu/neovim/src/nvim/regexp.c" 2

# 1 "/home/ubuntu/neovim/src/nvim/profile.h" 1
       
# 43 "/home/ubuntu/neovim/src/nvim/regexp.c" 2
# 1 "/home/ubuntu/neovim/src/nvim/regexp.h" 1
       
# 44 "/home/ubuntu/neovim/src/nvim/regexp.c" 2





typedef enum {
  RGLF_LINE = 0x01,
  RGLF_LENGTH = 0x02,
  RGLF_SUBMATCH = 0x04,
} reg_getline_flags_T;

enum {


  NFA_MAX_BRACES = 20,
};

enum {

  NFA_MAX_STATES = 100000,
  NFA_TOO_EXPENSIVE = -1,
};



enum {
  AUTOMATIC_ENGINE = 0,
  BACKTRACKING_ENGINE = 1,
  NFA_ENGINE = 2,
};




struct regprog {
  regengine_T *engine;
  unsigned regflags;
  unsigned re_engine;
  unsigned re_flags;
  
# 83 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
 _Bool 
# 83 "/home/ubuntu/neovim/src/nvim/regexp.c"
      re_in_use;
};




typedef struct {

  regengine_T *engine;
  unsigned regflags;
  unsigned re_engine;
  unsigned re_flags;
  
# 95 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
 _Bool 
# 95 "/home/ubuntu/neovim/src/nvim/regexp.c"
      re_in_use;

  int regstart;
  uint8_t reganch;
  uint8_t *regmust;
  int regmlen;
  uint8_t reghasz;
  uint8_t program[];
} bt_regprog_T;



typedef struct nfa_state nfa_state_T;
struct nfa_state {
  int c;
  nfa_state_T *out;
  nfa_state_T *out1;
  int id;
  int lastlist[2];
  int val;
};


typedef struct {

  regengine_T *engine;
  unsigned regflags;
  unsigned re_engine;
  unsigned re_flags;
  
# 124 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
 _Bool 
# 124 "/home/ubuntu/neovim/src/nvim/regexp.c"
      re_in_use;

  nfa_state_T *start;

  int reganch;
  int regstart;
  uint8_t *match_text;

  int has_zend;
  int has_backref;
  int reghasz;
  char *pattern;
  int nsubexp;
  int nstate;
  nfa_state_T state[];
} nfa_regprog_T;

struct regengine {

  regprog_T *(*regcomp)(uint8_t *, int);

  void (*regfree)(regprog_T *);

  int (*regexec_nl)(regmatch_T *, uint8_t *, colnr_T, 
# 147 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                                     _Bool
# 147 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                                         );

  int (*regexec_multi)(regmmatch_T *, win_T *, buf_T *, linenr_T, colnr_T, proftime_T *, int *);



};




typedef struct {
  union {
    uint8_t *ptr;
    lpos_T pos;
  } rs_u;
  int rs_len;
} regsave_T;


typedef struct {
  union {
    uint8_t *ptr;
    lpos_T pos;
  } se_u;
} save_se_T;


typedef enum regstate_E {
  RS_NOPEN = 0,
  RS_MOPEN,
  RS_MCLOSE,
  RS_ZOPEN,
  RS_ZCLOSE,
  RS_BRANCH,
  RS_BRCPLX_MORE,
  RS_BRCPLX_LONG,
  RS_BRCPLX_SHORT,
  RS_NOMATCH,
  RS_BEHIND1,
  RS_BEHIND2,
  RS_STAR_LONG,
  RS_STAR_SHORT,
} regstate_T;





typedef struct regitem_S {
  regstate_T rs_state;
  int16_t rs_no;
  uint8_t *rs_scan;
  union {
    save_se_T sesave;
    regsave_T regsave;
  } rs_un;
} regitem_T;


typedef struct regbehind_S {
  regsave_T save_after;
  regsave_T save_behind;
  int save_need_clear_subexpr;
  save_se_T save_start[NSUBEXP];
  save_se_T save_end[NSUBEXP];
} regbehind_T;




typedef union Ptrlist Ptrlist;
union Ptrlist {
  Ptrlist *next;
  nfa_state_T *s;
};

struct Frag {
  nfa_state_T *start;
  Ptrlist *out;
};
typedef struct Frag Frag_T;

typedef struct {
  int in_use;


  union {
    struct multipos {
      linenr_T start_lnum;
      linenr_T end_lnum;
      colnr_T start_col;
      colnr_T end_col;
    } multi[NSUBEXP];
    struct linepos {
      uint8_t *start;
      uint8_t *end;
    } line[NSUBEXP];
  } list;
  colnr_T orig_start_col;
} regsub_T;

typedef struct {
  regsub_T norm;
  regsub_T synt;
} regsubs_T;


typedef struct nfa_pim_S nfa_pim_T;
struct nfa_pim_S {
  int result;
  nfa_state_T *state;
  regsubs_T subs;
  union {
    lpos_T pos;
    uint8_t *ptr;
  } end;
};


typedef struct {
  nfa_state_T *state;
  int count;
  nfa_pim_T pim;

  regsubs_T subs;
} nfa_thread_T;


typedef struct {
  nfa_thread_T *t;
  int n;
  int len;
  int id;
  int has_pim;
} nfa_list_T;
# 300 "/home/ubuntu/neovim/src/nvim/regexp.c"
typedef void (*fptr_T)(int *, int);

static int no_Magic(int x)
{
  if (((x) < 0)) {
    return ((x) + 256);
  }
  return x;
}

static int toggle_Magic(int x)
{
  if (((x) < 0)) {
    return ((x) + 256);
  }
  return ((int)(x) - 256);
}
# 341 "/home/ubuntu/neovim/src/nvim/regexp.c"
static const char e_invalid_character_after_str_at[]
  = "E59: Invalid character after %s@";
static const char e_invalid_use_of_underscore[]
  = "E63: Invalid use of \\_";
static const char e_pattern_uses_more_memory_than_maxmempattern[]
  = "E363: Pattern uses more memory than 'maxmempattern'";
static const char e_invalid_item_in_str_brackets[]
  = "E369: Invalid item in %s%%[]";
static const char e_missing_delimiter_after_search_pattern_str[]
  = "E654: Missing delimiter after search pattern: %s";
static const char e_missingbracket[] = "E769: Missing ] after %s[";
static const char e_reverse_range[] = "E944: Reverse range in character class";
static const char e_large_class[] = "E945: Range too large in character class";
static const char e_unmatchedpp[] = "E53: Unmatched %s%%(";
static const char e_unmatchedp[] = "E54: Unmatched %s(";
static const char e_unmatchedpar[] = "E55: Unmatched %s)";
static const char e_z_not_allowed[] = "E66: \\z( not allowed here";
static const char e_z1_not_allowed[] = "E67: \\z1 - \\z9 not allowed here";
static const char e_missing_sb[] = "E69: Missing ] after %s%%[";
static const char e_empty_sb[] = "E70: Empty %s%%[]";
static const char e_recursive[] = "E956: Cannot use pattern recursively";
static const char e_regexp_number_after_dot_pos_search_chr[]
  = "E1204: No Number allowed after .: '\\%%%c'";
static const char e_nfa_regexp_missing_value_in_chr[]
  = "E1273: (NFA regexp) missing value in '\\%%%c'";
static const char e_atom_engine_must_be_at_start_of_pattern[]
  = "E1281: Atom '\\%%#=%c' must be at the start of the pattern";
static const char e_substitute_nesting_too_deep[] = "E1290: substitute nesting too deep";
# 384 "/home/ubuntu/neovim/src/nvim/regexp.c"
static int re_multi_type(int c)
{
  if (c == ((int)('@') - 256) || c == ((int)('=') - 256) || c == ((int)('?') - 256)) {
    return 1;
  }
  if (c == ((int)('*') - 256) || c == ((int)('+') - 256) || c == ((int)('{') - 256)) {
    return 2;
  }
  return 0;
}

static char *reg_prev_sub = 
# 395 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                           ((void *)0)
# 395 "/home/ubuntu/neovim/src/nvim/regexp.c"
                               ;
static size_t reg_prev_sublen = 0;
# 412 "/home/ubuntu/neovim/src/nvim/regexp.c"
static char REGEXP_INRANGE[] = "]^-n\\";
static char REGEXP_ABBR[] = "nrtebdoxuU";


static int backslash_trans(int c)
{
  switch (c) {
  case 'r':
    return '\015';
  case 't':
    return '\011';
  case 'e':
    return '\033';
  case 'b':
    return '\010';
  }
  return c;
}

enum {
  CLASS_ALNUM = 0,
  CLASS_ALPHA,
  CLASS_BLANK,
  CLASS_CNTRL,
  CLASS_DIGIT,
  CLASS_GRAPH,
  CLASS_LOWER,
  CLASS_PRINT,
  CLASS_PUNCT,
  CLASS_SPACE,
  CLASS_UPPER,
  CLASS_XDIGIT,
  CLASS_TAB,
  CLASS_RETURN,
  CLASS_BACKSPACE,
  CLASS_ESCAPE,
  CLASS_IDENT,
  CLASS_KEYWORD,
  CLASS_FNAME,
  CLASS_NONE = 99,
};




static int get_char_class(char **pp)
{

  static keyvalue_T char_class_tab[] = {
    { (CLASS_ALNUM), ("alnum:]"), (sizeof("alnum:]") - 1) },
    { (CLASS_ALPHA), ("alpha:]"), (sizeof("alpha:]") - 1) },
    { (CLASS_BACKSPACE), ("backspace:]"), (sizeof("backspace:]") - 1) },
    { (CLASS_BLANK), ("blank:]"), (sizeof("blank:]") - 1) },
    { (CLASS_CNTRL), ("cntrl:]"), (sizeof("cntrl:]") - 1) },
    { (CLASS_DIGIT), ("digit:]"), (sizeof("digit:]") - 1) },
    { (CLASS_ESCAPE), ("escape:]"), (sizeof("escape:]") - 1) },
    { (CLASS_FNAME), ("fname:]"), (sizeof("fname:]") - 1) },
    { (CLASS_GRAPH), ("graph:]"), (sizeof("graph:]") - 1) },
    { (CLASS_IDENT), ("ident:]"), (sizeof("ident:]") - 1) },
    { (CLASS_KEYWORD), ("keyword:]"), (sizeof("keyword:]") - 1) },
    { (CLASS_LOWER), ("lower:]"), (sizeof("lower:]") - 1) },
    { (CLASS_PRINT), ("print:]"), (sizeof("print:]") - 1) },
    { (CLASS_PUNCT), ("punct:]"), (sizeof("punct:]") - 1) },
    { (CLASS_RETURN), ("return:]"), (sizeof("return:]") - 1) },
    { (CLASS_SPACE), ("space:]"), (sizeof("space:]") - 1) },
    { (CLASS_TAB), ("tab:]"), (sizeof("tab:]") - 1) },
    { (CLASS_UPPER), ("upper:]"), (sizeof("upper:]") - 1) },
    { (CLASS_XDIGIT), ("xdigit:]"), (sizeof("xdigit:]") - 1) }
  };


  if ((*pp)[1] == ':' && ((unsigned)((*pp)[2]) >= 'a' && (unsigned)((*pp)[2]) <= 'z')
      && ((unsigned)((*pp)[3]) >= 'a' && (unsigned)((*pp)[3]) <= 'z') && ((unsigned)((*pp)[4]) >= 'a' && (unsigned)((*pp)[4]) <= 'z')) {


    static keyvalue_T *last_entry = 
# 487 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                   ((void *)0)
# 487 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                       ;

    keyvalue_T target = {
      .key = 0,
      .value = *pp + 2,
      .length = 0,
    };

    keyvalue_T *entry;
    if (last_entry != 
# 496 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                     ((void *)0) 
# 496 "/home/ubuntu/neovim/src/nvim/regexp.c"
                          && cmp_keyvalue_value_n(&target, last_entry) == 0) {
      entry = last_entry;
    } else {
      entry = (keyvalue_T *)bsearch(&target, &char_class_tab,
                                    ((sizeof(char_class_tab)/sizeof((char_class_tab)[0])) / ((size_t)(!(sizeof(char_class_tab) % sizeof((char_class_tab)[0]))))),
                                    sizeof(char_class_tab[0]), cmp_keyvalue_value_n);
    }
    if (entry != 
# 503 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                ((void *)0)
# 503 "/home/ubuntu/neovim/src/nvim/regexp.c"
                    ) {
      last_entry = entry;
      *pp += entry->length + 2;
      return entry->key;
    }
  }
  return CLASS_NONE;
}



static int16_t class_tab[256];
# 526 "/home/ubuntu/neovim/src/nvim/regexp.c"
static void init_class_tab(void)
{
  int i;
  static int done = 
# 529 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                   0
# 529 "/home/ubuntu/neovim/src/nvim/regexp.c"
                        ;

  if (done) {
    return;
  }

  for (i = 0; i < 256; i++) {
    if (i >= '0' && i <= '7') {
      class_tab[i] = 0x01 + 0x02 + 0x04 + 0x08;
    } else if (i >= '8' && i <= '9') {
      class_tab[i] = 0x01 + 0x02 + 0x08;
    } else if (i >= 'a' && i <= 'f') {
      class_tab[i] = 0x02 + 0x08 + 0x10 + 0x20 + 0x40;
    } else if (i >= 'g' && i <= 'z') {
      class_tab[i] = 0x08 + 0x10 + 0x20 + 0x40;
    } else if (i >= 'A' && i <= 'F') {
      class_tab[i] = 0x02 + 0x08 + 0x10 + 0x20 + 0x80;
    } else if (i >= 'G' && i <= 'Z') {
      class_tab[i] = 0x08 + 0x10 + 0x20 + 0x80;
    } else if (i == '_') {
      class_tab[i] = 0x08 + 0x10;
    } else {
      class_tab[i] = 0;
    }
  }
  class_tab[' '] |= 0x100;
  class_tab['\t'] |= 0x100;
  done = 
# 556 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
        1
# 556 "/home/ubuntu/neovim/src/nvim/regexp.c"
            ;
}
# 578 "/home/ubuntu/neovim/src/nvim/regexp.c"
static char *regparse;
static int regnpar;
static 
# 580 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
      _Bool 
# 580 "/home/ubuntu/neovim/src/nvim/regexp.c"
           wants_nfa;
static int regnzpar;
static int re_has_z;
static unsigned regflags;
static int had_eol;

static magic_T reg_magic;

static int reg_string;

static int reg_strict;






static uint8_t META_flags[] = {
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,

    0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0,

    0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1,

    1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1,

    1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1,

    0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1,

    1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1
};



static int curchr;



static int prevchr;
static int prevprevchr;
static int nextchr;







typedef struct {
  char *regparse;
  int prevchr_len;
  int curchr;
  int prevchr;
  int prevprevchr;
  int nextchr;
  int at_start;
  int prev_at_start;
  int regnpar;
} parse_state_T;

static regengine_T bt_regengine;
static regengine_T nfa_regengine;






int re_multiline(const regprog_T *prog)
  FUNC_ATTR_NONNULL_ALL
{
  return prog->regflags & 4;
}




static int get_equi_class(char **pp)
{
  int c;
  int l = 1;
  char *p = *pp;

  if (p[1] == '=' && p[2] != '\000') {
    l = utfc_ptr2len(p + 2);
    if (p[l + 2] == '=' && p[l + 3] == ']') {
      c = utf_ptr2char(p + 2);
      *pp += l + 4;
      return c;
    }
  }
  return 0;
}





static int get_coll_element(char **pp)
{
  int c;
  int l = 1;
  char *p = *pp;

  if (p[0] != '\000' && p[1] == '.' && p[2] != '\000') {
    l = utfc_ptr2len(p + 2);
    if (p[l + 2] == '.' && p[l + 3] == ']') {
      c = utf_ptr2char(p + 2);
      *pp += l + 4;
      return c;
    }
  }
  return 0;
}

static int reg_cpo_lit;

static void get_cpo_flags(void)
{
  reg_cpo_lit = vim_strchr(p_cpo, 'l') != 
# 701 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                                 ((void *)0)
# 701 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                                     ;
}




static char *skip_anyof(char *p)
{
  int l;

  if (*p == '^') {
    p++;
  }
  if (*p == ']' || *p == '-') {
    p++;
  }
  while (*p != '\000' && *p != ']') {
    if ((l = utfc_ptr2len(p)) > 1) {
      p += l;
    } else if (*p == '-') {
      p++;
      if (*p != ']' && *p != '\000') {
        (p += utfc_ptr2len((char *)p));
      }
    } else if (*p == '\\'
               && (vim_strchr(REGEXP_INRANGE, (uint8_t)p[1]) != 
# 726 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                                               ((void *)0)
                   
# 727 "/home/ubuntu/neovim/src/nvim/regexp.c"
                  || (!reg_cpo_lit
                       && vim_strchr(REGEXP_ABBR, (uint8_t)p[1]) != 
# 728 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                                                   ((void *)0)
# 728 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                                                       ))) {
      p += 2;
    } else if (*p == '[') {
      if (get_char_class(&p) == CLASS_NONE
          && get_equi_class(&p) == 0
          && get_coll_element(&p) == 0
          && *p != '\000') {
        p++;
      }
    } else {
      p++;
    }
  }

  return p;
}





char *skip_regexp(char *startp, int delim, int magic)
{
  return skip_regexp_ex(startp, delim, magic, 
# 751 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                             ((void *)0)
# 751 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                                 , 
# 751 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                                   ((void *)0)
# 751 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                                       , 
# 751 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                                         ((void *)0)
# 751 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                                             );
}



char *skip_regexp_err(char *startp, int delim, int magic)
{
  char *p = skip_regexp(startp, delim, magic);

  if (*p != delim) {
    semsg(gettext(e_missing_delimiter_after_search_pattern_str), startp);
    return 
# 762 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
          ((void *)0)
# 762 "/home/ubuntu/neovim/src/nvim/regexp.c"
              ;
  }
  return p;
}







char *skip_regexp_ex(char *startp, int dirc, int magic, char **newp, int *dropped,
                     magic_T *magic_val)
{
  magic_T mymagic;
  char *p = startp;
  size_t startplen = 0;

  if (magic) {
    mymagic = MAGIC_ON;
  } else {
    mymagic = MAGIC_OFF;
  }
  get_cpo_flags();

  for (; p[0] != '\000'; (p += utfc_ptr2len((char *)p))) {
    if (p[0] == dirc) {
      break;
    }
    if ((p[0] == '[' && mymagic >= MAGIC_ON)
        || (p[0] == '\\' && p[1] == '[' && mymagic <= MAGIC_OFF)) {
      p = skip_anyof(p + 1);
      if (p[0] == '\000') {
        break;
      }
    } else if (p[0] == '\\' && p[1] != '\000') {
      if (dirc == '?' && newp != 
# 798 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                ((void *)0) 
# 798 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                     && p[1] == '?') {

        if (startplen == 0) {
          startplen = strlen(startp);
        }
        if (*newp == 
# 803 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                    ((void *)0)
# 803 "/home/ubuntu/neovim/src/nvim/regexp.c"
                        ) {
          *newp = xstrnsave(startp, startplen);
          p = *newp + (p - startp);
          startp = *newp;
        }
        if (dropped != 
# 808 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                      ((void *)0)
# 808 "/home/ubuntu/neovim/src/nvim/regexp.c"
                          ) {
          (*dropped)++;
        }
        memmove(p, p + 1, startplen - (size_t)((p + 1) - startp) + 1);
      } else {
        p++;
      }
      if (*p == 'v') {
        mymagic = MAGIC_ALL;
      } else if (*p == 'V') {
        mymagic = MAGIC_NONE;
      }
    }
  }
  if (magic_val != 
# 822 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                  ((void *)0)
# 822 "/home/ubuntu/neovim/src/nvim/regexp.c"
                      ) {
    *magic_val = mymagic;
  }
  return p;
}


static int prevchr_len;
static int at_start;
static int prev_at_start;


static void initchr(char *str)
{
  regparse = str;
  prevchr_len = 0;
  curchr = prevprevchr = prevchr = nextchr = -1;
  at_start = 
# 839 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
            1
# 839 "/home/ubuntu/neovim/src/nvim/regexp.c"
                ;
  prev_at_start = 
# 840 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                 0
# 840 "/home/ubuntu/neovim/src/nvim/regexp.c"
                      ;
}



static void save_parse_state(parse_state_T *ps)
{
  ps->regparse = regparse;
  ps->prevchr_len = prevchr_len;
  ps->curchr = curchr;
  ps->prevchr = prevchr;
  ps->prevprevchr = prevprevchr;
  ps->nextchr = nextchr;
  ps->at_start = at_start;
  ps->prev_at_start = prev_at_start;
  ps->regnpar = regnpar;
}


static void restore_parse_state(parse_state_T *ps)
{
  regparse = ps->regparse;
  prevchr_len = ps->prevchr_len;
  curchr = ps->curchr;
  prevchr = ps->prevchr;
  prevprevchr = ps->prevprevchr;
  nextchr = ps->nextchr;
  at_start = ps->at_start;
  prev_at_start = ps->prev_at_start;
  regnpar = ps->regnpar;
}


static int peekchr(void)
{
  static int after_slash = 
# 875 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                          0
# 875 "/home/ubuntu/neovim/src/nvim/regexp.c"
                               ;

  if (curchr != -1) {
    return curchr;
  }

  switch (curchr = (uint8_t)regparse[0]) {
  case '.':
  case '[':
  case '~':

    if (reg_magic >= MAGIC_ON) {
      curchr = ((int)(curchr) - 256);
    }
    break;
  case '(':
  case ')':
  case '{':
  case '%':
  case '+':
  case '=':
  case '?':
  case '@':
  case '!':
  case '&':
  case '|':
  case '<':
  case '>':
  case '#':
  case '"':
  case '\'':
  case ',':
  case '-':
  case ':':
  case ';':
  case '`':
  case '/':

    if (reg_magic == MAGIC_ALL) {
      curchr = ((int)(curchr) - 256);
    }
    break;
  case '*':



    if (reg_magic >= MAGIC_ON
        && !at_start
        && !(prev_at_start && prevchr == ((int)('^') - 256))
        && (after_slash
            || (prevchr != ((int)('(') - 256)
                && prevchr != ((int)('&') - 256)
                && prevchr != ((int)('|') - 256)))) {
      curchr = ((int)('*') - 256);
    }
    break;
  case '^':


    if (reg_magic >= MAGIC_OFF
        && (at_start
            || reg_magic == MAGIC_ALL
            || prevchr == ((int)('(') - 256)
            || prevchr == ((int)('|') - 256)
            || prevchr == ((int)('&') - 256)
            || prevchr == ((int)('n') - 256)
            || (no_Magic(prevchr) == '('
                && prevprevchr == ((int)('%') - 256)))) {
      curchr = ((int)('^') - 256);
      at_start = 
# 944 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                1
# 944 "/home/ubuntu/neovim/src/nvim/regexp.c"
                    ;
      prev_at_start = 
# 945 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                     0
# 945 "/home/ubuntu/neovim/src/nvim/regexp.c"
                          ;
    }
    break;
  case '$':


    if (reg_magic >= MAGIC_OFF) {
      uint8_t *p = (uint8_t *)regparse + 1;
      
# 953 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
     _Bool 
# 953 "/home/ubuntu/neovim/src/nvim/regexp.c"
          is_magic_all = (reg_magic == MAGIC_ALL);


      while (p[0] == '\\' && (p[1] == 'c' || p[1] == 'C'
                              || p[1] == 'm' || p[1] == 'M'
                              || p[1] == 'v' || p[1] == 'V'
                              || p[1] == 'Z')) {
        if (p[1] == 'v') {
          is_magic_all = 
# 961 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                        1
# 961 "/home/ubuntu/neovim/src/nvim/regexp.c"
                            ;
        } else if (p[1] == 'm' || p[1] == 'M' || p[1] == 'V') {
          is_magic_all = 
# 963 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                        0
# 963 "/home/ubuntu/neovim/src/nvim/regexp.c"
                             ;
        }
        p += 2;
      }
      if (p[0] == '\000'
          || (p[0] == '\\'
              && (p[1] == '|' || p[1] == '&' || p[1] == ')'
                  || p[1] == 'n'))
          || (is_magic_all
              && (p[0] == '|' || p[0] == '&' || p[0] == ')'))
          || reg_magic == MAGIC_ALL) {
        curchr = ((int)('$') - 256);
      }
    }
    break;
  case '\\': {
    int c = (uint8_t)regparse[1];

    if (c == '\000') {
      curchr = '\\';
    } else if (c <= '~' && META_flags[c]) {





      curchr = -1;
      prev_at_start = at_start;
      at_start = 
# 991 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                0
# 991 "/home/ubuntu/neovim/src/nvim/regexp.c"
                     ;
      regparse++;
      after_slash++;
      (void)peekchr();
      regparse--;
      after_slash--;
      curchr = toggle_Magic(curchr);
    } else if (vim_strchr(REGEXP_ABBR, c)) {

      curchr = backslash_trans(c);
    } else if (reg_magic == MAGIC_NONE && (c == '$' || c == '^')) {
      curchr = toggle_Magic(c);
    } else {


      curchr = utf_ptr2char(regparse + 1);
    }
    break;
  }

  default:
    curchr = utf_ptr2char(regparse);
  }

  return curchr;
}


static void skipchr(void)
{

  if (*regparse == '\\') {
    prevchr_len = 1;
  } else {
    prevchr_len = 0;
  }
  if (regparse[prevchr_len] != '\000') {

    prevchr_len += utf_ptr2len(regparse + prevchr_len);
  }
  regparse += prevchr_len;
  prev_at_start = at_start;
  at_start = 
# 1033 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
            0
# 1033 "/home/ubuntu/neovim/src/nvim/regexp.c"
                 ;
  prevprevchr = prevchr;
  prevchr = curchr;
  curchr = nextchr;
  nextchr = -1;
}



static void skipchr_keepstart(void)
{
  int as = prev_at_start;
  int pr = prevchr;
  int prpr = prevprevchr;

  skipchr();
  at_start = as;
  prevchr = pr;
  prevprevchr = prpr;
}



static int getchr(void)
{
  int chr = peekchr();

  skipchr();
  return chr;
}


static void ungetchr(void)
{
  nextchr = curchr;
  curchr = prevchr;
  prevchr = prevprevchr;
  at_start = prev_at_start;
  prev_at_start = 
# 1071 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                 0
# 1071 "/home/ubuntu/neovim/src/nvim/regexp.c"
                      ;



  regparse -= prevchr_len;
}
# 1085 "/home/ubuntu/neovim/src/nvim/regexp.c"
static int64_t gethexchrs(int maxinputlen)
{
  int64_t nr = 0;
  int c;
  int i;

  for (i = 0; i < maxinputlen; i++) {
    c = (uint8_t)regparse[0];
    if (!ascii_isxdigit(c)) {
      break;
    }
    nr <<= 4;
    nr |= hex2nr(c);
    regparse++;
  }

  if (i == 0) {
    return -1;
  }
  return nr;
}



static int64_t getdecchrs(void)
{
  int64_t nr = 0;
  int c;
  int i;

  for (i = 0;; i++) {
    c = (uint8_t)regparse[0];
    if (c < '0' || c > '9') {
      break;
    }
    nr *= 10;
    nr += c - '0';
    regparse++;
    curchr = -1;
  }

  if (i == 0) {
    return -1;
  }
  return nr;
}







static int64_t getoctchrs(void)
{
  int64_t nr = 0;
  int c;
  int i;

  for (i = 0; i < 3 && nr < 040; i++) {
    c = (uint8_t)regparse[0];
    if (c < '0' || c > '7') {
      break;
    }
    nr <<= 3;
    nr |= hex2nr(c);
    regparse++;
  }

  if (i == 0) {
    return -1;
  }
  return nr;
}





static int read_limits(int *minval, int *maxval)
{
  int reverse = 
# 1166 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
               0
# 1166 "/home/ubuntu/neovim/src/nvim/regexp.c"
                    ;
  char *first_char;
  int tmp;

  if (*regparse == '-') {

    regparse++;
    reverse = 
# 1173 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
             1
# 1173 "/home/ubuntu/neovim/src/nvim/regexp.c"
                 ;
  }
  first_char = regparse;
  *minval = getdigits_int(&regparse, 
# 1176 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                    0
# 1176 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                         , 0);
  if (*regparse == ',') {
    if (ascii_isdigit(*++regparse)) {
      *maxval = getdigits_int(&regparse, 
# 1179 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                        0
# 1179 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                             , (32767 << 16));
    } else {
      *maxval = (32767 << 16);
    }
  } else if (ascii_isdigit(*first_char)) {
    *maxval = *minval;
  } else {
    *maxval = (32767 << 16);
  }
  if (*regparse == '\\') {
    regparse++;
  }
  if (*regparse != '}') {
    return (semsg((gettext("E554: Syntax error in %s{...}")), (reg_magic == MAGIC_ALL) ? "" : "\\"), rc_did_emsg = 
# 1192 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
   1
# 1192 "/home/ubuntu/neovim/src/nvim/regexp.c"
   , 0);
  }



  if ((!reverse && *minval > *maxval) || (reverse && *minval < *maxval)) {
    tmp = *minval;
    *minval = *maxval;
    *maxval = tmp;
  }
  skipchr();
  return 1;
}
# 1213 "/home/ubuntu/neovim/src/nvim/regexp.c"
static uint8_t *reg_tofree = 
# 1213 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                            ((void *)0)
# 1213 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                ;
static unsigned reg_tofreelen;
# 1231 "/home/ubuntu/neovim/src/nvim/regexp.c"
typedef struct {
  regmatch_T *reg_match;
  regmmatch_T *reg_mmatch;

  uint8_t **reg_startp;
  uint8_t **reg_endp;
  lpos_T *reg_startpos;
  lpos_T *reg_endpos;

  win_T *reg_win;
  buf_T *reg_buf;
  linenr_T reg_firstlnum;
  linenr_T reg_maxline;
  
# 1244 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
 _Bool 
# 1244 "/home/ubuntu/neovim/src/nvim/regexp.c"
      reg_line_lbr;


  linenr_T lnum;
  uint8_t *line;
  uint8_t *input;

  int need_clear_subexpr;
  int need_clear_zsubexpr;





  
# 1258 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
 _Bool 
# 1258 "/home/ubuntu/neovim/src/nvim/regexp.c"
      reg_ic;



  
# 1262 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
 _Bool 
# 1262 "/home/ubuntu/neovim/src/nvim/regexp.c"
      reg_icombine;

  
# 1264 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
 _Bool 
# 1264 "/home/ubuntu/neovim/src/nvim/regexp.c"
      reg_nobreak;



  colnr_T reg_maxcol;


  int nfa_has_zend;
  int nfa_has_backref;
  int nfa_nsubexpr;





  int nfa_listid;
  int nfa_alt_listid;

  int nfa_has_zsubexpr;
} regexec_T;

static regexec_T rex;
static 
# 1286 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
      _Bool 
# 1286 "/home/ubuntu/neovim/src/nvim/regexp.c"
           rex_in_use = 
# 1286 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                        0
# 1286 "/home/ubuntu/neovim/src/nvim/regexp.c"
                             ;

static void reg_breakcheck(void)
{
  if (!rex.reg_nobreak) {
    fast_breakcheck();
  }
}



static 
# 1297 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
      _Bool 
# 1297 "/home/ubuntu/neovim/src/nvim/regexp.c"
           reg_iswordc(int c)
{
  return vim_iswordc_buf(c, rex.reg_buf);
}

static 
# 1302 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
      _Bool 
# 1302 "/home/ubuntu/neovim/src/nvim/regexp.c"
           can_f_submatch = 
# 1302 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                            0
# 1302 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                 ;




typedef struct {
  regmatch_T *sm_match;
  regmmatch_T *sm_mmatch;
  linenr_T sm_firstlnum;
  linenr_T sm_maxline;
  int sm_line_lbr;
} regsubmatch_T;

static regsubmatch_T rsm;






static void reg_getline_common(linenr_T lnum, reg_getline_flags_T flags, char **line,
                               colnr_T *length)
{
  
# 1325 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
 _Bool 
# 1325 "/home/ubuntu/neovim/src/nvim/regexp.c"
      get_line = flags & RGLF_LINE;
  
# 1326 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
 _Bool 
# 1326 "/home/ubuntu/neovim/src/nvim/regexp.c"
      get_length = flags & RGLF_LENGTH;
  linenr_T firstlnum;
  linenr_T maxline;

  if (flags & RGLF_SUBMATCH) {
    firstlnum = rsm.sm_firstlnum + lnum;
    maxline = rsm.sm_maxline;
  } else {
    firstlnum = rex.reg_firstlnum + lnum;
    maxline = rex.reg_maxline;
  }



  if (firstlnum < 1) {
    if (get_line) {
      *line = 
# 1342 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
             ((void *)0)
# 1342 "/home/ubuntu/neovim/src/nvim/regexp.c"
                 ;
    }
    if (get_length) {
      *length = 0;
    }

    return;
  }

  if (lnum > maxline) {

    if (get_line) {
      *line = "";
    }
    if (get_length) {
      *length = 0;
    }

    return;
  }

  if (get_line) {
    *line = ml_get_buf(rex.reg_buf, firstlnum);
  }
  if (get_length) {
    *length = ml_get_buf_len(rex.reg_buf, firstlnum);
  }
}


static char *reg_getline(linenr_T lnum)
{
  char *line;
  reg_getline_common(lnum, RGLF_LINE, &line, 
# 1375 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                            ((void *)0)
# 1375 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                                );
  return line;
}


static colnr_T reg_getline_len(linenr_T lnum)
{
  colnr_T length;
  reg_getline_common(lnum, RGLF_LENGTH, 
# 1383 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                       ((void *)0)
# 1383 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                           , &length);
  return length;
}

static uint8_t *reg_startzp[NSUBEXP];
static uint8_t *reg_endzp[NSUBEXP];
static lpos_T reg_startzpos[NSUBEXP];
static lpos_T reg_endzpos[NSUBEXP];





static reg_extmatch_T *make_extmatch(void)
  FUNC_ATTR_NONNULL_RET
{
  reg_extmatch_T *em = xcalloc(1, sizeof(reg_extmatch_T));
  em->refcnt = 1;
  return em;
}


reg_extmatch_T *ref_extmatch(reg_extmatch_T *em)
{
  if (em != 
# 1407 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
           ((void *)0)
# 1407 "/home/ubuntu/neovim/src/nvim/regexp.c"
               ) {
    em->refcnt++;
  }
  return em;
}



void unref_extmatch(reg_extmatch_T *em)
{
  int i;

  if (em != 
# 1419 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
           ((void *)0) 
# 1419 "/home/ubuntu/neovim/src/nvim/regexp.c"
                && --em->refcnt <= 0) {
    for (i = 0; i < NSUBEXP; i++) {
      xfree(em->matches[i]);
    }
    xfree(em);
  }
}


static int reg_prev_class(void)
{
  if (rex.input > rex.line) {
    return mb_get_class_tab((char *)rex.input - 1 -
                            utf_head_off((char *)rex.line, (char *)rex.input - 1),
                            rex.reg_buf->b_chartab);
  }
  return -1;
}


static 
# 1439 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
      _Bool 
# 1439 "/home/ubuntu/neovim/src/nvim/regexp.c"
           reg_match_visual(void)
{
  pos_T top, bot;
  linenr_T lnum;
  colnr_T col;
  win_T *wp = rex.reg_win == 
# 1444 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                            ((void *)0) 
# 1444 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                 ? curwin : rex.reg_win;
  int mode;
  colnr_T start, end;
  colnr_T start2, end2;
  colnr_T curswant;


  if (rex.reg_buf != curbuf || VIsual.lnum == 0 || !(rex.reg_match == 
# 1451 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                                   ((void *)0)
# 1451 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                                   )) {
    return 
# 1452 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
          0
# 1452 "/home/ubuntu/neovim/src/nvim/regexp.c"
               ;
  }

  if (VIsual_active) {
    if (lt(VIsual, wp->w_cursor)) {
      top = VIsual;
      bot = wp->w_cursor;
    } else {
      top = wp->w_cursor;
      bot = VIsual;
    }
    mode = VIsual_mode;
    curswant = wp->w_curswant;
  } else {
    if (lt(curbuf->b_visual.vi_start, curbuf->b_visual.vi_end)) {
      top = curbuf->b_visual.vi_start;
      bot = curbuf->b_visual.vi_end;
    } else {
      top = curbuf->b_visual.vi_end;
      bot = curbuf->b_visual.vi_start;
    }

    if (bot.lnum > curbuf->b_ml.ml_line_count) {
      bot.lnum = curbuf->b_ml.ml_line_count;
    }
    mode = curbuf->b_visual.vi_mode;
    curswant = curbuf->b_visual.vi_curswant;
  }
  lnum = rex.lnum + rex.reg_firstlnum;
  if (lnum < top.lnum || lnum > bot.lnum) {
    return 
# 1482 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
          0
# 1482 "/home/ubuntu/neovim/src/nvim/regexp.c"
               ;
  }

  col = (colnr_T)(rex.input - rex.line);
  if (mode == 'v') {
    if ((lnum == top.lnum && col < top.col)
        || (lnum == bot.lnum && col >= bot.col + (*p_sel != 'e'))) {
      return 
# 1489 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
            0
# 1489 "/home/ubuntu/neovim/src/nvim/regexp.c"
                 ;
    }
  } else if (mode == 22) {
    getvvcol(wp, &top, &start, 
# 1492 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                              ((void *)0)
# 1492 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                  , &end);
    getvvcol(wp, &bot, &start2, 
# 1493 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                               ((void *)0)
# 1493 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                   , &end2);
    if (start2 < start) {
      start = start2;
    }
    if (end2 > end) {
      end = end2;
    }
    if (top.col == MAXCOL || bot.col == MAXCOL || curswant == MAXCOL) {
      end = MAXCOL;
    }


    rex.line = (uint8_t *)reg_getline(rex.lnum);
    rex.input = rex.line + col;

    colnr_T cols = win_linetabsize(wp, rex.reg_firstlnum + rex.lnum, (char *)rex.line, col);
    if (cols < start || cols > end - (*p_sel == 'e')) {
      return 
# 1510 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
            0
# 1510 "/home/ubuntu/neovim/src/nvim/regexp.c"
                 ;
    }
  }
  return 
# 1513 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
        1
# 1513 "/home/ubuntu/neovim/src/nvim/regexp.c"
            ;
}



static int prog_magic_wrong(void)
{
  regprog_T *prog;

  prog = (rex.reg_match == 
# 1522 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
        ((void *)0)
# 1522 "/home/ubuntu/neovim/src/nvim/regexp.c"
        ) ? rex.reg_mmatch->regprog : rex.reg_match->regprog;
  if (prog->engine == &nfa_regengine) {

    return 
# 1525 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
          0
# 1525 "/home/ubuntu/neovim/src/nvim/regexp.c"
               ;
  }

  if (((int)(*(uint8_t *)(((bt_regprog_T *)prog)->program))) != 0234) {
    emsg(gettext(e_re_corr));
    return 
# 1530 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
          1
# 1530 "/home/ubuntu/neovim/src/nvim/regexp.c"
              ;
  }
  return 
# 1532 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
        0
# 1532 "/home/ubuntu/neovim/src/nvim/regexp.c"
             ;
}




static void cleanup_subexpr(void)
{
  if (!rex.need_clear_subexpr) {
    return;
  }

  if ((rex.reg_match == 
# 1544 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
     ((void *)0)
# 1544 "/home/ubuntu/neovim/src/nvim/regexp.c"
     )) {

    memset(rex.reg_startpos, 0xff, sizeof(lpos_T) * NSUBEXP);
    memset(rex.reg_endpos, 0xff, sizeof(lpos_T) * NSUBEXP);
  } else {
    memset(rex.reg_startp, 0, sizeof(char *) * NSUBEXP);
    memset(rex.reg_endp, 0, sizeof(char *) * NSUBEXP);
  }
  rex.need_clear_subexpr = 
# 1552 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                          0
# 1552 "/home/ubuntu/neovim/src/nvim/regexp.c"
                               ;
}

static void cleanup_zsubexpr(void)
{
  if (!rex.need_clear_zsubexpr) {
    return;
  }

  if ((rex.reg_match == 
# 1561 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
     ((void *)0)
# 1561 "/home/ubuntu/neovim/src/nvim/regexp.c"
     )) {

    memset(reg_startzpos, 0xff, sizeof(lpos_T) * NSUBEXP);
    memset(reg_endzpos, 0xff, sizeof(lpos_T) * NSUBEXP);
  } else {
    memset(reg_startzp, 0, sizeof(char *) * NSUBEXP);
    memset(reg_endzp, 0, sizeof(char *) * NSUBEXP);
  }
  rex.need_clear_zsubexpr = 
# 1569 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                           0
# 1569 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                ;
}


static void reg_nextline(void)
{
  rex.line = (uint8_t *)reg_getline(++rex.lnum);
  rex.input = rex.line;
  reg_breakcheck();
}





static int match_with_backref(linenr_T start_lnum, colnr_T start_col, linenr_T end_lnum,
                              colnr_T end_col, int *bytelen)
{
  linenr_T clnum = start_lnum;
  colnr_T ccol = start_col;
  int len;
  char *p;

  if (bytelen != 
# 1592 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                ((void *)0)
# 1592 "/home/ubuntu/neovim/src/nvim/regexp.c"
                    ) {
    *bytelen = 0;
  }
  while (
# 1595 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
        1
# 1595 "/home/ubuntu/neovim/src/nvim/regexp.c"
            ) {


    if (rex.line != reg_tofree) {
      len = (int)strlen((char *)rex.line);
      if (reg_tofree == 
# 1600 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                       ((void *)0) 
# 1600 "/home/ubuntu/neovim/src/nvim/regexp.c"
                            || len >= (int)reg_tofreelen) {
        len += 50;
        xfree(reg_tofree);
        reg_tofree = xmalloc((size_t)len);
        reg_tofreelen = (unsigned)len;
      }
      strcpy((char *)(reg_tofree), (char *)(rex.line));
      rex.input = reg_tofree + (rex.input - rex.line);
      rex.line = reg_tofree;
    }


    p = reg_getline(clnum);
    
# 1613 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
   ((void) sizeof ((
# 1613 "/home/ubuntu/neovim/src/nvim/regexp.c"
   p
# 1613 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
   ) ? 1 : 0), __extension__ ({ if (
# 1613 "/home/ubuntu/neovim/src/nvim/regexp.c"
   p
# 1613 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
   ) ; else __assert_fail (
# 1613 "/home/ubuntu/neovim/src/nvim/regexp.c"
   "p"
# 1613 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
   , "/home/ubuntu/neovim/src/nvim/regexp.c", 1613, __extension__ __PRETTY_FUNCTION__); }))
# 1613 "/home/ubuntu/neovim/src/nvim/regexp.c"
            ;

    if (clnum == end_lnum) {
      len = end_col - ccol;
    } else {
      len = reg_getline_len(clnum) - ccol;
    }

    if (cstrncmp(p + ccol, (char *)rex.input, &len) != 0) {
      return 5;
    }
    if (bytelen != 
# 1624 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                  ((void *)0)
# 1624 "/home/ubuntu/neovim/src/nvim/regexp.c"
                      ) {
      *bytelen += len;
    }
    if (clnum == end_lnum) {
      break;
    }
    if (rex.lnum >= rex.reg_maxline) {
      return 5;
    }


    reg_nextline();
    if (bytelen != 
# 1636 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                  ((void *)0)
# 1636 "/home/ubuntu/neovim/src/nvim/regexp.c"
                      ) {
      *bytelen = 0;
    }
    clnum++;
    ccol = 0;
    if (got_int) {
      return 1;
    }
  }



  return 4;
}


static 
# 1652 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
      _Bool 
# 1652 "/home/ubuntu/neovim/src/nvim/regexp.c"
           re_mult_next(char *what)
{
  if (re_multi_type(peekchr()) == 2) {
    semsg(gettext("E888: (NFA regexp) cannot repeat %s"), what);
    rc_did_emsg = 
# 1656 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                 1
# 1656 "/home/ubuntu/neovim/src/nvim/regexp.c"
                     ;
    return 
# 1657 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
          0
# 1657 "/home/ubuntu/neovim/src/nvim/regexp.c"
               ;
  }
  return 
# 1659 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
        1
# 1659 "/home/ubuntu/neovim/src/nvim/regexp.c"
            ;
}

typedef struct {
  int a, b, c;
} decomp_T;


static decomp_T decomp_table[0xfb4f - 0xfb20 + 1] = {
  { 0x5e2, 0, 0 },
  { 0x5d0, 0, 0 },
  { 0x5d3, 0, 0 },
  { 0x5d4, 0, 0 },
  { 0x5db, 0, 0 },
  { 0x5dc, 0, 0 },
  { 0x5dd, 0, 0 },
  { 0x5e8, 0, 0 },
  { 0x5ea, 0, 0 },
  { '+', 0, 0 },
  { 0x5e9, 0x5c1, 0 },
  { 0x5e9, 0x5c2, 0 },
  { 0x5e9, 0x5c1, 0x5bc },
  { 0x5e9, 0x5c2, 0x5bc },
  { 0x5d0, 0x5b7, 0 },
  { 0x5d0, 0x5b8, 0 },
  { 0x5d0, 0x5b4, 0 },
  { 0x5d1, 0x5bc, 0 },
  { 0x5d2, 0x5bc, 0 },
  { 0x5d3, 0x5bc, 0 },
  { 0x5d4, 0x5bc, 0 },
  { 0x5d5, 0x5bc, 0 },
  { 0x5d6, 0x5bc, 0 },
  { 0xfb37, 0, 0 },
  { 0x5d8, 0x5bc, 0 },
  { 0x5d9, 0x5bc, 0 },
  { 0x5da, 0x5bc, 0 },
  { 0x5db, 0x5bc, 0 },
  { 0x5dc, 0x5bc, 0 },
  { 0xfb3d, 0, 0 },
  { 0x5de, 0x5bc, 0 },
  { 0xfb3f, 0, 0 },
  { 0x5e0, 0x5bc, 0 },
  { 0x5e1, 0x5bc, 0 },
  { 0xfb42, 0, 0 },
  { 0x5e3, 0x5bc, 0 },
  { 0x5e4, 0x5bc, 0 },
  { 0xfb45, 0, 0 },
  { 0x5e6, 0x5bc, 0 },
  { 0x5e7, 0x5bc, 0 },
  { 0x5e8, 0x5bc, 0 },
  { 0x5e9, 0x5bc, 0 },
  { 0x5ea, 0x5bc, 0 },
  { 0x5d5, 0x5b9, 0 },
  { 0x5d1, 0x5bf, 0 },
  { 0x5db, 0x5bf, 0 },
  { 0x5e4, 0x5bf, 0 },
  { 0x5d0, 0x5dc, 0 }
};

static void mb_decompose(int c, int *c1, int *c2, int *c3)
{
  decomp_T d;

  if (c >= 0xfb20 && c <= 0xfb4f) {
    d = decomp_table[c - 0xfb20];
    *c1 = d.a;
    *c2 = d.b;
    *c3 = d.c;
  } else {
    *c1 = c;
    *c2 = *c3 = 0;
  }
}






static int cstrncmp(char *s1, char *s2, int *n)
{
  int result;

  if (!rex.reg_ic) {
    result = strncmp(s1, s2, (size_t)(*n));
  } else {
    char *p = s1;
    int n2 = 0;
    int n1 = *n;

    while (n1 > 0 && *p != '\000') {
      n1 -= utfc_ptr2len(s1);
      (p += utfc_ptr2len((char *)p));
      n2++;
    }

    p = s2;
    while (n2-- > 0 && *p != '\000') {
      (p += utfc_ptr2len((char *)p));
    }

    n2 = (int)(p - s2);

    result = utf_strnicmp(s1, s2, (size_t)(*n), (size_t)n2);
    if (result == 0 && n2 < *n) {
      *n = n2;
    }
  }


  if (result != 0 && rex.reg_icombine) {
    const char *str1, *str2;
    int c1, c2, c11, c12;
    int junk;



    str1 = s1;
    str2 = s2;
    c1 = c2 = 0;
    while ((int)(str1 - s1) < *n) {
      c1 = mb_ptr2char_adv(&str1);
      c2 = mb_ptr2char_adv(&str2);




      if (c1 != c2 && (!rex.reg_ic || utf_fold(c1) != utf_fold(c2))) {

        mb_decompose(c1, &c11, &junk, &junk);
        mb_decompose(c2, &c12, &junk, &junk);
        c1 = c11;
        c2 = c12;
        if (c11 != c12 && (!rex.reg_ic || utf_fold(c11) != utf_fold(c12))) {
          break;
        }
      }
    }
    result = c2 - c1;
    if (result == 0) {
      *n = (int)(str2 - s2);
    }
  }

  return result;
}
# 1815 "/home/ubuntu/neovim/src/nvim/regexp.c"
static inline char *cstrchr(const char *const s, const int c)
  FUNC_ATTR_PURE FUNC_ATTR_WARN_UNUSED_RESULT FUNC_ATTR_NONNULL_ALL
  FUNC_ATTR_ALWAYS_INLINE
{
  if (!rex.reg_ic) {
    return vim_strchr(s, c);
  }

  int cc, lc;
  if (c > 0x80) {
    cc = utf_fold(c);
    lc = cc;
  } else if (((unsigned)(c) >= 'A' && (unsigned)(c) <= 'Z')) {
    cc = (((c) < 'A' || (c) > 'Z') ? (c) : (c) + ('a' - 'A'));
    lc = cc;
  } else if (((unsigned)(c) >= 'a' && (unsigned)(c) <= 'z')) {
    cc = (((c) < 'a' || (c) > 'z') ? (c) : (c) - ('a' - 'A'));
    lc = c;
  } else {
    return vim_strchr(s, c);
  }

  for (const char *p = s; *p != '\000'; p += utfc_ptr2len(p)) {
    const int uc = utf_ptr2char(p);
    if (c > 0x80 || uc > 0x80) {


      if ((uc < 0x80 || uc != (uint8_t)(*p)) && utf_fold(uc) == lc) {
        return (char *)p;
      }
    } else if ((uint8_t)(*p) == c || (uint8_t)(*p) == cc) {
      return (char *)p;
    }
  }

  return 
# 1850 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
        ((void *)0)
# 1850 "/home/ubuntu/neovim/src/nvim/regexp.c"
            ;
}





static void do_upper(int *d, int c)
{
  *d = mb_toupper(c);
}

static void do_lower(int *d, int c)
{
  *d = mb_tolower(c);
}
# 1877 "/home/ubuntu/neovim/src/nvim/regexp.c"
char *regtilde(char *source, int magic, 
# 1877 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                       _Bool 
# 1877 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                            preview)
{
  char *newsub = source;
  size_t newsublen = 0;
  char tilde[3] = { '~', '\000', '\000' };
  size_t tildelen = 1;
  
# 1883 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
 _Bool 
# 1883 "/home/ubuntu/neovim/src/nvim/regexp.c"
      error = 
# 1883 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
              0
# 1883 "/home/ubuntu/neovim/src/nvim/regexp.c"
                   ;

  if (!magic) {
    tilde[0] = '\\';
    tilde[1] = '~';
    tilde[2] = '\000';
    tildelen = 2;
  }

  char *p;
  for (p = newsub; *p; p++) {
    if (strncmp(p, tilde, tildelen) == 0) {
      size_t prefixlen = (size_t)(p - newsub);
      char *postfix = p + tildelen;
      size_t postfixlen;
      size_t tmpsublen;

      if (newsublen == 0) {
        newsublen = strlen(newsub);
      }
      newsublen -= tildelen;
      postfixlen = newsublen - prefixlen;
      tmpsublen = prefixlen + reg_prev_sublen + postfixlen;

      if (tmpsublen > 0 && reg_prev_sub != 
# 1907 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                          ((void *)0)
# 1907 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                              ) {


        if (tmpsublen > MAXCOL) {
          emsg(gettext(e_resulting_text_too_long));
          error = 
# 1912 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                 1
# 1912 "/home/ubuntu/neovim/src/nvim/regexp.c"
                     ;
          break;
        }

        char *tmpsub = xmalloc(tmpsublen + 1);

        memmove(tmpsub, newsub, prefixlen);

        memmove(tmpsub + prefixlen, reg_prev_sub, reg_prev_sublen);

        strcpy((char *)(tmpsub + prefixlen + reg_prev_sublen), (char *)(postfix));

        if (newsub != source) {
          xfree(newsub);
        }
        newsub = tmpsub;
        newsublen = tmpsublen;
        p = newsub + prefixlen + reg_prev_sublen;
      } else {
        memmove(p, postfix, postfixlen + 1);
      }
      p--;
    } else {
      if (*p == '\\' && p[1]) {
        p++;
      }
      p += utfc_ptr2len(p) - 1;
    }
  }

  if (error) {
    if (newsub != source) {
      xfree(newsub);
    }
    return source;
  }


  if (!preview) {



    newsublen = (size_t)(p - newsub);
    if (newsublen == 0) {
      do { void **ptr_ = (void **)&(reg_prev_sub); xfree(*ptr_); *ptr_ = 
# 1956 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
     ((void *)0)
# 1956 "/home/ubuntu/neovim/src/nvim/regexp.c"
     ; (void)(*ptr_); } while (0);
    } else {
      xfree(reg_prev_sub);
      reg_prev_sub = xstrnsave(newsub, newsublen);
    }
    reg_prev_sublen = newsublen;
  }

  return newsub;
}



static int fill_submatch_list(int argc FUNC_ATTR_UNUSED, typval_T *argv, int argskip, ufunc_T *fp)
  FUNC_ATTR_NONNULL_ALL
{
  typval_T *listarg = argv + argskip;

  if (!fp->uf_varargs && fp->uf_args.ga_len <= argskip) {

    return argskip;
  }


  tv_list_init_static10((staticList10_T *)listarg->vval.v_list);


  listitem_T *li = tv_list_first(listarg->vval.v_list);
  for (int i = 0; i < 10; i++) {
    char *s = rsm.sm_match->startp[i];
    if (s == 
# 1986 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
            ((void *)0) 
# 1986 "/home/ubuntu/neovim/src/nvim/regexp.c"
                 || rsm.sm_match->endp[i] == 
# 1986 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                             ((void *)0)
# 1986 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                                 ) {
      s = 
# 1987 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
         ((void *)0)
# 1987 "/home/ubuntu/neovim/src/nvim/regexp.c"
             ;
    } else {
      s = xstrnsave(s, (size_t)(rsm.sm_match->endp[i] - s));
    }
    (&(li)->li_tv)->v_type = VAR_STRING;
    (&(li)->li_tv)->vval.v_string = s;
    li = ((li)->li_next);
  }
  return argskip + 1;
}

static void clear_submatch_list(staticList10_T *sl)
{
  do { list_T *const l_ = (&sl->sl_list); if (l_ != 
# 2000 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
 ((void *)0)
# 2000 "/home/ubuntu/neovim/src/nvim/regexp.c"
 ) { for ( listitem_T *li = l_->lv_first; li != 
# 2000 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
 ((void *)0)
# 2000 "/home/ubuntu/neovim/src/nvim/regexp.c"
 ; li = li->li_next) { { xfree((&(li)->li_tv)->vval.v_string); } } } } while (0)

    ;
}
# 2022 "/home/ubuntu/neovim/src/nvim/regexp.c"
int vim_regsub(regmatch_T *rmp, char *source, typval_T *expr, char *dest, int destlen, int flags)
{
  regexec_T rex_save;
  
# 2025 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
 _Bool 
# 2025 "/home/ubuntu/neovim/src/nvim/regexp.c"
      rex_in_use_save = rex_in_use;

  if (rex_in_use) {

    rex_save = rex;
  }
  rex_in_use = 
# 2031 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
              1
# 2031 "/home/ubuntu/neovim/src/nvim/regexp.c"
                  ;

  rex.reg_match = rmp;
  rex.reg_mmatch = 
# 2034 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                  ((void *)0)
# 2034 "/home/ubuntu/neovim/src/nvim/regexp.c"
                      ;
  rex.reg_maxline = 0;
  rex.reg_buf = curbuf;
  rex.reg_line_lbr = 
# 2037 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                    1
# 2037 "/home/ubuntu/neovim/src/nvim/regexp.c"
                        ;
  int result = vim_regsub_both(source, expr, dest, destlen, flags);

  rex_in_use = rex_in_use_save;
  if (rex_in_use) {
    rex = rex_save;
  }

  return result;
}

int vim_regsub_multi(regmmatch_T *rmp, linenr_T lnum, char *source, char *dest, int destlen,
                     int flags)
{
  regexec_T rex_save;
  
# 2052 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
 _Bool 
# 2052 "/home/ubuntu/neovim/src/nvim/regexp.c"
      rex_in_use_save = rex_in_use;

  if (rex_in_use) {

    rex_save = rex;
  }
  rex_in_use = 
# 2058 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
              1
# 2058 "/home/ubuntu/neovim/src/nvim/regexp.c"
                  ;

  rex.reg_match = 
# 2060 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                 ((void *)0)
# 2060 "/home/ubuntu/neovim/src/nvim/regexp.c"
                     ;
  rex.reg_mmatch = rmp;
  rex.reg_buf = curbuf;
  rex.reg_firstlnum = lnum;
  rex.reg_maxline = curbuf->b_ml.ml_line_count - lnum;
  rex.reg_line_lbr = 
# 2065 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                    0
# 2065 "/home/ubuntu/neovim/src/nvim/regexp.c"
                         ;
  int result = vim_regsub_both(source, 
# 2066 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                      ((void *)0)
# 2066 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                          , dest, destlen, flags);

  rex_in_use = rex_in_use_save;
  if (rex_in_use) {
    rex = rex_save;
  }

  return result;
}



static char *eval_result[4] = { 
# 2078 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                                ((void *)0)
# 2078 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                                    , 
# 2078 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                                      ((void *)0)
# 2078 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                                          , 
# 2078 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                                            ((void *)0)
# 2078 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                                                , 
# 2078 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                                                  ((void *)0) 
# 2078 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                                                       };
# 2089 "/home/ubuntu/neovim/src/nvim/regexp.c"
static int vim_regsub_both(char *source, typval_T *expr, char *dest, int destlen, int flags)
{
  char *src;
  char *dst;
  char *s;
  int c;
  int cc;
  int no = -1;
  fptr_T func_all = (fptr_T)
# 2097 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                           ((void *)0)
# 2097 "/home/ubuntu/neovim/src/nvim/regexp.c"
                               ;
  fptr_T func_one = (fptr_T)
# 2098 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                           ((void *)0)
# 2098 "/home/ubuntu/neovim/src/nvim/regexp.c"
                               ;
  linenr_T clnum = 0;
  int len = 0;
  static int nesting = 0;
  
# 2102 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
 _Bool 
# 2102 "/home/ubuntu/neovim/src/nvim/regexp.c"
      copy = flags & REGSUB_COPY;


  if ((source == 
# 2105 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                ((void *)0) 
# 2105 "/home/ubuntu/neovim/src/nvim/regexp.c"
                     && expr == 
# 2105 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                ((void *)0)
# 2105 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                    ) || dest == 
# 2105 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                                 ((void *)0)
# 2105 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                                     ) {
    emsg(gettext(e_null));
    return 0;
  }
  if (prog_magic_wrong()) {
    return 0;
  }
  if (nesting == 4) {
    emsg(gettext(e_substitute_nesting_too_deep));
    return 0;
  }
  int nested = nesting;
  src = source;
  dst = dest;


  if (expr != 
# 2121 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
             ((void *)0) 
# 2121 "/home/ubuntu/neovim/src/nvim/regexp.c"
                  || (source[0] == '\\' && source[1] == '=')) {





    if (copy) {
      if (eval_result[nested] != 
# 2128 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                ((void *)0)
# 2128 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                    ) {
        size_t eval_len = strlen(eval_result[nested]);
        if (eval_len < (size_t)destlen) {
          strcpy((char *)(dest), (char *)(eval_result[nested]));
          dst += eval_len;
          do { void **ptr_ = (void **)&(eval_result[nested]); xfree(*ptr_); *ptr_ = 
# 2133 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
         ((void *)0)
# 2133 "/home/ubuntu/neovim/src/nvim/regexp.c"
         ; (void)(*ptr_); } while (0);
        }
      }
    } else {
      const 
# 2137 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
           _Bool 
# 2137 "/home/ubuntu/neovim/src/nvim/regexp.c"
                prev_can_f_submatch = can_f_submatch;
      regsubmatch_T rsm_save;

      do { void **ptr_ = (void **)&(eval_result[nested]); xfree(*ptr_); *ptr_ = 
# 2140 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
     ((void *)0)
# 2140 "/home/ubuntu/neovim/src/nvim/regexp.c"
     ; (void)(*ptr_); } while (0);




      if (can_f_submatch) {
        rsm_save = rsm;
      }
      can_f_submatch = 
# 2148 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                      1
# 2148 "/home/ubuntu/neovim/src/nvim/regexp.c"
                          ;
      rsm.sm_match = rex.reg_match;
      rsm.sm_mmatch = rex.reg_mmatch;
      rsm.sm_firstlnum = rex.reg_firstlnum;
      rsm.sm_maxline = rex.reg_maxline;
      rsm.sm_line_lbr = rex.reg_line_lbr;




      nesting++;

      if (expr != 
# 2160 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                 ((void *)0)
# 2160 "/home/ubuntu/neovim/src/nvim/regexp.c"
                     ) {
        typval_T argv[2];
        typval_T rettv;
        staticList10_T matchList = { .sl_list = { .lv_first = 
# 2163 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                  ((void *)0)
# 2163 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                  , .lv_last = 
# 2163 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                  ((void *)0)
# 2163 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                  , .lv_refcount = 0, .lv_len = 0, .lv_watch = 
# 2163 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                  ((void *)0)
# 2163 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                  , .lv_idx_item = 
# 2163 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                  ((void *)0)
# 2163 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                  , .lv_lock = VAR_FIXED, .lv_used_next = 
# 2163 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                  ((void *)0)
# 2163 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                  , .lv_used_prev = 
# 2163 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                  ((void *)0)
# 2163 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                  , }, };
        rettv.v_type = VAR_STRING;
        rettv.vval.v_string = 
# 2165 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                             ((void *)0)
# 2165 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                 ;
        argv[0].v_type = VAR_LIST;
        argv[0].vval.v_list = &matchList.sl_list;
        funcexe_T funcexe = (funcexe_T) { .fe_argv_func = 
# 2168 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                           ((void *)0)
# 2168 "/home/ubuntu/neovim/src/nvim/regexp.c"
                           , .fe_firstline = 0, .fe_lastline = 0, .fe_doesrange = 
# 2168 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                           ((void *)0)
# 2168 "/home/ubuntu/neovim/src/nvim/regexp.c"
                           , .fe_evaluate = 
# 2168 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                           0
# 2168 "/home/ubuntu/neovim/src/nvim/regexp.c"
                           , .fe_partial = 
# 2168 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                           ((void *)0)
# 2168 "/home/ubuntu/neovim/src/nvim/regexp.c"
                           , .fe_selfdict = 
# 2168 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                           ((void *)0)
# 2168 "/home/ubuntu/neovim/src/nvim/regexp.c"
                           , .fe_basetv = 
# 2168 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                           ((void *)0)
# 2168 "/home/ubuntu/neovim/src/nvim/regexp.c"
                           , .fe_found_var = 
# 2168 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                           0
# 2168 "/home/ubuntu/neovim/src/nvim/regexp.c"
                           , };
        funcexe.fe_argv_func = fill_submatch_list;
        funcexe.fe_evaluate = 
# 2170 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                             1
# 2170 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                 ;
        if (expr->v_type == VAR_FUNC) {
          s = expr->vval.v_string;
          call_func(s, -1, &rettv, 1, argv, &funcexe);
        } else if (expr->v_type == VAR_PARTIAL) {
          partial_T *partial = expr->vval.v_partial;

          s = partial_name(partial);
          funcexe.fe_partial = partial;
          call_func(s, -1, &rettv, 1, argv, &funcexe);
        }
        if (tv_list_len(&matchList.sl_list) > 0) {

          clear_submatch_list(&matchList);
        }
        if (rettv.v_type == VAR_UNKNOWN) {

          eval_result[nested] = 
# 2187 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                               ((void *)0)
# 2187 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                   ;
        } else {
          char buf[NUMBUFLEN];
          eval_result[nested] = (char *)tv_get_string_buf_chk(&rettv, buf);
          if (eval_result[nested] != 
# 2191 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                    ((void *)0)
# 2191 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                        ) {
            eval_result[nested] = xstrdup(eval_result[nested]);
          }
        }
        tv_clear(&rettv);
      } else {
        eval_result[nested] = eval_to_string(source + 2, 
# 2197 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                                        1
# 2197 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                                            , 
# 2197 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                                              0
# 2197 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                                                   );
      }
      nesting--;

      if (eval_result[nested] != 
# 2201 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                ((void *)0)
# 2201 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                    ) {
        int had_backslash = 
# 2202 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                           0
# 2202 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                ;

        for (s = eval_result[nested]; *s != '\000'; (s += utfc_ptr2len((char *)s))) {



          if (*s == '\012' && !rsm.sm_line_lbr) {
            *s = '\015';
          } else if (*s == '\\' && s[1] != '\000') {
            s++;





            if (*s == '\012' && !rsm.sm_line_lbr) {
              *s = '\015';
            }
            had_backslash = 
# 2220 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                           1
# 2220 "/home/ubuntu/neovim/src/nvim/regexp.c"
                               ;
          }
        }
        if (had_backslash && (flags & REGSUB_BACKSLASH)) {

          s = vim_strsave_escaped(eval_result[nested], "\\");
          xfree(eval_result[nested]);
          eval_result[nested] = s;
        }

        dst += strlen(eval_result[nested]);
      }

      can_f_submatch = prev_can_f_submatch;
      if (can_f_submatch) {
        rsm = rsm_save;
      }
    }
  } else {
    while ((c = (uint8_t)(*src++)) != '\000') {
      if (c == '&' && (flags & REGSUB_MAGIC)) {
        no = 0;
      } else if (c == '\\' && *src != '\000') {
        if (*src == '&' && !(flags & REGSUB_MAGIC)) {
          src++;
          no = 0;
        } else if ('0' <= *src && *src <= '9') {
          no = *src++ - '0';
        } else if (vim_strchr("uUlLeE", (uint8_t)(*src))) {
          switch (*src++) {
          case 'u':
            func_one = do_upper;
            continue;
          case 'U':
            func_all = do_upper;
            continue;
          case 'l':
            func_one = do_lower;
            continue;
          case 'L':
            func_all = do_lower;
            continue;
          case 'e':
          case 'E':
            func_one = func_all = (fptr_T)
# 2264 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                         ((void *)0)
# 2264 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                             ;
            continue;
          }
        }
      }
      if (no < 0) {
        if (c == (0x80) && src[0] != '\000' && src[1] != '\000') {

          if (copy) {
            if (dst + 3 > dest + destlen) {
              iemsg("vim_regsub_both(): not enough space");
              return 0;
            }
            *dst++ = (char)c;
            *dst++ = *src++;
            *dst++ = *src++;
          } else {
            dst += 3;
            src += 2;
          }
          continue;
        }

        if (c == '\\' && *src != '\000') {

          switch (*src) {
          case 'r':
            c = '\015'; ++src; break;
          case 'n':
            c = '\012'; ++src; break;
          case 't':
            c = '\011'; ++src; break;


          case 'b':
            c = 8; ++src; break;



          default:
            if (flags & REGSUB_BACKSLASH) {
              if (copy) {
                if (dst + 1 > dest + destlen) {
                  iemsg("vim_regsub_both(): not enough space");
                  return 0;
                }
                *dst = '\\';
              }
              dst++;
            }
            c = (uint8_t)(*src++);
          }
        } else {
          c = utf_ptr2char(src - 1);
        }


        if (func_one != 
# 2321 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                       ((void *)0)
# 2321 "/home/ubuntu/neovim/src/nvim/regexp.c"
                           ) {
          func_one(&cc, c);
          func_one = 
# 2323 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                    ((void *)0)
# 2323 "/home/ubuntu/neovim/src/nvim/regexp.c"
                        ;
        } else if (func_all != 
# 2324 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                              ((void *)0)
# 2324 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                  ) {
          func_all(&cc, c);
        } else {

          cc = c;
        }

        int totlen = utfc_ptr2len(src - 1);
        int charlen = utf_char2len(cc);

        if (copy) {
          if (dst + charlen > dest + destlen) {
            iemsg("vim_regsub_both(): not enough space");
            return 0;
          }
          utf_char2bytes(cc, dst);
        }
        dst += charlen - 1;
        int clen = utf_ptr2len(src - 1);



        if (clen < totlen) {
          if (copy) {
            if (dst + totlen - clen > dest + destlen) {
              iemsg("vim_regsub_both(): not enough space");
              return 0;
            }
            memmove(dst + 1, src - 1 + clen, (size_t)(totlen - clen));
          }
          dst += totlen - clen;
        }
        src += totlen - 1;
        dst++;
      } else {
        if ((rex.reg_match == 
# 2359 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
           ((void *)0)
# 2359 "/home/ubuntu/neovim/src/nvim/regexp.c"
           )) {
          clnum = rex.reg_mmatch->startpos[no].lnum;
          if (clnum < 0 || rex.reg_mmatch->endpos[no].lnum < 0) {
            s = 
# 2362 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
               ((void *)0)
# 2362 "/home/ubuntu/neovim/src/nvim/regexp.c"
                   ;
          } else {
            s = reg_getline(clnum) + rex.reg_mmatch->startpos[no].col;
            if (rex.reg_mmatch->endpos[no].lnum == clnum) {
              len = rex.reg_mmatch->endpos[no].col
                    - rex.reg_mmatch->startpos[no].col;
            } else {
              len = reg_getline_len(clnum) - rex.reg_mmatch->startpos[no].col;
            }
          }
        } else {
          s = rex.reg_match->startp[no];
          if (rex.reg_match->endp[no] == 
# 2374 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                        ((void *)0)
# 2374 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                            ) {
            s = 
# 2375 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
               ((void *)0)
# 2375 "/home/ubuntu/neovim/src/nvim/regexp.c"
                   ;
          } else {
            len = (int)(rex.reg_match->endp[no] - s);
          }
        }
        if (s != 
# 2380 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                ((void *)0)
# 2380 "/home/ubuntu/neovim/src/nvim/regexp.c"
                    ) {
          while (
# 2381 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                1
# 2381 "/home/ubuntu/neovim/src/nvim/regexp.c"
                    ) {
            if (len == 0) {
              if ((rex.reg_match == 
# 2383 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                 ((void *)0)
# 2383 "/home/ubuntu/neovim/src/nvim/regexp.c"
                 )) {
                if (rex.reg_mmatch->endpos[no].lnum == clnum) {
                  break;
                }
                if (copy) {
                  if (dst + 1 > dest + destlen) {
                    iemsg("vim_regsub_both(): not enough space");
                    return 0;
                  }
                  *dst = '\015';
                }
                dst++;
                s = reg_getline(++clnum);
                if (rex.reg_mmatch->endpos[no].lnum == clnum) {
                  len = rex.reg_mmatch->endpos[no].col;
                } else {
                  len = reg_getline_len(clnum);
                }
              } else {
                break;
              }
            } else if (*s == '\000') {
              if (copy) {
                iemsg(gettext(e_re_damg));
              }
              goto exit;
            } else {
              if ((flags & REGSUB_BACKSLASH) && (*s == '\015' || *s == '\\')) {




                if (copy) {
                  if (dst + 2 > dest + destlen) {
                    iemsg("vim_regsub_both(): not enough space");
                    return 0;
                  }
                  dst[0] = '\\';
                  dst[1] = *s;
                }
                dst += 2;
              } else {
                c = utf_ptr2char(s);

                if (func_one != (fptr_T)
# 2427 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                       ((void *)0)
# 2427 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                           ) {
                  func_one(&cc, c);
                  func_one = 
# 2429 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                            ((void *)0)
# 2429 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                ;
                } else if (func_all != (fptr_T)
# 2430 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                              ((void *)0)
# 2430 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                                  ) {
                  func_all(&cc, c);
                } else {
                  cc = c;
                }

                {
                  int l;
                  int charlen;



                  l = utf_ptr2len(s) - 1;

                  s += l;
                  len -= l;
                  charlen = utf_char2len(cc);
                  if (copy) {
                    if (dst + charlen > dest + destlen) {
                      iemsg("vim_regsub_both(): not enough space");
                      return 0;
                    }
                    utf_char2bytes(cc, dst);
                  }
                  dst += charlen - 1;
                }
                dst++;
              }

              s++;
              len--;
            }
          }
        }
        no = -1;
      }
    }
  }
  if (copy) {
    *dst = '\000';
  }

exit:
  return (int)((dst - dest) + 1);
}

static char *reg_getline_submatch(linenr_T lnum)
{
  char *line;
  reg_getline_common(lnum, RGLF_LINE | RGLF_SUBMATCH, &line, 
# 2479 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                                            ((void *)0)
# 2479 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                                                );
  return line;
}

static colnr_T reg_getline_submatch_len(linenr_T lnum)
{
  colnr_T length;
  reg_getline_common(lnum, RGLF_LENGTH | RGLF_SUBMATCH, 
# 2486 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                                       ((void *)0)
# 2486 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                                           , &length);
  return length;
}





char *reg_submatch(int no)
{
  char *retval = 
# 2496 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                ((void *)0)
# 2496 "/home/ubuntu/neovim/src/nvim/regexp.c"
                    ;
  char *s;
  int round;
  linenr_T lnum;

  if (!can_f_submatch || no < 0) {
    return 
# 2502 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
          ((void *)0)
# 2502 "/home/ubuntu/neovim/src/nvim/regexp.c"
              ;
  }

  if (rsm.sm_match == 
# 2505 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                     ((void *)0)
# 2505 "/home/ubuntu/neovim/src/nvim/regexp.c"
                         ) {
    ssize_t len;



    for (round = 1; round <= 2; round++) {
      lnum = rsm.sm_mmatch->startpos[no].lnum;
      if (lnum < 0 || rsm.sm_mmatch->endpos[no].lnum < 0) {
        return 
# 2513 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
              ((void *)0)
# 2513 "/home/ubuntu/neovim/src/nvim/regexp.c"
                  ;
      }

      s = reg_getline_submatch(lnum);
      if (s == 
# 2517 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
              ((void *)0)
# 2517 "/home/ubuntu/neovim/src/nvim/regexp.c"
                  ) {
        break;
      }
      s += rsm.sm_mmatch->startpos[no].col;
      if (rsm.sm_mmatch->endpos[no].lnum == lnum) {

        len = rsm.sm_mmatch->endpos[no].col - rsm.sm_mmatch->startpos[no].col;
        if (round == 2) {
          xmemcpyz(retval, s, (size_t)len);
        }
        len++;
      } else {


        len = reg_getline_submatch_len(lnum) - rsm.sm_mmatch->startpos[no].col;
        if (round == 2) {
          strcpy((char *)(retval), (char *)(s));
          retval[len] = '\n';
        }
        len++;
        lnum++;
        while (lnum < rsm.sm_mmatch->endpos[no].lnum) {
          s = reg_getline_submatch(lnum);
          if (round == 2) {
            strcpy((char *)(retval + len), (char *)(s));
          }
          len += reg_getline_submatch_len(lnum);
          if (round == 2) {
            retval[len] = '\n';
          }
          len++;
          lnum++;
        }
        if (round == 2) {
          strncpy(retval + len,
                  reg_getline_submatch(lnum),
                  (size_t)rsm.sm_mmatch->endpos[no].col);
        }
        len += rsm.sm_mmatch->endpos[no].col;
        if (round == 2) {
          retval[len] = '\000';
        }
        len++;
      }

      if (retval == 
# 2562 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                   ((void *)0)
# 2562 "/home/ubuntu/neovim/src/nvim/regexp.c"
                       ) {
        retval = xmalloc((size_t)len);
      }
    }
  } else {
    s = rsm.sm_match->startp[no];
    if (s == 
# 2568 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
            ((void *)0) 
# 2568 "/home/ubuntu/neovim/src/nvim/regexp.c"
                 || rsm.sm_match->endp[no] == 
# 2568 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                              ((void *)0)
# 2568 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                                  ) {
      retval = 
# 2569 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
              ((void *)0)
# 2569 "/home/ubuntu/neovim/src/nvim/regexp.c"
                  ;
    } else {
      retval = xstrnsave(s, (size_t)(rsm.sm_match->endp[no] - s));
    }
  }

  return retval;
}






list_T *reg_submatch_list(int no)
{
  if (!can_f_submatch || no < 0) {
    return 
# 2586 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
          ((void *)0)
# 2586 "/home/ubuntu/neovim/src/nvim/regexp.c"
              ;
  }

  linenr_T slnum;
  linenr_T elnum;
  list_T *list;
  const char *s;

  if (rsm.sm_match == 
# 2594 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                     ((void *)0)
# 2594 "/home/ubuntu/neovim/src/nvim/regexp.c"
                         ) {
    slnum = rsm.sm_mmatch->startpos[no].lnum;
    elnum = rsm.sm_mmatch->endpos[no].lnum;
    if (slnum < 0 || elnum < 0) {
      return 
# 2598 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
            ((void *)0)
# 2598 "/home/ubuntu/neovim/src/nvim/regexp.c"
                ;
    }

    colnr_T scol = rsm.sm_mmatch->startpos[no].col;
    colnr_T ecol = rsm.sm_mmatch->endpos[no].col;

    list = tv_list_alloc(elnum - slnum + 1);

    s = reg_getline_submatch(slnum) + scol;
    if (slnum == elnum) {
      tv_list_append_string(list, s, ecol - scol);
    } else {
      int max_lnum = elnum - slnum;
      tv_list_append_string(list, s, -1);
      for (int i = 1; i < max_lnum; i++) {
        s = reg_getline_submatch(slnum + i);
        tv_list_append_string(list, s, -1);
      }
      s = reg_getline_submatch(elnum);
      tv_list_append_string(list, s, ecol);
    }
  } else {
    s = rsm.sm_match->startp[no];
    if (s == 
# 2621 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
            ((void *)0) 
# 2621 "/home/ubuntu/neovim/src/nvim/regexp.c"
                 || rsm.sm_match->endp[no] == 
# 2621 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                              ((void *)0)
# 2621 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                                  ) {
      return 
# 2622 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
            ((void *)0)
# 2622 "/home/ubuntu/neovim/src/nvim/regexp.c"
                ;
    }
    list = tv_list_alloc(1);
    tv_list_append_string(list, s, rsm.sm_match->endp[no] - s);
  }

  tv_list_ref(list);
  return list;
}






static void init_regexec_multi(regmmatch_T *rmp, win_T *win, buf_T *buf, linenr_T lnum)
{
  rex.reg_match = 
# 2639 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                 ((void *)0)
# 2639 "/home/ubuntu/neovim/src/nvim/regexp.c"
                     ;
  rex.reg_mmatch = rmp;
  rex.reg_buf = buf;
  rex.reg_win = win;
  rex.reg_firstlnum = lnum;
  rex.reg_maxline = rex.reg_buf->b_ml.ml_line_count - lnum;
  rex.reg_line_lbr = 
# 2645 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                    0
# 2645 "/home/ubuntu/neovim/src/nvim/regexp.c"
                         ;
  rex.reg_ic = rmp->rmm_ic;
  rex.reg_icombine = 
# 2647 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                    0
# 2647 "/home/ubuntu/neovim/src/nvim/regexp.c"
                         ;
  rex.reg_nobreak = rmp->regprog->re_flags & 16;
  rex.reg_maxcol = rmp->rmm_maxcol;
}
# 2881 "/home/ubuntu/neovim/src/nvim/regexp.c"
static int prevchr_len;
static int num_complex_braces;
static uint8_t *regcode;
static int64_t regsize;
static int reg_toolong;
static uint8_t had_endbrace[NSUBEXP];
static int64_t brace_min[10];
static int64_t brace_max[10];
static int brace_count[10];
static int one_exactly = 
# 2890 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                        0
# 2890 "/home/ubuntu/neovim/src/nvim/regexp.c"
                             ;


static uint8_t *classchars = (uint8_t *)".iIkKfFpPsSdDxXoOwWhHaAlLuU";
static int classcodes[] = {
  20, 23, 24, 25, 26,
  27, 28, 29, 30,
  31, 32, 33, 34,
  35, 36, 37, 38,
  39, 40, 41, 42,
  43, 44, 45, 46,
  47, 48
};






typedef struct regstar_S {
  int nextb;
  int nextb_ic;
  int64_t count;
  int64_t minval;
  int64_t maxval;
} regstar_T;



typedef struct backpos_S {
  uint8_t *bp_scan;
  regsave_T bp_pos;
} backpos_T;






static garray_T regstack = { 0, 0, 0, 1, 
# 2929 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                          ((void *)0) 
# 2929 "/home/ubuntu/neovim/src/nvim/regexp.c"
                          };
static garray_T backpos = { 0, 0, 0, 1, 
# 2930 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                         ((void *)0) 
# 2930 "/home/ubuntu/neovim/src/nvim/regexp.c"
                         };

static regsave_T behind_pos;
# 2992 "/home/ubuntu/neovim/src/nvim/regexp.c"
static uint8_t *reg(int paren, int *flagp);
# 3005 "/home/ubuntu/neovim/src/nvim/regexp.c"
static void regcomp_start(uint8_t *expr, int re_flags)
{
  initchr((char *)expr);
  if (re_flags & 1) {
    reg_magic = MAGIC_ON;
  } else {
    reg_magic = MAGIC_OFF;
  }
  reg_string = (re_flags & 2);
  reg_strict = (re_flags & 4);
  get_cpo_flags();

  num_complex_braces = 0;
  regnpar = 1;
  memset(&(had_endbrace), 0, sizeof(had_endbrace));
  regnzpar = 1;
  re_has_z = 0;
  regsize = 0L;
  reg_toolong = 
# 3023 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
               0
# 3023 "/home/ubuntu/neovim/src/nvim/regexp.c"
                    ;
  regflags = 0;
  had_eol = 
# 3025 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
           0
# 3025 "/home/ubuntu/neovim/src/nvim/regexp.c"
                ;
}



static 
# 3030 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
      _Bool 
# 3030 "/home/ubuntu/neovim/src/nvim/regexp.c"
           use_multibytecode(int c)
{
  return utf_char2len(c) > 1
         && (re_multi_type(peekchr()) != 0
             || utf_iscomposing(c));
}


static void regc(int b)
{
  if (regcode == ((uint8_t *)-1)) {
    regsize++;
  } else {
    *regcode++ = (uint8_t)b;
  }
}


static void regmbc(int c)
{
  if (regcode == ((uint8_t *)-1)) {
    regsize += utf_char2len(c);
  } else {
    regcode += utf_char2bytes(c, (char *)regcode);
  }
}




static void reg_equi_class(int c)
{
  {
    switch (c) {

    case 'A':
    case 0xc0:
    case 0xc1:
    case 0xc2:
    case 0xc3:
    case 0xc4:
    case 0xc5:
    case 0x100:
    case 0x102:
    case 0x104:
    case 0x1cd:
    case 0x1de:
    case 0x1e0:
    case 0x1fa:
    case 0x202:
    case 0x226:
    case 0x23a:
    case 0x1e00:
    case 0x1ea0:
    case 0x1ea2:
    case 0x1ea4:
    case 0x1ea6:
    case 0x1ea8:
    case 0x1eaa:
    case 0x1eac:
    case 0x1eae:
    case 0x1eb0:
    case 0x1eb2:
    case 0x1eb4:
    case 0x1eb6:
      regmbc('A'); regmbc(0xc0); regmbc(0xc1); regmbc(0xc2);
      regmbc(0xc3); regmbc(0xc4); regmbc(0xc5);
      regmbc(0x100); regmbc(0x102); regmbc(0x104);
      regmbc(0x1cd); regmbc(0x1de); regmbc(0x1e0);
      regmbc(0x1fa); regmbc(0x202); regmbc(0x226);
      regmbc(0x23a); regmbc(0x1e00); regmbc(0x1ea0);
      regmbc(0x1ea2); regmbc(0x1ea4); regmbc(0x1ea6);
      regmbc(0x1ea8); regmbc(0x1eaa); regmbc(0x1eac);
      regmbc(0x1eae); regmbc(0x1eb0); regmbc(0x1eb2);
      regmbc(0x1eb4); regmbc(0x1eb6);
      return;
    case 'B':
    case 0x181:
    case 0x243:
    case 0x1e02:
    case 0x1e04:
    case 0x1e06:
      regmbc('B');
      regmbc(0x181); regmbc(0x243); regmbc(0x1e02);
      regmbc(0x1e04); regmbc(0x1e06);
      return;
    case 'C':
    case 0xc7:
    case 0x106:
    case 0x108:
    case 0x10a:
    case 0x10c:
    case 0x187:
    case 0x23b:
    case 0x1e08:
    case 0xa792:
      regmbc('C'); regmbc(0xc7);
      regmbc(0x106); regmbc(0x108); regmbc(0x10a);
      regmbc(0x10c); regmbc(0x187); regmbc(0x23b);
      regmbc(0x1e08); regmbc(0xa792);
      return;
    case 'D':
    case 0x10e:
    case 0x110:
    case 0x18a:
    case 0x1e0a:
    case 0x1e0c:
    case 0x1e0e:
    case 0x1e10:
    case 0x1e12:
      regmbc('D'); regmbc(0x10e); regmbc(0x110);
      regmbc(0x18a); regmbc(0x1e0a); regmbc(0x1e0c);
      regmbc(0x1e0e); regmbc(0x1e10); regmbc(0x1e12);
      return;
    case 'E':
    case 0xc8:
    case 0xc9:
    case 0xca:
    case 0xcb:
    case 0x112:
    case 0x114:
    case 0x116:
    case 0x118:
    case 0x11a:
    case 0x204:
    case 0x206:
    case 0x228:
    case 0x246:
    case 0x1e14:
    case 0x1e16:
    case 0x1e18:
    case 0x1e1a:
    case 0x1e1c:
    case 0x1eb8:
    case 0x1eba:
    case 0x1ebc:
    case 0x1ebe:
    case 0x1ec0:
    case 0x1ec2:
    case 0x1ec4:
    case 0x1ec6:
      regmbc('E'); regmbc(0xc8); regmbc(0xc9);
      regmbc(0xca); regmbc(0xcb); regmbc(0x112);
      regmbc(0x114); regmbc(0x116); regmbc(0x118);
      regmbc(0x11a); regmbc(0x204); regmbc(0x206);
      regmbc(0x228); regmbc(0x246); regmbc(0x1e14);
      regmbc(0x1e16); regmbc(0x1e18); regmbc(0x1e1a);
      regmbc(0x1e1c); regmbc(0x1eb8); regmbc(0x1eba);
      regmbc(0x1ebc); regmbc(0x1ebe); regmbc(0x1ec0);
      regmbc(0x1ec2); regmbc(0x1ec4); regmbc(0x1ec6);
      return;
    case 'F':
    case 0x191:
    case 0x1e1e:
    case 0xa798:
      regmbc('F'); regmbc(0x191); regmbc(0x1e1e);
      regmbc(0xa798);
      return;
    case 'G':
    case 0x11c:
    case 0x11e:
    case 0x120:
    case 0x122:
    case 0x193:
    case 0x1e4:
    case 0x1e6:
    case 0x1f4:
    case 0x1e20:
    case 0xa7a0:
      regmbc('G'); regmbc(0x11c); regmbc(0x11e);
      regmbc(0x120); regmbc(0x122); regmbc(0x193);
      regmbc(0x1e4); regmbc(0x1e6); regmbc(0x1f4);
      regmbc(0x1e20); regmbc(0xa7a0);
      return;
    case 'H':
    case 0x124:
    case 0x126:
    case 0x21e:
    case 0x1e22:
    case 0x1e24:
    case 0x1e26:
    case 0x1e28:
    case 0x1e2a:
    case 0x2c67:
      regmbc('H'); regmbc(0x124); regmbc(0x126);
      regmbc(0x21e); regmbc(0x1e22); regmbc(0x1e24);
      regmbc(0x1e26); regmbc(0x1e28); regmbc(0x1e2a);
      regmbc(0x2c67);
      return;
    case 'I':
    case 0xcc:
    case 0xcd:
    case 0xce:
    case 0xcf:
    case 0x128:
    case 0x12a:
    case 0x12c:
    case 0x12e:
    case 0x130:
    case 0x197:
    case 0x1cf:
    case 0x208:
    case 0x20a:
    case 0x1e2c:
    case 0x1e2e:
    case 0x1ec8:
    case 0x1eca:
      regmbc('I'); regmbc(0xcc); regmbc(0xcd);
      regmbc(0xce); regmbc(0xcf); regmbc(0x128);
      regmbc(0x12a); regmbc(0x12c); regmbc(0x12e);
      regmbc(0x130); regmbc(0x197); regmbc(0x1cf);
      regmbc(0x208); regmbc(0x20a); regmbc(0x1e2c);
      regmbc(0x1e2e); regmbc(0x1ec8); regmbc(0x1eca);
      return;
    case 'J':
    case 0x134:
    case 0x248:
      regmbc('J'); regmbc(0x134); regmbc(0x248);
      return;
    case 'K':
    case 0x136:
    case 0x198:
    case 0x1e8:
    case 0x1e30:
    case 0x1e32:
    case 0x1e34:
    case 0x2c69:
    case 0xa740:
      regmbc('K'); regmbc(0x136); regmbc(0x198);
      regmbc(0x1e8); regmbc(0x1e30); regmbc(0x1e32);
      regmbc(0x1e34); regmbc(0x2c69); regmbc(0xa740);
      return;
    case 'L':
    case 0x139:
    case 0x13b:
    case 0x13d:
    case 0x13f:
    case 0x141:
    case 0x23d:
    case 0x1e36:
    case 0x1e38:
    case 0x1e3a:
    case 0x1e3c:
    case 0x2c60:
      regmbc('L'); regmbc(0x139); regmbc(0x13b);
      regmbc(0x13d); regmbc(0x13f); regmbc(0x141);
      regmbc(0x23d); regmbc(0x1e36); regmbc(0x1e38);
      regmbc(0x1e3a); regmbc(0x1e3c); regmbc(0x2c60);
      return;
    case 'M':
    case 0x1e3e:
    case 0x1e40:
    case 0x1e42:
      regmbc('M'); regmbc(0x1e3e); regmbc(0x1e40);
      regmbc(0x1e42);
      return;
    case 'N':
    case 0xd1:
    case 0x143:
    case 0x145:
    case 0x147:
    case 0x1f8:
    case 0x1e44:
    case 0x1e46:
    case 0x1e48:
    case 0x1e4a:
    case 0xa7a4:
      regmbc('N'); regmbc(0xd1);
      regmbc(0x143); regmbc(0x145); regmbc(0x147);
      regmbc(0x1f8); regmbc(0x1e44); regmbc(0x1e46);
      regmbc(0x1e48); regmbc(0x1e4a); regmbc(0xa7a4);
      return;
    case 'O':
    case 0xd2:
    case 0xd3:
    case 0xd4:
    case 0xd5:
    case 0xd6:
    case 0xd8:
    case 0x14c:
    case 0x14e:
    case 0x150:
    case 0x19f:
    case 0x1a0:
    case 0x1d1:
    case 0x1ea:
    case 0x1ec:
    case 0x1fe:
    case 0x20c:
    case 0x20e:
    case 0x22a:
    case 0x22c:
    case 0x22e:
    case 0x230:
    case 0x1e4c:
    case 0x1e4e:
    case 0x1e50:
    case 0x1e52:
    case 0x1ecc:
    case 0x1ece:
    case 0x1ed0:
    case 0x1ed2:
    case 0x1ed4:
    case 0x1ed6:
    case 0x1ed8:
    case 0x1eda:
    case 0x1edc:
    case 0x1ede:
    case 0x1ee0:
    case 0x1ee2:
      regmbc('O'); regmbc(0xd2); regmbc(0xd3); regmbc(0xd4);
      regmbc(0xd5); regmbc(0xd6); regmbc(0xd8);
      regmbc(0x14c); regmbc(0x14e); regmbc(0x150);
      regmbc(0x19f); regmbc(0x1a0); regmbc(0x1d1);
      regmbc(0x1ea); regmbc(0x1ec); regmbc(0x1fe);
      regmbc(0x20c); regmbc(0x20e); regmbc(0x22a);
      regmbc(0x22c); regmbc(0x22e); regmbc(0x230);
      regmbc(0x1e4c); regmbc(0x1e4e); regmbc(0x1e50);
      regmbc(0x1e52); regmbc(0x1ecc); regmbc(0x1ece);
      regmbc(0x1ed0); regmbc(0x1ed2); regmbc(0x1ed4);
      regmbc(0x1ed6); regmbc(0x1ed8); regmbc(0x1eda);
      regmbc(0x1edc); regmbc(0x1ede); regmbc(0x1ee0);
      regmbc(0x1ee2);
      return;
    case 'P':
    case 0x1a4:
    case 0x1e54:
    case 0x1e56:
    case 0x2c63:
      regmbc('P'); regmbc(0x1a4); regmbc(0x1e54);
      regmbc(0x1e56); regmbc(0x2c63);
      return;
    case 'Q':
    case 0x24a:
      regmbc('Q'); regmbc(0x24a);
      return;
    case 'R':
    case 0x154:
    case 0x156:
    case 0x158:
    case 0x210:
    case 0x212:
    case 0x24c:
    case 0x1e58:
    case 0x1e5a:
    case 0x1e5c:
    case 0x1e5e:
    case 0x2c64:
    case 0xa7a6:
      regmbc('R'); regmbc(0x154); regmbc(0x156);
      regmbc(0x210); regmbc(0x212); regmbc(0x158);
      regmbc(0x24c); regmbc(0x1e58); regmbc(0x1e5a);
      regmbc(0x1e5c); regmbc(0x1e5e); regmbc(0x2c64);
      regmbc(0xa7a6);
      return;
    case 'S':
    case 0x15a:
    case 0x15c:
    case 0x15e:
    case 0x160:
    case 0x218:
    case 0x1e60:
    case 0x1e62:
    case 0x1e64:
    case 0x1e66:
    case 0x1e68:
    case 0x2c7e:
    case 0xa7a8:
      regmbc('S'); regmbc(0x15a); regmbc(0x15c);
      regmbc(0x15e); regmbc(0x160); regmbc(0x218);
      regmbc(0x1e60); regmbc(0x1e62); regmbc(0x1e64);
      regmbc(0x1e66); regmbc(0x1e68); regmbc(0x2c7e);
      regmbc(0xa7a8);
      return;
    case 'T':
    case 0x162:
    case 0x164:
    case 0x166:
    case 0x1ac:
    case 0x1ae:
    case 0x21a:
    case 0x23e:
    case 0x1e6a:
    case 0x1e6c:
    case 0x1e6e:
    case 0x1e70:
      regmbc('T'); regmbc(0x162); regmbc(0x164);
      regmbc(0x166); regmbc(0x1ac); regmbc(0x23e);
      regmbc(0x1ae); regmbc(0x21a); regmbc(0x1e6a);
      regmbc(0x1e6c); regmbc(0x1e6e); regmbc(0x1e70);
      return;
    case 'U':
    case 0xd9:
    case 0xda:
    case 0xdb:
    case 0xdc:
    case 0x168:
    case 0x16a:
    case 0x16c:
    case 0x16e:
    case 0x170:
    case 0x172:
    case 0x1af:
    case 0x1d3:
    case 0x1d5:
    case 0x1d7:
    case 0x1d9:
    case 0x1db:
    case 0x214:
    case 0x216:
    case 0x244:
    case 0x1e72:
    case 0x1e74:
    case 0x1e76:
    case 0x1e78:
    case 0x1e7a:
    case 0x1ee4:
    case 0x1ee6:
    case 0x1ee8:
    case 0x1eea:
    case 0x1eec:
    case 0x1eee:
    case 0x1ef0:
      regmbc('U'); regmbc(0xd9); regmbc(0xda);
      regmbc(0xdb); regmbc(0xdc); regmbc(0x168);
      regmbc(0x16a); regmbc(0x16c); regmbc(0x16e);
      regmbc(0x170); regmbc(0x172); regmbc(0x1af);
      regmbc(0x1d3); regmbc(0x1d5); regmbc(0x1d7);
      regmbc(0x1d9); regmbc(0x1db); regmbc(0x214);
      regmbc(0x216); regmbc(0x244); regmbc(0x1e72);
      regmbc(0x1e74); regmbc(0x1e76); regmbc(0x1e78);
      regmbc(0x1e7a); regmbc(0x1ee4); regmbc(0x1ee6);
      regmbc(0x1ee8); regmbc(0x1eea); regmbc(0x1eec);
      regmbc(0x1eee); regmbc(0x1ef0);
      return;
    case 'V':
    case 0x1b2:
    case 0x1e7c:
    case 0x1e7e:
      regmbc('V'); regmbc(0x1b2); regmbc(0x1e7c);
      regmbc(0x1e7e);
      return;
    case 'W':
    case 0x174:
    case 0x1e80:
    case 0x1e82:
    case 0x1e84:
    case 0x1e86:
    case 0x1e88:
      regmbc('W'); regmbc(0x174); regmbc(0x1e80);
      regmbc(0x1e82); regmbc(0x1e84); regmbc(0x1e86);
      regmbc(0x1e88);
      return;
    case 'X':
    case 0x1e8a:
    case 0x1e8c:
      regmbc('X'); regmbc(0x1e8a); regmbc(0x1e8c);
      return;
    case 'Y':
    case 0xdd:
    case 0x176:
    case 0x178:
    case 0x1b3:
    case 0x232:
    case 0x24e:
    case 0x1e8e:
    case 0x1ef2:
    case 0x1ef6:
    case 0x1ef4:
    case 0x1ef8:
      regmbc('Y'); regmbc(0xdd); regmbc(0x176);
      regmbc(0x178); regmbc(0x1b3); regmbc(0x232);
      regmbc(0x24e); regmbc(0x1e8e); regmbc(0x1ef2);
      regmbc(0x1ef4); regmbc(0x1ef6); regmbc(0x1ef8);
      return;
    case 'Z':
    case 0x179:
    case 0x17b:
    case 0x17d:
    case 0x1b5:
    case 0x1e90:
    case 0x1e92:
    case 0x1e94:
    case 0x2c6b:
      regmbc('Z'); regmbc(0x179); regmbc(0x17b);
      regmbc(0x17d); regmbc(0x1b5); regmbc(0x1e90);
      regmbc(0x1e92); regmbc(0x1e94); regmbc(0x2c6b);
      return;
    case 'a':
    case 0xe0:
    case 0xe1:
    case 0xe2:
    case 0xe3:
    case 0xe4:
    case 0xe5:
    case 0x101:
    case 0x103:
    case 0x105:
    case 0x1ce:
    case 0x1df:
    case 0x1e1:
    case 0x1fb:
    case 0x201:
    case 0x203:
    case 0x227:
    case 0x1d8f:
    case 0x1e01:
    case 0x1e9a:
    case 0x1ea1:
    case 0x1ea3:
    case 0x1ea5:
    case 0x1ea7:
    case 0x1ea9:
    case 0x1eab:
    case 0x1ead:
    case 0x1eaf:
    case 0x1eb1:
    case 0x1eb3:
    case 0x1eb5:
    case 0x1eb7:
    case 0x2c65:
      regmbc('a'); regmbc(0xe0); regmbc(0xe1);
      regmbc(0xe2); regmbc(0xe3); regmbc(0xe4);
      regmbc(0xe5); regmbc(0x101); regmbc(0x103);
      regmbc(0x105); regmbc(0x1ce); regmbc(0x1df);
      regmbc(0x1e1); regmbc(0x1fb); regmbc(0x201);
      regmbc(0x203); regmbc(0x227); regmbc(0x1d8f);
      regmbc(0x1e01); regmbc(0x1e9a); regmbc(0x1ea1);
      regmbc(0x1ea3); regmbc(0x1ea5); regmbc(0x1ea7);
      regmbc(0x1ea9); regmbc(0x1eab); regmbc(0x1ead);
      regmbc(0x1eaf); regmbc(0x1eb1); regmbc(0x1eb3);
      regmbc(0x1eb5); regmbc(0x1eb7); regmbc(0x2c65);
      return;
    case 'b':
    case 0x180:
    case 0x253:
    case 0x1d6c:
    case 0x1d80:
    case 0x1e03:
    case 0x1e05:
    case 0x1e07:
      regmbc('b');
      regmbc(0x180); regmbc(0x253); regmbc(0x1d6c);
      regmbc(0x1d80); regmbc(0x1e03); regmbc(0x1e05);
      regmbc(0x1e07);
      return;
    case 'c':
    case 0xe7:
    case 0x107:
    case 0x109:
    case 0x10b:
    case 0x10d:
    case 0x188:
    case 0x23c:
    case 0x1e09:
    case 0xa793:
    case 0xa794:
      regmbc('c'); regmbc(0xe7); regmbc(0x107);
      regmbc(0x109); regmbc(0x10b); regmbc(0x10d);
      regmbc(0x188); regmbc(0x23c); regmbc(0x1e09);
      regmbc(0xa793); regmbc(0xa794);
      return;
    case 'd':
    case 0x10f:
    case 0x111:
    case 0x257:
    case 0x1d6d:
    case 0x1d81:
    case 0x1d91:
    case 0x1e0b:
    case 0x1e0d:
    case 0x1e0f:
    case 0x1e11:
    case 0x1e13:
      regmbc('d'); regmbc(0x10f); regmbc(0x111);
      regmbc(0x257); regmbc(0x1d6d); regmbc(0x1d81);
      regmbc(0x1d91); regmbc(0x1e0b); regmbc(0x1e0d);
      regmbc(0x1e0f); regmbc(0x1e11); regmbc(0x1e13);
      return;
    case 'e':
    case 0xe8:
    case 0xe9:
    case 0xea:
    case 0xeb:
    case 0x113:
    case 0x115:
    case 0x117:
    case 0x119:
    case 0x11b:
    case 0x205:
    case 0x207:
    case 0x229:
    case 0x247:
    case 0x1d92:
    case 0x1e15:
    case 0x1e17:
    case 0x1e19:
    case 0x1e1b:
    case 0x1eb9:
    case 0x1ebb:
    case 0x1e1d:
    case 0x1ebd:
    case 0x1ebf:
    case 0x1ec1:
    case 0x1ec3:
    case 0x1ec5:
    case 0x1ec7:
      regmbc('e'); regmbc(0xe8); regmbc(0xe9);
      regmbc(0xea); regmbc(0xeb); regmbc(0x113);
      regmbc(0x115); regmbc(0x117); regmbc(0x119);
      regmbc(0x11b); regmbc(0x205); regmbc(0x207);
      regmbc(0x229); regmbc(0x247); regmbc(0x1d92);
      regmbc(0x1e15); regmbc(0x1e17); regmbc(0x1e19);
      regmbc(0x1e1b); regmbc(0x1e1d); regmbc(0x1eb9);
      regmbc(0x1ebb); regmbc(0x1ebd); regmbc(0x1ebf);
      regmbc(0x1ec1); regmbc(0x1ec3); regmbc(0x1ec5);
      regmbc(0x1ec7);
      return;
    case 'f':
    case 0x192:
    case 0x1d6e:
    case 0x1d82:
    case 0x1e1f:
    case 0xa799:
      regmbc('f'); regmbc(0x192); regmbc(0x1d6e);
      regmbc(0x1d82); regmbc(0x1e1f); regmbc(0xa799);
      return;
    case 'g':
    case 0x11d:
    case 0x11f:
    case 0x121:
    case 0x123:
    case 0x1e5:
    case 0x1e7:
    case 0x260:
    case 0x1f5:
    case 0x1d83:
    case 0x1e21:
    case 0xa7a1:
      regmbc('g'); regmbc(0x11d); regmbc(0x11f);
      regmbc(0x121); regmbc(0x123); regmbc(0x1e5);
      regmbc(0x1e7); regmbc(0x1f5); regmbc(0x260);
      regmbc(0x1d83); regmbc(0x1e21); regmbc(0xa7a1);
      return;
    case 'h':
    case 0x125:
    case 0x127:
    case 0x21f:
    case 0x1e23:
    case 0x1e25:
    case 0x1e27:
    case 0x1e29:
    case 0x1e2b:
    case 0x1e96:
    case 0x2c68:
    case 0xa795:
      regmbc('h'); regmbc(0x125); regmbc(0x127);
      regmbc(0x21f); regmbc(0x1e23); regmbc(0x1e25);
      regmbc(0x1e27); regmbc(0x1e29); regmbc(0x1e2b);
      regmbc(0x1e96); regmbc(0x2c68); regmbc(0xa795);
      return;
    case 'i':
    case 0xec:
    case 0xed:
    case 0xee:
    case 0xef:
    case 0x129:
    case 0x12b:
    case 0x12d:
    case 0x12f:
    case 0x1d0:
    case 0x209:
    case 0x20b:
    case 0x268:
    case 0x1d96:
    case 0x1e2d:
    case 0x1e2f:
    case 0x1ec9:
    case 0x1ecb:
      regmbc('i'); regmbc(0xec); regmbc(0xed);
      regmbc(0xee); regmbc(0xef); regmbc(0x129);
      regmbc(0x12b); regmbc(0x12d); regmbc(0x12f);
      regmbc(0x1d0); regmbc(0x209); regmbc(0x20b);
      regmbc(0x268); regmbc(0x1d96); regmbc(0x1e2d);
      regmbc(0x1e2f); regmbc(0x1ec9); regmbc(0x1ecb);
      return;
    case 'j':
    case 0x135:
    case 0x1f0:
    case 0x249:
      regmbc('j'); regmbc(0x135); regmbc(0x1f0);
      regmbc(0x249);
      return;
    case 'k':
    case 0x137:
    case 0x199:
    case 0x1e9:
    case 0x1d84:
    case 0x1e31:
    case 0x1e33:
    case 0x1e35:
    case 0x2c6a:
    case 0xa741:
      regmbc('k'); regmbc(0x137); regmbc(0x199);
      regmbc(0x1e9); regmbc(0x1d84); regmbc(0x1e31);
      regmbc(0x1e33); regmbc(0x1e35); regmbc(0x2c6a);
      regmbc(0xa741);
      return;
    case 'l':
    case 0x13a:
    case 0x13c:
    case 0x13e:
    case 0x140:
    case 0x142:
    case 0x19a:
    case 0x1e37:
    case 0x1e39:
    case 0x1e3b:
    case 0x1e3d:
    case 0x2c61:
      regmbc('l'); regmbc(0x13a); regmbc(0x13c);
      regmbc(0x13e); regmbc(0x140); regmbc(0x142);
      regmbc(0x19a); regmbc(0x1e37); regmbc(0x1e39);
      regmbc(0x1e3b); regmbc(0x1e3d); regmbc(0x2c61);
      return;
    case 'm':
    case 0x1d6f:
    case 0x1e3f:
    case 0x1e41:
    case 0x1e43:
      regmbc('m'); regmbc(0x1d6f); regmbc(0x1e3f);
      regmbc(0x1e41); regmbc(0x1e43);
      return;
    case 'n':
    case 0xf1:
    case 0x144:
    case 0x146:
    case 0x148:
    case 0x149:
    case 0x1f9:
    case 0x1d70:
    case 0x1d87:
    case 0x1e45:
    case 0x1e47:
    case 0x1e49:
    case 0x1e4b:
    case 0xa7a5:
      regmbc('n'); regmbc(0xf1); regmbc(0x144);
      regmbc(0x146); regmbc(0x148); regmbc(0x149);
      regmbc(0x1f9); regmbc(0x1d70); regmbc(0x1d87);
      regmbc(0x1e45); regmbc(0x1e47); regmbc(0x1e49);
      regmbc(0x1e4b); regmbc(0xa7a5);
      return;
    case 'o':
    case 0xf2:
    case 0xf3:
    case 0xf4:
    case 0xf5:
    case 0xf6:
    case 0xf8:
    case 0x14d:
    case 0x14f:
    case 0x151:
    case 0x1a1:
    case 0x1d2:
    case 0x1eb:
    case 0x1ed:
    case 0x1ff:
    case 0x20d:
    case 0x20f:
    case 0x22b:
    case 0x22d:
    case 0x22f:
    case 0x231:
    case 0x275:
    case 0x1e4d:
    case 0x1e4f:
    case 0x1e51:
    case 0x1e53:
    case 0x1ecd:
    case 0x1ecf:
    case 0x1ed1:
    case 0x1ed3:
    case 0x1ed5:
    case 0x1ed7:
    case 0x1ed9:
    case 0x1edb:
    case 0x1edd:
    case 0x1edf:
    case 0x1ee1:
    case 0x1ee3:
      regmbc('o'); regmbc(0xf2); regmbc(0xf3);
      regmbc(0xf4); regmbc(0xf5); regmbc(0xf6);
      regmbc(0xf8); regmbc(0x14d); regmbc(0x14f);
      regmbc(0x151); regmbc(0x1a1); regmbc(0x1d2);
      regmbc(0x1eb); regmbc(0x1ed); regmbc(0x1ff);
      regmbc(0x20d); regmbc(0x20f); regmbc(0x22b);
      regmbc(0x22d); regmbc(0x22f); regmbc(0x231);
      regmbc(0x275); regmbc(0x1e4d); regmbc(0x1e4f);
      regmbc(0x1e51); regmbc(0x1e53); regmbc(0x1ecd);
      regmbc(0x1ecf); regmbc(0x1ed1); regmbc(0x1ed3);
      regmbc(0x1ed5); regmbc(0x1ed7); regmbc(0x1ed9);
      regmbc(0x1edb); regmbc(0x1edd); regmbc(0x1edf);
      regmbc(0x1ee1); regmbc(0x1ee3);
      return;
    case 'p':
    case 0x1a5:
    case 0x1d71:
    case 0x1d88:
    case 0x1d7d:
    case 0x1e55:
    case 0x1e57:
      regmbc('p'); regmbc(0x1a5); regmbc(0x1d71);
      regmbc(0x1d7d); regmbc(0x1d88); regmbc(0x1e55);
      regmbc(0x1e57);
      return;
    case 'q':
    case 0x24b:
    case 0x2a0:
      regmbc('q'); regmbc(0x24b); regmbc(0x2a0);
      return;
    case 'r':
    case 0x155:
    case 0x157:
    case 0x159:
    case 0x211:
    case 0x213:
    case 0x24d:
    case 0x27d:
    case 0x1d72:
    case 0x1d73:
    case 0x1d89:
    case 0x1e59:
    case 0x1e5b:
    case 0x1e5d:
    case 0x1e5f:
    case 0xa7a7:
      regmbc('r'); regmbc(0x155); regmbc(0x157);
      regmbc(0x159); regmbc(0x211); regmbc(0x213);
      regmbc(0x24d); regmbc(0x1d72); regmbc(0x1d73);
      regmbc(0x1d89); regmbc(0x1e59); regmbc(0x27d);
      regmbc(0x1e5b); regmbc(0x1e5d); regmbc(0x1e5f);
      regmbc(0xa7a7);
      return;
    case 's':
    case 0x15b:
    case 0x15d:
    case 0x15f:
    case 0x161:
    case 0x1e61:
    case 0x219:
    case 0x23f:
    case 0x1d74:
    case 0x1d8a:
    case 0x1e63:
    case 0x1e65:
    case 0x1e67:
    case 0x1e69:
    case 0xa7a9:
      regmbc('s'); regmbc(0x15b); regmbc(0x15d);
      regmbc(0x15f); regmbc(0x161); regmbc(0x23f);
      regmbc(0x219); regmbc(0x1d74); regmbc(0x1d8a);
      regmbc(0x1e61); regmbc(0x1e63); regmbc(0x1e65);
      regmbc(0x1e67); regmbc(0x1e69); regmbc(0xa7a9);
      return;
    case 't':
    case 0x163:
    case 0x165:
    case 0x167:
    case 0x1ab:
    case 0x1ad:
    case 0x21b:
    case 0x288:
    case 0x1d75:
    case 0x1e6b:
    case 0x1e6d:
    case 0x1e6f:
    case 0x1e71:
    case 0x1e97:
    case 0x2c66:
      regmbc('t'); regmbc(0x163); regmbc(0x165);
      regmbc(0x167); regmbc(0x1ab); regmbc(0x21b);
      regmbc(0x1ad); regmbc(0x288); regmbc(0x1d75);
      regmbc(0x1e6b); regmbc(0x1e6d); regmbc(0x1e6f);
      regmbc(0x1e71); regmbc(0x1e97); regmbc(0x2c66);
      return;
    case 'u':
    case 0xf9:
    case 0xfa:
    case 0xfb:
    case 0xfc:
    case 0x169:
    case 0x16b:
    case 0x16d:
    case 0x16f:
    case 0x171:
    case 0x173:
    case 0x1b0:
    case 0x1d4:
    case 0x1d6:
    case 0x1d8:
    case 0x1da:
    case 0x1dc:
    case 0x215:
    case 0x217:
    case 0x289:
    case 0x1e73:
    case 0x1d7e:
    case 0x1d99:
    case 0x1e75:
    case 0x1e77:
    case 0x1e79:
    case 0x1e7b:
    case 0x1ee5:
    case 0x1ee7:
    case 0x1ee9:
    case 0x1eeb:
    case 0x1eed:
    case 0x1eef:
    case 0x1ef1:
      regmbc('u'); regmbc(0xf9); regmbc(0xfa);
      regmbc(0xfb); regmbc(0xfc); regmbc(0x169);
      regmbc(0x16b); regmbc(0x16d); regmbc(0x16f);
      regmbc(0x171); regmbc(0x173); regmbc(0x1d6);
      regmbc(0x1d8); regmbc(0x1da); regmbc(0x1dc);
      regmbc(0x215); regmbc(0x217); regmbc(0x1b0);
      regmbc(0x1d4); regmbc(0x289); regmbc(0x1d7e);
      regmbc(0x1d99); regmbc(0x1e73); regmbc(0x1e75);
      regmbc(0x1e77); regmbc(0x1e79); regmbc(0x1e7b);
      regmbc(0x1ee5); regmbc(0x1ee7); regmbc(0x1ee9);
      regmbc(0x1eeb); regmbc(0x1eed); regmbc(0x1eef);
      regmbc(0x1ef1);
      return;
    case 'v':
    case 0x28b:
    case 0x1d8c:
    case 0x1e7d:
    case 0x1e7f:
      regmbc('v'); regmbc(0x28b); regmbc(0x1d8c);
      regmbc(0x1e7d); regmbc(0x1e7f);
      return;
    case 'w':
    case 0x175:
    case 0x1e81:
    case 0x1e83:
    case 0x1e85:
    case 0x1e87:
    case 0x1e89:
    case 0x1e98:
      regmbc('w'); regmbc(0x175); regmbc(0x1e81);
      regmbc(0x1e83); regmbc(0x1e85); regmbc(0x1e87);
      regmbc(0x1e89); regmbc(0x1e98);
      return;
    case 'x':
    case 0x1e8b:
    case 0x1e8d:
      regmbc('x'); regmbc(0x1e8b); regmbc(0x1e8d);
      return;
    case 'y':
    case 0xfd:
    case 0xff:
    case 0x177:
    case 0x1b4:
    case 0x233:
    case 0x24f:
    case 0x1e8f:
    case 0x1e99:
    case 0x1ef3:
    case 0x1ef5:
    case 0x1ef7:
    case 0x1ef9:
      regmbc('y'); regmbc(0xfd); regmbc(0xff);
      regmbc(0x177); regmbc(0x1b4); regmbc(0x233);
      regmbc(0x24f); regmbc(0x1e8f); regmbc(0x1e99);
      regmbc(0x1ef3); regmbc(0x1ef5); regmbc(0x1ef7);
      regmbc(0x1ef9);
      return;
    case 'z':
    case 0x17a:
    case 0x17c:
    case 0x17e:
    case 0x1b6:
    case 0x1d76:
    case 0x1d8e:
    case 0x1e91:
    case 0x1e93:
    case 0x1e95:
    case 0x2c6c:
      regmbc('z'); regmbc(0x17a); regmbc(0x17c);
      regmbc(0x17e); regmbc(0x1b6); regmbc(0x1d76);
      regmbc(0x1d8e); regmbc(0x1e91); regmbc(0x1e93);
      regmbc(0x1e95); regmbc(0x2c6c);
      return;
    }
  }
  regmbc(c);
}



static uint8_t *regnode(int op)
{
  uint8_t *ret;

  ret = regcode;
  if (ret == ((uint8_t *)-1)) {
    regsize += 3;
  } else {
    *regcode++ = (uint8_t)op;
    *regcode++ = '\000';
    *regcode++ = '\000';
  }
  return ret;
}


static uint8_t *re_put_uint32(uint8_t *p, uint32_t val)
{
  *p++ = (uint8_t)((val >> 24) & 0377);
  *p++ = (uint8_t)((val >> 16) & 0377);
  *p++ = (uint8_t)((val >> 8) & 0377);
  *p++ = (uint8_t)(val & 0377);
  return p;
}




static uint8_t *regnext(uint8_t *p)
  FUNC_ATTR_NONNULL_ALL
{
  int offset;

  if (p == ((uint8_t *)-1) || reg_toolong) {
    return 
# 4064 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
          ((void *)0)
# 4064 "/home/ubuntu/neovim/src/nvim/regexp.c"
              ;
  }

  offset = (((*((p) + 1) & 0377) << 8) + (*((p) + 2) & 0377));
  if (offset == 0) {
    return 
# 4069 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
          ((void *)0)
# 4069 "/home/ubuntu/neovim/src/nvim/regexp.c"
              ;
  }

  if (((int)(*(p))) == 4) {
    return p - offset;
  } else {
    return p + offset;
  }
}


static void regtail(uint8_t *p, const uint8_t *val)
{
  int offset;

  if (p == ((uint8_t *)-1)) {
    return;
  }


  uint8_t *scan = p;
  while (
# 4090 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
        1
# 4090 "/home/ubuntu/neovim/src/nvim/regexp.c"
            ) {
    uint8_t *temp = regnext(scan);
    if (temp == 
# 4092 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
               ((void *)0)
# 4092 "/home/ubuntu/neovim/src/nvim/regexp.c"
                   ) {
      break;
    }
    scan = temp;
  }

  if (((int)(*(scan))) == 4) {
    offset = (int)(scan - val);
  } else {
    offset = (int)(val - scan);
  }



  if (offset > 0xffff) {
    reg_toolong = 
# 4107 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                 1
# 4107 "/home/ubuntu/neovim/src/nvim/regexp.c"
                     ;
  } else {
    *(scan + 1) = (uint8_t)(((unsigned)offset >> 8) & 0377);
    *(scan + 2) = (uint8_t)(offset & 0377);
  }
}


static void regoptail(uint8_t *p, uint8_t *val)
{

  if (p == 
# 4118 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
          ((void *)0) 
# 4118 "/home/ubuntu/neovim/src/nvim/regexp.c"
               || p == ((uint8_t *)-1)
      || (((int)(*(p))) != 3
          && (((int)(*(p))) < 140 || ((int)(*(p))) > 140 + 9))) {
    return;
  }
  regtail(((p) + 3), val);
}




static void reginsert(int op, uint8_t *opnd)
{
  uint8_t *src;
  uint8_t *dst;
  uint8_t *place;

  if (regcode == ((uint8_t *)-1)) {
    regsize += 3;
    return;
  }
  src = regcode;
  regcode += 3;
  dst = regcode;
  while (src > opnd) {
    *--dst = *--src;
  }

  place = opnd;
  *place++ = (uint8_t)op;
  *place++ = '\000';
  *place = '\000';
}



static void reginsert_nr(int op, int64_t val, uint8_t *opnd)
{
  uint8_t *src;
  uint8_t *dst;
  uint8_t *place;

  if (regcode == ((uint8_t *)-1)) {
    regsize += 7;
    return;
  }
  src = regcode;
  regcode += 7;
  dst = regcode;
  while (src > opnd) {
    *--dst = *--src;
  }

  place = opnd;
  *place++ = (uint8_t)op;
  *place++ = '\000';
  *place++ = '\000';
  
# 4175 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
 ((void) sizeof ((
# 4175 "/home/ubuntu/neovim/src/nvim/regexp.c"
 val >= 0 && (uintmax_t)val <= 
# 4175 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
 (4294967295U)) ? 1 : 0), __extension__ ({ if (
# 4175 "/home/ubuntu/neovim/src/nvim/regexp.c"
 val >= 0 && (uintmax_t)val <= 
# 4175 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
 (4294967295U)) ; else __assert_fail (
# 4175 "/home/ubuntu/neovim/src/nvim/regexp.c"
 "val >= 0 && (uintmax_t)val <= UINT32_MAX"
# 4175 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
 , "/home/ubuntu/neovim/src/nvim/regexp.c", 4175, __extension__ __PRETTY_FUNCTION__); }))
# 4175 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                                 ;
  re_put_uint32(place, (uint32_t)val);
}





static void reginsert_limits(int op, int64_t minval, int64_t maxval, uint8_t *opnd)
{
  uint8_t *src;
  uint8_t *dst;
  uint8_t *place;

  if (regcode == ((uint8_t *)-1)) {
    regsize += 11;
    return;
  }
  src = regcode;
  regcode += 11;
  dst = regcode;
  while (src > opnd) {
    *--dst = *--src;
  }

  place = opnd;
  *place++ = (uint8_t)op;
  *place++ = '\000';
  *place++ = '\000';
  
# 4204 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
 ((void) sizeof ((
# 4204 "/home/ubuntu/neovim/src/nvim/regexp.c"
 minval >= 0 && (uintmax_t)minval <= 
# 4204 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
 (4294967295U)) ? 1 : 0), __extension__ ({ if (
# 4204 "/home/ubuntu/neovim/src/nvim/regexp.c"
 minval >= 0 && (uintmax_t)minval <= 
# 4204 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
 (4294967295U)) ; else __assert_fail (
# 4204 "/home/ubuntu/neovim/src/nvim/regexp.c"
 "minval >= 0 && (uintmax_t)minval <= UINT32_MAX"
# 4204 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
 , "/home/ubuntu/neovim/src/nvim/regexp.c", 4204, __extension__ __PRETTY_FUNCTION__); }))
# 4204 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                                       ;
  place = re_put_uint32(place, (uint32_t)minval);
  
# 4206 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
 ((void) sizeof ((
# 4206 "/home/ubuntu/neovim/src/nvim/regexp.c"
 maxval >= 0 && (uintmax_t)maxval <= 
# 4206 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
 (4294967295U)) ? 1 : 0), __extension__ ({ if (
# 4206 "/home/ubuntu/neovim/src/nvim/regexp.c"
 maxval >= 0 && (uintmax_t)maxval <= 
# 4206 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
 (4294967295U)) ; else __assert_fail (
# 4206 "/home/ubuntu/neovim/src/nvim/regexp.c"
 "maxval >= 0 && (uintmax_t)maxval <= UINT32_MAX"
# 4206 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
 , "/home/ubuntu/neovim/src/nvim/regexp.c", 4206, __extension__ __PRETTY_FUNCTION__); }))
# 4206 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                                       ;
  place = re_put_uint32(place, (uint32_t)maxval);
  regtail(opnd, place);
}





static int seen_endbrace(int refnum)
{
  if (!had_endbrace[refnum]) {
    uint8_t *p;



    for (p = (uint8_t *)regparse; *p != '\000'; p++) {
      if (p[0] == '@' && p[1] == '<' && (p[2] == '!' || p[2] == '=')) {
        break;
      }
    }

    if (*p == '\000') {
      emsg(gettext("E65: Illegal back reference"));
      rc_did_emsg = 
# 4230 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                   1
# 4230 "/home/ubuntu/neovim/src/nvim/regexp.c"
                       ;
      return 
# 4231 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
            0
# 4231 "/home/ubuntu/neovim/src/nvim/regexp.c"
                 ;
    }
  }
  return 
# 4234 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
        1
# 4234 "/home/ubuntu/neovim/src/nvim/regexp.c"
            ;
}






static uint8_t *regatom(int *flagp)
{
  uint8_t *ret;
  int flags;
  int c;
  uint8_t *p;
  int extra = 0;
  int save_prev_at_start = prev_at_start;

  *flagp = 0;

  c = getchr();
  switch (c) {
  case ((int)('^') - 256):
    ret = regnode(1);
    break;

  case ((int)('$') - 256):
    ret = regnode(2);
    had_eol = 
# 4261 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
             1
# 4261 "/home/ubuntu/neovim/src/nvim/regexp.c"
                 ;
    break;

  case ((int)('<') - 256):
    ret = regnode(15);
    break;

  case ((int)('>') - 256):
    ret = regnode(16);
    break;

  case ((int)('_') - 256):
    c = no_Magic(getchr());
    if (c == '^') {
      ret = regnode(1);
      break;
    }
    if (c == '$') {
      ret = regnode(2);
      had_eol = 
# 4280 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
               1
# 4280 "/home/ubuntu/neovim/src/nvim/regexp.c"
                   ;
      break;
    }

    extra = 30;
    *flagp |= 0x8;


    if (c == '[') {
      goto collection;
    }


    {} __attribute__((fallthrough));


  case ((int)('.') - 256):
  case ((int)('i') - 256):
  case ((int)('I') - 256):
  case ((int)('k') - 256):
  case ((int)('K') - 256):
  case ((int)('f') - 256):
  case ((int)('F') - 256):
  case ((int)('p') - 256):
  case ((int)('P') - 256):
  case ((int)('s') - 256):
  case ((int)('S') - 256):
  case ((int)('d') - 256):
  case ((int)('D') - 256):
  case ((int)('x') - 256):
  case ((int)('X') - 256):
  case ((int)('o') - 256):
  case ((int)('O') - 256):
  case ((int)('w') - 256):
  case ((int)('W') - 256):
  case ((int)('h') - 256):
  case ((int)('H') - 256):
  case ((int)('a') - 256):
  case ((int)('A') - 256):
  case ((int)('l') - 256):
  case ((int)('L') - 256):
  case ((int)('u') - 256):
  case ((int)('U') - 256):
    p = (uint8_t *)vim_strchr((char *)classchars, no_Magic(c));
    if (p == 
# 4324 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
            ((void *)0)
# 4324 "/home/ubuntu/neovim/src/nvim/regexp.c"
                ) {
      return (emsg(gettext(e_invalid_use_of_underscore)), rc_did_emsg = 
# 4325 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
     1
# 4325 "/home/ubuntu/neovim/src/nvim/regexp.c"
     , (void *)
# 4325 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
     ((void *)0)
# 4325 "/home/ubuntu/neovim/src/nvim/regexp.c"
     );
    }


    if (c == ((int)('.') - 256) && utf_iscomposing(peekchr())) {
      c = getchr();
      goto do_multibyte;
    }
    ret = regnode(classcodes[p - classchars] + extra);
    *flagp |= 0x1 | 0x2;
    break;

  case ((int)('n') - 256):
    if (reg_string) {

      ret = regnode(5);
      regc('\012');
      regc('\000');
      *flagp |= 0x1 | 0x2;
    } else {

      ret = regnode(18);
      *flagp |= 0x1 | 0x8;
    }
    break;

  case ((int)('(') - 256):
    if (one_exactly) {
      return (semsg((gettext(e_invalid_item_in_str_brackets)), (reg_magic == MAGIC_ALL) ? "" : "\\"), rc_did_emsg = 
# 4353 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
     1
# 4353 "/home/ubuntu/neovim/src/nvim/regexp.c"
     , (void *)
# 4353 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
     ((void *)0)
# 4353 "/home/ubuntu/neovim/src/nvim/regexp.c"
     );
    }
    ret = reg(1, &flags);
    if (ret == 
# 4356 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
              ((void *)0)
# 4356 "/home/ubuntu/neovim/src/nvim/regexp.c"
                  ) {
      return 
# 4357 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
            ((void *)0)
# 4357 "/home/ubuntu/neovim/src/nvim/regexp.c"
                ;
    }
    *flagp |= flags & (0x1 | 0x4 | 0x8 | 0x10);
    break;

  case '\000':
  case ((int)('|') - 256):
  case ((int)('&') - 256):
  case ((int)(')') - 256):
    if (one_exactly) {
      return (semsg((gettext(e_invalid_item_in_str_brackets)), (reg_magic == MAGIC_ALL) ? "" : "\\"), rc_did_emsg = 
# 4367 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
     1
# 4367 "/home/ubuntu/neovim/src/nvim/regexp.c"
     , (void *)
# 4367 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
     ((void *)0)
# 4367 "/home/ubuntu/neovim/src/nvim/regexp.c"
     );
    }
    return (iemsg(gettext(e_internal)), rc_did_emsg = 
# 4369 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
   1
# 4369 "/home/ubuntu/neovim/src/nvim/regexp.c"
   , (void *)
# 4369 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
   ((void *)0)
# 4369 "/home/ubuntu/neovim/src/nvim/regexp.c"
   );


  case ((int)('=') - 256):
  case ((int)('?') - 256):
  case ((int)('+') - 256):
  case ((int)('@') - 256):
  case ((int)('{') - 256):
  case ((int)('*') - 256):
    c = no_Magic(c);
    return (semsg((gettext("E64: %s%c follows nothing")), ((c == '*' ? reg_magic >= MAGIC_ON : reg_magic == MAGIC_ALL)) ? "" : "\\", (c)), rc_did_emsg = 
# 4379 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
   1
# 4379 "/home/ubuntu/neovim/src/nvim/regexp.c"
   , (void *)
# 4379 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
   ((void *)0)
# 4379 "/home/ubuntu/neovim/src/nvim/regexp.c"
   )
                                                                                  ;


  case ((int)('~') - 256):
    if (reg_prev_sub != 
# 4384 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                       ((void *)0)
# 4384 "/home/ubuntu/neovim/src/nvim/regexp.c"
                           ) {
      uint8_t *lp;

      ret = regnode(5);
      lp = (uint8_t *)reg_prev_sub;
      while (*lp != '\000') {
        regc(*lp++);
      }
      regc('\000');
      if (*reg_prev_sub != '\000') {
        *flagp |= 0x1;
        if ((lp - (uint8_t *)reg_prev_sub) == 1) {
          *flagp |= 0x2;
        }
      }
    } else {
      return (emsg(gettext(e_nopresub)), rc_did_emsg = 
# 4400 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
     1
# 4400 "/home/ubuntu/neovim/src/nvim/regexp.c"
     , (void *)
# 4400 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
     ((void *)0)
# 4400 "/home/ubuntu/neovim/src/nvim/regexp.c"
     );
    }
    break;

  case ((int)('1') - 256):
  case ((int)('2') - 256):
  case ((int)('3') - 256):
  case ((int)('4') - 256):
  case ((int)('5') - 256):
  case ((int)('6') - 256):
  case ((int)('7') - 256):
  case ((int)('8') - 256):
  case ((int)('9') - 256): {
    int refnum;

    refnum = c - ((int)('0') - 256);
    if (!seen_endbrace(refnum)) {
      return 
# 4417 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
            ((void *)0)
# 4417 "/home/ubuntu/neovim/src/nvim/regexp.c"
                ;
    }
    ret = regnode(100 + refnum);
  }
  break;

  case ((int)('z') - 256):
    c = no_Magic(getchr());
    switch (c) {
    case '(':
      if ((reg_do_extmatch & 1) == 0) {
        return (emsg(gettext(e_z_not_allowed)), rc_did_emsg = 
# 4428 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
       1
# 4428 "/home/ubuntu/neovim/src/nvim/regexp.c"
       , (void *)
# 4428 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
       ((void *)0)
# 4428 "/home/ubuntu/neovim/src/nvim/regexp.c"
       );
      }
      if (one_exactly) {
        return (semsg((gettext(e_invalid_item_in_str_brackets)), (reg_magic == MAGIC_ALL) ? "" : "\\"), rc_did_emsg = 
# 4431 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
       1
# 4431 "/home/ubuntu/neovim/src/nvim/regexp.c"
       , (void *)
# 4431 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
       ((void *)0)
# 4431 "/home/ubuntu/neovim/src/nvim/regexp.c"
       );
      }
      ret = reg(2, &flags);
      if (ret == 
# 4434 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                ((void *)0)
# 4434 "/home/ubuntu/neovim/src/nvim/regexp.c"
                    ) {
        return 
# 4435 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
              ((void *)0)
# 4435 "/home/ubuntu/neovim/src/nvim/regexp.c"
                  ;
      }
      *flagp |= flags & (0x1|0x4|0x8|0x10);
      re_has_z = 1;
      break;

    case '1':
    case '2':
    case '3':
    case '4':
    case '5':
    case '6':
    case '7':
    case '8':
    case '9':
      if ((reg_do_extmatch & 2) == 0) {
        return (emsg(gettext(e_z1_not_allowed)), rc_did_emsg = 
# 4451 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
       1
# 4451 "/home/ubuntu/neovim/src/nvim/regexp.c"
       , (void *)
# 4451 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
       ((void *)0)
# 4451 "/home/ubuntu/neovim/src/nvim/regexp.c"
       );
      }
      ret = regnode(130 + c - '0');
      re_has_z = 2;
      break;

    case 's':
      ret = regnode(80 + 0);
      if (!re_mult_next("\\zs")) {
        return 
# 4460 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
              ((void *)0)
# 4460 "/home/ubuntu/neovim/src/nvim/regexp.c"
                  ;
      }
      break;

    case 'e':
      ret = regnode(90 + 0);
      if (!re_mult_next("\\ze")) {
        return 
# 4467 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
              ((void *)0)
# 4467 "/home/ubuntu/neovim/src/nvim/regexp.c"
                  ;
      }
      break;

    default:
      return (emsg(gettext("E68: Invalid character after \\z")), rc_did_emsg = 
# 4472 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
     1
# 4472 "/home/ubuntu/neovim/src/nvim/regexp.c"
     , (void *)
# 4472 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
     ((void *)0)
# 4472 "/home/ubuntu/neovim/src/nvim/regexp.c"
     );
    }
    break;

  case ((int)('%') - 256):
    c = no_Magic(getchr());
    switch (c) {

    case '(':
      if (one_exactly) {
        return (semsg((gettext(e_invalid_item_in_str_brackets)), (reg_magic == MAGIC_ALL) ? "" : "\\"), rc_did_emsg = 
# 4482 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
       1
# 4482 "/home/ubuntu/neovim/src/nvim/regexp.c"
       , (void *)
# 4482 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
       ((void *)0)
# 4482 "/home/ubuntu/neovim/src/nvim/regexp.c"
       );
      }
      ret = reg(3, &flags);
      if (ret == 
# 4485 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                ((void *)0)
# 4485 "/home/ubuntu/neovim/src/nvim/regexp.c"
                    ) {
        return 
# 4486 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
              ((void *)0)
# 4486 "/home/ubuntu/neovim/src/nvim/regexp.c"
                  ;
      }
      *flagp |= flags & (0x1 | 0x4 | 0x8 | 0x10);
      break;



    case '^':
      ret = regnode(201);
      break;

    case '$':
      ret = regnode(202);
      break;

    case '#':
      if (regparse[0] == '=' && regparse[1] >= 48 && regparse[1] <= 50) {

        semsg(gettext(e_atom_engine_must_be_at_start_of_pattern), regparse[1]);
        return 0;
      }
      ret = regnode(203);
      break;

    case 'V':
      ret = regnode(208);
      break;

    case 'C':
      ret = regnode(209);
      break;



    case '[':
      if (one_exactly) {
        return (semsg((gettext(e_invalid_item_in_str_brackets)), (reg_magic == MAGIC_ALL) ? "" : "\\"), rc_did_emsg = 
# 4522 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
       1
# 4522 "/home/ubuntu/neovim/src/nvim/regexp.c"
       , (void *)
# 4522 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
       ((void *)0)
# 4522 "/home/ubuntu/neovim/src/nvim/regexp.c"
       );
      }
      {
        uint8_t *lastbranch;
        uint8_t *lastnode = 
# 4526 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                           ((void *)0)
# 4526 "/home/ubuntu/neovim/src/nvim/regexp.c"
                               ;
        uint8_t *br;

        ret = 
# 4529 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
             ((void *)0)
# 4529 "/home/ubuntu/neovim/src/nvim/regexp.c"
                 ;
        while ((c = getchr()) != ']') {
          if (c == '\000') {
            return (semsg((gettext(e_missing_sb)), (reg_magic == MAGIC_ALL) ? "" : "\\"), rc_did_emsg = 
# 4532 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
           1
# 4532 "/home/ubuntu/neovim/src/nvim/regexp.c"
           , (void *)
# 4532 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
           ((void *)0)
# 4532 "/home/ubuntu/neovim/src/nvim/regexp.c"
           )
                                                  ;
          }
          br = regnode(3);
          if (ret == 
# 4536 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                    ((void *)0)
# 4536 "/home/ubuntu/neovim/src/nvim/regexp.c"
                        ) {
            ret = br;
          } else {
            regtail(lastnode, br);
            if (reg_toolong) {
              return 
# 4541 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                    ((void *)0)
# 4541 "/home/ubuntu/neovim/src/nvim/regexp.c"
                        ;
            }
          }

          ungetchr();
          one_exactly = 
# 4546 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                       1
# 4546 "/home/ubuntu/neovim/src/nvim/regexp.c"
                           ;
          lastnode = regatom(flagp);
          one_exactly = 
# 4548 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                       0
# 4548 "/home/ubuntu/neovim/src/nvim/regexp.c"
                            ;
          if (lastnode == 
# 4549 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                         ((void *)0)
# 4549 "/home/ubuntu/neovim/src/nvim/regexp.c"
                             ) {
            return 
# 4550 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                  ((void *)0)
# 4550 "/home/ubuntu/neovim/src/nvim/regexp.c"
                      ;
          }
        }
        if (ret == 
# 4553 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                  ((void *)0)
# 4553 "/home/ubuntu/neovim/src/nvim/regexp.c"
                      ) {
          return (semsg((gettext(e_empty_sb)), (reg_magic == MAGIC_ALL) ? "" : "\\"), rc_did_emsg = 
# 4554 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
         1
# 4554 "/home/ubuntu/neovim/src/nvim/regexp.c"
         , (void *)
# 4554 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
         ((void *)0)
# 4554 "/home/ubuntu/neovim/src/nvim/regexp.c"
         )
                                                ;
        }
        lastbranch = regnode(3);
        br = regnode(6);
        if (ret != ((uint8_t *)-1)) {
          regtail(lastnode, br);
          regtail(lastbranch, br);


          for (br = ret; br != lastnode;) {
            if (((int)(*(br))) == 3) {
              regtail(br, lastbranch);
              if (reg_toolong) {
                return 
# 4568 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                      ((void *)0)
# 4568 "/home/ubuntu/neovim/src/nvim/regexp.c"
                          ;
              }
              br = ((br) + 3);
            } else {
              br = regnext(br);
            }
          }
        }
        *flagp &= ~(0x1 | 0x2);
        break;
      }

    case 'd':
    case 'o':
    case 'x':
    case 'u':
    case 'U':
    {
      int64_t i;

      switch (c) {
      case 'd':
        i = getdecchrs(); break;
      case 'o':
        i = getoctchrs(); break;
      case 'x':
        i = gethexchrs(2); break;
      case 'u':
        i = gethexchrs(4); break;
      case 'U':
        i = gethexchrs(8); break;
      default:
        i = -1; break;
      }

      if (i < 0 || i > 0x7fffffff) {
        return (semsg((gettext("E678: Invalid character after %s%%[dxouU]")), (reg_magic == MAGIC_ALL) ? "" : "\\"), rc_did_emsg = 
# 4604 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
       1
# 4604 "/home/ubuntu/neovim/src/nvim/regexp.c"
       , (void *)
# 4604 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
       ((void *)0)
# 4604 "/home/ubuntu/neovim/src/nvim/regexp.c"
       )
                                              ;
      }
      if (use_multibytecode((int)i)) {
        ret = regnode(200);
      } else {
        ret = regnode(5);
      }
      if (i == 0) {
        regc(0x0a);
      } else {
        regmbc((int)i);
      }
      regc('\000');
      *flagp |= 0x1;
      break;
    }

    default:
      if (ascii_isdigit(c) || c == '<' || c == '>' || c == '\'' || c == '.') {
        uint32_t n = 0;
        int cmp;
        
# 4626 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
       _Bool 
# 4626 "/home/ubuntu/neovim/src/nvim/regexp.c"
            cur = 
# 4626 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                  0
# 4626 "/home/ubuntu/neovim/src/nvim/regexp.c"
                       ;
        
# 4627 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
       _Bool 
# 4627 "/home/ubuntu/neovim/src/nvim/regexp.c"
            got_digit = 
# 4627 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                        0
# 4627 "/home/ubuntu/neovim/src/nvim/regexp.c"
                             ;

        cmp = c;
        if (cmp == '<' || cmp == '>') {
          c = getchr();
        }
        if (no_Magic(c) == '.') {
          cur = 
# 4634 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
               1
# 4634 "/home/ubuntu/neovim/src/nvim/regexp.c"
                   ;
          c = getchr();
        }
        while (ascii_isdigit(c)) {
          got_digit = 
# 4638 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                     1
# 4638 "/home/ubuntu/neovim/src/nvim/regexp.c"
                         ;
          n = n * 10 + (uint32_t)(c - '0');
          c = getchr();
        }
        if (no_Magic(c) == '\'' && n == 0) {

          c = getchr();
          ret = regnode(207);
          if (ret == ((uint8_t *)-1)) {
            regsize += 2;
          } else {
            *regcode++ = (uint8_t)c;
            *regcode++ = (uint8_t)cmp;
          }
          break;
        } else if ((c == 'l' || c == 'c' || c == 'v') && (cur || got_digit)) {
          if (cur && n) {
            semsg(gettext(e_regexp_number_after_dot_pos_search_chr), no_Magic(c));
            rc_did_emsg = 
# 4656 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                         1
# 4656 "/home/ubuntu/neovim/src/nvim/regexp.c"
                             ;
            return 
# 4657 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                  ((void *)0)
# 4657 "/home/ubuntu/neovim/src/nvim/regexp.c"
                      ;
          }
          if (c == 'l') {
            if (cur) {
              n = (uint32_t)curwin->w_cursor.lnum;
            }
            ret = regnode(204);
            if (save_prev_at_start) {
              at_start = 
# 4665 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                        1
# 4665 "/home/ubuntu/neovim/src/nvim/regexp.c"
                            ;
            }
          } else if (c == 'c') {
            if (cur) {
              n = (uint32_t)curwin->w_cursor.col;
              n++;
            }
            ret = regnode(205);
          } else {
            if (cur) {
              colnr_T vcol = 0;
              getvvcol(curwin, &curwin->w_cursor, 
# 4676 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                                 ((void *)0)
# 4676 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                                     , 
# 4676 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                                       ((void *)0)
# 4676 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                                           , &vcol);
              n = (uint32_t)(++vcol);
            }
            ret = regnode(206);
          }
          if (ret == ((uint8_t *)-1)) {
            regsize += 5;
          } else {


            regcode = re_put_uint32(regcode, n);
            *regcode++ = (uint8_t)cmp;
          }
          break;
        }
      }

      return (semsg((gettext("E71: Invalid character after %s%%")), (reg_magic == MAGIC_ALL) ? "" : "\\"), rc_did_emsg = 
# 4693 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
     1
# 4693 "/home/ubuntu/neovim/src/nvim/regexp.c"
     , (void *)
# 4693 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
     ((void *)0)
# 4693 "/home/ubuntu/neovim/src/nvim/regexp.c"
     )
                                            ;
    }
    break;

  case ((int)('[') - 256):
collection:
    {
      uint8_t *lp;



      lp = (uint8_t *)skip_anyof(regparse);
      if (*lp == ']') {
        int startc = -1;
        int endc;



        if (*regparse == '^') {
          ret = regnode(22 + extra);
          regparse++;
        } else {
          ret = regnode(21 + extra);
        }


        if (*regparse == ']' || *regparse == '-') {
          startc = (uint8_t)(*regparse);
          regc(*regparse++);
        }

        while (*regparse != '\000' && *regparse != ']') {
          if (*regparse == '-') {
            regparse++;


            if (*regparse == ']' || *regparse == '\000'
                || startc == -1
                || (regparse[0] == '\\' && regparse[1] == 'n')) {
              regc('-');
              startc = '-';
            } else {

              endc = 0;
              if (*regparse == '[') {
                endc = get_coll_element(&regparse);
              }
              if (endc == 0) {
                endc = mb_ptr2char_adv((const char **)&regparse);
              }


              if (endc == '\\' && !reg_cpo_lit) {
                endc = coll_get_char();
              }

              if (startc > endc) {
                return (emsg(gettext(e_reverse_range)), rc_did_emsg = 
# 4751 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
               1
# 4751 "/home/ubuntu/neovim/src/nvim/regexp.c"
               , (void *)
# 4751 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
               ((void *)0)
# 4751 "/home/ubuntu/neovim/src/nvim/regexp.c"
               );
              }
              if (utf_char2len(startc) > 1
                  || utf_char2len(endc) > 1) {

                if (endc > startc + 256) {
                  return (emsg(gettext(e_large_class)), rc_did_emsg = 
# 4757 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                 1
# 4757 "/home/ubuntu/neovim/src/nvim/regexp.c"
                 , (void *)
# 4757 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                 ((void *)0)
# 4757 "/home/ubuntu/neovim/src/nvim/regexp.c"
                 );
                }
                while (++startc <= endc) {
                  regmbc(startc);
                }
              } else {
                while (++startc <= endc) {
                  regc(startc);
                }
              }
              startc = -1;
            }
          }



          else if (*regparse == '\\'
                   && (vim_strchr(REGEXP_INRANGE, (uint8_t)regparse[1]) != 
# 4774 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                                                          ((void *)0)
                       
# 4775 "/home/ubuntu/neovim/src/nvim/regexp.c"
                      || (!reg_cpo_lit
                           && vim_strchr(REGEXP_ABBR,
                                         (uint8_t)regparse[1]) != 
# 4777 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                                                 ((void *)0)
# 4777 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                                                     ))) {
            regparse++;
            if (*regparse == 'n') {

              if (ret != ((uint8_t *)-1)) {


                if (*ret == 21) {
                  *ret = 21 + 30;
                  *flagp |= 0x8;
                }

              }
              regparse++;
              startc = -1;
            } else if (*regparse == 'd'
                       || *regparse == 'o'
                       || *regparse == 'x'
                       || *regparse == 'u'
                       || *regparse == 'U') {
              startc = coll_get_char();
              if (startc == 0) {
                regc(0x0a);
              } else {
                regmbc(startc);
              }
            } else {
              startc = backslash_trans(*regparse++);
              regc(startc);
            }
          } else if (*regparse == '[') {
            int c_class;
            int cu;

            c_class = get_char_class(&regparse);
            startc = -1;

            switch (c_class) {
            case CLASS_NONE:
              c_class = get_equi_class(&regparse);
              if (c_class != 0) {

                reg_equi_class(c_class);
              } else if ((c_class = get_coll_element(&regparse)) != 0) {

                regmbc(c_class);
              } else {

                startc = (uint8_t)(*regparse++);
                regc(startc);
              }
              break;
            case CLASS_ALNUM:
              for (cu = 1; cu < 128; cu++) {
                if (
# 4831 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                   ((*__ctype_b_loc ())[(int) ((
# 4831 "/home/ubuntu/neovim/src/nvim/regexp.c"
                   cu
# 4831 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                   ))] & (unsigned short int) _ISalnum)
# 4831 "/home/ubuntu/neovim/src/nvim/regexp.c"
                              ) {
                  regmbc(cu);
                }
              }
              break;
            case CLASS_ALPHA:
              for (cu = 1; cu < 128; cu++) {
                if (
# 4838 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                   ((*__ctype_b_loc ())[(int) ((
# 4838 "/home/ubuntu/neovim/src/nvim/regexp.c"
                   cu
# 4838 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                   ))] & (unsigned short int) _ISalpha)
# 4838 "/home/ubuntu/neovim/src/nvim/regexp.c"
                              ) {
                  regmbc(cu);
                }
              }
              break;
            case CLASS_BLANK:
              regc(' ');
              regc('\t');
              break;
            case CLASS_CNTRL:
              for (cu = 1; cu <= 127; cu++) {
                if (
# 4849 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                   ((*__ctype_b_loc ())[(int) ((
# 4849 "/home/ubuntu/neovim/src/nvim/regexp.c"
                   cu
# 4849 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                   ))] & (unsigned short int) _IScntrl)
# 4849 "/home/ubuntu/neovim/src/nvim/regexp.c"
                              ) {
                  regmbc(cu);
                }
              }
              break;
            case CLASS_DIGIT:
              for (cu = 1; cu <= 127; cu++) {
                if (ascii_isdigit(cu)) {
                  regmbc(cu);
                }
              }
              break;
            case CLASS_GRAPH:
              for (cu = 1; cu <= 127; cu++) {
                if (
# 4863 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                   ((*__ctype_b_loc ())[(int) ((
# 4863 "/home/ubuntu/neovim/src/nvim/regexp.c"
                   cu
# 4863 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                   ))] & (unsigned short int) _ISgraph)
# 4863 "/home/ubuntu/neovim/src/nvim/regexp.c"
                              ) {
                  regmbc(cu);
                }
              }
              break;
            case CLASS_LOWER:
              for (cu = 1; cu <= 255; cu++) {
                if (mb_islower(cu) && cu != 170 && cu != 186) {
                  regmbc(cu);
                }
              }
              break;
            case CLASS_PRINT:
              for (cu = 1; cu <= 255; cu++) {
                if (vim_isprintc(cu)) {
                  regmbc(cu);
                }
              }
              break;
            case CLASS_PUNCT:
              for (cu = 1; cu < 128; cu++) {
                if (
# 4884 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                   ((*__ctype_b_loc ())[(int) ((
# 4884 "/home/ubuntu/neovim/src/nvim/regexp.c"
                   cu
# 4884 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                   ))] & (unsigned short int) _ISpunct)
# 4884 "/home/ubuntu/neovim/src/nvim/regexp.c"
                              ) {
                  regmbc(cu);
                }
              }
              break;
            case CLASS_SPACE:
              for (cu = 9; cu <= 13; cu++) {
                regc(cu);
              }
              regc(' ');
              break;
            case CLASS_UPPER:
              for (cu = 1; cu <= 255; cu++) {
                if (mb_isupper(cu)) {
                  regmbc(cu);
                }
              }
              break;
            case CLASS_XDIGIT:
              for (cu = 1; cu <= 255; cu++) {
                if (ascii_isxdigit(cu)) {
                  regmbc(cu);
                }
              }
              break;
            case CLASS_TAB:
              regc('\t');
              break;
            case CLASS_RETURN:
              regc('\r');
              break;
            case CLASS_BACKSPACE:
              regc('\b');
              break;
            case CLASS_ESCAPE:
              regc('\033');
              break;
            case CLASS_IDENT:
              for (cu = 1; cu <= 255; cu++) {
                if (vim_isIDc(cu)) {
                  regmbc(cu);
                }
              }
              break;
            case CLASS_KEYWORD:
              for (cu = 1; cu <= 255; cu++) {
                if (reg_iswordc(cu)) {
                  regmbc(cu);
                }
              }
              break;
            case CLASS_FNAME:
              for (cu = 1; cu <= 255; cu++) {
                if (vim_isfilec(cu)) {
                  regmbc(cu);
                }
              }
              break;
            }
          } else {


            startc = utf_ptr2char(regparse);
            int len = utfc_ptr2len(regparse);
            if (utf_char2len(startc) != len) {

              startc = -1;
            }
            while (--len >= 0) {
              regc(*regparse++);
            }
          }
        }
        regc('\000');
        prevchr_len = 1;
        if (*regparse != ']') {
          return (emsg(gettext(e_toomsbra)), rc_did_emsg = 
# 4960 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
         1
# 4960 "/home/ubuntu/neovim/src/nvim/regexp.c"
         , (void *)
# 4960 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
         ((void *)0)
# 4960 "/home/ubuntu/neovim/src/nvim/regexp.c"
         );
        }
        skipchr();
        *flagp |= 0x1 | 0x2;
        break;
      } else if (reg_strict) {
        return (semsg((gettext(e_missingbracket)), (reg_magic > MAGIC_OFF) ? "" : "\\"), rc_did_emsg = 
# 4966 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
       1
# 4966 "/home/ubuntu/neovim/src/nvim/regexp.c"
       , (void *)
# 4966 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
       ((void *)0)
# 4966 "/home/ubuntu/neovim/src/nvim/regexp.c"
       );
      }
    }
    {} __attribute__((fallthrough));

  default: {
    int len;



    if (use_multibytecode(c)) {
do_multibyte:
      ret = regnode(200);
      regmbc(c);
      *flagp |= 0x1 | 0x2;
      break;
    }

    ret = regnode(5);
# 4993 "/home/ubuntu/neovim/src/nvim/regexp.c"
    for (len = 0; c != '\000' && (len == 0
                               || (re_multi_type(peekchr()) == 0
                                   && !one_exactly
                                   && !((c) < 0))); len++) {
      c = no_Magic(c);
      {
        regmbc(c);
        {
          int l;


          while (
# 5004 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                1
# 5004 "/home/ubuntu/neovim/src/nvim/regexp.c"
                    ) {
            l = utf_ptr2len(regparse);
            if (!utf_composinglike(regparse, regparse + l)) {
              break;
            }
            regmbc(utf_ptr2char(regparse));
            skipchr();
          }
        }
      }
      c = getchr();
    }
    ungetchr();

    regc('\000');
    *flagp |= 0x1;
    if (len == 1) {
      *flagp |= 0x2;
    }
  }
  break;
  }

  return ret;
}
# 5037 "/home/ubuntu/neovim/src/nvim/regexp.c"
static uint8_t *regpiece(int *flagp)
{
  uint8_t *ret;
  int op;
  uint8_t *next;
  int flags;
  int minval;
  int maxval;

  ret = regatom(&flags);
  if (ret == 
# 5047 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
            ((void *)0)
# 5047 "/home/ubuntu/neovim/src/nvim/regexp.c"
                ) {
    return 
# 5048 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
          ((void *)0)
# 5048 "/home/ubuntu/neovim/src/nvim/regexp.c"
              ;
  }

  op = peekchr();
  if (re_multi_type(op) == 0) {
    *flagp = flags;
    return ret;
  }

  *flagp = (0 | 0x4 | (flags & (0x8 | 0x10)));

  skipchr();
  switch (op) {
  case ((int)('*') - 256):
    if (flags & 0x2) {
      reginsert(7, ret);
    } else {

      reginsert(3, ret);
      regoptail(ret, regnode(4));
      regoptail(ret, ret);
      regtail(ret, regnode(3));
      regtail(ret, regnode(6));
    }
    break;

  case ((int)('+') - 256):
    if (flags & 0x2) {
      reginsert(8, ret);
    } else {

      next = regnode(3);
      regtail(ret, next);
      regtail(regnode(4), ret);
      regtail(next, regnode(3));
      regtail(ret, regnode(6));
    }
    *flagp = (0 | 0x1 | (flags & (0x8 | 0x10)));
    break;

  case ((int)('@') - 256): {
    int lop = 0;
    int64_t nr = getdecchrs();

    switch (no_Magic(getchr())) {
    case '=':
      lop = 9; break;
    case '!':
      lop = 10; break;
    case '>':
      lop = 13; break;
    case '<':
      switch (no_Magic(getchr())) {
      case '=':
        lop = 11; break;
      case '!':
        lop = 12; break;
      }
    }
    if (lop == 0) {
      return (semsg((gettext(e_invalid_character_after_str_at)), (reg_magic == MAGIC_ALL) ? "" : "\\"), rc_did_emsg = 
# 5108 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
     1
# 5108 "/home/ubuntu/neovim/src/nvim/regexp.c"
     , (void *)
# 5108 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
     ((void *)0)
# 5108 "/home/ubuntu/neovim/src/nvim/regexp.c"
     )
                                            ;
    }

    if (lop == 11 || lop == 12) {
      regtail(ret, regnode(19));
      *flagp |= 0x10;
    }
    regtail(ret, regnode(0));
    if (lop == 11 || lop == 12) {
      if (nr < 0) {
        nr = 0;
      }
      reginsert_nr(lop, (uint32_t)nr, ret);
    } else {
      reginsert(lop, ret);
    }
    break;
  }

  case ((int)('?') - 256):
  case ((int)('=') - 256):

    reginsert(3, ret);
    regtail(ret, regnode(3));
    next = regnode(6);
    regtail(ret, next);
    regoptail(ret, next);
    break;

  case ((int)('{') - 256):
    if (!read_limits(&minval, &maxval)) {
      return 
# 5140 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
            ((void *)0)
# 5140 "/home/ubuntu/neovim/src/nvim/regexp.c"
                ;
    }
    if (flags & 0x2) {
      reginsert(14, ret);
      reginsert_limits(17, minval, maxval, ret);
    } else {
      if (num_complex_braces >= 10) {
        return (semsg((gettext("E60: Too many complex %s{...}s")), (reg_magic == MAGIC_ALL) ? "" : "\\"), rc_did_emsg = 
# 5147 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
       1
# 5147 "/home/ubuntu/neovim/src/nvim/regexp.c"
       , (void *)
# 5147 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
       ((void *)0)
# 5147 "/home/ubuntu/neovim/src/nvim/regexp.c"
       )
                                              ;
      }
      reginsert(140 + num_complex_braces, ret);
      regoptail(ret, regnode(4));
      regoptail(ret, ret);
      reginsert_limits(17, minval, maxval, ret);
      num_complex_braces++;
    }
    if (minval > 0 && maxval > 0) {
      *flagp = (0x1 | (flags & (0x8 | 0x10)));
    }
    break;
  }
  if (re_multi_type(peekchr()) != 0) {

    if (peekchr() == ((int)('*') - 256)) {
      return (semsg((gettext("E61: Nested %s*")), (reg_magic >= MAGIC_ON) ? "" : "\\"), rc_did_emsg = 
# 5164 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
     1
# 5164 "/home/ubuntu/neovim/src/nvim/regexp.c"
     , (void *)
# 5164 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
     ((void *)0)
# 5164 "/home/ubuntu/neovim/src/nvim/regexp.c"
     );
    }
    return (semsg((gettext("E62: Nested %s%c")), (reg_magic == MAGIC_ALL) ? "" : "\\", (no_Magic(peekchr()))), rc_did_emsg = 
# 5166 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
   1
# 5166 "/home/ubuntu/neovim/src/nvim/regexp.c"
   , (void *)
# 5166 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
   ((void *)0)
# 5166 "/home/ubuntu/neovim/src/nvim/regexp.c"
   );
  }

  return ret;
}



static uint8_t *regconcat(int *flagp)
{
  uint8_t *first = 
# 5176 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                  ((void *)0)
# 5176 "/home/ubuntu/neovim/src/nvim/regexp.c"
                      ;
  uint8_t *chain = 
# 5177 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                  ((void *)0)
# 5177 "/home/ubuntu/neovim/src/nvim/regexp.c"
                      ;
  uint8_t *latest;
  int flags;
  int cont = 
# 5180 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
            1
# 5180 "/home/ubuntu/neovim/src/nvim/regexp.c"
                ;

  *flagp = 0;

  while (cont) {
    switch (peekchr()) {
    case '\000':
    case ((int)('|') - 256):
    case ((int)('&') - 256):
    case ((int)(')') - 256):
      cont = 
# 5190 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
            0
# 5190 "/home/ubuntu/neovim/src/nvim/regexp.c"
                 ;
      break;
    case ((int)('Z') - 256):
      regflags |= 8;
      skipchr_keepstart();
      break;
    case ((int)('c') - 256):
      regflags |= 1;
      skipchr_keepstart();
      break;
    case ((int)('C') - 256):
      regflags |= 2;
      skipchr_keepstart();
      break;
    case ((int)('v') - 256):
      reg_magic = MAGIC_ALL;
      skipchr_keepstart();
      curchr = -1;
      break;
    case ((int)('m') - 256):
      reg_magic = MAGIC_ON;
      skipchr_keepstart();
      curchr = -1;
      break;
    case ((int)('M') - 256):
      reg_magic = MAGIC_OFF;
      skipchr_keepstart();
      curchr = -1;
      break;
    case ((int)('V') - 256):
      reg_magic = MAGIC_NONE;
      skipchr_keepstart();
      curchr = -1;
      break;
    default:
      latest = regpiece(&flags);
      if (latest == 
# 5226 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                   ((void *)0) 
# 5226 "/home/ubuntu/neovim/src/nvim/regexp.c"
                        || reg_toolong) {
        return 
# 5227 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
              ((void *)0)
# 5227 "/home/ubuntu/neovim/src/nvim/regexp.c"
                  ;
      }
      *flagp |= flags & (0x1 | 0x8 | 0x10);
      if (chain == 
# 5230 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                  ((void *)0)
# 5230 "/home/ubuntu/neovim/src/nvim/regexp.c"
                      ) {
        *flagp |= flags & 0x4;
      } else {
        regtail(chain, latest);
      }
      chain = latest;
      if (first == 
# 5236 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                  ((void *)0)
# 5236 "/home/ubuntu/neovim/src/nvim/regexp.c"
                      ) {
        first = latest;
      }
      break;
    }
  }
  if (first == 
# 5242 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
              ((void *)0)
# 5242 "/home/ubuntu/neovim/src/nvim/regexp.c"
                  ) {
    first = regnode(6);
  }
  return first;
}



static uint8_t *regbranch(int *flagp)
{
  uint8_t *ret;
  uint8_t *chain = 
# 5253 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                  ((void *)0)
# 5253 "/home/ubuntu/neovim/src/nvim/regexp.c"
                      ;
  uint8_t *latest;
  int flags;

  *flagp = 0 | 0x8;

  ret = regnode(3);
  while (
# 5260 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
        1
# 5260 "/home/ubuntu/neovim/src/nvim/regexp.c"
            ) {
    latest = regconcat(&flags);
    if (latest == 
# 5262 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                 ((void *)0)
# 5262 "/home/ubuntu/neovim/src/nvim/regexp.c"
                     ) {
      return 
# 5263 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
            ((void *)0)
# 5263 "/home/ubuntu/neovim/src/nvim/regexp.c"
                ;
    }



    *flagp |= flags & (0x1 | 0x4 | 0x10);


    *flagp &= ~0x8 | (flags & 0x8);
    if (chain != 
# 5272 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                ((void *)0)
# 5272 "/home/ubuntu/neovim/src/nvim/regexp.c"
                    ) {
      regtail(chain, latest);
    }
    if (peekchr() != ((int)('&') - 256)) {
      break;
    }
    skipchr();
    regtail(latest, regnode(0));
    if (reg_toolong) {
      break;
    }
    reginsert(9, latest);
    chain = latest;
  }

  return ret;
}
# 5299 "/home/ubuntu/neovim/src/nvim/regexp.c"
static uint8_t *reg(int paren, int *flagp)
{
  uint8_t *ret;
  uint8_t *br;
  uint8_t *ender;
  int parno = 0;
  int flags;

  *flagp = 0x1;

  if (paren == 2) {

    if (regnzpar >= NSUBEXP) {
      return (emsg(gettext("E50: Too many \\z(")), rc_did_emsg = 
# 5312 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
     1
# 5312 "/home/ubuntu/neovim/src/nvim/regexp.c"
     , (void *)
# 5312 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
     ((void *)0)
# 5312 "/home/ubuntu/neovim/src/nvim/regexp.c"
     );
    }
    parno = regnzpar;
    regnzpar++;
    ret = regnode(110 + parno);
  } else if (paren == 1) {

    if (regnpar >= NSUBEXP) {
      return (semsg((gettext("E51: Too many %s(")), (reg_magic == MAGIC_ALL) ? "" : "\\"), rc_did_emsg = 
# 5320 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
     1
# 5320 "/home/ubuntu/neovim/src/nvim/regexp.c"
     , (void *)
# 5320 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
     ((void *)0)
# 5320 "/home/ubuntu/neovim/src/nvim/regexp.c"
     );
    }
    parno = regnpar;
    regnpar++;
    ret = regnode(80 + parno);
  } else if (paren == 3) {

    ret = regnode(150);
  } else {
    ret = 
# 5329 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
         ((void *)0)
# 5329 "/home/ubuntu/neovim/src/nvim/regexp.c"
             ;
  }


  br = regbranch(&flags);
  if (br == 
# 5334 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
           ((void *)0)
# 5334 "/home/ubuntu/neovim/src/nvim/regexp.c"
               ) {
    return 
# 5335 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
          ((void *)0)
# 5335 "/home/ubuntu/neovim/src/nvim/regexp.c"
              ;
  }
  if (ret != 
# 5337 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
            ((void *)0)
# 5337 "/home/ubuntu/neovim/src/nvim/regexp.c"
                ) {
    regtail(ret, br);
  } else {
    ret = br;
  }



  if (!(flags & 0x1)) {
    *flagp &= ~0x1;
  }
  *flagp |= flags & (0x4 | 0x8 | 0x10);
  while (peekchr() == ((int)('|') - 256)) {
    skipchr();
    br = regbranch(&flags);
    if (br == 
# 5352 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
             ((void *)0) 
# 5352 "/home/ubuntu/neovim/src/nvim/regexp.c"
                  || reg_toolong) {
      return 
# 5353 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
            ((void *)0)
# 5353 "/home/ubuntu/neovim/src/nvim/regexp.c"
                ;
    }
    regtail(ret, br);
    if (!(flags & 0x1)) {
      *flagp &= ~0x1;
    }
    *flagp |= flags & (0x4 | 0x8 | 0x10);
  }


  ender = regnode(paren == 2 ? 120 + parno
                                      : paren == 1 ? 90 + parno
                                                           : paren == 3 ? 151 : 0);
  regtail(ret, ender);


  for (br = ret; br != 
# 5369 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                      ((void *)0)
# 5369 "/home/ubuntu/neovim/src/nvim/regexp.c"
                          ; br = regnext(br)) {
    regoptail(br, ender);
  }


  if (paren != 0 && getchr() != ((int)(')') - 256)) {
    if (paren == 2) {
      return (emsg(gettext("E52: Unmatched \\z(")), rc_did_emsg = 
# 5376 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
     1
# 5376 "/home/ubuntu/neovim/src/nvim/regexp.c"
     , (void *)
# 5376 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
     ((void *)0)
# 5376 "/home/ubuntu/neovim/src/nvim/regexp.c"
     );
    } else if (paren == 3) {
      return (semsg((gettext(e_unmatchedpp)), (reg_magic == MAGIC_ALL) ? "" : "\\"), rc_did_emsg = 
# 5378 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
     1
# 5378 "/home/ubuntu/neovim/src/nvim/regexp.c"
     , (void *)
# 5378 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
     ((void *)0)
# 5378 "/home/ubuntu/neovim/src/nvim/regexp.c"
     );
    } else {
      return (semsg((gettext(e_unmatchedp)), (reg_magic == MAGIC_ALL) ? "" : "\\"), rc_did_emsg = 
# 5380 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
     1
# 5380 "/home/ubuntu/neovim/src/nvim/regexp.c"
     , (void *)
# 5380 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
     ((void *)0)
# 5380 "/home/ubuntu/neovim/src/nvim/regexp.c"
     );
    }
  } else if (paren == 0 && peekchr() != '\000') {
    if (curchr == ((int)(')') - 256)) {
      return (semsg((gettext(e_unmatchedpar)), (reg_magic == MAGIC_ALL) ? "" : "\\"), rc_did_emsg = 
# 5384 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
     1
# 5384 "/home/ubuntu/neovim/src/nvim/regexp.c"
     , (void *)
# 5384 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
     ((void *)0)
# 5384 "/home/ubuntu/neovim/src/nvim/regexp.c"
     );
    } else {
      return (emsg(gettext(e_trailing)), rc_did_emsg = 
# 5386 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
     1
# 5386 "/home/ubuntu/neovim/src/nvim/regexp.c"
     , (void *)
# 5386 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
     ((void *)0)
# 5386 "/home/ubuntu/neovim/src/nvim/regexp.c"
     );
    }

  }


  if (paren == 1) {
    had_endbrace[parno] = 
# 5393 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                         1
# 5393 "/home/ubuntu/neovim/src/nvim/regexp.c"
                             ;
  }
  return ret;
}
# 5417 "/home/ubuntu/neovim/src/nvim/regexp.c"
static regprog_T *bt_regcomp(uint8_t *expr, int re_flags)
{
  uint8_t *scan;
  uint8_t *longest;
  int len;
  int flags;

  if (expr == 
# 5424 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
             ((void *)0)
# 5424 "/home/ubuntu/neovim/src/nvim/regexp.c"
                 ) {
    return (iemsg(gettext(e_null)), rc_did_emsg = 
# 5425 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
   1
# 5425 "/home/ubuntu/neovim/src/nvim/regexp.c"
   , (void *)
# 5425 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
   ((void *)0)
# 5425 "/home/ubuntu/neovim/src/nvim/regexp.c"
   );
  }

  init_class_tab();


  regcomp_start(expr, re_flags);
  regcode = ((uint8_t *)-1);
  regc(0234);
  if (reg(0, &flags) == 
# 5434 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                 ((void *)0)
# 5434 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                     ) {
    return 
# 5435 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
          ((void *)0)
# 5435 "/home/ubuntu/neovim/src/nvim/regexp.c"
              ;
  }


  bt_regprog_T *r = xmalloc(
# 5439 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                           __builtin_offsetof (
# 5439 "/home/ubuntu/neovim/src/nvim/regexp.c"
                           bt_regprog_T
# 5439 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                           , 
# 5439 "/home/ubuntu/neovim/src/nvim/regexp.c"
                           program
# 5439 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                           ) 
# 5439 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                                           + (size_t)regsize);
  r->re_in_use = 
# 5440 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                0
# 5440 "/home/ubuntu/neovim/src/nvim/regexp.c"
                     ;


  regcomp_start(expr, re_flags);
  regcode = r->program;
  regc(0234);
  if (reg(0, &flags) == 
# 5446 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                 ((void *)0) 
# 5446 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                      || reg_toolong) {
    xfree(r);
    if (reg_toolong) {
      return (emsg(gettext("E339: Pattern too long")), rc_did_emsg = 
# 5449 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
     1
# 5449 "/home/ubuntu/neovim/src/nvim/regexp.c"
     , (void *)
# 5449 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
     ((void *)0)
# 5449 "/home/ubuntu/neovim/src/nvim/regexp.c"
     );
    }
    return 
# 5451 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
          ((void *)0)
# 5451 "/home/ubuntu/neovim/src/nvim/regexp.c"
              ;
  }


  r->regstart = '\000';
  r->reganch = 0;
  r->regmust = 
# 5457 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
              ((void *)0)
# 5457 "/home/ubuntu/neovim/src/nvim/regexp.c"
                  ;
  r->regmlen = 0;
  r->regflags = regflags;
  if (flags & 0x8) {
    r->regflags |= 4;
  }
  if (flags & 0x10) {
    r->regflags |= 16;
  }

  r->reghasz = (uint8_t)re_has_z;
  scan = &r->program[1];
  if (((int)(*(regnext(scan)))) == 0) {
    scan = ((scan) + 3);


    if (((int)(*(scan))) == 1 || ((int)(*(scan))) == 201) {
      r->reganch++;
      scan = regnext(scan);
    }

    if (((int)(*(scan))) == 5) {
      r->regstart = utf_ptr2char((char *)((scan) + 3));
    } else if (((int)(*(scan))) == 15
               || ((int)(*(scan))) == 16
               || ((int)(*(scan))) == 6
               || ((int)(*(scan))) == 80 + 0 || ((int)(*(scan))) == 150
               || ((int)(*(scan))) == 90 + 0 || ((int)(*(scan))) == 151) {
      uint8_t *regnext_scan = regnext(scan);
      if (((int)(*(regnext_scan))) == 5) {
        r->regstart = utf_ptr2char((char *)((regnext_scan) + 3));
      }
    }
# 5500 "/home/ubuntu/neovim/src/nvim/regexp.c"
    if ((flags & 0x4 || ((int)(*(scan))) == 15 || ((int)(*(scan))) == 16)
        && !(flags & 0x8)) {
      longest = 
# 5502 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
               ((void *)0)
# 5502 "/home/ubuntu/neovim/src/nvim/regexp.c"
                   ;
      len = 0;
      for (; scan != 
# 5504 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                    ((void *)0)
# 5504 "/home/ubuntu/neovim/src/nvim/regexp.c"
                        ; scan = regnext(scan)) {
        if (((int)(*(scan))) == 5) {
          size_t scanlen = strlen((char *)((scan) + 3));
          if (scanlen >= (size_t)len) {
            longest = ((scan) + 3);
            len = (int)scanlen;
          }
        }
      }
      r->regmust = longest;
      r->regmlen = len;
    }
  }



  r->engine = &bt_regengine;
  return (regprog_T *)r;
}



int vim_regcomp_had_eol(void)
{
  return had_eol;
}



static int coll_get_char(void)
{
  int64_t nr = -1;

  switch (*regparse++) {
  case 'd':
    nr = getdecchrs(); break;
  case 'o':
    nr = getoctchrs(); break;
  case 'x':
    nr = gethexchrs(2); break;
  case 'u':
    nr = gethexchrs(4); break;
  case 'U':
    nr = gethexchrs(8); break;
  }
  if (nr < 0 || nr > 0x7fffffff) {


    regparse--;
    nr = '\\';
  }
  return (int)nr;
}


static void bt_regfree(regprog_T *prog)
{
  xfree(prog);
}






static int64_t bl_minval;
static int64_t bl_maxval;


static void reg_save(regsave_T *save, garray_T *gap)
  FUNC_ATTR_NONNULL_ALL
{
  if ((rex.reg_match == 
# 5576 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
     ((void *)0)
# 5576 "/home/ubuntu/neovim/src/nvim/regexp.c"
     )) {
    save->rs_u.pos.col = (colnr_T)(rex.input - rex.line);
    save->rs_u.pos.lnum = rex.lnum;
  } else {
    save->rs_u.ptr = rex.input;
  }
  save->rs_len = gap->ga_len;
}


static void reg_restore(regsave_T *save, garray_T *gap)
  FUNC_ATTR_NONNULL_ALL
{
  if ((rex.reg_match == 
# 5589 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
     ((void *)0)
# 5589 "/home/ubuntu/neovim/src/nvim/regexp.c"
     )) {
    if (rex.lnum != save->rs_u.pos.lnum) {


      rex.lnum = save->rs_u.pos.lnum;
      rex.line = (uint8_t *)reg_getline(rex.lnum);
    }
    rex.input = rex.line + save->rs_u.pos.col;
  } else {
    rex.input = save->rs_u.ptr;
  }
  gap->ga_len = save->rs_len;
}


static 
# 5604 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
      _Bool 
# 5604 "/home/ubuntu/neovim/src/nvim/regexp.c"
           reg_save_equal(const regsave_T *save)
  FUNC_ATTR_NONNULL_ALL
{
  if ((rex.reg_match == 
# 5607 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
     ((void *)0)
# 5607 "/home/ubuntu/neovim/src/nvim/regexp.c"
     )) {
    return rex.lnum == save->rs_u.pos.lnum
           && rex.input == rex.line + save->rs_u.pos.col;
  }
  return rex.input == save->rs_u.ptr;
}
# 5630 "/home/ubuntu/neovim/src/nvim/regexp.c"
static void save_se_multi(save_se_T *savep, lpos_T *posp)
{
  savep->se_u.pos = *posp;
  posp->lnum = rex.lnum;
  posp->col = (colnr_T)(rex.input - rex.line);
}

static void save_se_one(save_se_T *savep, uint8_t **pp)
{
  savep->se_u.ptr = *pp;
  *pp = rex.input;
}





static int regrepeat(uint8_t *p, int64_t maxcount)
{
  int64_t count = 0;
  uint8_t *opnd;
  int mask;
  int testval = 0;

  uint8_t *scan = rex.input;
  opnd = ((p) + 3);
  switch (((int)(*(p)))) {
  case 20:
  case 20 + 30:
    while (count < maxcount) {


      while (*scan != '\000' && count < maxcount) {
        count++;
        (scan += utfc_ptr2len((char *)scan));
      }
      if (!(rex.reg_match == 
# 5666 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
          ((void *)0)
# 5666 "/home/ubuntu/neovim/src/nvim/regexp.c"
          ) || !((((int)(*(p)))) >= 20 + 30 && (((int)(*(p)))) <= 48 + 30) || rex.lnum > rex.reg_maxline
          || rex.reg_line_lbr || count == maxcount) {
        break;
      }
      count++;
      reg_nextline();
      scan = rex.input;
      if (got_int) {
        break;
      }
    }
    break;

  case 23:
  case 23 + 30:
    testval = 1;
    {} __attribute__((fallthrough));
  case 24:
  case 24 + 30:
    while (count < maxcount) {
      if (vim_isIDc(utf_ptr2char((char *)scan)) && (testval || !ascii_isdigit(*scan))) {
        (scan += utfc_ptr2len((char *)scan));
      } else if (*scan == '\000') {
        if (!(rex.reg_match == 
# 5689 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
            ((void *)0)
# 5689 "/home/ubuntu/neovim/src/nvim/regexp.c"
            ) || !((((int)(*(p)))) >= 20 + 30 && (((int)(*(p)))) <= 48 + 30) || rex.lnum > rex.reg_maxline
            || rex.reg_line_lbr) {
          break;
        }
        reg_nextline();
        scan = rex.input;
        if (got_int) {
          break;
        }
      } else if (rex.reg_line_lbr && *scan == '\n' && ((((int)(*(p)))) >= 20 + 30 && (((int)(*(p)))) <= 48 + 30)) {
        scan++;
      } else {
        break;
      }
      count++;
    }
    break;

  case 25:
  case 25 + 30:
    testval = 1;
    {} __attribute__((fallthrough));
  case 26:
  case 26 + 30:
    while (count < maxcount) {
      if (vim_iswordp_buf((char *)scan, rex.reg_buf)
          && (testval || !ascii_isdigit(*scan))) {
        (scan += utfc_ptr2len((char *)scan));
      } else if (*scan == '\000') {
        if (!(rex.reg_match == 
# 5718 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
            ((void *)0)
# 5718 "/home/ubuntu/neovim/src/nvim/regexp.c"
            ) || !((((int)(*(p)))) >= 20 + 30 && (((int)(*(p)))) <= 48 + 30) || rex.lnum > rex.reg_maxline
            || rex.reg_line_lbr) {
          break;
        }
        reg_nextline();
        scan = rex.input;
        if (got_int) {
          break;
        }
      } else if (rex.reg_line_lbr && *scan == '\n' && ((((int)(*(p)))) >= 20 + 30 && (((int)(*(p)))) <= 48 + 30)) {
        scan++;
      } else {
        break;
      }
      count++;
    }
    break;

  case 27:
  case 27 + 30:
    testval = 1;
    {} __attribute__((fallthrough));
  case 28:
  case 28 + 30:
    while (count < maxcount) {
      if (vim_isfilec(utf_ptr2char((char *)scan)) && (testval || !ascii_isdigit(*scan))) {
        (scan += utfc_ptr2len((char *)scan));
      } else if (*scan == '\000') {
        if (!(rex.reg_match == 
# 5746 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
            ((void *)0)
# 5746 "/home/ubuntu/neovim/src/nvim/regexp.c"
            ) || !((((int)(*(p)))) >= 20 + 30 && (((int)(*(p)))) <= 48 + 30) || rex.lnum > rex.reg_maxline
            || rex.reg_line_lbr) {
          break;
        }
        reg_nextline();
        scan = rex.input;
        if (got_int) {
          break;
        }
      } else if (rex.reg_line_lbr && *scan == '\n' && ((((int)(*(p)))) >= 20 + 30 && (((int)(*(p)))) <= 48 + 30)) {
        scan++;
      } else {
        break;
      }
      count++;
    }
    break;

  case 29:
  case 29 + 30:
    testval = 1;
    {} __attribute__((fallthrough));
  case 30:
  case 30 + 30:
    while (count < maxcount) {
      if (*scan == '\000') {
        if (!(rex.reg_match == 
# 5772 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
            ((void *)0)
# 5772 "/home/ubuntu/neovim/src/nvim/regexp.c"
            ) || !((((int)(*(p)))) >= 20 + 30 && (((int)(*(p)))) <= 48 + 30) || rex.lnum > rex.reg_maxline
            || rex.reg_line_lbr) {
          break;
        }
        reg_nextline();
        scan = rex.input;
        if (got_int) {
          break;
        }
      } else if (vim_isprintc(utf_ptr2char((char *)scan)) == 1
                 && (testval || !ascii_isdigit(*scan))) {
        (scan += utfc_ptr2len((char *)scan));
      } else if (rex.reg_line_lbr && *scan == '\n' && ((((int)(*(p)))) >= 20 + 30 && (((int)(*(p)))) <= 48 + 30)) {
        scan++;
      } else {
        break;
      }
      count++;
    }
    break;

  case 31:
  case 31 + 30:
    testval = mask = 0x100;
do_class:
    while (count < maxcount) {
      int l;
      if (*scan == '\000') {
        if (!(rex.reg_match == 
# 5800 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
            ((void *)0)
# 5800 "/home/ubuntu/neovim/src/nvim/regexp.c"
            ) || !((((int)(*(p)))) >= 20 + 30 && (((int)(*(p)))) <= 48 + 30) || rex.lnum > rex.reg_maxline
            || rex.reg_line_lbr) {
          break;
        }
        reg_nextline();
        scan = rex.input;
        if (got_int) {
          break;
        }
      } else if ((l = utfc_ptr2len((char *)scan)) > 1) {
        if (testval != 0) {
          break;
        }
        scan += l;
      } else if ((class_tab[*scan] & mask) == testval) {
        scan++;
      } else if (rex.reg_line_lbr && *scan == '\n' && ((((int)(*(p)))) >= 20 + 30 && (((int)(*(p)))) <= 48 + 30)) {
        scan++;
      } else {
        break;
      }
      count++;
    }
    break;

  case 32:
  case 32 + 30:
    mask = 0x100;
    goto do_class;
  case 33:
  case 33 + 30:
    testval = mask = 0x01;
    goto do_class;
  case 34:
  case 34 + 30:
    mask = 0x01;
    goto do_class;
  case 35:
  case 35 + 30:
    testval = mask = 0x02;
    goto do_class;
  case 36:
  case 36 + 30:
    mask = 0x02;
    goto do_class;
  case 37:
  case 37 + 30:
    testval = mask = 0x04;
    goto do_class;
  case 38:
  case 38 + 30:
    mask = 0x04;
    goto do_class;
  case 39:
  case 39 + 30:
    testval = mask = 0x08;
    goto do_class;
  case 40:
  case 40 + 30:
    mask = 0x08;
    goto do_class;
  case 41:
  case 41 + 30:
    testval = mask = 0x10;
    goto do_class;
  case 42:
  case 42 + 30:
    mask = 0x10;
    goto do_class;
  case 43:
  case 43 + 30:
    testval = mask = 0x20;
    goto do_class;
  case 44:
  case 44 + 30:
    mask = 0x20;
    goto do_class;
  case 45:
  case 45 + 30:
    testval = mask = 0x40;
    goto do_class;
  case 46:
  case 46 + 30:
    mask = 0x40;
    goto do_class;
  case 47:
  case 47 + 30:
    testval = mask = 0x80;
    goto do_class;
  case 48:
  case 48 + 30:
    mask = 0x80;
    goto do_class;

  case 5: {
    int cu, cl;




    if (rex.reg_ic) {
      cu = mb_toupper(*opnd);
      cl = mb_tolower(*opnd);
      while (count < maxcount && (*scan == cu || *scan == cl)) {
        count++;
        scan++;
      }
    } else {
      cu = *opnd;
      while (count < maxcount && *scan == cu) {
        count++;
        scan++;
      }
    }
    break;
  }

  case 200: {
    int i, len, cf = 0;



    if ((len = utfc_ptr2len((char *)opnd)) > 1) {
      if (rex.reg_ic) {
        cf = utf_fold(utf_ptr2char((char *)opnd));
      }
      while (count < maxcount && utfc_ptr2len((char *)scan) >= len) {
        for (i = 0; i < len; i++) {
          if (opnd[i] != scan[i]) {
            break;
          }
        }
        if (i < len && (!rex.reg_ic
                        || utf_fold(utf_ptr2char((char *)scan)) != cf)) {
          break;
        }
        scan += len;
        count++;
      }
    }
  }
  break;

  case 21:
  case 21 + 30:
    testval = 1;
    {} __attribute__((fallthrough));

  case 22:
  case 22 + 30:
    while (count < maxcount) {
      int len;
      if (*scan == '\000') {
        if (!(rex.reg_match == 
# 5953 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
            ((void *)0)
# 5953 "/home/ubuntu/neovim/src/nvim/regexp.c"
            ) || !((((int)(*(p)))) >= 20 + 30 && (((int)(*(p)))) <= 48 + 30) || rex.lnum > rex.reg_maxline
            || rex.reg_line_lbr) {
          break;
        }
        reg_nextline();
        scan = rex.input;
        if (got_int) {
          break;
        }
      } else if (rex.reg_line_lbr && *scan == '\n' && ((((int)(*(p)))) >= 20 + 30 && (((int)(*(p)))) <= 48 + 30)) {
        scan++;
      } else if ((len = utfc_ptr2len((char *)scan)) > 1) {
        if ((cstrchr((char *)opnd, utf_ptr2char((char *)scan)) == 
# 5965 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                                                 ((void *)0)
# 5965 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                                                     ) == testval) {
          break;
        }
        scan += len;
      } else {
        if ((cstrchr((char *)opnd, *scan) == 
# 5970 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                            ((void *)0)
# 5970 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                                ) == testval) {
          break;
        }
        scan++;
      }
      count++;
    }
    break;

  case 18:
    while (count < maxcount
           && ((*scan == '\000' && rex.lnum <= rex.reg_maxline && !rex.reg_line_lbr
                && (rex.reg_match == 
# 5982 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                  ((void *)0)
# 5982 "/home/ubuntu/neovim/src/nvim/regexp.c"
                  )) || (*scan == '\n' && rex.reg_line_lbr))) {
      count++;
      if (rex.reg_line_lbr) {
        (rex.input += utfc_ptr2len((char *)rex.input));
      } else {
        reg_nextline();
      }
      scan = rex.input;
      if (got_int) {
        break;
      }
    }
    break;

  default:
    iemsg(gettext(e_re_corr));



    break;
  }

  rex.input = scan;

  return (int)count;
}



static regitem_T *regstack_push(regstate_T state, uint8_t *scan)
{
  regitem_T *rp;

  if ((int64_t)((unsigned)regstack.ga_len >> 10) >= p_mmp) {
    emsg(gettext(e_pattern_uses_more_memory_than_maxmempattern));
    return 
# 6017 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
          ((void *)0)
# 6017 "/home/ubuntu/neovim/src/nvim/regexp.c"
              ;
  }
  ga_grow(&regstack, sizeof(regitem_T));

  rp = (regitem_T *)((char *)regstack.ga_data + regstack.ga_len);
  rp->rs_state = state;
  rp->rs_scan = scan;

  regstack.ga_len += (int)sizeof(regitem_T);
  return rp;
}


static void regstack_pop(uint8_t **scan)
{
  regitem_T *rp;

  rp = (regitem_T *)((char *)regstack.ga_data + regstack.ga_len) - 1;
  *scan = rp->rs_scan;

  regstack.ga_len -= (int)sizeof(regitem_T);
}



static void save_subexpr(regbehind_T *bp)
  FUNC_ATTR_NONNULL_ALL
{


  bp->save_need_clear_subexpr = rex.need_clear_subexpr;
  if (rex.need_clear_subexpr) {
    return;
  }

  for (int i = 0; i < NSUBEXP; i++) {
    if ((rex.reg_match == 
# 6053 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
       ((void *)0)
# 6053 "/home/ubuntu/neovim/src/nvim/regexp.c"
       )) {
      bp->save_start[i].se_u.pos = rex.reg_startpos[i];
      bp->save_end[i].se_u.pos = rex.reg_endpos[i];
    } else {
      bp->save_start[i].se_u.ptr = rex.reg_startp[i];
      bp->save_end[i].se_u.ptr = rex.reg_endp[i];
    }
  }
}


static void restore_subexpr(regbehind_T *bp)
  FUNC_ATTR_NONNULL_ALL
{

  rex.need_clear_subexpr = bp->save_need_clear_subexpr;
  if (rex.need_clear_subexpr) {
    return;
  }

  for (int i = 0; i < NSUBEXP; i++) {
    if ((rex.reg_match == 
# 6074 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
       ((void *)0)
# 6074 "/home/ubuntu/neovim/src/nvim/regexp.c"
       )) {
      rex.reg_startpos[i] = bp->save_start[i].se_u.pos;
      rex.reg_endpos[i] = bp->save_end[i].se_u.pos;
    } else {
      rex.reg_startp[i] = bp->save_start[i].se_u.ptr;
      rex.reg_endp[i] = bp->save_end[i].se_u.ptr;
    }
  }
}
# 6100 "/home/ubuntu/neovim/src/nvim/regexp.c"
static 
# 6100 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
      _Bool 
# 6100 "/home/ubuntu/neovim/src/nvim/regexp.c"
           regmatch(uint8_t *scan, const proftime_T *tm, int *timed_out)
{
  uint8_t *next;
  int op;
  int c;
  regitem_T *rp;
  int no;
  int status;
  int tm_count = 0;



  regstack.ga_len = 0;
  backpos.ga_len = 0;


  while (
# 6116 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
        1
# 6116 "/home/ubuntu/neovim/src/nvim/regexp.c"
            ) {


    reg_breakcheck();
# 6130 "/home/ubuntu/neovim/src/nvim/regexp.c"
    while (
# 6130 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
          1
# 6130 "/home/ubuntu/neovim/src/nvim/regexp.c"
              ) {
      if (got_int || scan == 
# 6131 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                            ((void *)0)
# 6131 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                ) {
        status = 1;
        break;
      }

      if (tm != 
# 6136 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
               ((void *)0) 
# 6136 "/home/ubuntu/neovim/src/nvim/regexp.c"
                    && ++tm_count == 100) {
        tm_count = 0;
        if (profile_passed_limit(*tm)) {
          if (timed_out != 
# 6139 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                          ((void *)0)
# 6139 "/home/ubuntu/neovim/src/nvim/regexp.c"
                              ) {
            *timed_out = 
# 6140 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                        1
# 6140 "/home/ubuntu/neovim/src/nvim/regexp.c"
                            ;
          }
          status = 1;
          break;
        }
      }
      status = 2;
# 6166 "/home/ubuntu/neovim/src/nvim/regexp.c"
      next = regnext(scan);

      op = ((int)(*(scan)));

      if (!rex.reg_line_lbr && ((op) >= 20 + 30 && (op) <= 48 + 30) && (rex.reg_match == 
# 6170 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                             ((void *)0)
# 6170 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                             )
          && *rex.input == '\000' && rex.lnum <= rex.reg_maxline) {
        reg_nextline();
      } else if (rex.reg_line_lbr && ((op) >= 20 + 30 && (op) <= 48 + 30) && *rex.input == '\n') {
        (rex.input += utfc_ptr2len((char *)rex.input));
      } else {
        if (((op) >= 20 + 30 && (op) <= 48 + 30)) {
          op -= 30;
        }
        c = utf_ptr2char((char *)rex.input);
        switch (op) {
        case 1:
          if (rex.input != rex.line) {
            status = 5;
          }
          break;

        case 2:
          if (c != '\000') {
            status = 5;
          }
          break;

        case 201:



          if (rex.lnum != 0 || rex.input != rex.line
              || ((rex.reg_match == 
# 6198 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                 ((void *)0)
# 6198 "/home/ubuntu/neovim/src/nvim/regexp.c"
                 ) && rex.reg_firstlnum > 1)) {
            status = 5;
          }
          break;

        case 202:
          if (rex.lnum != rex.reg_maxline || c != '\000') {
            status = 5;
          }
          break;

        case 203:


          if (rex.reg_win == 
# 6212 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                            ((void *)0)
              
# 6213 "/home/ubuntu/neovim/src/nvim/regexp.c"
             || (rex.lnum + rex.reg_firstlnum != rex.reg_win->w_cursor.lnum)
              || ((colnr_T)(rex.input - rex.line) !=
                  rex.reg_win->w_cursor.col)) {
            status = 5;
          }
          break;

        case 207:

        {
          int mark = ((scan) + 3)[0];
          int cmp = ((scan) + 3)[1];
          pos_T *pos;
          size_t col = (rex.reg_match == 
# 6226 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                      ((void *)0)
# 6226 "/home/ubuntu/neovim/src/nvim/regexp.c"
                      ) ? (size_t)(rex.input - rex.line) : 0;
          fmark_T *fm = mark_get(rex.reg_buf, curwin, 
# 6227 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                                     ((void *)0)
# 6227 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                                         , kMarkBufLocal, mark);


          if ((rex.reg_match == 
# 6230 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
             ((void *)0)
# 6230 "/home/ubuntu/neovim/src/nvim/regexp.c"
             )) {
            rex.line = (uint8_t *)reg_getline(rex.lnum);
            rex.input = rex.line + col;
          }

          if (fm == 
# 6235 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                   ((void *)0)
              
# 6236 "/home/ubuntu/neovim/src/nvim/regexp.c"
             || fm->mark.lnum <= 0) {
            status = 5;
          } else {
            pos = &fm->mark;
            const colnr_T pos_col = pos->lnum == rex.lnum + rex.reg_firstlnum
                                    && pos->col == MAXCOL
                                    ? reg_getline_len(pos->lnum - rex.reg_firstlnum)
                                    : pos->col;

            if (pos->lnum == rex.lnum + rex.reg_firstlnum
                ? (pos_col == (colnr_T)(rex.input - rex.line)
                   ? (cmp == '<' || cmp == '>')
                   : (pos_col < (colnr_T)(rex.input - rex.line)
                      ? cmp != '>'
                      : cmp != '<'))
                : (pos->lnum < rex.lnum + rex.reg_firstlnum
                   ? cmp != '>'
                   : cmp != '<')) {
              status = 5;
            }
          }
        }
        break;

        case 208:
          if (!reg_match_visual()) {
            status = 5;
          }
          break;

        case 204:
          
# 6267 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
         ((void) sizeof ((
# 6267 "/home/ubuntu/neovim/src/nvim/regexp.c"
         rex.lnum + rex.reg_firstlnum >= 0 && (uintmax_t)(rex.lnum + rex.reg_firstlnum) <= 
# 6267 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
         (4294967295U)) ? 1 : 0), __extension__ ({ if (
# 6267 "/home/ubuntu/neovim/src/nvim/regexp.c"
         rex.lnum + rex.reg_firstlnum >= 0 && (uintmax_t)(rex.lnum + rex.reg_firstlnum) <= 
# 6267 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
         (4294967295U)) ; else __assert_fail (
# 6267 "/home/ubuntu/neovim/src/nvim/regexp.c"
         "rex.lnum + rex.reg_firstlnum >= 0 && (uintmax_t)(rex.lnum + rex.reg_firstlnum) <= UINT32_MAX"
# 6267 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
         , "/home/ubuntu/neovim/src/nvim/regexp.c", 6267, __extension__ __PRETTY_FUNCTION__); }))
                                                                            
# 6268 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                                                           ;
          if (!(rex.reg_match == 
# 6269 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
              ((void *)0)
# 6269 "/home/ubuntu/neovim/src/nvim/regexp.c"
              )
              || !re_num_cmp((uint32_t)(rex.lnum + rex.reg_firstlnum), scan)) {
            status = 5;
          }
          break;

        case 205:
          
# 6276 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
         ((void) sizeof ((
# 6276 "/home/ubuntu/neovim/src/nvim/regexp.c"
         rex.input - rex.line + 1 >= 0 && (uintmax_t)(rex.input - rex.line + 1) <= 
# 6276 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
         (4294967295U)) ? 1 : 0), __extension__ ({ if (
# 6276 "/home/ubuntu/neovim/src/nvim/regexp.c"
         rex.input - rex.line + 1 >= 0 && (uintmax_t)(rex.input - rex.line + 1) <= 
# 6276 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
         (4294967295U)) ; else __assert_fail (
# 6276 "/home/ubuntu/neovim/src/nvim/regexp.c"
         "rex.input - rex.line + 1 >= 0 && (uintmax_t)(rex.input - rex.line + 1) <= UINT32_MAX"
# 6276 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
         , "/home/ubuntu/neovim/src/nvim/regexp.c", 6276, __extension__ __PRETTY_FUNCTION__); }))
                                                                        
# 6277 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                                                       ;
          if (!re_num_cmp((uint32_t)(rex.input - rex.line + 1), scan)) {
            status = 5;
          }
          break;

        case 206: {
          win_T *wp = rex.reg_win == 
# 6284 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                    ((void *)0) 
# 6284 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                         ? curwin : rex.reg_win;
          linenr_T lnum = (rex.reg_match == 
# 6285 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                         ((void *)0)
# 6285 "/home/ubuntu/neovim/src/nvim/regexp.c"
                         ) ? rex.reg_firstlnum + rex.lnum : 1;
          if ((rex.reg_match == 
# 6286 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
             ((void *)0)
# 6286 "/home/ubuntu/neovim/src/nvim/regexp.c"
             ) && (lnum <= 0 || lnum > wp->w_buffer->b_ml.ml_line_count)) {
            lnum = 1;
          }
          int vcol = win_linetabsize(wp, lnum, (char *)rex.line,
                                     (colnr_T)(rex.input - rex.line));
          if (!re_num_cmp((uint32_t)vcol + 1, scan)) {
            status = 5;
          }
          break;
        }
        break;

        case 15:
          if (c == '\000') {
            status = 5;
          } else {

            const int this_class =
              mb_get_class_tab((char *)rex.input, rex.reg_buf->b_chartab);
            if (this_class <= 1) {
              status = 5;
            } else if (reg_prev_class() == this_class) {
              status = 5;
            }
          }
          break;

        case 16:
          if (rex.input == rex.line) {
            status = 5;
          } else {
            int this_class, prev_class;


            this_class = mb_get_class_tab((char *)rex.input, rex.reg_buf->b_chartab);
            prev_class = reg_prev_class();
            if (this_class == prev_class
                || prev_class == 0 || prev_class == 1) {
              status = 5;
            }
          }
          break;

        case 20:

          if (c == '\000') {
            status = 5;
          } else {
            (rex.input += utfc_ptr2len((char *)rex.input));
          }
          break;

        case 23:
          if (!vim_isIDc(c)) {
            status = 5;
          } else {
            (rex.input += utfc_ptr2len((char *)rex.input));
          }
          break;

        case 24:
          if (ascii_isdigit(*rex.input) || !vim_isIDc(c)) {
            status = 5;
          } else {
            (rex.input += utfc_ptr2len((char *)rex.input));
          }
          break;

        case 25:
          if (!vim_iswordp_buf((char *)rex.input, rex.reg_buf)) {
            status = 5;
          } else {
            (rex.input += utfc_ptr2len((char *)rex.input));
          }
          break;

        case 26:
          if (ascii_isdigit(*rex.input)
              || !vim_iswordp_buf((char *)rex.input, rex.reg_buf)) {
            status = 5;
          } else {
            (rex.input += utfc_ptr2len((char *)rex.input));
          }
          break;

        case 27:
          if (!vim_isfilec(c)) {
            status = 5;
          } else {
            (rex.input += utfc_ptr2len((char *)rex.input));
          }
          break;

        case 28:
          if (ascii_isdigit(*rex.input) || !vim_isfilec(c)) {
            status = 5;
          } else {
            (rex.input += utfc_ptr2len((char *)rex.input));
          }
          break;

        case 29:
          if (!vim_isprintc(utf_ptr2char((char *)rex.input))) {
            status = 5;
          } else {
            (rex.input += utfc_ptr2len((char *)rex.input));
          }
          break;

        case 30:
          if (ascii_isdigit(*rex.input) || !vim_isprintc(utf_ptr2char((char *)rex.input))) {
            status = 5;
          } else {
            (rex.input += utfc_ptr2len((char *)rex.input));
          }
          break;

        case 31:
          if (!ascii_iswhite(c)) {
            status = 5;
          } else {
            (rex.input += utfc_ptr2len((char *)rex.input));
          }
          break;

        case 32:
          if (c == '\000' || ascii_iswhite(c)) {
            status = 5;
          } else {
            (rex.input += utfc_ptr2len((char *)rex.input));
          }
          break;

        case 33:
          if (!((c) < 0x100 && (class_tab[c] & 0x01))) {
            status = 5;
          } else {
            (rex.input += utfc_ptr2len((char *)rex.input));
          }
          break;

        case 34:
          if (c == '\000' || ((c) < 0x100 && (class_tab[c] & 0x01))) {
            status = 5;
          } else {
            (rex.input += utfc_ptr2len((char *)rex.input));
          }
          break;

        case 35:
          if (!((c) < 0x100 && (class_tab[c] & 0x02))) {
            status = 5;
          } else {
            (rex.input += utfc_ptr2len((char *)rex.input));
          }
          break;

        case 36:
          if (c == '\000' || ((c) < 0x100 && (class_tab[c] & 0x02))) {
            status = 5;
          } else {
            (rex.input += utfc_ptr2len((char *)rex.input));
          }
          break;

        case 37:
          if (!((c) < 0x100 && (class_tab[c] & 0x04))) {
            status = 5;
          } else {
            (rex.input += utfc_ptr2len((char *)rex.input));
          }
          break;

        case 38:
          if (c == '\000' || ((c) < 0x100 && (class_tab[c] & 0x04))) {
            status = 5;
          } else {
            (rex.input += utfc_ptr2len((char *)rex.input));
          }
          break;

        case 39:
          if (!((c) < 0x100 && (class_tab[c] & 0x08))) {
            status = 5;
          } else {
            (rex.input += utfc_ptr2len((char *)rex.input));
          }
          break;

        case 40:
          if (c == '\000' || ((c) < 0x100 && (class_tab[c] & 0x08))) {
            status = 5;
          } else {
            (rex.input += utfc_ptr2len((char *)rex.input));
          }
          break;

        case 41:
          if (!((c) < 0x100 && (class_tab[c] & 0x10))) {
            status = 5;
          } else {
            (rex.input += utfc_ptr2len((char *)rex.input));
          }
          break;

        case 42:
          if (c == '\000' || ((c) < 0x100 && (class_tab[c] & 0x10))) {
            status = 5;
          } else {
            (rex.input += utfc_ptr2len((char *)rex.input));
          }
          break;

        case 43:
          if (!((c) < 0x100 && (class_tab[c] & 0x20))) {
            status = 5;
          } else {
            (rex.input += utfc_ptr2len((char *)rex.input));
          }
          break;

        case 44:
          if (c == '\000' || ((c) < 0x100 && (class_tab[c] & 0x20))) {
            status = 5;
          } else {
            (rex.input += utfc_ptr2len((char *)rex.input));
          }
          break;

        case 45:
          if (!((c) < 0x100 && (class_tab[c] & 0x40))) {
            status = 5;
          } else {
            (rex.input += utfc_ptr2len((char *)rex.input));
          }
          break;

        case 46:
          if (c == '\000' || ((c) < 0x100 && (class_tab[c] & 0x40))) {
            status = 5;
          } else {
            (rex.input += utfc_ptr2len((char *)rex.input));
          }
          break;

        case 47:
          if (!((c) < 0x100 && (class_tab[c] & 0x80))) {
            status = 5;
          } else {
            (rex.input += utfc_ptr2len((char *)rex.input));
          }
          break;

        case 48:
          if (c == '\000' || ((c) < 0x100 && (class_tab[c] & 0x80))) {
            status = 5;
          } else {
            (rex.input += utfc_ptr2len((char *)rex.input));
          }
          break;

        case 5: {
          int len;
          uint8_t *opnd;

          opnd = ((scan) + 3);

          if (*opnd != *rex.input
              && (!rex.reg_ic)) {
            status = 5;
          } else if (*opnd == '\000') {


          } else {
            if (opnd[1] == '\000' && !rex.reg_ic) {
              len = 1;
            } else {

              len = (int)strlen((char *)opnd);
              if (cstrncmp((char *)opnd, (char *)rex.input, &len) != 0) {
                status = 5;
              }
            }


            if (status != 5
                && utf_composinglike((char *)rex.input, (char *)rex.input + len)
                && !rex.reg_icombine
                && ((int)(*(next))) != 209) {



              status = 5;
            }
            if (status != 5) {
              rex.input += len;
            }
          }
        }
        break;

        case 21:
        case 22: {
          uint8_t *q = ((scan) + 3);

          if (c == '\000') {
            status = 5;
          } else if ((cstrchr((char *)q, c) == 
# 6593 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                              ((void *)0)
# 6593 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                                  ) == (op == 21)) {
            status = 5;
          } else {
            int len = utfc_ptr2len((char *)q) - utf_ptr2len((char *)q);

            rex.input += utf_ptr2len((char *)rex.input);
            q += utf_ptr2len((char *)q);

            if (len == 0) {
              break;
            }

            for (int i = 0; i < len; i++) {
              if (q[i] != rex.input[i]) {
                status = 5;
                break;
              }
            }
            rex.input += len;
          }
          break;
        }

        case 200: {
          int i, len;

          const uint8_t *opnd = ((scan) + 3);


          if ((len = utfc_ptr2len((char *)opnd)) < 2) {
            status = 5;
            break;
          }
          const int opndc = utf_ptr2char((char *)opnd);
          if (utf_iscomposing(opndc)) {


            status = 5;
            for (i = 0; rex.input[i] != '\000';
                 i += utf_ptr2len((char *)rex.input + i)) {
              const int inpc = utf_ptr2char((char *)rex.input + i);
              if (!utf_iscomposing(inpc)) {
                if (i > 0) {
                  break;
                }
              } else if (opndc == inpc) {

                len = i + utfc_ptr2len((char *)rex.input + i);
                status = 4;
                break;
              }
            }
          } else {
            if (cstrncmp((char *)opnd, (char *)rex.input, &len) != 0) {
              status = 5;
              break;
            }
          }
          rex.input += len;
        }
        break;

        case 209:

          while (utf_iscomposing(utf_ptr2char((char *)rex.input))) {
            rex.input += utf_ptr2len((char *)rex.input);
          }
          break;

        case 6:
          break;

        case 4: {
          int i;







          backpos_T *bp = (backpos_T *)backpos.ga_data;
          for (i = 0; i < backpos.ga_len; i++) {
            if (bp[i].bp_scan == scan) {
              break;
            }
          }
          if (i == backpos.ga_len) {
            backpos_T *p = ga_append_via_ptr(&backpos, sizeof(backpos_T));
            p->bp_scan = scan;
          } else if (reg_save_equal(&bp[i].bp_pos)) {

            status = 5;
          }

          
# 6688 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
         ((void) sizeof ((
# 6688 "/home/ubuntu/neovim/src/nvim/regexp.c"
         status != 1
# 6688 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
         ) ? 1 : 0), __extension__ ({ if (
# 6688 "/home/ubuntu/neovim/src/nvim/regexp.c"
         status != 1
# 6688 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
         ) ; else __assert_fail (
# 6688 "/home/ubuntu/neovim/src/nvim/regexp.c"
         "status != RA_FAIL"
# 6688 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
         , "/home/ubuntu/neovim/src/nvim/regexp.c", 6688, __extension__ __PRETTY_FUNCTION__); }))
# 6688 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                  ;
          if (status != 5) {
            reg_save(&bp[i].bp_pos, &backpos);
          }
        }
        break;

        case 80 + 0:
        case 80 + 1:
        case 80 + 2:
        case 80 + 3:
        case 80 + 4:
        case 80 + 5:
        case 80 + 6:
        case 80 + 7:
        case 80 + 8:
        case 80 + 9:
          no = op - 80;
          cleanup_subexpr();
          rp = regstack_push(RS_MOPEN, scan);
          if (rp == 
# 6708 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                   ((void *)0)
# 6708 "/home/ubuntu/neovim/src/nvim/regexp.c"
                       ) {
            status = 1;
          } else {
            rp->rs_no = (int16_t)no;
            (rex.reg_match == 
# 6712 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
           ((void *)0)
# 6712 "/home/ubuntu/neovim/src/nvim/regexp.c"
           ) ? save_se_multi((&rp->rs_un.sesave), (&rex.reg_startpos[no])) : save_se_one((&rp->rs_un.sesave), (&rex.reg_startp[no]))
                                        ;

          }
          break;

        case 150:
        case 151:
          if (regstack_push(RS_NOPEN, scan) == 
# 6720 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                              ((void *)0)
# 6720 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                                  ) {
            status = 1;
          }

          break;

        case 110 + 1:
        case 110 + 2:
        case 110 + 3:
        case 110 + 4:
        case 110 + 5:
        case 110 + 6:
        case 110 + 7:
        case 110 + 8:
        case 110 + 9:
          no = op - 110;
          cleanup_zsubexpr();
          rp = regstack_push(RS_ZOPEN, scan);
          if (rp == 
# 6738 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                   ((void *)0)
# 6738 "/home/ubuntu/neovim/src/nvim/regexp.c"
                       ) {
            status = 1;
          } else {
            rp->rs_no = (int16_t)no;
            (rex.reg_match == 
# 6742 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
           ((void *)0)
# 6742 "/home/ubuntu/neovim/src/nvim/regexp.c"
           ) ? save_se_multi((&rp->rs_un.sesave), (&reg_startzpos[no])) : save_se_one((&rp->rs_un.sesave), (&reg_startzp[no]))
                                     ;

          }
          break;

        case 90 + 0:
        case 90 + 1:
        case 90 + 2:
        case 90 + 3:
        case 90 + 4:
        case 90 + 5:
        case 90 + 6:
        case 90 + 7:
        case 90 + 8:
        case 90 + 9:
          no = op - 90;
          cleanup_subexpr();
          rp = regstack_push(RS_MCLOSE, scan);
          if (rp == 
# 6761 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                   ((void *)0)
# 6761 "/home/ubuntu/neovim/src/nvim/regexp.c"
                       ) {
            status = 1;
          } else {
            rp->rs_no = (int16_t)no;
            (rex.reg_match == 
# 6765 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
           ((void *)0)
# 6765 "/home/ubuntu/neovim/src/nvim/regexp.c"
           ) ? save_se_multi((&rp->rs_un.sesave), (&rex.reg_endpos[no])) : save_se_one((&rp->rs_un.sesave), (&rex.reg_endp[no]));

          }
          break;

        case 120 + 1:
        case 120 + 2:
        case 120 + 3:
        case 120 + 4:
        case 120 + 5:
        case 120 + 6:
        case 120 + 7:
        case 120 + 8:
        case 120 + 9:
          no = op - 120;
          cleanup_zsubexpr();
          rp = regstack_push(RS_ZCLOSE, scan);
          if (rp == 
# 6782 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                   ((void *)0)
# 6782 "/home/ubuntu/neovim/src/nvim/regexp.c"
                       ) {
            status = 1;
          } else {
            rp->rs_no = (int16_t)no;
            (rex.reg_match == 
# 6786 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
           ((void *)0)
# 6786 "/home/ubuntu/neovim/src/nvim/regexp.c"
           ) ? save_se_multi((&rp->rs_un.sesave), (&reg_endzpos[no])) : save_se_one((&rp->rs_un.sesave), (&reg_endzp[no]))
                                   ;

          }
          break;

        case 100 + 1:
        case 100 + 2:
        case 100 + 3:
        case 100 + 4:
        case 100 + 5:
        case 100 + 6:
        case 100 + 7:
        case 100 + 8:
        case 100 + 9: {
          int len;

          no = op - 100;
          cleanup_subexpr();
          if (!(rex.reg_match == 
# 6805 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
              ((void *)0)
# 6805 "/home/ubuntu/neovim/src/nvim/regexp.c"
              )) {
            if (rex.reg_startp[no] == 
# 6806 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                     ((void *)0) 
# 6806 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                          || rex.reg_endp[no] == 
# 6806 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                                                 ((void *)0)
# 6806 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                                                     ) {

              len = 0;
            } else {

              len = (int)(rex.reg_endp[no] - rex.reg_startp[no]);
              if (cstrncmp((char *)rex.reg_startp[no], (char *)rex.input, &len) != 0) {
                status = 5;
              }
            }
          } else {
            if (rex.reg_startpos[no].lnum < 0 || rex.reg_endpos[no].lnum < 0) {

              len = 0;
            } else {
              if (rex.reg_startpos[no].lnum == rex.lnum
                  && rex.reg_endpos[no].lnum == rex.lnum) {

                len = rex.reg_endpos[no].col - rex.reg_startpos[no].col;
                if (cstrncmp((char *)rex.line + rex.reg_startpos[no].col,
                             (char *)rex.input, &len) != 0) {
                  status = 5;
                }
              } else {

                int r = match_with_backref(rex.reg_startpos[no].lnum,
                                           rex.reg_startpos[no].col,
                                           rex.reg_endpos[no].lnum,
                                           rex.reg_endpos[no].col,
                                           &len);
                if (r != 4) {
                  status = r;
                }
              }
            }
          }


          rex.input += len;
        }
        break;

        case 130 + 1:
        case 130 + 2:
        case 130 + 3:
        case 130 + 4:
        case 130 + 5:
        case 130 + 6:
        case 130 + 7:
        case 130 + 8:
        case 130 + 9:
          cleanup_zsubexpr();
          no = op - 130;
          if (re_extmatch_in != 
# 6859 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                               ((void *)0)
              
# 6860 "/home/ubuntu/neovim/src/nvim/regexp.c"
             && re_extmatch_in->matches[no] != 
# 6860 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                               ((void *)0)
# 6860 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                                   ) {
            int len = (int)strlen((char *)re_extmatch_in->matches[no]);
            if (cstrncmp((char *)re_extmatch_in->matches[no], (char *)rex.input, &len) != 0) {
              status = 5;
            } else {
              rex.input += len;
            }
          } else {

          }
          break;

        case 3:
          if (((int)(*(next))) != 3) {
            next = ((scan) + 3);
          } else {
            rp = regstack_push(RS_BRANCH, scan);
            if (rp == 
# 6877 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                     ((void *)0)
# 6877 "/home/ubuntu/neovim/src/nvim/regexp.c"
                         ) {
              status = 1;
            } else {
              status = 3;
            }
          }
          break;

        case 17:
          if (((int)(*(next))) == 14) {
            bl_minval = (((int64_t)(scan)[3] << 24) + ((int64_t)(scan)[4] << 16) + ((int64_t)(scan)[5] << 8) + (int64_t)(scan)[6]);
            bl_maxval = (((int64_t)((scan) + 4)[3] << 24) + ((int64_t)((scan) + 4)[4] << 16) + ((int64_t)((scan) + 4)[5] << 8) + (int64_t)((scan) + 4)[6]);
          } else if (((int)(*(next))) >= 140
                     && ((int)(*(next))) < 140 + 10) {
            no = ((int)(*(next))) - 140;
            brace_min[no] = (((int64_t)(scan)[3] << 24) + ((int64_t)(scan)[4] << 16) + ((int64_t)(scan)[5] << 8) + (int64_t)(scan)[6]);
            brace_max[no] = (((int64_t)((scan) + 4)[3] << 24) + ((int64_t)((scan) + 4)[4] << 16) + ((int64_t)((scan) + 4)[5] << 8) + (int64_t)((scan) + 4)[6]);
            brace_count[no] = 0;
          } else {
            internal_error("BRACE_LIMITS");
            status = 1;
          }
          break;

        case 140 + 0:
        case 140 + 1:
        case 140 + 2:
        case 140 + 3:
        case 140 + 4:
        case 140 + 5:
        case 140 + 6:
        case 140 + 7:
        case 140 + 8:
        case 140 + 9:
          no = op - 140;
          brace_count[no]++;


          if (brace_count[no] <= (brace_min[no] <= brace_max[no]
                                  ? brace_min[no] : brace_max[no])) {
            rp = regstack_push(RS_BRCPLX_MORE, scan);
            if (rp == 
# 6918 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                     ((void *)0)
# 6918 "/home/ubuntu/neovim/src/nvim/regexp.c"
                         ) {
              status = 1;
            } else {
              rp->rs_no = (int16_t)no;
              reg_save(&rp->rs_un.regsave, &backpos);
              next = ((scan) + 3);

            }
            break;
          }


          if (brace_min[no] <= brace_max[no]) {

            if (brace_count[no] <= brace_max[no]) {
              rp = regstack_push(RS_BRCPLX_LONG, scan);
              if (rp == 
# 6934 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                       ((void *)0)
# 6934 "/home/ubuntu/neovim/src/nvim/regexp.c"
                           ) {
                status = 1;
              } else {
                rp->rs_no = (int16_t)no;
                reg_save(&rp->rs_un.regsave, &backpos);
                next = ((scan) + 3);

              }
            }
          } else {

            if (brace_count[no] <= brace_min[no]) {
              rp = regstack_push(RS_BRCPLX_SHORT, scan);
              if (rp == 
# 6947 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                       ((void *)0)
# 6947 "/home/ubuntu/neovim/src/nvim/regexp.c"
                           ) {
                status = 1;
              } else {
                reg_save(&rp->rs_un.regsave, &backpos);

              }
            }
          }
          break;

        case 14:
        case 7:
        case 8: {
          regstar_T rst;



          if (((int)(*(next))) == 5) {
            rst.nextb = *((next) + 3);
            if (rex.reg_ic) {
              if (mb_isupper(rst.nextb)) {
                rst.nextb_ic = mb_tolower(rst.nextb);
              } else {
                rst.nextb_ic = mb_toupper(rst.nextb);
              }
            } else {
              rst.nextb_ic = rst.nextb;
            }
          } else {
            rst.nextb = '\000';
            rst.nextb_ic = '\000';
          }
          if (op != 14) {
            rst.minval = (op == 7) ? 0 : 1;
            rst.maxval = (32767 << 16);
          } else {
            rst.minval = bl_minval;
            rst.maxval = bl_maxval;
          }





          rst.count = regrepeat(((scan) + 3), rst.maxval);
          if (got_int) {
            status = 1;
            break;
          }
          if (rst.minval <= rst.maxval
              ? rst.count >= rst.minval : rst.count >= rst.maxval) {



            if ((int64_t)((unsigned)regstack.ga_len >> 10) >= p_mmp) {
              emsg(gettext(e_pattern_uses_more_memory_than_maxmempattern));
              status = 1;
            } else {
              ga_grow(&regstack, sizeof(regstar_T));
              regstack.ga_len += (int)sizeof(regstar_T);
              rp = regstack_push(rst.minval <= rst.maxval ? RS_STAR_LONG : RS_STAR_SHORT, scan);
              if (rp == 
# 7008 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                       ((void *)0)
# 7008 "/home/ubuntu/neovim/src/nvim/regexp.c"
                           ) {
                status = 1;
              } else {
                *(((regstar_T *)rp) - 1) = rst;
                status = 3;
              }
            }
          } else {
            status = 5;
          }
        }
        break;

        case 10:
        case 9:
        case 13:
          rp = regstack_push(RS_NOMATCH, scan);
          if (rp == 
# 7025 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                   ((void *)0)
# 7025 "/home/ubuntu/neovim/src/nvim/regexp.c"
                       ) {
            status = 1;
          } else {
            rp->rs_no = (int16_t)op;
            reg_save(&rp->rs_un.regsave, &backpos);
            next = ((scan) + 3);

          }
          break;

        case 11:
        case 12:

          if ((int64_t)((unsigned)regstack.ga_len >> 10) >= p_mmp) {
            emsg(gettext(e_pattern_uses_more_memory_than_maxmempattern));
            status = 1;
          } else {
            ga_grow(&regstack, sizeof(regbehind_T));
            regstack.ga_len += (int)sizeof(regbehind_T);
            rp = regstack_push(RS_BEHIND1, scan);
            if (rp == 
# 7045 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                     ((void *)0)
# 7045 "/home/ubuntu/neovim/src/nvim/regexp.c"
                         ) {
              status = 1;
            } else {


              save_subexpr(((regbehind_T *)rp) - 1);

              rp->rs_no = (int16_t)op;
              reg_save(&rp->rs_un.regsave, &backpos);


            }
          }
          break;

        case 19:
          if ((rex.reg_match == 
# 7061 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
             ((void *)0)
# 7061 "/home/ubuntu/neovim/src/nvim/regexp.c"
             )) {
            if (behind_pos.rs_u.pos.col != (colnr_T)(rex.input - rex.line)
                || behind_pos.rs_u.pos.lnum != rex.lnum) {
              status = 5;
            }
          } else if (behind_pos.rs_u.ptr != rex.input) {
            status = 5;
          }
          break;

        case 18:
          if ((c != '\000' || !(rex.reg_match == 
# 7072 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                           ((void *)0)
# 7072 "/home/ubuntu/neovim/src/nvim/regexp.c"
                           ) || rex.lnum > rex.reg_maxline
               || rex.reg_line_lbr) && (c != '\n' || !rex.reg_line_lbr)) {
            status = 5;
          } else if (rex.reg_line_lbr) {
            (rex.input += utfc_ptr2len((char *)rex.input));
          } else {
            reg_nextline();
          }
          break;

        case 0:
          status = 4;
          break;

        default:
          iemsg(gettext(e_re_corr));



          status = 1;
          break;
        }
      }


      if (status != 2) {
        break;
      }


      scan = next;
    }



    while (!((&regstack)->ga_len <= 0) && status != 1) {
      rp = (regitem_T *)((char *)regstack.ga_data + regstack.ga_len) - 1;
      switch (rp->rs_state) {
      case RS_NOPEN:

        regstack_pop(&scan);
        break;

      case RS_MOPEN:

        if (status == 5) {
          { if ((rex.reg_match == 
# 7118 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
         ((void *)0)
# 7118 "/home/ubuntu/neovim/src/nvim/regexp.c"
         )) *(&rex.reg_startpos[rp->rs_no]) = (&rp->rs_un.sesave)->se_u.pos; else *(&rex.reg_startp[rp->rs_no]) = (&rp->rs_un.sesave)->se_u.ptr; }
                                                ;
        }
        regstack_pop(&scan);
        break;

      case RS_ZOPEN:

        if (status == 5) {
          { if ((rex.reg_match == 
# 7127 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
         ((void *)0)
# 7127 "/home/ubuntu/neovim/src/nvim/regexp.c"
         )) *(&reg_startzpos[rp->rs_no]) = (&rp->rs_un.sesave)->se_u.pos; else *(&reg_startzp[rp->rs_no]) = (&rp->rs_un.sesave)->se_u.ptr; }
                                             ;
        }
        regstack_pop(&scan);
        break;

      case RS_MCLOSE:

        if (status == 5) {
          { if ((rex.reg_match == 
# 7136 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
         ((void *)0)
# 7136 "/home/ubuntu/neovim/src/nvim/regexp.c"
         )) *(&rex.reg_endpos[rp->rs_no]) = (&rp->rs_un.sesave)->se_u.pos; else *(&rex.reg_endp[rp->rs_no]) = (&rp->rs_un.sesave)->se_u.ptr; }
                                              ;
        }
        regstack_pop(&scan);
        break;

      case RS_ZCLOSE:

        if (status == 5) {
          { if ((rex.reg_match == 
# 7145 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
         ((void *)0)
# 7145 "/home/ubuntu/neovim/src/nvim/regexp.c"
         )) *(&reg_endzpos[rp->rs_no]) = (&rp->rs_un.sesave)->se_u.pos; else *(&reg_endzp[rp->rs_no]) = (&rp->rs_un.sesave)->se_u.ptr; }
                                           ;
        }
        regstack_pop(&scan);
        break;

      case RS_BRANCH:
        if (status == 4) {

          regstack_pop(&scan);
        } else {
          if (status != 3) {

            reg_restore(&rp->rs_un.regsave, &backpos);
            scan = rp->rs_scan;
          }
          if (scan == 
# 7161 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                     ((void *)0) 
# 7161 "/home/ubuntu/neovim/src/nvim/regexp.c"
                          || ((int)(*(scan))) != 3) {

            status = 5;
            regstack_pop(&scan);
          } else {

            rp->rs_scan = regnext(scan);
            reg_save(&rp->rs_un.regsave, &backpos);
            scan = ((scan) + 3);
          }
        }
        break;

      case RS_BRCPLX_MORE:

        if (status == 5) {
          reg_restore(&rp->rs_un.regsave, &backpos);
          brace_count[rp->rs_no]--;
        }
        regstack_pop(&scan);
        break;

      case RS_BRCPLX_LONG:

        if (status == 5) {

          reg_restore(&rp->rs_un.regsave, &backpos);
          brace_count[rp->rs_no]--;

          status = 2;
        }
        regstack_pop(&scan);
        if (status == 2) {
          scan = regnext(scan);
        }
        break;

      case RS_BRCPLX_SHORT:

        if (status == 5) {

          reg_restore(&rp->rs_un.regsave, &backpos);
        }
        regstack_pop(&scan);
        if (status == 5) {
          scan = ((scan) + 3);
          status = 2;
        }
        break;

      case RS_NOMATCH:



        if (status == (rp->rs_no == 10 ? 4 : 5)) {
          status = 5;
        } else {
          status = 2;
          if (rp->rs_no != 13) {
            reg_restore(&rp->rs_un.regsave, &backpos);
          }
        }
        regstack_pop(&scan);
        if (status == 2) {
          scan = regnext(scan);
        }
        break;

      case RS_BEHIND1:
        if (status == 5) {
          regstack_pop(&scan);
          regstack.ga_len -= (int)sizeof(regbehind_T);
        } else {







          reg_save(&(((regbehind_T *)rp) - 1)->save_after, &backpos);







          (((regbehind_T *)rp) - 1)->save_behind = behind_pos;
          behind_pos = rp->rs_un.regsave;

          rp->rs_state = RS_BEHIND2;

          reg_restore(&rp->rs_un.regsave, &backpos);
          scan = ((rp->rs_scan) + 3) + 4;
        }
        break;

      case RS_BEHIND2:

        if (status == 4 && reg_save_equal(&behind_pos)) {

          behind_pos = (((regbehind_T *)rp) - 1)->save_behind;
          if (rp->rs_no == 11) {
            reg_restore(&(((regbehind_T *)rp) - 1)->save_after,
                        &backpos);
          } else {



            status = 5;
            restore_subexpr(((regbehind_T *)rp) - 1);
          }
          regstack_pop(&scan);
          regstack.ga_len -= (int)sizeof(regbehind_T);
        } else {
          int64_t limit;



          no = 1;
          limit = (((int64_t)(rp->rs_scan)[3] << 24) + ((int64_t)(rp->rs_scan)[4] << 16) + ((int64_t)(rp->rs_scan)[5] << 8) + (int64_t)(rp->rs_scan)[6]);
          if ((rex.reg_match == 
# 7283 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
             ((void *)0)
# 7283 "/home/ubuntu/neovim/src/nvim/regexp.c"
             )) {
            if (limit > 0
                && ((rp->rs_un.regsave.rs_u.pos.lnum
                     < behind_pos.rs_u.pos.lnum
                     ? (colnr_T)strlen((char *)rex.line)
                     : behind_pos.rs_u.pos.col)
                    - rp->rs_un.regsave.rs_u.pos.col >= limit)) {
              no = 0;
            } else if (rp->rs_un.regsave.rs_u.pos.col == 0) {
              if (rp->rs_un.regsave.rs_u.pos.lnum
                  < behind_pos.rs_u.pos.lnum
                  || reg_getline(--rp->rs_un.regsave.rs_u.pos.lnum)
                  == 
# 7295 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                    ((void *)0)
# 7295 "/home/ubuntu/neovim/src/nvim/regexp.c"
                        ) {
                no = 0;
              } else {
                reg_restore(&rp->rs_un.regsave, &backpos);
                rp->rs_un.regsave.rs_u.pos.col =
                  (colnr_T)strlen((char *)rex.line);
              }
            } else {
              const uint8_t *const line =
                (uint8_t *)reg_getline(rp->rs_un.regsave.rs_u.pos.lnum);

              rp->rs_un.regsave.rs_u.pos.col -=
                utf_head_off((char *)line,
                             (char *)line + rp->rs_un.regsave.rs_u.pos.col - 1)
                + 1;
            }
          } else {
            if (rp->rs_un.regsave.rs_u.ptr == rex.line) {
              no = 0;
            } else {
              (rp->rs_un.regsave.rs_u.ptr -= utf_head_off((char *)(rex.line), (char *)(rp->rs_un.regsave.rs_u.ptr) - 1) + 1);
              if (limit > 0
                  && (behind_pos.rs_u.ptr - rp->rs_un.regsave.rs_u.ptr) > (ptrdiff_t)limit) {
                no = 0;
              }
            }
          }
          if (no == 1) {

            reg_restore(&rp->rs_un.regsave, &backpos);
            scan = ((rp->rs_scan) + 3) + 4;
            if (status == 4) {


              status = 5;
              restore_subexpr(((regbehind_T *)rp) - 1);
            }
          } else {

            behind_pos = (((regbehind_T *)rp) - 1)->save_behind;
            if (rp->rs_no == 12) {
              reg_restore(&(((regbehind_T *)rp) - 1)->save_after,
                          &backpos);
              status = 4;
            } else {



              if (status == 4) {
                status = 5;
                restore_subexpr(((regbehind_T *)rp) - 1);
              }
            }
            regstack_pop(&scan);
            regstack.ga_len -= (int)sizeof(regbehind_T);
          }
        }
        break;

      case RS_STAR_LONG:
      case RS_STAR_SHORT: {
        regstar_T *rst = ((regstar_T *)rp) - 1;

        if (status == 4) {
          regstack_pop(&scan);
          regstack.ga_len -= (int)sizeof(regstar_T);
          break;
        }


        if (status != 3) {
          reg_restore(&rp->rs_un.regsave, &backpos);
        }


        while (
# 7370 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
              1
# 7370 "/home/ubuntu/neovim/src/nvim/regexp.c"
                  ) {
          if (status != 3) {

            if (rp->rs_state == RS_STAR_LONG) {


              if (--rst->count < rst->minval) {
                break;
              }
              if (rex.input == rex.line) {

                if (rex.lnum == 0) {
                  status = 5;
                  break;
                }
                rex.lnum--;
                rex.line = (uint8_t *)reg_getline(rex.lnum);

                if (rex.line == 
# 7388 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                               ((void *)0)
# 7388 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                   ) {
                  break;
                }
                rex.input = rex.line + reg_getline_len(rex.lnum);
                reg_breakcheck();
              } else {
                (rex.input -= utf_head_off((char *)(rex.line), (char *)(rex.input) - 1) + 1);
              }
            } else {




              if (rst->count == rst->minval
                  || regrepeat(((rp->rs_scan) + 3), 1L) == 0) {
                break;
              }
              rst->count++;
            }
            if (got_int) {
              break;
            }
          } else {
            status = 5;
          }


          if (rst->nextb == '\000' || *rex.input == rst->nextb
              || *rex.input == rst->nextb_ic) {
            reg_save(&rp->rs_un.regsave, &backpos);
            scan = regnext(rp->rs_scan);
            status = 2;
            break;
          }
        }
        if (status != 2) {

          regstack_pop(&scan);
          regstack.ga_len -= (int)sizeof(regstar_T);
          status = 5;
        }
      }
      break;
      }



      if (status == 2 || rp == (regitem_T *)
          ((char *)regstack.ga_data + regstack.ga_len) - 1) {
        break;
      }
    }


    if (status == 2) {
      continue;
    }


    if (((&regstack)->ga_len <= 0) || status == 1) {
      if (scan == 
# 7448 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                 ((void *)0)
# 7448 "/home/ubuntu/neovim/src/nvim/regexp.c"
                     ) {


        iemsg(gettext(e_re_corr));



      }
      return status == 4;
    }
  }


}







static int regtry(bt_regprog_T *prog, colnr_T col, proftime_T *tm, int *timed_out)
{
  rex.input = rex.line + col;
  rex.need_clear_subexpr = 
# 7472 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                          1
# 7472 "/home/ubuntu/neovim/src/nvim/regexp.c"
                              ;

  rex.need_clear_zsubexpr = (prog->reghasz == 1);

  if (regmatch(&prog->program[1], tm, timed_out) == 0) {
    return 0;
  }

  cleanup_subexpr();
  if ((rex.reg_match == 
# 7481 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
     ((void *)0)
# 7481 "/home/ubuntu/neovim/src/nvim/regexp.c"
     )) {
    if (rex.reg_startpos[0].lnum < 0) {
      rex.reg_startpos[0].lnum = 0;
      rex.reg_startpos[0].col = col;
    }
    if (rex.reg_endpos[0].lnum < 0) {
      rex.reg_endpos[0].lnum = rex.lnum;
      rex.reg_endpos[0].col = (int)(rex.input - rex.line);
    } else {

      rex.lnum = rex.reg_endpos[0].lnum;
    }
  } else {
    if (rex.reg_startp[0] == 
# 7494 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                            ((void *)0)
# 7494 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                ) {
      rex.reg_startp[0] = rex.line + col;
    }
    if (rex.reg_endp[0] == 
# 7497 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                          ((void *)0)
# 7497 "/home/ubuntu/neovim/src/nvim/regexp.c"
                              ) {
      rex.reg_endp[0] = rex.input;
    }
  }

  unref_extmatch(re_extmatch_out);
  re_extmatch_out = 
# 7503 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                   ((void *)0)
# 7503 "/home/ubuntu/neovim/src/nvim/regexp.c"
                       ;

  if (prog->reghasz == 1) {
    int i;

    cleanup_zsubexpr();
    re_extmatch_out = make_extmatch();
    for (i = 0; i < NSUBEXP; i++) {
      if ((rex.reg_match == 
# 7511 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
         ((void *)0)
# 7511 "/home/ubuntu/neovim/src/nvim/regexp.c"
         )) {

        if (reg_startzpos[i].lnum >= 0
            && reg_endzpos[i].lnum == reg_startzpos[i].lnum
            && reg_endzpos[i].col >= reg_startzpos[i].col) {
          re_extmatch_out->matches[i] =
            (uint8_t *)xstrnsave(reg_getline(reg_startzpos[i].lnum) + reg_startzpos[i].col,
                                 (size_t)(reg_endzpos[i].col - reg_startzpos[i].col));
        }
      } else {
        if (reg_startzp[i] != 
# 7521 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                             ((void *)0) 
# 7521 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                  && reg_endzp[i] != 
# 7521 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                                     ((void *)0)
# 7521 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                                         ) {
          re_extmatch_out->matches[i] =
            (uint8_t *)xstrnsave((char *)reg_startzp[i], (size_t)(reg_endzp[i] - reg_startzp[i]));
        }
      }
    }
  }
  return 1 + rex.lnum;
}
# 7539 "/home/ubuntu/neovim/src/nvim/regexp.c"
static int bt_regexec_both(uint8_t *line, colnr_T startcol, proftime_T *tm, int *timed_out)
{
  bt_regprog_T *prog;
  uint8_t *s;
  colnr_T col = startcol;
  int retval = 0;





  if (regstack.ga_data == 
# 7550 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                         ((void *)0)
# 7550 "/home/ubuntu/neovim/src/nvim/regexp.c"
                             ) {


    ga_init(&regstack, 1, 2048);
    ga_grow(&regstack, 2048);
    ga_set_growsize(&regstack, 2048 * 8);
  }

  if (backpos.ga_data == 
# 7558 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                        ((void *)0)
# 7558 "/home/ubuntu/neovim/src/nvim/regexp.c"
                            ) {
    ga_init(&backpos, sizeof(backpos_T), 64);
    ga_grow(&backpos, 64);
    ga_set_growsize(&backpos, 64 * 8);
  }

  if ((rex.reg_match == 
# 7564 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
     ((void *)0)
# 7564 "/home/ubuntu/neovim/src/nvim/regexp.c"
     )) {
    prog = (bt_regprog_T *)rex.reg_mmatch->regprog;
    line = (uint8_t *)reg_getline(0);
    rex.reg_startpos = rex.reg_mmatch->startpos;
    rex.reg_endpos = rex.reg_mmatch->endpos;
  } else {
    prog = (bt_regprog_T *)rex.reg_match->regprog;
    rex.reg_startp = (uint8_t **)rex.reg_match->startp;
    rex.reg_endp = (uint8_t **)rex.reg_match->endp;
  }


  if (prog == 
# 7576 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
             ((void *)0) 
# 7576 "/home/ubuntu/neovim/src/nvim/regexp.c"
                  || line == 
# 7576 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                             ((void *)0)
# 7576 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                 ) {
    iemsg(gettext(e_null));
    goto theend;
  }


  if (prog_magic_wrong()) {
    goto theend;
  }


  if (rex.reg_maxcol > 0 && col >= rex.reg_maxcol) {
    goto theend;
  }


  if (prog->regflags & 1) {
    rex.reg_ic = 
# 7593 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                1
# 7593 "/home/ubuntu/neovim/src/nvim/regexp.c"
                    ;
  } else if (prog->regflags & 2) {
    rex.reg_ic = 
# 7595 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                0
# 7595 "/home/ubuntu/neovim/src/nvim/regexp.c"
                     ;
  }


  if (prog->regflags & 8) {
    rex.reg_icombine = 
# 7600 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                      1
# 7600 "/home/ubuntu/neovim/src/nvim/regexp.c"
                          ;
  }


  if (prog->regmust != 
# 7604 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                      ((void *)0)
# 7604 "/home/ubuntu/neovim/src/nvim/regexp.c"
                          ) {
    int c = utf_ptr2char((char *)prog->regmust);
    s = line + col;



    if (!rex.reg_ic) {
      while ((s = (uint8_t *)vim_strchr((char *)s, c)) != 
# 7611 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                                         ((void *)0)
# 7611 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                                             ) {
        if (cstrncmp((char *)s, (char *)prog->regmust, &prog->regmlen) == 0) {
          break;
        }
        (s += utfc_ptr2len((char *)s));
      }
    } else {
      while ((s = (uint8_t *)cstrchr((char *)s, c)) != 
# 7618 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                                      ((void *)0)
# 7618 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                                          ) {
        if (cstrncmp((char *)s, (char *)prog->regmust, &prog->regmlen) == 0) {
          break;
        }
        (s += utfc_ptr2len((char *)s));
      }
    }
    if (s == 
# 7625 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
            ((void *)0)
# 7625 "/home/ubuntu/neovim/src/nvim/regexp.c"
                ) {
      goto theend;
    }
  }

  rex.line = line;
  rex.lnum = 0;
  reg_toolong = 
# 7632 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
               0
# 7632 "/home/ubuntu/neovim/src/nvim/regexp.c"
                    ;


  if (prog->reganch) {
    int c = utf_ptr2char((char *)rex.line + col);
    if (prog->regstart == '\000'
        || prog->regstart == c
        || (rex.reg_ic
            && (utf_fold(prog->regstart) == utf_fold(c)
                || (c < 255 && prog->regstart < 255
                    && mb_tolower(prog->regstart) == mb_tolower(c))))) {
      retval = regtry(prog, col, tm, timed_out);
    } else {
      retval = 0;
    }
  } else {
    int tm_count = 0;

    while (!got_int) {
      if (prog->regstart != '\000') {

        s = (uint8_t *)cstrchr((char *)rex.line + col, prog->regstart);
        if (s == 
# 7654 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                ((void *)0)
# 7654 "/home/ubuntu/neovim/src/nvim/regexp.c"
                    ) {
          retval = 0;
          break;
        }
        col = (int)(s - rex.line);
      }


      if (rex.reg_maxcol > 0 && col >= rex.reg_maxcol) {
        retval = 0;
        break;
      }

      retval = regtry(prog, col, tm, timed_out);
      if (retval > 0) {
        break;
      }


      if (rex.lnum != 0) {
        rex.lnum = 0;
        rex.line = (uint8_t *)reg_getline(0);
      }
      if (rex.line[col] == '\000') {
        break;
      }
      col += utfc_ptr2len((char *)rex.line + col);

      if (tm != 
# 7682 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
               ((void *)0) 
# 7682 "/home/ubuntu/neovim/src/nvim/regexp.c"
                    && ++tm_count == 20) {
        tm_count = 0;
        if (profile_passed_limit(*tm)) {
          if (timed_out != 
# 7685 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                          ((void *)0)
# 7685 "/home/ubuntu/neovim/src/nvim/regexp.c"
                              ) {
            *timed_out = 
# 7686 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                        1
# 7686 "/home/ubuntu/neovim/src/nvim/regexp.c"
                            ;
          }
          break;
        }
      }
    }
  }

theend:


  if (reg_tofreelen > 400) {
    do { void **ptr_ = (void **)&(reg_tofree); xfree(*ptr_); *ptr_ = 
# 7698 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
   ((void *)0)
# 7698 "/home/ubuntu/neovim/src/nvim/regexp.c"
   ; (void)(*ptr_); } while (0);
  }
  if (regstack.ga_maxlen > 2048) {
    ga_clear(&regstack);
  }
  if (backpos.ga_maxlen > 64) {
    ga_clear(&backpos);
  }

  if (retval > 0) {


    if ((rex.reg_match == 
# 7710 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
       ((void *)0)
# 7710 "/home/ubuntu/neovim/src/nvim/regexp.c"
       )) {
      const lpos_T *const start = &rex.reg_mmatch->startpos[0];
      const lpos_T *const end = &rex.reg_mmatch->endpos[0];

      if (end->lnum < start->lnum
          || (end->lnum == start->lnum && end->col < start->col)) {
        rex.reg_mmatch->endpos[0] = rex.reg_mmatch->startpos[0];
      }



      rex.reg_mmatch->rmm_matchcol = col;
    } else {
      if (rex.reg_match->endp[0] < rex.reg_match->startp[0]) {
        rex.reg_match->endp[0] = rex.reg_match->startp[0];
      }



      rex.reg_match->rm_matchcol = col;
    }
  }

  return retval;
}
# 7745 "/home/ubuntu/neovim/src/nvim/regexp.c"
static int bt_regexec_nl(regmatch_T *rmp, uint8_t *line, colnr_T col, 
# 7745 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                                                     _Bool 
# 7745 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                                                          line_lbr)
{
  rex.reg_match = rmp;
  rex.reg_mmatch = 
# 7748 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                  ((void *)0)
# 7748 "/home/ubuntu/neovim/src/nvim/regexp.c"
                      ;
  rex.reg_maxline = 0;
  rex.reg_line_lbr = line_lbr;
  rex.reg_buf = curbuf;
  rex.reg_win = 
# 7752 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
               ((void *)0)
# 7752 "/home/ubuntu/neovim/src/nvim/regexp.c"
                   ;
  rex.reg_ic = rmp->rm_ic;
  rex.reg_icombine = 
# 7754 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                    0
# 7754 "/home/ubuntu/neovim/src/nvim/regexp.c"
                         ;
  rex.reg_nobreak = rmp->regprog->re_flags & 16;
  rex.reg_maxcol = 0;

  int64_t r = bt_regexec_both(line, col, 
# 7758 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                        ((void *)0)
# 7758 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                            , 
# 7758 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                              ((void *)0)
# 7758 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                                  );
  
# 7759 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
 ((void) sizeof ((
# 7759 "/home/ubuntu/neovim/src/nvim/regexp.c"
 r <= 0x7fffffff
# 7759 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
 ) ? 1 : 0), __extension__ ({ if (
# 7759 "/home/ubuntu/neovim/src/nvim/regexp.c"
 r <= 0x7fffffff
# 7759 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
 ) ; else __assert_fail (
# 7759 "/home/ubuntu/neovim/src/nvim/regexp.c"
 "r <= INT_MAX"
# 7759 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
 , "/home/ubuntu/neovim/src/nvim/regexp.c", 7759, __extension__ __PRETTY_FUNCTION__); }))
# 7759 "/home/ubuntu/neovim/src/nvim/regexp.c"
                     ;
  return (int)r;
}
# 7775 "/home/ubuntu/neovim/src/nvim/regexp.c"
static int bt_regexec_multi(regmmatch_T *rmp, win_T *win, buf_T *buf, linenr_T lnum, colnr_T col,
                            proftime_T *tm, int *timed_out)
{
  init_regexec_multi(rmp, win, buf, lnum);
  return bt_regexec_both(
# 7779 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                        ((void *)0)
# 7779 "/home/ubuntu/neovim/src/nvim/regexp.c"
                            , col, tm, timed_out);
}


static int re_num_cmp(uint32_t val, const uint8_t *scan)
{
  uint32_t n = (uint32_t)(((int64_t)(scan)[3] << 24) + ((int64_t)(scan)[4] << 16) + ((int64_t)(scan)[5] << 8) + (int64_t)(scan)[6]);

  if ((scan)[7] == '>') {
    return val > n;
  }
  if ((scan)[7] == '<') {
    return val < n;
  }
  return val == n;
}
# 8299 "/home/ubuntu/neovim/src/nvim/regexp.c"
enum {
  NFA_SPLIT = -1024,
  NFA_MATCH,
  NFA_EMPTY,

  NFA_START_COLL,
  NFA_END_COLL,
  NFA_START_NEG_COLL,
  NFA_END_NEG_COLL,
  NFA_RANGE,

  NFA_RANGE_MIN,
  NFA_RANGE_MAX,

  NFA_CONCAT,

  NFA_OR,
  NFA_STAR,
  NFA_STAR_NONGREEDY,
  NFA_QUEST,
  NFA_QUEST_NONGREEDY,

  NFA_BOL,
  NFA_EOL,
  NFA_BOW,
  NFA_EOW,
  NFA_BOF,
  NFA_EOF,
  NFA_NEWL,
  NFA_ZSTART,
  NFA_ZEND,
  NFA_NOPEN,
  NFA_NCLOSE,
  NFA_START_INVISIBLE,
  NFA_START_INVISIBLE_FIRST,
  NFA_START_INVISIBLE_NEG,
  NFA_START_INVISIBLE_NEG_FIRST,
  NFA_START_INVISIBLE_BEFORE,
  NFA_START_INVISIBLE_BEFORE_FIRST,
  NFA_START_INVISIBLE_BEFORE_NEG,
  NFA_START_INVISIBLE_BEFORE_NEG_FIRST,
  NFA_START_PATTERN,
  NFA_END_INVISIBLE,
  NFA_END_INVISIBLE_NEG,
  NFA_END_PATTERN,
  NFA_COMPOSING,

  NFA_END_COMPOSING,
  NFA_ANY_COMPOSING,
  NFA_OPT_CHARS,


  NFA_PREV_ATOM_NO_WIDTH,
  NFA_PREV_ATOM_NO_WIDTH_NEG,
  NFA_PREV_ATOM_JUST_BEFORE,
  NFA_PREV_ATOM_JUST_BEFORE_NEG,
  NFA_PREV_ATOM_LIKE_PATTERN,

  NFA_BACKREF1,
  NFA_BACKREF2,
  NFA_BACKREF3,
  NFA_BACKREF4,
  NFA_BACKREF5,
  NFA_BACKREF6,
  NFA_BACKREF7,
  NFA_BACKREF8,
  NFA_BACKREF9,
  NFA_ZREF1,
  NFA_ZREF2,
  NFA_ZREF3,
  NFA_ZREF4,
  NFA_ZREF5,
  NFA_ZREF6,
  NFA_ZREF7,
  NFA_ZREF8,
  NFA_ZREF9,
  NFA_SKIP,

  NFA_MOPEN,
  NFA_MOPEN1,
  NFA_MOPEN2,
  NFA_MOPEN3,
  NFA_MOPEN4,
  NFA_MOPEN5,
  NFA_MOPEN6,
  NFA_MOPEN7,
  NFA_MOPEN8,
  NFA_MOPEN9,

  NFA_MCLOSE,
  NFA_MCLOSE1,
  NFA_MCLOSE2,
  NFA_MCLOSE3,
  NFA_MCLOSE4,
  NFA_MCLOSE5,
  NFA_MCLOSE6,
  NFA_MCLOSE7,
  NFA_MCLOSE8,
  NFA_MCLOSE9,

  NFA_ZOPEN,
  NFA_ZOPEN1,
  NFA_ZOPEN2,
  NFA_ZOPEN3,
  NFA_ZOPEN4,
  NFA_ZOPEN5,
  NFA_ZOPEN6,
  NFA_ZOPEN7,
  NFA_ZOPEN8,
  NFA_ZOPEN9,

  NFA_ZCLOSE,
  NFA_ZCLOSE1,
  NFA_ZCLOSE2,
  NFA_ZCLOSE3,
  NFA_ZCLOSE4,
  NFA_ZCLOSE5,
  NFA_ZCLOSE6,
  NFA_ZCLOSE7,
  NFA_ZCLOSE8,
  NFA_ZCLOSE9,


  NFA_ANY,
  NFA_IDENT,
  NFA_SIDENT,
  NFA_KWORD,
  NFA_SKWORD,
  NFA_FNAME,
  NFA_SFNAME,
  NFA_PRINT,
  NFA_SPRINT,
  NFA_WHITE,
  NFA_NWHITE,
  NFA_DIGIT,
  NFA_NDIGIT,
  NFA_HEX,
  NFA_NHEX,
  NFA_OCTAL,
  NFA_NOCTAL,
  NFA_WORD,
  NFA_NWORD,
  NFA_HEAD,
  NFA_NHEAD,
  NFA_ALPHA,
  NFA_NALPHA,
  NFA_LOWER,
  NFA_NLOWER,
  NFA_UPPER,
  NFA_NUPPER,
  NFA_LOWER_IC,
  NFA_NLOWER_IC,
  NFA_UPPER_IC,
  NFA_NUPPER_IC,

  NFA_FIRST_NL = NFA_ANY + 31,
  NFA_LAST_NL = NFA_NUPPER_IC + 31,

  NFA_CURSOR,
  NFA_LNUM,
  NFA_LNUM_GT,
  NFA_LNUM_LT,
  NFA_COL,
  NFA_COL_GT,
  NFA_COL_LT,
  NFA_VCOL,
  NFA_VCOL_GT,
  NFA_VCOL_LT,
  NFA_MARK,
  NFA_MARK_GT,
  NFA_MARK_LT,
  NFA_VISUAL,


  NFA_CLASS_ALNUM,
  NFA_CLASS_ALPHA,
  NFA_CLASS_BLANK,
  NFA_CLASS_CNTRL,
  NFA_CLASS_DIGIT,
  NFA_CLASS_GRAPH,
  NFA_CLASS_LOWER,
  NFA_CLASS_PRINT,
  NFA_CLASS_PUNCT,
  NFA_CLASS_SPACE,
  NFA_CLASS_UPPER,
  NFA_CLASS_XDIGIT,
  NFA_CLASS_TAB,
  NFA_CLASS_RETURN,
  NFA_CLASS_BACKSPACE,
  NFA_CLASS_ESCAPE,
  NFA_CLASS_IDENT,
  NFA_CLASS_KEYWORD,
  NFA_CLASS_FNAME,
};


static int nfa_classcodes[] = {
  NFA_ANY, NFA_IDENT, NFA_SIDENT, NFA_KWORD, NFA_SKWORD,
  NFA_FNAME, NFA_SFNAME, NFA_PRINT, NFA_SPRINT,
  NFA_WHITE, NFA_NWHITE, NFA_DIGIT, NFA_NDIGIT,
  NFA_HEX, NFA_NHEX, NFA_OCTAL, NFA_NOCTAL,
  NFA_WORD, NFA_NWORD, NFA_HEAD, NFA_NHEAD,
  NFA_ALPHA, NFA_NALPHA, NFA_LOWER, NFA_NLOWER,
  NFA_UPPER, NFA_NUPPER
};

static const char e_nul_found[] = "E865: (NFA) Regexp end encountered prematurely";
static const char e_misplaced[] = "E866: (NFA regexp) Misplaced %c";
static const char e_ill_char_class[] = "E877: (NFA regexp) Invalid character class: %" 
# 8507 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                      "l" "d"
# 8507 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                                                                                ;
static const char e_value_too_large[] = "E951: \\% value too large";


static int nfa_re_flags;
static int *post_start;
static int *post_end;
static int *post_ptr;




static 
# 8519 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
      _Bool 
# 8519 "/home/ubuntu/neovim/src/nvim/regexp.c"
           wants_nfa;

static int nstate;
static int istate;


static save_se_T *nfa_endp = 
# 8525 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                            ((void *)0)
# 8525 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                ;


static int nfa_ll_index = 0;
# 8542 "/home/ubuntu/neovim/src/nvim/regexp.c"
static void nfa_regcomp_start(uint8_t *expr, int re_flags)
{
  size_t postfix_size;
  size_t nstate_max;

  nstate = 0;
  istate = 0;

  nstate_max = (strlen((char *)expr) + 1) * 25;



  nstate_max += 1000;


  postfix_size = sizeof(int) * nstate_max;

  post_start = (int *)xmalloc(postfix_size);
  post_ptr = post_start;
  post_end = post_start + nstate_max;
  wants_nfa = 
# 8562 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
             0
# 8562 "/home/ubuntu/neovim/src/nvim/regexp.c"
                  ;
  rex.nfa_has_zend = 
# 8563 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                    0
# 8563 "/home/ubuntu/neovim/src/nvim/regexp.c"
                         ;
  rex.nfa_has_backref = 
# 8564 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                       0
# 8564 "/home/ubuntu/neovim/src/nvim/regexp.c"
                            ;


  regcomp_start(expr, re_flags);
}



static int nfa_get_reganch(nfa_state_T *start, int depth)
{
  nfa_state_T *p = start;

  if (depth > 4) {
    return 0;
  }

  while (p != 
# 8580 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
             ((void *)0)
# 8580 "/home/ubuntu/neovim/src/nvim/regexp.c"
                 ) {
    switch (p->c) {
    case NFA_BOL:
    case NFA_BOF:
      return 1;

    case NFA_ZSTART:
    case NFA_ZEND:
    case NFA_CURSOR:
    case NFA_VISUAL:

    case NFA_MOPEN:
    case NFA_MOPEN1:
    case NFA_MOPEN2:
    case NFA_MOPEN3:
    case NFA_MOPEN4:
    case NFA_MOPEN5:
    case NFA_MOPEN6:
    case NFA_MOPEN7:
    case NFA_MOPEN8:
    case NFA_MOPEN9:
    case NFA_NOPEN:
    case NFA_ZOPEN:
    case NFA_ZOPEN1:
    case NFA_ZOPEN2:
    case NFA_ZOPEN3:
    case NFA_ZOPEN4:
    case NFA_ZOPEN5:
    case NFA_ZOPEN6:
    case NFA_ZOPEN7:
    case NFA_ZOPEN8:
    case NFA_ZOPEN9:
      p = p->out;
      break;

    case NFA_SPLIT:
      return nfa_get_reganch(p->out, depth + 1)
             && nfa_get_reganch(p->out1, depth + 1);

    default:
      return 0;
    }
  }
  return 0;
}



static int nfa_get_regstart(nfa_state_T *start, int depth)
{
  nfa_state_T *p = start;

  if (depth > 4) {
    return 0;
  }

  while (p != 
# 8636 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
             ((void *)0)
# 8636 "/home/ubuntu/neovim/src/nvim/regexp.c"
                 ) {
    switch (p->c) {

    case NFA_BOL:
    case NFA_BOF:
    case NFA_BOW:
    case NFA_EOW:
    case NFA_ZSTART:
    case NFA_ZEND:
    case NFA_CURSOR:
    case NFA_VISUAL:
    case NFA_LNUM:
    case NFA_LNUM_GT:
    case NFA_LNUM_LT:
    case NFA_COL:
    case NFA_COL_GT:
    case NFA_COL_LT:
    case NFA_VCOL:
    case NFA_VCOL_GT:
    case NFA_VCOL_LT:
    case NFA_MARK:
    case NFA_MARK_GT:
    case NFA_MARK_LT:

    case NFA_MOPEN:
    case NFA_MOPEN1:
    case NFA_MOPEN2:
    case NFA_MOPEN3:
    case NFA_MOPEN4:
    case NFA_MOPEN5:
    case NFA_MOPEN6:
    case NFA_MOPEN7:
    case NFA_MOPEN8:
    case NFA_MOPEN9:
    case NFA_NOPEN:
    case NFA_ZOPEN:
    case NFA_ZOPEN1:
    case NFA_ZOPEN2:
    case NFA_ZOPEN3:
    case NFA_ZOPEN4:
    case NFA_ZOPEN5:
    case NFA_ZOPEN6:
    case NFA_ZOPEN7:
    case NFA_ZOPEN8:
    case NFA_ZOPEN9:
      p = p->out;
      break;

    case NFA_SPLIT: {
      int c1 = nfa_get_regstart(p->out, depth + 1);
      int c2 = nfa_get_regstart(p->out1, depth + 1);

      if (c1 == c2) {
        return c1;
      }
      return 0;
    }

    default:
      if (p->c > 0) {
        return p->c;
      }
      return 0;
    }
  }
  return 0;
}




static uint8_t *nfa_get_match_text(nfa_state_T *start)
{
  nfa_state_T *p = start;
  int len = 0;
  uint8_t *ret;
  uint8_t *s;

  if (p->c != NFA_MOPEN) {
    return 
# 8715 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
          ((void *)0)
# 8715 "/home/ubuntu/neovim/src/nvim/regexp.c"
              ;
  }
  p = p->out;
  while (p->c > 0) {
    len += utf_char2len(p->c);
    p = p->out;
  }
  if (p->c != NFA_MCLOSE || p->out->c != NFA_MATCH) {
    return 
# 8723 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
          ((void *)0)
# 8723 "/home/ubuntu/neovim/src/nvim/regexp.c"
              ;
  }

  ret = xmalloc((size_t)len);
  p = start->out->out;
  s = ret;
  while (p->c > 0) {
    s += utf_char2bytes(p->c, (char *)s);
    p = p->out;
  }
  *s = '\000';

  return ret;
}



static void realloc_post_list(void)
{


  const size_t new_max = (size_t)(post_end - post_start) * 3 / 2;
  int *new_start = xrealloc(post_start, new_max * sizeof(int));
  post_ptr = new_start + (post_ptr - post_start);
  post_end = new_start + new_max;
  post_start = new_start;
}
# 8759 "/home/ubuntu/neovim/src/nvim/regexp.c"
static int nfa_recognize_char_class(uint8_t *start, const uint8_t *end, int extra_newl)
{
# 8770 "/home/ubuntu/neovim/src/nvim/regexp.c"
  uint8_t *p;
  int config = 0;

  
# 8773 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
 _Bool 
# 8773 "/home/ubuntu/neovim/src/nvim/regexp.c"
      newl = extra_newl == 
# 8773 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                           1
# 8773 "/home/ubuntu/neovim/src/nvim/regexp.c"
                               ;

  if (*end != ']') {
    return 0;
  }
  p = start;
  if (*p == '^') {
    config |= 0x80;
    p++;
  }

  while (p < end) {
    if (p + 2 < end && *(p + 1) == '-') {
      switch (*p) {
      case '0':
        if (*(p + 2) == '9') {
          config |= 0x02;
          break;
        } else if (*(p + 2) == '7') {
          config |= 0x04;
          break;
        }
        return 0;
      case 'a':
        if (*(p + 2) == 'z') {
          config |= 0x10;
          break;
        } else if (*(p + 2) == 'f') {
          config |= 0x40;
          break;
        }
        return 0;
      case 'A':
        if (*(p + 2) == 'Z') {
          config |= 0x08;
          break;
        } else if (*(p + 2) == 'F') {
          config |= 0x20;
          break;
        }
        return 0;
      default:
        return 0;
      }
      p += 3;
    } else if (p + 1 < end && *p == '\\' && *(p + 1) == 'n') {
      newl = 
# 8819 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
            1
# 8819 "/home/ubuntu/neovim/src/nvim/regexp.c"
                ;
      p += 2;
    } else if (*p == '_') {
      config |= 0x01;
      p++;
    } else if (*p == '\n') {
      newl = 
# 8825 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
            1
# 8825 "/home/ubuntu/neovim/src/nvim/regexp.c"
                ;
      p++;
    } else {
      return 0;
    }
  }

  if (p != end) {
    return 0;
  }

  if (newl == 
# 8836 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
             1
# 8836 "/home/ubuntu/neovim/src/nvim/regexp.c"
                 ) {
    extra_newl = 31;
  }

  switch (config) {
  case 0x02:
    return extra_newl + NFA_DIGIT;
  case 0x80 | 0x02:
    return extra_newl + NFA_NDIGIT;
  case 0x40 | 0x20 | 0x02:
    return extra_newl + NFA_HEX;
  case 0x80 | 0x40 | 0x20 | 0x02:
    return extra_newl + NFA_NHEX;
  case 0x04:
    return extra_newl + NFA_OCTAL;
  case 0x80 | 0x04:
    return extra_newl + NFA_NOCTAL;
  case 0x10 | 0x08 | 0x02 | 0x01:
    return extra_newl + NFA_WORD;
  case 0x80 | 0x10 | 0x08 | 0x02 | 0x01:
    return extra_newl + NFA_NWORD;
  case 0x10 | 0x08 | 0x01:
    return extra_newl + NFA_HEAD;
  case 0x80 | 0x10 | 0x08 | 0x01:
    return extra_newl + NFA_NHEAD;
  case 0x10 | 0x08:
    return extra_newl + NFA_ALPHA;
  case 0x80 | 0x10 | 0x08:
    return extra_newl + NFA_NALPHA;
  case 0x10:
    return extra_newl + NFA_LOWER_IC;
  case 0x80 | 0x10:
    return extra_newl + NFA_NLOWER_IC;
  case 0x08:
    return extra_newl + NFA_UPPER_IC;
  case 0x80 | 0x08:
    return extra_newl + NFA_NUPPER_IC;
  }
  return 0;
}







static void nfa_emit_equi_class(int c)
{


  {
# 8943 "/home/ubuntu/neovim/src/nvim/regexp.c"
    switch (c) {
    case 'A':
    case 0xc0:
    case 0xc1:
    case 0xc2:
    case 0xc3:
    case 0xc4:
    case 0xc5:
    case 0x100:
    case 0x102:
    case 0x104:
    case 0x1cd:
    case 0x1de:
    case 0x1e0:
    case 0x1fa:
    case 0x200:
    case 0x202:
    case 0x226:
    case 0x23a:
    case 0x1e00:
    case 0x1ea0:
    case 0x1ea2:
    case 0x1ea4:
    case 0x1ea6:
    case 0x1ea8:
    case 0x1eaa:
    case 0x1eac:
    case 0x1eae:
    case 0x1eb0:
    case 0x1eb2:
    case 0x1eb4:
    case 0x1eb6:
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 'A'; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0xc0; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0xc1; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0xc2; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0xc3; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0xc4; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0xc5; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x100; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x102; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x104; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1cd; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1de; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e0; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1fa; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x200; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x202; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x226; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x23a; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e00; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1ea0; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1ea2; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1ea4; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1ea6; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1ea8; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1eaa; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1eac; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1eae; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1eb0; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1eb2; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1eb6; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1eb4; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      return;

    case 'B':
    case 0x181:
    case 0x243:
    case 0x1e02:
    case 0x1e04:
    case 0x1e06:
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 'B'; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x181; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x243; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e02; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e04; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e06; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      return;

    case 'C':
    case 0xc7:
    case 0x106:
    case 0x108:
    case 0x10a:
    case 0x10c:
    case 0x187:
    case 0x23b:
    case 0x1e08:
    case 0xa792:
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 'C'; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0xc7; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x106; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x108; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x10a; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x10c; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x187; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x23b; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e08; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0xa792; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      return;

    case 'D':
    case 0x10e:
    case 0x110:
    case 0x18a:
    case 0x1e0a:
    case 0x1e0c:
    case 0x1e0e:
    case 0x1e10:
    case 0x1e12:
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 'D'; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x10e; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x110; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x18a; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e0a; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e0c; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e0e; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e10; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e12; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      return;

    case 'E':
    case 0xc8:
    case 0xc9:
    case 0xca:
    case 0xcb:
    case 0x112:
    case 0x114:
    case 0x116:
    case 0x118:
    case 0x11a:
    case 0x204:
    case 0x206:
    case 0x228:
    case 0x246:
    case 0x1e14:
    case 0x1e16:
    case 0x1e18:
    case 0x1e1a:
    case 0x1e1c:
    case 0x1eb8:
    case 0x1eba:
    case 0x1ebc:
    case 0x1ebe:
    case 0x1ec0:
    case 0x1ec2:
    case 0x1ec4:
    case 0x1ec6:
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 'E'; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0xc8; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0xc9; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0xca; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0xcb; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x112; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x114; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x116; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x118; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x11a; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x204; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x206; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x228; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x246; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e14; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e16; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e18; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e1a; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e1c; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1eb8; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1eba; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1ebc; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1ebe; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1ec0; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1ec2; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1ec4; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1ec6; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      return;

    case 'F':
    case 0x191:
    case 0x1e1e:
    case 0xa798:
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 'F'; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x191; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e1e; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0xa798; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      return;

    case 'G':
    case 0x11c:
    case 0x11e:
    case 0x120:
    case 0x122:
    case 0x193:
    case 0x1e4:
    case 0x1e6:
    case 0x1f4:
    case 0x1e20:
    case 0xa7a0:
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 'G'; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x11c; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x11e; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x120; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x122; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x193; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e4; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e6; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1f4; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e20; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0xa7a0; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      return;

    case 'H':
    case 0x124:
    case 0x126:
    case 0x21e:
    case 0x1e22:
    case 0x1e24:
    case 0x1e26:
    case 0x1e28:
    case 0x1e2a:
    case 0x2c67:
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 'H'; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x124; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x126; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x21e; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e22; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e24; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e26; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e28; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e2a; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x2c67; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      return;

    case 'I':
    case 0xcc:
    case 0xcd:
    case 0xce:
    case 0xcf:
    case 0x128:
    case 0x12a:
    case 0x12c:
    case 0x12e:
    case 0x130:
    case 0x197:
    case 0x1cf:
    case 0x208:
    case 0x20a:
    case 0x1e2c:
    case 0x1e2e:
    case 0x1ec8:
    case 0x1eca:
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 'I'; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0xcc; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0xcd; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0xce; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0xcf; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x128; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x12a; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x12c; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x12e; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x130; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x197; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1cf; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x208; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x20a; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e2c; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e2e; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1ec8; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1eca; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      return;

    case 'J':
    case 0x134:
    case 0x248:
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 'J'; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x134; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x248; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      return;

    case 'K':
    case 0x136:
    case 0x198:
    case 0x1e8:
    case 0x1e30:
    case 0x1e32:
    case 0x1e34:
    case 0x2c69:
    case 0xa740:
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 'K'; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x136; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x198; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e8; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e30; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e32; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e34; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x2c69; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0xa740; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      return;

    case 'L':
    case 0x139:
    case 0x13b:
    case 0x13d:
    case 0x13f:
    case 0x141:
    case 0x23d:
    case 0x1e36:
    case 0x1e38:
    case 0x1e3a:
    case 0x1e3c:
    case 0x2c60:
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 'L'; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x139; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x13b; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x13d; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x13f; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x141; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x23d; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e36; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e38; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e3a; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e3c; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x2c60; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      return;

    case 'M':
    case 0x1e3e:
    case 0x1e40:
    case 0x1e42:
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 'M'; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e3e; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e40; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e42; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      return;

    case 'N':
    case 0xd1:
    case 0x143:
    case 0x145:
    case 0x147:
    case 0x1f8:
    case 0x1e44:
    case 0x1e46:
    case 0x1e48:
    case 0x1e4a:
    case 0xa7a4:
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 'N'; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0xd1; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x143; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x145; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x147; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1f8; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e44; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e46; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e48; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e4a; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0xa7a4; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      return;

    case 'O':
    case 0xd2:
    case 0xd3:
    case 0xd4:
    case 0xd5:
    case 0xd6:
    case 0xd8:
    case 0x14c:
    case 0x14e:
    case 0x150:
    case 0x19f:
    case 0x1a0:
    case 0x1d1:
    case 0x1ea:
    case 0x1ec:
    case 0x1fe:
    case 0x20c:
    case 0x20e:
    case 0x22a:
    case 0x22c:
    case 0x22e:
    case 0x230:
    case 0x1e4c:
    case 0x1e4e:
    case 0x1e50:
    case 0x1e52:
    case 0x1ecc:
    case 0x1ece:
    case 0x1ed0:
    case 0x1ed2:
    case 0x1ed4:
    case 0x1ed6:
    case 0x1ed8:
    case 0x1eda:
    case 0x1edc:
    case 0x1ede:
    case 0x1ee0:
    case 0x1ee2:
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 'O'; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0xd2; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0xd3; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0xd4; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0xd5; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0xd6; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0xd8; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x14c; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x14e; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x150; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x19f; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1a0; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1d1; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1ea; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1ec; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1fe; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x20c; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x20e; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x22a; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x22c; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x22e; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x230; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e4c; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e4e; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e50; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e52; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1ecc; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1ece; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1ed0; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1ed2; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1ed4; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1ed6; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1ed8; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1eda; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1edc; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1ede; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1ee0; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1ee2; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      return;

    case 'P':
    case 0x1a4:
    case 0x1e54:
    case 0x1e56:
    case 0x2c63:
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 'P'; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1a4; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e54; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e56; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x2c63; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      return;

    case 'Q':
    case 0x24a:
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 'Q'; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x24a; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      return;

    case 'R':
    case 0x154:
    case 0x156:
    case 0x158:
    case 0x210:
    case 0x212:
    case 0x24c:
    case 0x1e58:
    case 0x1e5a:
    case 0x1e5c:
    case 0x1e5e:
    case 0x2c64:
    case 0xa7a6:
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 'R'; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x154; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x156; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x158; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x210; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x212; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x24c; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e58; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e5a; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e5c; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e5e; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x2c64; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0xa7a6; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      return;

    case 'S':
    case 0x15a:
    case 0x15c:
    case 0x15e:
    case 0x160:
    case 0x218:
    case 0x1e60:
    case 0x1e62:
    case 0x1e64:
    case 0x1e66:
    case 0x1e68:
    case 0x2c7e:
    case 0xa7a8:
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 'S'; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x15a; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x15c; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x15e; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x160; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x218; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e60; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e62; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e64; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e66; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e68; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x2c7e; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0xa7a8; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      return;

    case 'T':
    case 0x162:
    case 0x164:
    case 0x166:
    case 0x1ac:
    case 0x1ae:
    case 0x21a:
    case 0x23e:
    case 0x1e6a:
    case 0x1e6c:
    case 0x1e6e:
    case 0x1e70:
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 'T'; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x162; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x164; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x166; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1ac; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1ae; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x23e; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x21a; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e6a; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e6c; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e6e; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e70; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      return;

    case 'U':
    case 0xd9:
    case 0xda:
    case 0xdc:
    case 0xdb:
    case 0x168:
    case 0x16a:
    case 0x16c:
    case 0x16e:
    case 0x170:
    case 0x172:
    case 0x1af:
    case 0x1d3:
    case 0x1d5:
    case 0x1d7:
    case 0x1d9:
    case 0x1db:
    case 0x214:
    case 0x216:
    case 0x244:
    case 0x1e72:
    case 0x1e74:
    case 0x1e76:
    case 0x1e78:
    case 0x1e7a:
    case 0x1ee4:
    case 0x1ee6:
    case 0x1ee8:
    case 0x1eea:
    case 0x1eec:
    case 0x1eee:
    case 0x1ef0:
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 'U'; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0xd9; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0xda; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0xdc; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0xdb; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x168; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x16a; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x16c; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x16e; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x170; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x172; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1af; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1d3; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1d5; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1d7; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1d9; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1db; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x214; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x216; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x244; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e72; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e74; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e76; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e78; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e7a; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1ee4; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1ee6; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1ee8; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1eea; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1eec; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1eee; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1ef0; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      return;

    case 'V':
    case 0x1b2:
    case 0x1e7c:
    case 0x1e7e:
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 'V'; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1b2; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e7c; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e7e; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      return;

    case 'W':
    case 0x174:
    case 0x1e80:
    case 0x1e82:
    case 0x1e84:
    case 0x1e86:
    case 0x1e88:
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 'W'; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x174; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e80; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e82; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e84; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e86; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e88; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      return;

    case 'X':
    case 0x1e8a:
    case 0x1e8c:
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 'X'; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e8a; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e8c; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      return;

    case 'Y':
    case 0xdd:
    case 0x176:
    case 0x178:
    case 0x1b3:
    case 0x232:
    case 0x24e:
    case 0x1e8e:
    case 0x1ef2:
    case 0x1ef4:
    case 0x1ef6:
    case 0x1ef8:
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 'Y'; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0xdd; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x176; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x178; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1b3; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x232; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x24e; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e8e; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1ef2; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1ef4; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1ef6; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1ef8; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      return;

    case 'Z':
    case 0x179:
    case 0x17b:
    case 0x17d:
    case 0x1b5:
    case 0x1e90:
    case 0x1e92:
    case 0x1e94:
    case 0x2c6b:
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 'Z'; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x179; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x17b; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x17d; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1b5; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e90; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e92; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e94; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x2c6b; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      return;

    case 'a':
    case 0xe0:
    case 0xe1:
    case 0xe2:
    case 0xe3:
    case 0xe4:
    case 0xe5:
    case 0x101:
    case 0x103:
    case 0x105:
    case 0x1ce:
    case 0x1df:
    case 0x1e1:
    case 0x1fb:
    case 0x201:
    case 0x203:
    case 0x227:
    case 0x1d8f:
    case 0x1e01:
    case 0x1e9a:
    case 0x1ea1:
    case 0x1ea3:
    case 0x1ea5:
    case 0x1ea7:
    case 0x1ea9:
    case 0x1eab:
    case 0x1ead:
    case 0x1eaf:
    case 0x1eb1:
    case 0x1eb3:
    case 0x1eb5:
    case 0x1eb7:
    case 0x2c65:
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 'a'; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0xe0; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0xe1; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0xe2; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0xe3; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0xe4; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0xe5; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x101; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x103; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x105; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1ce; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1df; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e1; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1fb; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x201; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x203; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x227; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1d8f; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e01; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e9a; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1ea1; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1ea3; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1ea5; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1ea7; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1ea9; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1eab; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1ead; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1eaf; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1eb1; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1eb3; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1eb5; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1eb7; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x2c65; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      return;

    case 'b':
    case 0x180:
    case 0x253:
    case 0x1d6c:
    case 0x1d80:
    case 0x1e03:
    case 0x1e05:
    case 0x1e07:
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 'b'; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x180; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x253; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1d6c; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1d80; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e03; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e05; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e07; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      return;

    case 'c':
    case 0xe7:
    case 0x107:
    case 0x109:
    case 0x10b:
    case 0x10d:
    case 0x188:
    case 0x23c:
    case 0x1e09:
    case 0xa793:
    case 0xa794:
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 'c'; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0xe7; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x107; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x109; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x10b; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x10d; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x188; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x23c; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e09; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0xa793; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0xa794; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      return;

    case 'd':
    case 0x10f:
    case 0x111:
    case 0x257:
    case 0x1d6d:
    case 0x1d81:
    case 0x1d91:
    case 0x1e0b:
    case 0x1e0d:
    case 0x1e0f:
    case 0x1e11:
    case 0x1e13:
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 'd'; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x10f; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x111; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x257; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1d6d; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1d81; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1d91; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e0b; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e0d; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e0f; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e11; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e13; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      return;

    case 'e':
    case 0xe8:
    case 0xe9:
    case 0xea:
    case 0xeb:
    case 0x113:
    case 0x115:
    case 0x117:
    case 0x119:
    case 0x11b:
    case 0x205:
    case 0x207:
    case 0x229:
    case 0x247:
    case 0x1d92:
    case 0x1e15:
    case 0x1e17:
    case 0x1e19:
    case 0x1e1b:
    case 0x1e1d:
    case 0x1eb9:
    case 0x1ebb:
    case 0x1ebd:
    case 0x1ebf:
    case 0x1ec1:
    case 0x1ec3:
    case 0x1ec5:
    case 0x1ec7:
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 'e'; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0xe8; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0xe9; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0xea; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0xeb; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x113; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x115; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x117; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x119; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x11b; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x205; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x207; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x229; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x247; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1d92; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e15; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e17; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e19; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e1b; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e1d; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1eb9; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1ebb; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1ebd; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1ebf; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1ec1; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1ec3; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1ec5; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1ec7; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      return;

    case 'f':
    case 0x192:
    case 0x1d6e:
    case 0x1d82:
    case 0x1e1f:
    case 0xa799:
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 'f'; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x192; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1d6e; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1d82; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e1f; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0xa799; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      return;

    case 'g':
    case 0x11d:
    case 0x11f:
    case 0x121:
    case 0x123:
    case 0x1e5:
    case 0x1e7:
    case 0x1f5:
    case 0x260:
    case 0x1d83:
    case 0x1e21:
    case 0xa7a1:
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 'g'; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x11d; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x11f; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x121; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x123; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e5; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e7; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1f5; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x260; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1d83; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e21; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0xa7a1; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      return;

    case 'h':
    case 0x125:
    case 0x127:
    case 0x21f:
    case 0x1e23:
    case 0x1e25:
    case 0x1e27:
    case 0x1e29:
    case 0x1e2b:
    case 0x1e96:
    case 0x2c68:
    case 0xa795:
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 'h'; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x125; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x127; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x21f; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e23; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e25; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e27; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e29; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e2b; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e96; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x2c68; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0xa795; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      return;

    case 'i':
    case 0xec:
    case 0xed:
    case 0xee:
    case 0xef:
    case 0x129:
    case 0x12b:
    case 0x12d:
    case 0x12f:
    case 0x1d0:
    case 0x209:
    case 0x20b:
    case 0x268:
    case 0x1d96:
    case 0x1e2d:
    case 0x1e2f:
    case 0x1ec9:
    case 0x1ecb:
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 'i'; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0xec; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0xed; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0xee; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0xef; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x129; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x12b; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x12d; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x12f; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1d0; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x209; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x20b; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x268; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1d96; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e2d; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e2f; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1ec9; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1ecb; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1ecb; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      return;

    case 'j':
    case 0x135:
    case 0x1f0:
    case 0x249:
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 'j'; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x135; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1f0; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x249; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      return;

    case 'k':
    case 0x137:
    case 0x199:
    case 0x1e9:
    case 0x1d84:
    case 0x1e31:
    case 0x1e33:
    case 0x1e35:
    case 0x2c6a:
    case 0xa741:
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 'k'; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x137; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x199; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e9; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1d84; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e31; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e33; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e35; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x2c6a; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0xa741; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      return;

    case 'l':
    case 0x13a:
    case 0x13c:
    case 0x13e:
    case 0x140:
    case 0x142:
    case 0x19a:
    case 0x1e37:
    case 0x1e39:
    case 0x1e3b:
    case 0x1e3d:
    case 0x2c61:
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 'l'; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x13a; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x13c; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x13e; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x140; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x142; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x19a; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e37; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e39; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e3b; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e3d; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x2c61; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      return;

    case 'm':
    case 0x1d6f:
    case 0x1e3f:
    case 0x1e41:
    case 0x1e43:
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 'm'; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1d6f; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e3f; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e41; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e43; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      return;

    case 'n':
    case 0xf1:
    case 0x144:
    case 0x146:
    case 0x148:
    case 0x149:
    case 0x1f9:
    case 0x1d70:
    case 0x1d87:
    case 0x1e45:
    case 0x1e47:
    case 0x1e49:
    case 0x1e4b:
    case 0xa7a5:
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 'n'; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0xf1; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x144; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x146; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x148; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x149; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1f9; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1d70; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1d87; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e45; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e47; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e49; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e4b; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0xa7a5; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      return;

    case 'o':
    case 0xf2:
    case 0xf3:
    case 0xf4:
    case 0xf5:
    case 0xf6:
    case 0xf8:
    case 0x14d:
    case 0x14f:
    case 0x151:
    case 0x1a1:
    case 0x1d2:
    case 0x1eb:
    case 0x1ed:
    case 0x1ff:
    case 0x20d:
    case 0x20f:
    case 0x22b:
    case 0x22d:
    case 0x22f:
    case 0x231:
    case 0x275:
    case 0x1e4d:
    case 0x1e4f:
    case 0x1e51:
    case 0x1e53:
    case 0x1ecd:
    case 0x1ecf:
    case 0x1ed1:
    case 0x1ed3:
    case 0x1ed5:
    case 0x1ed7:
    case 0x1ed9:
    case 0x1edb:
    case 0x1edd:
    case 0x1edf:
    case 0x1ee1:
    case 0x1ee3:
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 'o'; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0xf2; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0xf3; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0xf4; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0xf5; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0xf6; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0xf8; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x14d; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x14f; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x151; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1a1; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1d2; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1eb; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1ed; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1ff; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x20d; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x20f; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x22b; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x22d; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x22f; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x231; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x275; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e4d; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e4f; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e51; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e53; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1ecd; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1ecf; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1ed1; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1ed3; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1ed5; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1ed7; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1ed9; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1edb; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1edd; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1edf; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1ee1; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1ee3; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      return;

    case 'p':
    case 0x1a5:
    case 0x1d71:
    case 0x1d7d:
    case 0x1d88:
    case 0x1e55:
    case 0x1e57:
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 'p'; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1a5; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1d71; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1d7d; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1d88; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e55; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e57; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      return;

    case 'q':
    case 0x24b:
    case 0x2a0:
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 'q'; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x24b; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x2a0; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      return;

    case 'r':
    case 0x155:
    case 0x157:
    case 0x159:
    case 0x211:
    case 0x213:
    case 0x24d:
    case 0x27d:
    case 0x1d72:
    case 0x1d73:
    case 0x1d89:
    case 0x1e59:
    case 0x1e5b:
    case 0x1e5d:
    case 0x1e5f:
    case 0xa7a7:
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 'r'; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x155; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x157; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x159; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x211; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x213; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x24d; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x27d; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1d72; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1d73; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1d89; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e59; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e5b; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e5d; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e5f; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0xa7a7; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      return;

    case 's':
    case 0x15b:
    case 0x15d:
    case 0x15f:
    case 0x161:
    case 0x219:
    case 0x23f:
    case 0x1d74:
    case 0x1d8a:
    case 0x1e61:
    case 0x1e63:
    case 0x1e65:
    case 0x1e67:
    case 0x1e69:
    case 0xa7a9:
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 's'; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x15b; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x15d; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x15f; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x161; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x219; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x23f; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1d74; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1d8a; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e61; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e63; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e65; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e67; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e69; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0xa7a9; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      return;

    case 't':
    case 0x163:
    case 0x165:
    case 0x167:
    case 0x1ab:
    case 0x1ad:
    case 0x21b:
    case 0x288:
    case 0x1d75:
    case 0x1e6b:
    case 0x1e6d:
    case 0x1e6f:
    case 0x1e71:
    case 0x1e97:
    case 0x2c66:
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 't'; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x163; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x165; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x167; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1ab; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1ad; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x21b; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x288; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1d75; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e6b; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e6d; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e6f; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e71; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e97; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x2c66; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      return;

    case 'u':
    case 0xf9:
    case 0xfa:
    case 0xfb:
    case 0xfc:
    case 0x169:
    case 0x16b:
    case 0x16d:
    case 0x16f:
    case 0x171:
    case 0x173:
    case 0x1b0:
    case 0x1d4:
    case 0x1d6:
    case 0x1d8:
    case 0x1da:
    case 0x1dc:
    case 0x215:
    case 0x217:
    case 0x289:
    case 0x1d7e:
    case 0x1d99:
    case 0x1e73:
    case 0x1e75:
    case 0x1e77:
    case 0x1e79:
    case 0x1e7b:
    case 0x1ee5:
    case 0x1ee7:
    case 0x1ee9:
    case 0x1eeb:
    case 0x1eed:
    case 0x1eef:
    case 0x1ef1:
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 'u'; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0xf9; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0xfa; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0xfb; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0xfc; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x169; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x16b; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x16d; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x16f; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x171; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x173; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1d6; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1d8; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x215; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x217; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1b0; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1d4; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1da; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1dc; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x289; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e73; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1d7e; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1d99; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e75; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e77; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e79; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e7b; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1ee5; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1ee7; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1ee9; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1eeb; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1eed; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1eef; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1ef1; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      return;

    case 'v':
    case 0x28b:
    case 0x1d8c:
    case 0x1e7d:
    case 0x1e7f:
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 'v'; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x28b; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1d8c; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e7d; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e7f; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      return;

    case 'w':
    case 0x175:
    case 0x1e81:
    case 0x1e83:
    case 0x1e85:
    case 0x1e87:
    case 0x1e89:
    case 0x1e98:
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 'w'; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x175; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e81; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e83; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e85; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e87; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e89; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e98; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      return;

    case 'x':
    case 0x1e8b:
    case 0x1e8d:
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 'x'; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e8b; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e8d; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      return;

    case 'y':
    case 0xfd:
    case 0xff:
    case 0x177:
    case 0x1b4:
    case 0x233:
    case 0x24f:
    case 0x1e8f:
    case 0x1e99:
    case 0x1ef3:
    case 0x1ef5:
    case 0x1ef7:
    case 0x1ef9:
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 'y'; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0xfd; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0xff; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x177; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1b4; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x233; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x24f; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e8f; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e99; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1ef3; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1ef5; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1ef7; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1ef9; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      return;

    case 'z':
    case 0x17a:
    case 0x17c:
    case 0x17e:
    case 0x1b6:
    case 0x1d76:
    case 0x1d8e:
    case 0x1e91:
    case 0x1e93:
    case 0x1e95:
    case 0x2c6c:
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 'z'; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x17a; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x17c; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x17e; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1b6; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1d76; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1d8e; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e91; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e93; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x1e95; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x2c6c; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      return;


    }
  }

  do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = c; } while (0); do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);;

}
# 9969 "/home/ubuntu/neovim/src/nvim/regexp.c"
static int nfa_regatom(void)
{
  int c;
  int charclass;
  int equiclass;
  int collclass;
  int got_coll_char;
  uint8_t *p;
  uint8_t *endp;
  uint8_t *old_regparse = (uint8_t *)regparse;
  int extra = 0;
  int emit_range;
  int negated;
  int startc = -1;
  int save_prev_at_start = prev_at_start;

  c = getchr();
  switch (c) {
  case '\000':
    return (emsg(gettext(e_nul_found)), rc_did_emsg = 
# 9988 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
   1
# 9988 "/home/ubuntu/neovim/src/nvim/regexp.c"
   , 0);

  case ((int)('^') - 256):
    do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_BOL; } while (0);
    break;

  case ((int)('$') - 256):
    do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_EOL; } while (0);
    had_eol = 
# 9996 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
             1
# 9996 "/home/ubuntu/neovim/src/nvim/regexp.c"
                 ;
    break;

  case ((int)('<') - 256):
    do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_BOW; } while (0);
    break;

  case ((int)('>') - 256):
    do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_EOW; } while (0);
    break;

  case ((int)('_') - 256):
    c = no_Magic(getchr());
    if (c == '\000') {
      return (emsg(gettext(e_nul_found)), rc_did_emsg = 
# 10010 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
     1
# 10010 "/home/ubuntu/neovim/src/nvim/regexp.c"
     , 0);
    }

    if (c == '^') {
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_BOL; } while (0);
      break;
    }
    if (c == '$') {
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_EOL; } while (0);
      had_eol = 
# 10019 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
               1
# 10019 "/home/ubuntu/neovim/src/nvim/regexp.c"
                   ;
      break;
    }

    extra = 31;


    if (c == '[') {
      goto collection;
    }


    {} __attribute__((fallthrough));


  case ((int)('.') - 256):
  case ((int)('i') - 256):
  case ((int)('I') - 256):
  case ((int)('k') - 256):
  case ((int)('K') - 256):
  case ((int)('f') - 256):
  case ((int)('F') - 256):
  case ((int)('p') - 256):
  case ((int)('P') - 256):
  case ((int)('s') - 256):
  case ((int)('S') - 256):
  case ((int)('d') - 256):
  case ((int)('D') - 256):
  case ((int)('x') - 256):
  case ((int)('X') - 256):
  case ((int)('o') - 256):
  case ((int)('O') - 256):
  case ((int)('w') - 256):
  case ((int)('W') - 256):
  case ((int)('h') - 256):
  case ((int)('H') - 256):
  case ((int)('a') - 256):
  case ((int)('A') - 256):
  case ((int)('l') - 256):
  case ((int)('L') - 256):
  case ((int)('u') - 256):
  case ((int)('U') - 256):
    p = (uint8_t *)vim_strchr((char *)classchars, no_Magic(c));
    if (p == 
# 10062 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
            ((void *)0)
# 10062 "/home/ubuntu/neovim/src/nvim/regexp.c"
                ) {
      if (extra == 31) {
        semsg(gettext(e_ill_char_class), (int64_t)c);
        rc_did_emsg = 
# 10065 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                     1
# 10065 "/home/ubuntu/neovim/src/nvim/regexp.c"
                         ;
        return 0;
      }
      siemsg("INTERNAL: Unknown character class char: %" 
# 10068 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                                        "l" "d"
# 10068 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                                              , (int64_t)c);
      return 0;
    }


    if (c == ((int)('.') - 256) && utf_iscomposing(peekchr())) {
      old_regparse = (uint8_t *)regparse;
      c = getchr();
      goto nfa_do_multibyte;
    }
    do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = nfa_classcodes[p - classchars]; } while (0);
    if (extra == 31) {
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_NEWL; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_OR; } while (0);
      regflags |= 4;
    }
    break;

  case ((int)('n') - 256):
    if (reg_string) {

      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = '\012'; } while (0);
    } else {

      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_NEWL; } while (0);
      regflags |= 4;
    }
    break;

  case ((int)('(') - 256):
    if (nfa_reg(1) == 0) {
      return 0;
    }
    break;

  case ((int)('|') - 256):
  case ((int)('&') - 256):
  case ((int)(')') - 256):
    semsg(gettext(e_misplaced), (char)no_Magic(c));
    return 0;

  case ((int)('=') - 256):
  case ((int)('?') - 256):
  case ((int)('+') - 256):
  case ((int)('@') - 256):
  case ((int)('*') - 256):
  case ((int)('{') - 256):

    semsg(gettext(e_misplaced), (char)no_Magic(c));
    return 0;

  case ((int)('~') - 256): {
    uint8_t *lp;



    if (reg_prev_sub == 
# 10124 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                       ((void *)0)
# 10124 "/home/ubuntu/neovim/src/nvim/regexp.c"
                           ) {
      emsg(gettext(e_nopresub));
      return 0;
    }
    for (lp = (uint8_t *)reg_prev_sub; *lp != '\000'; lp += utf_ptr2len((char *)lp)) {
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = utf_ptr2char((char *)lp); } while (0);
      if (lp != (uint8_t *)reg_prev_sub) {
        do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      }
    }
    do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_NOPEN; } while (0);
    break;
  }

  case ((int)('1') - 256):
  case ((int)('2') - 256):
  case ((int)('3') - 256):
  case ((int)('4') - 256):
  case ((int)('5') - 256):
  case ((int)('6') - 256):
  case ((int)('7') - 256):
  case ((int)('8') - 256):
  case ((int)('9') - 256): {
    int refnum = no_Magic(c) - '1';

    if (!seen_endbrace(refnum + 1)) {
      return 0;
    }
    do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_BACKREF1 + refnum; } while (0);
    rex.nfa_has_backref = 
# 10153 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                         1
# 10153 "/home/ubuntu/neovim/src/nvim/regexp.c"
                             ;
  }
  break;

  case ((int)('z') - 256):
    c = no_Magic(getchr());
    switch (c) {
    case 's':
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_ZSTART; } while (0);
      if (!re_mult_next("\\zs")) {
        return 
# 10163 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
              0
# 10163 "/home/ubuntu/neovim/src/nvim/regexp.c"
                   ;
      }
      break;
    case 'e':
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_ZEND; } while (0);
      rex.nfa_has_zend = 
# 10168 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                        1
# 10168 "/home/ubuntu/neovim/src/nvim/regexp.c"
                            ;
      if (!re_mult_next("\\ze")) {
        return 
# 10170 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
              0
# 10170 "/home/ubuntu/neovim/src/nvim/regexp.c"
                   ;
      }
      break;
    case '1':
    case '2':
    case '3':
    case '4':
    case '5':
    case '6':
    case '7':
    case '8':
    case '9':

      if ((reg_do_extmatch & 2) == 0) {
        return (emsg(gettext(e_z1_not_allowed)), rc_did_emsg = 
# 10184 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
       1
# 10184 "/home/ubuntu/neovim/src/nvim/regexp.c"
       , 0);
      }
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_ZREF1 + (no_Magic(c) - '1'); } while (0);


      re_has_z = 2;
      break;
    case '(':

      if (reg_do_extmatch != 1) {
        return (emsg(gettext(e_z_not_allowed)), rc_did_emsg = 
# 10194 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
       1
# 10194 "/home/ubuntu/neovim/src/nvim/regexp.c"
       , 0);
      }
      if (nfa_reg(2) == 0) {
        return 0;
      }
      re_has_z = 1;
      break;
    default:
      semsg(gettext("E867: (NFA) Unknown operator '\\z%c'"),
            no_Magic(c));
      return 0;
    }
    break;

  case ((int)('%') - 256):
    c = no_Magic(getchr());
    switch (c) {

    case '(':
      if (nfa_reg(3) == 0) {
        return 0;
      }
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_NOPEN; } while (0);
      break;

    case 'd':
    case 'o':
    case 'x':
    case 'u':
    case 'U':
    {
      int64_t nr;

      switch (c) {
      case 'd':
        nr = getdecchrs(); break;
      case 'o':
        nr = getoctchrs(); break;
      case 'x':
        nr = gethexchrs(2); break;
      case 'u':
        nr = gethexchrs(4); break;
      case 'U':
        nr = gethexchrs(8); break;
      default:
        nr = -1; break;
      }

      if (nr < 0 || nr > 0x7fffffff) {
        return (semsg((gettext("E678: Invalid character after %s%%[dxouU]")), (reg_magic == MAGIC_ALL) ? "" : "\\"), rc_did_emsg = 
# 10243 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
       1
# 10243 "/home/ubuntu/neovim/src/nvim/regexp.c"
       , 0)
                                              ;
      }


      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = nr == 0 ? 0x0a : (int)nr; } while (0);
    }
    break;



    case '^':
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_BOF; } while (0);
      break;

    case '$':
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_EOF; } while (0);
      break;

    case '#':
      if (regparse[0] == '=' && regparse[1] >= 48
          && regparse[1] <= 50) {

        semsg(gettext(e_atom_engine_must_be_at_start_of_pattern), regparse[1]);
        return 0;
      }
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CURSOR; } while (0);
      break;

    case 'V':
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_VISUAL; } while (0);
      break;

    case 'C':
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_ANY_COMPOSING; } while (0);
      break;

    case '[': {
      int n;


      for (n = 0; (c = peekchr()) != ']'; n++) {
        if (c == '\000') {
          return (semsg((gettext(e_missing_sb)), (reg_magic == MAGIC_ALL) ? "" : "\\"), rc_did_emsg = 
# 10286 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
         1
# 10286 "/home/ubuntu/neovim/src/nvim/regexp.c"
         , 0)
                                                ;
        }

        if (nfa_regatom() == 0) {
          return 0;
        }
      }
      (void)getchr();
      if (n == 0) {
        return (semsg((gettext(e_empty_sb)), (reg_magic == MAGIC_ALL) ? "" : "\\"), rc_did_emsg = 
# 10296 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
       1
# 10296 "/home/ubuntu/neovim/src/nvim/regexp.c"
       , 0);
      }
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_OPT_CHARS; } while (0);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = n; } while (0);
# 10308 "/home/ubuntu/neovim/src/nvim/regexp.c"
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_NOPEN; } while (0);
      break;
    }

    default: {
      int64_t n = 0;
      const int cmp = c;
      
# 10315 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
     _Bool 
# 10315 "/home/ubuntu/neovim/src/nvim/regexp.c"
          cur = 
# 10315 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                0
# 10315 "/home/ubuntu/neovim/src/nvim/regexp.c"
                     ;
      
# 10316 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
     _Bool 
# 10316 "/home/ubuntu/neovim/src/nvim/regexp.c"
          got_digit = 
# 10316 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                      0
# 10316 "/home/ubuntu/neovim/src/nvim/regexp.c"
                           ;

      if (c == '<' || c == '>') {
        c = getchr();
      }
      if (no_Magic(c) == '.') {
        cur = 
# 10322 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
             1
# 10322 "/home/ubuntu/neovim/src/nvim/regexp.c"
                 ;
        c = getchr();
      }
      while (ascii_isdigit(c)) {
        if (cur) {
          semsg(gettext(e_regexp_number_after_dot_pos_search_chr), no_Magic(c));
          return 0;
        }
        if (n > (
# 10330 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                (2147483647) 
# 10330 "/home/ubuntu/neovim/src/nvim/regexp.c"
                          - (c - '0')) / 10) {

          emsg(gettext(e_value_too_large));
          return 0;
        }
        n = n * 10 + (c - '0');
        c = getchr();
        got_digit = 
# 10337 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                   1
# 10337 "/home/ubuntu/neovim/src/nvim/regexp.c"
                       ;
      }
      if (c == 'l' || c == 'c' || c == 'v') {
        int32_t limit = 
# 10340 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                       (2147483647)
# 10340 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                ;

        if (!cur && !got_digit) {
          semsg(gettext(e_nfa_regexp_missing_value_in_chr), no_Magic(c));
          return 0;
        }
        if (c == 'l') {
          if (cur) {
            n = curwin->w_cursor.lnum;
          }

          do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = cmp == '<' ? NFA_LNUM_LT : cmp == '>' ? NFA_LNUM_GT : NFA_LNUM; } while (0)
                                                                ;
          if (save_prev_at_start) {
            at_start = 
# 10354 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                      1
# 10354 "/home/ubuntu/neovim/src/nvim/regexp.c"
                          ;
          }
        } else if (c == 'c') {
          if (cur) {
            n = curwin->w_cursor.col;
            n++;
          }

          do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = cmp == '<' ? NFA_COL_LT : cmp == '>' ? NFA_COL_GT : NFA_COL; } while (0)
                                                              ;
        } else {
          if (cur) {
            colnr_T vcol = 0;
            getvvcol(curwin, &curwin->w_cursor, 
# 10367 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                               ((void *)0)
# 10367 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                                   , 
# 10367 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                                     ((void *)0)
# 10367 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                                         , &vcol);
            n = ++vcol;
          }

          do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = cmp == '<' ? NFA_VCOL_LT : cmp == '>' ? NFA_VCOL_GT : NFA_VCOL; } while (0)
                                                                ;
          limit = 
# 10373 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                 (2147483647) 
# 10373 "/home/ubuntu/neovim/src/nvim/regexp.c"
                           / MB_MAXBYTES;
        }
        if (n >= limit) {
          emsg(gettext(e_value_too_large));
          return 0;
        }
        do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = (int)n; } while (0);
        break;
      } else if (no_Magic(c) == '\'' && n == 0) {

        do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = cmp == '<' ? NFA_MARK_LT : cmp == '>' ? NFA_MARK_GT : NFA_MARK; } while (0)
                                                              ;
        do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = getchr(); } while (0);
        break;
      }
    }
      semsg(gettext("E867: (NFA) Unknown operator '\\%%%c'"),
            no_Magic(c));
      return 0;
    }
    break;

  case ((int)('[') - 256):
collection:
# 10405 "/home/ubuntu/neovim/src/nvim/regexp.c"
    p = (uint8_t *)regparse;
    endp = (uint8_t *)skip_anyof((char *)p);
    if (*endp == ']') {



      int result = nfa_recognize_char_class((uint8_t *)regparse, endp, extra == 31);
      if (result != 0) {
        if (result >= NFA_FIRST_NL && result <= NFA_LAST_NL) {
          do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = result - 31; } while (0);
          do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_NEWL; } while (0);
          do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_OR; } while (0);
        } else {
          do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = result; } while (0);
        }
        regparse = (char *)endp;
        (regparse += utfc_ptr2len((char *)regparse));
        return 1;
      }


      negated = 
# 10426 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
               0
# 10426 "/home/ubuntu/neovim/src/nvim/regexp.c"
                    ;
      if (*regparse == '^') {
        negated = 
# 10428 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                 1
# 10428 "/home/ubuntu/neovim/src/nvim/regexp.c"
                     ;
        (regparse += utfc_ptr2len((char *)regparse));
        do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_START_NEG_COLL; } while (0);
      } else {
        do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_START_COLL; } while (0);
      }
      if (*regparse == '-') {
        startc = '-';
        do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = startc; } while (0);
        do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
        (regparse += utfc_ptr2len((char *)regparse));
      }

      emit_range = 
# 10441 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                  0
# 10441 "/home/ubuntu/neovim/src/nvim/regexp.c"
                       ;
      while ((uint8_t *)regparse < endp) {
        int oldstartc = startc;
        startc = -1;
        got_coll_char = 
# 10445 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                       0
# 10445 "/home/ubuntu/neovim/src/nvim/regexp.c"
                            ;
        if (*regparse == '[') {

          equiclass = collclass = 0;
          charclass = get_char_class(&regparse);
          if (charclass == CLASS_NONE) {
            equiclass = get_equi_class(&regparse);
            if (equiclass == 0) {
              collclass = get_coll_element(&regparse);
            }
          }


          if (charclass != CLASS_NONE) {
            switch (charclass) {
            case CLASS_ALNUM:
              do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CLASS_ALNUM; } while (0);
              break;
            case CLASS_ALPHA:
              do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CLASS_ALPHA; } while (0);
              break;
            case CLASS_BLANK:
              do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CLASS_BLANK; } while (0);
              break;
            case CLASS_CNTRL:
              do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CLASS_CNTRL; } while (0);
              break;
            case CLASS_DIGIT:
              do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CLASS_DIGIT; } while (0);
              break;
            case CLASS_GRAPH:
              do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CLASS_GRAPH; } while (0);
              break;
            case CLASS_LOWER:
              wants_nfa = 
# 10479 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                         1
# 10479 "/home/ubuntu/neovim/src/nvim/regexp.c"
                             ;
              do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CLASS_LOWER; } while (0);
              break;
            case CLASS_PRINT:
              do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CLASS_PRINT; } while (0);
              break;
            case CLASS_PUNCT:
              do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CLASS_PUNCT; } while (0);
              break;
            case CLASS_SPACE:
              do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CLASS_SPACE; } while (0);
              break;
            case CLASS_UPPER:
              wants_nfa = 
# 10492 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                         1
# 10492 "/home/ubuntu/neovim/src/nvim/regexp.c"
                             ;
              do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CLASS_UPPER; } while (0);
              break;
            case CLASS_XDIGIT:
              do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CLASS_XDIGIT; } while (0);
              break;
            case CLASS_TAB:
              do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CLASS_TAB; } while (0);
              break;
            case CLASS_RETURN:
              do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CLASS_RETURN; } while (0);
              break;
            case CLASS_BACKSPACE:
              do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CLASS_BACKSPACE; } while (0);
              break;
            case CLASS_ESCAPE:
              do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CLASS_ESCAPE; } while (0);
              break;
            case CLASS_IDENT:
              do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CLASS_IDENT; } while (0);
              break;
            case CLASS_KEYWORD:
              do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CLASS_KEYWORD; } while (0);
              break;
            case CLASS_FNAME:
              do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CLASS_FNAME; } while (0);
              break;
            }
            do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
            continue;
          }

          if (equiclass != 0) {
            nfa_emit_equi_class(equiclass);
            continue;
          }

          if (collclass != 0) {
            startc = collclass;


          }
        }


        if (*regparse == '-' && oldstartc != -1) {
          emit_range = 
# 10538 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                      1
# 10538 "/home/ubuntu/neovim/src/nvim/regexp.c"
                          ;
          startc = oldstartc;
          (regparse += utfc_ptr2len((char *)regparse));
          continue;
        }





        if (*regparse == '\\'
            && (uint8_t *)regparse + 1 <= endp
            && (vim_strchr(REGEXP_INRANGE, (uint8_t)regparse[1]) != 
# 10550 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                                                   ((void *)0)
                
# 10551 "/home/ubuntu/neovim/src/nvim/regexp.c"
               || (!reg_cpo_lit
                    && vim_strchr(REGEXP_ABBR, (uint8_t)regparse[1])
                    != 
# 10553 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                      ((void *)0)
# 10553 "/home/ubuntu/neovim/src/nvim/regexp.c"
                          ))) {
          (regparse += utfc_ptr2len((char *)regparse));

          if (*regparse == 'n') {
            startc = (reg_string || emit_range || regparse[1] == '-')
                     ? '\012' : NFA_NEWL;
          } else if (*regparse == 'd'
                     || *regparse == 'o'
                     || *regparse == 'x'
                     || *regparse == 'u'
                     || *regparse == 'U') {

            startc = coll_get_char();
            got_coll_char = 
# 10566 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                           1
# 10566 "/home/ubuntu/neovim/src/nvim/regexp.c"
                               ;
            (regparse -= utf_head_off((char *)(old_regparse), (char *)(regparse) - 1) + 1);
          } else {

            startc = backslash_trans(*regparse);
          }
        }


        if (startc == -1) {
          startc = utf_ptr2char(regparse);
        }


        if (emit_range) {
          int endc = startc;
          startc = oldstartc;
          if (startc > endc) {
            return (emsg(gettext(e_reverse_range)), rc_did_emsg = 
# 10584 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
           1
# 10584 "/home/ubuntu/neovim/src/nvim/regexp.c"
           , 0);
          }

          if (endc > startc + 2) {


            if (startc == 0) {

              do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 1; } while (0);
            } else {
              post_ptr--;
            }
            do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = endc; } while (0);
            do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_RANGE; } while (0);
            do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
          } else if (utf_char2len(startc) > 1
                     || utf_char2len(endc) > 1) {


            for (c = startc + 1; c <= endc; c++) {
              do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = c; } while (0);
              do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
            }
          } else {


            for (c = startc + 1; c <= endc; c++) {
              do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = c; } while (0);
              do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
            }
          }
          emit_range = 
# 10615 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                      0
# 10615 "/home/ubuntu/neovim/src/nvim/regexp.c"
                           ;
          startc = -1;
        } else {







          if (startc == NFA_NEWL) {



            if (!negated) {
              extra = 31;
            }
          } else {
            if (got_coll_char == 
# 10633 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                1 
# 10633 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                     && startc == 0) {
              do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 0x0a; } while (0);
              do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
            } else {
              do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = startc; } while (0);
              if (utf_ptr2len(regparse) == utfc_ptr2len(regparse)) {
                do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
              }
            }
          }
        }

        int plen;
        if (utf_ptr2len(regparse) != (plen = utfc_ptr2len(regparse))) {
          int i = utf_ptr2len(regparse);

          c = utf_ptr2char(regparse + i);


          while (
# 10652 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                1
# 10652 "/home/ubuntu/neovim/src/nvim/regexp.c"
                    ) {
            if (c == 0) {

              do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = 1; } while (0);
            } else {
              do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = c; } while (0);
            }
            do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
            if ((i += utf_char2len(c)) >= plen) {
              break;
            }
            c = utf_ptr2char(regparse + i);
          }
          do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_COMPOSING; } while (0);
          do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
        }
        (regparse += utfc_ptr2len((char *)regparse));
      }

      (regparse -= utf_head_off((char *)(old_regparse), (char *)(regparse) - 1) + 1);
      if (*regparse == '-') {
        do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = '-'; } while (0);
        do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      }


      regparse = (char *)endp;
      (regparse += utfc_ptr2len((char *)regparse));


      if (negated == 
# 10682 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                    1
# 10682 "/home/ubuntu/neovim/src/nvim/regexp.c"
                        ) {
        do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_END_NEG_COLL; } while (0);
      } else {
        do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_END_COLL; } while (0);
      }


      if (extra == 31) {
        do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = reg_string ? '\012' : NFA_NEWL; } while (0);
        do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_OR; } while (0);
      }

      return 1;
    }

    if (reg_strict) {
      return (emsg(gettext(e_missingbracket)), rc_did_emsg = 
# 10698 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
     1
# 10698 "/home/ubuntu/neovim/src/nvim/regexp.c"
     , 0);
    }
    {} __attribute__((fallthrough));

  default: {
    int plen;

nfa_do_multibyte:

    if (utf_char2len(c) != (plen = utfc_ptr2len((char *)old_regparse))
        || utf_iscomposing(c)) {
      int i = 0;
# 10719 "/home/ubuntu/neovim/src/nvim/regexp.c"
      while (
# 10719 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
            1
# 10719 "/home/ubuntu/neovim/src/nvim/regexp.c"
                ) {
        do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = c; } while (0);
        if (i > 0) {
          do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
        }
        if ((i += utf_char2len(c)) >= plen) {
          break;
        }
        c = utf_ptr2char((char *)old_regparse + i);
      }
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_COMPOSING; } while (0);
      regparse = (char *)old_regparse + plen;
    } else {
      c = no_Magic(c);
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = c; } while (0);
    }
    return 1;
  }
  }

  return 1;
}
# 10750 "/home/ubuntu/neovim/src/nvim/regexp.c"
static int nfa_regpiece(void)
{
  int i;
  int op;
  int ret;
  int minval, maxval;
  
# 10756 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
 _Bool 
# 10756 "/home/ubuntu/neovim/src/nvim/regexp.c"
      greedy = 
# 10756 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
               1
# 10756 "/home/ubuntu/neovim/src/nvim/regexp.c"
                   ;
  parse_state_T old_state;
  parse_state_T new_state;
  int64_t c2;
  int old_post_pos;
  int my_post_start;
  int quest;



  save_parse_state(&old_state);


  my_post_start = (int)(post_ptr - post_start);

  ret = nfa_regatom();
  if (ret == 0) {
    return 0;
  }
  op = peekchr();
  if (re_multi_type(op) == 0) {
    return 1;
  }

  skipchr();
  switch (op) {
  case ((int)('*') - 256):
    do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_STAR; } while (0);
    break;

  case ((int)('+') - 256):
# 10796 "/home/ubuntu/neovim/src/nvim/regexp.c"
    restore_parse_state(&old_state);
    curchr = -1;
    if (nfa_regatom() == 0) {
      return 0;
    }
    do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_STAR; } while (0);
    do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
    skipchr();
    break;

  case ((int)('@') - 256):
    c2 = getdecchrs();
    op = no_Magic(getchr());
    i = 0;
    switch (op) {
    case '=':

      i = NFA_PREV_ATOM_NO_WIDTH;
      break;
    case '!':

      i = NFA_PREV_ATOM_NO_WIDTH_NEG;
      break;
    case '<':
      op = no_Magic(getchr());
      if (op == '=') {

        i = NFA_PREV_ATOM_JUST_BEFORE;
      } else if (op == '!') {

        i = NFA_PREV_ATOM_JUST_BEFORE_NEG;
      }
      break;
    case '>':

      i = NFA_PREV_ATOM_LIKE_PATTERN;
      break;
    }
    if (i == 0) {
      semsg(gettext("E869: (NFA) Unknown operator '\\@%c'"), op);
      return 0;
    }
    do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = i; } while (0);
    if (i == NFA_PREV_ATOM_JUST_BEFORE
        || i == NFA_PREV_ATOM_JUST_BEFORE_NEG) {
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = (int)c2; } while (0);
    }
    break;

  case ((int)('?') - 256):
  case ((int)('=') - 256):
    do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_QUEST; } while (0);
    break;

  case ((int)('{') - 256):






    greedy = 
# 10857 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
            1
# 10857 "/home/ubuntu/neovim/src/nvim/regexp.c"
                ;
    c2 = peekchr();
    if (c2 == '-' || c2 == ((int)('-') - 256)) {
      skipchr();
      greedy = 
# 10861 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
              0
# 10861 "/home/ubuntu/neovim/src/nvim/regexp.c"
                   ;
    }
    if (!read_limits(&minval, &maxval)) {
      return (emsg(gettext("E870: (NFA regexp) Error reading repetition limits")), rc_did_emsg = 
# 10864 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
     1
# 10864 "/home/ubuntu/neovim/src/nvim/regexp.c"
     , 0);
    }



    if (minval == 0 && maxval == (32767 << 16)) {
      if (greedy) {

        do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_STAR; } while (0);
      } else {

        do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_STAR_NONGREEDY; } while (0);
      }
      break;
    }


    if (maxval == 0) {

      post_ptr = post_start + my_post_start;

      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_EMPTY; } while (0);
      return 1;
    }
# 10896 "/home/ubuntu/neovim/src/nvim/regexp.c"
    if ((nfa_re_flags & 8)
        && (maxval > 500 || maxval > minval + 200)
        && (maxval != (32767 << 16) && minval < 200)
        && !wants_nfa) {
      return 0;
    }


    post_ptr = post_start + my_post_start;

    save_parse_state(&new_state);

    quest = (greedy == 
# 10908 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                      1 
# 10908 "/home/ubuntu/neovim/src/nvim/regexp.c"
                           ? NFA_QUEST : NFA_QUEST_NONGREEDY);
    for (i = 0; i < maxval; i++) {

      restore_parse_state(&old_state);
      old_post_pos = (int)(post_ptr - post_start);
      if (nfa_regatom() == 0) {
        return 0;
      }

      if (i + 1 > minval) {
        if (maxval == (32767 << 16)) {
          if (greedy) {
            do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_STAR; } while (0);
          } else {
            do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_STAR_NONGREEDY; } while (0);
          }
        } else {
          do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = quest; } while (0);
        }
      }
      if (old_post_pos != my_post_start) {
        do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      }
      if (i + 1 > minval && maxval == (32767 << 16)) {
        break;
      }
    }


    restore_parse_state(&new_state);
    curchr = -1;

    break;

  default:
    break;
  }

  if (re_multi_type(peekchr()) != 0) {

    return (emsg(gettext("E871: (NFA regexp) Can't have a multi follow a multi")), rc_did_emsg = 
# 10948 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
   1
# 10948 "/home/ubuntu/neovim/src/nvim/regexp.c"
   , 0);
  }

  return 1;
}
# 10962 "/home/ubuntu/neovim/src/nvim/regexp.c"
static int nfa_regconcat(void)
{
  
# 10964 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
 _Bool 
# 10964 "/home/ubuntu/neovim/src/nvim/regexp.c"
      cont = 
# 10964 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
             1
# 10964 "/home/ubuntu/neovim/src/nvim/regexp.c"
                 ;
  
# 10965 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
 _Bool 
# 10965 "/home/ubuntu/neovim/src/nvim/regexp.c"
      first = 
# 10965 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
              1
# 10965 "/home/ubuntu/neovim/src/nvim/regexp.c"
                  ;

  while (cont) {
    switch (peekchr()) {
    case '\000':
    case ((int)('|') - 256):
    case ((int)('&') - 256):
    case ((int)(')') - 256):
      cont = 
# 10973 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
            0
# 10973 "/home/ubuntu/neovim/src/nvim/regexp.c"
                 ;
      break;

    case ((int)('Z') - 256):
      regflags |= 8;
      skipchr_keepstart();
      break;
    case ((int)('c') - 256):
      regflags |= 1;
      skipchr_keepstart();
      break;
    case ((int)('C') - 256):
      regflags |= 2;
      skipchr_keepstart();
      break;
    case ((int)('v') - 256):
      reg_magic = MAGIC_ALL;
      skipchr_keepstart();
      curchr = -1;
      break;
    case ((int)('m') - 256):
      reg_magic = MAGIC_ON;
      skipchr_keepstart();
      curchr = -1;
      break;
    case ((int)('M') - 256):
      reg_magic = MAGIC_OFF;
      skipchr_keepstart();
      curchr = -1;
      break;
    case ((int)('V') - 256):
      reg_magic = MAGIC_NONE;
      skipchr_keepstart();
      curchr = -1;
      break;

    default:
      if (nfa_regpiece() == 0) {
        return 0;
      }
      if (first == 
# 11013 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                  0
# 11013 "/home/ubuntu/neovim/src/nvim/regexp.c"
                       ) {
        do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
      } else {
        first = 
# 11016 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
               0
# 11016 "/home/ubuntu/neovim/src/nvim/regexp.c"
                    ;
      }
      break;
    }
  }

  return 1;
}
# 11035 "/home/ubuntu/neovim/src/nvim/regexp.c"
static int nfa_regbranch(void)
{
  int old_post_pos;

  old_post_pos = (int)(post_ptr - post_start);


  if (nfa_regconcat() == 0) {
    return 0;
  }


  while (peekchr() == ((int)('&') - 256)) {
    skipchr();

    if (old_post_pos == (int)(post_ptr - post_start)) {
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_EMPTY; } while (0);
    }
    do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_NOPEN; } while (0);
    do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_PREV_ATOM_NO_WIDTH; } while (0);
    old_post_pos = (int)(post_ptr - post_start);
    if (nfa_regconcat() == 0) {
      return 0;
    }

    if (old_post_pos == (int)(post_ptr - post_start)) {
      do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_EMPTY; } while (0);
    }
    do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_CONCAT; } while (0);
  }


  if (old_post_pos == (int)(post_ptr - post_start)) {
    do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_EMPTY; } while (0);
  }

  return 1;
}
# 11085 "/home/ubuntu/neovim/src/nvim/regexp.c"
static int nfa_reg(int paren)
{
  int parno = 0;

  if (paren == 1) {
    if (regnpar >= NSUBEXP) {
      return (emsg(gettext("E872: (NFA regexp) Too many '('")), rc_did_emsg = 
# 11091 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
     1
# 11091 "/home/ubuntu/neovim/src/nvim/regexp.c"
     , 0);
    }
    parno = regnpar++;
  } else if (paren == 2) {

    if (regnzpar >= NSUBEXP) {
      return (emsg(gettext("E879: (NFA regexp) Too many \\z(")), rc_did_emsg = 
# 11097 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
     1
# 11097 "/home/ubuntu/neovim/src/nvim/regexp.c"
     , 0);
    }
    parno = regnzpar++;
  }

  if (nfa_regbranch() == 0) {
    return 0;
  }
  while (peekchr() == ((int)('|') - 256)) {
    skipchr();
    if (nfa_regbranch() == 0) {
      return 0;
    }
    do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_OR; } while (0);
  }


  if (paren != 0 && getchr() != ((int)(')') - 256)) {
    if (paren == 3) {
      return (semsg((gettext(e_unmatchedpp)), (reg_magic == MAGIC_ALL) ? "" : "\\"), rc_did_emsg = 
# 11116 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
     1
# 11116 "/home/ubuntu/neovim/src/nvim/regexp.c"
     , 0);
    } else {
      return (semsg((gettext(e_unmatchedp)), (reg_magic == MAGIC_ALL) ? "" : "\\"), rc_did_emsg = 
# 11118 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
     1
# 11118 "/home/ubuntu/neovim/src/nvim/regexp.c"
     , 0);
    }
  } else if (paren == 0 && peekchr() != '\000') {
    if (peekchr() == ((int)(')') - 256)) {
      return (semsg((gettext(e_unmatchedpar)), (reg_magic == MAGIC_ALL) ? "" : "\\"), rc_did_emsg = 
# 11122 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
     1
# 11122 "/home/ubuntu/neovim/src/nvim/regexp.c"
     , 0);
    } else {
      return (emsg(gettext("E873: (NFA regexp) proper termination error")), rc_did_emsg = 
# 11124 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
     1
# 11124 "/home/ubuntu/neovim/src/nvim/regexp.c"
     , 0);
    }
  }


  if (paren == 1) {
    had_endbrace[parno] = 
# 11130 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                         1
# 11130 "/home/ubuntu/neovim/src/nvim/regexp.c"
                             ;
    do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_MOPEN + parno; } while (0);
  } else if (paren == 2) {
    do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_ZOPEN + parno; } while (0);
  }

  return 1;
}
# 11619 "/home/ubuntu/neovim/src/nvim/regexp.c"
static int *re2post(void)
{
  if (nfa_reg(0) == 0) {
    return 
# 11622 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
          ((void *)0)
# 11622 "/home/ubuntu/neovim/src/nvim/regexp.c"
              ;
  }
  do { if (post_ptr >= post_end) { realloc_post_list(); } *post_ptr++ = NFA_MOPEN; } while (0);
  return post_start;
}
# 11635 "/home/ubuntu/neovim/src/nvim/regexp.c"
static nfa_state_T *state_ptr;


static nfa_state_T *alloc_state(int c, nfa_state_T *out, nfa_state_T *out1)
{
  nfa_state_T *s;

  if (istate >= nstate) {
    return 
# 11643 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
          ((void *)0)
# 11643 "/home/ubuntu/neovim/src/nvim/regexp.c"
              ;
  }

  s = &state_ptr[istate++];

  s->c = c;
  s->out = out;
  s->out1 = out1;
  s->val = 0;

  s->id = istate;
  s->lastlist[0] = 0;
  s->lastlist[1] = 0;

  return s;
}







static Frag_T frag(nfa_state_T *start, Ptrlist *out)
{
  Frag_T n;

  n.start = start;
  n.out = out;
  return n;
}


static Ptrlist *list1(nfa_state_T **outp)
{
  Ptrlist *l;

  l = (Ptrlist *)outp;
  l->next = 
# 11681 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
           ((void *)0)
# 11681 "/home/ubuntu/neovim/src/nvim/regexp.c"
               ;
  return l;
}


static void patch(Ptrlist *l, nfa_state_T *s)
{
  Ptrlist *next;

  for (; l; l = next) {
    next = l->next;
    l->s = s;
  }
}


static Ptrlist *append(Ptrlist *l1, Ptrlist *l2)
{
  Ptrlist *oldl1;

  oldl1 = l1;
  while (l1->next) {
    l1 = l1->next;
  }
  l1->next = l2;
  return oldl1;
}


static Frag_T empty;

static void st_error(int *postfix, int *end, int *p)
{
# 11749 "/home/ubuntu/neovim/src/nvim/regexp.c"
  emsg(gettext("E874: (NFA) Could not pop the stack!"));
}


static void st_push(Frag_T s, Frag_T **p, Frag_T *stack_end)
{
  Frag_T *stackp = *p;

  if (stackp >= stack_end) {
    return;
  }
  *stackp = s;
  *p = *p + 1;
}


static Frag_T st_pop(Frag_T **p, Frag_T *stack)
{
  Frag_T *stackp;

  *p = *p - 1;
  stackp = *p;
  if (stackp < stack) {
    return empty;
  }
  return **p;
}



static int nfa_max_width(nfa_state_T *startstate, int depth)
{
  int l, r;
  nfa_state_T *state = startstate;
  int len = 0;


  if (depth > 4) {
    return -1;
  }

  while (state != 
# 11790 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                 ((void *)0)
# 11790 "/home/ubuntu/neovim/src/nvim/regexp.c"
                     ) {
    switch (state->c) {
    case NFA_END_INVISIBLE:
    case NFA_END_INVISIBLE_NEG:

      return len;

    case NFA_SPLIT:

      l = nfa_max_width(state->out, depth + 1);
      r = nfa_max_width(state->out1, depth + 1);
      if (l < 0 || r < 0) {
        return -1;
      }
      return len + (l > r ? l : r);

    case NFA_ANY:
    case NFA_START_COLL:
    case NFA_START_NEG_COLL:

      len += MB_MAXBYTES;
      if (state->c != NFA_ANY) {

        state = state->out1->out;
        continue;
      }
      break;

    case NFA_DIGIT:
    case NFA_WHITE:
    case NFA_HEX:
    case NFA_OCTAL:

      len++;
      break;

    case NFA_IDENT:
    case NFA_SIDENT:
    case NFA_KWORD:
    case NFA_SKWORD:
    case NFA_FNAME:
    case NFA_SFNAME:
    case NFA_PRINT:
    case NFA_SPRINT:
    case NFA_NWHITE:
    case NFA_NDIGIT:
    case NFA_NHEX:
    case NFA_NOCTAL:
    case NFA_WORD:
    case NFA_NWORD:
    case NFA_HEAD:
    case NFA_NHEAD:
    case NFA_ALPHA:
    case NFA_NALPHA:
    case NFA_LOWER:
    case NFA_NLOWER:
    case NFA_UPPER:
    case NFA_NUPPER:
    case NFA_LOWER_IC:
    case NFA_NLOWER_IC:
    case NFA_UPPER_IC:
    case NFA_NUPPER_IC:
    case NFA_ANY_COMPOSING:

      len += 3;
      break;

    case NFA_START_INVISIBLE:
    case NFA_START_INVISIBLE_NEG:
    case NFA_START_INVISIBLE_BEFORE:
    case NFA_START_INVISIBLE_BEFORE_NEG:

      state = state->out1->out;
      continue;

    case NFA_BACKREF1:
    case NFA_BACKREF2:
    case NFA_BACKREF3:
    case NFA_BACKREF4:
    case NFA_BACKREF5:
    case NFA_BACKREF6:
    case NFA_BACKREF7:
    case NFA_BACKREF8:
    case NFA_BACKREF9:
    case NFA_ZREF1:
    case NFA_ZREF2:
    case NFA_ZREF3:
    case NFA_ZREF4:
    case NFA_ZREF5:
    case NFA_ZREF6:
    case NFA_ZREF7:
    case NFA_ZREF8:
    case NFA_ZREF9:
    case NFA_NEWL:
    case NFA_SKIP:

      return -1;

    case NFA_BOL:
    case NFA_EOL:
    case NFA_BOF:
    case NFA_EOF:
    case NFA_BOW:
    case NFA_EOW:
    case NFA_MOPEN:
    case NFA_MOPEN1:
    case NFA_MOPEN2:
    case NFA_MOPEN3:
    case NFA_MOPEN4:
    case NFA_MOPEN5:
    case NFA_MOPEN6:
    case NFA_MOPEN7:
    case NFA_MOPEN8:
    case NFA_MOPEN9:
    case NFA_ZOPEN:
    case NFA_ZOPEN1:
    case NFA_ZOPEN2:
    case NFA_ZOPEN3:
    case NFA_ZOPEN4:
    case NFA_ZOPEN5:
    case NFA_ZOPEN6:
    case NFA_ZOPEN7:
    case NFA_ZOPEN8:
    case NFA_ZOPEN9:
    case NFA_ZCLOSE:
    case NFA_ZCLOSE1:
    case NFA_ZCLOSE2:
    case NFA_ZCLOSE3:
    case NFA_ZCLOSE4:
    case NFA_ZCLOSE5:
    case NFA_ZCLOSE6:
    case NFA_ZCLOSE7:
    case NFA_ZCLOSE8:
    case NFA_ZCLOSE9:
    case NFA_MCLOSE:
    case NFA_MCLOSE1:
    case NFA_MCLOSE2:
    case NFA_MCLOSE3:
    case NFA_MCLOSE4:
    case NFA_MCLOSE5:
    case NFA_MCLOSE6:
    case NFA_MCLOSE7:
    case NFA_MCLOSE8:
    case NFA_MCLOSE9:
    case NFA_NOPEN:
    case NFA_NCLOSE:

    case NFA_LNUM_GT:
    case NFA_LNUM_LT:
    case NFA_COL_GT:
    case NFA_COL_LT:
    case NFA_VCOL_GT:
    case NFA_VCOL_LT:
    case NFA_MARK_GT:
    case NFA_MARK_LT:
    case NFA_VISUAL:
    case NFA_LNUM:
    case NFA_CURSOR:
    case NFA_COL:
    case NFA_VCOL:
    case NFA_MARK:

    case NFA_ZSTART:
    case NFA_ZEND:
    case NFA_OPT_CHARS:
    case NFA_EMPTY:
    case NFA_START_PATTERN:
    case NFA_END_PATTERN:
    case NFA_COMPOSING:
    case NFA_END_COMPOSING:

      break;

    default:
      if (state->c < 0) {

        return -1;
      }

      len += utf_char2len(state->c);
      break;
    }


    state = state->out;
  }


  return -1;
}



static nfa_state_T *post2nfa(int *postfix, int *end, int nfa_calc_size)
{
  int *p;
  int mopen;
  int mclose;
  Frag_T *stack = 
# 11988 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                 ((void *)0)
# 11988 "/home/ubuntu/neovim/src/nvim/regexp.c"
                     ;
  Frag_T *stackp = 
# 11989 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                  ((void *)0)
# 11989 "/home/ubuntu/neovim/src/nvim/regexp.c"
                      ;
  Frag_T *stack_end = 
# 11990 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                     ((void *)0)
# 11990 "/home/ubuntu/neovim/src/nvim/regexp.c"
                         ;
  Frag_T e1;
  Frag_T e2;
  Frag_T e;
  nfa_state_T *s;
  nfa_state_T *s1;
  nfa_state_T *matchstate;
  nfa_state_T *ret = 
# 11997 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                    ((void *)0)
# 11997 "/home/ubuntu/neovim/src/nvim/regexp.c"
                        ;

  if (postfix == 
# 11999 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                ((void *)0)
# 11999 "/home/ubuntu/neovim/src/nvim/regexp.c"
                    ) {
    return 
# 12000 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
          ((void *)0)
# 12000 "/home/ubuntu/neovim/src/nvim/regexp.c"
              ;
  }
# 12011 "/home/ubuntu/neovim/src/nvim/regexp.c"
  if (nfa_calc_size == 
# 12011 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                      0
# 12011 "/home/ubuntu/neovim/src/nvim/regexp.c"
                           ) {

    stack = xmalloc((size_t)(nstate + 1) * sizeof(Frag_T));
    stackp = stack;
    stack_end = stack + (nstate + 1);
  }

  for (p = postfix; p < end; p++) {
    switch (*p) {
    case NFA_CONCAT:




      if (nfa_calc_size == 
# 12025 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                          1
# 12025 "/home/ubuntu/neovim/src/nvim/regexp.c"
                              ) {

        break;
      }
      e2 = st_pop(&stackp, stack); if (stackp < stack) { st_error(postfix, end, p); xfree(stack); return 
# 12029 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
          ((void *)0)
# 12029 "/home/ubuntu/neovim/src/nvim/regexp.c"
          ; };
      e1 = st_pop(&stackp, stack); if (stackp < stack) { st_error(postfix, end, p); xfree(stack); return 
# 12030 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
          ((void *)0)
# 12030 "/home/ubuntu/neovim/src/nvim/regexp.c"
          ; };
      patch(e1.out, e2.start);
      st_push((frag(e1.start, e2.out)), &stackp, stack_end);
      break;

    case NFA_OR:

      if (nfa_calc_size == 
# 12037 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                          1
# 12037 "/home/ubuntu/neovim/src/nvim/regexp.c"
                              ) {
        nstate++;
        break;
      }
      e2 = st_pop(&stackp, stack); if (stackp < stack) { st_error(postfix, end, p); xfree(stack); return 
# 12041 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
          ((void *)0)
# 12041 "/home/ubuntu/neovim/src/nvim/regexp.c"
          ; };
      e1 = st_pop(&stackp, stack); if (stackp < stack) { st_error(postfix, end, p); xfree(stack); return 
# 12042 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
          ((void *)0)
# 12042 "/home/ubuntu/neovim/src/nvim/regexp.c"
          ; };
      s = alloc_state(NFA_SPLIT, e1.start, e2.start);
      if (s == 
# 12044 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
              ((void *)0)
# 12044 "/home/ubuntu/neovim/src/nvim/regexp.c"
                  ) {
        goto theend;
      }
      st_push((frag(s, append(e1.out, e2.out))), &stackp, stack_end);
      break;

    case NFA_STAR:

      if (nfa_calc_size == 
# 12052 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                          1
# 12052 "/home/ubuntu/neovim/src/nvim/regexp.c"
                              ) {
        nstate++;
        break;
      }
      e = st_pop(&stackp, stack); if (stackp < stack) { st_error(postfix, end, p); xfree(stack); return 
# 12056 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
         ((void *)0)
# 12056 "/home/ubuntu/neovim/src/nvim/regexp.c"
         ; };
      s = alloc_state(NFA_SPLIT, e.start, 
# 12057 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                         ((void *)0)
# 12057 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                             );
      if (s == 
# 12058 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
              ((void *)0)
# 12058 "/home/ubuntu/neovim/src/nvim/regexp.c"
                  ) {
        goto theend;
      }
      patch(e.out, s);
      st_push((frag(s, list1(&s->out1))), &stackp, stack_end);
      break;

    case NFA_STAR_NONGREEDY:

      if (nfa_calc_size == 
# 12067 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                          1
# 12067 "/home/ubuntu/neovim/src/nvim/regexp.c"
                              ) {
        nstate++;
        break;
      }
      e = st_pop(&stackp, stack); if (stackp < stack) { st_error(postfix, end, p); xfree(stack); return 
# 12071 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
         ((void *)0)
# 12071 "/home/ubuntu/neovim/src/nvim/regexp.c"
         ; };
      s = alloc_state(NFA_SPLIT, 
# 12072 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                ((void *)0)
# 12072 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                    , e.start);
      if (s == 
# 12073 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
              ((void *)0)
# 12073 "/home/ubuntu/neovim/src/nvim/regexp.c"
                  ) {
        goto theend;
      }
      patch(e.out, s);
      st_push((frag(s, list1(&s->out))), &stackp, stack_end);
      break;

    case NFA_QUEST:

      if (nfa_calc_size == 
# 12082 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                          1
# 12082 "/home/ubuntu/neovim/src/nvim/regexp.c"
                              ) {
        nstate++;
        break;
      }
      e = st_pop(&stackp, stack); if (stackp < stack) { st_error(postfix, end, p); xfree(stack); return 
# 12086 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
         ((void *)0)
# 12086 "/home/ubuntu/neovim/src/nvim/regexp.c"
         ; };
      s = alloc_state(NFA_SPLIT, e.start, 
# 12087 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                         ((void *)0)
# 12087 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                             );
      if (s == 
# 12088 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
              ((void *)0)
# 12088 "/home/ubuntu/neovim/src/nvim/regexp.c"
                  ) {
        goto theend;
      }
      st_push((frag(s, append(e.out, list1(&s->out1)))), &stackp, stack_end);
      break;

    case NFA_QUEST_NONGREEDY:

      if (nfa_calc_size == 
# 12096 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                          1
# 12096 "/home/ubuntu/neovim/src/nvim/regexp.c"
                              ) {
        nstate++;
        break;
      }
      e = st_pop(&stackp, stack); if (stackp < stack) { st_error(postfix, end, p); xfree(stack); return 
# 12100 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
         ((void *)0)
# 12100 "/home/ubuntu/neovim/src/nvim/regexp.c"
         ; };
      s = alloc_state(NFA_SPLIT, 
# 12101 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                ((void *)0)
# 12101 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                    , e.start);
      if (s == 
# 12102 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
              ((void *)0)
# 12102 "/home/ubuntu/neovim/src/nvim/regexp.c"
                  ) {
        goto theend;
      }
      st_push((frag(s, append(e.out, list1(&s->out)))), &stackp, stack_end);
      break;

    case NFA_END_COLL:
    case NFA_END_NEG_COLL:



      if (nfa_calc_size == 
# 12113 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                          1
# 12113 "/home/ubuntu/neovim/src/nvim/regexp.c"
                              ) {
        nstate++;
        break;
      }
      e = st_pop(&stackp, stack); if (stackp < stack) { st_error(postfix, end, p); xfree(stack); return 
# 12117 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
         ((void *)0)
# 12117 "/home/ubuntu/neovim/src/nvim/regexp.c"
         ; };
      s = alloc_state(NFA_END_COLL, 
# 12118 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                   ((void *)0)
# 12118 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                       , 
# 12118 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                         ((void *)0)
# 12118 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                             );
      if (s == 
# 12119 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
              ((void *)0)
# 12119 "/home/ubuntu/neovim/src/nvim/regexp.c"
                  ) {
        goto theend;
      }
      patch(e.out, s);
      e.start->out1 = s;
      st_push((frag(e.start, list1(&s->out))), &stackp, stack_end);
      break;

    case NFA_RANGE:


      if (nfa_calc_size == 
# 12130 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                          1
# 12130 "/home/ubuntu/neovim/src/nvim/regexp.c"
                              ) {

        break;
      }
      e2 = st_pop(&stackp, stack); if (stackp < stack) { st_error(postfix, end, p); xfree(stack); return 
# 12134 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
          ((void *)0)
# 12134 "/home/ubuntu/neovim/src/nvim/regexp.c"
          ; };
      e1 = st_pop(&stackp, stack); if (stackp < stack) { st_error(postfix, end, p); xfree(stack); return 
# 12135 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
          ((void *)0)
# 12135 "/home/ubuntu/neovim/src/nvim/regexp.c"
          ; };
      e2.start->val = e2.start->c;
      e2.start->c = NFA_RANGE_MAX;
      e1.start->val = e1.start->c;
      e1.start->c = NFA_RANGE_MIN;
      patch(e1.out, e2.start);
      st_push((frag(e1.start, e2.out)), &stackp, stack_end);
      break;

    case NFA_EMPTY:

      if (nfa_calc_size == 
# 12146 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                          1
# 12146 "/home/ubuntu/neovim/src/nvim/regexp.c"
                              ) {
        nstate++;
        break;
      }
      s = alloc_state(NFA_EMPTY, 
# 12150 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                ((void *)0)
# 12150 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                    , 
# 12150 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                      ((void *)0)
# 12150 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                          );
      if (s == 
# 12151 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
              ((void *)0)
# 12151 "/home/ubuntu/neovim/src/nvim/regexp.c"
                  ) {
        goto theend;
      }
      st_push((frag(s, list1(&s->out))), &stackp, stack_end);
      break;

    case NFA_OPT_CHARS: {
      int n;
# 12171 "/home/ubuntu/neovim/src/nvim/regexp.c"
      n = *++p;
      if (nfa_calc_size == 
# 12172 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                          1
# 12172 "/home/ubuntu/neovim/src/nvim/regexp.c"
                              ) {
        nstate += n;
        break;
      }
      s = 
# 12176 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
         ((void *)0)
# 12176 "/home/ubuntu/neovim/src/nvim/regexp.c"
             ;
      e1.out = 
# 12177 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
              ((void *)0)
# 12177 "/home/ubuntu/neovim/src/nvim/regexp.c"
                  ;
      s1 = 
# 12178 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
          ((void *)0)
# 12178 "/home/ubuntu/neovim/src/nvim/regexp.c"
              ;
      while (n-- > 0) {
        e = st_pop(&stackp, stack); if (stackp < stack) { st_error(postfix, end, p); xfree(stack); return 
# 12180 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
           ((void *)0)
# 12180 "/home/ubuntu/neovim/src/nvim/regexp.c"
           ; };
        s = alloc_state(NFA_SPLIT, e.start, 
# 12181 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                           ((void *)0)
# 12181 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                               );
        if (s == 
# 12182 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                ((void *)0)
# 12182 "/home/ubuntu/neovim/src/nvim/regexp.c"
                    ) {
          goto theend;
        }
        if (e1.out == 
# 12185 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                     ((void *)0)
# 12185 "/home/ubuntu/neovim/src/nvim/regexp.c"
                         ) {
          e1 = e;
        }
        patch(e.out, s1);
        append(e1.out, list1(&s->out1));
        s1 = s;
      }
      st_push((frag(s, e1.out)), &stackp, stack_end);
      break;
    }

    case NFA_PREV_ATOM_NO_WIDTH:
    case NFA_PREV_ATOM_NO_WIDTH_NEG:
    case NFA_PREV_ATOM_JUST_BEFORE:
    case NFA_PREV_ATOM_JUST_BEFORE_NEG:
    case NFA_PREV_ATOM_LIKE_PATTERN: {
      int before = (*p == NFA_PREV_ATOM_JUST_BEFORE
                    || *p == NFA_PREV_ATOM_JUST_BEFORE_NEG);
      int pattern = (*p == NFA_PREV_ATOM_LIKE_PATTERN);
      int start_state;
      int end_state;
      int n = 0;
      nfa_state_T *zend;
      nfa_state_T *skip;

      switch (*p) {
      case NFA_PREV_ATOM_NO_WIDTH:
        start_state = NFA_START_INVISIBLE;
        end_state = NFA_END_INVISIBLE;
        break;
      case NFA_PREV_ATOM_NO_WIDTH_NEG:
        start_state = NFA_START_INVISIBLE_NEG;
        end_state = NFA_END_INVISIBLE_NEG;
        break;
      case NFA_PREV_ATOM_JUST_BEFORE:
        start_state = NFA_START_INVISIBLE_BEFORE;
        end_state = NFA_END_INVISIBLE;
        break;
      case NFA_PREV_ATOM_JUST_BEFORE_NEG:
        start_state = NFA_START_INVISIBLE_BEFORE_NEG;
        end_state = NFA_END_INVISIBLE_NEG;
        break;
      default:
        start_state = NFA_START_PATTERN;
        end_state = NFA_END_PATTERN;
        break;
      }

      if (before) {
        n = *++p;
      }







      if (nfa_calc_size == 
# 12243 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                          1
# 12243 "/home/ubuntu/neovim/src/nvim/regexp.c"
                              ) {
        nstate += pattern ? 4 : 2;
        break;
      }
      e = st_pop(&stackp, stack); if (stackp < stack) { st_error(postfix, end, p); xfree(stack); return 
# 12247 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
         ((void *)0)
# 12247 "/home/ubuntu/neovim/src/nvim/regexp.c"
         ; };
      s1 = alloc_state(end_state, 
# 12248 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                 ((void *)0)
# 12248 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                     , 
# 12248 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                       ((void *)0)
# 12248 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                           );
      if (s1 == 
# 12249 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
               ((void *)0)
# 12249 "/home/ubuntu/neovim/src/nvim/regexp.c"
                   ) {
        goto theend;
      }

      s = alloc_state(start_state, e.start, s1);
      if (s == 
# 12254 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
              ((void *)0)
# 12254 "/home/ubuntu/neovim/src/nvim/regexp.c"
                  ) {
        goto theend;
      }
      if (pattern) {

        skip = alloc_state(NFA_SKIP, 
# 12259 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                    ((void *)0)
# 12259 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                        , 
# 12259 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                          ((void *)0)
# 12259 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                              );
        if (skip == 
# 12260 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                   ((void *)0)
# 12260 "/home/ubuntu/neovim/src/nvim/regexp.c"
                       ) {
          goto theend;
        }
        zend = alloc_state(NFA_ZEND, s1, 
# 12263 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                        ((void *)0)
# 12263 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                            );
        if (zend == 
# 12264 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                   ((void *)0)
# 12264 "/home/ubuntu/neovim/src/nvim/regexp.c"
                       ) {
          goto theend;
        }
        s1->out = skip;
        patch(e.out, zend);
        st_push((frag(s, list1(&skip->out))), &stackp, stack_end);
      } else {
        patch(e.out, s1);
        st_push((frag(s, list1(&s1->out))), &stackp, stack_end);
        if (before) {
          if (n <= 0) {


            n = nfa_max_width(e.start, 0);
          }
          s->val = n;
        }
      }
      break;
    }

    case NFA_COMPOSING:
      {} __attribute__((fallthrough));

    case NFA_MOPEN:
    case NFA_MOPEN1:
    case NFA_MOPEN2:
    case NFA_MOPEN3:
    case NFA_MOPEN4:
    case NFA_MOPEN5:
    case NFA_MOPEN6:
    case NFA_MOPEN7:
    case NFA_MOPEN8:
    case NFA_MOPEN9:
    case NFA_ZOPEN:
    case NFA_ZOPEN1:
    case NFA_ZOPEN2:
    case NFA_ZOPEN3:
    case NFA_ZOPEN4:
    case NFA_ZOPEN5:
    case NFA_ZOPEN6:
    case NFA_ZOPEN7:
    case NFA_ZOPEN8:
    case NFA_ZOPEN9:
    case NFA_NOPEN:
      if (nfa_calc_size == 
# 12309 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                          1
# 12309 "/home/ubuntu/neovim/src/nvim/regexp.c"
                              ) {
        nstate += 2;
        break;
      }

      mopen = *p;
      switch (*p) {
      case NFA_NOPEN:
        mclose = NFA_NCLOSE; break;
      case NFA_ZOPEN:
        mclose = NFA_ZCLOSE; break;
      case NFA_ZOPEN1:
        mclose = NFA_ZCLOSE1; break;
      case NFA_ZOPEN2:
        mclose = NFA_ZCLOSE2; break;
      case NFA_ZOPEN3:
        mclose = NFA_ZCLOSE3; break;
      case NFA_ZOPEN4:
        mclose = NFA_ZCLOSE4; break;
      case NFA_ZOPEN5:
        mclose = NFA_ZCLOSE5; break;
      case NFA_ZOPEN6:
        mclose = NFA_ZCLOSE6; break;
      case NFA_ZOPEN7:
        mclose = NFA_ZCLOSE7; break;
      case NFA_ZOPEN8:
        mclose = NFA_ZCLOSE8; break;
      case NFA_ZOPEN9:
        mclose = NFA_ZCLOSE9; break;
      case NFA_COMPOSING:
        mclose = NFA_END_COMPOSING; break;
      default:

        mclose = *p + NSUBEXP;
        break;
      }





      if (stackp == stack) {
        s = alloc_state(mopen, 
# 12351 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                              ((void *)0)
# 12351 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                  , 
# 12351 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                    ((void *)0)
# 12351 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                        );
        if (s == 
# 12352 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                ((void *)0)
# 12352 "/home/ubuntu/neovim/src/nvim/regexp.c"
                    ) {
          goto theend;
        }
        s1 = alloc_state(mclose, 
# 12355 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                ((void *)0)
# 12355 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                    , 
# 12355 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                      ((void *)0)
# 12355 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                          );
        if (s1 == 
# 12356 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                 ((void *)0)
# 12356 "/home/ubuntu/neovim/src/nvim/regexp.c"
                     ) {
          goto theend;
        }
        patch(list1(&s->out), s1);
        st_push((frag(s, list1(&s1->out))), &stackp, stack_end);
        break;
      }



      e = st_pop(&stackp, stack); if (stackp < stack) { st_error(postfix, end, p); xfree(stack); return 
# 12366 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
         ((void *)0)
# 12366 "/home/ubuntu/neovim/src/nvim/regexp.c"
         ; };
      s = alloc_state(mopen, e.start, 
# 12367 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                     ((void *)0)
# 12367 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                         );
      if (s == 
# 12368 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
              ((void *)0)
# 12368 "/home/ubuntu/neovim/src/nvim/regexp.c"
                  ) {
        goto theend;
      }

      s1 = alloc_state(mclose, 
# 12372 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                              ((void *)0)
# 12372 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                  , 
# 12372 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                    ((void *)0)
# 12372 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                        );
      if (s1 == 
# 12373 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
               ((void *)0)
# 12373 "/home/ubuntu/neovim/src/nvim/regexp.c"
                   ) {
        goto theend;
      }
      patch(e.out, s1);

      if (mopen == NFA_COMPOSING) {

        patch(list1(&s->out1), s1);
      }

      st_push((frag(s, list1(&s1->out))), &stackp, stack_end);
      break;

    case NFA_BACKREF1:
    case NFA_BACKREF2:
    case NFA_BACKREF3:
    case NFA_BACKREF4:
    case NFA_BACKREF5:
    case NFA_BACKREF6:
    case NFA_BACKREF7:
    case NFA_BACKREF8:
    case NFA_BACKREF9:
    case NFA_ZREF1:
    case NFA_ZREF2:
    case NFA_ZREF3:
    case NFA_ZREF4:
    case NFA_ZREF5:
    case NFA_ZREF6:
    case NFA_ZREF7:
    case NFA_ZREF8:
    case NFA_ZREF9:
      if (nfa_calc_size == 
# 12404 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                          1
# 12404 "/home/ubuntu/neovim/src/nvim/regexp.c"
                              ) {
        nstate += 2;
        break;
      }
      s = alloc_state(*p, 
# 12408 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                         ((void *)0)
# 12408 "/home/ubuntu/neovim/src/nvim/regexp.c"
                             , 
# 12408 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                               ((void *)0)
# 12408 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                   );
      if (s == 
# 12409 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
              ((void *)0)
# 12409 "/home/ubuntu/neovim/src/nvim/regexp.c"
                  ) {
        goto theend;
      }
      s1 = alloc_state(NFA_SKIP, 
# 12412 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                ((void *)0)
# 12412 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                    , 
# 12412 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                      ((void *)0)
# 12412 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                          );
      if (s1 == 
# 12413 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
               ((void *)0)
# 12413 "/home/ubuntu/neovim/src/nvim/regexp.c"
                   ) {
        goto theend;
      }
      patch(list1(&s->out), s1);
      st_push((frag(s, list1(&s1->out))), &stackp, stack_end);
      break;

    case NFA_LNUM:
    case NFA_LNUM_GT:
    case NFA_LNUM_LT:
    case NFA_VCOL:
    case NFA_VCOL_GT:
    case NFA_VCOL_LT:
    case NFA_COL:
    case NFA_COL_GT:
    case NFA_COL_LT:
    case NFA_MARK:
    case NFA_MARK_GT:
    case NFA_MARK_LT: {
      int n = *++p;

      if (nfa_calc_size == 
# 12434 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                          1
# 12434 "/home/ubuntu/neovim/src/nvim/regexp.c"
                              ) {
        nstate += 1;
        break;
      }
      s = alloc_state(p[-1], 
# 12438 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                            ((void *)0)
# 12438 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                , 
# 12438 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                  ((void *)0)
# 12438 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                      );
      if (s == 
# 12439 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
              ((void *)0)
# 12439 "/home/ubuntu/neovim/src/nvim/regexp.c"
                  ) {
        goto theend;
      }
      s->val = n;
      st_push((frag(s, list1(&s->out))), &stackp, stack_end);
      break;
    }

    case NFA_ZSTART:
    case NFA_ZEND:
    default:

      if (nfa_calc_size == 
# 12451 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                          1
# 12451 "/home/ubuntu/neovim/src/nvim/regexp.c"
                              ) {
        nstate++;
        break;
      }
      s = alloc_state(*p, 
# 12455 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                         ((void *)0)
# 12455 "/home/ubuntu/neovim/src/nvim/regexp.c"
                             , 
# 12455 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                               ((void *)0)
# 12455 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                   );
      if (s == 
# 12456 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
              ((void *)0)
# 12456 "/home/ubuntu/neovim/src/nvim/regexp.c"
                  ) {
        goto theend;
      }
      st_push((frag(s, list1(&s->out))), &stackp, stack_end);
      break;
    }
  }

  if (nfa_calc_size == 
# 12464 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                      1
# 12464 "/home/ubuntu/neovim/src/nvim/regexp.c"
                          ) {
    nstate++;
    goto theend;
  }

  e = st_pop(&stackp, stack); if (stackp < stack) { st_error(postfix, end, p); xfree(stack); return 
# 12469 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
     ((void *)0)
# 12469 "/home/ubuntu/neovim/src/nvim/regexp.c"
     ; };
  if (stackp != stack) {
    xfree(stack);
    return (emsg(gettext("E875: (NFA regexp) (While converting from postfix to NFA)," "too many states left on stack")), rc_did_emsg = 
# 12472 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
   1
# 12472 "/home/ubuntu/neovim/src/nvim/regexp.c"
   , (void *)
# 12472 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
   ((void *)0)
# 12472 "/home/ubuntu/neovim/src/nvim/regexp.c"
   )
                                                     ;
  }

  if (istate >= nstate) {
    xfree(stack);
    return (emsg(gettext("E876: (NFA regexp) " "Not enough space to store the whole NFA ")), rc_did_emsg = 
# 12478 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
   1
# 12478 "/home/ubuntu/neovim/src/nvim/regexp.c"
   , (void *)
# 12478 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
   ((void *)0)
# 12478 "/home/ubuntu/neovim/src/nvim/regexp.c"
   )
                                                                ;
  }

  matchstate = &state_ptr[istate++];
  matchstate->c = NFA_MATCH;
  matchstate->out = matchstate->out1 = 
# 12484 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                      ((void *)0)
# 12484 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                          ;
  matchstate->id = 0;

  patch(e.out, matchstate);
  ret = e.start;

theend:
  xfree(stack);
  return ret;







}


static void nfa_postprocess(nfa_regprog_T *prog)
{
  int i;
  int c;

  for (i = 0; i < prog->nstate; i++) {
    c = prog->state[i].c;
    if (c == NFA_START_INVISIBLE
        || c == NFA_START_INVISIBLE_NEG
        || c == NFA_START_INVISIBLE_BEFORE
        || c == NFA_START_INVISIBLE_BEFORE_NEG) {
      int directly;



      if (match_follows(prog->state[i].out1->out, 0)) {
        directly = 
# 12519 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                  1
# 12519 "/home/ubuntu/neovim/src/nvim/regexp.c"
                      ;
      } else {
        int ch_invisible = failure_chance(prog->state[i].out, 0);
        int ch_follows = failure_chance(prog->state[i].out1->out, 0);



        if (c == NFA_START_INVISIBLE_BEFORE
            || c == NFA_START_INVISIBLE_BEFORE_NEG) {




          if (prog->state[i].val <= 0 && ch_follows > 0) {
            directly = 
# 12533 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                      0
# 12533 "/home/ubuntu/neovim/src/nvim/regexp.c"
                           ;
          } else {
            directly = ch_follows * 10 < ch_invisible;
          }
        } else {


          directly = ch_follows < ch_invisible;
        }
      }
      if (directly) {

        prog->state[i].c++;
      }
    }
  }
}
# 12612 "/home/ubuntu/neovim/src/nvim/regexp.c"
static int nfa_match;
static proftime_T *nfa_time_limit;
static int *nfa_timed_out;
static int nfa_time_count;


static void copy_pim(nfa_pim_T *to, nfa_pim_T *from)
{
  to->result = from->result;
  to->state = from->state;
  copy_sub(&to->subs.norm, &from->subs.norm);
  if (rex.nfa_has_zsubexpr) {
    copy_sub(&to->subs.synt, &from->subs.synt);
  }
  to->end = from->end;
}

static void clear_sub(regsub_T *sub)
{
  if ((rex.reg_match == 
# 12631 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
     ((void *)0)
# 12631 "/home/ubuntu/neovim/src/nvim/regexp.c"
     )) {

    memset(sub->list.multi, 0xff, sizeof(struct multipos) * (size_t)rex.nfa_nsubexpr);
  } else {
    memset(sub->list.line, 0, sizeof(struct linepos) * (size_t)rex.nfa_nsubexpr);
  }
  sub->in_use = 0;
}


static void copy_sub(regsub_T *to, regsub_T *from)
{
  to->in_use = from->in_use;
  if (from->in_use <= 0) {
    return;
  }


  if ((rex.reg_match == 
# 12649 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
     ((void *)0)
# 12649 "/home/ubuntu/neovim/src/nvim/regexp.c"
     )) {
    memmove(&to->list.multi[0], &from->list.multi[0],
            sizeof(struct multipos) * (size_t)from->in_use);
    to->orig_start_col = from->orig_start_col;
  } else {
    memmove(&to->list.line[0], &from->list.line[0],
            sizeof(struct linepos) * (size_t)from->in_use);
  }
}


static void copy_sub_off(regsub_T *to, regsub_T *from)
{
  if (to->in_use < from->in_use) {
    to->in_use = from->in_use;
  }
  if (from->in_use <= 1) {
    return;
  }


  if ((rex.reg_match == 
# 12670 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
     ((void *)0)
# 12670 "/home/ubuntu/neovim/src/nvim/regexp.c"
     )) {
    memmove(&to->list.multi[1], &from->list.multi[1],
            sizeof(struct multipos) * (size_t)(from->in_use - 1));
  } else {
    memmove(&to->list.line[1], &from->list.line[1],
            sizeof(struct linepos) * (size_t)(from->in_use - 1));
  }
}


static void copy_ze_off(regsub_T *to, regsub_T *from)
{
  if (!rex.nfa_has_zend) {
    return;
  }

  if ((rex.reg_match == 
# 12686 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
     ((void *)0)
# 12686 "/home/ubuntu/neovim/src/nvim/regexp.c"
     )) {
    if (from->list.multi[0].end_lnum >= 0) {
      to->list.multi[0].end_lnum = from->list.multi[0].end_lnum;
      to->list.multi[0].end_col = from->list.multi[0].end_col;
    }
  } else {
    if (from->list.line[0].end != 
# 12692 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                 ((void *)0)
# 12692 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                     ) {
      to->list.line[0].end = from->list.line[0].end;
    }
  }
}



static 
# 12700 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
      _Bool 
# 12700 "/home/ubuntu/neovim/src/nvim/regexp.c"
           sub_equal(regsub_T *sub1, regsub_T *sub2)
{
  int i;
  int todo;
  linenr_T s1;
  linenr_T s2;
  uint8_t *sp1;
  uint8_t *sp2;

  todo = sub1->in_use > sub2->in_use ? sub1->in_use : sub2->in_use;
  if ((rex.reg_match == 
# 12710 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
     ((void *)0)
# 12710 "/home/ubuntu/neovim/src/nvim/regexp.c"
     )) {
    for (i = 0; i < todo; i++) {
      if (i < sub1->in_use) {
        s1 = sub1->list.multi[i].start_lnum;
      } else {
        s1 = -1;
      }
      if (i < sub2->in_use) {
        s2 = sub2->list.multi[i].start_lnum;
      } else {
        s2 = -1;
      }
      if (s1 != s2) {
        return 
# 12723 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
              0
# 12723 "/home/ubuntu/neovim/src/nvim/regexp.c"
                   ;
      }
      if (s1 != -1 && sub1->list.multi[i].start_col
          != sub2->list.multi[i].start_col) {
        return 
# 12727 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
              0
# 12727 "/home/ubuntu/neovim/src/nvim/regexp.c"
                   ;
      }
      if (rex.nfa_has_backref) {
        if (i < sub1->in_use) {
          s1 = sub1->list.multi[i].end_lnum;
        } else {
          s1 = -1;
        }
        if (i < sub2->in_use) {
          s2 = sub2->list.multi[i].end_lnum;
        } else {
          s2 = -1;
        }
        if (s1 != s2) {
          return 
# 12741 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                0
# 12741 "/home/ubuntu/neovim/src/nvim/regexp.c"
                     ;
        }
        if (s1 != -1
            && sub1->list.multi[i].end_col != sub2->list.multi[i].end_col) {
          return 
# 12745 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                0
# 12745 "/home/ubuntu/neovim/src/nvim/regexp.c"
                     ;
        }
      }
    }
  } else {
    for (i = 0; i < todo; i++) {
      if (i < sub1->in_use) {
        sp1 = sub1->list.line[i].start;
      } else {
        sp1 = 
# 12754 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
             ((void *)0)
# 12754 "/home/ubuntu/neovim/src/nvim/regexp.c"
                 ;
      }
      if (i < sub2->in_use) {
        sp2 = sub2->list.line[i].start;
      } else {
        sp2 = 
# 12759 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
             ((void *)0)
# 12759 "/home/ubuntu/neovim/src/nvim/regexp.c"
                 ;
      }
      if (sp1 != sp2) {
        return 
# 12762 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
              0
# 12762 "/home/ubuntu/neovim/src/nvim/regexp.c"
                   ;
      }
      if (rex.nfa_has_backref) {
        if (i < sub1->in_use) {
          sp1 = sub1->list.line[i].end;
        } else {
          sp1 = 
# 12768 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
               ((void *)0)
# 12768 "/home/ubuntu/neovim/src/nvim/regexp.c"
                   ;
        }
        if (i < sub2->in_use) {
          sp2 = sub2->list.line[i].end;
        } else {
          sp2 = 
# 12773 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
               ((void *)0)
# 12773 "/home/ubuntu/neovim/src/nvim/regexp.c"
                   ;
        }
        if (sp1 != sp2) {
          return 
# 12776 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                0
# 12776 "/home/ubuntu/neovim/src/nvim/regexp.c"
                     ;
        }
      }
    }
  }

  return 
# 12782 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
        1
# 12782 "/home/ubuntu/neovim/src/nvim/regexp.c"
            ;
}
# 12829 "/home/ubuntu/neovim/src/nvim/regexp.c"
static 
# 12829 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
      _Bool 
# 12829 "/home/ubuntu/neovim/src/nvim/regexp.c"
           has_state_with_pos(nfa_list_T *l, nfa_state_T *state, regsubs_T *subs, nfa_pim_T *pim)
  FUNC_ATTR_NONNULL_ARG(1, 2, 3)
{
  for (int i = 0; i < l->n; i++) {
    nfa_thread_T *thread = &l->t[i];
    if (thread->state->id == state->id
        && sub_equal(&thread->subs.norm, &subs->norm)
        && (!rex.nfa_has_zsubexpr
            || sub_equal(&thread->subs.synt, &subs->synt))
        && pim_equal(&thread->pim, pim)) {
      return 
# 12839 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
            1
# 12839 "/home/ubuntu/neovim/src/nvim/regexp.c"
                ;
    }
  }
  return 
# 12842 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
        0
# 12842 "/home/ubuntu/neovim/src/nvim/regexp.c"
             ;
}



static 
# 12847 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
      _Bool 
# 12847 "/home/ubuntu/neovim/src/nvim/regexp.c"
           pim_equal(const nfa_pim_T *one, const nfa_pim_T *two)
{
  const 
# 12849 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
       _Bool 
# 12849 "/home/ubuntu/neovim/src/nvim/regexp.c"
            one_unused = (one == 
# 12849 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                 ((void *)0) 
# 12849 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                      || one->result == 0);
  const 
# 12850 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
       _Bool 
# 12850 "/home/ubuntu/neovim/src/nvim/regexp.c"
            two_unused = (two == 
# 12850 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                 ((void *)0) 
# 12850 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                      || two->result == 0);

  if (one_unused) {

    return two_unused;
  }
  if (two_unused) {

    return 
# 12858 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
          0
# 12858 "/home/ubuntu/neovim/src/nvim/regexp.c"
               ;
  }

  if (one->state->id != two->state->id) {
    return 
# 12862 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
          0
# 12862 "/home/ubuntu/neovim/src/nvim/regexp.c"
               ;
  }

  if ((rex.reg_match == 
# 12865 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
     ((void *)0)
# 12865 "/home/ubuntu/neovim/src/nvim/regexp.c"
     )) {
    return one->end.pos.lnum == two->end.pos.lnum
           && one->end.pos.col == two->end.pos.col;
  }
  return one->end.ptr == two->end.ptr;
}


static 
# 12873 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
      _Bool 
# 12873 "/home/ubuntu/neovim/src/nvim/regexp.c"
           match_follows(const nfa_state_T *startstate, int depth)
  FUNC_ATTR_NONNULL_ALL
{
  const nfa_state_T *state = startstate;


  if (depth > 10) {
    return 
# 12880 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
          0
# 12880 "/home/ubuntu/neovim/src/nvim/regexp.c"
               ;
  }
  while (state != 
# 12882 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                 ((void *)0)
# 12882 "/home/ubuntu/neovim/src/nvim/regexp.c"
                     ) {
    switch (state->c) {
    case NFA_MATCH:
    case NFA_MCLOSE:
    case NFA_END_INVISIBLE:
    case NFA_END_INVISIBLE_NEG:
    case NFA_END_PATTERN:
      return 
# 12889 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
            1
# 12889 "/home/ubuntu/neovim/src/nvim/regexp.c"
                ;

    case NFA_SPLIT:
      return match_follows(state->out, depth + 1)
             || match_follows(state->out1, depth + 1);

    case NFA_START_INVISIBLE:
    case NFA_START_INVISIBLE_FIRST:
    case NFA_START_INVISIBLE_BEFORE:
    case NFA_START_INVISIBLE_BEFORE_FIRST:
    case NFA_START_INVISIBLE_NEG:
    case NFA_START_INVISIBLE_NEG_FIRST:
    case NFA_START_INVISIBLE_BEFORE_NEG:
    case NFA_START_INVISIBLE_BEFORE_NEG_FIRST:
    case NFA_COMPOSING:

      state = state->out1->out;
      continue;

    case NFA_ANY:
    case NFA_ANY_COMPOSING:
    case NFA_IDENT:
    case NFA_SIDENT:
    case NFA_KWORD:
    case NFA_SKWORD:
    case NFA_FNAME:
    case NFA_SFNAME:
    case NFA_PRINT:
    case NFA_SPRINT:
    case NFA_WHITE:
    case NFA_NWHITE:
    case NFA_DIGIT:
    case NFA_NDIGIT:
    case NFA_HEX:
    case NFA_NHEX:
    case NFA_OCTAL:
    case NFA_NOCTAL:
    case NFA_WORD:
    case NFA_NWORD:
    case NFA_HEAD:
    case NFA_NHEAD:
    case NFA_ALPHA:
    case NFA_NALPHA:
    case NFA_LOWER:
    case NFA_NLOWER:
    case NFA_UPPER:
    case NFA_NUPPER:
    case NFA_LOWER_IC:
    case NFA_NLOWER_IC:
    case NFA_UPPER_IC:
    case NFA_NUPPER_IC:
    case NFA_START_COLL:
    case NFA_START_NEG_COLL:
    case NFA_NEWL:

      return 
# 12944 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
            0
# 12944 "/home/ubuntu/neovim/src/nvim/regexp.c"
                 ;

    default:
      if (state->c > 0) {

        return 
# 12949 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
              0
# 12949 "/home/ubuntu/neovim/src/nvim/regexp.c"
                   ;
      }


      break;
    }
    state = state->out;
  }
  return 
# 12957 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
        0
# 12957 "/home/ubuntu/neovim/src/nvim/regexp.c"
             ;
}






static 
# 12965 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
      _Bool 
# 12965 "/home/ubuntu/neovim/src/nvim/regexp.c"
           state_in_list(nfa_list_T *l, nfa_state_T *state, regsubs_T *subs)
  FUNC_ATTR_NONNULL_ALL
{
  if (state->lastlist[nfa_ll_index] == l->id) {
    if (!rex.nfa_has_backref || has_state_with_pos(l, state, subs, 
# 12969 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                                                  ((void *)0)
# 12969 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                                                      )) {
      return 
# 12970 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
            1
# 12970 "/home/ubuntu/neovim/src/nvim/regexp.c"
                ;
    }
  }
  return 
# 12973 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
        0
# 12973 "/home/ubuntu/neovim/src/nvim/regexp.c"
             ;
}
# 12989 "/home/ubuntu/neovim/src/nvim/regexp.c"
static regsubs_T *addstate(nfa_list_T *l, nfa_state_T *state, regsubs_T *subs_arg, nfa_pim_T *pim,
                           int off_arg)
  FUNC_ATTR_NONNULL_ARG(1, 2) FUNC_ATTR_WARN_UNUSED_RESULT
{
  int subidx;
  int off = off_arg;
  int add_here = 
# 12995 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                0
# 12995 "/home/ubuntu/neovim/src/nvim/regexp.c"
                     ;
  int listindex = 0;
  int k;
  int found = 
# 12998 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
             0
# 12998 "/home/ubuntu/neovim/src/nvim/regexp.c"
                  ;
  nfa_thread_T *thread;
  struct multipos save_multipos;
  int save_in_use;
  uint8_t *save_ptr;
  int i;
  regsub_T *sub;
  regsubs_T *subs = subs_arg;
  static regsubs_T temp_subs;



  static int depth = 0;



  if (++depth >= 5000 || subs == 
# 13014 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                ((void *)0)
# 13014 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                    ) {
    depth--;
    return 
# 13016 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
          ((void *)0)
# 13016 "/home/ubuntu/neovim/src/nvim/regexp.c"
              ;
  }

  if (off_arg <= -10) {
    add_here = 
# 13020 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
              1
# 13020 "/home/ubuntu/neovim/src/nvim/regexp.c"
                  ;
    off = 0;
    listindex = -(off_arg + 10);
  }

  switch (state->c) {
  case NFA_NCLOSE:
  case NFA_MCLOSE:
  case NFA_MCLOSE1:
  case NFA_MCLOSE2:
  case NFA_MCLOSE3:
  case NFA_MCLOSE4:
  case NFA_MCLOSE5:
  case NFA_MCLOSE6:
  case NFA_MCLOSE7:
  case NFA_MCLOSE8:
  case NFA_MCLOSE9:
  case NFA_ZCLOSE:
  case NFA_ZCLOSE1:
  case NFA_ZCLOSE2:
  case NFA_ZCLOSE3:
  case NFA_ZCLOSE4:
  case NFA_ZCLOSE5:
  case NFA_ZCLOSE6:
  case NFA_ZCLOSE7:
  case NFA_ZCLOSE8:
  case NFA_ZCLOSE9:
  case NFA_MOPEN:
  case NFA_ZEND:
  case NFA_SPLIT:
  case NFA_EMPTY:


    break;

  case NFA_BOL:
  case NFA_BOF:



    if (rex.input > rex.line
        && *rex.input != '\000'
        && (nfa_endp == 
# 13062 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                       ((void *)0)
            
# 13063 "/home/ubuntu/neovim/src/nvim/regexp.c"
           || !(rex.reg_match == 
# 13063 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
               ((void *)0)
# 13063 "/home/ubuntu/neovim/src/nvim/regexp.c"
               )
            || rex.lnum == nfa_endp->se_u.pos.lnum)) {
      goto skip_add;
    }
    {} __attribute__((fallthrough));

  case NFA_MOPEN1:
  case NFA_MOPEN2:
  case NFA_MOPEN3:
  case NFA_MOPEN4:
  case NFA_MOPEN5:
  case NFA_MOPEN6:
  case NFA_MOPEN7:
  case NFA_MOPEN8:
  case NFA_MOPEN9:
  case NFA_ZOPEN:
  case NFA_ZOPEN1:
  case NFA_ZOPEN2:
  case NFA_ZOPEN3:
  case NFA_ZOPEN4:
  case NFA_ZOPEN5:
  case NFA_ZOPEN6:
  case NFA_ZOPEN7:
  case NFA_ZOPEN8:
  case NFA_ZOPEN9:
  case NFA_NOPEN:
  case NFA_ZSTART:




  default:
    if (state->lastlist[nfa_ll_index] == l->id && state->c != NFA_SKIP) {




      if (!rex.nfa_has_backref && pim == 
# 13100 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                        ((void *)0) 
# 13100 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                             && !l->has_pim
          && state->c != NFA_MATCH) {


        if (add_here) {
          for (k = 0; k < l->n && k < listindex; k++) {
            if (l->t[k].state->id == state->id) {
              found = 
# 13107 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                     1
# 13107 "/home/ubuntu/neovim/src/nvim/regexp.c"
                         ;
              break;
            }
          }
        }

        if (!add_here || found) {
skip_add:







          depth--;
          return subs;
        }
      }



      if (has_state_with_pos(l, state, subs, pim)) {
        goto skip_add;
      }
    }



    if (l->n == l->len) {
      const int newlen = l->len * 3 / 2 + 50;
      const size_t newsize = (size_t)newlen * sizeof(nfa_thread_T);

      if ((int64_t)(newsize >> 10) >= p_mmp) {
        emsg(gettext(e_pattern_uses_more_memory_than_maxmempattern));
        depth--;
        return 
# 13143 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
              ((void *)0)
# 13143 "/home/ubuntu/neovim/src/nvim/regexp.c"
                  ;
      }
      if (subs != &temp_subs) {


        copy_sub(&temp_subs.norm, &subs->norm);
        if (rex.nfa_has_zsubexpr) {
          copy_sub(&temp_subs.synt, &subs->synt);
        }
        subs = &temp_subs;
      }

      nfa_thread_T *const newt = xrealloc(l->t, newsize);
      l->t = newt;
      l->len = newlen;
    }


    state->lastlist[nfa_ll_index] = l->id;
    thread = &l->t[l->n++];
    thread->state = state;
    if (pim == 
# 13164 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
              ((void *)0)
# 13164 "/home/ubuntu/neovim/src/nvim/regexp.c"
                  ) {
      thread->pim.result = 0;
    } else {
      copy_pim(&thread->pim, pim);
      l->has_pim = 
# 13168 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                  1
# 13168 "/home/ubuntu/neovim/src/nvim/regexp.c"
                      ;
    }
    copy_sub(&thread->subs.norm, &subs->norm);
    if (rex.nfa_has_zsubexpr) {
      copy_sub(&thread->subs.synt, &subs->synt);
    }




  }






  switch (state->c) {
  case NFA_MATCH:
    break;

  case NFA_SPLIT:

    subs = addstate(l, state->out, subs, pim, off_arg);
    subs = addstate(l, state->out1, subs, pim, off_arg);
    break;

  case NFA_EMPTY:
  case NFA_NOPEN:
  case NFA_NCLOSE:
    subs = addstate(l, state->out, subs, pim, off_arg);
    break;

  case NFA_MOPEN:
  case NFA_MOPEN1:
  case NFA_MOPEN2:
  case NFA_MOPEN3:
  case NFA_MOPEN4:
  case NFA_MOPEN5:
  case NFA_MOPEN6:
  case NFA_MOPEN7:
  case NFA_MOPEN8:
  case NFA_MOPEN9:
  case NFA_ZOPEN:
  case NFA_ZOPEN1:
  case NFA_ZOPEN2:
  case NFA_ZOPEN3:
  case NFA_ZOPEN4:
  case NFA_ZOPEN5:
  case NFA_ZOPEN6:
  case NFA_ZOPEN7:
  case NFA_ZOPEN8:
  case NFA_ZOPEN9:
  case NFA_ZSTART:
    if (state->c == NFA_ZSTART) {
      subidx = 0;
      sub = &subs->norm;
    } else if (state->c >= NFA_ZOPEN && state->c <= NFA_ZOPEN9) {
      subidx = state->c - NFA_ZOPEN;
      sub = &subs->synt;
    } else {
      subidx = state->c - NFA_MOPEN;
      sub = &subs->norm;
    }


    save_ptr = 
# 13234 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
              ((void *)0)
# 13234 "/home/ubuntu/neovim/src/nvim/regexp.c"
                  ;
    memset(&(save_multipos), 0, sizeof(save_multipos));



    if ((rex.reg_match == 
# 13239 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
       ((void *)0)
# 13239 "/home/ubuntu/neovim/src/nvim/regexp.c"
       )) {
      if (subidx < sub->in_use) {
        save_multipos = sub->list.multi[subidx];
        save_in_use = -1;
      } else {
        save_in_use = sub->in_use;
        for (i = sub->in_use; i < subidx; i++) {
          sub->list.multi[i].start_lnum = -1;
          sub->list.multi[i].end_lnum = -1;
        }
        sub->in_use = subidx + 1;
      }
      if (off == -1) {
        sub->list.multi[subidx].start_lnum = rex.lnum + 1;
        sub->list.multi[subidx].start_col = 0;
      } else {
        sub->list.multi[subidx].start_lnum = rex.lnum;
        sub->list.multi[subidx].start_col =
          (colnr_T)(rex.input - rex.line + off);
      }
      sub->list.multi[subidx].end_lnum = -1;
    } else {
      if (subidx < sub->in_use) {
        save_ptr = sub->list.line[subidx].start;
        save_in_use = -1;
      } else {
        save_in_use = sub->in_use;
        for (i = sub->in_use; i < subidx; i++) {
          sub->list.line[i].start = 
# 13267 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                   ((void *)0)
# 13267 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                       ;
          sub->list.line[i].end = 
# 13268 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                 ((void *)0)
# 13268 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                     ;
        }
        sub->in_use = subidx + 1;
      }
      sub->list.line[subidx].start = rex.input + off;
    }

    subs = addstate(l, state->out, subs, pim, off_arg);
    if (subs == 
# 13276 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
               ((void *)0)
# 13276 "/home/ubuntu/neovim/src/nvim/regexp.c"
                   ) {
      break;
    }

    if (state->c >= NFA_ZOPEN && state->c <= NFA_ZOPEN9) {
      sub = &subs->synt;
    } else {
      sub = &subs->norm;
    }

    if (save_in_use == -1) {
      if ((rex.reg_match == 
# 13287 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
         ((void *)0)
# 13287 "/home/ubuntu/neovim/src/nvim/regexp.c"
         )) {
        sub->list.multi[subidx] = save_multipos;
      } else {
        sub->list.line[subidx].start = save_ptr;
      }
    } else {
      sub->in_use = save_in_use;
    }
    break;

  case NFA_MCLOSE:
    if (rex.nfa_has_zend
        && ((rex.reg_match == 
# 13299 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
           ((void *)0)
# 13299 "/home/ubuntu/neovim/src/nvim/regexp.c"
           )
            ? subs->norm.list.multi[0].end_lnum >= 0
            : subs->norm.list.line[0].end != 
# 13301 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                            ((void *)0)
# 13301 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                                )) {

      subs = addstate(l, state->out, subs, pim, off_arg);
      break;
    }
    {} __attribute__((fallthrough));
  case NFA_MCLOSE1:
  case NFA_MCLOSE2:
  case NFA_MCLOSE3:
  case NFA_MCLOSE4:
  case NFA_MCLOSE5:
  case NFA_MCLOSE6:
  case NFA_MCLOSE7:
  case NFA_MCLOSE8:
  case NFA_MCLOSE9:
  case NFA_ZCLOSE:
  case NFA_ZCLOSE1:
  case NFA_ZCLOSE2:
  case NFA_ZCLOSE3:
  case NFA_ZCLOSE4:
  case NFA_ZCLOSE5:
  case NFA_ZCLOSE6:
  case NFA_ZCLOSE7:
  case NFA_ZCLOSE8:
  case NFA_ZCLOSE9:
  case NFA_ZEND:
    if (state->c == NFA_ZEND) {
      subidx = 0;
      sub = &subs->norm;
    } else if (state->c >= NFA_ZCLOSE && state->c <= NFA_ZCLOSE9) {
      subidx = state->c - NFA_ZCLOSE;
      sub = &subs->synt;
    } else {
      subidx = state->c - NFA_MCLOSE;
      sub = &subs->norm;
    }



    save_in_use = sub->in_use;
    if (sub->in_use <= subidx) {
      sub->in_use = subidx + 1;
    }
    if ((rex.reg_match == 
# 13344 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
       ((void *)0)
# 13344 "/home/ubuntu/neovim/src/nvim/regexp.c"
       )) {
      save_multipos = sub->list.multi[subidx];
      if (off == -1) {
        sub->list.multi[subidx].end_lnum = rex.lnum + 1;
        sub->list.multi[subidx].end_col = 0;
      } else {
        sub->list.multi[subidx].end_lnum = rex.lnum;
        sub->list.multi[subidx].end_col =
          (colnr_T)(rex.input - rex.line + off);
      }

      save_ptr = 
# 13355 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                ((void *)0)
# 13355 "/home/ubuntu/neovim/src/nvim/regexp.c"
                    ;
    } else {
      save_ptr = sub->list.line[subidx].end;
      sub->list.line[subidx].end = rex.input + off;

      memset(&(save_multipos), 0, sizeof(save_multipos));
    }

    subs = addstate(l, state->out, subs, pim, off_arg);
    if (subs == 
# 13364 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
               ((void *)0)
# 13364 "/home/ubuntu/neovim/src/nvim/regexp.c"
                   ) {
      break;
    }

    if (state->c >= NFA_ZCLOSE && state->c <= NFA_ZCLOSE9) {
      sub = &subs->synt;
    } else {
      sub = &subs->norm;
    }

    if ((rex.reg_match == 
# 13374 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
       ((void *)0)
# 13374 "/home/ubuntu/neovim/src/nvim/regexp.c"
       )) {
      sub->list.multi[subidx] = save_multipos;
    } else {
      sub->list.line[subidx].end = save_ptr;
    }
    sub->in_use = save_in_use;
    break;
  }
  depth--;
  return subs;
}
# 13395 "/home/ubuntu/neovim/src/nvim/regexp.c"
static regsubs_T *addstate_here(nfa_list_T *l, nfa_state_T *state, regsubs_T *subs, nfa_pim_T *pim,
                                int *ip)
  FUNC_ATTR_NONNULL_ARG(1, 2, 5) FUNC_ATTR_WARN_UNUSED_RESULT
{
  int tlen = l->n;
  int count;
  int listidx = *ip;




  regsubs_T *r = addstate(l, state, subs, pim, -listidx - 10);
  if (r == 
# 13407 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
          ((void *)0)
# 13407 "/home/ubuntu/neovim/src/nvim/regexp.c"
              ) {
    return 
# 13408 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
          ((void *)0)
# 13408 "/home/ubuntu/neovim/src/nvim/regexp.c"
              ;
  }


  if (listidx + 1 == tlen) {
    return r;
  }


  count = l->n - tlen;
  if (count == 0) {
    return r;
  }
  if (count == 1) {

    l->t[listidx] = l->t[l->n - 1];
  } else if (count > 1) {
    if (l->n + count - 1 >= l->len) {


      const int newlen = l->len * 3 / 2 + 50;
      const size_t newsize = (size_t)newlen * sizeof(nfa_thread_T);

      if ((int64_t)(newsize >> 10) >= p_mmp) {
        emsg(gettext(e_pattern_uses_more_memory_than_maxmempattern));
        return 
# 13433 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
              ((void *)0)
# 13433 "/home/ubuntu/neovim/src/nvim/regexp.c"
                  ;
      }
      nfa_thread_T *const newl = xmalloc(newsize);
      l->len = newlen;
      memmove(&(newl[0]),
              &(l->t[0]),
              sizeof(nfa_thread_T) * (size_t)listidx);
      memmove(&(newl[listidx]),
              &(l->t[l->n - count]),
              sizeof(nfa_thread_T) * (size_t)count);
      memmove(&(newl[listidx + count]),
              &(l->t[listidx + 1]),
              sizeof(nfa_thread_T) * (size_t)(l->n - count - listidx - 1));
      xfree(l->t);
      l->t = newl;
    } else {


      memmove(&(l->t[listidx + count]),
              &(l->t[listidx + 1]),
              sizeof(nfa_thread_T) * (size_t)(l->n - listidx - 1));
      memmove(&(l->t[listidx]),
              &(l->t[l->n - 1]),
              sizeof(nfa_thread_T) * (size_t)count);
    }
  }
  l->n--;
  *ip = listidx - 1;

  return r;
}


static int check_char_class(int cls, int c)
{
  switch (cls) {
  case NFA_CLASS_ALNUM:
    if (c >= 1 && c < 128 && 
# 13470 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                            ((*__ctype_b_loc ())[(int) ((
# 13470 "/home/ubuntu/neovim/src/nvim/regexp.c"
                            c
# 13470 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                            ))] & (unsigned short int) _ISalnum)
# 13470 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                      ) {
      return 1;
    }
    break;
  case NFA_CLASS_ALPHA:
    if (c >= 1 && c < 128 && 
# 13475 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                            ((*__ctype_b_loc ())[(int) ((
# 13475 "/home/ubuntu/neovim/src/nvim/regexp.c"
                            c
# 13475 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                            ))] & (unsigned short int) _ISalpha)
# 13475 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                      ) {
      return 1;
    }
    break;
  case NFA_CLASS_BLANK:
    if (c == ' ' || c == '\t') {
      return 1;
    }
    break;
  case NFA_CLASS_CNTRL:
    if (c >= 1 && c <= 127 && 
# 13485 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                             ((*__ctype_b_loc ())[(int) ((
# 13485 "/home/ubuntu/neovim/src/nvim/regexp.c"
                             c
# 13485 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                             ))] & (unsigned short int) _IScntrl)
# 13485 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                       ) {
      return 1;
    }
    break;
  case NFA_CLASS_DIGIT:
    if (ascii_isdigit(c)) {
      return 1;
    }
    break;
  case NFA_CLASS_GRAPH:
    if (c >= 1 && c <= 127 && 
# 13495 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                             ((*__ctype_b_loc ())[(int) ((
# 13495 "/home/ubuntu/neovim/src/nvim/regexp.c"
                             c
# 13495 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                             ))] & (unsigned short int) _ISgraph)
# 13495 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                       ) {
      return 1;
    }
    break;
  case NFA_CLASS_LOWER:
    if (mb_islower(c) && c != 170 && c != 186) {
      return 1;
    }
    break;
  case NFA_CLASS_PRINT:
    if (vim_isprintc(c)) {
      return 1;
    }
    break;
  case NFA_CLASS_PUNCT:
    if (c >= 1 && c < 128 && 
# 13510 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                            ((*__ctype_b_loc ())[(int) ((
# 13510 "/home/ubuntu/neovim/src/nvim/regexp.c"
                            c
# 13510 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                            ))] & (unsigned short int) _ISpunct)
# 13510 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                      ) {
      return 1;
    }
    break;
  case NFA_CLASS_SPACE:
    if ((c >= 9 && c <= 13) || (c == ' ')) {
      return 1;
    }
    break;
  case NFA_CLASS_UPPER:
    if (mb_isupper(c)) {
      return 1;
    }
    break;
  case NFA_CLASS_XDIGIT:
    if (ascii_isxdigit(c)) {
      return 1;
    }
    break;
  case NFA_CLASS_TAB:
    if (c == '\t') {
      return 1;
    }
    break;
  case NFA_CLASS_RETURN:
    if (c == '\r') {
      return 1;
    }
    break;
  case NFA_CLASS_BACKSPACE:
    if (c == '\b') {
      return 1;
    }
    break;
  case NFA_CLASS_ESCAPE:
    if (c == '\033') {
      return 1;
    }
    break;
  case NFA_CLASS_IDENT:
    if (vim_isIDc(c)) {
      return 1;
    }
    break;
  case NFA_CLASS_KEYWORD:
    if (reg_iswordc(c)) {
      return 1;
    }
    break;
  case NFA_CLASS_FNAME:
    if (vim_isfilec(c)) {
      return 1;
    }
    break;

  default:

    siemsg(gettext(e_ill_char_class), (int64_t)cls);
    return 0;
  }
  return 0;
}







static int match_backref(regsub_T *sub, int subidx, int *bytelen)
{
  int len;

  if (sub->in_use <= subidx) {
retempty:

    *bytelen = 0;
    return 
# 13587 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
          1
# 13587 "/home/ubuntu/neovim/src/nvim/regexp.c"
              ;
  }

  if ((rex.reg_match == 
# 13590 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
     ((void *)0)
# 13590 "/home/ubuntu/neovim/src/nvim/regexp.c"
     )) {
    if (sub->list.multi[subidx].start_lnum < 0
        || sub->list.multi[subidx].end_lnum < 0) {
      goto retempty;
    }
    if (sub->list.multi[subidx].start_lnum == rex.lnum
        && sub->list.multi[subidx].end_lnum == rex.lnum) {
      len = sub->list.multi[subidx].end_col
            - sub->list.multi[subidx].start_col;
      if (cstrncmp((char *)rex.line + sub->list.multi[subidx].start_col,
                   (char *)rex.input, &len) == 0) {
        *bytelen = len;
        return 
# 13602 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
              1
# 13602 "/home/ubuntu/neovim/src/nvim/regexp.c"
                  ;
      }
    } else {
      if (match_with_backref(sub->list.multi[subidx].start_lnum,
                             sub->list.multi[subidx].start_col,
                             sub->list.multi[subidx].end_lnum,
                             sub->list.multi[subidx].end_col,
                             bytelen) == 4) {
        return 
# 13610 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
              1
# 13610 "/home/ubuntu/neovim/src/nvim/regexp.c"
                  ;
      }
    }
  } else {
    if (sub->list.line[subidx].start == 
# 13614 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                       ((void *)0)
        
# 13615 "/home/ubuntu/neovim/src/nvim/regexp.c"
       || sub->list.line[subidx].end == 
# 13615 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                        ((void *)0)
# 13615 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                            ) {
      goto retempty;
    }
    len = (int)(sub->list.line[subidx].end - sub->list.line[subidx].start);
    if (cstrncmp((char *)sub->list.line[subidx].start, (char *)rex.input, &len) == 0) {
      *bytelen = len;
      return 
# 13621 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
            1
# 13621 "/home/ubuntu/neovim/src/nvim/regexp.c"
                ;
    }
  }
  return 
# 13624 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
        0
# 13624 "/home/ubuntu/neovim/src/nvim/regexp.c"
             ;
}






static int match_zref(int subidx, int *bytelen)
{
  int len;

  cleanup_zsubexpr();
  if (re_extmatch_in == 
# 13637 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                       ((void *)0) 
# 13637 "/home/ubuntu/neovim/src/nvim/regexp.c"
                            || re_extmatch_in->matches[subidx] == 
# 13637 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                                                  ((void *)0)
# 13637 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                                                      ) {

    *bytelen = 0;
    return 
# 13640 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
          1
# 13640 "/home/ubuntu/neovim/src/nvim/regexp.c"
              ;
  }

  len = (int)strlen((char *)re_extmatch_in->matches[subidx]);
  if (cstrncmp((char *)re_extmatch_in->matches[subidx], (char *)rex.input, &len) == 0) {
    *bytelen = len;
    return 
# 13646 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
          1
# 13646 "/home/ubuntu/neovim/src/nvim/regexp.c"
              ;
  }
  return 
# 13648 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
        0
# 13648 "/home/ubuntu/neovim/src/nvim/regexp.c"
             ;
}




static void nfa_save_listids(nfa_regprog_T *prog, int *list)
{
  int i;
  nfa_state_T *p;


  p = &prog->state[0];
  for (i = prog->nstate; --i >= 0;) {
    list[i] = p->lastlist[1];
    p->lastlist[1] = 0;
    p++;
  }
}


static void nfa_restore_listids(nfa_regprog_T *prog, const int *list)
{
  int i;
  nfa_state_T *p;

  p = &prog->state[0];
  for (i = prog->nstate; --i >= 0;) {
    p->lastlist[1] = list[i];
    p++;
  }
}

static 
# 13681 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
      _Bool 
# 13681 "/home/ubuntu/neovim/src/nvim/regexp.c"
           nfa_re_num_cmp(uintmax_t val, int op, uintmax_t pos)
{
  if (op == 1) {
    return pos > val;
  }
  if (op == 2) {
    return pos < val;
  }
  return val == pos;
}




static int recursive_regmatch(nfa_state_T *state, nfa_pim_T *pim, nfa_regprog_T *prog,
                              regsubs_T *submatch, regsubs_T *m, int **listids, int *listids_len)
  FUNC_ATTR_NONNULL_ARG(1, 3, 5, 6, 7)
{
  const int save_reginput_col = (int)(rex.input - rex.line);
  const int save_reglnum = rex.lnum;
  const int save_nfa_match = nfa_match;
  const int save_nfa_listid = rex.nfa_listid;
  save_se_T *const save_nfa_endp = nfa_endp;
  save_se_T endpos;
  save_se_T *endposp = 
# 13705 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                      ((void *)0)
# 13705 "/home/ubuntu/neovim/src/nvim/regexp.c"
                          ;
  int need_restore = 
# 13706 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                    0
# 13706 "/home/ubuntu/neovim/src/nvim/regexp.c"
                         ;

  if (pim != 
# 13708 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
            ((void *)0)
# 13708 "/home/ubuntu/neovim/src/nvim/regexp.c"
                ) {

    if ((rex.reg_match == 
# 13710 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
       ((void *)0)
# 13710 "/home/ubuntu/neovim/src/nvim/regexp.c"
       )) {
      rex.input = rex.line + pim->end.pos.col;
    } else {
      rex.input = pim->end.ptr;
    }
  }

  if (state->c == NFA_START_INVISIBLE_BEFORE
      || state->c == NFA_START_INVISIBLE_BEFORE_FIRST
      || state->c == NFA_START_INVISIBLE_BEFORE_NEG
      || state->c == NFA_START_INVISIBLE_BEFORE_NEG_FIRST) {


    endposp = &endpos;
    if ((rex.reg_match == 
# 13724 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
       ((void *)0)
# 13724 "/home/ubuntu/neovim/src/nvim/regexp.c"
       )) {
      if (pim == 
# 13725 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                ((void *)0)
# 13725 "/home/ubuntu/neovim/src/nvim/regexp.c"
                    ) {
        endpos.se_u.pos.col = (int)(rex.input - rex.line);
        endpos.se_u.pos.lnum = rex.lnum;
      } else {
        endpos.se_u.pos = pim->end.pos;
      }
    } else {
      if (pim == 
# 13732 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                ((void *)0)
# 13732 "/home/ubuntu/neovim/src/nvim/regexp.c"
                    ) {
        endpos.se_u.ptr = rex.input;
      } else {
        endpos.se_u.ptr = pim->end.ptr;
      }
    }





    if (state->val <= 0) {
      if ((rex.reg_match == 
# 13744 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
         ((void *)0)
# 13744 "/home/ubuntu/neovim/src/nvim/regexp.c"
         )) {
        rex.line = (uint8_t *)reg_getline(--rex.lnum);
        if (rex.line == 
# 13746 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                       ((void *)0)
# 13746 "/home/ubuntu/neovim/src/nvim/regexp.c"
                           ) {

          rex.line = (uint8_t *)reg_getline(++rex.lnum);
        }
      }
      rex.input = rex.line;
    } else {
      if ((rex.reg_match == 
# 13753 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
         ((void *)0)
# 13753 "/home/ubuntu/neovim/src/nvim/regexp.c"
         ) && (int)(rex.input - rex.line) < state->val) {


        rex.line = (uint8_t *)reg_getline(--rex.lnum);
        if (rex.line == 
# 13757 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                       ((void *)0)
# 13757 "/home/ubuntu/neovim/src/nvim/regexp.c"
                           ) {

          rex.line = (uint8_t *)reg_getline(++rex.lnum);
          rex.input = rex.line;
        } else {
          rex.input = rex.line + reg_getline_len(rex.lnum);
        }
      }
      if ((int)(rex.input - rex.line) >= state->val) {
        rex.input -= state->val;
        rex.input -= utf_head_off((char *)rex.line, (char *)rex.input);
      } else {
        rex.input = rex.line;
      }
    }
  }
# 13782 "/home/ubuntu/neovim/src/nvim/regexp.c"
  if (nfa_ll_index == 1) {


    if (*listids == 
# 13785 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                   ((void *)0) 
# 13785 "/home/ubuntu/neovim/src/nvim/regexp.c"
                        || *listids_len < prog->nstate) {
      xfree(*listids);
      *listids = xmalloc(sizeof(**listids) * (size_t)prog->nstate);
      *listids_len = prog->nstate;
    }
    nfa_save_listids(prog, *listids);
    need_restore = 
# 13791 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                  1
# 13791 "/home/ubuntu/neovim/src/nvim/regexp.c"
                      ;

  } else {



    nfa_ll_index++;
    if (rex.nfa_listid <= rex.nfa_alt_listid) {
      rex.nfa_listid = rex.nfa_alt_listid;
    }
  }



  nfa_endp = endposp;
  const int result = nfa_regmatch(prog, state->out, submatch, m);

  if (need_restore) {
    nfa_restore_listids(prog, *listids);
  } else {
    nfa_ll_index--;
    rex.nfa_alt_listid = rex.nfa_listid;
  }


  rex.lnum = save_reglnum;
  if ((rex.reg_match == 
# 13817 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
     ((void *)0)
# 13817 "/home/ubuntu/neovim/src/nvim/regexp.c"
     )) {
    rex.line = (uint8_t *)reg_getline(rex.lnum);
  }
  rex.input = rex.line + save_reginput_col;
  if (result != NFA_TOO_EXPENSIVE) {
    nfa_match = save_nfa_match;
    rex.nfa_listid = save_nfa_listid;
  }
  nfa_endp = save_nfa_endp;





  return result;
}





static int failure_chance(nfa_state_T *state, int depth)
{
  int c = state->c;
  int l, r;


  if (depth > 4) {
    return 1;
  }

  switch (c) {
  case NFA_SPLIT:
    if (state->out->c == NFA_SPLIT || state->out1->c == NFA_SPLIT) {

      return 1;
    }

    l = failure_chance(state->out, depth + 1);
    r = failure_chance(state->out1, depth + 1);
    return l < r ? l : r;

  case NFA_ANY:

    return 1;

  case NFA_MATCH:
  case NFA_MCLOSE:
  case NFA_ANY_COMPOSING:

    return 0;

  case NFA_START_INVISIBLE:
  case NFA_START_INVISIBLE_FIRST:
  case NFA_START_INVISIBLE_NEG:
  case NFA_START_INVISIBLE_NEG_FIRST:
  case NFA_START_INVISIBLE_BEFORE:
  case NFA_START_INVISIBLE_BEFORE_FIRST:
  case NFA_START_INVISIBLE_BEFORE_NEG:
  case NFA_START_INVISIBLE_BEFORE_NEG_FIRST:
  case NFA_START_PATTERN:

    return 5;

  case NFA_BOL:
  case NFA_EOL:
  case NFA_BOF:
  case NFA_EOF:
  case NFA_NEWL:
    return 99;

  case NFA_BOW:
  case NFA_EOW:
    return 90;

  case NFA_MOPEN:
  case NFA_MOPEN1:
  case NFA_MOPEN2:
  case NFA_MOPEN3:
  case NFA_MOPEN4:
  case NFA_MOPEN5:
  case NFA_MOPEN6:
  case NFA_MOPEN7:
  case NFA_MOPEN8:
  case NFA_MOPEN9:
  case NFA_ZOPEN:
  case NFA_ZOPEN1:
  case NFA_ZOPEN2:
  case NFA_ZOPEN3:
  case NFA_ZOPEN4:
  case NFA_ZOPEN5:
  case NFA_ZOPEN6:
  case NFA_ZOPEN7:
  case NFA_ZOPEN8:
  case NFA_ZOPEN9:
  case NFA_ZCLOSE:
  case NFA_ZCLOSE1:
  case NFA_ZCLOSE2:
  case NFA_ZCLOSE3:
  case NFA_ZCLOSE4:
  case NFA_ZCLOSE5:
  case NFA_ZCLOSE6:
  case NFA_ZCLOSE7:
  case NFA_ZCLOSE8:
  case NFA_ZCLOSE9:
  case NFA_NOPEN:
  case NFA_MCLOSE1:
  case NFA_MCLOSE2:
  case NFA_MCLOSE3:
  case NFA_MCLOSE4:
  case NFA_MCLOSE5:
  case NFA_MCLOSE6:
  case NFA_MCLOSE7:
  case NFA_MCLOSE8:
  case NFA_MCLOSE9:
  case NFA_NCLOSE:
    return failure_chance(state->out, depth + 1);

  case NFA_BACKREF1:
  case NFA_BACKREF2:
  case NFA_BACKREF3:
  case NFA_BACKREF4:
  case NFA_BACKREF5:
  case NFA_BACKREF6:
  case NFA_BACKREF7:
  case NFA_BACKREF8:
  case NFA_BACKREF9:
  case NFA_ZREF1:
  case NFA_ZREF2:
  case NFA_ZREF3:
  case NFA_ZREF4:
  case NFA_ZREF5:
  case NFA_ZREF6:
  case NFA_ZREF7:
  case NFA_ZREF8:
  case NFA_ZREF9:

    return 94;

  case NFA_LNUM_GT:
  case NFA_LNUM_LT:
  case NFA_COL_GT:
  case NFA_COL_LT:
  case NFA_VCOL_GT:
  case NFA_VCOL_LT:
  case NFA_MARK_GT:
  case NFA_MARK_LT:
  case NFA_VISUAL:

    return 85;

  case NFA_LNUM:
    return 90;

  case NFA_CURSOR:
  case NFA_COL:
  case NFA_VCOL:
  case NFA_MARK:

    return 98;

  case NFA_COMPOSING:
    return 95;

  default:
    if (c > 0) {

      return 95;
    }
  }


  return 50;
}


static int skip_to_start(int c, colnr_T *colp)
{
  const uint8_t *const s = (uint8_t *)cstrchr((char *)rex.line + *colp, c);
  if (s == 
# 13996 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
          ((void *)0)
# 13996 "/home/ubuntu/neovim/src/nvim/regexp.c"
              ) {
    return 0;
  }
  *colp = (int)(s - rex.line);
  return 1;
}




static int find_match_text(colnr_T *startcol, int regstart, uint8_t *match_text)
{
  colnr_T col = *startcol;
  const int regstart_len = utf_char2len(regstart);

  while (
# 14011 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
        1
# 14011 "/home/ubuntu/neovim/src/nvim/regexp.c"
            ) {
    
# 14012 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
   _Bool 
# 14012 "/home/ubuntu/neovim/src/nvim/regexp.c"
        match = 
# 14012 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                1
# 14012 "/home/ubuntu/neovim/src/nvim/regexp.c"
                    ;
    uint8_t *s1 = match_text;

    int regstart_len2 = regstart_len;
    if (regstart_len2 > 1 && utf_ptr2len((char *)rex.line + col) != regstart_len2) {


      regstart_len2 = utf_char2len(utf_fold(regstart));
    }
    uint8_t *s2 = rex.line + col + regstart_len2;
    while (*s1) {
      int c1_len = utf_ptr2len((char *)s1);
      int c1 = utf_ptr2char((char *)s1);
      int c2_len = utf_ptr2len((char *)s2);
      int c2 = utf_ptr2char((char *)s2);
      if (c1 != c2 && (!rex.reg_ic || utf_fold(c1) != utf_fold(c2))) {
        match = 
# 14028 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
               0
# 14028 "/home/ubuntu/neovim/src/nvim/regexp.c"
                    ;
        break;
      }
      s1 += c1_len;
      s2 += c2_len;
    }
    if (match

        && !utf_iscomposing(utf_ptr2char((char *)s2))) {
      cleanup_subexpr();
      if ((rex.reg_match == 
# 14038 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
         ((void *)0)
# 14038 "/home/ubuntu/neovim/src/nvim/regexp.c"
         )) {
        rex.reg_startpos[0].lnum = rex.lnum;
        rex.reg_startpos[0].col = col;
        rex.reg_endpos[0].lnum = rex.lnum;
        rex.reg_endpos[0].col = (colnr_T)(s2 - rex.line);
      } else {
        rex.reg_startp[0] = rex.line + col;
        rex.reg_endp[0] = s2;
      }
      *startcol = col;
      return 1L;
    }


    col += regstart_len;
    if (skip_to_start(regstart, &col) == 0) {
      break;
    }
  }

  *startcol = col;
  return 0L;
}

static int nfa_did_time_out(void)
{
  if (nfa_time_limit != 
# 14064 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                       ((void *)0) 
# 14064 "/home/ubuntu/neovim/src/nvim/regexp.c"
                            && profile_passed_limit(*nfa_time_limit)) {
    if (nfa_timed_out != 
# 14065 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                        ((void *)0)
# 14065 "/home/ubuntu/neovim/src/nvim/regexp.c"
                            ) {
      *nfa_timed_out = 
# 14066 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                      1
# 14066 "/home/ubuntu/neovim/src/nvim/regexp.c"
                          ;
    }
    return 
# 14068 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
          1
# 14068 "/home/ubuntu/neovim/src/nvim/regexp.c"
              ;
  }
  return 
# 14070 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
        0
# 14070 "/home/ubuntu/neovim/src/nvim/regexp.c"
             ;
}
# 14084 "/home/ubuntu/neovim/src/nvim/regexp.c"
static int nfa_regmatch(nfa_regprog_T *prog, nfa_state_T *start, regsubs_T *submatch, regsubs_T *m)
  FUNC_ATTR_NONNULL_ARG(1, 2, 4)
{
  int result = 
# 14087 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
              0
# 14087 "/home/ubuntu/neovim/src/nvim/regexp.c"
                   ;
  int flag = 0;
  
# 14089 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
 _Bool 
# 14089 "/home/ubuntu/neovim/src/nvim/regexp.c"
      go_to_nextline = 
# 14089 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                       0
# 14089 "/home/ubuntu/neovim/src/nvim/regexp.c"
                            ;
  nfa_thread_T *t;
  nfa_list_T list[2];
  int listidx;
  nfa_list_T *thislist;
  nfa_list_T *nextlist;
  int *listids = 
# 14095 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                ((void *)0)
# 14095 "/home/ubuntu/neovim/src/nvim/regexp.c"
                    ;
  int listids_len = 0;
  nfa_state_T *add_state;
  
# 14098 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
 _Bool 
# 14098 "/home/ubuntu/neovim/src/nvim/regexp.c"
      add_here;
  int add_count;
  int add_off = 0;
  int toplevel = start->c == NFA_MOPEN;
  regsubs_T *r;


  reg_breakcheck();
  if (got_int) {
    return 
# 14107 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
          0
# 14107 "/home/ubuntu/neovim/src/nvim/regexp.c"
               ;
  }
  if (nfa_did_time_out()) {
    return 
# 14110 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
          0
# 14110 "/home/ubuntu/neovim/src/nvim/regexp.c"
               ;
  }
# 14121 "/home/ubuntu/neovim/src/nvim/regexp.c"
  nfa_match = 
# 14121 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
             0
# 14121 "/home/ubuntu/neovim/src/nvim/regexp.c"
                  ;


  size_t size = (size_t)(prog->nstate + 1) * sizeof(nfa_thread_T);
  list[0].t = xmalloc(size);
  list[0].len = prog->nstate + 1;
  list[1].t = xmalloc(size);
  list[1].len = prog->nstate + 1;
# 14143 "/home/ubuntu/neovim/src/nvim/regexp.c"
  thislist = &list[0];
  thislist->n = 0;
  thislist->has_pim = 
# 14145 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                     0
# 14145 "/home/ubuntu/neovim/src/nvim/regexp.c"
                          ;
  nextlist = &list[1];
  nextlist->n = 0;
  nextlist->has_pim = 
# 14148 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                     0
# 14148 "/home/ubuntu/neovim/src/nvim/regexp.c"
                          ;



  thislist->id = rex.nfa_listid + 1;



  if (toplevel) {
    if ((rex.reg_match == 
# 14157 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
       ((void *)0)
# 14157 "/home/ubuntu/neovim/src/nvim/regexp.c"
       )) {
      m->norm.list.multi[0].start_lnum = rex.lnum;
      m->norm.list.multi[0].start_col = (colnr_T)(rex.input - rex.line);
      m->norm.orig_start_col = m->norm.list.multi[0].start_col;
    } else {
      m->norm.list.line[0].start = rex.input;
    }
    m->norm.in_use = 1;
    r = addstate(thislist, start->out, m, 
# 14165 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                         ((void *)0)
# 14165 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                             , 0);
  } else {
    r = addstate(thislist, start, m, 
# 14167 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                    ((void *)0)
# 14167 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                        , 0);
  }
  if (r == 
# 14169 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
          ((void *)0)
# 14169 "/home/ubuntu/neovim/src/nvim/regexp.c"
              ) {
    nfa_match = NFA_TOO_EXPENSIVE;
    goto theend;
  }
# 14181 "/home/ubuntu/neovim/src/nvim/regexp.c"
  while (
# 14181 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
        1
# 14181 "/home/ubuntu/neovim/src/nvim/regexp.c"
            ) {
    int curc = utf_ptr2char((char *)rex.input);
    int clen = utfc_ptr2len((char *)rex.input);
    if (curc == '\000') {
      clen = 0;
      go_to_nextline = 
# 14186 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                      0
# 14186 "/home/ubuntu/neovim/src/nvim/regexp.c"
                           ;
    }


    thislist = &list[flag];
    nextlist = &list[flag ^= 1];
    nextlist->n = 0;
    nextlist->has_pim = 
# 14193 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                       0
# 14193 "/home/ubuntu/neovim/src/nvim/regexp.c"
                            ;
    rex.nfa_listid++;
    if (prog->re_engine == AUTOMATIC_ENGINE
        && (rex.nfa_listid >= NFA_MAX_STATES)) {

      nfa_match = NFA_TOO_EXPENSIVE;
      goto theend;
    }

    thislist->id = rex.nfa_listid;
    nextlist->id = rex.nfa_listid + 1;
# 14227 "/home/ubuntu/neovim/src/nvim/regexp.c"
    if (thislist->n == 0) {
      break;
    }


    for (listidx = 0; listidx < thislist->n; listidx++) {


      reg_breakcheck();
      if (got_int) {
        break;
      }
      if (nfa_time_limit != 
# 14239 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                           ((void *)0) 
# 14239 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                && ++nfa_time_count == 20) {
        nfa_time_count = 0;
        if (nfa_did_time_out()) {
          break;
        }
      }
      t = &thislist->t[listidx];
# 14271 "/home/ubuntu/neovim/src/nvim/regexp.c"
      add_state = 
# 14271 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                 ((void *)0)
# 14271 "/home/ubuntu/neovim/src/nvim/regexp.c"
                     ;
      add_here = 
# 14272 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                0
# 14272 "/home/ubuntu/neovim/src/nvim/regexp.c"
                     ;
      add_count = 0;
      switch (t->state->c) {
      case NFA_MATCH:



        if (!rex.reg_icombine
            && rex.input != rex.line
            && utf_iscomposing(curc)) {
          break;
        }
        nfa_match = 
# 14284 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                   1
# 14284 "/home/ubuntu/neovim/src/nvim/regexp.c"
                       ;
        copy_sub(&submatch->norm, &t->subs.norm);
        if (rex.nfa_has_zsubexpr) {
          copy_sub(&submatch->synt, &t->subs.synt);
        }







        if (nextlist->n == 0) {
          clen = 0;
        }
        goto nextchar;

      case NFA_END_INVISIBLE:
      case NFA_END_INVISIBLE_NEG:
      case NFA_END_PATTERN:
# 14332 "/home/ubuntu/neovim/src/nvim/regexp.c"
        if (nfa_endp != 
# 14332 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                       ((void *)0)
            
# 14333 "/home/ubuntu/neovim/src/nvim/regexp.c"
           && ((rex.reg_match == 
# 14333 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
               ((void *)0)
# 14333 "/home/ubuntu/neovim/src/nvim/regexp.c"
               )
                ? (rex.lnum != nfa_endp->se_u.pos.lnum
                   || (int)(rex.input - rex.line) != nfa_endp->se_u.pos.col)
                : rex.input != nfa_endp->se_u.ptr)) {
          break;
        }

        if (t->state->c != NFA_END_INVISIBLE_NEG) {
          copy_sub(&m->norm, &t->subs.norm);
          if (rex.nfa_has_zsubexpr) {
            copy_sub(&m->synt, &t->subs.synt);
          }
        }




        nfa_match = 
# 14350 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                   1
# 14350 "/home/ubuntu/neovim/src/nvim/regexp.c"
                       ;

        if (nextlist->n == 0) {
          clen = 0;
        }
        goto nextchar;

      case NFA_START_INVISIBLE:
      case NFA_START_INVISIBLE_FIRST:
      case NFA_START_INVISIBLE_NEG:
      case NFA_START_INVISIBLE_NEG_FIRST:
      case NFA_START_INVISIBLE_BEFORE:
      case NFA_START_INVISIBLE_BEFORE_FIRST:
      case NFA_START_INVISIBLE_BEFORE_NEG:
      case NFA_START_INVISIBLE_BEFORE_NEG_FIRST:







        if (t->pim.result != 0
            || t->state->c == NFA_START_INVISIBLE_FIRST
            || t->state->c == NFA_START_INVISIBLE_NEG_FIRST
            || t->state->c == NFA_START_INVISIBLE_BEFORE_FIRST
            || t->state->c == NFA_START_INVISIBLE_BEFORE_NEG_FIRST) {
          int in_use = m->norm.in_use;



          copy_sub_off(&m->norm, &t->subs.norm);
          if (rex.nfa_has_zsubexpr) {
            copy_sub_off(&m->synt, &t->subs.synt);
          }


          result = recursive_regmatch(t->state, 
# 14387 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                               ((void *)0)
# 14387 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                                   , prog, submatch, m,
                                      &listids, &listids_len);
          if (result == NFA_TOO_EXPENSIVE) {
            nfa_match = result;
            goto theend;
          }



          if (result != (t->state->c == NFA_START_INVISIBLE_NEG
                         || t->state->c == NFA_START_INVISIBLE_NEG_FIRST
                         || t->state->c
                         == NFA_START_INVISIBLE_BEFORE_NEG
                         || t->state->c
                         == NFA_START_INVISIBLE_BEFORE_NEG_FIRST)) {

            copy_sub_off(&t->subs.norm, &m->norm);
            if (rex.nfa_has_zsubexpr) {
              copy_sub_off(&t->subs.synt, &m->synt);
            }


            copy_ze_off(&t->subs.norm, &m->norm);




            add_here = 
# 14414 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                      1
# 14414 "/home/ubuntu/neovim/src/nvim/regexp.c"
                          ;
            add_state = t->state->out1->out;
          }
          m->norm.in_use = in_use;
        } else {
          nfa_pim_T pim;





          pim.state = t->state;
          pim.result = 1;
          pim.subs.norm.in_use = 0;
          pim.subs.synt.in_use = 0;
          if ((rex.reg_match == 
# 14429 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
             ((void *)0)
# 14429 "/home/ubuntu/neovim/src/nvim/regexp.c"
             )) {
            pim.end.pos.col = (int)(rex.input - rex.line);
            pim.end.pos.lnum = rex.lnum;
          } else {
            pim.end.ptr = rex.input;
          }



          if (addstate_here(thislist, t->state->out1->out, &t->subs,
                            &pim, &listidx) == 
# 14439 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                              ((void *)0)
# 14439 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                                  ) {
            nfa_match = NFA_TOO_EXPENSIVE;
            goto theend;
          }
        }
        break;

      case NFA_START_PATTERN: {
        nfa_state_T *skip = 
# 14447 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                           ((void *)0)
# 14447 "/home/ubuntu/neovim/src/nvim/regexp.c"
                               ;






        if (state_in_list(nextlist, t->state->out1->out, &t->subs)) {
          skip = t->state->out1->out;



        } else if (state_in_list(nextlist,
                                 t->state->out1->out->out, &t->subs)) {
          skip = t->state->out1->out->out;



        } else if (state_in_list(thislist,
                                 t->state->out1->out->out, &t->subs)) {
          skip = t->state->out1->out->out;



        }
        if (skip != 
# 14472 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                   ((void *)0)
# 14472 "/home/ubuntu/neovim/src/nvim/regexp.c"
                       ) {






          break;
        }


        copy_sub_off(&m->norm, &t->subs.norm);
        if (rex.nfa_has_zsubexpr) {
          copy_sub_off(&m->synt, &t->subs.synt);
        }


        result = recursive_regmatch(t->state, 
# 14489 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                             ((void *)0)
# 14489 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                                 , prog, submatch, m,
                                    &listids, &listids_len);
        if (result == NFA_TOO_EXPENSIVE) {
          nfa_match = result;
          goto theend;
        }
        if (result) {
          int bytelen;






          copy_sub_off(&t->subs.norm, &m->norm);
          if (rex.nfa_has_zsubexpr) {
            copy_sub_off(&t->subs.synt, &m->synt);
          }


          if ((rex.reg_match == 
# 14509 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
             ((void *)0)
# 14509 "/home/ubuntu/neovim/src/nvim/regexp.c"
             )) {

            bytelen = m->norm.list.multi[0].end_col
                      - (int)(rex.input - rex.line);
          } else {
            bytelen = (int)(m->norm.list.line[0].end - rex.input);
          }




          if (bytelen == 0) {



            add_here = 
# 14524 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                      1
# 14524 "/home/ubuntu/neovim/src/nvim/regexp.c"
                          ;
            add_state = t->state->out1->out->out;
          } else if (bytelen <= clen) {


            add_state = t->state->out1->out->out;
            add_off = clen;
          } else {


            add_state = t->state->out1->out;
            add_off = bytelen;
            add_count = bytelen - clen;
          }
        }
        break;
      }

      case NFA_BOL:
        if (rex.input == rex.line) {
          add_here = 
# 14544 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                    1
# 14544 "/home/ubuntu/neovim/src/nvim/regexp.c"
                        ;
          add_state = t->state->out;
        }
        break;

      case NFA_EOL:
        if (curc == '\000') {
          add_here = 
# 14551 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                    1
# 14551 "/home/ubuntu/neovim/src/nvim/regexp.c"
                        ;
          add_state = t->state->out;
        }
        break;

      case NFA_BOW:
        result = 
# 14557 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                1
# 14557 "/home/ubuntu/neovim/src/nvim/regexp.c"
                    ;

        if (curc == '\000') {
          result = 
# 14560 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                  0
# 14560 "/home/ubuntu/neovim/src/nvim/regexp.c"
                       ;
        } else {
          int this_class;


          this_class = mb_get_class_tab((char *)rex.input, rex.reg_buf->b_chartab);
          if (this_class <= 1) {
            result = 
# 14567 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                    0
# 14567 "/home/ubuntu/neovim/src/nvim/regexp.c"
                         ;
          } else if (reg_prev_class() == this_class) {
            result = 
# 14569 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                    0
# 14569 "/home/ubuntu/neovim/src/nvim/regexp.c"
                         ;
          }
        }
        if (result) {
          add_here = 
# 14573 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                    1
# 14573 "/home/ubuntu/neovim/src/nvim/regexp.c"
                        ;
          add_state = t->state->out;
        }
        break;

      case NFA_EOW:
        result = 
# 14579 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                1
# 14579 "/home/ubuntu/neovim/src/nvim/regexp.c"
                    ;
        if (rex.input == rex.line) {
          result = 
# 14581 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                  0
# 14581 "/home/ubuntu/neovim/src/nvim/regexp.c"
                       ;
        } else {
          int this_class, prev_class;


          this_class = mb_get_class_tab((char *)rex.input, rex.reg_buf->b_chartab);
          prev_class = reg_prev_class();
          if (this_class == prev_class
              || prev_class == 0 || prev_class == 1) {
            result = 
# 14590 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                    0
# 14590 "/home/ubuntu/neovim/src/nvim/regexp.c"
                         ;
          }
        }
        if (result) {
          add_here = 
# 14594 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                    1
# 14594 "/home/ubuntu/neovim/src/nvim/regexp.c"
                        ;
          add_state = t->state->out;
        }
        break;

      case NFA_BOF:
        if (rex.lnum == 0 && rex.input == rex.line
            && (!(rex.reg_match == 
# 14601 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                ((void *)0)
# 14601 "/home/ubuntu/neovim/src/nvim/regexp.c"
                ) || rex.reg_firstlnum == 1)) {
          add_here = 
# 14602 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                    1
# 14602 "/home/ubuntu/neovim/src/nvim/regexp.c"
                        ;
          add_state = t->state->out;
        }
        break;

      case NFA_EOF:
        if (rex.lnum == rex.reg_maxline && curc == '\000') {
          add_here = 
# 14609 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                    1
# 14609 "/home/ubuntu/neovim/src/nvim/regexp.c"
                        ;
          add_state = t->state->out;
        }
        break;

      case NFA_COMPOSING: {
        int mc = curc;
        int len = 0;
        nfa_state_T *end;
        nfa_state_T *sta;
        int cchars[6];
        int ccount = 0;
        int j;

        sta = t->state->out;
        len = 0;
        if (utf_iscomposing(sta->c)) {



          len += utf_char2len(mc);
        }
        if (rex.reg_icombine && len == 0) {


          if (sta->c != curc) {
            result = 0;
          } else {
            result = 1;
          }
          while (sta->c != NFA_END_COMPOSING) {
            sta = sta->out;
          }
        } else if (len > 0 || mc == sta->c) {

          if (len == 0) {
            len += utf_char2len(mc);
            sta = sta->out;
          }



          while (len < clen) {
            mc = utf_ptr2char((char *)rex.input + len);
            cchars[ccount++] = mc;
            len += utf_char2len(mc);
            if (ccount == 6) {
              break;
            }
          }




          result = 1;
          while (sta->c != NFA_END_COMPOSING) {
            for (j = 0; j < ccount; j++) {
              if (cchars[j] == sta->c) {
                break;
              }
            }
            if (j == ccount) {
              result = 0;
              break;
            }
            sta = sta->out;
          }
        } else {
          result = 0;
        }

        end = t->state->out1;
        if (result) { add_state = (end)->out; add_off = clen; };
        break;
      }

      case NFA_NEWL:
        if (curc == '\000' && !rex.reg_line_lbr && (rex.reg_match == 
# 14686 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                               ((void *)0)
# 14686 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                               )
            && rex.lnum <= rex.reg_maxline) {
          go_to_nextline = 
# 14688 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                          1
# 14688 "/home/ubuntu/neovim/src/nvim/regexp.c"
                              ;


          add_state = t->state->out;
          add_off = -1;
        } else if (curc == '\n' && rex.reg_line_lbr) {

          add_state = t->state->out;
          add_off = 1;
        }
        break;

      case NFA_START_COLL:
      case NFA_START_NEG_COLL: {


        nfa_state_T *state;
        int result_if_matched;
        int c1, c2;



        if (curc == '\000') {
          break;
        }

        state = t->state->out;
        result_if_matched = (t->state->c == NFA_START_COLL);
        while (
# 14716 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
              1
# 14716 "/home/ubuntu/neovim/src/nvim/regexp.c"
                  ) {
          if (state->c == NFA_COMPOSING) {
            int mc = curc;
            int len = 0;
            nfa_state_T *end;
            nfa_state_T *sta;
            int cchars[6];
            int ccount = 0;
            int j;

            sta = t->state->out->out;
            if (utf_iscomposing(sta->c)) {



              len += utf_char2len(mc);
            }
            if (rex.reg_icombine && len == 0) {


              if (sta->c != curc) {
                result = 0;
              } else {
                result = 1;
              }
              while (sta->c != NFA_END_COMPOSING) {
                sta = sta->out;
              }
            }

            else if (len > 0 || mc == sta->c) {
              if (len == 0) {
                len += utf_char2len(mc);
                sta = sta->out;
              }



              while (len < clen) {
                mc = utf_ptr2char((char *)rex.input + len);
                cchars[ccount++] = mc;
                len += utf_char2len(mc);
                if (ccount == 6) {
                  break;
                }
              }




              result = 1;
              while (sta->c != NFA_END_COMPOSING) {
                for (j = 0; j < ccount; j++) {
                  if (cchars[j] == sta->c) {
                    break;
                  }
                }
                if (j == ccount) {
                  result = 0;
                  break;
                }
                sta = sta->out;
              }
            } else {
              result = 0;
            }

            if (t->state->out->out1->c == NFA_END_COMPOSING) {
              end = t->state->out->out1;
              if (result) { add_state = (end)->out; add_off = clen; };
            }
            break;
          }
          if (state->c == NFA_END_COLL) {
            result = !result_if_matched;
            break;
          }
          if (state->c == NFA_RANGE_MIN) {
            c1 = state->val;
            state = state->out;
            c2 = state->val;




            if (curc >= c1 && curc <= c2) {
              result = result_if_matched;
              break;
            }
            if (rex.reg_ic) {
              int curc_low = utf_fold(curc);
              int done = 
# 14807 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                        0
# 14807 "/home/ubuntu/neovim/src/nvim/regexp.c"
                             ;

              for (; c1 <= c2; c1++) {
                if (utf_fold(c1) == curc_low) {
                  result = result_if_matched;
                  done = 
# 14812 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                        1
# 14812 "/home/ubuntu/neovim/src/nvim/regexp.c"
                            ;
                  break;
                }
              }
              if (done) {
                break;
              }
            }
          } else if (state->c < 0 ? check_char_class(state->c, curc)
                                  : (curc == state->c
                                     || (rex.reg_ic
                                         && utf_fold(curc) == utf_fold(state->c)))) {
            result = result_if_matched;
            break;
          }
          state = state->out;
        }
        if (result) {


          add_state = t->state->out1->out;
          add_off = clen;
        }
        break;
      }

      case NFA_ANY:

        if (curc > 0) {
          add_state = t->state->out;
          add_off = clen;
        }
        break;

      case NFA_ANY_COMPOSING:


        if (utf_iscomposing(curc)) {
          add_off = clen;
        } else {
          add_here = 
# 14852 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                    1
# 14852 "/home/ubuntu/neovim/src/nvim/regexp.c"
                        ;
          add_off = 0;
        }
        add_state = t->state->out;
        break;


      case NFA_IDENT:
        result = vim_isIDc(curc);
        if (result) { add_state = (t->state)->out; add_off = clen; };
        break;

      case NFA_SIDENT:
        result = !ascii_isdigit(curc) && vim_isIDc(curc);
        if (result) { add_state = (t->state)->out; add_off = clen; };
        break;

      case NFA_KWORD:
        result = vim_iswordp_buf((char *)rex.input, rex.reg_buf);
        if (result) { add_state = (t->state)->out; add_off = clen; };
        break;

      case NFA_SKWORD:
        result = !ascii_isdigit(curc)
                 && vim_iswordp_buf((char *)rex.input, rex.reg_buf);
        if (result) { add_state = (t->state)->out; add_off = clen; };
        break;

      case NFA_FNAME:
        result = vim_isfilec(curc);
        if (result) { add_state = (t->state)->out; add_off = clen; };
        break;

      case NFA_SFNAME:
        result = !ascii_isdigit(curc) && vim_isfilec(curc);
        if (result) { add_state = (t->state)->out; add_off = clen; };
        break;

      case NFA_PRINT:
        result = vim_isprintc(utf_ptr2char((char *)rex.input));
        if (result) { add_state = (t->state)->out; add_off = clen; };
        break;

      case NFA_SPRINT:
        result = !ascii_isdigit(curc) && vim_isprintc(utf_ptr2char((char *)rex.input));
        if (result) { add_state = (t->state)->out; add_off = clen; };
        break;

      case NFA_WHITE:
        result = ascii_iswhite(curc);
        if (result) { add_state = (t->state)->out; add_off = clen; };
        break;

      case NFA_NWHITE:
        result = curc != '\000' && !ascii_iswhite(curc);
        if (result) { add_state = (t->state)->out; add_off = clen; };
        break;

      case NFA_DIGIT:
        result = ((curc) < 0x100 && (class_tab[curc] & 0x01));
        if (result) { add_state = (t->state)->out; add_off = clen; };
        break;

      case NFA_NDIGIT:
        result = curc != '\000' && !((curc) < 0x100 && (class_tab[curc] & 0x01));
        if (result) { add_state = (t->state)->out; add_off = clen; };
        break;

      case NFA_HEX:
        result = ((curc) < 0x100 && (class_tab[curc] & 0x02));
        if (result) { add_state = (t->state)->out; add_off = clen; };
        break;

      case NFA_NHEX:
        result = curc != '\000' && !((curc) < 0x100 && (class_tab[curc] & 0x02));
        if (result) { add_state = (t->state)->out; add_off = clen; };
        break;

      case NFA_OCTAL:
        result = ((curc) < 0x100 && (class_tab[curc] & 0x04));
        if (result) { add_state = (t->state)->out; add_off = clen; };
        break;

      case NFA_NOCTAL:
        result = curc != '\000' && !((curc) < 0x100 && (class_tab[curc] & 0x04));
        if (result) { add_state = (t->state)->out; add_off = clen; };
        break;

      case NFA_WORD:
        result = ((curc) < 0x100 && (class_tab[curc] & 0x08));
        if (result) { add_state = (t->state)->out; add_off = clen; };
        break;

      case NFA_NWORD:
        result = curc != '\000' && !((curc) < 0x100 && (class_tab[curc] & 0x08));
        if (result) { add_state = (t->state)->out; add_off = clen; };
        break;

      case NFA_HEAD:
        result = ((curc) < 0x100 && (class_tab[curc] & 0x10));
        if (result) { add_state = (t->state)->out; add_off = clen; };
        break;

      case NFA_NHEAD:
        result = curc != '\000' && !((curc) < 0x100 && (class_tab[curc] & 0x10));
        if (result) { add_state = (t->state)->out; add_off = clen; };
        break;

      case NFA_ALPHA:
        result = ((curc) < 0x100 && (class_tab[curc] & 0x20));
        if (result) { add_state = (t->state)->out; add_off = clen; };
        break;

      case NFA_NALPHA:
        result = curc != '\000' && !((curc) < 0x100 && (class_tab[curc] & 0x20));
        if (result) { add_state = (t->state)->out; add_off = clen; };
        break;

      case NFA_LOWER:
        result = ((curc) < 0x100 && (class_tab[curc] & 0x40));
        if (result) { add_state = (t->state)->out; add_off = clen; };
        break;

      case NFA_NLOWER:
        result = curc != '\000' && !((curc) < 0x100 && (class_tab[curc] & 0x40));
        if (result) { add_state = (t->state)->out; add_off = clen; };
        break;

      case NFA_UPPER:
        result = ((curc) < 0x100 && (class_tab[curc] & 0x80));
        if (result) { add_state = (t->state)->out; add_off = clen; };
        break;

      case NFA_NUPPER:
        result = curc != '\000' && !((curc) < 0x100 && (class_tab[curc] & 0x80));
        if (result) { add_state = (t->state)->out; add_off = clen; };
        break;

      case NFA_LOWER_IC:
        result = ((curc) < 0x100 && (class_tab[curc] & 0x40)) || (rex.reg_ic && ((curc) < 0x100 && (class_tab[curc] & 0x80)));
        if (result) { add_state = (t->state)->out; add_off = clen; };
        break;

      case NFA_NLOWER_IC:
        result = curc != '\000'
                 && !(((curc) < 0x100 && (class_tab[curc] & 0x40)) || (rex.reg_ic && ((curc) < 0x100 && (class_tab[curc] & 0x80))));
        if (result) { add_state = (t->state)->out; add_off = clen; };
        break;

      case NFA_UPPER_IC:
        result = ((curc) < 0x100 && (class_tab[curc] & 0x80)) || (rex.reg_ic && ((curc) < 0x100 && (class_tab[curc] & 0x40)));
        if (result) { add_state = (t->state)->out; add_off = clen; };
        break;

      case NFA_NUPPER_IC:
        result = curc != '\000'
                 && !(((curc) < 0x100 && (class_tab[curc] & 0x80)) || (rex.reg_ic && ((curc) < 0x100 && (class_tab[curc] & 0x40))));
        if (result) { add_state = (t->state)->out; add_off = clen; };
        break;

      case NFA_BACKREF1:
      case NFA_BACKREF2:
      case NFA_BACKREF3:
      case NFA_BACKREF4:
      case NFA_BACKREF5:
      case NFA_BACKREF6:
      case NFA_BACKREF7:
      case NFA_BACKREF8:
      case NFA_BACKREF9:
      case NFA_ZREF1:
      case NFA_ZREF2:
      case NFA_ZREF3:
      case NFA_ZREF4:
      case NFA_ZREF5:
      case NFA_ZREF6:
      case NFA_ZREF7:
      case NFA_ZREF8:
      case NFA_ZREF9:

      {
        int subidx;
        int bytelen;

        if (t->state->c <= NFA_BACKREF9) {
          subidx = t->state->c - NFA_BACKREF1 + 1;
          result = match_backref(&t->subs.norm, subidx, &bytelen);
        } else {
          subidx = t->state->c - NFA_ZREF1 + 1;
          result = match_zref(subidx, &bytelen);
        }

        if (result) {
          if (bytelen == 0) {


            add_here = 
# 15047 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                      1
# 15047 "/home/ubuntu/neovim/src/nvim/regexp.c"
                          ;
            add_state = t->state->out->out;
          } else if (bytelen <= clen) {


            add_state = t->state->out->out;
            add_off = clen;
          } else {


            add_state = t->state->out;
            add_off = bytelen;
            add_count = bytelen - clen;
          }
        }
        break;
      }
      case NFA_SKIP:

        if (t->count - clen <= 0) {

          add_state = t->state->out;
          add_off = clen;
        } else {

          add_state = t->state;
          add_off = 0;
          add_count = t->count - clen;
        }
        break;

      case NFA_LNUM:
      case NFA_LNUM_GT:
      case NFA_LNUM_LT:
        
# 15081 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
       ((void) sizeof ((
# 15081 "/home/ubuntu/neovim/src/nvim/regexp.c"
       t->state->val >= 0 && !((rex.reg_firstlnum > 0 && rex.lnum > 0x7fffffffffffffffL - rex.reg_firstlnum) || (rex.reg_firstlnum < 0 && rex.lnum < 
# 15081 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
       (-0x7fffffffffffffffL - 1L) 
# 15081 "/home/ubuntu/neovim/src/nvim/regexp.c"
       + rex.reg_firstlnum)) && rex.lnum + rex.reg_firstlnum >= 0
# 15081 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
       ) ? 1 : 0), __extension__ ({ if (
# 15081 "/home/ubuntu/neovim/src/nvim/regexp.c"
       t->state->val >= 0 && !((rex.reg_firstlnum > 0 && rex.lnum > 0x7fffffffffffffffL - rex.reg_firstlnum) || (rex.reg_firstlnum < 0 && rex.lnum < 
# 15081 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
       (-0x7fffffffffffffffL - 1L) 
# 15081 "/home/ubuntu/neovim/src/nvim/regexp.c"
       + rex.reg_firstlnum)) && rex.lnum + rex.reg_firstlnum >= 0
# 15081 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
       ) ; else __assert_fail (
# 15081 "/home/ubuntu/neovim/src/nvim/regexp.c"
       "t->state->val >= 0 && !((rex.reg_firstlnum > 0 && rex.lnum > LONG_MAX - rex.reg_firstlnum) || (rex.reg_firstlnum < 0 && rex.lnum < LONG_MIN + rex.reg_firstlnum)) && rex.lnum + rex.reg_firstlnum >= 0"
# 15081 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
       , "/home/ubuntu/neovim/src/nvim/regexp.c", 15081, __extension__ __PRETTY_FUNCTION__); }))




                                                    
# 15086 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                                   ;
        result = ((rex.reg_match == 
# 15087 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                 ((void *)0)
# 15087 "/home/ubuntu/neovim/src/nvim/regexp.c"
                 )
                  && nfa_re_num_cmp((uintmax_t)t->state->val,
                                    t->state->c - NFA_LNUM,
                                    (uintmax_t)rex.lnum + (uintmax_t)rex.reg_firstlnum));
        if (result) {
          add_here = 
# 15092 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                    1
# 15092 "/home/ubuntu/neovim/src/nvim/regexp.c"
                        ;
          add_state = t->state->out;
        }
        break;

      case NFA_COL:
      case NFA_COL_GT:
      case NFA_COL_LT:
        
# 15100 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
       ((void) sizeof ((
# 15100 "/home/ubuntu/neovim/src/nvim/regexp.c"
       t->state->val >= 0 && rex.input >= rex.line && (uintmax_t)(rex.input - rex.line) <= 
# 15100 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
       (18446744073709551615UL) 
# 15100 "/home/ubuntu/neovim/src/nvim/regexp.c"
       - 1
# 15100 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
       ) ? 1 : 0), __extension__ ({ if (
# 15100 "/home/ubuntu/neovim/src/nvim/regexp.c"
       t->state->val >= 0 && rex.input >= rex.line && (uintmax_t)(rex.input - rex.line) <= 
# 15100 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
       (18446744073709551615UL) 
# 15100 "/home/ubuntu/neovim/src/nvim/regexp.c"
       - 1
# 15100 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
       ) ; else __assert_fail (
# 15100 "/home/ubuntu/neovim/src/nvim/regexp.c"
       "t->state->val >= 0 && rex.input >= rex.line && (uintmax_t)(rex.input - rex.line) <= UINTMAX_MAX - 1"
# 15100 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
       , "/home/ubuntu/neovim/src/nvim/regexp.c", 15100, __extension__ __PRETTY_FUNCTION__); }))

                                                                       
# 15102 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                                                      ;
        result = nfa_re_num_cmp((uintmax_t)t->state->val,
                                t->state->c - NFA_COL,
                                (uintmax_t)(rex.input - rex.line + 1));
        if (result) {
          add_here = 
# 15107 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                    1
# 15107 "/home/ubuntu/neovim/src/nvim/regexp.c"
                        ;
          add_state = t->state->out;
        }
        break;

      case NFA_VCOL:
      case NFA_VCOL_GT:
      case NFA_VCOL_LT: {
        int op = t->state->c - NFA_VCOL;
        colnr_T col = (colnr_T)(rex.input - rex.line);



        if (op != 1 && col > t->state->val * MB_MAXBYTES) {
          break;
        }

        result = 
# 15124 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                0
# 15124 "/home/ubuntu/neovim/src/nvim/regexp.c"
                     ;
        win_T *wp = rex.reg_win == 
# 15125 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                  ((void *)0) 
# 15125 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                       ? curwin : rex.reg_win;
        if (op == 1 && col - 1 > t->state->val && col > 100) {
          int64_t ts = (int64_t)wp->w_buffer->b_p_ts;



          if (ts < 4) {
            ts = 4;
          }
          result = col > t->state->val * ts;
        }
        if (!result) {
          linenr_T lnum = (rex.reg_match == 
# 15137 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                         ((void *)0)
# 15137 "/home/ubuntu/neovim/src/nvim/regexp.c"
                         ) ? rex.reg_firstlnum + rex.lnum : 1;
          if ((rex.reg_match == 
# 15138 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
             ((void *)0)
# 15138 "/home/ubuntu/neovim/src/nvim/regexp.c"
             ) && (lnum <= 0 || lnum > wp->w_buffer->b_ml.ml_line_count)) {
            lnum = 1;
          }
          int vcol = win_linetabsize(wp, lnum, (char *)rex.line, col);
          
# 15142 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
         ((void) sizeof ((
# 15142 "/home/ubuntu/neovim/src/nvim/regexp.c"
         t->state->val >= 0
# 15142 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
         ) ? 1 : 0), __extension__ ({ if (
# 15142 "/home/ubuntu/neovim/src/nvim/regexp.c"
         t->state->val >= 0
# 15142 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
         ) ; else __assert_fail (
# 15142 "/home/ubuntu/neovim/src/nvim/regexp.c"
         "t->state->val >= 0"
# 15142 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
         , "/home/ubuntu/neovim/src/nvim/regexp.c", 15142, __extension__ __PRETTY_FUNCTION__); }))
# 15142 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                   ;
          result = nfa_re_num_cmp((uintmax_t)t->state->val, op, (uintmax_t)vcol + 1);
        }
        if (result) {
          add_here = 
# 15146 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                    1
# 15146 "/home/ubuntu/neovim/src/nvim/regexp.c"
                        ;
          add_state = t->state->out;
        }
      }
      break;

      case NFA_MARK:
      case NFA_MARK_GT:
      case NFA_MARK_LT: {
        size_t col = (rex.reg_match == 
# 15155 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                    ((void *)0)
# 15155 "/home/ubuntu/neovim/src/nvim/regexp.c"
                    ) ? (size_t)(rex.input - rex.line) : 0;
        fmark_T *fm = mark_get(rex.reg_buf, curwin, 
# 15156 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                                   ((void *)0)
# 15156 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                                       , kMarkBufLocal, t->state->val);


        if ((rex.reg_match == 
# 15159 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
           ((void *)0)
# 15159 "/home/ubuntu/neovim/src/nvim/regexp.c"
           )) {
          rex.line = (uint8_t *)reg_getline(rex.lnum);
          rex.input = rex.line + col;
        }



        if (fm != 
# 15166 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                 ((void *)0) 
# 15166 "/home/ubuntu/neovim/src/nvim/regexp.c"
                      && fm->mark.lnum > 0) {
          pos_T *pos = &fm->mark;
          const colnr_T pos_col = pos->lnum == rex.lnum + rex.reg_firstlnum
                                  && pos->col == MAXCOL
                                  ? reg_getline_len(pos->lnum - rex.reg_firstlnum)
                                  : pos->col;

          result = pos->lnum == rex.lnum + rex.reg_firstlnum
                   ? (pos_col == (colnr_T)(rex.input - rex.line)
                      ? t->state->c == NFA_MARK
                      : (pos_col < (colnr_T)(rex.input - rex.line)
                         ? t->state->c == NFA_MARK_GT
                         : t->state->c == NFA_MARK_LT))
                   : (pos->lnum < rex.lnum + rex.reg_firstlnum
                      ? t->state->c == NFA_MARK_GT
                      : t->state->c == NFA_MARK_LT);
          if (result) {
            add_here = 
# 15183 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                      1
# 15183 "/home/ubuntu/neovim/src/nvim/regexp.c"
                          ;
            add_state = t->state->out;
          }
        }
        break;
      }

      case NFA_CURSOR:
        result = rex.reg_win != 
# 15191 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                               ((void *)0)
                 
# 15192 "/home/ubuntu/neovim/src/nvim/regexp.c"
                && (rex.lnum + rex.reg_firstlnum == rex.reg_win->w_cursor.lnum)
                 && ((colnr_T)(rex.input - rex.line) == rex.reg_win->w_cursor.col);
        if (result) {
          add_here = 
# 15195 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                    1
# 15195 "/home/ubuntu/neovim/src/nvim/regexp.c"
                        ;
          add_state = t->state->out;
        }
        break;

      case NFA_VISUAL:
        result = reg_match_visual();
        if (result) {
          add_here = 
# 15203 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                    1
# 15203 "/home/ubuntu/neovim/src/nvim/regexp.c"
                        ;
          add_state = t->state->out;
        }
        break;

      case NFA_MOPEN1:
      case NFA_MOPEN2:
      case NFA_MOPEN3:
      case NFA_MOPEN4:
      case NFA_MOPEN5:
      case NFA_MOPEN6:
      case NFA_MOPEN7:
      case NFA_MOPEN8:
      case NFA_MOPEN9:
      case NFA_ZOPEN:
      case NFA_ZOPEN1:
      case NFA_ZOPEN2:
      case NFA_ZOPEN3:
      case NFA_ZOPEN4:
      case NFA_ZOPEN5:
      case NFA_ZOPEN6:
      case NFA_ZOPEN7:
      case NFA_ZOPEN8:
      case NFA_ZOPEN9:
      case NFA_NOPEN:
      case NFA_ZSTART:


        break;

      default:
      {
        int c = t->state->c;






        result = (c == curc);

        if (!result && rex.reg_ic) {
          result = utf_fold(c) == utf_fold(curc);
        }



        if (result && !rex.reg_icombine) {
          clen = utf_ptr2len((char *)rex.input);
        }

        if (result) { add_state = (t->state)->out; add_off = clen; };
        break;
      }
      }

      if (add_state != 
# 15259 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                      ((void *)0)
# 15259 "/home/ubuntu/neovim/src/nvim/regexp.c"
                          ) {
        nfa_pim_T *pim;
        nfa_pim_T pim_copy;

        if (t->pim.result == 0) {
          pim = 
# 15264 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
               ((void *)0)
# 15264 "/home/ubuntu/neovim/src/nvim/regexp.c"
                   ;
        } else {
          pim = &t->pim;
        }



        if (pim != 
# 15271 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                  ((void *)0) 
# 15271 "/home/ubuntu/neovim/src/nvim/regexp.c"
                       && (clen == 0 || match_follows(add_state, 0))) {
          if (pim->result == 1) {






            result = recursive_regmatch(pim->state, pim, prog, submatch, m,
                                        &listids, &listids_len);
            pim->result = result ? 2 : 3;


            if (result != (pim->state->c == NFA_START_INVISIBLE_NEG
                           || pim->state->c == NFA_START_INVISIBLE_NEG_FIRST
                           || pim->state->c
                           == NFA_START_INVISIBLE_BEFORE_NEG
                           || pim->state->c
                           == NFA_START_INVISIBLE_BEFORE_NEG_FIRST)) {

              copy_sub_off(&pim->subs.norm, &m->norm);
              if (rex.nfa_has_zsubexpr) {
                copy_sub_off(&pim->subs.synt, &m->synt);
              }
            }
          } else {
            result = (pim->result == 2);
# 15306 "/home/ubuntu/neovim/src/nvim/regexp.c"
          }


          if (result != (pim->state->c == NFA_START_INVISIBLE_NEG
                         || pim->state->c == NFA_START_INVISIBLE_NEG_FIRST
                         || pim->state->c
                         == NFA_START_INVISIBLE_BEFORE_NEG
                         || pim->state->c
                         == NFA_START_INVISIBLE_BEFORE_NEG_FIRST)) {

            copy_sub_off(&t->subs.norm, &pim->subs.norm);
            if (rex.nfa_has_zsubexpr) {
              copy_sub_off(&t->subs.synt, &pim->subs.synt);
            }
          } else {

            continue;
          }



          pim = 
# 15327 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
               ((void *)0)
# 15327 "/home/ubuntu/neovim/src/nvim/regexp.c"
                   ;
        }




        if (pim == &t->pim) {
          copy_pim(&pim_copy, pim);
          pim = &pim_copy;
        }

        if (add_here) {
          r = addstate_here(thislist, add_state, &t->subs, pim, &listidx);
        } else {
          r = addstate(nextlist, add_state, &t->subs, pim, add_off);
          if (add_count > 0) {
            nextlist->t[nextlist->n - 1].count = add_count;
          }
        }
        if (r == 
# 15346 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                ((void *)0)
# 15346 "/home/ubuntu/neovim/src/nvim/regexp.c"
                    ) {
          nfa_match = NFA_TOO_EXPENSIVE;
          goto theend;
        }
      }
    }
# 15361 "/home/ubuntu/neovim/src/nvim/regexp.c"
    if (!nfa_match
        && ((toplevel
             && rex.lnum == 0
             && clen != 0
             && (rex.reg_maxcol == 0
                 || (colnr_T)(rex.input - rex.line) < rex.reg_maxcol))
            || (nfa_endp != 
# 15367 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                           ((void *)0)
                
# 15368 "/home/ubuntu/neovim/src/nvim/regexp.c"
               && ((rex.reg_match == 
# 15368 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                   ((void *)0)
# 15368 "/home/ubuntu/neovim/src/nvim/regexp.c"
                   )
                    ? (rex.lnum < nfa_endp->se_u.pos.lnum
                       || (rex.lnum == nfa_endp->se_u.pos.lnum
                           && (int)(rex.input - rex.line)
                           < nfa_endp->se_u.pos.col))
                    : rex.input < nfa_endp->se_u.ptr)))) {





      if (toplevel) {
        int add = 
# 15380 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                 1
# 15380 "/home/ubuntu/neovim/src/nvim/regexp.c"
                     ;

        if (prog->regstart != '\000' && clen != 0) {
          if (nextlist->n == 0) {
            colnr_T col = (colnr_T)(rex.input - rex.line) + clen;



            if (skip_to_start(prog->regstart, &col) == 0) {
              break;
            }




            rex.input = rex.line + col - clen;
          } else {


            const int c = utf_ptr2char((char *)rex.input + clen);
            if (c != prog->regstart
                && (!rex.reg_ic
                    || utf_fold(c) != utf_fold(prog->regstart))) {




              add = 
# 15407 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                   0
# 15407 "/home/ubuntu/neovim/src/nvim/regexp.c"
                        ;
            }
          }
        }

        if (add) {
          if ((rex.reg_match == 
# 15413 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
             ((void *)0)
# 15413 "/home/ubuntu/neovim/src/nvim/regexp.c"
             )) {
            m->norm.list.multi[0].start_col =
              (colnr_T)(rex.input - rex.line) + clen;
            m->norm.orig_start_col =
              m->norm.list.multi[0].start_col;
          } else {
            m->norm.list.line[0].start = rex.input + clen;
          }
          if (addstate(nextlist, start->out, m, 
# 15421 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                               ((void *)0)
# 15421 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                                   , clen) == 
# 15421 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                                              ((void *)0)
# 15421 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                                                  ) {
            nfa_match = NFA_TOO_EXPENSIVE;
            goto theend;
          }
        }
      } else {
        if (addstate(nextlist, start, m, 
# 15427 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                        ((void *)0)
# 15427 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                            , clen) == 
# 15427 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                                       ((void *)0)
# 15427 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                                           ) {
          nfa_match = NFA_TOO_EXPENSIVE;
          goto theend;
        }
      }
    }
# 15446 "/home/ubuntu/neovim/src/nvim/regexp.c"
nextchar:


    if (clen != 0) {
      rex.input += clen;
    } else if (go_to_nextline || (nfa_endp != 
# 15451 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                             ((void *)0) 
# 15451 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                                  && (rex.reg_match == 
# 15451 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                                     ((void *)0)
# 15451 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                                     )
                                  && rex.lnum < nfa_endp->se_u.pos.lnum)) {
      reg_nextline();
    } else {
      break;
    }


    reg_breakcheck();
    if (got_int) {
      break;
    }

    if (nfa_time_limit != 
# 15464 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                         ((void *)0) 
# 15464 "/home/ubuntu/neovim/src/nvim/regexp.c"
                              && ++nfa_time_count == 20) {
      nfa_time_count = 0;
      if (nfa_did_time_out()) {
        break;
      }
    }
  }
# 15479 "/home/ubuntu/neovim/src/nvim/regexp.c"
theend:

  xfree(list[0].t);
  xfree(list[1].t);
  xfree(listids);





  return nfa_match;
}







static int nfa_regtry(nfa_regprog_T *prog, colnr_T col, proftime_T *tm, int *timed_out)
{
  int i;
  regsubs_T subs, m;
  nfa_state_T *start = prog->start;




  rex.input = rex.line + col;
  nfa_time_limit = tm;
  nfa_timed_out = timed_out;
  nfa_time_count = 0;
# 15530 "/home/ubuntu/neovim/src/nvim/regexp.c"
  clear_sub(&subs.norm);
  clear_sub(&m.norm);
  clear_sub(&subs.synt);
  clear_sub(&m.synt);

  int result = nfa_regmatch(prog, start, &subs, &m);
  if (!result) {
    return 0;
  } else if (result == NFA_TOO_EXPENSIVE) {
    return result;
  }

  cleanup_subexpr();
  if ((rex.reg_match == 
# 15543 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
     ((void *)0)
# 15543 "/home/ubuntu/neovim/src/nvim/regexp.c"
     )) {
    for (i = 0; i < subs.norm.in_use; i++) {
      rex.reg_startpos[i].lnum = subs.norm.list.multi[i].start_lnum;
      rex.reg_startpos[i].col = subs.norm.list.multi[i].start_col;

      rex.reg_endpos[i].lnum = subs.norm.list.multi[i].end_lnum;
      rex.reg_endpos[i].col = subs.norm.list.multi[i].end_col;
    }
    if (rex.reg_mmatch != 
# 15551 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                         ((void *)0)
# 15551 "/home/ubuntu/neovim/src/nvim/regexp.c"
                             ) {
      rex.reg_mmatch->rmm_matchcol = subs.norm.orig_start_col;
    }

    if (rex.reg_startpos[0].lnum < 0) {
      rex.reg_startpos[0].lnum = 0;
      rex.reg_startpos[0].col = col;
    }
    if (rex.reg_endpos[0].lnum < 0) {

      rex.reg_endpos[0].lnum = rex.lnum;
      rex.reg_endpos[0].col = (int)(rex.input - rex.line);
    } else {

      rex.lnum = rex.reg_endpos[0].lnum;
    }
  } else {
    for (i = 0; i < subs.norm.in_use; i++) {
      rex.reg_startp[i] = subs.norm.list.line[i].start;
      rex.reg_endp[i] = subs.norm.list.line[i].end;
    }

    if (rex.reg_startp[0] == 
# 15573 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                            ((void *)0)
# 15573 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                ) {
      rex.reg_startp[0] = rex.line + col;
    }
    if (rex.reg_endp[0] == 
# 15576 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                          ((void *)0)
# 15576 "/home/ubuntu/neovim/src/nvim/regexp.c"
                              ) {
      rex.reg_endp[0] = rex.input;
    }
  }


  unref_extmatch(re_extmatch_out);
  re_extmatch_out = 
# 15583 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                   ((void *)0)
# 15583 "/home/ubuntu/neovim/src/nvim/regexp.c"
                       ;

  if (prog->reghasz == 1) {
    cleanup_zsubexpr();
    re_extmatch_out = make_extmatch();

    for (i = 1; i < subs.synt.in_use; i++) {
      if ((rex.reg_match == 
# 15590 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
         ((void *)0)
# 15590 "/home/ubuntu/neovim/src/nvim/regexp.c"
         )) {
        struct multipos *mpos = &subs.synt.list.multi[i];


        if (mpos->start_lnum >= 0
            && mpos->start_lnum == mpos->end_lnum
            && mpos->end_col >= mpos->start_col) {
          re_extmatch_out->matches[i] =
            (uint8_t *)xstrnsave(reg_getline(mpos->start_lnum) + mpos->start_col,
                                 (size_t)(mpos->end_col - mpos->start_col));
        }
      } else {
        struct linepos *lpos = &subs.synt.list.line[i];

        if (lpos->start != 
# 15604 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                          ((void *)0) 
# 15604 "/home/ubuntu/neovim/src/nvim/regexp.c"
                               && lpos->end != 
# 15604 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                               ((void *)0)
# 15604 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                                   ) {
          re_extmatch_out->matches[i] =
            (uint8_t *)xstrnsave((char *)lpos->start, (size_t)(lpos->end - lpos->start));
        }
      }
    }
  }

  return 1 + rex.lnum;
}
# 15625 "/home/ubuntu/neovim/src/nvim/regexp.c"
static int nfa_regexec_both(uint8_t *line, colnr_T startcol, proftime_T *tm, int *timed_out)
{
  nfa_regprog_T *prog;
  int retval = 0;
  colnr_T col = startcol;

  if ((rex.reg_match == 
# 15631 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
     ((void *)0)
# 15631 "/home/ubuntu/neovim/src/nvim/regexp.c"
     )) {
    prog = (nfa_regprog_T *)rex.reg_mmatch->regprog;
    line = (uint8_t *)reg_getline(0);
    rex.reg_startpos = rex.reg_mmatch->startpos;
    rex.reg_endpos = rex.reg_mmatch->endpos;
  } else {
    prog = (nfa_regprog_T *)rex.reg_match->regprog;
    rex.reg_startp = (uint8_t **)rex.reg_match->startp;
    rex.reg_endp = (uint8_t **)rex.reg_match->endp;
  }


  if (prog == 
# 15643 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
             ((void *)0) 
# 15643 "/home/ubuntu/neovim/src/nvim/regexp.c"
                  || line == 
# 15643 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                             ((void *)0)
# 15643 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                 ) {
    iemsg(gettext(e_null));
    goto theend;
  }


  if (prog->regflags & 1) {
    rex.reg_ic = 
# 15650 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                1
# 15650 "/home/ubuntu/neovim/src/nvim/regexp.c"
                    ;
  } else if (prog->regflags & 2) {
    rex.reg_ic = 
# 15652 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                0
# 15652 "/home/ubuntu/neovim/src/nvim/regexp.c"
                     ;
  }


  if (prog->regflags & 8) {
    rex.reg_icombine = 
# 15657 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                      1
# 15657 "/home/ubuntu/neovim/src/nvim/regexp.c"
                          ;
  }

  rex.line = line;
  rex.lnum = 0;

  rex.nfa_has_zend = prog->has_zend;
  rex.nfa_has_backref = prog->has_backref;
  rex.nfa_nsubexpr = prog->nsubexp;
  rex.nfa_listid = 1;
  rex.nfa_alt_listid = 2;




  if (prog->reganch && col > 0) {
    return 0L;
  }

  rex.need_clear_subexpr = 
# 15676 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                          1
# 15676 "/home/ubuntu/neovim/src/nvim/regexp.c"
                              ;

  if (prog->reghasz == 1) {
    rex.nfa_has_zsubexpr = 
# 15679 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                          1
# 15679 "/home/ubuntu/neovim/src/nvim/regexp.c"
                              ;
    rex.need_clear_zsubexpr = 
# 15680 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                             1
# 15680 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                 ;
  } else {
    rex.nfa_has_zsubexpr = 
# 15682 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                          0
# 15682 "/home/ubuntu/neovim/src/nvim/regexp.c"
                               ;
    rex.need_clear_zsubexpr = 
# 15683 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                             0
# 15683 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                  ;
  }

  if (prog->regstart != '\000') {


    if (skip_to_start(prog->regstart, &col) == 0) {
      return 0L;
    }



    if (prog->match_text != 
# 15695 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                           ((void *)0) 
# 15695 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                && *prog->match_text != '\000' && !rex.reg_icombine) {
      retval = find_match_text(&col, prog->regstart, prog->match_text);
      if ((rex.reg_match == 
# 15697 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
         ((void *)0)
# 15697 "/home/ubuntu/neovim/src/nvim/regexp.c"
         )) {
        rex.reg_mmatch->rmm_matchcol = col;
      } else {
        rex.reg_match->rm_matchcol = col;
      }
      return retval;
    }
  }


  if (rex.reg_maxcol > 0 && col >= rex.reg_maxcol) {
    goto theend;
  }



  nstate = 0;
  for (int i = 0; i < prog->nstate; i++) {
    prog->state[i].id = i;
    prog->state[i].lastlist[0] = 0;
    prog->state[i].lastlist[1] = 0;
  }

  retval = nfa_regtry(prog, col, tm, timed_out);





theend:
  if (retval > 0) {


    if ((rex.reg_match == 
# 15730 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
       ((void *)0)
# 15730 "/home/ubuntu/neovim/src/nvim/regexp.c"
       )) {
      const lpos_T *const start = &rex.reg_mmatch->startpos[0];
      const lpos_T *const end = &rex.reg_mmatch->endpos[0];

      if (end->lnum < start->lnum
          || (end->lnum == start->lnum && end->col < start->col)) {
        rex.reg_mmatch->endpos[0] = rex.reg_mmatch->startpos[0];
      }
    } else {
      if (rex.reg_match->endp[0] < rex.reg_match->startp[0]) {
        rex.reg_match->endp[0] = rex.reg_match->startp[0];
      }



      rex.reg_match->rm_matchcol = col;
    }
  }

  return retval;
}



static regprog_T *nfa_regcomp(uint8_t *expr, int re_flags)
{
  nfa_regprog_T *prog = 
# 15756 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                       ((void *)0)
# 15756 "/home/ubuntu/neovim/src/nvim/regexp.c"
                           ;
  int *postfix;

  if (expr == 
# 15759 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
             ((void *)0)
# 15759 "/home/ubuntu/neovim/src/nvim/regexp.c"
                 ) {
    return 
# 15760 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
          ((void *)0)
# 15760 "/home/ubuntu/neovim/src/nvim/regexp.c"
              ;
  }




  nfa_re_flags = re_flags;

  init_class_tab();

  nfa_regcomp_start(expr, re_flags);



  postfix = re2post();
  if (postfix == 
# 15775 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                ((void *)0)
# 15775 "/home/ubuntu/neovim/src/nvim/regexp.c"
                    ) {
    goto fail;
  }
# 15798 "/home/ubuntu/neovim/src/nvim/regexp.c"
  post2nfa(postfix, post_ptr, 
# 15798 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                             1
# 15798 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                 );


  size_t prog_size = 
# 15801 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                    __builtin_offsetof (
# 15801 "/home/ubuntu/neovim/src/nvim/regexp.c"
                    nfa_regprog_T
# 15801 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                    , 
# 15801 "/home/ubuntu/neovim/src/nvim/regexp.c"
                    state
# 15801 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                    ) 
# 15801 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                                   + sizeof(nfa_state_T) * (size_t)nstate;
  prog = xmalloc(prog_size);
  state_ptr = prog->state;
  prog->re_in_use = 
# 15804 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                   0
# 15804 "/home/ubuntu/neovim/src/nvim/regexp.c"
                        ;



  prog->start = post2nfa(postfix, post_ptr, 
# 15808 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                           0
# 15808 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                                );
  if (prog->start == 
# 15809 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                    ((void *)0)
# 15809 "/home/ubuntu/neovim/src/nvim/regexp.c"
                        ) {
    goto fail;
  }
  prog->regflags = regflags;
  prog->engine = &nfa_regengine;
  prog->nstate = nstate;
  prog->has_zend = rex.nfa_has_zend;
  prog->has_backref = rex.nfa_has_backref;
  prog->nsubexp = regnpar;

  nfa_postprocess(prog);

  prog->reganch = nfa_get_reganch(prog->start, 0);
  prog->regstart = nfa_get_regstart(prog->start, 0);
  prog->match_text = nfa_get_match_text(prog->start);






  prog->reghasz = re_has_z;
  prog->pattern = xstrdup((char *)expr);




out:
  xfree(post_start);
  post_start = post_ptr = post_end = 
# 15838 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                    ((void *)0)
# 15838 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                        ;
  state_ptr = 
# 15839 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
             ((void *)0)
# 15839 "/home/ubuntu/neovim/src/nvim/regexp.c"
                 ;
  return (regprog_T *)prog;

fail:
  do { void **ptr_ = (void **)&(prog); xfree(*ptr_); *ptr_ = 
# 15843 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
 ((void *)0)
# 15843 "/home/ubuntu/neovim/src/nvim/regexp.c"
 ; (void)(*ptr_); } while (0);




  goto out;
}


static void nfa_regfree(regprog_T *prog)
{
  if (prog == 
# 15854 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
             ((void *)0)
# 15854 "/home/ubuntu/neovim/src/nvim/regexp.c"
                 ) {
    return;
  }

  xfree(((nfa_regprog_T *)prog)->match_text);
  xfree(((nfa_regprog_T *)prog)->pattern);
  xfree(prog);
}
# 15872 "/home/ubuntu/neovim/src/nvim/regexp.c"
static int nfa_regexec_nl(regmatch_T *rmp, uint8_t *line, colnr_T col, 
# 15872 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                                                      _Bool 
# 15872 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                                                           line_lbr)
{
  rex.reg_match = rmp;
  rex.reg_mmatch = 
# 15875 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                  ((void *)0)
# 15875 "/home/ubuntu/neovim/src/nvim/regexp.c"
                      ;
  rex.reg_maxline = 0;
  rex.reg_line_lbr = line_lbr;
  rex.reg_buf = curbuf;
  rex.reg_win = 
# 15879 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
               ((void *)0)
# 15879 "/home/ubuntu/neovim/src/nvim/regexp.c"
                   ;
  rex.reg_ic = rmp->rm_ic;
  rex.reg_icombine = 
# 15881 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                    0
# 15881 "/home/ubuntu/neovim/src/nvim/regexp.c"
                         ;
  rex.reg_nobreak = rmp->regprog->re_flags & 16;
  rex.reg_maxcol = 0;
  return nfa_regexec_both(line, col, 
# 15884 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                    ((void *)0)
# 15884 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                        , 
# 15884 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                          ((void *)0)
# 15884 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                              );
}
# 15922 "/home/ubuntu/neovim/src/nvim/regexp.c"
static int nfa_regexec_multi(regmmatch_T *rmp, win_T *win, buf_T *buf, linenr_T lnum, colnr_T col,
                             proftime_T *tm, int *timed_out)
{
  init_regexec_multi(rmp, win, buf, lnum);
  return nfa_regexec_both(
# 15926 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                         ((void *)0)
# 15926 "/home/ubuntu/neovim/src/nvim/regexp.c"
                             , col, tm, timed_out);
}


static regengine_T bt_regengine = {
  bt_regcomp,
  bt_regfree,
  bt_regexec_nl,
  bt_regexec_multi,



};

static regengine_T nfa_regengine = {
  nfa_regcomp,
  nfa_regfree,
  nfa_regexec_nl,
  nfa_regexec_multi,



};



static int regexp_engine = 0;
# 15966 "/home/ubuntu/neovim/src/nvim/regexp.c"
regprog_T *vim_regcomp(const char *expr_arg, int re_flags)
{
  regprog_T *prog = 
# 15968 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                   ((void *)0)
# 15968 "/home/ubuntu/neovim/src/nvim/regexp.c"
                       ;
  const char *expr = expr_arg;

  regexp_engine = (int)p_re;


  if (strncmp(expr, "\\%#=", 4) == 0) {
    int newengine = expr[4] - '0';

    if (newengine == AUTOMATIC_ENGINE
        || newengine == BACKTRACKING_ENGINE
        || newengine == NFA_ENGINE) {
      regexp_engine = expr[4] - '0';
      expr += 5;





    } else {
      emsg(gettext("E864: \\%#= can only be followed by 0, 1, or 2. The automatic engine will be used "));
      regexp_engine = AUTOMATIC_ENGINE;
    }
  }





  rex.reg_buf = curbuf;




  const int called_emsg_before = called_emsg;
  if (regexp_engine != BACKTRACKING_ENGINE) {
    prog = nfa_regengine.regcomp((uint8_t *)expr,
                                 re_flags + (regexp_engine == AUTOMATIC_ENGINE ? 8 : 0));
  } else {
    prog = bt_regengine.regcomp((uint8_t *)expr, re_flags);
  }


  if (prog == 
# 16011 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
             ((void *)0)
# 16011 "/home/ubuntu/neovim/src/nvim/regexp.c"
                 ) {
# 16029 "/home/ubuntu/neovim/src/nvim/regexp.c"
    if (regexp_engine == AUTOMATIC_ENGINE && called_emsg == called_emsg_before) {
      regexp_engine = BACKTRACKING_ENGINE;
      report_re_switch(expr);
      prog = bt_regengine.regcomp((uint8_t *)expr, re_flags);
    }
  }

  if (prog != 
# 16036 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
             ((void *)0)
# 16036 "/home/ubuntu/neovim/src/nvim/regexp.c"
                 ) {


    prog->re_engine = (unsigned)regexp_engine;
    prog->re_flags = (unsigned)re_flags;
  }

  return prog;
}


void vim_regfree(regprog_T *prog)
{
  if (prog != 
# 16049 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
             ((void *)0)
# 16049 "/home/ubuntu/neovim/src/nvim/regexp.c"
                 ) {
    prog->engine->regfree(prog);
  }
}
# 16065 "/home/ubuntu/neovim/src/nvim/regexp.c"
static void report_re_switch(const char *pat)
{
  if (p_verbose > 0) {
    verbose_enter();
    msg_puts(gettext("Switching to backtracking RE engine for pattern: "));
    msg_puts(pat);
    verbose_leave();
  }
}
# 16087 "/home/ubuntu/neovim/src/nvim/regexp.c"
static 
# 16087 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
      _Bool 
# 16087 "/home/ubuntu/neovim/src/nvim/regexp.c"
           vim_regexec_string(regmatch_T *rmp, const char *line, colnr_T col, 
# 16087 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                                                              _Bool 
# 16087 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                                                                   nl)
{
  regexec_T rex_save;
  
# 16090 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
 _Bool 
# 16090 "/home/ubuntu/neovim/src/nvim/regexp.c"
      rex_in_use_save = rex_in_use;


  if (rmp->regprog->re_in_use) {
    emsg(gettext(e_recursive));
    return 
# 16095 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
          0
# 16095 "/home/ubuntu/neovim/src/nvim/regexp.c"
               ;
  }
  rmp->regprog->re_in_use = 
# 16097 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                           1
# 16097 "/home/ubuntu/neovim/src/nvim/regexp.c"
                               ;

  if (rex_in_use) {

    rex_save = rex;
  }
  rex_in_use = 
# 16103 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
              1
# 16103 "/home/ubuntu/neovim/src/nvim/regexp.c"
                  ;

  rex.reg_startp = 
# 16105 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                  ((void *)0)
# 16105 "/home/ubuntu/neovim/src/nvim/regexp.c"
                      ;
  rex.reg_endp = 
# 16106 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                ((void *)0)
# 16106 "/home/ubuntu/neovim/src/nvim/regexp.c"
                    ;
  rex.reg_startpos = 
# 16107 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                    ((void *)0)
# 16107 "/home/ubuntu/neovim/src/nvim/regexp.c"
                        ;
  rex.reg_endpos = 
# 16108 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                  ((void *)0)
# 16108 "/home/ubuntu/neovim/src/nvim/regexp.c"
                      ;

  int result = rmp->regprog->engine->regexec_nl(rmp, (uint8_t *)line, col, nl);
  rmp->regprog->re_in_use = 
# 16111 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                           0
# 16111 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                ;


  if (rmp->regprog->re_engine == AUTOMATIC_ENGINE
      && result == NFA_TOO_EXPENSIVE) {
    int save_p_re = (int)p_re;
    int re_flags = (int)rmp->regprog->re_flags;
    char *pat = xstrdup(((nfa_regprog_T *)rmp->regprog)->pattern);

    p_re = BACKTRACKING_ENGINE;
    vim_regfree(rmp->regprog);
    report_re_switch(pat);
    rmp->regprog = vim_regcomp(pat, re_flags);
    if (rmp->regprog != 
# 16124 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                       ((void *)0)
# 16124 "/home/ubuntu/neovim/src/nvim/regexp.c"
                           ) {
      rmp->regprog->re_in_use = 
# 16125 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                               1
# 16125 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                   ;
      result = rmp->regprog->engine->regexec_nl(rmp, (uint8_t *)line, col, nl);
      rmp->regprog->re_in_use = 
# 16127 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                               0
# 16127 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                    ;
    }

    xfree(pat);
    p_re = save_p_re;
  }

  rex_in_use = rex_in_use_save;
  if (rex_in_use) {
    rex = rex_save;
  }

  return result > 0;
}




# 16144 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
_Bool 
# 16144 "/home/ubuntu/neovim/src/nvim/regexp.c"
    vim_regexec_prog(regprog_T **prog, 
# 16144 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                       _Bool 
# 16144 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                            ignore_case, const char *line, colnr_T col)
{
  regmatch_T regmatch = { .regprog = *prog, .rm_ic = ignore_case };
  
# 16147 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
 _Bool 
# 16147 "/home/ubuntu/neovim/src/nvim/regexp.c"
      r = vim_regexec_string(&regmatch, line, col, 
# 16147 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                                   0
# 16147 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                                        );
  *prog = regmatch.regprog;
  return r;
}




# 16154 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
_Bool 
# 16154 "/home/ubuntu/neovim/src/nvim/regexp.c"
    vim_regexec(regmatch_T *rmp, const char *line, colnr_T col)
{
  return vim_regexec_string(rmp, line, col, 
# 16156 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                           0
# 16156 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                                );
}





# 16162 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
_Bool 
# 16162 "/home/ubuntu/neovim/src/nvim/regexp.c"
    vim_regexec_nl(regmatch_T *rmp, const char *line, colnr_T col)
{
  return vim_regexec_string(rmp, line, col, 
# 16164 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                                           1
# 16164 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                               );
}
# 16181 "/home/ubuntu/neovim/src/nvim/regexp.c"
int vim_regexec_multi(regmmatch_T *rmp, win_T *win, buf_T *buf, linenr_T lnum, colnr_T col,
                      proftime_T *tm, int *timed_out)
  FUNC_ATTR_NONNULL_ARG(1)
{
  regexec_T rex_save;
  
# 16186 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
 _Bool 
# 16186 "/home/ubuntu/neovim/src/nvim/regexp.c"
      rex_in_use_save = rex_in_use;


  if (rmp->regprog->re_in_use) {
    emsg(gettext(e_recursive));
    return 
# 16191 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
          0
# 16191 "/home/ubuntu/neovim/src/nvim/regexp.c"
               ;
  }
  rmp->regprog->re_in_use = 
# 16193 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                           1
# 16193 "/home/ubuntu/neovim/src/nvim/regexp.c"
                               ;

  if (rex_in_use) {

    rex_save = rex;
  }
  rex_in_use = 
# 16199 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
              1
# 16199 "/home/ubuntu/neovim/src/nvim/regexp.c"
                  ;

  int result = rmp->regprog->engine->regexec_multi(rmp, win, buf, lnum, col, tm, timed_out);
  rmp->regprog->re_in_use = 
# 16202 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                           0
# 16202 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                ;


  if (rmp->regprog->re_engine == AUTOMATIC_ENGINE
      && result == NFA_TOO_EXPENSIVE) {
    int save_p_re = (int)p_re;
    int re_flags = (int)rmp->regprog->re_flags;
    char *pat = xstrdup(((nfa_regprog_T *)rmp->regprog)->pattern);

    p_re = BACKTRACKING_ENGINE;
    regprog_T *prev_prog = rmp->regprog;

    report_re_switch(pat);


    reg_do_extmatch = (1 | 2);
    rmp->regprog = vim_regcomp(pat, re_flags);
    reg_do_extmatch = 0;

    if (rmp->regprog == 
# 16221 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                       ((void *)0)
# 16221 "/home/ubuntu/neovim/src/nvim/regexp.c"
                           ) {


      rmp->regprog = prev_prog;
    } else {
      vim_regfree(prev_prog);

      rmp->regprog->re_in_use = 
# 16228 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                               1
# 16228 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                   ;
      result = rmp->regprog->engine->regexec_multi(rmp, win, buf, lnum, col, tm, timed_out);
      rmp->regprog->re_in_use = 
# 16230 "/home/ubuntu/neovim/src/nvim/regexp.c" 3 4
                               0
# 16230 "/home/ubuntu/neovim/src/nvim/regexp.c"
                                    ;
    }

    xfree(pat);
    p_re = save_p_re;
  }

  rex_in_use = rex_in_use_save;
  if (rex_in_use) {
    rex = rex_save;
  }

  return result <= 0 ? 0 : result;
}