aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCy Schubert <cy@FreeBSD.org>2022-06-08 14:43:13 +0000
committerCy Schubert <cy@FreeBSD.org>2022-06-08 14:43:13 +0000
commit5f9f82264b91e041df7cba2406625146e7268ce4 (patch)
treeba7309ee547bf22115420277f45a3478aafb6397
parent3574dc0bd83e731bba79edc130c0569bf05f7af5 (diff)
downloadsrc-vendor/unbound/1.16.0.tar.gz
src-vendor/unbound/1.16.0.zip
unbound: Vendor import 1.16.0vendor/unbound/1.16.0
-rw-r--r--Makefile.in23
-rw-r--r--acx_python.m457
-rwxr-xr-xconfig.guess34
-rw-r--r--config.h.in6
-rwxr-xr-xconfigure116
-rw-r--r--configure.ac18
-rw-r--r--daemon/acl_list.c35
-rw-r--r--daemon/acl_list.h11
-rw-r--r--daemon/cachedump.c6
-rw-r--r--daemon/worker.c284
-rw-r--r--doc/Changelog141
-rw-r--r--doc/README2
-rw-r--r--doc/example.conf.in16
-rw-r--r--doc/libunbound.3.in4
-rw-r--r--doc/unbound-anchor.8.in2
-rw-r--r--doc/unbound-checkconf.8.in2
-rw-r--r--doc/unbound-control.8.in24
-rw-r--r--doc/unbound-host.1.in2
-rw-r--r--doc/unbound.8.in4
-rw-r--r--doc/unbound.conf.5.in56
-rw-r--r--edns-subnet/subnetmod.c30
-rw-r--r--edns-subnet/subnetmod.h7
-rw-r--r--ipset/ipset.c71
-rw-r--r--iterator/iter_delegpt.h2
-rw-r--r--iterator/iter_utils.c24
-rw-r--r--iterator/iter_utils.h6
-rw-r--r--iterator/iterator.c41
-rw-r--r--libunbound/libworker.c6
-rw-r--r--pythonmod/doc/modules/functions.rst2
-rw-r--r--pythonmod/doc/modules/struct.rst2
-rw-r--r--pythonmod/examples/inplace_callbacks.py2
-rw-r--r--pythonmod/interface.i5
-rw-r--r--respip/respip.c23
-rw-r--r--respip/respip.h5
-rw-r--r--services/authzone.c103
-rw-r--r--services/authzone.h3
-rw-r--r--services/cache/dns.c5
-rw-r--r--services/listen_dnsport.c79
-rw-r--r--services/localzone.c26
-rw-r--r--services/mesh.c181
-rw-r--r--services/mesh.h17
-rw-r--r--services/outside_network.c5
-rw-r--r--services/rpz.c41
-rw-r--r--services/rpz.h4
-rw-r--r--sldns/parseutil.c36
-rw-r--r--sldns/parseutil.h4
-rw-r--r--sldns/pkthdr.h4
-rw-r--r--sldns/rrdef.h32
-rw-r--r--sldns/str2wire.c38
-rw-r--r--sldns/wire2str.c1
-rw-r--r--smallapp/unbound-checkconf.c23
-rw-r--r--smallapp/unbound-control.c28
-rw-r--r--testcode/testpkts.c129
-rw-r--r--testcode/testpkts.h59
-rw-r--r--testcode/unitldns.c14
-rw-r--r--testcode/unitmsgparse.c2
-rw-r--r--testcode/unitverify.c2
-rw-r--r--testcode/unitzonemd.c4
-rw-r--r--testdata/auth_zonemd_file_unknown.rpl184
-rw-r--r--testdata/autotrust_init_fail.rpl4
-rw-r--r--testdata/autotrust_init_failsig.rpl4
-rw-r--r--testdata/autotrust_probefail.rpl4
-rw-r--r--testdata/autotrust_probefailsig.rpl4
-rw-r--r--testdata/black_ds_entry.rpl5
-rw-r--r--testdata/black_key_entry.rpl5
-rw-r--r--testdata/black_prime_entry.rpl5
-rwxr-xr-xtestdata/ede.tdir/bogus/clean.sh1
-rw-r--r--testdata/ede.tdir/bogus/dnskey-failures.test10
-rw-r--r--testdata/ede.tdir/bogus/dnssec-failures.test15
-rwxr-xr-xtestdata/ede.tdir/bogus/make-broken-zone.sh67
-rw-r--r--testdata/ede.tdir/bogus/nsec-failures.test10
-rw-r--r--testdata/ede.tdir/bogus/rrsig-failures.test10
-rw-r--r--testdata/ede.tdir/ede-auth.conf27
-rw-r--r--testdata/ede.tdir/ede.conf49
-rw-r--r--testdata/ede.tdir/ede.dsc16
-rw-r--r--testdata/ede.tdir/ede.post10
-rw-r--r--testdata/ede.tdir/ede.pre37
-rw-r--r--testdata/ede.tdir/ede.test72
-rw-r--r--testdata/ede_acl_refused.rpl35
-rw-r--r--testdata/ede_cache_snoop_noth_auth.rpl33
-rw-r--r--testdata/ede_localzone_dname_expansion.rpl37
-rw-r--r--testdata/edns_keepalive.rpl6
-rw-r--r--testdata/ipset.tdir/ipset.conf23
-rw-r--r--testdata/ipset.tdir/ipset.dsc16
-rw-r--r--testdata/ipset.tdir/ipset.post14
-rw-r--r--testdata/ipset.tdir/ipset.pre33
-rw-r--r--testdata/ipset.tdir/ipset.test155
-rw-r--r--testdata/ipset.tdir/ipset.testns103
-rw-r--r--testdata/iter_cname_minimise.rpl179
-rw-r--r--testdata/iter_dp_ip6useless.rpl168
-rw-r--r--testdata/nsid_bogus.rpl3
-rw-r--r--testdata/root_key_sentinel.rpl5
-rw-r--r--testdata/rpz_passthru.rpl154
-rw-r--r--testdata/rpz_qname.rpl37
-rw-r--r--testdata/serve_expired.rpl7
-rw-r--r--testdata/serve_expired_client_timeout.rpl8
-rw-r--r--testdata/serve_expired_reply_ttl.rpl8
-rw-r--r--testdata/serve_expired_servfail.rpl8
-rw-r--r--testdata/serve_expired_zerottl.rpl8
-rw-r--r--testdata/serve_original_ttl.rpl8
-rw-r--r--testdata/subnet_prefetch.crpl215
-rw-r--r--testdata/subnet_prefetch_with_client_ecs.crpl221
-rw-r--r--testdata/val_cnametocloser_nosig.rpl3
-rw-r--r--testdata/val_cnametonodata_nonsec.rpl4
-rw-r--r--testdata/val_cnametoposnowc.rpl5
-rw-r--r--testdata/val_deleg_nons.rpl3
-rw-r--r--testdata/val_dnamewc.rpl5
-rw-r--r--testdata/val_ds_cname.rpl4
-rw-r--r--testdata/val_faildnskey.rpl3
-rw-r--r--testdata/val_nodata_failsig.rpl5
-rw-r--r--testdata/val_nodata_failwc.rpl6
-rw-r--r--testdata/val_nokeyprime.rpl3
-rw-r--r--testdata/val_nsec3_b1_nameerror_nowc.rpl4
-rw-r--r--testdata/val_nsec3_b2_nodata_nons.rpl5
-rw-r--r--testdata/val_nsec3_entnodata_optout_badopt.rpl5
-rw-r--r--testdata/val_nsec3_nods_badsig.rpl5
-rw-r--r--testdata/val_nx_failwc.rpl6
-rw-r--r--testdata/val_nx_overreach.rpl5
-rw-r--r--testdata/val_secds_nosig.rpl3
-rw-r--r--testdata/val_ta_algo_missing.rpl3
-rw-r--r--util/config_file.c136
-rw-r--r--util/config_file.h57
-rw-r--r--util/configlexer.c7553
-rw-r--r--util/configlexer.lex4
-rw-r--r--util/configparser.c4870
-rw-r--r--util/configparser.h359
-rw-r--r--util/configparser.y58
-rw-r--r--util/data/msgparse.c3
-rw-r--r--util/data/msgparse.h9
-rw-r--r--util/data/msgreply.c31
-rw-r--r--util/data/msgreply.h39
-rw-r--r--util/module.c142
-rw-r--r--util/module.h73
-rw-r--r--util/net_help.c8
-rw-r--r--util/netevent.c29
-rw-r--r--validator/autotrust.c13
-rw-r--r--validator/val_kcache.c1
-rw-r--r--validator/val_kentry.c20
-rw-r--r--validator/val_kentry.h19
-rw-r--r--validator/val_nsec.c2
-rw-r--r--validator/val_nsec3.c11
-rw-r--r--validator/val_nsec3.h4
-rw-r--r--validator/val_sigcrypt.c99
-rw-r--r--validator/val_sigcrypt.h49
-rw-r--r--validator/val_utils.c66
-rw-r--r--validator/val_utils.h67
-rw-r--r--validator/validator.c123
-rw-r--r--validator/validator.h2
148 files changed, 10397 insertions, 7459 deletions
diff --git a/Makefile.in b/Makefile.in
index 55125a441977..7dbe5760033b 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -57,7 +57,7 @@ LEX=@LEX@
STRIP=@STRIP@
CC=@CC@
CPPFLAGS=-I. @CPPFLAGS@
-PYTHON_CPPFLAGS=-I. @PYTHON_CPPFLAGS@
+PYTHON_CPPFLAGS=-I. -I$(srcdir) @PYTHON_CPPFLAGS@
CFLAGS=-DSRCDIR=$(srcdir) @CFLAGS@
LDFLAGS=@LDFLAGS@
LIBS=@LIBS@
@@ -344,7 +344,18 @@ longcheck: longtest
test: unittest$(EXEEXT) testbound$(EXEEXT)
./unittest$(EXEEXT)
./testbound$(EXEEXT) -s
- for x in $(srcdir)/testdata/*.rpl; do printf "%s" "$$x "; if ./testbound$(EXEEXT) -p $$x >/dev/null 2>&1; then echo OK; else echo failed; exit 1; fi done
+ for x in $(srcdir)/testdata/*.rpl; do \
+ printf "%s" "$$x "; \
+ if ./testbound$(EXEEXT) -p $$x >/dev/null 2>&1; then \
+ echo OK; \
+ else \
+ echo failed; \
+ ./testbound$(EXEEXT) -p $$x -o -vvvvv; \
+ printf "%s" "$$x "; \
+ echo failed; \
+ exit 1; \
+ fi; \
+ done
@echo test OK
longtest: tests
@@ -556,7 +567,7 @@ pythonmod-install:
pyunbound-install:
$(INSTALL) -m 755 -d $(DESTDIR)$(PYTHON_SITE_PKG)
- $(INSTALL) -c -m 644 $(srcdir)/libunbound/python/unbound.py $(DESTDIR)$(PYTHON_SITE_PKG)/unbound.py
+ $(INSTALL) -c -m 644 libunbound/python/unbound.py $(DESTDIR)$(PYTHON_SITE_PKG)/unbound.py
$(LIBTOOL) --mode=install cp _unbound.la $(DESTDIR)$(PYTHON_SITE_PKG)
$(LIBTOOL) --mode=finish $(DESTDIR)$(PYTHON_SITE_PKG)
@@ -583,6 +594,8 @@ install-lib: lib $(UNBOUND_EVENT_INSTALL)
echo ".so man3/libunbound.3" > $(DESTDIR)$(mandir)/man3/$$mpage.3 ; \
done
$(LIBTOOL) --mode=install cp unbound.h $(DESTDIR)$(includedir)/unbound.h
+ $(INSTALL) -m 755 -d $(DESTDIR)$(libdir)/pkgconfig
+ $(INSTALL) -m 644 contrib/libunbound.pc $(DESTDIR)$(libdir)/pkgconfig
$(LIBTOOL) --mode=install cp libunbound.la $(DESTDIR)$(libdir)
$(LIBTOOL) --mode=finish $(DESTDIR)$(libdir)
@@ -592,8 +605,6 @@ install-all: all $(PYTHONMOD_INSTALL) $(PYUNBOUND_INSTALL) $(UNBOUND_EVENT_INSTA
$(INSTALL) -m 755 -d $(DESTDIR)$(mandir)/man8
$(INSTALL) -m 755 -d $(DESTDIR)$(mandir)/man5
$(INSTALL) -m 755 -d $(DESTDIR)$(mandir)/man1
- $(INSTALL) -m 755 -d $(DESTDIR)$(libdir)/pkgconfig
- $(INSTALL) -m 644 contrib/libunbound.pc $(DESTDIR)$(libdir)/pkgconfig
$(LIBTOOL) --mode=install cp -f unbound$(EXEEXT) $(DESTDIR)$(sbindir)/unbound$(EXEEXT)
$(LIBTOOL) --mode=install cp -f unbound-checkconf$(EXEEXT) $(DESTDIR)$(sbindir)/unbound-checkconf$(EXEEXT)
$(LIBTOOL) --mode=install cp -f unbound-control$(EXEEXT) $(DESTDIR)$(sbindir)/unbound-control$(EXEEXT)
@@ -1248,7 +1259,7 @@ cachedump.lo cachedump.o: $(srcdir)/daemon/cachedump.c config.h $(srcdir)/daemon
$(srcdir)/util/regional.h $(srcdir)/util/net_help.h $(srcdir)/util/data/dname.h $(srcdir)/iterator/iterator.h \
$(srcdir)/services/outbound_list.h $(srcdir)/iterator/iter_delegpt.h $(srcdir)/iterator/iter_utils.h \
$(srcdir)/iterator/iter_resptype.h $(srcdir)/iterator/iter_fwd.h $(srcdir)/iterator/iter_hints.h \
- $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/str2wire.h
+ $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/str2wire.h $(srcdir)/util/config_file.h $(srcdir)/services/outside_network.h
daemon.lo daemon.o: $(srcdir)/daemon/daemon.c config.h $(srcdir)/daemon/daemon.h $(srcdir)/util/locks.h \
$(srcdir)/util/log.h $(srcdir)/util/alloc.h $(srcdir)/services/modstack.h \
$(srcdir)/daemon/worker.h $(srcdir)/libunbound/worker.h \
diff --git a/acx_python.m4 b/acx_python.m4
index 767db5b65944..16c0c6fd943f 100644
--- a/acx_python.m4
+++ b/acx_python.m4
@@ -18,27 +18,45 @@ AC_DEFUN([AC_PYTHON_DEVEL],[
print(sys.version.split()[[0]])"`
fi
- #
- # Check if you have distutils, else fail
- #
- AC_MSG_CHECKING([for the distutils Python package])
- if ac_distutils_result=`$PYTHON -c "import distutils" 2>&1`; then
+ # Check if you have sysconfig
+ AC_MSG_CHECKING([for the sysconfig Python module])
+ if ac_sysconfig_result=`$PYTHON -c "import sysconfig" 2>&1`; then
AC_MSG_RESULT([yes])
- else
+ sysconfig_module="sysconfig"
+ # if yes, use sysconfig, because distutils is deprecated.
+ else
AC_MSG_RESULT([no])
- AC_MSG_ERROR([cannot import Python module "distutils".
-Please check your Python installation. The error was:
-$ac_distutils_result])
- PYTHON_VERSION=""
- fi
+ # if no, try to use distutils
+
+ #
+ # Check if you have distutils, else fail
+ #
+ AC_MSG_CHECKING([for the distutils Python package])
+ if ac_distutils_result=`$PYTHON -c "import distutils" 2>&1`; then
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no])
+ AC_MSG_ERROR([cannot import Python module "distutils".
+ Please check your Python installation. The error was:
+ $ac_distutils_result])
+ PYTHON_VERSION=""
+ fi
+
+ sysconfig_module="distutils.sysconfig"
+ fi
#
# Check for Python include path
#
AC_MSG_CHECKING([for Python include path])
if test -z "$PYTHON_CPPFLAGS"; then
- python_path=`$PYTHON -c "import distutils.sysconfig; \
- print(distutils.sysconfig.get_python_inc());"`
+ if test "$sysconfig_module" = "sysconfig"; then
+ python_path=`$PYTHON -c 'import sysconfig; \
+ print(sysconfig.get_path("include"));'`
+ else
+ python_path=`$PYTHON -c "import distutils.sysconfig; \
+ print(distutils.sysconfig.get_python_inc());"`
+ fi
if test -n "${python_path}"; then
python_path="-I$python_path"
fi
@@ -52,14 +70,14 @@ $ac_distutils_result])
#
AC_MSG_CHECKING([for Python library path])
if test -z "$PYTHON_LDFLAGS"; then
- PYTHON_LDFLAGS=`$PYTHON -c "from distutils.sysconfig import *; \
+ PYTHON_LDFLAGS=`$PYTHON -c "from $sysconfig_module import *; \
print('-L'+get_config_var('LIBDIR')+' -L'+get_config_var('LIBDEST')+' '+get_config_var('BLDLIBRARY'));"`
fi
AC_MSG_RESULT([$PYTHON_LDFLAGS])
AC_SUBST([PYTHON_LDFLAGS])
if test -z "$PYTHON_LIBDIR"; then
- PYTHON_LIBDIR=`$PYTHON -c "from distutils.sysconfig import *; \
+ PYTHON_LIBDIR=`$PYTHON -c "from $sysconfig_module import *; \
print(get_config_var('LIBDIR'));"`
fi
@@ -68,8 +86,13 @@ $ac_distutils_result])
#
AC_MSG_CHECKING([for Python site-packages path])
if test -z "$PYTHON_SITE_PKG"; then
- PYTHON_SITE_PKG=`$PYTHON -c "import distutils.sysconfig; \
- print(distutils.sysconfig.get_python_lib(1,0));"`
+ if test "$sysconfig_module" = "sysconfig"; then
+ PYTHON_SITE_PKG=`$PYTHON -c 'import sysconfig; \
+ print(sysconfig.get_path("platlib"));'`
+ else
+ PYTHON_SITE_PKG=`$PYTHON -c "import distutils.sysconfig; \
+ print(distutils.sysconfig.get_python_lib(1,0));"`
+ fi
fi
AC_MSG_RESULT([$PYTHON_SITE_PKG])
AC_SUBST([PYTHON_SITE_PKG])
diff --git a/config.guess b/config.guess
index 7f76b6228f73..1817bdce90dc 100755
--- a/config.guess
+++ b/config.guess
@@ -4,7 +4,7 @@
# shellcheck disable=SC2006,SC2268 # see below for rationale
-timestamp='2022-01-09'
+timestamp='2022-05-25'
# This file is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
@@ -1151,16 +1151,27 @@ EOF
;;
x86_64:Linux:*:*)
set_cc_for_build
+ CPU=$UNAME_MACHINE
LIBCABI=$LIBC
if test "$CC_FOR_BUILD" != no_compiler_found; then
- if (echo '#ifdef __ILP32__'; echo IS_X32; echo '#endif') | \
- (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
- grep IS_X32 >/dev/null
- then
- LIBCABI=${LIBC}x32
- fi
+ ABI=64
+ sed 's/^ //' << EOF > "$dummy.c"
+ #ifdef __i386__
+ ABI=x86
+ #else
+ #ifdef __ILP32__
+ ABI=x32
+ #endif
+ #endif
+EOF
+ cc_set_abi=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^ABI' | sed 's, ,,g'`
+ eval "$cc_set_abi"
+ case $ABI in
+ x86) CPU=i686 ;;
+ x32) LIBCABI=${LIBC}x32 ;;
+ esac
fi
- GUESS=$UNAME_MACHINE-pc-linux-$LIBCABI
+ GUESS=$CPU-pc-linux-$LIBCABI
;;
xtensa*:Linux:*:*)
GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
@@ -1367,8 +1378,11 @@ EOF
BePC:Haiku:*:*) # Haiku running on Intel PC compatible.
GUESS=i586-pc-haiku
;;
- x86_64:Haiku:*:*)
- GUESS=x86_64-unknown-haiku
+ ppc:Haiku:*:*) # Haiku running on Apple PowerPC
+ GUESS=powerpc-apple-haiku
+ ;;
+ *:Haiku:*:*) # Haiku modern gcc (not bound by BeOS compat)
+ GUESS=$UNAME_MACHINE-unknown-haiku
;;
SX-4:SUPER-UX:*:*)
GUESS=sx4-nec-superux$UNAME_RELEASE
diff --git a/config.h.in b/config.h.in
index 197c2838b33f..a080dde0da2e 100644
--- a/config.h.in
+++ b/config.h.in
@@ -971,6 +971,10 @@
/* Define to 1 if you need to in order for `stat' and other things to work. */
#undef _POSIX_SOURCE
+/* defined to use gcc ansi snprintf and sscanf that understands %lld when
+ compiled for windows. */
+#undef __USE_MINGW_ANSI_STDIO
+
/* Define to empty if `const' does not conform to ANSI C. */
#undef const
@@ -1150,7 +1154,7 @@
#include <ws2tcpip.h>
#endif
-#ifndef USE_WINSOCK
+#if !defined(USE_WINSOCK) || !defined(HAVE_SNPRINTF) || defined(SNPRINTF_RET_BROKEN) || defined(__USE_MINGW_ANSI_STDIO)
#define ARG_LL "%ll"
#else
#define ARG_LL "%I64"
diff --git a/configure b/configure
index 48f9c2d02b68..a9ec94479b55 100755
--- a/configure
+++ b/configure
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for unbound 1.15.0.
+# Generated by GNU Autoconf 2.69 for unbound 1.16.0.
#
# Report bugs to <unbound-bugs@nlnetlabs.nl or https://github.com/NLnetLabs/unbound/issues>.
#
@@ -591,8 +591,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='unbound'
PACKAGE_TARNAME='unbound'
-PACKAGE_VERSION='1.15.0'
-PACKAGE_STRING='unbound 1.15.0'
+PACKAGE_VERSION='1.16.0'
+PACKAGE_STRING='unbound 1.16.0'
PACKAGE_BUGREPORT='unbound-bugs@nlnetlabs.nl or https://github.com/NLnetLabs/unbound/issues'
PACKAGE_URL=''
@@ -813,6 +813,7 @@ infodir
docdir
oldincludedir
includedir
+runstatedir
localstatedir
sharedstatedir
sysconfdir
@@ -964,6 +965,7 @@ datadir='${datarootdir}'
sysconfdir='${prefix}/etc'
sharedstatedir='${prefix}/com'
localstatedir='${prefix}/var'
+runstatedir='${localstatedir}/run'
includedir='${prefix}/include'
oldincludedir='/usr/include'
docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
@@ -1216,6 +1218,15 @@ do
| -silent | --silent | --silen | --sile | --sil)
silent=yes ;;
+ -runstatedir | --runstatedir | --runstatedi | --runstated \
+ | --runstate | --runstat | --runsta | --runst | --runs \
+ | --run | --ru | --r)
+ ac_prev=runstatedir ;;
+ -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \
+ | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \
+ | --run=* | --ru=* | --r=*)
+ runstatedir=$ac_optarg ;;
+
-sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
ac_prev=sbindir ;;
-sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
@@ -1353,7 +1364,7 @@ fi
for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
datadir sysconfdir sharedstatedir localstatedir includedir \
oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
- libdir localedir mandir
+ libdir localedir mandir runstatedir
do
eval ac_val=\$$ac_var
# Remove trailing slashes.
@@ -1466,7 +1477,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures unbound 1.15.0 to adapt to many kinds of systems.
+\`configure' configures unbound 1.16.0 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1506,6 +1517,7 @@ Fine tuning of the installation directories:
--sysconfdir=DIR read-only single-machine data [PREFIX/etc]
--sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
--localstatedir=DIR modifiable single-machine data [PREFIX/var]
+ --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run]
--libdir=DIR object code libraries [EPREFIX/lib]
--includedir=DIR C header files [PREFIX/include]
--oldincludedir=DIR C header files for non-gcc [/usr/include]
@@ -1531,7 +1543,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of unbound 1.15.0:";;
+ short | recursive ) echo "Configuration of unbound 1.16.0:";;
esac
cat <<\_ACEOF
@@ -1773,7 +1785,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-unbound configure 1.15.0
+unbound configure 1.16.0
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2482,7 +2494,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by unbound $as_me 1.15.0, which was
+It was created by unbound $as_me 1.16.0, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
@@ -2832,13 +2844,13 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
UNBOUND_VERSION_MAJOR=1
-UNBOUND_VERSION_MINOR=15
+UNBOUND_VERSION_MINOR=16
UNBOUND_VERSION_MICRO=0
LIBUNBOUND_CURRENT=9
-LIBUNBOUND_REVISION=15
+LIBUNBOUND_REVISION=16
LIBUNBOUND_AGE=1
# 1.0.0 had 0:12:0
# 1.0.1 had 0:13:0
@@ -2921,6 +2933,7 @@ LIBUNBOUND_AGE=1
# 1.13.2 had 9:13:1
# 1.14.0 had 9:14:1
# 1.15.0 had 9:15:1
+# 1.16.0 had 9:16:1
# Current -- the number of the binary API that we're implementing
# Revision -- which iteration of the implementation of the binary
@@ -17455,22 +17468,38 @@ fi
print(sys.version.split()[0])"`
fi
- #
- # Check if you have distutils, else fail
- #
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the distutils Python package" >&5
-$as_echo_n "checking for the distutils Python package... " >&6; }
- if ac_distutils_result=`$PYTHON -c "import distutils" 2>&1`; then
+ # Check if you have sysconfig
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the sysconfig Python module" >&5
+$as_echo_n "checking for the sysconfig Python module... " >&6; }
+ if ac_sysconfig_result=`$PYTHON -c "import sysconfig" 2>&1`; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
- else
+ sysconfig_module="sysconfig"
+ # if yes, use sysconfig, because distutils is deprecated.
+ else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
- as_fn_error $? "cannot import Python module \"distutils\".
-Please check your Python installation. The error was:
-$ac_distutils_result" "$LINENO" 5
- PYTHON_VERSION=""
- fi
+ # if no, try to use distutils
+
+ #
+ # Check if you have distutils, else fail
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the distutils Python package" >&5
+$as_echo_n "checking for the distutils Python package... " >&6; }
+ if ac_distutils_result=`$PYTHON -c "import distutils" 2>&1`; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ as_fn_error $? "cannot import Python module \"distutils\".
+ Please check your Python installation. The error was:
+ $ac_distutils_result" "$LINENO" 5
+ PYTHON_VERSION=""
+ fi
+
+ sysconfig_module="distutils.sysconfig"
+ fi
#
# Check for Python include path
@@ -17478,8 +17507,13 @@ $ac_distutils_result" "$LINENO" 5
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Python include path" >&5
$as_echo_n "checking for Python include path... " >&6; }
if test -z "$PYTHON_CPPFLAGS"; then
- python_path=`$PYTHON -c "import distutils.sysconfig; \
- print(distutils.sysconfig.get_python_inc());"`
+ if test "$sysconfig_module" = "sysconfig"; then
+ python_path=`$PYTHON -c 'import sysconfig; \
+ print(sysconfig.get_path("include"));'`
+ else
+ python_path=`$PYTHON -c "import distutils.sysconfig; \
+ print(distutils.sysconfig.get_python_inc());"`
+ fi
if test -n "${python_path}"; then
python_path="-I$python_path"
fi
@@ -17495,7 +17529,7 @@ $as_echo "$PYTHON_CPPFLAGS" >&6; }
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Python library path" >&5
$as_echo_n "checking for Python library path... " >&6; }
if test -z "$PYTHON_LDFLAGS"; then
- PYTHON_LDFLAGS=`$PYTHON -c "from distutils.sysconfig import *; \
+ PYTHON_LDFLAGS=`$PYTHON -c "from $sysconfig_module import *; \
print('-L'+get_config_var('LIBDIR')+' -L'+get_config_var('LIBDEST')+' '+get_config_var('BLDLIBRARY'));"`
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON_LDFLAGS" >&5
@@ -17503,7 +17537,7 @@ $as_echo "$PYTHON_LDFLAGS" >&6; }
if test -z "$PYTHON_LIBDIR"; then
- PYTHON_LIBDIR=`$PYTHON -c "from distutils.sysconfig import *; \
+ PYTHON_LIBDIR=`$PYTHON -c "from $sysconfig_module import *; \
print(get_config_var('LIBDIR'));"`
fi
@@ -17513,8 +17547,13 @@ $as_echo "$PYTHON_LDFLAGS" >&6; }
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Python site-packages path" >&5
$as_echo_n "checking for Python site-packages path... " >&6; }
if test -z "$PYTHON_SITE_PKG"; then
- PYTHON_SITE_PKG=`$PYTHON -c "import distutils.sysconfig; \
- print(distutils.sysconfig.get_python_lib(1,0));"`
+ if test "$sysconfig_module" = "sysconfig"; then
+ PYTHON_SITE_PKG=`$PYTHON -c 'import sysconfig; \
+ print(sysconfig.get_path("platlib"));'`
+ else
+ PYTHON_SITE_PKG=`$PYTHON -c "import distutils.sysconfig; \
+ print(distutils.sysconfig.get_python_lib(1,0));"`
+ fi
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON_SITE_PKG" >&5
$as_echo "$PYTHON_SITE_PKG" >&6; }
@@ -20181,6 +20220,9 @@ fi
WIN_CHECKCONF_OBJ_LINK="rsrc_unbound_checkconf.o"
+
+$as_echo "#define __USE_MINGW_ANSI_STDIO 1" >>confdefs.h
+
fi
if test $ac_cv_func_getaddrinfo = no; then
case " $LIBOBJS " in
@@ -21678,10 +21720,16 @@ $as_echo_n "checking for libmnl... " >&6; }
withval="/usr/local /opt/local /usr/lib /usr/pkg /usr/sfw /usr"
fi
for dir in $withval ; do
- if test -f "$dir/include/libmnl/libmnl.h"; then
+ if test -f "$dir/include/libmnl/libmnl.h" -o -f "$dir/include/libmnl/libmnl/libmnl.h"; then
found_libmnl="yes"
- if test "$dir" != "/usr"; then
- CPPFLAGS="$CPPFLAGS -I$dir/include"
+ extralibmnl=""
+ if test -f "$dir/include/libmnl/libmnl/libmnl.h"; then
+ extralibmnl="/libmnl"
+ fi
+ if test "$dir" != "/usr" -o -n "$extralibmnl"; then
+ CPPFLAGS="$CPPFLAGS -I$dir/include$extralibmnl"
+ fi
+ if test "$dir" != "/usr"; then
LDFLAGS="$LDFLAGS -L$dir/lib"
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: found in $dir" >&5
@@ -21886,7 +21934,7 @@ _ACEOF
-version=1.15.0
+version=1.16.0
date=`date +'%b %e, %Y'`
@@ -22405,7 +22453,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by unbound $as_me 1.15.0, which was
+This file was extended by unbound $as_me 1.16.0, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -22471,7 +22519,7 @@ _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
-unbound config.status 1.15.0
+unbound config.status 1.16.0
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"
diff --git a/configure.ac b/configure.ac
index 5c7da1978131..1453b3a2fe29 100644
--- a/configure.ac
+++ b/configure.ac
@@ -10,7 +10,7 @@ sinclude(dnscrypt/dnscrypt.m4)
# must be numbers. ac_defun because of later processing
m4_define([VERSION_MAJOR],[1])
-m4_define([VERSION_MINOR],[15])
+m4_define([VERSION_MINOR],[16])
m4_define([VERSION_MICRO],[0])
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])
AC_SUBST(UNBOUND_VERSION_MAJOR, [VERSION_MAJOR])
@@ -18,7 +18,7 @@ AC_SUBST(UNBOUND_VERSION_MINOR, [VERSION_MINOR])
AC_SUBST(UNBOUND_VERSION_MICRO, [VERSION_MICRO])
LIBUNBOUND_CURRENT=9
-LIBUNBOUND_REVISION=15
+LIBUNBOUND_REVISION=16
LIBUNBOUND_AGE=1
# 1.0.0 had 0:12:0
# 1.0.1 had 0:13:0
@@ -101,6 +101,7 @@ LIBUNBOUND_AGE=1
# 1.13.2 had 9:13:1
# 1.14.0 had 9:14:1
# 1.15.0 had 9:15:1
+# 1.16.0 had 9:16:1
# Current -- the number of the binary API that we're implementing
# Revision -- which iteration of the implementation of the binary
@@ -1553,6 +1554,7 @@ if test "$USE_WINSOCK" = 1; then
AC_SUBST(WIN_CONTROL_OBJ_LINK)
WIN_CHECKCONF_OBJ_LINK="rsrc_unbound_checkconf.o"
AC_SUBST(WIN_CHECKCONF_OBJ_LINK)
+ AC_DEFINE(__USE_MINGW_ANSI_STDIO, 1, [defined to use gcc ansi snprintf and sscanf that understands %lld when compiled for windows.])
fi
if test $ac_cv_func_getaddrinfo = no; then
AC_LIBOBJ([fake-rfc2553])
@@ -1878,11 +1880,17 @@ case "$enable_ipset" in
withval="/usr/local /opt/local /usr/lib /usr/pkg /usr/sfw /usr"
fi
for dir in $withval ; do
- if test -f "$dir/include/libmnl/libmnl.h"; then
+ if test -f "$dir/include/libmnl/libmnl.h" -o -f "$dir/include/libmnl/libmnl/libmnl.h"; then
found_libmnl="yes"
dnl assume /usr is in default path.
+ extralibmnl=""
+ if test -f "$dir/include/libmnl/libmnl/libmnl.h"; then
+ extralibmnl="/libmnl"
+ fi
+ if test "$dir" != "/usr" -o -n "$extralibmnl"; then
+ CPPFLAGS="$CPPFLAGS -I$dir/include$extralibmnl"
+ fi
if test "$dir" != "/usr"; then
- CPPFLAGS="$CPPFLAGS -I$dir/include"
LDFLAGS="$LDFLAGS -L$dir/lib"
fi
AC_MSG_RESULT(found in $dir)
@@ -2060,7 +2068,7 @@ dnl includes
#include <ws2tcpip.h>
#endif
-#ifndef USE_WINSOCK
+#if !defined(USE_WINSOCK) || !defined(HAVE_SNPRINTF) || defined(SNPRINTF_RET_BROKEN) || defined(__USE_MINGW_ANSI_STDIO)
#define ARG_LL "%ll"
#else
#define ARG_LL "%I64"
diff --git a/daemon/acl_list.c b/daemon/acl_list.c
index 84324575e718..aecb3e0c6437 100644
--- a/daemon/acl_list.c
+++ b/daemon/acl_list.c
@@ -487,3 +487,38 @@ acl_list_get_mem(struct acl_list* acl)
if(!acl) return 0;
return sizeof(*acl) + regional_get_mem(acl->region);
}
+
+const char* acl_access_to_str(enum acl_access acl)
+{
+ switch(acl) {
+ case acl_deny: return "deny";
+ case acl_refuse: return "refuse";
+ case acl_deny_non_local: return "deny_non_local";
+ case acl_refuse_non_local: return "refuse_non_local";
+ case acl_allow: return "allow";
+ case acl_allow_snoop: return "allow_snoop";
+ case acl_allow_setrd: return "allow_setrd";
+ default: break;
+ }
+ return "unknown";
+}
+
+void
+log_acl_action(const char* action, struct sockaddr_storage* addr,
+ socklen_t addrlen, enum acl_access acl, struct acl_addr* acladdr)
+{
+ char a[128], n[128];
+ uint16_t port;
+ addr_to_str(addr, addrlen, a, sizeof(a));
+ port = ntohs(((struct sockaddr_in*)addr)->sin_port);
+ if(acladdr) {
+ addr_to_str(&acladdr->node.addr, acladdr->node.addrlen,
+ n, sizeof(n));
+ verbose(VERB_ALGO, "%s query from %s port %d because of "
+ "%s/%d %s", action, a, (int)port, n, acladdr->node.net,
+ acl_access_to_str(acl));
+ } else {
+ verbose(VERB_ALGO, "%s query from %s port %d", action, a,
+ (int)port);
+ }
+}
diff --git a/daemon/acl_list.h b/daemon/acl_list.h
index 3a3b94bc5879..c09e832a1def 100644
--- a/daemon/acl_list.h
+++ b/daemon/acl_list.h
@@ -154,4 +154,15 @@ acl_addr_lookup(struct acl_list* acl, struct sockaddr_storage* addr,
*/
size_t acl_list_get_mem(struct acl_list* acl);
+/*
+ * Get string for acl access specification
+ * @param acl: access type value
+ * @return string
+ */
+const char* acl_access_to_str(enum acl_access acl);
+
+/* log acl and addr for action */
+void log_acl_action(const char* action, struct sockaddr_storage* addr,
+ socklen_t addrlen, enum acl_access acl, struct acl_addr* acladdr);
+
#endif /* DAEMON_ACL_LIST_H */
diff --git a/daemon/cachedump.c b/daemon/cachedump.c
index b1ce53b596b6..b929f909bab2 100644
--- a/daemon/cachedump.c
+++ b/daemon/cachedump.c
@@ -47,10 +47,12 @@
#include "services/cache/rrset.h"
#include "services/cache/dns.h"
#include "services/cache/infra.h"
+#include "services/outside_network.h"
#include "util/data/msgreply.h"
#include "util/regional.h"
#include "util/net_help.h"
#include "util/data/dname.h"
+#include "util/config_file.h"
#include "iterator/iterator.h"
#include "iterator/iter_delegpt.h"
#include "iterator/iter_utils.h"
@@ -854,7 +856,9 @@ int print_deleg_lookup(RES* ssl, struct worker* worker, uint8_t* nm,
"cache; goes to configured roots\n");
}
/* go up? */
- if(iter_dp_is_useless(&qinfo, BIT_RD, dp)) {
+ if(iter_dp_is_useless(&qinfo, BIT_RD, dp,
+ (worker->env.cfg->do_ip4 && worker->back->num_ip4 != 0),
+ (worker->env.cfg->do_ip6 && worker->back->num_ip6 != 0))) {
print_dp_main(ssl, dp, msg);
print_dp_details(ssl, worker, dp);
if(!ssl_printf(ssl, "cache delegation was "
diff --git a/daemon/worker.c b/daemon/worker.c
index 862affb24e9a..bf8c5d6b6763 100644
--- a/daemon/worker.c
+++ b/daemon/worker.c
@@ -98,7 +98,7 @@
/** ratelimit for error responses */
#define ERROR_RATELIMIT 100 /* qps */
-/**
+/**
* seconds to add to prefetch leeway. This is a TTL that expires old rrsets
* earlier than they should in order to put the new update into the cache.
* This additional value is to make sure that if not all TTLs are equal in
@@ -484,6 +484,12 @@ answer_norec_from_cache(struct worker* worker, struct query_info* qinfo,
msg->rep, LDNS_RCODE_SERVFAIL, edns, repinfo, worker->scratchpad,
worker->env.now_tv))
return 0;
+ /* TODO store the reason for the bogus reply in cache
+ * and implement in here instead of the hardcoded EDE */
+ if (worker->env.cfg->ede) {
+ EDNS_OPT_LIST_APPEND_EDE(&edns->opt_list_out,
+ worker->scratchpad, LDNS_EDE_DNSSEC_BOGUS, "");
+ }
error_encode(repinfo->c->buffer, LDNS_RCODE_SERVFAIL,
&msg->qinfo, id, flags, edns);
if(worker->stats.extended) {
@@ -553,7 +559,7 @@ apply_respip_action(struct worker* worker, const struct query_info* qinfo,
return 1;
if(!respip_rewrite_reply(qinfo, cinfo, rep, encode_repp, &actinfo,
- alias_rrset, 0, worker->scratchpad, az))
+ alias_rrset, 0, worker->scratchpad, az, NULL))
return 0;
/* xxx_deny actions mean dropping the reply, unless the original reply
@@ -654,6 +660,12 @@ answer_from_cache(struct worker* worker, struct query_info* qinfo,
LDNS_RCODE_SERVFAIL, edns, repinfo, worker->scratchpad,
worker->env.now_tv))
goto bail_out;
+ /* TODO store the reason for the bogus reply in cache
+ * and implement in here instead of the hardcoded EDE */
+ if (worker->env.cfg->ede) {
+ EDNS_OPT_LIST_APPEND_EDE(&edns->opt_list_out,
+ worker->scratchpad, LDNS_EDE_DNSSEC_BOGUS, "");
+ }
error_encode(repinfo->c->buffer, LDNS_RCODE_SERVFAIL,
qinfo, id, flags, edns);
rrset_array_unlock_touch(worker->env.rrset_cache,
@@ -716,15 +728,25 @@ answer_from_cache(struct worker* worker, struct query_info* qinfo,
if(!*partial_repp)
goto bail_out;
}
- } else if(!reply_info_answer_encode(qinfo, encode_rep, id, flags,
- repinfo->c->buffer, timenow, 1, worker->scratchpad,
- udpsize, edns, (int)(edns->bits & EDNS_DO), *is_secure_answer)) {
- if(!inplace_cb_reply_servfail_call(&worker->env, qinfo, NULL, NULL,
- LDNS_RCODE_SERVFAIL, edns, repinfo, worker->scratchpad,
- worker->env.now_tv))
- edns->opt_list_inplace_cb_out = NULL;
- error_encode(repinfo->c->buffer, LDNS_RCODE_SERVFAIL,
- qinfo, id, flags, edns);
+ } else {
+ /* We don't check the global ede as this is a warning, not
+ * an error */
+ if (*is_expired_answer == 1 &&
+ worker->env.cfg->ede_serve_expired && worker->env.cfg->ede) {
+ EDNS_OPT_LIST_APPEND_EDE(&edns->opt_list_out,
+ worker->scratchpad, LDNS_EDE_STALE_ANSWER, "");
+ }
+ if(!reply_info_answer_encode(qinfo, encode_rep, id, flags,
+ repinfo->c->buffer, timenow, 1, worker->scratchpad,
+ udpsize, edns, (int)(edns->bits & EDNS_DO),
+ *is_secure_answer)) {
+ if(!inplace_cb_reply_servfail_call(&worker->env, qinfo,
+ NULL, NULL, LDNS_RCODE_SERVFAIL, edns, repinfo,
+ worker->scratchpad, worker->env.now_tv))
+ edns->opt_list_inplace_cb_out = NULL;
+ error_encode(repinfo->c->buffer, LDNS_RCODE_SERVFAIL,
+ qinfo, id, flags, edns);
+ }
}
/* cannot send the reply right now, because blocking network syscall
* is bad while holding locks. */
@@ -741,10 +763,12 @@ bail_out:
/** Reply to client and perform prefetch to keep cache up to date. */
static void
-reply_and_prefetch(struct worker* worker, struct query_info* qinfo,
- uint16_t flags, struct comm_reply* repinfo, time_t leeway, int noreply)
+reply_and_prefetch(struct worker* worker, struct query_info* qinfo,
+ uint16_t flags, struct comm_reply* repinfo, time_t leeway, int noreply,
+ int rpz_passthru, struct edns_option* opt_list)
{
- /* first send answer to client to keep its latency
+ (void)opt_list;
+ /* first send answer to client to keep its latency
* as small as a cachereply */
if(!noreply) {
if(repinfo->c->tcp_req_info) {
@@ -755,13 +779,23 @@ reply_and_prefetch(struct worker* worker, struct query_info* qinfo,
comm_point_send_reply(repinfo);
}
server_stats_prefetch(&worker->stats, worker);
-
+#ifdef CLIENT_SUBNET
+ /* Check if the subnet module is enabled. In that case pass over the
+ * comm_reply information for ECS generation later. The mesh states are
+ * unique when subnet is enabled. */
+ if(modstack_find(&worker->env.mesh->mods, "subnetcache") != -1
+ && worker->env.unique_mesh) {
+ mesh_new_prefetch(worker->env.mesh, qinfo, flags, leeway +
+ PREFETCH_EXPIRY_ADD, rpz_passthru, repinfo, opt_list);
+ return;
+ }
+#endif
/* create the prefetch in the mesh as a normal lookup without
* client addrs waiting, which has the cache blacklisted (to bypass
* the cache and go to the network for the data). */
/* this (potentially) runs the mesh for the new query */
- mesh_new_prefetch(worker->env.mesh, qinfo, flags, leeway +
- PREFETCH_EXPIRY_ADD);
+ mesh_new_prefetch(worker->env.mesh, qinfo, flags, leeway +
+ PREFETCH_EXPIRY_ADD, rpz_passthru, NULL, NULL);
}
/**
@@ -1012,32 +1046,178 @@ answer_notify(struct worker* w, struct query_info* qinfo,
static int
deny_refuse(struct comm_point* c, enum acl_access acl,
enum acl_access deny, enum acl_access refuse,
- struct worker* worker, struct comm_reply* repinfo)
+ struct worker* worker, struct comm_reply* repinfo,
+ struct acl_addr* acladdr, int ede)
{
if(acl == deny) {
+ if(verbosity >= VERB_ALGO) {
+ log_acl_action("dropped", &repinfo->addr,
+ repinfo->addrlen, acl, acladdr);
+ log_buf(VERB_ALGO, "dropped", c->buffer);
+ }
comm_point_drop_reply(repinfo);
if(worker->stats.extended)
worker->stats.unwanted_queries++;
return 0;
} else if(acl == refuse) {
- log_addr(VERB_ALGO, "refused query from",
- &repinfo->addr, repinfo->addrlen);
- log_buf(VERB_ALGO, "refuse", c->buffer);
+ size_t opt_rr_mark;
+
+ if(verbosity >= VERB_ALGO) {
+ log_acl_action("refused", &repinfo->addr,
+ repinfo->addrlen, acl, acladdr);
+ log_buf(VERB_ALGO, "refuse", c->buffer);
+ }
+
if(worker->stats.extended)
worker->stats.unwanted_queries++;
if(worker_check_request(c->buffer, worker) == -1) {
comm_point_drop_reply(repinfo);
return 0; /* discard this */
}
- sldns_buffer_set_limit(c->buffer, LDNS_HEADER_SIZE);
- sldns_buffer_write_at(c->buffer, 4,
- (uint8_t*)"\0\0\0\0\0\0\0\0", 8);
+ /* worker_check_request() above guarantees that the buffer contains at
+ * least a header and that qdcount == 1
+ */
+ log_assert(sldns_buffer_limit(c->buffer) >= LDNS_HEADER_SIZE
+ && LDNS_QDCOUNT(sldns_buffer_begin(c->buffer)) == 1);
+
+ sldns_buffer_skip(c->buffer, LDNS_HEADER_SIZE); /* skip header */
+
+ /* check additional section is present and that we respond with EDEs */
+ if(LDNS_ARCOUNT(sldns_buffer_begin(c->buffer)) != 1
+ || !ede) {
+ LDNS_QDCOUNT_SET(sldns_buffer_begin(c->buffer), 0);
+ LDNS_ANCOUNT_SET(sldns_buffer_begin(c->buffer), 0);
+ LDNS_NSCOUNT_SET(sldns_buffer_begin(c->buffer), 0);
+ LDNS_ARCOUNT_SET(sldns_buffer_begin(c->buffer), 0);
+ LDNS_QR_SET(sldns_buffer_begin(c->buffer));
+ LDNS_RCODE_SET(sldns_buffer_begin(c->buffer),
+ LDNS_RCODE_REFUSED);
+ sldns_buffer_flip(c->buffer);
+ return 1;
+ }
+
+ if (!query_dname_len(c->buffer)) {
+ LDNS_QDCOUNT_SET(sldns_buffer_begin(c->buffer), 0);
+ LDNS_ANCOUNT_SET(sldns_buffer_begin(c->buffer), 0);
+ LDNS_NSCOUNT_SET(sldns_buffer_begin(c->buffer), 0);
+ LDNS_ARCOUNT_SET(sldns_buffer_begin(c->buffer), 0);
+ LDNS_QR_SET(sldns_buffer_begin(c->buffer));
+ LDNS_RCODE_SET(sldns_buffer_begin(c->buffer),
+ LDNS_RCODE_FORMERR);
+ sldns_buffer_set_position(c->buffer, LDNS_HEADER_SIZE);
+ sldns_buffer_flip(c->buffer);
+ return 1;
+ }
+ /* space available for query type and class? */
+ if (sldns_buffer_remaining(c->buffer) < 2 * sizeof(uint16_t)) {
+ LDNS_QR_SET(sldns_buffer_begin(c->buffer));
+ LDNS_RCODE_SET(sldns_buffer_begin(c->buffer),
+ LDNS_RCODE_FORMERR);
+ LDNS_QDCOUNT_SET(sldns_buffer_begin(c->buffer), 0);
+ LDNS_ANCOUNT_SET(sldns_buffer_begin(c->buffer), 0);
+ LDNS_NSCOUNT_SET(sldns_buffer_begin(c->buffer), 0);
+ LDNS_ARCOUNT_SET(sldns_buffer_begin(c->buffer), 0);
+ sldns_buffer_set_position(c->buffer, LDNS_HEADER_SIZE);
+ sldns_buffer_flip(c->buffer);
+ return 1;
+ }
LDNS_QR_SET(sldns_buffer_begin(c->buffer));
LDNS_RCODE_SET(sldns_buffer_begin(c->buffer),
LDNS_RCODE_REFUSED);
- sldns_buffer_set_position(c->buffer, LDNS_HEADER_SIZE);
+
+ sldns_buffer_skip(c->buffer, (ssize_t)sizeof(uint16_t)); /* skip qtype */
+
+ sldns_buffer_skip(c->buffer, (ssize_t)sizeof(uint16_t)); /* skip qclass */
+
+ /* The OPT RR to be returned should come directly after
+ * the query, so mark this spot.
+ */
+ opt_rr_mark = sldns_buffer_position(c->buffer);
+
+ /* Skip through the RR records */
+ if(LDNS_ANCOUNT(sldns_buffer_begin(c->buffer)) != 0 ||
+ LDNS_NSCOUNT(sldns_buffer_begin(c->buffer)) != 0) {
+ if(!skip_pkt_rrs(c->buffer,
+ ((int)LDNS_ANCOUNT(sldns_buffer_begin(c->buffer)))+
+ ((int)LDNS_NSCOUNT(sldns_buffer_begin(c->buffer))))) {
+ LDNS_RCODE_SET(sldns_buffer_begin(c->buffer),
+ LDNS_RCODE_FORMERR);
+ LDNS_ANCOUNT_SET(sldns_buffer_begin(c->buffer), 0);
+ LDNS_NSCOUNT_SET(sldns_buffer_begin(c->buffer), 0);
+ LDNS_ARCOUNT_SET(sldns_buffer_begin(c->buffer), 0);
+ sldns_buffer_set_position(c->buffer, opt_rr_mark);
+ sldns_buffer_flip(c->buffer);
+ return 1;
+ }
+ }
+ /* Do we have a valid OPT RR here? If not return REFUSED (could be a valid TSIG or something so no FORMERR) */
+ /* domain name must be the root of length 1. */
+ if(sldns_buffer_remaining(c->buffer) < 1 || *sldns_buffer_current(c->buffer) != 0) {
+ LDNS_ANCOUNT_SET(sldns_buffer_begin(c->buffer), 0);
+ LDNS_NSCOUNT_SET(sldns_buffer_begin(c->buffer), 0);
+ LDNS_ARCOUNT_SET(sldns_buffer_begin(c->buffer), 0);
+ sldns_buffer_set_position(c->buffer, opt_rr_mark);
+ sldns_buffer_flip(c->buffer);
+ return 1;
+ } else {
+ sldns_buffer_skip(c->buffer, 1); /* skip root label */
+ }
+ if(sldns_buffer_remaining(c->buffer) < 2 ||
+ sldns_buffer_read_u16(c->buffer) != LDNS_RR_TYPE_OPT) {
+ LDNS_ANCOUNT_SET(sldns_buffer_begin(c->buffer), 0);
+ LDNS_NSCOUNT_SET(sldns_buffer_begin(c->buffer), 0);
+ LDNS_ARCOUNT_SET(sldns_buffer_begin(c->buffer), 0);
+ sldns_buffer_set_position(c->buffer, opt_rr_mark);
+ sldns_buffer_flip(c->buffer);
+ return 1;
+ }
+ /* Write OPT RR directly after the query,
+ * so without the (possibly skipped) Answer and NS RRs
+ */
+ LDNS_ANCOUNT_SET(sldns_buffer_begin(c->buffer), 0);
+ LDNS_NSCOUNT_SET(sldns_buffer_begin(c->buffer), 0);
+ sldns_buffer_clear(c->buffer); /* reset write limit */
+ sldns_buffer_set_position(c->buffer, opt_rr_mark);
+
+ /* Check if OPT record can be written
+ * 17 == root label (1) + RR type (2) + UDP Size (2)
+ * + Fields (4) + rdata len (2) + EDE Option code (2)
+ * + EDE Option length (2) + EDE info-code (2)
+ */
+ if (sldns_buffer_available(c->buffer, 17) == 0) {
+ LDNS_ARCOUNT_SET(sldns_buffer_begin(c->buffer), 0);
+ sldns_buffer_flip(c->buffer);
+ return 1;
+ }
+
+ LDNS_ARCOUNT_SET(sldns_buffer_begin(c->buffer), 1);
+
+ /* root label */
+ sldns_buffer_write_u8(c->buffer, 0);
+ sldns_buffer_write_u16(c->buffer, LDNS_RR_TYPE_OPT);
+ sldns_buffer_write_u16(c->buffer, EDNS_ADVERTISED_SIZE);
+
+ /* write OPT Record TTL Field */
+ sldns_buffer_write_u32(c->buffer, 0);
+
+ /* write rdata len: EDE option + length + info-code */
+ sldns_buffer_write_u16(c->buffer, 6);
+
+ /* write OPTIONS; add EDE option code */
+ sldns_buffer_write_u16(c->buffer, LDNS_EDNS_EDE);
+
+ /* write single EDE option length (for just 1 info-code) */
+ sldns_buffer_write_u16(c->buffer, 2);
+
+ /* write single EDE info-code */
+ sldns_buffer_write_u16(c->buffer, LDNS_EDE_PROHIBITED);
+
sldns_buffer_flip(c->buffer);
+
+ verbose(VERB_ALGO, "attached EDE code: %d", LDNS_EDE_PROHIBITED);
+
return 1;
+
}
return -1;
@@ -1045,16 +1225,20 @@ deny_refuse(struct comm_point* c, enum acl_access acl,
static int
deny_refuse_all(struct comm_point* c, enum acl_access acl,
- struct worker* worker, struct comm_reply* repinfo)
+ struct worker* worker, struct comm_reply* repinfo,
+ struct acl_addr* acladdr, int ede)
{
- return deny_refuse(c, acl, acl_deny, acl_refuse, worker, repinfo);
+ return deny_refuse(c, acl, acl_deny, acl_refuse, worker, repinfo,
+ acladdr, ede);
}
static int
deny_refuse_non_local(struct comm_point* c, enum acl_access acl,
- struct worker* worker, struct comm_reply* repinfo)
+ struct worker* worker, struct comm_reply* repinfo,
+ struct acl_addr* acladdr, int ede)
{
- return deny_refuse(c, acl, acl_deny_non_local, acl_refuse_non_local, worker, repinfo);
+ return deny_refuse(c, acl, acl_deny_non_local, acl_refuse_non_local,
+ worker, repinfo, acladdr, ede);
}
int
@@ -1067,12 +1251,14 @@ worker_handle_request(struct comm_point* c, void* arg, int error,
struct lruhash_entry* e;
struct query_info qinfo;
struct edns_data edns;
+ struct edns_option* original_edns_list = NULL;
enum acl_access acl;
struct acl_addr* acladdr;
int rc = 0;
int need_drop = 0;
int is_expired_answer = 0;
int is_secure_answer = 0;
+ int rpz_passthru = 0;
/* We might have to chase a CNAME chain internally, in which case
* we'll have up to two replies and combine them to build a complete
* answer. These variables control this case. */
@@ -1145,7 +1331,9 @@ worker_handle_request(struct comm_point* c, void* arg, int error,
acladdr = acl_addr_lookup(worker->daemon->acl, &repinfo->addr,
repinfo->addrlen);
acl = acl_get_control(acladdr);
- if((ret=deny_refuse_all(c, acl, worker, repinfo)) != -1)
+
+ if((ret=deny_refuse_all(c, acl, worker, repinfo, acladdr,
+ worker->env.cfg->ede)) != -1)
{
if(ret == 1)
goto send_reply;
@@ -1338,7 +1526,8 @@ worker_handle_request(struct comm_point* c, void* arg, int error,
if(worker->env.auth_zones &&
rpz_callback_from_worker_request(worker->env.auth_zones,
&worker->env, &qinfo, &edns, c->buffer, worker->scratchpad,
- repinfo, acladdr->taglist, acladdr->taglen, &worker->stats)) {
+ repinfo, acladdr->taglist, acladdr->taglen, &worker->stats,
+ &rpz_passthru)) {
regional_free_all(worker->scratchpad);
if(sldns_buffer_limit(c->buffer) == 0) {
comm_point_drop_reply(repinfo);
@@ -1364,7 +1553,8 @@ worker_handle_request(struct comm_point* c, void* arg, int error,
/* We've looked in our local zones. If the answer isn't there, we
* might need to bail out based on ACLs now. */
- if((ret=deny_refuse_non_local(c, acl, worker, repinfo)) != -1)
+ if((ret=deny_refuse_non_local(c, acl, worker, repinfo, acladdr,
+ worker->env.cfg->ede)) != -1)
{
regional_free_all(worker->scratchpad);
if(ret == 1)
@@ -1383,12 +1573,17 @@ worker_handle_request(struct comm_point* c, void* arg, int error,
* ACLs allow the snooping. */
if(!(LDNS_RD_WIRE(sldns_buffer_begin(c->buffer))) &&
acl != acl_allow_snoop ) {
+ if (worker->env.cfg->ede) {
+ EDNS_OPT_LIST_APPEND_EDE(&edns.opt_list_out,
+ worker->scratchpad, LDNS_EDE_NOT_AUTHORITATIVE, "");
+ }
error_encode(c->buffer, LDNS_RCODE_REFUSED, &qinfo,
*(uint16_t*)(void *)sldns_buffer_begin(c->buffer),
- sldns_buffer_read_u16_at(c->buffer, 2), NULL);
+ sldns_buffer_read_u16_at(c->buffer, 2), &edns);
regional_free_all(worker->scratchpad);
log_addr(VERB_ALGO, "refused nonrec (cache snoop) query from",
&repinfo->addr, repinfo->addrlen);
+
goto send_reply;
}
@@ -1429,6 +1624,11 @@ worker_handle_request(struct comm_point* c, void* arg, int error,
cinfo = &cinfo_tmp;
}
+ /* Keep the original edns list around. The pointer could change if there is
+ * a cached answer (through the inplace callback function there).
+ * No need to actually copy the contents as they shouldn't change.
+ * Used while prefetching and subnet is enabled. */
+ original_edns_list = edns.opt_list_in;
lookup_cache:
/* Lookup the cache. In case we chase an intermediate CNAME chain
* this is a two-pass operation, and lookup_qinfo is different for
@@ -1461,10 +1661,13 @@ lookup_cache:
< *worker->env.now)
leeway = 0;
lock_rw_unlock(&e->lock);
+
reply_and_prefetch(worker, lookup_qinfo,
sldns_buffer_read_u16_at(c->buffer, 2),
repinfo, leeway,
- (partial_rep || need_drop));
+ (partial_rep || need_drop),
+ rpz_passthru,
+ original_edns_list);
if(!partial_rep) {
rc = 0;
regional_free_all(worker->scratchpad);
@@ -1501,6 +1704,7 @@ lookup_cache:
verbose(VERB_ALGO, "answer from the cache failed");
lock_rw_unlock(&e->lock);
}
+
if(!LDNS_RD_WIRE(sldns_buffer_begin(c->buffer))) {
if(answer_norec_from_cache(worker, &qinfo,
*(uint16_t*)(void *)sldns_buffer_begin(c->buffer),
@@ -1527,7 +1731,8 @@ lookup_cache:
/* grab a work request structure for this new request */
mesh_new_client(worker->env.mesh, &qinfo, cinfo,
sldns_buffer_read_u16_at(c->buffer, 2),
- &edns, repinfo, *(uint16_t*)(void *)sldns_buffer_begin(c->buffer));
+ &edns, repinfo, *(uint16_t*)(void *)sldns_buffer_begin(c->buffer),
+ rpz_passthru);
regional_free_all(worker->scratchpad);
worker_mem_report(worker, NULL);
return 0;
@@ -1592,6 +1797,9 @@ worker_sighandler(int sig, void* arg)
comm_base_exit(worker->base);
break;
#endif
+#ifdef SIGBREAK
+ case SIGBREAK:
+#endif
case SIGINT:
worker->need_to_exit = 1;
comm_base_exit(worker->base);
@@ -1710,6 +1918,9 @@ worker_init(struct worker* worker, struct config_file *cfg,
#ifdef SIGHUP
ub_thread_sig_unblock(SIGHUP);
#endif
+#ifdef SIGBREAK
+ ub_thread_sig_unblock(SIGBREAK);
+#endif
ub_thread_sig_unblock(SIGINT);
#ifdef SIGQUIT
ub_thread_sig_unblock(SIGQUIT);
@@ -1726,6 +1937,9 @@ worker_init(struct worker* worker, struct config_file *cfg,
|| !comm_signal_bind(worker->comsig, SIGQUIT)
#endif
|| !comm_signal_bind(worker->comsig, SIGTERM)
+#ifdef SIGBREAK
+ || !comm_signal_bind(worker->comsig, SIGBREAK)
+#endif
|| !comm_signal_bind(worker->comsig, SIGINT)) {
log_err("could not create signal handlers");
worker_delete(worker);
diff --git a/doc/Changelog b/doc/Changelog
index 8af7d3f888ad..8df5f367c4e1 100644
--- a/doc/Changelog
+++ b/doc/Changelog
@@ -1,5 +1,146 @@
+27 May 2022: Wouter
+ - Fix #684: [FTBS] configure script error with libmnl on openSUSE 15.3 (and possibly other distributions)
+ - Version is set to 1.16.0 for release. Release tag 1.16.0rc1.
+
+20 May 2022: Wouter
+ - Fix to silence test for ede error output to the console from the
+ test setup script.
+ - Fix ede test to not use default pidfile, and use local interface.
+ - Fix some lint type warnings.
+
+18 May 2022: George
+ - Fix typos in config_set_option for the 'num-threads' and
+ 'ede-serve-expired' options.
+
+15 May 2022: George
+ - Fix #678: [FR] modify behaviour of unbound-control rpz_enable zone,
+ by updating unbound-control's documentation.
+
+12 May 2022: George
+ - Fix #417: prefetch and ECS causing cache corruption when used
+ together.
+
+12 May 2022: Wouter
+ - Merge #677: Allow using system certificates not only on Windows,
+ from pemensik.
+ - For #677: Added tls-system-cert to config parser and documentation.
+
+11 May 2022: Wouter
+ - Fix #673: DNS over TLS: error: SSL_handshake syscall: No route to
+ host.
+
+10 May 2022: George
+ - Fix Python build in non-source directory; based on patch by
+ Michael Tokarev.
+
+6 May 2022: Tom
+ - Merge PR #604: Add basic support for EDE (RFC8914).
+
+28 April 2022: Wouter
+ - Fix #670: SERVFAIL problems with unbound 1.15.0 running on
+ OpenBSD 7.1.
+
+8 April 2022: Wouter
+ - Fix zonemd check to allow unsupported algorithms to load.
+ If there are only unsupported algorithms, or unsupported schemes,
+ and no failed or successful other ZONEMD records, or malformed
+ or bad ZONEMD records, the unsupported records allow the zone load.
+ - Fix zonemd unsupported algo check.
+ - Fix zonemd unsupported algo check reason to not copy to next record,
+ and check for success for debug printout.
+ - Fix zonemd unsupported algo check to print unsupported reason before
+ zeroing it.
+ - Fix zonemd unsupported algo check to set reason to NULL before the
+ check routine, but after malformed checks, to get the correct NULL
+ output when the digest matches.
+
+25 March 2022: Wouter
+ - Fix spelling error in comment in sldns_str2wire_svcparam_key_lookup.
+
+23 March 2022: Wouter
+ - Fix #651: [FR] Better logging for refused queries.
+
+18 March 2022: George
+ - Merge PR #648 from eaglegai: fix -q doesn't work when use with
+ 'unbound-control stats_shm'.
+
+17 March 2022: Wouter
+ - Fix to describe auth-zone and other configuration at the local-zone
+ configuration option, to allow for more broadly view of the options.
+
+16 March 2022: Wouter
+ - Fix to ensure uniform handling of spaces and tabs when parsing RRs.
+
+9 March 2022: Wouter
+ - Merge #644: Make `install-lib` make target install the pkg-config
+ file.
+
+7 March 2022: Wouter
+ - Fix configure for python to use sysutils, because distutils is
+ deprecated. It uses sysutils when available, distutils otherwise.
+
+3 March 2022: Wouter
+ - Fix #637: Integer Overflow in sldns_str2period function.
+ - Fix for #637: fix integer overflow checks in sldns_str2period.
+
+2 March 2022: George
+ - Merge PR #632 from scottrw93: Match cnames in ipset.
+ - Various fixes for #632: variable initialisation, convert the qinfo
+ to str once, accept trailing dot in the local-zone ipset option.
+
+2 March 2022: Wouter
+ - Fix compile warnings for printf ll format on mingw compile.
+
+1 March 2022: Wouter
+ - Fix pythonmod for change in iter_dp_is_useless function prototype.
+
+28 February 2022: George
+ - Fix #630: Unify the RPZ log messages.
+ - Merge #623 from rex4539: Fix typos.
+
+28 February 2022: Wouter
+ - Fix #633: Document unix domain socket support for unbound-control.
+ - Fix for #633: updated fix with new text.
+ - Fix edns client subnet to add the option based on the option list,
+ so that it is not state dependent, after the state fix of #605 for
+ double EDNS options.
+ - Fix for edns client subnet option add fix in removal code, from review.
+
+25 February 2022: Wouter
+ - Fix to detect that no IPv6 support means that IPv6 addresses are
+ useless for delegation point lookups.
+ - update Makefile dependencies.
+ - Fix check interface existence for support detection in remote lookup.
+
+18 February 2022: Wouter
+ - Fix that address not available is squelched from the logs for
+ udp connect failures. It is visible on verbosity 4 and more.
+ - Merge #631 from mollyim: Replace OpenSSL's ERR_PACK with
+ ERR_GET_REASON.
+
+16 February 2022: Wouter
+ - Fix for #628: fix rpz-passthru for qname trigger by localzone type.
+
+15 February 2022: Wouter
+ - Fix #628: A rpz-passthru action is not ending RPZ zone processing.
+
+11 February 2022: Wouter
+ - Fix #624: Unable to stop Unbound in Windows console (does not
+ respond to CTRL+C command).
+ - Fix #618: enabling interface-automatic disables DNS-over-TLS.
+ Adds the option to list interface-automatic-ports.
+ - Remove debug info from #618 fix.
+
+7 February 2022: Wouter
+ - Fix that TCP interface does not use TLS when TLS is also configured.
+
+4 February 2022: Wouter
+ - Fix #412: cache invalidation issue with CNAME+A.
+
3 February 2022: Wouter
- Fix for #611: Integer overflow in sldns_wire2str_pkt_scan.
+ - Tag for 1.15.0rc1 created. That became 1.15.0 on 10 feb 2022.
+ The repository continues with version 1.15.1.
2 February 2022: George
- Merge PR #532 from Shchelk: Fix: buffer overflow bug.
diff --git a/doc/README b/doc/README
index 9d9794d5cfa5..ea93afddcd5f 100644
--- a/doc/README
+++ b/doc/README
@@ -1,4 +1,4 @@
-README for Unbound 1.15.0
+README for Unbound 1.16.0
Copyright 2007 NLnet Labs
http://unbound.net
diff --git a/doc/example.conf.in b/doc/example.conf.in
index ab9445fc69f1..64adfe9e5e9c 100644
--- a/doc/example.conf.in
+++ b/doc/example.conf.in
@@ -1,7 +1,7 @@
#
# Example configuration file.
#
-# See unbound.conf(5) man page, version 1.15.0.
+# See unbound.conf(5) man page, version 1.16.0.
#
# this is a comment.
@@ -55,6 +55,10 @@ server:
# Socket options are not supported on all platforms. experimental.
# interface-automatic: no
+ # instead of the default port, open additional ports separated by
+ # spaces when interface-automatic is enabled, by listing them here.
+ # interface-automatic-ports: ""
+
# port to answer queries from
# port: 53
@@ -811,6 +815,8 @@ server:
# Add system certs to the cert bundle, from the Windows Cert Store
# tls-win-cert: no
+ # and on other systems, the default openssl certificates
+ # tls-system-cert: no
# Pad queries over TLS upstreams
# pad-queries: yes
@@ -897,6 +903,14 @@ server:
# the number of servers that will be used in the fast server selection.
# fast-server-num: 3
+ # Enable to attach Extended DNS Error codes (RFC8914) to responses.
+ # ede: no
+
+ # Enable to attach an Extended DNS Error (RFC8914) Code 3 - Stale
+ # Answer as EDNS0 option to expired responses.
+ # Note that the ede option above needs to be enabled for this to work.
+ # ede-serve-expired: no
+
# Specific options for ipsecmod. Unbound needs to be configured with
# --enable-ipsecmod for these to take effect.
#
diff --git a/doc/libunbound.3.in b/doc/libunbound.3.in
index 7df4f59d7831..b1be90ce0f0f 100644
--- a/doc/libunbound.3.in
+++ b/doc/libunbound.3.in
@@ -1,4 +1,4 @@
-.TH "libunbound" "3" "Feb 10, 2022" "NLnet Labs" "unbound 1.15.0"
+.TH "libunbound" "3" "Jun 2, 2022" "NLnet Labs" "unbound 1.16.0"
.\"
.\" libunbound.3 -- unbound library functions manual
.\"
@@ -44,7 +44,7 @@
.B ub_ctx_zone_remove,
.B ub_ctx_data_add,
.B ub_ctx_data_remove
-\- Unbound DNS validating resolver 1.15.0 functions.
+\- Unbound DNS validating resolver 1.16.0 functions.
.SH "SYNOPSIS"
.B #include <unbound.h>
.LP
diff --git a/doc/unbound-anchor.8.in b/doc/unbound-anchor.8.in
index 268640d8155c..4da37b1d5ff9 100644
--- a/doc/unbound-anchor.8.in
+++ b/doc/unbound-anchor.8.in
@@ -1,4 +1,4 @@
-.TH "unbound-anchor" "8" "Feb 10, 2022" "NLnet Labs" "unbound 1.15.0"
+.TH "unbound-anchor" "8" "Jun 2, 2022" "NLnet Labs" "unbound 1.16.0"
.\"
.\" unbound-anchor.8 -- unbound anchor maintenance utility manual
.\"
diff --git a/doc/unbound-checkconf.8.in b/doc/unbound-checkconf.8.in
index ac8782dcde40..4c607a231b9f 100644
--- a/doc/unbound-checkconf.8.in
+++ b/doc/unbound-checkconf.8.in
@@ -1,4 +1,4 @@
-.TH "unbound-checkconf" "8" "Feb 10, 2022" "NLnet Labs" "unbound 1.15.0"
+.TH "unbound-checkconf" "8" "Jun 2, 2022" "NLnet Labs" "unbound 1.16.0"
.\"
.\" unbound-checkconf.8 -- unbound configuration checker manual
.\"
diff --git a/doc/unbound-control.8.in b/doc/unbound-control.8.in
index 9d0c10e942bd..3ef1d659f58a 100644
--- a/doc/unbound-control.8.in
+++ b/doc/unbound-control.8.in
@@ -1,4 +1,4 @@
-.TH "unbound-control" "8" "Feb 10, 2022" "NLnet Labs" "unbound 1.15.0"
+.TH "unbound-control" "8" "Jun 2, 2022" "NLnet Labs" "unbound 1.16.0"
.\"
.\" unbound-control.8 -- unbound remote control manual
.\"
@@ -289,20 +289,22 @@ just the ratelimited ips, with their estimated qps. The ratelimited
ips are dropped before checking the cache.
.TP
.B list_auth_zones
-List the auth zones that are configured. Printed one per line with a
-status, indicating if the zone is expired and current serial number.
+List the auth zones that are configured. Printed one per line with a status,
+indicating if the zone is expired and current serial number. Configured RPZ
+zones are included.
.TP
.B auth_zone_reload \fIzone\fR
-Reload the auth zone from zonefile. The zonefile is read in overwriting
-the current contents of the zone in memory. This changes the auth zone
-contents itself, not the cache contents. Such cache contents exists if
-you set Unbound to validate with for-upstream yes and that can be cleared
-with \fBflush_zone\fR \fIzone\fR.
+Reload the auth zone (or RPZ zone) from zonefile. The zonefile is read in
+overwriting the current contents of the zone in memory. This changes the auth
+zone contents itself, not the cache contents. Such cache contents exists if
+you set Unbound to validate with for-upstream yes and that can be cleared with
+\fBflush_zone\fR \fIzone\fR.
.TP
.B auth_zone_transfer \fIzone\fR
-Transfer the auth zone from master. The auth zone probe sequence is started,
-where the masters are probed to see if they have an updated zone (with the SOA
-serial check). And then the zone is transferred for a newer zone version.
+Transfer the auth zone (or RPZ zone) from master. The auth zone probe sequence
+is started, where the masters are probed to see if they have an updated zone
+(with the SOA serial check). And then the zone is transferred for a newer zone
+version.
.TP
.B rpz_enable \fIzone\fR
Enable the RPZ zone if it had previously been disabled.
diff --git a/doc/unbound-host.1.in b/doc/unbound-host.1.in
index 94c8ca3dd569..a30d1dfd216f 100644
--- a/doc/unbound-host.1.in
+++ b/doc/unbound-host.1.in
@@ -1,4 +1,4 @@
-.TH "unbound\-host" "1" "Feb 10, 2022" "NLnet Labs" "unbound 1.15.0"
+.TH "unbound\-host" "1" "Jun 2, 2022" "NLnet Labs" "unbound 1.16.0"
.\"
.\" unbound-host.1 -- unbound DNS lookup utility
.\"
diff --git a/doc/unbound.8.in b/doc/unbound.8.in
index 723f23238b8e..e3492724c95d 100644
--- a/doc/unbound.8.in
+++ b/doc/unbound.8.in
@@ -1,4 +1,4 @@
-.TH "unbound" "8" "Feb 10, 2022" "NLnet Labs" "unbound 1.15.0"
+.TH "unbound" "8" "Jun 2, 2022" "NLnet Labs" "unbound 1.16.0"
.\"
.\" unbound.8 -- unbound manual
.\"
@@ -9,7 +9,7 @@
.\"
.SH "NAME"
.B unbound
-\- Unbound DNS validating resolver 1.15.0.
+\- Unbound DNS validating resolver 1.16.0.
.SH "SYNOPSIS"
.B unbound
.RB [ \-h ]
diff --git a/doc/unbound.conf.5.in b/doc/unbound.conf.5.in
index e1cc5c020756..3c891aa59e28 100644
--- a/doc/unbound.conf.5.in
+++ b/doc/unbound.conf.5.in
@@ -1,4 +1,4 @@
-.TH "unbound.conf" "5" "Feb 10, 2022" "NLnet Labs" "unbound 1.15.0"
+.TH "unbound.conf" "5" "Jun 2, 2022" "NLnet Labs" "unbound 1.16.0"
.\"
.\" unbound.conf.5 -- unbound.conf manual
.\"
@@ -140,6 +140,15 @@ ip\-transparent you can select which (future) interfaces Unbound provides
service on. This feature is experimental, and needs support in your OS for
particular socket options. Default value is no.
.TP
+.B interface\-automatic\-ports: \fI<string>
+List the port numbers that interface-automatic listens on. If empty, the
+default port is listened on. The port numbers are separated by spaces in the
+string. Default is "".
+.IP
+This can be used to have interface automatic to deal with the interface,
+and listen on the normal port number, by including it in the list, and
+also https or dns over tls port numbers by putting them in the list as well.
+.TP
.B outgoing\-interface: \fI<ip address or ip6 netblock>
Interface to use to connect to the network. This interface is used to send
queries to authoritative servers and receive their replies. Can be given
@@ -499,10 +508,11 @@ Enabled or disable whether the upstream queries use TLS only for transport.
Default is no. Useful in tunneling scenarios. The TLS contains plain DNS in
TCP wireformat. The other server must support this (see
\fBtls\-service\-key\fR).
-If you enable this, also configure a tls\-cert\-bundle or use tls\-win\-cert to
-load CA certs, otherwise the connections cannot be authenticated.
-This option enables TLS for all of them, but if you do not set this you can
-configure TLS specifically for some forward zones with forward\-tls\-upstream. And also with stub\-tls\-upstream.
+If you enable this, also configure a tls\-cert\-bundle or use tls\-win\-cert or
+tls\-system\-cert to load CA certs, otherwise the connections cannot be
+authenticated. This option enables TLS for all of them, but if you do not set
+this you can configure TLS specifically for some forward zones with
+forward\-tls\-upstream. And also with stub\-tls\-upstream.
.TP
.B ssl\-upstream: \fI<yes or no>
Alternate syntax for \fBtls\-upstream\fR. If both are present in the config
@@ -551,7 +561,12 @@ Alternate syntax for \fBtls\-cert\-bundle\fR.
Add the system certificates to the cert bundle certificates for authentication.
If no cert bundle, it uses only these certificates. Default is no.
On windows this option uses the certificates from the cert store. Use
-the tls\-cert\-bundle option on other systems.
+the tls\-cert\-bundle option on other systems. On other systems, this option
+enables the system certificates.
+.TP
+.B tls\-system\-cert: \fI<yes or no>
+This the same setting as the tls\-win\-cert setting, under a different name.
+Because it is not windows specific.
.TP
.B tls\-additional\-port: \fI<portnr>
List portnumbers as tls\-additional\-port, and when interfaces are defined,
@@ -1320,7 +1335,17 @@ are authoritative DNS answers. By default the zones are class IN.
.IP
If you need more complicated authoritative data, with referrals, wildcards,
CNAME/DNAME support, or DNSSEC authoritative service, setup a stub\-zone for
-it as detailed in the stub zone section below.
+it as detailed in the stub zone section below. A stub\-zone can be used to
+have unbound send queries to another server, an authoritative server, to
+fetch the information. With a forward\-zone, unbound sends queries to a server
+that is a recursive server to fetch the information. With an auth\-zone a
+zone can be loaded from file and used, it can be used like a local\-zone
+for users downstream, or the auth\-zone information can be used to fetch
+information from when resolving like it is an upstream server. The
+forward\-zone and auth\-zone options are described in their sections below.
+If you want to perform filtering of the information that the users can fetch,
+the local\-zone and local\-data statements allow for this, but also the
+rpz functionality can be used, described in the RPZ section.
.TP 10
\h'5'\fIdeny\fR
Do not send an answer, drop the query.
@@ -1761,6 +1786,21 @@ option can be used multiple times. The most specific match will be used.
EDNS0 option code for the \fIedns\-client\-string\fR option, from 0 to 65535.
A value from the `Reserved for Local/Experimental` range (65001-65534) should
be used. Default is 65001.
+.TP 5
+.B ede: \fI<yes or no>
+If enabled, Unbound will respond with Extended DNS Error codes (RFC8914).
+These EDEs attach informative error messages to a response for various
+errors. Default is "no".
+
+When the \fBval-log-level\fR option is also set to \fB2\fR, responses with
+Extended DNS Errors concerning DNSSEC failures that are not served from cache,
+will also contain a descriptive text message about the reason for the failure.
+.TP
+.B ede\-serve\-expired: \fI<yes or no>
+If enabled, Unbound will attach an Extended DNS Error (RFC8914) Code 3 - Stale
+Answer as EDNS0 option to the expired response. Note that this will not attach
+the EDE code without setting the global \fBede\fR option to "yes" as well.
+Default is "no".
.SS "Remote Control Options"
In the
.B remote\-control:
@@ -1784,7 +1824,7 @@ Use 0.0.0.0 and ::0 to listen to all interfaces.
If you change this and permissions have been dropped, you must restart
the server for the change to take effect.
.IP
-If you set it to an absolute path, a local socket is used. The local socket
+If you set it to an absolute path, a unix domain socket is used. This socket
does not use the certificates and keys, so those files need not be present.
To restrict access, Unbound sets permissions on the file to the user and
group that is configured, the access bits are set to allow the group members
diff --git a/edns-subnet/subnetmod.c b/edns-subnet/subnetmod.c
index 81f0bf3ade55..25190b040d45 100644
--- a/edns-subnet/subnetmod.c
+++ b/edns-subnet/subnetmod.c
@@ -97,8 +97,8 @@ subnet_new_qstate(struct module_qstate *qstate, int id)
}
/** Add ecs struct to edns list, after parsing it to wire format. */
-static void
-ecs_opt_list_append(struct ecs_data* ecs, struct edns_option** list,
+void
+subnet_ecs_opt_list_append(struct ecs_data* ecs, struct edns_option** list,
struct module_qstate *qstate)
{
size_t sn_octs, sn_octs_remainder;
@@ -162,17 +162,21 @@ int ecs_whitelist_check(struct query_info* qinfo,
/* Address on whitelist or client query contains ECS option, we
* want to sent out ECS. Only add option if it is not already
* set. */
- if(!(sq->subnet_sent)) {
- ecs_opt_list_append(&sq->ecs_server_out,
+ if(!edns_opt_list_find(qstate->edns_opts_back_out,
+ qstate->env->cfg->client_subnet_opcode)) {
+ subnet_ecs_opt_list_append(&sq->ecs_server_out,
&qstate->edns_opts_back_out, qstate);
- sq->subnet_sent = 1;
}
+ sq->subnet_sent = 1;
}
- else if(sq->subnet_sent) {
+ else {
/* Outgoing ECS option is set, but we don't want to sent it to
* this address, remove option. */
- edns_opt_list_remove(&qstate->edns_opts_back_out,
- qstate->env->cfg->client_subnet_opcode);
+ if(edns_opt_list_find(qstate->edns_opts_back_out,
+ qstate->env->cfg->client_subnet_opcode)) {
+ edns_opt_list_remove(&qstate->edns_opts_back_out,
+ qstate->env->cfg->client_subnet_opcode);
+ }
sq->subnet_sent = 0;
}
return 1;
@@ -227,7 +231,7 @@ subnetmod_init(struct module_env *env, int id)
env->unique_mesh = 1;
if(!edns_register_option(env->cfg->client_subnet_opcode,
env->cfg->client_subnet_always_forward /* bypass cache */,
- 0 /* no aggregation */, env)) {
+ 1 /* no aggregation */, env)) {
log_err("subnetcache: could not register opcode");
ecs_whitelist_delete(sn_env->whitelist);
slabhash_delete(sn_env->subnet_msg_cache);
@@ -598,7 +602,7 @@ parse_subnet_option(struct edns_option* ecs_option, struct ecs_data* ecs)
return 1;
}
-static void
+void
subnet_option_from_ss(struct sockaddr_storage *ss, struct ecs_data* ecs,
struct config_file* cfg)
{
@@ -761,7 +765,7 @@ subnetmod_operate(struct module_qstate *qstate, enum module_ev event,
verbose(VERB_QUERY, "subnetcache: answered from cache");
qstate->ext_state[id] = module_finished;
- ecs_opt_list_append(&sq->ecs_client_out,
+ subnet_ecs_opt_list_append(&sq->ecs_client_out,
&qstate->edns_opts_front_out, qstate);
return;
}
@@ -783,7 +787,7 @@ subnetmod_operate(struct module_qstate *qstate, enum module_ev event,
sq->ecs_server_out.subnet_source_mask =
qstate->env->cfg->max_client_subnet_ipv6;
/* Safe to copy completely, even if the source is limited by the
- * configuration. ecs_opt_list_append() will limit the address.
+ * configuration. subnet_ecs_opt_list_append() will limit the address.
* */
memcpy(&sq->ecs_server_out.subnet_addr,
sq->ecs_client_in.subnet_addr, INET6_SIZE);
@@ -807,7 +811,7 @@ subnetmod_operate(struct module_qstate *qstate, enum module_ev event,
qstate->ext_state[id] = eval_response(qstate, id, sq);
if(qstate->ext_state[id] == module_finished &&
qstate->return_msg) {
- ecs_opt_list_append(&sq->ecs_client_out,
+ subnet_ecs_opt_list_append(&sq->ecs_client_out,
&qstate->edns_opts_front_out, qstate);
}
qstate->no_cache_store = sq->started_no_cache_store;
diff --git a/edns-subnet/subnetmod.h b/edns-subnet/subnetmod.h
index 27ba2ee74129..c877692b46b1 100644
--- a/edns-subnet/subnetmod.h
+++ b/edns-subnet/subnetmod.h
@@ -143,4 +143,11 @@ int ecs_query_response(struct module_qstate* qstate, struct dns_msg* response,
/** mark subnet msg to be deleted */
void subnet_markdel(void* key);
+/** Add ecs struct to edns list, after parsing it to wire format. */
+void subnet_ecs_opt_list_append(struct ecs_data* ecs, struct edns_option** list,
+ struct module_qstate *qstate);
+
+/** Create ecs_data from the sockaddr_storage information. */
+void subnet_option_from_ss(struct sockaddr_storage *ss, struct ecs_data* ecs,
+ struct config_file* cfg);
#endif /* SUBNETMOD_H */
diff --git a/ipset/ipset.c b/ipset/ipset.c
index f6e2c4a9d8a6..c61ebc205ee8 100644
--- a/ipset/ipset.c
+++ b/ipset/ipset.c
@@ -138,10 +138,10 @@ ipset_add_rrset_data(struct ipset_env *ie, struct mnl_socket *mnl,
static int
ipset_check_zones_for_rrset(struct module_env *env, struct ipset_env *ie,
struct mnl_socket *mnl, struct ub_packed_rrset_key *rrset,
- const char *setname, int af)
+ const char *qname, const int qlen, const char *setname, int af)
{
static char dname[BUFF_LEN];
- const char *s;
+ const char *ds, *qs;
int dlen, plen;
struct config_strlist *p;
@@ -152,70 +152,73 @@ ipset_check_zones_for_rrset(struct module_env *env, struct ipset_env *ie,
log_err("bad domain name");
return -1;
}
- if (dname[dlen - 1] == '.') {
- dlen--;
- }
for (p = env->cfg->local_zones_ipset; p; p = p->next) {
+ ds = NULL;
+ qs = NULL;
plen = strlen(p->str);
if (dlen >= plen) {
- s = dname + (dlen - plen);
-
- if (strncasecmp(p->str, s, plen) == 0) {
- d = (struct packed_rrset_data*)rrset->entry.data;
- ipset_add_rrset_data(ie, mnl, d, setname,
- af, dname);
- break;
- }
+ ds = dname + (dlen - plen);
+ }
+ if (qlen >= plen) {
+ qs = qname + (qlen - plen);
+ }
+ if ((ds && strncasecmp(p->str, ds, plen) == 0)
+ || (qs && strncasecmp(p->str, qs, plen) == 0)) {
+ d = (struct packed_rrset_data*)rrset->entry.data;
+ ipset_add_rrset_data(ie, mnl, d, setname,
+ af, dname);
+ break;
}
}
return 0;
}
-static int ipset_update(struct module_env *env, struct dns_msg *return_msg, struct ipset_env *ie) {
+static int ipset_update(struct module_env *env, struct dns_msg *return_msg,
+ struct query_info qinfo, struct ipset_env *ie)
+{
struct mnl_socket *mnl;
-
size_t i;
-
const char *setname;
-
struct ub_packed_rrset_key *rrset;
-
int af;
-
+ static char qname[BUFF_LEN];
+ int qlen;
mnl = (struct mnl_socket *)ie->mnl;
if (!mnl) {
- // retry to create mnl socket
+ /* retry to create mnl socket */
mnl = open_mnl_socket();
if (!mnl) {
return -1;
}
-
ie->mnl = mnl;
}
- for (i = 0; i < return_msg->rep->rrset_count; ++i) {
- setname = NULL;
+ qlen = sldns_wire2str_dname_buf(qinfo.qname, qinfo.qname_len,
+ qname, BUFF_LEN);
+ if(qlen == 0) {
+ log_err("bad domain name");
+ return -1;
+ }
+ for(i = 0; i < return_msg->rep->rrset_count; i++) {
+ setname = NULL;
rrset = return_msg->rep->rrsets[i];
-
- if (rrset->rk.type == htons(LDNS_RR_TYPE_A)) {
+ if(ntohs(rrset->rk.type) == LDNS_RR_TYPE_A &&
+ ie->v4_enabled == 1) {
af = AF_INET;
- if ((ie->v4_enabled == 1)) {
- setname = ie->name_v4;
- }
- } else {
+ setname = ie->name_v4;
+ } else if(ntohs(rrset->rk.type) == LDNS_RR_TYPE_AAAA &&
+ ie->v6_enabled == 1) {
af = AF_INET6;
- if ((ie->v6_enabled == 1)) {
- setname = ie->name_v6;
- }
+ setname = ie->name_v6;
}
if (setname) {
if(ipset_check_zones_for_rrset(env, ie, mnl, rrset,
- setname, af) == -1)
+ qname, qlen, setname, af) == -1)
return -1;
}
}
@@ -311,7 +314,7 @@ void ipset_operate(struct module_qstate *qstate, enum module_ev event, int id,
if (iq && (event == module_event_moddone)) {
if (qstate->return_msg && qstate->return_msg->rep) {
- ipset_update(qstate->env, qstate->return_msg, ie);
+ ipset_update(qstate->env, qstate->return_msg, qstate->qinfo, ie);
}
qstate->ext_state[id] = module_finished;
return;
diff --git a/iterator/iter_delegpt.h b/iterator/iter_delegpt.h
index 17db15a23e26..998b98cd803e 100644
--- a/iterator/iter_delegpt.h
+++ b/iterator/iter_delegpt.h
@@ -128,7 +128,7 @@ struct delegpt_ns {
uint8_t done_pside6;
/** the TLS authentication name, (if not NULL) to use. */
char* tls_auth_name;
- /** the port to use; it should mosty be the default 53 but configured
+ /** the port to use; it should mostly be the default 53 but configured
* upstreams can provide nondefault ports. */
int port;
};
diff --git a/iterator/iter_utils.c b/iterator/iter_utils.c
index 2482a1f40f03..f3bea46d6c95 100644
--- a/iterator/iter_utils.c
+++ b/iterator/iter_utils.c
@@ -743,9 +743,10 @@ iter_mark_pside_cycle_targets(struct module_qstate* qstate, struct delegpt* dp)
int
iter_dp_is_useless(struct query_info* qinfo, uint16_t qflags,
- struct delegpt* dp)
+ struct delegpt* dp, int supports_ipv4, int supports_ipv6)
{
struct delegpt_ns* ns;
+ struct delegpt_addr* a;
/* check:
* o RD qflag is on.
* o no addresses are provided.
@@ -758,13 +759,24 @@ iter_dp_is_useless(struct query_info* qinfo, uint16_t qflags,
*/
if(!(qflags&BIT_RD))
return 0;
- /* either available or unused targets */
- if(dp->usable_list || dp->result_list)
- return 0;
+ /* either available or unused targets,
+ * if they exist, the dp is not useless. */
+ for(a = dp->usable_list; a; a = a->next_usable) {
+ if(!addr_is_ip6(&a->addr, a->addrlen) && supports_ipv4)
+ return 0;
+ else if(addr_is_ip6(&a->addr, a->addrlen) && supports_ipv6)
+ return 0;
+ }
+ for(a = dp->result_list; a; a = a->next_result) {
+ if(!addr_is_ip6(&a->addr, a->addrlen) && supports_ipv4)
+ return 0;
+ else if(addr_is_ip6(&a->addr, a->addrlen) && supports_ipv6)
+ return 0;
+ }
/* see if query is for one of the nameservers, which is glue */
- if( (qinfo->qtype == LDNS_RR_TYPE_A ||
- qinfo->qtype == LDNS_RR_TYPE_AAAA) &&
+ if( ((qinfo->qtype == LDNS_RR_TYPE_A && supports_ipv4) ||
+ (qinfo->qtype == LDNS_RR_TYPE_AAAA && supports_ipv6)) &&
dname_subdomain_c(qinfo->qname, dp->name) &&
delegpt_find_ns(dp, qinfo->qname, qinfo->qname_len))
return 1;
diff --git a/iterator/iter_utils.h b/iterator/iter_utils.h
index 0a40916c0e02..c0e5181573f5 100644
--- a/iterator/iter_utils.h
+++ b/iterator/iter_utils.h
@@ -175,10 +175,14 @@ void iter_mark_pside_cycle_targets(struct module_qstate* qstate,
* @param qinfo: query name and type
* @param qflags: query flags with RD flag
* @param dp: delegpt to check.
+ * @param supports_ipv4: if we support ipv4 for lookups to the target.
+ * if not, then the IPv4 addresses are useless.
+ * @param supports_ipv6: if we support ipv6 for lookups to the target.
+ * if not, then the IPv6 addresses are useless.
* @return true if dp is useless.
*/
int iter_dp_is_useless(struct query_info* qinfo, uint16_t qflags,
- struct delegpt* dp);
+ struct delegpt* dp, int supports_ipv4, int supports_ipv6);
/**
* See if qname has DNSSEC needs. This is true if there is a trust anchor above
diff --git a/iterator/iterator.c b/iterator/iterator.c
index 54006940d90e..3cfb286f4491 100644
--- a/iterator/iterator.c
+++ b/iterator/iterator.c
@@ -1547,7 +1547,7 @@ processInitRequest(struct module_qstate* qstate, struct iter_qstate* iq,
* same server reply) if useless-checked.
*/
if(iter_dp_is_useless(&qstate->qinfo, qstate->query_flags,
- iq->dp)) {
+ iq->dp, ie->supports_ipv4, ie->supports_ipv6)) {
struct delegpt* retdp = NULL;
if(!can_have_last_resort(qstate->env, iq->dp->name, iq->dp->namelen, iq->qchase.qclass, &retdp)) {
if(retdp) {
@@ -1831,6 +1831,23 @@ query_for_targets(struct module_qstate* qstate, struct iter_qstate* iq,
int missing;
int toget = 0;
+ iter_mark_cycle_targets(qstate, iq->dp);
+ missing = (int)delegpt_count_missing_targets(iq->dp);
+ log_assert(maxtargets != 0); /* that would not be useful */
+
+ /* Generate target requests. Basically, any missing targets
+ * are queried for here, regardless if it is necessary to do
+ * so to continue processing. */
+ if(maxtargets < 0 || maxtargets > missing)
+ toget = missing;
+ else toget = maxtargets;
+ if(toget == 0) {
+ *num = 0;
+ return 1;
+ }
+
+ /* now that we are sure that a target query is going to be made,
+ * check the limits. */
if(iq->depth == ie->max_dependency_depth)
return 0;
if(iq->depth > 0 && iq->target_count &&
@@ -1850,20 +1867,6 @@ query_for_targets(struct module_qstate* qstate, struct iter_qstate* iq,
return 0;
}
- iter_mark_cycle_targets(qstate, iq->dp);
- missing = (int)delegpt_count_missing_targets(iq->dp);
- log_assert(maxtargets != 0); /* that would not be useful */
-
- /* Generate target requests. Basically, any missing targets
- * are queried for here, regardless if it is necessary to do
- * so to continue processing. */
- if(maxtargets < 0 || maxtargets > missing)
- toget = missing;
- else toget = maxtargets;
- if(toget == 0) {
- *num = 0;
- return 1;
- }
/* select 'toget' items from the total of 'missing' items */
log_assert(toget <= missing);
@@ -2512,7 +2515,7 @@ processQueryTargets(struct module_qstate* qstate, struct iter_qstate* iq,
iq->response = forged_response;
next_state(iq, FINISHED_STATE);
if(!iter_prepend(iq, qstate->return_msg, qstate->region)) {
- log_err("rpz, prepend rrsets: out of memory");
+ log_err("rpz: prepend rrsets: out of memory");
return error_response(qstate, id, LDNS_RCODE_SERVFAIL);
}
return 0;
@@ -2832,7 +2835,9 @@ processQueryResponse(struct module_qstate* qstate, struct iter_qstate* iq,
}
if(!qstate->no_cache_store)
iter_dns_store(qstate->env, &iq->response->qinfo,
- iq->response->rep, 0, qstate->prefetch_leeway,
+ iq->response->rep,
+ iq->qchase.qtype != iq->response->qinfo.qtype,
+ qstate->prefetch_leeway,
iq->dp&&iq->dp->has_parent_side_NS,
qstate->region, qstate->query_flags);
/* close down outstanding requests to be discarded */
@@ -3067,7 +3072,7 @@ processQueryResponse(struct module_qstate* qstate, struct iter_qstate* iq,
iq->response = forged_response;
next_state(iq, FINISHED_STATE);
if(!iter_prepend(iq, qstate->return_msg, qstate->region)) {
- log_err("rpz after cname, prepend rrsets: out of memory");
+ log_err("rpz: after cname, prepend rrsets: out of memory");
return error_response(qstate, id, LDNS_RCODE_SERVFAIL);
}
qstate->return_msg->qinfo = qstate->qinfo;
diff --git a/libunbound/libworker.c b/libunbound/libworker.c
index ab28dd54f942..11bf5f9db555 100644
--- a/libunbound/libworker.c
+++ b/libunbound/libworker.c
@@ -650,7 +650,7 @@ int libworker_fg(struct ub_ctx* ctx, struct ctx_query* q)
}
/* process new query */
if(!mesh_new_callback(w->env->mesh, &qinfo, qflags, &edns,
- w->back->udp_buff, qid, libworker_fg_done_cb, q)) {
+ w->back->udp_buff, qid, libworker_fg_done_cb, q, 0)) {
free(qinfo.qname);
return UB_NOMEM;
}
@@ -730,7 +730,7 @@ int libworker_attach_mesh(struct ub_ctx* ctx, struct ctx_query* q,
if(async_id)
*async_id = q->querynum;
if(!mesh_new_callback(w->env->mesh, &qinfo, qflags, &edns,
- w->back->udp_buff, qid, libworker_event_done_cb, q)) {
+ w->back->udp_buff, qid, libworker_event_done_cb, q, 0)) {
free(qinfo.qname);
return UB_NOMEM;
}
@@ -867,7 +867,7 @@ handle_newq(struct libworker* w, uint8_t* buf, uint32_t len)
q->w = w;
/* process new query */
if(!mesh_new_callback(w->env->mesh, &qinfo, qflags, &edns,
- w->back->udp_buff, qid, libworker_bg_done_cb, q)) {
+ w->back->udp_buff, qid, libworker_bg_done_cb, q, 0)) {
add_bg_result(w, q, NULL, UB_NOMEM, NULL, 0);
}
free(qinfo.qname);
diff --git a/pythonmod/doc/modules/functions.rst b/pythonmod/doc/modules/functions.rst
index 951a17f948c7..76c21d6dbedd 100644
--- a/pythonmod/doc/modules/functions.rst
+++ b/pythonmod/doc/modules/functions.rst
@@ -60,7 +60,7 @@ EDNS options
.. function:: edns_opt_list_remove(list, code);
- Remove an ENDS option code from the list.
+ Remove an EDNS option code from the list.
.. note:: All :class:`edns_option` with the code will be removed
:param list: linked list of :class:`edns_option`
diff --git a/pythonmod/doc/modules/struct.rst b/pythonmod/doc/modules/struct.rst
index 310cf552456e..6e6a32e3e8b8 100644
--- a/pythonmod/doc/modules/struct.rst
+++ b/pythonmod/doc/modules/struct.rst
@@ -77,7 +77,7 @@ module_qstate
.. attribute:: edns_opts_back_in_iter
- Iterator for `ends_opts_back_in`.
+ Iterator for `edns_opts_back_in`.
.. attribute:: edns_opts_front_out
diff --git a/pythonmod/examples/inplace_callbacks.py b/pythonmod/examples/inplace_callbacks.py
index de375b4e12fc..2682fbd02dc0 100644
--- a/pythonmod/examples/inplace_callbacks.py
+++ b/pythonmod/examples/inplace_callbacks.py
@@ -207,7 +207,7 @@ def inplace_servfail_callback(qinfo, qstate, rep, rcode, edns, opt_list_out,
"""
log_info("python: called back while servfail.")
- # Append the example ENDS option
+ # Append the example EDNS option
b = bytearray.fromhex("")
edns_opt_list_append(opt_list_out, 65003, b, region)
diff --git a/pythonmod/interface.i b/pythonmod/interface.i
index 1ca8686a76f3..2fac5f884006 100644
--- a/pythonmod/interface.i
+++ b/pythonmod/interface.i
@@ -1377,7 +1377,7 @@ struct delegpt* dns_cache_find_delegation(struct module_env* env,
uint8_t* qname, size_t qnamelen, uint16_t qtype, uint16_t qclass,
struct regional* region, struct dns_msg** msg, uint32_t timenow);
int iter_dp_is_useless(struct query_info* qinfo, uint16_t qflags,
- struct delegpt* dp);
+ struct delegpt* dp, int supports_ipv4, int supports_ipv6);
struct iter_hints_stub* hints_lookup_stub(struct iter_hints* hints,
uint8_t* qname, uint16_t qclass, struct delegpt* dp);
@@ -1407,7 +1407,8 @@ struct delegpt* find_delegation(struct module_qstate* qstate, char *nm, size_t n
dp = dns_cache_find_delegation(qstate->env, (uint8_t*)nm, nmlen, qinfo.qtype, qinfo.qclass, region, &msg, timenow);
if(!dp)
return NULL;
- if(iter_dp_is_useless(&qinfo, BIT_RD, dp)) {
+ if(iter_dp_is_useless(&qinfo, BIT_RD, dp,
+ qstate->env->cfg->do_ip4, qstate->env->cfg->do_ip6)) {
if (dname_is_root((uint8_t*)nm))
return NULL;
nm = (char*)dp->name;
diff --git a/respip/respip.c b/respip/respip.c
index 3d1b3feaf460..deff663170aa 100644
--- a/respip/respip.c
+++ b/respip/respip.c
@@ -833,8 +833,11 @@ static int
respip_use_rpz(struct resp_addr* raddr, struct rpz* r,
enum respip_action* action,
struct ub_packed_rrset_key** data, int* rpz_log, char** log_name,
- int* rpz_cname_override, struct regional* region, int* is_rpz)
+ int* rpz_cname_override, struct regional* region, int* is_rpz,
+ int* rpz_passthru)
{
+ if(rpz_passthru && *rpz_passthru)
+ return 0;
if(r->action_override == RPZ_DISABLED_ACTION) {
*is_rpz = 0;
return 1;
@@ -848,6 +851,9 @@ respip_use_rpz(struct resp_addr* raddr, struct rpz* r,
*data = r->cname_override;
*rpz_cname_override = 1;
}
+ if(*action == respip_always_transparent /* RPZ_PASSTHRU_ACTION */
+ && rpz_passthru)
+ *rpz_passthru = 1;
*rpz_log = r->log;
if(r->log_name)
if(!(*log_name = regional_strdup(region, r->log_name)))
@@ -861,7 +867,7 @@ respip_rewrite_reply(const struct query_info* qinfo,
const struct respip_client_info* cinfo, const struct reply_info* rep,
struct reply_info** new_repp, struct respip_action_info* actinfo,
struct ub_packed_rrset_key** alias_rrset, int search_only,
- struct regional* region, struct auth_zones* az)
+ struct regional* region, struct auth_zones* az, int* rpz_passthru)
{
const uint8_t* ctaglist;
size_t ctaglen;
@@ -934,7 +940,7 @@ respip_rewrite_reply(const struct query_info* qinfo,
ipset->tagname, ipset->num_tags);
}
lock_rw_rdlock(&az->rpz_lock);
- for(a = az->rpz_first; a && !raddr; a = a->rpz_az_next) {
+ for(a = az->rpz_first; a && !raddr && !(rpz_passthru && *rpz_passthru); a = a->rpz_az_next) {
lock_rw_rdlock(&a->lock);
r = a->rpz;
if(!r->taglist || taglist_intersect(r->taglist,
@@ -943,7 +949,7 @@ respip_rewrite_reply(const struct query_info* qinfo,
r->respip_set, &rrset_id, &rr_id))) {
if(!respip_use_rpz(raddr, r, &action, &data,
&rpz_log, &log_name, &rpz_cname_override,
- region, &rpz_used)) {
+ region, &rpz_used, rpz_passthru)) {
log_err("out of memory");
lock_rw_unlock(&raddr->lock);
lock_rw_unlock(&a->lock);
@@ -964,7 +970,7 @@ respip_rewrite_reply(const struct query_info* qinfo,
addr_to_str(&raddr->node.addr,
raddr->node.addrlen,
nm, sizeof(nm));
- verbose(VERB_ALGO, "respip: rpz response-ip trigger %s/%d on %s %s with action %s", nm, raddr->node.net, qn, ip, rpz_action_to_string(respip_action_to_rpz_action(action)));
+ verbose(VERB_ALGO, "respip: rpz: response-ip trigger %s/%d on %s %s with action %s", nm, raddr->node.net, qn, ip, rpz_action_to_string(respip_action_to_rpz_action(action)));
}
/* break to make sure 'a' stays pointed
* to used auth_zone, and keeps lock */
@@ -1094,7 +1100,8 @@ respip_operate(struct module_qstate* qstate, enum module_ev event, int id,
if(!respip_rewrite_reply(&qstate->qinfo,
qstate->client_info, qstate->return_msg->rep,
&new_rep, &actinfo, &alias_rrset, 0,
- qstate->region, qstate->env->auth_zones)) {
+ qstate->region, qstate->env->auth_zones,
+ &qstate->rpz_passthru)) {
goto servfail;
}
if(actinfo.action != respip_none) {
@@ -1169,7 +1176,7 @@ respip_merge_cname(struct reply_info* base_rep,
/* see if the target reply would be subject to a response-ip action. */
if(!respip_rewrite_reply(qinfo, cinfo, tgt_rep, &tmp_rep, &actinfo,
- &alias_rrset, 1, region, az))
+ &alias_rrset, 1, region, az, NULL))
return 0;
if(actinfo.action != respip_none) {
log_info("CNAME target of redirect response-ip action would "
@@ -1301,7 +1308,7 @@ respip_inform_print(struct respip_action_info* respip_actinfo, uint8_t* qname,
respip, sizeof(respip));
if(respip_actinfo->rpz_log) {
txtlen += snprintf(txt+txtlen, sizeof(txt)-txtlen, "%s",
- "RPZ applied ");
+ "rpz: applied ");
if(respip_actinfo->rpz_cname_override)
actionstr = rpz_action_to_string(
RPZ_CNAME_OVERRIDE_ACTION);
diff --git a/respip/respip.h b/respip/respip.h
index 3dfb4e9f01c7..988a72263390 100644
--- a/respip/respip.h
+++ b/respip/respip.h
@@ -176,6 +176,8 @@ int respip_merge_cname(struct reply_info* base_rep,
* will be set (or intact) accordingly but the modified reply won't be built.
* @param az: auth zones containing RPZ information.
* @param region: allocator to build *new_repp.
+ * @param rpz_passthru: keeps track of query state can have passthru that
+ * stops further rpz processing. Or NULL for cached answer processing.
* @return 1 on success, 0 on error.
*/
int respip_rewrite_reply(const struct query_info* qinfo,
@@ -183,7 +185,8 @@ int respip_rewrite_reply(const struct query_info* qinfo,
const struct reply_info *rep, struct reply_info** new_repp,
struct respip_action_info* actinfo,
struct ub_packed_rrset_key** alias_rrset,
- int search_only, struct regional* region, struct auth_zones* az);
+ int search_only, struct regional* region, struct auth_zones* az,
+ int* rpz_passthru);
/**
* Get the response-ip function block.
diff --git a/services/authzone.c b/services/authzone.c
index e83af533dbc0..02fb621a22ff 100644
--- a/services/authzone.c
+++ b/services/authzone.c
@@ -132,6 +132,7 @@ msg_create(struct regional* region, struct query_info* qinfo)
return NULL;
msg->rep->flags = (uint16_t)(BIT_QR | BIT_AA);
msg->rep->authoritative = 1;
+ msg->rep->reason_bogus = LDNS_EDE_NONE;
msg->rep->qdcount = 1;
/* rrsets is NULL, no rrsets yet */
return msg;
@@ -1882,6 +1883,8 @@ static int auth_zone_zonemd_check_hash(struct auth_zone* z,
struct regional* region = NULL;
struct sldns_buffer* buf = NULL;
uint32_t soa_serial = 0;
+ char* unsupported_reason = NULL;
+ int only_unsupported = 1;
region = env->scratch;
regional_free_all(region);
buf = env->scratch_buffer;
@@ -1911,6 +1914,7 @@ static int auth_zone_zonemd_check_hash(struct auth_zone* z,
&hashalgo, &hash, &hashlen)) {
/* malformed RR */
*reason = "ZONEMD rdata malformed";
+ only_unsupported = 0;
continue;
}
/* check for duplicates */
@@ -1920,25 +1924,51 @@ static int auth_zone_zonemd_check_hash(struct auth_zone* z,
* is not allowed. */
*reason = "ZONEMD RRSet contains more than one RR "
"with the same scheme and hash algorithm";
+ only_unsupported = 0;
continue;
}
regional_free_all(region);
if(serial != soa_serial) {
*reason = "ZONEMD serial is wrong";
+ only_unsupported = 0;
continue;
}
+ *reason = NULL;
if(auth_zone_generate_zonemd_check(z, scheme, hashalgo,
hash, hashlen, region, buf, reason)) {
/* success */
+ if(*reason) {
+ if(!unsupported_reason)
+ unsupported_reason = *reason;
+ /* continue to check for valid ZONEMD */
+ if(verbosity >= VERB_ALGO) {
+ char zstr[255+1];
+ dname_str(z->name, zstr);
+ verbose(VERB_ALGO, "auth-zone %s ZONEMD %d %d is unsupported: %s", zstr, (int)scheme, (int)hashalgo, *reason);
+ }
+ *reason = NULL;
+ continue;
+ }
if(verbosity >= VERB_ALGO) {
char zstr[255+1];
dname_str(z->name, zstr);
- verbose(VERB_ALGO, "auth-zone %s ZONEMD hash is correct", zstr);
+ if(!*reason)
+ verbose(VERB_ALGO, "auth-zone %s ZONEMD hash is correct", zstr);
}
return 1;
}
+ only_unsupported = 0;
/* try next one */
}
+ /* have we seen no failures but only unsupported algo,
+ * and one unsupported algorithm, or more. */
+ if(only_unsupported && unsupported_reason) {
+ /* only unsupported algorithms, with valid serial, not
+ * malformed. Did not see supported algorithms, failed or
+ * successful ones. */
+ *reason = unsupported_reason;
+ return 1;
+ }
/* fail, we may have reason */
if(!*reason)
*reason = "no ZONEMD records found";
@@ -4456,7 +4486,7 @@ chunkline_get_line_collated(struct auth_chunk** chunk, size_t* chunk_pos,
return 1;
}
-/** process $ORIGIN for http */
+/** process $ORIGIN for http, 0 nothing, 1 done, 2 error */
static int
http_parse_origin(sldns_buffer* buf, struct sldns_file_parse_state* pstate)
{
@@ -4467,13 +4497,16 @@ http_parse_origin(sldns_buffer* buf, struct sldns_file_parse_state* pstate)
pstate->origin_len = sizeof(pstate->origin);
s = sldns_str2wire_dname_buf(sldns_strip_ws(line+8),
pstate->origin, &pstate->origin_len);
- if(s) pstate->origin_len = 0;
+ if(s) {
+ pstate->origin_len = 0;
+ return 2;
+ }
return 1;
}
return 0;
}
-/** process $TTL for http */
+/** process $TTL for http, 0 nothing, 1 done, 2 error */
static int
http_parse_ttl(sldns_buffer* buf, struct sldns_file_parse_state* pstate)
{
@@ -4481,8 +4514,12 @@ http_parse_ttl(sldns_buffer* buf, struct sldns_file_parse_state* pstate)
if(strncmp(line, "$TTL", 4) == 0 &&
isspace((unsigned char)line[4])) {
const char* end = NULL;
+ int overflow = 0;
pstate->default_ttl = sldns_str2period(
- sldns_strip_ws(line+5), &end);
+ sldns_strip_ws(line+5), &end, &overflow);
+ if(overflow) {
+ return 2;
+ }
return 1;
}
return 0;
@@ -4493,15 +4530,20 @@ static int
chunkline_non_comment_RR(struct auth_chunk** chunk, size_t* chunk_pos,
sldns_buffer* buf, struct sldns_file_parse_state* pstate)
{
+ int ret;
while(chunkline_get_line_collated(chunk, chunk_pos, buf)) {
if(chunkline_is_comment_line_or_empty(buf)) {
/* a comment, go to next line */
continue;
}
- if(http_parse_origin(buf, pstate)) {
+ if((ret=http_parse_origin(buf, pstate))!=0) {
+ if(ret == 2)
+ return 0;
continue; /* $ORIGIN has been handled */
}
- if(http_parse_ttl(buf, pstate)) {
+ if((ret=http_parse_ttl(buf, pstate))!=0) {
+ if(ret == 2)
+ return 0;
continue; /* $TTL has been handled */
}
return 1;
@@ -5007,6 +5049,7 @@ apply_http(struct auth_xfer* xfr, struct auth_zone* z,
struct sldns_file_parse_state pstate;
struct auth_chunk* chunk;
size_t chunk_pos;
+ int ret;
memset(&pstate, 0, sizeof(pstate));
pstate.default_ttl = 3600;
if(xfr->namelen < sizeof(pstate.origin)) {
@@ -5063,10 +5106,24 @@ apply_http(struct auth_xfer* xfr, struct auth_zone* z,
continue;
}
/* parse line and add RR */
- if(http_parse_origin(scratch_buffer, &pstate)) {
+ if((ret=http_parse_origin(scratch_buffer, &pstate))!=0) {
+ if(ret == 2) {
+ verbose(VERB_ALGO, "error parsing ORIGIN on line [%s:%d] %s",
+ xfr->task_transfer->master->file,
+ pstate.lineno,
+ sldns_buffer_begin(scratch_buffer));
+ return 0;
+ }
continue; /* $ORIGIN has been handled */
}
- if(http_parse_ttl(scratch_buffer, &pstate)) {
+ if((ret=http_parse_ttl(scratch_buffer, &pstate))!=0) {
+ if(ret == 2) {
+ verbose(VERB_ALGO, "error parsing TTL on line [%s:%d] %s",
+ xfr->task_transfer->master->file,
+ pstate.lineno,
+ sldns_buffer_begin(scratch_buffer));
+ return 0;
+ }
continue; /* $TTL has been handled */
}
if(!http_parse_add_rr(xfr, z, scratch_buffer, &pstate)) {
@@ -5370,7 +5427,7 @@ xfr_transfer_lookup_host(struct auth_xfer* xfr, struct module_env* env)
* called straight away */
lock_basic_unlock(&xfr->lock);
if(!mesh_new_callback(env->mesh, &qinfo, qflags, &edns, buf, 0,
- &auth_xfer_transfer_lookup_callback, xfr)) {
+ &auth_xfer_transfer_lookup_callback, xfr, 0)) {
lock_basic_lock(&xfr->lock);
log_err("out of memory lookup up master %s", master->host);
return 0;
@@ -6561,7 +6618,7 @@ xfr_probe_lookup_host(struct auth_xfer* xfr, struct module_env* env)
* called straight away */
lock_basic_unlock(&xfr->lock);
if(!mesh_new_callback(env->mesh, &qinfo, qflags, &edns, buf, 0,
- &auth_xfer_probe_lookup_callback, xfr)) {
+ &auth_xfer_probe_lookup_callback, xfr, 0)) {
lock_basic_lock(&xfr->lock);
log_err("out of memory lookup up master %s", master->host);
return 0;
@@ -7632,13 +7689,16 @@ int auth_zone_generate_zonemd_check(struct auth_zone* z, int scheme,
{
uint8_t gen[512];
size_t genlen = 0;
+ *reason = NULL;
if(!zonemd_hashalgo_supported(hashalgo)) {
+ /* allow it */
*reason = "unsupported algorithm";
- return 0;
+ return 1;
}
if(!zonemd_scheme_supported(scheme)) {
+ /* allow it */
*reason = "unsupported scheme";
- return 0;
+ return 1;
}
if(hashlen < 12) {
/* the ZONEMD draft requires digests to fail if too small */
@@ -7726,7 +7786,7 @@ static int zonemd_dnssec_verify_rrset(struct auth_zone* z,
auth_zone_log(z->name, VERB_ALGO,
"zonemd: verify %s RRset with DNSKEY", typestr);
}
- sec = dnskeyset_verify_rrset(env, ve, &pk, dnskey, sigalg, why_bogus,
+ sec = dnskeyset_verify_rrset(env, ve, &pk, dnskey, sigalg, why_bogus, NULL,
LDNS_SECTION_ANSWER, NULL);
if(sec == sec_status_secure) {
return 1;
@@ -8003,9 +8063,13 @@ auth_zone_verify_zonemd_with_key(struct auth_zone* z, struct module_env* env,
}
/* success! log the success */
- auth_zone_log(z->name, VERB_ALGO, "ZONEMD verification successful");
+ if(reason)
+ auth_zone_log(z->name, VERB_ALGO, "ZONEMD %s", reason);
+ else auth_zone_log(z->name, VERB_ALGO, "ZONEMD verification successful");
if(result) {
- *result = strdup("ZONEMD verification successful");
+ if(reason)
+ *result = strdup(reason);
+ else *result = strdup("ZONEMD verification successful");
if(!*result) log_err("out of memory");
}
}
@@ -8065,7 +8129,7 @@ zonemd_get_dnskey_from_anchor(struct auth_zone* z, struct module_env* env,
auth_zone_log(z->name, VERB_QUERY,
"zonemd: verify DNSKEY RRset with trust anchor");
sec = val_verify_DNSKEY_with_TA(env, ve, keystorage, anchor->ds_rrset,
- anchor->dnskey_rrset, NULL, why_bogus, NULL);
+ anchor->dnskey_rrset, NULL, why_bogus, NULL, NULL);
regional_free_all(env->scratch);
if(sec == sec_status_secure) {
/* success */
@@ -8123,8 +8187,9 @@ auth_zone_verify_zonemd_key_with_ds(struct auth_zone* z,
keystorage->rk.type = htons(LDNS_RR_TYPE_DNSKEY);
keystorage->rk.rrset_class = htons(z->dclass);
auth_zone_log(z->name, VERB_QUERY, "zonemd: verify zone DNSKEY with DS");
+ // @TODO add EDE here? we currently just pass NULL
sec = val_verify_DNSKEY_with_DS(env, ve, keystorage, ds, sigalg,
- why_bogus, NULL);
+ why_bogus, NULL, NULL);
regional_free_all(env->scratch);
if(sec == sec_status_secure) {
/* success */
@@ -8340,7 +8405,7 @@ zonemd_lookup_dnskey(struct auth_zone* z, struct module_env* env)
/* the callback can be called straight away */
lock_rw_unlock(&z->lock);
if(!mesh_new_callback(env->mesh, &qinfo, qflags, &edns, buf, 0,
- &auth_zonemd_dnskey_lookup_callback, z)) {
+ &auth_zonemd_dnskey_lookup_callback, z, 0)) {
lock_rw_wrlock(&z->lock);
log_err("out of memory lookup of %s for zonemd",
(fetch_ds?"DS":"DNSKEY"));
diff --git a/services/authzone.h b/services/authzone.h
index d24e569d3b85..07614ed82963 100644
--- a/services/authzone.h
+++ b/services/authzone.h
@@ -747,6 +747,9 @@ int zonemd_scheme_supported(int scheme);
* @param region: temp region for allocs during canonicalisation.
* @param buf: temp buffer during canonicalisation.
* @param reason: string returned with failure reason.
+ * If the hash cannot be checked, but it is allowed, for unknown
+ * algorithms, the routine returns success, and the reason is nonNULL,
+ * with the allowance reason.
* @return false on failure.
*/
int auth_zone_generate_zonemd_check(struct auth_zone* z, int scheme,
diff --git a/services/cache/dns.c b/services/cache/dns.c
index 5b64fe47520c..f6c11451c93a 100644
--- a/services/cache/dns.c
+++ b/services/cache/dns.c
@@ -428,6 +428,7 @@ dns_msg_create(uint8_t* qname, size_t qnamelen, uint16_t qtype,
return NULL; /* integer overflow protection */
msg->rep->flags = BIT_QR; /* with QR, no AA */
msg->rep->qdcount = 1;
+ msg->rep->reason_bogus = LDNS_EDE_NONE;
msg->rep->rrsets = (struct ub_packed_rrset_key**)
regional_alloc(region,
capacity*sizeof(struct ub_packed_rrset_key*));
@@ -524,6 +525,7 @@ gen_dns_msg(struct regional* region, struct query_info* q, size_t num)
sizeof(struct reply_info) - sizeof(struct rrset_ref));
if(!msg->rep)
return NULL;
+ msg->rep->reason_bogus = LDNS_EDE_NONE;
if(num > RR_COUNT_MAX)
return NULL; /* integer overflow protection */
msg->rep->rrsets = (struct ub_packed_rrset_key**)
@@ -577,6 +579,7 @@ tomsg(struct module_env* env, struct query_info* q, struct reply_info* r,
msg->rep->ar_numrrsets = r->ar_numrrsets;
msg->rep->rrset_count = r->rrset_count;
msg->rep->authoritative = r->authoritative;
+ msg->rep->reason_bogus = r->reason_bogus;
if(!rrset_array_lock(r->ref, r->rrset_count, now_control)) {
return NULL;
}
@@ -632,6 +635,7 @@ rrset_msg(struct ub_packed_rrset_key* rrset, struct regional* region,
msg->rep->ns_numrrsets = 0;
msg->rep->ar_numrrsets = 0;
msg->rep->rrset_count = 1;
+ msg->rep->reason_bogus = LDNS_EDE_NONE;
msg->rep->rrsets[0] = packed_rrset_copy_region(rrset, region, now);
if(!msg->rep->rrsets[0]) /* copy CNAME */
return NULL;
@@ -670,6 +674,7 @@ synth_dname_msg(struct ub_packed_rrset_key* rrset, struct regional* region,
msg->rep->ns_numrrsets = 0;
msg->rep->ar_numrrsets = 0;
msg->rep->rrset_count = 1;
+ msg->rep->reason_bogus = LDNS_EDE_NONE;
msg->rep->rrsets[0] = packed_rrset_copy_region(rrset, region, now);
if(!msg->rep->rrsets[0]) /* copy DNAME */
return NULL;
diff --git a/services/listen_dnsport.c b/services/listen_dnsport.c
index 983b96f09eec..03153bd64778 100644
--- a/services/listen_dnsport.c
+++ b/services/listen_dnsport.c
@@ -47,6 +47,7 @@
#ifdef USE_TCP_FASTOPEN
#include <netinet/tcp.h>
#endif
+#include <ctype.h>
#include "services/listen_dnsport.h"
#include "services/outside_network.h"
#include "util/netevent.h"
@@ -1157,7 +1158,7 @@ if_is_ssl(const char* ifname, const char* port, int ssl_port,
* @param do_auto: use automatic interface detection.
* If enabled, then ifname must be the wildcard name.
* @param do_udp: if udp should be used.
- * @param do_tcp: if udp should be used.
+ * @param do_tcp: if tcp should be used.
* @param hints: for getaddrinfo. family and flags have to be set by caller.
* @param port: Port number to use (as string).
* @param list: list of open ports, appended to, changed to point to list head.
@@ -1369,17 +1370,17 @@ listen_create(struct comm_base* base, struct listen_port* ports,
while(ports) {
struct comm_point* cp = NULL;
if(ports->ftype == listen_type_udp ||
- ports->ftype == listen_type_udp_dnscrypt)
+ ports->ftype == listen_type_udp_dnscrypt) {
cp = comm_point_create_udp(base, ports->fd,
front->udp_buff, cb, cb_arg, ports->socket);
- else if(ports->ftype == listen_type_tcp ||
- ports->ftype == listen_type_tcp_dnscrypt)
+ } else if(ports->ftype == listen_type_tcp ||
+ ports->ftype == listen_type_tcp_dnscrypt) {
cp = comm_point_create_tcp(base, ports->fd,
tcp_accept_count, tcp_idle_timeout,
harden_large_queries, 0, NULL,
tcp_conn_limit, bufsize, front->udp_buff,
ports->ftype, cb, cb_arg, ports->socket);
- else if(ports->ftype == listen_type_ssl ||
+ } else if(ports->ftype == listen_type_ssl ||
ports->ftype == listen_type_http) {
cp = comm_point_create_tcp(base, ports->fd,
tcp_accept_count, tcp_idle_timeout,
@@ -1410,15 +1411,22 @@ listen_create(struct comm_base* base, struct listen_port* ports,
#endif
}
} else if(ports->ftype == listen_type_udpancil ||
- ports->ftype == listen_type_udpancil_dnscrypt)
+ ports->ftype == listen_type_udpancil_dnscrypt) {
cp = comm_point_create_udp_ancil(base, ports->fd,
front->udp_buff, cb, cb_arg, ports->socket);
+ }
if(!cp) {
log_err("can't create commpoint");
listen_delete(front);
return NULL;
}
- if(http_notls && ports->ftype == listen_type_http)
+ if((http_notls && ports->ftype == listen_type_http) ||
+ (ports->ftype == listen_type_tcp) ||
+ (ports->ftype == listen_type_udp) ||
+ (ports->ftype == listen_type_udpancil) ||
+ (ports->ftype == listen_type_tcp_dnscrypt) ||
+ (ports->ftype == listen_type_udp_dnscrypt) ||
+ (ports->ftype == listen_type_udpancil_dnscrypt))
cp->ssl = NULL;
else
cp->ssl = sslctx;
@@ -1709,6 +1717,63 @@ listening_ports_open(struct config_file* cfg, char** ifs, int num_ifs,
}
/* create ip4 and ip6 ports so that return addresses are nice. */
if(do_auto || num_ifs == 0) {
+ if(do_auto && cfg->if_automatic_ports &&
+ cfg->if_automatic_ports[0]!=0) {
+ char* now = cfg->if_automatic_ports;
+ while(now && *now) {
+ char* after;
+ int extraport;
+ while(isspace((unsigned char)*now))
+ now++;
+ if(!*now)
+ break;
+ after = now;
+ extraport = (int)strtol(now, &after, 10);
+ if(extraport < 0 || extraport > 65535) {
+ log_err("interface-automatic-ports port number out of range, at position %d of '%s'", (int)(now-cfg->if_automatic_ports)+1, cfg->if_automatic_ports);
+ listening_ports_free(list);
+ return NULL;
+ }
+ if(extraport == 0 && now == after) {
+ log_err("interface-automatic-ports could not be parsed, at position %d of '%s'", (int)(now-cfg->if_automatic_ports)+1, cfg->if_automatic_ports);
+ listening_ports_free(list);
+ return NULL;
+ }
+ now = after;
+ snprintf(portbuf, sizeof(portbuf), "%d", extraport);
+ if(do_ip6) {
+ hints.ai_family = AF_INET6;
+ if(!ports_create_if("::0",
+ do_auto, cfg->do_udp, do_tcp,
+ &hints, portbuf, &list,
+ cfg->so_rcvbuf, cfg->so_sndbuf,
+ cfg->ssl_port, cfg->tls_additional_port,
+ cfg->https_port, reuseport, cfg->ip_transparent,
+ cfg->tcp_mss, cfg->ip_freebind,
+ cfg->http_nodelay, cfg->use_systemd,
+ cfg->dnscrypt_port, cfg->ip_dscp)) {
+ listening_ports_free(list);
+ return NULL;
+ }
+ }
+ if(do_ip4) {
+ hints.ai_family = AF_INET;
+ if(!ports_create_if("0.0.0.0",
+ do_auto, cfg->do_udp, do_tcp,
+ &hints, portbuf, &list,
+ cfg->so_rcvbuf, cfg->so_sndbuf,
+ cfg->ssl_port, cfg->tls_additional_port,
+ cfg->https_port, reuseport, cfg->ip_transparent,
+ cfg->tcp_mss, cfg->ip_freebind,
+ cfg->http_nodelay, cfg->use_systemd,
+ cfg->dnscrypt_port, cfg->ip_dscp)) {
+ listening_ports_free(list);
+ return NULL;
+ }
+ }
+ }
+ return list;
+ }
if(do_ip6) {
hints.ai_family = AF_INET6;
if(!ports_create_if(do_auto?"::0":"::1",
diff --git a/services/localzone.c b/services/localzone.c
index 3e3a71aea3c5..3ed7d835d33e 100644
--- a/services/localzone.c
+++ b/services/localzone.c
@@ -1328,7 +1328,8 @@ local_encode(struct query_info* qinfo, struct module_env* env,
static void
local_error_encode(struct query_info* qinfo, struct module_env* env,
struct edns_data* edns, struct comm_reply* repinfo, sldns_buffer* buf,
- struct regional* temp, int rcode, int r)
+ struct regional* temp, int rcode, int r, int ede_code,
+ const char* ede_txt)
{
edns->edns_version = EDNS_ADVERTISED_VERSION;
edns->udp_size = EDNS_ADVERTISED_SIZE;
@@ -1338,6 +1339,12 @@ local_error_encode(struct query_info* qinfo, struct module_env* env,
if(!inplace_cb_reply_local_call(env, qinfo, NULL, NULL,
rcode, edns, repinfo, temp, env->now_tv))
edns->opt_list_inplace_cb_out = NULL;
+
+ if(ede_code != LDNS_EDE_NONE && env->cfg->ede) {
+ edns_opt_list_append_ede(&edns->opt_list_out, temp,
+ ede_code, ede_txt);
+ }
+
error_encode(buf, r, qinfo, *(uint16_t*)sldns_buffer_begin(buf),
sldns_buffer_read_u16_at(buf, 2), edns);
}
@@ -1535,7 +1542,9 @@ local_data_answer(struct local_zone* z, struct module_env* env,
qinfo->local_alias = NULL;
local_error_encode(qinfo, env, edns, repinfo,
buf, temp, LDNS_RCODE_YXDOMAIN,
- (LDNS_RCODE_YXDOMAIN|BIT_AA));
+ (LDNS_RCODE_YXDOMAIN|BIT_AA),
+ LDNS_EDE_OTHER,
+ "DNAME expansion became too large");
return 1;
}
memset(&qinfo->local_alias->rrset->entry, 0,
@@ -1638,7 +1647,8 @@ local_zones_zone_answer(struct local_zone* z, struct module_env* env,
} else if(lz_type == local_zone_refuse
|| lz_type == local_zone_always_refuse) {
local_error_encode(qinfo, env, edns, repinfo, buf, temp,
- LDNS_RCODE_REFUSED, (LDNS_RCODE_REFUSED|BIT_AA));
+ LDNS_RCODE_REFUSED, (LDNS_RCODE_REFUSED|BIT_AA),
+ LDNS_EDE_NONE, NULL);
return 1;
} else if(lz_type == local_zone_static ||
lz_type == local_zone_redirect ||
@@ -1663,8 +1673,8 @@ local_zones_zone_answer(struct local_zone* z, struct module_env* env,
if(z != NULL && z->soa && z->soa_negative)
return local_encode(qinfo, env, edns, repinfo, buf, temp,
z->soa_negative, 0, rcode);
- local_error_encode(qinfo, env, edns, repinfo, buf, temp, rcode,
- (rcode|BIT_AA));
+ local_error_encode(qinfo, env, edns, repinfo, buf, temp,
+ rcode, (rcode|BIT_AA), LDNS_EDE_NONE, NULL);
return 1;
} else if(lz_type == local_zone_typetransparent
|| lz_type == local_zone_always_transparent) {
@@ -1705,9 +1715,10 @@ local_zones_zone_answer(struct local_zone* z, struct module_env* env,
return local_encode(qinfo, env, edns, repinfo, buf, temp,
&lrr, 1, LDNS_RCODE_NOERROR);
} else {
+ /* NODATA: No EDE needed */
local_error_encode(qinfo, env, edns, repinfo, buf,
temp, LDNS_RCODE_NOERROR,
- (LDNS_RCODE_NOERROR|BIT_AA));
+ (LDNS_RCODE_NOERROR|BIT_AA), -1, NULL);
}
return 1;
}
@@ -1720,8 +1731,9 @@ local_zones_zone_answer(struct local_zone* z, struct module_env* env,
if(z != NULL && z->soa && z->soa_negative)
return local_encode(qinfo, env, edns, repinfo, buf, temp,
z->soa_negative, 0, rcode);
+ /* NODATA: No EDE needed */
local_error_encode(qinfo, env, edns, repinfo, buf, temp, rcode,
- (rcode|BIT_AA));
+ (rcode|BIT_AA), LDNS_EDE_NONE, NULL);
return 1;
}
diff --git a/services/mesh.c b/services/mesh.c
index cdcfedda270c..fbaa966bdd05 100644
--- a/services/mesh.c
+++ b/services/mesh.c
@@ -64,6 +64,11 @@
#include "respip/respip.h"
#include "services/listen_dnsport.h"
+#ifdef CLIENT_SUBNET
+#include "edns-subnet/subnetmod.h"
+#include "edns-subnet/edns-subnet.h"
+#endif
+
/** subtract timers and the values do not overflow or become negative */
static void
timeval_subtract(struct timeval* d, const struct timeval* end, const struct timeval* start)
@@ -458,7 +463,8 @@ mesh_serve_expired_init(struct mesh_state* mstate, int timeout)
void mesh_new_client(struct mesh_area* mesh, struct query_info* qinfo,
struct respip_client_info* cinfo, uint16_t qflags,
- struct edns_data* edns, struct comm_reply* rep, uint16_t qid)
+ struct edns_data* edns, struct comm_reply* rep, uint16_t qid,
+ int rpz_passthru)
{
struct mesh_state* s = NULL;
int unique = unique_mesh_state(edns->opt_list_in, mesh->env);
@@ -513,6 +519,7 @@ void mesh_new_client(struct mesh_area* mesh, struct query_info* qinfo,
}
if(unique)
mesh_state_make_unique(s);
+ s->s.rpz_passthru = rpz_passthru;
/* copy the edns options we got from the front */
if(edns->opt_list_in) {
s->s.edns_opts_front_in = edns_opt_copy_region(edns->opt_list_in,
@@ -606,7 +613,7 @@ servfail_mem:
int
mesh_new_callback(struct mesh_area* mesh, struct query_info* qinfo,
uint16_t qflags, struct edns_data* edns, sldns_buffer* buf,
- uint16_t qid, mesh_cb_func_type cb, void* cb_arg)
+ uint16_t qid, mesh_cb_func_type cb, void* cb_arg, int rpz_passthru)
{
struct mesh_state* s = NULL;
int unique = unique_mesh_state(edns->opt_list_in, mesh->env);
@@ -632,6 +639,7 @@ mesh_new_callback(struct mesh_area* mesh, struct query_info* qinfo,
}
if(unique)
mesh_state_make_unique(s);
+ s->s.rpz_passthru = rpz_passthru;
if(edns->opt_list_in) {
s->s.edns_opts_front_in = edns_opt_copy_region(edns->opt_list_in,
s->s.region);
@@ -686,7 +694,8 @@ mesh_new_callback(struct mesh_area* mesh, struct query_info* qinfo,
* 0 (false), in which case the new state is only made runnable so it
* will not be run recursively on top of the current state. */
static void mesh_schedule_prefetch(struct mesh_area* mesh,
- struct query_info* qinfo, uint16_t qflags, time_t leeway, int run)
+ struct query_info* qinfo, uint16_t qflags, time_t leeway, int run,
+ int rpz_passthru)
{
struct mesh_state* s = mesh_area_find(mesh, NULL, qinfo,
qflags&(BIT_RD|BIT_CD), 0, 0);
@@ -732,15 +741,109 @@ static void mesh_schedule_prefetch(struct mesh_area* mesh,
/* move to either the forever or the jostle_list */
if(mesh->num_forever_states < mesh->max_forever_states) {
mesh->num_forever_states ++;
- mesh_list_insert(s, &mesh->forever_first,
+ mesh_list_insert(s, &mesh->forever_first,
&mesh->forever_last);
s->list_select = mesh_forever_list;
} else {
- mesh_list_insert(s, &mesh->jostle_first,
+ mesh_list_insert(s, &mesh->jostle_first,
+ &mesh->jostle_last);
+ s->list_select = mesh_jostle_list;
+ }
+ }
+ s->s.rpz_passthru = rpz_passthru;
+
+ if(!run) {
+#ifdef UNBOUND_DEBUG
+ n =
+#else
+ (void)
+#endif
+ rbtree_insert(&mesh->run, &s->run_node);
+ log_assert(n != NULL);
+ return;
+ }
+
+ mesh_run(mesh, s, module_event_new, NULL);
+}
+
+#ifdef CLIENT_SUBNET
+/* Same logic as mesh_schedule_prefetch but tailored to the subnet module logic
+ * like passing along the comm_reply info. This will be faked into an EDNS
+ * option for processing by the subnet module if the client has not already
+ * attached its own ECS data. */
+static void mesh_schedule_prefetch_subnet(struct mesh_area* mesh,
+ struct query_info* qinfo, uint16_t qflags, time_t leeway, int run,
+ int rpz_passthru, struct comm_reply* rep, struct edns_option* edns_list)
+{
+ struct mesh_state* s = NULL;
+ struct edns_option* opt = NULL;
+#ifdef UNBOUND_DEBUG
+ struct rbnode_type* n;
+#endif
+ if(!mesh_make_new_space(mesh, NULL)) {
+ verbose(VERB_ALGO, "Too many queries. dropped prefetch.");
+ mesh->stats_dropped ++;
+ return;
+ }
+
+ s = mesh_state_create(mesh->env, qinfo, NULL,
+ qflags&(BIT_RD|BIT_CD), 0, 0);
+ if(!s) {
+ log_err("prefetch_subnet mesh_state_create: out of memory");
+ return;
+ }
+ mesh_state_make_unique(s);
+
+ opt = edns_opt_list_find(edns_list, mesh->env->cfg->client_subnet_opcode);
+ if(opt) {
+ /* Use the client's ECS data */
+ if(!edns_opt_list_append(&s->s.edns_opts_front_in, opt->opt_code,
+ opt->opt_len, opt->opt_data, s->s.region)) {
+ log_err("prefetch_subnet edns_opt_list_append: out of memory");
+ return;
+ }
+ } else {
+ /* Fake the ECS data from the client's IP */
+ struct ecs_data ecs;
+ memset(&ecs, 0, sizeof(ecs));
+ subnet_option_from_ss(&rep->addr, &ecs, mesh->env->cfg);
+ if(ecs.subnet_validdata == 0) {
+ log_err("prefetch_subnet subnet_option_from_ss: invalid data");
+ return;
+ }
+ subnet_ecs_opt_list_append(&ecs, &s->s.edns_opts_front_in, &s->s);
+ if(!s->s.edns_opts_front_in) {
+ log_err("prefetch_subnet subnet_ecs_opt_list_append: out of memory");
+ return;
+ }
+ }
+#ifdef UNBOUND_DEBUG
+ n =
+#else
+ (void)
+#endif
+ rbtree_insert(&mesh->all, &s->node);
+ log_assert(n != NULL);
+ /* set detached (it is now) */
+ mesh->num_detached_states++;
+ /* make it ignore the cache */
+ sock_list_insert(&s->s.blacklist, NULL, 0, s->s.region);
+ s->s.prefetch_leeway = leeway;
+
+ if(s->list_select == mesh_no_list) {
+ /* move to either the forever or the jostle_list */
+ if(mesh->num_forever_states < mesh->max_forever_states) {
+ mesh->num_forever_states ++;
+ mesh_list_insert(s, &mesh->forever_first,
+ &mesh->forever_last);
+ s->list_select = mesh_forever_list;
+ } else {
+ mesh_list_insert(s, &mesh->jostle_first,
&mesh->jostle_last);
s->list_select = mesh_jostle_list;
}
}
+ s->s.rpz_passthru = rpz_passthru;
if(!run) {
#ifdef UNBOUND_DEBUG
@@ -755,11 +858,22 @@ static void mesh_schedule_prefetch(struct mesh_area* mesh,
mesh_run(mesh, s, module_event_new, NULL);
}
+#endif /* CLIENT_SUBNET */
void mesh_new_prefetch(struct mesh_area* mesh, struct query_info* qinfo,
- uint16_t qflags, time_t leeway)
+ uint16_t qflags, time_t leeway, int rpz_passthru,
+ struct comm_reply* rep, struct edns_option* opt_list)
{
- mesh_schedule_prefetch(mesh, qinfo, qflags, leeway, 1);
+ (void)opt_list;
+ (void)rep;
+#ifdef CLIENT_SUBNET
+ if(rep)
+ mesh_schedule_prefetch_subnet(mesh, qinfo, qflags, leeway, 1,
+ rpz_passthru, rep, opt_list);
+ else
+#endif
+ mesh_schedule_prefetch(mesh, qinfo, qflags, leeway, 1,
+ rpz_passthru);
}
void mesh_report_reply(struct mesh_area* mesh, struct outbound_entry* e,
@@ -1234,7 +1348,7 @@ mesh_send_reply(struct mesh_state* m, int rcode, struct reply_info* rep,
(rep->security <= sec_status_bogus ||
rep->security == sec_status_secure_sentinel_fail)) {
rcode = LDNS_RCODE_SERVFAIL;
- if(m->s.env->cfg->stat_extended)
+ if(m->s.env->cfg->stat_extended)
m->s.env->mesh->ans_bogus++;
}
if(rep && rep->security == sec_status_secure)
@@ -1290,6 +1404,36 @@ mesh_send_reply(struct mesh_state* m, int rcode, struct reply_info* rep,
&r->edns, &r->query_reply, m->s.region, &r->start_time))
r->edns.opt_list_inplace_cb_out = NULL;
}
+ /* Send along EDE BOGUS EDNS0 option when answer is bogus */
+ if(m->s.env->cfg->ede && rcode == LDNS_RCODE_SERVFAIL &&
+ m->s.env->need_to_validate && (!(r->qflags&BIT_CD) ||
+ m->s.env->cfg->ignore_cd) && rep &&
+ (rep->security <= sec_status_bogus ||
+ rep->security == sec_status_secure_sentinel_fail)) {
+ char *reason = m->s.env->cfg->val_log_level >= 2
+ ? errinf_to_str_bogus(&m->s) : NULL;
+
+ /* During validation the EDE code can be received via two
+ * code paths. One code path fills the reply_info EDE, and
+ * the other fills it in the errinf_strlist. These paths
+ * intersect at some points, but where is opaque due to
+ * the complexity of the validator. At the time of writing
+ * we make the choice to prefer the EDE from errinf_strlist
+ * but a compelling reason to do otherwise is just as valid
+ */
+ sldns_ede_code reason_bogus = errinf_to_reason_bogus(&m->s);
+ if ((reason_bogus == LDNS_EDE_DNSSEC_BOGUS &&
+ rep->reason_bogus != LDNS_EDE_NONE) ||
+ reason_bogus == LDNS_EDE_NONE) {
+ reason_bogus = rep->reason_bogus;
+ }
+
+ if(reason_bogus != LDNS_EDE_NONE) {
+ edns_opt_list_append_ede(&r->edns.opt_list_out,
+ m->s.region, reason_bogus, reason);
+ }
+ free(reason);
+ }
error_encode(r_buffer, rcode, &m->s.qinfo, r->qid,
r->qflags, &r->edns);
m->reply_list = NULL;
@@ -1313,6 +1457,8 @@ mesh_send_reply(struct mesh_state* m, int rcode, struct reply_info* rep,
if(!inplace_cb_reply_servfail_call(m->s.env, &m->s.qinfo, &m->s,
rep, LDNS_RCODE_SERVFAIL, &r->edns, &r->query_reply, m->s.region, &r->start_time))
r->edns.opt_list_inplace_cb_out = NULL;
+ /* internal server error (probably malloc failure) so no
+ * EDE (RFC8914) needed */
error_encode(r_buffer, LDNS_RCODE_SERVFAIL,
&m->s.qinfo, r->qid, r->qflags, &r->edns);
}
@@ -1524,7 +1670,7 @@ int mesh_state_add_reply(struct mesh_state* s, struct edns_data* edns,
struct comm_reply* rep, uint16_t qid, uint16_t qflags,
const struct query_info* qinfo)
{
- struct mesh_reply* r = regional_alloc(s->s.region,
+ struct mesh_reply* r = regional_alloc(s->s.region,
sizeof(struct mesh_reply));
if(!r)
return 0;
@@ -1693,6 +1839,7 @@ mesh_continue(struct mesh_area* mesh, struct mesh_state* mstate,
if(mstate->s.curmod == 0) {
struct query_info* qinfo = NULL;
uint16_t qflags;
+ int rpz_p = 0;
mesh_query_done(mstate);
mesh_walk_supers(mesh, mstate);
@@ -1701,13 +1848,15 @@ mesh_continue(struct mesh_area* mesh, struct mesh_state* mstate,
* from an external DNS server, we'll need to schedule
* a prefetch after removing the current state, so
* we need to make a copy of the query info here. */
- if(mstate->s.need_refetch)
+ if(mstate->s.need_refetch) {
mesh_copy_qinfo(mstate, &qinfo, &qflags);
+ rpz_p = mstate->s.rpz_passthru;
+ }
mesh_state_delete(&mstate->s);
if(qinfo) {
mesh_schedule_prefetch(mesh, qinfo, qflags,
- 0, 1);
+ 0, 1, rpz_p);
}
return 0;
}
@@ -1917,7 +2066,7 @@ apply_respip_action(struct module_qstate* qstate,
return 1;
if(!respip_rewrite_reply(qinfo, cinfo, rep, encode_repp, actinfo,
- alias_rrset, 0, qstate->region, az))
+ alias_rrset, 0, qstate->region, az, NULL))
return 0;
/* xxx_deny actions mean dropping the reply, unless the original reply
@@ -2042,6 +2191,14 @@ mesh_serve_expired_callback(void* arg)
}
}
+ /* Add EDE Stale Answer (RCF8914). Ignore global ede as this is
+ * warning instead of an error */
+ if (r->edns.edns_present && qstate->env->cfg->ede_serve_expired &&
+ qstate->env->cfg->ede) {
+ edns_opt_list_append_ede(&r->edns.opt_list_out,
+ mstate->s.region, LDNS_EDE_STALE_ANSWER, NULL);
+ }
+
r_buffer = r->query_reply.c->buffer;
if(r->query_reply.c->tcp_req_info)
r_buffer = r->query_reply.c->tcp_req_info->spool_buffer;
diff --git a/services/mesh.h b/services/mesh.h
index d0a4b5fb3d0d..3be9b63faedd 100644
--- a/services/mesh.h
+++ b/services/mesh.h
@@ -296,10 +296,13 @@ void mesh_delete(struct mesh_area* mesh);
* @param edns: edns data from client query.
* @param rep: where to reply to.
* @param qid: query id to reply with.
+ * @param rpz_passthru: if true, the rpz passthru was previously found and
+ * further rpz processing is stopped.
*/
void mesh_new_client(struct mesh_area* mesh, struct query_info* qinfo,
struct respip_client_info* cinfo, uint16_t qflags,
- struct edns_data* edns, struct comm_reply* rep, uint16_t qid);
+ struct edns_data* edns, struct comm_reply* rep, uint16_t qid,
+ int rpz_passthru);
/**
* New query with callback. Create new query state if needed, and
@@ -314,11 +317,13 @@ void mesh_new_client(struct mesh_area* mesh, struct query_info* qinfo,
* @param qid: query id to reply with.
* @param cb: callback function.
* @param cb_arg: callback user arg.
+ * @param rpz_passthru: if true, the rpz passthru was previously found and
+ * further rpz processing is stopped.
* @return 0 on error.
*/
int mesh_new_callback(struct mesh_area* mesh, struct query_info* qinfo,
uint16_t qflags, struct edns_data* edns, struct sldns_buffer* buf,
- uint16_t qid, mesh_cb_func_type cb, void* cb_arg);
+ uint16_t qid, mesh_cb_func_type cb, void* cb_arg, int rpz_passthru);
/**
* New prefetch message. Create new query state if needed.
@@ -328,9 +333,15 @@ int mesh_new_callback(struct mesh_area* mesh, struct query_info* qinfo,
* @param qinfo: query from client.
* @param qflags: flags from client query.
* @param leeway: TTL leeway what to expire earlier for this update.
+ * @param rpz_passthru: if true, the rpz passthru was previously found and
+ * further rpz processing is stopped.
+ * @param rep: comm_reply for the client; to be used when subnet is enabled.
+ * @param opt_list: edns opt_list from the client; to be used when subnet is
+ * enabled.
*/
void mesh_new_prefetch(struct mesh_area* mesh, struct query_info* qinfo,
- uint16_t qflags, time_t leeway);
+ uint16_t qflags, time_t leeway, int rpz_passthru,
+ struct comm_reply* rep, struct edns_option* opt_list);
/**
* Handle new event from the wire. A serviced query has returned.
diff --git a/services/outside_network.c b/services/outside_network.c
index a7e5fa3ad583..ec37a4a80d71 100644
--- a/services/outside_network.c
+++ b/services/outside_network.c
@@ -1995,6 +1995,9 @@ static int udp_connect_needs_log(int err)
# ifdef ENETDOWN
case ENETDOWN:
# endif
+# ifdef EADDRNOTAVAIL
+ case EADDRNOTAVAIL:
+# endif
case EPERM:
case EACCES:
if(verbosity >= VERB_ALGO)
@@ -2294,7 +2297,7 @@ reuse_tcp_select_id(struct reuse_tcp* reuse, struct outside_network* outnet)
node = rbtree_first(&reuse->tree_by_id);
log_assert(node && node != RBTREE_NULL); /* tree not empty */
/* see if select is before first node */
- if(select < tree_by_id_get_id(node))
+ if(select < (unsigned)tree_by_id_get_id(node))
return select;
count += tree_by_id_get_id(node);
/* perhaps select is between nodes */
diff --git a/services/rpz.c b/services/rpz.c
index 322e9d1393c4..77b6266fecb9 100644
--- a/services/rpz.c
+++ b/services/rpz.c
@@ -526,13 +526,13 @@ rpz_create(struct config_auth* p)
size_t nmlen = sizeof(nm);
if(!p->rpz_cname) {
- log_err("RPZ override with cname action found, but no "
+ log_err("rpz: override with cname action found, but no "
"rpz-cname-override configured");
goto err;
}
if(sldns_str2wire_dname_buf(p->rpz_cname, nm, &nmlen) != 0) {
- log_err("cannot parse RPZ cname override: %s",
+ log_err("rpz: cannot parse cname override: %s",
p->rpz_cname);
goto err;
}
@@ -614,7 +614,7 @@ rpz_insert_local_zones_trigger(struct local_zones* lz, uint8_t* dname,
return; /* no need to log these types as unsupported */
}
dname_str(dname, str);
- verbose(VERB_ALGO, "RPZ: qname trigger, %s skipping unsupported action: %s",
+ verbose(VERB_ALGO, "rpz: qname trigger, %s skipping unsupported action: %s",
str, rpz_action_to_string(a));
free(dname);
return;
@@ -999,7 +999,7 @@ rpz_insert_response_ip_trigger(struct rpz* r, uint8_t* dname, size_t dnamelen,
rpz_action_to_respip_action(a) == respip_invalid) {
char str[255+1];
dname_str(dname, str);
- verbose(VERB_ALGO, "RPZ: respip trigger, %s skipping unsupported action: %s",
+ verbose(VERB_ALGO, "rpz: respip trigger, %s skipping unsupported action: %s",
str, rpz_action_to_string(a));
return 0;
}
@@ -1560,7 +1560,9 @@ rpz_local_encode(struct module_env* env, struct query_info* qinfo,
}
static struct local_rrset*
-rpz_find_synthesized_rrset(int qtype, struct clientip_synthesized_rr* data) {
+rpz_find_synthesized_rrset(uint16_t qtype,
+ struct clientip_synthesized_rr* data)
+{
struct local_rrset* cursor = data->data;
while( cursor != NULL) {
struct packed_rrset_key* packed_rrset = &cursor->rrset->rk;
@@ -1997,6 +1999,7 @@ rpz_apply_nsip_trigger(struct module_qstate* ms, struct rpz* r,
break;
case RPZ_PASSTHRU_ACTION:
ret = NULL;
+ ms->rpz_passthru = 1;
break;
default:
verbose(VERB_ALGO, "rpz: nsip: bug: unhandled or invalid action: '%s'",
@@ -2051,6 +2054,7 @@ rpz_apply_nsdname_trigger(struct module_qstate* ms, struct rpz* r,
break;
case RPZ_PASSTHRU_ACTION:
ret = NULL;
+ ms->rpz_passthru = 1;
break;
default:
verbose(VERB_ALGO, "rpz: nsip: bug: unhandled or invalid action: '%s'",
@@ -2114,6 +2118,11 @@ rpz_callback_from_iterator_module(struct module_qstate* ms, struct iter_qstate*
struct local_zone* z = NULL;
struct matched_delegation_point match = {0};
+ if(ms->rpz_passthru) {
+ verbose(VERB_ALGO, "query is rpz_passthru, no further processing");
+ return NULL;
+ }
+
if(ms->env == NULL || ms->env->auth_zones == NULL) { return 0; }
az = ms->env->auth_zones;
@@ -2179,6 +2188,11 @@ struct dns_msg* rpz_callback_from_iterator_cname(struct module_qstate* ms,
enum localzone_type lzt;
struct dns_msg* ret = NULL;
+ if(ms->rpz_passthru) {
+ verbose(VERB_ALGO, "query is rpz_passthru, no further processing");
+ return NULL;
+ }
+
if(ms->env == NULL || ms->env->auth_zones == NULL) { return 0; }
az = ms->env->auth_zones;
@@ -2253,6 +2267,7 @@ struct dns_msg* rpz_callback_from_iterator_cname(struct module_qstate* ms,
break;
case RPZ_PASSTHRU_ACTION:
ret = NULL;
+ ms->rpz_passthru = 1;
break;
default:
verbose(VERB_ALGO, "rpz: qname trigger after cname: bug: unhandled or invalid action: '%s'",
@@ -2270,7 +2285,8 @@ rpz_apply_maybe_clientip_trigger(struct auth_zones* az, struct module_env* env,
uint8_t* taglist, size_t taglen, struct ub_server_stats* stats,
sldns_buffer* buf, struct regional* temp,
/* output parameters */
- struct local_zone** z_out, struct auth_zone** a_out, struct rpz** r_out)
+ struct local_zone** z_out, struct auth_zone** a_out, struct rpz** r_out,
+ int* passthru)
{
int ret = 0;
enum rpz_action client_action;
@@ -2278,7 +2294,9 @@ rpz_apply_maybe_clientip_trigger(struct auth_zones* az, struct module_env* env,
az, qinfo, repinfo, taglist, taglen, stats, z_out, a_out, r_out);
client_action = ((node == NULL) ? RPZ_INVALID_ACTION : node->action);
-
+ if(client_action == RPZ_PASSTHRU_ACTION) {
+ *passthru = 1;
+ }
if(*z_out == NULL || (client_action != RPZ_INVALID_ACTION &&
client_action != RPZ_PASSTHRU_ACTION)) {
if(client_action == RPZ_PASSTHRU_ACTION
@@ -2323,7 +2341,7 @@ int
rpz_callback_from_worker_request(struct auth_zones* az, struct module_env* env,
struct query_info* qinfo, struct edns_data* edns, sldns_buffer* buf,
struct regional* temp, struct comm_reply* repinfo, uint8_t* taglist,
- size_t taglen, struct ub_server_stats* stats)
+ size_t taglen, struct ub_server_stats* stats, int* passthru)
{
struct rpz* r = NULL;
struct auth_zone* a = NULL;
@@ -2332,7 +2350,8 @@ rpz_callback_from_worker_request(struct auth_zones* az, struct module_env* env,
enum localzone_type lzt;
int clientip_trigger = rpz_apply_maybe_clientip_trigger(az, env, qinfo,
- edns, repinfo, taglist, taglen, stats, buf, temp, &z, &a, &r);
+ edns, repinfo, taglist, taglen, stats, buf, temp, &z, &a, &r,
+ passthru);
if(clientip_trigger >= 0) {
if(a) {
lock_rw_unlock(&a->lock);
@@ -2357,6 +2376,10 @@ rpz_callback_from_worker_request(struct auth_zones* az, struct module_env* env,
} else {
lzt = rpz_action_to_localzone_type(r->action_override);
}
+ if(r->action_override == RPZ_PASSTHRU_ACTION ||
+ lzt == local_zone_always_transparent /* RPZ_PASSTHRU_ACTION */) {
+ *passthru = 1;
+ }
if(verbosity >= VERB_ALGO) {
char nm[255+1], zn[255+1];
diff --git a/services/rpz.h b/services/rpz.h
index c29d30dff506..53781197aeec 100644
--- a/services/rpz.h
+++ b/services/rpz.h
@@ -176,12 +176,14 @@ void rpz_remove_rr(struct rpz* r, size_t aznamelen, uint8_t* dname,
* @param taglist: taglist to lookup.
* @param taglen: length of taglist.
* @param stats: worker stats struct
+ * @param passthru: returns if the query can passthru further rpz processing.
* @return: 1 if client answer is ready, 0 to continue resolving
*/
int rpz_callback_from_worker_request(struct auth_zones* az, struct module_env* env,
struct query_info* qinfo, struct edns_data* edns, sldns_buffer* buf,
struct regional* temp, struct comm_reply* repinfo,
- uint8_t* taglist, size_t taglen, struct ub_server_stats* stats);
+ uint8_t* taglist, size_t taglen, struct ub_server_stats* stats,
+ int* passthru);
/**
* Callback to process when the iterator module is about to send queries.
diff --git a/sldns/parseutil.c b/sldns/parseutil.c
index ba71df55d501..dd1f33484663 100644
--- a/sldns/parseutil.c
+++ b/sldns/parseutil.c
@@ -209,11 +209,13 @@ sldns_hexdigit_to_int(char ch)
}
uint32_t
-sldns_str2period(const char *nptr, const char **endptr)
+sldns_str2period(const char *nptr, const char **endptr, int* overflow)
{
int sign = 0;
uint32_t i = 0;
uint32_t seconds = 0;
+ const uint32_t maxint = 0xffffffff;
+ *overflow = 0;
for(*endptr = nptr; **endptr; (*endptr)++) {
switch (**endptr) {
@@ -236,26 +238,46 @@ sldns_str2period(const char *nptr, const char **endptr)
break;
case 's':
case 'S':
+ if(seconds > maxint-i) {
+ *overflow = 1;
+ return 0;
+ }
seconds += i;
i = 0;
break;
case 'm':
case 'M':
+ if(i > maxint/60 || seconds > maxint-(i*60)) {
+ *overflow = 1;
+ return 0;
+ }
seconds += i * 60;
i = 0;
break;
case 'h':
case 'H':
+ if(i > maxint/(60*60) || seconds > maxint-(i*60*60)) {
+ *overflow = 1;
+ return 0;
+ }
seconds += i * 60 * 60;
i = 0;
break;
case 'd':
case 'D':
+ if(i > maxint/(60*60*24) || seconds > maxint-(i*60*60*24)) {
+ *overflow = 1;
+ return 0;
+ }
seconds += i * 60 * 60 * 24;
i = 0;
break;
case 'w':
case 'W':
+ if(i > maxint/(60*60*24*7) || seconds > maxint-(i*60*60*24*7)) {
+ *overflow = 1;
+ return 0;
+ }
seconds += i * 60 * 60 * 24 * 7;
i = 0;
break;
@@ -269,15 +291,27 @@ sldns_str2period(const char *nptr, const char **endptr)
case '7':
case '8':
case '9':
+ if(i > maxint/10 || i*10 > maxint - (**endptr - '0')) {
+ *overflow = 1;
+ return 0;
+ }
i *= 10;
i += (**endptr - '0');
break;
default:
+ if(seconds > maxint-i) {
+ *overflow = 1;
+ return 0;
+ }
seconds += i;
/* disregard signedness */
return seconds;
}
}
+ if(seconds > maxint-i) {
+ *overflow = 1;
+ return 0;
+ }
seconds += i;
/* disregard signedness */
return seconds;
diff --git a/sldns/parseutil.h b/sldns/parseutil.h
index 208fd2fbca8b..683f34e23070 100644
--- a/sldns/parseutil.h
+++ b/sldns/parseutil.h
@@ -74,9 +74,11 @@ struct tm * sldns_serial_arithmetics_gmtime_r(int32_t time, time_t now, struct t
* converts a ttl value (like 5d2h) to a long.
* \param[in] nptr the start of the string
* \param[out] endptr points to the last char in case of error
+ * \param[out] overflow returns if the string causes integer overflow error,
+ * the number is too big, string of digits too long.
* \return the convert duration value
*/
-uint32_t sldns_str2period(const char *nptr, const char **endptr);
+uint32_t sldns_str2period(const char *nptr, const char **endptr, int* overflow);
/**
* Returns the int value of the given (hex) digit
diff --git a/sldns/pkthdr.h b/sldns/pkthdr.h
index de9952ea71f8..c32e7d285567 100644
--- a/sldns/pkthdr.h
+++ b/sldns/pkthdr.h
@@ -97,18 +97,22 @@ extern "C" {
#define QDCOUNT(wirebuf) (ntohs(*(uint16_t *)(wirebuf+QDCOUNT_OFF)))
*/
#define LDNS_QDCOUNT(wirebuf) (sldns_read_uint16(wirebuf+LDNS_QDCOUNT_OFF))
+#define LDNS_QDCOUNT_SET(wirebuf, i) (sldns_write_uint16(wirebuf+LDNS_QDCOUNT_OFF, i))
/* Counter of the answer section */
#define LDNS_ANCOUNT_OFF 6
#define LDNS_ANCOUNT(wirebuf) (sldns_read_uint16(wirebuf+LDNS_ANCOUNT_OFF))
+#define LDNS_ANCOUNT_SET(wirebuf, i) (sldns_write_uint16(wirebuf+LDNS_ANCOUNT_OFF, i))
/* Counter of the authority section */
#define LDNS_NSCOUNT_OFF 8
#define LDNS_NSCOUNT(wirebuf) (sldns_read_uint16(wirebuf+LDNS_NSCOUNT_OFF))
+#define LDNS_NSCOUNT_SET(wirebuf, i) (sldns_write_uint16(wirebuf+LDNS_NSCOUNT_OFF, i))
/* Counter of the additional section */
#define LDNS_ARCOUNT_OFF 10
#define LDNS_ARCOUNT(wirebuf) (sldns_read_uint16(wirebuf+LDNS_ARCOUNT_OFF))
+#define LDNS_ARCOUNT_SET(wirebuf, i) (sldns_write_uint16(wirebuf+LDNS_ARCOUNT_OFF, i))
/**
* The sections of a packet
diff --git a/sldns/rrdef.h b/sldns/rrdef.h
index 42d5de064eea..999c223074e1 100644
--- a/sldns/rrdef.h
+++ b/sldns/rrdef.h
@@ -435,10 +435,42 @@ enum sldns_enum_edns_option
LDNS_EDNS_CLIENT_SUBNET = 8, /* RFC7871 */
LDNS_EDNS_KEEPALIVE = 11, /* draft-ietf-dnsop-edns-tcp-keepalive*/
LDNS_EDNS_PADDING = 12, /* RFC7830 */
+ LDNS_EDNS_EDE = 15, /* RFC8914 */
LDNS_EDNS_CLIENT_TAG = 16 /* draft-bellis-dnsop-edns-tags-01 */
};
typedef enum sldns_enum_edns_option sldns_edns_option;
+enum sldns_enum_ede_code
+{
+ LDNS_EDE_NONE = -1, /* EDE undefined for internal use */
+ LDNS_EDE_OTHER = 0,
+ LDNS_EDE_UNSUPPORTED_DNSKEY_ALG = 1,
+ LDNS_EDE_UNSUPPORTED_DS_DIGEST = 2,
+ LDNS_EDE_STALE_ANSWER = 3,
+ LDNS_EDE_FORGED_ANSWER = 4,
+ LDNS_EDE_DNSSEC_INDETERMINATE = 5,
+ LDNS_EDE_DNSSEC_BOGUS = 6,
+ LDNS_EDE_SIGNATURE_EXPIRED = 7,
+ LDNS_EDE_SIGNATURE_NOT_YET_VALID = 8,
+ LDNS_EDE_DNSKEY_MISSING = 9,
+ LDNS_EDE_RRSIGS_MISSING = 10,
+ LDNS_EDE_NO_ZONE_KEY_BIT_SET = 11,
+ LDNS_EDE_NSEC_MISSING = 12,
+ LDNS_EDE_CACHED_ERROR = 13,
+ LDNS_EDE_NOT_READY = 14,
+ LDNS_EDE_BLOCKED = 15,
+ LDNS_EDE_CENSORED = 16,
+ LDNS_EDE_FILTERED = 17,
+ LDNS_EDE_PROHIBITED = 18,
+ LDNS_EDE_STALE_NXDOMAIN_ANSWER = 19,
+ LDNS_EDE_NOT_AUTHORITATIVE = 20,
+ LDNS_EDE_NOT_SUPPORTED = 21,
+ LDNS_EDE_NO_REACHABLE_AUTHORITY = 22,
+ LDNS_EDE_NETWORK_ERROR = 23,
+ LDNS_EDE_INVALID_DATA = 24,
+};
+typedef enum sldns_enum_ede_code sldns_ede_code;
+
#define LDNS_EDNS_MASK_DO_BIT 0x8000
/** TSIG and TKEY extended rcodes (16bit), 0-15 are the normal rcodes. */
diff --git a/sldns/str2wire.c b/sldns/str2wire.c
index d2cefae1c09e..303d49ba6689 100644
--- a/sldns/str2wire.c
+++ b/sldns/str2wire.c
@@ -249,11 +249,16 @@ rrinternal_get_ttl(sldns_buffer* strbuf, char* token, size_t token_len,
int* not_there, uint32_t* ttl, uint32_t default_ttl)
{
const char* endptr;
+ int overflow;
if(sldns_bget_token(strbuf, token, "\t\n ", token_len) == -1) {
return RET_ERR(LDNS_WIREPARSE_ERR_SYNTAX_TTL,
sldns_buffer_position(strbuf));
}
- *ttl = (uint32_t) sldns_str2period(token, &endptr);
+ *ttl = (uint32_t) sldns_str2period(token, &endptr, &overflow);
+ if(overflow) {
+ return RET_ERR(LDNS_WIREPARSE_ERR_SYNTAX_INTEGER_OVERFLOW,
+ sldns_buffer_position(strbuf));
+ }
if (strlen(token) > 0 && !isdigit((unsigned char)token[0])) {
*not_there = 1;
@@ -373,7 +378,8 @@ rrinternal_get_quoted(sldns_buffer* strbuf, const char** delimiters,
/* skip spaces */
while(sldns_buffer_remaining(strbuf) > 0 &&
- *(sldns_buffer_current(strbuf)) == ' ') {
+ (*(sldns_buffer_current(strbuf)) == ' ' ||
+ *(sldns_buffer_current(strbuf)) == '\t')) {
sldns_buffer_skip(strbuf, 1);
}
@@ -606,7 +612,7 @@ sldns_affix_token(sldns_buffer* strbuf, char* token, size_t* token_len,
/* add space */
/* when addlen < 2, the token buffer is full considering the NULL byte
* from strlen and will lead to buffer overflow with the second
- * assignement below. */
+ * assignment below. */
if(addlen < 2) return 0;
token[*token_strlen] = ' ';
token[++(*token_strlen)] = 0;
@@ -670,10 +676,10 @@ static int sldns_str2wire_check_svcbparams(uint8_t* rdata, uint16_t rdata_len)
,sldns_str2wire_svcparam_key_cmp);
- /* The code below revolves around sematic errors in the SVCParam set.
+ /* The code below revolves around semantic errors in the SVCParam set.
* So long as we do not distinguish between running Unbound as a primary
* or as a secondary, we default to secondary behavior and we ignore the
- * sematic errors. */
+ * semantic errors. */
#ifdef SVCB_SEMANTIC_ERRORS
{
@@ -775,7 +781,8 @@ rrinternal_parse_rdata(sldns_buffer* strbuf, char* token, size_t token_len,
/* unknown RR data */
if(token_strlen>=2 && strncmp(token, "\\#", 2) == 0 &&
- !quoted && (token_strlen == 2 || token[2]==' ')) {
+ !quoted && (token_strlen == 2 || token[2]==' ' ||
+ token[2]=='\t')) {
was_unknown_rr_format = 1;
if((status=rrinternal_parse_unknown(strbuf, token,
token_len, rr, rr_len, &rr_cur_len,
@@ -1055,12 +1062,15 @@ int sldns_fp2wire_rr_buf(FILE* in, uint8_t* rr, size_t* len, size_t* dname_len,
return s;
} else if(strncmp(line, "$TTL", 4) == 0 && isspace((unsigned char)line[4])) {
const char* end = NULL;
+ int overflow = 0;
strlcpy((char*)rr, line, *len);
*len = 0;
*dname_len = 0;
if(!parse_state) return LDNS_WIREPARSE_ERR_OK;
parse_state->default_ttl = sldns_str2period(
- sldns_strip_ws(line+5), &end);
+ sldns_strip_ws(line+5), &end, &overflow);
+ if(overflow)
+ return LDNS_WIREPARSE_ERR_SYNTAX_INTEGER_OVERFLOW;
} else if (strncmp(line, "$INCLUDE", 8) == 0) {
strlcpy((char*)rr, line, *len);
*len = 0;
@@ -1117,7 +1127,7 @@ sldns_str2wire_svcparam_key_lookup(const char *key, size_t key_len)
if (!strncmp(key, "mandatory", sizeof("mandatory")-1))
return SVCB_KEY_MANDATORY;
if (!strncmp(key, "echconfig", sizeof("echconfig")-1))
- return SVCB_KEY_ECH; /* allow "echconfig as well as "ech" */
+ return SVCB_KEY_ECH; /* allow "echconfig" as well as "ech" */
break;
case sizeof("alpn")-1:
@@ -1356,7 +1366,7 @@ sldns_str2wire_svcbparam_mandatory(const char* val, uint8_t* rd, size_t* rd_len)
*/
qsort((void *)(rd + 4), count, sizeof(uint16_t), sldns_network_uint16_cmp);
- /* The code below revolves around sematic errors in the SVCParam set.
+ /* The code below revolves around semantic errors in the SVCParam set.
* So long as we do not distinguish between running Unbound as a primary
* or as a secondary, we default to secondary behavior and we ignore the
* semantic errors. */
@@ -1588,12 +1598,12 @@ static int sldns_str2wire_svcparam_buf(const char* str, uint8_t* rd, size_t* rd_
if (*val_in == '"') {
val_in++;
while (*val_in != '"'
- && (unsigned)(val_out - unescaped_val + 1) < sizeof(unescaped_val)
+ && (size_t)(val_out - unescaped_val + 1) < sizeof(unescaped_val)
&& sldns_parse_char( (uint8_t*) val_out, &val_in)) {
val_out++;
}
} else {
- while ((unsigned)(val_out - unescaped_val + 1) < sizeof(unescaped_val)
+ while ((size_t)(val_out - unescaped_val + 1) < sizeof(unescaped_val)
&& sldns_parse_char( (uint8_t*) val_out, &val_in)) {
val_out++;
}
@@ -2157,9 +2167,13 @@ int sldns_str2wire_tsigtime_buf(const char* str, uint8_t* rd, size_t* len)
int sldns_str2wire_period_buf(const char* str, uint8_t* rd, size_t* len)
{
const char* end;
- uint32_t p = sldns_str2period(str, &end);
+ int overflow;
+ uint32_t p = sldns_str2period(str, &end, &overflow);
if(*end != 0)
return RET_ERR(LDNS_WIREPARSE_ERR_SYNTAX_PERIOD, end-str);
+ if(overflow)
+ return RET_ERR(LDNS_WIREPARSE_ERR_SYNTAX_INTEGER_OVERFLOW,
+ end-str);
if(*len < 4)
return LDNS_WIREPARSE_ERR_BUFFER_TOO_SMALL;
sldns_write_uint32(rd, p);
diff --git a/sldns/wire2str.c b/sldns/wire2str.c
index b70efe299d4b..d6fb289650b2 100644
--- a/sldns/wire2str.c
+++ b/sldns/wire2str.c
@@ -194,6 +194,7 @@ static sldns_lookup_table sldns_edns_options_data[] = {
{ 8, "edns-client-subnet" },
{ 11, "edns-tcp-keepalive"},
{ 12, "Padding" },
+ { 15, "EDE"},
{ 0, NULL}
};
sldns_lookup_table* sldns_edns_options = sldns_edns_options_data;
diff --git a/smallapp/unbound-checkconf.c b/smallapp/unbound-checkconf.c
index fe18c3c83f93..c25182bd20ff 100644
--- a/smallapp/unbound-checkconf.c
+++ b/smallapp/unbound-checkconf.c
@@ -408,6 +408,28 @@ interfacechecks(struct config_file* cfg)
}
}
+/** check interface-automatic-ports */
+static void
+ifautomaticportschecks(char* ifautomaticports)
+{
+ char* now = ifautomaticports;
+ while(now && *now) {
+ char* after;
+ int extraport;
+ while(isspace((unsigned char)*now))
+ now++;
+ if(!*now)
+ break;
+ after = now;
+ extraport = (int)strtol(now, &after, 10);
+ if(extraport < 0 || extraport > 65535)
+ fatal_exit("interface-automatic-ports: port out of range at position %d in '%s'", (int)(now-ifautomaticports)+1, ifautomaticports);
+ if(extraport == 0 && now == after)
+ fatal_exit("interface-automatic-ports: parse error at position %d in '%s'", (int)(now-ifautomaticports)+1, ifautomaticports);
+ now = after;
+ }
+}
+
/** check acl ips */
static void
aclchecks(struct config_file* cfg)
@@ -608,6 +630,7 @@ morechecks(struct config_file* cfg)
warn_hosts("stub-host", cfg->stubs);
warn_hosts("forward-host", cfg->forwards);
interfacechecks(cfg);
+ ifautomaticportschecks(cfg->if_automatic_ports);
aclchecks(cfg);
tcpconnlimitchecks(cfg);
diff --git a/smallapp/unbound-control.c b/smallapp/unbound-control.c
index c7c38276f006..89543e45de7c 100644
--- a/smallapp/unbound-control.c
+++ b/smallapp/unbound-control.c
@@ -155,9 +155,9 @@ usage(void)
printf(" ratelimit_list [+a] list ratelimited domains\n");
printf(" ip_ratelimit_list [+a] list ratelimited ip addresses\n");
printf(" +a list all, also not ratelimited\n");
- printf(" list_auth_zones list auth zones\n");
- printf(" auth_zone_reload zone reload auth zone from zonefile\n");
- printf(" auth_zone_transfer zone transfer auth zone from master\n");
+ printf(" list_auth_zones list auth zones (includes RPZ zones)\n");
+ printf(" auth_zone_reload zone reload auth zone (or RPZ zone) from zonefile\n");
+ printf(" auth_zone_transfer zone transfer auth zone (or RPZ zone) from master\n");
printf(" view_list_local_zones view list local-zones in view\n");
printf(" view_list_local_data view list local-data RRs in view\n");
printf(" view_local_zone view name type add local-zone in view\n");
@@ -444,7 +444,7 @@ static void do_stats_shm(struct config_file* cfg, struct ub_stats_info* stats,
#endif /* HAVE_SHMGET */
/** print statistics from shm memory segment */
-static void print_stats_shm(const char* cfgfile)
+static void print_stats_shm(const char* cfgfile, int quiet)
{
#ifdef HAVE_SHMGET
struct config_file* cfg;
@@ -474,8 +474,11 @@ static void print_stats_shm(const char* cfgfile)
fatal_exit("shmat(%d): %s", id_arr, strerror(errno));
}
- /* print the stats */
- do_stats_shm(cfg, stats, shm_stat);
+
+ if(!quiet) {
+ /* print the stats */
+ do_stats_shm(cfg, stats, shm_stat);
+ }
/* shutdown */
shmdt(shm_stat);
@@ -499,7 +502,7 @@ static void ssl_path_err(const char* s, const char *path)
{
unsigned long err;
err = ERR_peek_error();
- if (ERR_GET_LIB(err) == ERR_LIB_SYS) {
+ if(ERR_GET_LIB(err) == ERR_LIB_SYS) {
fprintf(stderr, "error: %s\n%s: %s\n",
s, path, ERR_reason_error_string(err));
exit(1);
@@ -541,11 +544,11 @@ setup_ctx(struct config_file* cfg)
#endif
if(!SSL_CTX_use_certificate_chain_file(ctx,c_cert))
ssl_path_err("Error setting up SSL_CTX client cert", c_cert);
- if (!SSL_CTX_use_PrivateKey_file(ctx,c_key,SSL_FILETYPE_PEM))
+ if(!SSL_CTX_use_PrivateKey_file(ctx,c_key,SSL_FILETYPE_PEM))
ssl_path_err("Error setting up SSL_CTX client key", c_key);
- if (!SSL_CTX_check_private_key(ctx))
+ if(!SSL_CTX_check_private_key(ctx))
ssl_err("Error setting up SSL_CTX client key");
- if (SSL_CTX_load_verify_locations(ctx, s_cert, NULL) != 1)
+ if(SSL_CTX_load_verify_locations(ctx, s_cert, NULL) != 1)
ssl_path_err("Error setting up SSL_CTX verify, server cert",
s_cert);
SSL_CTX_set_verify(ctx, SSL_VERIFY_PEER, NULL);
@@ -880,8 +883,9 @@ go_cmd(SSL* ssl, int fd, int quiet, int argc, char* argv[])
if(first_line && strncmp(buf, "error", 5) == 0) {
printf("%s", buf);
was_error = 1;
- } else if (!quiet)
+ } else if(!quiet) {
printf("%s", buf);
+ }
first_line = 0;
}
@@ -987,7 +991,7 @@ int main(int argc, char* argv[])
#endif
}
if(argc >= 1 && strcmp(argv[0], "stats_shm")==0) {
- print_stats_shm(cfgfile);
+ print_stats_shm(cfgfile, quiet);
return 0;
}
check_args_for_listcmd(argc, argv);
diff --git a/testcode/testpkts.c b/testcode/testpkts.c
index dee45176167a..3702c3f18403 100644
--- a/testcode/testpkts.c
+++ b/testcode/testpkts.c
@@ -128,6 +128,8 @@ static void matchline(char* line, struct entry* e)
e->match_answer = 1;
} else if(str_keyword(&parse, "subdomain")) {
e->match_subdomain = 1;
+ } else if(str_keyword(&parse, "all_noedns")) {
+ e->match_all_noedns = 1;
} else if(str_keyword(&parse, "all")) {
e->match_all = 1;
} else if(str_keyword(&parse, "ttl")) {
@@ -148,7 +150,22 @@ static void matchline(char* line, struct entry* e)
error("expected = or : in MATCH: %s", line);
parse++;
e->ixfr_soa_serial = (uint32_t)strtol(parse, (char**)&parse, 10);
- while(isspace((unsigned char)*parse))
+ while(isspace((unsigned char)*parse))
+ parse++;
+ } else if(str_keyword(&parse, "ede")) {
+ e->match_ede = 1;
+ if(*parse != '=' && *parse != ':')
+ error("expected = or : in MATCH: %s", line);
+ parse++;
+ while(isspace((unsigned char)*parse))
+ parse++;
+ if(str_keyword(&parse, "any")) {
+ e->match_ede_any = 1;
+ } else {
+ e->ede_info_code = (uint16_t)strtol(parse,
+ (char**)&parse, 10);
+ }
+ while(isspace((unsigned char)*parse))
parse++;
} else {
error("could not parse MATCH: '%s'", parse);
@@ -266,11 +283,15 @@ static struct entry* new_entry(void)
e->match_answer = 0;
e->match_subdomain = 0;
e->match_all = 0;
+ e->match_all_noedns = 0;
e->match_ttl = 0;
e->match_do = 0;
e->match_noedns = 0;
e->match_serial = 0;
e->ixfr_soa_serial = 0;
+ e->match_ede = 0;
+ e->match_ede_any = 0;
+ e->ede_info_code = -1;
e->match_transport = transport_any;
e->reply_list = NULL;
e->copy_id = 0;
@@ -817,7 +838,7 @@ static uint32_t get_serial(uint8_t* p, size_t plen)
return 0;
}
-/** get ptr to EDNS OPT record (and remaining length); behind the type u16 */
+/** get ptr to EDNS OPT record (and remaining length); after the type u16 */
static int
pkt_find_edns_opt(uint8_t** p, size_t* plen)
{
@@ -884,6 +905,39 @@ get_do_flag(uint8_t* pkt, size_t len)
return (int)(edns_bits&LDNS_EDNS_MASK_DO_BIT);
}
+/** Snips the EDE option out of the OPT record and returns the EDNS EDE
+ * INFO-CODE if found, else -1 */
+static int
+extract_ede(uint8_t* pkt, size_t len)
+{
+ uint8_t *rdata, *opt_position = pkt;
+ uint16_t rdlen, optlen;
+ size_t remaining = len;
+ int ede_code;
+ if(!pkt_find_edns_opt(&opt_position, &remaining)) return -1;
+ if(remaining < 8) return -1; /* malformed */
+ rdlen = sldns_read_uint16(opt_position+6);
+ rdata = opt_position + 8;
+ while(rdlen > 0) {
+ if(rdlen < 4) return -1; /* malformed */
+ optlen = sldns_read_uint16(rdata+2);
+ if(sldns_read_uint16(rdata) == LDNS_EDNS_EDE) {
+ if(rdlen < 6) return -1; /* malformed */
+ ede_code = sldns_read_uint16(rdata+4);
+ /* snip option from packet; assumes len is correct */
+ memmove(rdata, rdata+4+optlen,
+ (pkt+len)-(rdata+4+optlen));
+ /* update OPT size */
+ sldns_write_uint16(opt_position+6,
+ sldns_read_uint16(opt_position+6)-(4+optlen));
+ return ede_code;
+ }
+ rdlen -= 4 + optlen;
+ rdata += 4 + optlen;
+ }
+ return -1;
+}
+
/** zero TTLs in packet */
static void
zerottls(uint8_t* pkt, size_t pktlen)
@@ -1201,7 +1255,7 @@ match_question(uint8_t* q, size_t qlen, uint8_t* p, size_t plen, int mttl)
return 0;
}
- /* remove after answer section, (;; AUTH, ;; ADD, ;; MSG size ..) */
+ /* remove after answer section, (;; ANS, ;; AUTH, ;; ADD ..) */
s = strstr(qcmpstr, ";; ANSWER SECTION");
if(!s) s = strstr(qcmpstr, ";; AUTHORITY SECTION");
if(!s) s = strstr(qcmpstr, ";; ADDITIONAL SECTION");
@@ -1292,18 +1346,36 @@ match_answer(uint8_t* q, size_t qlen, uint8_t* p, size_t plen, int mttl)
return r;
}
+/** ignore EDNS lines in the string by overwriting them with what's left or
+ * zero out if at end of the string */
+static int
+ignore_edns_lines(char* str) {
+ char* edns = str, *n;
+ size_t str_len = strlen(str);
+ while((edns = strstr(edns, "; EDNS"))) {
+ n = strchr(edns, '\n');
+ if(!n) {
+ /* EDNS at end of string; zero */
+ *edns = 0;
+ break;
+ }
+ memmove(edns, n+1, str_len-(n-str));
+ }
+ return 1;
+}
+
/** match all of the packet */
int
match_all(uint8_t* q, size_t qlen, uint8_t* p, size_t plen, int mttl,
- int noloc)
+ int noloc, int noedns)
{
char* qstr, *pstr;
uint8_t* qb = q, *pb = p;
int r;
- /* zero TTLs */
qb = memdup(q, qlen);
pb = memdup(p, plen);
if(!qb || !pb) error("out of memory");
+ /* zero TTLs */
if(!mttl) {
zerottls(qb, qlen);
zerottls(pb, plen);
@@ -1313,6 +1385,11 @@ match_all(uint8_t* q, size_t qlen, uint8_t* p, size_t plen, int mttl,
qstr = sldns_wire2str_pkt(qb, qlen);
pstr = sldns_wire2str_pkt(pb, plen);
if(!qstr || !pstr) error("cannot pkt2string");
+ /* should we ignore EDNS lines? */
+ if(noedns) {
+ ignore_edns_lines(qstr);
+ ignore_edns_lines(pstr);
+ }
r = (strcmp(qstr, pstr) == 0);
if(!r) {
/* remove ;; MSG SIZE (at end of string) */
@@ -1321,8 +1398,8 @@ match_all(uint8_t* q, size_t qlen, uint8_t* p, size_t plen, int mttl,
s = strstr(pstr, ";; MSG SIZE");
if(s) *s=0;
r = (strcmp(qstr, pstr) == 0);
- if(!r && !noloc) {
- /* we are going to fail see if it is because of EDNS */
+ if(!r && !noloc && !noedns) {
+ /* we are going to fail, see if the cause is EDNS */
char* a = strstr(qstr, "; EDNS");
char* b = strstr(pstr, "; EDNS");
if( (a&&!b) || (b&&!a) ) {
@@ -1428,13 +1505,32 @@ find_match(struct entry* entries, uint8_t* query_pkt, size_t len,
enum transport_type transport)
{
struct entry* p = entries;
- uint8_t* reply;
- size_t rlen;
+ uint8_t* reply, *query_pkt_orig;
+ size_t rlen, query_pkt_orig_len;
+ /* Keep the original packet; it may be modified */
+ query_pkt_orig = memdup(query_pkt, len);
+ query_pkt_orig_len = len;
for(p=entries; p; p=p->next) {
verbose(3, "comparepkt: ");
reply = p->reply_list->reply_pkt;
rlen = p->reply_list->reply_len;
- if(p->match_opcode && get_opcode(query_pkt, len) !=
+ /* Restore the original packet for each entry */
+ memcpy(query_pkt, query_pkt_orig, query_pkt_orig_len);
+ /* EDE should be first since it may modify the query_pkt */
+ if(p->match_ede) {
+ int info_code = extract_ede(query_pkt, len);
+ if(info_code == -1) {
+ verbose(3, "bad EDE. Expected but not found\n");
+ continue;
+ } else if(!p->match_ede_any &&
+ (uint16_t)info_code != p->ede_info_code) {
+ verbose(3, "bad EDE INFO-CODE. Expected: %d, "
+ "and got: %d\n", (int)p->ede_info_code,
+ info_code);
+ continue;
+ }
+ }
+ if(p->match_opcode && get_opcode(query_pkt, len) !=
get_opcode(reply, rlen)) {
verbose(3, "bad opcode\n");
continue;
@@ -1502,14 +1598,25 @@ find_match(struct entry* entries, uint8_t* query_pkt, size_t len,
verbose(3, "bad transport\n");
continue;
}
+ if(p->match_all_noedns && !match_all(query_pkt, len, reply,
+ rlen, (int)p->match_ttl, 0, 1)) {
+ verbose(3, "bad all_noedns match\n");
+ continue;
+ }
if(p->match_all && !match_all(query_pkt, len, reply, rlen,
- (int)p->match_ttl, 0)) {
+ (int)p->match_ttl, 0, 0)) {
verbose(3, "bad allmatch\n");
continue;
}
verbose(3, "match!\n");
+ /* Restore the original packet */
+ memcpy(query_pkt, query_pkt_orig, query_pkt_orig_len);
+ free(query_pkt_orig);
return p;
}
+ /* Restore the original packet */
+ memcpy(query_pkt, query_pkt_orig, query_pkt_orig_len);
+ free(query_pkt_orig);
return NULL;
}
diff --git a/testcode/testpkts.h b/testcode/testpkts.h
index 6e032fa90a65..2768040c68cb 100644
--- a/testcode/testpkts.h
+++ b/testcode/testpkts.h
@@ -40,20 +40,30 @@ struct sldns_file_parse_state;
ENTRY_BEGIN
; first give MATCH lines, that say what queries are matched
; by this entry.
- ; 'opcode' makes the query match the opcode from the reply
- ; if you leave it out, any opcode matches this entry.
- ; 'qtype' makes the query match the qtype from the reply
- ; 'qname' makes the query match the qname from the reply
- ; 'subdomain' makes the query match subdomains of qname from the reply
- ; 'serial=1023' makes the query match if ixfr serial is 1023.
+ ; 'opcode' makes the query match the opcode from the reply;
+ ; if you leave it out, any opcode matches this entry.
+ ; 'qtype' makes the query match the qtype from the reply.
+ ; 'qname' makes the query match the qname from the reply.
+ ; 'subdomain' makes the query match subdomains of qname from the reply.
+ ; 'serial=1023' makes the query match if ixfr serial is 1023.
; 'all' has to match header byte for byte and all rrs in packet.
+ ; 'all_noedns' has to match header byte for byte and all rrs in packet;
+ ; ignoring EDNS.
; 'ttl' used with all, rrs in packet must also have matching TTLs.
; 'DO' will match only queries with DO bit set.
; 'noedns' matches queries without EDNS OPT records.
- ; 'rcode' makes the query match the rcode from the reply
- ; 'question' makes the query match the question section
- ; 'answer' makes the query match the answer section
+ ; 'rcode' makes the query match the rcode from the reply.
+ ; 'question' makes the query match the question section.
+ ; 'answer' makes the query match the answer section.
; 'ednsdata' matches queries to HEX_EDNS section.
+ ; 'UDP' matches if the transport is UDP.
+ ; 'TCP' matches if the transport is TCP.
+ ; 'ede=2' makes the query match if the EDNS EDE info-code is 2.
+ ; It also snips the EDE record out of the packet to facilitate
+ ; other matches.
+ ; 'ede=any' makes the query match any EDNS EDE info-code.
+ ; It also snips the EDE record out of the packet to facilitate
+ ; other matches.
MATCH [opcode] [qtype] [qname] [serial=<value>] [all] [ttl]
MATCH [UDP|TCP] DO
MATCH ...
@@ -72,6 +82,12 @@ struct sldns_file_parse_state;
; 'sleep=10' sleeps for 10 seconds before giving the answer (TCP is open)
ADJUST [sleep=<num>] ; sleep before giving any reply
ADJUST [packet_sleep=<num>] ; sleep before this packet in sequence
+ ; 'copy_ednsdata_assume_clientsubnet' copies ednsdata to reply, assumes
+ ; it is clientsubnet and adjusts scopemask to match sourcemask.
+ ADJUST copy_ednsdata_assume_clientsubnet
+ ; 'increment_ecs_scope' increments the ECS scope copied from the
+ ; sourcemask by one.
+ ADJUST increment_ecs_scope
SECTION QUESTION
<RRs, one per line> ; the RRcount is determined automatically.
SECTION ANSWER
@@ -167,11 +183,11 @@ struct entry {
/* match */
/* How to match an incoming query with this canned reply */
/** match query opcode with answer opcode */
- uint8_t match_opcode;
+ uint8_t match_opcode;
/** match qtype with answer qtype */
- uint8_t match_qtype;
+ uint8_t match_qtype;
/** match qname with answer qname */
- uint8_t match_qname;
+ uint8_t match_qname;
/** match rcode with answer rcode */
uint8_t match_rcode;
/** match question section */
@@ -179,11 +195,17 @@ struct entry {
/** match answer section */
uint8_t match_answer;
/** match qname as subdomain of answer qname */
- uint8_t match_subdomain;
+ uint8_t match_subdomain;
/** match SOA serial number, from auth section */
- uint8_t match_serial;
+ uint8_t match_serial;
+ /** match EDNS EDE info-code */
+ uint8_t match_ede;
+ /** match any EDNS EDE info-code */
+ uint8_t match_ede_any;
/** match all of the packet */
uint8_t match_all;
+ /** match all of the packet; ignore EDNS */
+ uint8_t match_all_noedns;
/** match ttls in the packet */
uint8_t match_ttl;
/** match DO bit */
@@ -193,9 +215,11 @@ struct entry {
/** match edns data field given in hex */
uint8_t match_ednsdata_raw;
/** match query serial with this value. */
- uint32_t ixfr_soa_serial;
+ uint32_t ixfr_soa_serial;
/** match on UDP/TCP */
- enum transport_type match_transport;
+ enum transport_type match_transport;
+ /** match EDNS EDE info-code with this value. */
+ uint16_t ede_info_code;
/** pre canned reply */
struct reply_packet *reply_list;
@@ -260,10 +284,11 @@ struct entry* find_match(struct entry* entries, uint8_t* query_pkt,
* @param mttl: if true, ttls must match, if false, ttls do not need to match
* @param noloc: if true, rrs may be reordered in their packet-section.
* rrs are then matches without location of the rr being important.
+ * @param noedns: if true, edns is not compared, if false, edns must match.
* @return true if matched.
*/
int match_all(uint8_t* q, size_t qlen, uint8_t* p, size_t plen, int mttl,
- int noloc);
+ int noloc, int noedns);
/**
* copy & adjust packet, mallocs a copy.
diff --git a/testcode/unitldns.c b/testcode/unitldns.c
index 6397f29dbe2f..d226ee203c10 100644
--- a/testcode/unitldns.c
+++ b/testcode/unitldns.c
@@ -243,28 +243,28 @@ b64_test(void)
memset(target, 0, sizeof(target));
result = sldns_b64_pton(p1, (uint8_t*)target, tarsize);
- unit_assert(result == strlen("hello") && strcmp(target, "hello") == 0);
+ unit_assert(result == (int)strlen("hello") && strcmp(target, "hello") == 0);
memset(target, 0, sizeof(target));
result = sldns_b64_pton(p2, (uint8_t*)target, tarsize);
- unit_assert(result == strlen("hello>") && strcmp(target, "hello>") == 0);
+ unit_assert(result == (int)strlen("hello>") && strcmp(target, "hello>") == 0);
memset(target, 0, sizeof(target));
result = sldns_b64_pton(p3, (uint8_t*)target, tarsize);
- unit_assert(result == strlen("hello?!") && strcmp(target, "hello?!") == 0);
+ unit_assert(result == (int)strlen("hello?!") && strcmp(target, "hello?!") == 0);
memset(target, 0, sizeof(target));
result = sldns_b64_pton(p4, (uint8_t*)target, tarsize);
/* when padding is used everything that is not a block of 4 will be
* ignored */
- unit_assert(result == strlen("hel") && strcmp(target, "hel") == 0);
+ unit_assert(result == (int)strlen("hel") && strcmp(target, "hel") == 0);
memset(target, 0, sizeof(target));
result = sldns_b64url_pton(u1, strlen(u1), (uint8_t*)target, tarsize);
- unit_assert(result == strlen("hello") && strcmp(target, "hello") == 0);
+ unit_assert(result == (int)strlen("hello") && strcmp(target, "hello") == 0);
memset(target, 0, sizeof(target));
result = sldns_b64url_pton(u2, strlen(u2), (uint8_t*)target, tarsize);
- unit_assert(result == strlen("hello>") && strcmp(target, "hello>") == 0);
+ unit_assert(result == (int)strlen("hello>") && strcmp(target, "hello>") == 0);
memset(target, 0, sizeof(target));
result = sldns_b64url_pton(u3, strlen(u3), (uint8_t*)target, tarsize);
- unit_assert(result == strlen("hello+/") && strcmp(target, "hello?!") == 0);
+ unit_assert(result == (int)strlen("hello+/") && strcmp(target, "hello?!") == 0);
/* one item in block of four is not allowed */
memset(target, 0, sizeof(target));
result = sldns_b64url_pton(u4, strlen(u4), (uint8_t*)target, tarsize);
diff --git a/testcode/unitmsgparse.c b/testcode/unitmsgparse.c
index 6f1edc6e9d6e..a87314019d1f 100644
--- a/testcode/unitmsgparse.c
+++ b/testcode/unitmsgparse.c
@@ -137,7 +137,7 @@ test_buffers(sldns_buffer* pkt, sldns_buffer* out)
/* compare packets */
unit_assert(match_all(sldns_buffer_begin(pkt), sldns_buffer_limit(pkt),
sldns_buffer_begin(out), sldns_buffer_limit(out), 1,
- matches_nolocation));
+ matches_nolocation, 0));
return 0;
}
diff --git a/testcode/unitverify.c b/testcode/unitverify.c
index 9e101324960e..ff069a1bb03d 100644
--- a/testcode/unitverify.c
+++ b/testcode/unitverify.c
@@ -187,7 +187,7 @@ verifytest_rrset(struct module_env* env, struct val_env* ve,
}
setup_sigalg(dnskey, sigalg); /* check all algorithms in the dnskey */
/* ok to give null as qstate here, won't be used for answer section. */
- sec = dnskeyset_verify_rrset(env, ve, rrset, dnskey, sigalg, &reason,
+ sec = dnskeyset_verify_rrset(env, ve, rrset, dnskey, sigalg, &reason, NULL,
LDNS_SECTION_ANSWER, NULL);
if(vsig) {
printf("verify outcome is: %s %s\n", sec_status_to_string(sec),
diff --git a/testcode/unitzonemd.c b/testcode/unitzonemd.c
index 5caa68a102c3..23c9f7010644 100644
--- a/testcode/unitzonemd.c
+++ b/testcode/unitzonemd.c
@@ -221,10 +221,10 @@ static void zonemd_check_test(void)
unit_assert(result && reason == NULL);
result = auth_zone_generate_zonemd_check(z, 241, hashalgo,
hash, hashlen, region, buf, &reason);
- unit_assert(!result && strcmp(reason, "unsupported scheme")==0);
+ unit_assert(result && strcmp(reason, "unsupported scheme")==0);
result = auth_zone_generate_zonemd_check(z, scheme, 242,
hash, hashlen, region, buf, &reason);
- unit_assert(!result && strcmp(reason, "unsupported algorithm")==0);
+ unit_assert(result && strcmp(reason, "unsupported algorithm")==0);
result = auth_zone_generate_zonemd_check(z, scheme, hashalgo,
hash, 2, region, buf, &reason);
unit_assert(!result && strcmp(reason, "digest length too small, less than 12")==0);
diff --git a/testdata/auth_zonemd_file_unknown.rpl b/testdata/auth_zonemd_file_unknown.rpl
new file mode 100644
index 000000000000..f5c5f276e882
--- /dev/null
+++ b/testdata/auth_zonemd_file_unknown.rpl
@@ -0,0 +1,184 @@
+; config options
+server:
+ target-fetch-policy: "0 0 0 0 0"
+
+auth-zone:
+ name: "example.com."
+ ## zonefile (or none).
+ ## zonefile: "example.com.zone"
+ ## master by IP address or hostname
+ ## can list multiple masters, each on one line.
+ ## master:
+ ## url for http fetch
+ ## url:
+ ## queries from downstream clients get authoritative answers.
+ ## for-downstream: yes
+ for-downstream: no
+ ## queries are used to fetch authoritative answers from this zone,
+ ## instead of unbound itself sending queries there.
+ ## for-upstream: yes
+ for-upstream: yes
+ ## on failures with for-upstream, fallback to sending queries to
+ ## the authority servers
+ ## fallback-enabled: no
+ zonemd-check: yes
+
+ ## this line generates zonefile: \n"/tmp/xxx.example.com"\n
+ zonefile:
+TEMPFILE_NAME example.com
+ ## this is the inline file /tmp/xxx.example.com
+ ## the tempfiles are deleted when the testrun is over.
+TEMPFILE_CONTENTS example.com
+example.com. IN SOA ns.example.com. hostmaster.example.com. 200154054 28800 7200 604800 3600
+example.com. IN NS ns.example.com.
+example.com. IN ZONEMD 200154054 1 22 EFAA5B78B38AB1C45DE57B8167BCCE906451D0E72118E1F5E80B5F0C3CF04BFFC65D53C011185528EAD439D6F3A02F511961E090E5E4E0DFA013BD276D728B22
+example.com. IN ZONEMD 200154054 21 2 EFAA5B78B38AB1C45DE57B8167BCCE906451D0E72118E1F5E80B5F0C3CF04BFFC65D53C011185528EAD439D6F3A02F511961E090E5E4E0DFA013BD276D728B22
+www.example.com. IN A 127.0.0.1
+ns.example.com. IN A 127.0.0.1
+bar.example.com. IN A 1.2.3.4
+ding.example.com. IN A 1.2.3.4
+foo.example.com. IN A 1.2.3.4
+TEMPFILE_END
+
+stub-zone:
+ name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Test authority zone with ZONEMD with unknown algo from zonefile
+
+; K.ROOT-SERVERS.NET.
+RANGE_BEGIN 0 100
+ ADDRESS 193.0.14.129
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+. IN NS
+SECTION ANSWER
+. IN NS K.ROOT-SERVERS.NET.
+SECTION ADDITIONAL
+K.ROOT-SERVERS.NET. IN A 193.0.14.129
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+com. IN NS
+SECTION AUTHORITY
+com. IN NS a.gtld-servers.net.
+SECTION ADDITIONAL
+a.gtld-servers.net. IN A 192.5.6.30
+ENTRY_END
+RANGE_END
+
+; a.gtld-servers.net.
+RANGE_BEGIN 0 100
+ ADDRESS 192.5.6.30
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+com. IN NS
+SECTION ANSWER
+com. IN NS a.gtld-servers.net.
+SECTION ADDITIONAL
+a.gtld-servers.net. IN A 192.5.6.30
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+example.com. IN NS
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.44
+ENTRY_END
+RANGE_END
+
+; ns.example.net.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.44
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.net. IN NS
+SECTION ANSWER
+example.net. IN NS ns.example.net.
+SECTION ADDITIONAL
+ns.example.net. IN A 1.2.3.44
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+ns.example.net. IN A
+SECTION ANSWER
+ns.example.net. IN A 1.2.3.44
+SECTION AUTHORITY
+example.net. IN NS ns.example.net.
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+ns.example.net. IN AAAA
+SECTION AUTHORITY
+example.net. IN NS ns.example.net.
+SECTION ADDITIONAL
+www.example.net. IN A 1.2.3.44
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.com. IN NS
+SECTION ANSWER
+example.com. IN NS ns.example.net.
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. IN A 10.20.30.40
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www.example.com. IN A
+ENTRY_END
+
+; recursion happens here.
+STEP 20 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. IN A 127.0.0.1
+ENTRY_END
+
+SCENARIO_END
diff --git a/testdata/autotrust_init_fail.rpl b/testdata/autotrust_init_fail.rpl
index 497dfcf5731c..1f3fed9570a2 100644
--- a/testdata/autotrust_init_fail.rpl
+++ b/testdata/autotrust_init_fail.rpl
@@ -4,6 +4,8 @@ server:
log-time-ascii: yes
fake-sha1: yes
trust-anchor-signaling: no
+ ede: yes
+
stub-zone:
name: "."
stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
@@ -150,7 +152,7 @@ ENTRY_END
STEP 20 CHECK_ANSWER
ENTRY_BEGIN
-MATCH all
+MATCH all ede=9
REPLY QR RD RA DO SERVFAIL
SECTION QUESTION
www.example.com. IN A
diff --git a/testdata/autotrust_init_failsig.rpl b/testdata/autotrust_init_failsig.rpl
index 2bf5014e4683..7f6a14d833e5 100644
--- a/testdata/autotrust_init_failsig.rpl
+++ b/testdata/autotrust_init_failsig.rpl
@@ -5,6 +5,8 @@ server:
log-time-ascii: yes
fake-sha1: yes
trust-anchor-signaling: no
+ ede: yes
+
stub-zone:
name: "."
stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
@@ -138,7 +140,7 @@ ENTRY_END
STEP 20 CHECK_ANSWER
ENTRY_BEGIN
-MATCH all
+MATCH all ede=6
REPLY QR RD RA DO SERVFAIL
SECTION QUESTION
www.example.com. IN A
diff --git a/testdata/autotrust_probefail.rpl b/testdata/autotrust_probefail.rpl
index d3ac6aedf7f2..e22cbf71ff96 100644
--- a/testdata/autotrust_probefail.rpl
+++ b/testdata/autotrust_probefail.rpl
@@ -4,6 +4,8 @@ server:
log-time-ascii: yes
fake-sha1: yes
trust-anchor-signaling: no
+ ede: yes
+
stub-zone:
name: "."
stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
@@ -155,7 +157,7 @@ ENTRY_END
STEP 30 CHECK_ANSWER
ENTRY_BEGIN
-MATCH all
+MATCH all ede=9
REPLY QR RD RA DO SERVFAIL
SECTION QUESTION
www.example.com. IN A
diff --git a/testdata/autotrust_probefailsig.rpl b/testdata/autotrust_probefailsig.rpl
index 48230050239e..7d486ffbc397 100644
--- a/testdata/autotrust_probefailsig.rpl
+++ b/testdata/autotrust_probefailsig.rpl
@@ -4,6 +4,8 @@ server:
log-time-ascii: yes
fake-sha1: yes
trust-anchor-signaling: no
+ ede: yes
+
stub-zone:
name: "."
stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
@@ -155,7 +157,7 @@ ENTRY_END
STEP 30 CHECK_ANSWER
ENTRY_BEGIN
-MATCH all
+MATCH all ede=6
REPLY QR RD RA DO SERVFAIL
SECTION QUESTION
www.example.com. IN A
diff --git a/testdata/black_ds_entry.rpl b/testdata/black_ds_entry.rpl
index e2367a980d31..168dc236d203 100644
--- a/testdata/black_ds_entry.rpl
+++ b/testdata/black_ds_entry.rpl
@@ -6,6 +6,7 @@ server:
target-fetch-policy: "0 0 0 0 0"
fake-sha1: yes
trust-anchor-signaling: no
+ ede: yes
stub-zone:
name: "."
@@ -578,7 +579,7 @@ ENTRY_END
; recursion happens here.
STEP 10 CHECK_ANSWER
ENTRY_BEGIN
-MATCH all
+MATCH all ede=7
REPLY QR RD RA DO SERVFAIL
SECTION QUESTION
www.sub.example.com. IN A
@@ -595,7 +596,7 @@ ENTRY_END
STEP 120 CHECK_ANSWER
ENTRY_BEGIN
-MATCH all
+MATCH all ede=7
REPLY QR RD RA DO SERVFAIL
SECTION QUESTION
ftp.sub.example.com. IN A
diff --git a/testdata/black_key_entry.rpl b/testdata/black_key_entry.rpl
index 37946c008cfd..cd2b0bfbe557 100644
--- a/testdata/black_key_entry.rpl
+++ b/testdata/black_key_entry.rpl
@@ -6,6 +6,7 @@ server:
target-fetch-policy: "0 0 0 0 0"
fake-sha1: yes
trust-anchor-signaling: no
+ ede: yes
stub-zone:
name: "."
@@ -560,7 +561,7 @@ ENTRY_END
; recursion happens here.
STEP 10 CHECK_ANSWER
ENTRY_BEGIN
-MATCH all
+MATCH all ede=7
REPLY QR RD RA DO SERVFAIL
SECTION QUESTION
www.sub.example.com. IN A
@@ -577,7 +578,7 @@ ENTRY_END
STEP 120 CHECK_ANSWER
ENTRY_BEGIN
-MATCH all
+MATCH all ede=7
REPLY QR RD RA DO SERVFAIL
SECTION QUESTION
ftp.sub.example.com. IN A
diff --git a/testdata/black_prime_entry.rpl b/testdata/black_prime_entry.rpl
index 8221d2db6b58..e635ed9cc10b 100644
--- a/testdata/black_prime_entry.rpl
+++ b/testdata/black_prime_entry.rpl
@@ -7,6 +7,7 @@ server:
qname-minimisation: "no"
fake-sha1: yes
trust-anchor-signaling: no
+ ede: yes
stub-zone:
name: "."
@@ -285,7 +286,7 @@ ENTRY_END
; recursion happens here.
STEP 10 CHECK_ANSWER
ENTRY_BEGIN
-MATCH all
+MATCH all ede=7
REPLY QR RD RA DO SERVFAIL
SECTION QUESTION
www.example.com. IN A
@@ -304,7 +305,7 @@ ENTRY_END
; recursion happens here.
STEP 120 CHECK_ANSWER
ENTRY_BEGIN
-MATCH all
+MATCH all ede=7
REPLY QR RD RA DO SERVFAIL
SECTION QUESTION
ftp.example.com. IN A
diff --git a/testdata/ede.tdir/bogus/clean.sh b/testdata/ede.tdir/bogus/clean.sh
new file mode 100755
index 000000000000..54128f807217
--- /dev/null
+++ b/testdata/ede.tdir/bogus/clean.sh
@@ -0,0 +1 @@
+rm -f K* piece1 base expired notyetincepted trust-anchors dnssec-failures.test.signed dnskey-failures.test.signed nsec-failures.test.signed rrsig-failures.test.signed
diff --git a/testdata/ede.tdir/bogus/dnskey-failures.test b/testdata/ede.tdir/bogus/dnskey-failures.test
new file mode 100644
index 000000000000..49d6ad5a384d
--- /dev/null
+++ b/testdata/ede.tdir/bogus/dnskey-failures.test
@@ -0,0 +1,10 @@
+$ORIGIN dnskey-failures.test.
+
+@ SOA ns hostmaster (
+ 1 ; serial
+ 14400 ; refresh (4 hours)
+ 1800 ; retry (30 minutes)
+ 2419200 ; expire (4 weeks)
+ 300 ; minimum (5 minutes)
+)
+ A 192.0.2.1
diff --git a/testdata/ede.tdir/bogus/dnssec-failures.test b/testdata/ede.tdir/bogus/dnssec-failures.test
new file mode 100644
index 000000000000..5af5941c0959
--- /dev/null
+++ b/testdata/ede.tdir/bogus/dnssec-failures.test
@@ -0,0 +1,15 @@
+$ORIGIN dnssec-failures.test.
+
+@ SOA ns hostmaster (
+ 1 ; serial
+ 14400 ; refresh (4 hours)
+ 1800 ; retry (30 minutes)
+ 2419200 ; expire (4 weeks)
+ 300 ; minimum (5 minutes)
+)
+ NS ns
+ns A 192.0.2.1
+notyetincepted TXT "Not yet incepted"
+expired TXT "Expired"
+sigsinvalid TXT "Signatures invalid"
+missingrrsigs TXT "Signatures missing" \ No newline at end of file
diff --git a/testdata/ede.tdir/bogus/make-broken-zone.sh b/testdata/ede.tdir/bogus/make-broken-zone.sh
new file mode 100755
index 000000000000..67b4fcfb2d84
--- /dev/null
+++ b/testdata/ede.tdir/bogus/make-broken-zone.sh
@@ -0,0 +1,67 @@
+#!/usr/bin/env bash
+
+# create oudated zones
+CSK=`ldns-keygen -a ECDSAP256SHA256 -k -r /dev/urandom dnssec-failures.test`
+echo $CSK
+
+echo ". IN DS 20326 8 2 e06d44b80b8f1d39a95c0b0d7c65d08458e880409bbc683457104237c7f8ec8d" | \
+ cat $CSK.ds - > bogus/trust-anchors
+
+# differentiate for MacOS with "gdate"
+DATE=date
+which gdate > /dev/null 2>&1 && DATE=gdate
+
+ONEMONTHAGO=`$DATE -d 'now - 1 month' +%Y%m%d`
+YESTERDAY=`$DATE -d 'now - 2 days' +%Y%m%d`
+TOMORROW=`$DATE -d 'now + 2 days' +%Y%m%d`
+
+ldns-signzone -i $YESTERDAY -f - bogus/dnssec-failures.test $CSK | \
+ grep -v '^missingrrsigs\.dnssec-failures\.test\..*IN.*RRSIG.*TXT' | \
+ sed 's/Signatures invalid/Signatures INVALID/g' | \
+ grep -v '^notyetincepted\.dnssec-failures\.test\..*IN.*TXT' | \
+ grep -v '^notyetincepted\.dnssec-failures\.test\..*IN.*RRSIG.*TXT' | \
+ grep -v '^expired\.dnssec-failures\.test\..*IN.*TXT' | \
+ grep -v '^expired\.dnssec-failures\.test\..*IN.*RRSIG.*TXT' > base
+ldns-signzone -i $ONEMONTHAGO -e $YESTERDAY -f - bogus/dnssec-failures.test $CSK | \
+ grep -v '[ ]NSEC[ ]' | \
+ grep '^expired\.dnssec-failures\.test\..*IN.*TXT' > expired
+ldns-signzone -i $TOMORROW -f - bogus/dnssec-failures.test $CSK | \
+ grep -v '[ ]NSEC[ ]' | \
+ grep '^notyetincepted\.dnssec-failures\.test\..*IN.*TXT' > notyetincepted
+
+cat base expired notyetincepted > bogus/dnssec-failures.test.signed
+
+# cleanup old zone keys
+rm -f $CSK.*
+# create zone with DNSKEY missing
+CSK=`ldns-keygen -a ECDSAP256SHA256 -k -r /dev/urandom dnskey-failures.test`
+echo $CSK
+cat $CSK.ds >> bogus/trust-anchors
+
+ldns-signzone -f tmp.signed bogus/dnskey-failures.test $CSK
+grep -v ' DNSKEY ' tmp.signed > bogus/dnskey-failures.test.signed
+
+
+# cleanup old zone keys
+rm -f $CSK.*
+# create zone with NSEC missing
+CSK=`ldns-keygen -a ECDSAP256SHA256 -k -r /dev/urandom nsec-failures.test`
+echo $CSK
+cat $CSK.ds >> bogus/trust-anchors
+
+ldns-signzone -f tmp.signed bogus/nsec-failures.test $CSK
+grep -v ' NSEC ' tmp.signed > bogus/nsec-failures.test.signed
+
+
+# cleanup old zone keys
+rm -f $CSK.*
+# create zone with RRSIGs missing
+CSK=`ldns-keygen -a ECDSAP256SHA256 -k -r /dev/urandom rrsig-failures.test`
+echo $CSK
+cat $CSK.ds >> bogus/trust-anchors
+
+ldns-signzone -f tmp.signed bogus/rrsig-failures.test $CSK
+grep -v ' RRSIG ' tmp.signed > bogus/rrsig-failures.test.signed
+
+# cleanup
+rm -f base expired notyetincepted tmp.signed $CSK.*
diff --git a/testdata/ede.tdir/bogus/nsec-failures.test b/testdata/ede.tdir/bogus/nsec-failures.test
new file mode 100644
index 000000000000..529298df686b
--- /dev/null
+++ b/testdata/ede.tdir/bogus/nsec-failures.test
@@ -0,0 +1,10 @@
+$ORIGIN nsec-failures.test.
+
+@ SOA ns hostmaster (
+ 1 ; serial
+ 14400 ; refresh (4 hours)
+ 1800 ; retry (30 minutes)
+ 2419200 ; expire (4 weeks)
+ 300 ; minimum (5 minutes)
+)
+ A 192.0.2.1
diff --git a/testdata/ede.tdir/bogus/rrsig-failures.test b/testdata/ede.tdir/bogus/rrsig-failures.test
new file mode 100644
index 000000000000..cab0b7f48d04
--- /dev/null
+++ b/testdata/ede.tdir/bogus/rrsig-failures.test
@@ -0,0 +1,10 @@
+$ORIGIN rrsig-failures.test.
+
+@ SOA ns hostmaster (
+ 1 ; serial
+ 14400 ; refresh (4 hours)
+ 1800 ; retry (30 minutes)
+ 2419200 ; expire (4 weeks)
+ 300 ; minimum (5 minutes)
+)
+ A 192.0.2.1
diff --git a/testdata/ede.tdir/ede-auth.conf b/testdata/ede.tdir/ede-auth.conf
new file mode 100644
index 000000000000..d78da0382ad4
--- /dev/null
+++ b/testdata/ede.tdir/ede-auth.conf
@@ -0,0 +1,27 @@
+server:
+ verbosity: 1
+ use-syslog: no
+ chroot: ""
+ username: ""
+ directory: ""
+ pidfile: "unbound2.pid"
+ local-zone: test nodefault
+ interface: 127.0.0.1
+ port: @PORT2@
+
+auth-zone:
+ name: "dnssec-failures.test"
+ zonefile: "bogus/dnssec-failures.test.signed"
+
+auth-zone:
+ name: "dnskey-failures.test"
+ zonefile: "bogus/dnskey-failures.test.signed"
+
+auth-zone:
+ name: "nsec-failures.test"
+ zonefile: "bogus/nsec-failures.test.signed"
+
+auth-zone:
+ name: "rrsig-failures.test"
+ zonefile: "bogus/rrsig-failures.test.signed"
+
diff --git a/testdata/ede.tdir/ede.conf b/testdata/ede.tdir/ede.conf
new file mode 100644
index 000000000000..13730d42f2c5
--- /dev/null
+++ b/testdata/ede.tdir/ede.conf
@@ -0,0 +1,49 @@
+server:
+ verbosity: 2
+ interface: 127.0.0.1
+ port: @PORT@
+ use-syslog: no
+ directory: .
+ pidfile: "unbound.pid"
+ chroot: ""
+ username: ""
+ directory: ""
+ val-log-level: 2
+
+ trust-anchor-file: "bogus/trust-anchors"
+
+ module-config: "respip validator iterator"
+
+ ede: yes
+ access-control: 127.0.0.2/32 refuse
+ access-control: 127.0.0.3/32 allow
+
+ local-zone: hopsa.kidee. always_refuse
+ local-data: "hopsa.kidee. TXT hela hola"
+
+ local-zone: nlnetlabs.nl transparent
+ local-data: "hopsa.nlnetlabs.nl. TXT hela hola"
+
+ local-zone: uva.nl. always_null
+
+ local-zone: example.com redirect
+ local-data: "example.com CNAME *.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aaaaaaaaaaaaaaaaaaaaaa."
+
+ local-zone: test nodefault
+ do-not-query-localhost: no
+
+forward-zone:
+ name: "dnssec-failures.test"
+ forward-addr: 127.0.0.1@@PORT2@
+
+forward-zone:
+ name: "dnskey-failures.test"
+ forward-addr: 127.0.0.1@@PORT2@
+
+forward-zone:
+ name: "nsec-failures.test"
+ forward-addr: 127.0.0.1@@PORT2@
+
+forward-zone:
+ name: "rrsig-failures.test"
+ forward-addr: 127.0.0.1@@PORT2@
diff --git a/testdata/ede.tdir/ede.dsc b/testdata/ede.tdir/ede.dsc
new file mode 100644
index 000000000000..c397ded693f2
--- /dev/null
+++ b/testdata/ede.tdir/ede.dsc
@@ -0,0 +1,16 @@
+BaseName: ede
+Version: 1.0
+Description: Test Extended DNS Errors (rfc8914)
+CreationDate: Fri Aug 20 15:42:11 UTC 2021
+Maintainer: Tom Carpay
+Category:
+Component:
+CmdDepends:
+Depends:
+Help:
+Pre: ede.pre
+Post: ede.post
+Test: ede.test
+AuxFiles:
+Passed:
+Failure:
diff --git a/testdata/ede.tdir/ede.post b/testdata/ede.tdir/ede.post
new file mode 100644
index 000000000000..88b26f3132a1
--- /dev/null
+++ b/testdata/ede.tdir/ede.post
@@ -0,0 +1,10 @@
+# #-- ede.post --#
+# source the master var file when it's there
+[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master
+# use .tpkg.var.test for in test variable passing
+[ -f .tpkg.var.test ] && source .tpkg.var.test
+
+# teardown
+. ../common.sh
+kill_pid $UNBOUND_PID
+kill_pid $UNBOUND_PID2 \ No newline at end of file
diff --git a/testdata/ede.tdir/ede.pre b/testdata/ede.tdir/ede.pre
new file mode 100644
index 000000000000..e5a0667b0e02
--- /dev/null
+++ b/testdata/ede.tdir/ede.pre
@@ -0,0 +1,37 @@
+# #-- ede.pre --#
+# source the master var file when it's there
+[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master
+# use .tpkg.var.test for in test variable passing
+[ -f .tpkg.var.test ] && source .tpkg.var.test
+
+. ../common.sh
+get_random_port 2
+UNBOUND_PORT=$RND_PORT
+UNBOUND_PORT2=$(($RND_PORT + 1))
+echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test
+echo "UNBOUND_PORT2=$UNBOUND_PORT2" >> .tpkg.var.test
+
+# rewrite config file with created ports
+sed -e 's/@PORT\@/'$UNBOUND_PORT'/' < ede.conf > temp.conf
+sed -e 's/@PORT2\@/'$UNBOUND_PORT2'/' < temp.conf > ub.conf
+sed -e 's/@PORT2\@/'$UNBOUND_PORT2'/' < ede-auth.conf > ub2.conf
+
+# create broken dnssec zone
+bogus/make-broken-zone.sh
+
+# start unbound in the background
+PRE="../.."
+$PRE/unbound -d -c ub.conf > unbound.log 2>&1 &
+UNBOUND_PID=$!
+echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test
+
+# start authoritative unbound in the background
+$PRE/unbound -d -c ub2.conf > unbound2.log 2>&1 &
+UNBOUND_PID2=$!
+echo "UNBOUND_PID2=$UNBOUND_PID2" >> .tpkg.var.test
+
+
+cat .tpkg.var.test
+wait_unbound_up unbound.log
+wait_unbound_up unbound2.log
+
diff --git a/testdata/ede.tdir/ede.test b/testdata/ede.tdir/ede.test
new file mode 100644
index 000000000000..5d478bd49cb2
--- /dev/null
+++ b/testdata/ede.tdir/ede.test
@@ -0,0 +1,72 @@
+# #-- ede.test --#
+# source the master var file when it's there
+[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master
+# use .tpkg.var.test for in test variable passing
+[ -f .tpkg.var.test ] && source .tpkg.var.test
+
+
+# DNSSEC failure: Signature Expired or DNSKEY Missing (depending on the servfail configuration)
+dig @127.0.0.1 -p $UNBOUND_PORT servfail.nl > servfail.txt
+
+# DNSSEC failure: key not incepted
+dig @127.0.0.1 -p $UNBOUND_PORT notyetincepted.dnssec-failures.test. TXT +dnssec > sig_notyetincepted.txt
+
+if ! grep -q -e "OPT=15: 00 08" -e "EDE: 8" sig_notyetincepted.txt
+then
+ echo "Signature not yet valid does not return EDE Signature Not Yet Valid"
+ cat sig_notyetincepted.txt
+ exit 1
+fi
+
+# DNSSEC failure: key expired
+dig @127.0.0.1 -p $UNBOUND_PORT expired.dnssec-failures.test. TXT +dnssec > sig_expired.txt
+
+if ! grep -q -e "OPT=15: 00 07" -e "EDE: 7" sig_expired.txt
+then
+ echo "Expired signature does not return EDE Signature expired"
+ cat sig_expired.txt
+ exit 1
+fi
+
+# DNSSEC failure: missing rrsigs
+dig @127.0.0.1 -p $UNBOUND_PORT missingrrsigs.dnssec-failures.test. TXT +dnssec > missingrrsigs.txt
+
+if ! grep -q -e "OPT=15: 00 0a" -e "EDE: 10" missingrrsigs.txt
+then
+ echo "Expired signature does not return EDE RRSIGs missing"
+ cat missingrrsigs.txt
+ exit 1
+fi
+
+# signed zone with DNSKEY missing
+dig @127.0.0.1 -p $UNBOUND_PORT dnskey-failures.test > dnskey-failure.txt
+
+if ! grep -q -e "OPT=15: 00 09" -e "EDE: 9" dnskey-failure.txt
+then
+ echo "Expired signature does not return EDE DNSKEY missing"
+ cat dnskey-failure.txt
+ exit 1
+fi
+
+# signed zone with RRSIGs missing
+dig @127.0.0.1 -p $UNBOUND_PORT rrsig-failures.test > rrsig-failure.txt
+
+if ! grep -q -e "OPT=15: 00 0a" -e "EDE: 10" rrsig-failure.txt
+then
+ echo "Expired signature does not return EDE RRSIGs missing"
+ cat rrsig-failure.txt
+ exit 1
+fi
+
+# signed zone with NSEC missing
+dig @127.0.0.1 -p $UNBOUND_PORT abc.nsec-failures.test > nsec-failure.txt
+
+if ! grep -q -e "OPT=15: 00 0c" -e "EDE: 12" nsec-failure.txt
+then
+ echo "Expired signature does not return EDE NSEC missing"
+ cat nsec-failure.txt
+ exit 1
+fi
+
+
+# @TODO DNSSEC indeterminate when implemented
diff --git a/testdata/ede_acl_refused.rpl b/testdata/ede_acl_refused.rpl
new file mode 100644
index 000000000000..81c9cd0a071d
--- /dev/null
+++ b/testdata/ede_acl_refused.rpl
@@ -0,0 +1,35 @@
+; config options
+server:
+ access-control: 127.0.0.0/8 refuse
+ ede: yes
+CONFIG_END
+
+SCENARIO_BEGIN Test ede-acl-refused
+; Scenario overview:
+; - query for example.com. A record with EDNS
+; - check that we get a refused answer with EDE (RFC8914) code 18 - Prohibited
+
+; Query without RD flag
+STEP 1 QUERY
+ENTRY_BEGIN
+ REPLY RD
+ SECTION QUESTION
+ example.com. IN A
+ SECTION ADDITIONAL
+ HEX_EDNSDATA_BEGIN
+ HEX_EDNSDATA_END
+ENTRY_END
+
+; Check that we got ede 18
+STEP 2 CHECK_ANSWER
+ENTRY_BEGIN
+ MATCH all ede=18
+ REPLY QR RD REFUSED
+ SECTION QUESTION
+ example.com. IN A
+ SECTION ADDITIONAL
+ HEX_EDNSDATA_BEGIN
+ HEX_EDNSDATA_END
+ENTRY_END
+
+SCENARIO_END
diff --git a/testdata/ede_cache_snoop_noth_auth.rpl b/testdata/ede_cache_snoop_noth_auth.rpl
new file mode 100644
index 000000000000..d243fdde00ac
--- /dev/null
+++ b/testdata/ede_cache_snoop_noth_auth.rpl
@@ -0,0 +1,33 @@
+; config options
+server:
+ ede: yes
+CONFIG_END
+
+SCENARIO_BEGIN Test ede-cache-snoop-not-authoritative
+; Scenario overview:
+; - query for example.com. A record with EDNS without the RD bit
+; - check that we get a refused answer with EDE (RFC8914) code 20 - Not Authoritative
+
+; Query without RD flag
+STEP 1 QUERY
+ENTRY_BEGIN
+ SECTION QUESTION
+ example.com. IN A
+ SECTION ADDITIONAL
+ HEX_EDNSDATA_BEGIN
+ HEX_EDNSDATA_END
+ENTRY_END
+
+; Check that we got ede 20
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+ MATCH all ede=20
+ REPLY QR RA REFUSED
+ SECTION QUESTION
+ example.com. IN A
+ SECTION ADDITIONAL
+ HEX_EDNSDATA_BEGIN
+ HEX_EDNSDATA_END
+ENTRY_END
+
+SCENARIO_END
diff --git a/testdata/ede_localzone_dname_expansion.rpl b/testdata/ede_localzone_dname_expansion.rpl
new file mode 100644
index 000000000000..e0540e4fbf1d
--- /dev/null
+++ b/testdata/ede_localzone_dname_expansion.rpl
@@ -0,0 +1,37 @@
+; config options
+server:
+ local-zone: example.com redirect
+ local-data: "example.com CNAME *.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aaaaaaaaaaaaaaaaaaaaaa."
+ ede: yes
+
+CONFIG_END
+
+SCENARIO_BEGIN Test ede-localzone-dname-expansion
+; Scenario overview:
+; - query for www.qhqwer.qwer.qwer.h.example.com. (a large Qname) A record with EDNS
+; - check that we get a YXDOMAIN answer with EDE (RFC8914) code 0 - Other (which adds a DNAME expansion message)
+
+; Query with RD flag
+STEP 1 QUERY
+ENTRY_BEGIN
+ REPLY RD
+ SECTION QUESTION
+ www.qhqwer.qwer.qwer.h.example.com A
+ SECTION ADDITIONAL
+ HEX_EDNSDATA_BEGIN
+ HEX_EDNSDATA_END
+ENTRY_END
+
+; Check that we got the correct answer (should be cached)
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+ MATCH all ede=0
+ REPLY QR AA RD RA YXDOMAIN
+ SECTION QUESTION
+ www.qhqwer.qwer.qwer.h.example.com A
+ SECTION ADDITIONAL
+ HEX_EDNSDATA_BEGIN
+ HEX_EDNSDATA_END
+ENTRY_END
+
+SCENARIO_END
diff --git a/testdata/edns_keepalive.rpl b/testdata/edns_keepalive.rpl
index 9d00b6cf762a..97c8f2ccaa46 100644
--- a/testdata/edns_keepalive.rpl
+++ b/testdata/edns_keepalive.rpl
@@ -47,14 +47,10 @@ STEP 1 QUERY
STEP 10 CHECK_ANSWER
ENTRY_BEGIN
- MATCH TCP ednsdata
+ MATCH TCP
REPLY RD FORMERR
SECTION QUESTION
www.example.com. IN A
- SECTION ADDITIONAL
- HEX_EDNSDATA_BEGIN
- ; Empty
- HEX_EDNSDATA_END
ENTRY_END
STEP 20 QUERY
diff --git a/testdata/ipset.tdir/ipset.conf b/testdata/ipset.tdir/ipset.conf
new file mode 100644
index 000000000000..7cc34912dd2f
--- /dev/null
+++ b/testdata/ipset.tdir/ipset.conf
@@ -0,0 +1,23 @@
+server:
+ verbosity: 3
+ num-threads: 1
+ module-config: "ipset iterator"
+ outgoing-range: 16
+ interface: 127.0.0.1
+ port: @PORT@
+ use-syslog: no
+ directory: ""
+ pidfile: "unbound.pid"
+ chroot: ""
+ username: ""
+ do-not-query-localhost: no
+ local-zone: "example.net." ipset
+stub-zone:
+ name: "example.net."
+ stub-addr: "127.0.0.1@@TOPORT@"
+stub-zone:
+ name: "example.com."
+ stub-addr: "127.0.0.1@@TOPORT@"
+ipset:
+ name-v4: atotallymadeupnamefor4
+ name-v6: atotallymadeupnamefor6
diff --git a/testdata/ipset.tdir/ipset.dsc b/testdata/ipset.tdir/ipset.dsc
new file mode 100644
index 000000000000..b7792b7e0188
--- /dev/null
+++ b/testdata/ipset.tdir/ipset.dsc
@@ -0,0 +1,16 @@
+BaseName: ipset
+Version: 1.0
+Description: mock test ipset module
+CreationDate: Wed Mar 2 13:00:38 CET 2022
+Maintainer: George Thessalonikefs
+Category:
+Component:
+CmdDepends:
+Depends:
+Help:
+Pre: ipset.pre
+Post: ipset.post
+Test: ipset.test
+AuxFiles:
+Passed:
+Failure:
diff --git a/testdata/ipset.tdir/ipset.post b/testdata/ipset.tdir/ipset.post
new file mode 100644
index 000000000000..7af512a4d374
--- /dev/null
+++ b/testdata/ipset.tdir/ipset.post
@@ -0,0 +1,14 @@
+# #-- ipset.post --#
+# source the master var file when it's there
+[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master
+# source the test var file when it's there
+[ -f .tpkg.var.test ] && source .tpkg.var.test
+#
+# do your teardown here
+. ../common.sh
+PRE="../.."
+if grep "define USE_IPSET 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi
+kill_pid $FWD_PID
+kill_pid $UNBOUND_PID
+cat unbound.log
+exit 0
diff --git a/testdata/ipset.tdir/ipset.pre b/testdata/ipset.tdir/ipset.pre
new file mode 100644
index 000000000000..ee1aedc70937
--- /dev/null
+++ b/testdata/ipset.tdir/ipset.pre
@@ -0,0 +1,33 @@
+# #-- ipset.pre--#
+# source the master var file when it's there
+[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master
+# use .tpkg.var.test for in test variable passing
+[ -f .tpkg.var.test ] && source .tpkg.var.test
+
+. ../common.sh
+
+PRE="../.."
+if grep "define USE_IPSET 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi
+
+get_random_port 2
+UNBOUND_PORT=$RND_PORT
+FWD_PORT=$(($RND_PORT + 1))
+echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test
+echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test
+
+# start forwarder
+get_ldns_testns
+$LDNS_TESTNS -p $FWD_PORT ipset.testns >fwd.log 2>&1 &
+FWD_PID=$!
+echo "FWD_PID=$FWD_PID" >> .tpkg.var.test
+
+# make config file
+sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' < ipset.conf > ub.conf
+# start unbound in the background
+$PRE/unbound -d -c ub.conf >unbound.log 2>&1 &
+UNBOUND_PID=$!
+echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test
+
+cat .tpkg.var.test
+wait_ldns_testns_up fwd.log
+wait_unbound_up unbound.log
diff --git a/testdata/ipset.tdir/ipset.test b/testdata/ipset.tdir/ipset.test
new file mode 100644
index 000000000000..9150e5e3f0bf
--- /dev/null
+++ b/testdata/ipset.tdir/ipset.test
@@ -0,0 +1,155 @@
+# #-- ipset.test --#
+# source the master var file when it's there
+[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master
+# use .tpkg.var.test for in test variable passing
+[ -f .tpkg.var.test ] && source .tpkg.var.test
+
+. ../common.sh
+PRE="../.."
+if grep "define USE_IPSET 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi
+
+# Make all the queries. They need to succeed by the way.
+echo "> dig www.example.net."
+dig @127.0.0.1 -p $UNBOUND_PORT www.example.net. | tee outfile
+echo "> check answer"
+if grep "1.1.1.1" outfile; then
+ echo "OK"
+else
+ echo "> cat logfiles"
+ cat fwd.log
+ cat unbound.log
+ echo "Not OK"
+ exit 1
+fi
+echo "> check ipset"
+if grep "ipset: add 1.1.1.1 to atotallymadeupnamefor4 for www.example.net." unbound.log; then
+ echo "ipset OK"
+else
+ echo "> cat logfiles"
+ cat fwd.log
+ cat unbound.log
+ echo "Not OK"
+ exit 1
+fi
+
+echo "> dig www.example.net. AAAA"
+dig @127.0.0.1 -p $UNBOUND_PORT www.example.net. AAAA | tee outfile
+echo "> check answer"
+if grep "::1" outfile; then
+ echo "OK"
+else
+ echo "> cat logfiles"
+ cat fwd.log
+ cat unbound.log
+ echo "Not OK"
+ exit 1
+fi
+echo "> check ipset"
+if grep "ipset: add ::1 to atotallymadeupnamefor6 for www.example.net." unbound.log; then
+ echo "ipset OK"
+else
+ echo "> cat logfiles"
+ cat fwd.log
+ cat unbound.log
+ echo "Not OK"
+ exit 1
+fi
+
+echo "> dig cname.example.net."
+dig @127.0.0.1 -p $UNBOUND_PORT cname.example.net. | tee outfile
+echo "> check answer"
+if grep "2.2.2.2" outfile; then
+ echo "OK"
+else
+ echo "> cat logfiles"
+ cat fwd.log
+ cat unbound.log
+ echo "Not OK"
+ exit 1
+fi
+echo "> check ipset"
+if grep "ipset: add 2.2.2.2 to atotallymadeupnamefor4 for target.example.net." unbound.log; then
+ echo "ipset OK"
+else
+ echo "> cat logfiles"
+ cat fwd.log
+ cat unbound.log
+ echo "Not OK"
+ exit 1
+fi
+
+echo "> dig cname.example.net. AAAA"
+dig @127.0.0.1 -p $UNBOUND_PORT cname.example.net. AAAA | tee outfile
+echo "> check answer"
+if grep "::2" outfile; then
+ echo "OK"
+else
+ echo "> cat logfiles"
+ cat fwd.log
+ cat unbound.log
+ echo "Not OK"
+ exit 1
+fi
+echo "> check ipset"
+if grep "ipset: add ::2 to atotallymadeupnamefor6 for target.example.net." unbound.log; then
+ echo "ipset OK"
+else
+ echo "> cat logfiles"
+ cat fwd.log
+ cat unbound.log
+ echo "Not OK"
+ exit 1
+fi
+
+echo "> dig outsidecname.example.net."
+dig @127.0.0.1 -p $UNBOUND_PORT outsidecname.example.net. | tee outfile
+echo "> check answer"
+if grep "3.3.3.3" outfile; then
+ echo "OK"
+else
+ echo "> cat logfiles"
+ cat fwd.log
+ cat unbound.log
+ echo "Not OK"
+ exit 1
+fi
+echo "> check ipset"
+if grep "ipset: add 3.3.3.3 to atotallymadeupnamefor4 for target.example.com." unbound.log; then
+ echo "ipset OK"
+else
+ echo "> cat logfiles"
+ cat fwd.log
+ cat unbound.log
+ echo "Not OK"
+ exit 1
+fi
+
+echo "> dig outsidecname.example.net. AAAA"
+dig @127.0.0.1 -p $UNBOUND_PORT outsidecname.example.net. AAAA | tee outfile
+echo "> check answer"
+if grep "::3" outfile; then
+ echo "OK"
+else
+ echo "> cat logfiles"
+ cat fwd.log
+ cat unbound.log
+ echo "Not OK"
+ exit 1
+fi
+echo "> check ipset"
+if grep "ipset: add ::3 to atotallymadeupnamefor6 for target.example.com." unbound.log; then
+ echo "ipset OK"
+else
+ echo "> cat logfiles"
+ cat fwd.log
+ cat unbound.log
+ echo "Not OK"
+ exit 1
+fi
+
+echo "> cat logfiles"
+cat tap.log
+cat tap.errlog
+cat fwd.log
+echo "> OK"
+exit 0
diff --git a/testdata/ipset.tdir/ipset.testns b/testdata/ipset.tdir/ipset.testns
new file mode 100644
index 000000000000..2b626e915ea7
--- /dev/null
+++ b/testdata/ipset.tdir/ipset.testns
@@ -0,0 +1,103 @@
+; nameserver test file
+$ORIGIN example.net.
+$TTL 3600
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+REPLY QR AA NOERROR
+ADJUST copy_id
+SECTION QUESTION
+www IN A
+SECTION ANSWER
+www IN A 1.1.1.1
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+REPLY QR AA NOERROR
+ADJUST copy_id
+SECTION QUESTION
+www IN AAAA
+SECTION ANSWER
+www IN AAAA ::1
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+REPLY QR AA NOERROR
+ADJUST copy_id
+SECTION QUESTION
+cname IN A
+SECTION ANSWER
+cname IN CNAME target.example.net.
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+REPLY QR AA NOERROR
+ADJUST copy_id
+SECTION QUESTION
+cname IN AAAA
+SECTION ANSWER
+cname IN CNAME target.example.net.
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+REPLY QR AA NOERROR
+ADJUST copy_id
+SECTION QUESTION
+outsidecname IN A
+SECTION ANSWER
+outsidecname IN CNAME target.example.com.
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+REPLY QR AA NOERROR
+ADJUST copy_id
+SECTION QUESTION
+outsidecname IN AAAA
+SECTION ANSWER
+outsidecname IN CNAME target.example.com.
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+REPLY QR AA NOERROR
+ADJUST copy_id
+SECTION QUESTION
+target IN A
+SECTION ANSWER
+target IN A 2.2.2.2
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+REPLY QR AA NOERROR
+ADJUST copy_id
+SECTION QUESTION
+target IN AAAA
+SECTION ANSWER
+target IN AAAA ::2
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+REPLY QR AA NOERROR
+ADJUST copy_id
+SECTION QUESTION
+target.example.com. IN A
+SECTION ANSWER
+target.example.com. IN A 3.3.3.3
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+REPLY QR AA NOERROR
+ADJUST copy_id
+SECTION QUESTION
+target.example.com. IN AAAA
+SECTION ANSWER
+target.example.com. IN AAAA ::3
+ENTRY_END
diff --git a/testdata/iter_cname_minimise.rpl b/testdata/iter_cname_minimise.rpl
new file mode 100644
index 000000000000..b61c3e344684
--- /dev/null
+++ b/testdata/iter_cname_minimise.rpl
@@ -0,0 +1,179 @@
+; config options
+server:
+ target-fetch-policy: "0 0 0 0 0"
+ qname-minimisation: yes
+ module-config: "iterator"
+
+stub-zone:
+ name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Test cname chain resolution with qname minimisation.
+
+; K.ROOT-SERVERS.NET.
+RANGE_BEGIN 0 100
+ ADDRESS 193.0.14.129
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+. IN NS
+SECTION ANSWER
+. IN NS K.ROOT-SERVERS.NET.
+SECTION ADDITIONAL
+K.ROOT-SERVERS.NET. IN A 193.0.14.129
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+com. IN NS
+SECTION AUTHORITY
+com. IN NS a.gtld-servers.net.
+SECTION ADDITIONAL
+a.gtld-servers.net. IN A 192.5.6.30
+ENTRY_END
+RANGE_END
+
+; a.gtld-servers.net.
+RANGE_BEGIN 0 100
+ ADDRESS 192.5.6.30
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+com. IN NS
+SECTION ANSWER
+com. IN NS a.gtld-servers.net.
+SECTION ADDITIONAL
+a.gtld-servers.net. IN A 192.5.6.30
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+example.com. IN NS
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.44
+ENTRY_END
+RANGE_END
+
+; ns.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.44
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.com. IN NS
+SECTION ANSWER
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.44
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+ns.example.com. IN A
+SECTION ANSWER
+ns.example.com. IN A 1.2.3.44
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+ns.example.com. IN AAAA
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+www.example.com. IN A 1.2.3.44
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. 300 IN A 10.20.30.40
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com IN A 1.2.3.44
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+c.example.com. IN A
+SECTION ANSWER
+c.example.com. 10 IN CNAME www.example.com.
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+c.example.com. IN CNAME
+SECTION ANSWER
+c.example.com. 10 IN CNAME www.example.com.
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+c.example.com. IN CNAME
+ENTRY_END
+
+STEP 20 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+c.example.com. IN CNAME
+SECTION ANSWER
+c.example.com. 10 IN CNAME www.example.com.
+ENTRY_END
+
+STEP 30 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+c.example.com. IN A
+ENTRY_END
+
+STEP 40 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+c.example.com. IN A
+SECTION ANSWER
+c.example.com. 10 IN CNAME www.example.com.
+www.example.com. 300 IN A 10.20.30.40
+ENTRY_END
+
+SCENARIO_END
diff --git a/testdata/iter_dp_ip6useless.rpl b/testdata/iter_dp_ip6useless.rpl
new file mode 100644
index 000000000000..9a7746e118ed
--- /dev/null
+++ b/testdata/iter_dp_ip6useless.rpl
@@ -0,0 +1,168 @@
+; config options
+server:
+ do-ip6: no
+ target-fetch-policy: "0 0 0 0 0"
+ qname-minimisation: no
+stub-zone:
+ name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Test iterator when doip6 is no and dp is useless with only ip6
+
+; K.ROOT-SERVERS.NET.
+RANGE_BEGIN 0 100
+ ADDRESS 193.0.14.129
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+. IN NS
+SECTION ANSWER
+. IN NS K.ROOT-SERVERS.NET.
+SECTION ADDITIONAL
+K.ROOT-SERVERS.NET. IN A 193.0.14.129
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+com. IN NS
+SECTION AUTHORITY
+com. IN NS a.gtld-servers.net.
+SECTION ADDITIONAL
+a.gtld-servers.net. IN A 192.5.6.30
+ENTRY_END
+RANGE_END
+
+; a.gtld-servers.net.
+RANGE_BEGIN 0 100
+ ADDRESS 192.5.6.30
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+com. IN NS
+SECTION ANSWER
+com. IN NS a.gtld-servers.net.
+SECTION ADDITIONAL
+a.gtld-servers.net. IN A 192.5.6.30
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+example.com. IN NS
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+; short TTL here, so it can expire
+ns.example.com. 1 IN A 1.2.3.4
+ns.example.com. 100 IN AAAA ::53
+ENTRY_END
+RANGE_END
+
+; ns.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.com. IN NS
+SECTION ANSWER
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+; short TTL here, so it can expire
+ns.example.com. 1 IN A 1.2.3.4
+ns.example.com. 100 IN AAAA ::53
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+ns.example.com. IN A
+SECTION ANSWER
+; short TTL
+ns.example.com. 1 IN A 1.2.3.4
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+ns.example.com. IN AAAA
+SECTION ANSWER
+ns.example.com. IN AAAA ::53
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. IN A 10.20.30.40
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+mail.example.com. IN A
+SECTION ANSWER
+mail.example.com. IN A 10.20.30.50
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www.example.com. IN A
+ENTRY_END
+
+; recursion happens here.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. IN A 10.20.30.40
+ENTRY_END
+
+STEP 20 TIME_PASSES ELAPSE 5.0
+
+STEP 30 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+mail.example.com. IN A
+ENTRY_END
+
+STEP 40 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+mail.example.com. IN A
+SECTION ANSWER
+mail.example.com. IN A 10.20.30.50
+ENTRY_END
+
+SCENARIO_END
diff --git a/testdata/nsid_bogus.rpl b/testdata/nsid_bogus.rpl
index 1414163f8a6a..7e92266cfa49 100644
--- a/testdata/nsid_bogus.rpl
+++ b/testdata/nsid_bogus.rpl
@@ -9,6 +9,7 @@ server:
trust-anchor-signaling: no
minimal-responses: no
nsid: "ascii_hopsa kidee"
+ ede: yes
stub-zone:
name: "."
@@ -157,7 +158,7 @@ ENTRY_END
; recursion happens here.
STEP 10 CHECK_ANSWER
ENTRY_BEGIN
-MATCH all
+MATCH all ede=9
REPLY QR RD RA DO SERVFAIL
SECTION QUESTION
www.example.com. IN A
diff --git a/testdata/root_key_sentinel.rpl b/testdata/root_key_sentinel.rpl
index 2310953adf0f..39bd9685c293 100644
--- a/testdata/root_key_sentinel.rpl
+++ b/testdata/root_key_sentinel.rpl
@@ -4,6 +4,7 @@ server:
val-override-date: "20180423171826"
target-fetch-policy: "0 0 0 0 0"
trust-anchor-signaling: no
+ ede: yes
stub-zone:
name: "."
@@ -138,7 +139,7 @@ ENTRY_END
; recursion happens here.
STEP 22 CHECK_ANSWER
ENTRY_BEGIN
-MATCH all
+MATCH all ede=6
REPLY QR RD RA DO SERVFAIL
SECTION QUESTION
root-key-sentinel-not-ta-19036. IN A
@@ -154,7 +155,7 @@ ENTRY_END
; recursion happens here.
STEP 33 CHECK_ANSWER
ENTRY_BEGIN
-MATCH all
+MATCH all ede=6
REPLY QR RD RA DO SERVFAIL
SECTION QUESTION
root-key-sentinel-is-ta-20326. IN A
diff --git a/testdata/rpz_passthru.rpl b/testdata/rpz_passthru.rpl
new file mode 100644
index 000000000000..5c8557547692
--- /dev/null
+++ b/testdata/rpz_passthru.rpl
@@ -0,0 +1,154 @@
+; config options
+server:
+ module-config: "respip validator iterator"
+ target-fetch-policy: "0 0 0 0 0"
+ qname-minimisation: no
+ access-control: 192.0.0.0/8 allow
+
+rpz:
+ name: "rpz.example.com."
+ rpz-log: yes
+ rpz-log-name: "rpz.example.com"
+ rpz-action-override: passthru
+ zonefile:
+TEMPFILE_NAME rpz.example.com
+TEMPFILE_CONTENTS rpz.example.com
+$ORIGIN example.com.
+rpz 3600 IN SOA ns1.rpz.example.com. hostmaster.rpz.example.com. (
+ 1379078166 28800 7200 604800 7200 )
+ 3600 IN NS ns1.rpz.example.com.
+ 3600 IN NS ns2.rpz.example.com.
+$ORIGIN rpz.example.com.
+c.a TXT "local data 1st zone"
+d.a A 127.0.0.1
+TEMPFILE_END
+
+rpz:
+ name: "wl.example.com."
+ rpz-log: yes
+ rpz-log-name: "wl.example.com"
+ zonefile:
+TEMPFILE_NAME wl.example.com
+TEMPFILE_CONTENTS wl.example.com
+$ORIGIN example.com.
+wl 3600 IN SOA ns1.wl.example.com. hostmaster.wl.example.com. (
+ 1379078166 28800 7200 604800 7200 )
+ 3600 IN NS ns1.wl.example.com.
+ 3600 IN NS ns2.wl.example.com.
+$ORIGIN wl.example.com.
+e.a CNAME rpz-passthru.
+TEMPFILE_END
+
+rpz:
+ name: "rpz2.example.com."
+ rpz-log: yes
+ rpz-log-name: "rpz2.example.com"
+ rpz-action-override: nxdomain
+ zonefile:
+TEMPFILE_NAME rpz2.example.com
+TEMPFILE_CONTENTS rpz2.example.com
+$ORIGIN example.com.
+rpz2 3600 IN SOA ns1.rpz.example.com. hostmaster.rpz.example.com. (
+ 1379078166 28800 7200 604800 7200 )
+ 3600 IN NS ns1.rpz.example.com.
+ 3600 IN NS ns2.rpz.example.com.
+$ORIGIN rpz2.example.com.
+c.a TXT "local data 2nd zone"
+24.0.5.0.192.rpz-client-ip A 127.0.0.1
+24.0.5.0.192.rpz-client-ip TXT "clientip 2nd zone"
+24.0.3.2.1.rpz-ip A 127.0.0.2
+TEMPFILE_END
+
+stub-zone:
+ name: "a."
+ stub-addr: 10.20.30.40
+CONFIG_END
+
+SCENARIO_BEGIN Test RPZ passthru ends processing for later triggers.
+
+; a.
+RANGE_BEGIN 0 1000
+ ADDRESS 10.20.30.40
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+c.a. IN TXT
+SECTION ANSWER
+c.a. IN TXT "answer from upstream ns"
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+d.a. IN A
+SECTION ANSWER
+d.a. IN A 1.2.3.4
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+e.a. IN A
+SECTION ANSWER
+e.a. IN A 1.2.3.4
+ENTRY_END
+RANGE_END
+
+STEP 10 QUERY ADDRESS 192.0.5.1
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+c.a. IN TXT
+ENTRY_END
+
+STEP 11 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+c.a. IN TXT
+SECTION ANSWER
+c.a. IN TXT "answer from upstream ns"
+ENTRY_END
+
+STEP 20 QUERY ADDRESS 192.0.2.1
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+d.a. IN A
+ENTRY_END
+
+STEP 21 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+d.a. IN A
+SECTION ANSWER
+d.a. IN A 1.2.3.4
+ENTRY_END
+
+STEP 30 QUERY ADDRESS 192.0.2.1
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+e.a. IN A
+ENTRY_END
+
+STEP 31 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+e.a. IN A
+SECTION ANSWER
+e.a. IN A 1.2.3.4
+ENTRY_END
+
+SCENARIO_END
diff --git a/testdata/rpz_qname.rpl b/testdata/rpz_qname.rpl
index ede6972331d0..aae55b57310b 100644
--- a/testdata/rpz_qname.rpl
+++ b/testdata/rpz_qname.rpl
@@ -6,6 +6,8 @@ server:
rpz:
name: "rpz.example.com."
+ rpz-log: yes
+ rpz-log-name: "rpz.example.com"
zonefile:
TEMPFILE_NAME rpz.example.com
TEMPFILE_CONTENTS rpz.example.com
@@ -20,10 +22,13 @@ a CNAME *. ; duplicate CNAME here on purpose
*.a TXT "wildcard local data"
b.a CNAME *.
c.a CNAME rpz-passthru.
+c.g CNAME rpz-passthru.
TEMPFILE_END
rpz:
name: "rpz2.example.com."
+ rpz-log: yes
+ rpz-log-name: "rpz2.example.com"
zonefile:
TEMPFILE_NAME rpz2.example.com
TEMPFILE_CONTENTS rpz2.example.com
@@ -39,6 +44,7 @@ e CNAME *.a.example.
*.e CNAME *.b.example.
drop CNAME rpz-drop.
tcp CNAME rpz-tcp-only.
+c.g CNAME .
TEMPFILE_END
stub-zone:
@@ -50,6 +56,9 @@ stub-zone:
stub-zone:
name: "tcp."
stub-addr: 10.20.30.60
+stub-zone:
+ name: "g."
+ stub-addr: 10.20.30.40
CONFIG_END
SCENARIO_BEGIN Test all support RPZ action for QNAME trigger
@@ -89,6 +98,16 @@ SECTION ANSWER
x.b.a. IN TXT "answer from upstream ns"
ENTRY_END
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+c.g. IN TXT
+SECTION ANSWER
+c.g. IN TXT "answer from upstream ns"
+ENTRY_END
+
RANGE_END
; example.
@@ -396,5 +415,23 @@ f.example. IN CNAME d.
d. IN TXT "local data 2nd zone"
ENTRY_END
+; check if passthru ends processing
+STEP 110 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+c.g. IN TXT
+ENTRY_END
+
+STEP 111 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+c.g. IN TXT
+SECTION ANSWER
+c.g. IN TXT "answer from upstream ns"
+ENTRY_END
+
; no answer is checked at exit of testbound.
SCENARIO_END
diff --git a/testdata/serve_expired.rpl b/testdata/serve_expired.rpl
index 167470335212..3f61019fa89f 100644
--- a/testdata/serve_expired.rpl
+++ b/testdata/serve_expired.rpl
@@ -5,6 +5,8 @@ server:
minimal-responses: no
serve-expired: yes
access-control: 127.0.0.1/32 allow_snoop
+ ede: yes
+ ede-serve-expired: yes
stub-zone:
name: "example.com"
@@ -78,6 +80,7 @@ STEP 11 TIME_PASSES ELAPSE 3601
; Query again without RD bit
STEP 30 QUERY
ENTRY_BEGIN
+ REPLY DO
SECTION QUESTION
example.com. IN A
ENTRY_END
@@ -85,8 +88,8 @@ ENTRY_END
; Check that we got a stale answer
STEP 40 CHECK_ANSWER
ENTRY_BEGIN
- MATCH all ttl
- REPLY QR RA NOERROR
+ MATCH all ttl ede=3
+ REPLY QR RA DO NOERROR
SECTION QUESTION
example.com. IN A
SECTION ANSWER
diff --git a/testdata/serve_expired_client_timeout.rpl b/testdata/serve_expired_client_timeout.rpl
index 3f3163afb823..5560aa05a8dd 100644
--- a/testdata/serve_expired_client_timeout.rpl
+++ b/testdata/serve_expired_client_timeout.rpl
@@ -6,6 +6,8 @@ server:
serve-expired: yes
serve-expired-client-timeout: 1
serve-expired-reply-ttl: 123
+ ede: yes
+ ede-serve-expired: yes
stub-zone:
name: "example.com"
@@ -83,7 +85,7 @@ STEP 11 TIME_PASSES ELAPSE 3600
; Query again
STEP 30 QUERY
ENTRY_BEGIN
- REPLY RD
+ REPLY RD DO
SECTION QUESTION
example.com. IN A
ENTRY_END
@@ -94,8 +96,8 @@ STEP 31 TIME_PASSES ELAPSE 1
; Check that we got a stale answer
STEP 40 CHECK_ANSWER
ENTRY_BEGIN
- MATCH all ttl
- REPLY QR RD RA NOERROR
+ MATCH all ttl ede=3
+ REPLY QR RD RA DO NOERROR
SECTION QUESTION
example.com. IN A
SECTION ANSWER
diff --git a/testdata/serve_expired_reply_ttl.rpl b/testdata/serve_expired_reply_ttl.rpl
index c45b8383e390..124fb874df0e 100644
--- a/testdata/serve_expired_reply_ttl.rpl
+++ b/testdata/serve_expired_reply_ttl.rpl
@@ -5,6 +5,8 @@ server:
minimal-responses: no
serve-expired: yes
serve-expired-reply-ttl: 123
+ ede: yes
+ ede-serve-expired: yes
stub-zone:
name: "example.com"
@@ -77,7 +79,7 @@ STEP 11 TIME_PASSES ELAPSE 3601
; Query again
STEP 30 QUERY
ENTRY_BEGIN
- REPLY RD
+ REPLY RD DO
SECTION QUESTION
example.com. IN A
ENTRY_END
@@ -85,8 +87,8 @@ ENTRY_END
; Check that we got a stale answer
STEP 40 CHECK_ANSWER
ENTRY_BEGIN
- MATCH all ttl
- REPLY QR RD RA NOERROR
+ MATCH all ttl ede=3
+ REPLY QR RD RA DO NOERROR
SECTION QUESTION
example.com. IN A
SECTION ANSWER
diff --git a/testdata/serve_expired_servfail.rpl b/testdata/serve_expired_servfail.rpl
index 80ffcde74666..6e3192ef081c 100644
--- a/testdata/serve_expired_servfail.rpl
+++ b/testdata/serve_expired_servfail.rpl
@@ -7,6 +7,8 @@ server:
serve-expired-client-timeout: 1800
serve-expired-reply-ttl: 123
log-servfail: yes
+ ede: yes
+ ede-serve-expired: yes
stub-zone:
@@ -94,7 +96,7 @@ STEP 11 TIME_PASSES ELAPSE 3601
; Query again
STEP 30 QUERY
ENTRY_BEGIN
- REPLY RD
+ REPLY RD DO
SECTION QUESTION
example.com. IN A
ENTRY_END
@@ -102,8 +104,8 @@ ENTRY_END
; Check that we got a stale answer
STEP 40 CHECK_ANSWER
ENTRY_BEGIN
- MATCH all ttl
- REPLY QR RD RA NOERROR
+ MATCH all ttl ede=3
+ REPLY QR RD RA DO NOERROR
SECTION QUESTION
example.com. IN A
SECTION ANSWER
diff --git a/testdata/serve_expired_zerottl.rpl b/testdata/serve_expired_zerottl.rpl
index 846435f3841c..0239b4a19440 100644
--- a/testdata/serve_expired_zerottl.rpl
+++ b/testdata/serve_expired_zerottl.rpl
@@ -5,6 +5,8 @@ server:
minimal-responses: no
serve-expired: yes
serve-expired-reply-ttl: 123
+ ede: yes
+ ede-serve-expired: yes
stub-zone:
name: "example.com"
@@ -128,7 +130,7 @@ STEP 30 TIME_PASSES ELAPSE 11
; Query with RD flag
STEP 40 QUERY
ENTRY_BEGIN
- REPLY RD
+ REPLY RD DO
SECTION QUESTION
example.com. IN A
ENTRY_END
@@ -136,8 +138,8 @@ ENTRY_END
; Check that we got the correct answer
STEP 49 CHECK_ANSWER
ENTRY_BEGIN
- MATCH all ttl
- REPLY QR RD RA NOERROR
+ MATCH all ttl ede=3
+ REPLY QR RD RA DO NOERROR
SECTION QUESTION
example.com. IN A
SECTION ANSWER
diff --git a/testdata/serve_original_ttl.rpl b/testdata/serve_original_ttl.rpl
index 630fb39a4ef0..24d01b6fee1e 100644
--- a/testdata/serve_original_ttl.rpl
+++ b/testdata/serve_original_ttl.rpl
@@ -9,6 +9,8 @@ server:
cache-min-ttl: 20
serve-expired: yes
serve-expired-reply-ttl: 123
+ ede: yes
+ ede-serve-expired: yes
stub-zone:
name: "example.com"
@@ -110,7 +112,7 @@ STEP 31 TIME_PASSES ELAPSE 3601
; Query again
STEP 40 QUERY
ENTRY_BEGIN
- REPLY
+ REPLY DO
SECTION QUESTION
example.com. IN A
ENTRY_END
@@ -118,8 +120,8 @@ ENTRY_END
; Check that we got a stale answer with the original TTL
STEP 50 CHECK_ANSWER
ENTRY_BEGIN
- MATCH all ttl
- REPLY QR RA NOERROR
+ MATCH all ttl ede=3
+ REPLY QR RA DO NOERROR
SECTION QUESTION
example.com. IN A
SECTION ANSWER
diff --git a/testdata/subnet_prefetch.crpl b/testdata/subnet_prefetch.crpl
new file mode 100644
index 000000000000..7083aba6a563
--- /dev/null
+++ b/testdata/subnet_prefetch.crpl
@@ -0,0 +1,215 @@
+; Check if the prefetch option works properly for messages stored in the global
+; cache for non-ECS clients. The prefetch query needs to result in an ECS
+; outgoing query based on the client's IP.
+
+server:
+ trust-anchor-signaling: no
+ target-fetch-policy: "0 0 0 0 0"
+ send-client-subnet: 1.2.3.4
+ max-client-subnet-ipv4: 21
+ module-config: "subnetcache iterator"
+ verbosity: 3
+ access-control: 127.0.0.1 allow_snoop
+ qname-minimisation: no
+ minimal-responses: no
+ serve-expired: yes
+ prefetch: yes
+
+stub-zone:
+ name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Test prefetch option for global cache
+
+; K.ROOT-SERVERS.NET.
+RANGE_BEGIN 0 100
+ ADDRESS 193.0.14.129
+ ENTRY_BEGIN
+ MATCH opcode qtype qname ednsdata
+ ADJUST copy_id
+ REPLY QR NOERROR
+ SECTION QUESTION
+ . IN NS
+ SECTION ANSWER
+ . IN NS K.ROOT-SERVERS.NET.
+ SECTION ADDITIONAL
+ HEX_EDNSDATA_BEGIN
+ ;; we expect to receive empty
+ HEX_EDNSDATA_END
+ K.ROOT-SERVERS.NET. IN A 193.0.14.129
+ ENTRY_END
+
+ ENTRY_BEGIN
+ MATCH opcode qtype qname
+ ADJUST copy_id
+ REPLY QR NOERROR
+ SECTION QUESTION
+ www.example.com. IN A
+ SECTION AUTHORITY
+ com. IN NS a.gtld-servers.net.
+ SECTION ADDITIONAL
+ a.gtld-servers.net. IN A 192.5.6.30
+ ENTRY_END
+RANGE_END
+
+; a.gtld-servers.net.
+RANGE_BEGIN 0 100
+ ADDRESS 192.5.6.30
+ ENTRY_BEGIN
+ MATCH opcode qtype qname ednsdata
+ ADJUST copy_id
+ REPLY QR NOERROR
+ SECTION QUESTION
+ com. IN NS
+ SECTION ANSWER
+ com. IN NS a.gtld-servers.net.
+ SECTION ADDITIONAL
+ HEX_EDNSDATA_BEGIN
+ ;; we expect to receive empty
+ HEX_EDNSDATA_END
+ a.gtld-servers.net. IN A 192.5.6.30
+ ENTRY_END
+
+ ENTRY_BEGIN
+ MATCH opcode qtype qname
+ ADJUST copy_id
+ REPLY QR NOERROR
+ SECTION QUESTION
+ www.example.com. IN A
+ SECTION AUTHORITY
+ example.com. IN NS ns.example.com.
+ SECTION ADDITIONAL
+ ns.example.com. IN A 1.2.3.4
+ ENTRY_END
+RANGE_END
+
+; ns.example.com.
+RANGE_BEGIN 0 10
+ ADDRESS 1.2.3.4
+ ENTRY_BEGIN
+ MATCH opcode qtype qname
+ ADJUST copy_id
+ REPLY QR NOERROR
+ SECTION QUESTION
+ example.com. IN NS
+ SECTION ANSWER
+ example.com. IN NS ns.example.com.
+ SECTION ADDITIONAL
+ HEX_EDNSDATA_BEGIN
+ ;; we expect to receive empty
+ HEX_EDNSDATA_END
+ ns.example.com. IN A 1.2.3.4
+ ENTRY_END
+
+ ; response to query of interest
+ ENTRY_BEGIN
+ MATCH opcode qtype qname
+ ADJUST copy_id
+ REPLY QR NOERROR
+ SECTION QUESTION
+ www.example.com. IN A
+ SECTION ANSWER
+ www.example.com. 10 IN A 10.20.30.40
+ SECTION AUTHORITY
+ example.com. IN NS ns.example.com.
+ SECTION ADDITIONAL
+ ns.example.com. IN A 1.2.3.4
+ ENTRY_END
+RANGE_END
+
+; ns.example.com.
+RANGE_BEGIN 11 100
+ ADDRESS 1.2.3.4
+ ENTRY_BEGIN
+ MATCH opcode qtype qname
+ ADJUST copy_id
+ REPLY QR NOERROR
+ SECTION QUESTION
+ example.com. IN NS
+ SECTION ANSWER
+ example.com. IN NS ns.example.com.
+ SECTION ADDITIONAL
+ HEX_EDNSDATA_BEGIN
+ ;; we expect to receive empty
+ HEX_EDNSDATA_END
+ ns.example.com. IN A 1.2.3.4
+ ENTRY_END
+
+ ; response to query of interest
+ ENTRY_BEGIN
+ MATCH opcode qtype qname ednsdata
+ ADJUST copy_id copy_ednsdata_assume_clientsubnet
+ REPLY QR NOERROR
+ SECTION QUESTION
+ www.example.com. IN A
+ SECTION ANSWER
+ www.example.com. IN A 10.20.30.40
+ SECTION AUTHORITY
+ example.com. IN NS ns.example.com.
+ SECTION ADDITIONAL
+ HEX_EDNSDATA_BEGIN
+ ; client is 127.0.0.1
+ 00 08 ; OPC
+ 00 07 ; option length
+ 00 01 ; Family
+ 15 00 ; source mask, scopemask
+ 7f 00 00 ; address
+ HEX_EDNSDATA_END
+ ns.example.com. IN A 1.2.3.4
+ ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www.example.com. IN A
+ENTRY_END
+
+; This answer should be in the global cache
+STEP 2 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. IN A 10.20.30.40
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+
+; Try to trigger a prefetch
+STEP 3 TIME_PASSES ELAPSE 11
+
+STEP 11 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www.example.com. IN A
+ENTRY_END
+
+; This expired record came from the cache and a prefetch is triggered
+STEP 12 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all ttl
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. 30 IN A 10.20.30.40
+SECTION AUTHORITY
+example.com. 3589 IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. 3589 IN A 1.2.3.4
+ENTRY_END
+
+; Allow upstream to reply to the prefetch query.
+; It can only be answered if correct ECS was derived from the client's IP.
+; Otherwise the test will fail with "messages pending".
+STEP 13 TRAFFIC
+
+SCENARIO_END
diff --git a/testdata/subnet_prefetch_with_client_ecs.crpl b/testdata/subnet_prefetch_with_client_ecs.crpl
new file mode 100644
index 000000000000..b0410255e85d
--- /dev/null
+++ b/testdata/subnet_prefetch_with_client_ecs.crpl
@@ -0,0 +1,221 @@
+; Check if the prefetch option works properly for messages stored in the global
+; cache for ECS clients. The prefetch query needs to result in an ECS
+; outgoing query using the client's ECS data.
+
+server:
+ trust-anchor-signaling: no
+ target-fetch-policy: "0 0 0 0 0"
+ send-client-subnet: 1.2.3.4
+ max-client-subnet-ipv4: 21
+ module-config: "subnetcache iterator"
+ verbosity: 3
+ access-control: 127.0.0.1 allow_snoop
+ qname-minimisation: no
+ minimal-responses: no
+ serve-expired: yes
+ prefetch: yes
+
+stub-zone:
+ name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Test prefetch option for global cache
+
+; K.ROOT-SERVERS.NET.
+RANGE_BEGIN 0 100
+ ADDRESS 193.0.14.129
+ ENTRY_BEGIN
+ MATCH opcode qtype qname ednsdata
+ ADJUST copy_id
+ REPLY QR NOERROR
+ SECTION QUESTION
+ . IN NS
+ SECTION ANSWER
+ . IN NS K.ROOT-SERVERS.NET.
+ SECTION ADDITIONAL
+ HEX_EDNSDATA_BEGIN
+ ;; we expect to receive empty
+ HEX_EDNSDATA_END
+ K.ROOT-SERVERS.NET. IN A 193.0.14.129
+ ENTRY_END
+
+ ENTRY_BEGIN
+ MATCH opcode qtype qname
+ ADJUST copy_id
+ REPLY QR NOERROR
+ SECTION QUESTION
+ www.example.com. IN A
+ SECTION AUTHORITY
+ com. IN NS a.gtld-servers.net.
+ SECTION ADDITIONAL
+ a.gtld-servers.net. IN A 192.5.6.30
+ ENTRY_END
+RANGE_END
+
+; a.gtld-servers.net.
+RANGE_BEGIN 0 100
+ ADDRESS 192.5.6.30
+ ENTRY_BEGIN
+ MATCH opcode qtype qname ednsdata
+ ADJUST copy_id
+ REPLY QR NOERROR
+ SECTION QUESTION
+ com. IN NS
+ SECTION ANSWER
+ com. IN NS a.gtld-servers.net.
+ SECTION ADDITIONAL
+ HEX_EDNSDATA_BEGIN
+ ;; we expect to receive empty
+ HEX_EDNSDATA_END
+ a.gtld-servers.net. IN A 192.5.6.30
+ ENTRY_END
+
+ ENTRY_BEGIN
+ MATCH opcode qtype qname
+ ADJUST copy_id
+ REPLY QR NOERROR
+ SECTION QUESTION
+ www.example.com. IN A
+ SECTION AUTHORITY
+ example.com. IN NS ns.example.com.
+ SECTION ADDITIONAL
+ ns.example.com. IN A 1.2.3.4
+ ENTRY_END
+RANGE_END
+
+; ns.example.com.
+RANGE_BEGIN 0 10
+ ADDRESS 1.2.3.4
+ ENTRY_BEGIN
+ MATCH opcode qtype qname
+ ADJUST copy_id
+ REPLY QR NOERROR
+ SECTION QUESTION
+ example.com. IN NS
+ SECTION ANSWER
+ example.com. IN NS ns.example.com.
+ SECTION ADDITIONAL
+ HEX_EDNSDATA_BEGIN
+ ;; we expect to receive empty
+ HEX_EDNSDATA_END
+ ns.example.com. IN A 1.2.3.4
+ ENTRY_END
+
+ ; response to query of interest
+ ENTRY_BEGIN
+ MATCH opcode qtype qname
+ ADJUST copy_id
+ REPLY QR NOERROR
+ SECTION QUESTION
+ www.example.com. IN A
+ SECTION ANSWER
+ www.example.com. 10 IN A 10.20.30.40
+ SECTION AUTHORITY
+ example.com. IN NS ns.example.com.
+ SECTION ADDITIONAL
+ ns.example.com. IN A 1.2.3.4
+ ENTRY_END
+RANGE_END
+
+; ns.example.com.
+RANGE_BEGIN 11 100
+ ADDRESS 1.2.3.4
+ ENTRY_BEGIN
+ MATCH opcode qtype qname
+ ADJUST copy_id
+ REPLY QR NOERROR
+ SECTION QUESTION
+ example.com. IN NS
+ SECTION ANSWER
+ example.com. IN NS ns.example.com.
+ SECTION ADDITIONAL
+ HEX_EDNSDATA_BEGIN
+ ;; we expect to receive empty
+ HEX_EDNSDATA_END
+ ns.example.com. IN A 1.2.3.4
+ ENTRY_END
+
+ ; response to query of interest
+ ENTRY_BEGIN
+ MATCH opcode qtype qname ednsdata
+ ADJUST copy_id copy_ednsdata_assume_clientsubnet
+ REPLY QR NOERROR
+ SECTION QUESTION
+ www.example.com. IN A
+ SECTION ANSWER
+ www.example.com. IN A 10.20.30.40
+ SECTION AUTHORITY
+ example.com. IN NS ns.example.com.
+ SECTION ADDITIONAL
+ HEX_EDNSDATA_BEGIN
+ ; client is 127.0.0.1
+ 00 08 ; OPC
+ 00 05 ; option length
+ 00 01 ; Family
+ 08 00 ; source mask, scopemask
+ 7f ; address
+ HEX_EDNSDATA_END
+ ns.example.com. IN A 1.2.3.4
+ ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www.example.com. IN A
+ENTRY_END
+
+; This answer should be in the global cache
+STEP 2 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. IN A 10.20.30.40
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+
+; Try to trigger a prefetch
+STEP 3 TIME_PASSES ELAPSE 11
+
+STEP 11 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+www.example.com. IN A
+SECTION ADDITIONAL
+HEX_EDNSDATA_BEGIN
+ 00 08 00 05 ; OPC, optlen
+ 00 01 08 00 ; ip4, source 8, scope 0
+ 7f ; 127.0.0.0/8
+HEX_EDNSDATA_END
+ENTRY_END
+
+; This expired record came from the cache and a prefetch is triggered
+STEP 12 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all ttl
+REPLY QR RD RA DO NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. 30 IN A 10.20.30.40
+SECTION AUTHORITY
+example.com. 3589 IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. 3589 IN A 1.2.3.4
+ENTRY_END
+
+; Allow upstream to reply to the prefetch query.
+; It can only be answered if correct ECS was derived from the client's IP.
+; Otherwise the test will fail with "messages pending".
+STEP 13 TRAFFIC
+
+SCENARIO_END
diff --git a/testdata/val_cnametocloser_nosig.rpl b/testdata/val_cnametocloser_nosig.rpl
index cfd0d72c8f46..6a0552ec5404 100644
--- a/testdata/val_cnametocloser_nosig.rpl
+++ b/testdata/val_cnametocloser_nosig.rpl
@@ -5,6 +5,7 @@ server:
val-override-date: "20091113091234"
fake-sha1: yes
trust-anchor-signaling: no
+ ede: yes
forward-zone:
name: "."
@@ -88,7 +89,7 @@ ENTRY_END
; recursion happens here.
STEP 10 CHECK_ANSWER
ENTRY_BEGIN
-MATCH all
+MATCH all ede=9
REPLY QR RD RA DO SERVFAIL
SECTION QUESTION
www.example.com. IN AAAA
diff --git a/testdata/val_cnametonodata_nonsec.rpl b/testdata/val_cnametonodata_nonsec.rpl
index c1346ceb491d..48158162cba6 100644
--- a/testdata/val_cnametonodata_nonsec.rpl
+++ b/testdata/val_cnametonodata_nonsec.rpl
@@ -8,6 +8,7 @@ server:
qname-minimisation: "no"
fake-sha1: yes
trust-anchor-signaling: no
+ ede: yes
stub-zone:
name: "."
@@ -254,12 +255,11 @@ ENTRY_END
; recursion happens here.
STEP 10 CHECK_ANSWER
ENTRY_BEGIN
-MATCH all
+MATCH all ede=10
REPLY QR RD RA DO SERVFAIL
SECTION QUESTION
www.example.com. IN A
SECTION ANSWER
-SECTION ADDITIONAL
ENTRY_END
SCENARIO_END
diff --git a/testdata/val_cnametoposnowc.rpl b/testdata/val_cnametoposnowc.rpl
index 343c3e2bbed8..2975bd8d2a03 100644
--- a/testdata/val_cnametoposnowc.rpl
+++ b/testdata/val_cnametoposnowc.rpl
@@ -8,6 +8,7 @@ server:
qname-minimisation: "no"
fake-sha1: yes
trust-anchor-signaling: no
+ ede: yes
stub-zone:
name: "."
@@ -253,13 +254,11 @@ ENTRY_END
; recursion happens here.
STEP 10 CHECK_ANSWER
ENTRY_BEGIN
-MATCH all
+MATCH all ede=6
REPLY QR RD RA DO SERVFAIL
SECTION QUESTION
www.example.com. IN A
SECTION ANSWER
-SECTION AUTHORITY
-SECTION ADDITIONAL
ENTRY_END
SCENARIO_END
diff --git a/testdata/val_deleg_nons.rpl b/testdata/val_deleg_nons.rpl
index 6e8f1bd83791..82348d95b7f9 100644
--- a/testdata/val_deleg_nons.rpl
+++ b/testdata/val_deleg_nons.rpl
@@ -7,6 +7,7 @@ server:
qname-minimisation: "no"
fake-sha1: yes
trust-anchor-signaling: no
+ ede: yes
stub-zone:
name: "."
@@ -261,7 +262,7 @@ ENTRY_END
; recursion happens here.
STEP 10 CHECK_ANSWER
ENTRY_BEGIN
-MATCH all
+MATCH all ede=10
REPLY QR RD RA DO SERVFAIL
SECTION QUESTION
foo.www.example.com. IN A
diff --git a/testdata/val_dnamewc.rpl b/testdata/val_dnamewc.rpl
index b011af88a4de..1a0e41ecff0b 100644
--- a/testdata/val_dnamewc.rpl
+++ b/testdata/val_dnamewc.rpl
@@ -8,6 +8,7 @@ server:
qname-minimisation: "no"
fake-sha1: yes
trust-anchor-signaling: no
+ ede: yes
stub-zone:
name: "."
@@ -256,13 +257,11 @@ ENTRY_END
; recursion happens here.
STEP 10 CHECK_ANSWER
ENTRY_BEGIN
-MATCH all
+MATCH all ede=6
REPLY QR RD RA DO SERVFAIL
SECTION QUESTION
www.sub.example.com. IN A
SECTION ANSWER
-SECTION AUTHORITY
-SECTION ADDITIONAL
ENTRY_END
SCENARIO_END
diff --git a/testdata/val_ds_cname.rpl b/testdata/val_ds_cname.rpl
index 7c3e41be3560..3b88fb5a25a6 100644
--- a/testdata/val_ds_cname.rpl
+++ b/testdata/val_ds_cname.rpl
@@ -7,6 +7,7 @@ server:
qname-minimisation: "no"
fake-sha1: yes
trust-anchor-signaling: no
+ ede: yes
stub-zone:
name: "."
@@ -195,11 +196,10 @@ ENTRY_END
; recursion happens here.
STEP 10 CHECK_ANSWER
ENTRY_BEGIN
-MATCH all
+MATCH all ede=10
REPLY QR RD RA DO SERVFAIL
SECTION QUESTION
www.example.com. IN A
-SECTION ANSWER
ENTRY_END
SCENARIO_END
diff --git a/testdata/val_faildnskey.rpl b/testdata/val_faildnskey.rpl
index 4c3139ac5e01..528082120968 100644
--- a/testdata/val_faildnskey.rpl
+++ b/testdata/val_faildnskey.rpl
@@ -7,6 +7,7 @@ server:
# test that default value of harden-dnssec-stripped is still yes.
fake-sha1: yes
trust-anchor-signaling: no
+ ede: yes
stub-zone:
name: "."
@@ -160,7 +161,7 @@ ENTRY_END
; recursion happens here.
STEP 10 CHECK_ANSWER
ENTRY_BEGIN
-MATCH all
+MATCH all ede=9
REPLY QR RD RA DO SERVFAIL
SECTION QUESTION
www.example.com. IN A
diff --git a/testdata/val_nodata_failsig.rpl b/testdata/val_nodata_failsig.rpl
index f1be6636c1e9..0c4426bc1054 100644
--- a/testdata/val_nodata_failsig.rpl
+++ b/testdata/val_nodata_failsig.rpl
@@ -7,6 +7,7 @@ server:
qname-minimisation: "no"
fake-sha1: yes
trust-anchor-signaling: no
+ ede: yes
stub-zone:
name: "."
@@ -154,13 +155,11 @@ ENTRY_END
; recursion happens here.
STEP 10 CHECK_ANSWER
ENTRY_BEGIN
-MATCH all
+MATCH all ede=6
REPLY QR RD RA DO SERVFAIL
SECTION QUESTION
www.example.com. IN A
SECTION ANSWER
-SECTION AUTHORITY
-SECTION ADDITIONAL
ENTRY_END
SCENARIO_END
diff --git a/testdata/val_nodata_failwc.rpl b/testdata/val_nodata_failwc.rpl
index f9c810951afe..3aa8212c8932 100644
--- a/testdata/val_nodata_failwc.rpl
+++ b/testdata/val_nodata_failwc.rpl
@@ -7,6 +7,8 @@ server:
qname-minimisation: "no"
fake-sha1: yes
trust-anchor-signaling: no
+ ede: yes
+
stub-zone:
name: "nsecwc.nlnetlabs.nl"
stub-addr: "185.49.140.60"
@@ -60,13 +62,11 @@ ENTRY_END
; recursion happens here.
STEP 10 CHECK_ANSWER
ENTRY_BEGIN
-MATCH all
+MATCH all ede=6
REPLY QR RD RA DO SERVFAIL
SECTION QUESTION
_25._tcp.mail.nsecwc.nlnetlabs.nl. IN TLSA
SECTION ANSWER
-SECTION AUTHORITY
-SECTION ADDITIONAL
ENTRY_END
SCENARIO_END
diff --git a/testdata/val_nokeyprime.rpl b/testdata/val_nokeyprime.rpl
index 4675a382bc99..5d3727420799 100644
--- a/testdata/val_nokeyprime.rpl
+++ b/testdata/val_nokeyprime.rpl
@@ -6,6 +6,7 @@ server:
target-fetch-policy: "0 0 0 0 0"
fake-sha1: yes
trust-anchor-signaling: no
+ ede: yes
stub-zone:
name: "."
@@ -153,7 +154,7 @@ ENTRY_END
STEP 10 CHECK_ANSWER
ENTRY_BEGIN
-MATCH all
+MATCH all ede=9
REPLY QR RD RA DO SERVFAIL
SECTION QUESTION
www.example.com. IN A
diff --git a/testdata/val_nsec3_b1_nameerror_nowc.rpl b/testdata/val_nsec3_b1_nameerror_nowc.rpl
index 6c77421a2603..0ff135af6bba 100644
--- a/testdata/val_nsec3_b1_nameerror_nowc.rpl
+++ b/testdata/val_nsec3_b1_nameerror_nowc.rpl
@@ -6,6 +6,7 @@ server:
qname-minimisation: "no"
fake-sha1: yes
trust-anchor-signaling: no
+ ede: yes
stub-zone:
name: "."
@@ -133,7 +134,7 @@ ENTRY_END
; recursion happens here.
STEP 10 CHECK_ANSWER
ENTRY_BEGIN
-MATCH all
+MATCH all ede=6
REPLY QR RD RA DO SERVFAIL
SECTION QUESTION
a.c.x.w.example. IN A
@@ -145,7 +146,6 @@ SECTION AUTHORITY
; 0p9mhaveqvm6t7vbl5lop2u3t2rp3tom.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. OSgWSm26B+cS+dDL8b5QrWr/dEWhtCsKlwKL IBHYH6blRxK9rC0bMJPwQ4mLIuw85H2EY762 BOCXJZMnpuwhpA== )
; b4um86eghhds6nea196smvmlo4ors995.example. NSEC3 1 1 12 aabbccdd ( gjeqe526plbf1g8mklp59enfd789njgi MX RRSIG )
; b4um86eghhds6nea196smvmlo4ors995.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. ZkPG3M32lmoHM6pa3D6gZFGB/rhL//Bs3Omh 5u4m/CUiwtblEVOaAKKZd7S959OeiX43aLX3 pOv0TSTyiTxIZg== )
-SECTION ADDITIONAL
ENTRY_END
SCENARIO_END
diff --git a/testdata/val_nsec3_b2_nodata_nons.rpl b/testdata/val_nsec3_b2_nodata_nons.rpl
index 43d815e76e83..b47643b25564 100644
--- a/testdata/val_nsec3_b2_nodata_nons.rpl
+++ b/testdata/val_nsec3_b2_nodata_nons.rpl
@@ -5,6 +5,7 @@ server:
target-fetch-policy: "0 0 0 0 0"
fake-sha1: yes
trust-anchor-signaling: no
+ ede: yes
stub-zone:
name: "."
@@ -127,13 +128,11 @@ ENTRY_END
; recursion happens here.
STEP 10 CHECK_ANSWER
ENTRY_BEGIN
-MATCH all
+MATCH all ede=12
REPLY QR RD RA DO SERVFAIL
SECTION QUESTION
ns1.example. IN MX
SECTION ANSWER
-SECTION AUTHORITY
-SECTION ADDITIONAL
ENTRY_END
SCENARIO_END
diff --git a/testdata/val_nsec3_entnodata_optout_badopt.rpl b/testdata/val_nsec3_entnodata_optout_badopt.rpl
index 7bf202e3abbb..b672bd6e6cc2 100644
--- a/testdata/val_nsec3_entnodata_optout_badopt.rpl
+++ b/testdata/val_nsec3_entnodata_optout_badopt.rpl
@@ -6,6 +6,7 @@ server:
target-fetch-policy: "0 0 0 0 0"
fake-sha1: yes
trust-anchor-signaling: no
+ ede: yes
stub-zone:
name: "."
@@ -186,13 +187,11 @@ ENTRY_END
; recursion happens here.
STEP 10 CHECK_ANSWER
ENTRY_BEGIN
-MATCH all
+MATCH all ede=6
REPLY QR RD RA DO SERVFAIL
SECTION QUESTION
ent.example.com. IN A
SECTION ANSWER
-SECTION AUTHORITY
-SECTION ADDITIONAL
ENTRY_END
SCENARIO_END
diff --git a/testdata/val_nsec3_nods_badsig.rpl b/testdata/val_nsec3_nods_badsig.rpl
index 1c37d21e12f5..79290d659ae7 100644
--- a/testdata/val_nsec3_nods_badsig.rpl
+++ b/testdata/val_nsec3_nods_badsig.rpl
@@ -7,6 +7,7 @@ server:
qname-minimisation: "no"
fake-sha1: yes
trust-anchor-signaling: no
+ ede: yes
stub-zone:
name: "."
@@ -226,13 +227,11 @@ ENTRY_END
; recursion happens here.
STEP 10 CHECK_ANSWER
ENTRY_BEGIN
-MATCH all
+MATCH all ede=7
REPLY QR RD RA DO SERVFAIL
SECTION QUESTION
www.sub.example.com. IN A
SECTION ANSWER
-SECTION AUTHORITY
-SECTION ADDITIONAL
ENTRY_END
SCENARIO_END
diff --git a/testdata/val_nx_failwc.rpl b/testdata/val_nx_failwc.rpl
index eb2f5ba7e421..645a6b4c9728 100644
--- a/testdata/val_nx_failwc.rpl
+++ b/testdata/val_nx_failwc.rpl
@@ -7,6 +7,8 @@ server:
qname-minimisation: "no"
fake-sha1: yes
trust-anchor-signaling: no
+ ede: yes
+
stub-zone:
name: "nsecwc.nlnetlabs.nl"
stub-addr: "185.49.140.60"
@@ -58,13 +60,11 @@ ENTRY_END
; recursion happens here.
STEP 10 CHECK_ANSWER
ENTRY_BEGIN
-MATCH all
+MATCH all ede=6
REPLY QR RD RA DO SERVFAIL
SECTION QUESTION
a.nsecwc.nlnetlabs.nl. IN TXT
SECTION ANSWER
-SECTION AUTHORITY
-SECTION ADDITIONAL
ENTRY_END
SCENARIO_END
diff --git a/testdata/val_nx_overreach.rpl b/testdata/val_nx_overreach.rpl
index c63d4da5c3d8..e5046bc1a445 100644
--- a/testdata/val_nx_overreach.rpl
+++ b/testdata/val_nx_overreach.rpl
@@ -7,6 +7,7 @@ server:
qname-minimisation: "no"
fake-sha1: yes
trust-anchor-signaling: no
+ ede: yes
stub-zone:
name: "."
@@ -154,13 +155,11 @@ ENTRY_END
; recursion happens here.
STEP 10 CHECK_ANSWER
ENTRY_BEGIN
-MATCH all
+MATCH all ede=6
REPLY QR RD RA DO SERVFAIL
SECTION QUESTION
www.example.com. IN A
SECTION ANSWER
-SECTION AUTHORITY
-SECTION ADDITIONAL
ENTRY_END
SCENARIO_END
diff --git a/testdata/val_secds_nosig.rpl b/testdata/val_secds_nosig.rpl
index 453cfa6ad496..69f83a393c10 100644
--- a/testdata/val_secds_nosig.rpl
+++ b/testdata/val_secds_nosig.rpl
@@ -6,6 +6,7 @@ server:
target-fetch-policy: "0 0 0 0 0"
fake-sha1: yes
trust-anchor-signaling: no
+ ede: yes
stub-zone:
name: "."
@@ -223,7 +224,7 @@ ENTRY_END
; recursion happens here.
STEP 10 CHECK_ANSWER
ENTRY_BEGIN
-MATCH all
+MATCH all ede=10
REPLY QR RD RA DO SERVFAIL
SECTION QUESTION
www.sub.example.com. IN A
diff --git a/testdata/val_ta_algo_missing.rpl b/testdata/val_ta_algo_missing.rpl
index a905c223bb20..9efb24266c05 100644
--- a/testdata/val_ta_algo_missing.rpl
+++ b/testdata/val_ta_algo_missing.rpl
@@ -10,6 +10,7 @@ server:
harden-algo-downgrade: yes
fake-sha1: yes
trust-anchor-signaling: no
+ ede: yes
stub-zone:
name: "."
@@ -165,7 +166,7 @@ ENTRY_END
; recursion happens here.
STEP 10 CHECK_ANSWER
ENTRY_BEGIN
-MATCH all
+MATCH all ede=9
REPLY QR RD RA DO SERVFAIL
SECTION QUESTION
www.example.com. IN A
diff --git a/util/config_file.c b/util/config_file.c
index 969d664b4795..69e671639d7d 100644
--- a/util/config_file.c
+++ b/util/config_file.c
@@ -195,6 +195,7 @@ config_create(void)
cfg->use_systemd = 0;
cfg->do_daemonize = 1;
cfg->if_automatic = 0;
+ cfg->if_automatic_ports = NULL;
cfg->so_rcvbuf = 0;
cfg->so_sndbuf = 0;
cfg->so_reuseport = REUSEPORT_DEFAULT;
@@ -267,6 +268,7 @@ config_create(void)
cfg->serve_expired_ttl_reset = 0;
cfg->serve_expired_reply_ttl = 30;
cfg->serve_expired_client_timeout = 0;
+ cfg->ede_serve_expired = 0;
cfg->serve_original_ttl = 0;
cfg->zonemd_permissive_mode = 0;
cfg->add_holddown = 30*24*3600;
@@ -375,6 +377,7 @@ config_create(void)
cfg->ipset_name_v4 = NULL;
cfg->ipset_name_v6 = NULL;
#endif
+ cfg->ede = 0;
return cfg;
error_exit:
config_delete(cfg);
@@ -476,7 +479,7 @@ int config_set_option(struct config_file* cfg, const char* opt,
else if(atoi(val) == 0)
return 0;
else cfg->stat_interval = atoi(val);
- } else if(strcmp(opt, "num_threads:") == 0) {
+ } else if(strcmp(opt, "num-threads:") == 0) {
/* not supported, library must have 1 thread in bgworker */
return 0;
} else if(strcmp(opt, "outgoing-port-permit:") == 0) {
@@ -543,6 +546,7 @@ int config_set_option(struct config_file* cfg, const char* opt,
else S_STR("ssl-cert-bundle:", tls_cert_bundle)
else S_STR("tls-cert-bundle:", tls_cert_bundle)
else S_YNO("tls-win-cert:", tls_win_cert)
+ else S_YNO("tls-system-cert:", tls_win_cert)
else S_STRLIST("additional-ssl-port:", tls_additional_port)
else S_STRLIST("additional-tls-port:", tls_additional_port)
else S_STRLIST("tls-additional-ports:", tls_additional_port)
@@ -559,6 +563,7 @@ int config_set_option(struct config_file* cfg, const char* opt,
else S_YNO("http-nodelay:", http_nodelay)
else S_YNO("http-notls-downstream:", http_notls_downstream)
else S_YNO("interface-automatic:", if_automatic)
+ else S_STR("interface-automatic-ports:", if_automatic_ports)
else S_YNO("use-systemd:", use_systemd)
else S_YNO("do-daemonize:", do_daemonize)
else S_NUMBER_NONZERO("port:", port)
@@ -668,6 +673,8 @@ int config_set_option(struct config_file* cfg, const char* opt,
else if(strcmp(opt, "serve-expired-reply-ttl:") == 0)
{ IS_NUMBER_OR_ZERO; cfg->serve_expired_reply_ttl = atoi(val); SERVE_EXPIRED_REPLY_TTL=(time_t)cfg->serve_expired_reply_ttl;}
else S_NUMBER_OR_ZERO("serve-expired-client-timeout:", serve_expired_client_timeout)
+ else S_YNO("ede:", ede)
+ else S_YNO("ede-serve-expired:", ede_serve_expired)
else S_YNO("serve-original-ttl:", serve_original_ttl)
else S_STR("val-nsec3-keysize-iterations:", val_nsec3_key_iterations)
else S_YNO("zonemd-permissive-mode:", zonemd_permissive_mode)
@@ -990,6 +997,7 @@ config_get_option(struct config_file* cfg, const char* opt,
else O_IFC(opt, "interface", num_ifs, ifs)
else O_IFC(opt, "outgoing-interface", num_out_ifs, out_ifs)
else O_YNO(opt, "interface-automatic", if_automatic)
+ else O_STR(opt, "interface-automatic-ports", if_automatic_ports)
else O_DEC(opt, "port", port)
else O_DEC(opt, "outgoing-range", outgoing_num_ports)
else O_DEC(opt, "outgoing-num-tcp", outgoing_num_tcp)
@@ -1049,6 +1057,7 @@ config_get_option(struct config_file* cfg, const char* opt,
else O_STR(opt, "ssl-cert-bundle", tls_cert_bundle)
else O_STR(opt, "tls-cert-bundle", tls_cert_bundle)
else O_YNO(opt, "tls-win-cert", tls_win_cert)
+ else O_YNO(opt, "tls-system-cert", tls_win_cert)
else O_LST(opt, "additional-ssl-port", tls_additional_port)
else O_LST(opt, "additional-tls-port", tls_additional_port)
else O_LST(opt, "tls-additional-ports", tls_additional_port)
@@ -1108,6 +1117,8 @@ config_get_option(struct config_file* cfg, const char* opt,
else O_YNO(opt, "serve-expired-ttl-reset", serve_expired_ttl_reset)
else O_DEC(opt, "serve-expired-reply-ttl", serve_expired_reply_ttl)
else O_DEC(opt, "serve-expired-client-timeout", serve_expired_client_timeout)
+ else O_YNO(opt, "ede", ede)
+ else O_YNO(opt, "ede-serve-expired", ede_serve_expired)
else O_YNO(opt, "serve-original-ttl", serve_original_ttl)
else O_STR(opt, "val-nsec3-keysize-iterations",val_nsec3_key_iterations)
else O_YNO(opt, "zonemd-permissive-mode", zonemd_permissive_mode)
@@ -1534,6 +1545,7 @@ config_delete(struct config_file* cfg)
free(cfg->directory);
free(cfg->logfile);
free(cfg->pidfile);
+ free(cfg->if_automatic_ports);
free(cfg->target_fetch_policy);
free(cfg->ssl_service_key);
free(cfg->ssl_service_pem);
@@ -2482,7 +2494,7 @@ char* cfg_ptr_reverse(char* str)
while(*ip_end && isspace((unsigned char)*ip_end))
ip_end++;
if(name>ip_end) {
- snprintf(buf+strlen(buf), sizeof(buf)-strlen(buf), "%.*s",
+ snprintf(buf+strlen(buf), sizeof(buf)-strlen(buf), "%.*s",
(int)(name-ip_end), ip_end);
}
snprintf(buf+strlen(buf), sizeof(buf)-strlen(buf), " PTR %s", name);
@@ -2553,126 +2565,6 @@ void w_config_adjust_directory(struct config_file* cfg)
}
#endif /* UB_ON_WINDOWS */
-void errinf(struct module_qstate* qstate, const char* str)
-{
- struct config_strlist* p;
- if((qstate->env->cfg->val_log_level < 2 && !qstate->env->cfg->log_servfail) || !str)
- return;
- p = (struct config_strlist*)regional_alloc(qstate->region, sizeof(*p));
- if(!p) {
- log_err("malloc failure in validator-error-info string");
- return;
- }
- p->next = NULL;
- p->str = regional_strdup(qstate->region, str);
- if(!p->str) {
- log_err("malloc failure in validator-error-info string");
- return;
- }
- /* add at end */
- if(qstate->errinf) {
- struct config_strlist* q = qstate->errinf;
- while(q->next)
- q = q->next;
- q->next = p;
- } else qstate->errinf = p;
-}
-
-void errinf_origin(struct module_qstate* qstate, struct sock_list *origin)
-{
- struct sock_list* p;
- if(qstate->env->cfg->val_log_level < 2 && !qstate->env->cfg->log_servfail)
- return;
- for(p=origin; p; p=p->next) {
- char buf[256];
- if(p == origin)
- snprintf(buf, sizeof(buf), "from ");
- else snprintf(buf, sizeof(buf), "and ");
- if(p->len == 0)
- snprintf(buf+strlen(buf), sizeof(buf)-strlen(buf),
- "cache");
- else
- addr_to_str(&p->addr, p->len, buf+strlen(buf),
- sizeof(buf)-strlen(buf));
- errinf(qstate, buf);
- }
-}
-
-char* errinf_to_str_bogus(struct module_qstate* qstate)
-{
- char buf[20480];
- char* p = buf;
- size_t left = sizeof(buf);
- struct config_strlist* s;
- char dname[LDNS_MAX_DOMAINLEN+1];
- char t[16], c[16];
- sldns_wire2str_type_buf(qstate->qinfo.qtype, t, sizeof(t));
- sldns_wire2str_class_buf(qstate->qinfo.qclass, c, sizeof(c));
- dname_str(qstate->qinfo.qname, dname);
- snprintf(p, left, "validation failure <%s %s %s>:", dname, t, c);
- left -= strlen(p); p += strlen(p);
- if(!qstate->errinf)
- snprintf(p, left, " misc failure");
- else for(s=qstate->errinf; s; s=s->next) {
- snprintf(p, left, " %s", s->str);
- left -= strlen(p); p += strlen(p);
- }
- p = strdup(buf);
- if(!p)
- log_err("malloc failure in errinf_to_str");
- return p;
-}
-
-char* errinf_to_str_servfail(struct module_qstate* qstate)
-{
- char buf[20480];
- char* p = buf;
- size_t left = sizeof(buf);
- struct config_strlist* s;
- char dname[LDNS_MAX_DOMAINLEN+1];
- char t[16], c[16];
- sldns_wire2str_type_buf(qstate->qinfo.qtype, t, sizeof(t));
- sldns_wire2str_class_buf(qstate->qinfo.qclass, c, sizeof(c));
- dname_str(qstate->qinfo.qname, dname);
- snprintf(p, left, "SERVFAIL <%s %s %s>:", dname, t, c);
- left -= strlen(p); p += strlen(p);
- if(!qstate->errinf)
- snprintf(p, left, " misc failure");
- else for(s=qstate->errinf; s; s=s->next) {
- snprintf(p, left, " %s", s->str);
- left -= strlen(p); p += strlen(p);
- }
- p = strdup(buf);
- if(!p)
- log_err("malloc failure in errinf_to_str");
- return p;
-}
-
-void errinf_rrset(struct module_qstate* qstate, struct ub_packed_rrset_key *rr)
-{
- char buf[1024];
- char dname[LDNS_MAX_DOMAINLEN+1];
- char t[16], c[16];
- if((qstate->env->cfg->val_log_level < 2 && !qstate->env->cfg->log_servfail) || !rr)
- return;
- sldns_wire2str_type_buf(ntohs(rr->rk.type), t, sizeof(t));
- sldns_wire2str_class_buf(ntohs(rr->rk.rrset_class), c, sizeof(c));
- dname_str(rr->rk.dname, dname);
- snprintf(buf, sizeof(buf), "for <%s %s %s>", dname, t, c);
- errinf(qstate, buf);
-}
-
-void errinf_dname(struct module_qstate* qstate, const char* str, uint8_t* dname)
-{
- char b[1024];
- char buf[LDNS_MAX_DOMAINLEN+1];
- if((qstate->env->cfg->val_log_level < 2 && !qstate->env->cfg->log_servfail) || !str || !dname)
- return;
- dname_str(dname, buf);
- snprintf(b, sizeof(b), "%s %s", str, buf);
- errinf(qstate, b);
-}
-
int options_remote_is_address(struct config_file* cfg)
{
if(!cfg->remote_control_enable) return 0;
diff --git a/util/config_file.h b/util/config_file.h
index c7c9a0a48e6b..0b457e3476b9 100644
--- a/util/config_file.h
+++ b/util/config_file.h
@@ -41,6 +41,7 @@
#ifndef UTIL_CONFIG_FILE_H
#define UTIL_CONFIG_FILE_H
+#include "sldns/rrdef.h"
struct config_stub;
struct config_auth;
struct config_view;
@@ -205,6 +206,8 @@ struct config_file {
/** automatic interface for incoming messages. Uses ipv6 remapping,
* and recvmsg/sendmsg ancillary data to detect interfaces, boolean */
int if_automatic;
+ /** extra ports to open if if_automatic enabled, or NULL for default */
+ char* if_automatic_ports;
/** SO_RCVBUF size to set on port 53 UDP socket */
size_t so_rcvbuf;
/** SO_SNDBUF size to set on port 53 UDP socket */
@@ -404,6 +407,8 @@ struct config_file {
/** serve expired entries only after trying to update the entries and this
* timeout (in milliseconds) is reached */
int serve_expired_client_timeout;
+ /** serve EDE code 3 - Stale Answer (RFC8914) for expired entries */
+ int ede_serve_expired;
/** serve original TTLs rather than decrementing ones */
int serve_original_ttl;
/** nsec3 maximum iterations per key size, string */
@@ -677,6 +682,8 @@ struct config_file {
char* ipset_name_v4;
char* ipset_name_v6;
#endif
+ /** respond with Extended DNS Errors (RFC8914) */
+ int ede;
};
/** from cfg username, after daemonize setup performed */
@@ -1240,56 +1247,6 @@ char* fname_after_chroot(const char* fname, struct config_file* cfg,
char* cfg_ptr_reverse(char* str);
/**
- * Append text to the error info for validation.
- * @param qstate: query state.
- * @param str: copied into query region and appended.
- * Failures to allocate are logged.
- */
-void errinf(struct module_qstate* qstate, const char* str);
-
-/**
- * Append text to error info: from 1.2.3.4
- * @param qstate: query state.
- * @param origin: sock list with origin of trouble.
- * Every element added.
- * If NULL: nothing is added.
- * if 0len element: 'from cache' is added.
- */
-void errinf_origin(struct module_qstate* qstate, struct sock_list *origin);
-
-/**
- * Append text to error info: for RRset name type class
- * @param qstate: query state.
- * @param rr: rrset_key.
- */
-void errinf_rrset(struct module_qstate* qstate, struct ub_packed_rrset_key *rr);
-
-/**
- * Append text to error info: str dname
- * @param qstate: query state.
- * @param str: explanation string
- * @param dname: the dname.
- */
-void errinf_dname(struct module_qstate* qstate, const char* str,
- uint8_t* dname);
-
-/**
- * Create error info in string. For validation failures.
- * @param qstate: query state.
- * @return string or NULL on malloc failure (already logged).
- * This string is malloced and has to be freed by caller.
- */
-char* errinf_to_str_bogus(struct module_qstate* qstate);
-
-/**
- * Create error info in string. For other servfails.
- * @param qstate: query state.
- * @return string or NULL on malloc failure (already logged).
- * This string is malloced and has to be freed by caller.
- */
-char* errinf_to_str_servfail(struct module_qstate* qstate);
-
-/**
* Used during options parsing
*/
struct config_parser_state {
diff --git a/util/configlexer.c b/util/configlexer.c
index dc4afc774b75..62302e1f5c7a 100644
--- a/util/configlexer.c
+++ b/util/configlexer.c
@@ -354,8 +354,8 @@ static void yynoreturn yy_fatal_error ( const char* msg );
(yy_hold_char) = *yy_cp; \
*yy_cp = '\0'; \
(yy_c_buf_p) = yy_cp;
-#define YY_NUM_RULES 358
-#define YY_END_OF_BUFFER 359
+#define YY_NUM_RULES 362
+#define YY_END_OF_BUFFER 363
/* This struct is not used in this scanner,
but its presence is necessary. */
struct yy_trans_info
@@ -363,399 +363,404 @@ struct yy_trans_info
flex_int32_t yy_verify;
flex_int32_t yy_nxt;
};
-static const flex_int16_t yy_accept[3558] =
+static const flex_int16_t yy_accept[3593] =
{ 0,
- 1, 1, 332, 332, 336, 336, 340, 340, 344, 344,
- 1, 1, 348, 348, 352, 352, 359, 356, 1, 330,
- 330, 357, 2, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 357, 332, 333, 333, 334,
- 357, 336, 337, 337, 338, 357, 343, 340, 341, 341,
- 342, 357, 344, 345, 345, 346, 357, 355, 331, 2,
- 335, 355, 357, 351, 348, 349, 349, 350, 357, 352,
- 353, 353, 354, 357, 356, 0, 1, 2, 2, 2,
- 2, 356, 356, 356, 356, 356, 356, 356, 356, 356,
-
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 332,
- 0, 336, 0, 343, 0, 340, 344, 0, 355, 0,
- 2, 2, 355, 351, 0, 348, 352, 0, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
-
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 355, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
-
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 130,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 140, 356, 356, 356, 356, 356, 356, 356, 355, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
-
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 112, 356,
- 329, 356, 356, 356, 356, 356, 356, 356, 356, 8,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
-
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 131, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 145, 356, 356, 355, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
-
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 322, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
-
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 355,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 67, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 251, 356, 14,
- 15, 356, 19, 18, 356, 356, 235, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
-
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 138, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 233, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 3, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
-
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 355, 356, 356,
- 356, 356, 356, 356, 356, 316, 356, 356, 315, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 339, 356,
-
- 356, 356, 356, 356, 356, 356, 356, 66, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 70, 356, 285, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 323, 324, 356, 356,
- 356, 356, 356, 356, 356, 356, 71, 356, 356, 139,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 134, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 222, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 21, 356,
-
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 165, 356, 356, 356, 356, 356, 355, 339, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 110,
- 356, 356, 356, 356, 356, 356, 356, 293, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 191, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
-
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 164, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 109, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 35, 356, 356, 356, 356, 356,
-
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 36, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 68, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 137, 356, 356, 356, 355, 356,
- 356, 356, 356, 356, 129, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 69, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 255, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 192, 356, 356,
-
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 57, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 273, 356, 356, 356, 356, 356, 356,
-
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 61, 356, 62, 356, 356, 356,
- 356, 356, 113, 356, 114, 356, 356, 356, 356, 356,
- 111, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 7, 356, 356, 356, 356, 355, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 244, 356, 356,
- 356, 356, 168, 356, 356, 356, 356, 356, 356, 356,
-
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 256,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 48,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 58,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 214, 356, 213, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
-
- 356, 356, 356, 356, 356, 356, 356, 16, 17, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 72, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 221, 356, 356, 356,
- 356, 356, 356, 116, 356, 115, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 205, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 146, 356, 356, 356, 355, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 104, 356, 356, 356,
-
- 356, 356, 356, 356, 356, 356, 92, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 234, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 97, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 65, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 208, 209, 356, 356, 356,
-
- 287, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 6, 356, 356, 356, 356, 356,
- 356, 356, 306, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 291, 356, 356, 356, 356, 356, 356, 356, 317,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 45, 356, 356, 356, 356, 47,
- 356, 356, 356, 93, 356, 356, 356, 356, 356, 55,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
-
- 356, 355, 356, 201, 356, 356, 356, 141, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 226, 356,
- 202, 356, 356, 356, 241, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 56, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 143, 122, 356, 123,
- 356, 356, 356, 356, 121, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 161, 356, 356, 53, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 272, 356, 356, 356, 356,
-
- 356, 356, 356, 356, 356, 203, 356, 356, 356, 356,
- 356, 206, 356, 212, 356, 356, 356, 356, 356, 356,
- 240, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 108, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 135, 356,
- 356, 356, 356, 356, 356, 356, 356, 63, 356, 356,
- 356, 29, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 20, 356, 356, 356, 356, 356,
- 356, 30, 39, 356, 173, 356, 356, 356, 356, 356,
-
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 199,
- 356, 356, 355, 356, 356, 356, 356, 356, 356, 80,
- 82, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 295, 356, 356, 356, 356, 252,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 124, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 160, 356, 49, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
-
- 310, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 167, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 304, 356, 356, 356, 232, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 320,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 185, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 117, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 180, 356, 193, 356, 356,
-
- 356, 356, 356, 356, 356, 355, 356, 149, 356, 356,
- 356, 356, 356, 103, 356, 356, 356, 356, 224, 356,
- 356, 356, 356, 356, 356, 242, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 264, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 142, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 184, 356, 356, 356, 356, 356, 356, 83, 356,
- 84, 356, 356, 356, 356, 356, 356, 64, 313, 356,
- 356, 356, 356, 356, 91, 194, 356, 215, 356, 245,
-
- 356, 356, 207, 288, 356, 356, 356, 356, 356, 356,
- 76, 356, 196, 356, 356, 356, 356, 356, 356, 9,
- 356, 356, 356, 356, 356, 107, 356, 356, 356, 356,
- 356, 277, 356, 356, 356, 356, 223, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 355, 356, 356, 356, 356, 183, 356, 356, 356, 356,
-
- 356, 356, 356, 356, 356, 356, 169, 356, 294, 356,
- 356, 356, 356, 356, 263, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 236, 356, 356, 356,
- 356, 356, 286, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 166, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 314, 356, 195,
- 356, 356, 356, 356, 356, 356, 356, 356, 75, 77,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 106, 356, 356, 356, 356, 356, 275, 356, 356, 356,
-
- 356, 290, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 228, 37, 31, 33, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 38, 356, 32, 34, 356, 356, 356, 356, 356,
- 356, 356, 356, 102, 356, 179, 356, 356, 356, 356,
- 356, 356, 356, 355, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 230, 227, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 74, 356, 356, 356, 144,
- 356, 125, 356, 356, 356, 356, 356, 356, 356, 356,
-
- 356, 356, 162, 50, 356, 356, 356, 347, 13, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 308, 356, 311, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 12, 356, 356, 22, 356,
- 356, 356, 356, 356, 356, 281, 356, 356, 356, 356,
- 292, 356, 356, 356, 356, 78, 356, 238, 356, 356,
- 356, 356, 356, 229, 356, 356, 73, 356, 356, 356,
- 356, 356, 356, 23, 356, 356, 46, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 178,
- 177, 356, 356, 347, 356, 356, 356, 356, 356, 356,
-
- 356, 356, 356, 231, 225, 356, 243, 356, 356, 296,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 85, 356, 356, 356, 356, 356,
- 276, 356, 356, 356, 356, 211, 356, 356, 356, 356,
- 356, 237, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 283, 356, 356, 356, 318, 319, 175, 356, 356,
- 356, 79, 356, 356, 356, 356, 186, 356, 356, 356,
- 118, 120, 119, 356, 356, 356, 25, 356, 356, 170,
-
- 356, 172, 356, 216, 356, 356, 356, 356, 176, 356,
- 356, 356, 356, 246, 356, 356, 356, 356, 356, 356,
- 356, 151, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 254, 356, 356, 356, 356, 356,
- 356, 356, 327, 356, 27, 356, 289, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 89, 217, 356, 356, 356, 274, 356,
- 312, 356, 210, 356, 356, 356, 356, 356, 284, 59,
- 356, 356, 356, 356, 356, 356, 4, 356, 356, 356,
- 356, 133, 356, 150, 356, 356, 356, 190, 356, 356,
-
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 249, 40, 41, 356,
- 356, 356, 356, 356, 356, 356, 297, 356, 356, 356,
- 356, 356, 356, 356, 262, 356, 356, 356, 356, 356,
- 356, 356, 356, 220, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 88, 356,
- 60, 356, 280, 356, 250, 356, 356, 356, 356, 356,
- 11, 356, 356, 356, 356, 356, 356, 356, 356, 132,
- 356, 356, 356, 356, 356, 218, 94, 356, 356, 43,
- 356, 356, 356, 356, 356, 356, 356, 356, 182, 356,
-
- 356, 356, 356, 356, 356, 356, 153, 356, 356, 356,
- 356, 253, 356, 356, 356, 356, 356, 261, 356, 356,
- 356, 356, 147, 356, 356, 356, 126, 128, 127, 356,
- 356, 356, 96, 100, 95, 163, 356, 356, 356, 356,
- 86, 282, 356, 356, 356, 356, 356, 356, 10, 356,
- 356, 356, 356, 356, 278, 321, 356, 356, 356, 356,
- 356, 356, 326, 42, 356, 356, 356, 356, 356, 181,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 101, 99, 356, 54, 356,
-
- 356, 87, 309, 356, 356, 356, 356, 24, 356, 356,
- 356, 356, 356, 204, 356, 356, 356, 356, 356, 356,
- 219, 356, 356, 356, 356, 356, 356, 356, 356, 200,
- 356, 356, 171, 81, 356, 356, 356, 356, 356, 298,
- 356, 356, 356, 356, 356, 356, 356, 258, 356, 356,
- 257, 148, 356, 356, 98, 51, 356, 154, 155, 158,
- 159, 156, 157, 90, 307, 356, 356, 279, 136, 356,
- 356, 356, 26, 356, 174, 356, 356, 356, 356, 198,
- 356, 248, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
-
- 356, 356, 188, 187, 44, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 305, 356, 356,
- 356, 356, 105, 356, 247, 356, 271, 302, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 328,
- 356, 52, 5, 356, 356, 239, 356, 356, 303, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 259, 28,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 260, 356, 356, 356, 152, 356, 356, 356,
- 356, 356, 356, 356, 356, 189, 356, 197, 356, 356,
-
- 356, 356, 356, 356, 356, 356, 356, 299, 356, 356,
- 356, 356, 356, 356, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 325, 356, 356, 267, 356,
- 356, 356, 356, 356, 300, 356, 356, 356, 356, 356,
- 356, 301, 356, 356, 356, 265, 356, 268, 269, 356,
- 356, 356, 356, 356, 266, 270, 0
+ 1, 1, 336, 336, 340, 340, 344, 344, 348, 348,
+ 1, 1, 352, 352, 356, 356, 363, 360, 1, 334,
+ 334, 361, 2, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 361, 336, 337, 337, 338,
+ 361, 340, 341, 341, 342, 361, 347, 344, 345, 345,
+ 346, 361, 348, 349, 349, 350, 361, 359, 335, 2,
+ 339, 359, 361, 355, 352, 353, 353, 354, 361, 356,
+ 357, 357, 358, 361, 360, 0, 1, 2, 2, 2,
+ 2, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 336,
+ 0, 340, 0, 347, 0, 344, 348, 0, 359, 0,
+ 2, 2, 359, 355, 0, 352, 356, 0, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 359, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+
+ 360, 360, 360, 360, 333, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 132, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 142, 360, 360, 360, 360, 360, 360,
+ 360, 359, 360, 360, 360, 360, 360, 360, 360, 360,
+
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 114, 360, 332, 360, 360, 360, 360, 360,
+ 360, 360, 360, 8, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 133, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 147, 360,
+ 360, 359, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 325, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 359, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 69, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 254, 360, 14, 15, 360, 19, 18,
+ 360, 360, 238, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 140, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 236, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 3, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 359, 360, 360, 360, 360,
+ 360, 360, 360, 319, 360, 360, 318, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+
+ 360, 360, 360, 360, 360, 360, 360, 343, 360, 360,
+ 360, 360, 360, 360, 360, 360, 68, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 72, 360, 288, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 326, 327, 360, 360, 360,
+ 360, 360, 360, 360, 360, 73, 360, 360, 141, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 136, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 225, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+
+ 360, 360, 360, 360, 360, 360, 360, 21, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 167, 360, 360, 360, 360, 360, 359, 343, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 112,
+ 360, 360, 360, 360, 360, 360, 360, 296, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 194, 360, 360, 360,
+
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 166, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 111, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+
+ 360, 360, 360, 360, 360, 35, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 36, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 70, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 139, 360, 360, 360,
+ 359, 360, 360, 360, 360, 360, 131, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 71, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 258, 360, 360, 360, 360,
+
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 195, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 58, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+
+ 360, 360, 360, 360, 360, 360, 276, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 63, 360, 64,
+ 360, 360, 360, 360, 360, 115, 360, 116, 360, 360,
+ 360, 360, 360, 113, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 7, 360, 360,
+ 360, 360, 359, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+
+ 360, 247, 360, 360, 360, 360, 170, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 259, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 49, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 59, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 217,
+ 360, 216, 360, 360, 360, 360, 360, 360, 360, 360,
+
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 16, 17, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 74, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 224, 360, 360, 360, 360, 360, 360, 118, 360,
+ 117, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 208, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 148, 360, 360,
+
+ 360, 359, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 106, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 94, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 237, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 99,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 67, 360, 360, 360, 360, 360, 360,
+
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 211, 212, 360, 360, 360, 290, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 6, 360, 360, 360, 360, 360, 360, 360, 309,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 294, 360,
+ 360, 360, 360, 360, 360, 360, 320, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 46, 360, 360, 360, 360, 360, 48, 360, 360,
+
+ 360, 95, 360, 360, 360, 360, 360, 56, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 359,
+ 360, 204, 360, 360, 360, 143, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 229, 360, 205, 360,
+ 360, 360, 244, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 57, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 145, 124, 360, 125, 360,
+ 360, 360, 360, 123, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 163, 360, 360, 54, 360, 360, 360,
+
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 275, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 206, 360, 360, 360, 360, 360,
+ 209, 360, 215, 360, 360, 360, 360, 360, 360, 243,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 110, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 137, 360, 360,
+ 360, 360, 360, 360, 360, 360, 65, 360, 360, 360,
+ 29, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+
+ 360, 360, 360, 20, 360, 360, 360, 360, 360, 360,
+ 360, 30, 39, 360, 175, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 202,
+ 360, 360, 359, 360, 360, 360, 360, 360, 360, 82,
+ 84, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 298, 360, 360, 360, 360, 255,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 126, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 162, 360, 50, 360, 360,
+
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 313, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 169, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 307, 360, 360, 360, 235,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 323, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 187, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 119, 360, 360, 360, 360, 360, 360,
+
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 182, 360, 196,
+ 360, 360, 360, 360, 360, 360, 360, 359, 360, 151,
+ 360, 360, 360, 360, 360, 105, 360, 360, 360, 360,
+ 227, 360, 360, 360, 360, 360, 360, 245, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 267, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 144, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 186, 360, 360, 360, 360, 360,
+
+ 360, 85, 360, 86, 360, 360, 360, 360, 360, 360,
+ 66, 316, 360, 360, 360, 360, 360, 93, 197, 360,
+ 218, 360, 248, 360, 360, 210, 291, 360, 360, 360,
+ 360, 360, 360, 78, 360, 199, 360, 360, 360, 360,
+ 360, 360, 9, 360, 360, 360, 360, 360, 109, 360,
+ 360, 360, 360, 360, 280, 360, 360, 360, 360, 226,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 359, 360, 360, 360, 360, 185,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 171, 360, 297, 360, 360, 360, 360, 360, 266, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 239, 360, 360, 360, 360, 360, 360, 289, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 168, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 317, 360, 198, 360, 360, 360, 360, 360,
+
+ 360, 360, 360, 77, 79, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 108, 360, 360, 360, 360,
+ 360, 278, 360, 360, 360, 360, 293, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 231, 37, 31, 33, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 38, 360, 32, 34,
+ 360, 40, 360, 360, 360, 360, 360, 360, 360, 104,
+ 360, 181, 360, 360, 360, 360, 360, 360, 360, 359,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 233, 230, 360, 360, 360, 360, 360, 360, 360,
+
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 76, 360, 360, 360, 146, 360, 127, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 164,
+ 51, 360, 360, 360, 351, 13, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 311, 360, 314,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 12, 360, 360, 22, 360, 360, 360, 360,
+ 360, 360, 284, 360, 360, 360, 360, 295, 360, 360,
+ 360, 360, 80, 360, 241, 360, 360, 360, 360, 360,
+ 232, 360, 360, 75, 360, 360, 360, 360, 360, 360,
+
+ 23, 360, 360, 47, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 180, 179, 360, 360,
+ 351, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 234, 228, 360, 246, 360, 360, 299, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 192, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 87, 360, 360, 360, 360, 360, 279, 360,
+ 360, 360, 360, 214, 360, 360, 360, 360, 360, 240,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 286,
+
+ 360, 360, 360, 321, 322, 177, 360, 360, 360, 81,
+ 360, 360, 360, 360, 188, 360, 360, 360, 120, 122,
+ 121, 360, 360, 360, 25, 360, 360, 172, 360, 174,
+ 360, 219, 360, 360, 360, 360, 178, 360, 360, 360,
+ 360, 249, 360, 360, 360, 360, 360, 360, 360, 153,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 257, 360, 360, 360, 360, 360, 360, 360,
+ 330, 360, 27, 360, 292, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 91, 220, 360, 360, 360, 277, 360, 315, 360,
+
+ 213, 360, 360, 360, 360, 360, 287, 60, 360, 360,
+ 360, 360, 360, 360, 4, 360, 360, 360, 360, 135,
+ 360, 152, 360, 360, 360, 193, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 252, 41, 42, 360, 360, 360,
+ 360, 360, 360, 360, 300, 360, 360, 360, 360, 360,
+ 360, 360, 265, 360, 360, 360, 360, 360, 360, 360,
+ 360, 223, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 90, 360, 360, 61,
+ 360, 283, 360, 253, 360, 360, 360, 360, 360, 11,
+
+ 360, 360, 360, 360, 360, 360, 360, 360, 134, 360,
+ 360, 360, 360, 360, 221, 96, 360, 360, 44, 360,
+ 360, 360, 360, 360, 360, 360, 360, 184, 360, 360,
+ 360, 360, 360, 360, 360, 155, 360, 360, 360, 360,
+ 256, 360, 360, 360, 360, 360, 264, 360, 360, 360,
+ 360, 149, 360, 360, 360, 128, 130, 129, 360, 360,
+ 360, 98, 102, 97, 165, 360, 360, 360, 360, 88,
+ 360, 285, 360, 360, 360, 360, 360, 360, 10, 360,
+ 360, 360, 360, 360, 281, 324, 360, 360, 360, 360,
+ 360, 360, 329, 43, 360, 360, 360, 360, 360, 183,
+
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 103, 101, 360, 55, 360,
+ 360, 89, 360, 312, 360, 360, 360, 360, 24, 360,
+ 360, 360, 360, 360, 207, 360, 360, 360, 360, 360,
+ 360, 222, 360, 360, 360, 360, 360, 360, 360, 360,
+ 203, 360, 360, 173, 83, 360, 360, 360, 360, 360,
+ 301, 360, 360, 360, 360, 360, 360, 360, 261, 360,
+ 360, 260, 150, 360, 360, 100, 52, 360, 360, 156,
+ 157, 160, 161, 158, 159, 92, 310, 360, 360, 282,
+
+ 138, 360, 360, 360, 26, 360, 176, 360, 360, 360,
+ 360, 201, 360, 251, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 190, 189, 45, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 308, 360, 360, 360, 360, 107, 360, 250, 360,
+ 274, 305, 360, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 331, 360, 53, 62, 5, 360, 360,
+ 242, 360, 360, 306, 360, 360, 360, 360, 360, 360,
+
+ 360, 360, 360, 262, 28, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 263, 360, 360,
+ 360, 154, 360, 360, 360, 360, 360, 360, 360, 360,
+ 191, 360, 200, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 302, 360, 360, 360, 360, 360, 360, 360,
+ 360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
+ 328, 360, 360, 270, 360, 360, 360, 360, 360, 303,
+ 360, 360, 360, 360, 360, 360, 304, 360, 360, 360,
+ 268, 360, 271, 272, 360, 360, 360, 360, 360, 269,
+ 273, 0
+
} ;
static const YY_CHAR yy_ec[256] =
@@ -801,801 +806,809 @@ static const YY_CHAR yy_meta[67] =
1, 1, 1, 1, 1, 1
} ;
-static const flex_int16_t yy_base[3576] =
+static const flex_int16_t yy_base[3611] =
{ 0,
0, 0, 64, 67, 70, 72, 78, 84, 89, 92,
- 131, 137, 112, 118, 123, 142, 429, 383, 96,10178,
- 10178,10178, 160, 185, 116, 183, 229, 132, 175, 173,
+ 131, 137, 112, 118, 123, 142, 488, 423, 96,10245,
+ 10245,10245, 160, 185, 116, 183, 229, 132, 175, 173,
232, 50, 66, 120, 263, 275, 151, 323, 134, 375,
- 416, 286, 308, 283, 126, 237, 374,10178,10178,10178,
- 95, 372,10178,10178,10178, 186, 361, 373,10178,10178,
- 10178, 258, 309,10178,10178,10178, 104, 293,10178, 266,
- 10178, 167, 351, 281, 311,10178,10178,10178, 369, 268,
- 10178,10178,10178, 146, 252, 378, 177, 0, 392, 0,
+ 416, 286, 308, 283, 126, 237, 374,10245,10245,10245,
+ 95, 372,10245,10245,10245, 186, 361, 373,10245,10245,
+ 10245, 258, 309,10245,10245,10245, 104, 293,10245, 266,
+ 10245, 167, 351, 281, 311,10245,10245,10245, 369, 268,
+ 10245,10245,10245, 146, 252, 378, 177, 0, 392, 0,
0, 303, 270, 235, 317, 362, 344, 384, 178, 177,
- 226, 420, 377, 330, 379, 402, 414, 419, 410, 453,
- 319, 367, 440, 429, 447, 454, 463, 459, 458, 489,
- 495, 484, 474, 493, 499, 460, 500, 504, 510, 492,
- 524, 520, 532, 525, 537, 529, 412, 533, 558, 539,
- 531, 548, 565, 559, 250, 505, 587, 575, 574, 584,
- 570, 580, 610, 601, 595, 604, 607, 614, 615, 208,
- 294, 205, 236, 194, 670, 225, 180, 326, 158, 674,
- 678, 0, 623, 152, 682, 176, 130, 653, 650, 680,
- 661, 609, 675, 670, 676, 666, 671, 682, 672, 691,
- 720, 697, 696, 703, 256, 726, 770, 731, 723, 714,
-
- 734, 737, 724, 718, 745, 740, 749, 759, 766, 728,
- 773, 760, 772, 787, 819, 789, 762, 797, 339, 802,
- 827, 378, 808, 443, 832, 805, 699, 829, 725, 838,
- 836, 855, 843, 831, 845, 847, 869, 863, 865, 864,
- 874, 871, 866, 870, 868, 910, 882, 893, 895, 894,
- 922, 900, 928, 904, 920, 781, 913, 923, 933, 934,
- 917, 938, 927, 921, 940, 942, 958, 961, 962, 947,
- 966, 960, 956, 965, 957, 974, 955, 963, 985, 989,
- 990, 991, 992, 982, 993, 999, 1002, 1000, 1019, 1012,
- 1022, 1027, 144, 1014, 1029, 1034, 1017, 1016, 1042, 1043,
-
- 1039, 1041, 1058, 1049, 1069, 1065, 1070, 1074, 1072, 1066,
- 1084, 1085, 1061, 1064, 1062, 1089, 1086, 1100, 1088, 1113,
- 1099, 1101, 1120, 1105, 1122, 1112, 1139, 1132, 1126, 1161,
- 1127, 1137, 1162, 1169, 1165, 1144, 1164, 1183, 1198, 1199,
- 1156, 1201, 1189, 1196, 1215, 1200, 1210, 1220, 1217, 1223,
- 1229, 1225, 1234, 1231, 1235, 1244, 1226, 1148, 1271,10178,
- 1249, 1250, 1268, 1260, 1273, 1299, 1266, 1300, 1270, 1285,
- 1293, 1308, 1309, 1348, 1396, 1295, 1329, 1310, 1313, 1331,
- 10178, 1335, 1333, 1445, 1352, 1344, 1368, 1376, 1343, 1379,
- 1358, 1374, 1386, 1391, 1381, 1384, 1400, 1425, 1444, 1408,
-
- 1416, 1423, 1446, 1439, 1395, 1452, 1442, 1456, 1463, 1475,
- 1471, 1466, 1487, 1501, 1483, 1481, 1489, 1493, 1504, 1509,
- 1513, 1518, 1514, 1508, 1528, 1530, 1532, 1533, 1558, 1603,
- 1526, 1552, 1557, 1521, 1554, 1531, 1544, 1569, 1564, 1573,
- 1577, 1579, 1585, 1570, 1587, 1596, 1598, 1614, 1623, 1618,
- 1604, 1606, 1629, 1631, 1651, 1628, 1612, 1635, 1645, 1661,
- 1663, 1662, 1658, 1672, 1669, 1644, 1675, 1655,10178, 1680,
- 10178, 1684, 1686, 1685, 1689, 1688, 1712, 1699, 1702,10178,
- 1700, 1704, 1703, 1710, 1642, 1725, 1715, 1730, 1726, 1747,
- 1745, 1729, 1739, 1750, 1733, 1744, 1760, 1770, 1762, 1768,
-
- 1756, 1771, 1775, 1789, 1769, 1796, 1777, 1780, 1795, 1835,
- 10178, 1790, 1791, 1798, 1825, 1811, 1826, 1817, 1838, 1862,
- 1832, 1845, 1864, 1837, 1890, 1860, 1863, 1881, 1869, 1866,
- 1896, 1874, 1902, 1885, 1893, 1889, 1908, 1906, 1912, 1910,
- 1919, 1921, 1923, 1935,10178, 1936, 1939, 1947, 1839, 1932,
- 1942, 1937, 1946, 1961, 1959, 1954, 1962, 1978, 1955, 1982,
- 1991, 1926, 1981, 1997, 1983, 1996, 1984, 1985, 1989, 2010,
- 2019, 2014, 2034, 2018, 2015, 2032, 2006, 2036, 2039, 2024,
- 2048, 2023, 2037, 2050, 2042, 2033, 2046, 2064, 2051, 2045,
- 2063, 2066, 2089, 2065, 2083, 2078, 2081, 2074, 2097, 2084,
-
- 2079, 2102, 2101, 2103, 2111, 2094, 2112, 2108, 2129, 2115,
- 2135, 2125, 2134, 2146, 2148, 2152, 2130,10178, 2159, 2156,
- 2168, 2170, 2176, 2179, 2180, 2172, 2173, 2177, 2189, 2200,
- 2167, 2190, 2201, 2194, 2198, 2204, 2215, 2214, 2227, 2228,
- 2230, 2237, 2235, 2239, 2225, 2231, 2236, 2251, 2240, 2253,
- 2263, 2254, 2266, 2248, 2271, 2279, 2272, 2274, 2289, 2293,
- 2265, 2288, 2286, 2290, 2301, 2298, 2300, 2320, 2324, 2314,
- 2325, 2344, 2321, 2306, 2341, 2327, 2353, 2342, 2345, 2348,
- 2337, 2354, 2350, 2357, 2367, 2364, 2370, 2368, 2373, 2393,
- 2383, 2394, 2382, 2390, 2387, 2388, 2395, 2408, 2414, 2406,
-
- 2412, 2419, 2429, 2411, 2431, 2426, 2441, 2445, 2438, 2443,
- 2433, 2459, 2456, 2450, 2463, 2465, 2474, 2475, 2477, 2467,
- 2490, 2492, 2469, 2496, 2489, 2485, 2501, 2494, 2518, 2515,
- 2524, 2525, 2517, 2523, 2519, 2521, 2522, 2536, 2556, 2539,
- 2548, 2546,10178, 2541, 2545, 2544, 2563, 2562, 2551, 2559,
- 2584, 2561, 2578, 2575, 2570, 2579, 2625,10178, 2583,10178,
- 10178, 2591,10178,10178, 2604, 2609,10178, 2622, 2605, 2623,
- 2629, 2642, 2650, 2635, 2640, 2649, 2648, 2621, 2695, 2659,
- 2660, 2632, 2664, 2677, 2674, 2685, 2683, 2684, 2712, 2704,
- 2693, 2724, 2733, 2728, 2720, 2722, 2731, 2741, 2738, 2747,
-
- 2748, 2752, 2754, 2745, 2740, 2762, 2751, 2763, 2765, 2760,
- 2770, 2777, 2775, 2778, 2783, 2772, 2806, 2802, 2808, 2811,
- 10178, 2809, 2818, 2797, 2820, 2812, 2824, 2822, 2821, 2823,
- 2826, 2828, 2829, 2839, 2835, 2838, 2852, 2843, 2844, 2849,
- 2846, 2854, 2864, 2874, 2880, 2858,10178, 2869, 2873, 2865,
- 2888, 2885, 2895, 2892, 2896, 2881, 2902, 2890, 2918, 2900,
- 2925, 2913, 2912, 2923, 2919, 2917, 2945,10178, 2934, 2942,
- 2930, 2944, 2933, 2946, 2947, 2955, 2959, 2971, 2941, 2961,
- 2969, 2970, 2907, 2975, 2973, 2974, 2976, 2991, 2993, 3000,
- 2996, 3004, 3013, 3002, 3014, 3006, 3018, 3016, 3019, 3003,
-
- 3028, 3029, 3033, 3055, 3030, 3058, 3040, 3042, 3063, 3064,
- 3066, 3053, 3067, 3068, 3056, 3074, 3069, 3083, 3081, 3080,
- 3090, 3091, 3085, 3088, 3095, 3104, 3117, 3121, 3111, 3115,
- 3122, 3102, 3107, 3132, 3136,10178, 3134, 3125,10178, 3130,
- 3145, 3146, 3192, 3177, 3152, 3154, 3141, 3150, 3180, 3172,
- 3179, 3183, 3198, 3191, 3162, 3202, 3205, 3211, 3218, 3215,
- 3229, 3217, 3220, 3232, 3228, 3243, 3247, 3256, 3262, 3190,
- 381, 3267, 3244, 3250, 3245, 3296, 3253, 3273, 3268, 3272,
- 3280, 3286, 3279, 3285, 3303, 3300, 3306, 3305, 3293, 3329,
- 3314, 3318, 3323, 3320, 3333, 3335, 3350, 3337,10178, 3345,
-
- 3352, 3340, 3353, 3356, 3373, 3365, 3368,10178, 3362, 3366,
- 3372, 3378, 3367, 3382, 3385, 3384, 3392, 3393, 3395, 3399,
- 3409, 3410, 3412, 3396,10178, 3405,10178, 3411, 3422, 3419,
- 3428, 3427, 3426, 3435, 3452, 3453,10178,10178, 3454, 3451,
- 3462, 3466, 3469, 3456, 3455, 3475,10178, 3478, 3472,10178,
- 3497, 3473, 3477, 3486, 3492, 3489, 3482, 3496, 3515, 3500,
- 3517, 3499, 3524, 3516,10178, 3531, 3533, 3518, 3535, 3541,
- 3521, 3543, 3544, 3545, 3542,10178, 3547, 3559, 3555, 3560,
- 3565, 3569, 3566, 3580, 3588, 3567, 3571, 3577, 3592, 3586,
- 3596, 3605, 3606, 3598, 3604, 3611, 3613, 3619,10178, 3615,
-
- 3610, 3607, 3626, 3624, 3608, 3630, 3632, 3625, 3631, 3645,
- 3646, 3633, 3656, 3647, 3651, 3660, 3667, 3669, 3666, 3675,
- 3682, 3670, 3671, 3672, 3668, 91, 3673, 3692, 3695, 3678,
- 10178, 3696, 3704, 3702, 3712, 3716, 3700, 128, 3711, 3709,
- 3722, 3727, 3726, 3733, 3730, 3731, 3745, 3739, 3741, 3754,
- 3758, 3751, 3753, 3759, 3760, 3752, 3762, 3761, 3774,10178,
- 3770, 3781, 3782, 3784, 3798, 3785, 3802,10178, 3806, 3812,
- 3809, 3815, 3817, 3832, 3820, 3811, 3831, 3826, 3847, 3836,
- 3842, 3851, 3850, 3857, 3848,10178, 3860, 3861, 3865, 3869,
- 3875, 3881, 3863, 3871, 3888, 3882, 3902, 3891, 3893, 3892,
-
- 3898, 3913, 3908, 3915, 3895, 3779, 3916, 3918, 3930, 3931,
- 3928, 3937, 3932, 3925, 3941, 3959, 3940,10178, 3967, 3954,
- 3957, 3962, 3952, 3964, 3977, 3963, 3993, 3973, 3981, 3988,
- 3984, 4028, 3990, 3996, 4011, 4012, 4016, 4017, 4015, 4022,
- 4030, 4044, 4004, 4049, 4056, 4038, 4048, 4019, 4060, 4053,
- 4062, 4065, 4063, 4075, 4087, 4086, 4080, 4082, 4114, 4092,
- 4085, 4109, 4106, 4104,10178, 4094, 4102, 4120, 4118, 4140,
- 4137, 4121, 4144, 4125, 4142, 4141, 4153, 4148, 4158, 4155,
- 4165, 4166, 4167, 4179, 4176, 4182, 4188, 4178, 4161, 4192,
- 4198, 4185, 4202, 4205,10178, 4211, 4215, 4209, 4212, 4210,
-
- 4206, 4216, 4229, 4235, 4223, 4224, 4225, 4231, 4234, 4232,
- 4257, 4243, 4269, 4261, 4256, 4272, 4250,10178, 4275, 4264,
- 4277, 4271, 4281, 4289, 4295, 4291, 4298, 4306, 4305, 4293,
- 4308, 4312, 4302,10178, 4322, 4328, 4321, 4331, 4333, 4334,
- 4325, 4329, 4345, 4327,10178, 4346, 4332, 4352, 4342, 4348,
- 4353, 4369, 4370, 4360,10178, 4386, 4371, 4363, 4372, 4382,
- 4374, 4384, 4399, 4387, 4379, 4390, 4411, 4405, 4397, 4417,
- 10178, 4406, 4428, 4412, 4427, 4429, 4426, 4431, 4433, 4454,
- 4441, 4443, 4447,10178, 4470, 4465, 4455, 4476, 4460, 4457,
- 4467, 4475, 4486, 4472, 4478, 4495, 4481,10178, 4497, 4496,
-
- 4502, 4503, 4505, 4508, 4515, 4521, 4525, 4517, 4524, 4531,
- 4535, 4539, 4530, 4541, 4548, 4551, 4547, 4542, 4558, 4570,
- 4564, 4575, 4560, 4585, 4593, 4594, 4581, 4598, 4596, 4597,
- 4588, 4589, 4600, 4606, 4614, 4619, 4616, 4627,10178, 4618,
- 4625, 4626, 4620, 4622, 4636, 4624, 4633, 4641, 4637, 4651,
- 4643, 4644, 4653, 4679, 4681, 4662, 4686, 4664, 4669, 4684,
- 4668, 4671, 4674, 4685, 4697, 4699, 4696, 4692, 4702, 4706,
- 4701, 4710, 4708, 4713, 4717, 4719, 4720, 4728, 4729, 4726,
- 4721, 4748, 4743, 4745, 4746, 4757, 4760, 4756, 4763, 4766,
- 4765, 4768, 4780,10178, 4753, 4791, 4785, 4777, 4787, 4802,
-
- 4805, 4816, 4804, 4807, 4821, 4812, 4811, 4818, 4808, 4823,
- 4824, 4832, 4826, 4836,10178, 4838,10178, 4837, 4835, 4853,
- 4830, 4846,10178, 4861,10178, 4867, 4869, 4855, 4859, 4860,
- 10178, 4874, 4851, 4864, 4880, 4885, 4891, 4893, 4879, 4890,
- 4910, 4899, 4894, 4914, 4906, 4916, 4903, 4918, 4933, 4925,
- 4926, 4941, 4932, 4929, 4945, 4937, 4953, 4940, 4950, 4952,
- 4966, 4956, 4973,10178, 4982, 4983, 4972, 4987, 4979, 4976,
- 4974, 4997, 4977, 4998, 5006, 5003, 5000, 5009, 5011, 5019,
- 5021, 5012, 5035, 5036, 5045, 5022, 5050,10178, 5038, 5031,
- 5047, 5048,10178, 5046, 5033, 5060, 5069, 5053, 5058, 5056,
-
- 5079, 5085, 5072, 5077, 5075, 5102, 5096, 5087, 5107,10178,
- 5091, 5106, 5103, 5112, 5121, 5129, 5130, 5131, 5139, 5142,
- 5146, 5144, 5132, 5133, 5135, 5141, 5147, 5157, 5169, 5170,
- 5174, 5180, 5159, 5178, 5185, 5184, 5172, 5167, 5173, 5171,
- 5181, 5188, 5199, 5203, 5198, 5200, 5218, 5205, 5226,10178,
- 5216, 5222, 5225, 5208, 5217, 5230, 5236, 5227, 5245,10178,
- 5242, 5247, 5253, 5250, 5269, 5244, 5261, 5252, 5260, 5272,
- 5277, 5283, 5286, 5284,10178, 5294,10178, 5291, 5303, 5301,
- 5307, 5308, 5297, 5323, 5312, 5318, 5310, 5327, 5335, 5339,
- 5321, 5330, 5342, 5333, 5363, 5355, 5296, 5349, 5354, 5350,
-
- 5367, 5356, 5371, 5368, 5392, 5381, 5377,10178,10178, 5378,
- 5382, 5395, 5390, 5401, 5413, 5419, 5412, 5426, 5411, 5415,
- 5417, 5454,10178, 5438, 5428, 5437, 5445, 5446, 5398, 5439,
- 5467, 5473, 5464, 5461, 5476, 5468,10178, 5458, 5466, 5481,
- 5470, 5489, 5487,10178, 5482,10178, 5485, 5494, 5496, 5491,
- 5501, 5502, 5507, 5518, 5509, 5510, 5516, 5532, 5540, 5544,
- 5528, 5546, 5536, 5534, 5531, 5548, 5547, 5549, 5542, 5554,
- 5566,10178, 5562, 5545, 5574, 5577, 5568, 5580, 5581, 5587,
- 5567,10178, 5589, 5593, 5595, 5591, 5604, 5599, 5605, 5594,
- 5609, 5610, 5620, 5631, 5623, 5627,10178, 5621, 5622, 5646,
-
- 5632, 5625, 5647, 5645, 5654, 5656,10178, 5655, 5659, 5669,
- 5663, 5664, 5673, 5674, 5658, 5666, 5671, 5679, 5687, 5694,
- 5698, 5696, 5695, 5704, 5711, 5712, 5736, 5713, 5702, 5727,
- 5684, 5722,10178, 5723, 5734, 5730, 5731, 5750, 5758, 5754,
- 5756, 5762, 5744, 5765, 5766, 5763, 5775, 5776, 5786, 5783,
- 5771, 5785,10178, 5781, 5777, 5805, 5801, 5782, 5813, 5817,
- 5798, 5814, 5820, 5811, 5800, 5824, 5825, 5834, 5831, 5810,
- 5852, 5822, 5832, 5840, 5859, 5848,10178, 5878, 5856, 5857,
- 5853, 5863, 5861, 5886, 5880, 5882, 5873, 5885, 5884, 5895,
- 5888, 5892, 5903, 5906, 5897,10178,10178, 5918, 5900, 5911,
-
- 10178, 5919, 5905, 5939, 5924, 5936, 5921, 5934, 5943, 5945,
- 5930, 5957, 5933, 5946,10178, 5944, 5960, 5948, 5968, 5967,
- 5969, 5976,10178, 5963, 5973, 5979, 5975, 5984, 5971, 5985,
- 5994, 5987, 6005, 5992, 5990, 6012, 6027, 6028, 6009, 6015,
- 6021,10178, 6018, 6022, 6042, 6033, 6026, 6032, 6019,10178,
- 6039, 6059, 6061, 6064, 6066, 6067, 6068, 6065, 6073, 6077,
- 6069, 6060, 6096, 6085, 6087, 6089, 6116, 6095, 6100, 6112,
- 6106, 6118, 6120, 6122,10178, 6128, 6140, 6111, 6130,10178,
- 6135, 6159, 6125,10178, 6134, 6139, 6136, 6148, 6155,10178,
- 6157, 6166, 6161, 6171, 6149, 6176, 6158, 6182, 6179, 6162,
-
- 6175, 6185, 6192,10178, 6193, 6191, 6189,10178, 6208, 6212,
- 6214, 6215, 6203, 6229, 6219, 6221, 6222, 6218,10178, 6231,
- 10178, 6230, 6232, 6242,10178, 6235, 6239, 6256, 6264, 6258,
- 6260, 6263, 6269, 6273, 6255, 6270, 6259, 6257, 6285, 6288,
- 6286, 6280, 6292, 6287, 6294,10178, 6310, 6291, 6314, 6297,
- 6325, 6318, 6319, 6312, 6324, 6321,10178,10178, 6330,10178,
- 6337, 6339, 6343, 6346,10178, 6348, 6351, 6315, 6352, 6367,
- 6345, 6353, 6376, 6373,10178, 6377, 6382,10178, 6361, 6379,
- 6392, 6387, 6386, 6375, 6395, 6390, 6396, 6400, 6404, 6413,
- 6411, 6417, 6407, 6420, 6439,10178, 6410, 6423, 6424, 6449,
-
- 6437, 6434, 6456, 6460, 6447,10178, 6464, 6468, 6453, 6472,
- 6481,10178, 6466,10178, 6482, 6480, 6478, 6499, 6484, 6412,
- 10178, 6504, 6496, 6512, 6487, 6514, 6516, 6515, 6517, 6507,
- 6511, 6528, 6526, 6527, 6523, 6539, 6562, 6550,10178, 6541,
- 6547, 6564, 6566, 6554, 6555, 6549, 6576, 6568, 6577, 6572,
- 6593, 6580, 6571, 6585, 6604, 6575, 6603, 6596,10178, 6611,
- 6607, 6620, 6597, 6626, 6613, 6624, 6617,10178, 6627, 6632,
- 6643,10178, 6642, 6630, 6649, 6661, 6644, 6645, 6647, 6651,
- 6654, 6659, 6653, 6678,10178, 6672, 6675, 6671, 6688, 6692,
- 6694,10178,10178, 6690,10178, 6695, 6681, 6698, 6689, 6702,
-
- 6717, 6712, 6723, 6733, 6719, 6716, 6734, 6736, 6729,10178,
- 6728, 6750, 6730, 6771, 6753, 6754, 6748, 6759, 6756,10178,
- 10178, 6758, 6769, 6763, 6773, 6781, 6775, 6774, 6793, 6786,
- 6788, 6804, 6800, 6798,10178, 6802, 6790, 6803, 6801,10178,
- 6799, 6818, 6812, 6825, 6831, 6820, 6826, 6829, 6839, 6819,
- 6843, 6850, 6845, 6852, 6847, 6837, 6863, 6859, 6856, 6867,
- 6871, 6885,10178, 6883, 6874, 6876, 6877, 6886, 6884, 6887,
- 6894, 6905, 6898, 6897,10178, 6911,10178, 6914, 6916, 6922,
- 6929, 6920, 6934, 6932, 6936, 6935, 6938, 6947, 6944, 6950,
- 6949, 6968, 6954, 6957, 6972, 6979, 6974, 6982, 6985, 6984,
-
- 10178, 6987, 6971, 6988, 6978, 6993, 6994, 7003, 7002, 7005,
- 7004, 7009, 7020, 7026, 7027, 7014, 7029, 7016, 7030, 7015,
- 10178, 7032, 7039, 7021, 7045, 7050, 7053, 7056, 7043, 7074,
- 7069, 7057, 7064, 7080,10178, 7066, 7059, 7087,10178, 7072,
- 7073, 7071, 7089, 7093, 7110, 7099, 7106, 7098, 7107,10178,
- 7112, 7103, 7120, 7114, 7117, 7124, 7121, 7126, 7131, 7134,
- 7144, 7154,10178, 6902, 7148, 7151, 7159, 7140, 7153, 7155,
- 7163, 7162,10178, 7180, 7189, 7191, 7182, 7203, 7205, 7181,
- 7195, 7209, 7201, 7208, 7192, 7198, 7223, 7218, 7222, 7225,
- 7230, 7228, 7219, 7246, 7216,10178, 7236,10178, 7240, 7250,
-
- 7247, 7267, 7263, 7261, 7275, 7266, 7258,10178, 7252, 7265,
- 7282, 7269, 7291,10178, 7277, 7285, 7295, 7294,10178, 7311,
- 7308, 7297, 7303, 7319, 7322,10178, 7320, 7326, 7327, 7330,
- 7331, 7325, 7336, 7337, 7338, 7333, 7341, 7343, 7347, 7372,
- 7357, 7364,10178, 7373, 7376, 7380, 7378, 7381, 7384, 7365,
- 7382, 7387, 7375,10178, 7389, 7398, 7399, 7402, 7409, 7397,
- 7407, 7425, 7436, 7426, 7434, 7415, 7420, 7421, 7438, 7437,
- 7441,10178, 7444, 7453, 7446, 7449, 7447, 7470,10178, 7466,
- 10178, 7463, 7478, 7481, 7483, 7461, 7488,10178,10178, 7490,
- 7496, 7480, 7495, 7491,10178,10178, 7498,10178, 7485,10178,
-
- 7506, 7508,10178,10178, 7504, 7502, 7505, 7529, 7532, 7538,
- 10178, 7539,10178, 7545, 7521, 7542, 7530, 7522, 7547,10178,
- 7531, 7551, 7548, 7555, 7562,10178, 7571, 7557, 7581, 7565,
- 7570,10178, 7586, 7588, 7574, 7577,10178, 7598, 7596, 7597,
- 7582, 7594, 7592, 7601, 7609, 7617, 7620, 7623, 7632, 7619,
- 7621, 7638, 7640, 7642, 7645, 7649, 7644, 7633, 7647, 7653,
- 7662, 7672, 7665, 7655, 7674, 7664, 7666, 7669, 7688, 7676,
- 7694, 7697, 7696, 7693, 7691, 7704, 7690, 7701, 7699, 7709,
- 7708, 7718, 7730, 7712, 7720, 7728, 7724, 7735, 7731, 7742,
- 7747, 7751, 7754, 7745, 7746,10178, 7764, 7762, 7743, 7774,
-
- 7769, 7780, 7787, 7794, 7795, 7796,10178, 7798,10178, 7801,
- 7788, 7789, 7786, 7793,10178, 7810, 7813, 7812, 7816, 7829,
- 7821, 7815, 7825, 7828, 7832, 7848,10178, 7847, 7837, 7840,
- 7844, 7854,10178, 7857, 7860, 7852, 7864, 7865, 7878, 7871,
- 7872, 7876, 7879, 7869, 7893, 7901, 7902, 7884, 7889, 7908,
- 10178, 7918, 7919, 7913, 7905, 7909, 7906, 7912, 7932, 7922,
- 7927, 7928, 7939, 7941, 7930, 7945, 7956,10178, 7954,10178,
- 7949, 7959, 7950, 7940, 7974, 7975, 7964, 7963,10178,10178,
- 7968, 7976, 7989, 7993, 7981, 7986, 7997, 7987, 7995, 8008,
- 10178, 8002, 8020, 8014, 8027, 8015,10178, 8019, 8013, 8016,
-
- 8030,10178, 8037, 8023, 8044, 8050, 8038, 8039, 8052, 8057,
- 8047, 8053, 8055, 8061, 8068,10178,10178,10178,10178, 8071,
- 8064, 8070, 8060, 8077, 8079, 8084, 8094, 8096, 8101, 8082,
- 8095,10178, 8107,10178,10178, 8109, 8111, 8098, 8113, 8119,
- 8123, 8117, 8125,10178, 8120,10178, 8143, 8144, 8136, 8131,
- 8155, 8152, 8137, 8159, 8154, 8160, 8150, 8162, 8171, 8167,
- 8173, 8170, 8186, 8190, 8193,10178,10178, 8183, 8202, 8200,
- 8209, 8201, 8210, 8194, 8178, 8207, 8214, 8213, 8216, 8217,
- 8205, 8221, 8229, 8234, 8233,10178, 8240, 8246, 8252,10178,
- 8238,10178, 8249, 8257, 8258, 8241, 8256, 8261, 8266, 8279,
-
- 8278, 8286,10178,10178, 8274, 8276, 8288,10178,10178, 8281,
- 8284, 8290, 8295, 8303, 8293, 8289, 8308, 8311, 8324, 8313,
- 10178, 8314,10178, 8322, 8330, 8328, 8318, 8338, 8349, 8336,
- 8351, 8347, 8340, 8333, 8357,10178, 8355, 8339,10178, 8373,
- 8368, 8376, 8363, 8372, 8378,10178, 8382, 8369, 8386, 8388,
- 10178, 8392, 8390, 8396, 8397,10178, 8402,10178, 8391, 8403,
- 8400, 8431, 8410,10178, 8405, 8415,10178, 8434, 8436, 8440,
- 8438, 8432, 8433,10178, 8444, 8429,10178, 8428, 8450, 8452,
- 8451, 8439, 8457, 8449, 8464, 8456, 8469, 8485, 8483,10178,
- 10178, 8474, 8481, 73, 8493, 8467, 8472, 8475, 8494, 8503,
-
- 8479, 8501, 8507,10178,10178, 8506,10178, 8508, 8512,10178,
- 8498, 8521, 8517, 8519, 8535, 8529, 8532, 8527, 8526, 8543,
- 8555, 8546, 8542, 8563, 8577, 8580, 8559, 8549, 8564, 8582,
- 8588, 8593, 8595, 8581, 8598, 8579, 8574, 8604, 8606, 8609,
- 8607, 8605, 8615, 8617,10178, 8602, 8613, 8616, 8641, 8630,
- 10178, 8649, 8643, 8651, 8653,10178, 8652, 8645, 8656, 8657,
- 8660,10178, 8655, 8659, 8661, 8663, 8662, 8672, 8684, 8682,
- 8706,10178, 8689, 8694, 8700,10178,10178,10178, 8705, 8707,
- 8698,10178, 8708, 8699, 8690, 8696,10178, 8719, 8711, 8716,
- 10178,10178,10178, 8723, 8731, 8735,10178, 8725, 8754,10178,
-
- 8739,10178, 8732,10178, 8752, 8755, 8763, 8747,10178, 8762,
- 8772, 8759, 8791,10178, 8761, 8769, 8770, 8784, 8778, 8782,
- 8797,10178, 8781, 8799, 8805, 8803, 8788, 8809, 8786, 8811,
- 8796, 8822, 8815, 8827,10178, 8831, 8834, 8841, 8843, 8826,
- 8832, 8836,10178, 8830,10178, 8852,10178, 8842, 8862, 8863,
- 8856, 8871, 8865, 8866, 8878, 8879, 8868, 8890, 8887, 8882,
- 8893, 8894, 8897,10178,10178, 8899, 8895, 8904,10178, 8908,
- 10178, 8910,10178, 8909, 8914, 8927, 8917, 8934,10178,10178,
- 8938, 8920, 8936, 8870, 8926, 8923,10178, 8947, 8937, 8943,
- 8955,10178, 8963,10178, 8953, 8976, 8972,10178, 8957, 8968,
-
- 8981, 8970, 8966, 8983, 8980, 8978, 8974, 8993, 8990, 8984,
- 8995, 8992, 9001, 9021, 9022, 9026,10178,10178,10178, 9018,
- 9011, 9037, 9033, 9032, 9039, 9023,10178, 9042, 9040, 9050,
- 9044, 9049, 9061, 9046,10178, 9053, 9054, 9058, 9057, 9075,
- 9067, 9071, 9080,10178, 9091, 9093, 9095, 9096, 9090, 9098,
- 9100, 9108, 9109, 9111, 9099, 9106, 9120, 9114,10178, 9121,
- 10178, 9124,10178, 9110,10178, 9118, 9122, 9115, 9128, 9142,
- 10178, 9152, 9127, 9138, 9146, 9148, 9149, 9162, 9163,10178,
- 9154, 9169, 9166, 9155, 9173,10178,10178, 9167, 9183,10178,
- 9191, 9187, 9184, 9202, 9194, 9195, 9204, 9207,10178, 9205,
-
- 9211, 9197, 9200, 9218, 9214, 9222,10178, 9227, 9221, 9231,
- 9232,10178, 9219, 9241, 9243, 9242, 9266,10178, 9267, 9253,
- 9247, 9270,10178, 9256, 9262, 9264,10178,10178,10178, 9281,
- 9282, 9291,10178,10178,10178,10178, 9285, 9296, 9286, 9306,
- 10178,10178, 9307, 9312, 9316, 9317, 9321, 9320,10178, 9322,
- 9326, 9325, 9311, 9323,10178,10178, 9330, 9339, 9340, 9336,
- 9342, 9345,10178,10178, 9346, 9348, 9357, 9367, 9362,10178,
- 9352, 9369, 9378, 9372, 9379, 9383, 9385, 9375, 9386, 9402,
- 9400, 9398, 9394, 9401, 9388, 9415, 9417, 9404, 9424, 9431,
- 9426, 9430, 9433, 9425, 9429,10178,10178, 9435,10178, 9437,
-
- 9436,10178,10178, 9439, 9448, 9454, 9455,10178, 9465, 9468,
- 9469, 9470, 9447,10178, 9462, 9476, 9477, 9474, 9466, 9459,
- 10178, 9480, 9472, 9484, 9475, 9481, 9497, 9486, 9485,10178,
- 9500, 9516,10178,10178, 9501, 9517, 9496, 9524, 9508,10178,
- 9527, 9534, 9518, 9528, 9512, 9523, 9521,10178, 9550, 9553,
- 10178,10178, 9536, 9551,10178,10178, 9543,10178,10178,10178,
- 10178,10178,10178,10178,10178, 9560, 9568,10178,10178, 9559,
- 9573, 9574,10178, 9575,10178, 9558, 9567, 9578, 9564,10178,
- 9583,10178, 9589, 9577, 9601, 9605, 9598, 9616, 9608, 9595,
- 9600, 9603, 9604, 9611, 9627, 9625, 9615, 9628, 9645, 9651,
-
- 9638, 9652,10178,10178,10178, 9646, 9639, 9661, 9653, 9667,
- 9668, 9670, 9671, 9655, 9663, 9672, 9676, 9686, 9679, 9678,
- 9673, 9695, 9680, 9706, 9712, 9694, 9715,10178, 9716, 9702,
- 9705, 9723,10178, 9710,10178, 9708,10178,10178, 9727, 9729,
- 9720, 9721, 9739, 9750, 9732, 9736, 9741, 9753, 9761,10178,
- 9762,10178,10178, 9743, 9745,10178, 9755, 9767,10178, 9754,
- 9770, 9759, 9766, 9777, 9776, 9794, 9802, 9783,10178,10178,
- 9788, 9782, 9792, 9812, 9809, 9789, 9817, 9815, 9819, 9823,
- 9806, 9835,10178, 9813, 9826, 9832,10178, 9833, 9829, 9836,
- 9830, 9842, 9859, 9846, 9853,10178, 9867,10178, 9871, 9869,
-
- 9872, 9855, 9860, 9870, 9884, 9886, 9876,10178, 9888, 9899,
- 9890, 9901, 9906, 9915, 9912, 9903, 9921, 9918, 9929, 9924,
- 9925, 9928, 9934, 9933, 9944,10178, 9937, 9947,10178, 9949,
- 9952, 9948, 9950, 9971,10178, 9943, 9959, 9964, 9981, 9968,
- 9980,10178, 9973, 9985, 9990,10178, 9984,10178,10178, 9996,
- 9994, 9999, 9988, 9992,10178,10178,10178,10058,10065,10072,
- 10079,10086,10093,10100, 102,10107,10114,10121,10128,10135,
- 10142,10149,10156,10163,10170
+ 226, 420, 377, 330, 379, 402, 414, 425, 413, 453,
+ 319, 367, 440, 429, 441, 455, 475, 479, 458, 482,
+ 490, 491, 489, 496, 504, 499, 521, 520, 506, 516,
+ 531, 514, 540, 527, 548, 541, 549, 546, 570, 537,
+ 543, 559, 584, 568, 250, 573, 603, 599, 576, 563,
+ 389, 591, 626, 608, 618, 615, 595, 631, 625, 208,
+ 294, 205, 236, 194, 668, 225, 180, 326, 158, 676,
+ 680, 0, 653, 152, 690, 176, 130, 492, 668, 666,
+ 659, 663, 679, 674, 681, 669, 676, 692, 690, 700,
+ 725, 686, 717, 727, 256, 730, 774, 731, 729, 735,
+
+ 715, 738, 740, 736, 719, 769, 772, 742, 755, 759,
+ 764, 775, 762, 799, 803, 835, 806, 793, 800, 339,
+ 796, 823, 378, 805, 418, 833, 824, 443, 832, 459,
+ 830, 704, 847, 817, 852, 840, 850, 869, 871, 877,
+ 873, 878, 879, 872, 874, 889, 894, 898, 900, 904,
+ 897, 896, 910, 912, 906, 917, 696, 913, 927, 943,
+ 946, 923, 948, 935, 937, 956, 952, 953, 963, 958,
+ 945, 961, 955, 962, 978, 972, 991, 974, 1005, 1007,
+ 998, 1001, 1012, 994, 1000, 993, 1002, 1018, 985, 1020,
+ 1019, 1015, 1030, 144, 1032, 1034, 1039, 1036, 1033, 1051,
+
+ 1060, 1046, 1047, 1049,10245, 1070, 1057, 1074, 1078, 1075,
+ 1082, 1084, 1067, 1093, 1095, 1069, 1088, 1083, 1105, 1099,
+ 1116, 1090, 1117, 1109, 1107, 1122, 1111, 1134, 1112, 1145,
+ 1139, 1135, 1173, 1144, 1141, 1152, 1184, 1167, 1183, 1176,
+ 1204, 1213, 1174, 1195, 1208, 1209, 1211, 1227, 1212, 1232,
+ 1230, 1237, 1246, 1248, 1235, 1238, 1251, 1239, 1240, 1264,
+ 1172, 1280,10245, 1262, 1288, 1261, 1289, 1290, 1297, 1270,
+ 1315, 1277, 1311, 1303, 1296, 1320, 1363, 1411, 1313, 1329,
+ 1326, 1328, 1321,10245, 1348, 1330, 1460, 1358, 1356, 1374,
+ 1382, 1359, 1360, 1383, 1393, 1370, 1310, 1378, 1397, 1399,
+
+ 1424, 1459, 1422, 1423, 1406, 1391, 1438, 1319, 1457, 1451,
+ 1454, 1469, 1440, 1467, 1461, 1490, 1509, 1485, 1497, 1498,
+ 1501, 1516, 1506, 1524, 1519, 1530, 1520, 1510, 1537, 1539,
+ 1540, 1545, 1561, 1606, 1441, 1551, 1557, 1564, 1565, 1536,
+ 1573, 1571, 1576, 1572, 1585, 1589, 1604, 1601, 1613, 1610,
+ 1612, 1617, 1631, 1626, 1607, 1608, 1638, 1650, 1658, 1636,
+ 1641, 1642, 1652, 1663, 1657, 1668, 1669, 1670, 1673, 1653,
+ 1675, 1682,10245, 1691,10245, 1685, 1699, 1689, 1702, 1693,
+ 1708, 1695, 1705,10245, 1703, 1709, 1719, 1729, 1730, 1736,
+ 1733, 1742, 1735, 1744, 1748, 1750, 1738, 1758, 1763, 1741,
+
+ 1756, 1778, 1770, 1776, 1765, 1768, 1794, 1788, 1785, 1797,
+ 1783, 1782, 1791, 1831,10245, 1786, 1813, 1821, 1815, 1803,
+ 1833, 1825, 1840, 1864, 1828, 1870, 1860, 1826, 1885, 1866,
+ 1867, 1886, 1859, 1872, 1887, 1880, 1897, 1896, 1906, 1912,
+ 1903, 1901, 1899, 1924, 1925, 1916, 1922, 1930,10245, 1931,
+ 1938, 1946, 1949, 1941, 1944, 1947, 1956, 1945, 1957, 1951,
+ 1968, 1977, 1961, 1982, 1989, 1996, 1980, 1999, 1986, 1997,
+ 1987, 1988, 2005, 2008, 2020, 2006, 2045, 2021, 2031, 2041,
+ 2023, 2042, 2043, 2025, 2051, 2026, 2033, 2047, 2052, 2057,
+ 2046, 2056, 2072, 2071, 2067, 2058, 2083, 2085, 2068, 2089,
+
+ 2078, 2092, 2086, 2105, 2094, 2080, 2103, 2099, 2095, 2114,
+ 2130, 2124, 2117, 2151, 2119, 2138, 2122, 2126, 2143, 2145,
+ 2133, 2153,10245, 2157, 2146, 2173, 2167, 2174, 2180, 2182,
+ 2169, 2170, 2184, 2186, 2197, 2196, 2192, 2195, 2198, 2200,
+ 2212, 2223, 2218, 2210, 2227, 2231, 2237, 2235, 2236, 2222,
+ 2239, 2242, 2246, 2252, 2247, 2265, 2257, 2269, 2250, 2276,
+ 2287, 2273, 2277, 2296, 2293, 2266, 2282, 2300, 2299, 2294,
+ 2303, 2304, 2321, 2330, 2317, 2335, 2341, 2306, 2320, 2347,
+ 2333, 2351, 2336, 2337, 2343, 2346, 2363, 2364, 2367, 2360,
+ 2370, 2374, 2357, 2376, 2396, 2378, 2391, 2380, 2390, 2394,
+
+ 2392, 2388, 2405, 2410, 2407, 2412, 2422, 2426, 2423, 2427,
+ 2438, 2433, 2429, 2454, 2434, 2449, 2451, 2450, 2461, 2463,
+ 2465, 2467, 2475, 2478, 2489, 2473, 2481, 2493, 2485, 2492,
+ 2495, 2487, 2506, 2505, 2523, 2516, 2524, 2525, 2520, 2526,
+ 2522, 2531, 2519, 2536, 2556, 2539, 2550, 2532,10245, 2551,
+ 2574, 2553, 2567, 2548, 2554, 2558, 2591, 2580, 2582, 2572,
+ 2568, 2584, 2630,10245, 2581,10245,10245, 2585,10245,10245,
+ 2601, 2607,10245, 2592, 2618, 2617, 2611, 2629, 2620, 2645,
+ 2644, 2640, 2647, 2616, 2669, 2696, 2648, 2660, 2657, 2662,
+ 2679, 2666, 2682, 2689, 2672, 2699, 2705, 2709, 2716, 2733,
+
+ 2730, 2711, 2725, 2717, 2744, 2743, 2747, 2746, 2753, 2752,
+ 2756, 2736, 2758, 2739, 2757, 2761, 2764, 2772, 2779, 2789,
+ 2780, 2782, 2775, 2805, 2796, 2804, 2810,10245, 2803, 2816,
+ 2799, 2817, 2814, 2820, 2824, 2807, 2821, 2822, 2833, 2828,
+ 2832, 2834, 2838, 2845, 2835, 2841, 2848, 2858, 2855, 2862,
+ 2871, 2878, 2868,10245, 2865, 2872, 2859, 2885, 2879, 2873,
+ 2891, 2893, 2877, 2900, 2898, 2921, 2899, 2918, 2915, 2905,
+ 2922, 2917, 2910, 2932,10245, 2937, 2933, 2926, 2945, 2940,
+ 2936, 2949, 2951, 2955, 2962, 2957, 2977, 2967, 2960, 2927,
+ 2982, 2974, 2976, 2978, 2996, 2984, 2987, 3001, 2994, 2993,
+
+ 3006, 3007, 3020, 3011, 3008, 3012, 3014, 3021, 3024, 3026,
+ 3035, 3050, 3041, 3054, 3043, 3045, 3066, 3069, 3056, 3059,
+ 3068, 3070, 3058, 3073, 3071, 3081, 3086, 3072, 3091, 3096,
+ 3083, 3094, 3093, 3107, 3106, 3119, 3110, 3123, 3128, 3113,
+ 3121, 3137, 3126,10245, 3120, 3143,10245, 3146, 3138, 3139,
+ 3185, 3175, 3173, 3165, 3178, 3156, 3187, 3182, 3184, 3205,
+ 3199, 3227, 3207, 3215, 3231, 3204, 3233, 3218, 3234, 3222,
+ 3172, 3237, 3232, 3245, 3246, 3262, 3148, 3168, 3244, 381,
+ 3258, 3254, 3261, 3264, 3309, 3257, 3265, 3272, 3275, 3292,
+ 3295, 3297, 3314, 3284, 3285, 3299, 3322, 3306, 3316, 3327,
+
+ 3333, 3331, 3334, 3341, 3340, 3342, 3343,10245, 3358, 3361,
+ 3353, 3366, 3362, 3381, 3377, 3365,10245, 3374, 3378, 3379,
+ 3386, 3385, 3388, 3391, 3397, 3389, 3399, 3408, 3416, 3418,
+ 3422, 3412, 3405,10245, 3415,10245, 3423, 3413, 3436, 3432,
+ 3434, 3435, 3442, 3460, 3461,10245,10245, 3462, 3463, 3469,
+ 3476, 3478, 3468, 3459, 3485,10245, 3475, 3481,10245, 3505,
+ 3480, 3486, 3494, 3495, 3497, 3503, 3502, 3524, 3508, 3525,
+ 3519, 3518, 3512,10245, 3530, 3537, 3527, 3542, 3544, 3543,
+ 3551, 3557, 3558, 3553,10245, 3550, 3552, 3566, 3571, 3573,
+ 3579, 3564, 3578, 3593, 3583, 3577, 3587, 3599, 3584, 3608,
+
+ 3617, 3618, 3611, 3614, 3622, 3620, 3623,10245, 3626, 3609,
+ 3610, 3637, 3628, 3639, 3642, 3647, 3635, 3641, 3644, 3645,
+ 3658, 3654, 3668, 3652, 3664, 3674, 3682, 3685, 3669, 3689,
+ 3687, 3679, 3688, 3692, 3681, 91, 3695, 3696, 3691, 3703,
+ 10245, 3708, 3707, 3709, 3719, 3733, 3721, 128, 3725, 3730,
+ 3731, 3737, 3740, 3747, 3736, 3755, 3758, 3746, 3754, 3769,
+ 3770, 3763, 3764, 3774, 3765, 3768, 3781, 3784, 3790,10245,
+ 3793, 3786, 3776, 3795, 3806, 3796, 3826,10245, 3820, 3827,
+ 3814, 3825, 3822, 3821, 3841, 3811, 3832, 3851, 3856, 3846,
+ 3852, 3839, 3858, 3862, 3859, 3855,10245, 3875, 3879, 3888,
+
+ 3878, 3889, 3877, 3886, 3885, 3892, 3890, 3911, 3903, 3917,
+ 3916, 3910, 3905, 3913, 3927, 3920, 3915, 3919, 3932, 3940,
+ 3942, 3944, 3953, 3945, 3943, 3946, 3979, 3955,10245, 3982,
+ 3966, 3969, 3970, 3967, 3973, 3980, 3974, 4003, 3992, 3990,
+ 4002, 3998, 4042, 4005, 4012, 4025, 4026, 4017, 4031, 4029,
+ 4030, 4032, 4045, 4039, 4062, 4076, 4048, 4053, 4088, 4075,
+ 4066, 4080, 4077, 4078, 4099, 4102, 4095, 4097, 4103, 4135,
+ 4104, 4105, 4113, 4136, 4110,10245, 4129, 4123, 4127, 4130,
+ 4125, 4150, 4120, 4156, 4154, 4158, 4160, 4165, 4175, 4163,
+ 4169, 4181, 4183, 4185, 4195, 4187, 4194, 4197, 4180, 4188,
+
+ 4212, 4205, 4208, 4209, 4227,10245, 4216, 4228, 4215, 4232,
+ 4237, 4218, 4247, 4248, 4246, 4231, 4236, 4245, 4253, 4242,
+ 4250, 4268, 4261, 4275, 4277, 4274, 4284, 4269,10245, 4288,
+ 4270, 4279, 4294, 4276, 4295, 4297, 4302, 4313, 4315, 4322,
+ 4325, 4310, 4327, 4324, 4326,10245, 4340, 4341, 4343, 4351,
+ 4346, 4335, 4319, 4334, 4359, 4349,10245, 4358, 4361, 4354,
+ 4362, 4360, 4370, 4387, 4389, 4368,10245, 4397, 4385, 4382,
+ 4383, 4386, 4394, 4400, 4410, 4395, 4392, 4413, 4423, 4433,
+ 4416, 4429,10245, 4422, 4451, 4430, 4427, 4444, 4445, 4438,
+ 4449, 4465, 4460, 4472, 4463,10245, 4486, 4458, 4471, 4488,
+
+ 4476, 4479, 4466, 4497, 4503, 4507, 4492, 4494, 4511, 4498,
+ 10245, 4506, 4499, 4509, 4522, 4524, 4513, 4529, 4547, 4534,
+ 4536, 4538, 4539, 4544, 4545, 4543, 4563, 4569, 4572, 4564,
+ 4567, 4574, 4580, 4570, 4584, 4578, 4591, 4605, 4607, 4599,
+ 4615, 4606, 4608, 4601, 4600, 4618, 4627, 4629, 4634, 4630,
+ 4635,10245, 4637, 4642, 4638, 4633, 4640, 4639, 4644, 4648,
+ 4667, 4650, 4664, 4671, 4669, 4662, 4690, 4692, 4673, 4687,
+ 4682, 4685, 4675, 4700, 4694, 4696, 4706, 4711, 4702, 4698,
+ 4709, 4727, 4720, 4731, 4746, 4723, 4725, 4729, 4730, 4734,
+ 4741, 4738, 4745, 4762, 4764, 4751, 4758, 4769, 4774, 4779,
+
+ 4778, 4780, 4775, 4786, 4785, 4797,10245, 4782, 4787, 4802,
+ 4801, 4804, 4818, 4827, 4828, 4819, 4822, 4838, 4831, 4833,
+ 4846, 4847, 4824, 4830, 4848, 4843, 4852,10245, 4853,10245,
+ 4851, 4876, 4855, 4858, 4864,10245, 4886,10245, 4885, 4887,
+ 4873, 4874, 4877,10245, 4894, 4875, 4898, 4883, 4902, 4904,
+ 4911, 4906, 4909, 4925, 4920, 4912, 4936, 4931, 4917, 4933,
+ 4916, 4939, 4945, 4942, 4947, 4966, 4955, 4950, 4972, 4958,
+ 4979, 4962, 4968, 4977, 4986, 4975, 4991,10245, 4981, 4997,
+ 4999, 5004, 5003, 4983, 5002, 5013, 5008, 5017, 5024, 5029,
+ 5018, 5021, 5020, 5028, 5045, 5043, 5051, 5049, 5062, 5046,
+
+ 5067,10245, 5044, 5074, 5056, 5073,10245, 5077, 5060, 5085,
+ 5087, 5078, 5080, 5076, 5093, 5094, 5081, 5104, 5090, 5121,
+ 5102, 5123, 5130,10245, 5125, 5131, 5113, 5129, 5135, 5117,
+ 5147, 5150, 5148, 5145, 5163, 5152, 5162, 5156, 5160, 5165,
+ 5161, 5168, 5175, 5187, 5190, 5188, 5191, 5174, 5194, 5200,
+ 5198, 5186, 5189, 5210, 5192, 5208, 5214, 5218, 5215, 5213,
+ 5219, 5241, 5225, 5227,10245, 5235, 5236, 5240, 5256, 5237,
+ 5242, 5246, 5262, 5251,10245, 5277, 5259, 5282, 5269, 5289,
+ 5273, 5278, 5267, 5280, 5286, 5296, 5294, 5315, 5304,10245,
+ 5314,10245, 5285, 5323, 5330, 5332, 5321, 5317, 5336, 5340,
+
+ 5342, 5345, 5338, 5346, 5347, 5356, 5361, 5359, 5362, 5378,
+ 5371, 5351, 5358, 5385, 5373, 5383, 5376, 5370, 5397, 5406,
+ 5404, 5403,10245,10245, 5391, 5407, 5421, 5410, 5418, 5434,
+ 5431, 5429, 5423, 5433, 5436, 5449, 5469,10245, 5456, 5459,
+ 5450, 5466, 5461, 5452, 5462, 5481, 5487, 5485, 5477, 5492,
+ 5489,10245, 5483, 5486, 5497, 5493, 5502, 5514,10245, 5507,
+ 10245, 5504, 5509, 5516, 5513, 5520, 5517, 5524, 5530, 5532,
+ 5540, 5542, 5549, 5551, 5563, 5557, 5548, 5565, 5553, 5550,
+ 5552, 5574, 5569, 5590, 5564, 5577, 5576,10245, 5589, 5579,
+ 5598, 5600, 5587, 5603, 5606, 5601, 5592,10245, 5612, 5609,
+
+ 5619, 5628, 5616, 5624, 5625, 5629, 5634, 5647, 5643, 5652,
+ 5636, 5642,10245, 5645, 5646, 5665, 5650, 5658, 5672, 5682,
+ 5680, 5687,10245, 5685, 5679, 5670, 5694, 5684, 5693, 5697,
+ 5681, 5691, 5698, 5708, 5714, 5724, 5721, 5720, 5718, 5731,
+ 5728, 5722, 5749, 5739, 5747, 5704, 5707, 5746,10245, 5752,
+ 5751, 5753, 5759, 5763, 5780, 5771, 5764, 5784, 5793, 5776,
+ 5800, 5803, 5792, 5794, 5795, 5801, 5802, 5810, 5805,10245,
+ 5822, 5807, 5823, 5819, 5811, 5838, 5826, 5827, 5834, 5844,
+ 5830, 5835, 5843, 5850, 5857, 5854, 5865, 5875, 5849, 5846,
+ 5870, 5872, 5873,10245, 5903, 5881, 5886, 5877, 5896, 5897,
+
+ 5883, 5900, 5891, 5898, 5905, 5914, 5925, 5915, 5921, 5928,
+ 5931, 5917,10245,10245, 5933, 5920, 5941,10245, 5942, 5936,
+ 5954, 5949, 5959, 5952, 5956, 5967, 5966, 5961, 5979, 5963,
+ 5969,10245, 5996, 5977, 6000, 5983, 5990, 6004, 6006,10245,
+ 5986, 6016, 6015, 6013, 6010, 6001, 6007, 6017, 6024, 6022,
+ 6011, 6028, 6038, 6046, 6055, 6037, 6043, 6056,10245, 6041,
+ 6040, 6064, 6059, 6047, 6053, 6063,10245, 6073, 6075, 6093,
+ 6089, 6088, 6077, 6103, 6098, 6101, 6090, 6096, 6099, 6108,
+ 6112, 6122, 6123, 6117, 6128, 6133, 6124, 6134, 6127, 6130,
+ 6149,10245, 6154, 6151, 6144, 6160, 6152,10245, 6166, 6177,
+
+ 6173,10245, 6187, 6157, 6180, 6174, 6193,10245, 6184, 6191,
+ 6190, 6197, 6178, 6204, 6194, 6211, 6208, 6200, 6206, 6210,
+ 6220,10245, 6222, 6209, 6235,10245, 6236, 6243, 6241, 6245,
+ 6230, 6253, 6246, 6249, 6258, 6242,10245, 6255,10245, 6262,
+ 6263, 6273,10245, 6271, 6272, 6281, 6288, 6285, 6290, 6291,
+ 6300, 6293, 6277, 6298, 6287, 6309, 6302, 6311, 6314, 6308,
+ 6310, 6313, 6325,10245, 6344, 6324, 6338, 6340, 6330, 6353,
+ 6351, 6336, 6341, 6359, 6357,10245,10245, 6361,10245, 6376,
+ 6366, 6369, 6374,10245, 6377, 6380, 6378, 6381, 6399, 6393,
+ 6384, 6410, 6405,10245, 6414, 6415,10245, 6401, 6412, 6404,
+
+ 6409, 6426, 6408, 6427, 6437, 6425, 6428, 6432, 6436, 6431,
+ 6450, 6440, 6441, 6476,10245, 6452, 6457, 6458, 6469, 6463,
+ 6467, 6483, 6493, 6484,10245, 6496, 6489, 6488, 6497, 6485,
+ 10245, 6508,10245, 6503, 6518, 6514, 6530, 6515, 6541,10245,
+ 6535, 6524, 6539, 6520, 6544, 6548, 6547, 6551, 6540, 6542,
+ 6543, 6545, 6575, 6568, 6570, 6589, 6578,10245, 6569, 6577,
+ 6592, 6593, 6587, 6584, 6583, 6605, 6596, 6604, 6609, 6621,
+ 6612, 6622, 6616, 6623, 6626, 6633, 6628,10245, 6636, 6657,
+ 6643, 6620, 6676, 6647, 6668, 6663,10245, 6667, 6653, 6673,
+ 10245, 6670, 6661, 6680, 6682, 6674, 6693, 6694, 6671, 6688,
+
+ 6703, 6707, 6718,10245, 6714, 6715, 6704, 6720, 6728, 6734,
+ 6719,10245,10245, 6729,10245, 6730, 6742, 6744, 6740, 6741,
+ 6763, 6691, 6764, 6774, 6760, 6757, 6775, 6777, 6767,10245,
+ 6762, 6788, 6789, 6817, 6793, 6800, 6794, 6802, 6798,10245,
+ 10245, 6796, 6813, 6821, 6819, 6825, 6820, 6804, 6838, 6829,
+ 6835, 6842, 6845, 6840,10245, 6847, 6844, 6854, 6848,10245,
+ 6855, 6865, 6856, 6861, 6881, 6866, 6871, 6869, 6885, 6872,
+ 6873, 6897, 6895, 6899, 6891, 6893, 6905, 6903, 6906, 6922,
+ 6916, 6917, 6934,10245, 6930, 6920, 6921, 6926, 6928, 6936,
+ 6949, 6937, 6947, 6948, 6946,10245, 6955,10245, 6964, 6957,
+
+ 6973, 6978, 6961, 6983, 6984, 6987, 6986, 6988, 6996, 6991,
+ 6993, 7001, 6994, 6997, 7014, 7021, 7024, 7023, 7031, 7033,
+ 7029,10245, 7037, 7018, 7020, 7041, 7043, 7044, 7036, 7046,
+ 7039, 7072, 7059, 7070, 7076, 7077, 7064, 7079, 7066, 7067,
+ 7068,10245, 7080, 7089, 7071, 7092, 7082, 7091, 7105, 7110,
+ 7119, 7121, 7103, 7109, 7123,10245, 7114, 7107, 7128,10245,
+ 7134, 7116, 7136, 7118, 7138, 7139, 7145, 7152, 7153, 7155,
+ 10245, 7144, 7147, 7166, 7161, 7158, 7160, 7162, 7172, 7182,
+ 7181, 7194, 7204,10245, 7206, 7199, 7187, 7208, 7191, 7202,
+ 7209, 7223, 7218,10245, 7227, 7234, 7236, 7231, 7225, 7242,
+
+ 7226, 7233, 7261, 7257, 7259, 7240, 7263, 7267, 7252, 7268,
+ 7269, 7271, 7273, 7279, 7286, 7288, 7281,10245, 7290,10245,
+ 7291, 7292, 7313, 7307, 7315, 7312, 7322, 7320, 7309,10245,
+ 7317, 7319, 7326, 7330, 7346,10245, 7342, 7343, 7348, 7349,
+ 10245, 7362, 7366, 7347, 7352, 7368, 7376,10245, 7378, 7380,
+ 7379, 7385, 7390, 7387, 7397, 7386, 7398, 7389, 7388, 7403,
+ 7407, 7392, 7404, 7415,10245, 7405, 7430, 7421, 7432, 7434,
+ 7429, 7431, 7423, 7442, 7441, 7449,10245, 7447, 7424, 7455,
+ 7457, 7458, 7459, 7460, 7473, 7486, 7482, 7490, 7465, 7474,
+ 7476, 7489, 7485, 7496,10245, 7499, 7481, 7509, 7503, 7517,
+
+ 7526,10245, 7510,10245, 7513, 7530, 7529, 7536, 7508, 7541,
+ 10245,10245, 7543, 7548, 7533, 7549, 7553,10245,10245, 7550,
+ 10245, 7546,10245, 7551, 7555,10245,10245, 7574, 7557, 7560,
+ 7580, 7588, 7567,10245, 7586,10245, 7595, 7576, 7598, 7584,
+ 7575, 7604,10245, 7602, 7611, 7605, 7606, 7616,10245, 7610,
+ 7622, 7635, 7624, 7625,10245, 7634, 7636, 7631, 7629,10245,
+ 7652, 7654, 7655, 7641, 7648, 7651, 7665, 7669, 7658, 7662,
+ 7661, 7678, 7674, 7675, 7685, 7693, 7704, 7706, 7707, 7696,
+ 7691, 7710, 7712, 7718, 7723, 7699, 7705, 7702, 7727, 7722,
+ 7728, 7730, 7729, 7753, 7758, 7749, 7759, 7750, 7754, 7751,
+
+ 7745, 7764, 7746, 7774, 7768, 7770, 7782, 7757, 7778, 7786,
+ 7776, 7788, 7785, 7806, 7792, 7810, 7805, 7801, 7803,10245,
+ 7821, 7795, 7797, 7833, 7826, 7837, 7841, 7823, 7849, 7850,
+ 10245, 7853,10245, 7855, 7834, 7847, 7838, 7844,10245, 7867,
+ 7870, 7868, 7869, 7866, 7871, 7897, 7880, 7874, 7885, 7904,
+ 10245, 7902, 7908, 7895, 7898, 7901, 7911,10245, 7912, 7913,
+ 7916, 7923, 7924, 7937, 7930, 7928, 7931, 7936, 7935, 7953,
+ 7956, 7959, 7947, 7948, 7964,10245, 7965, 7977, 7877, 7971,
+ 7963, 7969, 7968, 7979, 7980, 7974, 7983, 7994, 8006, 8002,
+ 8011, 8014,10245, 7998,10245, 8009, 8001, 8007, 8004, 8027,
+
+ 8034, 8022, 8029,10245,10245, 8023, 8035, 8049, 8037, 8040,
+ 8045, 8057, 8047, 8050, 8056,10245, 8066, 8062, 8067, 8073,
+ 8075,10245, 8076, 8077, 8079, 8078,10245, 8074, 8087, 8103,
+ 8108, 8110, 8092, 8112, 8115, 8113, 8100, 8105, 8101, 8125,
+ 10245,10245,10245,10245, 8128, 8119, 8131, 8132, 8137, 8138,
+ 8144, 8148, 8152, 8133, 8142, 8139,10245, 8163,10245,10245,
+ 8165,10245, 8168, 8160, 8171, 8159, 8164, 8184, 8177,10245,
+ 8181,10245, 8194, 8197, 8190, 8182, 8206, 8208, 8188, 8214,
+ 8209, 8217, 8200, 8201, 8230, 8226, 8236, 8223, 8234, 8242,
+ 8247,10245,10245, 8235, 8251, 8249, 8259, 8250, 8262, 8246,
+
+ 8261, 8264, 8265, 8263, 8256, 8273, 8275, 8285, 8289, 8288,
+ 8291, 8301,10245, 8297, 8300, 8306,10245, 8295,10245, 8308,
+ 8312, 8314, 8311, 8324, 8316, 8333, 8320, 8336, 8344,10245,
+ 10245, 8332, 8331, 8347,10245,10245, 8335, 8341, 8338, 8355,
+ 8359, 8348, 8364, 8363, 8368, 8370, 8360,10245, 8374,10245,
+ 8365, 8392, 8398, 8377, 8404, 8408, 8391, 8412, 8411, 8405,
+ 8390, 8416,10245, 8417, 8401,10245, 8425, 8419, 8420, 8423,
+ 8427, 8418,10245, 8429, 8440, 8434, 8455,10245, 8459, 8461,
+ 8457, 8454,10245, 8466,10245, 8448, 8464, 8460, 8476, 8467,
+ 10245, 8450, 8473,10245, 8478, 8480, 8483, 8495, 8489, 8491,
+
+ 10245, 8508, 8493,10245, 8492, 8509, 8513, 8515, 8506, 8517,
+ 8510, 8516, 8518, 8529, 8526, 8524,10245,10245, 8535, 8522,
+ 73, 8552, 8537, 8538, 8543, 8540, 8562, 8541, 8565, 8571,
+ 10245,10245, 8567,10245, 8568, 8574,10245, 8553, 8579, 8580,
+ 8593, 8570, 8573, 8592, 8599, 8588, 8600, 8618, 8603, 8597,
+ 8615,10245, 8633, 8636, 8627, 8622, 8624, 8631, 8634, 8652,
+ 8654, 8641, 8642, 8644, 8639, 8656, 8662, 8658, 8671, 8663,
+ 8666, 8668,10245, 8675, 8678, 8684, 8690, 8682,10245, 8701,
+ 8699, 8707, 8703,10245, 8710, 8709, 8711, 8712, 8713,10245,
+ 8698, 8719, 8724, 8725, 8723, 8734, 8730, 8727, 8760,10245,
+
+ 8731, 8754, 8758,10245,10245,10245, 8759, 8765, 8752,10245,
+ 8767, 8756, 8747, 8755,10245, 8775, 8768, 8776,10245,10245,
+ 10245, 8771, 8779, 8792,10245, 8785, 8781,10245, 8795,10245,
+ 8789,10245, 8804, 8808, 8816, 8811,10245, 8819, 8812, 8800,
+ 8829,10245, 8818, 8821, 8826, 8840, 8834, 8823, 8850,10245,
+ 8863, 8857, 8859, 8865, 8848, 8856, 8851, 8869, 8852, 8876,
+ 8860, 8873,10245, 8884, 8875, 8889, 8897, 8886, 8891, 8893,
+ 10245, 8890,10245, 8904,10245, 8896, 8901, 8913, 8915, 8918,
+ 8922, 8920, 8921, 8925, 8923, 8933, 8935, 8937, 8932, 8951,
+ 8948,10245,10245, 8968, 8963, 8972,10245, 8952,10245, 8974,
+
+ 10245, 8960, 8961, 8975, 8965, 8978,10245,10245, 8984, 8966,
+ 8982, 8994, 8989, 8979,10245, 8996, 9000, 9001, 9015,10245,
+ 9022,10245, 8999, 9027, 9024,10245, 9008, 9031, 9032, 9018,
+ 9016, 9034, 9037, 9035, 9045, 9042, 9047, 9028, 9050, 9052,
+ 9058, 9075, 9079, 9067,10245,10245,10245, 9064, 9061, 9088,
+ 9084, 9083, 9092, 9071,10245, 9085, 9096, 9094, 9095, 9106,
+ 9107, 9104,10245, 9108, 9100, 9103, 9116, 9132, 9117, 9121,
+ 9130,10245, 9138, 9140, 9142, 9141, 9135, 9145, 9153, 9154,
+ 9158, 9160, 9148, 9144, 9179, 9173,10245, 9182, 9167,10245,
+ 9184,10245, 9171,10245, 9164, 9174, 9176, 9177, 9188,10245,
+
+ 9192, 9181, 9193, 9200, 9198, 9215, 9202, 9221,10245, 9210,
+ 9235, 9211, 9213, 9238,10245,10245, 9223, 9233,10245, 9236,
+ 9241, 9239, 9240, 9237, 9248, 9247, 9252,10245, 9250, 9264,
+ 9258, 9262, 9267, 9274, 9281,10245, 9280, 9271, 9273, 9275,
+ 10245, 9279, 9276, 9294, 9283, 9313,10245, 9320, 9296, 9331,
+ 9322,10245, 9308, 9326, 9317,10245,10245,10245, 9332, 9333,
+ 9337,10245,10245,10245,10245, 9334, 9343, 9323, 9336,10245,
+ 9347,10245, 9346, 9367, 9373, 9351, 9378, 9375,10245, 9376,
+ 9371, 9382, 9365, 9370,10245,10245, 9385, 9368, 9394, 9391,
+ 9390, 9399,10245,10245, 9395, 9397, 9412, 9418, 9410,10245,
+
+ 9411, 9423, 9430, 9424, 9431, 9434, 9435, 9421, 9437, 9456,
+ 9449, 9372, 9445, 9451, 9446, 9448, 9469, 9452, 9477, 9486,
+ 9476, 9484, 9485, 9472, 9483,10245,10245, 9489,10245, 9490,
+ 9491,10245, 9501,10245, 9502, 9505, 9506, 9507,10245, 9508,
+ 9520, 9521, 9522, 9497,10245, 9516, 9526, 9530, 9527, 9528,
+ 9511,10245, 9537, 9532, 9539, 9529, 9547, 9549, 9541, 9545,
+ 10245, 9550, 9562,10245,10245, 9552, 9572, 9554, 9581, 9566,
+ 10245, 9583, 9546, 9571, 9589, 9576, 9573, 9574,10245, 9598,
+ 9587,10245,10245, 9601, 9600,10245,10245, 9593, 9606,10245,
+ 10245,10245,10245,10245,10245,10245,10245, 9624, 9627,10245,
+
+ 10245, 9621, 9635, 9636,10245, 9637,10245, 9616, 9631, 9641,
+ 9632,10245, 9633,10245, 9642, 9644, 9668, 9648, 9661, 9669,
+ 9667, 9659, 9663, 9671, 9658, 9674, 9675, 9679, 9688, 9692,
+ 9694, 9685, 9709, 9697, 9718,10245,10245,10245, 9708, 9705,
+ 9727, 9719, 9729, 9732, 9730, 9734, 9720, 9721, 9735, 9737,
+ 9746, 9745, 9748, 9611, 9744, 9755, 9769, 9753, 9756, 9777,
+ 9779,10245, 9781, 9771, 9765, 9787,10245, 9773,10245, 9775,
+ 10245,10245, 9789, 9790, 9797, 9780, 9800, 9814, 9796, 9806,
+ 9802, 9807, 9822,10245, 9825,10245,10245,10245, 9809, 9808,
+ 10245, 9817, 9834,10245, 9820, 9837, 9824, 9832, 9841, 9844,
+
+ 9848, 9851, 9850,10245,10245, 9846, 9858, 9855, 9860, 9857,
+ 9884, 9885, 9883, 9887, 9889, 9872, 9900,10245, 9896, 9893,
+ 9897,10245, 9901, 9890, 9895, 9907, 9911, 9912, 9914, 9918,
+ 10245, 9934,10245, 9937, 9938, 9939, 9921, 9924, 9929, 9945,
+ 9949, 9955,10245, 9952, 9958, 9956, 9962, 9979, 9982, 9977,
+ 9969, 9991, 9989, 9990, 9993, 9996,10001,10005, 9995,10006,
+ 10245, 9999,10010,10245,10007,10026,10017,10019,10039,10245,
+ 10041,10023,10028,10044,10043,10050,10245,10048,10049,10052,
+ 10245,10055,10245,10245,10056,10035,10066,10064,10073,10245,
+ 10245,10245,10125,10132,10139,10146,10153,10160,10167, 102,
+
+ 10174,10181,10188,10195,10202,10209,10216,10223,10230,10237
} ;
-static const flex_int16_t yy_def[3576] =
+static const flex_int16_t yy_def[3611] =
{ 0,
- 3557, 1, 3558, 3558, 3559, 3559, 3560, 3560, 3561, 3561,
- 3562, 3562, 3563, 3563, 3564, 3564, 3557, 3565, 3557, 3557,
- 3557, 3557, 3566, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3567, 3557, 3557, 3557,
- 3567, 3568, 3557, 3557, 3557, 3568, 3569, 3557, 3557, 3557,
- 3557, 3569, 3570, 3557, 3557, 3557, 3570, 3571, 3557, 3572,
- 3557, 3571, 3571, 3573, 3557, 3557, 3557, 3557, 3573, 3574,
- 3557, 3557, 3557, 3574, 3565, 3565, 3557, 3575, 3566, 3575,
- 3566, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
-
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3567,
- 3567, 3568, 3568, 3569, 3569, 3557, 3570, 3570, 3571, 3571,
- 3572, 3572, 3571, 3573, 3573, 3557, 3574, 3574, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
-
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3571, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
-
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3557,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3557, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3571, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
-
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3557, 3565,
- 3557, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3557,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
-
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3557, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3557, 3565, 3565, 3571, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
-
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3557, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
-
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3571,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3557, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3557, 3565, 3557,
- 3557, 3565, 3557, 3557, 3565, 3565, 3557, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
-
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3557, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3557, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3557, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
-
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3571, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3557, 3565, 3565, 3557, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3557, 3565,
-
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3557, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3557, 3565, 3557, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3557, 3557, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3557, 3565, 3565, 3557,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3557, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3557, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3557, 3565,
-
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3557, 3565, 3565, 3565, 3565, 3565, 3571, 3571, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3557,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3557, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3557, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
-
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3557, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3557, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3557, 3565, 3565, 3565, 3565, 3565,
-
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3557, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3557, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3557, 3565, 3565, 3565, 3571, 3565,
- 3565, 3565, 3565, 3565, 3557, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3557, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3557, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3557, 3565, 3565,
-
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3557, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3557, 3565, 3565, 3565, 3565, 3565, 3565,
-
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3557, 3565, 3557, 3565, 3565, 3565,
- 3565, 3565, 3557, 3565, 3557, 3565, 3565, 3565, 3565, 3565,
- 3557, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3557, 3565, 3565, 3565, 3565, 3571, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3557, 3565, 3565,
- 3565, 3565, 3557, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
-
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3557,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3557,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3557,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3557, 3565, 3557, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
-
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3557, 3557, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3557, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3557, 3565, 3565, 3565,
- 3565, 3565, 3565, 3557, 3565, 3557, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3557, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3557, 3565, 3565, 3565, 3571, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3557, 3565, 3565, 3565,
-
- 3565, 3565, 3565, 3565, 3565, 3565, 3557, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3557, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3557, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3557, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3557, 3557, 3565, 3565, 3565,
-
- 3557, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3557, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3557, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3557, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3557,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3557, 3565, 3565, 3565, 3565, 3557,
- 3565, 3565, 3565, 3557, 3565, 3565, 3565, 3565, 3565, 3557,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
-
- 3565, 3571, 3565, 3557, 3565, 3565, 3565, 3557, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3557, 3565,
- 3557, 3565, 3565, 3565, 3557, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3557, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3557, 3557, 3565, 3557,
- 3565, 3565, 3565, 3565, 3557, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3557, 3565, 3565, 3557, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3557, 3565, 3565, 3565, 3565,
-
- 3565, 3565, 3565, 3565, 3565, 3557, 3565, 3565, 3565, 3565,
- 3565, 3557, 3565, 3557, 3565, 3565, 3565, 3565, 3565, 3565,
- 3557, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3557, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3557, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3557, 3565, 3565,
- 3565, 3557, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3557, 3565, 3565, 3565, 3565, 3565,
- 3565, 3557, 3557, 3565, 3557, 3565, 3565, 3565, 3565, 3565,
-
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3557,
- 3565, 3565, 3571, 3565, 3565, 3565, 3565, 3565, 3565, 3557,
- 3557, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3557, 3565, 3565, 3565, 3565, 3557,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3557, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3557, 3565, 3557, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
-
- 3557, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3557, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3557, 3565, 3565, 3565, 3557, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3557,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3557, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3557, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3557, 3565, 3557, 3565, 3565,
-
- 3565, 3565, 3565, 3565, 3565, 3571, 3565, 3557, 3565, 3565,
- 3565, 3565, 3565, 3557, 3565, 3565, 3565, 3565, 3557, 3565,
- 3565, 3565, 3565, 3565, 3565, 3557, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3557, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3557, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3557, 3565, 3565, 3565, 3565, 3565, 3565, 3557, 3565,
- 3557, 3565, 3565, 3565, 3565, 3565, 3565, 3557, 3557, 3565,
- 3565, 3565, 3565, 3565, 3557, 3557, 3565, 3557, 3565, 3557,
-
- 3565, 3565, 3557, 3557, 3565, 3565, 3565, 3565, 3565, 3565,
- 3557, 3565, 3557, 3565, 3565, 3565, 3565, 3565, 3565, 3557,
- 3565, 3565, 3565, 3565, 3565, 3557, 3565, 3565, 3565, 3565,
- 3565, 3557, 3565, 3565, 3565, 3565, 3557, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3571, 3565, 3565, 3565, 3565, 3557, 3565, 3565, 3565, 3565,
-
- 3565, 3565, 3565, 3565, 3565, 3565, 3557, 3565, 3557, 3565,
- 3565, 3565, 3565, 3565, 3557, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3557, 3565, 3565, 3565,
- 3565, 3565, 3557, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3557, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3557, 3565, 3557,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3557, 3557,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3557, 3565, 3565, 3565, 3565, 3565, 3557, 3565, 3565, 3565,
-
- 3565, 3557, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3557, 3557, 3557, 3557, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3557, 3565, 3557, 3557, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3557, 3565, 3557, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3571, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3557, 3557, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3557, 3565, 3565, 3565, 3557,
- 3565, 3557, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
-
- 3565, 3565, 3557, 3557, 3565, 3565, 3565, 3557, 3557, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3557, 3565, 3557, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3557, 3565, 3565, 3557, 3565,
- 3565, 3565, 3565, 3565, 3565, 3557, 3565, 3565, 3565, 3565,
- 3557, 3565, 3565, 3565, 3565, 3557, 3565, 3557, 3565, 3565,
- 3565, 3565, 3565, 3557, 3565, 3565, 3557, 3565, 3565, 3565,
- 3565, 3565, 3565, 3557, 3565, 3565, 3557, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3557,
- 3557, 3565, 3565, 3571, 3565, 3565, 3565, 3565, 3565, 3565,
-
- 3565, 3565, 3565, 3557, 3557, 3565, 3557, 3565, 3565, 3557,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3557, 3565, 3565, 3565, 3565, 3565,
- 3557, 3565, 3565, 3565, 3565, 3557, 3565, 3565, 3565, 3565,
- 3565, 3557, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3557, 3565, 3565, 3565, 3557, 3557, 3557, 3565, 3565,
- 3565, 3557, 3565, 3565, 3565, 3565, 3557, 3565, 3565, 3565,
- 3557, 3557, 3557, 3565, 3565, 3565, 3557, 3565, 3565, 3557,
-
- 3565, 3557, 3565, 3557, 3565, 3565, 3565, 3565, 3557, 3565,
- 3565, 3565, 3565, 3557, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3557, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3557, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3557, 3565, 3557, 3565, 3557, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3557, 3557, 3565, 3565, 3565, 3557, 3565,
- 3557, 3565, 3557, 3565, 3565, 3565, 3565, 3565, 3557, 3557,
- 3565, 3565, 3565, 3565, 3565, 3565, 3557, 3565, 3565, 3565,
- 3565, 3557, 3565, 3557, 3565, 3565, 3565, 3557, 3565, 3565,
-
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3557, 3557, 3557, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3557, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3557, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3557, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3557, 3565,
- 3557, 3565, 3557, 3565, 3557, 3565, 3565, 3565, 3565, 3565,
- 3557, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3557,
- 3565, 3565, 3565, 3565, 3565, 3557, 3557, 3565, 3565, 3557,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3557, 3565,
-
- 3565, 3565, 3565, 3565, 3565, 3565, 3557, 3565, 3565, 3565,
- 3565, 3557, 3565, 3565, 3565, 3565, 3565, 3557, 3565, 3565,
- 3565, 3565, 3557, 3565, 3565, 3565, 3557, 3557, 3557, 3565,
- 3565, 3565, 3557, 3557, 3557, 3557, 3565, 3565, 3565, 3565,
- 3557, 3557, 3565, 3565, 3565, 3565, 3565, 3565, 3557, 3565,
- 3565, 3565, 3565, 3565, 3557, 3557, 3565, 3565, 3565, 3565,
- 3565, 3565, 3557, 3557, 3565, 3565, 3565, 3565, 3565, 3557,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3557, 3557, 3565, 3557, 3565,
-
- 3565, 3557, 3557, 3565, 3565, 3565, 3565, 3557, 3565, 3565,
- 3565, 3565, 3565, 3557, 3565, 3565, 3565, 3565, 3565, 3565,
- 3557, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3557,
- 3565, 3565, 3557, 3557, 3565, 3565, 3565, 3565, 3565, 3557,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3557, 3565, 3565,
- 3557, 3557, 3565, 3565, 3557, 3557, 3565, 3557, 3557, 3557,
- 3557, 3557, 3557, 3557, 3557, 3565, 3565, 3557, 3557, 3565,
- 3565, 3565, 3557, 3565, 3557, 3565, 3565, 3565, 3565, 3557,
- 3565, 3557, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
-
- 3565, 3565, 3557, 3557, 3557, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3557, 3565, 3565,
- 3565, 3565, 3557, 3565, 3557, 3565, 3557, 3557, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3557,
- 3565, 3557, 3557, 3565, 3565, 3557, 3565, 3565, 3557, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3557, 3557,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3557, 3565, 3565, 3565, 3557, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3557, 3565, 3557, 3565, 3565,
-
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3557, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
- 3565, 3565, 3565, 3565, 3565, 3557, 3565, 3565, 3557, 3565,
- 3565, 3565, 3565, 3565, 3557, 3565, 3565, 3565, 3565, 3565,
- 3565, 3557, 3565, 3565, 3565, 3557, 3565, 3557, 3557, 3565,
- 3565, 3565, 3565, 3565, 3557, 3557, 0, 3557, 3557, 3557,
- 3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557,
- 3557, 3557, 3557, 3557, 3557
+ 3592, 1, 3593, 3593, 3594, 3594, 3595, 3595, 3596, 3596,
+ 3597, 3597, 3598, 3598, 3599, 3599, 3592, 3600, 3592, 3592,
+ 3592, 3592, 3601, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3602, 3592, 3592, 3592,
+ 3602, 3603, 3592, 3592, 3592, 3603, 3604, 3592, 3592, 3592,
+ 3592, 3604, 3605, 3592, 3592, 3592, 3605, 3606, 3592, 3607,
+ 3592, 3606, 3606, 3608, 3592, 3592, 3592, 3592, 3608, 3609,
+ 3592, 3592, 3592, 3609, 3600, 3600, 3592, 3610, 3601, 3610,
+ 3601, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3602,
+ 3602, 3603, 3603, 3604, 3604, 3592, 3605, 3605, 3606, 3606,
+ 3607, 3607, 3606, 3608, 3608, 3592, 3609, 3609, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3606, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+
+ 3600, 3600, 3600, 3600, 3592, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3592, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3592, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3606, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3592, 3600, 3592, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3592, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3592, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3592, 3600,
+ 3600, 3606, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3592, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3606, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3592, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3592, 3600, 3592, 3592, 3600, 3592, 3592,
+ 3600, 3600, 3592, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3592, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3592, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3592, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3606, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3592, 3600, 3600, 3592, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3592, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3592, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3592, 3600, 3592, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3592, 3592, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3592, 3600, 3600, 3592, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3592, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3592, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3592, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3592, 3600, 3600, 3600, 3600, 3600, 3606, 3606, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3592,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3592, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3592, 3600, 3600, 3600,
+
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3592, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3592, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+
+ 3600, 3600, 3600, 3600, 3600, 3592, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3592, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3592, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3592, 3600, 3600, 3600,
+ 3606, 3600, 3600, 3600, 3600, 3600, 3592, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3592, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3592, 3600, 3600, 3600, 3600,
+
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3592, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3592, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+
+ 3600, 3600, 3600, 3600, 3600, 3600, 3592, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3592, 3600, 3592,
+ 3600, 3600, 3600, 3600, 3600, 3592, 3600, 3592, 3600, 3600,
+ 3600, 3600, 3600, 3592, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3592, 3600, 3600,
+ 3600, 3600, 3606, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+
+ 3600, 3592, 3600, 3600, 3600, 3600, 3592, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3592, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3592, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3592, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3592,
+ 3600, 3592, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3592, 3592, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3592, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3592, 3600, 3600, 3600, 3600, 3600, 3600, 3592, 3600,
+ 3592, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3592, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3592, 3600, 3600,
+
+ 3600, 3606, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3592, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3592, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3592, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3592,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3592, 3600, 3600, 3600, 3600, 3600, 3600,
+
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3592, 3592, 3600, 3600, 3600, 3592, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3592, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3592,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3592, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3592, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3592, 3600, 3600, 3600, 3600, 3600, 3592, 3600, 3600,
+
+ 3600, 3592, 3600, 3600, 3600, 3600, 3600, 3592, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3606,
+ 3600, 3592, 3600, 3600, 3600, 3592, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3592, 3600, 3592, 3600,
+ 3600, 3600, 3592, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3592, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3592, 3592, 3600, 3592, 3600,
+ 3600, 3600, 3600, 3592, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3592, 3600, 3600, 3592, 3600, 3600, 3600,
+
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3592, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3592, 3600, 3600, 3600, 3600, 3600,
+ 3592, 3600, 3592, 3600, 3600, 3600, 3600, 3600, 3600, 3592,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3592, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3592, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3592, 3600, 3600, 3600,
+ 3592, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+
+ 3600, 3600, 3600, 3592, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3592, 3592, 3600, 3592, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3592,
+ 3600, 3600, 3606, 3600, 3600, 3600, 3600, 3600, 3600, 3592,
+ 3592, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3592, 3600, 3600, 3600, 3600, 3592,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3592, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3592, 3600, 3592, 3600, 3600,
+
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3592, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3592, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3592, 3600, 3600, 3600, 3592,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3592, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3592, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3592, 3600, 3600, 3600, 3600, 3600, 3600,
+
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3592, 3600, 3592,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3606, 3600, 3592,
+ 3600, 3600, 3600, 3600, 3600, 3592, 3600, 3600, 3600, 3600,
+ 3592, 3600, 3600, 3600, 3600, 3600, 3600, 3592, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3592, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3592, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3592, 3600, 3600, 3600, 3600, 3600,
+
+ 3600, 3592, 3600, 3592, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3592, 3592, 3600, 3600, 3600, 3600, 3600, 3592, 3592, 3600,
+ 3592, 3600, 3592, 3600, 3600, 3592, 3592, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3592, 3600, 3592, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3592, 3600, 3600, 3600, 3600, 3600, 3592, 3600,
+ 3600, 3600, 3600, 3600, 3592, 3600, 3600, 3600, 3600, 3592,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3606, 3600, 3600, 3600, 3600, 3592,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3592, 3600, 3592, 3600, 3600, 3600, 3600, 3600, 3592, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3592, 3600, 3600, 3600, 3600, 3600, 3600, 3592, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3592, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3592, 3600, 3592, 3600, 3600, 3600, 3600, 3600,
+
+ 3600, 3600, 3600, 3592, 3592, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3592, 3600, 3600, 3600, 3600,
+ 3600, 3592, 3600, 3600, 3600, 3600, 3592, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3592, 3592, 3592, 3592, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3592, 3600, 3592, 3592,
+ 3600, 3592, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3592,
+ 3600, 3592, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3606,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3592, 3592, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3592, 3600, 3600, 3600, 3592, 3600, 3592, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3592,
+ 3592, 3600, 3600, 3600, 3592, 3592, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3592, 3600, 3592,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3592, 3600, 3600, 3592, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3592, 3600, 3600, 3600, 3600, 3592, 3600, 3600,
+ 3600, 3600, 3592, 3600, 3592, 3600, 3600, 3600, 3600, 3600,
+ 3592, 3600, 3600, 3592, 3600, 3600, 3600, 3600, 3600, 3600,
+
+ 3592, 3600, 3600, 3592, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3592, 3592, 3600, 3600,
+ 3606, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3592, 3592, 3600, 3592, 3600, 3600, 3592, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3592, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3592, 3600, 3600, 3600, 3600, 3600, 3592, 3600,
+ 3600, 3600, 3600, 3592, 3600, 3600, 3600, 3600, 3600, 3592,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3592,
+
+ 3600, 3600, 3600, 3592, 3592, 3592, 3600, 3600, 3600, 3592,
+ 3600, 3600, 3600, 3600, 3592, 3600, 3600, 3600, 3592, 3592,
+ 3592, 3600, 3600, 3600, 3592, 3600, 3600, 3592, 3600, 3592,
+ 3600, 3592, 3600, 3600, 3600, 3600, 3592, 3600, 3600, 3600,
+ 3600, 3592, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3592,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3592, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3592, 3600, 3592, 3600, 3592, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3592, 3592, 3600, 3600, 3600, 3592, 3600, 3592, 3600,
+
+ 3592, 3600, 3600, 3600, 3600, 3600, 3592, 3592, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3592, 3600, 3600, 3600, 3600, 3592,
+ 3600, 3592, 3600, 3600, 3600, 3592, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3592, 3592, 3592, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3592, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3592, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3592, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3592, 3600, 3600, 3592,
+ 3600, 3592, 3600, 3592, 3600, 3600, 3600, 3600, 3600, 3592,
+
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3592, 3600,
+ 3600, 3600, 3600, 3600, 3592, 3592, 3600, 3600, 3592, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3592, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3592, 3600, 3600, 3600, 3600,
+ 3592, 3600, 3600, 3600, 3600, 3600, 3592, 3600, 3600, 3600,
+ 3600, 3592, 3600, 3600, 3600, 3592, 3592, 3592, 3600, 3600,
+ 3600, 3592, 3592, 3592, 3592, 3600, 3600, 3600, 3600, 3592,
+ 3600, 3592, 3600, 3600, 3600, 3600, 3600, 3600, 3592, 3600,
+ 3600, 3600, 3600, 3600, 3592, 3592, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3592, 3592, 3600, 3600, 3600, 3600, 3600, 3592,
+
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3592, 3592, 3600, 3592, 3600,
+ 3600, 3592, 3600, 3592, 3600, 3600, 3600, 3600, 3592, 3600,
+ 3600, 3600, 3600, 3600, 3592, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3592, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3592, 3600, 3600, 3592, 3592, 3600, 3600, 3600, 3600, 3600,
+ 3592, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3592, 3600,
+ 3600, 3592, 3592, 3600, 3600, 3592, 3592, 3600, 3600, 3592,
+ 3592, 3592, 3592, 3592, 3592, 3592, 3592, 3600, 3600, 3592,
+
+ 3592, 3600, 3600, 3600, 3592, 3600, 3592, 3600, 3600, 3600,
+ 3600, 3592, 3600, 3592, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3592, 3592, 3592, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3592, 3600, 3600, 3600, 3600, 3592, 3600, 3592, 3600,
+ 3592, 3592, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3592, 3600, 3592, 3592, 3592, 3600, 3600,
+ 3592, 3600, 3600, 3592, 3600, 3600, 3600, 3600, 3600, 3600,
+
+ 3600, 3600, 3600, 3592, 3592, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3592, 3600, 3600,
+ 3600, 3592, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3592, 3600, 3592, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3592, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+ 3592, 3600, 3600, 3592, 3600, 3600, 3600, 3600, 3600, 3592,
+ 3600, 3600, 3600, 3600, 3600, 3600, 3592, 3600, 3600, 3600,
+ 3592, 3600, 3592, 3592, 3600, 3600, 3600, 3600, 3600, 3592,
+ 3592, 0, 3592, 3592, 3592, 3592, 3592, 3592, 3592, 3592,
+
+ 3592, 3592, 3592, 3592, 3592, 3592, 3592, 3592, 3592, 3592
} ;
-static const flex_int16_t yy_nxt[10245] =
+static const flex_int16_t yy_nxt[10312] =
{ 0,
18, 19, 20, 21, 22, 23, 22, 18, 18, 18,
18, 18, 22, 24, 25, 26, 27, 28, 29, 18,
@@ -1608,12 +1621,12 @@ static const flex_int16_t yy_nxt[10245] =
59, 60, 61, 120, 22, 58, 59, 60, 61, 86,
22, 64, 65, 66, 64, 65, 66, 87, 160, 160,
- 1339, 88, 85, 51, 119, 86, 51, 167, 167, 56,
+ 1351, 88, 85, 51, 119, 86, 51, 167, 167, 56,
120, 56, 170, 75, 76, 77, 78, 62, 22, 75,
76, 77, 78, 62, 22, 81, 82, 83, 67, 97,
86, 67, 19, 20, 21, 69, 70, 71, 19, 20,
21, 69, 70, 71, 81, 82, 83, 121, 108, 177,
- 177, 79, 72, 159, 410, 86, 97, 79, 72, 86,
+ 177, 79, 72, 159, 413, 86, 97, 79, 72, 86,
137, 90, 84, 90, 90, 86, 90, 170, 109, 178,
73, 86, 90, 86, 121, 108, 73, 176, 87, 72,
159, 84, 88, 86, 130, 72, 112, 137, 110, 162,
@@ -1624,8 +1637,8 @@ static const flex_int16_t yy_nxt[10245] =
173, 113, 86, 98, 86, 188, 166, 92, 93, 111,
99, 94, 114, 165, 100, 187, 95, 101, 85, 162,
85, 85, 162, 85, 163, 96, 102, 161, 115, 85,
- 103, 116, 189, 104, 181, 105, 106, 252, 117, 164,
- 118, 164, 164, 292, 164, 86, 107, 90, 86, 90,
+ 103, 116, 189, 104, 181, 105, 106, 253, 117, 164,
+ 118, 164, 164, 293, 164, 86, 107, 90, 86, 90,
90, 86, 90, 102, 86, 115, 122, 103, 116, 189,
104, 181, 105, 106, 123, 117, 180, 118, 126, 86,
124, 86, 127, 107, 125, 86, 156, 160, 160, 148,
@@ -1634,1099 +1647,1107 @@ static const flex_int16_t yy_nxt[10245] =
150, 123, 176, 180, 86, 126, 151, 124, 179, 127,
175, 125, 86, 156, 152, 86, 148, 157, 149, 167,
167, 158, 170, 128, 153, 129, 131, 150, 154, 155,
- 132, 182, 86, 151, 133, 179, 328, 86, 168, 205,
+ 132, 182, 86, 151, 133, 179, 331, 86, 168, 206,
134, 152, 169, 135, 169, 169, 86, 169, 86, 184,
136, 153, 86, 131, 195, 154, 155, 132, 182, 86,
- 174, 133, 174, 174, 166, 174, 205, 134, 86, 85,
- 135, 85, 85, 86, 85, 332, 184, 136, 138, 1187,
- 85, 195, 139, 90, 183, 90, 90, 206, 90, 185,
+ 174, 133, 174, 174, 166, 174, 206, 134, 86, 85,
+ 135, 85, 85, 86, 85, 335, 184, 136, 138, 1198,
+ 85, 195, 139, 90, 183, 90, 90, 207, 90, 185,
165, 86, 140, 141, 90, 142, 86, 193, 194, 197,
196, 163, 186, 161, 86, 138, 86, 86, 86, 139,
- 86, 183, 86, 86, 206, 240, 185, 198, 3557, 140,
+ 86, 183, 262, 86, 207, 337, 185, 198, 86, 140,
141, 91, 142, 143, 193, 194, 144, 196, 190, 186,
- 199, 86, 201, 145, 191, 200, 192, 146, 147, 86,
- 334, 86, 240, 86, 198, 86, 207, 3557, 86, 86,
- 143, 208, 3557, 144, 209, 190, 215, 199, 86, 201,
- 145, 191, 200, 192, 146, 147, 202, 203, 211, 86,
- 210, 212, 86, 207, 204, 228, 86, 3557, 208, 217,
- 216, 209, 86, 86, 213, 214, 3557, 86, 86, 86,
-
- 225, 3557, 86, 202, 203, 211, 218, 210, 212, 226,
- 220, 204, 228, 86, 221, 223, 217, 216, 227, 229,
- 224, 213, 214, 86, 232, 230, 219, 225, 86, 253,
- 222, 86, 86, 218, 86, 231, 226, 220, 86, 86,
- 233, 221, 223, 86, 86, 227, 229, 224, 235, 86,
- 234, 232, 230, 219, 237, 236, 253, 222, 238, 86,
- 3557, 239, 231, 86, 86, 241, 245, 233, 86, 246,
- 86, 86, 86, 3557, 242, 235, 86, 234, 86, 247,
- 248, 237, 236, 243, 251, 238, 3557, 86, 239, 244,
- 3557, 249, 241, 245, 257, 250, 246, 86, 86, 3557,
-
- 254, 242, 259, 261, 86, 258, 247, 248, 262, 86,
- 243, 251, 267, 86, 86, 260, 244, 255, 249, 86,
- 256, 257, 250, 86, 263, 266, 86, 254, 268, 259,
- 261, 270, 258, 264, 86, 262, 277, 269, 272, 267,
- 86, 271, 260, 86, 255, 265, 86, 256, 86, 86,
- 3557, 263, 266, 86, 86, 268, 177, 177, 270, 3557,
- 264, 3557, 170, 277, 269, 272, 3557, 273, 271, 3557,
- 3557, 164, 265, 164, 164, 169, 164, 169, 169, 90,
- 169, 90, 90, 174, 90, 174, 174, 274, 174, 86,
- 3557, 276, 3557, 280, 273, 278, 281, 282, 283, 284,
-
- 86, 275, 279, 3557, 285, 86, 338, 3557, 3557, 86,
- 86, 86, 286, 290, 86, 86, 291, 172, 276, 86,
- 280, 86, 278, 281, 282, 283, 284, 287, 275, 279,
- 86, 285, 340, 288, 289, 86, 86, 293, 86, 286,
- 290, 294, 86, 291, 301, 303, 3557, 302, 306, 3557,
- 307, 304, 308, 86, 305, 314, 310, 86, 295, 86,
- 288, 289, 86, 86, 86, 86, 311, 86, 294, 3557,
- 86, 301, 303, 86, 302, 306, 86, 307, 304, 86,
- 309, 305, 314, 310, 86, 295, 296, 312, 86, 318,
- 317, 297, 313, 311, 326, 371, 298, 315, 86, 86,
-
- 316, 86, 299, 300, 319, 86, 325, 309, 3557, 86,
- 3557, 86, 86, 296, 312, 329, 318, 317, 297, 313,
- 86, 326, 371, 298, 315, 327, 86, 316, 86, 299,
- 300, 319, 320, 325, 330, 321, 86, 322, 337, 335,
- 333, 86, 329, 342, 86, 331, 339, 86, 3557, 323,
- 345, 324, 327, 336, 341, 3557, 346, 3557, 86, 320,
- 3557, 3557, 321, 347, 322, 337, 86, 333, 86, 343,
- 86, 86, 331, 339, 344, 86, 323, 86, 324, 348,
- 336, 341, 86, 346, 86, 352, 86, 349, 350, 353,
- 347, 354, 355, 356, 86, 3557, 343, 351, 357, 361,
-
- 358, 344, 86, 86, 86, 86, 348, 86, 86, 86,
- 86, 363, 352, 86, 349, 350, 353, 359, 354, 355,
- 356, 86, 360, 362, 351, 357, 361, 358, 364, 365,
- 366, 367, 86, 86, 86, 368, 369, 370, 363, 86,
- 374, 375, 373, 86, 372, 377, 3557, 379, 376, 86,
- 362, 378, 86, 380, 381, 364, 86, 366, 367, 86,
- 86, 86, 86, 369, 370, 382, 86, 86, 384, 373,
- 395, 372, 86, 86, 379, 376, 385, 86, 378, 86,
- 380, 86, 387, 388, 389, 391, 86, 390, 383, 392,
- 394, 393, 396, 386, 86, 86, 86, 86, 399, 170,
-
- 86, 86, 86, 385, 86, 86, 397, 398, 401, 387,
- 388, 389, 391, 86, 390, 383, 392, 394, 393, 400,
- 386, 86, 404, 402, 86, 403, 406, 407, 86, 86,
- 86, 86, 86, 397, 398, 401, 408, 405, 86, 86,
- 409, 86, 412, 415, 411, 414, 400, 413, 3557, 404,
- 402, 86, 403, 86, 407, 86, 86, 416, 86, 417,
- 418, 86, 419, 408, 405, 420, 86, 409, 86, 412,
- 415, 411, 414, 86, 413, 421, 422, 424, 86, 423,
- 86, 86, 86, 428, 416, 427, 417, 418, 86, 419,
- 425, 429, 430, 432, 433, 434, 3557, 86, 3557, 436,
-
- 86, 86, 421, 86, 86, 86, 423, 426, 86, 86,
- 428, 86, 427, 86, 435, 437, 431, 425, 438, 3557,
- 432, 433, 434, 86, 86, 86, 436, 86, 86, 439,
- 440, 441, 3557, 442, 426, 443, 446, 444, 86, 86,
- 86, 435, 437, 431, 86, 438, 447, 448, 456, 3557,
- 449, 86, 86, 3557, 445, 490, 439, 440, 441, 86,
- 442, 86, 443, 446, 444, 86, 86, 457, 471, 464,
- 3557, 86, 3557, 3557, 448, 456, 86, 449, 86, 458,
- 463, 445, 450, 86, 459, 451, 460, 86, 465, 3557,
- 452, 453, 454, 455, 457, 86, 464, 466, 467, 461,
-
- 86, 86, 462, 86, 86, 468, 458, 463, 86, 450,
- 469, 459, 451, 460, 470, 465, 474, 452, 453, 454,
- 455, 478, 86, 475, 466, 467, 461, 3557, 86, 462,
- 472, 479, 480, 473, 481, 86, 482, 86, 86, 86,
- 86, 470, 483, 474, 476, 477, 3557, 3557, 478, 86,
- 475, 485, 484, 489, 86, 486, 86, 472, 479, 86,
- 473, 481, 86, 482, 86, 86, 487, 496, 86, 483,
- 86, 476, 477, 86, 86, 497, 488, 498, 485, 484,
- 489, 495, 486, 86, 491, 3557, 492, 3557, 86, 86,
- 499, 508, 503, 487, 496, 493, 500, 3557, 509, 86,
-
- 510, 3557, 494, 488, 498, 86, 3557, 86, 495, 86,
- 86, 491, 86, 492, 501, 504, 502, 499, 508, 503,
- 511, 3557, 493, 500, 86, 509, 512, 525, 505, 494,
- 3557, 506, 86, 507, 86, 3557, 3557, 528, 86, 86,
- 529, 501, 504, 502, 526, 3557, 3557, 86, 86, 86,
- 531, 3557, 86, 512, 525, 505, 3557, 530, 506, 533,
- 507, 513, 527, 514, 528, 543, 532, 529, 86, 515,
- 86, 526, 86, 516, 86, 544, 548, 531, 517, 542,
- 545, 518, 170, 86, 530, 550, 533, 86, 513, 527,
- 514, 86, 543, 532, 546, 551, 515, 86, 553, 3557,
-
- 516, 547, 566, 548, 3557, 517, 542, 86, 518, 519,
- 549, 520, 550, 86, 3557, 86, 555, 552, 86, 554,
- 86, 546, 551, 86, 521, 86, 556, 522, 547, 523,
- 86, 524, 557, 3557, 86, 86, 519, 549, 520, 86,
- 561, 558, 3557, 555, 552, 3557, 554, 86, 562, 3557,
- 563, 521, 3557, 556, 522, 86, 523, 3557, 524, 534,
- 535, 559, 86, 564, 86, 567, 565, 561, 558, 536,
- 537, 538, 539, 540, 568, 562, 541, 563, 86, 560,
- 569, 86, 571, 86, 86, 86, 534, 535, 559, 570,
- 564, 86, 567, 565, 573, 86, 536, 537, 538, 539,
-
- 540, 568, 86, 541, 574, 86, 560, 569, 572, 578,
- 86, 575, 576, 3557, 86, 577, 570, 579, 581, 580,
- 86, 573, 86, 582, 583, 3557, 86, 588, 86, 585,
- 3557, 574, 86, 604, 586, 572, 578, 607, 609, 589,
- 86, 584, 577, 86, 579, 581, 580, 86, 86, 587,
- 582, 583, 86, 86, 588, 590, 585, 86, 591, 593,
- 86, 586, 592, 3557, 607, 86, 589, 86, 584, 86,
- 86, 86, 86, 605, 606, 608, 587, 610, 594, 595,
- 612, 3557, 590, 86, 3557, 591, 593, 611, 613, 592,
- 596, 86, 597, 86, 614, 617, 86, 86, 616, 618,
-
- 605, 606, 608, 86, 610, 594, 595, 612, 86, 86,
- 3557, 615, 86, 619, 611, 613, 86, 596, 86, 597,
- 598, 614, 617, 620, 86, 616, 86, 621, 599, 600,
- 622, 624, 601, 602, 623, 86, 603, 86, 615, 625,
- 619, 3557, 86, 86, 631, 86, 626, 598, 627, 657,
- 620, 86, 630, 86, 621, 599, 600, 86, 624, 601,
- 602, 623, 86, 603, 628, 632, 625, 86, 86, 633,
- 86, 631, 629, 626, 86, 627, 634, 640, 636, 630,
- 635, 86, 637, 86, 86, 638, 639, 3557, 641, 642,
- 86, 628, 632, 643, 86, 3557, 633, 86, 3557, 629,
-
- 86, 86, 86, 634, 640, 636, 645, 635, 86, 637,
- 647, 86, 638, 639, 86, 641, 642, 644, 646, 86,
- 643, 648, 659, 86, 86, 86, 651, 86, 86, 649,
- 652, 650, 653, 645, 654, 655, 656, 647, 86, 86,
- 668, 86, 86, 86, 644, 646, 658, 660, 648, 86,
- 3557, 86, 661, 651, 86, 665, 649, 652, 650, 653,
- 664, 654, 655, 656, 86, 86, 666, 662, 86, 86,
- 663, 667, 86, 658, 660, 670, 669, 671, 86, 661,
- 3557, 3557, 665, 86, 86, 674, 86, 664, 673, 86,
- 675, 677, 3557, 666, 662, 86, 679, 663, 667, 86,
-
- 672, 86, 670, 669, 676, 681, 678, 86, 86, 86,
- 86, 682, 674, 680, 86, 673, 86, 675, 677, 86,
- 683, 3557, 692, 679, 693, 694, 3557, 672, 86, 86,
- 86, 676, 681, 678, 86, 86, 3557, 86, 682, 3557,
- 680, 695, 696, 697, 3557, 698, 731, 683, 684, 692,
- 86, 693, 694, 685, 699, 686, 86, 3557, 706, 702,
- 3557, 687, 703, 688, 86, 86, 689, 690, 695, 696,
- 697, 86, 698, 691, 86, 684, 86, 86, 86, 700,
- 685, 699, 686, 701, 86, 706, 702, 709, 687, 703,
- 688, 710, 704, 689, 690, 705, 711, 707, 713, 86,
-
- 691, 86, 86, 86, 712, 86, 700, 708, 86, 714,
- 701, 715, 717, 86, 709, 716, 719, 718, 710, 704,
- 86, 720, 705, 711, 86, 713, 3557, 723, 86, 86,
- 3557, 712, 86, 744, 708, 86, 714, 721, 715, 717,
- 724, 86, 716, 719, 718, 86, 722, 86, 720, 86,
- 726, 86, 725, 727, 723, 729, 732, 728, 86, 3557,
- 86, 3557, 86, 730, 721, 86, 3557, 724, 734, 733,
- 738, 86, 735, 722, 86, 86, 86, 726, 86, 725,
- 727, 86, 729, 732, 728, 86, 170, 739, 736, 737,
- 730, 741, 740, 86, 86, 734, 733, 738, 86, 735,
-
- 86, 86, 742, 743, 746, 745, 751, 747, 3557, 3557,
- 749, 748, 750, 762, 739, 736, 737, 86, 741, 740,
- 86, 86, 86, 86, 86, 752, 3557, 760, 86, 742,
- 86, 765, 745, 751, 747, 86, 86, 749, 748, 750,
- 753, 757, 756, 759, 761, 86, 758, 754, 763, 86,
- 755, 764, 752, 86, 86, 766, 768, 86, 86, 771,
- 767, 769, 86, 86, 772, 770, 773, 753, 775, 756,
- 759, 86, 86, 86, 754, 86, 86, 755, 86, 774,
- 776, 86, 778, 768, 86, 86, 771, 86, 769, 86,
- 86, 772, 770, 773, 777, 775, 779, 780, 783, 781,
-
- 784, 792, 86, 86, 86, 86, 774, 776, 782, 778,
- 785, 786, 787, 86, 3557, 3557, 3557, 86, 86, 788,
- 86, 777, 86, 86, 780, 783, 781, 784, 86, 793,
- 3557, 790, 789, 86, 794, 782, 86, 785, 786, 787,
- 86, 86, 86, 791, 795, 799, 788, 86, 800, 796,
- 86, 86, 797, 798, 86, 801, 793, 806, 790, 789,
- 3557, 794, 802, 803, 86, 804, 807, 3557, 86, 86,
- 791, 795, 799, 86, 86, 800, 796, 808, 805, 797,
- 798, 3557, 801, 809, 806, 86, 810, 86, 3557, 802,
- 803, 86, 804, 812, 813, 86, 817, 814, 86, 820,
-
- 815, 3557, 821, 816, 808, 805, 86, 86, 811, 86,
- 809, 86, 86, 810, 818, 86, 86, 819, 86, 86,
- 812, 813, 822, 817, 814, 823, 820, 815, 86, 86,
- 816, 824, 825, 86, 828, 811, 826, 86, 827, 86,
- 86, 818, 3557, 86, 819, 830, 829, 831, 832, 822,
- 833, 3557, 823, 86, 86, 835, 834, 836, 824, 825,
- 840, 842, 837, 826, 86, 827, 86, 86, 838, 86,
- 86, 839, 830, 829, 86, 86, 86, 833, 86, 86,
- 841, 843, 835, 834, 836, 844, 846, 86, 845, 837,
- 86, 847, 86, 86, 3557, 838, 854, 848, 839, 849,
-
- 853, 3557, 86, 856, 86, 86, 850, 841, 843, 855,
- 86, 86, 844, 86, 858, 845, 3557, 859, 86, 860,
- 851, 852, 857, 854, 848, 86, 849, 86, 86, 86,
- 856, 863, 86, 850, 869, 861, 855, 86, 864, 86,
- 86, 858, 865, 870, 859, 86, 860, 851, 852, 857,
- 862, 867, 866, 86, 3557, 871, 868, 879, 872, 86,
- 86, 869, 861, 86, 86, 864, 86, 873, 877, 865,
- 870, 3557, 874, 880, 3557, 875, 86, 862, 876, 866,
- 86, 86, 871, 86, 86, 872, 878, 86, 881, 86,
- 3557, 882, 86, 86, 873, 877, 86, 883, 884, 874,
-
- 880, 889, 875, 86, 885, 876, 86, 86, 886, 86,
- 888, 892, 86, 878, 890, 881, 891, 887, 882, 893,
- 3557, 86, 86, 3557, 883, 884, 86, 86, 894, 86,
- 896, 885, 86, 86, 86, 886, 897, 888, 892, 895,
- 898, 890, 902, 891, 887, 86, 893, 86, 903, 899,
- 86, 86, 904, 86, 905, 894, 909, 896, 86, 900,
- 901, 906, 3557, 897, 907, 86, 895, 898, 86, 902,
- 86, 3557, 86, 911, 908, 903, 899, 86, 912, 904,
- 86, 905, 86, 909, 86, 910, 900, 901, 906, 86,
- 914, 907, 916, 915, 913, 86, 917, 3557, 86, 921,
-
- 911, 908, 86, 918, 86, 912, 86, 919, 86, 920,
- 923, 924, 910, 86, 86, 922, 86, 914, 926, 916,
- 915, 913, 925, 917, 86, 927, 921, 3557, 86, 86,
- 918, 86, 928, 86, 919, 86, 920, 923, 924, 929,
- 86, 930, 922, 931, 932, 926, 933, 934, 936, 925,
- 3557, 939, 943, 3557, 170, 935, 86, 86, 86, 928,
- 86, 86, 86, 86, 86, 940, 929, 941, 930, 937,
- 931, 932, 942, 933, 934, 86, 944, 938, 86, 945,
- 86, 950, 935, 86, 86, 86, 946, 86, 947, 948,
- 86, 949, 940, 3557, 941, 86, 937, 951, 86, 942,
-
- 86, 86, 86, 944, 938, 952, 945, 953, 950, 86,
- 962, 954, 3557, 946, 86, 947, 948, 86, 86, 3557,
- 963, 3557, 86, 86, 951, 964, 967, 965, 976, 3557,
- 86, 3557, 952, 3557, 953, 3557, 3557, 962, 954, 955,
- 966, 3557, 956, 86, 86, 969, 957, 963, 86, 958,
- 3557, 968, 964, 967, 965, 970, 959, 960, 972, 961,
- 86, 86, 86, 971, 86, 986, 955, 966, 86, 956,
- 973, 86, 969, 957, 86, 974, 958, 985, 968, 86,
- 975, 86, 970, 959, 960, 972, 961, 86, 86, 86,
- 971, 984, 986, 988, 987, 3557, 3557, 973, 86, 86,
-
- 992, 990, 974, 86, 985, 3557, 3557, 975, 977, 978,
- 989, 979, 3557, 86, 980, 993, 86, 991, 984, 981,
- 988, 987, 86, 86, 86, 982, 983, 992, 990, 994,
- 996, 995, 86, 1001, 86, 977, 978, 989, 979, 997,
- 998, 980, 993, 86, 991, 999, 981, 1000, 1003, 1002,
- 3557, 86, 982, 983, 1004, 1005, 994, 996, 995, 86,
- 1001, 86, 1006, 86, 1008, 1007, 997, 86, 1009, 1010,
- 86, 1011, 86, 1016, 1000, 1003, 1002, 86, 1012, 86,
- 86, 1004, 1005, 1013, 86, 1015, 86, 86, 1019, 1006,
- 86, 86, 1007, 86, 1014, 1009, 1010, 1017, 1011, 86,
-
- 1016, 86, 86, 1018, 86, 1012, 1022, 1021, 1020, 86,
- 1013, 86, 1015, 1023, 86, 1019, 86, 86, 1026, 1024,
- 1025, 1014, 86, 1027, 1017, 1029, 1028, 1031, 1030, 1032,
- 1018, 1033, 3557, 1022, 1021, 1020, 86, 1034, 1037, 1035,
- 1038, 86, 3557, 1036, 3557, 86, 1024, 86, 86, 1039,
- 86, 86, 1041, 1028, 1042, 1030, 1032, 86, 1047, 86,
- 86, 86, 86, 86, 1034, 86, 1035, 86, 86, 1040,
- 1036, 1043, 1045, 1044, 86, 1048, 1039, 86, 86, 1041,
- 1046, 1042, 86, 86, 1049, 86, 1050, 1051, 86, 1052,
- 1053, 86, 3557, 86, 1054, 3557, 1040, 86, 1043, 1045,
-
- 1044, 1055, 1048, 86, 86, 1056, 1057, 1046, 86, 1059,
- 1058, 1049, 86, 86, 1089, 1063, 1052, 1053, 1061, 86,
- 86, 1054, 1060, 1062, 86, 1064, 1066, 86, 1055, 86,
- 1065, 86, 1056, 1057, 86, 86, 1059, 1058, 1067, 86,
- 1068, 86, 1063, 1069, 1070, 1061, 86, 1072, 1075, 1060,
- 1062, 86, 86, 1066, 1076, 1071, 86, 86, 86, 3557,
- 1073, 1078, 86, 1077, 86, 1067, 1079, 1068, 1074, 86,
- 1069, 1070, 86, 86, 1072, 1075, 1085, 1086, 1080, 1081,
- 86, 86, 1071, 86, 86, 86, 86, 1073, 1078, 1082,
- 1077, 1083, 1084, 1079, 86, 1074, 1090, 1091, 86, 1087,
-
- 86, 1088, 1092, 1085, 1086, 1080, 1081, 1093, 86, 86,
- 86, 1095, 86, 86, 86, 86, 1082, 1094, 1083, 1084,
- 1096, 1098, 1097, 1090, 1091, 1099, 1087, 1102, 1088, 1092,
- 86, 3557, 86, 1100, 1093, 86, 1104, 1106, 1095, 86,
- 1109, 86, 86, 86, 1094, 86, 1101, 1096, 1098, 1097,
- 1103, 1105, 86, 86, 1102, 86, 1111, 86, 86, 1107,
- 1100, 1108, 1110, 1104, 1106, 1112, 1113, 86, 86, 86,
- 1115, 1116, 86, 1101, 1114, 3557, 1124, 1103, 1105, 86,
- 3557, 86, 1117, 1111, 1118, 1121, 1107, 1123, 1108, 1122,
- 1125, 1119, 86, 1113, 86, 86, 1126, 86, 1129, 1120,
-
- 1131, 1114, 86, 86, 3557, 86, 86, 86, 86, 1117,
- 1127, 1118, 1121, 86, 1123, 1128, 1122, 1130, 1119, 86,
- 86, 1133, 86, 1126, 86, 1132, 1120, 86, 1137, 86,
- 86, 1140, 1134, 1138, 86, 1141, 1142, 1127, 1139, 1143,
- 3557, 86, 1128, 86, 1130, 1135, 86, 1136, 1133, 1144,
- 86, 1147, 1132, 1160, 86, 1148, 86, 3557, 1140, 1134,
- 170, 86, 1141, 1142, 86, 1139, 1143, 1145, 1158, 86,
- 1146, 86, 1135, 86, 1136, 86, 1144, 1149, 1147, 1150,
- 86, 1159, 1148, 1169, 86, 86, 3557, 1161, 3557, 86,
- 1157, 86, 3557, 86, 1145, 1158, 1162, 1146, 1167, 1163,
-
- 1165, 86, 1186, 1168, 1149, 1164, 1150, 1151, 1159, 1152,
- 1169, 86, 3557, 1153, 1161, 1154, 86, 1157, 86, 86,
- 1155, 1171, 86, 1162, 1166, 1156, 1163, 1165, 1170, 86,
- 86, 86, 1164, 1172, 1151, 1174, 1152, 86, 1173, 1176,
- 1153, 86, 1154, 1178, 86, 1175, 1177, 1155, 1171, 1181,
- 86, 1166, 1156, 1179, 86, 1170, 86, 86, 1180, 86,
- 1172, 1182, 1174, 1184, 1183, 1173, 1176, 86, 86, 1185,
- 1178, 86, 1175, 1177, 1188, 1191, 1181, 1199, 1189, 3557,
- 1179, 1190, 86, 86, 86, 1180, 86, 3557, 1182, 86,
- 1200, 1183, 86, 1203, 1201, 86, 1202, 3557, 3557, 1205,
-
- 1211, 86, 1191, 1204, 1199, 1189, 86, 86, 1190, 1192,
- 3557, 86, 86, 1206, 1193, 3557, 1194, 1200, 86, 86,
- 1203, 1201, 1195, 1202, 86, 86, 1205, 1196, 1197, 1207,
- 1204, 1208, 86, 1210, 1198, 86, 1192, 1209, 1213, 86,
- 1206, 1193, 86, 1194, 86, 86, 1212, 1218, 1214, 1195,
- 1216, 1215, 1221, 86, 1196, 1197, 1207, 86, 1208, 86,
- 1210, 1198, 86, 1217, 1209, 1213, 1219, 1222, 86, 1220,
- 1224, 1223, 86, 1212, 86, 1214, 86, 1216, 1215, 86,
- 1226, 1225, 1227, 1229, 86, 1232, 3557, 1230, 1233, 86,
- 1217, 86, 86, 1219, 1222, 86, 1220, 1224, 1223, 1228,
-
- 1231, 86, 1235, 1244, 86, 86, 86, 86, 1225, 1227,
- 1229, 86, 86, 1234, 1230, 1233, 1236, 86, 1237, 1239,
- 1240, 86, 3557, 86, 86, 1238, 1228, 1231, 1242, 1235,
- 1241, 86, 86, 1245, 86, 86, 1248, 1246, 86, 3557,
- 1234, 1243, 3557, 1236, 86, 1237, 1239, 1240, 86, 86,
- 86, 86, 1238, 1250, 1247, 1242, 1251, 1241, 86, 1249,
- 1245, 86, 1252, 1248, 1246, 86, 86, 86, 1243, 1253,
- 1254, 1255, 1256, 1258, 86, 1257, 1259, 1260, 3557, 1264,
- 1250, 1247, 1261, 1251, 1265, 3557, 1249, 3557, 1268, 1252,
- 86, 86, 86, 86, 86, 86, 1253, 1254, 1255, 1256,
-
- 1262, 86, 1257, 1269, 1260, 86, 1263, 1273, 86, 1261,
- 1266, 86, 86, 1267, 86, 1268, 86, 86, 1270, 1272,
- 1271, 86, 1275, 1274, 1277, 86, 1278, 1262, 86, 3557,
- 1269, 86, 1276, 1263, 1273, 86, 86, 1266, 86, 86,
- 1267, 1279, 1280, 3557, 1281, 1270, 1272, 1271, 1282, 1286,
- 1274, 1283, 1284, 1278, 86, 86, 86, 86, 1285, 1276,
- 86, 1288, 1289, 86, 1287, 1291, 1290, 1294, 1279, 1280,
- 86, 1281, 86, 1293, 86, 1282, 1286, 1295, 1283, 1284,
- 86, 86, 86, 86, 86, 1285, 86, 1292, 1288, 1289,
- 1296, 1287, 1291, 1290, 86, 1298, 1297, 1300, 86, 86,
-
- 1293, 1299, 1301, 1305, 86, 86, 86, 1303, 86, 1302,
- 86, 1304, 1306, 1307, 1292, 1308, 86, 1296, 1310, 86,
- 1318, 1309, 1298, 1297, 1300, 86, 1312, 86, 1299, 1301,
- 1311, 86, 1313, 1316, 1303, 86, 1302, 86, 1304, 1315,
- 1314, 1317, 1308, 86, 86, 86, 86, 86, 1309, 86,
- 86, 1319, 86, 1320, 86, 1321, 1325, 1311, 86, 1313,
- 1323, 1324, 1322, 86, 86, 86, 1315, 1314, 1317, 86,
- 86, 86, 86, 1326, 1330, 1328, 1331, 1327, 1319, 3557,
- 1320, 3557, 1321, 1325, 86, 86, 86, 1323, 1324, 1322,
- 86, 1329, 1333, 1332, 1334, 86, 1337, 1336, 1338, 86,
-
- 1326, 1335, 1328, 1340, 1327, 86, 86, 86, 86, 86,
- 86, 86, 86, 1341, 86, 1343, 1345, 86, 1329, 1333,
- 1332, 86, 1346, 1337, 1336, 1338, 1342, 1344, 1335, 1347,
- 1340, 86, 1349, 1348, 86, 86, 1351, 1350, 1357, 170,
- 1341, 86, 1343, 86, 1353, 1355, 1352, 1354, 86, 1346,
- 86, 86, 1358, 1342, 1344, 86, 1347, 3557, 1360, 1349,
- 1348, 86, 1356, 1351, 1350, 86, 86, 1359, 1361, 86,
- 86, 1353, 86, 1352, 1354, 1362, 1365, 1363, 86, 1364,
- 86, 1368, 1371, 1367, 86, 1360, 1418, 1366, 1369, 1356,
- 86, 86, 86, 86, 1359, 1361, 3557, 86, 86, 86,
-
- 86, 86, 1362, 1365, 1363, 1370, 1364, 1372, 1368, 86,
- 1367, 1374, 1373, 86, 1366, 1369, 1375, 1376, 86, 1377,
- 86, 86, 1381, 86, 86, 1382, 1383, 1384, 1378, 3557,
- 1379, 3557, 1370, 1380, 1372, 1387, 1385, 86, 1374, 1373,
- 3557, 86, 1388, 1375, 1376, 86, 1377, 1390, 86, 1381,
- 86, 86, 1382, 1383, 86, 1378, 86, 1379, 1386, 86,
- 1380, 1389, 1387, 1385, 1391, 86, 1393, 1392, 1394, 1388,
- 86, 86, 1398, 3557, 1390, 86, 1395, 3557, 1399, 1397,
- 1396, 86, 1400, 3557, 1404, 1386, 86, 86, 1389, 86,
- 86, 1391, 1402, 1393, 1392, 1394, 86, 1403, 1405, 86,
-
- 86, 1401, 86, 1395, 86, 1399, 1397, 1396, 86, 1400,
- 86, 1404, 1411, 1407, 86, 1406, 1412, 1408, 1410, 1402,
- 86, 86, 1417, 3557, 1403, 1405, 1409, 86, 1401, 1413,
- 86, 86, 86, 1416, 86, 3557, 3557, 86, 1415, 1411,
- 1407, 86, 1406, 1412, 1408, 1410, 1414, 86, 1419, 1417,
- 1420, 1421, 86, 1409, 86, 86, 1413, 86, 1422, 1423,
- 1416, 1424, 1426, 1425, 86, 1415, 1428, 86, 1427, 86,
- 86, 86, 1429, 1414, 1430, 1419, 86, 1420, 1421, 86,
- 86, 1431, 1433, 1432, 1434, 1422, 1423, 1437, 1424, 1426,
- 1425, 86, 1435, 86, 1436, 1427, 86, 1443, 86, 1429,
-
- 1438, 86, 86, 86, 1440, 1439, 86, 1441, 1431, 1433,
- 1432, 1434, 86, 1442, 1437, 1451, 86, 1452, 1453, 1435,
- 86, 1436, 1457, 86, 1443, 1454, 1467, 86, 3557, 86,
- 3557, 1440, 86, 1455, 1441, 86, 3557, 1461, 1456, 1458,
- 1442, 1444, 1451, 86, 1452, 1445, 3557, 1459, 1446, 1447,
- 86, 86, 1454, 1448, 86, 86, 86, 1460, 86, 1449,
- 1455, 86, 1462, 1450, 1461, 1456, 1458, 86, 1444, 86,
- 1465, 1463, 1445, 1464, 1459, 1446, 1447, 86, 1466, 1470,
- 1448, 1468, 1473, 86, 1460, 1469, 1449, 86, 86, 1462,
- 1450, 1471, 86, 1472, 1474, 86, 1476, 1465, 1463, 86,
-
- 1464, 86, 86, 1475, 86, 1466, 1470, 1477, 1468, 1483,
- 1489, 1484, 1469, 3557, 86, 3557, 1486, 1487, 1471, 86,
- 1472, 86, 1485, 1476, 86, 86, 86, 1488, 3557, 1490,
- 1475, 86, 3557, 86, 1477, 1478, 1483, 1489, 1484, 1492,
- 1479, 86, 1480, 86, 1481, 86, 1482, 1493, 86, 1485,
- 1491, 1498, 1494, 86, 1488, 1496, 1490, 86, 1495, 86,
- 86, 1497, 1478, 1499, 86, 1503, 1492, 1479, 1504, 1480,
- 3557, 1481, 1500, 1482, 1502, 3557, 86, 1491, 1498, 86,
- 86, 86, 1496, 86, 1501, 1495, 1506, 86, 1497, 1505,
- 1499, 3557, 86, 1507, 86, 1504, 1508, 86, 1513, 1500,
-
- 86, 1502, 1509, 1510, 86, 86, 86, 1511, 1512, 1514,
- 1515, 1501, 1516, 1506, 1517, 86, 1505, 86, 86, 1518,
- 1507, 86, 1523, 1508, 86, 1513, 1519, 86, 1525, 1509,
- 1510, 86, 1520, 1522, 1511, 1512, 1514, 86, 1524, 1516,
- 1521, 86, 1526, 1531, 86, 86, 1518, 3557, 86, 86,
- 86, 86, 1527, 1519, 86, 86, 1528, 1529, 1530, 1520,
- 1522, 1533, 86, 86, 86, 1524, 1532, 1521, 86, 1526,
- 86, 86, 1534, 86, 86, 1535, 1536, 1538, 1537, 1527,
- 1540, 3557, 86, 1528, 1529, 1530, 1539, 3557, 1533, 86,
- 1541, 1542, 3557, 1532, 1543, 86, 86, 1544, 1545, 1534,
-
- 86, 3557, 1535, 86, 1538, 1537, 1548, 1540, 86, 1546,
- 86, 86, 1547, 1539, 86, 1549, 86, 1541, 1542, 1550,
- 86, 1543, 1551, 1552, 1544, 1545, 1553, 1555, 86, 1556,
- 86, 1554, 86, 1548, 86, 1557, 1546, 86, 1558, 1547,
- 1560, 86, 1549, 3557, 86, 86, 1550, 86, 1559, 1551,
- 1552, 86, 1563, 1553, 1555, 1561, 1562, 1564, 1554, 1565,
- 86, 86, 1567, 1566, 86, 1558, 86, 86, 86, 1569,
- 86, 86, 86, 86, 1568, 1559, 1572, 1573, 1574, 1563,
- 1570, 170, 1561, 1562, 86, 86, 1565, 86, 1571, 1567,
- 1566, 86, 86, 1575, 3557, 1578, 1569, 1576, 3557, 86,
-
- 1581, 1568, 86, 1577, 1579, 1574, 1580, 1570, 86, 86,
- 86, 86, 1583, 86, 1582, 1571, 1585, 1588, 86, 1584,
- 1586, 86, 1578, 86, 1576, 86, 86, 1581, 1587, 86,
- 1577, 1579, 1589, 1580, 1590, 1592, 86, 1591, 86, 1583,
- 1593, 1582, 1594, 1585, 86, 86, 1584, 1586, 1595, 1596,
- 86, 86, 1597, 3557, 3557, 1587, 86, 1604, 1598, 1589,
- 1599, 1590, 1603, 1600, 1591, 86, 86, 86, 86, 1594,
- 86, 1601, 86, 1605, 1602, 1595, 1596, 1606, 1608, 1597,
- 86, 1607, 86, 1609, 1604, 1598, 86, 1599, 1610, 1603,
- 1600, 1611, 1614, 86, 86, 1612, 86, 1613, 1601, 86,
-
- 1605, 1602, 1616, 1615, 86, 1608, 86, 3557, 1607, 86,
- 1617, 86, 1618, 1619, 86, 86, 1623, 86, 1611, 1614,
- 86, 1624, 1612, 1620, 1613, 86, 1621, 3557, 1627, 1616,
- 1615, 3557, 1622, 3557, 86, 86, 86, 1617, 1625, 1618,
- 1619, 86, 86, 1623, 86, 1629, 1626, 86, 1624, 1628,
- 1620, 3557, 3557, 1621, 86, 1630, 86, 1631, 1635, 1622,
- 86, 1634, 1632, 86, 86, 1625, 1633, 1636, 1637, 86,
- 86, 3557, 1629, 1626, 86, 1639, 1628, 1638, 86, 1640,
- 86, 86, 1630, 1641, 1631, 1635, 86, 86, 1634, 1632,
- 86, 1642, 1644, 1633, 1636, 1637, 1643, 86, 1645, 86,
-
- 1646, 1647, 1639, 86, 1638, 3557, 1640, 1648, 1650, 86,
- 1641, 1649, 3557, 1655, 86, 1651, 1652, 1654, 1642, 1644,
- 86, 1656, 1653, 1643, 86, 1645, 1657, 86, 86, 1658,
- 1660, 3557, 86, 86, 1648, 86, 86, 86, 1649, 86,
- 1659, 1661, 1651, 1652, 1654, 86, 1664, 1662, 3557, 1653,
- 1663, 1666, 1667, 86, 1668, 86, 1658, 86, 86, 86,
- 1671, 86, 1665, 86, 86, 86, 86, 1659, 1661, 1669,
- 1672, 1670, 86, 1664, 1662, 86, 86, 1663, 1666, 1667,
- 86, 1668, 86, 86, 1673, 1683, 1674, 1671, 1676, 1665,
- 86, 1675, 86, 1677, 1678, 1680, 1669, 1672, 1670, 1679,
-
- 1681, 86, 1684, 86, 1687, 1682, 1685, 86, 86, 1691,
- 86, 1673, 1683, 86, 3557, 1686, 1688, 1694, 86, 1693,
- 86, 1678, 1680, 86, 86, 86, 1679, 1681, 1689, 1684,
- 1690, 86, 1682, 1685, 1703, 86, 86, 1692, 86, 1695,
- 86, 86, 1686, 1688, 1696, 86, 1693, 86, 1697, 86,
- 1698, 1699, 86, 1702, 1700, 1689, 86, 1690, 86, 86,
- 86, 1703, 1701, 1704, 1692, 86, 1695, 86, 86, 1708,
- 1707, 1696, 1709, 1710, 1705, 1697, 1706, 1698, 1699, 1711,
- 1702, 1700, 86, 1718, 86, 86, 1713, 86, 3557, 1701,
- 1704, 1712, 86, 1714, 1715, 86, 86, 1707, 1716, 86,
-
- 1710, 1705, 86, 1706, 86, 86, 1711, 86, 1719, 1721,
- 1718, 1717, 1720, 1713, 1723, 1722, 86, 3557, 1712, 86,
- 1714, 1715, 1724, 1725, 86, 1716, 86, 1730, 1728, 1729,
- 86, 1726, 1727, 1736, 1731, 1719, 1721, 1742, 1717, 1720,
- 1732, 86, 1722, 86, 86, 1734, 86, 86, 1737, 1724,
- 86, 86, 1740, 1733, 1730, 86, 1729, 86, 1726, 1727,
- 86, 1731, 86, 86, 1735, 86, 1741, 1732, 1738, 86,
- 1739, 86, 1734, 1744, 86, 86, 86, 86, 1743, 1740,
- 1733, 1746, 1745, 1747, 1751, 86, 3557, 1748, 1749, 1750,
- 86, 1735, 86, 1741, 86, 1738, 1752, 1739, 86, 86,
-
- 86, 1753, 3557, 86, 1755, 1743, 86, 1761, 86, 1745,
- 1747, 1751, 1757, 86, 1748, 1749, 1750, 1754, 86, 86,
- 1756, 1758, 3557, 1752, 86, 1760, 3557, 1759, 1753, 86,
- 86, 1755, 86, 86, 1761, 1762, 1763, 3557, 86, 1757,
- 1765, 1772, 86, 1764, 1754, 86, 1767, 1756, 1758, 86,
- 1766, 1768, 1760, 86, 1759, 86, 1769, 86, 1770, 1771,
- 3557, 1773, 1762, 1763, 86, 86, 1775, 1765, 86, 1774,
- 1764, 86, 86, 1767, 1776, 1778, 86, 1766, 1768, 86,
- 86, 1777, 1779, 1769, 86, 1770, 1771, 1780, 1773, 86,
- 1781, 86, 86, 1775, 1782, 86, 1774, 1784, 1783, 3557,
-
- 1788, 1776, 1778, 1791, 1785, 86, 1787, 1786, 1777, 1779,
- 3557, 86, 86, 86, 1780, 86, 86, 1781, 170, 1793,
- 1794, 86, 86, 1797, 1784, 1783, 86, 1788, 1789, 1790,
- 1791, 1785, 1795, 1787, 1786, 1792, 86, 86, 1799, 86,
- 1798, 1796, 86, 1807, 1800, 86, 1793, 1794, 86, 1801,
- 86, 86, 1803, 1802, 1804, 1789, 1790, 1805, 86, 1795,
- 86, 86, 1792, 1810, 1806, 1799, 1809, 1798, 1796, 1811,
- 86, 1800, 86, 1812, 86, 86, 1801, 86, 1808, 1814,
- 1802, 1804, 1813, 1816, 86, 86, 86, 86, 1815, 86,
- 1810, 1806, 86, 1809, 1817, 86, 1811, 86, 1818, 86,
-
- 1812, 1820, 1819, 1825, 1826, 1808, 1814, 1821, 86, 1813,
- 1816, 86, 1829, 3557, 86, 1815, 86, 1822, 86, 3557,
- 1823, 1817, 1827, 1830, 86, 1818, 86, 1832, 1820, 1819,
- 86, 1826, 1824, 1833, 1821, 86, 1834, 1835, 1828, 1829,
- 1831, 86, 86, 3557, 1822, 86, 86, 1823, 1836, 1827,
- 1830, 86, 1837, 1839, 1832, 1838, 3557, 1841, 3557, 1824,
- 86, 1840, 1845, 1842, 1846, 1828, 1843, 1831, 86, 86,
- 86, 86, 86, 1844, 86, 1836, 1847, 1848, 86, 1837,
- 86, 86, 1838, 86, 1841, 86, 86, 1850, 1840, 1845,
- 1842, 1849, 3557, 1843, 1851, 1852, 86, 1853, 86, 1856,
-
- 1844, 1854, 1855, 1858, 1857, 3557, 86, 1859, 86, 86,
- 86, 86, 86, 86, 1860, 1871, 1864, 86, 1849, 86,
- 86, 1851, 1852, 86, 86, 1861, 1856, 86, 1854, 1855,
- 1858, 1857, 1865, 1862, 1859, 1863, 1866, 86, 86, 86,
- 1868, 1860, 86, 1864, 86, 1867, 1869, 86, 3557, 1872,
- 1870, 3557, 1861, 1875, 1877, 86, 86, 86, 1873, 1865,
- 1862, 86, 1863, 1866, 86, 86, 86, 1868, 1874, 86,
- 1879, 1882, 1867, 1869, 1880, 86, 1872, 1870, 1876, 1878,
- 1875, 86, 1881, 86, 86, 1873, 86, 1883, 1884, 86,
- 1885, 86, 86, 1886, 3557, 1874, 3557, 1879, 1882, 86,
-
- 86, 1880, 1888, 1914, 1887, 1876, 1878, 1889, 86, 1881,
- 1890, 86, 1891, 1896, 1883, 1884, 86, 1885, 1895, 1897,
- 1886, 1892, 86, 86, 1901, 86, 1893, 1899, 1894, 1888,
- 86, 1887, 1898, 86, 1889, 86, 86, 1890, 1900, 1891,
- 86, 1903, 86, 1902, 1904, 1895, 86, 86, 1892, 86,
- 1905, 86, 1907, 1893, 1899, 1894, 1906, 86, 1908, 1898,
- 86, 1915, 86, 1909, 1910, 1900, 86, 3557, 1903, 86,
- 1902, 1904, 86, 1916, 86, 3557, 1913, 1905, 86, 1907,
- 3557, 86, 1917, 1906, 1911, 1908, 1919, 1912, 86, 86,
- 1909, 1910, 1918, 86, 86, 86, 1921, 1920, 1924, 1922,
-
- 1916, 1925, 86, 1913, 1923, 1948, 86, 86, 1928, 1917,
- 86, 1911, 1927, 1919, 1912, 1926, 86, 86, 1929, 1918,
- 86, 86, 1930, 1921, 1920, 1924, 1931, 3557, 1925, 86,
- 1932, 86, 1933, 1935, 86, 1928, 1936, 86, 3557, 1927,
- 86, 1938, 1926, 1937, 3557, 1929, 1934, 1940, 1939, 1930,
- 86, 86, 86, 1931, 86, 1944, 86, 1932, 86, 1933,
- 1935, 1941, 1946, 1936, 1943, 86, 1942, 86, 1938, 1949,
- 1937, 1945, 1947, 1934, 1940, 1939, 86, 86, 86, 1950,
- 1951, 1952, 1944, 1954, 86, 86, 1955, 1953, 1958, 1946,
- 1956, 1943, 1957, 86, 1962, 1959, 1949, 86, 1945, 1947,
-
- 86, 3557, 1963, 86, 1960, 86, 86, 86, 1952, 86,
- 1961, 1967, 86, 1955, 1953, 86, 1964, 1956, 1968, 1957,
- 86, 86, 1959, 1969, 86, 1965, 86, 1966, 86, 1963,
- 86, 1960, 1970, 86, 1972, 86, 1973, 1961, 1967, 1971,
- 86, 86, 1974, 1964, 1975, 1968, 86, 1977, 86, 86,
- 1969, 1978, 1965, 1979, 1966, 86, 1986, 86, 1980, 1970,
- 1984, 1972, 1983, 1973, 1982, 1976, 1971, 86, 1981, 1974,
- 86, 86, 1985, 86, 1990, 86, 1987, 1991, 3557, 86,
- 1979, 86, 1988, 86, 86, 86, 86, 86, 86, 1983,
- 1992, 1982, 1976, 86, 1993, 1981, 1989, 1995, 1996, 1985,
-
- 1994, 86, 1998, 1987, 1991, 86, 86, 86, 1997, 1988,
- 2001, 2004, 1999, 86, 2000, 2002, 86, 1992, 2006, 86,
- 86, 1993, 2008, 1989, 1995, 1996, 86, 1994, 86, 1998,
- 170, 2003, 86, 86, 86, 1997, 2005, 2001, 86, 1999,
- 2007, 2000, 2002, 86, 86, 2006, 2009, 2011, 86, 86,
- 2010, 2012, 2013, 2015, 2014, 2017, 2016, 2019, 2003, 86,
- 86, 86, 86, 2005, 86, 2018, 86, 2007, 2021, 2020,
- 86, 86, 2022, 2009, 2011, 2025, 2024, 2010, 2012, 2013,
- 2023, 2014, 2017, 2016, 86, 86, 86, 2027, 2026, 2028,
- 2029, 2047, 2018, 86, 86, 86, 2020, 86, 86, 2022,
-
- 2030, 2031, 86, 86, 2033, 86, 3557, 2023, 86, 2032,
- 86, 2034, 86, 86, 2027, 2026, 2028, 2029, 86, 2035,
- 2036, 2038, 2037, 86, 3557, 3557, 86, 2030, 2031, 2045,
- 2044, 2033, 2039, 86, 86, 86, 2032, 86, 2034, 2046,
- 3557, 86, 3557, 86, 2041, 2040, 2035, 2036, 2038, 2037,
- 86, 86, 86, 2042, 2049, 2048, 2045, 2044, 2051, 2039,
- 2043, 86, 86, 2052, 2053, 2050, 86, 2056, 2057, 86,
- 86, 2041, 2040, 86, 2058, 86, 2059, 2060, 2067, 2061,
- 2042, 2049, 2048, 86, 2054, 2051, 2055, 2043, 2069, 86,
- 2052, 2053, 2050, 86, 2056, 86, 2062, 86, 2065, 2066,
-
- 2068, 86, 86, 2059, 86, 86, 2061, 2070, 2063, 2064,
- 86, 2054, 2071, 2055, 86, 86, 86, 2085, 2072, 2073,
- 86, 86, 86, 2062, 86, 86, 2066, 2068, 2074, 2075,
- 2076, 2077, 2078, 2080, 2070, 2063, 2064, 86, 2079, 86,
- 86, 2081, 2082, 3557, 86, 2072, 2073, 2083, 2084, 86,
- 86, 3557, 86, 86, 2090, 2074, 86, 2076, 2077, 86,
- 2080, 86, 2091, 86, 86, 2079, 2093, 2099, 2081, 2082,
- 86, 86, 2092, 86, 2083, 2084, 2086, 2087, 2088, 86,
- 2094, 2090, 2097, 2089, 2098, 2095, 2100, 86, 2101, 2091,
- 2096, 86, 86, 2102, 2099, 86, 86, 2106, 86, 2092,
-
- 86, 2103, 86, 2086, 2087, 2088, 2105, 2094, 2108, 2097,
- 2089, 2098, 86, 2100, 2104, 2101, 2111, 86, 2112, 86,
- 2109, 86, 2107, 86, 86, 86, 2110, 86, 2103, 2113,
- 2114, 86, 2116, 2105, 86, 2108, 86, 2115, 2118, 86,
- 2117, 2104, 86, 2111, 86, 86, 2119, 2109, 2121, 2107,
- 86, 2130, 2120, 2110, 2122, 2132, 2113, 86, 86, 2116,
- 86, 2123, 2124, 86, 2115, 2118, 2125, 2117, 2126, 86,
- 2127, 2128, 86, 86, 2129, 86, 2135, 2131, 86, 2120,
- 2138, 2122, 86, 86, 86, 86, 2134, 86, 2123, 2124,
- 2136, 2139, 2140, 2125, 2137, 2126, 86, 2127, 2128, 86,
-
- 2133, 2129, 86, 2142, 2131, 2141, 86, 86, 86, 2144,
- 86, 2145, 86, 2134, 86, 86, 2143, 2136, 86, 2140,
- 2146, 2137, 2147, 86, 86, 2149, 86, 2133, 2148, 86,
- 2142, 86, 2141, 86, 2150, 2151, 2144, 2154, 2145, 3557,
- 3557, 2152, 2153, 2143, 86, 2159, 2162, 2146, 86, 2147,
- 2156, 86, 2149, 2155, 86, 2148, 2157, 86, 86, 2158,
- 86, 86, 2160, 2161, 2154, 86, 86, 86, 2152, 2153,
- 2163, 86, 86, 2162, 2165, 2164, 3557, 2156, 86, 2168,
- 2155, 86, 2166, 2157, 2169, 2172, 2158, 2167, 2170, 2160,
- 2161, 2175, 3557, 2171, 3557, 2174, 3557, 2163, 86, 86,
-
- 86, 2165, 2164, 86, 86, 86, 86, 86, 86, 2166,
- 2173, 2169, 86, 2176, 2167, 2170, 86, 2177, 2175, 2178,
- 2171, 2179, 2174, 2180, 86, 2181, 86, 2182, 86, 2183,
- 2185, 2184, 2196, 2186, 86, 86, 3557, 2173, 2187, 86,
- 2176, 2197, 2192, 2191, 2177, 86, 2178, 2193, 2179, 2188,
- 86, 86, 2181, 2199, 2182, 86, 2183, 86, 2184, 86,
- 2186, 86, 2201, 2189, 86, 2187, 2194, 86, 2190, 86,
- 2191, 2195, 2200, 86, 86, 86, 2188, 2198, 86, 86,
- 2199, 2202, 2203, 2207, 2205, 2204, 2206, 86, 86, 2209,
- 2189, 2210, 2208, 2211, 86, 2190, 86, 86, 86, 2200,
-
- 86, 86, 2213, 3557, 2198, 86, 2217, 2212, 2202, 2203,
- 86, 2205, 2204, 2206, 86, 86, 2214, 2215, 86, 2208,
- 2211, 86, 2216, 2218, 170, 2219, 2220, 2221, 86, 2213,
- 86, 86, 86, 2217, 2212, 2222, 2223, 2224, 2225, 2227,
- 2226, 3557, 86, 2214, 2215, 2229, 3557, 86, 2228, 2216,
- 2218, 86, 2219, 86, 86, 2231, 2230, 86, 86, 2232,
- 86, 86, 2222, 2233, 2224, 2225, 2227, 2226, 86, 86,
- 86, 86, 2229, 2234, 86, 2228, 2235, 2237, 86, 2236,
- 2238, 86, 2231, 2230, 2239, 2240, 2232, 2241, 2244, 2243,
- 2233, 2242, 3557, 2247, 86, 86, 86, 86, 86, 86,
-
- 2234, 2245, 86, 86, 2237, 2246, 2236, 2238, 86, 86,
- 2248, 2239, 86, 2249, 2241, 2244, 2243, 2250, 2242, 86,
- 2251, 2254, 2270, 2252, 86, 86, 86, 86, 2245, 2256,
- 86, 86, 2246, 86, 2253, 2255, 86, 2248, 2257, 2258,
- 2249, 2261, 2263, 2259, 2250, 2260, 2262, 2251, 2254, 86,
- 2252, 86, 2264, 86, 86, 3557, 2256, 86, 86, 2273,
- 86, 2253, 2255, 86, 86, 2257, 2258, 2265, 2261, 86,
- 2259, 2266, 2260, 2262, 2267, 2268, 86, 2269, 86, 2264,
- 2272, 2271, 86, 2274, 86, 86, 2273, 86, 2275, 2277,
- 86, 86, 86, 2276, 2265, 2278, 2279, 2280, 2266, 2281,
-
- 86, 2267, 2268, 2286, 2269, 2283, 86, 2272, 2271, 2284,
- 2274, 3557, 86, 2282, 86, 86, 86, 2287, 86, 2318,
- 2276, 86, 2278, 2279, 2280, 86, 86, 2285, 2289, 86,
- 2286, 86, 2283, 2288, 86, 86, 2284, 2290, 2291, 86,
- 2282, 2292, 2298, 86, 2287, 2293, 86, 2294, 2300, 86,
- 86, 86, 86, 2295, 2285, 2289, 86, 2296, 2299, 86,
- 2288, 2301, 86, 86, 2290, 2291, 2303, 2302, 2292, 2298,
- 2297, 2304, 2293, 86, 2294, 2300, 86, 2305, 86, 2306,
- 2295, 2307, 2308, 2309, 2296, 2299, 86, 2312, 86, 2310,
- 3557, 3557, 86, 2303, 2302, 86, 3557, 2297, 2304, 86,
-
- 2311, 2314, 2315, 86, 2305, 86, 2306, 86, 2307, 2308,
- 2309, 86, 2313, 2316, 2312, 2317, 2310, 86, 2319, 86,
- 86, 86, 2320, 86, 2321, 2322, 86, 2311, 2314, 2315,
- 2324, 2323, 2325, 2330, 2326, 86, 3557, 2327, 86, 2313,
- 2316, 2328, 2317, 86, 2331, 2319, 86, 3557, 2332, 2320,
- 86, 86, 2322, 86, 86, 86, 86, 2324, 2323, 2325,
- 2329, 2326, 86, 2333, 2327, 86, 86, 86, 2328, 2334,
- 2336, 2331, 2337, 2338, 2335, 2332, 2339, 2341, 86, 2340,
- 86, 2343, 2342, 2344, 3557, 2345, 86, 2329, 86, 86,
- 2333, 2346, 2350, 86, 86, 2351, 2354, 2336, 2352, 2337,
-
- 2338, 86, 2347, 86, 2341, 86, 2340, 86, 2343, 2342,
- 86, 86, 2345, 2348, 86, 86, 86, 2353, 2346, 86,
- 2355, 2349, 2351, 2354, 86, 2352, 2356, 2357, 2358, 2347,
- 2361, 2359, 86, 2362, 2360, 86, 86, 2364, 2363, 3557,
- 2348, 2366, 86, 86, 2353, 2365, 86, 2355, 2349, 2368,
- 86, 2367, 86, 2356, 2357, 2358, 86, 2361, 2359, 86,
- 2369, 2360, 2371, 86, 2364, 86, 86, 2370, 2366, 86,
- 2372, 86, 2365, 2373, 2374, 2375, 2368, 2376, 2367, 2377,
- 2380, 86, 86, 86, 86, 2379, 86, 2369, 86, 2371,
- 86, 2378, 86, 86, 2370, 2381, 2382, 2372, 86, 2383,
-
- 86, 2374, 2375, 2384, 2376, 2385, 2377, 2380, 2388, 2386,
- 86, 86, 2379, 2390, 86, 2387, 2391, 86, 2378, 2393,
- 86, 2389, 2381, 2382, 2396, 2392, 2383, 86, 86, 86,
- 2384, 86, 2385, 86, 86, 2388, 2386, 86, 2395, 2394,
- 2390, 86, 2387, 2391, 2397, 2398, 2393, 2400, 2389, 2399,
- 2401, 86, 2392, 2402, 2403, 86, 86, 2405, 86, 2404,
- 2409, 2410, 86, 2411, 2406, 2395, 2394, 86, 86, 170,
- 2414, 2397, 86, 86, 2400, 86, 2399, 2401, 2407, 2412,
- 2402, 2403, 2415, 2408, 2418, 2419, 2404, 86, 2413, 86,
- 2411, 2406, 86, 86, 2420, 86, 2416, 86, 86, 2421,
-
- 2423, 2425, 86, 2424, 2422, 2428, 2412, 2417, 86, 2415,
- 86, 2418, 86, 86, 86, 2413, 2426, 2427, 2429, 2431,
- 86, 2420, 2430, 2416, 3557, 86, 2421, 86, 2425, 86,
- 2424, 2422, 86, 2432, 2417, 2434, 2433, 86, 86, 86,
- 86, 86, 86, 86, 2427, 2429, 2431, 2435, 2437, 2430,
- 2438, 86, 2436, 2442, 2439, 2443, 2441, 86, 86, 86,
- 2432, 2440, 2434, 2433, 86, 86, 2444, 2448, 86, 2446,
- 86, 3557, 2445, 2451, 2435, 2437, 86, 2438, 86, 2436,
- 2442, 2439, 86, 2441, 86, 2447, 86, 2449, 2440, 86,
- 2450, 86, 2452, 2444, 2448, 86, 2446, 2454, 86, 2445,
-
- 2451, 2453, 86, 2455, 2465, 2456, 86, 2457, 2458, 2551,
- 86, 3557, 2447, 86, 2449, 86, 86, 2450, 2461, 2452,
- 2460, 2459, 86, 86, 86, 86, 86, 2462, 2453, 2463,
- 2455, 2464, 2456, 86, 2457, 2458, 86, 86, 2466, 2467,
- 2469, 86, 2468, 2470, 86, 2461, 2472, 2460, 2459, 2473,
- 86, 2474, 2471, 86, 2462, 86, 2463, 2478, 2464, 86,
- 2475, 86, 2479, 2480, 2476, 2466, 2467, 2469, 86, 2468,
- 2470, 86, 2477, 86, 86, 86, 2473, 86, 2474, 2471,
- 2481, 2482, 2483, 86, 2478, 2484, 86, 2475, 86, 86,
- 2480, 2476, 2485, 86, 2488, 2486, 86, 2489, 2487, 2477,
-
- 3557, 2490, 2494, 2492, 2491, 2495, 2496, 86, 2482, 2483,
- 86, 86, 2484, 86, 2498, 3557, 2500, 86, 86, 2485,
- 2493, 86, 2486, 86, 86, 2487, 86, 86, 2490, 2494,
- 2492, 2491, 86, 86, 2497, 2499, 2501, 2502, 2503, 2504,
- 2505, 86, 86, 86, 86, 2507, 2509, 2493, 86, 2510,
- 2506, 2511, 2512, 86, 86, 86, 2508, 2513, 2517, 86,
- 86, 2497, 2499, 2501, 2502, 86, 86, 2505, 86, 86,
- 2515, 86, 2507, 2509, 2516, 3557, 2510, 2506, 86, 2512,
- 2514, 2520, 86, 2508, 86, 2517, 3557, 2518, 2521, 86,
- 2525, 2522, 86, 2524, 2523, 86, 86, 2515, 86, 2526,
-
- 2528, 2516, 2519, 86, 2527, 86, 2529, 2514, 86, 2531,
- 86, 86, 86, 86, 2518, 2521, 2530, 2525, 2522, 86,
- 2524, 2523, 2532, 2534, 2537, 2535, 86, 2528, 86, 2519,
- 2533, 2527, 86, 2529, 2536, 2538, 2531, 86, 86, 2539,
- 2540, 3557, 86, 2530, 2545, 86, 86, 2541, 2543, 86,
- 2534, 86, 2535, 86, 2542, 2546, 86, 2533, 2547, 86,
- 86, 2536, 2538, 86, 2544, 86, 2539, 2540, 2553, 2548,
- 86, 2545, 2552, 86, 2541, 2543, 2554, 2555, 2556, 86,
- 2558, 2542, 2546, 86, 2549, 2547, 2550, 86, 2557, 3557,
- 86, 2544, 86, 86, 86, 2553, 2548, 2560, 86, 2552,
-
- 2559, 86, 86, 2554, 2555, 2556, 2561, 2558, 2562, 2563,
- 2564, 2549, 2565, 2550, 2566, 2557, 2568, 3557, 2569, 86,
- 86, 86, 2567, 2572, 2560, 2570, 2579, 2559, 86, 2571,
- 86, 86, 2581, 2561, 86, 2562, 2563, 86, 2573, 2574,
- 86, 2566, 86, 2575, 86, 2569, 2576, 86, 86, 2567,
- 2572, 2577, 2570, 2580, 2578, 86, 2571, 86, 86, 2581,
- 2585, 86, 86, 3557, 86, 2573, 2574, 86, 2582, 86,
- 2575, 2584, 2583, 2576, 2586, 86, 2587, 3557, 2577, 86,
- 2594, 2578, 2589, 2591, 2588, 86, 86, 2585, 2590, 86,
- 2592, 86, 2593, 2595, 2596, 2582, 2597, 86, 2584, 2583,
-
- 86, 2599, 86, 2587, 86, 170, 86, 2594, 86, 2589,
- 2591, 2588, 2598, 2600, 86, 2590, 86, 2592, 2602, 2593,
- 2595, 86, 2601, 2597, 86, 2604, 2603, 2606, 2599, 2605,
- 86, 2607, 2609, 86, 86, 2608, 86, 2612, 2613, 2598,
- 2600, 2610, 86, 3557, 2611, 2602, 2614, 86, 2615, 2601,
- 86, 2617, 2604, 2603, 2606, 3557, 2605, 2618, 86, 86,
- 2621, 86, 2608, 2616, 86, 86, 86, 2619, 2610, 86,
- 86, 2611, 86, 2614, 2620, 86, 86, 86, 2617, 2622,
- 86, 2624, 86, 2623, 2618, 3557, 86, 2621, 3557, 2625,
- 2616, 2626, 2627, 3557, 2619, 2628, 86, 2631, 2632, 2633,
-
- 2634, 2620, 2629, 86, 86, 2630, 2635, 3557, 2624, 3557,
- 2623, 86, 86, 2640, 86, 86, 2625, 86, 2626, 86,
- 86, 86, 2628, 86, 2631, 2632, 86, 2634, 86, 2629,
- 2636, 2637, 2630, 2635, 2638, 2639, 86, 86, 86, 2641,
- 2640, 86, 2642, 2643, 2644, 2646, 86, 2645, 86, 3557,
- 3557, 2647, 2648, 2651, 86, 2649, 2655, 2636, 2637, 86,
- 86, 2638, 2639, 2654, 86, 86, 2641, 2656, 2652, 2642,
- 2650, 2644, 2646, 86, 2645, 86, 86, 86, 2647, 2648,
- 86, 2653, 2649, 86, 2657, 86, 86, 2658, 86, 2659,
- 2654, 2660, 86, 3557, 2656, 2652, 2661, 2650, 2662, 2663,
-
- 86, 2664, 86, 2666, 2667, 86, 2665, 2668, 2653, 86,
- 2670, 2657, 2669, 3557, 2658, 2671, 2659, 86, 2660, 86,
- 86, 2674, 86, 2661, 86, 2662, 2663, 86, 2664, 86,
- 86, 2667, 2672, 2665, 86, 86, 2673, 86, 2676, 2669,
- 2675, 86, 2671, 86, 86, 86, 2677, 86, 2674, 2678,
- 2679, 2680, 2681, 2682, 3557, 2683, 2685, 3557, 2684, 2672,
- 86, 86, 2687, 2673, 2686, 2676, 2688, 2675, 86, 86,
- 86, 86, 2689, 2677, 2691, 2693, 2678, 86, 86, 2690,
- 2682, 86, 2683, 2685, 86, 2684, 86, 86, 2694, 2687,
- 86, 2686, 2692, 2688, 86, 2695, 86, 2696, 2697, 2689,
-
- 3557, 86, 2693, 2698, 86, 2699, 2690, 2700, 2702, 86,
- 86, 2701, 2704, 86, 2703, 2705, 86, 2706, 2707, 2692,
- 86, 86, 2695, 2708, 2696, 86, 3557, 86, 3557, 3557,
- 2698, 86, 2699, 86, 2700, 86, 86, 86, 2701, 2704,
- 86, 2703, 2705, 2709, 2706, 2707, 2710, 2711, 86, 2712,
- 2708, 2713, 2716, 2714, 2717, 2715, 86, 2718, 86, 86,
- 86, 2719, 86, 2721, 2722, 3557, 2723, 3557, 2720, 3557,
- 2709, 86, 86, 2710, 2711, 2724, 2712, 86, 2713, 86,
- 2714, 86, 2715, 86, 86, 2725, 86, 2727, 86, 2726,
- 2721, 2722, 86, 2723, 86, 2720, 2729, 2731, 2728, 2730,
-
- 2732, 86, 2724, 86, 86, 86, 2734, 2733, 86, 2735,
- 2738, 86, 2725, 86, 2727, 86, 2726, 2737, 2741, 2736,
- 2744, 3557, 2740, 2729, 2731, 2728, 2730, 86, 2739, 86,
- 86, 2742, 86, 86, 2733, 86, 86, 2738, 86, 2745,
- 86, 2743, 2746, 86, 2737, 2741, 2736, 86, 86, 2740,
- 2747, 86, 2748, 2749, 3557, 2739, 2753, 86, 2742, 86,
- 2750, 2751, 3557, 86, 2755, 2752, 2745, 86, 2743, 86,
- 86, 2754, 2757, 2758, 86, 2756, 3557, 2747, 2761, 2748,
- 2749, 86, 86, 2753, 86, 86, 170, 2750, 2751, 2762,
- 86, 2755, 2752, 86, 2759, 2763, 2760, 2764, 2754, 2757,
-
- 2758, 86, 2756, 86, 2765, 2761, 2766, 2767, 86, 2768,
- 3557, 2769, 2772, 86, 2770, 3557, 2762, 2773, 2771, 86,
- 2774, 2759, 2763, 2760, 2764, 86, 86, 86, 86, 2781,
- 3557, 2765, 86, 86, 86, 86, 2768, 86, 2769, 2772,
- 86, 2770, 2775, 2776, 2773, 2771, 2777, 2774, 2778, 86,
- 2779, 86, 86, 2780, 86, 86, 2781, 2782, 2783, 2786,
- 86, 2785, 2784, 2787, 86, 2789, 2790, 86, 86, 2775,
- 2776, 86, 2792, 2777, 2788, 2778, 86, 2779, 2791, 86,
- 2780, 3557, 2793, 86, 2782, 2783, 86, 86, 2785, 2784,
- 2787, 86, 2789, 86, 2794, 2795, 86, 2796, 2797, 86,
-
- 2801, 2788, 2798, 86, 86, 2791, 2799, 2800, 86, 2793,
- 86, 86, 2802, 2803, 2804, 86, 2805, 86, 86, 2806,
- 2810, 2794, 2795, 86, 2796, 2797, 2807, 2801, 86, 2798,
- 2808, 2809, 86, 2799, 2800, 2811, 2812, 2813, 2814, 2802,
- 86, 86, 2821, 2805, 86, 86, 2806, 86, 86, 2815,
- 2817, 86, 86, 2807, 2816, 2820, 2819, 86, 86, 2822,
- 2818, 86, 2811, 2812, 2813, 2814, 86, 86, 2823, 86,
- 2825, 86, 2828, 3557, 2827, 3557, 2815, 2817, 86, 86,
- 86, 2816, 2820, 2819, 86, 2824, 2822, 2818, 86, 86,
- 2826, 2829, 2830, 86, 2832, 86, 2831, 2825, 86, 2828,
-
- 2833, 2827, 86, 86, 2835, 2836, 2834, 86, 2837, 2839,
- 2840, 3557, 2824, 86, 86, 86, 2838, 2826, 2829, 2830,
- 86, 2832, 2841, 2831, 2842, 86, 86, 2833, 86, 2843,
- 2845, 2835, 86, 2834, 86, 2837, 86, 2840, 2844, 2846,
- 2847, 86, 2851, 2838, 2853, 2849, 2848, 86, 2850, 2841,
- 2856, 2842, 86, 86, 86, 86, 2843, 2845, 86, 86,
- 2854, 2852, 86, 2855, 2858, 2844, 86, 2847, 2860, 86,
- 2857, 2853, 2849, 2848, 2859, 2850, 86, 86, 86, 2862,
- 2864, 2861, 2867, 86, 2865, 2868, 86, 2854, 2852, 86,
- 2855, 86, 86, 2863, 86, 2860, 86, 2857, 2866, 86,
-
- 86, 2859, 2869, 86, 2870, 2871, 2862, 86, 2861, 86,
- 86, 2865, 2868, 2874, 2875, 2872, 86, 2873, 86, 2877,
- 2863, 86, 2876, 86, 2880, 2866, 2878, 3557, 2879, 2869,
- 2881, 2870, 2871, 86, 86, 86, 3557, 86, 2884, 2882,
- 86, 2875, 2872, 2890, 2873, 2885, 86, 2886, 86, 2876,
- 86, 2880, 86, 2878, 2883, 2879, 86, 2881, 86, 86,
- 2887, 2888, 86, 2889, 86, 2884, 2882, 2891, 2893, 2892,
- 86, 2894, 2885, 2895, 2886, 86, 86, 2896, 2899, 3557,
- 2897, 2883, 86, 86, 2900, 2914, 2901, 2887, 2888, 86,
- 2889, 86, 2898, 86, 86, 2893, 2892, 2902, 170, 86,
-
- 2895, 86, 2904, 2903, 2896, 2905, 86, 2897, 2906, 86,
- 86, 2900, 86, 2901, 2907, 2908, 2909, 86, 2911, 2898,
- 2913, 2910, 86, 2915, 2902, 86, 3557, 2912, 2921, 86,
- 2903, 2916, 86, 86, 2917, 2906, 2922, 2919, 2920, 86,
- 86, 86, 2908, 2918, 86, 2911, 86, 2913, 86, 86,
- 2915, 2923, 86, 86, 2912, 86, 86, 2924, 2916, 2925,
- 86, 2917, 2928, 2926, 2919, 2920, 2929, 2927, 86, 3557,
- 2918, 2932, 86, 86, 2930, 2931, 3557, 86, 2923, 86,
- 86, 2933, 2934, 2940, 2924, 86, 2925, 2935, 86, 2928,
- 2926, 86, 2936, 2929, 2927, 86, 86, 86, 2932, 2937,
-
- 86, 2930, 2931, 2938, 2939, 86, 2941, 2945, 2933, 2934,
- 2948, 3557, 2942, 86, 2935, 86, 2943, 86, 86, 2936,
- 86, 2944, 2946, 86, 2947, 86, 2937, 86, 86, 86,
- 2938, 2939, 86, 2941, 86, 2949, 2951, 2948, 2950, 2942,
- 2956, 2953, 86, 2943, 2952, 2958, 2955, 86, 2944, 2946,
- 86, 2947, 86, 86, 2954, 2957, 2959, 86, 2961, 2962,
- 2963, 86, 2949, 86, 2967, 2950, 2960, 86, 2953, 86,
- 2964, 2952, 86, 2955, 2965, 86, 2966, 86, 86, 86,
- 2968, 2954, 2957, 2969, 2972, 3557, 86, 2963, 86, 2971,
- 86, 2967, 2970, 2960, 86, 2974, 86, 2964, 2976, 2975,
-
- 2977, 2965, 86, 2966, 2978, 2973, 2979, 86, 86, 3557,
- 2969, 86, 86, 2980, 2982, 86, 2971, 86, 2981, 2970,
- 2984, 86, 2974, 2983, 2985, 86, 2975, 86, 2990, 86,
- 86, 86, 2973, 2979, 2988, 86, 86, 2989, 2986, 86,
- 2980, 86, 86, 2987, 86, 2981, 2991, 2984, 2992, 86,
- 2983, 2985, 2993, 2994, 86, 2990, 2997, 2995, 2996, 2998,
- 2999, 2988, 3000, 3002, 2989, 3001, 3003, 86, 86, 3004,
- 86, 86, 86, 86, 3005, 86, 3008, 86, 86, 86,
- 2994, 3011, 3007, 86, 2995, 2996, 2998, 2999, 86, 86,
- 86, 86, 3001, 3003, 3006, 86, 86, 3009, 3012, 3010,
-
- 3013, 3005, 3015, 86, 3016, 3014, 86, 3017, 86, 3007,
- 3019, 86, 3018, 86, 86, 3557, 3020, 3021, 86, 3022,
- 86, 3006, 86, 3023, 86, 3012, 3010, 3025, 3024, 3015,
- 3028, 3016, 86, 86, 3017, 3026, 3027, 86, 3035, 3018,
- 86, 3557, 86, 3020, 3021, 86, 86, 86, 3029, 3030,
- 3023, 86, 3031, 3034, 3025, 3024, 86, 3028, 86, 3032,
- 86, 3047, 3026, 3027, 3033, 86, 86, 3557, 86, 3036,
- 3037, 86, 3039, 3040, 86, 3029, 3030, 3048, 3038, 3031,
- 3034, 86, 86, 3041, 3042, 86, 3032, 3044, 86, 3043,
- 3046, 3033, 3045, 3557, 86, 3049, 3036, 3037, 86, 3039,
-
- 3040, 3050, 86, 86, 3048, 3038, 3051, 3557, 3052, 3053,
- 3041, 3055, 3056, 86, 3064, 3054, 86, 3046, 86, 86,
- 86, 86, 3049, 3058, 3060, 3065, 3061, 86, 3050, 3557,
- 3057, 3066, 86, 3051, 86, 3052, 3053, 86, 3055, 3056,
- 3059, 86, 3054, 86, 86, 86, 86, 3062, 86, 3063,
- 3058, 3060, 86, 3061, 86, 86, 86, 3057, 3066, 3067,
- 3068, 3069, 3070, 3071, 3073, 3557, 3074, 3059, 3557, 86,
- 3072, 3079, 3557, 3080, 3062, 3557, 3063, 3075, 3076, 3081,
- 86, 3077, 86, 3082, 86, 3078, 3067, 3068, 86, 3070,
- 86, 86, 86, 3074, 86, 86, 86, 3072, 86, 86,
-
- 86, 86, 86, 3083, 3075, 3076, 3081, 3084, 3077, 3085,
- 3082, 86, 3078, 3086, 3088, 3089, 3090, 3557, 3087, 3092,
- 3094, 86, 3091, 86, 3093, 3095, 3097, 3096, 86, 86,
- 3083, 3098, 3099, 86, 3084, 86, 3085, 86, 86, 86,
- 3100, 3088, 3089, 3090, 86, 86, 86, 86, 3102, 3091,
- 86, 3093, 3095, 3097, 3096, 86, 3103, 3104, 86, 3099,
- 3101, 3105, 86, 3106, 86, 3107, 3557, 3100, 3111, 3108,
- 86, 86, 3109, 3117, 86, 3102, 3110, 3557, 86, 3112,
- 3557, 3118, 3119, 3103, 3104, 3114, 86, 3101, 3124, 3557,
- 3106, 86, 3107, 86, 86, 3111, 3108, 3113, 86, 3109,
-
- 86, 86, 86, 3110, 3115, 3120, 3112, 3116, 86, 86,
- 3121, 86, 3114, 3122, 3123, 3127, 3125, 86, 3128, 3130,
- 86, 86, 3126, 86, 3113, 86, 3132, 86, 3131, 3133,
- 86, 3115, 3120, 3129, 3116, 86, 86, 3121, 86, 3135,
- 3122, 3123, 86, 3125, 86, 3128, 3130, 3136, 86, 3126,
- 86, 3137, 3134, 3132, 86, 3131, 3139, 3140, 3138, 3141,
- 3129, 86, 3143, 3142, 3144, 86, 86, 3145, 3557, 86,
- 86, 86, 3148, 86, 3136, 86, 3557, 3174, 3137, 3134,
- 86, 86, 86, 3139, 3140, 3138, 3141, 3146, 3147, 3143,
- 3142, 86, 3149, 3150, 3145, 86, 3153, 3151, 3152, 3148,
-
- 3154, 86, 86, 3155, 86, 86, 3159, 86, 3156, 86,
- 86, 3161, 3157, 3162, 3146, 3147, 3163, 86, 86, 3149,
- 3150, 86, 3165, 3153, 3151, 3152, 86, 3154, 3160, 86,
- 3155, 3158, 86, 86, 86, 3156, 86, 3166, 86, 3157,
- 3162, 3164, 3167, 86, 3168, 3169, 3557, 86, 86, 86,
- 3171, 3170, 3172, 86, 3176, 3160, 86, 3173, 3158, 86,
- 3177, 3175, 86, 3178, 3166, 86, 86, 3180, 3164, 3167,
- 3181, 3168, 3169, 86, 3179, 86, 86, 86, 3170, 3172,
- 3186, 3176, 86, 3183, 3173, 3182, 86, 3177, 3175, 3184,
- 3178, 3185, 86, 3187, 86, 3190, 86, 3188, 3189, 3193,
-
- 3195, 3179, 86, 3192, 3199, 86, 3194, 86, 3197, 86,
- 3557, 86, 3182, 86, 3191, 86, 3184, 86, 3185, 86,
- 86, 3196, 86, 86, 3188, 3189, 3193, 3198, 3200, 86,
- 3192, 86, 86, 3194, 86, 3197, 3201, 3202, 3557, 3203,
- 86, 3191, 3204, 3205, 3206, 3207, 3209, 3208, 3196, 3557,
- 86, 3557, 3212, 3210, 3198, 3200, 3215, 86, 3218, 3211,
- 86, 86, 86, 3201, 3202, 86, 3203, 3213, 3557, 3204,
- 3205, 86, 86, 3557, 3208, 3214, 86, 3219, 86, 86,
- 3210, 86, 3222, 86, 3220, 86, 3211, 3223, 86, 86,
- 3216, 3217, 86, 86, 3213, 3221, 86, 86, 3224, 3225,
-
- 86, 3226, 3214, 3227, 3219, 3228, 86, 3229, 3557, 3222,
- 86, 3220, 3233, 3230, 86, 3232, 3231, 3216, 3217, 86,
- 3234, 3235, 3221, 3236, 3237, 3224, 3225, 3239, 3226, 86,
- 86, 3240, 86, 3241, 86, 86, 3242, 86, 86, 86,
- 3230, 3243, 3232, 3231, 3238, 86, 3246, 86, 86, 86,
- 86, 3237, 3244, 86, 86, 3248, 3245, 86, 3240, 86,
- 86, 86, 3247, 86, 3249, 3250, 86, 86, 3243, 3251,
- 3254, 3238, 3252, 3246, 3255, 3256, 3258, 86, 3557, 3244,
- 3253, 86, 3248, 3245, 3257, 86, 3260, 86, 86, 3247,
- 3261, 86, 3250, 86, 86, 3263, 3251, 3254, 3259, 3252,
-
- 3262, 86, 86, 3264, 3265, 86, 86, 3253, 86, 3267,
- 3266, 3257, 86, 3260, 3557, 3269, 3270, 3261, 3268, 3557,
- 3557, 3272, 86, 86, 3271, 3259, 86, 3262, 3273, 3274,
- 86, 3265, 3275, 86, 86, 3276, 86, 3266, 3277, 86,
- 3278, 86, 3269, 86, 86, 3268, 86, 3279, 3272, 3283,
- 86, 3271, 3280, 86, 3291, 3273, 3274, 86, 86, 3275,
- 86, 86, 3276, 3281, 3282, 3277, 86, 3278, 3557, 3284,
- 86, 86, 3285, 3286, 3279, 3287, 3283, 3294, 3557, 3280,
- 86, 86, 86, 3288, 3289, 3290, 86, 3292, 3293, 3295,
- 3281, 3282, 86, 3296, 3297, 86, 3284, 3299, 3557, 3285,
-
- 3286, 86, 3287, 86, 3294, 86, 86, 3298, 3557, 86,
- 3288, 3289, 3290, 3300, 3292, 3293, 3295, 3301, 3302, 3303,
- 86, 86, 3304, 3305, 86, 86, 3306, 3307, 3557, 3308,
- 86, 3309, 3310, 3557, 3298, 86, 3311, 3314, 3557, 3312,
- 3300, 3315, 3557, 3317, 3301, 86, 86, 3313, 3557, 3316,
- 86, 86, 3557, 3320, 3321, 86, 86, 3557, 3557, 86,
- 86, 86, 86, 3311, 86, 86, 3312, 3324, 3315, 86,
- 3317, 3318, 3319, 3325, 3313, 86, 3316, 3322, 86, 86,
- 3320, 86, 3328, 3323, 86, 86, 3329, 86, 3326, 3327,
- 3330, 86, 3332, 3331, 3324, 3333, 86, 3334, 3318, 3319,
-
- 3325, 86, 3335, 3336, 3322, 3341, 86, 3339, 86, 3328,
- 3323, 86, 3340, 3329, 86, 3326, 3327, 86, 86, 3332,
- 3331, 3344, 86, 3337, 86, 86, 3338, 86, 3343, 3335,
- 3336, 3342, 3345, 86, 3346, 3347, 3348, 86, 3349, 86,
- 86, 86, 3351, 86, 3350, 3352, 3354, 3355, 3344, 3356,
- 3337, 3358, 3353, 3338, 86, 3343, 86, 3357, 3342, 3345,
- 3359, 3346, 3347, 86, 86, 86, 3360, 3361, 86, 86,
- 86, 3350, 86, 3354, 86, 86, 86, 3362, 86, 3353,
- 3363, 3364, 3365, 3367, 3357, 3366, 86, 86, 3368, 3369,
- 3371, 3372, 3373, 86, 86, 3370, 3375, 3380, 86, 3379,
-
- 3557, 86, 3376, 3374, 86, 86, 3377, 86, 86, 86,
- 3367, 86, 3366, 86, 86, 86, 86, 3371, 3372, 86,
- 86, 3378, 3370, 86, 86, 86, 3379, 3381, 3382, 3376,
- 3374, 3383, 3384, 3377, 3385, 86, 86, 3386, 3387, 86,
- 86, 3389, 3388, 3392, 3390, 3391, 3557, 86, 3378, 3394,
- 3557, 86, 3397, 3393, 3381, 86, 86, 86, 3383, 3384,
- 86, 3385, 86, 86, 3386, 3387, 86, 86, 3395, 3388,
- 3392, 3390, 3391, 86, 3396, 86, 3394, 3400, 3398, 3397,
- 3393, 3399, 86, 3401, 3402, 3403, 3404, 3405, 3407, 86,
- 86, 3557, 86, 3406, 3408, 3395, 3409, 86, 86, 86,
-
- 3412, 3396, 3557, 86, 3400, 3398, 86, 86, 3399, 3410,
- 3401, 3402, 86, 86, 86, 3407, 86, 86, 3413, 3414,
- 3406, 3408, 86, 3409, 3411, 3415, 3418, 3412, 86, 3416,
- 3419, 3420, 3425, 3417, 86, 3557, 3410, 86, 3422, 86,
- 86, 3421, 86, 86, 86, 3413, 3414, 86, 3423, 3424,
- 86, 3411, 3415, 3418, 86, 86, 3416, 3419, 3420, 3425,
- 3417, 3426, 3427, 3428, 86, 3422, 86, 86, 3421, 3430,
- 3429, 3432, 3431, 3433, 3434, 3423, 3424, 86, 86, 3435,
- 3446, 3436, 3437, 3438, 86, 86, 3439, 3441, 3426, 3427,
- 86, 86, 86, 3442, 86, 3440, 3430, 3429, 3432, 3431,
-
- 86, 3434, 86, 3443, 3448, 3445, 86, 86, 3436, 86,
- 86, 86, 86, 3439, 3441, 86, 3444, 86, 86, 86,
- 3442, 3447, 3440, 3449, 3450, 86, 3451, 3452, 3453, 3454,
- 3443, 3448, 3445, 86, 86, 3456, 3455, 3457, 3458, 3459,
- 3461, 86, 3460, 3444, 86, 86, 3463, 86, 3447, 86,
- 3449, 86, 3462, 3451, 86, 86, 3454, 3464, 3465, 86,
- 86, 3466, 86, 3455, 3457, 3458, 86, 3461, 86, 3460,
- 3468, 86, 3467, 3469, 3470, 86, 3471, 3472, 86, 3462,
- 86, 3473, 86, 3474, 86, 3465, 3475, 3476, 3466, 86,
- 3477, 3478, 86, 86, 86, 3483, 3489, 3468, 86, 3467,
-
- 86, 86, 3479, 3471, 3472, 86, 86, 3480, 3473, 86,
- 3474, 3481, 3485, 3475, 3476, 86, 86, 3477, 3478, 3482,
- 3484, 86, 86, 3486, 3487, 3496, 3488, 86, 86, 3479,
- 3490, 86, 3491, 86, 3480, 3557, 3492, 3494, 3481, 3485,
- 3493, 86, 3495, 3497, 3498, 86, 3482, 3484, 86, 3499,
- 3486, 86, 86, 3488, 86, 3501, 86, 3490, 86, 3491,
- 3500, 3502, 86, 3492, 3494, 86, 3504, 3493, 86, 86,
- 3497, 86, 86, 3503, 86, 86, 3499, 3505, 3506, 3557,
- 3507, 86, 3501, 3508, 3557, 86, 3512, 3500, 3502, 3511,
- 3509, 3513, 86, 3510, 86, 3514, 3557, 3515, 86, 86,
-
- 3503, 3517, 3557, 3516, 3505, 3506, 86, 3507, 86, 86,
- 86, 86, 3519, 3512, 3521, 86, 3511, 3509, 3513, 3522,
- 3510, 3520, 3514, 86, 3515, 86, 3518, 86, 3517, 86,
- 3516, 3524, 3523, 3526, 3525, 3527, 3529, 3557, 86, 3519,
- 86, 3521, 86, 3528, 3530, 86, 3522, 3531, 3520, 3535,
- 3533, 86, 3557, 3518, 86, 3542, 3557, 86, 3524, 3523,
- 86, 3525, 3527, 86, 86, 3532, 3537, 86, 86, 3538,
- 3528, 3530, 86, 86, 3531, 3534, 86, 3533, 3536, 3539,
- 3546, 3540, 86, 86, 3541, 3548, 86, 86, 86, 86,
- 3543, 86, 3532, 3537, 3545, 3544, 3538, 3549, 86, 3547,
-
- 3555, 3551, 3534, 86, 3556, 3536, 3539, 86, 3540, 3550,
- 86, 3541, 86, 3552, 3557, 3557, 3557, 3543, 3557, 86,
- 86, 3545, 3544, 86, 86, 3553, 3547, 86, 3551, 86,
- 3554, 86, 3557, 86, 3557, 86, 3550, 3557, 86, 3557,
- 3552, 3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557,
- 3557, 3557, 3553, 3557, 3557, 3557, 3557, 3554, 47, 47,
- 47, 47, 47, 47, 47, 52, 52, 52, 52, 52,
- 52, 52, 57, 57, 57, 57, 57, 57, 57, 63,
- 63, 63, 63, 63, 63, 63, 68, 68, 68, 68,
- 68, 68, 68, 74, 74, 74, 74, 74, 74, 74,
-
- 80, 80, 80, 80, 80, 80, 80, 89, 89, 3557,
- 89, 89, 89, 89, 160, 160, 3557, 3557, 3557, 160,
- 160, 162, 162, 3557, 3557, 162, 3557, 162, 164, 3557,
- 3557, 3557, 3557, 3557, 164, 167, 167, 3557, 3557, 3557,
- 167, 167, 169, 3557, 3557, 3557, 3557, 3557, 169, 171,
- 171, 3557, 171, 171, 171, 171, 174, 3557, 3557, 3557,
- 3557, 3557, 174, 177, 177, 3557, 3557, 3557, 177, 177,
- 90, 90, 3557, 90, 90, 90, 90, 17, 3557, 3557,
- 3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557,
- 3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557,
-
- 3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557,
- 3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557,
- 3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557,
- 3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557,
- 3557, 3557, 3557, 3557
+ 199, 86, 200, 145, 191, 202, 192, 146, 147, 262,
+ 341, 201, 86, 86, 198, 86, 208, 86, 210, 86,
+ 143, 209, 86, 144, 86, 190, 343, 199, 86, 200,
+ 145, 191, 202, 192, 146, 147, 203, 204, 201, 86,
+ 86, 211, 86, 208, 205, 210, 216, 3592, 209, 218,
+ 212, 3592, 86, 213, 86, 177, 177, 86, 86, 219,
+
+ 3592, 3592, 3592, 203, 204, 221, 214, 215, 211, 222,
+ 217, 205, 227, 3592, 86, 226, 218, 212, 86, 220,
+ 213, 86, 224, 228, 229, 223, 219, 225, 86, 86,
+ 86, 232, 221, 214, 215, 86, 222, 217, 86, 227,
+ 230, 231, 226, 86, 235, 86, 220, 234, 233, 224,
+ 228, 229, 223, 86, 225, 86, 236, 237, 232, 86,
+ 86, 3592, 241, 3592, 246, 238, 86, 230, 231, 239,
+ 86, 235, 3592, 240, 234, 233, 86, 3592, 242, 86,
+ 86, 247, 86, 236, 237, 86, 243, 86, 86, 241,
+ 248, 246, 238, 252, 261, 244, 239, 254, 86, 249,
+
+ 240, 245, 86, 3592, 260, 242, 3592, 86, 247, 86,
+ 250, 3592, 86, 243, 251, 86, 255, 248, 258, 263,
+ 252, 261, 244, 86, 254, 270, 249, 3592, 245, 259,
+ 86, 260, 267, 256, 86, 268, 257, 250, 86, 269,
+ 264, 251, 86, 255, 3592, 258, 263, 86, 271, 265,
+ 3592, 272, 270, 3592, 86, 3592, 259, 86, 3592, 267,
+ 256, 266, 268, 257, 86, 86, 269, 264, 273, 164,
+ 86, 164, 164, 275, 164, 271, 265, 169, 272, 169,
+ 169, 90, 169, 90, 90, 274, 90, 276, 266, 277,
+ 278, 174, 170, 174, 174, 273, 174, 281, 86, 279,
+
+ 283, 282, 86, 284, 3592, 86, 280, 86, 86, 285,
+ 374, 345, 274, 86, 276, 86, 277, 278, 86, 172,
+ 86, 287, 286, 290, 281, 86, 279, 283, 282, 86,
+ 284, 86, 288, 280, 291, 86, 285, 374, 289, 86,
+ 292, 294, 304, 86, 302, 295, 306, 305, 287, 286,
+ 290, 310, 3592, 303, 86, 307, 86, 308, 86, 314,
+ 309, 291, 296, 3592, 86, 289, 86, 292, 86, 86,
+ 86, 302, 295, 306, 86, 86, 311, 86, 310, 86,
+ 303, 86, 307, 315, 308, 316, 314, 309, 313, 296,
+ 297, 317, 320, 3592, 86, 298, 3592, 3592, 86, 318,
+
+ 299, 86, 319, 86, 312, 3592, 300, 301, 86, 332,
+ 315, 86, 316, 86, 86, 313, 321, 297, 317, 320,
+ 322, 3592, 298, 328, 348, 329, 318, 299, 330, 319,
+ 333, 312, 86, 300, 301, 86, 332, 336, 86, 86,
+ 338, 334, 86, 321, 86, 86, 344, 322, 323, 342,
+ 328, 324, 329, 325, 339, 330, 86, 340, 350, 3592,
+ 3592, 346, 86, 86, 336, 326, 347, 327, 334, 86,
+ 3592, 86, 86, 344, 86, 323, 342, 349, 324, 86,
+ 325, 339, 351, 3592, 340, 350, 86, 352, 346, 86,
+ 3592, 86, 326, 347, 327, 357, 353, 355, 356, 359,
+
+ 358, 362, 360, 368, 349, 354, 363, 3592, 86, 351,
+ 86, 86, 86, 86, 352, 364, 86, 86, 86, 371,
+ 366, 361, 357, 353, 355, 356, 359, 358, 86, 360,
+ 365, 367, 354, 86, 373, 86, 86, 86, 372, 86,
+ 369, 370, 364, 86, 375, 86, 376, 366, 361, 86,
+ 377, 86, 86, 378, 379, 380, 86, 365, 367, 381,
+ 385, 373, 86, 382, 384, 372, 86, 369, 370, 383,
+ 387, 375, 388, 376, 86, 3592, 86, 3592, 391, 392,
+ 390, 379, 86, 386, 86, 86, 381, 86, 3592, 389,
+ 382, 86, 86, 393, 170, 86, 383, 86, 394, 388,
+
+ 86, 86, 86, 3592, 395, 391, 392, 390, 396, 397,
+ 386, 86, 398, 86, 399, 400, 389, 86, 401, 402,
+ 393, 403, 408, 405, 86, 394, 404, 409, 406, 411,
+ 86, 395, 86, 86, 410, 396, 397, 86, 407, 86,
+ 86, 86, 400, 412, 86, 401, 86, 415, 403, 408,
+ 405, 86, 416, 404, 86, 406, 411, 86, 86, 86,
+ 418, 410, 414, 3592, 417, 407, 419, 421, 422, 86,
+ 412, 86, 86, 86, 415, 86, 420, 424, 86, 416,
+ 423, 426, 428, 425, 432, 86, 86, 418, 86, 414,
+ 86, 417, 427, 419, 421, 422, 86, 431, 429, 86,
+
+ 433, 436, 434, 420, 3592, 3592, 86, 423, 86, 86,
+ 425, 432, 440, 86, 86, 430, 438, 86, 437, 427,
+ 442, 86, 86, 86, 431, 429, 435, 86, 436, 86,
+ 439, 441, 86, 443, 86, 446, 450, 445, 86, 440,
+ 444, 447, 430, 438, 86, 437, 86, 442, 86, 448,
+ 86, 86, 451, 435, 452, 86, 86, 439, 441, 453,
+ 443, 86, 446, 450, 445, 460, 449, 444, 447, 462,
+ 3592, 461, 3592, 86, 86, 3592, 448, 3592, 86, 494,
+ 86, 452, 467, 86, 86, 3592, 453, 3592, 3592, 474,
+ 3592, 86, 460, 449, 454, 3592, 462, 455, 461, 463,
+
+ 469, 464, 456, 457, 458, 459, 86, 475, 468, 467,
+ 3592, 86, 86, 86, 465, 86, 474, 466, 470, 471,
+ 472, 454, 86, 86, 455, 473, 463, 469, 464, 456,
+ 457, 458, 459, 482, 86, 468, 478, 476, 479, 3592,
+ 477, 465, 484, 86, 466, 470, 471, 86, 86, 3592,
+ 86, 86, 86, 483, 485, 489, 480, 481, 3592, 486,
+ 482, 487, 488, 478, 476, 479, 86, 477, 501, 86,
+ 491, 86, 492, 3592, 86, 490, 86, 86, 86, 86,
+ 483, 485, 489, 480, 481, 86, 486, 86, 487, 488,
+ 86, 493, 3592, 495, 499, 496, 507, 491, 512, 492,
+
+ 86, 86, 490, 86, 497, 500, 502, 503, 515, 86,
+ 514, 498, 505, 504, 506, 3592, 86, 557, 493, 86,
+ 495, 499, 496, 507, 513, 512, 570, 86, 86, 86,
+ 508, 497, 500, 502, 503, 86, 86, 516, 498, 505,
+ 504, 506, 86, 509, 530, 529, 510, 534, 511, 86,
+ 86, 513, 86, 532, 86, 533, 537, 508, 86, 86,
+ 86, 3592, 531, 535, 516, 86, 3592, 86, 86, 86,
+ 509, 530, 529, 510, 534, 511, 517, 547, 518, 536,
+ 532, 548, 533, 537, 519, 546, 549, 86, 520, 531,
+ 535, 553, 552, 521, 3592, 86, 522, 86, 170, 86,
+
+ 550, 556, 86, 517, 547, 518, 536, 551, 568, 86,
+ 554, 519, 546, 86, 555, 520, 558, 86, 553, 552,
+ 521, 86, 86, 522, 523, 560, 524, 550, 556, 559,
+ 86, 561, 86, 567, 551, 568, 86, 554, 86, 525,
+ 562, 555, 526, 558, 527, 86, 528, 575, 609, 3592,
+ 86, 523, 560, 524, 565, 566, 559, 3592, 3592, 3592,
+ 567, 86, 86, 86, 3592, 569, 525, 562, 3592, 526,
+ 571, 527, 3592, 528, 538, 539, 563, 86, 573, 86,
+ 86, 565, 566, 572, 540, 541, 542, 543, 544, 577,
+ 86, 545, 569, 86, 564, 574, 86, 571, 86, 86,
+
+ 86, 538, 539, 563, 576, 573, 86, 578, 86, 3592,
+ 572, 540, 541, 542, 543, 544, 577, 581, 545, 579,
+ 580, 564, 574, 586, 86, 582, 583, 584, 3592, 86,
+ 585, 576, 3592, 593, 578, 590, 86, 86, 587, 588,
+ 86, 594, 3592, 614, 581, 86, 591, 3592, 86, 86,
+ 586, 3592, 582, 583, 584, 86, 589, 585, 86, 86,
+ 593, 592, 590, 86, 595, 587, 588, 596, 594, 86,
+ 597, 598, 610, 591, 611, 86, 86, 3592, 86, 86,
+ 612, 599, 600, 589, 86, 3592, 613, 618, 592, 616,
+ 86, 595, 617, 601, 596, 602, 86, 597, 598, 610,
+
+ 86, 611, 619, 86, 86, 3592, 615, 612, 599, 600,
+ 86, 86, 86, 613, 618, 86, 616, 621, 3592, 617,
+ 601, 620, 602, 603, 86, 623, 622, 624, 86, 619,
+ 626, 604, 605, 615, 629, 606, 607, 625, 627, 608,
+ 86, 630, 628, 86, 621, 86, 86, 86, 620, 86,
+ 603, 86, 86, 622, 624, 631, 86, 626, 604, 605,
+ 635, 629, 606, 607, 625, 86, 608, 632, 630, 628,
+ 86, 633, 637, 636, 640, 86, 638, 86, 639, 634,
+ 86, 86, 631, 643, 641, 3592, 645, 635, 646, 86,
+ 644, 86, 86, 642, 632, 3592, 86, 86, 633, 637,
+
+ 636, 640, 86, 638, 648, 639, 634, 86, 86, 86,
+ 643, 641, 86, 645, 86, 646, 647, 644, 649, 650,
+ 642, 86, 651, 652, 86, 654, 653, 655, 86, 656,
+ 86, 648, 86, 657, 86, 658, 3592, 662, 86, 659,
+ 664, 86, 86, 647, 86, 649, 650, 86, 86, 651,
+ 652, 660, 654, 653, 655, 661, 656, 663, 86, 665,
+ 657, 666, 658, 669, 667, 671, 659, 668, 86, 86,
+ 673, 675, 86, 674, 86, 86, 670, 86, 660, 672,
+ 86, 86, 661, 86, 663, 676, 665, 86, 666, 86,
+ 669, 667, 671, 679, 668, 86, 678, 86, 675, 680,
+
+ 674, 681, 86, 670, 86, 683, 672, 86, 677, 86,
+ 682, 686, 684, 687, 685, 86, 688, 86, 697, 3592,
+ 679, 86, 86, 678, 86, 86, 680, 86, 681, 3592,
+ 86, 700, 683, 86, 701, 677, 86, 682, 686, 684,
+ 687, 685, 86, 688, 689, 697, 698, 712, 699, 690,
+ 702, 691, 86, 703, 86, 707, 704, 692, 700, 693,
+ 86, 701, 694, 695, 86, 86, 3592, 86, 3592, 696,
+ 86, 689, 86, 698, 712, 699, 690, 702, 691, 86,
+ 703, 705, 707, 704, 692, 706, 693, 708, 710, 694,
+ 695, 711, 713, 715, 718, 716, 696, 3592, 86, 86,
+
+ 720, 717, 714, 86, 719, 86, 86, 709, 705, 86,
+ 722, 86, 706, 3592, 708, 710, 726, 721, 711, 86,
+ 715, 718, 716, 723, 86, 86, 86, 720, 717, 714,
+ 724, 719, 727, 728, 709, 86, 86, 722, 86, 725,
+ 86, 729, 86, 726, 721, 86, 730, 731, 733, 732,
+ 723, 86, 734, 3592, 735, 86, 737, 724, 3592, 727,
+ 728, 86, 736, 86, 86, 738, 725, 744, 729, 86,
+ 86, 739, 742, 730, 731, 733, 732, 86, 740, 734,
+ 86, 735, 741, 86, 86, 170, 86, 743, 86, 736,
+ 86, 746, 738, 745, 744, 86, 86, 747, 739, 742,
+
+ 86, 749, 748, 750, 751, 740, 752, 86, 3592, 741,
+ 753, 3592, 754, 755, 743, 756, 86, 3592, 746, 86,
+ 745, 86, 757, 758, 747, 86, 86, 86, 86, 748,
+ 768, 751, 771, 3592, 762, 86, 86, 753, 86, 754,
+ 755, 759, 756, 766, 86, 86, 765, 86, 760, 757,
+ 758, 761, 763, 767, 769, 770, 774, 764, 772, 86,
+ 86, 762, 86, 773, 86, 86, 775, 777, 759, 3592,
+ 86, 776, 86, 765, 778, 760, 780, 779, 761, 3592,
+ 86, 86, 86, 774, 86, 86, 86, 781, 782, 784,
+ 86, 86, 786, 775, 777, 86, 86, 86, 776, 785,
+
+ 787, 778, 783, 780, 779, 788, 86, 86, 789, 790,
+ 86, 86, 791, 794, 781, 782, 784, 86, 792, 86,
+ 795, 793, 86, 797, 86, 86, 785, 787, 86, 783,
+ 796, 86, 788, 86, 86, 789, 790, 799, 86, 791,
+ 794, 800, 86, 801, 86, 792, 798, 795, 793, 806,
+ 797, 807, 808, 86, 809, 3592, 86, 796, 86, 812,
+ 810, 86, 811, 86, 814, 86, 802, 815, 800, 86,
+ 801, 803, 86, 798, 804, 805, 806, 86, 807, 808,
+ 813, 809, 86, 817, 86, 86, 812, 810, 816, 811,
+ 86, 819, 86, 802, 815, 820, 86, 822, 803, 821,
+
+ 823, 804, 805, 824, 828, 818, 86, 813, 86, 86,
+ 817, 825, 86, 86, 826, 816, 829, 835, 819, 86,
+ 3592, 86, 820, 86, 822, 86, 821, 823, 827, 830,
+ 824, 86, 818, 831, 86, 86, 86, 86, 825, 86,
+ 832, 826, 834, 829, 833, 836, 837, 838, 839, 86,
+ 840, 86, 842, 841, 847, 827, 830, 86, 3592, 3592,
+ 831, 86, 86, 845, 849, 843, 86, 832, 844, 834,
+ 86, 833, 836, 837, 86, 86, 86, 840, 86, 842,
+ 841, 86, 848, 846, 850, 86, 86, 851, 3592, 86,
+ 845, 86, 843, 852, 853, 844, 86, 861, 855, 854,
+
+ 860, 3592, 856, 862, 86, 86, 3592, 865, 86, 848,
+ 846, 850, 86, 857, 851, 86, 86, 863, 3592, 876,
+ 852, 86, 866, 867, 861, 855, 86, 858, 859, 856,
+ 862, 864, 86, 86, 865, 86, 868, 870, 86, 86,
+ 857, 871, 86, 86, 863, 86, 876, 3592, 874, 866,
+ 867, 869, 872, 875, 858, 859, 86, 877, 864, 86,
+ 86, 878, 873, 868, 879, 880, 881, 882, 871, 86,
+ 3592, 886, 86, 883, 86, 86, 86, 884, 869, 872,
+ 86, 888, 86, 887, 877, 86, 86, 891, 878, 873,
+ 86, 879, 880, 881, 882, 885, 86, 889, 896, 86,
+
+ 883, 890, 86, 86, 884, 895, 86, 892, 888, 86,
+ 887, 893, 897, 86, 891, 86, 898, 86, 899, 86,
+ 894, 901, 885, 900, 889, 3592, 903, 86, 890, 86,
+ 86, 86, 895, 86, 892, 86, 902, 904, 893, 897,
+ 905, 3592, 913, 898, 86, 899, 86, 894, 901, 86,
+ 900, 86, 906, 903, 909, 911, 907, 908, 910, 912,
+ 915, 86, 86, 902, 904, 86, 86, 905, 86, 913,
+ 914, 3592, 86, 86, 917, 3592, 918, 86, 919, 906,
+ 916, 909, 911, 907, 908, 910, 912, 915, 86, 86,
+ 86, 920, 922, 86, 923, 924, 921, 914, 927, 3592,
+
+ 86, 917, 86, 918, 86, 919, 86, 916, 925, 926,
+ 928, 930, 86, 932, 86, 929, 931, 86, 920, 922,
+ 86, 923, 924, 921, 86, 927, 86, 933, 86, 934,
+ 935, 86, 86, 936, 86, 925, 926, 928, 930, 937,
+ 932, 938, 929, 931, 86, 86, 939, 940, 944, 941,
+ 3592, 947, 943, 949, 933, 170, 934, 942, 86, 86,
+ 936, 86, 86, 86, 86, 86, 937, 948, 938, 945,
+ 86, 86, 954, 939, 940, 86, 941, 946, 86, 943,
+ 949, 951, 950, 953, 942, 952, 3592, 86, 956, 86,
+ 86, 955, 86, 86, 948, 86, 945, 86, 957, 954,
+
+ 958, 959, 960, 3592, 946, 961, 86, 86, 970, 950,
+ 953, 86, 952, 86, 971, 956, 962, 3592, 955, 86,
+ 86, 86, 972, 86, 86, 973, 974, 958, 959, 960,
+ 86, 86, 961, 979, 3592, 970, 975, 3592, 976, 977,
+ 86, 971, 3592, 962, 963, 978, 86, 964, 984, 972,
+ 86, 965, 973, 974, 966, 86, 86, 86, 980, 86,
+ 979, 967, 968, 975, 969, 976, 977, 981, 86, 86,
+ 982, 963, 978, 983, 964, 984, 985, 994, 965, 86,
+ 993, 966, 3592, 86, 86, 980, 86, 86, 967, 968,
+ 995, 969, 996, 3592, 981, 997, 86, 982, 999, 86,
+
+ 983, 86, 998, 1002, 994, 86, 1001, 993, 86, 986,
+ 987, 86, 988, 3592, 1000, 989, 1003, 995, 86, 996,
+ 990, 86, 997, 3592, 1010, 999, 991, 992, 86, 998,
+ 1002, 1006, 1004, 1001, 1012, 86, 986, 987, 86, 988,
+ 1007, 1000, 989, 1003, 86, 1008, 1005, 990, 86, 1009,
+ 86, 1010, 1011, 991, 992, 86, 86, 1013, 1006, 1004,
+ 1014, 1012, 1015, 1016, 86, 1017, 1018, 1020, 3592, 86,
+ 3592, 1022, 86, 1005, 1021, 86, 1009, 1025, 86, 1011,
+ 1019, 1024, 86, 86, 1013, 86, 86, 1014, 1023, 1015,
+ 1016, 86, 86, 1018, 1020, 86, 86, 86, 1022, 1026,
+
+ 86, 1021, 1028, 86, 1025, 1027, 1030, 1019, 1024, 1031,
+ 1029, 86, 1032, 1033, 86, 1023, 1034, 1035, 86, 86,
+ 1037, 86, 1036, 1038, 1040, 1044, 1026, 1042, 86, 1028,
+ 1039, 1041, 1027, 1030, 1046, 86, 1031, 1029, 86, 1043,
+ 1033, 1045, 86, 86, 86, 1047, 86, 1037, 1048, 86,
+ 3592, 1050, 1044, 86, 1051, 86, 86, 1039, 1041, 86,
+ 86, 86, 1049, 86, 1052, 1053, 1043, 86, 1045, 1054,
+ 1056, 86, 86, 86, 86, 1048, 1057, 86, 1050, 1055,
+ 86, 1051, 1058, 1059, 86, 1060, 1062, 86, 1067, 1049,
+ 3592, 1052, 1053, 1063, 86, 1064, 1054, 86, 86, 1061,
+
+ 1066, 86, 1065, 1057, 86, 3592, 1055, 86, 1068, 1058,
+ 86, 86, 86, 1062, 1070, 1067, 86, 86, 86, 1069,
+ 1063, 1071, 1064, 1072, 86, 1075, 1061, 1066, 1073, 1065,
+ 86, 1076, 86, 1074, 1098, 1068, 1078, 86, 86, 86,
+ 1081, 1070, 1077, 1079, 86, 1085, 1069, 1082, 1071, 86,
+ 1072, 1084, 1075, 1080, 86, 1083, 86, 86, 1076, 1086,
+ 86, 86, 1087, 1078, 3592, 86, 86, 1081, 1089, 1077,
+ 1079, 86, 86, 1088, 1082, 86, 86, 3592, 1084, 86,
+ 1080, 1090, 1083, 1093, 86, 1091, 1086, 1092, 86, 1087,
+ 86, 1097, 1094, 1095, 86, 1089, 86, 1096, 1100, 86,
+
+ 1088, 86, 1104, 1099, 1101, 1108, 86, 1105, 1090, 1102,
+ 1093, 1107, 1091, 86, 1092, 86, 86, 86, 1097, 1094,
+ 1095, 86, 1103, 86, 1096, 1100, 86, 1106, 1113, 1104,
+ 1099, 1101, 86, 86, 1105, 86, 1102, 1109, 1107, 1110,
+ 86, 1111, 1119, 1112, 1114, 86, 86, 86, 1115, 1103,
+ 86, 86, 1116, 86, 1106, 1113, 1117, 1120, 1118, 86,
+ 86, 1122, 3592, 86, 1109, 86, 1110, 1121, 1111, 1123,
+ 1112, 1114, 1127, 1125, 86, 1115, 1126, 1124, 1134, 1116,
+ 86, 3592, 86, 1117, 86, 1118, 1133, 1131, 1135, 86,
+ 1128, 1132, 1129, 86, 1121, 86, 1123, 86, 86, 1127,
+
+ 1130, 1136, 1137, 1139, 1124, 86, 1141, 86, 86, 86,
+ 86, 86, 86, 1133, 1131, 1140, 1138, 1128, 1132, 1129,
+ 86, 1144, 86, 1142, 1143, 86, 1147, 1130, 1136, 1137,
+ 86, 1148, 86, 86, 1145, 86, 1146, 1149, 3592, 1150,
+ 3592, 1151, 1140, 1138, 3592, 86, 86, 1152, 1144, 86,
+ 1142, 1143, 86, 1153, 1154, 1195, 1156, 1155, 170, 86,
+ 86, 1145, 86, 1146, 1149, 86, 1150, 86, 1151, 1157,
+ 1159, 1158, 1160, 3592, 1152, 1196, 86, 86, 86, 3592,
+ 1153, 1154, 86, 1156, 1155, 86, 3592, 86, 1167, 1168,
+ 1170, 3592, 1169, 1171, 3592, 86, 1157, 1159, 1158, 1160,
+
+ 1161, 3592, 1162, 1172, 86, 1189, 1163, 86, 1164, 1173,
+ 1174, 86, 86, 1165, 86, 1167, 1168, 86, 1166, 1169,
+ 1171, 86, 1175, 86, 86, 1176, 86, 1161, 1179, 1162,
+ 1172, 1183, 1189, 1163, 1177, 1164, 1173, 1174, 86, 1178,
+ 1165, 1180, 1186, 86, 86, 1166, 86, 1181, 1188, 1175,
+ 1184, 1187, 1176, 1191, 86, 1179, 1197, 86, 1183, 1182,
+ 1185, 86, 1192, 1190, 1193, 1199, 86, 3592, 1180, 1186,
+ 86, 86, 86, 86, 1181, 1188, 86, 1184, 1187, 1194,
+ 1191, 1210, 1211, 86, 86, 86, 1182, 1185, 1200, 1192,
+ 1190, 1193, 1201, 86, 1202, 3592, 86, 86, 1212, 1213,
+
+ 86, 86, 3592, 86, 86, 1214, 1194, 3592, 1210, 1211,
+ 1218, 86, 1215, 1222, 86, 1200, 1219, 1216, 3592, 1201,
+ 3592, 1202, 1203, 86, 86, 1212, 1213, 1204, 3592, 1205,
+ 1220, 86, 1214, 1223, 86, 1206, 86, 1218, 86, 1215,
+ 1207, 1208, 1217, 1219, 1216, 86, 3592, 1209, 86, 1203,
+ 1221, 1224, 1229, 86, 1204, 86, 1205, 1220, 1230, 1226,
+ 1223, 86, 1206, 1225, 1227, 1232, 86, 1207, 1208, 1217,
+ 86, 1228, 86, 86, 1209, 1231, 1233, 1221, 1224, 86,
+ 86, 86, 86, 1235, 1234, 1230, 1226, 1236, 1237, 3592,
+ 1225, 1227, 86, 1243, 1238, 1240, 1239, 86, 1228, 1241,
+
+ 86, 86, 1231, 1233, 86, 86, 1244, 1242, 1246, 3592,
+ 1235, 1234, 1255, 86, 1236, 1248, 86, 86, 86, 1245,
+ 86, 1238, 1240, 1239, 86, 86, 1241, 86, 86, 1247,
+ 86, 1249, 1250, 1244, 1242, 1246, 86, 1251, 86, 1252,
+ 1253, 1254, 1248, 1256, 86, 1258, 1245, 86, 3592, 1257,
+ 3592, 86, 86, 1259, 86, 86, 1247, 86, 1249, 1250,
+ 1261, 86, 86, 1260, 1251, 1262, 1252, 1253, 1254, 1263,
+ 1256, 86, 1258, 86, 86, 86, 1257, 1264, 1265, 1266,
+ 1259, 86, 1268, 1269, 1267, 1270, 1272, 1261, 1275, 1271,
+ 1260, 3592, 1262, 1276, 3592, 1279, 1263, 3592, 86, 86,
+
+ 86, 86, 86, 1274, 1264, 1265, 1266, 86, 86, 1268,
+ 1273, 1267, 1280, 1272, 86, 86, 1271, 86, 1277, 86,
+ 86, 1278, 1279, 1282, 86, 86, 1281, 1283, 1284, 1285,
+ 1274, 1286, 1288, 86, 86, 1290, 86, 1273, 1291, 1280,
+ 1287, 86, 86, 1292, 86, 1277, 1289, 86, 1278, 3592,
+ 1282, 86, 1293, 1281, 1283, 1284, 1285, 86, 86, 1295,
+ 1294, 1296, 1290, 86, 86, 1291, 86, 1287, 1302, 86,
+ 1292, 1297, 1298, 1289, 1299, 1300, 86, 1301, 1305, 1293,
+ 1303, 86, 86, 86, 1304, 1306, 1295, 1294, 1296, 86,
+ 86, 86, 86, 1309, 1308, 1302, 86, 86, 1297, 1298,
+
+ 1307, 1299, 1300, 86, 1301, 86, 1310, 1303, 1312, 1315,
+ 86, 1304, 86, 1311, 1314, 1316, 86, 86, 86, 1313,
+ 1309, 1308, 86, 86, 1317, 1318, 86, 1307, 1319, 1321,
+ 1323, 1320, 86, 1310, 3592, 1312, 1315, 1322, 86, 1325,
+ 1311, 1314, 1326, 1324, 1327, 1328, 1313, 86, 86, 86,
+ 86, 1329, 1332, 86, 3592, 1319, 86, 86, 1320, 86,
+ 1335, 86, 86, 1330, 1322, 86, 1325, 86, 1331, 1326,
+ 1324, 1333, 1328, 1336, 86, 1334, 86, 1337, 86, 1332,
+ 86, 86, 1339, 86, 86, 1338, 86, 1335, 1340, 1342,
+ 1330, 86, 1343, 86, 3592, 1331, 1344, 86, 1333, 1346,
+
+ 1336, 3592, 1334, 86, 1337, 1341, 1345, 86, 86, 1339,
+ 1347, 1350, 1338, 86, 1348, 1340, 1349, 1353, 86, 1357,
+ 86, 86, 1354, 1344, 86, 1352, 86, 86, 86, 1358,
+ 86, 86, 1341, 1345, 86, 86, 1359, 1347, 1350, 1356,
+ 1355, 1348, 86, 1349, 1353, 3592, 86, 86, 86, 1354,
+ 1360, 1362, 1352, 1361, 1365, 1364, 1358, 1363, 86, 1367,
+ 170, 1366, 1369, 1359, 86, 1370, 1356, 1355, 1368, 86,
+ 86, 1372, 86, 3592, 1371, 86, 86, 1360, 1362, 86,
+ 1361, 1365, 1364, 1373, 1363, 86, 86, 1374, 1366, 1375,
+ 1376, 1377, 1378, 86, 86, 1368, 3592, 86, 1372, 1379,
+
+ 1380, 1371, 86, 86, 86, 1383, 1385, 86, 86, 86,
+ 1373, 1381, 1384, 86, 1374, 86, 1375, 1376, 1377, 1378,
+ 86, 1382, 1386, 86, 1387, 86, 1379, 1380, 1388, 86,
+ 3592, 1395, 86, 1385, 86, 86, 1393, 1396, 1381, 1384,
+ 1394, 1397, 1400, 1389, 3592, 86, 1406, 1398, 1382, 1386,
+ 86, 1387, 1390, 86, 1391, 1388, 1399, 1392, 1395, 86,
+ 86, 86, 1401, 1393, 86, 86, 86, 1394, 1397, 1400,
+ 1389, 86, 1402, 1403, 1398, 1407, 1405, 1404, 86, 1390,
+ 86, 1391, 1409, 1399, 1392, 86, 1410, 1411, 1408, 1401,
+ 86, 86, 3592, 1416, 86, 86, 1412, 86, 86, 1402,
+
+ 1403, 86, 1407, 1405, 1404, 1413, 1415, 1417, 3592, 1409,
+ 1414, 3592, 1418, 1410, 86, 1408, 86, 86, 86, 1419,
+ 1416, 1420, 1431, 1412, 86, 86, 1421, 86, 86, 86,
+ 1423, 86, 1413, 1415, 1417, 1422, 1424, 1414, 1427, 1418,
+ 1425, 1426, 86, 1428, 86, 1429, 1419, 1430, 1420, 86,
+ 86, 1432, 86, 1421, 86, 86, 86, 1423, 86, 86,
+ 3592, 1434, 1422, 1424, 1433, 1427, 86, 1425, 1426, 1435,
+ 1428, 86, 1429, 1440, 1430, 1436, 1438, 1437, 1432, 86,
+ 1439, 86, 86, 86, 86, 86, 1441, 1442, 1434, 1443,
+ 1446, 1433, 86, 1444, 86, 1445, 1435, 1449, 1450, 1447,
+
+ 1440, 1448, 1436, 1438, 1437, 86, 86, 1439, 86, 86,
+ 1451, 1456, 86, 86, 1442, 1452, 1454, 1446, 86, 86,
+ 1444, 86, 1445, 1453, 1449, 1450, 1447, 1455, 1448, 86,
+ 1464, 86, 1466, 1465, 1468, 3592, 1470, 86, 1456, 1467,
+ 3592, 86, 86, 1454, 86, 3592, 3592, 1471, 3592, 1472,
+ 1453, 86, 1469, 3592, 1455, 1457, 86, 1464, 1473, 1458,
+ 1465, 1468, 1459, 1460, 86, 86, 1467, 1461, 86, 86,
+ 86, 86, 1474, 1462, 1471, 1475, 1472, 1463, 86, 1469,
+ 1478, 86, 1457, 1479, 86, 1473, 1458, 86, 3592, 1459,
+ 1460, 1476, 86, 1477, 1461, 1480, 1481, 1483, 1482, 1474,
+
+ 1462, 86, 1475, 1484, 1463, 86, 1486, 1478, 1485, 1487,
+ 1479, 3592, 1488, 1489, 86, 86, 86, 86, 1476, 86,
+ 1477, 1496, 3592, 1481, 1483, 1482, 1498, 86, 1490, 3592,
+ 1484, 1497, 1506, 1501, 86, 1485, 86, 1507, 86, 1488,
+ 1489, 86, 86, 86, 86, 1502, 1499, 1500, 1496, 86,
+ 1503, 1505, 86, 1498, 1509, 1490, 1491, 1504, 1497, 86,
+ 1501, 1492, 86, 1493, 86, 1494, 86, 1495, 86, 86,
+ 1516, 1508, 1502, 1510, 86, 86, 3592, 1503, 1505, 1512,
+ 1511, 1509, 1517, 1491, 1504, 3592, 3592, 3592, 1492, 86,
+ 1493, 1513, 1494, 86, 1495, 86, 1514, 86, 1508, 86,
+
+ 1510, 1515, 86, 1519, 86, 1518, 1512, 1511, 86, 1517,
+ 1525, 1520, 1521, 1522, 86, 1523, 1524, 1528, 1513, 86,
+ 86, 1530, 86, 1514, 86, 1526, 86, 86, 1515, 1527,
+ 1519, 1532, 1518, 86, 86, 1529, 86, 1525, 1520, 1521,
+ 1522, 1531, 1523, 1524, 86, 1533, 1534, 86, 86, 1536,
+ 1537, 86, 1526, 1535, 86, 86, 1527, 86, 1532, 1538,
+ 3592, 1539, 1529, 1540, 1541, 1544, 86, 86, 1531, 1542,
+ 86, 86, 1533, 1534, 1545, 86, 86, 1537, 1543, 1546,
+ 1535, 86, 1549, 1547, 86, 86, 86, 86, 1539, 86,
+ 1540, 1541, 86, 1548, 1550, 1551, 1542, 1555, 1552, 1553,
+
+ 86, 1545, 1558, 1554, 1556, 1543, 1546, 86, 86, 86,
+ 1547, 1557, 1559, 86, 86, 86, 86, 1560, 86, 1561,
+ 1548, 1550, 1551, 86, 1555, 1552, 1553, 86, 1562, 1558,
+ 1554, 1556, 1563, 86, 86, 1564, 86, 3592, 1557, 1559,
+ 1566, 86, 1565, 1568, 1560, 1567, 1561, 1570, 1571, 86,
+ 1576, 1569, 86, 1574, 86, 1562, 1575, 1577, 86, 1563,
+ 1572, 86, 1564, 86, 86, 86, 86, 1566, 1573, 1565,
+ 1568, 1578, 1567, 86, 86, 1580, 1582, 1576, 1569, 86,
+ 86, 1579, 86, 1575, 1577, 86, 1588, 1572, 86, 1583,
+ 86, 1581, 1584, 86, 1586, 1573, 1587, 86, 86, 86,
+
+ 86, 170, 1580, 1582, 1589, 1585, 3592, 86, 1579, 86,
+ 1594, 1590, 3592, 1588, 1592, 1593, 1583, 1591, 1581, 1584,
+ 1595, 86, 86, 1597, 86, 86, 86, 1598, 86, 1599,
+ 1596, 86, 1585, 86, 86, 3592, 86, 1594, 1590, 86,
+ 1601, 1592, 1593, 1600, 1591, 1602, 1604, 1595, 1609, 86,
+ 1597, 1603, 86, 1605, 1598, 86, 1599, 1596, 1606, 3592,
+ 1608, 86, 86, 1607, 1610, 1612, 86, 1601, 86, 86,
+ 1600, 1611, 86, 1604, 1621, 1609, 1613, 86, 1603, 1614,
+ 1605, 1617, 1615, 86, 86, 1616, 1618, 1608, 86, 1619,
+ 86, 1610, 1612, 1620, 1622, 1623, 1627, 86, 1611, 86,
+
+ 1624, 1621, 86, 1613, 86, 86, 1614, 1625, 1617, 1615,
+ 86, 86, 1616, 1618, 1628, 86, 1619, 1626, 86, 3592,
+ 1629, 1622, 1631, 1627, 1630, 86, 1632, 86, 1633, 1636,
+ 1634, 86, 1635, 86, 1625, 1638, 86, 86, 86, 1637,
+ 1639, 1628, 86, 1640, 1626, 86, 86, 1629, 86, 1631,
+ 86, 1630, 86, 1632, 1642, 1633, 1636, 1634, 1643, 1635,
+ 1641, 86, 1638, 86, 1644, 1646, 1637, 1639, 86, 1645,
+ 1640, 1647, 1648, 86, 1649, 86, 3592, 86, 86, 3592,
+ 1650, 3592, 86, 86, 86, 1643, 86, 1641, 1651, 1652,
+ 3592, 1644, 1646, 1656, 1653, 1655, 1645, 1657, 1647, 1648,
+
+ 1654, 1649, 86, 86, 1660, 1658, 86, 1650, 86, 86,
+ 1659, 86, 1661, 86, 1662, 1651, 1652, 86, 1665, 86,
+ 1656, 1653, 1655, 86, 1657, 1663, 1666, 1654, 1664, 1667,
+ 86, 1660, 1658, 1668, 1670, 1669, 1671, 1659, 86, 86,
+ 86, 1672, 3592, 1673, 86, 86, 86, 86, 1674, 1675,
+ 3592, 3592, 1663, 1666, 86, 1664, 1667, 86, 1676, 1677,
+ 1668, 3592, 1669, 1678, 1679, 1680, 86, 1682, 86, 86,
+ 1673, 1681, 86, 86, 86, 1674, 86, 86, 86, 86,
+ 1683, 86, 1684, 86, 1685, 1676, 1677, 86, 1686, 86,
+ 1678, 1679, 1680, 1688, 1682, 1687, 1697, 1689, 1681, 1691,
+
+ 1694, 86, 1690, 86, 1692, 1693, 86, 1683, 86, 1684,
+ 86, 1685, 86, 1695, 86, 1686, 1696, 1698, 1702, 1703,
+ 1688, 86, 1687, 1697, 86, 1699, 86, 1694, 1700, 86,
+ 1704, 86, 1693, 86, 1706, 86, 1701, 86, 3592, 86,
+ 1695, 86, 3592, 1696, 1698, 86, 1703, 1705, 86, 1708,
+ 86, 1707, 1699, 1709, 1710, 1700, 1711, 1704, 3592, 86,
+ 1712, 1713, 86, 1701, 86, 1714, 86, 1715, 86, 86,
+ 86, 1716, 1717, 86, 1705, 1718, 1708, 86, 1707, 1719,
+ 86, 1710, 1720, 1711, 86, 86, 1723, 1712, 1713, 1721,
+ 86, 1724, 1714, 1722, 1715, 1725, 1726, 86, 1716, 1717,
+
+ 1727, 86, 1718, 86, 1734, 3592, 1719, 1728, 86, 1720,
+ 1729, 1730, 1733, 86, 86, 1731, 1721, 86, 86, 86,
+ 1722, 86, 1725, 1726, 86, 86, 86, 1727, 1732, 1735,
+ 1738, 1734, 1737, 1736, 1728, 1740, 86, 1729, 1730, 1733,
+ 86, 86, 1731, 86, 1739, 1743, 1741, 1742, 1744, 1745,
+ 1751, 1749, 3592, 3592, 1748, 1732, 1735, 86, 86, 1737,
+ 1736, 86, 1746, 86, 1752, 1757, 86, 86, 1756, 86,
+ 86, 1739, 86, 1741, 1742, 1744, 1745, 86, 1749, 1747,
+ 1750, 1748, 86, 1753, 1754, 86, 86, 86, 3592, 1746,
+ 86, 86, 86, 1755, 86, 1756, 1758, 86, 1759, 1761,
+
+ 1760, 1762, 1763, 86, 1768, 1764, 1747, 1750, 1766, 1765,
+ 1753, 1754, 86, 86, 86, 86, 86, 1770, 3592, 1776,
+ 1755, 3592, 86, 1758, 86, 86, 86, 1760, 1762, 1763,
+ 1767, 1768, 1764, 86, 1769, 1766, 1765, 86, 1771, 1772,
+ 1773, 86, 1774, 86, 1770, 86, 1775, 1779, 86, 1777,
+ 86, 86, 1778, 1781, 3592, 86, 86, 1767, 1783, 86,
+ 1780, 1769, 1788, 3592, 86, 1771, 1772, 1773, 1784, 1774,
+ 86, 1782, 86, 1775, 1779, 86, 1777, 1785, 86, 1778,
+ 1781, 86, 1787, 1786, 86, 1783, 86, 1780, 1789, 86,
+ 1790, 3592, 1791, 1798, 86, 1784, 1792, 86, 1782, 1793,
+
+ 1794, 86, 1795, 3592, 1785, 86, 1796, 86, 1797, 1787,
+ 1786, 86, 1799, 1803, 86, 1789, 86, 1790, 86, 1791,
+ 86, 1801, 86, 1792, 1800, 86, 1793, 1794, 1804, 1795,
+ 86, 1802, 1813, 1796, 1807, 1797, 86, 1809, 86, 1799,
+ 1803, 86, 170, 86, 1805, 1806, 1810, 86, 1801, 1814,
+ 1811, 1800, 86, 1812, 1808, 1804, 86, 86, 1802, 86,
+ 86, 1807, 1815, 86, 1809, 1817, 1818, 86, 86, 1819,
+ 1822, 1805, 1806, 1810, 1821, 1816, 1814, 1811, 1820, 3592,
+ 1812, 1808, 86, 86, 86, 86, 1823, 1824, 86, 1815,
+ 86, 1825, 1817, 1818, 1826, 86, 1827, 1822, 1828, 86,
+
+ 1829, 86, 1816, 1832, 1830, 1820, 86, 1834, 1833, 1841,
+ 1831, 1835, 86, 86, 1824, 86, 86, 86, 1825, 86,
+ 86, 1826, 1837, 1827, 86, 1828, 86, 1829, 1836, 86,
+ 1832, 1830, 86, 86, 1834, 1833, 1838, 1831, 1835, 1839,
+ 1842, 86, 3592, 86, 1848, 1843, 1845, 1849, 1846, 1837,
+ 1847, 1840, 86, 1850, 1851, 1836, 86, 1852, 1854, 1856,
+ 86, 1844, 86, 1838, 86, 1853, 1839, 1842, 86, 86,
+ 86, 1848, 1843, 1845, 86, 1846, 1855, 1847, 1840, 1857,
+ 1850, 1858, 1863, 1862, 86, 1854, 86, 86, 1844, 86,
+ 1859, 86, 1853, 1861, 1864, 86, 1860, 1865, 1867, 86,
+
+ 86, 86, 86, 1855, 86, 1866, 1857, 86, 1858, 1868,
+ 1862, 1869, 1870, 86, 86, 1871, 1872, 1859, 3592, 3592,
+ 1861, 1873, 3592, 1860, 1875, 86, 86, 86, 86, 86,
+ 86, 86, 1866, 86, 1876, 1881, 1868, 86, 1869, 86,
+ 1877, 1874, 1871, 1872, 1878, 1879, 1884, 86, 1873, 86,
+ 1880, 1875, 86, 86, 86, 1882, 1883, 86, 86, 1885,
+ 1886, 1876, 1881, 1888, 86, 1887, 86, 1877, 1874, 1889,
+ 1890, 1878, 1879, 1884, 86, 86, 86, 1880, 1891, 86,
+ 86, 86, 1882, 1883, 1893, 86, 1885, 1886, 1892, 1894,
+ 86, 1895, 1887, 1897, 3592, 86, 1889, 1890, 86, 1896,
+
+ 1899, 86, 1898, 1901, 1900, 1891, 86, 1903, 86, 3592,
+ 1902, 1893, 86, 1905, 3592, 1892, 86, 86, 1895, 86,
+ 1897, 86, 1911, 1904, 86, 86, 1896, 1899, 86, 1898,
+ 1901, 1900, 1908, 86, 1903, 86, 1906, 1902, 1912, 1907,
+ 1905, 1909, 1913, 86, 1914, 1915, 1910, 1916, 3592, 1911,
+ 1904, 1917, 1918, 86, 86, 1921, 86, 3592, 1931, 1908,
+ 86, 1922, 86, 1906, 1923, 1912, 1907, 1919, 1909, 86,
+ 1932, 86, 1915, 1910, 1916, 86, 1920, 86, 1917, 86,
+ 1926, 86, 1921, 3592, 86, 86, 86, 1924, 1922, 1925,
+ 86, 1923, 1930, 1927, 1919, 86, 1937, 86, 86, 1928,
+
+ 86, 86, 1929, 1920, 1933, 1934, 1936, 1926, 1935, 86,
+ 86, 3592, 86, 1939, 1924, 86, 1925, 86, 1940, 1930,
+ 1927, 1941, 86, 1937, 86, 1938, 1928, 1942, 1943, 1929,
+ 86, 1933, 1934, 1936, 1945, 1935, 86, 1944, 1946, 1947,
+ 1954, 3592, 86, 86, 1950, 86, 86, 1948, 1941, 86,
+ 1952, 1949, 1938, 1953, 1942, 1943, 3592, 86, 1951, 1965,
+ 86, 1945, 86, 1955, 1944, 1946, 1947, 1954, 86, 1956,
+ 86, 1950, 86, 86, 1948, 86, 1958, 1952, 1949, 1957,
+ 1953, 1959, 1960, 1963, 1962, 1951, 1961, 1964, 86, 86,
+ 1955, 86, 1966, 1967, 1968, 86, 1956, 3592, 86, 1971,
+
+ 86, 86, 1969, 1970, 1975, 86, 1957, 1972, 86, 1960,
+ 1963, 1962, 1974, 1961, 1964, 1973, 86, 1977, 1976, 1966,
+ 86, 1979, 86, 1978, 86, 86, 86, 1980, 86, 1969,
+ 1970, 86, 86, 1984, 1972, 1981, 86, 1985, 1986, 1974,
+ 1982, 86, 1973, 86, 1977, 1976, 86, 1983, 86, 1987,
+ 1978, 1988, 86, 86, 1980, 86, 86, 1989, 1994, 86,
+ 1984, 1992, 1981, 86, 1985, 1986, 1990, 1982, 1991, 86,
+ 1995, 86, 1996, 1997, 1983, 3592, 1987, 1998, 1988, 86,
+ 2000, 86, 1993, 2001, 1989, 1999, 2002, 86, 86, 86,
+ 86, 86, 86, 1990, 2003, 1991, 86, 2004, 2005, 1996,
+
+ 1997, 2008, 86, 86, 86, 2006, 2007, 2000, 86, 1993,
+ 2001, 2009, 1999, 86, 2010, 86, 86, 2011, 86, 2012,
+ 2013, 2003, 2015, 2014, 3592, 2005, 86, 2016, 86, 86,
+ 2018, 86, 2006, 2007, 2019, 2017, 2022, 86, 2009, 86,
+ 86, 2010, 86, 2021, 2011, 86, 2012, 2013, 86, 2015,
+ 2014, 86, 2020, 2024, 2016, 86, 2023, 2018, 86, 2026,
+ 2029, 2019, 2017, 86, 86, 2025, 2030, 170, 86, 2027,
+ 2021, 2028, 2033, 86, 2034, 86, 2031, 2042, 2032, 2020,
+ 2024, 86, 86, 2023, 86, 86, 86, 2029, 2035, 86,
+ 2036, 86, 2025, 2030, 2037, 2038, 2027, 86, 2028, 2039,
+
+ 2041, 2034, 2040, 2031, 86, 2032, 2043, 2045, 2044, 86,
+ 3592, 86, 2046, 2047, 2065, 2035, 2064, 2036, 86, 86,
+ 86, 86, 2038, 86, 86, 2048, 86, 2041, 2049, 2040,
+ 86, 2051, 86, 86, 2045, 2044, 86, 86, 2050, 2046,
+ 2047, 2052, 2053, 86, 2054, 2055, 86, 86, 2056, 2057,
+ 3592, 3592, 2048, 86, 2059, 2049, 2062, 86, 2051, 86,
+ 86, 86, 2058, 86, 3592, 2050, 2060, 86, 2052, 2053,
+ 86, 2054, 2055, 2061, 2063, 2056, 2057, 2075, 86, 2066,
+ 2067, 2059, 2068, 2062, 2069, 86, 86, 2070, 86, 2058,
+ 86, 86, 86, 2060, 2072, 2071, 2076, 2073, 86, 2074,
+
+ 2061, 2063, 86, 86, 2075, 2077, 2066, 2067, 2078, 2068,
+ 86, 2069, 2079, 2084, 2070, 86, 2080, 2086, 2085, 86,
+ 2087, 2072, 2071, 86, 2073, 2081, 2074, 2082, 2083, 2088,
+ 2090, 86, 86, 86, 86, 2078, 2091, 2089, 2094, 86,
+ 86, 86, 86, 2080, 86, 2085, 86, 2087, 2092, 86,
+ 86, 2096, 2081, 2093, 2082, 2083, 2097, 2098, 86, 2095,
+ 2100, 86, 86, 2091, 2089, 86, 86, 2101, 2099, 86,
+ 2102, 2103, 2104, 86, 86, 2092, 2110, 86, 2096, 2112,
+ 2093, 2109, 86, 86, 2098, 86, 2095, 2100, 86, 86,
+ 2121, 2118, 3592, 86, 2101, 2099, 86, 2102, 2103, 2105,
+
+ 2106, 2107, 2111, 2110, 86, 2113, 2108, 2116, 2109, 86,
+ 2114, 86, 86, 2117, 86, 2115, 86, 2125, 2118, 2119,
+ 86, 2122, 86, 2123, 2120, 86, 2105, 2106, 2107, 2111,
+ 86, 2124, 2113, 2108, 2116, 86, 86, 86, 2127, 86,
+ 2117, 2130, 86, 2131, 86, 2133, 2119, 2128, 2122, 2132,
+ 2123, 2120, 2126, 86, 86, 2129, 86, 2134, 2124, 86,
+ 86, 2138, 2135, 2136, 86, 2127, 3592, 86, 2130, 2137,
+ 86, 2140, 86, 3592, 2128, 86, 2132, 2139, 3592, 2126,
+ 86, 86, 2129, 2142, 2134, 2141, 2143, 2144, 86, 2135,
+ 2136, 86, 2146, 86, 2150, 86, 2137, 2148, 86, 2145,
+
+ 86, 2147, 86, 2149, 2139, 86, 86, 2151, 86, 2153,
+ 2142, 2154, 2141, 2143, 2144, 2152, 86, 2156, 86, 2146,
+ 2155, 2150, 86, 2157, 2148, 86, 2145, 2158, 2147, 86,
+ 2159, 2160, 2163, 2161, 3592, 86, 2153, 2165, 2162, 86,
+ 86, 2166, 2152, 86, 2156, 86, 86, 2155, 2164, 86,
+ 86, 2168, 86, 2169, 86, 86, 86, 2159, 2160, 2163,
+ 2161, 86, 2170, 86, 2165, 2162, 2167, 86, 2166, 2171,
+ 2172, 2178, 2173, 2175, 2176, 2164, 86, 86, 2168, 86,
+ 86, 2177, 86, 2179, 2180, 86, 86, 3592, 2174, 2187,
+ 2181, 2183, 86, 2167, 86, 86, 2171, 2172, 86, 2173,
+
+ 2175, 2176, 86, 86, 2182, 3592, 2184, 2185, 2177, 2186,
+ 2179, 2180, 86, 2191, 86, 2174, 86, 2181, 2183, 2188,
+ 3592, 2189, 2193, 2192, 2199, 2195, 2190, 86, 86, 86,
+ 2194, 2182, 86, 2184, 2185, 86, 2186, 86, 86, 2204,
+ 86, 2202, 86, 2205, 2196, 3592, 2188, 86, 2189, 2193,
+ 2192, 86, 2195, 2190, 2197, 2198, 86, 2194, 2200, 2203,
+ 2201, 86, 86, 86, 2212, 2206, 86, 86, 2202, 86,
+ 2205, 2196, 86, 86, 2208, 2207, 2210, 2211, 2213, 2209,
+ 2216, 2197, 2198, 86, 2214, 2200, 2203, 2201, 86, 2215,
+ 86, 86, 2206, 86, 2217, 2218, 86, 2219, 2220, 86,
+
+ 2221, 2208, 2207, 2210, 2211, 86, 2209, 2223, 2222, 3592,
+ 2225, 2227, 86, 86, 2224, 2226, 86, 86, 2229, 86,
+ 2230, 3592, 2218, 86, 2219, 2220, 86, 2233, 2228, 86,
+ 86, 2231, 86, 86, 2223, 2222, 86, 2225, 2232, 86,
+ 2236, 2224, 2226, 86, 2234, 86, 2235, 86, 86, 170,
+ 86, 2238, 2237, 2240, 2233, 2228, 2239, 2241, 2231, 86,
+ 2243, 86, 2242, 2247, 2244, 2232, 2245, 2236, 3592, 86,
+ 3592, 2234, 2248, 2235, 86, 86, 2246, 2249, 2238, 2237,
+ 86, 86, 86, 2239, 86, 86, 2251, 2250, 86, 2242,
+ 2247, 2244, 86, 2245, 86, 2252, 2253, 86, 2254, 2248,
+
+ 2255, 86, 86, 2246, 2249, 2260, 2256, 2257, 2258, 2261,
+ 86, 86, 86, 2251, 2250, 2259, 86, 2263, 2265, 2262,
+ 86, 2267, 2252, 2253, 86, 2254, 86, 86, 2266, 86,
+ 86, 2269, 86, 2256, 2257, 2258, 2261, 86, 2268, 86,
+ 2264, 86, 2259, 2270, 2263, 2265, 2262, 86, 86, 86,
+ 86, 2271, 86, 86, 2274, 2266, 3592, 2272, 2269, 2275,
+ 2280, 2276, 2277, 86, 86, 2268, 2278, 2264, 2273, 86,
+ 2270, 3592, 2279, 2284, 2281, 86, 2282, 86, 2271, 86,
+ 86, 2274, 2283, 86, 2272, 2291, 2275, 2280, 2276, 2277,
+ 86, 2285, 86, 2278, 2286, 2273, 86, 2287, 86, 2279,
+
+ 86, 2281, 2288, 2282, 2289, 86, 2290, 2294, 86, 2283,
+ 2292, 2302, 2293, 86, 2295, 86, 86, 86, 2285, 86,
+ 86, 2286, 2296, 86, 2287, 2297, 2298, 3592, 2299, 2288,
+ 2301, 2289, 86, 2290, 2294, 2303, 2300, 2292, 86, 2293,
+ 86, 2295, 2305, 86, 86, 2304, 2308, 86, 86, 86,
+ 2307, 86, 2297, 86, 86, 2299, 2310, 2301, 2312, 2306,
+ 2311, 2309, 2303, 2300, 86, 86, 86, 86, 2315, 2305,
+ 86, 86, 2304, 2308, 2313, 86, 86, 2307, 2314, 86,
+ 86, 2322, 2321, 2310, 2319, 2312, 2306, 2311, 2309, 86,
+ 2316, 86, 2320, 2323, 2317, 2315, 86, 86, 2325, 2324,
+
+ 3592, 2313, 86, 2329, 2332, 2314, 86, 2318, 86, 2321,
+ 2326, 2319, 3592, 2328, 2331, 86, 2327, 2316, 2330, 2320,
+ 2323, 2317, 86, 86, 86, 2325, 2324, 86, 86, 2333,
+ 2329, 2332, 86, 2334, 2318, 86, 86, 2326, 2336, 2335,
+ 2328, 2331, 86, 2327, 2337, 2330, 2338, 86, 2339, 2340,
+ 2341, 2342, 2351, 86, 86, 3592, 2333, 86, 2343, 86,
+ 2334, 2344, 2345, 86, 2346, 2336, 2335, 3592, 2347, 86,
+ 2348, 2337, 2349, 2338, 86, 2350, 2340, 2341, 86, 86,
+ 86, 86, 86, 86, 86, 2343, 86, 86, 2344, 2345,
+ 86, 2346, 2352, 2353, 2354, 2347, 2355, 2348, 2357, 2349,
+
+ 2358, 2356, 2350, 2359, 2360, 3592, 2361, 86, 86, 86,
+ 2362, 2363, 2365, 2366, 86, 2364, 86, 86, 2367, 2352,
+ 2353, 2354, 86, 86, 2371, 2357, 86, 2358, 86, 2373,
+ 2359, 86, 86, 2361, 3592, 86, 2374, 2362, 2363, 2368,
+ 2366, 2369, 2364, 86, 86, 2367, 2372, 2375, 86, 2370,
+ 2376, 86, 2378, 2382, 3592, 86, 2373, 2381, 2377, 86,
+ 86, 86, 86, 2374, 3592, 86, 2368, 86, 2369, 3592,
+ 2389, 2385, 86, 2372, 2375, 86, 2370, 2376, 2379, 2378,
+ 2382, 2380, 86, 2383, 2381, 2377, 86, 2387, 2384, 2386,
+ 2390, 2388, 86, 2392, 2394, 2391, 86, 2389, 2385, 2398,
+
+ 86, 2393, 86, 2418, 2395, 2379, 86, 86, 2380, 86,
+ 86, 3592, 86, 86, 2387, 86, 2386, 2390, 2388, 86,
+ 2392, 86, 2391, 2396, 2397, 2399, 2398, 86, 2393, 2400,
+ 86, 2395, 86, 86, 2401, 2402, 2405, 2406, 2403, 2404,
+ 3592, 3592, 86, 86, 3592, 2407, 86, 2410, 2412, 2409,
+ 2396, 2397, 2399, 86, 86, 2408, 2400, 86, 86, 86,
+ 2411, 2401, 2402, 2405, 2406, 2403, 2404, 86, 86, 86,
+ 2415, 2414, 2407, 86, 2410, 2412, 2409, 2413, 2416, 86,
+ 86, 86, 2408, 86, 2417, 2419, 2420, 2411, 2422, 3592,
+ 2421, 2423, 2425, 2426, 2424, 2427, 86, 2415, 2414, 86,
+
+ 2431, 86, 86, 86, 2413, 2416, 86, 2432, 2436, 2433,
+ 3592, 2417, 2419, 86, 86, 2422, 86, 2421, 2423, 2425,
+ 2426, 2424, 2434, 2428, 2429, 3592, 2437, 86, 170, 2430,
+ 2435, 2441, 86, 86, 2444, 86, 2433, 86, 2442, 86,
+ 2438, 86, 2440, 86, 2443, 2445, 2446, 2450, 2447, 2434,
+ 2428, 2439, 86, 2437, 2448, 3592, 86, 2435, 86, 86,
+ 86, 2444, 2449, 2451, 86, 2442, 3592, 2438, 86, 2440,
+ 2453, 2443, 3592, 2446, 86, 2447, 2452, 86, 2439, 86,
+ 2454, 86, 2456, 86, 86, 2465, 86, 86, 2458, 2449,
+ 2451, 2457, 2455, 86, 86, 86, 2460, 2453, 2459, 2461,
+
+ 86, 2462, 2463, 2452, 86, 86, 2464, 2454, 86, 2456,
+ 86, 86, 86, 2466, 3592, 2458, 2468, 3592, 2457, 2455,
+ 86, 2469, 2467, 2460, 86, 2459, 2461, 2472, 2462, 2463,
+ 86, 2470, 86, 2464, 86, 2471, 86, 2473, 86, 2474,
+ 2466, 2475, 86, 2468, 86, 86, 2477, 2476, 2469, 2467,
+ 2478, 2479, 2480, 2488, 2472, 86, 86, 2481, 2470, 86,
+ 86, 86, 2471, 2482, 2473, 86, 2474, 86, 2475, 86,
+ 2485, 2486, 2483, 86, 2476, 86, 86, 2478, 2479, 2480,
+ 2484, 2487, 2489, 2491, 2481, 86, 86, 86, 86, 2490,
+ 2482, 2492, 2493, 2494, 86, 2495, 86, 2485, 2486, 2483,
+
+ 86, 2496, 2497, 86, 2501, 2502, 2504, 2484, 2487, 2489,
+ 2491, 2498, 86, 3592, 2499, 2503, 2490, 86, 2492, 2493,
+ 2494, 2500, 86, 86, 2505, 86, 86, 86, 2496, 2497,
+ 86, 2501, 86, 86, 2507, 86, 86, 2508, 2498, 2506,
+ 86, 2499, 2503, 2511, 2509, 2512, 2513, 2510, 2500, 3592,
+ 2515, 2505, 2516, 86, 2514, 2518, 2519, 86, 2521, 86,
+ 86, 2507, 86, 86, 2508, 2517, 2506, 2520, 86, 2522,
+ 86, 2509, 86, 2513, 2510, 86, 86, 2515, 86, 2516,
+ 86, 2514, 86, 86, 2523, 86, 2524, 2525, 2526, 2527,
+ 2528, 3592, 2517, 2531, 2520, 2530, 2522, 2533, 86, 2532,
+
+ 2529, 2534, 2535, 86, 2536, 86, 86, 86, 2538, 86,
+ 86, 86, 2537, 2524, 2525, 86, 86, 2528, 86, 86,
+ 2531, 86, 2530, 2539, 2533, 2540, 2532, 2529, 86, 2535,
+ 86, 86, 2541, 2543, 2544, 2538, 2545, 2546, 2548, 2537,
+ 2549, 2547, 86, 2551, 86, 2553, 86, 2542, 86, 86,
+ 2539, 2555, 2540, 86, 2554, 86, 2560, 86, 86, 2541,
+ 86, 2544, 86, 2545, 2546, 2548, 2550, 86, 2547, 2557,
+ 2551, 2552, 2553, 86, 2542, 86, 2556, 86, 86, 2561,
+ 2558, 2554, 2559, 86, 86, 2562, 86, 2563, 2564, 2566,
+ 2565, 86, 86, 2550, 86, 2568, 2557, 86, 2552, 86,
+
+ 86, 86, 2569, 2556, 2576, 86, 2561, 2558, 2570, 2559,
+ 2567, 86, 2562, 2574, 2563, 2564, 2566, 2565, 3592, 2571,
+ 86, 86, 2568, 2575, 3592, 2577, 86, 2579, 2578, 2569,
+ 86, 2576, 2587, 86, 2572, 2570, 2573, 2567, 86, 3592,
+ 2581, 86, 2580, 86, 2583, 86, 2571, 86, 86, 2588,
+ 2575, 2584, 2577, 2585, 2579, 2578, 2582, 86, 2586, 2589,
+ 2590, 2572, 86, 2573, 86, 86, 86, 2581, 2591, 2580,
+ 86, 2583, 86, 86, 2592, 86, 2593, 2594, 2584, 86,
+ 2585, 86, 2596, 2582, 2597, 2586, 2589, 2590, 2595, 2598,
+ 2599, 86, 2600, 2603, 2601, 2604, 86, 2605, 86, 3592,
+
+ 86, 2592, 86, 2593, 2594, 2602, 86, 86, 86, 2596,
+ 86, 2597, 86, 2608, 2610, 2595, 2598, 2599, 86, 2600,
+ 86, 2601, 2606, 2607, 2605, 86, 2609, 86, 2611, 86,
+ 86, 86, 2602, 2613, 3592, 2614, 2612, 2615, 2620, 3592,
+ 2608, 2616, 3592, 2617, 3592, 2618, 86, 2619, 86, 2606,
+ 2607, 86, 86, 2609, 86, 2611, 86, 2621, 86, 170,
+ 2613, 86, 2614, 2612, 2615, 86, 2623, 2622, 2616, 86,
+ 2617, 2624, 2618, 2626, 2619, 2625, 2630, 2627, 3592, 2629,
+ 2631, 86, 86, 2628, 2621, 86, 86, 86, 86, 2632,
+ 2633, 86, 2636, 2623, 2622, 2634, 2635, 2637, 2624, 2646,
+
+ 2626, 86, 2625, 2630, 2627, 86, 2629, 86, 2638, 2639,
+ 2628, 2641, 2640, 2642, 2643, 86, 2632, 86, 86, 86,
+ 2645, 2649, 2634, 2635, 86, 86, 86, 86, 86, 86,
+ 2647, 86, 2648, 2651, 2644, 2638, 86, 86, 2641, 2640,
+ 2642, 2643, 86, 86, 86, 2650, 86, 2645, 2649, 2652,
+ 2654, 2653, 2655, 2658, 86, 2656, 2661, 2647, 2657, 2648,
+ 86, 2644, 86, 86, 2660, 3592, 3592, 3592, 86, 86,
+ 86, 86, 2650, 86, 2659, 2665, 2652, 2654, 2653, 2655,
+ 86, 86, 2656, 2661, 2664, 2657, 86, 2662, 86, 2663,
+ 2667, 2660, 2666, 2668, 86, 2671, 86, 86, 86, 86,
+
+ 2669, 2659, 2665, 2670, 86, 2672, 2674, 2673, 2676, 2678,
+ 2680, 2664, 86, 86, 2662, 86, 2663, 2667, 2675, 2666,
+ 86, 86, 2671, 2677, 86, 86, 2679, 2669, 86, 86,
+ 2670, 2683, 2672, 2674, 2673, 86, 2678, 2681, 86, 2684,
+ 2682, 3592, 86, 2685, 2686, 2675, 2688, 86, 86, 86,
+ 2677, 2687, 86, 2679, 2689, 2691, 86, 2692, 2683, 2690,
+ 3592, 2693, 2695, 3592, 2681, 86, 2684, 2682, 86, 86,
+ 2685, 2686, 86, 2688, 2694, 86, 2696, 2697, 2687, 2704,
+ 86, 2689, 86, 2698, 2692, 86, 2690, 86, 86, 86,
+ 86, 2699, 86, 2701, 86, 2700, 86, 2702, 2705, 86,
+
+ 3592, 2694, 2706, 2696, 2697, 2703, 86, 3592, 2707, 2710,
+ 2698, 2708, 2709, 86, 86, 86, 3592, 3592, 2699, 86,
+ 2701, 2711, 2700, 86, 2702, 86, 2713, 86, 2716, 2714,
+ 2715, 2717, 2703, 2712, 86, 2707, 2710, 86, 2708, 2709,
+ 2718, 86, 2719, 86, 86, 86, 2722, 3592, 2711, 86,
+ 86, 2723, 2721, 2713, 2720, 86, 2714, 2715, 2717, 2725,
+ 2712, 86, 2724, 86, 86, 2726, 2727, 2718, 86, 2730,
+ 86, 2729, 2728, 86, 86, 86, 2731, 3592, 2723, 2721,
+ 86, 2720, 2732, 2733, 2734, 2736, 2725, 86, 2735, 2724,
+ 86, 86, 2726, 86, 86, 2737, 2730, 86, 2729, 2728,
+
+ 86, 86, 2740, 2731, 86, 2741, 2738, 2739, 86, 2732,
+ 2733, 2734, 2736, 86, 86, 2735, 2742, 86, 2743, 2744,
+ 2745, 2746, 2737, 2751, 86, 2748, 2753, 2747, 3592, 2740,
+ 86, 2749, 86, 2738, 2739, 86, 2750, 2752, 86, 3592,
+ 3592, 86, 2757, 86, 86, 86, 86, 2745, 2746, 86,
+ 2751, 86, 2748, 2753, 2747, 2755, 2756, 86, 2749, 2754,
+ 2758, 86, 86, 2750, 2752, 2759, 86, 86, 86, 86,
+ 2760, 2762, 2761, 2764, 2763, 2765, 3592, 2766, 2768, 3592,
+ 2770, 2767, 2755, 2756, 86, 86, 2754, 2758, 86, 86,
+ 86, 2771, 86, 86, 2772, 2773, 86, 86, 86, 2761,
+
+ 2764, 2763, 2765, 86, 2766, 2768, 2769, 86, 2767, 86,
+ 2774, 2775, 2776, 86, 2777, 86, 2780, 86, 2771, 2778,
+ 2779, 86, 2773, 2781, 86, 86, 2782, 86, 2783, 2786,
+ 2784, 170, 2787, 2769, 86, 2792, 86, 2774, 2775, 2776,
+ 86, 2777, 86, 2780, 86, 86, 2778, 2779, 2788, 86,
+ 2781, 2785, 2789, 2782, 2790, 2783, 2786, 2784, 2791, 2787,
+ 86, 2793, 86, 2794, 2797, 86, 2795, 3592, 2796, 2799,
+ 2798, 2800, 86, 86, 3592, 2788, 86, 86, 2785, 2789,
+ 86, 2790, 3592, 86, 2837, 2791, 86, 2805, 86, 86,
+ 2794, 2797, 86, 2795, 86, 2796, 2799, 2798, 2800, 2801,
+
+ 2802, 2804, 2803, 2806, 2809, 86, 86, 86, 86, 86,
+ 86, 2807, 2808, 86, 2805, 2810, 86, 2811, 2812, 86,
+ 2813, 2814, 2816, 2817, 86, 2819, 2801, 2802, 2804, 2803,
+ 2806, 2809, 2815, 2818, 86, 3592, 86, 86, 2807, 2808,
+ 86, 86, 2810, 86, 2811, 2812, 2820, 86, 2814, 2816,
+ 86, 86, 86, 2821, 2822, 86, 2823, 2824, 2825, 2815,
+ 2818, 2826, 86, 86, 2827, 3592, 2828, 86, 2830, 86,
+ 86, 2831, 2829, 2820, 86, 86, 86, 2835, 2833, 2832,
+ 2821, 2822, 2834, 2823, 2824, 2825, 86, 86, 2826, 2836,
+ 2839, 2827, 86, 2828, 2841, 86, 2842, 2844, 86, 2829,
+
+ 2840, 2838, 86, 86, 86, 2833, 2832, 86, 86, 2834,
+ 86, 2846, 2843, 86, 2848, 2845, 86, 2839, 86, 86,
+ 2847, 2841, 86, 2842, 2844, 2849, 2850, 2840, 2838, 2851,
+ 2852, 2854, 2853, 86, 3592, 3592, 2855, 86, 2846, 2843,
+ 86, 86, 2845, 86, 2856, 86, 86, 2847, 86, 2863,
+ 86, 2857, 2849, 86, 2858, 2860, 2851, 2852, 2854, 2853,
+ 2859, 86, 86, 2855, 2862, 2861, 86, 2864, 86, 2866,
+ 2867, 2856, 2869, 86, 86, 2865, 86, 2868, 2857, 86,
+ 2871, 2858, 2860, 2872, 86, 2873, 86, 2859, 86, 86,
+ 2878, 2862, 2861, 2870, 2864, 86, 86, 2867, 2879, 2869,
+
+ 2874, 86, 2865, 2875, 2868, 86, 86, 2871, 2880, 2876,
+ 2872, 2877, 86, 86, 86, 86, 86, 86, 86, 2881,
+ 2870, 2882, 2883, 2884, 2885, 2879, 86, 2874, 2888, 2889,
+ 2875, 86, 2886, 2890, 2887, 2880, 2876, 2891, 2877, 86,
+ 86, 2892, 86, 2894, 86, 2901, 2881, 86, 2882, 86,
+ 2884, 86, 86, 2893, 86, 2888, 2889, 2895, 86, 2886,
+ 2890, 2887, 2896, 2897, 86, 2898, 2903, 86, 2892, 2899,
+ 86, 86, 86, 2900, 2902, 2904, 86, 86, 86, 2909,
+ 2893, 86, 2905, 86, 2895, 2906, 2907, 86, 2908, 2896,
+ 2897, 86, 2898, 2903, 2917, 2910, 2899, 2912, 86, 86,
+
+ 2900, 2902, 86, 86, 86, 2911, 2909, 86, 2913, 2905,
+ 86, 2914, 2906, 2907, 2915, 2908, 86, 2916, 2918, 2920,
+ 86, 86, 2910, 86, 2912, 2919, 2921, 86, 2922, 86,
+ 2924, 2925, 2911, 86, 2923, 2913, 86, 2926, 2914, 86,
+ 86, 2915, 3592, 2927, 2916, 86, 2920, 86, 86, 2928,
+ 2929, 2930, 2919, 170, 2931, 2922, 86, 2924, 2925, 2932,
+ 2933, 2923, 86, 2934, 2935, 86, 2936, 2938, 2941, 86,
+ 2927, 2937, 2940, 86, 86, 86, 2928, 2929, 2930, 2939,
+ 2942, 86, 2943, 2945, 2944, 86, 86, 2933, 86, 86,
+ 86, 2935, 2948, 2946, 2938, 86, 2949, 3592, 86, 2940,
+
+ 86, 86, 86, 86, 86, 2950, 2939, 2942, 2947, 2943,
+ 2945, 2944, 86, 2952, 86, 2951, 2953, 2954, 3592, 2956,
+ 2946, 2955, 3592, 3592, 86, 2957, 3592, 86, 86, 2958,
+ 86, 2959, 2950, 2964, 86, 2947, 86, 2962, 2968, 86,
+ 86, 2960, 2951, 2953, 2954, 86, 2956, 86, 2955, 2961,
+ 86, 86, 2957, 86, 2963, 86, 2958, 2965, 2959, 86,
+ 2964, 2966, 2967, 86, 2962, 2969, 2970, 2973, 2960, 2972,
+ 86, 86, 86, 2971, 86, 86, 2961, 86, 2974, 2975,
+ 86, 2963, 2979, 86, 2965, 2976, 86, 86, 2966, 2967,
+ 2977, 2980, 2969, 2970, 86, 2978, 2972, 2982, 86, 86,
+
+ 2971, 2981, 86, 86, 86, 2974, 2975, 86, 2983, 86,
+ 2984, 2986, 2976, 86, 2985, 2987, 86, 2977, 2980, 2989,
+ 3592, 2988, 2978, 2990, 2982, 2991, 2995, 2992, 2981, 86,
+ 86, 86, 2996, 2993, 2997, 2983, 2998, 86, 2994, 3000,
+ 86, 2985, 3002, 86, 86, 3001, 3004, 86, 2988, 2999,
+ 86, 86, 2991, 2995, 2992, 86, 86, 86, 86, 86,
+ 2993, 2997, 86, 2998, 86, 2994, 86, 3005, 86, 3002,
+ 3003, 3006, 3001, 86, 3008, 3009, 2999, 3007, 3010, 86,
+ 3011, 3012, 3017, 3014, 3013, 3592, 3018, 86, 3015, 86,
+ 3019, 3016, 3020, 86, 86, 3021, 86, 3003, 86, 86,
+
+ 86, 3008, 3009, 86, 3007, 86, 86, 3011, 3012, 3017,
+ 3022, 3013, 86, 3018, 3023, 86, 3024, 86, 3016, 86,
+ 3025, 3028, 86, 3026, 3027, 3592, 3029, 3030, 86, 3032,
+ 86, 86, 86, 3031, 86, 3033, 3036, 3022, 3037, 3040,
+ 3038, 3023, 3039, 3024, 3035, 86, 3034, 86, 86, 86,
+ 3026, 3027, 86, 3029, 86, 86, 86, 86, 3046, 3041,
+ 3031, 86, 3033, 86, 3042, 86, 3040, 3038, 86, 3047,
+ 3044, 3035, 3043, 3034, 86, 3045, 86, 86, 3048, 86,
+ 86, 3049, 86, 3050, 3051, 3046, 3592, 3059, 3052, 3053,
+ 3054, 86, 86, 3056, 3055, 3592, 3592, 3044, 3592, 3043,
+
+ 3063, 86, 3045, 3060, 86, 3048, 86, 86, 3049, 86,
+ 86, 3051, 86, 86, 3059, 3052, 3053, 3054, 86, 86,
+ 3056, 3055, 3057, 3058, 3061, 3062, 3064, 86, 3068, 3067,
+ 3060, 86, 86, 3065, 3075, 3069, 86, 3076, 86, 86,
+ 3070, 3066, 86, 3072, 3077, 3071, 3592, 3078, 3073, 3057,
+ 3058, 3061, 3062, 3064, 86, 3068, 3067, 86, 3074, 3082,
+ 3065, 86, 3069, 86, 3076, 3079, 86, 3080, 3066, 3081,
+ 86, 3077, 86, 86, 3078, 86, 3083, 3084, 86, 3086,
+ 86, 86, 3085, 86, 3089, 3074, 3082, 3092, 3088, 3087,
+ 3093, 86, 3079, 86, 3080, 86, 3081, 86, 3090, 3094,
+
+ 3091, 86, 86, 3083, 3084, 86, 3086, 86, 3095, 3085,
+ 86, 3089, 3096, 3097, 86, 3088, 3087, 86, 3098, 3099,
+ 3100, 86, 3101, 86, 3592, 3090, 3094, 3091, 3106, 86,
+ 3102, 3107, 3103, 3104, 3105, 3095, 3108, 86, 86, 3096,
+ 86, 3109, 86, 3592, 3110, 3098, 86, 3100, 86, 86,
+ 86, 86, 86, 3112, 3113, 3106, 3116, 3102, 86, 3103,
+ 3104, 3105, 86, 86, 86, 3111, 86, 3114, 3109, 86,
+ 86, 3110, 3115, 86, 3118, 3117, 3119, 3120, 3121, 3122,
+ 3112, 3113, 3123, 3116, 3124, 3125, 86, 3126, 3133, 3127,
+ 3592, 86, 3111, 86, 86, 86, 3130, 86, 86, 86,
+
+ 3128, 3118, 3117, 3119, 86, 3121, 86, 86, 3129, 3123,
+ 86, 3124, 3125, 3131, 86, 86, 3127, 3132, 86, 3134,
+ 86, 3136, 3135, 3130, 86, 3137, 3142, 3128, 86, 3138,
+ 3145, 86, 3139, 3146, 86, 3129, 3140, 3141, 3147, 86,
+ 3131, 3592, 3143, 86, 3132, 3144, 3134, 86, 3136, 3135,
+ 86, 86, 3137, 3142, 3150, 86, 3138, 86, 86, 3139,
+ 86, 3148, 86, 3140, 3141, 86, 3149, 3151, 86, 3143,
+ 3152, 3592, 3144, 86, 3153, 3592, 3154, 3155, 3156, 86,
+ 3157, 3150, 3160, 3161, 3158, 3163, 3159, 86, 3148, 86,
+ 86, 86, 3165, 3149, 3151, 86, 86, 3162, 86, 86,
+
+ 3164, 3153, 86, 3154, 86, 3156, 3166, 3157, 86, 3160,
+ 3167, 3158, 86, 3159, 86, 86, 3172, 3168, 3169, 3165,
+ 3170, 3173, 3171, 86, 3162, 86, 3174, 3164, 86, 86,
+ 86, 3176, 86, 3166, 3592, 86, 86, 3167, 3175, 3177,
+ 86, 3180, 3181, 86, 3168, 3169, 3183, 3170, 3173, 3171,
+ 3178, 3179, 86, 3174, 86, 3182, 3184, 86, 3176, 86,
+ 86, 86, 86, 3187, 86, 3175, 3177, 3185, 3180, 3181,
+ 3186, 86, 86, 3183, 86, 3189, 86, 3178, 3179, 3188,
+ 3190, 3191, 3182, 3184, 3192, 3193, 3194, 86, 3195, 3196,
+ 86, 86, 3197, 3198, 3185, 3199, 3200, 3186, 3201, 86,
+
+ 86, 3203, 86, 3202, 86, 86, 3188, 86, 3191, 3206,
+ 3205, 86, 3193, 86, 86, 3195, 3196, 86, 86, 3197,
+ 3198, 86, 3199, 86, 3204, 3201, 3207, 3209, 86, 3210,
+ 3202, 3211, 3208, 86, 3212, 86, 3206, 3205, 86, 86,
+ 86, 3213, 3214, 3215, 3216, 3217, 3219, 86, 3218, 3224,
+ 3592, 3204, 3226, 3207, 86, 86, 3222, 86, 3211, 3208,
+ 3221, 86, 3592, 86, 3228, 3220, 86, 86, 3213, 3214,
+ 86, 86, 3217, 86, 86, 3218, 86, 3223, 3225, 3226,
+ 3232, 86, 3227, 3222, 86, 3229, 86, 3221, 3233, 86,
+ 3230, 86, 3220, 3234, 3231, 3235, 3236, 86, 3237, 3238,
+
+ 86, 3239, 3240, 86, 3223, 3225, 86, 3232, 3241, 3227,
+ 86, 3242, 3229, 3244, 86, 3233, 3247, 3230, 86, 3592,
+ 3234, 3231, 86, 86, 86, 3237, 3243, 86, 3239, 3240,
+ 3249, 86, 3248, 86, 86, 86, 3245, 3246, 3242, 86,
+ 3250, 3251, 86, 86, 3252, 86, 86, 86, 3253, 3254,
+ 3256, 3255, 3257, 3243, 3258, 86, 86, 3249, 3259, 3248,
+ 86, 3260, 3261, 3245, 3246, 3262, 3263, 3250, 3251, 86,
+ 3264, 86, 3265, 3266, 86, 3253, 3254, 86, 3255, 86,
+ 86, 86, 3267, 86, 86, 3259, 3268, 86, 3260, 3261,
+ 3269, 3592, 86, 86, 3270, 3271, 3272, 86, 3274, 86,
+
+ 3266, 3278, 3273, 86, 3279, 3592, 86, 3276, 3275, 3267,
+ 86, 3277, 86, 86, 3285, 86, 86, 3269, 86, 3280,
+ 86, 86, 3271, 86, 3281, 3274, 3282, 86, 3278, 3273,
+ 3283, 86, 86, 3286, 3276, 3275, 3284, 86, 3277, 86,
+ 3287, 86, 3288, 3289, 3290, 3293, 3280, 3297, 3294, 86,
+ 86, 3281, 86, 3282, 86, 3291, 3292, 3283, 3295, 3300,
+ 86, 3298, 86, 3284, 3592, 3296, 3302, 3287, 3299, 3301,
+ 3289, 3290, 86, 3592, 86, 86, 86, 86, 86, 86,
+ 86, 3303, 3291, 3292, 3306, 3295, 86, 86, 3298, 86,
+ 3304, 86, 3296, 3302, 3305, 3299, 3301, 86, 3307, 3308,
+
+ 3309, 86, 3310, 86, 3314, 3311, 86, 3312, 3303, 3313,
+ 86, 3306, 86, 86, 86, 86, 3317, 3304, 86, 86,
+ 86, 3305, 86, 3315, 3316, 3307, 3308, 3309, 3320, 3310,
+ 3318, 3314, 3311, 86, 3312, 86, 3313, 3319, 3321, 3322,
+ 3323, 3324, 3325, 3317, 3326, 3327, 3329, 86, 3332, 3592,
+ 3315, 3316, 86, 3328, 3331, 3320, 86, 3318, 3334, 86,
+ 3330, 86, 86, 3339, 3319, 86, 3322, 3323, 3324, 3325,
+ 86, 86, 86, 86, 3333, 86, 86, 3335, 3336, 3372,
+ 3328, 3331, 86, 3337, 3338, 86, 86, 3330, 3340, 3341,
+ 86, 3342, 3344, 3343, 3345, 3346, 3347, 3592, 3348, 3592,
+
+ 3349, 3333, 3352, 3592, 86, 3592, 86, 86, 3351, 86,
+ 86, 86, 86, 3592, 86, 86, 3355, 86, 3342, 3344,
+ 3343, 86, 3346, 3347, 86, 3348, 3350, 3349, 3356, 86,
+ 86, 3353, 3354, 86, 86, 3351, 86, 3358, 86, 3357,
+ 3360, 3359, 3361, 3355, 3363, 3362, 3364, 3365, 3366, 86,
+ 86, 86, 3592, 3350, 3367, 3356, 3370, 86, 3353, 3354,
+ 86, 3371, 86, 86, 3358, 3376, 3357, 3360, 3359, 86,
+ 86, 3363, 3362, 86, 86, 3366, 86, 3368, 3374, 3375,
+ 3369, 3367, 3373, 3378, 86, 86, 3377, 86, 86, 3379,
+ 86, 86, 3376, 3380, 3381, 86, 3382, 3383, 3592, 3384,
+
+ 3385, 3386, 3387, 3592, 3368, 3374, 3375, 3369, 86, 3373,
+ 3378, 86, 3388, 3377, 3390, 86, 86, 3391, 3392, 3393,
+ 3394, 3381, 86, 86, 86, 86, 3384, 3385, 86, 86,
+ 86, 3389, 3395, 3396, 3397, 3398, 86, 3399, 3400, 3388,
+ 86, 86, 3401, 3404, 86, 86, 86, 86, 3402, 3405,
+ 86, 3407, 3403, 3421, 3411, 86, 3408, 3412, 3389, 86,
+ 86, 86, 3398, 3406, 3399, 86, 86, 86, 86, 86,
+ 3404, 86, 3409, 3410, 3414, 3402, 86, 3413, 86, 3403,
+ 86, 3411, 3415, 3408, 86, 86, 86, 3416, 86, 86,
+ 3406, 86, 3417, 86, 3418, 3592, 3419, 3422, 3420, 3409,
+
+ 3410, 86, 3426, 3425, 3413, 86, 3423, 3424, 3428, 3415,
+ 86, 86, 86, 86, 3416, 86, 3427, 3429, 3480, 3417,
+ 86, 3418, 86, 3419, 3422, 3420, 86, 3430, 86, 3426,
+ 3425, 3431, 86, 3423, 3424, 3428, 3592, 86, 3432, 86,
+ 86, 3433, 3434, 3427, 3429, 86, 3435, 3436, 3437, 3438,
+ 86, 3439, 3440, 3592, 3430, 86, 3592, 3441, 3431, 3443,
+ 86, 3592, 3447, 86, 3442, 3432, 86, 3445, 3433, 3434,
+ 86, 86, 86, 3435, 86, 86, 86, 3444, 3439, 3440,
+ 86, 86, 3449, 86, 3441, 3446, 3443, 86, 3448, 3447,
+ 3451, 3442, 3450, 3452, 3445, 3454, 3456, 86, 86, 3453,
+
+ 86, 3455, 86, 3457, 3444, 3458, 86, 86, 86, 3449,
+ 86, 3460, 3446, 86, 86, 3448, 3461, 3451, 86, 3450,
+ 3452, 3462, 3454, 3456, 86, 3459, 3453, 86, 3455, 3463,
+ 3457, 86, 3458, 86, 3465, 3464, 86, 3466, 3460, 3467,
+ 3468, 3469, 3471, 3461, 86, 3470, 3472, 86, 86, 3592,
+ 3475, 3473, 3459, 3474, 3476, 3592, 3463, 86, 86, 86,
+ 86, 3465, 3464, 3477, 3466, 3484, 86, 3468, 86, 86,
+ 3481, 86, 3470, 86, 86, 3479, 86, 3475, 3473, 3482,
+ 3474, 3476, 3478, 86, 86, 86, 3483, 86, 3485, 3486,
+ 3477, 3487, 86, 3488, 86, 86, 3490, 3481, 3489, 3491,
+
+ 3492, 3494, 3479, 3495, 86, 3493, 3482, 3498, 86, 3478,
+ 86, 3497, 86, 3483, 86, 3485, 86, 3496, 86, 86,
+ 86, 3499, 3500, 3490, 3503, 3489, 86, 3492, 86, 86,
+ 3495, 3501, 3493, 3502, 3504, 86, 86, 3505, 3497, 86,
+ 3507, 86, 3506, 3508, 3496, 86, 86, 86, 86, 3500,
+ 3509, 3503, 3510, 86, 3511, 3512, 86, 3513, 3501, 86,
+ 3502, 86, 3518, 86, 86, 3516, 3514, 3507, 3517, 3506,
+ 3508, 86, 3522, 86, 3523, 3515, 86, 3509, 3519, 3510,
+ 86, 3511, 3512, 86, 3513, 86, 3521, 86, 3520, 86,
+ 86, 3524, 3516, 3514, 86, 3517, 86, 86, 3525, 86,
+
+ 3526, 3523, 3515, 3529, 3527, 3519, 3528, 3530, 3531, 3533,
+ 3532, 86, 3592, 3521, 3536, 3520, 3592, 3534, 3592, 3539,
+ 3592, 3535, 86, 86, 86, 3525, 86, 3526, 86, 86,
+ 3529, 3527, 86, 3528, 86, 86, 86, 3532, 3537, 86,
+ 86, 3536, 3538, 3541, 3534, 3540, 86, 3542, 3535, 3543,
+ 86, 86, 3547, 86, 3549, 3548, 3546, 86, 3550, 3544,
+ 86, 3592, 3545, 86, 3592, 3537, 3551, 3592, 86, 3538,
+ 3541, 3554, 3540, 86, 3542, 3556, 86, 86, 86, 3547,
+ 3552, 3549, 3548, 3546, 86, 3550, 3544, 3555, 86, 3545,
+ 3553, 86, 3557, 3551, 86, 86, 3559, 86, 3554, 3558,
+
+ 3560, 86, 3556, 3561, 3563, 3564, 3562, 3552, 86, 3592,
+ 3592, 3570, 3568, 3592, 3555, 3565, 86, 3553, 86, 3557,
+ 3566, 86, 3592, 3559, 3572, 3592, 3558, 3560, 86, 86,
+ 86, 3563, 86, 3562, 86, 86, 3567, 3569, 86, 3568,
+ 86, 3571, 3565, 3573, 86, 86, 86, 3566, 3574, 86,
+ 3575, 3572, 3576, 3577, 3578, 3581, 86, 3580, 86, 3579,
+ 3583, 3584, 86, 3567, 3569, 86, 3588, 86, 3571, 3582,
+ 3573, 3585, 3586, 3587, 86, 3574, 3590, 3575, 86, 3576,
+ 86, 3578, 86, 86, 3580, 3591, 3579, 86, 86, 86,
+ 3592, 86, 3592, 3588, 86, 86, 3582, 3589, 3585, 3586,
+
+ 3587, 3592, 3592, 86, 3592, 86, 3592, 3592, 3592, 3592,
+ 3592, 3592, 86, 3592, 3592, 3592, 3592, 3592, 3592, 3592,
+ 3592, 3592, 3592, 3592, 3589, 47, 47, 47, 47, 47,
+ 47, 47, 52, 52, 52, 52, 52, 52, 52, 57,
+ 57, 57, 57, 57, 57, 57, 63, 63, 63, 63,
+ 63, 63, 63, 68, 68, 68, 68, 68, 68, 68,
+ 74, 74, 74, 74, 74, 74, 74, 80, 80, 80,
+ 80, 80, 80, 80, 89, 89, 3592, 89, 89, 89,
+ 89, 160, 160, 3592, 3592, 3592, 160, 160, 162, 162,
+ 3592, 3592, 162, 3592, 162, 164, 3592, 3592, 3592, 3592,
+
+ 3592, 164, 167, 167, 3592, 3592, 3592, 167, 167, 169,
+ 3592, 3592, 3592, 3592, 3592, 169, 171, 171, 3592, 171,
+ 171, 171, 171, 174, 3592, 3592, 3592, 3592, 3592, 174,
+ 177, 177, 3592, 3592, 3592, 177, 177, 90, 90, 3592,
+ 90, 90, 90, 90, 17, 3592, 3592, 3592, 3592, 3592,
+ 3592, 3592, 3592, 3592, 3592, 3592, 3592, 3592, 3592, 3592,
+ 3592, 3592, 3592, 3592, 3592, 3592, 3592, 3592, 3592, 3592,
+ 3592, 3592, 3592, 3592, 3592, 3592, 3592, 3592, 3592, 3592,
+ 3592, 3592, 3592, 3592, 3592, 3592, 3592, 3592, 3592, 3592,
+ 3592, 3592, 3592, 3592, 3592, 3592, 3592, 3592, 3592, 3592,
+
+ 3592, 3592, 3592, 3592, 3592, 3592, 3592, 3592, 3592, 3592,
+ 3592
} ;
-static const flex_int16_t yy_chk[10245] =
+static const flex_int16_t yy_chk[10312] =
{ 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
@@ -2739,15 +2760,15 @@ static const flex_int16_t yy_chk[10245] =
7, 7, 7, 33, 7, 8, 8, 8, 8, 32,
8, 9, 9, 9, 10, 10, 10, 19, 51, 51,
- 1126, 19, 3565, 3, 32, 33, 4, 67, 67, 5,
- 33, 6, 2894, 13, 13, 13, 13, 7, 13, 14,
+ 1136, 19, 3600, 3, 32, 33, 4, 67, 67, 5,
+ 33, 6, 2921, 13, 13, 13, 13, 7, 13, 14,
14, 14, 14, 8, 14, 15, 15, 15, 9, 25,
- 1126, 10, 11, 11, 11, 11, 11, 11, 12, 12,
+ 1136, 10, 11, 11, 11, 11, 11, 11, 12, 12,
12, 12, 12, 12, 16, 16, 16, 34, 28, 84,
- 84, 13, 11, 45, 293, 25, 25, 14, 12, 34,
- 39, 23, 15, 23, 23, 45, 23, 1138, 28, 177,
+ 84, 13, 11, 45, 294, 25, 25, 14, 12, 34,
+ 39, 23, 15, 23, 23, 45, 23, 1148, 28, 177,
11, 28, 23, 39, 34, 28, 12, 176, 87, 11,
- 45, 16, 87, 293, 37, 12, 30, 39, 29, 56,
+ 45, 16, 87, 294, 37, 12, 30, 39, 29, 56,
37, 174, 56, 72, 30, 28, 26, 169, 100, 23,
24, 24, 29, 26, 24, 30, 72, 26, 99, 24,
@@ -2765,1096 +2786,1104 @@ static const flex_int16_t yy_chk[10245] =
42, 35, 75, 93, 36, 36, 42, 35, 92, 36,
74, 35, 44, 44, 43, 42, 42, 44, 42, 168,
168, 44, 68, 36, 43, 36, 38, 42, 43, 43,
- 38, 95, 92, 42, 38, 92, 219, 43, 63, 111,
+ 38, 95, 92, 42, 38, 92, 220, 43, 63, 111,
38, 43, 73, 38, 73, 73, 95, 73, 111, 97,
38, 43, 38, 38, 104, 43, 43, 38, 95, 104,
- 79, 38, 79, 79, 58, 79, 111, 38, 219, 86,
- 38, 86, 86, 97, 86, 222, 97, 38, 40, 971,
+ 79, 38, 79, 79, 58, 79, 111, 38, 220, 86,
+ 38, 86, 86, 97, 86, 223, 97, 38, 40, 980,
86, 104, 40, 89, 96, 89, 89, 112, 89, 98,
57, 96, 40, 40, 89, 40, 112, 103, 103, 106,
- 105, 52, 98, 47, 40, 40, 103, 222, 105, 40,
- 971, 96, 18, 98, 112, 137, 98, 106, 17, 40,
+ 105, 52, 98, 47, 40, 40, 103, 223, 105, 40,
+ 980, 96, 151, 98, 112, 225, 98, 106, 151, 40,
40, 89, 40, 41, 103, 103, 41, 105, 102, 98,
- 107, 106, 109, 41, 102, 108, 102, 41, 41, 109,
- 224, 137, 137, 107, 106, 41, 113, 0, 108, 102,
- 41, 114, 0, 41, 115, 102, 118, 107, 114, 109,
- 41, 102, 108, 102, 41, 41, 110, 110, 117, 113,
- 116, 117, 224, 113, 110, 126, 115, 0, 114, 119,
- 118, 115, 110, 116, 117, 117, 0, 119, 118, 126,
-
- 123, 0, 117, 110, 110, 117, 120, 116, 117, 124,
- 121, 110, 126, 123, 121, 122, 119, 118, 125, 127,
- 122, 117, 117, 122, 130, 128, 120, 123, 120, 146,
- 121, 130, 124, 120, 121, 129, 124, 121, 125, 127,
- 131, 121, 122, 128, 146, 125, 127, 122, 133, 129,
- 132, 130, 128, 120, 135, 134, 146, 121, 135, 132,
- 0, 136, 129, 131, 134, 138, 140, 131, 136, 141,
- 141, 133, 138, 0, 139, 133, 135, 132, 140, 142,
- 143, 135, 134, 139, 144, 135, 0, 142, 136, 139,
- 0, 143, 138, 140, 148, 143, 141, 139, 144, 0,
-
- 147, 139, 149, 151, 143, 148, 142, 143, 152, 151,
- 139, 144, 155, 149, 148, 150, 139, 147, 143, 152,
- 147, 148, 143, 150, 153, 154, 147, 147, 156, 149,
- 151, 158, 148, 153, 155, 152, 182, 157, 173, 155,
- 154, 159, 150, 156, 147, 153, 157, 147, 182, 153,
- 0, 153, 154, 158, 159, 156, 178, 178, 158, 0,
- 153, 0, 173, 182, 157, 173, 0, 179, 159, 0,
- 0, 165, 153, 165, 165, 170, 165, 170, 170, 171,
- 170, 171, 171, 175, 171, 175, 175, 180, 175, 179,
- 0, 181, 0, 184, 179, 183, 185, 186, 187, 188,
-
- 181, 180, 183, 0, 189, 186, 227, 0, 0, 184,
- 187, 189, 190, 193, 183, 185, 194, 171, 181, 180,
- 184, 188, 183, 185, 186, 187, 188, 191, 180, 183,
- 190, 189, 229, 191, 192, 193, 192, 196, 227, 190,
- 193, 196, 194, 194, 198, 200, 0, 199, 203, 0,
- 204, 201, 205, 200, 202, 210, 206, 204, 196, 191,
- 191, 192, 199, 203, 229, 196, 207, 210, 196, 0,
- 198, 198, 200, 201, 199, 203, 202, 204, 201, 206,
- 205, 202, 210, 206, 205, 196, 197, 208, 207, 213,
- 212, 197, 209, 207, 217, 256, 197, 211, 208, 212,
-
- 211, 217, 197, 197, 214, 209, 216, 205, 0, 197,
- 0, 213, 211, 197, 208, 220, 213, 212, 197, 209,
- 256, 217, 256, 197, 211, 218, 214, 211, 216, 197,
- 197, 214, 215, 216, 221, 215, 218, 215, 226, 225,
- 223, 220, 220, 231, 226, 221, 228, 223, 0, 215,
- 233, 215, 218, 225, 230, 0, 234, 0, 215, 215,
- 0, 0, 215, 235, 215, 226, 221, 223, 228, 232,
- 234, 225, 221, 228, 232, 231, 215, 230, 215, 236,
- 225, 230, 233, 234, 235, 239, 236, 237, 238, 240,
- 235, 241, 242, 243, 232, 0, 232, 238, 244, 247,
-
- 245, 232, 238, 240, 239, 243, 236, 245, 237, 244,
- 242, 249, 239, 241, 237, 238, 240, 246, 241, 242,
- 243, 247, 246, 248, 238, 244, 247, 245, 250, 251,
- 252, 252, 248, 250, 249, 253, 254, 255, 249, 252,
- 259, 260, 258, 254, 257, 262, 0, 264, 261, 246,
- 248, 263, 257, 265, 266, 250, 261, 252, 252, 255,
- 264, 251, 258, 254, 255, 267, 263, 253, 268, 258,
- 278, 257, 259, 260, 264, 261, 269, 262, 263, 265,
- 265, 266, 270, 271, 272, 274, 270, 273, 267, 275,
- 277, 276, 279, 269, 277, 273, 275, 267, 282, 272,
-
- 268, 269, 278, 269, 274, 271, 280, 281, 284, 270,
- 271, 272, 274, 276, 273, 267, 275, 277, 276, 283,
- 269, 284, 287, 285, 279, 286, 289, 290, 280, 281,
- 282, 283, 285, 280, 281, 284, 291, 288, 286, 288,
- 292, 287, 295, 298, 294, 297, 283, 296, 0, 287,
- 285, 290, 286, 294, 290, 298, 297, 299, 289, 300,
- 301, 291, 302, 291, 288, 303, 292, 292, 295, 295,
- 298, 294, 297, 296, 296, 304, 305, 307, 301, 306,
- 302, 299, 300, 310, 299, 309, 300, 301, 304, 302,
- 308, 311, 312, 313, 314, 315, 0, 303, 0, 317,
-
- 313, 315, 304, 314, 306, 310, 306, 308, 305, 307,
- 310, 309, 309, 308, 316, 318, 312, 308, 319, 0,
- 313, 314, 315, 311, 312, 317, 317, 319, 316, 320,
- 321, 322, 0, 323, 308, 324, 326, 325, 321, 318,
- 322, 316, 318, 312, 324, 319, 327, 328, 331, 0,
- 329, 326, 320, 0, 325, 358, 320, 321, 322, 323,
- 323, 325, 324, 326, 325, 329, 331, 332, 341, 336,
- 0, 328, 0, 0, 328, 331, 332, 329, 327, 333,
- 335, 325, 330, 336, 334, 330, 334, 358, 337, 0,
- 330, 330, 330, 330, 332, 341, 336, 338, 338, 334,
-
- 330, 333, 334, 337, 335, 339, 333, 335, 334, 330,
- 339, 334, 330, 334, 340, 337, 343, 330, 330, 330,
- 330, 346, 338, 344, 338, 338, 334, 0, 343, 334,
- 342, 347, 348, 342, 349, 344, 350, 339, 340, 346,
- 342, 340, 351, 343, 345, 345, 0, 0, 346, 347,
- 344, 353, 352, 357, 345, 354, 349, 342, 347, 348,
- 342, 349, 350, 350, 352, 357, 355, 362, 351, 351,
- 354, 345, 345, 353, 355, 363, 356, 364, 353, 352,
- 357, 361, 354, 356, 359, 0, 359, 0, 361, 362,
- 365, 369, 367, 355, 362, 359, 365, 0, 370, 364,
-
- 371, 0, 359, 356, 364, 367, 0, 363, 361, 369,
- 359, 359, 365, 359, 366, 368, 366, 365, 369, 367,
- 372, 0, 359, 365, 370, 370, 373, 376, 368, 359,
- 0, 368, 371, 368, 376, 0, 0, 378, 366, 368,
- 379, 366, 368, 366, 377, 0, 0, 372, 373, 378,
- 382, 0, 379, 373, 376, 368, 0, 380, 368, 383,
- 368, 374, 377, 374, 378, 386, 382, 379, 377, 374,
- 380, 377, 383, 374, 382, 387, 389, 382, 374, 385,
- 387, 374, 389, 386, 380, 391, 383, 374, 374, 377,
- 374, 385, 386, 382, 388, 392, 374, 391, 394, 0,
-
- 374, 388, 405, 389, 0, 374, 385, 387, 374, 375,
- 390, 375, 391, 392, 0, 388, 396, 393, 390, 395,
- 395, 388, 392, 396, 375, 393, 397, 375, 388, 375,
- 394, 375, 398, 0, 405, 375, 375, 390, 375, 397,
- 400, 398, 0, 396, 393, 0, 395, 400, 401, 0,
- 402, 375, 0, 397, 375, 401, 375, 0, 375, 384,
- 384, 399, 402, 403, 398, 406, 404, 400, 398, 384,
- 384, 384, 384, 384, 407, 401, 384, 402, 404, 399,
- 408, 407, 410, 399, 384, 403, 384, 384, 399, 409,
- 403, 406, 406, 404, 412, 408, 384, 384, 384, 384,
-
- 384, 407, 409, 384, 413, 412, 399, 408, 411, 416,
- 411, 414, 414, 0, 410, 415, 409, 417, 419, 418,
- 416, 412, 415, 420, 420, 0, 413, 423, 417, 421,
- 0, 413, 418, 431, 422, 411, 416, 434, 436, 424,
- 414, 420, 415, 419, 417, 419, 418, 424, 420, 422,
- 420, 420, 421, 423, 423, 425, 421, 422, 426, 428,
- 434, 422, 427, 0, 434, 431, 424, 425, 420, 426,
- 436, 427, 428, 432, 433, 435, 422, 437, 429, 429,
- 439, 0, 425, 437, 0, 426, 428, 438, 440, 427,
- 429, 432, 429, 435, 441, 444, 433, 429, 443, 445,
-
- 432, 433, 435, 439, 437, 429, 429, 439, 438, 444,
- 0, 442, 440, 446, 438, 440, 441, 429, 442, 429,
- 430, 441, 444, 447, 443, 443, 445, 448, 430, 430,
- 449, 451, 430, 430, 450, 446, 430, 447, 442, 452,
- 446, 0, 430, 451, 457, 452, 453, 430, 454, 485,
- 447, 457, 456, 448, 448, 430, 430, 450, 451, 430,
- 430, 450, 449, 430, 455, 458, 452, 456, 453, 459,
- 454, 457, 455, 453, 458, 454, 460, 466, 462, 456,
- 461, 485, 463, 466, 459, 464, 465, 0, 467, 468,
- 455, 455, 458, 470, 468, 0, 459, 463, 0, 455,
-
- 460, 462, 461, 460, 466, 462, 473, 461, 465, 463,
- 475, 464, 464, 465, 467, 467, 468, 472, 474, 470,
- 470, 476, 487, 472, 474, 473, 479, 476, 475, 477,
- 481, 478, 481, 473, 482, 483, 484, 475, 478, 481,
- 495, 479, 483, 482, 472, 474, 486, 488, 476, 484,
- 0, 477, 489, 479, 487, 492, 477, 481, 478, 481,
- 491, 482, 483, 484, 486, 489, 493, 490, 492, 488,
- 490, 494, 495, 486, 488, 497, 496, 498, 493, 489,
- 0, 0, 492, 496, 491, 500, 490, 491, 499, 494,
- 501, 503, 0, 493, 490, 501, 505, 490, 494, 497,
-
- 498, 499, 497, 496, 502, 507, 504, 500, 505, 498,
- 502, 508, 500, 506, 503, 499, 507, 501, 503, 508,
- 509, 0, 512, 505, 513, 514, 0, 498, 504, 512,
- 513, 502, 507, 504, 509, 506, 0, 514, 508, 0,
- 506, 515, 516, 517, 0, 518, 549, 509, 510, 512,
- 516, 513, 514, 510, 519, 510, 518, 0, 524, 521,
- 0, 510, 522, 510, 515, 517, 510, 510, 515, 516,
- 517, 521, 518, 510, 510, 510, 524, 519, 549, 520,
- 510, 519, 510, 520, 522, 524, 521, 526, 510, 522,
- 510, 527, 523, 510, 510, 523, 528, 525, 530, 526,
-
- 510, 520, 527, 523, 529, 530, 520, 525, 529, 531,
- 520, 532, 534, 532, 526, 533, 536, 535, 527, 523,
- 528, 537, 523, 528, 534, 530, 0, 540, 536, 525,
- 0, 529, 535, 562, 525, 531, 531, 538, 532, 534,
- 541, 533, 533, 536, 535, 538, 539, 537, 537, 540,
- 543, 539, 542, 544, 540, 547, 550, 546, 541, 0,
- 542, 0, 543, 548, 538, 562, 0, 541, 552, 551,
- 556, 550, 553, 539, 544, 546, 552, 543, 547, 542,
- 544, 551, 547, 550, 546, 553, 548, 557, 554, 555,
- 548, 559, 558, 556, 559, 552, 551, 556, 555, 553,
-
- 554, 557, 560, 561, 564, 563, 569, 565, 0, 0,
- 567, 566, 568, 577, 557, 554, 555, 558, 559, 558,
- 563, 560, 565, 567, 568, 570, 0, 575, 569, 560,
- 561, 580, 563, 569, 565, 566, 564, 567, 566, 568,
- 571, 573, 572, 574, 576, 577, 573, 571, 578, 570,
- 571, 579, 570, 572, 575, 581, 582, 574, 571, 585,
- 581, 583, 582, 580, 586, 584, 587, 571, 589, 572,
- 574, 576, 586, 573, 571, 578, 583, 571, 579, 588,
- 590, 585, 592, 582, 590, 587, 585, 581, 583, 584,
- 589, 586, 584, 587, 591, 589, 593, 594, 597, 595,
-
- 598, 606, 591, 588, 594, 592, 588, 590, 596, 592,
- 599, 600, 601, 598, 0, 0, 0, 596, 601, 602,
- 597, 591, 595, 600, 594, 597, 595, 598, 593, 607,
- 0, 604, 603, 606, 608, 596, 599, 599, 600, 601,
- 603, 602, 604, 605, 609, 610, 602, 608, 611, 609,
- 605, 607, 609, 609, 610, 612, 607, 617, 604, 603,
- 0, 608, 613, 614, 612, 615, 619, 0, 609, 617,
- 605, 609, 610, 613, 611, 611, 609, 620, 616, 609,
- 609, 0, 612, 621, 617, 614, 622, 615, 0, 613,
- 614, 616, 615, 623, 624, 620, 628, 625, 619, 631,
-
- 626, 0, 632, 627, 620, 616, 631, 621, 622, 622,
- 621, 626, 627, 622, 629, 623, 628, 630, 624, 625,
- 623, 624, 633, 628, 625, 634, 631, 626, 629, 632,
- 627, 635, 636, 634, 639, 622, 637, 635, 638, 630,
- 633, 629, 0, 636, 630, 641, 640, 642, 642, 633,
- 643, 0, 634, 638, 637, 645, 644, 646, 635, 636,
- 650, 652, 647, 637, 645, 638, 639, 640, 648, 641,
- 646, 649, 641, 640, 643, 647, 642, 643, 644, 649,
- 651, 653, 645, 644, 646, 654, 656, 654, 655, 647,
- 648, 656, 650, 652, 0, 648, 661, 657, 649, 658,
-
- 660, 0, 651, 663, 661, 653, 659, 651, 653, 662,
- 655, 657, 654, 658, 665, 655, 0, 666, 656, 667,
- 659, 659, 664, 661, 657, 663, 658, 662, 659, 664,
- 663, 669, 660, 659, 673, 668, 662, 666, 670, 667,
- 665, 665, 671, 674, 666, 674, 667, 659, 659, 664,
- 668, 672, 671, 670, 0, 675, 672, 683, 676, 668,
- 673, 673, 668, 669, 671, 670, 676, 677, 681, 671,
- 674, 0, 678, 684, 0, 679, 681, 668, 680, 671,
- 675, 678, 675, 672, 679, 676, 682, 680, 685, 683,
- 0, 686, 677, 682, 677, 681, 684, 687, 688, 678,
-
- 684, 692, 679, 686, 689, 680, 685, 688, 690, 687,
- 691, 695, 689, 682, 693, 685, 694, 690, 686, 696,
- 0, 693, 691, 0, 687, 688, 695, 696, 697, 694,
- 699, 689, 690, 692, 697, 690, 700, 691, 695, 698,
- 701, 693, 704, 694, 690, 700, 696, 698, 705, 702,
- 704, 701, 706, 699, 707, 697, 711, 699, 702, 703,
- 703, 708, 0, 700, 709, 706, 698, 701, 703, 704,
- 705, 0, 711, 713, 710, 705, 702, 709, 714, 706,
- 707, 707, 710, 711, 708, 712, 703, 703, 708, 714,
- 716, 709, 718, 717, 715, 713, 719, 0, 712, 723,
-
- 713, 710, 715, 720, 716, 714, 720, 721, 723, 722,
- 725, 726, 712, 717, 718, 724, 719, 716, 728, 718,
- 717, 715, 727, 719, 726, 729, 723, 0, 725, 721,
- 720, 722, 730, 728, 721, 724, 722, 725, 726, 731,
- 727, 732, 724, 733, 734, 728, 735, 736, 738, 727,
- 0, 740, 745, 0, 730, 737, 733, 729, 735, 730,
- 736, 737, 734, 731, 732, 741, 731, 742, 732, 739,
- 733, 734, 744, 735, 736, 738, 746, 739, 740, 747,
- 744, 752, 737, 746, 745, 742, 748, 741, 749, 750,
- 749, 751, 741, 0, 742, 739, 739, 753, 750, 744,
-
- 752, 748, 747, 746, 739, 754, 747, 755, 752, 755,
- 759, 756, 0, 748, 754, 749, 750, 753, 756, 0,
- 762, 0, 759, 751, 753, 765, 769, 766, 778, 0,
- 762, 0, 754, 0, 755, 0, 0, 759, 756, 757,
- 768, 0, 757, 765, 769, 771, 757, 762, 766, 757,
- 0, 770, 765, 769, 766, 772, 757, 757, 774, 757,
- 778, 768, 770, 773, 757, 782, 757, 768, 771, 757,
- 775, 782, 771, 757, 774, 776, 757, 781, 770, 775,
- 777, 772, 772, 757, 757, 774, 757, 777, 776, 773,
- 773, 780, 782, 784, 783, 0, 0, 775, 780, 781,
-
- 787, 786, 776, 783, 781, 0, 0, 777, 779, 779,
- 785, 779, 0, 785, 779, 788, 784, 786, 780, 779,
- 784, 783, 787, 788, 786, 779, 779, 787, 786, 789,
- 791, 790, 791, 795, 779, 779, 779, 785, 779, 792,
- 793, 779, 788, 790, 786, 793, 779, 794, 797, 796,
- 0, 789, 779, 779, 798, 799, 789, 791, 790, 795,
- 795, 796, 800, 792, 802, 801, 792, 794, 803, 804,
- 797, 805, 793, 810, 794, 797, 796, 799, 806, 805,
- 798, 798, 799, 807, 804, 809, 800, 801, 813, 800,
- 807, 802, 801, 803, 808, 803, 804, 811, 805, 810,
-
- 810, 806, 808, 812, 809, 806, 816, 815, 814, 811,
- 807, 816, 809, 817, 813, 813, 812, 814, 820, 818,
- 819, 808, 815, 820, 811, 823, 822, 825, 824, 826,
- 812, 827, 0, 816, 815, 814, 824, 828, 831, 829,
- 832, 818, 0, 830, 0, 817, 818, 819, 822, 833,
- 820, 826, 835, 822, 836, 824, 826, 823, 841, 825,
- 829, 828, 830, 827, 828, 831, 829, 832, 833, 834,
- 830, 837, 839, 838, 835, 842, 833, 836, 834, 835,
- 840, 836, 838, 839, 843, 841, 844, 845, 840, 846,
- 848, 837, 0, 842, 849, 0, 834, 846, 837, 839,
-
- 838, 850, 842, 843, 850, 851, 852, 840, 848, 854,
- 853, 843, 849, 844, 883, 858, 846, 848, 856, 845,
- 856, 849, 855, 857, 852, 859, 860, 851, 850, 858,
- 859, 854, 851, 852, 853, 855, 854, 853, 861, 860,
- 862, 857, 858, 863, 864, 856, 883, 866, 869, 855,
- 857, 863, 862, 860, 870, 865, 866, 859, 865, 0,
- 867, 872, 864, 871, 861, 861, 873, 862, 867, 871,
- 863, 864, 873, 869, 866, 869, 879, 880, 874, 875,
- 879, 870, 865, 872, 867, 874, 875, 867, 872, 876,
- 871, 877, 878, 873, 876, 867, 884, 885, 877, 881,
-
- 880, 882, 886, 879, 880, 874, 875, 887, 881, 882,
- 878, 889, 885, 886, 884, 887, 876, 888, 877, 878,
- 890, 892, 891, 884, 885, 893, 881, 896, 882, 886,
- 888, 0, 889, 894, 887, 891, 898, 900, 889, 890,
- 903, 894, 900, 892, 888, 896, 895, 890, 892, 891,
- 897, 899, 893, 895, 896, 898, 905, 897, 899, 901,
- 894, 902, 904, 898, 900, 906, 907, 901, 902, 905,
- 909, 910, 903, 895, 908, 0, 917, 897, 899, 907,
- 0, 908, 911, 905, 912, 914, 901, 916, 902, 915,
- 918, 913, 912, 907, 904, 915, 919, 906, 922, 913,
-
- 924, 908, 909, 910, 0, 911, 913, 914, 917, 911,
- 920, 912, 914, 916, 916, 921, 915, 923, 913, 920,
- 919, 926, 918, 919, 923, 925, 913, 924, 928, 921,
- 922, 930, 927, 928, 925, 931, 932, 920, 929, 933,
- 0, 932, 921, 926, 923, 927, 933, 927, 926, 934,
- 929, 938, 925, 947, 930, 940, 927, 0, 930, 927,
- 928, 931, 931, 932, 938, 929, 933, 935, 945, 940,
- 937, 934, 927, 937, 927, 935, 934, 941, 938, 942,
- 947, 946, 940, 955, 941, 942, 0, 948, 0, 948,
- 944, 945, 0, 946, 935, 945, 949, 937, 954, 950,
-
- 952, 955, 970, 954, 941, 951, 942, 943, 946, 943,
- 955, 950, 0, 943, 948, 943, 944, 944, 951, 949,
- 943, 957, 952, 949, 953, 943, 950, 952, 956, 970,
- 954, 943, 951, 957, 943, 959, 943, 953, 958, 960,
- 943, 956, 943, 962, 957, 959, 961, 943, 957, 965,
- 958, 953, 943, 963, 960, 956, 962, 959, 964, 963,
- 957, 966, 959, 968, 967, 958, 960, 965, 961, 969,
- 962, 964, 959, 961, 972, 975, 965, 977, 973, 0,
- 963, 974, 966, 973, 975, 964, 967, 0, 966, 974,
- 978, 967, 977, 981, 979, 968, 980, 0, 0, 983,
-
- 989, 969, 975, 982, 977, 973, 972, 979, 974, 976,
- 0, 980, 978, 984, 976, 0, 976, 978, 983, 981,
- 981, 979, 976, 980, 984, 982, 983, 976, 976, 985,
- 982, 986, 989, 988, 976, 976, 976, 987, 991, 986,
- 984, 976, 985, 976, 988, 987, 990, 996, 992, 976,
- 994, 993, 1000, 991, 976, 976, 985, 992, 986, 994,
- 988, 976, 993, 995, 987, 991, 997, 1001, 990, 998,
- 1003, 1002, 995, 990, 996, 992, 998, 994, 993, 1002,
- 1005, 1004, 1006, 1009, 1000, 1012, 0, 1010, 1013, 997,
- 995, 1001, 1003, 997, 1001, 1004, 998, 1003, 1002, 1007,
-
- 1011, 1009, 1015, 1024, 1006, 1010, 1013, 1007, 1004, 1006,
- 1009, 1011, 1005, 1014, 1010, 1013, 1016, 1012, 1017, 1019,
- 1020, 1014, 0, 1016, 1015, 1018, 1007, 1011, 1022, 1015,
- 1021, 1017, 1018, 1026, 1019, 1024, 1030, 1028, 1020, 0,
- 1014, 1023, 0, 1016, 1026, 1017, 1019, 1020, 1021, 1022,
- 1028, 1023, 1018, 1032, 1029, 1022, 1033, 1021, 1030, 1031,
- 1026, 1029, 1034, 1030, 1028, 1033, 1032, 1031, 1023, 1035,
- 1036, 1039, 1040, 1042, 1034, 1041, 1043, 1044, 0, 1049,
- 1032, 1029, 1045, 1033, 1049, 0, 1031, 0, 1052, 1034,
- 1040, 1035, 1036, 1039, 1045, 1044, 1035, 1036, 1039, 1040,
-
- 1046, 1041, 1041, 1053, 1044, 1042, 1048, 1057, 1043, 1045,
- 1051, 1049, 1052, 1051, 1046, 1052, 1053, 1048, 1054, 1056,
- 1055, 1057, 1059, 1058, 1061, 1054, 1062, 1046, 1056, 0,
- 1053, 1055, 1060, 1048, 1057, 1058, 1051, 1051, 1062, 1060,
- 1051, 1063, 1064, 0, 1066, 1054, 1056, 1055, 1067, 1071,
- 1058, 1068, 1069, 1062, 1059, 1064, 1061, 1068, 1070, 1060,
- 1071, 1073, 1074, 1063, 1072, 1077, 1075, 1080, 1063, 1064,
- 1066, 1066, 1067, 1079, 1069, 1067, 1071, 1081, 1068, 1069,
- 1070, 1075, 1072, 1073, 1074, 1070, 1077, 1078, 1073, 1074,
- 1082, 1072, 1077, 1075, 1079, 1084, 1083, 1086, 1078, 1080,
-
- 1079, 1085, 1087, 1091, 1081, 1083, 1086, 1089, 1082, 1088,
- 1087, 1090, 1092, 1093, 1078, 1094, 1088, 1082, 1096, 1084,
- 1105, 1095, 1084, 1083, 1086, 1090, 1098, 1085, 1085, 1087,
- 1097, 1089, 1100, 1103, 1089, 1091, 1088, 1094, 1090, 1102,
- 1101, 1104, 1094, 1095, 1092, 1093, 1102, 1105, 1095, 1101,
- 1096, 1106, 1097, 1107, 1100, 1108, 1112, 1097, 1098, 1100,
- 1110, 1111, 1109, 1104, 1108, 1103, 1102, 1101, 1104, 1106,
- 1109, 1107, 1112, 1113, 1117, 1115, 1118, 1114, 1106, 0,
- 1107, 0, 1108, 1112, 1110, 1111, 1114, 1110, 1111, 1109,
- 1115, 1116, 1120, 1119, 1121, 1113, 1124, 1123, 1125, 1116,
-
- 1113, 1122, 1115, 1127, 1114, 1119, 1117, 1125, 1118, 1122,
- 1123, 1124, 1127, 1128, 1120, 1130, 1133, 1130, 1116, 1120,
- 1119, 1121, 1134, 1124, 1123, 1125, 1129, 1132, 1122, 1135,
- 1127, 1128, 1137, 1136, 1129, 1132, 1140, 1139, 1146, 1137,
- 1128, 1134, 1130, 1133, 1142, 1144, 1141, 1143, 1140, 1134,
- 1139, 1135, 1147, 1129, 1132, 1136, 1135, 0, 1149, 1137,
- 1136, 1141, 1145, 1140, 1139, 1143, 1142, 1148, 1150, 1145,
- 1146, 1142, 1144, 1141, 1143, 1151, 1154, 1152, 1148, 1153,
- 1149, 1157, 1161, 1156, 1147, 1149, 1206, 1155, 1158, 1145,
- 1152, 1156, 1153, 1150, 1148, 1150, 0, 1151, 1154, 1155,
-
- 1158, 1157, 1151, 1154, 1152, 1159, 1153, 1162, 1157, 1161,
- 1156, 1164, 1163, 1159, 1155, 1158, 1165, 1166, 1206, 1167,
- 1162, 1163, 1169, 1164, 1166, 1170, 1171, 1172, 1167, 0,
- 1167, 0, 1159, 1167, 1162, 1175, 1173, 1165, 1164, 1163,
- 0, 1167, 1176, 1165, 1166, 1169, 1167, 1178, 1171, 1169,
- 1176, 1170, 1170, 1171, 1172, 1167, 1173, 1167, 1174, 1175,
- 1167, 1177, 1175, 1173, 1179, 1178, 1181, 1180, 1182, 1176,
- 1177, 1174, 1187, 0, 1178, 1180, 1183, 0, 1188, 1185,
- 1184, 1181, 1189, 0, 1193, 1174, 1179, 1185, 1177, 1183,
- 1182, 1179, 1191, 1181, 1180, 1182, 1184, 1192, 1194, 1187,
-
- 1188, 1190, 1193, 1183, 1189, 1188, 1185, 1184, 1190, 1189,
- 1194, 1193, 1199, 1196, 1191, 1195, 1200, 1197, 1198, 1191,
- 1192, 1196, 1205, 0, 1192, 1194, 1197, 1195, 1190, 1201,
- 1198, 1200, 1199, 1204, 1205, 0, 0, 1201, 1203, 1199,
- 1196, 1197, 1195, 1200, 1197, 1198, 1202, 1203, 1207, 1205,
- 1208, 1209, 1202, 1197, 1204, 1207, 1201, 1208, 1210, 1211,
- 1204, 1212, 1214, 1213, 1214, 1203, 1216, 1211, 1215, 1209,
- 1210, 1213, 1217, 1202, 1219, 1207, 1212, 1208, 1209, 1217,
- 1215, 1220, 1222, 1221, 1223, 1210, 1211, 1226, 1212, 1214,
- 1213, 1223, 1224, 1220, 1225, 1215, 1221, 1231, 1216, 1217,
-
- 1227, 1222, 1226, 1224, 1228, 1227, 1219, 1229, 1220, 1222,
- 1221, 1223, 1228, 1230, 1226, 1233, 1225, 1234, 1235, 1224,
- 1229, 1225, 1239, 1231, 1231, 1236, 1248, 1230, 0, 1233,
- 0, 1228, 1227, 1237, 1229, 1234, 0, 1243, 1238, 1240,
- 1230, 1232, 1233, 1243, 1234, 1232, 0, 1241, 1232, 1232,
- 1235, 1236, 1236, 1232, 1239, 1237, 1238, 1242, 1248, 1232,
- 1237, 1240, 1244, 1232, 1243, 1238, 1240, 1232, 1232, 1241,
- 1246, 1245, 1232, 1245, 1241, 1232, 1232, 1246, 1247, 1251,
- 1232, 1249, 1254, 1242, 1242, 1250, 1232, 1247, 1244, 1244,
- 1232, 1252, 1250, 1253, 1255, 1245, 1257, 1246, 1245, 1249,
-
- 1245, 1251, 1253, 1256, 1252, 1247, 1251, 1258, 1249, 1260,
- 1266, 1261, 1250, 0, 1254, 0, 1263, 1263, 1252, 1257,
- 1253, 1258, 1262, 1257, 1261, 1256, 1255, 1264, 0, 1267,
- 1256, 1260, 0, 1266, 1258, 1259, 1260, 1266, 1261, 1269,
- 1259, 1267, 1259, 1264, 1259, 1263, 1259, 1270, 1262, 1262,
- 1268, 1274, 1270, 1259, 1264, 1272, 1267, 1269, 1271, 1268,
- 1272, 1273, 1259, 1275, 1274, 1279, 1269, 1259, 1280, 1259,
- 0, 1259, 1276, 1259, 1278, 0, 1271, 1268, 1274, 1270,
- 1276, 1275, 1272, 1273, 1277, 1271, 1282, 1278, 1273, 1281,
- 1275, 0, 1277, 1283, 1280, 1280, 1284, 1279, 1289, 1276,
-
- 1289, 1278, 1285, 1286, 1281, 1282, 1283, 1287, 1288, 1290,
- 1291, 1277, 1292, 1282, 1293, 1285, 1281, 1288, 1284, 1294,
- 1283, 1286, 1300, 1284, 1292, 1289, 1296, 1287, 1302, 1285,
- 1286, 1290, 1297, 1299, 1287, 1288, 1290, 1291, 1301, 1292,
- 1298, 1293, 1303, 1308, 1294, 1301, 1294, 0, 1298, 1300,
- 1296, 1299, 1304, 1296, 1297, 1302, 1305, 1306, 1307, 1297,
- 1299, 1310, 1305, 1306, 1307, 1301, 1309, 1298, 1303, 1303,
- 1308, 1310, 1311, 1309, 1304, 1312, 1313, 1315, 1314, 1304,
- 1317, 0, 1312, 1305, 1306, 1307, 1316, 0, 1310, 1317,
- 1319, 1320, 0, 1309, 1321, 1315, 1311, 1322, 1323, 1311,
-
- 1314, 0, 1312, 1320, 1315, 1314, 1326, 1317, 1313, 1324,
- 1322, 1316, 1325, 1316, 1319, 1327, 1321, 1319, 1320, 1328,
- 1323, 1321, 1329, 1330, 1322, 1323, 1331, 1333, 1324, 1335,
- 1326, 1332, 1330, 1326, 1325, 1336, 1324, 1327, 1337, 1325,
- 1339, 1333, 1327, 0, 1329, 1328, 1328, 1331, 1338, 1329,
- 1330, 1332, 1342, 1331, 1333, 1340, 1341, 1343, 1332, 1344,
- 1337, 1335, 1347, 1346, 1341, 1337, 1344, 1336, 1342, 1349,
- 1338, 1347, 1339, 1340, 1348, 1338, 1352, 1353, 1354, 1342,
- 1350, 1349, 1340, 1341, 1343, 1346, 1344, 1350, 1351, 1347,
- 1346, 1348, 1351, 1356, 0, 1358, 1349, 1357, 0, 1354,
-
- 1361, 1348, 1358, 1357, 1359, 1354, 1360, 1350, 1352, 1353,
- 1357, 1359, 1363, 1361, 1362, 1351, 1365, 1368, 1365, 1364,
- 1366, 1360, 1358, 1362, 1357, 1356, 1364, 1361, 1367, 1366,
- 1357, 1359, 1369, 1360, 1370, 1373, 1369, 1372, 1363, 1363,
- 1373, 1362, 1374, 1365, 1368, 1372, 1364, 1366, 1375, 1376,
- 1367, 1374, 1377, 0, 0, 1367, 1370, 1382, 1378, 1369,
- 1379, 1370, 1381, 1379, 1372, 1377, 1375, 1373, 1376, 1374,
- 1378, 1380, 1379, 1383, 1380, 1375, 1376, 1385, 1387, 1377,
- 1381, 1386, 1382, 1388, 1382, 1378, 1383, 1379, 1388, 1381,
- 1379, 1389, 1392, 1380, 1387, 1390, 1390, 1391, 1380, 1389,
-
- 1383, 1380, 1394, 1393, 1386, 1387, 1391, 0, 1386, 1385,
- 1395, 1394, 1396, 1397, 1392, 1388, 1402, 1395, 1389, 1392,
- 1397, 1403, 1390, 1399, 1391, 1393, 1400, 0, 1406, 1394,
- 1393, 0, 1401, 0, 1396, 1400, 1399, 1395, 1404, 1396,
- 1397, 1401, 1402, 1402, 1403, 1408, 1405, 1404, 1403, 1407,
- 1399, 0, 0, 1400, 1405, 1409, 1408, 1410, 1414, 1401,
- 1406, 1413, 1411, 1409, 1407, 1404, 1412, 1415, 1416, 1413,
- 1410, 0, 1408, 1405, 1411, 1418, 1407, 1417, 1412, 1419,
- 1414, 1418, 1409, 1420, 1410, 1414, 1417, 1415, 1413, 1411,
- 1416, 1421, 1423, 1412, 1415, 1416, 1422, 1419, 1424, 1423,
-
- 1425, 1426, 1418, 1421, 1417, 0, 1419, 1427, 1429, 1420,
- 1420, 1428, 0, 1434, 1422, 1430, 1431, 1433, 1421, 1423,
- 1427, 1435, 1432, 1422, 1424, 1424, 1436, 1431, 1432, 1437,
- 1440, 0, 1425, 1426, 1427, 1429, 1430, 1428, 1428, 1433,
- 1438, 1441, 1430, 1431, 1433, 1434, 1444, 1442, 0, 1432,
- 1443, 1446, 1447, 1435, 1448, 1437, 1437, 1440, 1436, 1443,
- 1451, 1444, 1445, 1446, 1441, 1442, 1438, 1438, 1441, 1449,
- 1452, 1450, 1447, 1444, 1442, 1445, 1449, 1443, 1446, 1447,
- 1448, 1448, 1451, 1452, 1453, 1461, 1454, 1451, 1455, 1445,
- 1450, 1454, 1453, 1455, 1456, 1458, 1449, 1452, 1450, 1457,
-
- 1459, 1456, 1462, 1458, 1465, 1460, 1463, 1461, 1459, 1469,
- 1462, 1453, 1461, 1463, 0, 1464, 1466, 1472, 1454, 1471,
- 1455, 1456, 1458, 1460, 1464, 1457, 1457, 1459, 1467, 1462,
- 1468, 1468, 1460, 1463, 1481, 1467, 1465, 1470, 1466, 1473,
- 1471, 1469, 1464, 1466, 1474, 1470, 1471, 1473, 1475, 1472,
- 1476, 1477, 1474, 1480, 1478, 1467, 1475, 1468, 1476, 1477,
- 1481, 1481, 1479, 1482, 1470, 1480, 1473, 1478, 1479, 1486,
- 1485, 1474, 1487, 1488, 1483, 1475, 1484, 1476, 1477, 1489,
- 1480, 1478, 1483, 1495, 1484, 1485, 1491, 1482, 0, 1479,
- 1482, 1490, 1495, 1492, 1493, 1488, 1486, 1485, 1493, 1487,
-
- 1488, 1483, 1489, 1484, 1491, 1490, 1489, 1492, 1496, 1498,
- 1495, 1493, 1497, 1491, 1500, 1499, 1498, 0, 1490, 1493,
- 1492, 1493, 1501, 1502, 1497, 1493, 1499, 1507, 1505, 1506,
- 1496, 1503, 1504, 1513, 1508, 1496, 1498, 1521, 1493, 1497,
- 1509, 1500, 1499, 1503, 1501, 1511, 1504, 1509, 1514, 1501,
- 1507, 1506, 1519, 1510, 1507, 1502, 1506, 1508, 1503, 1504,
- 1505, 1508, 1510, 1511, 1512, 1513, 1520, 1509, 1516, 1521,
- 1518, 1512, 1511, 1524, 1519, 1514, 1518, 1516, 1522, 1519,
- 1510, 1527, 1526, 1528, 1533, 1522, 0, 1529, 1530, 1532,
- 1533, 1512, 1520, 1520, 1528, 1516, 1534, 1518, 1529, 1530,
-
- 1524, 1535, 0, 1534, 1537, 1522, 1526, 1543, 1527, 1526,
- 1528, 1533, 1539, 1532, 1529, 1530, 1532, 1536, 1539, 1535,
- 1538, 1540, 0, 1534, 1536, 1542, 0, 1541, 1535, 1540,
- 1537, 1537, 1538, 1543, 1543, 1544, 1545, 0, 1542, 1539,
- 1547, 1554, 1547, 1546, 1536, 1545, 1549, 1538, 1540, 1541,
- 1548, 1550, 1542, 1544, 1541, 1546, 1551, 1548, 1552, 1553,
- 0, 1555, 1544, 1545, 1550, 1551, 1557, 1547, 1554, 1556,
- 1546, 1553, 1549, 1549, 1558, 1560, 1556, 1548, 1550, 1558,
- 1552, 1559, 1561, 1551, 1555, 1552, 1553, 1562, 1555, 1559,
- 1563, 1560, 1557, 1557, 1565, 1562, 1556, 1567, 1566, 0,
-
- 1571, 1558, 1560, 1573, 1568, 1561, 1570, 1569, 1559, 1561,
- 0, 1567, 1563, 1571, 1562, 1570, 1573, 1563, 1569, 1575,
- 1576, 1565, 1566, 1579, 1567, 1566, 1568, 1571, 1572, 1572,
- 1573, 1568, 1577, 1570, 1569, 1574, 1572, 1574, 1581, 1577,
- 1580, 1578, 1576, 1590, 1582, 1575, 1575, 1576, 1578, 1583,
- 1579, 1582, 1585, 1584, 1586, 1572, 1572, 1587, 1580, 1577,
- 1581, 1586, 1574, 1594, 1589, 1581, 1592, 1580, 1578, 1595,
- 1590, 1582, 1595, 1596, 1583, 1584, 1583, 1589, 1591, 1598,
- 1584, 1586, 1597, 1600, 1585, 1594, 1591, 1592, 1599, 1587,
- 1594, 1589, 1598, 1592, 1601, 1600, 1595, 1599, 1602, 1596,
-
- 1596, 1604, 1603, 1607, 1608, 1591, 1598, 1605, 1597, 1597,
- 1600, 1603, 1611, 0, 1605, 1599, 1604, 1606, 1601, 0,
- 1606, 1601, 1609, 1612, 1602, 1602, 1608, 1614, 1604, 1603,
- 1611, 1608, 1606, 1615, 1605, 1607, 1616, 1617, 1609, 1611,
- 1613, 1606, 1613, 0, 1606, 1612, 1609, 1606, 1618, 1609,
- 1612, 1614, 1619, 1621, 1614, 1620, 0, 1623, 0, 1606,
- 1615, 1622, 1627, 1624, 1628, 1609, 1625, 1613, 1616, 1617,
- 1618, 1623, 1624, 1626, 1625, 1618, 1629, 1630, 1619, 1619,
- 1626, 1620, 1620, 1622, 1623, 1621, 1627, 1632, 1622, 1627,
- 1624, 1631, 0, 1625, 1633, 1634, 1628, 1635, 1633, 1638,
-
- 1626, 1636, 1637, 1640, 1639, 0, 1638, 1641, 1629, 1630,
- 1640, 1637, 1639, 1631, 1642, 1654, 1646, 1634, 1631, 1632,
- 1641, 1633, 1634, 1636, 1635, 1643, 1638, 1642, 1636, 1637,
- 1640, 1639, 1647, 1644, 1641, 1645, 1648, 1645, 1643, 1646,
- 1651, 1642, 1644, 1646, 1648, 1649, 1652, 1654, 0, 1655,
- 1653, 0, 1643, 1658, 1661, 1651, 1655, 1647, 1656, 1647,
- 1644, 1652, 1645, 1648, 1653, 1649, 1658, 1651, 1657, 1656,
- 1663, 1666, 1649, 1652, 1664, 1657, 1655, 1653, 1659, 1662,
- 1658, 1661, 1665, 1666, 1659, 1656, 1662, 1667, 1668, 1664,
- 1669, 1668, 1663, 1670, 0, 1657, 0, 1663, 1666, 1669,
-
- 1667, 1664, 1672, 1697, 1671, 1659, 1662, 1673, 1665, 1665,
- 1673, 1670, 1674, 1680, 1667, 1668, 1671, 1669, 1679, 1681,
- 1670, 1676, 1672, 1674, 1685, 1673, 1676, 1683, 1678, 1672,
- 1678, 1671, 1682, 1676, 1673, 1697, 1683, 1673, 1684, 1674,
- 1680, 1687, 1679, 1686, 1688, 1679, 1681, 1682, 1676, 1687,
- 1689, 1685, 1691, 1676, 1683, 1678, 1690, 1686, 1692, 1682,
- 1691, 1698, 1684, 1693, 1694, 1684, 1688, 0, 1687, 1692,
- 1686, 1688, 1694, 1699, 1689, 0, 1696, 1689, 1690, 1691,
- 0, 1693, 1700, 1690, 1695, 1692, 1702, 1695, 1698, 1700,
- 1693, 1694, 1701, 1699, 1696, 1702, 1704, 1703, 1706, 1705,
-
- 1699, 1707, 1695, 1696, 1705, 1729, 1701, 1704, 1712, 1700,
- 1703, 1695, 1711, 1702, 1695, 1710, 1707, 1710, 1713, 1701,
- 1706, 1711, 1714, 1704, 1703, 1706, 1715, 0, 1707, 1713,
- 1715, 1705, 1716, 1717, 1712, 1712, 1717, 1729, 0, 1711,
- 1714, 1719, 1710, 1718, 0, 1713, 1716, 1721, 1720, 1714,
- 1719, 1717, 1715, 1715, 1720, 1725, 1721, 1715, 1716, 1716,
- 1717, 1722, 1727, 1717, 1724, 1718, 1722, 1725, 1719, 1730,
- 1718, 1726, 1728, 1716, 1721, 1720, 1726, 1724, 1730, 1731,
- 1732, 1733, 1725, 1735, 1727, 1728, 1736, 1734, 1740, 1727,
- 1738, 1724, 1739, 1722, 1743, 1741, 1730, 1738, 1726, 1728,
-
- 1734, 0, 1745, 1733, 1742, 1739, 1731, 1736, 1733, 1741,
- 1742, 1750, 1732, 1736, 1734, 1735, 1747, 1738, 1751, 1739,
- 1740, 1745, 1741, 1752, 1747, 1748, 1743, 1749, 1742, 1745,
- 1750, 1742, 1753, 1748, 1755, 1749, 1756, 1742, 1750, 1754,
- 1751, 1752, 1757, 1747, 1758, 1751, 1753, 1759, 1755, 1756,
- 1752, 1760, 1748, 1761, 1749, 1757, 1768, 1754, 1762, 1753,
- 1766, 1755, 1765, 1756, 1764, 1758, 1754, 1761, 1763, 1757,
- 1765, 1758, 1767, 1764, 1773, 1763, 1769, 1774, 0, 1759,
- 1761, 1769, 1770, 1760, 1774, 1762, 1767, 1766, 1768, 1765,
- 1775, 1764, 1758, 1770, 1776, 1763, 1771, 1778, 1779, 1767,
-
- 1777, 1773, 1781, 1769, 1774, 1771, 1781, 1777, 1780, 1770,
- 1785, 1788, 1783, 1775, 1784, 1786, 1776, 1775, 1790, 1778,
- 1779, 1776, 1792, 1771, 1778, 1779, 1780, 1777, 1783, 1781,
- 1786, 1787, 1784, 1790, 1785, 1780, 1789, 1785, 1788, 1783,
- 1791, 1784, 1786, 1787, 1789, 1790, 1793, 1795, 1791, 1792,
- 1794, 1796, 1798, 1800, 1799, 1802, 1801, 1804, 1787, 1793,
- 1798, 1799, 1795, 1789, 1802, 1803, 1796, 1791, 1806, 1805,
- 1794, 1801, 1808, 1793, 1795, 1811, 1810, 1794, 1796, 1798,
- 1809, 1799, 1802, 1801, 1804, 1800, 1803, 1813, 1812, 1814,
- 1815, 1831, 1803, 1805, 1808, 1806, 1805, 1815, 1809, 1808,
-
- 1816, 1817, 1811, 1812, 1819, 1816, 0, 1809, 1810, 1818,
- 1817, 1820, 1813, 1814, 1813, 1812, 1814, 1815, 1818, 1821,
- 1822, 1824, 1823, 1831, 0, 0, 1819, 1816, 1817, 1829,
- 1828, 1819, 1825, 1820, 1823, 1822, 1818, 1821, 1820, 1830,
- 0, 1829, 0, 1824, 1826, 1825, 1821, 1822, 1824, 1823,
- 1825, 1826, 1828, 1827, 1834, 1832, 1829, 1828, 1836, 1825,
- 1827, 1832, 1834, 1837, 1838, 1835, 1830, 1840, 1841, 1836,
- 1837, 1826, 1825, 1835, 1842, 1827, 1843, 1844, 1851, 1845,
- 1827, 1834, 1832, 1843, 1839, 1836, 1839, 1827, 1854, 1838,
- 1837, 1838, 1835, 1840, 1840, 1841, 1846, 1839, 1849, 1850,
-
- 1852, 1842, 1846, 1843, 1844, 1845, 1845, 1855, 1847, 1848,
- 1851, 1839, 1856, 1839, 1847, 1848, 1855, 1870, 1857, 1858,
- 1854, 1858, 1850, 1846, 1852, 1849, 1850, 1852, 1859, 1860,
- 1861, 1862, 1863, 1865, 1855, 1847, 1848, 1861, 1864, 1865,
- 1857, 1866, 1867, 0, 1856, 1857, 1858, 1868, 1869, 1870,
- 1864, 0, 1859, 1862, 1872, 1859, 1860, 1861, 1862, 1863,
- 1865, 1872, 1873, 1866, 1867, 1864, 1875, 1881, 1866, 1867,
- 1869, 1873, 1874, 1868, 1868, 1869, 1871, 1871, 1871, 1874,
- 1876, 1872, 1879, 1871, 1880, 1878, 1882, 1876, 1883, 1873,
- 1878, 1871, 1881, 1884, 1881, 1879, 1880, 1888, 1875, 1874,
-
- 1883, 1885, 1882, 1871, 1871, 1871, 1887, 1876, 1890, 1879,
- 1871, 1880, 1887, 1882, 1886, 1883, 1893, 1878, 1894, 1885,
- 1891, 1886, 1889, 1889, 1888, 1884, 1892, 1891, 1885, 1895,
- 1898, 1892, 1900, 1887, 1890, 1890, 1895, 1899, 1903, 1899,
- 1902, 1886, 1893, 1893, 1903, 1894, 1904, 1891, 1906, 1889,
- 1900, 1916, 1905, 1892, 1907, 1918, 1895, 1898, 1902, 1900,
- 1907, 1908, 1909, 1905, 1899, 1903, 1910, 1902, 1911, 1911,
- 1912, 1913, 1913, 1908, 1914, 1906, 1921, 1917, 1904, 1905,
- 1925, 1907, 1909, 1916, 1910, 1914, 1920, 1918, 1908, 1909,
- 1922, 1926, 1927, 1910, 1924, 1911, 1912, 1912, 1913, 1917,
-
- 1919, 1914, 1924, 1929, 1917, 1928, 1920, 1919, 1921, 1931,
- 1929, 1932, 1925, 1920, 1927, 1922, 1930, 1922, 1926, 1927,
- 1933, 1924, 1934, 1928, 1930, 1936, 1932, 1919, 1935, 1935,
- 1929, 1934, 1928, 1931, 1937, 1938, 1931, 1941, 1932, 0,
- 0, 1939, 1940, 1930, 1933, 1946, 1949, 1933, 1939, 1934,
- 1943, 1936, 1936, 1941, 1940, 1935, 1944, 1943, 1949, 1945,
- 1941, 1944, 1947, 1948, 1941, 1947, 1937, 1938, 1939, 1940,
- 1951, 1948, 1946, 1949, 1953, 1952, 0, 1943, 1951, 1956,
- 1941, 1945, 1954, 1944, 1957, 1959, 1945, 1955, 1958, 1947,
- 1948, 1962, 0, 1958, 0, 1961, 0, 1951, 1952, 1962,
-
- 1953, 1953, 1952, 1954, 1958, 1955, 1956, 1957, 1961, 1954,
- 1960, 1957, 1959, 1963, 1955, 1958, 1960, 1964, 1962, 1965,
- 1958, 1966, 1961, 1967, 1964, 1968, 1965, 1969, 1966, 1970,
- 1972, 1971, 1983, 1973, 1968, 1963, 0, 1960, 1974, 1969,
- 1963, 1985, 1979, 1978, 1964, 1971, 1965, 1981, 1966, 1976,
- 1978, 1970, 1968, 1987, 1969, 1967, 1970, 1972, 1971, 1973,
- 1973, 1974, 1989, 1977, 1983, 1974, 1982, 1976, 1977, 1979,
- 1978, 1982, 1988, 1985, 1981, 1987, 1976, 1986, 1986, 1977,
- 1987, 1991, 1992, 1996, 1994, 1993, 1995, 1988, 1995, 1998,
- 1977, 1999, 1997, 2000, 1989, 1977, 1991, 1997, 1982, 1988,
-
- 1993, 2000, 2002, 0, 1986, 1992, 2007, 2001, 1991, 1992,
- 1994, 1994, 1993, 1995, 2001, 1996, 2003, 2005, 1999, 1997,
- 2000, 1998, 2006, 2009, 2002, 2010, 2011, 2012, 2007, 2002,
- 2006, 2003, 2005, 2007, 2001, 2013, 2014, 2015, 2016, 2018,
- 2017, 0, 2013, 2003, 2005, 2022, 0, 2009, 2020, 2006,
- 2009, 2010, 2010, 2011, 2012, 2024, 2023, 2018, 2015, 2026,
- 2016, 2017, 2013, 2027, 2015, 2016, 2018, 2017, 2014, 2022,
- 2020, 2023, 2022, 2028, 2026, 2020, 2029, 2031, 2027, 2030,
- 2032, 2024, 2024, 2023, 2033, 2034, 2026, 2035, 2038, 2037,
- 2027, 2036, 0, 2041, 2035, 2028, 2038, 2030, 2037, 2031,
-
- 2028, 2039, 2032, 2029, 2031, 2040, 2030, 2032, 2033, 2036,
- 2042, 2033, 2034, 2043, 2035, 2038, 2037, 2044, 2036, 2042,
- 2045, 2048, 2068, 2047, 2039, 2041, 2044, 2040, 2039, 2050,
- 2048, 2043, 2040, 2045, 2047, 2049, 2050, 2042, 2051, 2052,
- 2043, 2055, 2059, 2053, 2044, 2054, 2056, 2045, 2048, 2047,
- 2047, 2054, 2061, 2049, 2068, 0, 2050, 2052, 2053, 2071,
- 2056, 2047, 2049, 2055, 2051, 2051, 2052, 2062, 2055, 2059,
- 2053, 2063, 2054, 2056, 2064, 2066, 2061, 2067, 2062, 2061,
- 2070, 2069, 2063, 2072, 2071, 2064, 2071, 2066, 2073, 2076,
- 2067, 2069, 2072, 2074, 2062, 2077, 2079, 2080, 2063, 2081,
-
- 2079, 2064, 2066, 2086, 2067, 2083, 2070, 2070, 2069, 2084,
- 2072, 0, 2074, 2082, 2084, 2073, 2076, 2087, 2080, 2120,
- 2074, 2077, 2077, 2079, 2080, 2083, 2082, 2085, 2089, 2086,
- 2086, 2081, 2083, 2088, 2085, 2087, 2084, 2090, 2091, 2088,
- 2082, 2092, 2097, 2089, 2087, 2093, 2093, 2094, 2099, 2097,
- 2091, 2120, 2090, 2095, 2085, 2089, 2092, 2095, 2098, 2094,
- 2088, 2100, 2098, 2099, 2090, 2091, 2102, 2101, 2092, 2097,
- 2095, 2103, 2093, 2102, 2094, 2099, 2101, 2104, 2095, 2105,
- 2095, 2107, 2108, 2109, 2095, 2098, 2105, 2113, 2100, 2110,
- 0, 0, 2109, 2102, 2101, 2103, 0, 2095, 2103, 2104,
-
- 2111, 2116, 2117, 2107, 2104, 2113, 2105, 2108, 2107, 2108,
- 2109, 2110, 2115, 2118, 2113, 2119, 2110, 2117, 2122, 2116,
- 2111, 2115, 2123, 2119, 2124, 2125, 2125, 2111, 2116, 2117,
- 2127, 2126, 2128, 2133, 2129, 2123, 0, 2130, 2118, 2115,
- 2118, 2131, 2119, 2122, 2134, 2122, 2130, 0, 2135, 2123,
- 2131, 2124, 2125, 2126, 2128, 2127, 2129, 2127, 2126, 2128,
- 2132, 2129, 2135, 2136, 2130, 2133, 2134, 2132, 2131, 2137,
- 2138, 2134, 2140, 2141, 2137, 2135, 2142, 2144, 2136, 2143,
- 2140, 2146, 2145, 2147, 0, 2148, 2141, 2132, 2146, 2138,
- 2136, 2149, 2152, 2144, 2145, 2153, 2156, 2138, 2154, 2140,
-
- 2141, 2137, 2150, 2142, 2144, 2143, 2143, 2148, 2146, 2145,
- 2153, 2150, 2148, 2151, 2156, 2147, 2149, 2155, 2149, 2152,
- 2157, 2151, 2153, 2156, 2154, 2154, 2158, 2160, 2161, 2150,
- 2163, 2161, 2151, 2164, 2162, 2158, 2163, 2165, 2164, 0,
- 2151, 2167, 2157, 2155, 2155, 2166, 2161, 2157, 2151, 2170,
- 2160, 2169, 2165, 2158, 2160, 2161, 2167, 2163, 2161, 2162,
- 2171, 2162, 2174, 2166, 2165, 2164, 2169, 2173, 2167, 2174,
- 2175, 2170, 2166, 2176, 2177, 2178, 2170, 2179, 2169, 2180,
- 2183, 2173, 2171, 2177, 2178, 2182, 2179, 2171, 2175, 2174,
- 2180, 2181, 2183, 2181, 2173, 2184, 2186, 2175, 2182, 2187,
-
- 2176, 2177, 2178, 2188, 2179, 2189, 2180, 2183, 2194, 2190,
- 2188, 2186, 2182, 2196, 2187, 2191, 2197, 2184, 2181, 2199,
- 2197, 2194, 2184, 2186, 2202, 2198, 2187, 2189, 2199, 2194,
- 2188, 2190, 2189, 2191, 2196, 2194, 2190, 2198, 2201, 2200,
- 2196, 2200, 2191, 2197, 2203, 2204, 2199, 2206, 2194, 2205,
- 2207, 2202, 2198, 2208, 2209, 2206, 2201, 2212, 2205, 2211,
- 2215, 2216, 2203, 2217, 2213, 2201, 2200, 2211, 2209, 2213,
- 2222, 2203, 2204, 2207, 2206, 2208, 2205, 2207, 2214, 2218,
- 2208, 2209, 2223, 2214, 2224, 2225, 2211, 2217, 2219, 2212,
- 2217, 2213, 2215, 2216, 2226, 2219, 2223, 2222, 2218, 2227,
-
- 2229, 2231, 2224, 2230, 2228, 2234, 2218, 2223, 2223, 2223,
- 2214, 2224, 2225, 2228, 2227, 2219, 2232, 2233, 2236, 2238,
- 2226, 2226, 2237, 2223, 0, 2230, 2227, 2231, 2231, 2237,
- 2230, 2228, 2229, 2239, 2223, 2242, 2241, 2234, 2241, 2233,
- 2239, 2236, 2238, 2232, 2233, 2236, 2238, 2243, 2245, 2237,
- 2246, 2243, 2244, 2250, 2247, 2251, 2249, 2242, 2250, 2246,
- 2239, 2248, 2242, 2241, 2244, 2247, 2252, 2256, 2248, 2254,
- 2245, 0, 2253, 2259, 2243, 2245, 2256, 2246, 2249, 2244,
- 2250, 2247, 2251, 2249, 2253, 2255, 2255, 2257, 2248, 2252,
- 2258, 2254, 2260, 2252, 2256, 2259, 2254, 2262, 2258, 2253,
-
- 2259, 2261, 2257, 2264, 2274, 2265, 2260, 2266, 2267, 2364,
- 2261, 0, 2255, 2265, 2257, 2266, 2267, 2258, 2270, 2260,
- 2269, 2268, 2264, 2269, 2262, 2268, 2270, 2271, 2261, 2272,
- 2264, 2273, 2265, 2271, 2266, 2267, 2274, 2273, 2276, 2278,
- 2280, 2364, 2279, 2281, 2272, 2270, 2283, 2269, 2268, 2284,
- 2276, 2285, 2282, 2278, 2271, 2279, 2272, 2289, 2273, 2282,
- 2286, 2280, 2290, 2291, 2287, 2276, 2278, 2280, 2281, 2279,
- 2281, 2284, 2288, 2283, 2286, 2285, 2284, 2287, 2285, 2282,
- 2292, 2293, 2294, 2289, 2289, 2295, 2288, 2286, 2291, 2290,
- 2291, 2287, 2296, 2293, 2298, 2297, 2294, 2299, 2297, 2288,
-
- 0, 2300, 2305, 2303, 2302, 2306, 2307, 2292, 2293, 2294,
- 2303, 2295, 2295, 2297, 2309, 0, 2311, 2305, 2296, 2296,
- 2304, 2298, 2297, 2300, 2299, 2297, 2302, 2304, 2300, 2305,
- 2303, 2302, 2306, 2307, 2308, 2310, 2312, 2313, 2314, 2315,
- 2316, 2309, 2308, 2311, 2310, 2318, 2320, 2304, 2312, 2322,
- 2317, 2323, 2324, 2316, 2320, 2318, 2319, 2325, 2329, 2313,
- 2324, 2308, 2310, 2312, 2313, 2314, 2315, 2316, 2317, 2319,
- 2327, 2322, 2318, 2320, 2328, 0, 2322, 2317, 2323, 2324,
- 2326, 2331, 2329, 2319, 2325, 2329, 0, 2330, 2332, 2326,
- 2337, 2333, 2327, 2336, 2334, 2328, 2332, 2327, 2337, 2338,
-
- 2341, 2328, 2330, 2333, 2340, 2336, 2342, 2326, 2331, 2344,
- 2342, 2340, 2341, 2330, 2330, 2332, 2343, 2337, 2333, 2334,
- 2336, 2334, 2345, 2347, 2351, 2348, 2338, 2341, 2343, 2330,
- 2346, 2340, 2344, 2342, 2349, 2352, 2344, 2348, 2346, 2353,
- 2354, 0, 2352, 2343, 2359, 2347, 2349, 2355, 2357, 2345,
- 2347, 2351, 2348, 2354, 2356, 2360, 2355, 2346, 2361, 2353,
- 2357, 2349, 2352, 2356, 2358, 2358, 2353, 2354, 2366, 2362,
- 2359, 2359, 2365, 2360, 2355, 2357, 2367, 2368, 2369, 2368,
- 2371, 2356, 2360, 2361, 2362, 2361, 2362, 2365, 2370, 0,
- 2366, 2358, 2369, 2362, 2370, 2366, 2362, 2374, 2367, 2365,
-
- 2372, 2372, 2371, 2367, 2368, 2369, 2375, 2371, 2376, 2377,
- 2378, 2362, 2379, 2362, 2380, 2370, 2382, 0, 2383, 2374,
- 2380, 2377, 2381, 2386, 2374, 2384, 2393, 2372, 2375, 2385,
- 2376, 2385, 2395, 2375, 2381, 2376, 2377, 2386, 2387, 2388,
- 2383, 2380, 2378, 2389, 2379, 2383, 2390, 2384, 2382, 2381,
- 2386, 2391, 2384, 2394, 2392, 2395, 2385, 2388, 2393, 2395,
- 2401, 2389, 2387, 0, 2390, 2387, 2388, 2392, 2397, 2391,
- 2389, 2400, 2399, 2390, 2402, 2397, 2403, 0, 2391, 2399,
- 2409, 2392, 2404, 2406, 2403, 2394, 2401, 2401, 2405, 2400,
- 2407, 2409, 2407, 2410, 2411, 2397, 2412, 2407, 2400, 2399,
-
- 2404, 2415, 2403, 2403, 2410, 2406, 2402, 2409, 2412, 2404,
- 2406, 2403, 2413, 2416, 2405, 2405, 2415, 2407, 2418, 2407,
- 2410, 2411, 2417, 2412, 2416, 2421, 2420, 2423, 2415, 2422,
- 2413, 2424, 2427, 2418, 2417, 2425, 2422, 2430, 2431, 2413,
- 2416, 2428, 2423, 0, 2429, 2418, 2432, 2421, 2433, 2417,
- 2420, 2435, 2421, 2420, 2423, 0, 2422, 2436, 2424, 2427,
- 2439, 2425, 2425, 2434, 2432, 2428, 2429, 2437, 2428, 2430,
- 2431, 2429, 2436, 2432, 2438, 2433, 2434, 2435, 2435, 2440,
- 2437, 2442, 2438, 2441, 2436, 0, 2439, 2439, 0, 2444,
- 2434, 2445, 2446, 0, 2437, 2447, 2441, 2450, 2451, 2452,
-
- 2453, 2438, 2448, 2442, 2450, 2449, 2455, 0, 2442, 0,
- 2441, 2440, 2444, 2460, 2453, 2445, 2444, 2447, 2445, 2446,
- 2448, 2451, 2447, 2449, 2450, 2451, 2452, 2453, 2455, 2448,
- 2456, 2457, 2449, 2455, 2458, 2459, 2460, 2456, 2457, 2461,
- 2460, 2458, 2462, 2463, 2464, 2466, 2461, 2465, 2459, 0,
- 0, 2467, 2468, 2471, 2466, 2469, 2476, 2456, 2457, 2467,
- 2468, 2458, 2459, 2475, 2462, 2464, 2461, 2477, 2473, 2462,
- 2470, 2464, 2466, 2465, 2465, 2463, 2470, 2469, 2467, 2468,
- 2471, 2474, 2469, 2473, 2478, 2475, 2477, 2480, 2476, 2482,
- 2475, 2483, 2474, 0, 2477, 2473, 2484, 2470, 2485, 2486,
-
- 2486, 2487, 2482, 2491, 2492, 2480, 2490, 2493, 2474, 2478,
- 2497, 2478, 2494, 0, 2480, 2499, 2482, 2483, 2483, 2492,
- 2484, 2505, 2485, 2484, 2499, 2485, 2486, 2487, 2487, 2490,
- 2494, 2492, 2501, 2490, 2493, 2491, 2502, 2497, 2507, 2494,
- 2506, 2506, 2499, 2505, 2507, 2501, 2508, 2502, 2505, 2509,
- 2510, 2512, 2514, 2515, 0, 2516, 2518, 0, 2517, 2501,
- 2515, 2518, 2521, 2502, 2519, 2507, 2522, 2506, 2508, 2517,
- 2521, 2509, 2523, 2508, 2525, 2528, 2509, 2510, 2512, 2524,
- 2515, 2516, 2516, 2518, 2514, 2517, 2519, 2523, 2529, 2521,
- 2522, 2519, 2527, 2522, 2524, 2530, 2528, 2531, 2533, 2523,
-
- 0, 2525, 2528, 2534, 2530, 2535, 2524, 2536, 2539, 2531,
- 2527, 2538, 2541, 2535, 2540, 2542, 2536, 2543, 2544, 2527,
- 2529, 2541, 2530, 2545, 2531, 2533, 0, 2534, 0, 0,
- 2534, 2543, 2535, 2542, 2536, 2539, 2540, 2538, 2538, 2541,
- 2544, 2540, 2542, 2546, 2543, 2544, 2547, 2548, 2545, 2549,
- 2545, 2550, 2553, 2551, 2554, 2552, 2546, 2555, 2550, 2547,
- 2551, 2556, 2548, 2558, 2559, 0, 2560, 0, 2557, 0,
- 2546, 2549, 2558, 2547, 2548, 2561, 2549, 2552, 2550, 2553,
- 2551, 2554, 2552, 2557, 2555, 2562, 2559, 2564, 2556, 2563,
- 2558, 2559, 2560, 2560, 2564, 2557, 2566, 2568, 2565, 2567,
-
- 2569, 2561, 2561, 2566, 2563, 2567, 2571, 2570, 2568, 2572,
- 2575, 2562, 2562, 2565, 2564, 2570, 2563, 2574, 2578, 2573,
- 2581, 0, 2577, 2566, 2568, 2565, 2567, 2569, 2576, 2577,
- 2575, 2579, 2574, 2571, 2570, 2573, 2572, 2575, 2579, 2582,
- 2578, 2580, 2583, 2576, 2574, 2578, 2573, 2581, 2580, 2577,
- 2584, 2584, 2585, 2586, 0, 2576, 2590, 2582, 2579, 2585,
- 2587, 2588, 0, 2587, 2592, 2589, 2582, 2586, 2580, 2583,
- 2589, 2591, 2594, 2595, 2588, 2593, 0, 2584, 2599, 2585,
- 2586, 2590, 2599, 2590, 2594, 2595, 2591, 2587, 2588, 2600,
- 2592, 2592, 2589, 2593, 2597, 2601, 2598, 2602, 2591, 2594,
-
- 2595, 2598, 2593, 2597, 2603, 2599, 2604, 2605, 2601, 2606,
- 0, 2608, 2612, 2600, 2610, 0, 2600, 2613, 2611, 2602,
- 2614, 2597, 2601, 2598, 2602, 2613, 2603, 2611, 2612, 2622,
- 0, 2603, 2614, 2604, 2605, 2606, 2606, 2608, 2608, 2612,
- 2610, 2610, 2616, 2617, 2613, 2611, 2618, 2614, 2619, 2616,
- 2620, 2618, 2617, 2621, 2622, 2619, 2622, 2623, 2624, 2628,
- 2621, 2626, 2625, 2629, 2623, 2631, 2632, 2624, 2620, 2616,
- 2617, 2625, 2635, 2618, 2630, 2619, 2629, 2620, 2634, 2630,
- 2621, 0, 2636, 2631, 2623, 2624, 2628, 2626, 2626, 2625,
- 2629, 2636, 2631, 2632, 2637, 2638, 2634, 2639, 2640, 2635,
-
- 2644, 2630, 2641, 2637, 2638, 2634, 2642, 2643, 2644, 2636,
- 2640, 2641, 2645, 2646, 2647, 2642, 2648, 2639, 2643, 2649,
- 2654, 2637, 2638, 2648, 2639, 2640, 2650, 2644, 2649, 2641,
- 2652, 2653, 2645, 2642, 2643, 2655, 2656, 2657, 2658, 2645,
- 2646, 2647, 2665, 2648, 2655, 2657, 2649, 2650, 2656, 2659,
- 2661, 2658, 2654, 2650, 2660, 2664, 2663, 2652, 2653, 2666,
- 2662, 2660, 2655, 2656, 2657, 2658, 2661, 2662, 2667, 2665,
- 2671, 2659, 2674, 0, 2673, 0, 2659, 2661, 2663, 2674,
- 2664, 2660, 2664, 2663, 2666, 2669, 2666, 2662, 2671, 2673,
- 2672, 2675, 2676, 2669, 2678, 2667, 2677, 2671, 2672, 2674,
-
- 2681, 2673, 2678, 2677, 2683, 2684, 2682, 2681, 2685, 2687,
- 2688, 0, 2669, 2675, 2676, 2682, 2686, 2672, 2675, 2676,
- 2685, 2678, 2689, 2677, 2690, 2686, 2688, 2681, 2683, 2692,
- 2694, 2683, 2684, 2682, 2689, 2685, 2687, 2688, 2693, 2695,
- 2696, 2692, 2701, 2686, 2704, 2699, 2698, 2690, 2700, 2689,
- 2707, 2690, 2699, 2694, 2696, 2700, 2692, 2694, 2698, 2693,
- 2705, 2703, 2704, 2706, 2709, 2693, 2695, 2696, 2711, 2701,
- 2708, 2704, 2699, 2698, 2710, 2700, 2703, 2707, 2708, 2713,
- 2715, 2712, 2722, 2705, 2720, 2723, 2711, 2705, 2703, 2706,
- 2706, 2709, 2712, 2714, 2713, 2711, 2710, 2708, 2721, 2723,
-
- 2714, 2710, 2724, 2721, 2725, 2726, 2713, 2715, 2712, 2722,
- 2720, 2720, 2723, 2729, 2730, 2727, 2724, 2728, 2725, 2733,
- 2714, 2730, 2731, 2726, 2738, 2721, 2736, 0, 2737, 2724,
- 2739, 2725, 2726, 2727, 2731, 2728, 0, 2738, 2742, 2740,
- 2729, 2730, 2727, 2750, 2728, 2743, 2733, 2745, 2736, 2731,
- 2737, 2738, 2739, 2736, 2741, 2737, 2742, 2739, 2740, 2745,
- 2747, 2748, 2741, 2749, 2743, 2742, 2740, 2751, 2753, 2752,
- 2750, 2754, 2743, 2755, 2745, 2749, 2753, 2756, 2759, 0,
- 2757, 2741, 2747, 2748, 2760, 2775, 2761, 2747, 2748, 2757,
- 2749, 2752, 2758, 2755, 2751, 2753, 2752, 2762, 2754, 2756,
-
- 2755, 2758, 2764, 2763, 2756, 2765, 2760, 2757, 2768, 2762,
- 2759, 2760, 2761, 2761, 2769, 2770, 2771, 2775, 2772, 2758,
- 2774, 2771, 2768, 2776, 2762, 2763, 0, 2773, 2782, 2764,
- 2763, 2777, 2765, 2774, 2778, 2768, 2783, 2780, 2781, 2770,
- 2772, 2769, 2770, 2779, 2781, 2772, 2776, 2774, 2771, 2773,
- 2776, 2784, 2778, 2777, 2773, 2779, 2780, 2785, 2777, 2787,
- 2782, 2778, 2791, 2788, 2780, 2781, 2793, 2789, 2783, 0,
- 2779, 2796, 2785, 2784, 2794, 2795, 0, 2791, 2784, 2787,
- 2796, 2797, 2798, 2806, 2785, 2788, 2787, 2799, 2793, 2791,
- 2788, 2789, 2800, 2793, 2789, 2797, 2794, 2795, 2796, 2801,
-
- 2798, 2794, 2795, 2802, 2805, 2799, 2807, 2813, 2797, 2798,
- 2816, 0, 2810, 2805, 2799, 2806, 2811, 2801, 2800, 2800,
- 2810, 2812, 2814, 2811, 2815, 2802, 2801, 2807, 2816, 2812,
- 2802, 2805, 2815, 2807, 2813, 2817, 2819, 2816, 2818, 2810,
- 2826, 2822, 2814, 2811, 2820, 2828, 2825, 2817, 2812, 2814,
- 2818, 2815, 2820, 2822, 2824, 2827, 2829, 2827, 2831, 2832,
- 2833, 2824, 2817, 2819, 2838, 2818, 2830, 2826, 2822, 2825,
- 2834, 2820, 2834, 2825, 2835, 2830, 2837, 2828, 2838, 2833,
- 2840, 2824, 2827, 2841, 2844, 0, 2832, 2833, 2829, 2843,
- 2831, 2838, 2842, 2830, 2837, 2847, 2835, 2834, 2849, 2848,
-
- 2850, 2835, 2843, 2837, 2852, 2845, 2853, 2841, 2848, 0,
- 2841, 2844, 2840, 2854, 2857, 2842, 2843, 2845, 2855, 2842,
- 2860, 2847, 2847, 2859, 2861, 2849, 2848, 2850, 2866, 2853,
- 2859, 2852, 2845, 2853, 2863, 2854, 2855, 2865, 2862, 2861,
- 2854, 2857, 2860, 2862, 2865, 2855, 2868, 2860, 2869, 2863,
- 2859, 2861, 2870, 2871, 2866, 2866, 2875, 2872, 2873, 2876,
- 2878, 2863, 2879, 2881, 2865, 2880, 2882, 2878, 2876, 2883,
- 2862, 2872, 2873, 2868, 2884, 2869, 2887, 2871, 2882, 2870,
- 2871, 2892, 2886, 2875, 2872, 2873, 2876, 2878, 2884, 2879,
- 2881, 2880, 2880, 2882, 2885, 2886, 2883, 2888, 2893, 2889,
-
- 2895, 2884, 2896, 2885, 2897, 2895, 2896, 2898, 2887, 2886,
- 2900, 2897, 2899, 2892, 2898, 0, 2901, 2902, 2901, 2903,
- 2893, 2885, 2889, 2906, 2888, 2893, 2889, 2909, 2908, 2896,
- 2913, 2897, 2895, 2899, 2898, 2911, 2912, 2911, 2919, 2899,
- 2902, 0, 2900, 2901, 2902, 2906, 2903, 2908, 2914, 2914,
- 2906, 2909, 2915, 2918, 2909, 2908, 2913, 2913, 2914, 2916,
- 2912, 2928, 2911, 2912, 2917, 2919, 2918, 0, 2916, 2920,
- 2921, 2917, 2922, 2923, 2915, 2914, 2914, 2929, 2921, 2915,
- 2918, 2923, 2920, 2924, 2925, 2922, 2916, 2926, 2928, 2925,
- 2927, 2917, 2926, 0, 2921, 2930, 2920, 2921, 2927, 2922,
-
- 2923, 2931, 2924, 2929, 2929, 2921, 2932, 0, 2933, 2934,
- 2924, 2936, 2937, 2937, 2946, 2935, 2925, 2927, 2936, 2926,
- 2934, 2930, 2930, 2939, 2941, 2947, 2942, 2931, 2931, 0,
- 2938, 2948, 2932, 2932, 2933, 2933, 2934, 2935, 2936, 2937,
- 2940, 2946, 2935, 2938, 2942, 2939, 2941, 2943, 2940, 2944,
- 2939, 2941, 2947, 2942, 2943, 2948, 2944, 2938, 2948, 2949,
- 2950, 2952, 2953, 2954, 2957, 0, 2958, 2940, 0, 2950,
- 2955, 2964, 0, 2965, 2943, 0, 2944, 2959, 2960, 2966,
- 2949, 2961, 2953, 2967, 2958, 2963, 2949, 2950, 2952, 2953,
- 2954, 2957, 2955, 2958, 2963, 2959, 2960, 2955, 2964, 2961,
-
- 2965, 2967, 2966, 2968, 2959, 2960, 2966, 2969, 2961, 2970,
- 2967, 2968, 2963, 2971, 2973, 2974, 2975, 0, 2971, 2980,
- 2983, 2970, 2979, 2969, 2981, 2984, 2986, 2985, 2973, 2985,
- 2968, 2988, 2989, 2974, 2969, 2986, 2970, 2981, 2984, 2975,
- 2990, 2973, 2974, 2975, 2979, 2971, 2980, 2983, 2995, 2979,
- 2989, 2981, 2984, 2986, 2985, 2990, 2996, 2998, 2988, 2989,
- 2994, 2999, 2994, 3001, 2998, 3003, 0, 2990, 3008, 3005,
- 2995, 3003, 3006, 3015, 2996, 2995, 3007, 0, 3001, 3010,
- 0, 3016, 3017, 2996, 2998, 3012, 3008, 2994, 3023, 0,
- 3001, 3005, 3003, 2999, 3006, 3008, 3005, 3011, 3012, 3006,
-
- 3015, 3010, 3007, 3007, 3013, 3018, 3010, 3013, 3016, 3017,
- 3019, 3011, 3012, 3020, 3021, 3026, 3024, 3019, 3027, 3029,
- 3023, 3020, 3025, 3018, 3011, 3029, 3031, 3027, 3030, 3032,
- 3013, 3013, 3018, 3028, 3013, 3031, 3021, 3019, 3024, 3034,
- 3020, 3021, 3026, 3024, 3025, 3027, 3029, 3036, 3028, 3025,
- 3030, 3037, 3033, 3031, 3033, 3030, 3039, 3040, 3038, 3041,
- 3028, 3032, 3044, 3042, 3046, 3040, 3034, 3048, 0, 3044,
- 3036, 3041, 3051, 3037, 3036, 3042, 0, 3084, 3037, 3033,
- 3038, 3048, 3039, 3039, 3040, 3038, 3041, 3049, 3050, 3044,
- 3042, 3046, 3052, 3053, 3048, 3051, 3056, 3054, 3055, 3051,
-
- 3057, 3049, 3050, 3058, 3053, 3054, 3062, 3057, 3059, 3084,
- 3052, 3066, 3060, 3067, 3049, 3050, 3068, 3055, 3056, 3052,
- 3053, 3060, 3072, 3056, 3054, 3055, 3059, 3057, 3063, 3058,
- 3058, 3061, 3061, 3062, 3067, 3059, 3063, 3074, 3066, 3060,
- 3067, 3070, 3075, 3068, 3076, 3077, 0, 3070, 3074, 3072,
- 3081, 3078, 3082, 3075, 3086, 3063, 3077, 3083, 3061, 3082,
- 3088, 3085, 3086, 3089, 3074, 3085, 3076, 3091, 3070, 3075,
- 3093, 3076, 3077, 3078, 3090, 3083, 3089, 3081, 3078, 3082,
- 3100, 3086, 3090, 3096, 3083, 3095, 3088, 3088, 3085, 3097,
- 3089, 3099, 3095, 3101, 3091, 3104, 3099, 3102, 3103, 3106,
-
- 3108, 3090, 3093, 3105, 3112, 3103, 3107, 3100, 3110, 3102,
- 0, 3097, 3095, 3107, 3104, 3096, 3097, 3106, 3099, 3105,
- 3101, 3109, 3104, 3110, 3102, 3103, 3106, 3111, 3113, 3109,
- 3105, 3112, 3108, 3107, 3111, 3110, 3114, 3115, 0, 3116,
- 3113, 3104, 3120, 3121, 3122, 3123, 3125, 3124, 3109, 0,
- 3121, 0, 3129, 3126, 3111, 3113, 3132, 3120, 3134, 3128,
- 3114, 3115, 3126, 3114, 3115, 3116, 3116, 3130, 0, 3120,
- 3121, 3124, 3123, 0, 3124, 3131, 3122, 3136, 3125, 3129,
- 3126, 3128, 3139, 3131, 3137, 3134, 3128, 3140, 3132, 3130,
- 3133, 3133, 3136, 3137, 3130, 3138, 3139, 3138, 3141, 3142,
-
- 3133, 3143, 3131, 3145, 3136, 3146, 3141, 3147, 0, 3139,
- 3142, 3137, 3151, 3148, 3140, 3150, 3149, 3133, 3133, 3143,
- 3152, 3153, 3138, 3154, 3155, 3141, 3142, 3157, 3143, 3149,
- 3145, 3158, 3146, 3160, 3147, 3148, 3162, 3150, 3155, 3151,
- 3148, 3164, 3150, 3149, 3156, 3156, 3168, 3152, 3153, 3164,
- 3154, 3155, 3166, 3158, 3168, 3170, 3167, 3166, 3158, 3157,
- 3160, 3167, 3169, 3162, 3172, 3173, 3173, 3169, 3164, 3174,
- 3177, 3156, 3175, 3168, 3178, 3179, 3182, 3174, 0, 3166,
- 3176, 3170, 3170, 3167, 3181, 3175, 3184, 3176, 3177, 3169,
- 3185, 3172, 3173, 3181, 3184, 3189, 3174, 3177, 3183, 3175,
-
- 3188, 3178, 3179, 3191, 3192, 3183, 3188, 3176, 3182, 3194,
- 3193, 3181, 3185, 3184, 0, 3196, 3197, 3185, 3195, 0,
- 0, 3200, 3189, 3193, 3198, 3183, 3192, 3188, 3201, 3202,
- 3191, 3192, 3203, 3195, 3196, 3204, 3202, 3193, 3205, 3203,
- 3206, 3194, 3196, 3197, 3200, 3195, 3198, 3208, 3200, 3213,
- 3201, 3198, 3209, 3205, 3221, 3201, 3202, 3204, 3213, 3203,
- 3209, 3206, 3204, 3210, 3211, 3205, 3208, 3206, 0, 3214,
- 3210, 3211, 3215, 3215, 3208, 3216, 3213, 3225, 0, 3209,
- 3214, 3216, 3215, 3217, 3219, 3220, 3221, 3222, 3224, 3226,
- 3210, 3211, 3220, 3230, 3231, 3224, 3214, 3237, 0, 3215,
-
- 3215, 3225, 3216, 3226, 3225, 3217, 3219, 3232, 0, 3222,
- 3217, 3219, 3220, 3238, 3222, 3224, 3226, 3239, 3240, 3243,
- 3230, 3231, 3244, 3244, 3237, 3239, 3245, 3245, 0, 3246,
- 3232, 3247, 3247, 0, 3232, 3238, 3248, 3252, 0, 3250,
- 3238, 3253, 0, 3257, 3239, 3240, 3243, 3251, 0, 3254,
- 3253, 3244, 0, 3260, 3261, 3245, 3246, 0, 0, 3248,
- 3247, 3250, 3254, 3248, 3252, 3251, 3250, 3266, 3253, 3257,
- 3257, 3258, 3259, 3267, 3251, 3260, 3254, 3262, 3258, 3259,
- 3260, 3261, 3271, 3265, 3262, 3265, 3272, 3266, 3268, 3269,
- 3273, 3271, 3275, 3274, 3266, 3276, 3267, 3277, 3258, 3259,
-
- 3267, 3269, 3278, 3279, 3262, 3282, 3268, 3281, 3272, 3271,
- 3265, 3274, 3281, 3272, 3278, 3268, 3269, 3273, 3275, 3275,
- 3274, 3285, 3276, 3280, 3277, 3279, 3280, 3285, 3284, 3278,
- 3279, 3283, 3286, 3283, 3287, 3288, 3289, 3282, 3290, 3281,
- 3284, 3280, 3292, 3288, 3291, 3293, 3295, 3298, 3285, 3300,
- 3280, 3304, 3294, 3280, 3286, 3284, 3287, 3301, 3283, 3286,
- 3305, 3287, 3288, 3289, 3294, 3291, 3306, 3307, 3295, 3292,
- 3290, 3291, 3293, 3295, 3298, 3301, 3300, 3309, 3304, 3294,
- 3310, 3311, 3312, 3315, 3301, 3313, 3313, 3305, 3316, 3317,
- 3319, 3320, 3322, 3306, 3307, 3318, 3324, 3329, 3320, 3328,
-
- 0, 3315, 3325, 3323, 3309, 3319, 3326, 3310, 3311, 3312,
- 3315, 3323, 3313, 3318, 3325, 3316, 3317, 3319, 3320, 3322,
- 3326, 3327, 3318, 3324, 3329, 3328, 3328, 3331, 3332, 3325,
- 3323, 3335, 3336, 3326, 3337, 3337, 3327, 3338, 3339, 3331,
- 3335, 3342, 3341, 3345, 3343, 3344, 0, 3339, 3327, 3347,
- 0, 3345, 3353, 3346, 3331, 3332, 3336, 3343, 3335, 3336,
- 3347, 3337, 3346, 3338, 3338, 3339, 3341, 3344, 3349, 3341,
- 3345, 3343, 3344, 3342, 3350, 3353, 3347, 3366, 3354, 3353,
- 3346, 3357, 3357, 3367, 3370, 3371, 3372, 3374, 3377, 3349,
- 3354, 0, 3350, 3376, 3378, 3349, 3379, 3376, 3370, 3366,
-
- 3384, 3350, 0, 3379, 3366, 3354, 3377, 3367, 3357, 3381,
- 3367, 3370, 3371, 3372, 3374, 3377, 3384, 3378, 3385, 3386,
- 3376, 3378, 3381, 3379, 3383, 3387, 3390, 3384, 3383, 3388,
- 3391, 3392, 3397, 3389, 3390, 0, 3381, 3387, 3394, 3391,
- 3385, 3393, 3392, 3393, 3386, 3385, 3386, 3389, 3395, 3396,
- 3394, 3383, 3387, 3390, 3397, 3388, 3388, 3391, 3392, 3397,
- 3389, 3398, 3399, 3400, 3396, 3394, 3395, 3398, 3393, 3402,
- 3401, 3407, 3406, 3408, 3409, 3395, 3396, 3401, 3407, 3410,
- 3421, 3411, 3412, 3413, 3399, 3406, 3414, 3416, 3398, 3399,
- 3400, 3402, 3409, 3417, 3414, 3415, 3402, 3401, 3407, 3406,
-
- 3408, 3409, 3415, 3418, 3423, 3420, 3410, 3411, 3411, 3412,
- 3413, 3416, 3421, 3414, 3416, 3417, 3419, 3420, 3419, 3423,
- 3417, 3422, 3415, 3424, 3425, 3418, 3426, 3427, 3429, 3430,
- 3418, 3423, 3420, 3426, 3422, 3432, 3431, 3434, 3436, 3439,
- 3441, 3430, 3440, 3419, 3431, 3424, 3443, 3436, 3422, 3434,
- 3424, 3425, 3442, 3426, 3427, 3429, 3430, 3444, 3445, 3441,
- 3442, 3446, 3432, 3431, 3434, 3436, 3439, 3441, 3440, 3440,
- 3448, 3445, 3447, 3449, 3451, 3446, 3454, 3455, 3443, 3442,
- 3447, 3457, 3454, 3458, 3455, 3445, 3460, 3461, 3446, 3444,
- 3462, 3463, 3448, 3460, 3457, 3468, 3476, 3448, 3462, 3447,
-
- 3449, 3451, 3464, 3454, 3455, 3463, 3458, 3465, 3457, 3461,
- 3458, 3466, 3472, 3460, 3461, 3465, 3464, 3462, 3463, 3467,
- 3471, 3472, 3468, 3473, 3474, 3484, 3475, 3471, 3476, 3464,
- 3477, 3473, 3478, 3466, 3465, 0, 3479, 3481, 3466, 3472,
- 3480, 3467, 3482, 3485, 3486, 3481, 3467, 3471, 3475, 3488,
- 3473, 3474, 3484, 3475, 3478, 3490, 3477, 3477, 3479, 3478,
- 3489, 3491, 3480, 3479, 3481, 3485, 3493, 3480, 3489, 3491,
- 3485, 3486, 3488, 3492, 3482, 3490, 3488, 3494, 3495, 0,
- 3497, 3492, 3490, 3499, 0, 3494, 3502, 3489, 3491, 3501,
- 3500, 3503, 3495, 3500, 3502, 3504, 0, 3505, 3493, 3503,
-
- 3492, 3507, 0, 3506, 3494, 3495, 3497, 3497, 3500, 3504,
- 3499, 3501, 3510, 3502, 3512, 3507, 3501, 3500, 3503, 3513,
- 3500, 3511, 3504, 3505, 3505, 3506, 3509, 3509, 3507, 3511,
- 3506, 3515, 3514, 3517, 3516, 3518, 3520, 0, 3510, 3510,
- 3512, 3512, 3516, 3519, 3521, 3513, 3513, 3522, 3511, 3527,
- 3524, 3515, 0, 3509, 3514, 3536, 0, 3518, 3515, 3514,
- 3517, 3516, 3518, 3520, 3521, 3523, 3530, 3522, 3519, 3531,
- 3519, 3521, 3524, 3523, 3522, 3525, 3527, 3524, 3528, 3532,
- 3540, 3533, 3536, 3525, 3534, 3543, 3528, 3532, 3530, 3533,
- 3537, 3531, 3523, 3530, 3539, 3538, 3531, 3544, 3537, 3541,
-
- 3553, 3547, 3525, 3538, 3554, 3528, 3532, 3540, 3533, 3545,
- 3534, 3534, 3543, 3550, 0, 0, 0, 3537, 0, 3541,
- 3539, 3539, 3538, 3547, 3544, 3551, 3541, 3553, 3547, 3545,
- 3552, 3554, 0, 3551, 0, 3550, 3545, 0, 3552, 0,
- 3550, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 3551, 0, 0, 0, 0, 3552, 3558, 3558,
- 3558, 3558, 3558, 3558, 3558, 3559, 3559, 3559, 3559, 3559,
- 3559, 3559, 3560, 3560, 3560, 3560, 3560, 3560, 3560, 3561,
- 3561, 3561, 3561, 3561, 3561, 3561, 3562, 3562, 3562, 3562,
- 3562, 3562, 3562, 3563, 3563, 3563, 3563, 3563, 3563, 3563,
-
- 3564, 3564, 3564, 3564, 3564, 3564, 3564, 3566, 3566, 0,
- 3566, 3566, 3566, 3566, 3567, 3567, 0, 0, 0, 3567,
- 3567, 3568, 3568, 0, 0, 3568, 0, 3568, 3569, 0,
- 0, 0, 0, 0, 3569, 3570, 3570, 0, 0, 0,
- 3570, 3570, 3571, 0, 0, 0, 0, 0, 3571, 3572,
- 3572, 0, 3572, 3572, 3572, 3572, 3573, 0, 0, 0,
- 0, 0, 3573, 3574, 3574, 0, 0, 0, 3574, 3574,
- 3575, 3575, 0, 3575, 3575, 3575, 3575, 3557, 3557, 3557,
- 3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557,
- 3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557,
-
- 3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557,
- 3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557,
- 3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557,
- 3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557,
- 3557, 3557, 3557, 3557
+ 107, 106, 108, 41, 102, 109, 102, 41, 41, 151,
+ 228, 108, 109, 107, 106, 41, 113, 225, 115, 102,
+ 41, 114, 18, 41, 108, 102, 230, 107, 114, 108,
+ 41, 102, 109, 102, 41, 41, 110, 110, 108, 113,
+ 115, 116, 228, 113, 110, 115, 118, 17, 114, 119,
+ 117, 0, 110, 117, 116, 178, 178, 119, 230, 120,
+
+ 0, 0, 0, 110, 110, 121, 117, 117, 116, 121,
+ 118, 110, 124, 0, 117, 123, 119, 117, 118, 120,
+ 117, 120, 122, 125, 126, 121, 120, 122, 123, 121,
+ 122, 129, 121, 117, 117, 124, 121, 118, 126, 124,
+ 127, 128, 123, 125, 132, 129, 120, 131, 130, 122,
+ 125, 126, 121, 132, 122, 130, 133, 134, 129, 128,
+ 127, 0, 137, 0, 140, 135, 134, 127, 128, 135,
+ 131, 132, 0, 136, 131, 130, 140, 0, 138, 133,
+ 136, 141, 141, 133, 134, 138, 139, 135, 137, 137,
+ 142, 140, 135, 144, 150, 139, 135, 146, 142, 143,
+
+ 136, 139, 150, 0, 149, 138, 0, 144, 141, 139,
+ 143, 0, 146, 139, 143, 149, 147, 142, 148, 152,
+ 144, 150, 139, 143, 146, 157, 143, 0, 139, 148,
+ 152, 149, 154, 147, 157, 155, 147, 143, 148, 156,
+ 153, 143, 147, 147, 0, 148, 152, 154, 158, 153,
+ 0, 159, 157, 0, 156, 0, 148, 155, 0, 154,
+ 147, 153, 155, 147, 159, 153, 156, 153, 173, 165,
+ 158, 165, 165, 180, 165, 158, 153, 170, 159, 170,
+ 170, 171, 170, 171, 171, 179, 171, 180, 153, 181,
+ 182, 175, 173, 175, 175, 173, 175, 184, 181, 183,
+
+ 186, 185, 182, 187, 0, 180, 183, 179, 186, 188,
+ 257, 232, 179, 184, 180, 187, 181, 182, 183, 171,
+ 185, 190, 189, 192, 184, 192, 183, 186, 185, 189,
+ 187, 188, 191, 183, 193, 257, 188, 257, 191, 190,
+ 194, 196, 200, 232, 198, 196, 201, 200, 190, 189,
+ 192, 205, 0, 199, 201, 202, 193, 203, 205, 208,
+ 204, 193, 196, 0, 191, 191, 194, 194, 199, 196,
+ 198, 198, 196, 201, 200, 204, 206, 202, 205, 203,
+ 199, 208, 202, 209, 203, 210, 208, 204, 207, 196,
+ 197, 211, 213, 0, 209, 197, 0, 0, 210, 212,
+
+ 197, 213, 212, 211, 206, 0, 197, 197, 206, 221,
+ 209, 207, 210, 197, 212, 207, 214, 197, 211, 213,
+ 215, 0, 197, 217, 234, 218, 212, 197, 219, 212,
+ 222, 206, 218, 197, 197, 221, 221, 224, 214, 219,
+ 226, 222, 215, 214, 224, 217, 231, 215, 216, 229,
+ 217, 216, 218, 216, 226, 219, 234, 227, 236, 0,
+ 0, 233, 222, 227, 224, 216, 233, 216, 222, 231,
+ 0, 229, 226, 231, 216, 216, 229, 235, 216, 236,
+ 216, 226, 237, 0, 227, 236, 233, 238, 233, 237,
+ 0, 235, 216, 233, 216, 242, 239, 240, 241, 244,
+
+ 243, 247, 245, 252, 235, 239, 247, 0, 238, 237,
+ 239, 244, 241, 245, 238, 248, 240, 242, 243, 254,
+ 250, 246, 242, 239, 240, 241, 244, 243, 246, 245,
+ 249, 251, 239, 247, 256, 252, 251, 248, 255, 249,
+ 253, 253, 248, 250, 258, 255, 259, 250, 246, 253,
+ 260, 254, 258, 261, 262, 263, 256, 249, 251, 264,
+ 268, 256, 262, 265, 267, 255, 259, 253, 253, 266,
+ 269, 258, 270, 259, 264, 0, 265, 0, 272, 273,
+ 271, 262, 260, 268, 271, 261, 264, 263, 0, 270,
+ 265, 267, 268, 274, 273, 266, 266, 270, 275, 270,
+
+ 272, 274, 269, 0, 276, 272, 273, 271, 277, 278,
+ 268, 276, 279, 278, 280, 281, 270, 275, 282, 283,
+ 274, 284, 289, 286, 289, 275, 285, 290, 287, 292,
+ 277, 276, 286, 284, 291, 277, 278, 281, 288, 285,
+ 282, 287, 281, 293, 279, 282, 280, 296, 284, 289,
+ 286, 283, 297, 285, 292, 287, 292, 288, 291, 290,
+ 299, 291, 295, 0, 298, 288, 300, 302, 303, 293,
+ 293, 295, 299, 296, 296, 298, 301, 306, 297, 297,
+ 304, 308, 310, 307, 313, 302, 303, 299, 304, 295,
+ 300, 298, 309, 300, 302, 303, 307, 312, 311, 301,
+
+ 314, 316, 315, 301, 0, 0, 313, 304, 316, 306,
+ 307, 313, 320, 308, 310, 311, 318, 309, 317, 309,
+ 322, 311, 318, 312, 312, 311, 315, 317, 316, 322,
+ 319, 321, 314, 323, 315, 326, 329, 325, 320, 320,
+ 324, 327, 311, 318, 319, 317, 325, 322, 324, 328,
+ 327, 329, 330, 315, 331, 321, 323, 319, 321, 332,
+ 323, 326, 326, 329, 325, 334, 328, 324, 327, 336,
+ 0, 335, 0, 328, 332, 0, 328, 0, 331, 361,
+ 335, 331, 338, 334, 330, 0, 332, 0, 0, 343,
+ 0, 336, 334, 328, 333, 0, 336, 333, 335, 337,
+
+ 340, 337, 333, 333, 333, 333, 338, 344, 339, 338,
+ 0, 361, 333, 343, 337, 340, 343, 337, 341, 341,
+ 342, 333, 339, 337, 333, 342, 337, 340, 337, 333,
+ 333, 333, 333, 349, 344, 339, 346, 345, 347, 0,
+ 345, 337, 351, 341, 337, 341, 341, 345, 346, 0,
+ 347, 349, 342, 350, 352, 356, 348, 348, 0, 353,
+ 349, 354, 355, 346, 345, 347, 348, 345, 366, 351,
+ 358, 350, 359, 0, 355, 357, 352, 356, 358, 359,
+ 350, 352, 356, 348, 348, 353, 353, 354, 354, 355,
+ 357, 360, 0, 362, 364, 362, 370, 358, 372, 359,
+
+ 366, 364, 357, 360, 362, 365, 367, 368, 375, 370,
+ 374, 362, 369, 368, 369, 0, 372, 397, 360, 362,
+ 362, 364, 362, 370, 373, 372, 408, 365, 367, 368,
+ 371, 362, 365, 367, 368, 375, 369, 376, 362, 369,
+ 368, 369, 374, 371, 380, 379, 371, 383, 371, 397,
+ 373, 373, 379, 381, 371, 382, 386, 371, 408, 376,
+ 383, 0, 380, 385, 376, 381, 0, 382, 380, 386,
+ 371, 380, 379, 371, 383, 371, 377, 389, 377, 385,
+ 381, 390, 382, 386, 377, 388, 390, 385, 377, 380,
+ 385, 393, 392, 377, 0, 389, 377, 388, 392, 393,
+
+ 391, 396, 377, 377, 389, 377, 385, 391, 406, 396,
+ 394, 377, 388, 390, 395, 377, 398, 398, 393, 392,
+ 377, 391, 394, 377, 378, 400, 378, 391, 396, 399,
+ 406, 401, 395, 405, 391, 406, 399, 394, 400, 378,
+ 401, 395, 378, 398, 378, 405, 378, 413, 435, 0,
+ 378, 378, 400, 378, 403, 404, 399, 0, 0, 0,
+ 405, 403, 404, 401, 0, 407, 378, 401, 0, 378,
+ 409, 378, 0, 378, 387, 387, 402, 407, 411, 413,
+ 435, 403, 404, 410, 387, 387, 387, 387, 387, 415,
+ 410, 387, 407, 411, 402, 412, 409, 409, 402, 387,
+
+ 415, 387, 387, 402, 414, 411, 414, 416, 412, 0,
+ 410, 387, 387, 387, 387, 387, 415, 418, 387, 417,
+ 417, 402, 412, 423, 418, 419, 420, 421, 0, 416,
+ 422, 414, 0, 427, 416, 425, 419, 420, 424, 424,
+ 421, 428, 0, 440, 418, 423, 426, 0, 417, 428,
+ 423, 0, 419, 420, 421, 422, 424, 422, 425, 427,
+ 427, 426, 425, 424, 429, 424, 424, 430, 428, 426,
+ 431, 432, 436, 426, 437, 440, 429, 0, 430, 431,
+ 438, 433, 433, 424, 432, 0, 439, 444, 426, 442,
+ 436, 429, 443, 433, 430, 433, 437, 431, 432, 436,
+
+ 433, 437, 445, 438, 439, 0, 441, 438, 433, 433,
+ 442, 444, 441, 439, 444, 443, 442, 447, 0, 443,
+ 433, 446, 433, 434, 445, 449, 448, 450, 446, 445,
+ 452, 434, 434, 441, 455, 434, 434, 451, 453, 434,
+ 448, 456, 454, 447, 447, 434, 455, 456, 446, 450,
+ 434, 451, 449, 448, 450, 457, 452, 452, 434, 434,
+ 460, 455, 434, 434, 451, 454, 434, 458, 456, 454,
+ 453, 459, 462, 461, 465, 460, 463, 457, 464, 459,
+ 461, 462, 457, 468, 466, 0, 470, 460, 471, 458,
+ 469, 463, 470, 467, 458, 0, 465, 459, 459, 462,
+
+ 461, 465, 464, 463, 474, 464, 459, 466, 467, 468,
+ 468, 466, 469, 470, 471, 471, 472, 469, 476, 477,
+ 467, 472, 478, 479, 476, 481, 480, 482, 478, 483,
+ 474, 474, 480, 485, 482, 485, 0, 489, 477, 486,
+ 491, 479, 485, 472, 483, 476, 477, 481, 486, 478,
+ 479, 487, 481, 480, 482, 488, 483, 490, 487, 492,
+ 485, 493, 485, 495, 494, 497, 486, 494, 488, 489,
+ 499, 501, 491, 500, 493, 490, 496, 497, 487, 498,
+ 500, 492, 488, 494, 490, 502, 492, 495, 493, 496,
+ 495, 494, 497, 504, 494, 501, 503, 498, 501, 505,
+
+ 500, 506, 499, 496, 505, 508, 498, 506, 502, 503,
+ 507, 511, 509, 512, 510, 504, 513, 502, 516, 0,
+ 504, 512, 511, 503, 509, 516, 505, 508, 506, 0,
+ 513, 519, 508, 507, 520, 502, 510, 507, 511, 509,
+ 512, 510, 520, 513, 514, 516, 517, 528, 518, 514,
+ 521, 514, 517, 522, 519, 525, 523, 514, 519, 514,
+ 518, 520, 514, 514, 522, 528, 0, 525, 0, 514,
+ 514, 514, 521, 517, 528, 518, 514, 521, 514, 523,
+ 522, 524, 525, 523, 514, 524, 514, 526, 527, 514,
+ 514, 527, 529, 530, 533, 531, 514, 0, 533, 527,
+
+ 535, 532, 529, 524, 534, 530, 531, 526, 524, 526,
+ 537, 534, 524, 0, 526, 527, 541, 536, 527, 536,
+ 530, 533, 531, 538, 529, 532, 535, 535, 532, 529,
+ 539, 534, 542, 543, 526, 538, 537, 537, 543, 540,
+ 542, 544, 541, 541, 536, 539, 545, 546, 548, 547,
+ 538, 540, 550, 0, 551, 546, 553, 539, 0, 542,
+ 543, 547, 552, 544, 545, 554, 540, 560, 544, 548,
+ 550, 555, 558, 545, 546, 548, 547, 551, 556, 550,
+ 554, 551, 557, 555, 558, 552, 556, 559, 553, 552,
+ 560, 562, 554, 561, 560, 557, 559, 563, 555, 558,
+
+ 563, 565, 564, 566, 567, 556, 568, 561, 0, 557,
+ 569, 0, 570, 571, 559, 572, 562, 0, 562, 567,
+ 561, 564, 573, 574, 563, 569, 571, 572, 565, 564,
+ 581, 567, 584, 0, 576, 566, 570, 569, 568, 570,
+ 571, 575, 572, 579, 573, 576, 578, 574, 575, 573,
+ 574, 575, 577, 580, 582, 583, 586, 577, 585, 575,
+ 578, 576, 581, 585, 584, 586, 587, 589, 575, 0,
+ 579, 588, 587, 578, 590, 575, 592, 591, 575, 0,
+ 580, 582, 583, 586, 577, 591, 588, 593, 594, 596,
+ 585, 589, 598, 587, 589, 592, 590, 596, 588, 597,
+
+ 599, 590, 595, 592, 591, 600, 595, 599, 601, 602,
+ 594, 593, 603, 606, 593, 594, 596, 601, 604, 606,
+ 607, 605, 597, 609, 598, 603, 597, 599, 600, 595,
+ 608, 602, 600, 605, 609, 601, 602, 611, 608, 603,
+ 606, 612, 607, 613, 604, 604, 610, 607, 605, 615,
+ 609, 616, 617, 610, 618, 0, 613, 608, 615, 621,
+ 619, 617, 620, 612, 624, 618, 614, 625, 612, 611,
+ 613, 614, 621, 610, 614, 614, 615, 616, 616, 617,
+ 622, 618, 619, 627, 620, 625, 621, 619, 626, 620,
+ 614, 628, 622, 614, 625, 629, 624, 631, 614, 630,
+
+ 632, 614, 614, 633, 637, 627, 627, 622, 631, 632,
+ 627, 634, 626, 628, 635, 626, 638, 644, 628, 629,
+ 0, 630, 629, 633, 631, 634, 630, 632, 636, 639,
+ 633, 637, 627, 640, 638, 636, 635, 639, 634, 640,
+ 641, 635, 643, 638, 642, 645, 646, 647, 647, 644,
+ 648, 641, 650, 649, 655, 636, 639, 643, 0, 0,
+ 640, 650, 642, 653, 657, 651, 645, 641, 652, 643,
+ 646, 642, 645, 646, 648, 649, 647, 648, 651, 650,
+ 649, 652, 656, 654, 658, 653, 655, 659, 0, 659,
+ 653, 654, 651, 660, 661, 652, 657, 666, 662, 661,
+
+ 665, 0, 663, 667, 656, 666, 0, 670, 658, 656,
+ 654, 658, 662, 664, 659, 660, 663, 668, 0, 678,
+ 660, 667, 671, 672, 666, 662, 661, 664, 664, 663,
+ 667, 669, 665, 670, 670, 664, 673, 674, 669, 668,
+ 664, 675, 671, 672, 668, 678, 678, 0, 677, 671,
+ 672, 673, 676, 677, 664, 664, 675, 679, 669, 679,
+ 673, 680, 676, 673, 681, 682, 683, 684, 675, 674,
+ 0, 688, 681, 685, 676, 683, 684, 686, 673, 676,
+ 677, 690, 685, 689, 679, 686, 680, 693, 680, 676,
+ 682, 681, 682, 683, 684, 687, 693, 691, 697, 690,
+
+ 685, 692, 687, 688, 686, 696, 689, 694, 690, 691,
+ 689, 695, 698, 692, 693, 694, 699, 696, 700, 698,
+ 695, 702, 687, 701, 691, 0, 704, 702, 692, 699,
+ 697, 701, 696, 700, 694, 695, 703, 705, 695, 698,
+ 706, 0, 713, 699, 703, 700, 705, 695, 702, 704,
+ 701, 706, 707, 704, 709, 711, 708, 708, 710, 712,
+ 715, 707, 709, 703, 705, 708, 710, 706, 713, 713,
+ 714, 0, 712, 715, 717, 0, 718, 711, 719, 707,
+ 716, 709, 711, 708, 708, 710, 712, 715, 716, 718,
+ 717, 720, 722, 714, 723, 724, 721, 714, 727, 0,
+
+ 719, 717, 720, 718, 721, 719, 722, 716, 725, 726,
+ 728, 730, 726, 732, 723, 729, 731, 724, 720, 722,
+ 727, 723, 724, 721, 729, 727, 732, 733, 725, 734,
+ 735, 730, 728, 736, 731, 725, 726, 728, 730, 737,
+ 732, 738, 729, 731, 734, 733, 739, 740, 744, 741,
+ 0, 746, 743, 748, 733, 736, 734, 742, 743, 739,
+ 736, 741, 735, 737, 738, 740, 737, 747, 738, 745,
+ 742, 748, 754, 739, 740, 744, 741, 745, 746, 743,
+ 748, 751, 750, 753, 742, 752, 0, 754, 756, 747,
+ 750, 755, 752, 755, 747, 745, 745, 756, 757, 754,
+
+ 758, 759, 760, 0, 745, 761, 753, 761, 765, 750,
+ 753, 760, 752, 751, 768, 756, 762, 0, 755, 758,
+ 765, 759, 771, 762, 768, 772, 774, 758, 759, 760,
+ 757, 774, 761, 779, 0, 765, 775, 0, 776, 777,
+ 771, 768, 0, 762, 763, 778, 772, 763, 784, 771,
+ 777, 763, 772, 774, 763, 784, 776, 775, 780, 779,
+ 779, 763, 763, 775, 763, 776, 777, 781, 778, 763,
+ 782, 763, 778, 783, 763, 784, 785, 788, 763, 782,
+ 787, 763, 0, 781, 780, 780, 783, 787, 763, 763,
+ 789, 763, 790, 0, 781, 791, 789, 782, 793, 788,
+
+ 783, 790, 792, 795, 788, 792, 794, 787, 785, 786,
+ 786, 795, 786, 0, 793, 786, 796, 789, 791, 790,
+ 786, 793, 791, 0, 802, 793, 786, 786, 794, 792,
+ 795, 799, 797, 794, 804, 786, 786, 786, 796, 786,
+ 800, 793, 786, 796, 797, 800, 798, 786, 798, 801,
+ 802, 802, 803, 786, 786, 799, 804, 805, 799, 797,
+ 806, 804, 807, 808, 803, 809, 810, 812, 0, 801,
+ 0, 814, 800, 798, 813, 812, 801, 817, 814, 803,
+ 811, 816, 806, 805, 805, 808, 807, 806, 815, 807,
+ 808, 810, 809, 810, 812, 811, 815, 813, 814, 818,
+
+ 816, 813, 820, 817, 817, 819, 822, 811, 816, 823,
+ 821, 818, 824, 825, 823, 815, 826, 827, 819, 821,
+ 829, 822, 827, 830, 832, 836, 818, 834, 820, 820,
+ 831, 833, 819, 822, 838, 825, 823, 821, 831, 835,
+ 825, 837, 829, 826, 824, 839, 836, 829, 840, 827,
+ 0, 842, 836, 833, 843, 830, 832, 831, 833, 834,
+ 837, 838, 841, 835, 844, 845, 835, 840, 837, 846,
+ 848, 841, 839, 842, 845, 840, 849, 843, 842, 847,
+ 846, 843, 850, 851, 844, 852, 855, 847, 860, 841,
+ 0, 844, 845, 856, 849, 857, 846, 848, 857, 853,
+
+ 859, 850, 858, 849, 855, 0, 847, 853, 861, 850,
+ 851, 856, 860, 855, 863, 860, 863, 852, 859, 862,
+ 856, 864, 857, 865, 858, 867, 853, 859, 866, 858,
+ 861, 868, 862, 866, 890, 861, 870, 865, 867, 864,
+ 873, 863, 869, 871, 870, 877, 862, 874, 864, 873,
+ 865, 876, 867, 872, 869, 874, 872, 868, 868, 878,
+ 866, 871, 879, 870, 0, 878, 890, 873, 881, 869,
+ 871, 874, 877, 880, 874, 881, 876, 0, 876, 880,
+ 872, 882, 874, 885, 879, 883, 878, 884, 882, 879,
+ 883, 889, 886, 887, 884, 881, 886, 888, 892, 889,
+
+ 880, 885, 896, 891, 893, 900, 888, 897, 882, 894,
+ 885, 899, 883, 892, 884, 893, 887, 894, 889, 886,
+ 887, 891, 895, 896, 888, 892, 897, 898, 905, 896,
+ 891, 893, 900, 899, 897, 895, 894, 901, 899, 902,
+ 898, 903, 911, 904, 906, 901, 902, 905, 907, 895,
+ 904, 906, 908, 907, 898, 905, 909, 912, 910, 903,
+ 908, 914, 0, 909, 901, 910, 902, 913, 903, 915,
+ 904, 906, 919, 917, 911, 907, 918, 916, 925, 908,
+ 913, 0, 915, 909, 916, 910, 924, 922, 926, 912,
+ 920, 923, 921, 914, 913, 919, 915, 923, 920, 919,
+
+ 921, 927, 928, 930, 916, 917, 932, 921, 918, 922,
+ 925, 928, 924, 924, 922, 931, 929, 920, 923, 921,
+ 926, 935, 931, 933, 934, 927, 936, 921, 927, 928,
+ 929, 936, 933, 932, 935, 930, 935, 937, 0, 938,
+ 0, 939, 931, 929, 0, 935, 934, 940, 935, 937,
+ 933, 934, 940, 941, 942, 977, 945, 943, 936, 945,
+ 941, 935, 938, 935, 937, 943, 938, 939, 939, 946,
+ 949, 948, 950, 0, 940, 978, 942, 949, 950, 0,
+ 941, 942, 946, 945, 943, 948, 0, 977, 952, 953,
+ 955, 0, 954, 956, 0, 956, 946, 949, 948, 950,
+
+ 951, 0, 951, 957, 954, 971, 951, 978, 951, 958,
+ 959, 971, 953, 951, 952, 952, 953, 955, 951, 954,
+ 956, 958, 960, 959, 951, 961, 957, 951, 963, 951,
+ 957, 966, 971, 951, 962, 951, 958, 959, 961, 962,
+ 951, 964, 968, 966, 960, 951, 963, 965, 970, 960,
+ 967, 969, 961, 973, 964, 963, 979, 968, 966, 965,
+ 967, 970, 974, 972, 975, 981, 962, 0, 964, 968,
+ 965, 973, 967, 969, 965, 970, 972, 967, 969, 976,
+ 973, 986, 987, 979, 974, 975, 965, 967, 982, 974,
+ 972, 975, 983, 982, 984, 0, 986, 981, 988, 989,
+
+ 983, 976, 0, 984, 987, 990, 976, 0, 986, 987,
+ 994, 988, 991, 998, 989, 982, 995, 992, 0, 983,
+ 0, 984, 985, 994, 995, 988, 989, 985, 0, 985,
+ 996, 990, 990, 999, 991, 985, 992, 994, 996, 991,
+ 985, 985, 993, 995, 992, 998, 0, 985, 985, 985,
+ 997, 1000, 1005, 993, 985, 999, 985, 996, 1006, 1002,
+ 999, 997, 985, 1001, 1003, 1009, 1000, 985, 985, 993,
+ 1002, 1004, 1001, 1003, 985, 1007, 1010, 997, 1000, 1005,
+ 1004, 1006, 1007, 1012, 1011, 1006, 1002, 1013, 1014, 0,
+ 1001, 1003, 1011, 1021, 1015, 1018, 1016, 1009, 1004, 1019,
+
+ 1010, 1013, 1007, 1010, 1016, 1012, 1022, 1020, 1024, 0,
+ 1012, 1011, 1033, 1018, 1013, 1026, 1015, 1019, 1020, 1023,
+ 1014, 1015, 1018, 1016, 1022, 1021, 1019, 1023, 1026, 1025,
+ 1024, 1027, 1028, 1022, 1020, 1024, 1025, 1029, 1027, 1030,
+ 1031, 1032, 1026, 1035, 1033, 1038, 1023, 1028, 0, 1037,
+ 0, 1032, 1038, 1039, 1035, 1029, 1025, 1030, 1027, 1028,
+ 1041, 1031, 1037, 1040, 1029, 1042, 1030, 1031, 1032, 1043,
+ 1035, 1040, 1038, 1041, 1042, 1039, 1037, 1044, 1045, 1048,
+ 1039, 1043, 1050, 1051, 1049, 1052, 1054, 1041, 1058, 1053,
+ 1040, 0, 1042, 1058, 0, 1061, 1043, 0, 1054, 1044,
+
+ 1045, 1048, 1049, 1057, 1044, 1045, 1048, 1053, 1050, 1050,
+ 1055, 1049, 1062, 1054, 1057, 1051, 1053, 1052, 1060, 1061,
+ 1058, 1060, 1061, 1064, 1055, 1062, 1063, 1065, 1066, 1067,
+ 1057, 1068, 1070, 1063, 1064, 1072, 1065, 1055, 1073, 1062,
+ 1069, 1067, 1066, 1075, 1060, 1060, 1071, 1069, 1060, 0,
+ 1064, 1073, 1076, 1063, 1065, 1066, 1067, 1072, 1071, 1078,
+ 1077, 1079, 1072, 1068, 1070, 1073, 1077, 1069, 1086, 1075,
+ 1075, 1080, 1081, 1071, 1082, 1083, 1076, 1084, 1089, 1076,
+ 1087, 1078, 1080, 1079, 1088, 1090, 1078, 1077, 1079, 1086,
+ 1081, 1087, 1084, 1093, 1092, 1086, 1082, 1083, 1080, 1081,
+
+ 1091, 1082, 1083, 1092, 1084, 1088, 1094, 1087, 1096, 1099,
+ 1089, 1088, 1090, 1095, 1098, 1100, 1096, 1093, 1091, 1097,
+ 1093, 1092, 1095, 1099, 1101, 1102, 1097, 1091, 1103, 1105,
+ 1107, 1104, 1094, 1094, 0, 1096, 1099, 1106, 1098, 1110,
+ 1095, 1098, 1111, 1109, 1112, 1113, 1097, 1100, 1110, 1111,
+ 1103, 1114, 1117, 1104, 0, 1103, 1101, 1102, 1104, 1106,
+ 1120, 1105, 1107, 1115, 1106, 1109, 1110, 1113, 1116, 1111,
+ 1109, 1118, 1113, 1121, 1117, 1119, 1112, 1122, 1114, 1117,
+ 1118, 1115, 1124, 1119, 1120, 1123, 1116, 1120, 1125, 1127,
+ 1115, 1124, 1128, 1122, 0, 1116, 1129, 1121, 1118, 1131,
+
+ 1121, 0, 1119, 1125, 1122, 1126, 1130, 1123, 1129, 1124,
+ 1132, 1135, 1123, 1126, 1133, 1125, 1134, 1138, 1132, 1143,
+ 1135, 1127, 1139, 1129, 1128, 1137, 1131, 1133, 1130, 1144,
+ 1139, 1134, 1126, 1130, 1137, 1138, 1145, 1132, 1135, 1142,
+ 1140, 1133, 1140, 1134, 1138, 0, 1143, 1142, 1144, 1139,
+ 1146, 1149, 1137, 1147, 1152, 1151, 1144, 1150, 1145, 1154,
+ 1147, 1153, 1156, 1145, 1149, 1157, 1142, 1140, 1155, 1150,
+ 1151, 1159, 1146, 0, 1158, 1155, 1152, 1146, 1149, 1153,
+ 1147, 1152, 1151, 1160, 1150, 1158, 1154, 1161, 1153, 1162,
+ 1163, 1164, 1165, 1159, 1156, 1155, 0, 1157, 1159, 1166,
+
+ 1167, 1158, 1162, 1163, 1165, 1171, 1173, 1166, 1160, 1161,
+ 1160, 1168, 1172, 1164, 1161, 1173, 1162, 1163, 1164, 1165,
+ 1167, 1169, 1174, 1168, 1175, 1172, 1166, 1167, 1176, 1169,
+ 0, 1181, 1171, 1173, 1174, 1176, 1179, 1182, 1168, 1172,
+ 1180, 1183, 1186, 1177, 0, 1175, 1192, 1184, 1169, 1174,
+ 1186, 1175, 1177, 1181, 1177, 1176, 1185, 1177, 1181, 1179,
+ 1184, 1183, 1187, 1179, 1182, 1177, 1180, 1180, 1183, 1186,
+ 1177, 1187, 1188, 1189, 1184, 1193, 1191, 1190, 1192, 1177,
+ 1185, 1177, 1195, 1185, 1177, 1190, 1196, 1198, 1194, 1187,
+ 1188, 1191, 0, 1203, 1196, 1189, 1199, 1193, 1195, 1188,
+
+ 1189, 1194, 1193, 1191, 1190, 1200, 1202, 1204, 0, 1195,
+ 1201, 0, 1205, 1196, 1198, 1194, 1203, 1201, 1199, 1206,
+ 1203, 1207, 1217, 1199, 1205, 1204, 1208, 1200, 1202, 1207,
+ 1209, 1206, 1200, 1202, 1204, 1208, 1210, 1201, 1213, 1205,
+ 1211, 1212, 1209, 1214, 1213, 1215, 1206, 1216, 1207, 1212,
+ 1208, 1218, 1214, 1208, 1217, 1211, 1210, 1209, 1218, 1216,
+ 0, 1220, 1208, 1210, 1219, 1213, 1215, 1211, 1212, 1221,
+ 1214, 1219, 1215, 1226, 1216, 1222, 1224, 1223, 1218, 1220,
+ 1225, 1221, 1225, 1222, 1224, 1226, 1227, 1228, 1220, 1230,
+ 1233, 1219, 1223, 1231, 1228, 1232, 1221, 1236, 1237, 1234,
+
+ 1226, 1235, 1222, 1224, 1223, 1231, 1234, 1225, 1232, 1233,
+ 1238, 1242, 1235, 1237, 1228, 1238, 1240, 1233, 1227, 1236,
+ 1231, 1230, 1232, 1239, 1236, 1237, 1234, 1241, 1235, 1240,
+ 1244, 1239, 1246, 1245, 1248, 0, 1250, 1242, 1242, 1247,
+ 0, 1241, 1238, 1240, 1244, 0, 0, 1251, 0, 1252,
+ 1239, 1245, 1249, 0, 1241, 1243, 1248, 1244, 1253, 1243,
+ 1245, 1248, 1243, 1243, 1246, 1247, 1247, 1243, 1250, 1251,
+ 1249, 1252, 1254, 1243, 1251, 1255, 1252, 1243, 1254, 1249,
+ 1257, 1243, 1243, 1258, 1253, 1253, 1243, 1257, 0, 1243,
+ 1243, 1256, 1258, 1256, 1243, 1259, 1260, 1262, 1261, 1254,
+
+ 1243, 1255, 1255, 1263, 1243, 1261, 1265, 1257, 1264, 1266,
+ 1258, 0, 1267, 1268, 1260, 1256, 1263, 1264, 1256, 1262,
+ 1256, 1271, 0, 1260, 1262, 1261, 1273, 1259, 1269, 0,
+ 1263, 1272, 1281, 1275, 1267, 1264, 1268, 1281, 1265, 1267,
+ 1268, 1266, 1269, 1271, 1272, 1277, 1274, 1274, 1271, 1275,
+ 1278, 1280, 1273, 1273, 1283, 1269, 1270, 1279, 1272, 1283,
+ 1275, 1270, 1278, 1270, 1281, 1270, 1279, 1270, 1277, 1280,
+ 1290, 1282, 1277, 1284, 1270, 1274, 0, 1278, 1280, 1286,
+ 1285, 1283, 1291, 1270, 1279, 0, 0, 0, 1270, 1282,
+ 1270, 1287, 1270, 1285, 1270, 1284, 1288, 1286, 1282, 1287,
+
+ 1284, 1289, 1290, 1293, 1288, 1292, 1286, 1285, 1291, 1291,
+ 1299, 1294, 1295, 1296, 1289, 1297, 1298, 1302, 1287, 1299,
+ 1292, 1304, 1293, 1288, 1294, 1300, 1296, 1300, 1289, 1301,
+ 1293, 1307, 1292, 1297, 1295, 1303, 1298, 1299, 1294, 1295,
+ 1296, 1305, 1297, 1298, 1302, 1308, 1309, 1303, 1304, 1311,
+ 1312, 1301, 1300, 1310, 1309, 1307, 1301, 1312, 1307, 1313,
+ 0, 1314, 1303, 1315, 1316, 1319, 1305, 1308, 1305, 1317,
+ 1316, 1310, 1308, 1309, 1320, 1317, 1311, 1312, 1318, 1321,
+ 1310, 1320, 1324, 1322, 1318, 1315, 1313, 1314, 1314, 1321,
+ 1315, 1316, 1319, 1323, 1325, 1326, 1317, 1331, 1327, 1328,
+
+ 1323, 1320, 1334, 1330, 1332, 1318, 1321, 1322, 1328, 1331,
+ 1322, 1333, 1335, 1326, 1324, 1334, 1325, 1336, 1332, 1337,
+ 1323, 1325, 1326, 1327, 1331, 1327, 1328, 1330, 1338, 1334,
+ 1330, 1332, 1339, 1333, 1335, 1340, 1336, 0, 1333, 1335,
+ 1342, 1337, 1341, 1344, 1336, 1343, 1337, 1347, 1348, 1342,
+ 1353, 1345, 1338, 1351, 1339, 1338, 1352, 1354, 1353, 1339,
+ 1349, 1340, 1340, 1344, 1341, 1345, 1343, 1342, 1350, 1341,
+ 1344, 1355, 1343, 1354, 1352, 1358, 1360, 1353, 1345, 1347,
+ 1348, 1356, 1349, 1352, 1354, 1351, 1366, 1349, 1356, 1361,
+ 1350, 1359, 1362, 1360, 1364, 1350, 1365, 1358, 1355, 1362,
+
+ 1359, 1361, 1358, 1360, 1368, 1363, 0, 1366, 1356, 1363,
+ 1372, 1369, 0, 1366, 1370, 1371, 1361, 1369, 1359, 1362,
+ 1373, 1370, 1371, 1375, 1369, 1372, 1364, 1376, 1365, 1377,
+ 1374, 1377, 1363, 1373, 1376, 0, 1368, 1372, 1369, 1374,
+ 1379, 1370, 1371, 1378, 1369, 1380, 1382, 1373, 1387, 1375,
+ 1375, 1381, 1378, 1384, 1376, 1381, 1377, 1374, 1385, 0,
+ 1386, 1384, 1379, 1385, 1388, 1390, 1387, 1379, 1382, 1386,
+ 1378, 1389, 1380, 1382, 1398, 1387, 1391, 1390, 1381, 1391,
+ 1384, 1393, 1392, 1388, 1389, 1392, 1394, 1386, 1391, 1395,
+ 1385, 1388, 1390, 1397, 1399, 1400, 1403, 1398, 1389, 1393,
+
+ 1400, 1398, 1395, 1391, 1392, 1403, 1391, 1401, 1393, 1392,
+ 1399, 1394, 1392, 1394, 1404, 1401, 1395, 1402, 1402, 0,
+ 1405, 1399, 1407, 1403, 1406, 1397, 1408, 1400, 1409, 1413,
+ 1410, 1407, 1412, 1408, 1401, 1415, 1404, 1410, 1413, 1414,
+ 1416, 1404, 1405, 1417, 1402, 1412, 1406, 1405, 1414, 1407,
+ 1409, 1406, 1417, 1408, 1419, 1409, 1413, 1410, 1420, 1412,
+ 1418, 1415, 1415, 1416, 1421, 1423, 1414, 1416, 1418, 1422,
+ 1417, 1424, 1425, 1420, 1426, 1421, 0, 1422, 1423, 0,
+ 1427, 0, 1426, 1424, 1425, 1420, 1419, 1418, 1428, 1429,
+ 0, 1421, 1423, 1433, 1430, 1432, 1422, 1434, 1424, 1425,
+
+ 1431, 1426, 1427, 1430, 1437, 1435, 1431, 1427, 1428, 1434,
+ 1436, 1429, 1438, 1432, 1439, 1428, 1429, 1436, 1442, 1433,
+ 1433, 1430, 1432, 1435, 1434, 1440, 1443, 1431, 1441, 1444,
+ 1437, 1437, 1435, 1445, 1447, 1446, 1448, 1436, 1440, 1445,
+ 1444, 1449, 0, 1450, 1438, 1442, 1439, 1443, 1451, 1453,
+ 0, 0, 1440, 1443, 1441, 1441, 1444, 1446, 1454, 1455,
+ 1445, 0, 1446, 1456, 1457, 1458, 1447, 1460, 1448, 1450,
+ 1450, 1459, 1456, 1449, 1451, 1451, 1453, 1455, 1458, 1457,
+ 1461, 1454, 1462, 1459, 1463, 1454, 1455, 1460, 1464, 1462,
+ 1456, 1457, 1458, 1466, 1460, 1465, 1473, 1467, 1459, 1468,
+
+ 1470, 1466, 1467, 1463, 1468, 1469, 1461, 1461, 1465, 1462,
+ 1464, 1463, 1469, 1471, 1473, 1464, 1472, 1474, 1478, 1479,
+ 1466, 1471, 1465, 1473, 1472, 1475, 1470, 1470, 1476, 1467,
+ 1480, 1468, 1469, 1475, 1482, 1476, 1477, 1480, 0, 1474,
+ 1471, 1479, 0, 1472, 1474, 1477, 1479, 1481, 1481, 1484,
+ 1478, 1483, 1475, 1485, 1486, 1476, 1487, 1480, 0, 1483,
+ 1488, 1489, 1486, 1477, 1487, 1490, 1482, 1491, 1488, 1489,
+ 1484, 1492, 1493, 1490, 1481, 1494, 1484, 1492, 1483, 1495,
+ 1491, 1486, 1496, 1487, 1493, 1485, 1499, 1488, 1489, 1497,
+ 1496, 1500, 1490, 1498, 1491, 1501, 1502, 1497, 1492, 1493,
+
+ 1503, 1494, 1494, 1495, 1509, 0, 1495, 1504, 1498, 1496,
+ 1505, 1506, 1508, 1499, 1503, 1506, 1497, 1501, 1500, 1502,
+ 1498, 1508, 1501, 1502, 1505, 1504, 1509, 1503, 1506, 1510,
+ 1513, 1509, 1512, 1511, 1504, 1515, 1506, 1505, 1506, 1508,
+ 1511, 1510, 1506, 1512, 1514, 1518, 1516, 1517, 1519, 1520,
+ 1526, 1524, 0, 0, 1523, 1506, 1510, 1513, 1516, 1512,
+ 1511, 1517, 1521, 1523, 1527, 1534, 1514, 1515, 1533, 1524,
+ 1519, 1514, 1520, 1516, 1517, 1519, 1520, 1518, 1524, 1522,
+ 1525, 1523, 1526, 1529, 1531, 1521, 1522, 1525, 0, 1521,
+ 1531, 1527, 1529, 1532, 1533, 1533, 1535, 1534, 1537, 1540,
+
+ 1539, 1541, 1542, 1535, 1548, 1543, 1522, 1525, 1546, 1545,
+ 1529, 1531, 1541, 1542, 1546, 1532, 1543, 1550, 0, 1556,
+ 1532, 0, 1548, 1535, 1539, 1537, 1540, 1539, 1541, 1542,
+ 1547, 1548, 1543, 1545, 1549, 1546, 1545, 1547, 1551, 1552,
+ 1553, 1549, 1554, 1550, 1550, 1552, 1555, 1559, 1553, 1557,
+ 1551, 1556, 1558, 1561, 0, 1561, 1559, 1547, 1563, 1555,
+ 1560, 1549, 1568, 0, 1554, 1551, 1552, 1553, 1564, 1554,
+ 1558, 1562, 1560, 1555, 1559, 1557, 1557, 1565, 1562, 1558,
+ 1561, 1564, 1567, 1566, 1563, 1563, 1565, 1560, 1569, 1568,
+ 1570, 0, 1571, 1579, 1567, 1564, 1572, 1570, 1562, 1573,
+
+ 1574, 1572, 1575, 0, 1565, 1566, 1576, 1573, 1577, 1567,
+ 1566, 1569, 1580, 1584, 1576, 1569, 1574, 1570, 1571, 1571,
+ 1579, 1582, 1584, 1572, 1581, 1575, 1573, 1574, 1585, 1575,
+ 1577, 1583, 1593, 1576, 1587, 1577, 1580, 1589, 1581, 1580,
+ 1584, 1585, 1583, 1582, 1586, 1586, 1590, 1587, 1582, 1594,
+ 1591, 1581, 1586, 1592, 1588, 1585, 1588, 1591, 1583, 1593,
+ 1592, 1587, 1595, 1589, 1589, 1597, 1598, 1594, 1590, 1599,
+ 1603, 1586, 1586, 1590, 1601, 1596, 1594, 1591, 1600, 0,
+ 1592, 1588, 1596, 1603, 1595, 1600, 1604, 1605, 1598, 1595,
+ 1597, 1606, 1597, 1598, 1608, 1605, 1609, 1603, 1610, 1609,
+
+ 1611, 1599, 1596, 1614, 1612, 1600, 1601, 1616, 1615, 1621,
+ 1613, 1617, 1606, 1604, 1605, 1614, 1608, 1612, 1606, 1613,
+ 1617, 1608, 1619, 1609, 1610, 1610, 1611, 1611, 1618, 1619,
+ 1614, 1612, 1615, 1616, 1616, 1615, 1620, 1613, 1617, 1620,
+ 1622, 1621, 0, 1618, 1628, 1623, 1625, 1629, 1626, 1619,
+ 1627, 1620, 1627, 1630, 1631, 1618, 1630, 1632, 1634, 1636,
+ 1620, 1623, 1622, 1620, 1625, 1633, 1620, 1622, 1628, 1623,
+ 1626, 1628, 1623, 1625, 1629, 1626, 1635, 1627, 1620, 1637,
+ 1630, 1638, 1643, 1642, 1634, 1634, 1631, 1633, 1623, 1632,
+ 1639, 1636, 1633, 1641, 1644, 1638, 1640, 1645, 1647, 1639,
+
+ 1641, 1637, 1635, 1635, 1640, 1646, 1637, 1642, 1638, 1648,
+ 1642, 1649, 1650, 1648, 1643, 1651, 1652, 1639, 0, 0,
+ 1641, 1653, 0, 1640, 1655, 1652, 1644, 1646, 1653, 1645,
+ 1647, 1655, 1646, 1649, 1656, 1661, 1648, 1651, 1649, 1650,
+ 1657, 1654, 1651, 1652, 1658, 1659, 1664, 1656, 1653, 1654,
+ 1660, 1655, 1660, 1657, 1659, 1662, 1663, 1658, 1661, 1666,
+ 1667, 1656, 1661, 1669, 1663, 1668, 1664, 1657, 1654, 1670,
+ 1671, 1658, 1659, 1664, 1666, 1667, 1670, 1660, 1672, 1668,
+ 1662, 1671, 1662, 1663, 1674, 1672, 1666, 1667, 1673, 1676,
+ 1674, 1677, 1668, 1679, 0, 1669, 1670, 1671, 1677, 1678,
+
+ 1681, 1673, 1680, 1683, 1682, 1672, 1683, 1685, 1679, 0,
+ 1684, 1674, 1681, 1687, 0, 1673, 1676, 1682, 1677, 1684,
+ 1679, 1678, 1693, 1686, 1693, 1685, 1678, 1681, 1680, 1680,
+ 1683, 1682, 1689, 1687, 1685, 1686, 1688, 1684, 1694, 1688,
+ 1687, 1691, 1695, 1689, 1696, 1697, 1691, 1698, 0, 1693,
+ 1686, 1699, 1700, 1691, 1688, 1703, 1698, 0, 1712, 1689,
+ 1697, 1704, 1694, 1688, 1705, 1694, 1688, 1701, 1691, 1695,
+ 1713, 1696, 1697, 1691, 1698, 1699, 1702, 1703, 1699, 1700,
+ 1708, 1701, 1703, 0, 1702, 1704, 1705, 1706, 1704, 1707,
+ 1712, 1705, 1711, 1709, 1701, 1706, 1718, 1713, 1708, 1710,
+
+ 1707, 1709, 1710, 1702, 1714, 1715, 1717, 1708, 1716, 1718,
+ 1711, 0, 1715, 1720, 1706, 1717, 1707, 1710, 1720, 1711,
+ 1709, 1721, 1716, 1718, 1714, 1719, 1710, 1722, 1725, 1710,
+ 1725, 1714, 1715, 1717, 1727, 1716, 1719, 1726, 1728, 1729,
+ 1733, 0, 1722, 1721, 1731, 1720, 1726, 1730, 1721, 1728,
+ 1732, 1730, 1719, 1732, 1722, 1725, 0, 1729, 1731, 1744,
+ 1727, 1727, 1733, 1734, 1726, 1728, 1729, 1733, 1732, 1735,
+ 1731, 1731, 1734, 1730, 1730, 1735, 1737, 1732, 1730, 1736,
+ 1732, 1737, 1739, 1742, 1741, 1731, 1740, 1743, 1736, 1741,
+ 1734, 1744, 1745, 1746, 1747, 1739, 1735, 0, 1740, 1750,
+
+ 1743, 1745, 1748, 1749, 1755, 1742, 1736, 1751, 1737, 1739,
+ 1742, 1741, 1754, 1740, 1743, 1753, 1749, 1757, 1756, 1745,
+ 1746, 1758, 1753, 1757, 1748, 1754, 1747, 1760, 1751, 1748,
+ 1749, 1750, 1756, 1765, 1751, 1762, 1755, 1766, 1767, 1754,
+ 1763, 1757, 1753, 1762, 1757, 1756, 1760, 1764, 1763, 1768,
+ 1757, 1769, 1765, 1758, 1760, 1764, 1767, 1770, 1774, 1766,
+ 1765, 1773, 1762, 1768, 1766, 1767, 1771, 1763, 1772, 1769,
+ 1775, 1770, 1776, 1777, 1764, 0, 1768, 1778, 1769, 1771,
+ 1780, 1772, 1773, 1781, 1770, 1779, 1782, 1777, 1773, 1780,
+ 1774, 1781, 1779, 1771, 1783, 1772, 1776, 1784, 1785, 1776,
+
+ 1777, 1789, 1775, 1785, 1778, 1786, 1787, 1780, 1783, 1773,
+ 1781, 1790, 1779, 1782, 1791, 1787, 1786, 1792, 1790, 1793,
+ 1794, 1783, 1796, 1795, 0, 1785, 1793, 1797, 1789, 1784,
+ 1800, 1797, 1786, 1787, 1801, 1799, 1804, 1791, 1790, 1792,
+ 1796, 1791, 1794, 1803, 1792, 1795, 1793, 1794, 1800, 1796,
+ 1795, 1799, 1802, 1806, 1797, 1803, 1805, 1800, 1801, 1808,
+ 1811, 1801, 1799, 1804, 1805, 1807, 1812, 1802, 1806, 1809,
+ 1803, 1810, 1816, 1807, 1817, 1811, 1814, 1826, 1815, 1802,
+ 1806, 1812, 1809, 1805, 1814, 1815, 1808, 1811, 1818, 1817,
+ 1819, 1810, 1807, 1812, 1820, 1821, 1809, 1818, 1810, 1822,
+
+ 1825, 1817, 1824, 1814, 1816, 1815, 1827, 1829, 1828, 1826,
+ 0, 1819, 1830, 1831, 1847, 1818, 1846, 1819, 1825, 1821,
+ 1831, 1820, 1821, 1828, 1824, 1832, 1822, 1825, 1833, 1824,
+ 1832, 1835, 1829, 1827, 1829, 1828, 1830, 1833, 1834, 1830,
+ 1831, 1836, 1837, 1846, 1838, 1839, 1847, 1834, 1840, 1841,
+ 0, 0, 1832, 1835, 1842, 1833, 1844, 1839, 1835, 1838,
+ 1837, 1842, 1841, 1836, 0, 1834, 1843, 1841, 1836, 1837,
+ 1840, 1838, 1839, 1843, 1845, 1840, 1841, 1857, 1844, 1848,
+ 1850, 1842, 1851, 1844, 1852, 1848, 1845, 1853, 1843, 1841,
+ 1851, 1850, 1852, 1843, 1855, 1854, 1858, 1856, 1853, 1856,
+
+ 1843, 1845, 1854, 1857, 1857, 1859, 1848, 1850, 1860, 1851,
+ 1856, 1852, 1861, 1866, 1853, 1860, 1862, 1868, 1867, 1855,
+ 1869, 1855, 1854, 1858, 1856, 1863, 1856, 1864, 1865, 1871,
+ 1873, 1863, 1859, 1864, 1865, 1860, 1874, 1872, 1877, 1861,
+ 1866, 1867, 1862, 1862, 1869, 1867, 1872, 1869, 1875, 1868,
+ 1875, 1879, 1863, 1876, 1864, 1865, 1880, 1881, 1874, 1878,
+ 1883, 1871, 1873, 1874, 1872, 1877, 1878, 1884, 1882, 1881,
+ 1885, 1886, 1887, 1879, 1882, 1875, 1890, 1876, 1879, 1892,
+ 1876, 1889, 1883, 1880, 1881, 1890, 1878, 1883, 1889, 1884,
+ 1901, 1898, 0, 1886, 1884, 1882, 1885, 1885, 1886, 1888,
+
+ 1888, 1888, 1891, 1890, 1887, 1893, 1888, 1896, 1889, 1891,
+ 1895, 1892, 1893, 1897, 1888, 1895, 1898, 1905, 1898, 1899,
+ 1896, 1902, 1901, 1903, 1900, 1897, 1888, 1888, 1888, 1891,
+ 1903, 1904, 1893, 1888, 1896, 1899, 1900, 1904, 1907, 1902,
+ 1897, 1910, 1895, 1911, 1905, 1915, 1899, 1908, 1902, 1912,
+ 1903, 1900, 1906, 1906, 1908, 1909, 1912, 1916, 1904, 1916,
+ 1909, 1921, 1917, 1919, 1907, 1907, 0, 1910, 1910, 1920,
+ 1911, 1923, 1915, 0, 1908, 1920, 1912, 1922, 0, 1906,
+ 1917, 1919, 1909, 1925, 1916, 1924, 1926, 1927, 1922, 1917,
+ 1919, 1924, 1929, 1921, 1934, 1925, 1920, 1931, 1923, 1928,
+
+ 1928, 1930, 1930, 1933, 1922, 1927, 1926, 1935, 1931, 1937,
+ 1925, 1938, 1924, 1926, 1927, 1936, 1934, 1941, 1929, 1929,
+ 1939, 1934, 1936, 1942, 1931, 1941, 1928, 1943, 1930, 1937,
+ 1944, 1945, 1948, 1946, 0, 1933, 1937, 1950, 1947, 1935,
+ 1946, 1951, 1936, 1938, 1941, 1939, 1947, 1939, 1949, 1945,
+ 1951, 1953, 1944, 1954, 1943, 1942, 1948, 1944, 1945, 1948,
+ 1946, 1950, 1955, 1949, 1950, 1947, 1952, 1952, 1951, 1956,
+ 1957, 1963, 1958, 1960, 1961, 1949, 1956, 1953, 1953, 1961,
+ 1960, 1962, 1957, 1964, 1965, 1954, 1964, 0, 1958, 1973,
+ 1966, 1969, 1965, 1952, 1955, 1958, 1956, 1957, 1963, 1958,
+
+ 1960, 1961, 1966, 1962, 1968, 0, 1970, 1971, 1962, 1972,
+ 1964, 1965, 1968, 1976, 1969, 1958, 1973, 1966, 1969, 1974,
+ 0, 1975, 1978, 1977, 1984, 1980, 1975, 1972, 1971, 1977,
+ 1979, 1968, 1970, 1970, 1971, 1978, 1972, 1975, 1979, 1989,
+ 1976, 1987, 1974, 1990, 1981, 0, 1974, 1980, 1975, 1978,
+ 1977, 1981, 1980, 1975, 1982, 1983, 1984, 1979, 1985, 1988,
+ 1986, 1982, 1983, 1987, 1997, 1991, 1989, 1985, 1987, 1990,
+ 1990, 1981, 1986, 1988, 1994, 1993, 1995, 1996, 1999, 1994,
+ 2001, 1982, 1983, 1995, 2000, 1985, 1988, 1986, 1991, 2000,
+ 1994, 1997, 1991, 1993, 2003, 2004, 2004, 2005, 2006, 1996,
+
+ 2007, 1994, 1993, 1995, 1996, 1999, 1994, 2010, 2009, 0,
+ 2012, 2014, 2001, 2006, 2011, 2013, 2000, 2013, 2016, 2005,
+ 2017, 0, 2004, 2009, 2005, 2006, 2003, 2020, 2015, 2011,
+ 2010, 2018, 2007, 2015, 2010, 2009, 2012, 2012, 2019, 2018,
+ 2024, 2011, 2013, 2014, 2021, 2019, 2023, 2017, 2024, 2020,
+ 2016, 2027, 2025, 2029, 2020, 2015, 2028, 2030, 2018, 2021,
+ 2032, 2023, 2031, 2036, 2033, 2019, 2034, 2024, 0, 2031,
+ 0, 2021, 2038, 2023, 2025, 2027, 2035, 2040, 2027, 2025,
+ 2029, 2036, 2028, 2028, 2030, 2033, 2042, 2041, 2034, 2031,
+ 2036, 2033, 2032, 2034, 2038, 2044, 2045, 2035, 2046, 2038,
+
+ 2047, 2040, 2041, 2035, 2040, 2052, 2048, 2049, 2050, 2053,
+ 2044, 2045, 2042, 2042, 2041, 2051, 2053, 2055, 2057, 2054,
+ 2046, 2059, 2044, 2045, 2048, 2046, 2055, 2047, 2058, 2049,
+ 2050, 2061, 2052, 2048, 2049, 2050, 2053, 2054, 2060, 2051,
+ 2056, 2057, 2051, 2062, 2055, 2057, 2054, 2060, 2056, 2061,
+ 2058, 2063, 2062, 2059, 2066, 2058, 0, 2065, 2061, 2067,
+ 2072, 2068, 2069, 2066, 2063, 2060, 2070, 2056, 2065, 2069,
+ 2062, 0, 2071, 2078, 2073, 2072, 2074, 2067, 2063, 2068,
+ 2073, 2066, 2075, 2065, 2065, 2087, 2067, 2072, 2068, 2069,
+ 2071, 2080, 2070, 2070, 2081, 2065, 2075, 2082, 2074, 2071,
+
+ 2078, 2073, 2083, 2074, 2085, 2081, 2086, 2090, 2082, 2075,
+ 2088, 2100, 2089, 2083, 2091, 2080, 2085, 2087, 2080, 2086,
+ 2088, 2081, 2092, 2091, 2082, 2093, 2095, 0, 2096, 2083,
+ 2099, 2085, 2090, 2086, 2090, 2101, 2098, 2088, 2089, 2089,
+ 2098, 2091, 2103, 2100, 2093, 2102, 2106, 2103, 2101, 2092,
+ 2105, 2099, 2093, 2095, 2096, 2096, 2108, 2099, 2110, 2104,
+ 2109, 2107, 2101, 2098, 2106, 2102, 2104, 2107, 2113, 2103,
+ 2110, 2108, 2102, 2106, 2111, 2109, 2105, 2105, 2112, 2112,
+ 2113, 2119, 2118, 2108, 2116, 2110, 2104, 2109, 2107, 2111,
+ 2114, 2116, 2117, 2120, 2114, 2113, 2117, 2118, 2122, 2121,
+
+ 0, 2111, 2120, 2127, 2130, 2112, 2121, 2114, 2119, 2118,
+ 2123, 2116, 0, 2126, 2129, 2114, 2124, 2114, 2128, 2117,
+ 2120, 2114, 2122, 2124, 2130, 2122, 2121, 2128, 2127, 2132,
+ 2127, 2130, 2123, 2134, 2114, 2126, 2129, 2123, 2136, 2135,
+ 2126, 2129, 2134, 2124, 2137, 2128, 2138, 2132, 2139, 2141,
+ 2142, 2143, 2152, 2136, 2138, 0, 2132, 2135, 2144, 2144,
+ 2134, 2145, 2146, 2142, 2147, 2136, 2135, 0, 2148, 2137,
+ 2149, 2137, 2150, 2138, 2141, 2151, 2141, 2142, 2143, 2149,
+ 2139, 2150, 2151, 2145, 2152, 2144, 2147, 2146, 2145, 2146,
+ 2148, 2147, 2153, 2154, 2155, 2148, 2156, 2149, 2157, 2150,
+
+ 2159, 2156, 2151, 2160, 2161, 0, 2162, 2154, 2159, 2155,
+ 2163, 2164, 2166, 2167, 2153, 2165, 2160, 2157, 2168, 2153,
+ 2154, 2155, 2165, 2164, 2171, 2157, 2163, 2159, 2156, 2173,
+ 2160, 2161, 2162, 2162, 0, 2167, 2174, 2163, 2164, 2169,
+ 2167, 2170, 2165, 2168, 2166, 2168, 2172, 2175, 2169, 2170,
+ 2176, 2171, 2179, 2182, 0, 2173, 2173, 2181, 2177, 2182,
+ 2170, 2172, 2174, 2174, 0, 2175, 2169, 2177, 2170, 0,
+ 2189, 2184, 2176, 2172, 2175, 2179, 2170, 2176, 2180, 2179,
+ 2182, 2180, 2181, 2183, 2181, 2177, 2184, 2186, 2183, 2185,
+ 2190, 2188, 2189, 2193, 2195, 2192, 2180, 2189, 2184, 2199,
+
+ 2193, 2194, 2186, 2222, 2196, 2180, 2188, 2185, 2180, 2192,
+ 2199, 0, 2190, 2196, 2186, 2183, 2185, 2190, 2188, 2194,
+ 2193, 2195, 2192, 2197, 2198, 2200, 2199, 2200, 2194, 2201,
+ 2222, 2196, 2197, 2198, 2202, 2203, 2207, 2208, 2205, 2206,
+ 0, 0, 2201, 2207, 0, 2209, 2202, 2214, 2216, 2211,
+ 2197, 2198, 2200, 2205, 2206, 2210, 2201, 2203, 2211, 2208,
+ 2214, 2202, 2203, 2207, 2208, 2205, 2206, 2209, 2214, 2216,
+ 2219, 2218, 2209, 2210, 2214, 2216, 2211, 2217, 2220, 2219,
+ 2220, 2217, 2210, 2218, 2221, 2223, 2224, 2214, 2226, 0,
+ 2225, 2227, 2229, 2231, 2228, 2232, 2226, 2219, 2218, 2225,
+
+ 2235, 2231, 2221, 2223, 2217, 2220, 2229, 2236, 2242, 2237,
+ 0, 2221, 2223, 2224, 2227, 2226, 2228, 2225, 2227, 2229,
+ 2231, 2228, 2238, 2233, 2234, 0, 2243, 2232, 2233, 2234,
+ 2239, 2245, 2235, 2237, 2248, 2242, 2237, 2239, 2246, 2236,
+ 2243, 2238, 2244, 2248, 2247, 2249, 2250, 2254, 2251, 2238,
+ 2233, 2243, 2243, 2243, 2252, 0, 2234, 2239, 2245, 2247,
+ 2244, 2248, 2253, 2256, 2246, 2246, 0, 2243, 2250, 2244,
+ 2258, 2247, 0, 2250, 2251, 2251, 2257, 2249, 2243, 2254,
+ 2259, 2252, 2262, 2257, 2253, 2271, 2256, 2259, 2264, 2253,
+ 2256, 2263, 2261, 2258, 2261, 2263, 2266, 2258, 2265, 2267,
+
+ 2264, 2268, 2269, 2257, 2262, 2266, 2270, 2259, 2268, 2262,
+ 2267, 2270, 2271, 2272, 0, 2264, 2274, 0, 2263, 2261,
+ 2265, 2275, 2273, 2266, 2269, 2265, 2267, 2278, 2268, 2269,
+ 2275, 2276, 2276, 2270, 2273, 2277, 2272, 2279, 2274, 2280,
+ 2272, 2281, 2278, 2274, 2277, 2279, 2283, 2282, 2275, 2273,
+ 2285, 2286, 2287, 2295, 2278, 2281, 2282, 2288, 2276, 2286,
+ 2287, 2280, 2277, 2289, 2279, 2288, 2280, 2289, 2281, 2285,
+ 2292, 2293, 2290, 2283, 2282, 2290, 2292, 2285, 2286, 2287,
+ 2291, 2294, 2297, 2300, 2288, 2295, 2293, 2294, 2291, 2299,
+ 2289, 2301, 2302, 2303, 2297, 2304, 2300, 2292, 2293, 2290,
+
+ 2303, 2305, 2306, 2299, 2310, 2311, 2313, 2291, 2294, 2297,
+ 2300, 2307, 2301, 0, 2308, 2312, 2299, 2302, 2301, 2302,
+ 2303, 2309, 2304, 2305, 2314, 2307, 2306, 2308, 2305, 2306,
+ 2310, 2310, 2311, 2313, 2316, 2309, 2314, 2317, 2307, 2315,
+ 2312, 2308, 2312, 2319, 2318, 2320, 2321, 2318, 2309, 0,
+ 2324, 2314, 2325, 2315, 2323, 2327, 2328, 2324, 2330, 2325,
+ 2316, 2316, 2318, 2317, 2317, 2326, 2315, 2329, 2321, 2331,
+ 2319, 2318, 2320, 2321, 2318, 2329, 2323, 2324, 2331, 2325,
+ 2326, 2323, 2327, 2328, 2332, 2330, 2333, 2334, 2335, 2336,
+ 2337, 0, 2326, 2340, 2329, 2339, 2331, 2343, 2333, 2341,
+
+ 2338, 2344, 2345, 2337, 2346, 2339, 2340, 2341, 2348, 2334,
+ 2345, 2332, 2347, 2333, 2334, 2335, 2336, 2337, 2338, 2343,
+ 2340, 2347, 2339, 2349, 2343, 2350, 2341, 2338, 2344, 2345,
+ 2348, 2346, 2351, 2352, 2353, 2348, 2354, 2355, 2358, 2347,
+ 2359, 2357, 2353, 2362, 2349, 2364, 2358, 2351, 2354, 2350,
+ 2349, 2366, 2350, 2357, 2365, 2362, 2372, 2364, 2351, 2351,
+ 2352, 2353, 2355, 2354, 2355, 2358, 2361, 2359, 2357, 2368,
+ 2362, 2363, 2364, 2361, 2351, 2363, 2367, 2365, 2366, 2373,
+ 2369, 2365, 2370, 2372, 2367, 2374, 2373, 2375, 2376, 2378,
+ 2377, 2368, 2369, 2361, 2370, 2380, 2368, 2376, 2363, 2377,
+
+ 2375, 2378, 2381, 2367, 2387, 2374, 2373, 2369, 2382, 2370,
+ 2379, 2379, 2374, 2385, 2375, 2376, 2378, 2377, 0, 2383,
+ 2381, 2380, 2380, 2386, 0, 2388, 2387, 2390, 2389, 2381,
+ 2389, 2387, 2399, 2382, 2383, 2382, 2383, 2379, 2386, 0,
+ 2392, 2390, 2391, 2383, 2395, 2385, 2383, 2388, 2391, 2400,
+ 2386, 2396, 2388, 2397, 2390, 2389, 2393, 2393, 2398, 2401,
+ 2402, 2383, 2392, 2383, 2399, 2401, 2395, 2392, 2403, 2391,
+ 2398, 2395, 2402, 2396, 2404, 2397, 2405, 2406, 2396, 2406,
+ 2397, 2400, 2408, 2393, 2409, 2398, 2401, 2402, 2407, 2410,
+ 2411, 2409, 2412, 2415, 2413, 2416, 2404, 2417, 2405, 0,
+
+ 2403, 2404, 2407, 2405, 2406, 2414, 2408, 2410, 2411, 2408,
+ 2412, 2409, 2413, 2422, 2424, 2407, 2410, 2411, 2414, 2412,
+ 2417, 2413, 2419, 2421, 2417, 2415, 2423, 2416, 2425, 2419,
+ 2421, 2422, 2414, 2426, 0, 2427, 2425, 2428, 2433, 0,
+ 2422, 2429, 0, 2429, 0, 2431, 2424, 2432, 2429, 2419,
+ 2421, 2426, 2423, 2423, 2425, 2425, 2431, 2434, 2432, 2428,
+ 2426, 2427, 2427, 2425, 2428, 2433, 2437, 2435, 2429, 2434,
+ 2429, 2438, 2431, 2440, 2432, 2439, 2445, 2442, 0, 2444,
+ 2446, 2437, 2438, 2443, 2434, 2435, 2444, 2439, 2440, 2447,
+ 2449, 2445, 2452, 2437, 2435, 2450, 2451, 2453, 2438, 2462,
+
+ 2440, 2442, 2439, 2445, 2442, 2443, 2444, 2446, 2454, 2455,
+ 2443, 2457, 2456, 2458, 2459, 2447, 2447, 2449, 2451, 2450,
+ 2461, 2466, 2450, 2451, 2452, 2456, 2454, 2459, 2458, 2453,
+ 2463, 2462, 2464, 2468, 2460, 2454, 2455, 2457, 2457, 2456,
+ 2458, 2459, 2460, 2463, 2466, 2467, 2461, 2461, 2466, 2469,
+ 2471, 2470, 2472, 2475, 2464, 2473, 2479, 2463, 2474, 2464,
+ 2468, 2460, 2473, 2479, 2478, 0, 0, 0, 2471, 2467,
+ 2472, 2469, 2467, 2470, 2476, 2483, 2469, 2471, 2470, 2472,
+ 2475, 2474, 2473, 2479, 2482, 2474, 2478, 2480, 2476, 2481,
+ 2485, 2478, 2484, 2486, 2480, 2489, 2481, 2482, 2483, 2484,
+
+ 2487, 2476, 2483, 2488, 2489, 2490, 2492, 2491, 2494, 2497,
+ 2499, 2482, 2485, 2490, 2480, 2491, 2481, 2485, 2493, 2484,
+ 2497, 2487, 2489, 2496, 2493, 2486, 2498, 2487, 2492, 2488,
+ 2488, 2503, 2490, 2492, 2491, 2494, 2497, 2500, 2496, 2505,
+ 2501, 0, 2499, 2506, 2507, 2493, 2509, 2509, 2498, 2503,
+ 2496, 2508, 2505, 2498, 2510, 2514, 2500, 2515, 2503, 2513,
+ 0, 2516, 2520, 0, 2500, 2501, 2505, 2501, 2507, 2506,
+ 2506, 2507, 2515, 2509, 2517, 2508, 2522, 2524, 2508, 2533,
+ 2510, 2510, 2513, 2525, 2515, 2522, 2513, 2514, 2516, 2520,
+ 2524, 2528, 2517, 2530, 2525, 2529, 2529, 2531, 2535, 2530,
+
+ 0, 2517, 2537, 2522, 2524, 2532, 2533, 0, 2538, 2541,
+ 2525, 2539, 2540, 2528, 2541, 2538, 0, 0, 2528, 2531,
+ 2530, 2542, 2529, 2540, 2531, 2535, 2545, 2532, 2548, 2546,
+ 2547, 2550, 2532, 2544, 2537, 2538, 2541, 2539, 2539, 2540,
+ 2551, 2544, 2552, 2542, 2546, 2547, 2556, 0, 2542, 2550,
+ 2545, 2557, 2554, 2545, 2553, 2548, 2546, 2547, 2550, 2559,
+ 2544, 2551, 2558, 2553, 2554, 2561, 2562, 2551, 2559, 2565,
+ 2558, 2564, 2563, 2556, 2552, 2557, 2566, 0, 2557, 2554,
+ 2564, 2553, 2567, 2568, 2569, 2571, 2559, 2565, 2570, 2558,
+ 2566, 2561, 2561, 2562, 2563, 2572, 2565, 2569, 2564, 2563,
+
+ 2571, 2570, 2575, 2566, 2567, 2576, 2573, 2574, 2568, 2567,
+ 2568, 2569, 2571, 2573, 2574, 2570, 2577, 2572, 2578, 2579,
+ 2580, 2581, 2572, 2586, 2575, 2583, 2588, 2582, 0, 2575,
+ 2581, 2584, 2576, 2573, 2574, 2580, 2585, 2587, 2586, 0,
+ 0, 2588, 2592, 2577, 2587, 2578, 2579, 2580, 2581, 2582,
+ 2586, 2583, 2583, 2588, 2582, 2590, 2591, 2584, 2584, 2589,
+ 2593, 2590, 2585, 2585, 2587, 2594, 2589, 2591, 2593, 2592,
+ 2595, 2597, 2596, 2599, 2598, 2600, 0, 2601, 2603, 0,
+ 2605, 2602, 2590, 2591, 2601, 2603, 2589, 2593, 2596, 2598,
+ 2600, 2606, 2594, 2599, 2607, 2608, 2608, 2595, 2597, 2596,
+
+ 2599, 2598, 2600, 2602, 2601, 2603, 2604, 2605, 2602, 2606,
+ 2609, 2610, 2611, 2604, 2612, 2611, 2615, 2609, 2606, 2613,
+ 2614, 2607, 2608, 2616, 2613, 2610, 2617, 2612, 2618, 2622,
+ 2619, 2615, 2623, 2604, 2622, 2628, 2623, 2609, 2610, 2611,
+ 2618, 2612, 2619, 2615, 2617, 2614, 2613, 2614, 2624, 2616,
+ 2616, 2621, 2625, 2617, 2626, 2618, 2622, 2619, 2627, 2623,
+ 2621, 2629, 2628, 2630, 2635, 2625, 2632, 0, 2634, 2637,
+ 2636, 2638, 2624, 2635, 0, 2624, 2626, 2637, 2621, 2625,
+ 2627, 2626, 0, 2638, 2679, 2627, 2636, 2644, 2629, 2630,
+ 2630, 2635, 2632, 2632, 2634, 2634, 2637, 2636, 2638, 2640,
+
+ 2641, 2643, 2642, 2645, 2648, 2644, 2640, 2642, 2643, 2641,
+ 2645, 2646, 2647, 2648, 2644, 2649, 2679, 2650, 2652, 2647,
+ 2653, 2654, 2656, 2657, 2649, 2660, 2640, 2641, 2643, 2642,
+ 2645, 2648, 2655, 2659, 2654, 0, 2646, 2655, 2646, 2647,
+ 2656, 2652, 2649, 2650, 2650, 2652, 2661, 2653, 2654, 2656,
+ 2657, 2659, 2660, 2662, 2663, 2661, 2664, 2665, 2666, 2655,
+ 2659, 2667, 2662, 2663, 2668, 0, 2669, 2666, 2671, 2665,
+ 2667, 2672, 2670, 2661, 2669, 2668, 2664, 2677, 2674, 2673,
+ 2662, 2663, 2675, 2664, 2665, 2666, 2673, 2674, 2667, 2678,
+ 2681, 2668, 2670, 2669, 2683, 2671, 2684, 2686, 2672, 2670,
+
+ 2682, 2680, 2681, 2675, 2677, 2674, 2673, 2683, 2682, 2675,
+ 2680, 2688, 2685, 2686, 2690, 2687, 2678, 2681, 2684, 2685,
+ 2689, 2683, 2687, 2684, 2686, 2691, 2692, 2682, 2680, 2694,
+ 2696, 2698, 2697, 2688, 0, 0, 2699, 2694, 2688, 2685,
+ 2697, 2690, 2687, 2699, 2700, 2689, 2698, 2689, 2696, 2709,
+ 2691, 2701, 2691, 2692, 2702, 2706, 2694, 2696, 2698, 2697,
+ 2703, 2702, 2706, 2699, 2708, 2707, 2700, 2710, 2703, 2712,
+ 2713, 2700, 2715, 2701, 2707, 2711, 2709, 2714, 2701, 2710,
+ 2718, 2702, 2706, 2719, 2711, 2720, 2713, 2703, 2708, 2714,
+ 2726, 2708, 2707, 2717, 2710, 2715, 2712, 2713, 2728, 2715,
+
+ 2721, 2718, 2711, 2723, 2714, 2717, 2719, 2718, 2729, 2724,
+ 2719, 2725, 2720, 2728, 2721, 2723, 2724, 2726, 2725, 2730,
+ 2717, 2731, 2732, 2733, 2734, 2728, 2729, 2721, 2737, 2738,
+ 2723, 2733, 2735, 2739, 2736, 2729, 2724, 2740, 2725, 2737,
+ 2739, 2745, 2730, 2747, 2738, 2754, 2730, 2731, 2731, 2732,
+ 2733, 2734, 2736, 2746, 2735, 2737, 2738, 2748, 2746, 2735,
+ 2739, 2736, 2749, 2750, 2740, 2751, 2756, 2745, 2745, 2752,
+ 2747, 2748, 2754, 2753, 2755, 2758, 2749, 2750, 2756, 2766,
+ 2746, 2755, 2761, 2751, 2748, 2763, 2764, 2752, 2765, 2749,
+ 2750, 2753, 2751, 2756, 2776, 2767, 2752, 2769, 2766, 2764,
+
+ 2753, 2755, 2758, 2767, 2761, 2768, 2766, 2763, 2771, 2761,
+ 2765, 2773, 2763, 2764, 2774, 2765, 2769, 2775, 2777, 2779,
+ 2771, 2776, 2767, 2768, 2769, 2778, 2780, 2779, 2781, 2775,
+ 2783, 2784, 2768, 2773, 2782, 2771, 2774, 2785, 2773, 2783,
+ 2784, 2774, 0, 2786, 2775, 2777, 2779, 2778, 2781, 2787,
+ 2788, 2789, 2778, 2780, 2790, 2781, 2782, 2783, 2784, 2791,
+ 2794, 2782, 2788, 2795, 2796, 2786, 2797, 2798, 2801, 2785,
+ 2786, 2797, 2800, 2789, 2794, 2787, 2787, 2788, 2789, 2799,
+ 2802, 2790, 2803, 2805, 2804, 2800, 2791, 2794, 2796, 2798,
+ 2795, 2796, 2808, 2806, 2798, 2805, 2809, 0, 2797, 2800,
+
+ 2801, 2799, 2804, 2802, 2803, 2810, 2799, 2802, 2807, 2803,
+ 2805, 2804, 2806, 2812, 2807, 2811, 2814, 2815, 0, 2818,
+ 2806, 2816, 0, 0, 2808, 2820, 0, 2810, 2809, 2821,
+ 2811, 2822, 2810, 2827, 2818, 2807, 2814, 2825, 2833, 2815,
+ 2812, 2823, 2811, 2814, 2815, 2816, 2818, 2820, 2816, 2824,
+ 2823, 2821, 2820, 2822, 2826, 2825, 2821, 2828, 2822, 2827,
+ 2827, 2829, 2832, 2824, 2825, 2834, 2837, 2840, 2823, 2839,
+ 2833, 2832, 2826, 2838, 2837, 2828, 2824, 2839, 2841, 2842,
+ 2838, 2826, 2846, 2829, 2828, 2843, 2834, 2842, 2829, 2832,
+ 2844, 2847, 2834, 2837, 2840, 2845, 2839, 2851, 2841, 2847,
+
+ 2838, 2849, 2844, 2843, 2851, 2841, 2842, 2845, 2852, 2846,
+ 2853, 2855, 2843, 2849, 2854, 2856, 2854, 2844, 2847, 2858,
+ 0, 2857, 2845, 2859, 2851, 2860, 2865, 2861, 2849, 2861,
+ 2857, 2852, 2867, 2862, 2868, 2852, 2869, 2853, 2864, 2871,
+ 2865, 2854, 2874, 2855, 2860, 2872, 2876, 2856, 2857, 2870,
+ 2859, 2858, 2860, 2865, 2861, 2862, 2864, 2872, 2868, 2869,
+ 2862, 2868, 2870, 2869, 2867, 2864, 2871, 2877, 2874, 2874,
+ 2875, 2879, 2872, 2876, 2881, 2882, 2870, 2880, 2884, 2875,
+ 2886, 2887, 2892, 2889, 2888, 0, 2893, 2886, 2889, 2892,
+ 2895, 2890, 2896, 2882, 2877, 2897, 2881, 2875, 2879, 2888,
+
+ 2880, 2881, 2882, 2887, 2880, 2884, 2890, 2886, 2887, 2892,
+ 2898, 2888, 2893, 2893, 2899, 2889, 2900, 2895, 2890, 2896,
+ 2902, 2906, 2897, 2903, 2905, 0, 2907, 2908, 2899, 2910,
+ 2900, 2905, 2903, 2909, 2898, 2911, 2914, 2898, 2915, 2920,
+ 2916, 2899, 2919, 2900, 2913, 2909, 2912, 2902, 2906, 2911,
+ 2903, 2905, 2907, 2907, 2908, 2912, 2910, 2913, 2926, 2922,
+ 2909, 2920, 2911, 2916, 2922, 2915, 2920, 2916, 2914, 2927,
+ 2924, 2913, 2923, 2912, 2919, 2925, 2923, 2924, 2928, 2926,
+ 2928, 2929, 2925, 2930, 2933, 2926, 0, 2942, 2935, 2936,
+ 2938, 2922, 2938, 2940, 2939, 0, 0, 2924, 0, 2923,
+
+ 2946, 2927, 2925, 2943, 2929, 2928, 2933, 2935, 2929, 2942,
+ 2930, 2933, 2943, 2936, 2942, 2935, 2936, 2938, 2939, 2940,
+ 2940, 2939, 2941, 2941, 2944, 2945, 2947, 2946, 2950, 2949,
+ 2943, 2944, 2941, 2948, 2956, 2951, 2950, 2957, 2945, 2947,
+ 2953, 2948, 2949, 2954, 2958, 2953, 0, 2959, 2954, 2941,
+ 2941, 2944, 2945, 2947, 2951, 2950, 2949, 2948, 2955, 2963,
+ 2948, 2956, 2951, 2957, 2957, 2960, 2955, 2961, 2948, 2962,
+ 2958, 2958, 2953, 2959, 2959, 2954, 2964, 2965, 2965, 2967,
+ 2962, 2963, 2966, 2964, 2970, 2955, 2963, 2974, 2969, 2968,
+ 2975, 2960, 2960, 2961, 2961, 2966, 2962, 2968, 2971, 2976,
+
+ 2972, 2967, 2970, 2964, 2965, 2971, 2967, 2972, 2977, 2966,
+ 2969, 2970, 2978, 2980, 2974, 2969, 2968, 2975, 2981, 2982,
+ 2983, 2978, 2985, 2976, 0, 2971, 2976, 2972, 2991, 2977,
+ 2986, 2992, 2987, 2988, 2989, 2977, 2993, 2991, 2981, 2978,
+ 2980, 2994, 2983, 0, 2995, 2981, 2982, 2983, 2986, 2985,
+ 2987, 2988, 2989, 2997, 2998, 2991, 3001, 2986, 2992, 2987,
+ 2988, 2989, 2995, 2993, 2994, 2996, 2998, 2999, 2994, 2997,
+ 3001, 2995, 2999, 2996, 3003, 3002, 3007, 3008, 3009, 3011,
+ 2997, 2998, 3012, 3001, 3013, 3014, 3013, 3016, 3027, 3017,
+ 0, 3009, 2996, 3002, 3014, 3012, 3023, 3003, 3007, 2999,
+
+ 3018, 3003, 3002, 3007, 3008, 3009, 3011, 3017, 3022, 3012,
+ 3022, 3013, 3014, 3024, 3016, 3018, 3017, 3026, 3023, 3029,
+ 3027, 3033, 3031, 3023, 3026, 3034, 3040, 3018, 3031, 3035,
+ 3043, 3024, 3036, 3044, 3029, 3022, 3038, 3039, 3045, 3040,
+ 3024, 0, 3041, 3033, 3026, 3041, 3029, 3034, 3033, 3031,
+ 3036, 3039, 3034, 3040, 3048, 3035, 3035, 3043, 3038, 3036,
+ 3044, 3046, 3048, 3038, 3039, 3045, 3047, 3049, 3041, 3041,
+ 3051, 0, 3041, 3047, 3052, 0, 3053, 3054, 3055, 3046,
+ 3056, 3048, 3059, 3060, 3057, 3062, 3058, 3055, 3046, 3049,
+ 3057, 3059, 3065, 3047, 3049, 3056, 3052, 3061, 3053, 3061,
+
+ 3064, 3052, 3051, 3053, 3054, 3055, 3066, 3056, 3058, 3059,
+ 3067, 3057, 3062, 3058, 3065, 3060, 3074, 3068, 3069, 3065,
+ 3070, 3076, 3072, 3064, 3061, 3068, 3077, 3064, 3066, 3072,
+ 3069, 3079, 3070, 3066, 0, 3076, 3067, 3067, 3078, 3080,
+ 3077, 3083, 3084, 3074, 3068, 3069, 3086, 3070, 3076, 3072,
+ 3081, 3082, 3078, 3077, 3079, 3085, 3087, 3080, 3079, 3082,
+ 3083, 3081, 3085, 3090, 3084, 3078, 3080, 3088, 3083, 3084,
+ 3089, 3089, 3086, 3086, 3087, 3094, 3088, 3081, 3082, 3091,
+ 3094, 3095, 3085, 3087, 3096, 3098, 3100, 3091, 3102, 3103,
+ 3090, 3098, 3104, 3105, 3088, 3106, 3109, 3089, 3110, 3102,
+
+ 3103, 3112, 3095, 3111, 3105, 3110, 3091, 3094, 3095, 3116,
+ 3114, 3096, 3098, 3100, 3104, 3102, 3103, 3106, 3114, 3104,
+ 3105, 3111, 3106, 3109, 3113, 3110, 3117, 3119, 3113, 3121,
+ 3111, 3123, 3118, 3112, 3124, 3116, 3116, 3114, 3123, 3117,
+ 3118, 3125, 3127, 3128, 3129, 3130, 3132, 3127, 3131, 3136,
+ 0, 3113, 3138, 3117, 3119, 3131, 3134, 3130, 3123, 3118,
+ 3133, 3121, 0, 3125, 3140, 3132, 3124, 3138, 3125, 3127,
+ 3128, 3129, 3130, 3132, 3134, 3131, 3133, 3135, 3137, 3138,
+ 3144, 3136, 3139, 3134, 3135, 3141, 3137, 3133, 3148, 3139,
+ 3142, 3140, 3132, 3149, 3143, 3150, 3151, 3141, 3152, 3153,
+
+ 3149, 3154, 3156, 3148, 3135, 3137, 3144, 3144, 3157, 3139,
+ 3154, 3158, 3141, 3160, 3142, 3148, 3162, 3142, 3143, 0,
+ 3149, 3143, 3152, 3151, 3156, 3152, 3159, 3150, 3154, 3156,
+ 3165, 3153, 3164, 3158, 3159, 3157, 3161, 3161, 3158, 3165,
+ 3166, 3167, 3166, 3162, 3168, 3160, 3161, 3164, 3169, 3170,
+ 3173, 3171, 3174, 3159, 3175, 3167, 3169, 3165, 3176, 3164,
+ 3170, 3177, 3178, 3161, 3161, 3179, 3180, 3166, 3167, 3171,
+ 3181, 3168, 3182, 3183, 3177, 3169, 3170, 3173, 3171, 3174,
+ 3176, 3175, 3184, 3184, 3178, 3176, 3185, 3183, 3177, 3178,
+ 3186, 0, 3179, 3180, 3188, 3189, 3191, 3181, 3195, 3182,
+
+ 3183, 3199, 3193, 3195, 3201, 0, 3189, 3197, 3196, 3184,
+ 3193, 3198, 3186, 3196, 3207, 3197, 3198, 3186, 3185, 3202,
+ 3202, 3188, 3189, 3191, 3203, 3195, 3204, 3199, 3199, 3193,
+ 3205, 3201, 3203, 3208, 3197, 3196, 3206, 3205, 3198, 3204,
+ 3210, 3207, 3211, 3212, 3213, 3218, 3202, 3223, 3220, 3210,
+ 3212, 3203, 3213, 3204, 3206, 3214, 3217, 3205, 3221, 3226,
+ 3208, 3224, 3217, 3206, 0, 3222, 3229, 3210, 3225, 3227,
+ 3212, 3213, 3218, 0, 3211, 3220, 3224, 3214, 3222, 3223,
+ 3221, 3230, 3214, 3217, 3233, 3221, 3226, 3225, 3224, 3229,
+ 3231, 3227, 3222, 3229, 3232, 3225, 3227, 3231, 3234, 3235,
+
+ 3237, 3232, 3238, 3230, 3243, 3239, 3233, 3240, 3230, 3242,
+ 3238, 3233, 3239, 3234, 3240, 3243, 3245, 3231, 3242, 3237,
+ 3235, 3232, 3245, 3244, 3244, 3234, 3235, 3237, 3249, 3238,
+ 3246, 3243, 3239, 3244, 3240, 3249, 3242, 3248, 3250, 3251,
+ 3253, 3254, 3255, 3245, 3259, 3260, 3266, 3253, 3269, 0,
+ 3244, 3244, 3246, 3261, 3268, 3249, 3255, 3246, 3273, 3248,
+ 3267, 3251, 3268, 3276, 3248, 3254, 3251, 3253, 3254, 3255,
+ 3250, 3259, 3260, 3266, 3271, 3269, 3261, 3274, 3274, 3312,
+ 3261, 3268, 3267, 3275, 3275, 3273, 3271, 3267, 3277, 3277,
+ 3276, 3278, 3281, 3280, 3282, 3283, 3284, 0, 3287, 0,
+
+ 3288, 3271, 3291, 0, 3283, 0, 3274, 3288, 3290, 3284,
+ 3281, 3312, 3275, 0, 3278, 3280, 3296, 3277, 3278, 3281,
+ 3280, 3282, 3283, 3284, 3287, 3287, 3289, 3288, 3297, 3291,
+ 3290, 3292, 3295, 3289, 3295, 3290, 3296, 3299, 3292, 3298,
+ 3302, 3301, 3303, 3296, 3305, 3304, 3306, 3307, 3308, 3299,
+ 3301, 3297, 0, 3289, 3309, 3297, 3311, 3298, 3292, 3295,
+ 3308, 3311, 3302, 3304, 3299, 3316, 3298, 3302, 3301, 3303,
+ 3305, 3305, 3304, 3306, 3307, 3308, 3309, 3310, 3314, 3315,
+ 3310, 3309, 3313, 3318, 3313, 3315, 3317, 3316, 3311, 3319,
+ 3314, 3318, 3316, 3320, 3321, 3310, 3322, 3323, 0, 3324,
+
+ 3325, 3328, 3330, 0, 3310, 3314, 3315, 3310, 3317, 3313,
+ 3318, 3324, 3331, 3317, 3335, 3321, 3319, 3336, 3337, 3338,
+ 3340, 3321, 3325, 3322, 3323, 3320, 3324, 3325, 3328, 3330,
+ 3331, 3333, 3341, 3342, 3343, 3344, 3344, 3346, 3347, 3331,
+ 3333, 3335, 3348, 3351, 3336, 3337, 3338, 3340, 3349, 3353,
+ 3351, 3355, 3350, 3373, 3359, 3346, 3356, 3360, 3333, 3341,
+ 3342, 3343, 3344, 3354, 3346, 3347, 3349, 3350, 3356, 3348,
+ 3351, 3354, 3357, 3358, 3363, 3349, 3353, 3362, 3355, 3350,
+ 3359, 3359, 3366, 3356, 3360, 3373, 3357, 3367, 3358, 3362,
+ 3354, 3366, 3368, 3368, 3369, 0, 3370, 3374, 3372, 3357,
+
+ 3358, 3363, 3378, 3377, 3362, 3370, 3375, 3376, 3381, 3366,
+ 3374, 3367, 3377, 3378, 3367, 3376, 3380, 3384, 3454, 3368,
+ 3369, 3369, 3372, 3370, 3374, 3372, 3381, 3385, 3375, 3378,
+ 3377, 3388, 3388, 3375, 3376, 3381, 0, 3380, 3389, 3385,
+ 3384, 3398, 3399, 3380, 3384, 3389, 3402, 3403, 3404, 3406,
+ 3454, 3408, 3409, 0, 3385, 3408, 0, 3410, 3388, 3413,
+ 3402, 0, 3418, 3398, 3411, 3389, 3399, 3416, 3398, 3399,
+ 3409, 3411, 3413, 3402, 3403, 3404, 3406, 3415, 3408, 3409,
+ 3410, 3415, 3420, 3416, 3410, 3417, 3413, 3418, 3419, 3418,
+ 3422, 3411, 3421, 3423, 3416, 3425, 3427, 3425, 3422, 3424,
+
+ 3419, 3426, 3423, 3428, 3415, 3429, 3421, 3417, 3420, 3420,
+ 3424, 3431, 3417, 3426, 3427, 3419, 3432, 3422, 3428, 3421,
+ 3423, 3433, 3425, 3427, 3432, 3430, 3424, 3429, 3426, 3434,
+ 3428, 3430, 3429, 3431, 3439, 3435, 3434, 3440, 3431, 3441,
+ 3442, 3443, 3445, 3432, 3440, 3444, 3446, 3439, 3433, 0,
+ 3449, 3447, 3430, 3448, 3450, 0, 3434, 3435, 3442, 3447,
+ 3448, 3439, 3435, 3451, 3440, 3458, 3441, 3442, 3443, 3445,
+ 3455, 3444, 3444, 3446, 3449, 3453, 3450, 3449, 3447, 3456,
+ 3448, 3450, 3452, 3455, 3452, 3451, 3457, 3453, 3459, 3460,
+ 3451, 3461, 3458, 3463, 3456, 3459, 3465, 3455, 3464, 3466,
+
+ 3468, 3473, 3453, 3474, 3465, 3470, 3456, 3477, 3457, 3452,
+ 3464, 3476, 3468, 3457, 3470, 3459, 3460, 3475, 3461, 3476,
+ 3463, 3478, 3479, 3465, 3482, 3464, 3466, 3468, 3473, 3474,
+ 3474, 3480, 3470, 3481, 3483, 3479, 3475, 3485, 3476, 3477,
+ 3490, 3481, 3489, 3492, 3475, 3480, 3482, 3490, 3489, 3479,
+ 3493, 3482, 3495, 3478, 3496, 3497, 3492, 3498, 3480, 3495,
+ 3481, 3483, 3503, 3497, 3485, 3501, 3499, 3490, 3502, 3489,
+ 3492, 3498, 3509, 3493, 3510, 3500, 3496, 3493, 3506, 3495,
+ 3499, 3496, 3497, 3500, 3498, 3506, 3508, 3501, 3507, 3503,
+ 3502, 3511, 3501, 3499, 3508, 3502, 3510, 3507, 3512, 3509,
+
+ 3513, 3510, 3500, 3516, 3514, 3506, 3515, 3517, 3519, 3521,
+ 3520, 3516, 0, 3508, 3525, 3507, 0, 3523, 0, 3528,
+ 0, 3524, 3513, 3511, 3512, 3512, 3514, 3513, 3515, 3524,
+ 3516, 3514, 3520, 3515, 3525, 3519, 3521, 3520, 3526, 3517,
+ 3523, 3525, 3527, 3530, 3523, 3529, 3526, 3532, 3524, 3534,
+ 3527, 3528, 3537, 3529, 3539, 3538, 3536, 3530, 3540, 3535,
+ 3537, 0, 3535, 3538, 0, 3526, 3541, 0, 3539, 3527,
+ 3530, 3545, 3529, 3532, 3532, 3547, 3534, 3535, 3536, 3537,
+ 3542, 3539, 3538, 3536, 3540, 3540, 3535, 3546, 3541, 3535,
+ 3544, 3544, 3548, 3541, 3542, 3546, 3550, 3545, 3545, 3549,
+
+ 3551, 3547, 3547, 3552, 3554, 3555, 3553, 3542, 3551, 0,
+ 0, 3562, 3559, 0, 3546, 3556, 3550, 3544, 3548, 3548,
+ 3557, 3549, 0, 3550, 3565, 0, 3549, 3551, 3553, 3554,
+ 3552, 3554, 3555, 3553, 3559, 3556, 3558, 3560, 3562, 3559,
+ 3557, 3563, 3556, 3566, 3558, 3560, 3565, 3557, 3567, 3563,
+ 3568, 3565, 3569, 3571, 3572, 3575, 3567, 3574, 3568, 3573,
+ 3578, 3579, 3572, 3558, 3560, 3566, 3586, 3573, 3563, 3576,
+ 3566, 3580, 3582, 3585, 3586, 3567, 3588, 3568, 3569, 3569,
+ 3571, 3572, 3575, 3574, 3574, 3589, 3573, 3578, 3579, 3576,
+ 0, 3580, 0, 3586, 3582, 3585, 3576, 3587, 3580, 3582,
+
+ 3585, 0, 0, 3588, 0, 3587, 0, 0, 0, 0,
+ 0, 0, 3589, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 3587, 3593, 3593, 3593, 3593, 3593,
+ 3593, 3593, 3594, 3594, 3594, 3594, 3594, 3594, 3594, 3595,
+ 3595, 3595, 3595, 3595, 3595, 3595, 3596, 3596, 3596, 3596,
+ 3596, 3596, 3596, 3597, 3597, 3597, 3597, 3597, 3597, 3597,
+ 3598, 3598, 3598, 3598, 3598, 3598, 3598, 3599, 3599, 3599,
+ 3599, 3599, 3599, 3599, 3601, 3601, 0, 3601, 3601, 3601,
+ 3601, 3602, 3602, 0, 0, 0, 3602, 3602, 3603, 3603,
+ 0, 0, 3603, 0, 3603, 3604, 0, 0, 0, 0,
+
+ 0, 3604, 3605, 3605, 0, 0, 0, 3605, 3605, 3606,
+ 0, 0, 0, 0, 0, 3606, 3607, 3607, 0, 3607,
+ 3607, 3607, 3607, 3608, 0, 0, 0, 0, 0, 3608,
+ 3609, 3609, 0, 0, 0, 3609, 3609, 3610, 3610, 0,
+ 3610, 3610, 3610, 3610, 3592, 3592, 3592, 3592, 3592, 3592,
+ 3592, 3592, 3592, 3592, 3592, 3592, 3592, 3592, 3592, 3592,
+ 3592, 3592, 3592, 3592, 3592, 3592, 3592, 3592, 3592, 3592,
+ 3592, 3592, 3592, 3592, 3592, 3592, 3592, 3592, 3592, 3592,
+ 3592, 3592, 3592, 3592, 3592, 3592, 3592, 3592, 3592, 3592,
+ 3592, 3592, 3592, 3592, 3592, 3592, 3592, 3592, 3592, 3592,
+
+ 3592, 3592, 3592, 3592, 3592, 3592, 3592, 3592, 3592, 3592,
+ 3592
} ;
static yy_state_type yy_last_accepting_state;
@@ -4060,7 +4089,7 @@ static void config_end_include(void)
}
#endif
-#line 4061 "<stdout>"
+#line 4090 "<stdout>"
#define YY_NO_INPUT 1
#line 191 "util/configlexer.lex"
#ifndef YY_NO_UNPUT
@@ -4069,9 +4098,9 @@ static void config_end_include(void)
#ifndef YY_NO_INPUT
#define YY_NO_INPUT 1
#endif
-#line 4070 "<stdout>"
+#line 4099 "<stdout>"
-#line 4072 "<stdout>"
+#line 4101 "<stdout>"
#define INITIAL 0
#define quotedstring 1
@@ -4295,7 +4324,7 @@ YY_DECL
{
#line 211 "util/configlexer.lex"
-#line 4296 "<stdout>"
+#line 4325 "<stdout>"
while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */
{
@@ -4328,13 +4357,13 @@ yy_match:
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{
yy_current_state = (int) yy_def[yy_current_state];
- if ( yy_current_state >= 3558 )
+ if ( yy_current_state >= 3593 )
yy_c = yy_meta[yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
++yy_cp;
}
- while ( yy_base[yy_current_state] != 10178 );
+ while ( yy_base[yy_current_state] != 10245 );
yy_find_action:
yy_act = yy_accept[yy_current_state];
@@ -4559,7 +4588,7 @@ YY_RULE_SETUP
case 40:
YY_RULE_SETUP
#line 254 "util/configlexer.lex"
-{ YDVAR(1, VAR_TLS_ADDITIONAL_PORT) }
+{ YDVAR(1, VAR_TLS_WIN_CERT) }
YY_BREAK
case 41:
YY_RULE_SETUP
@@ -4579,72 +4608,72 @@ YY_RULE_SETUP
case 44:
YY_RULE_SETUP
#line 258 "util/configlexer.lex"
-{ YDVAR(1, VAR_TLS_SESSION_TICKET_KEYS) }
+{ YDVAR(1, VAR_TLS_ADDITIONAL_PORT) }
YY_BREAK
case 45:
YY_RULE_SETUP
#line 259 "util/configlexer.lex"
-{ YDVAR(1, VAR_TLS_CIPHERS) }
+{ YDVAR(1, VAR_TLS_SESSION_TICKET_KEYS) }
YY_BREAK
case 46:
YY_RULE_SETUP
#line 260 "util/configlexer.lex"
-{ YDVAR(1, VAR_TLS_CIPHERSUITES) }
+{ YDVAR(1, VAR_TLS_CIPHERS) }
YY_BREAK
case 47:
YY_RULE_SETUP
#line 261 "util/configlexer.lex"
-{ YDVAR(1, VAR_TLS_USE_SNI) }
+{ YDVAR(1, VAR_TLS_CIPHERSUITES) }
YY_BREAK
case 48:
YY_RULE_SETUP
#line 262 "util/configlexer.lex"
-{ YDVAR(1, VAR_HTTPS_PORT) }
+{ YDVAR(1, VAR_TLS_USE_SNI) }
YY_BREAK
case 49:
YY_RULE_SETUP
#line 263 "util/configlexer.lex"
-{ YDVAR(1, VAR_HTTP_ENDPOINT) }
+{ YDVAR(1, VAR_HTTPS_PORT) }
YY_BREAK
case 50:
YY_RULE_SETUP
#line 264 "util/configlexer.lex"
-{ YDVAR(1, VAR_HTTP_MAX_STREAMS) }
+{ YDVAR(1, VAR_HTTP_ENDPOINT) }
YY_BREAK
case 51:
YY_RULE_SETUP
#line 265 "util/configlexer.lex"
-{ YDVAR(1, VAR_HTTP_QUERY_BUFFER_SIZE) }
+{ YDVAR(1, VAR_HTTP_MAX_STREAMS) }
YY_BREAK
case 52:
YY_RULE_SETUP
#line 266 "util/configlexer.lex"
-{ YDVAR(1, VAR_HTTP_RESPONSE_BUFFER_SIZE) }
+{ YDVAR(1, VAR_HTTP_QUERY_BUFFER_SIZE) }
YY_BREAK
case 53:
YY_RULE_SETUP
#line 267 "util/configlexer.lex"
-{ YDVAR(1, VAR_HTTP_NODELAY) }
+{ YDVAR(1, VAR_HTTP_RESPONSE_BUFFER_SIZE) }
YY_BREAK
case 54:
YY_RULE_SETUP
#line 268 "util/configlexer.lex"
-{ YDVAR(1, VAR_HTTP_NOTLS_DOWNSTREAM) }
+{ YDVAR(1, VAR_HTTP_NODELAY) }
YY_BREAK
case 55:
YY_RULE_SETUP
#line 269 "util/configlexer.lex"
-{ YDVAR(1, VAR_USE_SYSTEMD) }
+{ YDVAR(1, VAR_HTTP_NOTLS_DOWNSTREAM) }
YY_BREAK
case 56:
YY_RULE_SETUP
#line 270 "util/configlexer.lex"
-{ YDVAR(1, VAR_DO_DAEMONIZE) }
+{ YDVAR(1, VAR_USE_SYSTEMD) }
YY_BREAK
case 57:
YY_RULE_SETUP
#line 271 "util/configlexer.lex"
-{ YDVAR(1, VAR_INTERFACE) }
+{ YDVAR(1, VAR_DO_DAEMONIZE) }
YY_BREAK
case 58:
YY_RULE_SETUP
@@ -4654,1404 +4683,1424 @@ YY_RULE_SETUP
case 59:
YY_RULE_SETUP
#line 273 "util/configlexer.lex"
-{ YDVAR(1, VAR_OUTGOING_INTERFACE) }
+{ YDVAR(1, VAR_INTERFACE) }
YY_BREAK
case 60:
YY_RULE_SETUP
#line 274 "util/configlexer.lex"
-{ YDVAR(1, VAR_INTERFACE_AUTOMATIC) }
+{ YDVAR(1, VAR_OUTGOING_INTERFACE) }
YY_BREAK
case 61:
YY_RULE_SETUP
#line 275 "util/configlexer.lex"
-{ YDVAR(1, VAR_SO_RCVBUF) }
+{ YDVAR(1, VAR_INTERFACE_AUTOMATIC) }
YY_BREAK
case 62:
YY_RULE_SETUP
#line 276 "util/configlexer.lex"
-{ YDVAR(1, VAR_SO_SNDBUF) }
+{ YDVAR(1, VAR_INTERFACE_AUTOMATIC_PORTS) }
YY_BREAK
case 63:
YY_RULE_SETUP
#line 277 "util/configlexer.lex"
-{ YDVAR(1, VAR_SO_REUSEPORT) }
+{ YDVAR(1, VAR_SO_RCVBUF) }
YY_BREAK
case 64:
YY_RULE_SETUP
#line 278 "util/configlexer.lex"
-{ YDVAR(1, VAR_IP_TRANSPARENT) }
+{ YDVAR(1, VAR_SO_SNDBUF) }
YY_BREAK
case 65:
YY_RULE_SETUP
#line 279 "util/configlexer.lex"
-{ YDVAR(1, VAR_IP_FREEBIND) }
+{ YDVAR(1, VAR_SO_REUSEPORT) }
YY_BREAK
case 66:
YY_RULE_SETUP
#line 280 "util/configlexer.lex"
-{ YDVAR(1, VAR_IP_DSCP) }
+{ YDVAR(1, VAR_IP_TRANSPARENT) }
YY_BREAK
case 67:
YY_RULE_SETUP
#line 281 "util/configlexer.lex"
-{ YDVAR(1, VAR_CHROOT) }
+{ YDVAR(1, VAR_IP_FREEBIND) }
YY_BREAK
case 68:
YY_RULE_SETUP
#line 282 "util/configlexer.lex"
-{ YDVAR(1, VAR_USERNAME) }
+{ YDVAR(1, VAR_IP_DSCP) }
YY_BREAK
case 69:
YY_RULE_SETUP
#line 283 "util/configlexer.lex"
-{ YDVAR(1, VAR_DIRECTORY) }
+{ YDVAR(1, VAR_CHROOT) }
YY_BREAK
case 70:
YY_RULE_SETUP
#line 284 "util/configlexer.lex"
-{ YDVAR(1, VAR_LOGFILE) }
+{ YDVAR(1, VAR_USERNAME) }
YY_BREAK
case 71:
YY_RULE_SETUP
#line 285 "util/configlexer.lex"
-{ YDVAR(1, VAR_PIDFILE) }
+{ YDVAR(1, VAR_DIRECTORY) }
YY_BREAK
case 72:
YY_RULE_SETUP
#line 286 "util/configlexer.lex"
-{ YDVAR(1, VAR_ROOT_HINTS) }
+{ YDVAR(1, VAR_LOGFILE) }
YY_BREAK
case 73:
YY_RULE_SETUP
#line 287 "util/configlexer.lex"
-{ YDVAR(1, VAR_STREAM_WAIT_SIZE) }
+{ YDVAR(1, VAR_PIDFILE) }
YY_BREAK
case 74:
YY_RULE_SETUP
#line 288 "util/configlexer.lex"
-{ YDVAR(1, VAR_EDNS_BUFFER_SIZE) }
+{ YDVAR(1, VAR_ROOT_HINTS) }
YY_BREAK
case 75:
YY_RULE_SETUP
#line 289 "util/configlexer.lex"
-{ YDVAR(1, VAR_MSG_BUFFER_SIZE) }
+{ YDVAR(1, VAR_STREAM_WAIT_SIZE) }
YY_BREAK
case 76:
YY_RULE_SETUP
#line 290 "util/configlexer.lex"
-{ YDVAR(1, VAR_MSG_CACHE_SIZE) }
+{ YDVAR(1, VAR_EDNS_BUFFER_SIZE) }
YY_BREAK
case 77:
YY_RULE_SETUP
#line 291 "util/configlexer.lex"
-{ YDVAR(1, VAR_MSG_CACHE_SLABS) }
+{ YDVAR(1, VAR_MSG_BUFFER_SIZE) }
YY_BREAK
case 78:
YY_RULE_SETUP
#line 292 "util/configlexer.lex"
-{ YDVAR(1, VAR_RRSET_CACHE_SIZE) }
+{ YDVAR(1, VAR_MSG_CACHE_SIZE) }
YY_BREAK
case 79:
YY_RULE_SETUP
#line 293 "util/configlexer.lex"
-{ YDVAR(1, VAR_RRSET_CACHE_SLABS) }
+{ YDVAR(1, VAR_MSG_CACHE_SLABS) }
YY_BREAK
case 80:
YY_RULE_SETUP
#line 294 "util/configlexer.lex"
-{ YDVAR(1, VAR_CACHE_MAX_TTL) }
+{ YDVAR(1, VAR_RRSET_CACHE_SIZE) }
YY_BREAK
case 81:
YY_RULE_SETUP
#line 295 "util/configlexer.lex"
-{ YDVAR(1, VAR_CACHE_MAX_NEGATIVE_TTL) }
+{ YDVAR(1, VAR_RRSET_CACHE_SLABS) }
YY_BREAK
case 82:
YY_RULE_SETUP
#line 296 "util/configlexer.lex"
-{ YDVAR(1, VAR_CACHE_MIN_TTL) }
+{ YDVAR(1, VAR_CACHE_MAX_TTL) }
YY_BREAK
case 83:
YY_RULE_SETUP
#line 297 "util/configlexer.lex"
-{ YDVAR(1, VAR_INFRA_HOST_TTL) }
+{ YDVAR(1, VAR_CACHE_MAX_NEGATIVE_TTL) }
YY_BREAK
case 84:
YY_RULE_SETUP
#line 298 "util/configlexer.lex"
-{ YDVAR(1, VAR_INFRA_LAME_TTL) }
+{ YDVAR(1, VAR_CACHE_MIN_TTL) }
YY_BREAK
case 85:
YY_RULE_SETUP
#line 299 "util/configlexer.lex"
-{ YDVAR(1, VAR_INFRA_CACHE_SLABS) }
+{ YDVAR(1, VAR_INFRA_HOST_TTL) }
YY_BREAK
case 86:
YY_RULE_SETUP
#line 300 "util/configlexer.lex"
-{ YDVAR(1, VAR_INFRA_CACHE_NUMHOSTS) }
+{ YDVAR(1, VAR_INFRA_LAME_TTL) }
YY_BREAK
case 87:
YY_RULE_SETUP
#line 301 "util/configlexer.lex"
-{ YDVAR(1, VAR_INFRA_CACHE_LAME_SIZE) }
+{ YDVAR(1, VAR_INFRA_CACHE_SLABS) }
YY_BREAK
case 88:
YY_RULE_SETUP
#line 302 "util/configlexer.lex"
-{ YDVAR(1, VAR_INFRA_CACHE_MIN_RTT) }
+{ YDVAR(1, VAR_INFRA_CACHE_NUMHOSTS) }
YY_BREAK
case 89:
YY_RULE_SETUP
#line 303 "util/configlexer.lex"
-{ YDVAR(1, VAR_INFRA_KEEP_PROBING) }
+{ YDVAR(1, VAR_INFRA_CACHE_LAME_SIZE) }
YY_BREAK
case 90:
YY_RULE_SETUP
#line 304 "util/configlexer.lex"
-{ YDVAR(1, VAR_NUM_QUERIES_PER_THREAD) }
+{ YDVAR(1, VAR_INFRA_CACHE_MIN_RTT) }
YY_BREAK
case 91:
YY_RULE_SETUP
#line 305 "util/configlexer.lex"
-{ YDVAR(1, VAR_JOSTLE_TIMEOUT) }
+{ YDVAR(1, VAR_INFRA_KEEP_PROBING) }
YY_BREAK
case 92:
YY_RULE_SETUP
#line 306 "util/configlexer.lex"
-{ YDVAR(1, VAR_DELAY_CLOSE) }
+{ YDVAR(1, VAR_NUM_QUERIES_PER_THREAD) }
YY_BREAK
case 93:
YY_RULE_SETUP
#line 307 "util/configlexer.lex"
-{ YDVAR(1, VAR_UDP_CONNECT) }
+{ YDVAR(1, VAR_JOSTLE_TIMEOUT) }
YY_BREAK
case 94:
YY_RULE_SETUP
#line 308 "util/configlexer.lex"
-{ YDVAR(1, VAR_TARGET_FETCH_POLICY) }
+{ YDVAR(1, VAR_DELAY_CLOSE) }
YY_BREAK
case 95:
YY_RULE_SETUP
#line 309 "util/configlexer.lex"
-{ YDVAR(1, VAR_HARDEN_SHORT_BUFSIZE) }
+{ YDVAR(1, VAR_UDP_CONNECT) }
YY_BREAK
case 96:
YY_RULE_SETUP
#line 310 "util/configlexer.lex"
-{ YDVAR(1, VAR_HARDEN_LARGE_QUERIES) }
+{ YDVAR(1, VAR_TARGET_FETCH_POLICY) }
YY_BREAK
case 97:
YY_RULE_SETUP
#line 311 "util/configlexer.lex"
-{ YDVAR(1, VAR_HARDEN_GLUE) }
+{ YDVAR(1, VAR_HARDEN_SHORT_BUFSIZE) }
YY_BREAK
case 98:
YY_RULE_SETUP
#line 312 "util/configlexer.lex"
-{ YDVAR(1, VAR_HARDEN_DNSSEC_STRIPPED) }
+{ YDVAR(1, VAR_HARDEN_LARGE_QUERIES) }
YY_BREAK
case 99:
YY_RULE_SETUP
#line 313 "util/configlexer.lex"
-{ YDVAR(1, VAR_HARDEN_BELOW_NXDOMAIN) }
+{ YDVAR(1, VAR_HARDEN_GLUE) }
YY_BREAK
case 100:
YY_RULE_SETUP
#line 314 "util/configlexer.lex"
-{ YDVAR(1, VAR_HARDEN_REFERRAL_PATH) }
+{ YDVAR(1, VAR_HARDEN_DNSSEC_STRIPPED) }
YY_BREAK
case 101:
YY_RULE_SETUP
#line 315 "util/configlexer.lex"
-{ YDVAR(1, VAR_HARDEN_ALGO_DOWNGRADE) }
+{ YDVAR(1, VAR_HARDEN_BELOW_NXDOMAIN) }
YY_BREAK
case 102:
YY_RULE_SETUP
#line 316 "util/configlexer.lex"
-{ YDVAR(1, VAR_USE_CAPS_FOR_ID) }
+{ YDVAR(1, VAR_HARDEN_REFERRAL_PATH) }
YY_BREAK
case 103:
YY_RULE_SETUP
#line 317 "util/configlexer.lex"
-{ YDVAR(1, VAR_CAPS_WHITELIST) }
+{ YDVAR(1, VAR_HARDEN_ALGO_DOWNGRADE) }
YY_BREAK
case 104:
YY_RULE_SETUP
#line 318 "util/configlexer.lex"
-{ YDVAR(1, VAR_CAPS_WHITELIST) }
+{ YDVAR(1, VAR_USE_CAPS_FOR_ID) }
YY_BREAK
case 105:
YY_RULE_SETUP
#line 319 "util/configlexer.lex"
-{ YDVAR(1, VAR_UNWANTED_REPLY_THRESHOLD) }
+{ YDVAR(1, VAR_CAPS_WHITELIST) }
YY_BREAK
case 106:
YY_RULE_SETUP
#line 320 "util/configlexer.lex"
-{ YDVAR(1, VAR_PRIVATE_ADDRESS) }
+{ YDVAR(1, VAR_CAPS_WHITELIST) }
YY_BREAK
case 107:
YY_RULE_SETUP
#line 321 "util/configlexer.lex"
-{ YDVAR(1, VAR_PRIVATE_DOMAIN) }
+{ YDVAR(1, VAR_UNWANTED_REPLY_THRESHOLD) }
YY_BREAK
case 108:
YY_RULE_SETUP
#line 322 "util/configlexer.lex"
-{ YDVAR(1, VAR_PREFETCH_KEY) }
+{ YDVAR(1, VAR_PRIVATE_ADDRESS) }
YY_BREAK
case 109:
YY_RULE_SETUP
#line 323 "util/configlexer.lex"
-{ YDVAR(1, VAR_PREFETCH) }
+{ YDVAR(1, VAR_PRIVATE_DOMAIN) }
YY_BREAK
case 110:
YY_RULE_SETUP
#line 324 "util/configlexer.lex"
-{ YDVAR(1, VAR_DENY_ANY) }
+{ YDVAR(1, VAR_PREFETCH_KEY) }
YY_BREAK
case 111:
YY_RULE_SETUP
#line 325 "util/configlexer.lex"
-{ YDVAR(0, VAR_STUB_ZONE) }
+{ YDVAR(1, VAR_PREFETCH) }
YY_BREAK
case 112:
YY_RULE_SETUP
#line 326 "util/configlexer.lex"
-{ YDVAR(1, VAR_NAME) }
+{ YDVAR(1, VAR_DENY_ANY) }
YY_BREAK
case 113:
YY_RULE_SETUP
#line 327 "util/configlexer.lex"
-{ YDVAR(1, VAR_STUB_ADDR) }
+{ YDVAR(0, VAR_STUB_ZONE) }
YY_BREAK
case 114:
YY_RULE_SETUP
#line 328 "util/configlexer.lex"
-{ YDVAR(1, VAR_STUB_HOST) }
+{ YDVAR(1, VAR_NAME) }
YY_BREAK
case 115:
YY_RULE_SETUP
#line 329 "util/configlexer.lex"
-{ YDVAR(1, VAR_STUB_PRIME) }
+{ YDVAR(1, VAR_STUB_ADDR) }
YY_BREAK
case 116:
YY_RULE_SETUP
#line 330 "util/configlexer.lex"
-{ YDVAR(1, VAR_STUB_FIRST) }
+{ YDVAR(1, VAR_STUB_HOST) }
YY_BREAK
case 117:
YY_RULE_SETUP
#line 331 "util/configlexer.lex"
-{ YDVAR(1, VAR_STUB_NO_CACHE) }
+{ YDVAR(1, VAR_STUB_PRIME) }
YY_BREAK
case 118:
YY_RULE_SETUP
#line 332 "util/configlexer.lex"
-{ YDVAR(1, VAR_STUB_SSL_UPSTREAM) }
+{ YDVAR(1, VAR_STUB_FIRST) }
YY_BREAK
case 119:
YY_RULE_SETUP
#line 333 "util/configlexer.lex"
-{ YDVAR(1, VAR_STUB_SSL_UPSTREAM) }
+{ YDVAR(1, VAR_STUB_NO_CACHE) }
YY_BREAK
case 120:
YY_RULE_SETUP
#line 334 "util/configlexer.lex"
-{ YDVAR(1, VAR_STUB_TCP_UPSTREAM) }
+{ YDVAR(1, VAR_STUB_SSL_UPSTREAM) }
YY_BREAK
case 121:
YY_RULE_SETUP
#line 335 "util/configlexer.lex"
-{ YDVAR(0, VAR_FORWARD_ZONE) }
+{ YDVAR(1, VAR_STUB_SSL_UPSTREAM) }
YY_BREAK
case 122:
YY_RULE_SETUP
#line 336 "util/configlexer.lex"
-{ YDVAR(1, VAR_FORWARD_ADDR) }
+{ YDVAR(1, VAR_STUB_TCP_UPSTREAM) }
YY_BREAK
case 123:
YY_RULE_SETUP
#line 337 "util/configlexer.lex"
-{ YDVAR(1, VAR_FORWARD_HOST) }
+{ YDVAR(0, VAR_FORWARD_ZONE) }
YY_BREAK
case 124:
YY_RULE_SETUP
#line 338 "util/configlexer.lex"
-{ YDVAR(1, VAR_FORWARD_FIRST) }
+{ YDVAR(1, VAR_FORWARD_ADDR) }
YY_BREAK
case 125:
YY_RULE_SETUP
#line 339 "util/configlexer.lex"
-{ YDVAR(1, VAR_FORWARD_NO_CACHE) }
+{ YDVAR(1, VAR_FORWARD_HOST) }
YY_BREAK
case 126:
YY_RULE_SETUP
#line 340 "util/configlexer.lex"
-{ YDVAR(1, VAR_FORWARD_SSL_UPSTREAM) }
+{ YDVAR(1, VAR_FORWARD_FIRST) }
YY_BREAK
case 127:
YY_RULE_SETUP
#line 341 "util/configlexer.lex"
-{ YDVAR(1, VAR_FORWARD_SSL_UPSTREAM) }
+{ YDVAR(1, VAR_FORWARD_NO_CACHE) }
YY_BREAK
case 128:
YY_RULE_SETUP
#line 342 "util/configlexer.lex"
-{ YDVAR(1, VAR_FORWARD_TCP_UPSTREAM) }
+{ YDVAR(1, VAR_FORWARD_SSL_UPSTREAM) }
YY_BREAK
case 129:
YY_RULE_SETUP
#line 343 "util/configlexer.lex"
-{ YDVAR(0, VAR_AUTH_ZONE) }
+{ YDVAR(1, VAR_FORWARD_SSL_UPSTREAM) }
YY_BREAK
case 130:
YY_RULE_SETUP
#line 344 "util/configlexer.lex"
-{ YDVAR(0, VAR_RPZ) }
+{ YDVAR(1, VAR_FORWARD_TCP_UPSTREAM) }
YY_BREAK
case 131:
YY_RULE_SETUP
#line 345 "util/configlexer.lex"
-{ YDVAR(1, VAR_TAGS) }
+{ YDVAR(0, VAR_AUTH_ZONE) }
YY_BREAK
case 132:
YY_RULE_SETUP
#line 346 "util/configlexer.lex"
-{ YDVAR(1, VAR_RPZ_ACTION_OVERRIDE) }
+{ YDVAR(0, VAR_RPZ) }
YY_BREAK
case 133:
YY_RULE_SETUP
#line 347 "util/configlexer.lex"
-{ YDVAR(1, VAR_RPZ_CNAME_OVERRIDE) }
+{ YDVAR(1, VAR_TAGS) }
YY_BREAK
case 134:
YY_RULE_SETUP
#line 348 "util/configlexer.lex"
-{ YDVAR(1, VAR_RPZ_LOG) }
+{ YDVAR(1, VAR_RPZ_ACTION_OVERRIDE) }
YY_BREAK
case 135:
YY_RULE_SETUP
#line 349 "util/configlexer.lex"
-{ YDVAR(1, VAR_RPZ_LOG_NAME) }
+{ YDVAR(1, VAR_RPZ_CNAME_OVERRIDE) }
YY_BREAK
case 136:
YY_RULE_SETUP
#line 350 "util/configlexer.lex"
-{ YDVAR(1, VAR_RPZ_SIGNAL_NXDOMAIN_RA) }
+{ YDVAR(1, VAR_RPZ_LOG) }
YY_BREAK
case 137:
YY_RULE_SETUP
#line 351 "util/configlexer.lex"
-{ YDVAR(1, VAR_ZONEFILE) }
+{ YDVAR(1, VAR_RPZ_LOG_NAME) }
YY_BREAK
case 138:
YY_RULE_SETUP
#line 352 "util/configlexer.lex"
-{ YDVAR(1, VAR_MASTER) }
+{ YDVAR(1, VAR_RPZ_SIGNAL_NXDOMAIN_RA) }
YY_BREAK
case 139:
YY_RULE_SETUP
#line 353 "util/configlexer.lex"
-{ YDVAR(1, VAR_MASTER) }
+{ YDVAR(1, VAR_ZONEFILE) }
YY_BREAK
case 140:
YY_RULE_SETUP
#line 354 "util/configlexer.lex"
-{ YDVAR(1, VAR_URL) }
+{ YDVAR(1, VAR_MASTER) }
YY_BREAK
case 141:
YY_RULE_SETUP
#line 355 "util/configlexer.lex"
-{ YDVAR(1, VAR_ALLOW_NOTIFY) }
+{ YDVAR(1, VAR_MASTER) }
YY_BREAK
case 142:
YY_RULE_SETUP
#line 356 "util/configlexer.lex"
-{ YDVAR(1, VAR_FOR_DOWNSTREAM) }
+{ YDVAR(1, VAR_URL) }
YY_BREAK
case 143:
YY_RULE_SETUP
#line 357 "util/configlexer.lex"
-{ YDVAR(1, VAR_FOR_UPSTREAM) }
+{ YDVAR(1, VAR_ALLOW_NOTIFY) }
YY_BREAK
case 144:
YY_RULE_SETUP
#line 358 "util/configlexer.lex"
-{ YDVAR(1, VAR_FALLBACK_ENABLED) }
+{ YDVAR(1, VAR_FOR_DOWNSTREAM) }
YY_BREAK
case 145:
YY_RULE_SETUP
#line 359 "util/configlexer.lex"
-{ YDVAR(0, VAR_VIEW) }
+{ YDVAR(1, VAR_FOR_UPSTREAM) }
YY_BREAK
case 146:
YY_RULE_SETUP
#line 360 "util/configlexer.lex"
-{ YDVAR(1, VAR_VIEW_FIRST) }
+{ YDVAR(1, VAR_FALLBACK_ENABLED) }
YY_BREAK
case 147:
YY_RULE_SETUP
#line 361 "util/configlexer.lex"
-{ YDVAR(1, VAR_DO_NOT_QUERY_ADDRESS) }
+{ YDVAR(0, VAR_VIEW) }
YY_BREAK
case 148:
YY_RULE_SETUP
#line 362 "util/configlexer.lex"
-{ YDVAR(1, VAR_DO_NOT_QUERY_LOCALHOST) }
+{ YDVAR(1, VAR_VIEW_FIRST) }
YY_BREAK
case 149:
YY_RULE_SETUP
#line 363 "util/configlexer.lex"
-{ YDVAR(2, VAR_ACCESS_CONTROL) }
+{ YDVAR(1, VAR_DO_NOT_QUERY_ADDRESS) }
YY_BREAK
case 150:
YY_RULE_SETUP
#line 364 "util/configlexer.lex"
-{ YDVAR(1, VAR_SEND_CLIENT_SUBNET) }
+{ YDVAR(1, VAR_DO_NOT_QUERY_LOCALHOST) }
YY_BREAK
case 151:
YY_RULE_SETUP
#line 365 "util/configlexer.lex"
-{ YDVAR(1, VAR_CLIENT_SUBNET_ZONE) }
+{ YDVAR(2, VAR_ACCESS_CONTROL) }
YY_BREAK
case 152:
YY_RULE_SETUP
#line 366 "util/configlexer.lex"
-{ YDVAR(1, VAR_CLIENT_SUBNET_ALWAYS_FORWARD) }
+{ YDVAR(1, VAR_SEND_CLIENT_SUBNET) }
YY_BREAK
case 153:
YY_RULE_SETUP
#line 367 "util/configlexer.lex"
-{ YDVAR(1, VAR_CLIENT_SUBNET_OPCODE) }
+{ YDVAR(1, VAR_CLIENT_SUBNET_ZONE) }
YY_BREAK
case 154:
YY_RULE_SETUP
#line 368 "util/configlexer.lex"
-{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV4) }
+{ YDVAR(1, VAR_CLIENT_SUBNET_ALWAYS_FORWARD) }
YY_BREAK
case 155:
YY_RULE_SETUP
#line 369 "util/configlexer.lex"
-{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV6) }
+{ YDVAR(1, VAR_CLIENT_SUBNET_OPCODE) }
YY_BREAK
case 156:
YY_RULE_SETUP
#line 370 "util/configlexer.lex"
-{ YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV4) }
+{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV4) }
YY_BREAK
case 157:
YY_RULE_SETUP
#line 371 "util/configlexer.lex"
-{ YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV6) }
+{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV6) }
YY_BREAK
case 158:
YY_RULE_SETUP
#line 372 "util/configlexer.lex"
-{ YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV4) }
+{ YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV4) }
YY_BREAK
case 159:
YY_RULE_SETUP
#line 373 "util/configlexer.lex"
-{ YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV6) }
+{ YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV6) }
YY_BREAK
case 160:
YY_RULE_SETUP
#line 374 "util/configlexer.lex"
-{ YDVAR(1, VAR_HIDE_IDENTITY) }
+{ YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV4) }
YY_BREAK
case 161:
YY_RULE_SETUP
#line 375 "util/configlexer.lex"
-{ YDVAR(1, VAR_HIDE_VERSION) }
+{ YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV6) }
YY_BREAK
case 162:
YY_RULE_SETUP
#line 376 "util/configlexer.lex"
-{ YDVAR(1, VAR_HIDE_TRUSTANCHOR) }
+{ YDVAR(1, VAR_HIDE_IDENTITY) }
YY_BREAK
case 163:
YY_RULE_SETUP
#line 377 "util/configlexer.lex"
-{ YDVAR(1, VAR_HIDE_HTTP_USER_AGENT) }
+{ YDVAR(1, VAR_HIDE_VERSION) }
YY_BREAK
case 164:
YY_RULE_SETUP
#line 378 "util/configlexer.lex"
-{ YDVAR(1, VAR_IDENTITY) }
+{ YDVAR(1, VAR_HIDE_TRUSTANCHOR) }
YY_BREAK
case 165:
YY_RULE_SETUP
#line 379 "util/configlexer.lex"
-{ YDVAR(1, VAR_VERSION) }
+{ YDVAR(1, VAR_HIDE_HTTP_USER_AGENT) }
YY_BREAK
case 166:
YY_RULE_SETUP
#line 380 "util/configlexer.lex"
-{ YDVAR(1, VAR_HTTP_USER_AGENT) }
+{ YDVAR(1, VAR_IDENTITY) }
YY_BREAK
case 167:
YY_RULE_SETUP
#line 381 "util/configlexer.lex"
-{ YDVAR(1, VAR_MODULE_CONF) }
+{ YDVAR(1, VAR_VERSION) }
YY_BREAK
case 168:
YY_RULE_SETUP
#line 382 "util/configlexer.lex"
-{ YDVAR(1, VAR_DLV_ANCHOR) }
+{ YDVAR(1, VAR_HTTP_USER_AGENT) }
YY_BREAK
case 169:
YY_RULE_SETUP
#line 383 "util/configlexer.lex"
-{ YDVAR(1, VAR_DLV_ANCHOR_FILE) }
+{ YDVAR(1, VAR_MODULE_CONF) }
YY_BREAK
case 170:
YY_RULE_SETUP
#line 384 "util/configlexer.lex"
-{ YDVAR(1, VAR_TRUST_ANCHOR_FILE) }
+{ YDVAR(1, VAR_DLV_ANCHOR) }
YY_BREAK
case 171:
YY_RULE_SETUP
#line 385 "util/configlexer.lex"
-{ YDVAR(1, VAR_AUTO_TRUST_ANCHOR_FILE) }
+{ YDVAR(1, VAR_DLV_ANCHOR_FILE) }
YY_BREAK
case 172:
YY_RULE_SETUP
#line 386 "util/configlexer.lex"
-{ YDVAR(1, VAR_TRUSTED_KEYS_FILE) }
+{ YDVAR(1, VAR_TRUST_ANCHOR_FILE) }
YY_BREAK
case 173:
YY_RULE_SETUP
#line 387 "util/configlexer.lex"
-{ YDVAR(1, VAR_TRUST_ANCHOR) }
+{ YDVAR(1, VAR_AUTO_TRUST_ANCHOR_FILE) }
YY_BREAK
case 174:
YY_RULE_SETUP
#line 388 "util/configlexer.lex"
-{ YDVAR(1, VAR_TRUST_ANCHOR_SIGNALING) }
+{ YDVAR(1, VAR_TRUSTED_KEYS_FILE) }
YY_BREAK
case 175:
YY_RULE_SETUP
#line 389 "util/configlexer.lex"
-{ YDVAR(1, VAR_ROOT_KEY_SENTINEL) }
+{ YDVAR(1, VAR_TRUST_ANCHOR) }
YY_BREAK
case 176:
YY_RULE_SETUP
#line 390 "util/configlexer.lex"
-{ YDVAR(1, VAR_VAL_OVERRIDE_DATE) }
+{ YDVAR(1, VAR_TRUST_ANCHOR_SIGNALING) }
YY_BREAK
case 177:
YY_RULE_SETUP
#line 391 "util/configlexer.lex"
-{ YDVAR(1, VAR_VAL_SIG_SKEW_MIN) }
+{ YDVAR(1, VAR_ROOT_KEY_SENTINEL) }
YY_BREAK
case 178:
YY_RULE_SETUP
#line 392 "util/configlexer.lex"
-{ YDVAR(1, VAR_VAL_SIG_SKEW_MAX) }
+{ YDVAR(1, VAR_VAL_OVERRIDE_DATE) }
YY_BREAK
case 179:
YY_RULE_SETUP
#line 393 "util/configlexer.lex"
-{ YDVAR(1, VAR_VAL_MAX_RESTART) }
+{ YDVAR(1, VAR_VAL_SIG_SKEW_MIN) }
YY_BREAK
case 180:
YY_RULE_SETUP
#line 394 "util/configlexer.lex"
-{ YDVAR(1, VAR_BOGUS_TTL) }
+{ YDVAR(1, VAR_VAL_SIG_SKEW_MAX) }
YY_BREAK
case 181:
YY_RULE_SETUP
#line 395 "util/configlexer.lex"
-{ YDVAR(1, VAR_VAL_CLEAN_ADDITIONAL) }
+{ YDVAR(1, VAR_VAL_MAX_RESTART) }
YY_BREAK
case 182:
YY_RULE_SETUP
#line 396 "util/configlexer.lex"
-{ YDVAR(1, VAR_VAL_PERMISSIVE_MODE) }
+{ YDVAR(1, VAR_BOGUS_TTL) }
YY_BREAK
case 183:
YY_RULE_SETUP
#line 397 "util/configlexer.lex"
-{ YDVAR(1, VAR_AGGRESSIVE_NSEC) }
+{ YDVAR(1, VAR_VAL_CLEAN_ADDITIONAL) }
YY_BREAK
case 184:
YY_RULE_SETUP
#line 398 "util/configlexer.lex"
-{ YDVAR(1, VAR_IGNORE_CD_FLAG) }
+{ YDVAR(1, VAR_VAL_PERMISSIVE_MODE) }
YY_BREAK
case 185:
YY_RULE_SETUP
#line 399 "util/configlexer.lex"
-{ YDVAR(1, VAR_SERVE_EXPIRED) }
+{ YDVAR(1, VAR_AGGRESSIVE_NSEC) }
YY_BREAK
case 186:
YY_RULE_SETUP
#line 400 "util/configlexer.lex"
-{ YDVAR(1, VAR_SERVE_EXPIRED_TTL) }
+{ YDVAR(1, VAR_IGNORE_CD_FLAG) }
YY_BREAK
case 187:
YY_RULE_SETUP
#line 401 "util/configlexer.lex"
-{ YDVAR(1, VAR_SERVE_EXPIRED_TTL_RESET) }
+{ YDVAR(1, VAR_SERVE_EXPIRED) }
YY_BREAK
case 188:
YY_RULE_SETUP
#line 402 "util/configlexer.lex"
-{ YDVAR(1, VAR_SERVE_EXPIRED_REPLY_TTL) }
+{ YDVAR(1, VAR_SERVE_EXPIRED_TTL) }
YY_BREAK
case 189:
YY_RULE_SETUP
#line 403 "util/configlexer.lex"
-{ YDVAR(1, VAR_SERVE_EXPIRED_CLIENT_TIMEOUT) }
+{ YDVAR(1, VAR_SERVE_EXPIRED_TTL_RESET) }
YY_BREAK
case 190:
YY_RULE_SETUP
#line 404 "util/configlexer.lex"
-{ YDVAR(1, VAR_SERVE_ORIGINAL_TTL) }
+{ YDVAR(1, VAR_SERVE_EXPIRED_REPLY_TTL) }
YY_BREAK
case 191:
YY_RULE_SETUP
#line 405 "util/configlexer.lex"
-{ YDVAR(1, VAR_FAKE_DSA) }
+{ YDVAR(1, VAR_SERVE_EXPIRED_CLIENT_TIMEOUT) }
YY_BREAK
case 192:
YY_RULE_SETUP
#line 406 "util/configlexer.lex"
-{ YDVAR(1, VAR_FAKE_SHA1) }
+{ YDVAR(1, VAR_EDE_SERVE_EXPIRED) }
YY_BREAK
case 193:
YY_RULE_SETUP
#line 407 "util/configlexer.lex"
-{ YDVAR(1, VAR_VAL_LOG_LEVEL) }
+{ YDVAR(1, VAR_SERVE_ORIGINAL_TTL) }
YY_BREAK
case 194:
YY_RULE_SETUP
#line 408 "util/configlexer.lex"
-{ YDVAR(1, VAR_KEY_CACHE_SIZE) }
+{ YDVAR(1, VAR_FAKE_DSA) }
YY_BREAK
case 195:
YY_RULE_SETUP
#line 409 "util/configlexer.lex"
-{ YDVAR(1, VAR_KEY_CACHE_SLABS) }
+{ YDVAR(1, VAR_FAKE_SHA1) }
YY_BREAK
case 196:
YY_RULE_SETUP
#line 410 "util/configlexer.lex"
-{ YDVAR(1, VAR_NEG_CACHE_SIZE) }
+{ YDVAR(1, VAR_VAL_LOG_LEVEL) }
YY_BREAK
case 197:
YY_RULE_SETUP
#line 411 "util/configlexer.lex"
-{
- YDVAR(1, VAR_VAL_NSEC3_KEYSIZE_ITERATIONS) }
+{ YDVAR(1, VAR_KEY_CACHE_SIZE) }
YY_BREAK
case 198:
YY_RULE_SETUP
-#line 413 "util/configlexer.lex"
-{ YDVAR(1, VAR_ZONEMD_PERMISSIVE_MODE) }
+#line 412 "util/configlexer.lex"
+{ YDVAR(1, VAR_KEY_CACHE_SLABS) }
YY_BREAK
case 199:
YY_RULE_SETUP
-#line 414 "util/configlexer.lex"
-{ YDVAR(1, VAR_ZONEMD_CHECK) }
+#line 413 "util/configlexer.lex"
+{ YDVAR(1, VAR_NEG_CACHE_SIZE) }
YY_BREAK
case 200:
YY_RULE_SETUP
-#line 415 "util/configlexer.lex"
-{ YDVAR(1, VAR_ZONEMD_REJECT_ABSENCE) }
+#line 414 "util/configlexer.lex"
+{
+ YDVAR(1, VAR_VAL_NSEC3_KEYSIZE_ITERATIONS) }
YY_BREAK
case 201:
YY_RULE_SETUP
#line 416 "util/configlexer.lex"
-{ YDVAR(1, VAR_ADD_HOLDDOWN) }
+{ YDVAR(1, VAR_ZONEMD_PERMISSIVE_MODE) }
YY_BREAK
case 202:
YY_RULE_SETUP
#line 417 "util/configlexer.lex"
-{ YDVAR(1, VAR_DEL_HOLDDOWN) }
+{ YDVAR(1, VAR_ZONEMD_CHECK) }
YY_BREAK
case 203:
YY_RULE_SETUP
#line 418 "util/configlexer.lex"
-{ YDVAR(1, VAR_KEEP_MISSING) }
+{ YDVAR(1, VAR_ZONEMD_REJECT_ABSENCE) }
YY_BREAK
case 204:
YY_RULE_SETUP
#line 419 "util/configlexer.lex"
-{ YDVAR(1, VAR_PERMIT_SMALL_HOLDDOWN) }
+{ YDVAR(1, VAR_ADD_HOLDDOWN) }
YY_BREAK
case 205:
YY_RULE_SETUP
#line 420 "util/configlexer.lex"
-{ YDVAR(1, VAR_USE_SYSLOG) }
+{ YDVAR(1, VAR_DEL_HOLDDOWN) }
YY_BREAK
case 206:
YY_RULE_SETUP
#line 421 "util/configlexer.lex"
-{ YDVAR(1, VAR_LOG_IDENTITY) }
+{ YDVAR(1, VAR_KEEP_MISSING) }
YY_BREAK
case 207:
YY_RULE_SETUP
#line 422 "util/configlexer.lex"
-{ YDVAR(1, VAR_LOG_TIME_ASCII) }
+{ YDVAR(1, VAR_PERMIT_SMALL_HOLDDOWN) }
YY_BREAK
case 208:
YY_RULE_SETUP
#line 423 "util/configlexer.lex"
-{ YDVAR(1, VAR_LOG_QUERIES) }
+{ YDVAR(1, VAR_USE_SYSLOG) }
YY_BREAK
case 209:
YY_RULE_SETUP
#line 424 "util/configlexer.lex"
-{ YDVAR(1, VAR_LOG_REPLIES) }
+{ YDVAR(1, VAR_LOG_IDENTITY) }
YY_BREAK
case 210:
YY_RULE_SETUP
#line 425 "util/configlexer.lex"
-{ YDVAR(1, VAR_LOG_TAG_QUERYREPLY) }
+{ YDVAR(1, VAR_LOG_TIME_ASCII) }
YY_BREAK
case 211:
YY_RULE_SETUP
#line 426 "util/configlexer.lex"
-{ YDVAR(1, VAR_LOG_LOCAL_ACTIONS) }
+{ YDVAR(1, VAR_LOG_QUERIES) }
YY_BREAK
case 212:
YY_RULE_SETUP
#line 427 "util/configlexer.lex"
-{ YDVAR(1, VAR_LOG_SERVFAIL) }
+{ YDVAR(1, VAR_LOG_REPLIES) }
YY_BREAK
case 213:
YY_RULE_SETUP
#line 428 "util/configlexer.lex"
-{ YDVAR(2, VAR_LOCAL_ZONE) }
+{ YDVAR(1, VAR_LOG_TAG_QUERYREPLY) }
YY_BREAK
case 214:
YY_RULE_SETUP
#line 429 "util/configlexer.lex"
-{ YDVAR(1, VAR_LOCAL_DATA) }
+{ YDVAR(1, VAR_LOG_LOCAL_ACTIONS) }
YY_BREAK
case 215:
YY_RULE_SETUP
#line 430 "util/configlexer.lex"
-{ YDVAR(1, VAR_LOCAL_DATA_PTR) }
+{ YDVAR(1, VAR_LOG_SERVFAIL) }
YY_BREAK
case 216:
YY_RULE_SETUP
#line 431 "util/configlexer.lex"
-{ YDVAR(1, VAR_UNBLOCK_LAN_ZONES) }
+{ YDVAR(2, VAR_LOCAL_ZONE) }
YY_BREAK
case 217:
YY_RULE_SETUP
#line 432 "util/configlexer.lex"
-{ YDVAR(1, VAR_INSECURE_LAN_ZONES) }
+{ YDVAR(1, VAR_LOCAL_DATA) }
YY_BREAK
case 218:
YY_RULE_SETUP
#line 433 "util/configlexer.lex"
-{ YDVAR(1, VAR_STATISTICS_INTERVAL) }
+{ YDVAR(1, VAR_LOCAL_DATA_PTR) }
YY_BREAK
case 219:
YY_RULE_SETUP
#line 434 "util/configlexer.lex"
-{ YDVAR(1, VAR_STATISTICS_CUMULATIVE) }
+{ YDVAR(1, VAR_UNBLOCK_LAN_ZONES) }
YY_BREAK
case 220:
YY_RULE_SETUP
#line 435 "util/configlexer.lex"
-{ YDVAR(1, VAR_EXTENDED_STATISTICS) }
+{ YDVAR(1, VAR_INSECURE_LAN_ZONES) }
YY_BREAK
case 221:
YY_RULE_SETUP
#line 436 "util/configlexer.lex"
-{ YDVAR(1, VAR_SHM_ENABLE) }
+{ YDVAR(1, VAR_STATISTICS_INTERVAL) }
YY_BREAK
case 222:
YY_RULE_SETUP
#line 437 "util/configlexer.lex"
-{ YDVAR(1, VAR_SHM_KEY) }
+{ YDVAR(1, VAR_STATISTICS_CUMULATIVE) }
YY_BREAK
case 223:
YY_RULE_SETUP
#line 438 "util/configlexer.lex"
-{ YDVAR(0, VAR_REMOTE_CONTROL) }
+{ YDVAR(1, VAR_EXTENDED_STATISTICS) }
YY_BREAK
case 224:
YY_RULE_SETUP
#line 439 "util/configlexer.lex"
-{ YDVAR(1, VAR_CONTROL_ENABLE) }
+{ YDVAR(1, VAR_SHM_ENABLE) }
YY_BREAK
case 225:
YY_RULE_SETUP
#line 440 "util/configlexer.lex"
-{ YDVAR(1, VAR_CONTROL_INTERFACE) }
+{ YDVAR(1, VAR_SHM_KEY) }
YY_BREAK
case 226:
YY_RULE_SETUP
#line 441 "util/configlexer.lex"
-{ YDVAR(1, VAR_CONTROL_PORT) }
+{ YDVAR(0, VAR_REMOTE_CONTROL) }
YY_BREAK
case 227:
YY_RULE_SETUP
#line 442 "util/configlexer.lex"
-{ YDVAR(1, VAR_CONTROL_USE_CERT) }
+{ YDVAR(1, VAR_CONTROL_ENABLE) }
YY_BREAK
case 228:
YY_RULE_SETUP
#line 443 "util/configlexer.lex"
-{ YDVAR(1, VAR_SERVER_KEY_FILE) }
+{ YDVAR(1, VAR_CONTROL_INTERFACE) }
YY_BREAK
case 229:
YY_RULE_SETUP
#line 444 "util/configlexer.lex"
-{ YDVAR(1, VAR_SERVER_CERT_FILE) }
+{ YDVAR(1, VAR_CONTROL_PORT) }
YY_BREAK
case 230:
YY_RULE_SETUP
#line 445 "util/configlexer.lex"
-{ YDVAR(1, VAR_CONTROL_KEY_FILE) }
+{ YDVAR(1, VAR_CONTROL_USE_CERT) }
YY_BREAK
case 231:
YY_RULE_SETUP
#line 446 "util/configlexer.lex"
-{ YDVAR(1, VAR_CONTROL_CERT_FILE) }
+{ YDVAR(1, VAR_SERVER_KEY_FILE) }
YY_BREAK
case 232:
YY_RULE_SETUP
#line 447 "util/configlexer.lex"
-{ YDVAR(1, VAR_PYTHON_SCRIPT) }
+{ YDVAR(1, VAR_SERVER_CERT_FILE) }
YY_BREAK
case 233:
YY_RULE_SETUP
#line 448 "util/configlexer.lex"
-{ YDVAR(0, VAR_PYTHON) }
+{ YDVAR(1, VAR_CONTROL_KEY_FILE) }
YY_BREAK
case 234:
YY_RULE_SETUP
#line 449 "util/configlexer.lex"
-{ YDVAR(1, VAR_DYNLIB_FILE) }
+{ YDVAR(1, VAR_CONTROL_CERT_FILE) }
YY_BREAK
case 235:
YY_RULE_SETUP
#line 450 "util/configlexer.lex"
-{ YDVAR(0, VAR_DYNLIB) }
+{ YDVAR(1, VAR_PYTHON_SCRIPT) }
YY_BREAK
case 236:
YY_RULE_SETUP
#line 451 "util/configlexer.lex"
-{ YDVAR(1, VAR_DOMAIN_INSECURE) }
+{ YDVAR(0, VAR_PYTHON) }
YY_BREAK
case 237:
YY_RULE_SETUP
#line 452 "util/configlexer.lex"
-{ YDVAR(1, VAR_MINIMAL_RESPONSES) }
+{ YDVAR(1, VAR_DYNLIB_FILE) }
YY_BREAK
case 238:
YY_RULE_SETUP
#line 453 "util/configlexer.lex"
-{ YDVAR(1, VAR_RRSET_ROUNDROBIN) }
+{ YDVAR(0, VAR_DYNLIB) }
YY_BREAK
case 239:
YY_RULE_SETUP
#line 454 "util/configlexer.lex"
-{ YDVAR(1, VAR_UNKNOWN_SERVER_TIME_LIMIT) }
+{ YDVAR(1, VAR_DOMAIN_INSECURE) }
YY_BREAK
case 240:
YY_RULE_SETUP
#line 455 "util/configlexer.lex"
-{ YDVAR(1, VAR_MAX_UDP_SIZE) }
+{ YDVAR(1, VAR_MINIMAL_RESPONSES) }
YY_BREAK
case 241:
YY_RULE_SETUP
#line 456 "util/configlexer.lex"
-{ YDVAR(1, VAR_DNS64_PREFIX) }
+{ YDVAR(1, VAR_RRSET_ROUNDROBIN) }
YY_BREAK
case 242:
YY_RULE_SETUP
#line 457 "util/configlexer.lex"
-{ YDVAR(1, VAR_DNS64_SYNTHALL) }
+{ YDVAR(1, VAR_UNKNOWN_SERVER_TIME_LIMIT) }
YY_BREAK
case 243:
YY_RULE_SETUP
#line 458 "util/configlexer.lex"
-{ YDVAR(1, VAR_DNS64_IGNORE_AAAA) }
+{ YDVAR(1, VAR_MAX_UDP_SIZE) }
YY_BREAK
case 244:
YY_RULE_SETUP
#line 459 "util/configlexer.lex"
-{ YDVAR(1, VAR_DEFINE_TAG) }
+{ YDVAR(1, VAR_DNS64_PREFIX) }
YY_BREAK
case 245:
YY_RULE_SETUP
#line 460 "util/configlexer.lex"
-{ YDVAR(2, VAR_LOCAL_ZONE_TAG) }
+{ YDVAR(1, VAR_DNS64_SYNTHALL) }
YY_BREAK
case 246:
YY_RULE_SETUP
#line 461 "util/configlexer.lex"
-{ YDVAR(2, VAR_ACCESS_CONTROL_TAG) }
+{ YDVAR(1, VAR_DNS64_IGNORE_AAAA) }
YY_BREAK
case 247:
YY_RULE_SETUP
#line 462 "util/configlexer.lex"
-{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_ACTION) }
+{ YDVAR(1, VAR_DEFINE_TAG) }
YY_BREAK
case 248:
YY_RULE_SETUP
#line 463 "util/configlexer.lex"
-{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_DATA) }
+{ YDVAR(2, VAR_LOCAL_ZONE_TAG) }
YY_BREAK
case 249:
YY_RULE_SETUP
#line 464 "util/configlexer.lex"
-{ YDVAR(2, VAR_ACCESS_CONTROL_VIEW) }
+{ YDVAR(2, VAR_ACCESS_CONTROL_TAG) }
YY_BREAK
case 250:
YY_RULE_SETUP
#line 465 "util/configlexer.lex"
-{ YDVAR(3, VAR_LOCAL_ZONE_OVERRIDE) }
+{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_ACTION) }
YY_BREAK
case 251:
YY_RULE_SETUP
#line 466 "util/configlexer.lex"
-{ YDVAR(0, VAR_DNSTAP) }
+{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_DATA) }
YY_BREAK
case 252:
YY_RULE_SETUP
#line 467 "util/configlexer.lex"
-{ YDVAR(1, VAR_DNSTAP_ENABLE) }
+{ YDVAR(2, VAR_ACCESS_CONTROL_VIEW) }
YY_BREAK
case 253:
YY_RULE_SETUP
#line 468 "util/configlexer.lex"
-{ YDVAR(1, VAR_DNSTAP_BIDIRECTIONAL) }
+{ YDVAR(3, VAR_LOCAL_ZONE_OVERRIDE) }
YY_BREAK
case 254:
YY_RULE_SETUP
#line 469 "util/configlexer.lex"
-{ YDVAR(1, VAR_DNSTAP_SOCKET_PATH) }
+{ YDVAR(0, VAR_DNSTAP) }
YY_BREAK
case 255:
YY_RULE_SETUP
#line 470 "util/configlexer.lex"
-{ YDVAR(1, VAR_DNSTAP_IP) }
+{ YDVAR(1, VAR_DNSTAP_ENABLE) }
YY_BREAK
case 256:
YY_RULE_SETUP
#line 471 "util/configlexer.lex"
-{ YDVAR(1, VAR_DNSTAP_TLS) }
+{ YDVAR(1, VAR_DNSTAP_BIDIRECTIONAL) }
YY_BREAK
case 257:
YY_RULE_SETUP
#line 472 "util/configlexer.lex"
-{ YDVAR(1, VAR_DNSTAP_TLS_SERVER_NAME) }
+{ YDVAR(1, VAR_DNSTAP_SOCKET_PATH) }
YY_BREAK
case 258:
YY_RULE_SETUP
#line 473 "util/configlexer.lex"
-{ YDVAR(1, VAR_DNSTAP_TLS_CERT_BUNDLE) }
+{ YDVAR(1, VAR_DNSTAP_IP) }
YY_BREAK
case 259:
YY_RULE_SETUP
#line 474 "util/configlexer.lex"
-{
- YDVAR(1, VAR_DNSTAP_TLS_CLIENT_KEY_FILE) }
+{ YDVAR(1, VAR_DNSTAP_TLS) }
YY_BREAK
case 260:
YY_RULE_SETUP
-#line 476 "util/configlexer.lex"
-{
- YDVAR(1, VAR_DNSTAP_TLS_CLIENT_CERT_FILE) }
+#line 475 "util/configlexer.lex"
+{ YDVAR(1, VAR_DNSTAP_TLS_SERVER_NAME) }
YY_BREAK
case 261:
YY_RULE_SETUP
-#line 478 "util/configlexer.lex"
-{ YDVAR(1, VAR_DNSTAP_SEND_IDENTITY) }
+#line 476 "util/configlexer.lex"
+{ YDVAR(1, VAR_DNSTAP_TLS_CERT_BUNDLE) }
YY_BREAK
case 262:
YY_RULE_SETUP
-#line 479 "util/configlexer.lex"
-{ YDVAR(1, VAR_DNSTAP_SEND_VERSION) }
+#line 477 "util/configlexer.lex"
+{
+ YDVAR(1, VAR_DNSTAP_TLS_CLIENT_KEY_FILE) }
YY_BREAK
case 263:
YY_RULE_SETUP
-#line 480 "util/configlexer.lex"
-{ YDVAR(1, VAR_DNSTAP_IDENTITY) }
+#line 479 "util/configlexer.lex"
+{
+ YDVAR(1, VAR_DNSTAP_TLS_CLIENT_CERT_FILE) }
YY_BREAK
case 264:
YY_RULE_SETUP
#line 481 "util/configlexer.lex"
-{ YDVAR(1, VAR_DNSTAP_VERSION) }
+{ YDVAR(1, VAR_DNSTAP_SEND_IDENTITY) }
YY_BREAK
case 265:
YY_RULE_SETUP
#line 482 "util/configlexer.lex"
-{
- YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES) }
+{ YDVAR(1, VAR_DNSTAP_SEND_VERSION) }
YY_BREAK
case 266:
YY_RULE_SETUP
-#line 484 "util/configlexer.lex"
-{
- YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES) }
+#line 483 "util/configlexer.lex"
+{ YDVAR(1, VAR_DNSTAP_IDENTITY) }
YY_BREAK
case 267:
YY_RULE_SETUP
-#line 486 "util/configlexer.lex"
-{
- YDVAR(1, VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES) }
+#line 484 "util/configlexer.lex"
+{ YDVAR(1, VAR_DNSTAP_VERSION) }
YY_BREAK
case 268:
YY_RULE_SETUP
-#line 488 "util/configlexer.lex"
+#line 485 "util/configlexer.lex"
{
- YDVAR(1, VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES) }
+ YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES) }
YY_BREAK
case 269:
YY_RULE_SETUP
-#line 490 "util/configlexer.lex"
+#line 487 "util/configlexer.lex"
{
- YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) }
+ YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES) }
YY_BREAK
case 270:
YY_RULE_SETUP
-#line 492 "util/configlexer.lex"
+#line 489 "util/configlexer.lex"
{
- YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) }
+ YDVAR(1, VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES) }
YY_BREAK
case 271:
YY_RULE_SETUP
-#line 494 "util/configlexer.lex"
-{ YDVAR(1, VAR_DISABLE_DNSSEC_LAME_CHECK) }
+#line 491 "util/configlexer.lex"
+{
+ YDVAR(1, VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES) }
YY_BREAK
case 272:
YY_RULE_SETUP
-#line 495 "util/configlexer.lex"
-{ YDVAR(1, VAR_IP_RATELIMIT) }
+#line 493 "util/configlexer.lex"
+{
+ YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) }
YY_BREAK
case 273:
YY_RULE_SETUP
-#line 496 "util/configlexer.lex"
-{ YDVAR(1, VAR_RATELIMIT) }
+#line 495 "util/configlexer.lex"
+{
+ YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) }
YY_BREAK
case 274:
YY_RULE_SETUP
#line 497 "util/configlexer.lex"
-{ YDVAR(1, VAR_IP_RATELIMIT_SLABS) }
+{ YDVAR(1, VAR_DISABLE_DNSSEC_LAME_CHECK) }
YY_BREAK
case 275:
YY_RULE_SETUP
#line 498 "util/configlexer.lex"
-{ YDVAR(1, VAR_RATELIMIT_SLABS) }
+{ YDVAR(1, VAR_IP_RATELIMIT) }
YY_BREAK
case 276:
YY_RULE_SETUP
#line 499 "util/configlexer.lex"
-{ YDVAR(1, VAR_IP_RATELIMIT_SIZE) }
+{ YDVAR(1, VAR_RATELIMIT) }
YY_BREAK
case 277:
YY_RULE_SETUP
#line 500 "util/configlexer.lex"
-{ YDVAR(1, VAR_RATELIMIT_SIZE) }
+{ YDVAR(1, VAR_IP_RATELIMIT_SLABS) }
YY_BREAK
case 278:
YY_RULE_SETUP
#line 501 "util/configlexer.lex"
-{ YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) }
+{ YDVAR(1, VAR_RATELIMIT_SLABS) }
YY_BREAK
case 279:
YY_RULE_SETUP
#line 502 "util/configlexer.lex"
-{ YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) }
+{ YDVAR(1, VAR_IP_RATELIMIT_SIZE) }
YY_BREAK
case 280:
YY_RULE_SETUP
#line 503 "util/configlexer.lex"
-{ YDVAR(1, VAR_IP_RATELIMIT_FACTOR) }
+{ YDVAR(1, VAR_RATELIMIT_SIZE) }
YY_BREAK
case 281:
YY_RULE_SETUP
#line 504 "util/configlexer.lex"
-{ YDVAR(1, VAR_RATELIMIT_FACTOR) }
+{ YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) }
YY_BREAK
case 282:
YY_RULE_SETUP
#line 505 "util/configlexer.lex"
-{ YDVAR(1, VAR_IP_RATELIMIT_BACKOFF) }
+{ YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) }
YY_BREAK
case 283:
YY_RULE_SETUP
#line 506 "util/configlexer.lex"
-{ YDVAR(1, VAR_RATELIMIT_BACKOFF) }
+{ YDVAR(1, VAR_IP_RATELIMIT_FACTOR) }
YY_BREAK
case 284:
YY_RULE_SETUP
#line 507 "util/configlexer.lex"
-{ YDVAR(1, VAR_OUTBOUND_MSG_RETRY) }
+{ YDVAR(1, VAR_RATELIMIT_FACTOR) }
YY_BREAK
case 285:
YY_RULE_SETUP
#line 508 "util/configlexer.lex"
-{ YDVAR(1, VAR_LOW_RTT) }
+{ YDVAR(1, VAR_IP_RATELIMIT_BACKOFF) }
YY_BREAK
case 286:
YY_RULE_SETUP
#line 509 "util/configlexer.lex"
-{ YDVAR(1, VAR_FAST_SERVER_NUM) }
+{ YDVAR(1, VAR_RATELIMIT_BACKOFF) }
YY_BREAK
case 287:
YY_RULE_SETUP
#line 510 "util/configlexer.lex"
-{ YDVAR(1, VAR_FAST_SERVER_PERMIL) }
+{ YDVAR(1, VAR_OUTBOUND_MSG_RETRY) }
YY_BREAK
case 288:
YY_RULE_SETUP
#line 511 "util/configlexer.lex"
-{ YDVAR(1, VAR_FAST_SERVER_PERMIL) }
+{ YDVAR(1, VAR_LOW_RTT) }
YY_BREAK
case 289:
YY_RULE_SETUP
#line 512 "util/configlexer.lex"
-{ YDVAR(1, VAR_FAST_SERVER_PERMIL) }
+{ YDVAR(1, VAR_FAST_SERVER_NUM) }
YY_BREAK
case 290:
YY_RULE_SETUP
#line 513 "util/configlexer.lex"
-{ YDVAR(2, VAR_RESPONSE_IP_TAG) }
+{ YDVAR(1, VAR_FAST_SERVER_PERMIL) }
YY_BREAK
case 291:
YY_RULE_SETUP
#line 514 "util/configlexer.lex"
-{ YDVAR(2, VAR_RESPONSE_IP) }
+{ YDVAR(1, VAR_FAST_SERVER_PERMIL) }
YY_BREAK
case 292:
YY_RULE_SETUP
#line 515 "util/configlexer.lex"
-{ YDVAR(2, VAR_RESPONSE_IP_DATA) }
+{ YDVAR(1, VAR_FAST_SERVER_PERMIL) }
YY_BREAK
case 293:
YY_RULE_SETUP
#line 516 "util/configlexer.lex"
-{ YDVAR(0, VAR_DNSCRYPT) }
+{ YDVAR(2, VAR_RESPONSE_IP_TAG) }
YY_BREAK
case 294:
YY_RULE_SETUP
#line 517 "util/configlexer.lex"
-{ YDVAR(1, VAR_DNSCRYPT_ENABLE) }
+{ YDVAR(2, VAR_RESPONSE_IP) }
YY_BREAK
case 295:
YY_RULE_SETUP
#line 518 "util/configlexer.lex"
-{ YDVAR(1, VAR_DNSCRYPT_PORT) }
+{ YDVAR(2, VAR_RESPONSE_IP_DATA) }
YY_BREAK
case 296:
YY_RULE_SETUP
#line 519 "util/configlexer.lex"
-{ YDVAR(1, VAR_DNSCRYPT_PROVIDER) }
+{ YDVAR(0, VAR_DNSCRYPT) }
YY_BREAK
case 297:
YY_RULE_SETUP
#line 520 "util/configlexer.lex"
-{ YDVAR(1, VAR_DNSCRYPT_SECRET_KEY) }
+{ YDVAR(1, VAR_DNSCRYPT_ENABLE) }
YY_BREAK
case 298:
YY_RULE_SETUP
#line 521 "util/configlexer.lex"
-{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT) }
+{ YDVAR(1, VAR_DNSCRYPT_PORT) }
YY_BREAK
case 299:
YY_RULE_SETUP
#line 522 "util/configlexer.lex"
-{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT_ROTATED) }
+{ YDVAR(1, VAR_DNSCRYPT_PROVIDER) }
YY_BREAK
case 300:
YY_RULE_SETUP
#line 523 "util/configlexer.lex"
-{
- YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE) }
+{ YDVAR(1, VAR_DNSCRYPT_SECRET_KEY) }
YY_BREAK
case 301:
YY_RULE_SETUP
-#line 525 "util/configlexer.lex"
-{
- YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS) }
+#line 524 "util/configlexer.lex"
+{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT) }
YY_BREAK
case 302:
YY_RULE_SETUP
-#line 527 "util/configlexer.lex"
-{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SIZE) }
+#line 525 "util/configlexer.lex"
+{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT_ROTATED) }
YY_BREAK
case 303:
YY_RULE_SETUP
-#line 528 "util/configlexer.lex"
-{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SLABS) }
+#line 526 "util/configlexer.lex"
+{
+ YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE) }
YY_BREAK
case 304:
YY_RULE_SETUP
-#line 529 "util/configlexer.lex"
-{ YDVAR(1, VAR_PAD_RESPONSES) }
+#line 528 "util/configlexer.lex"
+{
+ YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS) }
YY_BREAK
case 305:
YY_RULE_SETUP
#line 530 "util/configlexer.lex"
-{ YDVAR(1, VAR_PAD_RESPONSES_BLOCK_SIZE) }
+{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SIZE) }
YY_BREAK
case 306:
YY_RULE_SETUP
#line 531 "util/configlexer.lex"
-{ YDVAR(1, VAR_PAD_QUERIES) }
+{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SLABS) }
YY_BREAK
case 307:
YY_RULE_SETUP
#line 532 "util/configlexer.lex"
-{ YDVAR(1, VAR_PAD_QUERIES_BLOCK_SIZE) }
+{ YDVAR(1, VAR_PAD_RESPONSES) }
YY_BREAK
case 308:
YY_RULE_SETUP
#line 533 "util/configlexer.lex"
-{ YDVAR(1, VAR_IPSECMOD_ENABLED) }
+{ YDVAR(1, VAR_PAD_RESPONSES_BLOCK_SIZE) }
YY_BREAK
case 309:
YY_RULE_SETUP
#line 534 "util/configlexer.lex"
-{ YDVAR(1, VAR_IPSECMOD_IGNORE_BOGUS) }
+{ YDVAR(1, VAR_PAD_QUERIES) }
YY_BREAK
case 310:
YY_RULE_SETUP
#line 535 "util/configlexer.lex"
-{ YDVAR(1, VAR_IPSECMOD_HOOK) }
+{ YDVAR(1, VAR_PAD_QUERIES_BLOCK_SIZE) }
YY_BREAK
case 311:
YY_RULE_SETUP
#line 536 "util/configlexer.lex"
-{ YDVAR(1, VAR_IPSECMOD_MAX_TTL) }
+{ YDVAR(1, VAR_IPSECMOD_ENABLED) }
YY_BREAK
case 312:
YY_RULE_SETUP
#line 537 "util/configlexer.lex"
-{ YDVAR(1, VAR_IPSECMOD_WHITELIST) }
+{ YDVAR(1, VAR_IPSECMOD_IGNORE_BOGUS) }
YY_BREAK
case 313:
YY_RULE_SETUP
#line 538 "util/configlexer.lex"
-{ YDVAR(1, VAR_IPSECMOD_WHITELIST) }
+{ YDVAR(1, VAR_IPSECMOD_HOOK) }
YY_BREAK
case 314:
YY_RULE_SETUP
#line 539 "util/configlexer.lex"
-{ YDVAR(1, VAR_IPSECMOD_STRICT) }
+{ YDVAR(1, VAR_IPSECMOD_MAX_TTL) }
YY_BREAK
case 315:
YY_RULE_SETUP
#line 540 "util/configlexer.lex"
-{ YDVAR(0, VAR_CACHEDB) }
+{ YDVAR(1, VAR_IPSECMOD_WHITELIST) }
YY_BREAK
case 316:
YY_RULE_SETUP
#line 541 "util/configlexer.lex"
-{ YDVAR(1, VAR_CACHEDB_BACKEND) }
+{ YDVAR(1, VAR_IPSECMOD_WHITELIST) }
YY_BREAK
case 317:
YY_RULE_SETUP
#line 542 "util/configlexer.lex"
-{ YDVAR(1, VAR_CACHEDB_SECRETSEED) }
+{ YDVAR(1, VAR_IPSECMOD_STRICT) }
YY_BREAK
case 318:
YY_RULE_SETUP
#line 543 "util/configlexer.lex"
-{ YDVAR(1, VAR_CACHEDB_REDISHOST) }
+{ YDVAR(0, VAR_CACHEDB) }
YY_BREAK
case 319:
YY_RULE_SETUP
#line 544 "util/configlexer.lex"
-{ YDVAR(1, VAR_CACHEDB_REDISPORT) }
+{ YDVAR(1, VAR_CACHEDB_BACKEND) }
YY_BREAK
case 320:
YY_RULE_SETUP
#line 545 "util/configlexer.lex"
-{ YDVAR(1, VAR_CACHEDB_REDISTIMEOUT) }
+{ YDVAR(1, VAR_CACHEDB_SECRETSEED) }
YY_BREAK
case 321:
YY_RULE_SETUP
#line 546 "util/configlexer.lex"
-{ YDVAR(1, VAR_CACHEDB_REDISEXPIRERECORDS) }
+{ YDVAR(1, VAR_CACHEDB_REDISHOST) }
YY_BREAK
case 322:
YY_RULE_SETUP
#line 547 "util/configlexer.lex"
-{ YDVAR(0, VAR_IPSET) }
+{ YDVAR(1, VAR_CACHEDB_REDISPORT) }
YY_BREAK
case 323:
YY_RULE_SETUP
#line 548 "util/configlexer.lex"
-{ YDVAR(1, VAR_IPSET_NAME_V4) }
+{ YDVAR(1, VAR_CACHEDB_REDISTIMEOUT) }
YY_BREAK
case 324:
YY_RULE_SETUP
#line 549 "util/configlexer.lex"
-{ YDVAR(1, VAR_IPSET_NAME_V6) }
+{ YDVAR(1, VAR_CACHEDB_REDISEXPIRERECORDS) }
YY_BREAK
case 325:
YY_RULE_SETUP
#line 550 "util/configlexer.lex"
-{ YDVAR(1, VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM) }
+{ YDVAR(0, VAR_IPSET) }
YY_BREAK
case 326:
YY_RULE_SETUP
#line 551 "util/configlexer.lex"
-{ YDVAR(2, VAR_TCP_CONNECTION_LIMIT) }
+{ YDVAR(1, VAR_IPSET_NAME_V4) }
YY_BREAK
case 327:
YY_RULE_SETUP
#line 552 "util/configlexer.lex"
-{ YDVAR(2, VAR_EDNS_CLIENT_STRING) }
+{ YDVAR(1, VAR_IPSET_NAME_V6) }
YY_BREAK
case 328:
YY_RULE_SETUP
#line 553 "util/configlexer.lex"
-{ YDVAR(1, VAR_EDNS_CLIENT_STRING_OPCODE) }
+{ YDVAR(1, VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM) }
YY_BREAK
case 329:
YY_RULE_SETUP
#line 554 "util/configlexer.lex"
-{ YDVAR(1, VAR_NSID ) }
+{ YDVAR(2, VAR_TCP_CONNECTION_LIMIT) }
YY_BREAK
case 330:
-/* rule 330 can match eol */
YY_RULE_SETUP
#line 555 "util/configlexer.lex"
-{ LEXOUT(("NL\n")); cfg_parser->line++; }
+{ YDVAR(2, VAR_EDNS_CLIENT_STRING) }
YY_BREAK
-/* Quoted strings. Strip leading and ending quotes */
case 331:
YY_RULE_SETUP
+#line 556 "util/configlexer.lex"
+{ YDVAR(1, VAR_EDNS_CLIENT_STRING_OPCODE) }
+ YY_BREAK
+case 332:
+YY_RULE_SETUP
+#line 557 "util/configlexer.lex"
+{ YDVAR(1, VAR_NSID ) }
+ YY_BREAK
+case 333:
+YY_RULE_SETUP
#line 558 "util/configlexer.lex"
+{ YDVAR(1, VAR_EDE ) }
+ YY_BREAK
+case 334:
+/* rule 334 can match eol */
+YY_RULE_SETUP
+#line 559 "util/configlexer.lex"
+{ LEXOUT(("NL\n")); cfg_parser->line++; }
+ YY_BREAK
+/* Quoted strings. Strip leading and ending quotes */
+case 335:
+YY_RULE_SETUP
+#line 562 "util/configlexer.lex"
{ BEGIN(quotedstring); LEXOUT(("QS ")); }
YY_BREAK
case YY_STATE_EOF(quotedstring):
-#line 559 "util/configlexer.lex"
+#line 563 "util/configlexer.lex"
{
yyerror("EOF inside quoted string");
if(--num_args == 0) { BEGIN(INITIAL); }
else { BEGIN(val); }
}
YY_BREAK
-case 332:
+case 336:
YY_RULE_SETUP
-#line 564 "util/configlexer.lex"
+#line 568 "util/configlexer.lex"
{ LEXOUT(("STR(%s) ", yytext)); yymore(); }
YY_BREAK
-case 333:
-/* rule 333 can match eol */
+case 337:
+/* rule 337 can match eol */
YY_RULE_SETUP
-#line 565 "util/configlexer.lex"
+#line 569 "util/configlexer.lex"
{ yyerror("newline inside quoted string, no end \"");
cfg_parser->line++; BEGIN(INITIAL); }
YY_BREAK
-case 334:
+case 338:
YY_RULE_SETUP
-#line 567 "util/configlexer.lex"
+#line 571 "util/configlexer.lex"
{
LEXOUT(("QE "));
if(--num_args == 0) { BEGIN(INITIAL); }
@@ -6064,34 +6113,34 @@ YY_RULE_SETUP
}
YY_BREAK
/* Single Quoted strings. Strip leading and ending quotes */
-case 335:
+case 339:
YY_RULE_SETUP
-#line 579 "util/configlexer.lex"
+#line 583 "util/configlexer.lex"
{ BEGIN(singlequotedstr); LEXOUT(("SQS ")); }
YY_BREAK
case YY_STATE_EOF(singlequotedstr):
-#line 580 "util/configlexer.lex"
+#line 584 "util/configlexer.lex"
{
yyerror("EOF inside quoted string");
if(--num_args == 0) { BEGIN(INITIAL); }
else { BEGIN(val); }
}
YY_BREAK
-case 336:
+case 340:
YY_RULE_SETUP
-#line 585 "util/configlexer.lex"
+#line 589 "util/configlexer.lex"
{ LEXOUT(("STR(%s) ", yytext)); yymore(); }
YY_BREAK
-case 337:
-/* rule 337 can match eol */
+case 341:
+/* rule 341 can match eol */
YY_RULE_SETUP
-#line 586 "util/configlexer.lex"
+#line 590 "util/configlexer.lex"
{ yyerror("newline inside quoted string, no end '");
cfg_parser->line++; BEGIN(INITIAL); }
YY_BREAK
-case 338:
+case 342:
YY_RULE_SETUP
-#line 588 "util/configlexer.lex"
+#line 592 "util/configlexer.lex"
{
LEXOUT(("SQE "));
if(--num_args == 0) { BEGIN(INITIAL); }
@@ -6104,38 +6153,38 @@ YY_RULE_SETUP
}
YY_BREAK
/* include: directive */
-case 339:
+case 343:
YY_RULE_SETUP
-#line 600 "util/configlexer.lex"
+#line 604 "util/configlexer.lex"
{
LEXOUT(("v(%s) ", yytext)); inc_prev = YYSTATE; BEGIN(include); }
YY_BREAK
case YY_STATE_EOF(include):
-#line 602 "util/configlexer.lex"
+#line 606 "util/configlexer.lex"
{
yyerror("EOF inside include directive");
BEGIN(inc_prev);
}
YY_BREAK
-case 340:
+case 344:
YY_RULE_SETUP
-#line 606 "util/configlexer.lex"
+#line 610 "util/configlexer.lex"
{ LEXOUT(("ISP ")); /* ignore */ }
YY_BREAK
-case 341:
-/* rule 341 can match eol */
+case 345:
+/* rule 345 can match eol */
YY_RULE_SETUP
-#line 607 "util/configlexer.lex"
+#line 611 "util/configlexer.lex"
{ LEXOUT(("NL\n")); cfg_parser->line++;}
YY_BREAK
-case 342:
+case 346:
YY_RULE_SETUP
-#line 608 "util/configlexer.lex"
+#line 612 "util/configlexer.lex"
{ LEXOUT(("IQS ")); BEGIN(include_quoted); }
YY_BREAK
-case 343:
+case 347:
YY_RULE_SETUP
-#line 609 "util/configlexer.lex"
+#line 613 "util/configlexer.lex"
{
LEXOUT(("Iunquotedstr(%s) ", yytext));
config_start_include_glob(yytext, 0);
@@ -6143,27 +6192,27 @@ YY_RULE_SETUP
}
YY_BREAK
case YY_STATE_EOF(include_quoted):
-#line 614 "util/configlexer.lex"
+#line 618 "util/configlexer.lex"
{
yyerror("EOF inside quoted string");
BEGIN(inc_prev);
}
YY_BREAK
-case 344:
+case 348:
YY_RULE_SETUP
-#line 618 "util/configlexer.lex"
+#line 622 "util/configlexer.lex"
{ LEXOUT(("ISTR(%s) ", yytext)); yymore(); }
YY_BREAK
-case 345:
-/* rule 345 can match eol */
+case 349:
+/* rule 349 can match eol */
YY_RULE_SETUP
-#line 619 "util/configlexer.lex"
+#line 623 "util/configlexer.lex"
{ yyerror("newline before \" in include name");
cfg_parser->line++; BEGIN(inc_prev); }
YY_BREAK
-case 346:
+case 350:
YY_RULE_SETUP
-#line 621 "util/configlexer.lex"
+#line 625 "util/configlexer.lex"
{
LEXOUT(("IQE "));
yytext[yyleng - 1] = '\0';
@@ -6173,7 +6222,7 @@ YY_RULE_SETUP
YY_BREAK
case YY_STATE_EOF(INITIAL):
case YY_STATE_EOF(val):
-#line 627 "util/configlexer.lex"
+#line 631 "util/configlexer.lex"
{
LEXOUT(("LEXEOF "));
yy_set_bol(1); /* Set beginning of line, so "^" rules match. */
@@ -6188,39 +6237,39 @@ case YY_STATE_EOF(val):
}
YY_BREAK
/* include-toplevel: directive */
-case 347:
+case 351:
YY_RULE_SETUP
-#line 641 "util/configlexer.lex"
+#line 645 "util/configlexer.lex"
{
LEXOUT(("v(%s) ", yytext)); inc_prev = YYSTATE; BEGIN(include_toplevel);
}
YY_BREAK
case YY_STATE_EOF(include_toplevel):
-#line 644 "util/configlexer.lex"
+#line 648 "util/configlexer.lex"
{
yyerror("EOF inside include_toplevel directive");
BEGIN(inc_prev);
}
YY_BREAK
-case 348:
+case 352:
YY_RULE_SETUP
-#line 648 "util/configlexer.lex"
+#line 652 "util/configlexer.lex"
{ LEXOUT(("ITSP ")); /* ignore */ }
YY_BREAK
-case 349:
-/* rule 349 can match eol */
+case 353:
+/* rule 353 can match eol */
YY_RULE_SETUP
-#line 649 "util/configlexer.lex"
+#line 653 "util/configlexer.lex"
{ LEXOUT(("NL\n")); cfg_parser->line++; }
YY_BREAK
-case 350:
+case 354:
YY_RULE_SETUP
-#line 650 "util/configlexer.lex"
+#line 654 "util/configlexer.lex"
{ LEXOUT(("ITQS ")); BEGIN(include_toplevel_quoted); }
YY_BREAK
-case 351:
+case 355:
YY_RULE_SETUP
-#line 651 "util/configlexer.lex"
+#line 655 "util/configlexer.lex"
{
LEXOUT(("ITunquotedstr(%s) ", yytext));
config_start_include_glob(yytext, 1);
@@ -6229,29 +6278,29 @@ YY_RULE_SETUP
}
YY_BREAK
case YY_STATE_EOF(include_toplevel_quoted):
-#line 657 "util/configlexer.lex"
+#line 661 "util/configlexer.lex"
{
yyerror("EOF inside quoted string");
BEGIN(inc_prev);
}
YY_BREAK
-case 352:
+case 356:
YY_RULE_SETUP
-#line 661 "util/configlexer.lex"
+#line 665 "util/configlexer.lex"
{ LEXOUT(("ITSTR(%s) ", yytext)); yymore(); }
YY_BREAK
-case 353:
-/* rule 353 can match eol */
+case 357:
+/* rule 357 can match eol */
YY_RULE_SETUP
-#line 662 "util/configlexer.lex"
+#line 666 "util/configlexer.lex"
{
yyerror("newline before \" in include name");
cfg_parser->line++; BEGIN(inc_prev);
}
YY_BREAK
-case 354:
+case 358:
YY_RULE_SETUP
-#line 666 "util/configlexer.lex"
+#line 670 "util/configlexer.lex"
{
LEXOUT(("ITQE "));
yytext[yyleng - 1] = '\0';
@@ -6260,33 +6309,33 @@ YY_RULE_SETUP
return (VAR_FORCE_TOPLEVEL);
}
YY_BREAK
-case 355:
+case 359:
YY_RULE_SETUP
-#line 674 "util/configlexer.lex"
+#line 678 "util/configlexer.lex"
{ LEXOUT(("unquotedstr(%s) ", yytext));
if(--num_args == 0) { BEGIN(INITIAL); }
yylval.str = strdup(yytext); return STRING_ARG; }
YY_BREAK
-case 356:
+case 360:
YY_RULE_SETUP
-#line 678 "util/configlexer.lex"
+#line 682 "util/configlexer.lex"
{
ub_c_error_msg("unknown keyword '%s'", yytext);
}
YY_BREAK
-case 357:
+case 361:
YY_RULE_SETUP
-#line 682 "util/configlexer.lex"
+#line 686 "util/configlexer.lex"
{
ub_c_error_msg("stray '%s'", yytext);
}
YY_BREAK
-case 358:
+case 362:
YY_RULE_SETUP
-#line 686 "util/configlexer.lex"
+#line 690 "util/configlexer.lex"
ECHO;
YY_BREAK
-#line 6287 "<stdout>"
+#line 6336 "<stdout>"
case YY_END_OF_BUFFER:
{
@@ -6581,7 +6630,7 @@ static int yy_get_next_buffer (void)
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{
yy_current_state = (int) yy_def[yy_current_state];
- if ( yy_current_state >= 3558 )
+ if ( yy_current_state >= 3593 )
yy_c = yy_meta[yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
@@ -6609,11 +6658,11 @@ static int yy_get_next_buffer (void)
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{
yy_current_state = (int) yy_def[yy_current_state];
- if ( yy_current_state >= 3558 )
+ if ( yy_current_state >= 3593 )
yy_c = yy_meta[yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
- yy_is_jam = (yy_current_state == 3557);
+ yy_is_jam = (yy_current_state == 3592);
return yy_is_jam ? 0 : yy_current_state;
}
@@ -7252,6 +7301,6 @@ void yyfree (void * ptr )
#define YYTABLES_NAME "yytables"
-#line 686 "util/configlexer.lex"
+#line 690 "util/configlexer.lex"
diff --git a/util/configlexer.lex b/util/configlexer.lex
index 34a0e5dd9cb0..2d59fbc32e8c 100644
--- a/util/configlexer.lex
+++ b/util/configlexer.lex
@@ -251,6 +251,7 @@ tls-port{COLON} { YDVAR(1, VAR_SSL_PORT) }
ssl-cert-bundle{COLON} { YDVAR(1, VAR_TLS_CERT_BUNDLE) }
tls-cert-bundle{COLON} { YDVAR(1, VAR_TLS_CERT_BUNDLE) }
tls-win-cert{COLON} { YDVAR(1, VAR_TLS_WIN_CERT) }
+tls-system-cert{COLON} { YDVAR(1, VAR_TLS_WIN_CERT) }
additional-ssl-port{COLON} { YDVAR(1, VAR_TLS_ADDITIONAL_PORT) }
additional-tls-port{COLON} { YDVAR(1, VAR_TLS_ADDITIONAL_PORT) }
tls-additional-ports{COLON} { YDVAR(1, VAR_TLS_ADDITIONAL_PORT) }
@@ -272,6 +273,7 @@ interface{COLON} { YDVAR(1, VAR_INTERFACE) }
ip-address{COLON} { YDVAR(1, VAR_INTERFACE) }
outgoing-interface{COLON} { YDVAR(1, VAR_OUTGOING_INTERFACE) }
interface-automatic{COLON} { YDVAR(1, VAR_INTERFACE_AUTOMATIC) }
+interface-automatic-ports{COLON} { YDVAR(1, VAR_INTERFACE_AUTOMATIC_PORTS) }
so-rcvbuf{COLON} { YDVAR(1, VAR_SO_RCVBUF) }
so-sndbuf{COLON} { YDVAR(1, VAR_SO_SNDBUF) }
so-reuseport{COLON} { YDVAR(1, VAR_SO_REUSEPORT) }
@@ -401,6 +403,7 @@ serve-expired-ttl{COLON} { YDVAR(1, VAR_SERVE_EXPIRED_TTL) }
serve-expired-ttl-reset{COLON} { YDVAR(1, VAR_SERVE_EXPIRED_TTL_RESET) }
serve-expired-reply-ttl{COLON} { YDVAR(1, VAR_SERVE_EXPIRED_REPLY_TTL) }
serve-expired-client-timeout{COLON} { YDVAR(1, VAR_SERVE_EXPIRED_CLIENT_TIMEOUT) }
+ede-serve-expired{COLON} { YDVAR(1, VAR_EDE_SERVE_EXPIRED) }
serve-original-ttl{COLON} { YDVAR(1, VAR_SERVE_ORIGINAL_TTL) }
fake-dsa{COLON} { YDVAR(1, VAR_FAKE_DSA) }
fake-sha1{COLON} { YDVAR(1, VAR_FAKE_SHA1) }
@@ -552,6 +555,7 @@ tcp-connection-limit{COLON} { YDVAR(2, VAR_TCP_CONNECTION_LIMIT) }
edns-client-string{COLON} { YDVAR(2, VAR_EDNS_CLIENT_STRING) }
edns-client-string-opcode{COLON} { YDVAR(1, VAR_EDNS_CLIENT_STRING_OPCODE) }
nsid{COLON} { YDVAR(1, VAR_NSID ) }
+ede{COLON} { YDVAR(1, VAR_EDE ) }
<INITIAL,val>{NEWLINE} { LEXOUT(("NL\n")); cfg_parser->line++; }
/* Quoted strings. Strip leading and ending quotes */
diff --git a/util/configparser.c b/util/configparser.c
index 6635b2d63e3a..17b085f61430 100644
--- a/util/configparser.c
+++ b/util/configparser.c
@@ -1,8 +1,8 @@
-/* A Bison parser, made by GNU Bison 3.6.4. */
+/* A Bison parser, made by GNU Bison 3.7.6. */
/* Bison implementation for Yacc-like parsers in C
- Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2020 Free Software Foundation,
+ Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2021 Free Software Foundation,
Inc.
This program is free software: you can redistribute it and/or modify
@@ -16,7 +16,7 @@
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
- along with this program. If not, see <http://www.gnu.org/licenses/>. */
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* As a special exception, you may create a larger work that contains
part or all of the Bison parser skeleton and distribute that work
@@ -45,11 +45,11 @@
define necessary library symbols; they are noted "INFRINGES ON
USER NAME SPACE" below. */
-/* Identify Bison output. */
-#define YYBISON 1
+/* Identify Bison output, and Bison version. */
+#define YYBISON 30706
-/* Bison version. */
-#define YYBISON_VERSION "3.6.4"
+/* Bison version string. */
+#define YYBISON_VERSION "3.7.6"
/* Skeleton name. */
#define YYSKELETON_NAME "yacc.c"
@@ -119,699 +119,7 @@ extern struct config_parser_state* cfg_parser;
# endif
# endif
-/* Use api.header.include to #include this header
- instead of duplicating it here. */
-#ifndef YY_YY_UTIL_CONFIGPARSER_H_INCLUDED
-# define YY_YY_UTIL_CONFIGPARSER_H_INCLUDED
-/* Debug traces. */
-#ifndef YYDEBUG
-# define YYDEBUG 0
-#endif
-#if YYDEBUG
-extern int yydebug;
-#endif
-
-/* Token kinds. */
-#ifndef YYTOKENTYPE
-# define YYTOKENTYPE
- enum yytokentype
- {
- YYEMPTY = -2,
- YYEOF = 0, /* "end of file" */
- YYerror = 256, /* error */
- YYUNDEF = 257, /* "invalid token" */
- SPACE = 258, /* SPACE */
- LETTER = 259, /* LETTER */
- NEWLINE = 260, /* NEWLINE */
- COMMENT = 261, /* COMMENT */
- COLON = 262, /* COLON */
- ANY = 263, /* ANY */
- ZONESTR = 264, /* ZONESTR */
- STRING_ARG = 265, /* STRING_ARG */
- VAR_FORCE_TOPLEVEL = 266, /* VAR_FORCE_TOPLEVEL */
- VAR_SERVER = 267, /* VAR_SERVER */
- VAR_VERBOSITY = 268, /* VAR_VERBOSITY */
- VAR_NUM_THREADS = 269, /* VAR_NUM_THREADS */
- VAR_PORT = 270, /* VAR_PORT */
- VAR_OUTGOING_RANGE = 271, /* VAR_OUTGOING_RANGE */
- VAR_INTERFACE = 272, /* VAR_INTERFACE */
- VAR_PREFER_IP4 = 273, /* VAR_PREFER_IP4 */
- VAR_DO_IP4 = 274, /* VAR_DO_IP4 */
- VAR_DO_IP6 = 275, /* VAR_DO_IP6 */
- VAR_PREFER_IP6 = 276, /* VAR_PREFER_IP6 */
- VAR_DO_UDP = 277, /* VAR_DO_UDP */
- VAR_DO_TCP = 278, /* VAR_DO_TCP */
- VAR_TCP_MSS = 279, /* VAR_TCP_MSS */
- VAR_OUTGOING_TCP_MSS = 280, /* VAR_OUTGOING_TCP_MSS */
- VAR_TCP_IDLE_TIMEOUT = 281, /* VAR_TCP_IDLE_TIMEOUT */
- VAR_EDNS_TCP_KEEPALIVE = 282, /* VAR_EDNS_TCP_KEEPALIVE */
- VAR_EDNS_TCP_KEEPALIVE_TIMEOUT = 283, /* VAR_EDNS_TCP_KEEPALIVE_TIMEOUT */
- VAR_CHROOT = 284, /* VAR_CHROOT */
- VAR_USERNAME = 285, /* VAR_USERNAME */
- VAR_DIRECTORY = 286, /* VAR_DIRECTORY */
- VAR_LOGFILE = 287, /* VAR_LOGFILE */
- VAR_PIDFILE = 288, /* VAR_PIDFILE */
- VAR_MSG_CACHE_SIZE = 289, /* VAR_MSG_CACHE_SIZE */
- VAR_MSG_CACHE_SLABS = 290, /* VAR_MSG_CACHE_SLABS */
- VAR_NUM_QUERIES_PER_THREAD = 291, /* VAR_NUM_QUERIES_PER_THREAD */
- VAR_RRSET_CACHE_SIZE = 292, /* VAR_RRSET_CACHE_SIZE */
- VAR_RRSET_CACHE_SLABS = 293, /* VAR_RRSET_CACHE_SLABS */
- VAR_OUTGOING_NUM_TCP = 294, /* VAR_OUTGOING_NUM_TCP */
- VAR_INFRA_HOST_TTL = 295, /* VAR_INFRA_HOST_TTL */
- VAR_INFRA_LAME_TTL = 296, /* VAR_INFRA_LAME_TTL */
- VAR_INFRA_CACHE_SLABS = 297, /* VAR_INFRA_CACHE_SLABS */
- VAR_INFRA_CACHE_NUMHOSTS = 298, /* VAR_INFRA_CACHE_NUMHOSTS */
- VAR_INFRA_CACHE_LAME_SIZE = 299, /* VAR_INFRA_CACHE_LAME_SIZE */
- VAR_NAME = 300, /* VAR_NAME */
- VAR_STUB_ZONE = 301, /* VAR_STUB_ZONE */
- VAR_STUB_HOST = 302, /* VAR_STUB_HOST */
- VAR_STUB_ADDR = 303, /* VAR_STUB_ADDR */
- VAR_TARGET_FETCH_POLICY = 304, /* VAR_TARGET_FETCH_POLICY */
- VAR_HARDEN_SHORT_BUFSIZE = 305, /* VAR_HARDEN_SHORT_BUFSIZE */
- VAR_HARDEN_LARGE_QUERIES = 306, /* VAR_HARDEN_LARGE_QUERIES */
- VAR_FORWARD_ZONE = 307, /* VAR_FORWARD_ZONE */
- VAR_FORWARD_HOST = 308, /* VAR_FORWARD_HOST */
- VAR_FORWARD_ADDR = 309, /* VAR_FORWARD_ADDR */
- VAR_DO_NOT_QUERY_ADDRESS = 310, /* VAR_DO_NOT_QUERY_ADDRESS */
- VAR_HIDE_IDENTITY = 311, /* VAR_HIDE_IDENTITY */
- VAR_HIDE_VERSION = 312, /* VAR_HIDE_VERSION */
- VAR_IDENTITY = 313, /* VAR_IDENTITY */
- VAR_VERSION = 314, /* VAR_VERSION */
- VAR_HARDEN_GLUE = 315, /* VAR_HARDEN_GLUE */
- VAR_MODULE_CONF = 316, /* VAR_MODULE_CONF */
- VAR_TRUST_ANCHOR_FILE = 317, /* VAR_TRUST_ANCHOR_FILE */
- VAR_TRUST_ANCHOR = 318, /* VAR_TRUST_ANCHOR */
- VAR_VAL_OVERRIDE_DATE = 319, /* VAR_VAL_OVERRIDE_DATE */
- VAR_BOGUS_TTL = 320, /* VAR_BOGUS_TTL */
- VAR_VAL_CLEAN_ADDITIONAL = 321, /* VAR_VAL_CLEAN_ADDITIONAL */
- VAR_VAL_PERMISSIVE_MODE = 322, /* VAR_VAL_PERMISSIVE_MODE */
- VAR_INCOMING_NUM_TCP = 323, /* VAR_INCOMING_NUM_TCP */
- VAR_MSG_BUFFER_SIZE = 324, /* VAR_MSG_BUFFER_SIZE */
- VAR_KEY_CACHE_SIZE = 325, /* VAR_KEY_CACHE_SIZE */
- VAR_KEY_CACHE_SLABS = 326, /* VAR_KEY_CACHE_SLABS */
- VAR_TRUSTED_KEYS_FILE = 327, /* VAR_TRUSTED_KEYS_FILE */
- VAR_VAL_NSEC3_KEYSIZE_ITERATIONS = 328, /* VAR_VAL_NSEC3_KEYSIZE_ITERATIONS */
- VAR_USE_SYSLOG = 329, /* VAR_USE_SYSLOG */
- VAR_OUTGOING_INTERFACE = 330, /* VAR_OUTGOING_INTERFACE */
- VAR_ROOT_HINTS = 331, /* VAR_ROOT_HINTS */
- VAR_DO_NOT_QUERY_LOCALHOST = 332, /* VAR_DO_NOT_QUERY_LOCALHOST */
- VAR_CACHE_MAX_TTL = 333, /* VAR_CACHE_MAX_TTL */
- VAR_HARDEN_DNSSEC_STRIPPED = 334, /* VAR_HARDEN_DNSSEC_STRIPPED */
- VAR_ACCESS_CONTROL = 335, /* VAR_ACCESS_CONTROL */
- VAR_LOCAL_ZONE = 336, /* VAR_LOCAL_ZONE */
- VAR_LOCAL_DATA = 337, /* VAR_LOCAL_DATA */
- VAR_INTERFACE_AUTOMATIC = 338, /* VAR_INTERFACE_AUTOMATIC */
- VAR_STATISTICS_INTERVAL = 339, /* VAR_STATISTICS_INTERVAL */
- VAR_DO_DAEMONIZE = 340, /* VAR_DO_DAEMONIZE */
- VAR_USE_CAPS_FOR_ID = 341, /* VAR_USE_CAPS_FOR_ID */
- VAR_STATISTICS_CUMULATIVE = 342, /* VAR_STATISTICS_CUMULATIVE */
- VAR_OUTGOING_PORT_PERMIT = 343, /* VAR_OUTGOING_PORT_PERMIT */
- VAR_OUTGOING_PORT_AVOID = 344, /* VAR_OUTGOING_PORT_AVOID */
- VAR_DLV_ANCHOR_FILE = 345, /* VAR_DLV_ANCHOR_FILE */
- VAR_DLV_ANCHOR = 346, /* VAR_DLV_ANCHOR */
- VAR_NEG_CACHE_SIZE = 347, /* VAR_NEG_CACHE_SIZE */
- VAR_HARDEN_REFERRAL_PATH = 348, /* VAR_HARDEN_REFERRAL_PATH */
- VAR_PRIVATE_ADDRESS = 349, /* VAR_PRIVATE_ADDRESS */
- VAR_PRIVATE_DOMAIN = 350, /* VAR_PRIVATE_DOMAIN */
- VAR_REMOTE_CONTROL = 351, /* VAR_REMOTE_CONTROL */
- VAR_CONTROL_ENABLE = 352, /* VAR_CONTROL_ENABLE */
- VAR_CONTROL_INTERFACE = 353, /* VAR_CONTROL_INTERFACE */
- VAR_CONTROL_PORT = 354, /* VAR_CONTROL_PORT */
- VAR_SERVER_KEY_FILE = 355, /* VAR_SERVER_KEY_FILE */
- VAR_SERVER_CERT_FILE = 356, /* VAR_SERVER_CERT_FILE */
- VAR_CONTROL_KEY_FILE = 357, /* VAR_CONTROL_KEY_FILE */
- VAR_CONTROL_CERT_FILE = 358, /* VAR_CONTROL_CERT_FILE */
- VAR_CONTROL_USE_CERT = 359, /* VAR_CONTROL_USE_CERT */
- VAR_TCP_REUSE_TIMEOUT = 360, /* VAR_TCP_REUSE_TIMEOUT */
- VAR_MAX_REUSE_TCP_QUERIES = 361, /* VAR_MAX_REUSE_TCP_QUERIES */
- VAR_EXTENDED_STATISTICS = 362, /* VAR_EXTENDED_STATISTICS */
- VAR_LOCAL_DATA_PTR = 363, /* VAR_LOCAL_DATA_PTR */
- VAR_JOSTLE_TIMEOUT = 364, /* VAR_JOSTLE_TIMEOUT */
- VAR_STUB_PRIME = 365, /* VAR_STUB_PRIME */
- VAR_UNWANTED_REPLY_THRESHOLD = 366, /* VAR_UNWANTED_REPLY_THRESHOLD */
- VAR_LOG_TIME_ASCII = 367, /* VAR_LOG_TIME_ASCII */
- VAR_DOMAIN_INSECURE = 368, /* VAR_DOMAIN_INSECURE */
- VAR_PYTHON = 369, /* VAR_PYTHON */
- VAR_PYTHON_SCRIPT = 370, /* VAR_PYTHON_SCRIPT */
- VAR_VAL_SIG_SKEW_MIN = 371, /* VAR_VAL_SIG_SKEW_MIN */
- VAR_VAL_SIG_SKEW_MAX = 372, /* VAR_VAL_SIG_SKEW_MAX */
- VAR_VAL_MAX_RESTART = 373, /* VAR_VAL_MAX_RESTART */
- VAR_CACHE_MIN_TTL = 374, /* VAR_CACHE_MIN_TTL */
- VAR_VAL_LOG_LEVEL = 375, /* VAR_VAL_LOG_LEVEL */
- VAR_AUTO_TRUST_ANCHOR_FILE = 376, /* VAR_AUTO_TRUST_ANCHOR_FILE */
- VAR_KEEP_MISSING = 377, /* VAR_KEEP_MISSING */
- VAR_ADD_HOLDDOWN = 378, /* VAR_ADD_HOLDDOWN */
- VAR_DEL_HOLDDOWN = 379, /* VAR_DEL_HOLDDOWN */
- VAR_SO_RCVBUF = 380, /* VAR_SO_RCVBUF */
- VAR_EDNS_BUFFER_SIZE = 381, /* VAR_EDNS_BUFFER_SIZE */
- VAR_PREFETCH = 382, /* VAR_PREFETCH */
- VAR_PREFETCH_KEY = 383, /* VAR_PREFETCH_KEY */
- VAR_SO_SNDBUF = 384, /* VAR_SO_SNDBUF */
- VAR_SO_REUSEPORT = 385, /* VAR_SO_REUSEPORT */
- VAR_HARDEN_BELOW_NXDOMAIN = 386, /* VAR_HARDEN_BELOW_NXDOMAIN */
- VAR_IGNORE_CD_FLAG = 387, /* VAR_IGNORE_CD_FLAG */
- VAR_LOG_QUERIES = 388, /* VAR_LOG_QUERIES */
- VAR_LOG_REPLIES = 389, /* VAR_LOG_REPLIES */
- VAR_LOG_LOCAL_ACTIONS = 390, /* VAR_LOG_LOCAL_ACTIONS */
- VAR_TCP_UPSTREAM = 391, /* VAR_TCP_UPSTREAM */
- VAR_SSL_UPSTREAM = 392, /* VAR_SSL_UPSTREAM */
- VAR_TCP_AUTH_QUERY_TIMEOUT = 393, /* VAR_TCP_AUTH_QUERY_TIMEOUT */
- VAR_SSL_SERVICE_KEY = 394, /* VAR_SSL_SERVICE_KEY */
- VAR_SSL_SERVICE_PEM = 395, /* VAR_SSL_SERVICE_PEM */
- VAR_SSL_PORT = 396, /* VAR_SSL_PORT */
- VAR_FORWARD_FIRST = 397, /* VAR_FORWARD_FIRST */
- VAR_STUB_SSL_UPSTREAM = 398, /* VAR_STUB_SSL_UPSTREAM */
- VAR_FORWARD_SSL_UPSTREAM = 399, /* VAR_FORWARD_SSL_UPSTREAM */
- VAR_TLS_CERT_BUNDLE = 400, /* VAR_TLS_CERT_BUNDLE */
- VAR_STUB_TCP_UPSTREAM = 401, /* VAR_STUB_TCP_UPSTREAM */
- VAR_FORWARD_TCP_UPSTREAM = 402, /* VAR_FORWARD_TCP_UPSTREAM */
- VAR_HTTPS_PORT = 403, /* VAR_HTTPS_PORT */
- VAR_HTTP_ENDPOINT = 404, /* VAR_HTTP_ENDPOINT */
- VAR_HTTP_MAX_STREAMS = 405, /* VAR_HTTP_MAX_STREAMS */
- VAR_HTTP_QUERY_BUFFER_SIZE = 406, /* VAR_HTTP_QUERY_BUFFER_SIZE */
- VAR_HTTP_RESPONSE_BUFFER_SIZE = 407, /* VAR_HTTP_RESPONSE_BUFFER_SIZE */
- VAR_HTTP_NODELAY = 408, /* VAR_HTTP_NODELAY */
- VAR_HTTP_NOTLS_DOWNSTREAM = 409, /* VAR_HTTP_NOTLS_DOWNSTREAM */
- VAR_STUB_FIRST = 410, /* VAR_STUB_FIRST */
- VAR_MINIMAL_RESPONSES = 411, /* VAR_MINIMAL_RESPONSES */
- VAR_RRSET_ROUNDROBIN = 412, /* VAR_RRSET_ROUNDROBIN */
- VAR_MAX_UDP_SIZE = 413, /* VAR_MAX_UDP_SIZE */
- VAR_DELAY_CLOSE = 414, /* VAR_DELAY_CLOSE */
- VAR_UDP_CONNECT = 415, /* VAR_UDP_CONNECT */
- VAR_UNBLOCK_LAN_ZONES = 416, /* VAR_UNBLOCK_LAN_ZONES */
- VAR_INSECURE_LAN_ZONES = 417, /* VAR_INSECURE_LAN_ZONES */
- VAR_INFRA_CACHE_MIN_RTT = 418, /* VAR_INFRA_CACHE_MIN_RTT */
- VAR_INFRA_KEEP_PROBING = 419, /* VAR_INFRA_KEEP_PROBING */
- VAR_DNS64_PREFIX = 420, /* VAR_DNS64_PREFIX */
- VAR_DNS64_SYNTHALL = 421, /* VAR_DNS64_SYNTHALL */
- VAR_DNS64_IGNORE_AAAA = 422, /* VAR_DNS64_IGNORE_AAAA */
- VAR_DNSTAP = 423, /* VAR_DNSTAP */
- VAR_DNSTAP_ENABLE = 424, /* VAR_DNSTAP_ENABLE */
- VAR_DNSTAP_SOCKET_PATH = 425, /* VAR_DNSTAP_SOCKET_PATH */
- VAR_DNSTAP_IP = 426, /* VAR_DNSTAP_IP */
- VAR_DNSTAP_TLS = 427, /* VAR_DNSTAP_TLS */
- VAR_DNSTAP_TLS_SERVER_NAME = 428, /* VAR_DNSTAP_TLS_SERVER_NAME */
- VAR_DNSTAP_TLS_CERT_BUNDLE = 429, /* VAR_DNSTAP_TLS_CERT_BUNDLE */
- VAR_DNSTAP_TLS_CLIENT_KEY_FILE = 430, /* VAR_DNSTAP_TLS_CLIENT_KEY_FILE */
- VAR_DNSTAP_TLS_CLIENT_CERT_FILE = 431, /* VAR_DNSTAP_TLS_CLIENT_CERT_FILE */
- VAR_DNSTAP_SEND_IDENTITY = 432, /* VAR_DNSTAP_SEND_IDENTITY */
- VAR_DNSTAP_SEND_VERSION = 433, /* VAR_DNSTAP_SEND_VERSION */
- VAR_DNSTAP_BIDIRECTIONAL = 434, /* VAR_DNSTAP_BIDIRECTIONAL */
- VAR_DNSTAP_IDENTITY = 435, /* VAR_DNSTAP_IDENTITY */
- VAR_DNSTAP_VERSION = 436, /* VAR_DNSTAP_VERSION */
- VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES = 437, /* VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES */
- VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES = 438, /* VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES */
- VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES = 439, /* VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES */
- VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES = 440, /* VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES */
- VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES = 441, /* VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES */
- VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES = 442, /* VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES */
- VAR_RESPONSE_IP_TAG = 443, /* VAR_RESPONSE_IP_TAG */
- VAR_RESPONSE_IP = 444, /* VAR_RESPONSE_IP */
- VAR_RESPONSE_IP_DATA = 445, /* VAR_RESPONSE_IP_DATA */
- VAR_HARDEN_ALGO_DOWNGRADE = 446, /* VAR_HARDEN_ALGO_DOWNGRADE */
- VAR_IP_TRANSPARENT = 447, /* VAR_IP_TRANSPARENT */
- VAR_IP_DSCP = 448, /* VAR_IP_DSCP */
- VAR_DISABLE_DNSSEC_LAME_CHECK = 449, /* VAR_DISABLE_DNSSEC_LAME_CHECK */
- VAR_IP_RATELIMIT = 450, /* VAR_IP_RATELIMIT */
- VAR_IP_RATELIMIT_SLABS = 451, /* VAR_IP_RATELIMIT_SLABS */
- VAR_IP_RATELIMIT_SIZE = 452, /* VAR_IP_RATELIMIT_SIZE */
- VAR_RATELIMIT = 453, /* VAR_RATELIMIT */
- VAR_RATELIMIT_SLABS = 454, /* VAR_RATELIMIT_SLABS */
- VAR_RATELIMIT_SIZE = 455, /* VAR_RATELIMIT_SIZE */
- VAR_OUTBOUND_MSG_RETRY = 456, /* VAR_OUTBOUND_MSG_RETRY */
- VAR_RATELIMIT_FOR_DOMAIN = 457, /* VAR_RATELIMIT_FOR_DOMAIN */
- VAR_RATELIMIT_BELOW_DOMAIN = 458, /* VAR_RATELIMIT_BELOW_DOMAIN */
- VAR_IP_RATELIMIT_FACTOR = 459, /* VAR_IP_RATELIMIT_FACTOR */
- VAR_RATELIMIT_FACTOR = 460, /* VAR_RATELIMIT_FACTOR */
- VAR_IP_RATELIMIT_BACKOFF = 461, /* VAR_IP_RATELIMIT_BACKOFF */
- VAR_RATELIMIT_BACKOFF = 462, /* VAR_RATELIMIT_BACKOFF */
- VAR_SEND_CLIENT_SUBNET = 463, /* VAR_SEND_CLIENT_SUBNET */
- VAR_CLIENT_SUBNET_ZONE = 464, /* VAR_CLIENT_SUBNET_ZONE */
- VAR_CLIENT_SUBNET_ALWAYS_FORWARD = 465, /* VAR_CLIENT_SUBNET_ALWAYS_FORWARD */
- VAR_CLIENT_SUBNET_OPCODE = 466, /* VAR_CLIENT_SUBNET_OPCODE */
- VAR_MAX_CLIENT_SUBNET_IPV4 = 467, /* VAR_MAX_CLIENT_SUBNET_IPV4 */
- VAR_MAX_CLIENT_SUBNET_IPV6 = 468, /* VAR_MAX_CLIENT_SUBNET_IPV6 */
- VAR_MIN_CLIENT_SUBNET_IPV4 = 469, /* VAR_MIN_CLIENT_SUBNET_IPV4 */
- VAR_MIN_CLIENT_SUBNET_IPV6 = 470, /* VAR_MIN_CLIENT_SUBNET_IPV6 */
- VAR_MAX_ECS_TREE_SIZE_IPV4 = 471, /* VAR_MAX_ECS_TREE_SIZE_IPV4 */
- VAR_MAX_ECS_TREE_SIZE_IPV6 = 472, /* VAR_MAX_ECS_TREE_SIZE_IPV6 */
- VAR_CAPS_WHITELIST = 473, /* VAR_CAPS_WHITELIST */
- VAR_CACHE_MAX_NEGATIVE_TTL = 474, /* VAR_CACHE_MAX_NEGATIVE_TTL */
- VAR_PERMIT_SMALL_HOLDDOWN = 475, /* VAR_PERMIT_SMALL_HOLDDOWN */
- VAR_QNAME_MINIMISATION = 476, /* VAR_QNAME_MINIMISATION */
- VAR_QNAME_MINIMISATION_STRICT = 477, /* VAR_QNAME_MINIMISATION_STRICT */
- VAR_IP_FREEBIND = 478, /* VAR_IP_FREEBIND */
- VAR_DEFINE_TAG = 479, /* VAR_DEFINE_TAG */
- VAR_LOCAL_ZONE_TAG = 480, /* VAR_LOCAL_ZONE_TAG */
- VAR_ACCESS_CONTROL_TAG = 481, /* VAR_ACCESS_CONTROL_TAG */
- VAR_LOCAL_ZONE_OVERRIDE = 482, /* VAR_LOCAL_ZONE_OVERRIDE */
- VAR_ACCESS_CONTROL_TAG_ACTION = 483, /* VAR_ACCESS_CONTROL_TAG_ACTION */
- VAR_ACCESS_CONTROL_TAG_DATA = 484, /* VAR_ACCESS_CONTROL_TAG_DATA */
- VAR_VIEW = 485, /* VAR_VIEW */
- VAR_ACCESS_CONTROL_VIEW = 486, /* VAR_ACCESS_CONTROL_VIEW */
- VAR_VIEW_FIRST = 487, /* VAR_VIEW_FIRST */
- VAR_SERVE_EXPIRED = 488, /* VAR_SERVE_EXPIRED */
- VAR_SERVE_EXPIRED_TTL = 489, /* VAR_SERVE_EXPIRED_TTL */
- VAR_SERVE_EXPIRED_TTL_RESET = 490, /* VAR_SERVE_EXPIRED_TTL_RESET */
- VAR_SERVE_EXPIRED_REPLY_TTL = 491, /* VAR_SERVE_EXPIRED_REPLY_TTL */
- VAR_SERVE_EXPIRED_CLIENT_TIMEOUT = 492, /* VAR_SERVE_EXPIRED_CLIENT_TIMEOUT */
- VAR_SERVE_ORIGINAL_TTL = 493, /* VAR_SERVE_ORIGINAL_TTL */
- VAR_FAKE_DSA = 494, /* VAR_FAKE_DSA */
- VAR_FAKE_SHA1 = 495, /* VAR_FAKE_SHA1 */
- VAR_LOG_IDENTITY = 496, /* VAR_LOG_IDENTITY */
- VAR_HIDE_TRUSTANCHOR = 497, /* VAR_HIDE_TRUSTANCHOR */
- VAR_HIDE_HTTP_USER_AGENT = 498, /* VAR_HIDE_HTTP_USER_AGENT */
- VAR_HTTP_USER_AGENT = 499, /* VAR_HTTP_USER_AGENT */
- VAR_TRUST_ANCHOR_SIGNALING = 500, /* VAR_TRUST_ANCHOR_SIGNALING */
- VAR_AGGRESSIVE_NSEC = 501, /* VAR_AGGRESSIVE_NSEC */
- VAR_USE_SYSTEMD = 502, /* VAR_USE_SYSTEMD */
- VAR_SHM_ENABLE = 503, /* VAR_SHM_ENABLE */
- VAR_SHM_KEY = 504, /* VAR_SHM_KEY */
- VAR_ROOT_KEY_SENTINEL = 505, /* VAR_ROOT_KEY_SENTINEL */
- VAR_DNSCRYPT = 506, /* VAR_DNSCRYPT */
- VAR_DNSCRYPT_ENABLE = 507, /* VAR_DNSCRYPT_ENABLE */
- VAR_DNSCRYPT_PORT = 508, /* VAR_DNSCRYPT_PORT */
- VAR_DNSCRYPT_PROVIDER = 509, /* VAR_DNSCRYPT_PROVIDER */
- VAR_DNSCRYPT_SECRET_KEY = 510, /* VAR_DNSCRYPT_SECRET_KEY */
- VAR_DNSCRYPT_PROVIDER_CERT = 511, /* VAR_DNSCRYPT_PROVIDER_CERT */
- VAR_DNSCRYPT_PROVIDER_CERT_ROTATED = 512, /* VAR_DNSCRYPT_PROVIDER_CERT_ROTATED */
- VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 513, /* VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE */
- VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 514, /* VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS */
- VAR_DNSCRYPT_NONCE_CACHE_SIZE = 515, /* VAR_DNSCRYPT_NONCE_CACHE_SIZE */
- VAR_DNSCRYPT_NONCE_CACHE_SLABS = 516, /* VAR_DNSCRYPT_NONCE_CACHE_SLABS */
- VAR_PAD_RESPONSES = 517, /* VAR_PAD_RESPONSES */
- VAR_PAD_RESPONSES_BLOCK_SIZE = 518, /* VAR_PAD_RESPONSES_BLOCK_SIZE */
- VAR_PAD_QUERIES = 519, /* VAR_PAD_QUERIES */
- VAR_PAD_QUERIES_BLOCK_SIZE = 520, /* VAR_PAD_QUERIES_BLOCK_SIZE */
- VAR_IPSECMOD_ENABLED = 521, /* VAR_IPSECMOD_ENABLED */
- VAR_IPSECMOD_HOOK = 522, /* VAR_IPSECMOD_HOOK */
- VAR_IPSECMOD_IGNORE_BOGUS = 523, /* VAR_IPSECMOD_IGNORE_BOGUS */
- VAR_IPSECMOD_MAX_TTL = 524, /* VAR_IPSECMOD_MAX_TTL */
- VAR_IPSECMOD_WHITELIST = 525, /* VAR_IPSECMOD_WHITELIST */
- VAR_IPSECMOD_STRICT = 526, /* VAR_IPSECMOD_STRICT */
- VAR_CACHEDB = 527, /* VAR_CACHEDB */
- VAR_CACHEDB_BACKEND = 528, /* VAR_CACHEDB_BACKEND */
- VAR_CACHEDB_SECRETSEED = 529, /* VAR_CACHEDB_SECRETSEED */
- VAR_CACHEDB_REDISHOST = 530, /* VAR_CACHEDB_REDISHOST */
- VAR_CACHEDB_REDISPORT = 531, /* VAR_CACHEDB_REDISPORT */
- VAR_CACHEDB_REDISTIMEOUT = 532, /* VAR_CACHEDB_REDISTIMEOUT */
- VAR_CACHEDB_REDISEXPIRERECORDS = 533, /* VAR_CACHEDB_REDISEXPIRERECORDS */
- VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 534, /* VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM */
- VAR_FOR_UPSTREAM = 535, /* VAR_FOR_UPSTREAM */
- VAR_AUTH_ZONE = 536, /* VAR_AUTH_ZONE */
- VAR_ZONEFILE = 537, /* VAR_ZONEFILE */
- VAR_MASTER = 538, /* VAR_MASTER */
- VAR_URL = 539, /* VAR_URL */
- VAR_FOR_DOWNSTREAM = 540, /* VAR_FOR_DOWNSTREAM */
- VAR_FALLBACK_ENABLED = 541, /* VAR_FALLBACK_ENABLED */
- VAR_TLS_ADDITIONAL_PORT = 542, /* VAR_TLS_ADDITIONAL_PORT */
- VAR_LOW_RTT = 543, /* VAR_LOW_RTT */
- VAR_LOW_RTT_PERMIL = 544, /* VAR_LOW_RTT_PERMIL */
- VAR_FAST_SERVER_PERMIL = 545, /* VAR_FAST_SERVER_PERMIL */
- VAR_FAST_SERVER_NUM = 546, /* VAR_FAST_SERVER_NUM */
- VAR_ALLOW_NOTIFY = 547, /* VAR_ALLOW_NOTIFY */
- VAR_TLS_WIN_CERT = 548, /* VAR_TLS_WIN_CERT */
- VAR_TCP_CONNECTION_LIMIT = 549, /* VAR_TCP_CONNECTION_LIMIT */
- VAR_FORWARD_NO_CACHE = 550, /* VAR_FORWARD_NO_CACHE */
- VAR_STUB_NO_CACHE = 551, /* VAR_STUB_NO_CACHE */
- VAR_LOG_SERVFAIL = 552, /* VAR_LOG_SERVFAIL */
- VAR_DENY_ANY = 553, /* VAR_DENY_ANY */
- VAR_UNKNOWN_SERVER_TIME_LIMIT = 554, /* VAR_UNKNOWN_SERVER_TIME_LIMIT */
- VAR_LOG_TAG_QUERYREPLY = 555, /* VAR_LOG_TAG_QUERYREPLY */
- VAR_STREAM_WAIT_SIZE = 556, /* VAR_STREAM_WAIT_SIZE */
- VAR_TLS_CIPHERS = 557, /* VAR_TLS_CIPHERS */
- VAR_TLS_CIPHERSUITES = 558, /* VAR_TLS_CIPHERSUITES */
- VAR_TLS_USE_SNI = 559, /* VAR_TLS_USE_SNI */
- VAR_IPSET = 560, /* VAR_IPSET */
- VAR_IPSET_NAME_V4 = 561, /* VAR_IPSET_NAME_V4 */
- VAR_IPSET_NAME_V6 = 562, /* VAR_IPSET_NAME_V6 */
- VAR_TLS_SESSION_TICKET_KEYS = 563, /* VAR_TLS_SESSION_TICKET_KEYS */
- VAR_RPZ = 564, /* VAR_RPZ */
- VAR_TAGS = 565, /* VAR_TAGS */
- VAR_RPZ_ACTION_OVERRIDE = 566, /* VAR_RPZ_ACTION_OVERRIDE */
- VAR_RPZ_CNAME_OVERRIDE = 567, /* VAR_RPZ_CNAME_OVERRIDE */
- VAR_RPZ_LOG = 568, /* VAR_RPZ_LOG */
- VAR_RPZ_LOG_NAME = 569, /* VAR_RPZ_LOG_NAME */
- VAR_DYNLIB = 570, /* VAR_DYNLIB */
- VAR_DYNLIB_FILE = 571, /* VAR_DYNLIB_FILE */
- VAR_EDNS_CLIENT_STRING = 572, /* VAR_EDNS_CLIENT_STRING */
- VAR_EDNS_CLIENT_STRING_OPCODE = 573, /* VAR_EDNS_CLIENT_STRING_OPCODE */
- VAR_NSID = 574, /* VAR_NSID */
- VAR_ZONEMD_PERMISSIVE_MODE = 575, /* VAR_ZONEMD_PERMISSIVE_MODE */
- VAR_ZONEMD_CHECK = 576, /* VAR_ZONEMD_CHECK */
- VAR_ZONEMD_REJECT_ABSENCE = 577, /* VAR_ZONEMD_REJECT_ABSENCE */
- VAR_RPZ_SIGNAL_NXDOMAIN_RA = 578 /* VAR_RPZ_SIGNAL_NXDOMAIN_RA */
- };
- typedef enum yytokentype yytoken_kind_t;
-#endif
-/* Token kinds. */
-#define YYEOF 0
-#define YYerror 256
-#define YYUNDEF 257
-#define SPACE 258
-#define LETTER 259
-#define NEWLINE 260
-#define COMMENT 261
-#define COLON 262
-#define ANY 263
-#define ZONESTR 264
-#define STRING_ARG 265
-#define VAR_FORCE_TOPLEVEL 266
-#define VAR_SERVER 267
-#define VAR_VERBOSITY 268
-#define VAR_NUM_THREADS 269
-#define VAR_PORT 270
-#define VAR_OUTGOING_RANGE 271
-#define VAR_INTERFACE 272
-#define VAR_PREFER_IP4 273
-#define VAR_DO_IP4 274
-#define VAR_DO_IP6 275
-#define VAR_PREFER_IP6 276
-#define VAR_DO_UDP 277
-#define VAR_DO_TCP 278
-#define VAR_TCP_MSS 279
-#define VAR_OUTGOING_TCP_MSS 280
-#define VAR_TCP_IDLE_TIMEOUT 281
-#define VAR_EDNS_TCP_KEEPALIVE 282
-#define VAR_EDNS_TCP_KEEPALIVE_TIMEOUT 283
-#define VAR_CHROOT 284
-#define VAR_USERNAME 285
-#define VAR_DIRECTORY 286
-#define VAR_LOGFILE 287
-#define VAR_PIDFILE 288
-#define VAR_MSG_CACHE_SIZE 289
-#define VAR_MSG_CACHE_SLABS 290
-#define VAR_NUM_QUERIES_PER_THREAD 291
-#define VAR_RRSET_CACHE_SIZE 292
-#define VAR_RRSET_CACHE_SLABS 293
-#define VAR_OUTGOING_NUM_TCP 294
-#define VAR_INFRA_HOST_TTL 295
-#define VAR_INFRA_LAME_TTL 296
-#define VAR_INFRA_CACHE_SLABS 297
-#define VAR_INFRA_CACHE_NUMHOSTS 298
-#define VAR_INFRA_CACHE_LAME_SIZE 299
-#define VAR_NAME 300
-#define VAR_STUB_ZONE 301
-#define VAR_STUB_HOST 302
-#define VAR_STUB_ADDR 303
-#define VAR_TARGET_FETCH_POLICY 304
-#define VAR_HARDEN_SHORT_BUFSIZE 305
-#define VAR_HARDEN_LARGE_QUERIES 306
-#define VAR_FORWARD_ZONE 307
-#define VAR_FORWARD_HOST 308
-#define VAR_FORWARD_ADDR 309
-#define VAR_DO_NOT_QUERY_ADDRESS 310
-#define VAR_HIDE_IDENTITY 311
-#define VAR_HIDE_VERSION 312
-#define VAR_IDENTITY 313
-#define VAR_VERSION 314
-#define VAR_HARDEN_GLUE 315
-#define VAR_MODULE_CONF 316
-#define VAR_TRUST_ANCHOR_FILE 317
-#define VAR_TRUST_ANCHOR 318
-#define VAR_VAL_OVERRIDE_DATE 319
-#define VAR_BOGUS_TTL 320
-#define VAR_VAL_CLEAN_ADDITIONAL 321
-#define VAR_VAL_PERMISSIVE_MODE 322
-#define VAR_INCOMING_NUM_TCP 323
-#define VAR_MSG_BUFFER_SIZE 324
-#define VAR_KEY_CACHE_SIZE 325
-#define VAR_KEY_CACHE_SLABS 326
-#define VAR_TRUSTED_KEYS_FILE 327
-#define VAR_VAL_NSEC3_KEYSIZE_ITERATIONS 328
-#define VAR_USE_SYSLOG 329
-#define VAR_OUTGOING_INTERFACE 330
-#define VAR_ROOT_HINTS 331
-#define VAR_DO_NOT_QUERY_LOCALHOST 332
-#define VAR_CACHE_MAX_TTL 333
-#define VAR_HARDEN_DNSSEC_STRIPPED 334
-#define VAR_ACCESS_CONTROL 335
-#define VAR_LOCAL_ZONE 336
-#define VAR_LOCAL_DATA 337
-#define VAR_INTERFACE_AUTOMATIC 338
-#define VAR_STATISTICS_INTERVAL 339
-#define VAR_DO_DAEMONIZE 340
-#define VAR_USE_CAPS_FOR_ID 341
-#define VAR_STATISTICS_CUMULATIVE 342
-#define VAR_OUTGOING_PORT_PERMIT 343
-#define VAR_OUTGOING_PORT_AVOID 344
-#define VAR_DLV_ANCHOR_FILE 345
-#define VAR_DLV_ANCHOR 346
-#define VAR_NEG_CACHE_SIZE 347
-#define VAR_HARDEN_REFERRAL_PATH 348
-#define VAR_PRIVATE_ADDRESS 349
-#define VAR_PRIVATE_DOMAIN 350
-#define VAR_REMOTE_CONTROL 351
-#define VAR_CONTROL_ENABLE 352
-#define VAR_CONTROL_INTERFACE 353
-#define VAR_CONTROL_PORT 354
-#define VAR_SERVER_KEY_FILE 355
-#define VAR_SERVER_CERT_FILE 356
-#define VAR_CONTROL_KEY_FILE 357
-#define VAR_CONTROL_CERT_FILE 358
-#define VAR_CONTROL_USE_CERT 359
-#define VAR_TCP_REUSE_TIMEOUT 360
-#define VAR_MAX_REUSE_TCP_QUERIES 361
-#define VAR_EXTENDED_STATISTICS 362
-#define VAR_LOCAL_DATA_PTR 363
-#define VAR_JOSTLE_TIMEOUT 364
-#define VAR_STUB_PRIME 365
-#define VAR_UNWANTED_REPLY_THRESHOLD 366
-#define VAR_LOG_TIME_ASCII 367
-#define VAR_DOMAIN_INSECURE 368
-#define VAR_PYTHON 369
-#define VAR_PYTHON_SCRIPT 370
-#define VAR_VAL_SIG_SKEW_MIN 371
-#define VAR_VAL_SIG_SKEW_MAX 372
-#define VAR_VAL_MAX_RESTART 373
-#define VAR_CACHE_MIN_TTL 374
-#define VAR_VAL_LOG_LEVEL 375
-#define VAR_AUTO_TRUST_ANCHOR_FILE 376
-#define VAR_KEEP_MISSING 377
-#define VAR_ADD_HOLDDOWN 378
-#define VAR_DEL_HOLDDOWN 379
-#define VAR_SO_RCVBUF 380
-#define VAR_EDNS_BUFFER_SIZE 381
-#define VAR_PREFETCH 382
-#define VAR_PREFETCH_KEY 383
-#define VAR_SO_SNDBUF 384
-#define VAR_SO_REUSEPORT 385
-#define VAR_HARDEN_BELOW_NXDOMAIN 386
-#define VAR_IGNORE_CD_FLAG 387
-#define VAR_LOG_QUERIES 388
-#define VAR_LOG_REPLIES 389
-#define VAR_LOG_LOCAL_ACTIONS 390
-#define VAR_TCP_UPSTREAM 391
-#define VAR_SSL_UPSTREAM 392
-#define VAR_TCP_AUTH_QUERY_TIMEOUT 393
-#define VAR_SSL_SERVICE_KEY 394
-#define VAR_SSL_SERVICE_PEM 395
-#define VAR_SSL_PORT 396
-#define VAR_FORWARD_FIRST 397
-#define VAR_STUB_SSL_UPSTREAM 398
-#define VAR_FORWARD_SSL_UPSTREAM 399
-#define VAR_TLS_CERT_BUNDLE 400
-#define VAR_STUB_TCP_UPSTREAM 401
-#define VAR_FORWARD_TCP_UPSTREAM 402
-#define VAR_HTTPS_PORT 403
-#define VAR_HTTP_ENDPOINT 404
-#define VAR_HTTP_MAX_STREAMS 405
-#define VAR_HTTP_QUERY_BUFFER_SIZE 406
-#define VAR_HTTP_RESPONSE_BUFFER_SIZE 407
-#define VAR_HTTP_NODELAY 408
-#define VAR_HTTP_NOTLS_DOWNSTREAM 409
-#define VAR_STUB_FIRST 410
-#define VAR_MINIMAL_RESPONSES 411
-#define VAR_RRSET_ROUNDROBIN 412
-#define VAR_MAX_UDP_SIZE 413
-#define VAR_DELAY_CLOSE 414
-#define VAR_UDP_CONNECT 415
-#define VAR_UNBLOCK_LAN_ZONES 416
-#define VAR_INSECURE_LAN_ZONES 417
-#define VAR_INFRA_CACHE_MIN_RTT 418
-#define VAR_INFRA_KEEP_PROBING 419
-#define VAR_DNS64_PREFIX 420
-#define VAR_DNS64_SYNTHALL 421
-#define VAR_DNS64_IGNORE_AAAA 422
-#define VAR_DNSTAP 423
-#define VAR_DNSTAP_ENABLE 424
-#define VAR_DNSTAP_SOCKET_PATH 425
-#define VAR_DNSTAP_IP 426
-#define VAR_DNSTAP_TLS 427
-#define VAR_DNSTAP_TLS_SERVER_NAME 428
-#define VAR_DNSTAP_TLS_CERT_BUNDLE 429
-#define VAR_DNSTAP_TLS_CLIENT_KEY_FILE 430
-#define VAR_DNSTAP_TLS_CLIENT_CERT_FILE 431
-#define VAR_DNSTAP_SEND_IDENTITY 432
-#define VAR_DNSTAP_SEND_VERSION 433
-#define VAR_DNSTAP_BIDIRECTIONAL 434
-#define VAR_DNSTAP_IDENTITY 435
-#define VAR_DNSTAP_VERSION 436
-#define VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES 437
-#define VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES 438
-#define VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES 439
-#define VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES 440
-#define VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES 441
-#define VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES 442
-#define VAR_RESPONSE_IP_TAG 443
-#define VAR_RESPONSE_IP 444
-#define VAR_RESPONSE_IP_DATA 445
-#define VAR_HARDEN_ALGO_DOWNGRADE 446
-#define VAR_IP_TRANSPARENT 447
-#define VAR_IP_DSCP 448
-#define VAR_DISABLE_DNSSEC_LAME_CHECK 449
-#define VAR_IP_RATELIMIT 450
-#define VAR_IP_RATELIMIT_SLABS 451
-#define VAR_IP_RATELIMIT_SIZE 452
-#define VAR_RATELIMIT 453
-#define VAR_RATELIMIT_SLABS 454
-#define VAR_RATELIMIT_SIZE 455
-#define VAR_OUTBOUND_MSG_RETRY 456
-#define VAR_RATELIMIT_FOR_DOMAIN 457
-#define VAR_RATELIMIT_BELOW_DOMAIN 458
-#define VAR_IP_RATELIMIT_FACTOR 459
-#define VAR_RATELIMIT_FACTOR 460
-#define VAR_IP_RATELIMIT_BACKOFF 461
-#define VAR_RATELIMIT_BACKOFF 462
-#define VAR_SEND_CLIENT_SUBNET 463
-#define VAR_CLIENT_SUBNET_ZONE 464
-#define VAR_CLIENT_SUBNET_ALWAYS_FORWARD 465
-#define VAR_CLIENT_SUBNET_OPCODE 466
-#define VAR_MAX_CLIENT_SUBNET_IPV4 467
-#define VAR_MAX_CLIENT_SUBNET_IPV6 468
-#define VAR_MIN_CLIENT_SUBNET_IPV4 469
-#define VAR_MIN_CLIENT_SUBNET_IPV6 470
-#define VAR_MAX_ECS_TREE_SIZE_IPV4 471
-#define VAR_MAX_ECS_TREE_SIZE_IPV6 472
-#define VAR_CAPS_WHITELIST 473
-#define VAR_CACHE_MAX_NEGATIVE_TTL 474
-#define VAR_PERMIT_SMALL_HOLDDOWN 475
-#define VAR_QNAME_MINIMISATION 476
-#define VAR_QNAME_MINIMISATION_STRICT 477
-#define VAR_IP_FREEBIND 478
-#define VAR_DEFINE_TAG 479
-#define VAR_LOCAL_ZONE_TAG 480
-#define VAR_ACCESS_CONTROL_TAG 481
-#define VAR_LOCAL_ZONE_OVERRIDE 482
-#define VAR_ACCESS_CONTROL_TAG_ACTION 483
-#define VAR_ACCESS_CONTROL_TAG_DATA 484
-#define VAR_VIEW 485
-#define VAR_ACCESS_CONTROL_VIEW 486
-#define VAR_VIEW_FIRST 487
-#define VAR_SERVE_EXPIRED 488
-#define VAR_SERVE_EXPIRED_TTL 489
-#define VAR_SERVE_EXPIRED_TTL_RESET 490
-#define VAR_SERVE_EXPIRED_REPLY_TTL 491
-#define VAR_SERVE_EXPIRED_CLIENT_TIMEOUT 492
-#define VAR_SERVE_ORIGINAL_TTL 493
-#define VAR_FAKE_DSA 494
-#define VAR_FAKE_SHA1 495
-#define VAR_LOG_IDENTITY 496
-#define VAR_HIDE_TRUSTANCHOR 497
-#define VAR_HIDE_HTTP_USER_AGENT 498
-#define VAR_HTTP_USER_AGENT 499
-#define VAR_TRUST_ANCHOR_SIGNALING 500
-#define VAR_AGGRESSIVE_NSEC 501
-#define VAR_USE_SYSTEMD 502
-#define VAR_SHM_ENABLE 503
-#define VAR_SHM_KEY 504
-#define VAR_ROOT_KEY_SENTINEL 505
-#define VAR_DNSCRYPT 506
-#define VAR_DNSCRYPT_ENABLE 507
-#define VAR_DNSCRYPT_PORT 508
-#define VAR_DNSCRYPT_PROVIDER 509
-#define VAR_DNSCRYPT_SECRET_KEY 510
-#define VAR_DNSCRYPT_PROVIDER_CERT 511
-#define VAR_DNSCRYPT_PROVIDER_CERT_ROTATED 512
-#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE 513
-#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS 514
-#define VAR_DNSCRYPT_NONCE_CACHE_SIZE 515
-#define VAR_DNSCRYPT_NONCE_CACHE_SLABS 516
-#define VAR_PAD_RESPONSES 517
-#define VAR_PAD_RESPONSES_BLOCK_SIZE 518
-#define VAR_PAD_QUERIES 519
-#define VAR_PAD_QUERIES_BLOCK_SIZE 520
-#define VAR_IPSECMOD_ENABLED 521
-#define VAR_IPSECMOD_HOOK 522
-#define VAR_IPSECMOD_IGNORE_BOGUS 523
-#define VAR_IPSECMOD_MAX_TTL 524
-#define VAR_IPSECMOD_WHITELIST 525
-#define VAR_IPSECMOD_STRICT 526
-#define VAR_CACHEDB 527
-#define VAR_CACHEDB_BACKEND 528
-#define VAR_CACHEDB_SECRETSEED 529
-#define VAR_CACHEDB_REDISHOST 530
-#define VAR_CACHEDB_REDISPORT 531
-#define VAR_CACHEDB_REDISTIMEOUT 532
-#define VAR_CACHEDB_REDISEXPIRERECORDS 533
-#define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 534
-#define VAR_FOR_UPSTREAM 535
-#define VAR_AUTH_ZONE 536
-#define VAR_ZONEFILE 537
-#define VAR_MASTER 538
-#define VAR_URL 539
-#define VAR_FOR_DOWNSTREAM 540
-#define VAR_FALLBACK_ENABLED 541
-#define VAR_TLS_ADDITIONAL_PORT 542
-#define VAR_LOW_RTT 543
-#define VAR_LOW_RTT_PERMIL 544
-#define VAR_FAST_SERVER_PERMIL 545
-#define VAR_FAST_SERVER_NUM 546
-#define VAR_ALLOW_NOTIFY 547
-#define VAR_TLS_WIN_CERT 548
-#define VAR_TCP_CONNECTION_LIMIT 549
-#define VAR_FORWARD_NO_CACHE 550
-#define VAR_STUB_NO_CACHE 551
-#define VAR_LOG_SERVFAIL 552
-#define VAR_DENY_ANY 553
-#define VAR_UNKNOWN_SERVER_TIME_LIMIT 554
-#define VAR_LOG_TAG_QUERYREPLY 555
-#define VAR_STREAM_WAIT_SIZE 556
-#define VAR_TLS_CIPHERS 557
-#define VAR_TLS_CIPHERSUITES 558
-#define VAR_TLS_USE_SNI 559
-#define VAR_IPSET 560
-#define VAR_IPSET_NAME_V4 561
-#define VAR_IPSET_NAME_V6 562
-#define VAR_TLS_SESSION_TICKET_KEYS 563
-#define VAR_RPZ 564
-#define VAR_TAGS 565
-#define VAR_RPZ_ACTION_OVERRIDE 566
-#define VAR_RPZ_CNAME_OVERRIDE 567
-#define VAR_RPZ_LOG 568
-#define VAR_RPZ_LOG_NAME 569
-#define VAR_DYNLIB 570
-#define VAR_DYNLIB_FILE 571
-#define VAR_EDNS_CLIENT_STRING 572
-#define VAR_EDNS_CLIENT_STRING_OPCODE 573
-#define VAR_NSID 574
-#define VAR_ZONEMD_PERMISSIVE_MODE 575
-#define VAR_ZONEMD_CHECK 576
-#define VAR_ZONEMD_REJECT_ABSENCE 577
-#define VAR_RPZ_SIGNAL_NXDOMAIN_RA 578
-
-/* Value type. */
-#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
-union YYSTYPE
-{
-#line 66 "util/configparser.y"
-
- char* str;
-
-#line 802 "util/configparser.c"
-
-};
-typedef union YYSTYPE YYSTYPE;
-# define YYSTYPE_IS_TRIVIAL 1
-# define YYSTYPE_IS_DECLARED 1
-#endif
-
-
-extern YYSTYPE yylval;
-
-int yyparse (void);
-
-#endif /* !YY_YY_UTIL_CONFIGPARSER_H_INCLUDED */
+#include "configparser.h"
/* Symbol kind. */
enum yysymbol_kind_t
{
@@ -1054,441 +362,447 @@ enum yysymbol_kind_t
YYSYMBOL_VAR_SERVE_EXPIRED_TTL_RESET = 235, /* VAR_SERVE_EXPIRED_TTL_RESET */
YYSYMBOL_VAR_SERVE_EXPIRED_REPLY_TTL = 236, /* VAR_SERVE_EXPIRED_REPLY_TTL */
YYSYMBOL_VAR_SERVE_EXPIRED_CLIENT_TIMEOUT = 237, /* VAR_SERVE_EXPIRED_CLIENT_TIMEOUT */
- YYSYMBOL_VAR_SERVE_ORIGINAL_TTL = 238, /* VAR_SERVE_ORIGINAL_TTL */
- YYSYMBOL_VAR_FAKE_DSA = 239, /* VAR_FAKE_DSA */
- YYSYMBOL_VAR_FAKE_SHA1 = 240, /* VAR_FAKE_SHA1 */
- YYSYMBOL_VAR_LOG_IDENTITY = 241, /* VAR_LOG_IDENTITY */
- YYSYMBOL_VAR_HIDE_TRUSTANCHOR = 242, /* VAR_HIDE_TRUSTANCHOR */
- YYSYMBOL_VAR_HIDE_HTTP_USER_AGENT = 243, /* VAR_HIDE_HTTP_USER_AGENT */
- YYSYMBOL_VAR_HTTP_USER_AGENT = 244, /* VAR_HTTP_USER_AGENT */
- YYSYMBOL_VAR_TRUST_ANCHOR_SIGNALING = 245, /* VAR_TRUST_ANCHOR_SIGNALING */
- YYSYMBOL_VAR_AGGRESSIVE_NSEC = 246, /* VAR_AGGRESSIVE_NSEC */
- YYSYMBOL_VAR_USE_SYSTEMD = 247, /* VAR_USE_SYSTEMD */
- YYSYMBOL_VAR_SHM_ENABLE = 248, /* VAR_SHM_ENABLE */
- YYSYMBOL_VAR_SHM_KEY = 249, /* VAR_SHM_KEY */
- YYSYMBOL_VAR_ROOT_KEY_SENTINEL = 250, /* VAR_ROOT_KEY_SENTINEL */
- YYSYMBOL_VAR_DNSCRYPT = 251, /* VAR_DNSCRYPT */
- YYSYMBOL_VAR_DNSCRYPT_ENABLE = 252, /* VAR_DNSCRYPT_ENABLE */
- YYSYMBOL_VAR_DNSCRYPT_PORT = 253, /* VAR_DNSCRYPT_PORT */
- YYSYMBOL_VAR_DNSCRYPT_PROVIDER = 254, /* VAR_DNSCRYPT_PROVIDER */
- YYSYMBOL_VAR_DNSCRYPT_SECRET_KEY = 255, /* VAR_DNSCRYPT_SECRET_KEY */
- YYSYMBOL_VAR_DNSCRYPT_PROVIDER_CERT = 256, /* VAR_DNSCRYPT_PROVIDER_CERT */
- YYSYMBOL_VAR_DNSCRYPT_PROVIDER_CERT_ROTATED = 257, /* VAR_DNSCRYPT_PROVIDER_CERT_ROTATED */
- YYSYMBOL_VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 258, /* VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE */
- YYSYMBOL_VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 259, /* VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS */
- YYSYMBOL_VAR_DNSCRYPT_NONCE_CACHE_SIZE = 260, /* VAR_DNSCRYPT_NONCE_CACHE_SIZE */
- YYSYMBOL_VAR_DNSCRYPT_NONCE_CACHE_SLABS = 261, /* VAR_DNSCRYPT_NONCE_CACHE_SLABS */
- YYSYMBOL_VAR_PAD_RESPONSES = 262, /* VAR_PAD_RESPONSES */
- YYSYMBOL_VAR_PAD_RESPONSES_BLOCK_SIZE = 263, /* VAR_PAD_RESPONSES_BLOCK_SIZE */
- YYSYMBOL_VAR_PAD_QUERIES = 264, /* VAR_PAD_QUERIES */
- YYSYMBOL_VAR_PAD_QUERIES_BLOCK_SIZE = 265, /* VAR_PAD_QUERIES_BLOCK_SIZE */
- YYSYMBOL_VAR_IPSECMOD_ENABLED = 266, /* VAR_IPSECMOD_ENABLED */
- YYSYMBOL_VAR_IPSECMOD_HOOK = 267, /* VAR_IPSECMOD_HOOK */
- YYSYMBOL_VAR_IPSECMOD_IGNORE_BOGUS = 268, /* VAR_IPSECMOD_IGNORE_BOGUS */
- YYSYMBOL_VAR_IPSECMOD_MAX_TTL = 269, /* VAR_IPSECMOD_MAX_TTL */
- YYSYMBOL_VAR_IPSECMOD_WHITELIST = 270, /* VAR_IPSECMOD_WHITELIST */
- YYSYMBOL_VAR_IPSECMOD_STRICT = 271, /* VAR_IPSECMOD_STRICT */
- YYSYMBOL_VAR_CACHEDB = 272, /* VAR_CACHEDB */
- YYSYMBOL_VAR_CACHEDB_BACKEND = 273, /* VAR_CACHEDB_BACKEND */
- YYSYMBOL_VAR_CACHEDB_SECRETSEED = 274, /* VAR_CACHEDB_SECRETSEED */
- YYSYMBOL_VAR_CACHEDB_REDISHOST = 275, /* VAR_CACHEDB_REDISHOST */
- YYSYMBOL_VAR_CACHEDB_REDISPORT = 276, /* VAR_CACHEDB_REDISPORT */
- YYSYMBOL_VAR_CACHEDB_REDISTIMEOUT = 277, /* VAR_CACHEDB_REDISTIMEOUT */
- YYSYMBOL_VAR_CACHEDB_REDISEXPIRERECORDS = 278, /* VAR_CACHEDB_REDISEXPIRERECORDS */
- YYSYMBOL_VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 279, /* VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM */
- YYSYMBOL_VAR_FOR_UPSTREAM = 280, /* VAR_FOR_UPSTREAM */
- YYSYMBOL_VAR_AUTH_ZONE = 281, /* VAR_AUTH_ZONE */
- YYSYMBOL_VAR_ZONEFILE = 282, /* VAR_ZONEFILE */
- YYSYMBOL_VAR_MASTER = 283, /* VAR_MASTER */
- YYSYMBOL_VAR_URL = 284, /* VAR_URL */
- YYSYMBOL_VAR_FOR_DOWNSTREAM = 285, /* VAR_FOR_DOWNSTREAM */
- YYSYMBOL_VAR_FALLBACK_ENABLED = 286, /* VAR_FALLBACK_ENABLED */
- YYSYMBOL_VAR_TLS_ADDITIONAL_PORT = 287, /* VAR_TLS_ADDITIONAL_PORT */
- YYSYMBOL_VAR_LOW_RTT = 288, /* VAR_LOW_RTT */
- YYSYMBOL_VAR_LOW_RTT_PERMIL = 289, /* VAR_LOW_RTT_PERMIL */
- YYSYMBOL_VAR_FAST_SERVER_PERMIL = 290, /* VAR_FAST_SERVER_PERMIL */
- YYSYMBOL_VAR_FAST_SERVER_NUM = 291, /* VAR_FAST_SERVER_NUM */
- YYSYMBOL_VAR_ALLOW_NOTIFY = 292, /* VAR_ALLOW_NOTIFY */
- YYSYMBOL_VAR_TLS_WIN_CERT = 293, /* VAR_TLS_WIN_CERT */
- YYSYMBOL_VAR_TCP_CONNECTION_LIMIT = 294, /* VAR_TCP_CONNECTION_LIMIT */
- YYSYMBOL_VAR_FORWARD_NO_CACHE = 295, /* VAR_FORWARD_NO_CACHE */
- YYSYMBOL_VAR_STUB_NO_CACHE = 296, /* VAR_STUB_NO_CACHE */
- YYSYMBOL_VAR_LOG_SERVFAIL = 297, /* VAR_LOG_SERVFAIL */
- YYSYMBOL_VAR_DENY_ANY = 298, /* VAR_DENY_ANY */
- YYSYMBOL_VAR_UNKNOWN_SERVER_TIME_LIMIT = 299, /* VAR_UNKNOWN_SERVER_TIME_LIMIT */
- YYSYMBOL_VAR_LOG_TAG_QUERYREPLY = 300, /* VAR_LOG_TAG_QUERYREPLY */
- YYSYMBOL_VAR_STREAM_WAIT_SIZE = 301, /* VAR_STREAM_WAIT_SIZE */
- YYSYMBOL_VAR_TLS_CIPHERS = 302, /* VAR_TLS_CIPHERS */
- YYSYMBOL_VAR_TLS_CIPHERSUITES = 303, /* VAR_TLS_CIPHERSUITES */
- YYSYMBOL_VAR_TLS_USE_SNI = 304, /* VAR_TLS_USE_SNI */
- YYSYMBOL_VAR_IPSET = 305, /* VAR_IPSET */
- YYSYMBOL_VAR_IPSET_NAME_V4 = 306, /* VAR_IPSET_NAME_V4 */
- YYSYMBOL_VAR_IPSET_NAME_V6 = 307, /* VAR_IPSET_NAME_V6 */
- YYSYMBOL_VAR_TLS_SESSION_TICKET_KEYS = 308, /* VAR_TLS_SESSION_TICKET_KEYS */
- YYSYMBOL_VAR_RPZ = 309, /* VAR_RPZ */
- YYSYMBOL_VAR_TAGS = 310, /* VAR_TAGS */
- YYSYMBOL_VAR_RPZ_ACTION_OVERRIDE = 311, /* VAR_RPZ_ACTION_OVERRIDE */
- YYSYMBOL_VAR_RPZ_CNAME_OVERRIDE = 312, /* VAR_RPZ_CNAME_OVERRIDE */
- YYSYMBOL_VAR_RPZ_LOG = 313, /* VAR_RPZ_LOG */
- YYSYMBOL_VAR_RPZ_LOG_NAME = 314, /* VAR_RPZ_LOG_NAME */
- YYSYMBOL_VAR_DYNLIB = 315, /* VAR_DYNLIB */
- YYSYMBOL_VAR_DYNLIB_FILE = 316, /* VAR_DYNLIB_FILE */
- YYSYMBOL_VAR_EDNS_CLIENT_STRING = 317, /* VAR_EDNS_CLIENT_STRING */
- YYSYMBOL_VAR_EDNS_CLIENT_STRING_OPCODE = 318, /* VAR_EDNS_CLIENT_STRING_OPCODE */
- YYSYMBOL_VAR_NSID = 319, /* VAR_NSID */
- YYSYMBOL_VAR_ZONEMD_PERMISSIVE_MODE = 320, /* VAR_ZONEMD_PERMISSIVE_MODE */
- YYSYMBOL_VAR_ZONEMD_CHECK = 321, /* VAR_ZONEMD_CHECK */
- YYSYMBOL_VAR_ZONEMD_REJECT_ABSENCE = 322, /* VAR_ZONEMD_REJECT_ABSENCE */
- YYSYMBOL_VAR_RPZ_SIGNAL_NXDOMAIN_RA = 323, /* VAR_RPZ_SIGNAL_NXDOMAIN_RA */
- YYSYMBOL_YYACCEPT = 324, /* $accept */
- YYSYMBOL_toplevelvars = 325, /* toplevelvars */
- YYSYMBOL_toplevelvar = 326, /* toplevelvar */
- YYSYMBOL_force_toplevel = 327, /* force_toplevel */
- YYSYMBOL_serverstart = 328, /* serverstart */
- YYSYMBOL_contents_server = 329, /* contents_server */
- YYSYMBOL_content_server = 330, /* content_server */
- YYSYMBOL_stubstart = 331, /* stubstart */
- YYSYMBOL_contents_stub = 332, /* contents_stub */
- YYSYMBOL_content_stub = 333, /* content_stub */
- YYSYMBOL_forwardstart = 334, /* forwardstart */
- YYSYMBOL_contents_forward = 335, /* contents_forward */
- YYSYMBOL_content_forward = 336, /* content_forward */
- YYSYMBOL_viewstart = 337, /* viewstart */
- YYSYMBOL_contents_view = 338, /* contents_view */
- YYSYMBOL_content_view = 339, /* content_view */
- YYSYMBOL_authstart = 340, /* authstart */
- YYSYMBOL_contents_auth = 341, /* contents_auth */
- YYSYMBOL_content_auth = 342, /* content_auth */
- YYSYMBOL_rpz_tag = 343, /* rpz_tag */
- YYSYMBOL_rpz_action_override = 344, /* rpz_action_override */
- YYSYMBOL_rpz_cname_override = 345, /* rpz_cname_override */
- YYSYMBOL_rpz_log = 346, /* rpz_log */
- YYSYMBOL_rpz_log_name = 347, /* rpz_log_name */
- YYSYMBOL_rpz_signal_nxdomain_ra = 348, /* rpz_signal_nxdomain_ra */
- YYSYMBOL_rpzstart = 349, /* rpzstart */
- YYSYMBOL_contents_rpz = 350, /* contents_rpz */
- YYSYMBOL_content_rpz = 351, /* content_rpz */
- YYSYMBOL_server_num_threads = 352, /* server_num_threads */
- YYSYMBOL_server_verbosity = 353, /* server_verbosity */
- YYSYMBOL_server_statistics_interval = 354, /* server_statistics_interval */
- YYSYMBOL_server_statistics_cumulative = 355, /* server_statistics_cumulative */
- YYSYMBOL_server_extended_statistics = 356, /* server_extended_statistics */
- YYSYMBOL_server_shm_enable = 357, /* server_shm_enable */
- YYSYMBOL_server_shm_key = 358, /* server_shm_key */
- YYSYMBOL_server_port = 359, /* server_port */
- YYSYMBOL_server_send_client_subnet = 360, /* server_send_client_subnet */
- YYSYMBOL_server_client_subnet_zone = 361, /* server_client_subnet_zone */
- YYSYMBOL_server_client_subnet_always_forward = 362, /* server_client_subnet_always_forward */
- YYSYMBOL_server_client_subnet_opcode = 363, /* server_client_subnet_opcode */
- YYSYMBOL_server_max_client_subnet_ipv4 = 364, /* server_max_client_subnet_ipv4 */
- YYSYMBOL_server_max_client_subnet_ipv6 = 365, /* server_max_client_subnet_ipv6 */
- YYSYMBOL_server_min_client_subnet_ipv4 = 366, /* server_min_client_subnet_ipv4 */
- YYSYMBOL_server_min_client_subnet_ipv6 = 367, /* server_min_client_subnet_ipv6 */
- YYSYMBOL_server_max_ecs_tree_size_ipv4 = 368, /* server_max_ecs_tree_size_ipv4 */
- YYSYMBOL_server_max_ecs_tree_size_ipv6 = 369, /* server_max_ecs_tree_size_ipv6 */
- YYSYMBOL_server_interface = 370, /* server_interface */
- YYSYMBOL_server_outgoing_interface = 371, /* server_outgoing_interface */
- YYSYMBOL_server_outgoing_range = 372, /* server_outgoing_range */
- YYSYMBOL_server_outgoing_port_permit = 373, /* server_outgoing_port_permit */
- YYSYMBOL_server_outgoing_port_avoid = 374, /* server_outgoing_port_avoid */
- YYSYMBOL_server_outgoing_num_tcp = 375, /* server_outgoing_num_tcp */
- YYSYMBOL_server_incoming_num_tcp = 376, /* server_incoming_num_tcp */
- YYSYMBOL_server_interface_automatic = 377, /* server_interface_automatic */
- YYSYMBOL_server_do_ip4 = 378, /* server_do_ip4 */
- YYSYMBOL_server_do_ip6 = 379, /* server_do_ip6 */
- YYSYMBOL_server_do_udp = 380, /* server_do_udp */
- YYSYMBOL_server_do_tcp = 381, /* server_do_tcp */
- YYSYMBOL_server_prefer_ip4 = 382, /* server_prefer_ip4 */
- YYSYMBOL_server_prefer_ip6 = 383, /* server_prefer_ip6 */
- YYSYMBOL_server_tcp_mss = 384, /* server_tcp_mss */
- YYSYMBOL_server_outgoing_tcp_mss = 385, /* server_outgoing_tcp_mss */
- YYSYMBOL_server_tcp_idle_timeout = 386, /* server_tcp_idle_timeout */
- YYSYMBOL_server_max_reuse_tcp_queries = 387, /* server_max_reuse_tcp_queries */
- YYSYMBOL_server_tcp_reuse_timeout = 388, /* server_tcp_reuse_timeout */
- YYSYMBOL_server_tcp_auth_query_timeout = 389, /* server_tcp_auth_query_timeout */
- YYSYMBOL_server_tcp_keepalive = 390, /* server_tcp_keepalive */
- YYSYMBOL_server_tcp_keepalive_timeout = 391, /* server_tcp_keepalive_timeout */
- YYSYMBOL_server_tcp_upstream = 392, /* server_tcp_upstream */
- YYSYMBOL_server_udp_upstream_without_downstream = 393, /* server_udp_upstream_without_downstream */
- YYSYMBOL_server_ssl_upstream = 394, /* server_ssl_upstream */
- YYSYMBOL_server_ssl_service_key = 395, /* server_ssl_service_key */
- YYSYMBOL_server_ssl_service_pem = 396, /* server_ssl_service_pem */
- YYSYMBOL_server_ssl_port = 397, /* server_ssl_port */
- YYSYMBOL_server_tls_cert_bundle = 398, /* server_tls_cert_bundle */
- YYSYMBOL_server_tls_win_cert = 399, /* server_tls_win_cert */
- YYSYMBOL_server_tls_additional_port = 400, /* server_tls_additional_port */
- YYSYMBOL_server_tls_ciphers = 401, /* server_tls_ciphers */
- YYSYMBOL_server_tls_ciphersuites = 402, /* server_tls_ciphersuites */
- YYSYMBOL_server_tls_session_ticket_keys = 403, /* server_tls_session_ticket_keys */
- YYSYMBOL_server_tls_use_sni = 404, /* server_tls_use_sni */
- YYSYMBOL_server_https_port = 405, /* server_https_port */
- YYSYMBOL_server_http_endpoint = 406, /* server_http_endpoint */
- YYSYMBOL_server_http_max_streams = 407, /* server_http_max_streams */
- YYSYMBOL_server_http_query_buffer_size = 408, /* server_http_query_buffer_size */
- YYSYMBOL_server_http_response_buffer_size = 409, /* server_http_response_buffer_size */
- YYSYMBOL_server_http_nodelay = 410, /* server_http_nodelay */
- YYSYMBOL_server_http_notls_downstream = 411, /* server_http_notls_downstream */
- YYSYMBOL_server_use_systemd = 412, /* server_use_systemd */
- YYSYMBOL_server_do_daemonize = 413, /* server_do_daemonize */
- YYSYMBOL_server_use_syslog = 414, /* server_use_syslog */
- YYSYMBOL_server_log_time_ascii = 415, /* server_log_time_ascii */
- YYSYMBOL_server_log_queries = 416, /* server_log_queries */
- YYSYMBOL_server_log_replies = 417, /* server_log_replies */
- YYSYMBOL_server_log_tag_queryreply = 418, /* server_log_tag_queryreply */
- YYSYMBOL_server_log_servfail = 419, /* server_log_servfail */
- YYSYMBOL_server_log_local_actions = 420, /* server_log_local_actions */
- YYSYMBOL_server_chroot = 421, /* server_chroot */
- YYSYMBOL_server_username = 422, /* server_username */
- YYSYMBOL_server_directory = 423, /* server_directory */
- YYSYMBOL_server_logfile = 424, /* server_logfile */
- YYSYMBOL_server_pidfile = 425, /* server_pidfile */
- YYSYMBOL_server_root_hints = 426, /* server_root_hints */
- YYSYMBOL_server_dlv_anchor_file = 427, /* server_dlv_anchor_file */
- YYSYMBOL_server_dlv_anchor = 428, /* server_dlv_anchor */
- YYSYMBOL_server_auto_trust_anchor_file = 429, /* server_auto_trust_anchor_file */
- YYSYMBOL_server_trust_anchor_file = 430, /* server_trust_anchor_file */
- YYSYMBOL_server_trusted_keys_file = 431, /* server_trusted_keys_file */
- YYSYMBOL_server_trust_anchor = 432, /* server_trust_anchor */
- YYSYMBOL_server_trust_anchor_signaling = 433, /* server_trust_anchor_signaling */
- YYSYMBOL_server_root_key_sentinel = 434, /* server_root_key_sentinel */
- YYSYMBOL_server_domain_insecure = 435, /* server_domain_insecure */
- YYSYMBOL_server_hide_identity = 436, /* server_hide_identity */
- YYSYMBOL_server_hide_version = 437, /* server_hide_version */
- YYSYMBOL_server_hide_trustanchor = 438, /* server_hide_trustanchor */
- YYSYMBOL_server_hide_http_user_agent = 439, /* server_hide_http_user_agent */
- YYSYMBOL_server_identity = 440, /* server_identity */
- YYSYMBOL_server_version = 441, /* server_version */
- YYSYMBOL_server_http_user_agent = 442, /* server_http_user_agent */
- YYSYMBOL_server_nsid = 443, /* server_nsid */
- YYSYMBOL_server_so_rcvbuf = 444, /* server_so_rcvbuf */
- YYSYMBOL_server_so_sndbuf = 445, /* server_so_sndbuf */
- YYSYMBOL_server_so_reuseport = 446, /* server_so_reuseport */
- YYSYMBOL_server_ip_transparent = 447, /* server_ip_transparent */
- YYSYMBOL_server_ip_freebind = 448, /* server_ip_freebind */
- YYSYMBOL_server_ip_dscp = 449, /* server_ip_dscp */
- YYSYMBOL_server_stream_wait_size = 450, /* server_stream_wait_size */
- YYSYMBOL_server_edns_buffer_size = 451, /* server_edns_buffer_size */
- YYSYMBOL_server_msg_buffer_size = 452, /* server_msg_buffer_size */
- YYSYMBOL_server_msg_cache_size = 453, /* server_msg_cache_size */
- YYSYMBOL_server_msg_cache_slabs = 454, /* server_msg_cache_slabs */
- YYSYMBOL_server_num_queries_per_thread = 455, /* server_num_queries_per_thread */
- YYSYMBOL_server_jostle_timeout = 456, /* server_jostle_timeout */
- YYSYMBOL_server_delay_close = 457, /* server_delay_close */
- YYSYMBOL_server_udp_connect = 458, /* server_udp_connect */
- YYSYMBOL_server_unblock_lan_zones = 459, /* server_unblock_lan_zones */
- YYSYMBOL_server_insecure_lan_zones = 460, /* server_insecure_lan_zones */
- YYSYMBOL_server_rrset_cache_size = 461, /* server_rrset_cache_size */
- YYSYMBOL_server_rrset_cache_slabs = 462, /* server_rrset_cache_slabs */
- YYSYMBOL_server_infra_host_ttl = 463, /* server_infra_host_ttl */
- YYSYMBOL_server_infra_lame_ttl = 464, /* server_infra_lame_ttl */
- YYSYMBOL_server_infra_cache_numhosts = 465, /* server_infra_cache_numhosts */
- YYSYMBOL_server_infra_cache_lame_size = 466, /* server_infra_cache_lame_size */
- YYSYMBOL_server_infra_cache_slabs = 467, /* server_infra_cache_slabs */
- YYSYMBOL_server_infra_cache_min_rtt = 468, /* server_infra_cache_min_rtt */
- YYSYMBOL_server_infra_keep_probing = 469, /* server_infra_keep_probing */
- YYSYMBOL_server_target_fetch_policy = 470, /* server_target_fetch_policy */
- YYSYMBOL_server_harden_short_bufsize = 471, /* server_harden_short_bufsize */
- YYSYMBOL_server_harden_large_queries = 472, /* server_harden_large_queries */
- YYSYMBOL_server_harden_glue = 473, /* server_harden_glue */
- YYSYMBOL_server_harden_dnssec_stripped = 474, /* server_harden_dnssec_stripped */
- YYSYMBOL_server_harden_below_nxdomain = 475, /* server_harden_below_nxdomain */
- YYSYMBOL_server_harden_referral_path = 476, /* server_harden_referral_path */
- YYSYMBOL_server_harden_algo_downgrade = 477, /* server_harden_algo_downgrade */
- YYSYMBOL_server_use_caps_for_id = 478, /* server_use_caps_for_id */
- YYSYMBOL_server_caps_whitelist = 479, /* server_caps_whitelist */
- YYSYMBOL_server_private_address = 480, /* server_private_address */
- YYSYMBOL_server_private_domain = 481, /* server_private_domain */
- YYSYMBOL_server_prefetch = 482, /* server_prefetch */
- YYSYMBOL_server_prefetch_key = 483, /* server_prefetch_key */
- YYSYMBOL_server_deny_any = 484, /* server_deny_any */
- YYSYMBOL_server_unwanted_reply_threshold = 485, /* server_unwanted_reply_threshold */
- YYSYMBOL_server_do_not_query_address = 486, /* server_do_not_query_address */
- YYSYMBOL_server_do_not_query_localhost = 487, /* server_do_not_query_localhost */
- YYSYMBOL_server_access_control = 488, /* server_access_control */
- YYSYMBOL_server_module_conf = 489, /* server_module_conf */
- YYSYMBOL_server_val_override_date = 490, /* server_val_override_date */
- YYSYMBOL_server_val_sig_skew_min = 491, /* server_val_sig_skew_min */
- YYSYMBOL_server_val_sig_skew_max = 492, /* server_val_sig_skew_max */
- YYSYMBOL_server_val_max_restart = 493, /* server_val_max_restart */
- YYSYMBOL_server_cache_max_ttl = 494, /* server_cache_max_ttl */
- YYSYMBOL_server_cache_max_negative_ttl = 495, /* server_cache_max_negative_ttl */
- YYSYMBOL_server_cache_min_ttl = 496, /* server_cache_min_ttl */
- YYSYMBOL_server_bogus_ttl = 497, /* server_bogus_ttl */
- YYSYMBOL_server_val_clean_additional = 498, /* server_val_clean_additional */
- YYSYMBOL_server_val_permissive_mode = 499, /* server_val_permissive_mode */
- YYSYMBOL_server_aggressive_nsec = 500, /* server_aggressive_nsec */
- YYSYMBOL_server_ignore_cd_flag = 501, /* server_ignore_cd_flag */
- YYSYMBOL_server_serve_expired = 502, /* server_serve_expired */
- YYSYMBOL_server_serve_expired_ttl = 503, /* server_serve_expired_ttl */
- YYSYMBOL_server_serve_expired_ttl_reset = 504, /* server_serve_expired_ttl_reset */
- YYSYMBOL_server_serve_expired_reply_ttl = 505, /* server_serve_expired_reply_ttl */
- YYSYMBOL_server_serve_expired_client_timeout = 506, /* server_serve_expired_client_timeout */
- YYSYMBOL_server_serve_original_ttl = 507, /* server_serve_original_ttl */
- YYSYMBOL_server_fake_dsa = 508, /* server_fake_dsa */
- YYSYMBOL_server_fake_sha1 = 509, /* server_fake_sha1 */
- YYSYMBOL_server_val_log_level = 510, /* server_val_log_level */
- YYSYMBOL_server_val_nsec3_keysize_iterations = 511, /* server_val_nsec3_keysize_iterations */
- YYSYMBOL_server_zonemd_permissive_mode = 512, /* server_zonemd_permissive_mode */
- YYSYMBOL_server_add_holddown = 513, /* server_add_holddown */
- YYSYMBOL_server_del_holddown = 514, /* server_del_holddown */
- YYSYMBOL_server_keep_missing = 515, /* server_keep_missing */
- YYSYMBOL_server_permit_small_holddown = 516, /* server_permit_small_holddown */
- YYSYMBOL_server_key_cache_size = 517, /* server_key_cache_size */
- YYSYMBOL_server_key_cache_slabs = 518, /* server_key_cache_slabs */
- YYSYMBOL_server_neg_cache_size = 519, /* server_neg_cache_size */
- YYSYMBOL_server_local_zone = 520, /* server_local_zone */
- YYSYMBOL_server_local_data = 521, /* server_local_data */
- YYSYMBOL_server_local_data_ptr = 522, /* server_local_data_ptr */
- YYSYMBOL_server_minimal_responses = 523, /* server_minimal_responses */
- YYSYMBOL_server_rrset_roundrobin = 524, /* server_rrset_roundrobin */
- YYSYMBOL_server_unknown_server_time_limit = 525, /* server_unknown_server_time_limit */
- YYSYMBOL_server_max_udp_size = 526, /* server_max_udp_size */
- YYSYMBOL_server_dns64_prefix = 527, /* server_dns64_prefix */
- YYSYMBOL_server_dns64_synthall = 528, /* server_dns64_synthall */
- YYSYMBOL_server_dns64_ignore_aaaa = 529, /* server_dns64_ignore_aaaa */
- YYSYMBOL_server_define_tag = 530, /* server_define_tag */
- YYSYMBOL_server_local_zone_tag = 531, /* server_local_zone_tag */
- YYSYMBOL_server_access_control_tag = 532, /* server_access_control_tag */
- YYSYMBOL_server_access_control_tag_action = 533, /* server_access_control_tag_action */
- YYSYMBOL_server_access_control_tag_data = 534, /* server_access_control_tag_data */
- YYSYMBOL_server_local_zone_override = 535, /* server_local_zone_override */
- YYSYMBOL_server_access_control_view = 536, /* server_access_control_view */
- YYSYMBOL_server_response_ip_tag = 537, /* server_response_ip_tag */
- YYSYMBOL_server_ip_ratelimit = 538, /* server_ip_ratelimit */
- YYSYMBOL_server_ratelimit = 539, /* server_ratelimit */
- YYSYMBOL_server_ip_ratelimit_size = 540, /* server_ip_ratelimit_size */
- YYSYMBOL_server_ratelimit_size = 541, /* server_ratelimit_size */
- YYSYMBOL_server_ip_ratelimit_slabs = 542, /* server_ip_ratelimit_slabs */
- YYSYMBOL_server_ratelimit_slabs = 543, /* server_ratelimit_slabs */
- YYSYMBOL_server_ratelimit_for_domain = 544, /* server_ratelimit_for_domain */
- YYSYMBOL_server_ratelimit_below_domain = 545, /* server_ratelimit_below_domain */
- YYSYMBOL_server_ip_ratelimit_factor = 546, /* server_ip_ratelimit_factor */
- YYSYMBOL_server_ratelimit_factor = 547, /* server_ratelimit_factor */
- YYSYMBOL_server_ip_ratelimit_backoff = 548, /* server_ip_ratelimit_backoff */
- YYSYMBOL_server_ratelimit_backoff = 549, /* server_ratelimit_backoff */
- YYSYMBOL_server_outbound_msg_retry = 550, /* server_outbound_msg_retry */
- YYSYMBOL_server_low_rtt = 551, /* server_low_rtt */
- YYSYMBOL_server_fast_server_num = 552, /* server_fast_server_num */
- YYSYMBOL_server_fast_server_permil = 553, /* server_fast_server_permil */
- YYSYMBOL_server_qname_minimisation = 554, /* server_qname_minimisation */
- YYSYMBOL_server_qname_minimisation_strict = 555, /* server_qname_minimisation_strict */
- YYSYMBOL_server_pad_responses = 556, /* server_pad_responses */
- YYSYMBOL_server_pad_responses_block_size = 557, /* server_pad_responses_block_size */
- YYSYMBOL_server_pad_queries = 558, /* server_pad_queries */
- YYSYMBOL_server_pad_queries_block_size = 559, /* server_pad_queries_block_size */
- YYSYMBOL_server_ipsecmod_enabled = 560, /* server_ipsecmod_enabled */
- YYSYMBOL_server_ipsecmod_ignore_bogus = 561, /* server_ipsecmod_ignore_bogus */
- YYSYMBOL_server_ipsecmod_hook = 562, /* server_ipsecmod_hook */
- YYSYMBOL_server_ipsecmod_max_ttl = 563, /* server_ipsecmod_max_ttl */
- YYSYMBOL_server_ipsecmod_whitelist = 564, /* server_ipsecmod_whitelist */
- YYSYMBOL_server_ipsecmod_strict = 565, /* server_ipsecmod_strict */
- YYSYMBOL_server_edns_client_string = 566, /* server_edns_client_string */
- YYSYMBOL_server_edns_client_string_opcode = 567, /* server_edns_client_string_opcode */
- YYSYMBOL_stub_name = 568, /* stub_name */
- YYSYMBOL_stub_host = 569, /* stub_host */
- YYSYMBOL_stub_addr = 570, /* stub_addr */
- YYSYMBOL_stub_first = 571, /* stub_first */
- YYSYMBOL_stub_no_cache = 572, /* stub_no_cache */
- YYSYMBOL_stub_ssl_upstream = 573, /* stub_ssl_upstream */
- YYSYMBOL_stub_tcp_upstream = 574, /* stub_tcp_upstream */
- YYSYMBOL_stub_prime = 575, /* stub_prime */
- YYSYMBOL_forward_name = 576, /* forward_name */
- YYSYMBOL_forward_host = 577, /* forward_host */
- YYSYMBOL_forward_addr = 578, /* forward_addr */
- YYSYMBOL_forward_first = 579, /* forward_first */
- YYSYMBOL_forward_no_cache = 580, /* forward_no_cache */
- YYSYMBOL_forward_ssl_upstream = 581, /* forward_ssl_upstream */
- YYSYMBOL_forward_tcp_upstream = 582, /* forward_tcp_upstream */
- YYSYMBOL_auth_name = 583, /* auth_name */
- YYSYMBOL_auth_zonefile = 584, /* auth_zonefile */
- YYSYMBOL_auth_master = 585, /* auth_master */
- YYSYMBOL_auth_url = 586, /* auth_url */
- YYSYMBOL_auth_allow_notify = 587, /* auth_allow_notify */
- YYSYMBOL_auth_zonemd_check = 588, /* auth_zonemd_check */
- YYSYMBOL_auth_zonemd_reject_absence = 589, /* auth_zonemd_reject_absence */
- YYSYMBOL_auth_for_downstream = 590, /* auth_for_downstream */
- YYSYMBOL_auth_for_upstream = 591, /* auth_for_upstream */
- YYSYMBOL_auth_fallback_enabled = 592, /* auth_fallback_enabled */
- YYSYMBOL_view_name = 593, /* view_name */
- YYSYMBOL_view_local_zone = 594, /* view_local_zone */
- YYSYMBOL_view_response_ip = 595, /* view_response_ip */
- YYSYMBOL_view_response_ip_data = 596, /* view_response_ip_data */
- YYSYMBOL_view_local_data = 597, /* view_local_data */
- YYSYMBOL_view_local_data_ptr = 598, /* view_local_data_ptr */
- YYSYMBOL_view_first = 599, /* view_first */
- YYSYMBOL_rcstart = 600, /* rcstart */
- YYSYMBOL_contents_rc = 601, /* contents_rc */
- YYSYMBOL_content_rc = 602, /* content_rc */
- YYSYMBOL_rc_control_enable = 603, /* rc_control_enable */
- YYSYMBOL_rc_control_port = 604, /* rc_control_port */
- YYSYMBOL_rc_control_interface = 605, /* rc_control_interface */
- YYSYMBOL_rc_control_use_cert = 606, /* rc_control_use_cert */
- YYSYMBOL_rc_server_key_file = 607, /* rc_server_key_file */
- YYSYMBOL_rc_server_cert_file = 608, /* rc_server_cert_file */
- YYSYMBOL_rc_control_key_file = 609, /* rc_control_key_file */
- YYSYMBOL_rc_control_cert_file = 610, /* rc_control_cert_file */
- YYSYMBOL_dtstart = 611, /* dtstart */
- YYSYMBOL_contents_dt = 612, /* contents_dt */
- YYSYMBOL_content_dt = 613, /* content_dt */
- YYSYMBOL_dt_dnstap_enable = 614, /* dt_dnstap_enable */
- YYSYMBOL_dt_dnstap_bidirectional = 615, /* dt_dnstap_bidirectional */
- YYSYMBOL_dt_dnstap_socket_path = 616, /* dt_dnstap_socket_path */
- YYSYMBOL_dt_dnstap_ip = 617, /* dt_dnstap_ip */
- YYSYMBOL_dt_dnstap_tls = 618, /* dt_dnstap_tls */
- YYSYMBOL_dt_dnstap_tls_server_name = 619, /* dt_dnstap_tls_server_name */
- YYSYMBOL_dt_dnstap_tls_cert_bundle = 620, /* dt_dnstap_tls_cert_bundle */
- YYSYMBOL_dt_dnstap_tls_client_key_file = 621, /* dt_dnstap_tls_client_key_file */
- YYSYMBOL_dt_dnstap_tls_client_cert_file = 622, /* dt_dnstap_tls_client_cert_file */
- YYSYMBOL_dt_dnstap_send_identity = 623, /* dt_dnstap_send_identity */
- YYSYMBOL_dt_dnstap_send_version = 624, /* dt_dnstap_send_version */
- YYSYMBOL_dt_dnstap_identity = 625, /* dt_dnstap_identity */
- YYSYMBOL_dt_dnstap_version = 626, /* dt_dnstap_version */
- YYSYMBOL_dt_dnstap_log_resolver_query_messages = 627, /* dt_dnstap_log_resolver_query_messages */
- YYSYMBOL_dt_dnstap_log_resolver_response_messages = 628, /* dt_dnstap_log_resolver_response_messages */
- YYSYMBOL_dt_dnstap_log_client_query_messages = 629, /* dt_dnstap_log_client_query_messages */
- YYSYMBOL_dt_dnstap_log_client_response_messages = 630, /* dt_dnstap_log_client_response_messages */
- YYSYMBOL_dt_dnstap_log_forwarder_query_messages = 631, /* dt_dnstap_log_forwarder_query_messages */
- YYSYMBOL_dt_dnstap_log_forwarder_response_messages = 632, /* dt_dnstap_log_forwarder_response_messages */
- YYSYMBOL_pythonstart = 633, /* pythonstart */
- YYSYMBOL_contents_py = 634, /* contents_py */
- YYSYMBOL_content_py = 635, /* content_py */
- YYSYMBOL_py_script = 636, /* py_script */
- YYSYMBOL_dynlibstart = 637, /* dynlibstart */
- YYSYMBOL_contents_dl = 638, /* contents_dl */
- YYSYMBOL_content_dl = 639, /* content_dl */
- YYSYMBOL_dl_file = 640, /* dl_file */
- YYSYMBOL_server_disable_dnssec_lame_check = 641, /* server_disable_dnssec_lame_check */
- YYSYMBOL_server_log_identity = 642, /* server_log_identity */
- YYSYMBOL_server_response_ip = 643, /* server_response_ip */
- YYSYMBOL_server_response_ip_data = 644, /* server_response_ip_data */
- YYSYMBOL_dnscstart = 645, /* dnscstart */
- YYSYMBOL_contents_dnsc = 646, /* contents_dnsc */
- YYSYMBOL_content_dnsc = 647, /* content_dnsc */
- YYSYMBOL_dnsc_dnscrypt_enable = 648, /* dnsc_dnscrypt_enable */
- YYSYMBOL_dnsc_dnscrypt_port = 649, /* dnsc_dnscrypt_port */
- YYSYMBOL_dnsc_dnscrypt_provider = 650, /* dnsc_dnscrypt_provider */
- YYSYMBOL_dnsc_dnscrypt_provider_cert = 651, /* dnsc_dnscrypt_provider_cert */
- YYSYMBOL_dnsc_dnscrypt_provider_cert_rotated = 652, /* dnsc_dnscrypt_provider_cert_rotated */
- YYSYMBOL_dnsc_dnscrypt_secret_key = 653, /* dnsc_dnscrypt_secret_key */
- YYSYMBOL_dnsc_dnscrypt_shared_secret_cache_size = 654, /* dnsc_dnscrypt_shared_secret_cache_size */
- YYSYMBOL_dnsc_dnscrypt_shared_secret_cache_slabs = 655, /* dnsc_dnscrypt_shared_secret_cache_slabs */
- YYSYMBOL_dnsc_dnscrypt_nonce_cache_size = 656, /* dnsc_dnscrypt_nonce_cache_size */
- YYSYMBOL_dnsc_dnscrypt_nonce_cache_slabs = 657, /* dnsc_dnscrypt_nonce_cache_slabs */
- YYSYMBOL_cachedbstart = 658, /* cachedbstart */
- YYSYMBOL_contents_cachedb = 659, /* contents_cachedb */
- YYSYMBOL_content_cachedb = 660, /* content_cachedb */
- YYSYMBOL_cachedb_backend_name = 661, /* cachedb_backend_name */
- YYSYMBOL_cachedb_secret_seed = 662, /* cachedb_secret_seed */
- YYSYMBOL_redis_server_host = 663, /* redis_server_host */
- YYSYMBOL_redis_server_port = 664, /* redis_server_port */
- YYSYMBOL_redis_timeout = 665, /* redis_timeout */
- YYSYMBOL_redis_expire_records = 666, /* redis_expire_records */
- YYSYMBOL_server_tcp_connection_limit = 667, /* server_tcp_connection_limit */
- YYSYMBOL_ipsetstart = 668, /* ipsetstart */
- YYSYMBOL_contents_ipset = 669, /* contents_ipset */
- YYSYMBOL_content_ipset = 670, /* content_ipset */
- YYSYMBOL_ipset_name_v4 = 671, /* ipset_name_v4 */
- YYSYMBOL_ipset_name_v6 = 672 /* ipset_name_v6 */
+ YYSYMBOL_VAR_EDE_SERVE_EXPIRED = 238, /* VAR_EDE_SERVE_EXPIRED */
+ YYSYMBOL_VAR_SERVE_ORIGINAL_TTL = 239, /* VAR_SERVE_ORIGINAL_TTL */
+ YYSYMBOL_VAR_FAKE_DSA = 240, /* VAR_FAKE_DSA */
+ YYSYMBOL_VAR_FAKE_SHA1 = 241, /* VAR_FAKE_SHA1 */
+ YYSYMBOL_VAR_LOG_IDENTITY = 242, /* VAR_LOG_IDENTITY */
+ YYSYMBOL_VAR_HIDE_TRUSTANCHOR = 243, /* VAR_HIDE_TRUSTANCHOR */
+ YYSYMBOL_VAR_HIDE_HTTP_USER_AGENT = 244, /* VAR_HIDE_HTTP_USER_AGENT */
+ YYSYMBOL_VAR_HTTP_USER_AGENT = 245, /* VAR_HTTP_USER_AGENT */
+ YYSYMBOL_VAR_TRUST_ANCHOR_SIGNALING = 246, /* VAR_TRUST_ANCHOR_SIGNALING */
+ YYSYMBOL_VAR_AGGRESSIVE_NSEC = 247, /* VAR_AGGRESSIVE_NSEC */
+ YYSYMBOL_VAR_USE_SYSTEMD = 248, /* VAR_USE_SYSTEMD */
+ YYSYMBOL_VAR_SHM_ENABLE = 249, /* VAR_SHM_ENABLE */
+ YYSYMBOL_VAR_SHM_KEY = 250, /* VAR_SHM_KEY */
+ YYSYMBOL_VAR_ROOT_KEY_SENTINEL = 251, /* VAR_ROOT_KEY_SENTINEL */
+ YYSYMBOL_VAR_DNSCRYPT = 252, /* VAR_DNSCRYPT */
+ YYSYMBOL_VAR_DNSCRYPT_ENABLE = 253, /* VAR_DNSCRYPT_ENABLE */
+ YYSYMBOL_VAR_DNSCRYPT_PORT = 254, /* VAR_DNSCRYPT_PORT */
+ YYSYMBOL_VAR_DNSCRYPT_PROVIDER = 255, /* VAR_DNSCRYPT_PROVIDER */
+ YYSYMBOL_VAR_DNSCRYPT_SECRET_KEY = 256, /* VAR_DNSCRYPT_SECRET_KEY */
+ YYSYMBOL_VAR_DNSCRYPT_PROVIDER_CERT = 257, /* VAR_DNSCRYPT_PROVIDER_CERT */
+ YYSYMBOL_VAR_DNSCRYPT_PROVIDER_CERT_ROTATED = 258, /* VAR_DNSCRYPT_PROVIDER_CERT_ROTATED */
+ YYSYMBOL_VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 259, /* VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE */
+ YYSYMBOL_VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 260, /* VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS */
+ YYSYMBOL_VAR_DNSCRYPT_NONCE_CACHE_SIZE = 261, /* VAR_DNSCRYPT_NONCE_CACHE_SIZE */
+ YYSYMBOL_VAR_DNSCRYPT_NONCE_CACHE_SLABS = 262, /* VAR_DNSCRYPT_NONCE_CACHE_SLABS */
+ YYSYMBOL_VAR_PAD_RESPONSES = 263, /* VAR_PAD_RESPONSES */
+ YYSYMBOL_VAR_PAD_RESPONSES_BLOCK_SIZE = 264, /* VAR_PAD_RESPONSES_BLOCK_SIZE */
+ YYSYMBOL_VAR_PAD_QUERIES = 265, /* VAR_PAD_QUERIES */
+ YYSYMBOL_VAR_PAD_QUERIES_BLOCK_SIZE = 266, /* VAR_PAD_QUERIES_BLOCK_SIZE */
+ YYSYMBOL_VAR_IPSECMOD_ENABLED = 267, /* VAR_IPSECMOD_ENABLED */
+ YYSYMBOL_VAR_IPSECMOD_HOOK = 268, /* VAR_IPSECMOD_HOOK */
+ YYSYMBOL_VAR_IPSECMOD_IGNORE_BOGUS = 269, /* VAR_IPSECMOD_IGNORE_BOGUS */
+ YYSYMBOL_VAR_IPSECMOD_MAX_TTL = 270, /* VAR_IPSECMOD_MAX_TTL */
+ YYSYMBOL_VAR_IPSECMOD_WHITELIST = 271, /* VAR_IPSECMOD_WHITELIST */
+ YYSYMBOL_VAR_IPSECMOD_STRICT = 272, /* VAR_IPSECMOD_STRICT */
+ YYSYMBOL_VAR_CACHEDB = 273, /* VAR_CACHEDB */
+ YYSYMBOL_VAR_CACHEDB_BACKEND = 274, /* VAR_CACHEDB_BACKEND */
+ YYSYMBOL_VAR_CACHEDB_SECRETSEED = 275, /* VAR_CACHEDB_SECRETSEED */
+ YYSYMBOL_VAR_CACHEDB_REDISHOST = 276, /* VAR_CACHEDB_REDISHOST */
+ YYSYMBOL_VAR_CACHEDB_REDISPORT = 277, /* VAR_CACHEDB_REDISPORT */
+ YYSYMBOL_VAR_CACHEDB_REDISTIMEOUT = 278, /* VAR_CACHEDB_REDISTIMEOUT */
+ YYSYMBOL_VAR_CACHEDB_REDISEXPIRERECORDS = 279, /* VAR_CACHEDB_REDISEXPIRERECORDS */
+ YYSYMBOL_VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 280, /* VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM */
+ YYSYMBOL_VAR_FOR_UPSTREAM = 281, /* VAR_FOR_UPSTREAM */
+ YYSYMBOL_VAR_AUTH_ZONE = 282, /* VAR_AUTH_ZONE */
+ YYSYMBOL_VAR_ZONEFILE = 283, /* VAR_ZONEFILE */
+ YYSYMBOL_VAR_MASTER = 284, /* VAR_MASTER */
+ YYSYMBOL_VAR_URL = 285, /* VAR_URL */
+ YYSYMBOL_VAR_FOR_DOWNSTREAM = 286, /* VAR_FOR_DOWNSTREAM */
+ YYSYMBOL_VAR_FALLBACK_ENABLED = 287, /* VAR_FALLBACK_ENABLED */
+ YYSYMBOL_VAR_TLS_ADDITIONAL_PORT = 288, /* VAR_TLS_ADDITIONAL_PORT */
+ YYSYMBOL_VAR_LOW_RTT = 289, /* VAR_LOW_RTT */
+ YYSYMBOL_VAR_LOW_RTT_PERMIL = 290, /* VAR_LOW_RTT_PERMIL */
+ YYSYMBOL_VAR_FAST_SERVER_PERMIL = 291, /* VAR_FAST_SERVER_PERMIL */
+ YYSYMBOL_VAR_FAST_SERVER_NUM = 292, /* VAR_FAST_SERVER_NUM */
+ YYSYMBOL_VAR_ALLOW_NOTIFY = 293, /* VAR_ALLOW_NOTIFY */
+ YYSYMBOL_VAR_TLS_WIN_CERT = 294, /* VAR_TLS_WIN_CERT */
+ YYSYMBOL_VAR_TCP_CONNECTION_LIMIT = 295, /* VAR_TCP_CONNECTION_LIMIT */
+ YYSYMBOL_VAR_FORWARD_NO_CACHE = 296, /* VAR_FORWARD_NO_CACHE */
+ YYSYMBOL_VAR_STUB_NO_CACHE = 297, /* VAR_STUB_NO_CACHE */
+ YYSYMBOL_VAR_LOG_SERVFAIL = 298, /* VAR_LOG_SERVFAIL */
+ YYSYMBOL_VAR_DENY_ANY = 299, /* VAR_DENY_ANY */
+ YYSYMBOL_VAR_UNKNOWN_SERVER_TIME_LIMIT = 300, /* VAR_UNKNOWN_SERVER_TIME_LIMIT */
+ YYSYMBOL_VAR_LOG_TAG_QUERYREPLY = 301, /* VAR_LOG_TAG_QUERYREPLY */
+ YYSYMBOL_VAR_STREAM_WAIT_SIZE = 302, /* VAR_STREAM_WAIT_SIZE */
+ YYSYMBOL_VAR_TLS_CIPHERS = 303, /* VAR_TLS_CIPHERS */
+ YYSYMBOL_VAR_TLS_CIPHERSUITES = 304, /* VAR_TLS_CIPHERSUITES */
+ YYSYMBOL_VAR_TLS_USE_SNI = 305, /* VAR_TLS_USE_SNI */
+ YYSYMBOL_VAR_IPSET = 306, /* VAR_IPSET */
+ YYSYMBOL_VAR_IPSET_NAME_V4 = 307, /* VAR_IPSET_NAME_V4 */
+ YYSYMBOL_VAR_IPSET_NAME_V6 = 308, /* VAR_IPSET_NAME_V6 */
+ YYSYMBOL_VAR_TLS_SESSION_TICKET_KEYS = 309, /* VAR_TLS_SESSION_TICKET_KEYS */
+ YYSYMBOL_VAR_RPZ = 310, /* VAR_RPZ */
+ YYSYMBOL_VAR_TAGS = 311, /* VAR_TAGS */
+ YYSYMBOL_VAR_RPZ_ACTION_OVERRIDE = 312, /* VAR_RPZ_ACTION_OVERRIDE */
+ YYSYMBOL_VAR_RPZ_CNAME_OVERRIDE = 313, /* VAR_RPZ_CNAME_OVERRIDE */
+ YYSYMBOL_VAR_RPZ_LOG = 314, /* VAR_RPZ_LOG */
+ YYSYMBOL_VAR_RPZ_LOG_NAME = 315, /* VAR_RPZ_LOG_NAME */
+ YYSYMBOL_VAR_DYNLIB = 316, /* VAR_DYNLIB */
+ YYSYMBOL_VAR_DYNLIB_FILE = 317, /* VAR_DYNLIB_FILE */
+ YYSYMBOL_VAR_EDNS_CLIENT_STRING = 318, /* VAR_EDNS_CLIENT_STRING */
+ YYSYMBOL_VAR_EDNS_CLIENT_STRING_OPCODE = 319, /* VAR_EDNS_CLIENT_STRING_OPCODE */
+ YYSYMBOL_VAR_NSID = 320, /* VAR_NSID */
+ YYSYMBOL_VAR_ZONEMD_PERMISSIVE_MODE = 321, /* VAR_ZONEMD_PERMISSIVE_MODE */
+ YYSYMBOL_VAR_ZONEMD_CHECK = 322, /* VAR_ZONEMD_CHECK */
+ YYSYMBOL_VAR_ZONEMD_REJECT_ABSENCE = 323, /* VAR_ZONEMD_REJECT_ABSENCE */
+ YYSYMBOL_VAR_RPZ_SIGNAL_NXDOMAIN_RA = 324, /* VAR_RPZ_SIGNAL_NXDOMAIN_RA */
+ YYSYMBOL_VAR_INTERFACE_AUTOMATIC_PORTS = 325, /* VAR_INTERFACE_AUTOMATIC_PORTS */
+ YYSYMBOL_VAR_EDE = 326, /* VAR_EDE */
+ YYSYMBOL_YYACCEPT = 327, /* $accept */
+ YYSYMBOL_toplevelvars = 328, /* toplevelvars */
+ YYSYMBOL_toplevelvar = 329, /* toplevelvar */
+ YYSYMBOL_force_toplevel = 330, /* force_toplevel */
+ YYSYMBOL_serverstart = 331, /* serverstart */
+ YYSYMBOL_contents_server = 332, /* contents_server */
+ YYSYMBOL_content_server = 333, /* content_server */
+ YYSYMBOL_stubstart = 334, /* stubstart */
+ YYSYMBOL_contents_stub = 335, /* contents_stub */
+ YYSYMBOL_content_stub = 336, /* content_stub */
+ YYSYMBOL_forwardstart = 337, /* forwardstart */
+ YYSYMBOL_contents_forward = 338, /* contents_forward */
+ YYSYMBOL_content_forward = 339, /* content_forward */
+ YYSYMBOL_viewstart = 340, /* viewstart */
+ YYSYMBOL_contents_view = 341, /* contents_view */
+ YYSYMBOL_content_view = 342, /* content_view */
+ YYSYMBOL_authstart = 343, /* authstart */
+ YYSYMBOL_contents_auth = 344, /* contents_auth */
+ YYSYMBOL_content_auth = 345, /* content_auth */
+ YYSYMBOL_rpz_tag = 346, /* rpz_tag */
+ YYSYMBOL_rpz_action_override = 347, /* rpz_action_override */
+ YYSYMBOL_rpz_cname_override = 348, /* rpz_cname_override */
+ YYSYMBOL_rpz_log = 349, /* rpz_log */
+ YYSYMBOL_rpz_log_name = 350, /* rpz_log_name */
+ YYSYMBOL_rpz_signal_nxdomain_ra = 351, /* rpz_signal_nxdomain_ra */
+ YYSYMBOL_rpzstart = 352, /* rpzstart */
+ YYSYMBOL_contents_rpz = 353, /* contents_rpz */
+ YYSYMBOL_content_rpz = 354, /* content_rpz */
+ YYSYMBOL_server_num_threads = 355, /* server_num_threads */
+ YYSYMBOL_server_verbosity = 356, /* server_verbosity */
+ YYSYMBOL_server_statistics_interval = 357, /* server_statistics_interval */
+ YYSYMBOL_server_statistics_cumulative = 358, /* server_statistics_cumulative */
+ YYSYMBOL_server_extended_statistics = 359, /* server_extended_statistics */
+ YYSYMBOL_server_shm_enable = 360, /* server_shm_enable */
+ YYSYMBOL_server_shm_key = 361, /* server_shm_key */
+ YYSYMBOL_server_port = 362, /* server_port */
+ YYSYMBOL_server_send_client_subnet = 363, /* server_send_client_subnet */
+ YYSYMBOL_server_client_subnet_zone = 364, /* server_client_subnet_zone */
+ YYSYMBOL_server_client_subnet_always_forward = 365, /* server_client_subnet_always_forward */
+ YYSYMBOL_server_client_subnet_opcode = 366, /* server_client_subnet_opcode */
+ YYSYMBOL_server_max_client_subnet_ipv4 = 367, /* server_max_client_subnet_ipv4 */
+ YYSYMBOL_server_max_client_subnet_ipv6 = 368, /* server_max_client_subnet_ipv6 */
+ YYSYMBOL_server_min_client_subnet_ipv4 = 369, /* server_min_client_subnet_ipv4 */
+ YYSYMBOL_server_min_client_subnet_ipv6 = 370, /* server_min_client_subnet_ipv6 */
+ YYSYMBOL_server_max_ecs_tree_size_ipv4 = 371, /* server_max_ecs_tree_size_ipv4 */
+ YYSYMBOL_server_max_ecs_tree_size_ipv6 = 372, /* server_max_ecs_tree_size_ipv6 */
+ YYSYMBOL_server_interface = 373, /* server_interface */
+ YYSYMBOL_server_outgoing_interface = 374, /* server_outgoing_interface */
+ YYSYMBOL_server_outgoing_range = 375, /* server_outgoing_range */
+ YYSYMBOL_server_outgoing_port_permit = 376, /* server_outgoing_port_permit */
+ YYSYMBOL_server_outgoing_port_avoid = 377, /* server_outgoing_port_avoid */
+ YYSYMBOL_server_outgoing_num_tcp = 378, /* server_outgoing_num_tcp */
+ YYSYMBOL_server_incoming_num_tcp = 379, /* server_incoming_num_tcp */
+ YYSYMBOL_server_interface_automatic = 380, /* server_interface_automatic */
+ YYSYMBOL_server_interface_automatic_ports = 381, /* server_interface_automatic_ports */
+ YYSYMBOL_server_do_ip4 = 382, /* server_do_ip4 */
+ YYSYMBOL_server_do_ip6 = 383, /* server_do_ip6 */
+ YYSYMBOL_server_do_udp = 384, /* server_do_udp */
+ YYSYMBOL_server_do_tcp = 385, /* server_do_tcp */
+ YYSYMBOL_server_prefer_ip4 = 386, /* server_prefer_ip4 */
+ YYSYMBOL_server_prefer_ip6 = 387, /* server_prefer_ip6 */
+ YYSYMBOL_server_tcp_mss = 388, /* server_tcp_mss */
+ YYSYMBOL_server_outgoing_tcp_mss = 389, /* server_outgoing_tcp_mss */
+ YYSYMBOL_server_tcp_idle_timeout = 390, /* server_tcp_idle_timeout */
+ YYSYMBOL_server_max_reuse_tcp_queries = 391, /* server_max_reuse_tcp_queries */
+ YYSYMBOL_server_tcp_reuse_timeout = 392, /* server_tcp_reuse_timeout */
+ YYSYMBOL_server_tcp_auth_query_timeout = 393, /* server_tcp_auth_query_timeout */
+ YYSYMBOL_server_tcp_keepalive = 394, /* server_tcp_keepalive */
+ YYSYMBOL_server_tcp_keepalive_timeout = 395, /* server_tcp_keepalive_timeout */
+ YYSYMBOL_server_tcp_upstream = 396, /* server_tcp_upstream */
+ YYSYMBOL_server_udp_upstream_without_downstream = 397, /* server_udp_upstream_without_downstream */
+ YYSYMBOL_server_ssl_upstream = 398, /* server_ssl_upstream */
+ YYSYMBOL_server_ssl_service_key = 399, /* server_ssl_service_key */
+ YYSYMBOL_server_ssl_service_pem = 400, /* server_ssl_service_pem */
+ YYSYMBOL_server_ssl_port = 401, /* server_ssl_port */
+ YYSYMBOL_server_tls_cert_bundle = 402, /* server_tls_cert_bundle */
+ YYSYMBOL_server_tls_win_cert = 403, /* server_tls_win_cert */
+ YYSYMBOL_server_tls_additional_port = 404, /* server_tls_additional_port */
+ YYSYMBOL_server_tls_ciphers = 405, /* server_tls_ciphers */
+ YYSYMBOL_server_tls_ciphersuites = 406, /* server_tls_ciphersuites */
+ YYSYMBOL_server_tls_session_ticket_keys = 407, /* server_tls_session_ticket_keys */
+ YYSYMBOL_server_tls_use_sni = 408, /* server_tls_use_sni */
+ YYSYMBOL_server_https_port = 409, /* server_https_port */
+ YYSYMBOL_server_http_endpoint = 410, /* server_http_endpoint */
+ YYSYMBOL_server_http_max_streams = 411, /* server_http_max_streams */
+ YYSYMBOL_server_http_query_buffer_size = 412, /* server_http_query_buffer_size */
+ YYSYMBOL_server_http_response_buffer_size = 413, /* server_http_response_buffer_size */
+ YYSYMBOL_server_http_nodelay = 414, /* server_http_nodelay */
+ YYSYMBOL_server_http_notls_downstream = 415, /* server_http_notls_downstream */
+ YYSYMBOL_server_use_systemd = 416, /* server_use_systemd */
+ YYSYMBOL_server_do_daemonize = 417, /* server_do_daemonize */
+ YYSYMBOL_server_use_syslog = 418, /* server_use_syslog */
+ YYSYMBOL_server_log_time_ascii = 419, /* server_log_time_ascii */
+ YYSYMBOL_server_log_queries = 420, /* server_log_queries */
+ YYSYMBOL_server_log_replies = 421, /* server_log_replies */
+ YYSYMBOL_server_log_tag_queryreply = 422, /* server_log_tag_queryreply */
+ YYSYMBOL_server_log_servfail = 423, /* server_log_servfail */
+ YYSYMBOL_server_log_local_actions = 424, /* server_log_local_actions */
+ YYSYMBOL_server_chroot = 425, /* server_chroot */
+ YYSYMBOL_server_username = 426, /* server_username */
+ YYSYMBOL_server_directory = 427, /* server_directory */
+ YYSYMBOL_server_logfile = 428, /* server_logfile */
+ YYSYMBOL_server_pidfile = 429, /* server_pidfile */
+ YYSYMBOL_server_root_hints = 430, /* server_root_hints */
+ YYSYMBOL_server_dlv_anchor_file = 431, /* server_dlv_anchor_file */
+ YYSYMBOL_server_dlv_anchor = 432, /* server_dlv_anchor */
+ YYSYMBOL_server_auto_trust_anchor_file = 433, /* server_auto_trust_anchor_file */
+ YYSYMBOL_server_trust_anchor_file = 434, /* server_trust_anchor_file */
+ YYSYMBOL_server_trusted_keys_file = 435, /* server_trusted_keys_file */
+ YYSYMBOL_server_trust_anchor = 436, /* server_trust_anchor */
+ YYSYMBOL_server_trust_anchor_signaling = 437, /* server_trust_anchor_signaling */
+ YYSYMBOL_server_root_key_sentinel = 438, /* server_root_key_sentinel */
+ YYSYMBOL_server_domain_insecure = 439, /* server_domain_insecure */
+ YYSYMBOL_server_hide_identity = 440, /* server_hide_identity */
+ YYSYMBOL_server_hide_version = 441, /* server_hide_version */
+ YYSYMBOL_server_hide_trustanchor = 442, /* server_hide_trustanchor */
+ YYSYMBOL_server_hide_http_user_agent = 443, /* server_hide_http_user_agent */
+ YYSYMBOL_server_identity = 444, /* server_identity */
+ YYSYMBOL_server_version = 445, /* server_version */
+ YYSYMBOL_server_http_user_agent = 446, /* server_http_user_agent */
+ YYSYMBOL_server_nsid = 447, /* server_nsid */
+ YYSYMBOL_server_so_rcvbuf = 448, /* server_so_rcvbuf */
+ YYSYMBOL_server_so_sndbuf = 449, /* server_so_sndbuf */
+ YYSYMBOL_server_so_reuseport = 450, /* server_so_reuseport */
+ YYSYMBOL_server_ip_transparent = 451, /* server_ip_transparent */
+ YYSYMBOL_server_ip_freebind = 452, /* server_ip_freebind */
+ YYSYMBOL_server_ip_dscp = 453, /* server_ip_dscp */
+ YYSYMBOL_server_stream_wait_size = 454, /* server_stream_wait_size */
+ YYSYMBOL_server_edns_buffer_size = 455, /* server_edns_buffer_size */
+ YYSYMBOL_server_msg_buffer_size = 456, /* server_msg_buffer_size */
+ YYSYMBOL_server_msg_cache_size = 457, /* server_msg_cache_size */
+ YYSYMBOL_server_msg_cache_slabs = 458, /* server_msg_cache_slabs */
+ YYSYMBOL_server_num_queries_per_thread = 459, /* server_num_queries_per_thread */
+ YYSYMBOL_server_jostle_timeout = 460, /* server_jostle_timeout */
+ YYSYMBOL_server_delay_close = 461, /* server_delay_close */
+ YYSYMBOL_server_udp_connect = 462, /* server_udp_connect */
+ YYSYMBOL_server_unblock_lan_zones = 463, /* server_unblock_lan_zones */
+ YYSYMBOL_server_insecure_lan_zones = 464, /* server_insecure_lan_zones */
+ YYSYMBOL_server_rrset_cache_size = 465, /* server_rrset_cache_size */
+ YYSYMBOL_server_rrset_cache_slabs = 466, /* server_rrset_cache_slabs */
+ YYSYMBOL_server_infra_host_ttl = 467, /* server_infra_host_ttl */
+ YYSYMBOL_server_infra_lame_ttl = 468, /* server_infra_lame_ttl */
+ YYSYMBOL_server_infra_cache_numhosts = 469, /* server_infra_cache_numhosts */
+ YYSYMBOL_server_infra_cache_lame_size = 470, /* server_infra_cache_lame_size */
+ YYSYMBOL_server_infra_cache_slabs = 471, /* server_infra_cache_slabs */
+ YYSYMBOL_server_infra_cache_min_rtt = 472, /* server_infra_cache_min_rtt */
+ YYSYMBOL_server_infra_keep_probing = 473, /* server_infra_keep_probing */
+ YYSYMBOL_server_target_fetch_policy = 474, /* server_target_fetch_policy */
+ YYSYMBOL_server_harden_short_bufsize = 475, /* server_harden_short_bufsize */
+ YYSYMBOL_server_harden_large_queries = 476, /* server_harden_large_queries */
+ YYSYMBOL_server_harden_glue = 477, /* server_harden_glue */
+ YYSYMBOL_server_harden_dnssec_stripped = 478, /* server_harden_dnssec_stripped */
+ YYSYMBOL_server_harden_below_nxdomain = 479, /* server_harden_below_nxdomain */
+ YYSYMBOL_server_harden_referral_path = 480, /* server_harden_referral_path */
+ YYSYMBOL_server_harden_algo_downgrade = 481, /* server_harden_algo_downgrade */
+ YYSYMBOL_server_use_caps_for_id = 482, /* server_use_caps_for_id */
+ YYSYMBOL_server_caps_whitelist = 483, /* server_caps_whitelist */
+ YYSYMBOL_server_private_address = 484, /* server_private_address */
+ YYSYMBOL_server_private_domain = 485, /* server_private_domain */
+ YYSYMBOL_server_prefetch = 486, /* server_prefetch */
+ YYSYMBOL_server_prefetch_key = 487, /* server_prefetch_key */
+ YYSYMBOL_server_deny_any = 488, /* server_deny_any */
+ YYSYMBOL_server_unwanted_reply_threshold = 489, /* server_unwanted_reply_threshold */
+ YYSYMBOL_server_do_not_query_address = 490, /* server_do_not_query_address */
+ YYSYMBOL_server_do_not_query_localhost = 491, /* server_do_not_query_localhost */
+ YYSYMBOL_server_access_control = 492, /* server_access_control */
+ YYSYMBOL_server_module_conf = 493, /* server_module_conf */
+ YYSYMBOL_server_val_override_date = 494, /* server_val_override_date */
+ YYSYMBOL_server_val_sig_skew_min = 495, /* server_val_sig_skew_min */
+ YYSYMBOL_server_val_sig_skew_max = 496, /* server_val_sig_skew_max */
+ YYSYMBOL_server_val_max_restart = 497, /* server_val_max_restart */
+ YYSYMBOL_server_cache_max_ttl = 498, /* server_cache_max_ttl */
+ YYSYMBOL_server_cache_max_negative_ttl = 499, /* server_cache_max_negative_ttl */
+ YYSYMBOL_server_cache_min_ttl = 500, /* server_cache_min_ttl */
+ YYSYMBOL_server_bogus_ttl = 501, /* server_bogus_ttl */
+ YYSYMBOL_server_val_clean_additional = 502, /* server_val_clean_additional */
+ YYSYMBOL_server_val_permissive_mode = 503, /* server_val_permissive_mode */
+ YYSYMBOL_server_aggressive_nsec = 504, /* server_aggressive_nsec */
+ YYSYMBOL_server_ignore_cd_flag = 505, /* server_ignore_cd_flag */
+ YYSYMBOL_server_serve_expired = 506, /* server_serve_expired */
+ YYSYMBOL_server_serve_expired_ttl = 507, /* server_serve_expired_ttl */
+ YYSYMBOL_server_serve_expired_ttl_reset = 508, /* server_serve_expired_ttl_reset */
+ YYSYMBOL_server_serve_expired_reply_ttl = 509, /* server_serve_expired_reply_ttl */
+ YYSYMBOL_server_serve_expired_client_timeout = 510, /* server_serve_expired_client_timeout */
+ YYSYMBOL_server_ede_serve_expired = 511, /* server_ede_serve_expired */
+ YYSYMBOL_server_serve_original_ttl = 512, /* server_serve_original_ttl */
+ YYSYMBOL_server_fake_dsa = 513, /* server_fake_dsa */
+ YYSYMBOL_server_fake_sha1 = 514, /* server_fake_sha1 */
+ YYSYMBOL_server_val_log_level = 515, /* server_val_log_level */
+ YYSYMBOL_server_val_nsec3_keysize_iterations = 516, /* server_val_nsec3_keysize_iterations */
+ YYSYMBOL_server_zonemd_permissive_mode = 517, /* server_zonemd_permissive_mode */
+ YYSYMBOL_server_add_holddown = 518, /* server_add_holddown */
+ YYSYMBOL_server_del_holddown = 519, /* server_del_holddown */
+ YYSYMBOL_server_keep_missing = 520, /* server_keep_missing */
+ YYSYMBOL_server_permit_small_holddown = 521, /* server_permit_small_holddown */
+ YYSYMBOL_server_key_cache_size = 522, /* server_key_cache_size */
+ YYSYMBOL_server_key_cache_slabs = 523, /* server_key_cache_slabs */
+ YYSYMBOL_server_neg_cache_size = 524, /* server_neg_cache_size */
+ YYSYMBOL_server_local_zone = 525, /* server_local_zone */
+ YYSYMBOL_server_local_data = 526, /* server_local_data */
+ YYSYMBOL_server_local_data_ptr = 527, /* server_local_data_ptr */
+ YYSYMBOL_server_minimal_responses = 528, /* server_minimal_responses */
+ YYSYMBOL_server_rrset_roundrobin = 529, /* server_rrset_roundrobin */
+ YYSYMBOL_server_unknown_server_time_limit = 530, /* server_unknown_server_time_limit */
+ YYSYMBOL_server_max_udp_size = 531, /* server_max_udp_size */
+ YYSYMBOL_server_dns64_prefix = 532, /* server_dns64_prefix */
+ YYSYMBOL_server_dns64_synthall = 533, /* server_dns64_synthall */
+ YYSYMBOL_server_dns64_ignore_aaaa = 534, /* server_dns64_ignore_aaaa */
+ YYSYMBOL_server_define_tag = 535, /* server_define_tag */
+ YYSYMBOL_server_local_zone_tag = 536, /* server_local_zone_tag */
+ YYSYMBOL_server_access_control_tag = 537, /* server_access_control_tag */
+ YYSYMBOL_server_access_control_tag_action = 538, /* server_access_control_tag_action */
+ YYSYMBOL_server_access_control_tag_data = 539, /* server_access_control_tag_data */
+ YYSYMBOL_server_local_zone_override = 540, /* server_local_zone_override */
+ YYSYMBOL_server_access_control_view = 541, /* server_access_control_view */
+ YYSYMBOL_server_response_ip_tag = 542, /* server_response_ip_tag */
+ YYSYMBOL_server_ip_ratelimit = 543, /* server_ip_ratelimit */
+ YYSYMBOL_server_ratelimit = 544, /* server_ratelimit */
+ YYSYMBOL_server_ip_ratelimit_size = 545, /* server_ip_ratelimit_size */
+ YYSYMBOL_server_ratelimit_size = 546, /* server_ratelimit_size */
+ YYSYMBOL_server_ip_ratelimit_slabs = 547, /* server_ip_ratelimit_slabs */
+ YYSYMBOL_server_ratelimit_slabs = 548, /* server_ratelimit_slabs */
+ YYSYMBOL_server_ratelimit_for_domain = 549, /* server_ratelimit_for_domain */
+ YYSYMBOL_server_ratelimit_below_domain = 550, /* server_ratelimit_below_domain */
+ YYSYMBOL_server_ip_ratelimit_factor = 551, /* server_ip_ratelimit_factor */
+ YYSYMBOL_server_ratelimit_factor = 552, /* server_ratelimit_factor */
+ YYSYMBOL_server_ip_ratelimit_backoff = 553, /* server_ip_ratelimit_backoff */
+ YYSYMBOL_server_ratelimit_backoff = 554, /* server_ratelimit_backoff */
+ YYSYMBOL_server_outbound_msg_retry = 555, /* server_outbound_msg_retry */
+ YYSYMBOL_server_low_rtt = 556, /* server_low_rtt */
+ YYSYMBOL_server_fast_server_num = 557, /* server_fast_server_num */
+ YYSYMBOL_server_fast_server_permil = 558, /* server_fast_server_permil */
+ YYSYMBOL_server_qname_minimisation = 559, /* server_qname_minimisation */
+ YYSYMBOL_server_qname_minimisation_strict = 560, /* server_qname_minimisation_strict */
+ YYSYMBOL_server_pad_responses = 561, /* server_pad_responses */
+ YYSYMBOL_server_pad_responses_block_size = 562, /* server_pad_responses_block_size */
+ YYSYMBOL_server_pad_queries = 563, /* server_pad_queries */
+ YYSYMBOL_server_pad_queries_block_size = 564, /* server_pad_queries_block_size */
+ YYSYMBOL_server_ipsecmod_enabled = 565, /* server_ipsecmod_enabled */
+ YYSYMBOL_server_ipsecmod_ignore_bogus = 566, /* server_ipsecmod_ignore_bogus */
+ YYSYMBOL_server_ipsecmod_hook = 567, /* server_ipsecmod_hook */
+ YYSYMBOL_server_ipsecmod_max_ttl = 568, /* server_ipsecmod_max_ttl */
+ YYSYMBOL_server_ipsecmod_whitelist = 569, /* server_ipsecmod_whitelist */
+ YYSYMBOL_server_ipsecmod_strict = 570, /* server_ipsecmod_strict */
+ YYSYMBOL_server_edns_client_string = 571, /* server_edns_client_string */
+ YYSYMBOL_server_edns_client_string_opcode = 572, /* server_edns_client_string_opcode */
+ YYSYMBOL_server_ede = 573, /* server_ede */
+ YYSYMBOL_stub_name = 574, /* stub_name */
+ YYSYMBOL_stub_host = 575, /* stub_host */
+ YYSYMBOL_stub_addr = 576, /* stub_addr */
+ YYSYMBOL_stub_first = 577, /* stub_first */
+ YYSYMBOL_stub_no_cache = 578, /* stub_no_cache */
+ YYSYMBOL_stub_ssl_upstream = 579, /* stub_ssl_upstream */
+ YYSYMBOL_stub_tcp_upstream = 580, /* stub_tcp_upstream */
+ YYSYMBOL_stub_prime = 581, /* stub_prime */
+ YYSYMBOL_forward_name = 582, /* forward_name */
+ YYSYMBOL_forward_host = 583, /* forward_host */
+ YYSYMBOL_forward_addr = 584, /* forward_addr */
+ YYSYMBOL_forward_first = 585, /* forward_first */
+ YYSYMBOL_forward_no_cache = 586, /* forward_no_cache */
+ YYSYMBOL_forward_ssl_upstream = 587, /* forward_ssl_upstream */
+ YYSYMBOL_forward_tcp_upstream = 588, /* forward_tcp_upstream */
+ YYSYMBOL_auth_name = 589, /* auth_name */
+ YYSYMBOL_auth_zonefile = 590, /* auth_zonefile */
+ YYSYMBOL_auth_master = 591, /* auth_master */
+ YYSYMBOL_auth_url = 592, /* auth_url */
+ YYSYMBOL_auth_allow_notify = 593, /* auth_allow_notify */
+ YYSYMBOL_auth_zonemd_check = 594, /* auth_zonemd_check */
+ YYSYMBOL_auth_zonemd_reject_absence = 595, /* auth_zonemd_reject_absence */
+ YYSYMBOL_auth_for_downstream = 596, /* auth_for_downstream */
+ YYSYMBOL_auth_for_upstream = 597, /* auth_for_upstream */
+ YYSYMBOL_auth_fallback_enabled = 598, /* auth_fallback_enabled */
+ YYSYMBOL_view_name = 599, /* view_name */
+ YYSYMBOL_view_local_zone = 600, /* view_local_zone */
+ YYSYMBOL_view_response_ip = 601, /* view_response_ip */
+ YYSYMBOL_view_response_ip_data = 602, /* view_response_ip_data */
+ YYSYMBOL_view_local_data = 603, /* view_local_data */
+ YYSYMBOL_view_local_data_ptr = 604, /* view_local_data_ptr */
+ YYSYMBOL_view_first = 605, /* view_first */
+ YYSYMBOL_rcstart = 606, /* rcstart */
+ YYSYMBOL_contents_rc = 607, /* contents_rc */
+ YYSYMBOL_content_rc = 608, /* content_rc */
+ YYSYMBOL_rc_control_enable = 609, /* rc_control_enable */
+ YYSYMBOL_rc_control_port = 610, /* rc_control_port */
+ YYSYMBOL_rc_control_interface = 611, /* rc_control_interface */
+ YYSYMBOL_rc_control_use_cert = 612, /* rc_control_use_cert */
+ YYSYMBOL_rc_server_key_file = 613, /* rc_server_key_file */
+ YYSYMBOL_rc_server_cert_file = 614, /* rc_server_cert_file */
+ YYSYMBOL_rc_control_key_file = 615, /* rc_control_key_file */
+ YYSYMBOL_rc_control_cert_file = 616, /* rc_control_cert_file */
+ YYSYMBOL_dtstart = 617, /* dtstart */
+ YYSYMBOL_contents_dt = 618, /* contents_dt */
+ YYSYMBOL_content_dt = 619, /* content_dt */
+ YYSYMBOL_dt_dnstap_enable = 620, /* dt_dnstap_enable */
+ YYSYMBOL_dt_dnstap_bidirectional = 621, /* dt_dnstap_bidirectional */
+ YYSYMBOL_dt_dnstap_socket_path = 622, /* dt_dnstap_socket_path */
+ YYSYMBOL_dt_dnstap_ip = 623, /* dt_dnstap_ip */
+ YYSYMBOL_dt_dnstap_tls = 624, /* dt_dnstap_tls */
+ YYSYMBOL_dt_dnstap_tls_server_name = 625, /* dt_dnstap_tls_server_name */
+ YYSYMBOL_dt_dnstap_tls_cert_bundle = 626, /* dt_dnstap_tls_cert_bundle */
+ YYSYMBOL_dt_dnstap_tls_client_key_file = 627, /* dt_dnstap_tls_client_key_file */
+ YYSYMBOL_dt_dnstap_tls_client_cert_file = 628, /* dt_dnstap_tls_client_cert_file */
+ YYSYMBOL_dt_dnstap_send_identity = 629, /* dt_dnstap_send_identity */
+ YYSYMBOL_dt_dnstap_send_version = 630, /* dt_dnstap_send_version */
+ YYSYMBOL_dt_dnstap_identity = 631, /* dt_dnstap_identity */
+ YYSYMBOL_dt_dnstap_version = 632, /* dt_dnstap_version */
+ YYSYMBOL_dt_dnstap_log_resolver_query_messages = 633, /* dt_dnstap_log_resolver_query_messages */
+ YYSYMBOL_dt_dnstap_log_resolver_response_messages = 634, /* dt_dnstap_log_resolver_response_messages */
+ YYSYMBOL_dt_dnstap_log_client_query_messages = 635, /* dt_dnstap_log_client_query_messages */
+ YYSYMBOL_dt_dnstap_log_client_response_messages = 636, /* dt_dnstap_log_client_response_messages */
+ YYSYMBOL_dt_dnstap_log_forwarder_query_messages = 637, /* dt_dnstap_log_forwarder_query_messages */
+ YYSYMBOL_dt_dnstap_log_forwarder_response_messages = 638, /* dt_dnstap_log_forwarder_response_messages */
+ YYSYMBOL_pythonstart = 639, /* pythonstart */
+ YYSYMBOL_contents_py = 640, /* contents_py */
+ YYSYMBOL_content_py = 641, /* content_py */
+ YYSYMBOL_py_script = 642, /* py_script */
+ YYSYMBOL_dynlibstart = 643, /* dynlibstart */
+ YYSYMBOL_contents_dl = 644, /* contents_dl */
+ YYSYMBOL_content_dl = 645, /* content_dl */
+ YYSYMBOL_dl_file = 646, /* dl_file */
+ YYSYMBOL_server_disable_dnssec_lame_check = 647, /* server_disable_dnssec_lame_check */
+ YYSYMBOL_server_log_identity = 648, /* server_log_identity */
+ YYSYMBOL_server_response_ip = 649, /* server_response_ip */
+ YYSYMBOL_server_response_ip_data = 650, /* server_response_ip_data */
+ YYSYMBOL_dnscstart = 651, /* dnscstart */
+ YYSYMBOL_contents_dnsc = 652, /* contents_dnsc */
+ YYSYMBOL_content_dnsc = 653, /* content_dnsc */
+ YYSYMBOL_dnsc_dnscrypt_enable = 654, /* dnsc_dnscrypt_enable */
+ YYSYMBOL_dnsc_dnscrypt_port = 655, /* dnsc_dnscrypt_port */
+ YYSYMBOL_dnsc_dnscrypt_provider = 656, /* dnsc_dnscrypt_provider */
+ YYSYMBOL_dnsc_dnscrypt_provider_cert = 657, /* dnsc_dnscrypt_provider_cert */
+ YYSYMBOL_dnsc_dnscrypt_provider_cert_rotated = 658, /* dnsc_dnscrypt_provider_cert_rotated */
+ YYSYMBOL_dnsc_dnscrypt_secret_key = 659, /* dnsc_dnscrypt_secret_key */
+ YYSYMBOL_dnsc_dnscrypt_shared_secret_cache_size = 660, /* dnsc_dnscrypt_shared_secret_cache_size */
+ YYSYMBOL_dnsc_dnscrypt_shared_secret_cache_slabs = 661, /* dnsc_dnscrypt_shared_secret_cache_slabs */
+ YYSYMBOL_dnsc_dnscrypt_nonce_cache_size = 662, /* dnsc_dnscrypt_nonce_cache_size */
+ YYSYMBOL_dnsc_dnscrypt_nonce_cache_slabs = 663, /* dnsc_dnscrypt_nonce_cache_slabs */
+ YYSYMBOL_cachedbstart = 664, /* cachedbstart */
+ YYSYMBOL_contents_cachedb = 665, /* contents_cachedb */
+ YYSYMBOL_content_cachedb = 666, /* content_cachedb */
+ YYSYMBOL_cachedb_backend_name = 667, /* cachedb_backend_name */
+ YYSYMBOL_cachedb_secret_seed = 668, /* cachedb_secret_seed */
+ YYSYMBOL_redis_server_host = 669, /* redis_server_host */
+ YYSYMBOL_redis_server_port = 670, /* redis_server_port */
+ YYSYMBOL_redis_timeout = 671, /* redis_timeout */
+ YYSYMBOL_redis_expire_records = 672, /* redis_expire_records */
+ YYSYMBOL_server_tcp_connection_limit = 673, /* server_tcp_connection_limit */
+ YYSYMBOL_ipsetstart = 674, /* ipsetstart */
+ YYSYMBOL_contents_ipset = 675, /* contents_ipset */
+ YYSYMBOL_content_ipset = 676, /* content_ipset */
+ YYSYMBOL_ipset_name_v4 = 677, /* ipset_name_v4 */
+ YYSYMBOL_ipset_name_v6 = 678 /* ipset_name_v6 */
};
typedef enum yysymbol_kind_t yysymbol_kind_t;
@@ -1532,6 +846,18 @@ typedef int_least16_t yytype_int16;
typedef short yytype_int16;
#endif
+/* Work around bug in HP-UX 11.23, which defines these macros
+ incorrectly for preprocessor constants. This workaround can likely
+ be removed in 2023, as HPE has promised support for HP-UX 11.23
+ (aka HP-UX 11i v2) only through the end of 2022; see Table 2 of
+ <https://h20195.www2.hpe.com/V2/getpdf.aspx/4AA4-7673ENW.pdf>. */
+#ifdef __hpux
+# undef UINT_LEAST8_MAX
+# undef UINT_LEAST16_MAX
+# define UINT_LEAST8_MAX 255
+# define UINT_LEAST16_MAX 65535
+#endif
+
#if defined __UINT_LEAST8_MAX__ && __UINT_LEAST8_MAX__ <= __INT_MAX__
typedef __UINT_LEAST8_TYPE__ yytype_uint8;
#elif (!defined __UINT_LEAST8_MAX__ && defined YY_STDINT_H \
@@ -1629,9 +955,9 @@ typedef int yy_state_fast_t;
/* Suppress unused-variable warnings by "using" E. */
#if ! defined lint || defined __GNUC__
-# define YYUSE(E) ((void) (E))
+# define YY_USE(E) ((void) (E))
#else
-# define YYUSE(E) /* empty */
+# define YY_USE(E) /* empty */
#endif
#if defined __GNUC__ && ! defined __ICC && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
@@ -1798,18 +1124,19 @@ union yyalloc
/* YYFINAL -- State number of the termination state. */
#define YYFINAL 2
/* YYLAST -- Last index in YYTABLE. */
-#define YYLAST 687
+#define YYLAST 693
/* YYNTOKENS -- Number of terminals. */
-#define YYNTOKENS 324
+#define YYNTOKENS 327
/* YYNNTS -- Number of nonterminals. */
-#define YYNNTS 349
+#define YYNNTS 352
/* YYNRULES -- Number of rules. */
-#define YYNRULES 675
+#define YYNRULES 681
/* YYNSTATES -- Number of states. */
-#define YYNSTATES 1003
+#define YYNSTATES 1012
-#define YYMAXUTOK 578
+/* YYMAXUTOK -- Last valid token kind. */
+#define YYMAXUTOK 581
/* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM
@@ -1880,81 +1207,83 @@ static const yytype_int16 yytranslate[] =
285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
295, 296, 297, 298, 299, 300, 301, 302, 303, 304,
305, 306, 307, 308, 309, 310, 311, 312, 313, 314,
- 315, 316, 317, 318, 319, 320, 321, 322, 323
+ 315, 316, 317, 318, 319, 320, 321, 322, 323, 324,
+ 325, 326
};
#if YYDEBUG
/* YYRLINE[YYN] -- Source line where rule number YYN was defined. */
static const yytype_int16 yyrline[] =
{
- 0, 194, 194, 194, 195, 195, 196, 196, 197, 197,
- 197, 198, 198, 199, 199, 200, 200, 201, 203, 209,
- 214, 215, 216, 216, 216, 217, 217, 218, 218, 218,
- 219, 219, 220, 220, 220, 221, 221, 222, 222, 222,
- 223, 223, 223, 224, 224, 225, 225, 226, 226, 227,
- 227, 228, 228, 229, 229, 230, 230, 231, 231, 232,
- 232, 232, 233, 233, 234, 234, 234, 235, 235, 235,
- 236, 236, 237, 237, 238, 238, 239, 239, 240, 240,
- 240, 241, 241, 242, 242, 243, 243, 243, 244, 244,
- 245, 245, 246, 246, 247, 247, 247, 248, 248, 249,
- 249, 250, 250, 251, 251, 252, 252, 253, 253, 254,
- 254, 255, 255, 256, 256, 256, 257, 257, 257, 258,
- 258, 258, 259, 259, 259, 259, 260, 261, 261, 261,
- 262, 262, 262, 263, 263, 264, 264, 265, 265, 265,
- 266, 266, 266, 267, 267, 268, 268, 268, 269, 269,
- 270, 270, 270, 271, 271, 272, 272, 273, 273, 274,
- 275, 275, 276, 276, 277, 277, 278, 278, 279, 279,
- 280, 280, 281, 281, 282, 282, 283, 283, 284, 284,
- 285, 285, 285, 286, 286, 287, 287, 288, 288, 289,
- 290, 290, 291, 291, 292, 293, 293, 294, 294, 295,
- 295, 296, 296, 297, 297, 297, 298, 298, 298, 299,
- 299, 300, 301, 301, 302, 302, 303, 303, 304, 304,
- 305, 305, 305, 306, 306, 306, 307, 307, 307, 308,
- 308, 309, 309, 310, 310, 311, 311, 312, 312, 313,
- 313, 314, 314, 317, 330, 331, 332, 332, 332, 332,
- 332, 333, 333, 333, 335, 348, 349, 350, 350, 350,
- 350, 351, 351, 351, 353, 368, 369, 370, 370, 370,
- 370, 371, 371, 371, 373, 393, 394, 395, 395, 395,
- 395, 396, 396, 396, 397, 397, 397, 400, 419, 436,
- 444, 454, 461, 471, 489, 490, 491, 491, 491, 491,
- 491, 492, 492, 492, 493, 493, 493, 493, 495, 504,
- 513, 524, 533, 542, 551, 562, 571, 583, 597, 612,
- 623, 640, 657, 674, 691, 706, 721, 734, 749, 758,
- 767, 776, 785, 794, 803, 812, 821, 830, 839, 848,
- 857, 866, 875, 888, 899, 910, 921, 930, 943, 952,
- 961, 970, 977, 984, 993, 1000, 1009, 1017, 1024, 1031,
- 1039, 1048, 1056, 1072, 1080, 1088, 1096, 1104, 1112, 1121,
- 1130, 1144, 1153, 1162, 1171, 1180, 1189, 1198, 1205, 1212,
- 1238, 1246, 1253, 1260, 1267, 1274, 1282, 1290, 1298, 1305,
- 1316, 1327, 1334, 1343, 1352, 1361, 1370, 1377, 1384, 1391,
- 1407, 1415, 1423, 1433, 1443, 1453, 1467, 1475, 1488, 1499,
- 1507, 1520, 1529, 1538, 1547, 1556, 1566, 1576, 1584, 1597,
- 1606, 1614, 1623, 1631, 1644, 1653, 1663, 1670, 1680, 1690,
- 1700, 1710, 1720, 1730, 1740, 1750, 1757, 1764, 1771, 1780,
- 1789, 1798, 1807, 1814, 1824, 1844, 1851, 1869, 1882, 1895,
- 1908, 1917, 1926, 1935, 1944, 1954, 1964, 1975, 1984, 1993,
- 2002, 2011, 2020, 2029, 2038, 2051, 2064, 2073, 2080, 2089,
- 2098, 2107, 2116, 2125, 2133, 2146, 2154, 2199, 2206, 2221,
- 2231, 2241, 2248, 2255, 2262, 2271, 2279, 2293, 2314, 2335,
- 2347, 2359, 2371, 2380, 2401, 2410, 2419, 2427, 2435, 2448,
- 2461, 2476, 2491, 2500, 2509, 2519, 2529, 2538, 2544, 2553,
- 2562, 2572, 2582, 2592, 2601, 2611, 2620, 2633, 2646, 2658,
- 2672, 2684, 2698, 2707, 2719, 2729, 2736, 2743, 2752, 2761,
- 2771, 2781, 2791, 2801, 2808, 2815, 2824, 2833, 2843, 2853,
- 2863, 2870, 2877, 2884, 2892, 2902, 2912, 2922, 2932, 2942,
- 2952, 2998, 3008, 3016, 3024, 3039, 3048, 3053, 3054, 3055,
- 3055, 3055, 3056, 3056, 3056, 3057, 3057, 3059, 3069, 3078,
- 3085, 3092, 3099, 3106, 3113, 3120, 3125, 3126, 3127, 3127,
- 3127, 3128, 3128, 3128, 3129, 3130, 3130, 3131, 3131, 3132,
- 3132, 3133, 3134, 3135, 3136, 3137, 3138, 3140, 3149, 3159,
- 3166, 3173, 3182, 3189, 3196, 3203, 3210, 3219, 3228, 3235,
- 3242, 3252, 3262, 3272, 3282, 3292, 3302, 3307, 3308, 3309,
- 3311, 3317, 3322, 3323, 3324, 3326, 3332, 3342, 3349, 3358,
- 3366, 3371, 3372, 3374, 3374, 3374, 3375, 3375, 3376, 3377,
- 3378, 3379, 3380, 3382, 3392, 3401, 3408, 3417, 3424, 3433,
- 3441, 3454, 3462, 3475, 3480, 3481, 3482, 3482, 3483, 3483,
- 3483, 3484, 3486, 3498, 3510, 3522, 3537, 3550, 3563, 3574,
- 3579, 3580, 3581, 3581, 3583, 3598
+ 0, 195, 195, 195, 196, 196, 197, 197, 198, 198,
+ 198, 199, 199, 200, 200, 201, 201, 202, 204, 210,
+ 215, 216, 217, 217, 217, 218, 218, 219, 219, 219,
+ 220, 220, 221, 221, 221, 222, 222, 223, 223, 223,
+ 224, 224, 224, 225, 225, 226, 226, 227, 227, 228,
+ 228, 229, 229, 230, 230, 231, 231, 232, 232, 233,
+ 233, 233, 234, 234, 235, 235, 235, 236, 236, 236,
+ 237, 237, 238, 238, 239, 239, 240, 240, 241, 241,
+ 241, 242, 242, 243, 243, 244, 244, 244, 245, 245,
+ 246, 246, 247, 247, 248, 248, 248, 249, 249, 250,
+ 250, 251, 251, 252, 252, 253, 253, 254, 254, 255,
+ 255, 256, 256, 257, 257, 257, 258, 258, 258, 259,
+ 259, 259, 260, 260, 260, 260, 261, 262, 262, 262,
+ 263, 263, 263, 264, 264, 265, 265, 266, 266, 266,
+ 267, 267, 267, 268, 268, 269, 269, 269, 270, 270,
+ 271, 271, 271, 272, 272, 273, 273, 274, 274, 275,
+ 276, 276, 277, 277, 278, 278, 279, 279, 280, 280,
+ 281, 281, 282, 282, 283, 283, 284, 284, 285, 285,
+ 286, 286, 286, 287, 287, 288, 288, 289, 289, 290,
+ 291, 291, 292, 292, 293, 294, 294, 295, 295, 296,
+ 296, 296, 297, 297, 298, 298, 298, 299, 299, 299,
+ 300, 300, 301, 302, 302, 303, 303, 304, 304, 305,
+ 305, 306, 306, 306, 307, 307, 307, 308, 308, 308,
+ 309, 309, 310, 310, 311, 311, 312, 312, 313, 313,
+ 314, 314, 315, 315, 316, 316, 319, 332, 333, 334,
+ 334, 334, 334, 334, 335, 335, 335, 337, 350, 351,
+ 352, 352, 352, 352, 353, 353, 353, 355, 370, 371,
+ 372, 372, 372, 372, 373, 373, 373, 375, 395, 396,
+ 397, 397, 397, 397, 398, 398, 398, 399, 399, 399,
+ 402, 421, 438, 446, 456, 463, 473, 491, 492, 493,
+ 493, 493, 493, 493, 494, 494, 494, 495, 495, 495,
+ 495, 497, 506, 515, 526, 535, 544, 553, 564, 573,
+ 585, 599, 614, 625, 642, 659, 676, 693, 708, 723,
+ 736, 751, 760, 769, 778, 787, 796, 805, 812, 821,
+ 830, 839, 848, 857, 866, 875, 884, 897, 908, 919,
+ 930, 939, 952, 961, 970, 979, 986, 993, 1002, 1009,
+ 1018, 1026, 1033, 1040, 1048, 1057, 1065, 1081, 1089, 1097,
+ 1105, 1113, 1121, 1130, 1139, 1153, 1162, 1171, 1180, 1189,
+ 1198, 1207, 1214, 1221, 1247, 1255, 1262, 1269, 1276, 1283,
+ 1291, 1299, 1307, 1314, 1325, 1336, 1343, 1352, 1361, 1370,
+ 1379, 1386, 1393, 1400, 1416, 1424, 1432, 1442, 1452, 1462,
+ 1476, 1484, 1497, 1508, 1516, 1529, 1538, 1547, 1556, 1565,
+ 1575, 1585, 1593, 1606, 1615, 1623, 1632, 1640, 1653, 1662,
+ 1672, 1679, 1689, 1699, 1709, 1719, 1729, 1739, 1749, 1759,
+ 1766, 1773, 1780, 1789, 1798, 1807, 1816, 1823, 1833, 1853,
+ 1860, 1878, 1891, 1904, 1917, 1926, 1935, 1944, 1953, 1963,
+ 1973, 1984, 1993, 2002, 2011, 2020, 2029, 2038, 2047, 2056,
+ 2069, 2082, 2091, 2098, 2107, 2116, 2125, 2134, 2143, 2151,
+ 2164, 2172, 2227, 2234, 2249, 2259, 2269, 2276, 2283, 2290,
+ 2299, 2307, 2321, 2342, 2363, 2375, 2387, 2399, 2408, 2429,
+ 2438, 2447, 2455, 2463, 2476, 2489, 2504, 2519, 2528, 2537,
+ 2547, 2557, 2566, 2572, 2581, 2590, 2600, 2610, 2620, 2629,
+ 2639, 2648, 2661, 2674, 2686, 2700, 2712, 2726, 2735, 2746,
+ 2755, 2765, 2772, 2779, 2788, 2797, 2807, 2817, 2827, 2837,
+ 2844, 2851, 2860, 2869, 2879, 2889, 2899, 2906, 2913, 2920,
+ 2928, 2938, 2948, 2958, 2968, 2978, 2988, 3044, 3054, 3062,
+ 3070, 3085, 3094, 3099, 3100, 3101, 3101, 3101, 3102, 3102,
+ 3102, 3103, 3103, 3105, 3115, 3124, 3131, 3138, 3145, 3152,
+ 3159, 3166, 3171, 3172, 3173, 3173, 3173, 3174, 3174, 3174,
+ 3175, 3176, 3176, 3177, 3177, 3178, 3178, 3179, 3180, 3181,
+ 3182, 3183, 3184, 3186, 3195, 3205, 3212, 3219, 3228, 3235,
+ 3242, 3249, 3256, 3265, 3274, 3281, 3288, 3298, 3308, 3318,
+ 3328, 3338, 3348, 3353, 3354, 3355, 3357, 3363, 3368, 3369,
+ 3370, 3372, 3378, 3388, 3395, 3404, 3412, 3417, 3418, 3420,
+ 3420, 3420, 3421, 3421, 3422, 3423, 3424, 3425, 3426, 3428,
+ 3438, 3447, 3454, 3463, 3470, 3479, 3487, 3500, 3508, 3521,
+ 3526, 3527, 3528, 3528, 3529, 3529, 3529, 3530, 3532, 3544,
+ 3556, 3568, 3583, 3596, 3609, 3620, 3625, 3626, 3627, 3627,
+ 3629, 3644
};
#endif
@@ -2060,9 +1389,9 @@ static const char *const yytname[] =
"VAR_VIEW", "VAR_ACCESS_CONTROL_VIEW", "VAR_VIEW_FIRST",
"VAR_SERVE_EXPIRED", "VAR_SERVE_EXPIRED_TTL",
"VAR_SERVE_EXPIRED_TTL_RESET", "VAR_SERVE_EXPIRED_REPLY_TTL",
- "VAR_SERVE_EXPIRED_CLIENT_TIMEOUT", "VAR_SERVE_ORIGINAL_TTL",
- "VAR_FAKE_DSA", "VAR_FAKE_SHA1", "VAR_LOG_IDENTITY",
- "VAR_HIDE_TRUSTANCHOR", "VAR_HIDE_HTTP_USER_AGENT",
+ "VAR_SERVE_EXPIRED_CLIENT_TIMEOUT", "VAR_EDE_SERVE_EXPIRED",
+ "VAR_SERVE_ORIGINAL_TTL", "VAR_FAKE_DSA", "VAR_FAKE_SHA1",
+ "VAR_LOG_IDENTITY", "VAR_HIDE_TRUSTANCHOR", "VAR_HIDE_HTTP_USER_AGENT",
"VAR_HTTP_USER_AGENT", "VAR_TRUST_ANCHOR_SIGNALING",
"VAR_AGGRESSIVE_NSEC", "VAR_USE_SYSTEMD", "VAR_SHM_ENABLE",
"VAR_SHM_KEY", "VAR_ROOT_KEY_SENTINEL", "VAR_DNSCRYPT",
@@ -2093,18 +1422,18 @@ static const char *const yytname[] =
"VAR_RPZ_LOG_NAME", "VAR_DYNLIB", "VAR_DYNLIB_FILE",
"VAR_EDNS_CLIENT_STRING", "VAR_EDNS_CLIENT_STRING_OPCODE", "VAR_NSID",
"VAR_ZONEMD_PERMISSIVE_MODE", "VAR_ZONEMD_CHECK",
- "VAR_ZONEMD_REJECT_ABSENCE", "VAR_RPZ_SIGNAL_NXDOMAIN_RA", "$accept",
- "toplevelvars", "toplevelvar", "force_toplevel", "serverstart",
- "contents_server", "content_server", "stubstart", "contents_stub",
- "content_stub", "forwardstart", "contents_forward", "content_forward",
- "viewstart", "contents_view", "content_view", "authstart",
- "contents_auth", "content_auth", "rpz_tag", "rpz_action_override",
- "rpz_cname_override", "rpz_log", "rpz_log_name",
- "rpz_signal_nxdomain_ra", "rpzstart", "contents_rpz", "content_rpz",
- "server_num_threads", "server_verbosity", "server_statistics_interval",
- "server_statistics_cumulative", "server_extended_statistics",
- "server_shm_enable", "server_shm_key", "server_port",
- "server_send_client_subnet", "server_client_subnet_zone",
+ "VAR_ZONEMD_REJECT_ABSENCE", "VAR_RPZ_SIGNAL_NXDOMAIN_RA",
+ "VAR_INTERFACE_AUTOMATIC_PORTS", "VAR_EDE", "$accept", "toplevelvars",
+ "toplevelvar", "force_toplevel", "serverstart", "contents_server",
+ "content_server", "stubstart", "contents_stub", "content_stub",
+ "forwardstart", "contents_forward", "content_forward", "viewstart",
+ "contents_view", "content_view", "authstart", "contents_auth",
+ "content_auth", "rpz_tag", "rpz_action_override", "rpz_cname_override",
+ "rpz_log", "rpz_log_name", "rpz_signal_nxdomain_ra", "rpzstart",
+ "contents_rpz", "content_rpz", "server_num_threads", "server_verbosity",
+ "server_statistics_interval", "server_statistics_cumulative",
+ "server_extended_statistics", "server_shm_enable", "server_shm_key",
+ "server_port", "server_send_client_subnet", "server_client_subnet_zone",
"server_client_subnet_always_forward", "server_client_subnet_opcode",
"server_max_client_subnet_ipv4", "server_max_client_subnet_ipv6",
"server_min_client_subnet_ipv4", "server_min_client_subnet_ipv6",
@@ -2112,63 +1441,64 @@ static const char *const yytname[] =
"server_interface", "server_outgoing_interface", "server_outgoing_range",
"server_outgoing_port_permit", "server_outgoing_port_avoid",
"server_outgoing_num_tcp", "server_incoming_num_tcp",
- "server_interface_automatic", "server_do_ip4", "server_do_ip6",
- "server_do_udp", "server_do_tcp", "server_prefer_ip4",
- "server_prefer_ip6", "server_tcp_mss", "server_outgoing_tcp_mss",
- "server_tcp_idle_timeout", "server_max_reuse_tcp_queries",
- "server_tcp_reuse_timeout", "server_tcp_auth_query_timeout",
- "server_tcp_keepalive", "server_tcp_keepalive_timeout",
- "server_tcp_upstream", "server_udp_upstream_without_downstream",
- "server_ssl_upstream", "server_ssl_service_key",
- "server_ssl_service_pem", "server_ssl_port", "server_tls_cert_bundle",
- "server_tls_win_cert", "server_tls_additional_port",
- "server_tls_ciphers", "server_tls_ciphersuites",
- "server_tls_session_ticket_keys", "server_tls_use_sni",
- "server_https_port", "server_http_endpoint", "server_http_max_streams",
- "server_http_query_buffer_size", "server_http_response_buffer_size",
- "server_http_nodelay", "server_http_notls_downstream",
- "server_use_systemd", "server_do_daemonize", "server_use_syslog",
- "server_log_time_ascii", "server_log_queries", "server_log_replies",
- "server_log_tag_queryreply", "server_log_servfail",
- "server_log_local_actions", "server_chroot", "server_username",
- "server_directory", "server_logfile", "server_pidfile",
- "server_root_hints", "server_dlv_anchor_file", "server_dlv_anchor",
- "server_auto_trust_anchor_file", "server_trust_anchor_file",
- "server_trusted_keys_file", "server_trust_anchor",
- "server_trust_anchor_signaling", "server_root_key_sentinel",
- "server_domain_insecure", "server_hide_identity", "server_hide_version",
- "server_hide_trustanchor", "server_hide_http_user_agent",
- "server_identity", "server_version", "server_http_user_agent",
- "server_nsid", "server_so_rcvbuf", "server_so_sndbuf",
- "server_so_reuseport", "server_ip_transparent", "server_ip_freebind",
- "server_ip_dscp", "server_stream_wait_size", "server_edns_buffer_size",
- "server_msg_buffer_size", "server_msg_cache_size",
- "server_msg_cache_slabs", "server_num_queries_per_thread",
- "server_jostle_timeout", "server_delay_close", "server_udp_connect",
- "server_unblock_lan_zones", "server_insecure_lan_zones",
- "server_rrset_cache_size", "server_rrset_cache_slabs",
- "server_infra_host_ttl", "server_infra_lame_ttl",
- "server_infra_cache_numhosts", "server_infra_cache_lame_size",
- "server_infra_cache_slabs", "server_infra_cache_min_rtt",
- "server_infra_keep_probing", "server_target_fetch_policy",
- "server_harden_short_bufsize", "server_harden_large_queries",
- "server_harden_glue", "server_harden_dnssec_stripped",
- "server_harden_below_nxdomain", "server_harden_referral_path",
- "server_harden_algo_downgrade", "server_use_caps_for_id",
- "server_caps_whitelist", "server_private_address",
- "server_private_domain", "server_prefetch", "server_prefetch_key",
- "server_deny_any", "server_unwanted_reply_threshold",
- "server_do_not_query_address", "server_do_not_query_localhost",
- "server_access_control", "server_module_conf",
- "server_val_override_date", "server_val_sig_skew_min",
- "server_val_sig_skew_max", "server_val_max_restart",
- "server_cache_max_ttl", "server_cache_max_negative_ttl",
- "server_cache_min_ttl", "server_bogus_ttl",
- "server_val_clean_additional", "server_val_permissive_mode",
- "server_aggressive_nsec", "server_ignore_cd_flag",
- "server_serve_expired", "server_serve_expired_ttl",
- "server_serve_expired_ttl_reset", "server_serve_expired_reply_ttl",
- "server_serve_expired_client_timeout", "server_serve_original_ttl",
+ "server_interface_automatic", "server_interface_automatic_ports",
+ "server_do_ip4", "server_do_ip6", "server_do_udp", "server_do_tcp",
+ "server_prefer_ip4", "server_prefer_ip6", "server_tcp_mss",
+ "server_outgoing_tcp_mss", "server_tcp_idle_timeout",
+ "server_max_reuse_tcp_queries", "server_tcp_reuse_timeout",
+ "server_tcp_auth_query_timeout", "server_tcp_keepalive",
+ "server_tcp_keepalive_timeout", "server_tcp_upstream",
+ "server_udp_upstream_without_downstream", "server_ssl_upstream",
+ "server_ssl_service_key", "server_ssl_service_pem", "server_ssl_port",
+ "server_tls_cert_bundle", "server_tls_win_cert",
+ "server_tls_additional_port", "server_tls_ciphers",
+ "server_tls_ciphersuites", "server_tls_session_ticket_keys",
+ "server_tls_use_sni", "server_https_port", "server_http_endpoint",
+ "server_http_max_streams", "server_http_query_buffer_size",
+ "server_http_response_buffer_size", "server_http_nodelay",
+ "server_http_notls_downstream", "server_use_systemd",
+ "server_do_daemonize", "server_use_syslog", "server_log_time_ascii",
+ "server_log_queries", "server_log_replies", "server_log_tag_queryreply",
+ "server_log_servfail", "server_log_local_actions", "server_chroot",
+ "server_username", "server_directory", "server_logfile",
+ "server_pidfile", "server_root_hints", "server_dlv_anchor_file",
+ "server_dlv_anchor", "server_auto_trust_anchor_file",
+ "server_trust_anchor_file", "server_trusted_keys_file",
+ "server_trust_anchor", "server_trust_anchor_signaling",
+ "server_root_key_sentinel", "server_domain_insecure",
+ "server_hide_identity", "server_hide_version", "server_hide_trustanchor",
+ "server_hide_http_user_agent", "server_identity", "server_version",
+ "server_http_user_agent", "server_nsid", "server_so_rcvbuf",
+ "server_so_sndbuf", "server_so_reuseport", "server_ip_transparent",
+ "server_ip_freebind", "server_ip_dscp", "server_stream_wait_size",
+ "server_edns_buffer_size", "server_msg_buffer_size",
+ "server_msg_cache_size", "server_msg_cache_slabs",
+ "server_num_queries_per_thread", "server_jostle_timeout",
+ "server_delay_close", "server_udp_connect", "server_unblock_lan_zones",
+ "server_insecure_lan_zones", "server_rrset_cache_size",
+ "server_rrset_cache_slabs", "server_infra_host_ttl",
+ "server_infra_lame_ttl", "server_infra_cache_numhosts",
+ "server_infra_cache_lame_size", "server_infra_cache_slabs",
+ "server_infra_cache_min_rtt", "server_infra_keep_probing",
+ "server_target_fetch_policy", "server_harden_short_bufsize",
+ "server_harden_large_queries", "server_harden_glue",
+ "server_harden_dnssec_stripped", "server_harden_below_nxdomain",
+ "server_harden_referral_path", "server_harden_algo_downgrade",
+ "server_use_caps_for_id", "server_caps_whitelist",
+ "server_private_address", "server_private_domain", "server_prefetch",
+ "server_prefetch_key", "server_deny_any",
+ "server_unwanted_reply_threshold", "server_do_not_query_address",
+ "server_do_not_query_localhost", "server_access_control",
+ "server_module_conf", "server_val_override_date",
+ "server_val_sig_skew_min", "server_val_sig_skew_max",
+ "server_val_max_restart", "server_cache_max_ttl",
+ "server_cache_max_negative_ttl", "server_cache_min_ttl",
+ "server_bogus_ttl", "server_val_clean_additional",
+ "server_val_permissive_mode", "server_aggressive_nsec",
+ "server_ignore_cd_flag", "server_serve_expired",
+ "server_serve_expired_ttl", "server_serve_expired_ttl_reset",
+ "server_serve_expired_reply_ttl", "server_serve_expired_client_timeout",
+ "server_ede_serve_expired", "server_serve_original_ttl",
"server_fake_dsa", "server_fake_sha1", "server_val_log_level",
"server_val_nsec3_keysize_iterations", "server_zonemd_permissive_mode",
"server_add_holddown", "server_del_holddown", "server_keep_missing",
@@ -2195,24 +1525,25 @@ static const char *const yytname[] =
"server_ipsecmod_hook", "server_ipsecmod_max_ttl",
"server_ipsecmod_whitelist", "server_ipsecmod_strict",
"server_edns_client_string", "server_edns_client_string_opcode",
- "stub_name", "stub_host", "stub_addr", "stub_first", "stub_no_cache",
- "stub_ssl_upstream", "stub_tcp_upstream", "stub_prime", "forward_name",
- "forward_host", "forward_addr", "forward_first", "forward_no_cache",
- "forward_ssl_upstream", "forward_tcp_upstream", "auth_name",
- "auth_zonefile", "auth_master", "auth_url", "auth_allow_notify",
- "auth_zonemd_check", "auth_zonemd_reject_absence", "auth_for_downstream",
- "auth_for_upstream", "auth_fallback_enabled", "view_name",
- "view_local_zone", "view_response_ip", "view_response_ip_data",
- "view_local_data", "view_local_data_ptr", "view_first", "rcstart",
- "contents_rc", "content_rc", "rc_control_enable", "rc_control_port",
- "rc_control_interface", "rc_control_use_cert", "rc_server_key_file",
- "rc_server_cert_file", "rc_control_key_file", "rc_control_cert_file",
- "dtstart", "contents_dt", "content_dt", "dt_dnstap_enable",
- "dt_dnstap_bidirectional", "dt_dnstap_socket_path", "dt_dnstap_ip",
- "dt_dnstap_tls", "dt_dnstap_tls_server_name",
- "dt_dnstap_tls_cert_bundle", "dt_dnstap_tls_client_key_file",
- "dt_dnstap_tls_client_cert_file", "dt_dnstap_send_identity",
- "dt_dnstap_send_version", "dt_dnstap_identity", "dt_dnstap_version",
+ "server_ede", "stub_name", "stub_host", "stub_addr", "stub_first",
+ "stub_no_cache", "stub_ssl_upstream", "stub_tcp_upstream", "stub_prime",
+ "forward_name", "forward_host", "forward_addr", "forward_first",
+ "forward_no_cache", "forward_ssl_upstream", "forward_tcp_upstream",
+ "auth_name", "auth_zonefile", "auth_master", "auth_url",
+ "auth_allow_notify", "auth_zonemd_check", "auth_zonemd_reject_absence",
+ "auth_for_downstream", "auth_for_upstream", "auth_fallback_enabled",
+ "view_name", "view_local_zone", "view_response_ip",
+ "view_response_ip_data", "view_local_data", "view_local_data_ptr",
+ "view_first", "rcstart", "contents_rc", "content_rc",
+ "rc_control_enable", "rc_control_port", "rc_control_interface",
+ "rc_control_use_cert", "rc_server_key_file", "rc_server_cert_file",
+ "rc_control_key_file", "rc_control_cert_file", "dtstart", "contents_dt",
+ "content_dt", "dt_dnstap_enable", "dt_dnstap_bidirectional",
+ "dt_dnstap_socket_path", "dt_dnstap_ip", "dt_dnstap_tls",
+ "dt_dnstap_tls_server_name", "dt_dnstap_tls_cert_bundle",
+ "dt_dnstap_tls_client_key_file", "dt_dnstap_tls_client_cert_file",
+ "dt_dnstap_send_identity", "dt_dnstap_send_version",
+ "dt_dnstap_identity", "dt_dnstap_version",
"dt_dnstap_log_resolver_query_messages",
"dt_dnstap_log_resolver_response_messages",
"dt_dnstap_log_client_query_messages",
@@ -2279,11 +1610,11 @@ static const yytype_int16 yytoknum[] =
545, 546, 547, 548, 549, 550, 551, 552, 553, 554,
555, 556, 557, 558, 559, 560, 561, 562, 563, 564,
565, 566, 567, 568, 569, 570, 571, 572, 573, 574,
- 575, 576, 577, 578
+ 575, 576, 577, 578, 579, 580, 581
};
#endif
-#define YYPACT_NINF (-310)
+#define YYPACT_NINF (-311)
#define yypact_value_is_default(Yyn) \
((Yyn) == YYPACT_NINF)
@@ -2297,11 +1628,11 @@ static const yytype_int16 yytoknum[] =
STATE-NUM. */
static const yytype_int16 yypact[] =
{
- -310, 0, -310, -310, -310, -310, -310, -310, -310, -310,
- -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
- -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
- -310, -310, 303, -39, -32, -43, -30, -44, -42, -97,
- -110, -309, -229, -233, -303, 4, 6, 7, 8, 9,
+ -311, 0, -311, -311, -311, -311, -311, -311, -311, -311,
+ -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
+ -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
+ -311, -311, 304, -39, -32, -43, -30, -44, -42, -97,
+ -110, -310, -230, -234, -304, 4, 6, 7, 8, 9,
10, 23, 24, 25, 26, 27, 37, 38, 39, 40,
41, 43, 44, 53, 54, 56, 57, 58, 59, 60,
81, 82, 83, 84, 85, 87, 88, 89, 90, 91,
@@ -2317,87 +1648,88 @@ static const yytype_int16 yypact[] =
193, 194, 195, 196, 197, 198, 199, 200, 201, 202,
203, 204, 205, 206, 207, 208, 209, 210, 211, 212,
213, 214, 215, 216, 217, 218, 219, 221, 222, 223,
- 224, 225, 226, 227, 232, 233, 234, 235, 236, 237,
- 239, 248, 249, 250, 251, 254, 255, 261, 263, 264,
- 265, 266, 267, 268, 270, 272, 273, 274, 275, 276,
- 277, 278, 279, 280, 283, 284, 285, 286, 287, 288,
- 289, 290, 291, 292, 293, 294, 296, 297, 298, 300,
- 301, 302, 304, 338, 339, 340, 341, 345, 346, 347,
- 389, 390, 391, 392, 393, 394, -310, -310, -310, -310,
- -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
- -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
- -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
- -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
- -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
- -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
- -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
- -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
- -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
- -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
- -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
- -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
- -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
- -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
- -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
- -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
- -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
- -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
- -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
- -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
- -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
- -310, -310, -310, -310, -310, -310, -310, -310, 395, 396,
- 397, 403, 407, 408, 435, 436, -310, -310, -310, -310,
- -310, -310, -310, -310, -310, 437, 439, 440, 448, 461,
- 462, 463, -310, -310, -310, -310, -310, -310, -310, -310,
- 464, 465, 466, 467, 468, 469, 470, -310, -310, -310,
- -310, -310, -310, -310, -310, 471, 472, 473, 474, 475,
- 476, 477, 478, 479, 480, -310, -310, -310, -310, -310,
- -310, -310, -310, -310, -310, -310, 523, 525, 544, 545,
- 546, 547, -310, -310, -310, -310, -310, -310, -310, -310,
- -310, -310, -310, -310, -310, 548, 549, 550, 551, 552,
- 553, 554, 565, -310, -310, -310, -310, -310, -310, -310,
- -310, -310, 566, 567, 568, 569, 570, 571, 573, 574,
- 575, 576, 577, 578, 579, 582, 585, 588, 589, 598,
- 599, -310, -310, -310, -310, -310, -310, -310, -310, -310,
- -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
- -310, 600, -310, -310, 602, -310, -310, 603, 604, 605,
- 606, 607, 608, 609, 614, 615, 616, -310, -310, -310,
- -310, -310, -310, -310, -310, -310, -310, -310, 617, 618,
- 619, 620, 621, 622, -310, -310, -310, -310, -310, -310,
- -310, 623, 624, -310, -310, -310, -310, -310, -310, -310,
- -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
- -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
- -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
- -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
- -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
- -310, -310, -310, -310, -310, -310, 625, 626, -310, -310,
- -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
- -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
- -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
- -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
- -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
- -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
- -310, -310, -310, -310, -310, -310, 627, 628, 629, -310,
- -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
- 630, 631, -310, -310, -310, -310, -310, -310, -310, -310,
- -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
- -310, -310, -310, 632, 633, 634, 635, 636, 637, -310,
- -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
- -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
- -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
- -310, -310, -310, 638, -310, -310, -310, -310, -310, -310,
- -310, -310, -310, 639, -310, -310, -310, -310, -310, -310,
- -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
- -310, -310, -310, 640, -310, -310, 641, 642, -310, -310,
- -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
- -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
- -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
- -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
- -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
- -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
- -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
- -310, 643, 644, 645, -310, -310, -310, -310, -310, -310,
- -310, -310, -310
+ 224, 225, 226, 227, 228, 233, 234, 235, 236, 237,
+ 238, 240, 249, 250, 251, 252, 255, 256, 262, 264,
+ 265, 266, 267, 268, 269, 271, 273, 274, 275, 276,
+ 277, 278, 279, 280, 281, 284, 285, 286, 287, 288,
+ 289, 290, 291, 292, 293, 294, 295, 297, 298, 299,
+ 301, 302, 303, 305, 339, 340, 341, 342, 346, 347,
+ 348, 390, 391, 392, 393, 394, 395, 396, 397, -311,
+ -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
+ -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
+ -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
+ -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
+ -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
+ -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
+ -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
+ -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
+ -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
+ -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
+ -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
+ -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
+ -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
+ -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
+ -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
+ -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
+ -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
+ -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
+ -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
+ -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
+ -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
+ -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
+ -311, -311, -311, -311, 398, 404, 408, 409, 436, 437,
+ 438, 440, -311, -311, -311, -311, -311, -311, -311, -311,
+ -311, 441, 449, 462, 463, 464, 465, 466, -311, -311,
+ -311, -311, -311, -311, -311, -311, 467, 468, 469, 470,
+ 471, 472, 473, -311, -311, -311, -311, -311, -311, -311,
+ -311, 474, 475, 476, 477, 478, 479, 480, 481, 524,
+ 526, -311, -311, -311, -311, -311, -311, -311, -311, -311,
+ -311, -311, 546, 547, 548, 549, 550, 551, -311, -311,
+ -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
+ -311, 552, 553, 554, 555, 556, 567, 568, 569, -311,
+ -311, -311, -311, -311, -311, -311, -311, -311, 570, 571,
+ 572, 573, 575, 576, 577, 578, 579, 580, 581, 584,
+ 587, 590, 591, 600, 601, 602, 604, -311, -311, -311,
+ -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
+ -311, -311, -311, -311, -311, -311, -311, 605, -311, -311,
+ 606, -311, -311, 607, 608, 609, 610, 611, 616, 617,
+ 618, 621, 622, -311, -311, -311, -311, -311, -311, -311,
+ -311, -311, -311, -311, 623, 624, 625, 626, 627, 628,
+ -311, -311, -311, -311, -311, -311, -311, 629, 630, -311,
+ -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
+ -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
+ -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
+ -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
+ -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
+ -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
+ -311, -311, 631, 632, -311, -311, -311, -311, -311, -311,
+ -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
+ -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
+ -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
+ -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
+ -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
+ -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
+ -311, -311, 633, 634, 635, -311, -311, -311, -311, -311,
+ -311, -311, -311, -311, -311, -311, 636, 637, -311, -311,
+ -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
+ -311, -311, -311, -311, -311, -311, -311, -311, -311, 638,
+ 639, 640, 641, 642, 643, -311, -311, -311, -311, -311,
+ -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
+ -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
+ -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
+ 644, -311, -311, -311, -311, -311, -311, -311, -311, -311,
+ 645, -311, -311, -311, -311, -311, -311, -311, -311, -311,
+ -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
+ -311, -311, 646, -311, -311, 647, 648, -311, -311, -311,
+ -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
+ -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
+ -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
+ -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
+ -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
+ -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
+ -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
+ 649, 650, 651, -311, -311, -311, -311, -311, -311, -311,
+ -311, -311
};
/* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -2405,10 +1737,10 @@ static const yytype_int16 yypact[] =
means the default is an error. */
static const yytype_int16 yydefact[] =
{
- 2, 0, 1, 18, 19, 243, 254, 556, 616, 575,
- 264, 630, 653, 274, 669, 293, 621, 3, 17, 21,
- 245, 256, 266, 276, 295, 558, 577, 618, 623, 632,
- 655, 671, 4, 5, 6, 10, 14, 15, 8, 9,
+ 2, 0, 1, 18, 19, 246, 257, 562, 622, 581,
+ 267, 636, 659, 277, 675, 296, 627, 3, 17, 21,
+ 248, 259, 269, 279, 298, 564, 583, 624, 629, 638,
+ 661, 677, 4, 5, 6, 10, 14, 15, 8, 9,
7, 16, 11, 12, 13, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -2431,161 +1763,164 @@ static const yytype_int16 yydefact[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 20, 22, 23, 88,
- 91, 100, 206, 207, 24, 166, 167, 168, 169, 170,
- 171, 172, 173, 174, 175, 37, 79, 25, 92, 93,
- 48, 72, 87, 26, 27, 30, 31, 28, 29, 32,
- 33, 34, 240, 241, 242, 35, 36, 124, 218, 125,
- 127, 128, 129, 220, 225, 221, 232, 233, 234, 235,
- 130, 131, 132, 133, 134, 135, 136, 202, 89, 78,
- 104, 122, 123, 230, 227, 126, 38, 39, 40, 41,
- 42, 80, 94, 95, 111, 66, 76, 67, 210, 211,
- 105, 58, 59, 209, 62, 60, 61, 63, 238, 115,
- 119, 140, 150, 180, 153, 231, 116, 73, 43, 44,
- 45, 102, 141, 142, 143, 144, 46, 47, 49, 50,
- 52, 53, 51, 148, 154, 54, 55, 56, 64, 83,
- 120, 97, 149, 90, 176, 98, 99, 117, 118, 228,
- 103, 57, 81, 84, 65, 68, 106, 107, 108, 82,
- 177, 109, 69, 70, 71, 219, 121, 194, 195, 196,
- 197, 198, 199, 200, 208, 110, 77, 239, 112, 113,
- 114, 178, 74, 75, 96, 85, 86, 101, 137, 138,
- 229, 139, 145, 146, 147, 181, 182, 184, 186, 187,
- 185, 188, 203, 151, 152, 157, 158, 155, 156, 159,
- 160, 162, 161, 164, 163, 165, 222, 224, 223, 179,
- 189, 190, 191, 192, 193, 212, 214, 213, 215, 216,
- 217, 236, 237, 183, 201, 204, 205, 226, 0, 0,
- 0, 0, 0, 0, 0, 0, 244, 246, 247, 248,
- 250, 251, 252, 253, 249, 0, 0, 0, 0, 0,
- 0, 0, 255, 257, 258, 259, 260, 261, 262, 263,
- 0, 0, 0, 0, 0, 0, 0, 265, 267, 268,
- 271, 272, 269, 273, 270, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 275, 277, 278, 279, 280,
- 284, 285, 286, 281, 282, 283, 0, 0, 0, 0,
- 0, 0, 298, 302, 303, 304, 305, 306, 294, 296,
- 297, 299, 300, 301, 307, 0, 0, 0, 0, 0,
- 0, 0, 0, 557, 559, 561, 560, 566, 562, 563,
- 564, 565, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 20,
+ 22, 23, 88, 91, 100, 207, 208, 24, 166, 167,
+ 168, 169, 170, 171, 172, 173, 174, 175, 37, 79,
+ 25, 92, 93, 48, 72, 87, 244, 26, 27, 30,
+ 31, 28, 29, 32, 33, 34, 241, 242, 243, 35,
+ 36, 124, 219, 125, 127, 128, 129, 221, 226, 222,
+ 233, 234, 235, 236, 130, 131, 132, 133, 134, 135,
+ 136, 203, 89, 78, 104, 122, 123, 231, 228, 126,
+ 38, 39, 40, 41, 42, 80, 94, 95, 111, 66,
+ 76, 67, 211, 212, 105, 58, 59, 210, 62, 60,
+ 61, 63, 239, 115, 119, 140, 150, 180, 153, 232,
+ 116, 73, 43, 44, 45, 102, 141, 142, 143, 144,
+ 46, 47, 49, 50, 52, 53, 51, 148, 154, 54,
+ 55, 56, 64, 83, 120, 97, 149, 90, 176, 98,
+ 99, 117, 118, 229, 103, 57, 81, 84, 65, 68,
+ 106, 107, 108, 82, 177, 109, 69, 70, 71, 220,
+ 121, 194, 195, 196, 197, 198, 199, 200, 201, 209,
+ 110, 77, 240, 112, 113, 114, 178, 74, 75, 96,
+ 85, 86, 101, 137, 138, 230, 139, 145, 146, 147,
+ 181, 182, 184, 186, 187, 185, 188, 204, 151, 152,
+ 157, 158, 155, 156, 159, 160, 162, 161, 164, 163,
+ 165, 223, 225, 224, 179, 189, 190, 191, 192, 193,
+ 213, 215, 214, 216, 217, 218, 237, 238, 245, 183,
+ 202, 205, 206, 227, 0, 0, 0, 0, 0, 0,
+ 0, 0, 247, 249, 250, 251, 253, 254, 255, 256,
+ 252, 0, 0, 0, 0, 0, 0, 0, 258, 260,
+ 261, 262, 263, 264, 265, 266, 0, 0, 0, 0,
+ 0, 0, 0, 268, 270, 271, 274, 275, 272, 276,
+ 273, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 278, 280, 281, 282, 283, 287, 288, 289, 284,
+ 285, 286, 0, 0, 0, 0, 0, 0, 301, 305,
+ 306, 307, 308, 309, 297, 299, 300, 302, 303, 304,
+ 310, 0, 0, 0, 0, 0, 0, 0, 0, 563,
+ 565, 567, 566, 572, 568, 569, 570, 571, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 576, 578, 580, 579, 581, 582, 583, 584, 585,
- 586, 587, 588, 589, 590, 591, 592, 593, 594, 595,
- 596, 0, 617, 619, 0, 622, 624, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 631, 633, 634,
- 635, 637, 638, 636, 639, 640, 641, 642, 0, 0,
- 0, 0, 0, 0, 654, 656, 657, 658, 659, 660,
- 661, 0, 0, 670, 672, 673, 309, 308, 315, 328,
- 326, 338, 334, 335, 339, 336, 337, 340, 341, 342,
- 346, 347, 377, 378, 379, 380, 381, 409, 410, 411,
- 417, 418, 331, 419, 420, 423, 421, 422, 426, 427,
- 428, 442, 392, 393, 396, 397, 429, 445, 386, 388,
- 446, 453, 454, 455, 332, 408, 473, 474, 387, 467,
- 370, 327, 382, 443, 450, 430, 0, 0, 477, 333,
- 310, 369, 434, 311, 329, 330, 383, 384, 475, 432,
- 436, 437, 344, 343, 312, 478, 412, 441, 371, 391,
- 447, 448, 449, 452, 466, 385, 471, 469, 470, 400,
- 407, 438, 439, 401, 402, 431, 457, 372, 373, 376,
- 348, 350, 345, 351, 352, 353, 354, 361, 362, 363,
- 364, 365, 366, 367, 479, 480, 482, 413, 414, 415,
- 416, 424, 425, 483, 484, 485, 0, 0, 0, 433,
- 403, 405, 626, 494, 498, 496, 495, 499, 497, 506,
- 0, 0, 502, 503, 504, 505, 316, 317, 318, 319,
- 320, 321, 322, 323, 324, 325, 435, 451, 472, 510,
- 511, 404, 486, 0, 0, 0, 0, 0, 0, 458,
- 459, 460, 461, 462, 463, 464, 465, 627, 394, 395,
- 398, 389, 456, 368, 313, 314, 390, 512, 513, 514,
- 515, 516, 518, 517, 519, 520, 521, 349, 356, 507,
- 509, 508, 355, 0, 375, 440, 481, 374, 406, 357,
- 358, 360, 359, 0, 523, 399, 468, 524, 525, 526,
- 531, 529, 530, 527, 528, 532, 533, 534, 535, 537,
- 538, 536, 549, 0, 553, 554, 0, 0, 555, 539,
- 547, 540, 541, 542, 546, 548, 543, 544, 545, 287,
- 288, 289, 290, 291, 292, 567, 569, 568, 571, 572,
- 573, 574, 570, 597, 599, 600, 601, 602, 603, 604,
- 605, 606, 607, 598, 608, 609, 610, 611, 612, 613,
- 614, 615, 620, 625, 643, 644, 645, 648, 646, 647,
- 649, 650, 651, 652, 662, 663, 664, 665, 666, 667,
- 674, 675, 444, 476, 493, 628, 629, 500, 501, 487,
- 488, 0, 0, 0, 492, 668, 522, 550, 551, 552,
- 491, 489, 490
+ 0, 0, 0, 0, 0, 0, 0, 582, 584, 586,
+ 585, 587, 588, 589, 590, 591, 592, 593, 594, 595,
+ 596, 597, 598, 599, 600, 601, 602, 0, 623, 625,
+ 0, 628, 630, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 637, 639, 640, 641, 643, 644, 642,
+ 645, 646, 647, 648, 0, 0, 0, 0, 0, 0,
+ 660, 662, 663, 664, 665, 666, 667, 0, 0, 676,
+ 678, 679, 312, 311, 318, 331, 329, 342, 338, 339,
+ 343, 340, 341, 344, 345, 346, 350, 351, 381, 382,
+ 383, 384, 385, 413, 414, 415, 421, 422, 334, 423,
+ 424, 427, 425, 426, 430, 431, 432, 446, 396, 397,
+ 400, 401, 433, 449, 390, 392, 450, 457, 458, 459,
+ 335, 412, 478, 479, 391, 472, 374, 330, 386, 447,
+ 454, 434, 0, 0, 482, 336, 313, 373, 438, 314,
+ 332, 333, 387, 388, 480, 436, 440, 441, 348, 347,
+ 315, 483, 416, 445, 375, 395, 451, 452, 453, 456,
+ 471, 389, 476, 474, 475, 404, 411, 442, 443, 405,
+ 406, 435, 461, 376, 377, 380, 352, 354, 349, 355,
+ 356, 357, 358, 365, 366, 367, 368, 369, 370, 371,
+ 484, 485, 487, 417, 418, 419, 420, 428, 429, 488,
+ 489, 490, 0, 0, 0, 437, 407, 409, 632, 499,
+ 503, 501, 500, 504, 502, 511, 0, 0, 507, 508,
+ 509, 510, 319, 320, 321, 322, 323, 324, 325, 326,
+ 327, 328, 439, 455, 477, 515, 516, 408, 491, 0,
+ 0, 0, 0, 0, 0, 462, 463, 464, 465, 466,
+ 467, 468, 469, 470, 633, 398, 399, 402, 393, 460,
+ 372, 316, 317, 394, 517, 518, 519, 520, 521, 523,
+ 522, 524, 525, 526, 353, 360, 512, 514, 513, 359,
+ 0, 379, 444, 486, 378, 410, 361, 362, 364, 363,
+ 0, 528, 403, 473, 337, 529, 530, 531, 532, 537,
+ 535, 536, 533, 534, 538, 539, 540, 541, 543, 544,
+ 542, 555, 0, 559, 560, 0, 0, 561, 545, 553,
+ 546, 547, 548, 552, 554, 549, 550, 551, 290, 291,
+ 292, 293, 294, 295, 573, 575, 574, 577, 578, 579,
+ 580, 576, 603, 605, 606, 607, 608, 609, 610, 611,
+ 612, 613, 604, 614, 615, 616, 617, 618, 619, 620,
+ 621, 626, 631, 649, 650, 651, 654, 652, 653, 655,
+ 656, 657, 658, 668, 669, 670, 671, 672, 673, 680,
+ 681, 448, 481, 498, 634, 635, 505, 506, 492, 493,
+ 0, 0, 0, 497, 674, 527, 556, 557, 558, 496,
+ 494, 495
};
/* YYPGOTO[NTERM-NUM]. */
static const yytype_int16 yypgoto[] =
{
- -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
- -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
- -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
- -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
- -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
- -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
- -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
- -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
- -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
- -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
- -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
- -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
- -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
- -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
- -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
- -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
- -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
- -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
- -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
- -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
- -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
- -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
- -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
- -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
- -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
- -310, -310, -310, -310, -310, -310, -310, -310, -310, -27,
- 646, 647, 648, 649, -310, -310, 650, -310, -310, -310,
- -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
- -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
- -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
- -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
- -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
- -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
- -310, -310, -310, -310, -310, -310, -310, -310, -310, -310,
- -310, -310, -310, -310, -310, -310, -310, -310, -310
+ -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
+ -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
+ -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
+ -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
+ -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
+ -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
+ -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
+ -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
+ -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
+ -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
+ -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
+ -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
+ -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
+ -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
+ -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
+ -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
+ -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
+ -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
+ -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
+ -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
+ -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
+ -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
+ -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
+ -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
+ -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
+ -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
+ -311, -311, -27, 652, 653, 654, 655, -311, -311, 656,
+ -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
+ -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
+ -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
+ -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
+ -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
+ -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
+ -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
+ -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
+ -311, -311
};
/* YYDEFGOTO[NTERM-NUM]. */
static const yytype_int16 yydefgoto[] =
{
- -1, 1, 17, 18, 19, 32, 266, 20, 33, 496,
- 21, 34, 512, 22, 35, 527, 23, 36, 545, 562,
- 563, 564, 565, 566, 567, 24, 37, 568, 267, 268,
- 269, 270, 271, 272, 273, 274, 275, 276, 277, 278,
- 279, 280, 281, 282, 283, 284, 285, 286, 287, 288,
- 289, 290, 291, 292, 293, 294, 295, 296, 297, 298,
- 299, 300, 301, 302, 303, 304, 305, 306, 307, 308,
- 309, 310, 311, 312, 313, 314, 315, 316, 317, 318,
- 319, 320, 321, 322, 323, 324, 325, 326, 327, 328,
- 329, 330, 331, 332, 333, 334, 335, 336, 337, 338,
- 339, 340, 341, 342, 343, 344, 345, 346, 347, 348,
- 349, 350, 351, 352, 353, 354, 355, 356, 357, 358,
- 359, 360, 361, 362, 363, 364, 365, 366, 367, 368,
- 369, 370, 371, 372, 373, 374, 375, 376, 377, 378,
- 379, 380, 381, 382, 383, 384, 385, 386, 387, 388,
- 389, 390, 391, 392, 393, 394, 395, 396, 397, 398,
- 399, 400, 401, 402, 403, 404, 405, 406, 407, 408,
- 409, 410, 411, 412, 413, 414, 415, 416, 417, 418,
- 419, 420, 421, 422, 423, 424, 425, 426, 427, 428,
- 429, 430, 431, 432, 433, 434, 435, 436, 437, 438,
- 439, 440, 441, 442, 443, 444, 445, 446, 447, 448,
- 449, 450, 451, 452, 453, 454, 455, 456, 457, 458,
- 459, 460, 461, 462, 463, 464, 465, 466, 467, 468,
- 469, 470, 471, 472, 473, 474, 475, 476, 477, 478,
- 479, 480, 481, 482, 497, 498, 499, 500, 501, 502,
- 503, 504, 513, 514, 515, 516, 517, 518, 519, 546,
- 547, 548, 549, 550, 551, 552, 553, 554, 555, 528,
- 529, 530, 531, 532, 533, 534, 25, 38, 583, 584,
- 585, 586, 587, 588, 589, 590, 591, 26, 39, 611,
- 612, 613, 614, 615, 616, 617, 618, 619, 620, 621,
- 622, 623, 624, 625, 626, 627, 628, 629, 630, 27,
- 40, 632, 633, 28, 41, 635, 636, 483, 484, 485,
- 486, 29, 42, 647, 648, 649, 650, 651, 652, 653,
- 654, 655, 656, 657, 30, 43, 664, 665, 666, 667,
- 668, 669, 670, 487, 31, 44, 673, 674, 675
+ 0, 1, 17, 18, 19, 32, 269, 20, 33, 502,
+ 21, 34, 518, 22, 35, 533, 23, 36, 551, 568,
+ 569, 570, 571, 572, 573, 24, 37, 574, 270, 271,
+ 272, 273, 274, 275, 276, 277, 278, 279, 280, 281,
+ 282, 283, 284, 285, 286, 287, 288, 289, 290, 291,
+ 292, 293, 294, 295, 296, 297, 298, 299, 300, 301,
+ 302, 303, 304, 305, 306, 307, 308, 309, 310, 311,
+ 312, 313, 314, 315, 316, 317, 318, 319, 320, 321,
+ 322, 323, 324, 325, 326, 327, 328, 329, 330, 331,
+ 332, 333, 334, 335, 336, 337, 338, 339, 340, 341,
+ 342, 343, 344, 345, 346, 347, 348, 349, 350, 351,
+ 352, 353, 354, 355, 356, 357, 358, 359, 360, 361,
+ 362, 363, 364, 365, 366, 367, 368, 369, 370, 371,
+ 372, 373, 374, 375, 376, 377, 378, 379, 380, 381,
+ 382, 383, 384, 385, 386, 387, 388, 389, 390, 391,
+ 392, 393, 394, 395, 396, 397, 398, 399, 400, 401,
+ 402, 403, 404, 405, 406, 407, 408, 409, 410, 411,
+ 412, 413, 414, 415, 416, 417, 418, 419, 420, 421,
+ 422, 423, 424, 425, 426, 427, 428, 429, 430, 431,
+ 432, 433, 434, 435, 436, 437, 438, 439, 440, 441,
+ 442, 443, 444, 445, 446, 447, 448, 449, 450, 451,
+ 452, 453, 454, 455, 456, 457, 458, 459, 460, 461,
+ 462, 463, 464, 465, 466, 467, 468, 469, 470, 471,
+ 472, 473, 474, 475, 476, 477, 478, 479, 480, 481,
+ 482, 483, 484, 485, 486, 487, 488, 503, 504, 505,
+ 506, 507, 508, 509, 510, 519, 520, 521, 522, 523,
+ 524, 525, 552, 553, 554, 555, 556, 557, 558, 559,
+ 560, 561, 534, 535, 536, 537, 538, 539, 540, 25,
+ 38, 589, 590, 591, 592, 593, 594, 595, 596, 597,
+ 26, 39, 617, 618, 619, 620, 621, 622, 623, 624,
+ 625, 626, 627, 628, 629, 630, 631, 632, 633, 634,
+ 635, 636, 27, 40, 638, 639, 28, 41, 641, 642,
+ 489, 490, 491, 492, 29, 42, 653, 654, 655, 656,
+ 657, 658, 659, 660, 661, 662, 663, 30, 43, 670,
+ 671, 672, 673, 674, 675, 676, 493, 31, 44, 679,
+ 680, 681
};
/* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If
@@ -2593,84 +1928,85 @@ static const yytype_int16 yydefgoto[] =
number is the opposite. If YYTABLE_NINF, syntax error. */
static const yytype_int16 yytable[] =
{
- 2, 535, 520, 671, 672, 631, 488, 634, 489, 490,
- 569, 3, 4, 505, 676, 535, 677, 678, 679, 680,
- 681, 506, 507, 637, 638, 639, 640, 641, 642, 643,
- 644, 645, 646, 682, 683, 684, 685, 686, 521, 522,
- 658, 659, 660, 661, 662, 663, 5, 687, 688, 689,
- 690, 691, 6, 692, 693, 575, 576, 577, 578, 579,
- 580, 581, 582, 694, 695, 523, 696, 697, 698, 699,
- 700, 491, 592, 593, 594, 595, 596, 597, 598, 599,
- 600, 601, 602, 603, 604, 605, 606, 607, 608, 609,
- 610, 701, 702, 703, 704, 705, 7, 706, 707, 708,
- 709, 710, 711, 712, 492, 713, 714, 493, 715, 716,
- 508, 717, 509, 718, 8, 510, 494, 719, 720, 721,
- 722, 723, 724, 725, 726, 727, 728, 729, 730, 731,
- 732, 733, 734, 735, 736, 737, 738, 739, 740, 741,
- 742, 743, 744, 745, 746, 747, 524, 525, 748, 749,
- 750, 751, 752, 753, 754, 755, 756, 757, 758, 759,
- 760, 761, 762, 763, 764, 765, 766, 767, 9, 768,
- 769, 770, 771, 772, 773, 774, 775, 776, 777, 778,
- 779, 780, 781, 782, 783, 784, 785, 786, 787, 526,
- 788, 789, 790, 791, 792, 793, 794, 795, 796, 797,
- 798, 799, 800, 801, 802, 803, 804, 805, 806, 807,
- 808, 809, 810, 811, 812, 813, 814, 815, 816, 817,
- 818, 819, 820, 821, 822, 823, 824, 825, 826, 827,
- 10, 828, 829, 830, 831, 832, 833, 834, 537, 538,
- 539, 540, 835, 836, 837, 838, 839, 840, 542, 841,
- 536, 11, 537, 538, 539, 540, 541, 495, 842, 843,
- 844, 845, 542, 511, 846, 847, 556, 557, 558, 559,
- 560, 848, 12, 849, 850, 851, 852, 853, 854, 561,
- 855, 13, 856, 857, 858, 859, 860, 861, 862, 863,
- 864, 543, 544, 865, 866, 867, 868, 869, 870, 871,
- 872, 873, 874, 875, 876, 14, 877, 878, 879, 15,
- 880, 881, 882, 0, 883, 16, 45, 46, 47, 48,
- 49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
- 59, 60, 61, 62, 63, 64, 65, 66, 67, 68,
- 69, 70, 71, 72, 73, 74, 75, 76, 884, 885,
- 886, 887, 77, 78, 79, 888, 889, 890, 80, 81,
- 82, 83, 84, 85, 86, 87, 88, 89, 90, 91,
- 92, 93, 94, 95, 96, 97, 98, 99, 100, 101,
- 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
- 112, 113, 114, 115, 116, 117, 118, 119, 120, 891,
- 892, 893, 894, 895, 896, 897, 898, 899, 121, 122,
- 123, 124, 125, 900, 126, 127, 128, 901, 902, 129,
- 130, 131, 132, 133, 134, 135, 136, 137, 138, 139,
- 140, 141, 142, 143, 144, 145, 146, 147, 148, 149,
- 150, 151, 152, 153, 154, 903, 904, 905, 155, 906,
- 907, 156, 157, 158, 159, 160, 161, 162, 908, 163,
- 164, 165, 166, 167, 168, 169, 170, 171, 172, 173,
- 174, 909, 910, 911, 912, 913, 914, 915, 916, 917,
- 918, 919, 920, 921, 922, 923, 924, 925, 926, 927,
- 928, 175, 176, 177, 178, 179, 180, 181, 182, 183,
- 184, 185, 186, 187, 188, 189, 190, 191, 192, 193,
- 194, 195, 196, 197, 198, 199, 200, 201, 202, 203,
- 204, 205, 206, 207, 208, 209, 210, 211, 212, 213,
- 214, 215, 216, 929, 217, 930, 218, 219, 220, 221,
- 222, 223, 224, 225, 226, 227, 228, 229, 230, 231,
- 232, 233, 234, 235, 931, 932, 933, 934, 935, 936,
- 937, 938, 939, 940, 941, 236, 237, 238, 239, 240,
- 241, 242, 243, 244, 245, 942, 943, 944, 945, 946,
- 947, 948, 246, 949, 950, 951, 952, 953, 954, 955,
- 247, 248, 956, 249, 250, 957, 251, 252, 958, 959,
- 253, 254, 255, 256, 257, 258, 259, 260, 960, 961,
- 962, 261, 963, 964, 965, 966, 967, 968, 969, 970,
- 262, 263, 264, 265, 971, 972, 973, 974, 975, 976,
- 977, 978, 979, 980, 981, 982, 983, 984, 985, 986,
- 987, 988, 989, 990, 991, 992, 993, 994, 995, 996,
- 997, 998, 999, 1000, 1001, 1002, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 541, 526, 677, 678, 637, 494, 640, 495, 496,
+ 575, 3, 4, 511, 682, 541, 683, 684, 685, 686,
+ 687, 512, 513, 643, 644, 645, 646, 647, 648, 649,
+ 650, 651, 652, 688, 689, 690, 691, 692, 527, 528,
+ 664, 665, 666, 667, 668, 669, 5, 693, 694, 695,
+ 696, 697, 6, 698, 699, 581, 582, 583, 584, 585,
+ 586, 587, 588, 700, 701, 529, 702, 703, 704, 705,
+ 706, 497, 598, 599, 600, 601, 602, 603, 604, 605,
+ 606, 607, 608, 609, 610, 611, 612, 613, 614, 615,
+ 616, 707, 708, 709, 710, 711, 7, 712, 713, 714,
+ 715, 716, 717, 718, 498, 719, 720, 499, 721, 722,
+ 514, 723, 515, 724, 8, 516, 500, 725, 726, 727,
+ 728, 729, 730, 731, 732, 733, 734, 735, 736, 737,
+ 738, 739, 740, 741, 742, 743, 744, 745, 746, 747,
+ 748, 749, 750, 751, 752, 753, 530, 531, 754, 755,
+ 756, 757, 758, 759, 760, 761, 762, 763, 764, 765,
+ 766, 767, 768, 769, 770, 771, 772, 773, 9, 774,
+ 775, 776, 777, 778, 779, 780, 781, 782, 783, 784,
+ 785, 786, 787, 788, 789, 790, 791, 792, 793, 532,
+ 794, 795, 796, 797, 798, 799, 800, 801, 802, 803,
+ 804, 805, 806, 807, 808, 809, 810, 811, 812, 813,
+ 814, 815, 816, 817, 818, 819, 820, 821, 822, 823,
+ 824, 825, 826, 827, 828, 829, 830, 831, 832, 833,
+ 10, 834, 835, 836, 837, 838, 839, 840, 841, 543,
+ 544, 545, 546, 842, 843, 844, 845, 846, 847, 548,
+ 848, 542, 11, 543, 544, 545, 546, 547, 501, 849,
+ 850, 851, 852, 548, 517, 853, 854, 562, 563, 564,
+ 565, 566, 855, 12, 856, 857, 858, 859, 860, 861,
+ 567, 862, 13, 863, 864, 865, 866, 867, 868, 869,
+ 870, 871, 549, 550, 872, 873, 874, 875, 876, 877,
+ 878, 879, 880, 881, 882, 883, 14, 884, 885, 886,
+ 15, 887, 888, 889, 0, 890, 16, 45, 46, 47,
+ 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
+ 58, 59, 60, 61, 62, 63, 64, 65, 66, 67,
+ 68, 69, 70, 71, 72, 73, 74, 75, 76, 891,
+ 892, 893, 894, 77, 78, 79, 895, 896, 897, 80,
+ 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,
+ 91, 92, 93, 94, 95, 96, 97, 98, 99, 100,
+ 101, 102, 103, 104, 105, 106, 107, 108, 109, 110,
+ 111, 112, 113, 114, 115, 116, 117, 118, 119, 120,
+ 898, 899, 900, 901, 902, 903, 904, 905, 906, 121,
+ 122, 123, 124, 125, 907, 126, 127, 128, 908, 909,
+ 129, 130, 131, 132, 133, 134, 135, 136, 137, 138,
+ 139, 140, 141, 142, 143, 144, 145, 146, 147, 148,
+ 149, 150, 151, 152, 153, 154, 910, 911, 912, 155,
+ 913, 914, 156, 157, 158, 159, 160, 161, 162, 915,
+ 163, 164, 165, 166, 167, 168, 169, 170, 171, 172,
+ 173, 174, 916, 917, 918, 919, 920, 921, 922, 923,
+ 924, 925, 926, 927, 928, 929, 930, 931, 932, 933,
+ 934, 935, 175, 176, 177, 178, 179, 180, 181, 182,
+ 183, 184, 185, 186, 187, 188, 189, 190, 191, 192,
+ 193, 194, 195, 196, 197, 198, 199, 200, 201, 202,
+ 203, 204, 205, 206, 207, 208, 209, 210, 211, 212,
+ 213, 214, 215, 216, 936, 217, 937, 218, 219, 220,
+ 221, 222, 223, 224, 225, 226, 227, 228, 229, 230,
+ 231, 232, 233, 234, 235, 236, 938, 939, 940, 941,
+ 942, 943, 944, 945, 946, 947, 948, 237, 238, 239,
+ 240, 241, 242, 243, 244, 245, 246, 949, 950, 951,
+ 952, 953, 954, 955, 247, 956, 957, 958, 959, 960,
+ 961, 962, 248, 249, 963, 250, 251, 964, 252, 253,
+ 965, 966, 254, 255, 256, 257, 258, 259, 260, 261,
+ 967, 968, 969, 262, 970, 971, 972, 973, 974, 975,
+ 976, 977, 263, 264, 265, 266, 978, 979, 980, 267,
+ 268, 981, 982, 983, 984, 985, 986, 987, 988, 989,
+ 990, 991, 992, 993, 994, 995, 996, 997, 998, 999,
+ 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009,
+ 1010, 1011, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 570, 571, 572, 573, 574
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 576,
+ 577, 578, 579, 580
};
static const yytype_int16 yycheck[] =
{
- 0, 45, 45, 306, 307, 115, 45, 316, 47, 48,
+ 0, 45, 45, 307, 308, 115, 45, 317, 47, 48,
37, 11, 12, 45, 10, 45, 10, 10, 10, 10,
- 10, 53, 54, 252, 253, 254, 255, 256, 257, 258,
- 259, 260, 261, 10, 10, 10, 10, 10, 81, 82,
- 273, 274, 275, 276, 277, 278, 46, 10, 10, 10,
+ 10, 53, 54, 253, 254, 255, 256, 257, 258, 259,
+ 260, 261, 262, 10, 10, 10, 10, 10, 81, 82,
+ 274, 275, 276, 277, 278, 279, 46, 10, 10, 10,
10, 10, 52, 10, 10, 97, 98, 99, 100, 101,
102, 103, 104, 10, 10, 108, 10, 10, 10, 10,
10, 110, 169, 170, 171, 172, 173, 174, 175, 176,
@@ -2689,63 +2025,64 @@ static const yytype_int16 yycheck[] =
10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
- 230, 10, 10, 10, 10, 10, 10, 10, 282, 283,
- 284, 285, 10, 10, 10, 10, 10, 10, 292, 10,
- 280, 251, 282, 283, 284, 285, 286, 296, 10, 10,
- 10, 10, 292, 295, 10, 10, 310, 311, 312, 313,
- 314, 10, 272, 10, 10, 10, 10, 10, 10, 323,
- 10, 281, 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 321, 322, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 305, 10, 10, 10, 309,
- 10, 10, 10, -1, 10, 315, 13, 14, 15, 16,
- 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
- 27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
- 37, 38, 39, 40, 41, 42, 43, 44, 10, 10,
- 10, 10, 49, 50, 51, 10, 10, 10, 55, 56,
- 57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
- 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
- 77, 78, 79, 80, 81, 82, 83, 84, 85, 86,
- 87, 88, 89, 90, 91, 92, 93, 94, 95, 10,
- 10, 10, 10, 10, 10, 10, 10, 10, 105, 106,
- 107, 108, 109, 10, 111, 112, 113, 10, 10, 116,
- 117, 118, 119, 120, 121, 122, 123, 124, 125, 126,
- 127, 128, 129, 130, 131, 132, 133, 134, 135, 136,
- 137, 138, 139, 140, 141, 10, 10, 10, 145, 10,
- 10, 148, 149, 150, 151, 152, 153, 154, 10, 156,
- 157, 158, 159, 160, 161, 162, 163, 164, 165, 166,
- 167, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 230, 10, 10, 10, 10, 10, 10, 10, 10, 283,
+ 284, 285, 286, 10, 10, 10, 10, 10, 10, 293,
+ 10, 281, 252, 283, 284, 285, 286, 287, 297, 10,
+ 10, 10, 10, 293, 296, 10, 10, 311, 312, 313,
+ 314, 315, 10, 273, 10, 10, 10, 10, 10, 10,
+ 324, 10, 282, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 322, 323, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 306, 10, 10, 10,
+ 310, 10, 10, 10, -1, 10, 316, 13, 14, 15,
+ 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
+ 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
+ 36, 37, 38, 39, 40, 41, 42, 43, 44, 10,
+ 10, 10, 10, 49, 50, 51, 10, 10, 10, 55,
+ 56, 57, 58, 59, 60, 61, 62, 63, 64, 65,
+ 66, 67, 68, 69, 70, 71, 72, 73, 74, 75,
+ 76, 77, 78, 79, 80, 81, 82, 83, 84, 85,
+ 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 105,
+ 106, 107, 108, 109, 10, 111, 112, 113, 10, 10,
+ 116, 117, 118, 119, 120, 121, 122, 123, 124, 125,
+ 126, 127, 128, 129, 130, 131, 132, 133, 134, 135,
+ 136, 137, 138, 139, 140, 141, 10, 10, 10, 145,
+ 10, 10, 148, 149, 150, 151, 152, 153, 154, 10,
+ 156, 157, 158, 159, 160, 161, 162, 163, 164, 165,
+ 166, 167, 10, 10, 10, 10, 10, 10, 10, 10,
10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 188, 189, 190, 191, 192, 193, 194, 195, 196,
- 197, 198, 199, 200, 201, 202, 203, 204, 205, 206,
- 207, 208, 209, 210, 211, 212, 213, 214, 215, 216,
- 217, 218, 219, 220, 221, 222, 223, 224, 225, 226,
- 227, 228, 229, 10, 231, 10, 233, 234, 235, 236,
- 237, 238, 239, 240, 241, 242, 243, 244, 245, 246,
- 247, 248, 249, 250, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 262, 263, 264, 265, 266,
- 267, 268, 269, 270, 271, 10, 10, 10, 10, 10,
- 10, 10, 279, 10, 10, 10, 10, 10, 10, 10,
- 287, 288, 10, 290, 291, 10, 293, 294, 10, 10,
- 297, 298, 299, 300, 301, 302, 303, 304, 10, 10,
- 10, 308, 10, 10, 10, 10, 10, 10, 10, 10,
- 317, 318, 319, 320, 10, 10, 10, 10, 10, 10,
+ 10, 10, 188, 189, 190, 191, 192, 193, 194, 195,
+ 196, 197, 198, 199, 200, 201, 202, 203, 204, 205,
+ 206, 207, 208, 209, 210, 211, 212, 213, 214, 215,
+ 216, 217, 218, 219, 220, 221, 222, 223, 224, 225,
+ 226, 227, 228, 229, 10, 231, 10, 233, 234, 235,
+ 236, 237, 238, 239, 240, 241, 242, 243, 244, 245,
+ 246, 247, 248, 249, 250, 251, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 263, 264, 265,
+ 266, 267, 268, 269, 270, 271, 272, 10, 10, 10,
+ 10, 10, 10, 10, 280, 10, 10, 10, 10, 10,
+ 10, 10, 288, 289, 10, 291, 292, 10, 294, 295,
+ 10, 10, 298, 299, 300, 301, 302, 303, 304, 305,
+ 10, 10, 10, 309, 10, 10, 10, 10, 10, 10,
+ 10, 10, 318, 319, 320, 321, 10, 10, 10, 325,
+ 326, 10, 10, 10, 10, 10, 10, 10, 10, 10,
10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, -1, -1, -1, -1,
+ 10, 10, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 37, 37, 37, 37, 37
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 37,
+ 37, 37, 37, 37
};
/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
symbol of state STATE-NUM. */
static const yytype_int16 yystos[] =
{
- 0, 325, 0, 11, 12, 46, 52, 96, 114, 168,
- 230, 251, 272, 281, 305, 309, 315, 326, 327, 328,
- 331, 334, 337, 340, 349, 600, 611, 633, 637, 645,
- 658, 668, 329, 332, 335, 338, 341, 350, 601, 612,
- 634, 638, 646, 659, 669, 13, 14, 15, 16, 17,
+ 0, 328, 0, 11, 12, 46, 52, 96, 114, 168,
+ 230, 252, 273, 282, 306, 310, 316, 329, 330, 331,
+ 334, 337, 340, 343, 352, 606, 617, 639, 643, 651,
+ 664, 674, 332, 335, 338, 341, 344, 353, 607, 618,
+ 640, 644, 652, 665, 675, 13, 14, 15, 16, 17,
18, 19, 20, 21, 22, 23, 24, 25, 26, 27,
28, 29, 30, 31, 32, 33, 34, 35, 36, 37,
38, 39, 40, 41, 42, 43, 44, 49, 50, 51,
@@ -2764,10 +2101,10 @@ static const yytype_int16 yystos[] =
213, 214, 215, 216, 217, 218, 219, 220, 221, 222,
223, 224, 225, 226, 227, 228, 229, 231, 233, 234,
235, 236, 237, 238, 239, 240, 241, 242, 243, 244,
- 245, 246, 247, 248, 249, 250, 262, 263, 264, 265,
- 266, 267, 268, 269, 270, 271, 279, 287, 288, 290,
- 291, 293, 294, 297, 298, 299, 300, 301, 302, 303,
- 304, 308, 317, 318, 319, 320, 330, 352, 353, 354,
+ 245, 246, 247, 248, 249, 250, 251, 263, 264, 265,
+ 266, 267, 268, 269, 270, 271, 272, 280, 288, 289,
+ 291, 292, 294, 295, 298, 299, 300, 301, 302, 303,
+ 304, 305, 309, 318, 319, 320, 321, 325, 326, 333,
355, 356, 357, 358, 359, 360, 361, 362, 363, 364,
365, 366, 367, 368, 369, 370, 371, 372, 373, 374,
375, 376, 377, 378, 379, 380, 381, 382, 383, 384,
@@ -2789,26 +2126,27 @@ static const yytype_int16 yystos[] =
535, 536, 537, 538, 539, 540, 541, 542, 543, 544,
545, 546, 547, 548, 549, 550, 551, 552, 553, 554,
555, 556, 557, 558, 559, 560, 561, 562, 563, 564,
- 565, 566, 567, 641, 642, 643, 644, 667, 45, 47,
- 48, 110, 143, 146, 155, 296, 333, 568, 569, 570,
- 571, 572, 573, 574, 575, 45, 53, 54, 142, 144,
- 147, 295, 336, 576, 577, 578, 579, 580, 581, 582,
- 45, 81, 82, 108, 189, 190, 232, 339, 593, 594,
- 595, 596, 597, 598, 599, 45, 280, 282, 283, 284,
- 285, 286, 292, 321, 322, 342, 583, 584, 585, 586,
- 587, 588, 589, 590, 591, 592, 310, 311, 312, 313,
- 314, 323, 343, 344, 345, 346, 347, 348, 351, 583,
- 584, 585, 586, 587, 590, 97, 98, 99, 100, 101,
- 102, 103, 104, 602, 603, 604, 605, 606, 607, 608,
- 609, 610, 169, 170, 171, 172, 173, 174, 175, 176,
- 177, 178, 179, 180, 181, 182, 183, 184, 185, 186,
- 187, 613, 614, 615, 616, 617, 618, 619, 620, 621,
+ 565, 566, 567, 568, 569, 570, 571, 572, 573, 647,
+ 648, 649, 650, 673, 45, 47, 48, 110, 143, 146,
+ 155, 297, 336, 574, 575, 576, 577, 578, 579, 580,
+ 581, 45, 53, 54, 142, 144, 147, 296, 339, 582,
+ 583, 584, 585, 586, 587, 588, 45, 81, 82, 108,
+ 189, 190, 232, 342, 599, 600, 601, 602, 603, 604,
+ 605, 45, 281, 283, 284, 285, 286, 287, 293, 322,
+ 323, 345, 589, 590, 591, 592, 593, 594, 595, 596,
+ 597, 598, 311, 312, 313, 314, 315, 324, 346, 347,
+ 348, 349, 350, 351, 354, 589, 590, 591, 592, 593,
+ 596, 97, 98, 99, 100, 101, 102, 103, 104, 608,
+ 609, 610, 611, 612, 613, 614, 615, 616, 169, 170,
+ 171, 172, 173, 174, 175, 176, 177, 178, 179, 180,
+ 181, 182, 183, 184, 185, 186, 187, 619, 620, 621,
622, 623, 624, 625, 626, 627, 628, 629, 630, 631,
- 632, 115, 635, 636, 316, 639, 640, 252, 253, 254,
- 255, 256, 257, 258, 259, 260, 261, 647, 648, 649,
- 650, 651, 652, 653, 654, 655, 656, 657, 273, 274,
- 275, 276, 277, 278, 660, 661, 662, 663, 664, 665,
- 666, 306, 307, 670, 671, 672, 10, 10, 10, 10,
+ 632, 633, 634, 635, 636, 637, 638, 115, 641, 642,
+ 317, 645, 646, 253, 254, 255, 256, 257, 258, 259,
+ 260, 261, 262, 653, 654, 655, 656, 657, 658, 659,
+ 660, 661, 662, 663, 274, 275, 276, 277, 278, 279,
+ 666, 667, 668, 669, 670, 671, 672, 307, 308, 676,
+ 677, 678, 10, 10, 10, 10, 10, 10, 10, 10,
10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
@@ -2841,43 +2179,43 @@ static const yytype_int16 yystos[] =
10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10
+ 10, 10
};
/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
static const yytype_int16 yyr1[] =
{
- 0, 324, 325, 325, 326, 326, 326, 326, 326, 326,
- 326, 326, 326, 326, 326, 326, 326, 326, 327, 328,
- 329, 329, 330, 330, 330, 330, 330, 330, 330, 330,
- 330, 330, 330, 330, 330, 330, 330, 330, 330, 330,
- 330, 330, 330, 330, 330, 330, 330, 330, 330, 330,
- 330, 330, 330, 330, 330, 330, 330, 330, 330, 330,
- 330, 330, 330, 330, 330, 330, 330, 330, 330, 330,
- 330, 330, 330, 330, 330, 330, 330, 330, 330, 330,
- 330, 330, 330, 330, 330, 330, 330, 330, 330, 330,
- 330, 330, 330, 330, 330, 330, 330, 330, 330, 330,
- 330, 330, 330, 330, 330, 330, 330, 330, 330, 330,
- 330, 330, 330, 330, 330, 330, 330, 330, 330, 330,
- 330, 330, 330, 330, 330, 330, 330, 330, 330, 330,
- 330, 330, 330, 330, 330, 330, 330, 330, 330, 330,
- 330, 330, 330, 330, 330, 330, 330, 330, 330, 330,
- 330, 330, 330, 330, 330, 330, 330, 330, 330, 330,
- 330, 330, 330, 330, 330, 330, 330, 330, 330, 330,
- 330, 330, 330, 330, 330, 330, 330, 330, 330, 330,
- 330, 330, 330, 330, 330, 330, 330, 330, 330, 330,
- 330, 330, 330, 330, 330, 330, 330, 330, 330, 330,
- 330, 330, 330, 330, 330, 330, 330, 330, 330, 330,
- 330, 330, 330, 330, 330, 330, 330, 330, 330, 330,
- 330, 330, 330, 330, 330, 330, 330, 330, 330, 330,
- 330, 330, 330, 330, 330, 330, 330, 330, 330, 330,
- 330, 330, 330, 331, 332, 332, 333, 333, 333, 333,
- 333, 333, 333, 333, 334, 335, 335, 336, 336, 336,
- 336, 336, 336, 336, 337, 338, 338, 339, 339, 339,
- 339, 339, 339, 339, 340, 341, 341, 342, 342, 342,
- 342, 342, 342, 342, 342, 342, 342, 343, 344, 345,
- 346, 347, 348, 349, 350, 350, 351, 351, 351, 351,
- 351, 351, 351, 351, 351, 351, 351, 351, 352, 353,
+ 0, 327, 328, 328, 329, 329, 329, 329, 329, 329,
+ 329, 329, 329, 329, 329, 329, 329, 329, 330, 331,
+ 332, 332, 333, 333, 333, 333, 333, 333, 333, 333,
+ 333, 333, 333, 333, 333, 333, 333, 333, 333, 333,
+ 333, 333, 333, 333, 333, 333, 333, 333, 333, 333,
+ 333, 333, 333, 333, 333, 333, 333, 333, 333, 333,
+ 333, 333, 333, 333, 333, 333, 333, 333, 333, 333,
+ 333, 333, 333, 333, 333, 333, 333, 333, 333, 333,
+ 333, 333, 333, 333, 333, 333, 333, 333, 333, 333,
+ 333, 333, 333, 333, 333, 333, 333, 333, 333, 333,
+ 333, 333, 333, 333, 333, 333, 333, 333, 333, 333,
+ 333, 333, 333, 333, 333, 333, 333, 333, 333, 333,
+ 333, 333, 333, 333, 333, 333, 333, 333, 333, 333,
+ 333, 333, 333, 333, 333, 333, 333, 333, 333, 333,
+ 333, 333, 333, 333, 333, 333, 333, 333, 333, 333,
+ 333, 333, 333, 333, 333, 333, 333, 333, 333, 333,
+ 333, 333, 333, 333, 333, 333, 333, 333, 333, 333,
+ 333, 333, 333, 333, 333, 333, 333, 333, 333, 333,
+ 333, 333, 333, 333, 333, 333, 333, 333, 333, 333,
+ 333, 333, 333, 333, 333, 333, 333, 333, 333, 333,
+ 333, 333, 333, 333, 333, 333, 333, 333, 333, 333,
+ 333, 333, 333, 333, 333, 333, 333, 333, 333, 333,
+ 333, 333, 333, 333, 333, 333, 333, 333, 333, 333,
+ 333, 333, 333, 333, 333, 333, 333, 333, 333, 333,
+ 333, 333, 333, 333, 333, 333, 334, 335, 335, 336,
+ 336, 336, 336, 336, 336, 336, 336, 337, 338, 338,
+ 339, 339, 339, 339, 339, 339, 339, 340, 341, 341,
+ 342, 342, 342, 342, 342, 342, 342, 343, 344, 344,
+ 345, 345, 345, 345, 345, 345, 345, 345, 345, 345,
+ 346, 347, 348, 349, 350, 351, 352, 353, 353, 354,
+ 354, 354, 354, 354, 354, 354, 354, 354, 354, 354,
354, 355, 356, 357, 358, 359, 360, 361, 362, 363,
364, 365, 366, 367, 368, 369, 370, 371, 372, 373,
374, 375, 376, 377, 378, 379, 380, 381, 382, 383,
@@ -2902,19 +2240,20 @@ static const yytype_int16 yyr1[] =
564, 565, 566, 567, 568, 569, 570, 571, 572, 573,
574, 575, 576, 577, 578, 579, 580, 581, 582, 583,
584, 585, 586, 587, 588, 589, 590, 591, 592, 593,
- 594, 595, 596, 597, 598, 599, 600, 601, 601, 602,
- 602, 602, 602, 602, 602, 602, 602, 603, 604, 605,
- 606, 607, 608, 609, 610, 611, 612, 612, 613, 613,
- 613, 613, 613, 613, 613, 613, 613, 613, 613, 613,
- 613, 613, 613, 613, 613, 613, 613, 614, 615, 616,
- 617, 618, 619, 620, 621, 622, 623, 624, 625, 626,
- 627, 628, 629, 630, 631, 632, 633, 634, 634, 635,
- 636, 637, 638, 638, 639, 640, 641, 642, 643, 644,
- 645, 646, 646, 647, 647, 647, 647, 647, 647, 647,
- 647, 647, 647, 648, 649, 650, 651, 652, 653, 654,
- 655, 656, 657, 658, 659, 659, 660, 660, 660, 660,
- 660, 660, 661, 662, 663, 664, 665, 666, 667, 668,
- 669, 669, 670, 670, 671, 672
+ 594, 595, 596, 597, 598, 599, 600, 601, 602, 603,
+ 604, 605, 606, 607, 607, 608, 608, 608, 608, 608,
+ 608, 608, 608, 609, 610, 611, 612, 613, 614, 615,
+ 616, 617, 618, 618, 619, 619, 619, 619, 619, 619,
+ 619, 619, 619, 619, 619, 619, 619, 619, 619, 619,
+ 619, 619, 619, 620, 621, 622, 623, 624, 625, 626,
+ 627, 628, 629, 630, 631, 632, 633, 634, 635, 636,
+ 637, 638, 639, 640, 640, 641, 642, 643, 644, 644,
+ 645, 646, 647, 648, 649, 650, 651, 652, 652, 653,
+ 653, 653, 653, 653, 653, 653, 653, 653, 653, 654,
+ 655, 656, 657, 658, 659, 660, 661, 662, 663, 664,
+ 665, 665, 666, 666, 666, 666, 666, 666, 667, 668,
+ 669, 670, 671, 672, 673, 674, 675, 675, 676, 676,
+ 677, 678
};
/* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */
@@ -2944,13 +2283,14 @@ static const yytype_int8 yyr2[] =
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 2, 0, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 2, 0, 1, 1, 1,
- 1, 1, 1, 1, 1, 2, 0, 1, 1, 1,
- 1, 1, 1, 1, 1, 2, 0, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 2, 2, 2,
- 2, 2, 2, 1, 2, 0, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 2, 2,
+ 1, 1, 1, 1, 1, 1, 1, 2, 0, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 2, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 2, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 2, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 2, 2, 2, 2, 2, 2, 1, 2, 0, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
@@ -2963,31 +2303,31 @@ static const yytype_int8 yyr2[] =
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 3, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 3, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 3, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 3, 3, 4,
- 4, 4, 3, 3, 2, 2, 2, 2, 2, 2,
- 3, 3, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 3, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 3, 3, 4, 4, 4, 3, 3, 2,
+ 2, 2, 2, 2, 2, 3, 3, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 3, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 3, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 3, 3, 3, 2, 2, 2, 1, 2, 0, 1,
- 1, 1, 1, 1, 1, 1, 1, 2, 2, 2,
- 2, 2, 2, 2, 2, 1, 2, 0, 1, 1,
+ 2, 2, 2, 2, 2, 2, 3, 3, 3, 2,
+ 2, 2, 1, 2, 0, 1, 1, 1, 1, 1,
+ 1, 1, 1, 2, 2, 2, 2, 2, 2, 2,
+ 2, 1, 2, 0, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 1, 2, 0, 1,
- 2, 1, 2, 0, 1, 2, 2, 2, 3, 3,
- 1, 2, 0, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 1, 2, 0, 1, 1, 1, 1,
- 1, 1, 2, 2, 2, 2, 2, 2, 3, 1,
- 2, 0, 1, 1, 2, 2
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 1, 2, 0, 1, 2, 1, 2, 0,
+ 1, 2, 2, 2, 3, 3, 1, 2, 0, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 1,
+ 2, 0, 1, 1, 1, 1, 1, 1, 2, 2,
+ 2, 2, 2, 2, 3, 1, 2, 0, 1, 1,
+ 2, 2
};
@@ -3066,7 +2406,7 @@ yy_symbol_value_print (FILE *yyo,
yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep)
{
FILE *yyoutput = yyo;
- YYUSE (yyoutput);
+ YY_USE (yyoutput);
if (!yyvaluep)
return;
# ifdef YYPRINT
@@ -3074,7 +2414,7 @@ yy_symbol_value_print (FILE *yyo,
YYPRINT (yyo, yytoknum[yykind], *yyvaluep);
# endif
YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
- YYUSE (yykind);
+ YY_USE (yykind);
YY_IGNORE_MAYBE_UNINITIALIZED_END
}
@@ -3188,18 +2528,18 @@ static void
yydestruct (const char *yymsg,
yysymbol_kind_t yykind, YYSTYPE *yyvaluep)
{
- YYUSE (yyvaluep);
+ YY_USE (yyvaluep);
if (!yymsg)
yymsg = "Deleting";
YY_SYMBOL_PRINT (yymsg, yykind, yyvaluep, yylocationp);
YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
- YYUSE (yykind);
+ YY_USE (yykind);
YY_IGNORE_MAYBE_UNINITIALIZED_END
}
-/* The lookahead symbol. */
+/* Lookahead token kind. */
int yychar;
/* The semantic value of the lookahead symbol. */
@@ -3217,34 +2557,30 @@ int yynerrs;
int
yyparse (void)
{
- yy_state_fast_t yystate;
+ yy_state_fast_t yystate = 0;
/* Number of tokens to shift before error messages enabled. */
- int yyerrstatus;
-
- /* The stacks and their tools:
- 'yyss': related to states.
- 'yyvs': related to semantic values.
+ int yyerrstatus = 0;
- Refer to the stacks through separate pointers, to allow yyoverflow
+ /* Refer to the stacks through separate pointers, to allow yyoverflow
to reallocate them elsewhere. */
/* Their size. */
- YYPTRDIFF_T yystacksize;
+ YYPTRDIFF_T yystacksize = YYINITDEPTH;
- /* The state stack. */
+ /* The state stack: array, bottom, top. */
yy_state_t yyssa[YYINITDEPTH];
- yy_state_t *yyss;
- yy_state_t *yyssp;
+ yy_state_t *yyss = yyssa;
+ yy_state_t *yyssp = yyss;
- /* The semantic value stack. */
+ /* The semantic value stack: array, bottom, top. */
YYSTYPE yyvsa[YYINITDEPTH];
- YYSTYPE *yyvs;
- YYSTYPE *yyvsp;
+ YYSTYPE *yyvs = yyvsa;
+ YYSTYPE *yyvsp = yyvs;
int yyn;
/* The return value of yyparse. */
int yyresult;
- /* Lookahead token as an internal (translated) token number. */
+ /* Lookahead symbol kind. */
yysymbol_kind_t yytoken = YYSYMBOL_YYEMPTY;
/* The variables used to return semantic value and location from the
action routines. */
@@ -3258,15 +2594,6 @@ yyparse (void)
Keep to zero when no symbol should be popped. */
int yylen = 0;
- yynerrs = 0;
- yystate = 0;
- yyerrstatus = 0;
-
- yystacksize = YYINITDEPTH;
- yyssp = yyss = yyssa;
- yyvsp = yyvs = yyvsa;
-
-
YYDPRINTF ((stderr, "Starting parse\n"));
yychar = YYEMPTY; /* Cause a token to be read. */
@@ -3467,24 +2794,24 @@ yyreduce:
YY_REDUCE_PRINT (yyn);
switch (yyn)
{
- case 18:
-#line 204 "util/configparser.y"
+ case 18: /* force_toplevel: VAR_FORCE_TOPLEVEL */
+#line 205 "util/configparser.y"
{
OUTYY(("\nP(force-toplevel)\n"));
}
-#line 3476 "util/configparser.c"
+#line 2803 "util/configparser.c"
break;
- case 19:
-#line 210 "util/configparser.y"
+ case 19: /* serverstart: VAR_SERVER */
+#line 211 "util/configparser.y"
{
OUTYY(("\nP(server:)\n"));
}
-#line 3484 "util/configparser.c"
+#line 2811 "util/configparser.c"
break;
- case 243:
-#line 318 "util/configparser.y"
+ case 246: /* stubstart: VAR_STUB_ZONE */
+#line 320 "util/configparser.y"
{
struct config_stub* s;
OUTYY(("\nP(stub_zone:)\n"));
@@ -3496,11 +2823,11 @@ yyreduce:
yyerror("out of memory");
}
}
-#line 3500 "util/configparser.c"
+#line 2827 "util/configparser.c"
break;
- case 254:
-#line 336 "util/configparser.y"
+ case 257: /* forwardstart: VAR_FORWARD_ZONE */
+#line 338 "util/configparser.y"
{
struct config_stub* s;
OUTYY(("\nP(forward_zone:)\n"));
@@ -3512,11 +2839,11 @@ yyreduce:
yyerror("out of memory");
}
}
-#line 3516 "util/configparser.c"
+#line 2843 "util/configparser.c"
break;
- case 264:
-#line 354 "util/configparser.y"
+ case 267: /* viewstart: VAR_VIEW */
+#line 356 "util/configparser.y"
{
struct config_view* s;
OUTYY(("\nP(view:)\n"));
@@ -3530,11 +2857,11 @@ yyreduce:
yyerror("out of memory");
}
}
-#line 3534 "util/configparser.c"
+#line 2861 "util/configparser.c"
break;
- case 274:
-#line 374 "util/configparser.y"
+ case 277: /* authstart: VAR_AUTH_ZONE */
+#line 376 "util/configparser.y"
{
struct config_auth* s;
OUTYY(("\nP(auth_zone:)\n"));
@@ -3553,11 +2880,11 @@ yyreduce:
yyerror("out of memory");
}
}
-#line 3557 "util/configparser.c"
+#line 2884 "util/configparser.c"
break;
- case 287:
-#line 401 "util/configparser.y"
+ case 290: /* rpz_tag: VAR_TAGS STRING_ARG */
+#line 403 "util/configparser.y"
{
uint8_t* bitlist;
size_t len = 0;
@@ -3574,11 +2901,11 @@ yyreduce:
}
}
-#line 3578 "util/configparser.c"
+#line 2905 "util/configparser.c"
break;
- case 288:
-#line 420 "util/configparser.y"
+ case 291: /* rpz_action_override: VAR_RPZ_ACTION_OVERRIDE STRING_ARG */
+#line 422 "util/configparser.y"
{
OUTYY(("P(rpz_action_override:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "nxdomain")!=0 && strcmp((yyvsp[0].str), "nodata")!=0 &&
@@ -3593,21 +2920,21 @@ yyreduce:
cfg_parser->cfg->auths->rpz_action_override = (yyvsp[0].str);
}
}
-#line 3597 "util/configparser.c"
+#line 2924 "util/configparser.c"
break;
- case 289:
-#line 437 "util/configparser.y"
+ case 292: /* rpz_cname_override: VAR_RPZ_CNAME_OVERRIDE STRING_ARG */
+#line 439 "util/configparser.y"
{
OUTYY(("P(rpz_cname_override:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->auths->rpz_cname);
cfg_parser->cfg->auths->rpz_cname = (yyvsp[0].str);
}
-#line 3607 "util/configparser.c"
+#line 2934 "util/configparser.c"
break;
- case 290:
-#line 445 "util/configparser.y"
+ case 293: /* rpz_log: VAR_RPZ_LOG STRING_ARG */
+#line 447 "util/configparser.y"
{
OUTYY(("P(rpz_log:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3615,21 +2942,21 @@ yyreduce:
else cfg_parser->cfg->auths->rpz_log = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3619 "util/configparser.c"
+#line 2946 "util/configparser.c"
break;
- case 291:
-#line 455 "util/configparser.y"
+ case 294: /* rpz_log_name: VAR_RPZ_LOG_NAME STRING_ARG */
+#line 457 "util/configparser.y"
{
OUTYY(("P(rpz_log_name:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->auths->rpz_log_name);
cfg_parser->cfg->auths->rpz_log_name = (yyvsp[0].str);
}
-#line 3629 "util/configparser.c"
+#line 2956 "util/configparser.c"
break;
- case 292:
-#line 462 "util/configparser.y"
+ case 295: /* rpz_signal_nxdomain_ra: VAR_RPZ_SIGNAL_NXDOMAIN_RA STRING_ARG */
+#line 464 "util/configparser.y"
{
OUTYY(("P(rpz_signal_nxdomain_ra:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3637,11 +2964,11 @@ yyreduce:
else cfg_parser->cfg->auths->rpz_signal_nxdomain_ra = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3641 "util/configparser.c"
+#line 2968 "util/configparser.c"
break;
- case 293:
-#line 472 "util/configparser.y"
+ case 296: /* rpzstart: VAR_RPZ */
+#line 474 "util/configparser.y"
{
struct config_auth* s;
OUTYY(("\nP(rpz:)\n"));
@@ -3658,11 +2985,11 @@ yyreduce:
yyerror("out of memory");
}
}
-#line 3662 "util/configparser.c"
+#line 2989 "util/configparser.c"
break;
- case 308:
-#line 496 "util/configparser.y"
+ case 311: /* server_num_threads: VAR_NUM_THREADS STRING_ARG */
+#line 498 "util/configparser.y"
{
OUTYY(("P(server_num_threads:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -3670,11 +2997,11 @@ yyreduce:
else cfg_parser->cfg->num_threads = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 3674 "util/configparser.c"
+#line 3001 "util/configparser.c"
break;
- case 309:
-#line 505 "util/configparser.y"
+ case 312: /* server_verbosity: VAR_VERBOSITY STRING_ARG */
+#line 507 "util/configparser.y"
{
OUTYY(("P(server_verbosity:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -3682,11 +3009,11 @@ yyreduce:
else cfg_parser->cfg->verbosity = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 3686 "util/configparser.c"
+#line 3013 "util/configparser.c"
break;
- case 310:
-#line 514 "util/configparser.y"
+ case 313: /* server_statistics_interval: VAR_STATISTICS_INTERVAL STRING_ARG */
+#line 516 "util/configparser.y"
{
OUTYY(("P(server_statistics_interval:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "") == 0 || strcmp((yyvsp[0].str), "0") == 0)
@@ -3696,11 +3023,11 @@ yyreduce:
else cfg_parser->cfg->stat_interval = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 3700 "util/configparser.c"
+#line 3027 "util/configparser.c"
break;
- case 311:
-#line 525 "util/configparser.y"
+ case 314: /* server_statistics_cumulative: VAR_STATISTICS_CUMULATIVE STRING_ARG */
+#line 527 "util/configparser.y"
{
OUTYY(("P(server_statistics_cumulative:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3708,11 +3035,11 @@ yyreduce:
else cfg_parser->cfg->stat_cumulative = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3712 "util/configparser.c"
+#line 3039 "util/configparser.c"
break;
- case 312:
-#line 534 "util/configparser.y"
+ case 315: /* server_extended_statistics: VAR_EXTENDED_STATISTICS STRING_ARG */
+#line 536 "util/configparser.y"
{
OUTYY(("P(server_extended_statistics:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3720,11 +3047,11 @@ yyreduce:
else cfg_parser->cfg->stat_extended = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3724 "util/configparser.c"
+#line 3051 "util/configparser.c"
break;
- case 313:
-#line 543 "util/configparser.y"
+ case 316: /* server_shm_enable: VAR_SHM_ENABLE STRING_ARG */
+#line 545 "util/configparser.y"
{
OUTYY(("P(server_shm_enable:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3732,11 +3059,11 @@ yyreduce:
else cfg_parser->cfg->shm_enable = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3736 "util/configparser.c"
+#line 3063 "util/configparser.c"
break;
- case 314:
-#line 552 "util/configparser.y"
+ case 317: /* server_shm_key: VAR_SHM_KEY STRING_ARG */
+#line 554 "util/configparser.y"
{
OUTYY(("P(server_shm_key:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "") == 0 || strcmp((yyvsp[0].str), "0") == 0)
@@ -3746,11 +3073,11 @@ yyreduce:
else cfg_parser->cfg->shm_key = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 3750 "util/configparser.c"
+#line 3077 "util/configparser.c"
break;
- case 315:
-#line 563 "util/configparser.y"
+ case 318: /* server_port: VAR_PORT STRING_ARG */
+#line 565 "util/configparser.y"
{
OUTYY(("P(server_port:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0)
@@ -3758,11 +3085,11 @@ yyreduce:
else cfg_parser->cfg->port = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 3762 "util/configparser.c"
+#line 3089 "util/configparser.c"
break;
- case 316:
-#line 572 "util/configparser.y"
+ case 319: /* server_send_client_subnet: VAR_SEND_CLIENT_SUBNET STRING_ARG */
+#line 574 "util/configparser.y"
{
#ifdef CLIENT_SUBNET
OUTYY(("P(server_send_client_subnet:%s)\n", (yyvsp[0].str)));
@@ -3773,11 +3100,11 @@ yyreduce:
free((yyvsp[0].str));
#endif
}
-#line 3777 "util/configparser.c"
+#line 3104 "util/configparser.c"
break;
- case 317:
-#line 584 "util/configparser.y"
+ case 320: /* server_client_subnet_zone: VAR_CLIENT_SUBNET_ZONE STRING_ARG */
+#line 586 "util/configparser.y"
{
#ifdef CLIENT_SUBNET
OUTYY(("P(server_client_subnet_zone:%s)\n", (yyvsp[0].str)));
@@ -3789,11 +3116,11 @@ yyreduce:
free((yyvsp[0].str));
#endif
}
-#line 3793 "util/configparser.c"
+#line 3120 "util/configparser.c"
break;
- case 318:
-#line 598 "util/configparser.y"
+ case 321: /* server_client_subnet_always_forward: VAR_CLIENT_SUBNET_ALWAYS_FORWARD STRING_ARG */
+#line 600 "util/configparser.y"
{
#ifdef CLIENT_SUBNET
OUTYY(("P(server_client_subnet_always_forward:%s)\n", (yyvsp[0].str)));
@@ -3807,11 +3134,11 @@ yyreduce:
#endif
free((yyvsp[0].str));
}
-#line 3811 "util/configparser.c"
+#line 3138 "util/configparser.c"
break;
- case 319:
-#line 613 "util/configparser.y"
+ case 322: /* server_client_subnet_opcode: VAR_CLIENT_SUBNET_OPCODE STRING_ARG */
+#line 615 "util/configparser.y"
{
#ifdef CLIENT_SUBNET
OUTYY(("P(client_subnet_opcode:%s)\n", (yyvsp[0].str)));
@@ -3821,11 +3148,11 @@ yyreduce:
#endif
free((yyvsp[0].str));
}
-#line 3825 "util/configparser.c"
+#line 3152 "util/configparser.c"
break;
- case 320:
-#line 624 "util/configparser.y"
+ case 323: /* server_max_client_subnet_ipv4: VAR_MAX_CLIENT_SUBNET_IPV4 STRING_ARG */
+#line 626 "util/configparser.y"
{
#ifdef CLIENT_SUBNET
OUTYY(("P(max_client_subnet_ipv4:%s)\n", (yyvsp[0].str)));
@@ -3841,11 +3168,11 @@ yyreduce:
#endif
free((yyvsp[0].str));
}
-#line 3845 "util/configparser.c"
+#line 3172 "util/configparser.c"
break;
- case 321:
-#line 641 "util/configparser.y"
+ case 324: /* server_max_client_subnet_ipv6: VAR_MAX_CLIENT_SUBNET_IPV6 STRING_ARG */
+#line 643 "util/configparser.y"
{
#ifdef CLIENT_SUBNET
OUTYY(("P(max_client_subnet_ipv6:%s)\n", (yyvsp[0].str)));
@@ -3861,11 +3188,11 @@ yyreduce:
#endif
free((yyvsp[0].str));
}
-#line 3865 "util/configparser.c"
+#line 3192 "util/configparser.c"
break;
- case 322:
-#line 658 "util/configparser.y"
+ case 325: /* server_min_client_subnet_ipv4: VAR_MIN_CLIENT_SUBNET_IPV4 STRING_ARG */
+#line 660 "util/configparser.y"
{
#ifdef CLIENT_SUBNET
OUTYY(("P(min_client_subnet_ipv4:%s)\n", (yyvsp[0].str)));
@@ -3881,11 +3208,11 @@ yyreduce:
#endif
free((yyvsp[0].str));
}
-#line 3885 "util/configparser.c"
+#line 3212 "util/configparser.c"
break;
- case 323:
-#line 675 "util/configparser.y"
+ case 326: /* server_min_client_subnet_ipv6: VAR_MIN_CLIENT_SUBNET_IPV6 STRING_ARG */
+#line 677 "util/configparser.y"
{
#ifdef CLIENT_SUBNET
OUTYY(("P(min_client_subnet_ipv6:%s)\n", (yyvsp[0].str)));
@@ -3901,11 +3228,11 @@ yyreduce:
#endif
free((yyvsp[0].str));
}
-#line 3905 "util/configparser.c"
+#line 3232 "util/configparser.c"
break;
- case 324:
-#line 692 "util/configparser.y"
+ case 327: /* server_max_ecs_tree_size_ipv4: VAR_MAX_ECS_TREE_SIZE_IPV4 STRING_ARG */
+#line 694 "util/configparser.y"
{
#ifdef CLIENT_SUBNET
OUTYY(("P(max_ecs_tree_size_ipv4:%s)\n", (yyvsp[0].str)));
@@ -3919,11 +3246,11 @@ yyreduce:
#endif
free((yyvsp[0].str));
}
-#line 3923 "util/configparser.c"
+#line 3250 "util/configparser.c"
break;
- case 325:
-#line 707 "util/configparser.y"
+ case 328: /* server_max_ecs_tree_size_ipv6: VAR_MAX_ECS_TREE_SIZE_IPV6 STRING_ARG */
+#line 709 "util/configparser.y"
{
#ifdef CLIENT_SUBNET
OUTYY(("P(max_ecs_tree_size_ipv6:%s)\n", (yyvsp[0].str)));
@@ -3937,11 +3264,11 @@ yyreduce:
#endif
free((yyvsp[0].str));
}
-#line 3941 "util/configparser.c"
+#line 3268 "util/configparser.c"
break;
- case 326:
-#line 722 "util/configparser.y"
+ case 329: /* server_interface: VAR_INTERFACE STRING_ARG */
+#line 724 "util/configparser.y"
{
OUTYY(("P(server_interface:%s)\n", (yyvsp[0].str)));
if(cfg_parser->cfg->num_ifs == 0)
@@ -3953,11 +3280,11 @@ yyreduce:
else
cfg_parser->cfg->ifs[cfg_parser->cfg->num_ifs++] = (yyvsp[0].str);
}
-#line 3957 "util/configparser.c"
+#line 3284 "util/configparser.c"
break;
- case 327:
-#line 735 "util/configparser.y"
+ case 330: /* server_outgoing_interface: VAR_OUTGOING_INTERFACE STRING_ARG */
+#line 737 "util/configparser.y"
{
OUTYY(("P(server_outgoing_interface:%s)\n", (yyvsp[0].str)));
if(cfg_parser->cfg->num_out_ifs == 0)
@@ -3971,11 +3298,11 @@ yyreduce:
cfg_parser->cfg->out_ifs[
cfg_parser->cfg->num_out_ifs++] = (yyvsp[0].str);
}
-#line 3975 "util/configparser.c"
+#line 3302 "util/configparser.c"
break;
- case 328:
-#line 750 "util/configparser.y"
+ case 331: /* server_outgoing_range: VAR_OUTGOING_RANGE STRING_ARG */
+#line 752 "util/configparser.y"
{
OUTYY(("P(server_outgoing_range:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0)
@@ -3983,11 +3310,11 @@ yyreduce:
else cfg_parser->cfg->outgoing_num_ports = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 3987 "util/configparser.c"
+#line 3314 "util/configparser.c"
break;
- case 329:
-#line 759 "util/configparser.y"
+ case 332: /* server_outgoing_port_permit: VAR_OUTGOING_PORT_PERMIT STRING_ARG */
+#line 761 "util/configparser.y"
{
OUTYY(("P(server_outgoing_port_permit:%s)\n", (yyvsp[0].str)));
if(!cfg_mark_ports((yyvsp[0].str), 1,
@@ -3995,11 +3322,11 @@ yyreduce:
yyerror("port number or range (\"low-high\") expected");
free((yyvsp[0].str));
}
-#line 3999 "util/configparser.c"
+#line 3326 "util/configparser.c"
break;
- case 330:
-#line 768 "util/configparser.y"
+ case 333: /* server_outgoing_port_avoid: VAR_OUTGOING_PORT_AVOID STRING_ARG */
+#line 770 "util/configparser.y"
{
OUTYY(("P(server_outgoing_port_avoid:%s)\n", (yyvsp[0].str)));
if(!cfg_mark_ports((yyvsp[0].str), 0,
@@ -4007,11 +3334,11 @@ yyreduce:
yyerror("port number or range (\"low-high\") expected");
free((yyvsp[0].str));
}
-#line 4011 "util/configparser.c"
+#line 3338 "util/configparser.c"
break;
- case 331:
-#line 777 "util/configparser.y"
+ case 334: /* server_outgoing_num_tcp: VAR_OUTGOING_NUM_TCP STRING_ARG */
+#line 779 "util/configparser.y"
{
OUTYY(("P(server_outgoing_num_tcp:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -4019,11 +3346,11 @@ yyreduce:
else cfg_parser->cfg->outgoing_num_tcp = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 4023 "util/configparser.c"
+#line 3350 "util/configparser.c"
break;
- case 332:
-#line 786 "util/configparser.y"
+ case 335: /* server_incoming_num_tcp: VAR_INCOMING_NUM_TCP STRING_ARG */
+#line 788 "util/configparser.y"
{
OUTYY(("P(server_incoming_num_tcp:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -4031,11 +3358,11 @@ yyreduce:
else cfg_parser->cfg->incoming_num_tcp = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 4035 "util/configparser.c"
+#line 3362 "util/configparser.c"
break;
- case 333:
-#line 795 "util/configparser.y"
+ case 336: /* server_interface_automatic: VAR_INTERFACE_AUTOMATIC STRING_ARG */
+#line 797 "util/configparser.y"
{
OUTYY(("P(server_interface_automatic:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4043,11 +3370,21 @@ yyreduce:
else cfg_parser->cfg->if_automatic = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4047 "util/configparser.c"
+#line 3374 "util/configparser.c"
+ break;
+
+ case 337: /* server_interface_automatic_ports: VAR_INTERFACE_AUTOMATIC_PORTS STRING_ARG */
+#line 806 "util/configparser.y"
+ {
+ OUTYY(("P(server_interface_automatic_ports:%s)\n", (yyvsp[0].str)));
+ free(cfg_parser->cfg->if_automatic_ports);
+ cfg_parser->cfg->if_automatic_ports = (yyvsp[0].str);
+ }
+#line 3384 "util/configparser.c"
break;
- case 334:
-#line 804 "util/configparser.y"
+ case 338: /* server_do_ip4: VAR_DO_IP4 STRING_ARG */
+#line 813 "util/configparser.y"
{
OUTYY(("P(server_do_ip4:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4055,11 +3392,11 @@ yyreduce:
else cfg_parser->cfg->do_ip4 = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4059 "util/configparser.c"
+#line 3396 "util/configparser.c"
break;
- case 335:
-#line 813 "util/configparser.y"
+ case 339: /* server_do_ip6: VAR_DO_IP6 STRING_ARG */
+#line 822 "util/configparser.y"
{
OUTYY(("P(server_do_ip6:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4067,11 +3404,11 @@ yyreduce:
else cfg_parser->cfg->do_ip6 = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4071 "util/configparser.c"
+#line 3408 "util/configparser.c"
break;
- case 336:
-#line 822 "util/configparser.y"
+ case 340: /* server_do_udp: VAR_DO_UDP STRING_ARG */
+#line 831 "util/configparser.y"
{
OUTYY(("P(server_do_udp:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4079,11 +3416,11 @@ yyreduce:
else cfg_parser->cfg->do_udp = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4083 "util/configparser.c"
+#line 3420 "util/configparser.c"
break;
- case 337:
-#line 831 "util/configparser.y"
+ case 341: /* server_do_tcp: VAR_DO_TCP STRING_ARG */
+#line 840 "util/configparser.y"
{
OUTYY(("P(server_do_tcp:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4091,11 +3428,11 @@ yyreduce:
else cfg_parser->cfg->do_tcp = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4095 "util/configparser.c"
+#line 3432 "util/configparser.c"
break;
- case 338:
-#line 840 "util/configparser.y"
+ case 342: /* server_prefer_ip4: VAR_PREFER_IP4 STRING_ARG */
+#line 849 "util/configparser.y"
{
OUTYY(("P(server_prefer_ip4:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4103,11 +3440,11 @@ yyreduce:
else cfg_parser->cfg->prefer_ip4 = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4107 "util/configparser.c"
+#line 3444 "util/configparser.c"
break;
- case 339:
-#line 849 "util/configparser.y"
+ case 343: /* server_prefer_ip6: VAR_PREFER_IP6 STRING_ARG */
+#line 858 "util/configparser.y"
{
OUTYY(("P(server_prefer_ip6:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4115,11 +3452,11 @@ yyreduce:
else cfg_parser->cfg->prefer_ip6 = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4119 "util/configparser.c"
+#line 3456 "util/configparser.c"
break;
- case 340:
-#line 858 "util/configparser.y"
+ case 344: /* server_tcp_mss: VAR_TCP_MSS STRING_ARG */
+#line 867 "util/configparser.y"
{
OUTYY(("P(server_tcp_mss:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -4127,11 +3464,11 @@ yyreduce:
else cfg_parser->cfg->tcp_mss = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 4131 "util/configparser.c"
+#line 3468 "util/configparser.c"
break;
- case 341:
-#line 867 "util/configparser.y"
+ case 345: /* server_outgoing_tcp_mss: VAR_OUTGOING_TCP_MSS STRING_ARG */
+#line 876 "util/configparser.y"
{
OUTYY(("P(server_outgoing_tcp_mss:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -4139,11 +3476,11 @@ yyreduce:
else cfg_parser->cfg->outgoing_tcp_mss = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 4143 "util/configparser.c"
+#line 3480 "util/configparser.c"
break;
- case 342:
-#line 876 "util/configparser.y"
+ case 346: /* server_tcp_idle_timeout: VAR_TCP_IDLE_TIMEOUT STRING_ARG */
+#line 885 "util/configparser.y"
{
OUTYY(("P(server_tcp_idle_timeout:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -4155,11 +3492,11 @@ yyreduce:
else cfg_parser->cfg->tcp_idle_timeout = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 4159 "util/configparser.c"
+#line 3496 "util/configparser.c"
break;
- case 343:
-#line 889 "util/configparser.y"
+ case 347: /* server_max_reuse_tcp_queries: VAR_MAX_REUSE_TCP_QUERIES STRING_ARG */
+#line 898 "util/configparser.y"
{
OUTYY(("P(server_max_reuse_tcp_queries:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -4169,11 +3506,11 @@ yyreduce:
else cfg_parser->cfg->max_reuse_tcp_queries = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 4173 "util/configparser.c"
+#line 3510 "util/configparser.c"
break;
- case 344:
-#line 900 "util/configparser.y"
+ case 348: /* server_tcp_reuse_timeout: VAR_TCP_REUSE_TIMEOUT STRING_ARG */
+#line 909 "util/configparser.y"
{
OUTYY(("P(server_tcp_reuse_timeout:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -4183,11 +3520,11 @@ yyreduce:
else cfg_parser->cfg->tcp_reuse_timeout = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 4187 "util/configparser.c"
+#line 3524 "util/configparser.c"
break;
- case 345:
-#line 911 "util/configparser.y"
+ case 349: /* server_tcp_auth_query_timeout: VAR_TCP_AUTH_QUERY_TIMEOUT STRING_ARG */
+#line 920 "util/configparser.y"
{
OUTYY(("P(server_tcp_auth_query_timeout:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -4197,11 +3534,11 @@ yyreduce:
else cfg_parser->cfg->tcp_auth_query_timeout = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 4201 "util/configparser.c"
+#line 3538 "util/configparser.c"
break;
- case 346:
-#line 922 "util/configparser.y"
+ case 350: /* server_tcp_keepalive: VAR_EDNS_TCP_KEEPALIVE STRING_ARG */
+#line 931 "util/configparser.y"
{
OUTYY(("P(server_tcp_keepalive:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4209,11 +3546,11 @@ yyreduce:
else cfg_parser->cfg->do_tcp_keepalive = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4213 "util/configparser.c"
+#line 3550 "util/configparser.c"
break;
- case 347:
-#line 931 "util/configparser.y"
+ case 351: /* server_tcp_keepalive_timeout: VAR_EDNS_TCP_KEEPALIVE_TIMEOUT STRING_ARG */
+#line 940 "util/configparser.y"
{
OUTYY(("P(server_tcp_keepalive_timeout:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -4225,11 +3562,11 @@ yyreduce:
else cfg_parser->cfg->tcp_keepalive_timeout = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 4229 "util/configparser.c"
+#line 3566 "util/configparser.c"
break;
- case 348:
-#line 944 "util/configparser.y"
+ case 352: /* server_tcp_upstream: VAR_TCP_UPSTREAM STRING_ARG */
+#line 953 "util/configparser.y"
{
OUTYY(("P(server_tcp_upstream:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4237,11 +3574,11 @@ yyreduce:
else cfg_parser->cfg->tcp_upstream = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4241 "util/configparser.c"
+#line 3578 "util/configparser.c"
break;
- case 349:
-#line 953 "util/configparser.y"
+ case 353: /* server_udp_upstream_without_downstream: VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM STRING_ARG */
+#line 962 "util/configparser.y"
{
OUTYY(("P(server_udp_upstream_without_downstream:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4249,11 +3586,11 @@ yyreduce:
else cfg_parser->cfg->udp_upstream_without_downstream = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4253 "util/configparser.c"
+#line 3590 "util/configparser.c"
break;
- case 350:
-#line 962 "util/configparser.y"
+ case 354: /* server_ssl_upstream: VAR_SSL_UPSTREAM STRING_ARG */
+#line 971 "util/configparser.y"
{
OUTYY(("P(server_ssl_upstream:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4261,31 +3598,31 @@ yyreduce:
else cfg_parser->cfg->ssl_upstream = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4265 "util/configparser.c"
+#line 3602 "util/configparser.c"
break;
- case 351:
-#line 971 "util/configparser.y"
+ case 355: /* server_ssl_service_key: VAR_SSL_SERVICE_KEY STRING_ARG */
+#line 980 "util/configparser.y"
{
OUTYY(("P(server_ssl_service_key:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->ssl_service_key);
cfg_parser->cfg->ssl_service_key = (yyvsp[0].str);
}
-#line 4275 "util/configparser.c"
+#line 3612 "util/configparser.c"
break;
- case 352:
-#line 978 "util/configparser.y"
+ case 356: /* server_ssl_service_pem: VAR_SSL_SERVICE_PEM STRING_ARG */
+#line 987 "util/configparser.y"
{
OUTYY(("P(server_ssl_service_pem:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->ssl_service_pem);
cfg_parser->cfg->ssl_service_pem = (yyvsp[0].str);
}
-#line 4285 "util/configparser.c"
+#line 3622 "util/configparser.c"
break;
- case 353:
-#line 985 "util/configparser.y"
+ case 357: /* server_ssl_port: VAR_SSL_PORT STRING_ARG */
+#line 994 "util/configparser.y"
{
OUTYY(("P(server_ssl_port:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0)
@@ -4293,21 +3630,21 @@ yyreduce:
else cfg_parser->cfg->ssl_port = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 4297 "util/configparser.c"
+#line 3634 "util/configparser.c"
break;
- case 354:
-#line 994 "util/configparser.y"
+ case 358: /* server_tls_cert_bundle: VAR_TLS_CERT_BUNDLE STRING_ARG */
+#line 1003 "util/configparser.y"
{
OUTYY(("P(server_tls_cert_bundle:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->tls_cert_bundle);
cfg_parser->cfg->tls_cert_bundle = (yyvsp[0].str);
}
-#line 4307 "util/configparser.c"
+#line 3644 "util/configparser.c"
break;
- case 355:
-#line 1001 "util/configparser.y"
+ case 359: /* server_tls_win_cert: VAR_TLS_WIN_CERT STRING_ARG */
+#line 1010 "util/configparser.y"
{
OUTYY(("P(server_tls_win_cert:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4315,53 +3652,53 @@ yyreduce:
else cfg_parser->cfg->tls_win_cert = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4319 "util/configparser.c"
+#line 3656 "util/configparser.c"
break;
- case 356:
-#line 1010 "util/configparser.y"
+ case 360: /* server_tls_additional_port: VAR_TLS_ADDITIONAL_PORT STRING_ARG */
+#line 1019 "util/configparser.y"
{
OUTYY(("P(server_tls_additional_port:%s)\n", (yyvsp[0].str)));
if(!cfg_strlist_insert(&cfg_parser->cfg->tls_additional_port,
(yyvsp[0].str)))
yyerror("out of memory");
}
-#line 4330 "util/configparser.c"
+#line 3667 "util/configparser.c"
break;
- case 357:
-#line 1018 "util/configparser.y"
+ case 361: /* server_tls_ciphers: VAR_TLS_CIPHERS STRING_ARG */
+#line 1027 "util/configparser.y"
{
OUTYY(("P(server_tls_ciphers:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->tls_ciphers);
cfg_parser->cfg->tls_ciphers = (yyvsp[0].str);
}
-#line 4340 "util/configparser.c"
+#line 3677 "util/configparser.c"
break;
- case 358:
-#line 1025 "util/configparser.y"
+ case 362: /* server_tls_ciphersuites: VAR_TLS_CIPHERSUITES STRING_ARG */
+#line 1034 "util/configparser.y"
{
OUTYY(("P(server_tls_ciphersuites:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->tls_ciphersuites);
cfg_parser->cfg->tls_ciphersuites = (yyvsp[0].str);
}
-#line 4350 "util/configparser.c"
+#line 3687 "util/configparser.c"
break;
- case 359:
-#line 1032 "util/configparser.y"
+ case 363: /* server_tls_session_ticket_keys: VAR_TLS_SESSION_TICKET_KEYS STRING_ARG */
+#line 1041 "util/configparser.y"
{
OUTYY(("P(server_tls_session_ticket_keys:%s)\n", (yyvsp[0].str)));
if(!cfg_strlist_append(&cfg_parser->cfg->tls_session_ticket_keys,
(yyvsp[0].str)))
yyerror("out of memory");
}
-#line 4361 "util/configparser.c"
+#line 3698 "util/configparser.c"
break;
- case 360:
-#line 1040 "util/configparser.y"
+ case 364: /* server_tls_use_sni: VAR_TLS_USE_SNI STRING_ARG */
+#line 1049 "util/configparser.y"
{
OUTYY(("P(server_tls_use_sni:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4369,11 +3706,11 @@ yyreduce:
else cfg_parser->cfg->tls_use_sni = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4373 "util/configparser.c"
+#line 3710 "util/configparser.c"
break;
- case 361:
-#line 1049 "util/configparser.y"
+ case 365: /* server_https_port: VAR_HTTPS_PORT STRING_ARG */
+#line 1058 "util/configparser.y"
{
OUTYY(("P(server_https_port:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0)
@@ -4381,11 +3718,11 @@ yyreduce:
else cfg_parser->cfg->https_port = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 4385 "util/configparser.c"
+#line 3722 "util/configparser.c"
break;
- case 362:
-#line 1057 "util/configparser.y"
+ case 366: /* server_http_endpoint: VAR_HTTP_ENDPOINT STRING_ARG */
+#line 1066 "util/configparser.y"
{
OUTYY(("P(server_http_endpoint:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->http_endpoint);
@@ -4401,11 +3738,11 @@ yyreduce:
cfg_parser->cfg->http_endpoint = (yyvsp[0].str);
}
}
-#line 4405 "util/configparser.c"
+#line 3742 "util/configparser.c"
break;
- case 363:
-#line 1073 "util/configparser.y"
+ case 367: /* server_http_max_streams: VAR_HTTP_MAX_STREAMS STRING_ARG */
+#line 1082 "util/configparser.y"
{
OUTYY(("P(server_http_max_streams:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -4413,11 +3750,11 @@ yyreduce:
else cfg_parser->cfg->http_max_streams = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 4417 "util/configparser.c"
+#line 3754 "util/configparser.c"
break;
- case 364:
-#line 1081 "util/configparser.y"
+ case 368: /* server_http_query_buffer_size: VAR_HTTP_QUERY_BUFFER_SIZE STRING_ARG */
+#line 1090 "util/configparser.y"
{
OUTYY(("P(server_http_query_buffer_size:%s)\n", (yyvsp[0].str)));
if(!cfg_parse_memsize((yyvsp[0].str),
@@ -4425,11 +3762,11 @@ yyreduce:
yyerror("memory size expected");
free((yyvsp[0].str));
}
-#line 4429 "util/configparser.c"
+#line 3766 "util/configparser.c"
break;
- case 365:
-#line 1089 "util/configparser.y"
+ case 369: /* server_http_response_buffer_size: VAR_HTTP_RESPONSE_BUFFER_SIZE STRING_ARG */
+#line 1098 "util/configparser.y"
{
OUTYY(("P(server_http_response_buffer_size:%s)\n", (yyvsp[0].str)));
if(!cfg_parse_memsize((yyvsp[0].str),
@@ -4437,11 +3774,11 @@ yyreduce:
yyerror("memory size expected");
free((yyvsp[0].str));
}
-#line 4441 "util/configparser.c"
+#line 3778 "util/configparser.c"
break;
- case 366:
-#line 1097 "util/configparser.y"
+ case 370: /* server_http_nodelay: VAR_HTTP_NODELAY STRING_ARG */
+#line 1106 "util/configparser.y"
{
OUTYY(("P(server_http_nodelay:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4449,11 +3786,11 @@ yyreduce:
else cfg_parser->cfg->http_nodelay = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4453 "util/configparser.c"
+#line 3790 "util/configparser.c"
break;
- case 367:
-#line 1105 "util/configparser.y"
+ case 371: /* server_http_notls_downstream: VAR_HTTP_NOTLS_DOWNSTREAM STRING_ARG */
+#line 1114 "util/configparser.y"
{
OUTYY(("P(server_http_notls_downstream:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4461,11 +3798,11 @@ yyreduce:
else cfg_parser->cfg->http_notls_downstream = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4465 "util/configparser.c"
+#line 3802 "util/configparser.c"
break;
- case 368:
-#line 1113 "util/configparser.y"
+ case 372: /* server_use_systemd: VAR_USE_SYSTEMD STRING_ARG */
+#line 1122 "util/configparser.y"
{
OUTYY(("P(server_use_systemd:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4473,11 +3810,11 @@ yyreduce:
else cfg_parser->cfg->use_systemd = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4477 "util/configparser.c"
+#line 3814 "util/configparser.c"
break;
- case 369:
-#line 1122 "util/configparser.y"
+ case 373: /* server_do_daemonize: VAR_DO_DAEMONIZE STRING_ARG */
+#line 1131 "util/configparser.y"
{
OUTYY(("P(server_do_daemonize:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4485,11 +3822,11 @@ yyreduce:
else cfg_parser->cfg->do_daemonize = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4489 "util/configparser.c"
+#line 3826 "util/configparser.c"
break;
- case 370:
-#line 1131 "util/configparser.y"
+ case 374: /* server_use_syslog: VAR_USE_SYSLOG STRING_ARG */
+#line 1140 "util/configparser.y"
{
OUTYY(("P(server_use_syslog:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4502,11 +3839,11 @@ yyreduce:
#endif
free((yyvsp[0].str));
}
-#line 4506 "util/configparser.c"
+#line 3843 "util/configparser.c"
break;
- case 371:
-#line 1145 "util/configparser.y"
+ case 375: /* server_log_time_ascii: VAR_LOG_TIME_ASCII STRING_ARG */
+#line 1154 "util/configparser.y"
{
OUTYY(("P(server_log_time_ascii:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4514,11 +3851,11 @@ yyreduce:
else cfg_parser->cfg->log_time_ascii = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4518 "util/configparser.c"
+#line 3855 "util/configparser.c"
break;
- case 372:
-#line 1154 "util/configparser.y"
+ case 376: /* server_log_queries: VAR_LOG_QUERIES STRING_ARG */
+#line 1163 "util/configparser.y"
{
OUTYY(("P(server_log_queries:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4526,11 +3863,11 @@ yyreduce:
else cfg_parser->cfg->log_queries = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4530 "util/configparser.c"
+#line 3867 "util/configparser.c"
break;
- case 373:
-#line 1163 "util/configparser.y"
+ case 377: /* server_log_replies: VAR_LOG_REPLIES STRING_ARG */
+#line 1172 "util/configparser.y"
{
OUTYY(("P(server_log_replies:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4538,11 +3875,11 @@ yyreduce:
else cfg_parser->cfg->log_replies = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4542 "util/configparser.c"
+#line 3879 "util/configparser.c"
break;
- case 374:
-#line 1172 "util/configparser.y"
+ case 378: /* server_log_tag_queryreply: VAR_LOG_TAG_QUERYREPLY STRING_ARG */
+#line 1181 "util/configparser.y"
{
OUTYY(("P(server_log_tag_queryreply:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4550,11 +3887,11 @@ yyreduce:
else cfg_parser->cfg->log_tag_queryreply = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4554 "util/configparser.c"
+#line 3891 "util/configparser.c"
break;
- case 375:
-#line 1181 "util/configparser.y"
+ case 379: /* server_log_servfail: VAR_LOG_SERVFAIL STRING_ARG */
+#line 1190 "util/configparser.y"
{
OUTYY(("P(server_log_servfail:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4562,11 +3899,11 @@ yyreduce:
else cfg_parser->cfg->log_servfail = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4566 "util/configparser.c"
+#line 3903 "util/configparser.c"
break;
- case 376:
-#line 1190 "util/configparser.y"
+ case 380: /* server_log_local_actions: VAR_LOG_LOCAL_ACTIONS STRING_ARG */
+#line 1199 "util/configparser.y"
{
OUTYY(("P(server_log_local_actions:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4574,31 +3911,31 @@ yyreduce:
else cfg_parser->cfg->log_local_actions = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4578 "util/configparser.c"
+#line 3915 "util/configparser.c"
break;
- case 377:
-#line 1199 "util/configparser.y"
+ case 381: /* server_chroot: VAR_CHROOT STRING_ARG */
+#line 1208 "util/configparser.y"
{
OUTYY(("P(server_chroot:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->chrootdir);
cfg_parser->cfg->chrootdir = (yyvsp[0].str);
}
-#line 4588 "util/configparser.c"
+#line 3925 "util/configparser.c"
break;
- case 378:
-#line 1206 "util/configparser.y"
+ case 382: /* server_username: VAR_USERNAME STRING_ARG */
+#line 1215 "util/configparser.y"
{
OUTYY(("P(server_username:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->username);
cfg_parser->cfg->username = (yyvsp[0].str);
}
-#line 4598 "util/configparser.c"
+#line 3935 "util/configparser.c"
break;
- case 379:
-#line 1213 "util/configparser.y"
+ case 383: /* server_directory: VAR_DIRECTORY STRING_ARG */
+#line 1222 "util/configparser.y"
{
OUTYY(("P(server_directory:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->directory);
@@ -4623,105 +3960,105 @@ yyreduce:
}
}
}
-#line 4627 "util/configparser.c"
+#line 3964 "util/configparser.c"
break;
- case 380:
-#line 1239 "util/configparser.y"
+ case 384: /* server_logfile: VAR_LOGFILE STRING_ARG */
+#line 1248 "util/configparser.y"
{
OUTYY(("P(server_logfile:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->logfile);
cfg_parser->cfg->logfile = (yyvsp[0].str);
cfg_parser->cfg->use_syslog = 0;
}
-#line 4638 "util/configparser.c"
+#line 3975 "util/configparser.c"
break;
- case 381:
-#line 1247 "util/configparser.y"
+ case 385: /* server_pidfile: VAR_PIDFILE STRING_ARG */
+#line 1256 "util/configparser.y"
{
OUTYY(("P(server_pidfile:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->pidfile);
cfg_parser->cfg->pidfile = (yyvsp[0].str);
}
-#line 4648 "util/configparser.c"
+#line 3985 "util/configparser.c"
break;
- case 382:
-#line 1254 "util/configparser.y"
+ case 386: /* server_root_hints: VAR_ROOT_HINTS STRING_ARG */
+#line 1263 "util/configparser.y"
{
OUTYY(("P(server_root_hints:%s)\n", (yyvsp[0].str)));
if(!cfg_strlist_insert(&cfg_parser->cfg->root_hints, (yyvsp[0].str)))
yyerror("out of memory");
}
-#line 4658 "util/configparser.c"
+#line 3995 "util/configparser.c"
break;
- case 383:
-#line 1261 "util/configparser.y"
+ case 387: /* server_dlv_anchor_file: VAR_DLV_ANCHOR_FILE STRING_ARG */
+#line 1270 "util/configparser.y"
{
OUTYY(("P(server_dlv_anchor_file:%s)\n", (yyvsp[0].str)));
log_warn("option dlv-anchor-file ignored: DLV is decommissioned");
free((yyvsp[0].str));
}
-#line 4668 "util/configparser.c"
+#line 4005 "util/configparser.c"
break;
- case 384:
-#line 1268 "util/configparser.y"
+ case 388: /* server_dlv_anchor: VAR_DLV_ANCHOR STRING_ARG */
+#line 1277 "util/configparser.y"
{
OUTYY(("P(server_dlv_anchor:%s)\n", (yyvsp[0].str)));
log_warn("option dlv-anchor ignored: DLV is decommissioned");
free((yyvsp[0].str));
}
-#line 4678 "util/configparser.c"
+#line 4015 "util/configparser.c"
break;
- case 385:
-#line 1275 "util/configparser.y"
+ case 389: /* server_auto_trust_anchor_file: VAR_AUTO_TRUST_ANCHOR_FILE STRING_ARG */
+#line 1284 "util/configparser.y"
{
OUTYY(("P(server_auto_trust_anchor_file:%s)\n", (yyvsp[0].str)));
if(!cfg_strlist_insert(&cfg_parser->cfg->
auto_trust_anchor_file_list, (yyvsp[0].str)))
yyerror("out of memory");
}
-#line 4689 "util/configparser.c"
+#line 4026 "util/configparser.c"
break;
- case 386:
-#line 1283 "util/configparser.y"
+ case 390: /* server_trust_anchor_file: VAR_TRUST_ANCHOR_FILE STRING_ARG */
+#line 1292 "util/configparser.y"
{
OUTYY(("P(server_trust_anchor_file:%s)\n", (yyvsp[0].str)));
if(!cfg_strlist_insert(&cfg_parser->cfg->
trust_anchor_file_list, (yyvsp[0].str)))
yyerror("out of memory");
}
-#line 4700 "util/configparser.c"
+#line 4037 "util/configparser.c"
break;
- case 387:
-#line 1291 "util/configparser.y"
+ case 391: /* server_trusted_keys_file: VAR_TRUSTED_KEYS_FILE STRING_ARG */
+#line 1300 "util/configparser.y"
{
OUTYY(("P(server_trusted_keys_file:%s)\n", (yyvsp[0].str)));
if(!cfg_strlist_insert(&cfg_parser->cfg->
trusted_keys_file_list, (yyvsp[0].str)))
yyerror("out of memory");
}
-#line 4711 "util/configparser.c"
+#line 4048 "util/configparser.c"
break;
- case 388:
-#line 1299 "util/configparser.y"
+ case 392: /* server_trust_anchor: VAR_TRUST_ANCHOR STRING_ARG */
+#line 1308 "util/configparser.y"
{
OUTYY(("P(server_trust_anchor:%s)\n", (yyvsp[0].str)));
if(!cfg_strlist_insert(&cfg_parser->cfg->trust_anchor_list, (yyvsp[0].str)))
yyerror("out of memory");
}
-#line 4721 "util/configparser.c"
+#line 4058 "util/configparser.c"
break;
- case 389:
-#line 1306 "util/configparser.y"
+ case 393: /* server_trust_anchor_signaling: VAR_TRUST_ANCHOR_SIGNALING STRING_ARG */
+#line 1315 "util/configparser.y"
{
OUTYY(("P(server_trust_anchor_signaling:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4731,11 +4068,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4735 "util/configparser.c"
+#line 4072 "util/configparser.c"
break;
- case 390:
-#line 1317 "util/configparser.y"
+ case 394: /* server_root_key_sentinel: VAR_ROOT_KEY_SENTINEL STRING_ARG */
+#line 1326 "util/configparser.y"
{
OUTYY(("P(server_root_key_sentinel:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4745,21 +4082,21 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4749 "util/configparser.c"
+#line 4086 "util/configparser.c"
break;
- case 391:
-#line 1328 "util/configparser.y"
+ case 395: /* server_domain_insecure: VAR_DOMAIN_INSECURE STRING_ARG */
+#line 1337 "util/configparser.y"
{
OUTYY(("P(server_domain_insecure:%s)\n", (yyvsp[0].str)));
if(!cfg_strlist_insert(&cfg_parser->cfg->domain_insecure, (yyvsp[0].str)))
yyerror("out of memory");
}
-#line 4759 "util/configparser.c"
+#line 4096 "util/configparser.c"
break;
- case 392:
-#line 1335 "util/configparser.y"
+ case 396: /* server_hide_identity: VAR_HIDE_IDENTITY STRING_ARG */
+#line 1344 "util/configparser.y"
{
OUTYY(("P(server_hide_identity:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4767,11 +4104,11 @@ yyreduce:
else cfg_parser->cfg->hide_identity = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4771 "util/configparser.c"
+#line 4108 "util/configparser.c"
break;
- case 393:
-#line 1344 "util/configparser.y"
+ case 397: /* server_hide_version: VAR_HIDE_VERSION STRING_ARG */
+#line 1353 "util/configparser.y"
{
OUTYY(("P(server_hide_version:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4779,11 +4116,11 @@ yyreduce:
else cfg_parser->cfg->hide_version = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4783 "util/configparser.c"
+#line 4120 "util/configparser.c"
break;
- case 394:
-#line 1353 "util/configparser.y"
+ case 398: /* server_hide_trustanchor: VAR_HIDE_TRUSTANCHOR STRING_ARG */
+#line 1362 "util/configparser.y"
{
OUTYY(("P(server_hide_trustanchor:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4791,11 +4128,11 @@ yyreduce:
else cfg_parser->cfg->hide_trustanchor = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4795 "util/configparser.c"
+#line 4132 "util/configparser.c"
break;
- case 395:
-#line 1362 "util/configparser.y"
+ case 399: /* server_hide_http_user_agent: VAR_HIDE_HTTP_USER_AGENT STRING_ARG */
+#line 1371 "util/configparser.y"
{
OUTYY(("P(server_hide_user_agent:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4803,41 +4140,41 @@ yyreduce:
else cfg_parser->cfg->hide_http_user_agent = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4807 "util/configparser.c"
+#line 4144 "util/configparser.c"
break;
- case 396:
-#line 1371 "util/configparser.y"
+ case 400: /* server_identity: VAR_IDENTITY STRING_ARG */
+#line 1380 "util/configparser.y"
{
OUTYY(("P(server_identity:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->identity);
cfg_parser->cfg->identity = (yyvsp[0].str);
}
-#line 4817 "util/configparser.c"
+#line 4154 "util/configparser.c"
break;
- case 397:
-#line 1378 "util/configparser.y"
+ case 401: /* server_version: VAR_VERSION STRING_ARG */
+#line 1387 "util/configparser.y"
{
OUTYY(("P(server_version:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->version);
cfg_parser->cfg->version = (yyvsp[0].str);
}
-#line 4827 "util/configparser.c"
+#line 4164 "util/configparser.c"
break;
- case 398:
-#line 1385 "util/configparser.y"
+ case 402: /* server_http_user_agent: VAR_HTTP_USER_AGENT STRING_ARG */
+#line 1394 "util/configparser.y"
{
OUTYY(("P(server_http_user_agent:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->http_user_agent);
cfg_parser->cfg->http_user_agent = (yyvsp[0].str);
}
-#line 4837 "util/configparser.c"
+#line 4174 "util/configparser.c"
break;
- case 399:
-#line 1392 "util/configparser.y"
+ case 403: /* server_nsid: VAR_NSID STRING_ARG */
+#line 1401 "util/configparser.y"
{
OUTYY(("P(server_nsid:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->nsid_cfg_str);
@@ -4852,33 +4189,33 @@ yyreduce:
yyerror("the NSID must be either a hex string or an "
"ascii character string prepended with ascii_.");
}
-#line 4856 "util/configparser.c"
+#line 4193 "util/configparser.c"
break;
- case 400:
-#line 1408 "util/configparser.y"
+ case 404: /* server_so_rcvbuf: VAR_SO_RCVBUF STRING_ARG */
+#line 1417 "util/configparser.y"
{
OUTYY(("P(server_so_rcvbuf:%s)\n", (yyvsp[0].str)));
if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->so_rcvbuf))
yyerror("buffer size expected");
free((yyvsp[0].str));
}
-#line 4867 "util/configparser.c"
+#line 4204 "util/configparser.c"
break;
- case 401:
-#line 1416 "util/configparser.y"
+ case 405: /* server_so_sndbuf: VAR_SO_SNDBUF STRING_ARG */
+#line 1425 "util/configparser.y"
{
OUTYY(("P(server_so_sndbuf:%s)\n", (yyvsp[0].str)));
if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->so_sndbuf))
yyerror("buffer size expected");
free((yyvsp[0].str));
}
-#line 4878 "util/configparser.c"
+#line 4215 "util/configparser.c"
break;
- case 402:
-#line 1424 "util/configparser.y"
+ case 406: /* server_so_reuseport: VAR_SO_REUSEPORT STRING_ARG */
+#line 1433 "util/configparser.y"
{
OUTYY(("P(server_so_reuseport:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4887,11 +4224,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4891 "util/configparser.c"
+#line 4228 "util/configparser.c"
break;
- case 403:
-#line 1434 "util/configparser.y"
+ case 407: /* server_ip_transparent: VAR_IP_TRANSPARENT STRING_ARG */
+#line 1443 "util/configparser.y"
{
OUTYY(("P(server_ip_transparent:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4900,11 +4237,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4904 "util/configparser.c"
+#line 4241 "util/configparser.c"
break;
- case 404:
-#line 1444 "util/configparser.y"
+ case 408: /* server_ip_freebind: VAR_IP_FREEBIND STRING_ARG */
+#line 1453 "util/configparser.y"
{
OUTYY(("P(server_ip_freebind:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4913,11 +4250,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4917 "util/configparser.c"
+#line 4254 "util/configparser.c"
break;
- case 405:
-#line 1454 "util/configparser.y"
+ case 409: /* server_ip_dscp: VAR_IP_DSCP STRING_ARG */
+#line 1463 "util/configparser.y"
{
OUTYY(("P(server_ip_dscp:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -4930,22 +4267,22 @@ yyreduce:
cfg_parser->cfg->ip_dscp = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 4934 "util/configparser.c"
+#line 4271 "util/configparser.c"
break;
- case 406:
-#line 1468 "util/configparser.y"
+ case 410: /* server_stream_wait_size: VAR_STREAM_WAIT_SIZE STRING_ARG */
+#line 1477 "util/configparser.y"
{
OUTYY(("P(server_stream_wait_size:%s)\n", (yyvsp[0].str)));
if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->stream_wait_size))
yyerror("memory size expected");
free((yyvsp[0].str));
}
-#line 4945 "util/configparser.c"
+#line 4282 "util/configparser.c"
break;
- case 407:
-#line 1476 "util/configparser.y"
+ case 411: /* server_edns_buffer_size: VAR_EDNS_BUFFER_SIZE STRING_ARG */
+#line 1485 "util/configparser.y"
{
OUTYY(("P(server_edns_buffer_size:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0)
@@ -4957,11 +4294,11 @@ yyreduce:
else cfg_parser->cfg->edns_buffer_size = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 4961 "util/configparser.c"
+#line 4298 "util/configparser.c"
break;
- case 408:
-#line 1489 "util/configparser.y"
+ case 412: /* server_msg_buffer_size: VAR_MSG_BUFFER_SIZE STRING_ARG */
+#line 1498 "util/configparser.y"
{
OUTYY(("P(server_msg_buffer_size:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0)
@@ -4971,22 +4308,22 @@ yyreduce:
else cfg_parser->cfg->msg_buffer_size = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 4975 "util/configparser.c"
+#line 4312 "util/configparser.c"
break;
- case 409:
-#line 1500 "util/configparser.y"
+ case 413: /* server_msg_cache_size: VAR_MSG_CACHE_SIZE STRING_ARG */
+#line 1509 "util/configparser.y"
{
OUTYY(("P(server_msg_cache_size:%s)\n", (yyvsp[0].str)));
if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->msg_cache_size))
yyerror("memory size expected");
free((yyvsp[0].str));
}
-#line 4986 "util/configparser.c"
+#line 4323 "util/configparser.c"
break;
- case 410:
-#line 1508 "util/configparser.y"
+ case 414: /* server_msg_cache_slabs: VAR_MSG_CACHE_SLABS STRING_ARG */
+#line 1517 "util/configparser.y"
{
OUTYY(("P(server_msg_cache_slabs:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0) {
@@ -4998,11 +4335,11 @@ yyreduce:
}
free((yyvsp[0].str));
}
-#line 5002 "util/configparser.c"
+#line 4339 "util/configparser.c"
break;
- case 411:
-#line 1521 "util/configparser.y"
+ case 415: /* server_num_queries_per_thread: VAR_NUM_QUERIES_PER_THREAD STRING_ARG */
+#line 1530 "util/configparser.y"
{
OUTYY(("P(server_num_queries_per_thread:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0)
@@ -5010,11 +4347,11 @@ yyreduce:
else cfg_parser->cfg->num_queries_per_thread = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 5014 "util/configparser.c"
+#line 4351 "util/configparser.c"
break;
- case 412:
-#line 1530 "util/configparser.y"
+ case 416: /* server_jostle_timeout: VAR_JOSTLE_TIMEOUT STRING_ARG */
+#line 1539 "util/configparser.y"
{
OUTYY(("P(server_jostle_timeout:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -5022,11 +4359,11 @@ yyreduce:
else cfg_parser->cfg->jostle_time = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 5026 "util/configparser.c"
+#line 4363 "util/configparser.c"
break;
- case 413:
-#line 1539 "util/configparser.y"
+ case 417: /* server_delay_close: VAR_DELAY_CLOSE STRING_ARG */
+#line 1548 "util/configparser.y"
{
OUTYY(("P(server_delay_close:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -5034,11 +4371,11 @@ yyreduce:
else cfg_parser->cfg->delay_close = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 5038 "util/configparser.c"
+#line 4375 "util/configparser.c"
break;
- case 414:
-#line 1548 "util/configparser.y"
+ case 418: /* server_udp_connect: VAR_UDP_CONNECT STRING_ARG */
+#line 1557 "util/configparser.y"
{
OUTYY(("P(server_udp_connect:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -5046,11 +4383,11 @@ yyreduce:
else cfg_parser->cfg->udp_connect = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5050 "util/configparser.c"
+#line 4387 "util/configparser.c"
break;
- case 415:
-#line 1557 "util/configparser.y"
+ case 419: /* server_unblock_lan_zones: VAR_UNBLOCK_LAN_ZONES STRING_ARG */
+#line 1566 "util/configparser.y"
{
OUTYY(("P(server_unblock_lan_zones:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -5059,11 +4396,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5063 "util/configparser.c"
+#line 4400 "util/configparser.c"
break;
- case 416:
-#line 1567 "util/configparser.y"
+ case 420: /* server_insecure_lan_zones: VAR_INSECURE_LAN_ZONES STRING_ARG */
+#line 1576 "util/configparser.y"
{
OUTYY(("P(server_insecure_lan_zones:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -5072,22 +4409,22 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5076 "util/configparser.c"
+#line 4413 "util/configparser.c"
break;
- case 417:
-#line 1577 "util/configparser.y"
+ case 421: /* server_rrset_cache_size: VAR_RRSET_CACHE_SIZE STRING_ARG */
+#line 1586 "util/configparser.y"
{
OUTYY(("P(server_rrset_cache_size:%s)\n", (yyvsp[0].str)));
if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->rrset_cache_size))
yyerror("memory size expected");
free((yyvsp[0].str));
}
-#line 5087 "util/configparser.c"
+#line 4424 "util/configparser.c"
break;
- case 418:
-#line 1585 "util/configparser.y"
+ case 422: /* server_rrset_cache_slabs: VAR_RRSET_CACHE_SLABS STRING_ARG */
+#line 1594 "util/configparser.y"
{
OUTYY(("P(server_rrset_cache_slabs:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0) {
@@ -5099,11 +4436,11 @@ yyreduce:
}
free((yyvsp[0].str));
}
-#line 5103 "util/configparser.c"
+#line 4440 "util/configparser.c"
break;
- case 419:
-#line 1598 "util/configparser.y"
+ case 423: /* server_infra_host_ttl: VAR_INFRA_HOST_TTL STRING_ARG */
+#line 1607 "util/configparser.y"
{
OUTYY(("P(server_infra_host_ttl:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -5111,22 +4448,22 @@ yyreduce:
else cfg_parser->cfg->host_ttl = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 5115 "util/configparser.c"
+#line 4452 "util/configparser.c"
break;
- case 420:
-#line 1607 "util/configparser.y"
+ case 424: /* server_infra_lame_ttl: VAR_INFRA_LAME_TTL STRING_ARG */
+#line 1616 "util/configparser.y"
{
OUTYY(("P(server_infra_lame_ttl:%s)\n", (yyvsp[0].str)));
verbose(VERB_DETAIL, "ignored infra-lame-ttl: %s (option "
"removed, use infra-host-ttl)", (yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 5126 "util/configparser.c"
+#line 4463 "util/configparser.c"
break;
- case 421:
-#line 1615 "util/configparser.y"
+ case 425: /* server_infra_cache_numhosts: VAR_INFRA_CACHE_NUMHOSTS STRING_ARG */
+#line 1624 "util/configparser.y"
{
OUTYY(("P(server_infra_cache_numhosts:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0)
@@ -5134,22 +4471,22 @@ yyreduce:
else cfg_parser->cfg->infra_cache_numhosts = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 5138 "util/configparser.c"
+#line 4475 "util/configparser.c"
break;
- case 422:
-#line 1624 "util/configparser.y"
+ case 426: /* server_infra_cache_lame_size: VAR_INFRA_CACHE_LAME_SIZE STRING_ARG */
+#line 1633 "util/configparser.y"
{
OUTYY(("P(server_infra_cache_lame_size:%s)\n", (yyvsp[0].str)));
verbose(VERB_DETAIL, "ignored infra-cache-lame-size: %s "
"(option removed, use infra-cache-numhosts)", (yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 5149 "util/configparser.c"
+#line 4486 "util/configparser.c"
break;
- case 423:
-#line 1632 "util/configparser.y"
+ case 427: /* server_infra_cache_slabs: VAR_INFRA_CACHE_SLABS STRING_ARG */
+#line 1641 "util/configparser.y"
{
OUTYY(("P(server_infra_cache_slabs:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0) {
@@ -5161,11 +4498,11 @@ yyreduce:
}
free((yyvsp[0].str));
}
-#line 5165 "util/configparser.c"
+#line 4502 "util/configparser.c"
break;
- case 424:
-#line 1645 "util/configparser.y"
+ case 428: /* server_infra_cache_min_rtt: VAR_INFRA_CACHE_MIN_RTT STRING_ARG */
+#line 1654 "util/configparser.y"
{
OUTYY(("P(server_infra_cache_min_rtt:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -5173,11 +4510,11 @@ yyreduce:
else cfg_parser->cfg->infra_cache_min_rtt = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 5177 "util/configparser.c"
+#line 4514 "util/configparser.c"
break;
- case 425:
-#line 1654 "util/configparser.y"
+ case 429: /* server_infra_keep_probing: VAR_INFRA_KEEP_PROBING STRING_ARG */
+#line 1663 "util/configparser.y"
{
OUTYY(("P(server_infra_keep_probing:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -5186,21 +4523,21 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5190 "util/configparser.c"
+#line 4527 "util/configparser.c"
break;
- case 426:
-#line 1664 "util/configparser.y"
+ case 430: /* server_target_fetch_policy: VAR_TARGET_FETCH_POLICY STRING_ARG */
+#line 1673 "util/configparser.y"
{
OUTYY(("P(server_target_fetch_policy:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->target_fetch_policy);
cfg_parser->cfg->target_fetch_policy = (yyvsp[0].str);
}
-#line 5200 "util/configparser.c"
+#line 4537 "util/configparser.c"
break;
- case 427:
-#line 1671 "util/configparser.y"
+ case 431: /* server_harden_short_bufsize: VAR_HARDEN_SHORT_BUFSIZE STRING_ARG */
+#line 1680 "util/configparser.y"
{
OUTYY(("P(server_harden_short_bufsize:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -5209,11 +4546,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5213 "util/configparser.c"
+#line 4550 "util/configparser.c"
break;
- case 428:
-#line 1681 "util/configparser.y"
+ case 432: /* server_harden_large_queries: VAR_HARDEN_LARGE_QUERIES STRING_ARG */
+#line 1690 "util/configparser.y"
{
OUTYY(("P(server_harden_large_queries:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -5222,11 +4559,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5226 "util/configparser.c"
+#line 4563 "util/configparser.c"
break;
- case 429:
-#line 1691 "util/configparser.y"
+ case 433: /* server_harden_glue: VAR_HARDEN_GLUE STRING_ARG */
+#line 1700 "util/configparser.y"
{
OUTYY(("P(server_harden_glue:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -5235,11 +4572,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5239 "util/configparser.c"
+#line 4576 "util/configparser.c"
break;
- case 430:
-#line 1701 "util/configparser.y"
+ case 434: /* server_harden_dnssec_stripped: VAR_HARDEN_DNSSEC_STRIPPED STRING_ARG */
+#line 1710 "util/configparser.y"
{
OUTYY(("P(server_harden_dnssec_stripped:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -5248,11 +4585,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5252 "util/configparser.c"
+#line 4589 "util/configparser.c"
break;
- case 431:
-#line 1711 "util/configparser.y"
+ case 435: /* server_harden_below_nxdomain: VAR_HARDEN_BELOW_NXDOMAIN STRING_ARG */
+#line 1720 "util/configparser.y"
{
OUTYY(("P(server_harden_below_nxdomain:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -5261,11 +4598,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5265 "util/configparser.c"
+#line 4602 "util/configparser.c"
break;
- case 432:
-#line 1721 "util/configparser.y"
+ case 436: /* server_harden_referral_path: VAR_HARDEN_REFERRAL_PATH STRING_ARG */
+#line 1730 "util/configparser.y"
{
OUTYY(("P(server_harden_referral_path:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -5274,11 +4611,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5278 "util/configparser.c"
+#line 4615 "util/configparser.c"
break;
- case 433:
-#line 1731 "util/configparser.y"
+ case 437: /* server_harden_algo_downgrade: VAR_HARDEN_ALGO_DOWNGRADE STRING_ARG */
+#line 1740 "util/configparser.y"
{
OUTYY(("P(server_harden_algo_downgrade:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -5287,11 +4624,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5291 "util/configparser.c"
+#line 4628 "util/configparser.c"
break;
- case 434:
-#line 1741 "util/configparser.y"
+ case 438: /* server_use_caps_for_id: VAR_USE_CAPS_FOR_ID STRING_ARG */
+#line 1750 "util/configparser.y"
{
OUTYY(("P(server_use_caps_for_id:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -5300,41 +4637,41 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5304 "util/configparser.c"
+#line 4641 "util/configparser.c"
break;
- case 435:
-#line 1751 "util/configparser.y"
+ case 439: /* server_caps_whitelist: VAR_CAPS_WHITELIST STRING_ARG */
+#line 1760 "util/configparser.y"
{
OUTYY(("P(server_caps_whitelist:%s)\n", (yyvsp[0].str)));
if(!cfg_strlist_insert(&cfg_parser->cfg->caps_whitelist, (yyvsp[0].str)))
yyerror("out of memory");
}
-#line 5314 "util/configparser.c"
+#line 4651 "util/configparser.c"
break;
- case 436:
-#line 1758 "util/configparser.y"
+ case 440: /* server_private_address: VAR_PRIVATE_ADDRESS STRING_ARG */
+#line 1767 "util/configparser.y"
{
OUTYY(("P(server_private_address:%s)\n", (yyvsp[0].str)));
if(!cfg_strlist_insert(&cfg_parser->cfg->private_address, (yyvsp[0].str)))
yyerror("out of memory");
}
-#line 5324 "util/configparser.c"
+#line 4661 "util/configparser.c"
break;
- case 437:
-#line 1765 "util/configparser.y"
+ case 441: /* server_private_domain: VAR_PRIVATE_DOMAIN STRING_ARG */
+#line 1774 "util/configparser.y"
{
OUTYY(("P(server_private_domain:%s)\n", (yyvsp[0].str)));
if(!cfg_strlist_insert(&cfg_parser->cfg->private_domain, (yyvsp[0].str)))
yyerror("out of memory");
}
-#line 5334 "util/configparser.c"
+#line 4671 "util/configparser.c"
break;
- case 438:
-#line 1772 "util/configparser.y"
+ case 442: /* server_prefetch: VAR_PREFETCH STRING_ARG */
+#line 1781 "util/configparser.y"
{
OUTYY(("P(server_prefetch:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -5342,11 +4679,11 @@ yyreduce:
else cfg_parser->cfg->prefetch = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5346 "util/configparser.c"
+#line 4683 "util/configparser.c"
break;
- case 439:
-#line 1781 "util/configparser.y"
+ case 443: /* server_prefetch_key: VAR_PREFETCH_KEY STRING_ARG */
+#line 1790 "util/configparser.y"
{
OUTYY(("P(server_prefetch_key:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -5354,11 +4691,11 @@ yyreduce:
else cfg_parser->cfg->prefetch_key = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5358 "util/configparser.c"
+#line 4695 "util/configparser.c"
break;
- case 440:
-#line 1790 "util/configparser.y"
+ case 444: /* server_deny_any: VAR_DENY_ANY STRING_ARG */
+#line 1799 "util/configparser.y"
{
OUTYY(("P(server_deny_any:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -5366,11 +4703,11 @@ yyreduce:
else cfg_parser->cfg->deny_any = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5370 "util/configparser.c"
+#line 4707 "util/configparser.c"
break;
- case 441:
-#line 1799 "util/configparser.y"
+ case 445: /* server_unwanted_reply_threshold: VAR_UNWANTED_REPLY_THRESHOLD STRING_ARG */
+#line 1808 "util/configparser.y"
{
OUTYY(("P(server_unwanted_reply_threshold:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -5378,21 +4715,21 @@ yyreduce:
else cfg_parser->cfg->unwanted_threshold = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 5382 "util/configparser.c"
+#line 4719 "util/configparser.c"
break;
- case 442:
-#line 1808 "util/configparser.y"
+ case 446: /* server_do_not_query_address: VAR_DO_NOT_QUERY_ADDRESS STRING_ARG */
+#line 1817 "util/configparser.y"
{
OUTYY(("P(server_do_not_query_address:%s)\n", (yyvsp[0].str)));
if(!cfg_strlist_insert(&cfg_parser->cfg->donotqueryaddrs, (yyvsp[0].str)))
yyerror("out of memory");
}
-#line 5392 "util/configparser.c"
+#line 4729 "util/configparser.c"
break;
- case 443:
-#line 1815 "util/configparser.y"
+ case 447: /* server_do_not_query_localhost: VAR_DO_NOT_QUERY_LOCALHOST STRING_ARG */
+#line 1824 "util/configparser.y"
{
OUTYY(("P(server_do_not_query_localhost:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -5401,11 +4738,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5405 "util/configparser.c"
+#line 4742 "util/configparser.c"
break;
- case 444:
-#line 1825 "util/configparser.y"
+ case 448: /* server_access_control: VAR_ACCESS_CONTROL STRING_ARG STRING_ARG */
+#line 1834 "util/configparser.y"
{
OUTYY(("P(server_access_control:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "deny")!=0 && strcmp((yyvsp[0].str), "refuse")!=0 &&
@@ -5424,21 +4761,21 @@ yyreduce:
fatal_exit("out of memory adding acl");
}
}
-#line 5428 "util/configparser.c"
+#line 4765 "util/configparser.c"
break;
- case 445:
-#line 1845 "util/configparser.y"
+ case 449: /* server_module_conf: VAR_MODULE_CONF STRING_ARG */
+#line 1854 "util/configparser.y"
{
OUTYY(("P(server_module_conf:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->module_conf);
cfg_parser->cfg->module_conf = (yyvsp[0].str);
}
-#line 5438 "util/configparser.c"
+#line 4775 "util/configparser.c"
break;
- case 446:
-#line 1852 "util/configparser.y"
+ case 450: /* server_val_override_date: VAR_VAL_OVERRIDE_DATE STRING_ARG */
+#line 1861 "util/configparser.y"
{
OUTYY(("P(server_val_override_date:%s)\n", (yyvsp[0].str)));
if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) {
@@ -5455,11 +4792,11 @@ yyreduce:
}
free((yyvsp[0].str));
}
-#line 5459 "util/configparser.c"
+#line 4796 "util/configparser.c"
break;
- case 447:
-#line 1870 "util/configparser.y"
+ case 451: /* server_val_sig_skew_min: VAR_VAL_SIG_SKEW_MIN STRING_ARG */
+#line 1879 "util/configparser.y"
{
OUTYY(("P(server_val_sig_skew_min:%s)\n", (yyvsp[0].str)));
if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) {
@@ -5471,11 +4808,11 @@ yyreduce:
}
free((yyvsp[0].str));
}
-#line 5475 "util/configparser.c"
+#line 4812 "util/configparser.c"
break;
- case 448:
-#line 1883 "util/configparser.y"
+ case 452: /* server_val_sig_skew_max: VAR_VAL_SIG_SKEW_MAX STRING_ARG */
+#line 1892 "util/configparser.y"
{
OUTYY(("P(server_val_sig_skew_max:%s)\n", (yyvsp[0].str)));
if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) {
@@ -5487,11 +4824,11 @@ yyreduce:
}
free((yyvsp[0].str));
}
-#line 5491 "util/configparser.c"
+#line 4828 "util/configparser.c"
break;
- case 449:
-#line 1896 "util/configparser.y"
+ case 453: /* server_val_max_restart: VAR_VAL_MAX_RESTART STRING_ARG */
+#line 1905 "util/configparser.y"
{
OUTYY(("P(server_val_max_restart:%s)\n", (yyvsp[0].str)));
if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) {
@@ -5503,11 +4840,11 @@ yyreduce:
}
free((yyvsp[0].str));
}
-#line 5507 "util/configparser.c"
+#line 4844 "util/configparser.c"
break;
- case 450:
-#line 1909 "util/configparser.y"
+ case 454: /* server_cache_max_ttl: VAR_CACHE_MAX_TTL STRING_ARG */
+#line 1918 "util/configparser.y"
{
OUTYY(("P(server_cache_max_ttl:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -5515,11 +4852,11 @@ yyreduce:
else cfg_parser->cfg->max_ttl = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 5519 "util/configparser.c"
+#line 4856 "util/configparser.c"
break;
- case 451:
-#line 1918 "util/configparser.y"
+ case 455: /* server_cache_max_negative_ttl: VAR_CACHE_MAX_NEGATIVE_TTL STRING_ARG */
+#line 1927 "util/configparser.y"
{
OUTYY(("P(server_cache_max_negative_ttl:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -5527,11 +4864,11 @@ yyreduce:
else cfg_parser->cfg->max_negative_ttl = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 5531 "util/configparser.c"
+#line 4868 "util/configparser.c"
break;
- case 452:
-#line 1927 "util/configparser.y"
+ case 456: /* server_cache_min_ttl: VAR_CACHE_MIN_TTL STRING_ARG */
+#line 1936 "util/configparser.y"
{
OUTYY(("P(server_cache_min_ttl:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -5539,11 +4876,11 @@ yyreduce:
else cfg_parser->cfg->min_ttl = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 5543 "util/configparser.c"
+#line 4880 "util/configparser.c"
break;
- case 453:
-#line 1936 "util/configparser.y"
+ case 457: /* server_bogus_ttl: VAR_BOGUS_TTL STRING_ARG */
+#line 1945 "util/configparser.y"
{
OUTYY(("P(server_bogus_ttl:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -5551,11 +4888,11 @@ yyreduce:
else cfg_parser->cfg->bogus_ttl = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 5555 "util/configparser.c"
+#line 4892 "util/configparser.c"
break;
- case 454:
-#line 1945 "util/configparser.y"
+ case 458: /* server_val_clean_additional: VAR_VAL_CLEAN_ADDITIONAL STRING_ARG */
+#line 1954 "util/configparser.y"
{
OUTYY(("P(server_val_clean_additional:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -5564,11 +4901,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5568 "util/configparser.c"
+#line 4905 "util/configparser.c"
break;
- case 455:
-#line 1955 "util/configparser.y"
+ case 459: /* server_val_permissive_mode: VAR_VAL_PERMISSIVE_MODE STRING_ARG */
+#line 1964 "util/configparser.y"
{
OUTYY(("P(server_val_permissive_mode:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -5577,11 +4914,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5581 "util/configparser.c"
+#line 4918 "util/configparser.c"
break;
- case 456:
-#line 1965 "util/configparser.y"
+ case 460: /* server_aggressive_nsec: VAR_AGGRESSIVE_NSEC STRING_ARG */
+#line 1974 "util/configparser.y"
{
OUTYY(("P(server_aggressive_nsec:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -5591,11 +4928,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5595 "util/configparser.c"
+#line 4932 "util/configparser.c"
break;
- case 457:
-#line 1976 "util/configparser.y"
+ case 461: /* server_ignore_cd_flag: VAR_IGNORE_CD_FLAG STRING_ARG */
+#line 1985 "util/configparser.y"
{
OUTYY(("P(server_ignore_cd_flag:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -5603,11 +4940,11 @@ yyreduce:
else cfg_parser->cfg->ignore_cd = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5607 "util/configparser.c"
+#line 4944 "util/configparser.c"
break;
- case 458:
-#line 1985 "util/configparser.y"
+ case 462: /* server_serve_expired: VAR_SERVE_EXPIRED STRING_ARG */
+#line 1994 "util/configparser.y"
{
OUTYY(("P(server_serve_expired:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -5615,11 +4952,11 @@ yyreduce:
else cfg_parser->cfg->serve_expired = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5619 "util/configparser.c"
+#line 4956 "util/configparser.c"
break;
- case 459:
-#line 1994 "util/configparser.y"
+ case 463: /* server_serve_expired_ttl: VAR_SERVE_EXPIRED_TTL STRING_ARG */
+#line 2003 "util/configparser.y"
{
OUTYY(("P(server_serve_expired_ttl:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -5627,11 +4964,11 @@ yyreduce:
else cfg_parser->cfg->serve_expired_ttl = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 5631 "util/configparser.c"
+#line 4968 "util/configparser.c"
break;
- case 460:
-#line 2003 "util/configparser.y"
+ case 464: /* server_serve_expired_ttl_reset: VAR_SERVE_EXPIRED_TTL_RESET STRING_ARG */
+#line 2012 "util/configparser.y"
{
OUTYY(("P(server_serve_expired_ttl_reset:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -5639,11 +4976,11 @@ yyreduce:
else cfg_parser->cfg->serve_expired_ttl_reset = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5643 "util/configparser.c"
+#line 4980 "util/configparser.c"
break;
- case 461:
-#line 2012 "util/configparser.y"
+ case 465: /* server_serve_expired_reply_ttl: VAR_SERVE_EXPIRED_REPLY_TTL STRING_ARG */
+#line 2021 "util/configparser.y"
{
OUTYY(("P(server_serve_expired_reply_ttl:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -5651,11 +4988,11 @@ yyreduce:
else cfg_parser->cfg->serve_expired_reply_ttl = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 5655 "util/configparser.c"
+#line 4992 "util/configparser.c"
break;
- case 462:
-#line 2021 "util/configparser.y"
+ case 466: /* server_serve_expired_client_timeout: VAR_SERVE_EXPIRED_CLIENT_TIMEOUT STRING_ARG */
+#line 2030 "util/configparser.y"
{
OUTYY(("P(server_serve_expired_client_timeout:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -5663,11 +5000,23 @@ yyreduce:
else cfg_parser->cfg->serve_expired_client_timeout = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 5667 "util/configparser.c"
+#line 5004 "util/configparser.c"
break;
- case 463:
-#line 2030 "util/configparser.y"
+ case 467: /* server_ede_serve_expired: VAR_EDE_SERVE_EXPIRED STRING_ARG */
+#line 2039 "util/configparser.y"
+ {
+ OUTYY(("P(server_ede_serve_expired:%s)\n", (yyvsp[0].str)));
+ if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->ede_serve_expired = (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 5016 "util/configparser.c"
+ break;
+
+ case 468: /* server_serve_original_ttl: VAR_SERVE_ORIGINAL_TTL STRING_ARG */
+#line 2048 "util/configparser.y"
{
OUTYY(("P(server_serve_original_ttl:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -5675,11 +5024,11 @@ yyreduce:
else cfg_parser->cfg->serve_original_ttl = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5679 "util/configparser.c"
+#line 5028 "util/configparser.c"
break;
- case 464:
-#line 2039 "util/configparser.y"
+ case 469: /* server_fake_dsa: VAR_FAKE_DSA STRING_ARG */
+#line 2057 "util/configparser.y"
{
OUTYY(("P(server_fake_dsa:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -5691,11 +5040,11 @@ yyreduce:
#endif
free((yyvsp[0].str));
}
-#line 5695 "util/configparser.c"
+#line 5044 "util/configparser.c"
break;
- case 465:
-#line 2052 "util/configparser.y"
+ case 470: /* server_fake_sha1: VAR_FAKE_SHA1 STRING_ARG */
+#line 2070 "util/configparser.y"
{
OUTYY(("P(server_fake_sha1:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -5707,11 +5056,11 @@ yyreduce:
#endif
free((yyvsp[0].str));
}
-#line 5711 "util/configparser.c"
+#line 5060 "util/configparser.c"
break;
- case 466:
-#line 2065 "util/configparser.y"
+ case 471: /* server_val_log_level: VAR_VAL_LOG_LEVEL STRING_ARG */
+#line 2083 "util/configparser.y"
{
OUTYY(("P(server_val_log_level:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -5719,21 +5068,21 @@ yyreduce:
else cfg_parser->cfg->val_log_level = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 5723 "util/configparser.c"
+#line 5072 "util/configparser.c"
break;
- case 467:
-#line 2074 "util/configparser.y"
+ case 472: /* server_val_nsec3_keysize_iterations: VAR_VAL_NSEC3_KEYSIZE_ITERATIONS STRING_ARG */
+#line 2092 "util/configparser.y"
{
OUTYY(("P(server_val_nsec3_keysize_iterations:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->val_nsec3_key_iterations);
cfg_parser->cfg->val_nsec3_key_iterations = (yyvsp[0].str);
}
-#line 5733 "util/configparser.c"
+#line 5082 "util/configparser.c"
break;
- case 468:
-#line 2081 "util/configparser.y"
+ case 473: /* server_zonemd_permissive_mode: VAR_ZONEMD_PERMISSIVE_MODE STRING_ARG */
+#line 2099 "util/configparser.y"
{
OUTYY(("P(server_zonemd_permissive_mode:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -5741,11 +5090,11 @@ yyreduce:
else cfg_parser->cfg->zonemd_permissive_mode = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5745 "util/configparser.c"
+#line 5094 "util/configparser.c"
break;
- case 469:
-#line 2090 "util/configparser.y"
+ case 474: /* server_add_holddown: VAR_ADD_HOLDDOWN STRING_ARG */
+#line 2108 "util/configparser.y"
{
OUTYY(("P(server_add_holddown:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -5753,11 +5102,11 @@ yyreduce:
else cfg_parser->cfg->add_holddown = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 5757 "util/configparser.c"
+#line 5106 "util/configparser.c"
break;
- case 470:
-#line 2099 "util/configparser.y"
+ case 475: /* server_del_holddown: VAR_DEL_HOLDDOWN STRING_ARG */
+#line 2117 "util/configparser.y"
{
OUTYY(("P(server_del_holddown:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -5765,11 +5114,11 @@ yyreduce:
else cfg_parser->cfg->del_holddown = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 5769 "util/configparser.c"
+#line 5118 "util/configparser.c"
break;
- case 471:
-#line 2108 "util/configparser.y"
+ case 476: /* server_keep_missing: VAR_KEEP_MISSING STRING_ARG */
+#line 2126 "util/configparser.y"
{
OUTYY(("P(server_keep_missing:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -5777,11 +5126,11 @@ yyreduce:
else cfg_parser->cfg->keep_missing = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 5781 "util/configparser.c"
+#line 5130 "util/configparser.c"
break;
- case 472:
-#line 2117 "util/configparser.y"
+ case 477: /* server_permit_small_holddown: VAR_PERMIT_SMALL_HOLDDOWN STRING_ARG */
+#line 2135 "util/configparser.y"
{
OUTYY(("P(server_permit_small_holddown:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -5790,22 +5139,22 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5794 "util/configparser.c"
+#line 5143 "util/configparser.c"
break;
- case 473:
-#line 2126 "util/configparser.y"
+ case 478: /* server_key_cache_size: VAR_KEY_CACHE_SIZE STRING_ARG */
+#line 2144 "util/configparser.y"
{
OUTYY(("P(server_key_cache_size:%s)\n", (yyvsp[0].str)));
if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->key_cache_size))
yyerror("memory size expected");
free((yyvsp[0].str));
}
-#line 5805 "util/configparser.c"
+#line 5154 "util/configparser.c"
break;
- case 474:
-#line 2134 "util/configparser.y"
+ case 479: /* server_key_cache_slabs: VAR_KEY_CACHE_SLABS STRING_ARG */
+#line 2152 "util/configparser.y"
{
OUTYY(("P(server_key_cache_slabs:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0) {
@@ -5817,22 +5166,22 @@ yyreduce:
}
free((yyvsp[0].str));
}
-#line 5821 "util/configparser.c"
+#line 5170 "util/configparser.c"
break;
- case 475:
-#line 2147 "util/configparser.y"
+ case 480: /* server_neg_cache_size: VAR_NEG_CACHE_SIZE STRING_ARG */
+#line 2165 "util/configparser.y"
{
OUTYY(("P(server_neg_cache_size:%s)\n", (yyvsp[0].str)));
if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->neg_cache_size))
yyerror("memory size expected");
free((yyvsp[0].str));
}
-#line 5832 "util/configparser.c"
+#line 5181 "util/configparser.c"
break;
- case 476:
-#line 2155 "util/configparser.y"
+ case 481: /* server_local_zone: VAR_LOCAL_ZONE STRING_ARG STRING_ARG */
+#line 2173 "util/configparser.y"
{
OUTYY(("P(server_local_zone:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "static")!=0 && strcmp((yyvsp[0].str), "deny")!=0 &&
@@ -5848,7 +5197,7 @@ yyreduce:
&& strcmp((yyvsp[0].str), "noview")!=0
&& strcmp((yyvsp[0].str), "inform")!=0 && strcmp((yyvsp[0].str), "inform_deny")!=0
&& strcmp((yyvsp[0].str), "inform_redirect") != 0
- && strcmp((yyvsp[0].str), "ipset") != 0) {
+ && strcmp((yyvsp[0].str), "ipset") != 0) {
yyerror("local-zone type: expected static, deny, "
"refuse, redirect, transparent, "
"typetransparent, inform, inform_deny, "
@@ -5865,6 +5214,16 @@ yyreduce:
free((yyvsp[0].str));
#ifdef USE_IPSET
} else if(strcmp((yyvsp[0].str), "ipset")==0) {
+ size_t len = strlen((yyvsp[-1].str));
+ /* Make sure to add the trailing dot.
+ * These are str compared to domain names. */
+ if((yyvsp[-1].str)[len-1] != '.') {
+ if(!((yyvsp[-1].str) = realloc((yyvsp[-1].str), len+2))) {
+ fatal_exit("out of memory adding local-zone");
+ }
+ (yyvsp[-1].str)[len] = '.';
+ (yyvsp[-1].str)[len+1] = 0;
+ }
if(!cfg_strlist_insert(&cfg_parser->cfg->
local_zones_ipset, (yyvsp[-1].str)))
fatal_exit("out of memory adding local-zone");
@@ -5876,21 +5235,21 @@ yyreduce:
fatal_exit("out of memory adding local-zone");
}
}
-#line 5880 "util/configparser.c"
+#line 5239 "util/configparser.c"
break;
- case 477:
-#line 2200 "util/configparser.y"
+ case 482: /* server_local_data: VAR_LOCAL_DATA STRING_ARG */
+#line 2228 "util/configparser.y"
{
OUTYY(("P(server_local_data:%s)\n", (yyvsp[0].str)));
if(!cfg_strlist_insert(&cfg_parser->cfg->local_data, (yyvsp[0].str)))
fatal_exit("out of memory adding local-data");
}
-#line 5890 "util/configparser.c"
+#line 5249 "util/configparser.c"
break;
- case 478:
-#line 2207 "util/configparser.y"
+ case 483: /* server_local_data_ptr: VAR_LOCAL_DATA_PTR STRING_ARG */
+#line 2235 "util/configparser.y"
{
char* ptr;
OUTYY(("P(server_local_data_ptr:%s)\n", (yyvsp[0].str)));
@@ -5904,11 +5263,11 @@ yyreduce:
yyerror("local-data-ptr could not be reversed");
}
}
-#line 5908 "util/configparser.c"
+#line 5267 "util/configparser.c"
break;
- case 479:
-#line 2222 "util/configparser.y"
+ case 484: /* server_minimal_responses: VAR_MINIMAL_RESPONSES STRING_ARG */
+#line 2250 "util/configparser.y"
{
OUTYY(("P(server_minimal_responses:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -5917,11 +5276,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5921 "util/configparser.c"
+#line 5280 "util/configparser.c"
break;
- case 480:
-#line 2232 "util/configparser.y"
+ case 485: /* server_rrset_roundrobin: VAR_RRSET_ROUNDROBIN STRING_ARG */
+#line 2260 "util/configparser.y"
{
OUTYY(("P(server_rrset_roundrobin:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -5930,41 +5289,41 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5934 "util/configparser.c"
+#line 5293 "util/configparser.c"
break;
- case 481:
-#line 2242 "util/configparser.y"
+ case 486: /* server_unknown_server_time_limit: VAR_UNKNOWN_SERVER_TIME_LIMIT STRING_ARG */
+#line 2270 "util/configparser.y"
{
OUTYY(("P(server_unknown_server_time_limit:%s)\n", (yyvsp[0].str)));
cfg_parser->cfg->unknown_server_time_limit = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 5944 "util/configparser.c"
+#line 5303 "util/configparser.c"
break;
- case 482:
-#line 2249 "util/configparser.y"
+ case 487: /* server_max_udp_size: VAR_MAX_UDP_SIZE STRING_ARG */
+#line 2277 "util/configparser.y"
{
OUTYY(("P(server_max_udp_size:%s)\n", (yyvsp[0].str)));
cfg_parser->cfg->max_udp_size = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 5954 "util/configparser.c"
+#line 5313 "util/configparser.c"
break;
- case 483:
-#line 2256 "util/configparser.y"
+ case 488: /* server_dns64_prefix: VAR_DNS64_PREFIX STRING_ARG */
+#line 2284 "util/configparser.y"
{
OUTYY(("P(dns64_prefix:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->dns64_prefix);
cfg_parser->cfg->dns64_prefix = (yyvsp[0].str);
}
-#line 5964 "util/configparser.c"
+#line 5323 "util/configparser.c"
break;
- case 484:
-#line 2263 "util/configparser.y"
+ case 489: /* server_dns64_synthall: VAR_DNS64_SYNTHALL STRING_ARG */
+#line 2291 "util/configparser.y"
{
OUTYY(("P(server_dns64_synthall:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -5972,22 +5331,22 @@ yyreduce:
else cfg_parser->cfg->dns64_synthall = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5976 "util/configparser.c"
+#line 5335 "util/configparser.c"
break;
- case 485:
-#line 2272 "util/configparser.y"
+ case 490: /* server_dns64_ignore_aaaa: VAR_DNS64_IGNORE_AAAA STRING_ARG */
+#line 2300 "util/configparser.y"
{
OUTYY(("P(dns64_ignore_aaaa:%s)\n", (yyvsp[0].str)));
if(!cfg_strlist_insert(&cfg_parser->cfg->dns64_ignore_aaaa,
(yyvsp[0].str)))
fatal_exit("out of memory adding dns64-ignore-aaaa");
}
-#line 5987 "util/configparser.c"
+#line 5346 "util/configparser.c"
break;
- case 486:
-#line 2280 "util/configparser.y"
+ case 491: /* server_define_tag: VAR_DEFINE_TAG STRING_ARG */
+#line 2308 "util/configparser.y"
{
char* p, *s = (yyvsp[0].str);
OUTYY(("P(server_define_tag:%s)\n", (yyvsp[0].str)));
@@ -6000,11 +5359,11 @@ yyreduce:
}
free((yyvsp[0].str));
}
-#line 6004 "util/configparser.c"
+#line 5363 "util/configparser.c"
break;
- case 487:
-#line 2294 "util/configparser.y"
+ case 492: /* server_local_zone_tag: VAR_LOCAL_ZONE_TAG STRING_ARG STRING_ARG */
+#line 2322 "util/configparser.y"
{
size_t len = 0;
uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str),
@@ -6024,11 +5383,11 @@ yyreduce:
}
}
}
-#line 6028 "util/configparser.c"
+#line 5387 "util/configparser.c"
break;
- case 488:
-#line 2315 "util/configparser.y"
+ case 493: /* server_access_control_tag: VAR_ACCESS_CONTROL_TAG STRING_ARG STRING_ARG */
+#line 2343 "util/configparser.y"
{
size_t len = 0;
uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str),
@@ -6048,11 +5407,11 @@ yyreduce:
}
}
}
-#line 6052 "util/configparser.c"
+#line 5411 "util/configparser.c"
break;
- case 489:
-#line 2336 "util/configparser.y"
+ case 494: /* server_access_control_tag_action: VAR_ACCESS_CONTROL_TAG_ACTION STRING_ARG STRING_ARG STRING_ARG */
+#line 2364 "util/configparser.y"
{
OUTYY(("P(server_access_control_tag_action:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str)));
if(!cfg_str3list_insert(&cfg_parser->cfg->acl_tag_actions,
@@ -6063,11 +5422,11 @@ yyreduce:
free((yyvsp[0].str));
}
}
-#line 6067 "util/configparser.c"
+#line 5426 "util/configparser.c"
break;
- case 490:
-#line 2348 "util/configparser.y"
+ case 495: /* server_access_control_tag_data: VAR_ACCESS_CONTROL_TAG_DATA STRING_ARG STRING_ARG STRING_ARG */
+#line 2376 "util/configparser.y"
{
OUTYY(("P(server_access_control_tag_data:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str)));
if(!cfg_str3list_insert(&cfg_parser->cfg->acl_tag_datas,
@@ -6078,11 +5437,11 @@ yyreduce:
free((yyvsp[0].str));
}
}
-#line 6082 "util/configparser.c"
+#line 5441 "util/configparser.c"
break;
- case 491:
-#line 2360 "util/configparser.y"
+ case 496: /* server_local_zone_override: VAR_LOCAL_ZONE_OVERRIDE STRING_ARG STRING_ARG STRING_ARG */
+#line 2388 "util/configparser.y"
{
OUTYY(("P(server_local_zone_override:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str)));
if(!cfg_str3list_insert(&cfg_parser->cfg->local_zone_overrides,
@@ -6093,11 +5452,11 @@ yyreduce:
free((yyvsp[0].str));
}
}
-#line 6097 "util/configparser.c"
+#line 5456 "util/configparser.c"
break;
- case 492:
-#line 2372 "util/configparser.y"
+ case 497: /* server_access_control_view: VAR_ACCESS_CONTROL_VIEW STRING_ARG STRING_ARG */
+#line 2400 "util/configparser.y"
{
OUTYY(("P(server_access_control_view:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
if(!cfg_str2list_insert(&cfg_parser->cfg->acl_view,
@@ -6105,11 +5464,11 @@ yyreduce:
yyerror("out of memory");
}
}
-#line 6109 "util/configparser.c"
+#line 5468 "util/configparser.c"
break;
- case 493:
-#line 2381 "util/configparser.y"
+ case 498: /* server_response_ip_tag: VAR_RESPONSE_IP_TAG STRING_ARG STRING_ARG */
+#line 2409 "util/configparser.y"
{
size_t len = 0;
uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str),
@@ -6129,11 +5488,11 @@ yyreduce:
}
}
}
-#line 6133 "util/configparser.c"
+#line 5492 "util/configparser.c"
break;
- case 494:
-#line 2402 "util/configparser.y"
+ case 499: /* server_ip_ratelimit: VAR_IP_RATELIMIT STRING_ARG */
+#line 2430 "util/configparser.y"
{
OUTYY(("P(server_ip_ratelimit:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -6141,11 +5500,11 @@ yyreduce:
else cfg_parser->cfg->ip_ratelimit = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 6145 "util/configparser.c"
+#line 5504 "util/configparser.c"
break;
- case 495:
-#line 2411 "util/configparser.y"
+ case 500: /* server_ratelimit: VAR_RATELIMIT STRING_ARG */
+#line 2439 "util/configparser.y"
{
OUTYY(("P(server_ratelimit:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -6153,33 +5512,33 @@ yyreduce:
else cfg_parser->cfg->ratelimit = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 6157 "util/configparser.c"
+#line 5516 "util/configparser.c"
break;
- case 496:
-#line 2420 "util/configparser.y"
+ case 501: /* server_ip_ratelimit_size: VAR_IP_RATELIMIT_SIZE STRING_ARG */
+#line 2448 "util/configparser.y"
{
OUTYY(("P(server_ip_ratelimit_size:%s)\n", (yyvsp[0].str)));
if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->ip_ratelimit_size))
yyerror("memory size expected");
free((yyvsp[0].str));
}
-#line 6168 "util/configparser.c"
+#line 5527 "util/configparser.c"
break;
- case 497:
-#line 2428 "util/configparser.y"
+ case 502: /* server_ratelimit_size: VAR_RATELIMIT_SIZE STRING_ARG */
+#line 2456 "util/configparser.y"
{
OUTYY(("P(server_ratelimit_size:%s)\n", (yyvsp[0].str)));
if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->ratelimit_size))
yyerror("memory size expected");
free((yyvsp[0].str));
}
-#line 6179 "util/configparser.c"
+#line 5538 "util/configparser.c"
break;
- case 498:
-#line 2436 "util/configparser.y"
+ case 503: /* server_ip_ratelimit_slabs: VAR_IP_RATELIMIT_SLABS STRING_ARG */
+#line 2464 "util/configparser.y"
{
OUTYY(("P(server_ip_ratelimit_slabs:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0) {
@@ -6191,11 +5550,11 @@ yyreduce:
}
free((yyvsp[0].str));
}
-#line 6195 "util/configparser.c"
+#line 5554 "util/configparser.c"
break;
- case 499:
-#line 2449 "util/configparser.y"
+ case 504: /* server_ratelimit_slabs: VAR_RATELIMIT_SLABS STRING_ARG */
+#line 2477 "util/configparser.y"
{
OUTYY(("P(server_ratelimit_slabs:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0) {
@@ -6207,11 +5566,11 @@ yyreduce:
}
free((yyvsp[0].str));
}
-#line 6211 "util/configparser.c"
+#line 5570 "util/configparser.c"
break;
- case 500:
-#line 2462 "util/configparser.y"
+ case 505: /* server_ratelimit_for_domain: VAR_RATELIMIT_FOR_DOMAIN STRING_ARG STRING_ARG */
+#line 2490 "util/configparser.y"
{
OUTYY(("P(server_ratelimit_for_domain:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) {
@@ -6225,11 +5584,11 @@ yyreduce:
"ratelimit-for-domain");
}
}
-#line 6229 "util/configparser.c"
+#line 5588 "util/configparser.c"
break;
- case 501:
-#line 2477 "util/configparser.y"
+ case 506: /* server_ratelimit_below_domain: VAR_RATELIMIT_BELOW_DOMAIN STRING_ARG STRING_ARG */
+#line 2505 "util/configparser.y"
{
OUTYY(("P(server_ratelimit_below_domain:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) {
@@ -6243,11 +5602,11 @@ yyreduce:
"ratelimit-below-domain");
}
}
-#line 6247 "util/configparser.c"
+#line 5606 "util/configparser.c"
break;
- case 502:
-#line 2492 "util/configparser.y"
+ case 507: /* server_ip_ratelimit_factor: VAR_IP_RATELIMIT_FACTOR STRING_ARG */
+#line 2520 "util/configparser.y"
{
OUTYY(("P(server_ip_ratelimit_factor:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -6255,11 +5614,11 @@ yyreduce:
else cfg_parser->cfg->ip_ratelimit_factor = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 6259 "util/configparser.c"
+#line 5618 "util/configparser.c"
break;
- case 503:
-#line 2501 "util/configparser.y"
+ case 508: /* server_ratelimit_factor: VAR_RATELIMIT_FACTOR STRING_ARG */
+#line 2529 "util/configparser.y"
{
OUTYY(("P(server_ratelimit_factor:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -6267,11 +5626,11 @@ yyreduce:
else cfg_parser->cfg->ratelimit_factor = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 6271 "util/configparser.c"
+#line 5630 "util/configparser.c"
break;
- case 504:
-#line 2510 "util/configparser.y"
+ case 509: /* server_ip_ratelimit_backoff: VAR_IP_RATELIMIT_BACKOFF STRING_ARG */
+#line 2538 "util/configparser.y"
{
OUTYY(("P(server_ip_ratelimit_backoff:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -6280,11 +5639,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 6284 "util/configparser.c"
+#line 5643 "util/configparser.c"
break;
- case 505:
-#line 2520 "util/configparser.y"
+ case 510: /* server_ratelimit_backoff: VAR_RATELIMIT_BACKOFF STRING_ARG */
+#line 2548 "util/configparser.y"
{
OUTYY(("P(server_ratelimit_backoff:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -6293,11 +5652,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 6297 "util/configparser.c"
+#line 5656 "util/configparser.c"
break;
- case 506:
-#line 2530 "util/configparser.y"
+ case 511: /* server_outbound_msg_retry: VAR_OUTBOUND_MSG_RETRY STRING_ARG */
+#line 2558 "util/configparser.y"
{
OUTYY(("P(server_outbound_msg_retry:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -6305,20 +5664,20 @@ yyreduce:
else cfg_parser->cfg->outbound_msg_retry = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 6309 "util/configparser.c"
+#line 5668 "util/configparser.c"
break;
- case 507:
-#line 2539 "util/configparser.y"
+ case 512: /* server_low_rtt: VAR_LOW_RTT STRING_ARG */
+#line 2567 "util/configparser.y"
{
OUTYY(("P(low-rtt option is deprecated, use fast-server-num instead)\n"));
free((yyvsp[0].str));
}
-#line 6318 "util/configparser.c"
+#line 5677 "util/configparser.c"
break;
- case 508:
-#line 2545 "util/configparser.y"
+ case 513: /* server_fast_server_num: VAR_FAST_SERVER_NUM STRING_ARG */
+#line 2573 "util/configparser.y"
{
OUTYY(("P(server_fast_server_num:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) <= 0)
@@ -6326,11 +5685,11 @@ yyreduce:
else cfg_parser->cfg->fast_server_num = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 6330 "util/configparser.c"
+#line 5689 "util/configparser.c"
break;
- case 509:
-#line 2554 "util/configparser.y"
+ case 514: /* server_fast_server_permil: VAR_FAST_SERVER_PERMIL STRING_ARG */
+#line 2582 "util/configparser.y"
{
OUTYY(("P(server_fast_server_permil:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -6338,11 +5697,11 @@ yyreduce:
else cfg_parser->cfg->fast_server_permil = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 6342 "util/configparser.c"
+#line 5701 "util/configparser.c"
break;
- case 510:
-#line 2563 "util/configparser.y"
+ case 515: /* server_qname_minimisation: VAR_QNAME_MINIMISATION STRING_ARG */
+#line 2591 "util/configparser.y"
{
OUTYY(("P(server_qname_minimisation:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -6351,11 +5710,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 6355 "util/configparser.c"
+#line 5714 "util/configparser.c"
break;
- case 511:
-#line 2573 "util/configparser.y"
+ case 516: /* server_qname_minimisation_strict: VAR_QNAME_MINIMISATION_STRICT STRING_ARG */
+#line 2601 "util/configparser.y"
{
OUTYY(("P(server_qname_minimisation_strict:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -6364,11 +5723,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 6368 "util/configparser.c"
+#line 5727 "util/configparser.c"
break;
- case 512:
-#line 2583 "util/configparser.y"
+ case 517: /* server_pad_responses: VAR_PAD_RESPONSES STRING_ARG */
+#line 2611 "util/configparser.y"
{
OUTYY(("P(server_pad_responses:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -6377,11 +5736,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 6381 "util/configparser.c"
+#line 5740 "util/configparser.c"
break;
- case 513:
-#line 2593 "util/configparser.y"
+ case 518: /* server_pad_responses_block_size: VAR_PAD_RESPONSES_BLOCK_SIZE STRING_ARG */
+#line 2621 "util/configparser.y"
{
OUTYY(("P(server_pad_responses_block_size:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0)
@@ -6389,11 +5748,11 @@ yyreduce:
else cfg_parser->cfg->pad_responses_block_size = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 6393 "util/configparser.c"
+#line 5752 "util/configparser.c"
break;
- case 514:
-#line 2602 "util/configparser.y"
+ case 519: /* server_pad_queries: VAR_PAD_QUERIES STRING_ARG */
+#line 2630 "util/configparser.y"
{
OUTYY(("P(server_pad_queries:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -6402,11 +5761,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 6406 "util/configparser.c"
+#line 5765 "util/configparser.c"
break;
- case 515:
-#line 2612 "util/configparser.y"
+ case 520: /* server_pad_queries_block_size: VAR_PAD_QUERIES_BLOCK_SIZE STRING_ARG */
+#line 2640 "util/configparser.y"
{
OUTYY(("P(server_pad_queries_block_size:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0)
@@ -6414,11 +5773,11 @@ yyreduce:
else cfg_parser->cfg->pad_queries_block_size = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 6418 "util/configparser.c"
+#line 5777 "util/configparser.c"
break;
- case 516:
-#line 2621 "util/configparser.y"
+ case 521: /* server_ipsecmod_enabled: VAR_IPSECMOD_ENABLED STRING_ARG */
+#line 2649 "util/configparser.y"
{
#ifdef USE_IPSECMOD
OUTYY(("P(server_ipsecmod_enabled:%s)\n", (yyvsp[0].str)));
@@ -6430,11 +5789,11 @@ yyreduce:
#endif
free((yyvsp[0].str));
}
-#line 6434 "util/configparser.c"
+#line 5793 "util/configparser.c"
break;
- case 517:
-#line 2634 "util/configparser.y"
+ case 522: /* server_ipsecmod_ignore_bogus: VAR_IPSECMOD_IGNORE_BOGUS STRING_ARG */
+#line 2662 "util/configparser.y"
{
#ifdef USE_IPSECMOD
OUTYY(("P(server_ipsecmod_ignore_bogus:%s)\n", (yyvsp[0].str)));
@@ -6446,11 +5805,11 @@ yyreduce:
#endif
free((yyvsp[0].str));
}
-#line 6450 "util/configparser.c"
+#line 5809 "util/configparser.c"
break;
- case 518:
-#line 2647 "util/configparser.y"
+ case 523: /* server_ipsecmod_hook: VAR_IPSECMOD_HOOK STRING_ARG */
+#line 2675 "util/configparser.y"
{
#ifdef USE_IPSECMOD
OUTYY(("P(server_ipsecmod_hook:%s)\n", (yyvsp[0].str)));
@@ -6461,11 +5820,11 @@ yyreduce:
free((yyvsp[0].str));
#endif
}
-#line 6465 "util/configparser.c"
+#line 5824 "util/configparser.c"
break;
- case 519:
-#line 2659 "util/configparser.y"
+ case 524: /* server_ipsecmod_max_ttl: VAR_IPSECMOD_MAX_TTL STRING_ARG */
+#line 2687 "util/configparser.y"
{
#ifdef USE_IPSECMOD
OUTYY(("P(server_ipsecmod_max_ttl:%s)\n", (yyvsp[0].str)));
@@ -6478,11 +5837,11 @@ yyreduce:
free((yyvsp[0].str));
#endif
}
-#line 6482 "util/configparser.c"
+#line 5841 "util/configparser.c"
break;
- case 520:
-#line 2673 "util/configparser.y"
+ case 525: /* server_ipsecmod_whitelist: VAR_IPSECMOD_WHITELIST STRING_ARG */
+#line 2701 "util/configparser.y"
{
#ifdef USE_IPSECMOD
OUTYY(("P(server_ipsecmod_whitelist:%s)\n", (yyvsp[0].str)));
@@ -6493,11 +5852,11 @@ yyreduce:
free((yyvsp[0].str));
#endif
}
-#line 6497 "util/configparser.c"
+#line 5856 "util/configparser.c"
break;
- case 521:
-#line 2685 "util/configparser.y"
+ case 526: /* server_ipsecmod_strict: VAR_IPSECMOD_STRICT STRING_ARG */
+#line 2713 "util/configparser.y"
{
#ifdef USE_IPSECMOD
OUTYY(("P(server_ipsecmod_strict:%s)\n", (yyvsp[0].str)));
@@ -6510,11 +5869,11 @@ yyreduce:
free((yyvsp[0].str));
#endif
}
-#line 6514 "util/configparser.c"
+#line 5873 "util/configparser.c"
break;
- case 522:
-#line 2699 "util/configparser.y"
+ case 527: /* server_edns_client_string: VAR_EDNS_CLIENT_STRING STRING_ARG STRING_ARG */
+#line 2727 "util/configparser.y"
{
OUTYY(("P(server_edns_client_string:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
if(!cfg_str2list_insert(
@@ -6522,11 +5881,11 @@ yyreduce:
fatal_exit("out of memory adding "
"edns-client-string");
}
-#line 6526 "util/configparser.c"
+#line 5885 "util/configparser.c"
break;
- case 523:
-#line 2708 "util/configparser.y"
+ case 528: /* server_edns_client_string_opcode: VAR_EDNS_CLIENT_STRING_OPCODE STRING_ARG */
+#line 2736 "util/configparser.y"
{
OUTYY(("P(edns_client_string_opcode:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -6535,13 +5894,24 @@ yyreduce:
yyerror("option code must be in interval [0, 65535]");
else cfg_parser->cfg->edns_client_string_opcode = atoi((yyvsp[0].str));
free((yyvsp[0].str));
+ }
+#line 5899 "util/configparser.c"
+ break;
+ case 529: /* server_ede: VAR_EDE STRING_ARG */
+#line 2747 "util/configparser.y"
+ {
+ OUTYY(("P(server_ede:%s)\n", (yyvsp[0].str)));
+ if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->ede = (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
}
-#line 6541 "util/configparser.c"
+#line 5911 "util/configparser.c"
break;
- case 524:
-#line 2720 "util/configparser.y"
+ case 530: /* stub_name: VAR_NAME STRING_ARG */
+#line 2756 "util/configparser.y"
{
OUTYY(("P(name:%s)\n", (yyvsp[0].str)));
if(cfg_parser->cfg->stubs->name)
@@ -6550,31 +5920,31 @@ yyreduce:
free(cfg_parser->cfg->stubs->name);
cfg_parser->cfg->stubs->name = (yyvsp[0].str);
}
-#line 6554 "util/configparser.c"
+#line 5924 "util/configparser.c"
break;
- case 525:
-#line 2730 "util/configparser.y"
+ case 531: /* stub_host: VAR_STUB_HOST STRING_ARG */
+#line 2766 "util/configparser.y"
{
OUTYY(("P(stub-host:%s)\n", (yyvsp[0].str)));
if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->hosts, (yyvsp[0].str)))
yyerror("out of memory");
}
-#line 6564 "util/configparser.c"
+#line 5934 "util/configparser.c"
break;
- case 526:
-#line 2737 "util/configparser.y"
+ case 532: /* stub_addr: VAR_STUB_ADDR STRING_ARG */
+#line 2773 "util/configparser.y"
{
OUTYY(("P(stub-addr:%s)\n", (yyvsp[0].str)));
if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->addrs, (yyvsp[0].str)))
yyerror("out of memory");
}
-#line 6574 "util/configparser.c"
+#line 5944 "util/configparser.c"
break;
- case 527:
-#line 2744 "util/configparser.y"
+ case 533: /* stub_first: VAR_STUB_FIRST STRING_ARG */
+#line 2780 "util/configparser.y"
{
OUTYY(("P(stub-first:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -6582,11 +5952,11 @@ yyreduce:
else cfg_parser->cfg->stubs->isfirst=(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 6586 "util/configparser.c"
+#line 5956 "util/configparser.c"
break;
- case 528:
-#line 2753 "util/configparser.y"
+ case 534: /* stub_no_cache: VAR_STUB_NO_CACHE STRING_ARG */
+#line 2789 "util/configparser.y"
{
OUTYY(("P(stub-no-cache:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -6594,11 +5964,11 @@ yyreduce:
else cfg_parser->cfg->stubs->no_cache=(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 6598 "util/configparser.c"
+#line 5968 "util/configparser.c"
break;
- case 529:
-#line 2762 "util/configparser.y"
+ case 535: /* stub_ssl_upstream: VAR_STUB_SSL_UPSTREAM STRING_ARG */
+#line 2798 "util/configparser.y"
{
OUTYY(("P(stub-ssl-upstream:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -6607,11 +5977,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 6611 "util/configparser.c"
+#line 5981 "util/configparser.c"
break;
- case 530:
-#line 2772 "util/configparser.y"
+ case 536: /* stub_tcp_upstream: VAR_STUB_TCP_UPSTREAM STRING_ARG */
+#line 2808 "util/configparser.y"
{
OUTYY(("P(stub-tcp-upstream:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -6620,11 +5990,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 6624 "util/configparser.c"
+#line 5994 "util/configparser.c"
break;
- case 531:
-#line 2782 "util/configparser.y"
+ case 537: /* stub_prime: VAR_STUB_PRIME STRING_ARG */
+#line 2818 "util/configparser.y"
{
OUTYY(("P(stub-prime:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -6633,11 +6003,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 6637 "util/configparser.c"
+#line 6007 "util/configparser.c"
break;
- case 532:
-#line 2792 "util/configparser.y"
+ case 538: /* forward_name: VAR_NAME STRING_ARG */
+#line 2828 "util/configparser.y"
{
OUTYY(("P(name:%s)\n", (yyvsp[0].str)));
if(cfg_parser->cfg->forwards->name)
@@ -6646,31 +6016,31 @@ yyreduce:
free(cfg_parser->cfg->forwards->name);
cfg_parser->cfg->forwards->name = (yyvsp[0].str);
}
-#line 6650 "util/configparser.c"
+#line 6020 "util/configparser.c"
break;
- case 533:
-#line 2802 "util/configparser.y"
+ case 539: /* forward_host: VAR_FORWARD_HOST STRING_ARG */
+#line 2838 "util/configparser.y"
{
OUTYY(("P(forward-host:%s)\n", (yyvsp[0].str)));
if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->hosts, (yyvsp[0].str)))
yyerror("out of memory");
}
-#line 6660 "util/configparser.c"
+#line 6030 "util/configparser.c"
break;
- case 534:
-#line 2809 "util/configparser.y"
+ case 540: /* forward_addr: VAR_FORWARD_ADDR STRING_ARG */
+#line 2845 "util/configparser.y"
{
OUTYY(("P(forward-addr:%s)\n", (yyvsp[0].str)));
if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->addrs, (yyvsp[0].str)))
yyerror("out of memory");
}
-#line 6670 "util/configparser.c"
+#line 6040 "util/configparser.c"
break;
- case 535:
-#line 2816 "util/configparser.y"
+ case 541: /* forward_first: VAR_FORWARD_FIRST STRING_ARG */
+#line 2852 "util/configparser.y"
{
OUTYY(("P(forward-first:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -6678,11 +6048,11 @@ yyreduce:
else cfg_parser->cfg->forwards->isfirst=(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 6682 "util/configparser.c"
+#line 6052 "util/configparser.c"
break;
- case 536:
-#line 2825 "util/configparser.y"
+ case 542: /* forward_no_cache: VAR_FORWARD_NO_CACHE STRING_ARG */
+#line 2861 "util/configparser.y"
{
OUTYY(("P(forward-no-cache:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -6690,11 +6060,11 @@ yyreduce:
else cfg_parser->cfg->forwards->no_cache=(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 6694 "util/configparser.c"
+#line 6064 "util/configparser.c"
break;
- case 537:
-#line 2834 "util/configparser.y"
+ case 543: /* forward_ssl_upstream: VAR_FORWARD_SSL_UPSTREAM STRING_ARG */
+#line 2870 "util/configparser.y"
{
OUTYY(("P(forward-ssl-upstream:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -6703,11 +6073,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 6707 "util/configparser.c"
+#line 6077 "util/configparser.c"
break;
- case 538:
-#line 2844 "util/configparser.y"
+ case 544: /* forward_tcp_upstream: VAR_FORWARD_TCP_UPSTREAM STRING_ARG */
+#line 2880 "util/configparser.y"
{
OUTYY(("P(forward-tcp-upstream:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -6716,11 +6086,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 6720 "util/configparser.c"
+#line 6090 "util/configparser.c"
break;
- case 539:
-#line 2854 "util/configparser.y"
+ case 545: /* auth_name: VAR_NAME STRING_ARG */
+#line 2890 "util/configparser.y"
{
OUTYY(("P(name:%s)\n", (yyvsp[0].str)));
if(cfg_parser->cfg->auths->name)
@@ -6729,52 +6099,52 @@ yyreduce:
free(cfg_parser->cfg->auths->name);
cfg_parser->cfg->auths->name = (yyvsp[0].str);
}
-#line 6733 "util/configparser.c"
+#line 6103 "util/configparser.c"
break;
- case 540:
-#line 2864 "util/configparser.y"
+ case 546: /* auth_zonefile: VAR_ZONEFILE STRING_ARG */
+#line 2900 "util/configparser.y"
{
OUTYY(("P(zonefile:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->auths->zonefile);
cfg_parser->cfg->auths->zonefile = (yyvsp[0].str);
}
-#line 6743 "util/configparser.c"
+#line 6113 "util/configparser.c"
break;
- case 541:
-#line 2871 "util/configparser.y"
+ case 547: /* auth_master: VAR_MASTER STRING_ARG */
+#line 2907 "util/configparser.y"
{
OUTYY(("P(master:%s)\n", (yyvsp[0].str)));
if(!cfg_strlist_insert(&cfg_parser->cfg->auths->masters, (yyvsp[0].str)))
yyerror("out of memory");
}
-#line 6753 "util/configparser.c"
+#line 6123 "util/configparser.c"
break;
- case 542:
-#line 2878 "util/configparser.y"
+ case 548: /* auth_url: VAR_URL STRING_ARG */
+#line 2914 "util/configparser.y"
{
OUTYY(("P(url:%s)\n", (yyvsp[0].str)));
if(!cfg_strlist_insert(&cfg_parser->cfg->auths->urls, (yyvsp[0].str)))
yyerror("out of memory");
}
-#line 6763 "util/configparser.c"
+#line 6133 "util/configparser.c"
break;
- case 543:
-#line 2885 "util/configparser.y"
+ case 549: /* auth_allow_notify: VAR_ALLOW_NOTIFY STRING_ARG */
+#line 2921 "util/configparser.y"
{
OUTYY(("P(allow-notify:%s)\n", (yyvsp[0].str)));
if(!cfg_strlist_insert(&cfg_parser->cfg->auths->allow_notify,
(yyvsp[0].str)))
yyerror("out of memory");
}
-#line 6774 "util/configparser.c"
+#line 6144 "util/configparser.c"
break;
- case 544:
-#line 2893 "util/configparser.y"
+ case 550: /* auth_zonemd_check: VAR_ZONEMD_CHECK STRING_ARG */
+#line 2929 "util/configparser.y"
{
OUTYY(("P(zonemd-check:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -6783,11 +6153,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 6787 "util/configparser.c"
+#line 6157 "util/configparser.c"
break;
- case 545:
-#line 2903 "util/configparser.y"
+ case 551: /* auth_zonemd_reject_absence: VAR_ZONEMD_REJECT_ABSENCE STRING_ARG */
+#line 2939 "util/configparser.y"
{
OUTYY(("P(zonemd-reject-absence:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -6796,11 +6166,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 6800 "util/configparser.c"
+#line 6170 "util/configparser.c"
break;
- case 546:
-#line 2913 "util/configparser.y"
+ case 552: /* auth_for_downstream: VAR_FOR_DOWNSTREAM STRING_ARG */
+#line 2949 "util/configparser.y"
{
OUTYY(("P(for-downstream:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -6809,11 +6179,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 6813 "util/configparser.c"
+#line 6183 "util/configparser.c"
break;
- case 547:
-#line 2923 "util/configparser.y"
+ case 553: /* auth_for_upstream: VAR_FOR_UPSTREAM STRING_ARG */
+#line 2959 "util/configparser.y"
{
OUTYY(("P(for-upstream:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -6822,11 +6192,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 6826 "util/configparser.c"
+#line 6196 "util/configparser.c"
break;
- case 548:
-#line 2933 "util/configparser.y"
+ case 554: /* auth_fallback_enabled: VAR_FALLBACK_ENABLED STRING_ARG */
+#line 2969 "util/configparser.y"
{
OUTYY(("P(fallback-enabled:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -6835,11 +6205,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 6839 "util/configparser.c"
+#line 6209 "util/configparser.c"
break;
- case 549:
-#line 2943 "util/configparser.y"
+ case 555: /* view_name: VAR_NAME STRING_ARG */
+#line 2979 "util/configparser.y"
{
OUTYY(("P(name:%s)\n", (yyvsp[0].str)));
if(cfg_parser->cfg->views->name)
@@ -6848,11 +6218,11 @@ yyreduce:
free(cfg_parser->cfg->views->name);
cfg_parser->cfg->views->name = (yyvsp[0].str);
}
-#line 6852 "util/configparser.c"
+#line 6222 "util/configparser.c"
break;
- case 550:
-#line 2953 "util/configparser.y"
+ case 556: /* view_local_zone: VAR_LOCAL_ZONE STRING_ARG STRING_ARG */
+#line 2989 "util/configparser.y"
{
OUTYY(("P(view_local_zone:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "static")!=0 && strcmp((yyvsp[0].str), "deny")!=0 &&
@@ -6885,6 +6255,16 @@ yyreduce:
free((yyvsp[0].str));
#ifdef USE_IPSET
} else if(strcmp((yyvsp[0].str), "ipset")==0) {
+ size_t len = strlen((yyvsp[-1].str));
+ /* Make sure to add the trailing dot.
+ * These are str compared to domain names. */
+ if((yyvsp[-1].str)[len-1] != '.') {
+ if(!((yyvsp[-1].str) = realloc((yyvsp[-1].str), len+2))) {
+ fatal_exit("out of memory adding local-zone");
+ }
+ (yyvsp[-1].str)[len] = '.';
+ (yyvsp[-1].str)[len+1] = 0;
+ }
if(!cfg_strlist_insert(&cfg_parser->cfg->views->
local_zones_ipset, (yyvsp[-1].str)))
fatal_exit("out of memory adding local-zone");
@@ -6897,11 +6277,11 @@ yyreduce:
fatal_exit("out of memory adding local-zone");
}
}
-#line 6901 "util/configparser.c"
+#line 6281 "util/configparser.c"
break;
- case 551:
-#line 2999 "util/configparser.y"
+ case 557: /* view_response_ip: VAR_RESPONSE_IP STRING_ARG STRING_ARG */
+#line 3045 "util/configparser.y"
{
OUTYY(("P(view_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
validate_respip_action((yyvsp[0].str));
@@ -6910,33 +6290,33 @@ yyreduce:
fatal_exit("out of memory adding per-view "
"response-ip action");
}
-#line 6914 "util/configparser.c"
+#line 6294 "util/configparser.c"
break;
- case 552:
-#line 3009 "util/configparser.y"
+ case 558: /* view_response_ip_data: VAR_RESPONSE_IP_DATA STRING_ARG STRING_ARG */
+#line 3055 "util/configparser.y"
{
OUTYY(("P(view_response_ip_data:%s)\n", (yyvsp[-1].str)));
if(!cfg_str2list_insert(
&cfg_parser->cfg->views->respip_data, (yyvsp[-1].str), (yyvsp[0].str)))
fatal_exit("out of memory adding response-ip-data");
}
-#line 6925 "util/configparser.c"
+#line 6305 "util/configparser.c"
break;
- case 553:
-#line 3017 "util/configparser.y"
+ case 559: /* view_local_data: VAR_LOCAL_DATA STRING_ARG */
+#line 3063 "util/configparser.y"
{
OUTYY(("P(view_local_data:%s)\n", (yyvsp[0].str)));
if(!cfg_strlist_insert(&cfg_parser->cfg->views->local_data, (yyvsp[0].str))) {
fatal_exit("out of memory adding local-data");
}
}
-#line 6936 "util/configparser.c"
+#line 6316 "util/configparser.c"
break;
- case 554:
-#line 3025 "util/configparser.y"
+ case 560: /* view_local_data_ptr: VAR_LOCAL_DATA_PTR STRING_ARG */
+#line 3071 "util/configparser.y"
{
char* ptr;
OUTYY(("P(view_local_data_ptr:%s)\n", (yyvsp[0].str)));
@@ -6950,11 +6330,11 @@ yyreduce:
yyerror("local-data-ptr could not be reversed");
}
}
-#line 6954 "util/configparser.c"
+#line 6334 "util/configparser.c"
break;
- case 555:
-#line 3040 "util/configparser.y"
+ case 561: /* view_first: VAR_VIEW_FIRST STRING_ARG */
+#line 3086 "util/configparser.y"
{
OUTYY(("P(view-first:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -6962,19 +6342,19 @@ yyreduce:
else cfg_parser->cfg->views->isfirst=(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 6966 "util/configparser.c"
+#line 6346 "util/configparser.c"
break;
- case 556:
-#line 3049 "util/configparser.y"
+ case 562: /* rcstart: VAR_REMOTE_CONTROL */
+#line 3095 "util/configparser.y"
{
OUTYY(("\nP(remote-control:)\n"));
}
-#line 6974 "util/configparser.c"
+#line 6354 "util/configparser.c"
break;
- case 567:
-#line 3060 "util/configparser.y"
+ case 573: /* rc_control_enable: VAR_CONTROL_ENABLE STRING_ARG */
+#line 3106 "util/configparser.y"
{
OUTYY(("P(control_enable:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -6983,11 +6363,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 6987 "util/configparser.c"
+#line 6367 "util/configparser.c"
break;
- case 568:
-#line 3070 "util/configparser.y"
+ case 574: /* rc_control_port: VAR_CONTROL_PORT STRING_ARG */
+#line 3116 "util/configparser.y"
{
OUTYY(("P(control_port:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0)
@@ -6995,79 +6375,79 @@ yyreduce:
else cfg_parser->cfg->control_port = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 6999 "util/configparser.c"
+#line 6379 "util/configparser.c"
break;
- case 569:
-#line 3079 "util/configparser.y"
+ case 575: /* rc_control_interface: VAR_CONTROL_INTERFACE STRING_ARG */
+#line 3125 "util/configparser.y"
{
OUTYY(("P(control_interface:%s)\n", (yyvsp[0].str)));
if(!cfg_strlist_append(&cfg_parser->cfg->control_ifs, (yyvsp[0].str)))
yyerror("out of memory");
}
-#line 7009 "util/configparser.c"
+#line 6389 "util/configparser.c"
break;
- case 570:
-#line 3086 "util/configparser.y"
+ case 576: /* rc_control_use_cert: VAR_CONTROL_USE_CERT STRING_ARG */
+#line 3132 "util/configparser.y"
{
OUTYY(("P(control_use_cert:%s)\n", (yyvsp[0].str)));
cfg_parser->cfg->control_use_cert = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 7019 "util/configparser.c"
+#line 6399 "util/configparser.c"
break;
- case 571:
-#line 3093 "util/configparser.y"
+ case 577: /* rc_server_key_file: VAR_SERVER_KEY_FILE STRING_ARG */
+#line 3139 "util/configparser.y"
{
OUTYY(("P(rc_server_key_file:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->server_key_file);
cfg_parser->cfg->server_key_file = (yyvsp[0].str);
}
-#line 7029 "util/configparser.c"
+#line 6409 "util/configparser.c"
break;
- case 572:
-#line 3100 "util/configparser.y"
+ case 578: /* rc_server_cert_file: VAR_SERVER_CERT_FILE STRING_ARG */
+#line 3146 "util/configparser.y"
{
OUTYY(("P(rc_server_cert_file:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->server_cert_file);
cfg_parser->cfg->server_cert_file = (yyvsp[0].str);
}
-#line 7039 "util/configparser.c"
+#line 6419 "util/configparser.c"
break;
- case 573:
-#line 3107 "util/configparser.y"
+ case 579: /* rc_control_key_file: VAR_CONTROL_KEY_FILE STRING_ARG */
+#line 3153 "util/configparser.y"
{
OUTYY(("P(rc_control_key_file:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->control_key_file);
cfg_parser->cfg->control_key_file = (yyvsp[0].str);
}
-#line 7049 "util/configparser.c"
+#line 6429 "util/configparser.c"
break;
- case 574:
-#line 3114 "util/configparser.y"
+ case 580: /* rc_control_cert_file: VAR_CONTROL_CERT_FILE STRING_ARG */
+#line 3160 "util/configparser.y"
{
OUTYY(("P(rc_control_cert_file:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->control_cert_file);
cfg_parser->cfg->control_cert_file = (yyvsp[0].str);
}
-#line 7059 "util/configparser.c"
+#line 6439 "util/configparser.c"
break;
- case 575:
-#line 3121 "util/configparser.y"
+ case 581: /* dtstart: VAR_DNSTAP */
+#line 3167 "util/configparser.y"
{
OUTYY(("\nP(dnstap:)\n"));
}
-#line 7067 "util/configparser.c"
+#line 6447 "util/configparser.c"
break;
- case 597:
-#line 3141 "util/configparser.y"
+ case 603: /* dt_dnstap_enable: VAR_DNSTAP_ENABLE STRING_ARG */
+#line 3187 "util/configparser.y"
{
OUTYY(("P(dt_dnstap_enable:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -7075,11 +6455,11 @@ yyreduce:
else cfg_parser->cfg->dnstap = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 7079 "util/configparser.c"
+#line 6459 "util/configparser.c"
break;
- case 598:
-#line 3150 "util/configparser.y"
+ case 604: /* dt_dnstap_bidirectional: VAR_DNSTAP_BIDIRECTIONAL STRING_ARG */
+#line 3196 "util/configparser.y"
{
OUTYY(("P(dt_dnstap_bidirectional:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -7088,31 +6468,31 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 7092 "util/configparser.c"
+#line 6472 "util/configparser.c"
break;
- case 599:
-#line 3160 "util/configparser.y"
+ case 605: /* dt_dnstap_socket_path: VAR_DNSTAP_SOCKET_PATH STRING_ARG */
+#line 3206 "util/configparser.y"
{
OUTYY(("P(dt_dnstap_socket_path:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->dnstap_socket_path);
cfg_parser->cfg->dnstap_socket_path = (yyvsp[0].str);
}
-#line 7102 "util/configparser.c"
+#line 6482 "util/configparser.c"
break;
- case 600:
-#line 3167 "util/configparser.y"
+ case 606: /* dt_dnstap_ip: VAR_DNSTAP_IP STRING_ARG */
+#line 3213 "util/configparser.y"
{
OUTYY(("P(dt_dnstap_ip:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->dnstap_ip);
cfg_parser->cfg->dnstap_ip = (yyvsp[0].str);
}
-#line 7112 "util/configparser.c"
+#line 6492 "util/configparser.c"
break;
- case 601:
-#line 3174 "util/configparser.y"
+ case 607: /* dt_dnstap_tls: VAR_DNSTAP_TLS STRING_ARG */
+#line 3220 "util/configparser.y"
{
OUTYY(("P(dt_dnstap_tls:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -7120,51 +6500,51 @@ yyreduce:
else cfg_parser->cfg->dnstap_tls = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 7124 "util/configparser.c"
+#line 6504 "util/configparser.c"
break;
- case 602:
-#line 3183 "util/configparser.y"
+ case 608: /* dt_dnstap_tls_server_name: VAR_DNSTAP_TLS_SERVER_NAME STRING_ARG */
+#line 3229 "util/configparser.y"
{
OUTYY(("P(dt_dnstap_tls_server_name:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->dnstap_tls_server_name);
cfg_parser->cfg->dnstap_tls_server_name = (yyvsp[0].str);
}
-#line 7134 "util/configparser.c"
+#line 6514 "util/configparser.c"
break;
- case 603:
-#line 3190 "util/configparser.y"
+ case 609: /* dt_dnstap_tls_cert_bundle: VAR_DNSTAP_TLS_CERT_BUNDLE STRING_ARG */
+#line 3236 "util/configparser.y"
{
OUTYY(("P(dt_dnstap_tls_cert_bundle:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->dnstap_tls_cert_bundle);
cfg_parser->cfg->dnstap_tls_cert_bundle = (yyvsp[0].str);
}
-#line 7144 "util/configparser.c"
+#line 6524 "util/configparser.c"
break;
- case 604:
-#line 3197 "util/configparser.y"
+ case 610: /* dt_dnstap_tls_client_key_file: VAR_DNSTAP_TLS_CLIENT_KEY_FILE STRING_ARG */
+#line 3243 "util/configparser.y"
{
OUTYY(("P(dt_dnstap_tls_client_key_file:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->dnstap_tls_client_key_file);
cfg_parser->cfg->dnstap_tls_client_key_file = (yyvsp[0].str);
}
-#line 7154 "util/configparser.c"
+#line 6534 "util/configparser.c"
break;
- case 605:
-#line 3204 "util/configparser.y"
+ case 611: /* dt_dnstap_tls_client_cert_file: VAR_DNSTAP_TLS_CLIENT_CERT_FILE STRING_ARG */
+#line 3250 "util/configparser.y"
{
OUTYY(("P(dt_dnstap_tls_client_cert_file:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->dnstap_tls_client_cert_file);
cfg_parser->cfg->dnstap_tls_client_cert_file = (yyvsp[0].str);
}
-#line 7164 "util/configparser.c"
+#line 6544 "util/configparser.c"
break;
- case 606:
-#line 3211 "util/configparser.y"
+ case 612: /* dt_dnstap_send_identity: VAR_DNSTAP_SEND_IDENTITY STRING_ARG */
+#line 3257 "util/configparser.y"
{
OUTYY(("P(dt_dnstap_send_identity:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -7172,11 +6552,11 @@ yyreduce:
else cfg_parser->cfg->dnstap_send_identity = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 7176 "util/configparser.c"
+#line 6556 "util/configparser.c"
break;
- case 607:
-#line 3220 "util/configparser.y"
+ case 613: /* dt_dnstap_send_version: VAR_DNSTAP_SEND_VERSION STRING_ARG */
+#line 3266 "util/configparser.y"
{
OUTYY(("P(dt_dnstap_send_version:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -7184,31 +6564,31 @@ yyreduce:
else cfg_parser->cfg->dnstap_send_version = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 7188 "util/configparser.c"
+#line 6568 "util/configparser.c"
break;
- case 608:
-#line 3229 "util/configparser.y"
+ case 614: /* dt_dnstap_identity: VAR_DNSTAP_IDENTITY STRING_ARG */
+#line 3275 "util/configparser.y"
{
OUTYY(("P(dt_dnstap_identity:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->dnstap_identity);
cfg_parser->cfg->dnstap_identity = (yyvsp[0].str);
}
-#line 7198 "util/configparser.c"
+#line 6578 "util/configparser.c"
break;
- case 609:
-#line 3236 "util/configparser.y"
+ case 615: /* dt_dnstap_version: VAR_DNSTAP_VERSION STRING_ARG */
+#line 3282 "util/configparser.y"
{
OUTYY(("P(dt_dnstap_version:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->dnstap_version);
cfg_parser->cfg->dnstap_version = (yyvsp[0].str);
}
-#line 7208 "util/configparser.c"
+#line 6588 "util/configparser.c"
break;
- case 610:
-#line 3243 "util/configparser.y"
+ case 616: /* dt_dnstap_log_resolver_query_messages: VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES STRING_ARG */
+#line 3289 "util/configparser.y"
{
OUTYY(("P(dt_dnstap_log_resolver_query_messages:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -7217,11 +6597,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 7221 "util/configparser.c"
+#line 6601 "util/configparser.c"
break;
- case 611:
-#line 3253 "util/configparser.y"
+ case 617: /* dt_dnstap_log_resolver_response_messages: VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES STRING_ARG */
+#line 3299 "util/configparser.y"
{
OUTYY(("P(dt_dnstap_log_resolver_response_messages:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -7230,11 +6610,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 7234 "util/configparser.c"
+#line 6614 "util/configparser.c"
break;
- case 612:
-#line 3263 "util/configparser.y"
+ case 618: /* dt_dnstap_log_client_query_messages: VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES STRING_ARG */
+#line 3309 "util/configparser.y"
{
OUTYY(("P(dt_dnstap_log_client_query_messages:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -7243,11 +6623,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 7247 "util/configparser.c"
+#line 6627 "util/configparser.c"
break;
- case 613:
-#line 3273 "util/configparser.y"
+ case 619: /* dt_dnstap_log_client_response_messages: VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES STRING_ARG */
+#line 3319 "util/configparser.y"
{
OUTYY(("P(dt_dnstap_log_client_response_messages:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -7256,11 +6636,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 7260 "util/configparser.c"
+#line 6640 "util/configparser.c"
break;
- case 614:
-#line 3283 "util/configparser.y"
+ case 620: /* dt_dnstap_log_forwarder_query_messages: VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES STRING_ARG */
+#line 3329 "util/configparser.y"
{
OUTYY(("P(dt_dnstap_log_forwarder_query_messages:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -7269,11 +6649,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 7273 "util/configparser.c"
+#line 6653 "util/configparser.c"
break;
- case 615:
-#line 3293 "util/configparser.y"
+ case 621: /* dt_dnstap_log_forwarder_response_messages: VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES STRING_ARG */
+#line 3339 "util/configparser.y"
{
OUTYY(("P(dt_dnstap_log_forwarder_response_messages:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -7282,47 +6662,47 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 7286 "util/configparser.c"
+#line 6666 "util/configparser.c"
break;
- case 616:
-#line 3303 "util/configparser.y"
+ case 622: /* pythonstart: VAR_PYTHON */
+#line 3349 "util/configparser.y"
{
OUTYY(("\nP(python:)\n"));
}
-#line 7294 "util/configparser.c"
+#line 6674 "util/configparser.c"
break;
- case 620:
-#line 3312 "util/configparser.y"
+ case 626: /* py_script: VAR_PYTHON_SCRIPT STRING_ARG */
+#line 3358 "util/configparser.y"
{
OUTYY(("P(python-script:%s)\n", (yyvsp[0].str)));
if(!cfg_strlist_append_ex(&cfg_parser->cfg->python_script, (yyvsp[0].str)))
yyerror("out of memory");
}
-#line 7304 "util/configparser.c"
+#line 6684 "util/configparser.c"
break;
- case 621:
-#line 3318 "util/configparser.y"
+ case 627: /* dynlibstart: VAR_DYNLIB */
+#line 3364 "util/configparser.y"
{
OUTYY(("\nP(dynlib:)\n"));
}
-#line 7312 "util/configparser.c"
+#line 6692 "util/configparser.c"
break;
- case 625:
-#line 3327 "util/configparser.y"
+ case 631: /* dl_file: VAR_DYNLIB_FILE STRING_ARG */
+#line 3373 "util/configparser.y"
{
OUTYY(("P(dynlib-file:%s)\n", (yyvsp[0].str)));
if(!cfg_strlist_append_ex(&cfg_parser->cfg->dynlib_file, (yyvsp[0].str)))
yyerror("out of memory");
}
-#line 7322 "util/configparser.c"
+#line 6702 "util/configparser.c"
break;
- case 626:
-#line 3333 "util/configparser.y"
+ case 632: /* server_disable_dnssec_lame_check: VAR_DISABLE_DNSSEC_LAME_CHECK STRING_ARG */
+#line 3379 "util/configparser.y"
{
OUTYY(("P(disable_dnssec_lame_check:%s)\n", (yyvsp[0].str)));
if (strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -7331,21 +6711,21 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 7335 "util/configparser.c"
+#line 6715 "util/configparser.c"
break;
- case 627:
-#line 3343 "util/configparser.y"
+ case 633: /* server_log_identity: VAR_LOG_IDENTITY STRING_ARG */
+#line 3389 "util/configparser.y"
{
OUTYY(("P(server_log_identity:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->log_identity);
cfg_parser->cfg->log_identity = (yyvsp[0].str);
}
-#line 7345 "util/configparser.c"
+#line 6725 "util/configparser.c"
break;
- case 628:
-#line 3350 "util/configparser.y"
+ case 634: /* server_response_ip: VAR_RESPONSE_IP STRING_ARG STRING_ARG */
+#line 3396 "util/configparser.y"
{
OUTYY(("P(server_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
validate_respip_action((yyvsp[0].str));
@@ -7353,30 +6733,30 @@ yyreduce:
(yyvsp[-1].str), (yyvsp[0].str)))
fatal_exit("out of memory adding response-ip");
}
-#line 7357 "util/configparser.c"
+#line 6737 "util/configparser.c"
break;
- case 629:
-#line 3359 "util/configparser.y"
+ case 635: /* server_response_ip_data: VAR_RESPONSE_IP_DATA STRING_ARG STRING_ARG */
+#line 3405 "util/configparser.y"
{
OUTYY(("P(server_response_ip_data:%s)\n", (yyvsp[-1].str)));
if(!cfg_str2list_insert(&cfg_parser->cfg->respip_data,
(yyvsp[-1].str), (yyvsp[0].str)))
fatal_exit("out of memory adding response-ip-data");
}
-#line 7368 "util/configparser.c"
+#line 6748 "util/configparser.c"
break;
- case 630:
-#line 3367 "util/configparser.y"
+ case 636: /* dnscstart: VAR_DNSCRYPT */
+#line 3413 "util/configparser.y"
{
OUTYY(("\nP(dnscrypt:)\n"));
}
-#line 7376 "util/configparser.c"
+#line 6756 "util/configparser.c"
break;
- case 643:
-#line 3383 "util/configparser.y"
+ case 649: /* dnsc_dnscrypt_enable: VAR_DNSCRYPT_ENABLE STRING_ARG */
+#line 3429 "util/configparser.y"
{
OUTYY(("P(dnsc_dnscrypt_enable:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -7384,11 +6764,11 @@ yyreduce:
else cfg_parser->cfg->dnscrypt = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 7388 "util/configparser.c"
+#line 6768 "util/configparser.c"
break;
- case 644:
-#line 3393 "util/configparser.y"
+ case 650: /* dnsc_dnscrypt_port: VAR_DNSCRYPT_PORT STRING_ARG */
+#line 3439 "util/configparser.y"
{
OUTYY(("P(dnsc_dnscrypt_port:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0)
@@ -7396,21 +6776,21 @@ yyreduce:
else cfg_parser->cfg->dnscrypt_port = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 7400 "util/configparser.c"
+#line 6780 "util/configparser.c"
break;
- case 645:
-#line 3402 "util/configparser.y"
+ case 651: /* dnsc_dnscrypt_provider: VAR_DNSCRYPT_PROVIDER STRING_ARG */
+#line 3448 "util/configparser.y"
{
OUTYY(("P(dnsc_dnscrypt_provider:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->dnscrypt_provider);
cfg_parser->cfg->dnscrypt_provider = (yyvsp[0].str);
}
-#line 7410 "util/configparser.c"
+#line 6790 "util/configparser.c"
break;
- case 646:
-#line 3409 "util/configparser.y"
+ case 652: /* dnsc_dnscrypt_provider_cert: VAR_DNSCRYPT_PROVIDER_CERT STRING_ARG */
+#line 3455 "util/configparser.y"
{
OUTYY(("P(dnsc_dnscrypt_provider_cert:%s)\n", (yyvsp[0].str)));
if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str)))
@@ -7418,21 +6798,21 @@ yyreduce:
if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str)))
fatal_exit("out of memory adding dnscrypt-provider-cert");
}
-#line 7422 "util/configparser.c"
+#line 6802 "util/configparser.c"
break;
- case 647:
-#line 3418 "util/configparser.y"
+ case 653: /* dnsc_dnscrypt_provider_cert_rotated: VAR_DNSCRYPT_PROVIDER_CERT_ROTATED STRING_ARG */
+#line 3464 "util/configparser.y"
{
OUTYY(("P(dnsc_dnscrypt_provider_cert_rotated:%s)\n", (yyvsp[0].str)));
if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert_rotated, (yyvsp[0].str)))
fatal_exit("out of memory adding dnscrypt-provider-cert-rotated");
}
-#line 7432 "util/configparser.c"
+#line 6812 "util/configparser.c"
break;
- case 648:
-#line 3425 "util/configparser.y"
+ case 654: /* dnsc_dnscrypt_secret_key: VAR_DNSCRYPT_SECRET_KEY STRING_ARG */
+#line 3471 "util/configparser.y"
{
OUTYY(("P(dnsc_dnscrypt_secret_key:%s)\n", (yyvsp[0].str)));
if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str)))
@@ -7440,22 +6820,22 @@ yyreduce:
if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str)))
fatal_exit("out of memory adding dnscrypt-secret-key");
}
-#line 7444 "util/configparser.c"
+#line 6824 "util/configparser.c"
break;
- case 649:
-#line 3434 "util/configparser.y"
+ case 655: /* dnsc_dnscrypt_shared_secret_cache_size: VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE STRING_ARG */
+#line 3480 "util/configparser.y"
{
OUTYY(("P(dnscrypt_shared_secret_cache_size:%s)\n", (yyvsp[0].str)));
if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->dnscrypt_shared_secret_cache_size))
yyerror("memory size expected");
free((yyvsp[0].str));
}
-#line 7455 "util/configparser.c"
+#line 6835 "util/configparser.c"
break;
- case 650:
-#line 3442 "util/configparser.y"
+ case 656: /* dnsc_dnscrypt_shared_secret_cache_slabs: VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS STRING_ARG */
+#line 3488 "util/configparser.y"
{
OUTYY(("P(dnscrypt_shared_secret_cache_slabs:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0) {
@@ -7467,22 +6847,22 @@ yyreduce:
}
free((yyvsp[0].str));
}
-#line 7471 "util/configparser.c"
+#line 6851 "util/configparser.c"
break;
- case 651:
-#line 3455 "util/configparser.y"
+ case 657: /* dnsc_dnscrypt_nonce_cache_size: VAR_DNSCRYPT_NONCE_CACHE_SIZE STRING_ARG */
+#line 3501 "util/configparser.y"
{
OUTYY(("P(dnscrypt_nonce_cache_size:%s)\n", (yyvsp[0].str)));
if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->dnscrypt_nonce_cache_size))
yyerror("memory size expected");
free((yyvsp[0].str));
}
-#line 7482 "util/configparser.c"
+#line 6862 "util/configparser.c"
break;
- case 652:
-#line 3463 "util/configparser.y"
+ case 658: /* dnsc_dnscrypt_nonce_cache_slabs: VAR_DNSCRYPT_NONCE_CACHE_SLABS STRING_ARG */
+#line 3509 "util/configparser.y"
{
OUTYY(("P(dnscrypt_nonce_cache_slabs:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0) {
@@ -7494,19 +6874,19 @@ yyreduce:
}
free((yyvsp[0].str));
}
-#line 7498 "util/configparser.c"
+#line 6878 "util/configparser.c"
break;
- case 653:
-#line 3476 "util/configparser.y"
+ case 659: /* cachedbstart: VAR_CACHEDB */
+#line 3522 "util/configparser.y"
{
OUTYY(("\nP(cachedb:)\n"));
}
-#line 7506 "util/configparser.c"
+#line 6886 "util/configparser.c"
break;
- case 662:
-#line 3487 "util/configparser.y"
+ case 668: /* cachedb_backend_name: VAR_CACHEDB_BACKEND STRING_ARG */
+#line 3533 "util/configparser.y"
{
#ifdef USE_CACHEDB
OUTYY(("P(backend:%s)\n", (yyvsp[0].str)));
@@ -7517,11 +6897,11 @@ yyreduce:
free((yyvsp[0].str));
#endif
}
-#line 7521 "util/configparser.c"
+#line 6901 "util/configparser.c"
break;
- case 663:
-#line 3499 "util/configparser.y"
+ case 669: /* cachedb_secret_seed: VAR_CACHEDB_SECRETSEED STRING_ARG */
+#line 3545 "util/configparser.y"
{
#ifdef USE_CACHEDB
OUTYY(("P(secret-seed:%s)\n", (yyvsp[0].str)));
@@ -7532,11 +6912,11 @@ yyreduce:
free((yyvsp[0].str));
#endif
}
-#line 7536 "util/configparser.c"
+#line 6916 "util/configparser.c"
break;
- case 664:
-#line 3511 "util/configparser.y"
+ case 670: /* redis_server_host: VAR_CACHEDB_REDISHOST STRING_ARG */
+#line 3557 "util/configparser.y"
{
#if defined(USE_CACHEDB) && defined(USE_REDIS)
OUTYY(("P(redis_server_host:%s)\n", (yyvsp[0].str)));
@@ -7547,11 +6927,11 @@ yyreduce:
free((yyvsp[0].str));
#endif
}
-#line 7551 "util/configparser.c"
+#line 6931 "util/configparser.c"
break;
- case 665:
-#line 3523 "util/configparser.y"
+ case 671: /* redis_server_port: VAR_CACHEDB_REDISPORT STRING_ARG */
+#line 3569 "util/configparser.y"
{
#if defined(USE_CACHEDB) && defined(USE_REDIS)
int port;
@@ -7565,11 +6945,11 @@ yyreduce:
#endif
free((yyvsp[0].str));
}
-#line 7569 "util/configparser.c"
+#line 6949 "util/configparser.c"
break;
- case 666:
-#line 3538 "util/configparser.y"
+ case 672: /* redis_timeout: VAR_CACHEDB_REDISTIMEOUT STRING_ARG */
+#line 3584 "util/configparser.y"
{
#if defined(USE_CACHEDB) && defined(USE_REDIS)
OUTYY(("P(redis_timeout:%s)\n", (yyvsp[0].str)));
@@ -7581,11 +6961,11 @@ yyreduce:
#endif
free((yyvsp[0].str));
}
-#line 7585 "util/configparser.c"
+#line 6965 "util/configparser.c"
break;
- case 667:
-#line 3551 "util/configparser.y"
+ case 673: /* redis_expire_records: VAR_CACHEDB_REDISEXPIRERECORDS STRING_ARG */
+#line 3597 "util/configparser.y"
{
#if defined(USE_CACHEDB) && defined(USE_REDIS)
OUTYY(("P(redis_expire_records:%s)\n", (yyvsp[0].str)));
@@ -7597,11 +6977,11 @@ yyreduce:
#endif
free((yyvsp[0].str));
}
-#line 7601 "util/configparser.c"
+#line 6981 "util/configparser.c"
break;
- case 668:
-#line 3564 "util/configparser.y"
+ case 674: /* server_tcp_connection_limit: VAR_TCP_CONNECTION_LIMIT STRING_ARG STRING_ARG */
+#line 3610 "util/configparser.y"
{
OUTYY(("P(server_tcp_connection_limit:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
if (atoi((yyvsp[0].str)) < 0)
@@ -7611,19 +6991,19 @@ yyreduce:
fatal_exit("out of memory adding tcp connection limit");
}
}
-#line 7615 "util/configparser.c"
+#line 6995 "util/configparser.c"
break;
- case 669:
-#line 3575 "util/configparser.y"
+ case 675: /* ipsetstart: VAR_IPSET */
+#line 3621 "util/configparser.y"
{
OUTYY(("\nP(ipset:)\n"));
}
-#line 7623 "util/configparser.c"
+#line 7003 "util/configparser.c"
break;
- case 674:
-#line 3584 "util/configparser.y"
+ case 680: /* ipset_name_v4: VAR_IPSET_NAME_V4 STRING_ARG */
+#line 3630 "util/configparser.y"
{
#ifdef USE_IPSET
OUTYY(("P(name-v4:%s)\n", (yyvsp[0].str)));
@@ -7637,11 +7017,11 @@ yyreduce:
free((yyvsp[0].str));
#endif
}
-#line 7641 "util/configparser.c"
+#line 7021 "util/configparser.c"
break;
- case 675:
-#line 3599 "util/configparser.y"
+ case 681: /* ipset_name_v6: VAR_IPSET_NAME_V6 STRING_ARG */
+#line 3645 "util/configparser.y"
{
#ifdef USE_IPSET
OUTYY(("P(name-v6:%s)\n", (yyvsp[0].str)));
@@ -7655,11 +7035,11 @@ yyreduce:
free((yyvsp[0].str));
#endif
}
-#line 7659 "util/configparser.c"
+#line 7039 "util/configparser.c"
break;
-#line 7663 "util/configparser.c"
+#line 7043 "util/configparser.c"
default: break;
}
@@ -7819,13 +7199,13 @@ yyabortlab:
yyexhaustedlab:
yyerror (YY_("memory exhausted"));
yyresult = 2;
- /* Fall through. */
+ goto yyreturn;
#endif
-/*-----------------------------------------------------.
-| yyreturn -- parsing is finished, return the result. |
-`-----------------------------------------------------*/
+/*-------------------------------------------------------.
+| yyreturn -- parsing is finished, clean up and return. |
+`-------------------------------------------------------*/
yyreturn:
if (yychar != YYEMPTY)
{
@@ -7853,7 +7233,7 @@ yyreturn:
return yyresult;
}
-#line 3613 "util/configparser.y"
+#line 3659 "util/configparser.y"
/* parse helper routines could be here */
diff --git a/util/configparser.h b/util/configparser.h
index 7601ce40ba1d..bc8baa744dc4 100644
--- a/util/configparser.h
+++ b/util/configparser.h
@@ -1,8 +1,8 @@
-/* A Bison parser, made by GNU Bison 3.6.4. */
+/* A Bison parser, made by GNU Bison 3.7.6. */
/* Bison interface for Yacc-like parsers in C
- Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2020 Free Software Foundation,
+ Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2021 Free Software Foundation,
Inc.
This program is free software: you can redistribute it and/or modify
@@ -16,7 +16,7 @@
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
- along with this program. If not, see <http://www.gnu.org/licenses/>. */
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* As a special exception, you may create a larger work that contains
part or all of the Bison parser skeleton and distribute that work
@@ -289,96 +289,100 @@ extern int yydebug;
VAR_SERVE_EXPIRED_TTL_RESET = 490, /* VAR_SERVE_EXPIRED_TTL_RESET */
VAR_SERVE_EXPIRED_REPLY_TTL = 491, /* VAR_SERVE_EXPIRED_REPLY_TTL */
VAR_SERVE_EXPIRED_CLIENT_TIMEOUT = 492, /* VAR_SERVE_EXPIRED_CLIENT_TIMEOUT */
- VAR_SERVE_ORIGINAL_TTL = 493, /* VAR_SERVE_ORIGINAL_TTL */
- VAR_FAKE_DSA = 494, /* VAR_FAKE_DSA */
- VAR_FAKE_SHA1 = 495, /* VAR_FAKE_SHA1 */
- VAR_LOG_IDENTITY = 496, /* VAR_LOG_IDENTITY */
- VAR_HIDE_TRUSTANCHOR = 497, /* VAR_HIDE_TRUSTANCHOR */
- VAR_HIDE_HTTP_USER_AGENT = 498, /* VAR_HIDE_HTTP_USER_AGENT */
- VAR_HTTP_USER_AGENT = 499, /* VAR_HTTP_USER_AGENT */
- VAR_TRUST_ANCHOR_SIGNALING = 500, /* VAR_TRUST_ANCHOR_SIGNALING */
- VAR_AGGRESSIVE_NSEC = 501, /* VAR_AGGRESSIVE_NSEC */
- VAR_USE_SYSTEMD = 502, /* VAR_USE_SYSTEMD */
- VAR_SHM_ENABLE = 503, /* VAR_SHM_ENABLE */
- VAR_SHM_KEY = 504, /* VAR_SHM_KEY */
- VAR_ROOT_KEY_SENTINEL = 505, /* VAR_ROOT_KEY_SENTINEL */
- VAR_DNSCRYPT = 506, /* VAR_DNSCRYPT */
- VAR_DNSCRYPT_ENABLE = 507, /* VAR_DNSCRYPT_ENABLE */
- VAR_DNSCRYPT_PORT = 508, /* VAR_DNSCRYPT_PORT */
- VAR_DNSCRYPT_PROVIDER = 509, /* VAR_DNSCRYPT_PROVIDER */
- VAR_DNSCRYPT_SECRET_KEY = 510, /* VAR_DNSCRYPT_SECRET_KEY */
- VAR_DNSCRYPT_PROVIDER_CERT = 511, /* VAR_DNSCRYPT_PROVIDER_CERT */
- VAR_DNSCRYPT_PROVIDER_CERT_ROTATED = 512, /* VAR_DNSCRYPT_PROVIDER_CERT_ROTATED */
- VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 513, /* VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE */
- VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 514, /* VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS */
- VAR_DNSCRYPT_NONCE_CACHE_SIZE = 515, /* VAR_DNSCRYPT_NONCE_CACHE_SIZE */
- VAR_DNSCRYPT_NONCE_CACHE_SLABS = 516, /* VAR_DNSCRYPT_NONCE_CACHE_SLABS */
- VAR_PAD_RESPONSES = 517, /* VAR_PAD_RESPONSES */
- VAR_PAD_RESPONSES_BLOCK_SIZE = 518, /* VAR_PAD_RESPONSES_BLOCK_SIZE */
- VAR_PAD_QUERIES = 519, /* VAR_PAD_QUERIES */
- VAR_PAD_QUERIES_BLOCK_SIZE = 520, /* VAR_PAD_QUERIES_BLOCK_SIZE */
- VAR_IPSECMOD_ENABLED = 521, /* VAR_IPSECMOD_ENABLED */
- VAR_IPSECMOD_HOOK = 522, /* VAR_IPSECMOD_HOOK */
- VAR_IPSECMOD_IGNORE_BOGUS = 523, /* VAR_IPSECMOD_IGNORE_BOGUS */
- VAR_IPSECMOD_MAX_TTL = 524, /* VAR_IPSECMOD_MAX_TTL */
- VAR_IPSECMOD_WHITELIST = 525, /* VAR_IPSECMOD_WHITELIST */
- VAR_IPSECMOD_STRICT = 526, /* VAR_IPSECMOD_STRICT */
- VAR_CACHEDB = 527, /* VAR_CACHEDB */
- VAR_CACHEDB_BACKEND = 528, /* VAR_CACHEDB_BACKEND */
- VAR_CACHEDB_SECRETSEED = 529, /* VAR_CACHEDB_SECRETSEED */
- VAR_CACHEDB_REDISHOST = 530, /* VAR_CACHEDB_REDISHOST */
- VAR_CACHEDB_REDISPORT = 531, /* VAR_CACHEDB_REDISPORT */
- VAR_CACHEDB_REDISTIMEOUT = 532, /* VAR_CACHEDB_REDISTIMEOUT */
- VAR_CACHEDB_REDISEXPIRERECORDS = 533, /* VAR_CACHEDB_REDISEXPIRERECORDS */
- VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 534, /* VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM */
- VAR_FOR_UPSTREAM = 535, /* VAR_FOR_UPSTREAM */
- VAR_AUTH_ZONE = 536, /* VAR_AUTH_ZONE */
- VAR_ZONEFILE = 537, /* VAR_ZONEFILE */
- VAR_MASTER = 538, /* VAR_MASTER */
- VAR_URL = 539, /* VAR_URL */
- VAR_FOR_DOWNSTREAM = 540, /* VAR_FOR_DOWNSTREAM */
- VAR_FALLBACK_ENABLED = 541, /* VAR_FALLBACK_ENABLED */
- VAR_TLS_ADDITIONAL_PORT = 542, /* VAR_TLS_ADDITIONAL_PORT */
- VAR_LOW_RTT = 543, /* VAR_LOW_RTT */
- VAR_LOW_RTT_PERMIL = 544, /* VAR_LOW_RTT_PERMIL */
- VAR_FAST_SERVER_PERMIL = 545, /* VAR_FAST_SERVER_PERMIL */
- VAR_FAST_SERVER_NUM = 546, /* VAR_FAST_SERVER_NUM */
- VAR_ALLOW_NOTIFY = 547, /* VAR_ALLOW_NOTIFY */
- VAR_TLS_WIN_CERT = 548, /* VAR_TLS_WIN_CERT */
- VAR_TCP_CONNECTION_LIMIT = 549, /* VAR_TCP_CONNECTION_LIMIT */
- VAR_FORWARD_NO_CACHE = 550, /* VAR_FORWARD_NO_CACHE */
- VAR_STUB_NO_CACHE = 551, /* VAR_STUB_NO_CACHE */
- VAR_LOG_SERVFAIL = 552, /* VAR_LOG_SERVFAIL */
- VAR_DENY_ANY = 553, /* VAR_DENY_ANY */
- VAR_UNKNOWN_SERVER_TIME_LIMIT = 554, /* VAR_UNKNOWN_SERVER_TIME_LIMIT */
- VAR_LOG_TAG_QUERYREPLY = 555, /* VAR_LOG_TAG_QUERYREPLY */
- VAR_STREAM_WAIT_SIZE = 556, /* VAR_STREAM_WAIT_SIZE */
- VAR_TLS_CIPHERS = 557, /* VAR_TLS_CIPHERS */
- VAR_TLS_CIPHERSUITES = 558, /* VAR_TLS_CIPHERSUITES */
- VAR_TLS_USE_SNI = 559, /* VAR_TLS_USE_SNI */
- VAR_IPSET = 560, /* VAR_IPSET */
- VAR_IPSET_NAME_V4 = 561, /* VAR_IPSET_NAME_V4 */
- VAR_IPSET_NAME_V6 = 562, /* VAR_IPSET_NAME_V6 */
- VAR_TLS_SESSION_TICKET_KEYS = 563, /* VAR_TLS_SESSION_TICKET_KEYS */
- VAR_RPZ = 564, /* VAR_RPZ */
- VAR_TAGS = 565, /* VAR_TAGS */
- VAR_RPZ_ACTION_OVERRIDE = 566, /* VAR_RPZ_ACTION_OVERRIDE */
- VAR_RPZ_CNAME_OVERRIDE = 567, /* VAR_RPZ_CNAME_OVERRIDE */
- VAR_RPZ_LOG = 568, /* VAR_RPZ_LOG */
- VAR_RPZ_LOG_NAME = 569, /* VAR_RPZ_LOG_NAME */
- VAR_DYNLIB = 570, /* VAR_DYNLIB */
- VAR_DYNLIB_FILE = 571, /* VAR_DYNLIB_FILE */
- VAR_EDNS_CLIENT_STRING = 572, /* VAR_EDNS_CLIENT_STRING */
- VAR_EDNS_CLIENT_STRING_OPCODE = 573, /* VAR_EDNS_CLIENT_STRING_OPCODE */
- VAR_NSID = 574, /* VAR_NSID */
- VAR_ZONEMD_PERMISSIVE_MODE = 575, /* VAR_ZONEMD_PERMISSIVE_MODE */
- VAR_ZONEMD_CHECK = 576, /* VAR_ZONEMD_CHECK */
- VAR_ZONEMD_REJECT_ABSENCE = 577, /* VAR_ZONEMD_REJECT_ABSENCE */
- VAR_RPZ_SIGNAL_NXDOMAIN_RA = 578 /* VAR_RPZ_SIGNAL_NXDOMAIN_RA */
+ VAR_EDE_SERVE_EXPIRED = 493, /* VAR_EDE_SERVE_EXPIRED */
+ VAR_SERVE_ORIGINAL_TTL = 494, /* VAR_SERVE_ORIGINAL_TTL */
+ VAR_FAKE_DSA = 495, /* VAR_FAKE_DSA */
+ VAR_FAKE_SHA1 = 496, /* VAR_FAKE_SHA1 */
+ VAR_LOG_IDENTITY = 497, /* VAR_LOG_IDENTITY */
+ VAR_HIDE_TRUSTANCHOR = 498, /* VAR_HIDE_TRUSTANCHOR */
+ VAR_HIDE_HTTP_USER_AGENT = 499, /* VAR_HIDE_HTTP_USER_AGENT */
+ VAR_HTTP_USER_AGENT = 500, /* VAR_HTTP_USER_AGENT */
+ VAR_TRUST_ANCHOR_SIGNALING = 501, /* VAR_TRUST_ANCHOR_SIGNALING */
+ VAR_AGGRESSIVE_NSEC = 502, /* VAR_AGGRESSIVE_NSEC */
+ VAR_USE_SYSTEMD = 503, /* VAR_USE_SYSTEMD */
+ VAR_SHM_ENABLE = 504, /* VAR_SHM_ENABLE */
+ VAR_SHM_KEY = 505, /* VAR_SHM_KEY */
+ VAR_ROOT_KEY_SENTINEL = 506, /* VAR_ROOT_KEY_SENTINEL */
+ VAR_DNSCRYPT = 507, /* VAR_DNSCRYPT */
+ VAR_DNSCRYPT_ENABLE = 508, /* VAR_DNSCRYPT_ENABLE */
+ VAR_DNSCRYPT_PORT = 509, /* VAR_DNSCRYPT_PORT */
+ VAR_DNSCRYPT_PROVIDER = 510, /* VAR_DNSCRYPT_PROVIDER */
+ VAR_DNSCRYPT_SECRET_KEY = 511, /* VAR_DNSCRYPT_SECRET_KEY */
+ VAR_DNSCRYPT_PROVIDER_CERT = 512, /* VAR_DNSCRYPT_PROVIDER_CERT */
+ VAR_DNSCRYPT_PROVIDER_CERT_ROTATED = 513, /* VAR_DNSCRYPT_PROVIDER_CERT_ROTATED */
+ VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 514, /* VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE */
+ VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 515, /* VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS */
+ VAR_DNSCRYPT_NONCE_CACHE_SIZE = 516, /* VAR_DNSCRYPT_NONCE_CACHE_SIZE */
+ VAR_DNSCRYPT_NONCE_CACHE_SLABS = 517, /* VAR_DNSCRYPT_NONCE_CACHE_SLABS */
+ VAR_PAD_RESPONSES = 518, /* VAR_PAD_RESPONSES */
+ VAR_PAD_RESPONSES_BLOCK_SIZE = 519, /* VAR_PAD_RESPONSES_BLOCK_SIZE */
+ VAR_PAD_QUERIES = 520, /* VAR_PAD_QUERIES */
+ VAR_PAD_QUERIES_BLOCK_SIZE = 521, /* VAR_PAD_QUERIES_BLOCK_SIZE */
+ VAR_IPSECMOD_ENABLED = 522, /* VAR_IPSECMOD_ENABLED */
+ VAR_IPSECMOD_HOOK = 523, /* VAR_IPSECMOD_HOOK */
+ VAR_IPSECMOD_IGNORE_BOGUS = 524, /* VAR_IPSECMOD_IGNORE_BOGUS */
+ VAR_IPSECMOD_MAX_TTL = 525, /* VAR_IPSECMOD_MAX_TTL */
+ VAR_IPSECMOD_WHITELIST = 526, /* VAR_IPSECMOD_WHITELIST */
+ VAR_IPSECMOD_STRICT = 527, /* VAR_IPSECMOD_STRICT */
+ VAR_CACHEDB = 528, /* VAR_CACHEDB */
+ VAR_CACHEDB_BACKEND = 529, /* VAR_CACHEDB_BACKEND */
+ VAR_CACHEDB_SECRETSEED = 530, /* VAR_CACHEDB_SECRETSEED */
+ VAR_CACHEDB_REDISHOST = 531, /* VAR_CACHEDB_REDISHOST */
+ VAR_CACHEDB_REDISPORT = 532, /* VAR_CACHEDB_REDISPORT */
+ VAR_CACHEDB_REDISTIMEOUT = 533, /* VAR_CACHEDB_REDISTIMEOUT */
+ VAR_CACHEDB_REDISEXPIRERECORDS = 534, /* VAR_CACHEDB_REDISEXPIRERECORDS */
+ VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 535, /* VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM */
+ VAR_FOR_UPSTREAM = 536, /* VAR_FOR_UPSTREAM */
+ VAR_AUTH_ZONE = 537, /* VAR_AUTH_ZONE */
+ VAR_ZONEFILE = 538, /* VAR_ZONEFILE */
+ VAR_MASTER = 539, /* VAR_MASTER */
+ VAR_URL = 540, /* VAR_URL */
+ VAR_FOR_DOWNSTREAM = 541, /* VAR_FOR_DOWNSTREAM */
+ VAR_FALLBACK_ENABLED = 542, /* VAR_FALLBACK_ENABLED */
+ VAR_TLS_ADDITIONAL_PORT = 543, /* VAR_TLS_ADDITIONAL_PORT */
+ VAR_LOW_RTT = 544, /* VAR_LOW_RTT */
+ VAR_LOW_RTT_PERMIL = 545, /* VAR_LOW_RTT_PERMIL */
+ VAR_FAST_SERVER_PERMIL = 546, /* VAR_FAST_SERVER_PERMIL */
+ VAR_FAST_SERVER_NUM = 547, /* VAR_FAST_SERVER_NUM */
+ VAR_ALLOW_NOTIFY = 548, /* VAR_ALLOW_NOTIFY */
+ VAR_TLS_WIN_CERT = 549, /* VAR_TLS_WIN_CERT */
+ VAR_TCP_CONNECTION_LIMIT = 550, /* VAR_TCP_CONNECTION_LIMIT */
+ VAR_FORWARD_NO_CACHE = 551, /* VAR_FORWARD_NO_CACHE */
+ VAR_STUB_NO_CACHE = 552, /* VAR_STUB_NO_CACHE */
+ VAR_LOG_SERVFAIL = 553, /* VAR_LOG_SERVFAIL */
+ VAR_DENY_ANY = 554, /* VAR_DENY_ANY */
+ VAR_UNKNOWN_SERVER_TIME_LIMIT = 555, /* VAR_UNKNOWN_SERVER_TIME_LIMIT */
+ VAR_LOG_TAG_QUERYREPLY = 556, /* VAR_LOG_TAG_QUERYREPLY */
+ VAR_STREAM_WAIT_SIZE = 557, /* VAR_STREAM_WAIT_SIZE */
+ VAR_TLS_CIPHERS = 558, /* VAR_TLS_CIPHERS */
+ VAR_TLS_CIPHERSUITES = 559, /* VAR_TLS_CIPHERSUITES */
+ VAR_TLS_USE_SNI = 560, /* VAR_TLS_USE_SNI */
+ VAR_IPSET = 561, /* VAR_IPSET */
+ VAR_IPSET_NAME_V4 = 562, /* VAR_IPSET_NAME_V4 */
+ VAR_IPSET_NAME_V6 = 563, /* VAR_IPSET_NAME_V6 */
+ VAR_TLS_SESSION_TICKET_KEYS = 564, /* VAR_TLS_SESSION_TICKET_KEYS */
+ VAR_RPZ = 565, /* VAR_RPZ */
+ VAR_TAGS = 566, /* VAR_TAGS */
+ VAR_RPZ_ACTION_OVERRIDE = 567, /* VAR_RPZ_ACTION_OVERRIDE */
+ VAR_RPZ_CNAME_OVERRIDE = 568, /* VAR_RPZ_CNAME_OVERRIDE */
+ VAR_RPZ_LOG = 569, /* VAR_RPZ_LOG */
+ VAR_RPZ_LOG_NAME = 570, /* VAR_RPZ_LOG_NAME */
+ VAR_DYNLIB = 571, /* VAR_DYNLIB */
+ VAR_DYNLIB_FILE = 572, /* VAR_DYNLIB_FILE */
+ VAR_EDNS_CLIENT_STRING = 573, /* VAR_EDNS_CLIENT_STRING */
+ VAR_EDNS_CLIENT_STRING_OPCODE = 574, /* VAR_EDNS_CLIENT_STRING_OPCODE */
+ VAR_NSID = 575, /* VAR_NSID */
+ VAR_ZONEMD_PERMISSIVE_MODE = 576, /* VAR_ZONEMD_PERMISSIVE_MODE */
+ VAR_ZONEMD_CHECK = 577, /* VAR_ZONEMD_CHECK */
+ VAR_ZONEMD_REJECT_ABSENCE = 578, /* VAR_ZONEMD_REJECT_ABSENCE */
+ VAR_RPZ_SIGNAL_NXDOMAIN_RA = 579, /* VAR_RPZ_SIGNAL_NXDOMAIN_RA */
+ VAR_INTERFACE_AUTOMATIC_PORTS = 580, /* VAR_INTERFACE_AUTOMATIC_PORTS */
+ VAR_EDE = 581 /* VAR_EDE */
};
typedef enum yytokentype yytoken_kind_t;
#endif
/* Token kinds. */
+#define YYEMPTY -2
#define YYEOF 0
#define YYerror 256
#define YYUNDEF 257
@@ -617,92 +621,95 @@ extern int yydebug;
#define VAR_SERVE_EXPIRED_TTL_RESET 490
#define VAR_SERVE_EXPIRED_REPLY_TTL 491
#define VAR_SERVE_EXPIRED_CLIENT_TIMEOUT 492
-#define VAR_SERVE_ORIGINAL_TTL 493
-#define VAR_FAKE_DSA 494
-#define VAR_FAKE_SHA1 495
-#define VAR_LOG_IDENTITY 496
-#define VAR_HIDE_TRUSTANCHOR 497
-#define VAR_HIDE_HTTP_USER_AGENT 498
-#define VAR_HTTP_USER_AGENT 499
-#define VAR_TRUST_ANCHOR_SIGNALING 500
-#define VAR_AGGRESSIVE_NSEC 501
-#define VAR_USE_SYSTEMD 502
-#define VAR_SHM_ENABLE 503
-#define VAR_SHM_KEY 504
-#define VAR_ROOT_KEY_SENTINEL 505
-#define VAR_DNSCRYPT 506
-#define VAR_DNSCRYPT_ENABLE 507
-#define VAR_DNSCRYPT_PORT 508
-#define VAR_DNSCRYPT_PROVIDER 509
-#define VAR_DNSCRYPT_SECRET_KEY 510
-#define VAR_DNSCRYPT_PROVIDER_CERT 511
-#define VAR_DNSCRYPT_PROVIDER_CERT_ROTATED 512
-#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE 513
-#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS 514
-#define VAR_DNSCRYPT_NONCE_CACHE_SIZE 515
-#define VAR_DNSCRYPT_NONCE_CACHE_SLABS 516
-#define VAR_PAD_RESPONSES 517
-#define VAR_PAD_RESPONSES_BLOCK_SIZE 518
-#define VAR_PAD_QUERIES 519
-#define VAR_PAD_QUERIES_BLOCK_SIZE 520
-#define VAR_IPSECMOD_ENABLED 521
-#define VAR_IPSECMOD_HOOK 522
-#define VAR_IPSECMOD_IGNORE_BOGUS 523
-#define VAR_IPSECMOD_MAX_TTL 524
-#define VAR_IPSECMOD_WHITELIST 525
-#define VAR_IPSECMOD_STRICT 526
-#define VAR_CACHEDB 527
-#define VAR_CACHEDB_BACKEND 528
-#define VAR_CACHEDB_SECRETSEED 529
-#define VAR_CACHEDB_REDISHOST 530
-#define VAR_CACHEDB_REDISPORT 531
-#define VAR_CACHEDB_REDISTIMEOUT 532
-#define VAR_CACHEDB_REDISEXPIRERECORDS 533
-#define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 534
-#define VAR_FOR_UPSTREAM 535
-#define VAR_AUTH_ZONE 536
-#define VAR_ZONEFILE 537
-#define VAR_MASTER 538
-#define VAR_URL 539
-#define VAR_FOR_DOWNSTREAM 540
-#define VAR_FALLBACK_ENABLED 541
-#define VAR_TLS_ADDITIONAL_PORT 542
-#define VAR_LOW_RTT 543
-#define VAR_LOW_RTT_PERMIL 544
-#define VAR_FAST_SERVER_PERMIL 545
-#define VAR_FAST_SERVER_NUM 546
-#define VAR_ALLOW_NOTIFY 547
-#define VAR_TLS_WIN_CERT 548
-#define VAR_TCP_CONNECTION_LIMIT 549
-#define VAR_FORWARD_NO_CACHE 550
-#define VAR_STUB_NO_CACHE 551
-#define VAR_LOG_SERVFAIL 552
-#define VAR_DENY_ANY 553
-#define VAR_UNKNOWN_SERVER_TIME_LIMIT 554
-#define VAR_LOG_TAG_QUERYREPLY 555
-#define VAR_STREAM_WAIT_SIZE 556
-#define VAR_TLS_CIPHERS 557
-#define VAR_TLS_CIPHERSUITES 558
-#define VAR_TLS_USE_SNI 559
-#define VAR_IPSET 560
-#define VAR_IPSET_NAME_V4 561
-#define VAR_IPSET_NAME_V6 562
-#define VAR_TLS_SESSION_TICKET_KEYS 563
-#define VAR_RPZ 564
-#define VAR_TAGS 565
-#define VAR_RPZ_ACTION_OVERRIDE 566
-#define VAR_RPZ_CNAME_OVERRIDE 567
-#define VAR_RPZ_LOG 568
-#define VAR_RPZ_LOG_NAME 569
-#define VAR_DYNLIB 570
-#define VAR_DYNLIB_FILE 571
-#define VAR_EDNS_CLIENT_STRING 572
-#define VAR_EDNS_CLIENT_STRING_OPCODE 573
-#define VAR_NSID 574
-#define VAR_ZONEMD_PERMISSIVE_MODE 575
-#define VAR_ZONEMD_CHECK 576
-#define VAR_ZONEMD_REJECT_ABSENCE 577
-#define VAR_RPZ_SIGNAL_NXDOMAIN_RA 578
+#define VAR_EDE_SERVE_EXPIRED 493
+#define VAR_SERVE_ORIGINAL_TTL 494
+#define VAR_FAKE_DSA 495
+#define VAR_FAKE_SHA1 496
+#define VAR_LOG_IDENTITY 497
+#define VAR_HIDE_TRUSTANCHOR 498
+#define VAR_HIDE_HTTP_USER_AGENT 499
+#define VAR_HTTP_USER_AGENT 500
+#define VAR_TRUST_ANCHOR_SIGNALING 501
+#define VAR_AGGRESSIVE_NSEC 502
+#define VAR_USE_SYSTEMD 503
+#define VAR_SHM_ENABLE 504
+#define VAR_SHM_KEY 505
+#define VAR_ROOT_KEY_SENTINEL 506
+#define VAR_DNSCRYPT 507
+#define VAR_DNSCRYPT_ENABLE 508
+#define VAR_DNSCRYPT_PORT 509
+#define VAR_DNSCRYPT_PROVIDER 510
+#define VAR_DNSCRYPT_SECRET_KEY 511
+#define VAR_DNSCRYPT_PROVIDER_CERT 512
+#define VAR_DNSCRYPT_PROVIDER_CERT_ROTATED 513
+#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE 514
+#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS 515
+#define VAR_DNSCRYPT_NONCE_CACHE_SIZE 516
+#define VAR_DNSCRYPT_NONCE_CACHE_SLABS 517
+#define VAR_PAD_RESPONSES 518
+#define VAR_PAD_RESPONSES_BLOCK_SIZE 519
+#define VAR_PAD_QUERIES 520
+#define VAR_PAD_QUERIES_BLOCK_SIZE 521
+#define VAR_IPSECMOD_ENABLED 522
+#define VAR_IPSECMOD_HOOK 523
+#define VAR_IPSECMOD_IGNORE_BOGUS 524
+#define VAR_IPSECMOD_MAX_TTL 525
+#define VAR_IPSECMOD_WHITELIST 526
+#define VAR_IPSECMOD_STRICT 527
+#define VAR_CACHEDB 528
+#define VAR_CACHEDB_BACKEND 529
+#define VAR_CACHEDB_SECRETSEED 530
+#define VAR_CACHEDB_REDISHOST 531
+#define VAR_CACHEDB_REDISPORT 532
+#define VAR_CACHEDB_REDISTIMEOUT 533
+#define VAR_CACHEDB_REDISEXPIRERECORDS 534
+#define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 535
+#define VAR_FOR_UPSTREAM 536
+#define VAR_AUTH_ZONE 537
+#define VAR_ZONEFILE 538
+#define VAR_MASTER 539
+#define VAR_URL 540
+#define VAR_FOR_DOWNSTREAM 541
+#define VAR_FALLBACK_ENABLED 542
+#define VAR_TLS_ADDITIONAL_PORT 543
+#define VAR_LOW_RTT 544
+#define VAR_LOW_RTT_PERMIL 545
+#define VAR_FAST_SERVER_PERMIL 546
+#define VAR_FAST_SERVER_NUM 547
+#define VAR_ALLOW_NOTIFY 548
+#define VAR_TLS_WIN_CERT 549
+#define VAR_TCP_CONNECTION_LIMIT 550
+#define VAR_FORWARD_NO_CACHE 551
+#define VAR_STUB_NO_CACHE 552
+#define VAR_LOG_SERVFAIL 553
+#define VAR_DENY_ANY 554
+#define VAR_UNKNOWN_SERVER_TIME_LIMIT 555
+#define VAR_LOG_TAG_QUERYREPLY 556
+#define VAR_STREAM_WAIT_SIZE 557
+#define VAR_TLS_CIPHERS 558
+#define VAR_TLS_CIPHERSUITES 559
+#define VAR_TLS_USE_SNI 560
+#define VAR_IPSET 561
+#define VAR_IPSET_NAME_V4 562
+#define VAR_IPSET_NAME_V6 563
+#define VAR_TLS_SESSION_TICKET_KEYS 564
+#define VAR_RPZ 565
+#define VAR_TAGS 566
+#define VAR_RPZ_ACTION_OVERRIDE 567
+#define VAR_RPZ_CNAME_OVERRIDE 568
+#define VAR_RPZ_LOG 569
+#define VAR_RPZ_LOG_NAME 570
+#define VAR_DYNLIB 571
+#define VAR_DYNLIB_FILE 572
+#define VAR_EDNS_CLIENT_STRING 573
+#define VAR_EDNS_CLIENT_STRING_OPCODE 574
+#define VAR_NSID 575
+#define VAR_ZONEMD_PERMISSIVE_MODE 576
+#define VAR_ZONEMD_CHECK 577
+#define VAR_ZONEMD_REJECT_ABSENCE 578
+#define VAR_RPZ_SIGNAL_NXDOMAIN_RA 579
+#define VAR_INTERFACE_AUTOMATIC_PORTS 580
+#define VAR_EDE 581
/* Value type. */
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
@@ -712,7 +719,7 @@ union YYSTYPE
char* str;
-#line 716 "util/configparser.h"
+#line 723 "util/configparser.h"
};
typedef union YYSTYPE YYSTYPE;
diff --git a/util/configparser.y b/util/configparser.y
index d4f965f94465..c003f3358390 100644
--- a/util/configparser.y
+++ b/util/configparser.y
@@ -155,7 +155,8 @@ extern struct config_parser_state* cfg_parser;
%token VAR_ACCESS_CONTROL_TAG_DATA VAR_VIEW VAR_ACCESS_CONTROL_VIEW
%token VAR_VIEW_FIRST VAR_SERVE_EXPIRED VAR_SERVE_EXPIRED_TTL
%token VAR_SERVE_EXPIRED_TTL_RESET VAR_SERVE_EXPIRED_REPLY_TTL
-%token VAR_SERVE_EXPIRED_CLIENT_TIMEOUT VAR_SERVE_ORIGINAL_TTL VAR_FAKE_DSA
+%token VAR_SERVE_EXPIRED_CLIENT_TIMEOUT VAR_EDE_SERVE_EXPIRED
+%token VAR_SERVE_ORIGINAL_TTL VAR_FAKE_DSA
%token VAR_FAKE_SHA1 VAR_LOG_IDENTITY VAR_HIDE_TRUSTANCHOR
%token VAR_HIDE_HTTP_USER_AGENT VAR_HTTP_USER_AGENT
%token VAR_TRUST_ANCHOR_SIGNALING VAR_AGGRESSIVE_NSEC VAR_USE_SYSTEMD
@@ -188,7 +189,7 @@ extern struct config_parser_state* cfg_parser;
%token VAR_DYNLIB VAR_DYNLIB_FILE VAR_EDNS_CLIENT_STRING
%token VAR_EDNS_CLIENT_STRING_OPCODE VAR_NSID
%token VAR_ZONEMD_PERMISSIVE_MODE VAR_ZONEMD_CHECK VAR_ZONEMD_REJECT_ABSENCE
-%token VAR_RPZ_SIGNAL_NXDOMAIN_RA
+%token VAR_RPZ_SIGNAL_NXDOMAIN_RA VAR_INTERFACE_AUTOMATIC_PORTS VAR_EDE
%%
toplevelvars: /* empty */ | toplevelvars toplevelvar ;
@@ -292,7 +293,7 @@ content_server: server_num_threads | server_verbosity | server_port |
server_serve_expired |
server_serve_expired_ttl | server_serve_expired_ttl_reset |
server_serve_expired_reply_ttl | server_serve_expired_client_timeout |
- server_serve_original_ttl | server_fake_dsa |
+ server_ede_serve_expired | server_serve_original_ttl | server_fake_dsa |
server_log_identity | server_use_systemd |
server_response_ip_tag | server_response_ip | server_response_ip_data |
server_shm_enable | server_shm_key | server_fake_sha1 |
@@ -311,7 +312,8 @@ content_server: server_num_threads | server_verbosity | server_port |
server_tls_use_sni | server_edns_client_string |
server_edns_client_string_opcode | server_nsid |
server_zonemd_permissive_mode | server_max_reuse_tcp_queries |
- server_tcp_reuse_timeout | server_tcp_auth_query_timeout
+ server_tcp_reuse_timeout | server_tcp_auth_query_timeout |
+ server_interface_automatic_ports | server_ede
;
stubstart: VAR_STUB_ZONE
@@ -800,6 +802,13 @@ server_interface_automatic: VAR_INTERFACE_AUTOMATIC STRING_ARG
free($2);
}
;
+server_interface_automatic_ports: VAR_INTERFACE_AUTOMATIC_PORTS STRING_ARG
+ {
+ OUTYY(("P(server_interface_automatic_ports:%s)\n", $2));
+ free(cfg_parser->cfg->if_automatic_ports);
+ cfg_parser->cfg->if_automatic_ports = $2;
+ }
+ ;
server_do_ip4: VAR_DO_IP4 STRING_ARG
{
OUTYY(("P(server_do_ip4:%s)\n", $2));
@@ -2026,6 +2035,15 @@ server_serve_expired_client_timeout: VAR_SERVE_EXPIRED_CLIENT_TIMEOUT STRING_ARG
free($2);
}
;
+server_ede_serve_expired: VAR_EDE_SERVE_EXPIRED STRING_ARG
+ {
+ OUTYY(("P(server_ede_serve_expired:%s)\n", $2));
+ if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->ede_serve_expired = (strcmp($2, "yes")==0);
+ free($2);
+ }
+ ;
server_serve_original_ttl: VAR_SERVE_ORIGINAL_TTL STRING_ARG
{
OUTYY(("P(server_serve_original_ttl:%s)\n", $2));
@@ -2167,7 +2185,7 @@ server_local_zone: VAR_LOCAL_ZONE STRING_ARG STRING_ARG
&& strcmp($3, "noview")!=0
&& strcmp($3, "inform")!=0 && strcmp($3, "inform_deny")!=0
&& strcmp($3, "inform_redirect") != 0
- && strcmp($3, "ipset") != 0) {
+ && strcmp($3, "ipset") != 0) {
yyerror("local-zone type: expected static, deny, "
"refuse, redirect, transparent, "
"typetransparent, inform, inform_deny, "
@@ -2184,6 +2202,16 @@ server_local_zone: VAR_LOCAL_ZONE STRING_ARG STRING_ARG
free($3);
#ifdef USE_IPSET
} else if(strcmp($3, "ipset")==0) {
+ size_t len = strlen($2);
+ /* Make sure to add the trailing dot.
+ * These are str compared to domain names. */
+ if($2[len-1] != '.') {
+ if(!($2 = realloc($2, len+2))) {
+ fatal_exit("out of memory adding local-zone");
+ }
+ $2[len] = '.';
+ $2[len+1] = 0;
+ }
if(!cfg_strlist_insert(&cfg_parser->cfg->
local_zones_ipset, $2))
fatal_exit("out of memory adding local-zone");
@@ -2713,7 +2741,15 @@ server_edns_client_string_opcode: VAR_EDNS_CLIENT_STRING_OPCODE STRING_ARG
yyerror("option code must be in interval [0, 65535]");
else cfg_parser->cfg->edns_client_string_opcode = atoi($2);
free($2);
-
+ }
+ ;
+server_ede: VAR_EDE STRING_ARG
+ {
+ OUTYY(("P(server_ede:%s)\n", $2));
+ if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->ede = (strcmp($2, "yes")==0);
+ free($2);
}
;
stub_name: VAR_NAME STRING_ARG
@@ -2982,6 +3018,16 @@ view_local_zone: VAR_LOCAL_ZONE STRING_ARG STRING_ARG
free($3);
#ifdef USE_IPSET
} else if(strcmp($3, "ipset")==0) {
+ size_t len = strlen($2);
+ /* Make sure to add the trailing dot.
+ * These are str compared to domain names. */
+ if($2[len-1] != '.') {
+ if(!($2 = realloc($2, len+2))) {
+ fatal_exit("out of memory adding local-zone");
+ }
+ $2[len] = '.';
+ $2[len+1] = 0;
+ }
if(!cfg_strlist_insert(&cfg_parser->cfg->views->
local_zones_ipset, $2))
fatal_exit("out of memory adding local-zone");
diff --git a/util/data/msgparse.c b/util/data/msgparse.c
index a600a8c60151..5bb69d6ed06f 100644
--- a/util/data/msgparse.c
+++ b/util/data/msgparse.c
@@ -1157,7 +1157,7 @@ skip_pkt_rr(sldns_buffer* pkt)
}
/** skip RRs from packet */
-static int
+int
skip_pkt_rrs(sldns_buffer* pkt, int num)
{
int i;
@@ -1235,3 +1235,4 @@ log_edns_opt_list(enum verbosity_value level, const char* info_str,
}
}
}
+
diff --git a/util/data/msgparse.h b/util/data/msgparse.h
index 4c0559a739a4..0c458e6e8e25 100644
--- a/util/data/msgparse.h
+++ b/util/data/msgparse.h
@@ -294,6 +294,15 @@ int parse_extract_edns_from_response_msg(struct msg_parse* msg,
struct edns_data* edns, struct regional* region);
/**
+ * Skip RRs from packet
+ * @param pkt: the packet. position at start must be right after the query
+ * section. At end, right after EDNS data or no movement if failed.
+ * @param num: Limit of the number of records we want to parse.
+ * @return: 0 on success, 1 on failure.
+ */
+int skip_pkt_rrs(struct sldns_buffer* pkt, int num);
+
+/**
* If EDNS data follows a query section, extract it and initialize edns struct.
* @param pkt: the packet. position at start must be right after the query
* section. At end, right after EDNS data or no movement if failed.
diff --git a/util/data/msgreply.c b/util/data/msgreply.c
index ec46e4724780..e3ee607b1540 100644
--- a/util/data/msgreply.c
+++ b/util/data/msgreply.c
@@ -117,6 +117,7 @@ construct_reply_info_base(struct regional* region, uint16_t flags, size_t qd,
rep->ar_numrrsets = ar;
rep->rrset_count = total;
rep->security = sec;
+ rep->reason_bogus = LDNS_EDE_NONE;
rep->authoritative = 0;
/* array starts after the refs */
if(region)
@@ -989,6 +990,36 @@ parse_reply_in_temp_region(sldns_buffer* pkt, struct regional* region,
return rep;
}
+int edns_opt_list_append_ede(struct edns_option** list, struct regional* region,
+ sldns_ede_code code, const char *txt)
+{
+ struct edns_option** prevp;
+ struct edns_option* opt;
+ size_t txt_len = txt ? strlen(txt) : 0;
+
+ /* allocate new element */
+ opt = (struct edns_option*)regional_alloc(region, sizeof(*opt));
+ if(!opt)
+ return 0;
+ opt->next = NULL;
+ opt->opt_code = LDNS_EDNS_EDE;
+ opt->opt_len = txt_len + sizeof(uint16_t);
+ opt->opt_data = regional_alloc(region, txt_len + sizeof(uint16_t));
+ if(!opt->opt_data)
+ return 0;
+ sldns_write_uint16(opt->opt_data, (uint16_t)code);
+ if (txt_len)
+ memmove(opt->opt_data + 2, txt, txt_len);
+
+ /* append at end of list */
+ prevp = list;
+ while(*prevp != NULL)
+ prevp = &((*prevp)->next);
+ verbose(VERB_ALGO, "attached EDE code: %d with message: %s", code, txt);
+ *prevp = opt;
+ return 1;
+}
+
int edns_opt_list_append(struct edns_option** list, uint16_t code, size_t len,
uint8_t* data, struct regional* region)
{
diff --git a/util/data/msgreply.h b/util/data/msgreply.h
index 81c763fc7c3a..9538adc5a8b2 100644
--- a/util/data/msgreply.h
+++ b/util/data/msgreply.h
@@ -43,6 +43,7 @@
#define UTIL_DATA_MSGREPLY_H
#include "util/storage/lruhash.h"
#include "util/data/packed_rrset.h"
+#include "sldns/rrdef.h"
struct sldns_buffer;
struct comm_reply;
struct alloc_cache;
@@ -168,6 +169,11 @@ struct reply_info {
enum sec_status security;
/**
+ * EDE (rfc8914) code with reason for DNSSEC bogus status.
+ */
+ sldns_ede_code reason_bogus;
+
+ /**
* Number of RRsets in each section.
* The answer section. Add up the RRs in every RRset to calculate
* the number of RRs, and the count for the dns packet.
@@ -528,7 +534,38 @@ void log_query_info(enum verbosity_value v, const char* str,
* @return false on failure.
*/
int edns_opt_list_append(struct edns_option** list, uint16_t code, size_t len,
- uint8_t* data, struct regional* region);
+ uint8_t* data, struct regional* region);
+
+/**
+ * Append edns EDE option to edns options list
+ * @param LIST: the edns option list to append the edns option to.
+ * @param REGION: region to allocate the new edns option.
+ * @param CODE: the EDE code.
+ * @param TXT: Additional text for the option
+ */
+#define EDNS_OPT_LIST_APPEND_EDE(LIST, REGION, CODE, TXT) \
+ do { \
+ struct { \
+ uint16_t code; \
+ char text[sizeof(TXT) - 1]; \
+ } ede = { htons(CODE), TXT }; \
+ verbose(VERB_ALGO, "attached EDE code: %d with" \
+ " message: %s", CODE, TXT); \
+ edns_opt_list_append((LIST), LDNS_EDNS_EDE, \
+ sizeof(uint16_t) + sizeof(TXT) - 1, \
+ (void *)&ede, (REGION)); \
+ } while(0)
+
+/**
+ * Append edns EDE option to edns options list
+ * @param list: the edns option list to append the edns option to.
+ * @param region: region to allocate the new edns option.
+ * @param code: the EDE code.
+ * @param txt: Additional text for the option
+ * @return false on failure.
+ */
+int edns_opt_list_append_ede(struct edns_option** list, struct regional* region,
+ sldns_ede_code code, const char *txt);
/**
* Remove any option found on the edns option list that matches the code.
diff --git a/util/module.c b/util/module.c
index f16583183bfe..6698f94971b8 100644
--- a/util/module.c
+++ b/util/module.c
@@ -40,6 +40,10 @@
#include "config.h"
#include "util/module.h"
#include "sldns/wire2str.h"
+#include "util/config_file.h"
+#include "util/regional.h"
+#include "util/data/dname.h"
+#include "util/net_help.h"
const char*
strextstate(enum module_ext_state s)
@@ -71,6 +75,144 @@ strmodulevent(enum module_ev e)
return "bad_event_value";
}
+void errinf(struct module_qstate* qstate, const char* str)
+{
+ errinf_ede(qstate, str, LDNS_EDE_NONE);
+}
+
+void errinf_ede(struct module_qstate* qstate,
+ const char* str, sldns_ede_code reason_bogus)
+{
+ struct errinf_strlist* p;
+ if((qstate->env->cfg->val_log_level < 2 && !qstate->env->cfg->log_servfail) || !str)
+ return;
+ p = (struct errinf_strlist*)regional_alloc(qstate->region, sizeof(*p));
+ if(!p) {
+ log_err("malloc failure in validator-error-info string");
+ return;
+ }
+ p->next = NULL;
+ p->str = regional_strdup(qstate->region, str);
+ p->reason_bogus = reason_bogus;
+ if(!p->str) {
+ log_err("malloc failure in validator-error-info string");
+ return;
+ }
+ /* add at end */
+ if(qstate->errinf) {
+ struct errinf_strlist* q = qstate->errinf;
+ while(q->next)
+ q = q->next;
+ q->next = p;
+ } else qstate->errinf = p;
+}
+
+void errinf_origin(struct module_qstate* qstate, struct sock_list *origin)
+{
+ struct sock_list* p;
+ if(qstate->env->cfg->val_log_level < 2 && !qstate->env->cfg->log_servfail)
+ return;
+ for(p=origin; p; p=p->next) {
+ char buf[256];
+ if(p == origin)
+ snprintf(buf, sizeof(buf), "from ");
+ else snprintf(buf, sizeof(buf), "and ");
+ if(p->len == 0)
+ snprintf(buf+strlen(buf), sizeof(buf)-strlen(buf),
+ "cache");
+ else
+ addr_to_str(&p->addr, p->len, buf+strlen(buf),
+ sizeof(buf)-strlen(buf));
+ errinf(qstate, buf);
+ }
+}
+
+char* errinf_to_str_bogus(struct module_qstate* qstate)
+{
+ char buf[20480];
+ char* p = buf;
+ size_t left = sizeof(buf);
+ struct errinf_strlist* s;
+ char dname[LDNS_MAX_DOMAINLEN+1];
+ char t[16], c[16];
+ sldns_wire2str_type_buf(qstate->qinfo.qtype, t, sizeof(t));
+ sldns_wire2str_class_buf(qstate->qinfo.qclass, c, sizeof(c));
+ dname_str(qstate->qinfo.qname, dname);
+ snprintf(p, left, "validation failure <%s %s %s>:", dname, t, c);
+ left -= strlen(p); p += strlen(p);
+ if(!qstate->errinf)
+ snprintf(p, left, " misc failure");
+ else for(s=qstate->errinf; s; s=s->next) {
+ snprintf(p, left, " %s", s->str);
+ left -= strlen(p); p += strlen(p);
+ }
+ p = strdup(buf);
+ if(!p)
+ log_err("malloc failure in errinf_to_str");
+ return p;
+}
+
+sldns_ede_code errinf_to_reason_bogus(struct module_qstate* qstate)
+{
+ struct errinf_strlist* s;
+ for(s=qstate->errinf; s; s=s->next) {
+ if (s->reason_bogus != LDNS_EDE_NONE) {
+ return s->reason_bogus;
+ }
+ }
+ return LDNS_EDE_NONE;
+}
+
+char* errinf_to_str_servfail(struct module_qstate* qstate)
+{
+ char buf[20480];
+ char* p = buf;
+ size_t left = sizeof(buf);
+ struct errinf_strlist* s;
+ char dname[LDNS_MAX_DOMAINLEN+1];
+ char t[16], c[16];
+ sldns_wire2str_type_buf(qstate->qinfo.qtype, t, sizeof(t));
+ sldns_wire2str_class_buf(qstate->qinfo.qclass, c, sizeof(c));
+ dname_str(qstate->qinfo.qname, dname);
+ snprintf(p, left, "SERVFAIL <%s %s %s>:", dname, t, c);
+ left -= strlen(p); p += strlen(p);
+ if(!qstate->errinf)
+ snprintf(p, left, " misc failure");
+ else for(s=qstate->errinf; s; s=s->next) {
+ snprintf(p, left, " %s", s->str);
+ left -= strlen(p); p += strlen(p);
+ }
+ p = strdup(buf);
+ if(!p)
+ log_err("malloc failure in errinf_to_str");
+ return p;
+}
+
+void errinf_rrset(struct module_qstate* qstate, struct ub_packed_rrset_key *rr)
+{
+ char buf[1024];
+ char dname[LDNS_MAX_DOMAINLEN+1];
+ char t[16], c[16];
+ if((qstate->env->cfg->val_log_level < 2 && !qstate->env->cfg->log_servfail) || !rr)
+ return;
+ sldns_wire2str_type_buf(ntohs(rr->rk.type), t, sizeof(t));
+ sldns_wire2str_class_buf(ntohs(rr->rk.rrset_class), c, sizeof(c));
+ dname_str(rr->rk.dname, dname);
+ snprintf(buf, sizeof(buf), "for <%s %s %s>", dname, t, c);
+ errinf(qstate, buf);
+}
+
+void errinf_dname(struct module_qstate* qstate, const char* str, uint8_t* dname)
+{
+ char b[1024];
+ char buf[LDNS_MAX_DOMAINLEN+1];
+ if((qstate->env->cfg->val_log_level < 2 && !qstate->env->cfg->log_servfail) || !str || !dname)
+ return;
+ dname_str(dname, buf);
+ snprintf(b, sizeof(b), "%s %s", str, buf);
+ errinf(qstate, b);
+}
+
int
edns_known_options_init(struct module_env* env)
{
diff --git a/util/module.h b/util/module.h
index 7a548003397a..33068a71ce6e 100644
--- a/util/module.h
+++ b/util/module.h
@@ -187,6 +187,15 @@ struct respip_addr_info;
/** Maximum number of known edns options */
#define MAX_KNOWN_EDNS_OPTS 256
+struct errinf_strlist {
+ /** next item in list */
+ struct errinf_strlist* next;
+ /** config option string */
+ char* str;
+ /** EDE code companion to the error str */
+ int reason_bogus;
+};
+
enum inplace_cb_list_type {
/* Inplace callbacks for when a resolved reply is ready to be sent to the
* front.*/
@@ -624,8 +633,7 @@ struct module_qstate {
/** region for this query. Cleared when query process finishes. */
struct regional* region;
/** failure reason information if val-log-level is high */
- struct config_strlist* errinf;
-
+ struct errinf_strlist* errinf;
/** which module is executing */
int curmod;
/** module states */
@@ -667,6 +675,8 @@ struct module_qstate {
/** Extended result of response-ip action processing, mainly
* for logging purposes. */
struct respip_action_info* respip_action_info;
+ /** if the query is rpz passthru, no further rpz processing for it */
+ int rpz_passthru;
/** whether the reply should be dropped */
int is_drop;
@@ -760,6 +770,65 @@ const char* strextstate(enum module_ext_state s);
const char* strmodulevent(enum module_ev e);
/**
+ * Append text to the error info for validation.
+ * @param qstate: query state.
+ * @param str: copied into query region and appended.
+ * Failures to allocate are logged.
+ */
+void errinf(struct module_qstate* qstate, const char* str);
+void errinf_ede(struct module_qstate* qstate, const char* str,
+ sldns_ede_code reason_bogus);
+
+/**
+ * Append text to error info: from 1.2.3.4
+ * @param qstate: query state.
+ * @param origin: sock list with origin of trouble.
+ * Every element added.
+ * If NULL: nothing is added.
+ * if 0len element: 'from cache' is added.
+ */
+void errinf_origin(struct module_qstate* qstate, struct sock_list *origin);
+
+/**
+ * Append text to error info: for RRset name type class
+ * @param qstate: query state.
+ * @param rr: rrset_key.
+ */
+void errinf_rrset(struct module_qstate* qstate, struct ub_packed_rrset_key *rr);
+
+/**
+ * Append text to error info: str dname
+ * @param qstate: query state.
+ * @param str: explanation string
+ * @param dname: the dname.
+ */
+void errinf_dname(struct module_qstate* qstate, const char* str,
+ uint8_t* dname);
+
+/**
+ * Create error info in string. For validation failures.
+ * @param qstate: query state.
+ * @return string or NULL on malloc failure (already logged).
+ * This string is malloced and has to be freed by caller.
+ */
+char* errinf_to_str_bogus(struct module_qstate* qstate);
+/**
+ * Check the sldns_ede_code of the qstate.
+ * @param qstate: query state.
+ * @return LDNS_EDE_DNSSEC_BOGUS by default, or the first explicitly set
+ * sldns_ede_code.
+ */
+sldns_ede_code errinf_to_reason_bogus(struct module_qstate* qstate);
+
+/**
+ * Create error info in string. For other servfails.
+ * @param qstate: query state.
+ * @return string or NULL on malloc failure (already logged).
+ * This string is malloced and has to be freed by caller.
+ */
+char* errinf_to_str_servfail(struct module_qstate* qstate);
+
+/**
* Initialize the edns known options by allocating the required space.
* @param env: the module environment.
* @return false on failure (no memory).
diff --git a/util/net_help.c b/util/net_help.c
index 8bef5689050e..114920e3f905 100644
--- a/util/net_help.c
+++ b/util/net_help.c
@@ -1271,7 +1271,13 @@ void* connect_sslctx_create(char* key, char* pem, char* verifypem, int wincert)
}
}
#else
- (void)wincert;
+ if(wincert) {
+ if(!SSL_CTX_set_default_verify_paths(ctx)) {
+ log_crypto_err("error in default_verify_paths");
+ SSL_CTX_free(ctx);
+ return NULL;
+ }
+ }
#endif
SSL_CTX_set_verify(ctx, SSL_VERIFY_PEER, NULL);
}
diff --git a/util/netevent.c b/util/netevent.c
index b9b7230e41ae..841e0978738f 100644
--- a/util/netevent.c
+++ b/util/netevent.c
@@ -1209,23 +1209,22 @@ squelch_err_ssl_handshake(unsigned long err)
{
if(verbosity >= VERB_QUERY)
return 0; /* only squelch on low verbosity */
- /* this is very specific, we could filter on ERR_GET_REASON()
- * (the third element in ERR_PACK) */
- if(err == ERR_PACK(ERR_LIB_SSL, SSL_F_SSL3_GET_RECORD, SSL_R_HTTPS_PROXY_REQUEST) ||
- err == ERR_PACK(ERR_LIB_SSL, SSL_F_SSL3_GET_RECORD, SSL_R_HTTP_REQUEST) ||
- err == ERR_PACK(ERR_LIB_SSL, SSL_F_SSL3_GET_RECORD, SSL_R_WRONG_VERSION_NUMBER) ||
- err == ERR_PACK(ERR_LIB_SSL, SSL_F_SSL3_READ_BYTES, SSL_R_SSLV3_ALERT_BAD_CERTIFICATE)
+ if(ERR_GET_LIB(err) == ERR_LIB_SSL &&
+ (ERR_GET_REASON(err) == SSL_R_HTTPS_PROXY_REQUEST ||
+ ERR_GET_REASON(err) == SSL_R_HTTP_REQUEST ||
+ ERR_GET_REASON(err) == SSL_R_WRONG_VERSION_NUMBER ||
+ ERR_GET_REASON(err) == SSL_R_SSLV3_ALERT_BAD_CERTIFICATE
#ifdef SSL_F_TLS_POST_PROCESS_CLIENT_HELLO
- || err == ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_POST_PROCESS_CLIENT_HELLO, SSL_R_NO_SHARED_CIPHER)
+ || ERR_GET_REASON(err) == SSL_R_NO_SHARED_CIPHER
#endif
#ifdef SSL_F_TLS_EARLY_POST_PROCESS_CLIENT_HELLO
- || err == ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_EARLY_POST_PROCESS_CLIENT_HELLO, SSL_R_UNKNOWN_PROTOCOL)
- || err == ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_EARLY_POST_PROCESS_CLIENT_HELLO, SSL_R_UNSUPPORTED_PROTOCOL)
+ || ERR_GET_REASON(err) == SSL_R_UNKNOWN_PROTOCOL
+ || ERR_GET_REASON(err) == SSL_R_UNSUPPORTED_PROTOCOL
# ifdef SSL_R_VERSION_TOO_LOW
- || err == ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_EARLY_POST_PROCESS_CLIENT_HELLO, SSL_R_VERSION_TOO_LOW)
+ || ERR_GET_REASON(err) == SSL_R_VERSION_TOO_LOW
# endif
#endif
- )
+ ))
return 1;
return 0;
}
@@ -1278,6 +1277,12 @@ ssl_handshake(struct comm_point* c)
if(errno == ECONNRESET && verbosity < 2)
return 0; /* silence reset by peer */
#endif
+ if(!tcp_connect_errno_needs_log(
+ (struct sockaddr*)&c->repinfo.addr,
+ c->repinfo.addrlen))
+ return 0; /* silence connect failures that
+ show up because after connect this is the
+ first system call that accesses the socket */
if(errno != 0)
log_err("SSL_handshake syscall: %s",
strerror(errno));
@@ -2480,7 +2485,7 @@ http_nonchunk_segment(struct comm_point* c)
remainbufferlen = sldns_buffer_capacity(c->buffer) -
sldns_buffer_limit(c->buffer);
if(remainbufferlen+got_now >= c->tcp_byte_count ||
- remainbufferlen >= (c->ssl?16384:2048)) {
+ remainbufferlen >= (size_t)(c->ssl?16384:2048)) {
size_t total = sldns_buffer_limit(c->buffer);
sldns_buffer_clear(c->buffer);
sldns_buffer_set_position(c->buffer, total);
diff --git a/validator/autotrust.c b/validator/autotrust.c
index 55e82c176dae..3cdf9ceae851 100644
--- a/validator/autotrust.c
+++ b/validator/autotrust.c
@@ -1203,13 +1203,8 @@ void autr_write_file(struct module_env* env, struct trust_anchor* tp)
#else
llvalue = (unsigned long long)tp;
#endif
-#ifndef USE_WINSOCK
- snprintf(tempf, sizeof(tempf), "%s.%d-%d-%llx", fname, (int)getpid(),
+ snprintf(tempf, sizeof(tempf), "%s.%d-%d-" ARG_LL "x", fname, (int)getpid(),
env->worker?*(int*)env->worker:0, llvalue);
-#else
- snprintf(tempf, sizeof(tempf), "%s.%d-%d-%I64x", fname, (int)getpid(),
- env->worker?*(int*)env->worker:0, llvalue);
-#endif
#endif /* S_SPLINT_S */
verbose(VERB_ALGO, "autotrust: write to disk: %s", tempf);
out = fopen(tempf, "w");
@@ -1268,7 +1263,7 @@ verify_dnskey(struct module_env* env, struct val_env* ve,
int downprot = env->cfg->harden_algo_downgrade;
enum sec_status sec = val_verify_DNSKEY_with_TA(env, ve, rrset,
tp->ds_rrset, tp->dnskey_rrset, downprot?sigalg:NULL, &reason,
- qstate);
+ NULL, qstate);
/* sigalg is ignored, it returns algorithms signalled to exist, but
* in 5011 there are no other rrsets to check. if downprot is
* enabled, then it checks that the DNSKEY is signed with all
@@ -1317,7 +1312,7 @@ rr_is_selfsigned_revoked(struct module_env* env, struct val_env* ve,
/* no algorithm downgrade protection necessary, if it is selfsigned
* revoked it can be removed. */
sec = dnskey_verify_rrset(env, ve, dnskey_rrset, dnskey_rrset, i,
- &reason, LDNS_SECTION_ANSWER, qstate);
+ &reason, NULL, LDNS_SECTION_ANSWER, qstate);
return (sec == sec_status_secure);
}
@@ -2397,7 +2392,7 @@ probe_anchor(struct module_env* env, struct trust_anchor* tp)
qinfo.qclass);
if(!mesh_new_callback(env->mesh, &qinfo, qflags, &edns, buf, 0,
- &probe_answer_cb, env)) {
+ &probe_answer_cb, env, 0)) {
log_err("out of memory making 5011 probe");
}
}
diff --git a/validator/val_kcache.c b/validator/val_kcache.c
index e0b88b6df81d..c190085b56ff 100644
--- a/validator/val_kcache.c
+++ b/validator/val_kcache.c
@@ -90,6 +90,7 @@ key_cache_insert(struct key_cache* kcache, struct key_entry_key* kkey,
qstate->env->cfg->val_log_level >= 2) {
/* on malloc failure there is simply no reason string */
key_entry_set_reason(k, errinf_to_str_bogus(qstate));
+ key_entry_set_reason_bogus(k, errinf_to_reason_bogus(qstate));
}
key_entry_hash(k);
slabhash_insert(kcache->slab, k->entry.hash, &k->entry,
diff --git a/validator/val_kentry.c b/validator/val_kentry.c
index 93fe2145e6f8..a47feba61a9f 100644
--- a/validator/val_kentry.c
+++ b/validator/val_kentry.c
@@ -244,6 +244,15 @@ key_entry_set_reason(struct key_entry_key* kkey, char* reason)
d->reason = reason;
}
+void
+key_entry_set_reason_bogus(struct key_entry_key* kkey, sldns_ede_code ede)
+{
+ struct key_entry_data* d = (struct key_entry_data*)kkey->entry.data;
+ if (ede != LDNS_EDE_NONE) { /* reason_bogus init is LDNS_EDE_NONE already */
+ d->reason_bogus = ede;
+ }
+}
+
char*
key_entry_get_reason(struct key_entry_key* kkey)
{
@@ -251,6 +260,14 @@ key_entry_get_reason(struct key_entry_key* kkey)
return d->reason;
}
+sldns_ede_code
+key_entry_get_reason_bogus(struct key_entry_key* kkey)
+{
+ struct key_entry_data* d = (struct key_entry_data*)kkey->entry.data;
+ return d->reason_bogus;
+
+}
+
/** setup key entry in region */
static int
key_entry_setup(struct regional* region,
@@ -286,6 +303,7 @@ key_entry_create_null(struct regional* region,
d->ttl = now + ttl;
d->isbad = 0;
d->reason = NULL;
+ d->reason_bogus = LDNS_EDE_NONE;
d->rrset_type = LDNS_RR_TYPE_DNSKEY;
d->rrset_data = NULL;
d->algo = NULL;
@@ -306,6 +324,7 @@ key_entry_create_rrset(struct regional* region,
d->ttl = rd->ttl + now;
d->isbad = 0;
d->reason = NULL;
+ d->reason_bogus = LDNS_EDE_NONE;
d->rrset_type = ntohs(rrset->rk.type);
d->rrset_data = (struct packed_rrset_data*)regional_alloc_init(region,
rd, packed_rrset_sizeof(rd));
@@ -332,6 +351,7 @@ key_entry_create_bad(struct regional* region,
d->ttl = now + ttl;
d->isbad = 1;
d->reason = NULL;
+ d->reason_bogus = LDNS_EDE_NONE;
d->rrset_type = LDNS_RR_TYPE_DNSKEY;
d->rrset_data = NULL;
d->algo = NULL;
diff --git a/validator/val_kentry.h b/validator/val_kentry.h
index ade65571a57a..ded45beaa71d 100644
--- a/validator/val_kentry.h
+++ b/validator/val_kentry.h
@@ -45,6 +45,7 @@ struct packed_rrset_data;
struct regional;
struct ub_packed_rrset_key;
#include "util/storage/lruhash.h"
+#include "sldns/rrdef.h"
/**
* A key entry for the validator.
@@ -80,6 +81,8 @@ struct key_entry_data {
struct packed_rrset_data* rrset_data;
/** not NULL sometimes to give reason why bogus */
char* reason;
+ /** not NULL to give reason why bogus */
+ sldns_ede_code reason_bogus;
/** list of algorithms signalled, ends with 0, or NULL */
uint8_t* algo;
/** DNS RR type of the rrset data (host order) */
@@ -151,6 +154,15 @@ int key_entry_isbad(struct key_entry_key* kkey);
void key_entry_set_reason(struct key_entry_key* kkey, char* reason);
/**
+ * Set the EDE (RFC8914) code why the key is bad, if it
+ * exists (so not LDNS_EDE_NONE).
+ * @param kkey: bad key.
+ * @param ede: EDE code to attach to this key.
+ */
+void key_entry_set_reason_bogus(struct key_entry_key* kkey, sldns_ede_code ede);
+
+
+/**
* Get reason why a key is bad.
* @param kkey: bad key
* @return pointer to string.
@@ -159,6 +171,13 @@ void key_entry_set_reason(struct key_entry_key* kkey, char* reason);
char* key_entry_get_reason(struct key_entry_key* kkey);
/**
+ * Get the EDE (RFC8914) code why a key is bad. Can return LDNS_EDE_NONE.
+ * @param kkey: bad key
+ * @return the ede code.
+ */
+sldns_ede_code key_entry_get_reason_bogus(struct key_entry_key* kkey);
+
+/**
* Create a null entry, in the given region.
* @param region: where to allocate
* @param name: the key name
diff --git a/validator/val_nsec.c b/validator/val_nsec.c
index a4e5b3137dbf..876bfab6dbbd 100644
--- a/validator/val_nsec.c
+++ b/validator/val_nsec.c
@@ -187,7 +187,7 @@ nsec_verify_rrset(struct module_env* env, struct val_env* ve,
if(d->security == sec_status_secure)
return 1;
d->security = val_verify_rrset_entry(env, ve, nsec, kkey, reason,
- LDNS_SECTION_AUTHORITY, qstate);
+ NULL, LDNS_SECTION_AUTHORITY, qstate);
if(d->security == sec_status_secure) {
rrset_update_sec_status(env->rrset_cache, nsec, *env->now);
return 1;
diff --git a/validator/val_nsec3.c b/validator/val_nsec3.c
index 763b5ab7c767..a2b3794f6019 100644
--- a/validator/val_nsec3.c
+++ b/validator/val_nsec3.c
@@ -1289,7 +1289,8 @@ nsec3_prove_wildcard(struct module_env* env, struct val_env* ve,
static int
list_is_secure(struct module_env* env, struct val_env* ve,
struct ub_packed_rrset_key** list, size_t num,
- struct key_entry_key* kkey, char** reason, struct module_qstate* qstate)
+ struct key_entry_key* kkey, char** reason, sldns_ede_code *reason_bogus,
+ struct module_qstate* qstate)
{
struct packed_rrset_data* d;
size_t i;
@@ -1303,7 +1304,7 @@ list_is_secure(struct module_env* env, struct val_env* ve,
if(d->security == sec_status_secure)
continue;
d->security = val_verify_rrset_entry(env, ve, list[i], kkey,
- reason, LDNS_SECTION_AUTHORITY, qstate);
+ reason, reason_bogus, LDNS_SECTION_AUTHORITY, qstate);
if(d->security != sec_status_secure) {
verbose(VERB_ALGO, "NSEC3 did not verify");
return 0;
@@ -1317,7 +1318,7 @@ enum sec_status
nsec3_prove_nods(struct module_env* env, struct val_env* ve,
struct ub_packed_rrset_key** list, size_t num,
struct query_info* qinfo, struct key_entry_key* kkey, char** reason,
- struct module_qstate* qstate)
+ sldns_ede_code* reason_bogus, struct module_qstate* qstate)
{
rbtree_type ct;
struct nsec3_filter flt;
@@ -1330,8 +1331,10 @@ nsec3_prove_nods(struct module_env* env, struct val_env* ve,
*reason = "no valid NSEC3s";
return sec_status_bogus; /* no valid NSEC3s, bogus */
}
- if(!list_is_secure(env, ve, list, num, kkey, reason, qstate))
+ if(!list_is_secure(env, ve, list, num, kkey, reason, reason_bogus, qstate)) {
+ *reason = "not all NSEC3 records secure";
return sec_status_bogus; /* not all NSEC3 records secure */
+ }
rbtree_init(&ct, &nsec3_hash_cmp); /* init names-to-hash cache */
filter_init(&flt, list, num, qinfo); /* init RR iterator */
if(!flt.zone) {
diff --git a/validator/val_nsec3.h b/validator/val_nsec3.h
index 7fd37c169052..7676fc8b282d 100644
--- a/validator/val_nsec3.h
+++ b/validator/val_nsec3.h
@@ -68,6 +68,7 @@
#define VALIDATOR_VAL_NSEC3_H
#include "util/rbtree.h"
#include "util/data/packed_rrset.h"
+#include "sldns/rrdef.h"
struct val_env;
struct regional;
struct module_env;
@@ -186,6 +187,7 @@ nsec3_prove_wildcard(struct module_env* env, struct val_env* ve,
* @param qinfo: query that is verified for.
* @param kkey: key entry that signed the NSEC3s.
* @param reason: string for bogus result.
+ * @param reason_bogus: EDE (RFC8914) code paired with the reason of failure.
* @param qstate: qstate with region.
* @return:
* sec_status SECURE of the proposition is proven by the NSEC3 RRs,
@@ -197,7 +199,7 @@ enum sec_status
nsec3_prove_nods(struct module_env* env, struct val_env* ve,
struct ub_packed_rrset_key** list, size_t num,
struct query_info* qinfo, struct key_entry_key* kkey, char** reason,
- struct module_qstate* qstate);
+ sldns_ede_code* reason_bogus, struct module_qstate* qstate);
/**
* Prove NXDOMAIN or NODATA.
diff --git a/validator/val_sigcrypt.c b/validator/val_sigcrypt.c
index b15fba3f499d..d5f16b11f819 100644
--- a/validator/val_sigcrypt.c
+++ b/validator/val_sigcrypt.c
@@ -525,11 +525,19 @@ int algo_needs_missing(struct algo_needs* n)
return 0;
}
+static enum sec_status
+dnskeyset_verify_rrset_sig(struct module_env* env, struct val_env* ve,
+ time_t now, struct ub_packed_rrset_key* rrset,
+ struct ub_packed_rrset_key* dnskey, size_t sig_idx,
+ struct rbtree_type** sortree,
+ char** reason, sldns_ede_code *reason_bogus,
+ sldns_pkt_section section, struct module_qstate* qstate);
+
enum sec_status
dnskeyset_verify_rrset(struct module_env* env, struct val_env* ve,
struct ub_packed_rrset_key* rrset, struct ub_packed_rrset_key* dnskey,
- uint8_t* sigalg, char** reason, sldns_pkt_section section,
- struct module_qstate* qstate)
+ uint8_t* sigalg, char** reason, sldns_ede_code *reason_bogus,
+ sldns_pkt_section section, struct module_qstate* qstate)
{
enum sec_status sec;
size_t i, num;
@@ -543,6 +551,8 @@ dnskeyset_verify_rrset(struct module_env* env, struct val_env* ve,
verbose(VERB_QUERY, "rrset failed to verify due to a lack of "
"signatures");
*reason = "no signatures";
+ if(reason_bogus)
+ *reason_bogus = LDNS_EDE_RRSIGS_MISSING;
return sec_status_bogus;
}
@@ -551,12 +561,15 @@ dnskeyset_verify_rrset(struct module_env* env, struct val_env* ve,
if(algo_needs_num_missing(&needs) == 0) {
verbose(VERB_QUERY, "zone has no known algorithms");
*reason = "zone has no known algorithms";
+ if(reason_bogus)
+ *reason_bogus = LDNS_EDE_UNSUPPORTED_DNSKEY_ALG;
return sec_status_insecure;
}
}
for(i=0; i<num; i++) {
sec = dnskeyset_verify_rrset_sig(env, ve, *env->now, rrset,
- dnskey, i, &sortree, reason, section, qstate);
+ dnskey, i, &sortree, reason, reason_bogus,
+ section, qstate);
/* see which algorithm has been fixed up */
if(sec == sec_status_secure) {
if(!sigalg)
@@ -597,8 +610,8 @@ void algo_needs_reason(struct module_env* env, int alg, char** reason, char* s)
enum sec_status
dnskey_verify_rrset(struct module_env* env, struct val_env* ve,
struct ub_packed_rrset_key* rrset, struct ub_packed_rrset_key* dnskey,
- size_t dnskey_idx, char** reason, sldns_pkt_section section,
- struct module_qstate* qstate)
+ size_t dnskey_idx, char** reason, sldns_ede_code *reason_bogus,
+ sldns_pkt_section section, struct module_qstate* qstate)
{
enum sec_status sec;
size_t i, num, numchecked = 0;
@@ -612,6 +625,8 @@ dnskey_verify_rrset(struct module_env* env, struct val_env* ve,
verbose(VERB_QUERY, "rrset failed to verify due to a lack of "
"signatures");
*reason = "no signatures";
+ if(reason_bogus)
+ *reason_bogus = LDNS_EDE_RRSIGS_MISSING;
return sec_status_bogus;
}
for(i=0; i<num; i++) {
@@ -620,10 +635,10 @@ dnskey_verify_rrset(struct module_env* env, struct val_env* ve,
tag != rrset_get_sig_keytag(rrset, i))
continue;
buf_canon = 0;
- sec = dnskey_verify_rrset_sig(env->scratch,
+ sec = dnskey_verify_rrset_sig(env->scratch,
env->scratch_buffer, ve, *env->now, rrset,
dnskey, dnskey_idx, i, &sortree, &buf_canon, reason,
- section, qstate);
+ reason_bogus, section, qstate);
if(sec == sec_status_secure)
return sec;
numchecked ++;
@@ -633,12 +648,13 @@ dnskey_verify_rrset(struct module_env* env, struct val_env* ve,
return sec_status_bogus;
}
-enum sec_status
-dnskeyset_verify_rrset_sig(struct module_env* env, struct val_env* ve,
- time_t now, struct ub_packed_rrset_key* rrset,
- struct ub_packed_rrset_key* dnskey, size_t sig_idx,
- struct rbtree_type** sortree, char** reason, sldns_pkt_section section,
- struct module_qstate* qstate)
+static enum sec_status
+dnskeyset_verify_rrset_sig(struct module_env* env, struct val_env* ve,
+ time_t now, struct ub_packed_rrset_key* rrset,
+ struct ub_packed_rrset_key* dnskey, size_t sig_idx,
+ struct rbtree_type** sortree,
+ char** reason, sldns_ede_code *reason_bogus,
+ sldns_pkt_section section, struct module_qstate* qstate)
{
/* find matching keys and check them */
enum sec_status sec = sec_status_bogus;
@@ -649,10 +665,12 @@ dnskeyset_verify_rrset_sig(struct module_env* env, struct val_env* ve,
int buf_canon = 0;
verbose(VERB_ALGO, "verify sig %d %d", (int)tag, algo);
if(!dnskey_algo_id_is_supported(algo)) {
+ if(reason_bogus)
+ *reason_bogus = LDNS_EDE_UNSUPPORTED_DNSKEY_ALG;
verbose(VERB_QUERY, "verify sig: unknown algorithm");
return sec_status_insecure;
}
-
+
for(i=0; i<num; i++) {
/* see if key matches keytag and algo */
if(algo != dnskey_get_algo(dnskey, i) ||
@@ -661,14 +679,17 @@ dnskeyset_verify_rrset_sig(struct module_env* env, struct val_env* ve,
numchecked ++;
/* see if key verifies */
- sec = dnskey_verify_rrset_sig(env->scratch,
- env->scratch_buffer, ve, now, rrset, dnskey, i,
- sig_idx, sortree, &buf_canon, reason, section, qstate);
+ sec = dnskey_verify_rrset_sig(env->scratch,
+ env->scratch_buffer, ve, now, rrset, dnskey, i,
+ sig_idx, sortree, &buf_canon, reason, reason_bogus,
+ section, qstate);
if(sec == sec_status_secure)
return sec;
}
if(numchecked == 0) {
*reason = "signatures from unknown keys";
+ if(reason_bogus)
+ *reason_bogus = LDNS_EDE_DNSKEY_MISSING;
verbose(VERB_QUERY, "verify: could not find appropriate key");
return sec_status_bogus;
}
@@ -1361,8 +1382,8 @@ subtract_1982(uint32_t a, uint32_t b)
/** check rrsig dates */
static int
-check_dates(struct val_env* ve, uint32_t unow,
- uint8_t* expi_p, uint8_t* incep_p, char** reason)
+check_dates(struct val_env* ve, uint32_t unow, uint8_t* expi_p,
+ uint8_t* incep_p, char** reason, sldns_ede_code *reason_bogus)
{
/* read out the dates */
uint32_t expi, incep, now;
@@ -1386,6 +1407,14 @@ check_dates(struct val_env* ve, uint32_t unow,
sigdate_error("verify: inception after expiration, "
"signature bad", expi, incep, now);
*reason = "signature inception after expiration";
+ if(reason_bogus){
+ /* from RFC8914 on Signature Not Yet Valid: The resolver
+ * attempted to perform DNSSEC validation, but no
+ * signatures are presently valid and at least some are
+ * not yet valid. */
+ *reason_bogus = LDNS_EDE_SIGNATURE_NOT_YET_VALID;
+ }
+
return 0;
}
if(compare_1982(incep, now) > 0) {
@@ -1397,6 +1426,8 @@ check_dates(struct val_env* ve, uint32_t unow,
sigdate_error("verify: signature bad, current time is"
" before inception date", expi, incep, now);
*reason = "signature before inception date";
+ if(reason_bogus)
+ *reason_bogus = LDNS_EDE_SIGNATURE_NOT_YET_VALID;
return 0;
}
sigdate_error("verify warning suspicious signature inception "
@@ -1410,6 +1441,8 @@ check_dates(struct val_env* ve, uint32_t unow,
sigdate_error("verify: signature expired", expi,
incep, now);
*reason = "signature expired";
+ if(reason_bogus)
+ *reason_bogus = LDNS_EDE_SIGNATURE_EXPIRED;
return 0;
}
sigdate_error("verify warning suspicious signature expiration "
@@ -1473,7 +1506,8 @@ dnskey_verify_rrset_sig(struct regional* region, sldns_buffer* buf,
struct val_env* ve, time_t now,
struct ub_packed_rrset_key* rrset, struct ub_packed_rrset_key* dnskey,
size_t dnskey_idx, size_t sig_idx,
- struct rbtree_type** sortree, int* buf_canon, char** reason,
+ struct rbtree_type** sortree, int* buf_canon,
+ char** reason, sldns_ede_code *reason_bogus,
sldns_pkt_section section, struct module_qstate* qstate)
{
enum sec_status sec;
@@ -1492,12 +1526,16 @@ dnskey_verify_rrset_sig(struct regional* region, sldns_buffer* buf,
if(siglen < 2+20) {
verbose(VERB_QUERY, "verify: signature too short");
*reason = "signature too short";
+ if(reason_bogus)
+ *reason_bogus = LDNS_EDE_DNSSEC_BOGUS;
return sec_status_bogus;
}
if(!(dnskey_get_flags(dnskey, dnskey_idx) & DNSKEY_BIT_ZSK)) {
verbose(VERB_QUERY, "verify: dnskey without ZSK flag");
*reason = "dnskey without ZSK flag";
+ if(reason_bogus)
+ *reason_bogus = LDNS_EDE_NO_ZONE_KEY_BIT_SET;
return sec_status_bogus;
}
@@ -1505,6 +1543,8 @@ dnskey_verify_rrset_sig(struct regional* region, sldns_buffer* buf,
/* RFC 4034 says DNSKEY PROTOCOL MUST be 3 */
verbose(VERB_QUERY, "verify: dnskey has wrong key protocol");
*reason = "dnskey has wrong protocolnumber";
+ if(reason_bogus)
+ *reason_bogus = LDNS_EDE_DNSSEC_BOGUS;
return sec_status_bogus;
}
@@ -1514,17 +1554,23 @@ dnskey_verify_rrset_sig(struct regional* region, sldns_buffer* buf,
if(!signer_len) {
verbose(VERB_QUERY, "verify: malformed signer name");
*reason = "signer name malformed";
+ if(reason_bogus)
+ *reason_bogus = LDNS_EDE_DNSSEC_BOGUS;
return sec_status_bogus; /* signer name invalid */
}
if(!dname_subdomain_c(rrset->rk.dname, signer)) {
verbose(VERB_QUERY, "verify: signer name is off-tree");
*reason = "signer name off-tree";
+ if(reason_bogus)
+ *reason_bogus = LDNS_EDE_DNSSEC_BOGUS;
return sec_status_bogus; /* signer name offtree */
}
sigblock = (unsigned char*)signer+signer_len;
if(siglen < 2+18+signer_len+1) {
verbose(VERB_QUERY, "verify: too short, no signature data");
*reason = "signature too short, no signature data";
+ if(reason_bogus)
+ *reason_bogus = LDNS_EDE_DNSSEC_BOGUS;
return sec_status_bogus; /* sig rdf is < 1 byte */
}
sigblock_len = (unsigned int)(siglen - 2 - 18 - signer_len);
@@ -1537,6 +1583,8 @@ dnskey_verify_rrset_sig(struct regional* region, sldns_buffer* buf,
log_nametypeclass(VERB_QUERY, "the key name is",
dnskey->rk.dname, 0, 0);
*reason = "signer name mismatches key name";
+ if(reason_bogus)
+ *reason_bogus = LDNS_EDE_DNSSEC_BOGUS;
return sec_status_bogus;
}
@@ -1545,18 +1593,24 @@ dnskey_verify_rrset_sig(struct regional* region, sldns_buffer* buf,
if(memcmp(sig+2, &rrset->rk.type, 2) != 0) {
verbose(VERB_QUERY, "verify: wrong type covered");
*reason = "signature covers wrong type";
+ if(reason_bogus)
+ *reason_bogus = LDNS_EDE_DNSSEC_BOGUS;
return sec_status_bogus;
}
/* verify keytag and sig algo (possibly again) */
if((int)sig[2+2] != dnskey_get_algo(dnskey, dnskey_idx)) {
verbose(VERB_QUERY, "verify: wrong algorithm");
*reason = "signature has wrong algorithm";
+ if(reason_bogus)
+ *reason_bogus = LDNS_EDE_DNSSEC_BOGUS;
return sec_status_bogus;
}
ktag = htons(dnskey_calc_keytag(dnskey, dnskey_idx));
if(memcmp(sig+2+16, &ktag, 2) != 0) {
verbose(VERB_QUERY, "verify: wrong keytag");
*reason = "signature has wrong keytag";
+ if(reason_bogus)
+ *reason_bogus = LDNS_EDE_DNSSEC_BOGUS;
return sec_status_bogus;
}
@@ -1564,6 +1618,8 @@ dnskey_verify_rrset_sig(struct regional* region, sldns_buffer* buf,
if((int)sig[2+3] > dname_signame_label_count(rrset->rk.dname)) {
verbose(VERB_QUERY, "verify: labelcount out of range");
*reason = "signature labelcount out of range";
+ if(reason_bogus)
+ *reason_bogus = LDNS_EDE_DNSSEC_BOGUS;
return sec_status_bogus;
}
@@ -1598,7 +1654,8 @@ dnskey_verify_rrset_sig(struct regional* region, sldns_buffer* buf,
/* verify inception, expiration dates
* Do this last so that if you ignore expired-sigs the
* rest is sure to be OK. */
- if(!check_dates(ve, now, sig+2+8, sig+2+12, reason)) {
+ if(!check_dates(ve, now, sig+2+8, sig+2+12,
+ reason, reason_bogus)) {
return sec_status_bogus;
}
}
diff --git a/validator/val_sigcrypt.h b/validator/val_sigcrypt.h
index bbb95780d7fe..7f52b71e41fa 100644
--- a/validator/val_sigcrypt.h
+++ b/validator/val_sigcrypt.h
@@ -45,6 +45,7 @@
#define VALIDATOR_VAL_SIGCRYPT_H
#include "util/data/packed_rrset.h"
#include "sldns/pkthdr.h"
+#include "sldns/rrdef.h"
struct val_env;
struct module_env;
struct module_qstate;
@@ -256,6 +257,7 @@ uint16_t dnskey_get_flags(struct ub_packed_rrset_key* k, size_t idx);
* @param sigalg: if nonNULL provide downgrade protection otherwise one
* algorithm is enough.
* @param reason: if bogus, a string returned, fixed or alloced in scratch.
+ * @param reason_bogus: EDE (RFC8914) code paired with the reason of failure.
* @param section: section of packet where this rrset comes from.
* @param qstate: qstate with region.
* @return SECURE if one key in the set verifies one rrsig.
@@ -264,9 +266,11 @@ uint16_t dnskey_get_flags(struct ub_packed_rrset_key* k, size_t idx);
*/
enum sec_status dnskeyset_verify_rrset(struct module_env* env,
struct val_env* ve, struct ub_packed_rrset_key* rrset,
- struct ub_packed_rrset_key* dnskey, uint8_t* sigalg, char** reason,
+ struct ub_packed_rrset_key* dnskey, uint8_t* sigalg,
+ char** reason, sldns_ede_code *reason_bogus,
sldns_pkt_section section, struct module_qstate* qstate);
+
/**
* verify rrset against one specific dnskey (from rrset)
* @param env: module environment, scratch space is used.
@@ -275,39 +279,18 @@ enum sec_status dnskeyset_verify_rrset(struct module_env* env,
* @param dnskey: DNSKEY rrset, keyset.
* @param dnskey_idx: which key from the rrset to try.
* @param reason: if bogus, a string returned, fixed or alloced in scratch.
+ * @param reason_bogus: EDE (RFC8914) code paired with the reason of failure.
* @param section: section of packet where this rrset comes from.
* @param qstate: qstate with region.
* @return secure if *this* key signs any of the signatures on rrset.
* unchecked on error or and bogus on bad signature.
*/
-enum sec_status dnskey_verify_rrset(struct module_env* env,
- struct val_env* ve, struct ub_packed_rrset_key* rrset,
- struct ub_packed_rrset_key* dnskey, size_t dnskey_idx, char** reason,
+enum sec_status dnskey_verify_rrset(struct module_env* env, struct val_env* ve,
+ struct ub_packed_rrset_key* rrset, struct ub_packed_rrset_key* dnskey,
+ size_t dnskey_idx, char** reason, sldns_ede_code *reason_bogus,
sldns_pkt_section section, struct module_qstate* qstate);
/**
- * verify rrset, with dnskey rrset, for a specific rrsig in rrset
- * @param env: module environment, scratch space is used.
- * @param ve: validator environment, date settings.
- * @param now: current time for validation (can be overridden).
- * @param rrset: to be validated.
- * @param dnskey: DNSKEY rrset, keyset to try.
- * @param sig_idx: which signature to try to validate.
- * @param sortree: reused sorted order. Stored in region. Pass NULL at start,
- * and for a new rrset.
- * @param reason: if bogus, a string returned, fixed or alloced in scratch.
- * @param section: section of packet where this rrset comes from.
- * @param qstate: qstate with region.
- * @return secure if any key signs *this* signature. bogus if no key signs it,
- * or unchecked on error.
- */
-enum sec_status dnskeyset_verify_rrset_sig(struct module_env* env,
- struct val_env* ve, time_t now, struct ub_packed_rrset_key* rrset,
- struct ub_packed_rrset_key* dnskey, size_t sig_idx,
- struct rbtree_type** sortree, char** reason, sldns_pkt_section section,
- struct module_qstate* qstate);
-
-/**
* verify rrset, with specific dnskey(from set), for a specific rrsig
* @param region: scratch region used for temporary allocation.
* @param buf: scratch buffer used for canonicalized rrset data.
@@ -323,17 +306,19 @@ enum sec_status dnskeyset_verify_rrset_sig(struct module_env* env,
* pass false at start. pass old value only for same rrset and same
* signature (but perhaps different key) for reuse.
* @param reason: if bogus, a string returned, fixed or alloced in scratch.
+ * @param reason_bogus: EDE (8914) code paired with the reason of failure.
* @param section: section of packet where this rrset comes from.
* @param qstate: qstate with region.
* @return secure if this key signs this signature. unchecked on error or
* bogus if it did not validate.
*/
-enum sec_status dnskey_verify_rrset_sig(struct regional* region,
- struct sldns_buffer* buf, struct val_env* ve, time_t now,
- struct ub_packed_rrset_key* rrset, struct ub_packed_rrset_key* dnskey,
- size_t dnskey_idx, size_t sig_idx,
- struct rbtree_type** sortree, int* buf_canon, char** reason,
- sldns_pkt_section section, struct module_qstate* qstate);
+enum sec_status dnskey_verify_rrset_sig(struct regional* region,
+ struct sldns_buffer* buf, struct val_env* ve, time_t now,
+ struct ub_packed_rrset_key* rrset, struct ub_packed_rrset_key* dnskey,
+ size_t dnskey_idx, size_t sig_idx,
+ struct rbtree_type** sortree, int* buf_canon,
+ char** reason, sldns_ede_code *reason_bogus,
+ sldns_pkt_section section, struct module_qstate* qstate);
/**
* canonical compare for two tree entries
diff --git a/validator/val_utils.c b/validator/val_utils.c
index bb366d339400..18a7c9c2e95d 100644
--- a/validator/val_utils.c
+++ b/validator/val_utils.c
@@ -332,11 +332,11 @@ rrset_get_ttl(struct ub_packed_rrset_key* rrset)
return d->ttl;
}
-enum sec_status
+static enum sec_status
val_verify_rrset(struct module_env* env, struct val_env* ve,
struct ub_packed_rrset_key* rrset, struct ub_packed_rrset_key* keys,
- uint8_t* sigalg, char** reason, sldns_pkt_section section,
- struct module_qstate* qstate)
+ uint8_t* sigalg, char** reason, sldns_ede_code *reason_bogus,
+ sldns_pkt_section section, struct module_qstate* qstate)
{
enum sec_status sec;
struct packed_rrset_data* d = (struct packed_rrset_data*)rrset->
@@ -359,7 +359,7 @@ val_verify_rrset(struct module_env* env, struct val_env* ve,
log_nametypeclass(VERB_ALGO, "verify rrset", rrset->rk.dname,
ntohs(rrset->rk.type), ntohs(rrset->rk.rrset_class));
sec = dnskeyset_verify_rrset(env, ve, rrset, keys, sigalg, reason,
- section, qstate);
+ reason_bogus, section, qstate);
verbose(VERB_ALGO, "verify result: %s", sec_status_to_string(sec));
regional_free_all(env->scratch);
@@ -392,7 +392,8 @@ val_verify_rrset(struct module_env* env, struct val_env* ve,
enum sec_status
val_verify_rrset_entry(struct module_env* env, struct val_env* ve,
struct ub_packed_rrset_key* rrset, struct key_entry_key* kkey,
- char** reason, sldns_pkt_section section, struct module_qstate* qstate)
+ char** reason, sldns_ede_code *reason_bogus,
+ sldns_pkt_section section, struct module_qstate* qstate)
{
/* temporary dnskey rrset-key */
struct ub_packed_rrset_key dnskey;
@@ -406,16 +407,16 @@ val_verify_rrset_entry(struct module_env* env, struct val_env* ve,
dnskey.entry.key = &dnskey;
dnskey.entry.data = kd->rrset_data;
sec = val_verify_rrset(env, ve, rrset, &dnskey, kd->algo, reason,
- section, qstate);
+ reason_bogus, section, qstate);
return sec;
}
/** verify that a DS RR hashes to a key and that key signs the set */
static enum sec_status
-verify_dnskeys_with_ds_rr(struct module_env* env, struct val_env* ve,
- struct ub_packed_rrset_key* dnskey_rrset,
+verify_dnskeys_with_ds_rr(struct module_env* env, struct val_env* ve,
+ struct ub_packed_rrset_key* dnskey_rrset,
struct ub_packed_rrset_key* ds_rrset, size_t ds_idx, char** reason,
- struct module_qstate* qstate)
+ sldns_ede_code *reason_bogus, struct module_qstate* qstate)
{
enum sec_status sec = sec_status_bogus;
size_t i, num, numchecked = 0, numhashok = 0, numsizesupp = 0;
@@ -450,8 +451,8 @@ verify_dnskeys_with_ds_rr(struct module_env* env, struct val_env* ve,
/* Otherwise, we have a match! Make sure that the DNSKEY
* verifies *with this key* */
- sec = dnskey_verify_rrset(env, ve, dnskey_rrset,
- dnskey_rrset, i, reason, LDNS_SECTION_ANSWER, qstate);
+ sec = dnskey_verify_rrset(env, ve, dnskey_rrset, dnskey_rrset,
+ i, reason, reason_bogus, LDNS_SECTION_ANSWER, qstate);
if(sec == sec_status_secure) {
return sec;
}
@@ -488,11 +489,12 @@ int val_favorite_ds_algo(struct ub_packed_rrset_key* ds_rrset)
return digest_algo;
}
-enum sec_status
+// @TODO change the use of this function to _ede function in authzone.c:8111
+enum sec_status
val_verify_DNSKEY_with_DS(struct module_env* env, struct val_env* ve,
struct ub_packed_rrset_key* dnskey_rrset,
struct ub_packed_rrset_key* ds_rrset, uint8_t* sigalg, char** reason,
- struct module_qstate* qstate)
+ sldns_ede_code *reason_bogus, struct module_qstate* qstate)
{
/* as long as this is false, we can consider this DS rrset to be
* equivalent to no DS rrset. */
@@ -529,7 +531,7 @@ val_verify_DNSKEY_with_DS(struct module_env* env, struct val_env* ve,
}
sec = verify_dnskeys_with_ds_rr(env, ve, dnskey_rrset,
- ds_rrset, i, reason, qstate);
+ ds_rrset, i, reason, reason_bogus, qstate);
if(sec == sec_status_insecure)
continue;
@@ -571,15 +573,16 @@ val_verify_DNSKEY_with_DS(struct module_env* env, struct val_env* ve,
return sec_status_bogus;
}
-struct key_entry_key*
+struct key_entry_key*
val_verify_new_DNSKEYs(struct regional* region, struct module_env* env,
struct val_env* ve, struct ub_packed_rrset_key* dnskey_rrset,
struct ub_packed_rrset_key* ds_rrset, int downprot, char** reason,
- struct module_qstate* qstate)
+ sldns_ede_code *reason_bogus, struct module_qstate* qstate)
{
uint8_t sigalg[ALGO_NEEDS_MAX+1];
- enum sec_status sec = val_verify_DNSKEY_with_DS(env, ve,
- dnskey_rrset, ds_rrset, downprot?sigalg:NULL, reason, qstate);
+ enum sec_status sec = val_verify_DNSKEY_with_DS(env, ve,
+ dnskey_rrset, ds_rrset, downprot?sigalg:NULL, reason,
+ reason_bogus, qstate);
if(sec == sec_status_secure) {
return key_entry_create_rrset(region,
@@ -597,12 +600,12 @@ val_verify_new_DNSKEYs(struct regional* region, struct module_env* env,
BOGUS_KEY_TTL, *env->now);
}
-enum sec_status
+enum sec_status
val_verify_DNSKEY_with_TA(struct module_env* env, struct val_env* ve,
struct ub_packed_rrset_key* dnskey_rrset,
struct ub_packed_rrset_key* ta_ds,
struct ub_packed_rrset_key* ta_dnskey, uint8_t* sigalg, char** reason,
- struct module_qstate* qstate)
+ sldns_ede_code *reason_bogus, struct module_qstate* qstate)
{
/* as long as this is false, we can consider this anchor to be
* equivalent to no anchor. */
@@ -617,6 +620,8 @@ val_verify_DNSKEY_with_TA(struct module_env* env, struct val_env* ve,
verbose(VERB_QUERY, "DNSKEY RRset did not match DS RRset "
"by name");
*reason = "DNSKEY RRset did not match DS RRset by name";
+ if(reason_bogus)
+ *reason_bogus = LDNS_EDE_DNSKEY_MISSING;
return sec_status_bogus;
}
if(ta_dnskey && (dnskey_rrset->rk.dname_len != ta_dnskey->rk.dname_len
@@ -625,6 +630,8 @@ val_verify_DNSKEY_with_TA(struct module_env* env, struct val_env* ve,
verbose(VERB_QUERY, "DNSKEY RRset did not match anchor RRset "
"by name");
*reason = "DNSKEY RRset did not match anchor RRset by name";
+ if(reason_bogus)
+ *reason_bogus = LDNS_EDE_DNSKEY_MISSING;
return sec_status_bogus;
}
@@ -648,7 +655,7 @@ val_verify_DNSKEY_with_TA(struct module_env* env, struct val_env* ve,
continue;
sec = verify_dnskeys_with_ds_rr(env, ve, dnskey_rrset,
- ta_ds, i, reason, qstate);
+ ta_ds, i, reason, reason_bogus, qstate);
if(sec == sec_status_insecure)
continue;
@@ -688,7 +695,7 @@ val_verify_DNSKEY_with_TA(struct module_env* env, struct val_env* ve,
has_useful_ta = 1;
sec = dnskey_verify_rrset(env, ve, dnskey_rrset,
- ta_dnskey, i, reason, LDNS_SECTION_ANSWER, qstate);
+ ta_dnskey, i, reason, NULL, LDNS_SECTION_ANSWER, qstate);
if(sec == sec_status_secure) {
if(!sigalg || algo_needs_set_secure(&needs,
(uint8_t)dnskey_get_algo(ta_dnskey, i))) {
@@ -723,24 +730,24 @@ val_verify_DNSKEY_with_TA(struct module_env* env, struct val_env* ve,
struct key_entry_key*
val_verify_new_DNSKEYs_with_ta(struct regional* region, struct module_env* env,
- struct val_env* ve, struct ub_packed_rrset_key* dnskey_rrset,
+ struct val_env* ve, struct ub_packed_rrset_key* dnskey_rrset,
struct ub_packed_rrset_key* ta_ds_rrset,
struct ub_packed_rrset_key* ta_dnskey_rrset, int downprot,
- char** reason, struct module_qstate* qstate)
+ char** reason, sldns_ede_code *reason_bogus, struct module_qstate* qstate)
{
uint8_t sigalg[ALGO_NEEDS_MAX+1];
- enum sec_status sec = val_verify_DNSKEY_with_TA(env, ve,
+ enum sec_status sec = val_verify_DNSKEY_with_TA(env, ve,
dnskey_rrset, ta_ds_rrset, ta_dnskey_rrset,
- downprot?sigalg:NULL, reason, qstate);
+ downprot?sigalg:NULL, reason, reason_bogus, qstate);
if(sec == sec_status_secure) {
- return key_entry_create_rrset(region,
+ return key_entry_create_rrset(region,
dnskey_rrset->rk.dname, dnskey_rrset->rk.dname_len,
ntohs(dnskey_rrset->rk.rrset_class), dnskey_rrset,
downprot?sigalg:NULL, *env->now);
} else if(sec == sec_status_insecure) {
return key_entry_create_null(region, dnskey_rrset->rk.dname,
- dnskey_rrset->rk.dname_len,
+ dnskey_rrset->rk.dname_len,
ntohs(dnskey_rrset->rk.rrset_class),
rrset_get_ttl(dnskey_rrset), *env->now);
}
@@ -749,7 +756,7 @@ val_verify_new_DNSKEYs_with_ta(struct regional* region, struct module_env* env,
BOGUS_KEY_TTL, *env->now);
}
-int
+int
val_dsset_isusable(struct ub_packed_rrset_key* ds_rrset)
{
size_t i;
@@ -776,6 +783,7 @@ val_dsset_isusable(struct ub_packed_rrset_key* ds_rrset)
if(lt) snprintf(aerr, sizeof(aerr), "%s", lt->name);
else snprintf(aerr, sizeof(aerr), "%d",
(int)ds_get_key_algo(ds_rrset, 0));
+
verbose(VERB_ALGO, "DS unsupported, hash %s %s, "
"key algorithm %s %s", herr,
(ds_digest_algo_is_supported(ds_rrset, 0)?
diff --git a/validator/val_utils.h b/validator/val_utils.h
index 6e9867f6e3c7..83e3d0ad824e 100644
--- a/validator/val_utils.h
+++ b/validator/val_utils.h
@@ -43,6 +43,7 @@
#define VALIDATOR_VAL_UTILS_H
#include "util/data/packed_rrset.h"
#include "sldns/pkthdr.h"
+#include "sldns/rrdef.h"
struct query_info;
struct reply_info;
struct val_env;
@@ -114,38 +115,21 @@ void val_find_signer(enum val_classification subtype,
size_t cname_skip, uint8_t** signer_name, size_t* signer_len);
/**
- * Verify RRset with keys
- * @param env: module environment (scratch buffer)
- * @param ve: validator environment (verification settings)
- * @param rrset: what to verify
- * @param keys: dnskey rrset to verify with.
- * @param sigalg: if nonNULL provide downgrade protection otherwise one
- * algorithm is enough. Algo list is constructed in here.
- * @param reason: reason of failure. Fixed string or alloced in scratch.
- * @param section: section of packet where this rrset comes from.
- * @param qstate: qstate with region.
- * @return security status of verification.
- */
-enum sec_status val_verify_rrset(struct module_env* env, struct val_env* ve,
- struct ub_packed_rrset_key* rrset, struct ub_packed_rrset_key* keys,
- uint8_t* sigalg, char** reason, sldns_pkt_section section,
- struct module_qstate* qstate);
-
-/**
* Verify RRset with keys from a keyset.
* @param env: module environment (scratch buffer)
* @param ve: validator environment (verification settings)
* @param rrset: what to verify
* @param kkey: key_entry to verify with.
* @param reason: reason of failure. Fixed string or alloced in scratch.
+ * @param reason_bogus: EDE (RFC8914) code paired with the reason of failure.
* @param section: section of packet where this rrset comes from.
* @param qstate: qstate with region.
* @return security status of verification.
*/
enum sec_status val_verify_rrset_entry(struct module_env* env,
struct val_env* ve, struct ub_packed_rrset_key* rrset,
- struct key_entry_key* kkey, char** reason, sldns_pkt_section section,
- struct module_qstate* qstate);
+ struct key_entry_key* kkey, char** reason, sldns_ede_code *reason_bogus,
+ sldns_pkt_section section, struct module_qstate* qstate);
/**
* Verify DNSKEYs with DS rrset. Like val_verify_new_DNSKEYs but
@@ -158,15 +142,16 @@ enum sec_status val_verify_rrset_entry(struct module_env* env,
* algorithm is enough. The list of signalled algorithms is returned,
* must have enough space for ALGO_NEEDS_MAX+1.
* @param reason: reason of failure. Fixed string or alloced in scratch.
+ * @param reason_bogus: EDE (RFC8914) code paired with the reason of failure.
* @param qstate: qstate with region.
* @return: sec_status_secure if a DS matches.
* sec_status_insecure if end of trust (i.e., unknown algorithms).
* sec_status_bogus if it fails.
*/
-enum sec_status val_verify_DNSKEY_with_DS(struct module_env* env,
- struct val_env* ve, struct ub_packed_rrset_key* dnskey_rrset,
- struct ub_packed_rrset_key* ds_rrset, uint8_t* sigalg, char** reason,
- struct module_qstate* qstate);
+enum sec_status val_verify_DNSKEY_with_DS(struct module_env* env,
+ struct val_env* ve, struct ub_packed_rrset_key* dnskey_rrset,
+ struct ub_packed_rrset_key* ds_rrset, uint8_t* sigalg, char** reason,
+ sldns_ede_code *reason_bogus, struct module_qstate* qstate);
/**
* Verify DNSKEYs with DS and DNSKEY rrset. Like val_verify_DNSKEY_with_DS
@@ -180,16 +165,17 @@ enum sec_status val_verify_DNSKEY_with_DS(struct module_env* env,
* algorithm is enough. The list of signalled algorithms is returned,
* must have enough space for ALGO_NEEDS_MAX+1.
* @param reason: reason of failure. Fixed string or alloced in scratch.
+* @param reason_bogus: EDE (RFC8914) code paired with the reason of failure.
* @param qstate: qstate with region.
* @return: sec_status_secure if a DS matches.
* sec_status_insecure if end of trust (i.e., unknown algorithms).
* sec_status_bogus if it fails.
*/
-enum sec_status val_verify_DNSKEY_with_TA(struct module_env* env,
- struct val_env* ve, struct ub_packed_rrset_key* dnskey_rrset,
- struct ub_packed_rrset_key* ta_ds,
- struct ub_packed_rrset_key* ta_dnskey, uint8_t* sigalg, char** reason,
- struct module_qstate* qstate);
+enum sec_status val_verify_DNSKEY_with_TA(struct module_env* env,
+ struct val_env* ve, struct ub_packed_rrset_key* dnskey_rrset,
+ struct ub_packed_rrset_key* ta_ds,
+ struct ub_packed_rrset_key* ta_dnskey, uint8_t* sigalg, char** reason,
+ sldns_ede_code *reason_bogus, struct module_qstate* qstate);
/**
* Verify new DNSKEYs with DS rrset. The DS contains hash values that should
@@ -204,6 +190,7 @@ enum sec_status val_verify_DNSKEY_with_TA(struct module_env* env,
* @param downprot: if true provide downgrade protection otherwise one
* algorithm is enough.
* @param reason: reason of failure. Fixed string or alloced in scratch.
+ * @param reason_bogus: EDE (RFC8914) code paired with the reason of failure.
* @param qstate: qstate with region.
* @return a KeyEntry. This will either contain the now trusted
* dnskey_rrset, a "null" key entry indicating that this DS
@@ -215,12 +202,11 @@ enum sec_status val_verify_DNSKEY_with_TA(struct module_env* env,
* rrset.
* if downprot is set, a key entry with an algo list is made.
*/
-struct key_entry_key* val_verify_new_DNSKEYs(struct regional* region,
- struct module_env* env, struct val_env* ve,
- struct ub_packed_rrset_key* dnskey_rrset,
- struct ub_packed_rrset_key* ds_rrset, int downprot, char** reason,
- struct module_qstate* qstate);
-
+struct key_entry_key* val_verify_new_DNSKEYs(struct regional* region,
+ struct module_env* env, struct val_env* ve,
+ struct ub_packed_rrset_key* dnskey_rrset,
+ struct ub_packed_rrset_key* ds_rrset, int downprot, char** reason,
+ sldns_ede_code *reason_bogus, struct module_qstate* qstate);
/**
* Verify rrset with trust anchor: DS and DNSKEY rrset.
@@ -234,6 +220,7 @@ struct key_entry_key* val_verify_new_DNSKEYs(struct regional* region,
* @param downprot: if true provide downgrade protection otherwise one
* algorithm is enough.
* @param reason: reason of failure. Fixed string or alloced in scratch.
+ * @param reason_bogus: EDE (RFC8914) code paired with the reason of failure.
* @param qstate: qstate with region.
* @return a KeyEntry. This will either contain the now trusted
* dnskey_rrset, a "null" key entry indicating that this DS
@@ -246,11 +233,11 @@ struct key_entry_key* val_verify_new_DNSKEYs(struct regional* region,
* if downprot is set, a key entry with an algo list is made.
*/
struct key_entry_key* val_verify_new_DNSKEYs_with_ta(struct regional* region,
- struct module_env* env, struct val_env* ve,
- struct ub_packed_rrset_key* dnskey_rrset,
- struct ub_packed_rrset_key* ta_ds_rrset,
- struct ub_packed_rrset_key* ta_dnskey_rrset,
- int downprot, char** reason, struct module_qstate* qstate);
+ struct module_env* env, struct val_env* ve,
+ struct ub_packed_rrset_key* dnskey_rrset,
+ struct ub_packed_rrset_key* ta_ds_rrset,
+ struct ub_packed_rrset_key* ta_dnskey_rrset, int downprot,
+ char** reason, sldns_ede_code *reason_bogus, struct module_qstate* qstate);
/**
* Determine if DS rrset is usable for validator or not.
diff --git a/validator/validator.c b/validator/validator.c
index e6307284fb0e..75f3220cf3d9 100644
--- a/validator/validator.c
+++ b/validator/validator.c
@@ -69,6 +69,20 @@ static void process_ds_response(struct module_qstate* qstate,
struct val_qstate* vq, int id, int rcode, struct dns_msg* msg,
struct query_info* qinfo, struct sock_list* origin);
+
+/* Updates the suplied EDE (RFC8914) code selectively so we don't loose
+ * a more specific code
+ */
+static void
+update_reason_bogus(struct reply_info* rep, sldns_ede_code reason_bogus)
+{
+ if (rep->reason_bogus == LDNS_EDE_DNSSEC_BOGUS ||
+ rep->reason_bogus == LDNS_EDE_NONE) {
+ rep->reason_bogus = reason_bogus;
+ }
+}
+
+
/** fill up nsec3 key iterations config entry */
static int
fill_nsec3_iter(struct val_env* ve, char* s, int c)
@@ -230,6 +244,7 @@ val_new_getmsg(struct module_qstate* qstate, struct val_qstate* vq)
vq->orig_msg->rep->flags = (uint16_t)(qstate->return_rcode&0xf)
|BIT_QR|BIT_RA|(qstate->query_flags|(BIT_CD|BIT_RD));
vq->orig_msg->rep->qdcount = 1;
+ vq->orig_msg->rep->reason_bogus = LDNS_EDE_NONE;
} else {
vq->orig_msg = qstate->return_msg;
}
@@ -592,6 +607,7 @@ validate_msg_signatures(struct module_qstate* qstate, struct module_env* env,
enum sec_status sec;
int dname_seen = 0;
char* reason = NULL;
+ sldns_ede_code reason_bogus = LDNS_EDE_DNSSEC_BOGUS;
/* validate the ANSWER section */
for(i=0; i<chase_reply->an_numrrsets; i++) {
@@ -613,20 +629,22 @@ validate_msg_signatures(struct module_qstate* qstate, struct module_env* env,
/* Verify the answer rrset */
sec = val_verify_rrset_entry(env, ve, s, key_entry, &reason,
- LDNS_SECTION_ANSWER, qstate);
+ &reason_bogus, LDNS_SECTION_ANSWER, qstate);
/* If the (answer) rrset failed to validate, then this
* message is BAD. */
if(sec != sec_status_secure) {
log_nametypeclass(VERB_QUERY, "validator: response "
"has failed ANSWER rrset:", s->rk.dname,
ntohs(s->rk.type), ntohs(s->rk.rrset_class));
- errinf(qstate, reason);
+ errinf_ede(qstate, reason, reason_bogus);
if(ntohs(s->rk.type) == LDNS_RR_TYPE_CNAME)
errinf(qstate, "for CNAME");
else if(ntohs(s->rk.type) == LDNS_RR_TYPE_DNAME)
errinf(qstate, "for DNAME");
errinf_origin(qstate, qstate->reply_origin);
chase_reply->security = sec_status_bogus;
+ update_reason_bogus(chase_reply, reason_bogus);
+
return 0;
}
@@ -643,17 +661,18 @@ validate_msg_signatures(struct module_qstate* qstate, struct module_env* env,
chase_reply->ns_numrrsets; i++) {
s = chase_reply->rrsets[i];
sec = val_verify_rrset_entry(env, ve, s, key_entry, &reason,
- LDNS_SECTION_AUTHORITY, qstate);
+ &reason_bogus, LDNS_SECTION_AUTHORITY, qstate);
/* If anything in the authority section fails to be secure,
* we have a bad message. */
if(sec != sec_status_secure) {
log_nametypeclass(VERB_QUERY, "validator: response "
"has failed AUTHORITY rrset:", s->rk.dname,
ntohs(s->rk.type), ntohs(s->rk.rrset_class));
- errinf(qstate, reason);
+ errinf_ede(qstate, reason, reason_bogus);
errinf_origin(qstate, qstate->reply_origin);
errinf_rrset(qstate, s);
chase_reply->security = sec_status_bogus;
+ update_reason_bogus(chase_reply, reason_bogus);
return 0;
}
}
@@ -669,9 +688,10 @@ validate_msg_signatures(struct module_qstate* qstate, struct module_env* env,
/* only validate rrs that have signatures with the key */
/* leave others unchecked, those get removed later on too */
val_find_rrset_signer(s, &sname, &slen);
+
if(sname && query_dname_compare(sname, key_entry->name)==0)
(void)val_verify_rrset_entry(env, ve, s, key_entry,
- &reason, LDNS_SECTION_ADDITIONAL, qstate);
+ &reason, NULL, LDNS_SECTION_ADDITIONAL, qstate);
/* the additional section can fail to be secure,
* it is optional, check signature in case we need
* to clean the additional section later. */
@@ -804,6 +824,7 @@ validate_positive_response(struct module_env* env, struct val_env* ve,
"inconsistent wildcard sigs:", s->rk.dname,
ntohs(s->rk.type), ntohs(s->rk.rrset_class));
chase_reply->security = sec_status_bogus;
+ update_reason_bogus(chase_reply, LDNS_EDE_DNSSEC_BOGUS);
return;
}
if(wc && !wc_cached && env->cfg->aggressive_nsec) {
@@ -861,6 +882,7 @@ validate_positive_response(struct module_env* env, struct val_env* ve,
"expansion and did not prove original data "
"did not exist");
chase_reply->security = sec_status_bogus;
+ update_reason_bogus(chase_reply, LDNS_EDE_DNSSEC_BOGUS);
return;
}
@@ -959,6 +981,7 @@ validate_nodata_response(struct module_env* env, struct val_env* ve,
if(verbosity >= VERB_ALGO)
log_dns_msg("Failed NODATA", qchase, chase_reply);
chase_reply->security = sec_status_bogus;
+ update_reason_bogus(chase_reply, LDNS_EDE_DNSSEC_BOGUS);
return;
}
@@ -1045,6 +1068,7 @@ validate_nameerror_response(struct module_env* env, struct val_env* ve,
verbose(VERB_QUERY, "NameError response has failed to prove: "
"qname does not exist");
chase_reply->security = sec_status_bogus;
+ update_reason_bogus(chase_reply, LDNS_EDE_DNSSEC_BOGUS);
/* Be lenient with RCODE in NSEC NameError responses */
validate_nodata_response(env, ve, qchase, chase_reply, kkey);
if (chase_reply->security == sec_status_secure)
@@ -1056,6 +1080,7 @@ validate_nameerror_response(struct module_env* env, struct val_env* ve,
verbose(VERB_QUERY, "NameError response has failed to prove: "
"covering wildcard does not exist");
chase_reply->security = sec_status_bogus;
+ update_reason_bogus(chase_reply, LDNS_EDE_DNSSEC_BOGUS);
/* Be lenient with RCODE in NSEC NameError responses */
validate_nodata_response(env, ve, qchase, chase_reply, kkey);
if (chase_reply->security == sec_status_secure)
@@ -1138,6 +1163,7 @@ validate_any_response(struct module_env* env, struct val_env* ve,
if(qchase->qtype != LDNS_RR_TYPE_ANY) {
log_err("internal error: ANY validation called for non-ANY");
chase_reply->security = sec_status_bogus;
+ update_reason_bogus(chase_reply, LDNS_EDE_DNSSEC_BOGUS);
return;
}
@@ -1154,6 +1180,7 @@ validate_any_response(struct module_env* env, struct val_env* ve,
s->rk.dname, ntohs(s->rk.type),
ntohs(s->rk.rrset_class));
chase_reply->security = sec_status_bogus;
+ update_reason_bogus(chase_reply, LDNS_EDE_DNSSEC_BOGUS);
return;
}
}
@@ -1208,6 +1235,7 @@ validate_any_response(struct module_env* env, struct val_env* ve,
"expansion and did not prove original data "
"did not exist");
chase_reply->security = sec_status_bogus;
+ update_reason_bogus(chase_reply, LDNS_EDE_DNSSEC_BOGUS);
return;
}
@@ -1255,6 +1283,7 @@ validate_cname_response(struct module_env* env, struct val_env* ve,
"inconsistent wildcard sigs:", s->rk.dname,
ntohs(s->rk.type), ntohs(s->rk.rrset_class));
chase_reply->security = sec_status_bogus;
+ update_reason_bogus(chase_reply, LDNS_EDE_DNSSEC_BOGUS);
return;
}
@@ -1267,6 +1296,7 @@ validate_cname_response(struct module_env* env, struct val_env* ve,
"wildcarded DNAME:", s->rk.dname,
ntohs(s->rk.type), ntohs(s->rk.rrset_class));
chase_reply->security = sec_status_bogus;
+ update_reason_bogus(chase_reply, LDNS_EDE_DNSSEC_BOGUS);
return;
}
@@ -1324,6 +1354,7 @@ validate_cname_response(struct module_env* env, struct val_env* ve,
"expansion and did not prove original data "
"did not exist");
chase_reply->security = sec_status_bogus;
+ update_reason_bogus(chase_reply, LDNS_EDE_DNSSEC_BOGUS);
return;
}
@@ -1424,6 +1455,7 @@ validate_cname_noanswer_response(struct module_env* env, struct val_env* ve,
verbose(VERB_QUERY, "CNAMEchain to noanswer proves that name "
"exists and not exists, bogus");
chase_reply->security = sec_status_bogus;
+ update_reason_bogus(chase_reply, LDNS_EDE_DNSSEC_BOGUS);
return;
}
if(!nodata_valid_nsec && !nxdomain_valid_nsec && nsec3s_seen) {
@@ -1449,6 +1481,7 @@ validate_cname_noanswer_response(struct module_env* env, struct val_env* ve,
if(verbosity >= VERB_ALGO)
log_dns_msg("Failed CNAMEnoanswer", qchase, chase_reply);
chase_reply->security = sec_status_bogus;
+ update_reason_bogus(chase_reply, LDNS_EDE_DNSSEC_BOGUS);
return;
}
@@ -1492,6 +1525,10 @@ processInit(struct module_qstate* qstate, struct val_qstate* vq,
verbose(VERB_ALGO, "restart count exceeded");
return val_error(qstate, id);
}
+
+ /* correctly initialize reason_bogus */
+ update_reason_bogus(vq->chase_reply, LDNS_EDE_DNSSEC_BOGUS);
+
verbose(VERB_ALGO, "validator classification %s",
val_classification_to_string(subtype));
if(subtype == VAL_CLASS_REFERRAL &&
@@ -1557,6 +1594,7 @@ processInit(struct module_qstate* qstate, struct val_qstate* vq,
verbose(VERB_QUERY, "unsigned parent zone denies"
" trust anchor, indeterminate");
vq->chase_reply->security = sec_status_indeterminate;
+ update_reason_bogus(vq->chase_reply, LDNS_EDE_DNSSEC_INDETERMINATE);
vq->state = VAL_FINISHED_STATE;
return 1;
}
@@ -1588,6 +1626,7 @@ processInit(struct module_qstate* qstate, struct val_qstate* vq,
if(vq->key_entry == NULL && anchor == NULL) {
/*response isn't under a trust anchor, so we cannot validate.*/
vq->chase_reply->security = sec_status_indeterminate;
+ update_reason_bogus(vq->chase_reply, LDNS_EDE_DNSSEC_INDETERMINATE);
/* go to finished state to cache this result */
vq->state = VAL_FINISHED_STATE;
return 1;
@@ -1633,16 +1672,25 @@ processInit(struct module_qstate* qstate, struct val_qstate* vq,
vq->state = VAL_FINISHED_STATE;
return 1;
} else if(key_entry_isbad(vq->key_entry)) {
+ sldns_ede_code ede = LDNS_EDE_DNSSEC_BOGUS;
+
+ /* the key could have a more spefic EDE than just bogus */
+ if(key_entry_get_reason_bogus(vq->key_entry) != LDNS_EDE_NONE) {
+ ede = key_entry_get_reason_bogus(vq->key_entry);
+ }
+
/* key is bad, chain is bad, reply is bogus */
errinf_dname(qstate, "key for validation", vq->key_entry->name);
- errinf(qstate, "is marked as invalid");
+ errinf_ede(qstate, "is marked as invalid", ede);
if(key_entry_get_reason(vq->key_entry)) {
errinf(qstate, "because of a previous");
errinf(qstate, key_entry_get_reason(vq->key_entry));
}
+
/* no retries, stop bothering the authority until timeout */
vq->restart_count = ve->max_restart;
vq->chase_reply->security = sec_status_bogus;
+ update_reason_bogus(vq->chase_reply, ede);
vq->state = VAL_FINISHED_STATE;
return 1;
}
@@ -1713,9 +1761,10 @@ processFindKey(struct module_qstate* qstate, struct val_qstate* vq, int id)
vq->empty_DS_name) == 0) {
/* do not query for empty_DS_name again */
verbose(VERB_ALGO, "Cannot retrieve DS for signature");
- errinf(qstate, "no signatures");
+ errinf_ede(qstate, "no signatures", LDNS_EDE_RRSIGS_MISSING);
errinf_origin(qstate, qstate->reply_origin);
vq->chase_reply->security = sec_status_bogus;
+ update_reason_bogus(vq->chase_reply, LDNS_EDE_RRSIGS_MISSING);
vq->state = VAL_FINISHED_STATE;
return 1;
}
@@ -1848,7 +1897,10 @@ processValidate(struct module_qstate* qstate, struct val_qstate* vq,
"of trust to keys for", vq->key_entry->name,
LDNS_RR_TYPE_DNSKEY, vq->key_entry->key_class);
vq->chase_reply->security = sec_status_bogus;
- errinf(qstate, "while building chain of trust");
+
+ update_reason_bogus(vq->chase_reply, LDNS_EDE_DNSKEY_MISSING);
+ errinf_ede(qstate, "while building chain of trust",
+ LDNS_EDE_DNSKEY_MISSING);
if(vq->restart_count >= ve->max_restart)
key_cache_insert(ve->kcache, vq->key_entry, qstate);
return 1;
@@ -1861,9 +1913,10 @@ processValidate(struct module_qstate* qstate, struct val_qstate* vq,
"signer name", &vq->qchase);
verbose(VERB_DETAIL, "Could not establish validation of "
"INSECURE status of unsigned response.");
- errinf(qstate, "no signatures");
+ errinf_ede(qstate, "no signatures", LDNS_EDE_RRSIGS_MISSING);
errinf_origin(qstate, qstate->reply_origin);
vq->chase_reply->security = sec_status_bogus;
+ update_reason_bogus(vq->chase_reply, LDNS_EDE_RRSIGS_MISSING);
return 1;
}
subtype = val_classify_response(qstate->query_flags, &qstate->qinfo,
@@ -2001,17 +2054,20 @@ processFinished(struct module_qstate* qstate, struct val_qstate* vq,
vq->orig_msg->rep, vq->rrset_skip);
/* store overall validation result in orig_msg */
- if(vq->rrset_skip == 0)
+ if(vq->rrset_skip == 0) {
vq->orig_msg->rep->security = vq->chase_reply->security;
- else if(subtype != VAL_CLASS_REFERRAL ||
+ update_reason_bogus(vq->orig_msg->rep, vq->chase_reply->reason_bogus);
+ } else if(subtype != VAL_CLASS_REFERRAL ||
vq->rrset_skip < vq->orig_msg->rep->an_numrrsets +
vq->orig_msg->rep->ns_numrrsets) {
/* ignore sec status of additional section if a referral
* type message skips there and
* use the lowest security status as end result. */
- if(vq->chase_reply->security < vq->orig_msg->rep->security)
+ if(vq->chase_reply->security < vq->orig_msg->rep->security) {
vq->orig_msg->rep->security =
vq->chase_reply->security;
+ update_reason_bogus(vq->orig_msg->rep, vq->chase_reply->reason_bogus);
+ }
}
if(subtype == VAL_CLASS_REFERRAL) {
@@ -2034,6 +2090,7 @@ processFinished(struct module_qstate* qstate, struct val_qstate* vq,
&vq->rrset_skip)) {
verbose(VERB_ALGO, "validator: failed to chase CNAME");
vq->orig_msg->rep->security = sec_status_bogus;
+ update_reason_bogus(vq->orig_msg->rep, LDNS_EDE_DNSSEC_BOGUS);
} else {
/* restart process for new qchase at rrset_skip */
log_query_info(VERB_ALGO, "validator: chased to",
@@ -2247,9 +2304,11 @@ val_operate(struct module_qstate* qstate, enum module_ev event, int id,
* queries. If we get here, it is bogus or an internal error */
if(qstate->qinfo.qclass == LDNS_RR_CLASS_ANY) {
verbose(VERB_ALGO, "cannot validate classANY: bogus");
- if(qstate->return_msg)
+ if(qstate->return_msg) {
qstate->return_msg->rep->security =
sec_status_bogus;
+ update_reason_bogus(qstate->return_msg->rep, LDNS_EDE_DNSSEC_BOGUS);
+ }
qstate->ext_state[id] = module_finished;
return;
}
@@ -2304,6 +2363,7 @@ primeResponseToKE(struct ub_packed_rrset_key* dnskey_rrset,
struct key_entry_key* kkey = NULL;
enum sec_status sec = sec_status_unchecked;
char* reason = NULL;
+ sldns_ede_code reason_bogus = LDNS_EDE_DNSSEC_BOGUS;
int downprot = qstate->env->cfg->harden_algo_downgrade;
if(!dnskey_rrset) {
@@ -2311,7 +2371,7 @@ primeResponseToKE(struct ub_packed_rrset_key* dnskey_rrset,
"could not fetch DNSKEY rrset",
ta->name, LDNS_RR_TYPE_DNSKEY, ta->dclass);
if(qstate->env->cfg->harden_dnssec_stripped) {
- errinf(qstate, "no DNSKEY rrset");
+ errinf_ede(qstate, "no DNSKEY rrset", LDNS_EDE_DNSKEY_MISSING);
kkey = key_entry_create_bad(qstate->region, ta->name,
ta->namelen, ta->dclass, BOGUS_KEY_TTL,
*qstate->env->now);
@@ -2327,7 +2387,7 @@ primeResponseToKE(struct ub_packed_rrset_key* dnskey_rrset,
/* attempt to verify with trust anchor DS and DNSKEY */
kkey = val_verify_new_DNSKEYs_with_ta(qstate->region, qstate->env, ve,
dnskey_rrset, ta->ds_rrset, ta->dnskey_rrset, downprot,
- &reason, qstate);
+ &reason, &reason_bogus, qstate);
if(!kkey) {
log_err("out of memory: verifying prime TA");
return NULL;
@@ -2346,7 +2406,7 @@ primeResponseToKE(struct ub_packed_rrset_key* dnskey_rrset,
/* NOTE: in this case, we should probably reject the trust
* anchor for longer, perhaps forever. */
if(qstate->env->cfg->harden_dnssec_stripped) {
- errinf(qstate, reason);
+ errinf_ede(qstate, reason, reason_bogus);
kkey = key_entry_create_bad(qstate->region, ta->name,
ta->namelen, ta->dclass, BOGUS_KEY_TTL,
*qstate->env->now);
@@ -2389,6 +2449,7 @@ ds_response_to_ke(struct module_qstate* qstate, struct val_qstate* vq,
{
struct val_env* ve = (struct val_env*)qstate->env->modinfo[id];
char* reason = NULL;
+ sldns_ede_code reason_bogus = LDNS_EDE_DNSSEC_BOGUS;
enum val_classification subtype;
if(rcode != LDNS_RCODE_NOERROR) {
char rc[16];
@@ -2397,7 +2458,8 @@ ds_response_to_ke(struct module_qstate* qstate, struct val_qstate* vq,
/* errors here pretty much break validation */
verbose(VERB_DETAIL, "DS response was error, thus bogus");
errinf(qstate, rc);
- errinf(qstate, "no DS");
+ errinf_ede(qstate, "no DS", LDNS_EDE_NETWORK_ERROR);
+
goto return_bogus;
}
@@ -2411,17 +2473,17 @@ ds_response_to_ke(struct module_qstate* qstate, struct val_qstate* vq,
if(!ds) {
log_warn("internal error: POSITIVE DS response was "
"missing DS.");
- errinf(qstate, "no DS record");
+ errinf_ede(qstate, "no DS record", LDNS_EDE_DNSSEC_BOGUS);
goto return_bogus;
}
/* Verify only returns BOGUS or SECURE. If the rrset is
* bogus, then we are done. */
- sec = val_verify_rrset_entry(qstate->env, ve, ds,
- vq->key_entry, &reason, LDNS_SECTION_ANSWER, qstate);
+ sec = val_verify_rrset_entry(qstate->env, ve, ds,
+ vq->key_entry, &reason, &reason_bogus, LDNS_SECTION_ANSWER, qstate);
if(sec != sec_status_secure) {
verbose(VERB_DETAIL, "DS rrset in DS response did "
"not verify");
- errinf(qstate, reason);
+ errinf_ede(qstate, reason, reason_bogus);
goto return_bogus;
}
@@ -2430,6 +2492,9 @@ ds_response_to_ke(struct module_qstate* qstate, struct val_qstate* vq,
if(!val_dsset_isusable(ds)) {
/* If they aren't usable, then we treat it like
* there was no DS. */
+
+ // @TODO add EDE Unsupported DS Digest Type
+
*ke = key_entry_create_null(qstate->region,
qinfo->qname, qinfo->qname_len, qinfo->qclass,
ub_packed_rrset_ttl(ds), *qstate->env->now);
@@ -2452,7 +2517,7 @@ ds_response_to_ke(struct module_qstate* qstate, struct val_qstate* vq,
/* make sure there are NSECs or NSEC3s with signatures */
if(!val_has_signed_nsecs(msg->rep, &reason)) {
verbose(VERB_ALGO, "no NSECs: %s", reason);
- errinf(qstate, reason);
+ errinf_ede(qstate, reason, LDNS_EDE_NSEC_MISSING);
goto return_bogus;
}
@@ -2493,7 +2558,7 @@ ds_response_to_ke(struct module_qstate* qstate, struct val_qstate* vq,
sec = nsec3_prove_nods(qstate->env, ve,
msg->rep->rrsets + msg->rep->an_numrrsets,
msg->rep->ns_numrrsets, qinfo, vq->key_entry, &reason,
- qstate);
+ &reason_bogus, qstate);
switch(sec) {
case sec_status_insecure:
/* case insecure also continues to unsigned
@@ -2515,7 +2580,7 @@ ds_response_to_ke(struct module_qstate* qstate, struct val_qstate* vq,
case sec_status_bogus:
verbose(VERB_DETAIL, "NSEC3s for the "
"referral did not prove no DS.");
- errinf(qstate, reason);
+ errinf_ede(qstate, reason, reason_bogus);
goto return_bogus;
case sec_status_unchecked:
default:
@@ -2554,7 +2619,7 @@ ds_response_to_ke(struct module_qstate* qstate, struct val_qstate* vq,
goto return_bogus;
}
sec = val_verify_rrset_entry(qstate->env, ve, cname,
- vq->key_entry, &reason, LDNS_SECTION_ANSWER, qstate);
+ vq->key_entry, &reason, NULL, LDNS_SECTION_ANSWER, qstate);
if(sec == sec_status_secure) {
verbose(VERB_ALGO, "CNAME validated, "
"proof that DS does not exist");
@@ -2685,6 +2750,7 @@ process_dnskey_response(struct module_qstate* qstate, struct val_qstate* vq,
struct ub_packed_rrset_key* dnskey = NULL;
int downprot;
char* reason = NULL;
+ sldns_ede_code reason_bogus = LDNS_EDE_DNSSEC_BOGUS;
if(rcode == LDNS_RCODE_NOERROR)
dnskey = reply_find_answer_rrset(qinfo, msg->rep);
@@ -2693,6 +2759,7 @@ process_dnskey_response(struct module_qstate* qstate, struct val_qstate* vq,
/* bad response */
verbose(VERB_DETAIL, "Missing DNSKEY RRset in response to "
"DNSKEY query.");
+
if(vq->restart_count < ve->max_restart) {
val_blacklist(&vq->chain_blacklist, qstate->region,
origin, 1);
@@ -2707,7 +2774,7 @@ process_dnskey_response(struct module_qstate* qstate, struct val_qstate* vq,
log_err("alloc failure in missing dnskey response");
/* key_entry is NULL for failure in Validate */
}
- errinf(qstate, "No DNSKEY record");
+ errinf_ede(qstate, "No DNSKEY record", LDNS_EDE_DNSKEY_MISSING);
errinf_origin(qstate, origin);
errinf_dname(qstate, "for key", qinfo->qname);
vq->state = VAL_VALIDATE_STATE;
@@ -2721,7 +2788,7 @@ process_dnskey_response(struct module_qstate* qstate, struct val_qstate* vq,
}
downprot = qstate->env->cfg->harden_algo_downgrade;
vq->key_entry = val_verify_new_DNSKEYs(qstate->region, qstate->env,
- ve, dnskey, vq->ds_rrset, downprot, &reason, qstate);
+ ve, dnskey, vq->ds_rrset, downprot, &reason, &reason_bogus, qstate);
if(!vq->key_entry) {
log_err("out of memory in verify new DNSKEYs");
@@ -2742,7 +2809,7 @@ process_dnskey_response(struct module_qstate* qstate, struct val_qstate* vq,
}
verbose(VERB_DETAIL, "Did not match a DS to a DNSKEY, "
"thus bogus.");
- errinf(qstate, reason);
+ errinf_ede(qstate, reason, reason_bogus);
errinf_origin(qstate, origin);
errinf_dname(qstate, "for key", qinfo->qname);
}
diff --git a/validator/validator.h b/validator/validator.h
index a97eab25bc4a..694e4c89529e 100644
--- a/validator/validator.h
+++ b/validator/validator.h
@@ -93,7 +93,7 @@ struct val_env {
int32_t skew_max;
/** max number of query restarts, number of IPs to probe */
- int32_t max_restart;
+ int max_restart;
/** TTL for bogus data; used instead of untrusted TTL from data.
* Bogus data will not be verified more often than this interval.