Codebase list unbound / 87cb13b
Merge tag 'upstream/1.13.0' Upstream version 1.13.0 Robert Edmonds 3 years ago
97 changed file(s) with 11116 addition(s) and 7279 deletion(s). Raw diff Collapse all Expand all
11 # Attempt to guess a canonical system name.
22 # Copyright 1992-2020 Free Software Foundation, Inc.
33
4 timestamp='2020-09-19'
4 timestamp='2020-11-19'
55
66 # This file is free software; you can redistribute it and/or modify it
77 # under the terms of the GNU General Public License as published by
2626 # Originally written by Per Bothner; maintained since 2000 by Ben Elliston.
2727 #
2828 # You can get the latest version of this script from:
29 # https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess
29 # https://git.savannah.gnu.org/cgit/config.git/plain/config.guess
3030 #
3131 # Please send patches to <config-patches@gnu.org>.
3232
3333
34 me=`echo "$0" | sed -e 's,.*/,,'`
34 me=$(echo "$0" | sed -e 's,.*/,,')
3535
3636 usage="\
3737 Usage: $0 [OPTION]
102102 test "$tmp" && return 0
103103 : "${TMPDIR=/tmp}"
104104 # shellcheck disable=SC2039
105 { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
105 { tmp=$( (umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null) && test -n "$tmp" && test -d "$tmp" ; } ||
106106 { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir "$tmp" 2>/dev/null) ; } ||
107107 { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir "$tmp" 2>/dev/null) && echo "Warning: creating insecure temp directory" >&2 ; } ||
108108 { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; }
130130 PATH=$PATH:/.attbin ; export PATH
131131 fi
132132
133 UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
134 UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
135 UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
136 UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
133 UNAME_MACHINE=$( (uname -m) 2>/dev/null) || UNAME_MACHINE=unknown
134 UNAME_RELEASE=$( (uname -r) 2>/dev/null) || UNAME_RELEASE=unknown
135 UNAME_SYSTEM=$( (uname -s) 2>/dev/null) || UNAME_SYSTEM=unknown
136 UNAME_VERSION=$( (uname -v) 2>/dev/null) || UNAME_VERSION=unknown
137137
138138 case "$UNAME_SYSTEM" in
139139 Linux|GNU|GNU/*)
140 # If the system lacks a compiler, then just pick glibc.
141 # We could probably try harder.
142 LIBC=gnu
140 LIBC=unknown
143141
144142 set_cc_for_build
145143 cat <<-EOF > "$dummy.c"
148146 LIBC=uclibc
149147 #elif defined(__dietlibc__)
150148 LIBC=dietlibc
149 #elif defined(__GLIBC__)
150 LIBC=gnu
151151 #else
152152 #include <stdarg.h>
153 /* First heuristic to detect musl libc. */
153154 #ifdef __DEFINED_va_list
154155 LIBC=musl
155 #else
156 LIBC=gnu
157156 #endif
158157 #endif
159158 EOF
160 eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'`"
159 eval "$($CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g')"
160
161 # Second heuristic to detect musl libc.
162 if [ "$LIBC" = unknown ] &&
163 command -v ldd >/dev/null &&
164 ldd --version 2>&1 | grep -q ^musl; then
165 LIBC=musl
166 fi
167
168 # If the system lacks a compiler, then just pick glibc.
169 # We could probably try harder.
170 if [ "$LIBC" = unknown ]; then
171 LIBC=gnu
172 fi
161173 ;;
162174 esac
163175
176188 # Note: NetBSD doesn't particularly care about the vendor
177189 # portion of the name. We always set it to "unknown".
178190 sysctl="sysctl -n hw.machine_arch"
179 UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \
191 UNAME_MACHINE_ARCH=$( (uname -p 2>/dev/null || \
180192 "/sbin/$sysctl" 2>/dev/null || \
181193 "/usr/sbin/$sysctl" 2>/dev/null || \
182 echo unknown)`
194 echo unknown))
183195 case "$UNAME_MACHINE_ARCH" in
196 aarch64eb) machine=aarch64_be-unknown ;;
184197 armeb) machine=armeb-unknown ;;
185198 arm*) machine=arm-unknown ;;
186199 sh3el) machine=shl-unknown ;;
187200 sh3eb) machine=sh-unknown ;;
188201 sh5el) machine=sh5le-unknown ;;
189202 earmv*)
190 arch=`echo "$UNAME_MACHINE_ARCH" | sed -e 's,^e\(armv[0-9]\).*$,\1,'`
191 endian=`echo "$UNAME_MACHINE_ARCH" | sed -ne 's,^.*\(eb\)$,\1,p'`
203 arch=$(echo "$UNAME_MACHINE_ARCH" | sed -e 's,^e\(armv[0-9]\).*$,\1,')
204 endian=$(echo "$UNAME_MACHINE_ARCH" | sed -ne 's,^.*\(eb\)$,\1,p')
192205 machine="${arch}${endian}"-unknown
193206 ;;
194207 *) machine="$UNAME_MACHINE_ARCH"-unknown ;;
219232 case "$UNAME_MACHINE_ARCH" in
220233 earm*)
221234 expr='s/^earmv[0-9]/-eabi/;s/eb$//'
222 abi=`echo "$UNAME_MACHINE_ARCH" | sed -e "$expr"`
235 abi=$(echo "$UNAME_MACHINE_ARCH" | sed -e "$expr")
223236 ;;
224237 esac
225238 # The OS release
232245 release='-gnu'
233246 ;;
234247 *)
235 release=`echo "$UNAME_RELEASE" | sed -e 's/[-_].*//' | cut -d. -f1,2`
248 release=$(echo "$UNAME_RELEASE" | sed -e 's/[-_].*//' | cut -d. -f1,2)
236249 ;;
237250 esac
238251 # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
241254 echo "$machine-${os}${release}${abi-}"
242255 exit ;;
243256 *:Bitrig:*:*)
244 UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'`
257 UNAME_MACHINE_ARCH=$(arch | sed 's/Bitrig.//')
245258 echo "$UNAME_MACHINE_ARCH"-unknown-bitrig"$UNAME_RELEASE"
246259 exit ;;
247260 *:OpenBSD:*:*)
248 UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
261 UNAME_MACHINE_ARCH=$(arch | sed 's/OpenBSD.//')
249262 echo "$UNAME_MACHINE_ARCH"-unknown-openbsd"$UNAME_RELEASE"
250263 exit ;;
251264 *:LibertyBSD:*:*)
252 UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'`
265 UNAME_MACHINE_ARCH=$(arch | sed 's/^.*BSD\.//')
253266 echo "$UNAME_MACHINE_ARCH"-unknown-libertybsd"$UNAME_RELEASE"
254267 exit ;;
255268 *:MidnightBSD:*:*)
285298 alpha:OSF1:*:*)
286299 case $UNAME_RELEASE in
287300 *4.0)
288 UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
301 UNAME_RELEASE=$(/usr/sbin/sizer -v | awk '{print $3}')
289302 ;;
290303 *5.*)
291 UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
304 UNAME_RELEASE=$(/usr/sbin/sizer -v | awk '{print $4}')
292305 ;;
293306 esac
294307 # According to Compaq, /usr/sbin/psrinfo has been available on
295308 # OSF/1 and Tru64 systems produced since 1995. I hope that
296309 # covers most systems running today. This code pipes the CPU
297310 # types through head -n 1, so we only detect the type of CPU 0.
298 ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1`
311 ALPHA_CPU_TYPE=$(/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1)
299312 case "$ALPHA_CPU_TYPE" in
300313 "EV4 (21064)")
301314 UNAME_MACHINE=alpha ;;
333346 # A Tn.n version is a released field test version.
334347 # A Xn.n version is an unreleased experimental baselevel.
335348 # 1.2 uses "1.2" for uname -r.
336 echo "$UNAME_MACHINE"-dec-osf"`echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`"
349 echo "$UNAME_MACHINE"-dec-osf"$(echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz)"
337350 # Reset EXIT trap before exiting to avoid spurious non-zero exit code.
338351 exitcode=$?
339352 trap '' 0
367380 exit ;;
368381 Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
369382 # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
370 if test "`(/bin/universe) 2>/dev/null`" = att ; then
383 if test "$( (/bin/universe) 2>/dev/null)" = att ; then
371384 echo pyramid-pyramid-sysv3
372385 else
373386 echo pyramid-pyramid-bsd
380393 echo sparc-icl-nx6
381394 exit ;;
382395 DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
383 case `/usr/bin/uname -p` in
396 case $(/usr/bin/uname -p) in
384397 sparc) echo sparc-icl-nx7; exit ;;
385398 esac ;;
386399 s390x:SunOS:*:*)
387 echo "$UNAME_MACHINE"-ibm-solaris2"`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`"
400 echo "$UNAME_MACHINE"-ibm-solaris2"$(echo "$UNAME_RELEASE" | sed -e 's/[^.]*//')"
388401 exit ;;
389402 sun4H:SunOS:5.*:*)
390 echo sparc-hal-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`"
403 echo sparc-hal-solaris2"$(echo "$UNAME_RELEASE"|sed -e 's/[^.]*//')"
391404 exit ;;
392405 sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
393 echo sparc-sun-solaris2"`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`"
406 echo sparc-sun-solaris2"$(echo "$UNAME_RELEASE" | sed -e 's/[^.]*//')"
394407 exit ;;
395408 i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*)
396409 echo i386-pc-auroraux"$UNAME_RELEASE"
409422 SUN_ARCH=x86_64
410423 fi
411424 fi
412 echo "$SUN_ARCH"-pc-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`"
425 echo "$SUN_ARCH"-pc-solaris2"$(echo "$UNAME_RELEASE"|sed -e 's/[^.]*//')"
413426 exit ;;
414427 sun4*:SunOS:6*:*)
415428 # According to config.sub, this is the proper way to canonicalize
416429 # SunOS6. Hard to guess exactly what SunOS6 will be like, but
417430 # it's likely to be more like Solaris than SunOS4.
418 echo sparc-sun-solaris3"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`"
431 echo sparc-sun-solaris3"$(echo "$UNAME_RELEASE"|sed -e 's/[^.]*//')"
419432 exit ;;
420433 sun4*:SunOS:*:*)
421 case "`/usr/bin/arch -k`" in
434 case "$(/usr/bin/arch -k)" in
422435 Series*|S4*)
423 UNAME_RELEASE=`uname -v`
436 UNAME_RELEASE=$(uname -v)
424437 ;;
425438 esac
426439 # Japanese Language versions have a version number like `4.1.3-JL'.
427 echo sparc-sun-sunos"`echo "$UNAME_RELEASE"|sed -e 's/-/_/'`"
440 echo sparc-sun-sunos"$(echo "$UNAME_RELEASE"|sed -e 's/-/_/')"
428441 exit ;;
429442 sun3*:SunOS:*:*)
430443 echo m68k-sun-sunos"$UNAME_RELEASE"
431444 exit ;;
432445 sun*:*:4.2BSD:*)
433 UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
446 UNAME_RELEASE=$( (sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null)
434447 test "x$UNAME_RELEASE" = x && UNAME_RELEASE=3
435 case "`/bin/arch`" in
448 case "$(/bin/arch)" in
436449 sun3)
437450 echo m68k-sun-sunos"$UNAME_RELEASE"
438451 ;;
512525 }
513526 EOF
514527 $CC_FOR_BUILD -o "$dummy" "$dummy.c" &&
515 dummyarg=`echo "$UNAME_RELEASE" | sed -n 's/\([0-9]*\).*/\1/p'` &&
516 SYSTEM_NAME=`"$dummy" "$dummyarg"` &&
528 dummyarg=$(echo "$UNAME_RELEASE" | sed -n 's/\([0-9]*\).*/\1/p') &&
529 SYSTEM_NAME=$("$dummy" "$dummyarg") &&
517530 { echo "$SYSTEM_NAME"; exit; }
518531 echo mips-mips-riscos"$UNAME_RELEASE"
519532 exit ;;
540553 exit ;;
541554 AViiON:dgux:*:*)
542555 # DG/UX returns AViiON for all architectures
543 UNAME_PROCESSOR=`/usr/bin/uname -p`
556 UNAME_PROCESSOR=$(/usr/bin/uname -p)
544557 if test "$UNAME_PROCESSOR" = mc88100 || test "$UNAME_PROCESSOR" = mc88110
545558 then
546559 if test "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx || \
568581 echo m68k-tektronix-bsd
569582 exit ;;
570583 *:IRIX*:*:*)
571 echo mips-sgi-irix"`echo "$UNAME_RELEASE"|sed -e 's/-/_/g'`"
584 echo mips-sgi-irix"$(echo "$UNAME_RELEASE"|sed -e 's/-/_/g')"
572585 exit ;;
573586 ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
574587 echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id
575 exit ;; # Note that: echo "'`uname -s`'" gives 'AIX '
588 exit ;; # Note that: echo "'$(uname -s)'" gives 'AIX '
576589 i*86:AIX:*:*)
577590 echo i386-ibm-aix
578591 exit ;;
579592 ia64:AIX:*:*)
580593 if test -x /usr/bin/oslevel ; then
581 IBM_REV=`/usr/bin/oslevel`
594 IBM_REV=$(/usr/bin/oslevel)
582595 else
583596 IBM_REV="$UNAME_VERSION.$UNAME_RELEASE"
584597 fi
598611 exit(0);
599612 }
600613 EOF
601 if $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"`
614 if $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=$("$dummy")
602615 then
603616 echo "$SYSTEM_NAME"
604617 else
611624 fi
612625 exit ;;
613626 *:AIX:*:[4567])
614 IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
627 IBM_CPU_ID=$(/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }')
615628 if /usr/sbin/lsattr -El "$IBM_CPU_ID" | grep ' POWER' >/dev/null 2>&1; then
616629 IBM_ARCH=rs6000
617630 else
618631 IBM_ARCH=powerpc
619632 fi
620633 if test -x /usr/bin/lslpp ; then
621 IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc |
622 awk -F: '{ print $3 }' | sed s/[0-9]*$/0/`
634 IBM_REV=$(/usr/bin/lslpp -Lqc bos.rte.libc |
635 awk -F: '{ print $3 }' | sed s/[0-9]*$/0/)
623636 else
624637 IBM_REV="$UNAME_VERSION.$UNAME_RELEASE"
625638 fi
647660 echo m68k-hp-bsd4.4
648661 exit ;;
649662 9000/[34678]??:HP-UX:*:*)
650 HPUX_REV=`echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//'`
663 HPUX_REV=$(echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//')
651664 case "$UNAME_MACHINE" in
652665 9000/31?) HP_ARCH=m68000 ;;
653666 9000/[34]??) HP_ARCH=m68k ;;
654667 9000/[678][0-9][0-9])
655668 if test -x /usr/bin/getconf; then
656 sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
657 sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
669 sc_cpu_version=$(/usr/bin/getconf SC_CPU_VERSION 2>/dev/null)
670 sc_kernel_bits=$(/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null)
658671 case "$sc_cpu_version" in
659672 523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0
660673 528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1
701714 exit (0);
702715 }
703716 EOF
704 (CCOPTS="" $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null) && HP_ARCH=`"$dummy"`
717 (CCOPTS="" $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null) && HP_ARCH=$("$dummy")
705718 test -z "$HP_ARCH" && HP_ARCH=hppa
706719 fi ;;
707720 esac
729742 echo "$HP_ARCH"-hp-hpux"$HPUX_REV"
730743 exit ;;
731744 ia64:HP-UX:*:*)
732 HPUX_REV=`echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//'`
745 HPUX_REV=$(echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//')
733746 echo ia64-hp-hpux"$HPUX_REV"
734747 exit ;;
735748 3050*:HI-UX:*:*)
759772 exit (0);
760773 }
761774 EOF
762 $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` &&
775 $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=$("$dummy") &&
763776 { echo "$SYSTEM_NAME"; exit; }
764777 echo unknown-hitachi-hiuxwe2
765778 exit ;;
828841 echo craynv-cray-unicosmp"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'
829842 exit ;;
830843 F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
831 FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`
832 FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'`
833 FUJITSU_REL=`echo "$UNAME_RELEASE" | sed -e 's/ /_/'`
844 FUJITSU_PROC=$(uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz)
845 FUJITSU_SYS=$(uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///')
846 FUJITSU_REL=$(echo "$UNAME_RELEASE" | sed -e 's/ /_/')
834847 echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
835848 exit ;;
836849 5000:UNIX_System_V:4.*:*)
837 FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'`
838 FUJITSU_REL=`echo "$UNAME_RELEASE" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'`
850 FUJITSU_SYS=$(uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///')
851 FUJITSU_REL=$(echo "$UNAME_RELEASE" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/')
839852 echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
840853 exit ;;
841854 i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
848861 echo "$UNAME_MACHINE"-unknown-bsdi"$UNAME_RELEASE"
849862 exit ;;
850863 arm:FreeBSD:*:*)
851 UNAME_PROCESSOR=`uname -p`
864 UNAME_PROCESSOR=$(uname -p)
852865 set_cc_for_build
853866 if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
854867 | grep -q __ARM_PCS_VFP
855868 then
856 echo "${UNAME_PROCESSOR}"-unknown-freebsd"`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`"-gnueabi
869 echo "${UNAME_PROCESSOR}"-unknown-freebsd"$(echo ${UNAME_RELEASE}|sed -e 's/[-(].*//')"-gnueabi
857870 else
858 echo "${UNAME_PROCESSOR}"-unknown-freebsd"`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`"-gnueabihf
871 echo "${UNAME_PROCESSOR}"-unknown-freebsd"$(echo ${UNAME_RELEASE}|sed -e 's/[-(].*//')"-gnueabihf
859872 fi
860873 exit ;;
861874 *:FreeBSD:*:*)
862 UNAME_PROCESSOR=`/usr/bin/uname -p`
875 UNAME_PROCESSOR=$(/usr/bin/uname -p)
863876 case "$UNAME_PROCESSOR" in
864877 amd64)
865878 UNAME_PROCESSOR=x86_64 ;;
866879 i386)
867880 UNAME_PROCESSOR=i586 ;;
868881 esac
869 echo "$UNAME_PROCESSOR"-unknown-freebsd"`echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`"
882 echo "$UNAME_PROCESSOR"-unknown-freebsd"$(echo "$UNAME_RELEASE"|sed -e 's/[-(].*//')"
870883 exit ;;
871884 i*:CYGWIN*:*)
872885 echo "$UNAME_MACHINE"-pc-cygwin
902915 echo x86_64-pc-cygwin
903916 exit ;;
904917 prep*:SunOS:5.*:*)
905 echo powerpcle-unknown-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`"
918 echo powerpcle-unknown-solaris2"$(echo "$UNAME_RELEASE"|sed -e 's/[^.]*//')"
906919 exit ;;
907920 *:GNU:*:*)
908921 # the GNU system
909 echo "`echo "$UNAME_MACHINE"|sed -e 's,[-/].*$,,'`-unknown-$LIBC`echo "$UNAME_RELEASE"|sed -e 's,/.*$,,'`"
922 echo "$(echo "$UNAME_MACHINE"|sed -e 's,[-/].*$,,')-unknown-$LIBC$(echo "$UNAME_RELEASE"|sed -e 's,/.*$,,')"
910923 exit ;;
911924 *:GNU/*:*:*)
912925 # other systems with GNU libc and userland
913 echo "$UNAME_MACHINE-unknown-`echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"``echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`-$LIBC"
926 echo "$UNAME_MACHINE-unknown-$(echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]")$(echo "$UNAME_RELEASE"|sed -e 's/[-(].*//')-$LIBC"
914927 exit ;;
915928 *:Minix:*:*)
916929 echo "$UNAME_MACHINE"-unknown-minix
923936 echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
924937 exit ;;
925938 alpha:Linux:*:*)
926 case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' /proc/cpuinfo 2>/dev/null` in
939 case $(sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' /proc/cpuinfo 2>/dev/null) in
927940 EV5) UNAME_MACHINE=alphaev5 ;;
928941 EV56) UNAME_MACHINE=alphaev56 ;;
929942 PCA56) UNAME_MACHINE=alphapca56 ;;
10321045 #endif
10331046 #endif
10341047 EOF
1035 eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU\|^MIPS_ENDIAN\|^LIBCABI'`"
1048 eval "$($CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU\|^MIPS_ENDIAN\|^LIBCABI')"
10361049 test "x$CPU" != x && { echo "$CPU${MIPS_ENDIAN}-unknown-linux-$LIBCABI"; exit; }
10371050 ;;
10381051 mips64el:Linux:*:*)
10521065 exit ;;
10531066 parisc:Linux:*:* | hppa:Linux:*:*)
10541067 # Look for CPU level
1055 case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
1068 case $(grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2) in
10561069 PA7*) echo hppa1.1-unknown-linux-"$LIBC" ;;
10571070 PA8*) echo hppa2.0-unknown-linux-"$LIBC" ;;
10581071 *) echo hppa-unknown-linux-"$LIBC" ;;
11421155 echo "$UNAME_MACHINE"-pc-msdosdjgpp
11431156 exit ;;
11441157 i*86:*:4.*:*)
1145 UNAME_REL=`echo "$UNAME_RELEASE" | sed 's/\/MP$//'`
1158 UNAME_REL=$(echo "$UNAME_RELEASE" | sed 's/\/MP$//')
11461159 if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
11471160 echo "$UNAME_MACHINE"-univel-sysv"$UNAME_REL"
11481161 else
11511164 exit ;;
11521165 i*86:*:5:[678]*)
11531166 # UnixWare 7.x, OpenUNIX and OpenServer 6.
1154 case `/bin/uname -X | grep "^Machine"` in
1167 case $(/bin/uname -X | grep "^Machine") in
11551168 *486*) UNAME_MACHINE=i486 ;;
11561169 *Pentium) UNAME_MACHINE=i586 ;;
11571170 *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
11601173 exit ;;
11611174 i*86:*:3.2:*)
11621175 if test -f /usr/options/cb.name; then
1163 UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
1176 UNAME_REL=$(sed -n 's/.*Version //p' </usr/options/cb.name)
11641177 echo "$UNAME_MACHINE"-pc-isc"$UNAME_REL"
11651178 elif /bin/uname -X 2>/dev/null >/dev/null ; then
1166 UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
1179 UNAME_REL=$( (/bin/uname -X|grep Release|sed -e 's/.*= //'))
11671180 (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
11681181 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
11691182 && UNAME_MACHINE=i586
12131226 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
12141227 OS_REL=''
12151228 test -r /etc/.relid \
1216 && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
1229 && OS_REL=.$(sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid)
12171230 /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
12181231 && { echo i486-ncr-sysv4.3"$OS_REL"; exit; }
12191232 /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
12241237 NCR*:*:4.2:* | MPRAS*:*:4.2:*)
12251238 OS_REL='.3'
12261239 test -r /etc/.relid \
1227 && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
1240 && OS_REL=.$(sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid)
12281241 /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
12291242 && { echo i486-ncr-sysv4.3"$OS_REL"; exit; }
12301243 /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
12571270 exit ;;
12581271 *:SINIX-*:*:*)
12591272 if uname -p 2>/dev/null >/dev/null ; then
1260 UNAME_MACHINE=`(uname -p) 2>/dev/null`
1273 UNAME_MACHINE=$( (uname -p) 2>/dev/null)
12611274 echo "$UNAME_MACHINE"-sni-sysv4
12621275 else
12631276 echo ns32k-sni-sysv
13431356 echo aarch64-apple-darwin"$UNAME_RELEASE"
13441357 exit ;;
13451358 *:Darwin:*:*)
1346 UNAME_PROCESSOR=`uname -p`
1359 UNAME_PROCESSOR=$(uname -p)
13471360 case $UNAME_PROCESSOR in
13481361 unknown) UNAME_PROCESSOR=powerpc ;;
13491362 esac
13801393 echo "$UNAME_PROCESSOR"-apple-darwin"$UNAME_RELEASE"
13811394 exit ;;
13821395 *:procnto*:*:* | *:QNX:[0123456789]*:*)
1383 UNAME_PROCESSOR=`uname -p`
1396 UNAME_PROCESSOR=$(uname -p)
13841397 if test "$UNAME_PROCESSOR" = x86; then
13851398 UNAME_PROCESSOR=i386
13861399 UNAME_MACHINE=pc
14481461 echo mips-sei-seiux"$UNAME_RELEASE"
14491462 exit ;;
14501463 *:DragonFly:*:*)
1451 echo "$UNAME_MACHINE"-unknown-dragonfly"`echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`"
1464 echo "$UNAME_MACHINE"-unknown-dragonfly"$(echo "$UNAME_RELEASE"|sed -e 's/[-(].*//')"
14521465 exit ;;
14531466 *:*VMS:*:*)
1454 UNAME_MACHINE=`(uname -p) 2>/dev/null`
1467 UNAME_MACHINE=$( (uname -p) 2>/dev/null)
14551468 case "$UNAME_MACHINE" in
14561469 A*) echo alpha-dec-vms ; exit ;;
14571470 I*) echo ia64-dec-vms ; exit ;;
14611474 echo i386-pc-xenix
14621475 exit ;;
14631476 i*86:skyos:*:*)
1464 echo "$UNAME_MACHINE"-pc-skyos"`echo "$UNAME_RELEASE" | sed -e 's/ .*$//'`"
1477 echo "$UNAME_MACHINE"-pc-skyos"$(echo "$UNAME_RELEASE" | sed -e 's/ .*$//')"
14651478 exit ;;
14661479 i*86:rdos:*:*)
14671480 echo "$UNAME_MACHINE"-pc-rdos
15191532 #define __ARCHITECTURE__ "m68k"
15201533 #endif
15211534 int version;
1522 version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
1535 version=$( (hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null);
15231536 if (version < 4)
15241537 printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
15251538 else
16111624 }
16121625 EOF
16131626
1614 $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null && SYSTEM_NAME=`$dummy` &&
1627 $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null && SYSTEM_NAME=$($dummy) &&
16151628 { echo "$SYSTEM_NAME"; exit; }
16161629
16171630 # Apollos put the system type in the environment.
16361649 operating system you are using. If your script is old, overwrite *all*
16371650 copies of config.guess and config.sub with the latest versions from:
16381651
1639 https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess
1652 https://git.savannah.gnu.org/cgit/config.git/plain/config.guess
16401653 and
1641 https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub
1654 https://git.savannah.gnu.org/cgit/config.git/plain/config.sub
16421655 EOF
16431656
1644 year=`echo $timestamp | sed 's,-.*,,'`
1657 year=$(echo $timestamp | sed 's,-.*,,')
16451658 # shellcheck disable=SC2003
1646 if test "`expr "\`date +%Y\`" - "$year"`" -lt 3 ; then
1659 if test "$(expr "$(date +%Y)" - "$year")" -lt 3 ; then
16471660 cat >&2 <<EOF
16481661
16491662 If $0 has already been updated, send the following data and any
16521665
16531666 config.guess timestamp = $timestamp
16541667
1655 uname -m = `(uname -m) 2>/dev/null || echo unknown`
1656 uname -r = `(uname -r) 2>/dev/null || echo unknown`
1657 uname -s = `(uname -s) 2>/dev/null || echo unknown`
1658 uname -v = `(uname -v) 2>/dev/null || echo unknown`
1659
1660 /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
1661 /bin/uname -X = `(/bin/uname -X) 2>/dev/null`
1662
1663 hostinfo = `(hostinfo) 2>/dev/null`
1664 /bin/universe = `(/bin/universe) 2>/dev/null`
1665 /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null`
1666 /bin/arch = `(/bin/arch) 2>/dev/null`
1667 /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null`
1668 /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
1668 uname -m = $( (uname -m) 2>/dev/null || echo unknown)
1669 uname -r = $( (uname -r) 2>/dev/null || echo unknown)
1670 uname -s = $( (uname -s) 2>/dev/null || echo unknown)
1671 uname -v = $( (uname -v) 2>/dev/null || echo unknown)
1672
1673 /usr/bin/uname -p = $( (/usr/bin/uname -p) 2>/dev/null)
1674 /bin/uname -X = $( (/bin/uname -X) 2>/dev/null)
1675
1676 hostinfo = $( (hostinfo) 2>/dev/null)
1677 /bin/universe = $( (/bin/universe) 2>/dev/null)
1678 /usr/bin/arch -k = $( (/usr/bin/arch -k) 2>/dev/null)
1679 /bin/arch = $( (/bin/arch) 2>/dev/null)
1680 /usr/bin/oslevel = $( (/usr/bin/oslevel) 2>/dev/null)
1681 /usr/convex/getsysinfo = $( (/usr/convex/getsysinfo) 2>/dev/null)
16691682
16701683 UNAME_MACHINE = "$UNAME_MACHINE"
16711684 UNAME_RELEASE = "$UNAME_RELEASE"
11 # Configuration validation subroutine script.
22 # Copyright 1992-2020 Free Software Foundation, Inc.
33
4 timestamp='2020-09-08'
4 timestamp='2020-12-02'
55
66 # This file is free software; you can redistribute it and/or modify it
77 # under the terms of the GNU General Public License as published by
3232 # Otherwise, we print the canonical config type on stdout and succeed.
3333
3434 # You can get the latest version of this script from:
35 # https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub
35 # https://git.savannah.gnu.org/cgit/config.git/plain/config.sub
3636
3737 # This file is supposed to be the same for all GNU packages
3838 # and recognize all the CPU types, system types and aliases
4949 # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
5050 # It is wrong to echo any other type of specification.
5151
52 me=`echo "$0" | sed -e 's,.*/,,'`
52 me=$(echo "$0" | sed -e 's,.*/,,')
5353
5454 usage="\
5555 Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS
768768 vendor=hp
769769 ;;
770770 i*86v32)
771 cpu=`echo "$1" | sed -e 's/86.*/86/'`
771 cpu=$(echo "$1" | sed -e 's/86.*/86/')
772772 vendor=pc
773773 basic_os=sysv32
774774 ;;
775775 i*86v4*)
776 cpu=`echo "$1" | sed -e 's/86.*/86/'`
776 cpu=$(echo "$1" | sed -e 's/86.*/86/')
777777 vendor=pc
778778 basic_os=sysv4
779779 ;;
780780 i*86v)
781 cpu=`echo "$1" | sed -e 's/86.*/86/'`
781 cpu=$(echo "$1" | sed -e 's/86.*/86/')
782782 vendor=pc
783783 basic_os=sysv
784784 ;;
785785 i*86sol2)
786 cpu=`echo "$1" | sed -e 's/86.*/86/'`
786 cpu=$(echo "$1" | sed -e 's/86.*/86/')
787787 vendor=pc
788788 basic_os=solaris2
789789 ;;
916916 ;;
917917 leon-*|leon[3-9]-*)
918918 cpu=sparc
919 vendor=`echo "$basic_machine" | sed 's/-.*//'`
919 vendor=$(echo "$basic_machine" | sed 's/-.*//')
920920 ;;
921921
922922 *-*)
10831083 cpu=mipsisa64sb1el
10841084 ;;
10851085 sh5e[lb]-*)
1086 cpu=`echo "$cpu" | sed 's/^\(sh.\)e\(.\)$/\1\2e/'`
1086 cpu=$(echo "$cpu" | sed 's/^\(sh.\)e\(.\)$/\1\2e/')
10871087 ;;
10881088 spur-*)
10891089 cpu=spur
11011101 cpu=x86_64
11021102 ;;
11031103 xscale-* | xscalee[bl]-*)
1104 cpu=`echo "$cpu" | sed 's/^xscale/arm/'`
1104 cpu=$(echo "$cpu" | sed 's/^xscale/arm/')
11051105 ;;
11061106 arm64-*)
11071107 cpu=aarch64
12401240 | sparcv8 | sparcv9 | sparcv9b | sparcv9v | sv1 | sx* \
12411241 | spu \
12421242 | tahoe \
1243 | thumbv7* \
12431244 | tic30 | tic4x | tic54x | tic55x | tic6x | tic80 \
12441245 | tron \
12451246 | ubicom32 \
12851286 case $basic_os in
12861287 gnu/linux*)
12871288 kernel=linux
1288 os=`echo $basic_os | sed -e 's|gnu/linux|gnu|'`
1289 os=$(echo $basic_os | sed -e 's|gnu/linux|gnu|')
1290 ;;
1291 os2-emx)
1292 kernel=os2
1293 os=$(echo $basic_os | sed -e 's|os2-emx|emx|')
12891294 ;;
12901295 nto-qnx*)
12911296 kernel=nto
1292 os=`echo $basic_os | sed -e 's|nto-qnx|qnx|'`
1297 os=$(echo $basic_os | sed -e 's|nto-qnx|qnx|')
12931298 ;;
12941299 *-*)
12951300 # shellcheck disable=SC2162
13001305 # Default OS when just kernel was specified
13011306 nto*)
13021307 kernel=nto
1303 os=`echo $basic_os | sed -e 's|nto|qnx|'`
1308 os=$(echo $basic_os | sed -e 's|nto|qnx|')
13041309 ;;
13051310 linux*)
13061311 kernel=linux
1307 os=`echo $basic_os | sed -e 's|linux|gnu|'`
1312 os=$(echo $basic_os | sed -e 's|linux|gnu|')
13081313 ;;
13091314 *)
13101315 kernel=
13251330 os=cnk
13261331 ;;
13271332 solaris1 | solaris1.*)
1328 os=`echo $os | sed -e 's|solaris1|sunos4|'`
1333 os=$(echo $os | sed -e 's|solaris1|sunos4|')
13291334 ;;
13301335 solaris)
13311336 os=solaris2
13541359 os=sco3.2v4
13551360 ;;
13561361 sco3.2.[4-9]*)
1357 os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
1362 os=$(echo $os | sed -e 's/sco3.2./sco3.2v/')
13581363 ;;
13591364 sco*v* | scout)
13601365 # Don't match below
13841389 os=lynxos
13851390 ;;
13861391 mac[0-9]*)
1387 os=`echo "$os" | sed -e 's|mac|macos|'`
1392 os=$(echo "$os" | sed -e 's|mac|macos|')
13881393 ;;
13891394 opened*)
13901395 os=openedition
13931398 os=os400
13941399 ;;
13951400 sunos5*)
1396 os=`echo "$os" | sed -e 's|sunos5|solaris2|'`
1401 os=$(echo "$os" | sed -e 's|sunos5|solaris2|')
13971402 ;;
13981403 sunos6*)
1399 os=`echo "$os" | sed -e 's|sunos6|solaris3|'`
1404 os=$(echo "$os" | sed -e 's|sunos6|solaris3|')
14001405 ;;
14011406 wince*)
14021407 os=wince
14301435 ;;
14311436 # Preserve the version number of sinix5.
14321437 sinix5.*)
1433 os=`echo $os | sed -e 's|sinix|sysv|'`
1438 os=$(echo $os | sed -e 's|sinix|sysv|')
14341439 ;;
14351440 sinix*)
14361441 os=sysv4
17151720 | skyos* | haiku* | rdos* | toppers* | drops* | es* \
17161721 | onefs* | tirtos* | phoenix* | fuchsia* | redox* | bme* \
17171722 | midnightbsd* | amdhsa* | unleashed* | emscripten* | wasi* \
1718 | nsk* | powerunix* | genode* | zvmoe* | qnx* )
1723 | nsk* | powerunix* | genode* | zvmoe* | qnx* | emx*)
17191724 ;;
17201725 # This one is extra strict with allowed versions
17211726 sco3.2v2 | sco3.2v[4-9]* | sco5v6*)
17451750 kfreebsd*-gnu* | kopensolaris*-gnu*)
17461751 ;;
17471752 nto-qnx*)
1753 ;;
1754 os2-emx)
17481755 ;;
17491756 *-eabi* | *-gnueabi*)
17501757 ;;
00 #! /bin/sh
11 # Guess values for system-dependent variables and create Makefiles.
2 # Generated by GNU Autoconf 2.69 for unbound 1.12.0.
2 # Generated by GNU Autoconf 2.69 for unbound 1.13.0.
33 #
44 # Report bugs to <unbound-bugs@nlnetlabs.nl or https://github.com/NLnetLabs/unbound/issues>.
55 #
590590 # Identity of this package.
591591 PACKAGE_NAME='unbound'
592592 PACKAGE_TARNAME='unbound'
593 PACKAGE_VERSION='1.12.0'
594 PACKAGE_STRING='unbound 1.12.0'
593 PACKAGE_VERSION='1.13.0'
594 PACKAGE_STRING='unbound 1.13.0'
595595 PACKAGE_BUGREPORT='unbound-bugs@nlnetlabs.nl or https://github.com/NLnetLabs/unbound/issues'
596596 PACKAGE_URL=''
597597
14581458 # Omit some internal or obsolete options to make the list less imposing.
14591459 # This message is too long to be a string in the A/UX 3.1 sh.
14601460 cat <<_ACEOF
1461 \`configure' configures unbound 1.12.0 to adapt to many kinds of systems.
1461 \`configure' configures unbound 1.13.0 to adapt to many kinds of systems.
14621462
14631463 Usage: $0 [OPTION]... [VAR=VALUE]...
14641464
15231523
15241524 if test -n "$ac_init_help"; then
15251525 case $ac_init_help in
1526 short | recursive ) echo "Configuration of unbound 1.12.0:";;
1526 short | recursive ) echo "Configuration of unbound 1.13.0:";;
15271527 esac
15281528 cat <<\_ACEOF
15291529
17511751 test -n "$ac_init_help" && exit $ac_status
17521752 if $ac_init_version; then
17531753 cat <<\_ACEOF
1754 unbound configure 1.12.0
1754 unbound configure 1.13.0
17551755 generated by GNU Autoconf 2.69
17561756
17571757 Copyright (C) 2012 Free Software Foundation, Inc.
24602460 This file contains any messages produced by compilers while
24612461 running configure, to aid debugging if configure makes a mistake.
24622462
2463 It was created by unbound $as_me 1.12.0, which was
2463 It was created by unbound $as_me 1.13.0, which was
24642464 generated by GNU Autoconf 2.69. Invocation command line was
24652465
24662466 $ $0 $@
28102810
28112811 UNBOUND_VERSION_MAJOR=1
28122812
2813 UNBOUND_VERSION_MINOR=12
2813 UNBOUND_VERSION_MINOR=13
28142814
28152815 UNBOUND_VERSION_MICRO=0
28162816
28172817
28182818 LIBUNBOUND_CURRENT=9
2819 LIBUNBOUND_REVISION=10
2819 LIBUNBOUND_REVISION=11
28202820 LIBUNBOUND_AGE=1
28212821 # 1.0.0 had 0:12:0
28222822 # 1.0.1 had 0:13:0
28942894 # 1.10.1 had 9:8:1
28952895 # 1.11.0 had 9:9:1
28962896 # 1.12.0 had 9:10:1
2897 # 1.13.0 had 9:11:1
28972898
28982899 # Current -- the number of the binary API that we're implementing
28992900 # Revision -- which iteration of the implementation of the binary
1472714728 fi
1472814729
1472914730 # Checks for header files.
14730 for ac_header in stdarg.h stdbool.h netinet/in.h netinet/tcp.h sys/param.h sys/select.h sys/socket.h sys/un.h sys/uio.h sys/resource.h arpa/inet.h syslog.h netdb.h sys/wait.h pwd.h glob.h grp.h login_cap.h winsock2.h ws2tcpip.h endian.h sys/endian.h libkern/OSByteOrder.h sys/ipc.h sys/shm.h ifaddrs.h net/if.h
14731 for ac_header in stdarg.h stdbool.h netinet/in.h netinet/tcp.h sys/param.h sys/select.h sys/socket.h sys/un.h sys/uio.h sys/resource.h arpa/inet.h syslog.h netdb.h sys/wait.h pwd.h glob.h grp.h login_cap.h winsock2.h ws2tcpip.h endian.h sys/endian.h libkern/OSByteOrder.h sys/ipc.h sys/shm.h ifaddrs.h
1473114732 do :
1473214733 as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
1473314734 ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
1473514736 if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
1473614737 cat >>confdefs.h <<_ACEOF
1473714738 #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
14739 _ACEOF
14740
14741 fi
14742
14743 done
14744
14745 # net/if.h portability for Darwin see:
14746 # https://www.gnu.org/software/autoconf/manual/autoconf-2.69/html_node/Header-Portability.html
14747 for ac_header in net/if.h
14748 do :
14749 ac_fn_c_check_header_compile "$LINENO" "net/if.h" "ac_cv_header_net_if_h" "
14750 #include <stdio.h>
14751 #ifdef STDC_HEADERS
14752 # include <stdlib.h>
14753 # include <stddef.h>
14754 #else
14755 # ifdef HAVE_STDLIB_H
14756 # include <stdlib.h>
14757 # endif
14758 #endif
14759 #ifdef HAVE_SYS_SOCKET_H
14760 # include <sys/socket.h>
14761 #endif
14762
14763 "
14764 if test "x$ac_cv_header_net_if_h" = xyes; then :
14765 cat >>confdefs.h <<_ACEOF
14766 #define HAVE_NET_IF_H 1
1473814767 _ACEOF
1473914768
1474014769 fi
2168521714
2168621715
2168721716
21688 version=1.12.0
21717 version=1.13.0
2168921718
2169021719 date=`date +'%b %e, %Y'`
2169121720
2220422233 # report actual input values of CONFIG_FILES etc. instead of their
2220522234 # values after options handling.
2220622235 ac_log="
22207 This file was extended by unbound $as_me 1.12.0, which was
22236 This file was extended by unbound $as_me 1.13.0, which was
2220822237 generated by GNU Autoconf 2.69. Invocation command line was
2220922238
2221022239 CONFIG_FILES = $CONFIG_FILES
2227022299 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
2227122300 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
2227222301 ac_cs_version="\\
22273 unbound config.status 1.12.0
22302 unbound config.status 1.13.0
2227422303 configured by $0, generated by GNU Autoconf 2.69,
2227522304 with options \\"\$ac_cs_config\\"
2227622305
99
1010 # must be numbers. ac_defun because of later processing
1111 m4_define([VERSION_MAJOR],[1])
12 m4_define([VERSION_MINOR],[12])
12 m4_define([VERSION_MINOR],[13])
1313 m4_define([VERSION_MICRO],[0])
1414 AC_INIT(unbound, m4_defn([VERSION_MAJOR]).m4_defn([VERSION_MINOR]).m4_defn([VERSION_MICRO]), unbound-bugs@nlnetlabs.nl or https://github.com/NLnetLabs/unbound/issues, unbound)
1515 AC_SUBST(UNBOUND_VERSION_MAJOR, [VERSION_MAJOR])
1717 AC_SUBST(UNBOUND_VERSION_MICRO, [VERSION_MICRO])
1818
1919 LIBUNBOUND_CURRENT=9
20 LIBUNBOUND_REVISION=10
20 LIBUNBOUND_REVISION=11
2121 LIBUNBOUND_AGE=1
2222 # 1.0.0 had 0:12:0
2323 # 1.0.1 had 0:13:0
9595 # 1.10.1 had 9:8:1
9696 # 1.11.0 had 9:9:1
9797 # 1.12.0 had 9:10:1
98 # 1.13.0 had 9:11:1
9899
99100 # Current -- the number of the binary API that we're implementing
100101 # Revision -- which iteration of the implementation of the binary
398399 PKG_PROG_PKG_CONFIG
399400
400401 # Checks for header files.
401 AC_CHECK_HEADERS([stdarg.h stdbool.h netinet/in.h netinet/tcp.h sys/param.h sys/select.h sys/socket.h sys/un.h sys/uio.h sys/resource.h arpa/inet.h syslog.h netdb.h sys/wait.h pwd.h glob.h grp.h login_cap.h winsock2.h ws2tcpip.h endian.h sys/endian.h libkern/OSByteOrder.h sys/ipc.h sys/shm.h ifaddrs.h net/if.h],,, [AC_INCLUDES_DEFAULT])
402 AC_CHECK_HEADERS([stdarg.h stdbool.h netinet/in.h netinet/tcp.h sys/param.h sys/select.h sys/socket.h sys/un.h sys/uio.h sys/resource.h arpa/inet.h syslog.h netdb.h sys/wait.h pwd.h glob.h grp.h login_cap.h winsock2.h ws2tcpip.h endian.h sys/endian.h libkern/OSByteOrder.h sys/ipc.h sys/shm.h ifaddrs.h],,, [AC_INCLUDES_DEFAULT])
403 # net/if.h portability for Darwin see:
404 # https://www.gnu.org/software/autoconf/manual/autoconf-2.69/html_node/Header-Portability.html
405 AC_CHECK_HEADERS([net/if.h],,, [
406 #include <stdio.h>
407 #ifdef STDC_HEADERS
408 # include <stdlib.h>
409 # include <stddef.h>
410 #else
411 # ifdef HAVE_STDLIB_H
412 # include <stdlib.h>
413 # endif
414 #endif
415 #ifdef HAVE_SYS_SOCKET_H
416 # include <sys/socket.h>
417 #endif
418 ])
402419
403420 # Check for Apple header. This uncovers TARGET_OS_IPHONE, TARGET_OS_TV or TARGET_OS_WATCH
404421 AC_CHECK_HEADERS([TargetConditionals.h])
5252 lookups for downstream clients.
5353 * drop2rpz: perl script that converts the Spamhaus DROP-List in RPZ-Format,
5454 contributed by Andreas Schulze.
55 * metrics.awk: awk script that can convert unbound-control stats to
56 Prometheus metrics format output.
0 # read output of unbound-control stats
1 # and output prometheus metrics style output.
2 # use these options:
3 # server: extended-statistics: yes
4 # statistics-cumulative: no
5 # statistics-interval: 0
6 # remote-control: control-enable: yes
7 # Can use it like unbound-control stats | awk -f "metrics.awk"
8
9 BEGIN {
10 FS="=";
11 }
12 # everything like total.num.queries=value is put in val["total.num.queries"]
13 /^.*\..*=/ {
14 val[$1]=$2;
15 }
16 # print the output metrics
17 END {
18 print "# HELP unbound_hits_queries Unbound DNS traffic and cache hits"
19 print "# TYPE unbound_hits_queries gauge"
20 print "unbound_hits_queries{type=\"total.num.queries\"} " val["total.num.queries"];
21 for (x=0; x<99; x++) {
22 if(val["thread" $x ".num.queries"] != "") {
23 print "unbound_hits_queries{type=\"thread" $x ".num.queries\"} " val["thread" $x ".num.queries"];
24 }
25 }
26 print "unbound_hits_queries{type=\"total.num.cachehits\"} " val["total.num.cachehits"];
27 print "unbound_hits_queries{type=\"total.num.prefetch\"} " val["total.num.prefetch"];
28 print "unbound_hits_queries{type=\"num.query.tcp\"} " val["num.query.tcp"];
29 print "unbound_hits_queries{type=\"num.query.tcpout\"} " val["num.query.tcpout"];
30 print "unbound_hits_queries{type=\"num.query.tls\"} " val["num.query.tls"];
31 print "unbound_hits_queries{type=\"num.query.tls.resume\"} " val["num.query.tls.resume"];
32 print "unbound_hits_queries{type=\"num.query.ipv6\"} " val["num.query.ipv6"];
33 print "unbound_hits_queries{type=\"unwanted.queries\"} " val["unwanted.queries"];
34 print ""
35
36 print "# HELP unbound_queue_queries Unbound requestlist size"
37 print "# TYPE unbound_queue_queries gauge"
38 print "unbound_queue_queries{type=\"total.requestlist.avg\"} " val["total.requestlist.avg"];
39 print "unbound_queue_queries{type=\"total.requestlist.max\"} " val["total.requestlist.max"];
40 print "unbound_queue_queries{type=\"total.requestlist.overwritten\"} " val["total.requestlist.overwritten"];
41 print "unbound_queue_queries{type=\"total.requestlist.exceeded\"} " val["total.requestlist.exceeded"];
42 print ""
43
44 print "# HELP unbound_memory_bytes Unbound memory usage"
45 print "# TYPE unbound_memory_bytes gauge"
46 print "unbound_memory_bytes{type=\"mem.cache.rrset\"} " val["mem.cache.rrset"];
47 print "unbound_memory_bytes{type=\"mem.cache.message\"} " val["mem.cache.message"];
48 print "unbound_memory_bytes{type=\"mem.mod.iterator\"} " val["mem.mod.iterator"];
49 if(val["mem.mod.validator"] != "") {
50 print "unbound_memory_bytes{type=\"mem.mod.validator\"} " val["mem.mod.validator"];
51 }
52 if(val["mem.mod.respip"] != "") {
53 print "unbound_memory_bytes{type=\"mem.mod.respip\"} " val["mem.mod.respip"];
54 }
55 if(val["mem.mod.subnet"] != "") {
56 print "unbound_memory_bytes{type=\"mem.mod.subnet\"} " val["mem.mod.subnet"];
57 }
58 if(val["mem.mod.ipsecmod"] != "") {
59 print "unbound_memory_bytes{type=\"mem.mod.ipsecmod\"} " val["mem.mod.ipsecmod"];
60 }
61 if(val["mem.mod.dynlibmod"] != "") {
62 print "unbound_memory_bytes{type=\"mem.mod.dynlibmod\"} " val["mem.mod.dynlibmod"];
63 }
64 print "unbound_memory_bytes{type=\"msg.cache.count\"} " val["msg.cache.count"];
65 print "unbound_memory_bytes{type=\"rrset.cache.count\"} " val["rrset.cache.count"];
66 print "unbound_memory_bytes{type=\"infra.cache.count\"} " val["infra.cache.count"];
67 print "unbound_memory_bytes{type=\"key.cache.count\"} " val["key.cache.count"];
68 print ""
69
70 print "# HELP unbound_by_type_queries Unbound DNS queries by type"
71 print "# TYPE unbound_by_type_queries gauge"
72 for(x in val) {
73 if(x ~ /^num.query.type./) {
74 if(val[x] != "") {
75 split(x, a, ".");
76 print "unbound_by_type_queries{type=\"" a[4] "\"} " val[x];
77 }
78 }
79 }
80 print ""
81
82 print "# HELP unbound_by_class_queries Unbound DNS queries by class"
83 print "# TYPE unbound_by_class_queries gauge"
84 for(x in val) {
85 if(x ~ /^num.query.class./) {
86 if(val[x] != "") {
87 split(x, a, ".");
88 print "unbound_by_class_queries{class=\"" a[4] "\"} " val[x];
89 }
90 }
91 }
92 print ""
93
94 print "# HELP unbound_by_opcode_queries Unbound DNS queries by opcode"
95 print "# TYPE unbound_by_opcode_queries gauge"
96 for(x in val) {
97 if(x ~ /^num.query.opcode./) {
98 if(val[x] != "") {
99 split(x, a, ".");
100 print "unbound_by_opcode_queries{opcode=\"" a[4] "\"} " val[x];
101 }
102 }
103 }
104 print ""
105
106 print "# HELP unbound_by_rcode_queries Unbound DNS answers by rcode"
107 print "# TYPE unbound_by_rcode_queries gauge"
108 for(x in val) {
109 if(x ~ /^num.answer.rcode./) {
110 if(val[x] != "") {
111 split(x, a, ".");
112 print "unbound_by_rcode_queries{rcode=\"" a[4] "\"} " val[x];
113 }
114 }
115 }
116 print ""
117
118 print "# HELP unbound_by_flags_queries Unbound DNS queries by flags"
119 print "# TYPE unbound_by_flags_queries gauge"
120 for(x in val) {
121 if(x ~ /^num.query.flags./) {
122 if(val[x] != "") {
123 split(x, a, ".");
124 print "unbound_by_flags_queries{flag=\"" a[4] "\"} " val[x];
125 }
126 }
127 }
128 if(val["num.query.edns.present"] != "") {
129 print "unbound_by_flags_queries{flag=\"num.query.edns.present\"} " val["num.query.edns.present"];
130 }
131 if(val["num.query.edns.DO"] != "") {
132 print "unbound_by_flags_queries{flag=\"num.query.edns.DO\"} " val["num.query.edns.DO"];
133 }
134 print ""
135
136 print "# HELP unbound_histogram_seconds Unbound DNS histogram of reply time"
137 print "# TYPE unbound_histogram_seconds gauge"
138 print "unbound_histogram_seconds{bucket=\"000000.000000.to.000000.000001\"} " val["histogram.000000.000000.to.000000.000001"];
139 print "unbound_histogram_seconds{bucket=\"000000.000001.to.000000.000002\"} " val["histogram.000000.000001.to.000000.000002"];
140 print "unbound_histogram_seconds{bucket=\"000000.000002.to.000000.000004\"} " val["histogram.000000.000002.to.000000.000004"];
141 print "unbound_histogram_seconds{bucket=\"000000.000004.to.000000.000008\"} " val["histogram.000000.000004.to.000000.000008"];
142 print "unbound_histogram_seconds{bucket=\"000000.000008.to.000000.000016\"} " val["histogram.000000.000008.to.000000.000016"];
143 print "unbound_histogram_seconds{bucket=\"000000.000016.to.000000.000032\"} " val["histogram.000000.000016.to.000000.000032"];
144 print "unbound_histogram_seconds{bucket=\"000000.000032.to.000000.000064\"} " val["histogram.000000.000032.to.000000.000064"];
145 print "unbound_histogram_seconds{bucket=\"000000.000064.to.000000.000128\"} " val["histogram.000000.000064.to.000000.000128"];
146 print "unbound_histogram_seconds{bucket=\"000000.000128.to.000000.000256\"} " val["histogram.000000.000128.to.000000.000256"];
147 print "unbound_histogram_seconds{bucket=\"000000.000256.to.000000.000512\"} " val["histogram.000000.000256.to.000000.000512"];
148 print "unbound_histogram_seconds{bucket=\"000000.000512.to.000000.001024\"} " val["histogram.000000.000512.to.000000.001024"];
149 print "unbound_histogram_seconds{bucket=\"000000.001024.to.000000.002048\"} " val["histogram.000000.001024.to.000000.002048"];
150 print "unbound_histogram_seconds{bucket=\"000000.002048.to.000000.004096\"} " val["histogram.000000.002048.to.000000.004096"];
151 print "unbound_histogram_seconds{bucket=\"000000.004096.to.000000.008192\"} " val["histogram.000000.004096.to.000000.008192"];
152 print "unbound_histogram_seconds{bucket=\"000000.008192.to.000000.016384\"} " val["histogram.000000.008192.to.000000.016384"];
153 print "unbound_histogram_seconds{bucket=\"000000.016384.to.000000.032768\"} " val["histogram.000000.016384.to.000000.032768"];
154 print "unbound_histogram_seconds{bucket=\"000000.032768.to.000000.065536\"} " val["histogram.000000.032768.to.000000.065536"];
155 print "unbound_histogram_seconds{bucket=\"000000.065536.to.000000.131072\"} " val["histogram.000000.065536.to.000000.131072"];
156 print "unbound_histogram_seconds{bucket=\"000000.131072.to.000000.262144\"} " val["histogram.000000.131072.to.000000.262144"];
157 print "unbound_histogram_seconds{bucket=\"000000.262144.to.000000.524288\"} " val["histogram.000000.262144.to.000000.524288"];
158 print "unbound_histogram_seconds{bucket=\"000000.524288.to.000001.000000\"} " val["histogram.000000.524288.to.000001.000000"];
159 print "unbound_histogram_seconds{bucket=\"000001.000000.to.000002.000000\"} " val["histogram.000001.000000.to.000002.000000"];
160 print "unbound_histogram_seconds{bucket=\"000002.000000.to.000004.000000\"} " val["histogram.000002.000000.to.000004.000000"];
161 print "unbound_histogram_seconds{bucket=\"000004.000000.to.000008.000000\"} " val["histogram.000004.000000.to.000008.000000"];
162 print "unbound_histogram_seconds{bucket=\"000008.000000.to.000016.000000\"} " val["histogram.000008.000000.to.000016.000000"];
163 print "unbound_histogram_seconds{bucket=\"000016.000000.to.000032.000000\"} " val["histogram.000016.000000.to.000032.000000"];
164 print "unbound_histogram_seconds{bucket=\"000032.000000.to.000064.000000\"} " val["histogram.000032.000000.to.000064.000000"];
165 print "unbound_histogram_seconds{bucket=\"000064.000000.to.000128.000000\"} " val["histogram.000064.000000.to.000128.000000"];
166 print "unbound_histogram_seconds{bucket=\"000128.000000.to.000256.000000\"} " val["histogram.000128.000000.to.000256.000000"];
167 print "unbound_histogram_seconds{bucket=\"000256.000000.to.000512.000000\"} " val["histogram.000256.000000.to.000512.000000"];
168 print "unbound_histogram_seconds{bucket=\"000512.000000.to.001024.000000\"} " val["histogram.000512.000000.to.001024.000000"];
169 print "unbound_histogram_seconds{bucket=\"001024.000000.to.002048.000000\"} " val["histogram.001024.000000.to.002048.000000"];
170 print "unbound_histogram_seconds{bucket=\"002048.000000.to.004096.000000\"} " val["histogram.002048.000000.to.004096.000000"];
171 print "unbound_histogram_seconds{bucket=\"004096.000000.to.008192.000000\"} " val["histogram.004096.000000.to.008192.000000"];
172 print "unbound_histogram_seconds{bucket=\"008192.000000.to.016384.000000\"} " val["histogram.008192.000000.to.016384.000000"];
173 print "unbound_histogram_seconds{bucket=\"016384.000000.to.032768.000000\"} " val["histogram.016384.000000.to.032768.000000"];
174 print "unbound_histogram_seconds{bucket=\"032768.000000.to.065536.000000\"} " val["histogram.032768.000000.to.065536.000000"];
175 print "unbound_histogram_seconds{bucket=\"065536.000000.to.131072.000000\"} " val["histogram.065536.000000.to.131072.000000"];
176 print "unbound_histogram_seconds{bucket=\"131072.000000.to.262144.000000\"} " val["histogram.131072.000000.to.262144.000000"];
177 print "unbound_histogram_seconds{bucket=\"262144.000000.to.524288.000000\"} " val["histogram.262144.000000.to.524288.000000"];
178 print ""
179 }
6565 RuntimeDirectory=unbound
6666 ConfigurationDirectory=unbound
6767 StateDirectory=unbound
68 RestrictAddressFamilies=AF_INET AF_INET6 AF_UNIX
68 RestrictAddressFamilies=AF_INET AF_INET6 AF_NETLINK AF_UNIX
6969 RestrictRealtime=true
7070 SystemCallArchitectures=native
7171 SystemCallFilter=~@clock @cpu-emulation @debug @keyring @module mount @obsolete @resources
3737 RuntimeDirectory=unbound
3838 ConfigurationDirectory=unbound
3939 StateDirectory=unbound
40 RestrictAddressFamilies=AF_INET AF_INET6 AF_UNIX
40 RestrictAddressFamilies=AF_INET AF_INET6 AF_NETLINK AF_UNIX
4141 RestrictRealtime=true
4242 SystemCallArchitectures=native
4343 SystemCallFilter=~@clock @cpu-emulation @debug @keyring @module mount @obsolete @resources
290290 free(daemon);
291291 return NULL;
292292 }
293 if(!(daemon->env->edns_tags = edns_tags_create())) {
293 if(!(daemon->env->edns_strings = edns_strings_create())) {
294294 auth_zones_delete(daemon->env->auth_zones);
295295 acl_list_delete(daemon->acl);
296296 tcl_list_delete(daemon->tcl);
637637 &daemon->use_rpz))
638638 fatal_exit("auth_zones could not be setup");
639639
640 /* Set-up EDNS tags */
641 if(!edns_tags_apply_cfg(daemon->env->edns_tags, daemon->cfg))
642 fatal_exit("Could not set up EDNS tags");
640 /* Set-up EDNS strings */
641 if(!edns_strings_apply_cfg(daemon->env->edns_strings, daemon->cfg))
642 fatal_exit("Could not set up EDNS strings");
643643
644644 /* setup modules */
645645 daemon_setup_modules(daemon);
772772 rrset_cache_delete(daemon->env->rrset_cache);
773773 infra_delete(daemon->env->infra_cache);
774774 edns_known_options_delete(daemon->env);
775 edns_tags_delete(daemon->env->edns_tags);
775 edns_strings_delete(daemon->env->edns_strings);
776776 auth_zones_delete(daemon->env->auth_zones);
777777 }
778778 ub_randfree(daemon->rand);
336336 /** write pid to file.
337337 * @param pidfile: file name of pid file.
338338 * @param pid: pid to write to file.
339 * @return false on failure
339340 */
340 static void
341 static int
341342 writepid (const char* pidfile, pid_t pid)
342343 {
343 FILE* f;
344
345 if ((f = fopen(pidfile, "w")) == NULL ) {
344 int fd;
345 char pidbuf[32];
346 size_t count = 0;
347 snprintf(pidbuf, sizeof(pidbuf), "%lu\n", (unsigned long)pid);
348
349 if((fd = open(pidfile, O_WRONLY | O_CREAT | O_TRUNC
350 #ifdef O_NOFOLLOW
351 | O_NOFOLLOW
352 #endif
353 , 0644)) == -1) {
346354 log_err("cannot open pidfile %s: %s",
347355 pidfile, strerror(errno));
348 return;
349 }
350 if(fprintf(f, "%lu\n", (unsigned long)pid) < 0) {
351 log_err("cannot write to pidfile %s: %s",
352 pidfile, strerror(errno));
353 }
354 fclose(f);
356 return 0;
357 }
358 while(count < strlen(pidbuf)) {
359 ssize_t r = write(fd, pidbuf+count, strlen(pidbuf)-count);
360 if(r == -1) {
361 if(errno == EAGAIN || errno == EINTR)
362 continue;
363 log_err("cannot write to pidfile %s: %s",
364 pidfile, strerror(errno));
365 close(fd);
366 return 0;
367 } else if(r == 0) {
368 log_err("cannot write any bytes to pidfile %s: "
369 "write returns 0 bytes written", pidfile);
370 close(fd);
371 return 0;
372 }
373 count += r;
374 }
375 close(fd);
376 return 1;
355377 }
356378
357379 /**
505527 /* write new pidfile (while still root, so can be outside chroot) */
506528 #ifdef HAVE_KILL
507529 if(cfg->pidfile && cfg->pidfile[0] && need_pidfile) {
508 writepid(daemon->pidfile, getpid());
509 if(cfg->username && cfg->username[0] && cfg_uid != (uid_t)-1 &&
510 pidinchroot) {
530 if(writepid(daemon->pidfile, getpid())) {
531 if(cfg->username && cfg->username[0] && cfg_uid != (uid_t)-1 &&
532 pidinchroot) {
511533 # ifdef HAVE_CHOWN
512 if(chown(daemon->pidfile, cfg_uid, cfg_gid) == -1) {
513 verbose(VERB_QUERY, "cannot chown %u.%u %s: %s",
514 (unsigned)cfg_uid, (unsigned)cfg_gid,
515 daemon->pidfile, strerror(errno));
534 if(chown(daemon->pidfile, cfg_uid, cfg_gid) == -1) {
535 verbose(VERB_QUERY, "cannot chown %u.%u %s: %s",
536 (unsigned)cfg_uid, (unsigned)cfg_gid,
537 daemon->pidfile, strerror(errno));
538 }
539 # endif /* HAVE_CHOWN */
516540 }
517 # endif /* HAVE_CHOWN */
518541 }
519542 }
520543 #else
575575 struct comm_reply* repinfo, struct ub_packed_rrset_key** alias_rrset,
576576 struct reply_info** encode_repp, struct auth_zones* az)
577577 {
578 struct respip_action_info actinfo = {0};
578 struct respip_action_info actinfo = {0, 0, 0, 0, NULL, 0, NULL};
579579 actinfo.action = respip_none;
580580
581581 if(qinfo->qtype != LDNS_RR_TYPE_A &&
17881788 ? cfg->tcp_keepalive_timeout
17891789 : cfg->tcp_idle_timeout,
17901790 cfg->harden_large_queries, cfg->http_max_streams,
1791 cfg->http_endpoint, worker->daemon->tcl,
1792 worker->daemon->listen_sslctx,
1791 cfg->http_endpoint, cfg->http_notls_downstream,
1792 worker->daemon->tcl, worker->daemon->listen_sslctx,
17931793 dtenv, worker_handle_request, worker);
17941794 if(!worker->front) {
17951795 log_err("could not create listening sockets");
18061806 &worker_alloc_cleanup, worker,
18071807 cfg->do_udp || cfg->udp_upstream_without_downstream,
18081808 worker->daemon->connect_sslctx, cfg->delay_close,
1809 cfg->tls_use_sni, dtenv);
1809 cfg->tls_use_sni, dtenv, cfg->udp_connect);
18101810 if(!worker->back) {
18111811 log_err("could not create outgoing sockets");
18121812 worker_delete(worker);
133133
134134 if(cfg->dnstap && cfg->dnstap_socket_path && cfg->dnstap_socket_path[0] &&
135135 (cfg->dnstap_ip==NULL || cfg->dnstap_ip[0]==0)) {
136 char* p = fname_after_chroot(cfg->dnstap_socket_path, cfg, 1);
137 if(!p) {
138 log_err("malloc failure");
139 return NULL;
140 }
136 char* p = cfg->dnstap_socket_path;
137 if(cfg->chrootdir && cfg->chrootdir[0] && strncmp(p,
138 cfg->chrootdir, strlen(cfg->chrootdir)) == 0)
139 p += strlen(cfg->chrootdir);
141140 verbose(VERB_OPS, "attempting to connect to dnstap socket %s",
142141 p);
143142 check_socket_file(p);
144 free(p);
145143 }
146144
147145 env = (struct dt_env *) calloc(1, sizeof(struct dt_env));
340340 dtio->is_bidirectional = cfg->dnstap_bidirectional;
341341
342342 if(dtio->upstream_is_unix) {
343 char* nm;
343344 if(!cfg->dnstap_socket_path ||
344345 cfg->dnstap_socket_path[0]==0) {
345346 log_err("dnstap setup: no dnstap-socket-path for "
346347 "socket connect");
347348 return 0;
348349 }
350 nm = cfg->dnstap_socket_path;
351 if(cfg->chrootdir && cfg->chrootdir[0] && strncmp(nm,
352 cfg->chrootdir, strlen(cfg->chrootdir)) == 0)
353 nm += strlen(cfg->chrootdir);
349354 free(dtio->socket_path);
350 dtio->socket_path = fname_after_chroot(cfg->dnstap_socket_path,
351 cfg, 1);
355 dtio->socket_path = strdup(nm);
352356 if(!dtio->socket_path) {
353357 log_err("dnstap setup: malloc failure");
354358 return 0;
0 30 November 2020: Wouter
1 - Fix assertion failure on double callback when iterator loses
2 interest in query at head of line that then has the tcp stream
3 not kept for reuse.
4 - tag for the 1.13.0rc4 release.
5
6 27 November 2020: Wouter
7 - Fix compile warning for type cast in http2_submit_dns_response.
8 - Fix when use free buffer to initialize rbtree for stream reuse.
9 - Fix compile warnings for windows.
10 - Fix compile warnings in rpz initialization.
11 - Fix contrib/metrics.awk for FreeBSD awk compatibility.
12 - tag for the 1.13.0rc3 release.
13
14 26 November 2020: Wouter
15 - Fix to omit UDP receive errors from log, if verbosity low.
16 These happen because of udp-connect.
17 - For #352: contrib/metrics.awk for Prometheus style metrics output.
18 - Fix that after failed read, the readagain cannot activate.
19 - Clear readagain upon decommission of pending tcp structure.
20
21 25 November 2020: Wouter
22 - with udp-connect ignore connection refused with UDP timeouts.
23 - Fix udp-connect on FreeBSD, do send calls on connected UDP socket.
24 - Better fix for reuse tree comparison for is-tls sockets. Where
25 the tree key identity is preserved after cleanup of the TLS state.
26 - Remove debug commands from reuse tests.
27 - Fix memory leak for edns client tag opcode config element.
28 - Attempt fix for libevent state in tcp reuse cases after a packet
29 is written.
30 - Fix readagain and writeagain callback functions for comm point
31 cleanup.
32 - tag for the 1.13.0rc2 release.
33
34 24 November 2020: Wouter
35 - Merge PR #283 : Stream reuse. This implements upstream stream
36 reuse for performing several queries over the same TCP or TLS
37 channel.
38 - set version of main branch to 1.13.0 for upcoming release.
39 - iana portlist updated.
40 - Fix one port unit test for udp-connect.
41 - tag for the 1.13.0rc1 release.
42 - Fix crash when TLS connection is closed prematurely, when
43 reuse tree comparison is not properly identical to insertion.
44 - Fix padding of struct regional for 32bit systems.
45
46 23 November 2020: George
47 - Merge PR #313 from Ralph Dolmans: Replace edns-client-tag with
48 edns-client-string option.
49
50 23 November 2020: Wouter
51 - Merge #351 from dvzrv: Add AF_NETLINK to set of allowed socket
52 address families.
53 - Fix #350: with the AF_NETLINK permission, to fix 1.12.0 error:
54 failed to list interfaces: getifaddrs: Address family not
55 supported by protocol.
56 - Fix #347: IP_DONTFRAG broken on Apple xcode 12.2.
57 - Option to toggle udp-connect, default is enabled.
58 - Fix for #303 CVE-2020-28935 : Fix that symlink does not interfere
59 with chown of pidfile.
60 - Further fix for it and retvalue 0 fix for it.
61
62 12 November 2020: Wouter
63 - Fix to connect() to UDP destinations, default turned on,
64 this lowers vulnerability to ICMP side channels.
65 - Retry for interfaces with unused ports if possible.
66
67 10 November 2020: Wouter
68 - Fix #341: fixing a possible memory leak.
69 - Fix memory leak after fix for possible memory leak failure.
70 - Fix #343: Fail to build --with-libnghttp2 with error: 'SSIZE_MAX'
71 undeclared.
72
73 27 October 2020: Wouter
74 - In man page note that tls-cert-bundle is read before permission
75 drop and chroot.
76
77 22 October 2020: Wouter
78 - Fix #333: Unbound Segmentation Fault w/ log_info Functions From
79 Python Mod.
80 - Fix that minimal-responses does not remove addresses from a priming
81 query response.
82
83 21 October 2020: George
84 - Fix #327: net/if.h check fails on some darwin versions; contribution by
85 Joshua Root.
86 - Fix #320: potential memory corruption due to size miscomputation upton
87 custom region alloc init.
88
89 21 October 2020: Wouter
90 - Merge PR #228 : infra-keep-probing option to probe hosts that are
91 down. Add infra-keep-probing: yes option. Hosts that are down are
92 probed more frequently.
93 With the option turned on, it probes about every 120 seconds,
94 eventually after exponential backoff, and that keeps that way. If
95 traffic keeps up for the domain. It probes with one at a time, eg.
96 one query is allowed to probe, other queries within that 120 second
97 interval are turned away.
98
99 19 October 2020: George
100 - Merge PR #324 from James Renken: Add modern X.509v3 extensions to
101 unbound-control TLS certificates.
102 - Fix for PR #324 to attach the x509v3 extensions to the client
103 certificate.
104
105 19 October 2020: Ralph
106 - local-zone regional allocations outside of chunk
107
108 19 October 2020: Wouter
109 - Fix that http settings have colon in set_option, for
110 http-endpoint, http-max-streams, http-query-buffer-size,
111 http-response-buffer-size, and http-nodelay.
112 - Fix memory leak of https port string when reading config.
113 - Fix #330: [Feature request] Add unencrypted DNS over HTTPS support.
114 This adds the option http-notls-downstream: yesno to change that,
115 and the dohclient test code has the -n option.
116 - Fix python documentation warning on functions.rst inplace_cb_reply.
117 - Fix dnstap test to wait for log timer to see if queries are logged.
118 - Log ip address when http session recv fails, eg. due to tls fail.
119 - Fix to set the tcp handler event toggle flag back to default when
120 the handler structure is reused.
121 - Clean the fix for out of order TCP processing limits on number
122 of queries. It was tested to work.
123
124 16 October 2020: Wouter
125 - Fix that the out of order TCP processing does not limit the
126 number of outstanding queries over a connection.
127
128 15 October 2020: George
129 - Fix that if there are reply callbacks for the given rcode, those
130 are called per reply and a new message created if that was modified
131 by the call.
132 - Pass the comm_reply information to the inplace_cb_reply* functions
133 during the mesh state and update the documentation on that.
134
135 15 October 2020: Wouter
136 - Merge PR #326 from netblue30: DoH: implement content-length
137 header field
138 - DoH content length, simplify code, remove declaration after
139 statement and fix cast warning.
140
141 14 October 2020: Wouter
142 - Fix for python reply callback to see mesh state reply_list member,
143 it only removes it briefly for the commpoint call so that it does
144 not drop it and attempt to modify the reply list during reply.
145 - Fix that if there are on reply callbacks, those are called per
146 reply and a new message created if that was modified by the call.
147 - Free up auth zone parse region after use for lookup of host
148
149 13 October 2020: Wouter
150 - Fix #323: unbound testsuite fails on mock build in systemd-nspawn
151 if systemd support is build.
152
153 9 October 2020: Wouter
154 - Fix dnstap socket and the chroot not applied properly to the dnstap
155 socket path.
156 - Fix warning in libnss compile, nss_buf2dsa is not used without DSA.
157
158 8 October 2020: Wouter
159 - Tag for 1.12.0 release.
160 - Current repo is version 1.12.1 in development.
161 - Fix #319: potential memory leak on config failure, in rpz config.
162
0163 1 October 2020: Wouter
1164 - Current repo is version 1.12.0 for release. Tag for 1.12.0rc1.
2165
0 README for Unbound 1.12.0
0 README for Unbound 1.13.0
11 Copyright 2007 NLnet Labs
22 http://unbound.net
33
00 #
11 # Example configuration file.
22 #
3 # See unbound.conf(5) man page, version 1.12.0.
3 # See unbound.conf(5) man page, version 1.13.0.
44 #
55 # this is a comment.
66
160160 # msec to wait before close of port on timeout UDP. 0 disables.
161161 # delay-close: 0
162162
163 # perform connect for UDP sockets to mitigate ICMP side channel.
164 # udp-connect: yes
165
163166 # msec for waiting for an unknown server to reply. Increase if you
164167 # are behind a slow satellite link, to eg. 1128.
165168 # unknown-server-time-limit: 376
190193
191194 # minimum wait time for responses, increase if uplink is long. In msec.
192195 # infra-cache-min-rtt: 50
196
197 # enable to make server probe down hosts more frequently.
198 # infra-keep-probing: no
193199
194200 # the number of slabs to use for the Infrastructure cache.
195201 # the number of slabs must be a power of 2.
787793 # service.
788794 # http-nodelay: yes
789795
796 # Disable TLS for DNS-over-HTTP downstream service.
797 # http-notls-downstream: no
798
790799 # DNS64 prefix. Must be specified when DNS64 is use.
791800 # Enable dns64 in module-config. Used to synthesize IPv6 from IPv4.
792801 # dns64-prefix: 64:ff9b::0/96
0 .TH "libunbound" "3" "Oct 8, 2020" "NLnet Labs" "unbound 1.12.0"
0 .TH "libunbound" "3" "Dec 3, 2020" "NLnet Labs" "unbound 1.13.0"
11 .\"
22 .\" libunbound.3 -- unbound library functions manual
33 .\"
4343 .B ub_ctx_zone_remove,
4444 .B ub_ctx_data_add,
4545 .B ub_ctx_data_remove
46 \- Unbound DNS validating resolver 1.12.0 functions.
46 \- Unbound DNS validating resolver 1.13.0 functions.
4747 .SH "SYNOPSIS"
4848 .B #include <unbound.h>
4949 .LP
0 .TH "unbound-anchor" "8" "Oct 8, 2020" "NLnet Labs" "unbound 1.12.0"
0 .TH "unbound-anchor" "8" "Dec 3, 2020" "NLnet Labs" "unbound 1.13.0"
11 .\"
22 .\" unbound-anchor.8 -- unbound anchor maintenance utility manual
33 .\"
0 .TH "unbound-checkconf" "8" "Oct 8, 2020" "NLnet Labs" "unbound 1.12.0"
0 .TH "unbound-checkconf" "8" "Dec 3, 2020" "NLnet Labs" "unbound 1.13.0"
11 .\"
22 .\" unbound-checkconf.8 -- unbound configuration checker manual
33 .\"
0 .TH "unbound-control" "8" "Oct 8, 2020" "NLnet Labs" "unbound 1.12.0"
0 .TH "unbound-control" "8" "Dec 3, 2020" "NLnet Labs" "unbound 1.13.0"
11 .\"
22 .\" unbound-control.8 -- unbound remote control manual
33 .\"
0 .TH "unbound\-host" "1" "Oct 8, 2020" "NLnet Labs" "unbound 1.12.0"
0 .TH "unbound\-host" "1" "Dec 3, 2020" "NLnet Labs" "unbound 1.13.0"
11 .\"
22 .\" unbound-host.1 -- unbound DNS lookup utility
33 .\"
0 .TH "unbound" "8" "Oct 8, 2020" "NLnet Labs" "unbound 1.12.0"
0 .TH "unbound" "8" "Dec 3, 2020" "NLnet Labs" "unbound 1.13.0"
11 .\"
22 .\" unbound.8 -- unbound manual
33 .\"
88 .\"
99 .SH "NAME"
1010 .B unbound
11 \- Unbound DNS validating resolver 1.12.0.
11 \- Unbound DNS validating resolver 1.13.0.
1212 .SH "SYNOPSIS"
1313 .B unbound
1414 .RB [ \-h ]
0 .TH "unbound.conf" "5" "Oct 8, 2020" "NLnet Labs" "unbound 1.12.0"
0 .TH "unbound.conf" "5" "Dec 3, 2020" "NLnet Labs" "unbound 1.13.0"
11 .\"
22 .\" unbound.conf.5 -- unbound.conf manual
33 .\"
273273 the ID and remote IP of packets, and unwanted packets are added to the
274274 unwanted packet counter.
275275 .TP
276 .B udp\-connect: \fI<yes or no>
277 Perform connect for UDP sockets that mitigates ICMP side channel leakage.
278 Default is yes.
279 .TP
276280 .B unknown\-server\-time\-limit: \fI<msec>
277281 The wait time in msec for waiting for an unknown server to reply.
278282 Increase this if you are behind a slow satellite link, to eg. 1128.
380384 Lower limit for dynamic retransmit timeout calculation in infrastructure
381385 cache. Default is 50 milliseconds. Increase this value if using forwarders
382386 needing more time to do recursive name resolution.
387 .TP
388 .B infra\-keep\-probing: \fI<yes or no>
389 If enabled the server keeps probing hosts that are down, in the one probe
390 at a time regime. Default is no. Hosts that are down, eg. they did
391 not respond during the one probe at a time period, are marked as down and
392 it may take \fBinfra\-host\-ttl\fR time to get probed again.
383393 .TP
384394 .B define\-tag: \fI<"list of tags">
385395 Define the tags that can be used with local\-zone and access\-control.
515525 If null or "", no file is used. Set it to the certificate bundle file,
516526 for example "/etc/pki/tls/certs/ca\-bundle.crt". These certificates are used
517527 for authenticating connections made to outside peers. For example auth\-zone
518 urls, and also DNS over TLS connections.
528 urls, and also DNS over TLS connections. It is read at start up before
529 permission drop and chroot.
519530 .TP
520531 .B ssl\-cert\-bundle: \fI<file>
521532 Alternate syntax for \fBtls\-cert\-bundle\fR.
585596 .B http\-nodelay: \fI<yes or no>
586597 Set TCP_NODELAY socket option on sockets used to provide DNS-over-HTTPS service.
587598 Ignored if the option is not available. Default is yes.
599 .TP
600 .B http\-notls\-downstream: \fI<yes or no>
601 Disable use of TLS for the downstream DNS-over-HTTP connections. Useful for
602 local back end servers. Default is no.
588603 .TP
589604 .B use\-systemd: \fI<yes or no>
590605 Enable or disable systemd socket activation.
15341549 use the fastest specified number of servers with the fast\-server\-permil
15351550 option, that turns this on or off. The default is to use the fastest 3 servers.
15361551 .TP 5
1537 .B edns\-client\-tag: \fI<IP netblock> <tag data>
1538 Include an edns-client-tag option in queries with destination address matching
1539 the configured IP netblock. This configuration option can be used multiple
1540 times. The most specific match will be used. The tag data is configured in
1541 decimal format, from 0 to 65535.
1542 .TP 5
1543 .B edns\-client\-tag\-opcode: \fI<opcode>
1544 EDNS0 option code for the edns-client-tag option, from 0 to 65535. Default is
1545 16, as assigned by IANA.
1552 .B edns\-client\-string: \fI<IP netblock> <string>
1553 Include an EDNS0 option containing configured ascii string in queries with
1554 destination address matching the configured IP netblock. This configuration
1555 option can be used multiple times. The most specific match will be used.
1556 .TP 5
1557 .B edns\-client\-string\-opcode: \fI<opcode>
1558 EDNS0 option code for the \fIedns\-client\-string\fR option, from 0 to 65535.
1559 A value from the `Reserved for Local/Experimental` range (65001-65534) should
1560 be used. Default is 65001.
15461561 .SS "Remote Control Options"
15471562 In the
15481563 .B remote\-control:
7979 return UB_INITFAIL;
8080 if(!auth_zones_apply_cfg(ctx->env->auth_zones, cfg, 1, &is_rpz))
8181 return UB_INITFAIL;
82 if(!edns_tags_apply_cfg(ctx->env->edns_tags, cfg))
82 if(!edns_strings_apply_cfg(ctx->env->edns_strings, cfg))
8383 return UB_INITFAIL;
8484 if(!slabhash_is_size(ctx->env->msg_cache, cfg->msg_cache_size,
8585 cfg->msg_cache_slabs)) {
153153 errno = ENOMEM;
154154 return NULL;
155155 }
156 ctx->env->edns_tags = edns_tags_create();
157 if(!ctx->env->edns_tags) {
156 ctx->env->edns_strings = edns_strings_create();
157 if(!ctx->env->edns_strings) {
158158 auth_zones_delete(ctx->env->auth_zones);
159159 edns_known_options_delete(ctx->env);
160160 config_delete(ctx->env->cfg);
185185 config_delete(ctx->env->cfg);
186186 modstack_desetup(&ctx->mods, ctx->env);
187187 edns_known_options_delete(ctx->env);
188 edns_tags_delete(ctx->env->edns_tags);
188 edns_strings_delete(ctx->env->edns_strings);
189189 free(ctx->env);
190190 free(ctx);
191191 errno = e;
198198 config_delete(ctx->env->cfg);
199199 modstack_desetup(&ctx->mods, ctx->env);
200200 edns_known_options_delete(ctx->env);
201 edns_tags_delete(ctx->env->edns_tags);
201 edns_strings_delete(ctx->env->edns_strings);
202202 free(ctx->env);
203203 free(ctx);
204204 errno = e;
337337 infra_delete(ctx->env->infra_cache);
338338 config_delete(ctx->env->cfg);
339339 edns_known_options_delete(ctx->env);
340 edns_tags_delete(ctx->env->edns_tags);
340 edns_strings_delete(ctx->env->edns_strings);
341341 auth_zones_delete(ctx->env->auth_zones);
342342 free(ctx->env);
343343 }
237237 ports, numports, cfg->unwanted_threshold,
238238 cfg->outgoing_tcp_mss, &libworker_alloc_cleanup, w,
239239 cfg->do_udp || cfg->udp_upstream_without_downstream, w->sslctx,
240 cfg->delay_close, cfg->tls_use_sni, NULL);
240 cfg->delay_close, cfg->tls_use_sni, NULL, cfg->udp_connect);
241241 w->env->outnet = w->back;
242242 if(!w->is_bg || w->is_bg_thread) {
243243 lock_basic_unlock(&ctx->cfglock);
5959 :param **kwargs: Dictionary that may contain parameters added in a future
6060 release. Current parameters:
6161 ``repinfo``: Reply information for a communication point (comm_reply).
62 It is None when the callback happens in the mesh states.
6362
6463 :return: True on success, False on failure.
6564
104103 :param **kwargs: Dictionary that may contain parameters added in a future
105104 release. Current parameters:
106105 ``repinfo``: Reply information for a communication point (comm_reply).
107 It is None when the callback happens in the mesh
108 states(modules).
109106
110107 :return: True on success, False on failure.
111108
153150 :param **kwargs: Dictionary that may contain parameters added in a future
154151 release. Current parameters:
155152 ``repinfo``: Reply information for a communication point (comm_reply).
156 It is None when the callback happens in the mesh
157 states(modules).
158153
159154 :return: True on success, False on failure.
160155
200195 :param **kwargs: Dictionary that may contain parameters added in a future
201196 release. Current parameters:
202197 ``repinfo``: Reply information for a communication point (comm_reply).
203 It is None when the callback happens in the mesh
204 states(modules).
205198
206199 :return: True on success, False on failure.
207200
8888 Inplace callbacks
8989 -----------------
9090
91 .. function:: inplace_cb_reply(qinfo, qstate, rep, rcode, edns, opt_list_out, region)
91 .. function:: inplace_cb_reply(qinfo, qstate, rep, rcode, edns, opt_list_out, region, \*\*kwargs)
9292
9393 Function prototype for callback functions used in
9494 `register_inplace_cb_reply`_, `register_inplace_cb_reply_cache`_,
101101 :param edns: :class:`edns_data`
102102 :param opt_list_out: :class:`edns_option`. EDNS option list to append options to.
103103 :param region: :class:`regional`
104 :param \*\*kwargs: Dictionary that may contain parameters added in a future
105 release. Current parameters:
106 ``repinfo``: :class:`comm_reply`. Reply information for a communication point.
104107
105108 .. function:: inplace_cb_query(qinfo, flags, qstate, addr, zone, region)
106109
4242 # This query returns SERVFAIL as the txt record of bogus.nlnetlabs.nl is
4343 # intentionally bogus. The reply will contain an empty EDNS option
4444 # with option code 65003.
45 # Unbound will also log the source address(es) of the client(s) that made
45 # Unbound will also log the source address of the client that made
4646 # the request.
4747 # (unbound needs to be validating for this example to work)
4848
9090 :param **kwargs: Dictionary that may contain parameters added in a future
9191 release. Current parameters:
9292 ``repinfo``: Reply information for a communication point (comm_reply).
93 It is None when the callback happens in the mesh
94 states(modules).
9593
9694 :return: True on success, False on failure.
9795
120118 :param **kwargs: Dictionary that may contain parameters added in a future
121119 release. Current parameters:
122120 ``repinfo``: Reply information for a communication point (comm_reply).
123 It is None when the callback happens in the mesh
124 states(modules).
125121
126122 :return: True on success, False on failure.
127123
172168 :param **kwargs: Dictionary that may contain parameters added in a future
173169 release. Current parameters:
174170 ``repinfo``: Reply information for a communication point (comm_reply).
175 It is None when the callback happens in the mesh
176 states(modules).
177171
178172 :return: True on success, False on failure.
179173
204198 :param **kwargs: Dictionary that may contain parameters added in a future
205199 release. Current parameters:
206200 ``repinfo``: Reply information for a communication point (comm_reply).
207 It is None when the callback happens in the mesh
208 states(modules).
209201
210202 :return: True on success, False on failure.
211203
212204 For demonstration purposes we want to reply with an empty EDNS code '65003'
213 and log the IP address(es) of the client(s).
205 and log the IP address of the client.
214206
215207 """
216208 log_info("python: called back while servfail.")
218210 b = bytearray.fromhex("")
219211 edns_opt_list_append(opt_list_out, 65003, b, region)
220212
221 # Log the client(s) IP address(es)
213 # Log the client's IP address
222214 comm_reply = kwargs['repinfo']
223215 if comm_reply:
224 # If it is not None this callback was called before the query reached
225 # the mesh states(modules). There is only one client associated with
226 # this query.
227216 addr = comm_reply.addr
228217 port = comm_reply.port
229218 addr_family = comm_reply.family
230219 log_info("python: Client IP: {}({}), port: {}"
231220 "".format(addr, addr_family, port))
232 else:
233 # If it is not None this callback was called while the query is in the
234 # mesh states(modules). In this case they may be multiple clients
235 # waiting for this query.
236 # The following code is the same as with the resip.py example.
237 rl = qstate.mesh_info.reply_list
238 while (rl):
239 if rl.query_reply:
240 q = rl.query_reply
241 log_info("python: Client IP: {}({}), port: {}"
242 "".format(q.addr, q.family, q.port))
243 rl = rl.next
244
245221
246222 return True
247223
14121412 /******************************
14131413 * Various debugging functions *
14141414 ******************************/
1415
1416 /* rename the variadic functions because python does the formatting already*/
1417 %rename (unbound_log_info) log_info;
1418 %rename (unbound_log_err) log_err;
1419 %rename (unbound_log_warn) log_warn;
1420 %rename (unbound_verbose) verbose;
1421 /* provide functions that take one string as argument, so python can cook
1422 the string */
1423 %rename (log_info) pymod_log_info;
1424 %rename (log_warn) pymod_log_warn;
1425 %rename (log_err) pymod_log_err;
1426 %rename (verbose) pymod_verbose;
1427
14151428 void verbose(enum verbosity_value level, const char* format, ...);
14161429 void log_info(const char* format, ...);
14171430 void log_err(const char* format, ...);
14201433 void log_dns_msg(const char* str, struct query_info* qinfo, struct reply_info* rep);
14211434 void log_query_info(enum verbosity_value v, const char* str, struct query_info* qinf);
14221435 void regional_log_stats(struct regional *r);
1436
1437 /* the one argument string log functions */
1438 void pymod_log_info(const char* str);
1439 void pymod_log_err(const char* str);
1440 void pymod_log_warn(const char* str);
1441 void pymod_verbose(enum verbosity_value level, const char* str);
1442 %{
1443 void pymod_log_info(const char* str) { log_info("%s", str); }
1444 void pymod_log_err(const char* str) { log_err("%s", str); }
1445 void pymod_log_warn(const char* str) { log_warn("%s", str); }
1446 void pymod_verbose(enum verbosity_value level, const char* str) {
1447 verbose(level, "%s", str); }
1448 %}
14231449
14241450 /***************************************************************************
14251451 * Free allocated memory from marked sources returning corresponding types *
913913 int ret = 1;
914914 struct ub_packed_rrset_key* redirect_rrset = NULL;
915915 struct rpz* r;
916 struct auth_zone* a;
916 struct auth_zone* a = NULL;
917917 struct ub_packed_rrset_key* data = NULL;
918918 int rpz_used = 0;
919919 int rpz_log = 0;
11081108 qstate->return_msg && qstate->return_msg->rep) {
11091109 struct reply_info* new_rep = qstate->return_msg->rep;
11101110 struct ub_packed_rrset_key* alias_rrset = NULL;
1111 struct respip_action_info actinfo = {0};
1111 struct respip_action_info actinfo = {0, 0, 0, 0, NULL, 0, NULL};
11121112 actinfo.action = respip_none;
11131113
11141114 if(!respip_rewrite_reply(&qstate->qinfo,
11691169 struct ub_packed_rrset_key* alias_rrset = NULL; /* ditto */
11701170 uint16_t tgt_rcode;
11711171 size_t i, j;
1172 struct respip_action_info actinfo = {0};
1172 struct respip_action_info actinfo = {0, 0, 0, 0, NULL, 0, NULL};
11731173 actinfo.action = respip_none;
11741174
11751175 /* If the query for the CNAME target would result in an unusual rcode,
53865386 verbose(VERB_ALGO, "auth zone %s host %s type %s transfer lookup has no answer", zname, xfr->task_transfer->lookup_target->host, (xfr->task_transfer->lookup_aaaa?"AAAA":"A"));
53875387 }
53885388 }
5389 regional_free_all(temp);
53895390 } else {
53905391 if(verbosity >= VERB_ALGO) {
53915392 char zname[255+1];
64436444 verbose(VERB_ALGO, "auth zone %s host %s type %s probe lookup has no address", zname, xfr->task_probe->lookup_target->host, (xfr->task_probe->lookup_aaaa?"AAAA":"A"));
64446445 }
64456446 }
6447 regional_free_all(temp);
64466448 } else {
64476449 if(verbosity >= VERB_ALGO) {
64486450 char zname[255+1];
243243 return NULL;
244244 }
245245 infra->host_ttl = cfg->host_ttl;
246 infra->infra_keep_probing = cfg->infra_keep_probing;
246247 infra_dp_ratelimit = cfg->ratelimit;
247248 infra->domain_rates = slabhash_create(cfg->ratelimit_slabs,
248249 INFRA_HOST_STARTSIZE, cfg->ratelimit_size,
296297 if(!infra)
297298 return infra_create(cfg);
298299 infra->host_ttl = cfg->host_ttl;
300 infra->infra_keep_probing = cfg->infra_keep_probing;
299301 infra_dp_ratelimit = cfg->ratelimit;
300302 infra_ip_ratelimit = cfg->ip_ratelimit;
301303 maxmem = cfg->infra_cache_numhosts * (sizeof(struct infra_key)+
444446 if(e && ((struct infra_data*)e->data)->ttl < timenow) {
445447 /* it expired, try to reuse existing entry */
446448 int old = ((struct infra_data*)e->data)->rtt.rto;
449 time_t tprobe = ((struct infra_data*)e->data)->probedelay;
447450 uint8_t tA = ((struct infra_data*)e->data)->timeout_A;
448451 uint8_t tAAAA = ((struct infra_data*)e->data)->timeout_AAAA;
449452 uint8_t tother = ((struct infra_data*)e->data)->timeout_other;
459462 if(old >= USEFUL_SERVER_TOP_TIMEOUT) {
460463 ((struct infra_data*)e->data)->rtt.rto
461464 = USEFUL_SERVER_TOP_TIMEOUT;
465 ((struct infra_data*)e->data)->probedelay = tprobe;
462466 ((struct infra_data*)e->data)->timeout_A = tA;
463467 ((struct infra_data*)e->data)->timeout_AAAA = tAAAA;
464468 ((struct infra_data*)e->data)->timeout_other = tother;
481485 *edns_vs = data->edns_version;
482486 *edns_lame_known = data->edns_lame_known;
483487 *to = rtt_timeout(&data->rtt);
484 if(*to >= PROBE_MAXRTO && rtt_notimeout(&data->rtt)*4 <= *to) {
488 if(*to >= PROBE_MAXRTO && (infra->infra_keep_probing ||
489 rtt_notimeout(&data->rtt)*4 <= *to)) {
485490 /* delay other queries, this is the probe query */
486491 if(!wr) {
487492 lock_rw_unlock(&e->lock);
565570 struct lruhash_entry* e = infra_lookup_nottl(infra, addr, addrlen,
566571 nm, nmlen, 1);
567572 struct infra_data* data;
568 int needtoinsert = 0;
573 int needtoinsert = 0, expired = 0;
569574 int rto = 1;
575 time_t oldprobedelay = 0;
570576 if(!e) {
571577 if(!(e = new_entry(infra, addr, addrlen, nm, nmlen, timenow)))
572578 return 0;
573579 needtoinsert = 1;
574580 } else if(((struct infra_data*)e->data)->ttl < timenow) {
581 oldprobedelay = ((struct infra_data*)e->data)->probedelay;
575582 data_entry_init(infra, e, timenow);
583 expired = 1;
576584 }
577585 /* have an entry, update the rtt */
578586 data = (struct infra_data*)e->data;
579587 if(roundtrip == -1) {
588 if(needtoinsert || expired) {
589 /* timeout on entry that has expired before the timer
590 * keep old timeout from the function caller */
591 data->rtt.rto = orig_rtt;
592 data->probedelay = oldprobedelay;
593 }
580594 rtt_lost(&data->rtt, orig_rtt);
581595 if(qtype == LDNS_RR_TYPE_A) {
582596 if(data->timeout_A < TIMEOUT_COUNT_MAX)
680694 return 0;
681695 host = (struct infra_data*)e->data;
682696 *rtt = rtt_unclamped(&host->rtt);
683 if(host->rtt.rto >= PROBE_MAXRTO && timenow < host->probedelay
697 if(host->rtt.rto >= PROBE_MAXRTO && timenow >= host->probedelay
698 && infra->infra_keep_probing) {
699 /* single probe, keep probing */
700 if(*rtt >= USEFUL_SERVER_TOP_TIMEOUT)
701 *rtt = USEFUL_SERVER_TOP_TIMEOUT-1000;
702 } else if(host->rtt.rto >= PROBE_MAXRTO && timenow < host->probedelay
684703 && rtt_notimeout(&host->rtt)*4 <= host->rtt.rto) {
685704 /* single probe for this domain, and we are not probing */
686705 /* unless the query type allows a probe to happen */
703722 /* see if this can be a re-probe of an unresponsive server */
704723 /* minus 1000 because that is outside of the RTTBAND, so
705724 * blacklisted servers stay blacklisted if this is chosen */
706 if(host->rtt.rto >= USEFUL_SERVER_TOP_TIMEOUT) {
725 if(host->rtt.rto >= USEFUL_SERVER_TOP_TIMEOUT ||
726 infra->infra_keep_probing) {
707727 lock_rw_unlock(&e->lock);
708728 *rtt = USEFUL_SERVER_TOP_TIMEOUT-1000;
709729 *lame = 0;
113113 struct slabhash* hosts;
114114 /** TTL value for host information, in seconds */
115115 int host_ttl;
116 /** the hosts that are down are kept probed for recovery */
117 int infra_keep_probing;
116118 /** hash table with query rates per name: rate_key, rate_data */
117119 struct slabhash* domain_rates;
118120 /** ratelimit settings for domains, struct domain_limit_data */
4242 # include <sys/types.h>
4343 #endif
4444 #include <sys/time.h>
45 #include <limits.h>
4546 #ifdef USE_TCP_FASTOPEN
4647 #include <netinet/tcp.h>
4748 #endif
7980
8081 /** number of queued TCP connections for listen() */
8182 #define TCP_BACKLOG 256
82
83 /** number of simultaneous requests a client can have */
84 #define TCP_MAX_REQ_SIMULTANEOUS 32
8583
8684 #ifndef THREADS_DISABLED
8785 /** lock on the counter of stream buffer memory */
532530 return -1;
533531 }
534532 }
535 # elif defined(IP_DONTFRAG)
533 # elif defined(IP_DONTFRAG) && !defined(__APPLE__)
534 /* the IP_DONTFRAG option if defined in the 11.0 OSX headers,
535 * but does not work on that version, so we exclude it */
536536 int off = 0;
537537 if (setsockopt(s, IPPROTO_IP, IP_DONTFRAG,
538538 &off, (socklen_t)sizeof(off)) < 0) {
12431243 listen_create(struct comm_base* base, struct listen_port* ports,
12441244 size_t bufsize, int tcp_accept_count, int tcp_idle_timeout,
12451245 int harden_large_queries, uint32_t http_max_streams,
1246 char* http_endpoint, struct tcl_list* tcp_conn_limit, void* sslctx,
1247 struct dt_env* dtenv, comm_point_callback_type* cb, void *cb_arg)
1246 char* http_endpoint, int http_notls, struct tcl_list* tcp_conn_limit,
1247 void* sslctx, struct dt_env* dtenv, comm_point_callback_type* cb,
1248 void *cb_arg)
12481249 {
12491250 struct listen_dnsport* front = (struct listen_dnsport*)
12501251 malloc(sizeof(struct listen_dnsport));
12941295 http_max_streams, http_endpoint,
12951296 tcp_conn_limit, bufsize, front->udp_buff,
12961297 ports->ftype, cb, cb_arg);
1297 cp->ssl = sslctx;
1298 if(http_notls && ports->ftype == listen_type_http)
1299 cp->ssl = NULL;
1300 else
1301 cp->ssl = sslctx;
12981302 if(ports->ftype == listen_type_http) {
1299 if(!sslctx) {
1300 log_warn("HTTPS port configured, but no TLS "
1303 if(!sslctx && !http_notls) {
1304 log_warn("HTTPS port configured, but no TLS "
13011305 "tls-service-key or tls-service-pem "
13021306 "set");
13031307 }
13041308 #ifndef HAVE_SSL_CTX_SET_ALPN_SELECT_CB
1305 log_warn("Unbound is not compiled with an "
1309 if(!http_notls)
1310 log_warn("Unbound is not compiled with an "
13061311 "OpenSSL version supporting ALPN "
13071312 " (OpenSSL >= 1.0.2). This is required "
13081313 "to use DNS-over-HTTPS");
14011406 resolve_ifa_name(struct ifaddrs *ifas, const char *search_ifa, char ***ip_addresses, int *ip_addresses_size)
14021407 {
14031408 struct ifaddrs *ifa;
1409 void *tmpbuf;
14041410 int last_ip_addresses_size = *ip_addresses_size;
14051411
14061412 for(ifa = ifas; ifa != NULL; ifa = ifa->ifa_next) {
14651471 }
14661472 verbose(4, "interface %s has address %s", search_ifa, addr_buf);
14671473
1468 *ip_addresses = realloc(*ip_addresses, sizeof(char *) * (*ip_addresses_size + 1));
1469 if(!*ip_addresses) {
1474 tmpbuf = realloc(*ip_addresses, sizeof(char *) * (*ip_addresses_size + 1));
1475 if(!tmpbuf) {
14701476 log_err("realloc failed: out of memory");
14711477 return 0;
1478 } else {
1479 *ip_addresses = tmpbuf;
14721480 }
14731481 (*ip_addresses)[*ip_addresses_size] = strdup(addr_buf);
14741482 if(!(*ip_addresses)[*ip_addresses_size]) {
14791487 }
14801488
14811489 if (*ip_addresses_size == last_ip_addresses_size) {
1482 *ip_addresses = realloc(*ip_addresses, sizeof(char *) * (*ip_addresses_size + 1));
1483 if(!*ip_addresses) {
1490 tmpbuf = realloc(*ip_addresses, sizeof(char *) * (*ip_addresses_size + 1));
1491 if(!tmpbuf) {
14841492 log_err("realloc failed: out of memory");
14851493 return 0;
1494 } else {
1495 *ip_addresses = tmpbuf;
14861496 }
14871497 (*ip_addresses)[*ip_addresses_size] = strdup(search_ifa);
14881498 if(!(*ip_addresses)[*ip_addresses_size]) {
18031813
18041814 if(!req->cp->tcp_is_reading)
18051815 wr = 1;
1806 if(req->num_open_req + req->num_done_req < TCP_MAX_REQ_SIMULTANEOUS &&
1807 !req->read_is_closed)
1816 if(!req->read_is_closed)
18081817 rd = 1;
18091818
18101819 if(wr) {
21762185 int ret;
21772186 nghttp2_data_provider data_prd;
21782187 char status[4];
2179 nghttp2_nv headers[2];
2188 nghttp2_nv headers[3];
21802189 struct http2_stream* h2_stream = h2_session->c->h2_stream;
21812190 size_t rlen;
2191 char rlen_str[32];
21822192
21832193 if(h2_stream->rbuffer) {
21842194 log_err("http2 submit response error: rbuffer already "
21972207 }
21982208
21992209 rlen = sldns_buffer_remaining(h2_session->c->buffer);
2210 snprintf(rlen_str, sizeof(rlen_str), "%u", (unsigned)rlen);
2211
22002212 lock_basic_lock(&http2_response_buffer_count_lock);
22012213 if(http2_response_buffer_count + rlen > http2_response_buffer_max) {
22022214 lock_basic_unlock(&http2_response_buffer_count_lock);
22272239 headers[1].valuelen = 23;
22282240 headers[1].flags = NGHTTP2_NV_FLAG_NONE;
22292241
2230 /*TODO be nice and add the content-length header
22312242 headers[2].name = (uint8_t*)"content-length";
22322243 headers[2].namelen = 14;
2233 headers[2].value =
2234 headers[2].valuelen =
2244 headers[2].value = (uint8_t*)rlen_str;
2245 headers[2].valuelen = strlen(rlen_str);
22352246 headers[2].flags = NGHTTP2_NV_FLAG_NONE;
2236 */
22372247
22382248 sldns_buffer_write(h2_stream->rbuffer,
22392249 sldns_buffer_current(h2_session->c->buffer),
22432253 data_prd.source.ptr = h2_session;
22442254 data_prd.read_callback = http2_submit_response_read_callback;
22452255 ret = nghttp2_submit_response(h2_session->session, h2_stream->stream_id,
2246 headers, 2, &data_prd);
2256 headers, 3, &data_prd);
22472257 if(ret) {
22482258 verbose(VERB_QUERY, "http2: set_stream_user_data failed, "
22492259 "error: %s", nghttp2_strerror(ret));
158158 * @param harden_large_queries: whether query size should be limited.
159159 * @param http_max_streams: maximum number of HTTP/2 streams per connection.
160160 * @param http_endpoint: HTTP endpoint to service queries on
161 * @param http_notls: no TLS for http downstream
161162 * @param tcp_conn_limit: TCP connection limit info.
162163 * @param sslctx: nonNULL if ssl context.
163164 * @param dtenv: nonNULL if dnstap enabled.
170171 listen_create(struct comm_base* base, struct listen_port* ports,
171172 size_t bufsize, int tcp_accept_count, int tcp_idle_timeout,
172173 int harden_large_queries, uint32_t http_max_streams,
173 char* http_endpoint, struct tcl_list* tcp_conn_limit, void* sslctx,
174 struct dt_env* dtenv, comm_point_callback_type* cb, void *cb_arg);
174 char* http_endpoint, int http_notls, struct tcl_list* tcp_conn_limit,
175 void* sslctx, struct dt_env* dtenv, comm_point_callback_type* cb,
176 void *cb_arg);
175177
176178 /**
177179 * delete the listening structure
156156 z->namelen = len;
157157 z->namelabs = labs;
158158 lock_rw_init(&z->lock);
159 z->region = regional_create_custom(sizeof(struct regional));
159 z->region = regional_create_nochunk(sizeof(struct regional));
160160 if(!z->region) {
161161 free(z);
162162 return NULL;
11951195 /* Copy the client's EDNS for later restore, to make sure the edns
11961196 * compare is with the correct edns options. */
11971197 struct edns_data edns_bak = r->edns;
1198 /* briefly set the replylist to null in case the
1199 * meshsendreply calls tcpreqinfo sendreply that
1200 * comm_point_drops because of size, and then the
1201 * null stops the mesh state remove and thus
1202 * reply_list modification and accounting */
1203 struct mesh_reply* rlist = m->reply_list;
11981204 /* examine security status */
11991205 if(m->s.env->need_to_validate && (!(r->qflags&BIT_CD) ||
12001206 m->s.env->cfg->ignore_cd) && rep &&
12171223 r->h2_stream->mesh_state = NULL;
12181224 }
12191225 /* send the reply */
1220 /* We don't reuse the encoded answer if either the previous or current
1221 * response has a local alias. We could compare the alias records
1222 * and still reuse the previous answer if they are the same, but that
1223 * would be complicated and error prone for the relatively minor case.
1224 * So we err on the side of safety. */
1225 if(prev && prev_buffer && prev->qflags == r->qflags &&
1226 /* We don't reuse the encoded answer if:
1227 * - either the previous or current response has a local alias. We could
1228 * compare the alias records and still reuse the previous answer if they
1229 * are the same, but that would be complicated and error prone for the
1230 * relatively minor case. So we err on the side of safety.
1231 * - there are registered callback functions for the given rcode, as these
1232 * need to be called for each reply. */
1233 if(((rcode != LDNS_RCODE_SERVFAIL &&
1234 !m->s.env->inplace_cb_lists[inplace_cb_reply]) ||
1235 (rcode == LDNS_RCODE_SERVFAIL &&
1236 !m->s.env->inplace_cb_lists[inplace_cb_reply_servfail])) &&
1237 prev && prev_buffer && prev->qflags == r->qflags &&
12261238 !prev->local_alias && !r->local_alias &&
1227 prev->edns.edns_present == r->edns.edns_present &&
1228 prev->edns.bits == r->edns.bits &&
1239 prev->edns.edns_present == r->edns.edns_present &&
1240 prev->edns.bits == r->edns.bits &&
12291241 prev->edns.udp_size == r->edns.udp_size &&
12301242 edns_opt_list_compare(prev->edns.opt_list, r->edns.opt_list)
12311243 == 0) {
12351247 sldns_buffer_write_at(r_buffer, 0, &r->qid, sizeof(uint16_t));
12361248 sldns_buffer_write_at(r_buffer, 12, r->qname,
12371249 m->s.qinfo.qname_len);
1250 m->reply_list = NULL;
12381251 comm_point_send_reply(&r->query_reply);
1252 m->reply_list = rlist;
12391253 } else if(rcode) {
12401254 m->s.qinfo.qname = r->qname;
12411255 m->s.qinfo.local_alias = r->local_alias;
12421256 if(rcode == LDNS_RCODE_SERVFAIL) {
12431257 if(!inplace_cb_reply_servfail_call(m->s.env, &m->s.qinfo, &m->s,
1244 rep, rcode, &r->edns, NULL, m->s.region))
1258 rep, rcode, &r->edns, &r->query_reply, m->s.region))
12451259 r->edns.opt_list = NULL;
12461260 } else {
12471261 if(!inplace_cb_reply_call(m->s.env, &m->s.qinfo, &m->s, rep, rcode,
1248 &r->edns, NULL, m->s.region))
1262 &r->edns, &r->query_reply, m->s.region))
12491263 r->edns.opt_list = NULL;
12501264 }
12511265 error_encode(r_buffer, rcode, &m->s.qinfo, r->qid,
12521266 r->qflags, &r->edns);
1267 m->reply_list = NULL;
12531268 comm_point_send_reply(&r->query_reply);
1269 m->reply_list = rlist;
12541270 } else {
12551271 size_t udp_size = r->edns.udp_size;
12561272 r->edns.edns_version = EDNS_ADVERTISED_VERSION;
12601276 m->s.qinfo.qname = r->qname;
12611277 m->s.qinfo.local_alias = r->local_alias;
12621278 if(!inplace_cb_reply_call(m->s.env, &m->s.qinfo, &m->s, rep,
1263 LDNS_RCODE_NOERROR, &r->edns, NULL, m->s.region) ||
1279 LDNS_RCODE_NOERROR, &r->edns, &r->query_reply, m->s.region) ||
12641280 !apply_edns_options(&r->edns, &edns_bak,
12651281 m->s.env->cfg, r->query_reply.c,
12661282 m->s.region) ||
12701286 secure))
12711287 {
12721288 if(!inplace_cb_reply_servfail_call(m->s.env, &m->s.qinfo, &m->s,
1273 rep, LDNS_RCODE_SERVFAIL, &r->edns, NULL, m->s.region))
1289 rep, LDNS_RCODE_SERVFAIL, &r->edns, &r->query_reply, m->s.region))
12741290 r->edns.opt_list = NULL;
12751291 error_encode(r_buffer, LDNS_RCODE_SERVFAIL,
12761292 &m->s.qinfo, r->qid, r->qflags, &r->edns);
12771293 }
12781294 r->edns = edns_bak;
1295 m->reply_list = NULL;
12791296 comm_point_send_reply(&r->query_reply);
1297 m->reply_list = rlist;
12801298 }
12811299 /* account */
12821300 log_assert(m->s.env->mesh->num_reply_addrs > 0);
13641382 mstate->reply_list = reply_list;
13651383 } else {
13661384 struct sldns_buffer* r_buffer = r->query_reply.c->buffer;
1367 struct mesh_reply* rlist = mstate->reply_list;
13681385 if(r->query_reply.c->tcp_req_info) {
13691386 r_buffer = r->query_reply.c->tcp_req_info->spool_buffer;
13701387 prev_buffer = NULL;
13711388 }
1372 /* briefly set the replylist to null in case the
1373 * meshsendreply calls tcpreqinfo sendreply that
1374 * comm_point_drops because of size, and then the
1375 * null stops the mesh state remove and thus
1376 * reply_list modification and accounting */
1377 mstate->reply_list = NULL;
13781389 mesh_send_reply(mstate, mstate->s.return_rcode, rep,
13791390 r, r_buffer, prev, prev_buffer);
1380 mstate->reply_list = rlist;
13811391 if(r->query_reply.c->tcp_req_info) {
13821392 tcp_req_info_remove_mesh_state(r->query_reply.c->tcp_req_info, mstate);
13831393 r_buffer = NULL;
18931903 {
18941904 struct mesh_state* mstate = (struct mesh_state*) arg;
18951905 struct module_qstate* qstate = &mstate->s;
1896 struct mesh_reply* r, *rlist;
1906 struct mesh_reply* r;
18971907 struct mesh_area* mesh = qstate->env->mesh;
18981908 struct dns_msg* msg;
18991909 struct mesh_cb* c;
19982008 r_buffer = r->query_reply.c->buffer;
19992009 if(r->query_reply.c->tcp_req_info)
20002010 r_buffer = r->query_reply.c->tcp_req_info->spool_buffer;
2001 /* briefly set the replylist to null in case the meshsendreply
2002 * calls tcpreqinfo sendreply that comm_point_drops because
2003 * of size, and then the null stops the mesh state remove and
2004 * thus reply_list modification and accounting */
2005 rlist = mstate->reply_list;
2006 mstate->reply_list = NULL;
20072011 mesh_send_reply(mstate, LDNS_RCODE_NOERROR, msg->rep,
20082012 r, r_buffer, prev, prev_buffer);
2009 mstate->reply_list = rlist;
20102013 if(r->query_reply.c->tcp_req_info)
20112014 tcp_req_info_remove_mesh_state(r->query_reply.c->tcp_req_info, mstate);
20122015 prev = r;
131131 return sockaddr_cmp(&q1->addr, q1->addrlen, &q2->addr, q2->addrlen);
132132 }
133133
134 /** compare if the reuse element has the same address, port and same ssl-is
135 * used-for-it characteristic */
136 static int
137 reuse_cmp_addrportssl(const void* key1, const void* key2)
138 {
139 struct reuse_tcp* r1 = (struct reuse_tcp*)key1;
140 struct reuse_tcp* r2 = (struct reuse_tcp*)key2;
141 int r;
142 /* compare address and port */
143 r = sockaddr_cmp(&r1->addr, r1->addrlen, &r2->addr, r2->addrlen);
144 if(r != 0)
145 return r;
146
147 /* compare if SSL-enabled */
148 if(r1->is_ssl && !r2->is_ssl)
149 return 1;
150 if(!r1->is_ssl && r2->is_ssl)
151 return -1;
152 return 0;
153 }
154
155 int
156 reuse_cmp(const void* key1, const void* key2)
157 {
158 int r;
159 r = reuse_cmp_addrportssl(key1, key2);
160 if(r != 0)
161 return r;
162
163 /* compare ptr value */
164 if(key1 < key2) return -1;
165 if(key1 > key2) return 1;
166 return 0;
167 }
168
169 int reuse_id_cmp(const void* key1, const void* key2)
170 {
171 struct waiting_tcp* w1 = (struct waiting_tcp*)key1;
172 struct waiting_tcp* w2 = (struct waiting_tcp*)key2;
173 if(w1->id < w2->id)
174 return -1;
175 if(w1->id > w2->id)
176 return 1;
177 return 0;
178 }
179
134180 /** delete waiting_tcp entry. Does not unlink from waiting list.
135181 * @param w: to delete.
136182 */
279325 return 1;
280326 }
281327
328 /** log reuse item addr and ptr with message */
329 static void
330 log_reuse_tcp(enum verbosity_value v, const char* msg, struct reuse_tcp* reuse)
331 {
332 uint16_t port;
333 char addrbuf[128];
334 if(verbosity < v) return;
335 addr_to_str(&reuse->addr, reuse->addrlen, addrbuf, sizeof(addrbuf));
336 port = ntohs(((struct sockaddr_in*)&reuse->addr)->sin_port);
337 verbose(v, "%s %s#%u fd %d", msg, addrbuf, (unsigned)port,
338 reuse->pending->c->fd);
339 }
340
341 /** pop the first element from the writewait list */
342 static struct waiting_tcp* reuse_write_wait_pop(struct reuse_tcp* reuse)
343 {
344 struct waiting_tcp* w = reuse->write_wait_first;
345 if(!w)
346 return NULL;
347 log_assert(w->write_wait_queued);
348 log_assert(!w->write_wait_prev);
349 reuse->write_wait_first = w->write_wait_next;
350 if(w->write_wait_next)
351 w->write_wait_next->write_wait_prev = NULL;
352 else reuse->write_wait_last = NULL;
353 w->write_wait_queued = 0;
354 return w;
355 }
356
357 /** remove the element from the writewait list */
358 static void reuse_write_wait_remove(struct reuse_tcp* reuse,
359 struct waiting_tcp* w)
360 {
361 if(!w)
362 return;
363 if(!w->write_wait_queued)
364 return;
365 if(w->write_wait_prev)
366 w->write_wait_prev->write_wait_next = w->write_wait_next;
367 else reuse->write_wait_first = w->write_wait_next;
368 if(w->write_wait_next)
369 w->write_wait_next->write_wait_prev = w->write_wait_prev;
370 else reuse->write_wait_last = w->write_wait_prev;
371 w->write_wait_queued = 0;
372 }
373
374 /** push the element after the last on the writewait list */
375 static void reuse_write_wait_push_back(struct reuse_tcp* reuse,
376 struct waiting_tcp* w)
377 {
378 if(!w) return;
379 log_assert(!w->write_wait_queued);
380 if(reuse->write_wait_last) {
381 reuse->write_wait_last->write_wait_next = w;
382 w->write_wait_prev = reuse->write_wait_last;
383 } else {
384 reuse->write_wait_first = w;
385 }
386 reuse->write_wait_last = w;
387 w->write_wait_queued = 1;
388 }
389
390 /** insert element in tree by id */
391 void
392 reuse_tree_by_id_insert(struct reuse_tcp* reuse, struct waiting_tcp* w)
393 {
394 log_assert(w->id_node.key == NULL);
395 w->id_node.key = w;
396 rbtree_insert(&reuse->tree_by_id, &w->id_node);
397 }
398
399 /** find element in tree by id */
400 struct waiting_tcp*
401 reuse_tcp_by_id_find(struct reuse_tcp* reuse, uint16_t id)
402 {
403 struct waiting_tcp key_w;
404 rbnode_type* n;
405 memset(&key_w, 0, sizeof(key_w));
406 key_w.id_node.key = &key_w;
407 key_w.id = id;
408 n = rbtree_search(&reuse->tree_by_id, &key_w);
409 if(!n) return NULL;
410 return (struct waiting_tcp*)n->key;
411 }
412
413 /** return ID value of rbnode in tree_by_id */
414 static uint16_t
415 tree_by_id_get_id(rbnode_type* node)
416 {
417 struct waiting_tcp* w = (struct waiting_tcp*)node->key;
418 return w->id;
419 }
420
421 /** insert into reuse tcp tree and LRU, false on failure (duplicate) */
422 static int
423 reuse_tcp_insert(struct outside_network* outnet, struct pending_tcp* pend_tcp)
424 {
425 log_reuse_tcp(VERB_CLIENT, "reuse_tcp_insert", &pend_tcp->reuse);
426 if(pend_tcp->reuse.item_on_lru_list)
427 return 1;
428 pend_tcp->reuse.node.key = &pend_tcp->reuse;
429 pend_tcp->reuse.pending = pend_tcp;
430 if(!rbtree_insert(&outnet->tcp_reuse, &pend_tcp->reuse.node)) {
431 /* this is a duplicate connection, close this one */
432 verbose(VERB_CLIENT, "reuse_tcp_insert: duplicate connection");
433 pend_tcp->reuse.node.key = NULL;
434 return 0;
435 }
436 /* insert into LRU, first is newest */
437 pend_tcp->reuse.lru_prev = NULL;
438 if(outnet->tcp_reuse_first) {
439 pend_tcp->reuse.lru_next = outnet->tcp_reuse_first;
440 outnet->tcp_reuse_first->lru_prev = &pend_tcp->reuse;
441 } else {
442 pend_tcp->reuse.lru_next = NULL;
443 outnet->tcp_reuse_last = &pend_tcp->reuse;
444 }
445 outnet->tcp_reuse_first = &pend_tcp->reuse;
446 pend_tcp->reuse.item_on_lru_list = 1;
447 return 1;
448 }
449
450 /** find reuse tcp stream to destination for query, or NULL if none */
451 static struct reuse_tcp*
452 reuse_tcp_find(struct outside_network* outnet, struct sockaddr_storage* addr,
453 socklen_t addrlen, int use_ssl)
454 {
455 struct waiting_tcp key_w;
456 struct pending_tcp key_p;
457 struct comm_point c;
458 rbnode_type* result = NULL, *prev;
459 verbose(VERB_CLIENT, "reuse_tcp_find");
460 memset(&key_w, 0, sizeof(key_w));
461 memset(&key_p, 0, sizeof(key_p));
462 memset(&c, 0, sizeof(c));
463 key_p.query = &key_w;
464 key_p.c = &c;
465 key_p.reuse.pending = &key_p;
466 key_p.reuse.node.key = &key_p.reuse;
467 if(use_ssl)
468 key_p.reuse.is_ssl = 1;
469 if(addrlen > (socklen_t)sizeof(key_p.reuse.addr))
470 return NULL;
471 memmove(&key_p.reuse.addr, addr, addrlen);
472 key_p.reuse.addrlen = addrlen;
473
474 verbose(VERB_CLIENT, "reuse_tcp_find: num reuse streams %u",
475 (unsigned)outnet->tcp_reuse.count);
476 if(outnet->tcp_reuse.root == NULL ||
477 outnet->tcp_reuse.root == RBTREE_NULL)
478 return NULL;
479 if(rbtree_find_less_equal(&outnet->tcp_reuse, &key_p.reuse.node,
480 &result)) {
481 /* exact match */
482 /* but the key is on stack, and ptr is compared, impossible */
483 log_assert(&key_p.reuse != (struct reuse_tcp*)result);
484 log_assert(&key_p != ((struct reuse_tcp*)result)->pending);
485 }
486 /* not found, return null */
487 if(!result || result == RBTREE_NULL)
488 return NULL;
489 verbose(VERB_CLIENT, "reuse_tcp_find check inexact match");
490 /* inexact match, find one of possibly several connections to the
491 * same destination address, with the correct port, ssl, and
492 * also less than max number of open queries, or else, fail to open
493 * a new one */
494 /* rewind to start of sequence of same address,port,ssl */
495 prev = rbtree_previous(result);
496 while(prev && prev != RBTREE_NULL &&
497 reuse_cmp_addrportssl(prev->key, &key_p.reuse) == 0) {
498 result = prev;
499 prev = rbtree_previous(result);
500 }
501
502 /* loop to find first one that has correct characteristics */
503 while(result && result != RBTREE_NULL &&
504 reuse_cmp_addrportssl(result->key, &key_p.reuse) == 0) {
505 if(((struct reuse_tcp*)result)->tree_by_id.count <
506 MAX_REUSE_TCP_QUERIES) {
507 /* same address, port, ssl-yes-or-no, and has
508 * space for another query */
509 return (struct reuse_tcp*)result;
510 }
511 result = rbtree_next(result);
512 }
513 return NULL;
514 }
515
516 /** use the buffer to setup writing the query */
517 static void
518 outnet_tcp_take_query_setup(int s, struct pending_tcp* pend,
519 struct waiting_tcp* w)
520 {
521 struct timeval tv;
522 verbose(VERB_CLIENT, "outnet_tcp_take_query_setup: setup packet to write "
523 "len %d timeout %d msec",
524 (int)w->pkt_len, w->timeout);
525 pend->c->tcp_write_pkt = w->pkt;
526 pend->c->tcp_write_pkt_len = w->pkt_len;
527 pend->c->tcp_write_and_read = 1;
528 pend->c->tcp_write_byte_count = 0;
529 pend->c->tcp_is_reading = 0;
530 comm_point_start_listening(pend->c, s, -1);
531 /* set timer on the waiting_tcp entry, this is the write timeout
532 * for the written packet. The timer on pend->c is the timer
533 * for when there is no written packet and we have readtimeouts */
534 #ifndef S_SPLINT_S
535 tv.tv_sec = w->timeout/1000;
536 tv.tv_usec = (w->timeout%1000)*1000;
537 #endif
538 /* if the waiting_tcp was previously waiting for a buffer in the
539 * outside_network.tcpwaitlist, then the timer is reset now that
540 * we start writing it */
541 comm_timer_set(w->timer, &tv);
542 }
543
282544 /** use next free buffer to service a tcp query */
283545 static int
284 outnet_tcp_take_into_use(struct waiting_tcp* w, uint8_t* pkt, size_t pkt_len)
546 outnet_tcp_take_into_use(struct waiting_tcp* w)
285547 {
286548 struct pending_tcp* pend = w->outnet->tcp_free;
287549 int s;
288550 log_assert(pend);
289 log_assert(pkt);
551 log_assert(w->pkt);
552 log_assert(w->pkt_len > 0);
290553 log_assert(w->addrlen > 0);
554 pend->c->tcp_do_toggle_rw = 0;
555 pend->c->tcp_do_close = 0;
291556 /* open socket */
292557 s = outnet_get_tcp_fd(&w->addr, w->addrlen, w->outnet->tcp_mss, w->outnet->ip_dscp);
293558
382647 return 0;
383648 }
384649 }
385 w->pkt = NULL;
386650 w->next_waiting = (void*)pend;
387 pend->id = LDNS_ID_WIRE(pkt);
388651 w->outnet->num_tcp_outgoing++;
389652 w->outnet->tcp_free = pend->next_free;
390653 pend->next_free = NULL;
391654 pend->query = w;
655 pend->reuse.outnet = w->outnet;
392656 pend->c->repinfo.addrlen = w->addrlen;
657 pend->c->tcp_more_read_again = &pend->reuse.cp_more_read_again;
658 pend->c->tcp_more_write_again = &pend->reuse.cp_more_write_again;
659 pend->reuse.cp_more_read_again = 0;
660 pend->reuse.cp_more_write_again = 0;
393661 memcpy(&pend->c->repinfo.addr, &w->addr, w->addrlen);
394 sldns_buffer_clear(pend->c->buffer);
395 sldns_buffer_write(pend->c->buffer, pkt, pkt_len);
396 sldns_buffer_flip(pend->c->buffer);
397 pend->c->tcp_is_reading = 0;
398 pend->c->tcp_byte_count = 0;
399 comm_point_start_listening(pend->c, s, -1);
662 pend->reuse.pending = pend;
663 if(pend->c->ssl)
664 pend->reuse.is_ssl = 1;
665 else pend->reuse.is_ssl = 0;
666 /* insert in reuse by address tree if not already inserted there */
667 (void)reuse_tcp_insert(w->outnet, pend);
668 reuse_tree_by_id_insert(&pend->reuse, w);
669 outnet_tcp_take_query_setup(s, pend, w);
400670 return 1;
671 }
672
673 /** Touch the lru of a reuse_tcp element, it is in use.
674 * This moves it to the front of the list, where it is not likely to
675 * be closed. Items at the back of the list are closed to make space. */
676 static void
677 reuse_tcp_lru_touch(struct outside_network* outnet, struct reuse_tcp* reuse)
678 {
679 if(!reuse->item_on_lru_list)
680 return; /* not on the list, no lru to modify */
681 if(!reuse->lru_prev)
682 return; /* already first in the list */
683 /* remove at current position */
684 /* since it is not first, there is a previous element */
685 reuse->lru_prev->lru_next = reuse->lru_next;
686 if(reuse->lru_next)
687 reuse->lru_next->lru_prev = reuse->lru_prev;
688 else outnet->tcp_reuse_last = reuse->lru_prev;
689 /* insert at the front */
690 reuse->lru_prev = NULL;
691 reuse->lru_next = outnet->tcp_reuse_first;
692 /* since it is not first, it is not the only element and
693 * lru_next is thus not NULL and thus reuse is now not the last in
694 * the list, so outnet->tcp_reuse_last does not need to be modified */
695 outnet->tcp_reuse_first = reuse;
696 }
697
698 /** call callback on waiting_tcp, if not NULL */
699 static void
700 waiting_tcp_callback(struct waiting_tcp* w, struct comm_point* c, int error,
701 struct comm_reply* reply_info)
702 {
703 if(w->cb) {
704 fptr_ok(fptr_whitelist_pending_tcp(w->cb));
705 (void)(*w->cb)(c, w->cb_arg, error, reply_info);
706 }
401707 }
402708
403709 /** see if buffers can be used to service TCP queries */
407713 struct waiting_tcp* w;
408714 while(outnet->tcp_free && outnet->tcp_wait_first
409715 && !outnet->want_to_quit) {
716 struct reuse_tcp* reuse = NULL;
410717 w = outnet->tcp_wait_first;
411718 outnet->tcp_wait_first = w->next_waiting;
412719 if(outnet->tcp_wait_last == w)
413720 outnet->tcp_wait_last = NULL;
414 if(!outnet_tcp_take_into_use(w, w->pkt, w->pkt_len)) {
415 comm_point_callback_type* cb = w->cb;
416 void* cb_arg = w->cb_arg;
417 waiting_tcp_delete(w);
418 fptr_ok(fptr_whitelist_pending_tcp(cb));
419 (void)(*cb)(NULL, cb_arg, NETEVENT_CLOSED, NULL);
420 }
421 }
721 w->on_tcp_waiting_list = 0;
722 reuse = reuse_tcp_find(outnet, &w->addr, w->addrlen,
723 w->ssl_upstream);
724 if(reuse) {
725 log_reuse_tcp(VERB_CLIENT, "use free buffer for waiting tcp: "
726 "found reuse", reuse);
727 reuse_tcp_lru_touch(outnet, reuse);
728 comm_timer_disable(w->timer);
729 w->next_waiting = (void*)reuse->pending;
730 reuse_tree_by_id_insert(reuse, w);
731 if(reuse->pending->query) {
732 /* on the write wait list */
733 reuse_write_wait_push_back(reuse, w);
734 } else {
735 /* write straight away */
736 /* stop the timer on read of the fd */
737 comm_point_stop_listening(reuse->pending->c);
738 reuse->pending->query = w;
739 outnet_tcp_take_query_setup(
740 reuse->pending->c->fd, reuse->pending,
741 w);
742 }
743 } else {
744 struct pending_tcp* pend = w->outnet->tcp_free;
745 rbtree_init(&pend->reuse.tree_by_id, reuse_id_cmp);
746 pend->reuse.pending = pend;
747 memcpy(&pend->reuse.addr, &w->addr, w->addrlen);
748 pend->reuse.addrlen = w->addrlen;
749 if(!outnet_tcp_take_into_use(w)) {
750 waiting_tcp_callback(w, NULL, NETEVENT_CLOSED,
751 NULL);
752 waiting_tcp_delete(w);
753 }
754 }
755 }
756 }
757
758 /** add waiting_tcp element to the outnet tcp waiting list */
759 static void
760 outnet_add_tcp_waiting(struct outside_network* outnet, struct waiting_tcp* w)
761 {
762 struct timeval tv;
763 if(w->on_tcp_waiting_list)
764 return;
765 w->next_waiting = NULL;
766 if(outnet->tcp_wait_last)
767 outnet->tcp_wait_last->next_waiting = w;
768 else outnet->tcp_wait_first = w;
769 outnet->tcp_wait_last = w;
770 w->on_tcp_waiting_list = 1;
771 #ifndef S_SPLINT_S
772 tv.tv_sec = w->timeout/1000;
773 tv.tv_usec = (w->timeout%1000)*1000;
774 #endif
775 comm_timer_set(w->timer, &tv);
776 }
777
778 /** delete element from tree by id */
779 static void
780 reuse_tree_by_id_delete(struct reuse_tcp* reuse, struct waiting_tcp* w)
781 {
782 log_assert(w->id_node.key != NULL);
783 rbtree_delete(&reuse->tree_by_id, w);
784 w->id_node.key = NULL;
785 }
786
787 /** move writewait list to go for another connection. */
788 static void
789 reuse_move_writewait_away(struct outside_network* outnet,
790 struct pending_tcp* pend)
791 {
792 /* the writewait list has not been written yet, so if the
793 * stream was closed, they have not actually been failed, only
794 * the queries written. Other queries can get written to another
795 * stream. For upstreams that do not support multiple queries
796 * and answers, the stream can get closed, and then the queries
797 * can get written on a new socket */
798 struct waiting_tcp* w;
799 if(pend->query && pend->query->error_count == 0 &&
800 pend->c->tcp_write_pkt == pend->query->pkt &&
801 pend->c->tcp_write_pkt_len == pend->query->pkt_len) {
802 /* since the current query is not written, it can also
803 * move to a free buffer */
804 if(verbosity >= VERB_CLIENT && pend->query->pkt_len > 12+2+2 &&
805 LDNS_QDCOUNT(pend->query->pkt) > 0 &&
806 dname_valid(pend->query->pkt+12, pend->query->pkt_len-12)) {
807 char buf[LDNS_MAX_DOMAINLEN+1];
808 dname_str(pend->query->pkt+12, buf);
809 verbose(VERB_CLIENT, "reuse_move_writewait_away current %s %d bytes were written",
810 buf, (int)pend->c->tcp_write_byte_count);
811 }
812 pend->c->tcp_write_pkt = NULL;
813 pend->c->tcp_write_pkt_len = 0;
814 pend->c->tcp_write_and_read = 0;
815 pend->reuse.cp_more_read_again = 0;
816 pend->reuse.cp_more_write_again = 0;
817 pend->c->tcp_is_reading = 1;
818 w = pend->query;
819 pend->query = NULL;
820 /* increase error count, so that if the next socket fails too
821 * the server selection is run again with this query failed
822 * and it can select a different server (if possible), or
823 * fail the query */
824 w->error_count ++;
825 reuse_tree_by_id_delete(&pend->reuse, w);
826 outnet_add_tcp_waiting(outnet, w);
827 }
828 while((w = reuse_write_wait_pop(&pend->reuse)) != NULL) {
829 if(verbosity >= VERB_CLIENT && w->pkt_len > 12+2+2 &&
830 LDNS_QDCOUNT(w->pkt) > 0 &&
831 dname_valid(w->pkt+12, w->pkt_len-12)) {
832 char buf[LDNS_MAX_DOMAINLEN+1];
833 dname_str(w->pkt+12, buf);
834 verbose(VERB_CLIENT, "reuse_move_writewait_away item %s", buf);
835 }
836 reuse_tree_by_id_delete(&pend->reuse, w);
837 outnet_add_tcp_waiting(outnet, w);
838 }
839 }
840
841 /** remove reused element from tree and lru list */
842 static void
843 reuse_tcp_remove_tree_list(struct outside_network* outnet,
844 struct reuse_tcp* reuse)
845 {
846 verbose(VERB_CLIENT, "reuse_tcp_remove_tree_list");
847 if(reuse->node.key) {
848 /* delete it from reuse tree */
849 (void)rbtree_delete(&outnet->tcp_reuse, &reuse->node);
850 reuse->node.key = NULL;
851 }
852 /* delete from reuse list */
853 if(reuse->item_on_lru_list) {
854 if(reuse->lru_prev) {
855 /* assert that members of the lru list are waiting
856 * and thus have a pending pointer to the struct */
857 log_assert(reuse->lru_prev->pending);
858 reuse->lru_prev->lru_next = reuse->lru_next;
859 } else {
860 log_assert(!reuse->lru_next || reuse->lru_next->pending);
861 outnet->tcp_reuse_first = reuse->lru_next;
862 }
863 if(reuse->lru_next) {
864 /* assert that members of the lru list are waiting
865 * and thus have a pending pointer to the struct */
866 log_assert(reuse->lru_next->pending);
867 reuse->lru_next->lru_prev = reuse->lru_prev;
868 } else {
869 log_assert(!reuse->lru_prev || reuse->lru_prev->pending);
870 outnet->tcp_reuse_last = reuse->lru_prev;
871 }
872 reuse->item_on_lru_list = 0;
873 }
874 }
875
876 /** helper function that deletes an element from the tree of readwait
877 * elements in tcp reuse structure */
878 static void reuse_del_readwait_elem(rbnode_type* node, void* ATTR_UNUSED(arg))
879 {
880 struct waiting_tcp* w = (struct waiting_tcp*)node->key;
881 waiting_tcp_delete(w);
882 }
883
884 /** delete readwait waiting_tcp elements, deletes the elements in the list */
885 void reuse_del_readwait(rbtree_type* tree_by_id)
886 {
887 if(tree_by_id->root == NULL ||
888 tree_by_id->root == RBTREE_NULL)
889 return;
890 traverse_postorder(tree_by_id, &reuse_del_readwait_elem, NULL);
891 rbtree_init(tree_by_id, reuse_id_cmp);
422892 }
423893
424894 /** decommission a tcp buffer, closes commpoint and frees waiting_tcp entry */
426896 decommission_pending_tcp(struct outside_network* outnet,
427897 struct pending_tcp* pend)
428898 {
899 verbose(VERB_CLIENT, "decommission_pending_tcp");
900 pend->next_free = outnet->tcp_free;
901 outnet->tcp_free = pend;
902 if(pend->reuse.node.key) {
903 /* needs unlink from the reuse tree to get deleted */
904 reuse_tcp_remove_tree_list(outnet, &pend->reuse);
905 }
906 /* free SSL structure after remove from outnet tcp reuse tree,
907 * because the c->ssl null or not is used for sorting in the tree */
429908 if(pend->c->ssl) {
430909 #ifdef HAVE_SSL
431910 SSL_shutdown(pend->c->ssl);
434913 #endif
435914 }
436915 comm_point_close(pend->c);
437 pend->next_free = outnet->tcp_free;
438 outnet->tcp_free = pend;
439 waiting_tcp_delete(pend->query);
916 pend->reuse.cp_more_read_again = 0;
917 pend->reuse.cp_more_write_again = 0;
918 /* unlink the query and writewait list, it is part of the tree
919 * nodes and is deleted */
440920 pend->query = NULL;
441 use_free_buffer(outnet);
921 pend->reuse.write_wait_first = NULL;
922 pend->reuse.write_wait_last = NULL;
923 reuse_del_readwait(&pend->reuse.tree_by_id);
924 }
925
926 /** perform failure callbacks for waiting queries in reuse read rbtree */
927 static void reuse_cb_readwait_for_failure(rbtree_type* tree_by_id, int err)
928 {
929 rbnode_type* node;
930 if(tree_by_id->root == NULL ||
931 tree_by_id->root == RBTREE_NULL)
932 return;
933 node = rbtree_first(tree_by_id);
934 while(node && node != RBTREE_NULL) {
935 struct waiting_tcp* w = (struct waiting_tcp*)node->key;
936 waiting_tcp_callback(w, NULL, err, NULL);
937 node = rbtree_next(node);
938 }
939 }
940
941 /** perform callbacks for failure and also decommission pending tcp.
942 * the callbacks remove references in sq->pending to the waiting_tcp
943 * members of the tree_by_id in the pending tcp. The pending_tcp is
944 * removed before the callbacks, so that the callbacks do not modify
945 * the pending_tcp due to its reference in the outside_network reuse tree */
946 static void reuse_cb_and_decommission(struct outside_network* outnet,
947 struct pending_tcp* pend, int error)
948 {
949 rbtree_type store;
950 store = pend->reuse.tree_by_id;
951 pend->query = NULL;
952 rbtree_init(&pend->reuse.tree_by_id, reuse_id_cmp);
953 pend->reuse.write_wait_first = NULL;
954 pend->reuse.write_wait_last = NULL;
955 decommission_pending_tcp(outnet, pend);
956 reuse_cb_readwait_for_failure(&store, error);
957 reuse_del_readwait(&store);
958 }
959
960 /** set timeout on tcp fd and setup read event to catch incoming dns msgs */
961 static void
962 reuse_tcp_setup_timeout(struct pending_tcp* pend_tcp)
963 {
964 log_reuse_tcp(VERB_CLIENT, "reuse_tcp_setup_timeout", &pend_tcp->reuse);
965 comm_point_start_listening(pend_tcp->c, -1, REUSE_TIMEOUT);
966 }
967
968 /** set timeout on tcp fd and setup read event to catch incoming dns msgs */
969 static void
970 reuse_tcp_setup_read_and_timeout(struct pending_tcp* pend_tcp)
971 {
972 log_reuse_tcp(VERB_CLIENT, "reuse_tcp_setup_readtimeout", &pend_tcp->reuse);
973 sldns_buffer_clear(pend_tcp->c->buffer);
974 pend_tcp->c->tcp_is_reading = 1;
975 pend_tcp->c->tcp_byte_count = 0;
976 comm_point_stop_listening(pend_tcp->c);
977 comm_point_start_listening(pend_tcp->c, -1, REUSE_TIMEOUT);
442978 }
443979
444980 int
446982 struct comm_reply *reply_info)
447983 {
448984 struct pending_tcp* pend = (struct pending_tcp*)arg;
449 struct outside_network* outnet = pend->query->outnet;
985 struct outside_network* outnet = pend->reuse.outnet;
986 struct waiting_tcp* w = NULL;
450987 verbose(VERB_ALGO, "outnettcp cb");
451 if(error != NETEVENT_NOERROR) {
988 if(error == NETEVENT_TIMEOUT) {
989 if(pend->c->tcp_write_and_read) {
990 verbose(VERB_QUERY, "outnettcp got tcp timeout "
991 "for read, ignored because write underway");
992 /* if we are writing, ignore readtimer, wait for write timer
993 * or write is done */
994 return 0;
995 } else {
996 verbose(VERB_QUERY, "outnettcp got tcp timeout %s",
997 (pend->reuse.tree_by_id.count?"for reading pkt":
998 "for keepalive for reuse"));
999 }
1000 /* must be timeout for reading or keepalive reuse,
1001 * close it. */
1002 reuse_tcp_remove_tree_list(outnet, &pend->reuse);
1003 } else if(error == NETEVENT_PKT_WRITTEN) {
1004 /* the packet we want to write has been written. */
1005 verbose(VERB_ALGO, "outnet tcp pkt was written event");
1006 log_assert(c == pend->c);
1007 log_assert(pend->query->pkt == pend->c->tcp_write_pkt);
1008 log_assert(pend->query->pkt_len == pend->c->tcp_write_pkt_len);
1009 pend->c->tcp_write_pkt = NULL;
1010 pend->c->tcp_write_pkt_len = 0;
1011 /* the pend.query is already in tree_by_id */
1012 log_assert(pend->query->id_node.key);
1013 pend->query = NULL;
1014 /* setup to write next packet or setup read timeout */
1015 if(pend->reuse.write_wait_first) {
1016 verbose(VERB_ALGO, "outnet tcp setup next pkt");
1017 /* we can write it straight away perhaps, set flag
1018 * because this callback called after a tcp write
1019 * succeeded and likely more buffer space is available
1020 * and we can write some more. */
1021 pend->reuse.cp_more_write_again = 1;
1022 pend->query = reuse_write_wait_pop(&pend->reuse);
1023 comm_point_stop_listening(pend->c);
1024 outnet_tcp_take_query_setup(pend->c->fd, pend,
1025 pend->query);
1026 } else {
1027 verbose(VERB_ALGO, "outnet tcp writes done, wait");
1028 pend->c->tcp_write_and_read = 0;
1029 pend->reuse.cp_more_read_again = 0;
1030 pend->reuse.cp_more_write_again = 0;
1031 pend->c->tcp_is_reading = 1;
1032 comm_point_stop_listening(pend->c);
1033 reuse_tcp_setup_timeout(pend);
1034 }
1035 return 0;
1036 } else if(error != NETEVENT_NOERROR) {
4521037 verbose(VERB_QUERY, "outnettcp got tcp error %d", error);
1038 reuse_move_writewait_away(outnet, pend);
4531039 /* pass error below and exit */
4541040 } else {
4551041 /* check ID */
456 if(sldns_buffer_limit(c->buffer) < sizeof(uint16_t) ||
457 LDNS_ID_WIRE(sldns_buffer_begin(c->buffer))!=pend->id) {
1042 if(sldns_buffer_limit(c->buffer) < sizeof(uint16_t)) {
4581043 log_addr(VERB_QUERY,
459 "outnettcp: bad ID in reply, from:",
460 &pend->query->addr, pend->query->addrlen);
1044 "outnettcp: bad ID in reply, too short, from:",
1045 &pend->reuse.addr, pend->reuse.addrlen);
4611046 error = NETEVENT_CLOSED;
462 }
463 }
464 fptr_ok(fptr_whitelist_pending_tcp(pend->query->cb));
465 (void)(*pend->query->cb)(c, pend->query->cb_arg, error, reply_info);
466 decommission_pending_tcp(outnet, pend);
1047 } else {
1048 uint16_t id = LDNS_ID_WIRE(sldns_buffer_begin(
1049 c->buffer));
1050 /* find the query the reply is for */
1051 w = reuse_tcp_by_id_find(&pend->reuse, id);
1052 }
1053 }
1054 if(error == NETEVENT_NOERROR && !w) {
1055 /* no struct waiting found in tree, no reply to call */
1056 log_addr(VERB_QUERY, "outnettcp: bad ID in reply, from:",
1057 &pend->reuse.addr, pend->reuse.addrlen);
1058 error = NETEVENT_CLOSED;
1059 }
1060 if(error == NETEVENT_NOERROR) {
1061 /* add to reuse tree so it can be reused, if not a failure.
1062 * This is possible if the state machine wants to make a tcp
1063 * query again to the same destination. */
1064 if(outnet->tcp_reuse.count < outnet->tcp_reuse_max) {
1065 (void)reuse_tcp_insert(outnet, pend);
1066 }
1067 }
1068 if(w) {
1069 reuse_tree_by_id_delete(&pend->reuse, w);
1070 verbose(VERB_CLIENT, "outnet tcp callback query err %d buflen %d",
1071 error, (int)sldns_buffer_limit(c->buffer));
1072 waiting_tcp_callback(w, c, error, reply_info);
1073 waiting_tcp_delete(w);
1074 }
1075 verbose(VERB_CLIENT, "outnet_tcp_cb reuse after cb");
1076 if(error == NETEVENT_NOERROR && pend->reuse.node.key) {
1077 verbose(VERB_CLIENT, "outnet_tcp_cb reuse after cb: keep it");
1078 /* it is in the reuse_tcp tree, with other queries, or
1079 * on the empty list. do not decommission it */
1080 /* if there are more outstanding queries, we could try to
1081 * read again, to see if it is on the input,
1082 * because this callback called after a successful read
1083 * and there could be more bytes to read on the input */
1084 if(pend->reuse.tree_by_id.count != 0)
1085 pend->reuse.cp_more_read_again = 1;
1086 reuse_tcp_setup_read_and_timeout(pend);
1087 return 0;
1088 }
1089 verbose(VERB_CLIENT, "outnet_tcp_cb reuse after cb: decommission it");
1090 /* no queries on it, no space to keep it. or timeout or closed due
1091 * to error. Close it */
1092 reuse_cb_and_decommission(outnet, pend, (error==NETEVENT_TIMEOUT?
1093 NETEVENT_TIMEOUT:NETEVENT_CLOSED));
1094 use_free_buffer(outnet);
4671095 return 0;
4681096 }
4691097
7221350 struct ub_randstate* rnd, int use_caps_for_id, int* availports,
7231351 int numavailports, size_t unwanted_threshold, int tcp_mss,
7241352 void (*unwanted_action)(void*), void* unwanted_param, int do_udp,
725 void* sslctx, int delayclose, int tls_use_sni, struct dt_env* dtenv)
1353 void* sslctx, int delayclose, int tls_use_sni, struct dt_env* dtenv,
1354 int udp_connect)
7261355 {
7271356 struct outside_network* outnet = (struct outside_network*)
7281357 calloc(1, sizeof(struct outside_network));
7601389 outnet->delay_tv.tv_usec = (delayclose%1000)*1000;
7611390 }
7621391 #endif
1392 if(udp_connect) {
1393 outnet->udp_connect = 1;
1394 }
7631395 if(numavailports == 0 || num_ports == 0) {
7641396 log_err("no outgoing ports available");
7651397 outside_network_delete(outnet);
7941426 outside_network_delete(outnet);
7951427 return NULL;
7961428 }
1429 rbtree_init(&outnet->tcp_reuse, reuse_cmp);
1430 outnet->tcp_reuse_max = num_tcp;
7971431
7981432 /* allocate commpoints */
7991433 for(k=0; k<num_ports; k++) {
9571591 size_t i;
9581592 for(i=0; i<outnet->num_tcp; i++)
9591593 if(outnet->tcp_conns[i]) {
1594 if(outnet->tcp_conns[i]->query &&
1595 !outnet->tcp_conns[i]->query->
1596 on_tcp_waiting_list) {
1597 /* delete waiting_tcp elements that
1598 * the tcp conn is working on */
1599 struct pending_tcp* pend =
1600 (struct pending_tcp*)outnet->
1601 tcp_conns[i]->query->
1602 next_waiting;
1603 decommission_pending_tcp(outnet, pend);
1604 }
9601605 comm_point_delete(outnet->tcp_conns[i]->c);
9611606 waiting_tcp_delete(outnet->tcp_conns[i]->query);
9621607 free(outnet->tcp_conns[i]);
9711616 p = np;
9721617 }
9731618 }
1619 /* was allocated in struct pending that was deleted above */
1620 rbtree_init(&outnet->tcp_reuse, reuse_cmp);
1621 outnet->tcp_reuse_first = NULL;
1622 outnet->tcp_reuse_last = NULL;
9741623 if(outnet->udp_wait_first) {
9751624 struct pending* p = outnet->udp_wait_first, *np;
9761625 while(p) {
11141763 my_if = ub_random_max(outnet->rnd, num_if);
11151764 pif = &ifs[my_if];
11161765 #ifndef DISABLE_EXPLICIT_PORT_RANDOMISATION
1117 my_port = ub_random_max(outnet->rnd, pif->avail_total);
1118 if(my_port < pif->inuse) {
1119 /* port already open */
1120 pend->pc = pif->out[my_port];
1121 verbose(VERB_ALGO, "using UDP if=%d port=%d",
1122 my_if, pend->pc->number);
1123 break;
1766 if(outnet->udp_connect) {
1767 /* if we connect() we cannot reuse fds for a port */
1768 if(pif->inuse >= pif->avail_total) {
1769 tries++;
1770 if(tries < MAX_PORT_RETRY)
1771 continue;
1772 log_err("failed to find an open port, drop msg");
1773 return 0;
1774 }
1775 my_port = pif->inuse + ub_random_max(outnet->rnd,
1776 pif->avail_total - pif->inuse);
1777 } else {
1778 my_port = ub_random_max(outnet->rnd, pif->avail_total);
1779 if(my_port < pif->inuse) {
1780 /* port already open */
1781 pend->pc = pif->out[my_port];
1782 verbose(VERB_ALGO, "using UDP if=%d port=%d",
1783 my_if, pend->pc->number);
1784 break;
1785 }
11241786 }
11251787 /* try to open new port, if fails, loop to try again */
11261788 log_assert(pif->inuse < pif->maxout);
11371799 if(fd != -1) {
11381800 verbose(VERB_ALGO, "opened UDP if=%d port=%d",
11391801 my_if, portno);
1802 if(outnet->udp_connect) {
1803 /* connect() to the destination */
1804 if(connect(fd, (struct sockaddr*)&pend->addr,
1805 pend->addrlen) < 0) {
1806 log_err_addr("udp connect failed",
1807 strerror(errno), &pend->addr,
1808 pend->addrlen);
1809 sock_close(fd);
1810 return 0;
1811 }
1812 }
11401813 /* grab fd */
11411814 pend->pc = outnet->unused_fds;
11421815 outnet->unused_fds = pend->pc->next;
11961869 log_assert(pend->pc && pend->pc->cp);
11971870
11981871 /* send it over the commlink */
1199 if(!comm_point_send_udp_msg(pend->pc->cp, packet,
1200 (struct sockaddr*)&pend->addr, pend->addrlen)) {
1201 portcomm_loweruse(outnet, pend->pc);
1202 return 0;
1872 if(outnet->udp_connect) {
1873 if(!comm_point_send_udp_msg(pend->pc->cp, packet, NULL, 0)) {
1874 portcomm_loweruse(outnet, pend->pc);
1875 return 0;
1876 }
1877 } else {
1878 if(!comm_point_send_udp_msg(pend->pc->cp, packet,
1879 (struct sockaddr*)&pend->addr, pend->addrlen)) {
1880 portcomm_loweruse(outnet, pend->pc);
1881 return 0;
1882 }
12031883 }
12041884
12051885 /* system calls to set timeout after sending UDP to make roundtrip
12721952 {
12731953 struct waiting_tcp* w = (struct waiting_tcp*)arg;
12741954 struct outside_network* outnet = w->outnet;
1275 comm_point_callback_type* cb;
1276 void* cb_arg;
1277 if(w->pkt) {
1955 verbose(VERB_CLIENT, "outnet_tcptimer");
1956 if(w->on_tcp_waiting_list) {
12781957 /* it is on the waiting list */
12791958 waiting_list_remove(outnet, w);
1959 waiting_tcp_callback(w, NULL, NETEVENT_TIMEOUT, NULL);
1960 waiting_tcp_delete(w);
12801961 } else {
12811962 /* it was in use */
12821963 struct pending_tcp* pend=(struct pending_tcp*)w->next_waiting;
1283 if(pend->c->ssl) {
1284 #ifdef HAVE_SSL
1285 SSL_shutdown(pend->c->ssl);
1286 SSL_free(pend->c->ssl);
1287 pend->c->ssl = NULL;
1288 #endif
1289 }
1290 comm_point_close(pend->c);
1291 pend->query = NULL;
1292 pend->next_free = outnet->tcp_free;
1293 outnet->tcp_free = pend;
1294 }
1295 cb = w->cb;
1296 cb_arg = w->cb_arg;
1297 waiting_tcp_delete(w);
1298 fptr_ok(fptr_whitelist_pending_tcp(cb));
1299 (void)(*cb)(NULL, cb_arg, NETEVENT_TIMEOUT, NULL);
1964 reuse_cb_and_decommission(outnet, pend, NETEVENT_TIMEOUT);
1965 }
13001966 use_free_buffer(outnet);
1967 }
1968
1969 /** close the oldest reuse_tcp connection to make a fd and struct pend
1970 * available for a new stream connection */
1971 static void
1972 reuse_tcp_close_oldest(struct outside_network* outnet)
1973 {
1974 struct pending_tcp* pend;
1975 verbose(VERB_CLIENT, "reuse_tcp_close_oldest");
1976 if(!outnet->tcp_reuse_last) return;
1977 pend = outnet->tcp_reuse_last->pending;
1978
1979 /* snip off of LRU */
1980 log_assert(pend->reuse.lru_next == NULL);
1981 if(pend->reuse.lru_prev) {
1982 outnet->tcp_reuse_last = pend->reuse.lru_prev;
1983 pend->reuse.lru_prev->lru_next = NULL;
1984 } else {
1985 outnet->tcp_reuse_last = NULL;
1986 outnet->tcp_reuse_first = NULL;
1987 }
1988 pend->reuse.item_on_lru_list = 0;
1989
1990 /* free up */
1991 reuse_cb_and_decommission(outnet, pend, NETEVENT_CLOSED);
1992 }
1993
1994 /** find spare ID value for reuse tcp stream. That is random and also does
1995 * not collide with an existing query ID that is in use or waiting */
1996 uint16_t
1997 reuse_tcp_select_id(struct reuse_tcp* reuse, struct outside_network* outnet)
1998 {
1999 uint16_t id = 0, curid, nextid;
2000 const int try_random = 2000;
2001 int i;
2002 unsigned select, count, space;
2003 rbnode_type* node;
2004
2005 /* make really sure the tree is not empty */
2006 if(reuse->tree_by_id.count == 0) {
2007 id = ((unsigned)ub_random(outnet->rnd)>>8) & 0xffff;
2008 return id;
2009 }
2010
2011 /* try to find random empty spots by picking them */
2012 for(i = 0; i<try_random; i++) {
2013 id = ((unsigned)ub_random(outnet->rnd)>>8) & 0xffff;
2014 if(!reuse_tcp_by_id_find(reuse, id)) {
2015 return id;
2016 }
2017 }
2018
2019 /* equally pick a random unused element from the tree that is
2020 * not in use. Pick a the n-th index of an ununused number,
2021 * then loop over the empty spaces in the tree and find it */
2022 log_assert(reuse->tree_by_id.count < 0xffff);
2023 select = ub_random_max(outnet->rnd, 0xffff - reuse->tree_by_id.count);
2024 /* select value now in 0 .. num free - 1 */
2025
2026 count = 0; /* number of free spaces passed by */
2027 node = rbtree_first(&reuse->tree_by_id);
2028 log_assert(node && node != RBTREE_NULL); /* tree not empty */
2029 /* see if select is before first node */
2030 if(select < tree_by_id_get_id(node))
2031 return select;
2032 count += tree_by_id_get_id(node);
2033 /* perhaps select is between nodes */
2034 while(node && node != RBTREE_NULL) {
2035 rbnode_type* next = rbtree_next(node);
2036 if(next && next != RBTREE_NULL) {
2037 curid = tree_by_id_get_id(node);
2038 nextid = tree_by_id_get_id(next);
2039 log_assert(curid < nextid);
2040 if(curid != 0xffff && curid + 1 < nextid) {
2041 /* space between nodes */
2042 space = nextid - curid - 1;
2043 log_assert(select >= count);
2044 if(select < count + space) {
2045 /* here it is */
2046 return curid + 1 + (select - count);
2047 }
2048 count += space;
2049 }
2050 }
2051 node = next;
2052 }
2053
2054 /* select is after the last node */
2055 /* count is the number of free positions before the nodes in the
2056 * tree */
2057 node = rbtree_last(&reuse->tree_by_id);
2058 log_assert(node && node != RBTREE_NULL); /* tree not empty */
2059 curid = tree_by_id_get_id(node);
2060 log_assert(count + (0xffff-curid) + reuse->tree_by_id.count == 0xffff);
2061 return curid + 1 + (select - count);
13012062 }
13022063
13032064 struct waiting_tcp*
13052066 int timeout, comm_point_callback_type* callback, void* callback_arg)
13062067 {
13072068 struct pending_tcp* pend = sq->outnet->tcp_free;
2069 struct reuse_tcp* reuse = NULL;
13082070 struct waiting_tcp* w;
1309 struct timeval tv;
1310 uint16_t id;
1311 /* if no buffer is free allocate space to store query */
2071
2072 verbose(VERB_CLIENT, "pending_tcp_query");
2073 if(sldns_buffer_limit(packet) < sizeof(uint16_t)) {
2074 verbose(VERB_ALGO, "pending tcp query with too short buffer < 2");
2075 return NULL;
2076 }
2077
2078 /* find out if a reused stream to the target exists */
2079 /* if so, take it into use */
2080 reuse = reuse_tcp_find(sq->outnet, &sq->addr, sq->addrlen,
2081 sq->ssl_upstream);
2082 if(reuse) {
2083 log_reuse_tcp(VERB_CLIENT, "pending_tcp_query: found reuse", reuse);
2084 log_assert(reuse->pending);
2085 pend = reuse->pending;
2086 reuse_tcp_lru_touch(sq->outnet, reuse);
2087 }
2088
2089 /* if !pend but we have reuse streams, close a reuse stream
2090 * to be able to open a new one to this target, no use waiting
2091 * to reuse a file descriptor while another query needs to use
2092 * that buffer and file descriptor now. */
2093 if(!pend) {
2094 reuse_tcp_close_oldest(sq->outnet);
2095 pend = sq->outnet->tcp_free;
2096 }
2097
2098 /* allocate space to store query */
13122099 w = (struct waiting_tcp*)malloc(sizeof(struct waiting_tcp)
1313 + (pend?0:sldns_buffer_limit(packet)));
2100 + sldns_buffer_limit(packet));
13142101 if(!w) {
13152102 return NULL;
13162103 }
13182105 free(w);
13192106 return NULL;
13202107 }
1321 w->pkt = NULL;
1322 w->pkt_len = 0;
1323 id = ((unsigned)ub_random(sq->outnet->rnd)>>8) & 0xffff;
1324 LDNS_ID_SET(sldns_buffer_begin(packet), id);
2108 w->pkt = (uint8_t*)w + sizeof(struct waiting_tcp);
2109 w->pkt_len = sldns_buffer_limit(packet);
2110 memmove(w->pkt, sldns_buffer_begin(packet), w->pkt_len);
2111 if(reuse)
2112 w->id = reuse_tcp_select_id(reuse, sq->outnet);
2113 else w->id = ((unsigned)ub_random(sq->outnet->rnd)>>8) & 0xffff;
2114 LDNS_ID_SET(w->pkt, w->id);
13252115 memcpy(&w->addr, &sq->addr, sq->addrlen);
13262116 w->addrlen = sq->addrlen;
13272117 w->outnet = sq->outnet;
2118 w->on_tcp_waiting_list = 0;
2119 w->next_waiting = NULL;
13282120 w->cb = callback;
13292121 w->cb_arg = callback_arg;
13302122 w->ssl_upstream = sq->ssl_upstream;
13312123 w->tls_auth_name = sq->tls_auth_name;
1332 #ifndef S_SPLINT_S
1333 tv.tv_sec = timeout/1000;
1334 tv.tv_usec = (timeout%1000)*1000;
1335 #endif
1336 comm_timer_set(w->timer, &tv);
2124 w->timeout = timeout;
2125 w->id_node.key = NULL;
2126 w->write_wait_prev = NULL;
2127 w->write_wait_next = NULL;
2128 w->write_wait_queued = 0;
2129 w->error_count = 0;
13372130 if(pend) {
13382131 /* we have a buffer available right now */
1339 if(!outnet_tcp_take_into_use(w, sldns_buffer_begin(packet),
1340 sldns_buffer_limit(packet))) {
1341 waiting_tcp_delete(w);
1342 return NULL;
1343 }
1344 #ifdef USE_DNSTAP
1345 if(sq->outnet->dtenv &&
1346 (sq->outnet->dtenv->log_resolver_query_messages ||
1347 sq->outnet->dtenv->log_forwarder_query_messages))
1348 dt_msg_send_outside_query(sq->outnet->dtenv, &sq->addr,
1349 comm_tcp, sq->zone, sq->zonelen, packet);
1350 #endif
2132 if(reuse) {
2133 /* reuse existing fd, write query and continue */
2134 /* store query in tree by id */
2135 verbose(VERB_CLIENT, "pending_tcp_query: reuse, store");
2136 w->next_waiting = (void*)pend;
2137 reuse_tree_by_id_insert(&pend->reuse, w);
2138 /* can we write right now? */
2139 if(pend->query == NULL) {
2140 /* write straight away */
2141 /* stop the timer on read of the fd */
2142 comm_point_stop_listening(pend->c);
2143 pend->query = w;
2144 outnet_tcp_take_query_setup(pend->c->fd, pend,
2145 w);
2146 } else {
2147 /* put it in the waiting list for
2148 * this stream */
2149 reuse_write_wait_push_back(&pend->reuse, w);
2150 }
2151 } else {
2152 /* create new fd and connect to addr, setup to
2153 * write query */
2154 verbose(VERB_CLIENT, "pending_tcp_query: new fd, connect");
2155 rbtree_init(&pend->reuse.tree_by_id, reuse_id_cmp);
2156 pend->reuse.pending = pend;
2157 memcpy(&pend->reuse.addr, &sq->addr, sq->addrlen);
2158 pend->reuse.addrlen = sq->addrlen;
2159 if(!outnet_tcp_take_into_use(w)) {
2160 waiting_tcp_delete(w);
2161 return NULL;
2162 }
2163 }
13512164 } else {
13522165 /* queue up */
1353 w->pkt = (uint8_t*)w + sizeof(struct waiting_tcp);
1354 w->pkt_len = sldns_buffer_limit(packet);
1355 memmove(w->pkt, sldns_buffer_begin(packet), w->pkt_len);
1356 w->next_waiting = NULL;
1357 if(sq->outnet->tcp_wait_last)
1358 sq->outnet->tcp_wait_last->next_waiting = w;
1359 else sq->outnet->tcp_wait_first = w;
1360 sq->outnet->tcp_wait_last = w;
1361 }
2166 /* waiting for a buffer on the outside network buffer wait
2167 * list */
2168 verbose(VERB_CLIENT, "pending_tcp_query: queue to wait");
2169 outnet_add_tcp_waiting(sq->outnet, w);
2170 }
2171 #ifdef USE_DNSTAP
2172 if(sq->outnet->dtenv &&
2173 (sq->outnet->dtenv->log_resolver_query_messages ||
2174 sq->outnet->dtenv->log_forwarder_query_messages))
2175 dt_msg_send_outside_query(sq->outnet->dtenv, &sq->addr,
2176 comm_tcp, sq->zone, sq->zonelen, packet);
2177 #endif
13622178 return w;
13632179 }
13642180
14762292 waiting_list_remove(struct outside_network* outnet, struct waiting_tcp* w)
14772293 {
14782294 struct waiting_tcp* p = outnet->tcp_wait_first, *prev = NULL;
2295 w->on_tcp_waiting_list = 0;
14792296 while(p) {
14802297 if(p == w) {
14812298 /* remove w */
14912308 }
14922309 }
14932310
2311 /** reuse tcp stream, remove serviced query from stream,
2312 * return true if the stream is kept, false if it is to be closed */
2313 static int
2314 reuse_tcp_remove_serviced_keep(struct waiting_tcp* w,
2315 struct serviced_query* sq)
2316 {
2317 struct pending_tcp* pend_tcp = (struct pending_tcp*)w->next_waiting;
2318 verbose(VERB_CLIENT, "reuse_tcp_remove_serviced_keep");
2319 /* remove the callback. let query continue to write to not cancel
2320 * the stream itself. also keep it as an entry in the tree_by_id,
2321 * in case the answer returns (that we no longer want), but we cannot
2322 * pick the same ID number meanwhile */
2323 w->cb = NULL;
2324 /* see if can be entered in reuse tree
2325 * for that the FD has to be non-1 */
2326 if(pend_tcp->c->fd == -1) {
2327 verbose(VERB_CLIENT, "reuse_tcp_remove_serviced_keep: -1 fd");
2328 return 0;
2329 }
2330 /* if in tree and used by other queries */
2331 if(pend_tcp->reuse.node.key) {
2332 verbose(VERB_CLIENT, "reuse_tcp_remove_serviced_keep: in use by other queries");
2333 /* do not reset the keepalive timer, for that
2334 * we'd need traffic, and this is where the serviced is
2335 * removed due to state machine internal reasons,
2336 * eg. iterator no longer interested in this query */
2337 return 1;
2338 }
2339 /* if still open and want to keep it open */
2340 if(pend_tcp->c->fd != -1 && sq->outnet->tcp_reuse.count <
2341 sq->outnet->tcp_reuse_max) {
2342 verbose(VERB_CLIENT, "reuse_tcp_remove_serviced_keep: keep open");
2343 /* set a keepalive timer on it */
2344 if(!reuse_tcp_insert(sq->outnet, pend_tcp)) {
2345 return 0;
2346 }
2347 reuse_tcp_setup_timeout(pend_tcp);
2348 return 1;
2349 }
2350 return 0;
2351 }
2352
14942353 /** cleanup serviced query entry */
14952354 static void
14962355 serviced_delete(struct serviced_query* sq)
14972356 {
2357 verbose(VERB_CLIENT, "serviced_delete");
14982358 if(sq->pending) {
14992359 /* clear up the pending query */
15002360 if(sq->status == serviced_query_UDP_EDNS ||
15022362 sq->status == serviced_query_UDP_EDNS_FRAG ||
15032363 sq->status == serviced_query_UDP_EDNS_fallback) {
15042364 struct pending* p = (struct pending*)sq->pending;
2365 verbose(VERB_CLIENT, "serviced_delete: UDP");
15052366 if(p->pc)
15062367 portcomm_loweruse(sq->outnet, p->pc);
15072368 pending_delete(sq->outnet, p);
15092370 * mesh */
15102371 outnet_send_wait_udp(sq->outnet);
15112372 } else {
1512 struct waiting_tcp* p = (struct waiting_tcp*)
2373 struct waiting_tcp* w = (struct waiting_tcp*)
15132374 sq->pending;
1514 if(p->pkt == NULL) {
1515 decommission_pending_tcp(sq->outnet,
1516 (struct pending_tcp*)p->next_waiting);
2375 verbose(VERB_CLIENT, "serviced_delete: TCP");
2376 /* if on stream-write-waiting list then
2377 * remove from waiting list and waiting_tcp_delete */
2378 if(w->write_wait_queued) {
2379 struct pending_tcp* pend =
2380 (struct pending_tcp*)w->next_waiting;
2381 verbose(VERB_CLIENT, "serviced_delete: writewait");
2382 reuse_tree_by_id_delete(&pend->reuse, w);
2383 reuse_write_wait_remove(&pend->reuse, w);
2384 waiting_tcp_delete(w);
2385 } else if(!w->on_tcp_waiting_list) {
2386 struct pending_tcp* pend =
2387 (struct pending_tcp*)w->next_waiting;
2388 verbose(VERB_CLIENT, "serviced_delete: tcpreusekeep");
2389 if(!reuse_tcp_remove_serviced_keep(w, sq)) {
2390 reuse_cb_and_decommission(sq->outnet,
2391 pend, NETEVENT_CLOSED);
2392 use_free_buffer(sq->outnet);
2393 }
2394 sq->pending = NULL;
15172395 } else {
1518 waiting_list_remove(sq->outnet, p);
1519 waiting_tcp_delete(p);
2396 verbose(VERB_CLIENT, "serviced_delete: tcpwait");
2397 waiting_list_remove(sq->outnet, w);
2398 waiting_tcp_delete(w);
15202399 }
15212400 }
15222401 }
20962975 {
20972976 struct serviced_query* sq;
20982977 struct service_callback* cb;
2099 struct edns_tag_addr* client_tag_addr;
2978 struct edns_string_addr* client_string_addr;
21002979
21012980 if(!inplace_cb_query_call(env, qinfo, flags, addr, addrlen, zone, zonelen,
21022981 qstate, qstate->region))
21032982 return NULL;
21042983
2105 if((client_tag_addr = edns_tag_addr_lookup(&env->edns_tags->client_tags,
2106 addr, addrlen))) {
2107 uint16_t client_tag = htons(client_tag_addr->tag_data);
2984 if((client_string_addr = edns_string_addr_lookup(
2985 &env->edns_strings->client_strings, addr, addrlen))) {
21082986 edns_opt_list_append(&qstate->edns_opts_back_out,
2109 env->edns_tags->client_tag_opcode, 2,
2110 (uint8_t*)&client_tag, qstate->region);
2987 env->edns_strings->client_string_opcode,
2988 client_string_addr->string_len,
2989 client_string_addr->string, qstate->region);
21112990 }
21122991
21132992 serviced_gen_query(buff, qinfo->qname, qinfo->qname_len, qinfo->qtype,
5151 struct pending_tcp;
5252 struct waiting_tcp;
5353 struct waiting_udp;
54 struct reuse_tcp;
5455 struct infra_cache;
5556 struct port_comm;
5657 struct port_if;
105106 int delayclose;
106107 /** timeout for delayclose */
107108 struct timeval delay_tv;
109 /** if we perform udp-connect, connect() for UDP socket to mitigate
110 * ICMP side channel leakage */
111 int udp_connect;
108112
109113 /** array of outgoing IP4 interfaces */
110114 struct port_if* ip4_ifs;
153157 size_t num_tcp;
154158 /** number of tcp communication points in use. */
155159 size_t num_tcp_outgoing;
160 /**
161 * tree of still-open and waiting tcp connections for reuse.
162 * can be closed and reopened to get a new tcp connection.
163 * or reused to the same destination again. with timeout to close.
164 * Entries are of type struct reuse_tcp.
165 * The entries are both active and empty connections.
166 */
167 rbtree_type tcp_reuse;
168 /** max number of tcp_reuse entries we want to keep open */
169 size_t tcp_reuse_max;
170 /** first and last(oldest) in lru list of reuse connections.
171 * the oldest can be closed to get a new free pending_tcp if needed
172 * The list contains empty connections, that wait for timeout or
173 * a new query that can use the existing connection. */
174 struct reuse_tcp* tcp_reuse_first, *tcp_reuse_last;
156175 /** list of tcp comm points that are free for use */
157176 struct pending_tcp* tcp_free;
158177 /** list of tcp queries waiting for a buffer */
209228 /** UDP commpoint, fd=-1 if not in use */
210229 struct comm_point* cp;
211230 };
231
232 /**
233 * Reuse TCP connection, still open can be used again.
234 */
235 struct reuse_tcp {
236 /** rbtree node with links in tcp_reuse tree. key is NULL when not
237 * in tree. Both active and empty connections are in the tree.
238 * key is a pointer to this structure, the members used to compare
239 * are the sockaddr and and then is-ssl bool, and then ptr value is
240 * used in case the same address exists several times in the tree
241 * when there are multiple connections to the same destination to
242 * make the rbtree items unique. */
243 rbnode_type node;
244 /** the key for the tcp_reuse tree. address of peer, ip4 or ip6,
245 * and port number of peer */
246 struct sockaddr_storage addr;
247 /** length of addr */
248 socklen_t addrlen;
249 /** also key for tcp_reuse tree, if ssl is used */
250 int is_ssl;
251 /** lru chain, so that the oldest can be removed to get a new
252 * connection when all are in (re)use. oldest is last in list.
253 * The lru only contains empty connections waiting for reuse,
254 * the ones with active queries are not on the list because they
255 * do not need to be closed to make space for others. They already
256 * service a query so the close for another query does not help
257 * service a larger number of queries. */
258 struct reuse_tcp* lru_next, *lru_prev;
259 /** true if the reuse_tcp item is on the lru list with empty items */
260 int item_on_lru_list;
261 /** the connection to reuse, the fd is non-1 and is open.
262 * the addr and port determine where the connection is going,
263 * and is key to the rbtree. The SSL ptr determines if it is
264 * a TLS connection or a plain TCP connection there. And TLS
265 * or not is also part of the key to the rbtree.
266 * There is a timeout and read event on the fd, to close it. */
267 struct pending_tcp* pending;
268 /**
269 * The more read again value pointed to by the commpoint
270 * tcp_more_read_again pointer, so that it exists after commpoint
271 * delete
272 */
273 int cp_more_read_again;
274 /**
275 * The more write again value pointed to by the commpoint
276 * tcp_more_write_again pointer, so that it exists after commpoint
277 * delete
278 */
279 int cp_more_write_again;
280 /** rbtree with other queries waiting on the connection, by ID number,
281 * of type struct waiting_tcp. It is for looking up received
282 * answers to the structure for callback. And also to see if ID
283 * numbers are unused and can be used for a new query.
284 * The write_wait elements are also in the tree, so that ID numbers
285 * can be looked up also for them. They are bool write_wait_queued. */
286 rbtree_type tree_by_id;
287 /** list of queries waiting to be written on the channel,
288 * if NULL no queries are waiting to be written and the pending->query
289 * is the query currently serviced. The first is the next in line.
290 * They are also in the tree_by_id. Once written, the are removed
291 * from this list, but stay in the tree. */
292 struct waiting_tcp* write_wait_first, *write_wait_last;
293 /** the outside network it is part of */
294 struct outside_network* outnet;
295 };
296
297 /** max number of queries on a reuse connection */
298 #define MAX_REUSE_TCP_QUERIES 200
299 /** timeout for REUSE entries in milliseconds. */
300 #define REUSE_TIMEOUT 60000
212301
213302 /**
214303 * A query that has an answer pending for it.
254343 struct pending_tcp {
255344 /** next in list of free tcp comm points, or NULL. */
256345 struct pending_tcp* next_free;
257 /** the ID for the query; checked in reply */
258 uint16_t id;
259346 /** tcp comm point it was sent on (and reply must come back on). */
260347 struct comm_point* c;
261348 /** the query being serviced, NULL if the pending_tcp is unused. */
262349 struct waiting_tcp* query;
350 /** the pre-allocated reuse tcp structure. if ->pending is nonNULL
351 * it is in use and the connection is waiting for reuse.
352 * It is here for memory pre-allocation, and used to make this
353 * pending_tcp wait for reuse. */
354 struct reuse_tcp reuse;
263355 };
264356
265357 /**
268360 struct waiting_tcp {
269361 /**
270362 * next in waiting list.
271 * if pkt==0, this points to the pending_tcp structure.
363 * if on_tcp_waiting_list==0, this points to the pending_tcp structure.
272364 */
273365 struct waiting_tcp* next_waiting;
366 /** if true the item is on the tcp waiting list and next_waiting
367 * is used for that. If false, the next_waiting points to the
368 * pending_tcp */
369 int on_tcp_waiting_list;
370 /** next and prev in query waiting list for stream connection */
371 struct waiting_tcp* write_wait_prev, *write_wait_next;
372 /** true if the waiting_tcp structure is on the write_wait queue */
373 int write_wait_queued;
374 /** entry in reuse.tree_by_id, if key is NULL, not in tree, otherwise,
375 * this struct is key and sorted by ID (from waiting_tcp.id). */
376 rbnode_type id_node;
377 /** the ID for the query; checked in reply */
378 uint16_t id;
274379 /** timeout event; timer keeps running whether the query is
275380 * waiting for a buffer or the tcp reply is pending */
276381 struct comm_timer* timer;
382 /** timeout in msec */
383 int timeout;
277384 /** the outside network it is part of */
278385 struct outside_network* outnet;
279386 /** remote address. */
283390 /**
284391 * The query itself, the query packet to send.
285392 * allocated after the waiting_tcp structure.
286 * set to NULL when the query is serviced and it part of pending_tcp.
287 * if this is NULL, the next_waiting points to the pending_tcp.
288393 */
289394 uint8_t* pkt;
290395 /** length of query packet. */
291396 size_t pkt_len;
292 /** callback for the timeout, error or reply to the message */
397 /** callback for the timeout, error or reply to the message,
398 * or NULL if no user is waiting. the entry uses an ID number.
399 * a query that was written is no longer needed, but the ID number
400 * and a reply will come back and can be ignored if NULL */
293401 comm_point_callback_type* cb;
294402 /** callback user argument */
295403 void* cb_arg;
297405 int ssl_upstream;
298406 /** ref to the tls_auth_name from the serviced_query */
299407 char* tls_auth_name;
408 /** the packet was involved in an error, to stop looping errors */
409 int error_count;
300410 };
301411
302412 /**
420530 * msec to wait on timeouted udp sockets.
421531 * @param tls_use_sni: if SNI is used for TLS connections.
422532 * @param dtenv: environment to send dnstap events with (if enabled).
533 * @param udp_connect: if the udp_connect option is enabled.
423534 * @return: the new structure (with no pending answers) or NULL on error.
424535 */
425536 struct outside_network* outside_network_create(struct comm_base* base,
428539 struct ub_randstate* rnd, int use_caps_for_id, int* availports,
429540 int numavailports, size_t unwanted_threshold, int tcp_mss,
430541 void (*unwanted_action)(void*), void* unwanted_param, int do_udp,
431 void* sslctx, int delayclose, int tls_use_sni, struct dt_env *dtenv);
542 void* sslctx, int delayclose, int tls_use_sni, struct dt_env *dtenv,
543 int udp_connect);
432544
433545 /**
434546 * Delete outside_network structure.
545657 */
546658 size_t serviced_get_mem(struct serviced_query* sq);
547659
660 /** Pick random ID value for a tcp stream, avoids existing IDs. */
661 uint16_t reuse_tcp_select_id(struct reuse_tcp* reuse,
662 struct outside_network* outnet);
663
664 /** find element in tree by id */
665 struct waiting_tcp* reuse_tcp_by_id_find(struct reuse_tcp* reuse, uint16_t id);
666
667 /** insert element in tree by id */
668 void reuse_tree_by_id_insert(struct reuse_tcp* reuse, struct waiting_tcp* w);
669
670 /** delete readwait waiting_tcp elements, deletes the elements in the list */
671 void reuse_del_readwait(rbtree_type* tree_by_id);
672
548673 /** get TCP file descriptor for address, returns -1 on failure,
549674 * tcp_mss is 0 or maxseg size to set for TCP packets. */
550675 int outnet_get_tcp_fd(struct sockaddr_storage* addr, socklen_t addrlen, int tcp_mss, int dscp);
642767 /** compare function of serviced query rbtree */
643768 int serviced_cmp(const void* key1, const void* key2);
644769
770 /** compare function of reuse_tcp rbtree in outside_network struct */
771 int reuse_cmp(const void* key1, const void* key2);
772
773 /** compare function of reuse_tcp tree_by_id rbtree */
774 int reuse_id_cmp(const void* key1, const void* key2);
775
645776 #endif /* OUTSIDE_NETWORK_H */
439439 respip_set_delete(r->respip_set);
440440 if(r->taglist)
441441 free(r->taglist);
442 if(r->region)
443 regional_destroy(r->region);
442444 free(r);
443445 }
444446 return NULL;
119119 fi
120120
121121 cat >server.cnf <<EOF
122 [req]
122123 default_bits=$BITS
123124 default_md=$HASH
124125 prompt=no
125126 distinguished_name=req_distinguished_name
127 x509_extensions=v3_ca
126128 [req_distinguished_name]
127129 commonName=$SERVERNAME
130 [v3_ca]
131 subjectKeyIdentifier=hash
132 authorityKeyIdentifier=keyid:always,issuer:always
133 basicConstraints=critical,CA:TRUE,pathlen:0
134 subjectAltName=DNS:$SERVERNAME
128135 EOF
129136
130137 [ -f server.cnf ] || fatal "cannot create openssl configuration"
155162 default_md=$HASH
156163 prompt=no
157164 distinguished_name=req_distinguished_name
165 req_extensions=v3_req
158166 [req_distinguished_name]
159167 commonName=$CLIENTNAME
168 [v3_req]
169 basicConstraints=critical,CA:FALSE
170 subjectAltName=DNS:$CLIENTNAME
160171 EOF
161172
162173 [ -f client.cnf ] || fatal "cannot create openssl configuration"
178189 -CAkey "$SVR_BASE.key" \
179190 -CAcreateserial \
180191 -$HASH \
192 -extfile client.cnf \
193 -extensions v3_req \
181194 -out "$CTL_BASE.pem"
182195
183196 [ ! -f "CTL_BASE.pem" ] || fatal "cannot create signed client certificate"
2727 else
2828 HAVE_MINGW=no
2929 fi
30
31 # stop tests from notifying systemd, if that is compiled in.
32 export -n NOTIFY_SOCKET
3033
3134 cd testdata;
3235 sh ../testcode/mini_tdir.sh clean
8989 printf("-e HTTP endpoint, default: /dns-query\n");
9090 printf("-c Content-type in request, default: "
9191 "application/dns-message\n");
92 printf("-n no-tls, TLS is disabled\n");
9293 printf("-h This help text\n");
9394 exit(1);
9495 }
184185 headers[1].name = (uint8_t*)":path";
185186 headers[1].value = (uint8_t*)h2_stream->path;
186187 headers[2].name = (uint8_t*)":scheme";
187 headers[2].value = (uint8_t*)"https";
188 if(h2_session->ssl)
189 headers[2].value = (uint8_t*)"https";
190 else
191 headers[2].value = (uint8_t*)"http";
188192 headers[3].name = (uint8_t*)":authority";
189193 headers[3].value = (uint8_t*)h2_session->authority;
190194 headers[4].name = (uint8_t*)"content-type";
245249 {
246250 struct http2_session* h2_session = (struct http2_session*)cb_arg;
247251 int r;
252 ssize_t ret;
248253 struct timeval tv, *waittv;
249254 fd_set rfd;
250255 ERR_clear_error();
266271 return NGHTTP2_ERR_WOULDBLOCK;
267272 }
268273
269 r = SSL_read(h2_session->ssl, buf, len);
270 if(r <= 0) {
271 int want = SSL_get_error(h2_session->ssl, r);
272 if(want == SSL_ERROR_ZERO_RETURN) {
274 if(h2_session->ssl) {
275 r = SSL_read(h2_session->ssl, buf, len);
276 if(r <= 0) {
277 int want = SSL_get_error(h2_session->ssl, r);
278 if(want == SSL_ERROR_ZERO_RETURN) {
279 return NGHTTP2_ERR_EOF;
280 }
281 log_crypto_err("could not SSL_read");
273282 return NGHTTP2_ERR_EOF;
274283 }
275 log_crypto_err("could not SSL_read");
284 return r;
285 }
286
287 ret = read(h2_session->fd, buf, len);
288 if(ret == 0) {
276289 return NGHTTP2_ERR_EOF;
277 }
278 return r;
290 } else if(ret < 0) {
291 log_err("could not http2 read: %s", strerror(errno));
292 return NGHTTP2_ERR_EOF;
293 }
294 return ret;
279295 }
280296
281297 static ssize_t http2_send_cb(nghttp2_session* ATTR_UNUSED(session),
282298 const uint8_t* buf, size_t len, int ATTR_UNUSED(flags), void* cb_arg)
283299 {
284300 struct http2_session* h2_session = (struct http2_session*)cb_arg;
285
286 int r;
287 ERR_clear_error();
288 r = SSL_write(h2_session->ssl, buf, len);
289 if(r <= 0) {
290 int want = SSL_get_error(h2_session->ssl, r);
291 if(want == SSL_ERROR_ZERO_RETURN) {
301 ssize_t ret;
302
303 if(h2_session->ssl) {
304 int r;
305 ERR_clear_error();
306 r = SSL_write(h2_session->ssl, buf, len);
307 if(r <= 0) {
308 int want = SSL_get_error(h2_session->ssl, r);
309 if(want == SSL_ERROR_ZERO_RETURN) {
310 return NGHTTP2_ERR_CALLBACK_FAILURE;
311 }
312 log_crypto_err("could not SSL_write");
292313 return NGHTTP2_ERR_CALLBACK_FAILURE;
293314 }
294 log_crypto_err("could not SSL_write");
315 return r;
316 }
317
318 ret = write(h2_session->fd, buf, len);
319 if(ret == 0) {
295320 return NGHTTP2_ERR_CALLBACK_FAILURE;
296 }
297 return r;
321 } else if(ret < 0) {
322 log_err("could not http2 write: %s", strerror(errno));
323 return NGHTTP2_ERR_CALLBACK_FAILURE;
324 }
325 return ret;
298326 }
299327
300328 static int http2_stream_close_cb(nghttp2_session* ATTR_UNUSED(session),
458486 }
459487
460488 static void
461 run(struct http2_session* h2_session, int port, int count, char** q)
489 run(struct http2_session* h2_session, int port, int no_tls, int count, char** q)
462490 {
463491 int i;
464492 SSL_CTX* ctx = NULL;
469497 fd = open_svr(h2_session->authority, port);
470498 h2_session->fd = fd;
471499
472 ctx = connect_sslctx_create(NULL, NULL, NULL, 0);
473 if(!ctx) fatal_exit("cannot create ssl ctx");
474 SSL_CTX_set_alpn_protos(ctx, (const unsigned char *)"\x02h2", 3);
475 ssl = outgoing_ssl_fd(ctx, fd);
476 if(!ssl) {
477 printf("cannot create ssl\n");
478 exit(1);
479 }
480 h2_session->ssl = ssl;
481 while(1) {
482 int r;
483 ERR_clear_error();
484 if( (r=SSL_do_handshake(ssl)) == 1)
485 break;
486 r = SSL_get_error(ssl, r);
487 if(r != SSL_ERROR_WANT_READ &&
488 r != SSL_ERROR_WANT_WRITE) {
489 log_crypto_err("could not ssl_handshake");
500 if(!no_tls) {
501 ctx = connect_sslctx_create(NULL, NULL, NULL, 0);
502 if(!ctx) fatal_exit("cannot create ssl ctx");
503 SSL_CTX_set_alpn_protos(ctx, (const unsigned char *)"\x02h2", 3);
504 ssl = outgoing_ssl_fd(ctx, fd);
505 if(!ssl) {
506 printf("cannot create ssl\n");
490507 exit(1);
508 }
509 h2_session->ssl = ssl;
510 while(1) {
511 int r;
512 ERR_clear_error();
513 if( (r=SSL_do_handshake(ssl)) == 1)
514 break;
515 r = SSL_get_error(ssl, r);
516 if(r != SSL_ERROR_WANT_READ &&
517 r != SSL_ERROR_WANT_WRITE) {
518 log_crypto_err("could not ssl_handshake");
519 exit(1);
520 }
491521 }
492522 }
493523
510540
511541 /* shutdown */
512542 http2_session_delete(h2_session);
513 SSL_shutdown(ssl);
514 SSL_free(ssl);
515 SSL_CTX_free(ctx);
543 if(ssl) {
544 SSL_shutdown(ssl);
545 SSL_free(ssl);
546 }
547 if(ctx) {
548 SSL_CTX_free(ctx);
549 }
516550 close(fd);
517551 }
518552
523557 int main(int argc, char** argv)
524558 {
525559 int c;
526 int port = UNBOUND_DNS_OVER_HTTPS_PORT;
527 struct http2_session* h2_session = http2_session_create();
560 int port = UNBOUND_DNS_OVER_HTTPS_PORT, no_tls = 0;
561 struct http2_session* h2_session;
562
563 #ifdef USE_WINSOCK
564 WSADATA wsa_data;
565 if(WSAStartup(MAKEWORD(2,2), &wsa_data) != 0) {
566 printf("WSAStartup failed\n");
567 return 1;
568 }
569 #endif
570 log_init(0, 0, 0);
571 checklock_start();
572
573 h2_session = http2_session_create();
528574 if(!h2_session) fatal_exit("out of memory");
529
530575 if(argc == 1) {
531576 usage(argv);
532577 }
536581 h2_session->endpoint = "/dns-query";
537582 h2_session->content_type = "application/dns-message";
538583
539 while((c=getopt(argc, argv, "c:e:hs:p:P")) != -1) {
584 while((c=getopt(argc, argv, "c:e:hns:p:P")) != -1) {
540585 switch(c) {
541586 case 'c':
542587 h2_session->content_type = optarg;
543588 break;
544589 case 'e':
545590 h2_session->endpoint = optarg;
591 break;
592 case 'n':
593 no_tls = 1;
546594 break;
547595 case 'p':
548596 if(atoi(optarg)==0 && strcmp(optarg,"0")!=0) {
572620 }
573621
574622
575 run(h2_session, port, argc, argv);
576
623 run(h2_session, port, no_tls, argc, argv);
624
625 checklock_stop();
626 #ifdef USE_WINSOCK
627 WSACleanup();
628 #endif
577629 return 0;
578630 }
579631 #else
871871 int ATTR_UNUSED(harden_large_queries),
872872 uint32_t ATTR_UNUSED(http_max_streams),
873873 char* ATTR_UNUSED(http_endpoint),
874 int ATTR_UNUSED(http_notls),
874875 struct tcl_list* ATTR_UNUSED(tcp_conn_limit),
875876 void* ATTR_UNUSED(sslctx), struct dt_env* ATTR_UNUSED(dtenv),
876877 comm_point_callback_type* cb, void *cb_arg)
10431044 void (*unwanted_action)(void*), void* ATTR_UNUSED(unwanted_param),
10441045 int ATTR_UNUSED(do_udp), void* ATTR_UNUSED(sslctx),
10451046 int ATTR_UNUSED(delayclose), int ATTR_UNUSED(tls_use_sni),
1046 struct dt_env* ATTR_UNUSED(dtenv))
1047 struct dt_env* ATTR_UNUSED(dtenv), int ATTR_UNUSED(udp_connect))
10471048 {
10481049 struct replay_runtime* runtime = (struct replay_runtime*)base;
10491050 struct outside_network* outnet = calloc(1,
12121213 sldns_buffer_flip(pend->buffer);
12131214 if(1) {
12141215 struct edns_data edns;
1215 struct edns_tag_addr* client_tag_addr;
1216 struct edns_string_addr* client_string_addr;
12161217 if(!inplace_cb_query_call(env, qinfo, flags, addr, addrlen,
12171218 zone, zonelen, qstate, qstate->region)) {
12181219 free(pend);
12261227 edns.bits = 0;
12271228 if(dnssec)
12281229 edns.bits = EDNS_DO;
1229 if((client_tag_addr = edns_tag_addr_lookup(
1230 &env->edns_tags->client_tags,
1230 if((client_string_addr = edns_string_addr_lookup(
1231 &env->edns_strings->client_strings,
12311232 addr, addrlen))) {
1232 uint16_t client_tag = htons(client_tag_addr->tag_data);
12331233 edns_opt_list_append(&qstate->edns_opts_back_out,
1234 env->edns_tags->client_tag_opcode, 2,
1235 (uint8_t*)&client_tag, qstate->region);
1234 env->edns_strings->client_string_opcode,
1235 client_string_addr->string_len,
1236 client_string_addr->string, qstate->region);
12361237 }
12371238 edns.opt_list = qstate->edns_opts_back_out;
12381239 attach_edns_record(pend->buffer, &edns);
15091510 return 0;
15101511 }
15111512
1513 int reuse_cmp(const void* ATTR_UNUSED(a), const void* ATTR_UNUSED(b))
1514 {
1515 log_assert(0);
1516 return 0;
1517 }
1518
1519 int reuse_id_cmp(const void* ATTR_UNUSED(a), const void* ATTR_UNUSED(b))
1520 {
1521 log_assert(0);
1522 return 0;
1523 }
1524
15121525 /* timers in testbound for autotrust. statistics tested in tdir. */
15131526 struct comm_timer* comm_timer_create(struct comm_base* base,
15141527 void (*cb)(void*), void* cb_arg)
3939 exit 0
4040 }
4141 trap cleanup INT
42 # stop tests from notifying systemd, if that is compiled in.
43 export -n NOTIFY_SOCKET
4244
4345 for t in $RUNLIST
4446 do
361361 /* we do not want the test to depend on the timezone */
362362 (void)putenv("TZ=UTC");
363363 memset(pass_argv, 0, sizeof(pass_argv));
364 #ifdef HAVE_SYSTEMD
365 /* we do not want the test to use systemd daemon startup notification*/
366 (void)unsetenv("NOTIFY_SOCKET");
367 #endif /* HAVE_SYSTEMD */
364368
365369 log_init(NULL, 0, NULL);
366370 /* determine commandline options for the daemon */
838838 respip_conf_actions_test();
839839 }
840840
841 #include "services/outside_network.h"
842 /** add number of new IDs to the reuse tree, randomly chosen */
843 static void tcpid_addmore(struct reuse_tcp* reuse,
844 struct outside_network* outnet, unsigned int addnum)
845 {
846 unsigned int i;
847 struct waiting_tcp* w;
848 for(i=0; i<addnum; i++) {
849 uint16_t id = reuse_tcp_select_id(reuse, outnet);
850 unit_assert(!reuse_tcp_by_id_find(reuse, id));
851 w = calloc(1, sizeof(*w));
852 unit_assert(w);
853 w->id = id;
854 w->outnet = outnet;
855 w->next_waiting = (void*)reuse->pending;
856 reuse_tree_by_id_insert(reuse, w);
857 }
858 }
859
860 /** fill up the reuse ID tree and test assertions */
861 static void tcpid_fillup(struct reuse_tcp* reuse,
862 struct outside_network* outnet)
863 {
864 int t, numtest=3;
865 for(t=0; t<numtest; t++) {
866 rbtree_init(&reuse->tree_by_id, reuse_id_cmp);
867 tcpid_addmore(reuse, outnet, 65535);
868 reuse_del_readwait(&reuse->tree_by_id);
869 }
870 }
871
872 /** test TCP ID selection */
873 static void tcpid_test(void)
874 {
875 struct pending_tcp pend;
876 struct outside_network outnet;
877 unit_show_func("services/outside_network.c", "reuse_tcp_select_id");
878 memset(&pend, 0, sizeof(pend));
879 pend.reuse.pending = &pend;
880 memset(&outnet, 0, sizeof(outnet));
881 outnet.rnd = ub_initstate(NULL);
882 rbtree_init(&pend.reuse.tree_by_id, reuse_id_cmp);
883 tcpid_fillup(&pend.reuse, &outnet);
884 ub_randfree(outnet.rnd);
885 }
886
841887 void unit_show_func(const char* file, const char* func)
842888 {
843889 printf("test %s:%s\n", file, func);
906952 infra_test();
907953 ldns_test();
908954 msgparse_test();
955 tcpid_test();
909956 #ifdef CLIENT_SUBNET
910957 ecs_test();
911958 #endif /* CLIENT_SUBNET */
4444 # make config file
4545 sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' -e 's/@CONTROL_PORT\@/'$CONTROL_PORT'/' < dnstap.conf > ub.conf
4646 # start unbound in the background
47 $PRE/unbound -d -c ub.conf >unbound.log 2>&1 &
47 $PRE/unbound -d -c ub.conf -vvvv >unbound.log 2>&1 &
4848 UNBOUND_PID=$!
4949 echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test
5050
5858 dig @127.0.0.1 -p $UNBOUND_PORT q8.example.net.
5959 dig @127.0.0.1 -p $UNBOUND_PORT q9.example.net.
6060 dig @127.0.0.1 -p $UNBOUND_PORT q10.example.net.
61 echo "> wait for log to happen on timer"
62 sleep 3
6163 for x in q1 q2 q3 q4 5 q6 q7 q8 q9 q10; do
6264 if grep "$x.example.net" tap.log >/dev/null; then :; else sleep 1; fi
6365 if grep "$x.example.net" tap.log >/dev/null; then :; else sleep 1; fi
0 server:
1 verbosity: 2
2 # num-threads: 1
3 interface: 127.0.0.1@@PORT@
4 https-port: @PORT@
5 tls-service-key: "unbound_server.key"
6 tls-service-pem: "unbound_server.pem"
7 use-syslog: no
8 directory: .
9 pidfile: "unbound.pid"
10 chroot: ""
11 username: ""
12 do-not-query-localhost: no
13 http-query-buffer-size: 1G
14 http-response-buffer-size: 1G
15 http-max-streams: 200
16 http-notls-downstream: yes
17
18 local-zone: "example.net" static
19 local-data: "www1.example.net. IN A 1.2.3.1"
20 local-data: "www2.example.net. IN A 1.2.3.2"
21 local-data: "www3.example.net. IN A 1.2.3.3"
22 local-zone: "drop.net" deny
23 tcp-upstream: yes
24
25 forward-zone:
26 name: "."
27 forward-addr: "127.0.0.1@@TOPORT@"
0 BaseName: doh_downstream_notls
1 Version: 1.0
2 Description: Test DNS-over-HTTP query processing with no-tls
3 CreationDate: Mon Jun 12 12:00:00 CET 2020
4 Maintainer:
5 Category:
6 Component:
7 CmdDepends:
8 Depends:
9 Help:
10 Pre: doh_downstream_notls.pre
11 Post: doh_downstream_notls.post
12 Test: doh_downstream_notls.test
13 AuxFiles:
14 Passed:
15 Failure:
0 # #-- doh_downstream_notls.post --#
1 # source the master var file when it's there
2 [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master
3 # source the test var file when it's there
4 [ -f .tpkg.var.test ] && source .tpkg.var.test
5 #
6 # do your teardown here
7 PRE="../.."
8 if grep "define HAVE_NGHTTP2 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi
9 . ../common.sh
10 kill_pid $FWD_PID
11 kill_pid $UNBOUND_PID
12 cat unbound.log
0 # #-- doh_downstream_notls.pre--#
1 # source the master var file when it's there
2 [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master
3 # use .tpkg.var.test for in test variable passing
4 [ -f .tpkg.var.test ] && source .tpkg.var.test
5
6 PRE="../.."
7 . ../common.sh
8 if grep "define HAVE_NGHTTP2 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi
9
10 get_random_port 2
11 UNBOUND_PORT=$RND_PORT
12 FWD_PORT=$(($RND_PORT + 1))
13 echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test
14 echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test
15
16 # start forwarder
17 get_ldns_testns
18 $LDNS_TESTNS -p $FWD_PORT doh_downstream_notls.testns >fwd.log 2>&1 &
19 FWD_PID=$!
20 echo "FWD_PID=$FWD_PID" >> .tpkg.var.test
21
22 # make config file
23 sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' < doh_downstream_notls.conf > ub.conf
24 # start unbound in the background
25 $PRE/unbound -vvvv -d -c ub.conf >unbound.log 2>&1 &
26 UNBOUND_PID=$!
27 echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test
28
29 cat .tpkg.var.test
30 wait_ldns_testns_up fwd.log
31 wait_unbound_up unbound.log
32
0 # #-- doh_downstream_notls.test --#
1 # source the master var file when it's there
2 [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master
3 # use .tpkg.var.test for in test variable passing
4 [ -f .tpkg.var.test ] && source .tpkg.var.test
5
6 PRE="../.."
7 . ../common.sh
8 if grep "define HAVE_NGHTTP2 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi
9 get_make
10 (cd $PRE; $MAKE dohclient)
11
12
13 # this test query should just work (server is up)
14 echo "> query www1.example.net."
15 $PRE/dohclient -n -s 127.0.0.1 -p $UNBOUND_PORT www1.example.net. A IN >outfile 2>&1
16 cat outfile
17 if test "$?" -ne 0; then
18 echo "exit status not OK"
19 echo "> cat logfiles"
20 cat outfile
21 cat fwd.log
22 cat unbound.log
23 echo "Not OK"
24 exit 1
25 fi
26 if grep "www1.example.net" outfile | grep "1.2.3.1"; then
27 echo "content OK"
28 else
29 echo "result contents not OK"
30 echo "> cat logfiles"
31 cat outfile
32 cat fwd.log
33 cat unbound.log
34 echo "result contents not OK"
35 exit 1
36 fi
37 echo "OK"
38
39 # multiple requests (from localdata)
40 echo "> query www1.example.net. www2.example.net. www3.example.net."
41 $PRE/dohclient -n -s 127.0.0.1 -p $UNBOUND_PORT www1.example.net. A IN www2.example.net A IN www3.example.net A IN >outfile 2>&1
42 cat outfile
43 if test "$?" -ne 0; then
44 echo "exit status not OK"
45 echo "> cat logfiles"
46 cat outfile
47 cat fwd.log
48 cat unbound.log
49 echo "Not OK"
50 exit 1
51 fi
52 if grep "www1.example.net" outfile | grep "1.2.3.1"; then
53 echo "content OK"
54 else
55 echo "result contents not OK"
56 echo "> cat logfiles"
57 cat outfile
58 cat fwd.log
59 cat unbound.log
60 echo "result contents not OK"
61 exit 1
62 fi
63 if grep "www2.example.net" outfile | grep "1.2.3.2"; then
64 echo "content OK"
65 else
66 echo "result contents not OK"
67 echo "> cat logfiles"
68 cat outfile
69 cat fwd.log
70 cat unbound.log
71 echo "result contents not OK"
72 exit 1
73 fi
74 if grep "www3.example.net" outfile | grep "1.2.3.3"; then
75 echo "content OK"
76 else
77 echo "result contents not OK"
78 echo "> cat logfiles"
79 cat outfile
80 cat fwd.log
81 cat unbound.log
82 echo "result contents not OK"
83 exit 1
84 fi
85
86 # out of order requests, the example.com elements take 2 seconds to wait.
87 echo ""
88 echo "> query www1.example.net. www.example.com. www2.example.net. www2.example.com. www3.example.net."
89 $PRE/dohclient -n -s 127.0.0.1 -p $UNBOUND_PORT www1.example.net. A IN www.example.com. A IN www2.example.net A IN www2.example.com. A IN www3.example.net A IN >outfile 2>&1
90 cat outfile
91 if test "$?" -ne 0; then
92 echo "exit status not OK"
93 echo "> cat logfiles"
94 cat outfile
95 cat fwd.log
96 cat unbound.log
97 echo "Not OK"
98 exit 1
99 fi
100 if grep "www1.example.net" outfile | grep "1.2.3.1"; then
101 echo "content OK"
102 else
103 echo "result contents not OK"
104 echo "> cat logfiles"
105 cat outfile
106 cat fwd.log
107 cat unbound.log
108 echo "result contents not OK"
109 exit 1
110 fi
111 if grep "www2.example.net" outfile | grep "1.2.3.2"; then
112 echo "content OK"
113 else
114 echo "result contents not OK"
115 echo "> cat logfiles"
116 cat outfile
117 cat fwd.log
118 cat unbound.log
119 echo "result contents not OK"
120 exit 1
121 fi
122 if grep "www3.example.net" outfile | grep "1.2.3.3"; then
123 echo "content OK"
124 else
125 echo "result contents not OK"
126 echo "> cat logfiles"
127 cat outfile
128 cat fwd.log
129 cat unbound.log
130 echo "result contents not OK"
131 exit 1
132 fi
133 if grep "www.example.com" outfile | grep "10.20.30.40"; then
134 echo "content OK"
135 else
136 echo "result contents not OK"
137 echo "> cat logfiles"
138 cat outfile
139 cat fwd.log
140 cat unbound.log
141 echo "result contents not OK"
142 exit 1
143 fi
144 if grep "www2.example.com" outfile | grep "10.20.30.42"; then
145 echo "content OK"
146 else
147 echo "result contents not OK"
148 echo "> cat logfiles"
149 cat outfile
150 cat fwd.log
151 cat unbound.log
152 echo "result contents not OK"
153 exit 1
154 fi
155
156 # out of order requests, the example.com elements take 2 seconds to wait.
157 # www.example.com present twice, answered twice.
158 echo ""
159 echo "> query www1.example.net. www.example.com. www2.example.net. www.example.com. www3.example.net."
160 $PRE/dohclient -n -s 127.0.0.1 -p $UNBOUND_PORT www1.example.net. A IN www.example.com. A IN www2.example.net A IN www.example.com. A IN www3.example.net A IN >outfile 2>&1
161 cat outfile
162 if test "$?" -ne 0; then
163 echo "exit status not OK"
164 echo "> cat logfiles"
165 cat outfile
166 cat fwd.log
167 cat unbound.log
168 echo "Not OK"
169 exit 1
170 fi
171 if grep "www1.example.net" outfile | grep "1.2.3.1"; then
172 echo "content OK"
173 else
174 echo "result contents not OK"
175 echo "> cat logfiles"
176 cat outfile
177 cat fwd.log
178 cat unbound.log
179 echo "result contents not OK"
180 exit 1
181 fi
182 if grep "www2.example.net" outfile | grep "1.2.3.2"; then
183 echo "content OK"
184 else
185 echo "result contents not OK"
186 echo "> cat logfiles"
187 cat outfile
188 cat fwd.log
189 cat unbound.log
190 echo "result contents not OK"
191 exit 1
192 fi
193 if grep "www3.example.net" outfile | grep "1.2.3.3"; then
194 echo "content OK"
195 else
196 echo "result contents not OK"
197 echo "> cat logfiles"
198 cat outfile
199 cat fwd.log
200 cat unbound.log
201 echo "result contents not OK"
202 exit 1
203 fi
204 if grep "www.example.com" outfile | grep "10.20.30.40"; then
205 echo "content OK"
206 else
207 echo "result contents not OK"
208 echo "> cat logfiles"
209 cat outfile
210 cat fwd.log
211 cat unbound.log
212 echo "result contents not OK"
213 exit 1
214 fi
215
216 # out of order requests, the example.com elements take 2 seconds to wait.
217 # www3.example.com present twice, answered twice.
218 echo ""
219 echo "> query www1.example.net. www3.example.com. www2.example.net. www3.example.com. www3.example.net."
220 $PRE/dohclient -n -s 127.0.0.1 -p $UNBOUND_PORT www1.example.net. A IN www3.example.com. A IN www2.example.net A IN www3.example.com. A IN www3.example.net A IN >outfile 2>&1
221 cat outfile
222 if test "$?" -ne 0; then
223 echo "exit status not OK"
224 echo "> cat logfiles"
225 cat outfile
226 cat fwd.log
227 cat unbound.log
228 echo "Not OK"
229 exit 1
230 fi
231 if grep "www1.example.net" outfile | grep "1.2.3.1"; then
232 echo "content OK"
233 else
234 echo "result contents not OK"
235 echo "> cat logfiles"
236 cat outfile
237 cat fwd.log
238 cat unbound.log
239 echo "result contents not OK"
240 exit 1
241 fi
242 if grep "www2.example.net" outfile | grep "1.2.3.2"; then
243 echo "content OK"
244 else
245 echo "result contents not OK"
246 echo "> cat logfiles"
247 cat outfile
248 cat fwd.log
249 cat unbound.log
250 echo "result contents not OK"
251 exit 1
252 fi
253 if grep "www3.example.net" outfile | grep "1.2.3.3"; then
254 echo "content OK"
255 else
256 echo "result contents not OK"
257 echo "> cat logfiles"
258 cat outfile
259 cat fwd.log
260 cat unbound.log
261 echo "result contents not OK"
262 exit 1
263 fi
264 if grep "www3.example.com" outfile | grep "10.20.30.43"; then
265 echo "content OK"
266 else
267 echo "result contents not OK"
268 echo "> cat logfiles"
269 cat outfile
270 cat fwd.log
271 cat unbound.log
272 echo "result contents not OK"
273 exit 1
274 fi
275
276 echo ""
277 echo "> query www4.example.com. www3.example.net."
278 $PRE/dohclient -n -s 127.0.0.1 -p $UNBOUND_PORT www4.example.com. A IN www3.example.net A IN >outfile 2>&1
279 cat outfile
280 if test "$?" -ne 0; then
281 echo "exit status not OK"
282 echo "> cat logfiles"
283 cat outfile
284 cat fwd.log
285 cat unbound.log
286 echo "Not OK"
287 exit 1
288 fi
289 if grep "www3.example.net" outfile | grep "1.2.3.3"; then
290 echo "content OK"
291 else
292 echo "result contents not OK"
293 echo "> cat logfiles"
294 cat outfile
295 cat fwd.log
296 cat unbound.log
297 echo "result contents not OK"
298 exit 1
299 fi
300 if grep "www4.example.com" outfile | grep "10.20.30.44"; then
301 echo "content OK"
302 else
303 echo "result contents not OK"
304 echo "> cat logfiles"
305 cat outfile
306 cat fwd.log
307 cat unbound.log
308 echo "result contents not OK"
309 exit 1
310 fi
311
312
313 echo ""
314 echo "> query a1.example.com. - a90.example.com."
315 $PRE/dohclient -n -s 127.0.0.1 -p $UNBOUND_PORT www6.example.com. A IN a1.a.example.com. A IN a2.a.example.com. A IN a3.a.example.com. A IN a4.a.example.com. A IN a5.a.example.com. A IN a6.a.example.com. A IN a7.a.example.com. A IN a8.a.example.com. A IN a9.a.example.com. A IN a10.a.example.com. A IN a11.a.example.com. A IN a12.a.example.com. A IN a13.a.example.com. A IN a14.a.example.com. A IN a15.a.example.com. A IN a16.a.example.com. A IN a17.a.example.com. A IN a18.a.example.com. A IN a19.a.example.com. A IN a20.a.example.com. A IN a21.a.example.com. A IN a22.a.example.com. A IN a23.a.example.com. A IN a24.a.example.com. A IN a25.a.example.com. A IN a26.a.example.com. A IN a27.a.example.com. A IN a28.a.example.com. A IN a29.a.example.com. A IN a30.a.example.com. A IN a31.a.example.com. A IN a32.a.example.com. A IN a33.a.example.com. A IN a34.a.example.com. A IN a35.a.example.com. A IN a36.a.example.com. A IN a37.a.example.com. A IN a38.a.example.com. A IN a39.a.example.com. A IN a40.a.example.com. A IN a41.a.example.com. A IN a42.a.example.com. A IN a43.a.example.com. A IN a44.a.example.com. A IN a45.a.example.com. A IN a46.a.example.com. A IN a47.a.example.com. A IN a48.a.example.com. A IN a49.a.example.com. A IN a50.a.example.com. A IN a51.a.example.com. A IN a52.a.example.com. A IN a53.a.example.com. A IN a54.a.example.com. A IN a55.a.example.com. A IN a56.a.example.com. A IN a57.a.example.com. A IN a58.a.example.com. A IN a59.a.example.com. A IN a60.a.example.com. A IN a61.a.example.com. A IN a62.a.example.com. A IN a63.a.example.com. A IN a64.a.example.com. A IN a65.a.example.com. A IN a66.a.example.com. A IN a67.a.example.com. A IN a68.a.example.com. A IN a69.a.example.com. A IN a70.a.example.com. A IN a71.a.example.com. A IN a72.a.example.com. A IN a73.a.example.com. A IN a74.a.example.com. A IN a75.a.example.com. A IN a76.a.example.com. A IN a77.a.example.com. A IN a78.a.example.com. A IN a79.a.example.com. A IN a80.a.example.com. A IN a81.a.example.com. A IN a82.a.example.com. A IN a83.a.example.com. A IN a84.a.example.com. A IN a85.a.example.com. A IN a86.a.example.com. A IN a87.a.example.com. A IN a88.a.example.com. A IN a89.a.example.com. A IN a90.a.example.com. A IN >outfile 2>&1
316 cat outfile
317 if test "$?" -ne 0; then
318 echo "exit status not OK"
319 echo "> cat logfiles"
320 cat outfile
321 cat fwd.log
322 cat unbound.log
323 echo "Not OK"
324 exit 1
325 fi
326 num_ans=$(grep -B 3 "a.example.com. IN A" outfile | grep "rcode: NOERROR" | wc -l )
327 if test "$num_ans" -ne 90; then
328 echo "number of answers not OK"
329 echo "> cat logfiles"
330 cat outfile
331 cat fwd.log
332 cat unbound.log
333 echo "Not OK"
334 exit 1
335 fi
336
337 echo "OK"
338 exit 0
0 ; nameserver test file
1 $ORIGIN example.com.
2 $TTL 3600
3
4 ENTRY_BEGIN
5 MATCH opcode qtype qname
6 REPLY QR AA NOERROR
7 ADJUST copy_id sleep=2
8 SECTION QUESTION
9 www IN A
10 SECTION ANSWER
11 www IN A 10.20.30.40
12 ENTRY_END
13
14 ENTRY_BEGIN
15 MATCH opcode qtype qname
16 REPLY QR AA NOERROR
17 ADJUST copy_id
18 SECTION QUESTION
19 www2 IN A
20 SECTION ANSWER
21 www2 IN A 10.20.30.42
22 ENTRY_END
23
24 ENTRY_BEGIN
25 MATCH opcode qtype qname
26 REPLY QR AA NOERROR
27 ADJUST copy_id
28 SECTION QUESTION
29 www3 IN A
30 SECTION ANSWER
31 www3 IN A 10.20.30.43
32 ENTRY_END
33
34 ENTRY_BEGIN
35 MATCH opcode qtype qname
36 REPLY QR AA NOERROR
37 ADJUST copy_id sleep=2
38 SECTION QUESTION
39 www4 IN A
40 SECTION ANSWER
41 www4 IN A 10.20.30.44
42 ENTRY_END
43
44 ENTRY_BEGIN
45 MATCH opcode qtype qname
46 REPLY QR AA NOERROR
47 ADJUST copy_id sleep=2
48 SECTION QUESTION
49 www5 IN A
50 SECTION ANSWER
51 www5 IN A 10.20.30.45
52 ENTRY_END
53
54 ENTRY_BEGIN
55 MATCH opcode qtype qname
56 REPLY QR AA NOERROR
57 ADJUST copy_id sleep=2
58 SECTION QUESTION
59 www6 IN A
60 SECTION ANSWER
61 www6 IN A 10.20.30.46
62 ENTRY_END
63
64 ; lots of noerror/nodata answers for other queries (a.. queries)
65 ENTRY_BEGIN
66 MATCH opcode qtype subdomain
67 REPLY QR AA NOERROR
68 ADJUST copy_id copy_query
69 SECTION QUESTION
70 a.example.com. IN A
71 SECTION AUTHORITY
72 example.com. IN SOA ns hostmaster 2019 28800 7200 604800 3600
73 ENTRY_END
0 -----BEGIN RSA PRIVATE KEY-----
1 MIICWwIBAAKBgQC3F7Jsv2u01pLL9rFnjsMU/IaCFUIz/624DcaE84Z4gjMl5kWA
2 3axQcqul1wlwSrbKwrony+d9hH/+MX0tZwvl8w3OmhmOAiaQ+SHCsIuOjVwQjX0s
3 RLB61Pz5+PAiVvnPa9JIYB5QrK6DVEsxIHj8MOc5JKORrnESsFDh6yeMeQIDAQAB
4 AoGAAuWoGBprTOA8UGfl5LqYkaNxSWumsYXxLMFjC8WCsjN1NbtQDDr1uAwodSZS
5 6ujzvX+ZTHnofs7y64XC8k34HTOCD2zlW7kijWbT8YjRYFU6o9F5zUGD9RCan0ds
6 sVscT2psLSzfdsmFAcbmnGdxYkXk2PC1FHtaqExxehralGUCQQDcqrg9uQKXlhQi
7 XAaPr8SiWvtRm2a9IMMZkRfUWZclPHq6fCWNuUaCD+cTat4wAuqeknAz33VEosw3
8 fXGsok//AkEA1GjIHXrOcSlpfVJb6NeOBugjRtZ7ZDT5gbtnMS9ob0qntKV6saaL
9 CNmJwuD9Q3XkU5j1+uHvYGP2NzcJd2CjhwJACV0hNlVMe9w9fHvFN4Gw6WbM9ViP
10 0oS6YrJafYNTu5vGZXVxLoNnL4u3NYa6aPUmuZXjNwBLfJ8f5VboZPf6RwJAINd2
11 oYA8bSi/A755MX4qmozH74r4Fx1Nuq5UHTm8RwDe/0Javx8F/j9MWpJY9lZDEF3l
12 In5OebPa/NyInSmW/wJAZuP9aRn0nDBkHYri++1A7NykMiJ/nH0mDECbnk+wxx0S
13 LwqIetBhxb8eQwMg45+iAH7CHAMQ8BQuF/nFE6eotg==
14 -----END RSA PRIVATE KEY-----
0 -----BEGIN CERTIFICATE-----
1 MIIBmzCCAQQCCQDsNJ1UmphEFzANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1
2 bmJvdW5kMB4XDTA4MDkxMTA5MDk0MFoXDTI4MDUyOTA5MDk0MFowEjEQMA4GA1UE
3 AxMHdW5ib3VuZDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAtxeybL9rtNaS
4 y/axZ47DFPyGghVCM/+tuA3GhPOGeIIzJeZFgN2sUHKrpdcJcEq2ysK6J8vnfYR/
5 /jF9LWcL5fMNzpoZjgImkPkhwrCLjo1cEI19LESwetT8+fjwIlb5z2vSSGAeUKyu
6 g1RLMSB4/DDnOSSjka5xErBQ4esnjHkCAwEAATANBgkqhkiG9w0BAQUFAAOBgQAZ
7 9N0lnLENs4JMvPS+mn8C5m9bkkFITd32IiLjf0zgYpIUbFXH6XaEr9GNZBUG8feG
8 l/6WRXnbnVSblI5odQ4XxGZ9inYY6qtW30uv76HvoKp+QZ1c3460ddR8NauhcCHH
9 Z7S+QbLXi+r2JAhpPozZCjBHlRD0ixzA1mKQTJhJZg==
10 -----END CERTIFICATE-----
0 ; config options
1 server:
2 edns-client-string: 10.0.0.0/24 "abc d"
3 edns-client-string: 10.0.0.10/32 "123AbC!"
4
5 stub-zone:
6 name: "edns-string-abc."
7 stub-addr: 10.0.0.1
8
9 stub-zone:
10 name: "edns-string-123."
11 stub-addr: 10.0.0.10
12
13 stub-zone:
14 name: "notag."
15 stub-addr: 10.10.0.1
16
17 CONFIG_END
18
19 SCENARIO_BEGIN Test EDNS string tag option
20
21 RANGE_BEGIN 0 1000
22 ADDRESS 10.0.0.1
23 ENTRY_BEGIN
24 MATCH opcode qtype qname
25 ADJUST copy_id
26 REPLY QR NOERROR
27 SECTION QUESTION
28 edns-string-abc. IN A
29 SECTION ANSWER
30 edns-string-abc. IN A 10.20.30.40
31 SECTION ADDITIONAL
32 ENTRY_END
33 RANGE_END
34
35 RANGE_BEGIN 0 1000
36 ADDRESS 10.0.0.10
37 ENTRY_BEGIN
38 MATCH opcode qtype qname
39 ADJUST copy_id
40 REPLY QR NOERROR
41 SECTION QUESTION
42 edns-string-123. IN A
43 SECTION ANSWER
44 edns-string-123. IN A 10.20.30.40
45 SECTION ADDITIONAL
46 ENTRY_END
47 RANGE_END
48
49 RANGE_BEGIN 0 1000
50 ADDRESS 10.10.0.1
51 ENTRY_BEGIN
52 MATCH opcode qtype qname
53 ADJUST copy_id
54 REPLY QR NOERROR
55 SECTION QUESTION
56 notag. IN A
57 SECTION ANSWER
58 notag. IN A 10.20.30.40
59 SECTION ADDITIONAL
60 ENTRY_END
61 RANGE_END
62
63 STEP 10 QUERY
64 ENTRY_BEGIN
65 REPLY RD
66 SECTION QUESTION
67 edns-string-abc. IN A
68 ENTRY_END
69
70 STEP 20 CHECK_OUT_QUERY
71 ENTRY_BEGIN
72 MATCH qname qtype opcode ednsdata
73 SECTION QUESTION
74 edns-string-abc. IN A
75 SECTION ADDITIONAL
76 HEX_EDNSDATA_BEGIN
77 fd e9 ; Opcode 65001
78 00 05 ; Length 5
79 61 62 63 20 64 ; "abc d"
80 HEX_EDNSDATA_END
81 ENTRY_END
82
83 STEP 30 CHECK_ANSWER
84 ENTRY_BEGIN
85 MATCH all
86 REPLY QR RD RA NOERROR
87 SECTION QUESTION
88 edns-string-abc. IN A
89 SECTION ANSWER
90 edns-string-abc. IN A 10.20.30.40
91 ENTRY_END
92
93 STEP 110 QUERY
94 ENTRY_BEGIN
95 REPLY RD
96 SECTION QUESTION
97 edns-string-123. IN A
98 ENTRY_END
99
100 STEP 120 CHECK_OUT_QUERY
101 ENTRY_BEGIN
102 MATCH qname qtype opcode ednsdata
103 SECTION QUESTION
104 edns-string-123. IN A
105 SECTION ADDITIONAL
106 HEX_EDNSDATA_BEGIN
107 fd e9 ; Opcode 65001
108 00 07 ; Length 7
109 31 32 33 41 62 ; "123Ab"
110 43 21 ; "C!"
111 HEX_EDNSDATA_END
112 ENTRY_END
113
114 STEP 130 CHECK_ANSWER
115 ENTRY_BEGIN
116 MATCH all
117 REPLY QR RD RA NOERROR
118 SECTION QUESTION
119 edns-string-123. IN A
120 SECTION ANSWER
121 edns-string-123. IN A 10.20.30.40
122 ENTRY_END
123
124 STEP 210 QUERY
125 ENTRY_BEGIN
126 REPLY RD
127 SECTION QUESTION
128 notag. IN A
129 ENTRY_END
130
131 STEP 220 CHECK_OUT_QUERY
132 ENTRY_BEGIN
133 MATCH qname qtype opcode ednsdata
134 SECTION QUESTION
135 notag. IN A
136 SECTION ADDITIONAL
137 HEX_EDNSDATA_BEGIN
138 HEX_EDNSDATA_END
139 ENTRY_END
140
141 STEP 230 CHECK_ANSWER
142 ENTRY_BEGIN
143 MATCH all
144 REPLY QR RD RA NOERROR
145 SECTION QUESTION
146 notag. IN A
147 SECTION ANSWER
148 notag. IN A 10.20.30.40
149 ENTRY_END
150
151 SCENARIO_END
0 ; config options
1 server:
2 edns-client-string: 10.0.0.0/24 "abc d"
3 edns-client-string: 10.0.0.10/32 "123AbC!"
4 edns-client-string-opcode: 65432
5
6 stub-zone:
7 name: "edns-string-abc."
8 stub-addr: 10.0.0.1
9
10 stub-zone:
11 name: "edns-string-123."
12 stub-addr: 10.0.0.10
13
14 stub-zone:
15 name: "notag."
16 stub-addr: 10.10.0.1
17
18 CONFIG_END
19
20 SCENARIO_BEGIN Test EDNS string tag option
21
22 RANGE_BEGIN 0 1000
23 ADDRESS 10.0.0.1
24 ENTRY_BEGIN
25 MATCH opcode qtype qname
26 ADJUST copy_id
27 REPLY QR NOERROR
28 SECTION QUESTION
29 edns-string-abc. IN A
30 SECTION ANSWER
31 edns-string-abc. IN A 10.20.30.40
32 SECTION ADDITIONAL
33 ENTRY_END
34 RANGE_END
35
36 RANGE_BEGIN 0 1000
37 ADDRESS 10.0.0.10
38 ENTRY_BEGIN
39 MATCH opcode qtype qname
40 ADJUST copy_id
41 REPLY QR NOERROR
42 SECTION QUESTION
43 edns-string-123. IN A
44 SECTION ANSWER
45 edns-string-123. IN A 10.20.30.40
46 SECTION ADDITIONAL
47 ENTRY_END
48 RANGE_END
49
50 RANGE_BEGIN 0 1000
51 ADDRESS 10.10.0.1
52 ENTRY_BEGIN
53 MATCH opcode qtype qname
54 ADJUST copy_id
55 REPLY QR NOERROR
56 SECTION QUESTION
57 notag. IN A
58 SECTION ANSWER
59 notag. IN A 10.20.30.40
60 SECTION ADDITIONAL
61 ENTRY_END
62 RANGE_END
63
64 STEP 10 QUERY
65 ENTRY_BEGIN
66 REPLY RD
67 SECTION QUESTION
68 edns-string-abc. IN A
69 ENTRY_END
70
71 STEP 20 CHECK_OUT_QUERY
72 ENTRY_BEGIN
73 MATCH qname qtype opcode ednsdata
74 SECTION QUESTION
75 edns-string-abc. IN A
76 SECTION ADDITIONAL
77 HEX_EDNSDATA_BEGIN
78 ff 98 ; Opcode 65432
79 00 05 ; Length 5
80 61 62 63 20 64 ; "abc d"
81 HEX_EDNSDATA_END
82 ENTRY_END
83
84 STEP 30 CHECK_ANSWER
85 ENTRY_BEGIN
86 MATCH all
87 REPLY QR RD RA NOERROR
88 SECTION QUESTION
89 edns-string-abc. IN A
90 SECTION ANSWER
91 edns-string-abc. IN A 10.20.30.40
92 ENTRY_END
93
94 STEP 110 QUERY
95 ENTRY_BEGIN
96 REPLY RD
97 SECTION QUESTION
98 edns-string-123. IN A
99 ENTRY_END
100
101 STEP 120 CHECK_OUT_QUERY
102 ENTRY_BEGIN
103 MATCH qname qtype opcode ednsdata
104 SECTION QUESTION
105 edns-string-123. IN A
106 SECTION ADDITIONAL
107 HEX_EDNSDATA_BEGIN
108 ff 98 ; Opcode 65432
109 00 07 ; Length 7
110 31 32 33 41 62 ; "123Ab"
111 43 21 ; "C!"
112 HEX_EDNSDATA_END
113 ENTRY_END
114
115 STEP 130 CHECK_ANSWER
116 ENTRY_BEGIN
117 MATCH all
118 REPLY QR RD RA NOERROR
119 SECTION QUESTION
120 edns-string-123. IN A
121 SECTION ANSWER
122 edns-string-123. IN A 10.20.30.40
123 ENTRY_END
124
125 STEP 210 QUERY
126 ENTRY_BEGIN
127 REPLY RD
128 SECTION QUESTION
129 notag. IN A
130 ENTRY_END
131
132 STEP 220 CHECK_OUT_QUERY
133 ENTRY_BEGIN
134 MATCH qname qtype opcode ednsdata
135 SECTION QUESTION
136 notag. IN A
137 SECTION ADDITIONAL
138 HEX_EDNSDATA_BEGIN
139 HEX_EDNSDATA_END
140 ENTRY_END
141
142 STEP 230 CHECK_ANSWER
143 ENTRY_BEGIN
144 MATCH all
145 REPLY QR RD RA NOERROR
146 SECTION QUESTION
147 notag. IN A
148 SECTION ANSWER
149 notag. IN A 10.20.30.40
150 ENTRY_END
151
152 SCENARIO_END
+0
-151
testdata/edns_client_tag.rpl less more
0 ; config options
1 server:
2 edns-client-tag: 10.0.0.0/24 1234
3 edns-client-tag: 10.0.0.10/32 5678
4
5 stub-zone:
6 name: "tag1234."
7 stub-addr: 10.0.0.1
8
9 stub-zone:
10 name: "tag5678."
11 stub-addr: 10.0.0.10
12
13 stub-zone:
14 name: "notag."
15 stub-addr: 10.10.0.1
16
17 CONFIG_END
18
19 SCENARIO_BEGIN Test EDNS client tag option
20
21 RANGE_BEGIN 0 1000
22 ADDRESS 10.0.0.1
23 ENTRY_BEGIN
24 MATCH opcode qtype qname
25 ADJUST copy_id
26 REPLY QR NOERROR
27 SECTION QUESTION
28 tag1234. IN A
29 SECTION ANSWER
30 tag1234. IN A 10.20.30.40
31 SECTION ADDITIONAL
32 ENTRY_END
33 RANGE_END
34
35 RANGE_BEGIN 0 1000
36 ADDRESS 10.0.0.10
37 ENTRY_BEGIN
38 MATCH opcode qtype qname
39 ADJUST copy_id
40 REPLY QR NOERROR
41 SECTION QUESTION
42 tag5678. IN A
43 SECTION ANSWER
44 tag5678. IN A 10.20.30.40
45 SECTION ADDITIONAL
46 ENTRY_END
47 RANGE_END
48
49 RANGE_BEGIN 0 1000
50 ADDRESS 10.10.0.1
51 ENTRY_BEGIN
52 MATCH opcode qtype qname
53 ADJUST copy_id
54 REPLY QR NOERROR
55 SECTION QUESTION
56 notag. IN A
57 SECTION ANSWER
58 notag. IN A 10.20.30.40
59 SECTION ADDITIONAL
60 ENTRY_END
61 RANGE_END
62
63 STEP 10 QUERY
64 ENTRY_BEGIN
65 REPLY RD
66 SECTION QUESTION
67 tag1234. IN A
68 ENTRY_END
69
70 STEP 20 CHECK_OUT_QUERY
71 ENTRY_BEGIN
72 MATCH qname qtype opcode ednsdata
73 SECTION QUESTION
74 tag1234. IN A
75 SECTION ADDITIONAL
76 HEX_EDNSDATA_BEGIN
77 00 10 ; Opcode 16
78 00 02 ; Length 2
79 04 d2 ; 1234
80 HEX_EDNSDATA_END
81 ENTRY_END
82
83 STEP 30 CHECK_ANSWER
84 ENTRY_BEGIN
85 MATCH all
86 REPLY QR RD RA NOERROR
87 SECTION QUESTION
88 tag1234. IN A
89 SECTION ANSWER
90 tag1234. IN A 10.20.30.40
91 ENTRY_END
92
93 STEP 110 QUERY
94 ENTRY_BEGIN
95 REPLY RD
96 SECTION QUESTION
97 tag5678. IN A
98 ENTRY_END
99
100 STEP 120 CHECK_OUT_QUERY
101 ENTRY_BEGIN
102 MATCH qname qtype opcode ednsdata
103 SECTION QUESTION
104 tag5678. IN A
105 SECTION ADDITIONAL
106 HEX_EDNSDATA_BEGIN
107 00 10 ; Opcode 16
108 00 02 ; Length 2
109 16 2e ; 5678
110 HEX_EDNSDATA_END
111 ENTRY_END
112
113 STEP 130 CHECK_ANSWER
114 ENTRY_BEGIN
115 MATCH all
116 REPLY QR RD RA NOERROR
117 SECTION QUESTION
118 tag5678. IN A
119 SECTION ANSWER
120 tag5678. IN A 10.20.30.40
121 ENTRY_END
122
123 STEP 210 QUERY
124 ENTRY_BEGIN
125 REPLY RD
126 SECTION QUESTION
127 notag. IN A
128 ENTRY_END
129
130 STEP 220 CHECK_OUT_QUERY
131 ENTRY_BEGIN
132 MATCH qname qtype opcode ednsdata
133 SECTION QUESTION
134 notag. IN A
135 SECTION ADDITIONAL
136 HEX_EDNSDATA_BEGIN
137 HEX_EDNSDATA_END
138 ENTRY_END
139
140 STEP 230 CHECK_ANSWER
141 ENTRY_BEGIN
142 MATCH all
143 REPLY QR RD RA NOERROR
144 SECTION QUESTION
145 notag. IN A
146 SECTION ANSWER
147 notag. IN A 10.20.30.40
148 ENTRY_END
149
150 SCENARIO_END
1212 num-queries-per-thread: 1024
1313 use-syslog: no
1414 do-not-query-localhost: no
15 udp-connect: no
1516 forward-zone:
1617 name: "."
1718 forward-addr: "127.0.0.1@@TOPORT@"
0 server:
1 verbosity: 5
2 # num-threads: 1
3 interface: 127.0.0.1
4 port: @PORT@
5 use-syslog: no
6 directory: .
7 pidfile: "unbound.pid"
8 chroot: ""
9 username: ""
10 do-not-query-localhost: no
11
12 tcp-upstream: yes
13
14 forward-zone:
15 name: "."
16 forward-addr: "127.0.0.1@@TOPORT@"
0 # this is the upstream server that has pipelining and responds to queries.
1 server:
2 verbosity: 1
3 # num-threads: 1
4 interface: 127.0.0.1
5 port: @PORT@
6 use-syslog: no
7 directory: .
8 pidfile: "unbound2.pid"
9 chroot: ""
10 username: ""
11 do-not-query-localhost: no
12 tcp-idle-timeout: 10000
13
14 log-queries: yes
15 log-replies: yes
16 log-identity: "upstream"
17
18 local-zone: "." refuse
19 local-zone: "example.com" static
20 local-data: "www.example.com A 10.20.30.40"
21 local-data: "www1.example.com A 10.20.30.41"
22 local-data: "www2.example.com A 10.20.30.42"
23 local-data: "www3.example.com A 10.20.30.43"
24 local-data: "www4.example.com A 10.20.30.44"
25 local-data: "www5.example.com A 10.20.30.45"
26 local-data: "www6.example.com A 10.20.30.46"
27 local-data: "www7.example.com A 10.20.30.47"
28
29 local-zone: "drop.net" deny
30 local-zone: "refuse.net" refuse
31
32 local-zone: "more.net" redirect
33 local-data: "more.net A 10.20.30.40"
34
35 # if queries escape, send them to localhost
36 forward-zone:
37 name: "."
38 forward-addr: "127.0.0.1@@TOPORT@"
0 BaseName: tcp_reuse
1 Version: 1.0
2 Description: Test tcp stream reuse.
3 CreationDate: Wed Jun 03 09:37:00 CET 2020
4 Maintainer: Wouter Wijngaards
5 Category:
6 Component:
7 CmdDepends:
8 Depends:
9 Help:
10 Pre: tcp_reuse.pre
11 Post: tcp_reuse.post
12 Test: tcp_reuse.test
13 AuxFiles:
14 Passed:
15 Failure:
0 # #-- tcp_reuse.post --#
1 # source the master var file when it's there
2 [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master
3 # source the test var file when it's there
4 [ -f .tpkg.var.test ] && source .tpkg.var.test
5 #
6 # do your teardown here
7 . ../common.sh
8 kill_pid `cat unbound2.pid`
9 if test -f unbound2.log; then
10 echo ">>> upstream log"
11 cat unbound2.log
12 fi
13 #kill_pid $UNBOUND_PID
14 kill_pid `cat unbound.pid`
15 if test -f unbound.log; then
16 echo ">>> unbound log"
17 cat unbound.log
18 fi
0 # #-- tcp_reuse.pre--#
1 # source the master var file when it's there
2 [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master
3 # use .tpkg.var.test for in test variable passing
4 [ -f .tpkg.var.test ] && source .tpkg.var.test
5
6 PRE="../.."
7 . ../common.sh
8 get_random_port 2
9 UNBOUND_PORT=$RND_PORT
10 UPSTREAM_PORT=$(($RND_PORT + 1))
11 echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test
12 echo "UPSTREAM_PORT=$UPSTREAM_PORT" >> .tpkg.var.test
13
14 # make config file
15 sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$UPSTREAM_PORT'/' < tcp_reuse.conf > ub.conf
16 # start unbound in the background
17 #$PRE/unbound -d -c ub.conf >unbound.log 2>&1 &
18 $PRE/unbound -d -c ub.conf 2>&1 | tee unbound.log &
19 UNBOUND_PID=$!
20 echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test
21 wait_unbound_up unbound.log
22
23 # make upstream config file
24 sed -e 's/@PORT\@/'$UPSTREAM_PORT'/' -e 's/@TOPORT\@/'$UPSTREAM_PORT'/' < tcp_reuse.conf2 > ub2.conf
25 # start upstream unbound in the background
26 #$PRE/unbound -d -c ub2.conf >unbound2.log 2>&1 &
27 $PRE/unbound -d -c ub2.conf 2>&1 | tee unbound2.log &
28 UPSTREAM_PID=$!
29 echo "UPSTREAM_PID=$UPSTREAM_PID" >> .tpkg.var.test
30 wait_unbound_up unbound2.log
31
32 cat .tpkg.var.test
33
0 # #-- tcp_reuse.test --#
1 # source the master var file when it's there
2 [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master
3 # use .tpkg.var.test for in test variable passing
4 [ -f .tpkg.var.test ] && source .tpkg.var.test
5
6 PRE="../.."
7 . ../common.sh
8
9 get_make
10 (cd $PRE; $MAKE streamtcp)
11
12 echo "> query www1.example.com."
13 $PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT www1.example.com. A IN >outfile 2>&1
14 cat outfile
15 if test "$?" -ne 0; then
16 echo "exit status not OK"
17 echo "> cat logfiles"
18 cat outfile
19 cat unbound2.log
20 cat unbound.log
21 echo "Not OK"
22 exit 1
23 fi
24 if grep "www1.example.com" outfile | grep "10.20.30.41"; then
25 echo "content OK"
26 else
27 echo "result contents not OK, for www1.example.com"
28 echo "> cat logfiles"
29 cat outfile
30 cat unbound2.log
31 cat unbound.log
32 echo "result contents not OK, for www1.example.com"
33 exit 1
34 fi
35 echo "OK"
36 echo ""
37
38 # this should be reused on the same tcp stream:
39 echo "> query www2.example.com."
40 $PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT www2.example.com. A IN >outfile 2>&1
41 cat outfile
42 if test "$?" -ne 0; then
43 echo "exit status not OK"
44 echo "> cat logfiles"
45 cat outfile
46 cat unbound2.log
47 cat unbound.log
48 echo "Not OK"
49 exit 1
50 fi
51 if grep "www2.example.com" outfile | grep "10.20.30.42"; then
52 echo "content OK"
53 else
54 echo "result contents not OK, for www2.example.com"
55 echo "> cat logfiles"
56 cat outfile
57 cat unbound2.log
58 cat unbound.log
59 echo "result contents not OK, for www2.example.com"
60 exit 1
61 fi
62
63 echo "> query refuse.net."
64 $PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT refuse.net. A IN >outfile 2>&1
65 cat outfile
66 if test "$?" -ne 0; then
67 echo "exit status not OK"
68 echo "> cat logfiles"
69 cat outfile
70 cat unbound2.log
71 cat unbound.log
72 echo "Not OK"
73 exit 1
74 fi
75 if grep "rcode: SERVFAIL" outfile; then
76 echo "content OK"
77 else
78 echo "result contents not OK, for refuse.net"
79 echo "> cat logfiles"
80 cat outfile
81 cat unbound2.log
82 cat unbound.log
83 echo "result contents not OK, for refuse.net"
84 exit 1
85 fi
86
87 echo "> query www3.example.com."
88 echo "> query www4.example.com."
89 echo "> query www5.example.com."
90 echo "> query www6.example.com."
91 $PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT www3.example.com. A IN >outfile3 2>&1 &
92 $PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT www4.example.com. A IN >outfile4 2>&1 &
93 $PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT www5.example.com. A IN >outfile5 2>&1 &
94 $PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT www6.example.com. A IN >outfile6 2>&1 &
95 wait
96 if test "$?" -ne 0; then
97 echo "exit status not OK"
98 echo "> cat logfiles"
99 cat outfile3
100 cat outfile4
101 cat outfile5
102 cat outfile6
103 cat unbound2.log
104 cat unbound.log
105 echo "Not OK"
106 exit 1
107 fi
108 if grep "www3.example.com" outfile3 | grep "10.20.30.43"; then
109 echo "content OK"
110 else
111 echo "result contents not OK, for www3.example.com"
112 echo "> cat logfiles"
113 cat outfile3
114 cat outfile4
115 cat outfile5
116 cat outfile6
117 cat unbound2.log
118 cat unbound.log
119 echo "result contents not OK, for www3.example.com"
120 exit 1
121 fi
122 if grep "www4.example.com" outfile4 | grep "10.20.30.44"; then
123 echo "content OK"
124 else
125 echo "result contents not OK, for www4.example.com"
126 echo "> cat logfiles"
127 cat outfile3
128 cat outfile4
129 cat outfile5
130 cat outfile6
131 cat unbound2.log
132 cat unbound.log
133 echo "result contents not OK, for www4.example.com"
134 exit 1
135 fi
136 if grep "www5.example.com" outfile5 | grep "10.20.30.45"; then
137 echo "content OK"
138 else
139 echo "result contents not OK, for www5.example.com"
140 echo "> cat logfiles"
141 cat outfile3
142 cat outfile4
143 cat outfile5
144 cat outfile6
145 cat unbound2.log
146 cat unbound.log
147 echo "result contents not OK, for www5.example.com"
148 exit 1
149 fi
150 if grep "www6.example.com" outfile6 | grep "10.20.30.46"; then
151 echo "content OK"
152 else
153 echo "result contents not OK, for www6.example.com"
154 echo "> cat logfiles"
155 cat outfile3
156 cat outfile4
157 cat outfile5
158 cat outfile6
159 cat unbound2.log
160 cat unbound.log
161 echo "result contents not OK, for www6.example.com"
162 exit 1
163 fi
164
165 echo "> query a1.more.net a2.more.net a3.more.net a4.more.net a5.more.net"
166 $PRE/streamtcp -a -f 127.0.0.1@$UNBOUND_PORT a1.more.net A IN a2.more.net A IN a3.more.net A IN a4.more.net A IN a5.more.net A IN >outfile 2>&1
167 if test "$?" -ne 0; then
168 echo "exit status not OK"
169 echo "> cat logfiles"
170 cat outfile
171 cat unbound2.log
172 cat unbound.log
173 echo "Not OK"
174 exit 1
175 fi
176 cat outfile
177 for x in a1.more.net a2.more.net a3.more.net a4.more.net a5.more.net; do
178 if grep "$x" outfile | grep "10.20.30.40"; then
179 echo "content OK for $x"
180 else
181 echo "result contents not OK, for $x"
182 echo "> cat logfiles"
183 cat outfile
184 cat unbound2.log
185 cat unbound.log
186 echo "result contents not OK, for $x"
187 exit 1
188 fi
189 done
190
191 # make the server timeout to drop the upstream connection
192 echo "> sleep 15"
193 sleep 15
194 # see if we are still up.
195 echo "> query a7.more.net"
196 $PRE/streamtcp -a -f 127.0.0.1@$UNBOUND_PORT a7.more.net A IN >outfile 2>&1
197 if test "$?" -ne 0; then
198 echo "exit status not OK"
199 echo "> cat logfiles"
200 cat outfile
201 cat unbound2.log
202 cat unbound.log
203 echo "Not OK"
204 exit 1
205 fi
206 cat outfile
207 for x in a7.more.net; do
208 if grep "$x" outfile | grep "10.20.30.40"; then
209 echo "content OK for $x"
210 else
211 echo "result contents not OK, for $x"
212 echo "> cat logfiles"
213 cat outfile
214 cat unbound2.log
215 cat unbound.log
216 echo "result contents not OK, for $x"
217 exit 1
218 fi
219 done
220
221 # dropconn.drop.net make the server drop the connection.
222 echo "> query a11.more.net a12.more.net dropconn.drop.net a14.more.net a15.more.net"
223 $PRE/streamtcp -a -f 127.0.0.1@$UNBOUND_PORT a11.more.net A IN a12.more.net A IN dropconn.drop.net A IN a14.more.net A IN a15.more.net A IN >outfile 2>&1
224 if test "$?" -ne 0; then
225 echo "exit status not OK"
226 echo "> cat logfiles"
227 cat outfile
228 cat unbound2.log
229 cat unbound.log
230 echo "Not OK"
231 exit 1
232 fi
233 cat outfile
234 # cannot really check outfile, because it may or may not have answers depending
235 # on how fast the other server responds or the drop happens, but there are
236 # a bunch of connection drops, whilst resolving the other queries.
237
238 echo "> query drop.net."
239 $PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT drop.net. A IN >outfile 2>&1
240 cat outfile
241 if test "$?" -ne 0; then
242 echo "exit status not OK"
243 echo "> cat logfiles"
244 cat outfile
245 cat unbound2.log
246 cat unbound.log
247 echo "Not OK"
248 exit 1
249 fi
250 if grep "rcode: SERVFAIL" outfile; then
251 echo "content OK"
252 else
253 echo "result contents not OK, for drop.net"
254 echo "> cat logfiles"
255 cat outfile
256 cat unbound2.log
257 cat unbound.log
258 echo "result contents not OK, for drop.net"
259 exit 1
260 fi
261
262
263 # timeouts at the end. (so that the server is not marked as failed for
264 # the other tests).
265 echo "> query q1.drop.net."
266 echo "> query q2.drop.net."
267 $PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT q1.drop.net. A IN >outfile1 2>&1 &
268 $PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT q2.drop.net. A IN >outfile2 2>&1 &
269 wait
270 if test "$?" -ne 0; then
271 echo "exit status not OK"
272 echo "> cat logfiles"
273 cat outfile1
274 cat outfile2
275 cat unbound2.log
276 cat unbound.log
277 echo "Not OK"
278 exit 1
279 fi
280 cat outfile1
281 cat outfile2
282 if grep "rcode: SERVFAIL" outfile1; then
283 echo "content OK"
284 else
285 echo "result contents not OK, for q1.drop.net"
286 echo "> cat logfiles"
287 cat outfile1
288 cat outfile2
289 cat unbound2.log
290 cat unbound.log
291 echo "result contents not OK, for q1.drop.net"
292 exit 1
293 fi
294 if grep "rcode: SERVFAIL" outfile2; then
295 echo "content OK"
296 else
297 echo "result contents not OK, for q2.drop.net"
298 echo "> cat logfiles"
299 cat outfile1
300 cat outfile2
301 cat unbound2.log
302 cat unbound.log
303 echo "result contents not OK, for q2.drop.net"
304 exit 1
305 fi
306
307 echo "OK"
308 exit 0
0 server:
1 verbosity: 5
2 # num-threads: 1
3 interface: 127.0.0.1
4 port: @PORT@
5 use-syslog: no
6 directory: .
7 pidfile: "unbound.pid"
8 chroot: ""
9 username: ""
10 do-not-query-localhost: no
11
12 tls-cert-bundle: "unbound_server.pem"
13 tls-upstream: yes
14
15 forward-zone:
16 name: "."
17 forward-addr: "127.0.0.1@@TOPORT@#unbound"
0 # this is the upstream server that has pipelining and responds to queries.
1 server:
2 verbosity: 1
3 # num-threads: 1
4 interface: 127.0.0.1@@PORT@
5 port: @PORT@
6 use-syslog: no
7 directory: .
8 pidfile: "unbound2.pid"
9 chroot: ""
10 username: ""
11 do-not-query-localhost: no
12 tls-port: @PORT@
13 tls-service-key: "unbound_server.key"
14 tls-service-pem: "unbound_server.pem"
15 tcp-idle-timeout: 10000
16
17 log-queries: yes
18 log-replies: yes
19 log-identity: "upstream"
20
21 local-zone: "." refuse
22 local-zone: "example.com" static
23 local-data: "www.example.com A 10.20.30.40"
24 local-data: "www1.example.com A 10.20.30.41"
25 local-data: "www2.example.com A 10.20.30.42"
26 local-data: "www3.example.com A 10.20.30.43"
27 local-data: "www4.example.com A 10.20.30.44"
28 local-data: "www5.example.com A 10.20.30.45"
29 local-data: "www6.example.com A 10.20.30.46"
30 local-data: "www7.example.com A 10.20.30.47"
31
32 local-zone: "drop.net" deny
33 local-zone: "refuse.net" refuse
34
35 local-zone: "more.net" redirect
36 local-data: "more.net A 10.20.30.40"
37
38 # if queries escape, send them to localhost
39 forward-zone:
40 name: "."
41 forward-tls-upstream: yes
42 forward-addr: "127.0.0.1@@TOPORT@"
0 BaseName: tls_reuse
1 Version: 1.0
2 Description: Test tls stream reuse.
3 CreationDate: Wed Jun 30 16:37:00 CET 2020
4 Maintainer: Wouter Wijngaards
5 Category:
6 Component:
7 CmdDepends:
8 Depends:
9 Help:
10 Pre: tls_reuse.pre
11 Post: tls_reuse.post
12 Test: tls_reuse.test
13 AuxFiles:
14 Passed:
15 Failure:
0 # #-- tls_reuse.post --#
1 # source the master var file when it's there
2 [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master
3 # source the test var file when it's there
4 [ -f .tpkg.var.test ] && source .tpkg.var.test
5 #
6 # do your teardown here
7 . ../common.sh
8 kill_pid `cat unbound2.pid`
9 if test -f unbound2.log; then
10 echo ">>> upstream log"
11 cat unbound2.log
12 fi
13 #kill_pid $UNBOUND_PID
14 kill_pid `cat unbound.pid`
15 if test -f unbound.log; then
16 echo ">>> unbound log"
17 cat unbound.log
18 fi
0 # #-- tls_reuse.pre--#
1 # source the master var file when it's there
2 [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master
3 # use .tpkg.var.test for in test variable passing
4 [ -f .tpkg.var.test ] && source .tpkg.var.test
5
6 PRE="../.."
7 . ../common.sh
8 get_random_port 2
9 UNBOUND_PORT=$RND_PORT
10 UPSTREAM_PORT=$(($RND_PORT + 1))
11 echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test
12 echo "UPSTREAM_PORT=$UPSTREAM_PORT" >> .tpkg.var.test
13
14 # make config file
15 sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$UPSTREAM_PORT'/' < tls_reuse.conf > ub.conf
16 # start unbound in the background
17 #$PRE/unbound -d -c ub.conf >unbound.log 2>&1 &
18 $PRE/unbound -d -c ub.conf 2>&1 | tee unbound.log &
19 UNBOUND_PID=$!
20 echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test
21 wait_unbound_up unbound.log
22
23 # make upstream config file
24 sed -e 's/@PORT\@/'$UPSTREAM_PORT'/' -e 's/@TOPORT\@/'$UPSTREAM_PORT'/' < tls_reuse.conf2 > ub2.conf
25 # start upstream unbound in the background
26 #$PRE/unbound -d -c ub2.conf >unbound2.log 2>&1 &
27 $PRE/unbound -d -c ub2.conf 2>&1 | tee unbound2.log &
28 UPSTREAM_PID=$!
29 echo "UPSTREAM_PID=$UPSTREAM_PID" >> .tpkg.var.test
30 wait_unbound_up unbound2.log
31
32 cat .tpkg.var.test
33
0 # #-- tls_reuse.test --#
1 # source the master var file when it's there
2 [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master
3 # use .tpkg.var.test for in test variable passing
4 [ -f .tpkg.var.test ] && source .tpkg.var.test
5
6 PRE="../.."
7 . ../common.sh
8
9 get_make
10 (cd $PRE; $MAKE streamtcp)
11
12 echo "> query www1.example.com."
13 $PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT www1.example.com. A IN >outfile 2>&1
14 cat outfile
15 if test "$?" -ne 0; then
16 echo "exit status not OK"
17 echo "> cat logfiles"
18 cat outfile
19 cat unbound2.log
20 cat unbound.log
21 echo "Not OK"
22 exit 1
23 fi
24 if grep "www1.example.com" outfile | grep "10.20.30.41"; then
25 echo "content OK"
26 else
27 echo "result contents not OK, for www1.example.com"
28 echo "> cat logfiles"
29 cat outfile
30 cat unbound2.log
31 cat unbound.log
32 echo "result contents not OK, for www1.example.com"
33 exit 1
34 fi
35 echo "OK"
36 echo ""
37
38 # this should be reused on the same tcp stream:
39 echo "> query www2.example.com."
40 $PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT www2.example.com. A IN >outfile 2>&1
41 cat outfile
42 if test "$?" -ne 0; then
43 echo "exit status not OK"
44 echo "> cat logfiles"
45 cat outfile
46 cat unbound2.log
47 cat unbound.log
48 echo "Not OK"
49 exit 1
50 fi
51 if grep "www2.example.com" outfile | grep "10.20.30.42"; then
52 echo "content OK"
53 else
54 echo "result contents not OK, for www2.example.com"
55 echo "> cat logfiles"
56 cat outfile
57 cat unbound2.log
58 cat unbound.log
59 echo "result contents not OK, for www2.example.com"
60 exit 1
61 fi
62
63 echo "> query refuse.net."
64 $PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT refuse.net. A IN >outfile 2>&1
65 cat outfile
66 if test "$?" -ne 0; then
67 echo "exit status not OK"
68 echo "> cat logfiles"
69 cat outfile
70 cat unbound2.log
71 cat unbound.log
72 echo "Not OK"
73 exit 1
74 fi
75 if grep "rcode: SERVFAIL" outfile; then
76 echo "content OK"
77 else
78 echo "result contents not OK, for refuse.net"
79 echo "> cat logfiles"
80 cat outfile
81 cat unbound2.log
82 cat unbound.log
83 echo "result contents not OK, for refuse.net"
84 exit 1
85 fi
86
87 echo "> query www3.example.com."
88 echo "> query www4.example.com."
89 echo "> query www5.example.com."
90 echo "> query www6.example.com."
91 $PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT www3.example.com. A IN >outfile3 2>&1 &
92 $PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT www4.example.com. A IN >outfile4 2>&1 &
93 $PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT www5.example.com. A IN >outfile5 2>&1 &
94 $PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT www6.example.com. A IN >outfile6 2>&1 &
95 wait
96 if test "$?" -ne 0; then
97 echo "exit status not OK"
98 echo "> cat logfiles"
99 cat outfile3
100 cat outfile4
101 cat outfile5
102 cat outfile6
103 cat unbound2.log
104 cat unbound.log
105 echo "Not OK"
106 exit 1
107 fi
108 if grep "www3.example.com" outfile3 | grep "10.20.30.43"; then
109 echo "content OK"
110 else
111 echo "result contents not OK, for www3.example.com"
112 echo "> cat logfiles"
113 cat outfile3
114 cat outfile4
115 cat outfile5
116 cat outfile6
117 cat unbound2.log
118 cat unbound.log
119 echo "result contents not OK, for www3.example.com"
120 exit 1
121 fi
122 if grep "www4.example.com" outfile4 | grep "10.20.30.44"; then
123 echo "content OK"
124 else
125 echo "result contents not OK, for www4.example.com"
126 echo "> cat logfiles"
127 cat outfile3
128 cat outfile4
129 cat outfile5
130 cat outfile6
131 cat unbound2.log
132 cat unbound.log
133 echo "result contents not OK, for www4.example.com"
134 exit 1
135 fi
136 if grep "www5.example.com" outfile5 | grep "10.20.30.45"; then
137 echo "content OK"
138 else
139 echo "result contents not OK, for www5.example.com"
140 echo "> cat logfiles"
141 cat outfile3
142 cat outfile4
143 cat outfile5
144 cat outfile6
145 cat unbound2.log
146 cat unbound.log
147 echo "result contents not OK, for www5.example.com"
148 exit 1
149 fi
150 if grep "www6.example.com" outfile6 | grep "10.20.30.46"; then
151 echo "content OK"
152 else
153 echo "result contents not OK, for www6.example.com"
154 echo "> cat logfiles"
155 cat outfile3
156 cat outfile4
157 cat outfile5
158 cat outfile6
159 cat unbound2.log
160 cat unbound.log
161 echo "result contents not OK, for www6.example.com"
162 exit 1
163 fi
164
165 echo "> query a1.more.net a2.more.net a3.more.net a4.more.net a5.more.net"
166 $PRE/streamtcp -a -f 127.0.0.1@$UNBOUND_PORT a1.more.net A IN a2.more.net A IN a3.more.net A IN a4.more.net A IN a5.more.net A IN >outfile 2>&1
167 if test "$?" -ne 0; then
168 echo "exit status not OK"
169 echo "> cat logfiles"
170 cat outfile
171 cat unbound2.log
172 cat unbound.log
173 echo "Not OK"
174 exit 1
175 fi
176 cat outfile
177 for x in a1.more.net a2.more.net a3.more.net a4.more.net a5.more.net; do
178 if grep "$x" outfile | grep "10.20.30.40"; then
179 echo "content OK for $x"
180 else
181 echo "result contents not OK, for $x"
182 echo "> cat logfiles"
183 cat outfile
184 cat unbound2.log
185 cat unbound.log
186 echo "result contents not OK, for $x"
187 exit 1
188 fi
189 done
190
191 # make the server timeout to drop the upstream connection
192 echo "> sleep 15"
193 sleep 15
194 # see if we are still up.
195 echo "> query a7.more.net"
196 $PRE/streamtcp -a -f 127.0.0.1@$UNBOUND_PORT a7.more.net A IN >outfile 2>&1
197 if test "$?" -ne 0; then
198 echo "exit status not OK"
199 echo "> cat logfiles"
200 cat outfile
201 cat unbound2.log
202 cat unbound.log
203 echo "Not OK"
204 exit 1
205 fi
206 cat outfile
207 for x in a7.more.net; do
208 if grep "$x" outfile | grep "10.20.30.40"; then
209 echo "content OK for $x"
210 else
211 echo "result contents not OK, for $x"
212 echo "> cat logfiles"
213 cat outfile
214 cat unbound2.log
215 cat unbound.log
216 echo "result contents not OK, for $x"
217 exit 1
218 fi
219 done
220
221 # dropconn.drop.net make the server drop the connection.
222 echo "> query a11.more.net a12.more.net dropconn.drop.net a14.more.net a15.more.net"
223 $PRE/streamtcp -a -f 127.0.0.1@$UNBOUND_PORT a11.more.net A IN a12.more.net A IN dropconn.drop.net A IN a14.more.net A IN a15.more.net A IN >outfile 2>&1
224 if test "$?" -ne 0; then
225 echo "exit status not OK"
226 echo "> cat logfiles"
227 cat outfile
228 cat unbound2.log
229 cat unbound.log
230 echo "Not OK"
231 exit 1
232 fi
233 cat outfile
234 # cannot really check outfile, because it may or may not have answers depending
235 # on how fast the other server responds or the drop happens, but there are
236 # a bunch of connection drops, whilst resolving the other queries.
237
238 echo "> query drop.net."
239 $PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT drop.net. A IN >outfile 2>&1
240 cat outfile
241 if test "$?" -ne 0; then
242 echo "exit status not OK"
243 echo "> cat logfiles"
244 cat outfile
245 cat unbound2.log
246 cat unbound.log
247 echo "Not OK"
248 exit 1
249 fi
250 if grep "rcode: SERVFAIL" outfile; then
251 echo "content OK"
252 else
253 echo "result contents not OK, for drop.net"
254 echo "> cat logfiles"
255 cat outfile
256 cat unbound2.log
257 cat unbound.log
258 echo "result contents not OK, for drop.net"
259 exit 1
260 fi
261
262 # timeouts at the end. (so that the server is not marked as failed for
263 # the other tests).
264 echo "> query q1.drop.net."
265 echo "> query q2.drop.net."
266 $PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT q1.drop.net. A IN >outfile1 2>&1 &
267 $PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT q2.drop.net. A IN >outfile2 2>&1 &
268 wait
269 if test "$?" -ne 0; then
270 echo "exit status not OK"
271 echo "> cat logfiles"
272 cat outfile1
273 cat outfile2
274 cat unbound2.log
275 cat unbound.log
276 echo "Not OK"
277 exit 1
278 fi
279 cat outfile1
280 cat outfile2
281 if grep "rcode: SERVFAIL" outfile1; then
282 echo "content OK"
283 else
284 echo "result contents not OK, for q1.drop.net"
285 echo "> cat logfiles"
286 cat outfile1
287 cat outfile2
288 cat unbound2.log
289 cat unbound.log
290 echo "result contents not OK, for q1.drop.net"
291 exit 1
292 fi
293 if grep "rcode: SERVFAIL" outfile2; then
294 echo "content OK"
295 else
296 echo "result contents not OK, for q2.drop.net"
297 echo "> cat logfiles"
298 cat outfile1
299 cat outfile2
300 cat unbound2.log
301 cat unbound.log
302 echo "result contents not OK, for q2.drop.net"
303 exit 1
304 fi
305
306 echo "OK"
307 exit 0
0 -----BEGIN RSA PRIVATE KEY-----
1 MIIG4gIBAAKCAYEAstEp+Pyh8XGrtZ77A4FhYjvbeB3dMa7Q2rGWxobzlA9przhA
2 1aChAvUtCOAuM+rB6NTNB8YWfZJbQHawyMNpmC77cg6vXLYCGUQHZyAqidN049RJ
3 F5T7j4N8Vniv17LiRdr0S6swy4PRvEnIPPV43EQHZqC5jVvHsKkhIfmBF/Dj5TXR
4 ypeawWV/m5jeU6/4HRYMfytBZdO1mPXuWLh0lgbQ4SCbgrOUVD3rniMk1yZIbQOm
5 vlDHYqekjDb/vOW2KxUQLG04aZMJ1mWfdbwG0CKQkSjISEDZ1l76vhM6mTM0fwXb
6 IvyFZ9yPPCle1mF5aSlxS2cmGuGVSRQaw8XF9fe3a9ACJJTr33HdSpyaZkKRAUzL
7 cKqLCl323daKv3NwwAT03Tj4iQM416ASMoiyfFa/2GWTKQVjddu8Crar7tGaf5xr
8 lig4DBmrBvdYA3njy72/RD71hLwmlRoCGU7dRuDr9O6KASUm1Ri91ONZ/qdjMvov
9 15l2vj4GV+KXR00dAgMBAAECggGAHepIL1N0dEQkCdpy+/8lH54L9WhpnOo2HqAf
10 LU9eaKK7d4jdr9+TkD8cLaPzltPrZNxVALvu/0sA4SP6J1wpyj/x6P7z73qzly5+
11 Xo5PD4fEwmi9YaiW/UduAblnEZrnp/AddptJKoL/D5T4XtpiQddPtael4zQ7kB57
12 YIexRSQTvEDovA/o3/nvA0TrzOxfgd4ycQP3iOWGN/TMzyLsvjydrUwbOB567iz9
13 whL3Etdgvnwh5Sz2blbFfH+nAR8ctvFFz+osPvuIVR21VMEI6wm7kTpSNnQ6sh/c
14 lrLb/bTADn4g7z/LpIZJ+MrLvyEcoqValrLYeFBhM9CV8woPxvkO2P3pU47HVGax
15 tC7GV6a/kt5RoKFd/TNdiA3OC7NGZtaeXv9VkPf4fVwBtSO9d5ZZXTGEynDD/rUQ
16 U4KFJe6OD23APjse08HiiKqTPhsOneOONU67iqoaTdIkT2R4EdlkVEDpXVtWb+G9
17 Q+IqYzVljlzuyHrhWXLJw/FMa2aBAoHBAOnZbi4gGpH+P6886WDWVgIlTccuXoyc
18 Mg9QQYk9UDeXxL0AizR5bZy49Sduegz9vkHpAiZARQsUnizHjZ8YlRcrmn4t6tx3
19 ahTIKAjdprnxJfYINM580j8CGbXvX5LhIlm3O267D0Op+co3+7Ujy+cjsIuFQrP+
20 1MqMgXSeBjzC1APivmps7HeFE+4w0k2PfN5wSMDNCzLo99PZuUG5XZ93OVOS5dpN
21 b+WskdcD8NOoJy/X/5A08veEI/jYO/DyqQKBwQDDwUQCOWf41ecvJLtBHKmEnHDz
22 ftzHino9DRKG8a9XaN4rmetnoWEaM2vHGX3pf3mwH+dAe8vJdAQueDhBKYeEpm6C
23 TYNOpou1+Zs5s99BilCTNYo8fkMOAyqwRwmz9zgHS6QxXuPwsghKefLJGt6o6RFF
24 tfWVTfLlYJ+I3GQe3ySsk3wjVz4oUTKiyiq5+KzD+HhEkS7u+RQ7Z0ZI2xd2cF8Y
25 aN2hjKDpcOiFf3CDoqka5D1qMNLgIHO52AHww1UCgcA1h7o7AMpURRka6hyaODY0
26 A4oMYEbwdQjYjIyT998W+rzkbu1us6UtzQEBZ760npkgyU/epbOoV63lnkCC/MOU
27 LD0PST+L/CHiY/cWIHb79YG1EifUZKpUFg0Aoq0EGFkepF0MefGCkbRGYA5UZr9U
28 R80wAu9D+L+JJiS0J0BSRF74DL196zUuHt5zFeXuLzxsRtPAnq9DliS08BACRYZy
29 7H3I7cWD9Vn5/0jbKWHFcaaWwyETR6uekTcSzZzbCRECgcBeoE3/xUA9SSk34Mmj
30 7/cB4522Ft0imA3+9RK/qJTZ7Bd5fC4PKjOGNtUiqW/0L2rjeIiQ40bfWvWqgPKw
31 jSK1PL6uvkl6+4cNsFsYyZpiVDoe7wKju2UuoNlB3RUTqa2r2STFuNj2wRjA57I1
32 BIgdnox65jqQsd14g/yaa+75/WP9CE45xzKEyrtvdcqxm0Pod3OrsYK+gikFjiar
33 kT0GQ8u0QPzh2tjt/2ZnIfOBrl+QYERP0MofDZDjhUdq2wECgcB0Lu841+yP5cdR
34 qbJhXO4zJNh7oWNcJlOuQp3ZMNFrA1oHpe9pmLukiROOy01k9WxIMQDzU5GSqRv3
35 VLkYOIcbhJ3kClKAcM3j95SkKbU2H5/RENb3Ck52xtl4pNU1x/3PnVFZfDVuuHO9
36 MZ9YBcIeK98MyP2jr5JtFKnOyPE7xKq0IHIhXadpbc2wjje5FtZ1cUtMyEECCXNa
37 C1TpXebHGyXGpY9WdWXhjdE/1jPvfS+uO5WyuDpYPr339gsdq1g=
38 -----END RSA PRIVATE KEY-----
0 -----BEGIN CERTIFICATE-----
1 MIIDszCCAhsCFGD5193whHQ2bVdzbaQfdf1gc4SkMA0GCSqGSIb3DQEBCwUAMBIx
2 EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjMwWhcNNDAwMzI1MTMzMjMw
3 WjAaMRgwFgYDVQQDDA91bmJvdW5kLWNvbnRyb2wwggGiMA0GCSqGSIb3DQEBAQUA
4 A4IBjwAwggGKAoIBgQCy0Sn4/KHxcau1nvsDgWFiO9t4Hd0xrtDasZbGhvOUD2mv
5 OEDVoKEC9S0I4C4z6sHo1M0HxhZ9kltAdrDIw2mYLvtyDq9ctgIZRAdnICqJ03Tj
6 1EkXlPuPg3xWeK/XsuJF2vRLqzDLg9G8Scg89XjcRAdmoLmNW8ewqSEh+YEX8OPl
7 NdHKl5rBZX+bmN5Tr/gdFgx/K0Fl07WY9e5YuHSWBtDhIJuCs5RUPeueIyTXJkht
8 A6a+UMdip6SMNv+85bYrFRAsbThpkwnWZZ91vAbQIpCRKMhIQNnWXvq+EzqZMzR/
9 Bdsi/IVn3I88KV7WYXlpKXFLZyYa4ZVJFBrDxcX197dr0AIklOvfcd1KnJpmQpEB
10 TMtwqosKXfbd1oq/c3DABPTdOPiJAzjXoBIyiLJ8Vr/YZZMpBWN127wKtqvu0Zp/
11 nGuWKDgMGasG91gDeePLvb9EPvWEvCaVGgIZTt1G4Ov07ooBJSbVGL3U41n+p2My
12 +i/XmXa+PgZX4pdHTR0CAwEAATANBgkqhkiG9w0BAQsFAAOCAYEAd++Wen6l8Ifj
13 4h3p/y16PhSsWJWuJ4wdNYy3/GM84S26wGjzlEEwiW76HpH6VJzPOiBAeWnFKE83
14 hFyetEIxgJeIPbcs9ZP/Uoh8GZH9tRISBSN9Hgk2Slr9llo4t1H0g/XTgA5HqMQU
15 9YydlBh43G7Vw3FVwh09OM6poNOGQKNc/tq2/QdKeUMtyBbLWpRmjH5XcCT35fbn
16 ZiVOUldqSHD4kKrFO4nJYXZyipRbcXybsLiX9GP0GLemc3IgIvOXyJ2RPp06o/SJ
17 pzlMlkcAfLJaSuEW57xRakhuNK7m051TKKzJzIEX+NFYOVdafFHS8VwGrYsdrFvD
18 72tMfu+Fu55y3awdWWGc6YlaGogZiuMnJkvQphwgn+5qE/7CGEckoKEsH601rqIZ
19 muaIc85+nEcHJeijd/ZlBN9zeltjFoMuqTUENgmv8+tUAdVm/UMY9Vjme6b43ydP
20 uv6DS02+k9z8toxXworLiPr94BGaiGV1NxgwZKLZigYJt/Fi2Qte
21 -----END CERTIFICATE-----
0 -----BEGIN RSA PRIVATE KEY-----
1 MIIG5AIBAAKCAYEAvjSVSN2QMXudpzukdLCqgg/IOhCX8KYkD0FFFfWcQjgKq5wI
2 0x41iG32a6wbGanre4IX7VxaSPu9kkHfnGgynCk5nwDRedE/FLFhAU78PoT0+Nqq
3 GRS7XVQ24vLmIz9Hqc2Ozx1um1BXBTmIT0UfN2e22I0LWQ6a3seZlEDRj45gnk7Z
4 uh9MDgotaBdm+v1JAbupSf6Zis4VEH3JNdvVGE3O1DHEIeuuz/3BDhpf6WBDH+8K
5 WaBe1ca4TZHr9ThL2gEMEfAQl0wXDwRWRoi3NjNMH+mw0L1rjwThI5GXqNIee7o5
6 FzUReSXZuTdFMyGe3Owcx+XoYnwi6cplSNoGsDBu4B9bKKglR9YleJVw4L4Xi8xP
7 q6O9UPj4+nypHk/DOoC7DIM3ufN0yxPBsFo5TVowxfhdjZXJbbftd2TZv7AH8+XL
8 A5UoZgRzXgzECelXSCTBFlMTnT48LfA9pMLydyjAz2UdPHs5Iv+TK5nnI+aJoeaP
9 7kFZSngxdy1+A/bNAgMBAAECggGBALpTOIqQwVg4CFBylL/a8K1IWJTI/I65sklf
10 XxYL7G7SB2HlEJ//z+E+F0+S4Vlao1vyLQ5QkgE82pAUB8FoMWvY1qF0Y8A5wtm6
11 iZSGk4OLK488ZbT8Ii9i+AGKgPe2XbVxsJwj8N4k7Zooqec9hz73Up8ATEWJkRz7
12 2u7oMGG4z91E0PULA64dOi3l/vOQe5w/Aa+CwVbAWtI05o7kMvQEBMDJn6C7CByo
13 MB5op9wueJMnz7PM7hns+U7Dy6oE4ljuolJUy51bDzFWwoM54cRoQqLFNHd8JVQj
14 WxldCkbfF43iyprlsEcUrTyUjtdA+ZeiG39vg/mtdmgNpGmdupHJZQvSuG8IcVlz
15 O+eMSeQS1QXPD6Ik8UK4SU0h+zOl8xIWtRrsxQuh4fnTN40udm/YUWl/6gOebsBI
16 IrVLlKGqJSfB3tMjpCRqdTzJ0dA9keVpkqm2ugZkxEf1+/efq/rFIQ2pUBLCqNTN
17 qpNqruK8y8FphP30I2uI4Ej2UIB8AQKBwQDd2Yptj2FyDyaXCycsyde0wYkNyzGU
18 dRnzdibfHnMZwjgTjwAwgIUBVIS8H0/z7ZJQKN7osJfddMrtjJtYYUk9g/dCpHXs
19 bNh2QSoWah3FdzNGuWd0iRf9+LFxhjAAMo/FS8zFJAJKrFsBdCGTfFUMdsLC0bjr
20 YjiWBuvV72uKf8XIZX5KIZruKdWBBcWukcb21R1UDyFYyXRBsly5XHaIYKZql3km
21 7pV7MKWO0IYgHbHIqGUqPQlzZ/lkunS1jKECgcEA23wHffD6Ou9/x3okPx2AWpTr
22 gh8rgqbyo6hQkBW5Y90Wz824cqaYebZDaBR/xlVx/YwjKkohv8Bde2lpH/ZxRZ1Z
23 5Sk2s6GJ/vU0L9RsJZgCgj4L6Coal1NMxuZtCXAlnOpiCdxSZgfqbshbTVz30KsG
24 ZJG361Cua1ScdAHxlZBxT52/1Sm0zRC2hnxL7h4qo7Idmtzs40LAJvYOKekR0pPN
25 oWeJfra7vgx/jVNvMFWoOoSLpidVO4g+ot4ery6tAoHAdW3rCic1C2zdnmH28Iw+
26 s50l8Lk3mz+I5wgJd1zkzCO0DxZIoWPGA3g7cmCYr6N3KRsZMs4W9NAXgjpFGDkW
27 zYsG3K21BdpvkdjYcFjnPVjlOXB2RIc0vehf9Jl02wXoeCSxVUDEPcaRvWk9RJYx
28 ZpGOchUU7vNkxHURbIJ4yCzuAi9G8/Jp0dsu+kaV5tufF5SjG5WOrzKjaQsCbdN1
29 oqaWMCHRrTvov/Z2C+xwsptFOdN5CSyZzg6hQiI4GMlBAoHAXyb6KINcOEi0YMp3
30 BFXJ23tMTnEs78tozcKeipigcsbaqORK3omS+NEnj+uzKUzJyl4CsMbKstK2tFYS
31 mSTCHqgE3PBtIpsZtEqhgUraR8IK9GPpzZDTTl9ynZgwFTNlWw3RyuyVXF56J+T8
32 kCGJ3hEHCHqT/ZRQyX85BKIDFhA0z4tYKxWVqIFiYBNq56R0X9tMMmMs36mEnF93
33 7Ht6mowxTZQRa7nU0qOgeKh/P7ki4Zus3y+WJ+T9IqahLtlRAoHBAIhqMrcxSAB8
34 RpB9jukJlAnidw2jCMPgrFE8tP0khhVvGrXMldxAUsMKntDIo8dGCnG1KTcWDI0O
35 jepvSPHSsxVLFugL79h0eVIS5z4huW48i9xgU8VlHdgAcgEPIAOFcOw2BCu/s0Vp
36 O+MM/EyUOdo3NsibB3qc/GJI6iNBYS7AljYEVo6rXo5V/MZvZUF4vClen6Obzsre
37 MTTb+4sJjfqleWuvr1XNMeu2mBfXBQkWGZP1byBK0MvD/aQ2PWq92A==
38 -----END RSA PRIVATE KEY-----
0 -----BEGIN CERTIFICATE-----
1 MIIDqzCCAhMCFBHWXeQ6ZIa9QcQbXLFfC6tj+KA+MA0GCSqGSIb3DQEBCwUAMBIx
2 EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjI5WhcNNDAwMzI1MTMzMjI5
3 WjASMRAwDgYDVQQDDAd1bmJvdW5kMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIB
4 igKCAYEAvjSVSN2QMXudpzukdLCqgg/IOhCX8KYkD0FFFfWcQjgKq5wI0x41iG32
5 a6wbGanre4IX7VxaSPu9kkHfnGgynCk5nwDRedE/FLFhAU78PoT0+NqqGRS7XVQ2
6 4vLmIz9Hqc2Ozx1um1BXBTmIT0UfN2e22I0LWQ6a3seZlEDRj45gnk7Zuh9MDgot
7 aBdm+v1JAbupSf6Zis4VEH3JNdvVGE3O1DHEIeuuz/3BDhpf6WBDH+8KWaBe1ca4
8 TZHr9ThL2gEMEfAQl0wXDwRWRoi3NjNMH+mw0L1rjwThI5GXqNIee7o5FzUReSXZ
9 uTdFMyGe3Owcx+XoYnwi6cplSNoGsDBu4B9bKKglR9YleJVw4L4Xi8xPq6O9UPj4
10 +nypHk/DOoC7DIM3ufN0yxPBsFo5TVowxfhdjZXJbbftd2TZv7AH8+XLA5UoZgRz
11 XgzECelXSCTBFlMTnT48LfA9pMLydyjAz2UdPHs5Iv+TK5nnI+aJoeaP7kFZSngx
12 dy1+A/bNAgMBAAEwDQYJKoZIhvcNAQELBQADggGBABunf93MKaCUHiZgnoOTinsW
13 84/EgInrgtKzAyH+BhnKkJOhhR0kkIAx5d9BpDlaSiRTACFon9moWCgDIIsK/Ar7
14 JE0Kln9cV//wiiNoFU0O4mnzyGUIMvlaEX6QHMJJQYvL05+w/3AAcf5XmMJtR5ca
15 fJ8FqvGC34b2WxX9lTQoyT52sRt+1KnQikiMEnEyAdKktMG+MwKsFDdOwDXyZhZg
16 XZhRrfX3/NVJolqB6EahjWIGXDeKuSSKZVtCyib6LskyeMzN5lcRfvubKDdlqFVF
17 qlD7rHBsKhQUWK/IO64mGf7y/de+CgHtED5vDvr/p2uj/9sABATfbrOQR3W/Of25
18 sLBj4OEfrJ7lX8hQgFaxkMI3x6VFT3W8dTCp7xnQgb6bgROWB5fNEZ9jk/gjSRmD
19 yIU+r0UbKe5kBk/CmZVFXL2TyJ92V5NYEQh8V4DGy19qZ6u/XKYyNJL4ocs35GGe
20 CA8SBuyrmdhx38h1RHErR2Skzadi1S7MwGf1y431fQ==
21 -----END CERTIFICATE-----
169169 cfg->infra_cache_slabs = 4;
170170 cfg->infra_cache_numhosts = 10000;
171171 cfg->infra_cache_min_rtt = 50;
172 cfg->infra_keep_probing = 0;
172173 cfg->delay_close = 0;
174 cfg->udp_connect = 1;
173175 if(!(cfg->outgoing_avail_ports = (int*)calloc(65536, sizeof(int))))
174176 goto error_exit;
175177 init_outgoing_availports(cfg->outgoing_avail_ports, 65536);
320322 cfg->qname_minimisation_strict = 0;
321323 cfg->shm_enable = 0;
322324 cfg->shm_key = 11777;
323 cfg->edns_client_tags = NULL;
324 cfg->edns_client_tag_opcode = LDNS_EDNS_CLIENT_TAG;
325 cfg->edns_client_strings = NULL;
326 cfg->edns_client_string_opcode = 65001;
325327 cfg->dnscrypt = 0;
326328 cfg->dnscrypt_port = 0;
327329 cfg->dnscrypt_provider = NULL;
521523 else S_STR("tls-ciphersuites:", tls_ciphersuites)
522524 else S_YNO("tls-use-sni:", tls_use_sni)
523525 else S_NUMBER_NONZERO("https-port:", https_port)
524 else S_STR("http-endpoint", http_endpoint)
525 else S_NUMBER_NONZERO("http-max-streams", http_max_streams)
526 else S_MEMSIZE("http-query-buffer-size", http_query_buffer_size)
527 else S_MEMSIZE("http-response-buffer-size", http_response_buffer_size)
528 else S_YNO("http-nodelay", http_nodelay)
526 else S_STR("http-endpoint:", http_endpoint)
527 else S_NUMBER_NONZERO("http-max-streams:", http_max_streams)
528 else S_MEMSIZE("http-query-buffer-size:", http_query_buffer_size)
529 else S_MEMSIZE("http-response-buffer-size:", http_response_buffer_size)
530 else S_YNO("http-nodelay:", http_nodelay)
531 else S_YNO("http-notls-downstream:", http_notls_downstream)
529532 else S_YNO("interface-automatic:", if_automatic)
530533 else S_YNO("use-systemd:", use_systemd)
531534 else S_YNO("do-daemonize:", do_daemonize)
561564 IS_NUMBER_OR_ZERO; cfg->infra_cache_min_rtt = atoi(val);
562565 RTT_MIN_TIMEOUT=cfg->infra_cache_min_rtt;
563566 }
567 else S_YNO("infra-keep-probing:", infra_keep_probing)
564568 else S_NUMBER_OR_ZERO("infra-host-ttl:", host_ttl)
565569 else S_POW2("infra-cache-slabs:", infra_cache_slabs)
566570 else S_SIZET_NONZERO("infra-cache-numhosts:", infra_cache_numhosts)
567571 else S_NUMBER_OR_ZERO("delay-close:", delay_close)
572 else S_YNO("udp-connect:", udp_connect)
568573 else S_STR("chroot:", chrootdir)
569574 else S_STR("username:", username)
570575 else S_STR("directory:", directory)
957962 else O_DEC(opt, "infra-host-ttl", host_ttl)
958963 else O_DEC(opt, "infra-cache-slabs", infra_cache_slabs)
959964 else O_DEC(opt, "infra-cache-min-rtt", infra_cache_min_rtt)
965 else O_YNO(opt, "infra-keep-probing", infra_keep_probing)
960966 else O_MEM(opt, "infra-cache-numhosts", infra_cache_numhosts)
961967 else O_UNS(opt, "delay-close", delay_close)
968 else O_YNO(opt, "udp-connect", udp_connect)
962969 else O_YNO(opt, "do-ip4", do_ip4)
963970 else O_YNO(opt, "do-ip6", do_ip6)
964971 else O_YNO(opt, "do-udp", do_udp)
989996 else O_MEM(opt, "http-query-buffer-size", http_query_buffer_size)
990997 else O_MEM(opt, "http-response-buffer-size", http_response_buffer_size)
991998 else O_YNO(opt, "http-nodelay", http_nodelay)
999 else O_YNO(opt, "http-notls-downstream", http_notls_downstream)
9921000 else O_YNO(opt, "use-systemd", use_systemd)
9931001 else O_YNO(opt, "do-daemonize", do_daemonize)
9941002 else O_STR(opt, "chroot", chrootdir)
11491157 else O_LS3(opt, "access-control-tag-action", acl_tag_actions)
11501158 else O_LS3(opt, "access-control-tag-data", acl_tag_datas)
11511159 else O_LS2(opt, "access-control-view", acl_view)
1152 else O_LS2(opt, "edns-client-tags", edns_client_tags)
1160 else O_LS2(opt, "edns-client-strings", edns_client_strings)
11531161 #ifdef USE_IPSECMOD
11541162 else O_YNO(opt, "ipsecmod-enabled", ipsecmod_enabled)
11551163 else O_YNO(opt, "ipsecmod-ignore-bogus", ipsecmod_ignore_bogus)
15181526 config_deldblstrlist(cfg->ratelimit_below_domain);
15191527 config_delstrlist(cfg->python_script);
15201528 config_delstrlist(cfg->dynlib_file);
1521 config_deldblstrlist(cfg->edns_client_tags);
1529 config_deldblstrlist(cfg->edns_client_strings);
15221530 #ifdef USE_IPSECMOD
15231531 free(cfg->ipsecmod_hook);
15241532 config_delstrlist(cfg->ipsecmod_whitelist);
142142 size_t http_response_buffer_size;
143143 /** set TCP_NODELAY option for http sockets */
144144 int http_nodelay;
145 /** Disable TLS for http sockets downstream */
146 int http_notls_downstream;
145147
146148 /** outgoing port range number of ports (per thread) */
147149 int outgoing_num_ports;
178180 size_t infra_cache_numhosts;
179181 /** min value for infra cache rtt */
180182 int infra_cache_min_rtt;
183 /** keep probing hosts that are down */
184 int infra_keep_probing;
181185 /** delay close of udp-timeouted ports, if 0 no delayclose. in msec */
182186 int delay_close;
187 /** udp_connect enable uses UDP connect to mitigate ICMP side channel */
188 int udp_connect;
183189
184190 /** the target fetch policy for the iterator */
185191 char* target_fetch_policy;
561567 /** SHM data - key for the shm */
562568 int shm_key;
563569
564 /** list of EDNS client tag entries, linked list */
565 struct config_str2list* edns_client_tags;
566 /** EDNS opcode to use for EDNS client tags */
567 uint16_t edns_client_tag_opcode;
570 /** list of EDNS client string entries, linked list */
571 struct config_str2list* edns_client_strings;
572 /** EDNS opcode to use for EDNS client strings */
573 uint16_t edns_client_string_opcode;
568574
569575 /** DNSCrypt */
570576 /** true to enable dnscrypt */
353353 (yy_hold_char) = *yy_cp; \
354354 *yy_cp = '\0'; \
355355 (yy_c_buf_p) = yy_cp;
356 #define YY_NUM_RULES 334
357 #define YY_END_OF_BUFFER 335
356 #define YY_NUM_RULES 337
357 #define YY_END_OF_BUFFER 338
358358 /* This struct is not used in this scanner,
359359 but its presence is necessary. */
360360 struct yy_trans_info
362362 flex_int32_t yy_verify;
363363 flex_int32_t yy_nxt;
364364 };
365 static const flex_int16_t yy_accept[3253] =
365 static const flex_int16_t yy_accept[3292] =
366366 { 0,
367 1, 1, 308, 308, 312, 312, 316, 316, 320, 320,
368 1, 1, 324, 324, 328, 328, 335, 332, 1, 306,
369 306, 333, 2, 332, 332, 332, 332, 332, 332, 332,
370 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
371 332, 332, 332, 332, 332, 333, 308, 309, 309, 310,
372 333, 312, 313, 313, 314, 333, 319, 316, 317, 317,
373 318, 333, 320, 321, 321, 322, 333, 331, 307, 2,
374 311, 331, 333, 327, 324, 325, 325, 326, 333, 328,
375 329, 329, 330, 333, 332, 0, 1, 2, 2, 2,
376 2, 332, 332, 332, 332, 332, 332, 332, 332, 332,
377
378 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
379 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
380 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
381 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
382 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
383 332, 332, 332, 332, 332, 332, 332, 308, 0, 312,
384 0, 319, 0, 316, 320, 0, 331, 0, 2, 2,
385 331, 327, 0, 324, 328, 0, 332, 332, 332, 332,
386 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
387 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
388
389 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
390 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
391 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
392 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
393 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
394 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
395 332, 332, 332, 332, 332, 332, 332, 331, 332, 332,
396 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
397 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
398 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
399
400 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
401 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
402 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
403 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
404 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
405 332, 332, 122, 332, 332, 332, 332, 332, 332, 332,
406 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
407 332, 332, 332, 131, 332, 332, 332, 332, 332, 332,
408 332, 331, 332, 332, 332, 332, 332, 332, 332, 332,
409 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
410
411 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
412 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
413 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
414 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
415 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
416 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
417 106, 332, 332, 332, 332, 332, 332, 8, 332, 332,
418 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
419 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
420 332, 332, 332, 332, 332, 332, 332, 123, 332, 332,
421
422 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
423 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
424 332, 332, 332, 332, 332, 332, 332, 136, 332, 331,
425 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
426 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
427 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
428 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
429 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
430 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
431 332, 332, 332, 332, 332, 332, 332, 299, 332, 332,
432
433 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
434 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
435 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
436 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
437 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
438 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
439 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
440 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
441 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
442 332, 332, 332, 332, 332, 332, 332, 332, 332, 331,
443
444 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
445 332, 332, 63, 332, 332, 332, 332, 332, 332, 332,
446 332, 332, 332, 332, 332, 332, 332, 235, 332, 14,
447 15, 332, 19, 18, 332, 332, 219, 332, 332, 332,
448 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
449 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
450 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
451 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
452 332, 332, 332, 332, 332, 332, 332, 129, 332, 332,
453 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
454
455 332, 332, 332, 332, 332, 332, 332, 332, 332, 217,
456 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
457 332, 332, 332, 332, 332, 332, 332, 332, 3, 332,
458 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
459 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
460 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
461 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
462 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
463 332, 332, 331, 332, 332, 332, 332, 332, 332, 332,
464 293, 332, 332, 292, 332, 332, 332, 332, 332, 332,
465
466 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
467 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
468 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
469 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
470 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
471 315, 332, 332, 332, 332, 332, 332, 332, 62, 332,
472 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
473 332, 332, 332, 332, 332, 66, 332, 266, 332, 332,
474 332, 332, 332, 332, 332, 332, 300, 301, 332, 332,
475 332, 332, 332, 67, 332, 332, 130, 332, 332, 332,
476
477 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
478 332, 126, 332, 332, 332, 332, 332, 332, 332, 332,
479 206, 332, 332, 332, 332, 332, 332, 332, 332, 332,
480 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
481 332, 21, 332, 332, 332, 332, 332, 332, 332, 332,
482 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
483 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
484 155, 332, 332, 331, 315, 332, 332, 332, 332, 332,
485 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
486 332, 332, 332, 332, 332, 332, 104, 332, 332, 332,
487
488 332, 332, 332, 332, 274, 332, 332, 332, 332, 332,
489 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
490 332, 332, 178, 332, 332, 332, 332, 332, 332, 332,
491 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
492 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
493 332, 154, 332, 332, 332, 332, 332, 332, 332, 332,
494 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
495 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
496 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
497 332, 332, 332, 103, 332, 332, 332, 332, 332, 332,
498
499 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
500 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
501 332, 32, 332, 332, 332, 332, 332, 332, 332, 332,
502 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
503 332, 33, 332, 332, 332, 332, 332, 332, 332, 332,
504 332, 332, 332, 332, 332, 332, 64, 332, 332, 332,
505 332, 332, 332, 332, 332, 332, 128, 331, 332, 332,
506 332, 332, 332, 121, 332, 332, 332, 332, 332, 332,
507 332, 332, 332, 332, 332, 332, 332, 332, 332, 65,
508 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
509
510 332, 332, 239, 332, 332, 332, 332, 332, 332, 332,
511 332, 332, 332, 332, 332, 332, 179, 332, 332, 332,
512 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
513 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
514 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
515 332, 332, 53, 332, 332, 332, 332, 332, 332, 332,
516 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
517 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
518 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
519 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
520
521 332, 332, 332, 257, 332, 332, 332, 332, 332, 332,
522 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
523 332, 332, 57, 332, 58, 332, 332, 332, 332, 332,
524 107, 332, 108, 332, 332, 332, 332, 105, 332, 332,
525 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
526 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
527 332, 332, 332, 332, 332, 332, 7, 332, 331, 332,
528 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
529 332, 332, 332, 332, 332, 332, 332, 228, 332, 332,
530 332, 332, 157, 332, 332, 332, 332, 332, 332, 332,
531
532 332, 332, 332, 332, 332, 332, 332, 332, 332, 240,
533 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
534 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
535 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
536 332, 332, 332, 332, 332, 45, 332, 332, 332, 332,
537 332, 332, 332, 332, 54, 332, 332, 332, 332, 332,
538 332, 332, 332, 332, 332, 332, 332, 332, 332, 198,
539 332, 197, 332, 332, 332, 332, 332, 332, 332, 332,
540 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
541 332, 332, 332, 332, 332, 332, 332, 332, 16, 17,
542
543 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
544 332, 332, 332, 68, 332, 332, 332, 332, 332, 332,
545 332, 332, 332, 332, 332, 205, 332, 332, 332, 332,
546 332, 332, 110, 332, 109, 332, 332, 332, 332, 332,
547 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
548 332, 332, 332, 332, 332, 332, 189, 332, 332, 332,
549 332, 332, 332, 332, 332, 137, 331, 332, 332, 332,
550 332, 332, 332, 332, 332, 332, 332, 98, 332, 332,
551 332, 332, 332, 332, 332, 332, 332, 87, 332, 332,
552 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
553
554 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
555 332, 332, 332, 218, 332, 332, 332, 332, 332, 332,
556 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
557 332, 332, 91, 332, 332, 332, 332, 332, 332, 332,
558 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
559 332, 332, 61, 332, 332, 332, 332, 332, 332, 332,
560 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
561 332, 192, 193, 332, 332, 332, 268, 332, 332, 332,
562 332, 332, 332, 332, 332, 332, 332, 332, 332, 6,
563 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
564
565 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
566 332, 272, 332, 332, 332, 332, 332, 332, 294, 332,
567 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
568 332, 332, 332, 332, 332, 332, 332, 332, 332, 42,
569 332, 332, 332, 332, 44, 332, 332, 332, 332, 332,
570 332, 332, 332, 51, 332, 332, 332, 332, 332, 332,
571 332, 331, 332, 185, 332, 332, 332, 132, 332, 332,
572 332, 332, 332, 332, 332, 332, 332, 332, 210, 332,
573 186, 332, 332, 332, 225, 332, 332, 332, 332, 332,
574 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
575
576 332, 332, 332, 332, 332, 52, 332, 332, 332, 332,
577 332, 332, 332, 332, 332, 332, 134, 115, 332, 116,
578 332, 332, 332, 114, 332, 332, 332, 332, 332, 332,
579 332, 332, 152, 332, 332, 50, 332, 332, 332, 332,
580 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
581 256, 332, 332, 332, 332, 332, 332, 332, 332, 332,
582 187, 332, 332, 332, 332, 332, 190, 332, 196, 332,
583 332, 332, 332, 332, 224, 332, 332, 332, 332, 332,
584 332, 332, 332, 332, 332, 332, 332, 332, 332, 102,
585 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
586
587 332, 332, 332, 332, 332, 332, 332, 332, 127, 332,
588 332, 332, 332, 332, 332, 59, 332, 332, 332, 26,
589 332, 332, 332, 332, 332, 332, 332, 332, 332, 20,
590 332, 332, 332, 332, 332, 332, 27, 36, 332, 162,
591 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
592 332, 332, 332, 331, 332, 332, 332, 332, 332, 332,
593 76, 78, 332, 332, 332, 332, 332, 332, 332, 332,
594 332, 332, 332, 332, 332, 276, 332, 332, 332, 332,
595 236, 332, 332, 332, 332, 332, 332, 332, 332, 332,
596 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
597
598 332, 332, 332, 117, 332, 332, 332, 332, 332, 332,
599 332, 332, 332, 151, 332, 46, 332, 332, 332, 332,
600 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
601 332, 332, 332, 332, 332, 287, 332, 332, 332, 332,
602 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
603 332, 332, 332, 332, 156, 332, 332, 332, 332, 332,
604 332, 332, 332, 332, 332, 332, 332, 332, 216, 332,
605 332, 332, 332, 332, 332, 332, 332, 332, 297, 332,
606 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
607 173, 332, 332, 332, 332, 332, 332, 332, 332, 111,
608
609 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
610 332, 332, 332, 332, 332, 332, 332, 332, 332, 168,
611 332, 180, 332, 332, 332, 332, 331, 332, 140, 332,
612 332, 332, 332, 332, 97, 332, 332, 332, 332, 208,
613 332, 332, 332, 332, 332, 332, 226, 332, 332, 332,
614 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
615 332, 332, 332, 248, 332, 332, 332, 332, 332, 332,
616 332, 332, 332, 332, 133, 332, 332, 332, 332, 332,
617 332, 332, 332, 332, 332, 332, 332, 332, 172, 332,
618 332, 332, 332, 332, 332, 79, 80, 332, 332, 332,
619
620 332, 332, 60, 290, 332, 332, 332, 332, 332, 86,
621 181, 332, 199, 332, 229, 332, 332, 191, 269, 332,
622 332, 332, 332, 332, 72, 332, 183, 332, 332, 332,
623 332, 332, 9, 332, 332, 332, 101, 332, 332, 332,
624 332, 261, 332, 332, 332, 332, 207, 332, 332, 332,
625 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
626 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
627 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
628 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
629 332, 332, 331, 332, 332, 332, 332, 171, 332, 332,
630
631 332, 332, 332, 332, 332, 332, 332, 332, 158, 332,
632 275, 332, 332, 332, 332, 332, 247, 332, 332, 332,
633 332, 332, 332, 332, 332, 332, 332, 332, 220, 332,
634 332, 304, 332, 332, 332, 267, 332, 332, 332, 332,
635 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
636 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
637 332, 332, 332, 332, 291, 332, 182, 332, 332, 332,
638 332, 332, 332, 332, 71, 73, 332, 332, 332, 332,
639 332, 332, 332, 100, 332, 332, 332, 332, 259, 332,
640 332, 332, 332, 271, 332, 332, 332, 332, 332, 332,
641
642 332, 332, 332, 332, 332, 212, 34, 28, 30, 332,
643 332, 332, 332, 332, 332, 332, 332, 332, 35, 332,
644 29, 31, 332, 332, 332, 332, 332, 332, 332, 332,
645 96, 332, 332, 332, 332, 332, 332, 331, 332, 332,
646 332, 332, 332, 332, 332, 332, 332, 332, 332, 214,
647 211, 332, 332, 332, 332, 332, 332, 332, 332, 332,
648 332, 332, 332, 332, 332, 332, 332, 332, 332, 70,
649 332, 332, 332, 135, 332, 118, 332, 332, 332, 332,
650 332, 332, 332, 332, 153, 47, 332, 332, 323, 13,
651 332, 332, 332, 332, 332, 332, 332, 332, 332, 285,
652
653 332, 288, 332, 332, 332, 332, 332, 332, 332, 332,
654 332, 332, 12, 332, 332, 22, 332, 332, 332, 265,
655 332, 332, 332, 332, 273, 332, 332, 332, 74, 332,
656 222, 332, 332, 332, 332, 213, 332, 332, 69, 332,
657 332, 332, 332, 23, 332, 43, 332, 332, 332, 332,
658 332, 332, 332, 332, 332, 332, 332, 332, 167, 166,
659 323, 332, 332, 332, 332, 332, 332, 332, 332, 332,
660 215, 209, 332, 227, 332, 332, 277, 332, 332, 332,
661 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
662 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
663
664 332, 332, 332, 332, 332, 332, 332, 332, 81, 332,
665 332, 332, 260, 332, 332, 332, 332, 195, 332, 332,
666 332, 332, 221, 332, 332, 332, 332, 332, 332, 332,
667 332, 332, 295, 296, 164, 332, 332, 75, 332, 332,
668 332, 332, 174, 332, 332, 112, 113, 332, 332, 332,
669 332, 159, 332, 161, 332, 200, 332, 332, 332, 332,
670 165, 332, 332, 230, 332, 332, 332, 332, 332, 332,
671 332, 142, 332, 332, 332, 332, 332, 332, 332, 332,
672 332, 332, 332, 332, 238, 332, 332, 332, 332, 332,
673 332, 332, 332, 24, 332, 270, 332, 332, 332, 332,
674
675 332, 332, 332, 332, 332, 332, 332, 332, 332, 201,
676 332, 332, 258, 332, 289, 332, 194, 332, 332, 332,
677 332, 55, 332, 332, 332, 332, 4, 332, 332, 332,
678 332, 125, 141, 332, 332, 332, 332, 332, 332, 332,
679 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
680 332, 233, 37, 38, 332, 332, 332, 332, 332, 332,
681 332, 278, 332, 332, 332, 332, 332, 332, 332, 246,
682 332, 332, 332, 332, 332, 332, 332, 332, 204, 332,
683 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
684 84, 332, 56, 264, 332, 234, 332, 332, 332, 332,
685
686 11, 332, 332, 332, 332, 332, 332, 124, 332, 332,
687 332, 332, 202, 88, 332, 40, 332, 332, 332, 332,
688 332, 332, 332, 332, 170, 332, 332, 332, 332, 332,
689 144, 332, 332, 332, 332, 237, 332, 332, 332, 332,
690 332, 245, 332, 332, 332, 332, 138, 332, 332, 332,
691 119, 120, 332, 332, 332, 90, 94, 89, 332, 332,
692 332, 82, 332, 332, 332, 332, 332, 10, 332, 332,
693 332, 262, 298, 332, 332, 332, 332, 303, 39, 332,
694 332, 332, 332, 332, 169, 332, 332, 332, 332, 332,
695 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
696
697 332, 332, 332, 332, 332, 332, 332, 332, 95, 93,
698 332, 332, 332, 83, 286, 332, 332, 332, 332, 332,
699 332, 332, 188, 332, 332, 332, 332, 332, 203, 332,
700 332, 332, 332, 332, 332, 332, 332, 160, 77, 332,
701 332, 332, 332, 332, 279, 332, 332, 332, 332, 332,
702 332, 332, 242, 332, 332, 241, 139, 305, 332, 92,
703 48, 332, 145, 146, 149, 150, 147, 148, 85, 332,
704 263, 332, 332, 332, 332, 163, 332, 332, 332, 332,
705 332, 232, 332, 332, 332, 332, 332, 332, 332, 332,
706 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
707
708 176, 175, 41, 332, 332, 332, 332, 332, 332, 332,
709 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
710 332, 332, 332, 332, 332, 332, 332, 332, 99, 332,
711 231, 332, 255, 283, 332, 332, 332, 332, 332, 332,
712 332, 332, 332, 332, 332, 332, 49, 5, 332, 332,
713 223, 332, 332, 284, 332, 332, 332, 332, 332, 332,
714 332, 332, 332, 243, 25, 332, 332, 332, 332, 332,
715 332, 332, 332, 332, 332, 332, 332, 244, 332, 332,
716 332, 143, 332, 332, 332, 332, 332, 332, 332, 332,
717 177, 332, 184, 332, 332, 332, 332, 332, 332, 332,
718
719 332, 332, 280, 332, 332, 332, 332, 332, 332, 332,
720 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
721 302, 332, 332, 251, 332, 332, 332, 332, 332, 281,
722 332, 332, 332, 332, 332, 332, 282, 332, 332, 332,
723 249, 332, 252, 253, 332, 332, 332, 332, 332, 250,
724 254, 0
367 1, 1, 311, 311, 315, 315, 319, 319, 323, 323,
368 1, 1, 327, 327, 331, 331, 338, 335, 1, 309,
369 309, 336, 2, 335, 335, 335, 335, 335, 335, 335,
370 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
371 335, 335, 335, 335, 335, 336, 311, 312, 312, 313,
372 336, 315, 316, 316, 317, 336, 322, 319, 320, 320,
373 321, 336, 323, 324, 324, 325, 336, 334, 310, 2,
374 314, 334, 336, 330, 327, 328, 328, 329, 336, 331,
375 332, 332, 333, 336, 335, 0, 1, 2, 2, 2,
376 2, 335, 335, 335, 335, 335, 335, 335, 335, 335,
377
378 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
379 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
380 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
381 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
382 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
383 335, 335, 335, 335, 335, 335, 335, 311, 0, 315,
384 0, 322, 0, 319, 323, 0, 334, 0, 2, 2,
385 334, 330, 0, 327, 331, 0, 335, 335, 335, 335,
386 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
387 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
388
389 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
390 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
391 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
392 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
393 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
394 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
395 335, 335, 335, 335, 335, 335, 335, 334, 335, 335,
396 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
397 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
398 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
399
400 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
401 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
402 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
403 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
404 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
405 335, 335, 125, 335, 335, 335, 335, 335, 335, 335,
406 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
407 335, 335, 335, 134, 335, 335, 335, 335, 335, 335,
408 335, 334, 335, 335, 335, 335, 335, 335, 335, 335,
409 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
410
411 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
412 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
413 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
414 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
415 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
416 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
417 109, 335, 335, 335, 335, 335, 335, 8, 335, 335,
418 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
419 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
420 335, 335, 335, 335, 335, 335, 335, 126, 335, 335,
421
422 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
423 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
424 335, 335, 335, 335, 335, 335, 335, 335, 139, 335,
425 334, 335, 335, 335, 335, 335, 335, 335, 335, 335,
426 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
427 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
428 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
429 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
430 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
431 335, 335, 335, 335, 335, 335, 335, 335, 302, 335,
432
433 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
434 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
435 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
436 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
437 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
438 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
439 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
440 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
441 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
442 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
443
444 335, 334, 335, 335, 335, 335, 335, 335, 335, 335,
445 335, 335, 335, 335, 64, 335, 335, 335, 335, 335,
446 335, 335, 335, 335, 335, 335, 335, 335, 335, 238,
447 335, 14, 15, 335, 19, 18, 335, 335, 222, 335,
448 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
449 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
450 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
451 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
452 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
453 132, 335, 335, 335, 335, 335, 335, 335, 335, 335,
454
455 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
456 335, 335, 220, 335, 335, 335, 335, 335, 335, 335,
457 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
458 335, 3, 335, 335, 335, 335, 335, 335, 335, 335,
459 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
460 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
461 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
462 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
463 335, 335, 335, 335, 335, 335, 334, 335, 335, 335,
464 335, 335, 335, 335, 296, 335, 335, 295, 335, 335,
465
466 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
467 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
468 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
469 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
470 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
471 335, 335, 335, 335, 335, 318, 335, 335, 335, 335,
472 335, 335, 335, 335, 63, 335, 335, 335, 335, 335,
473 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
474 335, 67, 335, 269, 335, 335, 335, 335, 335, 335,
475 335, 335, 303, 304, 335, 335, 335, 335, 335, 68,
476
477 335, 335, 133, 335, 335, 335, 335, 335, 335, 335,
478 335, 335, 335, 335, 335, 335, 335, 129, 335, 335,
479 335, 335, 335, 335, 335, 335, 209, 335, 335, 335,
480 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
481 335, 335, 335, 335, 335, 335, 335, 21, 335, 335,
482 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
483 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
484 335, 335, 335, 335, 335, 335, 335, 158, 335, 335,
485 334, 318, 335, 335, 335, 335, 335, 335, 335, 335,
486 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
487
488 335, 335, 335, 107, 335, 335, 335, 335, 335, 335,
489 335, 277, 335, 335, 335, 335, 335, 335, 335, 335,
490 335, 335, 335, 335, 335, 335, 335, 335, 335, 181,
491 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
492 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
493 335, 335, 335, 335, 335, 335, 335, 335, 335, 157,
494 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
495 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
496 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
497 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
498
499 335, 335, 106, 335, 335, 335, 335, 335, 335, 335,
500 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
501 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
502 32, 335, 335, 335, 335, 335, 335, 335, 335, 335,
503 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
504 33, 335, 335, 335, 335, 335, 335, 335, 335, 335,
505 335, 335, 335, 335, 335, 335, 65, 335, 335, 335,
506 335, 335, 335, 335, 335, 335, 131, 334, 335, 335,
507 335, 335, 335, 124, 335, 335, 335, 335, 335, 335,
508 335, 335, 335, 335, 335, 335, 335, 335, 335, 66,
509
510 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
511 335, 335, 242, 335, 335, 335, 335, 335, 335, 335,
512 335, 335, 335, 335, 335, 335, 182, 335, 335, 335,
513 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
514 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
515 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
516 335, 335, 335, 335, 54, 335, 335, 335, 335, 335,
517 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
518 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
519 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
520
521 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
522 335, 335, 335, 335, 335, 260, 335, 335, 335, 335,
523 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
524 335, 335, 335, 335, 58, 335, 59, 335, 335, 335,
525 335, 335, 110, 335, 111, 335, 335, 335, 335, 108,
526 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
527 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
528 335, 335, 335, 335, 335, 335, 335, 335, 335, 7,
529 335, 334, 335, 335, 335, 335, 335, 335, 335, 335,
530 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
531
532 231, 335, 335, 335, 335, 160, 335, 335, 335, 335,
533 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
534 335, 335, 243, 335, 335, 335, 335, 335, 335, 335,
535 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
536 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
537 335, 335, 335, 335, 335, 335, 335, 335, 335, 45,
538 335, 335, 335, 335, 335, 335, 335, 335, 335, 55,
539 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
540 335, 335, 335, 335, 201, 335, 200, 335, 335, 335,
541 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
542
543 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
544 335, 335, 335, 16, 17, 335, 335, 335, 335, 335,
545 335, 335, 335, 335, 335, 335, 335, 335, 69, 335,
546 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
547 208, 335, 335, 335, 335, 335, 335, 113, 335, 112,
548 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
549 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
550 335, 335, 192, 335, 335, 335, 335, 335, 335, 335,
551 335, 140, 334, 335, 335, 335, 335, 335, 335, 335,
552 335, 335, 335, 101, 335, 335, 335, 335, 335, 335,
553
554 335, 335, 335, 89, 335, 335, 335, 335, 335, 335,
555 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
556 335, 335, 335, 335, 335, 335, 335, 335, 335, 221,
557 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
558 335, 335, 335, 335, 335, 335, 335, 335, 94, 335,
559 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
560 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
561 62, 335, 335, 335, 335, 335, 335, 335, 335, 335,
562 335, 335, 335, 335, 335, 335, 335, 335, 335, 195,
563 196, 335, 335, 335, 271, 335, 335, 335, 335, 335,
564
565 335, 335, 335, 335, 335, 335, 335, 6, 335, 335,
566 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
567 335, 335, 335, 335, 335, 335, 335, 335, 335, 275,
568 335, 335, 335, 335, 335, 335, 297, 335, 335, 335,
569 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
570 335, 335, 335, 335, 335, 335, 335, 42, 335, 335,
571 335, 335, 44, 335, 335, 335, 90, 335, 335, 335,
572 335, 335, 52, 335, 335, 335, 335, 335, 335, 335,
573 334, 335, 188, 335, 335, 335, 135, 335, 335, 335,
574 335, 335, 335, 335, 335, 335, 335, 213, 335, 189,
575
576 335, 335, 335, 228, 335, 335, 335, 335, 335, 335,
577 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
578 335, 335, 335, 335, 53, 335, 335, 335, 335, 335,
579 335, 335, 335, 335, 335, 137, 118, 335, 119, 335,
580 335, 335, 117, 335, 335, 335, 335, 335, 335, 335,
581 335, 155, 335, 335, 50, 335, 335, 335, 335, 335,
582 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
583 335, 259, 335, 335, 335, 335, 335, 335, 335, 335,
584 335, 190, 335, 335, 335, 335, 335, 193, 335, 199,
585 335, 335, 335, 335, 335, 227, 335, 335, 335, 335,
586
587 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
588 105, 335, 335, 335, 335, 335, 335, 335, 335, 335,
589 335, 335, 335, 335, 335, 335, 335, 335, 335, 130,
590 335, 335, 335, 335, 335, 335, 60, 335, 335, 335,
591 26, 335, 335, 335, 335, 335, 335, 335, 335, 335,
592 20, 335, 335, 335, 335, 335, 335, 27, 36, 335,
593 165, 335, 335, 335, 335, 335, 335, 335, 335, 335,
594 335, 335, 335, 335, 334, 335, 335, 335, 335, 335,
595 335, 77, 79, 335, 335, 335, 335, 335, 335, 335,
596 335, 335, 335, 335, 335, 335, 279, 335, 335, 335,
597
598 335, 239, 335, 335, 335, 335, 335, 335, 335, 335,
599 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
600 335, 335, 335, 335, 120, 335, 335, 335, 335, 335,
601 335, 335, 335, 335, 154, 335, 46, 335, 335, 335,
602 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
603 335, 335, 335, 335, 335, 335, 335, 335, 290, 335,
604 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
605 335, 335, 335, 335, 335, 335, 335, 159, 335, 335,
606 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
607 335, 219, 335, 335, 335, 335, 335, 335, 335, 335,
608
609 335, 300, 335, 335, 335, 335, 335, 335, 335, 335,
610 335, 335, 335, 176, 335, 335, 335, 335, 335, 335,
611 335, 335, 114, 335, 335, 335, 335, 335, 335, 335,
612 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
613 335, 335, 171, 335, 183, 335, 335, 335, 335, 334,
614 335, 143, 335, 335, 335, 335, 335, 100, 335, 335,
615 335, 335, 211, 335, 335, 335, 335, 335, 335, 229,
616 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
617 335, 335, 335, 335, 335, 335, 251, 335, 335, 335,
618 335, 335, 335, 335, 335, 335, 335, 136, 335, 335,
619
620 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
621 335, 335, 175, 335, 335, 335, 335, 335, 335, 80,
622 335, 81, 335, 335, 335, 335, 335, 61, 293, 335,
623 335, 335, 335, 335, 88, 184, 335, 202, 335, 232,
624 335, 335, 194, 272, 335, 335, 335, 335, 335, 73,
625 335, 186, 335, 335, 335, 335, 335, 9, 335, 335,
626 335, 104, 335, 335, 335, 335, 264, 335, 335, 335,
627 335, 210, 335, 335, 335, 335, 335, 335, 335, 335,
628 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
629 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
630
631 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
632 335, 335, 335, 335, 335, 335, 335, 334, 335, 335,
633 335, 335, 174, 335, 335, 335, 335, 335, 335, 335,
634 335, 335, 335, 161, 335, 278, 335, 335, 335, 335,
635 335, 250, 335, 335, 335, 335, 335, 335, 335, 335,
636 335, 335, 335, 223, 335, 335, 335, 335, 335, 270,
637 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
638 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
639 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
640 294, 335, 185, 335, 335, 335, 335, 335, 335, 335,
641
642 72, 74, 335, 335, 335, 335, 335, 335, 335, 103,
643 335, 335, 335, 335, 262, 335, 335, 335, 335, 274,
644 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
645 335, 215, 34, 28, 30, 335, 335, 335, 335, 335,
646 335, 335, 335, 335, 35, 335, 29, 31, 335, 335,
647 335, 335, 335, 335, 335, 335, 99, 335, 335, 335,
648 335, 335, 335, 334, 335, 335, 335, 335, 335, 335,
649 335, 335, 335, 335, 335, 217, 214, 335, 335, 335,
650 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
651 335, 335, 335, 335, 335, 71, 335, 335, 335, 138,
652
653 335, 121, 335, 335, 335, 335, 335, 335, 335, 335,
654 156, 47, 335, 335, 335, 326, 13, 335, 335, 335,
655 335, 335, 335, 335, 335, 335, 335, 288, 335, 291,
656 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
657 12, 335, 335, 22, 335, 335, 335, 268, 335, 335,
658 335, 335, 276, 335, 335, 335, 75, 335, 225, 335,
659 335, 335, 335, 216, 335, 335, 70, 335, 335, 335,
660 335, 23, 335, 43, 335, 335, 335, 335, 335, 335,
661 335, 335, 335, 335, 335, 335, 170, 169, 326, 335,
662 335, 335, 335, 335, 335, 335, 335, 335, 218, 212,
663
664 335, 230, 335, 335, 280, 335, 335, 335, 335, 335,
665 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
666 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
667 335, 335, 335, 335, 335, 335, 335, 82, 335, 335,
668 335, 335, 263, 335, 335, 335, 335, 198, 335, 335,
669 335, 335, 224, 335, 335, 335, 335, 335, 335, 335,
670 335, 335, 298, 299, 167, 335, 335, 76, 335, 335,
671 335, 335, 177, 335, 335, 115, 116, 335, 335, 335,
672 335, 162, 335, 164, 335, 203, 335, 335, 335, 335,
673 168, 335, 335, 233, 335, 335, 335, 335, 335, 335,
674
675 335, 145, 335, 335, 335, 335, 335, 335, 335, 335,
676 335, 335, 335, 335, 241, 335, 335, 335, 335, 335,
677 335, 335, 307, 335, 24, 335, 273, 335, 335, 335,
678 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
679 335, 86, 204, 335, 335, 261, 335, 292, 335, 197,
680 335, 335, 335, 335, 56, 335, 335, 335, 335, 4,
681 335, 335, 335, 335, 128, 144, 335, 335, 335, 335,
682 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
683 335, 335, 335, 335, 236, 37, 38, 335, 335, 335,
684 335, 335, 335, 335, 281, 335, 335, 335, 335, 335,
685
686 335, 335, 249, 335, 335, 335, 335, 335, 335, 335,
687 335, 207, 335, 335, 335, 335, 335, 335, 335, 335,
688 335, 335, 335, 335, 85, 335, 57, 267, 335, 237,
689 335, 335, 335, 335, 11, 335, 335, 335, 335, 335,
690 335, 127, 335, 335, 335, 335, 205, 91, 335, 40,
691 335, 335, 335, 335, 335, 335, 335, 335, 173, 335,
692 335, 335, 335, 335, 147, 335, 335, 335, 335, 240,
693 335, 335, 335, 335, 335, 248, 335, 335, 335, 335,
694 141, 335, 335, 335, 122, 123, 335, 335, 335, 93,
695 97, 92, 335, 335, 335, 335, 83, 335, 335, 335,
696
697 335, 335, 10, 335, 335, 335, 265, 301, 335, 335,
698 335, 335, 306, 39, 335, 335, 335, 335, 335, 172,
699 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
700 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
701 335, 335, 335, 98, 96, 335, 51, 335, 335, 84,
702 289, 335, 335, 335, 335, 335, 335, 335, 191, 335,
703 335, 335, 335, 335, 206, 335, 335, 335, 335, 335,
704 335, 335, 335, 163, 78, 335, 335, 335, 335, 335,
705 282, 335, 335, 335, 335, 335, 335, 335, 245, 335,
706 335, 244, 142, 335, 335, 95, 48, 335, 148, 149,
707
708 152, 153, 150, 151, 87, 335, 266, 335, 335, 335,
709 335, 166, 335, 335, 335, 335, 335, 235, 335, 335,
710 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
711 335, 335, 335, 335, 335, 335, 335, 179, 178, 41,
712 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
713 335, 335, 335, 335, 335, 335, 335, 335, 335, 335,
714 335, 335, 335, 335, 335, 335, 102, 335, 234, 335,
715 258, 286, 335, 335, 335, 335, 335, 335, 335, 335,
716 335, 335, 335, 308, 335, 49, 5, 335, 335, 226,
717 335, 335, 287, 335, 335, 335, 335, 335, 335, 335,
718
719 335, 335, 246, 25, 335, 335, 335, 335, 335, 335,
720 335, 335, 335, 335, 335, 335, 247, 335, 335, 335,
721 146, 335, 335, 335, 335, 335, 335, 335, 335, 180,
722 335, 187, 335, 335, 335, 335, 335, 335, 335, 335,
723 335, 283, 335, 335, 335, 335, 335, 335, 335, 335,
724 335, 335, 335, 335, 335, 335, 335, 335, 335, 305,
725 335, 335, 254, 335, 335, 335, 335, 335, 284, 335,
726 335, 335, 335, 335, 335, 285, 335, 335, 335, 252,
727 335, 255, 256, 335, 335, 335, 335, 335, 253, 257,
728 0
729
725730 } ;
726731
727732 static const YY_CHAR yy_ec[256] =
767772 1, 1, 1, 1, 1, 1
768773 } ;
769774
770 static const flex_int16_t yy_base[3271] =
775 static const flex_int16_t yy_base[3310] =
771776 { 0,
772777 0, 0, 64, 67, 70, 72, 78, 84, 89, 92,
773 131, 137, 112, 118, 123, 142, 479, 435, 96, 9263,
774 9263, 9263, 160, 185, 116, 183, 229, 132, 175, 173,
778 131, 137, 112, 118, 123, 142, 479, 435, 96, 9388,
779 9388, 9388, 160, 185, 116, 183, 229, 132, 175, 173,
775780 232, 50, 66, 120, 263, 275, 151, 319, 134, 371,
776 412, 286, 308, 283, 126, 237, 394, 9263, 9263, 9263,
777 95, 385, 9263, 9263, 9263, 186, 366, 385, 9263, 9263,
778 9263, 258, 340, 9263, 9263, 9263, 104, 338, 9263, 266,
779 9263, 167, 349, 303, 319, 9263, 9263, 9263, 356, 273,
780 9263, 9263, 9263, 146, 268, 368, 177, 0, 388, 0,
781 412, 286, 308, 283, 126, 237, 394, 9388, 9388, 9388,
782 95, 385, 9388, 9388, 9388, 186, 366, 385, 9388, 9388,
783 9388, 258, 340, 9388, 9388, 9388, 104, 338, 9388, 266,
784 9388, 167, 349, 303, 319, 9388, 9388, 9388, 356, 273,
785 9388, 9388, 9388, 146, 268, 368, 177, 0, 388, 0,
781786 0, 291, 270, 235, 346, 259, 339, 367, 178, 177,
782787
783788 226, 395, 373, 384, 377, 368, 410, 411, 309, 429,
807812 1102, 1094, 1085, 1115, 1096, 1141, 1111, 1109, 1119, 1152,
808813 1136, 1135, 1144, 1162, 1172, 1166, 1177, 1163, 1186, 1189,
809814 1143, 1176, 1200, 1205, 1187, 1204, 1199, 1188, 1190, 1203,
810 1107, 1238, 9263, 1215, 1242, 1149, 1243, 1244, 1251, 1226,
811 1269, 1237, 1259, 1217, 1252, 1275, 1292, 1340, 1264, 1273,
812 1282, 1283, 1279, 9263, 1320, 1289, 1389, 1311, 1309, 1342,
813 1302, 1306, 1325, 1331, 1348, 1353, 1224, 1367, 1335, 1337,
814 1394, 1390, 1380, 1382, 1370, 1406, 1399, 1262, 1409, 1419,
815
816 1422, 1428, 1354, 1418, 1431, 1445, 1425, 1424, 1432, 1437,
817 1440, 1455, 1476, 1456, 1481, 1461, 1360, 1471, 1449, 1472,
818 1477, 1502, 1547, 1468, 1492, 1488, 1503, 1505, 1499, 1489,
819 1515, 1527, 1506, 1530, 1519, 1542, 1532, 1304, 1548, 1550,
820 1554, 1549, 1567, 1541, 1557, 1568, 1580, 1588, 1574, 1520,
821 1575, 1584, 1600, 1595, 1592, 1605, 1609, 1607, 1616, 1613,
822 9263, 1620, 1618, 1602, 1629, 1622, 1634, 9263, 1632, 1633,
823 1637, 1640, 1658, 1659, 1663, 1665, 1660, 1664, 1673, 1666,
824 1656, 1687, 1669, 1685, 1699, 1691, 1701, 1682, 1692, 1707,
825 1703, 1695, 1715, 1709, 1702, 1714, 1754, 9263, 1719, 1730,
826
827 1752, 1731, 1748, 1757, 1758, 1744, 1771, 1777, 1742, 1797,
828 1783, 1803, 1782, 1788, 1810, 1787, 1815, 1798, 1807, 1821,
829 1822, 1795, 1823, 1818, 1832, 1837, 1847, 9263, 1848, 1854,
830 1861, 1850, 1845, 1846, 1855, 1856, 1849, 1866, 1873, 1888,
831 1875, 1883, 1895, 1906, 1892, 1908, 1893, 1909, 1897, 1901,
832 1902, 1918, 1928, 1898, 1951, 1927, 1923, 1930, 1932, 1942,
833 1949, 1957, 1958, 1935, 1948, 1962, 1961, 1953, 1955, 1967,
834 1968, 1954, 1979, 1982, 1984, 1987, 1978, 1997, 1989, 2000,
835 1992, 1994, 2005, 2004, 2006, 2013, 2012, 2008, 2033, 2025,
836 2037, 2028, 2032, 2049, 2051, 2044, 2035, 9263, 2062, 2052,
837
838 2063, 2065, 2075, 2071, 2077, 2068, 2076, 2079, 2087, 2092,
839 2085, 2099, 2101, 2089, 2104, 2106, 2111, 2122, 2119, 2126,
840 2141, 2127, 2131, 2116, 2137, 2146, 2139, 2150, 2145, 2135,
841 2154, 2170, 2142, 2161, 2171, 2172, 2165, 2180, 2178, 2173,
842 2194, 2197, 2205, 2185, 2167, 2209, 2230, 2201, 2188, 2217,
843 2207, 2225, 2215, 2220, 2221, 2218, 2229, 2248, 2247, 2246,
844 2243, 2244, 2245, 2242, 2250, 2252, 2273, 2266, 2269, 2264,
845 2265, 2291, 2279, 2271, 2285, 2286, 2282, 2294, 2288, 2315,
846 2313, 2300, 2309, 2311, 2318, 2321, 2314, 2322, 2327, 2346,
847 2332, 2348, 2350, 2338, 2360, 2349, 2343, 2354, 2359, 2364,
848
849 2365, 2370, 2375, 2379, 2378, 2385, 2382, 2400, 2409, 2404,
850 2402, 2405, 9263, 2392, 2413, 2397, 2419, 2416, 2408, 2421,
851 2426, 2434, 2440, 2431, 2427, 2436, 2482, 9263, 2444, 9263,
852 9263, 2445, 9263, 9263, 2461, 2472, 9263, 2479, 2471, 2465,
853 2469, 2489, 2492, 2499, 2450, 2508, 2503, 2430, 2550, 2528,
854 2511, 2497, 2509, 2519, 2540, 2529, 2520, 2538, 2547, 2555,
855 2588, 2566, 2563, 2560, 2585, 2571, 2589, 2596, 2594, 2595,
856 2593, 2587, 2600, 2590, 2599, 2603, 2607, 2614, 2622, 2624,
857 2621, 2628, 2620, 2648, 2641, 2644, 2658, 9263, 2645, 2659,
858 2662, 2655, 2664, 2667, 2668, 2653, 2665, 2676, 2671, 2663,
859
860 2673, 2677, 2680, 2683, 2687, 2685, 2702, 2714, 2694, 9263,
861 2706, 2707, 2695, 2712, 2709, 2721, 2720, 2723, 2703, 2722,
862 2740, 2732, 2734, 2739, 2738, 2747, 2736, 2765, 9263, 2767,
863 2770, 2750, 2773, 2758, 2755, 2766, 2777, 2781, 2780, 2787,
864 2784, 2791, 2793, 2795, 2808, 2807, 2802, 2811, 2818, 2813,
865 2826, 2823, 2822, 2832, 2835, 2839, 2836, 2838, 2845, 2850,
866 2848, 2862, 2853, 2866, 2851, 2878, 2881, 2875, 2865, 2876,
867 2880, 2874, 2889, 2886, 2897, 2891, 2901, 2904, 2899, 2910,
868 2902, 2916, 2930, 2917, 2929, 2934, 2918, 2922, 2945, 2936,
869 9263, 2927, 2925, 9263, 2952, 2944, 2947, 2993, 2957, 2949,
870
871 2966, 2970, 2948, 2979, 2974, 2972, 2985, 2980, 3024, 3006,
872 2991, 3018, 3011, 3025, 3016, 3032, 3021, 3023, 3033, 3045,
873 3050, 3041, 3063, 3068, 3039, 615, 3070, 3053, 3057, 3051,
874 3103, 3067, 3080, 3072, 3081, 3087, 3100, 3083, 3107, 3073,
875 3097, 3110, 3106, 3120, 3124, 3112, 3127, 3135, 3136, 3137,
876 9263, 3146, 3155, 3141, 3148, 3151, 3154, 3147, 9263, 3156,
877 3162, 3163, 3175, 3167, 3172, 3190, 3177, 3182, 3180, 3189,
878 3199, 3202, 3204, 3188, 3185, 9263, 3198, 9263, 3206, 3216,
879 3194, 3225, 3224, 3219, 3240, 3243, 9263, 9263, 3244, 3241,
880 3229, 3258, 3246, 9263, 3238, 3260, 9263, 3278, 3261, 3266,
881
882 3263, 3268, 3271, 3281, 3277, 3301, 3293, 3302, 3285, 3298,
883 3304, 9263, 3296, 3311, 3309, 3310, 3306, 3312, 3319, 3323,
884 9263, 3328, 3327, 3341, 3353, 3274, 3348, 3338, 3349, 3359,
885 3340, 3344, 3346, 3361, 3365, 3374, 3377, 3376, 3384, 3390,
886 3382, 9263, 3379, 3380, 3387, 3391, 3394, 3393, 3401, 3407,
887 3411, 3409, 3416, 3388, 3413, 3420, 3414, 3418, 3440, 3427,
888 3439, 3448, 3434, 3435, 3438, 91, 3437, 3447, 3451, 3454,
889 9263, 3465, 3463, 3466, 128, 3458, 3473, 3475, 3489, 3482,
890 3468, 3476, 3478, 3503, 3485, 3499, 3505, 3512, 3506, 3508,
891 3514, 3509, 3510, 3518, 3523, 3521, 9263, 3527, 3528, 3535,
892
893 3543, 3551, 3539, 3563, 9263, 3556, 3570, 3567, 3561, 3566,
894 3562, 3578, 3583, 3574, 3587, 3586, 3588, 3599, 3612, 3606,
895 3605, 3603, 9263, 3621, 3619, 3623, 3615, 3626, 3632, 3618,
896 3610, 3641, 3638, 3648, 3646, 3659, 3652, 3650, 3649, 3653,
897 3668, 3663, 3662, 3665, 3672, 3679, 3683, 3688, 3686, 3689,
898 3687, 9263, 3548, 3703, 3705, 3709, 3706, 3715, 3710, 3728,
899 3716, 3725, 3727, 3723, 3767, 3743, 3751, 3645, 3757, 3764,
900 3752, 3730, 3766, 3777, 3773, 3784, 3788, 3803, 3792, 3796,
901 3801, 3798, 3815, 3807, 3804, 3746, 3770, 3819, 3823, 3846,
902 3825, 3765, 3829, 9263, 3832, 3842, 3843, 3849, 3877, 3856,
903
904 3852, 3863, 3867, 3869, 3879, 3880, 3883, 3848, 3885, 3892,
905 3888, 3904, 3889, 3905, 3893, 3896, 3912, 3844, 3907, 3918,
906 3926, 9263, 3930, 3932, 3916, 3931, 3942, 3927, 3946, 3949,
907 3951, 3944, 3945, 3952, 3941, 3960, 3955, 3976, 3971, 3968,
908 3967, 9263, 3983, 3969, 3994, 3977, 3995, 3993, 4004, 4010,
909 4005, 4011, 3996, 4013, 4017, 4012, 9263, 4022, 4034, 4030,
910 4039, 4036, 4028, 4037, 4050, 4033, 9263, 4041, 4038, 4044,
911 4059, 4064, 4063, 9263, 4075, 4062, 4061, 4072, 4066, 4070,
912 4077, 4086, 4080, 4085, 4088, 4093, 4101, 4094, 4111, 9263,
913 4099, 4129, 4105, 4121, 4126, 4122, 4120, 4124, 4147, 4131,
914
915 4144, 4127, 9263, 4164, 4156, 4154, 4175, 4153, 4150, 4166,
916 4173, 4180, 4168, 4169, 4183, 4170, 9263, 4187, 4191, 4202,
917 4197, 4200, 4203, 4207, 4211, 4196, 4213, 4219, 4222, 4224,
918 4223, 4236, 4238, 4247, 4240, 4234, 4253, 4229, 4246, 4256,
919 4261, 4280, 4263, 4257, 4272, 4270, 4266, 4289, 4296, 4297,
920 4299, 4301, 9263, 4295, 4304, 4303, 4288, 4298, 4305, 4321,
921 4311, 4316, 4314, 4332, 4315, 4335, 4331, 4356, 4357, 4333,
922 4354, 4345, 4346, 4359, 4361, 4351, 4367, 4371, 4374, 4380,
923 4373, 4376, 4377, 4384, 4379, 4383, 4386, 4400, 4401, 4394,
924 4388, 4403, 4421, 4428, 4412, 4425, 4433, 4429, 4436, 4430,
925
926 4432, 4437, 4460, 9263, 4426, 4449, 4457, 4453, 4458, 4438,
927 4464, 4480, 4463, 4470, 4477, 4484, 4490, 4475, 4485, 4493,
928 4491, 4492, 9263, 4496, 9263, 4504, 4511, 4507, 4529, 4506,
929 9263, 4527, 9263, 4533, 4528, 4521, 4523, 9263, 4541, 4522,
930 4538, 4531, 4530, 4540, 4543, 4546, 4563, 4574, 4567, 4564,
931 4565, 4554, 4583, 4571, 4568, 4588, 4572, 4596, 4601, 4597,
932 4599, 4594, 4607, 4604, 4603, 4614, 9263, 4625, 4613, 4615,
933 4623, 4628, 4624, 4632, 4635, 4634, 4649, 4650, 4653, 4645,
934 4662, 4651, 4656, 4663, 4678, 4659, 4687, 9263, 4674, 4691,
935 4673, 4693, 9263, 4697, 4680, 4707, 4709, 4689, 4694, 4696,
936
937 4714, 4721, 4715, 4701, 4705, 4740, 4732, 4742, 4752, 9263,
938 4736, 4748, 4729, 4759, 4750, 4756, 4766, 4760, 4763, 4767,
939 4781, 4773, 4775, 4739, 4777, 4779, 4794, 4806, 4808, 4802,
940 4814, 4787, 4811, 4812, 4813, 4801, 4800, 4805, 4803, 4822,
941 4828, 4830, 4826, 4829, 4835, 9263, 4838, 4847, 4853, 4865,
942 4841, 4844, 4856, 4846, 9263, 4872, 4862, 4871, 4873, 4878,
943 4869, 4881, 4863, 4883, 4893, 4889, 4900, 4906, 4897, 9263,
944 4910, 9263, 4892, 4920, 4921, 4926, 4924, 4914, 4935, 4939,
945 4933, 4937, 4944, 4950, 4942, 4927, 4958, 4953, 4966, 4959,
946 4963, 4974, 4964, 4976, 4969, 4965, 4981, 4986, 9263, 9263,
947
948 4982, 4992, 4999, 4988, 5003, 5013, 5020, 5024, 5017, 5005,
949 5025, 5011, 5058, 9263, 5014, 5027, 5037, 5038, 5062, 5048,
950 5061, 5072, 5063, 5076, 5071, 9263, 5054, 5064, 5081, 5067,
951 5093, 5084, 9263, 5079, 9263, 5073, 5090, 5089, 5101, 5099,
952 5100, 5104, 5107, 5122, 5088, 5130, 5119, 5133, 5115, 5120,
953 5125, 5128, 5155, 5129, 5137, 5136, 9263, 5158, 5146, 5157,
954 5162, 5164, 5170, 5163, 5156, 9263, 5165, 5159, 5176, 5168,
955 5186, 5181, 5205, 5193, 5202, 5199, 5203, 9263, 5191, 5192,
956 5221, 5216, 5204, 5217, 5224, 5230, 5235, 9263, 5236, 5231,
957 5226, 5245, 5234, 5250, 5244, 5239, 5242, 5238, 5257, 5249,
958
959 5265, 5269, 5268, 5267, 5283, 5276, 5273, 5294, 5284, 5286,
960 5287, 5295, 5296, 9263, 5300, 5304, 5302, 5310, 5332, 5322,
961 5339, 5308, 5341, 5323, 5342, 5346, 5327, 5331, 5353, 5351,
962 5337, 5357, 9263, 5344, 5354, 5361, 5358, 5359, 5376, 5370,
963 5386, 5377, 5371, 5388, 5394, 5396, 5399, 5417, 5380, 5385,
964 5407, 5413, 9263, 5411, 5410, 5420, 5412, 5432, 5427, 5421,
965 5437, 5425, 5428, 5450, 5439, 5452, 5441, 5456, 5466, 5471,
966 5454, 9263, 9263, 5475, 5457, 5476, 9263, 5477, 5468, 5492,
967 5490, 5470, 5481, 5493, 5497, 5484, 5498, 5488, 5505, 9263,
968 5502, 5527, 5508, 5523, 5536, 5541, 5538, 5534, 5531, 5522,
969
970 5524, 5532, 5549, 5529, 5519, 5559, 5558, 5567, 5553, 5562,
971 5571, 9263, 5561, 5556, 5579, 5582, 5574, 5580, 9263, 5594,
972 5588, 5590, 5601, 5597, 5599, 5616, 5612, 5604, 5615, 5614,
973 5630, 5618, 5624, 5619, 5621, 5642, 5634, 5648, 5646, 9263,
974 5655, 5656, 5658, 5653, 9263, 5666, 5684, 5660, 5663, 5662,
975 5665, 5669, 5673, 9263, 5674, 5691, 5690, 5679, 5703, 5685,
976 5708, 5705, 5697, 9263, 5711, 5700, 5715, 9263, 5713, 5724,
977 5714, 5721, 5706, 5733, 5738, 5734, 5743, 5736, 9263, 5750,
978 9263, 5751, 5746, 5756, 9263, 5747, 5752, 5762, 5768, 5760,
979 5770, 5783, 5777, 5790, 5772, 5784, 5782, 5779, 5797, 5803,
980
981 5810, 5794, 5804, 5796, 5802, 9263, 5821, 5818, 5817, 5831,
982 5837, 5825, 5830, 5829, 5841, 5849, 9263, 9263, 5847, 9263,
983 5848, 5839, 5854, 9263, 5852, 5857, 5859, 5863, 5882, 5885,
984 5872, 5884, 9263, 5888, 5890, 9263, 5889, 5898, 5893, 5874,
985 5886, 5901, 5894, 5905, 5912, 5919, 5922, 5909, 5923, 5936,
986 9263, 5917, 5918, 5940, 5943, 5929, 5939, 5945, 5949, 5951,
987 9263, 5968, 5958, 5962, 5972, 5976, 9263, 5975, 9263, 5970,
988 5981, 5979, 5992, 5974, 9263, 6003, 5982, 6012, 5987, 6011,
989 6020, 6019, 6021, 6007, 6008, 5913, 6031, 6014, 6029, 9263,
990 6023, 6030, 6033, 6058, 6046, 6045, 6050, 6057, 6064, 6049,
991
992 6071, 6068, 6063, 6069, 6073, 6072, 6077, 6085, 9263, 6098,
993 6109, 6092, 6120, 6096, 6104, 9263, 6106, 6112, 6119, 9263,
994 6108, 6102, 6132, 6126, 6134, 6136, 6139, 6142, 6135, 9263,
995 6145, 6146, 6140, 6159, 6165, 6162, 9263, 9263, 6169, 9263,
996 6168, 6153, 6163, 6181, 6179, 6184, 6194, 6191, 6207, 6190,
997 6206, 6208, 6201, 6197, 6230, 6217, 6221, 6220, 6224, 6202,
998 9263, 9263, 6238, 6241, 6234, 6239, 6244, 6246, 6235, 6257,
999 6249, 6259, 6255, 6269, 6268, 9263, 6271, 6270, 6273, 6272,
1000 9263, 6264, 6283, 6280, 6278, 6301, 6291, 6295, 6294, 6307,
1001 6286, 6323, 6320, 6310, 6321, 6305, 6322, 6315, 6336, 6335,
1002
1003 6330, 6341, 6344, 9263, 6337, 6342, 6346, 6351, 6352, 6356,
1004 6339, 6368, 6363, 9263, 6362, 9263, 6372, 6387, 6379, 6391,
1005 6389, 6395, 6383, 6386, 6392, 6408, 6397, 6415, 6402, 6413,
1006 6427, 6421, 6431, 6434, 6432, 9263, 6436, 6418, 6419, 6435,
1007 6443, 6449, 6448, 6450, 6451, 6452, 6456, 6468, 6472, 6480,
1008 6470, 6476, 6474, 6462, 9263, 6477, 6486, 6483, 6487, 6498,
1009 6499, 6490, 6517, 6492, 6503, 6508, 6509, 6521, 9263, 6504,
1010 6511, 6512, 6536, 6537, 6538, 6541, 6532, 6543, 9263, 6542,
1011 6551, 6545, 6539, 6559, 6563, 6549, 6555, 6578, 6586, 6589,
1012 9263, 6579, 6590, 6594, 6576, 6583, 6603, 6606, 6567, 9263,
1013
1014 6620, 6622, 6614, 6605, 6610, 6617, 6630, 6634, 6615, 6632,
1015 6643, 6641, 6644, 6651, 6654, 6655, 6648, 6670, 6672, 9263,
1016 6659, 9263, 6665, 6682, 6689, 6684, 6686, 6678, 9263, 6688,
1017 6692, 6562, 6680, 6705, 9263, 6690, 6707, 6706, 6712, 9263,
1018 6725, 6731, 6710, 6726, 6740, 6741, 9263, 6743, 6744, 6749,
1019 6699, 6750, 6737, 6756, 6745, 6760, 6763, 6752, 6765, 6777,
1020 6767, 6768, 6780, 9263, 6787, 6786, 6796, 6792, 6803, 6790,
1021 6781, 6802, 6800, 6807, 9263, 6805, 6795, 6811, 6821, 6832,
1022 6819, 6838, 6826, 6834, 6823, 6825, 6846, 6828, 9263, 6833,
1023 6848, 6852, 6859, 6861, 6854, 9263, 9263, 6860, 6876, 6879,
1024
1025 6863, 6884, 9263, 9263, 6888, 6898, 6868, 6894, 6890, 9263,
1026 9263, 6897, 9263, 6887, 9263, 6886, 6902, 9263, 9263, 6903,
1027 6896, 6915, 6923, 6910, 9263, 6931, 9263, 6907, 6932, 6924,
1028 6914, 6934, 9263, 6919, 6941, 6943, 9263, 6935, 6957, 6930,
1029 6949, 9263, 6954, 6966, 6955, 6959, 9263, 6971, 6956, 6968,
1030 6960, 6970, 6980, 6986, 6975, 6976, 6982, 6987, 6991, 7003,
1031 7010, 7020, 7022, 7023, 7012, 7007, 7021, 7027, 7030, 7017,
1032 7033, 7016, 7043, 7040, 7042, 7041, 7046, 7051, 7052, 7058,
1033 7054, 7055, 7069, 7056, 7057, 7071, 7078, 7068, 7070, 7086,
1034 7082, 7093, 7088, 7109, 7102, 7097, 7101, 9263, 7104, 7096,
1035
1036 7117, 7105, 7127, 7120, 7137, 7119, 7130, 7147, 9263, 7149,
1037 9263, 7152, 7133, 7144, 7139, 7146, 9263, 7136, 7154, 7143,
1038 7164, 7177, 7167, 7188, 7169, 7175, 7179, 7194, 9263, 7198,
1039 7185, 9263, 7181, 7192, 7205, 9263, 7209, 7207, 7208, 7211,
1040 7216, 7222, 7213, 7215, 7225, 7220, 7244, 7246, 7230, 7245,
1041 7254, 7255, 7264, 7243, 7247, 7250, 7258, 7256, 7259, 7260,
1042 7278, 7267, 7282, 7293, 9263, 7281, 9263, 7286, 7283, 7285,
1043 7294, 7296, 7298, 7307, 9263, 9263, 7310, 7312, 7304, 7317,
1044 7320, 7316, 7329, 9263, 7321, 7331, 7319, 7327, 9263, 7334,
1045 7344, 7346, 7350, 9263, 7343, 7342, 7348, 7368, 7353, 7374,
1046
1047 7376, 7375, 7367, 7373, 7386, 9263, 9263, 9263, 9263, 7387,
1048 7370, 7389, 7377, 7393, 7396, 7398, 7409, 7403, 9263, 7421,
1049 9263, 9263, 7417, 7419, 7412, 7423, 7427, 7410, 7431, 7430,
1050 9263, 7432, 7436, 7437, 7445, 7443, 7452, 7461, 7459, 7468,
1051 7453, 7457, 7481, 7472, 7482, 7463, 7480, 7489, 7491, 9263,
1052 9263, 7479, 7494, 7493, 7522, 7498, 7506, 7487, 7486, 7520,
1053 7510, 7517, 7512, 7521, 7513, 7536, 7537, 7530, 7531, 9263,
1054 7525, 7540, 7547, 9263, 7548, 9263, 7554, 7561, 7528, 7552,
1055 7562, 7567, 7568, 7573, 9263, 9263, 7583, 7574, 9263, 9263,
1056 7572, 7570, 7585, 7584, 7586, 7593, 7599, 7606, 7589, 9263,
1057
1058 7600, 9263, 7601, 7618, 7619, 7598, 7629, 7635, 7639, 7636,
1059 7630, 7632, 9263, 7631, 7634, 9263, 7648, 7641, 7645, 9263,
1060 7642, 7626, 7651, 7654, 9263, 7673, 7672, 7675, 9263, 7677,
1061 9263, 7663, 7679, 7674, 7693, 9263, 7665, 7688, 9263, 7691,
1062 7694, 7692, 7696, 9263, 7687, 9263, 7697, 7698, 7707, 7726,
1063 7712, 7728, 7716, 7713, 7719, 7735, 7737, 7734, 9263, 9263,
1064 73, 7747, 7718, 7730, 7732, 7742, 7754, 7745, 7759, 7751,
1065 9263, 9263, 7761, 9263, 7765, 7764, 9263, 7755, 7768, 7775,
1066 7787, 7779, 7781, 7769, 7795, 7783, 7798, 7810, 7801, 7800,
1067 7816, 7814, 7823, 7811, 7820, 7828, 7832, 7834, 7844, 7836,
1068
1069 7848, 7838, 7840, 7849, 7859, 7860, 7850, 7854, 9263, 7873,
1070 7875, 7865, 9263, 7882, 7877, 7888, 7885, 9263, 7889, 7894,
1071 7897, 7898, 9263, 7881, 7913, 7910, 7909, 7904, 7927, 7915,
1072 7911, 7925, 9263, 9263, 9263, 7930, 7923, 9263, 7932, 7934,
1073 7924, 7926, 9263, 7951, 7931, 9263, 9263, 7938, 7955, 7946,
1074 7972, 9263, 7956, 9263, 7953, 9263, 7976, 7979, 7985, 7980,
1075 9263, 7983, 7993, 9263, 7969, 7977, 7992, 7991, 7978, 7990,
1076 8017, 9263, 8007, 8018, 8021, 8014, 8010, 8019, 8008, 8025,
1077 8015, 8037, 8013, 8039, 9263, 8043, 8046, 8049, 8058, 8042,
1078 8048, 8052, 8057, 9263, 8062, 9263, 8055, 8070, 8076, 8078,
1079
1080 8075, 8073, 8085, 8094, 8089, 8088, 8082, 8096, 8103, 9263,
1081 8101, 8111, 9263, 8110, 9263, 8113, 9263, 8116, 8118, 8120,
1082 8112, 9263, 8124, 8121, 8119, 8133, 9263, 8126, 8143, 8137,
1083 8150, 9263, 9263, 8135, 8170, 8161, 8145, 8171, 8173, 8154,
1084 8176, 8164, 8169, 8160, 8190, 8185, 8187, 8186, 8189, 8205,
1085 8191, 9263, 9263, 9263, 8197, 8200, 8215, 8211, 8218, 8228,
1086 8207, 9263, 8224, 8230, 8232, 8222, 8233, 8226, 8239, 9263,
1087 8234, 8236, 8240, 8245, 8250, 8255, 8271, 8253, 9263, 8269,
1088 8276, 8273, 8270, 8281, 8279, 8283, 8287, 8264, 8293, 8289,
1089 9263, 8295, 9263, 9263, 8280, 9263, 8282, 8296, 8297, 8311,
1090
1091 9263, 8315, 8313, 8305, 8320, 8328, 8330, 9263, 8338, 8314,
1092 8316, 8331, 9263, 9263, 8337, 9263, 8344, 8343, 8339, 8354,
1093 8347, 8342, 8351, 8355, 9263, 8352, 8356, 8362, 8361, 8378,
1094 9263, 8377, 8371, 8375, 8381, 9263, 8379, 8380, 8392, 8393,
1095 8386, 9263, 8411, 8405, 8420, 8421, 9263, 8407, 8424, 8417,
1096 9263, 9263, 8431, 8433, 8435, 9263, 9263, 9263, 8437, 8436,
1097 8440, 9263, 8445, 8394, 8451, 8472, 8457, 9263, 8446, 8441,
1098 8460, 9263, 9263, 8456, 8465, 8470, 8477, 9263, 9263, 8454,
1099 8473, 8486, 8482, 8478, 9263, 8471, 8487, 8494, 8508, 8510,
1100 8500, 8506, 8516, 8524, 8499, 8504, 8517, 8509, 8534, 8535,
1101
1102 8522, 8545, 8551, 8542, 8547, 8550, 8553, 8549, 9263, 9263,
1103 8558, 8560, 8555, 9263, 9263, 8563, 8565, 8570, 8571, 8573,
1104 8579, 8583, 9263, 8575, 8586, 8580, 8576, 8574, 9263, 8577,
1105 8593, 8590, 8582, 8587, 8607, 8597, 8618, 9263, 9263, 8601,
1106 8622, 8603, 8626, 8613, 9263, 8630, 8641, 8623, 8638, 8628,
1107 8624, 8632, 9263, 8655, 8635, 9263, 9263, 9263, 8651, 9263,
1108 9263, 8646, 9263, 9263, 9263, 9263, 9263, 9263, 9263, 8660,
1109 9263, 8654, 8676, 8677, 8679, 9263, 8657, 8674, 8681, 8669,
1110 8678, 9263, 8668, 8675, 8693, 8695, 8694, 8699, 8701, 8696,
1111 8711, 8716, 8706, 8719, 8708, 8718, 8726, 8735, 8728, 8744,
1112
1113 9263, 9263, 9263, 8723, 8743, 8739, 8742, 8752, 8753, 8760,
1114 8765, 8758, 8762, 8769, 8768, 8778, 8759, 8776, 8793, 8780,
1115 8785, 8796, 8786, 8798, 8802, 8799, 8789, 8815, 9263, 8804,
1116 9263, 8809, 9263, 9263, 8817, 8821, 8824, 8811, 8839, 8842,
1117 8826, 8834, 8831, 8838, 8845, 8852, 9263, 9263, 8835, 8844,
1118 9263, 8841, 8859, 9263, 8853, 8870, 8857, 8865, 8868, 8866,
1119 8882, 8883, 8889, 9263, 9263, 8874, 8880, 8877, 8899, 8901,
1120 8916, 8912, 8914, 8915, 8917, 8905, 8923, 9263, 8927, 8925,
1121 8929, 9263, 8931, 8918, 8941, 8934, 8936, 8939, 8940, 8947,
1122 9263, 8964, 9263, 8969, 8961, 8966, 8957, 8958, 8968, 8978,
1123
1124 8967, 8988, 9263, 8963, 8982, 8992, 9006, 9012, 8997, 9010,
1125 8995, 9018, 9015, 9019, 9023, 9024, 9025, 9008, 9038, 9030,
1126 9263, 9026, 9036, 9263, 9051, 9057, 9041, 9042, 9063, 9263,
1127 9066, 9048, 9052, 9072, 9074, 9070, 9263, 9080, 9081, 9078,
1128 9263, 9087, 9263, 9263, 9090, 9083, 9084, 9086, 9096, 9263,
1129 9263, 9263, 9143, 9150, 9157, 9164, 9171, 9178, 9185, 102,
1130 9192, 9199, 9206, 9213, 9220, 9227, 9234, 9241, 9248, 9255
815 1107, 1238, 9388, 1215, 1242, 1149, 1243, 1244, 1251, 1226,
816 1269, 1237, 1259, 1217, 1252, 1275, 1292, 1340, 1264, 1297,
817 1279, 1283, 1289, 9388, 1320, 1317, 1389, 1293, 1324, 1309,
818 1342, 1325, 1307, 1322, 1345, 1338, 1224, 1353, 1335, 1371,
819 1383, 1388, 1375, 1380, 1382, 1394, 1398, 1262, 1416, 1409,
820
821 1421, 1420, 1266, 1412, 1425, 1418, 1455, 1422, 1430, 1435,
822 1444, 1457, 1463, 1468, 1470, 1475, 1448, 1464, 1461, 1469,
823 1484, 1499, 1544, 1302, 1491, 1502, 1501, 1503, 1347, 1488,
824 1511, 1516, 1510, 1518, 1504, 1532, 1528, 1542, 1547, 1540,
825 1555, 1527, 1559, 1550, 1543, 1567, 1568, 1592, 1569, 1577,
826 1560, 1586, 1599, 1603, 1594, 1608, 1605, 1590, 1613, 1596,
827 9388, 1615, 1623, 1604, 1637, 1627, 1636, 9388, 1631, 1634,
828 1633, 1641, 1632, 1656, 1661, 1657, 1658, 1659, 1663, 1673,
829 1654, 1682, 1671, 1692, 1706, 1688, 1698, 1683, 1686, 1700,
830 1711, 1693, 1712, 1710, 1709, 1727, 1767, 9388, 1722, 1730,
831
832 1719, 1733, 1731, 1757, 1771, 1750, 1758, 1785, 1755, 1794,
833 1782, 1789, 1803, 1788, 1798, 1795, 1792, 1826, 1814, 1822,
834 1820, 1821, 1815, 1831, 1830, 1824, 1844, 1846, 9388, 1841,
835 1851, 1865, 1857, 1860, 1853, 1862, 1866, 1856, 1884, 1877,
836 1883, 1867, 1887, 1721, 1870, 1886, 1905, 1894, 1904, 1902,
837 1908, 1914, 1917, 1921, 1911, 1956, 1915, 1909, 1926, 1944,
838 1945, 1949, 1957, 1963, 1938, 1948, 1958, 1964, 1943, 1965,
839 1971, 1972, 1955, 1975, 1976, 1984, 1989, 1979, 1990, 1996,
840 2007, 1998, 1988, 2014, 2002, 2006, 2017, 2022, 2016, 2039,
841 2034, 2031, 2037, 2040, 2033, 2043, 2049, 2053, 9388, 2044,
842
843 2064, 2059, 2077, 2067, 2082, 2079, 2071, 2070, 2086, 2083,
844 2097, 2098, 2092, 2107, 2108, 2101, 2112, 2110, 2106, 2099,
845 2128, 2142, 2133, 2141, 2120, 2137, 2147, 2145, 2157, 2153,
846 2134, 2161, 2162, 2154, 2158, 2177, 2175, 2160, 2181, 2186,
847 2172, 2194, 2193, 2198, 2180, 2199, 2205, 2234, 2213, 2178,
848 2229, 2217, 2233, 2221, 2224, 2227, 2228, 2226, 2238, 2248,
849 2240, 2244, 2253, 2260, 2258, 2269, 2255, 2262, 2274, 2271,
850 2265, 2272, 2286, 2275, 2287, 2282, 2304, 2297, 2301, 2280,
851 2311, 2315, 2318, 2307, 2314, 2321, 2324, 2320, 2338, 2327,
852 2337, 2350, 2351, 2356, 2363, 2342, 2359, 2364, 2362, 2365,
853
854 2367, 2370, 2369, 2377, 2384, 2396, 2392, 2395, 2389, 2412,
855 2417, 2413, 2415, 2419, 9388, 2402, 2422, 2404, 2423, 2429,
856 2408, 2425, 2435, 2430, 2451, 2445, 2434, 2444, 2490, 9388,
857 2452, 9388, 9388, 2449, 9388, 9388, 2460, 2471, 9388, 2474,
858 2479, 2457, 2493, 2504, 2507, 2500, 2496, 2489, 2498, 2486,
859 2545, 2516, 2523, 2515, 2524, 2529, 2550, 2535, 2539, 2560,
860 2534, 2562, 2583, 2561, 2581, 2578, 2589, 2595, 2598, 2597,
861 2599, 2601, 2605, 2602, 2592, 2608, 2586, 2617, 2610, 2639,
862 2627, 2629, 2645, 2630, 2635, 2628, 2622, 2653, 2651, 2664,
863 9388, 2655, 2657, 2666, 2663, 2670, 2673, 2665, 2675, 2679,
864
865 2681, 2678, 2689, 2691, 2687, 2682, 2688, 2690, 2703, 2704,
866 2717, 2700, 9388, 2713, 2715, 2705, 2720, 2726, 2730, 2731,
867 2723, 2714, 2734, 2732, 2773, 2747, 2740, 2750, 2756, 2752,
868 2775, 9388, 2779, 2771, 2763, 2780, 2766, 2768, 2774, 2777,
869 2789, 2801, 2795, 2793, 2805, 2798, 2824, 2820, 2815, 2811,
870 2819, 2825, 2821, 2834, 2840, 2843, 2832, 2844, 2845, 2849,
871 2851, 2855, 2857, 2848, 2854, 2865, 2860, 2871, 2866, 2870,
872 2888, 2890, 2876, 2887, 2884, 2881, 2904, 2893, 2906, 2892,
873 2911, 2923, 2908, 2925, 2912, 2922, 2945, 2926, 2938, 2943,
874 2934, 2939, 2953, 2948, 9388, 2936, 2950, 9388, 2949, 2954,
875
876 2952, 2999, 2989, 2978, 2969, 2992, 2970, 2994, 2991, 3000,
877 3007, 3009, 3043, 3019, 3018, 3036, 3029, 3046, 3037, 3048,
878 3054, 3039, 3055, 3021, 3056, 3067, 2951, 3059, 3058, 615,
879 3070, 3071, 3065, 3073, 3120, 3078, 3097, 3089, 3092, 3105,
880 3109, 3100, 3096, 3123, 3124, 3122, 3082, 3147, 3132, 3127,
881 3141, 3158, 3074, 3156, 3155, 9388, 3161, 3159, 3171, 3172,
882 3151, 3168, 3187, 3174, 9388, 3185, 3188, 3180, 3186, 3191,
883 3189, 3201, 3202, 3211, 3210, 3214, 3223, 3227, 3228, 3229,
884 3215, 9388, 3224, 9388, 3217, 3242, 3220, 3250, 3247, 3233,
885 3263, 3266, 9388, 9388, 3267, 3261, 3275, 3216, 3269, 9388,
886
887 3284, 3283, 9388, 3303, 3278, 3287, 3259, 3296, 3295, 3302,
888 3305, 3289, 3297, 3292, 3306, 3330, 3311, 9388, 3323, 3316,
889 3331, 3340, 3333, 3341, 3350, 3339, 9388, 3348, 3343, 3363,
890 3361, 3365, 3362, 3356, 3376, 3383, 3367, 3368, 3373, 3377,
891 3378, 3402, 3404, 3403, 3410, 3411, 3407, 9388, 3395, 3397,
892 3414, 3418, 3419, 3412, 3424, 3409, 3428, 3422, 3429, 3442,
893 3452, 3440, 3449, 3443, 3468, 3469, 3450, 3466, 3472, 3454,
894 3464, 3463, 91, 3476, 3474, 3485, 3481, 9388, 3488, 3482,
895 3491, 128, 3499, 3501, 3502, 3492, 3508, 3520, 3503, 3527,
896 3530, 3521, 3531, 3540, 3534, 3518, 3535, 3541, 3538, 3533,
897
898 3544, 3555, 3556, 9388, 3572, 3560, 3559, 3566, 3578, 3565,
899 3601, 9388, 3587, 3594, 3598, 3589, 3600, 3582, 3610, 3605,
900 3608, 3622, 3614, 3629, 3627, 3633, 3636, 3632, 3642, 9388,
901 3645, 3647, 3657, 3644, 3663, 3651, 3658, 3665, 3666, 3677,
902 3671, 3672, 3679, 3685, 3682, 3684, 3698, 3694, 3688, 3699,
903 3702, 3708, 3718, 3712, 3724, 3715, 3713, 3726, 3727, 9388,
904 3561, 3735, 3742, 3740, 3732, 3739, 3759, 3745, 3776, 3751,
905 3766, 3760, 3784, 3812, 3768, 3779, 3795, 3791, 3796, 3800,
906 3799, 3797, 3805, 3815, 3824, 3829, 3850, 3814, 3836, 3837,
907 3839, 3833, 3856, 3849, 3873, 3874, 3866, 3875, 3898, 3877,
908
909 3806, 3881, 9388, 3884, 3894, 3872, 3886, 3896, 3901, 3902,
910 3915, 3913, 3917, 3911, 3929, 3919, 3908, 3931, 3941, 3936,
911 3947, 3951, 3946, 3943, 3937, 3964, 3966, 3956, 3967, 3970,
912 9388, 3977, 3976, 3968, 3975, 3985, 3986, 3990, 3999, 3996,
913 3988, 3989, 4005, 3998, 4016, 4002, 4015, 4012, 4028, 4013,
914 9388, 4032, 4023, 4029, 4027, 4039, 4043, 4047, 4050, 4055,
915 4062, 4059, 4049, 4066, 4068, 4056, 9388, 4078, 4086, 4079,
916 4090, 4083, 4081, 4077, 4097, 4087, 9388, 4094, 4096, 4095,
917 4103, 4106, 4114, 9388, 4108, 4111, 4112, 4117, 4128, 4115,
918 4130, 4145, 4133, 4124, 4136, 4156, 4150, 4139, 4160, 9388,
919
920 4151, 4174, 4164, 4159, 4163, 4179, 4169, 4185, 4194, 4195,
921 4205, 4196, 9388, 4190, 4209, 4197, 4219, 4206, 4189, 4220,
922 4223, 4234, 4226, 4221, 4240, 4229, 9388, 4237, 4236, 4242,
923 4256, 4255, 4252, 4258, 4248, 4261, 4271, 4266, 4247, 4276,
924 4275, 4287, 4288, 4296, 4281, 4297, 4304, 4298, 4300, 4310,
925 4311, 4315, 4316, 4320, 4329, 4335, 4328, 4324, 4343, 4325,
926 4340, 4351, 4349, 4352, 9388, 4354, 4355, 4356, 4342, 4346,
927 4370, 4373, 4367, 4362, 4371, 4385, 4390, 4382, 4380, 4408,
928 4410, 4386, 4401, 4397, 4400, 4405, 4420, 4411, 4422, 4413,
929 4409, 4429, 4418, 4426, 4432, 4433, 4453, 4435, 4436, 4445,
930
931 4446, 4456, 4447, 4452, 4449, 4472, 4473, 4484, 4486, 4482,
932 4489, 4477, 4479, 4483, 4499, 9388, 4480, 4503, 4504, 4502,
933 4511, 4521, 4528, 4529, 4524, 4523, 4532, 4530, 4538, 4520,
934 4525, 4548, 4546, 4544, 9388, 4535, 9388, 4551, 4569, 4557,
935 4581, 4559, 9388, 4577, 9388, 4580, 4582, 4571, 4573, 9388,
936 4585, 4570, 4584, 4591, 4598, 4600, 4603, 4597, 4609, 4604,
937 4617, 4610, 4618, 4614, 4615, 4637, 4620, 4625, 4641, 4636,
938 4654, 4652, 4647, 4657, 4649, 4648, 4665, 4653, 4677, 9388,
939 4687, 4673, 4670, 4676, 4686, 4681, 4666, 4700, 4697, 4692,
940 4703, 4707, 4711, 4716, 4715, 4724, 4731, 4730, 4717, 4745,
941
942 9388, 4727, 4746, 4733, 4743, 9388, 4750, 4732, 4760, 4764,
943 4753, 4748, 4754, 4768, 4773, 4772, 4777, 4758, 4800, 4802,
944 4781, 4804, 9388, 4775, 4805, 4787, 4816, 4809, 4820, 4825,
945 4817, 4827, 4834, 4826, 4833, 4829, 4830, 4832, 4843, 4837,
946 4831, 4846, 4861, 4873, 4849, 4869, 4871, 4875, 4859, 4862,
947 4864, 4865, 4867, 4883, 4885, 4888, 4891, 4912, 4898, 9388,
948 4893, 4904, 4906, 4926, 4907, 4920, 4908, 4915, 4924, 9388,
949 4923, 4932, 4933, 4937, 4947, 4942, 4944, 4943, 4950, 4953,
950 4946, 4959, 4969, 4971, 9388, 4977, 9388, 4974, 4979, 4983,
951 4990, 4988, 4984, 5004, 4991, 5003, 4993, 5008, 5017, 5006,
952
953 5005, 5014, 5009, 5033, 5029, 5051, 5037, 5027, 5040, 5039,
954 5044, 5043, 5049, 9388, 9388, 5048, 5050, 5062, 5065, 5070,
955 5077, 5086, 5084, 5078, 5076, 5091, 5080, 5122, 9388, 5088,
956 5104, 5105, 5111, 5129, 5108, 5130, 5138, 5131, 5139, 5134,
957 9388, 5117, 5128, 5146, 5132, 5159, 5152, 9388, 5143, 9388,
958 5155, 5156, 5163, 5167, 5164, 5172, 5166, 5170, 5160, 5193,
959 5197, 5183, 5200, 5186, 5187, 5190, 5215, 5203, 5223, 5199,
960 5212, 5204, 9388, 5219, 5214, 5225, 5230, 5232, 5233, 5231,
961 5224, 9388, 5241, 5239, 5244, 5250, 5251, 5256, 5245, 5259,
962 5272, 5258, 5264, 9388, 5265, 5262, 5292, 5281, 5277, 5288,
963
964 5298, 5302, 5301, 9388, 5307, 5304, 5315, 5314, 5306, 5321,
965 5324, 5297, 5308, 5319, 5320, 5331, 5344, 5334, 5340, 5341,
966 5348, 5350, 5335, 5361, 5364, 5363, 5360, 5379, 5368, 9388,
967 5365, 5375, 5381, 5383, 5396, 5393, 5400, 5385, 5404, 5395,
968 5413, 5416, 5405, 5408, 5414, 5433, 5423, 5435, 9388, 5424,
969 5421, 5450, 5422, 5443, 5452, 5434, 5453, 5455, 5442, 5451,
970 5462, 5470, 5463, 5464, 5474, 5456, 5478, 5480, 5497, 5482,
971 9388, 5511, 5490, 5495, 5506, 5501, 5503, 5521, 5516, 5499,
972 5513, 5532, 5515, 5535, 5524, 5527, 5546, 5550, 5533, 9388,
973 9388, 5555, 5531, 5548, 9388, 5558, 5543, 5570, 5566, 5551,
974
975 5554, 5579, 5578, 5562, 5589, 5574, 5576, 9388, 5593, 5584,
976 5575, 5597, 5612, 5613, 5609, 5605, 5614, 5601, 5599, 5617,
977 5627, 5615, 5608, 5637, 5648, 5651, 5632, 5640, 5643, 9388,
978 5642, 5631, 5644, 5666, 5654, 5657, 9388, 5658, 5664, 5680,
979 5674, 5687, 5684, 5681, 5694, 5675, 5689, 5679, 5700, 5702,
980 5706, 5714, 5713, 5707, 5717, 5719, 5727, 9388, 5709, 5732,
981 5715, 5737, 9388, 5738, 5756, 5755, 9388, 5757, 5734, 5758,
982 5754, 5762, 9388, 5759, 5764, 5761, 5742, 5777, 5752, 5781,
983 5775, 5784, 9388, 5785, 5786, 5787, 9388, 5800, 5798, 5806,
984 5809, 5790, 5820, 5812, 5811, 5815, 5813, 9388, 5823, 9388,
985
986 5826, 5819, 5833, 9388, 5832, 5839, 5830, 5841, 5843, 5849,
987 5858, 5861, 5865, 5847, 5860, 5855, 5853, 5871, 5878, 5882,
988 5866, 5877, 5879, 5881, 9388, 5900, 5889, 5894, 5898, 5913,
989 5906, 5905, 5899, 5924, 5910, 9388, 9388, 5919, 9388, 5928,
990 5922, 5927, 9388, 5921, 5939, 5940, 5935, 5956, 5958, 5959,
991 5961, 9388, 5964, 5967, 9388, 5948, 5966, 5978, 5970, 5954,
992 5962, 5973, 5981, 5985, 5980, 5998, 5987, 5999, 5989, 6003,
993 6016, 9388, 5993, 6000, 6009, 6024, 6014, 6019, 6025, 6026,
994 6027, 9388, 6029, 6042, 6045, 6052, 6053, 9388, 6055, 9388,
995 6049, 6056, 6058, 6066, 6054, 9388, 6075, 6072, 6078, 6062,
996
997 6091, 6099, 6093, 6102, 6085, 6089, 6111, 6105, 6095, 6106,
998 9388, 6100, 6117, 6121, 6123, 6125, 6122, 6116, 6134, 6143,
999 6129, 6146, 6153, 6148, 6156, 6158, 6155, 6163, 6161, 9388,
1000 6184, 6174, 6144, 6199, 6188, 6186, 9388, 6190, 6173, 6203,
1001 9388, 6191, 6187, 6200, 6210, 6194, 6201, 6206, 6218, 6223,
1002 9388, 6228, 6229, 6224, 6237, 6243, 6245, 9388, 9388, 6247,
1003 9388, 6246, 6234, 6261, 6259, 6233, 6269, 6216, 6273, 6262,
1004 6264, 6286, 6287, 6281, 6275, 6306, 6268, 6303, 6296, 6304,
1005 6291, 9388, 9388, 6307, 6314, 6316, 6320, 6321, 6323, 6309,
1006 6333, 6332, 6343, 6345, 6341, 6356, 9388, 6349, 6338, 6351,
1007
1008 6354, 9388, 6336, 6352, 6363, 6360, 6364, 6371, 6350, 6372,
1009 6390, 6378, 6394, 6393, 6388, 6399, 6380, 6391, 6396, 6410,
1010 6407, 6398, 6414, 6428, 9388, 6434, 6421, 6424, 6422, 6420,
1011 6427, 6431, 6438, 6436, 9388, 6447, 9388, 6451, 6439, 6454,
1012 6466, 6475, 6471, 6479, 6470, 6472, 6477, 6484, 6488, 6492,
1013 6496, 6493, 6487, 6504, 6513, 6501, 6507, 6511, 9388, 6519,
1014 6506, 6509, 6518, 6537, 6539, 6523, 6541, 6536, 6544, 6532,
1015 6543, 6555, 6558, 6546, 6552, 6551, 6553, 9388, 6557, 6567,
1016 6564, 6576, 6559, 6584, 6592, 6596, 6593, 6579, 6586, 6581,
1017 6602, 9388, 6587, 6582, 6603, 6611, 6616, 6614, 6621, 6620,
1018
1019 6622, 9388, 6631, 6624, 6629, 6632, 6634, 6639, 6628, 6649,
1020 6656, 6666, 6667, 9388, 6662, 6664, 6673, 6655, 6659, 6677,
1021 6683, 6676, 9388, 6701, 6703, 6694, 6695, 6690, 6718, 6714,
1022 6715, 6691, 6710, 6721, 6717, 6722, 6725, 6730, 6713, 6737,
1023 6760, 6752, 9388, 6742, 9388, 6750, 6764, 6768, 6766, 6769,
1024 6751, 9388, 6754, 6772, 6640, 6789, 6776, 9388, 6778, 6791,
1025 6793, 6794, 9388, 6810, 6809, 6799, 6811, 6782, 6783, 9388,
1026 6822, 6821, 6820, 6832, 6833, 6830, 6829, 6828, 6843, 6841,
1027 6831, 6835, 6860, 6837, 6849, 6862, 9388, 6869, 6871, 6865,
1028 6870, 6868, 6876, 6859, 6878, 6883, 6880, 9388, 6886, 6888,
1029
1030 6894, 6897, 6895, 6896, 6912, 6924, 6919, 6909, 6910, 6913,
1031 6923, 6921, 9388, 6918, 6931, 6944, 6936, 6926, 6958, 9388,
1032 6953, 9388, 6950, 6965, 6967, 6946, 6974, 9388, 9388, 6977,
1033 6938, 6956, 6978, 6973, 9388, 9388, 6979, 9388, 6980, 9388,
1034 6976, 6994, 9388, 9388, 6991, 6985, 7008, 7009, 6988, 9388,
1035 7016, 9388, 7024, 7019, 7006, 7004, 7023, 9388, 7015, 7017,
1036 7027, 9388, 7021, 7037, 7040, 7044, 9388, 7039, 7042, 7033,
1037 7047, 9388, 7061, 7063, 7068, 7057, 7067, 7072, 7078, 7056,
1038 7079, 7069, 7082, 7071, 7096, 7110, 7111, 7112, 7113, 7103,
1039 7098, 7114, 7120, 7123, 7105, 7122, 7106, 7129, 7127, 7133,
1040
1041 7131, 7135, 7144, 7147, 7150, 7151, 7146, 7160, 7148, 7149,
1042 7164, 7158, 7154, 7177, 7175, 7174, 7185, 7191, 7182, 7196,
1043 7193, 7201, 9388, 7195, 7184, 7194, 7211, 7215, 7222, 7226,
1044 7219, 7234, 7235, 9388, 7238, 9388, 7244, 7230, 7240, 7228,
1045 7237, 9388, 7249, 7232, 7246, 7260, 7261, 7262, 7279, 7263,
1046 7266, 7267, 7290, 9388, 7286, 7278, 7276, 7293, 7299, 9388,
1047 7295, 7300, 7296, 7297, 7294, 7317, 7312, 7316, 7319, 7318,
1048 7333, 7336, 7320, 7331, 7342, 7338, 7350, 7356, 7352, 7339,
1049 7353, 7341, 7366, 7358, 7364, 7368, 7385, 7374, 7386, 7389,
1050 9388, 7375, 9388, 7381, 7377, 7380, 7383, 7401, 7398, 7405,
1051
1052 9388, 9388, 7400, 7419, 7409, 7411, 7413, 7429, 7430, 9388,
1053 7427, 7433, 7435, 7428, 9388, 7444, 7423, 7445, 7439, 9388,
1054 7436, 7458, 7469, 7452, 7455, 7476, 7472, 7471, 7462, 7475,
1055 7481, 9388, 9388, 9388, 9388, 7482, 7466, 7484, 7493, 7499,
1056 7486, 7507, 7490, 7503, 9388, 7497, 9388, 9388, 7514, 7520,
1057 7509, 7522, 7513, 7510, 7526, 7524, 9388, 7540, 7533, 7537,
1058 7543, 7544, 7557, 7561, 7556, 7567, 7548, 7550, 7578, 7569,
1059 7575, 7564, 7581, 7580, 7587, 9388, 9388, 7584, 7589, 7595,
1060 7609, 7605, 7607, 7601, 7622, 7596, 7613, 7611, 7604, 7621,
1061 7614, 7626, 7631, 7625, 7632, 9388, 7636, 7628, 7647, 9388,
1062
1063 7639, 9388, 7649, 7656, 7646, 7652, 7658, 7659, 7671, 7660,
1064 9388, 9388, 7657, 7685, 7676, 9388, 9388, 7670, 7673, 7686,
1065 7690, 7694, 7687, 7695, 7692, 7708, 7691, 9388, 7696, 9388,
1066 7709, 7720, 7715, 7700, 7731, 7735, 7744, 7740, 7733, 7738,
1067 9388, 7736, 7737, 9388, 7742, 7734, 7739, 9388, 7752, 7756,
1068 7749, 7755, 9388, 7757, 7781, 7773, 9388, 7759, 9388, 7767,
1069 7783, 7777, 7795, 9388, 7771, 7792, 9388, 7796, 7797, 7799,
1070 7790, 9388, 7807, 9388, 7786, 7809, 7810, 7821, 7812, 7828,
1071 7818, 7814, 7826, 7847, 7835, 7839, 9388, 9388, 73, 7849,
1072 7823, 7836, 7837, 7845, 7852, 7844, 7861, 7860, 9388, 9388,
1073
1074 7863, 9388, 7867, 7874, 9388, 7855, 7878, 7884, 7882, 7886,
1075 7871, 7883, 7879, 7897, 7901, 7911, 7905, 7898, 7913, 7934,
1076 7936, 7916, 7923, 7932, 7938, 7944, 7946, 7937, 7949, 7931,
1077 7929, 7952, 7948, 7963, 7960, 7950, 7965, 9388, 7983, 7986,
1078 7988, 7971, 9388, 7993, 7992, 8000, 7996, 9388, 8002, 7994,
1079 7995, 7997, 9388, 7987, 8007, 8013, 8016, 8020, 8041, 8024,
1080 8029, 8042, 9388, 9388, 9388, 8034, 8045, 9388, 8048, 8036,
1081 8028, 8031, 9388, 8051, 8047, 9388, 9388, 8054, 8058, 8062,
1082 8075, 9388, 8071, 9388, 8063, 9388, 8086, 8087, 8094, 8088,
1083 9388, 8096, 8099, 9388, 8093, 8104, 8105, 8098, 8109, 8089,
1084
1085 8112, 9388, 8138, 8132, 8135, 8141, 8124, 8131, 8125, 8144,
1086 8127, 8152, 8123, 8153, 9388, 8151, 8156, 8158, 8159, 8147,
1087 8162, 8169, 9388, 8171, 9388, 8181, 9388, 8179, 8182, 8190,
1088 8188, 8183, 8186, 8193, 8198, 8206, 8214, 8209, 8211, 8202,
1089 8212, 9388, 9388, 8216, 8235, 9388, 8219, 9388, 8242, 9388,
1090 8228, 8229, 8232, 8246, 9388, 8247, 8233, 8234, 8249, 9388,
1091 8262, 8238, 8258, 8266, 9388, 9388, 8261, 8275, 8278, 8260,
1092 8286, 8291, 8272, 8296, 8287, 8285, 8280, 8302, 8284, 8289,
1093 8297, 8306, 8319, 8325, 9388, 9388, 9388, 8308, 8311, 8337,
1094 8334, 8333, 8342, 8321, 9388, 8335, 8341, 8338, 8332, 8350,
1095
1096 8354, 8355, 9388, 8361, 8356, 8359, 8362, 8376, 8360, 8364,
1097 8381, 9388, 8385, 8392, 8388, 8382, 8389, 8395, 8397, 8404,
1098 8400, 8399, 8410, 8409, 9388, 8418, 9388, 9388, 8411, 9388,
1099 8406, 8407, 8417, 8431, 9388, 8435, 8433, 8422, 8434, 8446,
1100 8448, 9388, 8455, 8444, 8449, 8458, 9388, 9388, 8451, 9388,
1101 8453, 8460, 8440, 8477, 8467, 8475, 8484, 8481, 9388, 8469,
1102 8473, 8492, 8476, 8495, 9388, 8490, 8480, 8485, 8494, 9388,
1103 8491, 8507, 8512, 8506, 8526, 9388, 8532, 8515, 8543, 8539,
1104 9388, 8520, 8542, 8533, 9388, 9388, 8548, 8549, 8547, 9388,
1105 9388, 9388, 8552, 8550, 8561, 8563, 9388, 8565, 8585, 8587,
1106
1107 8595, 8564, 9388, 8581, 8571, 8582, 9388, 9388, 8577, 8579,
1108 8598, 8600, 9388, 9388, 8586, 8594, 8606, 8593, 8590, 9388,
1109 8613, 8609, 8614, 8619, 8634, 8620, 8638, 8639, 8644, 8654,
1110 8625, 8640, 8632, 8652, 8658, 8637, 8660, 8659, 8662, 8669,
1111 8672, 8661, 8686, 9388, 9388, 8673, 9388, 8674, 8683, 9388,
1112 9388, 8693, 8694, 8697, 8698, 8702, 8704, 8705, 9388, 8699,
1113 8706, 8700, 8695, 8696, 9388, 8711, 8712, 8713, 8724, 8729,
1114 8743, 8727, 8745, 9388, 9388, 8731, 8747, 8720, 8751, 8735,
1115 9388, 8756, 8765, 8734, 8758, 8762, 8764, 8768, 9388, 8760,
1116 8779, 9388, 9388, 8790, 8783, 9388, 9388, 8770, 9388, 9388,
1117
1118 9388, 9388, 9388, 9388, 9388, 8797, 9388, 8786, 8801, 8802,
1119 8803, 9388, 8789, 8795, 8810, 8813, 8791, 9388, 8811, 8808,
1120 8815, 8841, 8821, 8844, 8837, 8830, 8835, 8838, 8831, 8840,
1121 8842, 8847, 8861, 8852, 8870, 8864, 8880, 9388, 9388, 9388,
1122 8876, 8867, 8889, 8883, 8895, 8897, 8896, 8899, 8882, 8886,
1123 8902, 8903, 8910, 8893, 8912, 8909, 8907, 8919, 8933, 8940,
1124 8923, 8941, 8944, 8932, 8930, 8951, 9388, 8937, 9388, 8935,
1125 9388, 9388, 8955, 8960, 8948, 8950, 8968, 8971, 8958, 8973,
1126 8962, 8979, 8990, 9388, 8991, 9388, 9388, 8976, 8974, 9388,
1127 8978, 8989, 9388, 8982, 8999, 8988, 9001, 9009, 9006, 9005,
1128
1129 9018, 9012, 9388, 9388, 9015, 9020, 9021, 9027, 9039, 9048,
1130 9029, 9041, 9050, 9053, 9032, 9065, 9388, 9061, 9059, 9063,
1131 9388, 9066, 9057, 9062, 9060, 9075, 9077, 9080, 9068, 9388,
1132 9073, 9388, 9083, 9100, 9093, 9086, 9092, 9101, 9115, 9113,
1133 9104, 9388, 9096, 9123, 9110, 9132, 9134, 9125, 9139, 9128,
1134 9148, 9149, 9151, 9158, 9156, 9157, 9150, 9160, 9152, 9388,
1135 9167, 9170, 9388, 9177, 9181, 9174, 9176, 9187, 9388, 9172,
1136 9183, 9192, 9199, 9205, 9210, 9388, 9206, 9207, 9214, 9388,
1137 9213, 9388, 9388, 9219, 9204, 9209, 9212, 9225, 9388, 9388,
1138 9388, 9268, 9275, 9282, 9289, 9296, 9303, 9310, 102, 9317,
1139
1140 9324, 9331, 9338, 9345, 9352, 9359, 9366, 9373, 9380
11311141 } ;
11321142
1133 static const flex_int16_t yy_def[3271] =
1143 static const flex_int16_t yy_def[3310] =
11341144 { 0,
1135 3252, 1, 3253, 3253, 3254, 3254, 3255, 3255, 3256, 3256,
1136 3257, 3257, 3258, 3258, 3259, 3259, 3252, 3260, 3252, 3252,
1137 3252, 3252, 3261, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1138 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1139 3260, 3260, 3260, 3260, 3260, 3260, 3262, 3252, 3252, 3252,
1140 3262, 3263, 3252, 3252, 3252, 3263, 3264, 3252, 3252, 3252,
1141 3252, 3264, 3265, 3252, 3252, 3252, 3265, 3266, 3252, 3267,
1142 3252, 3266, 3266, 3268, 3252, 3252, 3252, 3252, 3268, 3269,
1143 3252, 3252, 3252, 3269, 3260, 3260, 3252, 3270, 3261, 3270,
1144 3261, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1145
1146 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1147 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1148 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1149 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1150 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1151 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3262, 3262, 3263,
1152 3263, 3264, 3264, 3252, 3265, 3265, 3266, 3266, 3267, 3267,
1153 3266, 3268, 3268, 3252, 3269, 3269, 3260, 3260, 3260, 3260,
1154 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1155 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1156
1157 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1158 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1159 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1160 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1161 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1162 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1163 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3266, 3260, 3260,
1164 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1165 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1166 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1167
1168 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1169 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1170 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1171 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1172 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1173 3260, 3260, 3252, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1174 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1175 3260, 3260, 3260, 3252, 3260, 3260, 3260, 3260, 3260, 3260,
1176 3260, 3266, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1177 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1178
1179 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1180 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1181 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1182 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1183 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1184 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1185 3252, 3260, 3260, 3260, 3260, 3260, 3260, 3252, 3260, 3260,
1186 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1187 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1188 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3252, 3260, 3260,
1189
1190 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1191 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1192 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3252, 3260, 3266,
1193 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1194 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1195 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1196 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1197 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1198 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1199 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3252, 3260, 3260,
1200
1201 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1202 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1203 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1204 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1205 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1206 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1207 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1208 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1209 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1210 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3266,
1211
1212 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1213 3260, 3260, 3252, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1214 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3252, 3260, 3252,
1215 3252, 3260, 3252, 3252, 3260, 3260, 3252, 3260, 3260, 3260,
1216 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1217 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1218 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1219 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1220 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3252, 3260, 3260,
1221 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1222
1223 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3252,
1224 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1225 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3252, 3260,
1226 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1227 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1228 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1229 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1230 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1231 3260, 3260, 3266, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1232 3252, 3260, 3260, 3252, 3260, 3260, 3260, 3260, 3260, 3260,
1233
1234 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1235 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1236 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1237 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1238 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1239 3252, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3252, 3260,
1240 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1241 3260, 3260, 3260, 3260, 3260, 3252, 3260, 3252, 3260, 3260,
1242 3260, 3260, 3260, 3260, 3260, 3260, 3252, 3252, 3260, 3260,
1243 3260, 3260, 3260, 3252, 3260, 3260, 3252, 3260, 3260, 3260,
1244
1245 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1246 3260, 3252, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1247 3252, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1248 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1249 3260, 3252, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1250 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1251 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1252 3252, 3260, 3260, 3266, 3266, 3260, 3260, 3260, 3260, 3260,
1253 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1254 3260, 3260, 3260, 3260, 3260, 3260, 3252, 3260, 3260, 3260,
1255
1256 3260, 3260, 3260, 3260, 3252, 3260, 3260, 3260, 3260, 3260,
1257 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1258 3260, 3260, 3252, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1259 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1260 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1261 3260, 3252, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1262 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1263 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1264 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1265 3260, 3260, 3260, 3252, 3260, 3260, 3260, 3260, 3260, 3260,
1266
1267 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1268 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1269 3260, 3252, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1270 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1271 3260, 3252, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1272 3260, 3260, 3260, 3260, 3260, 3260, 3252, 3260, 3260, 3260,
1273 3260, 3260, 3260, 3260, 3260, 3260, 3252, 3266, 3260, 3260,
1274 3260, 3260, 3260, 3252, 3260, 3260, 3260, 3260, 3260, 3260,
1275 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3252,
1276 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1277
1278 3260, 3260, 3252, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1279 3260, 3260, 3260, 3260, 3260, 3260, 3252, 3260, 3260, 3260,
1280 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1281 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1282 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1283 3260, 3260, 3252, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1284 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1285 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1286 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1287 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1288
1289 3260, 3260, 3260, 3252, 3260, 3260, 3260, 3260, 3260, 3260,
1290 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1291 3260, 3260, 3252, 3260, 3252, 3260, 3260, 3260, 3260, 3260,
1292 3252, 3260, 3252, 3260, 3260, 3260, 3260, 3252, 3260, 3260,
1293 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1294 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1295 3260, 3260, 3260, 3260, 3260, 3260, 3252, 3260, 3266, 3260,
1296 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1297 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3252, 3260, 3260,
1298 3260, 3260, 3252, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1299
1300 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3252,
1301 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1302 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1303 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1304 3260, 3260, 3260, 3260, 3260, 3252, 3260, 3260, 3260, 3260,
1305 3260, 3260, 3260, 3260, 3252, 3260, 3260, 3260, 3260, 3260,
1306 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3252,
1307 3260, 3252, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1308 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1309 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3252, 3252,
1310
1311 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1312 3260, 3260, 3260, 3252, 3260, 3260, 3260, 3260, 3260, 3260,
1313 3260, 3260, 3260, 3260, 3260, 3252, 3260, 3260, 3260, 3260,
1314 3260, 3260, 3252, 3260, 3252, 3260, 3260, 3260, 3260, 3260,
1315 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1316 3260, 3260, 3260, 3260, 3260, 3260, 3252, 3260, 3260, 3260,
1317 3260, 3260, 3260, 3260, 3260, 3252, 3266, 3260, 3260, 3260,
1318 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3252, 3260, 3260,
1319 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3252, 3260, 3260,
1320 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1321
1322 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1323 3260, 3260, 3260, 3252, 3260, 3260, 3260, 3260, 3260, 3260,
1324 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1325 3260, 3260, 3252, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1326 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1327 3260, 3260, 3252, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1328 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1329 3260, 3252, 3252, 3260, 3260, 3260, 3252, 3260, 3260, 3260,
1330 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3252,
1331 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1332
1333 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1334 3260, 3252, 3260, 3260, 3260, 3260, 3260, 3260, 3252, 3260,
1335 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1336 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3252,
1337 3260, 3260, 3260, 3260, 3252, 3260, 3260, 3260, 3260, 3260,
1338 3260, 3260, 3260, 3252, 3260, 3260, 3260, 3260, 3260, 3260,
1339 3260, 3266, 3260, 3252, 3260, 3260, 3260, 3252, 3260, 3260,
1340 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3252, 3260,
1341 3252, 3260, 3260, 3260, 3252, 3260, 3260, 3260, 3260, 3260,
1342 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1343
1344 3260, 3260, 3260, 3260, 3260, 3252, 3260, 3260, 3260, 3260,
1345 3260, 3260, 3260, 3260, 3260, 3260, 3252, 3252, 3260, 3252,
1346 3260, 3260, 3260, 3252, 3260, 3260, 3260, 3260, 3260, 3260,
1347 3260, 3260, 3252, 3260, 3260, 3252, 3260, 3260, 3260, 3260,
1348 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1349 3252, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1350 3252, 3260, 3260, 3260, 3260, 3260, 3252, 3260, 3252, 3260,
1351 3260, 3260, 3260, 3260, 3252, 3260, 3260, 3260, 3260, 3260,
1352 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3252,
1353 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1354
1355 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3252, 3260,
1356 3260, 3260, 3260, 3260, 3260, 3252, 3260, 3260, 3260, 3252,
1357 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3252,
1358 3260, 3260, 3260, 3260, 3260, 3260, 3252, 3252, 3260, 3252,
1359 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1360 3260, 3260, 3260, 3266, 3260, 3260, 3260, 3260, 3260, 3260,
1361 3252, 3252, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1362 3260, 3260, 3260, 3260, 3260, 3252, 3260, 3260, 3260, 3260,
1363 3252, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1364 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1365
1366 3260, 3260, 3260, 3252, 3260, 3260, 3260, 3260, 3260, 3260,
1367 3260, 3260, 3260, 3252, 3260, 3252, 3260, 3260, 3260, 3260,
1368 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1369 3260, 3260, 3260, 3260, 3260, 3252, 3260, 3260, 3260, 3260,
1370 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1371 3260, 3260, 3260, 3260, 3252, 3260, 3260, 3260, 3260, 3260,
1372 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3252, 3260,
1373 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3252, 3260,
1374 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1375 3252, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3252,
1376
1377 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1378 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3252,
1379 3260, 3252, 3260, 3260, 3260, 3260, 3266, 3260, 3252, 3260,
1380 3260, 3260, 3260, 3260, 3252, 3260, 3260, 3260, 3260, 3252,
1381 3260, 3260, 3260, 3260, 3260, 3260, 3252, 3260, 3260, 3260,
1382 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1383 3260, 3260, 3260, 3252, 3260, 3260, 3260, 3260, 3260, 3260,
1384 3260, 3260, 3260, 3260, 3252, 3260, 3260, 3260, 3260, 3260,
1385 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3252, 3260,
1386 3260, 3260, 3260, 3260, 3260, 3252, 3252, 3260, 3260, 3260,
1387
1388 3260, 3260, 3252, 3252, 3260, 3260, 3260, 3260, 3260, 3252,
1389 3252, 3260, 3252, 3260, 3252, 3260, 3260, 3252, 3252, 3260,
1390 3260, 3260, 3260, 3260, 3252, 3260, 3252, 3260, 3260, 3260,
1391 3260, 3260, 3252, 3260, 3260, 3260, 3252, 3260, 3260, 3260,
1392 3260, 3252, 3260, 3260, 3260, 3260, 3252, 3260, 3260, 3260,
1393 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1394 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1395 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1396 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1397 3260, 3260, 3266, 3260, 3260, 3260, 3260, 3252, 3260, 3260,
1398
1399 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3252, 3260,
1400 3252, 3260, 3260, 3260, 3260, 3260, 3252, 3260, 3260, 3260,
1401 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3252, 3260,
1402 3260, 3252, 3260, 3260, 3260, 3252, 3260, 3260, 3260, 3260,
1403 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1404 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1405 3260, 3260, 3260, 3260, 3252, 3260, 3252, 3260, 3260, 3260,
1406 3260, 3260, 3260, 3260, 3252, 3252, 3260, 3260, 3260, 3260,
1407 3260, 3260, 3260, 3252, 3260, 3260, 3260, 3260, 3252, 3260,
1408 3260, 3260, 3260, 3252, 3260, 3260, 3260, 3260, 3260, 3260,
1409
1410 3260, 3260, 3260, 3260, 3260, 3252, 3252, 3252, 3252, 3260,
1411 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3252, 3260,
1412 3252, 3252, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1413 3252, 3260, 3260, 3260, 3260, 3260, 3260, 3266, 3260, 3260,
1414 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3252,
1415 3252, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1416 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3252,
1417 3260, 3260, 3260, 3252, 3260, 3252, 3260, 3260, 3260, 3260,
1418 3260, 3260, 3260, 3260, 3252, 3252, 3260, 3260, 3252, 3252,
1419 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3252,
1420
1421 3260, 3252, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1422 3260, 3260, 3252, 3260, 3260, 3252, 3260, 3260, 3260, 3252,
1423 3260, 3260, 3260, 3260, 3252, 3260, 3260, 3260, 3252, 3260,
1424 3252, 3260, 3260, 3260, 3260, 3252, 3260, 3260, 3252, 3260,
1425 3260, 3260, 3260, 3252, 3260, 3252, 3260, 3260, 3260, 3260,
1426 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3252, 3252,
1427 3266, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1428 3252, 3252, 3260, 3252, 3260, 3260, 3252, 3260, 3260, 3260,
1429 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1430 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1431
1432 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3252, 3260,
1433 3260, 3260, 3252, 3260, 3260, 3260, 3260, 3252, 3260, 3260,
1434 3260, 3260, 3252, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1435 3260, 3260, 3252, 3252, 3252, 3260, 3260, 3252, 3260, 3260,
1436 3260, 3260, 3252, 3260, 3260, 3252, 3252, 3260, 3260, 3260,
1437 3260, 3252, 3260, 3252, 3260, 3252, 3260, 3260, 3260, 3260,
1438 3252, 3260, 3260, 3252, 3260, 3260, 3260, 3260, 3260, 3260,
1439 3260, 3252, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1440 3260, 3260, 3260, 3260, 3252, 3260, 3260, 3260, 3260, 3260,
1441 3260, 3260, 3260, 3252, 3260, 3252, 3260, 3260, 3260, 3260,
1442
1443 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3252,
1444 3260, 3260, 3252, 3260, 3252, 3260, 3252, 3260, 3260, 3260,
1445 3260, 3252, 3260, 3260, 3260, 3260, 3252, 3260, 3260, 3260,
1446 3260, 3252, 3252, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1447 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1448 3260, 3252, 3252, 3252, 3260, 3260, 3260, 3260, 3260, 3260,
1449 3260, 3252, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3252,
1450 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3252, 3260,
1451 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1452 3252, 3260, 3252, 3252, 3260, 3252, 3260, 3260, 3260, 3260,
1453
1454 3252, 3260, 3260, 3260, 3260, 3260, 3260, 3252, 3260, 3260,
1455 3260, 3260, 3252, 3252, 3260, 3252, 3260, 3260, 3260, 3260,
1456 3260, 3260, 3260, 3260, 3252, 3260, 3260, 3260, 3260, 3260,
1457 3252, 3260, 3260, 3260, 3260, 3252, 3260, 3260, 3260, 3260,
1458 3260, 3252, 3260, 3260, 3260, 3260, 3252, 3260, 3260, 3260,
1459 3252, 3252, 3260, 3260, 3260, 3252, 3252, 3252, 3260, 3260,
1460 3260, 3252, 3260, 3260, 3260, 3260, 3260, 3252, 3260, 3260,
1461 3260, 3252, 3252, 3260, 3260, 3260, 3260, 3252, 3252, 3260,
1462 3260, 3260, 3260, 3260, 3252, 3260, 3260, 3260, 3260, 3260,
1463 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1464
1465 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3252, 3252,
1466 3260, 3260, 3260, 3252, 3252, 3260, 3260, 3260, 3260, 3260,
1467 3260, 3260, 3252, 3260, 3260, 3260, 3260, 3260, 3252, 3260,
1468 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3252, 3252, 3260,
1469 3260, 3260, 3260, 3260, 3252, 3260, 3260, 3260, 3260, 3260,
1470 3260, 3260, 3252, 3260, 3260, 3252, 3252, 3252, 3260, 3252,
1471 3252, 3260, 3252, 3252, 3252, 3252, 3252, 3252, 3252, 3260,
1472 3252, 3260, 3260, 3260, 3260, 3252, 3260, 3260, 3260, 3260,
1473 3260, 3252, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1474 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1475
1476 3252, 3252, 3252, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1477 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1478 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3252, 3260,
1479 3252, 3260, 3252, 3252, 3260, 3260, 3260, 3260, 3260, 3260,
1480 3260, 3260, 3260, 3260, 3260, 3260, 3252, 3252, 3260, 3260,
1481 3252, 3260, 3260, 3252, 3260, 3260, 3260, 3260, 3260, 3260,
1482 3260, 3260, 3260, 3252, 3252, 3260, 3260, 3260, 3260, 3260,
1483 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3252, 3260, 3260,
1484 3260, 3252, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1485 3252, 3260, 3252, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1486
1487 3260, 3260, 3252, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1488 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,
1489 3252, 3260, 3260, 3252, 3260, 3260, 3260, 3260, 3260, 3252,
1490 3260, 3260, 3260, 3260, 3260, 3260, 3252, 3260, 3260, 3260,
1491 3252, 3260, 3252, 3252, 3260, 3260, 3260, 3260, 3260, 3252,
1492 3252, 0, 3252, 3252, 3252, 3252, 3252, 3252, 3252, 3252,
1493 3252, 3252, 3252, 3252, 3252, 3252, 3252, 3252, 3252, 3252
1145 3291, 1, 3292, 3292, 3293, 3293, 3294, 3294, 3295, 3295,
1146 3296, 3296, 3297, 3297, 3298, 3298, 3291, 3299, 3291, 3291,
1147 3291, 3291, 3300, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1148 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1149 3299, 3299, 3299, 3299, 3299, 3299, 3301, 3291, 3291, 3291,
1150 3301, 3302, 3291, 3291, 3291, 3302, 3303, 3291, 3291, 3291,
1151 3291, 3303, 3304, 3291, 3291, 3291, 3304, 3305, 3291, 3306,
1152 3291, 3305, 3305, 3307, 3291, 3291, 3291, 3291, 3307, 3308,
1153 3291, 3291, 3291, 3308, 3299, 3299, 3291, 3309, 3300, 3309,
1154 3300, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1155
1156 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1157 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1158 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1159 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1160 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1161 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3301, 3301, 3302,
1162 3302, 3303, 3303, 3291, 3304, 3304, 3305, 3305, 3306, 3306,
1163 3305, 3307, 3307, 3291, 3308, 3308, 3299, 3299, 3299, 3299,
1164 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1165 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1166
1167 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1168 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1169 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1170 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1171 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1172 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1173 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3305, 3299, 3299,
1174 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1175 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1176 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1177
1178 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1179 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1180 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1181 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1182 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1183 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1184 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1185 3299, 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299,
1186 3299, 3305, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1187 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1188
1189 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1190 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1191 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1192 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1193 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1194 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1195 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3299,
1196 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1197 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1198 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3299,
1199
1200 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1201 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1202 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3299,
1203 3305, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1204 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1205 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1206 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1207 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1208 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1209 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3299,
1210
1211 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1212 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1213 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1214 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1215 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1216 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1217 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1218 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1219 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1220 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1221
1222 3299, 3305, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1223 3299, 3299, 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299,
1224 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291,
1225 3299, 3291, 3291, 3299, 3291, 3291, 3299, 3299, 3291, 3299,
1226 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1227 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1228 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1229 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1230 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1231 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1232
1233 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1234 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1235 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1236 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1237 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1238 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1239 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1240 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1241 3299, 3299, 3299, 3299, 3299, 3299, 3305, 3299, 3299, 3299,
1242 3299, 3299, 3299, 3299, 3291, 3299, 3299, 3291, 3299, 3299,
1243
1244 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1245 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1246 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1247 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1248 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1249 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3299, 3299, 3299,
1250 3299, 3299, 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299,
1251 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1252 3299, 3291, 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299,
1253 3299, 3299, 3291, 3291, 3299, 3299, 3299, 3299, 3299, 3291,
1254
1255 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1256 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3299,
1257 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3299, 3299,
1258 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1259 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3299,
1260 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1261 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1262 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3299,
1263 3305, 3305, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1264 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1265
1266 3299, 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299,
1267 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1268 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291,
1269 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1270 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1271 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291,
1272 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1273 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1274 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1275 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1276
1277 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1278 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1279 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1280 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1281 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1282 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1283 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3299, 3299,
1284 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3305, 3299, 3299,
1285 3299, 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299,
1286 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291,
1287
1288 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1289 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1290 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3299, 3299,
1291 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1292 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1293 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1294 3299, 3299, 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299,
1295 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1296 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1297 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1298
1299 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1300 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3299, 3299, 3299,
1301 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1302 3299, 3299, 3299, 3299, 3291, 3299, 3291, 3299, 3299, 3299,
1303 3299, 3299, 3291, 3299, 3291, 3299, 3299, 3299, 3299, 3291,
1304 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1305 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1306 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291,
1307 3299, 3305, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1308 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1309
1310 3291, 3299, 3299, 3299, 3299, 3291, 3299, 3299, 3299, 3299,
1311 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1312 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1313 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1314 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1315 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291,
1316 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291,
1317 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1318 3299, 3299, 3299, 3299, 3291, 3299, 3291, 3299, 3299, 3299,
1319 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1320
1321 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1322 3299, 3299, 3299, 3291, 3291, 3299, 3299, 3299, 3299, 3299,
1323 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3299,
1324 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1325 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3291,
1326 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1327 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1328 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1329 3299, 3291, 3305, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1330 3299, 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299,
1331
1332 3299, 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299,
1333 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1334 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291,
1335 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1336 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3299,
1337 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1338 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1339 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1340 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291,
1341 3291, 3299, 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299,
1342
1343 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3299,
1344 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1345 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291,
1346 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3299, 3299,
1347 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1348 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3299,
1349 3299, 3299, 3291, 3299, 3299, 3299, 3291, 3299, 3299, 3299,
1350 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1351 3305, 3299, 3291, 3299, 3299, 3299, 3291, 3299, 3299, 3299,
1352 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3291,
1353
1354 3299, 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299,
1355 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1356 3299, 3299, 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299,
1357 3299, 3299, 3299, 3299, 3299, 3291, 3291, 3299, 3291, 3299,
1358 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1359 3299, 3291, 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299,
1360 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1361 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1362 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3291,
1363 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3299, 3299, 3299,
1364
1365 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1366 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1367 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291,
1368 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3299, 3299,
1369 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1370 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3291, 3299,
1371 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1372 3299, 3299, 3299, 3299, 3305, 3299, 3299, 3299, 3299, 3299,
1373 3299, 3291, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1374 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3299, 3299,
1375
1376 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1377 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1378 3299, 3299, 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299,
1379 3299, 3299, 3299, 3299, 3291, 3299, 3291, 3299, 3299, 3299,
1380 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1381 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3299,
1382 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1383 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3299,
1384 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1385 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1386
1387 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1388 3299, 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299,
1389 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1390 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1391 3299, 3299, 3291, 3299, 3291, 3299, 3299, 3299, 3299, 3305,
1392 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3299,
1393 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3291,
1394 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1395 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3299, 3299,
1396 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3299,
1397
1398 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1399 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3291,
1400 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3291, 3291, 3299,
1401 3299, 3299, 3299, 3299, 3291, 3291, 3299, 3291, 3299, 3291,
1402 3299, 3299, 3291, 3291, 3299, 3299, 3299, 3299, 3299, 3291,
1403 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3299,
1404 3299, 3291, 3299, 3299, 3299, 3299, 3291, 3299, 3299, 3299,
1405 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1406 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1407 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1408
1409 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1410 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3305, 3299, 3299,
1411 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1412 3299, 3299, 3299, 3291, 3299, 3291, 3299, 3299, 3299, 3299,
1413 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1414 3299, 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3291,
1415 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1416 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1417 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1418 3291, 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1419
1420 3291, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291,
1421 3299, 3299, 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3291,
1422 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1423 3299, 3291, 3291, 3291, 3291, 3299, 3299, 3299, 3299, 3299,
1424 3299, 3299, 3299, 3299, 3291, 3299, 3291, 3291, 3299, 3299,
1425 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3299, 3299,
1426 3299, 3299, 3299, 3305, 3299, 3299, 3299, 3299, 3299, 3299,
1427 3299, 3299, 3299, 3299, 3299, 3291, 3291, 3299, 3299, 3299,
1428 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1429 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3299, 3299, 3291,
1430
1431 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1432 3291, 3291, 3299, 3299, 3299, 3291, 3291, 3299, 3299, 3299,
1433 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3291,
1434 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1435 3291, 3299, 3299, 3291, 3299, 3299, 3299, 3291, 3299, 3299,
1436 3299, 3299, 3291, 3299, 3299, 3299, 3291, 3299, 3291, 3299,
1437 3299, 3299, 3299, 3291, 3299, 3299, 3291, 3299, 3299, 3299,
1438 3299, 3291, 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299,
1439 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3291, 3305, 3299,
1440 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3291,
1441
1442 3299, 3291, 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299,
1443 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1444 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1445 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3299,
1446 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3291, 3299, 3299,
1447 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1448 3299, 3299, 3291, 3291, 3291, 3299, 3299, 3291, 3299, 3299,
1449 3299, 3299, 3291, 3299, 3299, 3291, 3291, 3299, 3299, 3299,
1450 3299, 3291, 3299, 3291, 3299, 3291, 3299, 3299, 3299, 3299,
1451 3291, 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299,
1452
1453 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1454 3299, 3299, 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299,
1455 3299, 3299, 3291, 3299, 3291, 3299, 3291, 3299, 3299, 3299,
1456 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1457 3299, 3291, 3291, 3299, 3299, 3291, 3299, 3291, 3299, 3291,
1458 3299, 3299, 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3291,
1459 3299, 3299, 3299, 3299, 3291, 3291, 3299, 3299, 3299, 3299,
1460 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1461 3299, 3299, 3299, 3299, 3291, 3291, 3291, 3299, 3299, 3299,
1462 3299, 3299, 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299,
1463
1464 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1465 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1466 3299, 3299, 3299, 3299, 3291, 3299, 3291, 3291, 3299, 3291,
1467 3299, 3299, 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299,
1468 3299, 3291, 3299, 3299, 3299, 3299, 3291, 3291, 3299, 3291,
1469 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3299,
1470 3299, 3299, 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3291,
1471 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3299, 3299, 3299,
1472 3291, 3299, 3299, 3299, 3291, 3291, 3299, 3299, 3299, 3291,
1473 3291, 3291, 3299, 3299, 3299, 3299, 3291, 3299, 3299, 3299,
1474
1475 3299, 3299, 3291, 3299, 3299, 3299, 3291, 3291, 3299, 3299,
1476 3299, 3299, 3291, 3291, 3299, 3299, 3299, 3299, 3299, 3291,
1477 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1478 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1479 3299, 3299, 3299, 3291, 3291, 3299, 3291, 3299, 3299, 3291,
1480 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3299,
1481 3299, 3299, 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299,
1482 3299, 3299, 3299, 3291, 3291, 3299, 3299, 3299, 3299, 3299,
1483 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3299,
1484 3299, 3291, 3291, 3299, 3299, 3291, 3291, 3299, 3291, 3291,
1485
1486 3291, 3291, 3291, 3291, 3291, 3299, 3291, 3299, 3299, 3299,
1487 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3299,
1488 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1489 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3291, 3291,
1490 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1491 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1492 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3291, 3299,
1493 3291, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1494 3299, 3299, 3299, 3291, 3299, 3291, 3291, 3299, 3299, 3291,
1495 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1496
1497 3299, 3299, 3291, 3291, 3299, 3299, 3299, 3299, 3299, 3299,
1498 3299, 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3299, 3299,
1499 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291,
1500 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1501 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
1502 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3291,
1503 3299, 3299, 3291, 3299, 3299, 3299, 3299, 3299, 3291, 3299,
1504 3299, 3299, 3299, 3299, 3299, 3291, 3299, 3299, 3299, 3291,
1505 3299, 3291, 3291, 3299, 3299, 3299, 3299, 3299, 3291, 3291,
1506 0, 3291, 3291, 3291, 3291, 3291, 3291, 3291, 3291, 3291,
1507
1508 3291, 3291, 3291, 3291, 3291, 3291, 3291, 3291, 3291
14941509 } ;
14951510
1496 static const flex_int16_t yy_nxt[9330] =
1511 static const flex_int16_t yy_nxt[9455] =
14971512 { 0,
14981513 18, 19, 20, 21, 22, 23, 22, 18, 18, 18,
14991514 18, 18, 22, 24, 25, 26, 27, 28, 29, 18,
15061521 59, 60, 61, 120, 22, 58, 59, 60, 61, 86,
15071522 22, 64, 65, 66, 64, 65, 66, 87, 158, 158,
15081523
1509 1261, 88, 85, 51, 119, 86, 51, 165, 165, 56,
1524 1271, 88, 85, 51, 119, 86, 51, 165, 165, 56,
15101525 120, 56, 168, 75, 76, 77, 78, 62, 22, 75,
15111526 76, 77, 78, 62, 22, 81, 82, 83, 67, 97,
15121527 86, 67, 19, 20, 21, 69, 70, 71, 19, 20,
15461561 188, 165, 165, 144, 145, 193, 189, 86, 190, 86,
15471562 86, 86, 200, 201, 205, 206, 141, 175, 175, 142,
15481563 202, 207, 86, 197, 198, 204, 143, 215, 86, 213,
1549 144, 145, 208, 209, 86, 86, 210, 86, 3252, 200,
1550 201, 205, 206, 86, 216, 86, 3252, 202, 207, 211,
1551 212, 3252, 224, 214, 215, 3252, 223, 86, 218, 208,
1564 144, 145, 208, 209, 86, 86, 210, 86, 3291, 200,
1565 201, 205, 206, 86, 216, 86, 3291, 202, 207, 211,
1566 212, 3291, 224, 214, 215, 3291, 223, 86, 218, 208,
15521567
15531568 209, 86, 219, 210, 217, 221, 86, 225, 227, 86,
15541569 222, 216, 226, 86, 229, 86, 211, 212, 220, 224,
15551570 214, 86, 86, 223, 228, 218, 86, 86, 86, 219,
15561571 231, 217, 221, 230, 225, 227, 236, 222, 86, 226,
1557 232, 229, 86, 233, 3252, 220, 243, 234, 235, 86,
1558 3252, 228, 237, 86, 86, 86, 3252, 231, 256, 86,
1559 230, 250, 86, 236, 3252, 86, 86, 232, 238, 244,
1572 232, 229, 86, 233, 3291, 220, 243, 234, 235, 86,
1573 3291, 228, 237, 86, 86, 86, 3291, 231, 256, 86,
1574 230, 250, 86, 236, 3291, 86, 86, 232, 238, 244,
15601575 233, 242, 86, 243, 234, 235, 247, 239, 251, 237,
15611576 245, 252, 249, 240, 246, 256, 257, 86, 250, 255,
1562 86, 86, 86, 86, 3252, 238, 244, 86, 242, 262,
1563
1564 86, 253, 3252, 247, 239, 251, 258, 245, 252, 249,
1577 86, 86, 86, 86, 3291, 238, 244, 86, 242, 262,
1578
1579 86, 253, 3291, 247, 239, 251, 258, 245, 252, 249,
15651580 240, 246, 254, 257, 86, 259, 255, 86, 265, 263,
1566 264, 86, 266, 1124, 260, 267, 262, 86, 253, 162,
1567 3252, 162, 162, 258, 162, 86, 261, 268, 86, 254,
1568 86, 86, 259, 3252, 86, 265, 263, 264, 3252, 266,
1581 264, 86, 266, 1131, 260, 267, 262, 86, 253, 162,
1582 3291, 162, 162, 258, 162, 86, 261, 268, 86, 254,
1583 86, 86, 259, 3291, 86, 265, 263, 264, 3291, 266,
15691584 269, 260, 267, 167, 86, 167, 167, 90, 167, 90,
15701585 90, 168, 90, 261, 268, 172, 270, 172, 172, 272,
1571 172, 3252, 86, 273, 274, 276, 3252, 269, 86, 278,
1572 271, 275, 279, 280, 277, 86, 282, 86, 3252, 3252,
1586 172, 3291, 86, 273, 274, 276, 3291, 269, 86, 278,
1587 271, 275, 279, 280, 277, 86, 282, 86, 3291, 3291,
15731588 281, 86, 374, 86, 86, 170, 272, 86, 86, 286,
15741589
15751590 273, 274, 276, 86, 86, 86, 278, 271, 275, 279,
15761591 280, 277, 283, 282, 285, 298, 86, 281, 284, 86,
1577 287, 86, 330, 297, 299, 302, 286, 289, 3252, 3252,
1578 86, 290, 86, 334, 300, 301, 303, 306, 3252, 304,
1592 287, 86, 330, 297, 299, 302, 286, 289, 3291, 3291,
1593 86, 290, 86, 334, 300, 301, 303, 306, 3291, 304,
15791594 86, 285, 298, 86, 86, 284, 86, 287, 291, 86,
1580 297, 299, 302, 3252, 86, 86, 86, 86, 290, 3252,
1581 86, 300, 301, 303, 306, 86, 3252, 305, 307, 308,
1582 309, 86, 3252, 310, 311, 291, 292, 312, 313, 3252,
1583 86, 293, 3252, 86, 314, 86, 294, 86, 315, 86,
1595 297, 299, 302, 3291, 86, 86, 86, 86, 290, 3291,
1596 86, 300, 301, 303, 306, 86, 3291, 305, 307, 308,
1597 309, 86, 3291, 310, 311, 291, 292, 312, 313, 3291,
1598 86, 293, 3291, 86, 314, 86, 294, 86, 315, 86,
15841599 86, 322, 295, 296, 305, 307, 308, 309, 86, 86,
15851600
1586 310, 311, 3252, 292, 312, 313, 86, 321, 293, 325,
1601 310, 311, 3291, 292, 312, 313, 86, 321, 293, 325,
15871602 86, 314, 323, 294, 326, 315, 333, 331, 322, 295,
15881603 296, 316, 86, 86, 317, 327, 318, 336, 335, 86,
15891604 329, 332, 337, 340, 321, 86, 325, 86, 319, 323,
1590 320, 338, 339, 333, 3252, 342, 86, 86, 316, 86,
1605 320, 338, 339, 333, 3291, 342, 86, 86, 316, 86,
15911606 86, 317, 327, 318, 86, 335, 86, 329, 332, 86,
15921607 340, 86, 343, 341, 86, 319, 86, 320, 338, 339,
15931608 86, 344, 342, 345, 346, 347, 86, 348, 351, 349,
1594 356, 352, 350, 3252, 3252, 86, 353, 355, 86, 343,
1609 356, 352, 350, 3291, 3291, 86, 353, 355, 86, 343,
15951610 341, 86, 86, 86, 354, 86, 86, 86, 344, 358,
15961611
15971612 345, 346, 347, 86, 348, 351, 349, 356, 361, 350,
15981613 357, 359, 360, 86, 355, 86, 86, 362, 364, 363,
15991614 86, 354, 365, 367, 86, 368, 369, 366, 370, 372,
1600 86, 86, 373, 377, 86, 371, 3252, 357, 359, 360,
1615 86, 86, 373, 377, 86, 371, 3291, 357, 359, 360,
16011616 86, 86, 86, 86, 362, 364, 363, 86, 375, 365,
16021617 86, 378, 381, 369, 366, 86, 372, 86, 86, 373,
16031618 86, 383, 371, 380, 384, 86, 382, 86, 379, 86,
16041619 385, 376, 386, 388, 86, 389, 86, 86, 378, 381,
1605 86, 168, 387, 86, 390, 392, 86, 3252, 383, 393,
1620 86, 168, 387, 86, 390, 392, 86, 3291, 383, 393,
16061621 380, 384, 391, 382, 86, 379, 399, 385, 376, 386,
16071622
16081623 394, 86, 396, 395, 397, 86, 86, 86, 398, 387,
16121627 413, 414, 86, 412, 86, 400, 86, 409, 401, 407,
16131628 86, 402, 404, 408, 86, 415, 416, 86, 86, 405,
16141629 86, 86, 86, 406, 410, 417, 411, 418, 414, 420,
1615 412, 421, 86, 422, 427, 423, 426, 428, 3252, 425,
1616 86, 86, 429, 416, 419, 86, 86, 86, 430, 3252,
1630 412, 421, 86, 422, 427, 423, 426, 428, 3291, 425,
1631 86, 86, 429, 416, 419, 86, 86, 86, 430, 3291,
16171632 86, 86, 440, 86, 418, 86, 420, 86, 421, 424,
16181633
16191634 432, 427, 435, 426, 428, 86, 425, 86, 86, 429,
16201635 431, 419, 86, 433, 478, 430, 434, 437, 439, 86,
16211636 442, 86, 436, 86, 86, 86, 424, 432, 86, 435,
1622 441, 86, 449, 86, 438, 86, 451, 431, 3252, 450,
1623 433, 86, 3252, 434, 437, 439, 86, 442, 86, 436,
1624 86, 455, 3252, 3252, 86, 468, 484, 441, 86, 449,
1625 456, 438, 443, 451, 3252, 444, 450, 452, 457, 453,
1637 441, 86, 449, 86, 438, 86, 451, 431, 3291, 450,
1638 433, 86, 3291, 434, 437, 439, 86, 442, 86, 436,
1639 86, 455, 3291, 3291, 86, 468, 484, 441, 86, 449,
1640 456, 438, 443, 451, 3291, 444, 450, 452, 457, 453,
16261641 445, 446, 447, 448, 86, 86, 458, 459, 455, 460,
1627 86, 462, 86, 86, 461, 454, 3252, 456, 86, 443,
1642 86, 462, 86, 86, 461, 454, 3291, 456, 86, 443,
16281643 465, 86, 444, 469, 452, 457, 453, 445, 446, 447,
16291644
16301645 448, 86, 86, 458, 459, 86, 463, 466, 462, 464,
16311646 467, 86, 454, 470, 472, 86, 86, 465, 471, 475,
16321647 469, 473, 476, 474, 497, 86, 86, 86, 86, 86,
1633 477, 535, 3252, 463, 466, 3252, 464, 467, 86, 86,
1648 477, 536, 3291, 463, 466, 3291, 464, 467, 86, 86,
16341649 470, 472, 86, 86, 86, 471, 475, 482, 473, 476,
1635 474, 479, 490, 480, 86, 3252, 86, 477, 495, 483,
1636 485, 486, 481, 86, 498, 86, 488, 487, 489, 548,
1637 3252, 3252, 496, 3252, 482, 3252, 86, 86, 479, 490,
1650 474, 479, 490, 480, 86, 3291, 86, 477, 495, 483,
1651 485, 486, 481, 86, 498, 86, 488, 487, 489, 549,
1652 3291, 3291, 496, 554, 482, 3291, 86, 86, 479, 490,
16381653 480, 86, 86, 86, 491, 495, 483, 485, 486, 481,
16391654 86, 86, 499, 488, 487, 489, 510, 492, 86, 496,
16401655
1641 493, 86, 494, 86, 3252, 514, 511, 500, 86, 512,
1642 513, 491, 86, 501, 86, 517, 598, 502, 86, 499,
1643 529, 86, 86, 510, 492, 503, 3252, 493, 86, 494,
1644 526, 86, 514, 511, 500, 515, 512, 513, 525, 530,
1645 501, 86, 517, 86, 502, 168, 3252, 529, 86, 527,
1646 86, 516, 503, 504, 528, 505, 531, 526, 532, 86,
1647 3252, 553, 515, 538, 86, 525, 530, 537, 506, 533,
1648 86, 507, 3252, 508, 86, 509, 86, 3252, 516, 86,
1649 504, 86, 505, 531, 534, 532, 3252, 86, 3252, 3252,
1650 538, 571, 86, 86, 537, 506, 533, 545, 507, 86,
1651
1652 508, 539, 509, 518, 519, 536, 86, 541, 3252, 86,
1653 540, 534, 543, 520, 544, 521, 522, 523, 571, 86,
1654 524, 86, 549, 546, 545, 542, 547, 3252, 86, 86,
1655 518, 519, 536, 86, 541, 557, 558, 540, 86, 543,
1656 520, 544, 521, 522, 523, 86, 551, 524, 86, 549,
1657 546, 550, 542, 547, 552, 554, 559, 86, 86, 555,
1658 560, 86, 556, 86, 86, 561, 562, 86, 3252, 563,
1659 86, 86, 567, 551, 570, 584, 86, 573, 550, 86,
1660 3252, 552, 554, 559, 86, 3252, 555, 560, 86, 556,
1661 564, 565, 561, 562, 86, 86, 563, 568, 572, 567,
1662
1663 86, 570, 574, 575, 573, 586, 589, 86, 566, 3252,
1664 86, 86, 569, 585, 3252, 86, 86, 564, 565, 587,
1665 86, 593, 590, 576, 568, 572, 588, 86, 86, 574,
1666 575, 86, 586, 591, 577, 566, 578, 3252, 86, 569,
1667 585, 86, 86, 592, 86, 86, 587, 594, 593, 590,
1668 576, 595, 611, 588, 86, 596, 602, 597, 86, 86,
1669 591, 577, 3252, 578, 579, 599, 86, 601, 604, 86,
1670 592, 86, 580, 581, 594, 600, 582, 583, 595, 611,
1671 86, 86, 596, 603, 597, 606, 86, 86, 86, 86,
1672 605, 579, 599, 86, 601, 604, 86, 607, 610, 580,
1673
1674 581, 608, 600, 582, 583, 612, 86, 86, 613, 609,
1675 603, 615, 606, 86, 86, 614, 616, 605, 617, 86,
1676 3252, 3252, 624, 86, 607, 610, 618, 86, 608, 620,
1677 3252, 86, 612, 622, 86, 613, 609, 3252, 615, 86,
1678 619, 86, 614, 616, 86, 617, 86, 621, 86, 624,
1679 625, 623, 86, 618, 626, 86, 620, 86, 627, 86,
1680 622, 86, 628, 630, 629, 633, 632, 619, 86, 631,
1681 635, 86, 86, 86, 621, 3252, 86, 625, 623, 86,
1682 634, 626, 636, 642, 638, 627, 637, 639, 640, 628,
1683 630, 629, 641, 632, 643, 86, 631, 86, 86, 86,
1684
1685 645, 644, 86, 86, 86, 86, 646, 634, 86, 636,
1686 642, 638, 86, 637, 639, 640, 650, 648, 649, 641,
1687 653, 86, 654, 652, 86, 651, 86, 645, 644, 647,
1688 86, 86, 655, 657, 86, 3252, 3252, 656, 86, 658,
1689 86, 86, 86, 650, 648, 649, 86, 653, 86, 654,
1690 652, 667, 651, 86, 86, 3252, 647, 668, 86, 655,
1691 657, 3252, 670, 679, 656, 3252, 658, 659, 669, 86,
1692 86, 675, 660, 672, 661, 673, 671, 3252, 667, 674,
1693 662, 86, 663, 86, 668, 664, 665, 86, 676, 670,
1694 679, 86, 666, 86, 659, 669, 86, 86, 675, 660,
1695
1696 672, 661, 673, 671, 680, 677, 674, 662, 678, 663,
1697 86, 682, 664, 665, 681, 676, 86, 684, 683, 666,
1698 685, 86, 86, 686, 687, 689, 86, 86, 688, 693,
1699 3252, 690, 677, 3252, 86, 678, 86, 86, 682, 695,
1700 694, 681, 86, 3252, 684, 683, 86, 685, 691, 86,
1701 686, 687, 689, 692, 86, 688, 693, 86, 690, 3252,
1702 86, 86, 86, 696, 697, 698, 695, 694, 701, 699,
1703 700, 86, 703, 3252, 702, 691, 86, 704, 3252, 707,
1704 692, 705, 708, 706, 86, 86, 86, 86, 86, 86,
1705 696, 697, 698, 168, 86, 86, 699, 700, 709, 703,
1706
1707 86, 702, 710, 712, 704, 86, 707, 713, 705, 708,
1708 706, 711, 86, 714, 86, 716, 715, 717, 3252, 721,
1709 3252, 3252, 86, 719, 718, 709, 726, 86, 720, 710,
1710 712, 86, 86, 722, 86, 730, 86, 86, 711, 732,
1711 86, 86, 731, 715, 717, 86, 721, 86, 86, 723,
1712 719, 718, 729, 726, 733, 720, 724, 86, 727, 725,
1713 722, 734, 86, 728, 735, 736, 86, 86, 738, 86,
1714 737, 86, 739, 3252, 86, 743, 723, 740, 741, 729,
1715 3252, 86, 744, 724, 742, 745, 725, 86, 86, 746,
1716 86, 749, 86, 86, 86, 738, 86, 86, 748, 739,
1717
1718 86, 86, 743, 750, 740, 741, 86, 86, 751, 744,
1719 747, 742, 745, 754, 752, 753, 746, 86, 86, 755,
1720 760, 86, 757, 86, 3252, 748, 86, 756, 86, 761,
1721 750, 86, 758, 86, 762, 751, 86, 747, 759, 86,
1722 754, 752, 753, 86, 86, 86, 755, 86, 763, 757,
1723 767, 86, 86, 764, 756, 766, 761, 765, 768, 758,
1724 769, 762, 773, 3252, 86, 759, 770, 86, 771, 774,
1725 772, 86, 86, 775, 86, 763, 86, 767, 776, 3252,
1726 764, 777, 766, 86, 765, 768, 780, 769, 86, 773,
1727 86, 86, 779, 770, 781, 771, 782, 772, 784, 3252,
1728
1729 775, 86, 86, 778, 86, 776, 783, 86, 777, 786,
1730 86, 788, 785, 780, 86, 86, 86, 787, 86, 779,
1731 790, 781, 789, 782, 86, 784, 86, 792, 86, 794,
1732 778, 86, 791, 783, 3252, 793, 786, 795, 86, 785,
1733 86, 796, 799, 86, 787, 86, 801, 790, 800, 789,
1734 86, 797, 798, 803, 792, 86, 804, 805, 86, 791,
1735 806, 86, 793, 802, 795, 86, 86, 811, 796, 799,
1736 86, 808, 807, 801, 86, 800, 86, 809, 86, 816,
1737 86, 86, 810, 804, 86, 86, 812, 806, 813, 86,
1738 802, 826, 825, 86, 811, 819, 817, 3252, 808, 807,
1739
1740 86, 818, 814, 815, 86, 820, 86, 821, 3252, 86,
1741 86, 86, 86, 812, 830, 813, 822, 86, 826, 86,
1742 823, 3252, 819, 817, 86, 831, 827, 86, 818, 814,
1743 815, 832, 820, 86, 821, 824, 86, 828, 833, 834,
1744 86, 830, 829, 822, 86, 835, 86, 823, 86, 838,
1745 836, 837, 831, 827, 86, 840, 86, 86, 832, 86,
1746 86, 839, 824, 841, 86, 833, 834, 842, 86, 86,
1747 843, 844, 835, 846, 847, 845, 838, 836, 837, 848,
1748 849, 86, 86, 86, 86, 86, 86, 86, 839, 86,
1749 841, 86, 850, 851, 842, 852, 853, 843, 844, 856,
1750
1751 846, 847, 845, 86, 86, 86, 848, 854, 86, 855,
1752 86, 861, 86, 860, 862, 857, 858, 859, 86, 850,
1753 851, 86, 852, 853, 86, 86, 856, 86, 863, 864,
1754 86, 865, 866, 86, 854, 868, 855, 867, 861, 86,
1755 860, 862, 857, 858, 859, 870, 872, 871, 86, 869,
1756 86, 874, 86, 86, 86, 863, 864, 86, 865, 866,
1757 86, 86, 868, 873, 867, 875, 86, 876, 877, 880,
1758 879, 86, 870, 872, 871, 881, 869, 86, 874, 878,
1759 884, 883, 86, 882, 3252, 86, 885, 86, 86, 86,
1760 873, 3252, 875, 86, 876, 877, 880, 879, 86, 86,
1761
1762 887, 886, 881, 168, 86, 888, 878, 884, 883, 86,
1763 882, 889, 891, 885, 86, 890, 894, 86, 86, 895,
1764 898, 86, 892, 897, 86, 3252, 896, 887, 886, 899,
1765 893, 86, 888, 904, 3252, 900, 86, 931, 889, 86,
1766 901, 86, 890, 86, 86, 902, 895, 86, 86, 892,
1767 897, 903, 86, 896, 905, 86, 899, 893, 86, 906,
1768 86, 907, 900, 3252, 908, 86, 86, 901, 909, 86,
1769 86, 917, 902, 86, 918, 86, 3252, 3252, 903, 86,
1770 928, 905, 919, 86, 86, 924, 906, 3252, 907, 86,
1771 920, 908, 922, 923, 3252, 909, 910, 921, 917, 911,
1772
1773 86, 918, 925, 912, 86, 926, 913, 928, 86, 919,
1774 86, 86, 924, 914, 915, 3252, 916, 920, 86, 922,
1775 923, 86, 927, 910, 921, 942, 911, 941, 86, 925,
1776 912, 86, 926, 913, 929, 930, 86, 3252, 86, 3252,
1777 914, 915, 86, 916, 940, 939, 945, 86, 86, 927,
1778 86, 946, 942, 3252, 941, 943, 944, 3252, 86, 86,
1779 3252, 929, 930, 932, 933, 947, 934, 86, 86, 935,
1780 949, 940, 939, 945, 936, 3252, 953, 86, 946, 86,
1781 937, 938, 943, 944, 948, 952, 86, 954, 956, 86,
1782 932, 933, 947, 934, 86, 950, 935, 949, 955, 86,
1783
1784 951, 936, 86, 953, 957, 86, 959, 937, 938, 960,
1785 86, 948, 952, 958, 954, 956, 963, 961, 962, 3252,
1786 967, 3252, 964, 966, 86, 955, 86, 86, 86, 86,
1787 965, 957, 86, 86, 86, 86, 960, 970, 86, 86,
1788 958, 968, 86, 963, 961, 962, 86, 967, 969, 964,
1789 966, 971, 972, 86, 973, 974, 976, 965, 975, 86,
1790 86, 86, 979, 86, 970, 977, 980, 86, 968, 981,
1791 978, 983, 982, 986, 3252, 969, 3252, 987, 971, 972,
1792 86, 973, 984, 86, 86, 975, 985, 86, 988, 979,
1793 991, 989, 86, 990, 86, 994, 992, 86, 86, 982,
1794
1795 986, 86, 86, 86, 86, 996, 86, 86, 995, 984,
1796 86, 993, 86, 985, 997, 86, 86, 991, 989, 86,
1797 990, 998, 86, 992, 86, 999, 86, 1000, 1001, 1003,
1798 1004, 1002, 996, 86, 86, 995, 1005, 1006, 993, 1011,
1799 1008, 86, 86, 1009, 1012, 86, 86, 1013, 86, 1007,
1800 3252, 86, 999, 86, 1000, 1001, 1003, 1004, 1002, 86,
1801 86, 86, 86, 1005, 1006, 1010, 1014, 1008, 1016, 1015,
1802 1009, 86, 1017, 86, 1013, 86, 1007, 86, 86, 86,
1803 1018, 1020, 1021, 1022, 3252, 3252, 86, 1025, 1019, 86,
1804 1023, 1024, 1010, 1014, 86, 1016, 1015, 86, 1026, 1017,
1805
1806 1031, 1029, 1034, 3252, 86, 86, 86, 1018, 1020, 86,
1807 1022, 1027, 86, 1028, 1025, 1019, 86, 1023, 1024, 86,
1808 86, 1032, 1030, 86, 1033, 1026, 86, 1031, 1029, 1035,
1809 86, 1036, 86, 1037, 86, 1042, 1039, 1038, 1027, 1040,
1810 1028, 86, 3252, 1041, 3252, 3252, 86, 86, 1032, 1030,
1811 86, 1033, 86, 1044, 1043, 1051, 1035, 86, 1036, 1046,
1812 1037, 86, 86, 1039, 1038, 86, 1040, 1045, 1047, 1052,
1813 1041, 86, 1048, 1054, 86, 86, 1049, 86, 86, 1053,
1814 1044, 1043, 1050, 1055, 86, 1056, 1046, 86, 1057, 86,
1815 86, 1058, 86, 1065, 1045, 1047, 1059, 1062, 3252, 1048,
1816
1817 1060, 86, 1064, 1049, 86, 86, 1053, 1063, 1061, 1050,
1818 1055, 1069, 1066, 86, 86, 86, 3252, 86, 1058, 86,
1819 86, 1067, 1071, 1059, 1062, 86, 1068, 1060, 86, 1064,
1820 86, 1070, 1072, 1073, 1063, 1061, 86, 1074, 86, 1066,
1821 86, 86, 1075, 86, 1076, 1077, 3252, 1078, 1067, 86,
1822 3252, 1084, 1079, 1068, 1080, 86, 86, 86, 1070, 1072,
1823 1073, 86, 1081, 1083, 86, 1095, 86, 1082, 86, 168,
1824 1094, 1076, 1077, 86, 1078, 86, 1086, 1085, 1084, 1079,
1825 1087, 1080, 1097, 86, 86, 1098, 86, 86, 86, 1081,
1826 1083, 86, 1095, 1096, 1082, 1099, 86, 1094, 1101, 3252,
1827
1828 3252, 1100, 1102, 1086, 1085, 86, 1103, 1087, 1088, 86,
1829 1089, 86, 1098, 86, 1090, 3252, 1091, 1107, 86, 86,
1830 1096, 1092, 1099, 3252, 86, 1101, 1093, 1106, 1100, 1102,
1831 86, 1104, 86, 1103, 1108, 1088, 1105, 1089, 1110, 3252,
1832 1113, 1090, 1111, 1091, 1107, 86, 1109, 1115, 1092, 1114,
1833 86, 1123, 1112, 1093, 1106, 86, 1116, 86, 1120, 1117,
1834 86, 1108, 86, 86, 86, 1110, 1118, 1113, 1119, 1111,
1835 1121, 86, 86, 1109, 1115, 1122, 1114, 1125, 86, 1112,
1836 86, 1128, 3252, 1116, 86, 1120, 1117, 1126, 1127, 86,
1837 86, 1136, 86, 1118, 3252, 1119, 86, 1137, 1138, 3252,
1838
1839 1140, 3252, 86, 1142, 1144, 1139, 86, 86, 1128, 86,
1840 3252, 86, 86, 1147, 1126, 1127, 1129, 1141, 1136, 86,
1841 86, 1130, 86, 1131, 1137, 1138, 86, 1140, 1145, 1132,
1842 1142, 1144, 1139, 1143, 1133, 1134, 86, 1148, 1146, 86,
1843 1150, 1135, 86, 1129, 1141, 86, 86, 1152, 1130, 86,
1844 1131, 86, 1153, 1155, 1149, 1145, 1132, 1151, 1159, 86,
1845 1143, 1133, 1134, 86, 1148, 1146, 86, 1150, 1135, 1154,
1846 1156, 1160, 1157, 1158, 86, 86, 86, 1162, 1161, 1153,
1847 86, 1149, 1165, 1163, 1151, 86, 86, 86, 1166, 3252,
1848 86, 1164, 1177, 86, 86, 86, 1154, 1156, 1160, 1157,
1849
1850 1158, 86, 86, 1167, 1162, 1161, 86, 1168, 1170, 1169,
1851 1163, 86, 1171, 1172, 86, 1166, 86, 1176, 1164, 86,
1852 1173, 86, 1175, 1174, 86, 1181, 1178, 86, 86, 86,
1853 1167, 3252, 1179, 86, 1168, 1170, 1169, 86, 86, 1171,
1854 1172, 86, 1189, 86, 1176, 86, 1184, 1173, 1180, 1175,
1855 1174, 1182, 1181, 1178, 1183, 86, 3252, 1185, 86, 1179,
1856 1186, 1187, 1188, 86, 86, 1190, 1192, 1193, 86, 1189,
1857 3252, 1191, 1194, 1184, 3252, 1180, 1197, 86, 1182, 86,
1858 86, 1183, 86, 86, 1185, 86, 1222, 1186, 1187, 1188,
1859 3252, 1195, 1198, 1192, 1196, 1199, 1200, 86, 1191, 86,
1860
1861 86, 1201, 86, 1197, 1203, 86, 1202, 86, 1204, 1206,
1862 86, 1210, 1207, 86, 3252, 1208, 86, 86, 1195, 1198,
1863 86, 1196, 1199, 1200, 86, 1205, 1212, 1213, 1201, 1215,
1864 1209, 1203, 86, 1202, 1214, 86, 1216, 86, 1210, 1207,
1865 86, 86, 1208, 86, 1211, 86, 1218, 1217, 86, 86,
1866 86, 86, 1205, 1212, 1213, 1219, 1215, 1209, 86, 1220,
1867 1221, 1214, 86, 1216, 1225, 3252, 86, 86, 1224, 1223,
1868 1227, 1211, 1226, 1218, 1217, 1228, 1230, 86, 1229, 86,
1869 86, 1232, 1219, 86, 1233, 86, 1220, 86, 86, 1237,
1870 1231, 1225, 86, 1234, 1240, 1224, 1223, 1227, 86, 1226,
1871
1872 86, 1235, 1228, 1230, 86, 1229, 1242, 1236, 1241, 1238,
1873 3252, 1249, 1239, 86, 1243, 86, 86, 1231, 86, 86,
1874 1234, 86, 1244, 86, 1247, 1253, 86, 86, 1235, 86,
1875 86, 1248, 86, 86, 1236, 1241, 1238, 1245, 1249, 1239,
1876 86, 1243, 1246, 1250, 1251, 1252, 86, 1254, 86, 1244,
1877 86, 1247, 86, 86, 1255, 86, 1256, 86, 1248, 86,
1878 1257, 1259, 1260, 3252, 1245, 1258, 86, 1262, 1263, 1246,
1879 1250, 1251, 1252, 86, 86, 1267, 86, 86, 86, 86,
1880 1274, 1255, 1264, 1256, 1269, 1276, 86, 86, 1259, 1260,
1881 86, 1265, 1258, 86, 1262, 1263, 1266, 86, 1268, 1271,
1882
1883 1270, 3252, 86, 1273, 86, 168, 1272, 86, 1275, 1264,
1884 1277, 1269, 86, 1278, 86, 86, 1279, 86, 1265, 1280,
1885 3252, 86, 3252, 1266, 86, 1268, 1271, 1270, 86, 1281,
1886 1273, 1284, 1282, 1272, 1283, 1275, 1285, 1287, 86, 1290,
1887 1278, 1286, 86, 1279, 86, 86, 1280, 86, 86, 86,
1888 1288, 86, 1289, 86, 1291, 1345, 1281, 86, 1284, 1282,
1889 86, 1283, 86, 1285, 1287, 1292, 86, 86, 1286, 1294,
1890 1293, 1295, 1300, 1303, 86, 3252, 3252, 1288, 86, 1289,
1891 1296, 1291, 86, 1301, 1302, 1304, 3252, 86, 1305, 1297,
1892 86, 1298, 1292, 1306, 1299, 86, 1294, 1293, 1295, 1300,
1893
1894 86, 86, 86, 1310, 1308, 86, 86, 1296, 1309, 86,
1895 1301, 1302, 1304, 86, 1307, 1305, 1297, 86, 1298, 1311,
1896 1306, 1299, 86, 1312, 3252, 86, 86, 86, 1315, 1313,
1897 1310, 1308, 1314, 1317, 1316, 1309, 1318, 1324, 86, 1323,
1898 1319, 1307, 86, 1321, 86, 86, 1311, 1320, 1322, 86,
1899 1312, 86, 1367, 3252, 86, 1315, 1313, 86, 86, 1314,
1900 86, 1316, 86, 1318, 1324, 86, 1323, 1319, 1325, 1326,
1901 1321, 86, 1327, 1328, 1320, 1322, 1330, 86, 1329, 3252,
1902 86, 1331, 1332, 1333, 86, 86, 1334, 86, 86, 86,
1903 1335, 86, 86, 1338, 1336, 1325, 1326, 1337, 86, 1327,
1904
1905 1328, 86, 86, 1330, 86, 1329, 1339, 86, 1331, 1332,
1906 1333, 86, 1341, 1334, 1340, 3252, 1343, 1335, 86, 1344,
1907 1338, 1336, 86, 1342, 1337, 86, 86, 86, 86, 1348,
1908 1346, 1347, 1350, 1339, 1351, 1352, 1357, 1371, 1349, 1341,
1909 1353, 1340, 86, 1343, 86, 86, 1344, 1354, 86, 86,
1910 1342, 1355, 1356, 1386, 86, 86, 1348, 1346, 1347, 1350,
1911 3252, 1351, 86, 1357, 86, 1349, 86, 86, 1365, 86,
1912 1368, 3252, 1366, 1370, 1354, 1396, 1397, 1387, 1355, 1356,
1913 1358, 1369, 86, 1372, 1359, 86, 1374, 1360, 1361, 3252,
1914 86, 86, 1362, 3252, 1373, 1365, 86, 1368, 1363, 1366,
1915
1916 1370, 1376, 1364, 86, 86, 86, 86, 1358, 1369, 86,
1917 1372, 1359, 86, 1374, 1360, 1361, 86, 1375, 1377, 1362,
1918 1378, 1373, 1381, 86, 1379, 1363, 1380, 86, 1376, 1364,
1919 1382, 86, 1383, 1384, 1385, 86, 1388, 86, 1395, 1389,
1920 86, 3252, 86, 86, 1375, 1377, 86, 1378, 1399, 1381,
1921 3252, 1379, 1398, 1380, 86, 1413, 1423, 1382, 86, 1383,
1922 1384, 1385, 86, 1388, 86, 1395, 1389, 1390, 86, 1400,
1923 1402, 86, 1391, 1401, 1392, 1399, 1393, 1405, 1394, 1398,
1924 1407, 86, 86, 86, 1403, 86, 1406, 86, 86, 1404,
1925 1409, 86, 3252, 1408, 1390, 86, 1400, 1402, 1414, 1391,
1926
1927 1401, 1392, 86, 1393, 1405, 1394, 86, 1407, 86, 1412,
1928 1410, 1411, 1415, 1406, 1416, 1418, 86, 1409, 86, 86,
1929 1408, 1417, 86, 1420, 86, 1414, 1419, 86, 86, 1422,
1930 1425, 86, 86, 1421, 1424, 86, 1412, 1410, 1411, 1415,
1931 1426, 1416, 1418, 86, 86, 1427, 86, 1429, 1417, 1428,
1932 1420, 86, 1430, 1419, 1431, 86, 1422, 86, 1433, 1432,
1933 1421, 1424, 1434, 3252, 1438, 86, 86, 1426, 1435, 86,
1934 86, 86, 1427, 1439, 1429, 1440, 1428, 1436, 1437, 1430,
1935 86, 86, 1444, 86, 86, 86, 1432, 1441, 86, 1434,
1936 86, 86, 1443, 1442, 86, 1435, 1447, 1445, 1446, 86,
1937
1938 1439, 3252, 1440, 1449, 1436, 1437, 86, 86, 86, 1444,
1939 86, 1448, 1450, 1451, 1441, 86, 86, 3252, 1454, 1443,
1940 1442, 1452, 86, 1447, 1445, 1446, 1456, 1453, 1455, 1460,
1941 1449, 1457, 86, 86, 86, 86, 1458, 1459, 1448, 1450,
1942 1451, 1461, 3252, 86, 86, 1454, 1463, 1462, 1452, 86,
1943 86, 86, 86, 1456, 1453, 1455, 86, 1464, 1457, 1465,
1944 1466, 86, 1467, 1458, 1459, 1468, 1472, 86, 1469, 86,
1945 1470, 1473, 86, 86, 1462, 86, 86, 86, 86, 1471,
1946 168, 1474, 1475, 86, 1464, 3252, 1465, 1466, 1476, 86,
1947 1480, 3252, 1468, 1478, 1477, 1469, 1481, 1470, 86, 1483,
1948
1949 86, 86, 86, 86, 1479, 86, 1471, 1482, 1474, 86,
1950 1487, 86, 1484, 1488, 86, 1476, 86, 1480, 1486, 86,
1951 1478, 1477, 1485, 1481, 86, 86, 1483, 86, 1490, 1489,
1952 1491, 1479, 86, 86, 1482, 1494, 1492, 1487, 86, 1484,
1953 86, 1493, 1495, 3252, 86, 1486, 1496, 1498, 1497, 1485,
1954 86, 1499, 1503, 1505, 1500, 1490, 1489, 1491, 1504, 86,
1955 86, 86, 1494, 86, 1501, 86, 86, 1502, 86, 1495,
1956 86, 1506, 1507, 1496, 1498, 1497, 3252, 1508, 1499, 1503,
1957 1505, 1500, 1509, 86, 1511, 1504, 86, 1510, 1512, 86,
1958 1514, 1501, 86, 86, 1502, 86, 1513, 1515, 1516, 1507,
1959
1960 1518, 1517, 1519, 86, 1508, 86, 3252, 86, 86, 86,
1961 1523, 1511, 86, 1520, 86, 1512, 1524, 1514, 1527, 86,
1962 1528, 1521, 86, 1513, 1515, 1516, 86, 1518, 1517, 1519,
1963 86, 3252, 1522, 1525, 3252, 86, 86, 1523, 1526, 86,
1964 1520, 86, 86, 1524, 1529, 1530, 86, 1528, 1521, 1531,
1965 86, 1532, 86, 1534, 1533, 1538, 1540, 1535, 86, 1522,
1966 1525, 86, 86, 86, 1536, 1526, 1539, 1541, 86, 1546,
1967 1537, 1529, 1530, 86, 1543, 86, 1531, 86, 1532, 86,
1968 1534, 1533, 1538, 1540, 1535, 86, 86, 1544, 1542, 1545,
1969 1547, 1536, 86, 1539, 1541, 86, 86, 1537, 1548, 1549,
1970
1971 86, 1543, 86, 1551, 1552, 86, 1550, 1555, 3252, 86,
1972 3252, 86, 1553, 3252, 1554, 1542, 1545, 1547, 1558, 86,
1973 1556, 3252, 1559, 3252, 1557, 1548, 1549, 86, 86, 1563,
1974 1562, 1560, 1566, 1550, 86, 86, 86, 86, 86, 1553,
1975 86, 1554, 86, 86, 86, 1558, 1564, 1556, 1561, 1559,
1976 86, 1557, 1565, 86, 86, 86, 1563, 1562, 1560, 1566,
1977 86, 1567, 1568, 1569, 1571, 1573, 3252, 1574, 1570, 1572,
1978 86, 86, 86, 1564, 86, 1561, 1575, 1576, 1578, 1565,
1979 1577, 1582, 1579, 1585, 86, 86, 1588, 3252, 1567, 1568,
1980 86, 3252, 1573, 86, 1574, 86, 86, 1583, 86, 1580,
1981
1982 86, 1581, 1587, 1575, 1576, 1578, 86, 1577, 1586, 1579,
1983 86, 1584, 86, 86, 1589, 86, 86, 1590, 86, 86,
1984 1593, 1594, 86, 86, 1583, 86, 1580, 86, 1581, 1587,
1985 1595, 1591, 1592, 86, 1596, 1586, 1598, 1599, 1584, 86,
1986 86, 1589, 86, 1597, 1590, 1600, 1601, 1593, 1594, 3252,
1987 1614, 86, 1602, 1604, 3252, 1603, 1609, 1595, 1591, 1592,
1988 86, 1596, 1605, 1598, 86, 86, 1610, 86, 86, 86,
1989 1597, 86, 86, 1601, 1606, 86, 86, 86, 1607, 1602,
1990 1604, 1615, 1603, 1609, 1611, 1612, 1613, 1616, 86, 1605,
1991 1617, 1608, 86, 1610, 1619, 1618, 86, 86, 1625, 86,
1992
1993 1620, 1606, 86, 86, 1626, 1607, 1621, 1622, 1615, 86,
1994 3252, 1611, 1612, 1613, 86, 1623, 86, 1617, 1608, 86,
1995 1630, 1619, 1618, 86, 86, 1624, 1627, 1620, 1629, 86,
1996 86, 86, 86, 1621, 1622, 86, 1631, 1628, 1632, 1633,
1997 1635, 3252, 1623, 86, 1641, 86, 86, 1630, 1634, 1636,
1998 86, 1637, 1624, 1627, 1639, 1629, 1638, 1642, 3252, 1640,
1999 86, 86, 86, 1645, 1628, 1632, 86, 86, 86, 86,
2000 86, 1641, 86, 1643, 1644, 1634, 1636, 86, 1637, 86,
2001 86, 1639, 86, 1638, 1642, 86, 1640, 1647, 1648, 1646,
2002 1645, 1651, 1650, 86, 1649, 3252, 1652, 1653, 1654, 1656,
2003
2004 1643, 1644, 86, 86, 86, 1655, 86, 86, 1657, 3252,
2005 86, 86, 1660, 86, 1647, 1648, 1646, 1658, 1651, 1650,
2006 1663, 1649, 86, 1652, 1653, 1654, 1656, 86, 1661, 1659,
2007 1662, 1665, 1655, 86, 1664, 86, 86, 1666, 86, 1660,
2008 86, 1667, 86, 86, 1658, 1668, 86, 1663, 1674, 1669,
2009 1672, 1675, 168, 86, 86, 1661, 1659, 1662, 1665, 1670,
2010 1671, 1664, 86, 86, 86, 1678, 1679, 86, 1667, 1673,
2011 1682, 86, 1668, 86, 86, 1674, 1669, 1672, 1675, 1680,
2012 1683, 1676, 1677, 1681, 86, 1684, 1670, 1671, 86, 86,
2013 86, 1685, 86, 1679, 1686, 86, 1673, 1682, 86, 3252,
2014
2015 1687, 86, 86, 1688, 1689, 3252, 1680, 1683, 1676, 1677,
2016 1681, 1690, 86, 86, 1691, 1695, 1692, 86, 1685, 86,
2017 1693, 3252, 1694, 1697, 1696, 1701, 86, 1687, 86, 1698,
2018 86, 1689, 86, 86, 1699, 86, 86, 1702, 1690, 1706,
2019 86, 1691, 1695, 1692, 86, 1700, 86, 1693, 86, 1694,
2020 1697, 1696, 1701, 86, 86, 1703, 1698, 1710, 1704, 1707,
2021 86, 1699, 1714, 1715, 1702, 1711, 1712, 1708, 86, 1723,
2022 1705, 86, 1700, 1716, 1713, 86, 1718, 1717, 86, 86,
2023 1719, 86, 1703, 1709, 1710, 1704, 1707, 86, 1720, 86,
2024 1721, 86, 1711, 1712, 1708, 86, 1723, 1705, 86, 86,
2025
2026 1722, 1713, 86, 1718, 1717, 86, 86, 1719, 1724, 1726,
2027 1709, 1725, 86, 1727, 86, 1728, 86, 1721, 86, 1729,
2028 86, 1730, 1731, 3252, 1733, 3252, 86, 1722, 1732, 1738,
2029 1734, 1735, 1736, 86, 3252, 1724, 1726, 1737, 1725, 86,
2030 86, 86, 86, 1743, 86, 86, 1729, 86, 1739, 1731,
2031 86, 86, 86, 86, 1740, 1732, 1738, 1734, 1735, 1736,
2032 1741, 86, 1745, 1742, 1737, 86, 1744, 86, 86, 86,
2033 1743, 1746, 1748, 1749, 86, 1739, 1750, 86, 1747, 1752,
2034 86, 1740, 1751, 86, 1753, 86, 86, 1741, 1755, 1745,
2035 1742, 1757, 86, 1744, 1754, 86, 1758, 1756, 1746, 1760,
2036
2037 1749, 86, 86, 1750, 86, 1747, 1752, 1759, 86, 1751,
2038 86, 86, 86, 1761, 1762, 1755, 1763, 86, 1757, 1764,
2039 86, 1754, 86, 1758, 1756, 1767, 1760, 1765, 86, 1770,
2040 1766, 86, 86, 1772, 1759, 1771, 86, 1768, 1773, 86,
2041 1761, 1762, 1769, 1763, 1775, 86, 1764, 3252, 1774, 86,
2042 1776, 1777, 1767, 86, 1765, 1783, 1770, 1766, 1778, 86,
2043 86, 1780, 1771, 86, 1768, 86, 86, 1781, 1779, 1769,
2044 1789, 1775, 86, 1782, 86, 1774, 86, 1776, 86, 1784,
2045 1788, 86, 1783, 86, 1785, 1778, 1790, 1786, 1780, 86,
2046 1787, 1794, 86, 3252, 1781, 1779, 1791, 86, 86, 1793,
2047
2048 1782, 1792, 86, 86, 86, 86, 1784, 1788, 86, 1795,
2049 1796, 1785, 1799, 86, 1786, 86, 1800, 1787, 1794, 1797,
2050 86, 86, 1798, 1791, 1801, 86, 1793, 86, 1792, 3252,
2051 1802, 86, 3252, 1803, 1807, 1808, 1795, 1796, 86, 1799,
2052 1813, 1810, 86, 1800, 86, 1805, 1797, 1804, 1806, 1798,
2053 86, 1801, 86, 86, 1814, 1816, 86, 1802, 1809, 86,
2054 1803, 1807, 1808, 86, 86, 1811, 86, 1813, 1810, 1817,
2055 1812, 1815, 1805, 1819, 1804, 1806, 86, 86, 1818, 1820,
2056 1821, 1814, 1816, 1822, 3252, 1809, 1824, 86, 1826, 1823,
2057 1825, 1830, 1827, 86, 3252, 1842, 3252, 86, 1815, 1831,
2058
2059 86, 86, 86, 86, 1832, 1818, 86, 1821, 1828, 1834,
2060 86, 86, 86, 1824, 1829, 86, 1823, 1825, 86, 1827,
2061 86, 1833, 1835, 86, 1836, 1837, 1831, 86, 86, 86,
2062 1838, 1832, 86, 1839, 1840, 1828, 1834, 1843, 86, 86,
2063 86, 1829, 3252, 86, 1844, 1845, 86, 1846, 1833, 1835,
2064 1847, 1836, 1837, 1849, 86, 1841, 1848, 1838, 86, 86,
2065 1839, 86, 1850, 1851, 86, 1852, 1853, 86, 86, 86,
2066 1854, 1844, 86, 1856, 1846, 86, 86, 1847, 1855, 1857,
2067 1849, 1858, 1841, 1848, 1860, 86, 1863, 1859, 1864, 1862,
2068 1851, 1861, 1852, 1853, 86, 86, 86, 86, 86, 1865,
2069
2070 1856, 86, 86, 86, 168, 1855, 1857, 86, 1858, 86,
2071 1866, 1860, 1867, 1863, 1859, 86, 1862, 1868, 1861, 1869,
2072 86, 1870, 1873, 1871, 1874, 86, 1865, 1872, 1875, 3252,
2073 86, 86, 86, 1884, 1877, 1878, 1879, 1866, 86, 1867,
2074 1876, 86, 86, 86, 86, 1880, 1869, 1881, 1870, 1873,
2075 1871, 1874, 1883, 1882, 1872, 86, 86, 1885, 1886, 1888,
2076 86, 1877, 1878, 86, 1887, 86, 1893, 1876, 1891, 86,
2077 86, 1889, 1880, 86, 86, 86, 1890, 86, 86, 1883,
2078 1882, 86, 1894, 86, 86, 1886, 1888, 1892, 86, 86,
2079 1895, 1887, 1896, 1893, 1897, 1891, 86, 1899, 1889, 1906,
2080
2081 1898, 1904, 1907, 1890, 86, 1901, 86, 86, 86, 1894,
2082 1900, 1902, 86, 1905, 1892, 86, 3252, 1895, 1903, 1896,
2083 1917, 1897, 86, 86, 1899, 86, 86, 1898, 1904, 1908,
2084 1911, 1909, 1901, 86, 86, 86, 1910, 1900, 1902, 86,
2085 1905, 86, 1912, 86, 1926, 1903, 1913, 86, 1914, 86,
2086 1915, 1928, 1916, 1918, 1920, 1919, 1908, 1911, 1909, 1921,
2087 1922, 86, 86, 1910, 1923, 1924, 86, 1925, 1930, 1912,
2088 86, 86, 1927, 1913, 1932, 1914, 86, 1915, 86, 1916,
2089 86, 86, 1919, 86, 1929, 86, 1921, 1922, 1933, 1936,
2090 86, 1923, 86, 86, 1925, 1931, 86, 86, 86, 1927,
2091
2092 86, 1932, 1934, 1935, 1937, 1938, 1941, 1939, 3252, 86,
2093 86, 1929, 1946, 1940, 1948, 86, 86, 1947, 1950, 86,
2094 3252, 3252, 1931, 1951, 86, 86, 1954, 86, 1957, 1934,
2095 1935, 1937, 1938, 86, 1939, 86, 1952, 3252, 86, 1946,
2096 1940, 1942, 1943, 1944, 1947, 1949, 86, 1953, 1945, 86,
2097 86, 86, 86, 1954, 1956, 1955, 86, 1959, 1958, 86,
2098 86, 1960, 1961, 1952, 86, 1963, 86, 86, 1942, 1943,
2099 1944, 86, 1949, 1964, 1953, 1945, 86, 1962, 86, 1966,
2100 86, 1956, 1955, 1967, 1959, 1958, 1968, 1969, 1960, 86,
2101 1965, 86, 1963, 86, 1970, 86, 86, 1971, 1972, 1974,
2102
2103 1964, 1973, 1975, 1976, 1962, 86, 1966, 86, 1977, 86,
2104 86, 1981, 1978, 1968, 86, 86, 86, 1965, 1979, 1984,
2105 86, 1970, 1980, 86, 1971, 1972, 1982, 86, 1973, 86,
2106 1976, 86, 86, 1983, 1985, 1977, 86, 86, 1981, 1978,
2107 1986, 86, 1987, 1988, 86, 1979, 1984, 86, 1989, 1980,
2108 1990, 1991, 1992, 1982, 1993, 1994, 1995, 1998, 86, 1997,
2109 1983, 86, 86, 86, 1996, 2000, 86, 1986, 86, 1987,
2110 86, 86, 1999, 86, 2001, 86, 3252, 86, 1991, 1992,
2111 86, 1993, 1994, 1995, 1998, 2002, 1997, 2004, 86, 2003,
2112 2007, 1996, 86, 2006, 2009, 86, 2008, 86, 86, 1999,
2113
2114 86, 86, 3252, 2005, 2013, 2010, 86, 2011, 2014, 2016,
2115 86, 3252, 2002, 86, 2004, 2017, 2003, 2007, 86, 86,
2116 2006, 86, 2015, 2008, 2020, 2012, 2027, 86, 3252, 86,
2117 2005, 2013, 2010, 86, 2011, 2014, 86, 2021, 86, 2018,
2118 86, 2022, 2017, 86, 2019, 2023, 2030, 2024, 2028, 2015,
2119 2025, 86, 2012, 86, 86, 86, 2026, 86, 86, 2029,
2120 86, 2031, 2032, 86, 2021, 2037, 2018, 2041, 2022, 86,
2121 2042, 2019, 2023, 86, 2024, 2028, 2033, 2025, 2038, 2034,
2122 2046, 86, 2044, 2026, 2035, 86, 2029, 86, 2031, 2032,
2123 2036, 2039, 86, 2045, 86, 86, 2040, 86, 2047, 86,
2124
2125 2043, 86, 86, 2033, 86, 86, 2034, 2048, 86, 2044,
2126 2051, 2035, 86, 86, 2049, 2053, 2050, 2036, 86, 2052,
2127 2045, 2055, 2054, 86, 86, 2047, 2061, 2043, 2059, 86,
2128 86, 2057, 2058, 2062, 2048, 2056, 86, 2060, 2063, 86,
2129 2064, 2049, 86, 2050, 168, 86, 2052, 86, 2055, 2054,
2130 86, 2066, 86, 86, 86, 2059, 2065, 2068, 2057, 2058,
2131 86, 2067, 2056, 86, 2060, 2063, 2070, 2069, 3252, 2072,
2132 2071, 2073, 86, 86, 3252, 86, 2074, 86, 2066, 2075,
2133 2076, 2077, 86, 2065, 2068, 86, 86, 2078, 2067, 86,
2134 86, 86, 2080, 2070, 2069, 86, 2072, 2071, 2073, 86,
2135
2136 2079, 86, 2081, 2074, 2082, 2083, 2075, 86, 2077, 86,
2137 2085, 86, 2084, 2086, 2078, 3252, 86, 2088, 86, 2080,
2138 2087, 86, 86, 86, 2089, 2090, 2091, 2079, 2092, 86,
2139 3252, 2082, 2083, 86, 2093, 86, 86, 2085, 2096, 2084,
2140 2086, 86, 86, 86, 2097, 2094, 2099, 2087, 2095, 86,
2141 2098, 2089, 2090, 2091, 2100, 2092, 86, 86, 2102, 2104,
2142 86, 2093, 2101, 2105, 86, 2096, 2110, 2106, 86, 86,
2143 86, 2097, 2094, 2099, 2103, 2095, 86, 2098, 86, 2108,
2144 86, 2100, 2107, 2109, 2114, 2102, 86, 86, 86, 2101,
2145 2105, 86, 2111, 86, 2106, 2112, 86, 3252, 86, 2113,
2146
2147 2116, 2103, 86, 2117, 2115, 2119, 2108, 2118, 2121, 2107,
2148 2109, 86, 2120, 86, 2123, 2124, 3252, 3252, 2122, 2111,
2149 2163, 86, 2112, 86, 86, 86, 2113, 86, 86, 86,
2150 2117, 2115, 86, 86, 2118, 2121, 2126, 86, 2125, 2120,
2151 86, 2123, 2124, 2127, 86, 2122, 2128, 2129, 86, 2133,
2152 2130, 86, 86, 2134, 2131, 2136, 86, 86, 86, 2137,
2153 2139, 86, 86, 2126, 2135, 2125, 2140, 2132, 86, 3252,
2154 2127, 2138, 2143, 2128, 2129, 86, 2133, 2130, 86, 86,
2155 2134, 2131, 86, 2141, 86, 2142, 2137, 2139, 86, 2145,
2156 86, 2135, 2144, 2140, 2132, 2146, 2147, 86, 2138, 2143,
2157
2158 2148, 86, 2149, 2150, 3252, 2152, 2151, 86, 2154, 86,
2159 2141, 86, 2142, 86, 86, 86, 2145, 2153, 86, 2144,
2160 86, 86, 2146, 2147, 2155, 2156, 86, 2148, 2157, 2149,
2161 2150, 86, 2152, 2151, 2158, 2154, 2159, 2161, 2160, 2165,
2162 2162, 3252, 86, 3252, 2153, 2169, 86, 86, 2164, 2166,
2163 86, 86, 2156, 86, 2167, 2157, 2168, 2173, 86, 86,
2164 86, 2158, 86, 2159, 2161, 2160, 2165, 2162, 86, 86,
2165 86, 2170, 86, 2171, 2174, 2164, 2166, 2172, 2175, 2176,
2166 2179, 2167, 2181, 2168, 86, 86, 2182, 2180, 86, 86,
2167 3252, 2177, 3252, 2183, 2184, 3252, 86, 86, 2170, 2178,
2168
2169 2171, 2174, 86, 86, 2172, 2175, 2176, 86, 86, 2181,
2170 86, 86, 86, 2182, 2180, 2185, 86, 2192, 2177, 2186,
2171 2183, 2184, 2187, 2188, 86, 2189, 2178, 2190, 2193, 2195,
2172 2194, 86, 2191, 2197, 2198, 86, 2196, 86, 2200, 3252,
2173 3252, 86, 2185, 86, 2192, 86, 2186, 86, 86, 2187,
2174 2188, 86, 2189, 2199, 3252, 2193, 2195, 2194, 86, 86,
2175 2197, 2198, 2205, 2196, 2201, 86, 2202, 2203, 2204, 2206,
2176 2207, 86, 2208, 86, 86, 86, 2209, 3252, 86, 86,
2177 2199, 86, 2210, 2211, 86, 86, 2214, 2212, 2215, 2205,
2178 2216, 2201, 86, 2202, 2203, 2204, 2206, 2207, 86, 2208,
2179
2180 2213, 86, 86, 2209, 86, 2219, 2220, 86, 86, 2210,
2181 2211, 2217, 2221, 2214, 2212, 2215, 2218, 2216, 86, 2222,
2182 86, 2223, 2224, 86, 2230, 2225, 2226, 2213, 2231, 86,
2183 86, 2227, 2219, 86, 2234, 2232, 168, 2228, 2217, 2221,
2184 86, 86, 2229, 2218, 2233, 86, 86, 86, 2223, 2224,
2185 2235, 2240, 2225, 2226, 2236, 2239, 86, 2241, 2227, 86,
2186 86, 2234, 2232, 86, 2244, 2243, 2245, 2247, 2237, 86,
2187 2242, 2233, 2246, 86, 86, 2249, 3252, 86, 86, 2238,
2188 86, 2236, 2239, 86, 2241, 86, 2248, 2250, 86, 2252,
2189 3252, 3252, 2243, 2245, 86, 2237, 86, 2242, 86, 2246,
2190
2191 2255, 2254, 2251, 86, 2253, 2257, 2238, 86, 86, 86,
2192 86, 86, 86, 2248, 2250, 2256, 2252, 86, 2258, 86,
2193 2263, 2259, 86, 2260, 2262, 86, 2261, 2255, 2254, 2251,
2194 86, 2253, 2257, 86, 86, 2264, 2265, 2266, 2267, 2270,
2195 86, 2269, 2256, 2268, 86, 2258, 86, 2263, 2259, 86,
2196 2260, 2262, 2272, 2261, 86, 2273, 2275, 2276, 3252, 86,
2197 86, 86, 86, 2265, 2266, 2267, 2270, 2271, 2269, 86,
2198 2268, 2274, 2282, 2277, 86, 86, 86, 2278, 86, 2272,
2199 86, 86, 2273, 86, 2276, 86, 2279, 2281, 2280, 2285,
2200 86, 86, 2283, 2288, 2271, 86, 2284, 2286, 2274, 2282,
2201
2202 2277, 86, 86, 2289, 2278, 2287, 2290, 86, 2292, 2296,
2203 2291, 86, 2293, 2279, 2281, 2280, 2285, 2294, 86, 2283,
2204 2288, 2295, 86, 2284, 2286, 86, 86, 2297, 86, 2298,
2205 86, 86, 2287, 2290, 86, 2292, 86, 2291, 2299, 2293,
2206 2300, 86, 2301, 2303, 2294, 2302, 2304, 86, 2295, 2305,
2207 2307, 2308, 86, 2306, 86, 2310, 2298, 86, 86, 2309,
2208 86, 2311, 2313, 3252, 2315, 2299, 86, 2300, 3252, 2301,
2209 86, 86, 2302, 86, 86, 86, 2305, 2307, 2308, 2312,
2210 2306, 2314, 86, 2316, 2318, 2317, 2309, 86, 86, 86,
2211 86, 86, 2319, 2323, 2324, 86, 2320, 2321, 2325, 2327,
2212
2213 2322, 86, 3252, 3252, 2333, 2330, 2312, 86, 2314, 86,
2214 2316, 86, 2317, 86, 2326, 86, 86, 2329, 3252, 86,
2215 2323, 2324, 86, 2320, 2321, 86, 86, 2322, 2328, 86,
2216 2331, 86, 2330, 2337, 2334, 2335, 2338, 86, 86, 2340,
2217 2336, 2326, 86, 86, 2329, 2332, 2339, 86, 86, 2342,
2218 86, 86, 2341, 3252, 2347, 2328, 86, 2331, 2344, 2345,
2219 86, 2334, 2335, 2338, 2349, 2350, 2340, 2336, 2354, 2343,
2220 2346, 86, 2332, 2339, 2398, 86, 86, 86, 86, 2341,
2221 86, 86, 86, 2348, 86, 2344, 2345, 2353, 86, 2351,
2222 86, 2349, 2350, 2352, 86, 2354, 2343, 2346, 86, 2355,
2223
2224 2356, 86, 86, 2360, 2357, 2367, 86, 2361, 2364, 3252,
2225 2348, 2362, 2371, 2363, 2353, 86, 2351, 86, 86, 2358,
2226 2352, 2359, 86, 2366, 2373, 86, 2355, 2356, 86, 86,
2227 2360, 2357, 2367, 86, 2361, 2364, 2365, 2368, 2362, 2369,
2228 2363, 2370, 86, 2372, 86, 86, 2358, 2374, 2359, 86,
2229 2366, 2375, 2376, 86, 86, 2384, 86, 2377, 2378, 86,
2230 3252, 86, 2379, 2365, 2368, 2380, 2369, 3252, 2370, 86,
2231 2372, 86, 2381, 86, 2374, 2382, 3252, 2385, 2375, 2376,
2232 86, 2383, 86, 86, 2377, 2378, 2388, 86, 2386, 2379,
2233 86, 2387, 2380, 86, 86, 2389, 2390, 2391, 86, 2381,
2234
2235 3252, 3252, 2382, 2393, 86, 2392, 2414, 2399, 2383, 86,
2236 2394, 86, 2395, 2388, 2401, 2386, 2396, 86, 2387, 86,
2237 2397, 86, 2389, 86, 2391, 168, 2400, 86, 86, 86,
2238 2393, 86, 2392, 2403, 2399, 2402, 2404, 2394, 86, 2395,
2239 2405, 2401, 2407, 2396, 86, 86, 86, 2397, 2406, 86,
2240 2408, 86, 2409, 2400, 2410, 2411, 3252, 2415, 2416, 2412,
2241 2403, 3252, 2402, 2404, 86, 86, 2413, 2405, 2417, 2407,
2242 86, 2418, 3252, 2419, 2424, 2406, 86, 2408, 2421, 86,
2243 86, 2410, 86, 86, 86, 2416, 2412, 2420, 86, 86,
2244 2423, 86, 3252, 2413, 2425, 86, 2422, 2426, 2418, 86,
2245
2246 2419, 2428, 86, 2427, 86, 2421, 86, 86, 2429, 2430,
2247 2431, 2433, 2436, 2434, 2420, 2432, 86, 2423, 2435, 86,
2248 86, 2425, 2438, 2422, 2426, 86, 86, 2439, 2428, 86,
2249 2427, 86, 2437, 2445, 86, 86, 2430, 3252, 2433, 86,
2250 2434, 86, 86, 2440, 86, 2435, 86, 2441, 2442, 2438,
2251 86, 2443, 2446, 2447, 2439, 2444, 2448, 2451, 86, 2437,
2252 86, 2450, 86, 2449, 86, 86, 2454, 86, 2456, 2453,
2253 2440, 86, 86, 86, 2441, 2442, 2452, 86, 2443, 2446,
2254 2447, 2455, 2444, 2448, 2451, 86, 2457, 86, 2450, 2458,
2255 2449, 86, 2464, 86, 2459, 2456, 2453, 2461, 86, 86,
2256
2257 86, 2460, 86, 2452, 2462, 2463, 2465, 86, 2455, 2467,
2258 3252, 2466, 2469, 2457, 2477, 86, 2458, 2468, 86, 2464,
2259 2471, 2459, 2475, 86, 2461, 86, 86, 86, 2460, 86,
2260 2470, 2462, 2473, 86, 2472, 86, 86, 86, 2466, 2469,
2261 2474, 86, 86, 2476, 2468, 2478, 86, 2471, 2480, 86,
2262 2482, 2481, 2479, 86, 86, 2484, 2485, 2470, 86, 2473,
2263 2487, 2472, 86, 86, 2486, 2483, 2489, 2474, 2494, 86,
2264 86, 86, 2478, 86, 86, 2480, 2488, 2482, 2481, 2479,
2265 86, 2490, 86, 2485, 2493, 2495, 2491, 2487, 86, 2492,
2266 2496, 2497, 2483, 86, 86, 86, 86, 2498, 86, 86,
2267
2268 2499, 2500, 2501, 2488, 2503, 86, 2502, 86, 2490, 86,
2269 86, 2493, 2495, 2491, 86, 86, 2492, 2496, 2497, 86,
2270 2505, 86, 2506, 2504, 2498, 86, 86, 2499, 2500, 2501,
2271 86, 2503, 2507, 2502, 2508, 2509, 2510, 2511, 2512, 3252,
2272 2513, 2515, 86, 2514, 3252, 3252, 86, 2505, 2517, 86,
2273 2504, 86, 2519, 2521, 3252, 86, 86, 2516, 2522, 86,
2274 86, 86, 86, 2510, 2511, 2512, 86, 2513, 2515, 86,
2275 2514, 2518, 86, 2520, 2523, 2517, 2524, 2525, 2526, 86,
2276 86, 86, 86, 2531, 2516, 86, 2528, 2527, 2529, 2530,
2277 86, 86, 3252, 86, 86, 86, 86, 86, 2518, 2532,
2278
2279 2520, 2523, 2534, 2524, 2525, 2526, 2533, 86, 86, 86,
2280 86, 2535, 2538, 2528, 2527, 2529, 2530, 86, 2536, 2537,
2281 2546, 86, 2539, 2540, 2541, 86, 2532, 168, 2542, 2534,
2282 2544, 2550, 86, 2533, 2543, 86, 86, 2548, 2535, 2538,
2283 86, 86, 2551, 86, 86, 2536, 2537, 2546, 86, 2539,
2284 2540, 2541, 2545, 2547, 2549, 2542, 86, 2544, 86, 86,
2285 2552, 2543, 2553, 2555, 2548, 2554, 86, 2556, 2559, 86,
2286 2557, 3252, 86, 2558, 3252, 86, 86, 2561, 86, 2545,
2287 2547, 2549, 86, 86, 2560, 86, 86, 2552, 86, 2553,
2288 2555, 86, 2554, 86, 2556, 2559, 2562, 2557, 2563, 2564,
2289
2290 2558, 2566, 2565, 86, 2561, 2567, 86, 2569, 86, 2568,
2291 2570, 2560, 2571, 2573, 86, 2572, 86, 2574, 86, 2576,
2292 86, 3252, 3252, 2562, 86, 2563, 2564, 86, 2566, 2565,
2293 2575, 86, 2567, 86, 2569, 2579, 2568, 86, 2577, 2571,
2294 2573, 2578, 2572, 2581, 86, 2582, 86, 86, 86, 2580,
2295 86, 2584, 86, 2583, 86, 86, 2585, 2575, 2586, 86,
2296 2587, 86, 2579, 2588, 86, 2577, 2589, 2590, 2578, 86,
2297 2581, 2591, 2582, 2592, 2593, 2595, 2580, 2598, 2584, 2600,
2298 2583, 2594, 86, 86, 86, 86, 86, 2587, 2596, 86,
2299 2588, 2597, 2599, 86, 86, 86, 2601, 86, 86, 86,
2300
2301 2592, 2593, 2595, 86, 2598, 2602, 86, 2604, 2594, 2606,
2302 3252, 3252, 2603, 2608, 2605, 2596, 2613, 86, 2597, 2599,
2303 86, 86, 86, 2601, 86, 86, 2607, 2612, 2616, 3252,
2304 2609, 2620, 86, 86, 2604, 86, 2606, 86, 2610, 2603,
2305 2608, 2605, 2611, 86, 2614, 2617, 86, 2619, 2618, 86,
2306 2615, 86, 2621, 2607, 2612, 86, 86, 2609, 86, 86,
2307 86, 2622, 2625, 2627, 2628, 2610, 86, 2626, 86, 2611,
2308 86, 2614, 2617, 86, 2619, 2618, 2623, 2615, 2624, 2621,
2309 2629, 86, 86, 86, 2630, 86, 2631, 86, 2622, 86,
2310 2627, 2628, 86, 2632, 2626, 2634, 2633, 2635, 2636, 3252,
2311
2312 2637, 2639, 2640, 2623, 2638, 2624, 86, 86, 3252, 86,
2313 3252, 2630, 86, 86, 86, 86, 86, 2642, 2641, 2643,
2314 2632, 2644, 2634, 2633, 2635, 86, 86, 2637, 86, 2640,
2315 2645, 2638, 86, 2646, 2647, 86, 2648, 86, 2649, 3252,
2316 2650, 2652, 86, 3252, 2642, 2641, 2643, 2651, 86, 86,
2317 2654, 86, 2653, 2656, 2657, 2659, 86, 2645, 86, 2655,
2318 86, 2647, 86, 2648, 2660, 2649, 86, 2650, 2652, 86,
2319 86, 86, 2658, 2661, 2651, 86, 86, 2654, 2662, 2653,
2320 2656, 2657, 86, 2664, 86, 2663, 2655, 2665, 2666, 2667,
2321 2669, 86, 86, 2681, 3252, 2668, 86, 2670, 86, 2658,
2322
2323 168, 2671, 86, 2672, 2673, 2662, 2674, 86, 2675, 3252,
2324 2664, 86, 2663, 2680, 2665, 2678, 2667, 2669, 86, 86,
2325 86, 86, 2668, 2679, 2670, 86, 86, 2683, 86, 2676,
2326 86, 2673, 86, 86, 2677, 2675, 2682, 86, 2684, 2685,
2327 2680, 2686, 2678, 2688, 2689, 86, 2687, 2690, 3252, 86,
2328 2679, 86, 86, 2692, 2683, 2691, 86, 2693, 2698, 86,
2329 86, 86, 2694, 2682, 86, 2684, 2685, 86, 2686, 86,
2330 86, 2696, 2695, 2687, 2690, 86, 86, 2699, 2697, 86,
2331 2692, 2702, 2691, 2700, 2693, 2698, 86, 86, 2701, 2694,
2332 2704, 86, 2705, 86, 2703, 3252, 2709, 3252, 2696, 2695,
2333
2334 86, 86, 2707, 2706, 2699, 2697, 86, 86, 2702, 86,
2335 2700, 86, 86, 86, 2711, 2701, 2708, 2710, 2713, 2705,
2336 2714, 2703, 86, 86, 86, 86, 2712, 2715, 86, 2707,
2337 2706, 2718, 86, 2716, 2717, 2719, 2720, 86, 86, 86,
2338 86, 2711, 2721, 2708, 2710, 86, 2722, 2714, 2723, 2725,
2339 2724, 3252, 2726, 2712, 2715, 2731, 2732, 86, 86, 2727,
2340 2716, 2717, 2719, 2733, 2728, 86, 2734, 2729, 86, 86,
2341 86, 86, 2730, 86, 86, 86, 2725, 2724, 86, 2726,
2342 86, 86, 2731, 2732, 86, 2735, 2727, 86, 2736, 2738,
2343 86, 2728, 2737, 86, 2729, 2739, 2740, 2744, 2741, 2730,
2344
2345 2742, 2745, 86, 2746, 86, 2743, 2747, 2748, 3252, 3252,
2346 2752, 86, 86, 86, 86, 2736, 86, 2750, 86, 2737,
2347 2753, 2749, 2739, 2740, 2744, 2741, 86, 86, 2745, 2751,
2348 86, 86, 86, 86, 2748, 86, 86, 86, 2754, 2755,
2349 2756, 2757, 2760, 2758, 2750, 2759, 86, 2753, 2749, 2761,
2350 2762, 86, 86, 2765, 2763, 86, 2751, 86, 86, 2764,
2351 2768, 2769, 2766, 2772, 2767, 86, 2755, 86, 2757, 86,
2352 2758, 86, 2759, 86, 86, 2771, 86, 2762, 2773, 2775,
2353 2765, 86, 2770, 2777, 86, 2774, 86, 2768, 2778, 2766,
2354 86, 2767, 2776, 86, 86, 2785, 2781, 3252, 86, 3252,
2355
2356 86, 2783, 2771, 86, 86, 2773, 2775, 86, 86, 2770,
2357 2777, 2782, 2774, 3252, 86, 2778, 2779, 2780, 86, 2776,
2358 86, 2784, 86, 2781, 2786, 2787, 86, 2789, 2783, 2792,
2359 2793, 2790, 2796, 2788, 86, 2794, 2791, 86, 2782, 86,
2360 86, 2797, 2795, 2779, 2780, 2798, 3252, 2799, 2784, 86,
2361 86, 2786, 2787, 86, 2789, 86, 2792, 2800, 2790, 86,
2362 2788, 3252, 86, 2791, 2801, 2802, 3252, 86, 2797, 2795,
2363 2803, 86, 2798, 86, 2799, 86, 2806, 86, 2804, 86,
2364 2805, 2807, 2808, 86, 2800, 2810, 2809, 86, 86, 86,
2365 2811, 2801, 2802, 86, 2813, 2812, 2814, 2803, 86, 86,
2366
2367 2815, 2817, 2816, 2806, 86, 2804, 3252, 2805, 2807, 2808,
2368 3252, 2821, 86, 2809, 86, 2818, 86, 2811, 2819, 2820,
2369 86, 86, 2812, 2814, 86, 2822, 2823, 86, 86, 2816,
2370 2824, 2825, 2829, 86, 2826, 2832, 86, 86, 2821, 2827,
2371 2828, 2830, 2818, 86, 2833, 2819, 2820, 2831, 86, 86,
2372 86, 3252, 86, 2823, 86, 2838, 2836, 2824, 2825, 2829,
2373 2834, 2835, 86, 86, 86, 86, 86, 2828, 2830, 86,
2374 86, 86, 2837, 86, 2831, 2839, 2840, 86, 2841, 2842,
2375 2843, 2852, 2838, 2836, 3252, 86, 2844, 2834, 2835, 2853,
2376 86, 3252, 86, 2845, 86, 86, 2846, 3252, 2847, 2837,
2377
2378 2849, 2848, 2839, 2840, 2854, 2841, 2850, 2843, 86, 2851,
2379 2856, 86, 2855, 2844, 2859, 86, 86, 86, 86, 86,
2380 2845, 2857, 86, 2846, 86, 2847, 2862, 2849, 2848, 86,
2381 86, 86, 86, 2850, 2858, 2860, 2851, 2856, 2861, 2855,
2382 2863, 2865, 2866, 2864, 2868, 2867, 86, 86, 2857, 86,
2383 2869, 2870, 86, 86, 86, 3252, 86, 86, 86, 2871,
2384 86, 2858, 2860, 2872, 86, 2861, 2873, 2863, 2865, 2866,
2385 2864, 2874, 2867, 2875, 2879, 2876, 86, 2869, 86, 2877,
2386 2880, 86, 86, 3252, 3252, 86, 2871, 86, 86, 2878,
2387 2872, 86, 2882, 2873, 86, 2881, 86, 86, 2874, 2883,
2388
2389 2875, 86, 2876, 2884, 2885, 2886, 2877, 2880, 2891, 86,
2390 2888, 2887, 86, 2893, 86, 86, 2878, 86, 2889, 2882,
2391 2890, 86, 2881, 2894, 86, 2896, 2883, 86, 86, 2900,
2392 2884, 2885, 2886, 86, 2892, 86, 2901, 2888, 2887, 2905,
2393 86, 3252, 86, 2895, 2897, 2889, 2898, 2890, 2899, 86,
2394 86, 86, 86, 2902, 2903, 86, 2900, 86, 86, 86,
2395 86, 2892, 2908, 86, 2904, 86, 2905, 2909, 2907, 2906,
2396 2895, 2897, 86, 2898, 86, 2899, 86, 2910, 2911, 2912,
2397 2902, 2903, 86, 2913, 86, 2914, 2915, 2918, 2916, 86,
2398 2919, 2904, 2920, 86, 2909, 2907, 2906, 2921, 3252, 86,
2399
2400 86, 2925, 3252, 86, 2927, 2911, 2912, 2917, 86, 86,
2401 86, 2923, 86, 2915, 2918, 86, 2922, 2919, 2924, 2920,
2402 2926, 2928, 2930, 2931, 86, 86, 86, 3252, 86, 86,
2403 86, 2927, 2929, 2932, 2917, 2933, 86, 2934, 2923, 86,
2404 2939, 2935, 2936, 2922, 86, 2924, 86, 2926, 2928, 2937,
2405 86, 2942, 3252, 2938, 86, 2940, 2941, 86, 2943, 2929,
2406 2932, 86, 2947, 86, 2934, 86, 2944, 86, 2935, 86,
2407 2946, 86, 86, 86, 2950, 86, 2937, 2945, 86, 86,
2408 2938, 2951, 2940, 2941, 86, 2943, 2948, 2949, 2952, 86,
2409 2953, 2956, 86, 2944, 86, 2957, 2954, 2946, 2955, 2958,
2410
2411 2960, 2950, 2959, 86, 2945, 3252, 2961, 2962, 86, 86,
2412 86, 2963, 86, 2948, 2949, 86, 2964, 2953, 86, 86,
2413 86, 86, 86, 2954, 2967, 2955, 86, 2968, 86, 2959,
2414 2965, 2966, 86, 2961, 86, 86, 86, 2970, 2963, 2969,
2415 2972, 2971, 2973, 2964, 86, 2974, 2975, 2976, 2977, 2978,
2416 86, 2967, 86, 86, 86, 86, 2979, 2965, 2966, 86,
2417 2980, 2982, 2984, 2985, 2970, 2981, 2969, 86, 2971, 86,
2418 86, 2983, 2986, 2975, 2976, 2977, 86, 86, 86, 2989,
2419 3252, 86, 86, 86, 2987, 2990, 86, 2980, 2988, 2984,
2420 86, 86, 2981, 86, 86, 86, 2991, 2992, 2983, 2986,
2421
2422 86, 86, 2993, 3001, 3016, 3017, 2989, 2994, 2997, 2996,
2423 86, 2987, 2990, 2995, 86, 2988, 86, 86, 86, 86,
2424 86, 2998, 2999, 2991, 2992, 86, 3000, 3004, 3002, 2993,
2425 3001, 86, 86, 86, 2994, 2997, 2996, 3003, 3005, 3006,
2426 2995, 3007, 3008, 3009, 86, 3010, 86, 3252, 2998, 2999,
2427 86, 3011, 3014, 3000, 3012, 3002, 86, 3015, 3023, 86,
2428 86, 3018, 3019, 86, 3003, 3005, 3006, 3013, 3007, 3008,
2429 86, 3024, 86, 3022, 86, 86, 86, 3252, 3011, 86,
2430 86, 3012, 3020, 3021, 86, 86, 3025, 3028, 3026, 3029,
2431 86, 3030, 3031, 86, 3013, 86, 86, 3027, 3024, 86,
2432
2433 3022, 3035, 3032, 3033, 86, 3034, 3046, 3037, 3036, 86,
2434 86, 86, 86, 3025, 3028, 3026, 86, 86, 3030, 3031,
2435 3038, 86, 3039, 3041, 3027, 86, 86, 3040, 3035, 3032,
2436 3033, 3044, 3034, 86, 3037, 3036, 3045, 3042, 86, 86,
2437 3043, 3047, 3049, 86, 3048, 86, 3252, 86, 86, 86,
2438 3041, 3050, 3051, 3052, 3040, 86, 86, 3053, 3054, 3056,
2439 3055, 86, 3057, 86, 3042, 3058, 3059, 3043, 3047, 3049,
2440 3060, 3048, 3061, 86, 86, 3063, 3062, 3064, 3050, 3051,
2441 3052, 86, 3065, 3066, 86, 3067, 86, 3055, 86, 86,
2442 86, 3068, 86, 3059, 86, 3069, 3070, 86, 3071, 86,
2443
2444 3073, 3072, 86, 3062, 86, 3076, 3074, 3078, 3075, 86,
2445 86, 3079, 86, 86, 86, 86, 86, 3077, 86, 86,
2446 3080, 86, 86, 3070, 3081, 86, 86, 3073, 3072, 86,
2447 3082, 3083, 86, 3074, 3078, 3075, 86, 3084, 3079, 3086,
2448 86, 3085, 86, 3087, 3077, 3088, 86, 3080, 3089, 3090,
2449 3252, 3081, 86, 3252, 3093, 3091, 3096, 86, 3083, 3092,
2450 3094, 86, 86, 86, 3084, 86, 3086, 86, 3085, 86,
2451 3087, 86, 3088, 3095, 86, 3099, 3090, 86, 3097, 3100,
2452 86, 3093, 3091, 3096, 3098, 86, 3092, 3094, 3101, 3102,
2453 86, 3103, 3104, 86, 86, 3105, 86, 3106, 3110, 86,
2454
2455 3095, 3107, 3099, 3109, 3108, 3097, 3100, 86, 86, 3112,
2456 3111, 3098, 3114, 86, 86, 86, 86, 86, 86, 3104,
2457 86, 3113, 3105, 3252, 3106, 3110, 3115, 3116, 3107, 3121,
2458 3109, 3108, 86, 86, 86, 86, 3112, 3111, 86, 3114,
2459 86, 3117, 3122, 3119, 3118, 86, 3120, 86, 3113, 3127,
2460 86, 3129, 3124, 3115, 3116, 86, 3121, 86, 86, 3123,
2461 3125, 3126, 86, 3130, 3131, 86, 3132, 86, 3117, 3122,
2462 3119, 3118, 3133, 3120, 86, 3128, 3127, 3134, 86, 3124,
2463 3252, 86, 86, 86, 3137, 3138, 3123, 3125, 3126, 3135,
2464 3130, 86, 86, 3132, 3136, 3139, 3140, 86, 86, 86,
2465
2466 3142, 86, 3128, 3141, 86, 3252, 3143, 86, 86, 3144,
2467 3147, 3137, 3138, 3145, 3148, 86, 3135, 86, 3146, 86,
2468 3150, 3136, 3139, 3140, 86, 86, 3149, 3151, 86, 3154,
2469 3141, 3152, 86, 3143, 3155, 86, 3144, 86, 86, 3153,
2470 3145, 86, 3157, 86, 3156, 3146, 3158, 3150, 86, 3159,
2471 86, 3252, 3160, 3149, 86, 3163, 86, 3164, 3152, 3161,
2472 86, 3155, 3162, 86, 3165, 86, 3153, 3168, 3166, 3157,
2473 86, 3156, 3252, 86, 86, 3169, 3167, 86, 86, 3160,
2474 86, 86, 3163, 86, 86, 3170, 3161, 3171, 3172, 3162,
2475 3173, 86, 86, 3174, 3168, 3166, 86, 3175, 86, 3176,
2476
2477 3177, 3178, 3169, 3167, 86, 86, 3179, 86, 3181, 86,
2478 3180, 3182, 3170, 86, 3171, 3172, 86, 3173, 3183, 86,
2479 3174, 86, 86, 3184, 3175, 3185, 3176, 3177, 86, 3252,
2480 3190, 3186, 3187, 3179, 3188, 3181, 3189, 3180, 86, 3191,
2481 86, 3193, 3192, 3252, 86, 3183, 3199, 3194, 3252, 3195,
2482 3252, 86, 3185, 86, 86, 86, 86, 86, 3186, 3187,
2483 3196, 3188, 86, 3189, 86, 3197, 86, 3198, 86, 3192,
2484 86, 3200, 3201, 86, 3194, 86, 3195, 3202, 86, 86,
2485 86, 3203, 3204, 3206, 3211, 3205, 86, 3196, 3207, 3208,
2486 3252, 3210, 3197, 3209, 3198, 3214, 86, 86, 3200, 3201,
2487
2488 86, 3213, 86, 86, 3202, 86, 86, 86, 86, 3204,
2489 3206, 3211, 3205, 3212, 3218, 3207, 3208, 86, 3210, 3216,
2490 3209, 86, 3214, 3215, 3252, 3217, 3220, 86, 3213, 3219,
2491 3221, 86, 3222, 3223, 86, 3224, 86, 3252, 3230, 3227,
2492 3212, 3218, 3252, 3225, 3226, 86, 3216, 86, 3252, 86,
2493 3215, 86, 3217, 3220, 86, 3228, 3219, 86, 86, 3222,
2494 3223, 3229, 86, 86, 86, 86, 3227, 3231, 3232, 86,
2495 3225, 3226, 3234, 3235, 3233, 86, 3236, 86, 3237, 3238,
2496 86, 86, 3228, 3239, 3252, 3240, 3241, 86, 3229, 3242,
2497 86, 86, 3243, 3244, 3231, 3232, 86, 3245, 3250, 3234,
2498
2499 3235, 3233, 86, 3236, 3246, 86, 3238, 3247, 3251, 86,
2500 3239, 86, 3240, 86, 3248, 3249, 3242, 86, 3252, 86,
2501 86, 3252, 86, 86, 3245, 86, 86, 3252, 3252, 86,
2502 3252, 3246, 3252, 3252, 3247, 86, 3252, 3252, 3252, 3252,
2503 3252, 3248, 3249, 47, 47, 47, 47, 47, 47, 47,
2504 52, 52, 52, 52, 52, 52, 52, 57, 57, 57,
2505 57, 57, 57, 57, 63, 63, 63, 63, 63, 63,
2506 63, 68, 68, 68, 68, 68, 68, 68, 74, 74,
2507 74, 74, 74, 74, 74, 80, 80, 80, 80, 80,
2508 80, 80, 89, 89, 3252, 89, 89, 89, 89, 158,
2509
2510 158, 3252, 3252, 3252, 158, 158, 160, 160, 3252, 3252,
2511 160, 3252, 160, 162, 3252, 3252, 3252, 3252, 3252, 162,
2512 165, 165, 3252, 3252, 3252, 165, 165, 167, 3252, 3252,
2513 3252, 3252, 3252, 167, 169, 169, 3252, 169, 169, 169,
2514 169, 172, 3252, 3252, 3252, 3252, 3252, 172, 175, 175,
2515 3252, 3252, 3252, 175, 175, 90, 90, 3252, 90, 90,
2516 90, 90, 17, 3252, 3252, 3252, 3252, 3252, 3252, 3252,
2517 3252, 3252, 3252, 3252, 3252, 3252, 3252, 3252, 3252, 3252,
2518 3252, 3252, 3252, 3252, 3252, 3252, 3252, 3252, 3252, 3252,
2519 3252, 3252, 3252, 3252, 3252, 3252, 3252, 3252, 3252, 3252,
2520
2521 3252, 3252, 3252, 3252, 3252, 3252, 3252, 3252, 3252, 3252,
2522 3252, 3252, 3252, 3252, 3252, 3252, 3252, 3252, 3252, 3252,
2523 3252, 3252, 3252, 3252, 3252, 3252, 3252, 3252, 3252
1656 493, 86, 494, 86, 3291, 86, 513, 500, 86, 585,
1657 514, 491, 511, 501, 86, 515, 528, 502, 86, 499,
1658 526, 529, 86, 510, 492, 503, 3291, 493, 86, 494,
1659 512, 86, 86, 513, 500, 516, 86, 514, 532, 511,
1660 501, 86, 515, 518, 502, 527, 86, 526, 86, 533,
1661 3291, 517, 503, 504, 590, 505, 86, 512, 531, 86,
1662 530, 86, 516, 86, 168, 532, 534, 538, 506, 535,
1663 518, 507, 527, 508, 86, 509, 533, 86, 517, 86,
1664 504, 86, 505, 3291, 86, 531, 86, 530, 3291, 3291,
1665 540, 537, 86, 534, 538, 506, 535, 539, 507, 541,
1666
1667 508, 3291, 509, 519, 520, 542, 3291, 544, 3291, 546,
1668 86, 547, 545, 521, 86, 522, 523, 524, 537, 86,
1669 525, 86, 86, 543, 539, 548, 541, 86, 86, 550,
1670 519, 520, 542, 86, 544, 557, 546, 86, 547, 545,
1671 521, 551, 522, 523, 524, 552, 553, 525, 86, 555,
1672 543, 86, 548, 556, 560, 86, 550, 86, 561, 86,
1673 86, 86, 557, 562, 86, 558, 559, 3291, 551, 86,
1674 563, 564, 552, 553, 86, 3291, 555, 565, 566, 572,
1675 556, 560, 3291, 86, 568, 561, 569, 86, 571, 574,
1676 562, 573, 3291, 3291, 86, 567, 86, 563, 564, 575,
1677
1678 86, 570, 86, 86, 565, 566, 572, 86, 86, 86,
1679 576, 568, 586, 569, 86, 571, 574, 588, 573, 587,
1680 577, 591, 567, 86, 589, 594, 575, 86, 570, 592,
1681 86, 578, 593, 579, 603, 595, 596, 576, 86, 586,
1682 86, 86, 86, 86, 588, 597, 587, 577, 591, 86,
1683 86, 589, 594, 598, 599, 86, 592, 86, 578, 593,
1684 579, 580, 595, 596, 600, 601, 86, 86, 602, 581,
1685 582, 86, 597, 583, 584, 604, 606, 605, 3291, 86,
1686 598, 86, 86, 86, 607, 608, 86, 3291, 580, 86,
1687 613, 600, 601, 611, 86, 602, 581, 582, 86, 86,
1688
1689 583, 584, 604, 606, 605, 609, 86, 86, 86, 612,
1690 614, 607, 608, 610, 615, 3291, 86, 613, 617, 616,
1691 611, 618, 619, 620, 625, 86, 621, 3291, 623, 86,
1692 622, 86, 609, 86, 3291, 86, 612, 614, 86, 634,
1693 610, 615, 86, 86, 86, 617, 616, 86, 618, 619,
1694 620, 625, 86, 621, 86, 623, 624, 622, 626, 627,
1695 628, 629, 86, 630, 631, 632, 86, 633, 636, 3291,
1696 86, 86, 86, 86, 637, 86, 86, 635, 641, 639,
1697 86, 643, 640, 624, 638, 626, 627, 628, 629, 644,
1698 630, 631, 632, 86, 633, 86, 86, 86, 86, 642,
1699
1700 86, 637, 86, 645, 635, 641, 639, 646, 643, 640,
1701 86, 638, 86, 647, 649, 650, 653, 651, 3291, 652,
1702 655, 86, 86, 3291, 3291, 86, 642, 86, 654, 656,
1703 645, 86, 86, 715, 646, 670, 648, 86, 657, 86,
1704 658, 649, 650, 653, 651, 86, 652, 655, 86, 86,
1705 86, 86, 659, 3291, 668, 654, 656, 669, 86, 672,
1706 86, 86, 670, 648, 671, 657, 86, 658, 3291, 86,
1707 86, 3291, 86, 673, 3291, 677, 680, 676, 3291, 659,
1708 660, 668, 3291, 3291, 669, 661, 672, 662, 674, 86,
1709 3291, 671, 675, 663, 86, 664, 86, 86, 665, 666,
1710
1711 673, 681, 677, 680, 676, 667, 86, 660, 688, 683,
1712 86, 682, 661, 678, 662, 674, 679, 684, 685, 675,
1713 663, 86, 664, 686, 86, 665, 666, 86, 86, 689,
1714 687, 86, 667, 86, 86, 688, 683, 86, 682, 690,
1715 678, 691, 86, 679, 684, 685, 692, 693, 696, 695,
1716 686, 697, 694, 86, 86, 698, 689, 687, 3291, 86,
1717 86, 86, 701, 86, 700, 86, 690, 702, 691, 86,
1718 86, 699, 703, 692, 693, 696, 695, 716, 697, 694,
1719 86, 704, 698, 86, 706, 86, 709, 705, 707, 701,
1720 168, 700, 86, 708, 702, 86, 86, 712, 699, 86,
1721
1722 710, 86, 711, 713, 86, 86, 86, 714, 704, 86,
1723 717, 706, 718, 709, 705, 707, 86, 3291, 719, 720,
1724 708, 732, 86, 86, 712, 86, 86, 710, 721, 711,
1725 713, 723, 724, 86, 714, 722, 3291, 717, 733, 728,
1726 731, 86, 725, 86, 86, 719, 720, 86, 86, 726,
1727 86, 734, 727, 86, 86, 721, 86, 735, 723, 724,
1728 86, 736, 722, 729, 737, 86, 728, 731, 730, 725,
1729 738, 740, 741, 742, 744, 739, 726, 86, 3291, 727,
1730 3291, 743, 86, 86, 86, 745, 746, 86, 86, 747,
1731 748, 751, 750, 3291, 86, 86, 86, 86, 740, 741,
1732
1733 742, 744, 86, 86, 86, 752, 749, 754, 743, 753,
1734 86, 86, 745, 746, 86, 86, 747, 748, 86, 750,
1735 756, 758, 755, 86, 762, 757, 3291, 86, 86, 86,
1736 760, 759, 752, 749, 754, 86, 753, 86, 761, 763,
1737 3291, 86, 764, 3291, 770, 86, 86, 756, 758, 755,
1738 773, 777, 757, 86, 765, 86, 86, 760, 759, 766,
1739 774, 86, 767, 768, 769, 761, 763, 771, 772, 764,
1740 86, 770, 86, 86, 779, 775, 86, 773, 86, 86,
1741 776, 765, 86, 86, 782, 778, 766, 774, 86, 767,
1742 768, 769, 86, 780, 771, 772, 784, 783, 86, 785,
1743
1744 786, 779, 775, 86, 791, 787, 86, 776, 788, 86,
1745 86, 782, 778, 797, 789, 781, 86, 798, 86, 3291,
1746 780, 86, 86, 784, 783, 86, 785, 786, 792, 794,
1747 790, 86, 787, 795, 796, 788, 86, 86, 86, 793,
1748 86, 789, 781, 799, 798, 86, 86, 86, 802, 86,
1749 804, 86, 800, 801, 806, 792, 794, 790, 803, 86,
1750 795, 796, 807, 805, 808, 3291, 793, 86, 809, 812,
1751 799, 810, 86, 86, 813, 802, 86, 804, 811, 814,
1752 86, 86, 819, 815, 86, 803, 86, 828, 3291, 807,
1753 805, 820, 86, 86, 816, 809, 86, 86, 810, 86,
1754
1755 86, 86, 821, 822, 823, 811, 814, 824, 817, 818,
1756 815, 86, 825, 826, 86, 834, 86, 86, 820, 86,
1757 86, 816, 830, 829, 3291, 86, 833, 3291, 827, 821,
1758 822, 823, 86, 86, 824, 817, 818, 86, 86, 825,
1759 826, 831, 834, 835, 86, 843, 832, 837, 836, 830,
1760 829, 838, 86, 833, 839, 827, 86, 840, 842, 841,
1761 86, 845, 3291, 86, 844, 86, 86, 86, 86, 852,
1762 835, 846, 86, 86, 837, 836, 3291, 86, 838, 86,
1763 847, 839, 851, 86, 840, 842, 841, 86, 845, 849,
1764 848, 844, 86, 850, 86, 854, 855, 86, 846, 86,
1765
1766 853, 86, 857, 856, 86, 858, 865, 847, 86, 851,
1767 86, 86, 860, 86, 86, 859, 849, 848, 864, 86,
1768 850, 86, 854, 855, 866, 86, 86, 853, 863, 857,
1769 856, 867, 858, 865, 861, 862, 86, 870, 869, 860,
1770 86, 872, 859, 86, 868, 864, 86, 871, 873, 3291,
1771 86, 866, 875, 86, 86, 863, 876, 86, 867, 86,
1772 86, 861, 862, 86, 870, 869, 86, 877, 872, 874,
1773 878, 868, 881, 879, 871, 873, 86, 86, 882, 875,
1774 880, 86, 3291, 876, 888, 883, 885, 887, 884, 86,
1775 86, 886, 3291, 889, 877, 86, 874, 878, 86, 881,
1776
1777 879, 86, 86, 86, 86, 882, 86, 880, 86, 168,
1778 890, 888, 883, 885, 887, 884, 86, 891, 886, 892,
1779 889, 893, 894, 86, 895, 898, 3291, 3291, 86, 902,
1780 896, 86, 899, 901, 86, 86, 903, 890, 897, 904,
1781 900, 86, 908, 86, 891, 906, 892, 86, 893, 894,
1782 909, 86, 86, 905, 86, 907, 86, 896, 86, 899,
1783 901, 86, 86, 903, 86, 897, 904, 900, 86, 86,
1784 910, 912, 906, 86, 86, 911, 913, 909, 922, 921,
1785 905, 923, 907, 86, 86, 927, 3291, 3291, 86, 924,
1786 86, 86, 925, 935, 3291, 3291, 86, 910, 912, 86,
1787
1788 926, 3291, 911, 913, 914, 922, 921, 915, 923, 928,
1789 86, 916, 927, 86, 917, 933, 924, 929, 86, 925,
1790 930, 918, 919, 931, 920, 86, 932, 926, 86, 86,
1791 934, 914, 86, 943, 915, 86, 928, 86, 916, 86,
1792 946, 917, 933, 86, 929, 945, 86, 930, 918, 919,
1793 931, 920, 950, 932, 86, 86, 944, 934, 936, 937,
1794 943, 938, 86, 86, 939, 947, 948, 946, 86, 940,
1795 951, 953, 945, 86, 86, 941, 942, 954, 86, 950,
1796 957, 3291, 949, 944, 86, 936, 937, 952, 938, 86,
1797 955, 939, 947, 948, 958, 956, 940, 951, 953, 86,
1798
1799 86, 86, 941, 942, 954, 959, 960, 957, 961, 949,
1800 3291, 3291, 963, 965, 952, 962, 964, 86, 970, 966,
1801 86, 958, 86, 968, 969, 86, 967, 3291, 86, 980,
1802 972, 86, 959, 960, 86, 961, 86, 86, 86, 963,
1803 86, 86, 962, 964, 86, 970, 966, 86, 971, 86,
1804 968, 969, 973, 967, 974, 975, 86, 972, 976, 978,
1805 977, 86, 979, 982, 986, 3291, 86, 86, 86, 86,
1806 981, 983, 985, 987, 86, 971, 984, 989, 86, 973,
1807 988, 974, 975, 991, 86, 976, 978, 977, 990, 979,
1808 86, 993, 86, 994, 86, 992, 86, 981, 995, 985,
1809
1810 1000, 3291, 86, 86, 86, 86, 998, 988, 997, 86,
1811 991, 1001, 86, 999, 86, 990, 1003, 86, 86, 996,
1812 86, 86, 992, 1002, 1004, 995, 86, 86, 86, 86,
1813 86, 1005, 3291, 998, 1006, 997, 1007, 1009, 1001, 86,
1814 999, 1008, 86, 86, 86, 1011, 996, 1010, 1012, 1013,
1815 1002, 1014, 86, 86, 86, 1015, 86, 1016, 1005, 86,
1816 1019, 1006, 86, 1007, 1009, 86, 3291, 1020, 1008, 86,
1817 86, 86, 1011, 86, 1010, 1012, 1013, 1022, 1014, 86,
1818 1017, 1021, 1015, 1027, 1016, 1018, 86, 1019, 1023, 86,
1819 1024, 86, 3291, 1026, 1020, 86, 1028, 1029, 1025, 1030,
1820
1821 1031, 3291, 86, 3291, 1022, 86, 1032, 86, 1021, 1037,
1822 86, 1033, 86, 86, 86, 1023, 86, 1024, 86, 86,
1823 1026, 1034, 1035, 1028, 1029, 1025, 1030, 1031, 86, 1039,
1824 1036, 1040, 86, 1032, 86, 1038, 1037, 86, 1033, 1042,
1825 86, 1041, 1043, 1045, 86, 1044, 3291, 1046, 1034, 1035,
1826 86, 1047, 1048, 1050, 86, 1057, 1039, 1036, 86, 86,
1827 86, 1058, 1038, 86, 86, 1052, 1042, 1060, 1041, 1043,
1828 1045, 86, 1044, 86, 1046, 1049, 1051, 1063, 1047, 86,
1829 1050, 1053, 86, 86, 86, 1054, 1055, 86, 86, 1056,
1830 86, 1059, 1052, 86, 86, 1064, 86, 1061, 1062, 86,
1831
1832 1072, 1069, 1049, 1051, 86, 86, 1065, 1066, 1053, 86,
1833 86, 1067, 1054, 1055, 1070, 86, 1056, 1071, 1059, 1068,
1834 86, 1073, 1074, 86, 1061, 1062, 86, 86, 1069, 86,
1835 1076, 86, 86, 1065, 1066, 3291, 1075, 1078, 1067, 1080,
1836 1077, 1070, 1079, 86, 1071, 86, 1068, 86, 1073, 1074,
1837 86, 86, 1081, 1083, 1084, 3291, 1085, 1082, 1128, 3291,
1838 3291, 86, 86, 1075, 86, 86, 1080, 1077, 1086, 1079,
1839 1088, 1087, 1090, 86, 1092, 86, 1091, 86, 86, 1089,
1840 1083, 1084, 86, 1085, 168, 1094, 1093, 86, 86, 86,
1841 86, 86, 86, 86, 1102, 1086, 1103, 1088, 1087, 1090,
1842
1843 3291, 1092, 1101, 1091, 1104, 3291, 1089, 1105, 86, 86,
1844 1106, 3291, 1094, 1093, 1095, 3291, 1096, 86, 1107, 3291,
1845 1097, 1102, 1098, 1103, 1109, 3291, 1108, 1099, 86, 1101,
1846 86, 86, 1100, 86, 1105, 1110, 3291, 1106, 86, 86,
1847 1113, 1095, 1125, 1096, 1114, 1107, 86, 1097, 86, 1098,
1848 1111, 1109, 1115, 1108, 1099, 1112, 1117, 86, 86, 1100,
1849 86, 1120, 1110, 1118, 1116, 1121, 1129, 1113, 86, 1125,
1850 1130, 1114, 1123, 1119, 1126, 86, 86, 1132, 86, 1115,
1851 1122, 1124, 86, 1117, 1127, 86, 1160, 86, 1120, 1154,
1852 1118, 1116, 1121, 86, 86, 86, 1134, 86, 86, 1123,
1853
1854 1119, 1126, 1143, 1135, 86, 1133, 86, 1122, 1124, 86,
1855 86, 1127, 86, 86, 1144, 1145, 1146, 86, 1147, 3291,
1856 1149, 86, 1150, 1134, 3291, 3291, 1148, 3291, 86, 1143,
1857 1135, 86, 1133, 1136, 3291, 86, 86, 3291, 1137, 86,
1858 1138, 1144, 1145, 1146, 86, 1147, 1139, 1149, 86, 1150,
1859 1153, 1140, 1141, 1148, 1151, 1152, 1156, 1157, 1142, 86,
1860 1136, 86, 86, 86, 1155, 1137, 86, 1138, 1163, 1158,
1861 3291, 86, 1161, 1139, 1164, 1168, 1167, 1153, 1140, 1141,
1862 86, 1151, 1152, 1156, 1157, 1142, 86, 1162, 1159, 1166,
1863 86, 1155, 3291, 1174, 86, 86, 1158, 86, 86, 1161,
1864
1865 86, 1164, 1165, 1167, 1169, 1170, 1171, 86, 1173, 1172,
1866 86, 86, 1175, 86, 1162, 1159, 1166, 3291, 1177, 86,
1867 1176, 3291, 1186, 1199, 86, 86, 86, 86, 86, 1165,
1868 86, 1169, 1170, 1171, 1178, 1173, 1172, 1179, 1181, 1175,
1869 86, 86, 1180, 1188, 1182, 1177, 1184, 1176, 1183, 86,
1870 86, 1190, 1187, 86, 86, 86, 86, 3291, 1185, 86,
1871 1193, 1178, 86, 86, 1179, 1181, 86, 86, 86, 1180,
1872 1188, 1182, 86, 1184, 1189, 1183, 1191, 1192, 1190, 1187,
1873 1194, 86, 1197, 1195, 1196, 1185, 86, 1193, 1198, 86,
1874 1202, 1208, 3291, 1206, 1200, 1203, 1213, 3291, 86, 1215,
1875
1876 86, 1189, 86, 1191, 1192, 86, 86, 1194, 86, 1197,
1877 1195, 1196, 1201, 1207, 86, 1198, 1204, 86, 1208, 1205,
1878 1206, 1200, 86, 86, 1209, 1210, 86, 1211, 86, 1214,
1879 3291, 86, 1212, 1216, 86, 86, 86, 1218, 1219, 1201,
1880 1207, 86, 86, 1204, 86, 86, 1205, 1217, 1221, 1220,
1881 86, 1209, 1210, 3291, 1211, 86, 1214, 1222, 1224, 1212,
1882 1216, 1223, 86, 1226, 1218, 1219, 1227, 1225, 1230, 86,
1883 86, 1228, 86, 3291, 1217, 1221, 1220, 1231, 86, 86,
1884 86, 1229, 86, 1232, 1222, 1224, 1233, 86, 1223, 86,
1885 1226, 1234, 1239, 1227, 1225, 86, 1235, 1236, 1228, 1237,
1886
1887 86, 86, 86, 1240, 86, 1238, 86, 86, 1229, 1241,
1888 1232, 1242, 86, 1233, 1246, 86, 86, 86, 1234, 1239,
1889 1243, 1249, 86, 1235, 1236, 1247, 1237, 1244, 1245, 1248,
1890 1240, 1251, 1238, 1252, 86, 1250, 86, 1256, 3291, 1254,
1891 3291, 86, 86, 86, 1257, 1253, 86, 1243, 86, 86,
1892 86, 86, 1247, 86, 1244, 1245, 1248, 86, 86, 1255,
1893 1252, 86, 1250, 86, 1256, 1258, 1254, 86, 86, 1259,
1894 1260, 1257, 1253, 1261, 1262, 1263, 1264, 1265, 3291, 86,
1895 3291, 86, 86, 1266, 1267, 1268, 1255, 1270, 86, 86,
1896 1269, 86, 1258, 86, 1277, 1273, 1259, 1260, 3291, 3291,
1897
1898 1261, 1262, 86, 86, 1265, 86, 1272, 86, 86, 1282,
1899 1266, 86, 1268, 86, 1270, 86, 1274, 1269, 1275, 1276,
1900 86, 86, 1273, 1278, 86, 1279, 1281, 86, 1280, 1283,
1901 168, 86, 1284, 1272, 1286, 1285, 1282, 1287, 86, 3291,
1902 86, 86, 86, 1274, 1292, 1275, 1276, 86, 1289, 1288,
1903 1278, 1291, 1279, 1281, 1290, 1280, 1283, 86, 1294, 86,
1904 86, 1293, 1285, 1297, 1296, 1295, 86, 3291, 1356, 86,
1905 86, 1292, 86, 86, 86, 1289, 1288, 86, 1291, 86,
1906 86, 1290, 1298, 86, 1300, 1294, 1301, 1299, 1293, 1302,
1907 1297, 1296, 1295, 1303, 86, 86, 1304, 1305, 86, 86,
1908
1909 86, 1313, 3291, 1310, 86, 86, 3291, 1311, 1315, 1298,
1910 3291, 86, 3291, 1301, 1299, 1312, 1302, 86, 1306, 1314,
1911 1303, 86, 3291, 1304, 1305, 1316, 86, 1307, 86, 1308,
1912 1310, 1320, 1309, 86, 1311, 1315, 1317, 86, 1318, 86,
1913 86, 3291, 1312, 1319, 86, 1306, 1314, 86, 3291, 86,
1914 1323, 1322, 1316, 86, 1307, 1325, 1308, 1327, 1320, 1309,
1915 1321, 86, 1324, 1317, 1328, 1318, 86, 1332, 86, 3291,
1916 1319, 86, 86, 1326, 1329, 86, 1330, 1323, 1322, 1333,
1917 1331, 86, 1325, 86, 86, 3291, 86, 1321, 3291, 1324,
1918 86, 1328, 1334, 1335, 1332, 1337, 86, 86, 1339, 1338,
1919
1920 1326, 1329, 86, 1330, 86, 86, 1333, 1331, 1336, 1340,
1921 86, 86, 1344, 1341, 3291, 1345, 86, 1342, 86, 1334,
1922 1335, 86, 1337, 86, 86, 1339, 1338, 86, 1343, 1348,
1923 3291, 1346, 3291, 86, 1347, 1336, 1340, 86, 86, 1344,
1924 1341, 86, 1345, 1350, 1342, 1349, 1352, 86, 1351, 3291,
1925 1353, 86, 86, 1354, 86, 1343, 1348, 86, 1346, 1355,
1926 1359, 1347, 1357, 86, 1360, 86, 86, 1361, 1358, 1363,
1927 1350, 86, 1349, 1352, 86, 1351, 1362, 1353, 86, 86,
1928 1354, 86, 1366, 1364, 86, 1368, 1355, 1359, 1365, 1357,
1929 86, 1360, 1367, 1377, 1361, 1358, 1363, 1369, 86, 86,
1930
1931 1378, 3291, 1379, 1362, 1380, 86, 1383, 86, 3291, 1366,
1932 3291, 3291, 1368, 1381, 1384, 86, 1408, 1409, 86, 1367,
1933 1377, 1382, 1385, 86, 1369, 1370, 3291, 1378, 1386, 1371,
1934 86, 1380, 1372, 1373, 86, 86, 86, 1374, 86, 86,
1935 1381, 1384, 1388, 1375, 86, 86, 1391, 1376, 1382, 1385,
1936 1395, 86, 1370, 86, 86, 1386, 1371, 1387, 1393, 1372,
1937 1373, 3291, 3291, 86, 1374, 1389, 1392, 1390, 86, 1388,
1938 1375, 1394, 86, 1391, 1376, 86, 86, 1395, 86, 1397,
1939 1398, 1399, 1396, 1400, 1387, 1393, 3291, 3291, 86, 86,
1940 1407, 1401, 1389, 1392, 1390, 86, 3291, 3291, 1394, 3291,
1941
1942 1411, 3291, 1413, 1415, 1410, 86, 1397, 1414, 1416, 1396,
1943 1400, 86, 86, 86, 86, 1425, 86, 1407, 1401, 1402,
1944 86, 1412, 1417, 86, 1403, 86, 1404, 1411, 1405, 1413,
1945 1406, 1410, 1419, 86, 1414, 86, 1418, 86, 1421, 1420,
1946 86, 86, 1422, 3291, 1426, 1424, 1402, 86, 1412, 1417,
1947 86, 1403, 86, 1404, 86, 1405, 86, 1406, 86, 1419,
1948 1423, 1427, 1428, 1418, 1429, 1421, 1420, 1431, 86, 1422,
1949 86, 1426, 1424, 1432, 1433, 86, 86, 1430, 1435, 1437,
1950 86, 1434, 86, 1436, 1438, 86, 86, 1423, 1427, 1428,
1951 86, 1429, 1439, 1440, 1431, 86, 1442, 1443, 3291, 1441,
1952
1953 1432, 1433, 1445, 86, 1430, 86, 86, 86, 1434, 86,
1954 1436, 1438, 1446, 1447, 86, 86, 86, 1450, 1444, 1439,
1955 1440, 1448, 1449, 1442, 86, 86, 1441, 86, 86, 86,
1956 1451, 1452, 1454, 1455, 1453, 86, 3291, 86, 86, 1446,
1957 1447, 86, 1456, 1457, 86, 1444, 1460, 1458, 1448, 1449,
1958 1459, 86, 86, 1461, 86, 86, 1462, 1451, 1452, 1454,
1959 1455, 1453, 86, 1463, 1464, 1465, 86, 86, 86, 1456,
1960 1457, 86, 1466, 1460, 1458, 1467, 1468, 1459, 86, 1469,
1961 1461, 1472, 86, 1462, 1470, 1473, 86, 1471, 86, 86,
1962 1463, 1464, 1465, 1474, 86, 86, 1475, 1476, 86, 1466,
1963
1964 1479, 86, 1467, 1468, 1477, 86, 1469, 86, 1472, 1480,
1965 1485, 1470, 1478, 1486, 1471, 1488, 86, 86, 86, 1481,
1966 86, 1482, 86, 1475, 3291, 86, 86, 1479, 1483, 86,
1967 1484, 1477, 1487, 168, 86, 86, 86, 1489, 3291, 1478,
1968 3291, 1494, 86, 1490, 1491, 86, 1481, 86, 1482, 1492,
1969 86, 86, 1493, 86, 86, 1483, 86, 1484, 1496, 1487,
1970 1495, 1498, 1501, 86, 1489, 1497, 1499, 86, 1494, 86,
1971 1490, 1491, 86, 1500, 1502, 86, 1492, 1503, 86, 1493,
1972 1508, 1505, 1504, 1509, 86, 1496, 1506, 1495, 1498, 86,
1973 86, 3291, 1497, 1499, 1507, 86, 1511, 1519, 86, 86,
1974
1975 1500, 1502, 86, 86, 1503, 1510, 3291, 1508, 86, 1504,
1976 1509, 1514, 1512, 86, 1515, 1513, 1516, 3291, 86, 1517,
1977 1521, 1507, 1518, 1511, 86, 1520, 1522, 1525, 86, 86,
1978 3291, 1523, 1510, 86, 86, 86, 86, 1524, 1514, 1512,
1979 1527, 1515, 1513, 1516, 86, 86, 1517, 1521, 86, 1518,
1980 1526, 1528, 1520, 1530, 1525, 1540, 1529, 1531, 86, 86,
1981 86, 1532, 86, 1533, 1524, 86, 1534, 1527, 86, 1536,
1982 3291, 1537, 1535, 86, 1544, 86, 86, 1526, 1528, 86,
1983 1530, 86, 1538, 1529, 1531, 1541, 86, 86, 1532, 1539,
1984 1533, 86, 1543, 1534, 86, 86, 1536, 86, 1537, 1535,
1985
1986 86, 1544, 1542, 1545, 1547, 86, 1546, 1548, 3291, 1538,
1987 86, 1550, 1541, 1549, 86, 86, 1539, 1552, 1551, 1543,
1988 86, 1554, 1557, 1558, 1556, 1553, 86, 86, 3291, 1542,
1989 1545, 1547, 1565, 1546, 1548, 86, 86, 86, 1550, 86,
1990 1549, 1560, 1555, 86, 1552, 1551, 1559, 1566, 1554, 86,
1991 86, 1556, 1553, 1561, 86, 86, 1562, 1563, 1567, 86,
1992 1564, 3291, 1568, 86, 86, 1569, 1570, 86, 86, 1555,
1993 1574, 1571, 1573, 1559, 86, 1578, 3291, 1572, 3291, 86,
1994 1561, 86, 86, 1562, 1563, 86, 1577, 1564, 86, 1568,
1995 86, 86, 1569, 86, 86, 86, 1575, 1574, 1571, 1573,
1996
1997 1576, 86, 1578, 1579, 1572, 1580, 86, 1581, 1582, 86,
1998 86, 1583, 86, 1577, 1589, 1584, 1597, 1586, 1588, 86,
1999 1585, 86, 1587, 1575, 86, 86, 1592, 1576, 1590, 86,
2000 1579, 1591, 1580, 1600, 1581, 1582, 86, 1593, 1583, 86,
2001 86, 1589, 1594, 1596, 86, 1588, 1598, 86, 86, 86,
2002 86, 1602, 86, 1592, 1595, 1590, 1599, 86, 1591, 86,
2003 1603, 86, 1611, 1601, 1593, 86, 1604, 1605, 86, 1594,
2004 1596, 86, 86, 1598, 86, 86, 1606, 1607, 1602, 1610,
2005 1609, 1595, 1608, 1599, 86, 86, 86, 1612, 86, 1611,
2006 1601, 86, 86, 1604, 1605, 86, 1614, 1613, 1615, 1616,
2007
2008 1619, 3291, 1618, 1606, 1607, 1617, 1610, 1609, 1620, 1608,
2009 1624, 86, 86, 1621, 1612, 3291, 86, 1622, 86, 86,
2010 1625, 86, 86, 86, 1613, 86, 1616, 1619, 86, 1618,
2011 1623, 1626, 1617, 1629, 1627, 1620, 1631, 1624, 86, 1628,
2012 1621, 86, 86, 86, 1622, 1630, 1635, 1625, 1633, 1634,
2013 86, 1632, 1637, 1640, 1636, 1638, 1641, 1623, 1626, 86,
2014 86, 1627, 86, 86, 86, 1642, 1628, 86, 86, 86,
2015 1645, 86, 1630, 1635, 86, 1633, 1634, 86, 1632, 1637,
2016 1639, 1636, 1638, 86, 1643, 86, 1644, 86, 1646, 1648,
2017 86, 1647, 1642, 3291, 1650, 1649, 86, 1645, 86, 1651,
2018
2019 1653, 1652, 1654, 3291, 1656, 1655, 3291, 1639, 86, 86,
2020 86, 1643, 86, 1644, 1660, 3291, 86, 1662, 1647, 86,
2021 86, 86, 1649, 86, 86, 1657, 1651, 1653, 1652, 1654,
2022 86, 1656, 1655, 1658, 1659, 1661, 86, 86, 1663, 86,
2023 1664, 1660, 86, 86, 1662, 1665, 1669, 1667, 86, 86,
2024 1668, 1666, 1657, 86, 86, 1670, 86, 86, 1671, 86,
2025 1658, 1659, 1661, 1672, 86, 1663, 1673, 1664, 1674, 3291,
2026 1676, 1678, 1665, 1669, 1667, 86, 86, 1668, 1666, 1675,
2027 86, 1679, 1670, 1677, 1680, 1671, 86, 86, 86, 3291,
2028 1672, 86, 86, 86, 1681, 1674, 86, 1676, 1678, 1682,
2029
2030 1684, 1683, 1685, 1689, 86, 86, 1675, 1688, 1679, 86,
2031 1677, 1680, 168, 1690, 1691, 86, 86, 1686, 1687, 1694,
2032 86, 1681, 3291, 3291, 1692, 86, 86, 1684, 1683, 1685,
2033 1689, 86, 1695, 1696, 1688, 1693, 86, 1700, 1698, 86,
2034 1690, 1691, 86, 3291, 1686, 1687, 86, 1697, 1699, 1701,
2035 86, 1692, 1702, 1703, 86, 86, 86, 3291, 1704, 1695,
2036 1696, 1706, 1693, 86, 1705, 1698, 86, 1707, 1708, 86,
2037 86, 86, 86, 1709, 1697, 1699, 1701, 1710, 1712, 1711,
2038 1703, 1713, 86, 1714, 86, 86, 1715, 86, 1706, 86,
2039 1718, 1705, 86, 86, 1707, 1708, 1726, 86, 1723, 86,
2040
2041 1709, 1717, 1716, 86, 1710, 1712, 1711, 86, 1713, 1722,
2042 1714, 86, 86, 1715, 86, 1719, 86, 1718, 1720, 1724,
2043 86, 1730, 1727, 1726, 1728, 1723, 86, 1731, 1717, 1716,
2044 1721, 1729, 1732, 1736, 1733, 1725, 3291, 3291, 1743, 86,
2045 1734, 86, 1719, 86, 86, 1720, 1724, 1735, 86, 1727,
2046 1737, 1728, 1742, 1744, 1738, 86, 86, 1721, 1729, 86,
2047 1739, 1733, 1725, 1740, 86, 86, 86, 1734, 86, 86,
2048 86, 86, 86, 86, 1735, 1741, 86, 1737, 1745, 1742,
2049 1746, 1738, 86, 1749, 1747, 86, 1748, 1739, 86, 1751,
2050 1740, 1754, 1750, 1755, 1752, 3291, 1753, 3291, 86, 3291,
2051
2052 86, 86, 1741, 86, 86, 1745, 86, 1759, 86, 1756,
2053 86, 1747, 86, 1748, 86, 1757, 1751, 1762, 1754, 1750,
2054 1755, 1752, 86, 1753, 86, 1758, 1760, 86, 1763, 1761,
2055 86, 1764, 86, 1765, 1759, 1771, 1756, 86, 3291, 1766,
2056 1768, 1769, 1757, 86, 1762, 86, 86, 86, 1767, 3291,
2057 1773, 86, 1758, 1760, 86, 1763, 1761, 1770, 1764, 86,
2058 1775, 1774, 86, 86, 1772, 86, 1766, 1768, 1769, 1776,
2059 1777, 86, 86, 1781, 1780, 1767, 86, 1773, 1782, 1778,
2060 1779, 86, 86, 86, 1770, 86, 86, 1775, 1774, 86,
2061 1783, 1772, 86, 1784, 1789, 1790, 1776, 1777, 86, 1785,
2062
2063 1781, 1780, 1791, 1795, 1786, 1782, 1778, 1779, 86, 1787,
2064 86, 1788, 1792, 86, 1793, 3291, 86, 1783, 86, 1794,
2065 1784, 1789, 86, 86, 1797, 1798, 1785, 86, 1796, 86,
2066 86, 1786, 86, 1801, 1799, 1802, 1787, 1800, 1788, 1792,
2067 1803, 1793, 86, 86, 86, 86, 1794, 86, 86, 1808,
2068 1806, 1797, 1798, 86, 1804, 1796, 86, 1805, 1807, 1809,
2069 1801, 1799, 1802, 3291, 1800, 1810, 86, 1803, 86, 1811,
2070 1812, 1813, 86, 1814, 3291, 1817, 86, 1806, 86, 86,
2071 1816, 1804, 86, 86, 1805, 1815, 1809, 86, 86, 86,
2072 86, 1819, 1810, 1818, 1820, 1825, 1811, 1812, 1813, 1821,
2073
2074 1814, 86, 1817, 3291, 86, 1823, 1826, 1816, 1824, 86,
2075 1828, 3291, 1815, 1822, 1831, 86, 86, 86, 1819, 86,
2076 1818, 1820, 1825, 86, 1827, 86, 1821, 86, 1834, 1829,
2077 86, 1832, 1823, 1826, 1830, 1824, 1835, 1828, 1836, 1833,
2078 1822, 1831, 1837, 86, 86, 1838, 1840, 86, 1839, 1842,
2079 86, 1827, 1841, 1844, 1843, 1834, 86, 1845, 1832, 1848,
2080 3291, 86, 3291, 1849, 3291, 1836, 1833, 86, 86, 86,
2081 86, 86, 1858, 86, 1846, 1839, 1842, 86, 86, 1841,
2082 1847, 1843, 86, 1852, 1845, 86, 1850, 1851, 1853, 1854,
2083 1849, 86, 1856, 1859, 86, 86, 1857, 1855, 86, 86,
2084
2085 1860, 1846, 86, 86, 1861, 86, 86, 1847, 1862, 86,
2086 1852, 86, 1863, 1850, 1851, 1853, 1854, 1865, 1864, 1856,
2087 1859, 1866, 86, 1857, 1855, 86, 86, 1867, 1868, 86,
2088 1869, 1873, 86, 1870, 1872, 1862, 86, 3291, 86, 86,
2089 1871, 1875, 86, 86, 1865, 1864, 1874, 1876, 1866, 1877,
2090 1878, 86, 1879, 86, 86, 1868, 1883, 1887, 86, 1880,
2091 1870, 1872, 86, 86, 86, 1881, 1882, 1871, 1875, 86,
2092 86, 86, 86, 1874, 1876, 1885, 1877, 1878, 86, 1879,
2093 168, 1884, 1890, 86, 86, 1888, 1880, 1886, 1891, 86,
2094 86, 1889, 1881, 1882, 1893, 86, 1892, 86, 86, 1894,
2095
2096 3291, 86, 1885, 86, 86, 1895, 1897, 1896, 1884, 1890,
2097 1898, 86, 1888, 1900, 1886, 1891, 86, 1899, 1889, 3291,
2098 86, 1893, 1903, 1892, 1901, 1902, 1904, 86, 3291, 1908,
2099 1905, 86, 1895, 1897, 1896, 1906, 86, 86, 3291, 1907,
2100 86, 86, 1909, 86, 1899, 86, 86, 86, 1912, 1910,
2101 1911, 1901, 1902, 86, 86, 1914, 1908, 1905, 86, 86,
2102 86, 1913, 1906, 86, 1915, 1917, 1907, 1920, 1916, 1909,
2103 86, 1918, 1925, 86, 86, 1912, 1910, 1911, 1921, 86,
2104 86, 1923, 1914, 86, 1919, 1922, 1926, 86, 1913, 86,
2105 1924, 1915, 1917, 3291, 1920, 1916, 1928, 1936, 1918, 86,
2106
2107 86, 1927, 86, 86, 86, 1921, 1929, 86, 1923, 1930,
2108 1932, 1919, 1922, 1935, 86, 1931, 1937, 1924, 86, 1933,
2109 86, 1934, 86, 1928, 86, 1939, 1943, 1938, 1927, 1940,
2110 1945, 1947, 86, 1929, 86, 86, 1930, 1932, 1941, 86,
2111 1935, 1942, 1931, 86, 86, 3291, 1933, 86, 1934, 1944,
2112 1946, 1948, 86, 86, 1938, 86, 1940, 1949, 1951, 1950,
2113 86, 86, 86, 86, 1952, 1941, 1953, 1955, 1942, 1956,
2114 1954, 1961, 86, 86, 86, 3291, 1944, 1946, 1948, 1958,
2115 1960, 86, 86, 1959, 1957, 1951, 1950, 3291, 1966, 86,
2116 86, 86, 86, 1953, 86, 86, 1956, 1954, 1962, 1963,
2117
2118 1964, 86, 86, 86, 1969, 1965, 1958, 1960, 1967, 86,
2119 1959, 1957, 1968, 86, 1970, 1966, 1973, 86, 1971, 86,
2120 1975, 86, 1974, 1972, 1976, 1962, 1963, 1964, 1978, 86,
2121 1977, 1980, 1965, 3291, 86, 1967, 86, 1979, 86, 1968,
2122 86, 1970, 86, 1973, 1982, 86, 1981, 1975, 1984, 1974,
2123 86, 1976, 86, 1983, 86, 86, 1985, 1977, 1980, 1987,
2124 86, 1986, 1988, 86, 1979, 1989, 86, 1990, 1991, 1992,
2125 86, 86, 86, 1981, 86, 1984, 1994, 1995, 1996, 1993,
2126 1983, 1998, 86, 1985, 1997, 86, 1987, 86, 1986, 86,
2127 86, 2006, 1989, 86, 86, 1991, 1992, 86, 1999, 2000,
2128
2129 2001, 86, 2002, 1994, 2004, 86, 1993, 2007, 1998, 86,
2130 2005, 1997, 2003, 86, 86, 86, 2008, 86, 86, 2009,
2131 2010, 2011, 2012, 86, 3291, 1999, 2000, 2001, 86, 2002,
2132 2015, 2004, 86, 2014, 2007, 2013, 86, 2005, 86, 2003,
2133 86, 2016, 2017, 2008, 86, 2018, 2019, 86, 86, 2012,
2134 2020, 86, 86, 86, 86, 2021, 86, 2015, 2022, 2025,
2135 2014, 2029, 2013, 3291, 2023, 2028, 86, 2024, 2016, 2017,
2136 86, 86, 2018, 2019, 2027, 2026, 86, 2020, 2030, 86,
2137 2034, 86, 86, 86, 2032, 2031, 2025, 86, 2029, 2033,
2138 86, 2023, 2028, 86, 2024, 2036, 86, 86, 2035, 2037,
2139
2140 2038, 2027, 2026, 86, 2039, 86, 2041, 2034, 2042, 2040,
2141 2044, 2032, 2031, 86, 86, 2043, 2033, 2045, 86, 86,
2142 86, 2048, 2036, 86, 2050, 2035, 86, 2038, 86, 2051,
2143 2054, 2039, 2052, 86, 2046, 2042, 2040, 2044, 2047, 86,
2144 2049, 86, 2043, 2053, 2045, 86, 86, 2057, 86, 2058,
2145 2059, 2050, 86, 86, 86, 2055, 86, 2054, 86, 2052,
2146 2056, 2046, 2062, 2060, 2063, 2047, 86, 2049, 2061, 2067,
2147 2053, 86, 2064, 86, 2057, 2065, 86, 86, 2066, 2071,
2148 2069, 86, 2055, 2068, 2072, 2070, 2073, 2056, 2074, 3291,
2149 3291, 86, 2075, 86, 86, 86, 86, 86, 86, 2064,
2150
2151 86, 86, 2065, 86, 2079, 2066, 2071, 2069, 2076, 2077,
2152 2068, 2081, 2070, 2073, 168, 2080, 86, 2078, 2082, 2075,
2153 86, 2083, 2084, 86, 86, 86, 86, 2085, 2087, 86,
2154 2086, 2079, 3291, 2088, 2089, 2076, 2077, 86, 2081, 86,
2155 2090, 2091, 2080, 2092, 2078, 86, 2093, 2096, 86, 2084,
2156 86, 86, 86, 2097, 86, 2087, 2094, 2086, 86, 86,
2157 2088, 2089, 86, 2095, 2098, 86, 2099, 2090, 2091, 86,
2158 2092, 86, 86, 2093, 2096, 2100, 2101, 2102, 86, 2103,
2159 86, 2104, 86, 2094, 2106, 2105, 86, 2107, 86, 2109,
2160 2095, 2098, 86, 2099, 86, 2108, 2110, 86, 2111, 86,
2161
2162 86, 3291, 2100, 2101, 86, 86, 2103, 2113, 2104, 2112,
2163 86, 2106, 2105, 2114, 2107, 2117, 86, 86, 86, 2116,
2164 86, 86, 2108, 2110, 2115, 2111, 2119, 2120, 86, 2121,
2165 2118, 2125, 2122, 86, 2113, 2124, 2112, 86, 86, 86,
2166 2114, 2123, 2117, 2126, 86, 86, 2116, 2131, 2129, 86,
2167 2127, 2115, 86, 2119, 2120, 2128, 2121, 2118, 86, 2122,
2168 86, 86, 2124, 86, 2132, 2130, 86, 86, 2123, 2133,
2169 2126, 2135, 2134, 3291, 86, 2129, 2137, 2127, 86, 86,
2170 2138, 2136, 2128, 2139, 2140, 2141, 2145, 86, 2143, 2142,
2171 3291, 2132, 2130, 86, 2144, 86, 2133, 86, 86, 2134,
2172
2173 86, 86, 2146, 86, 2148, 86, 86, 2138, 2136, 86,
2174 2139, 2140, 86, 2145, 2150, 2143, 2142, 86, 2147, 86,
2175 86, 2144, 2149, 2151, 86, 2156, 86, 2152, 86, 2146,
2176 2153, 2148, 86, 2158, 2154, 2157, 2159, 86, 86, 86,
2177 2162, 2150, 86, 2163, 2160, 2147, 2165, 2155, 86, 2149,
2178 2151, 2161, 2156, 86, 2152, 86, 2166, 2153, 86, 2164,
2179 2158, 2154, 2157, 86, 86, 86, 86, 2162, 86, 2168,
2180 2163, 2160, 2169, 2165, 2155, 2167, 2170, 2172, 2161, 2171,
2181 2174, 86, 2173, 2166, 86, 2175, 2164, 3291, 86, 2176,
2182 2178, 86, 86, 86, 86, 86, 2168, 86, 2177, 2169,
2183
2184 2179, 86, 2167, 2170, 2172, 86, 2171, 2174, 2180, 2173,
2185 2182, 86, 2175, 2181, 86, 2184, 2176, 86, 2186, 2183,
2186 2188, 2185, 2187, 2196, 86, 2177, 2189, 2179, 86, 3291,
2187 86, 2190, 86, 2192, 86, 2180, 2193, 2182, 86, 86,
2188 2181, 86, 2184, 2191, 86, 86, 2183, 2188, 2185, 2187,
2189 86, 2197, 2194, 2189, 2195, 86, 86, 2198, 2190, 2199,
2190 86, 86, 86, 2193, 86, 2202, 2200, 3291, 86, 2204,
2191 2191, 2205, 2203, 86, 2201, 3291, 2206, 2212, 2197, 2194,
2192 2207, 2195, 86, 86, 2198, 86, 2199, 86, 2211, 3291,
2193 2218, 2208, 86, 2200, 86, 86, 2204, 86, 2205, 2203,
2194
2195 86, 2201, 86, 2206, 2212, 2209, 2213, 2207, 2210, 2215,
2196 2216, 2214, 86, 86, 2217, 2211, 2220, 2218, 2208, 2221,
2197 2219, 2222, 2223, 86, 2224, 86, 86, 86, 2243, 86,
2198 86, 2225, 2209, 86, 2226, 2210, 2215, 2216, 86, 86,
2199 86, 2217, 86, 2220, 2227, 86, 2221, 2219, 2222, 86,
2200 2228, 2224, 2229, 2230, 2232, 86, 2231, 86, 2225, 3291,
2201 2233, 2226, 86, 86, 2237, 2235, 2234, 86, 86, 2238,
2202 2241, 2227, 86, 86, 2245, 2253, 86, 2228, 2236, 2229,
2203 2230, 2232, 86, 2231, 86, 86, 86, 2233, 2239, 2240,
2204 2242, 2237, 2235, 2234, 2244, 2246, 2238, 2241, 86, 3291,
2205
2206 86, 86, 2247, 86, 2248, 2236, 2249, 86, 86, 2250,
2207 2254, 2255, 86, 2251, 168, 2239, 2240, 2242, 2252, 2258,
2208 86, 2244, 2246, 2257, 2256, 86, 86, 2259, 3291, 2247,
2209 86, 2248, 2263, 2249, 2264, 86, 2250, 2262, 2255, 2266,
2210 2267, 2260, 86, 86, 3291, 86, 86, 2265, 86, 2268,
2211 2257, 2256, 2261, 86, 2259, 86, 2269, 2270, 2271, 86,
2212 86, 2264, 86, 2272, 2262, 2273, 2266, 2275, 2260, 2278,
2213 2274, 86, 86, 2277, 2265, 86, 2268, 86, 2283, 2261,
2214 86, 2281, 86, 2269, 86, 2271, 2276, 2280, 86, 86,
2215 86, 86, 2273, 86, 2275, 86, 2278, 2274, 2279, 86,
2216
2217 2277, 2282, 86, 86, 2284, 2283, 2287, 2285, 2281, 2288,
2218 86, 86, 2286, 2276, 2280, 2289, 2290, 86, 2291, 86,
2219 2293, 2292, 3291, 2296, 2295, 2279, 3291, 86, 2282, 86,
2220 86, 2284, 86, 86, 2285, 86, 2288, 86, 86, 2286,
2221 2298, 2294, 2289, 2290, 2297, 2291, 86, 2293, 2292, 86,
2222 2296, 2295, 2300, 86, 2299, 2301, 2303, 2302, 2304, 86,
2223 86, 86, 2306, 86, 2305, 2310, 86, 86, 2294, 2307,
2224 86, 2297, 2311, 86, 2308, 86, 2309, 86, 86, 2300,
2225 2312, 2299, 2301, 2303, 2302, 2304, 86, 2313, 2314, 2306,
2226 86, 2305, 2310, 86, 2315, 2316, 2307, 2319, 2317, 2311,
2227
2228 2320, 2308, 2318, 2309, 3291, 86, 2321, 2312, 2322, 86,
2229 86, 86, 2324, 2328, 86, 2314, 86, 2325, 86, 2329,
2230 2323, 2315, 2316, 86, 2319, 2317, 86, 86, 2330, 2318,
2231 3291, 86, 86, 2321, 2326, 86, 2331, 2327, 2332, 2324,
2232 86, 2333, 2334, 86, 2325, 86, 86, 2323, 86, 2335,
2233 86, 2336, 86, 2338, 2337, 2330, 2340, 86, 86, 2341,
2234 2342, 2326, 86, 2331, 2327, 2332, 2339, 2343, 2333, 2334,
2235 2344, 86, 2345, 2346, 2349, 86, 86, 2347, 86, 2350,
2236 86, 2337, 86, 86, 2348, 86, 2341, 2342, 2352, 2353,
2237 86, 86, 86, 2339, 86, 2351, 86, 86, 86, 2345,
2238
2239 2346, 2349, 2354, 86, 2347, 2358, 86, 2355, 3291, 2356,
2240 2359, 2348, 2361, 2360, 2362, 86, 2353, 2364, 86, 2363,
2241 86, 86, 2351, 86, 2357, 86, 86, 2366, 2367, 2354,
2242 2365, 86, 86, 3291, 2355, 86, 2356, 2359, 2369, 2361,
2243 2360, 86, 86, 2372, 2364, 2368, 2363, 2370, 2374, 2371,
2244 86, 2357, 2423, 86, 2366, 86, 2373, 2365, 2375, 86,
2245 86, 86, 2379, 86, 2376, 2369, 2378, 86, 86, 2377,
2246 86, 86, 2368, 86, 2370, 2374, 2371, 2380, 86, 86,
2247 2381, 2386, 2382, 2373, 2389, 2375, 2385, 3291, 86, 2379,
2248 2387, 2376, 2388, 2378, 86, 86, 2377, 2383, 86, 2384,
2249
2250 2391, 86, 2396, 86, 2380, 86, 86, 2381, 2386, 2382,
2251 2390, 2389, 86, 2385, 2392, 86, 86, 2387, 2393, 2388,
2252 2394, 2395, 86, 2397, 2383, 2398, 2384, 2391, 2401, 86,
2253 86, 2399, 2400, 86, 86, 2402, 2403, 2390, 2404, 2408,
2254 86, 2392, 86, 2405, 2409, 2393, 2406, 2394, 2395, 86,
2255 2397, 2407, 86, 86, 86, 2401, 86, 86, 2399, 2400,
2256 86, 86, 2402, 2403, 86, 2404, 2408, 2410, 2411, 86,
2257 2405, 2413, 3291, 2406, 2412, 2415, 86, 2414, 2407, 2416,
2258 3291, 86, 2421, 2419, 3291, 2420, 2418, 2417, 3291, 86,
2259 86, 86, 3291, 86, 2434, 2411, 2435, 2425, 2413, 86,
2260
2261 2422, 2412, 2426, 86, 2414, 86, 2416, 86, 168, 2421,
2262 2419, 86, 2420, 2418, 2417, 86, 2424, 86, 2429, 2427,
2263 2428, 86, 86, 2435, 2425, 2430, 2431, 2422, 86, 2426,
2264 86, 2432, 86, 86, 2436, 2433, 2437, 2438, 86, 2439,
2265 2440, 2442, 3291, 2424, 2449, 2429, 2427, 2428, 86, 86,
2266 86, 2441, 2430, 2431, 2443, 3291, 2444, 2446, 2432, 86,
2267 86, 86, 2433, 2437, 2438, 2445, 2447, 86, 86, 86,
2268 86, 86, 86, 2448, 86, 2450, 86, 2454, 2441, 2451,
2269 86, 2443, 86, 2444, 2446, 2452, 2453, 2455, 86, 2456,
2270 3291, 2458, 2445, 2447, 2459, 2460, 3291, 2457, 86, 86,
2271
2272 2448, 86, 2450, 2462, 86, 2461, 2451, 86, 86, 86,
2273 86, 2466, 2452, 2453, 2455, 86, 2456, 86, 2458, 86,
2274 2463, 2459, 86, 2465, 2457, 86, 2464, 86, 2467, 2468,
2275 2462, 2469, 2461, 86, 86, 86, 86, 2470, 2466, 2471,
2276 2474, 2472, 2476, 2479, 2473, 2489, 2480, 2463, 86, 86,
2277 2465, 86, 86, 2464, 2475, 2467, 2468, 86, 86, 2477,
2278 86, 2478, 86, 86, 2470, 86, 2471, 2474, 2472, 2476,
2279 86, 2473, 2481, 2480, 2482, 86, 2483, 86, 2484, 3291,
2280 2490, 2475, 2485, 86, 2486, 86, 2477, 2487, 2478, 86,
2281 2491, 2493, 86, 2488, 2492, 86, 3291, 86, 3291, 2481,
2282
2283 2501, 2482, 2495, 2483, 86, 2484, 86, 2490, 2497, 2485,
2284 2494, 2486, 86, 86, 2487, 86, 86, 86, 86, 86,
2285 2488, 2492, 2496, 2498, 86, 2499, 2500, 86, 2502, 2495,
2286 86, 2503, 2504, 86, 2505, 2497, 3291, 2494, 2506, 2510,
2287 2507, 2509, 2511, 86, 2512, 86, 2508, 86, 86, 2496,
2288 2498, 2515, 2499, 2500, 86, 86, 86, 2516, 86, 2504,
2289 86, 2505, 86, 86, 2517, 2506, 86, 2507, 2509, 2511,
2290 2513, 2514, 86, 2508, 2519, 2520, 86, 2518, 86, 86,
2291 3291, 86, 2526, 86, 2516, 2521, 86, 2522, 2523, 2524,
2292 3291, 2517, 2525, 2528, 3291, 86, 86, 2513, 2514, 2529,
2293
2294 86, 2519, 86, 2530, 2518, 2527, 86, 86, 86, 2526,
2295 86, 86, 2521, 2531, 2522, 2523, 2524, 86, 86, 2525,
2296 2528, 86, 2532, 2533, 2534, 2535, 2529, 2536, 2537, 2541,
2297 2530, 2538, 2527, 2539, 3291, 86, 2540, 86, 2543, 2545,
2298 2531, 3291, 86, 2547, 86, 86, 2542, 2548, 3291, 86,
2299 86, 86, 86, 86, 2536, 2537, 2541, 2544, 2538, 86,
2300 2539, 86, 86, 2540, 2546, 2543, 86, 2549, 86, 2551,
2301 86, 2550, 86, 2542, 86, 2552, 2557, 2554, 2553, 2558,
2302 2555, 2556, 3291, 86, 2544, 86, 86, 86, 86, 86,
2303 86, 2546, 2559, 86, 2549, 2565, 2551, 86, 2550, 86,
2304
2305 2561, 3291, 2552, 86, 2554, 2553, 2558, 2555, 2556, 2560,
2306 2562, 2563, 3291, 86, 86, 2564, 86, 2566, 2570, 2559,
2307 2567, 86, 2565, 86, 86, 2569, 2572, 2561, 2568, 2571,
2308 168, 2576, 86, 86, 86, 86, 2560, 2562, 2563, 2574,
2309 86, 2573, 2564, 2575, 2566, 2570, 2577, 2567, 2578, 3291,
2310 86, 2579, 2569, 2572, 86, 2568, 2571, 2580, 86, 2583,
2311 2581, 86, 2586, 2582, 2584, 86, 2574, 86, 2573, 86,
2312 2575, 86, 3291, 86, 86, 2578, 86, 86, 2579, 86,
2313 2587, 2585, 2589, 86, 2580, 86, 2583, 2581, 86, 2586,
2314 2582, 2584, 2588, 2591, 2590, 2592, 2593, 2594, 2596, 86,
2315
2316 86, 86, 86, 2595, 2597, 86, 86, 2587, 2585, 2589,
2317 2598, 2600, 2602, 2605, 2599, 86, 2601, 86, 86, 2588,
2318 2591, 2590, 2592, 2593, 2594, 86, 2603, 2604, 3291, 86,
2319 2595, 2597, 86, 86, 86, 86, 86, 2598, 86, 86,
2320 2605, 2599, 2607, 2601, 2606, 2611, 2608, 2609, 2612, 2610,
2321 2616, 86, 2613, 2603, 2604, 86, 86, 86, 86, 86,
2322 2615, 2614, 2617, 2618, 3291, 3291, 2620, 2622, 3291, 2607,
2323 86, 2606, 86, 2608, 2609, 86, 2610, 86, 86, 2613,
2324 86, 86, 2619, 2623, 2621, 2626, 2628, 2615, 2614, 86,
2325 2624, 86, 86, 2620, 2622, 86, 2625, 86, 3291, 2627,
2326
2327 2629, 2630, 2632, 86, 2634, 86, 2631, 86, 2633, 2619,
2328 2623, 2621, 2626, 86, 86, 2635, 86, 2624, 2636, 86,
2329 86, 2641, 86, 2625, 86, 86, 2627, 2629, 86, 2632,
2330 2637, 2634, 2639, 2631, 2640, 2633, 2638, 86, 2642, 86,
2331 86, 2644, 2635, 2643, 86, 2636, 2645, 2648, 86, 2647,
2332 86, 2653, 86, 2649, 2646, 2651, 3291, 2637, 86, 2639,
2333 2654, 2640, 86, 2638, 2657, 2642, 86, 86, 86, 86,
2334 2643, 2650, 86, 2645, 86, 86, 2647, 2652, 86, 2655,
2335 2649, 2646, 2651, 86, 86, 2656, 2658, 2654, 2659, 2660,
2336 2662, 86, 2661, 2664, 86, 2665, 2667, 86, 2650, 2663,
2337
2338 2666, 86, 2672, 3291, 2652, 86, 2655, 2670, 86, 2674,
2339 86, 86, 2656, 2658, 86, 86, 2660, 2662, 2668, 2661,
2340 86, 86, 2665, 86, 2669, 86, 2663, 2666, 2671, 86,
2341 2673, 2675, 86, 2679, 2670, 2677, 86, 2676, 86, 2678,
2342 3291, 2680, 86, 3291, 2682, 2668, 86, 2681, 86, 86,
2343 2684, 2669, 86, 86, 2685, 2671, 2687, 2673, 2675, 86,
2344 2679, 86, 2677, 86, 2676, 86, 2678, 2683, 2680, 2688,
2345 2686, 2682, 86, 2689, 2681, 2690, 86, 2684, 2692, 86,
2346 2693, 2685, 86, 86, 2691, 2694, 2695, 86, 2696, 86,
2347 3291, 2697, 2699, 3291, 2683, 86, 86, 2686, 2698, 2700,
2348
2349 168, 2702, 2690, 86, 3291, 2692, 86, 2693, 86, 2701,
2350 2703, 2691, 2710, 2695, 86, 2696, 2704, 86, 2697, 86,
2351 86, 2705, 2706, 86, 2707, 2698, 86, 2708, 86, 2709,
2352 2711, 2713, 2712, 2716, 86, 86, 2701, 2703, 2717, 2710,
2353 86, 2714, 2718, 86, 86, 2721, 86, 2715, 86, 2706,
2354 86, 2707, 86, 86, 2708, 2720, 2719, 2711, 2713, 2712,
2355 86, 86, 2722, 2723, 86, 86, 2724, 86, 2714, 2718,
2356 86, 86, 2721, 2725, 2715, 86, 2726, 2727, 86, 2728,
2357 2729, 2731, 2720, 2719, 2730, 86, 86, 2732, 86, 2722,
2358 2723, 86, 2733, 2724, 2734, 86, 86, 86, 86, 86,
2359
2360 2725, 2735, 2738, 2726, 2727, 2736, 2728, 2729, 2731, 86,
2361 86, 2730, 86, 2739, 2732, 86, 2741, 2737, 2740, 2742,
2362 2743, 2734, 2744, 2745, 86, 86, 86, 2748, 2735, 86,
2363 86, 86, 2736, 86, 86, 86, 2747, 2749, 2750, 86,
2364 2739, 2746, 2751, 2741, 2737, 2740, 2742, 86, 86, 2744,
2365 2745, 2752, 2753, 2754, 86, 2755, 3291, 2756, 2758, 86,
2366 2759, 2763, 2757, 2747, 2749, 2761, 2760, 2764, 2746, 2765,
2367 86, 2768, 86, 86, 86, 86, 86, 86, 86, 86,
2368 2754, 86, 2755, 86, 2756, 2758, 2762, 2759, 86, 2757,
2369 2767, 86, 2761, 2760, 86, 86, 86, 2766, 86, 2769,
2370
2371 2770, 2771, 2772, 2774, 3291, 2775, 86, 2773, 2776, 2777,
2372 86, 3291, 86, 2762, 2778, 2779, 86, 2767, 2781, 3291,
2373 86, 2782, 86, 2783, 2766, 86, 2769, 2770, 2771, 86,
2374 2774, 86, 2775, 2784, 86, 86, 86, 2780, 86, 2785,
2375 2786, 2778, 2779, 2787, 2788, 2781, 86, 2791, 86, 86,
2376 2783, 86, 2789, 86, 2790, 2792, 2793, 86, 2795, 2799,
2377 86, 2794, 86, 2798, 2780, 86, 2785, 86, 2796, 2797,
2378 2787, 2788, 2802, 3291, 86, 86, 86, 2801, 86, 2789,
2379 2803, 2800, 2792, 86, 86, 2795, 86, 2804, 86, 2805,
2380 2798, 86, 2806, 2807, 86, 2796, 2797, 2808, 3291, 86,
2381
2382 86, 2812, 86, 2811, 2801, 2814, 86, 2803, 2800, 2815,
2383 86, 2809, 2810, 86, 2804, 2813, 2805, 86, 86, 2806,
2384 2807, 86, 86, 86, 2808, 86, 2817, 2816, 2812, 2820,
2385 2811, 2819, 2814, 2821, 2818, 2827, 86, 86, 2809, 2810,
2386 86, 2822, 2813, 2824, 86, 2828, 2823, 2826, 2825, 3291,
2387 86, 2829, 86, 2817, 2816, 86, 2820, 2830, 2819, 2831,
2388 2821, 2818, 86, 2834, 3291, 2832, 2833, 2835, 86, 2836,
2389 86, 86, 2828, 86, 2826, 86, 86, 86, 2829, 2837,
2390 2838, 2839, 2840, 86, 2830, 86, 2831, 86, 86, 86,
2391 2834, 86, 2832, 2833, 2835, 2842, 2836, 2841, 2843, 86,
2392
2393 3291, 2845, 86, 2844, 86, 2846, 2837, 2838, 2839, 2840,
2394 86, 2847, 2848, 2849, 2850, 2851, 2852, 2854, 2853, 2855,
2395 3291, 3291, 86, 3291, 2841, 86, 86, 86, 2845, 2856,
2396 2844, 86, 86, 86, 86, 86, 86, 2857, 2847, 86,
2397 2849, 86, 2851, 2852, 2854, 2853, 86, 2858, 2859, 2861,
2398 2862, 2864, 86, 2860, 3291, 86, 2856, 2865, 2863, 86,
2399 2866, 2869, 2867, 86, 2857, 2868, 3291, 86, 86, 3291,
2400 86, 2871, 2870, 86, 2858, 86, 2861, 2862, 2864, 2873,
2401 86, 86, 2875, 3291, 86, 2863, 86, 86, 2869, 2867,
2402 86, 2872, 2868, 86, 2874, 2876, 2877, 86, 2871, 2870,
2403
2404 3291, 86, 86, 2878, 2879, 2885, 2873, 2880, 3291, 2881,
2405 86, 3291, 2883, 2882, 86, 2884, 2886, 2887, 2872, 2888,
2406 2890, 2874, 2876, 2877, 3291, 86, 86, 86, 86, 2891,
2407 2878, 2879, 86, 86, 2880, 86, 2881, 86, 86, 2883,
2408 2882, 2889, 2884, 86, 86, 2892, 2888, 2890, 86, 2893,
2409 3291, 86, 2894, 2895, 2896, 2897, 2891, 2900, 2898, 2901,
2410 2902, 2899, 86, 86, 86, 2903, 86, 2904, 2889, 3291,
2411 86, 86, 2907, 2905, 86, 2906, 2893, 86, 2908, 2894,
2412 86, 2896, 2897, 86, 2900, 2898, 86, 2902, 2899, 2909,
2413 86, 86, 86, 2912, 2904, 86, 2910, 86, 86, 2907,
2414
2415 2905, 86, 2906, 2911, 2913, 2908, 2915, 2914, 86, 2916,
2416 86, 2917, 3291, 2919, 2925, 2920, 2909, 2918, 86, 2921,
2417 86, 86, 86, 2910, 3291, 86, 3291, 86, 2927, 86,
2418 2911, 2913, 86, 2915, 2914, 2922, 2916, 86, 2917, 2923,
2419 2919, 86, 2920, 2926, 2918, 86, 2921, 2928, 86, 2924,
2420 86, 86, 2929, 86, 2930, 86, 2931, 2932, 86, 2935,
2421 2933, 3291, 2922, 2934, 2940, 2936, 2923, 86, 86, 2937,
2422 2926, 86, 86, 86, 86, 2939, 2924, 86, 2942, 2929,
2423 2938, 86, 2944, 2931, 2932, 86, 86, 2933, 86, 2941,
2424 2934, 2940, 2936, 2943, 2946, 2945, 2937, 86, 2947, 86,
2425
2426 86, 86, 2939, 2948, 2949, 86, 2953, 2938, 2950, 2955,
2427 2952, 86, 2954, 2957, 86, 2956, 2941, 86, 2959, 86,
2428 2943, 2946, 2945, 86, 86, 86, 86, 2951, 86, 2958,
2429 86, 2949, 2962, 2953, 2960, 86, 86, 2952, 2961, 2954,
2430 2957, 86, 2956, 2963, 2964, 86, 2965, 86, 2966, 2967,
2431 86, 2968, 2969, 2970, 2951, 2971, 2958, 2973, 86, 2962,
2432 86, 2960, 3291, 2972, 86, 2961, 3291, 2976, 3291, 3291,
2433 2963, 86, 86, 86, 86, 2966, 86, 86, 2968, 2969,
2434 86, 86, 2971, 2974, 2975, 2977, 2978, 2980, 2981, 86,
2435 2972, 2982, 2983, 86, 86, 86, 2979, 2985, 86, 86,
2436
2437 86, 86, 2984, 86, 2986, 2987, 2989, 2990, 2988, 2991,
2438 2974, 2975, 2977, 2978, 2980, 86, 2992, 2995, 2982, 2983,
2439 86, 86, 3291, 2979, 86, 2993, 2996, 86, 86, 2984,
2440 2997, 86, 2987, 2989, 86, 2988, 86, 2994, 86, 86,
2441 2999, 3000, 2998, 86, 3002, 86, 86, 3003, 86, 86,
2442 86, 3001, 2993, 2996, 3005, 3006, 86, 86, 3007, 3004,
2443 3008, 86, 3009, 3013, 2994, 3014, 3016, 2999, 3000, 2998,
2444 86, 3002, 86, 86, 86, 3012, 3010, 3015, 3001, 86,
2445 3011, 3005, 3006, 86, 3017, 86, 3004, 86, 86, 3291,
2446 86, 3018, 86, 3016, 86, 3019, 3020, 86, 3021, 86,
2447
2448 3025, 3022, 3012, 3010, 3015, 3023, 86, 3011, 86, 3024,
2449 3027, 3028, 86, 3026, 86, 86, 86, 3029, 3018, 86,
2450 86, 3031, 3019, 86, 86, 3021, 3030, 3025, 3022, 86,
2451 86, 86, 3023, 86, 86, 3032, 3024, 3027, 3028, 3035,
2452 3026, 3033, 3034, 3036, 3029, 86, 86, 3038, 3031, 3037,
2453 3039, 86, 3041, 3030, 86, 3291, 3040, 3042, 3043, 86,
2454 3044, 3045, 3032, 3046, 3047, 86, 3035, 3048, 3033, 3034,
2455 3036, 86, 86, 3291, 3038, 3050, 3037, 3051, 86, 3041,
2456 3058, 86, 86, 3040, 3042, 3043, 86, 86, 86, 86,
2457 3046, 86, 3049, 3059, 3048, 3052, 3053, 3054, 3055, 3291,
2458
2459 86, 3060, 86, 86, 86, 3056, 3057, 3058, 3061, 3062,
2460 86, 3063, 3065, 3067, 3069, 3064, 86, 3070, 86, 3049,
2461 86, 86, 3068, 3066, 86, 86, 86, 3073, 3060, 86,
2462 3072, 3074, 86, 86, 86, 3061, 3062, 86, 3063, 86,
2463 3067, 3069, 3064, 3071, 3070, 86, 3075, 3076, 86, 3068,
2464 3066, 3080, 86, 86, 3073, 3077, 3081, 3072, 86, 86,
2465 3078, 3082, 3083, 3079, 86, 3085, 3090, 3084, 3088, 3086,
2466 3071, 86, 3089, 86, 3076, 3087, 86, 86, 86, 86,
2467 3091, 3092, 3077, 86, 3093, 3096, 3097, 3078, 3094, 3083,
2468 3079, 86, 3085, 86, 3084, 3088, 3086, 86, 86, 86,
2469
2470 86, 86, 3087, 3095, 3098, 3099, 3100, 3091, 86, 3101,
2471 3102, 86, 86, 86, 3103, 3094, 3104, 3105, 3107, 3109,
2472 3106, 3108, 86, 3291, 3112, 86, 3291, 3291, 3110, 3291,
2473 3095, 3098, 86, 86, 86, 86, 86, 86, 86, 86,
2474 3113, 86, 3111, 86, 86, 86, 3109, 3106, 3108, 3114,
2475 86, 86, 86, 3115, 3117, 3110, 3116, 3118, 3121, 86,
2476 3126, 3119, 3120, 86, 3122, 3123, 86, 3113, 86, 3111,
2477 86, 3124, 3125, 86, 86, 3127, 3114, 3291, 3131, 3291,
2478 3115, 3117, 86, 3116, 86, 3121, 86, 3126, 3119, 3120,
2479 86, 3122, 3123, 3128, 3129, 86, 3130, 86, 3124, 86,
2480
2481 3132, 86, 3127, 86, 86, 3131, 3133, 86, 3135, 86,
2482 3134, 3137, 3136, 3138, 3139, 3140, 3142, 3145, 86, 3291,
2483 3128, 3129, 86, 3130, 3141, 86, 3143, 3132, 86, 86,
2484 86, 3147, 3148, 3133, 86, 3135, 86, 3134, 3137, 3136,
2485 86, 86, 86, 3142, 3145, 3144, 3146, 86, 3150, 86,
2486 86, 3141, 86, 3143, 86, 3149, 3291, 3151, 3147, 3148,
2487 86, 3153, 3152, 3158, 3291, 3154, 3155, 3157, 3156, 86,
2488 86, 3159, 3144, 3146, 86, 3150, 86, 86, 3160, 86,
2489 86, 86, 3149, 86, 3151, 3161, 86, 3162, 3153, 3152,
2490 3158, 86, 3154, 3155, 3157, 3156, 3163, 3164, 3159, 3166,
2491
2492 86, 3167, 3165, 86, 3168, 3160, 86, 3169, 3171, 86,
2493 3170, 3172, 3161, 3173, 3162, 86, 3180, 3175, 3174, 86,
2494 3176, 86, 86, 3163, 3164, 86, 3166, 3177, 86, 3165,
2495 3178, 3168, 86, 3181, 86, 86, 86, 3170, 86, 3179,
2496 3173, 86, 86, 3182, 3175, 3174, 86, 3176, 86, 86,
2497 3183, 86, 3184, 3186, 3177, 3185, 3187, 3178, 86, 3188,
2498 3181, 3189, 86, 3190, 3191, 3192, 3179, 3193, 3195, 86,
2499 3182, 86, 86, 3194, 86, 3197, 86, 3183, 3198, 86,
2500 86, 3196, 3185, 86, 3199, 3291, 3188, 86, 3189, 86,
2501 86, 3191, 3192, 3201, 86, 3195, 3202, 86, 3200, 86,
2502
2503 3194, 86, 3203, 3204, 3207, 3208, 3206, 86, 3196, 3205,
2504 86, 3199, 86, 86, 3209, 86, 3210, 86, 86, 3211,
2505 3201, 86, 3215, 3202, 3217, 3200, 3212, 86, 86, 86,
2506 86, 3207, 3208, 3206, 3213, 3216, 3205, 3214, 86, 3221,
2507 86, 3209, 3224, 3210, 86, 86, 3211, 3218, 86, 3215,
2508 3219, 86, 3220, 3212, 86, 3223, 3222, 86, 3225, 86,
2509 86, 3213, 3216, 3228, 3214, 3291, 86, 3226, 86, 3224,
2510 3227, 86, 3229, 3230, 3218, 3232, 3231, 3219, 86, 3220,
2511 86, 3235, 3233, 3222, 3238, 3225, 3241, 86, 3234, 86,
2512 3228, 3236, 86, 3240, 3226, 3242, 86, 3227, 86, 86,
2513
2514 86, 86, 86, 3231, 86, 86, 3237, 86, 3235, 3233,
2515 3245, 3239, 86, 3241, 86, 3234, 86, 3246, 3236, 86,
2516 3240, 3243, 86, 3247, 3244, 86, 3248, 3291, 3249, 3251,
2517 3250, 86, 86, 3237, 3252, 86, 3253, 3245, 3239, 86,
2518 86, 3254, 3257, 86, 3246, 3255, 3291, 3256, 3243, 86,
2519 3247, 3244, 86, 3248, 86, 3249, 3251, 3250, 3258, 3259,
2520 3260, 3252, 86, 3253, 86, 3262, 3261, 86, 3254, 3257,
2521 3263, 86, 3255, 86, 3256, 3264, 3265, 3267, 86, 3269,
2522 3291, 3266, 3291, 3268, 3276, 3258, 3259, 86, 86, 86,
2523 86, 86, 3262, 3261, 3271, 86, 86, 86, 3272, 86,
2524
2525 3275, 3270, 3264, 3265, 3267, 3273, 86, 3274, 3266, 86,
2526 3268, 86, 3279, 86, 3277, 86, 86, 3280, 3282, 3283,
2527 86, 3271, 86, 3278, 3289, 3272, 86, 3275, 3270, 3281,
2528 3285, 86, 3273, 3284, 3274, 3287, 3286, 3290, 86, 3279,
2529 3288, 3277, 3291, 86, 86, 86, 86, 3291, 86, 86,
2530 3278, 86, 86, 86, 3291, 3291, 3281, 3285, 86, 3291,
2531 3284, 3291, 3287, 3286, 86, 3291, 3291, 3288, 47, 47,
2532 47, 47, 47, 47, 47, 52, 52, 52, 52, 52,
2533 52, 52, 57, 57, 57, 57, 57, 57, 57, 63,
2534 63, 63, 63, 63, 63, 63, 68, 68, 68, 68,
2535
2536 68, 68, 68, 74, 74, 74, 74, 74, 74, 74,
2537 80, 80, 80, 80, 80, 80, 80, 89, 89, 3291,
2538 89, 89, 89, 89, 158, 158, 3291, 3291, 3291, 158,
2539 158, 160, 160, 3291, 3291, 160, 3291, 160, 162, 3291,
2540 3291, 3291, 3291, 3291, 162, 165, 165, 3291, 3291, 3291,
2541 165, 165, 167, 3291, 3291, 3291, 3291, 3291, 167, 169,
2542 169, 3291, 169, 169, 169, 169, 172, 3291, 3291, 3291,
2543 3291, 3291, 172, 175, 175, 3291, 3291, 3291, 175, 175,
2544 90, 90, 3291, 90, 90, 90, 90, 17, 3291, 3291,
2545 3291, 3291, 3291, 3291, 3291, 3291, 3291, 3291, 3291, 3291,
2546
2547 3291, 3291, 3291, 3291, 3291, 3291, 3291, 3291, 3291, 3291,
2548 3291, 3291, 3291, 3291, 3291, 3291, 3291, 3291, 3291, 3291,
2549 3291, 3291, 3291, 3291, 3291, 3291, 3291, 3291, 3291, 3291,
2550 3291, 3291, 3291, 3291, 3291, 3291, 3291, 3291, 3291, 3291,
2551 3291, 3291, 3291, 3291, 3291, 3291, 3291, 3291, 3291, 3291,
2552 3291, 3291, 3291, 3291
25242553 } ;
25252554
2526 static const flex_int16_t yy_chk[9330] =
2555 static const flex_int16_t yy_chk[9455] =
25272556 { 0,
25282557 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
25292558 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
25362565 7, 7, 7, 33, 7, 8, 8, 8, 8, 32,
25372566 8, 9, 9, 9, 10, 10, 10, 19, 51, 51,
25382567
2539 1066, 19, 3260, 3, 32, 33, 4, 67, 67, 5,
2540 33, 6, 2661, 13, 13, 13, 13, 7, 13, 14,
2568 1073, 19, 3299, 3, 32, 33, 4, 67, 67, 5,
2569 33, 6, 2689, 13, 13, 13, 13, 7, 13, 14,
25412570 14, 14, 14, 8, 14, 15, 15, 15, 9, 25,
2542 1066, 10, 11, 11, 11, 11, 11, 11, 12, 12,
2571 1073, 10, 11, 11, 11, 11, 11, 11, 12, 12,
25432572 12, 12, 12, 12, 16, 16, 16, 34, 28, 84,
25442573 84, 13, 11, 45, 289, 25, 25, 14, 12, 34,
2545 39, 23, 15, 23, 23, 45, 23, 1075, 28, 175,
2574 39, 23, 15, 23, 23, 45, 23, 1082, 28, 175,
25462575 11, 28, 23, 39, 34, 28, 12, 174, 87, 11,
25472576 45, 16, 87, 289, 37, 12, 30, 39, 29, 56,
25482577 37, 172, 56, 72, 30, 28, 26, 167, 100, 23,
25932622
25942623 147, 146, 0, 142, 137, 145, 150, 141, 145, 144,
25952624 137, 141, 146, 149, 152, 151, 147, 150, 155, 153,
2596 154, 146, 156, 926, 151, 157, 152, 155, 146, 163,
2625 154, 146, 156, 930, 151, 157, 152, 155, 146, 163,
25972626 0, 163, 163, 150, 163, 154, 151, 171, 157, 146,
25982627 151, 153, 151, 0, 156, 155, 153, 154, 0, 156,
2599 177, 151, 157, 168, 926, 168, 168, 169, 168, 169,
2628 177, 151, 157, 168, 930, 168, 168, 169, 168, 169,
26002629 169, 171, 169, 151, 171, 173, 178, 173, 173, 179,
26012630 173, 0, 177, 180, 181, 182, 0, 177, 179, 184,
26022631 178, 181, 185, 186, 183, 180, 188, 184, 0, 0,
26642693 343, 345, 350, 346, 344, 344, 348, 354, 346, 349,
26652694 347, 352, 360, 352, 354, 0, 364, 350, 362, 355,
26662695 357, 358, 352, 387, 365, 360, 359, 358, 359, 398,
2667 0, 0, 363, 0, 354, 0, 362, 352, 352, 360,
2696 0, 0, 363, 403, 354, 0, 362, 352, 352, 360,
26682697 352, 355, 357, 358, 361, 362, 355, 357, 358, 352,
26692698 359, 365, 366, 359, 358, 359, 369, 361, 363, 363,
26702699
2671 361, 398, 361, 369, 0, 373, 370, 367, 361, 371,
2672 372, 361, 370, 367, 366, 376, 438, 367, 373, 366,
2673 381, 371, 372, 369, 361, 367, 0, 361, 376, 361,
2674 379, 367, 373, 370, 367, 375, 371, 372, 378, 382,
2675 367, 381, 376, 438, 367, 382, 0, 381, 379, 380,
2676 378, 375, 367, 368, 380, 368, 383, 379, 384, 375,
2677 0, 403, 375, 390, 383, 378, 382, 389, 368, 385,
2678 384, 368, 0, 368, 389, 368, 390, 0, 375, 368,
2679 368, 380, 368, 383, 386, 384, 0, 385, 0, 0,
2680 390, 417, 386, 403, 389, 368, 385, 395, 368, 417,
2681
2682 368, 391, 368, 377, 377, 388, 388, 392, 0, 395,
2683 391, 386, 393, 377, 394, 377, 377, 377, 417, 393,
2684 377, 394, 399, 396, 395, 392, 397, 0, 377, 392,
2685 377, 377, 388, 391, 392, 407, 407, 391, 397, 393,
2686 377, 394, 377, 377, 377, 396, 401, 377, 399, 399,
2687 396, 400, 392, 397, 402, 404, 408, 404, 400, 405,
2688 409, 401, 406, 408, 407, 410, 411, 402, 0, 412,
2689 405, 409, 414, 401, 416, 424, 410, 419, 400, 411,
2690 0, 402, 404, 408, 406, 0, 405, 409, 419, 406,
2691 413, 413, 410, 411, 412, 414, 412, 415, 418, 414,
2692
2693 416, 416, 420, 421, 419, 426, 429, 424, 413, 0,
2694 418, 420, 415, 425, 0, 413, 421, 413, 413, 427,
2695 415, 433, 430, 422, 415, 418, 428, 426, 430, 420,
2696 421, 425, 426, 431, 422, 413, 422, 0, 429, 415,
2697 425, 422, 427, 432, 428, 433, 427, 434, 433, 430,
2698 422, 435, 450, 428, 431, 436, 442, 437, 435, 450,
2699 431, 422, 0, 422, 423, 439, 432, 441, 444, 434,
2700 432, 437, 423, 423, 434, 440, 423, 423, 435, 450,
2701 444, 436, 436, 443, 437, 446, 423, 439, 442, 440,
2702 445, 423, 439, 441, 441, 444, 445, 447, 449, 423,
2703
2704 423, 448, 440, 423, 423, 451, 443, 446, 452, 448,
2705 443, 454, 446, 449, 451, 453, 455, 445, 456, 447,
2706 0, 0, 464, 452, 447, 449, 457, 448, 448, 459,
2707 0, 455, 451, 462, 454, 452, 448, 0, 454, 453,
2708 458, 464, 453, 455, 456, 456, 458, 460, 457, 464,
2709 465, 463, 460, 457, 466, 459, 459, 463, 467, 462,
2710 462, 466, 469, 470, 469, 473, 472, 458, 465, 471,
2711 475, 469, 470, 467, 460, 0, 471, 465, 463, 472,
2712 474, 466, 476, 481, 478, 467, 477, 478, 479, 469,
2713 470, 469, 480, 472, 482, 481, 471, 473, 474, 477,
2714
2715 484, 483, 475, 478, 476, 480, 485, 474, 483, 476,
2716 481, 478, 479, 477, 478, 479, 488, 486, 487, 480,
2717 491, 488, 492, 490, 484, 489, 482, 484, 483, 485,
2718 486, 489, 493, 495, 492, 0, 0, 494, 485, 496,
2719 487, 495, 491, 488, 486, 487, 490, 491, 494, 492,
2720 490, 499, 489, 496, 493, 0, 485, 500, 499, 493,
2721 495, 0, 502, 509, 494, 0, 496, 497, 501, 500,
2722 502, 506, 497, 504, 497, 505, 503, 0, 499, 505,
2723 497, 509, 497, 506, 500, 497, 497, 503, 507, 502,
2724 509, 501, 497, 497, 497, 501, 504, 505, 506, 497,
2725
2726 504, 497, 505, 503, 510, 508, 505, 497, 508, 497,
2727 507, 511, 497, 497, 510, 507, 508, 513, 512, 497,
2728 514, 513, 511, 515, 516, 518, 516, 514, 517, 522,
2729 0, 519, 508, 0, 522, 508, 510, 518, 511, 524,
2730 523, 510, 512, 0, 513, 512, 519, 514, 520, 515,
2731 515, 516, 518, 521, 517, 517, 522, 524, 519, 0,
2732 520, 521, 523, 525, 526, 527, 524, 523, 531, 529,
2733 530, 525, 533, 0, 532, 520, 526, 534, 0, 537,
2734 521, 535, 538, 536, 533, 534, 527, 529, 537, 532,
2735 525, 526, 527, 530, 535, 536, 529, 530, 539, 533,
2736
2737 531, 532, 540, 542, 534, 538, 537, 543, 535, 538,
2738 536, 541, 539, 544, 541, 546, 545, 547, 0, 551,
2739 0, 0, 542, 549, 548, 539, 554, 540, 550, 540,
2740 542, 545, 547, 552, 543, 557, 549, 554, 541, 559,
2741 550, 551, 558, 545, 547, 544, 551, 546, 548, 553,
2742 549, 548, 556, 554, 560, 550, 553, 552, 555, 553,
2743 552, 561, 557, 555, 562, 563, 556, 553, 564, 558,
2744 563, 559, 565, 0, 564, 569, 553, 566, 567, 556,
2745 0, 560, 570, 553, 568, 571, 553, 565, 561, 572,
2746 555, 575, 568, 572, 569, 564, 562, 563, 574, 565,
2747
2748 567, 566, 569, 576, 566, 567, 570, 571, 577, 570,
2749 573, 568, 571, 580, 578, 579, 572, 577, 573, 581,
2750 586, 574, 583, 575, 0, 574, 576, 582, 579, 587,
2751 576, 581, 584, 582, 588, 577, 578, 573, 585, 580,
2752 580, 578, 579, 584, 583, 585, 581, 588, 589, 583,
2753 591, 587, 586, 589, 582, 590, 587, 589, 592, 584,
2754 593, 588, 597, 0, 590, 585, 594, 592, 595, 599,
2755 596, 593, 589, 600, 597, 589, 591, 591, 601, 0,
2756 589, 602, 590, 596, 589, 592, 604, 593, 594, 597,
2757 595, 600, 603, 594, 605, 595, 606, 596, 608, 0,
2758
2759 600, 599, 601, 602, 602, 601, 607, 606, 602, 610,
2760 604, 612, 609, 604, 603, 607, 605, 611, 608, 603,
2761 614, 605, 613, 606, 611, 608, 609, 616, 614, 618,
2762 602, 610, 615, 607, 0, 617, 610, 619, 612, 609,
2763 613, 620, 622, 615, 611, 616, 624, 614, 623, 613,
2764 617, 621, 621, 626, 616, 624, 627, 628, 619, 615,
2765 629, 618, 617, 625, 619, 620, 622, 633, 620, 622,
2766 623, 631, 630, 624, 630, 623, 625, 632, 627, 636,
2767 621, 633, 632, 627, 629, 626, 634, 629, 635, 628,
2768 625, 645, 644, 631, 633, 639, 637, 0, 631, 630,
2769
2770 634, 638, 635, 635, 637, 640, 645, 641, 0, 632,
2771 635, 636, 640, 634, 648, 635, 642, 639, 645, 638,
2772 643, 0, 639, 637, 644, 649, 646, 649, 638, 635,
2773 635, 650, 640, 641, 641, 643, 642, 647, 651, 652,
2774 648, 648, 647, 642, 643, 653, 651, 643, 646, 656,
2775 654, 655, 649, 646, 653, 658, 650, 656, 650, 654,
2776 655, 657, 643, 659, 652, 651, 652, 660, 657, 647,
2777 661, 662, 653, 664, 665, 663, 656, 654, 655, 666,
2778 667, 664, 661, 662, 663, 660, 659, 658, 657, 665,
2779 659, 666, 668, 669, 660, 670, 671, 661, 662, 674,
2780
2781 664, 665, 663, 670, 671, 668, 666, 672, 669, 673,
2782 674, 678, 667, 677, 679, 675, 676, 676, 673, 668,
2783 669, 677, 670, 671, 675, 676, 674, 679, 680, 681,
2784 672, 682, 683, 678, 672, 685, 673, 684, 678, 682,
2785 677, 679, 675, 676, 676, 687, 689, 688, 683, 686,
2786 684, 691, 681, 687, 680, 680, 681, 685, 682, 683,
2787 686, 688, 685, 690, 684, 692, 689, 693, 694, 697,
2788 696, 691, 687, 689, 688, 698, 686, 694, 691, 695,
2789 701, 700, 697, 699, 0, 690, 702, 692, 696, 693,
2790 690, 0, 692, 698, 693, 694, 697, 696, 699, 695,
2791
2792 704, 703, 698, 700, 701, 705, 695, 701, 700, 702,
2793 699, 706, 708, 702, 703, 707, 710, 705, 704, 711,
2794 715, 707, 709, 714, 706, 0, 712, 704, 703, 716,
2795 709, 714, 705, 721, 0, 717, 716, 748, 706, 708,
2796 718, 711, 707, 710, 712, 719, 711, 719, 709, 709,
2797 714, 720, 715, 712, 722, 718, 716, 709, 717, 723,
2798 720, 724, 717, 0, 725, 721, 725, 718, 726, 748,
2799 724, 729, 719, 722, 732, 726, 0, 0, 720, 723,
2800 745, 722, 735, 729, 732, 741, 723, 0, 724, 745,
2801 736, 725, 739, 740, 0, 726, 727, 738, 729, 727,
2802
2803 735, 732, 742, 727, 740, 743, 727, 745, 741, 735,
2804 739, 736, 741, 727, 727, 0, 727, 736, 738, 739,
2805 740, 727, 744, 727, 738, 753, 727, 752, 742, 742,
2806 727, 743, 743, 727, 746, 747, 752, 0, 744, 0,
2807 727, 727, 747, 727, 751, 750, 756, 746, 753, 744,
2808 751, 757, 753, 0, 752, 754, 755, 0, 754, 757,
2809 0, 746, 747, 749, 749, 758, 749, 750, 756, 749,
2810 760, 751, 750, 756, 749, 0, 763, 758, 757, 755,
2811 749, 749, 754, 755, 759, 762, 759, 764, 766, 749,
2812 749, 749, 758, 749, 760, 761, 749, 760, 765, 764,
2813
2814 761, 749, 763, 763, 767, 762, 769, 749, 749, 770,
2815 766, 759, 762, 768, 764, 766, 773, 771, 772, 0,
2816 777, 0, 774, 776, 765, 765, 772, 761, 767, 774,
2817 775, 767, 771, 769, 770, 768, 770, 780, 775, 773,
2818 768, 778, 776, 773, 771, 772, 777, 777, 779, 774,
2819 776, 781, 782, 778, 783, 784, 786, 775, 785, 783,
2820 781, 779, 789, 780, 780, 787, 790, 782, 778, 791,
2821 787, 793, 792, 796, 0, 779, 0, 797, 781, 782,
2822 785, 783, 794, 786, 789, 785, 795, 784, 798, 789,
2823 801, 799, 796, 800, 792, 804, 802, 787, 790, 792,
2824
2825 796, 791, 800, 793, 797, 806, 794, 795, 805, 794,
2826 799, 803, 801, 795, 807, 798, 802, 801, 799, 803,
2827 800, 808, 804, 802, 806, 809, 805, 811, 812, 814,
2828 815, 813, 806, 809, 813, 805, 816, 817, 803, 822,
2829 819, 807, 819, 820, 822, 811, 812, 823, 815, 818,
2830 0, 814, 809, 808, 811, 812, 814, 815, 813, 817,
2831 816, 820, 818, 816, 817, 821, 824, 819, 826, 825,
2832 820, 822, 827, 823, 823, 827, 818, 825, 824, 821,
2833 828, 830, 831, 832, 0, 0, 826, 835, 828, 832,
2834 833, 834, 821, 824, 835, 826, 825, 834, 836, 827,
2835
2836 841, 839, 844, 0, 828, 836, 830, 828, 830, 831,
2837 832, 837, 833, 838, 835, 828, 837, 833, 834, 839,
2838 838, 842, 840, 841, 843, 836, 840, 841, 839, 845,
2839 842, 846, 843, 847, 844, 852, 849, 848, 837, 850,
2840 838, 847, 0, 851, 0, 0, 846, 845, 842, 840,
2841 848, 843, 850, 854, 853, 861, 845, 849, 846, 856,
2842 847, 853, 852, 849, 848, 851, 850, 855, 857, 862,
2843 851, 854, 858, 864, 855, 857, 859, 858, 856, 863,
2844 854, 853, 860, 865, 859, 866, 856, 861, 867, 860,
2845 865, 868, 863, 874, 855, 857, 869, 871, 0, 858,
2846
2847 870, 862, 873, 859, 869, 864, 863, 872, 870, 860,
2848 865, 878, 875, 872, 868, 870, 0, 866, 868, 871,
2849 867, 876, 880, 869, 871, 874, 877, 870, 873, 873,
2850 876, 879, 881, 882, 872, 870, 875, 883, 879, 875,
2851 877, 881, 883, 878, 884, 885, 0, 886, 876, 880,
2852 0, 893, 887, 877, 888, 882, 884, 887, 879, 881,
2853 882, 888, 889, 892, 893, 900, 892, 890, 885, 883,
2854 899, 884, 885, 886, 886, 890, 896, 895, 893, 887,
2855 897, 888, 902, 896, 889, 903, 897, 903, 900, 889,
2856 892, 895, 900, 901, 890, 904, 899, 899, 906, 0,
2857
2858 0, 905, 907, 896, 895, 901, 908, 897, 898, 902,
2859 898, 906, 903, 905, 898, 0, 898, 911, 904, 908,
2860 901, 898, 904, 0, 907, 906, 898, 910, 905, 907,
2861 911, 909, 898, 908, 912, 898, 909, 898, 913, 0,
2862 915, 898, 914, 898, 911, 910, 912, 917, 898, 916,
2863 913, 925, 914, 898, 910, 915, 918, 912, 922, 919,
2864 917, 912, 918, 909, 914, 913, 920, 915, 921, 914,
2865 923, 916, 919, 912, 917, 924, 916, 927, 925, 914,
2866 922, 930, 0, 918, 920, 922, 919, 928, 929, 921,
2867 930, 932, 928, 920, 0, 921, 929, 933, 934, 0,
2868
2869 936, 0, 923, 938, 940, 935, 932, 924, 930, 927,
2870 0, 934, 940, 943, 928, 929, 931, 937, 932, 933,
2871 935, 931, 938, 931, 933, 934, 936, 936, 941, 931,
2872 938, 940, 935, 939, 931, 931, 941, 944, 942, 937,
2873 946, 931, 931, 931, 937, 943, 939, 948, 931, 942,
2874 931, 946, 949, 952, 945, 941, 931, 947, 956, 944,
2875 939, 931, 931, 945, 944, 942, 947, 946, 931, 950,
2876 953, 957, 954, 955, 948, 949, 950, 960, 958, 949,
2877 954, 945, 963, 961, 947, 952, 958, 955, 964, 0,
2878 956, 962, 975, 957, 953, 960, 950, 953, 957, 954,
2879
2880 955, 961, 962, 965, 960, 958, 964, 966, 968, 967,
2881 961, 965, 969, 970, 963, 964, 967, 974, 962, 969,
2882 971, 968, 973, 972, 975, 981, 977, 974, 970, 966,
2883 965, 0, 979, 981, 966, 968, 967, 977, 971, 969,
2884 970, 972, 991, 973, 974, 979, 984, 971, 980, 973,
2885 972, 982, 981, 977, 983, 980, 0, 985, 984, 979,
2886 986, 989, 990, 983, 982, 992, 995, 996, 991, 991,
2887 0, 993, 996, 984, 0, 980, 999, 995, 982, 985,
2888 990, 983, 986, 989, 985, 993, 1026, 986, 989, 990,
2889 0, 998, 1000, 995, 998, 1001, 1002, 992, 993, 996,
2890
2891 999, 1003, 1001, 999, 1005, 1000, 1004, 1002, 1006, 1008,
2892 1003, 1013, 1009, 1026, 0, 1010, 1005, 998, 998, 1000,
2893 1004, 998, 1001, 1002, 1009, 1007, 1015, 1016, 1003, 1018,
2894 1011, 1005, 1007, 1004, 1017, 1013, 1019, 1010, 1013, 1009,
2895 1006, 1008, 1010, 1011, 1014, 1017, 1022, 1020, 1015, 1016,
2896 1014, 1018, 1007, 1015, 1016, 1023, 1018, 1011, 1019, 1024,
2897 1025, 1017, 1020, 1019, 1029, 0, 1023, 1022, 1028, 1027,
2898 1031, 1014, 1030, 1022, 1020, 1032, 1034, 1028, 1033, 1031,
2899 1024, 1036, 1023, 1032, 1037, 1033, 1024, 1027, 1029, 1041,
2900 1035, 1029, 1025, 1038, 1045, 1028, 1027, 1031, 1030, 1030,
2901
2902 1034, 1039, 1032, 1034, 1035, 1033, 1047, 1040, 1046, 1043,
2903 0, 1054, 1044, 1036, 1048, 1038, 1037, 1035, 1043, 1044,
2904 1038, 1041, 1049, 1039, 1052, 1058, 1045, 1054, 1039, 1040,
2905 1046, 1053, 1048, 1047, 1040, 1046, 1043, 1050, 1054, 1044,
2906 1049, 1048, 1051, 1055, 1056, 1057, 1050, 1059, 1052, 1049,
2907 1051, 1052, 1055, 1057, 1060, 1053, 1061, 1058, 1053, 1056,
2908 1062, 1064, 1065, 0, 1050, 1063, 1060, 1067, 1068, 1051,
2909 1055, 1056, 1057, 1063, 1064, 1073, 1067, 1065, 1061, 1059,
2910 1081, 1060, 1069, 1061, 1076, 1083, 1068, 1062, 1064, 1065,
2911 1069, 1070, 1063, 1070, 1067, 1068, 1072, 1076, 1074, 1078,
2912
2913 1077, 0, 1073, 1080, 1072, 1074, 1079, 1081, 1082, 1069,
2914 1084, 1076, 1077, 1085, 1078, 1082, 1086, 1083, 1070, 1087,
2915 0, 1080, 0, 1072, 1085, 1074, 1078, 1077, 1079, 1088,
2916 1080, 1091, 1089, 1079, 1090, 1082, 1092, 1094, 1086, 1098,
2917 1085, 1093, 1084, 1086, 1087, 1089, 1087, 1090, 1092, 1093,
2918 1095, 1088, 1096, 1091, 1099, 1153, 1088, 1094, 1091, 1089,
2919 1096, 1090, 1095, 1092, 1094, 1100, 1098, 1099, 1093, 1102,
2920 1101, 1103, 1106, 1109, 1100, 0, 0, 1095, 1103, 1096,
2921 1104, 1099, 1101, 1107, 1108, 1110, 0, 1153, 1111, 1104,
2922 1102, 1104, 1100, 1112, 1104, 1106, 1102, 1101, 1103, 1106,
2923
2924 1109, 1111, 1104, 1116, 1114, 1110, 1108, 1104, 1115, 1107,
2925 1107, 1108, 1110, 1114, 1113, 1111, 1104, 1112, 1104, 1117,
2926 1112, 1104, 1113, 1118, 0, 1116, 1115, 1117, 1121, 1119,
2927 1116, 1114, 1120, 1124, 1122, 1115, 1125, 1131, 1118, 1130,
2928 1126, 1113, 1122, 1128, 1121, 1120, 1117, 1127, 1129, 1131,
2929 1118, 1119, 1168, 0, 1127, 1121, 1119, 1130, 1125, 1120,
2930 1124, 1122, 1126, 1125, 1131, 1128, 1130, 1126, 1132, 1133,
2931 1128, 1129, 1134, 1135, 1127, 1129, 1137, 1133, 1136, 0,
2932 1132, 1138, 1139, 1140, 1168, 1135, 1141, 1134, 1139, 1138,
2933 1142, 1137, 1140, 1145, 1143, 1132, 1133, 1144, 1136, 1134,
2934
2935 1135, 1143, 1142, 1137, 1144, 1136, 1146, 1141, 1138, 1139,
2936 1140, 1145, 1148, 1141, 1147, 0, 1150, 1142, 1146, 1151,
2937 1145, 1143, 1147, 1149, 1144, 1149, 1151, 1148, 1150, 1156,
2938 1154, 1155, 1158, 1146, 1159, 1160, 1164, 1172, 1157, 1148,
2939 1160, 1147, 1154, 1150, 1155, 1157, 1151, 1161, 1156, 1159,
2940 1149, 1162, 1163, 1186, 1158, 1161, 1156, 1154, 1155, 1158,
2941 0, 1159, 1164, 1164, 1162, 1157, 1163, 1160, 1166, 1172,
2942 1169, 0, 1167, 1171, 1161, 1192, 1192, 1187, 1162, 1163,
2943 1165, 1170, 1166, 1173, 1165, 1186, 1175, 1165, 1165, 0,
2944 1167, 1171, 1165, 0, 1174, 1166, 1169, 1169, 1165, 1167,
2945
2946 1171, 1177, 1165, 1170, 1192, 1173, 1165, 1165, 1170, 1187,
2947 1173, 1165, 1175, 1175, 1165, 1165, 1174, 1176, 1178, 1165,
2948 1178, 1174, 1181, 1176, 1179, 1165, 1180, 1177, 1177, 1165,
2949 1182, 1179, 1183, 1184, 1185, 1180, 1188, 1182, 1191, 1189,
2950 1181, 0, 1178, 1185, 1176, 1178, 1184, 1178, 1195, 1181,
2951 0, 1179, 1193, 1180, 1183, 1208, 1218, 1182, 1188, 1183,
2952 1184, 1185, 1189, 1188, 1191, 1191, 1189, 1190, 1193, 1196,
2953 1198, 1195, 1190, 1197, 1190, 1195, 1190, 1200, 1190, 1193,
2954 1202, 1196, 1197, 1218, 1199, 1190, 1201, 1208, 1198, 1199,
2955 1204, 1201, 0, 1203, 1190, 1200, 1196, 1198, 1209, 1190,
2956
2957 1197, 1190, 1202, 1190, 1200, 1190, 1203, 1202, 1204, 1207,
2958 1205, 1206, 1210, 1201, 1211, 1213, 1199, 1204, 1205, 1206,
2959 1203, 1212, 1207, 1215, 1209, 1209, 1214, 1211, 1213, 1217,
2960 1220, 1210, 1215, 1216, 1219, 1216, 1207, 1205, 1206, 1210,
2961 1221, 1211, 1213, 1212, 1214, 1223, 1219, 1225, 1212, 1224,
2962 1215, 1217, 1226, 1214, 1227, 1225, 1217, 1220, 1229, 1228,
2963 1216, 1219, 1230, 0, 1234, 1221, 1228, 1221, 1231, 1223,
2964 1226, 1224, 1223, 1235, 1225, 1236, 1224, 1232, 1233, 1226,
2965 1235, 1227, 1240, 1232, 1233, 1229, 1228, 1237, 1230, 1230,
2966 1231, 1234, 1239, 1238, 1237, 1231, 1244, 1241, 1243, 1236,
2967
2968 1235, 0, 1236, 1246, 1232, 1233, 1241, 1240, 1244, 1240,
2969 1239, 1245, 1247, 1248, 1237, 1238, 1246, 0, 1251, 1239,
2970 1238, 1249, 1243, 1244, 1241, 1243, 1253, 1250, 1252, 1258,
2971 1246, 1254, 1248, 1245, 1247, 1253, 1255, 1256, 1245, 1247,
2972 1248, 1259, 0, 1249, 1251, 1251, 1261, 1260, 1249, 1250,
2973 1252, 1256, 1254, 1253, 1250, 1252, 1255, 1262, 1254, 1263,
2974 1264, 1258, 1265, 1255, 1256, 1266, 1271, 1263, 1268, 1260,
2975 1269, 1272, 1266, 1259, 1260, 1262, 1264, 1269, 1261, 1270,
2976 1268, 1273, 1275, 1270, 1262, 0, 1263, 1264, 1276, 1265,
2977 1279, 0, 1266, 1277, 1276, 1268, 1280, 1269, 1271, 1282,
2978
2979 1277, 1276, 1273, 1272, 1278, 1279, 1270, 1281, 1273, 1280,
2980 1286, 1278, 1283, 1287, 1275, 1276, 1281, 1279, 1285, 1283,
2981 1277, 1276, 1284, 1280, 1284, 1282, 1282, 1285, 1289, 1288,
2982 1291, 1278, 1286, 1288, 1281, 1293, 1292, 1286, 1291, 1283,
2983 1287, 1292, 1294, 0, 1293, 1285, 1295, 1297, 1296, 1284,
2984 1289, 1298, 1300, 1302, 1298, 1289, 1288, 1291, 1301, 1297,
2985 1294, 1296, 1293, 1298, 1299, 1295, 1302, 1299, 1292, 1294,
2986 1300, 1304, 1305, 1295, 1297, 1296, 0, 1306, 1298, 1300,
2987 1302, 1298, 1307, 1301, 1308, 1301, 1299, 1307, 1309, 1309,
2988 1311, 1299, 1308, 1306, 1299, 1305, 1310, 1312, 1313, 1305,
2989
2990 1315, 1314, 1316, 1304, 1306, 1310, 0, 1313, 1314, 1316,
2991 1321, 1308, 1311, 1318, 1307, 1309, 1322, 1311, 1325, 1312,
2992 1326, 1319, 1315, 1310, 1312, 1313, 1318, 1315, 1314, 1316,
2993 1319, 0, 1320, 1323, 0, 1326, 1321, 1321, 1324, 1322,
2994 1318, 1320, 1323, 1322, 1327, 1328, 1324, 1326, 1319, 1329,
2995 1325, 1330, 1327, 1332, 1331, 1336, 1338, 1333, 1328, 1320,
2996 1323, 1329, 1331, 1330, 1334, 1324, 1337, 1339, 1338, 1344,
2997 1335, 1327, 1328, 1336, 1341, 1332, 1329, 1333, 1330, 1335,
2998 1332, 1331, 1336, 1338, 1333, 1339, 1334, 1342, 1340, 1343,
2999 1345, 1334, 1337, 1337, 1339, 1340, 1344, 1335, 1346, 1347,
3000
3001 1341, 1341, 1343, 1349, 1350, 1347, 1348, 1354, 0, 1346,
3002 0, 1345, 1351, 0, 1352, 1340, 1343, 1345, 1357, 1342,
3003 1355, 0, 1358, 0, 1356, 1346, 1347, 1357, 1348, 1362,
3004 1361, 1359, 1365, 1348, 1354, 1349, 1350, 1358, 1351, 1351,
3005 1352, 1352, 1356, 1355, 1359, 1357, 1363, 1355, 1360, 1358,
3006 1361, 1356, 1364, 1363, 1365, 1362, 1362, 1361, 1359, 1365,
3007 1360, 1366, 1367, 1368, 1369, 1370, 0, 1371, 1368, 1369,
3008 1367, 1364, 1370, 1363, 1366, 1360, 1372, 1373, 1375, 1364,
3009 1374, 1379, 1376, 1382, 1372, 1373, 1385, 0, 1366, 1367,
3010 1376, 0, 1370, 1371, 1371, 1368, 1369, 1380, 1374, 1377,
3011
3012 1375, 1378, 1384, 1372, 1373, 1375, 1377, 1374, 1383, 1376,
3013 1378, 1381, 1381, 1379, 1386, 1382, 1383, 1387, 1385, 1380,
3014 1390, 1391, 1386, 1384, 1380, 1387, 1377, 1391, 1378, 1384,
3015 1392, 1388, 1389, 1390, 1393, 1383, 1395, 1396, 1381, 1388,
3016 1389, 1386, 1392, 1394, 1387, 1397, 1398, 1390, 1391, 0,
3017 1410, 1395, 1399, 1401, 0, 1400, 1405, 1392, 1388, 1389,
3018 1393, 1393, 1402, 1395, 1396, 1405, 1406, 1394, 1398, 1400,
3019 1394, 1401, 1397, 1398, 1403, 1399, 1402, 1410, 1403, 1399,
3020 1401, 1411, 1400, 1405, 1407, 1408, 1409, 1412, 1406, 1402,
3021 1413, 1403, 1408, 1406, 1415, 1414, 1407, 1409, 1421, 1403,
3022
3023 1416, 1403, 1413, 1411, 1422, 1403, 1417, 1418, 1411, 1414,
3024 0, 1407, 1408, 1409, 1418, 1419, 1415, 1413, 1403, 1412,
3025 1428, 1415, 1414, 1416, 1419, 1420, 1424, 1416, 1427, 1417,
3026 1421, 1422, 1420, 1417, 1418, 1424, 1429, 1426, 1430, 1432,
3027 1435, 0, 1419, 1426, 1442, 1430, 1428, 1428, 1434, 1436,
3028 1427, 1437, 1420, 1424, 1440, 1427, 1439, 1443, 0, 1441,
3029 1436, 1440, 1437, 1446, 1426, 1430, 1432, 1435, 1429, 1443,
3030 1442, 1442, 1434, 1444, 1445, 1434, 1436, 1441, 1437, 1444,
3031 1439, 1440, 1445, 1439, 1443, 1446, 1441, 1448, 1449, 1447,
3032 1446, 1452, 1451, 1452, 1450, 0, 1453, 1454, 1455, 1457,
3033
3034 1444, 1445, 1447, 1450, 1451, 1456, 1449, 1455, 1458, 0,
3035 1454, 1457, 1461, 1448, 1448, 1449, 1447, 1459, 1452, 1451,
3036 1464, 1450, 1453, 1453, 1454, 1455, 1457, 1456, 1462, 1460,
3037 1463, 1466, 1456, 1462, 1465, 1458, 1460, 1468, 1461, 1461,
3038 1459, 1469, 1465, 1464, 1459, 1470, 1463, 1464, 1475, 1471,
3039 1473, 1476, 1469, 1466, 1470, 1462, 1460, 1463, 1466, 1472,
3040 1472, 1465, 1471, 1473, 1468, 1479, 1480, 1472, 1469, 1474,
3041 1483, 1474, 1470, 1476, 1475, 1475, 1471, 1473, 1476, 1481,
3042 1484, 1477, 1478, 1482, 1480, 1485, 1472, 1472, 1477, 1478,
3043 1482, 1486, 1479, 1480, 1487, 1483, 1474, 1483, 1486, 0,
3044
3045 1489, 1481, 1484, 1490, 1491, 0, 1481, 1484, 1477, 1478,
3046 1482, 1492, 1491, 1489, 1494, 1498, 1495, 1485, 1486, 1495,
3047 1496, 0, 1497, 1500, 1499, 1504, 1487, 1489, 1498, 1501,
3048 1490, 1491, 1492, 1499, 1502, 1500, 1494, 1505, 1492, 1507,
3049 1504, 1494, 1498, 1495, 1505, 1503, 1496, 1496, 1497, 1497,
3050 1500, 1499, 1504, 1501, 1503, 1506, 1501, 1511, 1506, 1508,
3051 1502, 1502, 1515, 1516, 1505, 1512, 1513, 1509, 1513, 1524,
3052 1506, 1507, 1503, 1517, 1514, 1511, 1519, 1518, 1524, 1506,
3053 1520, 1508, 1506, 1509, 1511, 1506, 1508, 1512, 1521, 1515,
3054 1522, 1509, 1512, 1513, 1509, 1516, 1524, 1506, 1514, 1518,
3055
3056 1523, 1514, 1519, 1519, 1518, 1517, 1520, 1520, 1525, 1527,
3057 1509, 1526, 1522, 1528, 1523, 1529, 1525, 1522, 1526, 1530,
3058 1521, 1531, 1532, 0, 1534, 0, 1532, 1523, 1533, 1539,
3059 1535, 1536, 1537, 1527, 0, 1525, 1527, 1538, 1526, 1537,
3060 1536, 1530, 1539, 1544, 1538, 1528, 1530, 1529, 1540, 1532,
3061 1533, 1534, 1535, 1531, 1541, 1533, 1539, 1535, 1536, 1537,
3062 1542, 1540, 1547, 1543, 1538, 1543, 1545, 1541, 1544, 1542,
3063 1544, 1548, 1550, 1551, 1545, 1540, 1552, 1547, 1549, 1554,
3064 1551, 1541, 1553, 1552, 1556, 1554, 1548, 1542, 1558, 1547,
3065 1543, 1560, 1549, 1545, 1557, 1553, 1561, 1559, 1548, 1563,
3066
3067 1551, 1557, 1563, 1552, 1550, 1549, 1554, 1562, 1561, 1553,
3068 1558, 1556, 1559, 1564, 1565, 1558, 1566, 1560, 1560, 1567,
3069 1562, 1557, 1564, 1561, 1559, 1569, 1563, 1568, 1566, 1573,
3070 1568, 1573, 1565, 1575, 1562, 1574, 1569, 1571, 1576, 1567,
3071 1564, 1565, 1571, 1566, 1578, 1568, 1567, 0, 1577, 1571,
3072 1579, 1580, 1569, 1578, 1568, 1586, 1573, 1568, 1581, 1574,
3073 1575, 1583, 1574, 1577, 1571, 1576, 1586, 1584, 1582, 1571,
3074 1591, 1578, 1581, 1585, 1579, 1577, 1582, 1579, 1580, 1587,
3075 1590, 1585, 1586, 1583, 1588, 1581, 1592, 1589, 1583, 1584,
3076 1589, 1596, 1588, 0, 1584, 1582, 1593, 1587, 1590, 1595,
3077
3078 1585, 1594, 1591, 1593, 1596, 1589, 1587, 1590, 1595, 1597,
3079 1598, 1588, 1603, 1592, 1589, 1594, 1604, 1589, 1596, 1601,
3080 1597, 1601, 1602, 1593, 1605, 1598, 1595, 1604, 1594, 0,
3081 1606, 1602, 0, 1607, 1609, 1610, 1597, 1598, 1603, 1603,
3082 1615, 1612, 1605, 1604, 1610, 1608, 1601, 1607, 1608, 1602,
3083 1612, 1605, 1606, 1615, 1616, 1618, 1609, 1606, 1611, 1607,
3084 1607, 1609, 1610, 1608, 1611, 1613, 1616, 1615, 1612, 1619,
3085 1613, 1617, 1608, 1621, 1607, 1608, 1617, 1618, 1620, 1622,
3086 1623, 1616, 1618, 1624, 0, 1611, 1627, 1620, 1629, 1625,
3087 1628, 1632, 1630, 1627, 0, 1645, 0, 1613, 1617, 1634,
3088
3089 1621, 1619, 1623, 1628, 1636, 1620, 1630, 1623, 1631, 1638,
3090 1625, 1622, 1636, 1627, 1631, 1624, 1625, 1628, 1634, 1630,
3091 1629, 1637, 1639, 1632, 1640, 1641, 1634, 1645, 1638, 1637,
3092 1642, 1636, 1631, 1643, 1644, 1631, 1638, 1646, 1640, 1641,
3093 1639, 1631, 0, 1642, 1647, 1648, 1643, 1649, 1637, 1639,
3094 1650, 1640, 1641, 1652, 1649, 1644, 1651, 1642, 1647, 1650,
3095 1643, 1644, 1653, 1654, 1651, 1655, 1656, 1652, 1654, 1646,
3096 1658, 1647, 1648, 1660, 1649, 1656, 1655, 1650, 1659, 1661,
3097 1652, 1662, 1644, 1651, 1664, 1659, 1668, 1663, 1669, 1667,
3098 1654, 1665, 1655, 1656, 1653, 1665, 1660, 1658, 1668, 1670,
3099
3100 1660, 1661, 1664, 1662, 1667, 1659, 1661, 1670, 1662, 1663,
3101 1671, 1664, 1672, 1668, 1663, 1669, 1667, 1673, 1665, 1674,
3102 1672, 1675, 1679, 1676, 1680, 1671, 1670, 1677, 1681, 0,
3103 1679, 1680, 1674, 1691, 1683, 1684, 1685, 1671, 1676, 1672,
3104 1682, 1675, 1677, 1683, 1673, 1686, 1674, 1687, 1675, 1679,
3105 1676, 1680, 1690, 1689, 1677, 1682, 1684, 1692, 1693, 1695,
3106 1681, 1683, 1684, 1685, 1694, 1691, 1700, 1682, 1698, 1686,
3107 1690, 1696, 1686, 1693, 1687, 1689, 1697, 1698, 1696, 1690,
3108 1689, 1697, 1701, 1695, 1692, 1693, 1695, 1699, 1700, 1694,
3109 1702, 1694, 1703, 1700, 1704, 1698, 1699, 1706, 1696, 1711,
3110
3111 1705, 1709, 1712, 1697, 1701, 1707, 1704, 1703, 1702, 1701,
3112 1706, 1708, 1707, 1710, 1699, 1706, 0, 1702, 1708, 1703,
3113 1722, 1704, 1705, 1709, 1706, 1710, 1711, 1705, 1709, 1713,
3114 1717, 1715, 1707, 1708, 1712, 1713, 1716, 1706, 1708, 1715,
3115 1710, 1717, 1718, 1716, 1731, 1708, 1719, 1722, 1720, 1718,
3116 1720, 1734, 1721, 1723, 1725, 1724, 1713, 1717, 1715, 1726,
3117 1727, 1720, 1724, 1716, 1728, 1729, 1727, 1730, 1736, 1718,
3118 1728, 1719, 1732, 1719, 1738, 1720, 1731, 1720, 1721, 1721,
3119 1723, 1725, 1724, 1734, 1735, 1726, 1726, 1727, 1739, 1742,
3120 1730, 1728, 1729, 1735, 1730, 1737, 1732, 1737, 1738, 1732,
3121
3122 1736, 1738, 1740, 1741, 1743, 1744, 1747, 1745, 0, 1740,
3123 1743, 1735, 1749, 1746, 1751, 1739, 1742, 1750, 1754, 1749,
3124 0, 0, 1737, 1754, 1750, 1741, 1757, 1744, 1760, 1740,
3125 1741, 1743, 1744, 1745, 1745, 1746, 1755, 0, 1747, 1749,
3126 1746, 1748, 1748, 1748, 1750, 1752, 1751, 1756, 1748, 1755,
3127 1754, 1757, 1752, 1757, 1759, 1758, 1748, 1762, 1761, 1756,
3128 1760, 1763, 1764, 1755, 1762, 1766, 1759, 1763, 1748, 1748,
3129 1748, 1758, 1752, 1767, 1756, 1748, 1761, 1765, 1765, 1769,
3130 1767, 1759, 1758, 1770, 1762, 1761, 1771, 1774, 1763, 1764,
3131 1768, 1766, 1766, 1771, 1775, 1768, 1775, 1776, 1778, 1780,
3132
3133 1767, 1779, 1781, 1782, 1765, 1769, 1769, 1779, 1783, 1782,
3134 1770, 1787, 1784, 1771, 1774, 1776, 1778, 1768, 1785, 1791,
3135 1783, 1775, 1786, 1786, 1776, 1778, 1788, 1788, 1779, 1781,
3136 1782, 1780, 1784, 1789, 1792, 1783, 1785, 1787, 1787, 1784,
3137 1793, 1791, 1794, 1795, 1789, 1785, 1791, 1793, 1796, 1786,
3138 1797, 1798, 1799, 1788, 1800, 1801, 1802, 1805, 1805, 1804,
3139 1789, 1800, 1794, 1801, 1803, 1807, 1792, 1793, 1804, 1794,
3140 1799, 1802, 1806, 1798, 1808, 1795, 0, 1797, 1798, 1799,
3141 1796, 1800, 1801, 1802, 1805, 1809, 1804, 1811, 1803, 1810,
3142 1814, 1803, 1809, 1813, 1816, 1814, 1815, 1807, 1806, 1806,
3143
3144 1813, 1810, 0, 1811, 1821, 1817, 1808, 1818, 1822, 1824,
3145 1811, 0, 1809, 1817, 1811, 1825, 1810, 1814, 1815, 1818,
3146 1813, 1816, 1823, 1815, 1827, 1820, 1834, 1821, 0, 1822,
3147 1811, 1821, 1817, 1820, 1818, 1822, 1824, 1828, 1825, 1826,
3148 1823, 1829, 1825, 1828, 1826, 1830, 1837, 1831, 1835, 1823,
3149 1832, 1827, 1820, 1830, 1829, 1826, 1833, 1832, 1834, 1836,
3150 1835, 1838, 1839, 1833, 1828, 1844, 1826, 1848, 1829, 1831,
3151 1849, 1826, 1830, 1837, 1831, 1835, 1841, 1832, 1846, 1842,
3152 1853, 1836, 1851, 1833, 1842, 1839, 1836, 1838, 1838, 1839,
3153 1843, 1847, 1844, 1852, 1841, 1842, 1847, 1843, 1855, 1848,
3154
3155 1850, 1850, 1849, 1841, 1851, 1846, 1842, 1856, 1852, 1851,
3156 1859, 1842, 1853, 1855, 1857, 1861, 1858, 1843, 1858, 1860,
3157 1852, 1863, 1862, 1847, 1860, 1855, 1871, 1850, 1869, 1857,
3158 1856, 1866, 1867, 1872, 1856, 1865, 1863, 1870, 1873, 1866,
3159 1874, 1857, 1859, 1858, 1862, 1873, 1860, 1861, 1863, 1862,
3160 1865, 1876, 1869, 1871, 1867, 1869, 1875, 1878, 1866, 1867,
3161 1872, 1877, 1865, 1870, 1870, 1873, 1882, 1880, 0, 1884,
3162 1883, 1886, 1874, 1876, 0, 1878, 1887, 1875, 1876, 1888,
3163 1889, 1890, 1877, 1875, 1878, 1883, 1886, 1891, 1877, 1880,
3164 1882, 1887, 1893, 1882, 1880, 1884, 1884, 1883, 1886, 1890,
3165
3166 1892, 1888, 1894, 1887, 1895, 1896, 1888, 1889, 1890, 1891,
3167 1898, 1895, 1897, 1899, 1891, 0, 1893, 1901, 1898, 1893,
3168 1900, 1897, 1892, 1896, 1902, 1903, 1904, 1892, 1905, 1894,
3169 0, 1895, 1896, 1902, 1907, 1904, 1899, 1898, 1909, 1897,
3170 1899, 1905, 1900, 1903, 1910, 1907, 1912, 1900, 1908, 1901,
3171 1911, 1902, 1903, 1904, 1913, 1905, 1909, 1908, 1915, 1919,
3172 1907, 1907, 1914, 1921, 1912, 1909, 1927, 1922, 1914, 1913,
3173 1910, 1910, 1907, 1912, 1916, 1908, 1911, 1911, 1922, 1925,
3174 1915, 1913, 1923, 1926, 1931, 1915, 1919, 1921, 1916, 1914,
3175 1921, 1925, 1928, 1923, 1922, 1929, 1926, 0, 1927, 1930,
3176
3177 1934, 1916, 1928, 1935, 1932, 1938, 1925, 1937, 1940, 1923,
3178 1926, 1931, 1939, 1940, 1942, 1943, 0, 0, 1941, 1928,
3179 1986, 1929, 1929, 1932, 1930, 1941, 1930, 1934, 1937, 1935,
3180 1935, 1932, 1939, 1943, 1937, 1940, 1945, 1938, 1944, 1939,
3181 1942, 1942, 1943, 1946, 1944, 1941, 1947, 1948, 1948, 1952,
3182 1949, 1945, 1986, 1953, 1950, 1955, 1952, 1953, 1946, 1956,
3183 1958, 1947, 1949, 1945, 1954, 1944, 1959, 1950, 1956, 0,
3184 1946, 1957, 1963, 1947, 1948, 1950, 1952, 1949, 1957, 1954,
3185 1953, 1950, 1955, 1960, 1958, 1962, 1956, 1958, 1959, 1965,
3186 1960, 1954, 1964, 1959, 1950, 1966, 1968, 1963, 1957, 1963,
3187
3188 1970, 1964, 1971, 1972, 0, 1974, 1973, 1962, 1977, 1970,
3189 1960, 1965, 1962, 1974, 1968, 1966, 1965, 1976, 1972, 1964,
3190 1971, 1977, 1966, 1968, 1978, 1979, 1979, 1970, 1980, 1971,
3191 1972, 1973, 1974, 1973, 1981, 1977, 1982, 1984, 1983, 1988,
3192 1985, 0, 1976, 0, 1976, 1993, 1984, 1985, 1987, 1989,
3193 1980, 1978, 1979, 1988, 1991, 1980, 1992, 1997, 1982, 1981,
3194 1983, 1981, 1991, 1982, 1984, 1983, 1988, 1985, 1989, 1992,
3195 1987, 1994, 1993, 1995, 1998, 1987, 1989, 1996, 1999, 2000,
3196 2002, 1991, 2004, 1992, 1996, 1995, 2005, 2003, 2000, 1997,
3197 0, 2001, 0, 2006, 2007, 0, 1998, 1994, 1994, 2001,
3198
3199 1995, 1998, 2003, 1999, 1996, 1999, 2000, 2002, 2004, 2004,
3200 2001, 2006, 2005, 2005, 2003, 2008, 2007, 2014, 2001, 2010,
3201 2006, 2007, 2010, 2011, 2008, 2012, 2001, 2013, 2015, 2018,
3202 2017, 2012, 2013, 2021, 2022, 2014, 2019, 2010, 2024, 0,
3203 0, 2022, 2008, 2015, 2014, 2017, 2010, 2021, 2011, 2010,
3204 2011, 2018, 2012, 2023, 0, 2015, 2018, 2017, 2019, 2013,
3205 2021, 2022, 2029, 2019, 2025, 2024, 2026, 2027, 2028, 2031,
3206 2032, 2023, 2033, 2025, 2029, 2026, 2034, 0, 2027, 2033,
3207 2023, 2028, 2035, 2036, 2031, 2032, 2041, 2039, 2042, 2029,
3208 2043, 2025, 2042, 2026, 2027, 2028, 2031, 2032, 2034, 2033,
3209
3210 2039, 2036, 2043, 2034, 2035, 2046, 2047, 2041, 2039, 2035,
3211 2036, 2044, 2048, 2041, 2039, 2042, 2045, 2043, 2045, 2049,
3212 2044, 2050, 2051, 2046, 2056, 2052, 2053, 2039, 2057, 2050,
3213 2048, 2054, 2046, 2047, 2060, 2058, 2054, 2055, 2044, 2048,
3214 2053, 2060, 2055, 2045, 2059, 2051, 2049, 2052, 2050, 2051,
3215 2063, 2066, 2052, 2053, 2064, 2065, 2056, 2067, 2054, 2058,
3216 2057, 2060, 2058, 2059, 2070, 2069, 2071, 2073, 2064, 2055,
3217 2068, 2059, 2072, 2065, 2069, 2075, 0, 2063, 2066, 2064,
3218 2064, 2064, 2065, 2067, 2067, 2068, 2074, 2077, 2071, 2079,
3219 0, 0, 2069, 2071, 2073, 2064, 2070, 2068, 2072, 2072,
3220
3221 2083, 2082, 2078, 2082, 2080, 2085, 2064, 2075, 2074, 2078,
3222 2077, 2080, 2079, 2074, 2077, 2084, 2079, 2085, 2086, 2084,
3223 2091, 2087, 2083, 2088, 2090, 2091, 2089, 2083, 2082, 2078,
3224 2087, 2080, 2085, 2089, 2088, 2092, 2093, 2094, 2095, 2098,
3225 2086, 2097, 2084, 2096, 2096, 2086, 2090, 2091, 2087, 2094,
3226 2088, 2090, 2100, 2089, 2098, 2101, 2103, 2105, 0, 2093,
3227 2095, 2097, 2092, 2093, 2094, 2095, 2098, 2099, 2097, 2101,
3228 2096, 2102, 2111, 2106, 2100, 2099, 2105, 2107, 2111, 2100,
3229 2102, 2106, 2101, 2103, 2105, 2107, 2108, 2110, 2109, 2115,
3230 2108, 2109, 2112, 2119, 2099, 2110, 2113, 2117, 2102, 2111,
3231
3232 2106, 2115, 2113, 2120, 2107, 2118, 2121, 2112, 2123, 2127,
3233 2122, 2117, 2124, 2108, 2110, 2109, 2115, 2125, 2119, 2112,
3234 2119, 2126, 2123, 2113, 2117, 2124, 2118, 2128, 2121, 2129,
3235 2120, 2125, 2118, 2121, 2122, 2123, 2127, 2122, 2130, 2124,
3236 2131, 2129, 2132, 2133, 2125, 2132, 2134, 2126, 2126, 2135,
3237 2138, 2139, 2130, 2137, 2128, 2141, 2129, 2138, 2139, 2140,
3238 2132, 2142, 2144, 0, 2146, 2130, 2131, 2131, 0, 2132,
3239 2133, 2135, 2132, 2134, 2140, 2137, 2135, 2138, 2139, 2143,
3240 2137, 2145, 2141, 2147, 2149, 2148, 2140, 2143, 2142, 2144,
3241 2145, 2146, 2150, 2154, 2156, 2147, 2151, 2152, 2157, 2159,
3242
3243 2153, 2154, 0, 0, 2164, 2162, 2143, 2148, 2145, 2151,
3244 2147, 2149, 2148, 2153, 2158, 2152, 2156, 2161, 0, 2150,
3245 2154, 2156, 2158, 2151, 2152, 2157, 2159, 2153, 2160, 2162,
3246 2163, 2164, 2162, 2168, 2165, 2166, 2170, 2160, 2161, 2172,
3247 2167, 2158, 2165, 2170, 2161, 2163, 2171, 2166, 2167, 2174,
3248 2171, 2172, 2173, 0, 2180, 2160, 2163, 2163, 2176, 2177,
3249 2168, 2165, 2166, 2170, 2182, 2183, 2172, 2167, 2187, 2175,
3250 2178, 2177, 2163, 2171, 2232, 2173, 2174, 2175, 2183, 2173,
3251 2176, 2180, 2178, 2181, 2182, 2176, 2177, 2186, 2186, 2184,
3252 2181, 2182, 2183, 2185, 2187, 2187, 2175, 2178, 2184, 2188,
3253
3254 2189, 2232, 2185, 2192, 2190, 2199, 2199, 2193, 2196, 0,
3255 2181, 2194, 2204, 2195, 2186, 2195, 2184, 2188, 2192, 2190,
3256 2185, 2190, 2196, 2198, 2206, 2189, 2188, 2189, 2190, 2193,
3257 2192, 2190, 2199, 2194, 2193, 2196, 2197, 2201, 2194, 2202,
3258 2195, 2203, 2197, 2205, 2204, 2198, 2190, 2207, 2190, 2205,
3259 2198, 2208, 2209, 2203, 2209, 2217, 2206, 2210, 2211, 2201,
3260 0, 2202, 2212, 2197, 2201, 2213, 2202, 0, 2203, 2207,
3261 2205, 2210, 2214, 2208, 2207, 2215, 0, 2218, 2208, 2209,
3262 2212, 2216, 2211, 2213, 2210, 2211, 2223, 2217, 2219, 2212,
3263 2214, 2221, 2213, 2215, 2216, 2224, 2225, 2226, 2221, 2214,
3264
3265 0, 0, 2215, 2227, 2223, 2226, 2251, 2233, 2216, 2218,
3266 2228, 2219, 2228, 2223, 2236, 2219, 2230, 2228, 2221, 2233,
3267 2231, 2224, 2224, 2226, 2226, 2227, 2234, 2230, 2225, 2236,
3268 2227, 2231, 2226, 2238, 2233, 2237, 2239, 2228, 2251, 2228,
3269 2241, 2236, 2243, 2230, 2234, 2238, 2237, 2231, 2242, 2243,
3270 2244, 2239, 2245, 2234, 2246, 2248, 0, 2252, 2253, 2249,
3271 2238, 0, 2237, 2239, 2241, 2244, 2250, 2241, 2254, 2243,
3272 2242, 2255, 0, 2256, 2261, 2242, 2253, 2244, 2258, 2245,
3273 2246, 2246, 2248, 2249, 2255, 2253, 2249, 2257, 2250, 2252,
3274 2260, 2258, 0, 2250, 2262, 2254, 2259, 2263, 2255, 2256,
3275
3276 2256, 2266, 2257, 2265, 2259, 2258, 2261, 2262, 2267, 2268,
3277 2269, 2270, 2273, 2271, 2257, 2269, 2260, 2260, 2272, 2263,
3278 2271, 2262, 2276, 2259, 2263, 2266, 2265, 2277, 2266, 2270,
3279 2265, 2268, 2274, 2283, 2277, 2267, 2268, 0, 2270, 2273,
3280 2271, 2272, 2269, 2278, 2276, 2272, 2274, 2279, 2280, 2276,
3281 2278, 2281, 2284, 2285, 2277, 2282, 2286, 2290, 2281, 2274,
3282 2279, 2288, 2285, 2287, 2286, 2283, 2293, 2288, 2295, 2292,
3283 2278, 2280, 2290, 2284, 2279, 2280, 2291, 2282, 2281, 2284,
3284 2285, 2294, 2282, 2286, 2290, 2287, 2298, 2291, 2288, 2299,
3285 2287, 2292, 2307, 2295, 2300, 2295, 2292, 2302, 2293, 2298,
3286
3287 2294, 2301, 2301, 2291, 2305, 2306, 2308, 2307, 2294, 2312,
3288 0, 2309, 2316, 2298, 2328, 2299, 2299, 2314, 2300, 2307,
3289 2320, 2300, 2324, 2302, 2302, 2316, 2314, 2305, 2301, 2309,
3290 2317, 2305, 2322, 2308, 2321, 2321, 2312, 2306, 2309, 2316,
3291 2323, 2317, 2320, 2326, 2314, 2329, 2328, 2320, 2331, 2324,
3292 2334, 2332, 2330, 2331, 2322, 2336, 2338, 2317, 2334, 2322,
3293 2340, 2321, 2323, 2330, 2339, 2335, 2343, 2323, 2349, 2340,
3294 2326, 2329, 2329, 2332, 2338, 2331, 2341, 2334, 2332, 2330,
3295 2335, 2344, 2336, 2338, 2348, 2350, 2345, 2340, 2341, 2346,
3296 2351, 2352, 2335, 2343, 2345, 2349, 2339, 2353, 2346, 2351,
3297
3298 2354, 2355, 2356, 2341, 2358, 2344, 2357, 2350, 2344, 2352,
3299 2348, 2348, 2350, 2345, 2355, 2356, 2346, 2351, 2352, 2353,
3300 2360, 2357, 2361, 2359, 2353, 2354, 2358, 2354, 2355, 2356,
3301 2359, 2358, 2362, 2357, 2363, 2364, 2365, 2366, 2367, 0,
3302 2368, 2370, 2360, 2369, 0, 0, 2366, 2360, 2372, 2361,
3303 2359, 2365, 2374, 2376, 0, 2372, 2370, 2371, 2377, 2362,
3304 2367, 2363, 2364, 2365, 2366, 2367, 2368, 2368, 2370, 2369,
3305 2369, 2373, 2371, 2375, 2378, 2372, 2379, 2380, 2381, 2374,
3306 2376, 2375, 2373, 2386, 2371, 2377, 2383, 2382, 2384, 2385,
3307 2378, 2379, 0, 2381, 2382, 2384, 2385, 2380, 2373, 2387,
3308
3309 2375, 2378, 2389, 2379, 2380, 2381, 2388, 2388, 2383, 2389,
3310 2386, 2390, 2393, 2383, 2382, 2384, 2385, 2387, 2391, 2392,
3311 2402, 2391, 2394, 2395, 2396, 2390, 2387, 2393, 2397, 2389,
3312 2400, 2406, 2392, 2388, 2399, 2400, 2396, 2404, 2390, 2393,
3313 2397, 2395, 2407, 2399, 2402, 2391, 2392, 2402, 2394, 2394,
3314 2395, 2396, 2401, 2403, 2405, 2397, 2401, 2400, 2406, 2404,
3315 2408, 2399, 2410, 2413, 2404, 2412, 2403, 2414, 2418, 2407,
3316 2415, 0, 2413, 2416, 0, 2418, 2405, 2420, 2415, 2401,
3317 2403, 2405, 2420, 2414, 2419, 2416, 2408, 2408, 2410, 2410,
3318 2413, 2412, 2412, 2419, 2414, 2418, 2421, 2415, 2422, 2423,
3319
3320 2416, 2425, 2424, 2421, 2420, 2426, 2423, 2428, 2425, 2427,
3321 2430, 2419, 2431, 2434, 2426, 2433, 2422, 2435, 2427, 2438,
3322 2433, 0, 0, 2421, 2431, 2422, 2423, 2424, 2425, 2424,
3323 2437, 2434, 2426, 2428, 2428, 2441, 2427, 2430, 2439, 2431,
3324 2434, 2440, 2433, 2443, 2435, 2444, 2438, 2439, 2437, 2442,
3325 2440, 2446, 2443, 2445, 2444, 2441, 2447, 2437, 2448, 2446,
3326 2449, 2442, 2441, 2450, 2445, 2439, 2451, 2452, 2440, 2449,
3327 2443, 2453, 2444, 2454, 2455, 2457, 2442, 2460, 2446, 2462,
3328 2445, 2456, 2454, 2447, 2450, 2448, 2455, 2449, 2458, 2456,
3329 2450, 2459, 2461, 2451, 2452, 2458, 2463, 2457, 2459, 2460,
3330
3331 2454, 2455, 2457, 2453, 2460, 2464, 2462, 2468, 2456, 2470,
3332 0, 0, 2466, 2472, 2469, 2458, 2479, 2461, 2459, 2461,
3333 2466, 2463, 2469, 2463, 2470, 2468, 2471, 2478, 2482, 0,
3334 2473, 2487, 2464, 2471, 2468, 2472, 2470, 2473, 2474, 2466,
3335 2472, 2469, 2477, 2479, 2480, 2483, 2474, 2486, 2485, 2477,
3336 2481, 2478, 2488, 2471, 2478, 2482, 2480, 2473, 2487, 2481,
3337 2485, 2490, 2493, 2496, 2497, 2474, 2488, 2495, 2483, 2477,
3338 2486, 2480, 2483, 2490, 2486, 2485, 2491, 2481, 2492, 2488,
3339 2498, 2496, 2495, 2491, 2499, 2492, 2500, 2497, 2490, 2493,
3340 2496, 2497, 2499, 2501, 2495, 2503, 2502, 2504, 2505, 0,
3341
3342 2510, 2512, 2513, 2491, 2511, 2492, 2503, 2498, 0, 2511,
3343 0, 2499, 2504, 2500, 2502, 2501, 2513, 2515, 2514, 2516,
3344 2501, 2517, 2503, 2502, 2504, 2505, 2510, 2510, 2512, 2513,
3345 2518, 2511, 2514, 2520, 2523, 2515, 2524, 2516, 2525, 0,
3346 2526, 2528, 2518, 0, 2515, 2514, 2516, 2527, 2517, 2528,
3347 2530, 2525, 2529, 2533, 2534, 2536, 2523, 2518, 2524, 2532,
3348 2520, 2523, 2526, 2524, 2537, 2525, 2527, 2526, 2528, 2530,
3349 2529, 2532, 2535, 2538, 2527, 2533, 2534, 2530, 2539, 2529,
3350 2533, 2534, 2536, 2541, 2535, 2540, 2532, 2542, 2543, 2544,
3351 2546, 2537, 2541, 2559, 0, 2545, 2542, 2547, 2539, 2535,
3352
3353 2538, 2548, 2546, 2549, 2552, 2539, 2553, 2540, 2554, 0,
3354 2541, 2544, 2540, 2558, 2542, 2556, 2544, 2546, 2552, 2547,
3355 2543, 2545, 2545, 2557, 2547, 2559, 2558, 2561, 2548, 2555,
3356 2549, 2552, 2554, 2553, 2555, 2554, 2560, 2556, 2562, 2563,
3357 2558, 2564, 2556, 2566, 2567, 2557, 2565, 2568, 0, 2561,
3358 2557, 2563, 2565, 2571, 2561, 2569, 2562, 2572, 2579, 2560,
3359 2564, 2555, 2573, 2560, 2571, 2562, 2563, 2579, 2564, 2568,
3360 2569, 2577, 2575, 2565, 2568, 2566, 2567, 2580, 2578, 2572,
3361 2571, 2583, 2569, 2581, 2572, 2579, 2573, 2575, 2582, 2573,
3362 2587, 2580, 2588, 2577, 2584, 0, 2594, 0, 2577, 2575,
3363
3364 2578, 2581, 2592, 2591, 2580, 2578, 2582, 2583, 2583, 2592,
3365 2581, 2591, 2584, 2588, 2596, 2582, 2593, 2595, 2598, 2588,
3366 2599, 2584, 2587, 2594, 2593, 2595, 2597, 2601, 2599, 2592,
3367 2591, 2605, 2596, 2603, 2604, 2606, 2607, 2606, 2597, 2601,
3368 2603, 2596, 2608, 2593, 2595, 2598, 2609, 2599, 2610, 2612,
3369 2611, 0, 2614, 2597, 2601, 2621, 2622, 2604, 2605, 2615,
3370 2603, 2604, 2606, 2623, 2617, 2622, 2624, 2618, 2607, 2611,
3371 2614, 2612, 2619, 2615, 2608, 2610, 2612, 2611, 2609, 2614,
3372 2618, 2621, 2621, 2622, 2619, 2626, 2615, 2617, 2627, 2630,
3373 2623, 2617, 2628, 2624, 2618, 2632, 2633, 2637, 2634, 2619,
3374
3375 2635, 2638, 2632, 2640, 2637, 2635, 2641, 2642, 0, 0,
3376 2648, 2627, 2626, 2634, 2628, 2627, 2630, 2645, 2633, 2628,
3377 2649, 2643, 2632, 2633, 2637, 2634, 2645, 2638, 2638, 2647,
3378 2640, 2642, 2635, 2641, 2642, 2643, 2647, 2648, 2650, 2651,
3379 2652, 2653, 2656, 2654, 2645, 2655, 2649, 2649, 2643, 2657,
3380 2658, 2651, 2654, 2663, 2662, 2653, 2647, 2663, 2655, 2662,
3381 2666, 2667, 2664, 2670, 2665, 2650, 2651, 2652, 2653, 2664,
3382 2654, 2665, 2655, 2658, 2656, 2669, 2657, 2658, 2673, 2676,
3383 2663, 2666, 2668, 2679, 2668, 2675, 2662, 2666, 2680, 2664,
3384 2670, 2665, 2678, 2667, 2678, 2686, 2682, 0, 2669, 0,
3385
3386 2673, 2684, 2669, 2676, 2675, 2673, 2676, 2679, 2684, 2668,
3387 2679, 2683, 2675, 0, 2680, 2680, 2681, 2681, 2682, 2678,
3388 2683, 2685, 2686, 2682, 2687, 2688, 2681, 2689, 2684, 2692,
3389 2693, 2690, 2695, 2688, 2685, 2693, 2691, 2687, 2683, 2690,
3390 2689, 2696, 2694, 2681, 2681, 2697, 0, 2698, 2685, 2688,
3391 2694, 2687, 2688, 2692, 2689, 2691, 2692, 2699, 2690, 2695,
3392 2688, 0, 2693, 2691, 2700, 2701, 0, 2696, 2696, 2694,
3393 2702, 2697, 2697, 2698, 2698, 2700, 2705, 2702, 2703, 2703,
3394 2704, 2706, 2707, 2699, 2699, 2710, 2708, 2701, 2704, 2707,
3395 2711, 2700, 2701, 2708, 2714, 2712, 2715, 2702, 2705, 2706,
3396
3397 2716, 2719, 2717, 2705, 2712, 2703, 0, 2704, 2706, 2707,
3398 0, 2724, 2710, 2708, 2711, 2720, 2715, 2711, 2721, 2722,
3399 2724, 2714, 2712, 2715, 2717, 2725, 2726, 2716, 2719, 2717,
3400 2727, 2728, 2731, 2720, 2729, 2737, 2721, 2722, 2724, 2729,
3401 2730, 2732, 2720, 2728, 2739, 2721, 2722, 2736, 2727, 2726,
3402 2731, 0, 2725, 2726, 2730, 2745, 2742, 2727, 2728, 2731,
3403 2740, 2741, 2737, 2741, 2732, 2742, 2729, 2730, 2732, 2736,
3404 2745, 2739, 2744, 2740, 2736, 2748, 2749, 2748, 2750, 2751,
3405 2753, 2765, 2745, 2742, 0, 2750, 2755, 2740, 2741, 2766,
3406 2744, 0, 2755, 2757, 2749, 2753, 2758, 0, 2759, 2744,
3407
3408 2762, 2760, 2748, 2749, 2767, 2750, 2763, 2753, 2765, 2763,
3409 2769, 2751, 2768, 2755, 2773, 2757, 2766, 2769, 2758, 2760,
3410 2757, 2770, 2762, 2758, 2759, 2759, 2776, 2762, 2760, 2770,
3411 2768, 2767, 2763, 2763, 2771, 2774, 2763, 2769, 2775, 2768,
3412 2777, 2779, 2780, 2778, 2782, 2781, 2773, 2779, 2770, 2777,
3413 2783, 2784, 2783, 2776, 2781, 0, 2771, 2774, 2778, 2786,
3414 2775, 2771, 2774, 2787, 2780, 2775, 2788, 2777, 2779, 2780,
3415 2778, 2789, 2781, 2790, 2795, 2791, 2782, 2783, 2784, 2792,
3416 2797, 2790, 2786, 0, 0, 2787, 2786, 2791, 2788, 2793,
3417 2787, 2792, 2799, 2788, 2797, 2798, 2793, 2789, 2789, 2800,
3418
3419 2790, 2795, 2791, 2801, 2802, 2803, 2792, 2797, 2808, 2798,
3420 2805, 2804, 2802, 2811, 2801, 2799, 2793, 2800, 2806, 2799,
3421 2807, 2807, 2798, 2812, 2803, 2816, 2800, 2806, 2805, 2821,
3422 2801, 2802, 2803, 2804, 2809, 2808, 2823, 2805, 2804, 2828,
3423 2811, 0, 2809, 2814, 2818, 2806, 2819, 2807, 2820, 2814,
3424 2812, 2821, 2816, 2824, 2825, 2818, 2821, 2819, 2825, 2820,
3425 2824, 2809, 2831, 2823, 2826, 2828, 2828, 2834, 2830, 2829,
3426 2814, 2818, 2826, 2819, 2834, 2820, 2830, 2835, 2836, 2837,
3427 2824, 2825, 2829, 2838, 2837, 2839, 2840, 2842, 2841, 2831,
3428 2843, 2826, 2844, 2840, 2834, 2830, 2829, 2845, 0, 2844,
3429
3430 2836, 2849, 0, 2842, 2851, 2836, 2837, 2841, 2843, 2835,
3431 2838, 2847, 2839, 2840, 2842, 2841, 2846, 2843, 2848, 2844,
3432 2850, 2855, 2857, 2858, 2846, 2848, 2847, 0, 2849, 2845,
3433 2851, 2851, 2856, 2859, 2841, 2860, 2855, 2861, 2847, 2856,
3434 2867, 2863, 2864, 2846, 2850, 2848, 2861, 2850, 2855, 2865,
3435 2858, 2869, 0, 2866, 2857, 2868, 2868, 2859, 2871, 2856,
3436 2859, 2866, 2875, 2863, 2861, 2868, 2872, 2860, 2863, 2864,
3437 2874, 2865, 2867, 2871, 2878, 2872, 2865, 2873, 2869, 2873,
3438 2866, 2880, 2868, 2868, 2874, 2871, 2876, 2877, 2881, 2875,
3439 2882, 2885, 2878, 2872, 2876, 2886, 2883, 2874, 2884, 2887,
3440
3441 2889, 2878, 2888, 2888, 2873, 0, 2890, 2892, 2880, 2883,
3442 2877, 2895, 2882, 2876, 2877, 2881, 2897, 2882, 2885, 2895,
3443 2884, 2897, 2886, 2883, 2900, 2884, 2887, 2902, 2890, 2888,
3444 2898, 2899, 2889, 2890, 2892, 2898, 2899, 2904, 2895, 2903,
3445 2906, 2905, 2907, 2897, 2904, 2909, 2910, 2911, 2912, 2915,
3446 2900, 2900, 2903, 2910, 2902, 2911, 2917, 2898, 2899, 2905,
3447 2918, 2920, 2922, 2923, 2904, 2919, 2903, 2906, 2905, 2907,
3448 2912, 2921, 2924, 2910, 2911, 2912, 2915, 2909, 2919, 2928,
3449 0, 2922, 2918, 2917, 2926, 2929, 2921, 2918, 2927, 2922,
3450 2923, 2926, 2919, 2920, 2924, 2927, 2930, 2932, 2921, 2924,
3451
3452 2929, 2928, 2933, 2941, 2964, 2964, 2928, 2934, 2938, 2937,
3453 2933, 2926, 2929, 2935, 2934, 2927, 2932, 2930, 2937, 2938,
3454 2935, 2939, 2939, 2930, 2932, 2941, 2940, 2945, 2943, 2933,
3455 2941, 2939, 2940, 2964, 2934, 2938, 2937, 2944, 2946, 2948,
3456 2935, 2949, 2950, 2953, 2944, 2954, 2948, 0, 2939, 2939,
3457 2943, 2955, 2961, 2940, 2959, 2943, 2950, 2963, 2969, 2945,
3458 2946, 2965, 2965, 2949, 2944, 2946, 2948, 2960, 2949, 2950,
3459 2953, 2970, 2954, 2967, 2955, 2960, 2959, 0, 2955, 2961,
3460 2970, 2959, 2966, 2966, 2963, 2969, 2971, 2976, 2974, 2977,
3461 2965, 2980, 2981, 2980, 2960, 2974, 2967, 2975, 2970, 2971,
3462
3463 2967, 2986, 2982, 2983, 2975, 2984, 2995, 2988, 2987, 2976,
3464 2986, 2966, 2981, 2971, 2976, 2974, 2977, 2984, 2980, 2981,
3465 2989, 2983, 2990, 2992, 2975, 2982, 2987, 2991, 2986, 2982,
3466 2983, 2994, 2984, 2988, 2988, 2987, 2994, 2993, 2995, 2991,
3467 2993, 2996, 2998, 2996, 2997, 2992, 0, 2989, 2998, 2990,
3468 2992, 2999, 3000, 3001, 2991, 2993, 2997, 3002, 3003, 3005,
3469 3004, 3001, 3006, 2994, 2993, 3007, 3008, 2993, 2996, 2998,
3470 3011, 2997, 3012, 2999, 3000, 3016, 3013, 3017, 2999, 3000,
3471 3001, 3004, 3018, 3019, 3002, 3020, 3005, 3004, 3008, 3006,
3472 3003, 3021, 3007, 3008, 3013, 3022, 3024, 3011, 3025, 3012,
3473
3474 3027, 3026, 3016, 3013, 3017, 3031, 3028, 3033, 3030, 3018,
3475 3019, 3034, 3020, 3028, 3024, 3027, 3030, 3032, 3021, 3026,
3476 3035, 3033, 3022, 3024, 3036, 3025, 3034, 3027, 3026, 3032,
3477 3037, 3040, 3031, 3028, 3033, 3030, 3036, 3041, 3034, 3043,
3478 3040, 3042, 3042, 3044, 3032, 3046, 3035, 3035, 3047, 3048,
3479 0, 3036, 3044, 0, 3051, 3049, 3055, 3037, 3040, 3050,
3480 3052, 3041, 3048, 3051, 3041, 3043, 3043, 3050, 3042, 3046,
3481 3044, 3052, 3046, 3054, 3055, 3070, 3048, 3049, 3059, 3072,
3482 3047, 3051, 3049, 3055, 3062, 3062, 3050, 3052, 3073, 3074,
3483 3059, 3075, 3077, 3072, 3054, 3078, 3077, 3079, 3084, 3070,
3484
3485 3054, 3080, 3070, 3083, 3081, 3059, 3072, 3083, 3080, 3086,
3486 3085, 3062, 3088, 3078, 3084, 3073, 3074, 3081, 3075, 3077,
3487 3079, 3087, 3078, 0, 3079, 3084, 3089, 3090, 3080, 3095,
3488 3083, 3081, 3085, 3087, 3086, 3090, 3086, 3085, 3088, 3088,
3489 3089, 3091, 3096, 3093, 3092, 3093, 3094, 3095, 3087, 3104,
3490 3091, 3106, 3098, 3089, 3090, 3092, 3095, 3096, 3094, 3097,
3491 3099, 3100, 3104, 3107, 3108, 3097, 3109, 3099, 3091, 3096,
3492 3093, 3092, 3110, 3094, 3098, 3105, 3104, 3111, 3106, 3098,
3493 0, 3107, 3105, 3100, 3114, 3115, 3097, 3099, 3100, 3112,
3494 3107, 3108, 3109, 3109, 3113, 3116, 3117, 3112, 3117, 3110,
3495
3496 3119, 3113, 3105, 3118, 3111, 0, 3120, 3115, 3114, 3121,
3497 3124, 3114, 3115, 3122, 3125, 3118, 3112, 3116, 3123, 3120,
3498 3127, 3113, 3116, 3117, 3121, 3123, 3126, 3128, 3127, 3135,
3499 3118, 3130, 3119, 3120, 3136, 3122, 3121, 3124, 3126, 3132,
3500 3122, 3125, 3138, 3130, 3137, 3123, 3139, 3127, 3132, 3140,
3501 3138, 0, 3141, 3126, 3128, 3144, 3135, 3145, 3130, 3142,
3502 3136, 3136, 3143, 3137, 3146, 3141, 3132, 3152, 3149, 3138,
3503 3143, 3137, 0, 3142, 3149, 3153, 3150, 3144, 3139, 3141,
3504 3152, 3140, 3144, 3150, 3145, 3155, 3142, 3156, 3157, 3143,
3505 3158, 3146, 3155, 3159, 3152, 3149, 3157, 3160, 3153, 3161,
3506
3507 3162, 3163, 3153, 3150, 3158, 3160, 3166, 3159, 3168, 3156,
3508 3167, 3169, 3155, 3166, 3156, 3157, 3168, 3158, 3170, 3167,
3509 3159, 3161, 3162, 3171, 3160, 3172, 3161, 3162, 3163, 0,
3510 3177, 3173, 3174, 3166, 3175, 3168, 3176, 3167, 3169, 3179,
3511 3170, 3181, 3180, 0, 3176, 3170, 3188, 3183, 0, 3184,
3512 0, 3172, 3172, 3173, 3174, 3171, 3175, 3184, 3173, 3174,
3513 3185, 3175, 3177, 3176, 3180, 3186, 3179, 3187, 3181, 3180,
3514 3183, 3189, 3190, 3186, 3183, 3187, 3184, 3192, 3188, 3189,
3515 3185, 3194, 3195, 3196, 3201, 3195, 3190, 3185, 3197, 3198,
3516 0, 3200, 3186, 3199, 3187, 3205, 3197, 3198, 3189, 3190,
3517
3518 3195, 3204, 3204, 3192, 3192, 3196, 3201, 3199, 3194, 3195,
3519 3196, 3201, 3195, 3202, 3209, 3197, 3198, 3200, 3200, 3207,
3520 3199, 3205, 3205, 3206, 0, 3208, 3211, 3202, 3204, 3210,
3521 3212, 3206, 3213, 3214, 3211, 3215, 3209, 0, 3222, 3218,
3522 3202, 3209, 0, 3216, 3217, 3207, 3207, 3218, 0, 3210,
3523 3206, 3208, 3208, 3211, 3213, 3219, 3210, 3212, 3214, 3213,
3524 3214, 3220, 3215, 3216, 3217, 3222, 3218, 3223, 3225, 3220,
3525 3216, 3217, 3227, 3228, 3226, 3223, 3229, 3219, 3231, 3232,
3526 3227, 3228, 3219, 3233, 0, 3234, 3235, 3232, 3220, 3236,
3527 3225, 3233, 3238, 3239, 3223, 3225, 3226, 3240, 3248, 3227,
3528
3529 3228, 3226, 3229, 3229, 3242, 3231, 3232, 3245, 3249, 3236,
3530 3233, 3234, 3234, 3235, 3246, 3247, 3236, 3240, 0, 3238,
3531 3239, 0, 3246, 3247, 3240, 3248, 3242, 0, 0, 3245,
3532 0, 3242, 0, 0, 3245, 3249, 0, 0, 0, 0,
3533 0, 3246, 3247, 3253, 3253, 3253, 3253, 3253, 3253, 3253,
3534 3254, 3254, 3254, 3254, 3254, 3254, 3254, 3255, 3255, 3255,
3535 3255, 3255, 3255, 3255, 3256, 3256, 3256, 3256, 3256, 3256,
3536 3256, 3257, 3257, 3257, 3257, 3257, 3257, 3257, 3258, 3258,
3537 3258, 3258, 3258, 3258, 3258, 3259, 3259, 3259, 3259, 3259,
3538 3259, 3259, 3261, 3261, 0, 3261, 3261, 3261, 3261, 3262,
3539
3540 3262, 0, 0, 0, 3262, 3262, 3263, 3263, 0, 0,
3541 3263, 0, 3263, 3264, 0, 0, 0, 0, 0, 3264,
3542 3265, 3265, 0, 0, 0, 3265, 3265, 3266, 0, 0,
3543 0, 0, 0, 3266, 3267, 3267, 0, 3267, 3267, 3267,
3544 3267, 3268, 0, 0, 0, 0, 0, 3268, 3269, 3269,
3545 0, 0, 0, 3269, 3269, 3270, 3270, 0, 3270, 3270,
3546 3270, 3270, 3252, 3252, 3252, 3252, 3252, 3252, 3252, 3252,
3547 3252, 3252, 3252, 3252, 3252, 3252, 3252, 3252, 3252, 3252,
3548 3252, 3252, 3252, 3252, 3252, 3252, 3252, 3252, 3252, 3252,
3549 3252, 3252, 3252, 3252, 3252, 3252, 3252, 3252, 3252, 3252,
3550
3551 3252, 3252, 3252, 3252, 3252, 3252, 3252, 3252, 3252, 3252,
3552 3252, 3252, 3252, 3252, 3252, 3252, 3252, 3252, 3252, 3252,
3553 3252, 3252, 3252, 3252, 3252, 3252, 3252, 3252, 3252
2700 361, 398, 361, 369, 0, 403, 371, 367, 361, 424,
2701 372, 361, 370, 367, 366, 373, 380, 367, 371, 366,
2702 378, 380, 372, 369, 361, 367, 0, 361, 373, 361,
2703 370, 367, 378, 371, 367, 375, 370, 372, 383, 370,
2704 367, 424, 373, 376, 367, 379, 383, 378, 380, 384,
2705 0, 375, 367, 368, 429, 368, 376, 370, 382, 375,
2706 381, 384, 375, 379, 382, 383, 385, 389, 368, 386,
2707 376, 368, 379, 368, 389, 368, 384, 386, 375, 368,
2708 368, 381, 368, 0, 385, 382, 429, 381, 0, 0,
2709 391, 388, 388, 385, 389, 368, 386, 390, 368, 391,
2710
2711 368, 0, 368, 377, 377, 392, 0, 393, 0, 395,
2712 390, 396, 394, 377, 393, 377, 377, 377, 388, 394,
2713 377, 395, 391, 392, 390, 397, 391, 392, 377, 399,
2714 377, 377, 392, 396, 393, 406, 395, 397, 396, 394,
2715 377, 400, 377, 377, 377, 401, 402, 377, 400, 404,
2716 392, 404, 397, 405, 408, 399, 399, 406, 409, 402,
2717 401, 408, 406, 410, 405, 407, 407, 0, 400, 409,
2718 411, 412, 401, 402, 410, 0, 404, 413, 413, 417,
2719 405, 408, 0, 411, 414, 409, 415, 417, 416, 419,
2720 410, 418, 0, 0, 407, 413, 412, 411, 412, 420,
2721
2722 419, 415, 413, 418, 413, 413, 417, 414, 420, 415,
2723 421, 414, 425, 415, 416, 416, 419, 427, 418, 426,
2724 422, 430, 413, 421, 428, 433, 420, 430, 415, 431,
2725 425, 422, 432, 422, 442, 434, 435, 421, 422, 425,
2726 427, 426, 428, 435, 427, 436, 426, 422, 430, 433,
2727 431, 428, 433, 437, 438, 432, 431, 434, 422, 432,
2728 422, 423, 434, 435, 439, 440, 442, 437, 441, 423,
2729 423, 436, 436, 423, 423, 443, 445, 444, 0, 440,
2730 437, 438, 445, 423, 446, 447, 439, 0, 423, 444,
2731 451, 439, 440, 449, 441, 441, 423, 423, 443, 451,
2732
2733 423, 423, 443, 445, 444, 448, 446, 447, 449, 450,
2734 452, 446, 447, 448, 453, 0, 450, 451, 455, 454,
2735 449, 456, 457, 458, 464, 452, 459, 0, 462, 458,
2736 460, 448, 448, 455, 0, 460, 450, 452, 453, 473,
2737 448, 453, 454, 464, 457, 455, 454, 456, 456, 457,
2738 458, 464, 459, 459, 462, 462, 463, 460, 465, 466,
2739 467, 469, 463, 469, 470, 471, 466, 472, 475, 0,
2740 469, 473, 471, 470, 476, 467, 465, 474, 479, 478,
2741 472, 481, 478, 463, 477, 465, 466, 467, 469, 482,
2742 469, 470, 471, 481, 472, 474, 476, 477, 478, 480,
2743
2744 475, 476, 479, 483, 474, 479, 478, 484, 481, 478,
2745 483, 477, 480, 485, 486, 487, 490, 488, 0, 489,
2746 492, 482, 488, 0, 0, 489, 480, 486, 491, 493,
2747 483, 484, 492, 544, 484, 501, 485, 487, 494, 490,
2748 495, 486, 487, 490, 488, 485, 489, 492, 495, 494,
2749 491, 493, 496, 0, 499, 491, 493, 500, 501, 503,
2750 544, 499, 501, 485, 502, 494, 496, 495, 0, 500,
2751 503, 0, 502, 504, 0, 507, 509, 506, 0, 496,
2752 497, 499, 0, 0, 500, 497, 503, 497, 505, 506,
2753 0, 502, 505, 497, 509, 497, 504, 507, 497, 497,
2754
2755 504, 510, 507, 509, 506, 497, 497, 497, 516, 511,
2756 505, 510, 497, 508, 497, 505, 508, 512, 513, 505,
2757 497, 511, 497, 514, 508, 497, 497, 514, 512, 517,
2758 515, 517, 497, 510, 516, 516, 511, 515, 510, 518,
2759 508, 519, 513, 508, 512, 513, 520, 521, 524, 523,
2760 514, 525, 522, 519, 523, 526, 517, 515, 0, 521,
2761 522, 520, 530, 526, 528, 518, 518, 531, 519, 525,
2762 524, 527, 532, 520, 521, 524, 523, 545, 525, 522,
2763 530, 533, 526, 527, 535, 528, 538, 534, 536, 530,
2764 531, 528, 535, 537, 531, 538, 533, 541, 527, 534,
2765
2766 539, 536, 540, 542, 532, 537, 542, 543, 533, 545,
2767 546, 535, 547, 538, 534, 536, 540, 0, 548, 549,
2768 537, 558, 541, 539, 541, 546, 543, 539, 550, 540,
2769 542, 552, 553, 548, 543, 551, 0, 546, 559, 555,
2770 557, 550, 554, 549, 547, 548, 549, 551, 558, 554,
2771 555, 560, 554, 552, 557, 550, 553, 561, 552, 553,
2772 554, 562, 551, 556, 563, 559, 555, 557, 556, 554,
2773 564, 565, 566, 567, 569, 564, 554, 565, 0, 554,
2774 0, 568, 569, 560, 561, 570, 571, 566, 562, 572,
2775 573, 576, 575, 0, 573, 556, 563, 567, 565, 566,
2776
2777 567, 569, 564, 568, 570, 577, 574, 579, 568, 578,
2778 571, 572, 570, 571, 574, 575, 572, 573, 578, 575,
2779 581, 583, 580, 576, 587, 582, 0, 583, 577, 579,
2780 585, 584, 577, 574, 579, 580, 578, 582, 586, 588,
2781 0, 585, 589, 0, 592, 586, 581, 581, 583, 580,
2782 595, 600, 582, 584, 590, 589, 587, 585, 584, 590,
2783 596, 588, 590, 590, 591, 586, 588, 593, 594, 589,
2784 592, 592, 595, 591, 602, 597, 593, 595, 590, 594,
2785 598, 590, 596, 600, 604, 601, 590, 596, 597, 590,
2786 590, 591, 598, 603, 593, 594, 606, 605, 602, 607,
2787
2788 608, 602, 597, 601, 613, 609, 604, 598, 610, 608,
2789 607, 604, 601, 619, 611, 603, 603, 620, 606, 0,
2790 603, 605, 610, 606, 605, 609, 607, 608, 614, 616,
2791 612, 613, 609, 617, 618, 610, 611, 612, 620, 615,
2792 616, 611, 603, 621, 620, 619, 614, 615, 623, 618,
2793 625, 617, 622, 622, 627, 614, 616, 612, 624, 625,
2794 617, 618, 628, 626, 629, 0, 615, 621, 630, 633,
2795 621, 631, 623, 631, 633, 623, 626, 625, 632, 634,
2796 624, 622, 637, 635, 628, 624, 627, 645, 0, 628,
2797 626, 638, 630, 634, 636, 630, 629, 635, 631, 638,
2798
2799 632, 633, 639, 640, 641, 632, 634, 642, 636, 636,
2800 635, 641, 643, 644, 637, 650, 636, 650, 638, 645,
2801 639, 636, 647, 646, 0, 640, 649, 0, 644, 639,
2802 640, 641, 643, 642, 642, 636, 636, 644, 646, 643,
2803 644, 648, 650, 651, 647, 659, 648, 653, 652, 647,
2804 646, 654, 649, 649, 655, 644, 652, 656, 658, 657,
2805 654, 661, 0, 655, 660, 658, 656, 657, 651, 668,
2806 651, 662, 653, 648, 653, 652, 0, 659, 654, 661,
2807 663, 655, 667, 662, 656, 658, 657, 660, 661, 665,
2808 664, 660, 663, 666, 667, 670, 671, 665, 662, 664,
2809
2810 669, 668, 673, 672, 671, 674, 680, 663, 666, 667,
2811 670, 672, 676, 669, 674, 675, 665, 664, 679, 680,
2812 666, 676, 670, 671, 681, 673, 675, 669, 678, 673,
2813 672, 682, 674, 680, 677, 677, 678, 685, 684, 676,
2814 679, 687, 675, 677, 683, 679, 684, 686, 688, 0,
2815 681, 681, 690, 685, 682, 678, 691, 683, 682, 688,
2816 686, 677, 677, 687, 685, 684, 690, 692, 687, 689,
2817 693, 683, 696, 694, 686, 688, 691, 689, 697, 690,
2818 695, 696, 0, 691, 703, 698, 700, 702, 699, 692,
2819 693, 701, 0, 704, 692, 694, 689, 693, 697, 696,
2820
2821 694, 699, 695, 698, 700, 697, 701, 695, 703, 702,
2822 705, 703, 698, 700, 702, 699, 704, 706, 701, 707,
2823 704, 708, 709, 705, 710, 712, 0, 0, 709, 717,
2824 711, 707, 713, 716, 708, 706, 718, 705, 711, 719,
2825 714, 716, 723, 718, 706, 721, 707, 721, 708, 709,
2826 724, 710, 712, 720, 713, 722, 711, 711, 714, 713,
2827 716, 717, 719, 718, 722, 711, 719, 714, 720, 724,
2828 725, 727, 721, 727, 723, 726, 728, 724, 734, 731,
2829 720, 737, 722, 728, 726, 742, 0, 0, 734, 738,
2830 725, 731, 740, 750, 0, 0, 742, 725, 727, 737,
2831
2832 741, 0, 726, 728, 729, 734, 731, 729, 737, 743,
2833 738, 729, 742, 740, 729, 748, 738, 744, 741, 740,
2834 745, 729, 729, 746, 729, 750, 747, 741, 748, 729,
2835 749, 729, 743, 752, 729, 747, 743, 749, 729, 746,
2836 755, 729, 748, 744, 744, 754, 745, 745, 729, 729,
2837 746, 729, 758, 747, 754, 752, 753, 749, 751, 751,
2838 752, 751, 753, 755, 751, 756, 757, 755, 756, 751,
2839 759, 761, 754, 761, 758, 751, 751, 762, 759, 758,
2840 764, 0, 757, 753, 751, 751, 751, 760, 751, 757,
2841 763, 751, 756, 757, 765, 763, 751, 759, 761, 760,
2842
2843 764, 762, 751, 751, 762, 766, 767, 764, 768, 757,
2844 0, 0, 770, 772, 760, 769, 771, 766, 777, 773,
2845 765, 765, 763, 775, 776, 777, 774, 0, 767, 787,
2846 779, 775, 766, 767, 768, 768, 770, 769, 771, 770,
2847 772, 774, 769, 771, 773, 777, 773, 776, 778, 779,
2848 775, 776, 780, 774, 781, 782, 778, 779, 783, 785,
2849 784, 787, 786, 789, 793, 0, 781, 786, 782, 784,
2850 788, 790, 792, 794, 785, 778, 790, 796, 780, 780,
2851 795, 781, 782, 798, 783, 783, 785, 784, 797, 786,
2852 789, 800, 788, 801, 792, 799, 793, 788, 802, 792,
2853
2854 807, 0, 795, 790, 798, 794, 805, 795, 804, 796,
2855 798, 808, 797, 806, 799, 797, 810, 802, 800, 803,
2856 801, 806, 799, 809, 811, 802, 805, 807, 803, 808,
2857 804, 812, 0, 805, 814, 804, 815, 817, 808, 812,
2858 806, 816, 809, 810, 816, 819, 803, 818, 820, 821,
2859 809, 822, 814, 822, 815, 823, 811, 824, 812, 817,
2860 826, 814, 821, 815, 817, 818, 0, 827, 816, 819,
2861 820, 824, 819, 823, 818, 820, 821, 829, 822, 827,
2862 825, 828, 823, 834, 824, 825, 826, 826, 830, 828,
2863 831, 830, 0, 833, 827, 829, 835, 836, 831, 837,
2864
2865 838, 0, 835, 0, 829, 837, 839, 838, 828, 844,
2866 834, 840, 825, 839, 831, 830, 840, 831, 833, 836,
2867 833, 841, 842, 835, 836, 831, 837, 838, 841, 846,
2868 843, 847, 844, 839, 843, 845, 844, 846, 840, 849,
2869 842, 848, 850, 852, 845, 851, 0, 853, 841, 842,
2870 850, 854, 855, 857, 849, 864, 846, 843, 851, 848,
2871 853, 865, 845, 847, 852, 859, 849, 867, 848, 850,
2872 852, 857, 851, 854, 853, 856, 858, 870, 854, 855,
2873 857, 860, 856, 858, 859, 861, 862, 864, 860, 863,
2874 861, 866, 859, 865, 862, 871, 863, 868, 869, 867,
2875
2876 878, 875, 856, 858, 866, 869, 872, 873, 860, 870,
2877 868, 874, 861, 862, 876, 873, 863, 877, 866, 874,
2878 876, 879, 880, 875, 868, 869, 874, 871, 875, 872,
2879 882, 880, 878, 872, 873, 0, 881, 884, 874, 886,
2880 883, 876, 885, 877, 877, 879, 874, 883, 879, 880,
2881 881, 885, 887, 888, 889, 0, 890, 887, 927, 0,
2882 0, 886, 882, 881, 884, 888, 886, 883, 891, 885,
2883 893, 892, 896, 891, 899, 896, 897, 889, 892, 894,
2884 888, 889, 890, 890, 887, 901, 900, 894, 899, 897,
2885 927, 901, 893, 900, 904, 891, 905, 893, 892, 896,
2886
2887 0, 899, 903, 897, 906, 0, 894, 907, 905, 907,
2888 908, 0, 901, 900, 902, 0, 902, 904, 909, 0,
2889 902, 904, 902, 905, 911, 0, 910, 902, 903, 903,
2890 909, 906, 902, 908, 907, 912, 0, 908, 902, 910,
2891 914, 902, 924, 902, 915, 909, 911, 902, 912, 902,
2892 913, 911, 916, 910, 902, 913, 917, 915, 914, 902,
2893 924, 919, 912, 918, 916, 920, 928, 914, 917, 924,
2894 929, 915, 922, 918, 925, 916, 919, 931, 922, 916,
2895 921, 923, 913, 917, 926, 918, 953, 920, 919, 947,
2896 918, 916, 920, 921, 923, 925, 933, 929, 928, 922,
2897
2898 918, 925, 936, 934, 933, 932, 926, 921, 923, 931,
2899 932, 926, 934, 953, 937, 938, 939, 936, 940, 0,
2900 942, 947, 943, 933, 0, 0, 941, 0, 938, 936,
2901 934, 939, 932, 935, 0, 943, 937, 0, 935, 942,
2902 935, 937, 938, 939, 940, 940, 935, 942, 941, 943,
2903 946, 935, 935, 941, 944, 945, 949, 950, 935, 935,
2904 935, 946, 944, 945, 948, 935, 950, 935, 957, 951,
2905 0, 949, 954, 935, 958, 962, 961, 946, 935, 935,
2906 951, 944, 945, 949, 950, 935, 948, 955, 952, 960,
2907 961, 948, 0, 969, 955, 954, 951, 952, 958, 954,
2908
2909 957, 958, 959, 961, 963, 964, 966, 962, 968, 967,
2910 959, 960, 970, 964, 955, 952, 960, 0, 972, 968,
2911 971, 0, 981, 998, 966, 969, 963, 967, 971, 959,
2912 970, 963, 964, 966, 973, 968, 967, 974, 976, 970,
2913 972, 973, 975, 985, 977, 972, 979, 971, 978, 975,
2914 974, 987, 983, 976, 981, 998, 985, 0, 980, 987,
2915 990, 973, 977, 983, 974, 976, 978, 979, 980, 975,
2916 985, 977, 990, 979, 986, 978, 988, 989, 987, 983,
2917 991, 986, 996, 992, 995, 980, 989, 990, 997, 988,
2918 1002, 1007, 0, 1005, 999, 1002, 1012, 0, 1007, 1014,
2919
2920 996, 986, 991, 988, 989, 992, 995, 991, 999, 996,
2921 992, 995, 1001, 1006, 997, 997, 1004, 1005, 1007, 1004,
2922 1005, 999, 1002, 1001, 1008, 1009, 1006, 1010, 1012, 1013,
2923 0, 1014, 1011, 1015, 1009, 1008, 1013, 1017, 1019, 1001,
2924 1006, 1010, 1004, 1004, 1011, 1015, 1004, 1016, 1021, 1020,
2925 1017, 1008, 1009, 0, 1010, 1020, 1013, 1022, 1024, 1011,
2926 1015, 1023, 1019, 1026, 1017, 1019, 1028, 1025, 1031, 1016,
2927 1021, 1029, 1023, 0, 1016, 1021, 1020, 1032, 1026, 1022,
2928 1024, 1030, 1029, 1033, 1022, 1024, 1034, 1028, 1023, 1025,
2929 1026, 1035, 1040, 1028, 1025, 1034, 1036, 1037, 1029, 1038,
2930
2931 1031, 1033, 1030, 1041, 1032, 1039, 1037, 1038, 1030, 1042,
2932 1033, 1043, 1039, 1034, 1047, 1035, 1040, 1041, 1035, 1040,
2933 1044, 1051, 1036, 1036, 1037, 1049, 1038, 1045, 1046, 1050,
2934 1041, 1053, 1039, 1054, 1049, 1052, 1050, 1058, 0, 1056,
2935 0, 1042, 1044, 1043, 1059, 1055, 1047, 1044, 1056, 1045,
2936 1046, 1054, 1049, 1051, 1045, 1046, 1050, 1052, 1053, 1057,
2937 1054, 1058, 1052, 1055, 1058, 1060, 1056, 1057, 1059, 1061,
2938 1062, 1059, 1055, 1063, 1064, 1065, 1066, 1067, 0, 1062,
2939 0, 1060, 1064, 1068, 1069, 1070, 1057, 1072, 1063, 1067,
2940 1071, 1061, 1060, 1070, 1080, 1075, 1061, 1062, 0, 0,
2941
2942 1063, 1064, 1072, 1071, 1067, 1068, 1074, 1065, 1066, 1086,
2943 1068, 1069, 1070, 1075, 1072, 1074, 1076, 1071, 1077, 1079,
2944 1077, 1080, 1075, 1081, 1076, 1083, 1085, 1079, 1084, 1087,
2945 1081, 1086, 1088, 1074, 1090, 1089, 1086, 1091, 1083, 0,
2946 1084, 1085, 1089, 1076, 1096, 1077, 1079, 1087, 1093, 1092,
2947 1081, 1095, 1083, 1085, 1094, 1084, 1087, 1096, 1098, 1088,
2948 1092, 1097, 1089, 1101, 1100, 1099, 1090, 0, 1161, 1091,
2949 1093, 1096, 1100, 1095, 1097, 1093, 1092, 1099, 1095, 1094,
2950 1098, 1094, 1102, 1101, 1105, 1098, 1106, 1103, 1097, 1107,
2951 1101, 1100, 1099, 1108, 1102, 1103, 1109, 1110, 1107, 1106,
2952
2953 1161, 1116, 0, 1113, 1110, 1108, 0, 1114, 1118, 1102,
2954 0, 1105, 0, 1106, 1103, 1115, 1107, 1109, 1111, 1117,
2955 1108, 1118, 0, 1109, 1110, 1119, 1113, 1111, 1116, 1111,
2956 1113, 1123, 1111, 1114, 1114, 1118, 1120, 1115, 1121, 1117,
2957 1111, 0, 1115, 1122, 1120, 1111, 1117, 1121, 0, 1119,
2958 1126, 1125, 1119, 1123, 1111, 1128, 1111, 1131, 1123, 1111,
2959 1124, 1122, 1127, 1120, 1132, 1121, 1125, 1136, 1124, 0,
2960 1122, 1128, 1126, 1129, 1133, 1127, 1134, 1126, 1125, 1137,
2961 1135, 1129, 1128, 1134, 1131, 0, 1132, 1124, 0, 1127,
2962 1136, 1132, 1138, 1139, 1136, 1141, 1133, 1137, 1143, 1142,
2963
2964 1129, 1133, 1135, 1134, 1138, 1139, 1137, 1135, 1140, 1144,
2965 1141, 1142, 1148, 1145, 0, 1149, 1140, 1146, 1143, 1138,
2966 1139, 1145, 1141, 1146, 1144, 1143, 1142, 1149, 1147, 1152,
2967 0, 1150, 0, 1148, 1151, 1140, 1144, 1147, 1150, 1148,
2968 1145, 1151, 1149, 1154, 1146, 1153, 1156, 1152, 1155, 0,
2969 1157, 1154, 1157, 1158, 1156, 1147, 1152, 1153, 1150, 1159,
2970 1164, 1151, 1162, 1155, 1165, 1158, 1159, 1166, 1163, 1168,
2971 1154, 1165, 1153, 1156, 1162, 1155, 1167, 1157, 1166, 1164,
2972 1158, 1163, 1170, 1169, 1168, 1172, 1159, 1164, 1169, 1162,
2973 1170, 1165, 1171, 1175, 1166, 1163, 1168, 1173, 1167, 1172,
2974
2975 1176, 0, 1177, 1167, 1178, 1171, 1181, 1175, 0, 1170,
2976 0, 0, 1172, 1179, 1182, 1169, 1201, 1201, 1176, 1171,
2977 1175, 1180, 1183, 1173, 1173, 1174, 0, 1176, 1184, 1174,
2978 1178, 1178, 1174, 1174, 1177, 1179, 1182, 1174, 1181, 1180,
2979 1179, 1182, 1186, 1174, 1183, 1201, 1188, 1174, 1180, 1183,
2980 1192, 1174, 1174, 1188, 1184, 1184, 1174, 1185, 1190, 1174,
2981 1174, 0, 0, 1185, 1174, 1187, 1189, 1187, 1186, 1186,
2982 1174, 1191, 1192, 1188, 1174, 1189, 1190, 1192, 1191, 1194,
2983 1195, 1196, 1193, 1197, 1185, 1190, 0, 0, 1194, 1187,
2984 1200, 1198, 1187, 1189, 1187, 1193, 0, 0, 1191, 0,
2985
2986 1204, 0, 1206, 1208, 1202, 1197, 1194, 1207, 1208, 1193,
2987 1197, 1206, 1195, 1196, 1198, 1217, 1200, 1200, 1198, 1199,
2988 1202, 1205, 1209, 1204, 1199, 1207, 1199, 1204, 1199, 1206,
2989 1199, 1202, 1211, 1205, 1207, 1208, 1210, 1199, 1213, 1212,
2990 1209, 1210, 1214, 0, 1218, 1216, 1199, 1217, 1205, 1209,
2991 1214, 1199, 1212, 1199, 1211, 1199, 1213, 1199, 1216, 1211,
2992 1215, 1219, 1220, 1210, 1221, 1213, 1212, 1223, 1215, 1214,
2993 1218, 1218, 1216, 1224, 1225, 1220, 1225, 1222, 1227, 1229,
2994 1219, 1226, 1224, 1228, 1230, 1223, 1221, 1215, 1219, 1220,
2995 1222, 1221, 1232, 1233, 1223, 1228, 1235, 1236, 0, 1234,
2996
2997 1224, 1225, 1238, 1226, 1222, 1227, 1229, 1234, 1226, 1230,
2998 1228, 1230, 1239, 1240, 1235, 1233, 1232, 1243, 1237, 1232,
2999 1233, 1241, 1242, 1235, 1236, 1237, 1234, 1241, 1242, 1238,
3000 1244, 1245, 1247, 1248, 1246, 1240, 0, 1244, 1239, 1239,
3001 1240, 1246, 1249, 1250, 1243, 1237, 1254, 1252, 1241, 1242,
3002 1253, 1248, 1250, 1255, 1247, 1245, 1256, 1244, 1245, 1247,
3003 1248, 1246, 1253, 1257, 1258, 1259, 1255, 1249, 1254, 1249,
3004 1250, 1252, 1260, 1254, 1252, 1261, 1262, 1253, 1256, 1263,
3005 1255, 1266, 1257, 1256, 1264, 1268, 1258, 1265, 1263, 1259,
3006 1257, 1258, 1259, 1269, 1260, 1266, 1270, 1271, 1262, 1260,
3007
3008 1274, 1261, 1261, 1262, 1272, 1264, 1263, 1265, 1266, 1275,
3009 1281, 1264, 1273, 1282, 1265, 1285, 1274, 1268, 1270, 1276,
3010 1273, 1278, 1272, 1270, 0, 1269, 1276, 1274, 1279, 1271,
3011 1280, 1272, 1283, 1278, 1280, 1279, 1275, 1286, 0, 1273,
3012 0, 1290, 1281, 1286, 1287, 1282, 1276, 1285, 1278, 1288,
3013 1286, 1287, 1289, 1283, 1290, 1279, 1288, 1280, 1292, 1283,
3014 1291, 1294, 1297, 1294, 1286, 1293, 1295, 1289, 1290, 1291,
3015 1286, 1287, 1293, 1296, 1298, 1295, 1288, 1299, 1298, 1289,
3016 1304, 1302, 1301, 1305, 1292, 1292, 1302, 1291, 1294, 1297,
3017 1301, 0, 1293, 1295, 1303, 1296, 1307, 1314, 1304, 1299,
3018
3019 1296, 1298, 1305, 1303, 1299, 1306, 0, 1304, 1307, 1301,
3020 1305, 1309, 1308, 1302, 1309, 1308, 1310, 0, 1306, 1311,
3021 1316, 1303, 1312, 1307, 1308, 1315, 1317, 1319, 1319, 1314,
3022 0, 1317, 1306, 1309, 1310, 1312, 1316, 1318, 1309, 1308,
3023 1321, 1309, 1308, 1310, 1311, 1318, 1311, 1316, 1315, 1312,
3024 1320, 1322, 1315, 1324, 1319, 1335, 1323, 1325, 1317, 1320,
3025 1324, 1326, 1321, 1328, 1318, 1323, 1329, 1321, 1326, 1331,
3026 0, 1332, 1330, 1322, 1339, 1329, 1328, 1320, 1322, 1325,
3027 1324, 1330, 1333, 1323, 1325, 1336, 1339, 1335, 1326, 1334,
3028 1328, 1333, 1338, 1329, 1332, 1331, 1331, 1334, 1332, 1330,
3029
3030 1336, 1339, 1337, 1340, 1342, 1338, 1341, 1343, 0, 1333,
3031 1337, 1345, 1336, 1344, 1341, 1340, 1334, 1347, 1346, 1338,
3032 1345, 1349, 1352, 1353, 1351, 1348, 1342, 1343, 0, 1337,
3033 1340, 1342, 1360, 1341, 1343, 1344, 1346, 1348, 1345, 1349,
3034 1344, 1355, 1350, 1347, 1347, 1346, 1354, 1361, 1349, 1350,
3035 1351, 1351, 1348, 1356, 1352, 1353, 1357, 1358, 1362, 1354,
3036 1359, 0, 1363, 1358, 1360, 1364, 1366, 1357, 1355, 1350,
3037 1370, 1367, 1369, 1354, 1356, 1374, 0, 1368, 0, 1361,
3038 1356, 1369, 1359, 1357, 1358, 1370, 1373, 1359, 1363, 1363,
3039 1362, 1364, 1364, 1366, 1367, 1368, 1371, 1370, 1367, 1369,
3040
3041 1372, 1374, 1374, 1375, 1368, 1376, 1373, 1377, 1378, 1371,
3042 1375, 1379, 1372, 1373, 1383, 1380, 1391, 1381, 1382, 1379,
3043 1380, 1378, 1381, 1371, 1376, 1382, 1386, 1372, 1384, 1377,
3044 1375, 1385, 1376, 1394, 1377, 1378, 1384, 1387, 1379, 1385,
3045 1383, 1383, 1388, 1390, 1386, 1382, 1392, 1380, 1391, 1381,
3046 1388, 1396, 1390, 1386, 1389, 1384, 1393, 1393, 1385, 1387,
3047 1397, 1389, 1405, 1395, 1387, 1394, 1398, 1399, 1392, 1388,
3048 1390, 1395, 1396, 1392, 1398, 1399, 1400, 1401, 1396, 1404,
3049 1403, 1389, 1402, 1393, 1400, 1401, 1403, 1406, 1405, 1405,
3050 1395, 1404, 1397, 1398, 1399, 1402, 1408, 1407, 1409, 1410,
3051
3052 1413, 0, 1412, 1400, 1401, 1411, 1404, 1403, 1414, 1402,
3053 1417, 1406, 1407, 1415, 1406, 0, 1412, 1415, 1413, 1417,
3054 1418, 1410, 1414, 1408, 1407, 1409, 1410, 1413, 1411, 1412,
3055 1415, 1419, 1411, 1422, 1420, 1414, 1424, 1417, 1415, 1421,
3056 1415, 1420, 1418, 1419, 1415, 1423, 1428, 1418, 1426, 1427,
3057 1421, 1425, 1430, 1433, 1429, 1431, 1434, 1415, 1419, 1430,
3058 1422, 1420, 1426, 1425, 1431, 1436, 1421, 1423, 1424, 1428,
3059 1440, 1427, 1423, 1428, 1436, 1426, 1427, 1429, 1425, 1430,
3060 1432, 1429, 1431, 1434, 1438, 1433, 1439, 1432, 1441, 1444,
3061 1438, 1442, 1436, 0, 1447, 1446, 1440, 1440, 1442, 1448,
3062
3063 1451, 1449, 1452, 0, 1454, 1453, 0, 1432, 1439, 1452,
3064 1448, 1438, 1449, 1439, 1458, 0, 1444, 1460, 1442, 1446,
3065 1441, 1447, 1446, 1453, 1451, 1455, 1448, 1451, 1449, 1452,
3066 1454, 1454, 1453, 1456, 1457, 1459, 1458, 1455, 1461, 1456,
3067 1462, 1458, 1457, 1460, 1460, 1463, 1467, 1465, 1459, 1462,
3068 1466, 1464, 1455, 1464, 1465, 1468, 1461, 1463, 1469, 1467,
3069 1456, 1457, 1459, 1470, 1468, 1461, 1471, 1462, 1472, 0,
3070 1474, 1476, 1463, 1467, 1465, 1470, 1466, 1466, 1464, 1473,
3071 1469, 1477, 1468, 1475, 1478, 1469, 1473, 1476, 1475, 0,
3072 1470, 1472, 1478, 1471, 1479, 1472, 1474, 1474, 1476, 1481,
3073
3074 1483, 1482, 1484, 1487, 1477, 1487, 1473, 1486, 1477, 1483,
3075 1475, 1478, 1482, 1488, 1489, 1484, 1479, 1485, 1485, 1492,
3076 1486, 1479, 0, 0, 1490, 1485, 1481, 1483, 1482, 1484,
3077 1487, 1490, 1493, 1494, 1486, 1491, 1489, 1498, 1496, 1488,
3078 1488, 1489, 1491, 0, 1485, 1485, 1492, 1495, 1497, 1499,
3079 1493, 1490, 1500, 1502, 1495, 1494, 1499, 0, 1503, 1493,
3080 1494, 1505, 1491, 1496, 1504, 1496, 1502, 1507, 1508, 1498,
3081 1497, 1508, 1504, 1509, 1495, 1497, 1499, 1510, 1512, 1511,
3082 1502, 1513, 1505, 1514, 1500, 1503, 1515, 1512, 1505, 1507,
3083 1518, 1504, 1511, 1513, 1507, 1508, 1524, 1518, 1521, 1509,
3084
3085 1509, 1517, 1516, 1510, 1510, 1512, 1511, 1514, 1513, 1520,
3086 1514, 1516, 1515, 1515, 1524, 1519, 1517, 1518, 1519, 1522,
3087 1521, 1528, 1525, 1524, 1526, 1521, 1526, 1529, 1517, 1516,
3088 1519, 1527, 1530, 1534, 1531, 1522, 0, 0, 1541, 1519,
3089 1532, 1520, 1519, 1522, 1525, 1519, 1522, 1533, 1528, 1525,
3090 1535, 1526, 1540, 1542, 1536, 1527, 1531, 1519, 1527, 1529,
3091 1537, 1531, 1522, 1538, 1530, 1534, 1532, 1532, 1536, 1537,
3092 1541, 1538, 1535, 1533, 1533, 1539, 1540, 1535, 1543, 1540,
3093 1544, 1536, 1539, 1547, 1545, 1542, 1546, 1537, 1545, 1549,
3094 1538, 1552, 1548, 1553, 1550, 0, 1551, 0, 1549, 0,
3095
3096 1543, 1550, 1539, 1551, 1552, 1543, 1553, 1557, 1546, 1554,
3097 1547, 1545, 1544, 1546, 1548, 1555, 1549, 1561, 1552, 1548,
3098 1553, 1550, 1554, 1551, 1555, 1556, 1558, 1556, 1562, 1559,
3099 1557, 1563, 1561, 1564, 1557, 1571, 1554, 1559, 0, 1565,
3100 1567, 1568, 1555, 1562, 1561, 1563, 1565, 1567, 1566, 0,
3101 1573, 1558, 1556, 1558, 1568, 1562, 1559, 1569, 1563, 1566,
3102 1575, 1574, 1571, 1569, 1572, 1564, 1565, 1567, 1568, 1576,
3103 1577, 1572, 1573, 1581, 1580, 1566, 1574, 1573, 1582, 1578,
3104 1579, 1576, 1578, 1577, 1569, 1581, 1575, 1575, 1574, 1579,
3105 1583, 1572, 1580, 1583, 1589, 1590, 1576, 1577, 1582, 1584,
3106
3107 1581, 1580, 1591, 1595, 1586, 1582, 1578, 1579, 1583, 1586,
3108 1584, 1588, 1592, 1588, 1593, 0, 1586, 1583, 1589, 1594,
3109 1583, 1589, 1590, 1593, 1597, 1598, 1584, 1592, 1596, 1591,
3110 1595, 1586, 1597, 1601, 1599, 1602, 1586, 1600, 1588, 1592,
3111 1603, 1593, 1596, 1594, 1601, 1600, 1594, 1598, 1603, 1607,
3112 1605, 1597, 1598, 1602, 1604, 1596, 1599, 1604, 1606, 1608,
3113 1601, 1599, 1602, 0, 1600, 1609, 1608, 1603, 1605, 1610,
3114 1611, 1612, 1604, 1613, 0, 1618, 1607, 1605, 1610, 1609,
3115 1617, 1604, 1612, 1611, 1604, 1616, 1608, 1616, 1613, 1617,
3116 1606, 1620, 1609, 1619, 1621, 1624, 1610, 1611, 1612, 1622,
3117
3118 1613, 1618, 1618, 0, 1619, 1623, 1625, 1617, 1623, 1620,
3119 1627, 0, 1616, 1622, 1630, 1625, 1621, 1624, 1620, 1627,
3120 1619, 1621, 1624, 1623, 1626, 1622, 1622, 1630, 1633, 1628,
3121 1626, 1631, 1623, 1625, 1628, 1623, 1634, 1627, 1635, 1632,
3122 1622, 1630, 1636, 1631, 1632, 1637, 1639, 1635, 1638, 1642,
3123 1633, 1626, 1640, 1644, 1643, 1633, 1642, 1645, 1631, 1647,
3124 0, 1628, 0, 1649, 0, 1635, 1632, 1643, 1634, 1636,
3125 1638, 1645, 1659, 1640, 1646, 1638, 1642, 1637, 1639, 1640,
3126 1646, 1643, 1649, 1653, 1645, 1644, 1651, 1652, 1654, 1655,
3127 1649, 1647, 1657, 1659, 1651, 1652, 1658, 1656, 1646, 1659,
3128
3129 1660, 1646, 1653, 1655, 1661, 1657, 1654, 1646, 1662, 1658,
3130 1653, 1656, 1663, 1651, 1652, 1654, 1655, 1665, 1664, 1657,
3131 1659, 1666, 1662, 1658, 1656, 1664, 1665, 1667, 1668, 1666,
3132 1669, 1674, 1660, 1670, 1672, 1662, 1661, 0, 1670, 1663,
3133 1671, 1676, 1668, 1672, 1665, 1664, 1675, 1677, 1666, 1678,
3134 1679, 1671, 1680, 1675, 1667, 1668, 1685, 1689, 1674, 1681,
3135 1670, 1672, 1669, 1681, 1676, 1683, 1684, 1671, 1676, 1677,
3136 1680, 1678, 1679, 1675, 1677, 1687, 1678, 1679, 1684, 1680,
3137 1683, 1686, 1692, 1685, 1689, 1690, 1681, 1688, 1693, 1686,
3138 1687, 1691, 1683, 1684, 1696, 1688, 1695, 1692, 1690, 1697,
3139
3140 0, 1696, 1687, 1693, 1695, 1698, 1700, 1699, 1686, 1692,
3141 1701, 1691, 1690, 1703, 1688, 1693, 1699, 1702, 1691, 0,
3142 1698, 1696, 1707, 1695, 1705, 1706, 1708, 1700, 0, 1712,
3143 1709, 1697, 1698, 1700, 1699, 1710, 1712, 1701, 0, 1711,
3144 1703, 1702, 1713, 1706, 1702, 1709, 1705, 1713, 1716, 1714,
3145 1715, 1705, 1706, 1708, 1707, 1718, 1712, 1709, 1714, 1715,
3146 1710, 1717, 1710, 1711, 1719, 1721, 1711, 1723, 1720, 1713,
3147 1716, 1722, 1727, 1718, 1723, 1716, 1714, 1715, 1724, 1719,
3148 1720, 1725, 1718, 1717, 1722, 1724, 1728, 1721, 1717, 1722,
3149 1726, 1719, 1721, 0, 1723, 1720, 1731, 1738, 1722, 1727,
3150
3151 1724, 1729, 1726, 1725, 1731, 1724, 1732, 1729, 1725, 1733,
3152 1735, 1722, 1724, 1737, 1732, 1734, 1739, 1726, 1728, 1736,
3153 1733, 1736, 1734, 1731, 1738, 1741, 1745, 1740, 1729, 1742,
3154 1747, 1750, 1736, 1732, 1740, 1735, 1733, 1735, 1743, 1737,
3155 1737, 1744, 1734, 1739, 1743, 0, 1736, 1744, 1736, 1746,
3156 1748, 1751, 1741, 1745, 1740, 1742, 1742, 1752, 1754, 1753,
3157 1751, 1753, 1747, 1750, 1755, 1743, 1756, 1758, 1744, 1759,
3158 1757, 1764, 1746, 1756, 1748, 0, 1746, 1748, 1751, 1761,
3159 1763, 1759, 1754, 1762, 1760, 1754, 1753, 0, 1766, 1752,
3160 1760, 1755, 1757, 1756, 1758, 1766, 1759, 1757, 1765, 1765,
3161
3162 1765, 1761, 1763, 1764, 1769, 1765, 1761, 1763, 1767, 1762,
3163 1762, 1760, 1768, 1765, 1770, 1766, 1773, 1767, 1772, 1768,
3164 1775, 1770, 1774, 1772, 1776, 1765, 1765, 1765, 1778, 1773,
3165 1777, 1780, 1765, 0, 1774, 1767, 1769, 1779, 1780, 1768,
3166 1776, 1770, 1777, 1773, 1782, 1775, 1781, 1775, 1784, 1774,
3167 1772, 1776, 1781, 1783, 1783, 1779, 1785, 1777, 1780, 1787,
3168 1778, 1786, 1788, 1785, 1779, 1789, 1786, 1792, 1793, 1794,
3169 1793, 1782, 1789, 1781, 1784, 1784, 1797, 1798, 1799, 1796,
3170 1783, 1801, 1797, 1785, 1800, 1787, 1787, 1794, 1786, 1788,
3171 1800, 1810, 1789, 1801, 1792, 1793, 1794, 1796, 1802, 1803,
3172
3173 1804, 1804, 1805, 1797, 1807, 1799, 1796, 1811, 1801, 1798,
3174 1809, 1800, 1806, 1806, 1811, 1807, 1812, 1803, 1802, 1813,
3175 1814, 1815, 1816, 1810, 0, 1802, 1803, 1804, 1805, 1805,
3176 1819, 1807, 1809, 1818, 1811, 1817, 1812, 1809, 1819, 1806,
3177 1818, 1820, 1821, 1812, 1816, 1822, 1823, 1823, 1815, 1816,
3178 1824, 1813, 1814, 1817, 1822, 1825, 1820, 1819, 1826, 1829,
3179 1818, 1833, 1817, 0, 1827, 1832, 1821, 1828, 1820, 1821,
3180 1832, 1827, 1822, 1823, 1831, 1829, 1824, 1824, 1834, 1828,
3181 1839, 1831, 1829, 1833, 1836, 1835, 1829, 1825, 1833, 1838,
3182 1826, 1827, 1832, 1835, 1828, 1841, 1836, 1838, 1840, 1842,
3183
3184 1843, 1831, 1829, 1839, 1844, 1834, 1845, 1839, 1846, 1844,
3185 1848, 1836, 1835, 1841, 1846, 1847, 1838, 1849, 1848, 1840,
3186 1844, 1852, 1841, 1843, 1854, 1840, 1842, 1843, 1847, 1855,
3187 1859, 1844, 1856, 1845, 1850, 1846, 1844, 1848, 1851, 1849,
3188 1853, 1850, 1847, 1857, 1849, 1851, 1854, 1861, 1859, 1862,
3189 1864, 1854, 1853, 1852, 1861, 1860, 1855, 1859, 1856, 1856,
3190 1860, 1850, 1866, 1865, 1868, 1851, 1857, 1853, 1865, 1872,
3191 1857, 1860, 1869, 1869, 1861, 1870, 1862, 1864, 1871, 1877,
3192 1875, 1877, 1860, 1874, 1878, 1876, 1879, 1860, 1880, 0,
3193 0, 1879, 1881, 1871, 1866, 1865, 1868, 1870, 1874, 1869,
3194
3195 1876, 1872, 1870, 1875, 1886, 1871, 1877, 1875, 1882, 1884,
3196 1874, 1889, 1876, 1879, 1881, 1888, 1878, 1885, 1890, 1881,
3197 1880, 1891, 1892, 1882, 1884, 1885, 1886, 1893, 1895, 1892,
3198 1894, 1886, 0, 1896, 1897, 1882, 1884, 1889, 1889, 1888,
3199 1899, 1901, 1888, 1902, 1885, 1890, 1903, 1907, 1891, 1892,
3200 1895, 1894, 1897, 1908, 1896, 1895, 1905, 1894, 1902, 1893,
3201 1896, 1897, 1899, 1906, 1909, 1901, 1910, 1899, 1901, 1907,
3202 1902, 1905, 1903, 1903, 1907, 1911, 1912, 1913, 1906, 1914,
3203 1908, 1915, 1909, 1905, 1917, 1916, 1914, 1918, 1910, 1920,
3204 1906, 1909, 1917, 1910, 1916, 1919, 1921, 1911, 1922, 1915,
3205
3206 1912, 0, 1911, 1912, 1913, 1921, 1914, 1924, 1915, 1923,
3207 1918, 1917, 1916, 1926, 1918, 1928, 1922, 1919, 1923, 1927,
3208 1924, 1920, 1919, 1921, 1926, 1922, 1930, 1931, 1927, 1932,
3209 1929, 1938, 1933, 1928, 1924, 1935, 1923, 1929, 1933, 1926,
3210 1926, 1934, 1928, 1940, 1932, 1931, 1927, 1946, 1944, 1935,
3211 1941, 1926, 1930, 1930, 1931, 1942, 1932, 1929, 1938, 1933,
3212 1944, 1941, 1935, 1934, 1947, 1945, 1942, 1940, 1934, 1948,
3213 1940, 1950, 1949, 0, 1947, 1944, 1953, 1941, 1945, 1946,
3214 1954, 1951, 1942, 1956, 1957, 1958, 1962, 1956, 1960, 1959,
3215 0, 1947, 1945, 1960, 1961, 1948, 1948, 1949, 1950, 1949,
3216
3217 1951, 1961, 1963, 1953, 1965, 1957, 1954, 1954, 1951, 1959,
3218 1956, 1957, 1962, 1962, 1967, 1960, 1959, 1958, 1964, 1965,
3219 1963, 1961, 1966, 1968, 1964, 1973, 1967, 1969, 1969, 1963,
3220 1970, 1965, 1973, 1975, 1971, 1974, 1976, 1966, 1968, 1974,
3221 1979, 1967, 1970, 1980, 1977, 1964, 1983, 1971, 1975, 1966,
3222 1968, 1978, 1973, 1977, 1969, 1971, 1984, 1970, 1978, 1981,
3223 1975, 1971, 1974, 1976, 1979, 1980, 1981, 1979, 1983, 1986,
3224 1980, 1977, 1987, 1983, 1971, 1985, 1989, 1992, 1978, 1991,
3225 1994, 1984, 1993, 1984, 1985, 1995, 1981, 0, 1991, 1997,
3226 1999, 1986, 1987, 1995, 1989, 1992, 1986, 1993, 1998, 1987,
3227
3228 2000, 2000, 1985, 1989, 1992, 1994, 1991, 1994, 2001, 1993,
3229 2003, 1998, 1995, 2002, 1997, 2005, 1997, 1999, 2007, 2004,
3230 2009, 2006, 2008, 2018, 2005, 1998, 2010, 2000, 2006, 0,
3231 2001, 2012, 2003, 2014, 2009, 2001, 2015, 2003, 2002, 2012,
3232 2002, 2004, 2005, 2013, 2008, 2010, 2004, 2009, 2006, 2008,
3233 2007, 2019, 2016, 2010, 2017, 2018, 2013, 2020, 2012, 2021,
3234 2014, 2017, 2015, 2015, 2016, 2023, 2022, 0, 2021, 2025,
3235 2013, 2026, 2024, 2019, 2022, 0, 2027, 2033, 2019, 2016,
3236 2028, 2017, 2020, 2033, 2020, 2022, 2021, 2024, 2032, 0,
3237 2039, 2029, 2023, 2022, 2027, 2025, 2025, 2026, 2026, 2024,
3238
3239 2029, 2022, 2028, 2027, 2033, 2031, 2034, 2028, 2031, 2035,
3240 2036, 2034, 2039, 2032, 2038, 2032, 2042, 2039, 2029, 2043,
3241 2040, 2044, 2045, 2031, 2046, 2036, 2043, 2035, 2068, 2038,
3242 2042, 2047, 2031, 2046, 2048, 2031, 2035, 2036, 2034, 2044,
3243 2047, 2038, 2040, 2042, 2049, 2048, 2043, 2040, 2044, 2045,
3244 2050, 2046, 2052, 2053, 2055, 2068, 2054, 2049, 2047, 0,
3245 2056, 2048, 2050, 2054, 2062, 2060, 2057, 2052, 2053, 2063,
3246 2066, 2049, 2066, 2063, 2070, 2077, 2055, 2050, 2060, 2052,
3247 2053, 2055, 2056, 2054, 2057, 2062, 2060, 2056, 2064, 2065,
3248 2067, 2062, 2060, 2057, 2069, 2071, 2063, 2066, 2065, 0,
3249
3250 2064, 2070, 2072, 2071, 2073, 2060, 2074, 2077, 2067, 2075,
3251 2078, 2079, 2069, 2076, 2075, 2064, 2065, 2067, 2076, 2084,
3252 2074, 2069, 2071, 2081, 2080, 2072, 2073, 2085, 0, 2072,
3253 2081, 2073, 2087, 2074, 2088, 2079, 2075, 2086, 2079, 2090,
3254 2091, 2085, 2078, 2080, 0, 2076, 2084, 2089, 2090, 2092,
3255 2081, 2080, 2085, 2085, 2085, 2086, 2093, 2094, 2095, 2087,
3256 2088, 2088, 2089, 2096, 2086, 2098, 2090, 2100, 2085, 2104,
3257 2099, 2092, 2091, 2103, 2089, 2103, 2092, 2099, 2109, 2085,
3258 2095, 2107, 2093, 2093, 2094, 2095, 2101, 2106, 2098, 2109,
3259 2100, 2104, 2098, 2101, 2100, 2096, 2104, 2099, 2105, 2106,
3260
3261 2103, 2108, 2105, 2107, 2110, 2109, 2113, 2111, 2107, 2114,
3262 2108, 2110, 2112, 2101, 2106, 2115, 2116, 2112, 2117, 2117,
3263 2119, 2118, 0, 2122, 2121, 2105, 0, 2115, 2108, 2111,
3264 2118, 2110, 2114, 2113, 2111, 2119, 2114, 2122, 2116, 2112,
3265 2124, 2120, 2115, 2116, 2123, 2117, 2121, 2119, 2118, 2120,
3266 2122, 2121, 2127, 2123, 2126, 2128, 2130, 2129, 2131, 2130,
3267 2127, 2129, 2133, 2128, 2132, 2139, 2131, 2124, 2120, 2134,
3268 2132, 2123, 2140, 2126, 2136, 2134, 2138, 2133, 2139, 2127,
3269 2141, 2126, 2128, 2130, 2129, 2131, 2136, 2142, 2143, 2133,
3270 2138, 2132, 2139, 2140, 2144, 2145, 2134, 2148, 2146, 2140,
3271
3272 2149, 2136, 2147, 2138, 0, 2141, 2150, 2141, 2151, 2145,
3273 2143, 2146, 2153, 2156, 2142, 2143, 2147, 2154, 2144, 2157,
3274 2152, 2144, 2145, 2148, 2148, 2146, 2153, 2149, 2158, 2147,
3275 0, 2150, 2152, 2150, 2155, 2151, 2160, 2155, 2161, 2153,
3276 2156, 2162, 2163, 2154, 2154, 2161, 2157, 2152, 2162, 2164,
3277 2158, 2165, 2155, 2167, 2166, 2158, 2169, 2163, 2160, 2170,
3278 2171, 2155, 2166, 2160, 2155, 2161, 2168, 2172, 2162, 2163,
3279 2173, 2170, 2174, 2175, 2179, 2168, 2164, 2176, 2165, 2180,
3280 2167, 2166, 2171, 2169, 2177, 2174, 2170, 2171, 2182, 2183,
3281 2176, 2175, 2177, 2168, 2172, 2181, 2179, 2173, 2183, 2174,
3282
3283 2175, 2179, 2184, 2181, 2176, 2187, 2180, 2185, 0, 2186,
3284 2188, 2177, 2190, 2189, 2191, 2182, 2183, 2194, 2188, 2193,
3285 2190, 2194, 2181, 2184, 2186, 2189, 2193, 2196, 2197, 2184,
3286 2195, 2185, 2187, 0, 2185, 2186, 2186, 2188, 2199, 2190,
3287 2189, 2191, 2195, 2203, 2194, 2198, 2193, 2200, 2205, 2201,
3288 2196, 2186, 2255, 2198, 2196, 2197, 2204, 2195, 2206, 2200,
3289 2199, 2201, 2210, 2204, 2207, 2199, 2209, 2209, 2205, 2208,
3290 2203, 2206, 2198, 2207, 2200, 2205, 2201, 2211, 2208, 2255,
3291 2212, 2216, 2213, 2204, 2219, 2206, 2215, 0, 2210, 2210,
3292 2217, 2207, 2218, 2209, 2218, 2211, 2208, 2213, 2219, 2213,
3293
3294 2221, 2215, 2227, 2216, 2211, 2212, 2213, 2212, 2216, 2213,
3295 2220, 2219, 2217, 2215, 2222, 2222, 2220, 2217, 2224, 2218,
3296 2225, 2226, 2221, 2228, 2213, 2229, 2213, 2221, 2232, 2228,
3297 2232, 2230, 2231, 2226, 2227, 2233, 2234, 2220, 2235, 2239,
3298 2224, 2222, 2225, 2236, 2240, 2224, 2237, 2225, 2226, 2233,
3299 2228, 2238, 2239, 2230, 2231, 2232, 2235, 2229, 2230, 2231,
3300 2234, 2236, 2233, 2234, 2237, 2235, 2239, 2241, 2242, 2238,
3301 2236, 2246, 0, 2237, 2244, 2248, 2240, 2247, 2238, 2249,
3302 0, 2244, 2253, 2251, 0, 2251, 2250, 2249, 0, 2246,
3303 2251, 2242, 0, 2253, 2268, 2242, 2269, 2257, 2246, 2241,
3304
3305 2254, 2244, 2259, 2247, 2247, 2249, 2249, 2248, 2250, 2253,
3306 2251, 2254, 2251, 2250, 2249, 2257, 2256, 2259, 2262, 2260,
3307 2261, 2268, 2269, 2269, 2257, 2264, 2265, 2254, 2256, 2259,
3308 2260, 2266, 2261, 2262, 2271, 2267, 2272, 2273, 2266, 2274,
3309 2275, 2277, 0, 2256, 2284, 2262, 2260, 2261, 2265, 2264,
3310 2267, 2276, 2264, 2265, 2278, 0, 2279, 2281, 2266, 2273,
3311 2272, 2271, 2267, 2272, 2273, 2280, 2282, 2278, 2277, 2276,
3312 2281, 2274, 2275, 2283, 2282, 2285, 2284, 2290, 2276, 2286,
3313 2280, 2278, 2279, 2279, 2281, 2288, 2289, 2291, 2285, 2292,
3314 0, 2294, 2280, 2282, 2295, 2296, 0, 2293, 2294, 2283,
3315
3316 2283, 2286, 2285, 2299, 2290, 2297, 2286, 2292, 2288, 2291,
3317 2289, 2303, 2288, 2289, 2291, 2293, 2292, 2295, 2294, 2297,
3318 2300, 2295, 2296, 2302, 2293, 2299, 2301, 2300, 2304, 2305,
3319 2299, 2306, 2297, 2301, 2303, 2304, 2302, 2307, 2303, 2308,
3320 2311, 2309, 2314, 2317, 2310, 2331, 2318, 2300, 2308, 2309,
3321 2302, 2305, 2310, 2301, 2312, 2304, 2305, 2314, 2307, 2315,
3322 2312, 2316, 2311, 2306, 2307, 2318, 2308, 2311, 2309, 2314,
3323 2315, 2310, 2319, 2318, 2321, 2317, 2323, 2331, 2324, 0,
3324 2332, 2312, 2325, 2316, 2326, 2326, 2315, 2327, 2316, 2323,
3325 2333, 2337, 2321, 2330, 2334, 2332, 0, 2319, 0, 2319,
3326
3327 2349, 2321, 2341, 2323, 2324, 2324, 2325, 2332, 2345, 2325,
3328 2339, 2326, 2334, 2327, 2327, 2341, 2330, 2333, 2337, 2339,
3329 2330, 2334, 2342, 2346, 2346, 2347, 2348, 2349, 2351, 2341,
3330 2345, 2353, 2354, 2342, 2355, 2345, 0, 2339, 2356, 2361,
3331 2357, 2360, 2363, 2356, 2364, 2355, 2359, 2347, 2348, 2342,
3332 2346, 2368, 2347, 2348, 2359, 2351, 2360, 2369, 2354, 2354,
3333 2363, 2355, 2357, 2353, 2370, 2356, 2361, 2357, 2360, 2363,
3334 2365, 2366, 2370, 2359, 2373, 2374, 2364, 2371, 2368, 2365,
3335 0, 2369, 2380, 2366, 2369, 2375, 2371, 2376, 2377, 2378,
3336 0, 2370, 2379, 2382, 0, 2380, 2376, 2365, 2366, 2383,
3337
3338 2373, 2373, 2374, 2384, 2371, 2381, 2377, 2375, 2382, 2380,
3339 2384, 2378, 2375, 2385, 2376, 2377, 2378, 2379, 2381, 2379,
3340 2382, 2383, 2386, 2387, 2388, 2389, 2383, 2390, 2391, 2395,
3341 2384, 2392, 2381, 2393, 0, 2385, 2394, 2391, 2397, 2399,
3342 2385, 0, 2390, 2401, 2395, 2397, 2396, 2402, 0, 2386,
3343 2387, 2388, 2389, 2392, 2390, 2391, 2395, 2398, 2392, 2393,
3344 2393, 2396, 2394, 2394, 2400, 2397, 2399, 2403, 2398, 2405,
3345 2401, 2404, 2400, 2396, 2402, 2406, 2411, 2408, 2407, 2412,
3346 2409, 2410, 0, 2403, 2398, 2407, 2404, 2409, 2410, 2405,
3347 2406, 2400, 2413, 2413, 2403, 2419, 2405, 2412, 2404, 2408,
3348
3349 2415, 0, 2406, 2411, 2408, 2407, 2412, 2409, 2410, 2414,
3350 2416, 2417, 0, 2416, 2415, 2418, 2414, 2420, 2425, 2413,
3351 2421, 2419, 2419, 2425, 2417, 2424, 2427, 2415, 2422, 2426,
3352 2418, 2431, 2421, 2426, 2424, 2420, 2414, 2416, 2417, 2429,
3353 2422, 2428, 2418, 2430, 2420, 2425, 2432, 2421, 2433, 0,
3354 2427, 2435, 2424, 2427, 2428, 2422, 2426, 2437, 2431, 2440,
3355 2438, 2429, 2444, 2439, 2441, 2430, 2429, 2440, 2428, 2438,
3356 2430, 2444, 0, 2432, 2433, 2433, 2441, 2435, 2435, 2439,
3357 2445, 2443, 2447, 2437, 2437, 2445, 2440, 2438, 2443, 2444,
3358 2439, 2441, 2446, 2449, 2448, 2450, 2451, 2452, 2455, 2446,
3359
3360 2447, 2448, 2450, 2453, 2456, 2451, 2452, 2445, 2443, 2447,
3361 2457, 2459, 2462, 2465, 2458, 2457, 2461, 2456, 2449, 2446,
3362 2449, 2448, 2450, 2451, 2452, 2455, 2463, 2464, 0, 2453,
3363 2453, 2456, 2458, 2465, 2461, 2463, 2464, 2457, 2459, 2462,
3364 2465, 2458, 2467, 2461, 2466, 2471, 2468, 2469, 2472, 2470,
3365 2476, 2467, 2473, 2463, 2464, 2468, 2466, 2470, 2469, 2473,
3366 2475, 2474, 2477, 2478, 0, 0, 2480, 2482, 0, 2467,
3367 2474, 2466, 2471, 2468, 2469, 2472, 2470, 2476, 2480, 2473,
3368 2482, 2475, 2479, 2483, 2481, 2486, 2488, 2475, 2474, 2477,
3369 2484, 2479, 2481, 2480, 2482, 2478, 2485, 2484, 0, 2487,
3370
3371 2489, 2490, 2494, 2485, 2496, 2483, 2492, 2486, 2495, 2479,
3372 2483, 2481, 2486, 2488, 2492, 2497, 2495, 2484, 2498, 2496,
3373 2494, 2505, 2497, 2485, 2487, 2489, 2487, 2489, 2490, 2494,
3374 2499, 2496, 2503, 2492, 2504, 2495, 2500, 2499, 2506, 2503,
3375 2498, 2508, 2497, 2507, 2500, 2498, 2509, 2513, 2505, 2512,
3376 2506, 2519, 2507, 2514, 2511, 2517, 0, 2499, 2504, 2503,
3377 2521, 2504, 2517, 2500, 2524, 2506, 2511, 2514, 2508, 2509,
3378 2507, 2516, 2512, 2509, 2513, 2521, 2512, 2518, 2519, 2522,
3379 2514, 2511, 2517, 2516, 2518, 2523, 2525, 2521, 2526, 2527,
3380 2529, 2524, 2528, 2531, 2525, 2536, 2538, 2522, 2516, 2530,
3381
3382 2537, 2529, 2543, 0, 2518, 2537, 2522, 2541, 2523, 2546,
3383 2528, 2527, 2523, 2525, 2530, 2526, 2527, 2529, 2539, 2528,
3384 2531, 2536, 2536, 2538, 2540, 2541, 2530, 2537, 2542, 2543,
3385 2544, 2549, 2539, 2553, 2541, 2551, 2546, 2550, 2540, 2552,
3386 0, 2554, 2544, 0, 2556, 2539, 2542, 2555, 2551, 2554,
3387 2559, 2540, 2553, 2549, 2560, 2542, 2562, 2544, 2549, 2550,
3388 2553, 2552, 2551, 2556, 2550, 2555, 2552, 2558, 2554, 2563,
3389 2561, 2556, 2559, 2564, 2555, 2565, 2560, 2559, 2567, 2558,
3390 2568, 2560, 2561, 2562, 2566, 2569, 2570, 2567, 2571, 2568,
3391 0, 2572, 2574, 0, 2558, 2565, 2563, 2561, 2573, 2575,
3392
3393 2564, 2579, 2565, 2572, 0, 2567, 2566, 2568, 2570, 2578,
3394 2580, 2566, 2586, 2570, 2571, 2571, 2581, 2569, 2572, 2574,
3395 2573, 2581, 2582, 2578, 2583, 2573, 2575, 2584, 2579, 2585,
3396 2587, 2589, 2588, 2592, 2580, 2586, 2578, 2580, 2593, 2586,
3397 2584, 2590, 2594, 2589, 2582, 2598, 2583, 2591, 2581, 2582,
3398 2588, 2583, 2587, 2591, 2584, 2597, 2595, 2587, 2589, 2588,
3399 2590, 2585, 2599, 2601, 2594, 2592, 2603, 2598, 2590, 2594,
3400 2593, 2595, 2598, 2604, 2591, 2597, 2605, 2606, 2601, 2607,
3401 2608, 2610, 2597, 2595, 2609, 2605, 2599, 2613, 2603, 2599,
3402 2601, 2606, 2614, 2603, 2615, 2604, 2613, 2607, 2608, 2610,
3403
3404 2604, 2618, 2621, 2605, 2606, 2619, 2607, 2608, 2610, 2618,
3405 2609, 2609, 2619, 2622, 2613, 2615, 2624, 2620, 2623, 2625,
3406 2626, 2615, 2627, 2629, 2614, 2620, 2623, 2633, 2618, 2621,
3407 2627, 2625, 2619, 2622, 2624, 2629, 2632, 2634, 2635, 2634,
3408 2622, 2631, 2636, 2624, 2620, 2623, 2625, 2626, 2631, 2627,
3409 2629, 2637, 2638, 2639, 2633, 2640, 0, 2642, 2645, 2632,
3410 2646, 2651, 2643, 2632, 2634, 2649, 2647, 2652, 2631, 2654,
3411 2635, 2658, 2639, 2646, 2636, 2642, 2643, 2640, 2647, 2638,
3412 2639, 2645, 2640, 2637, 2642, 2645, 2650, 2646, 2651, 2643,
3413 2656, 2649, 2649, 2647, 2652, 2650, 2654, 2655, 2658, 2660,
3414
3415 2661, 2662, 2663, 2665, 0, 2666, 2660, 2663, 2668, 2669,
3416 2665, 0, 2656, 2650, 2670, 2671, 2662, 2656, 2675, 0,
3417 2655, 2676, 2661, 2677, 2655, 2675, 2660, 2661, 2662, 2671,
3418 2665, 2666, 2666, 2678, 2663, 2668, 2669, 2673, 2670, 2679,
3419 2680, 2670, 2671, 2681, 2682, 2675, 2673, 2685, 2676, 2677,
3420 2677, 2679, 2683, 2682, 2684, 2686, 2690, 2681, 2691, 2695,
3421 2678, 2690, 2691, 2694, 2673, 2683, 2679, 2680, 2692, 2693,
3422 2681, 2682, 2698, 0, 2685, 2692, 2693, 2697, 2686, 2683,
3423 2701, 2696, 2686, 2696, 2694, 2691, 2684, 2703, 2690, 2704,
3424 2694, 2695, 2706, 2707, 2706, 2692, 2693, 2708, 0, 2698,
3425
3426 2697, 2711, 2701, 2710, 2697, 2713, 2703, 2701, 2696, 2714,
3427 2711, 2709, 2709, 2704, 2703, 2712, 2704, 2707, 2713, 2706,
3428 2707, 2709, 2712, 2708, 2708, 2710, 2716, 2715, 2711, 2718,
3429 2710, 2717, 2713, 2719, 2716, 2723, 2714, 2718, 2709, 2709,
3430 2715, 2720, 2712, 2721, 2717, 2724, 2720, 2722, 2721, 0,
3431 2716, 2725, 2719, 2716, 2715, 2722, 2718, 2726, 2717, 2727,
3432 2719, 2716, 2723, 2730, 0, 2728, 2729, 2731, 2731, 2732,
3433 2730, 2724, 2724, 2720, 2722, 2721, 2728, 2725, 2725, 2733,
3434 2734, 2735, 2736, 2726, 2726, 2727, 2727, 2733, 2729, 2736,
3435 2730, 2732, 2728, 2729, 2731, 2739, 2732, 2737, 2740, 2735,
3436
3437 0, 2742, 2734, 2741, 2737, 2744, 2733, 2734, 2735, 2736,
3438 2742, 2745, 2746, 2747, 2749, 2750, 2751, 2754, 2752, 2755,
3439 0, 0, 2739, 0, 2737, 2740, 2754, 2741, 2742, 2756,
3440 2741, 2745, 2744, 2750, 2751, 2747, 2752, 2757, 2745, 2746,
3441 2747, 2749, 2750, 2751, 2754, 2752, 2755, 2758, 2759, 2760,
3442 2761, 2766, 2756, 2759, 0, 2757, 2756, 2767, 2762, 2758,
3443 2769, 2772, 2770, 2760, 2757, 2771, 0, 2771, 2761, 0,
3444 2772, 2775, 2774, 2766, 2758, 2770, 2760, 2761, 2766, 2779,
3445 2759, 2762, 2781, 0, 2767, 2762, 2775, 2769, 2772, 2770,
3446 2774, 2778, 2771, 2778, 2780, 2783, 2785, 2779, 2775, 2774,
3447
3448 0, 2780, 2785, 2787, 2788, 2795, 2779, 2789, 0, 2790,
3449 2783, 0, 2793, 2792, 2781, 2793, 2796, 2797, 2778, 2798,
3450 2800, 2780, 2783, 2785, 0, 2787, 2788, 2790, 2800, 2801,
3451 2787, 2788, 2795, 2789, 2789, 2792, 2790, 2798, 2793, 2793,
3452 2792, 2799, 2793, 2796, 2797, 2803, 2798, 2800, 2799, 2804,
3453 0, 2801, 2805, 2806, 2807, 2808, 2801, 2811, 2809, 2812,
3454 2813, 2810, 2813, 2807, 2809, 2814, 2811, 2816, 2799, 0,
3455 2808, 2804, 2819, 2817, 2805, 2818, 2804, 2803, 2820, 2805,
3456 2806, 2807, 2808, 2810, 2811, 2809, 2820, 2813, 2810, 2821,
3457 2816, 2812, 2814, 2826, 2816, 2817, 2822, 2818, 2819, 2819,
3458
3459 2817, 2821, 2818, 2824, 2828, 2820, 2830, 2829, 2822, 2831,
3460 2824, 2832, 0, 2834, 2840, 2835, 2821, 2833, 2828, 2836,
3461 2826, 2829, 2832, 2822, 0, 2833, 0, 2831, 2844, 2830,
3462 2824, 2828, 2834, 2830, 2829, 2837, 2831, 2835, 2832, 2838,
3463 2834, 2840, 2835, 2841, 2833, 2836, 2836, 2845, 2838, 2839,
3464 2839, 2841, 2847, 2837, 2849, 2844, 2851, 2852, 2847, 2856,
3465 2853, 0, 2837, 2854, 2862, 2857, 2838, 2851, 2852, 2858,
3466 2841, 2853, 2857, 2858, 2845, 2861, 2839, 2862, 2864, 2847,
3467 2859, 2849, 2868, 2851, 2852, 2854, 2856, 2853, 2859, 2863,
3468 2854, 2862, 2857, 2867, 2870, 2869, 2858, 2863, 2871, 2870,
3469
3470 2867, 2861, 2861, 2872, 2873, 2864, 2876, 2859, 2874, 2878,
3471 2875, 2873, 2877, 2880, 2868, 2879, 2863, 2869, 2882, 2877,
3472 2867, 2870, 2869, 2879, 2876, 2871, 2875, 2874, 2880, 2881,
3473 2872, 2873, 2888, 2876, 2883, 2874, 2881, 2875, 2884, 2877,
3474 2880, 2878, 2879, 2889, 2890, 2882, 2891, 2888, 2892, 2893,
3475 2889, 2894, 2896, 2897, 2874, 2898, 2881, 2900, 2883, 2888,
3476 2894, 2883, 0, 2899, 2884, 2884, 0, 2902, 0, 0,
3477 2889, 2899, 2892, 2891, 2896, 2892, 2890, 2898, 2894, 2896,
3478 2897, 2893, 2898, 2901, 2901, 2904, 2905, 2907, 2908, 2900,
3479 2899, 2909, 2910, 2901, 2902, 2905, 2906, 2913, 2906, 2909,
3480
3481 2904, 2907, 2911, 2910, 2914, 2915, 2917, 2918, 2916, 2919,
3482 2901, 2901, 2904, 2905, 2907, 2908, 2920, 2923, 2909, 2910,
3483 2911, 2916, 0, 2906, 2913, 2921, 2924, 2915, 2917, 2911,
3484 2926, 2914, 2915, 2917, 2918, 2916, 2919, 2922, 2922, 2921,
3485 2931, 2932, 2929, 2920, 2934, 2931, 2932, 2936, 2924, 2923,
3486 2929, 2933, 2921, 2924, 2938, 2939, 2933, 2926, 2940, 2937,
3487 2941, 2938, 2943, 2949, 2922, 2951, 2953, 2931, 2932, 2929,
3488 2934, 2934, 2937, 2939, 2936, 2946, 2944, 2952, 2933, 2953,
3489 2945, 2938, 2939, 2944, 2954, 2940, 2937, 2941, 2945, 0,
3490 2949, 2955, 2951, 2953, 2943, 2956, 2957, 2946, 2958, 2952,
3491
3492 2963, 2960, 2946, 2944, 2952, 2961, 2955, 2945, 2960, 2962,
3493 2966, 2967, 2961, 2964, 2956, 2963, 2954, 2968, 2955, 2967,
3494 2958, 2971, 2956, 2957, 2968, 2958, 2969, 2963, 2960, 2966,
3495 2971, 2962, 2961, 2969, 2964, 2972, 2962, 2966, 2967, 2974,
3496 2964, 2973, 2973, 2975, 2968, 2974, 2972, 2978, 2971, 2977,
3497 2979, 2973, 2982, 2969, 2978, 0, 2980, 2983, 2984, 2982,
3498 2987, 2988, 2972, 2989, 2993, 2975, 2974, 2994, 2973, 2973,
3499 2975, 2977, 2984, 0, 2978, 2996, 2977, 2998, 2980, 2982,
3500 3002, 2983, 2979, 2980, 2983, 2984, 2989, 2987, 2988, 2994,
3501 2989, 2993, 2995, 3004, 2994, 2999, 2999, 3000, 3000, 0,
3502
3503 2995, 3005, 2996, 3002, 2998, 3001, 3001, 3002, 3006, 3009,
3504 3005, 3010, 3012, 3016, 3018, 3011, 3009, 3019, 3010, 2995,
3505 3004, 3006, 3017, 3015, 2999, 3015, 3000, 3023, 3005, 3019,
3506 3022, 3024, 3018, 3016, 3001, 3006, 3009, 3011, 3010, 3012,
3507 3016, 3018, 3011, 3021, 3019, 3017, 3025, 3026, 3022, 3017,
3508 3015, 3029, 3021, 3023, 3023, 3027, 3029, 3022, 3024, 3026,
3509 3028, 3030, 3031, 3028, 3031, 3033, 3038, 3032, 3036, 3034,
3510 3021, 3033, 3037, 3025, 3026, 3035, 3036, 3027, 3028, 3032,
3511 3039, 3040, 3027, 3029, 3041, 3046, 3048, 3028, 3042, 3031,
3512 3028, 3034, 3033, 3030, 3032, 3036, 3034, 3035, 3038, 3037,
3513
3514 3042, 3039, 3035, 3043, 3049, 3052, 3053, 3039, 3040, 3054,
3515 3055, 3041, 3046, 3048, 3056, 3042, 3057, 3058, 3061, 3063,
3516 3060, 3062, 3049, 0, 3067, 3043, 0, 0, 3064, 0,
3517 3043, 3049, 3052, 3053, 3063, 3064, 3054, 3055, 3060, 3062,
3518 3068, 3056, 3066, 3057, 3058, 3061, 3063, 3060, 3062, 3069,
3519 3066, 3067, 3068, 3070, 3072, 3064, 3071, 3073, 3078, 3078,
3520 3084, 3076, 3077, 3069, 3079, 3080, 3072, 3068, 3070, 3066,
3521 3076, 3082, 3083, 3084, 3080, 3085, 3069, 0, 3090, 0,
3522 3070, 3072, 3071, 3071, 3073, 3078, 3077, 3084, 3076, 3077,
3523 3079, 3079, 3080, 3086, 3087, 3082, 3088, 3085, 3082, 3090,
3524
3525 3091, 3086, 3085, 3087, 3083, 3090, 3094, 3088, 3098, 3098,
3526 3095, 3108, 3106, 3109, 3110, 3111, 3114, 3117, 3091, 0,
3527 3086, 3087, 3095, 3088, 3113, 3108, 3115, 3091, 3113, 3094,
3528 3117, 3120, 3121, 3094, 3114, 3098, 3106, 3095, 3108, 3106,
3529 3109, 3110, 3111, 3114, 3117, 3116, 3119, 3120, 3123, 3115,
3530 3119, 3113, 3116, 3115, 3121, 3122, 0, 3124, 3120, 3121,
3531 3123, 3126, 3125, 3131, 0, 3127, 3128, 3130, 3129, 3126,
3532 3129, 3132, 3116, 3119, 3127, 3123, 3125, 3128, 3133, 3130,
3533 3122, 3131, 3122, 3124, 3124, 3134, 3132, 3135, 3126, 3125,
3534 3131, 3134, 3127, 3128, 3130, 3129, 3136, 3137, 3132, 3142,
3535
3536 3133, 3143, 3141, 3136, 3144, 3133, 3142, 3145, 3147, 3135,
3537 3146, 3148, 3134, 3149, 3135, 3141, 3156, 3151, 3150, 3137,
3538 3152, 3149, 3144, 3136, 3137, 3150, 3142, 3153, 3143, 3141,
3539 3154, 3144, 3154, 3157, 3145, 3147, 3146, 3146, 3148, 3155,
3540 3149, 3151, 3152, 3158, 3151, 3150, 3157, 3152, 3156, 3153,
3541 3159, 3155, 3160, 3162, 3153, 3161, 3163, 3154, 3158, 3164,
3542 3157, 3165, 3161, 3166, 3168, 3170, 3155, 3173, 3175, 3165,
3543 3158, 3164, 3159, 3174, 3170, 3177, 3168, 3159, 3178, 3160,
3544 3162, 3176, 3161, 3163, 3179, 0, 3164, 3175, 3165, 3176,
3545 3166, 3168, 3170, 3181, 3173, 3175, 3182, 3179, 3180, 3174,
3546
3547 3174, 3181, 3183, 3185, 3191, 3192, 3189, 3177, 3176, 3188,
3548 3178, 3179, 3180, 3189, 3194, 3188, 3195, 3191, 3182, 3196,
3549 3181, 3194, 3200, 3182, 3202, 3180, 3197, 3196, 3192, 3183,
3550 3185, 3191, 3192, 3189, 3198, 3201, 3188, 3199, 3195, 3208,
3551 3197, 3194, 3211, 3195, 3200, 3199, 3196, 3205, 3198, 3200,
3552 3206, 3202, 3207, 3197, 3205, 3210, 3209, 3201, 3212, 3206,
3553 3207, 3198, 3201, 3215, 3199, 0, 3208, 3213, 3211, 3211,
3554 3214, 3215, 3216, 3218, 3205, 3220, 3219, 3206, 3209, 3207,
3555 3212, 3224, 3222, 3209, 3227, 3212, 3231, 3210, 3223, 3213,
3556 3215, 3225, 3214, 3229, 3213, 3233, 3223, 3214, 3219, 3225,
3557
3558 3218, 3224, 3220, 3219, 3216, 3222, 3226, 3229, 3224, 3222,
3559 3235, 3228, 3231, 3231, 3226, 3223, 3227, 3236, 3225, 3228,
3560 3229, 3234, 3233, 3237, 3234, 3236, 3238, 0, 3239, 3241,
3561 3240, 3237, 3235, 3226, 3243, 3243, 3244, 3235, 3228, 3234,
3562 3238, 3245, 3248, 3241, 3236, 3246, 0, 3247, 3234, 3245,
3563 3237, 3234, 3240, 3238, 3239, 3239, 3241, 3240, 3249, 3250,
3564 3251, 3243, 3244, 3244, 3248, 3253, 3252, 3250, 3245, 3248,
3565 3254, 3246, 3246, 3247, 3247, 3255, 3256, 3258, 3249, 3261,
3566 0, 3257, 0, 3259, 3270, 3249, 3250, 3251, 3252, 3257,
3567 3253, 3259, 3253, 3252, 3264, 3255, 3256, 3254, 3265, 3258,
3568
3569 3268, 3262, 3255, 3256, 3258, 3266, 3261, 3267, 3257, 3262,
3570 3259, 3270, 3273, 3266, 3271, 3267, 3264, 3274, 3277, 3278,
3571 3265, 3264, 3271, 3272, 3287, 3265, 3268, 3268, 3262, 3275,
3572 3281, 3272, 3266, 3279, 3267, 3285, 3284, 3288, 3273, 3273,
3573 3286, 3271, 0, 3285, 3274, 3277, 3278, 0, 3286, 3275,
3574 3272, 3287, 3281, 3279, 0, 0, 3275, 3281, 3284, 0,
3575 3279, 0, 3285, 3284, 3288, 0, 0, 3286, 3292, 3292,
3576 3292, 3292, 3292, 3292, 3292, 3293, 3293, 3293, 3293, 3293,
3577 3293, 3293, 3294, 3294, 3294, 3294, 3294, 3294, 3294, 3295,
3578 3295, 3295, 3295, 3295, 3295, 3295, 3296, 3296, 3296, 3296,
3579
3580 3296, 3296, 3296, 3297, 3297, 3297, 3297, 3297, 3297, 3297,
3581 3298, 3298, 3298, 3298, 3298, 3298, 3298, 3300, 3300, 0,
3582 3300, 3300, 3300, 3300, 3301, 3301, 0, 0, 0, 3301,
3583 3301, 3302, 3302, 0, 0, 3302, 0, 3302, 3303, 0,
3584 0, 0, 0, 0, 3303, 3304, 3304, 0, 0, 0,
3585 3304, 3304, 3305, 0, 0, 0, 0, 0, 3305, 3306,
3586 3306, 0, 3306, 3306, 3306, 3306, 3307, 0, 0, 0,
3587 0, 0, 3307, 3308, 3308, 0, 0, 0, 3308, 3308,
3588 3309, 3309, 0, 3309, 3309, 3309, 3309, 3291, 3291, 3291,
3589 3291, 3291, 3291, 3291, 3291, 3291, 3291, 3291, 3291, 3291,
3590
3591 3291, 3291, 3291, 3291, 3291, 3291, 3291, 3291, 3291, 3291,
3592 3291, 3291, 3291, 3291, 3291, 3291, 3291, 3291, 3291, 3291,
3593 3291, 3291, 3291, 3291, 3291, 3291, 3291, 3291, 3291, 3291,
3594 3291, 3291, 3291, 3291, 3291, 3291, 3291, 3291, 3291, 3291,
3595 3291, 3291, 3291, 3291, 3291, 3291, 3291, 3291, 3291, 3291,
3596 3291, 3291, 3291, 3291
35543597 } ;
35553598
35563599 static yy_state_type yy_last_accepting_state;
37563799 }
37573800 #endif
37583801
3759 #line 3758 "<stdout>"
3802 #line 3801 "<stdout>"
37603803 #define YY_NO_INPUT 1
37613804 #line 191 "util/configlexer.lex"
37623805 #ifndef YY_NO_UNPUT
37653808 #ifndef YY_NO_INPUT
37663809 #define YY_NO_INPUT 1
37673810 #endif
3768 #line 3767 "<stdout>"
3769
3770 #line 3769 "<stdout>"
3811 #line 3810 "<stdout>"
3812
3813 #line 3812 "<stdout>"
37713814
37723815 #define INITIAL 0
37733816 #define quotedstring 1
39914034 {
39924035 #line 211 "util/configlexer.lex"
39934036
3994 #line 3993 "<stdout>"
4037 #line 4036 "<stdout>"
39954038
39964039 while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */
39974040 {
40244067 while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
40254068 {
40264069 yy_current_state = (int) yy_def[yy_current_state];
4027 if ( yy_current_state >= 3253 )
4070 if ( yy_current_state >= 3292 )
40284071 yy_c = yy_meta[yy_c];
40294072 }
40304073 yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
40314074 ++yy_cp;
40324075 }
4033 while ( yy_base[yy_current_state] != 9263 );
4076 while ( yy_base[yy_current_state] != 9388 );
40344077
40354078 yy_find_action:
40364079 yy_act = yy_accept[yy_current_state];
43104353 case 51:
43114354 YY_RULE_SETUP
43124355 #line 265 "util/configlexer.lex"
4356 { YDVAR(1, VAR_HTTP_NOTLS_DOWNSTREAM) }
4357 YY_BREAK
4358 case 52:
4359 YY_RULE_SETUP
4360 #line 266 "util/configlexer.lex"
43134361 { YDVAR(1, VAR_USE_SYSTEMD) }
43144362 YY_BREAK
4315 case 52:
4316 YY_RULE_SETUP
4317 #line 266 "util/configlexer.lex"
4363 case 53:
4364 YY_RULE_SETUP
4365 #line 267 "util/configlexer.lex"
43184366 { YDVAR(1, VAR_DO_DAEMONIZE) }
4319 YY_BREAK
4320 case 53:
4321 YY_RULE_SETUP
4322 #line 267 "util/configlexer.lex"
4323 { YDVAR(1, VAR_INTERFACE) }
43244367 YY_BREAK
43254368 case 54:
43264369 YY_RULE_SETUP
43304373 case 55:
43314374 YY_RULE_SETUP
43324375 #line 269 "util/configlexer.lex"
4376 { YDVAR(1, VAR_INTERFACE) }
4377 YY_BREAK
4378 case 56:
4379 YY_RULE_SETUP
4380 #line 270 "util/configlexer.lex"
43334381 { YDVAR(1, VAR_OUTGOING_INTERFACE) }
43344382 YY_BREAK
4335 case 56:
4336 YY_RULE_SETUP
4337 #line 270 "util/configlexer.lex"
4383 case 57:
4384 YY_RULE_SETUP
4385 #line 271 "util/configlexer.lex"
43384386 { YDVAR(1, VAR_INTERFACE_AUTOMATIC) }
43394387 YY_BREAK
4340 case 57:
4341 YY_RULE_SETUP
4342 #line 271 "util/configlexer.lex"
4388 case 58:
4389 YY_RULE_SETUP
4390 #line 272 "util/configlexer.lex"
43434391 { YDVAR(1, VAR_SO_RCVBUF) }
43444392 YY_BREAK
4345 case 58:
4346 YY_RULE_SETUP
4347 #line 272 "util/configlexer.lex"
4393 case 59:
4394 YY_RULE_SETUP
4395 #line 273 "util/configlexer.lex"
43484396 { YDVAR(1, VAR_SO_SNDBUF) }
43494397 YY_BREAK
4350 case 59:
4351 YY_RULE_SETUP
4352 #line 273 "util/configlexer.lex"
4398 case 60:
4399 YY_RULE_SETUP
4400 #line 274 "util/configlexer.lex"
43534401 { YDVAR(1, VAR_SO_REUSEPORT) }
43544402 YY_BREAK
4355 case 60:
4356 YY_RULE_SETUP
4357 #line 274 "util/configlexer.lex"
4403 case 61:
4404 YY_RULE_SETUP
4405 #line 275 "util/configlexer.lex"
43584406 { YDVAR(1, VAR_IP_TRANSPARENT) }
43594407 YY_BREAK
4360 case 61:
4361 YY_RULE_SETUP
4362 #line 275 "util/configlexer.lex"
4408 case 62:
4409 YY_RULE_SETUP
4410 #line 276 "util/configlexer.lex"
43634411 { YDVAR(1, VAR_IP_FREEBIND) }
43644412 YY_BREAK
4365 case 62:
4366 YY_RULE_SETUP
4367 #line 276 "util/configlexer.lex"
4413 case 63:
4414 YY_RULE_SETUP
4415 #line 277 "util/configlexer.lex"
43684416 { YDVAR(1, VAR_IP_DSCP) }
43694417 YY_BREAK
4370 case 63:
4371 YY_RULE_SETUP
4372 #line 277 "util/configlexer.lex"
4418 case 64:
4419 YY_RULE_SETUP
4420 #line 278 "util/configlexer.lex"
43734421 { YDVAR(1, VAR_CHROOT) }
43744422 YY_BREAK
4375 case 64:
4376 YY_RULE_SETUP
4377 #line 278 "util/configlexer.lex"
4423 case 65:
4424 YY_RULE_SETUP
4425 #line 279 "util/configlexer.lex"
43784426 { YDVAR(1, VAR_USERNAME) }
43794427 YY_BREAK
4380 case 65:
4381 YY_RULE_SETUP
4382 #line 279 "util/configlexer.lex"
4428 case 66:
4429 YY_RULE_SETUP
4430 #line 280 "util/configlexer.lex"
43834431 { YDVAR(1, VAR_DIRECTORY) }
43844432 YY_BREAK
4385 case 66:
4386 YY_RULE_SETUP
4387 #line 280 "util/configlexer.lex"
4433 case 67:
4434 YY_RULE_SETUP
4435 #line 281 "util/configlexer.lex"
43884436 { YDVAR(1, VAR_LOGFILE) }
43894437 YY_BREAK
4390 case 67:
4391 YY_RULE_SETUP
4392 #line 281 "util/configlexer.lex"
4438 case 68:
4439 YY_RULE_SETUP
4440 #line 282 "util/configlexer.lex"
43934441 { YDVAR(1, VAR_PIDFILE) }
43944442 YY_BREAK
4395 case 68:
4396 YY_RULE_SETUP
4397 #line 282 "util/configlexer.lex"
4443 case 69:
4444 YY_RULE_SETUP
4445 #line 283 "util/configlexer.lex"
43984446 { YDVAR(1, VAR_ROOT_HINTS) }
43994447 YY_BREAK
4400 case 69:
4401 YY_RULE_SETUP
4402 #line 283 "util/configlexer.lex"
4448 case 70:
4449 YY_RULE_SETUP
4450 #line 284 "util/configlexer.lex"
44034451 { YDVAR(1, VAR_STREAM_WAIT_SIZE) }
44044452 YY_BREAK
4405 case 70:
4406 YY_RULE_SETUP
4407 #line 284 "util/configlexer.lex"
4453 case 71:
4454 YY_RULE_SETUP
4455 #line 285 "util/configlexer.lex"
44084456 { YDVAR(1, VAR_EDNS_BUFFER_SIZE) }
44094457 YY_BREAK
4410 case 71:
4411 YY_RULE_SETUP
4412 #line 285 "util/configlexer.lex"
4458 case 72:
4459 YY_RULE_SETUP
4460 #line 286 "util/configlexer.lex"
44134461 { YDVAR(1, VAR_MSG_BUFFER_SIZE) }
44144462 YY_BREAK
4415 case 72:
4416 YY_RULE_SETUP
4417 #line 286 "util/configlexer.lex"
4463 case 73:
4464 YY_RULE_SETUP
4465 #line 287 "util/configlexer.lex"
44184466 { YDVAR(1, VAR_MSG_CACHE_SIZE) }
44194467 YY_BREAK
4420 case 73:
4421 YY_RULE_SETUP
4422 #line 287 "util/configlexer.lex"
4468 case 74:
4469 YY_RULE_SETUP
4470 #line 288 "util/configlexer.lex"
44234471 { YDVAR(1, VAR_MSG_CACHE_SLABS) }
44244472 YY_BREAK
4425 case 74:
4426 YY_RULE_SETUP
4427 #line 288 "util/configlexer.lex"
4473 case 75:
4474 YY_RULE_SETUP
4475 #line 289 "util/configlexer.lex"
44284476 { YDVAR(1, VAR_RRSET_CACHE_SIZE) }
44294477 YY_BREAK
4430 case 75:
4431 YY_RULE_SETUP
4432 #line 289 "util/configlexer.lex"
4478 case 76:
4479 YY_RULE_SETUP
4480 #line 290 "util/configlexer.lex"
44334481 { YDVAR(1, VAR_RRSET_CACHE_SLABS) }
44344482 YY_BREAK
4435 case 76:
4436 YY_RULE_SETUP
4437 #line 290 "util/configlexer.lex"
4483 case 77:
4484 YY_RULE_SETUP
4485 #line 291 "util/configlexer.lex"
44384486 { YDVAR(1, VAR_CACHE_MAX_TTL) }
44394487 YY_BREAK
4440 case 77:
4441 YY_RULE_SETUP
4442 #line 291 "util/configlexer.lex"
4488 case 78:
4489 YY_RULE_SETUP
4490 #line 292 "util/configlexer.lex"
44434491 { YDVAR(1, VAR_CACHE_MAX_NEGATIVE_TTL) }
44444492 YY_BREAK
4445 case 78:
4446 YY_RULE_SETUP
4447 #line 292 "util/configlexer.lex"
4493 case 79:
4494 YY_RULE_SETUP
4495 #line 293 "util/configlexer.lex"
44484496 { YDVAR(1, VAR_CACHE_MIN_TTL) }
44494497 YY_BREAK
4450 case 79:
4451 YY_RULE_SETUP
4452 #line 293 "util/configlexer.lex"
4498 case 80:
4499 YY_RULE_SETUP
4500 #line 294 "util/configlexer.lex"
44534501 { YDVAR(1, VAR_INFRA_HOST_TTL) }
44544502 YY_BREAK
4455 case 80:
4456 YY_RULE_SETUP
4457 #line 294 "util/configlexer.lex"
4503 case 81:
4504 YY_RULE_SETUP
4505 #line 295 "util/configlexer.lex"
44584506 { YDVAR(1, VAR_INFRA_LAME_TTL) }
44594507 YY_BREAK
4460 case 81:
4461 YY_RULE_SETUP
4462 #line 295 "util/configlexer.lex"
4508 case 82:
4509 YY_RULE_SETUP
4510 #line 296 "util/configlexer.lex"
44634511 { YDVAR(1, VAR_INFRA_CACHE_SLABS) }
44644512 YY_BREAK
4465 case 82:
4466 YY_RULE_SETUP
4467 #line 296 "util/configlexer.lex"
4513 case 83:
4514 YY_RULE_SETUP
4515 #line 297 "util/configlexer.lex"
44684516 { YDVAR(1, VAR_INFRA_CACHE_NUMHOSTS) }
44694517 YY_BREAK
4470 case 83:
4471 YY_RULE_SETUP
4472 #line 297 "util/configlexer.lex"
4518 case 84:
4519 YY_RULE_SETUP
4520 #line 298 "util/configlexer.lex"
44734521 { YDVAR(1, VAR_INFRA_CACHE_LAME_SIZE) }
44744522 YY_BREAK
4475 case 84:
4476 YY_RULE_SETUP
4477 #line 298 "util/configlexer.lex"
4523 case 85:
4524 YY_RULE_SETUP
4525 #line 299 "util/configlexer.lex"
44784526 { YDVAR(1, VAR_INFRA_CACHE_MIN_RTT) }
44794527 YY_BREAK
4480 case 85:
4481 YY_RULE_SETUP
4482 #line 299 "util/configlexer.lex"
4528 case 86:
4529 YY_RULE_SETUP
4530 #line 300 "util/configlexer.lex"
4531 { YDVAR(1, VAR_INFRA_KEEP_PROBING) }
4532 YY_BREAK
4533 case 87:
4534 YY_RULE_SETUP
4535 #line 301 "util/configlexer.lex"
44834536 { YDVAR(1, VAR_NUM_QUERIES_PER_THREAD) }
44844537 YY_BREAK
4485 case 86:
4486 YY_RULE_SETUP
4487 #line 300 "util/configlexer.lex"
4538 case 88:
4539 YY_RULE_SETUP
4540 #line 302 "util/configlexer.lex"
44884541 { YDVAR(1, VAR_JOSTLE_TIMEOUT) }
44894542 YY_BREAK
4490 case 87:
4491 YY_RULE_SETUP
4492 #line 301 "util/configlexer.lex"
4543 case 89:
4544 YY_RULE_SETUP
4545 #line 303 "util/configlexer.lex"
44934546 { YDVAR(1, VAR_DELAY_CLOSE) }
44944547 YY_BREAK
4495 case 88:
4496 YY_RULE_SETUP
4497 #line 302 "util/configlexer.lex"
4548 case 90:
4549 YY_RULE_SETUP
4550 #line 304 "util/configlexer.lex"
4551 { YDVAR(1, VAR_UDP_CONNECT) }
4552 YY_BREAK
4553 case 91:
4554 YY_RULE_SETUP
4555 #line 305 "util/configlexer.lex"
44984556 { YDVAR(1, VAR_TARGET_FETCH_POLICY) }
44994557 YY_BREAK
4500 case 89:
4501 YY_RULE_SETUP
4502 #line 303 "util/configlexer.lex"
4558 case 92:
4559 YY_RULE_SETUP
4560 #line 306 "util/configlexer.lex"
45034561 { YDVAR(1, VAR_HARDEN_SHORT_BUFSIZE) }
45044562 YY_BREAK
4505 case 90:
4506 YY_RULE_SETUP
4507 #line 304 "util/configlexer.lex"
4563 case 93:
4564 YY_RULE_SETUP
4565 #line 307 "util/configlexer.lex"
45084566 { YDVAR(1, VAR_HARDEN_LARGE_QUERIES) }
45094567 YY_BREAK
4510 case 91:
4511 YY_RULE_SETUP
4512 #line 305 "util/configlexer.lex"
4568 case 94:
4569 YY_RULE_SETUP
4570 #line 308 "util/configlexer.lex"
45134571 { YDVAR(1, VAR_HARDEN_GLUE) }
45144572 YY_BREAK
4515 case 92:
4516 YY_RULE_SETUP
4517 #line 306 "util/configlexer.lex"
4573 case 95:
4574 YY_RULE_SETUP
4575 #line 309 "util/configlexer.lex"
45184576 { YDVAR(1, VAR_HARDEN_DNSSEC_STRIPPED) }
45194577 YY_BREAK
4520 case 93:
4521 YY_RULE_SETUP
4522 #line 307 "util/configlexer.lex"
4578 case 96:
4579 YY_RULE_SETUP
4580 #line 310 "util/configlexer.lex"
45234581 { YDVAR(1, VAR_HARDEN_BELOW_NXDOMAIN) }
45244582 YY_BREAK
4525 case 94:
4526 YY_RULE_SETUP
4527 #line 308 "util/configlexer.lex"
4583 case 97:
4584 YY_RULE_SETUP
4585 #line 311 "util/configlexer.lex"
45284586 { YDVAR(1, VAR_HARDEN_REFERRAL_PATH) }
45294587 YY_BREAK
4530 case 95:
4531 YY_RULE_SETUP
4532 #line 309 "util/configlexer.lex"
4588 case 98:
4589 YY_RULE_SETUP
4590 #line 312 "util/configlexer.lex"
45334591 { YDVAR(1, VAR_HARDEN_ALGO_DOWNGRADE) }
45344592 YY_BREAK
4535 case 96:
4536 YY_RULE_SETUP
4537 #line 310 "util/configlexer.lex"
4593 case 99:
4594 YY_RULE_SETUP
4595 #line 313 "util/configlexer.lex"
45384596 { YDVAR(1, VAR_USE_CAPS_FOR_ID) }
45394597 YY_BREAK
4540 case 97:
4541 YY_RULE_SETUP
4542 #line 311 "util/configlexer.lex"
4598 case 100:
4599 YY_RULE_SETUP
4600 #line 314 "util/configlexer.lex"
45434601 { YDVAR(1, VAR_CAPS_WHITELIST) }
45444602 YY_BREAK
4545 case 98:
4546 YY_RULE_SETUP
4547 #line 312 "util/configlexer.lex"
4603 case 101:
4604 YY_RULE_SETUP
4605 #line 315 "util/configlexer.lex"
45484606 { YDVAR(1, VAR_CAPS_WHITELIST) }
45494607 YY_BREAK
4550 case 99:
4551 YY_RULE_SETUP
4552 #line 313 "util/configlexer.lex"
4608 case 102:
4609 YY_RULE_SETUP
4610 #line 316 "util/configlexer.lex"
45534611 { YDVAR(1, VAR_UNWANTED_REPLY_THRESHOLD) }
45544612 YY_BREAK
4555 case 100:
4556 YY_RULE_SETUP
4557 #line 314 "util/configlexer.lex"
4613 case 103:
4614 YY_RULE_SETUP
4615 #line 317 "util/configlexer.lex"
45584616 { YDVAR(1, VAR_PRIVATE_ADDRESS) }
45594617 YY_BREAK
4560 case 101:
4561 YY_RULE_SETUP
4562 #line 315 "util/configlexer.lex"
4618 case 104:
4619 YY_RULE_SETUP
4620 #line 318 "util/configlexer.lex"
45634621 { YDVAR(1, VAR_PRIVATE_DOMAIN) }
45644622 YY_BREAK
4565 case 102:
4566 YY_RULE_SETUP
4567 #line 316 "util/configlexer.lex"
4623 case 105:
4624 YY_RULE_SETUP
4625 #line 319 "util/configlexer.lex"
45684626 { YDVAR(1, VAR_PREFETCH_KEY) }
45694627 YY_BREAK
4570 case 103:
4571 YY_RULE_SETUP
4572 #line 317 "util/configlexer.lex"
4628 case 106:
4629 YY_RULE_SETUP
4630 #line 320 "util/configlexer.lex"
45734631 { YDVAR(1, VAR_PREFETCH) }
45744632 YY_BREAK
4575 case 104:
4576 YY_RULE_SETUP
4577 #line 318 "util/configlexer.lex"
4633 case 107:
4634 YY_RULE_SETUP
4635 #line 321 "util/configlexer.lex"
45784636 { YDVAR(1, VAR_DENY_ANY) }
45794637 YY_BREAK
4580 case 105:
4581 YY_RULE_SETUP
4582 #line 319 "util/configlexer.lex"
4638 case 108:
4639 YY_RULE_SETUP
4640 #line 322 "util/configlexer.lex"
45834641 { YDVAR(0, VAR_STUB_ZONE) }
45844642 YY_BREAK
4585 case 106:
4586 YY_RULE_SETUP
4587 #line 320 "util/configlexer.lex"
4643 case 109:
4644 YY_RULE_SETUP
4645 #line 323 "util/configlexer.lex"
45884646 { YDVAR(1, VAR_NAME) }
45894647 YY_BREAK
4590 case 107:
4591 YY_RULE_SETUP
4592 #line 321 "util/configlexer.lex"
4648 case 110:
4649 YY_RULE_SETUP
4650 #line 324 "util/configlexer.lex"
45934651 { YDVAR(1, VAR_STUB_ADDR) }
45944652 YY_BREAK
4595 case 108:
4596 YY_RULE_SETUP
4597 #line 322 "util/configlexer.lex"
4653 case 111:
4654 YY_RULE_SETUP
4655 #line 325 "util/configlexer.lex"
45984656 { YDVAR(1, VAR_STUB_HOST) }
45994657 YY_BREAK
4600 case 109:
4601 YY_RULE_SETUP
4602 #line 323 "util/configlexer.lex"
4658 case 112:
4659 YY_RULE_SETUP
4660 #line 326 "util/configlexer.lex"
46034661 { YDVAR(1, VAR_STUB_PRIME) }
46044662 YY_BREAK
4605 case 110:
4606 YY_RULE_SETUP
4607 #line 324 "util/configlexer.lex"
4663 case 113:
4664 YY_RULE_SETUP
4665 #line 327 "util/configlexer.lex"
46084666 { YDVAR(1, VAR_STUB_FIRST) }
46094667 YY_BREAK
4610 case 111:
4611 YY_RULE_SETUP
4612 #line 325 "util/configlexer.lex"
4668 case 114:
4669 YY_RULE_SETUP
4670 #line 328 "util/configlexer.lex"
46134671 { YDVAR(1, VAR_STUB_NO_CACHE) }
46144672 YY_BREAK
4615 case 112:
4616 YY_RULE_SETUP
4617 #line 326 "util/configlexer.lex"
4673 case 115:
4674 YY_RULE_SETUP
4675 #line 329 "util/configlexer.lex"
46184676 { YDVAR(1, VAR_STUB_SSL_UPSTREAM) }
46194677 YY_BREAK
4620 case 113:
4621 YY_RULE_SETUP
4622 #line 327 "util/configlexer.lex"
4678 case 116:
4679 YY_RULE_SETUP
4680 #line 330 "util/configlexer.lex"
46234681 { YDVAR(1, VAR_STUB_SSL_UPSTREAM) }
46244682 YY_BREAK
4625 case 114:
4626 YY_RULE_SETUP
4627 #line 328 "util/configlexer.lex"
4683 case 117:
4684 YY_RULE_SETUP
4685 #line 331 "util/configlexer.lex"
46284686 { YDVAR(0, VAR_FORWARD_ZONE) }
46294687 YY_BREAK
4630 case 115:
4631 YY_RULE_SETUP
4632 #line 329 "util/configlexer.lex"
4688 case 118:
4689 YY_RULE_SETUP
4690 #line 332 "util/configlexer.lex"
46334691 { YDVAR(1, VAR_FORWARD_ADDR) }
46344692 YY_BREAK
4635 case 116:
4636 YY_RULE_SETUP
4637 #line 330 "util/configlexer.lex"
4693 case 119:
4694 YY_RULE_SETUP
4695 #line 333 "util/configlexer.lex"
46384696 { YDVAR(1, VAR_FORWARD_HOST) }
46394697 YY_BREAK
4640 case 117:
4641 YY_RULE_SETUP
4642 #line 331 "util/configlexer.lex"
4698 case 120:
4699 YY_RULE_SETUP
4700 #line 334 "util/configlexer.lex"
46434701 { YDVAR(1, VAR_FORWARD_FIRST) }
46444702 YY_BREAK
4645 case 118:
4646 YY_RULE_SETUP
4647 #line 332 "util/configlexer.lex"
4703 case 121:
4704 YY_RULE_SETUP
4705 #line 335 "util/configlexer.lex"
46484706 { YDVAR(1, VAR_FORWARD_NO_CACHE) }
46494707 YY_BREAK
4650 case 119:
4651 YY_RULE_SETUP
4652 #line 333 "util/configlexer.lex"
4708 case 122:
4709 YY_RULE_SETUP
4710 #line 336 "util/configlexer.lex"
46534711 { YDVAR(1, VAR_FORWARD_SSL_UPSTREAM) }
46544712 YY_BREAK
4655 case 120:
4656 YY_RULE_SETUP
4657 #line 334 "util/configlexer.lex"
4713 case 123:
4714 YY_RULE_SETUP
4715 #line 337 "util/configlexer.lex"
46584716 { YDVAR(1, VAR_FORWARD_SSL_UPSTREAM) }
46594717 YY_BREAK
4660 case 121:
4661 YY_RULE_SETUP
4662 #line 335 "util/configlexer.lex"
4718 case 124:
4719 YY_RULE_SETUP
4720 #line 338 "util/configlexer.lex"
46634721 { YDVAR(0, VAR_AUTH_ZONE) }
46644722 YY_BREAK
4665 case 122:
4666 YY_RULE_SETUP
4667 #line 336 "util/configlexer.lex"
4723 case 125:
4724 YY_RULE_SETUP
4725 #line 339 "util/configlexer.lex"
46684726 { YDVAR(0, VAR_RPZ) }
46694727 YY_BREAK
4670 case 123:
4671 YY_RULE_SETUP
4672 #line 337 "util/configlexer.lex"
4728 case 126:
4729 YY_RULE_SETUP
4730 #line 340 "util/configlexer.lex"
46734731 { YDVAR(1, VAR_TAGS) }
46744732 YY_BREAK
4675 case 124:
4676 YY_RULE_SETUP
4677 #line 338 "util/configlexer.lex"
4733 case 127:
4734 YY_RULE_SETUP
4735 #line 341 "util/configlexer.lex"
46784736 { YDVAR(1, VAR_RPZ_ACTION_OVERRIDE) }
46794737 YY_BREAK
4680 case 125:
4681 YY_RULE_SETUP
4682 #line 339 "util/configlexer.lex"
4738 case 128:
4739 YY_RULE_SETUP
4740 #line 342 "util/configlexer.lex"
46834741 { YDVAR(1, VAR_RPZ_CNAME_OVERRIDE) }
46844742 YY_BREAK
4685 case 126:
4686 YY_RULE_SETUP
4687 #line 340 "util/configlexer.lex"
4743 case 129:
4744 YY_RULE_SETUP
4745 #line 343 "util/configlexer.lex"
46884746 { YDVAR(1, VAR_RPZ_LOG) }
46894747 YY_BREAK
4690 case 127:
4691 YY_RULE_SETUP
4692 #line 341 "util/configlexer.lex"
4748 case 130:
4749 YY_RULE_SETUP
4750 #line 344 "util/configlexer.lex"
46934751 { YDVAR(1, VAR_RPZ_LOG_NAME) }
46944752 YY_BREAK
4695 case 128:
4696 YY_RULE_SETUP
4697 #line 342 "util/configlexer.lex"
4753 case 131:
4754 YY_RULE_SETUP
4755 #line 345 "util/configlexer.lex"
46984756 { YDVAR(1, VAR_ZONEFILE) }
46994757 YY_BREAK
4700 case 129:
4701 YY_RULE_SETUP
4702 #line 343 "util/configlexer.lex"
4758 case 132:
4759 YY_RULE_SETUP
4760 #line 346 "util/configlexer.lex"
47034761 { YDVAR(1, VAR_MASTER) }
47044762 YY_BREAK
4705 case 130:
4706 YY_RULE_SETUP
4707 #line 344 "util/configlexer.lex"
4763 case 133:
4764 YY_RULE_SETUP
4765 #line 347 "util/configlexer.lex"
47084766 { YDVAR(1, VAR_MASTER) }
47094767 YY_BREAK
4710 case 131:
4711 YY_RULE_SETUP
4712 #line 345 "util/configlexer.lex"
4768 case 134:
4769 YY_RULE_SETUP
4770 #line 348 "util/configlexer.lex"
47134771 { YDVAR(1, VAR_URL) }
47144772 YY_BREAK
4715 case 132:
4716 YY_RULE_SETUP
4717 #line 346 "util/configlexer.lex"
4773 case 135:
4774 YY_RULE_SETUP
4775 #line 349 "util/configlexer.lex"
47184776 { YDVAR(1, VAR_ALLOW_NOTIFY) }
47194777 YY_BREAK
4720 case 133:
4721 YY_RULE_SETUP
4722 #line 347 "util/configlexer.lex"
4778 case 136:
4779 YY_RULE_SETUP
4780 #line 350 "util/configlexer.lex"
47234781 { YDVAR(1, VAR_FOR_DOWNSTREAM) }
47244782 YY_BREAK
4725 case 134:
4726 YY_RULE_SETUP
4727 #line 348 "util/configlexer.lex"
4783 case 137:
4784 YY_RULE_SETUP
4785 #line 351 "util/configlexer.lex"
47284786 { YDVAR(1, VAR_FOR_UPSTREAM) }
47294787 YY_BREAK
4730 case 135:
4731 YY_RULE_SETUP
4732 #line 349 "util/configlexer.lex"
4788 case 138:
4789 YY_RULE_SETUP
4790 #line 352 "util/configlexer.lex"
47334791 { YDVAR(1, VAR_FALLBACK_ENABLED) }
47344792 YY_BREAK
4735 case 136:
4736 YY_RULE_SETUP
4737 #line 350 "util/configlexer.lex"
4793 case 139:
4794 YY_RULE_SETUP
4795 #line 353 "util/configlexer.lex"
47384796 { YDVAR(0, VAR_VIEW) }
47394797 YY_BREAK
4740 case 137:
4741 YY_RULE_SETUP
4742 #line 351 "util/configlexer.lex"
4798 case 140:
4799 YY_RULE_SETUP
4800 #line 354 "util/configlexer.lex"
47434801 { YDVAR(1, VAR_VIEW_FIRST) }
47444802 YY_BREAK
4745 case 138:
4746 YY_RULE_SETUP
4747 #line 352 "util/configlexer.lex"
4803 case 141:
4804 YY_RULE_SETUP
4805 #line 355 "util/configlexer.lex"
47484806 { YDVAR(1, VAR_DO_NOT_QUERY_ADDRESS) }
47494807 YY_BREAK
4750 case 139:
4751 YY_RULE_SETUP
4752 #line 353 "util/configlexer.lex"
4808 case 142:
4809 YY_RULE_SETUP
4810 #line 356 "util/configlexer.lex"
47534811 { YDVAR(1, VAR_DO_NOT_QUERY_LOCALHOST) }
47544812 YY_BREAK
4755 case 140:
4756 YY_RULE_SETUP
4757 #line 354 "util/configlexer.lex"
4813 case 143:
4814 YY_RULE_SETUP
4815 #line 357 "util/configlexer.lex"
47584816 { YDVAR(2, VAR_ACCESS_CONTROL) }
47594817 YY_BREAK
4760 case 141:
4761 YY_RULE_SETUP
4762 #line 355 "util/configlexer.lex"
4818 case 144:
4819 YY_RULE_SETUP
4820 #line 358 "util/configlexer.lex"
47634821 { YDVAR(1, VAR_SEND_CLIENT_SUBNET) }
47644822 YY_BREAK
4765 case 142:
4766 YY_RULE_SETUP
4767 #line 356 "util/configlexer.lex"
4823 case 145:
4824 YY_RULE_SETUP
4825 #line 359 "util/configlexer.lex"
47684826 { YDVAR(1, VAR_CLIENT_SUBNET_ZONE) }
47694827 YY_BREAK
4770 case 143:
4771 YY_RULE_SETUP
4772 #line 357 "util/configlexer.lex"
4828 case 146:
4829 YY_RULE_SETUP
4830 #line 360 "util/configlexer.lex"
47734831 { YDVAR(1, VAR_CLIENT_SUBNET_ALWAYS_FORWARD) }
47744832 YY_BREAK
4775 case 144:
4776 YY_RULE_SETUP
4777 #line 358 "util/configlexer.lex"
4833 case 147:
4834 YY_RULE_SETUP
4835 #line 361 "util/configlexer.lex"
47784836 { YDVAR(1, VAR_CLIENT_SUBNET_OPCODE) }
47794837 YY_BREAK
4780 case 145:
4781 YY_RULE_SETUP
4782 #line 359 "util/configlexer.lex"
4838 case 148:
4839 YY_RULE_SETUP
4840 #line 362 "util/configlexer.lex"
47834841 { YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV4) }
47844842 YY_BREAK
4785 case 146:
4786 YY_RULE_SETUP
4787 #line 360 "util/configlexer.lex"
4843 case 149:
4844 YY_RULE_SETUP
4845 #line 363 "util/configlexer.lex"
47884846 { YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV6) }
47894847 YY_BREAK
4790 case 147:
4791 YY_RULE_SETUP
4792 #line 361 "util/configlexer.lex"
4848 case 150:
4849 YY_RULE_SETUP
4850 #line 364 "util/configlexer.lex"
47934851 { YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV4) }
47944852 YY_BREAK
4795 case 148:
4796 YY_RULE_SETUP
4797 #line 362 "util/configlexer.lex"
4853 case 151:
4854 YY_RULE_SETUP
4855 #line 365 "util/configlexer.lex"
47984856 { YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV6) }
47994857 YY_BREAK
4800 case 149:
4801 YY_RULE_SETUP
4802 #line 363 "util/configlexer.lex"
4858 case 152:
4859 YY_RULE_SETUP
4860 #line 366 "util/configlexer.lex"
48034861 { YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV4) }
48044862 YY_BREAK
4805 case 150:
4806 YY_RULE_SETUP
4807 #line 364 "util/configlexer.lex"
4863 case 153:
4864 YY_RULE_SETUP
4865 #line 367 "util/configlexer.lex"
48084866 { YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV6) }
48094867 YY_BREAK
4810 case 151:
4811 YY_RULE_SETUP
4812 #line 365 "util/configlexer.lex"
4868 case 154:
4869 YY_RULE_SETUP
4870 #line 368 "util/configlexer.lex"
48134871 { YDVAR(1, VAR_HIDE_IDENTITY) }
48144872 YY_BREAK
4815 case 152:
4816 YY_RULE_SETUP
4817 #line 366 "util/configlexer.lex"
4873 case 155:
4874 YY_RULE_SETUP
4875 #line 369 "util/configlexer.lex"
48184876 { YDVAR(1, VAR_HIDE_VERSION) }
48194877 YY_BREAK
4820 case 153:
4821 YY_RULE_SETUP
4822 #line 367 "util/configlexer.lex"
4878 case 156:
4879 YY_RULE_SETUP
4880 #line 370 "util/configlexer.lex"
48234881 { YDVAR(1, VAR_HIDE_TRUSTANCHOR) }
48244882 YY_BREAK
4825 case 154:
4826 YY_RULE_SETUP
4827 #line 368 "util/configlexer.lex"
4883 case 157:
4884 YY_RULE_SETUP
4885 #line 371 "util/configlexer.lex"
48284886 { YDVAR(1, VAR_IDENTITY) }
48294887 YY_BREAK
4830 case 155:
4831 YY_RULE_SETUP
4832 #line 369 "util/configlexer.lex"
4888 case 158:
4889 YY_RULE_SETUP
4890 #line 372 "util/configlexer.lex"
48334891 { YDVAR(1, VAR_VERSION) }
48344892 YY_BREAK
4835 case 156:
4836 YY_RULE_SETUP
4837 #line 370 "util/configlexer.lex"
4893 case 159:
4894 YY_RULE_SETUP
4895 #line 373 "util/configlexer.lex"
48384896 { YDVAR(1, VAR_MODULE_CONF) }
48394897 YY_BREAK
4840 case 157:
4841 YY_RULE_SETUP
4842 #line 371 "util/configlexer.lex"
4898 case 160:
4899 YY_RULE_SETUP
4900 #line 374 "util/configlexer.lex"
48434901 { YDVAR(1, VAR_DLV_ANCHOR) }
48444902 YY_BREAK
4845 case 158:
4846 YY_RULE_SETUP
4847 #line 372 "util/configlexer.lex"
4903 case 161:
4904 YY_RULE_SETUP
4905 #line 375 "util/configlexer.lex"
48484906 { YDVAR(1, VAR_DLV_ANCHOR_FILE) }
48494907 YY_BREAK
4850 case 159:
4851 YY_RULE_SETUP
4852 #line 373 "util/configlexer.lex"
4908 case 162:
4909 YY_RULE_SETUP
4910 #line 376 "util/configlexer.lex"
48534911 { YDVAR(1, VAR_TRUST_ANCHOR_FILE) }
48544912 YY_BREAK
4855 case 160:
4856 YY_RULE_SETUP
4857 #line 374 "util/configlexer.lex"
4913 case 163:
4914 YY_RULE_SETUP
4915 #line 377 "util/configlexer.lex"
48584916 { YDVAR(1, VAR_AUTO_TRUST_ANCHOR_FILE) }
48594917 YY_BREAK
4860 case 161:
4861 YY_RULE_SETUP
4862 #line 375 "util/configlexer.lex"
4918 case 164:
4919 YY_RULE_SETUP
4920 #line 378 "util/configlexer.lex"
48634921 { YDVAR(1, VAR_TRUSTED_KEYS_FILE) }
48644922 YY_BREAK
4865 case 162:
4866 YY_RULE_SETUP
4867 #line 376 "util/configlexer.lex"
4923 case 165:
4924 YY_RULE_SETUP
4925 #line 379 "util/configlexer.lex"
48684926 { YDVAR(1, VAR_TRUST_ANCHOR) }
48694927 YY_BREAK
4870 case 163:
4871 YY_RULE_SETUP
4872 #line 377 "util/configlexer.lex"
4928 case 166:
4929 YY_RULE_SETUP
4930 #line 380 "util/configlexer.lex"
48734931 { YDVAR(1, VAR_TRUST_ANCHOR_SIGNALING) }
48744932 YY_BREAK
4875 case 164:
4876 YY_RULE_SETUP
4877 #line 378 "util/configlexer.lex"
4933 case 167:
4934 YY_RULE_SETUP
4935 #line 381 "util/configlexer.lex"
48784936 { YDVAR(1, VAR_ROOT_KEY_SENTINEL) }
48794937 YY_BREAK
4880 case 165:
4881 YY_RULE_SETUP
4882 #line 379 "util/configlexer.lex"
4938 case 168:
4939 YY_RULE_SETUP
4940 #line 382 "util/configlexer.lex"
48834941 { YDVAR(1, VAR_VAL_OVERRIDE_DATE) }
48844942 YY_BREAK
4885 case 166:
4886 YY_RULE_SETUP
4887 #line 380 "util/configlexer.lex"
4943 case 169:
4944 YY_RULE_SETUP
4945 #line 383 "util/configlexer.lex"
48884946 { YDVAR(1, VAR_VAL_SIG_SKEW_MIN) }
48894947 YY_BREAK
4890 case 167:
4891 YY_RULE_SETUP
4892 #line 381 "util/configlexer.lex"
4948 case 170:
4949 YY_RULE_SETUP
4950 #line 384 "util/configlexer.lex"
48934951 { YDVAR(1, VAR_VAL_SIG_SKEW_MAX) }
48944952 YY_BREAK
4895 case 168:
4896 YY_RULE_SETUP
4897 #line 382 "util/configlexer.lex"
4953 case 171:
4954 YY_RULE_SETUP
4955 #line 385 "util/configlexer.lex"
48984956 { YDVAR(1, VAR_BOGUS_TTL) }
48994957 YY_BREAK
4900 case 169:
4901 YY_RULE_SETUP
4902 #line 383 "util/configlexer.lex"
4958 case 172:
4959 YY_RULE_SETUP
4960 #line 386 "util/configlexer.lex"
49034961 { YDVAR(1, VAR_VAL_CLEAN_ADDITIONAL) }
49044962 YY_BREAK
4905 case 170:
4906 YY_RULE_SETUP
4907 #line 384 "util/configlexer.lex"
4963 case 173:
4964 YY_RULE_SETUP
4965 #line 387 "util/configlexer.lex"
49084966 { YDVAR(1, VAR_VAL_PERMISSIVE_MODE) }
49094967 YY_BREAK
4910 case 171:
4911 YY_RULE_SETUP
4912 #line 385 "util/configlexer.lex"
4968 case 174:
4969 YY_RULE_SETUP
4970 #line 388 "util/configlexer.lex"
49134971 { YDVAR(1, VAR_AGGRESSIVE_NSEC) }
49144972 YY_BREAK
4915 case 172:
4916 YY_RULE_SETUP
4917 #line 386 "util/configlexer.lex"
4973 case 175:
4974 YY_RULE_SETUP
4975 #line 389 "util/configlexer.lex"
49184976 { YDVAR(1, VAR_IGNORE_CD_FLAG) }
49194977 YY_BREAK
4920 case 173:
4921 YY_RULE_SETUP
4922 #line 387 "util/configlexer.lex"
4978 case 176:
4979 YY_RULE_SETUP
4980 #line 390 "util/configlexer.lex"
49234981 { YDVAR(1, VAR_SERVE_EXPIRED) }
49244982 YY_BREAK
4925 case 174:
4926 YY_RULE_SETUP
4927 #line 388 "util/configlexer.lex"
4983 case 177:
4984 YY_RULE_SETUP
4985 #line 391 "util/configlexer.lex"
49284986 { YDVAR(1, VAR_SERVE_EXPIRED_TTL) }
49294987 YY_BREAK
4930 case 175:
4931 YY_RULE_SETUP
4932 #line 389 "util/configlexer.lex"
4988 case 178:
4989 YY_RULE_SETUP
4990 #line 392 "util/configlexer.lex"
49334991 { YDVAR(1, VAR_SERVE_EXPIRED_TTL_RESET) }
49344992 YY_BREAK
4935 case 176:
4936 YY_RULE_SETUP
4937 #line 390 "util/configlexer.lex"
4993 case 179:
4994 YY_RULE_SETUP
4995 #line 393 "util/configlexer.lex"
49384996 { YDVAR(1, VAR_SERVE_EXPIRED_REPLY_TTL) }
49394997 YY_BREAK
4940 case 177:
4941 YY_RULE_SETUP
4942 #line 391 "util/configlexer.lex"
4998 case 180:
4999 YY_RULE_SETUP
5000 #line 394 "util/configlexer.lex"
49435001 { YDVAR(1, VAR_SERVE_EXPIRED_CLIENT_TIMEOUT) }
49445002 YY_BREAK
4945 case 178:
4946 YY_RULE_SETUP
4947 #line 392 "util/configlexer.lex"
5003 case 181:
5004 YY_RULE_SETUP
5005 #line 395 "util/configlexer.lex"
49485006 { YDVAR(1, VAR_FAKE_DSA) }
49495007 YY_BREAK
4950 case 179:
4951 YY_RULE_SETUP
4952 #line 393 "util/configlexer.lex"
5008 case 182:
5009 YY_RULE_SETUP
5010 #line 396 "util/configlexer.lex"
49535011 { YDVAR(1, VAR_FAKE_SHA1) }
49545012 YY_BREAK
4955 case 180:
4956 YY_RULE_SETUP
4957 #line 394 "util/configlexer.lex"
5013 case 183:
5014 YY_RULE_SETUP
5015 #line 397 "util/configlexer.lex"
49585016 { YDVAR(1, VAR_VAL_LOG_LEVEL) }
49595017 YY_BREAK
4960 case 181:
4961 YY_RULE_SETUP
4962 #line 395 "util/configlexer.lex"
5018 case 184:
5019 YY_RULE_SETUP
5020 #line 398 "util/configlexer.lex"
49635021 { YDVAR(1, VAR_KEY_CACHE_SIZE) }
49645022 YY_BREAK
4965 case 182:
4966 YY_RULE_SETUP
4967 #line 396 "util/configlexer.lex"
5023 case 185:
5024 YY_RULE_SETUP
5025 #line 399 "util/configlexer.lex"
49685026 { YDVAR(1, VAR_KEY_CACHE_SLABS) }
49695027 YY_BREAK
4970 case 183:
4971 YY_RULE_SETUP
4972 #line 397 "util/configlexer.lex"
5028 case 186:
5029 YY_RULE_SETUP
5030 #line 400 "util/configlexer.lex"
49735031 { YDVAR(1, VAR_NEG_CACHE_SIZE) }
49745032 YY_BREAK
4975 case 184:
4976 YY_RULE_SETUP
4977 #line 398 "util/configlexer.lex"
5033 case 187:
5034 YY_RULE_SETUP
5035 #line 401 "util/configlexer.lex"
49785036 {
49795037 YDVAR(1, VAR_VAL_NSEC3_KEYSIZE_ITERATIONS) }
49805038 YY_BREAK
4981 case 185:
4982 YY_RULE_SETUP
4983 #line 400 "util/configlexer.lex"
5039 case 188:
5040 YY_RULE_SETUP
5041 #line 403 "util/configlexer.lex"
49845042 { YDVAR(1, VAR_ADD_HOLDDOWN) }
49855043 YY_BREAK
4986 case 186:
4987 YY_RULE_SETUP
4988 #line 401 "util/configlexer.lex"
5044 case 189:
5045 YY_RULE_SETUP
5046 #line 404 "util/configlexer.lex"
49895047 { YDVAR(1, VAR_DEL_HOLDDOWN) }
49905048 YY_BREAK
4991 case 187:
4992 YY_RULE_SETUP
4993 #line 402 "util/configlexer.lex"
5049 case 190:
5050 YY_RULE_SETUP
5051 #line 405 "util/configlexer.lex"
49945052 { YDVAR(1, VAR_KEEP_MISSING) }
49955053 YY_BREAK
4996 case 188:
4997 YY_RULE_SETUP
4998 #line 403 "util/configlexer.lex"
5054 case 191:
5055 YY_RULE_SETUP
5056 #line 406 "util/configlexer.lex"
49995057 { YDVAR(1, VAR_PERMIT_SMALL_HOLDDOWN) }
50005058 YY_BREAK
5001 case 189:
5002 YY_RULE_SETUP
5003 #line 404 "util/configlexer.lex"
5059 case 192:
5060 YY_RULE_SETUP
5061 #line 407 "util/configlexer.lex"
50045062 { YDVAR(1, VAR_USE_SYSLOG) }
50055063 YY_BREAK
5006 case 190:
5007 YY_RULE_SETUP
5008 #line 405 "util/configlexer.lex"
5064 case 193:
5065 YY_RULE_SETUP
5066 #line 408 "util/configlexer.lex"
50095067 { YDVAR(1, VAR_LOG_IDENTITY) }
50105068 YY_BREAK
5011 case 191:
5012 YY_RULE_SETUP
5013 #line 406 "util/configlexer.lex"
5069 case 194:
5070 YY_RULE_SETUP
5071 #line 409 "util/configlexer.lex"
50145072 { YDVAR(1, VAR_LOG_TIME_ASCII) }
50155073 YY_BREAK
5016 case 192:
5017 YY_RULE_SETUP
5018 #line 407 "util/configlexer.lex"
5074 case 195:
5075 YY_RULE_SETUP
5076 #line 410 "util/configlexer.lex"
50195077 { YDVAR(1, VAR_LOG_QUERIES) }
50205078 YY_BREAK
5021 case 193:
5022 YY_RULE_SETUP
5023 #line 408 "util/configlexer.lex"
5079 case 196:
5080 YY_RULE_SETUP
5081 #line 411 "util/configlexer.lex"
50245082 { YDVAR(1, VAR_LOG_REPLIES) }
50255083 YY_BREAK
5026 case 194:
5027 YY_RULE_SETUP
5028 #line 409 "util/configlexer.lex"
5084 case 197:
5085 YY_RULE_SETUP
5086 #line 412 "util/configlexer.lex"
50295087 { YDVAR(1, VAR_LOG_TAG_QUERYREPLY) }
50305088 YY_BREAK
5031 case 195:
5032 YY_RULE_SETUP
5033 #line 410 "util/configlexer.lex"
5089 case 198:
5090 YY_RULE_SETUP
5091 #line 413 "util/configlexer.lex"
50345092 { YDVAR(1, VAR_LOG_LOCAL_ACTIONS) }
50355093 YY_BREAK
5036 case 196:
5037 YY_RULE_SETUP
5038 #line 411 "util/configlexer.lex"
5094 case 199:
5095 YY_RULE_SETUP
5096 #line 414 "util/configlexer.lex"
50395097 { YDVAR(1, VAR_LOG_SERVFAIL) }
50405098 YY_BREAK
5041 case 197:
5042 YY_RULE_SETUP
5043 #line 412 "util/configlexer.lex"
5099 case 200:
5100 YY_RULE_SETUP
5101 #line 415 "util/configlexer.lex"
50445102 { YDVAR(2, VAR_LOCAL_ZONE) }
50455103 YY_BREAK
5046 case 198:
5047 YY_RULE_SETUP
5048 #line 413 "util/configlexer.lex"
5104 case 201:
5105 YY_RULE_SETUP
5106 #line 416 "util/configlexer.lex"
50495107 { YDVAR(1, VAR_LOCAL_DATA) }
50505108 YY_BREAK
5051 case 199:
5052 YY_RULE_SETUP
5053 #line 414 "util/configlexer.lex"
5109 case 202:
5110 YY_RULE_SETUP
5111 #line 417 "util/configlexer.lex"
50545112 { YDVAR(1, VAR_LOCAL_DATA_PTR) }
50555113 YY_BREAK
5056 case 200:
5057 YY_RULE_SETUP
5058 #line 415 "util/configlexer.lex"
5114 case 203:
5115 YY_RULE_SETUP
5116 #line 418 "util/configlexer.lex"
50595117 { YDVAR(1, VAR_UNBLOCK_LAN_ZONES) }
50605118 YY_BREAK
5061 case 201:
5062 YY_RULE_SETUP
5063 #line 416 "util/configlexer.lex"
5119 case 204:
5120 YY_RULE_SETUP
5121 #line 419 "util/configlexer.lex"
50645122 { YDVAR(1, VAR_INSECURE_LAN_ZONES) }
50655123 YY_BREAK
5066 case 202:
5067 YY_RULE_SETUP
5068 #line 417 "util/configlexer.lex"
5124 case 205:
5125 YY_RULE_SETUP
5126 #line 420 "util/configlexer.lex"
50695127 { YDVAR(1, VAR_STATISTICS_INTERVAL) }
50705128 YY_BREAK
5071 case 203:
5072 YY_RULE_SETUP
5073 #line 418 "util/configlexer.lex"
5129 case 206:
5130 YY_RULE_SETUP
5131 #line 421 "util/configlexer.lex"
50745132 { YDVAR(1, VAR_STATISTICS_CUMULATIVE) }
50755133 YY_BREAK
5076 case 204:
5077 YY_RULE_SETUP
5078 #line 419 "util/configlexer.lex"
5134 case 207:
5135 YY_RULE_SETUP
5136 #line 422 "util/configlexer.lex"
50795137 { YDVAR(1, VAR_EXTENDED_STATISTICS) }
50805138 YY_BREAK
5081 case 205:
5082 YY_RULE_SETUP
5083 #line 420 "util/configlexer.lex"
5139 case 208:
5140 YY_RULE_SETUP
5141 #line 423 "util/configlexer.lex"
50845142 { YDVAR(1, VAR_SHM_ENABLE) }
50855143 YY_BREAK
5086 case 206:
5087 YY_RULE_SETUP
5088 #line 421 "util/configlexer.lex"
5144 case 209:
5145 YY_RULE_SETUP
5146 #line 424 "util/configlexer.lex"
50895147 { YDVAR(1, VAR_SHM_KEY) }
50905148 YY_BREAK
5091 case 207:
5092 YY_RULE_SETUP
5093 #line 422 "util/configlexer.lex"
5149 case 210:
5150 YY_RULE_SETUP
5151 #line 425 "util/configlexer.lex"
50945152 { YDVAR(0, VAR_REMOTE_CONTROL) }
50955153 YY_BREAK
5096 case 208:
5097 YY_RULE_SETUP
5098 #line 423 "util/configlexer.lex"
5154 case 211:
5155 YY_RULE_SETUP
5156 #line 426 "util/configlexer.lex"
50995157 { YDVAR(1, VAR_CONTROL_ENABLE) }
51005158 YY_BREAK
5101 case 209:
5102 YY_RULE_SETUP
5103 #line 424 "util/configlexer.lex"
5159 case 212:
5160 YY_RULE_SETUP
5161 #line 427 "util/configlexer.lex"
51045162 { YDVAR(1, VAR_CONTROL_INTERFACE) }
51055163 YY_BREAK
5106 case 210:
5107 YY_RULE_SETUP
5108 #line 425 "util/configlexer.lex"
5164 case 213:
5165 YY_RULE_SETUP
5166 #line 428 "util/configlexer.lex"
51095167 { YDVAR(1, VAR_CONTROL_PORT) }
51105168 YY_BREAK
5111 case 211:
5112 YY_RULE_SETUP
5113 #line 426 "util/configlexer.lex"
5169 case 214:
5170 YY_RULE_SETUP
5171 #line 429 "util/configlexer.lex"
51145172 { YDVAR(1, VAR_CONTROL_USE_CERT) }
51155173 YY_BREAK
5116 case 212:
5117 YY_RULE_SETUP
5118 #line 427 "util/configlexer.lex"
5174 case 215:
5175 YY_RULE_SETUP
5176 #line 430 "util/configlexer.lex"
51195177 { YDVAR(1, VAR_SERVER_KEY_FILE) }
51205178 YY_BREAK
5121 case 213:
5122 YY_RULE_SETUP
5123 #line 428 "util/configlexer.lex"
5179 case 216:
5180 YY_RULE_SETUP
5181 #line 431 "util/configlexer.lex"
51245182 { YDVAR(1, VAR_SERVER_CERT_FILE) }
51255183 YY_BREAK
5126 case 214:
5127 YY_RULE_SETUP
5128 #line 429 "util/configlexer.lex"
5184 case 217:
5185 YY_RULE_SETUP
5186 #line 432 "util/configlexer.lex"
51295187 { YDVAR(1, VAR_CONTROL_KEY_FILE) }
51305188 YY_BREAK
5131 case 215:
5132 YY_RULE_SETUP
5133 #line 430 "util/configlexer.lex"
5189 case 218:
5190 YY_RULE_SETUP
5191 #line 433 "util/configlexer.lex"
51345192 { YDVAR(1, VAR_CONTROL_CERT_FILE) }
51355193 YY_BREAK
5136 case 216:
5137 YY_RULE_SETUP
5138 #line 431 "util/configlexer.lex"
5194 case 219:
5195 YY_RULE_SETUP
5196 #line 434 "util/configlexer.lex"
51395197 { YDVAR(1, VAR_PYTHON_SCRIPT) }
51405198 YY_BREAK
5141 case 217:
5142 YY_RULE_SETUP
5143 #line 432 "util/configlexer.lex"
5199 case 220:
5200 YY_RULE_SETUP
5201 #line 435 "util/configlexer.lex"
51445202 { YDVAR(0, VAR_PYTHON) }
51455203 YY_BREAK
5146 case 218:
5147 YY_RULE_SETUP
5148 #line 433 "util/configlexer.lex"
5204 case 221:
5205 YY_RULE_SETUP
5206 #line 436 "util/configlexer.lex"
51495207 { YDVAR(1, VAR_DYNLIB_FILE) }
51505208 YY_BREAK
5151 case 219:
5152 YY_RULE_SETUP
5153 #line 434 "util/configlexer.lex"
5209 case 222:
5210 YY_RULE_SETUP
5211 #line 437 "util/configlexer.lex"
51545212 { YDVAR(0, VAR_DYNLIB) }
51555213 YY_BREAK
5156 case 220:
5157 YY_RULE_SETUP
5158 #line 435 "util/configlexer.lex"
5214 case 223:
5215 YY_RULE_SETUP
5216 #line 438 "util/configlexer.lex"
51595217 { YDVAR(1, VAR_DOMAIN_INSECURE) }
51605218 YY_BREAK
5161 case 221:
5162 YY_RULE_SETUP
5163 #line 436 "util/configlexer.lex"
5219 case 224:
5220 YY_RULE_SETUP
5221 #line 439 "util/configlexer.lex"
51645222 { YDVAR(1, VAR_MINIMAL_RESPONSES) }
51655223 YY_BREAK
5166 case 222:
5167 YY_RULE_SETUP
5168 #line 437 "util/configlexer.lex"
5224 case 225:
5225 YY_RULE_SETUP
5226 #line 440 "util/configlexer.lex"
51695227 { YDVAR(1, VAR_RRSET_ROUNDROBIN) }
51705228 YY_BREAK
5171 case 223:
5172 YY_RULE_SETUP
5173 #line 438 "util/configlexer.lex"
5229 case 226:
5230 YY_RULE_SETUP
5231 #line 441 "util/configlexer.lex"
51745232 { YDVAR(1, VAR_UNKNOWN_SERVER_TIME_LIMIT) }
51755233 YY_BREAK
5176 case 224:
5177 YY_RULE_SETUP
5178 #line 439 "util/configlexer.lex"
5234 case 227:
5235 YY_RULE_SETUP
5236 #line 442 "util/configlexer.lex"
51795237 { YDVAR(1, VAR_MAX_UDP_SIZE) }
51805238 YY_BREAK
5181 case 225:
5182 YY_RULE_SETUP
5183 #line 440 "util/configlexer.lex"
5239 case 228:
5240 YY_RULE_SETUP
5241 #line 443 "util/configlexer.lex"
51845242 { YDVAR(1, VAR_DNS64_PREFIX) }
51855243 YY_BREAK
5186 case 226:
5187 YY_RULE_SETUP
5188 #line 441 "util/configlexer.lex"
5244 case 229:
5245 YY_RULE_SETUP
5246 #line 444 "util/configlexer.lex"
51895247 { YDVAR(1, VAR_DNS64_SYNTHALL) }
51905248 YY_BREAK
5191 case 227:
5192 YY_RULE_SETUP
5193 #line 442 "util/configlexer.lex"
5249 case 230:
5250 YY_RULE_SETUP
5251 #line 445 "util/configlexer.lex"
51945252 { YDVAR(1, VAR_DNS64_IGNORE_AAAA) }
51955253 YY_BREAK
5196 case 228:
5197 YY_RULE_SETUP
5198 #line 443 "util/configlexer.lex"
5254 case 231:
5255 YY_RULE_SETUP
5256 #line 446 "util/configlexer.lex"
51995257 { YDVAR(1, VAR_DEFINE_TAG) }
52005258 YY_BREAK
5201 case 229:
5202 YY_RULE_SETUP
5203 #line 444 "util/configlexer.lex"
5259 case 232:
5260 YY_RULE_SETUP
5261 #line 447 "util/configlexer.lex"
52045262 { YDVAR(2, VAR_LOCAL_ZONE_TAG) }
52055263 YY_BREAK
5206 case 230:
5207 YY_RULE_SETUP
5208 #line 445 "util/configlexer.lex"
5264 case 233:
5265 YY_RULE_SETUP
5266 #line 448 "util/configlexer.lex"
52095267 { YDVAR(2, VAR_ACCESS_CONTROL_TAG) }
52105268 YY_BREAK
5211 case 231:
5212 YY_RULE_SETUP
5213 #line 446 "util/configlexer.lex"
5269 case 234:
5270 YY_RULE_SETUP
5271 #line 449 "util/configlexer.lex"
52145272 { YDVAR(3, VAR_ACCESS_CONTROL_TAG_ACTION) }
52155273 YY_BREAK
5216 case 232:
5217 YY_RULE_SETUP
5218 #line 447 "util/configlexer.lex"
5274 case 235:
5275 YY_RULE_SETUP
5276 #line 450 "util/configlexer.lex"
52195277 { YDVAR(3, VAR_ACCESS_CONTROL_TAG_DATA) }
52205278 YY_BREAK
5221 case 233:
5222 YY_RULE_SETUP
5223 #line 448 "util/configlexer.lex"
5279 case 236:
5280 YY_RULE_SETUP
5281 #line 451 "util/configlexer.lex"
52245282 { YDVAR(2, VAR_ACCESS_CONTROL_VIEW) }
52255283 YY_BREAK
5226 case 234:
5227 YY_RULE_SETUP
5228 #line 449 "util/configlexer.lex"
5284 case 237:
5285 YY_RULE_SETUP
5286 #line 452 "util/configlexer.lex"
52295287 { YDVAR(3, VAR_LOCAL_ZONE_OVERRIDE) }
52305288 YY_BREAK
5231 case 235:
5232 YY_RULE_SETUP
5233 #line 450 "util/configlexer.lex"
5289 case 238:
5290 YY_RULE_SETUP
5291 #line 453 "util/configlexer.lex"
52345292 { YDVAR(0, VAR_DNSTAP) }
52355293 YY_BREAK
5236 case 236:
5237 YY_RULE_SETUP
5238 #line 451 "util/configlexer.lex"
5294 case 239:
5295 YY_RULE_SETUP
5296 #line 454 "util/configlexer.lex"
52395297 { YDVAR(1, VAR_DNSTAP_ENABLE) }
52405298 YY_BREAK
5241 case 237:
5242 YY_RULE_SETUP
5243 #line 452 "util/configlexer.lex"
5299 case 240:
5300 YY_RULE_SETUP
5301 #line 455 "util/configlexer.lex"
52445302 { YDVAR(1, VAR_DNSTAP_BIDIRECTIONAL) }
52455303 YY_BREAK
5246 case 238:
5247 YY_RULE_SETUP
5248 #line 453 "util/configlexer.lex"
5304 case 241:
5305 YY_RULE_SETUP
5306 #line 456 "util/configlexer.lex"
52495307 { YDVAR(1, VAR_DNSTAP_SOCKET_PATH) }
52505308 YY_BREAK
5251 case 239:
5252 YY_RULE_SETUP
5253 #line 454 "util/configlexer.lex"
5309 case 242:
5310 YY_RULE_SETUP
5311 #line 457 "util/configlexer.lex"
52545312 { YDVAR(1, VAR_DNSTAP_IP) }
52555313 YY_BREAK
5256 case 240:
5257 YY_RULE_SETUP
5258 #line 455 "util/configlexer.lex"
5314 case 243:
5315 YY_RULE_SETUP
5316 #line 458 "util/configlexer.lex"
52595317 { YDVAR(1, VAR_DNSTAP_TLS) }
52605318 YY_BREAK
5261 case 241:
5262 YY_RULE_SETUP
5263 #line 456 "util/configlexer.lex"
5319 case 244:
5320 YY_RULE_SETUP
5321 #line 459 "util/configlexer.lex"
52645322 { YDVAR(1, VAR_DNSTAP_TLS_SERVER_NAME) }
52655323 YY_BREAK
5266 case 242:
5267 YY_RULE_SETUP
5268 #line 457 "util/configlexer.lex"
5324 case 245:
5325 YY_RULE_SETUP
5326 #line 460 "util/configlexer.lex"
52695327 { YDVAR(1, VAR_DNSTAP_TLS_CERT_BUNDLE) }
52705328 YY_BREAK
5271 case 243:
5272 YY_RULE_SETUP
5273 #line 458 "util/configlexer.lex"
5329 case 246:
5330 YY_RULE_SETUP
5331 #line 461 "util/configlexer.lex"
52745332 {
52755333 YDVAR(1, VAR_DNSTAP_TLS_CLIENT_KEY_FILE) }
52765334 YY_BREAK
5277 case 244:
5278 YY_RULE_SETUP
5279 #line 460 "util/configlexer.lex"
5335 case 247:
5336 YY_RULE_SETUP
5337 #line 463 "util/configlexer.lex"
52805338 {
52815339 YDVAR(1, VAR_DNSTAP_TLS_CLIENT_CERT_FILE) }
52825340 YY_BREAK
5283 case 245:
5284 YY_RULE_SETUP
5285 #line 462 "util/configlexer.lex"
5341 case 248:
5342 YY_RULE_SETUP
5343 #line 465 "util/configlexer.lex"
52865344 { YDVAR(1, VAR_DNSTAP_SEND_IDENTITY) }
52875345 YY_BREAK
5288 case 246:
5289 YY_RULE_SETUP
5290 #line 463 "util/configlexer.lex"
5346 case 249:
5347 YY_RULE_SETUP
5348 #line 466 "util/configlexer.lex"
52915349 { YDVAR(1, VAR_DNSTAP_SEND_VERSION) }
52925350 YY_BREAK
5293 case 247:
5294 YY_RULE_SETUP
5295 #line 464 "util/configlexer.lex"
5351 case 250:
5352 YY_RULE_SETUP
5353 #line 467 "util/configlexer.lex"
52965354 { YDVAR(1, VAR_DNSTAP_IDENTITY) }
52975355 YY_BREAK
5298 case 248:
5299 YY_RULE_SETUP
5300 #line 465 "util/configlexer.lex"
5356 case 251:
5357 YY_RULE_SETUP
5358 #line 468 "util/configlexer.lex"
53015359 { YDVAR(1, VAR_DNSTAP_VERSION) }
53025360 YY_BREAK
5303 case 249:
5304 YY_RULE_SETUP
5305 #line 466 "util/configlexer.lex"
5361 case 252:
5362 YY_RULE_SETUP
5363 #line 469 "util/configlexer.lex"
53065364 {
53075365 YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES) }
53085366 YY_BREAK
5309 case 250:
5310 YY_RULE_SETUP
5311 #line 468 "util/configlexer.lex"
5367 case 253:
5368 YY_RULE_SETUP
5369 #line 471 "util/configlexer.lex"
53125370 {
53135371 YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES) }
53145372 YY_BREAK
5315 case 251:
5316 YY_RULE_SETUP
5317 #line 470 "util/configlexer.lex"
5373 case 254:
5374 YY_RULE_SETUP
5375 #line 473 "util/configlexer.lex"
53185376 {
53195377 YDVAR(1, VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES) }
53205378 YY_BREAK
5321 case 252:
5322 YY_RULE_SETUP
5323 #line 472 "util/configlexer.lex"
5379 case 255:
5380 YY_RULE_SETUP
5381 #line 475 "util/configlexer.lex"
53245382 {
53255383 YDVAR(1, VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES) }
53265384 YY_BREAK
5327 case 253:
5328 YY_RULE_SETUP
5329 #line 474 "util/configlexer.lex"
5385 case 256:
5386 YY_RULE_SETUP
5387 #line 477 "util/configlexer.lex"
53305388 {
53315389 YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) }
53325390 YY_BREAK
5333 case 254:
5334 YY_RULE_SETUP
5335 #line 476 "util/configlexer.lex"
5391 case 257:
5392 YY_RULE_SETUP
5393 #line 479 "util/configlexer.lex"
53365394 {
53375395 YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) }
53385396 YY_BREAK
5339 case 255:
5340 YY_RULE_SETUP
5341 #line 478 "util/configlexer.lex"
5397 case 258:
5398 YY_RULE_SETUP
5399 #line 481 "util/configlexer.lex"
53425400 { YDVAR(1, VAR_DISABLE_DNSSEC_LAME_CHECK) }
53435401 YY_BREAK
5344 case 256:
5345 YY_RULE_SETUP
5346 #line 479 "util/configlexer.lex"
5402 case 259:
5403 YY_RULE_SETUP
5404 #line 482 "util/configlexer.lex"
53475405 { YDVAR(1, VAR_IP_RATELIMIT) }
53485406 YY_BREAK
5349 case 257:
5350 YY_RULE_SETUP
5351 #line 480 "util/configlexer.lex"
5407 case 260:
5408 YY_RULE_SETUP
5409 #line 483 "util/configlexer.lex"
53525410 { YDVAR(1, VAR_RATELIMIT) }
53535411 YY_BREAK
5354 case 258:
5355 YY_RULE_SETUP
5356 #line 481 "util/configlexer.lex"
5412 case 261:
5413 YY_RULE_SETUP
5414 #line 484 "util/configlexer.lex"
53575415 { YDVAR(1, VAR_IP_RATELIMIT_SLABS) }
53585416 YY_BREAK
5359 case 259:
5360 YY_RULE_SETUP
5361 #line 482 "util/configlexer.lex"
5417 case 262:
5418 YY_RULE_SETUP
5419 #line 485 "util/configlexer.lex"
53625420 { YDVAR(1, VAR_RATELIMIT_SLABS) }
53635421 YY_BREAK
5364 case 260:
5365 YY_RULE_SETUP
5366 #line 483 "util/configlexer.lex"
5422 case 263:
5423 YY_RULE_SETUP
5424 #line 486 "util/configlexer.lex"
53675425 { YDVAR(1, VAR_IP_RATELIMIT_SIZE) }
53685426 YY_BREAK
5369 case 261:
5370 YY_RULE_SETUP
5371 #line 484 "util/configlexer.lex"
5427 case 264:
5428 YY_RULE_SETUP
5429 #line 487 "util/configlexer.lex"
53725430 { YDVAR(1, VAR_RATELIMIT_SIZE) }
53735431 YY_BREAK
5374 case 262:
5375 YY_RULE_SETUP
5376 #line 485 "util/configlexer.lex"
5432 case 265:
5433 YY_RULE_SETUP
5434 #line 488 "util/configlexer.lex"
53775435 { YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) }
53785436 YY_BREAK
5379 case 263:
5380 YY_RULE_SETUP
5381 #line 486 "util/configlexer.lex"
5437 case 266:
5438 YY_RULE_SETUP
5439 #line 489 "util/configlexer.lex"
53825440 { YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) }
53835441 YY_BREAK
5384 case 264:
5385 YY_RULE_SETUP
5386 #line 487 "util/configlexer.lex"
5442 case 267:
5443 YY_RULE_SETUP
5444 #line 490 "util/configlexer.lex"
53875445 { YDVAR(1, VAR_IP_RATELIMIT_FACTOR) }
53885446 YY_BREAK
5389 case 265:
5390 YY_RULE_SETUP
5391 #line 488 "util/configlexer.lex"
5447 case 268:
5448 YY_RULE_SETUP
5449 #line 491 "util/configlexer.lex"
53925450 { YDVAR(1, VAR_RATELIMIT_FACTOR) }
53935451 YY_BREAK
5394 case 266:
5395 YY_RULE_SETUP
5396 #line 489 "util/configlexer.lex"
5452 case 269:
5453 YY_RULE_SETUP
5454 #line 492 "util/configlexer.lex"
53975455 { YDVAR(1, VAR_LOW_RTT) }
53985456 YY_BREAK
5399 case 267:
5400 YY_RULE_SETUP
5401 #line 490 "util/configlexer.lex"
5457 case 270:
5458 YY_RULE_SETUP
5459 #line 493 "util/configlexer.lex"
54025460 { YDVAR(1, VAR_FAST_SERVER_NUM) }
54035461 YY_BREAK
5404 case 268:
5405 YY_RULE_SETUP
5406 #line 491 "util/configlexer.lex"
5462 case 271:
5463 YY_RULE_SETUP
5464 #line 494 "util/configlexer.lex"
54075465 { YDVAR(1, VAR_FAST_SERVER_PERMIL) }
54085466 YY_BREAK
5409 case 269:
5410 YY_RULE_SETUP
5411 #line 492 "util/configlexer.lex"
5467 case 272:
5468 YY_RULE_SETUP
5469 #line 495 "util/configlexer.lex"
54125470 { YDVAR(1, VAR_FAST_SERVER_PERMIL) }
54135471 YY_BREAK
5414 case 270:
5415 YY_RULE_SETUP
5416 #line 493 "util/configlexer.lex"
5472 case 273:
5473 YY_RULE_SETUP
5474 #line 496 "util/configlexer.lex"
54175475 { YDVAR(1, VAR_FAST_SERVER_PERMIL) }
54185476 YY_BREAK
5419 case 271:
5420 YY_RULE_SETUP
5421 #line 494 "util/configlexer.lex"
5477 case 274:
5478 YY_RULE_SETUP
5479 #line 497 "util/configlexer.lex"
54225480 { YDVAR(2, VAR_RESPONSE_IP_TAG) }
54235481 YY_BREAK
5424 case 272:
5425 YY_RULE_SETUP
5426 #line 495 "util/configlexer.lex"
5482 case 275:
5483 YY_RULE_SETUP
5484 #line 498 "util/configlexer.lex"
54275485 { YDVAR(2, VAR_RESPONSE_IP) }
54285486 YY_BREAK
5429 case 273:
5430 YY_RULE_SETUP
5431 #line 496 "util/configlexer.lex"
5487 case 276:
5488 YY_RULE_SETUP
5489 #line 499 "util/configlexer.lex"
54325490 { YDVAR(2, VAR_RESPONSE_IP_DATA) }
54335491 YY_BREAK
5434 case 274:
5435 YY_RULE_SETUP
5436 #line 497 "util/configlexer.lex"
5492 case 277:
5493 YY_RULE_SETUP
5494 #line 500 "util/configlexer.lex"
54375495 { YDVAR(0, VAR_DNSCRYPT) }
54385496 YY_BREAK
5439 case 275:
5440 YY_RULE_SETUP
5441 #line 498 "util/configlexer.lex"
5497 case 278:
5498 YY_RULE_SETUP
5499 #line 501 "util/configlexer.lex"
54425500 { YDVAR(1, VAR_DNSCRYPT_ENABLE) }
54435501 YY_BREAK
5444 case 276:
5445 YY_RULE_SETUP
5446 #line 499 "util/configlexer.lex"
5502 case 279:
5503 YY_RULE_SETUP
5504 #line 502 "util/configlexer.lex"
54475505 { YDVAR(1, VAR_DNSCRYPT_PORT) }
54485506 YY_BREAK
5449 case 277:
5450 YY_RULE_SETUP
5451 #line 500 "util/configlexer.lex"
5507 case 280:
5508 YY_RULE_SETUP
5509 #line 503 "util/configlexer.lex"
54525510 { YDVAR(1, VAR_DNSCRYPT_PROVIDER) }
54535511 YY_BREAK
5454 case 278:
5455 YY_RULE_SETUP
5456 #line 501 "util/configlexer.lex"
5512 case 281:
5513 YY_RULE_SETUP
5514 #line 504 "util/configlexer.lex"
54575515 { YDVAR(1, VAR_DNSCRYPT_SECRET_KEY) }
54585516 YY_BREAK
5459 case 279:
5460 YY_RULE_SETUP
5461 #line 502 "util/configlexer.lex"
5517 case 282:
5518 YY_RULE_SETUP
5519 #line 505 "util/configlexer.lex"
54625520 { YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT) }
54635521 YY_BREAK
5464 case 280:
5465 YY_RULE_SETUP
5466 #line 503 "util/configlexer.lex"
5522 case 283:
5523 YY_RULE_SETUP
5524 #line 506 "util/configlexer.lex"
54675525 { YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT_ROTATED) }
54685526 YY_BREAK
5469 case 281:
5470 YY_RULE_SETUP
5471 #line 504 "util/configlexer.lex"
5527 case 284:
5528 YY_RULE_SETUP
5529 #line 507 "util/configlexer.lex"
54725530 {
54735531 YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE) }
54745532 YY_BREAK
5475 case 282:
5476 YY_RULE_SETUP
5477 #line 506 "util/configlexer.lex"
5533 case 285:
5534 YY_RULE_SETUP
5535 #line 509 "util/configlexer.lex"
54785536 {
54795537 YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS) }
54805538 YY_BREAK
5481 case 283:
5482 YY_RULE_SETUP
5483 #line 508 "util/configlexer.lex"
5539 case 286:
5540 YY_RULE_SETUP
5541 #line 511 "util/configlexer.lex"
54845542 { YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SIZE) }
54855543 YY_BREAK
5486 case 284:
5487 YY_RULE_SETUP
5488 #line 509 "util/configlexer.lex"
5544 case 287:
5545 YY_RULE_SETUP
5546 #line 512 "util/configlexer.lex"
54895547 { YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SLABS) }
54905548 YY_BREAK
5491 case 285:
5492 YY_RULE_SETUP
5493 #line 510 "util/configlexer.lex"
5549 case 288:
5550 YY_RULE_SETUP
5551 #line 513 "util/configlexer.lex"
54945552 { YDVAR(1, VAR_IPSECMOD_ENABLED) }
54955553 YY_BREAK
5496 case 286:
5497 YY_RULE_SETUP
5498 #line 511 "util/configlexer.lex"
5554 case 289:
5555 YY_RULE_SETUP
5556 #line 514 "util/configlexer.lex"
54995557 { YDVAR(1, VAR_IPSECMOD_IGNORE_BOGUS) }
55005558 YY_BREAK
5501 case 287:
5502 YY_RULE_SETUP
5503 #line 512 "util/configlexer.lex"
5559 case 290:
5560 YY_RULE_SETUP
5561 #line 515 "util/configlexer.lex"
55045562 { YDVAR(1, VAR_IPSECMOD_HOOK) }
55055563 YY_BREAK
5506 case 288:
5507 YY_RULE_SETUP
5508 #line 513 "util/configlexer.lex"
5564 case 291:
5565 YY_RULE_SETUP
5566 #line 516 "util/configlexer.lex"
55095567 { YDVAR(1, VAR_IPSECMOD_MAX_TTL) }
55105568 YY_BREAK
5511 case 289:
5512 YY_RULE_SETUP
5513 #line 514 "util/configlexer.lex"
5569 case 292:
5570 YY_RULE_SETUP
5571 #line 517 "util/configlexer.lex"
55145572 { YDVAR(1, VAR_IPSECMOD_WHITELIST) }
55155573 YY_BREAK
5516 case 290:
5517 YY_RULE_SETUP
5518 #line 515 "util/configlexer.lex"
5574 case 293:
5575 YY_RULE_SETUP
5576 #line 518 "util/configlexer.lex"
55195577 { YDVAR(1, VAR_IPSECMOD_WHITELIST) }
55205578 YY_BREAK
5521 case 291:
5522 YY_RULE_SETUP
5523 #line 516 "util/configlexer.lex"
5579 case 294:
5580 YY_RULE_SETUP
5581 #line 519 "util/configlexer.lex"
55245582 { YDVAR(1, VAR_IPSECMOD_STRICT) }
55255583 YY_BREAK
5526 case 292:
5527 YY_RULE_SETUP
5528 #line 517 "util/configlexer.lex"
5584 case 295:
5585 YY_RULE_SETUP
5586 #line 520 "util/configlexer.lex"
55295587 { YDVAR(0, VAR_CACHEDB) }
55305588 YY_BREAK
5531 case 293:
5532 YY_RULE_SETUP
5533 #line 518 "util/configlexer.lex"
5589 case 296:
5590 YY_RULE_SETUP
5591 #line 521 "util/configlexer.lex"
55345592 { YDVAR(1, VAR_CACHEDB_BACKEND) }
55355593 YY_BREAK
5536 case 294:
5537 YY_RULE_SETUP
5538 #line 519 "util/configlexer.lex"
5594 case 297:
5595 YY_RULE_SETUP
5596 #line 522 "util/configlexer.lex"
55395597 { YDVAR(1, VAR_CACHEDB_SECRETSEED) }
55405598 YY_BREAK
5541 case 295:
5542 YY_RULE_SETUP
5543 #line 520 "util/configlexer.lex"
5599 case 298:
5600 YY_RULE_SETUP
5601 #line 523 "util/configlexer.lex"
55445602 { YDVAR(1, VAR_CACHEDB_REDISHOST) }
55455603 YY_BREAK
5546 case 296:
5547 YY_RULE_SETUP
5548 #line 521 "util/configlexer.lex"
5604 case 299:
5605 YY_RULE_SETUP
5606 #line 524 "util/configlexer.lex"
55495607 { YDVAR(1, VAR_CACHEDB_REDISPORT) }
55505608 YY_BREAK
5551 case 297:
5552 YY_RULE_SETUP
5553 #line 522 "util/configlexer.lex"
5609 case 300:
5610 YY_RULE_SETUP
5611 #line 525 "util/configlexer.lex"
55545612 { YDVAR(1, VAR_CACHEDB_REDISTIMEOUT) }
55555613 YY_BREAK
5556 case 298:
5557 YY_RULE_SETUP
5558 #line 523 "util/configlexer.lex"
5614 case 301:
5615 YY_RULE_SETUP
5616 #line 526 "util/configlexer.lex"
55595617 { YDVAR(1, VAR_CACHEDB_REDISEXPIRERECORDS) }
55605618 YY_BREAK
5561 case 299:
5562 YY_RULE_SETUP
5563 #line 524 "util/configlexer.lex"
5619 case 302:
5620 YY_RULE_SETUP
5621 #line 527 "util/configlexer.lex"
55645622 { YDVAR(0, VAR_IPSET) }
55655623 YY_BREAK
5566 case 300:
5567 YY_RULE_SETUP
5568 #line 525 "util/configlexer.lex"
5624 case 303:
5625 YY_RULE_SETUP
5626 #line 528 "util/configlexer.lex"
55695627 { YDVAR(1, VAR_IPSET_NAME_V4) }
55705628 YY_BREAK
5571 case 301:
5572 YY_RULE_SETUP
5573 #line 526 "util/configlexer.lex"
5629 case 304:
5630 YY_RULE_SETUP
5631 #line 529 "util/configlexer.lex"
55745632 { YDVAR(1, VAR_IPSET_NAME_V6) }
55755633 YY_BREAK
5576 case 302:
5577 YY_RULE_SETUP
5578 #line 527 "util/configlexer.lex"
5634 case 305:
5635 YY_RULE_SETUP
5636 #line 530 "util/configlexer.lex"
55795637 { YDVAR(1, VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM) }
55805638 YY_BREAK
5581 case 303:
5582 YY_RULE_SETUP
5583 #line 528 "util/configlexer.lex"
5639 case 306:
5640 YY_RULE_SETUP
5641 #line 531 "util/configlexer.lex"
55845642 { YDVAR(2, VAR_TCP_CONNECTION_LIMIT) }
55855643 YY_BREAK
5586 case 304:
5587 YY_RULE_SETUP
5588 #line 529 "util/configlexer.lex"
5589 { YDVAR(2, VAR_EDNS_CLIENT_TAG) }
5590 YY_BREAK
5591 case 305:
5592 YY_RULE_SETUP
5593 #line 530 "util/configlexer.lex"
5594 { YDVAR(1, VAR_EDNS_CLIENT_TAG_OPCODE) }
5595 YY_BREAK
5596 case 306:
5597 /* rule 306 can match eol */
5598 YY_RULE_SETUP
5599 #line 531 "util/configlexer.lex"
5644 case 307:
5645 YY_RULE_SETUP
5646 #line 532 "util/configlexer.lex"
5647 { YDVAR(2, VAR_EDNS_CLIENT_STRING) }
5648 YY_BREAK
5649 case 308:
5650 YY_RULE_SETUP
5651 #line 533 "util/configlexer.lex"
5652 { YDVAR(1, VAR_EDNS_CLIENT_STRING_OPCODE) }
5653 YY_BREAK
5654 case 309:
5655 /* rule 309 can match eol */
5656 YY_RULE_SETUP
5657 #line 534 "util/configlexer.lex"
56005658 { LEXOUT(("NL\n")); cfg_parser->line++; }
56015659 YY_BREAK
56025660 /* Quoted strings. Strip leading and ending quotes */
5603 case 307:
5604 YY_RULE_SETUP
5605 #line 534 "util/configlexer.lex"
5661 case 310:
5662 YY_RULE_SETUP
5663 #line 537 "util/configlexer.lex"
56065664 { BEGIN(quotedstring); LEXOUT(("QS ")); }
56075665 YY_BREAK
56085666 case YY_STATE_EOF(quotedstring):
5609 #line 535 "util/configlexer.lex"
5667 #line 538 "util/configlexer.lex"
56105668 {
56115669 yyerror("EOF inside quoted string");
56125670 if(--num_args == 0) { BEGIN(INITIAL); }
56135671 else { BEGIN(val); }
56145672 }
56155673 YY_BREAK
5616 case 308:
5617 YY_RULE_SETUP
5618 #line 540 "util/configlexer.lex"
5674 case 311:
5675 YY_RULE_SETUP
5676 #line 543 "util/configlexer.lex"
56195677 { LEXOUT(("STR(%s) ", yytext)); yymore(); }
56205678 YY_BREAK
5621 case 309:
5622 /* rule 309 can match eol */
5623 YY_RULE_SETUP
5624 #line 541 "util/configlexer.lex"
5679 case 312:
5680 /* rule 312 can match eol */
5681 YY_RULE_SETUP
5682 #line 544 "util/configlexer.lex"
56255683 { yyerror("newline inside quoted string, no end \"");
56265684 cfg_parser->line++; BEGIN(INITIAL); }
56275685 YY_BREAK
5628 case 310:
5629 YY_RULE_SETUP
5630 #line 543 "util/configlexer.lex"
5686 case 313:
5687 YY_RULE_SETUP
5688 #line 546 "util/configlexer.lex"
56315689 {
56325690 LEXOUT(("QE "));
56335691 if(--num_args == 0) { BEGIN(INITIAL); }
56405698 }
56415699 YY_BREAK
56425700 /* Single Quoted strings. Strip leading and ending quotes */
5643 case 311:
5644 YY_RULE_SETUP
5645 #line 555 "util/configlexer.lex"
5701 case 314:
5702 YY_RULE_SETUP
5703 #line 558 "util/configlexer.lex"
56465704 { BEGIN(singlequotedstr); LEXOUT(("SQS ")); }
56475705 YY_BREAK
56485706 case YY_STATE_EOF(singlequotedstr):
5649 #line 556 "util/configlexer.lex"
5707 #line 559 "util/configlexer.lex"
56505708 {
56515709 yyerror("EOF inside quoted string");
56525710 if(--num_args == 0) { BEGIN(INITIAL); }
56535711 else { BEGIN(val); }
56545712 }
56555713 YY_BREAK
5656 case 312:
5657 YY_RULE_SETUP
5658 #line 561 "util/configlexer.lex"
5714 case 315:
5715 YY_RULE_SETUP
5716 #line 564 "util/configlexer.lex"
56595717 { LEXOUT(("STR(%s) ", yytext)); yymore(); }
56605718 YY_BREAK
5661 case 313:
5662 /* rule 313 can match eol */
5663 YY_RULE_SETUP
5664 #line 562 "util/configlexer.lex"
5719 case 316:
5720 /* rule 316 can match eol */
5721 YY_RULE_SETUP
5722 #line 565 "util/configlexer.lex"
56655723 { yyerror("newline inside quoted string, no end '");
56665724 cfg_parser->line++; BEGIN(INITIAL); }
56675725 YY_BREAK
5668 case 314:
5669 YY_RULE_SETUP
5670 #line 564 "util/configlexer.lex"
5726 case 317:
5727 YY_RULE_SETUP
5728 #line 567 "util/configlexer.lex"
56715729 {
56725730 LEXOUT(("SQE "));
56735731 if(--num_args == 0) { BEGIN(INITIAL); }
56805738 }
56815739 YY_BREAK
56825740 /* include: directive */
5683 case 315:
5684 YY_RULE_SETUP
5685 #line 576 "util/configlexer.lex"
5741 case 318:
5742 YY_RULE_SETUP
5743 #line 579 "util/configlexer.lex"
56865744 {
56875745 LEXOUT(("v(%s) ", yytext)); inc_prev = YYSTATE; BEGIN(include); }
56885746 YY_BREAK
56895747 case YY_STATE_EOF(include):
5690 #line 578 "util/configlexer.lex"
5748 #line 581 "util/configlexer.lex"
56915749 {
56925750 yyerror("EOF inside include directive");
56935751 BEGIN(inc_prev);
56945752 }
56955753 YY_BREAK
5696 case 316:
5697 YY_RULE_SETUP
5698 #line 582 "util/configlexer.lex"
5754 case 319:
5755 YY_RULE_SETUP
5756 #line 585 "util/configlexer.lex"
56995757 { LEXOUT(("ISP ")); /* ignore */ }
57005758 YY_BREAK
5701 case 317:
5702 /* rule 317 can match eol */
5703 YY_RULE_SETUP
5704 #line 583 "util/configlexer.lex"
5759 case 320:
5760 /* rule 320 can match eol */
5761 YY_RULE_SETUP
5762 #line 586 "util/configlexer.lex"
57055763 { LEXOUT(("NL\n")); cfg_parser->line++;}
57065764 YY_BREAK
5707 case 318:
5708 YY_RULE_SETUP
5709 #line 584 "util/configlexer.lex"
5765 case 321:
5766 YY_RULE_SETUP
5767 #line 587 "util/configlexer.lex"
57105768 { LEXOUT(("IQS ")); BEGIN(include_quoted); }
57115769 YY_BREAK
5712 case 319:
5713 YY_RULE_SETUP
5714 #line 585 "util/configlexer.lex"
5770 case 322:
5771 YY_RULE_SETUP
5772 #line 588 "util/configlexer.lex"
57155773 {
57165774 LEXOUT(("Iunquotedstr(%s) ", yytext));
57175775 config_start_include_glob(yytext, 0);
57195777 }
57205778 YY_BREAK
57215779 case YY_STATE_EOF(include_quoted):
5722 #line 590 "util/configlexer.lex"
5780 #line 593 "util/configlexer.lex"
57235781 {
57245782 yyerror("EOF inside quoted string");
57255783 BEGIN(inc_prev);
57265784 }
57275785 YY_BREAK
5728 case 320:
5729 YY_RULE_SETUP
5730 #line 594 "util/configlexer.lex"
5786 case 323:
5787 YY_RULE_SETUP
5788 #line 597 "util/configlexer.lex"
57315789 { LEXOUT(("ISTR(%s) ", yytext)); yymore(); }
57325790 YY_BREAK
5733 case 321:
5734 /* rule 321 can match eol */
5735 YY_RULE_SETUP
5736 #line 595 "util/configlexer.lex"
5791 case 324:
5792 /* rule 324 can match eol */
5793 YY_RULE_SETUP
5794 #line 598 "util/configlexer.lex"
57375795 { yyerror("newline before \" in include name");
57385796 cfg_parser->line++; BEGIN(inc_prev); }
57395797 YY_BREAK
5740 case 322:
5741 YY_RULE_SETUP
5742 #line 597 "util/configlexer.lex"
5798 case 325:
5799 YY_RULE_SETUP
5800 #line 600 "util/configlexer.lex"
57435801 {
57445802 LEXOUT(("IQE "));
57455803 yytext[yyleng - 1] = '\0';
57495807 YY_BREAK
57505808 case YY_STATE_EOF(INITIAL):
57515809 case YY_STATE_EOF(val):
5752 #line 603 "util/configlexer.lex"
5810 #line 606 "util/configlexer.lex"
57535811 {
57545812 LEXOUT(("LEXEOF "));
57555813 yy_set_bol(1); /* Set beginning of line, so "^" rules match. */
57645822 }
57655823 YY_BREAK
57665824 /* include-toplevel: directive */
5767 case 323:
5768 YY_RULE_SETUP
5769 #line 617 "util/configlexer.lex"
5825 case 326:
5826 YY_RULE_SETUP
5827 #line 620 "util/configlexer.lex"
57705828 {
57715829 LEXOUT(("v(%s) ", yytext)); inc_prev = YYSTATE; BEGIN(include_toplevel);
57725830 }
57735831 YY_BREAK
57745832 case YY_STATE_EOF(include_toplevel):
5775 #line 620 "util/configlexer.lex"
5833 #line 623 "util/configlexer.lex"
57765834 {
57775835 yyerror("EOF inside include_toplevel directive");
57785836 BEGIN(inc_prev);
57795837 }
57805838 YY_BREAK
5781 case 324:
5782 YY_RULE_SETUP
5783 #line 624 "util/configlexer.lex"
5839 case 327:
5840 YY_RULE_SETUP
5841 #line 627 "util/configlexer.lex"
57845842 { LEXOUT(("ITSP ")); /* ignore */ }
57855843 YY_BREAK
5786 case 325:
5787 /* rule 325 can match eol */
5788 YY_RULE_SETUP
5789 #line 625 "util/configlexer.lex"
5844 case 328:
5845 /* rule 328 can match eol */
5846 YY_RULE_SETUP
5847 #line 628 "util/configlexer.lex"
57905848 { LEXOUT(("NL\n")); cfg_parser->line++; }
57915849 YY_BREAK
5792 case 326:
5793 YY_RULE_SETUP
5794 #line 626 "util/configlexer.lex"
5850 case 329:
5851 YY_RULE_SETUP
5852 #line 629 "util/configlexer.lex"
57955853 { LEXOUT(("ITQS ")); BEGIN(include_toplevel_quoted); }
57965854 YY_BREAK
5797 case 327:
5798 YY_RULE_SETUP
5799 #line 627 "util/configlexer.lex"
5855 case 330:
5856 YY_RULE_SETUP
5857 #line 630 "util/configlexer.lex"
58005858 {
58015859 LEXOUT(("ITunquotedstr(%s) ", yytext));
58025860 config_start_include_glob(yytext, 1);
58055863 }
58065864 YY_BREAK
58075865 case YY_STATE_EOF(include_toplevel_quoted):
5808 #line 633 "util/configlexer.lex"
5866 #line 636 "util/configlexer.lex"
58095867 {
58105868 yyerror("EOF inside quoted string");
58115869 BEGIN(inc_prev);
58125870 }
58135871 YY_BREAK
5814 case 328:
5815 YY_RULE_SETUP
5816 #line 637 "util/configlexer.lex"
5872 case 331:
5873 YY_RULE_SETUP
5874 #line 640 "util/configlexer.lex"
58175875 { LEXOUT(("ITSTR(%s) ", yytext)); yymore(); }
58185876 YY_BREAK
5819 case 329:
5820 /* rule 329 can match eol */
5821 YY_RULE_SETUP
5822 #line 638 "util/configlexer.lex"
5877 case 332:
5878 /* rule 332 can match eol */
5879 YY_RULE_SETUP
5880 #line 641 "util/configlexer.lex"
58235881 {
58245882 yyerror("newline before \" in include name");
58255883 cfg_parser->line++; BEGIN(inc_prev);
58265884 }
58275885 YY_BREAK
5828 case 330:
5829 YY_RULE_SETUP
5830 #line 642 "util/configlexer.lex"
5886 case 333:
5887 YY_RULE_SETUP
5888 #line 645 "util/configlexer.lex"
58315889 {
58325890 LEXOUT(("ITQE "));
58335891 yytext[yyleng - 1] = '\0';
58365894 return (VAR_FORCE_TOPLEVEL);
58375895 }
58385896 YY_BREAK
5839 case 331:
5840 YY_RULE_SETUP
5841 #line 650 "util/configlexer.lex"
5897 case 334:
5898 YY_RULE_SETUP
5899 #line 653 "util/configlexer.lex"
58425900 { LEXOUT(("unquotedstr(%s) ", yytext));
58435901 if(--num_args == 0) { BEGIN(INITIAL); }
58445902 yylval.str = strdup(yytext); return STRING_ARG; }
58455903 YY_BREAK
5846 case 332:
5847 YY_RULE_SETUP
5848 #line 654 "util/configlexer.lex"
5904 case 335:
5905 YY_RULE_SETUP
5906 #line 657 "util/configlexer.lex"
58495907 {
58505908 ub_c_error_msg("unknown keyword '%s'", yytext);
58515909 }
58525910 YY_BREAK
5853 case 333:
5854 YY_RULE_SETUP
5855 #line 658 "util/configlexer.lex"
5911 case 336:
5912 YY_RULE_SETUP
5913 #line 661 "util/configlexer.lex"
58565914 {
58575915 ub_c_error_msg("stray '%s'", yytext);
58585916 }
58595917 YY_BREAK
5860 case 334:
5861 YY_RULE_SETUP
5862 #line 662 "util/configlexer.lex"
5918 case 337:
5919 YY_RULE_SETUP
5920 #line 665 "util/configlexer.lex"
58635921 ECHO;
58645922 YY_BREAK
5865 #line 5864 "<stdout>"
5923 #line 5922 "<stdout>"
58665924
58675925 case YY_END_OF_BUFFER:
58685926 {
61576215 while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
61586216 {
61596217 yy_current_state = (int) yy_def[yy_current_state];
6160 if ( yy_current_state >= 3253 )
6218 if ( yy_current_state >= 3292 )
61616219 yy_c = yy_meta[yy_c];
61626220 }
61636221 yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
61856243 while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
61866244 {
61876245 yy_current_state = (int) yy_def[yy_current_state];
6188 if ( yy_current_state >= 3253 )
6246 if ( yy_current_state >= 3292 )
61896247 yy_c = yy_meta[yy_c];
61906248 }
61916249 yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
6192 yy_is_jam = (yy_current_state == 3252);
6250 yy_is_jam = (yy_current_state == 3291);
61936251
61946252 return yy_is_jam ? 0 : yy_current_state;
61956253 }
68286886
68296887 #define YYTABLES_NAME "yytables"
68306888
6831 #line 662 "util/configlexer.lex"
6832
6833
6889 #line 665 "util/configlexer.lex"
6890
6891
261261 http-query-buffer-size{COLON} { YDVAR(1, VAR_HTTP_QUERY_BUFFER_SIZE) }
262262 http-response-buffer-size{COLON} { YDVAR(1, VAR_HTTP_RESPONSE_BUFFER_SIZE) }
263263 http-nodelay{COLON} { YDVAR(1, VAR_HTTP_NODELAY) }
264 http-notls-downstream{COLON} { YDVAR(1, VAR_HTTP_NOTLS_DOWNSTREAM) }
264265 use-systemd{COLON} { YDVAR(1, VAR_USE_SYSTEMD) }
265266 do-daemonize{COLON} { YDVAR(1, VAR_DO_DAEMONIZE) }
266267 interface{COLON} { YDVAR(1, VAR_INTERFACE) }
295296 infra-cache-numhosts{COLON} { YDVAR(1, VAR_INFRA_CACHE_NUMHOSTS) }
296297 infra-cache-lame-size{COLON} { YDVAR(1, VAR_INFRA_CACHE_LAME_SIZE) }
297298 infra-cache-min-rtt{COLON} { YDVAR(1, VAR_INFRA_CACHE_MIN_RTT) }
299 infra-keep-probing{COLON} { YDVAR(1, VAR_INFRA_KEEP_PROBING) }
298300 num-queries-per-thread{COLON} { YDVAR(1, VAR_NUM_QUERIES_PER_THREAD) }
299301 jostle-timeout{COLON} { YDVAR(1, VAR_JOSTLE_TIMEOUT) }
300302 delay-close{COLON} { YDVAR(1, VAR_DELAY_CLOSE) }
303 udp-connect{COLON} { YDVAR(1, VAR_UDP_CONNECT) }
301304 target-fetch-policy{COLON} { YDVAR(1, VAR_TARGET_FETCH_POLICY) }
302305 harden-short-bufsize{COLON} { YDVAR(1, VAR_HARDEN_SHORT_BUFSIZE) }
303306 harden-large-queries{COLON} { YDVAR(1, VAR_HARDEN_LARGE_QUERIES) }
525528 name-v6{COLON} { YDVAR(1, VAR_IPSET_NAME_V6) }
526529 udp-upstream-without-downstream{COLON} { YDVAR(1, VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM) }
527530 tcp-connection-limit{COLON} { YDVAR(2, VAR_TCP_CONNECTION_LIMIT) }
528 edns-client-tag{COLON} { YDVAR(2, VAR_EDNS_CLIENT_TAG) }
529 edns-client-tag-opcode{COLON} { YDVAR(1, VAR_EDNS_CLIENT_TAG_OPCODE) }
531 edns-client-string{COLON} { YDVAR(2, VAR_EDNS_CLIENT_STRING) }
532 edns-client-string-opcode{COLON} { YDVAR(1, VAR_EDNS_CLIENT_STRING_OPCODE) }
530533 <INITIAL,val>{NEWLINE} { LEXOUT(("NL\n")); cfg_parser->line++; }
531534
532535 /* Quoted strings. Strip leading and ending quotes */
278278 VAR_HTTP_QUERY_BUFFER_SIZE = 400,
279279 VAR_HTTP_RESPONSE_BUFFER_SIZE = 401,
280280 VAR_HTTP_NODELAY = 402,
281 VAR_STUB_FIRST = 403,
282 VAR_MINIMAL_RESPONSES = 404,
283 VAR_RRSET_ROUNDROBIN = 405,
284 VAR_MAX_UDP_SIZE = 406,
285 VAR_DELAY_CLOSE = 407,
286 VAR_UNBLOCK_LAN_ZONES = 408,
287 VAR_INSECURE_LAN_ZONES = 409,
288 VAR_INFRA_CACHE_MIN_RTT = 410,
289 VAR_DNS64_PREFIX = 411,
290 VAR_DNS64_SYNTHALL = 412,
291 VAR_DNS64_IGNORE_AAAA = 413,
292 VAR_DNSTAP = 414,
293 VAR_DNSTAP_ENABLE = 415,
294 VAR_DNSTAP_SOCKET_PATH = 416,
295 VAR_DNSTAP_IP = 417,
296 VAR_DNSTAP_TLS = 418,
297 VAR_DNSTAP_TLS_SERVER_NAME = 419,
298 VAR_DNSTAP_TLS_CERT_BUNDLE = 420,
299 VAR_DNSTAP_TLS_CLIENT_KEY_FILE = 421,
300 VAR_DNSTAP_TLS_CLIENT_CERT_FILE = 422,
301 VAR_DNSTAP_SEND_IDENTITY = 423,
302 VAR_DNSTAP_SEND_VERSION = 424,
303 VAR_DNSTAP_BIDIRECTIONAL = 425,
304 VAR_DNSTAP_IDENTITY = 426,
305 VAR_DNSTAP_VERSION = 427,
306 VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES = 428,
307 VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES = 429,
308 VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES = 430,
309 VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES = 431,
310 VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES = 432,
311 VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES = 433,
312 VAR_RESPONSE_IP_TAG = 434,
313 VAR_RESPONSE_IP = 435,
314 VAR_RESPONSE_IP_DATA = 436,
315 VAR_HARDEN_ALGO_DOWNGRADE = 437,
316 VAR_IP_TRANSPARENT = 438,
317 VAR_IP_DSCP = 439,
318 VAR_DISABLE_DNSSEC_LAME_CHECK = 440,
319 VAR_IP_RATELIMIT = 441,
320 VAR_IP_RATELIMIT_SLABS = 442,
321 VAR_IP_RATELIMIT_SIZE = 443,
322 VAR_RATELIMIT = 444,
323 VAR_RATELIMIT_SLABS = 445,
324 VAR_RATELIMIT_SIZE = 446,
325 VAR_RATELIMIT_FOR_DOMAIN = 447,
326 VAR_RATELIMIT_BELOW_DOMAIN = 448,
327 VAR_IP_RATELIMIT_FACTOR = 449,
328 VAR_RATELIMIT_FACTOR = 450,
329 VAR_SEND_CLIENT_SUBNET = 451,
330 VAR_CLIENT_SUBNET_ZONE = 452,
331 VAR_CLIENT_SUBNET_ALWAYS_FORWARD = 453,
332 VAR_CLIENT_SUBNET_OPCODE = 454,
333 VAR_MAX_CLIENT_SUBNET_IPV4 = 455,
334 VAR_MAX_CLIENT_SUBNET_IPV6 = 456,
335 VAR_MIN_CLIENT_SUBNET_IPV4 = 457,
336 VAR_MIN_CLIENT_SUBNET_IPV6 = 458,
337 VAR_MAX_ECS_TREE_SIZE_IPV4 = 459,
338 VAR_MAX_ECS_TREE_SIZE_IPV6 = 460,
339 VAR_CAPS_WHITELIST = 461,
340 VAR_CACHE_MAX_NEGATIVE_TTL = 462,
341 VAR_PERMIT_SMALL_HOLDDOWN = 463,
342 VAR_QNAME_MINIMISATION = 464,
343 VAR_QNAME_MINIMISATION_STRICT = 465,
344 VAR_IP_FREEBIND = 466,
345 VAR_DEFINE_TAG = 467,
346 VAR_LOCAL_ZONE_TAG = 468,
347 VAR_ACCESS_CONTROL_TAG = 469,
348 VAR_LOCAL_ZONE_OVERRIDE = 470,
349 VAR_ACCESS_CONTROL_TAG_ACTION = 471,
350 VAR_ACCESS_CONTROL_TAG_DATA = 472,
351 VAR_VIEW = 473,
352 VAR_ACCESS_CONTROL_VIEW = 474,
353 VAR_VIEW_FIRST = 475,
354 VAR_SERVE_EXPIRED = 476,
355 VAR_SERVE_EXPIRED_TTL = 477,
356 VAR_SERVE_EXPIRED_TTL_RESET = 478,
357 VAR_SERVE_EXPIRED_REPLY_TTL = 479,
358 VAR_SERVE_EXPIRED_CLIENT_TIMEOUT = 480,
359 VAR_FAKE_DSA = 481,
360 VAR_FAKE_SHA1 = 482,
361 VAR_LOG_IDENTITY = 483,
362 VAR_HIDE_TRUSTANCHOR = 484,
363 VAR_TRUST_ANCHOR_SIGNALING = 485,
364 VAR_AGGRESSIVE_NSEC = 486,
365 VAR_USE_SYSTEMD = 487,
366 VAR_SHM_ENABLE = 488,
367 VAR_SHM_KEY = 489,
368 VAR_ROOT_KEY_SENTINEL = 490,
369 VAR_DNSCRYPT = 491,
370 VAR_DNSCRYPT_ENABLE = 492,
371 VAR_DNSCRYPT_PORT = 493,
372 VAR_DNSCRYPT_PROVIDER = 494,
373 VAR_DNSCRYPT_SECRET_KEY = 495,
374 VAR_DNSCRYPT_PROVIDER_CERT = 496,
375 VAR_DNSCRYPT_PROVIDER_CERT_ROTATED = 497,
376 VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 498,
377 VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 499,
378 VAR_DNSCRYPT_NONCE_CACHE_SIZE = 500,
379 VAR_DNSCRYPT_NONCE_CACHE_SLABS = 501,
380 VAR_IPSECMOD_ENABLED = 502,
381 VAR_IPSECMOD_HOOK = 503,
382 VAR_IPSECMOD_IGNORE_BOGUS = 504,
383 VAR_IPSECMOD_MAX_TTL = 505,
384 VAR_IPSECMOD_WHITELIST = 506,
385 VAR_IPSECMOD_STRICT = 507,
386 VAR_CACHEDB = 508,
387 VAR_CACHEDB_BACKEND = 509,
388 VAR_CACHEDB_SECRETSEED = 510,
389 VAR_CACHEDB_REDISHOST = 511,
390 VAR_CACHEDB_REDISPORT = 512,
391 VAR_CACHEDB_REDISTIMEOUT = 513,
392 VAR_CACHEDB_REDISEXPIRERECORDS = 514,
393 VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 515,
394 VAR_FOR_UPSTREAM = 516,
395 VAR_AUTH_ZONE = 517,
396 VAR_ZONEFILE = 518,
397 VAR_MASTER = 519,
398 VAR_URL = 520,
399 VAR_FOR_DOWNSTREAM = 521,
400 VAR_FALLBACK_ENABLED = 522,
401 VAR_TLS_ADDITIONAL_PORT = 523,
402 VAR_LOW_RTT = 524,
403 VAR_LOW_RTT_PERMIL = 525,
404 VAR_FAST_SERVER_PERMIL = 526,
405 VAR_FAST_SERVER_NUM = 527,
406 VAR_ALLOW_NOTIFY = 528,
407 VAR_TLS_WIN_CERT = 529,
408 VAR_TCP_CONNECTION_LIMIT = 530,
409 VAR_FORWARD_NO_CACHE = 531,
410 VAR_STUB_NO_CACHE = 532,
411 VAR_LOG_SERVFAIL = 533,
412 VAR_DENY_ANY = 534,
413 VAR_UNKNOWN_SERVER_TIME_LIMIT = 535,
414 VAR_LOG_TAG_QUERYREPLY = 536,
415 VAR_STREAM_WAIT_SIZE = 537,
416 VAR_TLS_CIPHERS = 538,
417 VAR_TLS_CIPHERSUITES = 539,
418 VAR_TLS_USE_SNI = 540,
419 VAR_IPSET = 541,
420 VAR_IPSET_NAME_V4 = 542,
421 VAR_IPSET_NAME_V6 = 543,
422 VAR_TLS_SESSION_TICKET_KEYS = 544,
423 VAR_RPZ = 545,
424 VAR_TAGS = 546,
425 VAR_RPZ_ACTION_OVERRIDE = 547,
426 VAR_RPZ_CNAME_OVERRIDE = 548,
427 VAR_RPZ_LOG = 549,
428 VAR_RPZ_LOG_NAME = 550,
429 VAR_DYNLIB = 551,
430 VAR_DYNLIB_FILE = 552,
431 VAR_EDNS_CLIENT_TAG = 553,
432 VAR_EDNS_CLIENT_TAG_OPCODE = 554
281 VAR_HTTP_NOTLS_DOWNSTREAM = 403,
282 VAR_STUB_FIRST = 404,
283 VAR_MINIMAL_RESPONSES = 405,
284 VAR_RRSET_ROUNDROBIN = 406,
285 VAR_MAX_UDP_SIZE = 407,
286 VAR_DELAY_CLOSE = 408,
287 VAR_UDP_CONNECT = 409,
288 VAR_UNBLOCK_LAN_ZONES = 410,
289 VAR_INSECURE_LAN_ZONES = 411,
290 VAR_INFRA_CACHE_MIN_RTT = 412,
291 VAR_INFRA_KEEP_PROBING = 413,
292 VAR_DNS64_PREFIX = 414,
293 VAR_DNS64_SYNTHALL = 415,
294 VAR_DNS64_IGNORE_AAAA = 416,
295 VAR_DNSTAP = 417,
296 VAR_DNSTAP_ENABLE = 418,
297 VAR_DNSTAP_SOCKET_PATH = 419,
298 VAR_DNSTAP_IP = 420,
299 VAR_DNSTAP_TLS = 421,
300 VAR_DNSTAP_TLS_SERVER_NAME = 422,
301 VAR_DNSTAP_TLS_CERT_BUNDLE = 423,
302 VAR_DNSTAP_TLS_CLIENT_KEY_FILE = 424,
303 VAR_DNSTAP_TLS_CLIENT_CERT_FILE = 425,
304 VAR_DNSTAP_SEND_IDENTITY = 426,
305 VAR_DNSTAP_SEND_VERSION = 427,
306 VAR_DNSTAP_BIDIRECTIONAL = 428,
307 VAR_DNSTAP_IDENTITY = 429,
308 VAR_DNSTAP_VERSION = 430,
309 VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES = 431,
310 VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES = 432,
311 VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES = 433,
312 VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES = 434,
313 VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES = 435,
314 VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES = 436,
315 VAR_RESPONSE_IP_TAG = 437,
316 VAR_RESPONSE_IP = 438,
317 VAR_RESPONSE_IP_DATA = 439,
318 VAR_HARDEN_ALGO_DOWNGRADE = 440,
319 VAR_IP_TRANSPARENT = 441,
320 VAR_IP_DSCP = 442,
321 VAR_DISABLE_DNSSEC_LAME_CHECK = 443,
322 VAR_IP_RATELIMIT = 444,
323 VAR_IP_RATELIMIT_SLABS = 445,
324 VAR_IP_RATELIMIT_SIZE = 446,
325 VAR_RATELIMIT = 447,
326 VAR_RATELIMIT_SLABS = 448,
327 VAR_RATELIMIT_SIZE = 449,
328 VAR_RATELIMIT_FOR_DOMAIN = 450,
329 VAR_RATELIMIT_BELOW_DOMAIN = 451,
330 VAR_IP_RATELIMIT_FACTOR = 452,
331 VAR_RATELIMIT_FACTOR = 453,
332 VAR_SEND_CLIENT_SUBNET = 454,
333 VAR_CLIENT_SUBNET_ZONE = 455,
334 VAR_CLIENT_SUBNET_ALWAYS_FORWARD = 456,
335 VAR_CLIENT_SUBNET_OPCODE = 457,
336 VAR_MAX_CLIENT_SUBNET_IPV4 = 458,
337 VAR_MAX_CLIENT_SUBNET_IPV6 = 459,
338 VAR_MIN_CLIENT_SUBNET_IPV4 = 460,
339 VAR_MIN_CLIENT_SUBNET_IPV6 = 461,
340 VAR_MAX_ECS_TREE_SIZE_IPV4 = 462,
341 VAR_MAX_ECS_TREE_SIZE_IPV6 = 463,
342 VAR_CAPS_WHITELIST = 464,
343 VAR_CACHE_MAX_NEGATIVE_TTL = 465,
344 VAR_PERMIT_SMALL_HOLDDOWN = 466,
345 VAR_QNAME_MINIMISATION = 467,
346 VAR_QNAME_MINIMISATION_STRICT = 468,
347 VAR_IP_FREEBIND = 469,
348 VAR_DEFINE_TAG = 470,
349 VAR_LOCAL_ZONE_TAG = 471,
350 VAR_ACCESS_CONTROL_TAG = 472,
351 VAR_LOCAL_ZONE_OVERRIDE = 473,
352 VAR_ACCESS_CONTROL_TAG_ACTION = 474,
353 VAR_ACCESS_CONTROL_TAG_DATA = 475,
354 VAR_VIEW = 476,
355 VAR_ACCESS_CONTROL_VIEW = 477,
356 VAR_VIEW_FIRST = 478,
357 VAR_SERVE_EXPIRED = 479,
358 VAR_SERVE_EXPIRED_TTL = 480,
359 VAR_SERVE_EXPIRED_TTL_RESET = 481,
360 VAR_SERVE_EXPIRED_REPLY_TTL = 482,
361 VAR_SERVE_EXPIRED_CLIENT_TIMEOUT = 483,
362 VAR_FAKE_DSA = 484,
363 VAR_FAKE_SHA1 = 485,
364 VAR_LOG_IDENTITY = 486,
365 VAR_HIDE_TRUSTANCHOR = 487,
366 VAR_TRUST_ANCHOR_SIGNALING = 488,
367 VAR_AGGRESSIVE_NSEC = 489,
368 VAR_USE_SYSTEMD = 490,
369 VAR_SHM_ENABLE = 491,
370 VAR_SHM_KEY = 492,
371 VAR_ROOT_KEY_SENTINEL = 493,
372 VAR_DNSCRYPT = 494,
373 VAR_DNSCRYPT_ENABLE = 495,
374 VAR_DNSCRYPT_PORT = 496,
375 VAR_DNSCRYPT_PROVIDER = 497,
376 VAR_DNSCRYPT_SECRET_KEY = 498,
377 VAR_DNSCRYPT_PROVIDER_CERT = 499,
378 VAR_DNSCRYPT_PROVIDER_CERT_ROTATED = 500,
379 VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 501,
380 VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 502,
381 VAR_DNSCRYPT_NONCE_CACHE_SIZE = 503,
382 VAR_DNSCRYPT_NONCE_CACHE_SLABS = 504,
383 VAR_IPSECMOD_ENABLED = 505,
384 VAR_IPSECMOD_HOOK = 506,
385 VAR_IPSECMOD_IGNORE_BOGUS = 507,
386 VAR_IPSECMOD_MAX_TTL = 508,
387 VAR_IPSECMOD_WHITELIST = 509,
388 VAR_IPSECMOD_STRICT = 510,
389 VAR_CACHEDB = 511,
390 VAR_CACHEDB_BACKEND = 512,
391 VAR_CACHEDB_SECRETSEED = 513,
392 VAR_CACHEDB_REDISHOST = 514,
393 VAR_CACHEDB_REDISPORT = 515,
394 VAR_CACHEDB_REDISTIMEOUT = 516,
395 VAR_CACHEDB_REDISEXPIRERECORDS = 517,
396 VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 518,
397 VAR_FOR_UPSTREAM = 519,
398 VAR_AUTH_ZONE = 520,
399 VAR_ZONEFILE = 521,
400 VAR_MASTER = 522,
401 VAR_URL = 523,
402 VAR_FOR_DOWNSTREAM = 524,
403 VAR_FALLBACK_ENABLED = 525,
404 VAR_TLS_ADDITIONAL_PORT = 526,
405 VAR_LOW_RTT = 527,
406 VAR_LOW_RTT_PERMIL = 528,
407 VAR_FAST_SERVER_PERMIL = 529,
408 VAR_FAST_SERVER_NUM = 530,
409 VAR_ALLOW_NOTIFY = 531,
410 VAR_TLS_WIN_CERT = 532,
411 VAR_TCP_CONNECTION_LIMIT = 533,
412 VAR_FORWARD_NO_CACHE = 534,
413 VAR_STUB_NO_CACHE = 535,
414 VAR_LOG_SERVFAIL = 536,
415 VAR_DENY_ANY = 537,
416 VAR_UNKNOWN_SERVER_TIME_LIMIT = 538,
417 VAR_LOG_TAG_QUERYREPLY = 539,
418 VAR_STREAM_WAIT_SIZE = 540,
419 VAR_TLS_CIPHERS = 541,
420 VAR_TLS_CIPHERSUITES = 542,
421 VAR_TLS_USE_SNI = 543,
422 VAR_IPSET = 544,
423 VAR_IPSET_NAME_V4 = 545,
424 VAR_IPSET_NAME_V6 = 546,
425 VAR_TLS_SESSION_TICKET_KEYS = 547,
426 VAR_RPZ = 548,
427 VAR_TAGS = 549,
428 VAR_RPZ_ACTION_OVERRIDE = 550,
429 VAR_RPZ_CNAME_OVERRIDE = 551,
430 VAR_RPZ_LOG = 552,
431 VAR_RPZ_LOG_NAME = 553,
432 VAR_DYNLIB = 554,
433 VAR_DYNLIB_FILE = 555,
434 VAR_EDNS_CLIENT_STRING = 556,
435 VAR_EDNS_CLIENT_STRING_OPCODE = 557
433436 };
434437 #endif
435438 /* Tokens. */
578581 #define VAR_HTTP_QUERY_BUFFER_SIZE 400
579582 #define VAR_HTTP_RESPONSE_BUFFER_SIZE 401
580583 #define VAR_HTTP_NODELAY 402
581 #define VAR_STUB_FIRST 403
582 #define VAR_MINIMAL_RESPONSES 404
583 #define VAR_RRSET_ROUNDROBIN 405
584 #define VAR_MAX_UDP_SIZE 406
585 #define VAR_DELAY_CLOSE 407
586 #define VAR_UNBLOCK_LAN_ZONES 408
587 #define VAR_INSECURE_LAN_ZONES 409
588 #define VAR_INFRA_CACHE_MIN_RTT 410
589 #define VAR_DNS64_PREFIX 411
590 #define VAR_DNS64_SYNTHALL 412
591 #define VAR_DNS64_IGNORE_AAAA 413
592 #define VAR_DNSTAP 414
593 #define VAR_DNSTAP_ENABLE 415
594 #define VAR_DNSTAP_SOCKET_PATH 416
595 #define VAR_DNSTAP_IP 417
596 #define VAR_DNSTAP_TLS 418
597 #define VAR_DNSTAP_TLS_SERVER_NAME 419
598 #define VAR_DNSTAP_TLS_CERT_BUNDLE 420
599 #define VAR_DNSTAP_TLS_CLIENT_KEY_FILE 421
600 #define VAR_DNSTAP_TLS_CLIENT_CERT_FILE 422
601 #define VAR_DNSTAP_SEND_IDENTITY 423
602 #define VAR_DNSTAP_SEND_VERSION 424
603 #define VAR_DNSTAP_BIDIRECTIONAL 425
604 #define VAR_DNSTAP_IDENTITY 426
605 #define VAR_DNSTAP_VERSION 427
606 #define VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES 428
607 #define VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES 429
608 #define VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES 430
609 #define VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES 431
610 #define VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES 432
611 #define VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES 433
612 #define VAR_RESPONSE_IP_TAG 434
613 #define VAR_RESPONSE_IP 435
614 #define VAR_RESPONSE_IP_DATA 436
615 #define VAR_HARDEN_ALGO_DOWNGRADE 437
616 #define VAR_IP_TRANSPARENT 438
617 #define VAR_IP_DSCP 439
618 #define VAR_DISABLE_DNSSEC_LAME_CHECK 440
619 #define VAR_IP_RATELIMIT 441
620 #define VAR_IP_RATELIMIT_SLABS 442
621 #define VAR_IP_RATELIMIT_SIZE 443
622 #define VAR_RATELIMIT 444
623 #define VAR_RATELIMIT_SLABS 445
624 #define VAR_RATELIMIT_SIZE 446
625 #define VAR_RATELIMIT_FOR_DOMAIN 447
626 #define VAR_RATELIMIT_BELOW_DOMAIN 448
627 #define VAR_IP_RATELIMIT_FACTOR 449
628 #define VAR_RATELIMIT_FACTOR 450
629 #define VAR_SEND_CLIENT_SUBNET 451
630 #define VAR_CLIENT_SUBNET_ZONE 452
631 #define VAR_CLIENT_SUBNET_ALWAYS_FORWARD 453
632 #define VAR_CLIENT_SUBNET_OPCODE 454
633 #define VAR_MAX_CLIENT_SUBNET_IPV4 455
634 #define VAR_MAX_CLIENT_SUBNET_IPV6 456
635 #define VAR_MIN_CLIENT_SUBNET_IPV4 457
636 #define VAR_MIN_CLIENT_SUBNET_IPV6 458
637 #define VAR_MAX_ECS_TREE_SIZE_IPV4 459
638 #define VAR_MAX_ECS_TREE_SIZE_IPV6 460
639 #define VAR_CAPS_WHITELIST 461
640 #define VAR_CACHE_MAX_NEGATIVE_TTL 462
641 #define VAR_PERMIT_SMALL_HOLDDOWN 463
642 #define VAR_QNAME_MINIMISATION 464
643 #define VAR_QNAME_MINIMISATION_STRICT 465
644 #define VAR_IP_FREEBIND 466
645 #define VAR_DEFINE_TAG 467
646 #define VAR_LOCAL_ZONE_TAG 468
647 #define VAR_ACCESS_CONTROL_TAG 469
648 #define VAR_LOCAL_ZONE_OVERRIDE 470
649 #define VAR_ACCESS_CONTROL_TAG_ACTION 471
650 #define VAR_ACCESS_CONTROL_TAG_DATA 472
651 #define VAR_VIEW 473
652 #define VAR_ACCESS_CONTROL_VIEW 474
653 #define VAR_VIEW_FIRST 475
654 #define VAR_SERVE_EXPIRED 476
655 #define VAR_SERVE_EXPIRED_TTL 477
656 #define VAR_SERVE_EXPIRED_TTL_RESET 478
657 #define VAR_SERVE_EXPIRED_REPLY_TTL 479
658 #define VAR_SERVE_EXPIRED_CLIENT_TIMEOUT 480
659 #define VAR_FAKE_DSA 481
660 #define VAR_FAKE_SHA1 482
661 #define VAR_LOG_IDENTITY 483
662 #define VAR_HIDE_TRUSTANCHOR 484
663 #define VAR_TRUST_ANCHOR_SIGNALING 485
664 #define VAR_AGGRESSIVE_NSEC 486
665 #define VAR_USE_SYSTEMD 487
666 #define VAR_SHM_ENABLE 488
667 #define VAR_SHM_KEY 489
668 #define VAR_ROOT_KEY_SENTINEL 490
669 #define VAR_DNSCRYPT 491
670 #define VAR_DNSCRYPT_ENABLE 492
671 #define VAR_DNSCRYPT_PORT 493
672 #define VAR_DNSCRYPT_PROVIDER 494
673 #define VAR_DNSCRYPT_SECRET_KEY 495
674 #define VAR_DNSCRYPT_PROVIDER_CERT 496
675 #define VAR_DNSCRYPT_PROVIDER_CERT_ROTATED 497
676 #define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE 498
677 #define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS 499
678 #define VAR_DNSCRYPT_NONCE_CACHE_SIZE 500
679 #define VAR_DNSCRYPT_NONCE_CACHE_SLABS 501
680 #define VAR_IPSECMOD_ENABLED 502
681 #define VAR_IPSECMOD_HOOK 503
682 #define VAR_IPSECMOD_IGNORE_BOGUS 504
683 #define VAR_IPSECMOD_MAX_TTL 505
684 #define VAR_IPSECMOD_WHITELIST 506
685 #define VAR_IPSECMOD_STRICT 507
686 #define VAR_CACHEDB 508
687 #define VAR_CACHEDB_BACKEND 509
688 #define VAR_CACHEDB_SECRETSEED 510
689 #define VAR_CACHEDB_REDISHOST 511
690 #define VAR_CACHEDB_REDISPORT 512
691 #define VAR_CACHEDB_REDISTIMEOUT 513
692 #define VAR_CACHEDB_REDISEXPIRERECORDS 514
693 #define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 515
694 #define VAR_FOR_UPSTREAM 516
695 #define VAR_AUTH_ZONE 517
696 #define VAR_ZONEFILE 518
697 #define VAR_MASTER 519
698 #define VAR_URL 520
699 #define VAR_FOR_DOWNSTREAM 521
700 #define VAR_FALLBACK_ENABLED 522
701 #define VAR_TLS_ADDITIONAL_PORT 523
702 #define VAR_LOW_RTT 524
703 #define VAR_LOW_RTT_PERMIL 525
704 #define VAR_FAST_SERVER_PERMIL 526
705 #define VAR_FAST_SERVER_NUM 527
706 #define VAR_ALLOW_NOTIFY 528
707 #define VAR_TLS_WIN_CERT 529
708 #define VAR_TCP_CONNECTION_LIMIT 530
709 #define VAR_FORWARD_NO_CACHE 531
710 #define VAR_STUB_NO_CACHE 532
711 #define VAR_LOG_SERVFAIL 533
712 #define VAR_DENY_ANY 534
713 #define VAR_UNKNOWN_SERVER_TIME_LIMIT 535
714 #define VAR_LOG_TAG_QUERYREPLY 536
715 #define VAR_STREAM_WAIT_SIZE 537
716 #define VAR_TLS_CIPHERS 538
717 #define VAR_TLS_CIPHERSUITES 539
718 #define VAR_TLS_USE_SNI 540
719 #define VAR_IPSET 541
720 #define VAR_IPSET_NAME_V4 542
721 #define VAR_IPSET_NAME_V6 543
722 #define VAR_TLS_SESSION_TICKET_KEYS 544
723 #define VAR_RPZ 545
724 #define VAR_TAGS 546
725 #define VAR_RPZ_ACTION_OVERRIDE 547
726 #define VAR_RPZ_CNAME_OVERRIDE 548
727 #define VAR_RPZ_LOG 549
728 #define VAR_RPZ_LOG_NAME 550
729 #define VAR_DYNLIB 551
730 #define VAR_DYNLIB_FILE 552
731 #define VAR_EDNS_CLIENT_TAG 553
732 #define VAR_EDNS_CLIENT_TAG_OPCODE 554
584 #define VAR_HTTP_NOTLS_DOWNSTREAM 403
585 #define VAR_STUB_FIRST 404
586 #define VAR_MINIMAL_RESPONSES 405
587 #define VAR_RRSET_ROUNDROBIN 406
588 #define VAR_MAX_UDP_SIZE 407
589 #define VAR_DELAY_CLOSE 408
590 #define VAR_UDP_CONNECT 409
591 #define VAR_UNBLOCK_LAN_ZONES 410
592 #define VAR_INSECURE_LAN_ZONES 411
593 #define VAR_INFRA_CACHE_MIN_RTT 412
594 #define VAR_INFRA_KEEP_PROBING 413
595 #define VAR_DNS64_PREFIX 414
596 #define VAR_DNS64_SYNTHALL 415
597 #define VAR_DNS64_IGNORE_AAAA 416
598 #define VAR_DNSTAP 417
599 #define VAR_DNSTAP_ENABLE 418
600 #define VAR_DNSTAP_SOCKET_PATH 419
601 #define VAR_DNSTAP_IP 420
602 #define VAR_DNSTAP_TLS 421
603 #define VAR_DNSTAP_TLS_SERVER_NAME 422
604 #define VAR_DNSTAP_TLS_CERT_BUNDLE 423
605 #define VAR_DNSTAP_TLS_CLIENT_KEY_FILE 424
606 #define VAR_DNSTAP_TLS_CLIENT_CERT_FILE 425
607 #define VAR_DNSTAP_SEND_IDENTITY 426
608 #define VAR_DNSTAP_SEND_VERSION 427
609 #define VAR_DNSTAP_BIDIRECTIONAL 428
610 #define VAR_DNSTAP_IDENTITY 429
611 #define VAR_DNSTAP_VERSION 430
612 #define VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES 431
613 #define VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES 432
614 #define VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES 433
615 #define VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES 434
616 #define VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES 435
617 #define VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES 436
618 #define VAR_RESPONSE_IP_TAG 437
619 #define VAR_RESPONSE_IP 438
620 #define VAR_RESPONSE_IP_DATA 439
621 #define VAR_HARDEN_ALGO_DOWNGRADE 440
622 #define VAR_IP_TRANSPARENT 441
623 #define VAR_IP_DSCP 442
624 #define VAR_DISABLE_DNSSEC_LAME_CHECK 443
625 #define VAR_IP_RATELIMIT 444
626 #define VAR_IP_RATELIMIT_SLABS 445
627 #define VAR_IP_RATELIMIT_SIZE 446
628 #define VAR_RATELIMIT 447
629 #define VAR_RATELIMIT_SLABS 448
630 #define VAR_RATELIMIT_SIZE 449
631 #define VAR_RATELIMIT_FOR_DOMAIN 450
632 #define VAR_RATELIMIT_BELOW_DOMAIN 451
633 #define VAR_IP_RATELIMIT_FACTOR 452
634 #define VAR_RATELIMIT_FACTOR 453
635 #define VAR_SEND_CLIENT_SUBNET 454
636 #define VAR_CLIENT_SUBNET_ZONE 455
637 #define VAR_CLIENT_SUBNET_ALWAYS_FORWARD 456
638 #define VAR_CLIENT_SUBNET_OPCODE 457
639 #define VAR_MAX_CLIENT_SUBNET_IPV4 458
640 #define VAR_MAX_CLIENT_SUBNET_IPV6 459
641 #define VAR_MIN_CLIENT_SUBNET_IPV4 460
642 #define VAR_MIN_CLIENT_SUBNET_IPV6 461
643 #define VAR_MAX_ECS_TREE_SIZE_IPV4 462
644 #define VAR_MAX_ECS_TREE_SIZE_IPV6 463
645 #define VAR_CAPS_WHITELIST 464
646 #define VAR_CACHE_MAX_NEGATIVE_TTL 465
647 #define VAR_PERMIT_SMALL_HOLDDOWN 466
648 #define VAR_QNAME_MINIMISATION 467
649 #define VAR_QNAME_MINIMISATION_STRICT 468
650 #define VAR_IP_FREEBIND 469
651 #define VAR_DEFINE_TAG 470
652 #define VAR_LOCAL_ZONE_TAG 471
653 #define VAR_ACCESS_CONTROL_TAG 472
654 #define VAR_LOCAL_ZONE_OVERRIDE 473
655 #define VAR_ACCESS_CONTROL_TAG_ACTION 474
656 #define VAR_ACCESS_CONTROL_TAG_DATA 475
657 #define VAR_VIEW 476
658 #define VAR_ACCESS_CONTROL_VIEW 477
659 #define VAR_VIEW_FIRST 478
660 #define VAR_SERVE_EXPIRED 479
661 #define VAR_SERVE_EXPIRED_TTL 480
662 #define VAR_SERVE_EXPIRED_TTL_RESET 481
663 #define VAR_SERVE_EXPIRED_REPLY_TTL 482
664 #define VAR_SERVE_EXPIRED_CLIENT_TIMEOUT 483
665 #define VAR_FAKE_DSA 484
666 #define VAR_FAKE_SHA1 485
667 #define VAR_LOG_IDENTITY 486
668 #define VAR_HIDE_TRUSTANCHOR 487
669 #define VAR_TRUST_ANCHOR_SIGNALING 488
670 #define VAR_AGGRESSIVE_NSEC 489
671 #define VAR_USE_SYSTEMD 490
672 #define VAR_SHM_ENABLE 491
673 #define VAR_SHM_KEY 492
674 #define VAR_ROOT_KEY_SENTINEL 493
675 #define VAR_DNSCRYPT 494
676 #define VAR_DNSCRYPT_ENABLE 495
677 #define VAR_DNSCRYPT_PORT 496
678 #define VAR_DNSCRYPT_PROVIDER 497
679 #define VAR_DNSCRYPT_SECRET_KEY 498
680 #define VAR_DNSCRYPT_PROVIDER_CERT 499
681 #define VAR_DNSCRYPT_PROVIDER_CERT_ROTATED 500
682 #define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE 501
683 #define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS 502
684 #define VAR_DNSCRYPT_NONCE_CACHE_SIZE 503
685 #define VAR_DNSCRYPT_NONCE_CACHE_SLABS 504
686 #define VAR_IPSECMOD_ENABLED 505
687 #define VAR_IPSECMOD_HOOK 506
688 #define VAR_IPSECMOD_IGNORE_BOGUS 507
689 #define VAR_IPSECMOD_MAX_TTL 508
690 #define VAR_IPSECMOD_WHITELIST 509
691 #define VAR_IPSECMOD_STRICT 510
692 #define VAR_CACHEDB 511
693 #define VAR_CACHEDB_BACKEND 512
694 #define VAR_CACHEDB_SECRETSEED 513
695 #define VAR_CACHEDB_REDISHOST 514
696 #define VAR_CACHEDB_REDISPORT 515
697 #define VAR_CACHEDB_REDISTIMEOUT 516
698 #define VAR_CACHEDB_REDISEXPIRERECORDS 517
699 #define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 518
700 #define VAR_FOR_UPSTREAM 519
701 #define VAR_AUTH_ZONE 520
702 #define VAR_ZONEFILE 521
703 #define VAR_MASTER 522
704 #define VAR_URL 523
705 #define VAR_FOR_DOWNSTREAM 524
706 #define VAR_FALLBACK_ENABLED 525
707 #define VAR_TLS_ADDITIONAL_PORT 526
708 #define VAR_LOW_RTT 527
709 #define VAR_LOW_RTT_PERMIL 528
710 #define VAR_FAST_SERVER_PERMIL 529
711 #define VAR_FAST_SERVER_NUM 530
712 #define VAR_ALLOW_NOTIFY 531
713 #define VAR_TLS_WIN_CERT 532
714 #define VAR_TCP_CONNECTION_LIMIT 533
715 #define VAR_FORWARD_NO_CACHE 534
716 #define VAR_STUB_NO_CACHE 535
717 #define VAR_LOG_SERVFAIL 536
718 #define VAR_DENY_ANY 537
719 #define VAR_UNKNOWN_SERVER_TIME_LIMIT 538
720 #define VAR_LOG_TAG_QUERYREPLY 539
721 #define VAR_STREAM_WAIT_SIZE 540
722 #define VAR_TLS_CIPHERS 541
723 #define VAR_TLS_CIPHERSUITES 542
724 #define VAR_TLS_USE_SNI 543
725 #define VAR_IPSET 544
726 #define VAR_IPSET_NAME_V4 545
727 #define VAR_IPSET_NAME_V6 546
728 #define VAR_TLS_SESSION_TICKET_KEYS 547
729 #define VAR_RPZ 548
730 #define VAR_TAGS 549
731 #define VAR_RPZ_ACTION_OVERRIDE 550
732 #define VAR_RPZ_CNAME_OVERRIDE 551
733 #define VAR_RPZ_LOG 552
734 #define VAR_RPZ_LOG_NAME 553
735 #define VAR_DYNLIB 554
736 #define VAR_DYNLIB_FILE 555
737 #define VAR_EDNS_CLIENT_STRING 556
738 #define VAR_EDNS_CLIENT_STRING_OPCODE 557
733739
734740 /* Value type. */
735741 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
739745
740746 char* str;
741747
742 #line 744 "util/configparser.c"
748 #line 750 "util/configparser.c"
743749
744750 };
745751 typedef union YYSTYPE YYSTYPE;
989995 /* YYFINAL -- State number of the termination state. */
990996 #define YYFINAL 2
991997 /* YYLAST -- Last index in YYTABLE. */
992 #define YYLAST 635
998 #define YYLAST 641
993999
9941000 /* YYNTOKENS -- Number of terminals. */
995 #define YYNTOKENS 300
1001 #define YYNTOKENS 303
9961002 /* YYNNTS -- Number of nonterminals. */
997 #define YYNNTS 325
1003 #define YYNNTS 328
9981004 /* YYNRULES -- Number of rules. */
999 #define YYNRULES 626
1005 #define YYNRULES 632
10001006 /* YYNSTATES -- Number of states. */
1001 #define YYNSTATES 930
1007 #define YYNSTATES 939
10021008
10031009 #define YYUNDEFTOK 2
1004 #define YYMAXUTOK 554
1010 #define YYMAXUTOK 557
10051011
10061012 /* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM
10071013 as returned by yylex, with out-of-bounds checking. */
10671073 265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
10681074 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
10691075 285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
1070 295, 296, 297, 298, 299
1076 295, 296, 297, 298, 299, 300, 301, 302
10711077 };
10721078
10731079 #if YYDEBUG
10741080 /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */
10751081 static const yytype_uint16 yyrline[] =
10761082 {
1077 0, 184, 184, 184, 185, 185, 186, 186, 187, 187,
1078 187, 188, 188, 189, 189, 190, 190, 191, 193, 199,
1079 204, 205, 206, 206, 206, 207, 207, 208, 208, 208,
1080 209, 209, 210, 210, 210, 211, 211, 212, 212, 212,
1081 213, 213, 213, 214, 214, 215, 215, 216, 216, 217,
1082 217, 218, 218, 219, 219, 220, 220, 221, 221, 222,
1083 222, 222, 223, 223, 223, 224, 224, 224, 225, 225,
1084 226, 226, 227, 227, 228, 228, 229, 229, 229, 230,
1085 230, 231, 231, 232, 232, 232, 233, 233, 234, 234,
1086 235, 235, 236, 236, 236, 237, 237, 238, 238, 239,
1087 239, 240, 240, 241, 241, 242, 242, 242, 243, 243,
1088 244, 244, 244, 245, 245, 245, 246, 246, 246, 247,
1089 247, 247, 247, 248, 249, 249, 249, 250, 250, 250,
1090 251, 251, 252, 253, 253, 253, 254, 254, 255, 255,
1091 256, 256, 256, 257, 257, 258, 258, 258, 259, 260,
1092 260, 261, 261, 262, 263, 263, 264, 264, 265, 265,
1093 266, 267, 267, 268, 268, 269, 269, 270, 270, 271,
1094 271, 272, 272, 272, 273, 273, 274, 274, 275, 275,
1095 276, 276, 277, 277, 278, 278, 279, 279, 279, 280,
1096 280, 280, 281, 281, 281, 282, 282, 283, 284, 284,
1097 285, 285, 286, 286, 287, 287, 288, 288, 288, 289,
1098 289, 289, 290, 290, 290, 291, 291, 292, 292, 293,
1099 293, 294, 294, 295, 297, 309, 310, 311, 311, 311,
1100 311, 311, 312, 312, 314, 326, 327, 328, 328, 328,
1101 328, 329, 329, 331, 345, 346, 347, 347, 347, 347,
1102 348, 348, 348, 350, 367, 368, 369, 369, 369, 369,
1103 370, 370, 370, 371, 374, 393, 410, 418, 428, 436,
1104 453, 454, 455, 455, 455, 455, 455, 456, 456, 456,
1105 457, 457, 459, 468, 477, 488, 497, 506, 515, 526,
1106 535, 547, 561, 576, 587, 604, 621, 638, 655, 670,
1107 685, 698, 713, 722, 731, 740, 749, 758, 767, 776,
1108 785, 794, 803, 812, 821, 830, 839, 852, 861, 874,
1109 883, 892, 901, 908, 915, 924, 931, 940, 948, 955,
1110 962, 970, 979, 986, 1002, 1010, 1018, 1026, 1034, 1043,
1111 1052, 1066, 1075, 1084, 1093, 1102, 1111, 1120, 1127, 1134,
1112 1160, 1168, 1175, 1182, 1189, 1196, 1204, 1212, 1220, 1227,
1113 1238, 1249, 1256, 1265, 1274, 1283, 1290, 1297, 1305, 1313,
1114 1323, 1333, 1343, 1357, 1365, 1378, 1389, 1397, 1410, 1419,
1115 1428, 1437, 1447, 1457, 1465, 1478, 1487, 1495, 1504, 1512,
1116 1525, 1534, 1541, 1551, 1561, 1571, 1581, 1591, 1601, 1611,
1117 1621, 1628, 1635, 1642, 1651, 1660, 1669, 1678, 1685, 1695,
1118 1715, 1722, 1740, 1753, 1766, 1775, 1784, 1793, 1802, 1812,
1119 1822, 1833, 1842, 1851, 1860, 1869, 1878, 1887, 1900, 1913,
1120 1922, 1929, 1938, 1947, 1956, 1965, 1973, 1986, 1994, 2035,
1121 2042, 2057, 2067, 2077, 2084, 2091, 2098, 2107, 2115, 2129,
1122 2150, 2171, 2183, 2195, 2207, 2216, 2237, 2247, 2256, 2264,
1123 2272, 2285, 2298, 2313, 2328, 2337, 2346, 2352, 2361, 2370,
1124 2380, 2390, 2403, 2416, 2428, 2442, 2454, 2468, 2483, 2494,
1125 2504, 2511, 2518, 2527, 2536, 2546, 2556, 2566, 2573, 2580,
1126 2589, 2598, 2608, 2618, 2625, 2632, 2639, 2647, 2657, 2667,
1127 2677, 2687, 2726, 2736, 2744, 2752, 2767, 2776, 2781, 2782,
1128 2783, 2783, 2783, 2784, 2784, 2784, 2785, 2785, 2787, 2797,
1129 2806, 2813, 2820, 2827, 2834, 2841, 2848, 2853, 2854, 2855,
1130 2855, 2855, 2856, 2856, 2856, 2857, 2858, 2858, 2859, 2859,
1131 2860, 2860, 2861, 2862, 2863, 2864, 2865, 2866, 2868, 2877,
1132 2887, 2894, 2901, 2910, 2917, 2924, 2931, 2938, 2947, 2956,
1133 2963, 2970, 2980, 2990, 3000, 3010, 3020, 3030, 3035, 3036,
1134 3037, 3039, 3045, 3050, 3051, 3052, 3054, 3060, 3070, 3077,
1135 3086, 3094, 3099, 3100, 3102, 3102, 3102, 3103, 3103, 3104,
1136 3105, 3106, 3107, 3108, 3110, 3120, 3129, 3136, 3145, 3152,
1137 3161, 3169, 3182, 3190, 3203, 3208, 3209, 3210, 3210, 3211,
1138 3211, 3211, 3212, 3214, 3226, 3238, 3250, 3265, 3278, 3291,
1139 3302, 3307, 3308, 3309, 3309, 3311, 3326
1083 0, 185, 185, 185, 186, 186, 187, 187, 188, 188,
1084 188, 189, 189, 190, 190, 191, 191, 192, 194, 200,
1085 205, 206, 207, 207, 207, 208, 208, 209, 209, 209,
1086 210, 210, 211, 211, 211, 212, 212, 213, 213, 213,
1087 214, 214, 214, 215, 215, 216, 216, 217, 217, 218,
1088 218, 219, 219, 220, 220, 221, 221, 222, 222, 223,
1089 223, 223, 224, 224, 224, 225, 225, 225, 226, 226,
1090 227, 227, 228, 228, 229, 229, 230, 230, 230, 231,
1091 231, 232, 232, 233, 233, 233, 234, 234, 235, 235,
1092 236, 236, 237, 237, 237, 238, 238, 239, 239, 240,
1093 240, 241, 241, 242, 242, 243, 243, 243, 244, 244,
1094 245, 245, 245, 246, 246, 246, 247, 247, 247, 248,
1095 248, 248, 248, 249, 250, 250, 250, 251, 251, 251,
1096 252, 252, 253, 253, 254, 254, 254, 255, 255, 255,
1097 256, 256, 257, 257, 257, 258, 258, 259, 259, 259,
1098 260, 260, 261, 261, 262, 262, 263, 264, 264, 265,
1099 265, 266, 266, 267, 268, 268, 269, 269, 270, 270,
1100 271, 271, 272, 272, 273, 273, 273, 274, 274, 275,
1101 275, 276, 276, 277, 277, 278, 278, 279, 279, 280,
1102 280, 280, 281, 281, 281, 282, 282, 282, 283, 283,
1103 284, 285, 285, 286, 286, 287, 287, 288, 288, 289,
1104 289, 289, 290, 290, 290, 291, 291, 291, 292, 292,
1105 293, 293, 294, 294, 295, 295, 296, 298, 310, 311,
1106 312, 312, 312, 312, 312, 313, 313, 315, 327, 328,
1107 329, 329, 329, 329, 330, 330, 332, 346, 347, 348,
1108 348, 348, 348, 349, 349, 349, 351, 368, 369, 370,
1109 370, 370, 370, 371, 371, 371, 372, 375, 394, 411,
1110 419, 429, 437, 454, 455, 456, 456, 456, 456, 456,
1111 457, 457, 457, 458, 458, 460, 469, 478, 489, 498,
1112 507, 516, 527, 536, 548, 562, 577, 588, 605, 622,
1113 639, 656, 671, 686, 699, 714, 723, 732, 741, 750,
1114 759, 768, 777, 786, 795, 804, 813, 822, 831, 840,
1115 853, 862, 875, 884, 893, 902, 909, 916, 925, 932,
1116 941, 949, 956, 963, 971, 980, 988, 1004, 1012, 1020,
1117 1028, 1036, 1044, 1053, 1062, 1076, 1085, 1094, 1103, 1112,
1118 1121, 1130, 1137, 1144, 1170, 1178, 1185, 1192, 1199, 1206,
1119 1214, 1222, 1230, 1237, 1248, 1259, 1266, 1275, 1284, 1293,
1120 1300, 1307, 1315, 1323, 1333, 1343, 1353, 1367, 1375, 1388,
1121 1399, 1407, 1420, 1429, 1438, 1447, 1456, 1466, 1476, 1484,
1122 1497, 1506, 1514, 1523, 1531, 1544, 1553, 1563, 1570, 1580,
1123 1590, 1600, 1610, 1620, 1630, 1640, 1650, 1657, 1664, 1671,
1124 1680, 1689, 1698, 1707, 1714, 1724, 1744, 1751, 1769, 1782,
1125 1795, 1804, 1813, 1822, 1831, 1841, 1851, 1862, 1871, 1880,
1126 1889, 1898, 1907, 1916, 1929, 1942, 1951, 1958, 1967, 1976,
1127 1985, 1994, 2002, 2015, 2023, 2064, 2071, 2086, 2096, 2106,
1128 2113, 2120, 2127, 2136, 2144, 2158, 2179, 2200, 2212, 2224,
1129 2236, 2245, 2266, 2276, 2285, 2293, 2301, 2314, 2327, 2342,
1130 2357, 2366, 2375, 2381, 2390, 2399, 2409, 2419, 2432, 2445,
1131 2457, 2471, 2483, 2497, 2506, 2518, 2528, 2535, 2542, 2551,
1132 2560, 2570, 2580, 2590, 2597, 2604, 2613, 2622, 2632, 2642,
1133 2649, 2656, 2663, 2671, 2681, 2691, 2701, 2711, 2750, 2760,
1134 2768, 2776, 2791, 2800, 2805, 2806, 2807, 2807, 2807, 2808,
1135 2808, 2808, 2809, 2809, 2811, 2821, 2830, 2837, 2844, 2851,
1136 2858, 2865, 2872, 2877, 2878, 2879, 2879, 2879, 2880, 2880,
1137 2880, 2881, 2882, 2882, 2883, 2883, 2884, 2884, 2885, 2886,
1138 2887, 2888, 2889, 2890, 2892, 2901, 2911, 2918, 2925, 2934,
1139 2941, 2948, 2955, 2962, 2971, 2980, 2987, 2994, 3004, 3014,
1140 3024, 3034, 3044, 3054, 3059, 3060, 3061, 3063, 3069, 3074,
1141 3075, 3076, 3078, 3084, 3094, 3101, 3110, 3118, 3123, 3124,
1142 3126, 3126, 3126, 3127, 3127, 3128, 3129, 3130, 3131, 3132,
1143 3134, 3144, 3153, 3160, 3169, 3176, 3185, 3193, 3206, 3214,
1144 3227, 3232, 3233, 3234, 3234, 3235, 3235, 3235, 3236, 3238,
1145 3250, 3262, 3274, 3289, 3302, 3315, 3326, 3331, 3332, 3333,
1146 3333, 3335, 3350
11401147 };
11411148 #endif
11421149
11931200 "VAR_FORWARD_SSL_UPSTREAM", "VAR_TLS_CERT_BUNDLE", "VAR_HTTPS_PORT",
11941201 "VAR_HTTP_ENDPOINT", "VAR_HTTP_MAX_STREAMS",
11951202 "VAR_HTTP_QUERY_BUFFER_SIZE", "VAR_HTTP_RESPONSE_BUFFER_SIZE",
1196 "VAR_HTTP_NODELAY", "VAR_STUB_FIRST", "VAR_MINIMAL_RESPONSES",
1197 "VAR_RRSET_ROUNDROBIN", "VAR_MAX_UDP_SIZE", "VAR_DELAY_CLOSE",
1198 "VAR_UNBLOCK_LAN_ZONES", "VAR_INSECURE_LAN_ZONES",
1199 "VAR_INFRA_CACHE_MIN_RTT", "VAR_DNS64_PREFIX", "VAR_DNS64_SYNTHALL",
1203 "VAR_HTTP_NODELAY", "VAR_HTTP_NOTLS_DOWNSTREAM", "VAR_STUB_FIRST",
1204 "VAR_MINIMAL_RESPONSES", "VAR_RRSET_ROUNDROBIN", "VAR_MAX_UDP_SIZE",
1205 "VAR_DELAY_CLOSE", "VAR_UDP_CONNECT", "VAR_UNBLOCK_LAN_ZONES",
1206 "VAR_INSECURE_LAN_ZONES", "VAR_INFRA_CACHE_MIN_RTT",
1207 "VAR_INFRA_KEEP_PROBING", "VAR_DNS64_PREFIX", "VAR_DNS64_SYNTHALL",
12001208 "VAR_DNS64_IGNORE_AAAA", "VAR_DNSTAP", "VAR_DNSTAP_ENABLE",
12011209 "VAR_DNSTAP_SOCKET_PATH", "VAR_DNSTAP_IP", "VAR_DNSTAP_TLS",
12021210 "VAR_DNSTAP_TLS_SERVER_NAME", "VAR_DNSTAP_TLS_CERT_BUNDLE",
12551263 "VAR_IPSET_NAME_V4", "VAR_IPSET_NAME_V6", "VAR_TLS_SESSION_TICKET_KEYS",
12561264 "VAR_RPZ", "VAR_TAGS", "VAR_RPZ_ACTION_OVERRIDE",
12571265 "VAR_RPZ_CNAME_OVERRIDE", "VAR_RPZ_LOG", "VAR_RPZ_LOG_NAME",
1258 "VAR_DYNLIB", "VAR_DYNLIB_FILE", "VAR_EDNS_CLIENT_TAG",
1259 "VAR_EDNS_CLIENT_TAG_OPCODE", "$accept", "toplevelvars", "toplevelvar",
1260 "force_toplevel", "serverstart", "contents_server", "content_server",
1261 "stubstart", "contents_stub", "content_stub", "forwardstart",
1262 "contents_forward", "content_forward", "viewstart", "contents_view",
1263 "content_view", "authstart", "contents_auth", "content_auth", "rpz_tag",
1264 "rpz_action_override", "rpz_cname_override", "rpz_log", "rpz_log_name",
1265 "rpzstart", "contents_rpz", "content_rpz", "server_num_threads",
1266 "server_verbosity", "server_statistics_interval",
1266 "VAR_DYNLIB", "VAR_DYNLIB_FILE", "VAR_EDNS_CLIENT_STRING",
1267 "VAR_EDNS_CLIENT_STRING_OPCODE", "$accept", "toplevelvars",
1268 "toplevelvar", "force_toplevel", "serverstart", "contents_server",
1269 "content_server", "stubstart", "contents_stub", "content_stub",
1270 "forwardstart", "contents_forward", "content_forward", "viewstart",
1271 "contents_view", "content_view", "authstart", "contents_auth",
1272 "content_auth", "rpz_tag", "rpz_action_override", "rpz_cname_override",
1273 "rpz_log", "rpz_log_name", "rpzstart", "contents_rpz", "content_rpz",
1274 "server_num_threads", "server_verbosity", "server_statistics_interval",
12671275 "server_statistics_cumulative", "server_extended_statistics",
12681276 "server_shm_enable", "server_shm_key", "server_port",
12691277 "server_send_client_subnet", "server_client_subnet_zone",
12871295 "server_tls_use_sni", "server_https_port", "server_http_endpoint",
12881296 "server_http_max_streams", "server_http_query_buffer_size",
12891297 "server_http_response_buffer_size", "server_http_nodelay",
1290 "server_use_systemd", "server_do_daemonize", "server_use_syslog",
1291 "server_log_time_ascii", "server_log_queries", "server_log_replies",
1292 "server_log_tag_queryreply", "server_log_servfail",
1293 "server_log_local_actions", "server_chroot", "server_username",
1294 "server_directory", "server_logfile", "server_pidfile",
1295 "server_root_hints", "server_dlv_anchor_file", "server_dlv_anchor",
1296 "server_auto_trust_anchor_file", "server_trust_anchor_file",
1297 "server_trusted_keys_file", "server_trust_anchor",
1298 "server_trust_anchor_signaling", "server_root_key_sentinel",
1299 "server_domain_insecure", "server_hide_identity", "server_hide_version",
1300 "server_hide_trustanchor", "server_identity", "server_version",
1301 "server_so_rcvbuf", "server_so_sndbuf", "server_so_reuseport",
1302 "server_ip_transparent", "server_ip_freebind", "server_ip_dscp",
1303 "server_stream_wait_size", "server_edns_buffer_size",
1304 "server_msg_buffer_size", "server_msg_cache_size",
1305 "server_msg_cache_slabs", "server_num_queries_per_thread",
1306 "server_jostle_timeout", "server_delay_close",
1307 "server_unblock_lan_zones", "server_insecure_lan_zones",
1308 "server_rrset_cache_size", "server_rrset_cache_slabs",
1309 "server_infra_host_ttl", "server_infra_lame_ttl",
1310 "server_infra_cache_numhosts", "server_infra_cache_lame_size",
1311 "server_infra_cache_slabs", "server_infra_cache_min_rtt",
1298 "server_http_notls_downstream", "server_use_systemd",
1299 "server_do_daemonize", "server_use_syslog", "server_log_time_ascii",
1300 "server_log_queries", "server_log_replies", "server_log_tag_queryreply",
1301 "server_log_servfail", "server_log_local_actions", "server_chroot",
1302 "server_username", "server_directory", "server_logfile",
1303 "server_pidfile", "server_root_hints", "server_dlv_anchor_file",
1304 "server_dlv_anchor", "server_auto_trust_anchor_file",
1305 "server_trust_anchor_file", "server_trusted_keys_file",
1306 "server_trust_anchor", "server_trust_anchor_signaling",
1307 "server_root_key_sentinel", "server_domain_insecure",
1308 "server_hide_identity", "server_hide_version", "server_hide_trustanchor",
1309 "server_identity", "server_version", "server_so_rcvbuf",
1310 "server_so_sndbuf", "server_so_reuseport", "server_ip_transparent",
1311 "server_ip_freebind", "server_ip_dscp", "server_stream_wait_size",
1312 "server_edns_buffer_size", "server_msg_buffer_size",
1313 "server_msg_cache_size", "server_msg_cache_slabs",
1314 "server_num_queries_per_thread", "server_jostle_timeout",
1315 "server_delay_close", "server_udp_connect", "server_unblock_lan_zones",
1316 "server_insecure_lan_zones", "server_rrset_cache_size",
1317 "server_rrset_cache_slabs", "server_infra_host_ttl",
1318 "server_infra_lame_ttl", "server_infra_cache_numhosts",
1319 "server_infra_cache_lame_size", "server_infra_cache_slabs",
1320 "server_infra_cache_min_rtt", "server_infra_keep_probing",
13121321 "server_target_fetch_policy", "server_harden_short_bufsize",
13131322 "server_harden_large_queries", "server_harden_glue",
13141323 "server_harden_dnssec_stripped", "server_harden_below_nxdomain",
13481357 "server_qname_minimisation_strict", "server_ipsecmod_enabled",
13491358 "server_ipsecmod_ignore_bogus", "server_ipsecmod_hook",
13501359 "server_ipsecmod_max_ttl", "server_ipsecmod_whitelist",
1351 "server_ipsecmod_strict", "server_edns_client_tag",
1352 "server_edns_client_tag_opcode", "stub_name", "stub_host", "stub_addr",
1353 "stub_first", "stub_no_cache", "stub_ssl_upstream", "stub_prime",
1354 "forward_name", "forward_host", "forward_addr", "forward_first",
1355 "forward_no_cache", "forward_ssl_upstream", "auth_name", "auth_zonefile",
1356 "auth_master", "auth_url", "auth_allow_notify", "auth_for_downstream",
1357 "auth_for_upstream", "auth_fallback_enabled", "view_name",
1358 "view_local_zone", "view_response_ip", "view_response_ip_data",
1359 "view_local_data", "view_local_data_ptr", "view_first", "rcstart",
1360 "contents_rc", "content_rc", "rc_control_enable", "rc_control_port",
1361 "rc_control_interface", "rc_control_use_cert", "rc_server_key_file",
1362 "rc_server_cert_file", "rc_control_key_file", "rc_control_cert_file",
1363 "dtstart", "contents_dt", "content_dt", "dt_dnstap_enable",
1364 "dt_dnstap_bidirectional", "dt_dnstap_socket_path", "dt_dnstap_ip",
1365 "dt_dnstap_tls", "dt_dnstap_tls_server_name",
1366 "dt_dnstap_tls_cert_bundle", "dt_dnstap_tls_client_key_file",
1367 "dt_dnstap_tls_client_cert_file", "dt_dnstap_send_identity",
1368 "dt_dnstap_send_version", "dt_dnstap_identity", "dt_dnstap_version",
1360 "server_ipsecmod_strict", "server_edns_client_string",
1361 "server_edns_client_string_opcode", "stub_name", "stub_host",
1362 "stub_addr", "stub_first", "stub_no_cache", "stub_ssl_upstream",
1363 "stub_prime", "forward_name", "forward_host", "forward_addr",
1364 "forward_first", "forward_no_cache", "forward_ssl_upstream", "auth_name",
1365 "auth_zonefile", "auth_master", "auth_url", "auth_allow_notify",
1366 "auth_for_downstream", "auth_for_upstream", "auth_fallback_enabled",
1367 "view_name", "view_local_zone", "view_response_ip",
1368 "view_response_ip_data", "view_local_data", "view_local_data_ptr",
1369 "view_first", "rcstart", "contents_rc", "content_rc",
1370 "rc_control_enable", "rc_control_port", "rc_control_interface",
1371 "rc_control_use_cert", "rc_server_key_file", "rc_server_cert_file",
1372 "rc_control_key_file", "rc_control_cert_file", "dtstart", "contents_dt",
1373 "content_dt", "dt_dnstap_enable", "dt_dnstap_bidirectional",
1374 "dt_dnstap_socket_path", "dt_dnstap_ip", "dt_dnstap_tls",
1375 "dt_dnstap_tls_server_name", "dt_dnstap_tls_cert_bundle",
1376 "dt_dnstap_tls_client_key_file", "dt_dnstap_tls_client_cert_file",
1377 "dt_dnstap_send_identity", "dt_dnstap_send_version",
1378 "dt_dnstap_identity", "dt_dnstap_version",
13691379 "dt_dnstap_log_resolver_query_messages",
13701380 "dt_dnstap_log_resolver_response_messages",
13711381 "dt_dnstap_log_client_query_messages",
14231433 515, 516, 517, 518, 519, 520, 521, 522, 523, 524,
14241434 525, 526, 527, 528, 529, 530, 531, 532, 533, 534,
14251435 535, 536, 537, 538, 539, 540, 541, 542, 543, 544,
1426 545, 546, 547, 548, 549, 550, 551, 552, 553, 554
1436 545, 546, 547, 548, 549, 550, 551, 552, 553, 554,
1437 555, 556, 557
14271438 };
14281439 # endif
14291440
1430 #define YYPACT_NINF -288
1441 #define YYPACT_NINF -291
14311442
14321443 #define yypact_value_is_default(Yystate) \
1433 (!!((Yystate) == (-288)))
1444 (!!((Yystate) == (-291)))
14341445
14351446 #define YYTABLE_NINF -1
14361447
14411452 STATE-NUM. */
14421453 static const yytype_int16 yypact[] =
14431454 {
1444 -288, 0, -288, -288, -288, -288, -288, -288, -288, -288,
1445 -288, -288, -288, -288, -288, -288, -288, -288, -288, -288,
1446 -288, -288, -288, -288, -288, -288, -288, -288, -288, -288,
1447 -288, -288, 284, -42, -38, -43, -21, -44, -11, -93,
1448 -109, -287, -212, -237, -279, 3, 4, 13, 25, 26,
1455 -291, 0, -291, -291, -291, -291, -291, -291, -291, -291,
1456 -291, -291, -291, -291, -291, -291, -291, -291, -291, -291,
1457 -291, -291, -291, -291, -291, -291, -291, -291, -291, -291,
1458 -291, -291, 287, -42, -38, -43, -21, -44, -11, -96,
1459 -109, -290, -215, -240, -282, 3, 4, 13, 25, 26,
14491460 27, 30, 31, 32, 33, 34, 35, 37, 38, 39,
14501461 40, 41, 43, 44, 45, 46, 47, 48, 49, 50,
14511462 51, 52, 54, 55, 84, 85, 88, 89, 91, 93,
1452 94, 95, 97, 98, 99, 100, 101, 103, 104, 105,
1463 94, 95, 96, 98, 99, 100, 101, 103, 104, 105,
14531464 106, 107, 108, 109, 110, 111, 112, 113, 114, 115,
14541465 116, 117, 118, 119, 120, 121, 122, 123, 124, 125,
1455 126, 129, 130, 131, 132, 133, 134, 135, 136, 137,
1466 126, 127, 128, 129, 132, 133, 134, 135, 136, 137,
14561467 138, 139, 140, 141, 142, 143, 144, 145, 146, 147,
1457 148, 150, 151, 152, 153, 154, 155, 156, 157, 158,
1458 159, 160, 161, 162, 163, 164, 165, 166, 168, 169,
1459 170, 171, 172, 173, 174, 175, 176, 177, 178, 179,
1468 148, 149, 150, 151, 153, 154, 155, 156, 157, 158,
1469 159, 160, 161, 162, 163, 164, 165, 166, 167, 168,
1470 169, 171, 172, 173, 174, 175, 176, 177, 178, 179,
14601471 180, 181, 182, 183, 184, 185, 186, 187, 188, 189,
14611472 190, 191, 192, 193, 194, 195, 196, 197, 198, 199,
1462 200, 201, 202, 203, 204, 205, 206, 207, 212, 213,
1463 214, 215, 216, 217, 218, 220, 221, 222, 223, 224,
1464 227, 229, 231, 244, 245, 246, 247, 248, 249, 250,
1465 251, 253, 254, 255, 256, 257, 258, 259, 260, 261,
1473 200, 201, 202, 203, 204, 205, 206, 207, 208, 209,
1474 210, 215, 216, 217, 218, 219, 220, 221, 223, 224,
1475 225, 226, 227, 230, 232, 234, 247, 248, 249, 250,
1476 251, 252, 253, 254, 256, 257, 258, 259, 260, 261,
14661477 262, 263, 264, 265, 266, 267, 268, 269, 270, 271,
1467 272, 273, 274, 275, 277, 278, 279, 281, 282, 283,
1468 285, 319, 320, 321, 322, 326, 327, -288, -288, -288,
1469 -288, -288, -288, -288, -288, -288, -288, -288, -288, -288,
1470 -288, -288, -288, -288, -288, -288, -288, -288, -288, -288,
1471 -288, -288, -288, -288, -288, -288, -288, -288, -288, -288,
1472 -288, -288, -288, -288, -288, -288, -288, -288, -288, -288,
1473 -288, -288, -288, -288, -288, -288, -288, -288, -288, -288,
1474 -288, -288, -288, -288, -288, -288, -288, -288, -288, -288,
1475 -288, -288, -288, -288, -288, -288, -288, -288, -288, -288,
1476 -288, -288, -288, -288, -288, -288, -288, -288, -288, -288,
1477 -288, -288, -288, -288, -288, -288, -288, -288, -288, -288,
1478 -288, -288, -288, -288, -288, -288, -288, -288, -288, -288,
1479 -288, -288, -288, -288, -288, -288, -288, -288, -288, -288,
1480 -288, -288, -288, -288, -288, -288, -288, -288, -288, -288,
1481 -288, -288, -288, -288, -288, -288, -288, -288, -288, -288,
1482 -288, -288, -288, -288, -288, -288, -288, -288, -288, -288,
1483 -288, -288, -288, -288, -288, -288, -288, -288, -288, -288,
1484 -288, -288, -288, -288, -288, -288, -288, -288, -288, -288,
1485 -288, -288, -288, -288, -288, -288, -288, -288, -288, -288,
1486 -288, -288, -288, -288, -288, -288, -288, -288, -288, -288,
1487 -288, -288, -288, -288, -288, -288, -288, -288, -288, -288,
1488 -288, -288, -288, -288, -288, -288, -288, -288, -288, -288,
1489 328, 370, 371, 372, 373, 374, 375, -288, -288, -288,
1490 -288, -288, -288, -288, -288, 376, 377, 378, 382, 386,
1491 387, -288, -288, -288, -288, -288, -288, -288, 412, 413,
1492 414, 422, 433, 434, 435, -288, -288, -288, -288, -288,
1493 -288, -288, -288, 436, 437, 438, 439, 440, 441, 442,
1494 443, -288, -288, -288, -288, -288, -288, -288, -288, -288,
1495 444, 445, 446, 447, 448, -288, -288, -288, -288, -288,
1496 -288, -288, -288, -288, -288, -288, 449, 450, 451, 452,
1497 492, 494, 510, 511, -288, -288, -288, -288, -288, -288,
1498 -288, -288, -288, 512, 513, 514, 515, 516, 517, 518,
1499 519, 520, 527, 528, 529, 530, 531, 532, 533, 535,
1500 536, 537, -288, -288, -288, -288, -288, -288, -288, -288,
1501 -288, -288, -288, -288, -288, -288, -288, -288, -288, -288,
1502 -288, -288, 538, -288, -288, 539, -288, -288, 540, 541,
1503 544, 547, 550, 551, 560, 561, 562, 564, -288, -288,
1504 -288, -288, -288, -288, -288, -288, -288, -288, -288, 565,
1505 566, 567, 568, 569, 570, -288, -288, -288, -288, -288,
1506 -288, -288, 571, 574, -288, -288, -288, -288, -288, -288,
1507 -288, -288, -288, -288, -288, -288, -288, -288, -288, -288,
1508 -288, -288, -288, -288, -288, -288, -288, -288, -288, -288,
1509 -288, -288, -288, -288, -288, -288, -288, -288, -288, -288,
1510 -288, -288, -288, -288, -288, -288, -288, -288, -288, -288,
1511 -288, -288, -288, -288, -288, -288, -288, -288, -288, -288,
1512 -288, -288, -288, -288, -288, -288, -288, 575, 576, -288,
1513 -288, -288, -288, -288, -288, -288, -288, -288, -288, -288,
1514 -288, -288, -288, -288, -288, -288, -288, -288, -288, -288,
1515 -288, -288, -288, -288, -288, -288, -288, -288, -288, -288,
1516 -288, -288, -288, -288, -288, -288, -288, -288, -288, -288,
1517 -288, -288, -288, -288, -288, -288, -288, -288, -288, -288,
1518 -288, -288, -288, -288, -288, -288, -288, -288, -288, -288,
1519 577, 578, 579, -288, -288, -288, -288, -288, -288, -288,
1520 -288, -288, -288, 580, 581, -288, -288, -288, -288, -288,
1521 -288, -288, -288, -288, -288, -288, -288, -288, -288, -288,
1522 -288, -288, -288, -288, 582, 583, 584, 585, 586, 587,
1523 -288, -288, -288, -288, -288, -288, -288, -288, -288, -288,
1524 -288, -288, -288, -288, -288, -288, -288, -288, -288, -288,
1525 -288, -288, -288, -288, -288, -288, -288, 588, -288, -288,
1526 -288, -288, -288, -288, -288, -288, -288, 589, -288, -288,
1527 -288, -288, -288, -288, -288, -288, -288, -288, -288, -288,
1528 -288, -288, -288, 590, -288, -288, 591, 592, -288, -288,
1529 -288, -288, -288, -288, -288, -288, -288, -288, -288, -288,
1530 -288, -288, -288, -288, -288, -288, -288, -288, -288, -288,
1531 -288, -288, -288, -288, -288, -288, -288, -288, -288, -288,
1532 -288, -288, -288, -288, -288, -288, -288, -288, -288, -288,
1533 -288, -288, -288, -288, -288, -288, -288, -288, -288, -288,
1534 -288, -288, -288, -288, -288, -288, -288, -288, -288, -288,
1535 -288, -288, -288, -288, -288, -288, -288, -288, 593, 594,
1536 595, -288, -288, -288, -288, -288, -288, -288, -288, -288
1478 272, 273, 274, 275, 276, 277, 278, 280, 281, 282,
1479 284, 285, 286, 288, 322, 323, 324, 325, 329, 330,
1480 -291, -291, -291, -291, -291, -291, -291, -291, -291, -291,
1481 -291, -291, -291, -291, -291, -291, -291, -291, -291, -291,
1482 -291, -291, -291, -291, -291, -291, -291, -291, -291, -291,
1483 -291, -291, -291, -291, -291, -291, -291, -291, -291, -291,
1484 -291, -291, -291, -291, -291, -291, -291, -291, -291, -291,
1485 -291, -291, -291, -291, -291, -291, -291, -291, -291, -291,
1486 -291, -291, -291, -291, -291, -291, -291, -291, -291, -291,
1487 -291, -291, -291, -291, -291, -291, -291, -291, -291, -291,
1488 -291, -291, -291, -291, -291, -291, -291, -291, -291, -291,
1489 -291, -291, -291, -291, -291, -291, -291, -291, -291, -291,
1490 -291, -291, -291, -291, -291, -291, -291, -291, -291, -291,
1491 -291, -291, -291, -291, -291, -291, -291, -291, -291, -291,
1492 -291, -291, -291, -291, -291, -291, -291, -291, -291, -291,
1493 -291, -291, -291, -291, -291, -291, -291, -291, -291, -291,
1494 -291, -291, -291, -291, -291, -291, -291, -291, -291, -291,
1495 -291, -291, -291, -291, -291, -291, -291, -291, -291, -291,
1496 -291, -291, -291, -291, -291, -291, -291, -291, -291, -291,
1497 -291, -291, -291, -291, -291, -291, -291, -291, -291, -291,
1498 -291, -291, -291, -291, -291, -291, -291, -291, -291, -291,
1499 -291, -291, -291, -291, -291, -291, -291, -291, -291, -291,
1500 -291, -291, -291, -291, -291, -291, 331, 373, 374, 375,
1501 376, 377, 378, -291, -291, -291, -291, -291, -291, -291,
1502 -291, 379, 380, 381, 385, 389, 390, -291, -291, -291,
1503 -291, -291, -291, -291, 415, 416, 417, 426, 439, 440,
1504 441, -291, -291, -291, -291, -291, -291, -291, -291, 442,
1505 443, 444, 445, 446, 447, 448, 449, -291, -291, -291,
1506 -291, -291, -291, -291, -291, -291, 450, 451, 452, 453,
1507 454, -291, -291, -291, -291, -291, -291, -291, -291, -291,
1508 -291, -291, 455, 456, 457, 458, 498, 500, 516, 517,
1509 -291, -291, -291, -291, -291, -291, -291, -291, -291, 518,
1510 519, 520, 521, 522, 523, 524, 525, 526, 533, 534,
1511 535, 536, 537, 538, 539, 541, 542, 543, -291, -291,
1512 -291, -291, -291, -291, -291, -291, -291, -291, -291, -291,
1513 -291, -291, -291, -291, -291, -291, -291, -291, 544, -291,
1514 -291, 545, -291, -291, 546, 547, 550, 553, 556, 557,
1515 566, 567, 568, 570, -291, -291, -291, -291, -291, -291,
1516 -291, -291, -291, -291, -291, 571, 572, 573, 574, 575,
1517 576, -291, -291, -291, -291, -291, -291, -291, 577, 580,
1518 -291, -291, -291, -291, -291, -291, -291, -291, -291, -291,
1519 -291, -291, -291, -291, -291, -291, -291, -291, -291, -291,
1520 -291, -291, -291, -291, -291, -291, -291, -291, -291, -291,
1521 -291, -291, -291, -291, -291, -291, -291, -291, -291, -291,
1522 -291, -291, -291, -291, -291, -291, -291, -291, -291, -291,
1523 -291, -291, -291, -291, -291, -291, -291, -291, -291, -291,
1524 -291, -291, -291, 581, 582, -291, -291, -291, -291, -291,
1525 -291, -291, -291, -291, -291, -291, -291, -291, -291, -291,
1526 -291, -291, -291, -291, -291, -291, -291, -291, -291, -291,
1527 -291, -291, -291, -291, -291, -291, -291, -291, -291, -291,
1528 -291, -291, -291, -291, -291, -291, -291, -291, -291, -291,
1529 -291, -291, -291, -291, -291, -291, -291, -291, -291, -291,
1530 -291, -291, -291, -291, -291, -291, -291, -291, -291, 583,
1531 584, 585, -291, -291, -291, -291, -291, -291, -291, -291,
1532 -291, -291, 586, 587, -291, -291, -291, -291, -291, -291,
1533 -291, -291, -291, -291, -291, -291, -291, -291, -291, -291,
1534 -291, -291, -291, 588, 589, 590, 591, 592, 593, -291,
1535 -291, -291, -291, -291, -291, -291, -291, -291, -291, -291,
1536 -291, -291, -291, -291, -291, -291, -291, -291, -291, -291,
1537 -291, -291, -291, -291, -291, -291, 594, -291, -291, -291,
1538 -291, -291, -291, -291, -291, -291, 595, -291, -291, -291,
1539 -291, -291, -291, -291, -291, -291, -291, -291, -291, -291,
1540 -291, -291, 596, -291, -291, 597, 598, -291, -291, -291,
1541 -291, -291, -291, -291, -291, -291, -291, -291, -291, -291,
1542 -291, -291, -291, -291, -291, -291, -291, -291, -291, -291,
1543 -291, -291, -291, -291, -291, -291, -291, -291, -291, -291,
1544 -291, -291, -291, -291, -291, -291, -291, -291, -291, -291,
1545 -291, -291, -291, -291, -291, -291, -291, -291, -291, -291,
1546 -291, -291, -291, -291, -291, -291, -291, -291, -291, -291,
1547 -291, -291, -291, -291, -291, -291, -291, 599, 600, 601,
1548 -291, -291, -291, -291, -291, -291, -291, -291, -291
15371549 };
15381550
15391551 /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
15411553 means the default is an error. */
15421554 static const yytype_uint16 yydefact[] =
15431555 {
1544 2, 0, 1, 18, 19, 224, 234, 507, 567, 526,
1545 243, 581, 604, 253, 620, 269, 572, 3, 17, 21,
1546 226, 236, 245, 255, 271, 509, 528, 569, 574, 583,
1547 606, 622, 4, 5, 6, 10, 14, 15, 8, 9,
1556 2, 0, 1, 18, 19, 227, 237, 513, 573, 532,
1557 246, 587, 610, 256, 626, 272, 578, 3, 17, 21,
1558 229, 239, 248, 258, 274, 515, 534, 575, 580, 589,
1559 612, 628, 4, 5, 6, 10, 14, 15, 8, 9,
15481560 7, 16, 11, 12, 13, 0, 0, 0, 0, 0,
15491561 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
15501562 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
15651577 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
15661578 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
15671579 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1568 0, 0, 0, 0, 0, 0, 0, 20, 22, 23,
1569 86, 89, 98, 192, 193, 24, 157, 158, 159, 160,
1570 161, 162, 163, 164, 165, 166, 37, 77, 25, 90,
1571 91, 48, 70, 85, 26, 27, 30, 31, 28, 29,
1572 32, 33, 34, 35, 36, 121, 204, 122, 124, 125,
1573 126, 206, 211, 207, 218, 219, 220, 221, 127, 128,
1574 129, 130, 131, 132, 188, 87, 76, 102, 119, 120,
1575 216, 213, 123, 38, 39, 40, 41, 42, 78, 92,
1576 93, 108, 64, 74, 65, 196, 197, 103, 58, 59,
1577 195, 60, 61, 112, 116, 136, 145, 171, 148, 217,
1578 113, 71, 43, 44, 45, 100, 137, 138, 139, 46,
1579 47, 49, 50, 52, 53, 51, 143, 54, 55, 56,
1580 62, 81, 117, 95, 144, 88, 167, 96, 97, 114,
1581 115, 214, 101, 57, 79, 82, 63, 66, 104, 105,
1582 80, 168, 106, 67, 68, 69, 205, 118, 181, 182,
1583 183, 184, 185, 186, 194, 107, 75, 109, 110, 111,
1584 169, 72, 73, 94, 83, 84, 99, 133, 134, 215,
1585 135, 140, 141, 142, 172, 173, 175, 177, 178, 176,
1586 179, 189, 146, 147, 151, 152, 149, 150, 153, 154,
1587 156, 155, 208, 210, 209, 170, 180, 198, 200, 199,
1588 201, 202, 203, 222, 223, 174, 187, 190, 191, 212,
1589 0, 0, 0, 0, 0, 0, 0, 225, 227, 228,
1590 229, 231, 232, 233, 230, 0, 0, 0, 0, 0,
1591 0, 235, 237, 238, 239, 240, 241, 242, 0, 0,
1592 0, 0, 0, 0, 0, 244, 246, 247, 250, 251,
1593 248, 252, 249, 0, 0, 0, 0, 0, 0, 0,
1594 0, 254, 256, 257, 258, 259, 263, 260, 261, 262,
1595 0, 0, 0, 0, 0, 274, 278, 279, 280, 281,
1596 270, 272, 273, 275, 276, 277, 0, 0, 0, 0,
1597 0, 0, 0, 0, 508, 510, 512, 511, 517, 513,
1598 514, 515, 516, 0, 0, 0, 0, 0, 0, 0,
15991580 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1600 0, 0, 527, 529, 531, 530, 532, 533, 534, 535,
1601 536, 537, 538, 539, 540, 541, 542, 543, 544, 545,
1602 546, 547, 0, 568, 570, 0, 573, 575, 0, 0,
1603 0, 0, 0, 0, 0, 0, 0, 0, 582, 584,
1604 585, 586, 588, 589, 587, 590, 591, 592, 593, 0,
1605 0, 0, 0, 0, 0, 605, 607, 608, 609, 610,
1606 611, 612, 0, 0, 621, 623, 624, 283, 282, 289,
1607 302, 300, 312, 308, 309, 313, 310, 311, 314, 315,
1608 316, 317, 318, 347, 348, 349, 350, 351, 376, 377,
1609 378, 383, 384, 305, 385, 386, 389, 387, 388, 391,
1610 392, 393, 407, 362, 363, 365, 366, 394, 410, 356,
1611 358, 411, 417, 418, 419, 306, 375, 435, 436, 357,
1612 430, 340, 301, 352, 408, 414, 395, 0, 0, 439,
1613 307, 284, 339, 399, 285, 303, 304, 353, 354, 437,
1614 397, 401, 402, 286, 440, 379, 406, 341, 361, 412,
1615 413, 416, 429, 355, 433, 431, 432, 367, 374, 403,
1616 404, 368, 369, 396, 421, 342, 343, 346, 319, 321,
1617 322, 323, 324, 325, 332, 333, 334, 335, 336, 337,
1618 441, 442, 444, 380, 381, 382, 390, 445, 446, 447,
1619 0, 0, 0, 398, 370, 372, 577, 456, 460, 458,
1620 457, 461, 459, 0, 0, 464, 465, 290, 291, 292,
1621 293, 294, 295, 296, 297, 298, 299, 400, 415, 434,
1622 469, 470, 371, 448, 0, 0, 0, 0, 0, 0,
1623 422, 423, 424, 425, 426, 427, 428, 578, 364, 359,
1624 420, 338, 287, 288, 360, 471, 473, 472, 474, 475,
1625 476, 320, 327, 466, 468, 467, 326, 0, 345, 405,
1626 443, 344, 373, 328, 329, 331, 330, 0, 478, 479,
1627 480, 481, 485, 484, 482, 483, 486, 487, 488, 489,
1628 491, 490, 500, 0, 504, 505, 0, 0, 506, 492,
1629 498, 493, 494, 495, 497, 499, 496, 264, 265, 266,
1630 267, 268, 518, 520, 519, 522, 523, 524, 525, 521,
1631 548, 550, 551, 552, 553, 554, 555, 556, 557, 558,
1632 549, 559, 560, 561, 562, 563, 564, 565, 566, 571,
1633 576, 594, 595, 596, 599, 597, 598, 600, 601, 602,
1634 603, 613, 614, 615, 616, 617, 618, 625, 626, 409,
1635 438, 455, 579, 580, 462, 463, 449, 450, 0, 0,
1636 0, 454, 619, 477, 501, 502, 503, 453, 451, 452
1581 20, 22, 23, 86, 89, 98, 195, 196, 24, 160,
1582 161, 162, 163, 164, 165, 166, 167, 168, 169, 37,
1583 77, 25, 90, 91, 48, 70, 85, 26, 27, 30,
1584 31, 28, 29, 32, 33, 34, 35, 36, 121, 207,
1585 122, 124, 125, 126, 209, 214, 210, 221, 222, 223,
1586 224, 127, 128, 129, 130, 131, 132, 133, 191, 87,
1587 76, 102, 119, 120, 219, 216, 123, 38, 39, 40,
1588 41, 42, 78, 92, 93, 108, 64, 74, 65, 199,
1589 200, 103, 58, 59, 198, 60, 61, 112, 116, 137,
1590 147, 174, 150, 220, 113, 71, 43, 44, 45, 100,
1591 138, 139, 140, 141, 46, 47, 49, 50, 52, 53,
1592 51, 145, 151, 54, 55, 56, 62, 81, 117, 95,
1593 146, 88, 170, 96, 97, 114, 115, 217, 101, 57,
1594 79, 82, 63, 66, 104, 105, 80, 171, 106, 67,
1595 68, 69, 208, 118, 184, 185, 186, 187, 188, 189,
1596 197, 107, 75, 109, 110, 111, 172, 72, 73, 94,
1597 83, 84, 99, 134, 135, 218, 136, 142, 143, 144,
1598 175, 176, 178, 180, 181, 179, 182, 192, 148, 149,
1599 154, 155, 152, 153, 156, 157, 159, 158, 211, 213,
1600 212, 173, 183, 201, 203, 202, 204, 205, 206, 225,
1601 226, 177, 190, 193, 194, 215, 0, 0, 0, 0,
1602 0, 0, 0, 228, 230, 231, 232, 234, 235, 236,
1603 233, 0, 0, 0, 0, 0, 0, 238, 240, 241,
1604 242, 243, 244, 245, 0, 0, 0, 0, 0, 0,
1605 0, 247, 249, 250, 253, 254, 251, 255, 252, 0,
1606 0, 0, 0, 0, 0, 0, 0, 257, 259, 260,
1607 261, 262, 266, 263, 264, 265, 0, 0, 0, 0,
1608 0, 277, 281, 282, 283, 284, 273, 275, 276, 278,
1609 279, 280, 0, 0, 0, 0, 0, 0, 0, 0,
1610 514, 516, 518, 517, 523, 519, 520, 521, 522, 0,
1611 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1612 0, 0, 0, 0, 0, 0, 0, 0, 533, 535,
1613 537, 536, 538, 539, 540, 541, 542, 543, 544, 545,
1614 546, 547, 548, 549, 550, 551, 552, 553, 0, 574,
1615 576, 0, 579, 581, 0, 0, 0, 0, 0, 0,
1616 0, 0, 0, 0, 588, 590, 591, 592, 594, 595,
1617 593, 596, 597, 598, 599, 0, 0, 0, 0, 0,
1618 0, 611, 613, 614, 615, 616, 617, 618, 0, 0,
1619 627, 629, 630, 286, 285, 292, 305, 303, 315, 311,
1620 312, 316, 313, 314, 317, 318, 319, 320, 321, 351,
1621 352, 353, 354, 355, 380, 381, 382, 388, 389, 308,
1622 390, 391, 394, 392, 393, 397, 398, 399, 413, 366,
1623 367, 369, 370, 400, 416, 360, 362, 417, 423, 424,
1624 425, 309, 379, 441, 442, 361, 436, 344, 304, 356,
1625 414, 420, 401, 0, 0, 445, 310, 287, 343, 405,
1626 288, 306, 307, 357, 358, 443, 403, 407, 408, 289,
1627 446, 383, 412, 345, 365, 418, 419, 422, 435, 359,
1628 439, 437, 438, 371, 378, 409, 410, 372, 373, 402,
1629 427, 346, 347, 350, 322, 324, 325, 326, 327, 328,
1630 335, 336, 337, 338, 339, 340, 341, 447, 448, 450,
1631 384, 385, 386, 387, 395, 396, 451, 452, 453, 0,
1632 0, 0, 404, 374, 376, 583, 462, 466, 464, 463,
1633 467, 465, 0, 0, 470, 471, 293, 294, 295, 296,
1634 297, 298, 299, 300, 301, 302, 406, 421, 440, 475,
1635 476, 375, 454, 0, 0, 0, 0, 0, 0, 428,
1636 429, 430, 431, 432, 433, 434, 584, 368, 363, 426,
1637 342, 290, 291, 364, 477, 479, 478, 480, 481, 482,
1638 323, 330, 472, 474, 473, 329, 0, 349, 411, 449,
1639 348, 377, 331, 332, 334, 333, 0, 484, 485, 486,
1640 487, 491, 490, 488, 489, 492, 493, 494, 495, 497,
1641 496, 506, 0, 510, 511, 0, 0, 512, 498, 504,
1642 499, 500, 501, 503, 505, 502, 267, 268, 269, 270,
1643 271, 524, 526, 525, 528, 529, 530, 531, 527, 554,
1644 556, 557, 558, 559, 560, 561, 562, 563, 564, 555,
1645 565, 566, 567, 568, 569, 570, 571, 572, 577, 582,
1646 600, 601, 602, 605, 603, 604, 606, 607, 608, 609,
1647 619, 620, 621, 622, 623, 624, 631, 632, 415, 444,
1648 461, 585, 586, 468, 469, 455, 456, 0, 0, 0,
1649 460, 625, 483, 507, 508, 509, 459, 457, 458
16371650 };
16381651
16391652 /* YYPGOTO[NTERM-NUM]. */
16401653 static const yytype_int16 yypgoto[] =
16411654 {
1642 -288, -288, -288, -288, -288, -288, -288, -288, -288, -288,
1643 -288, -288, -288, -288, -288, -288, -288, -288, -288, -288,
1644 -288, -288, -288, -288, -288, -288, -288, -288, -288, -288,
1645 -288, -288, -288, -288, -288, -288, -288, -288, -288, -288,
1646 -288, -288, -288, -288, -288, -288, -288, -288, -288, -288,
1647 -288, -288, -288, -288, -288, -288, -288, -288, -288, -288,
1648 -288, -288, -288, -288, -288, -288, -288, -288, -288, -288,
1649 -288, -288, -288, -288, -288, -288, -288, -288, -288, -288,
1650 -288, -288, -288, -288, -288, -288, -288, -288, -288, -288,
1651 -288, -288, -288, -288, -288, -288, -288, -288, -288, -288,
1652 -288, -288, -288, -288, -288, -288, -288, -288, -288, -288,
1653 -288, -288, -288, -288, -288, -288, -288, -288, -288, -288,
1654 -288, -288, -288, -288, -288, -288, -288, -288, -288, -288,
1655 -288, -288, -288, -288, -288, -288, -288, -288, -288, -288,
1656 -288, -288, -288, -288, -288, -288, -288, -288, -288, -288,
1657 -288, -288, -288, -288, -288, -288, -288, -288, -288, -288,
1658 -288, -288, -288, -288, -288, -288, -288, -288, -288, -288,
1659 -288, -288, -288, -288, -288, -288, -288, -288, -288, -288,
1660 -288, -288, -288, -288, -288, -288, -288, -288, -288, -288,
1661 -288, -288, -288, -288, -288, -288, -288, -288, -288, -288,
1662 -288, -288, -288, -288, -288, -288, -288, -288, -288, -288,
1663 -288, -288, -288, -288, -288, -288, -288, -288, -288, -288,
1664 -288, -288, -288, -288, -288, -288, -288, -288, -288, -288,
1665 -288, -288, -288, -288, -288, -288, -288, 572, 573, 596,
1666 597, 598, -288, -288, -288, -288, -288, -288, -288, -288,
1667 -288, -288, -288, -288, -288, -288, -288, -288, -288, -288,
1668 -288, -288, -288, -288, -288, -288, -288, -288, -288, -288,
1669 -288, -288, -288, -288, -288, -288, -288, -288, -288, -288,
1670 -288, -288, -288, -288, -288, -288, -288, -288, -288, -288,
1671 -288, -288, -288, -288, -288, -288, -288, -288, -288, -288,
1672 -288, -288, -288, -288, -288, -288, -288, -288, -288, -288,
1673 -288, -288, -288, -288, -288, -288, -288, -288, -288, -288,
1674 -288, -288, -288, -288, -288
1655 -291, -291, -291, -291, -291, -291, -291, -291, -291, -291,
1656 -291, -291, -291, -291, -291, -291, -291, -291, -291, -291,
1657 -291, -291, -291, -291, -291, -291, -291, -291, -291, -291,
1658 -291, -291, -291, -291, -291, -291, -291, -291, -291, -291,
1659 -291, -291, -291, -291, -291, -291, -291, -291, -291, -291,
1660 -291, -291, -291, -291, -291, -291, -291, -291, -291, -291,
1661 -291, -291, -291, -291, -291, -291, -291, -291, -291, -291,
1662 -291, -291, -291, -291, -291, -291, -291, -291, -291, -291,
1663 -291, -291, -291, -291, -291, -291, -291, -291, -291, -291,
1664 -291, -291, -291, -291, -291, -291, -291, -291, -291, -291,
1665 -291, -291, -291, -291, -291, -291, -291, -291, -291, -291,
1666 -291, -291, -291, -291, -291, -291, -291, -291, -291, -291,
1667 -291, -291, -291, -291, -291, -291, -291, -291, -291, -291,
1668 -291, -291, -291, -291, -291, -291, -291, -291, -291, -291,
1669 -291, -291, -291, -291, -291, -291, -291, -291, -291, -291,
1670 -291, -291, -291, -291, -291, -291, -291, -291, -291, -291,
1671 -291, -291, -291, -291, -291, -291, -291, -291, -291, -291,
1672 -291, -291, -291, -291, -291, -291, -291, -291, -291, -291,
1673 -291, -291, -291, -291, -291, -291, -291, -291, -291, -291,
1674 -291, -291, -291, -291, -291, -291, -291, -291, -291, -291,
1675 -291, -291, -291, -291, -291, -291, -291, -291, -291, -291,
1676 -291, -291, -291, -291, -291, -291, -291, -291, -291, -291,
1677 -291, -291, -291, -291, -291, -291, -291, -291, -291, -291,
1678 -291, -291, -291, -291, -291, -291, -291, -291, -291, -291,
1679 578, 579, 602, 603, 604, -291, -291, -291, -291, -291,
1680 -291, -291, -291, -291, -291, -291, -291, -291, -291, -291,
1681 -291, -291, -291, -291, -291, -291, -291, -291, -291, -291,
1682 -291, -291, -291, -291, -291, -291, -291, -291, -291, -291,
1683 -291, -291, -291, -291, -291, -291, -291, -291, -291, -291,
1684 -291, -291, -291, -291, -291, -291, -291, -291, -291, -291,
1685 -291, -291, -291, -291, -291, -291, -291, -291, -291, -291,
1686 -291, -291, -291, -291, -291, -291, -291, -291, -291, -291,
1687 -291, -291, -291, -291, -291, -291, -291, -291
16751688 };
16761689
16771690 /* YYDEFGOTO[NTERM-NUM]. */
16781691 static const yytype_int16 yydefgoto[] =
16791692 {
1680 -1, 1, 17, 18, 19, 32, 247, 20, 33, 457,
1681 21, 34, 471, 22, 35, 485, 23, 36, 501, 515,
1682 516, 517, 518, 519, 24, 37, 520, 248, 249, 250,
1683 251, 252, 253, 254, 255, 256, 257, 258, 259, 260,
1684 261, 262, 263, 264, 265, 266, 267, 268, 269, 270,
1685 271, 272, 273, 274, 275, 276, 277, 278, 279, 280,
1686 281, 282, 283, 284, 285, 286, 287, 288, 289, 290,
1687 291, 292, 293, 294, 295, 296, 297, 298, 299, 300,
1688 301, 302, 303, 304, 305, 306, 307, 308, 309, 310,
1689 311, 312, 313, 314, 315, 316, 317, 318, 319, 320,
1690 321, 322, 323, 324, 325, 326, 327, 328, 329, 330,
1691 331, 332, 333, 334, 335, 336, 337, 338, 339, 340,
1692 341, 342, 343, 344, 345, 346, 347, 348, 349, 350,
1693 351, 352, 353, 354, 355, 356, 357, 358, 359, 360,
1694 361, 362, 363, 364, 365, 366, 367, 368, 369, 370,
1695 371, 372, 373, 374, 375, 376, 377, 378, 379, 380,
1696 381, 382, 383, 384, 385, 386, 387, 388, 389, 390,
1697 391, 392, 393, 394, 395, 396, 397, 398, 399, 400,
1698 401, 402, 403, 404, 405, 406, 407, 408, 409, 410,
1699 411, 412, 413, 414, 415, 416, 417, 418, 419, 420,
1700 421, 422, 423, 424, 425, 426, 427, 428, 429, 430,
1701 431, 432, 433, 434, 435, 436, 437, 438, 439, 440,
1702 441, 442, 443, 444, 458, 459, 460, 461, 462, 463,
1703 464, 472, 473, 474, 475, 476, 477, 502, 503, 504,
1704 505, 506, 507, 508, 509, 486, 487, 488, 489, 490,
1705 491, 492, 25, 38, 534, 535, 536, 537, 538, 539,
1706 540, 541, 542, 26, 39, 562, 563, 564, 565, 566,
1707 567, 568, 569, 570, 571, 572, 573, 574, 575, 576,
1708 577, 578, 579, 580, 581, 27, 40, 583, 584, 28,
1709 41, 586, 587, 445, 446, 447, 448, 29, 42, 598,
1710 599, 600, 601, 602, 603, 604, 605, 606, 607, 608,
1711 30, 43, 615, 616, 617, 618, 619, 620, 621, 449,
1712 31, 44, 624, 625, 626
1693 -1, 1, 17, 18, 19, 32, 250, 20, 33, 463,
1694 21, 34, 477, 22, 35, 491, 23, 36, 507, 521,
1695 522, 523, 524, 525, 24, 37, 526, 251, 252, 253,
1696 254, 255, 256, 257, 258, 259, 260, 261, 262, 263,
1697 264, 265, 266, 267, 268, 269, 270, 271, 272, 273,
1698 274, 275, 276, 277, 278, 279, 280, 281, 282, 283,
1699 284, 285, 286, 287, 288, 289, 290, 291, 292, 293,
1700 294, 295, 296, 297, 298, 299, 300, 301, 302, 303,
1701 304, 305, 306, 307, 308, 309, 310, 311, 312, 313,
1702 314, 315, 316, 317, 318, 319, 320, 321, 322, 323,
1703 324, 325, 326, 327, 328, 329, 330, 331, 332, 333,
1704 334, 335, 336, 337, 338, 339, 340, 341, 342, 343,
1705 344, 345, 346, 347, 348, 349, 350, 351, 352, 353,
1706 354, 355, 356, 357, 358, 359, 360, 361, 362, 363,
1707 364, 365, 366, 367, 368, 369, 370, 371, 372, 373,
1708 374, 375, 376, 377, 378, 379, 380, 381, 382, 383,
1709 384, 385, 386, 387, 388, 389, 390, 391, 392, 393,
1710 394, 395, 396, 397, 398, 399, 400, 401, 402, 403,
1711 404, 405, 406, 407, 408, 409, 410, 411, 412, 413,
1712 414, 415, 416, 417, 418, 419, 420, 421, 422, 423,
1713 424, 425, 426, 427, 428, 429, 430, 431, 432, 433,
1714 434, 435, 436, 437, 438, 439, 440, 441, 442, 443,
1715 444, 445, 446, 447, 448, 449, 450, 464, 465, 466,
1716 467, 468, 469, 470, 478, 479, 480, 481, 482, 483,
1717 508, 509, 510, 511, 512, 513, 514, 515, 492, 493,
1718 494, 495, 496, 497, 498, 25, 38, 540, 541, 542,
1719 543, 544, 545, 546, 547, 548, 26, 39, 568, 569,
1720 570, 571, 572, 573, 574, 575, 576, 577, 578, 579,
1721 580, 581, 582, 583, 584, 585, 586, 587, 27, 40,
1722 589, 590, 28, 41, 592, 593, 451, 452, 453, 454,
1723 29, 42, 604, 605, 606, 607, 608, 609, 610, 611,
1724 612, 613, 614, 30, 43, 621, 622, 623, 624, 625,
1725 626, 627, 455, 31, 44, 630, 631, 632
17131726 };
17141727
17151728 /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If
17171730 number is the opposite. If YYTABLE_NINF, syntax error. */
17181731 static const yytype_uint16 yytable[] =
17191732 {
1720 2, 493, 478, 450, 582, 451, 452, 465, 622, 623,
1721 585, 3, 4, 627, 628, 466, 467, 609, 610, 611,
1722 612, 613, 614, 629, 493, 588, 589, 590, 591, 592,
1723 593, 594, 595, 596, 597, 630, 631, 632, 479, 480,
1724 633, 634, 635, 636, 637, 638, 5, 639, 640, 641,
1725 642, 643, 6, 644, 645, 646, 647, 648, 649, 650,
1726 651, 652, 653, 481, 654, 655, 453, 543, 544, 545,
1727 546, 547, 548, 549, 550, 551, 552, 553, 554, 555,
1728 556, 557, 558, 559, 560, 561, 526, 527, 528, 529,
1729 530, 531, 532, 533, 656, 657, 7, 454, 658, 659,
1730 468, 660, 469, 661, 662, 663, 455, 664, 665, 666,
1731 667, 668, 8, 669, 670, 671, 672, 673, 674, 675,
1732 676, 677, 678, 679, 680, 681, 682, 683, 684, 685,
1733 686, 687, 688, 689, 690, 691, 692, 482, 483, 693,
1734 694, 695, 696, 697, 698, 699, 700, 701, 702, 703,
1735 704, 705, 706, 707, 708, 709, 710, 711, 712, 9,
1736 713, 714, 715, 716, 717, 718, 719, 720, 721, 722,
1737 723, 724, 725, 726, 727, 728, 729, 484, 730, 731,
1738 732, 733, 734, 735, 736, 737, 738, 739, 740, 741,
1739 742, 743, 744, 745, 746, 747, 748, 749, 750, 751,
1740 752, 753, 754, 755, 756, 757, 758, 759, 760, 761,
1741 762, 763, 764, 765, 766, 767, 768, 769, 10, 495,
1742 496, 497, 770, 771, 772, 773, 774, 775, 776, 500,
1743 777, 778, 779, 780, 781, 456, 11, 782, 470, 783,
1744 494, 784, 495, 496, 497, 498, 499, 510, 511, 512,
1745 513, 514, 500, 12, 785, 786, 787, 788, 789, 790,
1746 791, 792, 13, 793, 794, 795, 796, 797, 798, 799,
1747 800, 801, 802, 803, 804, 805, 806, 807, 808, 809,
1748 810, 811, 812, 813, 814, 815, 14, 816, 817, 818,
1749 15, 819, 820, 821, 0, 822, 16, 45, 46, 47,
1750 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
1751 58, 59, 60, 61, 62, 63, 64, 65, 66, 67,
1752 68, 69, 70, 71, 72, 73, 74, 75, 76, 823,
1753 824, 825, 826, 77, 78, 79, 827, 828, 829, 80,
1754 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,
1755 91, 92, 93, 94, 95, 96, 97, 98, 99, 100,
1756 101, 102, 103, 104, 105, 106, 107, 108, 109, 110,
1757 111, 112, 113, 114, 115, 116, 117, 118, 119, 120,
1758 830, 831, 832, 833, 834, 835, 836, 837, 838, 121,
1759 122, 123, 839, 124, 125, 126, 840, 841, 127, 128,
1760 129, 130, 131, 132, 133, 134, 135, 136, 137, 138,
1761 139, 140, 141, 142, 143, 144, 145, 146, 147, 148,
1762 149, 150, 842, 843, 844, 151, 152, 153, 154, 155,
1763 156, 157, 845, 158, 159, 160, 161, 162, 163, 164,
1764 165, 166, 167, 846, 847, 848, 849, 850, 851, 852,
1765 853, 854, 855, 856, 857, 858, 859, 860, 861, 862,
1766 863, 864, 865, 168, 169, 170, 171, 172, 173, 174,
1767 175, 176, 177, 178, 179, 180, 181, 182, 183, 184,
1768 185, 186, 187, 188, 189, 190, 191, 192, 193, 194,
1769 195, 196, 197, 198, 199, 200, 201, 202, 203, 204,
1770 205, 206, 866, 207, 867, 208, 209, 210, 211, 212,
1771 213, 214, 215, 216, 217, 218, 219, 220, 221, 222,
1772 868, 869, 870, 871, 872, 873, 874, 875, 876, 877,
1773 878, 223, 224, 225, 226, 227, 228, 879, 880, 881,
1774 882, 883, 884, 885, 229, 886, 887, 888, 889, 890,
1775 891, 892, 230, 231, 893, 232, 233, 894, 234, 235,
1776 895, 896, 236, 237, 238, 239, 240, 241, 242, 243,
1777 897, 898, 899, 244, 900, 901, 902, 903, 904, 905,
1778 906, 907, 245, 246, 908, 909, 910, 911, 912, 913,
1779 914, 915, 916, 917, 918, 919, 920, 921, 922, 923,
1780 924, 925, 926, 927, 928, 929, 0, 0, 0, 521,
1781 522, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1733 2, 499, 484, 456, 588, 457, 458, 471, 628, 629,
1734 591, 3, 4, 633, 634, 472, 473, 615, 616, 617,
1735 618, 619, 620, 635, 499, 594, 595, 596, 597, 598,
1736 599, 600, 601, 602, 603, 636, 637, 638, 485, 486,
1737 639, 640, 641, 642, 643, 644, 5, 645, 646, 647,
1738 648, 649, 6, 650, 651, 652, 653, 654, 655, 656,
1739 657, 658, 659, 487, 660, 661, 459, 549, 550, 551,
1740 552, 553, 554, 555, 556, 557, 558, 559, 560, 561,
1741 562, 563, 564, 565, 566, 567, 532, 533, 534, 535,
1742 536, 537, 538, 539, 662, 663, 7, 460, 664, 665,
1743 474, 666, 475, 667, 668, 669, 670, 461, 671, 672,
1744 673, 674, 8, 675, 676, 677, 678, 679, 680, 681,
1745 682, 683, 684, 685, 686, 687, 688, 689, 690, 691,
1746 692, 693, 694, 695, 696, 697, 698, 699, 700, 701,
1747 488, 489, 702, 703, 704, 705, 706, 707, 708, 709,
1748 710, 711, 712, 713, 714, 715, 716, 717, 718, 719,
1749 720, 721, 9, 722, 723, 724, 725, 726, 727, 728,
1750 729, 730, 731, 732, 733, 734, 735, 736, 737, 738,
1751 490, 739, 740, 741, 742, 743, 744, 745, 746, 747,
1752 748, 749, 750, 751, 752, 753, 754, 755, 756, 757,
1753 758, 759, 760, 761, 762, 763, 764, 765, 766, 767,
1754 768, 769, 770, 771, 772, 773, 774, 775, 776, 777,
1755 778, 10, 501, 502, 503, 779, 780, 781, 782, 783,
1756 784, 785, 506, 786, 787, 788, 789, 790, 462, 11,
1757 791, 476, 792, 500, 793, 501, 502, 503, 504, 505,
1758 516, 517, 518, 519, 520, 506, 12, 794, 795, 796,
1759 797, 798, 799, 800, 801, 13, 802, 803, 804, 805,
1760 806, 807, 808, 809, 810, 811, 812, 813, 814, 815,
1761 816, 817, 818, 819, 820, 821, 822, 823, 824, 14,
1762 825, 826, 827, 15, 828, 829, 830, 0, 831, 16,
1763 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
1764 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
1765 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
1766 75, 76, 832, 833, 834, 835, 77, 78, 79, 836,
1767 837, 838, 80, 81, 82, 83, 84, 85, 86, 87,
1768 88, 89, 90, 91, 92, 93, 94, 95, 96, 97,
1769 98, 99, 100, 101, 102, 103, 104, 105, 106, 107,
1770 108, 109, 110, 111, 112, 113, 114, 115, 116, 117,
1771 118, 119, 120, 839, 840, 841, 842, 843, 844, 845,
1772 846, 847, 121, 122, 123, 848, 124, 125, 126, 849,
1773 850, 127, 128, 129, 130, 131, 132, 133, 134, 135,
1774 136, 137, 138, 139, 140, 141, 142, 143, 144, 145,
1775 146, 147, 148, 149, 150, 851, 852, 853, 151, 152,
1776 153, 154, 155, 156, 157, 158, 854, 159, 160, 161,
1777 162, 163, 164, 165, 166, 167, 168, 169, 170, 855,
1778 856, 857, 858, 859, 860, 861, 862, 863, 864, 865,
1779 866, 867, 868, 869, 870, 871, 872, 873, 874, 171,
1780 172, 173, 174, 175, 176, 177, 178, 179, 180, 181,
1781 182, 183, 184, 185, 186, 187, 188, 189, 190, 191,
1782 192, 193, 194, 195, 196, 197, 198, 199, 200, 201,
1783 202, 203, 204, 205, 206, 207, 208, 209, 875, 210,
1784 876, 211, 212, 213, 214, 215, 216, 217, 218, 219,
1785 220, 221, 222, 223, 224, 225, 877, 878, 879, 880,
1786 881, 882, 883, 884, 885, 886, 887, 226, 227, 228,
1787 229, 230, 231, 888, 889, 890, 891, 892, 893, 894,
1788 232, 895, 896, 897, 898, 899, 900, 901, 233, 234,
1789 902, 235, 236, 903, 237, 238, 904, 905, 239, 240,
1790 241, 242, 243, 244, 245, 246, 906, 907, 908, 247,
1791 909, 910, 911, 912, 913, 914, 915, 916, 248, 249,
1792 917, 918, 919, 920, 921, 922, 923, 924, 925, 926,
1793 927, 928, 929, 930, 931, 932, 933, 934, 935, 936,
1794 937, 938, 0, 0, 0, 527, 528, 0, 0, 0,
17821795 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1783 0, 0, 0, 523, 524, 525
1796 0, 0, 0, 0, 0, 0, 0, 0, 0, 529,
1797 530, 531
17841798 };
17851799
17861800 static const yytype_int16 yycheck[] =
17871801 {
1788 0, 45, 45, 45, 113, 47, 48, 45, 287, 288,
1789 297, 11, 12, 10, 10, 53, 54, 254, 255, 256,
1790 257, 258, 259, 10, 45, 237, 238, 239, 240, 241,
1791 242, 243, 244, 245, 246, 10, 10, 10, 81, 82,
1802 0, 45, 45, 45, 113, 47, 48, 45, 290, 291,
1803 300, 11, 12, 10, 10, 53, 54, 257, 258, 259,
1804 260, 261, 262, 10, 45, 240, 241, 242, 243, 244,
1805 245, 246, 247, 248, 249, 10, 10, 10, 81, 82,
17921806 10, 10, 10, 10, 10, 10, 46, 10, 10, 10,
17931807 10, 10, 52, 10, 10, 10, 10, 10, 10, 10,
1794 10, 10, 10, 106, 10, 10, 108, 160, 161, 162,
1795 163, 164, 165, 166, 167, 168, 169, 170, 171, 172,
1796 173, 174, 175, 176, 177, 178, 97, 98, 99, 100,
1808 10, 10, 10, 106, 10, 10, 108, 163, 164, 165,
1809 166, 167, 168, 169, 170, 171, 172, 173, 174, 175,
1810 176, 177, 178, 179, 180, 181, 97, 98, 99, 100,
17971811 101, 102, 103, 104, 10, 10, 96, 139, 10, 10,
1798 138, 10, 140, 10, 10, 10, 148, 10, 10, 10,
1812 138, 10, 140, 10, 10, 10, 10, 149, 10, 10,
17991813 10, 10, 112, 10, 10, 10, 10, 10, 10, 10,
18001814 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
1801 10, 10, 10, 10, 10, 10, 10, 180, 181, 10,
18021815 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
1803 10, 10, 10, 10, 10, 10, 10, 10, 10, 159,
1816 183, 184, 10, 10, 10, 10, 10, 10, 10, 10,
18041817 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
1805 10, 10, 10, 10, 10, 10, 10, 220, 10, 10,
1818 10, 10, 162, 10, 10, 10, 10, 10, 10, 10,
1819 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
1820 223, 10, 10, 10, 10, 10, 10, 10, 10, 10,
18061821 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
18071822 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
18081823 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
1809 10, 10, 10, 10, 10, 10, 10, 10, 218, 263,
1810 264, 265, 10, 10, 10, 10, 10, 10, 10, 273,
1811 10, 10, 10, 10, 10, 277, 236, 10, 276, 10,
1812 261, 10, 263, 264, 265, 266, 267, 291, 292, 293,
1813 294, 295, 273, 253, 10, 10, 10, 10, 10, 10,
1814 10, 10, 262, 10, 10, 10, 10, 10, 10, 10,
1824 10, 221, 266, 267, 268, 10, 10, 10, 10, 10,
1825 10, 10, 276, 10, 10, 10, 10, 10, 280, 239,
1826 10, 279, 10, 264, 10, 266, 267, 268, 269, 270,
1827 294, 295, 296, 297, 298, 276, 256, 10, 10, 10,
1828 10, 10, 10, 10, 10, 265, 10, 10, 10, 10,
18151829 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
1816 10, 10, 10, 10, 10, 10, 286, 10, 10, 10,
1817 290, 10, 10, 10, -1, 10, 296, 13, 14, 15,
1818 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
1819 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
1820 36, 37, 38, 39, 40, 41, 42, 43, 44, 10,
1821 10, 10, 10, 49, 50, 51, 10, 10, 10, 55,
1822 56, 57, 58, 59, 60, 61, 62, 63, 64, 65,
1823 66, 67, 68, 69, 70, 71, 72, 73, 74, 75,
1824 76, 77, 78, 79, 80, 81, 82, 83, 84, 85,
1825 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
1826 10, 10, 10, 10, 10, 10, 10, 10, 10, 105,
1827 106, 107, 10, 109, 110, 111, 10, 10, 114, 115,
1828 116, 117, 118, 119, 120, 121, 122, 123, 124, 125,
1829 126, 127, 128, 129, 130, 131, 132, 133, 134, 135,
1830 136, 137, 10, 10, 10, 141, 142, 143, 144, 145,
1831 146, 147, 10, 149, 150, 151, 152, 153, 154, 155,
1832 156, 157, 158, 10, 10, 10, 10, 10, 10, 10,
1830 10, 10, 10, 10, 10, 10, 10, 10, 10, 289,
1831 10, 10, 10, 293, 10, 10, 10, -1, 10, 299,
1832 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
1833 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,
1834 33, 34, 35, 36, 37, 38, 39, 40, 41, 42,
1835 43, 44, 10, 10, 10, 10, 49, 50, 51, 10,
1836 10, 10, 55, 56, 57, 58, 59, 60, 61, 62,
1837 63, 64, 65, 66, 67, 68, 69, 70, 71, 72,
1838 73, 74, 75, 76, 77, 78, 79, 80, 81, 82,
1839 83, 84, 85, 86, 87, 88, 89, 90, 91, 92,
1840 93, 94, 95, 10, 10, 10, 10, 10, 10, 10,
1841 10, 10, 105, 106, 107, 10, 109, 110, 111, 10,
1842 10, 114, 115, 116, 117, 118, 119, 120, 121, 122,
1843 123, 124, 125, 126, 127, 128, 129, 130, 131, 132,
1844 133, 134, 135, 136, 137, 10, 10, 10, 141, 142,
1845 143, 144, 145, 146, 147, 148, 10, 150, 151, 152,
1846 153, 154, 155, 156, 157, 158, 159, 160, 161, 10,
18331847 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
1834 10, 10, 10, 179, 180, 181, 182, 183, 184, 185,
1835 186, 187, 188, 189, 190, 191, 192, 193, 194, 195,
1836 196, 197, 198, 199, 200, 201, 202, 203, 204, 205,
1837 206, 207, 208, 209, 210, 211, 212, 213, 214, 215,
1838 216, 217, 10, 219, 10, 221, 222, 223, 224, 225,
1839 226, 227, 228, 229, 230, 231, 232, 233, 234, 235,
1848 10, 10, 10, 10, 10, 10, 10, 10, 10, 182,
1849 183, 184, 185, 186, 187, 188, 189, 190, 191, 192,
1850 193, 194, 195, 196, 197, 198, 199, 200, 201, 202,
1851 203, 204, 205, 206, 207, 208, 209, 210, 211, 212,
1852 213, 214, 215, 216, 217, 218, 219, 220, 10, 222,
1853 10, 224, 225, 226, 227, 228, 229, 230, 231, 232,
1854 233, 234, 235, 236, 237, 238, 10, 10, 10, 10,
1855 10, 10, 10, 10, 10, 10, 10, 250, 251, 252,
1856 253, 254, 255, 10, 10, 10, 10, 10, 10, 10,
1857 263, 10, 10, 10, 10, 10, 10, 10, 271, 272,
1858 10, 274, 275, 10, 277, 278, 10, 10, 281, 282,
1859 283, 284, 285, 286, 287, 288, 10, 10, 10, 292,
1860 10, 10, 10, 10, 10, 10, 10, 10, 301, 302,
18401861 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
1841 10, 247, 248, 249, 250, 251, 252, 10, 10, 10,
1842 10, 10, 10, 10, 260, 10, 10, 10, 10, 10,
1843 10, 10, 268, 269, 10, 271, 272, 10, 274, 275,
1844 10, 10, 278, 279, 280, 281, 282, 283, 284, 285,
1845 10, 10, 10, 289, 10, 10, 10, 10, 10, 10,
1846 10, 10, 298, 299, 10, 10, 10, 10, 10, 10,
18471862 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
1848 10, 10, 10, 10, 10, 10, -1, -1, -1, 37,
1849 37, -1, -1, -1, -1, -1, -1, -1, -1, -1,
1863 10, 10, -1, -1, -1, 37, 37, -1, -1, -1,
18501864 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
1851 -1, -1, -1, 37, 37, 37
1865 -1, -1, -1, -1, -1, -1, -1, -1, -1, 37,
1866 37, 37
18521867 };
18531868
18541869 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
18551870 symbol of state STATE-NUM. */
18561871 static const yytype_uint16 yystos[] =
18571872 {
1858 0, 301, 0, 11, 12, 46, 52, 96, 112, 159,
1859 218, 236, 253, 262, 286, 290, 296, 302, 303, 304,
1860 307, 310, 313, 316, 324, 552, 563, 585, 589, 597,
1861 610, 620, 305, 308, 311, 314, 317, 325, 553, 564,
1862 586, 590, 598, 611, 621, 13, 14, 15, 16, 17,
1873 0, 304, 0, 11, 12, 46, 52, 96, 112, 162,
1874 221, 239, 256, 265, 289, 293, 299, 305, 306, 307,
1875 310, 313, 316, 319, 327, 558, 569, 591, 595, 603,
1876 616, 626, 308, 311, 314, 317, 320, 328, 559, 570,
1877 592, 596, 604, 617, 627, 13, 14, 15, 16, 17,
18631878 18, 19, 20, 21, 22, 23, 24, 25, 26, 27,
18641879 28, 29, 30, 31, 32, 33, 34, 35, 36, 37,
18651880 38, 39, 40, 41, 42, 43, 44, 49, 50, 51,
18701885 95, 105, 106, 107, 109, 110, 111, 114, 115, 116,
18711886 117, 118, 119, 120, 121, 122, 123, 124, 125, 126,
18721887 127, 128, 129, 130, 131, 132, 133, 134, 135, 136,
1873 137, 141, 142, 143, 144, 145, 146, 147, 149, 150,
1874 151, 152, 153, 154, 155, 156, 157, 158, 179, 180,
1875 181, 182, 183, 184, 185, 186, 187, 188, 189, 190,
1888 137, 141, 142, 143, 144, 145, 146, 147, 148, 150,
1889 151, 152, 153, 154, 155, 156, 157, 158, 159, 160,
1890 161, 182, 183, 184, 185, 186, 187, 188, 189, 190,
18761891 191, 192, 193, 194, 195, 196, 197, 198, 199, 200,
18771892 201, 202, 203, 204, 205, 206, 207, 208, 209, 210,
1878 211, 212, 213, 214, 215, 216, 217, 219, 221, 222,
1879 223, 224, 225, 226, 227, 228, 229, 230, 231, 232,
1880 233, 234, 235, 247, 248, 249, 250, 251, 252, 260,
1881 268, 269, 271, 272, 274, 275, 278, 279, 280, 281,
1882 282, 283, 284, 285, 289, 298, 299, 306, 327, 328,
1883 329, 330, 331, 332, 333, 334, 335, 336, 337, 338,
1893 211, 212, 213, 214, 215, 216, 217, 218, 219, 220,
1894 222, 224, 225, 226, 227, 228, 229, 230, 231, 232,
1895 233, 234, 235, 236, 237, 238, 250, 251, 252, 253,
1896 254, 255, 263, 271, 272, 274, 275, 277, 278, 281,
1897 282, 283, 284, 285, 286, 287, 288, 292, 301, 302,
1898 309, 330, 331, 332, 333, 334, 335, 336, 337, 338,
18841899 339, 340, 341, 342, 343, 344, 345, 346, 347, 348,
18851900 349, 350, 351, 352, 353, 354, 355, 356, 357, 358,
18861901 359, 360, 361, 362, 363, 364, 365, 366, 367, 368,
18991914 489, 490, 491, 492, 493, 494, 495, 496, 497, 498,
19001915 499, 500, 501, 502, 503, 504, 505, 506, 507, 508,
19011916 509, 510, 511, 512, 513, 514, 515, 516, 517, 518,
1902 519, 520, 521, 522, 523, 593, 594, 595, 596, 619,
1903 45, 47, 48, 108, 139, 148, 277, 309, 524, 525,
1904 526, 527, 528, 529, 530, 45, 53, 54, 138, 140,
1905 276, 312, 531, 532, 533, 534, 535, 536, 45, 81,
1906 82, 106, 180, 181, 220, 315, 545, 546, 547, 548,
1907 549, 550, 551, 45, 261, 263, 264, 265, 266, 267,
1908 273, 318, 537, 538, 539, 540, 541, 542, 543, 544,
1909 291, 292, 293, 294, 295, 319, 320, 321, 322, 323,
1910 326, 537, 538, 539, 540, 541, 97, 98, 99, 100,
1911 101, 102, 103, 104, 554, 555, 556, 557, 558, 559,
1912 560, 561, 562, 160, 161, 162, 163, 164, 165, 166,
1913 167, 168, 169, 170, 171, 172, 173, 174, 175, 176,
1914 177, 178, 565, 566, 567, 568, 569, 570, 571, 572,
1917 519, 520, 521, 522, 523, 524, 525, 526, 527, 528,
1918 529, 599, 600, 601, 602, 625, 45, 47, 48, 108,
1919 139, 149, 280, 312, 530, 531, 532, 533, 534, 535,
1920 536, 45, 53, 54, 138, 140, 279, 315, 537, 538,
1921 539, 540, 541, 542, 45, 81, 82, 106, 183, 184,
1922 223, 318, 551, 552, 553, 554, 555, 556, 557, 45,
1923 264, 266, 267, 268, 269, 270, 276, 321, 543, 544,
1924 545, 546, 547, 548, 549, 550, 294, 295, 296, 297,
1925 298, 322, 323, 324, 325, 326, 329, 543, 544, 545,
1926 546, 547, 97, 98, 99, 100, 101, 102, 103, 104,
1927 560, 561, 562, 563, 564, 565, 566, 567, 568, 163,
1928 164, 165, 166, 167, 168, 169, 170, 171, 172, 173,
1929 174, 175, 176, 177, 178, 179, 180, 181, 571, 572,
19151930 573, 574, 575, 576, 577, 578, 579, 580, 581, 582,
1916 583, 584, 113, 587, 588, 297, 591, 592, 237, 238,
1917 239, 240, 241, 242, 243, 244, 245, 246, 599, 600,
1918 601, 602, 603, 604, 605, 606, 607, 608, 609, 254,
1919 255, 256, 257, 258, 259, 612, 613, 614, 615, 616,
1920 617, 618, 287, 288, 622, 623, 624, 10, 10, 10,
1931 583, 584, 585, 586, 587, 588, 589, 590, 113, 593,
1932 594, 300, 597, 598, 240, 241, 242, 243, 244, 245,
1933 246, 247, 248, 249, 605, 606, 607, 608, 609, 610,
1934 611, 612, 613, 614, 615, 257, 258, 259, 260, 261,
1935 262, 618, 619, 620, 621, 622, 623, 624, 290, 291,
1936 628, 629, 630, 10, 10, 10, 10, 10, 10, 10,
19211937 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
19221938 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
19231939 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
19471963 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
19481964 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
19491965 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
1950 10, 10, 10, 10, 10, 10, 10, 10, 10, 10
1966 10, 10, 10, 10, 10, 10, 10, 10, 10
19511967 };
19521968
19531969 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
19541970 static const yytype_uint16 yyr1[] =
19551971 {
1956 0, 300, 301, 301, 302, 302, 302, 302, 302, 302,
1957 302, 302, 302, 302, 302, 302, 302, 302, 303, 304,
1958 305, 305, 306, 306, 306, 306, 306, 306, 306, 306,
1959 306, 306, 306, 306, 306, 306, 306, 306, 306, 306,
1960 306, 306, 306, 306, 306, 306, 306, 306, 306, 306,
1961 306, 306, 306, 306, 306, 306, 306, 306, 306, 306,
1962 306, 306, 306, 306, 306, 306, 306, 306, 306, 306,
1963 306, 306, 306, 306, 306, 306, 306, 306, 306, 306,
1964 306, 306, 306, 306, 306, 306, 306, 306, 306, 306,
1965 306, 306, 306, 306, 306, 306, 306, 306, 306, 306,
1966 306, 306, 306, 306, 306, 306, 306, 306, 306, 306,
1967 306, 306, 306, 306, 306, 306, 306, 306, 306, 306,
1968 306, 306, 306, 306, 306, 306, 306, 306, 306, 306,
1969 306, 306, 306, 306, 306, 306, 306, 306, 306, 306,
1970 306, 306, 306, 306, 306, 306, 306, 306, 306, 306,
1971 306, 306, 306, 306, 306, 306, 306, 306, 306, 306,
1972 306, 306, 306, 306, 306, 306, 306, 306, 306, 306,
1973 306, 306, 306, 306, 306, 306, 306, 306, 306, 306,
1974 306, 306, 306, 306, 306, 306, 306, 306, 306, 306,
1975 306, 306, 306, 306, 306, 306, 306, 306, 306, 306,
1976 306, 306, 306, 306, 306, 306, 306, 306, 306, 306,
1977 306, 306, 306, 306, 306, 306, 306, 306, 306, 306,
1978 306, 306, 306, 306, 307, 308, 308, 309, 309, 309,
1979 309, 309, 309, 309, 310, 311, 311, 312, 312, 312,
1980 312, 312, 312, 313, 314, 314, 315, 315, 315, 315,
1981 315, 315, 315, 316, 317, 317, 318, 318, 318, 318,
1982 318, 318, 318, 318, 319, 320, 321, 322, 323, 324,
1983 325, 325, 326, 326, 326, 326, 326, 326, 326, 326,
1984 326, 326, 327, 328, 329, 330, 331, 332, 333, 334,
1972 0, 303, 304, 304, 305, 305, 305, 305, 305, 305,
1973 305, 305, 305, 305, 305, 305, 305, 305, 306, 307,
1974 308, 308, 309, 309, 309, 309, 309, 309, 309, 309,
1975 309, 309, 309, 309, 309, 309, 309, 309, 309, 309,
1976 309, 309, 309, 309, 309, 309, 309, 309, 309, 309,
1977 309, 309, 309, 309, 309, 309, 309, 309, 309, 309,
1978 309, 309, 309, 309, 309, 309, 309, 309, 309, 309,
1979 309, 309, 309, 309, 309, 309, 309, 309, 309, 309,
1980 309, 309, 309, 309, 309, 309, 309, 309, 309, 309,
1981 309, 309, 309, 309, 309, 309, 309, 309, 309, 309,
1982 309, 309, 309, 309, 309, 309, 309, 309, 309, 309,
1983 309, 309, 309, 309, 309, 309, 309, 309, 309, 309,
1984 309, 309, 309, 309, 309, 309, 309, 309, 309, 309,
1985 309, 309, 309, 309, 309, 309, 309, 309, 309, 309,
1986 309, 309, 309, 309, 309, 309, 309, 309, 309, 309,
1987 309, 309, 309, 309, 309, 309, 309, 309, 309, 309,
1988 309, 309, 309, 309, 309, 309, 309, 309, 309, 309,
1989 309, 309, 309, 309, 309, 309, 309, 309, 309, 309,
1990 309, 309, 309, 309, 309, 309, 309, 309, 309, 309,
1991 309, 309, 309, 309, 309, 309, 309, 309, 309, 309,
1992 309, 309, 309, 309, 309, 309, 309, 309, 309, 309,
1993 309, 309, 309, 309, 309, 309, 309, 309, 309, 309,
1994 309, 309, 309, 309, 309, 309, 309, 310, 311, 311,
1995 312, 312, 312, 312, 312, 312, 312, 313, 314, 314,
1996 315, 315, 315, 315, 315, 315, 316, 317, 317, 318,
1997 318, 318, 318, 318, 318, 318, 319, 320, 320, 321,
1998 321, 321, 321, 321, 321, 321, 321, 322, 323, 324,
1999 325, 326, 327, 328, 328, 329, 329, 329, 329, 329,
2000 329, 329, 329, 329, 329, 330, 331, 332, 333, 334,
19852001 335, 336, 337, 338, 339, 340, 341, 342, 343, 344,
19862002 345, 346, 347, 348, 349, 350, 351, 352, 353, 354,
19872003 355, 356, 357, 358, 359, 360, 361, 362, 363, 364,
20032019 515, 516, 517, 518, 519, 520, 521, 522, 523, 524,
20042020 525, 526, 527, 528, 529, 530, 531, 532, 533, 534,
20052021 535, 536, 537, 538, 539, 540, 541, 542, 543, 544,
2006 545, 546, 547, 548, 549, 550, 551, 552, 553, 553,
2007 554, 554, 554, 554, 554, 554, 554, 554, 555, 556,
2008 557, 558, 559, 560, 561, 562, 563, 564, 564, 565,
2009 565, 565, 565, 565, 565, 565, 565, 565, 565, 565,
2010 565, 565, 565, 565, 565, 565, 565, 565, 566, 567,
2011 568, 569, 570, 571, 572, 573, 574, 575, 576, 577,
2012 578, 579, 580, 581, 582, 583, 584, 585, 586, 586,
2013 587, 588, 589, 590, 590, 591, 592, 593, 594, 595,
2014 596, 597, 598, 598, 599, 599, 599, 599, 599, 599,
2015 599, 599, 599, 599, 600, 601, 602, 603, 604, 605,
2016 606, 607, 608, 609, 610, 611, 611, 612, 612, 612,
2017 612, 612, 612, 613, 614, 615, 616, 617, 618, 619,
2018 620, 621, 621, 622, 622, 623, 624
2022 545, 546, 547, 548, 549, 550, 551, 552, 553, 554,
2023 555, 556, 557, 558, 559, 559, 560, 560, 560, 560,
2024 560, 560, 560, 560, 561, 562, 563, 564, 565, 566,
2025 567, 568, 569, 570, 570, 571, 571, 571, 571, 571,
2026 571, 571, 571, 571, 571, 571, 571, 571, 571, 571,
2027 571, 571, 571, 571, 572, 573, 574, 575, 576, 577,
2028 578, 579, 580, 581, 582, 583, 584, 585, 586, 587,
2029 588, 589, 590, 591, 592, 592, 593, 594, 595, 596,
2030 596, 597, 598, 599, 600, 601, 602, 603, 604, 604,
2031 605, 605, 605, 605, 605, 605, 605, 605, 605, 605,
2032 606, 607, 608, 609, 610, 611, 612, 613, 614, 615,
2033 616, 617, 617, 618, 618, 618, 618, 618, 618, 619,
2034 620, 621, 622, 623, 624, 625, 626, 627, 627, 628,
2035 628, 629, 630
20192036 };
20202037
20212038 /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */
20432060 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
20442061 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
20452062 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2046 1, 1, 1, 1, 1, 2, 0, 1, 1, 1,
2047 1, 1, 1, 1, 1, 2, 0, 1, 1, 1,
2048 1, 1, 1, 1, 2, 0, 1, 1, 1, 1,
2049 1, 1, 1, 1, 2, 0, 1, 1, 1, 1,
2050 1, 1, 1, 1, 2, 2, 2, 2, 2, 1,
2051 2, 0, 1, 1, 1, 1, 1, 1, 1, 1,
2052 1, 1, 2, 2, 2, 2, 2, 2, 2, 2,
2063 1, 1, 1, 1, 1, 1, 1, 1, 2, 0,
2064 1, 1, 1, 1, 1, 1, 1, 1, 2, 0,
2065 1, 1, 1, 1, 1, 1, 1, 2, 0, 1,
2066 1, 1, 1, 1, 1, 1, 1, 2, 0, 1,
2067 1, 1, 1, 1, 1, 1, 1, 2, 2, 2,
2068 2, 2, 1, 2, 0, 1, 1, 1, 1, 1,
2069 1, 1, 1, 1, 1, 2, 2, 2, 2, 2,
20532070 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
20542071 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
20552072 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
20612078 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
20622079 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
20632080 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2064 2, 2, 2, 2, 2, 2, 2, 2, 2, 3,
2081 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2082 2, 2, 2, 2, 2, 3, 2, 2, 2, 2,
20652083 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
20662084 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2067 2, 2, 2, 2, 2, 2, 2, 2, 3, 2,
2068 2, 2, 2, 2, 2, 2, 2, 2, 2, 3,
2069 3, 4, 4, 4, 3, 3, 2, 2, 2, 2,
2070 2, 2, 3, 3, 2, 2, 2, 2, 2, 2,
2071 2, 2, 2, 2, 2, 2, 2, 3, 2, 2,
2085 2, 2, 2, 2, 3, 2, 2, 2, 2, 2,
2086 2, 2, 2, 2, 2, 3, 3, 4, 4, 4,
2087 3, 3, 2, 2, 2, 2, 2, 2, 3, 3,
20722088 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2089 2, 2, 2, 3, 2, 2, 2, 2, 2, 2,
20732090 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2074 2, 3, 3, 3, 2, 2, 2, 1, 2, 0,
2075 1, 1, 1, 1, 1, 1, 1, 1, 2, 2,
2076 2, 2, 2, 2, 2, 2, 1, 2, 0, 1,
2091 2, 2, 2, 2, 2, 2, 2, 3, 3, 3,
2092 2, 2, 2, 1, 2, 0, 1, 1, 1, 1,
2093 1, 1, 1, 1, 2, 2, 2, 2, 2, 2,
2094 2, 2, 1, 2, 0, 1, 1, 1, 1, 1,
20772095 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2078 1, 1, 1, 1, 1, 1, 1, 1, 2, 2,
2096 1, 1, 1, 1, 2, 2, 2, 2, 2, 2,
20792097 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2080 2, 2, 2, 2, 2, 2, 2, 1, 2, 0,
2081 1, 2, 1, 2, 0, 1, 2, 2, 2, 3,
2082 3, 1, 2, 0, 1, 1, 1, 1, 1, 1,
2083 1, 1, 1, 1, 2, 2, 2, 2, 2, 2,
2084 2, 2, 2, 2, 1, 2, 0, 1, 1, 1,
2085 1, 1, 1, 2, 2, 2, 2, 2, 2, 3,
2086 1, 2, 0, 1, 1, 2, 2
2098 2, 2, 2, 1, 2, 0, 1, 2, 1, 2,
2099 0, 1, 2, 2, 2, 3, 3, 1, 2, 0,
2100 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2101 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2102 1, 2, 0, 1, 1, 1, 1, 1, 1, 2,
2103 2, 2, 2, 2, 2, 3, 1, 2, 0, 1,
2104 1, 2, 2
20872105 };
20882106
20892107
27682786 switch (yyn)
27692787 {
27702788 case 18:
2771 #line 194 "util/configparser.y"
2789 #line 195 "util/configparser.y"
27722790 {
27732791 OUTYY(("\nP(force-toplevel)\n"));
27742792 }
2775 #line 2777 "util/configparser.c"
2793 #line 2795 "util/configparser.c"
27762794 break;
27772795
27782796 case 19:
2779 #line 200 "util/configparser.y"
2797 #line 201 "util/configparser.y"
27802798 {
27812799 OUTYY(("\nP(server:)\n"));
27822800 }
2783 #line 2785 "util/configparser.c"
2784 break;
2785
2786 case 224:
2787 #line 298 "util/configparser.y"
2801 #line 2803 "util/configparser.c"
2802 break;
2803
2804 case 227:
2805 #line 299 "util/configparser.y"
27882806 {
27892807 struct config_stub* s;
27902808 OUTYY(("\nP(stub_zone:)\n"));
27952813 } else
27962814 yyerror("out of memory");
27972815 }
2798 #line 2800 "util/configparser.c"
2799 break;
2800
2801 case 234:
2802 #line 315 "util/configparser.y"
2816 #line 2818 "util/configparser.c"
2817 break;
2818
2819 case 237:
2820 #line 316 "util/configparser.y"
28032821 {
28042822 struct config_stub* s;
28052823 OUTYY(("\nP(forward_zone:)\n"));
28102828 } else
28112829 yyerror("out of memory");
28122830 }
2813 #line 2815 "util/configparser.c"
2814 break;
2815
2816 case 243:
2817 #line 332 "util/configparser.y"
2831 #line 2833 "util/configparser.c"
2832 break;
2833
2834 case 246:
2835 #line 333 "util/configparser.y"
28182836 {
28192837 struct config_view* s;
28202838 OUTYY(("\nP(view:)\n"));
28272845 } else
28282846 yyerror("out of memory");
28292847 }
2830 #line 2832 "util/configparser.c"
2831 break;
2832
2833 case 253:
2834 #line 351 "util/configparser.y"
2848 #line 2850 "util/configparser.c"
2849 break;
2850
2851 case 256:
2852 #line 352 "util/configparser.y"
28352853 {
28362854 struct config_auth* s;
28372855 OUTYY(("\nP(auth_zone:)\n"));
28472865 } else
28482866 yyerror("out of memory");
28492867 }
2850 #line 2852 "util/configparser.c"
2851 break;
2852
2853 case 264:
2854 #line 375 "util/configparser.y"
2868 #line 2870 "util/configparser.c"
2869 break;
2870
2871 case 267:
2872 #line 376 "util/configparser.y"
28552873 {
28562874 uint8_t* bitlist;
28572875 size_t len = 0;
28682886
28692887 }
28702888 }
2871 #line 2873 "util/configparser.c"
2872 break;
2873
2874 case 265:
2875 #line 394 "util/configparser.y"
2889 #line 2891 "util/configparser.c"
2890 break;
2891
2892 case 268:
2893 #line 395 "util/configparser.y"
28762894 {
28772895 OUTYY(("P(rpz_action_override:%s)\n", (yyvsp[0].str)));
28782896 if(strcmp((yyvsp[0].str), "nxdomain")!=0 && strcmp((yyvsp[0].str), "nodata")!=0 &&
28872905 cfg_parser->cfg->auths->rpz_action_override = (yyvsp[0].str);
28882906 }
28892907 }
2890 #line 2892 "util/configparser.c"
2891 break;
2892
2893 case 266:
2894 #line 411 "util/configparser.y"
2908 #line 2910 "util/configparser.c"
2909 break;
2910
2911 case 269:
2912 #line 412 "util/configparser.y"
28952913 {
28962914 OUTYY(("P(rpz_cname_override:%s)\n", (yyvsp[0].str)));
28972915 free(cfg_parser->cfg->auths->rpz_cname);
28982916 cfg_parser->cfg->auths->rpz_cname = (yyvsp[0].str);
28992917 }
2900 #line 2902 "util/configparser.c"
2901 break;
2902
2903 case 267:
2904 #line 419 "util/configparser.y"
2918 #line 2920 "util/configparser.c"
2919 break;
2920
2921 case 270:
2922 #line 420 "util/configparser.y"
29052923 {
29062924 OUTYY(("P(rpz_log:%s)\n", (yyvsp[0].str)));
29072925 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
29092927 else cfg_parser->cfg->auths->rpz_log = (strcmp((yyvsp[0].str), "yes")==0);
29102928 free((yyvsp[0].str));
29112929 }
2912 #line 2914 "util/configparser.c"
2913 break;
2914
2915 case 268:
2916 #line 429 "util/configparser.y"
2930 #line 2932 "util/configparser.c"
2931 break;
2932
2933 case 271:
2934 #line 430 "util/configparser.y"
29172935 {
29182936 OUTYY(("P(rpz_log_name:%s)\n", (yyvsp[0].str)));
29192937 free(cfg_parser->cfg->auths->rpz_log_name);
29202938 cfg_parser->cfg->auths->rpz_log_name = (yyvsp[0].str);
29212939 }
2922 #line 2924 "util/configparser.c"
2923 break;
2924
2925 case 269:
2926 #line 437 "util/configparser.y"
2940 #line 2942 "util/configparser.c"
2941 break;
2942
2943 case 272:
2944 #line 438 "util/configparser.y"
29272945 {
29282946 struct config_auth* s;
29292947 OUTYY(("\nP(rpz:)\n"));
29392957 } else
29402958 yyerror("out of memory");
29412959 }
2942 #line 2944 "util/configparser.c"
2943 break;
2944
2945 case 282:
2946 #line 460 "util/configparser.y"
2960 #line 2962 "util/configparser.c"
2961 break;
2962
2963 case 285:
2964 #line 461 "util/configparser.y"
29472965 {
29482966 OUTYY(("P(server_num_threads:%s)\n", (yyvsp[0].str)));
29492967 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
29512969 else cfg_parser->cfg->num_threads = atoi((yyvsp[0].str));
29522970 free((yyvsp[0].str));
29532971 }
2954 #line 2956 "util/configparser.c"
2955 break;
2956
2957 case 283:
2958 #line 469 "util/configparser.y"
2972 #line 2974 "util/configparser.c"
2973 break;
2974
2975 case 286:
2976 #line 470 "util/configparser.y"
29592977 {
29602978 OUTYY(("P(server_verbosity:%s)\n", (yyvsp[0].str)));
29612979 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
29632981 else cfg_parser->cfg->verbosity = atoi((yyvsp[0].str));
29642982 free((yyvsp[0].str));
29652983 }
2966 #line 2968 "util/configparser.c"
2967 break;
2968
2969 case 284:
2970 #line 478 "util/configparser.y"
2984 #line 2986 "util/configparser.c"
2985 break;
2986
2987 case 287:
2988 #line 479 "util/configparser.y"
29712989 {
29722990 OUTYY(("P(server_statistics_interval:%s)\n", (yyvsp[0].str)));
29732991 if(strcmp((yyvsp[0].str), "") == 0 || strcmp((yyvsp[0].str), "0") == 0)
29772995 else cfg_parser->cfg->stat_interval = atoi((yyvsp[0].str));
29782996 free((yyvsp[0].str));
29792997 }
2980 #line 2982 "util/configparser.c"
2981 break;
2982
2983 case 285:
2984 #line 489 "util/configparser.y"
2998 #line 3000 "util/configparser.c"
2999 break;
3000
3001 case 288:
3002 #line 490 "util/configparser.y"
29853003 {
29863004 OUTYY(("P(server_statistics_cumulative:%s)\n", (yyvsp[0].str)));
29873005 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
29893007 else cfg_parser->cfg->stat_cumulative = (strcmp((yyvsp[0].str), "yes")==0);
29903008 free((yyvsp[0].str));
29913009 }
2992 #line 2994 "util/configparser.c"
2993 break;
2994
2995 case 286:
2996 #line 498 "util/configparser.y"
3010 #line 3012 "util/configparser.c"
3011 break;
3012
3013 case 289:
3014 #line 499 "util/configparser.y"
29973015 {
29983016 OUTYY(("P(server_extended_statistics:%s)\n", (yyvsp[0].str)));
29993017 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
30013019 else cfg_parser->cfg->stat_extended = (strcmp((yyvsp[0].str), "yes")==0);
30023020 free((yyvsp[0].str));
30033021 }
3004 #line 3006 "util/configparser.c"
3005 break;
3006
3007 case 287:
3008 #line 507 "util/configparser.y"
3022 #line 3024 "util/configparser.c"
3023 break;
3024
3025 case 290:
3026 #line 508 "util/configparser.y"
30093027 {
30103028 OUTYY(("P(server_shm_enable:%s)\n", (yyvsp[0].str)));
30113029 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
30133031 else cfg_parser->cfg->shm_enable = (strcmp((yyvsp[0].str), "yes")==0);
30143032 free((yyvsp[0].str));
30153033 }
3016 #line 3018 "util/configparser.c"
3017 break;
3018
3019 case 288:
3020 #line 516 "util/configparser.y"
3034 #line 3036 "util/configparser.c"
3035 break;
3036
3037 case 291:
3038 #line 517 "util/configparser.y"
30213039 {
30223040 OUTYY(("P(server_shm_key:%s)\n", (yyvsp[0].str)));
30233041 if(strcmp((yyvsp[0].str), "") == 0 || strcmp((yyvsp[0].str), "0") == 0)
30273045 else cfg_parser->cfg->shm_key = atoi((yyvsp[0].str));
30283046 free((yyvsp[0].str));
30293047 }
3030 #line 3032 "util/configparser.c"
3031 break;
3032
3033 case 289:
3034 #line 527 "util/configparser.y"
3048 #line 3050 "util/configparser.c"
3049 break;
3050
3051 case 292:
3052 #line 528 "util/configparser.y"
30353053 {
30363054 OUTYY(("P(server_port:%s)\n", (yyvsp[0].str)));
30373055 if(atoi((yyvsp[0].str)) == 0)
30393057 else cfg_parser->cfg->port = atoi((yyvsp[0].str));
30403058 free((yyvsp[0].str));
30413059 }
3042 #line 3044 "util/configparser.c"
3043 break;
3044
3045 case 290:
3046 #line 536 "util/configparser.y"
3060 #line 3062 "util/configparser.c"
3061 break;
3062
3063 case 293:
3064 #line 537 "util/configparser.y"
30473065 {
30483066 #ifdef CLIENT_SUBNET
30493067 OUTYY(("P(server_send_client_subnet:%s)\n", (yyvsp[0].str)));
30543072 free((yyvsp[0].str));
30553073 #endif
30563074 }
3057 #line 3059 "util/configparser.c"
3058 break;
3059
3060 case 291:
3061 #line 548 "util/configparser.y"
3075 #line 3077 "util/configparser.c"
3076 break;
3077
3078 case 294:
3079 #line 549 "util/configparser.y"
30623080 {
30633081 #ifdef CLIENT_SUBNET
30643082 OUTYY(("P(server_client_subnet_zone:%s)\n", (yyvsp[0].str)));
30703088 free((yyvsp[0].str));
30713089 #endif
30723090 }
3073 #line 3075 "util/configparser.c"
3074 break;
3075
3076 case 292:
3077 #line 562 "util/configparser.y"
3091 #line 3093 "util/configparser.c"
3092 break;
3093
3094 case 295:
3095 #line 563 "util/configparser.y"
30783096 {
30793097 #ifdef CLIENT_SUBNET
30803098 OUTYY(("P(server_client_subnet_always_forward:%s)\n", (yyvsp[0].str)));
30883106 #endif
30893107 free((yyvsp[0].str));
30903108 }
3091 #line 3093 "util/configparser.c"
3092 break;
3093
3094 case 293:
3095 #line 577 "util/configparser.y"
3109 #line 3111 "util/configparser.c"
3110 break;
3111
3112 case 296:
3113 #line 578 "util/configparser.y"
30963114 {
30973115 #ifdef CLIENT_SUBNET
30983116 OUTYY(("P(client_subnet_opcode:%s)\n", (yyvsp[0].str)));
31023120 #endif
31033121 free((yyvsp[0].str));
31043122 }
3105 #line 3107 "util/configparser.c"
3106 break;
3107
3108 case 294:
3109 #line 588 "util/configparser.y"
3123 #line 3125 "util/configparser.c"
3124 break;
3125
3126 case 297:
3127 #line 589 "util/configparser.y"
31103128 {
31113129 #ifdef CLIENT_SUBNET
31123130 OUTYY(("P(max_client_subnet_ipv4:%s)\n", (yyvsp[0].str)));
31223140 #endif
31233141 free((yyvsp[0].str));
31243142 }
3125 #line 3127 "util/configparser.c"
3126 break;
3127
3128 case 295:
3129 #line 605 "util/configparser.y"
3143 #line 3145 "util/configparser.c"
3144 break;
3145
3146 case 298:
3147 #line 606 "util/configparser.y"
31303148 {
31313149 #ifdef CLIENT_SUBNET
31323150 OUTYY(("P(max_client_subnet_ipv6:%s)\n", (yyvsp[0].str)));
31423160 #endif
31433161 free((yyvsp[0].str));
31443162 }
3145 #line 3147 "util/configparser.c"
3146 break;
3147
3148 case 296:
3149 #line 622 "util/configparser.y"
3163 #line 3165 "util/configparser.c"
3164 break;
3165
3166 case 299:
3167 #line 623 "util/configparser.y"
31503168 {
31513169 #ifdef CLIENT_SUBNET
31523170 OUTYY(("P(min_client_subnet_ipv4:%s)\n", (yyvsp[0].str)));
31623180 #endif
31633181 free((yyvsp[0].str));
31643182 }
3165 #line 3167 "util/configparser.c"
3166 break;
3167
3168 case 297:
3169 #line 639 "util/configparser.y"
3183 #line 3185 "util/configparser.c"
3184 break;
3185
3186 case 300:
3187 #line 640 "util/configparser.y"
31703188 {
31713189 #ifdef CLIENT_SUBNET
31723190 OUTYY(("P(min_client_subnet_ipv6:%s)\n", (yyvsp[0].str)));
31823200 #endif
31833201 free((yyvsp[0].str));
31843202 }
3185 #line 3187 "util/configparser.c"
3186 break;
3187
3188 case 298:
3189 #line 656 "util/configparser.y"
3203 #line 3205 "util/configparser.c"
3204 break;
3205
3206 case 301:
3207 #line 657 "util/configparser.y"
31903208 {
31913209 #ifdef CLIENT_SUBNET
31923210 OUTYY(("P(max_ecs_tree_size_ipv4:%s)\n", (yyvsp[0].str)));
32003218 #endif
32013219 free((yyvsp[0].str));
32023220 }
3203 #line 3205 "util/configparser.c"
3204 break;
3205
3206 case 299:
3207 #line 671 "util/configparser.y"
3221 #line 3223 "util/configparser.c"
3222 break;
3223
3224 case 302:
3225 #line 672 "util/configparser.y"
32083226 {
32093227 #ifdef CLIENT_SUBNET
32103228 OUTYY(("P(max_ecs_tree_size_ipv6:%s)\n", (yyvsp[0].str)));
32183236 #endif
32193237 free((yyvsp[0].str));
32203238 }
3221 #line 3223 "util/configparser.c"
3222 break;
3223
3224 case 300:
3225 #line 686 "util/configparser.y"
3239 #line 3241 "util/configparser.c"
3240 break;
3241
3242 case 303:
3243 #line 687 "util/configparser.y"
32263244 {
32273245 OUTYY(("P(server_interface:%s)\n", (yyvsp[0].str)));
32283246 if(cfg_parser->cfg->num_ifs == 0)
32343252 else
32353253 cfg_parser->cfg->ifs[cfg_parser->cfg->num_ifs++] = (yyvsp[0].str);
32363254 }
3237 #line 3239 "util/configparser.c"
3238 break;
3239
3240 case 301:
3241 #line 699 "util/configparser.y"
3255 #line 3257 "util/configparser.c"
3256 break;
3257
3258 case 304:
3259 #line 700 "util/configparser.y"
32423260 {
32433261 OUTYY(("P(server_outgoing_interface:%s)\n", (yyvsp[0].str)));
32443262 if(cfg_parser->cfg->num_out_ifs == 0)
32523270 cfg_parser->cfg->out_ifs[
32533271 cfg_parser->cfg->num_out_ifs++] = (yyvsp[0].str);
32543272 }
3255 #line 3257 "util/configparser.c"
3256 break;
3257
3258 case 302:
3259 #line 714 "util/configparser.y"
3273 #line 3275 "util/configparser.c"
3274 break;
3275
3276 case 305:
3277 #line 715 "util/configparser.y"
32603278 {
32613279 OUTYY(("P(server_outgoing_range:%s)\n", (yyvsp[0].str)));
32623280 if(atoi((yyvsp[0].str)) == 0)
32643282 else cfg_parser->cfg->outgoing_num_ports = atoi((yyvsp[0].str));
32653283 free((yyvsp[0].str));
32663284 }
3267 #line 3269 "util/configparser.c"
3268 break;
3269
3270 case 303:
3271 #line 723 "util/configparser.y"
3285 #line 3287 "util/configparser.c"
3286 break;
3287
3288 case 306:
3289 #line 724 "util/configparser.y"
32723290 {
32733291 OUTYY(("P(server_outgoing_port_permit:%s)\n", (yyvsp[0].str)));
32743292 if(!cfg_mark_ports((yyvsp[0].str), 1,
32763294 yyerror("port number or range (\"low-high\") expected");
32773295 free((yyvsp[0].str));
32783296 }
3279 #line 3281 "util/configparser.c"
3280 break;
3281
3282 case 304:
3283 #line 732 "util/configparser.y"
3297 #line 3299 "util/configparser.c"
3298 break;
3299
3300 case 307:
3301 #line 733 "util/configparser.y"
32843302 {
32853303 OUTYY(("P(server_outgoing_port_avoid:%s)\n", (yyvsp[0].str)));
32863304 if(!cfg_mark_ports((yyvsp[0].str), 0,
32883306 yyerror("port number or range (\"low-high\") expected");
32893307 free((yyvsp[0].str));
32903308 }
3291 #line 3293 "util/configparser.c"
3292 break;
3293
3294 case 305:
3295 #line 741 "util/configparser.y"
3309 #line 3311 "util/configparser.c"
3310 break;
3311
3312 case 308:
3313 #line 742 "util/configparser.y"
32963314 {
32973315 OUTYY(("P(server_outgoing_num_tcp:%s)\n", (yyvsp[0].str)));
32983316 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
33003318 else cfg_parser->cfg->outgoing_num_tcp = atoi((yyvsp[0].str));
33013319 free((yyvsp[0].str));
33023320 }
3303 #line 3305 "util/configparser.c"
3304 break;
3305
3306 case 306:
3307 #line 750 "util/configparser.y"
3321 #line 3323 "util/configparser.c"
3322 break;
3323
3324 case 309:
3325 #line 751 "util/configparser.y"
33083326 {
33093327 OUTYY(("P(server_incoming_num_tcp:%s)\n", (yyvsp[0].str)));
33103328 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
33123330 else cfg_parser->cfg->incoming_num_tcp = atoi((yyvsp[0].str));
33133331 free((yyvsp[0].str));
33143332 }
3315 #line 3317 "util/configparser.c"
3316 break;
3317
3318 case 307:
3319 #line 759 "util/configparser.y"
3333 #line 3335 "util/configparser.c"
3334 break;
3335
3336 case 310:
3337 #line 760 "util/configparser.y"
33203338 {
33213339 OUTYY(("P(server_interface_automatic:%s)\n", (yyvsp[0].str)));
33223340 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
33243342 else cfg_parser->cfg->if_automatic = (strcmp((yyvsp[0].str), "yes")==0);
33253343 free((yyvsp[0].str));
33263344 }
3327 #line 3329 "util/configparser.c"
3328 break;
3329
3330 case 308:
3331 #line 768 "util/configparser.y"
3345 #line 3347 "util/configparser.c"
3346 break;
3347
3348 case 311:
3349 #line 769 "util/configparser.y"
33323350 {
33333351 OUTYY(("P(server_do_ip4:%s)\n", (yyvsp[0].str)));
33343352 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
33363354 else cfg_parser->cfg->do_ip4 = (strcmp((yyvsp[0].str), "yes")==0);
33373355 free((yyvsp[0].str));
33383356 }
3339 #line 3341 "util/configparser.c"
3340 break;
3341
3342 case 309:
3343 #line 777 "util/configparser.y"
3357 #line 3359 "util/configparser.c"
3358 break;
3359
3360 case 312:
3361 #line 778 "util/configparser.y"
33443362 {
33453363 OUTYY(("P(server_do_ip6:%s)\n", (yyvsp[0].str)));
33463364 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
33483366 else cfg_parser->cfg->do_ip6 = (strcmp((yyvsp[0].str), "yes")==0);
33493367 free((yyvsp[0].str));
33503368 }
3351 #line 3353 "util/configparser.c"
3352 break;
3353
3354 case 310:
3355 #line 786 "util/configparser.y"
3369 #line 3371 "util/configparser.c"
3370 break;
3371
3372 case 313:
3373 #line 787 "util/configparser.y"
33563374 {
33573375 OUTYY(("P(server_do_udp:%s)\n", (yyvsp[0].str)));
33583376 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
33603378 else cfg_parser->cfg->do_udp = (strcmp((yyvsp[0].str), "yes")==0);
33613379 free((yyvsp[0].str));
33623380 }
3363 #line 3365 "util/configparser.c"
3364 break;
3365
3366 case 311:
3367 #line 795 "util/configparser.y"
3381 #line 3383 "util/configparser.c"
3382 break;
3383
3384 case 314:
3385 #line 796 "util/configparser.y"
33683386 {
33693387 OUTYY(("P(server_do_tcp:%s)\n", (yyvsp[0].str)));
33703388 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
33723390 else cfg_parser->cfg->do_tcp = (strcmp((yyvsp[0].str), "yes")==0);
33733391 free((yyvsp[0].str));
33743392 }
3375 #line 3377 "util/configparser.c"
3376 break;
3377
3378 case 312:
3379 #line 804 "util/configparser.y"
3393 #line 3395 "util/configparser.c"
3394 break;
3395
3396 case 315:
3397 #line 805 "util/configparser.y"
33803398 {
33813399 OUTYY(("P(server_prefer_ip4:%s)\n", (yyvsp[0].str)));
33823400 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
33843402 else cfg_parser->cfg->prefer_ip4 = (strcmp((yyvsp[0].str), "yes")==0);
33853403 free((yyvsp[0].str));
33863404 }
3387 #line 3389 "util/configparser.c"
3388 break;
3389
3390 case 313:
3391 #line 813 "util/configparser.y"
3405 #line 3407 "util/configparser.c"
3406 break;
3407
3408 case 316:
3409 #line 814 "util/configparser.y"
33923410 {
33933411 OUTYY(("P(server_prefer_ip6:%s)\n", (yyvsp[0].str)));
33943412 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
33963414 else cfg_parser->cfg->prefer_ip6 = (strcmp((yyvsp[0].str), "yes")==0);
33973415 free((yyvsp[0].str));
33983416 }
3399 #line 3401 "util/configparser.c"
3400 break;
3401
3402 case 314:
3403 #line 822 "util/configparser.y"
3417 #line 3419 "util/configparser.c"
3418 break;
3419
3420 case 317:
3421 #line 823 "util/configparser.y"
34043422 {
34053423 OUTYY(("P(server_tcp_mss:%s)\n", (yyvsp[0].str)));
34063424 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
34083426 else cfg_parser->cfg->tcp_mss = atoi((yyvsp[0].str));
34093427 free((yyvsp[0].str));
34103428 }
3411 #line 3413 "util/configparser.c"
3412 break;
3413
3414 case 315:
3415 #line 831 "util/configparser.y"
3429 #line 3431 "util/configparser.c"
3430 break;
3431
3432 case 318:
3433 #line 832 "util/configparser.y"
34163434 {
34173435 OUTYY(("P(server_outgoing_tcp_mss:%s)\n", (yyvsp[0].str)));
34183436 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
34203438 else cfg_parser->cfg->outgoing_tcp_mss = atoi((yyvsp[0].str));
34213439 free((yyvsp[0].str));
34223440 }
3423 #line 3425 "util/configparser.c"
3424 break;
3425
3426 case 316:
3427 #line 840 "util/configparser.y"
3441 #line 3443 "util/configparser.c"
3442 break;
3443
3444 case 319:
3445 #line 841 "util/configparser.y"
34283446 {
34293447 OUTYY(("P(server_tcp_idle_timeout:%s)\n", (yyvsp[0].str)));
34303448 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
34363454 else cfg_parser->cfg->tcp_idle_timeout = atoi((yyvsp[0].str));
34373455 free((yyvsp[0].str));
34383456 }
3439 #line 3441 "util/configparser.c"
3440 break;
3441
3442 case 317:
3443 #line 853 "util/configparser.y"
3457 #line 3459 "util/configparser.c"
3458 break;
3459
3460 case 320:
3461 #line 854 "util/configparser.y"
34443462 {
34453463 OUTYY(("P(server_tcp_keepalive:%s)\n", (yyvsp[0].str)));
34463464 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
34483466 else cfg_parser->cfg->do_tcp_keepalive = (strcmp((yyvsp[0].str), "yes")==0);
34493467 free((yyvsp[0].str));
34503468 }
3451 #line 3453 "util/configparser.c"
3452 break;
3453
3454 case 318:
3455 #line 862 "util/configparser.y"
3469 #line 3471 "util/configparser.c"
3470 break;
3471
3472 case 321:
3473 #line 863 "util/configparser.y"
34563474 {
34573475 OUTYY(("P(server_tcp_keepalive_timeout:%s)\n", (yyvsp[0].str)));
34583476 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
34643482 else cfg_parser->cfg->tcp_keepalive_timeout = atoi((yyvsp[0].str));
34653483 free((yyvsp[0].str));
34663484 }
3467 #line 3469 "util/configparser.c"
3468 break;
3469
3470 case 319:
3471 #line 875 "util/configparser.y"
3485 #line 3487 "util/configparser.c"
3486 break;
3487
3488 case 322:
3489 #line 876 "util/configparser.y"
34723490 {
34733491 OUTYY(("P(server_tcp_upstream:%s)\n", (yyvsp[0].str)));
34743492 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
34763494 else cfg_parser->cfg->tcp_upstream = (strcmp((yyvsp[0].str), "yes")==0);
34773495 free((yyvsp[0].str));
34783496 }
3479 #line 3481 "util/configparser.c"
3480 break;
3481
3482 case 320:
3483 #line 884 "util/configparser.y"
3497 #line 3499 "util/configparser.c"
3498 break;
3499
3500 case 323:
3501 #line 885 "util/configparser.y"
34843502 {
34853503 OUTYY(("P(server_udp_upstream_without_downstream:%s)\n", (yyvsp[0].str)));
34863504 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
34883506 else cfg_parser->cfg->udp_upstream_without_downstream = (strcmp((yyvsp[0].str), "yes")==0);
34893507 free((yyvsp[0].str));
34903508 }
3491 #line 3493 "util/configparser.c"
3492 break;
3493
3494 case 321:
3495 #line 893 "util/configparser.y"
3509 #line 3511 "util/configparser.c"
3510 break;
3511
3512 case 324:
3513 #line 894 "util/configparser.y"
34963514 {
34973515 OUTYY(("P(server_ssl_upstream:%s)\n", (yyvsp[0].str)));
34983516 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
35003518 else cfg_parser->cfg->ssl_upstream = (strcmp((yyvsp[0].str), "yes")==0);
35013519 free((yyvsp[0].str));
35023520 }
3503 #line 3505 "util/configparser.c"
3504 break;
3505
3506 case 322:
3507 #line 902 "util/configparser.y"
3521 #line 3523 "util/configparser.c"
3522 break;
3523
3524 case 325:
3525 #line 903 "util/configparser.y"
35083526 {
35093527 OUTYY(("P(server_ssl_service_key:%s)\n", (yyvsp[0].str)));
35103528 free(cfg_parser->cfg->ssl_service_key);
35113529 cfg_parser->cfg->ssl_service_key = (yyvsp[0].str);
35123530 }
3513 #line 3515 "util/configparser.c"
3514 break;
3515
3516 case 323:
3517 #line 909 "util/configparser.y"
3531 #line 3533 "util/configparser.c"
3532 break;
3533
3534 case 326:
3535 #line 910 "util/configparser.y"
35183536 {
35193537 OUTYY(("P(server_ssl_service_pem:%s)\n", (yyvsp[0].str)));
35203538 free(cfg_parser->cfg->ssl_service_pem);
35213539 cfg_parser->cfg->ssl_service_pem = (yyvsp[0].str);
35223540 }
3523 #line 3525 "util/configparser.c"
3524 break;
3525
3526 case 324:
3527 #line 916 "util/configparser.y"
3541 #line 3543 "util/configparser.c"
3542 break;
3543
3544 case 327:
3545 #line 917 "util/configparser.y"
35283546 {
35293547 OUTYY(("P(server_ssl_port:%s)\n", (yyvsp[0].str)));
35303548 if(atoi((yyvsp[0].str)) == 0)
35323550 else cfg_parser->cfg->ssl_port = atoi((yyvsp[0].str));
35333551 free((yyvsp[0].str));
35343552 }
3535 #line 3537 "util/configparser.c"
3536 break;
3537
3538 case 325:
3539 #line 925 "util/configparser.y"
3553 #line 3555 "util/configparser.c"
3554 break;
3555
3556 case 328:
3557 #line 926 "util/configparser.y"
35403558 {
35413559 OUTYY(("P(server_tls_cert_bundle:%s)\n", (yyvsp[0].str)));
35423560 free(cfg_parser->cfg->tls_cert_bundle);
35433561 cfg_parser->cfg->tls_cert_bundle = (yyvsp[0].str);
35443562 }
3545 #line 3547 "util/configparser.c"
3546 break;
3547
3548 case 326:
3549 #line 932 "util/configparser.y"
3563 #line 3565 "util/configparser.c"
3564 break;
3565
3566 case 329:
3567 #line 933 "util/configparser.y"
35503568 {
35513569 OUTYY(("P(server_tls_win_cert:%s)\n", (yyvsp[0].str)));
35523570 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
35543572 else cfg_parser->cfg->tls_win_cert = (strcmp((yyvsp[0].str), "yes")==0);
35553573 free((yyvsp[0].str));
35563574 }
3557 #line 3559 "util/configparser.c"
3558 break;
3559
3560 case 327:
3561 #line 941 "util/configparser.y"
3575 #line 3577 "util/configparser.c"
3576 break;
3577
3578 case 330:
3579 #line 942 "util/configparser.y"
35623580 {
35633581 OUTYY(("P(server_tls_additional_port:%s)\n", (yyvsp[0].str)));
35643582 if(!cfg_strlist_insert(&cfg_parser->cfg->tls_additional_port,
35653583 (yyvsp[0].str)))
35663584 yyerror("out of memory");
35673585 }
3568 #line 3570 "util/configparser.c"
3569 break;
3570
3571 case 328:
3572 #line 949 "util/configparser.y"
3586 #line 3588 "util/configparser.c"
3587 break;
3588
3589 case 331:
3590 #line 950 "util/configparser.y"
35733591 {
35743592 OUTYY(("P(server_tls_ciphers:%s)\n", (yyvsp[0].str)));
35753593 free(cfg_parser->cfg->tls_ciphers);
35763594 cfg_parser->cfg->tls_ciphers = (yyvsp[0].str);
35773595 }
3578 #line 3580 "util/configparser.c"
3579 break;
3580
3581 case 329:
3582 #line 956 "util/configparser.y"
3596 #line 3598 "util/configparser.c"
3597 break;
3598
3599 case 332:
3600 #line 957 "util/configparser.y"
35833601 {
35843602 OUTYY(("P(server_tls_ciphersuites:%s)\n", (yyvsp[0].str)));
35853603 free(cfg_parser->cfg->tls_ciphersuites);
35863604 cfg_parser->cfg->tls_ciphersuites = (yyvsp[0].str);
35873605 }
3588 #line 3590 "util/configparser.c"
3589 break;
3590
3591 case 330:
3592 #line 963 "util/configparser.y"
3606 #line 3608 "util/configparser.c"
3607 break;
3608
3609 case 333:
3610 #line 964 "util/configparser.y"
35933611 {
35943612 OUTYY(("P(server_tls_session_ticket_keys:%s)\n", (yyvsp[0].str)));
35953613 if(!cfg_strlist_append(&cfg_parser->cfg->tls_session_ticket_keys,
35963614 (yyvsp[0].str)))
35973615 yyerror("out of memory");
35983616 }
3599 #line 3601 "util/configparser.c"
3600 break;
3601
3602 case 331:
3603 #line 971 "util/configparser.y"
3617 #line 3619 "util/configparser.c"
3618 break;
3619
3620 case 334:
3621 #line 972 "util/configparser.y"
36043622 {
36053623 OUTYY(("P(server_tls_use_sni:%s)\n", (yyvsp[0].str)));
36063624 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
36083626 else cfg_parser->cfg->tls_use_sni = (strcmp((yyvsp[0].str), "yes")==0);
36093627 free((yyvsp[0].str));
36103628 }
3611 #line 3613 "util/configparser.c"
3612 break;
3613
3614 case 332:
3615 #line 980 "util/configparser.y"
3629 #line 3631 "util/configparser.c"
3630 break;
3631
3632 case 335:
3633 #line 981 "util/configparser.y"
36163634 {
36173635 OUTYY(("P(server_https_port:%s)\n", (yyvsp[0].str)));
36183636 if(atoi((yyvsp[0].str)) == 0)
36193637 yyerror("port number expected");
36203638 else cfg_parser->cfg->https_port = atoi((yyvsp[0].str));
3621 }
3622 #line 3624 "util/configparser.c"
3623 break;
3624
3625 case 333:
3626 #line 987 "util/configparser.y"
3639 free((yyvsp[0].str));
3640 }
3641 #line 3643 "util/configparser.c"
3642 break;
3643
3644 case 336:
3645 #line 989 "util/configparser.y"
36273646 {
36283647 OUTYY(("P(server_http_endpoint:%s)\n", (yyvsp[0].str)));
36293648 free(cfg_parser->cfg->http_endpoint);
36393658 cfg_parser->cfg->http_endpoint = (yyvsp[0].str);
36403659 }
36413660 }
3642 #line 3644 "util/configparser.c"
3643 break;
3644
3645 case 334:
3646 #line 1003 "util/configparser.y"
3661 #line 3663 "util/configparser.c"
3662 break;
3663
3664 case 337:
3665 #line 1005 "util/configparser.y"
36473666 {
36483667 OUTYY(("P(server_http_max_streams:%s)\n", (yyvsp[0].str)));
36493668 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
36513670 else cfg_parser->cfg->http_max_streams = atoi((yyvsp[0].str));
36523671 free((yyvsp[0].str));
36533672 }
3654 #line 3656 "util/configparser.c"
3655 break;
3656
3657 case 335:
3658 #line 1011 "util/configparser.y"
3673 #line 3675 "util/configparser.c"
3674 break;
3675
3676 case 338:
3677 #line 1013 "util/configparser.y"
36593678 {
36603679 OUTYY(("P(server_http_query_buffer_size:%s)\n", (yyvsp[0].str)));
36613680 if(!cfg_parse_memsize((yyvsp[0].str),
36633682 yyerror("memory size expected");
36643683 free((yyvsp[0].str));
36653684 }
3666 #line 3668 "util/configparser.c"
3667 break;
3668
3669 case 336:
3670 #line 1019 "util/configparser.y"
3685 #line 3687 "util/configparser.c"
3686 break;
3687
3688 case 339:
3689 #line 1021 "util/configparser.y"
36713690 {
36723691 OUTYY(("P(server_http_response_buffer_size:%s)\n", (yyvsp[0].str)));
36733692 if(!cfg_parse_memsize((yyvsp[0].str),
36753694 yyerror("memory size expected");
36763695 free((yyvsp[0].str));
36773696 }
3678 #line 3680 "util/configparser.c"
3679 break;
3680
3681 case 337:
3682 #line 1027 "util/configparser.y"
3697 #line 3699 "util/configparser.c"
3698 break;
3699
3700 case 340:
3701 #line 1029 "util/configparser.y"
36833702 {
36843703 OUTYY(("P(server_http_nodelay:%s)\n", (yyvsp[0].str)));
36853704 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
36873706 else cfg_parser->cfg->http_nodelay = (strcmp((yyvsp[0].str), "yes")==0);
36883707 free((yyvsp[0].str));
36893708 }
3690 #line 3692 "util/configparser.c"
3691 break;
3692
3693 case 338:
3694 #line 1035 "util/configparser.y"
3709 #line 3711 "util/configparser.c"
3710 break;
3711
3712 case 341:
3713 #line 1037 "util/configparser.y"
3714 {
3715 OUTYY(("P(server_http_notls_downstream:%s)\n", (yyvsp[0].str)));
3716 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
3717 yyerror("expected yes or no.");
3718 else cfg_parser->cfg->http_notls_downstream = (strcmp((yyvsp[0].str), "yes")==0);
3719 free((yyvsp[0].str));
3720 }
3721 #line 3723 "util/configparser.c"
3722 break;
3723
3724 case 342:
3725 #line 1045 "util/configparser.y"
36953726 {
36963727 OUTYY(("P(server_use_systemd:%s)\n", (yyvsp[0].str)));
36973728 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
36993730 else cfg_parser->cfg->use_systemd = (strcmp((yyvsp[0].str), "yes")==0);
37003731 free((yyvsp[0].str));
37013732 }
3702 #line 3704 "util/configparser.c"
3703 break;
3704
3705 case 339:
3706 #line 1044 "util/configparser.y"
3733 #line 3735 "util/configparser.c"
3734 break;
3735
3736 case 343:
3737 #line 1054 "util/configparser.y"
37073738 {
37083739 OUTYY(("P(server_do_daemonize:%s)\n", (yyvsp[0].str)));
37093740 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
37113742 else cfg_parser->cfg->do_daemonize = (strcmp((yyvsp[0].str), "yes")==0);
37123743 free((yyvsp[0].str));
37133744 }
3714 #line 3716 "util/configparser.c"
3715 break;
3716
3717 case 340:
3718 #line 1053 "util/configparser.y"
3745 #line 3747 "util/configparser.c"
3746 break;
3747
3748 case 344:
3749 #line 1063 "util/configparser.y"
37193750 {
37203751 OUTYY(("P(server_use_syslog:%s)\n", (yyvsp[0].str)));
37213752 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
37283759 #endif
37293760 free((yyvsp[0].str));
37303761 }
3731 #line 3733 "util/configparser.c"
3732 break;
3733
3734 case 341:
3735 #line 1067 "util/configparser.y"
3762 #line 3764 "util/configparser.c"
3763 break;
3764
3765 case 345:
3766 #line 1077 "util/configparser.y"
37363767 {
37373768 OUTYY(("P(server_log_time_ascii:%s)\n", (yyvsp[0].str)));
37383769 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
37403771 else cfg_parser->cfg->log_time_ascii = (strcmp((yyvsp[0].str), "yes")==0);
37413772 free((yyvsp[0].str));
37423773 }
3743 #line 3745 "util/configparser.c"
3744 break;
3745
3746 case 342:
3747 #line 1076 "util/configparser.y"
3774 #line 3776 "util/configparser.c"
3775 break;
3776
3777 case 346:
3778 #line 1086 "util/configparser.y"
37483779 {
37493780 OUTYY(("P(server_log_queries:%s)\n", (yyvsp[0].str)));
37503781 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
37523783 else cfg_parser->cfg->log_queries = (strcmp((yyvsp[0].str), "yes")==0);
37533784 free((yyvsp[0].str));
37543785 }
3755 #line 3757 "util/configparser.c"
3756 break;
3757
3758 case 343:
3759 #line 1085 "util/configparser.y"
3786 #line 3788 "util/configparser.c"
3787 break;
3788
3789 case 347:
3790 #line 1095 "util/configparser.y"
37603791 {
37613792 OUTYY(("P(server_log_replies:%s)\n", (yyvsp[0].str)));
37623793 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
37643795 else cfg_parser->cfg->log_replies = (strcmp((yyvsp[0].str), "yes")==0);
37653796 free((yyvsp[0].str));
37663797 }
3767 #line 3769 "util/configparser.c"
3768 break;
3769
3770 case 344:
3771 #line 1094 "util/configparser.y"
3798 #line 3800 "util/configparser.c"
3799 break;
3800
3801 case 348:
3802 #line 1104 "util/configparser.y"
37723803 {
37733804 OUTYY(("P(server_log_tag_queryreply:%s)\n", (yyvsp[0].str)));
37743805 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
37763807 else cfg_parser->cfg->log_tag_queryreply = (strcmp((yyvsp[0].str), "yes")==0);
37773808 free((yyvsp[0].str));
37783809 }
3779 #line 3781 "util/configparser.c"
3780 break;
3781
3782 case 345:
3783 #line 1103 "util/configparser.y"
3810 #line 3812 "util/configparser.c"
3811 break;
3812
3813 case 349:
3814 #line 1113 "util/configparser.y"
37843815 {
37853816 OUTYY(("P(server_log_servfail:%s)\n", (yyvsp[0].str)));
37863817 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
37883819 else cfg_parser->cfg->log_servfail = (strcmp((yyvsp[0].str), "yes")==0);
37893820 free((yyvsp[0].str));
37903821 }
3791 #line 3793 "util/configparser.c"
3792 break;
3793
3794 case 346:
3795 #line 1112 "util/configparser.y"
3822 #line 3824 "util/configparser.c"
3823 break;
3824
3825 case 350:
3826 #line 1122 "util/configparser.y"
37963827 {
37973828 OUTYY(("P(server_log_local_actions:%s)\n", (yyvsp[0].str)));
37983829 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
38003831 else cfg_parser->cfg->log_local_actions = (strcmp((yyvsp[0].str), "yes")==0);
38013832 free((yyvsp[0].str));
38023833 }
3803 #line 3805 "util/configparser.c"
3804 break;
3805
3806 case 347:
3807 #line 1121 "util/configparser.y"
3834 #line 3836 "util/configparser.c"
3835 break;
3836
3837 case 351:
3838 #line 1131 "util/configparser.y"
38083839 {
38093840 OUTYY(("P(server_chroot:%s)\n", (yyvsp[0].str)));
38103841 free(cfg_parser->cfg->chrootdir);
38113842 cfg_parser->cfg->chrootdir = (yyvsp[0].str);
38123843 }
3813 #line 3815 "util/configparser.c"
3814 break;
3815
3816 case 348:
3817 #line 1128 "util/configparser.y"
3844 #line 3846 "util/configparser.c"
3845 break;
3846
3847 case 352:
3848 #line 1138 "util/configparser.y"
38183849 {
38193850 OUTYY(("P(server_username:%s)\n", (yyvsp[0].str)));
38203851 free(cfg_parser->cfg->username);
38213852 cfg_parser->cfg->username = (yyvsp[0].str);
38223853 }
3823 #line 3825 "util/configparser.c"
3824 break;
3825
3826 case 349:
3827 #line 1135 "util/configparser.y"
3854 #line 3856 "util/configparser.c"
3855 break;
3856
3857 case 353:
3858 #line 1145 "util/configparser.y"
38283859 {
38293860 OUTYY(("P(server_directory:%s)\n", (yyvsp[0].str)));
38303861 free(cfg_parser->cfg->directory);
38493880 }
38503881 }
38513882 }
3852 #line 3854 "util/configparser.c"
3853 break;
3854
3855 case 350:
3856 #line 1161 "util/configparser.y"
3883 #line 3885 "util/configparser.c"
3884 break;
3885
3886 case 354:
3887 #line 1171 "util/configparser.y"
38573888 {
38583889 OUTYY(("P(server_logfile:%s)\n", (yyvsp[0].str)));
38593890 free(cfg_parser->cfg->logfile);
38603891 cfg_parser->cfg->logfile = (yyvsp[0].str);
38613892 cfg_parser->cfg->use_syslog = 0;
38623893 }
3863 #line 3865 "util/configparser.c"
3864 break;
3865
3866 case 351:
3867 #line 1169 "util/configparser.y"
3894 #line 3896 "util/configparser.c"
3895 break;
3896
3897 case 355:
3898 #line 1179 "util/configparser.y"
38683899 {
38693900 OUTYY(("P(server_pidfile:%s)\n", (yyvsp[0].str)));
38703901 free(cfg_parser->cfg->pidfile);
38713902 cfg_parser->cfg->pidfile = (yyvsp[0].str);
38723903 }
3873 #line 3875 "util/configparser.c"
3874 break;
3875
3876 case 352:
3877 #line 1176 "util/configparser.y"
3904 #line 3906 "util/configparser.c"
3905 break;
3906
3907 case 356:
3908 #line 1186 "util/configparser.y"
38783909 {
38793910 OUTYY(("P(server_root_hints:%s)\n", (yyvsp[0].str)));
38803911 if(!cfg_strlist_insert(&cfg_parser->cfg->root_hints, (yyvsp[0].str)))
38813912 yyerror("out of memory");
38823913 }
3883 #line 3885 "util/configparser.c"
3884 break;
3885
3886 case 353:
3887 #line 1183 "util/configparser.y"
3914 #line 3916 "util/configparser.c"
3915 break;
3916
3917 case 357:
3918 #line 1193 "util/configparser.y"
38883919 {
38893920 OUTYY(("P(server_dlv_anchor_file:%s)\n", (yyvsp[0].str)));
38903921 log_warn("option dlv-anchor-file ignored: DLV is decommissioned");
38913922 free((yyvsp[0].str));
38923923 }
3893 #line 3895 "util/configparser.c"
3894 break;
3895
3896 case 354:
3897 #line 1190 "util/configparser.y"
3924 #line 3926 "util/configparser.c"
3925 break;
3926
3927 case 358:
3928 #line 1200 "util/configparser.y"
38983929 {
38993930 OUTYY(("P(server_dlv_anchor:%s)\n", (yyvsp[0].str)));
39003931 log_warn("option dlv-anchor ignored: DLV is decommissioned");
39013932 free((yyvsp[0].str));
39023933 }
3903 #line 3905 "util/configparser.c"
3904 break;
3905
3906 case 355:
3907 #line 1197 "util/configparser.y"
3934 #line 3936 "util/configparser.c"
3935 break;
3936
3937 case 359:
3938 #line 1207 "util/configparser.y"
39083939 {
39093940 OUTYY(("P(server_auto_trust_anchor_file:%s)\n", (yyvsp[0].str)));
39103941 if(!cfg_strlist_insert(&cfg_parser->cfg->
39113942 auto_trust_anchor_file_list, (yyvsp[0].str)))
39123943 yyerror("out of memory");
39133944 }
3914 #line 3916 "util/configparser.c"
3915 break;
3916
3917 case 356:
3918 #line 1205 "util/configparser.y"
3945 #line 3947 "util/configparser.c"
3946 break;
3947
3948 case 360:
3949 #line 1215 "util/configparser.y"
39193950 {
39203951 OUTYY(("P(server_trust_anchor_file:%s)\n", (yyvsp[0].str)));
39213952 if(!cfg_strlist_insert(&cfg_parser->cfg->
39223953 trust_anchor_file_list, (yyvsp[0].str)))
39233954 yyerror("out of memory");
39243955 }
3925 #line 3927 "util/configparser.c"
3926 break;
3927
3928 case 357:
3929 #line 1213 "util/configparser.y"
3956 #line 3958 "util/configparser.c"
3957 break;
3958
3959 case 361:
3960 #line 1223 "util/configparser.y"
39303961 {
39313962 OUTYY(("P(server_trusted_keys_file:%s)\n", (yyvsp[0].str)));
39323963 if(!cfg_strlist_insert(&cfg_parser->cfg->
39333964 trusted_keys_file_list, (yyvsp[0].str)))
39343965 yyerror("out of memory");
39353966 }
3936 #line 3938 "util/configparser.c"
3937 break;
3938
3939 case 358:
3940 #line 1221 "util/configparser.y"
3967 #line 3969 "util/configparser.c"
3968 break;
3969
3970 case 362:
3971 #line 1231 "util/configparser.y"
39413972 {
39423973 OUTYY(("P(server_trust_anchor:%s)\n", (yyvsp[0].str)));
39433974 if(!cfg_strlist_insert(&cfg_parser->cfg->trust_anchor_list, (yyvsp[0].str)))
39443975 yyerror("out of memory");
39453976 }
3946 #line 3948 "util/configparser.c"
3947 break;
3948
3949 case 359:
3950 #line 1228 "util/configparser.y"
3977 #line 3979 "util/configparser.c"
3978 break;
3979
3980 case 363:
3981 #line 1238 "util/configparser.y"
39513982 {
39523983 OUTYY(("P(server_trust_anchor_signaling:%s)\n", (yyvsp[0].str)));
39533984 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
39573988 (strcmp((yyvsp[0].str), "yes")==0);
39583989 free((yyvsp[0].str));
39593990 }
3960 #line 3962 "util/configparser.c"
3961 break;
3962
3963 case 360:
3964 #line 1239 "util/configparser.y"
3991 #line 3993 "util/configparser.c"
3992 break;
3993
3994 case 364:
3995 #line 1249 "util/configparser.y"
39653996 {
39663997 OUTYY(("P(server_root_key_sentinel:%s)\n", (yyvsp[0].str)));
39673998 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
39714002 (strcmp((yyvsp[0].str), "yes")==0);
39724003 free((yyvsp[0].str));
39734004 }
3974 #line 3976 "util/configparser.c"
3975 break;
3976
3977 case 361:
3978 #line 1250 "util/configparser.y"
4005 #line 4007 "util/configparser.c"
4006 break;
4007
4008 case 365:
4009 #line 1260 "util/configparser.y"
39794010 {
39804011 OUTYY(("P(server_domain_insecure:%s)\n", (yyvsp[0].str)));
39814012 if(!cfg_strlist_insert(&cfg_parser->cfg->domain_insecure, (yyvsp[0].str)))
39824013 yyerror("out of memory");
39834014 }
3984 #line 3986 "util/configparser.c"
3985 break;
3986
3987 case 362:
3988 #line 1257 "util/configparser.y"
4015 #line 4017 "util/configparser.c"
4016 break;
4017
4018 case 366:
4019 #line 1267 "util/configparser.y"
39894020 {
39904021 OUTYY(("P(server_hide_identity:%s)\n", (yyvsp[0].str)));
39914022 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
39934024 else cfg_parser->cfg->hide_identity = (strcmp((yyvsp[0].str), "yes")==0);
39944025 free((yyvsp[0].str));
39954026 }
3996 #line 3998 "util/configparser.c"
3997 break;
3998
3999 case 363:
4000 #line 1266 "util/configparser.y"
4027 #line 4029 "util/configparser.c"
4028 break;
4029
4030 case 367:
4031 #line 1276 "util/configparser.y"
40014032 {
40024033 OUTYY(("P(server_hide_version:%s)\n", (yyvsp[0].str)));
40034034 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
40054036 else cfg_parser->cfg->hide_version = (strcmp((yyvsp[0].str), "yes")==0);
40064037 free((yyvsp[0].str));
40074038 }
4008 #line 4010 "util/configparser.c"
4009 break;
4010
4011 case 364:
4012 #line 1275 "util/configparser.y"
4039 #line 4041 "util/configparser.c"
4040 break;
4041
4042 case 368:
4043 #line 1285 "util/configparser.y"
40134044 {
40144045 OUTYY(("P(server_hide_trustanchor:%s)\n", (yyvsp[0].str)));
40154046 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
40174048 else cfg_parser->cfg->hide_trustanchor = (strcmp((yyvsp[0].str), "yes")==0);
40184049 free((yyvsp[0].str));
40194050 }
4020 #line 4022 "util/configparser.c"
4021 break;
4022
4023 case 365:
4024 #line 1284 "util/configparser.y"
4051 #line 4053 "util/configparser.c"
4052 break;
4053
4054 case 369:
4055 #line 1294 "util/configparser.y"
40254056 {
40264057 OUTYY(("P(server_identity:%s)\n", (yyvsp[0].str)));
40274058 free(cfg_parser->cfg->identity);
40284059 cfg_parser->cfg->identity = (yyvsp[0].str);
40294060 }
4030 #line 4032 "util/configparser.c"
4031 break;
4032
4033 case 366:
4034 #line 1291 "util/configparser.y"
4061 #line 4063 "util/configparser.c"
4062 break;
4063
4064 case 370:
4065 #line 1301 "util/configparser.y"
40354066 {
40364067 OUTYY(("P(server_version:%s)\n", (yyvsp[0].str)));
40374068 free(cfg_parser->cfg->version);
40384069 cfg_parser->cfg->version = (yyvsp[0].str);
40394070 }
4040 #line 4042 "util/configparser.c"
4041 break;
4042
4043 case 367:
4044 #line 1298 "util/configparser.y"
4071 #line 4073 "util/configparser.c"
4072 break;
4073
4074 case 371:
4075 #line 1308 "util/configparser.y"
40454076 {
40464077 OUTYY(("P(server_so_rcvbuf:%s)\n", (yyvsp[0].str)));
40474078 if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->so_rcvbuf))
40484079 yyerror("buffer size expected");
40494080 free((yyvsp[0].str));
40504081 }
4051 #line 4053 "util/configparser.c"
4052 break;
4053
4054 case 368:
4055 #line 1306 "util/configparser.y"
4082 #line 4084 "util/configparser.c"
4083 break;
4084
4085 case 372:
4086 #line 1316 "util/configparser.y"
40564087 {
40574088 OUTYY(("P(server_so_sndbuf:%s)\n", (yyvsp[0].str)));
40584089 if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->so_sndbuf))
40594090 yyerror("buffer size expected");
40604091 free((yyvsp[0].str));
40614092 }
4062 #line 4064 "util/configparser.c"
4063 break;
4064
4065 case 369:
4066 #line 1314 "util/configparser.y"
4093 #line 4095 "util/configparser.c"
4094 break;
4095
4096 case 373:
4097 #line 1324 "util/configparser.y"
40674098 {
40684099 OUTYY(("P(server_so_reuseport:%s)\n", (yyvsp[0].str)));
40694100 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
40724103 (strcmp((yyvsp[0].str), "yes")==0);
40734104 free((yyvsp[0].str));
40744105 }
4075 #line 4077 "util/configparser.c"
4076 break;
4077
4078 case 370:
4079 #line 1324 "util/configparser.y"
4106 #line 4108 "util/configparser.c"
4107 break;
4108
4109 case 374:
4110 #line 1334 "util/configparser.y"
40804111 {
40814112 OUTYY(("P(server_ip_transparent:%s)\n", (yyvsp[0].str)));
40824113 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
40854116 (strcmp((yyvsp[0].str), "yes")==0);
40864117 free((yyvsp[0].str));
40874118 }
4088 #line 4090 "util/configparser.c"
4089 break;
4090
4091 case 371:
4092 #line 1334 "util/configparser.y"
4119 #line 4121 "util/configparser.c"
4120 break;
4121
4122 case 375:
4123 #line 1344 "util/configparser.y"
40934124 {
40944125 OUTYY(("P(server_ip_freebind:%s)\n", (yyvsp[0].str)));
40954126 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
40984129 (strcmp((yyvsp[0].str), "yes")==0);
40994130 free((yyvsp[0].str));
41004131 }
4101 #line 4103 "util/configparser.c"
4102 break;
4103
4104 case 372:
4105 #line 1344 "util/configparser.y"
4132 #line 4134 "util/configparser.c"
4133 break;
4134
4135 case 376:
4136 #line 1354 "util/configparser.y"
41064137 {
41074138 OUTYY(("P(server_ip_dscp:%s)\n", (yyvsp[0].str)));
41084139 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
41154146 cfg_parser->cfg->ip_dscp = atoi((yyvsp[0].str));
41164147 free((yyvsp[0].str));
41174148 }
4118 #line 4120 "util/configparser.c"
4119 break;
4120
4121 case 373:
4122 #line 1358 "util/configparser.y"
4149 #line 4151 "util/configparser.c"
4150 break;
4151
4152 case 377:
4153 #line 1368 "util/configparser.y"
41234154 {
41244155 OUTYY(("P(server_stream_wait_size:%s)\n", (yyvsp[0].str)));
41254156 if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->stream_wait_size))
41264157 yyerror("memory size expected");
41274158 free((yyvsp[0].str));
41284159 }
4129 #line 4131 "util/configparser.c"
4130 break;
4131
4132 case 374:
4133 #line 1366 "util/configparser.y"
4160 #line 4162 "util/configparser.c"
4161 break;
4162
4163 case 378:
4164 #line 1376 "util/configparser.y"
41344165 {
41354166 OUTYY(("P(server_edns_buffer_size:%s)\n", (yyvsp[0].str)));
41364167 if(atoi((yyvsp[0].str)) == 0)
41424173 else cfg_parser->cfg->edns_buffer_size = atoi((yyvsp[0].str));
41434174 free((yyvsp[0].str));
41444175 }
4145 #line 4147 "util/configparser.c"
4146 break;
4147
4148 case 375:
4149 #line 1379 "util/configparser.y"
4176 #line 4178 "util/configparser.c"
4177 break;
4178
4179 case 379:
4180 #line 1389 "util/configparser.y"
41504181 {
41514182 OUTYY(("P(server_msg_buffer_size:%s)\n", (yyvsp[0].str)));
41524183 if(atoi((yyvsp[0].str)) == 0)
41564187 else cfg_parser->cfg->msg_buffer_size = atoi((yyvsp[0].str));
41574188 free((yyvsp[0].str));
41584189 }
4159 #line 4161 "util/configparser.c"
4160 break;
4161
4162 case 376:
4163 #line 1390 "util/configparser.y"
4190 #line 4192 "util/configparser.c"
4191 break;
4192
4193 case 380:
4194 #line 1400 "util/configparser.y"
41644195 {
41654196 OUTYY(("P(server_msg_cache_size:%s)\n", (yyvsp[0].str)));
41664197 if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->msg_cache_size))
41674198 yyerror("memory size expected");
41684199 free((yyvsp[0].str));
41694200 }
4170 #line 4172 "util/configparser.c"
4171 break;
4172
4173 case 377:
4174 #line 1398 "util/configparser.y"
4201 #line 4203 "util/configparser.c"
4202 break;
4203
4204 case 381:
4205 #line 1408 "util/configparser.y"
41754206 {
41764207 OUTYY(("P(server_msg_cache_slabs:%s)\n", (yyvsp[0].str)));
41774208 if(atoi((yyvsp[0].str)) == 0)
41834214 }
41844215 free((yyvsp[0].str));
41854216 }
4186 #line 4188 "util/configparser.c"
4187 break;
4188
4189 case 378:
4190 #line 1411 "util/configparser.y"
4217 #line 4219 "util/configparser.c"
4218 break;
4219
4220 case 382:
4221 #line 1421 "util/configparser.y"
41914222 {
41924223 OUTYY(("P(server_num_queries_per_thread:%s)\n", (yyvsp[0].str)));
41934224 if(atoi((yyvsp[0].str)) == 0)
41954226 else cfg_parser->cfg->num_queries_per_thread = atoi((yyvsp[0].str));
41964227 free((yyvsp[0].str));
41974228 }
4198 #line 4200 "util/configparser.c"
4199 break;
4200
4201 case 379:
4202 #line 1420 "util/configparser.y"
4229 #line 4231 "util/configparser.c"
4230 break;
4231
4232 case 383:
4233 #line 1430 "util/configparser.y"
42034234 {
42044235 OUTYY(("P(server_jostle_timeout:%s)\n", (yyvsp[0].str)));
42054236 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
42074238 else cfg_parser->cfg->jostle_time = atoi((yyvsp[0].str));
42084239 free((yyvsp[0].str));
42094240 }
4210 #line 4212 "util/configparser.c"
4211 break;
4212
4213 case 380:
4214 #line 1429 "util/configparser.y"
4241 #line 4243 "util/configparser.c"
4242 break;
4243
4244 case 384:
4245 #line 1439 "util/configparser.y"
42154246 {
42164247 OUTYY(("P(server_delay_close:%s)\n", (yyvsp[0].str)));
42174248 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
42194250 else cfg_parser->cfg->delay_close = atoi((yyvsp[0].str));
42204251 free((yyvsp[0].str));
42214252 }
4222 #line 4224 "util/configparser.c"
4223 break;
4224
4225 case 381:
4226 #line 1438 "util/configparser.y"
4253 #line 4255 "util/configparser.c"
4254 break;
4255
4256 case 385:
4257 #line 1448 "util/configparser.y"
4258 {
4259 OUTYY(("P(server_udp_connect:%s)\n", (yyvsp[0].str)));
4260 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4261 yyerror("expected yes or no.");
4262 else cfg_parser->cfg->udp_connect = (strcmp((yyvsp[0].str), "yes")==0);
4263 free((yyvsp[0].str));
4264 }
4265 #line 4267 "util/configparser.c"
4266 break;
4267
4268 case 386:
4269 #line 1457 "util/configparser.y"
42274270 {
42284271 OUTYY(("P(server_unblock_lan_zones:%s)\n", (yyvsp[0].str)));
42294272 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
42324275 (strcmp((yyvsp[0].str), "yes")==0);
42334276 free((yyvsp[0].str));
42344277 }
4235 #line 4237 "util/configparser.c"
4236 break;
4237
4238 case 382:
4239 #line 1448 "util/configparser.y"
4278 #line 4280 "util/configparser.c"
4279 break;
4280
4281 case 387:
4282 #line 1467 "util/configparser.y"
42404283 {
42414284 OUTYY(("P(server_insecure_lan_zones:%s)\n", (yyvsp[0].str)));
42424285 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
42454288 (strcmp((yyvsp[0].str), "yes")==0);
42464289 free((yyvsp[0].str));
42474290 }
4248 #line 4250 "util/configparser.c"
4249 break;
4250
4251 case 383:
4252 #line 1458 "util/configparser.y"
4291 #line 4293 "util/configparser.c"
4292 break;
4293
4294 case 388:
4295 #line 1477 "util/configparser.y"
42534296 {
42544297 OUTYY(("P(server_rrset_cache_size:%s)\n", (yyvsp[0].str)));
42554298 if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->rrset_cache_size))
42564299 yyerror("memory size expected");
42574300 free((yyvsp[0].str));
42584301 }
4259 #line 4261 "util/configparser.c"
4260 break;
4261
4262 case 384:
4263 #line 1466 "util/configparser.y"
4302 #line 4304 "util/configparser.c"
4303 break;
4304
4305 case 389:
4306 #line 1485 "util/configparser.y"
42644307 {
42654308 OUTYY(("P(server_rrset_cache_slabs:%s)\n", (yyvsp[0].str)));
42664309 if(atoi((yyvsp[0].str)) == 0)
42724315 }
42734316 free((yyvsp[0].str));
42744317 }
4275 #line 4277 "util/configparser.c"
4276 break;
4277
4278 case 385:
4279 #line 1479 "util/configparser.y"
4318 #line 4320 "util/configparser.c"
4319 break;
4320
4321 case 390:
4322 #line 1498 "util/configparser.y"
42804323 {
42814324 OUTYY(("P(server_infra_host_ttl:%s)\n", (yyvsp[0].str)));
42824325 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
42844327 else cfg_parser->cfg->host_ttl = atoi((yyvsp[0].str));
42854328 free((yyvsp[0].str));
42864329 }
4287 #line 4289 "util/configparser.c"
4288 break;
4289
4290 case 386:
4291 #line 1488 "util/configparser.y"
4330 #line 4332 "util/configparser.c"
4331 break;
4332
4333 case 391:
4334 #line 1507 "util/configparser.y"
42924335 {
42934336 OUTYY(("P(server_infra_lame_ttl:%s)\n", (yyvsp[0].str)));
42944337 verbose(VERB_DETAIL, "ignored infra-lame-ttl: %s (option "
42954338 "removed, use infra-host-ttl)", (yyvsp[0].str));
42964339 free((yyvsp[0].str));
42974340 }
4298 #line 4300 "util/configparser.c"
4299 break;
4300
4301 case 387:
4302 #line 1496 "util/configparser.y"
4341 #line 4343 "util/configparser.c"
4342 break;
4343
4344 case 392:
4345 #line 1515 "util/configparser.y"
43034346 {
43044347 OUTYY(("P(server_infra_cache_numhosts:%s)\n", (yyvsp[0].str)));
43054348 if(atoi((yyvsp[0].str)) == 0)
43074350 else cfg_parser->cfg->infra_cache_numhosts = atoi((yyvsp[0].str));
43084351 free((yyvsp[0].str));
43094352 }
4310 #line 4312 "util/configparser.c"
4311 break;
4312
4313 case 388:
4314 #line 1505 "util/configparser.y"
4353 #line 4355 "util/configparser.c"
4354 break;
4355
4356 case 393:
4357 #line 1524 "util/configparser.y"
43154358 {
43164359 OUTYY(("P(server_infra_cache_lame_size:%s)\n", (yyvsp[0].str)));
43174360 verbose(VERB_DETAIL, "ignored infra-cache-lame-size: %s "
43184361 "(option removed, use infra-cache-numhosts)", (yyvsp[0].str));
43194362 free((yyvsp[0].str));
43204363 }
4321 #line 4323 "util/configparser.c"
4322 break;
4323
4324 case 389:
4325 #line 1513 "util/configparser.y"
4364 #line 4366 "util/configparser.c"
4365 break;
4366
4367 case 394:
4368 #line 1532 "util/configparser.y"
43264369 {
43274370 OUTYY(("P(server_infra_cache_slabs:%s)\n", (yyvsp[0].str)));
43284371 if(atoi((yyvsp[0].str)) == 0)
43344377 }
43354378 free((yyvsp[0].str));
43364379 }
4337 #line 4339 "util/configparser.c"
4338 break;
4339
4340 case 390:
4341 #line 1526 "util/configparser.y"
4380 #line 4382 "util/configparser.c"
4381 break;
4382
4383 case 395:
4384 #line 1545 "util/configparser.y"
43424385 {
43434386 OUTYY(("P(server_infra_cache_min_rtt:%s)\n", (yyvsp[0].str)));
43444387 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
43464389 else cfg_parser->cfg->infra_cache_min_rtt = atoi((yyvsp[0].str));
43474390 free((yyvsp[0].str));
43484391 }
4349 #line 4351 "util/configparser.c"
4350 break;
4351
4352 case 391:
4353 #line 1535 "util/configparser.y"
4392 #line 4394 "util/configparser.c"
4393 break;
4394
4395 case 396:
4396 #line 1554 "util/configparser.y"
4397 {
4398 OUTYY(("P(server_infra_keep_probing:%s)\n", (yyvsp[0].str)));
4399 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4400 yyerror("expected yes or no.");
4401 else cfg_parser->cfg->infra_keep_probing =
4402 (strcmp((yyvsp[0].str), "yes")==0);
4403 free((yyvsp[0].str));
4404 }
4405 #line 4407 "util/configparser.c"
4406 break;
4407
4408 case 397:
4409 #line 1564 "util/configparser.y"
43544410 {
43554411 OUTYY(("P(server_target_fetch_policy:%s)\n", (yyvsp[0].str)));
43564412 free(cfg_parser->cfg->target_fetch_policy);
43574413 cfg_parser->cfg->target_fetch_policy = (yyvsp[0].str);
43584414 }
4359 #line 4361 "util/configparser.c"
4360 break;
4361
4362 case 392:
4363 #line 1542 "util/configparser.y"
4415 #line 4417 "util/configparser.c"
4416 break;
4417
4418 case 398:
4419 #line 1571 "util/configparser.y"
43644420 {
43654421 OUTYY(("P(server_harden_short_bufsize:%s)\n", (yyvsp[0].str)));
43664422 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
43694425 (strcmp((yyvsp[0].str), "yes")==0);
43704426 free((yyvsp[0].str));
43714427 }
4372 #line 4374 "util/configparser.c"
4373 break;
4374
4375 case 393:
4376 #line 1552 "util/configparser.y"
4428 #line 4430 "util/configparser.c"
4429 break;
4430
4431 case 399:
4432 #line 1581 "util/configparser.y"
43774433 {
43784434 OUTYY(("P(server_harden_large_queries:%s)\n", (yyvsp[0].str)));
43794435 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
43824438 (strcmp((yyvsp[0].str), "yes")==0);
43834439 free((yyvsp[0].str));
43844440 }
4385 #line 4387 "util/configparser.c"
4386 break;
4387
4388 case 394:
4389 #line 1562 "util/configparser.y"
4441 #line 4443 "util/configparser.c"
4442 break;
4443
4444 case 400:
4445 #line 1591 "util/configparser.y"
43904446 {
43914447 OUTYY(("P(server_harden_glue:%s)\n", (yyvsp[0].str)));
43924448 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
43954451 (strcmp((yyvsp[0].str), "yes")==0);
43964452 free((yyvsp[0].str));
43974453 }
4398 #line 4400 "util/configparser.c"
4399 break;
4400
4401 case 395:
4402 #line 1572 "util/configparser.y"
4454 #line 4456 "util/configparser.c"
4455 break;
4456
4457 case 401:
4458 #line 1601 "util/configparser.y"
44034459 {
44044460 OUTYY(("P(server_harden_dnssec_stripped:%s)\n", (yyvsp[0].str)));
44054461 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
44084464 (strcmp((yyvsp[0].str), "yes")==0);
44094465 free((yyvsp[0].str));
44104466 }
4411 #line 4413 "util/configparser.c"
4412 break;
4413
4414 case 396:
4415 #line 1582 "util/configparser.y"
4467 #line 4469 "util/configparser.c"
4468 break;
4469
4470 case 402:
4471 #line 1611 "util/configparser.y"
44164472 {
44174473 OUTYY(("P(server_harden_below_nxdomain:%s)\n", (yyvsp[0].str)));
44184474 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
44214477 (strcmp((yyvsp[0].str), "yes")==0);
44224478 free((yyvsp[0].str));
44234479 }
4424 #line 4426 "util/configparser.c"
4425 break;
4426
4427 case 397:
4428 #line 1592 "util/configparser.y"
4480 #line 4482 "util/configparser.c"
4481 break;
4482
4483 case 403:
4484 #line 1621 "util/configparser.y"
44294485 {
44304486 OUTYY(("P(server_harden_referral_path:%s)\n", (yyvsp[0].str)));
44314487 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
44344490 (strcmp((yyvsp[0].str), "yes")==0);
44354491 free((yyvsp[0].str));
44364492 }
4437 #line 4439 "util/configparser.c"
4438 break;
4439
4440 case 398:
4441 #line 1602 "util/configparser.y"
4493 #line 4495 "util/configparser.c"
4494 break;
4495
4496 case 404:
4497 #line 1631 "util/configparser.y"
44424498 {
44434499 OUTYY(("P(server_harden_algo_downgrade:%s)\n", (yyvsp[0].str)));
44444500 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
44474503 (strcmp((yyvsp[0].str), "yes")==0);
44484504 free((yyvsp[0].str));
44494505 }
4450 #line 4452 "util/configparser.c"
4451 break;
4452
4453 case 399:
4454 #line 1612 "util/configparser.y"
4506 #line 4508 "util/configparser.c"
4507 break;
4508
4509 case 405:
4510 #line 1641 "util/configparser.y"
44554511 {
44564512 OUTYY(("P(server_use_caps_for_id:%s)\n", (yyvsp[0].str)));
44574513 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
44604516 (strcmp((yyvsp[0].str), "yes")==0);
44614517 free((yyvsp[0].str));
44624518 }
4463 #line 4465 "util/configparser.c"
4464 break;
4465
4466 case 400:
4467 #line 1622 "util/configparser.y"
4519 #line 4521 "util/configparser.c"
4520 break;
4521
4522 case 406:
4523 #line 1651 "util/configparser.y"
44684524 {
44694525 OUTYY(("P(server_caps_whitelist:%s)\n", (yyvsp[0].str)));
44704526 if(!cfg_strlist_insert(&cfg_parser->cfg->caps_whitelist, (yyvsp[0].str)))
44714527 yyerror("out of memory");
44724528 }
4473 #line 4475 "util/configparser.c"
4474 break;
4475
4476 case 401:
4477 #line 1629 "util/configparser.y"
4529 #line 4531 "util/configparser.c"
4530 break;
4531
4532 case 407:
4533 #line 1658 "util/configparser.y"
44784534 {
44794535 OUTYY(("P(server_private_address:%s)\n", (yyvsp[0].str)));
44804536 if(!cfg_strlist_insert(&cfg_parser->cfg->private_address, (yyvsp[0].str)))
44814537 yyerror("out of memory");
44824538 }
4483 #line 4485 "util/configparser.c"
4484 break;
4485
4486 case 402:
4487 #line 1636 "util/configparser.y"
4539 #line 4541 "util/configparser.c"
4540 break;
4541
4542 case 408:
4543 #line 1665 "util/configparser.y"
44884544 {
44894545 OUTYY(("P(server_private_domain:%s)\n", (yyvsp[0].str)));
44904546 if(!cfg_strlist_insert(&cfg_parser->cfg->private_domain, (yyvsp[0].str)))
44914547 yyerror("out of memory");
44924548 }
4493 #line 4495 "util/configparser.c"
4494 break;
4495
4496 case 403:
4497 #line 1643 "util/configparser.y"
4549 #line 4551 "util/configparser.c"
4550 break;
4551
4552 case 409:
4553 #line 1672 "util/configparser.y"
44984554 {
44994555 OUTYY(("P(server_prefetch:%s)\n", (yyvsp[0].str)));
45004556 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
45024558 else cfg_parser->cfg->prefetch = (strcmp((yyvsp[0].str), "yes")==0);
45034559 free((yyvsp[0].str));
45044560 }
4505 #line 4507 "util/configparser.c"
4506 break;
4507
4508 case 404:
4509 #line 1652 "util/configparser.y"
4561 #line 4563 "util/configparser.c"
4562 break;
4563
4564 case 410:
4565 #line 1681 "util/configparser.y"
45104566 {
45114567 OUTYY(("P(server_prefetch_key:%s)\n", (yyvsp[0].str)));
45124568 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
45144570 else cfg_parser->cfg->prefetch_key = (strcmp((yyvsp[0].str), "yes")==0);
45154571 free((yyvsp[0].str));
45164572 }
4517 #line 4519 "util/configparser.c"
4518 break;
4519
4520 case 405:
4521 #line 1661 "util/configparser.y"
4573 #line 4575 "util/configparser.c"
4574 break;
4575
4576 case 411:
4577 #line 1690 "util/configparser.y"
45224578 {
45234579 OUTYY(("P(server_deny_any:%s)\n", (yyvsp[0].str)));
45244580 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
45264582 else cfg_parser->cfg->deny_any = (strcmp((yyvsp[0].str), "yes")==0);
45274583 free((yyvsp[0].str));
45284584 }
4529 #line 4531 "util/configparser.c"
4530 break;
4531
4532 case 406:
4533 #line 1670 "util/configparser.y"
4585 #line 4587 "util/configparser.c"
4586 break;
4587
4588 case 412:
4589 #line 1699 "util/configparser.y"
45344590 {
45354591 OUTYY(("P(server_unwanted_reply_threshold:%s)\n", (yyvsp[0].str)));
45364592 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
45384594 else cfg_parser->cfg->unwanted_threshold = atoi((yyvsp[0].str));
45394595 free((yyvsp[0].str));
45404596 }
4541 #line 4543 "util/configparser.c"
4542 break;
4543
4544 case 407:
4545 #line 1679 "util/configparser.y"
4597 #line 4599 "util/configparser.c"
4598 break;
4599
4600 case 413:
4601 #line 1708 "util/configparser.y"
45464602 {
45474603 OUTYY(("P(server_do_not_query_address:%s)\n", (yyvsp[0].str)));
45484604 if(!cfg_strlist_insert(&cfg_parser->cfg->donotqueryaddrs, (yyvsp[0].str)))
45494605 yyerror("out of memory");
45504606 }
4551 #line 4553 "util/configparser.c"
4552 break;
4553
4554 case 408:
4555 #line 1686 "util/configparser.y"
4607 #line 4609 "util/configparser.c"
4608 break;
4609
4610 case 414:
4611 #line 1715 "util/configparser.y"
45564612 {
45574613 OUTYY(("P(server_do_not_query_localhost:%s)\n", (yyvsp[0].str)));
45584614 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
45614617 (strcmp((yyvsp[0].str), "yes")==0);
45624618 free((yyvsp[0].str));
45634619 }
4564 #line 4566 "util/configparser.c"
4565 break;
4566
4567 case 409:
4568 #line 1696 "util/configparser.y"
4620 #line 4622 "util/configparser.c"
4621 break;
4622
4623 case 415:
4624 #line 1725 "util/configparser.y"
45694625 {
45704626 OUTYY(("P(server_access_control:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
45714627 if(strcmp((yyvsp[0].str), "deny")!=0 && strcmp((yyvsp[0].str), "refuse")!=0 &&
45844640 fatal_exit("out of memory adding acl");
45854641 }
45864642 }
4587 #line 4589 "util/configparser.c"
4588 break;
4589
4590 case 410:
4591 #line 1716 "util/configparser.y"
4643 #line 4645 "util/configparser.c"
4644 break;
4645
4646 case 416:
4647 #line 1745 "util/configparser.y"
45924648 {
45934649 OUTYY(("P(server_module_conf:%s)\n", (yyvsp[0].str)));
45944650 free(cfg_parser->cfg->module_conf);
45954651 cfg_parser->cfg->module_conf = (yyvsp[0].str);
45964652 }
4597 #line 4599 "util/configparser.c"
4598 break;
4599
4600 case 411:
4601 #line 1723 "util/configparser.y"
4653 #line 4655 "util/configparser.c"
4654 break;
4655
4656 case 417:
4657 #line 1752 "util/configparser.y"
46024658 {
46034659 OUTYY(("P(server_val_override_date:%s)\n", (yyvsp[0].str)));
46044660 if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) {
46154671 }
46164672 free((yyvsp[0].str));
46174673 }
4618 #line 4620 "util/configparser.c"
4619 break;
4620
4621 case 412:
4622 #line 1741 "util/configparser.y"
4674 #line 4676 "util/configparser.c"
4675 break;
4676
4677 case 418:
4678 #line 1770 "util/configparser.y"
46234679 {
46244680 OUTYY(("P(server_val_sig_skew_min:%s)\n", (yyvsp[0].str)));
46254681 if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) {
46314687 }
46324688 free((yyvsp[0].str));
46334689 }
4634 #line 4636 "util/configparser.c"
4635 break;
4636
4637 case 413:
4638 #line 1754 "util/configparser.y"
4690 #line 4692 "util/configparser.c"
4691 break;
4692
4693 case 419:
4694 #line 1783 "util/configparser.y"
46394695 {
46404696 OUTYY(("P(server_val_sig_skew_max:%s)\n", (yyvsp[0].str)));
46414697 if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) {
46474703 }
46484704 free((yyvsp[0].str));
46494705 }
4650 #line 4652 "util/configparser.c"
4651 break;
4652
4653 case 414:
4654 #line 1767 "util/configparser.y"
4706 #line 4708 "util/configparser.c"
4707 break;
4708
4709 case 420:
4710 #line 1796 "util/configparser.y"
46554711 {
46564712 OUTYY(("P(server_cache_max_ttl:%s)\n", (yyvsp[0].str)));
46574713 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
46594715 else cfg_parser->cfg->max_ttl = atoi((yyvsp[0].str));
46604716 free((yyvsp[0].str));
46614717 }
4662 #line 4664 "util/configparser.c"
4663 break;
4664
4665 case 415:
4666 #line 1776 "util/configparser.y"
4718 #line 4720 "util/configparser.c"
4719 break;
4720
4721 case 421:
4722 #line 1805 "util/configparser.y"
46674723 {
46684724 OUTYY(("P(server_cache_max_negative_ttl:%s)\n", (yyvsp[0].str)));
46694725 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
46714727 else cfg_parser->cfg->max_negative_ttl = atoi((yyvsp[0].str));
46724728 free((yyvsp[0].str));
46734729 }
4674 #line 4676 "util/configparser.c"
4675 break;
4676
4677 case 416:
4678 #line 1785 "util/configparser.y"
4730 #line 4732 "util/configparser.c"
4731 break;
4732
4733 case 422:
4734 #line 1814 "util/configparser.y"
46794735 {
46804736 OUTYY(("P(server_cache_min_ttl:%s)\n", (yyvsp[0].str)));
46814737 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
46834739 else cfg_parser->cfg->min_ttl = atoi((yyvsp[0].str));
46844740 free((yyvsp[0].str));
46854741 }
4686 #line 4688 "util/configparser.c"
4687 break;
4688
4689 case 417:
4690 #line 1794 "util/configparser.y"
4742 #line 4744 "util/configparser.c"
4743 break;
4744
4745 case 423:
4746 #line 1823 "util/configparser.y"
46914747 {
46924748 OUTYY(("P(server_bogus_ttl:%s)\n", (yyvsp[0].str)));
46934749 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
46954751 else cfg_parser->cfg->bogus_ttl = atoi((yyvsp[0].str));
46964752 free((yyvsp[0].str));
46974753 }
4698 #line 4700 "util/configparser.c"
4699 break;
4700
4701 case 418:
4702 #line 1803 "util/configparser.y"
4754 #line 4756 "util/configparser.c"
4755 break;
4756
4757 case 424:
4758 #line 1832 "util/configparser.y"
47034759 {
47044760 OUTYY(("P(server_val_clean_additional:%s)\n", (yyvsp[0].str)));
47054761 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
47084764 (strcmp((yyvsp[0].str), "yes")==0);
47094765 free((yyvsp[0].str));
47104766 }
4711 #line 4713 "util/configparser.c"
4712 break;
4713
4714 case 419:
4715 #line 1813 "util/configparser.y"
4767 #line 4769 "util/configparser.c"
4768 break;
4769
4770 case 425:
4771 #line 1842 "util/configparser.y"
47164772 {
47174773 OUTYY(("P(server_val_permissive_mode:%s)\n", (yyvsp[0].str)));
47184774 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
47214777 (strcmp((yyvsp[0].str), "yes")==0);
47224778 free((yyvsp[0].str));
47234779 }
4724 #line 4726 "util/configparser.c"
4725 break;
4726
4727 case 420:
4728 #line 1823 "util/configparser.y"
4780 #line 4782 "util/configparser.c"
4781 break;
4782
4783 case 426:
4784 #line 1852 "util/configparser.y"
47294785 {
47304786 OUTYY(("P(server_aggressive_nsec:%s)\n", (yyvsp[0].str)));
47314787 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
47354791 (strcmp((yyvsp[0].str), "yes")==0);
47364792 free((yyvsp[0].str));
47374793 }
4738 #line 4740 "util/configparser.c"
4739 break;
4740
4741 case 421:
4742 #line 1834 "util/configparser.y"
4794 #line 4796 "util/configparser.c"
4795 break;
4796
4797 case 427:
4798 #line 1863 "util/configparser.y"
47434799 {
47444800 OUTYY(("P(server_ignore_cd_flag:%s)\n", (yyvsp[0].str)));
47454801 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
47474803 else cfg_parser->cfg->ignore_cd = (strcmp((yyvsp[0].str), "yes")==0);
47484804 free((yyvsp[0].str));
47494805 }
4750 #line 4752 "util/configparser.c"
4751 break;
4752
4753 case 422:
4754 #line 1843 "util/configparser.y"
4806 #line 4808 "util/configparser.c"
4807 break;
4808
4809 case 428:
4810 #line 1872 "util/configparser.y"
47554811 {
47564812 OUTYY(("P(server_serve_expired:%s)\n", (yyvsp[0].str)));
47574813 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
47594815 else cfg_parser->cfg->serve_expired = (strcmp((yyvsp[0].str), "yes")==0);
47604816 free((yyvsp[0].str));
47614817 }
4762 #line 4764 "util/configparser.c"
4763 break;
4764
4765 case 423:
4766 #line 1852 "util/configparser.y"
4818 #line 4820 "util/configparser.c"
4819 break;
4820
4821 case 429:
4822 #line 1881 "util/configparser.y"
47674823 {
47684824 OUTYY(("P(server_serve_expired_ttl:%s)\n", (yyvsp[0].str)));
47694825 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
47714827 else cfg_parser->cfg->serve_expired_ttl = atoi((yyvsp[0].str));
47724828 free((yyvsp[0].str));
47734829 }
4774 #line 4776 "util/configparser.c"
4775 break;
4776
4777 case 424:
4778 #line 1861 "util/configparser.y"
4830 #line 4832 "util/configparser.c"
4831 break;
4832
4833 case 430:
4834 #line 1890 "util/configparser.y"
47794835 {
47804836 OUTYY(("P(server_serve_expired_ttl_reset:%s)\n", (yyvsp[0].str)));
47814837 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
47834839 else cfg_parser->cfg->serve_expired_ttl_reset = (strcmp((yyvsp[0].str), "yes")==0);
47844840 free((yyvsp[0].str));
47854841 }
4786 #line 4788 "util/configparser.c"
4787 break;
4788
4789 case 425:
4790 #line 1870 "util/configparser.y"
4842 #line 4844 "util/configparser.c"
4843 break;
4844
4845 case 431:
4846 #line 1899 "util/configparser.y"
47914847 {
47924848 OUTYY(("P(server_serve_expired_reply_ttl:%s)\n", (yyvsp[0].str)));
47934849 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
47954851 else cfg_parser->cfg->serve_expired_reply_ttl = atoi((yyvsp[0].str));
47964852 free((yyvsp[0].str));
47974853 }
4798 #line 4800 "util/configparser.c"
4799 break;
4800
4801 case 426:
4802 #line 1879 "util/configparser.y"
4854 #line 4856 "util/configparser.c"
4855 break;
4856
4857 case 432:
4858 #line 1908 "util/configparser.y"
48034859 {
48044860 OUTYY(("P(server_serve_expired_client_timeout:%s)\n", (yyvsp[0].str)));
48054861 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
48074863 else cfg_parser->cfg->serve_expired_client_timeout = atoi((yyvsp[0].str));
48084864 free((yyvsp[0].str));
48094865 }
4810 #line 4812 "util/configparser.c"
4811 break;
4812
4813 case 427:
4814 #line 1888 "util/configparser.y"
4866 #line 4868 "util/configparser.c"
4867 break;
4868
4869 case 433:
4870 #line 1917 "util/configparser.y"
48154871 {
48164872 OUTYY(("P(server_fake_dsa:%s)\n", (yyvsp[0].str)));
48174873 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
48234879 #endif
48244880 free((yyvsp[0].str));
48254881 }
4826 #line 4828 "util/configparser.c"
4827 break;
4828
4829 case 428:
4830 #line 1901 "util/configparser.y"
4882 #line 4884 "util/configparser.c"
4883 break;
4884
4885 case 434:
4886 #line 1930 "util/configparser.y"
48314887 {
48324888 OUTYY(("P(server_fake_sha1:%s)\n", (yyvsp[0].str)));
48334889 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
48394895 #endif
48404896 free((yyvsp[0].str));
48414897 }
4842 #line 4844 "util/configparser.c"
4843 break;
4844
4845 case 429:
4846 #line 1914 "util/configparser.y"
4898 #line 4900 "util/configparser.c"
4899 break;
4900
4901 case 435:
4902 #line 1943 "util/configparser.y"
48474903 {
48484904 OUTYY(("P(server_val_log_level:%s)\n", (yyvsp[0].str)));
48494905 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
48514907 else cfg_parser->cfg->val_log_level = atoi((yyvsp[0].str));
48524908 free((yyvsp[0].str));
48534909 }
4854 #line 4856 "util/configparser.c"
4855 break;
4856
4857 case 430:
4858 #line 1923 "util/configparser.y"
4910 #line 4912 "util/configparser.c"
4911 break;
4912
4913 case 436:
4914 #line 1952 "util/configparser.y"
48594915 {
48604916 OUTYY(("P(server_val_nsec3_keysize_iterations:%s)\n", (yyvsp[0].str)));
48614917 free(cfg_parser->cfg->val_nsec3_key_iterations);
48624918 cfg_parser->cfg->val_nsec3_key_iterations = (yyvsp[0].str);
48634919 }
4864 #line 4866 "util/configparser.c"
4865 break;
4866
4867 case 431:
4868 #line 1930 "util/configparser.y"
4920 #line 4922 "util/configparser.c"
4921 break;
4922
4923 case 437:
4924 #line 1959 "util/configparser.y"
48694925 {
48704926 OUTYY(("P(server_add_holddown:%s)\n", (yyvsp[0].str)));
48714927 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
48734929 else cfg_parser->cfg->add_holddown = atoi((yyvsp[0].str));
48744930 free((yyvsp[0].str));
48754931 }
4876 #line 4878 "util/configparser.c"
4877 break;
4878
4879 case 432:
4880 #line 1939 "util/configparser.y"
4932 #line 4934 "util/configparser.c"
4933 break;
4934
4935 case 438:
4936 #line 1968 "util/configparser.y"
48814937 {
48824938 OUTYY(("P(server_del_holddown:%s)\n", (yyvsp[0].str)));
48834939 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
48854941 else cfg_parser->cfg->del_holddown = atoi((yyvsp[0].str));
48864942 free((yyvsp[0].str));
48874943 }
4888 #line 4890 "util/configparser.c"
4889 break;
4890
4891 case 433:
4892 #line 1948 "util/configparser.y"
4944 #line 4946 "util/configparser.c"
4945 break;
4946
4947 case 439:
4948 #line 1977 "util/configparser.y"
48934949 {
48944950 OUTYY(("P(server_keep_missing:%s)\n", (yyvsp[0].str)));
48954951 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
48974953 else cfg_parser->cfg->keep_missing = atoi((yyvsp[0].str));
48984954 free((yyvsp[0].str));
48994955 }
4900 #line 4902 "util/configparser.c"
4901 break;
4902
4903 case 434:
4904 #line 1957 "util/configparser.y"
4956 #line 4958 "util/configparser.c"
4957 break;
4958
4959 case 440:
4960 #line 1986 "util/configparser.y"
49054961 {
49064962 OUTYY(("P(server_permit_small_holddown:%s)\n", (yyvsp[0].str)));
49074963 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
49104966 (strcmp((yyvsp[0].str), "yes")==0);
49114967 free((yyvsp[0].str));
49124968 }
4913 #line 4915 "util/configparser.c"
4914 break;
4915
4916 case 435:
4917 #line 1966 "util/configparser.y"
4969 #line 4971 "util/configparser.c"
4970 break;
4971
4972 case 441:
4973 #line 1995 "util/configparser.y"
49184974 {
49194975 OUTYY(("P(server_key_cache_size:%s)\n", (yyvsp[0].str)));
49204976 if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->key_cache_size))
49214977 yyerror("memory size expected");
49224978 free((yyvsp[0].str));
49234979 }
4924 #line 4926 "util/configparser.c"
4925 break;
4926
4927 case 436:
4928 #line 1974 "util/configparser.y"
4980 #line 4982 "util/configparser.c"
4981 break;
4982
4983 case 442:
4984 #line 2003 "util/configparser.y"
49294985 {
49304986 OUTYY(("P(server_key_cache_slabs:%s)\n", (yyvsp[0].str)));
49314987 if(atoi((yyvsp[0].str)) == 0)
49374993 }
49384994 free((yyvsp[0].str));
49394995 }
4940 #line 4942 "util/configparser.c"
4941 break;
4942
4943 case 437:
4944 #line 1987 "util/configparser.y"
4996 #line 4998 "util/configparser.c"
4997 break;
4998
4999 case 443:
5000 #line 2016 "util/configparser.y"
49455001 {
49465002 OUTYY(("P(server_neg_cache_size:%s)\n", (yyvsp[0].str)));
49475003 if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->neg_cache_size))
49485004 yyerror("memory size expected");
49495005 free((yyvsp[0].str));
49505006 }
4951 #line 4953 "util/configparser.c"
4952 break;
4953
4954 case 438:
4955 #line 1995 "util/configparser.y"
5007 #line 5009 "util/configparser.c"
5008 break;
5009
5010 case 444:
5011 #line 2024 "util/configparser.y"
49565012 {
49575013 OUTYY(("P(server_local_zone:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
49585014 if(strcmp((yyvsp[0].str), "static")!=0 && strcmp((yyvsp[0].str), "deny")!=0 &&
49925048 fatal_exit("out of memory adding local-zone");
49935049 }
49945050 }
4995 #line 4997 "util/configparser.c"
4996 break;
4997
4998 case 439:
4999 #line 2036 "util/configparser.y"
5051 #line 5053 "util/configparser.c"
5052 break;
5053
5054 case 445:
5055 #line 2065 "util/configparser.y"
50005056 {
50015057 OUTYY(("P(server_local_data:%s)\n", (yyvsp[0].str)));
50025058 if(!cfg_strlist_insert(&cfg_parser->cfg->local_data, (yyvsp[0].str)))
50035059 fatal_exit("out of memory adding local-data");
50045060 }
5005 #line 5007 "util/configparser.c"
5006 break;
5007
5008 case 440:
5009 #line 2043 "util/configparser.y"
5061 #line 5063 "util/configparser.c"
5062 break;
5063
5064 case 446:
5065 #line 2072 "util/configparser.y"
50105066 {
50115067 char* ptr;
50125068 OUTYY(("P(server_local_data_ptr:%s)\n", (yyvsp[0].str)));
50205076 yyerror("local-data-ptr could not be reversed");
50215077 }
50225078 }
5023 #line 5025 "util/configparser.c"
5024 break;
5025
5026 case 441:
5027 #line 2058 "util/configparser.y"
5079 #line 5081 "util/configparser.c"
5080 break;
5081
5082 case 447:
5083 #line 2087 "util/configparser.y"
50285084 {
50295085 OUTYY(("P(server_minimal_responses:%s)\n", (yyvsp[0].str)));
50305086 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
50335089 (strcmp((yyvsp[0].str), "yes")==0);
50345090 free((yyvsp[0].str));
50355091 }
5036 #line 5038 "util/configparser.c"
5037 break;
5038
5039 case 442:
5040 #line 2068 "util/configparser.y"
5092 #line 5094 "util/configparser.c"
5093 break;
5094
5095 case 448:
5096 #line 2097 "util/configparser.y"
50415097 {
50425098 OUTYY(("P(server_rrset_roundrobin:%s)\n", (yyvsp[0].str)));
50435099 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
50465102 (strcmp((yyvsp[0].str), "yes")==0);
50475103 free((yyvsp[0].str));
50485104 }
5049 #line 5051 "util/configparser.c"
5050 break;
5051
5052 case 443:
5053 #line 2078 "util/configparser.y"
5105 #line 5107 "util/configparser.c"
5106 break;
5107
5108 case 449:
5109 #line 2107 "util/configparser.y"
50545110 {
50555111 OUTYY(("P(server_unknown_server_time_limit:%s)\n", (yyvsp[0].str)));
50565112 cfg_parser->cfg->unknown_server_time_limit = atoi((yyvsp[0].str));
50575113 free((yyvsp[0].str));
50585114 }
5059 #line 5061 "util/configparser.c"
5060 break;
5061
5062 case 444:
5063 #line 2085 "util/configparser.y"
5115 #line 5117 "util/configparser.c"
5116 break;
5117
5118 case 450:
5119 #line 2114 "util/configparser.y"
50645120 {
50655121 OUTYY(("P(server_max_udp_size:%s)\n", (yyvsp[0].str)));
50665122 cfg_parser->cfg->max_udp_size = atoi((yyvsp[0].str));
50675123 free((yyvsp[0].str));
50685124 }
5069 #line 5071 "util/configparser.c"
5070 break;
5071
5072 case 445:
5073 #line 2092 "util/configparser.y"
5125 #line 5127 "util/configparser.c"
5126 break;
5127
5128 case 451:
5129 #line 2121 "util/configparser.y"
50745130 {
50755131 OUTYY(("P(dns64_prefix:%s)\n", (yyvsp[0].str)));
50765132 free(cfg_parser->cfg->dns64_prefix);
50775133 cfg_parser->cfg->dns64_prefix = (yyvsp[0].str);
50785134 }
5079 #line 5081 "util/configparser.c"
5080 break;
5081
5082 case 446:
5083 #line 2099 "util/configparser.y"
5135 #line 5137 "util/configparser.c"
5136 break;
5137
5138 case 452:
5139 #line 2128 "util/configparser.y"
50845140 {
50855141 OUTYY(("P(server_dns64_synthall:%s)\n", (yyvsp[0].str)));
50865142 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
50885144 else cfg_parser->cfg->dns64_synthall = (strcmp((yyvsp[0].str), "yes")==0);
50895145 free((yyvsp[0].str));
50905146 }
5091 #line 5093 "util/configparser.c"
5092 break;
5093
5094 case 447:
5095 #line 2108 "util/configparser.y"
5147 #line 5149 "util/configparser.c"
5148 break;
5149
5150 case 453:
5151 #line 2137 "util/configparser.y"
50965152 {
50975153 OUTYY(("P(dns64_ignore_aaaa:%s)\n", (yyvsp[0].str)));
50985154 if(!cfg_strlist_insert(&cfg_parser->cfg->dns64_ignore_aaaa,
50995155 (yyvsp[0].str)))
51005156 fatal_exit("out of memory adding dns64-ignore-aaaa");
51015157 }
5102 #line 5104 "util/configparser.c"
5103 break;
5104
5105 case 448:
5106 #line 2116 "util/configparser.y"
5158 #line 5160 "util/configparser.c"
5159 break;
5160
5161 case 454:
5162 #line 2145 "util/configparser.y"
51075163 {
51085164 char* p, *s = (yyvsp[0].str);
51095165 OUTYY(("P(server_define_tag:%s)\n", (yyvsp[0].str)));
51165172 }
51175173 free((yyvsp[0].str));
51185174 }
5119 #line 5121 "util/configparser.c"
5120 break;
5121
5122 case 449:
5123 #line 2130 "util/configparser.y"
5175 #line 5177 "util/configparser.c"
5176 break;
5177
5178 case 455:
5179 #line 2159 "util/configparser.y"
51245180 {
51255181 size_t len = 0;
51265182 uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str),
51405196 }
51415197 }
51425198 }
5143 #line 5145 "util/configparser.c"
5144 break;
5145
5146 case 450:
5147 #line 2151 "util/configparser.y"
5199 #line 5201 "util/configparser.c"
5200 break;
5201
5202 case 456:
5203 #line 2180 "util/configparser.y"
51485204 {
51495205 size_t len = 0;
51505206 uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str),
51645220 }
51655221 }
51665222 }
5167 #line 5169 "util/configparser.c"
5168 break;
5169
5170 case 451:
5171 #line 2172 "util/configparser.y"
5223 #line 5225 "util/configparser.c"
5224 break;
5225
5226 case 457:
5227 #line 2201 "util/configparser.y"
51725228 {
51735229 OUTYY(("P(server_access_control_tag_action:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str)));
51745230 if(!cfg_str3list_insert(&cfg_parser->cfg->acl_tag_actions,
51795235 free((yyvsp[0].str));
51805236 }
51815237 }
5182 #line 5184 "util/configparser.c"
5183 break;
5184
5185 case 452:
5186 #line 2184 "util/configparser.y"
5238 #line 5240 "util/configparser.c"
5239 break;
5240
5241 case 458:
5242 #line 2213 "util/configparser.y"
51875243 {
51885244 OUTYY(("P(server_access_control_tag_data:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str)));
51895245 if(!cfg_str3list_insert(&cfg_parser->cfg->acl_tag_datas,
51945250 free((yyvsp[0].str));
51955251 }
51965252 }
5197 #line 5199 "util/configparser.c"
5198 break;
5199
5200 case 453:
5201 #line 2196 "util/configparser.y"
5253 #line 5255 "util/configparser.c"
5254 break;
5255
5256 case 459:
5257 #line 2225 "util/configparser.y"
52025258 {
52035259 OUTYY(("P(server_local_zone_override:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str)));
52045260 if(!cfg_str3list_insert(&cfg_parser->cfg->local_zone_overrides,
52095265 free((yyvsp[0].str));
52105266 }
52115267 }
5212 #line 5214 "util/configparser.c"
5213 break;
5214
5215 case 454:
5216 #line 2208 "util/configparser.y"
5268 #line 5270 "util/configparser.c"
5269 break;
5270
5271 case 460:
5272 #line 2237 "util/configparser.y"
52175273 {
52185274 OUTYY(("P(server_access_control_view:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
52195275 if(!cfg_str2list_insert(&cfg_parser->cfg->acl_view,
52215277 yyerror("out of memory");
52225278 }
52235279 }
5224 #line 5226 "util/configparser.c"
5225 break;
5226
5227 case 455:
5228 #line 2217 "util/configparser.y"
5280 #line 5282 "util/configparser.c"
5281 break;
5282
5283 case 461:
5284 #line 2246 "util/configparser.y"
52295285 {
52305286 size_t len = 0;
52315287 uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str),
52455301 }
52465302 }
52475303 }
5248 #line 5250 "util/configparser.c"
5249 break;
5250
5251 case 456:
5252 #line 2238 "util/configparser.y"
5304 #line 5306 "util/configparser.c"
5305 break;
5306
5307 case 462:
5308 #line 2267 "util/configparser.y"
52535309 {
52545310 OUTYY(("P(server_ip_ratelimit:%s)\n", (yyvsp[0].str)));
52555311 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
52575313 else cfg_parser->cfg->ip_ratelimit = atoi((yyvsp[0].str));
52585314 free((yyvsp[0].str));
52595315 }
5260 #line 5262 "util/configparser.c"
5261 break;
5262
5263 case 457:
5264 #line 2248 "util/configparser.y"
5316 #line 5318 "util/configparser.c"
5317 break;
5318
5319 case 463:
5320 #line 2277 "util/configparser.y"
52655321 {
52665322 OUTYY(("P(server_ratelimit:%s)\n", (yyvsp[0].str)));
52675323 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
52695325 else cfg_parser->cfg->ratelimit = atoi((yyvsp[0].str));
52705326 free((yyvsp[0].str));
52715327 }
5272 #line 5274 "util/configparser.c"
5273 break;
5274
5275 case 458:
5276 #line 2257 "util/configparser.y"
5328 #line 5330 "util/configparser.c"
5329 break;
5330
5331 case 464:
5332 #line 2286 "util/configparser.y"
52775333 {
52785334 OUTYY(("P(server_ip_ratelimit_size:%s)\n", (yyvsp[0].str)));
52795335 if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->ip_ratelimit_size))
52805336 yyerror("memory size expected");
52815337 free((yyvsp[0].str));
52825338 }
5283 #line 5285 "util/configparser.c"
5284 break;
5285
5286 case 459:
5287 #line 2265 "util/configparser.y"
5339 #line 5341 "util/configparser.c"
5340 break;
5341
5342 case 465:
5343 #line 2294 "util/configparser.y"
52885344 {
52895345 OUTYY(("P(server_ratelimit_size:%s)\n", (yyvsp[0].str)));
52905346 if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->ratelimit_size))
52915347 yyerror("memory size expected");
52925348 free((yyvsp[0].str));
52935349 }
5294 #line 5296 "util/configparser.c"
5295 break;
5296
5297 case 460:
5298 #line 2273 "util/configparser.y"
5350 #line 5352 "util/configparser.c"
5351 break;
5352
5353 case 466:
5354 #line 2302 "util/configparser.y"
52995355 {
53005356 OUTYY(("P(server_ip_ratelimit_slabs:%s)\n", (yyvsp[0].str)));
53015357 if(atoi((yyvsp[0].str)) == 0)
53075363 }
53085364 free((yyvsp[0].str));
53095365 }
5310 #line 5312 "util/configparser.c"
5311 break;
5312
5313 case 461:
5314 #line 2286 "util/configparser.y"
5366 #line 5368 "util/configparser.c"
5367 break;
5368
5369 case 467:
5370 #line 2315 "util/configparser.y"
53155371 {
53165372 OUTYY(("P(server_ratelimit_slabs:%s)\n", (yyvsp[0].str)));
53175373 if(atoi((yyvsp[0].str)) == 0)
53235379 }
53245380 free((yyvsp[0].str));
53255381 }
5326 #line 5328 "util/configparser.c"
5327 break;
5328
5329 case 462:
5330 #line 2299 "util/configparser.y"
5382 #line 5384 "util/configparser.c"
5383 break;
5384
5385 case 468:
5386 #line 2328 "util/configparser.y"
53315387 {
53325388 OUTYY(("P(server_ratelimit_for_domain:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
53335389 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) {
53415397 "ratelimit-for-domain");
53425398 }
53435399 }
5344 #line 5346 "util/configparser.c"
5345 break;
5346
5347 case 463:
5348 #line 2314 "util/configparser.y"
5400 #line 5402 "util/configparser.c"
5401 break;
5402
5403 case 469:
5404 #line 2343 "util/configparser.y"
53495405 {
53505406 OUTYY(("P(server_ratelimit_below_domain:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
53515407 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) {
53595415 "ratelimit-below-domain");
53605416 }
53615417 }
5362 #line 5364 "util/configparser.c"
5363 break;
5364
5365 case 464:
5366 #line 2329 "util/configparser.y"
5418 #line 5420 "util/configparser.c"
5419 break;
5420
5421 case 470:
5422 #line 2358 "util/configparser.y"
53675423 {
53685424 OUTYY(("P(server_ip_ratelimit_factor:%s)\n", (yyvsp[0].str)));
53695425 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
53715427 else cfg_parser->cfg->ip_ratelimit_factor = atoi((yyvsp[0].str));
53725428 free((yyvsp[0].str));
53735429 }
5374 #line 5376 "util/configparser.c"
5375 break;
5376
5377 case 465:
5378 #line 2338 "util/configparser.y"
5430 #line 5432 "util/configparser.c"
5431 break;
5432
5433 case 471:
5434 #line 2367 "util/configparser.y"
53795435 {
53805436 OUTYY(("P(server_ratelimit_factor:%s)\n", (yyvsp[0].str)));
53815437 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
53835439 else cfg_parser->cfg->ratelimit_factor = atoi((yyvsp[0].str));
53845440 free((yyvsp[0].str));
53855441 }
5386 #line 5388 "util/configparser.c"
5387 break;
5388
5389 case 466:
5390 #line 2347 "util/configparser.y"
5442 #line 5444 "util/configparser.c"
5443 break;
5444
5445 case 472:
5446 #line 2376 "util/configparser.y"
53915447 {
53925448 OUTYY(("P(low-rtt option is deprecated, use fast-server-num instead)\n"));
53935449 free((yyvsp[0].str));
53945450 }
5395 #line 5397 "util/configparser.c"
5396 break;
5397
5398 case 467:
5399 #line 2353 "util/configparser.y"
5451 #line 5453 "util/configparser.c"
5452 break;
5453
5454 case 473:
5455 #line 2382 "util/configparser.y"
54005456 {
54015457 OUTYY(("P(server_fast_server_num:%s)\n", (yyvsp[0].str)));
54025458 if(atoi((yyvsp[0].str)) <= 0)
54045460 else cfg_parser->cfg->fast_server_num = atoi((yyvsp[0].str));
54055461 free((yyvsp[0].str));
54065462 }
5407 #line 5409 "util/configparser.c"
5408 break;
5409
5410 case 468:
5411 #line 2362 "util/configparser.y"
5463 #line 5465 "util/configparser.c"
5464 break;
5465
5466 case 474:
5467 #line 2391 "util/configparser.y"
54125468 {
54135469 OUTYY(("P(server_fast_server_permil:%s)\n", (yyvsp[0].str)));
54145470 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
54165472 else cfg_parser->cfg->fast_server_permil = atoi((yyvsp[0].str));
54175473 free((yyvsp[0].str));
54185474 }
5419 #line 5421 "util/configparser.c"
5420 break;
5421
5422 case 469:
5423 #line 2371 "util/configparser.y"
5475 #line 5477 "util/configparser.c"
5476 break;
5477
5478 case 475:
5479 #line 2400 "util/configparser.y"
54245480 {
54255481 OUTYY(("P(server_qname_minimisation:%s)\n", (yyvsp[0].str)));
54265482 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
54295485 (strcmp((yyvsp[0].str), "yes")==0);
54305486 free((yyvsp[0].str));
54315487 }
5432 #line 5434 "util/configparser.c"
5433 break;
5434
5435 case 470:
5436 #line 2381 "util/configparser.y"
5488 #line 5490 "util/configparser.c"
5489 break;
5490
5491 case 476:
5492 #line 2410 "util/configparser.y"
54375493 {
54385494 OUTYY(("P(server_qname_minimisation_strict:%s)\n", (yyvsp[0].str)));
54395495 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
54425498 (strcmp((yyvsp[0].str), "yes")==0);
54435499 free((yyvsp[0].str));
54445500 }
5445 #line 5447 "util/configparser.c"
5446 break;
5447
5448 case 471:
5449 #line 2391 "util/configparser.y"
5501 #line 5503 "util/configparser.c"
5502 break;
5503
5504 case 477:
5505 #line 2420 "util/configparser.y"
54505506 {
54515507 #ifdef USE_IPSECMOD
54525508 OUTYY(("P(server_ipsecmod_enabled:%s)\n", (yyvsp[0].str)));
54585514 #endif
54595515 free((yyvsp[0].str));
54605516 }
5461 #line 5463 "util/configparser.c"
5462 break;
5463
5464 case 472:
5465 #line 2404 "util/configparser.y"
5517 #line 5519 "util/configparser.c"
5518 break;
5519
5520 case 478:
5521 #line 2433 "util/configparser.y"
54665522 {
54675523 #ifdef USE_IPSECMOD
54685524 OUTYY(("P(server_ipsecmod_ignore_bogus:%s)\n", (yyvsp[0].str)));
54745530 #endif
54755531 free((yyvsp[0].str));
54765532 }
5477 #line 5479 "util/configparser.c"
5478 break;
5479
5480 case 473:
5481 #line 2417 "util/configparser.y"
5533 #line 5535 "util/configparser.c"
5534 break;
5535
5536 case 479:
5537 #line 2446 "util/configparser.y"
54825538 {
54835539 #ifdef USE_IPSECMOD
54845540 OUTYY(("P(server_ipsecmod_hook:%s)\n", (yyvsp[0].str)));
54895545 free((yyvsp[0].str));
54905546 #endif
54915547 }
5492 #line 5494 "util/configparser.c"
5493 break;
5494
5495 case 474:
5496 #line 2429 "util/configparser.y"
5548 #line 5550 "util/configparser.c"
5549 break;
5550
5551 case 480:
5552 #line 2458 "util/configparser.y"
54975553 {
54985554 #ifdef USE_IPSECMOD
54995555 OUTYY(("P(server_ipsecmod_max_ttl:%s)\n", (yyvsp[0].str)));
55065562 free((yyvsp[0].str));
55075563 #endif
55085564 }
5509 #line 5511 "util/configparser.c"
5510 break;
5511
5512 case 475:
5513 #line 2443 "util/configparser.y"
5565 #line 5567 "util/configparser.c"
5566 break;
5567
5568 case 481:
5569 #line 2472 "util/configparser.y"
55145570 {
55155571 #ifdef USE_IPSECMOD
55165572 OUTYY(("P(server_ipsecmod_whitelist:%s)\n", (yyvsp[0].str)));
55215577 free((yyvsp[0].str));
55225578 #endif
55235579 }
5524 #line 5526 "util/configparser.c"
5525 break;
5526
5527 case 476:
5528 #line 2455 "util/configparser.y"
5580 #line 5582 "util/configparser.c"
5581 break;
5582
5583 case 482:
5584 #line 2484 "util/configparser.y"
55295585 {
55305586 #ifdef USE_IPSECMOD
55315587 OUTYY(("P(server_ipsecmod_strict:%s)\n", (yyvsp[0].str)));
55385594 free((yyvsp[0].str));
55395595 #endif
55405596 }
5541 #line 5543 "util/configparser.c"
5542 break;
5543
5544 case 477:
5545 #line 2469 "util/configparser.y"
5546 {
5547 int tag_data;
5548 OUTYY(("P(server_edns_client_tag:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
5549 tag_data = atoi((yyvsp[0].str));
5550 if(tag_data > 65535 || tag_data < 0 ||
5551 (tag_data == 0 && (strlen((yyvsp[0].str)) != 1 || (yyvsp[0].str)[0] != '0')))
5552 yyerror("edns-client-tag data invalid, needs to be a "
5553 "number from 0 to 65535");
5597 #line 5599 "util/configparser.c"
5598 break;
5599
5600 case 483:
5601 #line 2498 "util/configparser.y"
5602 {
5603 OUTYY(("P(server_edns_client_string:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
55545604 if(!cfg_str2list_insert(
5555 &cfg_parser->cfg->edns_client_tags, (yyvsp[-1].str), (yyvsp[0].str)))
5605 &cfg_parser->cfg->edns_client_strings, (yyvsp[-1].str), (yyvsp[0].str)))
55565606 fatal_exit("out of memory adding "
5557 "edns-client-tag");
5558 }
5559 #line 5561 "util/configparser.c"
5560 break;
5561
5562 case 478:
5563 #line 2484 "util/configparser.y"
5564 {
5565 OUTYY(("P(edns_client_tag_opcode:%s)\n", (yyvsp[0].str)));
5607 "edns-client-string");
5608 }
5609 #line 5611 "util/configparser.c"
5610 break;
5611
5612 case 484:
5613 #line 2507 "util/configparser.y"
5614 {
5615 OUTYY(("P(edns_client_string_opcode:%s)\n", (yyvsp[0].str)));
55665616 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
55675617 yyerror("option code expected");
55685618 else if(atoi((yyvsp[0].str)) > 65535 || atoi((yyvsp[0].str)) < 0)
55695619 yyerror("option code must be in interval [0, 65535]");
5570 else cfg_parser->cfg->edns_client_tag_opcode = atoi((yyvsp[0].str));
5571
5572 }
5573 #line 5575 "util/configparser.c"
5574 break;
5575
5576 case 479:
5577 #line 2495 "util/configparser.y"
5620 else cfg_parser->cfg->edns_client_string_opcode = atoi((yyvsp[0].str));
5621 free((yyvsp[0].str));
5622
5623 }
5624 #line 5626 "util/configparser.c"
5625 break;
5626
5627 case 485:
5628 #line 2519 "util/configparser.y"
55785629 {
55795630 OUTYY(("P(name:%s)\n", (yyvsp[0].str)));
55805631 if(cfg_parser->cfg->stubs->name)
55835634 free(cfg_parser->cfg->stubs->name);
55845635 cfg_parser->cfg->stubs->name = (yyvsp[0].str);
55855636 }
5586 #line 5588 "util/configparser.c"
5587 break;
5588
5589 case 480:
5590 #line 2505 "util/configparser.y"
5637 #line 5639 "util/configparser.c"
5638 break;
5639
5640 case 486:
5641 #line 2529 "util/configparser.y"
55915642 {
55925643 OUTYY(("P(stub-host:%s)\n", (yyvsp[0].str)));
55935644 if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->hosts, (yyvsp[0].str)))
55945645 yyerror("out of memory");
55955646 }
5596 #line 5598 "util/configparser.c"
5597 break;
5598
5599 case 481:
5600 #line 2512 "util/configparser.y"
5647 #line 5649 "util/configparser.c"
5648 break;
5649
5650 case 487:
5651 #line 2536 "util/configparser.y"
56015652 {
56025653 OUTYY(("P(stub-addr:%s)\n", (yyvsp[0].str)));
56035654 if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->addrs, (yyvsp[0].str)))
56045655 yyerror("out of memory");
56055656 }
5606 #line 5608 "util/configparser.c"
5607 break;
5608
5609 case 482:
5610 #line 2519 "util/configparser.y"
5657 #line 5659 "util/configparser.c"
5658 break;
5659
5660 case 488:
5661 #line 2543 "util/configparser.y"
56115662 {
56125663 OUTYY(("P(stub-first:%s)\n", (yyvsp[0].str)));
56135664 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
56155666 else cfg_parser->cfg->stubs->isfirst=(strcmp((yyvsp[0].str), "yes")==0);
56165667 free((yyvsp[0].str));
56175668 }
5618 #line 5620 "util/configparser.c"
5619 break;
5620
5621 case 483:
5622 #line 2528 "util/configparser.y"
5669 #line 5671 "util/configparser.c"
5670 break;
5671
5672 case 489:
5673 #line 2552 "util/configparser.y"
56235674 {
56245675 OUTYY(("P(stub-no-cache:%s)\n", (yyvsp[0].str)));
56255676 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
56275678 else cfg_parser->cfg->stubs->no_cache=(strcmp((yyvsp[0].str), "yes")==0);
56285679 free((yyvsp[0].str));
56295680 }
5630 #line 5632 "util/configparser.c"
5631 break;
5632
5633 case 484:
5634 #line 2537 "util/configparser.y"
5681 #line 5683 "util/configparser.c"
5682 break;
5683
5684 case 490:
5685 #line 2561 "util/configparser.y"
56355686 {
56365687 OUTYY(("P(stub-ssl-upstream:%s)\n", (yyvsp[0].str)));
56375688 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
56405691 (strcmp((yyvsp[0].str), "yes")==0);
56415692 free((yyvsp[0].str));
56425693 }
5643 #line 5645 "util/configparser.c"
5644 break;
5645
5646 case 485:
5647 #line 2547 "util/configparser.y"
5694 #line 5696 "util/configparser.c"
5695 break;
5696
5697 case 491:
5698 #line 2571 "util/configparser.y"
56485699 {
56495700 OUTYY(("P(stub-prime:%s)\n", (yyvsp[0].str)));
56505701 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
56535704 (strcmp((yyvsp[0].str), "yes")==0);
56545705 free((yyvsp[0].str));
56555706 }
5656 #line 5658 "util/configparser.c"
5657 break;
5658
5659 case 486:
5660 #line 2557 "util/configparser.y"
5707 #line 5709 "util/configparser.c"
5708 break;
5709
5710 case 492:
5711 #line 2581 "util/configparser.y"
56615712 {
56625713 OUTYY(("P(name:%s)\n", (yyvsp[0].str)));
56635714 if(cfg_parser->cfg->forwards->name)
56665717 free(cfg_parser->cfg->forwards->name);
56675718 cfg_parser->cfg->forwards->name = (yyvsp[0].str);
56685719 }
5669 #line 5671 "util/configparser.c"
5670 break;
5671
5672 case 487:
5673 #line 2567 "util/configparser.y"
5720 #line 5722 "util/configparser.c"
5721 break;
5722
5723 case 493:
5724 #line 2591 "util/configparser.y"
56745725 {
56755726 OUTYY(("P(forward-host:%s)\n", (yyvsp[0].str)));
56765727 if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->hosts, (yyvsp[0].str)))
56775728 yyerror("out of memory");
56785729 }
5679 #line 5681 "util/configparser.c"
5680 break;
5681
5682 case 488:
5683 #line 2574 "util/configparser.y"
5730 #line 5732 "util/configparser.c"
5731 break;
5732
5733 case 494:
5734 #line 2598 "util/configparser.y"
56845735 {
56855736 OUTYY(("P(forward-addr:%s)\n", (yyvsp[0].str)));
56865737 if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->addrs, (yyvsp[0].str)))
56875738 yyerror("out of memory");
56885739 }
5689 #line 5691 "util/configparser.c"
5690 break;
5691
5692 case 489:
5693 #line 2581 "util/configparser.y"
5740 #line 5742 "util/configparser.c"
5741 break;
5742
5743 case 495:
5744 #line 2605 "util/configparser.y"
56945745 {
56955746 OUTYY(("P(forward-first:%s)\n", (yyvsp[0].str)));
56965747 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
56985749 else cfg_parser->cfg->forwards->isfirst=(strcmp((yyvsp[0].str), "yes")==0);
56995750 free((yyvsp[0].str));
57005751 }
5701 #line 5703 "util/configparser.c"
5702 break;
5703
5704 case 490:
5705 #line 2590 "util/configparser.y"
5752 #line 5754 "util/configparser.c"
5753 break;
5754
5755 case 496:
5756 #line 2614 "util/configparser.y"
57065757 {
57075758 OUTYY(("P(forward-no-cache:%s)\n", (yyvsp[0].str)));
57085759 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
57105761 else cfg_parser->cfg->forwards->no_cache=(strcmp((yyvsp[0].str), "yes")==0);
57115762 free((yyvsp[0].str));
57125763 }
5713 #line 5715 "util/configparser.c"
5714 break;
5715
5716 case 491:
5717 #line 2599 "util/configparser.y"
5764 #line 5766 "util/configparser.c"
5765 break;
5766
5767 case 497:
5768 #line 2623 "util/configparser.y"
57185769 {
57195770 OUTYY(("P(forward-ssl-upstream:%s)\n", (yyvsp[0].str)));
57205771 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
57235774 (strcmp((yyvsp[0].str), "yes")==0);
57245775 free((yyvsp[0].str));
57255776 }
5726 #line 5728 "util/configparser.c"
5727 break;
5728
5729 case 492:
5730 #line 2609 "util/configparser.y"
5777 #line 5779 "util/configparser.c"
5778 break;
5779
5780 case 498:
5781 #line 2633 "util/configparser.y"
57315782 {
57325783 OUTYY(("P(name:%s)\n", (yyvsp[0].str)));
57335784 if(cfg_parser->cfg->auths->name)
57365787 free(cfg_parser->cfg->auths->name);
57375788 cfg_parser->cfg->auths->name = (yyvsp[0].str);
57385789 }
5739 #line 5741 "util/configparser.c"
5740 break;
5741
5742 case 493:
5743 #line 2619 "util/configparser.y"
5790 #line 5792 "util/configparser.c"
5791 break;
5792
5793 case 499:
5794 #line 2643 "util/configparser.y"
57445795 {
57455796 OUTYY(("P(zonefile:%s)\n", (yyvsp[0].str)));
57465797 free(cfg_parser->cfg->auths->zonefile);
57475798 cfg_parser->cfg->auths->zonefile = (yyvsp[0].str);
57485799 }
5749 #line 5751 "util/configparser.c"
5750 break;
5751
5752 case 494:
5753 #line 2626 "util/configparser.y"
5800 #line 5802 "util/configparser.c"
5801 break;
5802
5803 case 500:
5804 #line 2650 "util/configparser.y"
57545805 {
57555806 OUTYY(("P(master:%s)\n", (yyvsp[0].str)));
57565807 if(!cfg_strlist_insert(&cfg_parser->cfg->auths->masters, (yyvsp[0].str)))
57575808 yyerror("out of memory");
57585809 }
5759 #line 5761 "util/configparser.c"
5760 break;
5761
5762 case 495:
5763 #line 2633 "util/configparser.y"
5810 #line 5812 "util/configparser.c"
5811 break;
5812
5813 case 501:
5814 #line 2657 "util/configparser.y"
57645815 {
57655816 OUTYY(("P(url:%s)\n", (yyvsp[0].str)));
57665817 if(!cfg_strlist_insert(&cfg_parser->cfg->auths->urls, (yyvsp[0].str)))
57675818 yyerror("out of memory");
57685819 }
5769 #line 5771 "util/configparser.c"
5770 break;
5771
5772 case 496:
5773 #line 2640 "util/configparser.y"
5820 #line 5822 "util/configparser.c"
5821 break;
5822
5823 case 502:
5824 #line 2664 "util/configparser.y"
57745825 {
57755826 OUTYY(("P(allow-notify:%s)\n", (yyvsp[0].str)));
57765827 if(!cfg_strlist_insert(&cfg_parser->cfg->auths->allow_notify,
57775828 (yyvsp[0].str)))
57785829 yyerror("out of memory");
57795830 }
5780 #line 5782 "util/configparser.c"
5781 break;
5782
5783 case 497:
5784 #line 2648 "util/configparser.y"
5831 #line 5833 "util/configparser.c"
5832 break;
5833
5834 case 503:
5835 #line 2672 "util/configparser.y"
57855836 {
57865837 OUTYY(("P(for-downstream:%s)\n", (yyvsp[0].str)));
57875838 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
57905841 (strcmp((yyvsp[0].str), "yes")==0);
57915842 free((yyvsp[0].str));
57925843 }
5793 #line 5795 "util/configparser.c"
5794 break;
5795
5796 case 498:
5797 #line 2658 "util/configparser.y"
5844 #line 5846 "util/configparser.c"
5845 break;
5846
5847 case 504:
5848 #line 2682 "util/configparser.y"
57985849 {
57995850 OUTYY(("P(for-upstream:%s)\n", (yyvsp[0].str)));
58005851 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
58035854 (strcmp((yyvsp[0].str), "yes")==0);
58045855 free((yyvsp[0].str));
58055856 }
5806 #line 5808 "util/configparser.c"
5807 break;
5808
5809 case 499:
5810 #line 2668 "util/configparser.y"
5857 #line 5859 "util/configparser.c"
5858 break;
5859
5860 case 505:
5861 #line 2692 "util/configparser.y"
58115862 {
58125863 OUTYY(("P(fallback-enabled:%s)\n", (yyvsp[0].str)));
58135864 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
58165867 (strcmp((yyvsp[0].str), "yes")==0);
58175868 free((yyvsp[0].str));
58185869 }
5819 #line 5821 "util/configparser.c"
5820 break;
5821
5822 case 500:
5823 #line 2678 "util/configparser.y"
5870 #line 5872 "util/configparser.c"
5871 break;
5872
5873 case 506:
5874 #line 2702 "util/configparser.y"
58245875 {
58255876 OUTYY(("P(name:%s)\n", (yyvsp[0].str)));
58265877 if(cfg_parser->cfg->views->name)
58295880 free(cfg_parser->cfg->views->name);
58305881 cfg_parser->cfg->views->name = (yyvsp[0].str);
58315882 }
5832 #line 5834 "util/configparser.c"
5833 break;
5834
5835 case 501:
5836 #line 2688 "util/configparser.y"
5883 #line 5885 "util/configparser.c"
5884 break;
5885
5886 case 507:
5887 #line 2712 "util/configparser.y"
58375888 {
58385889 OUTYY(("P(view_local_zone:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
58395890 if(strcmp((yyvsp[0].str), "static")!=0 && strcmp((yyvsp[0].str), "deny")!=0 &&
58715922 fatal_exit("out of memory adding local-zone");
58725923 }
58735924 }
5874 #line 5876 "util/configparser.c"
5875 break;
5876
5877 case 502:
5878 #line 2727 "util/configparser.y"
5925 #line 5927 "util/configparser.c"
5926 break;
5927
5928 case 508:
5929 #line 2751 "util/configparser.y"
58795930 {
58805931 OUTYY(("P(view_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
58815932 validate_respip_action((yyvsp[0].str));
58845935 fatal_exit("out of memory adding per-view "
58855936 "response-ip action");
58865937 }
5887 #line 5889 "util/configparser.c"
5888 break;
5889
5890 case 503:
5891 #line 2737 "util/configparser.y"
5938 #line 5940 "util/configparser.c"
5939 break;
5940
5941 case 509:
5942 #line 2761 "util/configparser.y"
58925943 {
58935944 OUTYY(("P(view_response_ip_data:%s)\n", (yyvsp[-1].str)));
58945945 if(!cfg_str2list_insert(
58955946 &cfg_parser->cfg->views->respip_data, (yyvsp[-1].str), (yyvsp[0].str)))
58965947 fatal_exit("out of memory adding response-ip-data");
58975948 }
5898 #line 5900 "util/configparser.c"
5899 break;
5900
5901 case 504:
5902 #line 2745 "util/configparser.y"
5949 #line 5951 "util/configparser.c"
5950 break;
5951
5952 case 510:
5953 #line 2769 "util/configparser.y"
59035954 {
59045955 OUTYY(("P(view_local_data:%s)\n", (yyvsp[0].str)));
59055956 if(!cfg_strlist_insert(&cfg_parser->cfg->views->local_data, (yyvsp[0].str))) {
59065957 fatal_exit("out of memory adding local-data");
59075958 }
59085959 }
5909 #line 5911 "util/configparser.c"
5910 break;
5911
5912 case 505:
5913 #line 2753 "util/configparser.y"
5960 #line 5962 "util/configparser.c"
5961 break;
5962
5963 case 511:
5964 #line 2777 "util/configparser.y"
59145965 {
59155966 char* ptr;
59165967 OUTYY(("P(view_local_data_ptr:%s)\n", (yyvsp[0].str)));
59245975 yyerror("local-data-ptr could not be reversed");
59255976 }
59265977 }
5927 #line 5929 "util/configparser.c"
5928 break;
5929
5930 case 506:
5931 #line 2768 "util/configparser.y"
5978 #line 5980 "util/configparser.c"
5979 break;
5980
5981 case 512:
5982 #line 2792 "util/configparser.y"
59325983 {
59335984 OUTYY(("P(view-first:%s)\n", (yyvsp[0].str)));
59345985 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
59365987 else cfg_parser->cfg->views->isfirst=(strcmp((yyvsp[0].str), "yes")==0);
59375988 free((yyvsp[0].str));
59385989 }
5939 #line 5941 "util/configparser.c"
5940 break;
5941
5942 case 507:
5943 #line 2777 "util/configparser.y"
5990 #line 5992 "util/configparser.c"
5991 break;
5992
5993 case 513:
5994 #line 2801 "util/configparser.y"
59445995 {
59455996 OUTYY(("\nP(remote-control:)\n"));
59465997 }
5947 #line 5949 "util/configparser.c"
5948 break;
5949
5950 case 518:
5951 #line 2788 "util/configparser.y"
5998 #line 6000 "util/configparser.c"
5999 break;
6000
6001 case 524:
6002 #line 2812 "util/configparser.y"
59526003 {
59536004 OUTYY(("P(control_enable:%s)\n", (yyvsp[0].str)));
59546005 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
59576008 (strcmp((yyvsp[0].str), "yes")==0);
59586009 free((yyvsp[0].str));
59596010 }
5960 #line 5962 "util/configparser.c"
5961 break;
5962
5963 case 519:
5964 #line 2798 "util/configparser.y"
6011 #line 6013 "util/configparser.c"
6012 break;
6013
6014 case 525:
6015 #line 2822 "util/configparser.y"
59656016 {
59666017 OUTYY(("P(control_port:%s)\n", (yyvsp[0].str)));
59676018 if(atoi((yyvsp[0].str)) == 0)
59696020 else cfg_parser->cfg->control_port = atoi((yyvsp[0].str));
59706021 free((yyvsp[0].str));
59716022 }
5972 #line 5974 "util/configparser.c"
5973 break;
5974
5975 case 520:
5976 #line 2807 "util/configparser.y"
6023 #line 6025 "util/configparser.c"
6024 break;
6025
6026 case 526:
6027 #line 2831 "util/configparser.y"
59776028 {
59786029 OUTYY(("P(control_interface:%s)\n", (yyvsp[0].str)));
59796030 if(!cfg_strlist_append(&cfg_parser->cfg->control_ifs, (yyvsp[0].str)))
59806031 yyerror("out of memory");
59816032 }
5982 #line 5984 "util/configparser.c"
5983 break;
5984
5985 case 521:
5986 #line 2814 "util/configparser.y"
6033 #line 6035 "util/configparser.c"
6034 break;
6035
6036 case 527:
6037 #line 2838 "util/configparser.y"
59876038 {
59886039 OUTYY(("P(control_use_cert:%s)\n", (yyvsp[0].str)));
59896040 cfg_parser->cfg->control_use_cert = (strcmp((yyvsp[0].str), "yes")==0);
59906041 free((yyvsp[0].str));
59916042 }
5992 #line 5994 "util/configparser.c"
5993 break;
5994
5995 case 522:
5996 #line 2821 "util/configparser.y"
6043 #line 6045 "util/configparser.c"
6044 break;
6045
6046 case 528:
6047 #line 2845 "util/configparser.y"
59976048 {
59986049 OUTYY(("P(rc_server_key_file:%s)\n", (yyvsp[0].str)));
59996050 free(cfg_parser->cfg->server_key_file);
60006051 cfg_parser->cfg->server_key_file = (yyvsp[0].str);
60016052 }
6002 #line 6004 "util/configparser.c"
6003 break;
6004
6005 case 523:
6006 #line 2828 "util/configparser.y"
6053 #line 6055 "util/configparser.c"
6054 break;
6055
6056 case 529:
6057 #line 2852 "util/configparser.y"
60076058 {
60086059 OUTYY(("P(rc_server_cert_file:%s)\n", (yyvsp[0].str)));
60096060 free(cfg_parser->cfg->server_cert_file);
60106061 cfg_parser->cfg->server_cert_file = (yyvsp[0].str);
60116062 }
6012 #line 6014 "util/configparser.c"
6013 break;
6014
6015 case 524:
6016 #line 2835 "util/configparser.y"
6063 #line 6065 "util/configparser.c"
6064 break;
6065
6066 case 530:
6067 #line 2859 "util/configparser.y"
60176068 {
60186069 OUTYY(("P(rc_control_key_file:%s)\n", (yyvsp[0].str)));
60196070 free(cfg_parser->cfg->control_key_file);
60206071 cfg_parser->cfg->control_key_file = (yyvsp[0].str);
60216072 }
6022 #line 6024 "util/configparser.c"
6023 break;
6024
6025 case 525:
6026 #line 2842 "util/configparser.y"
6073 #line 6075 "util/configparser.c"
6074 break;
6075
6076 case 531:
6077 #line 2866 "util/configparser.y"
60276078 {
60286079 OUTYY(("P(rc_control_cert_file:%s)\n", (yyvsp[0].str)));
60296080 free(cfg_parser->cfg->control_cert_file);
60306081 cfg_parser->cfg->control_cert_file = (yyvsp[0].str);
60316082 }
6032 #line 6034 "util/configparser.c"
6033 break;
6034
6035 case 526:
6036 #line 2849 "util/configparser.y"
6083 #line 6085 "util/configparser.c"
6084 break;
6085
6086 case 532:
6087 #line 2873 "util/configparser.y"
60376088 {
60386089 OUTYY(("\nP(dnstap:)\n"));
60396090 }
6040 #line 6042 "util/configparser.c"
6041 break;
6042
6043 case 548:
6044 #line 2869 "util/configparser.y"
6091 #line 6093 "util/configparser.c"
6092 break;
6093
6094 case 554:
6095 #line 2893 "util/configparser.y"
60456096 {
60466097 OUTYY(("P(dt_dnstap_enable:%s)\n", (yyvsp[0].str)));
60476098 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
60496100 else cfg_parser->cfg->dnstap = (strcmp((yyvsp[0].str), "yes")==0);
60506101 free((yyvsp[0].str));
60516102 }
6052 #line 6054 "util/configparser.c"
6053 break;
6054
6055 case 549:
6056 #line 2878 "util/configparser.y"
6103 #line 6105 "util/configparser.c"
6104 break;
6105
6106 case 555:
6107 #line 2902 "util/configparser.y"
60576108 {
60586109 OUTYY(("P(dt_dnstap_bidirectional:%s)\n", (yyvsp[0].str)));
60596110 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
60626113 (strcmp((yyvsp[0].str), "yes")==0);
60636114 free((yyvsp[0].str));
60646115 }
6065 #line 6067 "util/configparser.c"
6066 break;
6067
6068 case 550:
6069 #line 2888 "util/configparser.y"
6116 #line 6118 "util/configparser.c"
6117 break;
6118
6119 case 556:
6120 #line 2912 "util/configparser.y"
60706121 {
60716122 OUTYY(("P(dt_dnstap_socket_path:%s)\n", (yyvsp[0].str)));
60726123 free(cfg_parser->cfg->dnstap_socket_path);
60736124 cfg_parser->cfg->dnstap_socket_path = (yyvsp[0].str);
60746125 }
6075 #line 6077 "util/configparser.c"
6076 break;
6077
6078 case 551:
6079 #line 2895 "util/configparser.y"
6126 #line 6128 "util/configparser.c"
6127 break;
6128
6129 case 557:
6130 #line 2919 "util/configparser.y"
60806131 {
60816132 OUTYY(("P(dt_dnstap_ip:%s)\n", (yyvsp[0].str)));
60826133 free(cfg_parser->cfg->dnstap_ip);
60836134 cfg_parser->cfg->dnstap_ip = (yyvsp[0].str);
60846135 }
6085 #line 6087 "util/configparser.c"
6086 break;
6087
6088 case 552:
6089 #line 2902 "util/configparser.y"
6136 #line 6138 "util/configparser.c"
6137 break;
6138
6139 case 558:
6140 #line 2926 "util/configparser.y"
60906141 {
60916142 OUTYY(("P(dt_dnstap_tls:%s)\n", (yyvsp[0].str)));
60926143 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
60946145 else cfg_parser->cfg->dnstap_tls = (strcmp((yyvsp[0].str), "yes")==0);
60956146 free((yyvsp[0].str));
60966147 }
6097 #line 6099 "util/configparser.c"
6098 break;
6099
6100 case 553:
6101 #line 2911 "util/configparser.y"
6148 #line 6150 "util/configparser.c"
6149 break;
6150
6151 case 559:
6152 #line 2935 "util/configparser.y"
61026153 {
61036154 OUTYY(("P(dt_dnstap_tls_server_name:%s)\n", (yyvsp[0].str)));
61046155 free(cfg_parser->cfg->dnstap_tls_server_name);
61056156 cfg_parser->cfg->dnstap_tls_server_name = (yyvsp[0].str);
61066157 }
6107 #line 6109 "util/configparser.c"
6108 break;
6109
6110 case 554:
6111 #line 2918 "util/configparser.y"
6158 #line 6160 "util/configparser.c"
6159 break;
6160
6161 case 560:
6162 #line 2942 "util/configparser.y"
61126163 {
61136164 OUTYY(("P(dt_dnstap_tls_cert_bundle:%s)\n", (yyvsp[0].str)));
61146165 free(cfg_parser->cfg->dnstap_tls_cert_bundle);
61156166 cfg_parser->cfg->dnstap_tls_cert_bundle = (yyvsp[0].str);
61166167 }
6117 #line 6119 "util/configparser.c"
6118 break;
6119
6120 case 555:
6121 #line 2925 "util/configparser.y"
6168 #line 6170 "util/configparser.c"
6169 break;
6170
6171 case 561:
6172 #line 2949 "util/configparser.y"
61226173 {
61236174 OUTYY(("P(dt_dnstap_tls_client_key_file:%s)\n", (yyvsp[0].str)));
61246175 free(cfg_parser->cfg->dnstap_tls_client_key_file);
61256176 cfg_parser->cfg->dnstap_tls_client_key_file = (yyvsp[0].str);
61266177 }
6127 #line 6129 "util/configparser.c"
6128 break;
6129
6130 case 556:
6131 #line 2932 "util/configparser.y"
6178 #line 6180 "util/configparser.c"
6179 break;
6180
6181 case 562:
6182 #line 2956 "util/configparser.y"
61326183 {
61336184 OUTYY(("P(dt_dnstap_tls_client_cert_file:%s)\n", (yyvsp[0].str)));
61346185 free(cfg_parser->cfg->dnstap_tls_client_cert_file);
61356186 cfg_parser->cfg->dnstap_tls_client_cert_file = (yyvsp[0].str);
61366187 }
6137 #line 6139 "util/configparser.c"
6138 break;
6139
6140 case 557:
6141 #line 2939 "util/configparser.y"
6188 #line 6190 "util/configparser.c"
6189 break;
6190
6191 case 563:
6192 #line 2963 "util/configparser.y"
61426193 {
61436194 OUTYY(("P(dt_dnstap_send_identity:%s)\n", (yyvsp[0].str)));
61446195 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
61466197 else cfg_parser->cfg->dnstap_send_identity = (strcmp((yyvsp[0].str), "yes")==0);
61476198 free((yyvsp[0].str));
61486199 }
6149 #line 6151 "util/configparser.c"
6150 break;
6151
6152 case 558:
6153 #line 2948 "util/configparser.y"
6200 #line 6202 "util/configparser.c"
6201 break;
6202
6203 case 564:
6204 #line 2972 "util/configparser.y"
61546205 {
61556206 OUTYY(("P(dt_dnstap_send_version:%s)\n", (yyvsp[0].str)));
61566207 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
61586209 else cfg_parser->cfg->dnstap_send_version = (strcmp((yyvsp[0].str), "yes")==0);
61596210 free((yyvsp[0].str));
61606211 }
6161 #line 6163 "util/configparser.c"
6162 break;
6163
6164 case 559:
6165 #line 2957 "util/configparser.y"
6212 #line 6214 "util/configparser.c"
6213 break;
6214
6215 case 565:
6216 #line 2981 "util/configparser.y"
61666217 {
61676218 OUTYY(("P(dt_dnstap_identity:%s)\n", (yyvsp[0].str)));
61686219 free(cfg_parser->cfg->dnstap_identity);
61696220 cfg_parser->cfg->dnstap_identity = (yyvsp[0].str);
61706221 }
6171 #line 6173 "util/configparser.c"
6172 break;
6173
6174 case 560:
6175 #line 2964 "util/configparser.y"
6222 #line 6224 "util/configparser.c"
6223 break;
6224
6225 case 566:
6226 #line 2988 "util/configparser.y"
61766227 {
61776228 OUTYY(("P(dt_dnstap_version:%s)\n", (yyvsp[0].str)));
61786229 free(cfg_parser->cfg->dnstap_version);
61796230 cfg_parser->cfg->dnstap_version = (yyvsp[0].str);
61806231 }
6181 #line 6183 "util/configparser.c"
6182 break;
6183
6184 case 561:
6185 #line 2971 "util/configparser.y"
6232 #line 6234 "util/configparser.c"
6233 break;
6234
6235 case 567:
6236 #line 2995 "util/configparser.y"
61866237 {
61876238 OUTYY(("P(dt_dnstap_log_resolver_query_messages:%s)\n", (yyvsp[0].str)));
61886239 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
61916242 (strcmp((yyvsp[0].str), "yes")==0);
61926243 free((yyvsp[0].str));
61936244 }
6194 #line 6196 "util/configparser.c"
6195 break;
6196
6197 case 562:
6198 #line 2981 "util/configparser.y"
6245 #line 6247 "util/configparser.c"
6246 break;
6247
6248 case 568:
6249 #line 3005 "util/configparser.y"
61996250 {
62006251 OUTYY(("P(dt_dnstap_log_resolver_response_messages:%s)\n", (yyvsp[0].str)));
62016252 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
62046255 (strcmp((yyvsp[0].str), "yes")==0);
62056256 free((yyvsp[0].str));
62066257 }
6207 #line 6209 "util/configparser.c"
6208 break;
6209
6210 case 563:
6211 #line 2991 "util/configparser.y"
6258 #line 6260 "util/configparser.c"
6259 break;
6260
6261 case 569:
6262 #line 3015 "util/configparser.y"
62126263 {
62136264 OUTYY(("P(dt_dnstap_log_client_query_messages:%s)\n", (yyvsp[0].str)));
62146265 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
62176268 (strcmp((yyvsp[0].str), "yes")==0);
62186269 free((yyvsp[0].str));
62196270 }
6220 #line 6222 "util/configparser.c"
6221 break;
6222
6223 case 564:
6224 #line 3001 "util/configparser.y"
6271 #line 6273 "util/configparser.c"
6272 break;
6273
6274 case 570:
6275 #line 3025 "util/configparser.y"
62256276 {
62266277 OUTYY(("P(dt_dnstap_log_client_response_messages:%s)\n", (yyvsp[0].str)));
62276278 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
62306281 (strcmp((yyvsp[0].str), "yes")==0);
62316282 free((yyvsp[0].str));
62326283 }
6233 #line 6235 "util/configparser.c"
6234 break;
6235
6236 case 565:
6237 #line 3011 "util/configparser.y"
6284 #line 6286 "util/configparser.c"
6285 break;
6286
6287 case 571:
6288 #line 3035 "util/configparser.y"
62386289 {
62396290 OUTYY(("P(dt_dnstap_log_forwarder_query_messages:%s)\n", (yyvsp[0].str)));
62406291 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
62436294 (strcmp((yyvsp[0].str), "yes")==0);
62446295 free((yyvsp[0].str));
62456296 }
6246 #line 6248 "util/configparser.c"
6247 break;
6248
6249 case 566:
6250 #line 3021 "util/configparser.y"
6297 #line 6299 "util/configparser.c"
6298 break;
6299
6300 case 572:
6301 #line 3045 "util/configparser.y"
62516302 {
62526303 OUTYY(("P(dt_dnstap_log_forwarder_response_messages:%s)\n", (yyvsp[0].str)));
62536304 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
62566307 (strcmp((yyvsp[0].str), "yes")==0);
62576308 free((yyvsp[0].str));
62586309 }
6259 #line 6261 "util/configparser.c"
6260 break;
6261
6262 case 567:
6263 #line 3031 "util/configparser.y"
6310 #line 6312 "util/configparser.c"
6311 break;
6312
6313 case 573:
6314 #line 3055 "util/configparser.y"
62646315 {
62656316 OUTYY(("\nP(python:)\n"));
62666317 }
6267 #line 6269 "util/configparser.c"
6268 break;
6269
6270 case 571:
6271 #line 3040 "util/configparser.y"
6318 #line 6320 "util/configparser.c"
6319 break;
6320
6321 case 577:
6322 #line 3064 "util/configparser.y"
62726323 {
62736324 OUTYY(("P(python-script:%s)\n", (yyvsp[0].str)));
62746325 if(!cfg_strlist_append_ex(&cfg_parser->cfg->python_script, (yyvsp[0].str)))
62756326 yyerror("out of memory");
62766327 }
6277 #line 6279 "util/configparser.c"
6278 break;
6279
6280 case 572:
6281 #line 3046 "util/configparser.y"
6328 #line 6330 "util/configparser.c"
6329 break;
6330
6331 case 578:
6332 #line 3070 "util/configparser.y"
62826333 {
62836334 OUTYY(("\nP(dynlib:)\n"));
62846335 }
6285 #line 6287 "util/configparser.c"
6286 break;
6287
6288 case 576:
6289 #line 3055 "util/configparser.y"
6336 #line 6338 "util/configparser.c"
6337 break;
6338
6339 case 582:
6340 #line 3079 "util/configparser.y"
62906341 {
62916342 OUTYY(("P(dynlib-file:%s)\n", (yyvsp[0].str)));
62926343 if(!cfg_strlist_append_ex(&cfg_parser->cfg->dynlib_file, (yyvsp[0].str)))
62936344 yyerror("out of memory");
62946345 }
6295 #line 6297 "util/configparser.c"
6296 break;
6297
6298 case 577:
6299 #line 3061 "util/configparser.y"
6346 #line 6348 "util/configparser.c"
6347 break;
6348
6349 case 583:
6350 #line 3085 "util/configparser.y"
63006351 {
63016352 OUTYY(("P(disable_dnssec_lame_check:%s)\n", (yyvsp[0].str)));
63026353 if (strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
63056356 (strcmp((yyvsp[0].str), "yes")==0);
63066357 free((yyvsp[0].str));
63076358 }
6308 #line 6310 "util/configparser.c"
6309 break;
6310
6311 case 578:
6312 #line 3071 "util/configparser.y"
6359 #line 6361 "util/configparser.c"
6360 break;
6361
6362 case 584:
6363 #line 3095 "util/configparser.y"
63136364 {
63146365 OUTYY(("P(server_log_identity:%s)\n", (yyvsp[0].str)));
63156366 free(cfg_parser->cfg->log_identity);
63166367 cfg_parser->cfg->log_identity = (yyvsp[0].str);
63176368 }
6318 #line 6320 "util/configparser.c"
6319 break;
6320
6321 case 579:
6322 #line 3078 "util/configparser.y"
6369 #line 6371 "util/configparser.c"
6370 break;
6371
6372 case 585:
6373 #line 3102 "util/configparser.y"
63236374 {
63246375 OUTYY(("P(server_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
63256376 validate_respip_action((yyvsp[0].str));
63276378 (yyvsp[-1].str), (yyvsp[0].str)))
63286379 fatal_exit("out of memory adding response-ip");
63296380 }
6330 #line 6332 "util/configparser.c"
6331 break;
6332
6333 case 580:
6334 #line 3087 "util/configparser.y"
6381 #line 6383 "util/configparser.c"
6382 break;
6383
6384 case 586:
6385 #line 3111 "util/configparser.y"
63356386 {
63366387 OUTYY(("P(server_response_ip_data:%s)\n", (yyvsp[-1].str)));
63376388 if(!cfg_str2list_insert(&cfg_parser->cfg->respip_data,
63386389 (yyvsp[-1].str), (yyvsp[0].str)))
63396390 fatal_exit("out of memory adding response-ip-data");
63406391 }
6341 #line 6343 "util/configparser.c"
6342 break;
6343
6344 case 581:
6345 #line 3095 "util/configparser.y"
6392 #line 6394 "util/configparser.c"
6393 break;
6394
6395 case 587:
6396 #line 3119 "util/configparser.y"
63466397 {
63476398 OUTYY(("\nP(dnscrypt:)\n"));
63486399 }
6349 #line 6351 "util/configparser.c"
6350 break;
6351
6352 case 594:
6353 #line 3111 "util/configparser.y"
6400 #line 6402 "util/configparser.c"
6401 break;
6402
6403 case 600:
6404 #line 3135 "util/configparser.y"
63546405 {
63556406 OUTYY(("P(dnsc_dnscrypt_enable:%s)\n", (yyvsp[0].str)));
63566407 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
63586409 else cfg_parser->cfg->dnscrypt = (strcmp((yyvsp[0].str), "yes")==0);
63596410 free((yyvsp[0].str));
63606411 }
6361 #line 6363 "util/configparser.c"
6362 break;
6363
6364 case 595:
6365 #line 3121 "util/configparser.y"
6412 #line 6414 "util/configparser.c"
6413 break;
6414
6415 case 601:
6416 #line 3145 "util/configparser.y"
63666417 {
63676418 OUTYY(("P(dnsc_dnscrypt_port:%s)\n", (yyvsp[0].str)));
63686419 if(atoi((yyvsp[0].str)) == 0)
63706421 else cfg_parser->cfg->dnscrypt_port = atoi((yyvsp[0].str));
63716422 free((yyvsp[0].str));
63726423 }
6373 #line 6375 "util/configparser.c"
6374 break;
6375
6376 case 596:
6377 #line 3130 "util/configparser.y"
6424 #line 6426 "util/configparser.c"
6425 break;
6426
6427 case 602:
6428 #line 3154 "util/configparser.y"
63786429 {
63796430 OUTYY(("P(dnsc_dnscrypt_provider:%s)\n", (yyvsp[0].str)));
63806431 free(cfg_parser->cfg->dnscrypt_provider);
63816432 cfg_parser->cfg->dnscrypt_provider = (yyvsp[0].str);
63826433 }
6383 #line 6385 "util/configparser.c"
6384 break;
6385
6386 case 597:
6387 #line 3137 "util/configparser.y"
6434 #line 6436 "util/configparser.c"
6435 break;
6436
6437 case 603:
6438 #line 3161 "util/configparser.y"
63886439 {
63896440 OUTYY(("P(dnsc_dnscrypt_provider_cert:%s)\n", (yyvsp[0].str)));
63906441 if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str)))
63926443 if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str)))
63936444 fatal_exit("out of memory adding dnscrypt-provider-cert");
63946445 }
6395 #line 6397 "util/configparser.c"
6396 break;
6397
6398 case 598:
6399 #line 3146 "util/configparser.y"
6446 #line 6448 "util/configparser.c"
6447 break;
6448
6449 case 604:
6450 #line 3170 "util/configparser.y"
64006451 {
64016452 OUTYY(("P(dnsc_dnscrypt_provider_cert_rotated:%s)\n", (yyvsp[0].str)));
64026453 if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert_rotated, (yyvsp[0].str)))
64036454 fatal_exit("out of memory adding dnscrypt-provider-cert-rotated");
64046455 }
6405 #line 6407 "util/configparser.c"
6406 break;
6407
6408 case 599:
6409 #line 3153 "util/configparser.y"
6456 #line 6458 "util/configparser.c"
6457 break;
6458
6459 case 605:
6460 #line 3177 "util/configparser.y"
64106461 {
64116462 OUTYY(("P(dnsc_dnscrypt_secret_key:%s)\n", (yyvsp[0].str)));
64126463 if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str)))
64146465 if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str)))
64156466 fatal_exit("out of memory adding dnscrypt-secret-key");
64166467 }
6417 #line 6419 "util/configparser.c"
6418 break;
6419
6420 case 600:
6421 #line 3162 "util/configparser.y"
6468 #line 6470 "util/configparser.c"
6469 break;
6470
6471 case 606:
6472 #line 3186 "util/configparser.y"
64226473 {
64236474 OUTYY(("P(dnscrypt_shared_secret_cache_size:%s)\n", (yyvsp[0].str)));
64246475 if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->dnscrypt_shared_secret_cache_size))
64256476 yyerror("memory size expected");
64266477 free((yyvsp[0].str));
64276478 }
6428 #line 6430 "util/configparser.c"
6429 break;
6430
6431 case 601:
6432 #line 3170 "util/configparser.y"
6479 #line 6481 "util/configparser.c"
6480 break;
6481
6482 case 607:
6483 #line 3194 "util/configparser.y"
64336484 {
64346485 OUTYY(("P(dnscrypt_shared_secret_cache_slabs:%s)\n", (yyvsp[0].str)));
64356486 if(atoi((yyvsp[0].str)) == 0)
64416492 }
64426493 free((yyvsp[0].str));
64436494 }
6444 #line 6446 "util/configparser.c"
6445 break;
6446
6447 case 602:
6448 #line 3183 "util/configparser.y"
6495 #line 6497 "util/configparser.c"
6496 break;
6497
6498 case 608:
6499 #line 3207 "util/configparser.y"
64496500 {
64506501 OUTYY(("P(dnscrypt_nonce_cache_size:%s)\n", (yyvsp[0].str)));
64516502 if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->dnscrypt_nonce_cache_size))
64526503 yyerror("memory size expected");
64536504 free((yyvsp[0].str));
64546505 }
6455 #line 6457 "util/configparser.c"
6456 break;
6457
6458 case 603:
6459 #line 3191 "util/configparser.y"
6506 #line 6508 "util/configparser.c"
6507 break;
6508
6509 case 609:
6510 #line 3215 "util/configparser.y"
64606511 {
64616512 OUTYY(("P(dnscrypt_nonce_cache_slabs:%s)\n", (yyvsp[0].str)));
64626513 if(atoi((yyvsp[0].str)) == 0)
64686519 }
64696520 free((yyvsp[0].str));
64706521 }
6471 #line 6473 "util/configparser.c"
6472 break;
6473
6474 case 604:
6475 #line 3204 "util/configparser.y"
6522 #line 6524 "util/configparser.c"
6523 break;
6524
6525 case 610:
6526 #line 3228 "util/configparser.y"
64766527 {
64776528 OUTYY(("\nP(cachedb:)\n"));
64786529 }
6479 #line 6481 "util/configparser.c"
6480 break;
6481
6482 case 613:
6483 #line 3215 "util/configparser.y"
6530 #line 6532 "util/configparser.c"
6531 break;
6532
6533 case 619:
6534 #line 3239 "util/configparser.y"
64846535 {
64856536 #ifdef USE_CACHEDB
64866537 OUTYY(("P(backend:%s)\n", (yyvsp[0].str)));
64916542 free((yyvsp[0].str));
64926543 #endif
64936544 }
6494 #line 6496 "util/configparser.c"
6495 break;
6496
6497 case 614:
6498 #line 3227 "util/configparser.y"
6545 #line 6547 "util/configparser.c"
6546 break;
6547
6548 case 620:
6549 #line 3251 "util/configparser.y"
64996550 {
65006551 #ifdef USE_CACHEDB
65016552 OUTYY(("P(secret-seed:%s)\n", (yyvsp[0].str)));
65066557 free((yyvsp[0].str));
65076558 #endif
65086559 }
6509 #line 6511 "util/configparser.c"
6510 break;
6511
6512 case 615:
6513 #line 3239 "util/configparser.y"
6560 #line 6562 "util/configparser.c"
6561 break;
6562
6563 case 621:
6564 #line 3263 "util/configparser.y"
65146565 {
65156566 #if defined(USE_CACHEDB) && defined(USE_REDIS)
65166567 OUTYY(("P(redis_server_host:%s)\n", (yyvsp[0].str)));
65216572 free((yyvsp[0].str));
65226573 #endif
65236574 }
6524 #line 6526 "util/configparser.c"
6525 break;
6526
6527 case 616:
6528 #line 3251 "util/configparser.y"
6575 #line 6577 "util/configparser.c"
6576 break;
6577
6578 case 622:
6579 #line 3275 "util/configparser.y"
65296580 {
65306581 #if defined(USE_CACHEDB) && defined(USE_REDIS)
65316582 int port;
65396590 #endif
65406591 free((yyvsp[0].str));
65416592 }
6542 #line 6544 "util/configparser.c"
6543 break;
6544
6545 case 617:
6546 #line 3266 "util/configparser.y"
6593 #line 6595 "util/configparser.c"
6594 break;
6595
6596 case 623:
6597 #line 3290 "util/configparser.y"
65476598 {
65486599 #if defined(USE_CACHEDB) && defined(USE_REDIS)
65496600 OUTYY(("P(redis_timeout:%s)\n", (yyvsp[0].str)));
65556606 #endif
65566607 free((yyvsp[0].str));
65576608 }
6558 #line 6560 "util/configparser.c"
6559 break;
6560
6561 case 618:
6562 #line 3279 "util/configparser.y"
6609 #line 6611 "util/configparser.c"
6610 break;
6611
6612 case 624:
6613 #line 3303 "util/configparser.y"
65636614 {
65646615 #if defined(USE_CACHEDB) && defined(USE_REDIS)
65656616 OUTYY(("P(redis_expire_records:%s)\n", (yyvsp[0].str)));
65716622 #endif
65726623 free((yyvsp[0].str));
65736624 }
6574 #line 6576 "util/configparser.c"
6575 break;
6576
6577 case 619:
6578 #line 3292 "util/configparser.y"
6625 #line 6627 "util/configparser.c"
6626 break;
6627
6628 case 625:
6629 #line 3316 "util/configparser.y"
65796630 {
65806631 OUTYY(("P(server_tcp_connection_limit:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
65816632 if (atoi((yyvsp[0].str)) < 0)
65856636 fatal_exit("out of memory adding tcp connection limit");
65866637 }
65876638 }
6588 #line 6590 "util/configparser.c"
6589 break;
6590
6591 case 620:
6592 #line 3303 "util/configparser.y"
6639 #line 6641 "util/configparser.c"
6640 break;
6641
6642 case 626:
6643 #line 3327 "util/configparser.y"
65936644 {
65946645 OUTYY(("\nP(ipset:)\n"));
65956646 }
6596 #line 6598 "util/configparser.c"
6597 break;
6598
6599 case 625:
6600 #line 3312 "util/configparser.y"
6647 #line 6649 "util/configparser.c"
6648 break;
6649
6650 case 631:
6651 #line 3336 "util/configparser.y"
66016652 {
66026653 #ifdef USE_IPSET
66036654 OUTYY(("P(name-v4:%s)\n", (yyvsp[0].str)));
66116662 free((yyvsp[0].str));
66126663 #endif
66136664 }
6614 #line 6616 "util/configparser.c"
6615 break;
6616
6617 case 626:
6618 #line 3327 "util/configparser.y"
6665 #line 6667 "util/configparser.c"
6666 break;
6667
6668 case 632:
6669 #line 3351 "util/configparser.y"
66196670 {
66206671 #ifdef USE_IPSET
66216672 OUTYY(("P(name-v6:%s)\n", (yyvsp[0].str)));
66296680 free((yyvsp[0].str));
66306681 #endif
66316682 }
6632 #line 6634 "util/configparser.c"
6633 break;
6634
6635
6636 #line 6638 "util/configparser.c"
6683 #line 6685 "util/configparser.c"
6684 break;
6685
6686
6687 #line 6689 "util/configparser.c"
66376688
66386689 default: break;
66396690 }
68656916 #endif
68666917 return yyresult;
68676918 }
6868 #line 3341 "util/configparser.y"
6919 #line 3365 "util/configparser.y"
68696920
68706921
68716922 /* parse helper routines could be here */
193193 VAR_HTTP_QUERY_BUFFER_SIZE = 400,
194194 VAR_HTTP_RESPONSE_BUFFER_SIZE = 401,
195195 VAR_HTTP_NODELAY = 402,
196 VAR_STUB_FIRST = 403,
197 VAR_MINIMAL_RESPONSES = 404,
198 VAR_RRSET_ROUNDROBIN = 405,
199 VAR_MAX_UDP_SIZE = 406,
200 VAR_DELAY_CLOSE = 407,
201 VAR_UNBLOCK_LAN_ZONES = 408,
202 VAR_INSECURE_LAN_ZONES = 409,
203 VAR_INFRA_CACHE_MIN_RTT = 410,
204 VAR_DNS64_PREFIX = 411,
205 VAR_DNS64_SYNTHALL = 412,
206 VAR_DNS64_IGNORE_AAAA = 413,
207 VAR_DNSTAP = 414,
208 VAR_DNSTAP_ENABLE = 415,
209 VAR_DNSTAP_SOCKET_PATH = 416,
210 VAR_DNSTAP_IP = 417,
211 VAR_DNSTAP_TLS = 418,
212 VAR_DNSTAP_TLS_SERVER_NAME = 419,
213 VAR_DNSTAP_TLS_CERT_BUNDLE = 420,
214 VAR_DNSTAP_TLS_CLIENT_KEY_FILE = 421,
215 VAR_DNSTAP_TLS_CLIENT_CERT_FILE = 422,
216 VAR_DNSTAP_SEND_IDENTITY = 423,
217 VAR_DNSTAP_SEND_VERSION = 424,
218 VAR_DNSTAP_BIDIRECTIONAL = 425,
219 VAR_DNSTAP_IDENTITY = 426,
220 VAR_DNSTAP_VERSION = 427,
221 VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES = 428,
222 VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES = 429,
223 VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES = 430,
224 VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES = 431,
225 VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES = 432,
226 VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES = 433,
227 VAR_RESPONSE_IP_TAG = 434,
228 VAR_RESPONSE_IP = 435,
229 VAR_RESPONSE_IP_DATA = 436,
230 VAR_HARDEN_ALGO_DOWNGRADE = 437,
231 VAR_IP_TRANSPARENT = 438,
232 VAR_IP_DSCP = 439,
233 VAR_DISABLE_DNSSEC_LAME_CHECK = 440,
234 VAR_IP_RATELIMIT = 441,
235 VAR_IP_RATELIMIT_SLABS = 442,
236 VAR_IP_RATELIMIT_SIZE = 443,
237 VAR_RATELIMIT = 444,
238 VAR_RATELIMIT_SLABS = 445,
239 VAR_RATELIMIT_SIZE = 446,
240 VAR_RATELIMIT_FOR_DOMAIN = 447,
241 VAR_RATELIMIT_BELOW_DOMAIN = 448,
242 VAR_IP_RATELIMIT_FACTOR = 449,
243 VAR_RATELIMIT_FACTOR = 450,
244 VAR_SEND_CLIENT_SUBNET = 451,
245 VAR_CLIENT_SUBNET_ZONE = 452,
246 VAR_CLIENT_SUBNET_ALWAYS_FORWARD = 453,
247 VAR_CLIENT_SUBNET_OPCODE = 454,
248 VAR_MAX_CLIENT_SUBNET_IPV4 = 455,
249 VAR_MAX_CLIENT_SUBNET_IPV6 = 456,
250 VAR_MIN_CLIENT_SUBNET_IPV4 = 457,
251 VAR_MIN_CLIENT_SUBNET_IPV6 = 458,
252 VAR_MAX_ECS_TREE_SIZE_IPV4 = 459,
253 VAR_MAX_ECS_TREE_SIZE_IPV6 = 460,
254 VAR_CAPS_WHITELIST = 461,
255 VAR_CACHE_MAX_NEGATIVE_TTL = 462,
256 VAR_PERMIT_SMALL_HOLDDOWN = 463,
257 VAR_QNAME_MINIMISATION = 464,
258 VAR_QNAME_MINIMISATION_STRICT = 465,
259 VAR_IP_FREEBIND = 466,
260 VAR_DEFINE_TAG = 467,
261 VAR_LOCAL_ZONE_TAG = 468,
262 VAR_ACCESS_CONTROL_TAG = 469,
263 VAR_LOCAL_ZONE_OVERRIDE = 470,
264 VAR_ACCESS_CONTROL_TAG_ACTION = 471,
265 VAR_ACCESS_CONTROL_TAG_DATA = 472,
266 VAR_VIEW = 473,
267 VAR_ACCESS_CONTROL_VIEW = 474,
268 VAR_VIEW_FIRST = 475,
269 VAR_SERVE_EXPIRED = 476,
270 VAR_SERVE_EXPIRED_TTL = 477,
271 VAR_SERVE_EXPIRED_TTL_RESET = 478,
272 VAR_SERVE_EXPIRED_REPLY_TTL = 479,
273 VAR_SERVE_EXPIRED_CLIENT_TIMEOUT = 480,
274 VAR_FAKE_DSA = 481,
275 VAR_FAKE_SHA1 = 482,
276 VAR_LOG_IDENTITY = 483,
277 VAR_HIDE_TRUSTANCHOR = 484,
278 VAR_TRUST_ANCHOR_SIGNALING = 485,
279 VAR_AGGRESSIVE_NSEC = 486,
280 VAR_USE_SYSTEMD = 487,
281 VAR_SHM_ENABLE = 488,
282 VAR_SHM_KEY = 489,
283 VAR_ROOT_KEY_SENTINEL = 490,
284 VAR_DNSCRYPT = 491,
285 VAR_DNSCRYPT_ENABLE = 492,
286 VAR_DNSCRYPT_PORT = 493,
287 VAR_DNSCRYPT_PROVIDER = 494,
288 VAR_DNSCRYPT_SECRET_KEY = 495,
289 VAR_DNSCRYPT_PROVIDER_CERT = 496,
290 VAR_DNSCRYPT_PROVIDER_CERT_ROTATED = 497,
291 VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 498,
292 VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 499,
293 VAR_DNSCRYPT_NONCE_CACHE_SIZE = 500,
294 VAR_DNSCRYPT_NONCE_CACHE_SLABS = 501,
295 VAR_IPSECMOD_ENABLED = 502,
296 VAR_IPSECMOD_HOOK = 503,
297 VAR_IPSECMOD_IGNORE_BOGUS = 504,
298 VAR_IPSECMOD_MAX_TTL = 505,
299 VAR_IPSECMOD_WHITELIST = 506,
300 VAR_IPSECMOD_STRICT = 507,
301 VAR_CACHEDB = 508,
302 VAR_CACHEDB_BACKEND = 509,
303 VAR_CACHEDB_SECRETSEED = 510,
304 VAR_CACHEDB_REDISHOST = 511,
305 VAR_CACHEDB_REDISPORT = 512,
306 VAR_CACHEDB_REDISTIMEOUT = 513,
307 VAR_CACHEDB_REDISEXPIRERECORDS = 514,
308 VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 515,
309 VAR_FOR_UPSTREAM = 516,
310 VAR_AUTH_ZONE = 517,
311 VAR_ZONEFILE = 518,
312 VAR_MASTER = 519,
313 VAR_URL = 520,
314 VAR_FOR_DOWNSTREAM = 521,
315 VAR_FALLBACK_ENABLED = 522,
316 VAR_TLS_ADDITIONAL_PORT = 523,
317 VAR_LOW_RTT = 524,
318 VAR_LOW_RTT_PERMIL = 525,
319 VAR_FAST_SERVER_PERMIL = 526,
320 VAR_FAST_SERVER_NUM = 527,
321 VAR_ALLOW_NOTIFY = 528,
322 VAR_TLS_WIN_CERT = 529,
323 VAR_TCP_CONNECTION_LIMIT = 530,
324 VAR_FORWARD_NO_CACHE = 531,
325 VAR_STUB_NO_CACHE = 532,
326 VAR_LOG_SERVFAIL = 533,
327 VAR_DENY_ANY = 534,
328 VAR_UNKNOWN_SERVER_TIME_LIMIT = 535,
329 VAR_LOG_TAG_QUERYREPLY = 536,
330 VAR_STREAM_WAIT_SIZE = 537,
331 VAR_TLS_CIPHERS = 538,
332 VAR_TLS_CIPHERSUITES = 539,
333 VAR_TLS_USE_SNI = 540,
334 VAR_IPSET = 541,
335 VAR_IPSET_NAME_V4 = 542,
336 VAR_IPSET_NAME_V6 = 543,
337 VAR_TLS_SESSION_TICKET_KEYS = 544,
338 VAR_RPZ = 545,
339 VAR_TAGS = 546,
340 VAR_RPZ_ACTION_OVERRIDE = 547,
341 VAR_RPZ_CNAME_OVERRIDE = 548,
342 VAR_RPZ_LOG = 549,
343 VAR_RPZ_LOG_NAME = 550,
344 VAR_DYNLIB = 551,
345 VAR_DYNLIB_FILE = 552,
346 VAR_EDNS_CLIENT_TAG = 553,
347 VAR_EDNS_CLIENT_TAG_OPCODE = 554
196 VAR_HTTP_NOTLS_DOWNSTREAM = 403,
197 VAR_STUB_FIRST = 404,
198 VAR_MINIMAL_RESPONSES = 405,
199 VAR_RRSET_ROUNDROBIN = 406,
200 VAR_MAX_UDP_SIZE = 407,
201 VAR_DELAY_CLOSE = 408,
202 VAR_UDP_CONNECT = 409,
203 VAR_UNBLOCK_LAN_ZONES = 410,
204 VAR_INSECURE_LAN_ZONES = 411,
205 VAR_INFRA_CACHE_MIN_RTT = 412,
206 VAR_INFRA_KEEP_PROBING = 413,
207 VAR_DNS64_PREFIX = 414,
208 VAR_DNS64_SYNTHALL = 415,
209 VAR_DNS64_IGNORE_AAAA = 416,
210 VAR_DNSTAP = 417,
211 VAR_DNSTAP_ENABLE = 418,
212 VAR_DNSTAP_SOCKET_PATH = 419,
213 VAR_DNSTAP_IP = 420,
214 VAR_DNSTAP_TLS = 421,
215 VAR_DNSTAP_TLS_SERVER_NAME = 422,
216 VAR_DNSTAP_TLS_CERT_BUNDLE = 423,
217 VAR_DNSTAP_TLS_CLIENT_KEY_FILE = 424,
218 VAR_DNSTAP_TLS_CLIENT_CERT_FILE = 425,
219 VAR_DNSTAP_SEND_IDENTITY = 426,
220 VAR_DNSTAP_SEND_VERSION = 427,
221 VAR_DNSTAP_BIDIRECTIONAL = 428,
222 VAR_DNSTAP_IDENTITY = 429,
223 VAR_DNSTAP_VERSION = 430,
224 VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES = 431,
225 VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES = 432,
226 VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES = 433,
227 VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES = 434,
228 VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES = 435,
229 VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES = 436,
230 VAR_RESPONSE_IP_TAG = 437,
231 VAR_RESPONSE_IP = 438,
232 VAR_RESPONSE_IP_DATA = 439,
233 VAR_HARDEN_ALGO_DOWNGRADE = 440,
234 VAR_IP_TRANSPARENT = 441,
235 VAR_IP_DSCP = 442,
236 VAR_DISABLE_DNSSEC_LAME_CHECK = 443,
237 VAR_IP_RATELIMIT = 444,
238 VAR_IP_RATELIMIT_SLABS = 445,
239 VAR_IP_RATELIMIT_SIZE = 446,
240 VAR_RATELIMIT = 447,
241 VAR_RATELIMIT_SLABS = 448,
242 VAR_RATELIMIT_SIZE = 449,
243 VAR_RATELIMIT_FOR_DOMAIN = 450,
244 VAR_RATELIMIT_BELOW_DOMAIN = 451,
245 VAR_IP_RATELIMIT_FACTOR = 452,
246 VAR_RATELIMIT_FACTOR = 453,
247 VAR_SEND_CLIENT_SUBNET = 454,
248 VAR_CLIENT_SUBNET_ZONE = 455,
249 VAR_CLIENT_SUBNET_ALWAYS_FORWARD = 456,
250 VAR_CLIENT_SUBNET_OPCODE = 457,
251 VAR_MAX_CLIENT_SUBNET_IPV4 = 458,
252 VAR_MAX_CLIENT_SUBNET_IPV6 = 459,
253 VAR_MIN_CLIENT_SUBNET_IPV4 = 460,
254 VAR_MIN_CLIENT_SUBNET_IPV6 = 461,
255 VAR_MAX_ECS_TREE_SIZE_IPV4 = 462,
256 VAR_MAX_ECS_TREE_SIZE_IPV6 = 463,
257 VAR_CAPS_WHITELIST = 464,
258 VAR_CACHE_MAX_NEGATIVE_TTL = 465,
259 VAR_PERMIT_SMALL_HOLDDOWN = 466,
260 VAR_QNAME_MINIMISATION = 467,
261 VAR_QNAME_MINIMISATION_STRICT = 468,
262 VAR_IP_FREEBIND = 469,
263 VAR_DEFINE_TAG = 470,
264 VAR_LOCAL_ZONE_TAG = 471,
265 VAR_ACCESS_CONTROL_TAG = 472,
266 VAR_LOCAL_ZONE_OVERRIDE = 473,
267 VAR_ACCESS_CONTROL_TAG_ACTION = 474,
268 VAR_ACCESS_CONTROL_TAG_DATA = 475,
269 VAR_VIEW = 476,
270 VAR_ACCESS_CONTROL_VIEW = 477,
271 VAR_VIEW_FIRST = 478,
272 VAR_SERVE_EXPIRED = 479,
273 VAR_SERVE_EXPIRED_TTL = 480,
274 VAR_SERVE_EXPIRED_TTL_RESET = 481,
275 VAR_SERVE_EXPIRED_REPLY_TTL = 482,
276 VAR_SERVE_EXPIRED_CLIENT_TIMEOUT = 483,
277 VAR_FAKE_DSA = 484,
278 VAR_FAKE_SHA1 = 485,
279 VAR_LOG_IDENTITY = 486,
280 VAR_HIDE_TRUSTANCHOR = 487,
281 VAR_TRUST_ANCHOR_SIGNALING = 488,
282 VAR_AGGRESSIVE_NSEC = 489,
283 VAR_USE_SYSTEMD = 490,
284 VAR_SHM_ENABLE = 491,
285 VAR_SHM_KEY = 492,
286 VAR_ROOT_KEY_SENTINEL = 493,
287 VAR_DNSCRYPT = 494,
288 VAR_DNSCRYPT_ENABLE = 495,
289 VAR_DNSCRYPT_PORT = 496,
290 VAR_DNSCRYPT_PROVIDER = 497,
291 VAR_DNSCRYPT_SECRET_KEY = 498,
292 VAR_DNSCRYPT_PROVIDER_CERT = 499,
293 VAR_DNSCRYPT_PROVIDER_CERT_ROTATED = 500,
294 VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 501,
295 VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 502,
296 VAR_DNSCRYPT_NONCE_CACHE_SIZE = 503,
297 VAR_DNSCRYPT_NONCE_CACHE_SLABS = 504,
298 VAR_IPSECMOD_ENABLED = 505,
299 VAR_IPSECMOD_HOOK = 506,
300 VAR_IPSECMOD_IGNORE_BOGUS = 507,
301 VAR_IPSECMOD_MAX_TTL = 508,
302 VAR_IPSECMOD_WHITELIST = 509,
303 VAR_IPSECMOD_STRICT = 510,
304 VAR_CACHEDB = 511,
305 VAR_CACHEDB_BACKEND = 512,
306 VAR_CACHEDB_SECRETSEED = 513,
307 VAR_CACHEDB_REDISHOST = 514,
308 VAR_CACHEDB_REDISPORT = 515,
309 VAR_CACHEDB_REDISTIMEOUT = 516,
310 VAR_CACHEDB_REDISEXPIRERECORDS = 517,
311 VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 518,
312 VAR_FOR_UPSTREAM = 519,
313 VAR_AUTH_ZONE = 520,
314 VAR_ZONEFILE = 521,
315 VAR_MASTER = 522,
316 VAR_URL = 523,
317 VAR_FOR_DOWNSTREAM = 524,
318 VAR_FALLBACK_ENABLED = 525,
319 VAR_TLS_ADDITIONAL_PORT = 526,
320 VAR_LOW_RTT = 527,
321 VAR_LOW_RTT_PERMIL = 528,
322 VAR_FAST_SERVER_PERMIL = 529,
323 VAR_FAST_SERVER_NUM = 530,
324 VAR_ALLOW_NOTIFY = 531,
325 VAR_TLS_WIN_CERT = 532,
326 VAR_TCP_CONNECTION_LIMIT = 533,
327 VAR_FORWARD_NO_CACHE = 534,
328 VAR_STUB_NO_CACHE = 535,
329 VAR_LOG_SERVFAIL = 536,
330 VAR_DENY_ANY = 537,
331 VAR_UNKNOWN_SERVER_TIME_LIMIT = 538,
332 VAR_LOG_TAG_QUERYREPLY = 539,
333 VAR_STREAM_WAIT_SIZE = 540,
334 VAR_TLS_CIPHERS = 541,
335 VAR_TLS_CIPHERSUITES = 542,
336 VAR_TLS_USE_SNI = 543,
337 VAR_IPSET = 544,
338 VAR_IPSET_NAME_V4 = 545,
339 VAR_IPSET_NAME_V6 = 546,
340 VAR_TLS_SESSION_TICKET_KEYS = 547,
341 VAR_RPZ = 548,
342 VAR_TAGS = 549,
343 VAR_RPZ_ACTION_OVERRIDE = 550,
344 VAR_RPZ_CNAME_OVERRIDE = 551,
345 VAR_RPZ_LOG = 552,
346 VAR_RPZ_LOG_NAME = 553,
347 VAR_DYNLIB = 554,
348 VAR_DYNLIB_FILE = 555,
349 VAR_EDNS_CLIENT_STRING = 556,
350 VAR_EDNS_CLIENT_STRING_OPCODE = 557
348351 };
349352 #endif
350353 /* Tokens. */
493496 #define VAR_HTTP_QUERY_BUFFER_SIZE 400
494497 #define VAR_HTTP_RESPONSE_BUFFER_SIZE 401
495498 #define VAR_HTTP_NODELAY 402
496 #define VAR_STUB_FIRST 403
497 #define VAR_MINIMAL_RESPONSES 404
498 #define VAR_RRSET_ROUNDROBIN 405
499 #define VAR_MAX_UDP_SIZE 406
500 #define VAR_DELAY_CLOSE 407
501 #define VAR_UNBLOCK_LAN_ZONES 408
502 #define VAR_INSECURE_LAN_ZONES 409
503 #define VAR_INFRA_CACHE_MIN_RTT 410
504 #define VAR_DNS64_PREFIX 411
505 #define VAR_DNS64_SYNTHALL 412
506 #define VAR_DNS64_IGNORE_AAAA 413
507 #define VAR_DNSTAP 414
508 #define VAR_DNSTAP_ENABLE 415
509 #define VAR_DNSTAP_SOCKET_PATH 416
510 #define VAR_DNSTAP_IP 417
511 #define VAR_DNSTAP_TLS 418
512 #define VAR_DNSTAP_TLS_SERVER_NAME 419
513 #define VAR_DNSTAP_TLS_CERT_BUNDLE 420
514 #define VAR_DNSTAP_TLS_CLIENT_KEY_FILE 421
515 #define VAR_DNSTAP_TLS_CLIENT_CERT_FILE 422
516 #define VAR_DNSTAP_SEND_IDENTITY 423
517 #define VAR_DNSTAP_SEND_VERSION 424
518 #define VAR_DNSTAP_BIDIRECTIONAL 425
519 #define VAR_DNSTAP_IDENTITY 426
520 #define VAR_DNSTAP_VERSION 427
521 #define VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES 428
522 #define VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES 429
523 #define VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES 430
524 #define VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES 431
525 #define VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES 432
526 #define VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES 433
527 #define VAR_RESPONSE_IP_TAG 434
528 #define VAR_RESPONSE_IP 435
529 #define VAR_RESPONSE_IP_DATA 436
530 #define VAR_HARDEN_ALGO_DOWNGRADE 437
531 #define VAR_IP_TRANSPARENT 438
532 #define VAR_IP_DSCP 439
533 #define VAR_DISABLE_DNSSEC_LAME_CHECK 440
534 #define VAR_IP_RATELIMIT 441
535 #define VAR_IP_RATELIMIT_SLABS 442
536 #define VAR_IP_RATELIMIT_SIZE 443
537 #define VAR_RATELIMIT 444
538 #define VAR_RATELIMIT_SLABS 445
539 #define VAR_RATELIMIT_SIZE 446
540 #define VAR_RATELIMIT_FOR_DOMAIN 447
541 #define VAR_RATELIMIT_BELOW_DOMAIN 448
542 #define VAR_IP_RATELIMIT_FACTOR 449
543 #define VAR_RATELIMIT_FACTOR 450
544 #define VAR_SEND_CLIENT_SUBNET 451
545 #define VAR_CLIENT_SUBNET_ZONE 452
546 #define VAR_CLIENT_SUBNET_ALWAYS_FORWARD 453
547 #define VAR_CLIENT_SUBNET_OPCODE 454
548 #define VAR_MAX_CLIENT_SUBNET_IPV4 455
549 #define VAR_MAX_CLIENT_SUBNET_IPV6 456
550 #define VAR_MIN_CLIENT_SUBNET_IPV4 457
551 #define VAR_MIN_CLIENT_SUBNET_IPV6 458
552 #define VAR_MAX_ECS_TREE_SIZE_IPV4 459
553 #define VAR_MAX_ECS_TREE_SIZE_IPV6 460
554 #define VAR_CAPS_WHITELIST 461
555 #define VAR_CACHE_MAX_NEGATIVE_TTL 462
556 #define VAR_PERMIT_SMALL_HOLDDOWN 463
557 #define VAR_QNAME_MINIMISATION 464
558 #define VAR_QNAME_MINIMISATION_STRICT 465
559 #define VAR_IP_FREEBIND 466
560 #define VAR_DEFINE_TAG 467
561 #define VAR_LOCAL_ZONE_TAG 468
562 #define VAR_ACCESS_CONTROL_TAG 469
563 #define VAR_LOCAL_ZONE_OVERRIDE 470
564 #define VAR_ACCESS_CONTROL_TAG_ACTION 471
565 #define VAR_ACCESS_CONTROL_TAG_DATA 472
566 #define VAR_VIEW 473
567 #define VAR_ACCESS_CONTROL_VIEW 474
568 #define VAR_VIEW_FIRST 475
569 #define VAR_SERVE_EXPIRED 476
570 #define VAR_SERVE_EXPIRED_TTL 477
571 #define VAR_SERVE_EXPIRED_TTL_RESET 478
572 #define VAR_SERVE_EXPIRED_REPLY_TTL 479
573 #define VAR_SERVE_EXPIRED_CLIENT_TIMEOUT 480
574 #define VAR_FAKE_DSA 481
575 #define VAR_FAKE_SHA1 482
576 #define VAR_LOG_IDENTITY 483
577 #define VAR_HIDE_TRUSTANCHOR 484
578 #define VAR_TRUST_ANCHOR_SIGNALING 485
579 #define VAR_AGGRESSIVE_NSEC 486
580 #define VAR_USE_SYSTEMD 487
581 #define VAR_SHM_ENABLE 488
582 #define VAR_SHM_KEY 489
583 #define VAR_ROOT_KEY_SENTINEL 490
584 #define VAR_DNSCRYPT 491
585 #define VAR_DNSCRYPT_ENABLE 492
586 #define VAR_DNSCRYPT_PORT 493
587 #define VAR_DNSCRYPT_PROVIDER 494
588 #define VAR_DNSCRYPT_SECRET_KEY 495
589 #define VAR_DNSCRYPT_PROVIDER_CERT 496
590 #define VAR_DNSCRYPT_PROVIDER_CERT_ROTATED 497
591 #define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE 498
592 #define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS 499
593 #define VAR_DNSCRYPT_NONCE_CACHE_SIZE 500
594 #define VAR_DNSCRYPT_NONCE_CACHE_SLABS 501
595 #define VAR_IPSECMOD_ENABLED 502
596 #define VAR_IPSECMOD_HOOK 503
597 #define VAR_IPSECMOD_IGNORE_BOGUS 504
598 #define VAR_IPSECMOD_MAX_TTL 505
599 #define VAR_IPSECMOD_WHITELIST 506
600 #define VAR_IPSECMOD_STRICT 507
601 #define VAR_CACHEDB 508
602 #define VAR_CACHEDB_BACKEND 509
603 #define VAR_CACHEDB_SECRETSEED 510
604 #define VAR_CACHEDB_REDISHOST 511
605 #define VAR_CACHEDB_REDISPORT 512
606 #define VAR_CACHEDB_REDISTIMEOUT 513
607 #define VAR_CACHEDB_REDISEXPIRERECORDS 514
608 #define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 515
609 #define VAR_FOR_UPSTREAM 516
610 #define VAR_AUTH_ZONE 517
611 #define VAR_ZONEFILE 518
612 #define VAR_MASTER 519
613 #define VAR_URL 520
614 #define VAR_FOR_DOWNSTREAM 521
615 #define VAR_FALLBACK_ENABLED 522
616 #define VAR_TLS_ADDITIONAL_PORT 523
617 #define VAR_LOW_RTT 524
618 #define VAR_LOW_RTT_PERMIL 525
619 #define VAR_FAST_SERVER_PERMIL 526
620 #define VAR_FAST_SERVER_NUM 527
621 #define VAR_ALLOW_NOTIFY 528
622 #define VAR_TLS_WIN_CERT 529
623 #define VAR_TCP_CONNECTION_LIMIT 530
624 #define VAR_FORWARD_NO_CACHE 531
625 #define VAR_STUB_NO_CACHE 532
626 #define VAR_LOG_SERVFAIL 533
627 #define VAR_DENY_ANY 534
628 #define VAR_UNKNOWN_SERVER_TIME_LIMIT 535
629 #define VAR_LOG_TAG_QUERYREPLY 536
630 #define VAR_STREAM_WAIT_SIZE 537
631 #define VAR_TLS_CIPHERS 538
632 #define VAR_TLS_CIPHERSUITES 539
633 #define VAR_TLS_USE_SNI 540
634 #define VAR_IPSET 541
635 #define VAR_IPSET_NAME_V4 542
636 #define VAR_IPSET_NAME_V6 543
637 #define VAR_TLS_SESSION_TICKET_KEYS 544
638 #define VAR_RPZ 545
639 #define VAR_TAGS 546
640 #define VAR_RPZ_ACTION_OVERRIDE 547
641 #define VAR_RPZ_CNAME_OVERRIDE 548
642 #define VAR_RPZ_LOG 549
643 #define VAR_RPZ_LOG_NAME 550
644 #define VAR_DYNLIB 551
645 #define VAR_DYNLIB_FILE 552
646 #define VAR_EDNS_CLIENT_TAG 553
647 #define VAR_EDNS_CLIENT_TAG_OPCODE 554
499 #define VAR_HTTP_NOTLS_DOWNSTREAM 403
500 #define VAR_STUB_FIRST 404
501 #define VAR_MINIMAL_RESPONSES 405
502 #define VAR_RRSET_ROUNDROBIN 406
503 #define VAR_MAX_UDP_SIZE 407
504 #define VAR_DELAY_CLOSE 408
505 #define VAR_UDP_CONNECT 409
506 #define VAR_UNBLOCK_LAN_ZONES 410
507 #define VAR_INSECURE_LAN_ZONES 411
508 #define VAR_INFRA_CACHE_MIN_RTT 412
509 #define VAR_INFRA_KEEP_PROBING 413
510 #define VAR_DNS64_PREFIX 414
511 #define VAR_DNS64_SYNTHALL 415
512 #define VAR_DNS64_IGNORE_AAAA 416
513 #define VAR_DNSTAP 417
514 #define VAR_DNSTAP_ENABLE 418
515 #define VAR_DNSTAP_SOCKET_PATH 419
516 #define VAR_DNSTAP_IP 420
517 #define VAR_DNSTAP_TLS 421
518 #define VAR_DNSTAP_TLS_SERVER_NAME 422
519 #define VAR_DNSTAP_TLS_CERT_BUNDLE 423
520 #define VAR_DNSTAP_TLS_CLIENT_KEY_FILE 424
521 #define VAR_DNSTAP_TLS_CLIENT_CERT_FILE 425
522 #define VAR_DNSTAP_SEND_IDENTITY 426
523 #define VAR_DNSTAP_SEND_VERSION 427
524 #define VAR_DNSTAP_BIDIRECTIONAL 428
525 #define VAR_DNSTAP_IDENTITY 429
526 #define VAR_DNSTAP_VERSION 430
527 #define VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES 431
528 #define VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES 432
529 #define VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES 433
530 #define VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES 434
531 #define VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES 435
532 #define VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES 436
533 #define VAR_RESPONSE_IP_TAG 437
534 #define VAR_RESPONSE_IP 438
535 #define VAR_RESPONSE_IP_DATA 439
536 #define VAR_HARDEN_ALGO_DOWNGRADE 440
537 #define VAR_IP_TRANSPARENT 441
538 #define VAR_IP_DSCP 442
539 #define VAR_DISABLE_DNSSEC_LAME_CHECK 443
540 #define VAR_IP_RATELIMIT 444
541 #define VAR_IP_RATELIMIT_SLABS 445
542 #define VAR_IP_RATELIMIT_SIZE 446
543 #define VAR_RATELIMIT 447
544 #define VAR_RATELIMIT_SLABS 448
545 #define VAR_RATELIMIT_SIZE 449
546 #define VAR_RATELIMIT_FOR_DOMAIN 450
547 #define VAR_RATELIMIT_BELOW_DOMAIN 451
548 #define VAR_IP_RATELIMIT_FACTOR 452
549 #define VAR_RATELIMIT_FACTOR 453
550 #define VAR_SEND_CLIENT_SUBNET 454
551 #define VAR_CLIENT_SUBNET_ZONE 455
552 #define VAR_CLIENT_SUBNET_ALWAYS_FORWARD 456
553 #define VAR_CLIENT_SUBNET_OPCODE 457
554 #define VAR_MAX_CLIENT_SUBNET_IPV4 458
555 #define VAR_MAX_CLIENT_SUBNET_IPV6 459
556 #define VAR_MIN_CLIENT_SUBNET_IPV4 460
557 #define VAR_MIN_CLIENT_SUBNET_IPV6 461
558 #define VAR_MAX_ECS_TREE_SIZE_IPV4 462
559 #define VAR_MAX_ECS_TREE_SIZE_IPV6 463
560 #define VAR_CAPS_WHITELIST 464
561 #define VAR_CACHE_MAX_NEGATIVE_TTL 465
562 #define VAR_PERMIT_SMALL_HOLDDOWN 466
563 #define VAR_QNAME_MINIMISATION 467
564 #define VAR_QNAME_MINIMISATION_STRICT 468
565 #define VAR_IP_FREEBIND 469
566 #define VAR_DEFINE_TAG 470
567 #define VAR_LOCAL_ZONE_TAG 471
568 #define VAR_ACCESS_CONTROL_TAG 472
569 #define VAR_LOCAL_ZONE_OVERRIDE 473
570 #define VAR_ACCESS_CONTROL_TAG_ACTION 474
571 #define VAR_ACCESS_CONTROL_TAG_DATA 475
572 #define VAR_VIEW 476
573 #define VAR_ACCESS_CONTROL_VIEW 477
574 #define VAR_VIEW_FIRST 478
575 #define VAR_SERVE_EXPIRED 479
576 #define VAR_SERVE_EXPIRED_TTL 480
577 #define VAR_SERVE_EXPIRED_TTL_RESET 481
578 #define VAR_SERVE_EXPIRED_REPLY_TTL 482
579 #define VAR_SERVE_EXPIRED_CLIENT_TIMEOUT 483
580 #define VAR_FAKE_DSA 484
581 #define VAR_FAKE_SHA1 485
582 #define VAR_LOG_IDENTITY 486
583 #define VAR_HIDE_TRUSTANCHOR 487
584 #define VAR_TRUST_ANCHOR_SIGNALING 488
585 #define VAR_AGGRESSIVE_NSEC 489
586 #define VAR_USE_SYSTEMD 490
587 #define VAR_SHM_ENABLE 491
588 #define VAR_SHM_KEY 492
589 #define VAR_ROOT_KEY_SENTINEL 493
590 #define VAR_DNSCRYPT 494
591 #define VAR_DNSCRYPT_ENABLE 495
592 #define VAR_DNSCRYPT_PORT 496
593 #define VAR_DNSCRYPT_PROVIDER 497
594 #define VAR_DNSCRYPT_SECRET_KEY 498
595 #define VAR_DNSCRYPT_PROVIDER_CERT 499
596 #define VAR_DNSCRYPT_PROVIDER_CERT_ROTATED 500
597 #define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE 501
598 #define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS 502
599 #define VAR_DNSCRYPT_NONCE_CACHE_SIZE 503
600 #define VAR_DNSCRYPT_NONCE_CACHE_SLABS 504
601 #define VAR_IPSECMOD_ENABLED 505
602 #define VAR_IPSECMOD_HOOK 506
603 #define VAR_IPSECMOD_IGNORE_BOGUS 507
604 #define VAR_IPSECMOD_MAX_TTL 508
605 #define VAR_IPSECMOD_WHITELIST 509
606 #define VAR_IPSECMOD_STRICT 510
607 #define VAR_CACHEDB 511
608 #define VAR_CACHEDB_BACKEND 512
609 #define VAR_CACHEDB_SECRETSEED 513
610 #define VAR_CACHEDB_REDISHOST 514
611 #define VAR_CACHEDB_REDISPORT 515
612 #define VAR_CACHEDB_REDISTIMEOUT 516
613 #define VAR_CACHEDB_REDISEXPIRERECORDS 517
614 #define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 518
615 #define VAR_FOR_UPSTREAM 519
616 #define VAR_AUTH_ZONE 520
617 #define VAR_ZONEFILE 521
618 #define VAR_MASTER 522
619 #define VAR_URL 523
620 #define VAR_FOR_DOWNSTREAM 524
621 #define VAR_FALLBACK_ENABLED 525
622 #define VAR_TLS_ADDITIONAL_PORT 526
623 #define VAR_LOW_RTT 527
624 #define VAR_LOW_RTT_PERMIL 528
625 #define VAR_FAST_SERVER_PERMIL 529
626 #define VAR_FAST_SERVER_NUM 530
627 #define VAR_ALLOW_NOTIFY 531
628 #define VAR_TLS_WIN_CERT 532
629 #define VAR_TCP_CONNECTION_LIMIT 533
630 #define VAR_FORWARD_NO_CACHE 534
631 #define VAR_STUB_NO_CACHE 535
632 #define VAR_LOG_SERVFAIL 536
633 #define VAR_DENY_ANY 537
634 #define VAR_UNKNOWN_SERVER_TIME_LIMIT 538
635 #define VAR_LOG_TAG_QUERYREPLY 539
636 #define VAR_STREAM_WAIT_SIZE 540
637 #define VAR_TLS_CIPHERS 541
638 #define VAR_TLS_CIPHERSUITES 542
639 #define VAR_TLS_USE_SNI 543
640 #define VAR_IPSET 544
641 #define VAR_IPSET_NAME_V4 545
642 #define VAR_IPSET_NAME_V6 546
643 #define VAR_TLS_SESSION_TICKET_KEYS 547
644 #define VAR_RPZ 548
645 #define VAR_TAGS 549
646 #define VAR_RPZ_ACTION_OVERRIDE 550
647 #define VAR_RPZ_CNAME_OVERRIDE 551
648 #define VAR_RPZ_LOG 552
649 #define VAR_RPZ_LOG_NAME 553
650 #define VAR_DYNLIB 554
651 #define VAR_DYNLIB_FILE 555
652 #define VAR_EDNS_CLIENT_STRING 556
653 #define VAR_EDNS_CLIENT_STRING_OPCODE 557
648654
649655 /* Value type. */
650656 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
654660
655661 char* str;
656662
657 #line 659 "util/configparser.h"
663 #line 665 "util/configparser.h"
658664
659665 };
660666 typedef union YYSTYPE YYSTYPE;
113113 %token VAR_STUB_SSL_UPSTREAM VAR_FORWARD_SSL_UPSTREAM VAR_TLS_CERT_BUNDLE
114114 %token VAR_HTTPS_PORT VAR_HTTP_ENDPOINT VAR_HTTP_MAX_STREAMS
115115 %token VAR_HTTP_QUERY_BUFFER_SIZE VAR_HTTP_RESPONSE_BUFFER_SIZE
116 %token VAR_HTTP_NODELAY
116 %token VAR_HTTP_NODELAY VAR_HTTP_NOTLS_DOWNSTREAM
117117 %token VAR_STUB_FIRST VAR_MINIMAL_RESPONSES VAR_RRSET_ROUNDROBIN
118 %token VAR_MAX_UDP_SIZE VAR_DELAY_CLOSE
118 %token VAR_MAX_UDP_SIZE VAR_DELAY_CLOSE VAR_UDP_CONNECT
119119 %token VAR_UNBLOCK_LAN_ZONES VAR_INSECURE_LAN_ZONES
120 %token VAR_INFRA_CACHE_MIN_RTT
120 %token VAR_INFRA_CACHE_MIN_RTT VAR_INFRA_KEEP_PROBING
121121 %token VAR_DNS64_PREFIX VAR_DNS64_SYNTHALL VAR_DNS64_IGNORE_AAAA
122122 %token VAR_DNSTAP VAR_DNSTAP_ENABLE VAR_DNSTAP_SOCKET_PATH VAR_DNSTAP_IP
123123 %token VAR_DNSTAP_TLS VAR_DNSTAP_TLS_SERVER_NAME VAR_DNSTAP_TLS_CERT_BUNDLE
177177 %token VAR_IPSET VAR_IPSET_NAME_V4 VAR_IPSET_NAME_V6
178178 %token VAR_TLS_SESSION_TICKET_KEYS VAR_RPZ VAR_TAGS VAR_RPZ_ACTION_OVERRIDE
179179 %token VAR_RPZ_CNAME_OVERRIDE VAR_RPZ_LOG VAR_RPZ_LOG_NAME
180 %token VAR_DYNLIB VAR_DYNLIB_FILE VAR_EDNS_CLIENT_TAG VAR_EDNS_CLIENT_TAG_OPCODE
180 %token VAR_DYNLIB VAR_DYNLIB_FILE VAR_EDNS_CLIENT_STRING
181 %token VAR_EDNS_CLIENT_STRING_OPCODE
181182
182183 %%
183184 toplevelvars: /* empty */ | toplevelvars toplevelvar ;
248249 server_ssl_service_key | server_ssl_service_pem | server_ssl_port |
249250 server_https_port | server_http_endpoint | server_http_max_streams |
250251 server_http_query_buffer_size | server_http_response_buffer_size |
251 server_http_nodelay |
252 server_http_nodelay | server_http_notls_downstream |
252253 server_minimal_responses | server_rrset_roundrobin | server_max_udp_size |
253 server_so_reuseport | server_delay_close |
254 server_so_reuseport | server_delay_close | server_udp_connect |
254255 server_unblock_lan_zones | server_insecure_lan_zones |
255256 server_dns64_prefix | server_dns64_synthall | server_dns64_ignore_aaaa |
256257 server_infra_cache_min_rtt | server_harden_algo_downgrade |
257258 server_ip_transparent | server_ip_ratelimit | server_ratelimit |
258 server_ip_dscp |
259 server_ip_dscp | server_infra_keep_probing |
259260 server_ip_ratelimit_slabs | server_ratelimit_slabs |
260261 server_ip_ratelimit_size | server_ratelimit_size |
261262 server_ratelimit_for_domain |
290291 server_unknown_server_time_limit | server_log_tag_queryreply |
291292 server_stream_wait_size | server_tls_ciphers |
292293 server_tls_ciphersuites | server_tls_session_ticket_keys |
293 server_tls_use_sni | server_edns_client_tag |
294 server_edns_client_tag_opcode
294 server_tls_use_sni | server_edns_client_string |
295 server_edns_client_string_opcode
295296 ;
296297 stubstart: VAR_STUB_ZONE
297298 {
981982 if(atoi($2) == 0)
982983 yyerror("port number expected");
983984 else cfg_parser->cfg->https_port = atoi($2);
985 free($2);
984986 };
985987 server_http_endpoint: VAR_HTTP_ENDPOINT STRING_ARG
986988 {
10281030 if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0)
10291031 yyerror("expected yes or no.");
10301032 else cfg_parser->cfg->http_nodelay = (strcmp($2, "yes")==0);
1033 free($2);
1034 }
1035 server_http_notls_downstream: VAR_HTTP_NOTLS_DOWNSTREAM STRING_ARG
1036 {
1037 OUTYY(("P(server_http_notls_downstream:%s)\n", $2));
1038 if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0)
1039 yyerror("expected yes or no.");
1040 else cfg_parser->cfg->http_notls_downstream = (strcmp($2, "yes")==0);
10311041 free($2);
10321042 };
10331043 server_use_systemd: VAR_USE_SYSTEMD STRING_ARG
14331443 free($2);
14341444 }
14351445 ;
1446 server_udp_connect: VAR_UDP_CONNECT STRING_ARG
1447 {
1448 OUTYY(("P(server_udp_connect:%s)\n", $2));
1449 if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0)
1450 yyerror("expected yes or no.");
1451 else cfg_parser->cfg->udp_connect = (strcmp($2, "yes")==0);
1452 free($2);
1453 }
1454 ;
14361455 server_unblock_lan_zones: VAR_UNBLOCK_LAN_ZONES STRING_ARG
14371456 {
14381457 OUTYY(("P(server_unblock_lan_zones:%s)\n", $2));
15271546 if(atoi($2) == 0 && strcmp($2, "0") != 0)
15281547 yyerror("number expected");
15291548 else cfg_parser->cfg->infra_cache_min_rtt = atoi($2);
1549 free($2);
1550 }
1551 ;
1552 server_infra_keep_probing: VAR_INFRA_KEEP_PROBING STRING_ARG
1553 {
1554 OUTYY(("P(server_infra_keep_probing:%s)\n", $2));
1555 if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0)
1556 yyerror("expected yes or no.");
1557 else cfg_parser->cfg->infra_keep_probing =
1558 (strcmp($2, "yes")==0);
15301559 free($2);
15311560 }
15321561 ;
24642493 #endif
24652494 }
24662495 ;
2467 server_edns_client_tag: VAR_EDNS_CLIENT_TAG STRING_ARG STRING_ARG
2468 {
2469 int tag_data;
2470 OUTYY(("P(server_edns_client_tag:%s %s)\n", $2, $3));
2471 tag_data = atoi($3);
2472 if(tag_data > 65535 || tag_data < 0 ||
2473 (tag_data == 0 && (strlen($3) != 1 || $3[0] != '0')))
2474 yyerror("edns-client-tag data invalid, needs to be a "
2475 "number from 0 to 65535");
2496 server_edns_client_string: VAR_EDNS_CLIENT_STRING STRING_ARG STRING_ARG
2497 {
2498 OUTYY(("P(server_edns_client_string:%s %s)\n", $2, $3));
24762499 if(!cfg_str2list_insert(
2477 &cfg_parser->cfg->edns_client_tags, $2, $3))
2500 &cfg_parser->cfg->edns_client_strings, $2, $3))
24782501 fatal_exit("out of memory adding "
2479 "edns-client-tag");
2480 }
2481 ;
2482 server_edns_client_tag_opcode: VAR_EDNS_CLIENT_TAG_OPCODE STRING_ARG
2483 {
2484 OUTYY(("P(edns_client_tag_opcode:%s)\n", $2));
2502 "edns-client-string");
2503 }
2504 ;
2505 server_edns_client_string_opcode: VAR_EDNS_CLIENT_STRING_OPCODE STRING_ARG
2506 {
2507 OUTYY(("P(edns_client_string_opcode:%s)\n", $2));
24852508 if(atoi($2) == 0 && strcmp($2, "0") != 0)
24862509 yyerror("option code expected");
24872510 else if(atoi($2) > 65535 || atoi($2) < 0)
24882511 yyerror("option code must be in interval [0, 65535]");
2489 else cfg_parser->cfg->edns_client_tag_opcode = atoi($2);
2512 else cfg_parser->cfg->edns_client_string_opcode = atoi($2);
2513 free($2);
24902514
24912515 }
24922516 ;
623623
624624 for(i=0;i<rep->an_numrrsets; i++) {
625625 if(ntohs(rep->rrsets[i]->rk.type) == qtype) {
626 /* for priming queries, type NS, include addresses */
627 if(qtype == LDNS_RR_TYPE_NS)
628 return 0;
626629 /* in case it is a wildcard with DNSSEC, there will
627630 * be NSEC/NSEC3 records in the authority section
628631 * that we cannot remove */
551551 * @param rep: Reply info. Could be NULL.
552552 * @param rcode: return code.
553553 * @param edns: edns data of the reply.
554 * @param repinfo: comm_reply. NULL.
554 * @param repinfo: comm_reply. Reply information for a communication point.
555555 * @param region: region to store data.
556556 * @return false on failure (a callback function returned an error).
557557 */
4747 #include "util/data/msgparse.h"
4848 #include "util/data/msgreply.h"
4949
50 struct edns_tags* edns_tags_create(void)
50 struct edns_strings* edns_strings_create(void)
5151 {
52 struct edns_tags* edns_tags = calloc(1, sizeof(struct edns_tags));
53 if(!edns_tags)
52 struct edns_strings* edns_strings = calloc(1,
53 sizeof(struct edns_strings));
54 if(!edns_strings)
5455 return NULL;
55 if(!(edns_tags->region = regional_create())) {
56 edns_tags_delete(edns_tags);
56 if(!(edns_strings->region = regional_create())) {
57 edns_strings_delete(edns_strings);
5758 return NULL;
5859 }
59 return edns_tags;
60 return edns_strings;
6061 }
6162
62 void edns_tags_delete(struct edns_tags* edns_tags)
63 void edns_strings_delete(struct edns_strings* edns_strings)
6364 {
64 if(!edns_tags)
65 if(!edns_strings)
6566 return;
66 regional_destroy(edns_tags->region);
67 free(edns_tags);
67 regional_destroy(edns_strings->region);
68 free(edns_strings);
6869 }
6970
7071 static int
71 edns_tags_client_insert(struct edns_tags* edns_tags,
72 edns_strings_client_insert(struct edns_strings* edns_strings,
7273 struct sockaddr_storage* addr, socklen_t addrlen, int net,
73 uint16_t tag_data)
74 const char* string)
7475 {
75 struct edns_tag_addr* eta = regional_alloc_zero(edns_tags->region,
76 sizeof(struct edns_tag_addr));
77 if(!eta)
76 struct edns_string_addr* esa = regional_alloc_zero(edns_strings->region,
77 sizeof(struct edns_string_addr));
78 if(!esa)
7879 return 0;
79 eta->tag_data = tag_data;
80 if(!addr_tree_insert(&edns_tags->client_tags, &eta->node, addr, addrlen,
81 net)) {
82 verbose(VERB_QUERY, "duplicate EDNS client tag ignored.");
80 esa->string_len = strlen(string);
81 esa->string = regional_alloc_init(edns_strings->region, string,
82 esa->string_len);
83 if(!esa->string)
84 return 0;
85 if(!addr_tree_insert(&edns_strings->client_strings, &esa->node, addr,
86 addrlen, net)) {
87 verbose(VERB_QUERY, "duplicate EDNS client string ignored.");
8388 }
8489 return 1;
8590 }
8691
87 int edns_tags_apply_cfg(struct edns_tags* edns_tags,
92 int edns_strings_apply_cfg(struct edns_strings* edns_strings,
8893 struct config_file* config)
8994 {
9095 struct config_str2list* c;
91 regional_free_all(edns_tags->region);
92 addr_tree_init(&edns_tags->client_tags);
96 regional_free_all(edns_strings->region);
97 addr_tree_init(&edns_strings->client_strings);
9398
94 for(c=config->edns_client_tags; c; c=c->next) {
99 for(c=config->edns_client_strings; c; c=c->next) {
95100 struct sockaddr_storage addr;
96101 socklen_t addrlen;
97102 int net;
98 uint16_t tag_data;
99103 log_assert(c->str && c->str2);
100104
101105 if(!netblockstrtoaddr(c->str, UNBOUND_DNS_PORT, &addr, &addrlen,
102106 &net)) {
103 log_err("cannot parse EDNS client tag IP netblock: %s",
104 c->str);
107 log_err("cannot parse EDNS client string IP netblock: "
108 "%s", c->str);
105109 return 0;
106110 }
107 tag_data = atoi(c->str2); /* validated in config parser */
108 if(!edns_tags_client_insert(edns_tags, &addr, addrlen, net,
109 tag_data)) {
110 log_err("out of memory while adding EDNS tags");
111 if(!edns_strings_client_insert(edns_strings, &addr, addrlen,
112 net, c->str2)) {
113 log_err("out of memory while adding EDNS strings");
111114 return 0;
112115 }
113116 }
114 edns_tags->client_tag_opcode = config->edns_client_tag_opcode;
117 edns_strings->client_string_opcode = config->edns_client_string_opcode;
115118
116 addr_tree_init_parents(&edns_tags->client_tags);
119 addr_tree_init_parents(&edns_strings->client_strings);
117120 return 1;
118121 }
119122
120 struct edns_tag_addr*
121 edns_tag_addr_lookup(rbtree_type* tree, struct sockaddr_storage* addr,
123 struct edns_string_addr*
124 edns_string_addr_lookup(rbtree_type* tree, struct sockaddr_storage* addr,
122125 socklen_t addrlen)
123126 {
124 return (struct edns_tag_addr*)addr_tree_lookup(tree, addr, addrlen);
127 return (struct edns_string_addr*)addr_tree_lookup(tree, addr, addrlen);
125128 }
126129
127130 static int edns_keepalive(struct edns_data* edns_out, struct edns_data* edns_in,
4949 struct regional;
5050
5151 /**
52 * Structure containing all EDNS tags.
52 * Structure containing all EDNS strings.
5353 */
54 struct edns_tags {
55 /** Tree of EDNS client tags to use in upstream queries, per address
56 * prefix. Contains nodes of type edns_tag_addr. */
57 rbtree_type client_tags;
58 /** EDNS opcode to use for client tags */
59 uint16_t client_tag_opcode;
54 struct edns_strings {
55 /** Tree of EDNS client strings to use in upstream queries, per address
56 * prefix. Contains nodes of type edns_string_addr. */
57 rbtree_type client_strings;
58 /** EDNS opcode to use for client strings */
59 uint16_t client_string_opcode;
6060 /** region to allocate tree nodes in */
6161 struct regional* region;
6262 };
6363
6464 /**
65 * EDNS tag. Node of rbtree, containing tag and prefix.
65 * EDNS string. Node of rbtree, containing string and prefix.
6666 */
67 struct edns_tag_addr {
67 struct edns_string_addr {
6868 /** node in address tree, used for tree lookups. Need to be the first
6969 * member of this struct. */
7070 struct addr_tree_node node;
71 /** tag data, in host byte ordering */
72 uint16_t tag_data;
71 /** string, ascii format */
72 uint8_t* string;
73 /** length of string */
74 size_t string_len;
7375 };
7476
7577 /**
76 * Create structure to hold EDNS tags
77 * @return: newly created edns_tags, NULL on alloc failure.
78 * Create structure to hold EDNS strings
79 * @return: newly created edns_strings, NULL on alloc failure.
7880 */
79 struct edns_tags* edns_tags_create(void);
81 struct edns_strings* edns_strings_create(void);
8082
81 /** Delete EDNS tags structure
82 * @param edns_tags: struct to delete
83 /** Delete EDNS strings structure
84 * @param edns_strings: struct to delete
8385 */
84 void edns_tags_delete(struct edns_tags* edns_tags);
86 void edns_strings_delete(struct edns_strings* edns_strings);
8587
8688 /**
87 * Add configured EDNS tags
88 * @param edns_tags: edns tags to apply config to
89 * @param config: struct containing EDNS tags configuration
89 * Add configured EDNS strings
90 * @param edns_strings: edns strings to apply config to
91 * @param config: struct containing EDNS strings configuration
9092 * @return 0 on error
9193 */
92 int edns_tags_apply_cfg(struct edns_tags* edns_tags,
94 int edns_strings_apply_cfg(struct edns_strings* edns_strings,
9395 struct config_file* config);
9496
9597 /**
96 * Find tag for address.
97 * @param tree: tree containing EDNS tags per address prefix.
98 * Find string for address.
99 * @param tree: tree containing EDNS strings per address prefix.
98100 * @param addr: address to use for tree lookup
99101 * @param addrlen: length of address
100102 * @return: matching tree node, NULL otherwise
101103 */
102 struct edns_tag_addr*
103 edns_tag_addr_lookup(rbtree_type* tree, struct sockaddr_storage* addr,
104 struct edns_string_addr*
105 edns_string_addr_lookup(rbtree_type* tree, struct sockaddr_storage* addr,
104106 socklen_t addrlen);
105107
106108 /**
228228 else if(fptr == &fwd_cmp) return 1;
229229 else if(fptr == &pending_cmp) return 1;
230230 else if(fptr == &serviced_cmp) return 1;
231 else if(fptr == &reuse_cmp) return 1;
232 else if(fptr == &reuse_id_cmp) return 1;
231233 else if(fptr == &name_tree_compare) return 1;
232234 else if(fptr == &order_lock_cmp) return 1;
233235 else if(fptr == &codeline_cmp) return 1;
52895289 22005,
52905290 22273,
52915291 22305,
5292 22333,
52925293 22335,
52935294 22343,
52945295 22347,
519519 struct edns_known_option* edns_known_options;
520520 /* Number of known edns options */
521521 size_t edns_known_options_num;
522 /** EDNS client tag information */
523 struct edns_tags* edns_tags;
522 /** EDNS client string information */
523 struct edns_strings* edns_strings;
524524
525525 /* Make every mesh state unique, do not aggregate mesh states. */
526526 int unique_mesh;
340340 if(sldns_buffer_remaining(packet) == 0)
341341 log_err("error: send empty UDP packet");
342342 #endif
343 log_assert(addr && addrlen > 0);
344 sent = sendto(c->fd, (void*)sldns_buffer_begin(packet),
345 sldns_buffer_remaining(packet), 0,
346 addr, addrlen);
343 if(addr) {
344 log_assert(addr && addrlen > 0);
345 sent = sendto(c->fd, (void*)sldns_buffer_begin(packet),
346 sldns_buffer_remaining(packet), 0,
347 addr, addrlen);
348 } else {
349 sent = send(c->fd, (void*)sldns_buffer_begin(packet),
350 sldns_buffer_remaining(packet), 0);
351 }
347352 if(sent == -1) {
348353 /* try again and block, waiting for IO to complete,
349354 * we want to send the answer, and we will wait for
573578 #endif /* AF_INET6 && IPV6_PKTINFO && HAVE_SENDMSG */
574579 }
575580
581 /** return true is UDP receive error needs to be logged */
582 static int udp_recv_needs_log(int err)
583 {
584 switch(err) {
585 case ECONNREFUSED:
586 # ifdef ENETUNREACH
587 case ENETUNREACH:
588 # endif
589 # ifdef EHOSTDOWN
590 case EHOSTDOWN:
591 # endif
592 # ifdef EHOSTUNREACH
593 case EHOSTUNREACH:
594 # endif
595 # ifdef ENETDOWN
596 case ENETDOWN:
597 # endif
598 if(verbosity >= VERB_ALGO)
599 return 1;
600 return 0;
601 default:
602 break;
603 }
604 return 1;
605 }
606
576607 void
577608 comm_point_udp_ancil_callback(int fd, short event, void* arg)
578609 {
615646 msg.msg_flags = 0;
616647 rcv = recvmsg(fd, &msg, 0);
617648 if(rcv == -1) {
618 if(errno != EAGAIN && errno != EINTR) {
649 if(errno != EAGAIN && errno != EINTR
650 && udp_recv_needs_log(errno)) {
619651 log_err("recvmsg failed: %s", strerror(errno));
620652 }
621653 return;
696728 (struct sockaddr*)&rep.addr, &rep.addrlen);
697729 if(rcv == -1) {
698730 #ifndef USE_WINSOCK
699 if(errno != EAGAIN && errno != EINTR)
731 if(errno != EAGAIN && errno != EINTR
732 && udp_recv_needs_log(errno))
700733 log_err("recvfrom %d failed: %s",
701734 fd, strerror(errno));
702735 #else
964997 /* clear leftover flags from previous use, and then set the
965998 * correct event base for the event structure for libevent */
966999 ub_event_free(c_hdl->ev->ev);
1000 if((c_hdl->type == comm_tcp && c_hdl->tcp_req_info) ||
1001 c_hdl->type == comm_local || c_hdl->type == comm_raw)
1002 c_hdl->tcp_do_toggle_rw = 0;
1003 else c_hdl->tcp_do_toggle_rw = 1;
9671004
9681005 if(c_hdl->type == comm_http) {
9691006 #ifdef HAVE_NGHTTP2
9761013 !http2_submit_settings(c_hdl->h2_session)) {
9771014 log_warn("failed to submit http2 settings");
9781015 return;
1016 }
1017 if(!c->ssl) {
1018 c_hdl->tcp_do_toggle_rw = 0;
1019 c_hdl->use_h2 = 1;
9791020 }
9801021 #endif
9811022 c_hdl->ev->ev = ub_event_new(c_hdl->ev->base->eb->base, -1,
10411082 comm_point_start_listening(c->tcp_parent, -1, -1);
10421083 }
10431084 }
1085 c->tcp_more_read_again = NULL;
1086 c->tcp_more_write_again = NULL;
10441087 }
10451088
10461089 /** do the callback when writing is done */
10481091 tcp_callback_writer(struct comm_point* c)
10491092 {
10501093 log_assert(c->type == comm_tcp);
1051 sldns_buffer_clear(c->buffer);
1094 if(!c->tcp_write_and_read) {
1095 sldns_buffer_clear(c->buffer);
1096 c->tcp_byte_count = 0;
1097 }
10521098 if(c->tcp_do_toggle_rw)
10531099 c->tcp_is_reading = 1;
1054 c->tcp_byte_count = 0;
10551100 /* switch from listening(write) to listening(read) */
10561101 if(c->tcp_req_info) {
10571102 tcp_req_info_handle_writedone(c->tcp_req_info);
10581103 } else {
10591104 comm_point_stop_listening(c);
1060 comm_point_start_listening(c, -1, c->tcp_timeout_msec);
1105 if(c->tcp_write_and_read) {
1106 fptr_ok(fptr_whitelist_comm_point(c->callback));
1107 if( (*c->callback)(c, c->cb_arg, NETEVENT_PKT_WRITTEN,
1108 &c->repinfo) ) {
1109 comm_point_start_listening(c, -1,
1110 c->tcp_timeout_msec);
1111 }
1112 } else {
1113 comm_point_start_listening(c, -1, c->tcp_timeout_msec);
1114 }
10611115 }
10621116 }
10631117
13601414 }
13611415 /* ignore return, if fails we may simply block */
13621416 (void)SSL_set_mode(c->ssl, (long)SSL_MODE_ENABLE_PARTIAL_WRITE);
1363 if(c->tcp_byte_count < sizeof(uint16_t)) {
1364 uint16_t len = htons(sldns_buffer_limit(c->buffer));
1417 if((c->tcp_write_and_read?c->tcp_write_byte_count:c->tcp_byte_count) < sizeof(uint16_t)) {
1418 uint16_t len = htons(c->tcp_write_and_read?c->tcp_write_pkt_len:sldns_buffer_limit(c->buffer));
13651419 ERR_clear_error();
1366 if(sizeof(uint16_t)+sldns_buffer_remaining(c->buffer) <
1420 if(c->tcp_write_and_read) {
1421 if(c->tcp_write_pkt_len + 2 < LDNS_RR_BUF_SIZE) {
1422 /* combine the tcp length and the query for
1423 * write, this emulates writev */
1424 uint8_t buf[LDNS_RR_BUF_SIZE];
1425 memmove(buf, &len, sizeof(uint16_t));
1426 memmove(buf+sizeof(uint16_t),
1427 c->tcp_write_pkt,
1428 c->tcp_write_pkt_len);
1429 r = SSL_write(c->ssl,
1430 (void*)(buf+c->tcp_write_byte_count),
1431 c->tcp_write_pkt_len + 2 -
1432 c->tcp_write_byte_count);
1433 } else {
1434 r = SSL_write(c->ssl,
1435 (void*)(((uint8_t*)&len)+c->tcp_write_byte_count),
1436 (int)(sizeof(uint16_t)-c->tcp_write_byte_count));
1437 }
1438 } else if(sizeof(uint16_t)+sldns_buffer_remaining(c->buffer) <
13671439 LDNS_RR_BUF_SIZE) {
13681440 /* combine the tcp length and the query for write,
13691441 * this emulates writev */
14051477 log_crypto_err("could not SSL_write");
14061478 return 0;
14071479 }
1408 c->tcp_byte_count += r;
1409 if(c->tcp_byte_count < sizeof(uint16_t))
1410 return 1;
1411 sldns_buffer_set_position(c->buffer, c->tcp_byte_count -
1412 sizeof(uint16_t));
1413 if(sldns_buffer_remaining(c->buffer) == 0) {
1480 if(c->tcp_write_and_read) {
1481 c->tcp_write_byte_count += r;
1482 if(c->tcp_write_byte_count < sizeof(uint16_t))
1483 return 1;
1484 } else {
1485 c->tcp_byte_count += r;
1486 if(c->tcp_byte_count < sizeof(uint16_t))
1487 return 1;
1488 sldns_buffer_set_position(c->buffer, c->tcp_byte_count -
1489 sizeof(uint16_t));
1490 }
1491 if((!c->tcp_write_and_read && sldns_buffer_remaining(c->buffer) == 0) || (c->tcp_write_and_read && c->tcp_write_byte_count == c->tcp_write_pkt_len + 2)) {
14141492 tcp_callback_writer(c);
14151493 return 1;
14161494 }
14171495 }
1418 log_assert(sldns_buffer_remaining(c->buffer) > 0);
1496 log_assert(c->tcp_write_and_read || sldns_buffer_remaining(c->buffer) > 0);
1497 log_assert(!c->tcp_write_and_read || c->tcp_write_byte_count < c->tcp_write_pkt_len + 2);
14191498 ERR_clear_error();
1420 r = SSL_write(c->ssl, (void*)sldns_buffer_current(c->buffer),
1421 (int)sldns_buffer_remaining(c->buffer));
1499 if(c->tcp_write_and_read) {
1500 r = SSL_write(c->ssl, (void*)(c->tcp_write_pkt + c->tcp_write_byte_count - 2),
1501 (int)(c->tcp_write_pkt_len + 2 - c->tcp_write_byte_count));
1502 } else {
1503 r = SSL_write(c->ssl, (void*)sldns_buffer_current(c->buffer),
1504 (int)sldns_buffer_remaining(c->buffer));
1505 }
14221506 if(r <= 0) {
14231507 int want = SSL_get_error(c->ssl, r);
14241508 if(want == SSL_ERROR_ZERO_RETURN) {
14431527 log_crypto_err("could not SSL_write");
14441528 return 0;
14451529 }
1446 sldns_buffer_skip(c->buffer, (ssize_t)r);
1447
1448 if(sldns_buffer_remaining(c->buffer) == 0) {
1530 if(c->tcp_write_and_read) {
1531 c->tcp_write_byte_count += r;
1532 } else {
1533 sldns_buffer_skip(c->buffer, (ssize_t)r);
1534 }
1535
1536 if((!c->tcp_write_and_read && sldns_buffer_remaining(c->buffer) == 0) || (c->tcp_write_and_read && c->tcp_write_byte_count == c->tcp_write_pkt_len + 2)) {
14491537 tcp_callback_writer(c);
14501538 }
14511539 return 1;
14571545
14581546 /** handle ssl tcp connection with dns contents */
14591547 static int
1460 ssl_handle_it(struct comm_point* c)
1461 {
1462 if(c->tcp_is_reading)
1548 ssl_handle_it(struct comm_point* c, int is_write)
1549 {
1550 /* handle case where renegotiation wants read during write call
1551 * or write during read calls */
1552 if(is_write && c->ssl_shake_state == comm_ssl_shake_hs_write)
1553 return ssl_handle_read(c);
1554 else if(!is_write && c->ssl_shake_state == comm_ssl_shake_hs_read)
1555 return ssl_handle_write(c);
1556 /* handle read events for read operation and write events for a
1557 * write operation */
1558 else if(!is_write)
14631559 return ssl_handle_read(c);
14641560 return ssl_handle_write(c);
14651561 }
14761572 ssize_t r;
14771573 log_assert(c->type == comm_tcp || c->type == comm_local);
14781574 if(c->ssl)
1479 return ssl_handle_it(c);
1480 if(!c->tcp_is_reading)
1575 return ssl_handle_it(c, 0);
1576 if(!c->tcp_is_reading && !c->tcp_write_and_read)
14811577 return 0;
14821578
14831579 log_assert(fd != -1);
15801676 #else
15811677 buffer = c->buffer;
15821678 #endif
1583 if(c->tcp_is_reading && !c->ssl)
1679 if(c->tcp_is_reading && !c->ssl && !c->tcp_write_and_read)
15841680 return 0;
15851681 log_assert(fd != -1);
1586 if(c->tcp_byte_count == 0 && c->tcp_check_nb_connect) {
1682 if(((!c->tcp_write_and_read && c->tcp_byte_count == 0) || (c->tcp_write_and_read && c->tcp_write_byte_count == 0)) && c->tcp_check_nb_connect) {
15871683 /* check for pending error from nonblocking connect */
15881684 /* from Stevens, unix network programming, vol1, 3rd ed, p450*/
15891685 int error = 0;
16241720 }
16251721 }
16261722 if(c->ssl)
1627 return ssl_handle_it(c);
1723 return ssl_handle_it(c, 1);
16281724
16291725 #ifdef USE_MSG_FASTOPEN
16301726 /* Only try this on first use of a connection that uses tfo,
16331729 if(c->tcp_do_fastopen == 1) {
16341730 /* this form of sendmsg() does both a connect() and send() so need to
16351731 look for various flavours of error*/
1636 uint16_t len = htons(sldns_buffer_limit(buffer));
1732 uint16_t len = htons(c->tcp_write_and_read?c->tcp_write_pkt_len:sldns_buffer_limit(buffer));
16371733 struct msghdr msg;
16381734 struct iovec iov[2];
16391735 c->tcp_do_fastopen = 0;
16401736 memset(&msg, 0, sizeof(msg));
1641 iov[0].iov_base = (uint8_t*)&len + c->tcp_byte_count;
1642 iov[0].iov_len = sizeof(uint16_t) - c->tcp_byte_count;
1643 iov[1].iov_base = sldns_buffer_begin(buffer);
1644 iov[1].iov_len = sldns_buffer_limit(buffer);
1737 if(c->tcp_write_and_read) {
1738 iov[0].iov_base = (uint8_t*)&len + c->tcp_write_byte_count;
1739 iov[0].iov_len = sizeof(uint16_t) - c->tcp_write_byte_count;
1740 iov[1].iov_base = c->tcp_write_pkt;
1741 iov[1].iov_len = c->tcp_write_pkt_len;
1742 } else {
1743 iov[0].iov_base = (uint8_t*)&len + c->tcp_byte_count;
1744 iov[0].iov_len = sizeof(uint16_t) - c->tcp_byte_count;
1745 iov[1].iov_base = sldns_buffer_begin(buffer);
1746 iov[1].iov_len = sldns_buffer_limit(buffer);
1747 }
16451748 log_assert(iov[0].iov_len > 0);
16461749 msg.msg_name = &c->repinfo.addr;
16471750 msg.msg_namelen = c->repinfo.addrlen;
16871790 }
16881791
16891792 } else {
1690 c->tcp_byte_count += r;
1691 if(c->tcp_byte_count < sizeof(uint16_t))
1692 return 1;
1693 sldns_buffer_set_position(buffer, c->tcp_byte_count -
1694 sizeof(uint16_t));
1695 if(sldns_buffer_remaining(buffer) == 0) {
1793 if(c->tcp_write_and_read) {
1794 c->tcp_write_byte_count += r;
1795 if(c->tcp_write_byte_count < sizeof(uint16_t))
1796 return 1;
1797 } else {
1798 c->tcp_byte_count += r;
1799 if(c->tcp_byte_count < sizeof(uint16_t))
1800 return 1;
1801 sldns_buffer_set_position(buffer, c->tcp_byte_count -
1802 sizeof(uint16_t));
1803 }
1804 if((!c->tcp_write_and_read && sldns_buffer_remaining(buffer) == 0) || (c->tcp_write_and_read && c->tcp_write_byte_count == c->tcp_write_pkt_len + 2)) {
16961805 tcp_callback_writer(c);
16971806 return 1;
16981807 }
17001809 }
17011810 #endif /* USE_MSG_FASTOPEN */
17021811
1703 if(c->tcp_byte_count < sizeof(uint16_t)) {
1704 uint16_t len = htons(sldns_buffer_limit(buffer));
1812 if((c->tcp_write_and_read?c->tcp_write_byte_count:c->tcp_byte_count) < sizeof(uint16_t)) {
1813 uint16_t len = htons(c->tcp_write_and_read?c->tcp_write_pkt_len:sldns_buffer_limit(buffer));
17051814 #ifdef HAVE_WRITEV
17061815 struct iovec iov[2];
1707 iov[0].iov_base = (uint8_t*)&len + c->tcp_byte_count;
1708 iov[0].iov_len = sizeof(uint16_t) - c->tcp_byte_count;
1709 iov[1].iov_base = sldns_buffer_begin(buffer);
1710 iov[1].iov_len = sldns_buffer_limit(buffer);
1816 if(c->tcp_write_and_read) {
1817 iov[0].iov_base = (uint8_t*)&len + c->tcp_write_byte_count;
1818 iov[0].iov_len = sizeof(uint16_t) - c->tcp_write_byte_count;
1819 iov[1].iov_base = c->tcp_write_pkt;
1820 iov[1].iov_len = c->tcp_write_pkt_len;
1821 } else {
1822 iov[0].iov_base = (uint8_t*)&len + c->tcp_byte_count;
1823 iov[0].iov_len = sizeof(uint16_t) - c->tcp_byte_count;
1824 iov[1].iov_base = sldns_buffer_begin(buffer);
1825 iov[1].iov_len = sldns_buffer_limit(buffer);
1826 }
17111827 log_assert(iov[0].iov_len > 0);
17121828 r = writev(fd, iov, 2);
17131829 #else /* HAVE_WRITEV */
1714 r = send(fd, (void*)(((uint8_t*)&len)+c->tcp_byte_count),
1715 sizeof(uint16_t)-c->tcp_byte_count, 0);
1830 if(c->tcp_write_and_read) {
1831 r = send(fd, (void*)(((uint8_t*)&len)+c->tcp_write_byte_count),
1832 sizeof(uint16_t)-c->tcp_write_byte_count, 0);
1833 } else {
1834 r = send(fd, (void*)(((uint8_t*)&len)+c->tcp_byte_count),
1835 sizeof(uint16_t)-c->tcp_byte_count, 0);
1836 }
17161837 #endif /* HAVE_WRITEV */
17171838 if(r == -1) {
17181839 #ifndef USE_WINSOCK
17511872 #endif
17521873 return 0;
17531874 }
1754 c->tcp_byte_count += r;
1755 if(c->tcp_byte_count < sizeof(uint16_t))
1756 return 1;
1757 sldns_buffer_set_position(buffer, c->tcp_byte_count -
1758 sizeof(uint16_t));
1759 if(sldns_buffer_remaining(buffer) == 0) {
1875 if(c->tcp_write_and_read) {
1876 c->tcp_write_byte_count += r;
1877 if(c->tcp_write_byte_count < sizeof(uint16_t))
1878 return 1;
1879 } else {
1880 c->tcp_byte_count += r;
1881 if(c->tcp_byte_count < sizeof(uint16_t))
1882 return 1;
1883 sldns_buffer_set_position(buffer, c->tcp_byte_count -
1884 sizeof(uint16_t));
1885 }
1886 if((!c->tcp_write_and_read && sldns_buffer_remaining(buffer) == 0) || (c->tcp_write_and_read && c->tcp_write_byte_count == c->tcp_write_pkt_len + 2)) {
17601887 tcp_callback_writer(c);
17611888 return 1;
17621889 }
17631890 }
1764 log_assert(sldns_buffer_remaining(buffer) > 0);
1765 r = send(fd, (void*)sldns_buffer_current(buffer),
1766 sldns_buffer_remaining(buffer), 0);
1891 log_assert(c->tcp_write_and_read || sldns_buffer_remaining(buffer) > 0);
1892 log_assert(!c->tcp_write_and_read || c->tcp_write_byte_count < c->tcp_write_pkt_len + 2);
1893 if(c->tcp_write_and_read) {
1894 r = send(fd, (void*)c->tcp_write_pkt + c->tcp_write_byte_count - 2,
1895 c->tcp_write_pkt_len + 2 - c->tcp_write_byte_count, 0);
1896 } else {
1897 r = send(fd, (void*)sldns_buffer_current(buffer),
1898 sldns_buffer_remaining(buffer), 0);
1899 }
17671900 if(r == -1) {
17681901 #ifndef USE_WINSOCK
17691902 if(errno == EINTR || errno == EAGAIN)
17861919 &c->repinfo.addr, c->repinfo.addrlen);
17871920 return 0;
17881921 }
1789 sldns_buffer_skip(buffer, r);
1790
1791 if(sldns_buffer_remaining(buffer) == 0) {
1922 if(c->tcp_write_and_read) {
1923 c->tcp_write_byte_count += r;
1924 } else {
1925 sldns_buffer_skip(buffer, r);
1926 }
1927
1928 if((!c->tcp_write_and_read && sldns_buffer_remaining(buffer) == 0) || (c->tcp_write_and_read && c->tcp_write_byte_count == c->tcp_write_pkt_len + 2)) {
17921929 tcp_callback_writer(c);
17931930 }
17941931
18181955 }
18191956 }
18201957
1958 /** read again to drain buffers when there could be more to read */
1959 static void
1960 tcp_more_read_again(int fd, struct comm_point* c)
1961 {
1962 /* if the packet is done, but another one could be waiting on
1963 * the connection, the callback signals this, and we try again */
1964 /* this continues until the read routines get EAGAIN or so,
1965 * and thus does not call the callback, and the bool is 0 */
1966 int* moreread = c->tcp_more_read_again;
1967 while(moreread && *moreread) {
1968 *moreread = 0;
1969 if(!comm_point_tcp_handle_read(fd, c, 0)) {
1970 reclaim_tcp_handler(c);
1971 if(!c->tcp_do_close) {
1972 fptr_ok(fptr_whitelist_comm_point(
1973 c->callback));
1974 (void)(*c->callback)(c, c->cb_arg,
1975 NETEVENT_CLOSED, NULL);
1976 }
1977 return;
1978 }
1979 }
1980 }
1981
1982 /** write again to fill up when there could be more to write */
1983 static void
1984 tcp_more_write_again(int fd, struct comm_point* c)
1985 {
1986 /* if the packet is done, but another is waiting to be written,
1987 * the callback signals it and we try again. */
1988 /* this continues until the write routines get EAGAIN or so,
1989 * and thus does not call the callback, and the bool is 0 */
1990 int* morewrite = c->tcp_more_write_again;
1991 while(morewrite && *morewrite) {
1992 *morewrite = 0;
1993 if(!comm_point_tcp_handle_write(fd, c)) {
1994 reclaim_tcp_handler(c);
1995 if(!c->tcp_do_close) {
1996 fptr_ok(fptr_whitelist_comm_point(
1997 c->callback));
1998 (void)(*c->callback)(c, c->cb_arg,
1999 NETEVENT_CLOSED, NULL);
2000 }
2001 return;
2002 }
2003 }
2004 }
2005
18212006 void
18222007 comm_point_tcp_handle_callback(int fd, short event, void* arg)
18232008 {
18382023 if(!c->tcp_do_close) {
18392024 fptr_ok(fptr_whitelist_comm_point(
18402025 c->callback));
1841 (void)(*c->callback)(c, c->cb_arg,
2026 (void)(*c->callback)(c, c->cb_arg,
18422027 NETEVENT_CLOSED, NULL);
18432028 }
18442029 return;
18562041 }
18572042 return;
18582043 }
1859 if(event&UB_EV_READ) {
2044 if(event&UB_EV_READ
2045 #ifdef USE_MSG_FASTOPEN
2046 && !(c->tcp_do_fastopen && (event&UB_EV_WRITE))
2047 #endif
2048 ) {
18602049 int has_tcpq = (c->tcp_req_info != NULL);
2050 int* moreread = c->tcp_more_read_again;
18612051 if(!comm_point_tcp_handle_read(fd, c, 0)) {
18622052 reclaim_tcp_handler(c);
18632053 if(!c->tcp_do_close) {
18642054 fptr_ok(fptr_whitelist_comm_point(
18652055 c->callback));
1866 (void)(*c->callback)(c, c->cb_arg,
2056 (void)(*c->callback)(c, c->cb_arg,
18672057 NETEVENT_CLOSED, NULL);
18682058 }
2059 return;
18692060 }
18702061 if(has_tcpq && c->tcp_req_info && c->tcp_req_info->read_again)
18712062 tcp_req_info_read_again(fd, c);
2063 if(moreread && *moreread)
2064 tcp_more_read_again(fd, c);
18722065 return;
18732066 }
18742067 if(event&UB_EV_WRITE) {
18752068 int has_tcpq = (c->tcp_req_info != NULL);
2069 int* morewrite = c->tcp_more_write_again;
18762070 if(!comm_point_tcp_handle_write(fd, c)) {
18772071 reclaim_tcp_handler(c);
18782072 if(!c->tcp_do_close) {
18792073 fptr_ok(fptr_whitelist_comm_point(
18802074 c->callback));
1881 (void)(*c->callback)(c, c->cb_arg,
2075 (void)(*c->callback)(c, c->cb_arg,
18822076 NETEVENT_CLOSED, NULL);
18832077 }
2078 return;
18842079 }
18852080 if(has_tcpq && c->tcp_req_info && c->tcp_req_info->read_again)
18862081 tcp_req_info_read_again(fd, c);
2082 if(morewrite && *morewrite)
2083 tcp_more_write_again(fd, c);
18872084 return;
18882085 }
18892086 log_err("Ignored event %d for tcphdl.", event);
23582555 ssize_t http2_recv_cb(nghttp2_session* ATTR_UNUSED(session), uint8_t* buf,
23592556 size_t len, int ATTR_UNUSED(flags), void* cb_arg)
23602557 {
2361 #ifdef HAVE_SSL
23622558 struct http2_session* h2_session = (struct http2_session*)cb_arg;
2363 int r;
2559 ssize_t ret;
23642560
23652561 log_assert(h2_session->c->type == comm_http);
23662562 log_assert(h2_session->c->h2_session);
23672563
2368 if(!h2_session->c->ssl)
2369 return 0;
2370
2371 ERR_clear_error();
2372 r = SSL_read(h2_session->c->ssl, buf, len);
2373 if(r <= 0) {
2374 int want = SSL_get_error(h2_session->c->ssl, r);
2375 if(want == SSL_ERROR_ZERO_RETURN) {
2376 return NGHTTP2_ERR_EOF;
2377 } else if(want == SSL_ERROR_WANT_READ) {
2564 #ifdef HAVE_SSL
2565 if(h2_session->c->ssl) {
2566 int r;
2567 ERR_clear_error();
2568 r = SSL_read(h2_session->c->ssl, buf, len);
2569 if(r <= 0) {
2570 int want = SSL_get_error(h2_session->c->ssl, r);
2571 if(want == SSL_ERROR_ZERO_RETURN) {
2572 return NGHTTP2_ERR_EOF;
2573 } else if(want == SSL_ERROR_WANT_READ) {
2574 return NGHTTP2_ERR_WOULDBLOCK;
2575 } else if(want == SSL_ERROR_WANT_WRITE) {
2576 h2_session->c->ssl_shake_state = comm_ssl_shake_hs_write;
2577 comm_point_listen_for_rw(h2_session->c, 0, 1);
2578 return NGHTTP2_ERR_WOULDBLOCK;
2579 } else if(want == SSL_ERROR_SYSCALL) {
2580 #ifdef ECONNRESET
2581 if(errno == ECONNRESET && verbosity < 2)
2582 return NGHTTP2_ERR_CALLBACK_FAILURE;
2583 #endif
2584 if(errno != 0)
2585 log_err("SSL_read syscall: %s",
2586 strerror(errno));
2587 return NGHTTP2_ERR_CALLBACK_FAILURE;
2588 }
2589 log_crypto_err("could not SSL_read");
2590 return NGHTTP2_ERR_CALLBACK_FAILURE;
2591 }
2592 return r;
2593 }
2594 #endif /* HAVE_SSL */
2595
2596 ret = recv(h2_session->c->fd, buf, len, 0);
2597 if(ret == 0) {
2598 return NGHTTP2_ERR_EOF;
2599 } else if(ret < 0) {
2600 #ifndef USE_WINSOCK
2601 if(errno == EINTR || errno == EAGAIN)
23782602 return NGHTTP2_ERR_WOULDBLOCK;
2379 } else if(want == SSL_ERROR_WANT_WRITE) {
2380 h2_session->c->ssl_shake_state = comm_ssl_shake_hs_write;
2381 comm_point_listen_for_rw(h2_session->c, 0, 1);
2603 #ifdef ECONNRESET
2604 if(errno == ECONNRESET && verbosity < 2)
2605 return NGHTTP2_ERR_CALLBACK_FAILURE;
2606 #endif
2607 log_err_addr("could not http2 recv: %s", strerror(errno),
2608 &h2_session->c->repinfo.addr,
2609 h2_session->c->repinfo.addrlen);
2610 #else /* USE_WINSOCK */
2611 if(WSAGetLastError() == WSAECONNRESET)
2612 return NGHTTP2_ERR_CALLBACK_FAILURE;
2613 if(WSAGetLastError() == WSAEINPROGRESS)
23822614 return NGHTTP2_ERR_WOULDBLOCK;
2383 } else if(want == SSL_ERROR_SYSCALL) {
2384 #ifdef ECONNRESET
2385 if(errno == ECONNRESET && verbosity < 2)
2386 return NGHTTP2_ERR_CALLBACK_FAILURE;
2387 #endif
2388 if(errno != 0)
2389 log_err("SSL_read syscall: %s",
2390 strerror(errno));
2391 return NGHTTP2_ERR_CALLBACK_FAILURE;
2392 }
2393 log_crypto_err("could not SSL_read");
2615 if(WSAGetLastError() == WSAEWOULDBLOCK) {
2616 ub_winsock_tcp_wouldblock(h2_session->c->ev->ev,
2617 UB_EV_READ);
2618 return NGHTTP2_ERR_WOULDBLOCK;
2619 }
2620 log_err_addr("could not http2 recv: %s",
2621 wsa_strerror(WSAGetLastError()),
2622 &h2_session->c->repinfo.addr,
2623 h2_session->c->repinfo.addrlen);
2624 #endif
23942625 return NGHTTP2_ERR_CALLBACK_FAILURE;
23952626 }
2396 return r;
2397 #else
2398 (void)buf;
2399 (void)len;
2400 (void)cb_arg;
2401 return -1;
2402 #endif
2627 return ret;
24032628 }
24042629 #endif /* HAVE_NGHTTP2 */
24052630
24102635 #ifdef HAVE_NGHTTP2
24112636 int ret;
24122637 log_assert(c->h2_session);
2413 log_assert(c->ssl);
24142638
24152639 /* reading until recv cb returns NGHTTP2_ERR_WOULDBLOCK */
24162640 ret = nghttp2_session_recv(c->h2_session->session);
24172641 if(ret) {
24182642 if(ret != NGHTTP2_ERR_EOF &&
24192643 ret != NGHTTP2_ERR_CALLBACK_FAILURE) {
2420 verbose(VERB_QUERY, "http2: session_recv failed, "
2421 "error: %s", nghttp2_strerror(ret));
2644 char a[256];
2645 addr_to_str(&c->repinfo.addr, c->repinfo.addrlen,
2646 a, sizeof(a));
2647 verbose(VERB_QUERY, "http2: session_recv from %s failed, "
2648 "error: %s", a, nghttp2_strerror(ret));
24222649 }
24232650 return 0;
24242651 }
26472874 ssize_t http2_send_cb(nghttp2_session* ATTR_UNUSED(session), const uint8_t* buf,
26482875 size_t len, int ATTR_UNUSED(flags), void* cb_arg)
26492876 {
2650 #ifdef HAVE_SSL
2651 int r;
2877 ssize_t ret;
26522878 struct http2_session* h2_session = (struct http2_session*)cb_arg;
26532879 log_assert(h2_session->c->type == comm_http);
26542880 log_assert(h2_session->c->h2_session);
26552881
2656 if(!h2_session->c->ssl)
2657 return 0;
2658
2659 ERR_clear_error();
2660 r = SSL_write(h2_session->c->ssl, buf, len);
2661 if(r <= 0) {
2662 int want = SSL_get_error(h2_session->c->ssl, r);
2663 if(want == SSL_ERROR_ZERO_RETURN) {
2882 #ifdef HAVE_SSL
2883 if(h2_session->c->ssl) {
2884 int r;
2885 ERR_clear_error();
2886 r = SSL_write(h2_session->c->ssl, buf, len);
2887 if(r <= 0) {
2888 int want = SSL_get_error(h2_session->c->ssl, r);
2889 if(want == SSL_ERROR_ZERO_RETURN) {
2890 return NGHTTP2_ERR_CALLBACK_FAILURE;
2891 } else if(want == SSL_ERROR_WANT_READ) {
2892 h2_session->c->ssl_shake_state = comm_ssl_shake_hs_read;
2893 comm_point_listen_for_rw(h2_session->c, 1, 0);
2894 return NGHTTP2_ERR_WOULDBLOCK;
2895 } else if(want == SSL_ERROR_WANT_WRITE) {
2896 return NGHTTP2_ERR_WOULDBLOCK;
2897 } else if(want == SSL_ERROR_SYSCALL) {
2898 #ifdef EPIPE
2899 if(errno == EPIPE && verbosity < 2)
2900 return NGHTTP2_ERR_CALLBACK_FAILURE;
2901 #endif
2902 if(errno != 0)
2903 log_err("SSL_write syscall: %s",
2904 strerror(errno));
2905 return NGHTTP2_ERR_CALLBACK_FAILURE;
2906 }
2907 log_crypto_err("could not SSL_write");
26642908 return NGHTTP2_ERR_CALLBACK_FAILURE;
2665 } else if(want == SSL_ERROR_WANT_READ) {
2666 h2_session->c->ssl_shake_state = comm_ssl_shake_hs_read;
2667 comm_point_listen_for_rw(h2_session->c, 1, 0);
2909 }
2910 return r;
2911 }
2912 #endif /* HAVE_SSL */
2913
2914 ret = send(h2_session->c->fd, buf, len, 0);
2915 if(ret == 0) {
2916 return NGHTTP2_ERR_CALLBACK_FAILURE;
2917 } else if(ret < 0) {
2918 #ifndef USE_WINSOCK
2919 if(errno == EINTR || errno == EAGAIN)
26682920 return NGHTTP2_ERR_WOULDBLOCK;
2669 } else if(want == SSL_ERROR_WANT_WRITE) {
2921 #ifdef EPIPE
2922 if(errno == EPIPE && verbosity < 2)
2923 return NGHTTP2_ERR_CALLBACK_FAILURE;
2924 #endif
2925 #ifdef ECONNRESET
2926 if(errno == ECONNRESET && verbosity < 2)
2927 return NGHTTP2_ERR_CALLBACK_FAILURE;
2928 #endif
2929 log_err_addr("could not http2 write: %s", strerror(errno),
2930 &h2_session->c->repinfo.addr,
2931 h2_session->c->repinfo.addrlen);
2932 #else /* USE_WINSOCK */
2933 if(WSAGetLastError() == WSAENOTCONN)
26702934 return NGHTTP2_ERR_WOULDBLOCK;
2671 } else if(want == SSL_ERROR_SYSCALL) {
2672 #ifdef EPIPE
2673 if(errno == EPIPE && verbosity < 2)
2674 return NGHTTP2_ERR_CALLBACK_FAILURE;
2675 #endif
2676 if(errno != 0)
2677 log_err("SSL_write syscall: %s",
2678 strerror(errno));
2935 if(WSAGetLastError() == WSAEINPROGRESS)
2936 return NGHTTP2_ERR_WOULDBLOCK;
2937 if(WSAGetLastError() == WSAEWOULDBLOCK) {
2938 ub_winsock_tcp_wouldblock(h2_session->c->ev->ev,
2939 UB_EV_WRITE);
2940 return NGHTTP2_ERR_WOULDBLOCK;
2941 }
2942 if(WSAGetLastError() == WSAECONNRESET && verbosity < 2)
26792943 return NGHTTP2_ERR_CALLBACK_FAILURE;
2680 }
2681 log_crypto_err("could not SSL_write");
2944 log_err_addr("could not http2 write: %s",
2945 wsa_strerror(WSAGetLastError()),
2946 &h2_session->c->repinfo.addr,
2947 h2_session->c->repinfo.addrlen);
2948 #endif
26822949 return NGHTTP2_ERR_CALLBACK_FAILURE;
26832950 }
2684 return r;
2685 #else
2686 (void)buf;
2687 (void)len;
2688 (void)cb_arg;
2689 return -1;
2690 #endif
2951 return ret;
26912952 }
26922953 #endif /* HAVE_NGHTTP2 */
26932954
26982959 #ifdef HAVE_NGHTTP2
26992960 int ret;
27002961 log_assert(c->h2_session);
2701 log_assert(c->ssl);
27022962
27032963 ret = nghttp2_session_send(c->h2_session->session);
27042964 if(ret) {
28103070 if(!c->tcp_do_close) {
28113071 fptr_ok(fptr_whitelist_comm_point(
28123072 c->callback));
2813 (void)(*c->callback)(c, c->cb_arg,
3073 (void)(*c->callback)(c, c->cb_arg,
28143074 NETEVENT_CLOSED, NULL);
28153075 }
28163076 }
28223082 if(!c->tcp_do_close) {
28233083 fptr_ok(fptr_whitelist_comm_point(
28243084 c->callback));
2825 (void)(*c->callback)(c, c->cb_arg,
3085 (void)(*c->callback)(c, c->cb_arg,
28263086 NETEVENT_CLOSED, NULL);
28273087 }
28283088 }
35543814 if(!c)
35553815 return;
35563816 if(c->fd != -1) {
3817 verbose(5, "comm_point_close of %d: event_del", c->fd);
35573818 if(ub_event_del(c->ev->ev) != 0) {
35583819 log_err("could not event_del on close");
35593820 }
37353996 }
37363997 if(c->type == comm_tcp || c->type == comm_http) {
37373998 ub_event_del_bits(c->ev->ev, UB_EV_READ|UB_EV_WRITE);
3738 if(c->tcp_is_reading)
3999 if(c->tcp_write_and_read) {
4000 verbose(5, "startlistening %d mode rw", (newfd==-1?c->fd:newfd));
4001 ub_event_add_bits(c->ev->ev, UB_EV_READ|UB_EV_WRITE);
4002 } else if(c->tcp_is_reading) {
4003 verbose(5, "startlistening %d mode r", (newfd==-1?c->fd:newfd));
37394004 ub_event_add_bits(c->ev->ev, UB_EV_READ);
3740 else ub_event_add_bits(c->ev->ev, UB_EV_WRITE);
4005 } else {
4006 verbose(5, "startlistening %d mode w", (newfd==-1?c->fd:newfd));
4007 ub_event_add_bits(c->ev->ev, UB_EV_WRITE);
4008 }
37414009 }
37424010 if(newfd != -1) {
3743 if(c->fd != -1) {
4011 if(c->fd != -1 && c->fd != newfd) {
4012 verbose(5, "cpsl close of fd %d for %d", c->fd, newfd);
37444013 sock_close(c->fd);
37454014 }
37464015 c->fd = newfd;
9494 #define NETEVENT_CAPSFAIL -3
9595 /** to pass done transfer to callback function; http file is complete */
9696 #define NETEVENT_DONE -4
97 /** to pass write of the write packet is done to callback function
98 * used when tcp_write_and_read is enabled */
99 #define NETEVENT_PKT_WRITTEN -5
97100
98101 /** timeout to slow accept calls when not possible, in msec. */
99102 #define NETEVENT_SLOW_ACCEPT_TIME 2000
275278 and after read/write completes. No callback is done. */
276279 int tcp_do_close;
277280
281 /** flag that indicates the stream is both written and read from. */
282 int tcp_write_and_read;
283
284 /** byte count for written length over write channel, for when
285 * tcp_write_and_read is enabled. When tcp_write_and_read is enabled,
286 * this is the counter for writing, the one for reading is in the
287 * commpoint.buffer sldns buffer. The counter counts from 0 to
288 * 2+tcp_write_pkt_len, and includes the tcp length bytes. */
289 size_t tcp_write_byte_count;
290
291 /** packet to write currently over the write channel. for when
292 * tcp_write_and_read is enabled. When tcp_write_and_read is enabled,
293 * this is the buffer for the written packet, the commpoint.buffer
294 * sldns buffer is the buffer for the received packet. */
295 uint8_t* tcp_write_pkt;
296 /** length of tcp_write_pkt in bytes */
297 size_t tcp_write_pkt_len;
298
299 /** if set try to read another packet again (over connection with
300 * multiple packets), once set, tries once, then zero again,
301 * so set it in the packet complete section.
302 * The pointer itself has to be set before the callback is invoked,
303 * when you set things up, and continue to exist also after the
304 * commpoint is closed and deleted in your callback. So that after
305 * the callback cleans up netevent can see what it has to do.
306 * Or leave NULL if it is not used at all. */
307 int* tcp_more_read_again;
308
309 /** if set try to write another packet (over connection with
310 * multiple packets), once set, tries once, then zero again,
311 * so set it in the packet complete section.
312 * The pointer itself has to be set before the callback is invoked,
313 * when you set things up, and continue to exist also after the
314 * commpoint is closed and deleted in your callback. So that after
315 * the callback cleans up netevent can see what it has to do.
316 * Or leave NULL if it is not used at all. */
317 int* tcp_more_write_again;
318
278319 /** if set, read/write completes:
279320 read/write state of tcp is toggled.
280321 buffer reset/bytecount reset.
588629 * Send an udp message over a commpoint.
589630 * @param c: commpoint to send it from.
590631 * @param packet: what to send.
591 * @param addr: where to send it to.
632 * @param addr: where to send it to. If NULL, send is performed,
633 * for connected sockets, to the connected address.
592634 * @param addrlen: length of addr.
593635 * @return: false on a failure.
594636 */
7979 r->total_large = 0;
8080 }
8181
82 struct regional*
83 regional_create_custom(size_t size)
84 {
85 struct regional* r = (struct regional*)malloc(size);
82 /**
83 * Create a new region, with custom first block and large-object sizes.
84 * @param size: length of first block.
85 * @param large_object_size: outside of chunk allocation threshold.
86 * @return: newly allocated regional.
87 */
88 static struct regional*
89 regional_create_custom_large_object(size_t size, size_t large_object_size)
90 {
91 struct regional* r;
8692 size = ALIGN_UP(size, ALIGNMENT);
93 r = (struct regional*)malloc(size);
8794 log_assert(sizeof(struct regional) <= size);
8895 if(!r) return NULL;
8996 r->first_size = size;
97 r->large_object_size = large_object_size;
9098 regional_init(r);
9199 return r;
100 }
101
102 struct regional*
103 regional_create_custom(size_t size)
104 {
105 return regional_create_custom_large_object(size,
106 REGIONAL_LARGE_OBJECT_SIZE);
107 }
108
109 struct regional*
110 regional_create_nochunk(size_t size)
111 {
112 return regional_create_custom_large_object(size, 0);
92113 }
93114
94115 void
133154 malloc and ALIGN_UP */
134155 a = ALIGN_UP(size, ALIGNMENT);
135156 /* large objects */
136 if(a > REGIONAL_LARGE_OBJECT_SIZE) {
157 if(a > r->large_object_size) {
137158 s = malloc(ALIGNMENT + size);
138159 if(!s) return NULL;
139160 r->total_large += ALIGNMENT+size;
218239 /* some basic assertions put here (non time critical code) */
219240 log_assert(ALIGNMENT >= sizeof(char*));
220241 log_assert(REGIONAL_CHUNK_SIZE > ALIGNMENT);
221 log_assert(REGIONAL_CHUNK_SIZE-ALIGNMENT > REGIONAL_LARGE_OBJECT_SIZE);
242 log_assert(REGIONAL_CHUNK_SIZE-ALIGNMENT > r->large_object_size);
222243 log_assert(REGIONAL_CHUNK_SIZE >= sizeof(struct regional));
223244 /* debug print */
224245 log_info("regional %u chunks, %u large",
7373 size_t available;
7474 /** current chunk data position. */
7575 char* data;
76 /** threshold for outside of chunk allocations */
77 size_t large_object_size;
78 /** padding for sizeof8 alignment of sizeof(struct regional)
79 * for 32bit systems */
80 size_t padding;
7681 };
7782
7883 /**
8792 * @return: newly allocated regional.
8893 */
8994 struct regional* regional_create_custom(size_t size);
95
96 /**
97 * Create a new region, with custom settings, that will allocate everything
98 * outside the region chunk.
99 * @param size: length of first block.
100 * @return: newly allocated regional.
101 */
102 struct regional* regional_create_nochunk(size_t size);
90103
91104 /**
92105 * Free all memory associated with regional. Only keeps the first block with
989989 return pk;
990990 }
991991
992 #if defined(USE_DSA) && defined(USE_SHA1)
992993 static SECKEYPublicKey* nss_buf2dsa(unsigned char* key, size_t len)
993994 {
994995 SECKEYPublicKey* pk;
10491050 }
10501051 return pk;
10511052 }
1053 #endif /* USE_DSA && USE_SHA1 */
10521054
10531055 static SECKEYPublicKey* nss_buf2rsa(unsigned char* key, size_t len)
10541056 {