aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile.in5
-rw-r--r--acx_python.m42
-rw-r--r--cachedb/cachedb.c55
-rw-r--r--cachedb/cachedb.h8
-rwxr-xr-xconfig.guess11
-rw-r--r--config.h.in15
-rwxr-xr-xconfig.sub729
-rwxr-xr-xconfigure290
-rw-r--r--configure.ac96
-rwxr-xr-xconfigure~290
-rw-r--r--contrib/unbound.service.in4
-rw-r--r--contrib/unbound_portable.service.in4
-rw-r--r--daemon/daemon.c43
-rw-r--r--daemon/daemon.h14
-rw-r--r--daemon/remote.c540
-rw-r--r--daemon/stats.c9
-rw-r--r--daemon/unbound.c6
-rw-r--r--daemon/worker.c11
-rw-r--r--dns64/dns64.c5
-rw-r--r--dnstap/dnstap.c45
-rw-r--r--dnstap/dnstap.h8
-rw-r--r--dnstap/dnstap.m459
-rw-r--r--dnstap/dtstream.c53
-rw-r--r--dnstap/unbound-dnstap-socket.c285
-rw-r--r--doc/Changelog267
-rw-r--r--doc/README2
-rw-r--r--doc/example.conf.in14
-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.in66
-rw-r--r--doc/unbound-host.1.in2
-rw-r--r--doc/unbound.8.in4
-rw-r--r--doc/unbound.conf.5.in59
-rw-r--r--dynlibmod/dynlibmod.c4
-rw-r--r--edns-subnet/subnetmod.c3
-rw-r--r--ipsecmod/ipsecmod.c2
-rw-r--r--ipset/ipset.c209
-rw-r--r--ipset/ipset.h6
-rw-r--r--iterator/iter_scrub.c82
-rw-r--r--iterator/iter_utils.c3
-rw-r--r--iterator/iterator.c124
-rw-r--r--iterator/iterator.h6
-rw-r--r--libunbound/context.c4
-rw-r--r--libunbound/libunbound.c19
-rw-r--r--libunbound/libworker.c1
-rw-r--r--pythonmod/pythonmod.c4
-rw-r--r--respip/respip.c4
-rw-r--r--services/authzone.c48
-rw-r--r--services/cache/dns.c33
-rw-r--r--services/cache/infra.c27
-rw-r--r--services/cache/infra.h2
-rw-r--r--services/listen_dnsport.c2
-rw-r--r--services/localzone.c71
-rw-r--r--services/localzone.h19
-rw-r--r--services/mesh.c41
-rw-r--r--services/modstack.c78
-rw-r--r--services/modstack.h38
-rw-r--r--services/outside_network.c20
-rw-r--r--services/rpz.c41
-rw-r--r--sldns/parse.h6
-rw-r--r--sldns/parseutil.c9
-rw-r--r--sldns/rrdef.h5
-rw-r--r--sldns/wire2str.c6
-rw-r--r--smallapp/unbound-anchor.c10
-rw-r--r--smallapp/unbound-checkconf.c9
-rw-r--r--smallapp/unbound-control-setup.sh.in4
-rw-r--r--smallapp/unbound-control.c29
-rw-r--r--systemd.m414
-rw-r--r--testcode/fake_event.c10
-rwxr-xr-xtestcode/mini_tdir.sh11
-rw-r--r--testcode/petal.c2
-rw-r--r--testcode/readzone.c1
-rw-r--r--testcode/streamtcp.c4
-rw-r--r--testcode/testbound.c17
-rw-r--r--testcode/unitmain.c106
-rw-r--r--testcode/unitverify.c6
-rw-r--r--testcode/unitzonemd.c11
-rw-r--r--testdata/02-unittest.tdir/02-unittest.test98
-rw-r--r--testdata/07-confroot.tdir/07-confroot.pre1
-rw-r--r--testdata/09-unbound-control.tdir/09-unbound-control.conf11
-rw-r--r--testdata/09-unbound-control.tdir/09-unbound-control.pre1
-rw-r--r--testdata/09-unbound-control.tdir/09-unbound-control.test262
-rw-r--r--testdata/09-unbound-control.tdir/09-unbound-control.testns1
-rw-r--r--testdata/09-unbound-control.tdir/local_data3
-rw-r--r--testdata/09-unbound-control.tdir/local_data_remove3
-rw-r--r--testdata/09-unbound-control.tdir/local_zones3
-rw-r--r--testdata/09-unbound-control.tdir/local_zones_remove3
-rw-r--r--testdata/09-unbound-control.tdir/view_local_data4
-rw-r--r--testdata/09-unbound-control.tdir/view_local_data_remove4
-rw-r--r--testdata/acl_interface.tdir/acl_interface.conf46
-rw-r--r--testdata/acl_interface.tdir/acl_interface.pre15
-rw-r--r--testdata/acl_interface.tdir/acl_interface.test.scenario48
-rw-r--r--testdata/acl_interface.tdir/rpz-nx.zone3
-rw-r--r--testdata/acl_interface.tdir/rpz-one.zone3
-rw-r--r--testdata/acl_interface.tdir/rpz-two.zone3
-rw-r--r--testdata/cachedb_val_expired.crpl327
-rw-r--r--testdata/cookie_file.tdir/cookie_file.conf19
-rw-r--r--testdata/cookie_file.tdir/cookie_file.dsc16
-rw-r--r--testdata/cookie_file.tdir/cookie_file.post (renamed from testdata/remote-threaded.tdir/remote-threaded.post)9
-rw-r--r--testdata/cookie_file.tdir/cookie_file.pre24
-rw-r--r--testdata/cookie_file.tdir/cookie_file.test248
-rw-r--r--testdata/dnstap.tdir/dnstap.post2
-rw-r--r--testdata/dnstap.tdir/dnstap.test2
-rw-r--r--testdata/ede.tdir/ede-auth.conf1
-rw-r--r--testdata/ede.tdir/ede.conf16
-rw-r--r--testdata/ede.tdir/ede.test3
-rw-r--r--testdata/fwd_name_lookup.rpl152
-rw-r--r--testdata/ipset.tdir/ipset.pre5
-rw-r--r--testdata/remote-threaded.tdir/bad_control.key15
-rw-r--r--testdata/remote-threaded.tdir/bad_control.pem11
-rw-r--r--testdata/remote-threaded.tdir/bad_server.key15
-rw-r--r--testdata/remote-threaded.tdir/bad_server.pem11
-rw-r--r--testdata/remote-threaded.tdir/remote-threaded.conf25
-rw-r--r--testdata/remote-threaded.tdir/remote-threaded.dsc16
-rw-r--r--testdata/remote-threaded.tdir/remote-threaded.pre33
-rw-r--r--testdata/remote-threaded.tdir/remote-threaded.test310
-rw-r--r--testdata/remote-threaded.tdir/remote-threaded.testns22
-rw-r--r--testdata/remote-threaded.tdir/unbound_control.key39
-rw-r--r--testdata/remote-threaded.tdir/unbound_control.pem22
-rw-r--r--testdata/remote-threaded.tdir/unbound_server.key39
-rw-r--r--testdata/remote-threaded.tdir/unbound_server.pem22
-rw-r--r--testdata/root_anchor.tdir/root_anchor.pre2
-rw-r--r--testdata/root_hints.tdir/root_hints.pre2
-rw-r--r--testdata/rpz_cname_tag.rpl281
-rw-r--r--testdata/val_dname_twice.rpl226
-rw-r--r--testdata/val_failure_dnskey.rpl348
-rw-r--r--util/alloc.c21
-rw-r--r--util/config_file.c82
-rw-r--r--util/config_file.h4
-rw-r--r--util/configlexer.c6453
-rw-r--r--util/configlexer.lex2
-rw-r--r--util/configparser.c4701
-rw-r--r--util/configparser.h666
-rw-r--r--util/configparser.y133
-rw-r--r--util/data/dname.h2
-rw-r--r--util/data/msgparse.c50
-rw-r--r--util/data/msgparse.h5
-rw-r--r--util/edns.c186
-rw-r--r--util/edns.h85
-rw-r--r--util/fptr_wlist.c26
-rw-r--r--util/fptr_wlist.h16
-rw-r--r--util/module.h30
-rw-r--r--util/net_help.c56
-rw-r--r--util/net_help.h17
-rw-r--r--util/netevent.c21
-rw-r--r--util/netevent.h3
-rw-r--r--util/proxy_protocol.c1
-rw-r--r--util/siphash.c6
-rw-r--r--util/storage/lookup3.c227
-rw-r--r--validator/autotrust.c3
-rw-r--r--validator/val_nsec.c12
-rw-r--r--validator/val_nsec.h4
-rw-r--r--validator/val_nsec3.c9
-rw-r--r--validator/val_nsec3.h4
-rw-r--r--validator/val_secalgo.c8
-rw-r--r--validator/val_sigcrypt.c19
-rw-r--r--validator/val_sigcrypt.h12
-rw-r--r--validator/val_utils.c82
-rw-r--r--validator/val_utils.h26
-rw-r--r--validator/validator.c129
-rw-r--r--winrc/win_svc.c4
162 files changed, 12431 insertions, 7609 deletions
diff --git a/Makefile.in b/Makefile.in
index f30ca81a84f8..672435e01e9f 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -439,7 +439,8 @@ unbound-control-setup: smallapp/unbound-control-setup.sh
dnstap.lo dnstap.o: $(srcdir)/dnstap/dnstap.c config.h dnstap/dnstap_config.h \
dnstap/dnstap.pb-c.c dnstap/dnstap.pb-c.h $(srcdir)/dnstap/dnstap.h \
$(srcdir)/util/config_file.h $(srcdir)/util/log.h \
- $(srcdir)/util/netevent.h $(srcdir)/util/net_help.h
+ $(srcdir)/util/netevent.h $(srcdir)/util/net_help.h \
+ $(srcdir)/util/locks.h
dnstap/dnstap.pb-c.c dnstap/dnstap.pb-c.h: $(srcdir)/dnstap/dnstap.proto
@-if test ! -d dnstap; then $(INSTALL) -d dnstap; fi
@@ -1297,7 +1298,7 @@ remote.lo remote.o: $(srcdir)/daemon/remote.c config.h $(srcdir)/daemon/remote.h
$(srcdir)/validator/val_anchor.h $(srcdir)/iterator/iterator.h $(srcdir)/services/outbound_list.h \
$(srcdir)/iterator/iter_fwd.h $(srcdir)/iterator/iter_hints.h $(srcdir)/iterator/iter_delegpt.h \
$(srcdir)/services/outside_network.h $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/parseutil.h \
- $(srcdir)/sldns/wire2str.h
+ $(srcdir)/sldns/wire2str.h $(srcdir)/util/edns.h
stats.lo stats.o: $(srcdir)/daemon/stats.c config.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h \
$(srcdir)/libunbound/unbound.h $(srcdir)/daemon/worker.h $(srcdir)/libunbound/worker.h $(srcdir)/sldns/sbuffer.h \
$(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \
diff --git a/acx_python.m4 b/acx_python.m4
index c945d6c8989e..4ed298cf9ebd 100644
--- a/acx_python.m4
+++ b/acx_python.m4
@@ -9,7 +9,7 @@ AC_DEFUN([AC_PYTHON_DEVEL],[
AC_PATH_PROG([PYTHON],[python[$PYTHON_VERSION]])
if test -z "$PYTHON"; then
- AC_MSG_ERROR([Cannot find python$PYTHON_VERSION in your system path])
+ AC_MSG_ERROR([Cannot find 'python$PYTHON_VERSION' in your system path. You can use the environment variable 'PYTHON_VERSION=version_number' for an explicit version.])
PYTHON_VERSION=""
fi
diff --git a/cachedb/cachedb.c b/cachedb/cachedb.c
index 95ac28904693..7a07b9976967 100644
--- a/cachedb/cachedb.c
+++ b/cachedb/cachedb.c
@@ -322,30 +322,30 @@ error_response(struct module_qstate* qstate, int id, int rcode)
/**
* Hash the query name, type, class and dbacess-secret into lookup buffer.
- * @param qstate: query state with query info
- * and env->cfg with secret.
+ * @param qinfo: query info
+ * @param env: with env->cfg with secret.
* @param buf: returned buffer with hash to lookup
* @param len: length of the buffer.
*/
static void
-calc_hash(struct module_qstate* qstate, char* buf, size_t len)
+calc_hash(struct query_info* qinfo, struct module_env* env, char* buf,
+ size_t len)
{
uint8_t clear[1024];
size_t clen = 0;
uint8_t hash[CACHEDB_HASHSIZE/8];
const char* hex = "0123456789ABCDEF";
- const char* secret = qstate->env->cfg->cachedb_secret;
+ const char* secret = env->cfg->cachedb_secret;
size_t i;
/* copy the hash info into the clear buffer */
- if(clen + qstate->qinfo.qname_len < sizeof(clear)) {
- memmove(clear+clen, qstate->qinfo.qname,
- qstate->qinfo.qname_len);
- clen += qstate->qinfo.qname_len;
+ if(clen + qinfo->qname_len < sizeof(clear)) {
+ memmove(clear+clen, qinfo->qname, qinfo->qname_len);
+ clen += qinfo->qname_len;
}
if(clen + 4 < sizeof(clear)) {
- uint16_t t = htons(qstate->qinfo.qtype);
- uint16_t c = htons(qstate->qinfo.qclass);
+ uint16_t t = htons(qinfo->qtype);
+ uint16_t c = htons(qinfo->qclass);
memmove(clear+clen, &t, 2);
memmove(clear+clen+2, &c, 2);
clen += 4;
@@ -645,7 +645,7 @@ cachedb_extcache_lookup(struct module_qstate* qstate, struct cachedb_env* ie,
int* msg_expired)
{
char key[(CACHEDB_HASHSIZE/8)*2+1];
- calc_hash(qstate, key, sizeof(key));
+ calc_hash(&qstate->qinfo, qstate->env, key, sizeof(key));
/* call backend to fetch data for key into scratch buffer */
if( !(*ie->backend->lookup)(qstate->env, ie, key,
@@ -672,7 +672,7 @@ static void
cachedb_extcache_store(struct module_qstate* qstate, struct cachedb_env* ie)
{
char key[(CACHEDB_HASHSIZE/8)*2+1];
- calc_hash(qstate, key, sizeof(key));
+ calc_hash(&qstate->qinfo, qstate->env, key, sizeof(key));
/* prepare data in scratch buffer */
if(!prep_data(qstate, qstate->env->scratch_buffer))
@@ -745,6 +745,10 @@ cachedb_intcache_store(struct module_qstate* qstate, int msg_expired)
* going to be now-3 seconds. Making it expired
* in the cache. */
set_msg_ttl(qstate->return_msg, (time_t)-3);
+ /* The expired entry does not get checked by the validator
+ * and we need a validation value for it. */
+ if(qstate->env->cfg->cachedb_check_when_serve_expired)
+ qstate->return_msg->rep->security = sec_status_insecure;
}
(void)dns_cache_store(qstate->env, &qstate->qinfo,
qstate->return_msg->rep, 0, qstate->prefetch_leeway, 0,
@@ -979,7 +983,7 @@ cachedb_get_mem(struct module_env* env, int id)
*/
static struct module_func_block cachedb_block = {
"cachedb",
- &cachedb_init, &cachedb_deinit, &cachedb_operate,
+ NULL, NULL, &cachedb_init, &cachedb_deinit, &cachedb_operate,
&cachedb_inform_super, &cachedb_clear, &cachedb_get_mem
};
@@ -1004,20 +1008,25 @@ cachedb_is_enabled(struct module_stack* mods, struct module_env* env)
void cachedb_msg_remove(struct module_qstate* qstate)
{
+ cachedb_msg_remove_qinfo(qstate->env, &qstate->qinfo);
+}
+
+void cachedb_msg_remove_qinfo(struct module_env* env, struct query_info* qinfo)
+{
char key[(CACHEDB_HASHSIZE/8)*2+1];
- int id = modstack_find(qstate->env->modstack, "cachedb");
- struct cachedb_env* ie = (struct cachedb_env*)qstate->env->modinfo[id];
+ int id = modstack_find(env->modstack, "cachedb");
+ struct cachedb_env* ie = (struct cachedb_env*)env->modinfo[id];
- log_query_info(VERB_ALGO, "cachedb msg remove", &qstate->qinfo);
- calc_hash(qstate, key, sizeof(key));
- sldns_buffer_clear(qstate->env->scratch_buffer);
- sldns_buffer_write_u32(qstate->env->scratch_buffer, 0);
- sldns_buffer_flip(qstate->env->scratch_buffer);
+ log_query_info(VERB_ALGO, "cachedb msg remove", qinfo);
+ calc_hash(qinfo, env, key, sizeof(key));
+ sldns_buffer_clear(env->scratch_buffer);
+ sldns_buffer_write_u32(env->scratch_buffer, 0);
+ sldns_buffer_flip(env->scratch_buffer);
/* call backend */
- (*ie->backend->store)(qstate->env, ie, key,
- sldns_buffer_begin(qstate->env->scratch_buffer),
- sldns_buffer_limit(qstate->env->scratch_buffer),
+ (*ie->backend->store)(env, ie, key,
+ sldns_buffer_begin(env->scratch_buffer),
+ sldns_buffer_limit(env->scratch_buffer),
0);
}
#endif /* USE_CACHEDB */
diff --git a/cachedb/cachedb.h b/cachedb/cachedb.h
index 2da8b5c71feb..482c5db6c063 100644
--- a/cachedb/cachedb.h
+++ b/cachedb/cachedb.h
@@ -126,3 +126,11 @@ int cachedb_is_enabled(struct module_stack* mods, struct module_env* env);
* @param qstate: query state.
*/
void cachedb_msg_remove(struct module_qstate* qstate);
+
+/**
+ * Remove message from the cachedb cache, by query info.
+ * @param env: module environment to look up cachedb state.
+ * @param qinfo: the message to remove.
+ */
+void cachedb_msg_remove_qinfo(struct module_env* env,
+ struct query_info* qinfo);
diff --git a/config.guess b/config.guess
index f6d217a49f8f..48a684601bd2 100755
--- a/config.guess
+++ b/config.guess
@@ -4,7 +4,7 @@
# shellcheck disable=SC2006,SC2268 # see below for rationale
-timestamp='2024-01-01'
+timestamp='2024-07-27'
# 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
@@ -123,7 +123,7 @@ set_cc_for_build() {
dummy=$tmp/dummy
case ${CC_FOR_BUILD-},${HOST_CC-},${CC-} in
,,) echo "int x;" > "$dummy.c"
- for driver in cc gcc c89 c99 ; do
+ for driver in cc gcc c17 c99 c89 ; do
if ($driver -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then
CC_FOR_BUILD=$driver
break
@@ -634,7 +634,8 @@ EOF
sed 's/^ //' << EOF > "$dummy.c"
#include <sys/systemcfg.h>
- main()
+ int
+ main ()
{
if (!__power_pc())
exit(1);
@@ -718,7 +719,8 @@ EOF
#include <stdlib.h>
#include <unistd.h>
- int main ()
+ int
+ main ()
{
#if defined(_SC_KERNEL_BITS)
long bits = sysconf(_SC_KERNEL_BITS);
@@ -1621,6 +1623,7 @@ cat > "$dummy.c" <<EOF
#endif
#endif
#endif
+int
main ()
{
#if defined (sony)
diff --git a/config.h.in b/config.h.in
index bc39544c4056..099206025a33 100644
--- a/config.h.in
+++ b/config.h.in
@@ -1,5 +1,8 @@
/* config.h.in. Generated from configure.ac by autoheader. */
+/* apply the fallthrough attribute. */
+#undef ATTR_FALLTHROUGH
+
/* apply the noreturn attribute to a function that exits the program */
#undef ATTR_NORETURN
@@ -57,6 +60,9 @@
/* Define to 1 if you have the <arpa/inet.h> header file. */
#undef HAVE_ARPA_INET_H
+/* Whether the C compiler accepts the "fallthrough" attribute */
+#undef HAVE_ATTR_FALLTHROUGH
+
/* Whether the C compiler accepts the "format" attribute */
#undef HAVE_ATTR_FORMAT
@@ -406,6 +412,9 @@
/* Define to 1 if you have the <net/if.h> header file. */
#undef HAVE_NET_IF_H
+/* Define to 1 if you have the <net/pfvar.h> header file. */
+#undef HAVE_NET_PFVAR_H
+
/* Define this to use nghttp2 client. */
#undef HAVE_NGHTTP2
@@ -566,6 +575,9 @@
function. */
#undef HAVE_SSL_CTX_SET_TLSEXT_TICKET_KEY_EVP_CB
+/* Define to 1 if you have the `SSL_CTX_set_tmp_ecdh' function. */
+#undef HAVE_SSL_CTX_SET_TMP_ECDH
+
/* Define to 1 if you have the `SSL_get0_alpn_selected' function. */
#undef HAVE_SSL_GET0_ALPN_SELECTED
@@ -1484,6 +1496,7 @@ struct sockaddr_storage;
# define calloc(n,s) unbound_stat_calloc_log(n, s, __FILE__, __LINE__, __func__)
# define free(p) unbound_stat_free_log(p, __FILE__, __LINE__, __func__)
# define realloc(p,s) unbound_stat_realloc_log(p, s, __FILE__, __LINE__, __func__)
+# define strdup(s) unbound_stat_strdup_log(s, __FILE__, __LINE__, __func__)
void *unbound_stat_malloc(size_t size);
void *unbound_stat_calloc(size_t nmemb, size_t size);
void unbound_stat_free(void *ptr);
@@ -1496,6 +1509,8 @@ void unbound_stat_free_log(void *ptr, const char* file, int line,
const char* func);
void *unbound_stat_realloc_log(void *ptr, size_t size, const char* file,
int line, const char* func);
+char *unbound_stat_strdup_log(const char *s, const char* file, int line,
+ const char* func);
#elif defined(UNBOUND_ALLOC_LITE)
# include "util/alloc.h"
#endif /* UNBOUND_ALLOC_LITE and UNBOUND_ALLOC_STATS */
diff --git a/config.sub b/config.sub
index 2c6a07ab3c34..4aaae46f6f74 100755
--- a/config.sub
+++ b/config.sub
@@ -2,9 +2,9 @@
# Configuration validation subroutine script.
# Copyright 1992-2024 Free Software Foundation, Inc.
-# shellcheck disable=SC2006,SC2268 # see below for rationale
+# shellcheck disable=SC2006,SC2268,SC2162 # see below for rationale
-timestamp='2024-01-01'
+timestamp='2024-05-27'
# 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
@@ -120,7 +120,6 @@ case $# in
esac
# Split fields of configuration type
-# shellcheck disable=SC2162
saved_IFS=$IFS
IFS="-" read field1 field2 field3 field4 <<EOF
$1
@@ -142,10 +141,20 @@ case $1 in
# parts
maybe_os=$field2-$field3
case $maybe_os in
- nto-qnx* | linux-* | uclinux-uclibc* \
- | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* \
- | netbsd*-eabi* | kopensolaris*-gnu* | cloudabi*-eabi* \
- | storm-chaos* | os2-emx* | rtmk-nova* | managarm-* \
+ cloudabi*-eabi* \
+ | kfreebsd*-gnu* \
+ | knetbsd*-gnu* \
+ | kopensolaris*-gnu* \
+ | linux-* \
+ | managarm-* \
+ | netbsd*-eabi* \
+ | netbsd*-gnu* \
+ | nto-qnx* \
+ | os2-emx* \
+ | rtmk-nova* \
+ | storm-chaos* \
+ | uclinux-gnu* \
+ | uclinux-uclibc* \
| windows-* )
basic_machine=$field1
basic_os=$maybe_os
@@ -161,8 +170,12 @@ case $1 in
esac
;;
*-*)
- # A lone config we happen to match not fitting any pattern
case $field1-$field2 in
+ # Shorthands that happen to contain a single dash
+ convex-c[12] | convex-c3[248])
+ basic_machine=$field2-convex
+ basic_os=
+ ;;
decstation-3100)
basic_machine=mips-dec
basic_os=
@@ -170,28 +183,88 @@ case $1 in
*-*)
# Second component is usually, but not always the OS
case $field2 in
- # Prevent following clause from handling this valid os
+ # Do not treat sunos as a manufacturer
sun*os*)
basic_machine=$field1
basic_os=$field2
;;
- zephyr*)
- basic_machine=$field1-unknown
- basic_os=$field2
- ;;
# Manufacturers
- dec* | mips* | sequent* | encore* | pc533* | sgi* | sony* \
- | att* | 7300* | 3300* | delta* | motorola* | sun[234]* \
- | unicom* | ibm* | next | hp | isi* | apollo | altos* \
- | convergent* | ncr* | news | 32* | 3600* | 3100* \
- | hitachi* | c[123]* | convex* | sun | crds | omron* | dg \
- | ultra | tti* | harris | dolphin | highlevel | gould \
- | cbm | ns | masscomp | apple | axis | knuth | cray \
- | microblaze* | sim | cisco \
- | oki | wec | wrs | winbond)
+ 3100* \
+ | 32* \
+ | 3300* \
+ | 3600* \
+ | 7300* \
+ | acorn \
+ | altos* \
+ | apollo \
+ | apple \
+ | atari \
+ | att* \
+ | axis \
+ | be \
+ | bull \
+ | cbm \
+ | ccur \
+ | cisco \
+ | commodore \
+ | convergent* \
+ | convex* \
+ | cray \
+ | crds \
+ | dec* \
+ | delta* \
+ | dg \
+ | digital \
+ | dolphin \
+ | encore* \
+ | gould \
+ | harris \
+ | highlevel \
+ | hitachi* \
+ | hp \
+ | ibm* \
+ | intergraph \
+ | isi* \
+ | knuth \
+ | masscomp \
+ | microblaze* \
+ | mips* \
+ | motorola* \
+ | ncr* \
+ | news \
+ | next \
+ | ns \
+ | oki \
+ | omron* \
+ | pc533* \
+ | rebel \
+ | rom68k \
+ | rombug \
+ | semi \
+ | sequent* \
+ | siemens \
+ | sgi* \
+ | siemens \
+ | sim \
+ | sni \
+ | sony* \
+ | stratus \
+ | sun \
+ | sun[234]* \
+ | tektronix \
+ | tti* \
+ | ultra \
+ | unicom* \
+ | wec \
+ | winbond \
+ | wrs)
basic_machine=$field1-$field2
basic_os=
;;
+ zephyr*)
+ basic_machine=$field1-unknown
+ basic_os=$field2
+ ;;
*)
basic_machine=$field1
basic_os=$field2
@@ -272,26 +345,6 @@ case $1 in
basic_machine=arm-unknown
basic_os=cegcc
;;
- convex-c1)
- basic_machine=c1-convex
- basic_os=bsd
- ;;
- convex-c2)
- basic_machine=c2-convex
- basic_os=bsd
- ;;
- convex-c32)
- basic_machine=c32-convex
- basic_os=bsd
- ;;
- convex-c34)
- basic_machine=c34-convex
- basic_os=bsd
- ;;
- convex-c38)
- basic_machine=c38-convex
- basic_os=bsd
- ;;
cray)
basic_machine=j90-cray
basic_os=unicos
@@ -714,15 +767,26 @@ case $basic_machine in
vendor=dec
basic_os=tops20
;;
- delta | 3300 | motorola-3300 | motorola-delta \
- | 3300-motorola | delta-motorola)
+ delta | 3300 | delta-motorola | 3300-motorola | motorola-delta | motorola-3300)
cpu=m68k
vendor=motorola
;;
- dpx2*)
+ # This used to be dpx2*, but that gets the RS6000-based
+ # DPX/20 and the x86-based DPX/2-100 wrong. See
+ # https://oldskool.silicium.org/stations/bull_dpx20.htm
+ # https://www.feb-patrimoine.com/english/bull_dpx2.htm
+ # https://www.feb-patrimoine.com/english/unix_and_bull.htm
+ dpx2 | dpx2[23]00 | dpx2[23]xx)
cpu=m68k
vendor=bull
- basic_os=sysv3
+ ;;
+ dpx2100 | dpx21xx)
+ cpu=i386
+ vendor=bull
+ ;;
+ dpx20)
+ cpu=rs6000
+ vendor=bull
;;
encore | umax | mmax)
cpu=ns32k
@@ -837,18 +901,6 @@ case $basic_machine in
next | m*-next)
cpu=m68k
vendor=next
- case $basic_os in
- openstep*)
- ;;
- nextstep*)
- ;;
- ns2*)
- basic_os=nextstep2
- ;;
- *)
- basic_os=nextstep3
- ;;
- esac
;;
np1)
cpu=np1
@@ -937,7 +989,6 @@ case $basic_machine in
;;
*-*)
- # shellcheck disable=SC2162
saved_IFS=$IFS
IFS="-" read cpu vendor <<EOF
$basic_machine
@@ -972,15 +1023,19 @@ unset -v basic_machine
# Decode basic machines in the full and proper CPU-Company form.
case $cpu-$vendor in
- # Here we handle the default manufacturer of certain CPU types in canonical form. It is in
- # some cases the only manufacturer, in others, it is the most popular.
+ # Here we handle the default manufacturer of certain CPU types in canonical form.
+ # It is in some cases the only manufacturer, in others, it is the most popular.
+ c[12]-convex | c[12]-unknown | c3[248]-convex | c3[248]-unknown)
+ vendor=convex
+ basic_os=${basic_os:-bsd}
+ ;;
craynv-unknown)
vendor=cray
basic_os=${basic_os:-unicosmp}
;;
c90-unknown | c90-cray)
vendor=cray
- basic_os=${Basic_os:-unicos}
+ basic_os=${basic_os:-unicos}
;;
fx80-unknown)
vendor=alliant
@@ -1026,11 +1081,29 @@ case $cpu-$vendor in
vendor=alt
basic_os=${basic_os:-linux-gnueabihf}
;;
- dpx20-unknown | dpx20-bull)
- cpu=rs6000
- vendor=bull
+
+ # Normalized CPU+vendor pairs that imply an OS, if not otherwise specified
+ m68k-isi)
+ basic_os=${basic_os:-sysv}
+ ;;
+ m68k-sony)
+ basic_os=${basic_os:-newsos}
+ ;;
+ m68k-tektronix)
+ basic_os=${basic_os:-bsd}
+ ;;
+ m88k-harris)
+ basic_os=${basic_os:-sysv3}
+ ;;
+ i386-bull | m68k-bull)
+ basic_os=${basic_os:-sysv3}
+ ;;
+ rs6000-bull)
basic_os=${basic_os:-bosx}
;;
+ mips-sni)
+ basic_os=${basic_os:-sysv4}
+ ;;
# Here we normalize CPU types irrespective of the vendor
amd64-*)
@@ -1038,7 +1111,7 @@ case $cpu-$vendor in
;;
blackfin-*)
cpu=bfin
- basic_os=linux
+ basic_os=${basic_os:-linux}
;;
c54x-*)
cpu=tic54x
@@ -1061,7 +1134,7 @@ case $cpu-$vendor in
;;
m68knommu-*)
cpu=m68k
- basic_os=linux
+ basic_os=${basic_os:-linux}
;;
m9s12z-* | m68hcs12z-* | hcs12z-* | s12z-*)
cpu=s12z
@@ -1071,7 +1144,7 @@ case $cpu-$vendor in
;;
parisc-*)
cpu=hppa
- basic_os=linux
+ basic_os=${basic_os:-linux}
;;
pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
cpu=i586
@@ -1085,9 +1158,6 @@ case $cpu-$vendor in
pentium4-*)
cpu=i786
;;
- pc98-*)
- cpu=i386
- ;;
ppc-* | ppcbe-*)
cpu=powerpc
;;
@@ -1121,9 +1191,6 @@ case $cpu-$vendor in
tx39el-*)
cpu=mipstx39el
;;
- x64-*)
- cpu=x86_64
- ;;
xscale-* | xscalee[bl]-*)
cpu=`echo "$cpu" | sed 's/^xscale/arm/'`
;;
@@ -1179,90 +1246,227 @@ case $cpu-$vendor in
# Recognize the canonical CPU types that are allowed with any
# company name.
case $cpu in
- 1750a | 580 \
+ 1750a \
+ | 580 \
+ | [cjt]90 \
| a29k \
- | aarch64 | aarch64_be | aarch64c | arm64ec \
+ | aarch64 \
+ | aarch64_be \
+ | aarch64c \
| abacus \
- | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] \
- | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] \
- | alphapca5[67] | alpha64pca5[67] \
+ | alpha \
+ | alpha64 \
+ | alpha64ev56 \
+ | alpha64ev6[78] \
+ | alpha64ev[4-8] \
+ | alpha64pca5[67] \
+ | alphaev56 \
+ | alphaev6[78] \
+ | alphaev[4-8] \
+ | alphapca5[67] \
| am33_2.0 \
| amdgcn \
- | arc | arceb | arc32 | arc64 \
- | arm | arm[lb]e | arme[lb] | armv* \
- | avr | avr32 \
+ | arc \
+ | arc32 \
+ | arc64 \
+ | arceb \
+ | arm \
+ | arm64e \
+ | arm64ec \
+ | arm[lb]e \
+ | arme[lb] \
+ | armv* \
| asmjs \
+ | avr \
+ | avr32 \
| ba \
- | be32 | be64 \
- | bfin | bpf | bs2000 \
- | c[123]* | c30 | [cjt]90 | c4x \
- | c8051 | clipper | craynv | csky | cydra \
- | d10v | d30v | dlx | dsp16xx \
- | e2k | elxsi | epiphany \
- | f30[01] | f700 | fido | fr30 | frv | ft32 | fx80 \
- | javascript \
- | h8300 | h8500 \
- | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+ | be32 \
+ | be64 \
+ | bfin \
+ | bpf \
+ | bs2000 \
+ | c30 \
+ | c4x \
+ | c8051 \
+ | c[123]* \
+ | clipper \
+ | craynv \
+ | csky \
+ | cydra \
+ | d10v \
+ | d30v \
+ | dlx \
+ | dsp16xx \
+ | e2k \
+ | elxsi \
+ | epiphany \
+ | f30[01] \
+ | f700 \
+ | fido \
+ | fr30 \
+ | frv \
+ | ft32 \
+ | fx80 \
+ | h8300 \
+ | h8500 \
| hexagon \
- | i370 | i*86 | i860 | i960 | ia16 | ia64 \
- | ip2k | iq2000 \
+ | hppa \
+ | hppa1.[01] \
+ | hppa2.0 \
+ | hppa2.0[nw] \
+ | hppa64 \
+ | i*86 \
+ | i370 \
+ | i860 \
+ | i960 \
+ | ia16 \
+ | ia64 \
+ | ip2k \
+ | iq2000 \
+ | javascript \
| k1om \
| kvx \
- | le32 | le64 \
+ | le32 \
+ | le64 \
| lm32 \
- | loongarch32 | loongarch64 \
- | m32c | m32r | m32rle \
- | m5200 | m68000 | m680[012346]0 | m68360 | m683?2 | m68k \
- | m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x \
- | m88110 | m88k | maxq | mb | mcore | mep | metag \
- | microblaze | microblazeel \
+ | loongarch32 \
+ | loongarch64 \
+ | m32c \
+ | m32r \
+ | m32rle \
+ | m5200 \
+ | m68000 \
+ | m680[012346]0 \
+ | m6811 \
+ | m6812 \
+ | m68360 \
+ | m683?2 \
+ | m68hc11 \
+ | m68hc12 \
+ | m68hcs12x \
+ | m68k \
+ | m88110 \
+ | m88k \
+ | maxq \
+ | mb \
+ | mcore \
+ | mep \
+ | metag \
+ | microblaze \
+ | microblazeel \
| mips* \
| mmix \
- | mn10200 | mn10300 \
+ | mn10200 \
+ | mn10300 \
| moxie \
- | mt \
| msp430 \
+ | mt \
| nanomips* \
- | nds32 | nds32le | nds32be \
+ | nds32 \
+ | nds32be \
+ | nds32le \
| nfp \
- | nios | nios2 | nios2eb | nios2el \
- | none | np1 | ns16k | ns32k | nvptx \
+ | nios \
+ | nios2 \
+ | nios2eb \
+ | nios2el \
+ | none \
+ | np1 \
+ | ns16k \
+ | ns32k \
+ | nvptx \
| open8 \
| or1k* \
| or32 \
| orion \
+ | pdp10 \
+ | pdp11 \
| picochip \
- | pdp10 | pdp11 | pj | pjl | pn | power \
- | powerpc | powerpc64 | powerpc64le | powerpcle | powerpcspe \
+ | pj \
+ | pjl \
+ | pn \
+ | power \
+ | powerpc \
+ | powerpc64 \
+ | powerpc64le \
+ | powerpcle \
+ | powerpcspe \
| pru \
| pyramid \
- | riscv | riscv32 | riscv32be | riscv64 | riscv64be \
- | rl78 | romp | rs6000 | rx \
- | s390 | s390x \
+ | riscv \
+ | riscv32 \
+ | riscv32be \
+ | riscv64 \
+ | riscv64be \
+ | rl78 \
+ | romp \
+ | rs6000 \
+ | rx \
+ | s390 \
+ | s390x \
| score \
- | sh | shl \
- | sh[1234] | sh[24]a | sh[24]ae[lb] | sh[23]e | she[lb] | sh[lb]e \
- | sh[1234]e[lb] | sh[12345][lb]e | sh[23]ele | sh64 | sh64le \
- | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet \
+ | sh \
+ | sh64 \
+ | sh64le \
+ | sh[12345][lb]e \
+ | sh[1234] \
+ | sh[1234]e[lb] \
+ | sh[23]e \
+ | sh[23]ele \
+ | sh[24]a \
+ | sh[24]ae[lb] \
+ | sh[lb]e \
+ | she[lb] \
+ | shl \
+ | sparc \
+ | sparc64 \
+ | sparc64b \
+ | sparc64v \
+ | sparc86x \
+ | sparclet \
| sparclite \
- | sparcv8 | sparcv9 | sparcv9b | sparcv9v | sv1 | sx* \
+ | sparcv8 \
+ | sparcv9 \
+ | sparcv9b \
+ | sparcv9v \
| spu \
+ | sv1 \
+ | sx* \
| tahoe \
| thumbv7* \
- | tic30 | tic4x | tic54x | tic55x | tic6x | tic80 \
+ | tic30 \
+ | tic4x \
+ | tic54x \
+ | tic55x \
+ | tic6x \
+ | tic80 \
| tron \
| ubicom32 \
- | v70 | v850 | v850e | v850e1 | v850es | v850e2 | v850e2v3 \
+ | v70 \
+ | v810 \
+ | v850 \
+ | v850e \
+ | v850e1 \
+ | v850e2 \
+ | v850e2v3 \
+ | v850es \
| vax \
| vc4 \
| visium \
| w65 \
- | wasm32 | wasm64 \
+ | wasm32 \
+ | wasm64 \
| we32k \
- | x86 | x86_64 | xc16x | xgate | xps100 \
- | xstormy16 | xtensa* \
+ | x86 \
+ | x86_64 \
+ | xc16x \
+ | xgate \
+ | xps100 \
+ | xstormy16 \
+ | xtensa* \
| ymp \
- | z8k | z80)
+ | z80 \
+ | z8k)
;;
*)
@@ -1307,7 +1511,6 @@ case $basic_os in
os=`echo "$basic_os" | sed -e 's|nto-qnx|qnx|'`
;;
*-*)
- # shellcheck disable=SC2162
saved_IFS=$IFS
IFS="-" read kernel os <<EOF
$basic_os
@@ -1354,6 +1557,23 @@ case $os in
unixware*)
os=sysv4.2uw
;;
+ # The marketing names for NeXT's operating systems were
+ # NeXTSTEP, NeXTSTEP 2, OpenSTEP 3, OpenSTEP 4. 'openstep' is
+ # mapped to 'openstep3', but 'openstep1' and 'openstep2' are
+ # mapped to 'nextstep' and 'nextstep2', consistent with the
+ # treatment of SunOS/Solaris.
+ ns | ns1 | nextstep | nextstep1 | openstep1)
+ os=nextstep
+ ;;
+ ns2 | nextstep2 | openstep2)
+ os=nextstep2
+ ;;
+ ns3 | nextstep3 | openstep | openstep3)
+ os=openstep3
+ ;;
+ ns4 | nextstep4 | openstep4)
+ os=openstep4
+ ;;
# es1800 is here to avoid being matched by es* (a different OS)
es1800*)
os=ose
@@ -1424,6 +1644,7 @@ case $os in
;;
utek*)
os=bsd
+ vendor=`echo "$vendor" | sed -e 's|^unknown$|tektronix|'`
;;
dynix*)
os=bsd
@@ -1440,21 +1661,25 @@ case $os in
386bsd)
os=bsd
;;
- ctix* | uts*)
+ ctix*)
os=sysv
+ vendor=`echo "$vendor" | sed -e 's|^unknown$|convergent|'`
;;
- nova*)
- os=rtmk-nova
+ uts*)
+ os=sysv
;;
- ns2)
- os=nextstep2
+ nova*)
+ kernel=rtmk
+ os=nova
;;
# Preserve the version number of sinix5.
sinix5.*)
os=`echo "$os" | sed -e 's|sinix|sysv|'`
+ vendor=`echo "$vendor" | sed -e 's|^unknown$|sni|'`
;;
sinix*)
os=sysv4
+ vendor=`echo "$vendor" | sed -e 's|^unknown$|sni|'`
;;
tpf*)
os=tpf
@@ -1595,6 +1820,14 @@ case $cpu-$vendor in
os=
obj=elf
;;
+ # The -sgi and -siemens entries must be before the mips- entry
+ # or we get the wrong os.
+ *-sgi)
+ os=irix
+ ;;
+ *-siemens)
+ os=sysv4
+ ;;
mips*-cisco)
os=
obj=elf
@@ -1607,7 +1840,8 @@ case $cpu-$vendor in
os=
obj=coff
;;
- *-tti) # must be before sparc entry or we get the wrong os.
+ # This must be before the sparc-* entry or we get the wrong os.
+ *-tti)
os=sysv3
;;
sparc-* | *-sun)
@@ -1639,7 +1873,7 @@ case $cpu-$vendor in
os=hpux
;;
*-hitachi)
- os=hiux
+ os=hiuxwe2
;;
i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
os=sysv
@@ -1683,12 +1917,6 @@ case $cpu-$vendor in
*-encore)
os=bsd
;;
- *-sgi)
- os=irix
- ;;
- *-siemens)
- os=sysv4
- ;;
*-masscomp)
os=rtu
;;
@@ -1735,40 +1963,193 @@ case $os in
ghcjs)
;;
# Now accept the basic system types.
- # The portable systems comes first.
# Each alternative MUST end in a * to match a version number.
- gnu* | android* | bsd* | mach* | minix* | genix* | ultrix* | irix* \
- | *vms* | esix* | aix* | cnk* | sunos | sunos[34]* \
- | hpux* | unos* | osf* | luna* | dgux* | auroraux* | solaris* \
- | sym* | plan9* | psp* | sim* | xray* | os68k* | v88r* \
- | hiux* | abug | nacl* | netware* | windows* \
- | os9* | macos* | osx* | ios* | tvos* | watchos* \
- | mpw* | magic* | mmixware* | mon960* | lnews* \
- | amigaos* | amigados* | msdos* | newsos* | unicos* | aof* \
- | aos* | aros* | cloudabi* | sortix* | twizzler* \
- | nindy* | vxsim* | vxworks* | ebmon* | hms* | mvs* \
- | clix* | riscos* | uniplus* | iris* | isc* | rtu* | xenix* \
- | mirbsd* | netbsd* | dicos* | openedition* | ose* \
- | bitrig* | openbsd* | secbsd* | solidbsd* | libertybsd* | os108* \
- | ekkobsd* | freebsd* | riscix* | lynxos* | os400* \
- | bosx* | nextstep* | cxux* | oabi* \
- | ptx* | ecoff* | winnt* | domain* | vsta* \
- | udi* | lites* | ieee* | go32* | aux* | hcos* \
- | chorusrdb* | cegcc* | glidix* | serenity* \
- | cygwin* | msys* | moss* | proelf* | rtems* \
- | midipix* | mingw32* | mingw64* | mint* \
- | uxpv* | beos* | mpeix* | udk* | moxiebox* \
- | interix* | uwin* | mks* | rhapsody* | darwin* \
- | openstep* | oskit* | conix* | pw32* | nonstopux* \
- | storm-chaos* | tops10* | tenex* | tops20* | its* \
- | os2* | vos* | palmos* | uclinux* | nucleus* | morphos* \
- | scout* | superux* | sysv* | rtmk* | tpf* | windiss* \
- | powermax* | dnix* | nx6 | nx7 | sei* | dragonfly* \
- | skyos* | haiku* | rdos* | toppers* | drops* | es* \
- | onefs* | tirtos* | phoenix* | fuchsia* | redox* | bme* \
- | midnightbsd* | amdhsa* | unleashed* | emscripten* | wasi* \
- | nsk* | powerunix* | genode* | zvmoe* | qnx* | emx* | zephyr* \
- | fiwix* | mlibc* | cos* | mbr* | ironclad* )
+ abug \
+ | aix* \
+ | amdhsa* \
+ | amigados* \
+ | amigaos* \
+ | android* \
+ | aof* \
+ | aos* \
+ | aros* \
+ | atheos* \
+ | auroraux* \
+ | aux* \
+ | beos* \
+ | bitrig* \
+ | bme* \
+ | bosx* \
+ | bsd* \
+ | cegcc* \
+ | chorusos* \
+ | chorusrdb* \
+ | clix* \
+ | cloudabi* \
+ | cnk* \
+ | conix* \
+ | cos* \
+ | cxux* \
+ | cygwin* \
+ | darwin* \
+ | dgux* \
+ | dicos* \
+ | dnix* \
+ | domain* \
+ | dragonfly* \
+ | drops* \
+ | ebmon* \
+ | ecoff* \
+ | ekkobsd* \
+ | emscripten* \
+ | emx* \
+ | es* \
+ | fiwix* \
+ | freebsd* \
+ | fuchsia* \
+ | genix* \
+ | genode* \
+ | glidix* \
+ | gnu* \
+ | go32* \
+ | haiku* \
+ | hcos* \
+ | hiux* \
+ | hms* \
+ | hpux* \
+ | ieee* \
+ | interix* \
+ | ios* \
+ | iris* \
+ | irix* \
+ | ironclad* \
+ | isc* \
+ | its* \
+ | l4re* \
+ | libertybsd* \
+ | lites* \
+ | lnews* \
+ | luna* \
+ | lynxos* \
+ | mach* \
+ | macos* \
+ | magic* \
+ | mbr* \
+ | midipix* \
+ | midnightbsd* \
+ | mingw32* \
+ | mingw64* \
+ | minix* \
+ | mint* \
+ | mirbsd* \
+ | mks* \
+ | mlibc* \
+ | mmixware* \
+ | mon960* \
+ | morphos* \
+ | moss* \
+ | moxiebox* \
+ | mpeix* \
+ | mpw* \
+ | msdos* \
+ | msys* \
+ | mvs* \
+ | nacl* \
+ | netbsd* \
+ | netware* \
+ | newsos* \
+ | nextstep* \
+ | nindy* \
+ | nonstopux* \
+ | nova* \
+ | nsk* \
+ | nucleus* \
+ | nx6 \
+ | nx7 \
+ | oabi* \
+ | ohos* \
+ | onefs* \
+ | openbsd* \
+ | openedition* \
+ | openstep* \
+ | os108* \
+ | os2* \
+ | os400* \
+ | os68k* \
+ | os9* \
+ | ose* \
+ | osf* \
+ | oskit* \
+ | osx* \
+ | palmos* \
+ | phoenix* \
+ | plan9* \
+ | powermax* \
+ | powerunix* \
+ | proelf* \
+ | psos* \
+ | psp* \
+ | ptx* \
+ | pw32* \
+ | qnx* \
+ | rdos* \
+ | redox* \
+ | rhapsody* \
+ | riscix* \
+ | riscos* \
+ | rtems* \
+ | rtmk* \
+ | rtu* \
+ | scout* \
+ | secbsd* \
+ | sei* \
+ | serenity* \
+ | sim* \
+ | skyos* \
+ | solaris* \
+ | solidbsd* \
+ | sortix* \
+ | storm-chaos* \
+ | sunos \
+ | sunos[34]* \
+ | superux* \
+ | syllable* \
+ | sym* \
+ | sysv* \
+ | tenex* \
+ | tirtos* \
+ | toppers* \
+ | tops10* \
+ | tops20* \
+ | tpf* \
+ | tvos* \
+ | twizzler* \
+ | uclinux* \
+ | udi* \
+ | udk* \
+ | ultrix* \
+ | unicos* \
+ | uniplus* \
+ | unleashed* \
+ | unos* \
+ | uwin* \
+ | uxpv* \
+ | v88r* \
+ |*vms* \
+ | vos* \
+ | vsta* \
+ | vxsim* \
+ | vxworks* \
+ | wasi* \
+ | watchos* \
+ | wince* \
+ | windiss* \
+ | windows* \
+ | winnt* \
+ | xenix* \
+ | xray* \
+ | zephyr* \
+ | zvmoe* )
;;
# This one is extra strict with allowed versions
sco3.2v2 | sco3.2v[4-9]* | sco5v6*)
@@ -1829,9 +2210,9 @@ esac
case $kernel-$os-$obj in
linux-gnu*- | linux-android*- | linux-dietlibc*- | linux-llvm*- \
| linux-mlibc*- | linux-musl*- | linux-newlib*- \
- | linux-relibc*- | linux-uclibc*- )
+ | linux-relibc*- | linux-uclibc*- | linux-ohos*- )
;;
- uclinux-uclibc*- )
+ uclinux-uclibc*- | uclinux-gnu*- )
;;
managarm-mlibc*- | managarm-kernel*- )
;;
@@ -1856,7 +2237,7 @@ case $kernel-$os-$obj in
echo "Invalid configuration '$1': '$os' needs 'windows'." 1>&2
exit 1
;;
- kfreebsd*-gnu*- | kopensolaris*-gnu*-)
+ kfreebsd*-gnu*- | knetbsd*-gnu*- | netbsd*-gnu*- | kopensolaris*-gnu*-)
;;
vxworks-simlinux- | vxworks-simwindows- | vxworks-spe-)
;;
@@ -1864,6 +2245,8 @@ case $kernel-$os-$obj in
;;
os2-emx-)
;;
+ rtmk-nova-)
+ ;;
*-eabi*- | *-gnueabi*-)
;;
none--*)
@@ -1890,7 +2273,7 @@ case $vendor in
*-riscix*)
vendor=acorn
;;
- *-sunos*)
+ *-sunos* | *-solaris*)
vendor=sun
;;
*-cnk* | *-aix*)
diff --git a/configure b/configure
index d4a394eb9540..63051eca812d 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.71 for unbound 1.20.0.
+# Generated by GNU Autoconf 2.71 for unbound 1.21.0.
#
# Report bugs to <unbound-bugs@nlnetlabs.nl or https://github.com/NLnetLabs/unbound/issues>.
#
@@ -622,8 +622,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='unbound'
PACKAGE_TARNAME='unbound'
-PACKAGE_VERSION='1.20.0'
-PACKAGE_STRING='unbound 1.20.0'
+PACKAGE_VERSION='1.21.0'
+PACKAGE_STRING='unbound 1.21.0'
PACKAGE_BUGREPORT='unbound-bugs@nlnetlabs.nl or https://github.com/NLnetLabs/unbound/issues'
PACKAGE_URL=''
@@ -1508,7 +1508,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.20.0 to adapt to many kinds of systems.
+\`configure' configures unbound 1.21.0 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1574,7 +1574,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of unbound 1.20.0:";;
+ short | recursive ) echo "Configuration of unbound 1.21.0:";;
esac
cat <<\_ACEOF
@@ -1596,7 +1596,8 @@ Optional Features:
--disable-libtool-lock avoid locking (might break parallel builds)
--disable-rpath disable hardcoded rpath (default=enabled)
--disable-largefile omit support for large files
- --enable-systemd compile with systemd support
+ --enable-systemd compile with systemd support (requires libsystemd,
+ pkg-config)
--enable-alloc-checks enable to memory allocation statistics, for debug
purposes
--enable-alloc-lite enable for lightweight alloc assertions, for debug
@@ -1821,7 +1822,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-unbound configure 1.20.0
+unbound configure 1.21.0
generated by GNU Autoconf 2.71
Copyright (C) 2021 Free Software Foundation, Inc.
@@ -2478,7 +2479,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.20.0, which was
+It was created by unbound $as_me 1.21.0, which was
generated by GNU Autoconf 2.71. Invocation command line was
$ $0$ac_configure_args_raw
@@ -3240,13 +3241,13 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
UNBOUND_VERSION_MAJOR=1
-UNBOUND_VERSION_MINOR=20
+UNBOUND_VERSION_MINOR=21
UNBOUND_VERSION_MICRO=0
LIBUNBOUND_CURRENT=9
-LIBUNBOUND_REVISION=27
+LIBUNBOUND_REVISION=28
LIBUNBOUND_AGE=1
# 1.0.0 had 0:12:0
# 1.0.1 had 0:13:0
@@ -3341,6 +3342,7 @@ LIBUNBOUND_AGE=1
# 1.19.2 had 9:25:1
# 1.19.3 had 9:26:1
# 1.20.0 had 9:27:1
+# 1.21.0 had 9:28:1
# Current -- the number of the binary API that we're implementing
# Revision -- which iteration of the implementation of the binary
@@ -6974,6 +6976,10 @@ printf "%s\n" "#define HAVE_ATTR_WEAK 1" >>confdefs.h
printf "%s\n" "#define ATTR_WEAK __attribute__((weak))" >>confdefs.h
+else
+
+printf "%s\n" "#define ATTR_WEAK /**/" >>confdefs.h
+
fi
@@ -7021,6 +7027,79 @@ printf "%s\n" "#define HAVE_ATTR_NORETURN 1" >>confdefs.h
printf "%s\n" "#define ATTR_NORETURN __attribute__((__noreturn__))" >>confdefs.h
+else
+
+printf "%s\n" "#define ATTR_NORETURN /**/" >>confdefs.h
+
+fi
+
+
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler (${CC-cc}) accepts the \"fallthrough\" attribute" >&5
+printf %s "checking whether the C compiler (${CC-cc}) accepts the \"fallthrough\" attribute... " >&6; }
+BAKCFLAGS="$CFLAGS"
+CFLAGS="$CFLAGS -Werror"
+if test ${ac_cv_c_fallthrough_attribute+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_cv_c_fallthrough_attribute=no
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+ #include <stdio.h>
+void f(int x) {
+ int y = 0;
+ switch(x) {
+ case 1:
+ y = 1;
+ __attribute__((fallthrough));
+ /* fallthrough */
+ case 2:
+ y++;
+ break;
+ case 3:
+ y = 3;
+ break;
+ }
+ printf("%d", y);
+}
+
+int
+main (void)
+{
+
+ f(1);
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_c_fallthrough_attribute="yes"
+else $as_nop
+ ac_cv_c_fallthrough_attribute="no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+
+fi
+
+CFLAGS="$BAKCFLAGS"
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_fallthrough_attribute" >&5
+printf "%s\n" "$ac_cv_c_fallthrough_attribute" >&6; }
+if test $ac_cv_c_fallthrough_attribute = yes; then
+
+printf "%s\n" "#define HAVE_ATTR_FALLTHROUGH 1" >>confdefs.h
+
+
+printf "%s\n" "#define ATTR_FALLTHROUGH __attribute__((fallthrough));" >>confdefs.h
+
+else
+
+printf "%s\n" "#define ATTR_FALLTHROUGH /**/" >>confdefs.h
+
fi
@@ -17623,7 +17702,8 @@ have_systemd=no
if test "x$enable_systemd" != xno
then :
-
+ if test -n "$PKG_CONFIG"; then
+ have_systemd=no
pkg_failed=no
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for SYSTEMD" >&5
@@ -17683,11 +17763,31 @@ fi
# Put the nasty error message in config.log where it belongs
echo "$SYSTEMD_PKG_ERRORS" >&5
- have_systemd=no
+ as_fn_error $? "Package requirements (libsystemd) were not met:
+
+$SYSTEMD_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+Alternatively, you may set the environment variables SYSTEMD_CFLAGS
+and SYSTEMD_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details." "$LINENO" 5
elif test $pkg_failed = untried; then
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
printf "%s\n" "no" >&6; }
- have_systemd=no
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+Alternatively, you may set the environment variables SYSTEMD_CFLAGS
+and SYSTEMD_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.
+See \`config.log' for more details" "$LINENO" 5; }
else
SYSTEMD_CFLAGS=$pkg_cv_SYSTEMD_CFLAGS
SYSTEMD_LIBS=$pkg_cv_SYSTEMD_LIBS
@@ -17698,6 +17798,7 @@ fi
if test "x$have_systemd" != "xyes"
then :
+ have_systemd_daemon=no
pkg_failed=no
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for SYSTEMD_DAEMON" >&5
@@ -17757,11 +17858,31 @@ fi
# Put the nasty error message in config.log where it belongs
echo "$SYSTEMD_DAEMON_PKG_ERRORS" >&5
- have_systemd_daemon=no
+ as_fn_error $? "Package requirements (libsystemd-daemon) were not met:
+
+$SYSTEMD_DAEMON_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+Alternatively, you may set the environment variables SYSTEMD_DAEMON_CFLAGS
+and SYSTEMD_DAEMON_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details." "$LINENO" 5
elif test $pkg_failed = untried; then
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
printf "%s\n" "no" >&6; }
- have_systemd_daemon=no
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+Alternatively, you may set the environment variables SYSTEMD_DAEMON_CFLAGS
+and SYSTEMD_DAEMON_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.
+See \`config.log' for more details" "$LINENO" 5; }
else
SYSTEMD_DAEMON_CFLAGS=$pkg_cv_SYSTEMD_DAEMON_CFLAGS
SYSTEMD_DAEMON_LIBS=$pkg_cv_SYSTEMD_DAEMON_LIBS
@@ -17788,7 +17909,9 @@ printf "%s\n" "#define HAVE_SYSTEMD 1" >>confdefs.h
*) :
;;
esac
-
+ else
+ as_fn_error $? "systemd enabled but need pkg-config to configure for it" "$LINENO" 5
+ fi
fi
if test "x$have_systemd" = xyes; then
@@ -19184,7 +19307,7 @@ fi
if test -z "$PYTHON"; then
- as_fn_error $? "Cannot find python$PYTHON_VERSION in your system path" "$LINENO" 5
+ as_fn_error $? "Cannot find 'python$PYTHON_VERSION' in your system path. You can use the environment variable 'PYTHON_VERSION=version_number' for an explicit version." "$LINENO" 5
PYTHON_VERSION=""
fi
@@ -20655,6 +20778,12 @@ then :
printf "%s\n" "#define HAVE_BIO_SET_CALLBACK_EX 1" >>confdefs.h
fi
+ac_fn_c_check_func "$LINENO" "SSL_CTX_set_tmp_ecdh" "ac_cv_func_SSL_CTX_set_tmp_ecdh"
+if test "x$ac_cv_func_SSL_CTX_set_tmp_ecdh" = xyes
+then :
+ printf "%s\n" "#define HAVE_SSL_CTX_SET_TMP_ECDH 1" >>confdefs.h
+
+fi
# these check_funcs need -lssl
@@ -21189,7 +21318,25 @@ case "$enable_ecdsa" in
;;
*)
if test $USE_NSS = "no" -a $USE_NETTLE = "no"; then
- ac_fn_c_check_func "$LINENO" "ECDSA_sign" "ac_cv_func_ECDSA_sign"
+ ac_fn_c_check_func "$LINENO" "EVP_PKEY_fromdata" "ac_cv_func_EVP_PKEY_fromdata"
+if test "x$ac_cv_func_EVP_PKEY_fromdata" = xyes
+then :
+
+ # with EVP_PKEY_fromdata, check if EC is not disabled
+ ac_fn_check_decl "$LINENO" "OPENSSL_NO_EC" "ac_cv_have_decl_OPENSSL_NO_EC" "$ac_includes_default
+#include <openssl/evp.h>
+
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_OPENSSL_NO_EC" = xyes
+then :
+ as_fn_error $? "OpenSSL does not support ECDSA: please upgrade or rerun with --disable-ecdsa" "$LINENO" 5
+
+fi
+
+else $as_nop
+
+ # without EVP_PKEY_fromdata, older openssl, check for support
+ ac_fn_c_check_func "$LINENO" "ECDSA_sign" "ac_cv_func_ECDSA_sign"
if test "x$ac_cv_func_ECDSA_sign" = xyes
then :
@@ -21197,7 +21344,7 @@ else $as_nop
as_fn_error $? "OpenSSL does not support ECDSA: please upgrade or rerun with --disable-ecdsa" "$LINENO" 5
fi
- ac_fn_c_check_func "$LINENO" "SHA384_Init" "ac_cv_func_SHA384_Init"
+ ac_fn_c_check_func "$LINENO" "SHA384_Init" "ac_cv_func_SHA384_Init"
if test "x$ac_cv_func_SHA384_Init" = xyes
then :
@@ -21205,6 +21352,9 @@ else $as_nop
as_fn_error $? "OpenSSL does not support SHA384: please upgrade or rerun with --disable-ecdsa" "$LINENO" 5
fi
+
+fi
+
ac_fn_check_decl "$LINENO" "NID_X9_62_prime256v1" "ac_cv_have_decl_NID_X9_62_prime256v1" "$ac_includes_default
#include <openssl/evp.h>
@@ -23732,7 +23882,7 @@ then :
else $as_nop
-
+ if test -n "$PKG_CONFIG"; then
pkg_failed=no
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for PROTOBUFC" >&5
@@ -23793,36 +23943,36 @@ fi
echo "$PROTOBUFC_PKG_ERRORS" >&5
- # pkg-config failed; try falling back to known values
- # workaround for protobuf-c includes at old dir before protobuf-c-1.0.0
- if test -f /usr/include/google/protobuf-c/protobuf-c.h; then
- CFLAGS="$CFLAGS -I/usr/include/google"
+ # pkg-config failed; try falling back to known values
+ # workaround for protobuf-c includes at old dir before protobuf-c-1.0.0
+ if test -f /usr/include/google/protobuf-c/protobuf-c.h; then
+ CFLAGS="$CFLAGS -I/usr/include/google"
+ else
+ if test -f /usr/local/include/google/protobuf-c/protobuf-c.h; then
+ CFLAGS="$CFLAGS -I/usr/local/include/google"
+ LDFLAGS="$LDFLAGS -L/usr/local/lib"
else
- if test -f /usr/local/include/google/protobuf-c/protobuf-c.h; then
- CFLAGS="$CFLAGS -I/usr/local/include/google"
- LDFLAGS="$LDFLAGS -L/usr/local/lib"
- else
- as_fn_error $? "The protobuf-c package was not found with pkg-config. Please install protobuf-c!" "$LINENO" 5
- fi
+ as_fn_error $? "The protobuf-c package was not found with pkg-config. Please install protobuf-c!" "$LINENO" 5
fi
+ fi
elif test $pkg_failed = untried; then
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
printf "%s\n" "no" >&6; }
- # pkg-config failed; try falling back to known values
- # workaround for protobuf-c includes at old dir before protobuf-c-1.0.0
- if test -f /usr/include/google/protobuf-c/protobuf-c.h; then
- CFLAGS="$CFLAGS -I/usr/include/google"
+ # pkg-config failed; try falling back to known values
+ # workaround for protobuf-c includes at old dir before protobuf-c-1.0.0
+ if test -f /usr/include/google/protobuf-c/protobuf-c.h; then
+ CFLAGS="$CFLAGS -I/usr/include/google"
+ else
+ if test -f /usr/local/include/google/protobuf-c/protobuf-c.h; then
+ CFLAGS="$CFLAGS -I/usr/local/include/google"
+ LDFLAGS="$LDFLAGS -L/usr/local/lib"
else
- if test -f /usr/local/include/google/protobuf-c/protobuf-c.h; then
- CFLAGS="$CFLAGS -I/usr/local/include/google"
- LDFLAGS="$LDFLAGS -L/usr/local/lib"
- else
- as_fn_error $? "The protobuf-c package was not found with pkg-config. Please install protobuf-c!" "$LINENO" 5
- fi
+ as_fn_error $? "The protobuf-c package was not found with pkg-config. Please install protobuf-c!" "$LINENO" 5
fi
+ fi
else
@@ -23831,11 +23981,21 @@ else
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
printf "%s\n" "yes" >&6; }
- CFLAGS="$CFLAGS $PROTOBUFC_CFLAGS"
- LIBS="$LIBS $PROTOBUFC_LIBS"
+ CFLAGS="$CFLAGS $PROTOBUFC_CFLAGS"
+ LIBS="$LIBS $PROTOBUFC_LIBS"
fi
-
+ else
+ # workaround for protobuf-c includes at old dir before protobuf-c-1.0.0
+ if test -f /usr/include/google/protobuf-c/protobuf-c.h; then
+ CFLAGS="$CFLAGS -I/usr/include/google"
+ else
+ if test -f /usr/local/include/google/protobuf-c/protobuf-c.h; then
+ CFLAGS="$CFLAGS -I/usr/local/include/google"
+ LDFLAGS="$LDFLAGS -L/usr/local/lib"
+ fi
+ fi
+ fi
fi
@@ -24234,7 +24394,21 @@ printf "%s\n" "#define USE_IPSET 1" >>confdefs.h
IPSET_OBJ="ipset.lo"
- # mnl
+ # BSD's pf
+ for ac_header in net/pfvar.h
+do :
+ ac_fn_c_check_header_compile "$LINENO" "net/pfvar.h" "ac_cv_header_net_pfvar_h" "
+ #include <netinet/in.h>
+ #include <net/if.h>
+
+"
+if test "x$ac_cv_header_net_pfvar_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_NET_PFVAR_H 1" >>confdefs.h
+
+else $as_nop
+
+ # mnl
# Check whether --with-libmnl was given.
if test ${with_libmnl+y}
@@ -24244,13 +24418,13 @@ else $as_nop
withval="yes"
fi
- found_libmnl="no"
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for libmnl" >&5
+ found_libmnl="no"
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for libmnl" >&5
printf %s "checking for libmnl... " >&6; }
- if test x_$withval = x_ -o x_$withval = x_yes; then
+ if test x_$withval = x_ -o x_$withval = x_yes; then
withval="/usr/local /opt/local /usr/lib /usr/pkg /usr/sfw /usr"
- fi
- for dir in $withval ; do
+ fi
+ for dir in $withval ; do
if test -f "$dir/include/libmnl/libmnl.h" -o -f "$dir/include/libmnl/libmnl/libmnl.h"; then
found_libmnl="yes"
extralibmnl=""
@@ -24268,10 +24442,14 @@ printf "%s\n" "found in $dir" >&6; }
LIBS="$LIBS -lmnl"
break;
fi
- done
- if test x_$found_libmnl != x_yes; then
- as_fn_error $? "Could not find libmnl, libmnl.h" "$LINENO" 5
- fi
+ done
+ if test x_$found_libmnl != x_yes; then
+ as_fn_error $? "Could not find libmnl, libmnl.h" "$LINENO" 5
+ fi
+
+fi
+
+done
;;
no|*)
# nothing
@@ -24466,7 +24644,7 @@ printf "%s\n" "#define MAXSYSLOGMSGLEN 10240" >>confdefs.h
-version=1.20.0
+version=1.21.0
date=`date +'%b %e, %Y'`
@@ -24978,7 +25156,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.20.0, which was
+This file was extended by unbound $as_me 1.21.0, which was
generated by GNU Autoconf 2.71. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -25046,7 +25224,7 @@ ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config='$ac_cs_config_escaped'
ac_cs_version="\\
-unbound config.status 1.20.0
+unbound config.status 1.21.0
configured by $0, generated by GNU Autoconf 2.71,
with options \\"\$ac_cs_config\\"
diff --git a/configure.ac b/configure.ac
index 83c013ac4ee9..c30d931de829 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],[20])
+m4_define([VERSION_MINOR],[21])
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=27
+LIBUNBOUND_REVISION=28
LIBUNBOUND_AGE=1
# 1.0.0 had 0:12:0
# 1.0.1 had 0:13:0
@@ -113,6 +113,7 @@ LIBUNBOUND_AGE=1
# 1.19.2 had 9:25:1
# 1.19.3 had 9:26:1
# 1.20.0 had 9:27:1
+# 1.21.0 had 9:28:1
# Current -- the number of the binary API that we're implementing
# Revision -- which iteration of the implementation of the binary
@@ -338,6 +339,8 @@ AC_MSG_RESULT($ac_cv_c_weak_attribute)
if test $ac_cv_c_weak_attribute = yes; then
AC_DEFINE(HAVE_ATTR_WEAK, 1, [Whether the C compiler accepts the "weak" attribute])
AC_DEFINE(ATTR_WEAK, [__attribute__((weak))], [apply the weak attribute to a symbol])
+else
+ AC_DEFINE(ATTR_WEAK,[], [apply the weak attribute to a symbol])
fi
])dnl End of CHECK_WEAK_ATTRIBUTE
@@ -359,11 +362,54 @@ AC_MSG_RESULT($ac_cv_c_noreturn_attribute)
if test $ac_cv_c_noreturn_attribute = yes; then
AC_DEFINE(HAVE_ATTR_NORETURN, 1, [Whether the C compiler accepts the "noreturn" attribute])
AC_DEFINE(ATTR_NORETURN, [__attribute__((__noreturn__))], [apply the noreturn attribute to a function that exits the program])
+else
+ AC_DEFINE(ATTR_NORETURN,[], [apply the noreturn attribute to a function that exits the program])
fi
])dnl End of CHECK_NORETURN_ATTRIBUTE
CHECK_NORETURN_ATTRIBUTE
+AC_DEFUN([CHECK_FALLTHROUGH_ATTRIBUTE],
+[AC_REQUIRE([AC_PROG_CC])
+AC_MSG_CHECKING(whether the C compiler (${CC-cc}) accepts the "fallthrough" attribute)
+BAKCFLAGS="$CFLAGS"
+CFLAGS="$CFLAGS -Werror"
+AC_CACHE_VAL(ac_cv_c_fallthrough_attribute,
+[ac_cv_c_fallthrough_attribute=no
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <stdio.h>
+void f(int x) {
+ int y = 0;
+ switch(x) {
+ case 1:
+ y = 1;
+ __attribute__((fallthrough));
+ /* fallthrough */
+ case 2:
+ y++;
+ break;
+ case 3:
+ y = 3;
+ break;
+ }
+ printf("%d", y);
+}
+]], [[
+ f(1);
+]])],[ac_cv_c_fallthrough_attribute="yes"],[ac_cv_c_fallthrough_attribute="no"])
+])
+CFLAGS="$BAKCFLAGS"
+
+AC_MSG_RESULT($ac_cv_c_fallthrough_attribute)
+if test $ac_cv_c_fallthrough_attribute = yes; then
+ AC_DEFINE(HAVE_ATTR_FALLTHROUGH, 1, [Whether the C compiler accepts the "fallthrough" attribute])
+ AC_DEFINE(ATTR_FALLTHROUGH, [__attribute__((fallthrough));], [apply the fallthrough attribute.])
+else
+ AC_DEFINE(ATTR_FALLTHROUGH,[], [apply the fallthrough attribute.])
+fi
+])dnl End of CHECK_FALLTHROUGH_ATTRIBUTE
+
+CHECK_FALLTHROUGH_ATTRIBUTE
+
if test "$srcdir" != "."; then
CPPFLAGS="$CPPFLAGS -I$srcdir"
fi
@@ -943,7 +989,7 @@ else
AC_MSG_RESULT([no])
fi
AC_CHECK_HEADERS([openssl/conf.h openssl/engine.h openssl/bn.h openssl/dh.h openssl/dsa.h openssl/rsa.h openssl/core_names.h openssl/param_build.h],,, [AC_INCLUDES_DEFAULT])
-AC_CHECK_FUNCS([OPENSSL_config EVP_sha1 EVP_sha256 EVP_sha512 FIPS_mode EVP_default_properties_is_fips_enabled EVP_MD_CTX_new OpenSSL_add_all_digests OPENSSL_init_crypto EVP_cleanup ENGINE_cleanup ERR_load_crypto_strings CRYPTO_cleanup_all_ex_data ERR_free_strings RAND_cleanup DSA_SIG_set0 EVP_dss1 EVP_DigestVerify EVP_aes_256_cbc EVP_EncryptInit_ex HMAC_Init_ex CRYPTO_THREADID_set_callback EVP_MAC_CTX_set_params OSSL_PARAM_BLD_new BIO_set_callback_ex])
+AC_CHECK_FUNCS([OPENSSL_config EVP_sha1 EVP_sha256 EVP_sha512 FIPS_mode EVP_default_properties_is_fips_enabled EVP_MD_CTX_new OpenSSL_add_all_digests OPENSSL_init_crypto EVP_cleanup ENGINE_cleanup ERR_load_crypto_strings CRYPTO_cleanup_all_ex_data ERR_free_strings RAND_cleanup DSA_SIG_set0 EVP_dss1 EVP_DigestVerify EVP_aes_256_cbc EVP_EncryptInit_ex HMAC_Init_ex CRYPTO_THREADID_set_callback EVP_MAC_CTX_set_params OSSL_PARAM_BLD_new BIO_set_callback_ex SSL_CTX_set_tmp_ecdh])
# these check_funcs need -lssl
BAKLIBS="$LIBS"
@@ -1180,8 +1226,17 @@ case "$enable_ecdsa" in
;;
*)
if test $USE_NSS = "no" -a $USE_NETTLE = "no"; then
- AC_CHECK_FUNC(ECDSA_sign, [], [AC_MSG_ERROR([OpenSSL does not support ECDSA: please upgrade or rerun with --disable-ecdsa])])
- AC_CHECK_FUNC(SHA384_Init, [], [AC_MSG_ERROR([OpenSSL does not support SHA384: please upgrade or rerun with --disable-ecdsa])])
+ AC_CHECK_FUNC(EVP_PKEY_fromdata, [
+ # with EVP_PKEY_fromdata, check if EC is not disabled
+ AC_CHECK_DECL([OPENSSL_NO_EC], [AC_MSG_ERROR([OpenSSL does not support ECDSA: please upgrade or rerun with --disable-ecdsa])
+ ], [], [AC_INCLUDES_DEFAULT
+#include <openssl/evp.h>
+ ])
+ ], [
+ # without EVP_PKEY_fromdata, older openssl, check for support
+ AC_CHECK_FUNC(ECDSA_sign, [], [AC_MSG_ERROR([OpenSSL does not support ECDSA: please upgrade or rerun with --disable-ecdsa])])
+ AC_CHECK_FUNC(SHA384_Init, [], [AC_MSG_ERROR([OpenSSL does not support SHA384: please upgrade or rerun with --disable-ecdsa])])
+ ])
AC_CHECK_DECLS([NID_X9_62_prime256v1, NID_secp384r1], [], [AC_MSG_ERROR([OpenSSL does not support the ECDSA curves: please upgrade or rerun with --disable-ecdsa])], [AC_INCLUDES_DEFAULT
#include <openssl/evp.h>
])
@@ -1921,15 +1976,17 @@ case "$enable_ipset" in
IPSET_OBJ="ipset.lo"
AC_SUBST(IPSET_OBJ)
- # mnl
- AC_ARG_WITH(libmnl, AS_HELP_STRING([--with-libmnl=path],[specify explicit path for libmnl.]),
+ # BSD's pf
+ AC_CHECK_HEADERS([net/pfvar.h], [], [
+ # mnl
+ AC_ARG_WITH(libmnl, AS_HELP_STRING([--with-libmnl=path],[specify explicit path for libmnl.]),
[ ],[ withval="yes" ])
- found_libmnl="no"
- AC_MSG_CHECKING(for libmnl)
- if test x_$withval = x_ -o x_$withval = x_yes; then
+ found_libmnl="no"
+ AC_MSG_CHECKING(for libmnl)
+ if test x_$withval = x_ -o x_$withval = x_yes; then
withval="/usr/local /opt/local /usr/lib /usr/pkg /usr/sfw /usr"
- fi
- for dir in $withval ; do
+ fi
+ for dir in $withval ; do
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.
@@ -1947,10 +2004,14 @@ case "$enable_ipset" in
LIBS="$LIBS -lmnl"
break;
fi
- done
- if test x_$found_libmnl != x_yes; then
- AC_MSG_ERROR([Could not find libmnl, libmnl.h])
- fi
+ done
+ if test x_$found_libmnl != x_yes; then
+ AC_MSG_ERROR([Could not find libmnl, libmnl.h])
+ fi
+ ], [
+ #include <netinet/in.h>
+ #include <net/if.h>
+ ])
;;
no|*)
# nothing
@@ -2268,6 +2329,7 @@ struct sockaddr_storage;
# define calloc(n,s) unbound_stat_calloc_log(n, s, __FILE__, __LINE__, __func__)
# define free(p) unbound_stat_free_log(p, __FILE__, __LINE__, __func__)
# define realloc(p,s) unbound_stat_realloc_log(p, s, __FILE__, __LINE__, __func__)
+# define strdup(s) unbound_stat_strdup_log(s, __FILE__, __LINE__, __func__)
void *unbound_stat_malloc(size_t size);
void *unbound_stat_calloc(size_t nmemb, size_t size);
void unbound_stat_free(void *ptr);
@@ -2280,6 +2342,8 @@ void unbound_stat_free_log(void *ptr, const char* file, int line,
const char* func);
void *unbound_stat_realloc_log(void *ptr, size_t size, const char* file,
int line, const char* func);
+char *unbound_stat_strdup_log(const char *s, const char* file, int line,
+ const char* func);
#elif defined(UNBOUND_ALLOC_LITE)
# include "util/alloc.h"
#endif /* UNBOUND_ALLOC_LITE and UNBOUND_ALLOC_STATS */
diff --git a/configure~ b/configure~
index d4a394eb9540..63051eca812d 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.71 for unbound 1.20.0.
+# Generated by GNU Autoconf 2.71 for unbound 1.21.0.
#
# Report bugs to <unbound-bugs@nlnetlabs.nl or https://github.com/NLnetLabs/unbound/issues>.
#
@@ -622,8 +622,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='unbound'
PACKAGE_TARNAME='unbound'
-PACKAGE_VERSION='1.20.0'
-PACKAGE_STRING='unbound 1.20.0'
+PACKAGE_VERSION='1.21.0'
+PACKAGE_STRING='unbound 1.21.0'
PACKAGE_BUGREPORT='unbound-bugs@nlnetlabs.nl or https://github.com/NLnetLabs/unbound/issues'
PACKAGE_URL=''
@@ -1508,7 +1508,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.20.0 to adapt to many kinds of systems.
+\`configure' configures unbound 1.21.0 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1574,7 +1574,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of unbound 1.20.0:";;
+ short | recursive ) echo "Configuration of unbound 1.21.0:";;
esac
cat <<\_ACEOF
@@ -1596,7 +1596,8 @@ Optional Features:
--disable-libtool-lock avoid locking (might break parallel builds)
--disable-rpath disable hardcoded rpath (default=enabled)
--disable-largefile omit support for large files
- --enable-systemd compile with systemd support
+ --enable-systemd compile with systemd support (requires libsystemd,
+ pkg-config)
--enable-alloc-checks enable to memory allocation statistics, for debug
purposes
--enable-alloc-lite enable for lightweight alloc assertions, for debug
@@ -1821,7 +1822,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-unbound configure 1.20.0
+unbound configure 1.21.0
generated by GNU Autoconf 2.71
Copyright (C) 2021 Free Software Foundation, Inc.
@@ -2478,7 +2479,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.20.0, which was
+It was created by unbound $as_me 1.21.0, which was
generated by GNU Autoconf 2.71. Invocation command line was
$ $0$ac_configure_args_raw
@@ -3240,13 +3241,13 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
UNBOUND_VERSION_MAJOR=1
-UNBOUND_VERSION_MINOR=20
+UNBOUND_VERSION_MINOR=21
UNBOUND_VERSION_MICRO=0
LIBUNBOUND_CURRENT=9
-LIBUNBOUND_REVISION=27
+LIBUNBOUND_REVISION=28
LIBUNBOUND_AGE=1
# 1.0.0 had 0:12:0
# 1.0.1 had 0:13:0
@@ -3341,6 +3342,7 @@ LIBUNBOUND_AGE=1
# 1.19.2 had 9:25:1
# 1.19.3 had 9:26:1
# 1.20.0 had 9:27:1
+# 1.21.0 had 9:28:1
# Current -- the number of the binary API that we're implementing
# Revision -- which iteration of the implementation of the binary
@@ -6974,6 +6976,10 @@ printf "%s\n" "#define HAVE_ATTR_WEAK 1" >>confdefs.h
printf "%s\n" "#define ATTR_WEAK __attribute__((weak))" >>confdefs.h
+else
+
+printf "%s\n" "#define ATTR_WEAK /**/" >>confdefs.h
+
fi
@@ -7021,6 +7027,79 @@ printf "%s\n" "#define HAVE_ATTR_NORETURN 1" >>confdefs.h
printf "%s\n" "#define ATTR_NORETURN __attribute__((__noreturn__))" >>confdefs.h
+else
+
+printf "%s\n" "#define ATTR_NORETURN /**/" >>confdefs.h
+
+fi
+
+
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler (${CC-cc}) accepts the \"fallthrough\" attribute" >&5
+printf %s "checking whether the C compiler (${CC-cc}) accepts the \"fallthrough\" attribute... " >&6; }
+BAKCFLAGS="$CFLAGS"
+CFLAGS="$CFLAGS -Werror"
+if test ${ac_cv_c_fallthrough_attribute+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_cv_c_fallthrough_attribute=no
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+ #include <stdio.h>
+void f(int x) {
+ int y = 0;
+ switch(x) {
+ case 1:
+ y = 1;
+ __attribute__((fallthrough));
+ /* fallthrough */
+ case 2:
+ y++;
+ break;
+ case 3:
+ y = 3;
+ break;
+ }
+ printf("%d", y);
+}
+
+int
+main (void)
+{
+
+ f(1);
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_c_fallthrough_attribute="yes"
+else $as_nop
+ ac_cv_c_fallthrough_attribute="no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+
+fi
+
+CFLAGS="$BAKCFLAGS"
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_fallthrough_attribute" >&5
+printf "%s\n" "$ac_cv_c_fallthrough_attribute" >&6; }
+if test $ac_cv_c_fallthrough_attribute = yes; then
+
+printf "%s\n" "#define HAVE_ATTR_FALLTHROUGH 1" >>confdefs.h
+
+
+printf "%s\n" "#define ATTR_FALLTHROUGH __attribute__((fallthrough));" >>confdefs.h
+
+else
+
+printf "%s\n" "#define ATTR_FALLTHROUGH /**/" >>confdefs.h
+
fi
@@ -17623,7 +17702,8 @@ have_systemd=no
if test "x$enable_systemd" != xno
then :
-
+ if test -n "$PKG_CONFIG"; then
+ have_systemd=no
pkg_failed=no
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for SYSTEMD" >&5
@@ -17683,11 +17763,31 @@ fi
# Put the nasty error message in config.log where it belongs
echo "$SYSTEMD_PKG_ERRORS" >&5
- have_systemd=no
+ as_fn_error $? "Package requirements (libsystemd) were not met:
+
+$SYSTEMD_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+Alternatively, you may set the environment variables SYSTEMD_CFLAGS
+and SYSTEMD_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details." "$LINENO" 5
elif test $pkg_failed = untried; then
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
printf "%s\n" "no" >&6; }
- have_systemd=no
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+Alternatively, you may set the environment variables SYSTEMD_CFLAGS
+and SYSTEMD_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.
+See \`config.log' for more details" "$LINENO" 5; }
else
SYSTEMD_CFLAGS=$pkg_cv_SYSTEMD_CFLAGS
SYSTEMD_LIBS=$pkg_cv_SYSTEMD_LIBS
@@ -17698,6 +17798,7 @@ fi
if test "x$have_systemd" != "xyes"
then :
+ have_systemd_daemon=no
pkg_failed=no
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for SYSTEMD_DAEMON" >&5
@@ -17757,11 +17858,31 @@ fi
# Put the nasty error message in config.log where it belongs
echo "$SYSTEMD_DAEMON_PKG_ERRORS" >&5
- have_systemd_daemon=no
+ as_fn_error $? "Package requirements (libsystemd-daemon) were not met:
+
+$SYSTEMD_DAEMON_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+Alternatively, you may set the environment variables SYSTEMD_DAEMON_CFLAGS
+and SYSTEMD_DAEMON_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details." "$LINENO" 5
elif test $pkg_failed = untried; then
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
printf "%s\n" "no" >&6; }
- have_systemd_daemon=no
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+Alternatively, you may set the environment variables SYSTEMD_DAEMON_CFLAGS
+and SYSTEMD_DAEMON_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.
+See \`config.log' for more details" "$LINENO" 5; }
else
SYSTEMD_DAEMON_CFLAGS=$pkg_cv_SYSTEMD_DAEMON_CFLAGS
SYSTEMD_DAEMON_LIBS=$pkg_cv_SYSTEMD_DAEMON_LIBS
@@ -17788,7 +17909,9 @@ printf "%s\n" "#define HAVE_SYSTEMD 1" >>confdefs.h
*) :
;;
esac
-
+ else
+ as_fn_error $? "systemd enabled but need pkg-config to configure for it" "$LINENO" 5
+ fi
fi
if test "x$have_systemd" = xyes; then
@@ -19184,7 +19307,7 @@ fi
if test -z "$PYTHON"; then
- as_fn_error $? "Cannot find python$PYTHON_VERSION in your system path" "$LINENO" 5
+ as_fn_error $? "Cannot find 'python$PYTHON_VERSION' in your system path. You can use the environment variable 'PYTHON_VERSION=version_number' for an explicit version." "$LINENO" 5
PYTHON_VERSION=""
fi
@@ -20655,6 +20778,12 @@ then :
printf "%s\n" "#define HAVE_BIO_SET_CALLBACK_EX 1" >>confdefs.h
fi
+ac_fn_c_check_func "$LINENO" "SSL_CTX_set_tmp_ecdh" "ac_cv_func_SSL_CTX_set_tmp_ecdh"
+if test "x$ac_cv_func_SSL_CTX_set_tmp_ecdh" = xyes
+then :
+ printf "%s\n" "#define HAVE_SSL_CTX_SET_TMP_ECDH 1" >>confdefs.h
+
+fi
# these check_funcs need -lssl
@@ -21189,7 +21318,25 @@ case "$enable_ecdsa" in
;;
*)
if test $USE_NSS = "no" -a $USE_NETTLE = "no"; then
- ac_fn_c_check_func "$LINENO" "ECDSA_sign" "ac_cv_func_ECDSA_sign"
+ ac_fn_c_check_func "$LINENO" "EVP_PKEY_fromdata" "ac_cv_func_EVP_PKEY_fromdata"
+if test "x$ac_cv_func_EVP_PKEY_fromdata" = xyes
+then :
+
+ # with EVP_PKEY_fromdata, check if EC is not disabled
+ ac_fn_check_decl "$LINENO" "OPENSSL_NO_EC" "ac_cv_have_decl_OPENSSL_NO_EC" "$ac_includes_default
+#include <openssl/evp.h>
+
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_OPENSSL_NO_EC" = xyes
+then :
+ as_fn_error $? "OpenSSL does not support ECDSA: please upgrade or rerun with --disable-ecdsa" "$LINENO" 5
+
+fi
+
+else $as_nop
+
+ # without EVP_PKEY_fromdata, older openssl, check for support
+ ac_fn_c_check_func "$LINENO" "ECDSA_sign" "ac_cv_func_ECDSA_sign"
if test "x$ac_cv_func_ECDSA_sign" = xyes
then :
@@ -21197,7 +21344,7 @@ else $as_nop
as_fn_error $? "OpenSSL does not support ECDSA: please upgrade or rerun with --disable-ecdsa" "$LINENO" 5
fi
- ac_fn_c_check_func "$LINENO" "SHA384_Init" "ac_cv_func_SHA384_Init"
+ ac_fn_c_check_func "$LINENO" "SHA384_Init" "ac_cv_func_SHA384_Init"
if test "x$ac_cv_func_SHA384_Init" = xyes
then :
@@ -21205,6 +21352,9 @@ else $as_nop
as_fn_error $? "OpenSSL does not support SHA384: please upgrade or rerun with --disable-ecdsa" "$LINENO" 5
fi
+
+fi
+
ac_fn_check_decl "$LINENO" "NID_X9_62_prime256v1" "ac_cv_have_decl_NID_X9_62_prime256v1" "$ac_includes_default
#include <openssl/evp.h>
@@ -23732,7 +23882,7 @@ then :
else $as_nop
-
+ if test -n "$PKG_CONFIG"; then
pkg_failed=no
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for PROTOBUFC" >&5
@@ -23793,36 +23943,36 @@ fi
echo "$PROTOBUFC_PKG_ERRORS" >&5
- # pkg-config failed; try falling back to known values
- # workaround for protobuf-c includes at old dir before protobuf-c-1.0.0
- if test -f /usr/include/google/protobuf-c/protobuf-c.h; then
- CFLAGS="$CFLAGS -I/usr/include/google"
+ # pkg-config failed; try falling back to known values
+ # workaround for protobuf-c includes at old dir before protobuf-c-1.0.0
+ if test -f /usr/include/google/protobuf-c/protobuf-c.h; then
+ CFLAGS="$CFLAGS -I/usr/include/google"
+ else
+ if test -f /usr/local/include/google/protobuf-c/protobuf-c.h; then
+ CFLAGS="$CFLAGS -I/usr/local/include/google"
+ LDFLAGS="$LDFLAGS -L/usr/local/lib"
else
- if test -f /usr/local/include/google/protobuf-c/protobuf-c.h; then
- CFLAGS="$CFLAGS -I/usr/local/include/google"
- LDFLAGS="$LDFLAGS -L/usr/local/lib"
- else
- as_fn_error $? "The protobuf-c package was not found with pkg-config. Please install protobuf-c!" "$LINENO" 5
- fi
+ as_fn_error $? "The protobuf-c package was not found with pkg-config. Please install protobuf-c!" "$LINENO" 5
fi
+ fi
elif test $pkg_failed = untried; then
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
printf "%s\n" "no" >&6; }
- # pkg-config failed; try falling back to known values
- # workaround for protobuf-c includes at old dir before protobuf-c-1.0.0
- if test -f /usr/include/google/protobuf-c/protobuf-c.h; then
- CFLAGS="$CFLAGS -I/usr/include/google"
+ # pkg-config failed; try falling back to known values
+ # workaround for protobuf-c includes at old dir before protobuf-c-1.0.0
+ if test -f /usr/include/google/protobuf-c/protobuf-c.h; then
+ CFLAGS="$CFLAGS -I/usr/include/google"
+ else
+ if test -f /usr/local/include/google/protobuf-c/protobuf-c.h; then
+ CFLAGS="$CFLAGS -I/usr/local/include/google"
+ LDFLAGS="$LDFLAGS -L/usr/local/lib"
else
- if test -f /usr/local/include/google/protobuf-c/protobuf-c.h; then
- CFLAGS="$CFLAGS -I/usr/local/include/google"
- LDFLAGS="$LDFLAGS -L/usr/local/lib"
- else
- as_fn_error $? "The protobuf-c package was not found with pkg-config. Please install protobuf-c!" "$LINENO" 5
- fi
+ as_fn_error $? "The protobuf-c package was not found with pkg-config. Please install protobuf-c!" "$LINENO" 5
fi
+ fi
else
@@ -23831,11 +23981,21 @@ else
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
printf "%s\n" "yes" >&6; }
- CFLAGS="$CFLAGS $PROTOBUFC_CFLAGS"
- LIBS="$LIBS $PROTOBUFC_LIBS"
+ CFLAGS="$CFLAGS $PROTOBUFC_CFLAGS"
+ LIBS="$LIBS $PROTOBUFC_LIBS"
fi
-
+ else
+ # workaround for protobuf-c includes at old dir before protobuf-c-1.0.0
+ if test -f /usr/include/google/protobuf-c/protobuf-c.h; then
+ CFLAGS="$CFLAGS -I/usr/include/google"
+ else
+ if test -f /usr/local/include/google/protobuf-c/protobuf-c.h; then
+ CFLAGS="$CFLAGS -I/usr/local/include/google"
+ LDFLAGS="$LDFLAGS -L/usr/local/lib"
+ fi
+ fi
+ fi
fi
@@ -24234,7 +24394,21 @@ printf "%s\n" "#define USE_IPSET 1" >>confdefs.h
IPSET_OBJ="ipset.lo"
- # mnl
+ # BSD's pf
+ for ac_header in net/pfvar.h
+do :
+ ac_fn_c_check_header_compile "$LINENO" "net/pfvar.h" "ac_cv_header_net_pfvar_h" "
+ #include <netinet/in.h>
+ #include <net/if.h>
+
+"
+if test "x$ac_cv_header_net_pfvar_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_NET_PFVAR_H 1" >>confdefs.h
+
+else $as_nop
+
+ # mnl
# Check whether --with-libmnl was given.
if test ${with_libmnl+y}
@@ -24244,13 +24418,13 @@ else $as_nop
withval="yes"
fi
- found_libmnl="no"
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for libmnl" >&5
+ found_libmnl="no"
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for libmnl" >&5
printf %s "checking for libmnl... " >&6; }
- if test x_$withval = x_ -o x_$withval = x_yes; then
+ if test x_$withval = x_ -o x_$withval = x_yes; then
withval="/usr/local /opt/local /usr/lib /usr/pkg /usr/sfw /usr"
- fi
- for dir in $withval ; do
+ fi
+ for dir in $withval ; do
if test -f "$dir/include/libmnl/libmnl.h" -o -f "$dir/include/libmnl/libmnl/libmnl.h"; then
found_libmnl="yes"
extralibmnl=""
@@ -24268,10 +24442,14 @@ printf "%s\n" "found in $dir" >&6; }
LIBS="$LIBS -lmnl"
break;
fi
- done
- if test x_$found_libmnl != x_yes; then
- as_fn_error $? "Could not find libmnl, libmnl.h" "$LINENO" 5
- fi
+ done
+ if test x_$found_libmnl != x_yes; then
+ as_fn_error $? "Could not find libmnl, libmnl.h" "$LINENO" 5
+ fi
+
+fi
+
+done
;;
no|*)
# nothing
@@ -24466,7 +24644,7 @@ printf "%s\n" "#define MAXSYSLOGMSGLEN 10240" >>confdefs.h
-version=1.20.0
+version=1.21.0
date=`date +'%b %e, %Y'`
@@ -24978,7 +25156,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.20.0, which was
+This file was extended by unbound $as_me 1.21.0, which was
generated by GNU Autoconf 2.71. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -25046,7 +25224,7 @@ ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config='$ac_cs_config_escaped'
ac_cs_version="\\
-unbound config.status 1.20.0
+unbound config.status 1.21.0
configured by $0, generated by GNU Autoconf 2.71,
with options \\"\$ac_cs_config\\"
diff --git a/contrib/unbound.service.in b/contrib/unbound.service.in
index 5a05c525170f..8a5d3b2b0189 100644
--- a/contrib/unbound.service.in
+++ b/contrib/unbound.service.in
@@ -42,8 +42,8 @@
[Unit]
Description=Validating, recursive, and caching DNS resolver
Documentation=man:unbound(8)
-After=network.target
-Before=network-online.target nss-lookup.target
+After=network-online.target
+Before=nss-lookup.target
[Install]
WantedBy=multi-user.target
diff --git a/contrib/unbound_portable.service.in b/contrib/unbound_portable.service.in
index e763763f02e1..22cd4463861a 100644
--- a/contrib/unbound_portable.service.in
+++ b/contrib/unbound_portable.service.in
@@ -14,8 +14,8 @@
[Unit]
Description=Validating, recursive, and caching DNS resolver
Documentation=man:unbound(8)
-After=network.target
-Before=network-online.target nss-lookup.target
+After=network-online.target
+Before=nss-lookup.target
Wants=nss-lookup.target
[Install]
diff --git a/daemon/daemon.c b/daemon/daemon.c
index f0ee329db903..72b4a43be1ad 100644
--- a/daemon/daemon.c
+++ b/daemon/daemon.c
@@ -344,7 +344,7 @@ static int setup_acl_for_ports(struct acl_list* list,
return 1;
}
-int
+int
daemon_open_shared_ports(struct daemon* daemon)
{
log_assert(daemon);
@@ -444,6 +444,19 @@ daemon_open_shared_ports(struct daemon* daemon)
return 1;
}
+int
+daemon_privileged(struct daemon* daemon)
+{
+ daemon->env->cfg = daemon->cfg;
+ daemon->env->alloc = &daemon->superalloc;
+ daemon->env->worker = NULL;
+ if(!modstack_call_startup(&daemon->mods, daemon->cfg->module_conf,
+ daemon->env)) {
+ fatal_exit("failed to startup modules");
+ }
+ return 1;
+}
+
/**
* Setup modules. setup module stack.
* @param daemon: the daemon
@@ -453,11 +466,15 @@ static void daemon_setup_modules(struct daemon* daemon)
daemon->env->cfg = daemon->cfg;
daemon->env->alloc = &daemon->superalloc;
daemon->env->worker = NULL;
+ if(daemon->mods_inited) {
+ modstack_call_deinit(&daemon->mods, daemon->env);
+ }
daemon->env->need_to_validate = 0; /* set by module init below */
- if(!modstack_setup(&daemon->mods, daemon->cfg->module_conf,
+ if(!modstack_call_init(&daemon->mods, daemon->cfg->module_conf,
daemon->env)) {
- fatal_exit("failed to setup modules");
+ fatal_exit("failed to init modules");
}
+ daemon->mods_inited = 1;
log_edns_known_options(VERB_ALGO, daemon->env);
}
@@ -503,7 +520,10 @@ daemon_clear_allocs(struct daemon* daemon)
{
int i;
- for(i=0; i<daemon->num; i++) {
+ /* daemon->num may be different during reloads (after configuration
+ * read). Use old_num which has the correct value used to setup the
+ * worker_allocs */
+ for(i=0; i<daemon->old_num; i++) {
alloc_clear(daemon->worker_allocs[i]);
free(daemon->worker_allocs[i]);
}
@@ -715,6 +735,14 @@ daemon_fork(struct daemon* daemon)
"dnscrypt support");
#endif
}
+ if(daemon->cfg->cookie_secret_file &&
+ daemon->cfg->cookie_secret_file[0]) {
+ if(!(daemon->cookie_secrets = cookie_secrets_create()))
+ fatal_exit("Could not create cookie_secrets: out of memory");
+ if(!cookie_secrets_apply_cfg(daemon->cookie_secrets,
+ daemon->cfg->cookie_secret_file))
+ fatal_exit("Could not setup cookie_secrets");
+ }
/* create global local_zones */
if(!(daemon->local_zones = local_zones_create()))
fatal_exit("Could not create local zones: out of memory");
@@ -858,7 +886,7 @@ daemon_cleanup(struct daemon* daemon)
daemon->views = NULL;
if(daemon->env->auth_zones)
auth_zones_cleanup(daemon->env->auth_zones);
- /* key cache is cleared by module desetup during next daemon_fork() */
+ /* key cache is cleared by module deinit during next daemon_fork() */
daemon_remote_clear(daemon->rc);
for(i=0; i<daemon->num; i++)
worker_delete(daemon->workers[i]);
@@ -888,7 +916,9 @@ daemon_delete(struct daemon* daemon)
size_t i;
if(!daemon)
return;
- modstack_desetup(&daemon->mods, daemon->env);
+ modstack_call_deinit(&daemon->mods, daemon->env);
+ modstack_call_destartup(&daemon->mods, daemon->env);
+ modstack_free(&daemon->mods);
daemon_remote_delete(daemon->rc);
for(i = 0; i < daemon->num_ports; i++)
listening_ports_free(daemon->ports[i]);
@@ -907,6 +937,7 @@ daemon_delete(struct daemon* daemon)
acl_list_delete(daemon->acl);
acl_list_delete(daemon->acl_interface);
tcl_list_delete(daemon->tcl);
+ cookie_secrets_delete(daemon->cookie_secrets);
listen_desetup_locks();
free(daemon->chroot);
free(daemon->pidfile);
diff --git a/daemon/daemon.h b/daemon/daemon.h
index 57665446d41b..5c3a114cc7e6 100644
--- a/daemon/daemon.h
+++ b/daemon/daemon.h
@@ -58,6 +58,7 @@ struct ub_randstate;
struct daemon_remote;
struct respip_set;
struct shm_main_info;
+struct cookie_secrets;
#include "dnstap/dnstap_config.h"
#ifdef USE_DNSTAP
@@ -115,6 +116,8 @@ struct daemon {
struct module_env* env;
/** stack of module callbacks */
struct module_stack mods;
+ /** The module stack has been inited */
+ int mods_inited;
/** access control, which client IPs are allowed to connect */
struct acl_list* acl;
/** access control, which interfaces are allowed to connect */
@@ -146,6 +149,8 @@ struct daemon {
#endif
/** reuse existing cache on reload if other conditions allow it. */
int reuse_cache;
+ /** the EDNS cookie secrets from the cookie-secret-file */
+ struct cookie_secrets* cookie_secrets;
};
/**
@@ -163,6 +168,15 @@ struct daemon* daemon_init(void);
int daemon_open_shared_ports(struct daemon* daemon);
/**
+ * Do daemon setup that needs privileges
+ * like opening privileged ports or opening device files.
+ * The cfg member pointer must have been set for the daemon.
+ * @param daemon: the daemon.
+ * @return: false on error.
+ */
+int daemon_privileged(struct daemon* daemon);
+
+/**
* Fork workers and start service.
* When the routine exits, it is no longer forked.
* @param daemon: the daemon.
diff --git a/daemon/remote.c b/daemon/remote.c
index 764ae8ffda3c..855b1f963b23 100644
--- a/daemon/remote.c
+++ b/daemon/remote.c
@@ -88,6 +88,10 @@
#include "sldns/wire2str.h"
#include "sldns/sbuffer.h"
#include "util/timeval_func.h"
+#include "util/edns.h"
+#ifdef USE_CACHEDB
+#include "cachedb/cachedb.h"
+#endif
#ifdef HAVE_SYS_TYPES_H
# include <sys/types.h>
@@ -107,6 +111,10 @@
/** what to put on statistics lines between var and value, ": " or "=" */
#define SQ "="
+/** Acceptable lengths of str lines */
+#define MAX_CMD_STRLINE 1024
+#define MAX_STDIN_STRLINE 2048
+
static int
remote_setup_ctx(struct daemon_remote* rc, struct config_file* cfg)
{
@@ -633,6 +641,25 @@ static void send_ok(RES* ssl)
(void)ssl_printf(ssl, "ok\n");
}
+/** tell other processes to execute the command */
+static void
+distribute_cmd(struct daemon_remote* rc, RES* ssl, char* cmd)
+{
+ int i;
+ if(!cmd || !ssl)
+ return;
+ /* skip i=0 which is me */
+ for(i=1; i<rc->worker->daemon->num; i++) {
+ worker_send_cmd(rc->worker->daemon->workers[i],
+ worker_cmd_remote);
+ if(!tube_write_msg(rc->worker->daemon->workers[i]->cmd,
+ (uint8_t*)cmd, strlen(cmd)+1, 0)) {
+ (void)ssl_printf(ssl, "error could not distribute cmd\n");
+ return;
+ }
+ }
+}
+
/** do the stop command */
static void
do_stop(RES* ssl, struct worker* worker)
@@ -1220,19 +1247,28 @@ do_zone_add(RES* ssl, struct local_zones* zones, char* arg)
/** Do the local_zones command */
static void
-do_zones_add(RES* ssl, struct local_zones* zones)
+do_zones_add(struct daemon_remote* rc, RES* ssl, struct worker* worker)
{
- char buf[2048];
+ char buf[MAX_CMD_STRLINE + MAX_STDIN_STRLINE] = "local_zone ";
int num = 0;
- while(ssl_read_line(ssl, buf, sizeof(buf))) {
- if(buf[0] == 0 || (buf[0] == 0x04 && buf[1] == 0))
+ size_t cmd_len = strlen(buf);
+ while(ssl_read_line(ssl, buf+cmd_len, MAX_STDIN_STRLINE)) {
+ if(buf[0+cmd_len] == 0 ||
+ (buf[0+cmd_len] == 0x04 && buf[1+cmd_len] == 0))
break; /* zero byte line or end of transmission */
- if(!perform_zone_add(ssl, zones, buf)) {
- if(!ssl_printf(ssl, "error for input line: %s\n", buf))
+#ifdef THREADS_DISABLED
+ /* distribute single item command */
+ if(rc) distribute_cmd(rc, ssl, buf);
+#else
+ (void)rc; /* unused */
+#endif
+ if(!perform_zone_add(ssl, worker->daemon->local_zones,
+ buf+cmd_len)) {
+ if(!ssl_printf(ssl, "error for input line: %s\n",
+ buf+cmd_len))
return;
}
- else
- num++;
+ else num++;
}
(void)ssl_printf(ssl, "added %d zones\n", num);
}
@@ -1269,19 +1305,28 @@ do_zone_remove(RES* ssl, struct local_zones* zones, char* arg)
/** Do the local_zones_remove command */
static void
-do_zones_remove(RES* ssl, struct local_zones* zones)
+do_zones_remove(struct daemon_remote* rc, RES* ssl, struct worker* worker)
{
- char buf[2048];
+ char buf[MAX_CMD_STRLINE + MAX_STDIN_STRLINE] = "local_zone_remove ";
int num = 0;
- while(ssl_read_line(ssl, buf, sizeof(buf))) {
- if(buf[0] == 0 || (buf[0] == 0x04 && buf[1] == 0))
+ size_t cmd_len = strlen(buf);
+ while(ssl_read_line(ssl, buf+cmd_len, MAX_STDIN_STRLINE)) {
+ if(buf[0+cmd_len] == 0 ||
+ (buf[0+cmd_len] == 0x04 && buf[1+cmd_len] == 0))
break; /* zero byte line or end of transmission */
- if(!perform_zone_remove(ssl, zones, buf)) {
- if(!ssl_printf(ssl, "error for input line: %s\n", buf))
+#ifdef THREADS_DISABLED
+ /* distribute single item command */
+ if(rc) distribute_cmd(rc, ssl, buf);
+#else
+ (void)rc; /* unused */
+#endif
+ if(!perform_zone_remove(ssl, worker->daemon->local_zones,
+ buf+cmd_len)) {
+ if(!ssl_printf(ssl, "error for input line: %s\n",
+ buf+cmd_len))
return;
}
- else
- num++;
+ else num++;
}
(void)ssl_printf(ssl, "removed %d zones\n", num);
}
@@ -1333,15 +1378,24 @@ do_data_add(RES* ssl, struct local_zones* zones, char* arg)
/** Do the local_datas command */
static void
-do_datas_add(RES* ssl, struct local_zones* zones)
+do_datas_add(struct daemon_remote* rc, RES* ssl, struct worker* worker)
{
- char buf[2048];
+ char buf[MAX_CMD_STRLINE + MAX_STDIN_STRLINE] = "local_data ";
int num = 0, line = 0;
- while(ssl_read_line(ssl, buf, sizeof(buf))) {
- if(buf[0] == 0 || (buf[0] == 0x04 && buf[1] == 0))
+ size_t cmd_len = strlen(buf);
+ while(ssl_read_line(ssl, buf+cmd_len, MAX_STDIN_STRLINE)) {
+ if(buf[0+cmd_len] == 0 ||
+ (buf[0+cmd_len] == 0x04 && buf[1+cmd_len] == 0))
break; /* zero byte line or end of transmission */
+#ifdef THREADS_DISABLED
+ /* distribute single item command */
+ if(rc) distribute_cmd(rc, ssl, buf);
+#else
+ (void)rc; /* unused */
+#endif
line++;
- if(perform_data_add(ssl, zones, buf, line))
+ if(perform_data_add(ssl, worker->daemon->local_zones,
+ buf+cmd_len, line))
num++;
}
(void)ssl_printf(ssl, "added %d datas\n", num);
@@ -1373,19 +1427,28 @@ do_data_remove(RES* ssl, struct local_zones* zones, char* arg)
/** Do the local_datas_remove command */
static void
-do_datas_remove(RES* ssl, struct local_zones* zones)
+do_datas_remove(struct daemon_remote* rc, RES* ssl, struct worker* worker)
{
- char buf[2048];
+ char buf[MAX_CMD_STRLINE + MAX_STDIN_STRLINE] = "local_data_remove ";
int num = 0;
- while(ssl_read_line(ssl, buf, sizeof(buf))) {
- if(buf[0] == 0 || (buf[0] == 0x04 && buf[1] == 0))
+ size_t cmd_len = strlen(buf);
+ while(ssl_read_line(ssl, buf+cmd_len, MAX_STDIN_STRLINE)) {
+ if(buf[0+cmd_len] == 0 ||
+ (buf[0+cmd_len] == 0x04 && buf[1+cmd_len] == 0))
break; /* zero byte line or end of transmission */
- if(!perform_data_remove(ssl, zones, buf)) {
- if(!ssl_printf(ssl, "error for input line: %s\n", buf))
+#ifdef THREADS_DISABLED
+ /* distribute single item command */
+ if(rc) distribute_cmd(rc, ssl, buf);
+#else
+ (void)rc; /* unused */
+#endif
+ if(!perform_data_remove(ssl, worker->daemon->local_zones,
+ buf+cmd_len)) {
+ if(!ssl_printf(ssl, "error for input line: %s\n",
+ buf+cmd_len))
return;
}
- else
- num++;
+ else num++;
}
(void)ssl_printf(ssl, "removed %d datas\n", num);
}
@@ -1473,9 +1536,13 @@ do_view_data_add(RES* ssl, struct worker* worker, char* arg)
/** Add new RR data from stdin to view */
static void
-do_view_datas_add(RES* ssl, struct worker* worker, char* arg)
+do_view_datas_add(struct daemon_remote* rc, RES* ssl, struct worker* worker,
+ char* arg)
{
struct view* v;
+ char buf[MAX_CMD_STRLINE + MAX_STDIN_STRLINE] = "view_local_data ";
+ size_t cmd_len;
+ int num = 0, line = 0;
v = views_find_view(worker->daemon->views,
arg, 1 /* get write lock*/);
if(!v) {
@@ -1489,8 +1556,25 @@ do_view_datas_add(RES* ssl, struct worker* worker, char* arg)
return;
}
}
- do_datas_add(ssl, v->local_zones);
+ /* put the view name in the command buf */
+ (void)snprintf(buf+strlen(buf), sizeof(buf)-strlen(buf), "%s ", arg);
+ cmd_len = strlen(buf);
+ while(ssl_read_line(ssl, buf+cmd_len, MAX_STDIN_STRLINE)) {
+ if(buf[0+cmd_len] == 0 ||
+ (buf[0+cmd_len] == 0x04 && buf[1+cmd_len] == 0))
+ break; /* zero byte line or end of transmission */
+#ifdef THREADS_DISABLED
+ /* distribute single item command */
+ if(rc) distribute_cmd(rc, ssl, buf);
+#else
+ (void)rc; /* unused */
+#endif
+ line++;
+ if(perform_data_add(ssl, v->local_zones, buf+cmd_len, line))
+ num++;
+ }
lock_rw_unlock(&v->lock);
+ (void)ssl_printf(ssl, "added %d datas\n", num);
}
/** Remove RR data from view */
@@ -1518,9 +1602,13 @@ do_view_data_remove(RES* ssl, struct worker* worker, char* arg)
/** Remove RR data from stdin from view */
static void
-do_view_datas_remove(RES* ssl, struct worker* worker, char* arg)
+do_view_datas_remove(struct daemon_remote* rc, RES* ssl, struct worker* worker,
+ char* arg)
{
struct view* v;
+ char buf[MAX_CMD_STRLINE + MAX_STDIN_STRLINE] = "view_local_data_remove ";
+ int num = 0;
+ size_t cmd_len;
v = views_find_view(worker->daemon->views,
arg, 1 /* get write lock*/);
if(!v) {
@@ -1532,9 +1620,28 @@ do_view_datas_remove(RES* ssl, struct worker* worker, char* arg)
ssl_printf(ssl, "removed 0 datas\n");
return;
}
-
- do_datas_remove(ssl, v->local_zones);
+ /* put the view name in the command buf */
+ (void)snprintf(buf+strlen(buf), sizeof(buf)-strlen(buf), "%s ", arg);
+ cmd_len = strlen(buf);
+ while(ssl_read_line(ssl, buf+cmd_len, MAX_STDIN_STRLINE)) {
+ if(buf[0+cmd_len] == 0 ||
+ (buf[0+cmd_len] == 0x04 && buf[1+cmd_len] == 0))
+ break; /* zero byte line or end of transmission */
+#ifdef THREADS_DISABLED
+ /* distribute single item command */
+ if(rc) distribute_cmd(rc, ssl, buf);
+#else
+ (void)rc; /* unused */
+#endif
+ if(!perform_data_remove(ssl, v->local_zones, buf+cmd_len)) {
+ if(!ssl_printf(ssl, "error for input line: %s\n",
+ buf+cmd_len))
+ return;
+ }
+ else num++;
+ }
lock_rw_unlock(&v->lock);
+ (void)ssl_printf(ssl, "removed %d datas\n", num);
}
/** cache lookup of nameservers */
@@ -1553,7 +1660,7 @@ do_lookup(RES* ssl, struct worker* worker, char* arg)
/** flush something from rrset and msg caches */
static void
do_cache_remove(struct worker* worker, uint8_t* nm, size_t nmlen,
- uint16_t t, uint16_t c)
+ uint16_t t, uint16_t c, int remcachedb)
{
hashvalue_type h;
struct query_info k;
@@ -1573,6 +1680,29 @@ do_cache_remove(struct worker* worker, uint8_t* nm, size_t nmlen,
h = query_info_hash(&k, BIT_CD);
slabhash_remove(worker->env.msg_cache, h, &k);
}
+#ifdef USE_CACHEDB
+ if(remcachedb && worker->env.cachedb_enabled)
+ cachedb_msg_remove_qinfo(&worker->env, &k);
+#else
+ (void)remcachedb;
+#endif
+}
+
+/** parse '+c' option, modifies string to return remainder. */
+static int
+parse_remcachedb(RES* ssl, char** arg, int* pc)
+{
+ *arg = skipwhite(*arg);
+ if((*arg)[0] == '+' && (*arg)[1] == 'c') {
+ char* arg2;
+ *pc = 1;
+ if(!find_arg2(ssl, *arg, &arg2))
+ return 0;
+ *arg = arg2;
+ return 1;
+ }
+ /* The option was not found, no problem */
+ return 1;
}
/** flush a type */
@@ -1584,15 +1714,20 @@ do_flush_type(RES* ssl, struct worker* worker, char* arg)
size_t nmlen;
char* arg2;
uint16_t t;
+ int pc = 0; /* '+c' option */
+ if(!parse_remcachedb(ssl, &arg, &pc))
+ return;
if(!find_arg2(ssl, arg, &arg2))
return;
if(!parse_arg_name(ssl, arg, &nm, &nmlen, &nmlabs))
return;
t = sldns_get_rr_type_by_name(arg2);
if(t == 0 && strcmp(arg2, "TYPE0") != 0) {
+ (void)ssl_printf(ssl, "error parsing RRset type: '%s'\n", arg2);
+ free(nm);
return;
}
- do_cache_remove(worker, nm, nmlen, t, LDNS_RR_CLASS_IN);
+ do_cache_remove(worker, nm, nmlen, t, LDNS_RR_CLASS_IN, pc);
free(nm);
send_ok(ssl);
@@ -1630,6 +1765,8 @@ struct del_info {
socklen_t addrlen;
/** socket address for host deletion */
struct sockaddr_storage addr;
+ /** if cachedb information should be flushed too */
+ int remcachedb;
};
/** callback to delete hosts in infra cache */
@@ -1681,6 +1818,7 @@ do_flush_infra(RES* ssl, struct worker* worker, char* arg)
inf.num_msgs = 0;
inf.num_keys = 0;
inf.addrlen = len;
+ inf.remcachedb = 0;
memmove(&inf.addr, &addr, len);
slabhash_traverse(worker->env.infra_cache->hosts, 1, &infra_del_host,
&inf);
@@ -1727,6 +1865,10 @@ zone_del_msg(struct lruhash_entry* e, void* arg)
d->serve_expired_ttl = inf->expired;
inf->num_msgs++;
}
+#ifdef USE_CACHEDB
+ if(inf->remcachedb && inf->worker->env.cachedb_enabled)
+ cachedb_msg_remove_qinfo(&inf->worker->env, &k->key);
+#endif
}
}
@@ -1754,6 +1896,9 @@ do_flush_zone(RES* ssl, struct worker* worker, char* arg)
int nmlabs;
size_t nmlen;
struct del_info inf;
+ int pc = 0; /* '+c' option */
+ if(!parse_remcachedb(ssl, &arg, &pc))
+ return;
if(!parse_arg_name(ssl, arg, &nm, &nmlen, &nmlabs))
return;
/* delete all RRs and key entries from zone */
@@ -1767,6 +1912,7 @@ do_flush_zone(RES* ssl, struct worker* worker, char* arg)
inf.num_rrsets = 0;
inf.num_msgs = 0;
inf.num_keys = 0;
+ inf.remcachedb = pc;
slabhash_traverse(&worker->env.rrset_cache->table, 1,
&zone_del_rrset, &inf);
@@ -1808,6 +1954,11 @@ bogus_del_msg(struct lruhash_entry* e, void* arg)
if(d->security == sec_status_bogus) {
d->ttl = inf->expired;
inf->num_msgs++;
+#ifdef USE_CACHEDB
+ if(inf->remcachedb && inf->worker->env.cachedb_enabled)
+ cachedb_msg_remove_qinfo(&inf->worker->env,
+ &((struct msgreply_entry*)e->key)->key);
+#endif
}
}
@@ -1826,9 +1977,12 @@ bogus_del_kcache(struct lruhash_entry* e, void* arg)
/** remove all bogus rrsets, msgs and keys from cache */
static void
-do_flush_bogus(RES* ssl, struct worker* worker)
+do_flush_bogus(RES* ssl, struct worker* worker, char* arg)
{
struct del_info inf;
+ int pc = 0; /* '+c' option */
+ if(!parse_remcachedb(ssl, &arg, &pc))
+ return;
/* what we do is to set them all expired */
inf.worker = worker;
inf.expired = *worker->env.now;
@@ -1836,6 +1990,7 @@ do_flush_bogus(RES* ssl, struct worker* worker)
inf.num_rrsets = 0;
inf.num_msgs = 0;
inf.num_keys = 0;
+ inf.remcachedb = pc;
slabhash_traverse(&worker->env.rrset_cache->table, 1,
&bogus_del_rrset, &inf);
@@ -1881,6 +2036,11 @@ negative_del_msg(struct lruhash_entry* e, void* arg)
if(FLAGS_GET_RCODE(d->flags) != 0 || d->an_numrrsets == 0) {
d->ttl = inf->expired;
inf->num_msgs++;
+#ifdef USE_CACHEDB
+ if(inf->remcachedb && inf->worker->env.cachedb_enabled)
+ cachedb_msg_remove_qinfo(&inf->worker->env,
+ &((struct msgreply_entry*)e->key)->key);
+#endif
}
}
@@ -1901,9 +2061,12 @@ negative_del_kcache(struct lruhash_entry* e, void* arg)
/** remove all negative(NODATA,NXDOMAIN), and servfail messages from cache */
static void
-do_flush_negative(RES* ssl, struct worker* worker)
+do_flush_negative(RES* ssl, struct worker* worker, char* arg)
{
struct del_info inf;
+ int pc = 0; /* '+c' option */
+ if(!parse_remcachedb(ssl, &arg, &pc))
+ return;
/* what we do is to set them all expired */
inf.worker = worker;
inf.expired = *worker->env.now;
@@ -1911,6 +2074,7 @@ do_flush_negative(RES* ssl, struct worker* worker)
inf.num_rrsets = 0;
inf.num_msgs = 0;
inf.num_keys = 0;
+ inf.remcachedb = pc;
slabhash_traverse(&worker->env.rrset_cache->table, 1,
&negative_del_rrset, &inf);
@@ -1934,20 +2098,23 @@ do_flush_name(RES* ssl, struct worker* w, char* arg)
uint8_t* nm;
int nmlabs;
size_t nmlen;
+ int pc = 0; /* '+c' option */
+ if(!parse_remcachedb(ssl, &arg, &pc))
+ return;
if(!parse_arg_name(ssl, arg, &nm, &nmlen, &nmlabs))
return;
- do_cache_remove(w, nm, nmlen, LDNS_RR_TYPE_A, LDNS_RR_CLASS_IN);
- do_cache_remove(w, nm, nmlen, LDNS_RR_TYPE_AAAA, LDNS_RR_CLASS_IN);
- do_cache_remove(w, nm, nmlen, LDNS_RR_TYPE_NS, LDNS_RR_CLASS_IN);
- do_cache_remove(w, nm, nmlen, LDNS_RR_TYPE_SOA, LDNS_RR_CLASS_IN);
- do_cache_remove(w, nm, nmlen, LDNS_RR_TYPE_CNAME, LDNS_RR_CLASS_IN);
- do_cache_remove(w, nm, nmlen, LDNS_RR_TYPE_DNAME, LDNS_RR_CLASS_IN);
- do_cache_remove(w, nm, nmlen, LDNS_RR_TYPE_MX, LDNS_RR_CLASS_IN);
- do_cache_remove(w, nm, nmlen, LDNS_RR_TYPE_PTR, LDNS_RR_CLASS_IN);
- do_cache_remove(w, nm, nmlen, LDNS_RR_TYPE_SRV, LDNS_RR_CLASS_IN);
- do_cache_remove(w, nm, nmlen, LDNS_RR_TYPE_NAPTR, LDNS_RR_CLASS_IN);
- do_cache_remove(w, nm, nmlen, LDNS_RR_TYPE_SVCB, LDNS_RR_CLASS_IN);
- do_cache_remove(w, nm, nmlen, LDNS_RR_TYPE_HTTPS, LDNS_RR_CLASS_IN);
+ do_cache_remove(w, nm, nmlen, LDNS_RR_TYPE_A, LDNS_RR_CLASS_IN, pc);
+ do_cache_remove(w, nm, nmlen, LDNS_RR_TYPE_AAAA, LDNS_RR_CLASS_IN, pc);
+ do_cache_remove(w, nm, nmlen, LDNS_RR_TYPE_NS, LDNS_RR_CLASS_IN, pc);
+ do_cache_remove(w, nm, nmlen, LDNS_RR_TYPE_SOA, LDNS_RR_CLASS_IN, pc);
+ do_cache_remove(w, nm, nmlen, LDNS_RR_TYPE_CNAME, LDNS_RR_CLASS_IN, pc);
+ do_cache_remove(w, nm, nmlen, LDNS_RR_TYPE_DNAME, LDNS_RR_CLASS_IN, pc);
+ do_cache_remove(w, nm, nmlen, LDNS_RR_TYPE_MX, LDNS_RR_CLASS_IN, pc);
+ do_cache_remove(w, nm, nmlen, LDNS_RR_TYPE_PTR, LDNS_RR_CLASS_IN, pc);
+ do_cache_remove(w, nm, nmlen, LDNS_RR_TYPE_SRV, LDNS_RR_CLASS_IN, pc);
+ do_cache_remove(w, nm, nmlen, LDNS_RR_TYPE_NAPTR, LDNS_RR_CLASS_IN, pc);
+ do_cache_remove(w, nm, nmlen, LDNS_RR_TYPE_SVCB, LDNS_RR_CLASS_IN, pc);
+ do_cache_remove(w, nm, nmlen, LDNS_RR_TYPE_HTTPS, LDNS_RR_CLASS_IN, pc);
free(nm);
send_ok(ssl);
@@ -2070,7 +2237,7 @@ parse_delegpt(RES* ssl, char* args, uint8_t* nm)
return dp;
}
-/** do the status command */
+/** do the forward command */
static void
do_forward(RES* ssl, struct worker* worker, char* args)
{
@@ -3029,23 +3196,208 @@ do_rpz_disable(RES* ssl, struct worker* worker, char* arg)
do_rpz_enable_disable(ssl, worker, arg, 0);
}
-/** tell other processes to execute the command */
+/** Write the cookie secrets to file, returns `0` on failure.
+ * Caller has to hold the lock. */
+static int
+cookie_secret_file_dump(RES* ssl, struct worker* worker) {
+ char const* secret_file = worker->env.cfg->cookie_secret_file;
+ struct cookie_secrets* cookie_secrets = worker->daemon->cookie_secrets;
+ char secret_hex[UNBOUND_COOKIE_SECRET_SIZE * 2 + 1];
+ FILE* f;
+ size_t i;
+ if(secret_file == NULL || secret_file[0]==0) {
+ (void)ssl_printf(ssl, "error: no cookie secret file configured\n");
+ return 0;
+ }
+ log_assert( secret_file != NULL );
+
+ /* open write only and truncate */
+ if((f = fopen(secret_file, "w")) == NULL ) {
+ (void)ssl_printf(ssl, "unable to open cookie secret file %s: %s",
+ secret_file, strerror(errno));
+ return 0;
+ }
+ if(cookie_secrets == NULL) {
+ /* nothing to write */
+ fclose(f);
+ return 1;
+ }
+
+ for(i = 0; i < cookie_secrets->cookie_count; i++) {
+ struct cookie_secret const* cs = &cookie_secrets->
+ cookie_secrets[i];
+ ssize_t const len = hex_ntop(cs->cookie_secret,
+ UNBOUND_COOKIE_SECRET_SIZE, secret_hex,
+ sizeof(secret_hex));
+ (void)len; /* silence unused variable warning with -DNDEBUG */
+ log_assert( len == UNBOUND_COOKIE_SECRET_SIZE * 2 );
+ secret_hex[UNBOUND_COOKIE_SECRET_SIZE * 2] = '\0';
+ fprintf(f, "%s\n", secret_hex);
+ }
+ explicit_bzero(secret_hex, sizeof(secret_hex));
+ fclose(f);
+ return 1;
+}
+
+/** Activate cookie secret */
static void
-distribute_cmd(struct daemon_remote* rc, RES* ssl, char* cmd)
-{
- int i;
- if(!cmd || !ssl)
+do_activate_cookie_secret(RES* ssl, struct worker* worker) {
+ char const* secret_file = worker->env.cfg->cookie_secret_file;
+ struct cookie_secrets* cookie_secrets = worker->daemon->cookie_secrets;
+
+ if(secret_file == NULL || secret_file[0] == 0) {
+ (void)ssl_printf(ssl, "error: no cookie secret file configured\n");
return;
- /* skip i=0 which is me */
- for(i=1; i<rc->worker->daemon->num; i++) {
- worker_send_cmd(rc->worker->daemon->workers[i],
- worker_cmd_remote);
- if(!tube_write_msg(rc->worker->daemon->workers[i]->cmd,
- (uint8_t*)cmd, strlen(cmd)+1, 0)) {
- ssl_printf(ssl, "error could not distribute cmd\n");
+ }
+ if(cookie_secrets == NULL) {
+ (void)ssl_printf(ssl, "error: there are no cookie_secrets.");
+ return;
+ }
+ lock_basic_lock(&cookie_secrets->lock);
+
+ if(cookie_secrets->cookie_count <= 1 ) {
+ lock_basic_unlock(&cookie_secrets->lock);
+ (void)ssl_printf(ssl, "error: no staging cookie secret to activate\n");
+ return;
+ }
+ /* Only the worker 0 writes to file, the others update state. */
+ if(worker->thread_num == 0 && !cookie_secret_file_dump(ssl, worker)) {
+ lock_basic_unlock(&cookie_secrets->lock);
+ (void)ssl_printf(ssl, "error: writing to cookie secret file: \"%s\"\n",
+ secret_file);
+ return;
+ }
+ activate_cookie_secret(cookie_secrets);
+ if(worker->thread_num == 0)
+ (void)cookie_secret_file_dump(ssl, worker);
+ lock_basic_unlock(&cookie_secrets->lock);
+ send_ok(ssl);
+}
+
+/** Drop cookie secret */
+static void
+do_drop_cookie_secret(RES* ssl, struct worker* worker) {
+ char const* secret_file = worker->env.cfg->cookie_secret_file;
+ struct cookie_secrets* cookie_secrets = worker->daemon->cookie_secrets;
+
+ if(secret_file == NULL || secret_file[0] == 0) {
+ (void)ssl_printf(ssl, "error: no cookie secret file configured\n");
+ return;
+ }
+ if(cookie_secrets == NULL) {
+ (void)ssl_printf(ssl, "error: there are no cookie_secrets.");
+ return;
+ }
+ lock_basic_lock(&cookie_secrets->lock);
+
+ if(cookie_secrets->cookie_count <= 1 ) {
+ lock_basic_unlock(&cookie_secrets->lock);
+ (void)ssl_printf(ssl, "error: can not drop the currently active cookie secret\n");
+ return;
+ }
+ /* Only the worker 0 writes to file, the others update state. */
+ if(worker->thread_num == 0 && !cookie_secret_file_dump(ssl, worker)) {
+ lock_basic_unlock(&cookie_secrets->lock);
+ (void)ssl_printf(ssl, "error: writing to cookie secret file: \"%s\"\n",
+ secret_file);
+ return;
+ }
+ drop_cookie_secret(cookie_secrets);
+ if(worker->thread_num == 0)
+ (void)cookie_secret_file_dump(ssl, worker);
+ lock_basic_unlock(&cookie_secrets->lock);
+ send_ok(ssl);
+}
+
+/** Add cookie secret */
+static void
+do_add_cookie_secret(RES* ssl, struct worker* worker, char* arg) {
+ uint8_t secret[UNBOUND_COOKIE_SECRET_SIZE];
+ char const* secret_file = worker->env.cfg->cookie_secret_file;
+ struct cookie_secrets* cookie_secrets = worker->daemon->cookie_secrets;
+
+ if(secret_file == NULL || secret_file[0] == 0) {
+ (void)ssl_printf(ssl, "error: no cookie secret file configured\n");
+ return;
+ }
+ if(cookie_secrets == NULL) {
+ worker->daemon->cookie_secrets = cookie_secrets_create();
+ if(!worker->daemon->cookie_secrets) {
+ (void)ssl_printf(ssl, "error: out of memory");
return;
}
+ cookie_secrets = worker->daemon->cookie_secrets;
+ }
+ lock_basic_lock(&cookie_secrets->lock);
+
+ if(*arg == '\0') {
+ lock_basic_unlock(&cookie_secrets->lock);
+ (void)ssl_printf(ssl, "error: missing argument (cookie_secret)\n");
+ return;
+ }
+ if(strlen(arg) != 32) {
+ lock_basic_unlock(&cookie_secrets->lock);
+ explicit_bzero(arg, strlen(arg));
+ (void)ssl_printf(ssl, "invalid cookie secret: invalid argument length\n");
+ (void)ssl_printf(ssl, "please provide a 128bit hex encoded secret\n");
+ return;
}
+ if(hex_pton(arg, secret, UNBOUND_COOKIE_SECRET_SIZE) !=
+ UNBOUND_COOKIE_SECRET_SIZE ) {
+ lock_basic_unlock(&cookie_secrets->lock);
+ explicit_bzero(secret, UNBOUND_COOKIE_SECRET_SIZE);
+ explicit_bzero(arg, strlen(arg));
+ (void)ssl_printf(ssl, "invalid cookie secret: parse error\n");
+ (void)ssl_printf(ssl, "please provide a 128bit hex encoded secret\n");
+ return;
+ }
+ /* Only the worker 0 writes to file, the others update state. */
+ if(worker->thread_num == 0 && !cookie_secret_file_dump(ssl, worker)) {
+ lock_basic_unlock(&cookie_secrets->lock);
+ explicit_bzero(secret, UNBOUND_COOKIE_SECRET_SIZE);
+ explicit_bzero(arg, strlen(arg));
+ (void)ssl_printf(ssl, "error: writing to cookie secret file: \"%s\"\n",
+ secret_file);
+ return;
+ }
+ add_cookie_secret(cookie_secrets, secret, UNBOUND_COOKIE_SECRET_SIZE);
+ explicit_bzero(secret, UNBOUND_COOKIE_SECRET_SIZE);
+ if(worker->thread_num == 0)
+ (void)cookie_secret_file_dump(ssl, worker);
+ lock_basic_unlock(&cookie_secrets->lock);
+ explicit_bzero(arg, strlen(arg));
+ send_ok(ssl);
+}
+
+/** Print cookie secrets */
+static void
+do_print_cookie_secrets(RES* ssl, struct worker* worker) {
+ struct cookie_secrets* cookie_secrets = worker->daemon->cookie_secrets;
+ char secret_hex[UNBOUND_COOKIE_SECRET_SIZE * 2 + 1];
+ int i;
+
+ if(!cookie_secrets)
+ return; /* Output is empty. */
+ lock_basic_lock(&cookie_secrets->lock);
+ for(i = 0; (size_t)i < cookie_secrets->cookie_count; i++) {
+ struct cookie_secret const* cs = &cookie_secrets->
+ cookie_secrets[i];
+ ssize_t const len = hex_ntop(cs->cookie_secret,
+ UNBOUND_COOKIE_SECRET_SIZE, secret_hex,
+ sizeof(secret_hex));
+ (void)len; /* silence unused variable warning with -DNDEBUG */
+ log_assert( len == UNBOUND_COOKIE_SECRET_SIZE * 2 );
+ secret_hex[UNBOUND_COOKIE_SECRET_SIZE * 2] = '\0';
+ if (i == 0)
+ (void)ssl_printf(ssl, "active : %s\n", secret_hex);
+ else if (cookie_secrets->cookie_count == 2)
+ (void)ssl_printf(ssl, "staging: %s\n", secret_hex);
+ else
+ (void)ssl_printf(ssl, "staging[%d]: %s\n", i,
+ secret_hex);
+ }
+ lock_basic_unlock(&cookie_secrets->lock);
+ explicit_bzero(secret_hex, sizeof(secret_hex));
}
/** check for name with end-of-string, space or tab after it */
@@ -3081,9 +3433,23 @@ execute_cmd(struct daemon_remote* rc, RES* ssl, char* cmd,
do_status(ssl, worker);
return;
} else if(cmdcmp(p, "dump_cache", 10)) {
+#ifdef THREADS_DISABLED
+ if(worker->daemon->num > 1) {
+ (void)ssl_printf(ssl, "dump_cache/load_cache is not "
+ "supported in multi-process operation\n");
+ return;
+ }
+#endif
(void)dump_cache(ssl, worker);
return;
} else if(cmdcmp(p, "load_cache", 10)) {
+#ifdef THREADS_DISABLED
+ if(worker->daemon->num > 1) {
+ /* The warning can't be printed when stdin is sending
+ * data; just return */
+ return;
+ }
+#endif
if(load_cache(ssl, worker)) send_ok(ssl);
return;
} else if(cmdcmp(p, "list_forwards", 13)) {
@@ -3145,6 +3511,30 @@ execute_cmd(struct daemon_remote* rc, RES* ssl, char* cmd,
} else if(cmdcmp(p, "lookup", 6)) {
do_lookup(ssl, worker, skipwhite(p+6));
return;
+ /* The following are commands that read stdin.
+ * Each line needs to be distributed if THREADS_DISABLED.
+ */
+ } else if(cmdcmp(p, "local_zones_remove", 18)) {
+ do_zones_remove(rc, ssl, worker);
+ return;
+ } else if(cmdcmp(p, "local_zones", 11)) {
+ do_zones_add(rc, ssl, worker);
+ return;
+ } else if(cmdcmp(p, "local_datas_remove", 18)) {
+ do_datas_remove(rc, ssl, worker);
+ return;
+ } else if(cmdcmp(p, "local_datas", 11)) {
+ do_datas_add(rc, ssl, worker);
+ return;
+ } else if(cmdcmp(p, "view_local_datas_remove", 23)){
+ do_view_datas_remove(rc, ssl, worker, skipwhite(p+23));
+ return;
+ } else if(cmdcmp(p, "view_local_datas", 16)) {
+ do_view_datas_add(rc, ssl, worker, skipwhite(p+16));
+ return;
+ } else if(cmdcmp(p, "print_cookie_secrets", 20)) {
+ do_print_cookie_secrets(ssl, worker);
+ return;
}
#ifdef THREADS_DISABLED
@@ -3159,20 +3549,12 @@ execute_cmd(struct daemon_remote* rc, RES* ssl, char* cmd,
do_verbosity(ssl, skipwhite(p+9));
} else if(cmdcmp(p, "local_zone_remove", 17)) {
do_zone_remove(ssl, worker->daemon->local_zones, skipwhite(p+17));
- } else if(cmdcmp(p, "local_zones_remove", 18)) {
- do_zones_remove(ssl, worker->daemon->local_zones);
} else if(cmdcmp(p, "local_zone", 10)) {
do_zone_add(ssl, worker->daemon->local_zones, skipwhite(p+10));
- } else if(cmdcmp(p, "local_zones", 11)) {
- do_zones_add(ssl, worker->daemon->local_zones);
} else if(cmdcmp(p, "local_data_remove", 17)) {
do_data_remove(ssl, worker->daemon->local_zones, skipwhite(p+17));
- } else if(cmdcmp(p, "local_datas_remove", 18)) {
- do_datas_remove(ssl, worker->daemon->local_zones);
} else if(cmdcmp(p, "local_data", 10)) {
do_data_add(ssl, worker->daemon->local_zones, skipwhite(p+10));
- } else if(cmdcmp(p, "local_datas", 11)) {
- do_datas_add(ssl, worker->daemon->local_zones);
} else if(cmdcmp(p, "forward_add", 11)) {
do_forward_add(ssl, worker, skipwhite(p+11));
} else if(cmdcmp(p, "forward_remove", 14)) {
@@ -3189,12 +3571,8 @@ execute_cmd(struct daemon_remote* rc, RES* ssl, char* cmd,
do_view_zone_add(ssl, worker, skipwhite(p+15));
} else if(cmdcmp(p, "view_local_data_remove", 22)) {
do_view_data_remove(ssl, worker, skipwhite(p+22));
- } else if(cmdcmp(p, "view_local_datas_remove", 23)){
- do_view_datas_remove(ssl, worker, skipwhite(p+23));
} else if(cmdcmp(p, "view_local_data", 15)) {
do_view_data_add(ssl, worker, skipwhite(p+15));
- } else if(cmdcmp(p, "view_local_datas", 16)) {
- do_view_datas_add(ssl, worker, skipwhite(p+16));
} else if(cmdcmp(p, "flush_zone", 10)) {
do_flush_zone(ssl, worker, skipwhite(p+10));
} else if(cmdcmp(p, "flush_type", 10)) {
@@ -3214,13 +3592,19 @@ execute_cmd(struct daemon_remote* rc, RES* ssl, char* cmd,
} else if(cmdcmp(p, "get_option", 10)) {
do_get_option(ssl, worker, skipwhite(p+10));
} else if(cmdcmp(p, "flush_bogus", 11)) {
- do_flush_bogus(ssl, worker);
+ do_flush_bogus(ssl, worker, skipwhite(p+11));
} else if(cmdcmp(p, "flush_negative", 14)) {
- do_flush_negative(ssl, worker);
+ do_flush_negative(ssl, worker, skipwhite(p+14));
} else if(cmdcmp(p, "rpz_enable", 10)) {
do_rpz_enable(ssl, worker, skipwhite(p+10));
} else if(cmdcmp(p, "rpz_disable", 11)) {
do_rpz_disable(ssl, worker, skipwhite(p+11));
+ } else if(cmdcmp(p, "add_cookie_secret", 17)) {
+ do_add_cookie_secret(ssl, worker, skipwhite(p+17));
+ } else if(cmdcmp(p, "drop_cookie_secret", 18)) {
+ do_drop_cookie_secret(ssl, worker);
+ } else if(cmdcmp(p, "activate_cookie_secret", 22)) {
+ do_activate_cookie_secret(ssl, worker);
} else {
(void)ssl_printf(ssl, "error unknown command '%s'\n", p);
}
@@ -3248,7 +3632,7 @@ handle_req(struct daemon_remote* rc, struct rc_state* s, RES* res)
int r;
char pre[10];
char magic[7];
- char buf[1024];
+ char buf[MAX_CMD_STRLINE];
#ifdef USE_WINSOCK
/* makes it possible to set the socket blocking again. */
/* basically removes it from winsock_event ... */
diff --git a/daemon/stats.c b/daemon/stats.c
index 4855bf1c1d2d..827110698970 100644
--- a/daemon/stats.c
+++ b/daemon/stats.c
@@ -391,6 +391,13 @@ void server_stats_obtain(struct worker* worker, struct worker* who,
else worker_send_cmd(who, worker_cmd_stats_noreset);
verbose(VERB_ALGO, "wait for stats reply");
if(tube_wait_timeout(worker->cmd, STATS_THREAD_WAIT) == 0) {
+#if defined(HAVE_PTHREAD) && defined(SIZEOF_PTHREAD_T) && defined(SIZEOF_UNSIGNED_LONG)
+# if SIZEOF_PTHREAD_T == SIZEOF_UNSIGNED_LONG
+ unsigned long pthid = 0;
+ if(verbosity >= VERB_OPS)
+ memcpy(&pthid, &who->thr_id, sizeof(unsigned long));
+# endif
+#endif
verbose(VERB_OPS, "no response from thread %d"
#ifdef HAVE_GETTID
" LWP %u"
@@ -407,7 +414,7 @@ void server_stats_obtain(struct worker* worker, struct worker* who,
#endif
#if defined(HAVE_PTHREAD) && defined(SIZEOF_PTHREAD_T) && defined(SIZEOF_UNSIGNED_LONG)
# if SIZEOF_PTHREAD_T == SIZEOF_UNSIGNED_LONG
- , (unsigned long)*((unsigned long*)&who->thr_id)
+ , pthid
# endif
#endif
);
diff --git a/daemon/unbound.c b/daemon/unbound.c
index d6c371571d75..306fe6caf927 100644
--- a/daemon/unbound.c
+++ b/daemon/unbound.c
@@ -473,7 +473,11 @@ perform_setup(struct daemon* daemon, struct config_file* cfg, int debug_mode,
#endif
#ifdef HAVE_GETPWNAM
struct passwd *pwd = NULL;
+#endif
+ if(!daemon_privileged(daemon))
+ fatal_exit("could not do privileged setup");
+#ifdef HAVE_GETPWNAM
if(cfg->username && cfg->username[0]) {
if((pwd = getpwnam(cfg->username)) == NULL)
fatal_exit("user '%s' does not exist.", cfg->username);
@@ -550,7 +554,7 @@ perform_setup(struct daemon* daemon, struct config_file* cfg, int debug_mode,
* because that creates privilege escape problems, with the
* pidfile writable by unprivileged users, but used by
* privileged users. */
- if(cfg->username && cfg->username[0])
+ if(!(cfg->username && cfg->username[0]))
checkoldpid(daemon->pidfile, pidinchroot);
}
#endif
diff --git a/daemon/worker.c b/daemon/worker.c
index b35fe65a3a64..5e6b2a656e2c 100644
--- a/daemon/worker.c
+++ b/daemon/worker.c
@@ -160,9 +160,11 @@ worker_mem_report(struct worker* ATTR_UNUSED(worker),
+ sizeof(worker->rndstate)
+ regional_get_mem(worker->scratchpad)
+ sizeof(*worker->env.scratch_buffer)
- + sldns_buffer_capacity(worker->env.scratch_buffer)
- + forwards_get_mem(worker->env.fwds)
- + hints_get_mem(worker->env.hints);
+ + sldns_buffer_capacity(worker->env.scratch_buffer);
+ if(worker->daemon->env->fwds)
+ log_info("forwards=%u", (unsigned)forwards_get_mem(worker->env.fwds));
+ if(worker->daemon->env->hints)
+ log_info("hints=%u", (unsigned)hints_get_mem(worker->env.hints));
if(worker->thread_num == 0)
me += acl_list_get_mem(worker->daemon->acl);
if(cur_serv) {
@@ -1571,7 +1573,8 @@ worker_handle_request(struct comm_point* c, void* arg, int error,
if((ret=parse_edns_from_query_pkt(
c->buffer, &edns, worker->env.cfg, c, repinfo,
(worker->env.now ? *worker->env.now : time(NULL)),
- worker->scratchpad)) != 0) {
+ worker->scratchpad,
+ worker->daemon->cookie_secrets)) != 0) {
struct edns_data reply_edns;
verbose(VERB_ALGO, "worker parse edns: formerror.");
log_addr(VERB_CLIENT, "from", &repinfo->client_addr,
diff --git a/dns64/dns64.c b/dns64/dns64.c
index 83fb027790e0..cfb6ce63e187 100644
--- a/dns64/dns64.c
+++ b/dns64/dns64.c
@@ -701,6 +701,7 @@ dns64_operate(struct module_qstate* qstate, enum module_ev event, int id,
iq->state = DNS64_NEW_QUERY;
iq->started_no_cache_store = qstate->no_cache_store;
qstate->no_cache_store = 1;
+ ATTR_FALLTHROUGH
/* fallthrough */
case module_event_pass:
qstate->ext_state[id] = handle_event_pass(qstate, id);
@@ -1044,8 +1045,8 @@ dns64_get_mem(struct module_env* env, int id)
*/
static struct module_func_block dns64_block = {
"dns64",
- &dns64_init, &dns64_deinit, &dns64_operate, &dns64_inform_super,
- &dns64_clear, &dns64_get_mem
+ NULL, NULL, &dns64_init, &dns64_deinit, &dns64_operate,
+ &dns64_inform_super, &dns64_clear, &dns64_get_mem
};
/**
diff --git a/dnstap/dnstap.c b/dnstap/dnstap.c
index 5cdda0c2d77e..cff308f93164 100644
--- a/dnstap/dnstap.c
+++ b/dnstap/dnstap.c
@@ -86,6 +86,31 @@ dt_pack(const Dnstap__Dnstap *d, void **buf, size_t *sz)
return 1;
}
+/** See if the message is sent due to dnstap sample rate */
+static int
+dt_sample_rate_limited(struct dt_env* env)
+{
+ lock_basic_lock(&env->sample_lock);
+ /* Sampling is every [n] packets. Where n==1, every packet is sent */
+ if(env->sample_rate > 1) {
+ int submit = 0;
+ /* if sampling is engaged... */
+ if (env->sample_rate_count > env->sample_rate) {
+ /* once the count passes the limit */
+ /* submit the message */
+ submit = 1;
+ /* and reset the count */
+ env->sample_rate_count = 0;
+ }
+ /* increment count regardless */
+ env->sample_rate_count++;
+ lock_basic_unlock(&env->sample_lock);
+ return !submit;
+ }
+ lock_basic_unlock(&env->sample_lock);
+ return 0;
+}
+
static void
dt_send(const struct dt_env *env, void *buf, size_t len_buf)
{
@@ -146,6 +171,7 @@ dt_create(struct config_file* cfg)
env = (struct dt_env *) calloc(1, sizeof(struct dt_env));
if (!env)
return NULL;
+ lock_basic_init(&env->sample_lock);
env->dtio = dt_io_thread_create();
if(!env->dtio) {
@@ -241,6 +267,12 @@ dt_apply_cfg(struct dt_env *env, struct config_file *cfg)
{
verbose(VERB_OPS, "dnstap Message/FORWARDER_RESPONSE enabled");
}
+ lock_basic_lock(&env->sample_lock);
+ if((env->sample_rate = (unsigned int)cfg->dnstap_sample_rate))
+ {
+ verbose(VERB_OPS, "dnstap SAMPLE_RATE enabled and set to \"%d\"", (int)env->sample_rate);
+ }
+ lock_basic_unlock(&env->sample_lock);
}
int
@@ -273,6 +305,7 @@ dt_delete(struct dt_env *env)
if (!env)
return;
dt_io_thread_delete(env->dtio);
+ lock_basic_destroy(&env->sample_lock);
free(env->identity);
free(env->version);
free(env);
@@ -409,6 +442,9 @@ dt_msg_send_client_query(struct dt_env *env,
struct dt_msg dm;
struct timeval qtime;
+ if(dt_sample_rate_limited(env))
+ return;
+
if(tstamp)
memcpy(&qtime, tstamp, sizeof(qtime));
else gettimeofday(&qtime, NULL);
@@ -447,6 +483,9 @@ dt_msg_send_client_response(struct dt_env *env,
struct dt_msg dm;
struct timeval rtime;
+ if(dt_sample_rate_limited(env))
+ return;
+
gettimeofday(&rtime, NULL);
/* type */
@@ -484,6 +523,9 @@ dt_msg_send_outside_query(struct dt_env *env,
struct timeval qtime;
uint16_t qflags;
+ if(dt_sample_rate_limited(env))
+ return;
+
gettimeofday(&qtime, NULL);
qflags = sldns_buffer_read_u16_at(qmsg, 2);
@@ -537,6 +579,9 @@ dt_msg_send_outside_response(struct dt_env *env,
struct dt_msg dm;
uint16_t qflags;
+ if(dt_sample_rate_limited(env))
+ return;
+
(void)qbuf_len; log_assert(qbuf_len >= sizeof(qflags));
memcpy(&qflags, qbuf, sizeof(qflags));
qflags = ntohs(qflags);
diff --git a/dnstap/dnstap.h b/dnstap/dnstap.h
index 77914c20c9cf..21c033697da1 100644
--- a/dnstap/dnstap.h
+++ b/dnstap/dnstap.h
@@ -39,6 +39,7 @@
#ifdef USE_DNSTAP
+#include "util/locks.h"
struct config_file;
struct sldns_buffer;
struct dt_msg_queue;
@@ -75,6 +76,13 @@ struct dt_env {
unsigned log_forwarder_query_messages : 1;
/** whether to log Message/FORWARDER_RESPONSE */
unsigned log_forwarder_response_messages : 1;
+
+ /** lock on sample count */
+ lock_basic_type sample_lock;
+ /** rate limit value from config, samples 1/N messages */
+ unsigned int sample_rate;
+ /** rate limit counter */
+ unsigned int sample_rate_count;
};
/**
diff --git a/dnstap/dnstap.m4 b/dnstap/dnstap.m4
index 80b7bc92c927..78d0dd68b762 100644
--- a/dnstap/dnstap.m4
+++ b/dnstap/dnstap.m4
@@ -34,41 +34,38 @@ AC_DEFUN([dt_DNSTAP],
LDFLAGS="$LDFLAGS -L$withval/lib"
],
[
- ifdef([PKG_CHECK_MODULES],
- [
- PKG_CHECK_MODULES([PROTOBUFC], [libprotobuf-c],
- [
- CFLAGS="$CFLAGS $PROTOBUFC_CFLAGS"
- LIBS="$LIBS $PROTOBUFC_LIBS"
- ],
- [
- # pkg-config failed; try falling back to known values
- # workaround for protobuf-c includes at old dir before protobuf-c-1.0.0
- if test -f /usr/include/google/protobuf-c/protobuf-c.h; then
- CFLAGS="$CFLAGS -I/usr/include/google"
+ if test -n "$PKG_CONFIG"; then
+ PKG_CHECK_MODULES([PROTOBUFC], [libprotobuf-c],
+ [
+ CFLAGS="$CFLAGS $PROTOBUFC_CFLAGS"
+ LIBS="$LIBS $PROTOBUFC_LIBS"
+ ],
+ [
+ # pkg-config failed; try falling back to known values
+ # workaround for protobuf-c includes at old dir before protobuf-c-1.0.0
+ if test -f /usr/include/google/protobuf-c/protobuf-c.h; then
+ CFLAGS="$CFLAGS -I/usr/include/google"
+ else
+ if test -f /usr/local/include/google/protobuf-c/protobuf-c.h; then
+ CFLAGS="$CFLAGS -I/usr/local/include/google"
+ LDFLAGS="$LDFLAGS -L/usr/local/lib"
else
- if test -f /usr/local/include/google/protobuf-c/protobuf-c.h; then
- CFLAGS="$CFLAGS -I/usr/local/include/google"
- LDFLAGS="$LDFLAGS -L/usr/local/lib"
- else
- AC_MSG_ERROR([The protobuf-c package was not found with pkg-config. Please install protobuf-c!])
- fi
+ AC_MSG_ERROR([The protobuf-c package was not found with pkg-config. Please install protobuf-c!])
fi
- ]
- )
- ],
- [
- # workaround for protobuf-c includes at old dir before protobuf-c-1.0.0
- if test -f /usr/include/google/protobuf-c/protobuf-c.h; then
- CFLAGS="$CFLAGS -I/usr/include/google"
- else
- if test -f /usr/local/include/google/protobuf-c/protobuf-c.h; then
- CFLAGS="$CFLAGS -I/usr/local/include/google"
- LDFLAGS="$LDFLAGS -L/usr/local/lib"
fi
+ ]
+ )
+ else
+ # workaround for protobuf-c includes at old dir before protobuf-c-1.0.0
+ if test -f /usr/include/google/protobuf-c/protobuf-c.h; then
+ CFLAGS="$CFLAGS -I/usr/include/google"
+ else
+ if test -f /usr/local/include/google/protobuf-c/protobuf-c.h; then
+ CFLAGS="$CFLAGS -I/usr/local/include/google"
+ LDFLAGS="$LDFLAGS -L/usr/local/lib"
fi
- ]
- )
+ fi
+ fi
]
)
AC_SEARCH_LIBS([protobuf_c_message_pack], [protobuf-c], [],
diff --git a/dnstap/dtstream.c b/dnstap/dtstream.c
index 69c951276ff0..2d5ab20f0c84 100644
--- a/dnstap/dtstream.c
+++ b/dnstap/dtstream.c
@@ -176,10 +176,7 @@ void
mq_wakeup_cb(void* arg)
{
struct dt_msg_queue* mq = (struct dt_msg_queue*)arg;
- /* even if the dtio is already active, because perhaps much
- * traffic suddenly, we leave the timer running to save on
- * managing it, the once a second timer is less work then
- * starting and stopping the timer frequently */
+
lock_basic_lock(&mq->dtio->wakeup_timer_lock);
mq->dtio->wakeup_timer_enabled = 0;
lock_basic_unlock(&mq->dtio->wakeup_timer_lock);
@@ -210,6 +207,8 @@ dt_msg_queue_start_timer(struct dt_msg_queue* mq, int wakeupnow)
lock_basic_lock(&mq->dtio->wakeup_timer_lock);
if(mq->dtio->wakeup_timer_enabled) {
if(wakeupnow) {
+ tv.tv_sec = 0;
+ tv.tv_usec = 0;
comm_timer_set(mq->wakeup_timer, &tv);
}
lock_basic_unlock(&mq->dtio->wakeup_timer_lock);
@@ -221,8 +220,14 @@ dt_msg_queue_start_timer(struct dt_msg_queue* mq, int wakeupnow)
if(!wakeupnow) {
tv.tv_sec = 1;
tv.tv_usec = 0;
+ /* If it is already set, keep it running. */
+ if(!comm_timer_is_set(mq->wakeup_timer))
+ comm_timer_set(mq->wakeup_timer, &tv);
+ } else {
+ tv.tv_sec = 0;
+ tv.tv_usec = 0;
+ comm_timer_set(mq->wakeup_timer, &tv);
}
- comm_timer_set(mq->wakeup_timer, &tv);
lock_basic_unlock(&mq->dtio->wakeup_timer_lock);
}
@@ -260,8 +265,9 @@ dt_msg_queue_submit(struct dt_msg_queue* mq, void* buf, size_t len)
/* acquire lock */
lock_basic_lock(&mq->lock);
- /* if list was empty, start timer for (eventual) wakeup */
- if(mq->first == NULL)
+ /* if list was empty, start timer for (eventual) wakeup,
+ * or if dtio is not writing now an eventual wakeup is needed. */
+ if(mq->first == NULL || !mq->dtio->event_added_is_write)
wakeupstarttimer = 1;
/* if list contains more than wakeupnum elements, wakeup now,
* or if list is (going to be) almost full */
@@ -1259,6 +1265,13 @@ static void dtio_sleep(struct dt_io_thread* dtio)
/* unregister the event polling for write, because there is
* nothing to be written */
(void)dtio_add_output_event_read(dtio);
+
+ /* Set wakeuptimer enabled off; so that the next worker thread that
+ * wants to log starts a timer if needed, since the writer thread
+ * has gone to sleep. */
+ lock_basic_lock(&dtio->wakeup_timer_lock);
+ dtio->wakeup_timer_enabled = 0;
+ lock_basic_unlock(&dtio->wakeup_timer_lock);
}
#ifdef HAVE_SSL
@@ -1322,7 +1335,11 @@ static int dtio_ssl_check_peer(struct dt_io_thread* dtio)
if((SSL_get_verify_mode(dtio->ssl)&SSL_VERIFY_PEER)) {
/* verification */
if(SSL_get_verify_result(dtio->ssl) == X509_V_OK) {
+#ifdef HAVE_SSL_GET1_PEER_CERTIFICATE
+ X509* x = SSL_get1_peer_certificate(dtio->ssl);
+#else
X509* x = SSL_get_peer_certificate(dtio->ssl);
+#endif
if(!x) {
verbose(VERB_ALGO, "dnstap io, %s, SSL "
"connection failed no certificate",
@@ -1347,7 +1364,11 @@ static int dtio_ssl_check_peer(struct dt_io_thread* dtio)
#endif
X509_free(x);
} else {
+#ifdef HAVE_SSL_GET1_PEER_CERTIFICATE
+ X509* x = SSL_get1_peer_certificate(dtio->ssl);
+#else
X509* x = SSL_get_peer_certificate(dtio->ssl);
+#endif
if(x) {
log_cert(VERB_ALGO, "dnstap io, peer "
"certificate", x);
@@ -1489,8 +1510,10 @@ void dtio_output_cb(int ATTR_UNUSED(fd), short bits, void* arg)
#endif
if((bits&UB_EV_READ || dtio->ssl_brief_write)) {
+#ifdef HAVE_SSL
if(dtio->ssl_brief_write)
(void)dtio_disable_brief_write(dtio);
+#endif
if(dtio->ready_frame_sent && !dtio->accept_frame_received) {
if(dtio_read_accept_frame(dtio) <= 0)
return;
@@ -1513,8 +1536,22 @@ void dtio_output_cb(int ATTR_UNUSED(fd), short bits, void* arg)
/* no messages on the first iteration,
* the queues are all empty */
dtio_sleep(dtio);
+ /* After putting to sleep, see if
+ * a message is in a message queue,
+ * if so, resume service. Stops a
+ * race condition where a thread could
+ * have one message but the dtio
+ * also just went to sleep. With the
+ * message queued between the
+ * dtio_find_msg and dtio_sleep
+ * calls. */
+ if(dtio_find_msg(dtio)) {
+ if(!dtio_add_output_event_write(dtio))
+ return;
+ }
}
- return; /* nothing to do */
+ if(!dtio->cur_msg)
+ return; /* nothing to do */
}
}
diff --git a/dnstap/unbound-dnstap-socket.c b/dnstap/unbound-dnstap-socket.c
index 04fda74b80e1..f203aa7d73a1 100644
--- a/dnstap/unbound-dnstap-socket.c
+++ b/dnstap/unbound-dnstap-socket.c
@@ -75,17 +75,18 @@
static void usage(char* argv[])
{
printf("usage: %s [options]\n", argv[0]);
- printf(" Listen to dnstap messages\n");
+ printf(" Listen to dnstap messages\n");
printf("stdout has dnstap log, stderr has verbose server log\n");
- printf("-u <socketpath> listen to unix socket with this file name\n");
- printf("-s <serverip[@port]> listen for TCP on the IP and port\n");
- printf("-t <serverip[@port]> listen for TLS on IP and port\n");
- printf("-x <server.key> server key file for TLS service\n");
- printf("-y <server.pem> server cert file for TLS service\n");
- printf("-z <verify.pem> cert file to verify client connections\n");
- printf("-l long format for DNS printout\n");
- printf("-v more verbose log output\n");
- printf("-h this help text\n");
+ printf("-u <socketpath> listen to unix socket with this file name\n");
+ printf("-s <serverip[@port]> listen for TCP on the IP and port\n");
+ printf("-t <serverip[@port]> listen for TLS on IP and port\n");
+ printf("-x <server.key> server key file for TLS service\n");
+ printf("-y <server.pem> server cert file for TLS service\n");
+ printf("-z <verify.pem> cert file to verify client connections\n");
+ printf("-l long format for DNS printout\n");
+ printf("-v more verbose log output\n");
+ printf("-c internal unit test and exit\n");
+ printf("-h this help text\n");
exit(1);
}
@@ -102,6 +103,14 @@ struct main_tap_data {
struct tap_socket_list* acceptlist;
};
+/* list of data */
+struct tap_data_list {
+ /** next in list */
+ struct tap_data_list* next;
+ /** the data */
+ struct tap_data* d;
+};
+
/** tap callback variables */
struct tap_data {
/** the fd */
@@ -128,6 +137,10 @@ struct tap_data {
uint8_t* frame;
/** length of this frame */
size_t len;
+ /** back pointer to the tap_data_list entry;
+ * used to NULL the forward pointer to this data
+ * when this data is freed. */
+ struct tap_data_list* data_list;
};
/** list of sockets */
@@ -156,8 +169,89 @@ struct tap_socket {
char* ip;
/** for a TLS socket, the tls context */
SSL_CTX* sslctx;
+ /** dumb way to deal with memory leaks:
+ * tap_data was only freed on errors and not during exit leading to
+ * false positives when testing for memory leaks. */
+ struct tap_data_list* data_list;
};
+/** try to delete tail entries from the list if all of them have no data */
+static void tap_data_list_try_to_free_tail(struct tap_data_list* list)
+{
+ struct tap_data_list* current = list;
+ log_assert(!list->d);
+ if(!list->next) /* we are the last, we can't remove ourselves */
+ return;
+ list = list->next;
+ while(list) {
+ if(list->d) /* a tail entry still has data; return */
+ return;
+ list = list->next;
+ }
+ /* keep the next */
+ list = current->next;
+ /* the tail will be removed; but not ourselves */
+ current->next = NULL;
+ while(list) {
+ current = list;
+ list = list->next;
+ free(current);
+ }
+}
+
+/** delete the tap structure */
+static void tap_data_free(struct tap_data* data, int free_tail)
+{
+ if(!data)
+ return;
+ if(data->ev) {
+ ub_event_del(data->ev);
+ ub_event_free(data->ev);
+ }
+#ifdef HAVE_SSL
+ SSL_free(data->ssl);
+#endif
+ sock_close(data->fd);
+ free(data->id);
+ free(data->frame);
+ if(data->data_list) {
+ data->data_list->d = NULL;
+ if(free_tail)
+ tap_data_list_try_to_free_tail(data->data_list);
+ }
+ free(data);
+}
+
+/** insert tap_data in the tap_data_list */
+static int tap_data_list_insert(struct tap_data_list** liststart,
+ struct tap_data* d)
+{
+ struct tap_data_list* entry = (struct tap_data_list*)
+ malloc(sizeof(*entry));
+ if(!entry)
+ return 0;
+ entry->next = *liststart;
+ entry->d = d;
+ d->data_list = entry;
+ *liststart = entry;
+ return 1;
+}
+
+/** delete the tap_data_list and free any remaining tap_data */
+static void tap_data_list_delete(struct tap_data_list* list)
+{
+ struct tap_data_list* e = list, *next;
+ while(e) {
+ next = e->next;
+ if(e->d) {
+ tap_data_free(e->d, 0);
+ e->d = NULL;
+ }
+ free(e);
+ e = next;
+ }
+}
+
/** del the tap event */
static void tap_socket_delev(struct tap_socket* s)
{
@@ -173,7 +267,7 @@ static void tap_socket_close(struct tap_socket* s)
{
if(!s) return;
if(s->fd == -1) return;
- close(s->fd);
+ sock_close(s->fd);
s->fd = -1;
}
@@ -184,6 +278,7 @@ static void tap_socket_delete(struct tap_socket* s)
#ifdef HAVE_SSL
SSL_CTX_free(s->sslctx);
#endif
+ tap_data_list_delete(s->data_list);
ub_event_free(s->ev);
free(s->socketpath);
free(s->ip);
@@ -728,27 +823,12 @@ static ssize_t tap_receive(struct tap_data* data, void* buf, size_t len)
return receive_bytes(data, data->fd, buf, len);
}
-/** delete the tap structure */
-static void tap_data_free(struct tap_data* data)
-{
- ub_event_del(data->ev);
- ub_event_free(data->ev);
-#ifdef HAVE_SSL
- SSL_free(data->ssl);
-#endif
- close(data->fd);
- free(data->id);
- free(data->frame);
- free(data);
-}
-
/** reply with ACCEPT control frame to bidirectional client,
* returns 0 on error */
static int reply_with_accept(struct tap_data* data)
{
#ifdef USE_DNSTAP
/* len includes the escape and framelength */
- int r;
size_t len = 0;
void* acceptframe = fstrm_create_control_frame_accept(
DNSTAP_CONTENT_TYPE, &len);
@@ -759,6 +839,8 @@ static int reply_with_accept(struct tap_data* data)
fd_set_block(data->fd);
if(data->ssl) {
+#ifdef HAVE_SSL
+ int r;
if((r=SSL_write(data->ssl, acceptframe, len)) <= 0) {
int r2;
if((r2=SSL_get_error(data->ssl, r)) == SSL_ERROR_ZERO_RETURN)
@@ -769,6 +851,7 @@ static int reply_with_accept(struct tap_data* data)
free(acceptframe);
return 0;
}
+#endif
} else {
if(send(data->fd, acceptframe, len, 0) == -1) {
log_err("send failed: %s", sock_strerror(errno));
@@ -804,6 +887,7 @@ static int reply_with_finish(struct tap_data* data)
fd_set_block(data->fd);
if(data->ssl) {
+#ifdef HAVE_SSL
int r;
if((r=SSL_write(data->ssl, finishframe, len)) <= 0) {
int r2;
@@ -815,6 +899,7 @@ static int reply_with_finish(struct tap_data* data)
free(finishframe);
return 0;
}
+#endif
} else {
if(send(data->fd, finishframe, len, 0) == -1) {
log_err("send failed: %s", sock_strerror(errno));
@@ -842,7 +927,11 @@ static int tap_check_peer(struct tap_data* data)
if((SSL_get_verify_mode(data->ssl)&SSL_VERIFY_PEER)) {
/* verification */
if(SSL_get_verify_result(data->ssl) == X509_V_OK) {
+#ifdef HAVE_SSL_GET1_PEER_CERTIFICATE
+ X509* x = SSL_get1_peer_certificate(data->ssl);
+#else
X509* x = SSL_get_peer_certificate(data->ssl);
+#endif
if(!x) {
if(verbosity) log_info("SSL connection %s"
" failed no certificate", data->id);
@@ -864,7 +953,11 @@ static int tap_check_peer(struct tap_data* data)
#endif
X509_free(x);
} else {
+#ifdef HAVE_SSL_GET1_PEER_CERTIFICATE
+ X509* x = SSL_get1_peer_certificate(data->ssl);
+#else
X509* x = SSL_get_peer_certificate(data->ssl);
+#endif
if(x) {
if(verbosity)
log_cert(VERB_ALGO, "peer certificate", x);
@@ -906,7 +999,7 @@ static int tap_handshake(struct tap_data* data)
return 0;
} else if(r == 0) {
/* closed */
- tap_data_free(data);
+ tap_data_free(data, 1);
return 0;
} else if(want == SSL_ERROR_SYSCALL) {
/* SYSCALL and errno==0 means closed uncleanly */
@@ -924,7 +1017,7 @@ static int tap_handshake(struct tap_data* data)
if(!silent)
log_err("SSL_handshake syscall: %s",
strerror(errno));
- tap_data_free(data);
+ tap_data_free(data, 1);
return 0;
} else {
unsigned long err = ERR_get_error();
@@ -934,7 +1027,7 @@ static int tap_handshake(struct tap_data* data)
verbose(VERB_OPS, "ssl handshake failed "
"from %s", data->id);
}
- tap_data_free(data);
+ tap_data_free(data, 1);
return 0;
}
}
@@ -942,7 +1035,7 @@ static int tap_handshake(struct tap_data* data)
data->ssl_handshake_done = 1;
if(!tap_check_peer(data)) {
/* closed */
- tap_data_free(data);
+ tap_data_free(data, 1);
return 0;
}
return 1;
@@ -968,7 +1061,7 @@ void dtio_tap_callback(int ATTR_UNUSED(fd), short ATTR_UNUSED(bits), void* arg)
if(verbosity>=4) log_info("s recv %d", (int)ret);
if(ret == 0) {
/* closed or error */
- tap_data_free(data);
+ tap_data_free(data, 1);
return;
} else if(ret == -1) {
/* continue later */
@@ -990,7 +1083,7 @@ void dtio_tap_callback(int ATTR_UNUSED(fd), short ATTR_UNUSED(bits), void* arg)
data->frame = calloc(1, data->len);
if(!data->frame) {
log_err("out of memory");
- tap_data_free(data);
+ tap_data_free(data, 1);
return;
}
}
@@ -1003,7 +1096,7 @@ void dtio_tap_callback(int ATTR_UNUSED(fd), short ATTR_UNUSED(bits), void* arg)
if(verbosity>=4) log_info("f recv %d", (int)r);
if(r == 0) {
/* closed or error */
- tap_data_free(data);
+ tap_data_free(data, 1);
return;
} else if(r == -1) {
/* continue later */
@@ -1028,13 +1121,13 @@ void dtio_tap_callback(int ATTR_UNUSED(fd), short ATTR_UNUSED(bits), void* arg)
data->is_bidirectional = 1;
if(verbosity) log_info("bidirectional stream");
if(!reply_with_accept(data)) {
- tap_data_free(data);
+ tap_data_free(data, 1);
return;
}
} else if(data->len >= 4 && sldns_read_uint32(data->frame) ==
FSTRM_CONTROL_FRAME_STOP && data->is_bidirectional) {
if(!reply_with_finish(data)) {
- tap_data_free(data);
+ tap_data_free(data, 1);
return;
}
}
@@ -1046,7 +1139,6 @@ void dtio_tap_callback(int ATTR_UNUSED(fd), short ATTR_UNUSED(bits), void* arg)
data->len = 0;
data->len_done = 0;
data->data_done = 0;
-
}
/** callback for main listening file descriptor */
@@ -1129,6 +1221,8 @@ void dtio_mainfdcallback(int fd, short ATTR_UNUSED(bits), void* arg)
&dtio_tap_callback, data);
if(!data->ev) fatal_exit("could not ub_event_new");
if(ub_event_add(data->ev, NULL) != 0) fatal_exit("could not ub_event_add");
+ if(!tap_data_list_insert(&tap_sock->data_list, data))
+ fatal_exit("could not tap_data_list_insert");
}
/** setup local accept sockets */
@@ -1243,6 +1337,114 @@ setup_and_run(struct config_strlist_head* local_list,
free(maindata);
}
+/* internal unit tests */
+static int internal_unittest()
+{
+ /* unit test tap_data_list_try_to_free_tail() */
+#define unit_tap_datas_max 5
+ struct tap_data* datas[unit_tap_datas_max];
+ struct tap_data_list* list;
+ struct tap_socket* socket = calloc(1, sizeof(*socket));
+ size_t i = 0;
+ log_assert(socket);
+ log_assert(unit_tap_datas_max>2); /* needed for the test */
+ for(i=0; i<unit_tap_datas_max; i++) {
+ datas[i] = calloc(1, sizeof(struct tap_data));
+ log_assert(datas[i]);
+ log_assert(tap_data_list_insert(&socket->data_list, datas[i]));
+ }
+ /* sanity base check */
+ list = socket->data_list;
+ for(i=0; list; i++) list = list->next;
+ log_assert(i==unit_tap_datas_max);
+
+ /* Free the last data, tail cannot be erased */
+ list = socket->data_list;
+ while(list->next) list = list->next;
+ free(list->d);
+ list->d = NULL;
+ tap_data_list_try_to_free_tail(list);
+ list = socket->data_list;
+ for(i=0; list; i++) list = list->next;
+ log_assert(i==unit_tap_datas_max);
+
+ /* Free the third to last data, tail cannot be erased */
+ list = socket->data_list;
+ for(i=0; i<unit_tap_datas_max-3; i++) list = list->next;
+ free(list->d);
+ list->d = NULL;
+ tap_data_list_try_to_free_tail(list);
+ list = socket->data_list;
+ for(i=0; list; i++) list = list->next;
+ log_assert(i==unit_tap_datas_max);
+
+ /* Free the second to last data, try to remove tail from the third
+ * again, tail (last 2) should be removed */
+ list = socket->data_list;
+ for(i=0; i<unit_tap_datas_max-2; i++) list = list->next;
+ free(list->d);
+ list->d = NULL;
+ list = socket->data_list;
+ while(list->d) list = list->next;
+ tap_data_list_try_to_free_tail(list);
+ list = socket->data_list;
+ for(i=0; list; i++) list = list->next;
+ log_assert(i==unit_tap_datas_max-2);
+
+ /* Free all the remaining data, try to remove tail from the start,
+ * only the start should remain */
+ list = socket->data_list;
+ while(list) {
+ free(list->d);
+ list->d = NULL;
+ list = list->next;
+ }
+ tap_data_list_try_to_free_tail(socket->data_list);
+ list = socket->data_list;
+ for(i=0; list; i++) list = list->next;
+ log_assert(i==1);
+
+ /* clean up */
+ tap_data_list_delete(socket->data_list);
+ free(socket);
+
+ /* Start again. Add two elements */
+ socket = calloc(1, sizeof(*socket));
+ log_assert(socket);
+ for(i=0; i<2; i++) {
+ datas[i] = calloc(1, sizeof(struct tap_data));
+ log_assert(datas[i]);
+ log_assert(tap_data_list_insert(&socket->data_list, datas[i]));
+ }
+ /* sanity base check */
+ list = socket->data_list;
+ for(i=0; list; i++) list = list->next;
+ log_assert(i==2);
+
+ /* Free the last data, tail cannot be erased */
+ list = socket->data_list;
+ while(list->next) list = list->next;
+ free(list->d);
+ list->d = NULL;
+ tap_data_list_try_to_free_tail(list);
+ list = socket->data_list;
+ for(i=0; list; i++) list = list->next;
+ log_assert(i==2);
+
+ /* clean up */
+ tap_data_list_delete(socket->data_list);
+ free(socket);
+
+ if(log_get_lock()) {
+ lock_basic_destroy((lock_basic_type*)log_get_lock());
+ }
+ checklock_stop();
+#ifdef USE_WINSOCK
+ WSACleanup();
+#endif
+ return 0;
+}
+
/** getopt global, in case header files fail to declare it. */
extern int optind;
/** getopt global, in case header files fail to declare it. */
@@ -1293,7 +1495,7 @@ int main(int argc, char** argv)
#endif
/* command line options */
- while( (c=getopt(argc, argv, "hls:t:u:vx:y:z:")) != -1) {
+ while( (c=getopt(argc, argv, "hcls:t:u:vx:y:z:")) != -1) {
switch(c) {
case 'u':
if(!cfg_strlist_append(&local_list,
@@ -1329,6 +1531,12 @@ int main(int argc, char** argv)
case 'v':
verbosity++;
break;
+ case 'c':
+#ifndef UNBOUND_DEBUG
+ fatal_exit("-c option needs compilation with "
+ "--enable-debug");
+#endif
+ return internal_unittest();
case 'h':
case '?':
default:
@@ -1365,6 +1573,9 @@ int main(int argc, char** argv)
config_delstrlist(tcp_list.first);
config_delstrlist(tls_list.first);
+ if(log_get_lock()) {
+ lock_basic_destroy((lock_basic_type*)log_get_lock());
+ }
checklock_stop();
#ifdef USE_WINSOCK
WSACleanup();
diff --git a/doc/Changelog b/doc/Changelog
index 8d2ce0cde663..70860717a03b 100644
--- a/doc/Changelog
+++ b/doc/Changelog
@@ -1,8 +1,273 @@
+9 August 2024: Wouter
+ - Fix spelling for the cache-min-negative-ttl entry in the
+ example.conf.
+
+8 August 2024: Wouter
+ - Fix CAMP issues with global quota. Thanks to Huayi Duan, Marco
+ Bearzi, Jodok Vieli, and Cagin Tanir from NetSec group, ETH Zurich.
+ - Fix CacheFlush issues with limit on NS RRs. Thanks to Yehuda Afek,
+ Anat Bremler-Barr, Shoham Danino and Yuval Shavitt (Tel-Aviv
+ University and Reichman University).
+ - Set version number to 1.21.0 for release.
+ - Fix that for windows the module startup is called and sets up
+ the module-config.
+
+2 August 2024: Wouter
+ - Fix that alloc stats has strdup checks, it stops debuggers from
+ complaining about mismatch at free time.
+ - Fix testbound for alloc stats strdup in util/alloc.c.
+ - Merge #1090: Cookie secret file. Adds
+ `cookie-secret-file: "unbound_cookiesecrets.txt"` option to store
+ cookie secrets for EDNS COOKIE secret rollover. The remote control
+ add_cookie_secret, activate_cookie_secret and drop_cookie_secret
+ commands can be used for rollover, the command print_cookie_secrets
+ shows the values in use.
+ - Fix that alloc stats for forwards and hints are printed, and when
+ alloc stats is enabled, the unit test for unbound control waits for
+ reloads to complete.
+
+1 August 2024: Wouter
+ - Fix dnstap test program, cleans up to have clean memory on exit,
+ for tap_data_free, does not delete NULL items. Also it does not try
+ to free the tail, specifically in the free of the list since that
+ picked up the next item in the list for its loop causing invalid
+ free. Added internal unit test to unbound-dnstap-socket for that.
+ - Fix that the worker mem report with alloc stats does not attempt
+ to print memory use of forwards and hints if they have been
+ deleted already.
+
+31 July 2024: Wouter
+ - Fix for #1114: Fix that cache fill for forward-host names is
+ performed, so that with nonzero target-fetch-policy it fetches
+ forwarder addresses and uses them from cache. Also updated that
+ delegation point cache fill routines use CDflag for AAAA message
+ lookups, so that its negative lookup stops a recursion since the
+ cache uses the bit for disambiguation for dns64 but the recursion
+ uses CDflag for the AAAA target lookups, so the check correctly
+ stops a useless recursion by its cache lookup.
+
+30 July 2024: Wouter
+ - Fix to document parameters of auth_zone_verify_zonemd_with_key.
+
+25 July 2024: Wouter
+ - Add root key 38696 from 2024 for DNSSEC validation. It is added
+ to the default root keys in unbound-anchor. The content can be
+ inspected with `unbound-anchor -l`.
+
+23 July 2024: Yorgos
+ - Fix #1106: ratelimit-below-domain logs the wrong FROM address.
+ - Cleanup ede.tdir test.
+ - For #935 and #1104, clarify RPZ order and semantics.
+
+23 July 2024: Wouter
+ - Merge #1110: Make fallthrough explicit for libworker.c.
+ - For #1110: Test for fallthrough attribute in configure and add
+ fallthrough attribute annotations.
+ - Fix compile when the compiler does not support the noreturn
+ attribute.
+ - Fix to have empty definition when not supported for weak attribute.
+ - Fix uninitialized variable warning in create_tcp_accept_sock.
+ - Fix link of dnstap without openssl.
+ - Fix link of unbound-dnstap-socket without openssl.
+
+19 July 2024: Wouter
+ - Add dnstap-sample-rate that logs only 1/N messages, for high volume
+ server environments. Thanks Dan Luther.
+ - Fix dnstap wakeup, a running wakeup timer is left to expire and not
+ increased, a timer is started when the dtio thread is sleeping,
+ the timer set disabled when the dtio thread goes to sleep, and
+ after sleep the thread checks to see if there are messages to log
+ immediately.
+
+16 July 2024: Wouter
+ - For #1103: Fix to drop mesh state reference for the http2 stream
+ associated with the reply, not the currently active stream. And
+ it does not remove it twice on a mesh_send_reply call. The reply
+ h2_stream is NULL when not in use, for more initialisation.
+
+15 July 2024: Wouter
+ - For #1103: fix to also drop mesh state reference when the discard
+ limit is reached, when there is an error making a new recursion
+ state and when the connection is dropped with is_drop.
+
+12 July 2024: Yorgos
+ - Add RPZ tag tests in acl_interface.tdir.
+ - For #1102: clearer text for using interface-* options for the
+ loopback interface.
+
+12 July 2024: Wouter
+ - Fix #1103: unbound 1.20.0 segmentation fault with nghttp2.
+ - For #1103: fix to also drop mesh state reference when a h2 reply is
+ dropped.
+
+10 July 2024: Wouter
+ - For #773: In contrib/unbound.service.in set unbound to start after
+ network-online.target. Also for contrib/unbound_portable.service.in.
+
+9 July 2024: Yorgos
+ - Update list of known EDE codes.
+
+8 July 2024: Wouter
+ - Fix that validation reason failure that uses string print uses
+ separate buffer that is passed, from the scratch validation buffer.
+ - Fixup algo_needs_reason string buffer length.
+ - Fix shadowed error string variable in validator dnskey handling.
+
+5 July 2024: Yorgos
+ - Don't check for message TTL changes if the RRsets remain the same.
+
+5 July 2024: Wouter
+ - Fix for neater printout for error for missing DS response.
+ - Fix neater printout.
+ - Fix #1099: Unbound core dump on SIGSEGV.
+ - Fix for #1099: Fix to check for deleted RRset when the contents
+ is updated and fetched after it is stored, and also check for a
+ changed RRset.
+
+4 July 2024: Wouter
+ - Fix to print details about the failure to lookup a DNSKEY record
+ when validation fails due to the missing DNSKEY. Also for key prime
+ and DS lookups.
+
+3 July 2024: Yorgos
+ - Fix for repeated use of a DNAME record: first overallocate and then
+ move the exact size of the init value to avoid false positive heap
+ overflow reads from address sanitizers.
+
+3 July 2024: Wouter
+ - Fix #144: Port ipset to BSD pf tables.
+ - Add unit test skip files and bison and flex output to gitignore.
+ - Fix to use modstack_init in zonemd unit test.
+ - Fix to remove unneeded linebreak in fptr_wlist.c.
+ - Fix compile warnings in fptr_wlist.c.
+
+2 July 2024: Wouter
+ - Fix to remove unused include from the readzone test program.
+ - Fix unused variable warning in do_cache_remove.
+ - Fix compile warning in worker pthread id printout.
+
+17 June 2024: Wouter
+ - Fix ip-ratelimit-cookie setting, it was not applied.
+
+26 June 2024: Yorgos
+ - Explicitly set the RD bit for the mesh query flags when prefetching.
+ These queries have no waiting client but they need to be treated as
+ recursive.
+
+21 June 2024: Yorgos
+ - Fix pkg-config availability check in dnstap/dnstap.m4 and
+ systemd.m4.
+
+19 June 2024: Yorgos
+ - Fix #1092: Ubuntu 22.04 Jammy fails to compile unbound 1.20.0; by
+ adding helpful text for the Python interpreter version and allowing
+ the default pkg-config unavailability error message to be shown.
+
+17 June 2024: Wouter
+ - Fix #1091: Build fails with OpenSSL >= 3.0 built with
+ OPENSSL_NO_DEPRECATED.
+
+7 June 2024: Wouter
+ - Add unit test for validation of repeated use of a DNAME record.
+
+6 June 2024: Wouter
+ - Fix memory leak in setup of dsa sig.
+ - Fix typos for 'the the' in text.
+ - Fix validation for repeated use of a DNAME record.
+
+4 June 2024: Yorgos
+ - Merge #1080: AddressSanitizer detection in tdir tests and memory leak
+ fixes.
+ - Fix memory leak when reload_keep_cache is used and num-threads
+ changes.
+ - Fix memory leak on exit for unbound-dnstap-socket; creates false
+ negatives during testing.
+
+3 June 2024: Wouter
+ - Fix to squelch connection reset by peer errors from log. And fix
+ that the tcp read errors are labeled as initial for the first calls.
+
+30 May 2024: Wouter
+ - Fix #1079: tags from tagged rpz zones are no longer honored after
+ upgrade from 1.19.3 to 1.20.0.
+ - Fix for #1079: fix RPZ taglist in iterator callback that no client
+ info is like no taglist intersection.
+
+29 May 2024: Wouter
+ - Merge #1078: Only check old pid if no username.
+
+27 May 2024: Wouter
+ - Fix to enable that SERVFAIL is cached, for a short period, for more
+ cases. In the cases where limits are exceeded.
+ - Fix spelling of tcp-idle-timeout docs, from Michael Tokarev.
+
+27 May 2024: Yorgos
+ - Fix unused variable warning on compilation with no thread support.
+ - unbound-control-setup: check openssl availability before doing
+ anything, patch from Michael Tokarev.
+ - Update patch to remove 'command' shell builtin and update error
+ text.
+
+24 May 2024: Wouter
+ - Fix #1064: Unbound 1.20 Cachedb broken?
+
+24 May 2024: Yorgos
+ - Fix #1059: Intermittent DNS blocking failure with local-zone and
+ always_nxdomain. Addition of local_zones dynamically via
+ unbound-control was not finding the zone's parent correctly.
+
+21 May 2024: Wouter
+ - Merge #1073: fix null pointer dereference issue in function
+ ub_ctx_set_fwd.
+ - Fix to print a parse error when config is read with no name for
+ a forward-zone, stub-zone or view.
+ - Fix for parse end of forward-zone, stub-zone and view.
+ - Fix for #1064: Fix that cachedb expired messages are considered
+ insecure, and thus can be served to clients when dnssec is enabled.
+
+17 May 2024: Yorgos
+ - Merge #1069: Fix unbound-control stdin commands for multi-process
+ Unbounds.
+ - Fix unbound-control commands that read stdin in multi-process
+ operation (local_zones_remove, local_zones, local_datas_remove,
+ local_datas, view_local_datas_remove, view_local_datas). They will
+ be properly distributed to all processes. dump_cache and load_cache
+ are no longer supported in multi-process operation.
+ - Remove testdata/remote-threaded.tdir. testdata/09-unbound-control.tdir
+ now checks both single and multi process/thread operation.
+
+16 May 2024: Yorgos
+ - Merge #1070: Fix rtt assignement for low values of
+ infra-cache-max-rtt.
+
+16 May 2024: Wouter
+ - Fix #1071: [FR] Clear both in-memory and cachedb module cache with
+ `unbound-control flush*` commands.
+
+15 May 2024: Yorgos
+ - Add missing common functions to tdir tests.
+
+10 May 2024: Wouter
+ - Fix when the mesh jostle is exceeded that nameserver targets are
+ marked as resolved, so that the lookup is not stuck on the
+ requestlist.
+
+8 May 2024: Wouter
+ - Fix to squelch udp connect errors in the log at low verbosity about
+ invalid argument for IPv6 link local addresses.
+
+7 May 2024: Wouter
+ - Merge #1062: Fix potential overflow bug while parsing port in
+ function cfg_mark_ports.
+ - Fix for #1062: declaration before statement, avoid print of null,
+ and redundant check for array size.
+
1 May 2024: Wouter
- Fix for the DNSBomb vulnerability CVE-2024-33655. Thanks to Xiang Li
from the Network and Information Security Lab of Tsinghua University
for reporting it.
- - Set version number to 1.20.0 for release.
+ - Set version number to 1.20.0 for release. This became the release
+ on 8 may 2024, the repository continues with version 1.20.1.
29 April 2024: Yorgos
- Cleanup unnecessary strdup calls for EDE strings.
diff --git a/doc/README b/doc/README
index 5f81ad258835..cc26a2f78299 100644
--- a/doc/README
+++ b/doc/README
@@ -1,4 +1,4 @@
-README for Unbound 1.20.0
+README for Unbound 1.21.0
Copyright 2007 NLnet Labs
http://unbound.net
diff --git a/doc/example.conf.in b/doc/example.conf.in
index 0368c8d87618..130cb4e46205 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.20.0.
+# See unbound.conf(5) man page, version 1.21.0.
#
# this is a comment.
@@ -228,7 +228,7 @@ server:
# the time to live (TTL) value lower bound, in seconds. Default 0.
# For negative responses in the cache. If disabled, default,
- # cache-min-tll applies if configured.
+ # cache-min-ttl applies if configured.
# cache-min-negative-ttl: 0
# the time to live (TTL) value for cached roundtrip times, lameness and
@@ -1044,6 +1044,11 @@ server:
# example value "000102030405060708090a0b0c0d0e0f".
# cookie-secret: <128 bit random hex string>
+ # File with cookie secrets, the 'cookie-secret:' option is ignored
+ # and the file can be managed to have staging and active secrets
+ # with remote control commands. Disabled with "". Default is "".
+ # cookie-secret-file: "/usr/local/etc/unbound_cookiesecrets.txt"
+
# Enable to attach Extended DNS Error codes (RFC8914) to responses.
# ede: no
@@ -1329,6 +1334,8 @@ remote-control:
# dnstap-identity: ""
# # if "" it uses the package version.
# dnstap-version: ""
+# # log only 1/N messages, if 0 it is disabled. default 0.
+# dnstap-sample-rate: 0
# dnstap-log-resolver-query-messages: no
# dnstap-log-resolver-response-messages: no
# dnstap-log-client-query-messages: no
@@ -1337,7 +1344,8 @@ remote-control:
# dnstap-log-forwarder-response-messages: no
# Response Policy Zones
-# RPZ policies. Applied in order of configuration. QNAME, Response IP
+# RPZ policies. Applied in order of configuration. Any match from an earlier
+# RPZ zone will terminate the RPZ lookup. QNAME, Response IP
# Address, nsdname, nsip and clientip triggers are supported. Supported
# actions are: NXDOMAIN, NODATA, PASSTHRU, DROP, Local Data, tcp-only
# and drop. Policies can be loaded from a file, or using zone
diff --git a/doc/libunbound.3.in b/doc/libunbound.3.in
index f1e62c81ab7a..013c0461df05 100644
--- a/doc/libunbound.3.in
+++ b/doc/libunbound.3.in
@@ -1,4 +1,4 @@
-.TH "libunbound" "3" "May 8, 2024" "NLnet Labs" "unbound 1.20.0"
+.TH "libunbound" "3" "Aug 15, 2024" "NLnet Labs" "unbound 1.21.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.20.0 functions.
+\- Unbound DNS validating resolver 1.21.0 functions.
.SH "SYNOPSIS"
.B #include <unbound.h>
.LP
diff --git a/doc/unbound-anchor.8.in b/doc/unbound-anchor.8.in
index edab220a9598..efc526d6dd6d 100644
--- a/doc/unbound-anchor.8.in
+++ b/doc/unbound-anchor.8.in
@@ -1,4 +1,4 @@
-.TH "unbound-anchor" "8" "May 8, 2024" "NLnet Labs" "unbound 1.20.0"
+.TH "unbound-anchor" "8" "Aug 15, 2024" "NLnet Labs" "unbound 1.21.0"
.\"
.\" unbound-anchor.8 -- unbound anchor maintenance utility manual
.\"
diff --git a/doc/unbound-checkconf.8.in b/doc/unbound-checkconf.8.in
index 75a26e411b74..402b1ee22777 100644
--- a/doc/unbound-checkconf.8.in
+++ b/doc/unbound-checkconf.8.in
@@ -1,4 +1,4 @@
-.TH "unbound-checkconf" "8" "May 8, 2024" "NLnet Labs" "unbound 1.20.0"
+.TH "unbound-checkconf" "8" "Aug 15, 2024" "NLnet Labs" "unbound 1.21.0"
.\"
.\" unbound-checkconf.8 -- unbound configuration checker manual
.\"
diff --git a/doc/unbound-control.8.in b/doc/unbound-control.8.in
index 251dde7642c0..c33217febc46 100644
--- a/doc/unbound-control.8.in
+++ b/doc/unbound-control.8.in
@@ -1,4 +1,4 @@
-.TH "unbound-control" "8" "May 8, 2024" "NLnet Labs" "unbound 1.20.0"
+.TH "unbound-control" "8" "Aug 15, 2024" "NLnet Labs" "unbound 1.21.0"
.\"
.\" unbound-control.8 -- unbound remote control manual
.\"
@@ -121,31 +121,38 @@ Remove local data RRs read from stdin of unbound\-control. Input is one name per
line. For bulk removals.
.TP
.B dump_cache
-The contents of the cache is printed in a text format to stdout. You can
-redirect it to a file to store the cache in a file.
+The content of the cache is printed in a text format to stdout.
+You can redirect it to a file to store the cache in a file.
+Not supported in remote Unbounds in multi-process operation.
.TP
.B load_cache
-The contents of the cache is loaded from stdin. Uses the same format as
-dump_cache uses. Loading the cache with old, or wrong data can result
-in old or wrong data returned to clients. Loading data into the cache
-in this way is supported in order to aid with debugging.
+The content of the cache is loaded from stdin.
+Uses the same format as dump_cache uses.
+Loading the cache with old, or wrong data can result in old or wrong data
+returned to clients.
+Loading data into the cache in this way is supported in order to aid with
+debugging.
+Not supported in remote Unbounds in multi-process operation.
.TP
.B lookup \fIname
Print to stdout the name servers that would be used to look up the
name specified.
.TP
-.B flush \fIname
+.B flush \fR[\fI+c\fR] \fIname
Remove the name from the cache. Removes the types
A, AAAA, NS, SOA, CNAME, DNAME, MX, PTR, SRV, NAPTR, SVCB and HTTPS.
Because that is fast to do. Other record types can be removed using
.B flush_type
or
.B flush_zone\fR.
+.IP
+The '+c' option removes the items also from the cachedb cache. If
+cachedb is in use.
.TP
-.B flush_type \fIname\fR \fItype
+.B flush_type \fR[\fI+c\fR] \fIname\fR \fItype
Remove the name, type information from the cache.
.TP
-.B flush_zone \fIname
+.B flush_zone \fR[\fI+c\fR] \fIname
Remove all information at or below the name from the cache.
The rrsets and key entries are removed so that new lookups will be performed.
This needs to walk and inspect the entire cache, and is a slow operation.
@@ -153,10 +160,10 @@ The entries are set to expired in the implementation of this command (so,
with serve\-expired enabled, it'll serve that information but schedule a
prefetch for new information).
.TP
-.B flush_bogus
+.B flush_bogus \fR[\fI+c\fR]
Remove all bogus data from the cache.
.TP
-.B flush_negative
+.B flush_negative \fR[\fI+c\fR]
Remove all negative data from the cache. This is nxdomain answers,
nodata answers and servfail answers. Also removes bad key entries
(which could be due to failed lookups) from the dnssec key cache, and
@@ -343,6 +350,41 @@ Remove a list of \fIlocal_data\fR for given view from stdin. Like local_datas_re
.TP
.B view_local_datas \fIview\fR
Add a list of \fIlocal_data\fR for given view from stdin. Like local_datas.
+.TP
+.B add_cookie_secret <secret>
+Add or replace a cookie secret persistently. <secret> needs to be an 128 bit
+hex string.
+.IP
+Cookie secrets can be either \fIactive\fR or \fIstaging\fR. \fIActive\fR cookie
+secrets are used to create DNS Cookies, but verification of a DNS Cookie
+succeeds with any of the \fIactive\fR or \fIstaging\fR cookie secrets. The
+state of the current cookie secrets can be printed with the
+\fBprint_cookie_secrets\fR command.
+.IP
+When there are no cookie secrets configured yet, the <secret> is added as
+\fIactive\fR. If there is already an \fIactive\fR cookie secret, the <secret>
+is added as \fIstaging\fR or replacing an existing \fIstaging\fR secret.
+.IP
+To "roll" a cookie secret used in an anycast set. The new secret has to be
+added as staging secret to \fBall\fR nodes in the anycast set. When \fBall\fR
+nodes can verify DNS Cookies with the new secret, the new secret can be
+activated with the \fBactivate_cookie_secret\fR command. After \fBall\fR nodes
+have the new secret \fIactive\fR for at least one hour, the previous secret can
+be dropped with the \fBdrop_cookie_secret\fR command.
+.IP
+Persistence is accomplished by writing to a file which if configured with the
+\fBcookie\-secret\-file\fR option in the server section of the config file.
+This is disabled by default, "".
+.TP
+.B drop_cookie_secret
+Drop the \fIstaging\fR cookie secret.
+.TP
+.B activate_cookie_secret
+Make the current \fIstaging\fR cookie secret \fIactive\fR, and the current
+\fIactive\fR cookie secret \fIstaging\fR.
+.TP
+.B print_cookie_secrets
+Show the current configured cookie secrets with their status.
.SH "EXIT CODE"
The unbound\-control program exits with status code 1 on error, 0 on success.
.SH "SET UP"
diff --git a/doc/unbound-host.1.in b/doc/unbound-host.1.in
index 6192480cd5ea..6826d7f3acb0 100644
--- a/doc/unbound-host.1.in
+++ b/doc/unbound-host.1.in
@@ -1,4 +1,4 @@
-.TH "unbound\-host" "1" "May 8, 2024" "NLnet Labs" "unbound 1.20.0"
+.TH "unbound\-host" "1" "Aug 15, 2024" "NLnet Labs" "unbound 1.21.0"
.\"
.\" unbound-host.1 -- unbound DNS lookup utility
.\"
diff --git a/doc/unbound.8.in b/doc/unbound.8.in
index 749f5c99cc22..335de4023f62 100644
--- a/doc/unbound.8.in
+++ b/doc/unbound.8.in
@@ -1,4 +1,4 @@
-.TH "unbound" "8" "May 8, 2024" "NLnet Labs" "unbound 1.20.0"
+.TH "unbound" "8" "Aug 15, 2024" "NLnet Labs" "unbound 1.21.0"
.\"
.\" unbound.8 -- unbound manual
.\"
@@ -9,7 +9,7 @@
.\"
.SH "NAME"
.B unbound
-\- Unbound DNS validating resolver 1.20.0.
+\- Unbound DNS validating resolver 1.21.0.
.SH "SYNOPSIS"
.B unbound
.RB [ \-h ]
diff --git a/doc/unbound.conf.5.in b/doc/unbound.conf.5.in
index 764e2d78b5fe..4a1d3739dd47 100644
--- a/doc/unbound.conf.5.in
+++ b/doc/unbound.conf.5.in
@@ -1,4 +1,4 @@
-.TH "unbound.conf" "5" "May 8, 2024" "NLnet Labs" "unbound 1.20.0"
+.TH "unbound.conf" "5" "Aug 15, 2024" "NLnet Labs" "unbound 1.21.0"
.\"
.\" unbound.conf.5 -- unbound.conf manual
.\"
@@ -511,7 +511,7 @@ configured value if the number of free buffers falls below 35% of the
total number configured, and finally to 0 if the number of free buffers
falls below 20% of the total number configured. A minimum timeout of
200 milliseconds is observed regardless of the option value used.
-It will be overriden by \fBedns\-tcp\-keepalive\-timeout\fR if
+It will be overridden by \fBedns\-tcp\-keepalive\-timeout\fR if
\fBedns\-tcp\-keepalive\fR is enabled.
.TP
.B tcp-reuse-timeout: \fI<msec>\fR
@@ -788,7 +788,8 @@ transports, regardless of the presence of an DNS Cookie and regardless of the
UDP queries without a DNS Cookie receive REFUSED responses with the TC flag set,
that may trigger fall back to TCP for those clients.
.IP
-By default only localhost is \fIallow\fRed, the rest is \fIrefuse\fRd.
+By default only localhost (the 127.0.0.0/8 IP netblock, not the loopback
+interface) is implicitly \fIallow\fRed, the rest is \fIrefuse\fRd.
The default is \fIrefuse\fRd, because that is protocol\-friendly. The DNS
protocol is not designed to handle dropped packets due to policy, and
dropping may result in (possibly excessive) retried queries.
@@ -824,8 +825,12 @@ Similar to \fBaccess\-control:\fR but for interfaces.
.IP
The action is the same as the ones defined under \fBaccess\-control:\fR.
Interfaces are \fIrefuse\fRd by default.
-By default only localhost (the IP netblock, not the loopback interface) is
-\fIallow\fRed through the default \fBaccess\-control:\fR behavior.
+By default only localhost (the 127.0.0.0/8 IP netblock, not the loopback
+interface) is implicitly \fIallow\fRed through the default
+\fBaccess\-control:\fR behavior.
+This also means that any attempt to use the \fBinterface-*:\fR options for the
+loopback interface will not work as they will be overridden by the implicit
+default "\fBaccess\-control:\fR 127.0.0.0/8 allow" option.
.IP
Note that the interface needs to be already specified with \fBinterface:\fR
and that any \fBaccess-control*:\fR setting overrides all \fBinterface-*:\fR
@@ -1978,6 +1983,20 @@ Useful to explicitly set for servers in an anycast deployment that need to
share the secret in order to verify each other's Server Cookies.
An example hex string would be "000102030405060708090a0b0c0d0e0f".
Default is a 128 bits random secret generated at startup time.
+This option is ignored if a \fBcookie\-secret\-file\fR is
+present. In that case the secrets from that file are used in DNS Cookie
+calculations.
+.TP 5
+.B cookie\-secret\-file: \fI<filename>
+File from which the secrets are read used in DNS Cookie calculations. When this
+file exists, the secrets in this file are used and the secret specified by the
+\fBcookie-secret\fR option is ignored.
+Enable it by setting a filename, like "/usr/local/etc/unbound_cookiesecrets.txt".
+The content of this file must be manipulated with the \fBadd_cookie_secret\fR,
+\fBdrop_cookie_secret\fR and \fBactivate_cookie_secret\fR commands to the
+\fIunbound\-control\fR(8) tool. Please see that manpage on how to perform a
+safe cookie secret rollover.
+Default is "" (disabled).
.TP 5
.B edns\-client\-string: \fI<IP netblock> <string>
Include an EDNS0 option containing configured ascii string in queries with
@@ -2847,6 +2866,13 @@ Default is "".
The version to send with messages, if "" the package version is used.
Default is "".
.TP
+.B dnstap-sample-rate: \fI<number>
+The sample rate for log of messages, it logs only 1/N messages. With 0 it
+is disabled. Default is 0. This is useful in a high volume environment,
+where log functionality would otherwise not be reliable. For example 10
+would spend only 1/10th time on logging, and 100 would only spend a
+hundredth of the time on logging.
+.TP
.B dnstap-log-resolver-query-messages: \fI<yes or no>
Enable to log resolver query messages. Default is no.
These are messages from Unbound to upstream servers.
@@ -2871,9 +2897,11 @@ Enable to log forwarder response messages. Default is no.
.SS Response Policy Zone Options
.LP
Response Policy Zones are configured with \fBrpz:\fR, and each one must have a
-\fBname:\fR. There can be multiple ones, by listing multiple rpz clauses, each
-with a different name. RPZ clauses are applied in order of configuration. The
-\fBrespip\fR module needs to be added to the \fBmodule-config\fR, e.g.:
+\fBname:\fR. There can be multiple ones, by listing multiple RPZ clauses, each
+with a different name. RPZ clauses are applied in order of configuration and
+any match from an earlier RPZ zone will terminate the RPZ lookup. Note that a
+PASSTHRU action is still considered a match.
+The \fBrespip\fR module needs to be added to the \fBmodule-config\fR, e.g.:
\fBmodule-config: "respip validator iterator"\fR.
.P
QNAME, Response IP Address, nsdname, nsip and clientip triggers are supported.
@@ -2881,12 +2909,13 @@ Supported actions are: NXDOMAIN, NODATA, PASSTHRU, DROP, Local Data, tcp\-only
and drop. RPZ QNAME triggers are applied after \fBlocal\-zones\fR and
before \fBauth\-zones\fR.
.P
-The rpz zone is formatted with a SOA start record as usual. The items in
-the zone are entries, that specify what to act on (the trigger) and what to
-do (the action). The trigger to act on is recorded in the name, the action
-to do is recorded as the resource record. The names all end in the zone
-name, so you could type the trigger names without a trailing dot in the
-zonefile.
+The RPZ zone is a regular DNS zone formatted with a SOA start record as usual.
+The items in the zone are entries, that specify what to act on (the trigger)
+and what to do (the action).
+The trigger to act on is recorded in the name, the action to do is recorded as
+the resource record.
+The names all end in the zone name, so you could type the trigger names without
+a trailing dot in the zonefile.
.P
An example RPZ record, that answers example.com with NXDOMAIN
.nf
@@ -2986,7 +3015,7 @@ externally blocked. Default is no.
If enabled the zone is authoritatively answered for and queries for the RPZ
zone information are answered to downstream clients. This is useful for
monitoring scripts, that can then access the SOA information to check if
-the rpz information is up to date. Default is no.
+the RPZ information is up to date. Default is no.
.TP
.B tags: \fI<list of tags>
Limit the policies from this RPZ clause to clients with a matching tag. Tags
diff --git a/dynlibmod/dynlibmod.c b/dynlibmod/dynlibmod.c
index 1e040a30e743..c941154927ee 100644
--- a/dynlibmod/dynlibmod.c
+++ b/dynlibmod/dynlibmod.c
@@ -297,8 +297,8 @@ inplace_cb_delete_wrapped(struct module_env* env, enum inplace_cb_list_type type
*/
static struct module_func_block dynlibmod_block = {
"dynlib",
- &dynlibmod_init, &dynlibmod_deinit, &dynlibmod_operate, &dynlibmod_inform_super,
- &dynlibmod_clear, &dynlibmod_get_mem
+ NULL, NULL, &dynlibmod_init, &dynlibmod_deinit, &dynlibmod_operate,
+ &dynlibmod_inform_super, &dynlibmod_clear, &dynlibmod_get_mem
};
struct module_func_block* dynlibmod_get_funcblock(void)
diff --git a/edns-subnet/subnetmod.c b/edns-subnet/subnetmod.c
index 1dff429ac8ae..ead720f34006 100644
--- a/edns-subnet/subnetmod.c
+++ b/edns-subnet/subnetmod.c
@@ -995,7 +995,8 @@ subnetmod_get_mem(struct module_env *env, int id)
* The module function block
*/
static struct module_func_block subnetmod_block = {
- "subnetcache", &subnetmod_init, &subnetmod_deinit, &subnetmod_operate,
+ "subnetcache",
+ NULL, NULL, &subnetmod_init, &subnetmod_deinit, &subnetmod_operate,
&subnetmod_inform_super, &subnetmod_clear, &subnetmod_get_mem
};
diff --git a/ipsecmod/ipsecmod.c b/ipsecmod/ipsecmod.c
index 19549d4eefe0..76f9b1965e08 100644
--- a/ipsecmod/ipsecmod.c
+++ b/ipsecmod/ipsecmod.c
@@ -615,7 +615,7 @@ ipsecmod_get_mem(struct module_env* env, int id)
*/
static struct module_func_block ipsecmod_block = {
"ipsecmod",
- &ipsecmod_init, &ipsecmod_deinit, &ipsecmod_operate,
+ NULL, NULL, &ipsecmod_init, &ipsecmod_deinit, &ipsecmod_operate,
&ipsecmod_inform_super, &ipsecmod_clear, &ipsecmod_get_mem
};
diff --git a/ipset/ipset.c b/ipset/ipset.c
index af55de8d6fc2..1ad2c09f46da 100644
--- a/ipset/ipset.c
+++ b/ipset/ipset.c
@@ -17,9 +17,19 @@
#include "sldns/wire2str.h"
#include "sldns/parseutil.h"
+#ifdef HAVE_NET_PFVAR_H
+#include <fcntl.h>
+#include <sys/ioctl.h>
+#include <netinet/in.h>
+#include <net/if.h>
+#include <net/pfvar.h>
+typedef intptr_t filter_dev;
+#else
#include <libmnl/libmnl.h>
#include <linux/netfilter/nfnetlink.h>
#include <linux/netfilter/ipset/ip_set.h>
+typedef struct mnl_socket * filter_dev;
+#endif
#define BUFF_LEN 256
@@ -41,24 +51,95 @@ static int error_response(struct module_qstate* qstate, int id, int rcode) {
return 0;
}
-static struct mnl_socket * open_mnl_socket() {
- struct mnl_socket *mnl;
+#ifdef HAVE_NET_PFVAR_H
+static void * open_filter() {
+ filter_dev dev;
- mnl = mnl_socket_open(NETLINK_NETFILTER);
- if (!mnl) {
+ dev = open("/dev/pf", O_RDWR);
+ if (dev == -1) {
+ log_err("open(\"/dev/pf\") failed: %s", strerror(errno));
+ return NULL;
+ }
+ else
+ return (void *)dev;
+}
+#else
+static void * open_filter() {
+ filter_dev dev;
+
+ dev = mnl_socket_open(NETLINK_NETFILTER);
+ if (!dev) {
log_err("ipset: could not open netfilter.");
return NULL;
}
- if (mnl_socket_bind(mnl, 0, MNL_SOCKET_AUTOPID) < 0) {
- mnl_socket_close(mnl);
+ if (mnl_socket_bind(dev, 0, MNL_SOCKET_AUTOPID) < 0) {
+ mnl_socket_close(dev);
log_err("ipset: could not bind netfilter.");
return NULL;
}
- return mnl;
+ return (void *)dev;
}
+#endif
+
+#ifdef HAVE_NET_PFVAR_H
+static int add_to_ipset(filter_dev dev, const char *setname, const void *ipaddr, int af) {
+ struct pfioc_table io;
+ struct pfr_addr addr;
+ const char *p;
+ int i;
+
+ bzero(&io, sizeof(io));
+ bzero(&addr, sizeof(addr));
+
+ p = strrchr(setname, '/');
+ if (p) {
+ i = p - setname;
+ if (i >= PATH_MAX) {
+ errno = ENAMETOOLONG;
+ return -1;
+ }
+ memcpy(io.pfrio_table.pfrt_anchor, setname, i);
+ if (i < PATH_MAX)
+ io.pfrio_table.pfrt_anchor[i] = '\0';
+ p++;
+ }
+ else
+ p = setname;
-static int add_to_ipset(struct mnl_socket *mnl, const char *setname, const void *ipaddr, int af) {
+ if (strlen(p) >= PF_TABLE_NAME_SIZE) {
+ errno = ENAMETOOLONG;
+ return -1;
+ }
+ strlcpy(io.pfrio_table.pfrt_name, p, PF_TABLE_NAME_SIZE);
+
+ io.pfrio_buffer = &addr;
+ io.pfrio_size = 1;
+ io.pfrio_esize = sizeof(addr);
+
+ switch (af) {
+ case AF_INET:
+ addr.pfra_ip4addr = *(struct in_addr *)ipaddr;
+ addr.pfra_net = 32;
+ break;
+ case AF_INET6:
+ addr.pfra_ip6addr = *(struct in6_addr *)ipaddr;
+ addr.pfra_net = 128;
+ break;
+ default:
+ errno = EAFNOSUPPORT;
+ return -1;
+ }
+ addr.pfra_af = af;
+
+ if (ioctl(dev, DIOCRADDADDRS, &io) == -1) {
+ log_err("ioctl failed: %s", strerror(errno));
+ return -1;
+ }
+ return 0;
+}
+#else
+static int add_to_ipset(filter_dev dev, const char *setname, const void *ipaddr, int af) {
struct nlmsghdr *nlh;
struct nfgenmsg *nfg;
struct nlattr *nested[2];
@@ -91,14 +172,15 @@ static int add_to_ipset(struct mnl_socket *mnl, const char *setname, const void
mnl_attr_nest_end(nlh, nested[1]);
mnl_attr_nest_end(nlh, nested[0]);
- if (mnl_socket_sendto(mnl, nlh, nlh->nlmsg_len) < 0) {
+ if (mnl_socket_sendto(dev, nlh, nlh->nlmsg_len) < 0) {
return -1;
}
return 0;
}
+#endif
static void
-ipset_add_rrset_data(struct ipset_env *ie, struct mnl_socket *mnl,
+ipset_add_rrset_data(struct ipset_env *ie,
struct packed_rrset_data *d, const char* setname, int af,
const char* dname)
{
@@ -123,12 +205,16 @@ ipset_add_rrset_data(struct ipset_env *ie, struct mnl_socket *mnl,
snprintf(ip, sizeof(ip), "(inet_ntop_error)");
verbose(VERB_QUERY, "ipset: add %s to %s for %s", ip, setname, dname);
}
- ret = add_to_ipset(mnl, setname, rr_data + 2, af);
+ ret = add_to_ipset((filter_dev)ie->dev, setname, rr_data + 2, af);
if (ret < 0) {
log_err("ipset: could not add %s into %s", dname, setname);
- mnl_socket_close(mnl);
- ie->mnl = NULL;
+#if HAVE_NET_PFVAR_H
+ /* don't close as we might not be able to open again due to dropped privs */
+#else
+ mnl_socket_close((filter_dev)ie->dev);
+ ie->dev = NULL;
+#endif
break;
}
}
@@ -137,8 +223,8 @@ 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 *qname, const int qlen, const char *setname, int af)
+ struct ub_packed_rrset_key *rrset, const char *qname, int qlen,
+ const char *setname, int af)
{
static char dname[BUFF_LEN];
const char *ds, *qs;
@@ -152,11 +238,20 @@ 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--;
+ }
+ if (qname[qlen - 1] == '.') {
+ qlen--;
+ }
for (p = env->cfg->local_zones_ipset; p; p = p->next) {
ds = NULL;
qs = NULL;
plen = strlen(p->str);
+ if (p->str[plen - 1] == '.') {
+ plen--;
+ }
if (dlen == plen || (dlen > plen && dname[dlen - plen - 1] == '.' )) {
ds = dname + (dlen - plen);
@@ -167,8 +262,7 @@ ipset_check_zones_for_rrset(struct module_env *env, struct ipset_env *ie,
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);
+ ipset_add_rrset_data(ie, d, setname, af, dname);
break;
}
}
@@ -178,7 +272,6 @@ ipset_check_zones_for_rrset(struct module_env *env, 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;
@@ -186,15 +279,17 @@ static int ipset_update(struct module_env *env, struct dns_msg *return_msg,
static char qname[BUFF_LEN];
int qlen;
- mnl = (struct mnl_socket *)ie->mnl;
- if (!mnl) {
+#ifdef HAVE_NET_PFVAR_H
+#else
+ if (!ie->dev) {
/* retry to create mnl socket */
- mnl = open_mnl_socket();
- if (!mnl) {
+ ie->dev = open_filter();
+ if (!ie->dev) {
+ log_warn("ipset open_filter failed");
return -1;
}
- ie->mnl = mnl;
}
+#endif
qlen = sldns_wire2str_dname_buf(qinfo.qname, qinfo.qname_len,
qname, BUFF_LEN);
@@ -217,8 +312,8 @@ static int ipset_update(struct module_env *env, struct dns_msg *return_msg,
}
if (setname) {
- if(ipset_check_zones_for_rrset(env, ie, mnl, rrset,
- qname, qlen, setname, af) == -1)
+ if(ipset_check_zones_for_rrset(env, ie, rrset, qname,
+ qlen, setname, af) == -1)
return -1;
}
}
@@ -226,7 +321,7 @@ static int ipset_update(struct module_env *env, struct dns_msg *return_msg,
return 0;
}
-int ipset_init(struct module_env* env, int id) {
+int ipset_startup(struct module_env* env, int id) {
struct ipset_env *ipset_env;
ipset_env = (struct ipset_env *)calloc(1, sizeof(struct ipset_env));
@@ -237,7 +332,43 @@ int ipset_init(struct module_env* env, int id) {
env->modinfo[id] = (void *)ipset_env;
- ipset_env->mnl = NULL;
+#ifdef HAVE_NET_PFVAR_H
+ ipset_env->dev = open_filter();
+ if (!ipset_env->dev) {
+ log_err("ipset open_filter failed");
+ return 0;
+ }
+#else
+ ipset_env->dev = NULL;
+#endif
+ return 1;
+}
+
+void ipset_destartup(struct module_env* env, int id) {
+ filter_dev dev;
+ struct ipset_env *ipset_env;
+
+ if (!env || !env->modinfo[id]) {
+ return;
+ }
+ ipset_env = (struct ipset_env*)env->modinfo[id];
+
+ dev = (filter_dev)ipset_env->dev;
+ if (dev) {
+#if HAVE_NET_PFVAR_H
+ close(dev);
+#else
+ mnl_socket_close(dev);
+#endif
+ ipset_env->dev = NULL;
+ }
+
+ free(ipset_env);
+ env->modinfo[id] = NULL;
+}
+
+int ipset_init(struct module_env* env, int id) {
+ struct ipset_env *ipset_env = env->modinfo[id];
ipset_env->name_v4 = env->cfg->ipset_name_v4;
ipset_env->name_v6 = env->cfg->ipset_name_v6;
@@ -253,24 +384,8 @@ int ipset_init(struct module_env* env, int id) {
return 1;
}
-void ipset_deinit(struct module_env *env, int id) {
- struct mnl_socket *mnl;
- struct ipset_env *ipset_env;
-
- if (!env || !env->modinfo[id]) {
- return;
- }
-
- ipset_env = (struct ipset_env *)env->modinfo[id];
-
- mnl = (struct mnl_socket *)ipset_env->mnl;
- if (mnl) {
- mnl_socket_close(mnl);
- ipset_env->mnl = NULL;
- }
-
- free(ipset_env);
- env->modinfo[id] = NULL;
+void ipset_deinit(struct module_env *ATTR_UNUSED(env), int ATTR_UNUSED(id)) {
+ /* nothing */
}
static int ipset_new(struct module_qstate* qstate, int id) {
@@ -376,8 +491,8 @@ size_t ipset_get_mem(struct module_env *env, int id) {
*/
static struct module_func_block ipset_block = {
"ipset",
- &ipset_init, &ipset_deinit, &ipset_operate,
- &ipset_inform_super, &ipset_clear, &ipset_get_mem
+ &ipset_startup, &ipset_destartup, &ipset_init, &ipset_deinit,
+ &ipset_operate, &ipset_inform_super, &ipset_clear, &ipset_get_mem
};
struct module_func_block * ipset_get_funcblock(void) {
diff --git a/ipset/ipset.h b/ipset/ipset.h
index f60a8be8c837..195c7db93cdd 100644
--- a/ipset/ipset.h
+++ b/ipset/ipset.h
@@ -37,7 +37,7 @@ extern "C" {
#endif
struct ipset_env {
- void* mnl;
+ void* dev;
int v4_enabled;
int v6_enabled;
@@ -50,6 +50,10 @@ struct ipset_qstate {
int dummy;
};
+/** Startup the ipset module */
+int ipset_startup(struct module_env* env, int id);
+/** Destartup the ipset module */
+void ipset_destartup(struct module_env* env, int id);
/** Init the ipset module */
int ipset_init(struct module_env* env, int id);
/** Deinit the ipset module */
diff --git a/iterator/iter_scrub.c b/iterator/iter_scrub.c
index 48867e50c557..f038ad69af0e 100644
--- a/iterator/iter_scrub.c
+++ b/iterator/iter_scrub.c
@@ -367,6 +367,47 @@ type_allowed_in_additional_section(uint16_t tp)
return 0;
}
+/** Shorten RRset */
+static void
+shorten_rrset(sldns_buffer* pkt, struct rrset_parse* rrset, int count)
+{
+ /* The too large NS RRset is shortened. This is so that too large
+ * content does not overwhelm the cache. It may make the rrset
+ * bogus if it was signed, and then the domain is not resolved any
+ * more, that is okay, the NS RRset was too large. During a referral
+ * it can be shortened and then the first part of the list could
+ * be used to resolve. The scrub continues to disallow glue for the
+ * removed nameserver RRs and removes that too. Because the glue
+ * is not marked as okay, since the RRs have been removed here. */
+ int i;
+ struct rr_parse* rr = rrset->rr_first, *prev = NULL;
+ if(!rr)
+ return;
+ for(i=0; i<count; i++) {
+ prev = rr;
+ rr = rr->next;
+ if(!rr)
+ return; /* The RRset is already short. */
+ }
+ if(verbosity >= VERB_QUERY
+ && rrset->dname_len <= LDNS_MAX_DOMAINLEN) {
+ uint8_t buf[LDNS_MAX_DOMAINLEN+1];
+ dname_pkt_copy(pkt, buf, rrset->dname);
+ log_nametypeclass(VERB_QUERY, "normalize: shorten RRset:", buf,
+ rrset->type, ntohs(rrset->rrset_class));
+ }
+ /* remove further rrs */
+ rrset->rr_last = prev;
+ rrset->rr_count = count;
+ while(rr) {
+ rrset->size -= rr->size;
+ rr = rr->next;
+ }
+ if(rrset->rr_last)
+ rrset->rr_last->next = NULL;
+ else rrset->rr_first = NULL;
+}
+
/**
* This routine normalizes a response. This includes removing "irrelevant"
* records from the answer and additional sections and (re)synthesizing
@@ -387,6 +428,7 @@ scrub_normalize(sldns_buffer* pkt, struct msg_parse* msg,
uint8_t* sname = qinfo->qname;
size_t snamelen = qinfo->qname_len;
struct rrset_parse* rrset, *prev, *nsset=NULL;
+ int cname_length = 0; /* number of CNAMEs, or DNAMEs */
if(FLAGS_GET_RCODE(msg->flags) != LDNS_RCODE_NOERROR &&
FLAGS_GET_RCODE(msg->flags) != LDNS_RCODE_NXDOMAIN)
@@ -401,6 +443,16 @@ scrub_normalize(sldns_buffer* pkt, struct msg_parse* msg,
prev = NULL;
rrset = msg->rrset_first;
while(rrset && rrset->section == LDNS_SECTION_ANSWER) {
+ if(cname_length > 11 /* env->cfg.iter_scrub_cname */) {
+ /* Too many CNAMEs, or DNAMEs, from the authority
+ * server, scrub down the length to something
+ * shorter. This deletes everything after the limit
+ * is reached. The iterator is going to look up
+ * the content one by one anyway. */
+ remove_rrset("normalize: removing because too many cnames:",
+ pkt, msg, prev, &rrset);
+ continue;
+ }
if(rrset->type == LDNS_RR_TYPE_DNAME &&
pkt_strict_sub(pkt, sname, rrset->dname)) {
/* check if next rrset is correct CNAME. else,
@@ -420,6 +472,7 @@ scrub_normalize(sldns_buffer* pkt, struct msg_parse* msg,
"too long");
return 0;
}
+ cname_length++;
if(nx && nx->type == LDNS_RR_TYPE_CNAME &&
dname_pkt_compare(pkt, sname, nx->dname) == 0) {
/* check next cname */
@@ -460,6 +513,7 @@ scrub_normalize(sldns_buffer* pkt, struct msg_parse* msg,
if(rrset->type == LDNS_RR_TYPE_CNAME) {
struct rrset_parse* nx = rrset->rrset_all_next;
uint8_t* oldsname = sname;
+ cname_length++;
/* see if the next one is a DNAME, if so, swap them */
if(nx && nx->section == LDNS_SECTION_ANSWER &&
nx->type == LDNS_RR_TYPE_DNAME &&
@@ -507,6 +561,10 @@ scrub_normalize(sldns_buffer* pkt, struct msg_parse* msg,
LDNS_SECTION_ANSWER &&
dname_pkt_compare(pkt, oldsname,
rrset->dname) == 0) {
+ if(rrset->type == LDNS_RR_TYPE_NS &&
+ rrset->rr_count > 20 /* env->cfg->iter_scrub_ns */) {
+ shorten_rrset(pkt, rrset, 20 /* env->cfg->iter_scrub_ns */);
+ }
prev = rrset;
rrset = rrset->rrset_all_next;
}
@@ -522,6 +580,11 @@ scrub_normalize(sldns_buffer* pkt, struct msg_parse* msg,
continue;
}
+ if(rrset->type == LDNS_RR_TYPE_NS &&
+ rrset->rr_count > 20 /* env->cfg->iter_scrub_ns */) {
+ shorten_rrset(pkt, rrset, 20 /* env->cfg->iter_scrub_ns */);
+ }
+
/* Mark the additional names from relevant rrset as OK. */
/* only for RRsets that match the query name, other ones
* will be removed by sanitize, so no additional for them */
@@ -578,6 +641,25 @@ scrub_normalize(sldns_buffer* pkt, struct msg_parse* msg,
"RRset:", pkt, msg, prev, &rrset);
continue;
}
+ if(rrset->rr_count > 20 /* env->cfg->iter_scrub_ns */) {
+ /* If this is not a referral, and the NS RRset
+ * is signed, then remove it entirely, so
+ * that when it becomes bogus it does not
+ * make the message that is otherwise fine
+ * into a bogus message. */
+ if(!(msg->an_rrsets == 0 &&
+ FLAGS_GET_RCODE(msg->flags) ==
+ LDNS_RCODE_NOERROR &&
+ !soa_in_auth(msg) &&
+ !(msg->flags & BIT_AA)) &&
+ rrset->rrsig_count != 0) {
+ remove_rrset("normalize: removing too large NS "
+ "RRset:", pkt, msg, prev, &rrset);
+ continue;
+ } else {
+ shorten_rrset(pkt, rrset, 20 /* env->cfg->iter_scrub_ns */);
+ }
+ }
}
/* if this is type DS and we query for type DS we just got
* a referral answer for our type DS query, fix packet */
diff --git a/iterator/iter_utils.c b/iterator/iter_utils.c
index f291178d2319..1b4f5f6ebb4f 100644
--- a/iterator/iter_utils.c
+++ b/iterator/iter_utils.c
@@ -279,9 +279,10 @@ iter_filter_unsuitable(struct iter_env* iter_env, struct module_env* env,
name, namelen, qtype, &lame, &dnsseclame, &reclame,
&rtt, now)) {
log_addr(VERB_ALGO, "servselect", &a->addr, a->addrlen);
- verbose(VERB_ALGO, " rtt=%d%s%s%s%s", rtt,
+ verbose(VERB_ALGO, " rtt=%d%s%s%s%s%s", rtt,
lame?" LAME":"",
dnsseclame?" DNSSEC_LAME":"",
+ a->dnsseclame?" ADDR_DNSSEC_LAME":"",
reclame?" REC_LAME":"",
a->lame?" ADDR_LAME":"");
if(lame)
diff --git a/iterator/iterator.c b/iterator/iterator.c
index 5732a414857e..228f5dfaef30 100644
--- a/iterator/iterator.c
+++ b/iterator/iterator.c
@@ -760,6 +760,14 @@ target_count_increase_nx(struct iter_qstate* iq, int num)
iq->target_count[TARGET_COUNT_NX] += num;
}
+static void
+target_count_increase_global_quota(struct iter_qstate* iq, int num)
+{
+ target_count_create(iq);
+ if(iq->target_count)
+ iq->target_count[TARGET_COUNT_GLOBAL_QUOTA] += num;
+}
+
/**
* Generate a subrequest.
* Generate a local request event. Local events are tied to this module, and
@@ -1378,7 +1386,7 @@ processInitRequest(struct module_qstate* qstate, struct iter_qstate* iq,
"restarts (eg. indirections)");
if(iq->qchase.qname)
errinf_dname(qstate, "stop at", iq->qchase.qname);
- return error_response(qstate, id, LDNS_RCODE_SERVFAIL);
+ return error_response_cache(qstate, id, LDNS_RCODE_SERVFAIL);
}
/* We enforce a maximum recursion/dependency depth -- in general,
@@ -1560,6 +1568,11 @@ processInitRequest(struct module_qstate* qstate, struct iter_qstate* iq,
errinf(qstate, "malloc failure for forward zone");
return error_response(qstate, id, LDNS_RCODE_SERVFAIL);
}
+ if(!cache_fill_missing(qstate->env, iq->qchase.qclass,
+ qstate->region, iq->dp)) {
+ errinf(qstate, "malloc failure, copy extra info into delegation point");
+ return error_response(qstate, id, LDNS_RCODE_SERVFAIL);
+ }
if((qstate->query_flags&BIT_RD)==0) {
/* If the server accepts RD=0 queries and forwards
* with RD=1, then if the server is listed as an NS
@@ -1654,7 +1667,7 @@ processInitRequest(struct module_qstate* qstate, struct iter_qstate* iq,
if(!iq->dp) {
log_err("internal error: no hints dp");
errinf(qstate, "no hints for this class");
- return error_response(qstate, id,
+ return error_response_cache(qstate, id,
LDNS_RCODE_SERVFAIL);
}
iq->dp = delegpt_copy(iq->dp, qstate->region);
@@ -1974,7 +1987,8 @@ generate_target_query(struct module_qstate* qstate, struct iter_qstate* iq,
* if it is negative, there is no maximum number of targets.
* @param num: returns the number of queries generated and processed,
* which may be zero if there were no missing targets.
- * @return false on error.
+ * @return 0 on success, nonzero on error. 1 means temporary failure and
+ * 2 means the failure can be cached.
*/
static int
query_for_targets(struct module_qstate* qstate, struct iter_qstate* iq,
@@ -1997,13 +2011,13 @@ query_for_targets(struct module_qstate* qstate, struct iter_qstate* iq,
else toget = maxtargets;
if(toget == 0) {
*num = 0;
- return 1;
+ return 0;
}
/* 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;
+ return 1;
if(iq->depth > 0 && iq->target_count &&
iq->target_count[TARGET_COUNT_QUERIES] > MAX_TARGET_COUNT) {
char s[LDNS_MAX_DOMAINLEN+1];
@@ -2011,7 +2025,7 @@ query_for_targets(struct module_qstate* qstate, struct iter_qstate* iq,
verbose(VERB_QUERY, "request %s has exceeded the maximum "
"number of glue fetches %d", s,
iq->target_count[TARGET_COUNT_QUERIES]);
- return 0;
+ return 2;
}
if(iq->dp_target_count > MAX_DP_TARGET_COUNT) {
char s[LDNS_MAX_DOMAINLEN+1];
@@ -2019,7 +2033,7 @@ query_for_targets(struct module_qstate* qstate, struct iter_qstate* iq,
verbose(VERB_QUERY, "request %s has exceeded the maximum "
"number of glue fetches %d to a single delegation point",
s, iq->dp_target_count);
- return 0;
+ return 2;
}
/* select 'toget' items from the total of 'missing' items */
@@ -2048,7 +2062,7 @@ query_for_targets(struct module_qstate* qstate, struct iter_qstate* iq,
*num = query_count;
if(query_count > 0)
qstate->ext_state[id] = module_wait_subquery;
- return 0;
+ return 1;
}
query_count++;
/* If the mesh query list is full, exit the loop here.
@@ -2057,8 +2071,16 @@ query_for_targets(struct module_qstate* qstate, struct iter_qstate* iq,
* increase, because the spawned state uses cpu and a
* socket while this state waits for that spawned
* state. Next time we can look up further targets */
- if(mesh_jostle_exceeded(qstate->env->mesh))
+ if(mesh_jostle_exceeded(qstate->env->mesh)) {
+ /* If no ip4 query is possible, that makes
+ * this ns resolved. */
+ if(!((ie->supports_ipv4 || ie->use_nat64) &&
+ ((ns->lame && !ns->done_pside4) ||
+ (!ns->lame && !ns->got4)))) {
+ ns->resolved = 1;
+ }
break;
+ }
}
/* Send the A request. */
if((ie->supports_ipv4 || ie->use_nat64) &&
@@ -2070,12 +2092,17 @@ query_for_targets(struct module_qstate* qstate, struct iter_qstate* iq,
*num = query_count;
if(query_count > 0)
qstate->ext_state[id] = module_wait_subquery;
- return 0;
+ return 1;
}
query_count++;
/* If the mesh query list is full, exit the loop. */
- if(mesh_jostle_exceeded(qstate->env->mesh))
+ if(mesh_jostle_exceeded(qstate->env->mesh)) {
+ /* With the ip6 query already checked for,
+ * this makes the ns resolved. It is no longer
+ * a missing target. */
+ ns->resolved = 1;
break;
+ }
}
/* mark this target as in progress. */
@@ -2089,7 +2116,7 @@ query_for_targets(struct module_qstate* qstate, struct iter_qstate* iq,
if(query_count > 0)
qstate->ext_state[id] = module_wait_subquery;
- return 1;
+ return 0;
}
/**
@@ -2180,12 +2207,14 @@ processLastResort(struct module_qstate* qstate, struct iter_qstate* iq,
}
/* query for an extra name added by the parent-NS record */
if(delegpt_count_missing_targets(iq->dp, NULL) > 0) {
- int qs = 0;
+ int qs = 0, ret;
verbose(VERB_ALGO, "try parent-side target name");
- if(!query_for_targets(qstate, iq, ie, id, 1, &qs)) {
+ if((ret=query_for_targets(qstate, iq, ie, id, 1, &qs))!=0) {
errinf(qstate, "could not fetch nameserver");
errinf_dname(qstate, "at zone", iq->dp->name);
- return error_response(qstate, id, LDNS_RCODE_SERVFAIL);
+ if(ret == 1)
+ return error_response(qstate, id, LDNS_RCODE_SERVFAIL);
+ return error_response_cache(qstate, id, LDNS_RCODE_SERVFAIL);
}
iq->num_target_queries += qs;
target_count_increase(iq, qs);
@@ -2414,13 +2443,13 @@ processQueryTargets(struct module_qstate* qstate, struct iter_qstate* iq,
verbose(VERB_QUERY, "request has exceeded the maximum "
"number of referrrals with %d", iq->referral_count);
errinf(qstate, "exceeded the maximum of referrals");
- return error_response(qstate, id, LDNS_RCODE_SERVFAIL);
+ return error_response_cache(qstate, id, LDNS_RCODE_SERVFAIL);
}
if(iq->sent_count > ie->max_sent_count) {
verbose(VERB_QUERY, "request has exceeded the maximum "
"number of sends with %d", iq->sent_count);
errinf(qstate, "exceeded the maximum number of sends");
- return error_response(qstate, id, LDNS_RCODE_SERVFAIL);
+ return error_response_cache(qstate, id, LDNS_RCODE_SERVFAIL);
}
/* Check if we reached MAX_TARGET_NX limit without a fallback activation. */
@@ -2450,7 +2479,7 @@ processQueryTargets(struct module_qstate* qstate, struct iter_qstate* iq,
"already present for the delegation point, no "
"fallback possible");
errinf(qstate, "exceeded the maximum nameserver nxdomains");
- return error_response(qstate, id, LDNS_RCODE_SERVFAIL);
+ return error_response_cache(qstate, id, LDNS_RCODE_SERVFAIL);
}
verbose(VERB_ALGO, "initiating parent-side fallback for "
"nxdomain nameserver lookups");
@@ -2493,7 +2522,7 @@ processQueryTargets(struct module_qstate* qstate, struct iter_qstate* iq,
"lookups (%d) with %d", MAX_TARGET_NX_FALLBACK,
iq->target_count[TARGET_COUNT_NX]);
errinf(qstate, "exceeded the maximum nameserver nxdomains");
- return error_response(qstate, id, LDNS_RCODE_SERVFAIL);
+ return error_response_cache(qstate, id, LDNS_RCODE_SERVFAIL);
}
if(!iq->dp->has_parent_side_NS) {
@@ -2707,7 +2736,7 @@ processQueryTargets(struct module_qstate* qstate, struct iter_qstate* iq,
verbose(VERB_ALGO, "auth zone lookup failed, no fallback,"
" servfail");
errinf(qstate, "auth zone lookup failed, fallback is off");
- return error_response(qstate, id, LDNS_RCODE_SERVFAIL);
+ return error_response_cache(qstate, id, LDNS_RCODE_SERVFAIL);
}
if(iq->dp->auth_dp) {
/* we wanted to fallback, but had no delegpt, only the
@@ -2736,11 +2765,13 @@ processQueryTargets(struct module_qstate* qstate, struct iter_qstate* iq,
/* if in 0x20 fallback get as many targets as possible */
if(iq->caps_fallback) {
- int extra = 0;
+ int extra = 0, ret;
size_t naddr, nres, navail;
- if(!query_for_targets(qstate, iq, ie, id, -1, &extra)) {
+ if((ret=query_for_targets(qstate, iq, ie, id, -1, &extra))!=0) {
errinf(qstate, "could not fetch nameservers for 0x20 fallback");
- return error_response(qstate, id, LDNS_RCODE_SERVFAIL);
+ if(ret == 1)
+ return error_response(qstate, id, LDNS_RCODE_SERVFAIL);
+ return error_response_cache(qstate, id, LDNS_RCODE_SERVFAIL);
}
iq->num_target_queries += extra;
target_count_increase(iq, extra);
@@ -2883,14 +2914,17 @@ processQueryTargets(struct module_qstate* qstate, struct iter_qstate* iq,
* to distinguish between generating (a) new target
* query, or failing. */
if(delegpt_count_missing_targets(iq->dp, NULL) > 0) {
- int qs = 0;
+ int qs = 0, ret;
verbose(VERB_ALGO, "querying for next "
"missing target");
- if(!query_for_targets(qstate, iq, ie, id,
- 1, &qs)) {
+ if((ret=query_for_targets(qstate, iq, ie, id,
+ 1, &qs))!=0) {
errinf(qstate, "could not fetch nameserver");
errinf_dname(qstate, "at zone", iq->dp->name);
- return error_response(qstate, id,
+ if(ret == 1)
+ return error_response(qstate, id,
+ LDNS_RCODE_SERVFAIL);
+ return error_response_cache(qstate, id,
LDNS_RCODE_SERVFAIL);
}
if(qs == 0 &&
@@ -2902,6 +2936,17 @@ processQueryTargets(struct module_qstate* qstate, struct iter_qstate* iq,
* so this is not a loop. */
return 1;
}
+ if(qs == 0) {
+ /* There should be targets now, and
+ * if there are not, it should not
+ * wait for no targets. Stop it from
+ * waiting forever, or looping to
+ * here, as a safeguard. */
+ errinf(qstate, "could not generate nameserver lookups");
+ errinf_dname(qstate, "at zone", iq->dp->name);
+ return error_response(qstate, id,
+ LDNS_RCODE_SERVFAIL);
+ }
iq->num_target_queries += qs;
target_count_increase(iq, qs);
}
@@ -2976,6 +3021,17 @@ processQueryTargets(struct module_qstate* qstate, struct iter_qstate* iq,
}
}
+ target_count_increase_global_quota(iq, 1);
+ if(iq->target_count && iq->target_count[TARGET_COUNT_GLOBAL_QUOTA]
+ > MAX_GLOBAL_QUOTA) {
+ char s[LDNS_MAX_DOMAINLEN+1];
+ dname_str(qstate->qinfo.qname, s);
+ verbose(VERB_QUERY, "request %s has exceeded the maximum "
+ "global quota on number of upstream queries %d", s,
+ iq->target_count[TARGET_COUNT_GLOBAL_QUOTA]);
+ return error_response_cache(qstate, id, LDNS_RCODE_SERVFAIL);
+ }
+
/* Do not check ratelimit for forwarding queries or if we already got a
* pass. */
sq_check_ratelimit = (!(iq->chase_flags & BIT_RD) && !iq->ratelimit_ok);
@@ -3025,7 +3081,7 @@ processQueryTargets(struct module_qstate* qstate, struct iter_qstate* iq,
qstate->was_ratelimited = 1;
errinf_dname(qstate, "exceeded ratelimit for zone",
iq->dp->name);
- return error_response(qstate, id, LDNS_RCODE_SERVFAIL);
+ return error_response_cache(qstate, id, LDNS_RCODE_SERVFAIL);
}
log_addr(VERB_QUERY, "error sending query to auth server",
&real_addr, real_addrlen);
@@ -3247,7 +3303,7 @@ processQueryResponse(struct module_qstate* qstate, struct iter_qstate* iq,
iter_scrub_nxdomain(iq->response);
return final_state(iq);
}
- return error_response(qstate, id,
+ return error_response_cache(qstate, id,
LDNS_RCODE_SERVFAIL);
}
/* Best effort qname-minimisation.
@@ -3582,7 +3638,7 @@ processQueryResponse(struct module_qstate* qstate, struct iter_qstate* iq,
" fallback possible, servfail");
errinf_dname(qstate, "response is bad, no fallback, "
"for auth zone", iq->dp->name);
- return error_response(qstate, id, LDNS_RCODE_SERVFAIL);
+ return error_response_cache(qstate, id, LDNS_RCODE_SERVFAIL);
}
verbose(VERB_ALGO, "auth zone response was bad, "
"fallback enabled");
@@ -3990,7 +4046,7 @@ processCollectClass(struct module_qstate* qstate, int id)
if(iq->num_current_queries == 0) {
verbose(VERB_ALGO, "No root hints or fwds, giving up "
"on qclass ANY");
- return error_response(qstate, id, LDNS_RCODE_REFUSED);
+ return error_response_cache(qstate, id, LDNS_RCODE_REFUSED);
}
/* return false, wait for queries to return */
}
@@ -4357,7 +4413,7 @@ process_response(struct module_qstate* qstate, struct iter_qstate* iq,
"getting different replies, failed");
outbound_list_remove(&iq->outlist, outbound);
errinf(qstate, "0x20 failed, then got different replies in fallback");
- (void)error_response(qstate, id,
+ (void)error_response_cache(qstate, id,
LDNS_RCODE_SERVFAIL);
return;
}
@@ -4457,8 +4513,8 @@ iter_get_mem(struct module_env* env, int id)
*/
static struct module_func_block iter_block = {
"iterator",
- &iter_init, &iter_deinit, &iter_operate, &iter_inform_super,
- &iter_clear, &iter_get_mem
+ NULL, NULL, &iter_init, &iter_deinit, &iter_operate,
+ &iter_inform_super, &iter_clear, &iter_get_mem
};
struct module_func_block*
diff --git a/iterator/iterator.h b/iterator/iterator.h
index e253f3f7e2bd..70b11df7ebcf 100644
--- a/iterator/iterator.h
+++ b/iterator/iterator.h
@@ -55,6 +55,9 @@ struct rbtree_type;
/** max number of targets spawned for a query and its subqueries */
#define MAX_TARGET_COUNT 64
+/** max number of upstream queries for a query and its subqueries, it is
+ * never reset. */
+#define MAX_GLOBAL_QUOTA 128
/** max number of target lookups per qstate, per delegation point */
#define MAX_DP_TARGET_COUNT 16
/** max number of nxdomains allowed for target lookups for a query and
@@ -248,6 +251,9 @@ enum target_count_variables {
TARGET_COUNT_QUERIES,
/** Number of nxdomain responses encountered. */
TARGET_COUNT_NX,
+ /** Global quota on number of queries to upstream servers per
+ * client request, that is never reset. */
+ TARGET_COUNT_GLOBAL_QUOTA,
/** This should stay last here, it is used for the allocation */
TARGET_COUNT_MAX,
diff --git a/libunbound/context.c b/libunbound/context.c
index a319f59cdea8..05f57987a404 100644
--- a/libunbound/context.c
+++ b/libunbound/context.c
@@ -75,7 +75,9 @@ context_finalize(struct ub_ctx* ctx)
ctx->pipe_pid = getpid();
cfg_apply_local_port_policy(cfg, 65536);
config_apply(cfg);
- if(!modstack_setup(&ctx->mods, cfg->module_conf, ctx->env))
+ if(!modstack_call_startup(&ctx->mods, cfg->module_conf, ctx->env))
+ return UB_INITFAIL;
+ if(!modstack_call_init(&ctx->mods, cfg->module_conf, ctx->env))
return UB_INITFAIL;
listen_setup_locks();
log_edns_known_options(VERB_ALGO, ctx->env);
diff --git a/libunbound/libunbound.c b/libunbound/libunbound.c
index 17057ec6c014..9c6a3e309717 100644
--- a/libunbound/libunbound.c
+++ b/libunbound/libunbound.c
@@ -188,7 +188,9 @@ ub_ctx_create(void)
int e = errno;
ub_randfree(ctx->seed_rnd);
config_delete(ctx->env->cfg);
- modstack_desetup(&ctx->mods, ctx->env);
+ modstack_call_deinit(&ctx->mods, ctx->env);
+ modstack_call_destartup(&ctx->mods, ctx->env);
+ modstack_free(&ctx->mods);
listen_desetup_locks();
edns_known_options_delete(ctx->env);
edns_strings_delete(ctx->env->edns_strings);
@@ -202,7 +204,9 @@ ub_ctx_create(void)
tube_delete(ctx->qq_pipe);
ub_randfree(ctx->seed_rnd);
config_delete(ctx->env->cfg);
- modstack_desetup(&ctx->mods, ctx->env);
+ modstack_call_deinit(&ctx->mods, ctx->env);
+ modstack_call_destartup(&ctx->mods, ctx->env);
+ modstack_free(&ctx->mods);
listen_desetup_locks();
edns_known_options_delete(ctx->env);
edns_strings_delete(ctx->env->edns_strings);
@@ -360,7 +364,9 @@ ub_ctx_delete(struct ub_ctx* ctx)
}
libworker_delete_event(ctx->event_worker);
- modstack_desetup(&ctx->mods, ctx->env);
+ modstack_call_deinit(&ctx->mods, ctx->env);
+ modstack_call_destartup(&ctx->mods, ctx->env);
+ modstack_free(&ctx->mods);
a = ctx->alloc_list;
while(a) {
na = a->super;
@@ -981,7 +987,8 @@ ub_ctx_set_fwd(struct ub_ctx* ctx, const char* addr)
if(!addr) {
/* disable fwd mode - the root stub should be first. */
if(ctx->env->cfg->forwards &&
- strcmp(ctx->env->cfg->forwards->name, ".") == 0) {
+ (ctx->env->cfg->forwards->name &&
+ strcmp(ctx->env->cfg->forwards->name, ".") == 0)) {
s = ctx->env->cfg->forwards;
ctx->env->cfg->forwards = s->next;
s->next = NULL;
@@ -1001,7 +1008,8 @@ ub_ctx_set_fwd(struct ub_ctx* ctx, const char* addr)
/* it parses, add root stub in front of list */
lock_basic_lock(&ctx->cfglock);
if(!ctx->env->cfg->forwards ||
- strcmp(ctx->env->cfg->forwards->name, ".") != 0) {
+ (ctx->env->cfg->forwards->name &&
+ strcmp(ctx->env->cfg->forwards->name, ".") != 0)) {
s = calloc(1, sizeof(*s));
if(!s) {
lock_basic_unlock(&ctx->cfglock);
@@ -1019,6 +1027,7 @@ ub_ctx_set_fwd(struct ub_ctx* ctx, const char* addr)
ctx->env->cfg->forwards = s;
} else {
log_assert(ctx->env->cfg->forwards);
+ log_assert(ctx->env->cfg->forwards->name);
s = ctx->env->cfg->forwards;
}
dupl = strdup(addr);
diff --git a/libunbound/libworker.c b/libunbound/libworker.c
index 5c75f61d8dcb..94b644a49b86 100644
--- a/libunbound/libworker.c
+++ b/libunbound/libworker.c
@@ -292,6 +292,7 @@ libworker_do_cmd(struct libworker* w, uint8_t* msg, uint32_t len)
log_err("unknown command for bg worker %d",
(int)context_serial_getcmd(msg, len));
/* and fall through to quit */
+ ATTR_FALLTHROUGH
/* fallthrough */
case UB_LIBCMD_QUIT:
free(msg);
diff --git a/pythonmod/pythonmod.c b/pythonmod/pythonmod.c
index b8f2d62fb966..e231ad079172 100644
--- a/pythonmod/pythonmod.c
+++ b/pythonmod/pythonmod.c
@@ -777,8 +777,8 @@ size_t pythonmod_get_mem(struct module_env* env, int id)
*/
static struct module_func_block pythonmod_block = {
"python",
- &pythonmod_init, &pythonmod_deinit, &pythonmod_operate, &pythonmod_inform_super,
- &pythonmod_clear, &pythonmod_get_mem
+ NULL, NULL, &pythonmod_init, &pythonmod_deinit, &pythonmod_operate,
+ &pythonmod_inform_super, &pythonmod_clear, &pythonmod_get_mem
};
struct module_func_block* pythonmod_get_funcblock(void)
diff --git a/respip/respip.c b/respip/respip.c
index 942e082b9577..db48f176e460 100644
--- a/respip/respip.c
+++ b/respip/respip.c
@@ -1259,8 +1259,8 @@ respip_get_mem(struct module_env* env, int id)
*/
static struct module_func_block respip_block = {
"respip",
- &respip_init, &respip_deinit, &respip_operate, &respip_inform_super,
- &respip_clear, &respip_get_mem
+ NULL, NULL, &respip_init, &respip_deinit, &respip_operate,
+ &respip_inform_super, &respip_clear, &respip_get_mem
};
struct module_func_block*
diff --git a/services/authzone.c b/services/authzone.c
index f01a6d9e0e0e..580a681f57ce 100644
--- a/services/authzone.c
+++ b/services/authzone.c
@@ -7778,7 +7778,8 @@ static void auth_zone_log(uint8_t* name, enum verbosity_value level,
static int zonemd_dnssec_verify_rrset(struct auth_zone* z,
struct module_env* env, struct module_stack* mods,
struct ub_packed_rrset_key* dnskey, struct auth_data* node,
- struct auth_rrset* rrset, char** why_bogus, uint8_t* sigalg)
+ struct auth_rrset* rrset, char** why_bogus, uint8_t* sigalg,
+ char* reasonbuf, size_t reasonlen)
{
struct ub_packed_rrset_key pk;
enum sec_status sec;
@@ -7808,7 +7809,7 @@ static int zonemd_dnssec_verify_rrset(struct auth_zone* z,
"zonemd: verify %s RRset with DNSKEY", typestr);
}
sec = dnskeyset_verify_rrset(env, ve, &pk, dnskey, sigalg, why_bogus, NULL,
- LDNS_SECTION_ANSWER, NULL, &verified);
+ LDNS_SECTION_ANSWER, NULL, &verified, reasonbuf, reasonlen);
if(sec == sec_status_secure) {
return 1;
}
@@ -7851,7 +7852,8 @@ static int nsec3_of_param_has_type(struct auth_rrset* nsec3, int algo,
static int zonemd_check_dnssec_absence(struct auth_zone* z,
struct module_env* env, struct module_stack* mods,
struct ub_packed_rrset_key* dnskey, struct auth_data* apex,
- char** reason, char** why_bogus, uint8_t* sigalg)
+ char** reason, char** why_bogus, uint8_t* sigalg, char* reasonbuf,
+ size_t reasonlen)
{
struct auth_rrset* nsec = NULL;
if(!apex) {
@@ -7863,7 +7865,7 @@ static int zonemd_check_dnssec_absence(struct auth_zone* z,
struct ub_packed_rrset_key pk;
/* dnssec verify the NSEC */
if(!zonemd_dnssec_verify_rrset(z, env, mods, dnskey, apex,
- nsec, why_bogus, sigalg)) {
+ nsec, why_bogus, sigalg, reasonbuf, reasonlen)) {
*reason = "DNSSEC verify failed for NSEC RRset";
return 0;
}
@@ -7906,7 +7908,7 @@ static int zonemd_check_dnssec_absence(struct auth_zone* z,
}
/* dnssec verify the NSEC3 */
if(!zonemd_dnssec_verify_rrset(z, env, mods, dnskey, match,
- nsec3, why_bogus, sigalg)) {
+ nsec3, why_bogus, sigalg, reasonbuf, reasonlen)) {
*reason = "DNSSEC verify failed for NSEC3 RRset";
return 0;
}
@@ -7928,7 +7930,7 @@ static int zonemd_check_dnssec_soazonemd(struct auth_zone* z,
struct module_env* env, struct module_stack* mods,
struct ub_packed_rrset_key* dnskey, struct auth_data* apex,
struct auth_rrset* zonemd_rrset, char** reason, char** why_bogus,
- uint8_t* sigalg)
+ uint8_t* sigalg, char* reasonbuf, size_t reasonlen)
{
struct auth_rrset* soa;
if(!apex) {
@@ -7941,12 +7943,12 @@ static int zonemd_check_dnssec_soazonemd(struct auth_zone* z,
return 0;
}
if(!zonemd_dnssec_verify_rrset(z, env, mods, dnskey, apex, soa,
- why_bogus, sigalg)) {
+ why_bogus, sigalg, reasonbuf, reasonlen)) {
*reason = "DNSSEC verify failed for SOA RRset";
return 0;
}
if(!zonemd_dnssec_verify_rrset(z, env, mods, dnskey, apex,
- zonemd_rrset, why_bogus, sigalg)) {
+ zonemd_rrset, why_bogus, sigalg, reasonbuf, reasonlen)) {
*reason = "DNSSEC verify failed for ZONEMD RRset";
return 0;
}
@@ -8014,6 +8016,7 @@ auth_zone_verify_zonemd_with_key(struct auth_zone* z, struct module_env* env,
struct module_stack* mods, struct ub_packed_rrset_key* dnskey,
int is_insecure, char** result, uint8_t* sigalg)
{
+ char reasonbuf[256];
char* reason = NULL, *why_bogus = NULL;
struct auth_data* apex = NULL;
struct auth_rrset* zonemd_rrset = NULL;
@@ -8042,7 +8045,8 @@ auth_zone_verify_zonemd_with_key(struct auth_zone* z, struct module_env* env,
} else if(!zonemd_rrset && dnskey && !is_insecure) {
/* fetch, DNSSEC verify, and check NSEC/NSEC3 */
if(!zonemd_check_dnssec_absence(z, env, mods, dnskey, apex,
- &reason, &why_bogus, sigalg)) {
+ &reason, &why_bogus, sigalg, reasonbuf,
+ sizeof(reasonbuf))) {
auth_zone_zonemd_fail(z, env, reason, why_bogus, result);
return;
}
@@ -8050,7 +8054,8 @@ auth_zone_verify_zonemd_with_key(struct auth_zone* z, struct module_env* env,
} else if(zonemd_rrset && dnskey && !is_insecure) {
/* check DNSSEC verify of SOA and ZONEMD */
if(!zonemd_check_dnssec_soazonemd(z, env, mods, dnskey, apex,
- zonemd_rrset, &reason, &why_bogus, sigalg)) {
+ zonemd_rrset, &reason, &why_bogus, sigalg, reasonbuf,
+ sizeof(reasonbuf))) {
auth_zone_zonemd_fail(z, env, reason, why_bogus, result);
return;
}
@@ -8107,6 +8112,8 @@ auth_zone_verify_zonemd_with_key(struct auth_zone* z, struct module_env* env,
* @param why_bogus: if the routine fails, returns the failure reason.
* @param keystorage: where to store the ub_packed_rrset_key that is created
* on success. A pointer to it is returned on success.
+ * @param reasonbuf: buffer to use for fail reason string print.
+ * @param reasonlen: length of reasonbuf.
* @return the dnskey RRset, reference to zone data and keystorage, or
* NULL on failure.
*/
@@ -8114,7 +8121,8 @@ static struct ub_packed_rrset_key*
zonemd_get_dnskey_from_anchor(struct auth_zone* z, struct module_env* env,
struct module_stack* mods, struct trust_anchor* anchor,
int* is_insecure, char** why_bogus,
- struct ub_packed_rrset_key* keystorage)
+ struct ub_packed_rrset_key* keystorage, char* reasonbuf,
+ size_t reasonlen)
{
struct auth_data* apex;
struct auth_rrset* dnskey_rrset;
@@ -8150,7 +8158,8 @@ 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, NULL);
+ anchor->dnskey_rrset, NULL, why_bogus, NULL, NULL, reasonbuf,
+ reasonlen);
regional_free_all(env->scratch);
if(sec == sec_status_secure) {
/* success */
@@ -8173,7 +8182,8 @@ static struct ub_packed_rrset_key*
auth_zone_verify_zonemd_key_with_ds(struct auth_zone* z,
struct module_env* env, struct module_stack* mods,
struct ub_packed_rrset_key* ds, int* is_insecure, char** why_bogus,
- struct ub_packed_rrset_key* keystorage, uint8_t* sigalg)
+ struct ub_packed_rrset_key* keystorage, uint8_t* sigalg,
+ char* reasonbuf, size_t reasonlen)
{
struct auth_data* apex;
struct auth_rrset* dnskey_rrset;
@@ -8209,7 +8219,7 @@ auth_zone_verify_zonemd_key_with_ds(struct auth_zone* z,
keystorage->rk.rrset_class = htons(z->dclass);
auth_zone_log(z->name, VERB_QUERY, "zonemd: verify zone DNSKEY with DS");
sec = val_verify_DNSKEY_with_DS(env, ve, keystorage, ds, sigalg,
- why_bogus, NULL, NULL);
+ why_bogus, NULL, NULL, reasonbuf, reasonlen);
regional_free_all(env->scratch);
if(sec == sec_status_secure) {
/* success */
@@ -8235,6 +8245,7 @@ void auth_zonemd_dnskey_lookup_callback(void* arg, int rcode, sldns_buffer* buf,
{
struct auth_zone* z = (struct auth_zone*)arg;
struct module_env* env;
+ char reasonbuf[256];
char* reason = NULL, *ds_bogus = NULL, *typestr="DNSKEY";
struct ub_packed_rrset_key* dnskey = NULL, *ds = NULL;
int is_insecure = 0, downprot;
@@ -8346,7 +8357,8 @@ void auth_zonemd_dnskey_lookup_callback(void* arg, int rcode, sldns_buffer* buf,
if(!reason && !is_insecure && !dnskey && ds) {
dnskey = auth_zone_verify_zonemd_key_with_ds(z, env,
&env->mesh->mods, ds, &is_insecure, &ds_bogus,
- &keystorage, downprot?sigalg:NULL);
+ &keystorage, downprot?sigalg:NULL, reasonbuf,
+ sizeof(reasonbuf));
if(!dnskey && !is_insecure && !reason)
reason = "DNSKEY verify with DS failed";
}
@@ -8354,6 +8366,7 @@ void auth_zonemd_dnskey_lookup_callback(void* arg, int rcode, sldns_buffer* buf,
if(reason) {
auth_zone_zonemd_fail(z, env, reason, ds_bogus, NULL);
lock_rw_unlock(&z->lock);
+ regional_free_all(env->scratch);
return;
}
@@ -8438,6 +8451,7 @@ zonemd_lookup_dnskey(struct auth_zone* z, struct module_env* env)
void auth_zone_verify_zonemd(struct auth_zone* z, struct module_env* env,
struct module_stack* mods, char** result, int offline, int only_online)
{
+ char reasonbuf[256];
char* reason = NULL, *why_bogus = NULL;
struct trust_anchor* anchor = NULL;
struct ub_packed_rrset_key* dnskey = NULL;
@@ -8472,7 +8486,8 @@ void auth_zone_verify_zonemd(struct auth_zone* z, struct module_env* env,
}
/* equal to trustanchor, no need for online lookups */
dnskey = zonemd_get_dnskey_from_anchor(z, env, mods, anchor,
- &is_insecure, &why_bogus, &keystorage);
+ &is_insecure, &why_bogus, &keystorage, reasonbuf,
+ sizeof(reasonbuf));
lock_basic_unlock(&anchor->lock);
if(!dnskey && !reason && !is_insecure) {
reason = "verify DNSKEY RRset with trust anchor failed";
@@ -8498,6 +8513,7 @@ void auth_zone_verify_zonemd(struct auth_zone* z, struct module_env* env,
if(reason) {
auth_zone_zonemd_fail(z, env, reason, why_bogus, result);
+ regional_free_all(env->scratch);
return;
}
diff --git a/services/cache/dns.c b/services/cache/dns.c
index 632ed79ace49..5e74c31693b3 100644
--- a/services/cache/dns.c
+++ b/services/cache/dns.c
@@ -96,7 +96,8 @@ store_rrsets(struct module_env* env, struct reply_info* rep, time_t now,
struct ub_packed_rrset_key* ck;
lock_rw_rdlock(&rep->ref[i].key->entry.lock);
/* if deleted rrset, do not copy it */
- if(rep->ref[i].key->id == 0)
+ if(rep->ref[i].key->id == 0 ||
+ rep->ref[i].id != rep->ref[i].key->id)
ck = NULL;
else ck = packed_rrset_copy_region(
rep->ref[i].key, region, now);
@@ -109,14 +110,22 @@ store_rrsets(struct module_env* env, struct reply_info* rep, time_t now,
/* no break: also copy key item */
/* the line below is matched by gcc regex and silences
* the fallthrough warning */
+ ATTR_FALLTHROUGH
/* fallthrough */
case 1: /* ref updated, item inserted */
rep->rrsets[i] = rep->ref[i].key;
+ /* ref was updated; make sure the message ttl is
+ * updated to the minimum of the current rrsets. */
+ lock_rw_rdlock(&rep->ref[i].key->entry.lock);
+ /* if deleted, skip ttl update. */
+ if(rep->ref[i].key->id != 0 &&
+ rep->ref[i].id == rep->ref[i].key->id) {
+ ttl = ((struct packed_rrset_data*)
+ rep->rrsets[i]->entry.data)->ttl;
+ if(ttl < min_ttl) min_ttl = ttl;
+ }
+ lock_rw_unlock(&rep->ref[i].key->entry.lock);
}
- /* if ref was updated make sure the message ttl is updated to
- * the minimum of the current rrsets. */
- ttl = ((struct packed_rrset_data*)rep->rrsets[i]->entry.data)->ttl;
- if(ttl < min_ttl) min_ttl = ttl;
}
if(min_ttl < rep->ttl) {
rep->ttl = min_ttl;
@@ -337,6 +346,13 @@ find_add_addrs(struct module_env* env, uint16_t qclass,
* not use dns64 translation */
neg = msg_cache_lookup(env, ns->name, ns->namelen,
LDNS_RR_TYPE_AAAA, qclass, 0, now, 0);
+ /* Because recursion for lookup uses BIT_CD, check
+ * for that so it stops the recursion lookup, if a
+ * negative answer is cached. Because the cache uses
+ * the CD flag for type AAAA. */
+ if(!neg)
+ neg = msg_cache_lookup(env, ns->name, ns->namelen,
+ LDNS_RR_TYPE_AAAA, qclass, BIT_CD, now, 0);
if(neg) {
delegpt_add_neg_msg(dp, neg);
lock_rw_unlock(&neg->entry.lock);
@@ -396,6 +412,13 @@ cache_fill_missing(struct module_env* env, uint16_t qclass,
* not use dns64 translation */
neg = msg_cache_lookup(env, ns->name, ns->namelen,
LDNS_RR_TYPE_AAAA, qclass, 0, now, 0);
+ /* Because recursion for lookup uses BIT_CD, check
+ * for that so it stops the recursion lookup, if a
+ * negative answer is cached. Because the cache uses
+ * the CD flag for type AAAA. */
+ if(!neg)
+ neg = msg_cache_lookup(env, ns->name, ns->namelen,
+ LDNS_RR_TYPE_AAAA, qclass, BIT_CD, now, 0);
if(neg) {
delegpt_add_neg_msg(dp, neg);
lock_rw_unlock(&neg->entry.lock);
diff --git a/services/cache/infra.c b/services/cache/infra.c
index 457685ab5985..66b17c1218ea 100644
--- a/services/cache/infra.c
+++ b/services/cache/infra.c
@@ -60,6 +60,16 @@
* can do this number of packets (until those all timeout too) */
#define TIMEOUT_COUNT_MAX 3
+/** Minus 1000 because that is outside of the RTTBAND, so
+ * blacklisted servers stay blacklisted if this is chosen.
+ * If USEFUL_SERVER_TOP_TIMEOUT is below 1000 (configured via RTT_MAX_TIMEOUT,
+ * infra-cache-max-rtt) change it to just above the RTT_BAND. */
+#define STILL_USEFUL_TIMEOUT ( \
+ USEFUL_SERVER_TOP_TIMEOUT < 1000 || \
+ USEFUL_SERVER_TOP_TIMEOUT - 1000 <= RTT_BAND \
+ ?RTT_BAND + 1 \
+ :USEFUL_SERVER_TOP_TIMEOUT - 1000)
+
/** ratelimit value for delegation point */
int infra_dp_ratelimit = 0;
@@ -347,6 +357,7 @@ infra_create(struct config_file* cfg)
return NULL;
}
infra_ip_ratelimit = cfg->ip_ratelimit;
+ infra_ip_ratelimit_cookie = cfg->ip_ratelimit_cookie;
infra->client_ip_rates = slabhash_create(cfg->ip_ratelimit_slabs,
INFRA_HOST_STARTSIZE, cfg->ip_ratelimit_size, &ip_rate_sizefunc,
&ip_rate_compfunc, &ip_rate_delkeyfunc, &ip_rate_deldatafunc, NULL);
@@ -398,6 +409,7 @@ infra_adjust(struct infra_cache* infra, struct config_file* cfg)
infra->infra_keep_probing = cfg->infra_keep_probing;
infra_dp_ratelimit = cfg->ratelimit;
infra_ip_ratelimit = cfg->ip_ratelimit;
+ infra_ip_ratelimit_cookie = cfg->ip_ratelimit_cookie;
maxmem = cfg->infra_cache_numhosts * (sizeof(struct infra_key)+
sizeof(struct infra_data)+INFRA_BYTES_NAME);
/* divide cachesize by slabs and multiply by slabs, because if the
@@ -656,7 +668,7 @@ infra_update_tcp_works(struct infra_cache* infra,
if(data->rtt.rto >= RTT_MAX_TIMEOUT)
/* do not disqualify this server altogether, it is better
* than nothing */
- data->rtt.rto = RTT_MAX_TIMEOUT-1000;
+ data->rtt.rto = STILL_USEFUL_TIMEOUT;
lock_rw_unlock(&e->lock);
}
@@ -796,7 +808,7 @@ infra_get_lame_rtt(struct infra_cache* infra,
&& infra->infra_keep_probing) {
/* single probe, keep probing */
if(*rtt >= USEFUL_SERVER_TOP_TIMEOUT)
- *rtt = USEFUL_SERVER_TOP_TIMEOUT-1000;
+ *rtt = STILL_USEFUL_TIMEOUT;
} else if(host->rtt.rto >= PROBE_MAXRTO && timenow < host->probedelay
&& rtt_notimeout(&host->rtt)*4 <= host->rtt.rto) {
/* single probe for this domain, and we are not probing */
@@ -804,26 +816,23 @@ infra_get_lame_rtt(struct infra_cache* infra,
if(qtype == LDNS_RR_TYPE_A) {
if(host->timeout_A >= TIMEOUT_COUNT_MAX)
*rtt = USEFUL_SERVER_TOP_TIMEOUT;
- else *rtt = USEFUL_SERVER_TOP_TIMEOUT-1000;
+ else *rtt = STILL_USEFUL_TIMEOUT;
} else if(qtype == LDNS_RR_TYPE_AAAA) {
if(host->timeout_AAAA >= TIMEOUT_COUNT_MAX)
*rtt = USEFUL_SERVER_TOP_TIMEOUT;
- else *rtt = USEFUL_SERVER_TOP_TIMEOUT-1000;
+ else *rtt = STILL_USEFUL_TIMEOUT;
} else {
if(host->timeout_other >= TIMEOUT_COUNT_MAX)
*rtt = USEFUL_SERVER_TOP_TIMEOUT;
- else *rtt = USEFUL_SERVER_TOP_TIMEOUT-1000;
+ else *rtt = STILL_USEFUL_TIMEOUT;
}
}
/* expired entry */
if(timenow > host->ttl) {
-
/* see if this can be a re-probe of an unresponsive server */
- /* minus 1000 because that is outside of the RTTBAND, so
- * blacklisted servers stay blacklisted if this is chosen */
if(host->rtt.rto >= USEFUL_SERVER_TOP_TIMEOUT) {
lock_rw_unlock(&e->lock);
- *rtt = USEFUL_SERVER_TOP_TIMEOUT-1000;
+ *rtt = STILL_USEFUL_TIMEOUT;
*lame = 0;
*dnsseclame = 0;
*reclame = 0;
diff --git a/services/cache/infra.h b/services/cache/infra.h
index ee6f384de345..1a88bbb94da8 100644
--- a/services/cache/infra.h
+++ b/services/cache/infra.h
@@ -234,7 +234,7 @@ struct infra_cache* infra_adjust(struct infra_cache* infra,
struct config_file* cfg);
/**
- * Plain find infra data function (used by the the other functions)
+ * Plain find infra data function (used by the other functions)
* @param infra: infrastructure cache.
* @param addr: host address.
* @param addrlen: length of addr.
diff --git a/services/listen_dnsport.c b/services/listen_dnsport.c
index 7eb59a1618a1..6c0691f2a73c 100644
--- a/services/listen_dnsport.c
+++ b/services/listen_dnsport.c
@@ -675,7 +675,7 @@ create_tcp_accept_sock(struct addrinfo *addr, int v6only, int* noproto,
int* reuseport, int transparent, int mss, int nodelay, int freebind,
int use_systemd, int dscp)
{
- int s;
+ int s = -1;
char* err;
#if defined(SO_REUSEADDR) || defined(SO_REUSEPORT) || defined(IPV6_V6ONLY) || defined(IP_TRANSPARENT) || defined(IP_BINDANY) || defined(IP_FREEBIND) || defined(SO_BINDANY)
int on = 1;
diff --git a/services/localzone.c b/services/localzone.c
index 51056c8ffef4..d21e0c48aedb 100644
--- a/services/localzone.c
+++ b/services/localzone.c
@@ -242,7 +242,7 @@ lz_enter_zone_dname(struct local_zones* zones, uint8_t* nm, size_t len,
}
/** enter a new zone */
-static struct local_zone*
+struct local_zone*
lz_enter_zone(struct local_zones* zones, const char* name, const char* type,
uint16_t dclass)
{
@@ -983,40 +983,43 @@ lz_enter_overrides(struct local_zones* zones, struct config_file* cfg)
return 1;
}
+/* return closest parent in the tree, NULL if none */
+static struct local_zone* find_closest_parent(struct local_zone* curr,
+ struct local_zone* prev)
+{
+ struct local_zone* p;
+ int m;
+ if(!prev || prev->dclass != curr->dclass) return NULL;
+ (void)dname_lab_cmp(prev->name, prev->namelabs, curr->name,
+ curr->namelabs, &m); /* we know prev is smaller */
+ /* sort order like: . com. bla.com. zwb.com. net. */
+ /* find the previous, or parent-parent-parent */
+ for(p = prev; p; p = p->parent) {
+ /* looking for name with few labels, a parent */
+ if(p->namelabs <= m) {
+ /* ==: since prev matched m, this is closest*/
+ /* <: prev matches more, but is not a parent,
+ * this one is a (grand)parent */
+ return p;
+ }
+ }
+ return NULL;
+}
+
/** setup parent pointers, so that a lookup can be done for closest match */
-static void
-init_parents(struct local_zones* zones)
+void
+lz_init_parents(struct local_zones* zones)
{
- struct local_zone* node, *prev = NULL, *p;
- int m;
+ struct local_zone* node, *prev = NULL;
lock_rw_wrlock(&zones->lock);
- RBTREE_FOR(node, struct local_zone*, &zones->ztree) {
+ RBTREE_FOR(node, struct local_zone*, &zones->ztree) {
lock_rw_wrlock(&node->lock);
- node->parent = NULL;
- if(!prev || prev->dclass != node->dclass) {
- prev = node;
- lock_rw_unlock(&node->lock);
- continue;
- }
- (void)dname_lab_cmp(prev->name, prev->namelabs, node->name,
- node->namelabs, &m); /* we know prev is smaller */
- /* sort order like: . com. bla.com. zwb.com. net. */
- /* find the previous, or parent-parent-parent */
- for(p = prev; p; p = p->parent)
- /* looking for name with few labels, a parent */
- if(p->namelabs <= m) {
- /* ==: since prev matched m, this is closest*/
- /* <: prev matches more, but is not a parent,
- * this one is a (grand)parent */
- node->parent = p;
- break;
- }
- prev = node;
-
+ node->parent = find_closest_parent(node, prev);
+ prev = node;
if(node->override_tree)
addr_tree_init_parents(node->override_tree);
lock_rw_unlock(&node->lock);
- }
+ }
lock_rw_unlock(&zones->lock);
}
@@ -1036,7 +1039,7 @@ lz_setup_implicit(struct local_zones* zones, struct config_file* cfg)
int nmlabs = 0;
int match = 0; /* number of labels match count */
- init_parents(zones); /* to enable local_zones_lookup() */
+ lz_init_parents(zones); /* to enable local_zones_lookup() */
for(p = cfg->local_data; p; p = p->next) {
uint8_t* rr_name;
uint16_t rr_class, rr_type;
@@ -1202,7 +1205,7 @@ local_zones_apply_cfg(struct local_zones* zones, struct config_file* cfg)
}
/* setup parent ptrs for lookup during data entry */
- init_parents(zones);
+ lz_init_parents(zones);
/* insert local zone tags */
if(!lz_enter_zone_tags(zones, cfg)) {
return 0;
@@ -2028,7 +2031,9 @@ struct local_zone* local_zones_add_zone(struct local_zones* zones,
uint8_t* name, size_t len, int labs, uint16_t dclass,
enum localzone_type tp)
{
+ int exact;
/* create */
+ struct local_zone *prev;
struct local_zone* z = local_zone_create(name, len, labs, tp, dclass);
if(!z) {
free(name);
@@ -2037,10 +2042,12 @@ struct local_zone* local_zones_add_zone(struct local_zones* zones,
lock_rw_wrlock(&z->lock);
/* find the closest parent */
- z->parent = local_zones_find(zones, name, len, labs, dclass);
+ prev = local_zones_find_le(zones, name, len, labs, dclass, &exact);
+ if(!exact)
+ z->parent = find_closest_parent(z, prev);
/* insert into the tree */
- if(!rbtree_insert(&zones->ztree, &z->node)) {
+ if(exact||!rbtree_insert(&zones->ztree, &z->node)) {
/* duplicate entry! */
lock_rw_unlock(&z->lock);
local_zone_delete(z);
diff --git a/services/localzone.h b/services/localzone.h
index 4456893ee112..6f0f28b12422 100644
--- a/services/localzone.h
+++ b/services/localzone.h
@@ -641,4 +641,23 @@ local_zone_enter_rr(struct local_zone* z, uint8_t* nm, size_t nmlen,
*/
struct local_data*
local_zone_find_data(struct local_zone* z, uint8_t* nm, size_t nmlen, int nmlabs);
+
+/** Enter a new zone; returns with WRlock
+ * Made public for unit testing
+ * @param zones: the local zones tree
+ * @param name: name of the zone
+ * @param type: type of the zone
+ * @param dclass: class of the zone
+ * @return local_zone (or duplicate), NULL on parse and malloc failures
+ */
+struct local_zone*
+lz_enter_zone(struct local_zones* zones, const char* name, const char* type,
+ uint16_t dclass);
+
+/** Setup parent pointers, so that a lookup can be done for closest match
+ * Made public for unit testing
+ * @param zones: the local zones tree
+ */
+void
+lz_init_parents(struct local_zones* zones);
#endif /* SERVICES_LOCALZONE_H */
diff --git a/services/mesh.c b/services/mesh.c
index e886c4b92c84..522118844b44 100644
--- a/services/mesh.c
+++ b/services/mesh.c
@@ -413,6 +413,7 @@ void mesh_new_client(struct mesh_area* mesh, struct query_info* qinfo,
int timeout = mesh->env->cfg->serve_expired?
mesh->env->cfg->serve_expired_client_timeout:0;
struct sldns_buffer* r_buffer = rep->c->buffer;
+ uint16_t mesh_flags = qflags&(BIT_RD|BIT_CD);
if(rep->c->tcp_req_info) {
r_buffer = rep->c->tcp_req_info->spool_buffer;
}
@@ -425,7 +426,7 @@ void mesh_new_client(struct mesh_area* mesh, struct query_info* qinfo,
return;
}
if(!unique)
- s = mesh_area_find(mesh, cinfo, qinfo, qflags&(BIT_RD|BIT_CD), 0, 0);
+ s = mesh_area_find(mesh, cinfo, qinfo, mesh_flags, 0, 0);
/* does this create a new reply state? */
if(!s || s->list_select == mesh_no_list) {
if(!mesh_make_new_space(mesh, rep->c->buffer)) {
@@ -453,7 +454,7 @@ void mesh_new_client(struct mesh_area* mesh, struct query_info* qinfo,
struct rbnode_type* n;
#endif
s = mesh_state_create(mesh->env, qinfo, cinfo,
- qflags&(BIT_RD|BIT_CD), 0, 0);
+ mesh_flags, 0, 0);
if(!s) {
log_err("mesh_state_create: out of memory; SERVFAIL");
if(!inplace_cb_reply_servfail_call(mesh->env, qinfo, NULL, NULL,
@@ -565,6 +566,8 @@ servfail_mem:
edns->opt_list_inplace_cb_out = NULL;
error_encode(r_buffer, LDNS_RCODE_SERVFAIL,
qinfo, qid, qflags, edns);
+ if(rep->c->use_h2)
+ http2_stream_remove_mesh_state(rep->c->h2_stream);
comm_point_send_reply(rep);
if(added)
mesh_state_delete(&s->s);
@@ -583,8 +586,9 @@ mesh_new_callback(struct mesh_area* mesh, struct query_info* qinfo,
int was_detached = 0;
int was_noreply = 0;
int added = 0;
+ uint16_t mesh_flags = qflags&(BIT_RD|BIT_CD);
if(!unique)
- s = mesh_area_find(mesh, NULL, qinfo, qflags&(BIT_RD|BIT_CD), 0, 0);
+ s = mesh_area_find(mesh, NULL, qinfo, mesh_flags, 0, 0);
/* there are no limits on the number of callbacks */
@@ -594,7 +598,7 @@ mesh_new_callback(struct mesh_area* mesh, struct query_info* qinfo,
struct rbnode_type* n;
#endif
s = mesh_state_create(mesh->env, qinfo, NULL,
- qflags&(BIT_RD|BIT_CD), 0, 0);
+ mesh_flags, 0, 0);
if(!s) {
return 0;
}
@@ -673,8 +677,12 @@ static void mesh_schedule_prefetch(struct mesh_area* mesh,
struct query_info* qinfo, uint16_t qflags, time_t leeway, int run,
int rpz_passthru)
{
+ /* Explicitly set the BIT_RD regardless of the client's flags. This is
+ * for a prefetch query (no client attached) but it needs to be treated
+ * as a recursion query. */
+ uint16_t mesh_flags = BIT_RD|(qflags&BIT_CD);
struct mesh_state* s = mesh_area_find(mesh, NULL, qinfo,
- qflags&(BIT_RD|BIT_CD), 0, 0);
+ mesh_flags, 0, 0);
#ifdef UNBOUND_DEBUG
struct rbnode_type* n;
#endif
@@ -694,8 +702,7 @@ static void mesh_schedule_prefetch(struct mesh_area* mesh,
return;
}
- s = mesh_state_create(mesh->env, qinfo, NULL,
- qflags&(BIT_RD|BIT_CD), 0, 0);
+ s = mesh_state_create(mesh->env, qinfo, NULL, mesh_flags, 0, 0);
if(!s) {
log_err("prefetch mesh_state_create: out of memory");
return;
@@ -756,14 +763,17 @@ static void mesh_schedule_prefetch_subnet(struct mesh_area* mesh,
#ifdef UNBOUND_DEBUG
struct rbnode_type* n;
#endif
+ /* Explicitly set the BIT_RD regardless of the client's flags. This is
+ * for a prefetch query (no client attached) but it needs to be treated
+ * as a recursion query. */
+ uint16_t mesh_flags = BIT_RD|(qflags&BIT_CD);
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);
+ s = mesh_state_create(mesh->env, qinfo, NULL, mesh_flags, 0, 0);
if(!s) {
log_err("prefetch_subnet mesh_state_create: out of memory");
return;
@@ -966,6 +976,8 @@ mesh_state_cleanup(struct mesh_state* mstate)
for(; rep; rep=rep->next) {
infra_wait_limit_dec(mesh->env->infra_cache,
&rep->query_reply, mesh->env->cfg);
+ if(rep->query_reply.c->use_h2)
+ http2_stream_remove_mesh_state(rep->h2_stream);
comm_point_drop_reply(&rep->query_reply);
log_assert(mesh->num_reply_addrs > 0);
mesh->num_reply_addrs--;
@@ -1522,6 +1534,8 @@ void mesh_query_done(struct mesh_state* mstate)
infra_wait_limit_dec(mstate->s.env->infra_cache,
&r->query_reply, mstate->s.env->cfg);
mstate->reply_list = NULL;
+ if(r->query_reply.c->use_h2)
+ http2_stream_remove_mesh_state(r->h2_stream);
comm_point_drop_reply(&r->query_reply);
mstate->reply_list = reply_list;
mstate->s.env->mesh->stats_dropped++;
@@ -1554,6 +1568,9 @@ void mesh_query_done(struct mesh_state* mstate)
infra_wait_limit_dec(mstate->s.env->infra_cache,
&r->query_reply, mstate->s.env->cfg);
mstate->reply_list = NULL;
+ if(r->query_reply.c->use_h2) {
+ http2_stream_remove_mesh_state(r->h2_stream);
+ }
comm_point_drop_reply(&r->query_reply);
mstate->reply_list = reply_list;
} else {
@@ -1568,6 +1585,8 @@ void mesh_query_done(struct mesh_state* mstate)
tcp_req_info_remove_mesh_state(r->query_reply.c->tcp_req_info, mstate);
r_buffer = NULL;
}
+ /* mesh_send_reply removed mesh state from
+ * http2_stream. */
prev = r;
prev_buffer = r_buffer;
}
@@ -1720,6 +1739,7 @@ int mesh_state_add_reply(struct mesh_state* s, struct edns_data* edns,
return 0;
if(rep->c->use_h2)
r->h2_stream = rep->c->h2_stream;
+ else r->h2_stream = NULL;
/* Data related to local alias stored in 'qinfo' (if any) is ephemeral
* and can be different for different original queries (even if the
@@ -2243,6 +2263,8 @@ mesh_serve_expired_callback(void* arg)
infra_wait_limit_dec(mstate->s.env->infra_cache,
&r->query_reply, mstate->s.env->cfg);
mstate->reply_list = NULL;
+ if(r->query_reply.c->use_h2)
+ http2_stream_remove_mesh_state(r->h2_stream);
comm_point_drop_reply(&r->query_reply);
mstate->reply_list = reply_list;
mstate->s.env->mesh->stats_dropped++;
@@ -2276,6 +2298,7 @@ mesh_serve_expired_callback(void* arg)
r, r_buffer, prev, prev_buffer);
if(r->query_reply.c->tcp_req_info)
tcp_req_info_remove_mesh_state(r->query_reply.c->tcp_req_info, mstate);
+ /* mesh_send_reply removed mesh state from http2_stream. */
infra_wait_limit_dec(mstate->s.env->infra_cache,
&r->query_reply, mstate->s.env->cfg);
prev = r;
diff --git a/services/modstack.c b/services/modstack.c
index a90d7178c410..6c8af0505b69 100644
--- a/services/modstack.c
+++ b/services/modstack.c
@@ -95,6 +95,16 @@ modstack_init(struct module_stack* stack)
stack->mod = NULL;
}
+void
+modstack_free(struct module_stack* stack)
+{
+ if(!stack)
+ return;
+ stack->num = 0;
+ free(stack->mod);
+ stack->mod = NULL;
+}
+
int
modstack_config(struct module_stack* stack, const char* module_conf)
{
@@ -222,19 +232,60 @@ module_func_block* module_factory(const char** str)
return NULL;
}
-int
-modstack_setup(struct module_stack* stack, const char* module_conf,
+int
+modstack_call_startup(struct module_stack* stack, const char* module_conf,
struct module_env* env)
{
int i;
if(stack->num != 0)
- modstack_desetup(stack, env);
+ fatal_exit("unexpected already initialised modules");
/* fixed setup of the modules */
if(!modstack_config(stack, module_conf)) {
return 0;
}
+ for(i=0; i<stack->num; i++) {
+ if(stack->mod[i]->startup == NULL)
+ continue;
+ verbose(VERB_OPS, "startup module %d: %s",
+ i, stack->mod[i]->name);
+ fptr_ok(fptr_whitelist_mod_startup(stack->mod[i]->startup));
+ if(!(*stack->mod[i]->startup)(env, i)) {
+ log_err("module startup for module %s failed",
+ stack->mod[i]->name);
+ return 0;
+ }
+ }
+ return 1;
+}
+
+int
+modstack_call_init(struct module_stack* stack, const char* module_conf,
+ struct module_env* env)
+{
+ int i, changed = 0;
env->need_to_validate = 0; /* set by module init below */
for(i=0; i<stack->num; i++) {
+ while(*module_conf && isspace(*module_conf))
+ module_conf++;
+ if(strncmp(stack->mod[i]->name, module_conf,
+ strlen(stack->mod[i]->name))) {
+ if(stack->mod[i]->startup || stack->mod[i]->destartup) {
+ log_err("changed module ordering during reload not supported, for module that needs startup");
+ return 0;
+ } else {
+ changed = 1;
+ }
+ }
+ module_conf += strlen(stack->mod[i]->name);
+ }
+ if(changed) {
+ modstack_free(stack);
+ if(!modstack_config(stack, module_conf)) {
+ return 0;
+ }
+ }
+
+ for(i=0; i<stack->num; i++) {
verbose(VERB_OPS, "init module %d: %s",
i, stack->mod[i]->name);
fptr_ok(fptr_whitelist_mod_init(stack->mod[i]->init));
@@ -247,20 +298,29 @@ modstack_setup(struct module_stack* stack, const char* module_conf,
return 1;
}
-void
-modstack_desetup(struct module_stack* stack, struct module_env* env)
+void
+modstack_call_deinit(struct module_stack* stack, struct module_env* env)
{
int i;
for(i=0; i<stack->num; i++) {
fptr_ok(fptr_whitelist_mod_deinit(stack->mod[i]->deinit));
(*stack->mod[i]->deinit)(env, i);
}
- stack->num = 0;
- free(stack->mod);
- stack->mod = NULL;
}
-int
+void
+modstack_call_destartup(struct module_stack* stack, struct module_env* env)
+{
+ int i;
+ for(i=0; i<stack->num; i++) {
+ if(stack->mod[i]->destartup == NULL)
+ continue;
+ fptr_ok(fptr_whitelist_mod_destartup(stack->mod[i]->destartup));
+ (*stack->mod[i]->destartup)(env, i);
+ }
+}
+
+int
modstack_find(struct module_stack* stack, const char* name)
{
int i;
diff --git a/services/modstack.h b/services/modstack.h
index 3ff01b54d938..5674aefdd018 100644
--- a/services/modstack.h
+++ b/services/modstack.h
@@ -61,6 +61,23 @@ struct module_stack {
void modstack_init(struct module_stack* stack);
/**
+ * Free the stack of modules
+ * @param stack: stack that frees up memory.
+ */
+void modstack_free(struct module_stack* stack);
+
+/**
+ * Initialises modules and assignes ids. Calls module_startup().
+ * @param stack: Expected empty, filled according to module_conf
+ * @param module_conf: string what modules to initialize
+ * @param env: module environment which is inited by the modules.
+ * environment should have a superalloc, cfg,
+ * @return on false a module init failed.
+ */
+int modstack_call_startup(struct module_stack* stack, const char* module_conf,
+ struct module_env* env);
+
+/**
* Read config file module settings and set up the modfunc block
* @param stack: the stack of modules (empty before call).
* @param module_conf: string what modules to insert.
@@ -83,24 +100,31 @@ struct module_func_block* module_factory(const char** str);
const char** module_list_avail(void);
/**
- * Setup modules. Assigns ids and calls module_init.
- * @param stack: if not empty beforehand, it will be desetup()ed.
- * It is then modstack_configged().
- * @param module_conf: string what modules to insert.
+ * Init modules. Calls module_init().
+ * @param stack: It is modstack_setupped().
+ * @param module_conf: module ordering to check against the ordering in stack.
+ * fails on changed ordering.
* @param env: module environment which is inited by the modules.
* environment should have a superalloc, cfg,
* env.need_to_validate is set by the modules.
* @return on false a module init failed.
*/
-int modstack_setup(struct module_stack* stack, const char* module_conf,
+int modstack_call_init(struct module_stack* stack, const char* module_conf,
struct module_env* env);
/**
- * Desetup the modules, deinit, delete.
+ * Deinit the modules.
* @param stack: made empty.
* @param env: module env for module deinit() calls.
*/
-void modstack_desetup(struct module_stack* stack, struct module_env* env);
+void modstack_call_deinit(struct module_stack* stack, struct module_env* env);
+
+/**
+ * Destartup the modules, close, delete.
+ * @param stack: made empty.
+ * @param env: module env for module destartup() calls.
+ */
+void modstack_call_destartup(struct module_stack* stack, struct module_env* env);
/**
* Find index of module by name.
diff --git a/services/outside_network.c b/services/outside_network.c
index 1f89740da360..58f1e6d586aa 100644
--- a/services/outside_network.c
+++ b/services/outside_network.c
@@ -2051,7 +2051,8 @@ select_id(struct outside_network* outnet, struct pending* pend,
}
/** return true is UDP connect error needs to be logged */
-static int udp_connect_needs_log(int err)
+static int udp_connect_needs_log(int err, struct sockaddr_storage* addr,
+ socklen_t addrlen)
{
switch(err) {
case ECONNREFUSED:
@@ -2075,6 +2076,15 @@ static int udp_connect_needs_log(int err)
if(verbosity >= VERB_ALGO)
return 1;
return 0;
+ case EINVAL:
+ /* Stop 'Invalid argument for fe80::/10' addresses appearing
+ * in the logs, at low verbosity. They cannot be sent to. */
+ if(addr_is_ip6linklocal(addr, addrlen)) {
+ if(verbosity >= VERB_ALGO)
+ return 1;
+ return 0;
+ }
+ break;
default:
break;
}
@@ -2141,7 +2151,8 @@ select_ifport(struct outside_network* outnet, struct pending* pend,
/* connect() to the destination */
if(connect(fd, (struct sockaddr*)&pend->addr,
pend->addrlen) < 0) {
- if(udp_connect_needs_log(errno)) {
+ if(udp_connect_needs_log(errno,
+ &pend->addr, pend->addrlen)) {
log_err_addr("udp connect failed",
strerror(errno), &pend->addr,
pend->addrlen);
@@ -3455,7 +3466,10 @@ outnet_serviced_query(struct outside_network* outnet,
timenow = *env->now;
if(!infra_ratelimit_inc(env->infra_cache, zone,
zonelen, timenow, env->cfg->ratelimit_backoff,
- &qstate->qinfo, qstate->reply)) {
+ &qstate->qinfo,
+ qstate->mesh_info->reply_list
+ ?&qstate->mesh_info->reply_list->query_reply
+ :NULL)) {
/* Can we pass through with slip factor? */
if(env->cfg->ratelimit_factor == 0 ||
ub_random_max(env->rnd,
diff --git a/services/rpz.c b/services/rpz.c
index f036cc5fd649..d8999a8a55eb 100644
--- a/services/rpz.c
+++ b/services/rpz.c
@@ -242,10 +242,14 @@ rpz_action_to_localzone_type(enum rpz_action a)
case RPZ_NODATA_ACTION: return local_zone_always_nodata;
case RPZ_DROP_ACTION: return local_zone_always_deny;
case RPZ_PASSTHRU_ACTION: return local_zone_always_transparent;
- case RPZ_LOCAL_DATA_ACTION: /* fallthrough */
+ case RPZ_LOCAL_DATA_ACTION:
+ ATTR_FALLTHROUGH
+ /* fallthrough */
case RPZ_CNAME_OVERRIDE_ACTION: return local_zone_redirect;
case RPZ_TCP_ONLY_ACTION: return local_zone_truncate;
- case RPZ_INVALID_ACTION: /* fallthrough */
+ case RPZ_INVALID_ACTION:
+ ATTR_FALLTHROUGH
+ /* fallthrough */
default: return local_zone_invalid;
}
}
@@ -258,10 +262,14 @@ rpz_action_to_respip_action(enum rpz_action a)
case RPZ_NODATA_ACTION: return respip_always_nodata;
case RPZ_DROP_ACTION: return respip_always_deny;
case RPZ_PASSTHRU_ACTION: return respip_always_transparent;
- case RPZ_LOCAL_DATA_ACTION: /* fallthrough */
+ case RPZ_LOCAL_DATA_ACTION:
+ ATTR_FALLTHROUGH
+ /* fallthrough */
case RPZ_CNAME_OVERRIDE_ACTION: return respip_redirect;
case RPZ_TCP_ONLY_ACTION: return respip_truncate;
- case RPZ_INVALID_ACTION: /* fallthrough */
+ case RPZ_INVALID_ACTION:
+ ATTR_FALLTHROUGH
+ /* fallthrough */
default: return respip_invalid;
}
}
@@ -276,7 +284,9 @@ localzone_type_to_rpz_action(enum localzone_type lzt)
case local_zone_always_transparent: return RPZ_PASSTHRU_ACTION;
case local_zone_redirect: return RPZ_LOCAL_DATA_ACTION;
case local_zone_truncate: return RPZ_TCP_ONLY_ACTION;
- case local_zone_invalid: /* fallthrough */
+ case local_zone_invalid:
+ ATTR_FALLTHROUGH
+ /* fallthrough */
default: return RPZ_INVALID_ACTION;
}
}
@@ -291,7 +301,9 @@ respip_action_to_rpz_action(enum respip_action a)
case respip_always_transparent: return RPZ_PASSTHRU_ACTION;
case respip_redirect: return RPZ_LOCAL_DATA_ACTION;
case respip_truncate: return RPZ_TCP_ONLY_ACTION;
- case respip_invalid: /* fallthrough */
+ case respip_invalid:
+ ATTR_FALLTHROUGH
+ /* fallthrough */
default: return RPZ_INVALID_ACTION;
}
}
@@ -2435,11 +2447,10 @@ rpz_callback_from_iterator_module(struct module_qstate* ms, struct iter_qstate*
if(ms->env == NULL || ms->env->auth_zones == NULL) { return 0; }
az = ms->env->auth_zones;
+ lock_rw_rdlock(&az->rpz_lock);
verbose(VERB_ALGO, "rpz: iterator module callback: have_rpz=%d", az->rpz_first != NULL);
- lock_rw_rdlock(&az->rpz_lock);
-
/* precedence of RPZ works, loosely, like this:
* CNAMEs in order of the CNAME chain. rpzs in the order they are
* configured. In an RPZ: first client-IP addr, then QNAME, then
@@ -2454,6 +2465,13 @@ rpz_callback_from_iterator_module(struct module_qstate* ms, struct iter_qstate*
lock_rw_unlock(&a->lock);
continue;
}
+ if(r->taglist && (!ms->client_info ||
+ !taglist_intersect(r->taglist, r->taglistlen,
+ ms->client_info->taglist,
+ ms->client_info->taglen))) {
+ lock_rw_unlock(&a->lock);
+ continue;
+ }
/* the nsdname has precedence over the nsip triggers */
z = rpz_delegation_point_zone_lookup(is->dp, r->nsdname_zones,
@@ -2512,6 +2530,13 @@ struct dns_msg* rpz_callback_from_iterator_cname(struct module_qstate* ms,
lock_rw_unlock(&a->lock);
continue;
}
+ if(r->taglist && (!ms->client_info ||
+ !taglist_intersect(r->taglist, r->taglistlen,
+ ms->client_info->taglist,
+ ms->client_info->taglen))) {
+ lock_rw_unlock(&a->lock);
+ continue;
+ }
z = rpz_find_zone(r->local_zones, is->qchase.qname,
is->qchase.qname_len, is->qchase.qclass, 0, 0, 0);
if(z && r->action_override == RPZ_DISABLED_ACTION) {
diff --git a/sldns/parse.h b/sldns/parse.h
index fa8f51a924c4..504a78b676e2 100644
--- a/sldns/parse.h
+++ b/sldns/parse.h
@@ -106,7 +106,7 @@ ssize_t sldns_bget_token(struct sldns_buffer *b, char *token, const char *delim,
* \param[in] k_del keyword delimiter
* \param[out] data the data found
* \param[in] d_del the data delimiter
- * \param[in] data_limit maximum size the the data buffer
+ * \param[in] data_limit maximum size the data buffer
* \return the number of character read
*/
ssize_t sldns_fget_keyword_data(FILE *f, const char *keyword, const char *k_del, char *data, const char *d_del, size_t data_limit);
@@ -119,7 +119,7 @@ ssize_t sldns_fget_keyword_data(FILE *f, const char *keyword, const char *k_del,
* \param[in] k_del keyword delimiter
* \param[out] data the data found
* \param[in] d_del the data delimiter
- * \param[in] data_limit maximum size the the data buffer
+ * \param[in] data_limit maximum size the data buffer
* \param[in] line_nr pointer to an integer containing the current line number (for
debugging purposes)
* \return the number of character read
@@ -134,7 +134,7 @@ ssize_t sldns_fget_keyword_data_l(FILE *f, const char *keyword, const char *k_de
* \param[in] k_del keyword delimiter
* \param[out] data the data found
* \param[in] d_del the data delimiter
- * \param[in] data_limit maximum size the the data buffer
+ * \param[in] data_limit maximum size the data buffer
* \return the number of character read
*/
ssize_t sldns_bget_keyword_data(struct sldns_buffer *b, const char *keyword, const char *k_del, char *data, const char *d_del, size_t data_limit);
diff --git a/sldns/parseutil.c b/sldns/parseutil.c
index dd1f33484663..f696c6af1331 100644
--- a/sldns/parseutil.c
+++ b/sldns/parseutil.c
@@ -436,11 +436,13 @@ sldns_b32_ntop_base(const uint8_t* src, size_t src_sz, char* dst, size_t dst_sz,
/* ........ ........ ....4444 4....... ........ */
c = src[3] >> 7 ;
+ ATTR_FALLTHROUGH
/* fallthrough */
case 3: dst[4] = b32[(src[2] & 0x0f) << 1 | c];
/* ........ .......3 3333.... ........ ........ */
c = src[2] >> 4 ;
+ ATTR_FALLTHROUGH
/* fallthrough */
case 2: dst[3] = b32[(src[1] & 0x01) << 4 | c];
@@ -449,6 +451,7 @@ sldns_b32_ntop_base(const uint8_t* src, size_t src_sz, char* dst, size_t dst_sz,
/* .....111 11...... ........ ........ ........ */
c = src[1] >> 6 ;
+ ATTR_FALLTHROUGH
/* fallthrough */
case 1: dst[1] = b32[(src[0] & 0x07) << 2 | c];
@@ -460,11 +463,14 @@ sldns_b32_ntop_base(const uint8_t* src, size_t src_sz, char* dst, size_t dst_sz,
switch (src_sz) {
case 1: dst[2] = '=';
dst[3] = '=';
+ ATTR_FALLTHROUGH
/* fallthrough */
case 2: dst[4] = '=';
+ ATTR_FALLTHROUGH
/* fallthrough */
case 3: dst[5] = '=';
dst[6] = '=';
+ ATTR_FALLTHROUGH
/* fallthrough */
case 4: dst[7] = '=';
}
@@ -577,17 +583,20 @@ sldns_b32_pton_base(const char* src, size_t src_sz, uint8_t* dst, size_t dst_sz,
/* ........ ........ ........ .55555.. ........ */
/* ........ ........ ....4444 4....... ........ */
dst[3] = buf[4] << 7 | buf[5] << 2 | buf[6] >> 3;
+ ATTR_FALLTHROUGH
/* fallthrough */
case 5: /* ........ ........ ....4444 4....... ........ */
/* ........ .......3 3333.... ........ ........ */
dst[2] = buf[3] << 4 | buf[4] >> 1;
+ ATTR_FALLTHROUGH
/* fallthrough */
case 4: /* ........ .......3 3333.... ........ ........ */
/* ........ ..22222. ........ ........ ........ */
/* .....111 11...... ........ ........ ........ */
dst[1] = buf[1] << 6 | buf[2] << 1 | buf[3] >> 4;
+ ATTR_FALLTHROUGH
/* fallthrough */
case 2: /* .....111 11...... ........ ........ ........ */
diff --git a/sldns/rrdef.h b/sldns/rrdef.h
index f277fd67ab5a..7cadf7bebfb1 100644
--- a/sldns/rrdef.h
+++ b/sldns/rrdef.h
@@ -470,6 +470,11 @@ enum sldns_enum_ede_code
LDNS_EDE_NO_REACHABLE_AUTHORITY = 22,
LDNS_EDE_NETWORK_ERROR = 23,
LDNS_EDE_INVALID_DATA = 24,
+ LDNS_EDE_SIGNATURE_EXPIRED_BEFORE_VALID = 25,
+ LDNS_EDE_TOO_EARLY = 26,
+ LDNS_EDE_UNSUPPORTED_NSEC3_ITERATIONS = 27,
+ LDNS_EDE_BADPROXYPOLICY = 28,
+ LDNS_EDE_SYNTHESIZED = 29
};
typedef enum sldns_enum_ede_code sldns_ede_code;
diff --git a/sldns/wire2str.c b/sldns/wire2str.c
index 2b5dc0513f81..ff8399947e8d 100644
--- a/sldns/wire2str.c
+++ b/sldns/wire2str.c
@@ -228,6 +228,11 @@ static sldns_lookup_table sldns_edns_ede_codes_data[] = {
{ LDNS_EDE_NO_REACHABLE_AUTHORITY, "No Reachable Authority" },
{ LDNS_EDE_NETWORK_ERROR, "Network Error" },
{ LDNS_EDE_INVALID_DATA, "Invalid Data" },
+ { LDNS_EDE_SIGNATURE_EXPIRED_BEFORE_VALID, "Signature Expired Before Valid" },
+ { LDNS_EDE_TOO_EARLY, "Non-Replayable Transactions Received in 0-RTT Data" },
+ { LDNS_EDE_UNSUPPORTED_NSEC3_ITERATIONS, "Unsupported NSEC3 Iterations Value" },
+ { LDNS_EDE_BADPROXYPOLICY, "Unable to Conform to Policy" },
+ { LDNS_EDE_SYNTHESIZED, "Synthesized Answer" },
{ 0, NULL}
};
sldns_lookup_table* sldns_edns_ede_codes = sldns_edns_ede_codes_data;
@@ -1236,6 +1241,7 @@ int sldns_wire2str_svcparam_scan(uint8_t** d, size_t* dlen, char** s, size_t* sl
r = sldns_wire2str_svcparam_ech2str(s, slen, data_len, *d);
break;
case SVCB_KEY_DOHPATH:
+ ATTR_FALLTHROUGH
/* fallthrough */
default:
r = sldns_str_print(s, slen, "=\"");
diff --git a/smallapp/unbound-anchor.c b/smallapp/unbound-anchor.c
index 137b2e94e29c..bd4a121f732c 100644
--- a/smallapp/unbound-anchor.c
+++ b/smallapp/unbound-anchor.c
@@ -151,7 +151,7 @@
#define HTTPS_PORT 443
#ifdef USE_WINSOCK
-/* sneakily reuse the the wsa_strerror function, on windows */
+/* sneakily reuse the wsa_strerror function, on windows */
char* wsa_strerror(int err);
#endif
@@ -183,7 +183,9 @@ static const char DS_TRUST_ANCHOR[] =
/* The anchors must start on a new line with ". IN DS and end with \n"[;]
* because the makedist script greps on the source here */
/* anchor 20326 is from 2017 */
-". IN DS 20326 8 2 E06D44B80B8F1D39A95C0B0D7C65D08458E880409BBC683457104237C7F8EC8D\n";
+". IN DS 20326 8 2 E06D44B80B8F1D39A95C0B0D7C65D08458E880409BBC683457104237C7F8EC8D\n"
+ /* anchor 38696 is from 2024 */
+". IN DS 38696 8 2 683D2D0ACB8C9B712A1948B27F741219298D0A450D612C483AF444A4C0FB2B16\n";
/** verbosity for this application */
static int verb = 0;
@@ -805,7 +807,11 @@ TLS_initiate(SSL_CTX* sslctx, int fd, const char* urlname, int use_sni)
}
/* wants to be called again */
}
+#ifdef HAVE_SSL_GET1_PEER_CERTIFICATE
+ x = SSL_get1_peer_certificate(ssl);
+#else
x = SSL_get_peer_certificate(ssl);
+#endif
if(!x) {
if(verb) printf("Server presented no peer certificate\n");
SSL_free(ssl);
diff --git a/smallapp/unbound-checkconf.c b/smallapp/unbound-checkconf.c
index 508b40fc0e98..6cc5285ecf15 100644
--- a/smallapp/unbound-checkconf.c
+++ b/smallapp/unbound-checkconf.c
@@ -140,10 +140,13 @@ check_mod(struct config_file* cfg, struct module_func_block* fb)
fatal_exit("out of memory");
if(!edns_known_options_init(&env))
fatal_exit("out of memory");
- if(!(*fb->init)(&env, 0)) {
- fatal_exit("bad config for %s module", fb->name);
- }
+ if(fb->startup && !(*fb->startup)(&env, 0))
+ fatal_exit("bad config during startup for %s module", fb->name);
+ if(!(*fb->init)(&env, 0))
+ fatal_exit("bad config during init for %s module", fb->name);
(*fb->deinit)(&env, 0);
+ if(fb->destartup)
+ (*fb->destartup)(&env, 0);
sldns_buffer_free(env.scratch_buffer);
regional_destroy(env.scratch);
edns_known_options_delete(&env);
diff --git a/smallapp/unbound-control-setup.sh.in b/smallapp/unbound-control-setup.sh.in
index eaf1d082cb76..f74b0105afee 100644
--- a/smallapp/unbound-control-setup.sh.in
+++ b/smallapp/unbound-control-setup.sh.in
@@ -104,6 +104,10 @@ while getopts 'd:hr' arg; do
done
shift $((OPTIND - 1))
+if ! openssl >/dev/null 2>&1; then
+ echo "$0 requires openssl to be installed for keys/certificates generation." >&2
+ exit 1
+fi
echo "setup in directory $DESTDIR"
cd "$DESTDIR"
diff --git a/smallapp/unbound-control.c b/smallapp/unbound-control.c
index 57b0787dbeeb..21e7eb82d5ef 100644
--- a/smallapp/unbound-control.c
+++ b/smallapp/unbound-control.c
@@ -122,20 +122,27 @@ usage(void)
printf(" local_data <RR data...> add local data, for example\n");
printf(" local_data www.example.com A 192.0.2.1\n");
printf(" local_data_remove <name> remove local RR data from name\n");
- printf(" local_zones, local_zones_remove, local_datas, local_datas_remove\n");
- printf(" same, but read list from stdin\n");
+ printf(" local_zones,\n");
+ printf(" local_zones_remove,\n");
+ printf(" local_datas,\n");
+ printf(" local_datas_remove same, but read list from stdin\n");
printf(" (one entry per line).\n");
printf(" dump_cache print cache to stdout\n");
+ printf(" (not supported in remote unbounds in\n");
+ printf(" multi-process operation)\n");
printf(" load_cache load cache from stdin\n");
+ printf(" (not supported in remote unbounds in\n");
+ printf(" multi-process operation)\n");
printf(" lookup <name> print nameservers for name\n");
- printf(" flush <name> flushes common types for name from cache\n");
+ printf(" flush [+c] <name> flushes common types for name from cache\n");
printf(" types: A, AAAA, MX, PTR, NS,\n");
printf(" SOA, CNAME, DNAME, SRV, NAPTR\n");
- printf(" flush_type <name> <type> flush name, type from cache\n");
- printf(" flush_zone <name> flush everything at or under name\n");
+ printf(" flush_type [+c] <name> <type> flush name, type from cache\n");
+ printf(" +c remove from cachedb too\n");
+ printf(" flush_zone [+c] <name> flush everything at or under name\n");
printf(" from rr and dnssec caches\n");
- printf(" flush_bogus flush all bogus data\n");
- printf(" flush_negative flush all negative data\n");
+ printf(" flush_bogus [+c] flush all bogus data\n");
+ printf(" flush_negative [+c] flush all negative data\n");
printf(" flush_stats flush statistics, make zero\n");
printf(" flush_requestlist drop queries that are worked on\n");
printf(" dump_requestlist show what is worked on by first thread\n");
@@ -179,6 +186,10 @@ usage(void)
printf(" rpz_enable zone Enable the RPZ zone if it had previously\n");
printf(" been disabled\n");
printf(" rpz_disable zone Disable the RPZ zone\n");
+ printf(" add_cookie_secret <secret> add (or replace) a new cookie secret <secret>\n");
+ printf(" drop_cookie_secret drop a staging cookie secret\n");
+ printf(" activate_cookie_secret make a staging cookie secret active\n");
+ printf(" print_cookie_secrets show all cookie secrets with their status\n");
printf("Version %s\n", PACKAGE_VERSION);
printf("BSD licensed, see LICENSE in source package for details.\n");
printf("Report bugs to %s\n", PACKAGE_BUGREPORT);
@@ -752,7 +763,11 @@ setup_ssl(SSL_CTX* ctx, int fd)
/* check authenticity of server */
if(SSL_get_verify_result(ssl) != X509_V_OK)
ssl_err("SSL verification failed");
+#ifdef HAVE_SSL_GET1_PEER_CERTIFICATE
+ x = SSL_get1_peer_certificate(ssl);
+#else
x = SSL_get_peer_certificate(ssl);
+#endif
if(!x)
ssl_err("Server presented no peer certificate");
X509_free(x);
diff --git a/systemd.m4 b/systemd.m4
index e5d4e27f6deb..154f4ffabc3a 100644
--- a/systemd.m4
+++ b/systemd.m4
@@ -2,17 +2,19 @@
# Copyright 2015, Sami Kerola, CloudFlare.
# BSD licensed.
AC_ARG_ENABLE([systemd],
- [AS_HELP_STRING([--enable-systemd], [compile with systemd support])],
+ [AS_HELP_STRING([--enable-systemd], [compile with systemd support (requires libsystemd, pkg-config)])],
[], [enable_systemd=no])
have_systemd=no
AS_IF([test "x$enable_systemd" != xno], [
- ifdef([PKG_CHECK_MODULES], [
+ if test -n "$PKG_CONFIG"; then
dnl systemd v209 or newer
- PKG_CHECK_MODULES([SYSTEMD], [libsystemd], [have_systemd=yes], [have_systemd=no])
+ have_systemd=no
+ PKG_CHECK_MODULES([SYSTEMD], [libsystemd], [have_systemd=yes], [])
dnl old systemd library
AS_IF([test "x$have_systemd" != "xyes"], [
+ have_systemd_daemon=no
PKG_CHECK_MODULES([SYSTEMD_DAEMON], [libsystemd-daemon],
- [have_systemd_daemon=yes], [have_systemd_daemon=no])
+ [have_systemd_daemon=yes], [])
AS_IF([test "x$have_systemd_daemon" = "xyes"],
[have_systemd=yes])
])
@@ -24,8 +26,8 @@ AS_IF([test "x$enable_systemd" != xno], [
LIBS="$LIBS $SYSTEMD_LIBS"
]
)
- ], [
+ else
AC_MSG_ERROR([systemd enabled but need pkg-config to configure for it])
- ])
+ fi
])
AM_CONDITIONAL([USE_SYSTEMD], [test "x$have_systemd" = xyes])
diff --git a/testcode/fake_event.c b/testcode/fake_event.c
index 09269289dd44..a517fa5f373e 100644
--- a/testcode/fake_event.c
+++ b/testcode/fake_event.c
@@ -1655,6 +1655,12 @@ void comm_timer_set(struct comm_timer* timer, struct timeval* tv)
timeval_add(&t->tv, &t->runtime->now_tv);
}
+int comm_timer_is_set(struct comm_timer* timer)
+{
+ struct fake_timer* t = (struct fake_timer*)timer;
+ return t->enabled;
+}
+
void comm_timer_delete(struct comm_timer* timer)
{
struct fake_timer* t = (struct fake_timer*)timer;
@@ -1978,4 +1984,8 @@ void http2_stream_add_meshstate(struct http2_stream* ATTR_UNUSED(h2_stream),
{
}
+void http2_stream_remove_mesh_state(struct http2_stream* ATTR_UNUSED(h2_stream))
+{
+}
+
/*********** End of Dummy routines ***********/
diff --git a/testcode/mini_tdir.sh b/testcode/mini_tdir.sh
index 624ecdf7fe5b..d1f7bfce94a8 100755
--- a/testcode/mini_tdir.sh
+++ b/testcode/mini_tdir.sh
@@ -127,6 +127,7 @@ dir=$name.$$
result=result.$name
done=.done-$name
skip=.skip-$name
+asan_text="SUMMARY: AddressSanitizer"
success="no"
if test -x "`which bash`"; then
shell="bash"
@@ -200,6 +201,16 @@ if test -f $name.post -a ! -f ../$skip; then
echo "Warning: $name.post did not exit successfully"
fi
fi
+# Check if there were any AddressSanitizer errors
+# if compiled with -fsanitize=address
+if grep "$asan_text" $result >/dev/null 2>&1; then
+ if test -f ../$done; then
+ rm ../$done
+ fi
+ echo "$name: FAILED (AddressSanitizer)" >> $result
+ echo "$name: FAILED (AddressSanitizer)"
+ success="no"
+fi
echo "DateRunEnd: "`date "+%s" 2>/dev/null` >> $result
mv $result ..
diff --git a/testcode/petal.c b/testcode/petal.c
index 63d3d452ee34..6d825f1e0ca4 100644
--- a/testcode/petal.c
+++ b/testcode/petal.c
@@ -256,7 +256,7 @@ setup_ctx(char* key, char* cert)
#if HAVE_DECL_SSL_CTX_SET_ECDH_AUTO
if (!SSL_CTX_set_ecdh_auto(ctx,1))
if(verb>=1) printf("failed to set_ecdh_auto, not enabling ECDHE\n");
-#elif defined(USE_ECDSA)
+#elif defined(USE_ECDSA) && defined(HAVE_SSL_CTX_SET_TMP_ECDH)
if(1) {
EC_KEY *ecdh = EC_KEY_new_by_curve_name (NID_X9_62_prime256v1);
if (!ecdh) {
diff --git a/testcode/readzone.c b/testcode/readzone.c
index 94511e5771f4..f50eea31f2e8 100644
--- a/testcode/readzone.c
+++ b/testcode/readzone.c
@@ -45,7 +45,6 @@
#include <string.h>
#include <unistd.h>
-#include <stdint.h>
#include "sldns/str2wire.h"
#include "sldns/wire2str.h"
diff --git a/testcode/streamtcp.c b/testcode/streamtcp.c
index 037bcfd8b6a4..60122c4ddfd1 100644
--- a/testcode/streamtcp.c
+++ b/testcode/streamtcp.c
@@ -471,7 +471,11 @@ send_em(const char* svr, const char* pp2_client, int udp, int usessl,
}
}
if(1) {
+#ifdef HAVE_SSL_GET1_PEER_CERTIFICATE
+ X509* x = SSL_get1_peer_certificate(ssl);
+#else
X509* x = SSL_get_peer_certificate(ssl);
+#endif
if(!x) printf("SSL: no peer certificate\n");
else {
X509_print_fp(stdout, x);
diff --git a/testcode/testbound.c b/testcode/testbound.c
index f023860e086e..123fe0d4e46f 100644
--- a/testcode/testbound.c
+++ b/testcode/testbound.c
@@ -72,23 +72,6 @@ int daemon_main(int argc, char* argv[]);
/** config files (removed at exit) */
static struct config_strlist* cfgfiles = NULL;
-#ifdef UNBOUND_ALLOC_STATS
-# define strdup(s) unbound_stat_strdup_log(s, __FILE__, __LINE__, __func__)
-char* unbound_stat_strdup_log(char* s, const char* file, int line,
- const char* func);
-char* unbound_stat_strdup_log(char* s, const char* file, int line,
- const char* func) {
- char* result;
- size_t len;
- if(!s) return NULL;
- len = strlen(s);
- log_info("%s:%d %s strdup(%u)", file, line, func, (unsigned)len+1);
- result = unbound_stat_malloc(len+1);
- memmove(result, s, len+1);
- return result;
-}
-#endif /* UNBOUND_ALLOC_STATS */
-
/** give commandline usage for testbound. */
static void
testbound_usage(void)
diff --git a/testcode/unitmain.c b/testcode/unitmain.c
index 647cbca3b05b..084c12b93b4f 100644
--- a/testcode/unitmain.c
+++ b/testcode/unitmain.c
@@ -1117,7 +1117,7 @@ static void edns_ede_encode_encodedecode(struct query_info* qinfo,
sldns_buffer_skip(pkt, 2 + 2);
/* decode */
unit_assert(parse_edns_from_query_pkt(pkt, edns, NULL, NULL, NULL, 0,
- region) == 0);
+ region, NULL) == 0);
}
static void edns_ede_encode_check(struct edns_data* edns, int* found_ede,
@@ -1252,6 +1252,109 @@ static void edns_ede_answer_encode_test(void)
regional_destroy(region);
}
+#include "services/localzone.h"
+/* Utility function that compares two localzone trees */
+static void compare_localzone_trees(struct local_zones* z1,
+ struct local_zones* z2)
+{
+ struct local_zone *node1, *node2;
+ lock_rw_rdlock(&z1->lock);
+ lock_rw_rdlock(&z2->lock);
+ /* size should be the same */
+ unit_assert(z1->ztree.count == z2->ztree.count);
+ for(node1=(struct local_zone*)rbtree_first(&z1->ztree),
+ node2=(struct local_zone*)rbtree_first(&z2->ztree);
+ (rbnode_type*)node1 != RBTREE_NULL &&
+ (rbnode_type*)node2 != RBTREE_NULL;
+ node1=(struct local_zone*)rbtree_next((rbnode_type*)node1),
+ node2=(struct local_zone*)rbtree_next((rbnode_type*)node2)) {
+ int labs;
+ /* the same zone should be at the same nodes */
+ unit_assert(!dname_lab_cmp(
+ node1->name, node1->namelabs,
+ node2->name, node2->namelabs,
+ &labs));
+ /* the zone's parent should be the same on both nodes */
+ unit_assert(
+ (node1->parent == NULL && node2->parent == NULL) ||
+ (node1->parent != NULL && node2->parent != NULL));
+ if(node1->parent) {
+ unit_assert(!dname_lab_cmp(
+ node1->parent->name, node1->parent->namelabs,
+ node2->parent->name, node2->parent->namelabs,
+ &labs));
+ }
+ }
+ lock_rw_unlock(&z1->lock);
+ lock_rw_unlock(&z2->lock);
+}
+
+/* test that zone addition results in the same tree from both the configuration
+ * file and the unbound-control commands */
+static void localzone_parents_test(void)
+{
+ struct local_zones *z1, *z2;
+ size_t i;
+ char* zone_data[] = {
+ "one",
+ "a.b.c.one",
+ "b.c.one",
+ "c.one",
+ "two",
+ "c.two",
+ "b.c.two",
+ "a.b.c.two",
+ "a.b.c.three",
+ "b.c.three",
+ "c.three",
+ "three",
+ "c.four",
+ "b.c.four",
+ "a.b.c.four",
+ "four",
+ "."
+ };
+ unit_show_feature("localzones parent calculation");
+ z1 = local_zones_create();
+ z2 = local_zones_create();
+ /* parse test data */
+ for(i=0; i<sizeof(zone_data)/sizeof(zone_data[0]); i++) {
+ uint8_t* nm;
+ int nmlabs;
+ size_t nmlen;
+ struct local_zone* z;
+
+ /* This is the config way */
+ z = lz_enter_zone(z1, zone_data[i], "always_nxdomain",
+ LDNS_RR_CLASS_IN);
+ (void)z; /* please compiler when no threading and no lock
+ code; the following line disappears and z stays unused */
+ lock_rw_unlock(&z->lock);
+ lz_init_parents(z1);
+
+ /* This is the unbound-control way */
+ nm = sldns_str2wire_dname(zone_data[i], &nmlen);
+ if(!nm) unit_assert(0);
+ nmlabs = dname_count_size_labels(nm, &nmlen);
+ lock_rw_wrlock(&z2->lock);
+ local_zones_add_zone(z2, nm, nmlen, nmlabs, LDNS_RR_CLASS_IN,
+ local_zone_always_nxdomain);
+ lock_rw_unlock(&z2->lock);
+ }
+ /* The trees should be the same, iterate and check the nodes */
+ compare_localzone_trees(z1, z2);
+
+ /* cleanup */
+ local_zones_delete(z1);
+ local_zones_delete(z2);
+}
+
+/** localzone unit tests */
+static void localzone_test(void)
+{
+ localzone_parents_test();
+}
+
void unit_show_func(const char* file, const char* func)
{
printf("test %s:%s\n", file, func);
@@ -1325,6 +1428,7 @@ main(int argc, char* argv[])
tcpreuse_test();
msgparse_test();
edns_ede_answer_encode_test();
+ localzone_test();
#ifdef CLIENT_SUBNET
ecs_test();
#endif /* CLIENT_SUBNET */
diff --git a/testcode/unitverify.c b/testcode/unitverify.c
index 395b4c257427..275435c73a0d 100644
--- a/testcode/unitverify.c
+++ b/testcode/unitverify.c
@@ -178,6 +178,7 @@ verifytest_rrset(struct module_env* env, struct val_env* ve,
struct query_info* qinfo)
{
enum sec_status sec;
+ char reasonbuf[256];
char* reason = NULL;
uint8_t sigalg[ALGO_NEEDS_MAX+1];
int verified = 0;
@@ -188,8 +189,9 @@ 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, NULL,
- LDNS_SECTION_ANSWER, NULL, &verified);
+ sec = dnskeyset_verify_rrset(env, ve, rrset, dnskey, sigalg, &reason,
+ NULL, LDNS_SECTION_ANSWER, NULL, &verified, reasonbuf,
+ sizeof(reasonbuf));
if(vsig) {
printf("verify outcome is: %s %s\n", sec_status_to_string(sec),
reason?reason:"");
diff --git a/testcode/unitzonemd.c b/testcode/unitzonemd.c
index 23c9f7010644..bf130df5a25b 100644
--- a/testcode/unitzonemd.c
+++ b/testcode/unitzonemd.c
@@ -256,7 +256,6 @@ static void zonemd_verify_test(char* zname, char* zfile, char* tastr,
struct auth_zone* z;
/* setup test harness */
- memset(&mods, 0, sizeof(mods));
memset(&env, 0, sizeof(env));
env.scratch = regional_create();
if(!env.scratch)
@@ -288,8 +287,10 @@ static void zonemd_verify_test(char* zname, char* zfile, char* tastr,
if(!env.auth_zones)
fatal_exit("out of memory");
modstack_init(&mods);
- if(!modstack_setup(&mods, env.cfg->module_conf, &env))
- fatal_exit("could not modstack_setup");
+ if(!modstack_call_startup(&mods, env.cfg->module_conf, &env))
+ fatal_exit("could not modstack_startup");
+ if(!modstack_call_init(&mods, env.cfg->module_conf, &env))
+ fatal_exit("could not modstack_call_init");
env.mesh = mesh_create(&mods, &env);
if(!env.mesh)
fatal_exit("out of memory");
@@ -327,7 +328,9 @@ static void zonemd_verify_test(char* zname, char* zfile, char* tastr,
/* desetup test harness */
mesh_delete(env.mesh);
- modstack_desetup(&mods, &env);
+ modstack_call_deinit(&mods, &env);
+ modstack_call_destartup(&mods, &env);
+ modstack_free(&mods);
auth_zones_delete(env.auth_zones);
anchors_delete(env.anchors);
config_delete(env.cfg);
diff --git a/testdata/02-unittest.tdir/02-unittest.test b/testdata/02-unittest.tdir/02-unittest.test
index 7b1105b74508..b11ba016f233 100644
--- a/testdata/02-unittest.tdir/02-unittest.test
+++ b/testdata/02-unittest.tdir/02-unittest.test
@@ -7,57 +7,69 @@
. ../common.sh
PRE="../.."
get_make
-(cd $PRE ; $MAKE unittest; $MAKE lock-verify)
+(cd $PRE ; $MAKE unittest; $MAKE lock-verify; $MAKE unbound-dnstap-socket)
if test -f $PRE/unbound_do_valgrind_in_test; then
- do_valgrind=yes
+ DO_VALGRIND=yes
else
- do_valgrind=no
+ DO_VALGRIND=no
fi
VALGRIND_FLAGS="--leak-check=full --show-leak-kinds=all"
-if test $do_valgrind = "yes"; then
- echo "valgrind yes"
- echo
- tmpout=/tmp/tmpout.$$
- if (cd $PRE; valgrind $VALGRIND_FLAGS ./unittest >$tmpout 2>&1); then
- echo "unit test worked."
+# Run a unit test; it exits on failure
+# $1: the command to start the unit test
+run_unittest () {
+ unit_cmd=$1
+ echo "> testing $unit_cmd"
+ if test $DO_VALGRIND = "yes"; then
+ echo "valgrind yes"
+ echo
+ tmpout=/tmp/tmpout.$$
+ if (cd $PRE; valgrind $VALGRIND_FLAGS ./$unit_cmd >$tmpout 2>&1); then
+ echo "unit test worked."
+ else
+ echo "unit test failed."
+ exit 1
+ fi
+ if grep "All heap blocks were freed -- no leaks are possible" $tmpout; then
+ : # clean
+ else
+ cat $tmpout
+ echo "Memory leaked in unit test"
+ grep "in use at exit" $tmpout
+ exit 1
+ fi
+ if grep "ERROR SUMMARY: 0 errors from 0 contexts" $tmpout; then
+ : # clean
+ else
+ cat $tmpout
+ echo "Errors in unit test"
+ grep "ERROR SUMMARY" $tmpout
+ exit 1
+ fi
+ rm -f $tmpout
else
- echo "unit test failed."
- exit 1
+ # without valgrind
+ if (cd $PRE; ./$unit_cmd); then
+ echo "unit test worked."
+ else
+ echo "unit test failed."
+ exit 1
+ fi
fi
- if grep "All heap blocks were freed -- no leaks are possible" $tmpout; then
- : # clean
- else
- cat $tmpout
- echo "Memory leaked in unittest"
- grep "in use at exit" $tmpout
- exit 1
- fi
- if grep "ERROR SUMMARY: 0 errors from 0 contexts" $tmpout; then
- : # clean
- else
- cat $tmpout
- echo "Errors in unittest"
- grep "ERROR SUMMARY" $tmpout
- exit 1
- fi
- rm -f $tmpout
-else
- # without valgrind
- if (cd $PRE; ./unittest); then
- echo "unit test worked."
- else
- echo "unit test failed."
- exit 1
- fi
-fi
-if test -f $PRE/ublocktrace.0; then
- if (cd $PRE; ./lock-verify ublocktrace.*); then
- echo "lock-verify test worked."
- else
- echo "lock-verify test failed."
- exit 1
+ if test -f $PRE/ublocktrace.0; then
+ if (cd $PRE; ./lock-verify ublocktrace.*); then
+ echo "lock-verify test worked."
+ else
+ echo "lock-verify test failed."
+ exit 1
+ fi
fi
+}
+
+run_unittest "unittest"
+if grep "define UNBOUND_DEBUG" $PRE/config.h >/dev/null; then
+ run_unittest "unbound-dnstap-socket -c"
fi
+
exit 0
diff --git a/testdata/07-confroot.tdir/07-confroot.pre b/testdata/07-confroot.tdir/07-confroot.pre
index 4f966bddd0e5..e085bf2f3e99 100644
--- a/testdata/07-confroot.tdir/07-confroot.pre
+++ b/testdata/07-confroot.tdir/07-confroot.pre
@@ -4,6 +4,7 @@
# use .tpkg.var.test for in test variable passing
[ -f .tpkg.var.test ] && source .tpkg.var.test
+. ../common.sh
PRE="../.."
if uname | grep "MINGW" >/dev/null; then
diff --git a/testdata/09-unbound-control.tdir/09-unbound-control.conf b/testdata/09-unbound-control.tdir/09-unbound-control.conf
index 227d56075251..719e92309513 100644
--- a/testdata/09-unbound-control.tdir/09-unbound-control.conf
+++ b/testdata/09-unbound-control.tdir/09-unbound-control.conf
@@ -1,8 +1,7 @@
server:
- verbosity: 2
- num-threads: 1
- interface: 127.0.0.1
- port: @PORT@
+ verbosity: 5
+ num-threads: 1 # This is dynamically handled by the test when needed
+ interface: 127.0.0.1@@PORT@
use-syslog: no
directory: ""
pidfile: "unbound.pid"
@@ -10,9 +9,13 @@ server:
username: ""
do-not-query-localhost: no
access-control: 127.0.0.1 allow_snoop
+ access-control-view: 127.0.0.1 testview
msg-cache-size: 4m
rrset-cache-size: 4m
minimal-responses: yes
+view:
+ name: testview
+ view-first: yes # Allow falling back to global local data
remote-control:
control-enable: yes
control-interface: 127.0.0.1
diff --git a/testdata/09-unbound-control.tdir/09-unbound-control.pre b/testdata/09-unbound-control.tdir/09-unbound-control.pre
index 479e4a90bc0f..9cdb32f37a95 100644
--- a/testdata/09-unbound-control.tdir/09-unbound-control.pre
+++ b/testdata/09-unbound-control.tdir/09-unbound-control.pre
@@ -30,4 +30,3 @@ 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/09-unbound-control.tdir/09-unbound-control.test b/testdata/09-unbound-control.tdir/09-unbound-control.test
index 0a0bd8a18d47..8bd2220f3429 100644
--- a/testdata/09-unbound-control.tdir/09-unbound-control.test
+++ b/testdata/09-unbound-control.tdir/09-unbound-control.test
@@ -73,6 +73,70 @@ control_command () {
$PRE/unbound-control $@ > outfile
}
+# Reload the server and check the reload has finished processing
+# when a lot of debug is enabled, a lot of log needs to be printed.
+control_reload () {
+ prelines=`wc -l unbound.log | awk '{print $1;}'`
+ cmd="$1"
+ if test -z "$cmd"; then cmd="reload"; fi
+ control_command -c ub.conf $cmd
+ expect_exit_value 0
+ # see if the reload has completed.
+ lines1=`wc -l unbound.log | awk '{print $1;}'`
+ count=0
+ lines2=`wc -l unbound.log | awk '{print $1;}'`
+ # See if the log finishes up without sleeping too long.
+ while test "$lines1" -ne "$lines2"; do
+ lines1=`wc -l unbound.log | awk '{print $1;}'`
+ # There is no sleep here. The add and compare are a
+ # brief wait.
+ count=`expr "$count" + 1`
+ if test "$count" -gt 30; then
+ break;
+ fi
+ lines2=`wc -l unbound.log | awk '{print $1;}'`
+ done
+ if test "$lines1" -ne "$lines2"; then
+ count=0
+ while test "$lines1" -ne "$lines2"; do
+ tail -1 unbound.log
+ lines1=`wc -l unbound.log | awk '{print $1;}'`
+ sleep 1
+ count=`expr "$count" + 1`
+ if test "$count" -gt 30; then
+ echo "reload is taking too long"
+ exit 1
+ fi
+ lines2=`wc -l unbound.log | awk '{print $1;}'`
+ done
+ if test "$count" -ne "0"; then
+ echo "reload done with $count sec"
+ fi
+ fi
+}
+
+# Reload the server for a clean state
+clean_reload () {
+ echo "> Reloading the server for a clean state"
+ cp main.conf ub.conf
+ control_reload
+}
+
+# Reload the server for a clean state and populate the cache
+clean_reload_and_fill_cache () {
+ clean_reload
+ echo "> Populating the cache"
+ query www.example.com
+ expect_answer "10.20.30.40"
+ if test "$have_threads" = "no"; then
+ # Try to get the answer in all processes' cache.
+ for (( try=0 ; try < num_threads * 2 * 2 ; try++ )) ; do
+ query www.example.com
+ expect_answer "10.20.30.40"
+ done
+ fi
+}
+
# Dump the cache contents
# $@: optional options to unbound-control
cache_dump () {
@@ -111,8 +175,28 @@ fail_in_cache_dump () {
fi
}
-# start the test
+# Check if multi-threading or multi-process environment
+have_threads="no"
+if grep "define HAVE_PTHREAD 1" $PRE/config.h; then have_threads="yes"; fi
+if grep "define HAVE_SOLARIS_THREADS 1" $PRE/config.h; then have_threads="yes"; fi
+if grep "define HAVE_WINDOWS_THREADS 1" $PRE/config.h; then have_threads="yes"; fi
+
+# start the test; keep the original conf file around
+cp ub.conf orig.conf
+
+
+# START - thread configuration
+# Do both single thread/process and multi thread/process runs.
+# The number of threads can only go up from the initial configuration between
+# reloads so starting with 1.
+for num_threads in 1 4; do
+
+cp orig.conf ub.conf
+echo "> setting num-threads: $num_threads"
+echo "server: num-threads: $num_threads" >> ub.conf
cp ub.conf main.conf
+clean_reload
+
teststep "exit value is 1 on usage"
control_command -h
@@ -132,8 +216,7 @@ expect_exit_value 1
# local-data element in the server.
teststep "reload the server"
echo "server: local-data: 'afterreload. IN A 5.6.7.8'" >> ub.conf
-control_command -c ub.conf reload
-expect_exit_value 0
+control_reload
query afterreload.
expect_answer "5.6.7.8"
@@ -163,6 +246,9 @@ cat conf.spoofed_credentials >> bad.conf
control_command -c bad.conf verbosity 2
expect_exit_value 1
+teststep "clean reload"
+clean_reload
+
teststep "create a new local zone"
control_command -c ub.conf local_zone example.net static
expect_exit_value 0
@@ -194,44 +280,62 @@ expect_exit_value 0
query www.example.net.
expect_answer "SERVFAIL"
-teststep "dump the cache"
-query www.example.com.
-cache_dump -c ub.conf
-expect_exit_value 0
-cat cache.dump
-expect_in_cache_dump "10.20.30.40"
-
-control_command -c ub.conf lookup www.example.com
-expect_exit_value 0
-# answer to lookup is meaningless because of use a forwarder, oh well.
-
-teststep "load the cache dump"
-cache_load -c ub.conf
-expect_exit_value 0
-query www.example.com.
-expect_answer "10.20.30.40"
-
teststep "load local-zones from file"
control_command -c ub.conf local_zones < local_zones
expect_exit_value 0
query localzonefromfile
expect_answer "REFUSED"
+if test "$have_threads" = "no"; then
+ # Try to see if a process other than the first one
+ # has updated data from stdin.
+ for (( try=0 ; try < num_threads * 2 ; try++ )) ; do
+ query localzonefromfile
+ expect_answer "REFUSED"
+ done
+fi
teststep "load local-data from file"
control_command -c ub.conf local_datas < local_data
expect_exit_value 0
query -t txt localdatafromfile
expect_answer "local data from file OK"
+if test "$have_threads" = "no"; then
+ # Try to see if a process other than the first one
+ # has updated data from stdin.
+ for (( try=0 ; try < num_threads * 2 ; try++ )) ; do
+ query -t txt localdatafromfile
+ expect_answer "local data from file OK"
+ done
+fi
+
+teststep "load view-local-data from file"
+control_command -c ub.conf view_local_datas testview < view_local_data
+expect_exit_value 0
+control_command -c ub.conf view_list_local_zones testview
+query -t txt viewlocaldatafromfile
+expect_answer "view local data from file OK"
+if test "$have_threads" = "no"; then
+ # Try to see if a process other than the first one
+ # has updated data from stdin.
+ for (( try=0 ; try < num_threads * 2 ; try++ )) ; do
+ query -t txt viewlocaldatafromfile
+ expect_answer "view local data from file OK"
+ done
+fi
-teststep "remove local-zone and local-data from file"
+teststep "remove local-zone, local-data and view-local-data from file"
control_command -c ub.conf local_zones_remove < local_zones_remove
expect_exit_value 0
control_command -c ub.conf local_datas_remove < local_data_remove
expect_exit_value 0
+control_command -c ub.conf view_local_datas_remove testview < view_local_data_remove
+expect_exit_value 0
control_command -c ub.conf list_local_zones
fail_answer "localzonefromfile"
fail_answer "local data from file OK"
expect_answer "otherlocalzone"
+control_command -c ub.conf view_list_local_data testview
+fail_answer "viewlocaldatafromfile"
teststep "flushing"
control_command -c ub.conf flush www.example.net
@@ -241,90 +345,92 @@ expect_exit_value 0
control_command -c ub.conf flush_zone example.net
expect_exit_value 0
-teststep "reload the server for a clean state and populate the cache"
-cp main.conf ub.conf
-control_command -c ub.conf reload
-expect_exit_value 0
-query www.example.com
-expect_answer "10.20.30.40"
+# START - single thread/process tests only
+if test $num_threads -le 1; then
-teststep "reload and check cache dump - should be empty"
-control_command -c ub.conf reload
-expect_exit_value 0
+clean_reload_and_fill_cache
+
+teststep "dump the cache"
+query www.example.com.
cache_dump -c ub.conf
expect_exit_value 0
-fail_in_cache_dump "www.example.com.*10.20.30.40"
-fail_in_cache_dump "msg www.example.com. IN A"
-
-query www.example.com
-expect_answer "10.20.30.40"
+cat cache.dump
+expect_in_cache_dump "10.20.30.40"
-teststep "reload_keep_cache and check cache dump - should not be empty"
-control_command -c ub.conf reload_keep_cache
+control_command -c ub.conf lookup www.example.com
expect_exit_value 0
-cache_dump -c ub.conf
+# answer to lookup is meaningless because of use a forwarder, oh well.
+
+teststep "load the cache dump"
+cache_load -c ub.conf
expect_exit_value 0
-cat cache.dump
-expect_in_cache_dump "www.example.com.*10.20.30.40"
-expect_in_cache_dump "msg www.example.com. IN A"
+query www.example.com. +nordflag
+expect_answer "10.20.30.40"
+
+else
+ echo ""
+ echo "> skip test parts that need single thread/process"
+fi
+# END - single thread/process tests only
+
+clean_reload_and_fill_cache
+
+teststep "reload and check cache - should be empty"
+control_reload
+query www.example.com +nordflag
+fail_answer "10.20.30.40"
+
+clean_reload_and_fill_cache
+
+teststep "reload_keep_cache and check cache - should not be empty"
+control_reload reload_keep_cache
query www.example.com +nordflag
expect_answer "10.20.30.40"
+clean_reload_and_fill_cache
+
teststep "change msg-cache-size and reload_keep_cache - should be empty"
echo "server: msg-cache-size: 2m" >> ub.conf
-control_command -c ub.conf reload_keep_cache
-expect_exit_value 0
-cache_dump -c ub.conf
-expect_exit_value 0
-fail_in_cache_dump "www.example.com.*10.20.30.40"
-fail_in_cache_dump "msg www.example.com. IN A"
-query www.example.com
-expect_answer "10.20.30.40"
+control_reload reload_keep_cache
+query www.example.com +nordflag
+fail_answer "10.20.30.40"
+
+clean_reload_and_fill_cache
teststep "change rrset-cache-size and reload_keep_cache - should be empty"
echo "server: rrset-cache-size: 2m" >> ub.conf
-control_command -c ub.conf reload_keep_cache
-expect_exit_value 0
-cache_dump -c ub.conf
-expect_exit_value 0
-fail_in_cache_dump "www.example.com.*10.20.30.40"
-fail_in_cache_dump "msg www.example.com. IN A"
-query www.example.com
-expect_answer "10.20.30.40"
+control_reload reload_keep_cache
+query www.example.com +nordflag
+fail_answer "10.20.30.40"
-# See if this part of the test can be enabled, it needs threads for combined
-# output.
-have_threads="no"
-if grep "define HAVE_PTHREAD 1" $PRE/config.h; then have_threads="yes"; fi
-if grep "define HAVE_SOLARIS_THREADS 1" $PRE/config.h; then have_threads="yes"; fi
-if grep "define HAVE_WINDOWS_THREADS 1" $PRE/config.h; then have_threads="yes"; fi
+# START - have_threads tests
+# This part of the test needs threads for combined output.
if test "$have_threads" = "yes"; then
+clean_reload_and_fill_cache
+
teststep "change num-threads and reload_keep_cache - should be empty"
echo "server: num-threads: 2" >> ub.conf
-control_command -c ub.conf reload_keep_cache
-expect_exit_value 0
-cache_dump -c ub.conf
-expect_exit_value 0
-fail_in_cache_dump "www.example.com.*10.20.30.40"
-fail_in_cache_dump "msg www.example.com. IN A"
-query www.example.com
-expect_answer "10.20.30.40"
+control_reload reload_keep_cache
+query www.example.com +nordflag
+fail_answer "10.20.30.40"
+
+clean_reload_and_fill_cache
teststep "change minimal-responses and reload_keep_cache - should not be empty"
echo "server: minimal-responses: no" >> ub.conf
-control_command -c ub.conf reload_keep_cache
-expect_exit_value 0
-cache_dump -c ub.conf
-expect_exit_value 0
-expect_in_cache_dump "www.example.com.*10.20.30.40"
-expect_in_cache_dump "msg www.example.com. IN A"
+control_reload reload_keep_cache
+query www.example.com +nordflag
+expect_answer "10.20.30.40"
else
echo ""
echo "> skip test parts that need threads, have_threads=no"
-# end of check for have_threads
fi
+# END - have_threads tests
+
+done
+# END - thread configuration
teststep "now stop the server"
control_command -c ub.conf stop
diff --git a/testdata/09-unbound-control.tdir/09-unbound-control.testns b/testdata/09-unbound-control.tdir/09-unbound-control.testns
index 0c911ca5b30e..9a5192fabc4f 100644
--- a/testdata/09-unbound-control.tdir/09-unbound-control.testns
+++ b/testdata/09-unbound-control.tdir/09-unbound-control.testns
@@ -19,4 +19,3 @@ ADJUST copy_id
SECTION QUESTION
www.example.net. IN A
ENTRY_END
-
diff --git a/testdata/09-unbound-control.tdir/local_data b/testdata/09-unbound-control.tdir/local_data
index 54e6e93b4dd9..c535b21bcbaa 100644
--- a/testdata/09-unbound-control.tdir/local_data
+++ b/testdata/09-unbound-control.tdir/local_data
@@ -1 +1,4 @@
localdatafromfile 3600 TXT "local data from file OK"
+localdatafromfile1 3600 A 1.1.1.1
+localdatafromfile2 3600 A 2.2.2.2
+localdatafromfile3 3600 A 3.3.3.3
diff --git a/testdata/09-unbound-control.tdir/local_data_remove b/testdata/09-unbound-control.tdir/local_data_remove
index fcb8239589e3..d2a09544fdaa 100644
--- a/testdata/09-unbound-control.tdir/local_data_remove
+++ b/testdata/09-unbound-control.tdir/local_data_remove
@@ -1 +1,4 @@
localdatafromfile
+localdatafromfile1
+localdatafromfile2
+localdatafromfile3
diff --git a/testdata/09-unbound-control.tdir/local_zones b/testdata/09-unbound-control.tdir/local_zones
index 4c65f712fbb2..557a5e6212a8 100644
--- a/testdata/09-unbound-control.tdir/local_zones
+++ b/testdata/09-unbound-control.tdir/local_zones
@@ -1,2 +1,5 @@
localzonefromfile refuse
otherlocalzone static
+localzonefromfile1 static
+localzonefromfile2 static
+localzonefromfile3 static
diff --git a/testdata/09-unbound-control.tdir/local_zones_remove b/testdata/09-unbound-control.tdir/local_zones_remove
index 1d215585515a..fa215ecccf5d 100644
--- a/testdata/09-unbound-control.tdir/local_zones_remove
+++ b/testdata/09-unbound-control.tdir/local_zones_remove
@@ -1 +1,4 @@
localzonefromfile
+localzonefromfile1
+localzonefromfile2
+localzonefromfile3
diff --git a/testdata/09-unbound-control.tdir/view_local_data b/testdata/09-unbound-control.tdir/view_local_data
new file mode 100644
index 000000000000..7958d139be99
--- /dev/null
+++ b/testdata/09-unbound-control.tdir/view_local_data
@@ -0,0 +1,4 @@
+viewlocaldatafromfile 3600 TXT "view local data from file OK"
+viewlocaldatafromfile1 3600 A 1.1.1.1
+viewlocaldatafromfile2 3600 A 2.2.2.2
+viewlocaldatafromfile3 3600 A 3.3.3.3
diff --git a/testdata/09-unbound-control.tdir/view_local_data_remove b/testdata/09-unbound-control.tdir/view_local_data_remove
new file mode 100644
index 000000000000..fd5e37f2e4e3
--- /dev/null
+++ b/testdata/09-unbound-control.tdir/view_local_data_remove
@@ -0,0 +1,4 @@
+viewlocaldatafromfile
+viewlocaldatafromfile1
+viewlocaldatafromfile2
+viewlocaldatafromfile3
diff --git a/testdata/acl_interface.tdir/acl_interface.conf b/testdata/acl_interface.tdir/acl_interface.conf
index 157a2d7b76bf..1d9f8c9aae09 100644
--- a/testdata/acl_interface.tdir/acl_interface.conf
+++ b/testdata/acl_interface.tdir/acl_interface.conf
@@ -5,9 +5,10 @@ server:
pidfile: "unbound.pid"
chroot: ""
username: ""
+ module-config: "respip validator iterator" # respip for the RPZ part
do-not-query-localhost: no
use-caps-for-id: no
- define-tag: "one two refuse"
+ define-tag: "one two refuse rpz-one rpz-two rpz-nx"
# Interface configuration for IPv4
interface: @IPV4_ADDR@@@PORT_ALLOW@
@@ -16,6 +17,9 @@ server:
interface: @IPV4_ADDR@@@PORT_TAG_1@
interface: @IPV4_ADDR@@@PORT_TAG_2@
interface: @IPV4_ADDR@@@PORT_TAG_3@
+ interface: @IPV4_ADDR@@@PORT_RPZ_1@
+ interface: @IPV4_ADDR@@@PORT_RPZ_2@
+ interface: @IPV4_ADDR@@@PORT_RPZ_NX@
interface: @IPV4_ADDR@@@PORT_VIEW_INT@
interface: @IPV4_ADDR@@@PORT_VIEW_EXT@
interface: @IPV4_ADDR@@@PORT_VIEW_INTEXT@
@@ -26,6 +30,9 @@ server:
interface-action: @IPV4_ADDR@@@PORT_TAG_1@ allow
interface-action: @IPV4_ADDR@@@PORT_TAG_2@ allow
interface-action: @IPV4_ADDR@@@PORT_TAG_3@ allow
+ interface-action: @IPV4_ADDR@@@PORT_RPZ_1@ allow
+ interface-action: @IPV4_ADDR@@@PORT_RPZ_2@ allow
+ interface-action: @IPV4_ADDR@@@PORT_RPZ_NX@ allow
interface-action: @IPV4_ADDR@@@PORT_VIEW_INT@ allow
interface-action: @IPV4_ADDR@@@PORT_VIEW_EXT@ allow
interface-action: @IPV4_ADDR@@@PORT_VIEW_INTEXT@ allow
@@ -33,6 +40,9 @@ server:
interface-tag: @IPV4_ADDR@@@PORT_TAG_1@ "one"
interface-tag: @IPV4_ADDR@@@PORT_TAG_2@ "two"
interface-tag: @IPV4_ADDR@@@PORT_TAG_3@ "refuse"
+ interface-tag: @IPV4_ADDR@@@PORT_RPZ_1@ "rpz-one"
+ interface-tag: @IPV4_ADDR@@@PORT_RPZ_2@ "rpz-two"
+ interface-tag: @IPV4_ADDR@@@PORT_RPZ_NX@ "rpz-nx"
interface-tag-action: @IPV4_ADDR@@@PORT_TAG_1@ one redirect
interface-tag-data: @IPV4_ADDR@@@PORT_TAG_1@ one "A 1.1.1.1"
interface-tag-action: @IPV4_ADDR@@@PORT_TAG_2@ two redirect
@@ -50,6 +60,9 @@ server:
interface: @IPV6_ADDR@@@PORT_TAG_1@
interface: @IPV6_ADDR@@@PORT_TAG_2@
interface: @IPV6_ADDR@@@PORT_TAG_3@
+ interface: @IPV6_ADDR@@@PORT_RPZ_1@
+ interface: @IPV6_ADDR@@@PORT_RPZ_2@
+ interface: @IPV6_ADDR@@@PORT_RPZ_NX@
interface: @IPV6_ADDR@@@PORT_VIEW_INT@
interface: @IPV6_ADDR@@@PORT_VIEW_EXT@
interface: @IPV6_ADDR@@@PORT_VIEW_INTEXT@
@@ -60,6 +73,9 @@ server:
interface-action: @IPV6_ADDR@@@PORT_TAG_1@ allow
interface-action: @IPV6_ADDR@@@PORT_TAG_2@ allow
interface-action: @IPV6_ADDR@@@PORT_TAG_3@ allow
+ interface-action: @IPV6_ADDR@@@PORT_RPZ_1@ allow
+ interface-action: @IPV6_ADDR@@@PORT_RPZ_2@ allow
+ interface-action: @IPV6_ADDR@@@PORT_RPZ_NX@ allow
interface-action: @IPV6_ADDR@@@PORT_VIEW_INT@ allow
interface-action: @IPV6_ADDR@@@PORT_VIEW_EXT@ allow
interface-action: @IPV6_ADDR@@@PORT_VIEW_INTEXT@ allow
@@ -67,6 +83,9 @@ server:
interface-tag: @IPV6_ADDR@@@PORT_TAG_1@ "one"
interface-tag: @IPV6_ADDR@@@PORT_TAG_2@ "two"
interface-tag: @IPV6_ADDR@@@PORT_TAG_3@ "refuse"
+ interface-tag: @IPV6_ADDR@@@PORT_RPZ_1@ "rpz-one"
+ interface-tag: @IPV6_ADDR@@@PORT_RPZ_2@ "rpz-two"
+ interface-tag: @IPV6_ADDR@@@PORT_RPZ_NX@ "rpz-nx"
interface-tag-action: @IPV6_ADDR@@@PORT_TAG_1@ one redirect
interface-tag-data: @IPV6_ADDR@@@PORT_TAG_1@ one "A 1.1.1.1"
interface-tag-action: @IPV6_ADDR@@@PORT_TAG_2@ two redirect
@@ -84,6 +103,9 @@ server:
interface: @INTERFACE@@@PORT_TAG_1@
interface: @INTERFACE@@@PORT_TAG_2@
interface: @INTERFACE@@@PORT_TAG_3@
+ interface: @INTERFACE@@@PORT_RPZ_1@
+ interface: @INTERFACE@@@PORT_RPZ_2@
+ interface: @INTERFACE@@@PORT_RPZ_NX@
interface: @INTERFACE@@@PORT_VIEW_INT@
interface: @INTERFACE@@@PORT_VIEW_EXT@
interface: @INTERFACE@@@PORT_VIEW_INTEXT@
@@ -94,6 +116,9 @@ server:
interface-action: @INTERFACE@@@PORT_TAG_1@ allow
interface-action: @INTERFACE@@@PORT_TAG_2@ allow
interface-action: @INTERFACE@@@PORT_TAG_3@ allow
+ interface-action: @INTERFACE@@@PORT_RPZ_1@ allow
+ interface-action: @INTERFACE@@@PORT_RPZ_2@ allow
+ interface-action: @INTERFACE@@@PORT_RPZ_NX@ allow
interface-action: @INTERFACE@@@PORT_VIEW_INT@ allow
interface-action: @INTERFACE@@@PORT_VIEW_EXT@ allow
interface-action: @INTERFACE@@@PORT_VIEW_INTEXT@ allow
@@ -101,6 +126,9 @@ server:
interface-tag: @INTERFACE@@@PORT_TAG_1@ "one"
interface-tag: @INTERFACE@@@PORT_TAG_2@ "two"
interface-tag: @INTERFACE@@@PORT_TAG_3@ "refuse"
+ interface-tag: @INTERFACE@@@PORT_RPZ_1@ "rpz-one"
+ interface-tag: @INTERFACE@@@PORT_RPZ_2@ "rpz-two"
+ interface-tag: @INTERFACE@@@PORT_RPZ_NX@ "rpz-nx"
interface-tag-action: @INTERFACE@@@PORT_TAG_1@ one redirect
interface-tag-data: @INTERFACE@@@PORT_TAG_1@ one "A 1.1.1.1"
interface-tag-action: @INTERFACE@@@PORT_TAG_2@ two redirect
@@ -130,6 +158,22 @@ view:
name: "intext"
view-first: yes
+# RPZ configuration
+rpz:
+ name: "rpz-one"
+ zonefile: "rpz-one.zone"
+ tags: "rpz-one"
+
+rpz:
+ name: "rpz-two"
+ zonefile: "rpz-two.zone"
+ tags: "rpz-two"
+
+rpz:
+ name: "rpz-nx"
+ zonefile: "rpz-nx.zone"
+ tags: "rpz-nx"
+
# Stubs configuration
forward-zone:
name: "."
diff --git a/testdata/acl_interface.tdir/acl_interface.pre b/testdata/acl_interface.tdir/acl_interface.pre
index ce5358c1b2d9..88ebc4ff9016 100644
--- a/testdata/acl_interface.tdir/acl_interface.pre
+++ b/testdata/acl_interface.tdir/acl_interface.pre
@@ -7,7 +7,7 @@ if test ! -x "`which unshare 2>&1`"; then
skip_test "no unshare (from util-linux package) available, skip test"
fi
-get_random_port 11
+get_random_port 14
PORT_ALLOW=$RND_PORT
PORT_DENY=$(($RND_PORT + 1))
@@ -18,8 +18,11 @@ PORT_TAG_3=$(($RND_PORT + 5))
PORT_VIEW_INT=$(($RND_PORT + 6))
PORT_VIEW_EXT=$(($RND_PORT + 7))
PORT_VIEW_INTEXT=$(($RND_PORT + 8))
-FORWARD_PORT=$(($RND_PORT + 9))
-STUB_PORT=$(($RND_PORT + 10))
+PORT_RPZ_1=$(($RND_PORT + 9))
+PORT_RPZ_2=$(($RND_PORT + 10))
+PORT_RPZ_NX=$(($RND_PORT + 11))
+FORWARD_PORT=$(($RND_PORT + 12))
+STUB_PORT=$(($RND_PORT + 13))
IPV4_ADDR=192.168.1.1
IPV6_ADDR=2001:db8::1
@@ -41,6 +44,9 @@ sed \
-e 's/@PORT_VIEW_INT\@/'$PORT_VIEW_INT'/' \
-e 's/@PORT_VIEW_EXT\@/'$PORT_VIEW_EXT'/' \
-e 's/@PORT_VIEW_INTEXT\@/'$PORT_VIEW_INTEXT'/' \
+ -e 's/@PORT_RPZ_1\@/'$PORT_RPZ_1'/' \
+ -e 's/@PORT_RPZ_2\@/'$PORT_RPZ_2'/' \
+ -e 's/@PORT_RPZ_NX\@/'$PORT_RPZ_NX'/' \
-e 's/@FORWARD_PORT\@/'$FORWARD_PORT'/' \
-e 's/@STUB_PORT\@/'$STUB_PORT'/' \
-e 's/@IPV4_ADDR\@/'$IPV4_ADDR'/' \
@@ -63,6 +69,9 @@ echo "PORT_TAG_3=$PORT_TAG_3" >> .tpkg.var.test
echo "PORT_VIEW_INT=$PORT_VIEW_INT" >> .tpkg.var.test
echo "PORT_VIEW_EXT=$PORT_VIEW_EXT" >> .tpkg.var.test
echo "PORT_VIEW_INTEXT=$PORT_VIEW_INTEXT" >> .tpkg.var.test
+echo "PORT_RPZ_1=$PORT_RPZ_1" >> .tpkg.var.test
+echo "PORT_RPZ_2=$PORT_RPZ_2" >> .tpkg.var.test
+echo "PORT_RPZ_NX=$PORT_RPZ_NX" >> .tpkg.var.test
echo "FORWARD_PORT=$FORWARD_PORT" >> .tpkg.var.test
echo "STUB_PORT=$STUB_PORT" >> .tpkg.var.test
echo "IPV4_ADDR=$IPV4_ADDR" >> .tpkg.var.test
diff --git a/testdata/acl_interface.tdir/acl_interface.test.scenario b/testdata/acl_interface.tdir/acl_interface.test.scenario
index 00b2b059f942..4ae0a42f0602 100644
--- a/testdata/acl_interface.tdir/acl_interface.test.scenario
+++ b/testdata/acl_interface.tdir/acl_interface.test.scenario
@@ -78,6 +78,16 @@ expect_refused () {
fi
}
+expect_nx_answer () {
+ echo "> check answer for NXDOMAIN"
+ if grep "NXDOMAIN" outfile; then
+ echo "OK"
+ else
+ echo "Not OK"
+ end 1
+ fi
+}
+
expect_external_answer () {
echo "> check external answer"
if grep "1.2.3.4" outfile; then
@@ -118,6 +128,26 @@ expect_tag_two_answer () {
fi
}
+expect_rpz_one_answer () {
+ echo "> check tag 'one' answer"
+ if grep "11.11.11.11" outfile; then
+ echo "OK"
+ else
+ echo "Not OK"
+ end 1
+ fi
+}
+
+expect_rpz_two_answer () {
+ echo "> check tag 'two' answer"
+ if grep "22.22.22.22" outfile; then
+ echo "OK"
+ else
+ echo "Not OK"
+ end 1
+ fi
+}
+
# do the test
for i in 4 6; do
@@ -142,6 +172,15 @@ for i in 4 6; do
query $i $PORT_TAG_3 "local"
expect_refused
+ query $i $PORT_RPZ_1 "local"
+ expect_rpz_one_answer
+
+ query $i $PORT_RPZ_2 "local"
+ expect_rpz_two_answer
+
+ query $i $PORT_RPZ_NX "local"
+ expect_nx_answer
+
query $i $PORT_VIEW_INT "www.internal"
expect_internal_answer
@@ -183,6 +222,15 @@ for addr in $INTERFACE_ADDR_1 $INTERFACE_ADDR_2 $INTERFACE_ADDR_3 $INTERFACE_ADD
query_addr $addr $PORT_TAG_3 "local"
expect_refused
+ query_addr $addr $PORT_RPZ_1 "local"
+ expect_rpz_one_answer
+
+ query_addr $addr $PORT_RPZ_2 "local"
+ expect_rpz_two_answer
+
+ query_addr $addr $PORT_RPZ_NX "local"
+ expect_nx_answer
+
query_addr $addr $PORT_VIEW_INT "www.internal"
expect_internal_answer
diff --git a/testdata/acl_interface.tdir/rpz-nx.zone b/testdata/acl_interface.tdir/rpz-nx.zone
new file mode 100644
index 000000000000..a5c828d18eec
--- /dev/null
+++ b/testdata/acl_interface.tdir/rpz-nx.zone
@@ -0,0 +1,3 @@
+$ORIGIN rpz-nx.
+@ IN SOA no.no no.no 1 2 3 4 5
+local IN CNAME .
diff --git a/testdata/acl_interface.tdir/rpz-one.zone b/testdata/acl_interface.tdir/rpz-one.zone
new file mode 100644
index 000000000000..f5dabab659ab
--- /dev/null
+++ b/testdata/acl_interface.tdir/rpz-one.zone
@@ -0,0 +1,3 @@
+$ORIGIN rpz-one.
+@ IN SOA no.no no.no 1 2 3 4 5
+local IN A 11.11.11.11
diff --git a/testdata/acl_interface.tdir/rpz-two.zone b/testdata/acl_interface.tdir/rpz-two.zone
new file mode 100644
index 000000000000..9578dde8f928
--- /dev/null
+++ b/testdata/acl_interface.tdir/rpz-two.zone
@@ -0,0 +1,3 @@
+$ORIGIN rpz-two.
+@ IN SOA no.no no.no 1 2 3 4 5
+local IN A 22.22.22.22
diff --git a/testdata/cachedb_val_expired.crpl b/testdata/cachedb_val_expired.crpl
new file mode 100644
index 000000000000..4a51e8272379
--- /dev/null
+++ b/testdata/cachedb_val_expired.crpl
@@ -0,0 +1,327 @@
+; config options
+server:
+ target-fetch-policy: "0 0 0 0 0"
+ qname-minimisation: no
+ minimal-responses: yes
+ serve-expired: yes
+ ;module-config: "subnetcache validator cachedb iterator"
+ module-config: "validator cachedb iterator"
+
+cachedb:
+ backend: "testframe"
+ secret-seed: "testvalue"
+ cachedb-check-when-serve-expired: yes
+
+stub-zone:
+ name: "."
+ stub-addr: 193.0.14.129
+CONFIG_END
+
+SCENARIO_BEGIN Test cachedb, validator and serve expired.
+
+; K.ROOT-SERVERS.NET.
+RANGE_BEGIN 0 400
+ 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 400
+ ADDRESS 192.5.6.30
+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 ns2.example.com.
+SECTION ADDITIONAL
+ns2.example.com. IN A 1.2.3.5
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+foo.com. IN NS
+SECTION AUTHORITY
+foo.com. IN NS ns.example.com.
+ENTRY_END
+RANGE_END
+
+; ns2.example.com.
+RANGE_BEGIN 0 400
+ ADDRESS 1.2.3.5
+ENTRY_BEGIN
+MATCH opcode qname qtype
+REPLY QR AA NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. 10 IN A 1.2.3.4
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qname qtype
+REPLY QR AA NOERROR
+SECTION QUESTION
+www2.example.com. IN A
+SECTION ANSWER
+www2.example.com. 10 IN A 1.2.3.5
+ENTRY_END
+RANGE_END
+
+; Get an entry in cache, to make it expired.
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www.example.com. IN A
+ENTRY_END
+
+; get the answer for it
+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. 10 IN A 1.2.3.4
+ENTRY_END
+
+; Get another query in cache to make it expired.
+STEP 20 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www2.example.com. IN A
+ENTRY_END
+
+; get the answer for it
+STEP 30 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+www2.example.com. IN A
+SECTION ANSWER
+www2.example.com. 10 IN A 1.2.3.5
+ENTRY_END
+
+; it is now expired
+STEP 40 TIME_PASSES ELAPSE 20
+
+; cache is expired, and cachedb is expired.
+; The expired reply, from cachedb, needs a validation status,
+; because the validator module set that validation is needed.
+STEP 50 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www2.example.com. IN A
+ENTRY_END
+
+STEP 60 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all ttl
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+www2.example.com. IN A
+SECTION ANSWER
+www2.example.com. 30 IN A 1.2.3.5
+ENTRY_END
+
+; cache is expired, cachedb has no answer
+STEP 70 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www.example.com. IN A
+ENTRY_END
+
+STEP 80 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 1.2.3.4
+ENTRY_END
+
+STEP 90 TRAFFIC
+; the entry should be refreshed in cache now.
+; cache is valid and cachedb is valid.
+STEP 100 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www.example.com. IN A
+ENTRY_END
+
+STEP 110 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all ttl
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. 10 IN A 1.2.3.4
+ENTRY_END
+
+; flush the entry from cache
+STEP 120 FLUSH_MESSAGE www.example.com. IN A
+
+; cache has no answer, cachedb valid
+STEP 130 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www.example.com. IN A
+ENTRY_END
+
+STEP 140 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all ttl
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. 10 IN A 1.2.3.4
+ENTRY_END
+
+; it is now expired
+STEP 150 TIME_PASSES ELAPSE 20
+; flush the entry from cache
+STEP 160 FLUSH_MESSAGE www.example.com. IN A
+
+; cache has no answer, cachedb is expired
+STEP 170 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www.example.com. IN A
+ENTRY_END
+
+STEP 180 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 1.2.3.4
+ENTRY_END
+
+STEP 190 TRAFFIC
+; the expired message is updated.
+
+; cache is valid, cachedb is valid
+STEP 200 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www.example.com. IN A
+ENTRY_END
+
+STEP 210 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all ttl
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. 10 IN A 1.2.3.4
+ENTRY_END
+
+; expire the entry in cache
+STEP 220 EXPIRE_MESSAGE www.example.com. IN A
+
+; cache is expired, cachedb valid
+STEP 230 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www.example.com. IN A
+ENTRY_END
+
+STEP 240 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all ttl
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. 10 IN A 1.2.3.4
+ENTRY_END
+
+; it is now expired
+STEP 250 TIME_PASSES ELAPSE 20
+; expire the entry in cache
+STEP 260 EXPIRE_MESSAGE www.example.com. IN A
+
+; cache is expired, cachedb is expired
+STEP 270 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www.example.com. IN A
+ENTRY_END
+
+STEP 280 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 1.2.3.4
+ENTRY_END
+
+STEP 290 TRAFFIC
+; the expired message is updated.
+
+; cache is valid, cachedb is valid
+STEP 300 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www.example.com. IN A
+ENTRY_END
+
+STEP 310 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all ttl
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. 10 IN A 1.2.3.4
+ENTRY_END
+
+SCENARIO_END
diff --git a/testdata/cookie_file.tdir/cookie_file.conf b/testdata/cookie_file.tdir/cookie_file.conf
new file mode 100644
index 000000000000..25dd93f52667
--- /dev/null
+++ b/testdata/cookie_file.tdir/cookie_file.conf
@@ -0,0 +1,19 @@
+server:
+ verbosity: 7
+ use-syslog: no
+ directory: ""
+ pidfile: "unbound.pid"
+ chroot: ""
+ username: ""
+ do-not-query-localhost: no
+ use-caps-for-id: no
+ port: @SERVER_PORT@
+ interface: 127.0.0.1
+ cookie-secret-file: "cookie_secrets.txt"
+ answer-cookie: yes
+ access-control: 127.0.0.0/8 allow_cookie # BADCOOKIE for incomplete/invalid cookies
+
+remote-control:
+ control-enable: yes
+ control-port: @CONTROL_PORT@
+ control-use-cert: no
diff --git a/testdata/cookie_file.tdir/cookie_file.dsc b/testdata/cookie_file.tdir/cookie_file.dsc
new file mode 100644
index 000000000000..4f321bd2ef96
--- /dev/null
+++ b/testdata/cookie_file.tdir/cookie_file.dsc
@@ -0,0 +1,16 @@
+BaseName: cookie_file
+Version: 1.0
+Description: Check the cookie rollover
+CreationDate: Fri 14 Jun 11:00:00 CEST 2024
+Maintainer:
+Category:
+Component:
+CmdDepends:
+Depends:
+Help:
+Pre: cookie_file.pre
+Post: cookie_file.post
+Test: cookie_file.test
+AuxFiles:
+Passed:
+Failure:
diff --git a/testdata/remote-threaded.tdir/remote-threaded.post b/testdata/cookie_file.tdir/cookie_file.post
index 4cccd9a8b6ba..b64af9cbdab3 100644
--- a/testdata/remote-threaded.tdir/remote-threaded.post
+++ b/testdata/cookie_file.tdir/cookie_file.post
@@ -1,4 +1,4 @@
-# #-- remote-threaded.post --#
+# #-- cookie_file.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
@@ -6,8 +6,5 @@
#
# do your teardown here
. ../common.sh
-kill_pid $FWD_PID
-# unbound stopped by test (if successful)
-kill $UNBOUND_PID >/dev/null 2>&1
-kill $UNBOUND_PID >/dev/null 2>&1
-exit 0
+kill_from_pidfile "unbound.pid"
+cat unbound.log
diff --git a/testdata/cookie_file.tdir/cookie_file.pre b/testdata/cookie_file.tdir/cookie_file.pre
new file mode 100644
index 000000000000..61da5425a447
--- /dev/null
+++ b/testdata/cookie_file.tdir/cookie_file.pre
@@ -0,0 +1,24 @@
+# #-- cookie_file.pre--#
+PRE="../.."
+. ../common.sh
+
+get_random_port 2
+SERVER_PORT=$RND_PORT
+CONTROL_PORT=$(($RND_PORT + 1))
+echo "SERVER_PORT=$SERVER_PORT" >> .tpkg.var.test
+echo "CONTROL_PORT=$CONTROL_PORT" >> .tpkg.var.test
+
+# make config file
+sed \
+ -e 's/@SERVER_PORT\@/'$SERVER_PORT'/' \
+ -e 's/@CONTROL_PORT\@/'$CONTROL_PORT'/' \
+ < cookie_file.conf > ub.conf
+
+# empty cookie file
+touch cookie_secrets.txt
+
+# start unbound in the background
+$PRE/unbound -d -c ub.conf > unbound.log 2>&1 &
+
+cat .tpkg.var.test
+wait_unbound_up unbound.log
diff --git a/testdata/cookie_file.tdir/cookie_file.test b/testdata/cookie_file.tdir/cookie_file.test
new file mode 100644
index 000000000000..7da4fa657bb8
--- /dev/null
+++ b/testdata/cookie_file.tdir/cookie_file.test
@@ -0,0 +1,248 @@
+# #-- cookie_file.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
+PRE="../.."
+. ../common.sh
+
+first_secret=dd3bdf9344b678b185a6f5cb60fca715
+second_secret=445536bcd2513298075a5d379663c962
+
+
+teststep "Add first secret"
+echo ">> add_cookie_secret $first_secret"
+$PRE/unbound-control -c ub.conf add_cookie_secret $first_secret
+# check secret is persisted
+outfile=cookie_secrets.1
+$PRE/unbound-control -c ub.conf print_cookie_secrets > $outfile
+if ! grep -q "$first_secret" $outfile
+then
+ sleep 1
+ $PRE/unbound-control -c ub.conf print_cookie_secrets > $outfile
+fi
+if ! grep -q "$first_secret" $outfile
+then
+ sleep 1
+ $PRE/unbound-control -c ub.conf print_cookie_secrets > $outfile
+fi
+if ! grep -q "$first_secret" $outfile
+then
+ sleep 1
+ $PRE/unbound-control -c ub.conf print_cookie_secrets > $outfile
+fi
+if ! grep -q "^active.*$first_secret" $outfile
+then
+ cat $outfile
+ echo "First secret was not provisioned"
+ exit 1
+fi
+echo ">> print_cookie_secrets"
+cat $outfile
+
+
+teststep "Get a valid cookie for this secret"
+outfile=dig.output.1
+dig version.server ch txt @127.0.0.1 -p $SERVER_PORT +cookie=3132333435363738 > $outfile
+if ! grep -q "BADCOOKIE" $outfile
+then
+ cat $outfile
+ echo "Did not get a BADCOOKIE response for a client-only cookie"
+ exit 1
+fi
+if ! grep -q "COOKIE: 3132333435363738" $outfile
+then
+ cat $outfile
+ echo "Did not get a cookie in the response"
+ exit 1
+fi
+first_cookie=$(grep "; COOKIE:" $outfile | cut -d ' ' -f 3)
+cat $outfile
+echo "first cookie: $first_cookie"
+
+
+teststep "Verify the first cookie can be reused"
+outfile=dig.output.2
+dig version.server ch txt @127.0.0.1 -p $SERVER_PORT +cookie=$first_cookie > $outfile
+if grep -q "BADCOOKIE" $outfile
+then
+ cat $outfile
+ echo "Got BADCOOKIE response for a valid cookie"
+ exit 1
+fi
+if ! grep -q "COOKIE: $first_cookie" $outfile
+then
+ cat $outfile
+ echo "Did not get the same first cookie in the response"
+ exit 1
+fi
+
+
+teststep "Add second secret"
+outfile=cookie_secrets.2
+echo ">> add_cookie_secret $second_secret"
+$PRE/unbound-control -c ub.conf add_cookie_secret $second_secret
+$PRE/unbound-control -c ub.conf print_cookie_secrets > $outfile
+if ! grep -q "$second_secret" $outfile
+then
+ sleep 1
+ $PRE/unbound-control -c ub.conf print_cookie_secrets > $outfile
+fi
+if ! grep -q "$second_secret" $outfile
+then
+ sleep 1
+ $PRE/unbound-control -c ub.conf print_cookie_secrets > $outfile
+fi
+if ! grep -q "$second_secret" $outfile
+then
+ sleep 1
+ $PRE/unbound-control -c ub.conf print_cookie_secrets > $outfile
+fi
+if ! grep -q "^staging.*$second_secret" $outfile \
+ || ! grep -q "^active.*$first_secret" $outfile
+then
+ cat $outfile
+ echo "Secrets were not provisioned"
+ exit 1
+fi
+echo ">> print_cookie_secrets"
+cat $outfile
+echo ">> cookie_secrets.txt"
+cat cookie_secrets.txt
+
+
+teststep "Verify the first cookie can be reused"
+outfile=dig.output.3
+dig version.server ch txt @127.0.0.1 -p $SERVER_PORT +cookie=$first_cookie > $outfile
+if grep -q "BADCOOKIE" $outfile
+then
+ cat $outfile
+ echo "Got BADCOOKIE response for a valid cookie"
+ exit 1
+fi
+if ! grep -q "COOKIE: $first_cookie" $outfile
+then
+ cat $outfile
+ echo "Did not get the same first cookie in the response"
+ exit 1
+fi
+
+
+teststep "Secret rollover"
+outfile=cookie_secrets.3
+$PRE/unbound-control -c ub.conf activate_cookie_secret
+$PRE/unbound-control -c ub.conf print_cookie_secrets > $outfile
+if ! grep -q "^active.*$second_secret" $outfile
+then
+ sleep 1
+ $PRE/unbound-control -c ub.conf print_cookie_secrets > $outfile
+fi
+if ! grep -q "^active.*$second_secret" $outfile
+then
+ sleep 1
+ $PRE/unbound-control -c ub.conf print_cookie_secrets > $outfile
+fi
+if ! grep -q "^active.*$second_secret" $outfile
+then
+ sleep 1
+ $PRE/unbound-control -c ub.conf print_cookie_secrets > $outfile
+fi
+if ! grep -q "^active.*$second_secret" $outfile \
+ || ! grep -q "^staging.*$first_secret" $outfile
+then
+ cat $outfile
+ echo "Second secret was not activated"
+ exit 1
+fi
+echo ">> activate cookie secret, printout"
+cat $outfile
+echo ">> cookie_secrets.txt"
+cat cookie_secrets.txt
+
+
+teststep "Verify the first cookie can be reused but a new cookie is returned from the second secret"
+outfile=dig.output.4
+dig version.server ch txt @127.0.0.1 -p $SERVER_PORT +cookie=$first_cookie > $outfile
+if grep -q "BADCOOKIE" $outfile
+then
+ cat $outfile
+ echo "Got BADCOOKIE response for a valid cookie"
+ exit 1
+fi
+if ! grep -q "COOKIE: 3132333435363738" $outfile
+then
+ cat $outfile
+ echo "Did not get a cookie in the response"
+ exit 1
+fi
+if grep -q "COOKIE: $first_cookie" $outfile
+then
+ cat $outfile
+ echo "Got the same first cookie in the response while the second secret is active"
+ exit 1
+fi
+second_cookie=$(grep "; COOKIE:" $outfile | cut -d ' ' -f 3)
+cat $outfile
+echo "second cookie: $second_cookie"
+
+
+teststep "Drop cookie secret"
+outfile=cookie_secrets.4
+$PRE/unbound-control -c ub.conf drop_cookie_secret
+$PRE/unbound-control -c ub.conf print_cookie_secrets > $outfile
+if grep -q "^staging.*$first_secret" $outfile
+then
+ sleep 1
+ $PRE/unbound-control -c ub.conf print_cookie_secrets > $outfile
+fi
+if grep -q "^staging.*$first_secret" $outfile
+then
+ sleep 1
+ $PRE/unbound-control -c ub.conf print_cookie_secrets > $outfile
+fi
+if grep -q "^staging.*$first_secret" $outfile
+then
+ sleep 1
+ $PRE/unbound-control -c ub.conf print_cookie_secrets > $outfile
+fi
+if grep -q "^staging.*$first_secret" $outfile
+then
+ cat $outfile
+ echo "First secret was not dropped"
+ exit 1
+fi
+echo ">> drop cookie secret, printout"
+cat $outfile
+echo ">> cookie_secrets.txt"
+cat cookie_secrets.txt
+
+
+teststep "Verify the first cookie can not be reused and the second cookie is returned instead"
+outfile=dig.output.4
+dig version.server ch txt @127.0.0.1 -p $SERVER_PORT +cookie=$first_cookie > $outfile
+if ! grep -q "BADCOOKIE" $outfile
+then
+ cat $outfile
+ echo "Did not get BADCOOKIE response for an invalid cookie"
+ exit 1
+fi
+if ! grep -q "COOKIE: 3132333435363738" $outfile
+then
+ cat $outfile
+ echo "Did not get a cookie in the response"
+ exit 1
+fi
+if grep -q "COOKIE: $first_cookie" $outfile
+then
+ cat $outfile
+ echo "Got the same first cookie in the response while the second secret is active"
+ exit 1
+fi
+if ! grep -q "COOKIE: $second_cookie" $outfile
+then
+ cat $outfile
+ echo "Did not get the same second cookie in the response"
+ exit 1
+fi
+
+exit 0
diff --git a/testdata/dnstap.tdir/dnstap.post b/testdata/dnstap.tdir/dnstap.post
index 6d5e9d50d044..8fefc7e844b2 100644
--- a/testdata/dnstap.tdir/dnstap.post
+++ b/testdata/dnstap.tdir/dnstap.post
@@ -12,4 +12,6 @@ kill_pid $FWD_PID
kill $UNBOUND_PID
kill $UNBOUND_PID >/dev/null 2>&1
cat unbound.log
+cat tap.log
+cat tap.errlog
exit 0
diff --git a/testdata/dnstap.tdir/dnstap.test b/testdata/dnstap.tdir/dnstap.test
index 3ec9c77bd0c8..ebb1802513be 100644
--- a/testdata/dnstap.tdir/dnstap.test
+++ b/testdata/dnstap.tdir/dnstap.test
@@ -122,8 +122,6 @@ if test $num_responses -gt 2; then
fi
echo "> cat logfiles"
-cat tap.log
-cat tap.errlog
cat fwd.log
echo "> OK"
exit 0
diff --git a/testdata/ede.tdir/ede-auth.conf b/testdata/ede.tdir/ede-auth.conf
index d78da0382ad4..81a9f6bfa65f 100644
--- a/testdata/ede.tdir/ede-auth.conf
+++ b/testdata/ede.tdir/ede-auth.conf
@@ -24,4 +24,3 @@ auth-zone:
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
index 639899d13049..1a9cc7e3016b 100644
--- a/testdata/ede.tdir/ede.conf
+++ b/testdata/ede.tdir/ede.conf
@@ -33,18 +33,18 @@ server:
local-zone: test nodefault
do-not-query-localhost: no
-forward-zone:
+stub-zone:
name: "dnssec-failures.test"
- forward-addr: 127.0.0.1@@PORT2@
+ stub-addr: 127.0.0.1@@PORT2@
-forward-zone:
+stub-zone:
name: "dnskey-failures.test"
- forward-addr: 127.0.0.1@@PORT2@
+ stub-addr: 127.0.0.1@@PORT2@
-forward-zone:
+stub-zone:
name: "nsec-failures.test"
- forward-addr: 127.0.0.1@@PORT2@
+ stub-addr: 127.0.0.1@@PORT2@
-forward-zone:
+stub-zone:
name: "rrsig-failures.test"
- forward-addr: 127.0.0.1@@PORT2@
+ stub-addr: 127.0.0.1@@PORT2@
diff --git a/testdata/ede.tdir/ede.test b/testdata/ede.tdir/ede.test
index e45085ebf156..d166b2e9a9c2 100644
--- a/testdata/ede.tdir/ede.test
+++ b/testdata/ede.tdir/ede.test
@@ -5,9 +5,6 @@
[ -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
diff --git a/testdata/fwd_name_lookup.rpl b/testdata/fwd_name_lookup.rpl
new file mode 100644
index 000000000000..dbcfffba524a
--- /dev/null
+++ b/testdata/fwd_name_lookup.rpl
@@ -0,0 +1,152 @@
+; config options
+server:
+ # must have target-fetch-policy to fetch forward-host name.
+ target-fetch-policy: "3 2 1 0 0"
+ qname-minimisation: no
+ minimal-responses: no
+
+forward-zone:
+ name: "."
+ forward-addr: 1.2.3.4
+ forward-host: ns.example.com
+CONFIG_END
+
+SCENARIO_BEGIN Test forward with forward-host lookup for more addresses
+
+; Forward server
+RANGE_BEGIN 0 15
+ ADDRESS 1.2.3.4
+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.4
+ns.example.com. IN A 1.2.3.5
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+ns.example.com. IN AAAA
+SECTION ANSWER
+SECTION AUTHORITY
+example.com. IN SOA ns.example.com. host.example.com. 3 3600 300 86400 3600
+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 1.2.3.6
+ENTRY_END
+RANGE_END
+
+; The forward server gives no answers.
+RANGE_BEGIN 20 55
+ ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR SERVFAIL
+SECTION QUESTION
+www2.example.com. IN A
+SECTION ANSWER
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR SERVFAIL
+SECTION QUESTION
+www3.example.com. IN A
+SECTION ANSWER
+ENTRY_END
+RANGE_END
+
+; The other forward server.
+RANGE_BEGIN 20 55
+ ADDRESS 1.2.3.5
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www2.example.com. IN A
+SECTION ANSWER
+www2.example.com. IN A 1.2.3.7
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www3.example.com. IN A
+SECTION ANSWER
+www3.example.com. IN A 1.2.3.8
+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 1.2.3.6
+ENTRY_END
+
+; The address 1.2.3.4 is not responding so it has to fail over to the
+; address from the name lookup.
+STEP 20 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www2.example.com. IN A
+ENTRY_END
+
+STEP 30 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+www2.example.com. IN A
+SECTION ANSWER
+www2.example.com. IN A 1.2.3.7
+ENTRY_END
+
+STEP 40 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www3.example.com. IN A
+ENTRY_END
+
+STEP 50 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+www3.example.com. IN A
+SECTION ANSWER
+www3.example.com. IN A 1.2.3.8
+ENTRY_END
+
+SCENARIO_END
diff --git a/testdata/ipset.tdir/ipset.pre b/testdata/ipset.tdir/ipset.pre
index 42c94fac45e0..7c61e646805d 100644
--- a/testdata/ipset.tdir/ipset.pre
+++ b/testdata/ipset.tdir/ipset.pre
@@ -8,6 +8,11 @@
PRE="../.."
if grep "define USE_IPSET 1" $PRE/config.h; then echo test enabled; else skip_test "test skipped"; fi
+if grep "define HAVE_NET_PFVAR_H 1" $PRE/config.h; then
+ if test ! -f /dev/pf; then
+ skip_test "no /dev/pf"
+ fi
+fi
get_random_port 2
UNBOUND_PORT=$RND_PORT
diff --git a/testdata/remote-threaded.tdir/bad_control.key b/testdata/remote-threaded.tdir/bad_control.key
deleted file mode 100644
index d29cdbc91b37..000000000000
--- a/testdata/remote-threaded.tdir/bad_control.key
+++ /dev/null
@@ -1,15 +0,0 @@
------BEGIN RSA PRIVATE KEY-----
-MIICXAIBAAKBgQDti51Z6qASvAjPFFhLLlq8BwtsnmfqMPMn57dKAghb4OifeL4G
-SLOE02/hKDkdkOvaUG2UqDNh2OoPTuJk4A+mG2LJoziFhHKlIebo9v2YiFWOBVtO
-DWc3tXPT1IlSEN0xnAGelMmeLcPeCPe+A5IDlIHzF/+YiDgS38S9dL17owIDAQAB
-AoGAG3w/DatfMCu/nS5OdQx9BSqPgNbnUSqux9xA0fhgPTlN0T3oRtPcqa7JUDUW
-PryI/a62ry+zGkw98N2AxolCZg3N7Z3vuRx2FMcKKNwpTzDmcZW7TmMk5FPof6gE
-PnYl/ff0w+kxqA+L2EexH3Xi6ApLSZcjyzKWj+dL2AuT9gkCQQD3dPitwITxgCAD
-IaHw23e3FRkM/hw1Gp8bt6nbuxitVxxpO96q1EQ+fCy/mf0bMEJDp3xzMEIfP3r4
-GmNbaxa1AkEA9b8LeBLbQ2cm2+UMeUgygBsRirdUQ786auqH38Jbvi/j6S9sDl2x
-q1vRtikEBZJWfkhsOzrzwFDKe1bI/EEn9wJAAzOwRA9JqRZPU7sLrWIpmmTbfh+L
-neRKSsGFoSI6n4ORCouLxgoZF/XjXldPvxpQwS9ZnOPy9xSLMsqknno0QQJAeDtA
-IT8Yh6GwIWWu9KeeDY8wxe1sDLlCm4yjbZZpzGMh3rSU6XJtuqjxsW3fydoO9zn3
-ugLdvvnIFxAexUwbgQJBANyM13xcObfUJOj9rjlGCh0CDh/04ONl8SH8HBnM8guA
-RJI5S6vBHweVRopEZcF1sQm6wMf3ej/sGkyyNvJxRkY=
------END RSA PRIVATE KEY-----
diff --git a/testdata/remote-threaded.tdir/bad_control.pem b/testdata/remote-threaded.tdir/bad_control.pem
deleted file mode 100644
index e06b847208e3..000000000000
--- a/testdata/remote-threaded.tdir/bad_control.pem
+++ /dev/null
@@ -1,11 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIBozCCAQwCCQDd5/rocjG5vDANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1
-bmJvdW5kMB4XDTA4MDkyNjEyMjQ0NFoXDTI4MDYxMzEyMjQ0NFowGjEYMBYGA1UE
-AxMPdW5ib3VuZC1jb250cm9sMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDt
-i51Z6qASvAjPFFhLLlq8BwtsnmfqMPMn57dKAghb4OifeL4GSLOE02/hKDkdkOva
-UG2UqDNh2OoPTuJk4A+mG2LJoziFhHKlIebo9v2YiFWOBVtODWc3tXPT1IlSEN0x
-nAGelMmeLcPeCPe+A5IDlIHzF/+YiDgS38S9dL17owIDAQABMA0GCSqGSIb3DQEB
-BQUAA4GBAHpvcKqY48X9WsqogV16L+zT7iXhZ4tySA9EBk1a+0gud/iDPKSBi7mK
-4rzphVfb4S207dVmTG+1WNpa6l3pTGML6XLElxqIu/kr7w4cF0rKvZxWPsBRqYjH
-5HrK8CrQ0+YvUHXiu7IaACLGvKXY4Tqa3HQyvEtzLWJ4HhOrGx8F
------END CERTIFICATE-----
diff --git a/testdata/remote-threaded.tdir/bad_server.key b/testdata/remote-threaded.tdir/bad_server.key
deleted file mode 100644
index 0dbb134b5be7..000000000000
--- a/testdata/remote-threaded.tdir/bad_server.key
+++ /dev/null
@@ -1,15 +0,0 @@
------BEGIN RSA PRIVATE KEY-----
-MIICWwIBAAKBgQC9hurNHBtB7QFEuPJOnCylUWUF2/US3v9yQQQXnstuXMQXRaq1
-1uviLmwaGurV9tngX59HITsBT74NQrtFKfEDLViLrm2arAM9Ozsn4tnv30HXPRDj
-UOc1M05Q7UzjaSrOv+TkPEqyhtUyaP1DYo0bcmbxtSkYc2ZEWCwhPklUwQIDAQAB
-AoGATjzZxN4ramWaNnJapJTX4U7eczK/0pB3xwSL2exVcjOdRzYdKH+WVIJxYb1m
-3/jNLFCNAeH356yxeevoPr73nG75YJ9I1ZWQWTnS3SDK6JD1+3pmAD0bQWFoitpf
-FoSH9H4X5gFB5vCZ99YVoYH1UXWPcgvUHwxz0voImt6lCKECQQD4YQ4A3M0+Ki8v
-Hl+5FKULnS0UtBkweCvkF/X1zZRjjYr6hLnqldFkkgTBKWe17pUXX0nwRMbP1YZX
-i+vDq5JNAkEAw1eYsmC0nVAMawo57N6LYavGv/n5u1cvpTpKDtn4cXH0Uqq13Kyu
-2FUTzan2NhCEK78UzbWaeewBJmxYda1+RQJAdShKk6uTAEyjnwUjv8h2JWlJN2fQ
-LeWxRlDrCruiz+aW9J4gl/99GoQpy/c83TshhjnDRZsbcDNWv/rXBZ/rTQJAFQva
-CtX6f7yBKgM3DHtJvyM3zbVMH9Ab9QxbsE/xwZ9KeKGl6Hm+eNZpxM3cFiUfaGs0
-/ZjkZOB1m0MvILaplQJAXC3PJ/E+87banGZRJl5qtS6/HoX5lH9TPkL8Essy7ANO
-2BT2OTQawD1A+VKIrQHXs085Of8tQUfrfHHt7s3Kqg==
------END RSA PRIVATE KEY-----
diff --git a/testdata/remote-threaded.tdir/bad_server.pem b/testdata/remote-threaded.tdir/bad_server.pem
deleted file mode 100644
index 983247ac73bd..000000000000
--- a/testdata/remote-threaded.tdir/bad_server.pem
+++ /dev/null
@@ -1,11 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIBmzCCAQQCCQCDugnhq8B6LzANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1
-bmJvdW5kMB4XDTA4MDkyNjEyMjQ0M1oXDTI4MDYxMzEyMjQ0M1owEjEQMA4GA1UE
-AxMHdW5ib3VuZDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAvYbqzRwbQe0B
-RLjyTpwspVFlBdv1Et7/ckEEF57LblzEF0Wqtdbr4i5sGhrq1fbZ4F+fRyE7AU++
-DUK7RSnxAy1Yi65tmqwDPTs7J+LZ799B1z0Q41DnNTNOUO1M42kqzr/k5DxKsobV
-Mmj9Q2KNG3Jm8bUpGHNmRFgsIT5JVMECAwEAATANBgkqhkiG9w0BAQUFAAOBgQCy
-zGMW35/9xXoEWsuLFWUOaEKVq5DXuXtXbcMpDW6k2ELoraa305vh7Zwhj5JSqfcm
-O0xyqIzXvz/cYdyOTgEkdMDZ/EvQsxKTwvj6eA4614yB1r3Ju5eZd4Gpo6BHhSpu
-oqsrr0duJ+JOANTyaBplIxM1sjHbR4FGtmrFknBYBQ==
------END CERTIFICATE-----
diff --git a/testdata/remote-threaded.tdir/remote-threaded.conf b/testdata/remote-threaded.tdir/remote-threaded.conf
deleted file mode 100644
index da9fee1de1ba..000000000000
--- a/testdata/remote-threaded.tdir/remote-threaded.conf
+++ /dev/null
@@ -1,25 +0,0 @@
-server:
- verbosity: 2
- num-threads: 4
- outgoing-range: 16
- interface: 127.0.0.1
- port: @PORT@
- use-syslog: no
- directory: ""
- pidfile: "unbound.pid"
- chroot: ""
- username: ""
- do-not-query-localhost: no
-remote-control:
- control-enable: yes
- control-interface: 127.0.0.1
- # control-interface: ::1
- control-port: @CONTROL_PORT@
- server-key-file: "unbound_server.key"
- server-cert-file: "unbound_server.pem"
- control-key-file: "unbound_control.key"
- control-cert-file: "unbound_control.pem"
-forward-zone:
- name: "."
- forward-addr: "127.0.0.1@@TOPORT@"
-
diff --git a/testdata/remote-threaded.tdir/remote-threaded.dsc b/testdata/remote-threaded.tdir/remote-threaded.dsc
deleted file mode 100644
index b3aeebac141a..000000000000
--- a/testdata/remote-threaded.tdir/remote-threaded.dsc
+++ /dev/null
@@ -1,16 +0,0 @@
-BaseName: remote-threaded
-Version: 1.0
-Description: remote control test with thread communication
-CreationDate: Wed Dec 3 15:00:38 CET 2008
-Maintainer: dr. W.C.A. Wijngaards
-Category:
-Component:
-CmdDepends:
-Depends:
-Help:
-Pre: remote-threaded.pre
-Post: remote-threaded.post
-Test: remote-threaded.test
-AuxFiles:
-Passed:
-Failure:
diff --git a/testdata/remote-threaded.tdir/remote-threaded.pre b/testdata/remote-threaded.tdir/remote-threaded.pre
deleted file mode 100644
index 76dc6b2492ae..000000000000
--- a/testdata/remote-threaded.tdir/remote-threaded.pre
+++ /dev/null
@@ -1,33 +0,0 @@
-# #-- remote-threaded.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 3
-UNBOUND_PORT=$RND_PORT
-FWD_PORT=$(($RND_PORT + 1))
-CONTROL_PORT=$(($RND_PORT + 2))
-echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test
-echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test
-echo "CONTROL_PORT=$CONTROL_PORT" >> .tpkg.var.test
-
-# start forwarder
-get_ldns_testns
-$LDNS_TESTNS -p $FWD_PORT remote-threaded.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'/' -e 's/@CONTROL_PORT\@/'$CONTROL_PORT'/' < remote-threaded.conf > ub.conf
-# 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
-
-cat .tpkg.var.test
-wait_ldns_testns_up fwd.log
-wait_unbound_up unbound.log
-
diff --git a/testdata/remote-threaded.tdir/remote-threaded.test b/testdata/remote-threaded.tdir/remote-threaded.test
deleted file mode 100644
index e2f6b2783aaa..000000000000
--- a/testdata/remote-threaded.tdir/remote-threaded.test
+++ /dev/null
@@ -1,310 +0,0 @@
-# #-- remote-threaded.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
-
-PRE="../.."
-
-# exit value is 1 on usage
-$PRE/unbound-control -h
-if test $? -ne 1; then
- echo "wrong exit value for usage."
- exit 1
-else
- echo "exit value for usage: OK"
-fi
-
-# use lock-verify if possible
-
-# test if the server is up.
-echo "> dig www.example.com."
-dig @127.0.0.1 -p $UNBOUND_PORT www.example.com. | tee outfile
-echo "> check answer"
-if grep "10.20.30.40" outfile; then
- echo "OK"
-else
- echo "> cat logfiles"
- cat fwd.log
- cat unbound.log
- echo "Not OK"
- exit 1
-fi
-
-# exit value is 1 when a bad command is given.
-echo "$PRE/unbound-control -c ub.conf blablargh"
-$PRE/unbound-control -c ub.conf blablargh
-if test $? -ne 1; then
- echo "wrong exit value on error."
- echo "> cat logfiles"
- cat fwd.log
- cat unbound.log
- exit 1
-else
- echo "correct exit value on error"
-fi
-
-# reload the server. test if the server came up by putting a new
-# local-data element in the server.
-echo "server: local-data: 'afterreload. IN A 5.6.7.8'" >> ub.conf
-echo "$PRE/unbound-control -c ub.conf reload"
-$PRE/unbound-control -c ub.conf reload
-if test $? -ne 0; then
- echo "wrong exit value after success"
- exit 1
-fi
-
-echo "> dig afterreload."
-dig @127.0.0.1 -p $UNBOUND_PORT afterreload. | tee outfile
-echo "> check answer"
-if grep "5.6.7.8" outfile; then
- echo "OK"
-else
- echo "> cat logfiles"
- cat fwd.log
- cat unbound.log
- echo "Not OK"
- exit 1
-fi
-
-# must have had queries now. 1 since reload.
-echo "$PRE/unbound-control -c ub.conf stats"
-$PRE/unbound-control -c ub.conf stats > tmp.$$
-if test $? -ne 0; then
- echo "wrong exit value after success"
- cat fwd.log
- cat unbound.log
- exit 1
-fi
-if grep "^total.num.queries=[1-9][0-9]*$" tmp.$$; then
- echo "OK"
-else
- echo "bad stats"
- cat tmp.$$
- exit 1
-fi
-
-# verbosity
-echo "$PRE/unbound-control -c ub.conf verbosity 4"
-$PRE/unbound-control -c ub.conf verbosity 4
-if test $? -ne 0; then
- echo "wrong exit value after success"
- exit 1
-fi
-
-# check syntax error in parse
-echo "$PRE/unbound-control -c ub.conf verbosity jkdf"
-$PRE/unbound-control -c ub.conf verbosity jkdf
-if test $? -ne 1; then
- echo "wrong exit value after failure"
- exit 1
-fi
-
-# check bad credentials
-cp ub.conf bad.conf
-echo "remote-control:" >> bad.conf
-echo " server-key-file: bad_server.key" >> bad.conf
-echo " server-cert-file: bad_server.pem" >> bad.conf
-echo " control-key-file: bad_control.key" >> bad.conf
-echo " control-cert-file: bad_control.pem" >> bad.conf
-echo "$PRE/unbound-control -c bad.conf verbosity 2"
-$PRE/unbound-control -c bad.conf verbosity 2
-if test $? -ne 1; then
- echo "wrong exit value after failure"
- exit 1
-fi
-
-# create a new local zone
-echo "> test of local zone"
-echo "$PRE/unbound-control -c ub.conf local_zone example.net static"
-$PRE/unbound-control -c ub.conf local_zone example.net static
-if test $? -ne 0; then
- echo "wrong exit value after success"
- exit 1
-fi
-echo "$PRE/unbound-control -c ub.conf local_data www.example.net A 192.0.2.1"
-$PRE/unbound-control -c ub.conf local_data www.example.net A 192.0.2.1
-if test $? -ne 0; then
- echo "wrong exit value after success"
- exit 1
-fi
-
-# check that www.example.net exists
-echo "> dig www.example.net."
-dig @127.0.0.1 -p $UNBOUND_PORT www.example.net. | tee outfile
-echo "> check answer"
-if grep "192.0.2.1" outfile; then
- echo "OK"
-else
- echo "> cat logfiles"
- cat fwd.log
- cat unbound.log
- echo "Not OK"
- exit 1
-fi
-
-# check that mail.example.net has nxdomain
-echo "> dig mail.example.net."
-dig @127.0.0.1 -p $UNBOUND_PORT mail.example.net. | tee outfile
-echo "> check answer"
-if grep "NXDOMAIN" outfile; then
- echo "OK"
-else
- echo "> cat logfiles"
- cat fwd.log
- cat unbound.log
- echo "Not OK"
- exit 1
-fi
-
-# remove www.example.net - check it gets nxdomain
-echo "$PRE/unbound-control -c ub.conf local_data_remove www.example.net"
-$PRE/unbound-control -c ub.conf local_data_remove www.example.net
-if test $? -ne 0; then
- echo "wrong exit value after success"
- exit 1
-fi
-echo "> dig www.example.net."
-dig @127.0.0.1 -p $UNBOUND_PORT www.example.net. | tee outfile
-echo "> check answer"
-if grep "NXDOMAIN" outfile; then
- echo "OK"
-else
- echo "> cat logfiles"
- cat fwd.log
- cat unbound.log
- echo "Not OK"
- exit 1
-fi
-
-# remove example.net - check its gone.
-echo "$PRE/unbound-control -c ub.conf local_zone_remove example.net"
-$PRE/unbound-control -c ub.conf local_zone_remove example.net
-if test $? -ne 0; then
- echo "wrong exit value after success"
- exit 1
-fi
-echo "> dig www.example.net."
-dig @127.0.0.1 -p $UNBOUND_PORT www.example.net. | tee outfile
-echo "> check answer"
-if grep "SERVFAIL" outfile; then
- echo "OK"
-else
- echo "> cat logfiles"
- cat fwd.log
- cat unbound.log
- echo "Not OK"
- exit 1
-fi
-
-# dump the cache
-echo "> test cache dump"
-# fillup cache
-echo "dig www.example.com"
-dig @127.0.0.1 -p $UNBOUND_PORT www.example.com.
-echo "$PRE/unbound-control -c ub.conf dump_cache"
-$PRE/unbound-control -c ub.conf dump_cache > tmp.$$
-if test $? -ne 0; then
- echo "wrong exit value after success"
- exit 1
-fi
-cat tmp.$$
-# we do not look at content. Only thread 0 content.
-# because it may not be there when it is compiled with processes only.
-if grep MSG_CACHE tmp.$$; then
- echo "OK this is a cache dump"
-else
- echo "Not OK cache dump"
- exit 1
-fi
-
-# test lookup
-echo "$PRE/unbound-control -c ub.conf lookup www.example.com"
-$PRE/unbound-control -c ub.conf lookup www.example.com
-if test $? -ne 0; then
- echo "wrong exit value after success"
- exit 1
-fi
-# answer to lookup is meaningless because of use a forwarder, oh well.
-
-# load the cache dump.
-echo "$PRE/unbound-control -c ub.conf load_cache < tmp.$$"
-$PRE/unbound-control -c ub.conf load_cache < tmp.$$
-if test $? -ne 0; then
- echo "wrong exit value after success"
- exit 1
-fi
-# do not check if cache dump contents are present ; other threads
-# may not have gotten it when it is compiled with processes only.
-
-# flushing
-echo "$PRE/unbound-control -c ub.conf flush www.example.net"
-$PRE/unbound-control -c ub.conf flush www.example.net
-if test $? -ne 0; then
- echo "wrong exit value after success"
- exit 1
-fi
-
-echo "$PRE/unbound-control -c ub.conf flush_type www.example.net TXT"
-$PRE/unbound-control -c ub.conf flush_type www.example.net TXT
-if test $? -ne 0; then
- echo "wrong exit value after success"
- exit 1
-fi
-
-echo "$PRE/unbound-control -c ub.conf flush_zone example.net"
-$PRE/unbound-control -c ub.conf flush_zone example.net
-if test $? -ne 0; then
- echo "wrong exit value after success"
- exit 1
-fi
-
-# now stop the server
-echo "$PRE/unbound-control -c ub.conf stop"
-$PRE/unbound-control -c ub.conf stop
-if test $? -ne 0; then
- echo "wrong exit value after success"
- exit 1
-fi
-# see if the server has really exited.
-TRY_MAX=20
-for (( try=0 ; try <= $TRY_MAX ; try++ )) ; do
- if kill -0 $UNBOUND_PID 2>&1 | tee tmp.$$; then
- echo "not stopped yet, waiting"
- sleep 1
- else
- echo "stopped OK; break"
- break;
- fi
- if grep "No such process" tmp.$$; then
- echo "stopped OK; break"
- break;
- fi
-done
-if kill -0 $UNBOUND_PID; then
- echo "still up!"
- echo "> cat logfiles"
- cat fwd.log
- cat unbound.log
- echo "not stopped, failure"
- exit 1
-else
- echo "stopped OK"
-
- if test -f ublocktrace.0; then
- if $PRE/lock-verify ublocktrace.*; then
- echo "lock-verify test worked."
- else
- echo "lock-verify test failed."
- cat fwd.log
- cat unbound.log
- exit 1
- fi
- fi
-fi
-
-echo "> cat logfiles"
-cat fwd.log
-cat unbound.log
-echo "> OK"
-exit 0
diff --git a/testdata/remote-threaded.tdir/remote-threaded.testns b/testdata/remote-threaded.tdir/remote-threaded.testns
deleted file mode 100644
index 0c911ca5b30e..000000000000
--- a/testdata/remote-threaded.tdir/remote-threaded.testns
+++ /dev/null
@@ -1,22 +0,0 @@
-; nameserver test file
-$ORIGIN example.com.
-$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 10.20.30.40
-ENTRY_END
-
-ENTRY_BEGIN
-MATCH opcode qtype qname
-REPLY QR AA SERVFAIL
-ADJUST copy_id
-SECTION QUESTION
-www.example.net. IN A
-ENTRY_END
-
diff --git a/testdata/remote-threaded.tdir/unbound_control.key b/testdata/remote-threaded.tdir/unbound_control.key
deleted file mode 100644
index 753a4ef6162e..000000000000
--- a/testdata/remote-threaded.tdir/unbound_control.key
+++ /dev/null
@@ -1,39 +0,0 @@
------BEGIN RSA PRIVATE KEY-----
-MIIG4gIBAAKCAYEAstEp+Pyh8XGrtZ77A4FhYjvbeB3dMa7Q2rGWxobzlA9przhA
-1aChAvUtCOAuM+rB6NTNB8YWfZJbQHawyMNpmC77cg6vXLYCGUQHZyAqidN049RJ
-F5T7j4N8Vniv17LiRdr0S6swy4PRvEnIPPV43EQHZqC5jVvHsKkhIfmBF/Dj5TXR
-ypeawWV/m5jeU6/4HRYMfytBZdO1mPXuWLh0lgbQ4SCbgrOUVD3rniMk1yZIbQOm
-vlDHYqekjDb/vOW2KxUQLG04aZMJ1mWfdbwG0CKQkSjISEDZ1l76vhM6mTM0fwXb
-IvyFZ9yPPCle1mF5aSlxS2cmGuGVSRQaw8XF9fe3a9ACJJTr33HdSpyaZkKRAUzL
-cKqLCl323daKv3NwwAT03Tj4iQM416ASMoiyfFa/2GWTKQVjddu8Crar7tGaf5xr
-lig4DBmrBvdYA3njy72/RD71hLwmlRoCGU7dRuDr9O6KASUm1Ri91ONZ/qdjMvov
-15l2vj4GV+KXR00dAgMBAAECggGAHepIL1N0dEQkCdpy+/8lH54L9WhpnOo2HqAf
-LU9eaKK7d4jdr9+TkD8cLaPzltPrZNxVALvu/0sA4SP6J1wpyj/x6P7z73qzly5+
-Xo5PD4fEwmi9YaiW/UduAblnEZrnp/AddptJKoL/D5T4XtpiQddPtael4zQ7kB57
-YIexRSQTvEDovA/o3/nvA0TrzOxfgd4ycQP3iOWGN/TMzyLsvjydrUwbOB567iz9
-whL3Etdgvnwh5Sz2blbFfH+nAR8ctvFFz+osPvuIVR21VMEI6wm7kTpSNnQ6sh/c
-lrLb/bTADn4g7z/LpIZJ+MrLvyEcoqValrLYeFBhM9CV8woPxvkO2P3pU47HVGax
-tC7GV6a/kt5RoKFd/TNdiA3OC7NGZtaeXv9VkPf4fVwBtSO9d5ZZXTGEynDD/rUQ
-U4KFJe6OD23APjse08HiiKqTPhsOneOONU67iqoaTdIkT2R4EdlkVEDpXVtWb+G9
-Q+IqYzVljlzuyHrhWXLJw/FMa2aBAoHBAOnZbi4gGpH+P6886WDWVgIlTccuXoyc
-Mg9QQYk9UDeXxL0AizR5bZy49Sduegz9vkHpAiZARQsUnizHjZ8YlRcrmn4t6tx3
-ahTIKAjdprnxJfYINM580j8CGbXvX5LhIlm3O267D0Op+co3+7Ujy+cjsIuFQrP+
-1MqMgXSeBjzC1APivmps7HeFE+4w0k2PfN5wSMDNCzLo99PZuUG5XZ93OVOS5dpN
-b+WskdcD8NOoJy/X/5A08veEI/jYO/DyqQKBwQDDwUQCOWf41ecvJLtBHKmEnHDz
-ftzHino9DRKG8a9XaN4rmetnoWEaM2vHGX3pf3mwH+dAe8vJdAQueDhBKYeEpm6C
-TYNOpou1+Zs5s99BilCTNYo8fkMOAyqwRwmz9zgHS6QxXuPwsghKefLJGt6o6RFF
-tfWVTfLlYJ+I3GQe3ySsk3wjVz4oUTKiyiq5+KzD+HhEkS7u+RQ7Z0ZI2xd2cF8Y
-aN2hjKDpcOiFf3CDoqka5D1qMNLgIHO52AHww1UCgcA1h7o7AMpURRka6hyaODY0
-A4oMYEbwdQjYjIyT998W+rzkbu1us6UtzQEBZ760npkgyU/epbOoV63lnkCC/MOU
-LD0PST+L/CHiY/cWIHb79YG1EifUZKpUFg0Aoq0EGFkepF0MefGCkbRGYA5UZr9U
-R80wAu9D+L+JJiS0J0BSRF74DL196zUuHt5zFeXuLzxsRtPAnq9DliS08BACRYZy
-7H3I7cWD9Vn5/0jbKWHFcaaWwyETR6uekTcSzZzbCRECgcBeoE3/xUA9SSk34Mmj
-7/cB4522Ft0imA3+9RK/qJTZ7Bd5fC4PKjOGNtUiqW/0L2rjeIiQ40bfWvWqgPKw
-jSK1PL6uvkl6+4cNsFsYyZpiVDoe7wKju2UuoNlB3RUTqa2r2STFuNj2wRjA57I1
-BIgdnox65jqQsd14g/yaa+75/WP9CE45xzKEyrtvdcqxm0Pod3OrsYK+gikFjiar
-kT0GQ8u0QPzh2tjt/2ZnIfOBrl+QYERP0MofDZDjhUdq2wECgcB0Lu841+yP5cdR
-qbJhXO4zJNh7oWNcJlOuQp3ZMNFrA1oHpe9pmLukiROOy01k9WxIMQDzU5GSqRv3
-VLkYOIcbhJ3kClKAcM3j95SkKbU2H5/RENb3Ck52xtl4pNU1x/3PnVFZfDVuuHO9
-MZ9YBcIeK98MyP2jr5JtFKnOyPE7xKq0IHIhXadpbc2wjje5FtZ1cUtMyEECCXNa
-C1TpXebHGyXGpY9WdWXhjdE/1jPvfS+uO5WyuDpYPr339gsdq1g=
------END RSA PRIVATE KEY-----
diff --git a/testdata/remote-threaded.tdir/unbound_control.pem b/testdata/remote-threaded.tdir/unbound_control.pem
deleted file mode 100644
index a1edf7017f1d..000000000000
--- a/testdata/remote-threaded.tdir/unbound_control.pem
+++ /dev/null
@@ -1,22 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDszCCAhsCFGD5193whHQ2bVdzbaQfdf1gc4SkMA0GCSqGSIb3DQEBCwUAMBIx
-EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjMwWhcNNDAwMzI1MTMzMjMw
-WjAaMRgwFgYDVQQDDA91bmJvdW5kLWNvbnRyb2wwggGiMA0GCSqGSIb3DQEBAQUA
-A4IBjwAwggGKAoIBgQCy0Sn4/KHxcau1nvsDgWFiO9t4Hd0xrtDasZbGhvOUD2mv
-OEDVoKEC9S0I4C4z6sHo1M0HxhZ9kltAdrDIw2mYLvtyDq9ctgIZRAdnICqJ03Tj
-1EkXlPuPg3xWeK/XsuJF2vRLqzDLg9G8Scg89XjcRAdmoLmNW8ewqSEh+YEX8OPl
-NdHKl5rBZX+bmN5Tr/gdFgx/K0Fl07WY9e5YuHSWBtDhIJuCs5RUPeueIyTXJkht
-A6a+UMdip6SMNv+85bYrFRAsbThpkwnWZZ91vAbQIpCRKMhIQNnWXvq+EzqZMzR/
-Bdsi/IVn3I88KV7WYXlpKXFLZyYa4ZVJFBrDxcX197dr0AIklOvfcd1KnJpmQpEB
-TMtwqosKXfbd1oq/c3DABPTdOPiJAzjXoBIyiLJ8Vr/YZZMpBWN127wKtqvu0Zp/
-nGuWKDgMGasG91gDeePLvb9EPvWEvCaVGgIZTt1G4Ov07ooBJSbVGL3U41n+p2My
-+i/XmXa+PgZX4pdHTR0CAwEAATANBgkqhkiG9w0BAQsFAAOCAYEAd++Wen6l8Ifj
-4h3p/y16PhSsWJWuJ4wdNYy3/GM84S26wGjzlEEwiW76HpH6VJzPOiBAeWnFKE83
-hFyetEIxgJeIPbcs9ZP/Uoh8GZH9tRISBSN9Hgk2Slr9llo4t1H0g/XTgA5HqMQU
-9YydlBh43G7Vw3FVwh09OM6poNOGQKNc/tq2/QdKeUMtyBbLWpRmjH5XcCT35fbn
-ZiVOUldqSHD4kKrFO4nJYXZyipRbcXybsLiX9GP0GLemc3IgIvOXyJ2RPp06o/SJ
-pzlMlkcAfLJaSuEW57xRakhuNK7m051TKKzJzIEX+NFYOVdafFHS8VwGrYsdrFvD
-72tMfu+Fu55y3awdWWGc6YlaGogZiuMnJkvQphwgn+5qE/7CGEckoKEsH601rqIZ
-muaIc85+nEcHJeijd/ZlBN9zeltjFoMuqTUENgmv8+tUAdVm/UMY9Vjme6b43ydP
-uv6DS02+k9z8toxXworLiPr94BGaiGV1NxgwZKLZigYJt/Fi2Qte
------END CERTIFICATE-----
diff --git a/testdata/remote-threaded.tdir/unbound_server.key b/testdata/remote-threaded.tdir/unbound_server.key
deleted file mode 100644
index 370a7bbb2f22..000000000000
--- a/testdata/remote-threaded.tdir/unbound_server.key
+++ /dev/null
@@ -1,39 +0,0 @@
------BEGIN RSA PRIVATE KEY-----
-MIIG5AIBAAKCAYEAvjSVSN2QMXudpzukdLCqgg/IOhCX8KYkD0FFFfWcQjgKq5wI
-0x41iG32a6wbGanre4IX7VxaSPu9kkHfnGgynCk5nwDRedE/FLFhAU78PoT0+Nqq
-GRS7XVQ24vLmIz9Hqc2Ozx1um1BXBTmIT0UfN2e22I0LWQ6a3seZlEDRj45gnk7Z
-uh9MDgotaBdm+v1JAbupSf6Zis4VEH3JNdvVGE3O1DHEIeuuz/3BDhpf6WBDH+8K
-WaBe1ca4TZHr9ThL2gEMEfAQl0wXDwRWRoi3NjNMH+mw0L1rjwThI5GXqNIee7o5
-FzUReSXZuTdFMyGe3Owcx+XoYnwi6cplSNoGsDBu4B9bKKglR9YleJVw4L4Xi8xP
-q6O9UPj4+nypHk/DOoC7DIM3ufN0yxPBsFo5TVowxfhdjZXJbbftd2TZv7AH8+XL
-A5UoZgRzXgzECelXSCTBFlMTnT48LfA9pMLydyjAz2UdPHs5Iv+TK5nnI+aJoeaP
-7kFZSngxdy1+A/bNAgMBAAECggGBALpTOIqQwVg4CFBylL/a8K1IWJTI/I65sklf
-XxYL7G7SB2HlEJ//z+E+F0+S4Vlao1vyLQ5QkgE82pAUB8FoMWvY1qF0Y8A5wtm6
-iZSGk4OLK488ZbT8Ii9i+AGKgPe2XbVxsJwj8N4k7Zooqec9hz73Up8ATEWJkRz7
-2u7oMGG4z91E0PULA64dOi3l/vOQe5w/Aa+CwVbAWtI05o7kMvQEBMDJn6C7CByo
-MB5op9wueJMnz7PM7hns+U7Dy6oE4ljuolJUy51bDzFWwoM54cRoQqLFNHd8JVQj
-WxldCkbfF43iyprlsEcUrTyUjtdA+ZeiG39vg/mtdmgNpGmdupHJZQvSuG8IcVlz
-O+eMSeQS1QXPD6Ik8UK4SU0h+zOl8xIWtRrsxQuh4fnTN40udm/YUWl/6gOebsBI
-IrVLlKGqJSfB3tMjpCRqdTzJ0dA9keVpkqm2ugZkxEf1+/efq/rFIQ2pUBLCqNTN
-qpNqruK8y8FphP30I2uI4Ej2UIB8AQKBwQDd2Yptj2FyDyaXCycsyde0wYkNyzGU
-dRnzdibfHnMZwjgTjwAwgIUBVIS8H0/z7ZJQKN7osJfddMrtjJtYYUk9g/dCpHXs
-bNh2QSoWah3FdzNGuWd0iRf9+LFxhjAAMo/FS8zFJAJKrFsBdCGTfFUMdsLC0bjr
-YjiWBuvV72uKf8XIZX5KIZruKdWBBcWukcb21R1UDyFYyXRBsly5XHaIYKZql3km
-7pV7MKWO0IYgHbHIqGUqPQlzZ/lkunS1jKECgcEA23wHffD6Ou9/x3okPx2AWpTr
-gh8rgqbyo6hQkBW5Y90Wz824cqaYebZDaBR/xlVx/YwjKkohv8Bde2lpH/ZxRZ1Z
-5Sk2s6GJ/vU0L9RsJZgCgj4L6Coal1NMxuZtCXAlnOpiCdxSZgfqbshbTVz30KsG
-ZJG361Cua1ScdAHxlZBxT52/1Sm0zRC2hnxL7h4qo7Idmtzs40LAJvYOKekR0pPN
-oWeJfra7vgx/jVNvMFWoOoSLpidVO4g+ot4ery6tAoHAdW3rCic1C2zdnmH28Iw+
-s50l8Lk3mz+I5wgJd1zkzCO0DxZIoWPGA3g7cmCYr6N3KRsZMs4W9NAXgjpFGDkW
-zYsG3K21BdpvkdjYcFjnPVjlOXB2RIc0vehf9Jl02wXoeCSxVUDEPcaRvWk9RJYx
-ZpGOchUU7vNkxHURbIJ4yCzuAi9G8/Jp0dsu+kaV5tufF5SjG5WOrzKjaQsCbdN1
-oqaWMCHRrTvov/Z2C+xwsptFOdN5CSyZzg6hQiI4GMlBAoHAXyb6KINcOEi0YMp3
-BFXJ23tMTnEs78tozcKeipigcsbaqORK3omS+NEnj+uzKUzJyl4CsMbKstK2tFYS
-mSTCHqgE3PBtIpsZtEqhgUraR8IK9GPpzZDTTl9ynZgwFTNlWw3RyuyVXF56J+T8
-kCGJ3hEHCHqT/ZRQyX85BKIDFhA0z4tYKxWVqIFiYBNq56R0X9tMMmMs36mEnF93
-7Ht6mowxTZQRa7nU0qOgeKh/P7ki4Zus3y+WJ+T9IqahLtlRAoHBAIhqMrcxSAB8
-RpB9jukJlAnidw2jCMPgrFE8tP0khhVvGrXMldxAUsMKntDIo8dGCnG1KTcWDI0O
-jepvSPHSsxVLFugL79h0eVIS5z4huW48i9xgU8VlHdgAcgEPIAOFcOw2BCu/s0Vp
-O+MM/EyUOdo3NsibB3qc/GJI6iNBYS7AljYEVo6rXo5V/MZvZUF4vClen6Obzsre
-MTTb+4sJjfqleWuvr1XNMeu2mBfXBQkWGZP1byBK0MvD/aQ2PWq92A==
------END RSA PRIVATE KEY-----
diff --git a/testdata/remote-threaded.tdir/unbound_server.pem b/testdata/remote-threaded.tdir/unbound_server.pem
deleted file mode 100644
index 986807310f2b..000000000000
--- a/testdata/remote-threaded.tdir/unbound_server.pem
+++ /dev/null
@@ -1,22 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDqzCCAhMCFBHWXeQ6ZIa9QcQbXLFfC6tj+KA+MA0GCSqGSIb3DQEBCwUAMBIx
-EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjI5WhcNNDAwMzI1MTMzMjI5
-WjASMRAwDgYDVQQDDAd1bmJvdW5kMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIB
-igKCAYEAvjSVSN2QMXudpzukdLCqgg/IOhCX8KYkD0FFFfWcQjgKq5wI0x41iG32
-a6wbGanre4IX7VxaSPu9kkHfnGgynCk5nwDRedE/FLFhAU78PoT0+NqqGRS7XVQ2
-4vLmIz9Hqc2Ozx1um1BXBTmIT0UfN2e22I0LWQ6a3seZlEDRj45gnk7Zuh9MDgot
-aBdm+v1JAbupSf6Zis4VEH3JNdvVGE3O1DHEIeuuz/3BDhpf6WBDH+8KWaBe1ca4
-TZHr9ThL2gEMEfAQl0wXDwRWRoi3NjNMH+mw0L1rjwThI5GXqNIee7o5FzUReSXZ
-uTdFMyGe3Owcx+XoYnwi6cplSNoGsDBu4B9bKKglR9YleJVw4L4Xi8xPq6O9UPj4
-+nypHk/DOoC7DIM3ufN0yxPBsFo5TVowxfhdjZXJbbftd2TZv7AH8+XLA5UoZgRz
-XgzECelXSCTBFlMTnT48LfA9pMLydyjAz2UdPHs5Iv+TK5nnI+aJoeaP7kFZSngx
-dy1+A/bNAgMBAAEwDQYJKoZIhvcNAQELBQADggGBABunf93MKaCUHiZgnoOTinsW
-84/EgInrgtKzAyH+BhnKkJOhhR0kkIAx5d9BpDlaSiRTACFon9moWCgDIIsK/Ar7
-JE0Kln9cV//wiiNoFU0O4mnzyGUIMvlaEX6QHMJJQYvL05+w/3AAcf5XmMJtR5ca
-fJ8FqvGC34b2WxX9lTQoyT52sRt+1KnQikiMEnEyAdKktMG+MwKsFDdOwDXyZhZg
-XZhRrfX3/NVJolqB6EahjWIGXDeKuSSKZVtCyib6LskyeMzN5lcRfvubKDdlqFVF
-qlD7rHBsKhQUWK/IO64mGf7y/de+CgHtED5vDvr/p2uj/9sABATfbrOQR3W/Of25
-sLBj4OEfrJ7lX8hQgFaxkMI3x6VFT3W8dTCp7xnQgb6bgROWB5fNEZ9jk/gjSRmD
-yIU+r0UbKe5kBk/CmZVFXL2TyJ92V5NYEQh8V4DGy19qZ6u/XKYyNJL4ocs35GGe
-CA8SBuyrmdhx38h1RHErR2Skzadi1S7MwGf1y431fQ==
------END CERTIFICATE-----
diff --git a/testdata/root_anchor.tdir/root_anchor.pre b/testdata/root_anchor.tdir/root_anchor.pre
index 0357646cdd5a..0123eaabe1ad 100644
--- a/testdata/root_anchor.tdir/root_anchor.pre
+++ b/testdata/root_anchor.tdir/root_anchor.pre
@@ -3,6 +3,8 @@
# use .tpkg.var.test for in test variable passing
[ -f .tpkg.var.test ] && source .tpkg.var.test
+. ../common.sh
+
# only do this test if the network is up.
if dig @k.root-servers.net . SOA 2>&1 | grep NOERROR ; then
:
diff --git a/testdata/root_hints.tdir/root_hints.pre b/testdata/root_hints.tdir/root_hints.pre
index a756693121ab..fe0096faeb79 100644
--- a/testdata/root_hints.tdir/root_hints.pre
+++ b/testdata/root_hints.tdir/root_hints.pre
@@ -4,6 +4,8 @@
# use .tpkg.var.test for in test variable passing
[ -f .tpkg.var.test ] && source .tpkg.var.test
+. ../common.sh
+
# dig 9 ?
digv=`dig -v 2>&1 | wc -l`
if test $digv -ne 1; then
diff --git a/testdata/rpz_cname_tag.rpl b/testdata/rpz_cname_tag.rpl
new file mode 100644
index 000000000000..fb782b685ac7
--- /dev/null
+++ b/testdata/rpz_cname_tag.rpl
@@ -0,0 +1,281 @@
+; 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
+ access-control: 193.0.0.0/8 allow
+ define-tag: "internal server"
+ access-control-tag: 192.0.0.0/8 "internal"
+ access-control-tag: 127.0.0.0/8 "server"
+ ; 193.0.0.0/8 has no tags
+
+rpz:
+ name: "rpz.example.com."
+ rpz-log: yes
+ rpz-log-name: "rpz.example.com"
+ tags: "internal"
+ 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.
+www.gotham.a A 1.2.3.61
+www.gotham2.a CNAME g2.target.a.
+g2.target.a A 1.2.3.62
+www.gotham3.a CNAME g3.target.a.
+g3.target.a CNAME g3b.target.a.
+g3b.target.a A 1.2.3.63
+www.gotham4.a CNAME g4.target.a.
+g4.target.a CNAME g4b.target.a.
+g4b.target.a CNAME g4c.target.a.
+g4c.target.a A 1.2.3.64
+; server for a.
+32.40.30.20.10.rpz-nsip A 1.2.3.68
+www.gotham5.a TXT "txt5"
+TEMPFILE_END
+
+stub-zone:
+ name: "a."
+ stub-addr: 10.20.30.40
+CONFIG_END
+
+SCENARIO_BEGIN Test RPZ handling of CNAMEs and tags.
+
+; a.
+RANGE_BEGIN 0 1000
+ ADDRESS 10.20.30.40
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+target.a. IN A
+SECTION ANSWER
+target.a. IN A 1.2.3.6
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.gotham.a. IN A
+SECTION ANSWER
+www.gotham.a. IN A 1.2.3.5
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.gotham2.a. IN A
+SECTION ANSWER
+www.gotham2.a. IN A 1.2.3.52
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.gotham3.a. IN A
+SECTION ANSWER
+www.gotham3.a. IN A 1.2.3.53
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.gotham4.a. IN A
+SECTION ANSWER
+www.gotham4.a. IN A 1.2.3.54
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.gotham5.a. IN TXT
+SECTION ANSWER
+www.gotham5.a. IN TXT "gotham5"
+ENTRY_END
+RANGE_END
+
+; Test with zero rpz CNAMEs, no tag match for rpz answer.
+STEP 10 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www.gotham.a. IN A
+ENTRY_END
+
+STEP 11 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+www.gotham.a. IN A
+SECTION ANSWER
+www.gotham.a. A 1.2.3.5
+ENTRY_END
+
+; Test with one rpz CNAME, no tag match for rpz answer.
+STEP 20 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www.gotham2.a. IN A
+ENTRY_END
+
+STEP 21 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+www.gotham2.a. IN A
+SECTION ANSWER
+www.gotham2.a. A 1.2.3.52
+ENTRY_END
+
+; Test with two rpz CNAMEs, no tag match for rpz answer.
+STEP 30 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www.gotham3.a. IN A
+ENTRY_END
+
+STEP 31 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+www.gotham3.a. IN A
+SECTION ANSWER
+www.gotham3.a. A 1.2.3.53
+ENTRY_END
+
+; Test with three rpz CNAMEs, no tag match for rpz answer.
+STEP 40 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www.gotham4.a. IN A
+ENTRY_END
+
+STEP 41 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+www.gotham4.a. IN A
+SECTION ANSWER
+www.gotham4.a. A 1.2.3.54
+ENTRY_END
+
+; Test with zero rpz CNAMEs, rpz answer. Tag "internal"
+STEP 50 QUERY ADDRESS 192.0.0.1
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www.gotham.a. IN A
+ENTRY_END
+
+STEP 51 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA AA NOERROR
+SECTION QUESTION
+www.gotham.a. IN A
+SECTION ANSWER
+www.gotham.a. A 1.2.3.61
+ENTRY_END
+
+; Test with one rpz CNAME, rpz answer. Tag "internal"
+STEP 60 QUERY ADDRESS 192.0.0.1
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www.gotham2.a. IN A
+ENTRY_END
+
+STEP 61 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA AA NOERROR
+SECTION QUESTION
+www.gotham2.a. IN A
+SECTION ANSWER
+www.gotham2.a. CNAME g2.target.a.
+g2.target.a. A 1.2.3.62
+ENTRY_END
+
+; Test with two rpz CNAMEs, rpz answer. Tag "internal"
+STEP 70 QUERY ADDRESS 192.0.0.1
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www.gotham3.a. IN A
+ENTRY_END
+
+STEP 71 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA AA NOERROR
+SECTION QUESTION
+www.gotham3.a. IN A
+SECTION ANSWER
+www.gotham3.a. CNAME g3.target.a.
+g3.target.a. CNAME g3b.target.a.
+g3b.target.a. A 1.2.3.63
+ENTRY_END
+
+; Test with three rpz CNAMEs, rpz answer. Tag "internal"
+STEP 80 QUERY ADDRESS 192.0.0.1
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www.gotham4.a. IN A
+ENTRY_END
+
+STEP 81 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA AA NOERROR
+SECTION QUESTION
+www.gotham4.a. IN A
+SECTION ANSWER
+www.gotham4.a. CNAME g4.target.a.
+g4.target.a. CNAME g4b.target.a.
+g4b.target.a. CNAME g4c.target.a.
+g4c.target.a. A 1.2.3.64
+ENTRY_END
+
+; Test with zero rpz CNAMEs, no tags for the query, and so no rpz answer.
+STEP 90 QUERY ADDRESS 193.0.0.1
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www.gotham5.a. IN TXT
+ENTRY_END
+
+STEP 91 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+www.gotham5.a. IN TXT
+SECTION ANSWER
+www.gotham5.a. IN TXT "gotham5"
+ENTRY_END
+
+SCENARIO_END
diff --git a/testdata/val_dname_twice.rpl b/testdata/val_dname_twice.rpl
new file mode 100644
index 000000000000..bc84bf91c18d
--- /dev/null
+++ b/testdata/val_dname_twice.rpl
@@ -0,0 +1,226 @@
+; config options
+; The island of trust is at example.com
+server:
+ trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b"
+ val-override-date: "20070916134226"
+ target-fetch-policy: "0 0 0 0 0"
+ qname-minimisation: "no"
+ fake-sha1: yes
+ trust-anchor-signaling: no
+
+stub-zone:
+ name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Test validator with a dname used twice
+
+; 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.4
+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.
+example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854}
+ENTRY_END
+
+; response to DNSKEY priming query
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.com. IN DNSKEY
+SECTION ANSWER
+example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b}
+example.com. 3600 IN RRSIG DNSKEY DSA 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFBQRtlR4BEv9ohi+PGFjp+AHsJuHAhRCvz0shggvnvI88DFnBDCczHUcVA== ;{id = 2854}
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854}
+ENTRY_END
+
+; response to query of interest
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+a.a.test-dname-2.example.com. IN A
+SECTION ANSWER
+test-dname-2.example.com. 3600 IN DNAME test-2.example.com.
+test-dname-2.example.com. 3600 IN RRSIG DNAME 3 3 3600 20070926134150 20070829134150 2854 example.com. AB9F05uhCzJ0hFbu/033nWLEMDoDrIY1PL69PsD9kMUuyzT4irnUlGY=
+; unsigned CNAME
+a.a.test-dname-2.example.com. IN CNAME a.a.test-2.example.com.
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+a.a.test-2.example.com. IN A
+SECTION ANSWER
+a.a.test-2.example.com. 3600 IN CNAME a.test-dname-2.example.com.
+a.a.test-2.example.com. 3600 IN RRSIG CNAME 3 5 3600 20070926134150 20070829134150 2854 example.com. AECBiHVJ8qaSV3sC7LcOlSF2W4b9JD+g44fQ2EvkKqGJVUJfa6840i8=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+a.test-dname-2.example.com. IN A
+SECTION ANSWER
+test-dname-2.example.com. 3600 IN DNAME test-2.example.com.
+test-dname-2.example.com. 3600 IN RRSIG DNAME 3 3 3600 20070926134150 20070829134150 2854 example.com. AB9F05uhCzJ0hFbu/033nWLEMDoDrIY1PL69PsD9kMUuyzT4irnUlGY=
+; unsigned CNAME
+a.test-dname-2.example.com. IN CNAME a.test-2.example.com.
+SECTION AUTHORITY
+snow.example.com. 3600 IN NSEC a.a.test-2.example.com. A AAAA RRSIG NSEC
+snow.example.com. 3600 IN RRSIG NSEC 3 3 3600 20070926134150 20070829134150 2854 example.com. AHy/eDMTc5D7Q7Svh/B/r/twvHn8GTzYgSwO1jFasFrb2Gmtk8waXaM=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+a.test-2.example.com. IN A
+SECTION ANSWER
+SECTION AUTHORITY
+example.com. 3600 IN SOA ns.example.com. root.example.com. 1 3600 300 7200 3600
+example.com. 3600 IN RRSIG SOA 3 2 3600 20070926134150 20070829134150 2854 example.com. AEO4JOt/lNSVk3InhQz4MvUXll2vOOuZklfB7HpnW45kvEqHsqfWuNw=
+snow.example.com. 3600 IN NSEC a.a.test-2.example.com. A AAAA RRSIG NSEC
+snow.example.com. 3600 IN RRSIG NSEC 3 3 3600 20070926134150 20070829134150 2854 example.com. AHy/eDMTc5D7Q7Svh/B/r/twvHn8GTzYgSwO1jFasFrb2Gmtk8waXaM=
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+a.a.test-dname-2.example.com. IN A
+ENTRY_END
+
+; recursion happens here.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all ttl
+REPLY QR RD RA AD DO NOERROR
+SECTION QUESTION
+a.a.test-dname-2.example.com. IN A
+SECTION ANSWER
+test-dname-2.example.com. 3600 IN DNAME test-2.example.com.
+test-dname-2.example.com. 3600 IN RRSIG DNAME 3 3 3600 20070926134150 20070829134150 2854 example.com. AB9F05uhCzJ0hFbu/033nWLEMDoDrIY1PL69PsD9kMUuyzT4irnUlGY= ;{id = 2854}
+a.a.test-dname-2.example.com. 3600 IN CNAME a.a.test-2.example.com.
+a.a.test-2.example.com. 3600 IN CNAME a.test-dname-2.example.com.
+a.a.test-2.example.com. 3600 IN RRSIG CNAME 3 5 3600 20070926134150 20070829134150 2854 example.com. AECBiHVJ8qaSV3sC7LcOlSF2W4b9JD+g44fQ2EvkKqGJVUJfa6840i8= ;{id = 2854}
+a.test-dname-2.example.com. 3600 IN CNAME a.test-2.example.com.
+
+SECTION AUTHORITY
+example.com. 3600 IN SOA ns.example.com. root.example.com. 1 3600 300 7200 3600
+example.com. 3600 IN RRSIG SOA 3 2 3600 20070926134150 20070829134150 2854 example.com. AEO4JOt/lNSVk3InhQz4MvUXll2vOOuZklfB7HpnW45kvEqHsqfWuNw= ;{id = 2854}
+snow.example.com. 3600 IN NSEC a.a.test-2.example.com. A AAAA RRSIG NSEC
+snow.example.com. 3600 IN RRSIG NSEC 3 3 3600 20070926134150 20070829134150 2854 example.com. AHy/eDMTc5D7Q7Svh/B/r/twvHn8GTzYgSwO1jFasFrb2Gmtk8waXaM= ;{id = 2854}
+ENTRY_END
+
+; Check cache response for DNAME
+; so 100+ the authority will not respond any more : must be from cache.
+STEP 110 TIME_PASSES ELAPSE 10
+
+STEP 120 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+a.a.test-dname-2.example.com. IN A
+ENTRY_END
+
+STEP 130 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all ttl
+REPLY QR RD RA AD DO NOERROR
+SECTION QUESTION
+a.a.test-dname-2.example.com. IN A
+SECTION ANSWER
+test-dname-2.example.com. 3590 IN DNAME test-2.example.com.
+test-dname-2.example.com. 3590 IN RRSIG DNAME 3 3 3600 20070926134150 20070829134150 2854 example.com. AB9F05uhCzJ0hFbu/033nWLEMDoDrIY1PL69PsD9kMUuyzT4irnUlGY= ;{id = 2854}
+a.a.test-dname-2.example.com. 3590 IN CNAME a.a.test-2.example.com.
+a.a.test-2.example.com. 3590 IN CNAME a.test-dname-2.example.com.
+a.a.test-2.example.com. 3590 IN RRSIG CNAME 3 5 3600 20070926134150 20070829134150 2854 example.com. AECBiHVJ8qaSV3sC7LcOlSF2W4b9JD+g44fQ2EvkKqGJVUJfa6840i8= ;{id = 2854}
+a.test-dname-2.example.com. 3590 IN CNAME a.test-2.example.com.
+
+SECTION AUTHORITY
+example.com. 3590 IN SOA ns.example.com. root.example.com. 1 3600 300 7200 3600
+example.com. 3590 IN RRSIG SOA 3 2 3600 20070926134150 20070829134150 2854 example.com. AEO4JOt/lNSVk3InhQz4MvUXll2vOOuZklfB7HpnW45kvEqHsqfWuNw= ;{id = 2854}
+snow.example.com. 3590 IN NSEC a.a.test-2.example.com. A AAAA RRSIG NSEC
+snow.example.com. 3590 IN RRSIG NSEC 3 3 3600 20070926134150 20070829134150 2854 example.com. AHy/eDMTc5D7Q7Svh/B/r/twvHn8GTzYgSwO1jFasFrb2Gmtk8waXaM= ;{id = 2854}
+ENTRY_END
+
+SCENARIO_END
diff --git a/testdata/val_failure_dnskey.rpl b/testdata/val_failure_dnskey.rpl
new file mode 100644
index 000000000000..3f25f15b2062
--- /dev/null
+++ b/testdata/val_failure_dnskey.rpl
@@ -0,0 +1,348 @@
+; config options
+; The island of trust is at example.com
+server:
+ trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b"
+ trust-anchor: "example.net. 3600 IN DS 1444 8 2 69887be92d4848c0bc10acc95682a01e7e3b57ab0750a2ee6f72cac7191a64f1"
+ val-override-date: "20070916134226"
+ target-fetch-policy: "0 0 0 0 0"
+ qname-minimisation: "no"
+ fake-sha1: yes
+ trust-anchor-signaling: no
+ minimal-responses: no
+ log-servfail: yes
+ val-log-level: 2
+ ede: yes
+
+stub-zone:
+ name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Test validator with failure for chaing of trust lookup.
+; The error message that is created, also for EDE is more extensive.
+
+; 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
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+net. IN NS
+SECTION AUTHORITY
+net. 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.4
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+example.net. IN NS
+SECTION AUTHORITY
+example.net. IN NS ns.example.net.
+SECTION ADDITIONAL
+ns.example.net. IN A 1.2.3.5
+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.
+example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854}
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.example.com. IN A
+SECTION ANSWER
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854}
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.example.com. IN AAAA
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854}
+ENTRY_END
+
+; response to DNSKEY priming query
+;ENTRY_BEGIN
+;MATCH opcode qtype qname
+;ADJUST copy_id
+;REPLY QR NOERROR
+;SECTION QUESTION
+;example.com. IN DNSKEY
+;SECTION ANSWER
+;example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b}
+;example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854}
+;SECTION AUTHORITY
+;example.com. IN NS ns.example.com.
+;example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854}
+;SECTION ADDITIONAL
+;ns.example.com. IN A 1.2.3.4
+;ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854}
+;ENTRY_END
+; servfail for DNSKEY priming query
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA SERVFAIL
+SECTION QUESTION
+example.com. IN DNSKEY
+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. IN A 10.20.30.40
+ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCQMyTjn7WWwpwAR1LlVeLpRgZGuQIUCcJDEkwAuzytTDRlYK7nIMwH1CM= ;{id = 2854}
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+www.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFC99iE9K5y2WNgI0gFvBWaTi9wm6AhUAoUqOpDtG5Zct+Qr9F3mSdnbc6V4= ;{id = 2854}
+ENTRY_END
+RANGE_END
+
+; ns.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.5
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+example.net. IN NS
+SECTION ANSWER
+example.net. 3600 IN NS ns.example.net.
+example.net. 3600 IN RRSIG NS 8 2 3600 20070926134150 20070829134150 1444 example.net. nHpOqZb00nIGytQ1YmVoXEHURL/75dWhlKSEtRTorjVdPGPZNN7ziCWJW303v7u07TkZ+i6oFVEWG/SDR4ejn5o31UKJy1373PEH/cvPf9/44jw9gAFaHF1eO6ZQGaRQaeEpU06+xUcnc2QXFt6rNu60EsTvMRDN83bD+r7FA7Y=
+SECTION ADDITIONAL
+ns.example.net. 3600 IN A 1.2.3.5
+ns.example.net. 3600 IN RRSIG A 8 3 3600 20070926134150 20070829134150 1444 example.net. TgQ4nfGtLHuZXlC4JJlVQ6mejf1WJbstTxsh/kgMAc2tryOxF/gvGBHaMtz6oceFZrIgk6g3RYI1Gk5gjSFNADh+EIwI422M8XPAAxRLfFahiO4lr1aCo4c94TYeZNpnDKy81rINTz2hQE1pGWr8Z03ySABqSBnTE1FQt4N/JCo=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.example.net. IN A
+SECTION ANSWER
+ns.example.net. 3600 IN A 1.2.3.5
+ns.example.net. 3600 IN RRSIG A 8 3 3600 20070926134150 20070829134150 1444 example.net. TgQ4nfGtLHuZXlC4JJlVQ6mejf1WJbstTxsh/kgMAc2tryOxF/gvGBHaMtz6oceFZrIgk6g3RYI1Gk5gjSFNADh+EIwI422M8XPAAxRLfFahiO4lr1aCo4c94TYeZNpnDKy81rINTz2hQE1pGWr8Z03ySABqSBnTE1FQt4N/JCo=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.example.net. IN AAAA
+SECTION AUTHORITY
+example.net. 3600 IN SOA ns.example.net. host.example.net. 1 3600 300 7200 3600
+example.net. 3600 IN RRSIG SOA 8 2 3600 20070926134150 20070829134150 1444 example.net. P5FRQ4A/0n5owaBhZqlYBFD2PNAWJc5oxiDwvwh0hdjxETx8ta3EAvDKtNj5XZ5EKDAhP/tivd+Bq50I0xfRBmrouxgxjgnV3ye8zU+M1fXbuKpsWme9R3S4cs9WYfggTn7X00Af8m0tE62SLH/ZtOOQi2CvOPu7PXtHYT6KW4Q=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+example.net. IN DNSKEY
+SECTION ANSWER
+example.net. 3600 IN DNSKEY 257 3 8 AwEAAbd9WqjzE2Pynz21OG5doSf9hFzMr5dhzz2waZ3vTa+0o5r7AjTAqmA1yH/B3+aAMihUm5ucZSfVqo7+kOaRE8yFj9aivOmA1n1+JLevJq/oyvQyjxQN2Qb89LyaNUT5oKZIiL+uyyhNW3KDR3SSbQ/GBwQNDHVcZi+JDR3RC0r7 ;{id = 1444 (ksk), size = 1024b}
+example.net. 3600 IN RRSIG DNSKEY 8 2 3600 20070926134150 20070829134150 1444 example.net. hAAlJt/YwAgWBzseK0N42+ysSMaWgntcuftF8a43chLh+fbe3vPWrgwqr/Cic52tu4ZqMox592tqWDxAG7F1eDGfO0SfzS2C9Tc/Wnz5nFjFh75G4Mtt8DTv5vTyGUVX5zAFzV8SNijVC0o1F7MHaVPt3rFtjjg2zW/UOz2m9+U=
+ENTRY_END
+
+; For sub1.example.net. zone; it is co-hosted with example.net, so that
+; there can be failures for the DS lookup. But the data lookup succeeds.
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+www.sub1.example.net. IN A
+SECTION ANSWER
+www.sub1.example.net. IN A 10.20.30.41
+www.sub1.example.net. 3600 IN RRSIG A 8 4 3600 20070926134150 20070829134150 29332 sub1.example.net. NcFP77Hixawt8hb+STIbbeqdF9tWTuHsbGEB4agKXlwHqS0BnyA+It6+UdE57IF0Kbnc7gSuaslX9At8ctd4HuC/9F/osbo96o23JEfnXPky/r5SsLaeN5KmUmUVjG9oxyAEc6PVlaaQ5a/RhaxmDRaDiku2gB7KjdjPxwxe+Rc54GV2eM3GtcfT+oDakLdSSACqeVjUFIOtYMpG8jAHrBe4uSnjKI7O0fWDFN5OES6sN9iUS9/ceorIoF/gSIqM7xWEuPLxE2c5TtYJyPtMCeGJ9wBP4wrTXfJ58+Lg5SFKgEuKTvAqEv9KEwg/kJb1GQ+ho5XKFO6EII2iyeUK/w==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR SERVFAIL
+SECTION QUESTION
+sub1.example.net. IN DS
+SECTION ANSWER
+; no DS for sub1.example.net id=29332 algo=8
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+www.sub2.example.net. IN A
+SECTION ANSWER
+www.sub2.example.net. IN A 10.20.30.42
+www.sub2.example.net. 3600 IN RRSIG A 8 4 3600 20070926134150 20070829134150 29332 sub2.example.net. FOY6YxNoFyrSkBtWV7HcECmORTMedRWHdGk7Rm04icT8Bw0dWfzVaIpAkBY6FXx8UvqN7McN4IJI5dAVXptfekO+Yvy2PwkjehRUXvQK64XH5UM5pVbX5g8E4pnOrLa/jzPB7srzMpyWVCpt81lPoFpdfXUMm7434ifkTYhpAll7y5NAocFiT3F+XGe06qMIr51WxoFfegIGohMFhkTDUdLWrdV10128W+NzPdwoYtiigtCObKxTtyj3gK+mxqXvX4X4F2YIGQ+mx62ovdUilnLYZm/WC/ZQkdxeOZjeCTxvSpGGG+wtu1QufgIJ+BpAZAOxREOYZkhR29AG0np4EA==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR SERVFAIL
+SECTION QUESTION
+sub2.example.net. IN DNSKEY
+SECTION ANSWER
+; sub2.example.net. IN DNSKEY 257 3 8 AwEAAb4WMOTBLTFvmBra5m6SK4VfViOzmvyUAU0qv861ZQXeEFvwlndqNU9rwRsMxrSWAYs5nHErKDn49usC/HyxxW1477iGFHhfgL4mjNreJm9zft2QFB1VLbRbEPYdDMLCn4co0qnG7/KG8W2i8Pym1L7f+aREwbLo+/716AS2PbaKMhfWLKLiq5wnBcUClQMNzCiwhqxDJp1oePqfkVdeUgXOtgi0dYRIKyQFhJ5VWJ22npoi/Gif0XLCADAlAwRLKc8o/yJkCxskzgpHpw5Cki1lclg0aq4ssOuPRQ+ne6IHYCz9D2mwzulblhLFamKdq7aHzNt4NlyxhpANVFiKLD8= ;{id = 29332 (ksk), size = 2048b}
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+sub2.example.net. IN DS
+SECTION ANSWER
+sub2.example.net. 3600 IN DS 29332 8 2 d53e615d9d736b0f2a0097f1d5fa51c84320610f94ecbd7197e7de5f44f02d72
+sub2.example.net. 3600 IN RRSIG DS 8 3 3600 20070926134150 20070829134150 1444 example.net. dYLYs1uMxJm5+MB6L1+uStE5S1YtyYR0JF+1pPoTptc/H1hYqMxK7pVQPtIGvq8j8wNyC7jOzALfEXgwRKiSdR1l1GQ5HIxWkhUmkpLcecwJOjemee4nXaifOFa5bdbdYpuDwTiIzx+PvanlaVjEPy0i1IukanDi6jojfyWcgLA=
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+www.example.com. IN A
+ENTRY_END
+
+; The DNSKEY lookup for the key prime is a failure.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all ede=9
+REPLY QR RD RA DO SERVFAIL
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+ENTRY_END
+
+STEP 20 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+www.sub1.example.net. IN A
+ENTRY_END
+
+; The DS lookup is a failure.
+STEP 30 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all ede=23
+REPLY QR RD RA DO SERVFAIL
+SECTION QUESTION
+www.sub1.example.net. IN A
+SECTION ANSWER
+ENTRY_END
+
+STEP 40 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+www.sub2.example.net. IN A
+ENTRY_END
+
+; The DNSKEY lookup is a failure.
+STEP 50 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all ede=9
+REPLY QR RD RA DO SERVFAIL
+SECTION QUESTION
+www.sub2.example.net. IN A
+SECTION ANSWER
+ENTRY_END
+
+SCENARIO_END
diff --git a/util/alloc.c b/util/alloc.c
index 7e9618931ca6..a6c91180356e 100644
--- a/util/alloc.c
+++ b/util/alloc.c
@@ -466,6 +466,18 @@ void *unbound_stat_realloc(void *ptr, size_t size)
memcpy(res+8, &mem_special, sizeof(mem_special));
return res+16;
}
+/** strdup with stats */
+char *unbound_stat_strdup(const char* s)
+{
+ size_t len;
+ char* res;
+ if(!s) return NULL;
+ len = strlen(s);
+ res = unbound_stat_malloc(len+1);
+ if(!res) return NULL;
+ memmove(res, s, len+1);
+ return res;
+}
/** log to file where alloc was done */
void *unbound_stat_malloc_log(size_t size, const char* file, int line,
@@ -507,6 +519,15 @@ void *unbound_stat_realloc_log(void *ptr, size_t size, const char* file,
return unbound_stat_realloc(ptr, size);
}
+/** log to file where strdup was done */
+char *unbound_stat_strdup_log(const char *s, const char* file, int line,
+ const char* func)
+{
+ log_info("%s:%d %s strdup size %u", file, line, func,
+ (s?(unsigned)strlen(s)+1:0));
+ return unbound_stat_strdup(s);
+}
+
#endif /* UNBOUND_ALLOC_STATS */
#ifdef UNBOUND_ALLOC_LITE
#undef malloc
diff --git a/util/config_file.c b/util/config_file.c
index 2b67d4c19683..9a93befd3061 100644
--- a/util/config_file.c
+++ b/util/config_file.c
@@ -42,6 +42,7 @@
#include "config.h"
#include <ctype.h>
#include <stdarg.h>
+#include <errno.h>
#ifdef HAVE_TIME_H
#include <time.h>
#endif
@@ -386,6 +387,7 @@ config_create(void)
memset(cfg->cookie_secret, 0, sizeof(cfg->cookie_secret));
cfg->cookie_secret_len = 16;
init_cookie_secret(cfg->cookie_secret, cfg->cookie_secret_len);
+ cfg->cookie_secret_file = NULL;
#ifdef USE_CACHEDB
if(!(cfg->cachedb_backend = strdup("testframe"))) goto error_exit;
if(!(cfg->cachedb_secret = strdup("default"))) goto error_exit;
@@ -769,6 +771,7 @@ int config_set_option(struct config_file* cfg, const char* opt,
else S_YNO("dnstap-send-version:", dnstap_send_version)
else S_STR("dnstap-identity:", dnstap_identity)
else S_STR("dnstap-version:", dnstap_version)
+ else S_NUMBER_OR_ZERO("dnstap-sample-rate:", dnstap_sample_rate)
else S_YNO("dnstap-log-resolver-query-messages:",
dnstap_log_resolver_query_messages)
else S_YNO("dnstap-log-resolver-response-messages:",
@@ -837,6 +840,8 @@ int config_set_option(struct config_file* cfg, const char* opt,
{ IS_NUMBER_OR_ZERO; cfg->ipsecmod_max_ttl = atoi(val); }
else S_YNO("ipsecmod-strict:", ipsecmod_strict)
#endif
+ else S_YNO("answer-cookie:", do_answer_cookie)
+ else S_STR("cookie-secret-file:", cookie_secret_file)
#ifdef USE_CACHEDB
else S_YNO("cachedb-no-store:", cachedb_no_store)
else S_YNO("cachedb-check-when-serve-expired:", cachedb_check_when_serve_expired)
@@ -1248,6 +1253,7 @@ config_get_option(struct config_file* cfg, const char* opt,
else O_YNO(opt, "dnstap-send-version", dnstap_send_version)
else O_STR(opt, "dnstap-identity", dnstap_identity)
else O_STR(opt, "dnstap-version", dnstap_version)
+ else O_UNS(opt, "dnstap-sample-rate", dnstap_sample_rate)
else O_YNO(opt, "dnstap-log-resolver-query-messages",
dnstap_log_resolver_query_messages)
else O_YNO(opt, "dnstap-log-resolver-response-messages",
@@ -1333,6 +1339,8 @@ config_get_option(struct config_file* cfg, const char* opt,
else O_LST(opt, "ipsecmod-whitelist", ipsecmod_whitelist)
else O_YNO(opt, "ipsecmod-strict", ipsecmod_strict)
#endif
+ else O_YNO(opt, "answer-cookie", do_answer_cookie)
+ else O_STR(opt, "cookie-secret-file", cookie_secret_file)
#ifdef USE_CACHEDB
else O_STR(opt, "backend", cachedb_backend)
else O_STR(opt, "secret-seed", cachedb_secret)
@@ -1718,6 +1726,7 @@ config_delete(struct config_file* cfg)
free(cfg->ipsecmod_hook);
config_delstrlist(cfg->ipsecmod_whitelist);
#endif
+ free(cfg->cookie_secret_file);
#ifdef USE_CACHEDB
free(cfg->cachedb_backend);
free(cfg->cachedb_secret);
@@ -1772,6 +1781,39 @@ init_outgoing_availports(int* a, int num)
}
}
+static int
+extract_port_from_str(const char* str, int max_port) {
+ char* endptr;
+ long int value;
+ if (str == NULL || *str == '\0') {
+ log_err("str: '%s' is invalid", (str?str:"NULL"));
+ return -1;
+ }
+
+ value = strtol(str, &endptr, 10);
+ if ((endptr == str) || (*endptr != '\0')) {
+ log_err("cannot parse port number '%s'", str);
+ return -1;
+ }
+
+ if (errno == ERANGE) {
+ log_err("overflow occurred when parsing '%s'", str);
+ return -1;
+ }
+
+ if (value == 0 && strcmp(str, "0") != 0) {
+ log_err("cannot parse port number '%s'", str);
+ return -1;
+ }
+
+ if (value < 0 || value >= max_port) {
+ log_err(" '%s' is out of bounds [0, %d)", str, max_port);
+ return -1;
+ }
+
+ return (int)value;
+}
+
int
cfg_mark_ports(const char* str, int allow, int* avail, int num)
{
@@ -1782,53 +1824,45 @@ cfg_mark_ports(const char* str, int allow, int* avail, int num)
"options");
#endif
if(!mid) {
- int port = atoi(str);
- if(port < 0) {
- log_err("port number is negative: %d", port);
- return 0;
- }
- if(port == 0 && strcmp(str, "0") != 0) {
- log_err("cannot parse port number '%s'", str);
+ int port = extract_port_from_str(str, num);
+ if (port < 0) {
+ log_err("Failed to parse the port number");
return 0;
}
if(port < num)
avail[port] = (allow?port:0);
} else {
- int i, low, high = atoi(mid+1);
char buf[16];
- if(high < 0) {
- log_err("port number is negative: %d", high);
- return 0;
- }
- if(high == 0 && strcmp(mid+1, "0") != 0) {
- log_err("cannot parse port number '%s'", mid+1);
+ int i, low;
+ int high = extract_port_from_str(mid+1, num);
+ if (high < 0) {
+ log_err("Failed to parse the port number");
return 0;
}
+
if( (int)(mid-str)+1 >= (int)sizeof(buf) ) {
log_err("cannot parse port number '%s'", str);
return 0;
}
+
if(mid > str)
memcpy(buf, str, (size_t)(mid-str));
buf[mid-str] = 0;
- low = atoi(buf);
- if(low < 0) {
- log_err("port number is negative: %d", low);
+ low = extract_port_from_str(buf, num);
+ if (low < 0) {
+ log_err("Failed to parse the port number");
return 0;
}
- if(low == 0 && strcmp(buf, "0") != 0) {
- log_err("cannot parse port number '%s'", buf);
+
+ if (low > high) {
+ log_err("Low value is greater than high value");
return 0;
}
- if(high > num) {
- /* Stop very high values from taking a long time. */
- high = num;
- }
+
for(i=low; i<=high; i++) {
if(i < num)
avail[i] = (allow?i:0);
}
- return 1;
}
return 1;
}
diff --git a/util/config_file.h b/util/config_file.h
index d3a2e268c49f..23aacc67aa77 100644
--- a/util/config_file.h
+++ b/util/config_file.h
@@ -592,6 +592,8 @@ struct config_file {
char* dnstap_identity;
/** dnstap "version", package version is used if "". */
char* dnstap_version;
+ /** dnstap sample rate */
+ int dnstap_sample_rate;
/** true to log dnstap RESOLVER_QUERY message events */
int dnstap_log_resolver_query_messages;
@@ -748,6 +750,8 @@ struct config_file {
uint8_t cookie_secret[40];
/** cookie secret length */
size_t cookie_secret_len;
+ /** path to cookie secret store */
+ char* cookie_secret_file;
/* ipset module */
#ifdef USE_IPSET
diff --git a/util/configlexer.c b/util/configlexer.c
index 578a5793be35..69a20c1ac1a0 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 392
-#define YY_END_OF_BUFFER 393
+#define YY_NUM_RULES 394
+#define YY_END_OF_BUFFER 395
/* This struct is not used in this scanner,
but its presence is necessary. */
struct yy_trans_info
@@ -363,438 +363,439 @@ struct yy_trans_info
flex_int32_t yy_verify;
flex_int32_t yy_nxt;
};
-static const flex_int16_t yy_accept[3905] =
+static const flex_int16_t yy_accept[3921] =
{ 0,
- 1, 1, 366, 366, 370, 370, 374, 374, 378, 378,
- 1, 1, 382, 382, 386, 386, 393, 390, 1, 364,
- 364, 391, 2, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 391, 366, 367, 367,
- 368, 391, 370, 371, 371, 372, 391, 377, 374, 375,
- 375, 376, 391, 378, 379, 379, 380, 391, 389, 365,
- 2, 369, 389, 391, 385, 382, 383, 383, 384, 391,
- 386, 387, 387, 388, 391, 390, 0, 1, 2, 2,
- 2, 2, 390, 390, 390, 390, 390, 390, 390, 390,
-
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 366, 0, 370, 0, 377, 0, 374, 378,
- 0, 389, 0, 2, 2, 389, 385, 0, 382, 386,
- 0, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
-
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 389, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
-
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 362, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 137, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 147, 390,
-
- 390, 390, 390, 390, 390, 390, 390, 389, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 119, 390, 390, 361, 390,
-
- 390, 390, 390, 390, 390, 390, 390, 8, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 138, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 152, 390, 390, 390, 389, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
-
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 352, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
-
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 389, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 71, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
-
- 390, 390, 390, 390, 273, 390, 14, 15, 390, 390,
- 20, 19, 390, 390, 247, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 145, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
-
- 245, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 3, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 389, 390, 390, 390, 390,
- 390, 390, 390, 390, 341, 390, 390, 390, 340, 390,
-
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 373, 390, 390, 390, 390, 390, 390,
- 390, 390, 70, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 74, 390, 310, 390, 390, 390, 390, 390, 390, 390,
-
- 390, 390, 390, 390, 353, 354, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 75, 390, 390, 146, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 141, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 234, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 22, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
-
- 390, 390, 390, 173, 390, 390, 390, 390, 390, 390,
- 389, 373, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 117, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 318, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 16, 390,
- 390, 390, 390, 390, 390, 390, 390, 201, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
-
- 172, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 116, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 37, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
-
- 390, 390, 390, 390, 390, 390, 390, 38, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 72, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 144, 390, 390, 390,
- 389, 390, 390, 390, 390, 390, 390, 136, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 73, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 277, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 202, 390, 390, 390,
-
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 60, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 296, 390,
-
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 65, 390, 66, 390, 390, 390, 390, 390, 390, 120,
- 390, 121, 390, 390, 390, 390, 390, 118, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 7, 390, 390, 390, 390, 390, 389, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
-
- 390, 262, 390, 390, 390, 390, 390, 390, 176, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 278, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 51, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 61,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 225, 390, 224, 390, 390, 390,
-
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 17, 18, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 76, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 233, 390, 390, 390, 390, 390, 390, 390,
- 123, 390, 122, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 215,
-
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 153,
- 390, 253, 390, 390, 390, 389, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 111, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 98, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 246,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 103, 390, 390, 390, 390, 390, 390, 390, 390, 390,
-
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 69, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 218, 219,
- 390, 390, 390, 312, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 6, 390, 390, 390, 390, 390, 390, 390, 331, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 316,
- 390, 390, 390, 390, 390, 390, 390, 342, 390, 390,
-
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 48, 390, 390, 390, 390, 390, 50,
- 390, 390, 390, 99, 390, 390, 390, 390, 390, 58,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 389, 390, 211, 390, 390, 390, 148,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 238, 390, 390, 212, 390, 390,
- 390, 390, 390, 258, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
-
- 390, 390, 390, 390, 59, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 150, 129, 390, 130,
- 390, 390, 390, 390, 128, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 169, 390, 390, 56, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 294,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 213,
- 390, 390, 390, 390, 390, 223, 216, 390, 222, 390,
- 390, 390, 390, 390, 390, 390, 390, 257, 390, 390,
- 390, 390, 390, 390, 261, 390, 390, 390, 390, 390,
-
- 390, 390, 390, 390, 390, 390, 115, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 142, 390,
- 390, 390, 390, 390, 390, 390, 390, 67, 390, 390,
- 390, 390, 31, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 21, 390, 390, 390, 390,
- 390, 390, 390, 32, 41, 390, 181, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 209, 390, 390, 389, 390, 390, 390,
- 390, 357, 390, 390, 84, 390, 87, 390, 390, 390,
-
- 390, 390, 390, 390, 390, 390, 358, 390, 390, 390,
- 390, 390, 390, 390, 390, 320, 390, 390, 390, 390,
- 274, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 131, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 168, 390, 52,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 268, 390, 390, 390, 390, 390, 390, 390, 390, 335,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
-
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 175, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 329, 390, 390, 390, 390,
- 244, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 349, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 194, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 124, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 188, 390, 203, 390, 390, 390, 390, 390, 390,
-
- 390, 390, 390, 389, 390, 156, 390, 390, 390, 390,
- 390, 390, 390, 390, 110, 390, 390, 390, 390, 236,
- 390, 390, 390, 390, 390, 390, 390, 390, 259, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 286, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 149, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 192, 390, 390, 390,
- 390, 390, 390, 390, 88, 390, 89, 390, 390, 390,
- 390, 390, 271, 390, 390, 390, 390, 390, 68, 338,
-
- 390, 390, 390, 390, 390, 97, 204, 390, 226, 390,
- 263, 390, 390, 217, 313, 390, 390, 390, 390, 308,
- 390, 390, 390, 80, 390, 206, 390, 390, 390, 390,
- 390, 390, 9, 390, 390, 390, 390, 390, 114, 390,
- 390, 390, 390, 390, 390, 300, 390, 390, 390, 390,
- 390, 390, 235, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
-
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 389, 390, 390, 390, 390, 191, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 193, 252, 177, 390, 319, 390, 390, 390, 390, 390,
- 285, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 248, 390, 390, 390, 390, 390, 390, 311,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 174, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
-
- 339, 390, 205, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 79, 81, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 113, 390, 390, 390, 390, 390,
- 390, 298, 390, 390, 390, 390, 390, 390, 390, 315,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 240, 390, 39, 33, 35, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 40, 390, 34, 36, 390, 42, 390, 390, 390,
- 390, 390, 390, 390, 109, 390, 187, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 389, 390, 390, 390,
-
- 390, 390, 390, 390, 390, 343, 390, 390, 390, 390,
- 390, 242, 239, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 78, 390, 390, 390, 151, 390, 132, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 170, 53, 390, 390, 390, 381, 13, 390, 390, 390,
- 390, 390, 390, 390, 157, 390, 390, 390, 390, 390,
- 390, 390, 390, 333, 390, 336, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 12,
- 390, 390, 23, 390, 390, 390, 390, 390, 390, 390,
-
- 304, 390, 390, 351, 390, 390, 390, 390, 317, 390,
- 390, 390, 390, 82, 390, 250, 390, 390, 390, 390,
- 390, 241, 390, 390, 390, 390, 77, 390, 390, 390,
- 390, 390, 390, 24, 390, 390, 49, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 186,
- 185, 390, 390, 390, 390, 381, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 243, 237, 390,
- 260, 390, 390, 321, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 199, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
-
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 90, 390, 390, 390, 390, 390, 390, 390, 390,
- 299, 390, 390, 390, 390, 221, 390, 390, 390, 390,
- 390, 390, 249, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 306, 390, 390, 390, 345, 390, 347,
- 346, 183, 390, 390, 390, 83, 390, 390, 390, 390,
- 195, 390, 390, 390, 390, 390, 125, 127, 126, 390,
- 390, 390, 26, 390, 390, 178, 390, 180, 390, 227,
- 390, 390, 390, 390, 184, 390, 390, 254, 390, 390,
- 390, 390, 264, 390, 390, 390, 390, 390, 390, 390,
-
- 390, 390, 159, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 276, 390, 390, 390, 390,
- 390, 390, 390, 359, 390, 28, 390, 314, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 95, 228, 390, 390,
- 270, 390, 390, 390, 297, 390, 337, 390, 220, 390,
- 390, 309, 390, 390, 390, 307, 62, 390, 390, 390,
- 390, 390, 390, 390, 4, 390, 390, 390, 390, 390,
- 140, 390, 158, 390, 390, 390, 200, 30, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
-
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 267,
- 43, 44, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 322, 390, 390, 390, 390, 390, 390, 390, 284,
- 390, 390, 390, 390, 390, 390, 390, 390, 231, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 94, 93, 390, 390, 63, 390,
- 390, 295, 303, 390, 272, 390, 390, 390, 390, 390,
- 11, 390, 390, 390, 390, 363, 390, 390, 390, 390,
- 390, 139, 390, 390, 390, 390, 390, 390, 229, 100,
- 390, 390, 46, 390, 390, 390, 390, 390, 390, 390,
-
- 390, 190, 390, 255, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 161, 390, 390, 390, 390, 275, 390,
- 390, 390, 390, 390, 283, 390, 390, 390, 390, 154,
- 390, 390, 390, 133, 135, 134, 390, 390, 390, 102,
- 106, 101, 390, 171, 390, 390, 390, 390, 91, 390,
- 269, 305, 390, 390, 390, 390, 390, 390, 10, 390,
- 390, 390, 390, 390, 301, 350, 390, 390, 390, 390,
- 390, 390, 390, 390, 356, 45, 390, 390, 390, 390,
- 390, 189, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
-
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 107, 105, 390, 390, 57, 390, 390, 92, 390, 334,
- 390, 390, 390, 390, 25, 390, 390, 390, 390, 390,
- 214, 390, 390, 348, 390, 390, 390, 390, 230, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 210,
- 390, 390, 179, 85, 86, 390, 390, 390, 390, 390,
- 390, 323, 390, 390, 390, 390, 390, 390, 390, 280,
- 390, 390, 279, 155, 390, 390, 104, 390, 54, 390,
- 390, 162, 163, 166, 167, 164, 165, 96, 332, 390,
- 390, 302, 143, 390, 390, 390, 390, 27, 390, 182,
-
- 390, 390, 390, 390, 390, 208, 390, 266, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 197, 196, 232, 47, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 330, 390, 390, 390, 390, 112, 390, 390, 265,
- 390, 390, 293, 327, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 360, 390, 108, 55, 64,
- 5, 390, 390, 251, 390, 390, 390, 390, 328, 390,
-
- 390, 390, 390, 390, 390, 390, 390, 390, 281, 29,
- 390, 390, 390, 256, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 282, 390, 390, 390, 390, 160,
- 390, 390, 390, 390, 390, 390, 390, 390, 198, 390,
- 207, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 324, 390, 390, 390, 390, 390, 390, 390,
- 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
- 390, 355, 344, 390, 390, 289, 390, 390, 390, 390,
- 390, 325, 390, 390, 390, 390, 390, 390, 326, 390,
- 390, 390, 287, 390, 290, 291, 390, 390, 390, 390,
-
- 390, 288, 292, 0
+ 1, 1, 368, 368, 372, 372, 376, 376, 380, 380,
+ 1, 1, 384, 384, 388, 388, 395, 392, 1, 366,
+ 366, 393, 2, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 393, 368, 369, 369,
+ 370, 393, 372, 373, 373, 374, 393, 379, 376, 377,
+ 377, 378, 393, 380, 381, 381, 382, 393, 391, 367,
+ 2, 371, 391, 393, 387, 384, 385, 385, 386, 393,
+ 388, 389, 389, 390, 393, 392, 0, 1, 2, 2,
+ 2, 2, 392, 392, 392, 392, 392, 392, 392, 392,
+
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 368, 0, 372, 0, 379, 0, 376, 380,
+ 0, 391, 0, 2, 2, 391, 387, 0, 384, 388,
+ 0, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 391, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 364, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 137, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 147, 392,
+
+ 392, 392, 392, 392, 392, 392, 392, 391, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 119, 392, 392, 363, 392,
+
+ 392, 392, 392, 392, 392, 392, 392, 8, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 138, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 152, 392, 392, 392, 391, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 353, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 391, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 71, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+
+ 392, 392, 392, 392, 273, 392, 14, 15, 392, 392,
+ 20, 19, 392, 392, 247, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 145, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+
+ 245, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 3, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 391, 392, 392, 392, 392,
+ 392, 392, 392, 392, 342, 392, 392, 392, 341, 392,
+
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 375, 392, 392, 392, 392, 392, 392,
+ 392, 392, 70, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 74, 392, 311, 392, 392, 392, 392, 392, 392, 392,
+
+ 392, 392, 392, 392, 354, 355, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 75, 392, 392, 146, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 141, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 234, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 22, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+
+ 392, 392, 392, 173, 392, 392, 392, 392, 392, 392,
+ 391, 375, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 117, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 319, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 16,
+ 392, 392, 392, 392, 392, 392, 392, 392, 201, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+
+ 392, 172, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 116, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 37, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+
+ 392, 392, 392, 392, 392, 392, 392, 392, 38, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 72, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 144, 392, 392,
+ 392, 391, 392, 392, 392, 392, 392, 392, 136, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 73, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 277, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 202, 392,
+
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 60, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+
+ 297, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 65, 392, 66, 392, 392, 392, 392, 392,
+ 392, 120, 392, 121, 392, 392, 392, 392, 392, 118,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 7, 392, 392, 392, 392, 392, 391,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+
+ 392, 392, 392, 262, 392, 392, 392, 392, 392, 392,
+ 176, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 278, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 51, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 61, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 225, 392, 224,
+
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 17, 18, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 76, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 233, 392, 392, 392, 392,
+ 392, 392, 392, 123, 392, 122, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+
+ 392, 392, 215, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 153, 392, 253, 392, 392, 392, 391, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 111, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 98, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 246, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 103, 392, 392, 392, 392, 392,
+
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 69, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 218, 219, 392, 392, 392, 313, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 6, 392, 392, 392, 392, 392,
+ 392, 392, 332, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 317, 392, 392, 392, 392, 392, 392,
+
+ 392, 343, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 48, 392, 392,
+ 392, 392, 392, 50, 392, 392, 392, 99, 392, 392,
+ 392, 392, 392, 58, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 391, 392, 211,
+ 392, 392, 392, 148, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 238, 392,
+ 392, 212, 392, 392, 392, 392, 392, 258, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 59,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 150, 129, 392, 130, 392, 392, 392, 392, 128,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 169, 392, 392, 56, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 295, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 213, 392, 392, 392, 392, 392,
+ 223, 216, 392, 222, 392, 392, 392, 392, 392, 392,
+ 392, 392, 257, 392, 392, 392, 392, 392, 392, 261,
+
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 115, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 142, 392, 392, 392, 392, 392, 392,
+ 392, 392, 67, 392, 392, 392, 392, 31, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 21, 392, 392, 392, 392, 392, 392, 392, 32, 41,
+ 392, 181, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 209, 392,
+ 392, 391, 392, 392, 392, 392, 358, 392, 392, 84,
+
+ 392, 87, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 359, 392, 392, 392, 392, 392, 392, 392,
+ 392, 321, 392, 392, 392, 392, 274, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 131, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 168, 392, 52, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 268, 392, 392,
+ 392, 392, 392, 392, 392, 392, 336, 392, 392, 392,
+
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 175, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 330, 392, 392, 392, 392, 244, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 350,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 194, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 124, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 188, 392,
+
+ 203, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 391, 392, 156, 392, 392, 392, 392, 392, 392, 392,
+ 392, 110, 392, 392, 392, 392, 236, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 259, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 286, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 149, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 192, 392, 392, 392, 392,
+ 392, 392, 392, 88, 392, 89, 392, 392, 392, 392,
+
+ 392, 271, 392, 392, 392, 392, 392, 68, 339, 392,
+ 392, 392, 392, 392, 97, 204, 392, 226, 392, 263,
+ 392, 392, 217, 314, 392, 392, 392, 392, 309, 392,
+ 392, 392, 80, 392, 206, 392, 392, 392, 392, 392,
+ 392, 9, 392, 392, 392, 392, 392, 114, 392, 392,
+ 392, 392, 392, 392, 301, 392, 392, 392, 392, 392,
+ 392, 235, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 391, 392, 392, 392, 392, 191, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 193, 252, 177, 392, 320, 392, 392, 392, 392, 392,
+ 285, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 248, 392, 392, 392, 392, 392, 392,
+ 312, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 174,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 340, 392, 205, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 79, 81, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 113, 392, 392, 392, 392,
+ 392, 392, 299, 392, 392, 392, 392, 392, 392, 392,
+ 316, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 240, 392, 39, 33, 35, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 40, 392, 34, 36, 392, 42, 392, 392,
+ 392, 392, 392, 392, 392, 109, 392, 187, 392, 392,
+
+ 392, 392, 392, 392, 392, 392, 392, 391, 392, 392,
+ 392, 392, 392, 392, 392, 392, 344, 392, 392, 392,
+ 392, 392, 242, 239, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 78, 392, 392, 392, 151,
+ 392, 132, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 170, 53, 392, 392, 392, 383, 13,
+ 392, 392, 392, 392, 392, 392, 392, 157, 392, 392,
+ 392, 392, 392, 392, 392, 392, 334, 392, 337, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+
+ 392, 392, 12, 392, 392, 23, 392, 392, 392, 392,
+ 392, 392, 392, 305, 392, 392, 352, 392, 392, 392,
+ 392, 318, 392, 392, 392, 392, 82, 392, 250, 392,
+ 392, 392, 392, 392, 241, 392, 392, 392, 392, 77,
+ 392, 392, 392, 392, 392, 392, 24, 392, 392, 49,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 186, 185, 392, 392, 392, 392, 383, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 243, 237, 392, 392, 260, 392, 392, 322, 392, 392,
+ 392, 392, 392, 392, 293, 392, 392, 392, 392, 392,
+
+ 392, 392, 392, 199, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 90, 392, 392, 392,
+ 392, 392, 392, 392, 392, 300, 392, 392, 392, 392,
+ 221, 392, 392, 392, 392, 392, 392, 249, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 307, 392,
+ 392, 392, 346, 392, 348, 347, 183, 392, 392, 392,
+ 83, 392, 392, 392, 392, 195, 392, 392, 392, 392,
+ 392, 125, 127, 126, 392, 392, 392, 26, 392, 392,
+ 178, 392, 180, 392, 227, 392, 392, 392, 392, 184,
+
+ 392, 392, 254, 392, 392, 392, 392, 264, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 159, 360, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 276, 392, 392, 392, 392, 392, 392, 392, 361,
+ 392, 28, 392, 315, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 95, 228, 392, 392, 270, 392, 392, 392,
+ 298, 392, 338, 392, 220, 392, 392, 310, 392, 392,
+ 392, 308, 62, 392, 392, 392, 392, 392, 392, 392,
+ 4, 392, 392, 392, 392, 392, 140, 392, 158, 392,
+
+ 392, 392, 200, 30, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 267, 43, 44, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 323, 392, 392,
+ 392, 392, 392, 392, 392, 284, 392, 392, 392, 392,
+ 392, 392, 392, 392, 231, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 94, 93, 392, 392, 63, 392, 392, 296, 304, 392,
+ 272, 392, 392, 392, 392, 392, 11, 392, 392, 392,
+ 392, 365, 392, 392, 392, 392, 392, 139, 392, 392,
+
+ 392, 392, 392, 392, 229, 100, 392, 392, 46, 392,
+ 392, 392, 392, 392, 392, 392, 392, 190, 392, 255,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 161,
+ 392, 392, 392, 392, 275, 392, 392, 392, 392, 392,
+ 283, 392, 392, 392, 392, 154, 392, 392, 392, 133,
+ 135, 134, 392, 392, 392, 102, 106, 101, 392, 171,
+ 392, 392, 392, 392, 91, 392, 269, 306, 392, 392,
+ 392, 392, 392, 392, 10, 392, 392, 392, 392, 392,
+ 302, 351, 392, 392, 392, 392, 392, 392, 392, 392,
+ 357, 45, 392, 392, 392, 392, 392, 189, 392, 392,
+
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 107, 105, 392, 392,
+ 57, 392, 392, 92, 392, 335, 392, 392, 392, 392,
+ 25, 392, 392, 392, 392, 392, 214, 392, 392, 349,
+ 392, 392, 392, 392, 230, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 210, 392, 392, 179, 85,
+ 86, 392, 392, 392, 392, 392, 392, 324, 392, 392,
+ 392, 392, 392, 392, 392, 280, 392, 392, 279, 155,
+ 392, 392, 104, 392, 54, 392, 392, 162, 163, 166,
+
+ 167, 164, 165, 96, 333, 392, 392, 303, 143, 392,
+ 392, 392, 392, 27, 392, 182, 392, 392, 392, 392,
+ 392, 208, 392, 266, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 197, 196, 232,
+ 47, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 331, 392, 392,
+ 392, 392, 112, 392, 392, 265, 392, 392, 294, 328,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+
+ 392, 362, 392, 108, 55, 64, 5, 392, 392, 251,
+ 392, 392, 392, 392, 329, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 281, 29, 392, 392, 392, 256,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 282, 392, 392, 392, 392, 160, 392, 392, 392, 392,
+ 392, 392, 392, 392, 198, 392, 207, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 325, 392,
+ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
+ 392, 392, 392, 392, 392, 392, 392, 356, 345, 392,
+ 392, 289, 392, 392, 392, 392, 392, 326, 392, 392,
+
+ 392, 392, 392, 392, 327, 392, 392, 392, 287, 392,
+ 290, 291, 392, 392, 392, 392, 392, 288, 292, 0
} ;
static const YY_CHAR yy_ec[256] =
@@ -840,17 +841,17 @@ static const YY_CHAR yy_meta[67] =
1, 1, 1, 1, 1, 1
} ;
-static const flex_int16_t yy_base[3923] =
+static const flex_int16_t yy_base[3939] =
{ 0,
0, 0, 64, 67, 70, 72, 78, 84, 89, 92,
- 131, 137, 112, 118, 123, 142, 572, 520, 96,11109,
- 11109,11109, 160, 185, 116, 183, 229, 132, 175, 173,
+ 131, 137, 112, 118, 123, 142, 574, 532, 96,11178,
+ 11178,11178, 160, 185, 116, 183, 229, 132, 175, 173,
232, 50, 66, 120, 263, 275, 159, 323, 134, 375,
- 416, 286, 308, 283, 177, 126, 258, 471,11109,11109,
- 11109, 95, 462,11109,11109,11109, 236, 438, 436,11109,
- 11109,11109, 351, 388,11109,11109,11109, 104, 385,11109,
- 369,11109, 167, 375, 345, 368,11109,11109,11109, 390,
- 309,11109,11109,11109, 146, 291, 394, 177, 0, 406,
+ 416, 286, 308, 283, 177, 126, 258, 520,11178,11178,
+ 11178, 95, 471,11178,11178,11178, 236, 462, 476,11178,
+ 11178,11178, 351, 398,11178,11178,11178, 104, 388,11178,
+ 369,11178, 167, 375, 385, 383,11178,11178,11178, 390,
+ 330,11178,11178,11178, 146, 309, 394, 177, 0, 406,
0, 0, 210, 224, 235, 281, 310, 259, 343, 389,
256, 187, 396, 428, 426, 325, 382, 446, 303, 425,
@@ -859,8 +860,8 @@ static const flex_int16_t yy_base[3923] =
503, 509, 535, 523, 538, 528, 543, 537, 386, 547,
559, 556, 351, 561, 573, 568, 594, 565, 592, 599,
585, 596, 595, 609, 627, 618, 626, 620, 621, 636,
- 637, 635, 273, 180, 270, 238, 268, 678, 296, 230,
- 342, 152, 689, 693, 0, 668, 150, 697, 176, 128,
+ 637, 635, 291, 180, 273, 238, 270, 678, 306, 258,
+ 342, 230, 689, 693, 0, 668, 152, 697, 188, 138,
455, 669, 666, 672, 677, 680, 697, 683, 698, 681,
696, 704, 695, 702, 707, 740, 701, 732, 743, 226,
@@ -876,15 +877,15 @@ static const flex_int16_t yy_base[3923] =
1020, 1030, 1038, 1024, 1026, 1027, 1033, 1032, 1036, 1023,
1054, 1055, 1041, 1063, 1073, 233, 1059, 1075, 1078, 1067,
- 1092, 1081, 1085, 1086, 1087, 1090,11109, 1097, 1101, 1102,
+ 1092, 1081, 1085, 1086, 1087, 1090,11178, 1097, 1101, 1102,
1116, 1103, 1117, 1098, 1122, 1136, 1137, 1113, 1123, 1125,
1126, 1134, 1144, 1140, 1151, 1150, 1152, 1171, 1157, 1173,
1168, 1162, 1178, 1174, 1217, 1179, 1196, 1185, 1262, 1189,
1191, 1212, 1225, 1230, 486, 1219, 1211, 1249, 1218, 1232,
1255, 1241, 1261, 1258, 1282, 1274, 1277, 1259, 1276, 1285,
- 1286, 1296, 1299, 1301, 1164, 1321,11109, 1300, 1325, 1215,
+ 1286, 1296, 1299, 1301, 1164, 1321,11178, 1300, 1325, 1215,
1326, 1327, 1334, 1336, 1341, 1353, 1335, 1354, 1346, 1370,
- 1371, 1403, 1451, 1358, 1381, 1373, 1380, 1396,11109, 1390,
+ 1371, 1403, 1451, 1358, 1381, 1373, 1380, 1396,11178, 1390,
1399, 1500, 1417, 1419, 1391, 1392, 1429, 1420, 1430, 1423,
1444, 1439, 1450, 1446, 1434, 1462, 1469, 1480, 1499, 1473,
@@ -895,16 +896,16 @@ static const flex_int16_t yy_base[3923] =
1624, 1641, 1631, 1654, 1650, 1651, 1658, 1660, 1642, 1665,
1677, 1687, 1666, 1686, 1692, 1684, 1674, 1700, 1703, 1711,
1697, 1701, 1698, 1717, 1728, 1713, 1732, 1736, 1738, 1733,
- 1748, 1746, 1750, 1752, 1735,11109, 1755, 1765,11109, 1760,
+ 1748, 1746, 1750, 1752, 1735,11178, 1755, 1765,11178, 1760,
- 1759, 1762, 1761, 1764, 1769, 1775, 1778,11109, 1786, 1782,
+ 1759, 1762, 1761, 1764, 1769, 1775, 1778,11178, 1786, 1782,
1787, 1808, 1797, 1820, 1809, 1821, 1794, 1805, 1817, 1826,
1816, 1822, 1814, 1844, 1831, 1839, 1845, 1840, 1855, 1843,
1841, 1857, 1856, 1869, 1864, 1870, 1877, 1867, 1872, 1920,
- 11109, 1878, 1882, 1880, 1904, 1891, 1906, 1900, 1925, 1945,
+ 11178, 1878, 1882, 1880, 1904, 1891, 1906, 1900, 1925, 1945,
1917, 1937, 1941, 1949, 1970, 1956, 1963, 1977, 1951, 1966,
1981, 1967, 1987, 1976, 1983, 1984, 2004, 1993, 1892, 2011,
- 2008, 2002, 2009, 1918,11109, 2013, 2014, 2026, 2029, 1922,
+ 2008, 2002, 2009, 1918,11178, 2013, 2014, 2026, 2029, 1922,
2015, 2019, 2018, 2035, 2001, 2032, 2040, 2051, 2050, 2064,
2041, 2061, 2070, 2076, 2060, 2078, 2080, 2067, 2081, 2075,
@@ -913,7 +914,7 @@ static const flex_int16_t yy_base[3923] =
2142, 2132, 2144, 2154, 2150, 2143, 2149, 2169, 2159, 2160,
2171, 2165, 2184, 2174, 2190, 2170, 2178, 2198, 2187, 2192,
2193, 2163, 2204, 2207, 2234, 2205, 2226, 2211, 2212, 2217,
- 2236, 2233, 2243,11109, 2248, 2250, 2249, 2261, 2262, 2266,
+ 2236, 2233, 2243,11178, 2248, 2250, 2249, 2261, 2262, 2266,
2264, 2273, 2268, 2272, 2275, 2270, 2291, 2286, 2224, 2292,
2285, 2298, 2294, 2293, 2300, 2313, 2312, 2331, 2323, 2332,
2338, 2325, 2342, 2339, 2328, 2333, 2334, 2349, 2351, 2337,
@@ -927,792 +928,794 @@ static const flex_int16_t yy_base[3923] =
2560, 2553, 2551, 2563, 2565, 2571, 2566, 2577, 2568, 2592,
2595, 2598, 2583, 2597, 2606, 2594, 2608, 2604, 2603, 2609,
2619, 2625, 2479, 2636, 2640, 2644, 2633, 2642, 2634, 2650,
- 2645, 2635, 2654, 2657, 2687, 2668, 2670,11109, 2669, 2550,
+ 2645, 2635, 2654, 2657, 2687, 2668, 2670,11178, 2669, 2550,
2671, 2672, 2685, 2682, 2676, 2684, 2696, 2709, 2697, 2700,
- 2695, 2683, 2698, 2744,11109, 2715,11109,11109, 759, 2714,
- 11109,11109, 2711, 2727,11109, 2721, 2745, 2741, 2758, 2748,
+ 2695, 2683, 2698, 2744,11178, 2715,11178,11178, 759, 2714,
+ 11178,11178, 2711, 2727,11178, 2721, 2745, 2741, 2758, 2748,
2754, 2760, 2773, 2768, 2775, 2772, 2742, 2819, 2777, 2798,
2785, 2787, 2814, 2783, 2824, 2822, 2790, 2830, 2841, 2834,
2812, 2767, 2836, 2851, 2845, 2861, 2868, 2870, 2871, 2872,
2873, 2878, 2864, 2862, 2886, 2865, 2887, 2901, 2883, 2900,
2896, 2904, 2893, 2907, 2910, 2897, 2931, 2924, 2930, 2940,
- 11109, 2927, 2943, 2921, 2928, 2933, 2946, 2945, 2949, 2958,
+ 11178, 2927, 2943, 2921, 2928, 2933, 2946, 2945, 2949, 2958,
2956, 2955, 2964, 2965, 2951, 2960, 2957, 2966, 2977, 2972,
2976, 2970, 2982, 3000, 2996, 2999, 3010, 3016, 2997, 2993,
- 11109, 3008, 3009, 2995, 3014, 3020, 3021, 3028, 3033, 3026,
+ 11178, 3008, 3009, 2995, 3014, 3020, 3021, 3028, 3033, 3026,
3024, 3041, 3046, 3066, 3048, 3053, 3055, 3044, 3060, 3061,
- 3056, 3081,11109, 3076, 3064, 3073, 3090, 3077, 3097, 3052,
+ 3056, 3081,11178, 3076, 3064, 3073, 3090, 3077, 3097, 3052,
3086, 3087, 3096, 3101, 3103, 3111, 3100, 3112, 3125, 3123,
3122, 3119, 3121, 3127, 3138, 3139, 3137, 3150, 3156, 3153,
3143, 3148, 3149, 3152, 3161, 3164, 3166, 3174, 3175, 3178,
3197, 3184, 3202, 3189, 3180, 3209, 3211, 3206, 3196, 3208,
3212, 3205, 3213, 3223, 3224, 3231, 3225, 3232, 3236, 3229,
3246, 3230, 3241, 3255, 3261, 3267, 3251, 3265, 3270, 3258,
- 3263, 3259, 3284, 3276,11109, 3275, 3286, 3305,11109, 3296,
+ 3263, 3259, 3284, 3276,11178, 3275, 3286, 3305,11178, 3296,
3294, 3291, 3344, 3310, 3316, 3321, 3330, 3324, 3304, 3354,
3341, 3335, 3352, 3362, 3356, 3369, 3364, 3376, 3391, 3383,
- 3394, 3389, 3379, 3388, 3378, 3387, 3405, 3403, 3415, 3417,
- 3422, 3418, 3429, 3404, 760, 3438, 3421, 3432, 3434, 3479,
- 3428, 3436, 3448, 3445, 3463, 3468, 3461, 3467, 3470, 3488,
- 3455, 3484, 3494, 3465, 3504, 3506, 3501, 3500, 3517, 3520,
- 3477, 3530, 3521,11109, 3522, 3536, 3523, 3546, 3527, 3528,
- 3547, 3537,11109, 3544, 3549, 3543, 3565, 3563, 3562, 3570,
- 3557, 3568, 3586, 3571, 3576, 3584, 3585, 3590, 3583, 3606,
- 11109, 3589,11109, 3608, 3599, 3603, 3602, 3611, 3612, 3610,
-
- 3618, 3625, 3637, 3638,11109,11109, 3639, 3645, 3632, 3646,
- 3630, 3653, 3651, 3661, 3662,11109, 3663, 3686,11109, 3681,
- 3668, 3688, 3670, 3672, 3677, 3687, 3678, 3703, 3702, 3705,
- 3704, 3706, 3707, 3720, 3712,11109, 3727, 3732, 3715, 3733,
- 3740, 3721, 3741, 3751, 3752, 3734,11109, 3760, 3742, 3764,
- 3753, 3776, 3775, 3772, 3768, 3779, 3787, 3771, 3773, 3784,
- 3791, 3783, 3795, 3810, 3812, 3815, 3819, 3817, 3821, 3822,
- 11109, 3823, 3807, 3809, 3832, 3830, 3833, 3831, 3834, 3836,
- 3827, 3846, 3861, 3863, 3858, 3870, 3853, 3862, 3857, 3882,
- 3883, 3872, 3881, 3879, 3885, 3880, 3888, 3893, 1348, 3898,
-
- 3896, 3899, 3892,11109, 3903, 3915, 3928, 3921, 3930, 3931,
- 3913, 115, 3920, 3926, 3925, 3945, 3956, 3939, 3946, 3947,
- 3944, 3964, 3961, 3955, 3959, 3971, 3977, 3973, 3966, 3981,
- 3982, 3974, 3991, 3996, 4004, 3997, 3994,11109, 3990, 4001,
- 4016, 4018, 4007, 4014, 4024, 4026, 4044,11109, 4028, 4034,
- 4043, 4050, 4057, 4051, 4066, 4053, 4056, 4059,11109, 4062,
- 4078, 4076, 4071, 4077, 4086, 4091, 4087,11109, 4081, 4105,
- 4107, 4096, 4114, 4113, 4111, 4115, 4121, 4126, 4146, 4135,
- 4144, 4140, 4137, 4133, 4141, 4155, 4160, 4163, 4084, 4108,
- 4164, 4171, 4177, 4170, 4181, 4176, 4169, 4185, 4204, 4186,
-
- 11109, 4210, 4199, 4201, 4209, 4198, 4207, 4219, 4220, 4235,
- 4221, 4225, 4216, 4237, 4267, 4242, 4251, 4254, 4256, 4265,
- 4269, 4252, 4258, 4266, 4284, 4300, 4283, 4305, 4309, 4288,
- 4302, 4282, 4296, 4315, 4310, 4323, 4317, 4307, 4333, 4329,
- 4332, 4330, 4335, 4348, 4341, 4373, 4353, 4347, 4368, 3439,
- 4365,11109, 4359, 4356, 4357, 4379, 4385, 4407, 4390, 4392,
- 4383, 4403, 4409, 4402, 4406, 4412, 4413, 4418, 4414, 4410,
- 4435, 4430, 4441, 4433, 4439, 4449, 4437, 4426, 4454, 4326,
- 4450, 4461, 4458, 4467,11109, 4476, 4475, 4468, 4482, 4472,
- 4473, 4484, 4488, 4492, 4477, 4496, 4500, 4501, 4485, 4509,
-
- 4507, 4502, 4513, 4525, 4524, 4529, 4520,11109, 4532, 4527,
- 4528, 4534, 4536, 4540, 4556, 4565, 4568, 4569, 4572, 4575,
- 4558, 4578, 4579, 4577,11109, 4548, 4551, 4582, 4583, 4594,
- 4599, 4593, 4605, 4618, 4602, 4603,11109, 4614, 4606, 4615,
- 4613, 4607, 4621, 4636, 4641, 4631, 4642,11109, 4643, 4645,
- 4646, 4651, 4652, 4647, 4649, 4648, 4663, 4676, 4664, 4670,
- 4678, 4680, 4682, 4698, 4679, 4694,11109, 4691, 4687, 4703,
- 4720, 4706, 4704, 4709, 4705, 4723, 4727, 4744, 4726, 4732,
- 4741,11109, 4746, 4753, 4737, 4763, 4747, 4751, 4765, 4762,
- 4776, 4780, 4768, 4771, 4782, 4779,11109, 4774, 4778, 4784,
-
- 4815, 4793, 4801, 4798, 4805, 4809, 4806, 4808, 4820, 4823,
- 4824, 4818, 4825, 4833, 4826, 4841, 4842, 4849, 4846, 4861,
- 4848, 4865, 4851, 4876, 4884, 4885, 4858, 4880, 4887, 4888,
- 4875, 4879, 4890, 4889, 4898, 4901, 4904, 4918,11109, 4909,
- 4906, 4914, 4902, 4912, 4916, 4927, 4928, 4925, 4929, 4936,
- 4943, 4945, 4939, 4973, 4979, 4956, 4957, 4963, 4961, 4962,
- 4969, 4987, 4974, 4975, 4976, 5002, 5004, 4997, 4990, 4984,
- 4986, 5003, 5006, 5017, 5021, 5008, 5019, 5013, 5022, 5024,
- 5026, 5020, 5035, 5042, 5037, 5055, 5044, 5047, 5048, 4934,
- 5067, 5068, 5072, 5064, 5065, 5069, 5075, 5095,11109, 5071,
-
- 5083, 5103, 5091, 5092, 5093, 5111, 5116, 5122, 5110, 5113,
- 5128, 5124, 5123, 5130, 5138, 5141, 5133, 5143, 5137, 5144,
- 11109, 5148,11109, 5150, 5146, 5157, 5171, 5151, 5154,11109,
- 5176,11109, 5177, 5179, 5175, 5181, 5184,11109, 5185, 5189,
- 5193, 5178, 5199, 5194, 5202, 5204, 5209, 5218, 5216, 5214,
- 5231, 5224, 5220, 5227, 5236, 5229, 5247, 5239, 5244, 5259,
- 5252, 5268, 5266, 5257, 5271, 5251, 5263, 5274, 5279, 5284,
- 5287,11109, 5281, 5307, 5293, 5300, 5310, 5289, 5299, 5304,
- 5302, 5311, 5308, 5319, 5323, 5331, 5327, 5334, 5337, 5338,
- 5340, 5343, 5344, 5351, 5342, 5370, 5368, 5380, 5361, 5382,
-
- 5371,11109, 5365, 5385, 5374, 5375, 5386, 5384,11109, 5399,
- 5392, 5395, 5409, 5400, 5397, 5413, 5402, 5424, 5412, 5421,
- 5418, 5441, 5439, 5445, 5443,11109, 5440, 5448, 5429, 5455,
- 5461, 5460, 5468, 5469, 5473, 5482, 5489, 5474, 5486, 5466,
- 5476, 5480, 5477, 5495, 5507, 5513, 5517, 5487, 5520, 5500,
- 5524, 5528, 5525, 5514, 5511, 5518, 5516, 5519, 5522, 5534,
- 5540, 5546, 5543, 5538, 5551, 5552, 5565,11109, 5562, 5570,
- 5563, 5588, 5557, 5569, 5566, 5573, 5599, 5604, 5597,11109,
- 5594, 5590, 5603, 5595, 5615, 5596, 5613, 5601, 5618, 5630,
- 5626, 5637, 5646, 5632,11109, 5645,11109, 5643, 5624, 5647,
-
- 5619, 5656, 5657, 5662, 5664, 5678, 5666, 5671, 5676, 5692,
- 5683, 5674, 5694, 5685, 5684, 5693, 5696, 5716, 5706, 5705,
- 5721, 5709, 5711, 5717, 5722, 5729, 5726, 5723, 5751, 5749,
- 5746,11109,11109, 5734, 5742, 5762, 5765, 5755, 5761, 5774,
- 5776, 5784, 5767, 5782, 5787, 5786, 5790, 5821,11109, 5798,
- 5800, 5797, 5817, 5814, 5831, 5811, 5830, 5836, 5832, 5826,
- 5838, 5839,11109, 5823, 5827, 5846, 5841, 5848, 5868, 5856,
- 11109, 5854,11109, 5857, 5859, 5863, 5872, 5864, 5870, 5881,
- 5883, 5887, 5888, 5897, 5901, 5890, 5898, 5909, 5903, 5913,
- 5906, 5905, 5915, 5918, 5924, 5925, 5919, 5928, 5929,11109,
-
- 5931, 5939, 5950, 5930, 5940, 5943, 5958, 5956, 5946,11109,
- 5975,11109, 5961, 5967, 5977, 5970, 5964, 5984, 5974, 5983,
- 5981, 5998, 6007, 5999, 6008, 6002, 6010, 6006, 6019, 6001,
- 11109, 6004, 6016, 6024, 6020, 6031, 6046, 6038, 6050, 6034,
- 6055,11109, 6051, 6065, 6047, 6057, 6069, 6067, 6058, 6073,
- 6068, 6079, 6064, 6083, 6085, 6082, 6100, 6081, 6092, 6096,
- 6102, 6113, 6098, 6131, 6110, 6106, 6120, 6129, 6123,11109,
- 6125, 6127, 6132, 6137, 6140, 6155, 6158, 6138, 6161, 6169,
- 6156, 6175, 6178, 6165, 6168, 6170, 6177, 6190, 6195, 6197,
- 11109, 6198, 6192, 6203, 6184, 6204, 6187, 6205, 6215, 6206,
-
- 6218, 6220, 6213, 6217, 6224, 6236, 6242, 6244, 6251, 6245,
- 6234, 6248, 6240, 6253, 6262, 6263, 6267, 6268,11109, 6297,
- 6284, 6281, 6250, 6277, 6287, 6304, 6294, 6285, 6286, 6306,
- 6290, 6317, 6299, 6300, 6327, 6320, 6335, 6321,11109,11109,
- 6336, 6312, 6329,11109, 6331, 6330, 6347, 6333, 6334, 6339,
- 6359, 6348, 6355, 6364, 6363, 6357, 6375, 6373, 6361, 6365,
- 11109, 6390, 6384, 6398, 6374, 6388, 6409, 6403,11109, 6393,
- 6411, 6407, 6408, 6410, 6414, 6404, 6399, 6420, 6415, 6425,
- 6426, 6422, 6432, 6462, 6431, 6466, 6445, 6449, 6459,11109,
- 6447, 6446, 6472, 6469, 6454, 6461, 6470,11109, 6481, 6483,
-
- 6497, 6476, 6475, 6501, 6504, 6511, 6505, 6517, 6499, 6508,
- 6510, 6514, 6503, 6525, 6531, 6538, 6535, 6539, 6550, 6544,
- 6534, 6558, 6556,11109, 6561, 6552, 6547, 6564, 6573,11109,
- 6575, 6598, 6581,11109, 6594, 6577, 6587, 6589, 6604,11109,
- 6593, 6602, 6595, 6608, 6585, 6616, 6591, 6620, 6611, 6612,
- 6623, 6622, 6625, 6619, 6615,11109, 6636, 6637, 6650,11109,
- 6657, 6658, 6659, 6662, 6664, 6666, 6663, 6652, 6649, 6675,
- 6668, 6673, 6691, 6671,11109, 6676, 6699,11109, 6701, 6702,
- 6688, 6698, 6711,11109, 6705, 6707, 6708, 6714, 6718, 6715,
- 6716, 6746, 6723, 6731, 6743, 6735, 6736, 6756, 6754, 6761,
-
- 6739, 6758, 6747, 6750,11109, 6788, 6772, 6766, 6786, 6776,
- 6770, 6792, 6793, 6783, 6802, 6798,11109,11109, 6806,11109,
- 6809, 6808, 6810, 6814,11109, 6825, 6828, 6819, 6827, 6820,
- 6816, 6835, 6832, 6856, 6852,11109, 6858, 6862,11109, 6838,
- 6864, 6869, 6854, 6859, 6851, 6855, 6871, 6883, 6853, 6882,
- 6891, 6889, 6893, 6880, 6899, 6897, 6922, 6900, 6934,11109,
- 6918, 6902, 6916, 6914, 6924, 6927, 6941, 6943, 6939,11109,
- 6951, 6955, 6954, 6968, 6969,11109,11109, 6970,11109, 6967,
- 6978, 6950, 6986, 6971, 6981, 6965, 6982,11109, 6989, 6993,
- 7004, 6984, 7014, 7020,11109, 7016, 7018, 7006, 7008, 7005,
-
- 7032, 7031, 7017, 7027, 7060, 7034,11109, 7037, 7048, 7053,
- 7040, 7067, 7059, 7057, 7051, 7078, 7069, 7075, 7058, 7084,
- 7092, 7082, 7079, 7087, 7089, 7098, 7105, 7094,11109, 7109,
- 7111, 7122, 7121, 7131, 7116, 7132, 7117,11109, 7133, 7118,
- 7147, 7148,11109, 7149, 7157, 7145, 7161, 7160, 7164, 7167,
- 7170, 7168, 7169, 7175, 7194,11109, 7188, 7189, 7187, 7198,
- 7206, 7209, 7204,11109,11109, 7213,11109, 7202, 7214, 7224,
- 7225, 7217, 7238, 7171, 7241, 7248, 7235, 7236, 7252, 7249,
- 7244, 7245, 7258,11109, 7267, 7263, 7266, 7296, 7272, 7294,
- 7270,11109, 7284, 7275,11109, 7281,11109, 7280, 7291, 7298,
-
- 7305, 7307, 7310, 7311, 7302, 7299,11109, 7329, 7325, 7315,
- 7322, 7344, 7346, 7343, 7355,11109, 7347, 7333, 7357, 7339,
- 11109, 7338, 7364, 7354, 7368, 7371, 7367, 7373, 7372, 7374,
- 7375, 7387, 7401, 7393, 7402, 7391, 7395, 7399, 7403, 7404,
- 7406, 7400, 7419, 7425,11109, 7431, 7422, 7424, 7426, 7432,
- 7430, 7442, 7435, 7448, 7444, 7452, 7468,11109, 7458,11109,
- 7463, 7453, 7471, 7472, 7464, 7478, 7481, 7490, 7483, 7482,
- 7475, 7494, 7511, 7497, 7513, 7514, 7503, 7504, 7509, 7524,
- 11109, 7526, 7531, 7520, 7536, 7545, 7529, 7543, 7539,11109,
- 7555, 7541, 7547, 7538, 7548, 7569, 7559, 7573, 7558, 7579,
-
- 7565, 7584, 7583, 7590, 7577, 7586, 7592, 7581, 7597, 7585,
- 7582,11109, 7609, 7602, 7596, 7621, 7612, 7622, 7625, 7629,
- 7634, 7633, 7618, 7628, 7636,11109, 7651, 7648, 7644, 7645,
- 11109, 7626, 7653, 7624, 7654, 7672, 7679, 7663, 7678, 7680,
- 7670, 7686,11109, 7688, 7671, 7693, 7675, 7690, 7703, 7677,
- 7696, 7723, 7716, 7727, 7735,11109, 7731, 7720, 7734, 7736,
- 7737, 7719, 7747, 7746, 7748, 7765, 7750,11109, 7773, 7774,
- 7780, 7766, 7745, 7788, 7768, 7771, 7793, 7791, 7794, 7777,
- 7797, 7787, 7805, 7800, 7813, 7819, 7821, 7817, 7816, 7824,
- 7829,11109, 7814,11109, 7815, 7836, 7837, 7844, 7858, 7839,
-
- 7851, 7860, 7846, 7849, 7848,11109, 7863, 7866, 7883, 7873,
- 7875, 7880, 7890, 7886,11109, 7887, 7876, 7893, 7900,11109,
- 7901, 7916, 7902, 7911, 7905, 7924, 7930, 7932,11109, 7934,
- 7937, 7931, 7942, 7946, 7935, 7945, 7938, 7953, 7943, 7960,
- 7949, 7965, 7951, 7961, 7972,11109, 7979, 7981, 7985, 7986,
- 7989, 7987, 7988, 7978, 7999, 7990, 8006,11109, 7995, 8008,
- 8009, 8011, 7993, 8033, 8012, 8035, 8014, 8036, 8043, 8046,
- 8027, 8030, 8034, 8060, 8054, 8050,11109, 8039, 8052, 8077,
- 8057, 8088, 8078, 8083,11109, 8080,11109, 8076, 8079, 8095,
- 8091, 8097,11109, 8105, 8084, 8111, 8074, 8118,11109,11109,
-
- 8124, 8102, 8121, 8130, 8122,11109,11109, 8134,11109, 8125,
- 11109, 8123, 8120,11109,11109, 8135, 8127, 8138, 8145,11109,
- 8154, 8163, 8142,11109, 8144,11109, 8178, 8155, 8173, 8160,
- 8157, 8172,11109, 8169, 8182, 8180, 8186, 8189,11109, 8181,
- 8201, 8205, 8196, 8199, 8203,11109, 8194, 8219, 8212, 8208,
- 8223, 8202,11109, 8230, 8233, 8229, 8235, 8239, 8238, 8247,
- 8257, 8241, 8249, 8260, 8262, 8244, 8261, 8268, 8277, 8270,
- 8283, 8292, 8293, 8284, 8299, 8280, 8297, 8304, 8308, 8312,
- 8291, 8294, 8310, 8307, 8317, 8290, 8315, 8324, 8345, 8346,
- 8336, 8348, 8340, 8349, 8341, 8330, 8354, 8335, 8344, 8358,
-
- 8351, 8361, 8363, 8372, 8371, 8342, 8380, 8386, 8385, 8374,
- 8398, 8390, 8403, 8399, 8391, 8405,11109, 8410, 8387, 8412,
- 8433, 8415, 8417, 8442, 8427, 8443, 8444, 8446, 8450, 8451,
- 11109,11109,11109, 8455,11109, 8457, 8435, 8463, 8462, 8471,
- 11109, 8467, 8470, 8469, 8472, 8484, 8475, 8498, 8483, 8489,
- 8494, 8504,11109, 8502, 8509, 8510, 8501, 8508, 8526,11109,
- 8529, 8540, 8525, 8527, 8528, 8534, 8532, 8530, 8531, 8544,
- 8550, 8558, 8556, 8564, 8566, 8559, 8570, 8572,11109, 8580,
- 8581, 8587, 8574, 8576, 8583, 8585, 8586, 8590, 8584, 8582,
- 8596, 8606, 8607, 8609, 8608, 8619, 8630, 8637, 8636, 8639,
-
- 11109, 8621,11109, 8633, 8622, 8644, 8634, 8645, 8653, 8647,
- 8655, 8643,11109,11109, 8658, 8666, 8683, 8676, 8672, 8670,
- 8690, 8680, 8677, 8694,11109, 8681, 8697, 8689, 8702, 8701,
- 8707,11109, 8711, 8709, 8710, 8708, 8723, 8721, 8732,11109,
- 8728, 8733, 8739, 8744, 8746, 8737, 8749, 8747, 8753, 8759,
- 8751, 8757, 8761,11109, 8760,11109,11109,11109, 8764, 8773,
- 8771, 8785, 8783, 8784, 8786, 8792, 8794, 8798, 8795, 8809,
- 8790,11109, 8806,11109,11109, 8810,11109, 8811, 8800, 8813,
- 8823, 8820, 8826, 8836,11109, 8833,11109, 8841, 8847, 8834,
- 8851, 8854, 8850, 8842, 8859, 8853, 8865, 8860, 8878, 8870,
-
- 8871, 8875, 8880, 8890, 8879,11109, 8899, 8881, 8898, 8901,
- 8904,11109,11109, 8905, 8909, 8908, 8919, 8916, 8924, 8920,
- 8938, 8933, 8935, 8930, 8926, 8936, 8928, 8947, 8955, 8953,
- 8942, 8952,11109, 8963, 8967, 8956,11109, 8961,11109, 8979,
- 8982, 8986, 8971, 8965, 8966, 8968, 8995, 8992, 8999, 9002,
- 11109,11109, 8990, 9015, 9006,11109,11109, 9005, 9000, 9011,
- 9017, 9021, 9018, 9022,11109, 9028, 9034, 9039, 9035, 9044,
- 9042, 9046, 9055,11109, 9045,11109, 9056, 9061, 9054, 9064,
- 9080, 9083, 9066, 9068, 9084, 9090, 9088, 9072, 9093,11109,
- 9091, 9081,11109, 9107, 9101, 9102, 9087, 9095, 9119, 9111,
-
- 11109, 9129, 9117,11109, 9137, 9116, 9140, 9141,11109, 9142,
- 9143, 9144, 9136,11109, 9148,11109, 9131, 9150, 9153, 9159,
- 9161,11109, 9163, 9164, 9167, 9178,11109, 9181, 9185, 9189,
- 9190, 9182, 9186,11109, 9196, 9180,11109, 9177, 9201, 9202,
- 9215, 9204, 9218, 9208, 9209, 9220, 9237, 9233, 9235,11109,
- 11109, 9243, 9238, 9242, 9244, 73, 9255, 9217, 9231, 9232,
- 9247, 9261, 9262, 9268, 9248, 9277, 9272,11109,11109, 9278,
- 11109, 9276, 9282,11109, 9265, 9288, 9286, 9279, 9289, 9275,
- 9299, 9308, 9298, 9313, 9325, 9315, 9311, 9323,11109, 9337,
- 9339, 9314, 9343, 9344, 9346, 9350, 9352, 9358, 9349, 9356,
-
- 9342, 9341, 9366, 9368, 9376, 9371, 9379, 9378, 9377, 9380,
- 9392,11109, 9391, 9396, 9398, 9395, 9399, 9407, 9411, 9402,
- 11109, 9415, 9414, 9430, 9426,11109, 9432, 9424, 9427, 9435,
- 9437, 9440,11109, 9434, 9444, 9445, 9451, 9441, 9447, 9454,
- 9460, 9463, 9485,11109, 9457, 9477, 9484,11109, 9474,11109,
- 11109,11109, 9464, 9494, 9481,11109, 9498, 9491, 9482, 9496,
- 11109, 9499, 9500, 9497, 9508, 9516,11109,11109,11109, 9492,
- 9515, 9521,11109, 9509, 9536,11109, 9525,11109, 9518,11109,
- 9533, 9535, 9545, 9541,11109, 9544, 9547,11109, 9542, 9557,
- 9564, 9581,11109, 9554, 9559, 9575, 9574, 9567, 9569, 9571,
-
- 9573, 9588,11109, 9584, 9594, 9598, 9595, 9586, 9606, 9602,
- 9619, 9609, 9611, 9607, 9628,11109, 9631, 9634, 9636, 9642,
- 9621, 9622, 9629,11109, 9633,11109, 9647,11109, 9652, 9659,
- 9660, 9671, 9667, 9661, 9662, 9670, 9679, 9663, 9687, 9690,
- 9686, 9694, 9689, 9682, 9693, 9700,11109,11109, 9701, 9709,
- 11109, 9718, 9725, 9726,11109, 9708,11109, 9730,11109, 9716,
- 9717,11109, 9735, 9721, 9736,11109,11109, 9731, 9727, 9746,
- 9743, 9738, 9749, 9750,11109, 9765, 9757, 9753, 9760, 9775,
- 11109, 9784,11109, 9763, 9786, 9780,11109,11109, 9767, 9774,
- 9791, 9795, 9782, 9788, 9804, 9792, 9805, 9801, 9811, 9798,
-
- 9822, 9806, 9820, 9824, 9836, 9825, 9839, 9843, 9844,11109,
- 11109,11109, 9847, 9835, 9837, 9849, 9848, 9858, 9862, 9873,
- 9860,11109, 9872, 9879, 9875, 9864, 9893, 9891, 9890,11109,
- 9884, 9876, 9870, 9885, 9901, 9897, 9899, 9904,11109, 9914,
- 9919, 9927, 9924, 9918, 9925, 9933, 9934, 9937, 9935, 9938,
- 9926, 9921, 9954, 9945,11109,11109, 9955, 9942,11109, 9963,
- 9967,11109,11109, 9949,11109, 9948, 9951, 9960, 9961, 9985,
- 11109, 9980, 9965, 9974, 9975,11109, 9976, 9990, 9984, 9998,
- 10000,11109, 9987,10013, 9995,10002,10014,10023,11109,11109,
- 10003,10009,11109,10033,10029,10025,10040,10026,10035,10037,
-
- 10042,11109,10048,11109,10045,10052,10051,10053,10054,10065,
- 10070,10067,10081,11109,10075,10069,10079,10091,11109,10089,
- 10074,10102,10100,10098,11109,10108,10104,10096,10117,11109,
- 10112,10125,10123,11109,11109,11109,10133,10137,10138,11109,
- 11109,11109,10126,11109,10143,10140,10135,10156,11109,10146,
- 11109,11109,10157,10176,10178,10158,10180,10162,11109,10177,
- 10181,10171,10168,10173,11109,11109,10191,10193,10172,10195,
- 10196,10197,10184,10205,11109,11109,10185,10199,10212,10218,
- 10219,11109,10213,10228,10233,10235,10232,10243,10236,10247,
- 10248,10229,10249,10245,10257,10285,10254,10261,10252,10262,
-
- 10268,10277,10271,10287,10297,10293,10301,10302,10288,10300,
- 11109,11109,10306,10294,11109,10307,10309,11109,10298,11109,
- 10311,10319,10322,10323,11109,10331,10337,10339,10340,10315,
- 11109,10335,10347,11109,10348,10342,10343,10332,11109,10338,
- 10354,10357,10356,10345,10350,10361,10384,10374,10389,11109,
- 10377,10391,11109,11109,11109,10388,10378,10394,10372,10401,
- 10390,11109,10403,10399,10395,10405,10412,10416,10411,11109,
- 10435,10433,11109,11109,10436,10429,11109,10445,11109,10421,
- 10430,11109,11109,11109,11109,11109,11109,11109,11109,10448,
- 10449,11109,11109,10438,10455,10459,10464,11109,10466,11109,
-
- 10458,10461,10479,10467,10469,11109,10475,11109,10495,10476,
- 10490,10493,10502,10485,10491,10494,10486,10497,10514,10508,
- 10521,10528,10511,10534,10519,10531,10542,10525,10545,10529,
- 10546,11109,11109,11109,11109,10548,10557,10553,10556,10576,
- 10554,10563,10558,10582,10587,10569,10571,10590,10589,10592,
- 10574,10585,10607,10596,10601,10603,10605,10602,10611,10625,
- 10631,11109,10633,10621,10620,10641,11109,10627,10632,11109,
- 10626,10628,11109,11109,10644,10655,10637,10638,10666,10667,
- 10660,10662,10659,10671,10679,11109,10680,11109,11109,11109,
- 11109,10664,10661,11109,10682,10690,10683,10688,11109,10677,
-
- 10695,10694,10698,10701,10710,10715,10725,10716,11109,11109,
- 10712,10717,10726,11109,10722,10733,10741,10723,10747,10749,
- 10750,10756,10744,10739,11109,10751,10759,10765,10752,11109,
- 10776,10766,10760,10777,10779,10774,10781,10782,11109,10783,
- 11109,10794,10789,10793,10808,10809,10811,10804,10814,10819,
- 10820,10835,11109,10792,10836,10829,10842,10849,10847,10827,
- 10840,10853,10858,10860,10866,10871,10874,10875,10864,10867,
- 10869,11109,11109,10873,10870,11109,10879,10885,10886,10895,
- 10902,11109,10904,10899,10900,10906,10920,10916,11109,10921,
- 10924,10928,11109,10931,11109,11109,10932,10925,10930,10938,
-
- 10939,11109,11109,11109,10989,10996,11003,11010,11017,11024,
- 11031, 100,11038,11045,11052,11059,11066,11073,11080,11087,
- 11094,11101
+ 3400, 3372, 3397, 3392, 3404, 3387, 3399, 3403, 3411, 3414,
+ 3418, 3426, 3441, 3437, 760, 3449, 3424, 3429, 3434, 3479,
+ 3442, 3450, 3443, 3447, 3461, 3486, 3475, 3451, 3474, 3481,
+ 3477, 3484, 3500, 3502, 3504, 3507, 3497, 3512, 3517, 3520,
+ 3467, 3529, 3521,11178, 3526, 3534, 3530, 3540, 3539, 3555,
+ 3546, 3544,11178, 3550, 3560, 3554, 3579, 3566, 3561, 3578,
+ 3564, 3571, 3588, 3572, 3582, 3586, 3591, 3597, 3587, 3606,
+ 11178, 3601,11178, 3609, 3605, 3610, 3615, 3613, 3607, 3624,
+
+ 3621, 3614, 3640, 3641,11178,11178, 3644, 3650, 3634, 3653,
+ 3662, 3663, 3651, 3659, 3656,11178, 3648, 3684,11178, 3691,
+ 3670, 3690, 3680, 3678, 3672, 3696, 3682, 3689, 3699, 3709,
+ 3686, 3713, 3716, 3705, 3720,11178, 3723, 3725, 3717, 3730,
+ 3737, 3729, 3739, 3741, 3744, 3747,11178, 3754, 3751, 3757,
+ 3756, 3758, 3770, 3771, 3761, 3786, 3781, 3773, 3774, 3772,
+ 3799, 3783, 3800, 3808, 3810, 3806, 3807, 3819, 3816, 3820,
+ 11178, 3817, 3813, 3805, 3829, 3823, 3830, 3827, 3832, 3837,
+ 3833, 3826, 3858, 3859, 3854, 3866, 3849, 3863, 3855, 3878,
+ 3882, 3864, 3890, 3870, 3877, 3873, 3872, 3885, 1348, 3889,
+
+ 3899, 3891, 3888,11178, 3900, 3911, 3921, 3916, 3923, 3926,
+ 3905, 128, 3915, 3918, 3927, 3936, 3935, 3934, 3957, 3945,
+ 3964, 3969, 3959, 3955, 3958, 3968, 3975, 3976, 3966, 3984,
+ 3978, 3972, 3990, 3985, 3999, 4001, 3994,11178, 4018, 4005,
+ 4020, 4014, 4004, 4012, 4028, 4010, 4048,11178, 4025, 4041,
+ 4033, 4044, 4051, 4046, 4049, 4069, 4047, 4052, 4068,11178,
+ 4076, 4065, 4071, 4087, 4095, 4074, 4091, 4086,11178, 4106,
+ 4104, 4107, 4096, 4114, 4113, 4111, 4110, 4115, 4126, 4146,
+ 4133, 4128, 4138, 4132, 4140, 4136, 4160, 4141, 4153, 4174,
+ 4159, 4162, 4175, 4177, 4171, 4183, 4178, 4169, 4185, 4176,
+
+ 4187,11178, 4204, 4193, 4199, 4210, 4196, 4209, 4223, 4203,
+ 4238, 4220, 4227, 4219, 4243, 4271, 4235, 4242, 4234, 4255,
+ 4259, 4254, 4265, 4262, 4268, 4282, 4292, 4275, 4303, 4305,
+ 4295, 4298, 4302, 4317, 4321, 4309, 4306, 4322, 4314, 4320,
+ 4339, 4334, 4344, 4341, 4348, 4337, 4371, 4351, 4343, 4368,
+ 3473, 4361,11178, 4355, 4366, 4370, 4374, 4367, 4405, 4393,
+ 4395, 4384, 4408, 4396, 4400, 4407, 4411, 4401, 4429, 4420,
+ 4427, 4417, 4431, 4436, 4432, 4434, 4442, 4433, 4437, 4450,
+ 4465, 4452, 4471, 4469, 4473,11178, 4477, 4476, 4464, 4478,
+ 4484, 4466, 4485, 4489, 4492, 4488, 4499, 4500, 4495, 4498,
+
+ 4506, 4525, 4510, 4504, 4524, 4526, 4532, 4522,11178, 4536,
+ 4527, 4531, 4533, 4550, 4541, 4562, 4567, 4571, 4573, 4575,
+ 4577, 4561, 4580, 4583, 4568,11178, 4548, 4585, 4587, 4588,
+ 4589, 4602, 4599, 4610, 4596, 4604, 4605,11178, 4617, 4609,
+ 4620, 4613, 4614, 4612, 4638, 4647, 4637, 4639,11178, 4651,
+ 4649, 4653, 4654, 4658, 4648, 4644, 4665, 4664, 4671, 4677,
+ 4662, 4666, 4683, 4685, 4701, 4690, 4700,11178, 4689, 4693,
+ 4706, 4723, 4704, 4712, 4717, 4715, 4711, 4736, 4750, 4732,
+ 4735, 4733,11178, 4748, 4745, 4753, 4756, 4770, 4752, 4760,
+ 4772, 4764, 4768, 4784, 4774, 4782, 4788, 4783,11178, 4791,
+
+ 4794, 4796, 4806, 4800, 4808, 4809, 4781, 4810, 4824, 4819,
+ 4829, 4827, 4830, 4825, 4853, 4841, 4854, 4846, 4833, 4855,
+ 4852, 4862, 4835, 4857, 4867, 4877, 4888, 4897, 4881, 4898,
+ 4896, 4894, 4885, 4886, 4904, 4902, 4903, 4911, 4915, 4917,
+ 11178, 4919, 4928, 4924, 4922, 4908, 4927, 4935, 4945, 4947,
+ 4936, 4949, 4953, 4951, 4942, 4986, 4987, 4966, 4969, 4972,
+ 4971, 4975, 4982, 4996, 4976, 4984, 4988, 5010, 5002, 5008,
+ 4992, 5005, 4998, 5013, 5011, 5021, 5015, 5017, 5032, 5031,
+ 5033, 5037, 5042, 5035, 5044, 5028, 5045, 5063, 5048, 5055,
+ 5068, 5078, 5081, 5079, 5082, 5072, 5076, 5087, 5089, 5098,
+
+ 11178, 5092, 5094, 5115, 5107, 5106, 5112, 5130, 5127, 5140,
+ 5121, 5125, 5145, 5141, 5139, 5147, 5142, 5153, 5149, 5155,
+ 5150, 5156,11178, 5161,11178, 5165, 5160, 5159, 5183, 5166,
+ 5170,11178, 5194,11178, 5192, 5196, 5185, 5187, 5188,11178,
+ 5197, 5178, 5189, 5198, 5193, 5217, 5214, 5211, 5216, 5228,
+ 5223, 5244, 5241, 5238, 5230, 5231, 5224, 5234, 5251, 5239,
+ 5245, 5262, 5255, 5277, 5279, 5264, 5285, 5265, 5269, 5282,
+ 5291, 5280, 5296,11178, 5298, 5305, 5300, 5289, 5312, 5292,
+ 5306, 5307, 5318, 5322, 5315, 5332, 5330, 5342, 5323, 5348,
+ 5334, 5349, 5358, 5346, 5351, 5357, 5363, 5364, 5367, 5361,
+
+ 5375, 5376, 5381,11178, 5378, 5355, 5379, 5382, 5391, 5394,
+ 11178, 5402, 5387, 5414, 5416, 5406, 5408, 5397, 5427, 5431,
+ 5418, 5425, 5428, 5443, 5438, 5445, 5451, 5463,11178, 5453,
+ 5464, 5454, 5457, 5467, 5444, 5490, 5491, 5487, 5473, 5496,
+ 5503, 5494, 5489, 5486, 5488, 5485, 5508, 5513, 5515, 5525,
+ 5517, 5530, 5510, 5523, 5527, 5531, 5521, 5526, 5532, 5524,
+ 5541, 5542, 5548, 5550, 5549, 5553, 5568, 5563, 5552, 5574,
+ 11178, 5570, 5573, 5580, 5589, 5576, 5586, 5584, 5592, 5607,
+ 5613, 5608,11178, 5615, 5598, 5616, 5612, 5625, 5623, 5622,
+ 5603, 5629, 5637, 5642, 5651, 5650, 5644,11178, 5652,11178,
+
+ 5643, 5641, 5673, 5675, 5680, 5669, 5664, 5687, 5683, 5679,
+ 5678, 5693, 5696, 5708, 5691, 5699, 5694, 5700, 5706, 5703,
+ 5720, 5710, 5727, 5746, 5744, 5738, 5728, 5737, 5733, 5739,
+ 5741, 5767, 5747, 5758,11178,11178, 5756, 5764, 5768, 5773,
+ 5771, 5777, 5788, 5791, 5790, 5796, 5804, 5794, 5803, 5807,
+ 5827,11178, 5821, 5822, 5814, 5833, 5826, 5763, 5828, 5842,
+ 5816, 5839, 5831, 5852, 5850,11178, 5841, 5854, 5843, 5855,
+ 5862, 5877, 5864,11178, 5868,11178, 5866, 5871, 5873, 5870,
+ 5882, 5897, 5881, 5901, 5898, 5902, 5904, 5899, 5927, 5928,
+ 5912, 5917, 5932, 5914, 5922, 5929, 5935, 5923, 5951, 5931,
+
+ 5944, 5946,11178, 5952, 5945, 5962, 5963, 5949, 5972, 5976,
+ 5961, 5959,11178, 5971,11178, 5973, 5993, 5980, 5994, 5990,
+ 6013, 5995, 6003, 5997, 6018, 6020, 6009, 6012, 6022, 6021,
+ 6026, 6024, 6017,11178, 6039, 6036, 5999, 6042, 6041, 6051,
+ 6060, 6064, 6050, 6071,11178, 6068, 6077, 6061, 6065, 6080,
+ 6079, 6078, 6087, 6093, 6082, 6086, 6092, 6094, 6106, 6113,
+ 6115, 6114, 6107, 6120, 6123, 6121, 6134, 6151, 6139, 6131,
+ 6132, 6104, 6141,11178, 6148, 6150, 6153, 6149, 6140, 6177,
+ 6168, 6173, 6185, 6186, 6178, 6188, 6192, 6176, 6181, 6189,
+ 6194, 6203, 6219, 6214,11178, 6223, 6204, 6228, 6209, 6221,
+
+ 6208, 6224, 6238, 6220, 6234, 6242, 6230, 6231, 6251, 6257,
+ 6263, 6265, 6248, 6268, 6266, 6258, 6274, 6273, 6278, 6279,
+ 6289, 6283,11178, 6317, 6297, 6303, 6275, 6308, 6305, 6327,
+ 6322, 6309, 6307, 6333, 6313, 6336, 6321, 6330, 6342, 6350,
+ 6351, 6345,11178,11178, 6353, 6334, 6358,11178, 6362, 6354,
+ 6347, 6357, 6366, 6369, 6373, 6370, 6372, 6381, 6386, 6378,
+ 6389, 6401, 6380, 6396,11178, 6416, 6414, 6425, 6407, 6417,
+ 6426, 6428,11178, 6410, 6431, 6432, 6433, 6436, 6420, 6422,
+ 6421, 6447, 6449, 6463, 6446, 6444, 6467, 6480, 6469, 6483,
+ 6459, 6472, 6478,11178, 6465, 6462, 6495, 6501, 6489, 6496,
+
+ 6502,11178, 6499, 6516, 6503, 6526, 6510, 6521, 6524, 6530,
+ 6525, 6535, 6528, 6540, 6531, 6551, 6544, 6545, 6546, 6543,
+ 6557, 6559, 6577, 6567, 6569, 6578, 6581,11178, 6586, 6587,
+ 6570, 6583, 6589,11178, 6599, 6623, 6592,11178, 6605, 6594,
+ 6606, 6612, 6632,11178, 6616, 6625, 6619, 6633, 6610, 6641,
+ 6618, 6646, 6627, 6639, 6648, 6630, 6643, 6659, 6653,11178,
+ 6660, 6655, 6673,11178, 6677, 6676, 6680, 6683, 6684, 6688,
+ 6689, 6682, 6675, 6694, 6687, 6691, 6692, 6704,11178, 6712,
+ 6732,11178, 6723, 6724, 6708, 6718, 6733,11178, 6725, 6731,
+ 6736, 6738, 6739, 6742, 6744, 6751, 6746, 6752, 6753, 6759,
+
+ 6763, 6788, 6780, 6786, 6790, 6769, 6783, 6775, 6781,11178,
+ 6800, 6776, 6789, 6796, 6804, 6825, 6820, 6818, 6813, 6828,
+ 6822,11178,11178, 6836,11178, 6838, 6821, 6827, 6842,11178,
+ 6844, 6852, 6811, 6850, 6845, 6872, 6861, 6860, 6876, 6873,
+ 11178, 6880, 6882,11178, 6868, 6884, 6855, 6892, 6889, 6893,
+ 6877, 6911, 6913, 6900, 6886, 6916, 6917, 6918, 6908, 6920,
+ 6931, 6936, 6927, 6962,11178, 6933, 6943, 6940, 6951, 6956,
+ 6949, 6972, 6977, 6967,11178, 6979, 6983, 6970, 6993, 6996,
+ 11178,11178, 6991,11178, 6989, 7004, 6978, 7017, 7002, 7006,
+ 7027, 7008,11178, 7022, 7018, 7036, 7011, 7034, 7040,11178,
+
+ 7038, 7045, 7029, 7044, 7048, 7046, 7052, 7063, 7066, 7085,
+ 7073,11178, 7064, 7072, 7070, 7060, 7087, 7090, 7077, 7091,
+ 7099, 7093, 7094, 7089, 7127, 7116, 7102, 7118, 7134, 7136,
+ 7122, 7128, 7121,11178, 7138, 7141, 7144, 7149, 7152, 7155,
+ 7147, 7160,11178, 7162, 7166, 7176, 7179,11178, 7173, 7187,
+ 7182, 7185, 7174, 7197, 7198, 7194, 7171, 7190, 7205, 7221,
+ 11178, 7217, 7218, 7208, 7222, 7231, 7224, 7223,11178,11178,
+ 7240,11178, 7255, 7239, 7237, 7247, 7244, 7263, 7270, 7266,
+ 7276, 7260, 7258, 7279, 7286, 7267, 7285, 7281,11178, 7290,
+ 7289, 7292, 7320, 7303, 7316, 7318,11178, 7315, 7302,11178,
+
+ 7304,11178, 7310, 7307, 7326, 7331, 7329, 7335, 7339, 7342,
+ 7337, 7362,11178, 7344, 7348, 7350, 7356, 7371, 7374, 7373,
+ 7349,11178, 7375, 7360, 7381, 7366,11178, 7367, 7391, 7387,
+ 7388, 7393, 7399, 7398, 7401, 7402, 7419, 7405, 7409, 7429,
+ 7420, 7434, 7423, 7426, 7430, 7428, 7444, 7437, 7432, 7447,
+ 7458,11178, 7462, 7454, 7457, 7459, 7460, 7453, 7469, 7472,
+ 7479, 7474, 7487, 7499,11178, 7492,11178, 7485, 7494, 7496,
+ 7509, 7497, 7513, 7522, 7525, 7503, 7515, 7518, 7520, 7530,
+ 7537, 7544, 7541, 7535, 7536, 7540, 7568,11178, 7548, 7555,
+ 7559, 7560, 7567, 7565, 7570, 7580,11178, 7584, 7571, 7573,
+
+ 7578, 7581, 7602, 7594, 7604, 7592, 7609, 7599, 7617, 7615,
+ 7623, 7611, 7618, 7629, 7607, 7628, 7619, 7616,11178, 7634,
+ 7632, 7644, 7647, 7640, 7643, 7659, 7650, 7667, 7664, 7654,
+ 7657, 7674,11178, 7678, 7660, 7669, 7687,11178, 7677, 7692,
+ 7675, 7694, 7684, 7689, 7699, 7703, 7713, 7712, 7722,11178,
+ 7728, 7711, 7725, 7715, 7730, 7733, 7726, 7720, 7742, 7752,
+ 7760, 7763,11178, 7738, 7755, 7769, 7771, 7772, 7759, 7778,
+ 7779, 7786, 7775, 7788,11178, 7792, 7804, 7807, 7801, 7790,
+ 7825, 7802, 7806, 7830, 7827, 7833, 7810, 7813, 7839, 7824,
+ 7836, 7837, 7840, 7847, 7841, 7852, 7863, 7857,11178, 7850,
+
+ 11178, 7858, 7866, 7879, 7886, 7890, 7876, 7892, 7889, 7895,
+ 7903, 7907,11178, 7885, 7888, 7909, 7905, 7915, 7928, 7925,
+ 7934,11178, 7926, 7930, 7935, 7931,11178, 7941, 7940, 7949,
+ 7954, 7947, 7948, 7978, 7979, 7981,11178, 7980, 7984, 7983,
+ 7989, 7990, 7985, 7991, 7986, 7992, 8010, 7996, 8011, 8007,
+ 8001, 8003, 8017, 8027,11178, 8029, 8036, 8035, 8037, 8038,
+ 8041, 8046, 8020, 8044, 8045, 8061,11178, 8052, 8056, 8058,
+ 8060, 8067, 8082, 8069, 8085, 8009, 8087, 8091, 8094, 8079,
+ 8083, 8096, 8099, 8106, 8098,11178, 8116, 8114, 8129, 8105,
+ 8140, 8131, 8109,11178, 8135,11178, 8123, 8132, 8147, 8142,
+
+ 8150,11178, 8149, 8138, 8157, 8155, 8162,11178,11178, 8164,
+ 8175, 8171, 8185, 8177,11178,11178, 8188,11178, 8174,11178,
+ 8179, 8178,11178,11178, 8191, 8173, 8189, 8176,11178, 8204,
+ 8206, 8214,11178, 8217,11178, 8227, 8205, 8228, 8219, 8215,
+ 8234,11178, 8221, 8242, 8231, 8238, 8230,11178, 8233, 8244,
+ 8241, 8232, 8255, 8236,11178, 8275, 8276, 8281, 8265, 8266,
+ 8269,11178, 8288, 8290, 8292, 8277, 8282, 8294, 8293, 8299,
+ 8309, 8313, 8317, 8325, 8311, 8312, 8328, 8335, 8322, 8341,
+ 8342, 8343, 8334, 8345, 8348, 8358, 8350, 8352, 8364, 8355,
+ 8356, 8359, 8361, 8368, 8380, 8384, 8378, 8387, 8399, 8390,
+
+ 8400, 8392, 8395, 8394, 8393, 8405, 8398, 8414, 8409, 8403,
+ 8415, 8417, 8426, 8422, 8423, 8424, 8439, 8440, 8432, 8453,
+ 8444, 8457, 8451, 8449, 8462,11178, 8445, 8466, 8470, 8481,
+ 8468, 8471, 8493, 8485, 8495, 8497, 8501, 8503, 8498, 8504,
+ 11178,11178,11178, 8506,11178, 8508, 8520, 8528, 8521, 8526,
+ 11178, 8522, 8525, 8523, 8524, 8534, 8537, 8536, 8555, 8558,
+ 8559, 8561, 8573,11178, 8571, 8560, 8562, 8568, 8582, 8580,
+ 11178, 8583, 8593, 8581, 8594, 8595, 8589, 8600, 8606, 8607,
+ 8614, 8609, 8627, 8622, 8611, 8632, 8617, 8635, 8639,11178,
+ 8643, 8646, 8567, 8642, 8647, 8648, 8649, 8657, 8656, 8650,
+
+ 8658, 8659, 8662, 8670, 8680, 8673, 8689, 8697, 8696, 8700,
+ 8701,11178, 8684,11178, 8695, 8698, 8707, 8712, 8708, 8716,
+ 8710, 8718, 8714,11178,11178, 8727, 8730, 8746, 8750, 8737,
+ 8735, 8751, 8744, 8741, 8754,11178, 8757, 8771, 8760, 8763,
+ 8761, 8776,11178, 8777, 8769, 8775, 8778, 8783, 8780, 8801,
+ 11178, 8794, 8799, 8805, 8810, 8812, 8796, 8814, 8820, 8821,
+ 8813, 8819, 8823, 8817,11178, 8824,11178,11178,11178, 8833,
+ 8840, 8832, 8853, 8842, 8850, 8851, 8856, 8857, 8859, 8862,
+ 8867, 8858,11178, 8871,11178,11178, 8869,11178, 8870, 8885,
+ 8883, 8895, 8886, 8897, 8896,11178, 8892,11178, 8911, 8912,
+
+ 8893, 8909, 8918, 8920, 8913, 8922, 8902, 8937, 8934, 8945,
+ 8924, 8935, 8640, 8951, 8952, 8932,11178, 8959, 8943, 8961,
+ 8963, 8965,11178,11178, 8962, 8968, 8971, 8972, 8996, 8977,
+ 8992, 8986, 8884, 8999, 9001, 9002, 9005, 8995, 9004, 8990,
+ 9020, 9021, 9013, 9023, 8974,11178, 9029, 9037, 9022,11178,
+ 9031,11178, 9039, 9041, 9048, 9033, 9052, 9045, 9050, 9056,
+ 9058, 9070, 9071,11178,11178, 9064, 9060, 9083,11178,11178,
+ 9069, 9073, 9075, 9080, 9090, 9097, 9086,11178, 9102, 9103,
+ 9107, 9091, 9110, 9113, 9114, 9117,11178, 9127,11178, 9123,
+ 9121, 9145, 9122, 9126, 9132, 9137, 9133, 9162, 9158, 9153,
+
+ 9140, 9163,11178, 9157, 9160,11178, 9167, 9172, 9177, 9164,
+ 9183, 9171, 9186,11178, 9178, 9185,11178, 9196, 9184, 9214,
+ 9215,11178, 9216, 9213, 9220, 9209,11178, 9219,11178, 9202,
+ 9221, 9223, 9232, 9227,11178, 9211, 9236, 9237, 9250,11178,
+ 9233, 9255, 9261, 9262, 9254, 9258,11178, 9268, 9252,11178,
+ 9249, 9272, 9273, 9275, 9276, 9280, 9277, 9287, 9279, 9292,
+ 9286, 9304,11178,11178, 9315, 9306, 9316, 9307, 115, 9321,
+ 9299, 9303, 9317, 9318, 9330, 9332, 9333, 9313, 9325, 9341,
+ 11178,11178, 9346, 9342,11178, 9345, 9351,11178, 9336, 9352,
+ 9357, 9349, 9365, 9344, 73, 9363, 9372, 9375, 9373, 9392,
+
+ 9377, 9379, 9388,11178, 9412, 9416, 9382, 9405, 9407, 9419,
+ 9423, 9425, 9428, 9411, 9431, 9413, 9415, 9435, 9434, 9432,
+ 9430, 9440, 9456, 9446, 9450, 9454,11178, 9469, 9478, 9476,
+ 9467, 9480, 9481, 9483, 9468,11178, 9484, 9491, 9485, 9494,
+ 11178, 9489, 9493, 9495, 9490, 9510, 9514,11178, 9506, 9500,
+ 9528, 9526, 9525, 9513, 9527, 9520, 9516, 9544,11178, 9529,
+ 9539, 9541,11178, 9543,11178,11178,11178, 9555, 9549, 9550,
+ 11178, 9567, 9559, 9553, 9556,11178, 9579, 9581, 9575, 9593,
+ 9577,11178,11178,11178, 9565, 9591, 9586,11178, 9583, 9598,
+ 11178, 9585,11178, 9588,11178, 9594, 9602, 9613, 9610,11178,
+
+ 9622, 9617,11178, 9621, 9615, 9624, 9646,11178, 9633, 9635,
+ 9639, 9634, 9625, 9636, 9648, 9649, 9652,11178,11178, 9658,
+ 9659, 9666, 9669, 9660, 9670, 9679, 9675, 9663, 9693, 9674,
+ 9689,11178, 9688, 9698, 9705, 9711, 9694, 9702, 9707,11178,
+ 9684,11178, 9714,11178, 9715, 9720, 9723, 9731, 9734, 9729,
+ 9727, 9740, 9747, 9737, 9739, 9750, 9744, 9758, 9742, 9765,
+ 9781, 9763,11178,11178, 9788, 9773,11178, 9783, 9791, 9793,
+ 11178, 9775,11178, 9794,11178, 9785, 9790,11178, 9792, 9795,
+ 9799,11178,11178, 9798, 9807, 9820, 9810, 9809, 9813, 9816,
+ 11178, 9838, 9828, 9822, 9826, 9830,11178, 9850,11178, 9831,
+
+ 9853, 9847,11178,11178, 9845, 9834, 9846, 9863, 9849, 9855,
+ 9870, 9872, 9876, 9861, 9891, 9865, 9886, 9873, 9895, 9896,
+ 9904, 9890, 9903, 9911, 9908,11178,11178,11178, 9907, 9917,
+ 9920, 9916, 9912, 9915, 9923, 9929, 9927,11178, 9944, 9951,
+ 9947, 9936, 9932, 9943, 9957,11178, 9946, 9948, 9956, 9964,
+ 9962, 9967, 9953, 9983,11178, 9968, 9990, 9997, 9993, 9985,
+ 9995,10001,10002,10003, 9996,10006, 9994, 9988,10016,10004,
+ 11178,11178,10018,10019,11178,10037,10038,11178,11178,10020,
+ 11178,10022,10026,10023,10029,10053,11178,10040,10031,10033,
+ 10041,11178,10043,10050,10061,10072,10069,11178,10056,10081,
+
+ 10065,10068,10084,10086,11178,11178,10076,10093,11178,10094,
+ 10099,10088,10103,10095,10098,10105,10112,11178,10108,11178,
+ 10115,10118,10116,10120,10122,10125,10126,10130,10135,11178,
+ 10143,10139,10149,10152,11178,10153,10157,10164,10156,10183,
+ 11178,10184,10166,10165,10185,11178,10167,10192,10193,11178,
+ 11178,11178,10174,10197,10198,11178,11178,11178,10203,11178,
+ 10205,10216,10204,10207,11178,10211,11178,11178,10227,10237,
+ 10241,10228,10243,10240,11178,10242,10248,10246,10231,10238,
+ 11178,11178,10251,10255,10239,10260,10258,10261,10254,10269,
+ 11178,11178,10266,10270,10288,10285,10283,11178,10282,10293,
+
+ 10296,10302,10297,10304,10303,10308,10311,10312,10299,10331,
+ 10328,10347,10318,10319,10333,10322,10345,10346,10335,10352,
+ 10358,10353,10356,10357,10361,10360,11178,11178,10366,10355,
+ 11178,10368,10380,11178,10372,11178,10391,10394,10397,10398,
+ 11178,10400,10401,10402,10404,10379,11178,10399,10409,11178,
+ 10410,10403,10407,10393,11178,10396,10414,10423,10422,10418,
+ 10430,10432,10446,10436,10451,11178,10437,10453,11178,11178,
+ 11178,10449,10438,10455,10435,10465,10450,11178,10464,10460,
+ 10470,10481,10471,10478,10473,11178,10493,10492,11178,11178,
+ 10498,10488,11178,10505,11178,10483,10487,11178,11178,11178,
+
+ 11178,11178,11178,11178,11178,10513,10519,11178,11178,10508,
+ 10504,10512,10524,11178,10527,11178,10514,10529,10539,10530,
+ 10532,11178,10528,11178,10549,10535,10541,10548,10559,10545,
+ 10562,10554,10564,10555,10568,10571,10577,10588,10566,10594,
+ 10580,10590,10598,10587,10608,10589,10607,11178,11178,11178,
+ 11178,10604,10593,10622,10623,10624,10637,10633,10640,10642,
+ 10643,10625,10626,10645,10650,10651,10636,10647,10652,10666,
+ 10664,10679,10658,10667,10681,10686,10690,11178,10692,10682,
+ 10677,10695,11178,10683,10688,11178,10678,10694,11178,11178,
+ 10700,10715,10693,10711,10723,10736,10718,10720,10721,10729,
+
+ 10735,11178,10737,11178,11178,11178,11178,10725,10724,11178,
+ 10727,10749,10739,10754,11178,10745,10748,10750,10757,10761,
+ 10759,10782,10784,10779,11178,11178,10763,10773,10775,11178,
+ 10786,10793,10798,10804,10806,10810,10812,10814,10805,10809,
+ 11178,10808,10818,10826,10811,11178,10836,10828,10841,10830,
+ 10833,10832,10835,10845,11178,10842,11178,10856,10864,10868,
+ 10860,10859,10863,10871,10872,10888,10876,10890,11178,10870,
+ 10900,10883,10905,10907,10909,10911,10903,10912,10913,10919,
+ 10923,10926,10930,10935,10928,10938,10929,11178,11178,10931,
+ 10940,11178,10939,10949,10941,10953,10962,11178,10961,10958,
+
+ 10964,10978,10973,10975,11178,10984,10992,10986,11178,10989,
+ 11178,11178,10990,10988,10999,10996,10997,11178,11178,11178,
+ 11058,11065,11072,11079,11086,11093,11100, 100,11107,11114,
+ 11121,11128,11135,11142,11149,11156,11163,11170
} ;
-static const flex_int16_t yy_def[3923] =
+static const flex_int16_t yy_def[3939] =
{ 0,
- 3904, 1, 3905, 3905, 3906, 3906, 3907, 3907, 3908, 3908,
- 3909, 3909, 3910, 3910, 3911, 3911, 3904, 3912, 3904, 3904,
- 3904, 3904, 3913, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3914, 3904, 3904,
- 3904, 3914, 3915, 3904, 3904, 3904, 3915, 3916, 3904, 3904,
- 3904, 3904, 3916, 3917, 3904, 3904, 3904, 3917, 3918, 3904,
- 3919, 3904, 3918, 3918, 3920, 3904, 3904, 3904, 3904, 3920,
- 3921, 3904, 3904, 3904, 3921, 3912, 3912, 3904, 3922, 3913,
- 3922, 3913, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
-
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3914, 3914, 3915, 3915, 3916, 3916, 3904, 3917,
- 3917, 3918, 3918, 3919, 3919, 3918, 3920, 3920, 3904, 3921,
- 3921, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
-
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3918, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
-
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3904, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3904, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3904, 3912,
-
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3918, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3904, 3912, 3912, 3904, 3912,
-
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3904, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3904, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3904, 3912, 3912, 3912, 3918, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
-
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3904, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
-
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3918, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3904, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
-
- 3912, 3912, 3912, 3912, 3904, 3912, 3904, 3904, 3912, 3912,
- 3904, 3904, 3912, 3912, 3904, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3904, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
-
- 3904, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3904, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3918, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3904, 3912, 3912, 3912, 3904, 3912,
-
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3904, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3904, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3904, 3912, 3904, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
-
- 3912, 3912, 3912, 3912, 3904, 3904, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3904, 3912, 3912, 3904, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3904, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3904, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3904, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
-
- 3912, 3912, 3912, 3904, 3912, 3912, 3912, 3912, 3912, 3912,
- 3918, 3918, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3904, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3904, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3904, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3904, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
-
- 3904, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3904, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3904, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
-
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3904, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3904, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3904, 3912, 3912, 3912,
- 3918, 3912, 3912, 3912, 3912, 3912, 3912, 3904, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3904, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3904, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3904, 3912, 3912, 3912,
-
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3904, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3904, 3912,
-
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3904, 3912, 3904, 3912, 3912, 3912, 3912, 3912, 3912, 3904,
- 3912, 3904, 3912, 3912, 3912, 3912, 3912, 3904, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3904, 3912, 3912, 3912, 3912, 3912, 3918, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
-
- 3912, 3904, 3912, 3912, 3912, 3912, 3912, 3912, 3904, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3904, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3904, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3904,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3904, 3912, 3904, 3912, 3912, 3912,
-
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3904, 3904, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3904, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3904, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3904, 3912, 3904, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3904,
-
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3904,
- 3912, 3904, 3912, 3912, 3912, 3918, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3904, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3904, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3904,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3904, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
-
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3904, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3904, 3904,
- 3912, 3912, 3912, 3904, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3904, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3904, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3904,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3904, 3912, 3912,
-
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3904, 3912, 3912, 3912, 3912, 3912, 3904,
- 3912, 3912, 3912, 3904, 3912, 3912, 3912, 3912, 3912, 3904,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3918, 3912, 3904, 3912, 3912, 3912, 3904,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3904, 3912, 3912, 3904, 3912, 3912,
- 3912, 3912, 3912, 3904, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
-
- 3912, 3912, 3912, 3912, 3904, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3904, 3904, 3912, 3904,
- 3912, 3912, 3912, 3912, 3904, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3904, 3912, 3912, 3904, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3904,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3904,
- 3912, 3912, 3912, 3912, 3912, 3904, 3904, 3912, 3904, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3904, 3912, 3912,
- 3912, 3912, 3912, 3912, 3904, 3912, 3912, 3912, 3912, 3912,
-
- 3912, 3912, 3912, 3912, 3912, 3912, 3904, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3904, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3904, 3912, 3912,
- 3912, 3912, 3904, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3904, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3904, 3904, 3912, 3904, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3904, 3912, 3912, 3918, 3912, 3912, 3912,
- 3912, 3904, 3912, 3912, 3904, 3912, 3904, 3912, 3912, 3912,
-
- 3912, 3912, 3912, 3912, 3912, 3912, 3904, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3904, 3912, 3912, 3912, 3912,
- 3904, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3904, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3904, 3912, 3904,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3904, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3904,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
-
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3904, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3904, 3912, 3912, 3912, 3912,
- 3904, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3904, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3904, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3904, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3904, 3912, 3904, 3912, 3912, 3912, 3912, 3912, 3912,
-
- 3912, 3912, 3912, 3918, 3912, 3904, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3904, 3912, 3912, 3912, 3912, 3904,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3904, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3904, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3904, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3904, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3904, 3912, 3904, 3912, 3912, 3912,
- 3912, 3912, 3904, 3912, 3912, 3912, 3912, 3912, 3904, 3904,
-
- 3912, 3912, 3912, 3912, 3912, 3904, 3904, 3912, 3904, 3912,
- 3904, 3912, 3912, 3904, 3904, 3912, 3912, 3912, 3912, 3904,
- 3912, 3912, 3912, 3904, 3912, 3904, 3912, 3912, 3912, 3912,
- 3912, 3912, 3904, 3912, 3912, 3912, 3912, 3912, 3904, 3912,
- 3912, 3912, 3912, 3912, 3912, 3904, 3912, 3912, 3912, 3912,
- 3912, 3912, 3904, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
-
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3918, 3912, 3912, 3912, 3912, 3904, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3904, 3904, 3904, 3912, 3904, 3912, 3912, 3912, 3912, 3912,
- 3904, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3904, 3912, 3912, 3912, 3912, 3912, 3912, 3904,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3904, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
-
- 3904, 3912, 3904, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3904, 3904, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3904, 3912, 3912, 3912, 3912, 3912,
- 3912, 3904, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3904,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3904, 3912, 3904, 3904, 3904, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3904, 3912, 3904, 3904, 3912, 3904, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3904, 3912, 3904, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3918, 3912, 3912, 3912,
-
- 3912, 3912, 3912, 3912, 3912, 3904, 3912, 3912, 3912, 3912,
- 3912, 3904, 3904, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3904, 3912, 3912, 3912, 3904, 3912, 3904, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3904, 3904, 3912, 3912, 3912, 3904, 3904, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3904, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3904, 3912, 3904, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3904,
- 3912, 3912, 3904, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
-
- 3904, 3912, 3912, 3904, 3912, 3912, 3912, 3912, 3904, 3912,
- 3912, 3912, 3912, 3904, 3912, 3904, 3912, 3912, 3912, 3912,
- 3912, 3904, 3912, 3912, 3912, 3912, 3904, 3912, 3912, 3912,
- 3912, 3912, 3912, 3904, 3912, 3912, 3904, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3904,
- 3904, 3912, 3912, 3912, 3912, 3918, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3904, 3904, 3912,
- 3904, 3912, 3912, 3904, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3904, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
-
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3904, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3904, 3912, 3912, 3912, 3912, 3904, 3912, 3912, 3912, 3912,
- 3912, 3912, 3904, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3904, 3912, 3912, 3912, 3904, 3912, 3904,
- 3904, 3904, 3912, 3912, 3912, 3904, 3912, 3912, 3912, 3912,
- 3904, 3912, 3912, 3912, 3912, 3912, 3904, 3904, 3904, 3912,
- 3912, 3912, 3904, 3912, 3912, 3904, 3912, 3904, 3912, 3904,
- 3912, 3912, 3912, 3912, 3904, 3912, 3912, 3904, 3912, 3912,
- 3912, 3912, 3904, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
-
- 3912, 3912, 3904, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3904, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3904, 3912, 3904, 3912, 3904, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3904, 3904, 3912, 3912,
- 3904, 3912, 3912, 3912, 3904, 3912, 3904, 3912, 3904, 3912,
- 3912, 3904, 3912, 3912, 3912, 3904, 3904, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3904, 3912, 3912, 3912, 3912, 3912,
- 3904, 3912, 3904, 3912, 3912, 3912, 3904, 3904, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
-
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3904,
- 3904, 3904, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3904, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3904,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3904, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3904, 3904, 3912, 3912, 3904, 3912,
- 3912, 3904, 3904, 3912, 3904, 3912, 3912, 3912, 3912, 3912,
- 3904, 3912, 3912, 3912, 3912, 3904, 3912, 3912, 3912, 3912,
- 3912, 3904, 3912, 3912, 3912, 3912, 3912, 3912, 3904, 3904,
- 3912, 3912, 3904, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
-
- 3912, 3904, 3912, 3904, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3904, 3912, 3912, 3912, 3912, 3904, 3912,
- 3912, 3912, 3912, 3912, 3904, 3912, 3912, 3912, 3912, 3904,
- 3912, 3912, 3912, 3904, 3904, 3904, 3912, 3912, 3912, 3904,
- 3904, 3904, 3912, 3904, 3912, 3912, 3912, 3912, 3904, 3912,
- 3904, 3904, 3912, 3912, 3912, 3912, 3912, 3912, 3904, 3912,
- 3912, 3912, 3912, 3912, 3904, 3904, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3904, 3904, 3912, 3912, 3912, 3912,
- 3912, 3904, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
-
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3904, 3904, 3912, 3912, 3904, 3912, 3912, 3904, 3912, 3904,
- 3912, 3912, 3912, 3912, 3904, 3912, 3912, 3912, 3912, 3912,
- 3904, 3912, 3912, 3904, 3912, 3912, 3912, 3912, 3904, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3904,
- 3912, 3912, 3904, 3904, 3904, 3912, 3912, 3912, 3912, 3912,
- 3912, 3904, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3904,
- 3912, 3912, 3904, 3904, 3912, 3912, 3904, 3912, 3904, 3912,
- 3912, 3904, 3904, 3904, 3904, 3904, 3904, 3904, 3904, 3912,
- 3912, 3904, 3904, 3912, 3912, 3912, 3912, 3904, 3912, 3904,
-
- 3912, 3912, 3912, 3912, 3912, 3904, 3912, 3904, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3904, 3904, 3904, 3904, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3904, 3912, 3912, 3912, 3912, 3904, 3912, 3912, 3904,
- 3912, 3912, 3904, 3904, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3904, 3912, 3904, 3904, 3904,
- 3904, 3912, 3912, 3904, 3912, 3912, 3912, 3912, 3904, 3912,
-
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3904, 3904,
- 3912, 3912, 3912, 3904, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3904, 3912, 3912, 3912, 3912, 3904,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3904, 3912,
- 3904, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3904, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912,
- 3912, 3904, 3904, 3912, 3912, 3904, 3912, 3912, 3912, 3912,
- 3912, 3904, 3912, 3912, 3912, 3912, 3912, 3912, 3904, 3912,
- 3912, 3912, 3904, 3912, 3904, 3904, 3912, 3912, 3912, 3912,
-
- 3912, 3904, 3904, 0, 3904, 3904, 3904, 3904, 3904, 3904,
- 3904, 3904, 3904, 3904, 3904, 3904, 3904, 3904, 3904, 3904,
- 3904, 3904
+ 3920, 1, 3921, 3921, 3922, 3922, 3923, 3923, 3924, 3924,
+ 3925, 3925, 3926, 3926, 3927, 3927, 3920, 3928, 3920, 3920,
+ 3920, 3920, 3929, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3930, 3920, 3920,
+ 3920, 3930, 3931, 3920, 3920, 3920, 3931, 3932, 3920, 3920,
+ 3920, 3920, 3932, 3933, 3920, 3920, 3920, 3933, 3934, 3920,
+ 3935, 3920, 3934, 3934, 3936, 3920, 3920, 3920, 3920, 3936,
+ 3937, 3920, 3920, 3920, 3937, 3928, 3928, 3920, 3938, 3929,
+ 3938, 3929, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3930, 3930, 3931, 3931, 3932, 3932, 3920, 3933,
+ 3933, 3934, 3934, 3935, 3935, 3934, 3936, 3936, 3920, 3937,
+ 3937, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3934, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3920, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3920, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3920, 3928,
+
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3934, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3920, 3928, 3928, 3920, 3928,
+
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3920, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3920, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3920, 3928, 3928, 3928, 3934, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3920, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3934, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3920, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+
+ 3928, 3928, 3928, 3928, 3920, 3928, 3920, 3920, 3928, 3928,
+ 3920, 3920, 3928, 3928, 3920, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3920, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+
+ 3920, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3920, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3934, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3920, 3928, 3928, 3928, 3920, 3928,
+
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3920, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3920, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3920, 3928, 3920, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+
+ 3928, 3928, 3928, 3928, 3920, 3920, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3920, 3928, 3928, 3920, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3920, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3920, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3920, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+
+ 3928, 3928, 3928, 3920, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3934, 3934, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3920, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3920, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3920,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3920, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+
+ 3928, 3920, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3920, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3920, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3920, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3920, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3920, 3928, 3928,
+ 3928, 3934, 3928, 3928, 3928, 3928, 3928, 3928, 3920, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3920, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3920, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3920, 3928,
+
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3920, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+
+ 3920, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3920, 3928, 3920, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3920, 3928, 3920, 3928, 3928, 3928, 3928, 3928, 3920,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3920, 3928, 3928, 3928, 3928, 3928, 3934,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+
+ 3928, 3928, 3928, 3920, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3920, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3920, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3920, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3920, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3920, 3928, 3920,
+
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3920, 3920, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3920, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3920, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3920, 3928, 3920, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+
+ 3928, 3928, 3920, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3920, 3928, 3920, 3928, 3928, 3928, 3934, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3920, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3920, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3920, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3920, 3928, 3928, 3928, 3928, 3928,
+
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3920, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3920, 3920, 3928, 3928, 3928, 3920, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3920, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3920, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3920, 3928, 3928, 3928, 3928, 3928, 3928,
+
+ 3928, 3920, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3920, 3928, 3928,
+ 3928, 3928, 3928, 3920, 3928, 3928, 3928, 3920, 3928, 3928,
+ 3928, 3928, 3928, 3920, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3934, 3928, 3920,
+ 3928, 3928, 3928, 3920, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3920, 3928,
+ 3928, 3920, 3928, 3928, 3928, 3928, 3928, 3920, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3920,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3920, 3920, 3928, 3920, 3928, 3928, 3928, 3928, 3920,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3920, 3928, 3928, 3920, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3920, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3920, 3928, 3928, 3928, 3928, 3928,
+ 3920, 3920, 3928, 3920, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3920, 3928, 3928, 3928, 3928, 3928, 3928, 3920,
+
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3920, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3920, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3920, 3928, 3928, 3928, 3928, 3920, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3920, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3920, 3920,
+ 3928, 3920, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3920, 3928,
+ 3928, 3934, 3928, 3928, 3928, 3928, 3920, 3928, 3928, 3920,
+
+ 3928, 3920, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3920, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3920, 3928, 3928, 3928, 3928, 3920, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3920, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3920, 3928, 3920, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3920, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3920, 3928, 3928, 3928,
+
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3920, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3920, 3928, 3928, 3928, 3928, 3920, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3920,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3920, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3920, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3920, 3928,
+
+ 3920, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3934, 3928, 3920, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3920, 3928, 3928, 3928, 3928, 3920, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3920, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3920, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3920, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3920, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3920, 3928, 3920, 3928, 3928, 3928, 3928,
+
+ 3928, 3920, 3928, 3928, 3928, 3928, 3928, 3920, 3920, 3928,
+ 3928, 3928, 3928, 3928, 3920, 3920, 3928, 3920, 3928, 3920,
+ 3928, 3928, 3920, 3920, 3928, 3928, 3928, 3928, 3920, 3928,
+ 3928, 3928, 3920, 3928, 3920, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3920, 3928, 3928, 3928, 3928, 3928, 3920, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3920, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3920, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3934, 3928, 3928, 3928, 3928, 3920, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3920, 3920, 3920, 3928, 3920, 3928, 3928, 3928, 3928, 3928,
+ 3920, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3920, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3920, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3920,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3920, 3928, 3920, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3920, 3920, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3920, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3920, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3920, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3920, 3928, 3920, 3920, 3920, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3920, 3928, 3920, 3920, 3928, 3920, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3920, 3928, 3920, 3928, 3928,
+
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3934, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3920, 3928, 3928, 3928,
+ 3928, 3928, 3920, 3920, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3920, 3928, 3928, 3928, 3920,
+ 3928, 3920, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3920, 3920, 3928, 3928, 3928, 3920, 3920,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3920, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3920, 3928, 3920, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+
+ 3928, 3928, 3920, 3928, 3928, 3920, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3920, 3928, 3928, 3920, 3928, 3928, 3928,
+ 3928, 3920, 3928, 3928, 3928, 3928, 3920, 3928, 3920, 3928,
+ 3928, 3928, 3928, 3928, 3920, 3928, 3928, 3928, 3928, 3920,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3920, 3928, 3928, 3920,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3920, 3920, 3928, 3928, 3928, 3928, 3934, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3920, 3920, 3928, 3928, 3920, 3928, 3928, 3920, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+
+ 3928, 3928, 3928, 3920, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3920, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3920, 3928, 3928, 3928, 3928,
+ 3920, 3928, 3928, 3928, 3928, 3928, 3928, 3920, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3920, 3928,
+ 3928, 3928, 3920, 3928, 3920, 3920, 3920, 3928, 3928, 3928,
+ 3920, 3928, 3928, 3928, 3928, 3920, 3928, 3928, 3928, 3928,
+ 3928, 3920, 3920, 3920, 3928, 3928, 3928, 3920, 3928, 3928,
+ 3920, 3928, 3920, 3928, 3920, 3928, 3928, 3928, 3928, 3920,
+
+ 3928, 3928, 3920, 3928, 3928, 3928, 3928, 3920, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3920, 3920, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3920, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3920,
+ 3928, 3920, 3928, 3920, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3920, 3920, 3928, 3928, 3920, 3928, 3928, 3928,
+ 3920, 3928, 3920, 3928, 3920, 3928, 3928, 3920, 3928, 3928,
+ 3928, 3920, 3920, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3920, 3928, 3928, 3928, 3928, 3928, 3920, 3928, 3920, 3928,
+
+ 3928, 3928, 3920, 3920, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3920, 3920, 3920, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3920, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3920, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3920, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3920, 3920, 3928, 3928, 3920, 3928, 3928, 3920, 3920, 3928,
+ 3920, 3928, 3928, 3928, 3928, 3928, 3920, 3928, 3928, 3928,
+ 3928, 3920, 3928, 3928, 3928, 3928, 3928, 3920, 3928, 3928,
+
+ 3928, 3928, 3928, 3928, 3920, 3920, 3928, 3928, 3920, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3920, 3928, 3920,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3920,
+ 3928, 3928, 3928, 3928, 3920, 3928, 3928, 3928, 3928, 3928,
+ 3920, 3928, 3928, 3928, 3928, 3920, 3928, 3928, 3928, 3920,
+ 3920, 3920, 3928, 3928, 3928, 3920, 3920, 3920, 3928, 3920,
+ 3928, 3928, 3928, 3928, 3920, 3928, 3920, 3920, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3920, 3928, 3928, 3928, 3928, 3928,
+ 3920, 3920, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3920, 3920, 3928, 3928, 3928, 3928, 3928, 3920, 3928, 3928,
+
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3920, 3920, 3928, 3928,
+ 3920, 3928, 3928, 3920, 3928, 3920, 3928, 3928, 3928, 3928,
+ 3920, 3928, 3928, 3928, 3928, 3928, 3920, 3928, 3928, 3920,
+ 3928, 3928, 3928, 3928, 3920, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3920, 3928, 3928, 3920, 3920,
+ 3920, 3928, 3928, 3928, 3928, 3928, 3928, 3920, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3920, 3928, 3928, 3920, 3920,
+ 3928, 3928, 3920, 3928, 3920, 3928, 3928, 3920, 3920, 3920,
+
+ 3920, 3920, 3920, 3920, 3920, 3928, 3928, 3920, 3920, 3928,
+ 3928, 3928, 3928, 3920, 3928, 3920, 3928, 3928, 3928, 3928,
+ 3928, 3920, 3928, 3920, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3920, 3920, 3920,
+ 3920, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3920, 3928, 3928,
+ 3928, 3928, 3920, 3928, 3928, 3920, 3928, 3928, 3920, 3920,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+
+ 3928, 3920, 3928, 3920, 3920, 3920, 3920, 3928, 3928, 3920,
+ 3928, 3928, 3928, 3928, 3920, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3920, 3920, 3928, 3928, 3928, 3920,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3920, 3928, 3928, 3928, 3928, 3920, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3920, 3928, 3920, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3920, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
+ 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3920, 3920, 3928,
+ 3928, 3920, 3928, 3928, 3928, 3928, 3928, 3920, 3928, 3928,
+
+ 3928, 3928, 3928, 3928, 3920, 3928, 3928, 3928, 3920, 3928,
+ 3920, 3920, 3928, 3928, 3928, 3928, 3928, 3920, 3920, 0,
+ 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920,
+ 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920
} ;
-static const flex_int16_t yy_nxt[11176] =
+static const flex_int16_t yy_nxt[11245] =
{ 0,
18, 19, 20, 21, 22, 23, 22, 18, 18, 18,
18, 18, 22, 24, 25, 26, 27, 28, 29, 18,
@@ -1726,15 +1729,15 @@ static const flex_int16_t yy_nxt[11176] =
22, 65, 66, 67, 65, 66, 67, 88, 163, 163,
86, 89, 355, 52, 121, 87, 52, 170, 170, 57,
- 122, 57, 173, 76, 77, 78, 79, 63, 22, 76,
+ 122, 57, 87, 76, 77, 78, 79, 63, 22, 76,
77, 78, 79, 63, 22, 82, 83, 84, 68, 99,
87, 68, 19, 20, 21, 70, 71, 72, 19, 20,
21, 70, 71, 72, 82, 83, 84, 123, 110, 180,
180, 80, 73, 162, 173, 87, 99, 80, 73, 87,
- 139, 91, 85, 91, 91, 87, 91, 181, 111, 809,
- 74, 87, 91, 87, 123, 110, 74, 179, 88, 73,
- 162, 85, 89, 163, 163, 73, 114, 139, 112, 178,
- 161, 173, 132, 176, 115, 111, 100, 87, 87, 92,
+ 139, 91, 85, 91, 91, 87, 91, 173, 111, 809,
+ 74, 87, 91, 87, 123, 110, 74, 181, 88, 73,
+ 162, 85, 89, 163, 163, 73, 114, 139, 112, 179,
+ 161, 178, 132, 176, 115, 111, 100, 87, 87, 92,
93, 94, 113, 101, 95, 116, 173, 102, 192, 96,
103, 97, 87, 114, 87, 112, 87, 161, 98, 132,
@@ -1742,73 +1745,73 @@ static const flex_int16_t yy_nxt[11176] =
101, 95, 116, 305, 102, 192, 96, 103, 97, 165,
183, 165, 165, 432, 165, 98, 104, 343, 117, 87,
105, 118, 182, 106, 184, 107, 108, 347, 119, 86,
- 120, 86, 86, 87, 86, 87, 109, 183, 87, 171,
+ 120, 86, 86, 87, 86, 87, 109, 183, 87, 173,
86, 87, 87, 104, 87, 117, 124, 105, 118, 87,
106, 184, 107, 108, 125, 119, 191, 120, 128, 87,
- 126, 187, 129, 109, 127, 87, 158, 169, 87, 150,
+ 126, 187, 129, 109, 127, 87, 158, 171, 87, 150,
- 159, 151, 87, 124, 160, 185, 130, 168, 131, 166,
- 152, 125, 164, 191, 87, 128, 153, 126, 187, 129,
+ 159, 151, 87, 124, 160, 185, 130, 169, 131, 168,
+ 152, 125, 166, 191, 87, 128, 153, 126, 187, 129,
87, 127, 87, 158, 154, 87, 150, 159, 151, 204,
- 87, 160, 185, 130, 155, 131, 133, 152, 156, 157,
- 134, 186, 87, 153, 135, 170, 170, 87, 181, 87,
+ 164, 160, 185, 130, 155, 131, 133, 152, 156, 157,
+ 134, 186, 87, 153, 135, 170, 170, 87, 87, 87,
136, 154, 167, 137, 167, 167, 204, 167, 188, 200,
- 138, 155, 87, 133, 87, 156, 157, 134, 186, 179,
+ 138, 155, 87, 133, 87, 156, 157, 134, 186, 181,
91, 135, 91, 91, 211, 91, 172, 136, 172, 172,
- 137, 172, 87, 87, 178, 188, 200, 138, 140, 254,
+ 137, 172, 87, 87, 179, 188, 200, 138, 140, 254,
87, 177, 141, 177, 177, 86, 177, 86, 86, 248,
86, 211, 142, 143, 189, 144, 86, 91, 175, 91,
91, 212, 91, 201, 87, 140, 254, 190, 91, 141,
- 87, 87, 193, 194, 173, 87, 248, 171, 87, 142,
- 143, 189, 144, 145, 207, 87, 146, 169, 212, 213,
+ 87, 87, 193, 194, 178, 87, 248, 173, 87, 142,
+ 143, 189, 144, 145, 207, 87, 146, 171, 212, 213,
201, 87, 205, 147, 190, 92, 195, 148, 149, 193,
194, 206, 196, 202, 197, 87, 198, 199, 180, 180,
145, 207, 87, 146, 87, 87, 213, 87, 215, 205,
- 147, 203, 233, 195, 148, 149, 221, 168, 206, 196,
+ 147, 203, 233, 195, 148, 149, 221, 169, 206, 196,
216, 197, 214, 198, 199, 87, 208, 209, 217, 87,
87, 218, 87, 87, 210, 215, 497, 224, 203, 233,
- 222, 166, 87, 223, 219, 220, 236, 216, 87, 214,
- 164, 87, 87, 208, 209, 217, 226, 225, 218, 87,
+ 222, 168, 87, 223, 219, 220, 236, 216, 87, 214,
+ 166, 87, 87, 208, 209, 217, 226, 225, 218, 87,
227, 210, 231, 232, 224, 87, 87, 222, 238, 229,
223, 219, 220, 236, 230, 87, 228, 87, 234, 237,
87, 239, 87, 226, 225, 235, 87, 227, 87, 231,
- 232, 240, 87, 241, 242, 238, 229, 87, 243, 87,
+ 232, 240, 87, 241, 242, 238, 229, 87, 243, 164,
244, 230, 87, 228, 245, 234, 237, 87, 239, 247,
- 246, 3904, 235, 3904, 87, 250, 87, 87, 240, 249,
+ 246, 87, 235, 3920, 87, 250, 87, 87, 240, 249,
241, 242, 87, 253, 251, 243, 87, 244, 256, 262,
252, 245, 255, 259, 362, 87, 247, 246, 87, 257,
87, 260, 250, 258, 87, 263, 249, 87, 87, 261,
253, 251, 87, 268, 349, 256, 262, 252, 266, 255,
- 259, 362, 264, 3904, 87, 265, 257, 269, 270, 267,
- 258, 87, 263, 87, 87, 87, 261, 271, 87, 3904,
- 268, 272, 275, 276, 277, 266, 87, 3904, 87, 264,
+ 259, 362, 264, 3920, 87, 265, 257, 269, 270, 267,
+ 258, 87, 263, 87, 87, 87, 261, 271, 87, 3920,
+ 268, 272, 275, 276, 277, 266, 87, 3920, 87, 264,
273, 278, 265, 279, 269, 270, 267, 87, 280, 87,
- 87, 281, 274, 3904, 271, 87, 87, 3904, 272, 275,
- 276, 277, 3904, 284, 87, 87, 87, 273, 278, 167,
+ 87, 281, 274, 3920, 271, 87, 87, 3920, 272, 275,
+ 276, 277, 3920, 284, 87, 87, 87, 273, 278, 167,
279, 167, 167, 282, 167, 280, 283, 285, 281, 274,
- 172, 3904, 172, 172, 91, 172, 91, 91, 177, 91,
+ 172, 3920, 172, 172, 91, 172, 91, 91, 177, 91,
- 177, 177, 286, 177, 287, 87, 291, 173, 87, 3904,
+ 177, 177, 286, 177, 287, 87, 291, 173, 87, 3920,
282, 87, 293, 283, 285, 288, 87, 289, 292, 87,
- 87, 295, 87, 294, 290, 297, 3904, 296, 298, 286,
+ 87, 295, 87, 294, 290, 297, 3920, 296, 298, 286,
353, 287, 175, 291, 87, 87, 87, 87, 301, 293,
87, 87, 288, 87, 289, 292, 87, 299, 295, 302,
294, 290, 297, 300, 296, 298, 303, 315, 304, 318,
- 306, 316, 87, 314, 307, 301, 317, 87, 1269, 1025,
- 319, 87, 87, 320, 323, 356, 302, 3904, 332, 87,
+ 306, 316, 87, 314, 307, 301, 317, 87, 1270, 1025,
+ 319, 87, 87, 320, 323, 356, 302, 3920, 332, 87,
300, 308, 87, 303, 315, 304, 318, 87, 87, 87,
314, 307, 87, 87, 322, 87, 321, 319, 87, 87,
320, 87, 324, 328, 325, 332, 87, 87, 308, 309,
- 329, 87, 326, 327, 310, 3904, 87, 342, 3904, 311,
+ 329, 87, 326, 327, 310, 3920, 87, 342, 3920, 311,
333, 322, 87, 321, 87, 312, 313, 87, 87, 324,
328, 325, 87, 334, 87, 330, 309, 329, 331, 326,
- 327, 310, 87, 3904, 342, 340, 311, 333, 344, 341,
- 87, 348, 312, 313, 3904, 87, 87, 345, 87, 350,
- 334, 357, 330, 372, 3904, 331, 335, 87, 346, 336,
+ 327, 310, 87, 3920, 342, 340, 311, 333, 344, 341,
+ 87, 348, 312, 313, 3920, 87, 87, 345, 87, 350,
+ 334, 357, 330, 372, 3920, 331, 335, 87, 346, 336,
358, 337, 340, 351, 87, 344, 341, 354, 348, 361,
352, 87, 363, 338, 87, 339, 87, 364, 357, 87,
372, 87, 87, 335, 87, 346, 336, 365, 337, 87,
@@ -1819,13 +1822,13 @@ static const flex_int16_t yy_nxt[11176] =
87, 87, 370, 360, 87, 366, 376, 87, 87, 380,
368, 377, 369, 87, 367, 382, 381, 374, 371, 87,
375, 87, 373, 385, 378, 386, 379, 387, 383, 384,
- 3904, 388, 87, 392, 87, 389, 380, 87, 87, 87,
+ 3920, 388, 87, 392, 87, 389, 380, 87, 87, 87,
390, 391, 393, 381, 394, 395, 397, 87, 87, 396,
385, 399, 87, 87, 387, 383, 384, 87, 388, 87,
87, 87, 389, 398, 87, 87, 402, 390, 391, 400,
403, 394, 407, 397, 87, 405, 396, 87, 87, 87,
- 3904, 406, 412, 409, 410, 408, 411, 404, 87, 87,
+ 3920, 406, 412, 409, 410, 408, 411, 404, 87, 87,
398, 87, 401, 87, 87, 87, 414, 403, 87, 407,
173, 87, 405, 87, 87, 415, 416, 417, 406, 412,
409, 410, 408, 411, 404, 419, 413, 418, 87, 401,
@@ -1833,71 +1836,71 @@ static const flex_int16_t yy_nxt[11176] =
426, 427, 87, 87, 417, 87, 87, 87, 87, 87,
428, 87, 87, 413, 418, 87, 430, 87, 420, 421,
87, 423, 429, 425, 422, 424, 431, 426, 434, 433,
- 3904, 435, 3904, 87, 87, 436, 439, 428, 87, 3904,
+ 3920, 435, 3920, 87, 87, 436, 439, 428, 87, 3920,
- 3904, 440, 87, 430, 444, 437, 87, 441, 442, 446,
+ 3920, 440, 87, 430, 444, 437, 87, 441, 442, 446,
448, 451, 87, 431, 87, 434, 433, 87, 435, 438,
87, 443, 436, 439, 87, 87, 87, 445, 440, 87,
447, 87, 437, 449, 441, 442, 87, 87, 451, 452,
- 87, 87, 87, 453, 454, 456, 438, 460, 443, 3904,
+ 87, 87, 87, 453, 454, 456, 438, 460, 443, 3920,
450, 459, 87, 457, 445, 87, 87, 447, 458, 461,
- 449, 87, 87, 3904, 87, 87, 452, 463, 455, 471,
+ 449, 87, 87, 3920, 87, 87, 452, 463, 455, 471,
462, 519, 456, 87, 460, 87, 87, 450, 459, 87,
457, 464, 465, 87, 466, 458, 461, 467, 468, 87,
- 87, 87, 470, 472, 463, 455, 87, 462, 473, 3904,
+ 87, 87, 470, 472, 463, 455, 87, 462, 473, 3920,
- 481, 87, 483, 87, 490, 469, 3904, 87, 464, 465,
+ 481, 87, 483, 87, 490, 469, 3920, 87, 464, 465,
87, 466, 87, 87, 467, 468, 491, 87, 87, 470,
- 472, 3904, 526, 499, 87, 473, 482, 481, 87, 483,
+ 472, 3920, 526, 499, 87, 473, 482, 481, 87, 483,
87, 490, 469, 474, 498, 87, 492, 495, 475, 493,
- 494, 476, 496, 491, 3904, 502, 477, 478, 479, 480,
- 87, 87, 3904, 482, 87, 3904, 87, 87, 87, 503,
+ 494, 476, 496, 491, 3920, 502, 477, 478, 479, 480,
+ 87, 87, 3920, 482, 87, 3920, 87, 87, 87, 503,
474, 498, 506, 492, 87, 475, 493, 494, 476, 87,
508, 87, 502, 477, 478, 479, 480, 484, 500, 485,
- 87, 501, 507, 3904, 504, 505, 503, 510, 87, 506,
+ 87, 501, 507, 3920, 504, 505, 503, 510, 87, 506,
511, 486, 487, 488, 87, 489, 512, 87, 87, 509,
- 87, 87, 514, 513, 484, 500, 485, 3904, 501, 507,
+ 87, 87, 514, 513, 484, 500, 485, 3920, 501, 507,
515, 504, 505, 87, 510, 87, 87, 511, 486, 487,
488, 87, 489, 512, 87, 87, 509, 516, 518, 514,
- 513, 517, 524, 3904, 520, 87, 521, 515, 87, 87,
- 87, 3904, 525, 527, 528, 522, 3904, 3904, 533, 530,
- 529, 531, 523, 540, 516, 518, 538, 1430, 517, 524,
+ 513, 517, 524, 3920, 520, 87, 521, 515, 87, 87,
+ 87, 3920, 525, 527, 528, 522, 3920, 3920, 533, 530,
+ 529, 531, 523, 540, 516, 518, 538, 1431, 517, 524,
87, 520, 532, 521, 87, 87, 87, 539, 534, 525,
527, 528, 522, 87, 87, 87, 530, 529, 531, 523,
87, 535, 541, 538, 536, 87, 537, 87, 542, 532,
- 555, 3904, 87, 87, 539, 534, 556, 87, 574, 576,
+ 555, 3920, 87, 87, 539, 534, 556, 87, 574, 576,
- 558, 3904, 3904, 575, 3904, 561, 3904, 559, 535, 87,
+ 558, 3920, 3920, 575, 3920, 561, 3920, 559, 535, 87,
87, 536, 87, 537, 557, 542, 543, 555, 544, 87,
- 87, 562, 560, 556, 545, 563, 3904, 558, 546, 87,
- 87, 87, 561, 547, 559, 87, 548, 3904, 87, 3904,
- 573, 557, 87, 543, 572, 544, 3904, 577, 562, 560,
+ 87, 562, 560, 556, 545, 563, 3920, 558, 546, 87,
+ 87, 87, 561, 547, 559, 87, 548, 3920, 87, 3920,
+ 573, 557, 87, 543, 572, 544, 3920, 577, 562, 560,
581, 545, 563, 579, 578, 546, 87, 584, 87, 173,
547, 580, 87, 548, 549, 582, 550, 573, 87, 87,
583, 572, 586, 87, 577, 599, 585, 581, 87, 551,
579, 578, 552, 87, 553, 87, 554, 589, 580, 87,
- 87, 549, 582, 550, 587, 588, 590, 583, 3904, 586,
+ 87, 549, 582, 550, 587, 588, 590, 583, 3920, 586,
- 3904, 87, 606, 585, 87, 593, 551, 87, 87, 552,
+ 3920, 87, 606, 585, 87, 593, 551, 87, 87, 552,
594, 553, 87, 554, 564, 565, 591, 87, 595, 87,
600, 587, 588, 590, 566, 567, 568, 569, 570, 606,
87, 571, 593, 601, 592, 596, 598, 594, 87, 87,
87, 564, 565, 591, 597, 595, 87, 600, 87, 602,
603, 566, 567, 568, 569, 570, 604, 87, 571, 87,
601, 592, 596, 598, 87, 605, 87, 607, 608, 87,
- 3904, 597, 609, 610, 3904, 611, 602, 603, 87, 612,
- 613, 614, 87, 604, 616, 615, 87, 3904, 617, 3904,
+ 3920, 597, 609, 610, 3920, 611, 602, 603, 87, 612,
+ 613, 614, 87, 604, 616, 615, 87, 3920, 617, 3920,
87, 87, 87, 621, 607, 608, 624, 87, 87, 618,
- 619, 87, 611, 640, 3904, 3904, 612, 613, 614, 87,
+ 619, 87, 611, 640, 3920, 3920, 612, 613, 614, 87,
87, 616, 615, 622, 627, 617, 87, 620, 626, 629,
621, 625, 87, 624, 87, 87, 618, 619, 623, 87,
87, 642, 87, 628, 641, 87, 87, 630, 631, 643,
622, 627, 87, 645, 620, 626, 629, 648, 625, 632,
644, 633, 87, 87, 654, 623, 87, 646, 642, 647,
628, 641, 87, 87, 630, 631, 643, 650, 87, 649,
- 87, 652, 3904, 658, 648, 87, 632, 644, 633, 634,
+ 87, 652, 3920, 658, 648, 87, 632, 644, 633, 634,
87, 87, 655, 651, 646, 653, 647, 635, 636, 87,
87, 637, 638, 87, 650, 639, 649, 87, 652, 87,
@@ -1905,9 +1908,9 @@ static const flex_int16_t yy_nxt[11176] =
651, 661, 653, 87, 635, 636, 87, 663, 637, 638,
664, 667, 639, 87, 665, 87, 87, 657, 669, 656,
659, 87, 666, 668, 662, 660, 87, 87, 661, 87,
- 87, 670, 87, 671, 663, 3904, 672, 664, 667, 673,
- 87, 665, 87, 674, 675, 669, 87, 676, 3904, 666,
- 668, 677, 682, 678, 3904, 680, 3904, 87, 670, 681,
+ 87, 670, 87, 671, 663, 3920, 672, 664, 667, 673,
+ 87, 665, 87, 674, 675, 669, 87, 676, 3920, 666,
+ 668, 677, 682, 678, 3920, 680, 3920, 87, 670, 681,
671, 87, 87, 672, 87, 87, 673, 87, 683, 685,
674, 675, 687, 679, 676, 87, 689, 87, 677, 87,
678, 87, 680, 684, 87, 686, 681, 688, 87, 87,
@@ -1915,27 +1918,27 @@ static const flex_int16_t yy_nxt[11176] =
87, 87, 691, 87, 87, 683, 685, 690, 87, 687,
679, 701, 694, 689, 87, 696, 692, 87, 693, 695,
684, 87, 686, 697, 688, 87, 87, 698, 700, 691,
- 699, 702, 3904, 87, 690, 708, 87, 703, 701, 694,
+ 699, 702, 3920, 87, 690, 708, 87, 703, 701, 694,
704, 705, 706, 692, 87, 693, 695, 87, 87, 707,
697, 709, 712, 87, 711, 87, 87, 699, 702, 87,
87, 87, 708, 710, 703, 87, 714, 704, 705, 706,
- 87, 3904, 715, 718, 717, 713, 707, 716, 87, 87,
- 87, 711, 87, 87, 87, 719, 720, 722, 3904, 3904,
- 710, 721, 3904, 714, 87, 87, 87, 725, 724, 715,
+ 87, 3920, 715, 718, 717, 713, 707, 716, 87, 87,
+ 87, 711, 87, 87, 87, 719, 720, 722, 3920, 3920,
+ 710, 721, 3920, 714, 87, 87, 87, 725, 724, 715,
718, 717, 713, 87, 716, 723, 87, 736, 87, 87,
734, 87, 719, 720, 722, 735, 87, 87, 721, 87,
- 737, 87, 738, 739, 725, 724, 765, 3904, 740, 775,
- 87, 87, 723, 726, 736, 3904, 770, 734, 727, 87,
+ 737, 87, 738, 739, 725, 724, 765, 3920, 740, 775,
+ 87, 87, 723, 726, 736, 3920, 770, 734, 727, 87,
728, 741, 735, 87, 744, 87, 729, 737, 730, 738,
739, 731, 732, 765, 745, 740, 87, 87, 733, 87,
726, 87, 742, 770, 87, 727, 743, 728, 741, 747,
749, 744, 748, 729, 746, 730, 87, 750, 731, 732,
- 87, 745, 3904, 752, 87, 733, 755, 751, 87, 742,
+ 87, 745, 3920, 752, 87, 733, 755, 751, 87, 742,
87, 753, 754, 743, 757, 87, 747, 749, 756, 748,
759, 746, 87, 760, 758, 87, 87, 761, 780, 87,
- 752, 762, 3904, 755, 751, 87, 87, 763, 753, 754,
+ 752, 762, 3920, 755, 751, 87, 87, 763, 753, 754,
87, 757, 87, 87, 764, 756, 87, 759, 766, 767,
760, 758, 87, 768, 761, 772, 769, 771, 762, 776,
87, 87, 773, 87, 763, 774, 777, 87, 87, 778,
@@ -1943,95 +1946,95 @@ static const flex_int16_t yy_nxt[11176] =
768, 779, 772, 769, 771, 87, 776, 783, 173, 773,
782, 87, 774, 777, 87, 784, 778, 786, 785, 87,
87, 787, 788, 789, 790, 791, 781, 792, 779, 87,
- 87, 793, 3904, 3904, 783, 796, 794, 782, 798, 87,
+ 87, 793, 3920, 3920, 783, 796, 794, 782, 798, 87,
87, 795, 784, 87, 786, 785, 87, 87, 787, 87,
797, 790, 799, 810, 87, 87, 803, 87, 793, 87,
87, 87, 796, 794, 800, 798, 806, 87, 795, 807,
804, 801, 87, 808, 802, 805, 87, 797, 811, 799,
- 87, 812, 87, 803, 813, 87, 816, 814, 817, 3904,
+ 87, 812, 87, 803, 813, 87, 816, 814, 817, 3920,
819, 800, 815, 806, 87, 87, 87, 818, 801, 820,
87, 802, 87, 821, 822, 87, 828, 824, 87, 823,
841, 87, 87, 816, 87, 817, 87, 819, 825, 87,
826, 87, 87, 87, 818, 827, 820, 830, 87, 87,
821, 822, 829, 87, 824, 831, 823, 835, 87, 87,
- 833, 832, 87, 834, 87, 825, 3904, 826, 87, 87,
- 87, 836, 827, 87, 830, 837, 3904, 87, 838, 829,
+ 833, 832, 87, 834, 87, 825, 3920, 826, 87, 87,
+ 87, 836, 827, 87, 830, 837, 3920, 87, 838, 829,
839, 842, 831, 87, 835, 840, 87, 833, 832, 87,
834, 87, 87, 843, 852, 848, 871, 87, 836, 849,
851, 850, 837, 87, 87, 838, 87, 839, 842, 844,
87, 87, 840, 853, 845, 856, 87, 846, 847, 854,
- 843, 852, 848, 87, 858, 87, 849, 851, 850, 3904,
- 855, 857, 87, 87, 3904, 87, 844, 859, 3904, 863,
+ 843, 852, 848, 87, 858, 87, 849, 851, 850, 3920,
+ 855, 857, 87, 87, 3920, 87, 844, 859, 3920, 863,
853, 845, 87, 862, 846, 847, 854, 87, 87, 87,
- 864, 858, 3904, 861, 867, 868, 865, 855, 857, 860,
+ 864, 858, 3920, 861, 867, 868, 865, 855, 857, 860,
87, 87, 866, 87, 859, 87, 863, 87, 869, 87,
862, 87, 87, 872, 87, 874, 873, 864, 870, 876,
861, 867, 868, 865, 87, 87, 860, 875, 877, 866,
87, 87, 87, 87, 878, 869, 879, 87, 880, 87,
872, 881, 874, 873, 893, 870, 876, 882, 883, 884,
- 3904, 87, 87, 885, 875, 877, 887, 886, 888, 889,
+ 3920, 87, 87, 885, 875, 877, 887, 886, 888, 889,
890, 878, 87, 879, 87, 895, 891, 87, 881, 894,
87, 87, 87, 87, 882, 896, 87, 87, 87, 898,
885, 87, 892, 887, 886, 888, 889, 890, 87, 899,
87, 87, 897, 891, 87, 908, 894, 87, 900, 87,
- 87, 87, 896, 901, 902, 3904, 898, 903, 910, 892,
- 904, 911, 909, 3904, 913, 912, 899, 905, 87, 897,
+ 87, 87, 896, 901, 902, 3920, 898, 903, 910, 892,
+ 904, 911, 909, 3920, 913, 912, 899, 905, 87, 897,
87, 87, 87, 914, 906, 907, 87, 87, 915, 918,
87, 902, 87, 87, 903, 910, 920, 904, 911, 909,
87, 913, 912, 87, 905, 916, 921, 919, 87, 922,
914, 906, 907, 924, 923, 915, 935, 925, 87, 87,
- 917, 87, 87, 920, 926, 928, 3904, 927, 930, 87,
- 929, 3904, 916, 921, 919, 87, 87, 87, 3904, 87,
+ 917, 87, 87, 920, 926, 928, 3920, 927, 930, 87,
+ 929, 3920, 916, 921, 919, 87, 87, 87, 3920, 87,
924, 87, 945, 937, 925, 936, 985, 917, 87, 87,
87, 926, 928, 931, 927, 930, 932, 929, 933, 938,
934, 87, 87, 939, 940, 87, 87, 87, 87, 941,
- 937, 87, 936, 87, 87, 87, 3904, 87, 87, 942,
+ 937, 87, 936, 87, 87, 87, 3920, 87, 87, 942,
931, 944, 946, 932, 947, 933, 938, 934, 943, 87,
- 939, 940, 948, 87, 949, 950, 941, 87, 3904, 954,
+ 939, 940, 948, 87, 949, 950, 941, 87, 3920, 954,
952, 87, 87, 87, 951, 953, 942, 87, 944, 946,
87, 947, 87, 960, 87, 943, 955, 1003, 962, 948,
- 3904, 949, 950, 87, 3904, 87, 954, 952, 956, 957,
+ 3920, 949, 950, 87, 3920, 87, 954, 952, 956, 957,
958, 951, 953, 959, 961, 87, 963, 87, 87, 964,
960, 87, 965, 955, 87, 962, 966, 87, 968, 87,
- 87, 967, 87, 971, 969, 956, 957, 958, 3904, 87,
+ 87, 967, 87, 971, 969, 956, 957, 958, 3920, 87,
959, 961, 87, 963, 87, 87, 964, 87, 970, 965,
87, 972, 973, 966, 976, 968, 87, 974, 967, 975,
- 971, 969, 87, 977, 978, 980, 3904, 979, 3904, 981,
- 982, 87, 3904, 87, 87, 970, 87, 87, 972, 973,
+ 971, 969, 87, 977, 978, 980, 3920, 979, 3920, 981,
+ 982, 87, 3920, 87, 87, 970, 87, 87, 972, 973,
983, 976, 87, 87, 974, 87, 975, 87, 87, 984,
977, 978, 980, 986, 979, 987, 981, 982, 87, 989,
- 988, 991, 3904, 990, 87, 992, 995, 983, 994, 3904,
- 996, 993, 87, 87, 87, 173, 984, 3904, 997, 87,
+ 988, 991, 3920, 990, 87, 992, 995, 983, 994, 3920,
+ 996, 993, 87, 87, 87, 173, 984, 3920, 997, 87,
986, 87, 987, 87, 87, 1000, 989, 988, 991, 87,
990, 1001, 992, 87, 998, 994, 87, 996, 993, 999,
1002, 1006, 1004, 1010, 1005, 997, 1007, 87, 87, 87,
87, 87, 1000, 1008, 1009, 87, 1011, 1012, 1001, 1013,
1015, 87, 87, 87, 87, 1014, 87, 1002, 1006, 1004,
- 1016, 1005, 1027, 1007, 87, 87, 87, 87, 3904, 87,
+ 1016, 1005, 1027, 1007, 87, 87, 87, 87, 3920, 87,
1008, 1009, 1024, 1026, 1012, 1028, 1013, 1015, 87, 1040,
- 87, 3904, 1014, 87, 87, 1029, 3904, 1016, 1017, 1027,
+ 87, 3920, 1014, 87, 87, 1029, 3920, 1016, 1017, 1027,
87, 1018, 1031, 1030, 1033, 1019, 87, 1034, 1020, 1024,
- 1026, 3904, 1028, 1035, 1063, 1021, 1022, 3904, 1023, 1064,
+ 1026, 3920, 1028, 1035, 1063, 1021, 1022, 3920, 1023, 1064,
87, 87, 1029, 87, 87, 1017, 1032, 87, 1018, 1031,
1030, 1033, 1019, 87, 1034, 1020, 1036, 87, 1037, 87,
- 1035, 1038, 1021, 1022, 1039, 1023, 87, 87, 3904, 1049,
- 3904, 87, 87, 1032, 87, 1050, 87, 1052, 1051, 1054,
- 3904, 1058, 87, 1036, 87, 1037, 87, 1062, 1038, 87,
- 1053, 1039, 1041, 1042, 3904, 1043, 1049, 87, 1044, 1057,
- 1055, 3904, 1050, 1045, 1052, 1051, 1054, 1059, 1058, 1046,
+ 1035, 1038, 1021, 1022, 1039, 1023, 87, 87, 3920, 1049,
+ 3920, 87, 87, 1032, 87, 1050, 87, 1052, 1051, 1054,
+ 3920, 1058, 87, 1036, 87, 1037, 87, 1062, 1038, 87,
+ 1053, 1039, 1041, 1042, 3920, 1043, 1049, 87, 1044, 1057,
+ 1055, 3920, 1050, 1045, 1052, 1051, 1054, 1059, 1058, 1046,
1047, 87, 1048, 87, 1062, 1065, 1056, 1053, 87, 1041,
1042, 87, 1043, 87, 1066, 1044, 1057, 1055, 1060, 87,
1045, 1061, 1067, 87, 1059, 87, 1046, 1047, 1068, 1048,
87, 1069, 1065, 1056, 87, 1073, 1071, 1070, 1075, 1072,
- 87, 1066, 1074, 1076, 3904, 1060, 1081, 1078, 1061, 1067,
+ 87, 1066, 1074, 1076, 3920, 1060, 1081, 1078, 1061, 1067,
87, 87, 1077, 87, 87, 1068, 1085, 87, 1069, 87,
87, 87, 87, 1071, 1070, 1075, 1072, 87, 1079, 1074,
@@ -2046,9 +2049,9 @@ static const flex_int16_t yy_nxt[11176] =
1102, 1103, 1104, 87, 87, 87, 1113, 1108, 1107, 87,
1110, 87, 1116, 1115, 1109, 87, 87, 1117, 1112, 1118,
- 1111, 87, 1119, 1120, 1122, 1114, 3904, 1121, 3904, 1123,
+ 1111, 87, 1119, 1120, 1122, 1114, 3920, 1121, 3920, 1123,
1124, 1125, 87, 1113, 87, 87, 87, 1127, 87, 87,
- 1115, 1126, 1128, 1129, 1117, 3904, 1118, 87, 87, 87,
+ 1115, 1126, 1128, 1129, 1117, 3920, 1118, 87, 87, 87,
1130, 1122, 1131, 87, 1121, 87, 1123, 1124, 1125, 87,
87, 1132, 1133, 87, 1127, 87, 1138, 87, 1126, 1128,
1129, 1134, 87, 1135, 1137, 1140, 1147, 1130, 1136, 1131,
@@ -2056,7 +2059,7 @@ static const flex_int16_t yy_nxt[11176] =
1146, 87, 87, 1138, 87, 87, 1144, 1142, 1134, 87,
87, 1137, 1140, 87, 1145, 87, 1148, 1149, 1141, 1139,
- 1150, 1152, 87, 1143, 1151, 87, 87, 1146, 1153, 3904,
+ 1150, 1152, 87, 1143, 1151, 87, 87, 1146, 1153, 3920,
87, 1154, 1156, 1144, 1142, 87, 87, 1158, 1155, 87,
1159, 1145, 1161, 1148, 1149, 87, 87, 1150, 1157, 87,
87, 1151, 87, 1160, 1162, 1153, 1163, 1164, 1154, 1156,
@@ -2066,886 +2069,894 @@ static const flex_int16_t yy_nxt[11176] =
1166, 1175, 87, 1167, 1172, 1182, 1168, 87, 87, 87,
1169, 87, 87, 1177, 1170, 87, 1174, 1179, 1178, 1176,
- 87, 3904, 1173, 87, 1183, 87, 1180, 1181, 1175, 1185,
+ 87, 3920, 1173, 87, 1183, 87, 1180, 1181, 1175, 1185,
1184, 1172, 1187, 87, 87, 1186, 1188, 87, 1189, 87,
- 1177, 3904, 1190, 87, 1179, 1178, 1196, 1191, 87, 1194,
+ 1177, 3920, 1190, 87, 1179, 1178, 1196, 1191, 87, 1194,
1197, 1198, 1192, 1180, 1181, 87, 87, 1184, 1195, 1187,
1193, 87, 1186, 1202, 87, 87, 1199, 87, 87, 1190,
87, 87, 87, 1196, 1191, 1200, 1194, 1201, 1204, 1192,
1205, 1203, 87, 87, 87, 1195, 1206, 1193, 87, 87,
- 87, 87, 1207, 1199, 1211, 87, 1208, 3904, 1213, 1212,
+ 87, 87, 1207, 1199, 1211, 87, 1208, 3920, 1213, 1212,
87, 1214, 1200, 1215, 1201, 87, 1218, 1205, 1203, 1209,
- 87, 1210, 1216, 1206, 87, 1217, 3904, 87, 87, 1207,
+ 87, 1210, 1216, 1206, 87, 1217, 3920, 87, 87, 1207,
87, 1219, 87, 1208, 87, 1213, 173, 1220, 1214, 87,
- 1215, 1221, 1222, 1218, 87, 87, 1209, 3904, 1210, 1216,
+ 1215, 1221, 1222, 1218, 87, 87, 1209, 3920, 1210, 1216,
1223, 1225, 1217, 87, 1227, 87, 1226, 1234, 1219, 1235,
- 87, 1224, 3904, 87, 1220, 87, 1238, 1236, 1221, 1222,
- 3904, 1239, 3904, 87, 87, 3904, 3904, 1223, 1225, 87,
- 3904, 1227, 3904, 1226, 1234, 87, 1235, 1237, 1224, 1228,
- 87, 1229, 1243, 87, 1236, 1230, 3904, 1231, 1239, 87,
- 1240, 1241, 1232, 1242, 87, 3904, 1247, 1233, 1244, 1245,
- 87, 1248, 1246, 87, 1237, 1249, 1228, 3904, 1229, 1243,
- 1259, 87, 1230, 87, 1231, 87, 1257, 1240, 1241, 1232,
+ 87, 1224, 3920, 87, 1220, 87, 1238, 1236, 1221, 1222,
+ 3920, 1239, 3920, 87, 87, 3920, 3920, 1223, 1225, 87,
+ 3920, 1227, 3920, 1226, 1234, 87, 1235, 1237, 1224, 1228,
+ 87, 1229, 1243, 87, 1236, 1230, 3920, 1231, 1239, 87,
+ 1240, 1241, 1232, 1242, 87, 3920, 1247, 1233, 1244, 1245,
+ 87, 1248, 1246, 87, 1237, 1249, 1228, 3920, 1229, 1243,
+ 3920, 87, 1230, 87, 1231, 87, 1257, 1240, 1241, 1232,
1242, 87, 1250, 87, 1233, 1244, 1245, 1251, 87, 1246,
- 1253, 1254, 1249, 1256, 1258, 87, 1268, 87, 87, 1252,
- 1260, 1255, 87, 1257, 1262, 1266, 87, 87, 87, 1250,
- 87, 1261, 1263, 87, 1251, 1264, 1267, 1253, 1254, 1265,
- 1256, 1258, 87, 87, 87, 1270, 1252, 1260, 1255, 1590,
- 1591, 1262, 1281, 1282, 87, 1271, 87, 87, 1261, 1263,
- 87, 87, 1264, 1272, 1273, 3904, 1265, 87, 87, 1284,
- 3904, 87, 1294, 87, 1283, 87, 1285, 87, 87, 1281,
- 1282, 1287, 1271, 3904, 87, 1286, 1291, 87, 3904, 1301,
- 1272, 1273, 1274, 1288, 87, 3904, 1284, 1275, 1289, 1276,
-
- 87, 1283, 87, 1285, 87, 1277, 87, 87, 1287, 87,
- 1278, 1279, 1286, 1291, 1290, 1292, 87, 1280, 87, 1274,
- 1288, 1295, 1293, 87, 1275, 1289, 1276, 87, 1298, 1304,
- 1296, 1297, 1277, 87, 3904, 1309, 3904, 1278, 1279, 87,
- 87, 1290, 1292, 87, 1280, 87, 1302, 1299, 1295, 1293,
- 1300, 1305, 1308, 1303, 1306, 1298, 87, 1296, 1297, 87,
- 87, 87, 87, 1307, 1310, 1312, 87, 87, 1311, 87,
- 1313, 1314, 1315, 1302, 1299, 87, 87, 1300, 1305, 1308,
- 1303, 1306, 87, 87, 1316, 87, 87, 1318, 87, 1319,
- 1307, 1310, 1312, 1317, 1320, 1311, 87, 1313, 1314, 1321,
-
- 1323, 87, 87, 1322, 87, 1324, 1325, 87, 1326, 87,
- 87, 1316, 1327, 1328, 1318, 87, 1319, 1329, 1334, 1333,
- 1317, 1320, 87, 87, 87, 87, 1321, 1323, 87, 87,
- 1322, 1331, 1324, 1325, 1330, 1326, 1336, 1345, 87, 1327,
- 1332, 87, 87, 1335, 1329, 87, 1333, 87, 1337, 87,
- 87, 87, 1338, 1343, 1339, 1340, 1341, 87, 1331, 1344,
- 1346, 1330, 1342, 1336, 87, 3904, 3904, 1332, 3904, 87,
- 1335, 87, 1347, 3904, 3904, 1337, 87, 87, 87, 1338,
- 1343, 1339, 1340, 1341, 87, 87, 1344, 1349, 1348, 1342,
- 87, 1350, 87, 1351, 1353, 1355, 1357, 1354, 1352, 1347,
-
- 87, 87, 87, 1356, 1358, 1359, 1360, 87, 1361, 87,
- 3904, 87, 1364, 1366, 1349, 1348, 87, 87, 1350, 3904,
- 87, 1353, 1355, 1357, 1354, 87, 87, 87, 1362, 1363,
- 1356, 1358, 1359, 1360, 1367, 1361, 1365, 1368, 1369, 3904,
- 1370, 87, 87, 87, 87, 87, 87, 1371, 1372, 1375,
- 1373, 87, 3904, 3904, 87, 1362, 1363, 1374, 1379, 87,
- 87, 1367, 1376, 1365, 1368, 1369, 87, 1370, 1377, 1378,
- 1381, 87, 87, 87, 1371, 1372, 1375, 1373, 1380, 87,
- 87, 87, 1382, 1384, 1374, 1379, 1383, 1385, 3904, 1376,
- 87, 87, 87, 1386, 1388, 1377, 1378, 1381, 1387, 87,
-
- 1389, 1390, 1395, 87, 1391, 1380, 1393, 87, 1394, 1382,
- 87, 87, 87, 1383, 87, 87, 1392, 1396, 87, 1397,
- 1386, 1388, 87, 87, 1400, 1387, 87, 1389, 1390, 1402,
- 87, 1391, 1398, 1393, 87, 1394, 1399, 1404, 1401, 1406,
- 1403, 1405, 3904, 1392, 3904, 1408, 87, 1407, 87, 87,
- 3904, 87, 1409, 1411, 87, 1410, 87, 1412, 87, 1398,
- 87, 87, 87, 1399, 1404, 1401, 87, 1403, 1405, 87,
- 87, 87, 87, 87, 1407, 87, 1414, 1413, 1415, 1409,
- 1411, 1416, 1410, 1418, 1412, 87, 1419, 1417, 1420, 1421,
- 1422, 1425, 87, 3904, 3904, 3904, 87, 87, 1424, 1423,
-
- 87, 87, 87, 1414, 1413, 1415, 1427, 3904, 1416, 87,
- 1418, 87, 1428, 1419, 1417, 1420, 1426, 1432, 87, 87,
- 87, 87, 87, 1429, 87, 1424, 1423, 87, 1431, 1434,
- 1433, 87, 87, 1427, 1435, 87, 1436, 87, 87, 1428,
- 1437, 1438, 87, 1426, 1432, 1441, 1442, 1439, 1440, 1444,
- 1429, 1450, 173, 1443, 87, 1431, 1434, 1433, 1448, 87,
- 87, 1435, 1445, 1436, 87, 87, 1447, 87, 1438, 87,
- 87, 1451, 1441, 1442, 1439, 1440, 1444, 1446, 87, 1449,
- 1443, 1452, 1453, 87, 87, 87, 87, 1454, 1455, 1445,
- 1457, 1456, 1458, 1447, 87, 87, 3904, 3904, 87, 1460,
-
- 87, 1461, 1467, 87, 1446, 87, 1449, 1459, 1452, 1453,
- 87, 1463, 87, 87, 1454, 1455, 87, 1457, 1456, 1458,
- 87, 87, 1462, 1464, 1465, 1466, 1460, 1468, 1461, 87,
- 87, 3904, 1469, 87, 1459, 87, 87, 1471, 1463, 1470,
- 87, 1472, 1473, 87, 1479, 3904, 87, 1480, 3904, 1462,
- 1464, 1465, 1466, 87, 1468, 87, 3904, 87, 1474, 1469,
- 1481, 1475, 1482, 87, 1471, 87, 1470, 87, 1472, 1473,
- 1476, 1479, 1477, 87, 1480, 1478, 1483, 1484, 1492, 1489,
- 1488, 1485, 87, 87, 1486, 1474, 1487, 1481, 1475, 87,
- 87, 1518, 87, 1497, 1493, 87, 87, 1476, 87, 1477,
-
- 1491, 87, 1478, 1483, 1484, 87, 1489, 1488, 1485, 1490,
- 87, 1486, 1494, 1487, 1495, 87, 87, 87, 1496, 3904,
- 87, 1493, 1498, 87, 1499, 87, 87, 1491, 1500, 1502,
- 87, 1501, 1503, 3904, 3904, 87, 1490, 3904, 3904, 1494,
- 1519, 1495, 1504, 3904, 87, 1496, 87, 87, 1505, 1498,
- 87, 1499, 87, 87, 87, 1500, 1502, 1506, 1501, 1503,
- 87, 1507, 1509, 1510, 1511, 87, 1513, 1519, 1512, 1504,
- 1508, 1514, 87, 1515, 87, 1505, 87, 3904, 3904, 87,
- 87, 3904, 3904, 87, 1506, 87, 1517, 1516, 1507, 1509,
- 1510, 1511, 1521, 1513, 87, 1512, 1520, 1508, 1514, 87,
-
- 1515, 1523, 87, 87, 1522, 1524, 1526, 1525, 87, 87,
- 87, 1528, 1527, 1517, 1516, 87, 87, 1530, 1529, 1521,
- 87, 3904, 3904, 1520, 87, 87, 1531, 1532, 1523, 1533,
- 1534, 1522, 1524, 1526, 1525, 1535, 1536, 87, 87, 1527,
- 87, 1542, 1538, 87, 1537, 1529, 87, 1539, 87, 87,
- 1543, 1541, 1540, 1531, 1532, 87, 1533, 1534, 87, 87,
- 87, 1553, 1535, 1536, 87, 1558, 3904, 1551, 1542, 1554,
- 3904, 1537, 1552, 1557, 87, 3904, 87, 1543, 1541, 1540,
- 1544, 87, 1555, 1559, 1545, 1556, 3904, 1546, 1547, 1568,
- 87, 87, 1548, 87, 1551, 87, 1554, 87, 1549, 1552,
-
- 1557, 1560, 1550, 1569, 87, 87, 87, 1544, 87, 1555,
- 1559, 1545, 1556, 1561, 1546, 1547, 1562, 3904, 1563, 1548,
- 1566, 87, 87, 87, 1564, 1549, 1565, 87, 1560, 1550,
- 1570, 1571, 1567, 1574, 1573, 87, 1576, 1578, 1621, 87,
- 1561, 87, 3904, 1562, 87, 1563, 87, 1566, 87, 87,
- 1577, 1564, 1579, 1565, 87, 1572, 87, 1570, 1571, 1567,
- 1574, 1573, 87, 1575, 1580, 87, 1581, 3904, 87, 87,
- 1587, 87, 87, 1588, 87, 1593, 3904, 1577, 3904, 1579,
- 87, 1589, 1572, 1594, 3904, 3904, 87, 87, 1592, 1595,
- 1575, 1580, 87, 1581, 1582, 87, 87, 1587, 87, 1583,
-
- 1588, 1584, 1593, 1585, 87, 1586, 1597, 87, 1589, 1596,
- 1594, 1600, 87, 1601, 1598, 1592, 1595, 1602, 87, 1599,
- 1603, 1582, 87, 1605, 87, 1609, 1583, 1610, 1584, 87,
- 1585, 87, 1586, 1597, 1611, 1604, 1596, 1606, 1600, 1608,
- 1601, 87, 87, 1607, 1602, 87, 87, 1603, 87, 87,
- 1605, 87, 87, 87, 1610, 1612, 1613, 87, 1614, 1615,
- 1616, 1611, 1604, 1619, 1606, 87, 1608, 1618, 1617, 87,
- 1607, 1620, 87, 1623, 87, 1624, 87, 1622, 87, 3904,
- 87, 1625, 1612, 1613, 1630, 1614, 1615, 1616, 87, 87,
- 1619, 1626, 1627, 87, 1618, 1617, 1632, 87, 1620, 1628,
-
- 87, 1633, 1624, 1629, 1622, 1631, 87, 87, 1625, 1634,
- 1635, 87, 87, 1638, 87, 87, 87, 1639, 1626, 1627,
- 1643, 87, 1641, 87, 87, 3904, 1628, 87, 1633, 1636,
- 1629, 87, 1631, 1637, 1642, 87, 1634, 1635, 1640, 87,
- 87, 87, 1644, 1646, 1639, 1645, 87, 1648, 87, 1641,
- 1647, 1651, 87, 1650, 1649, 1664, 1636, 1653, 1665, 87,
- 1637, 1642, 1652, 87, 87, 1640, 87, 87, 87, 1644,
- 1646, 87, 1645, 87, 1648, 87, 1654, 1647, 1651, 87,
- 1650, 1649, 1655, 1656, 1653, 1658, 1657, 87, 1660, 1652,
- 87, 3904, 1659, 3904, 3904, 87, 1661, 87, 1662, 1666,
-
- 1667, 1668, 1663, 1654, 87, 3904, 3904, 87, 87, 1655,
- 1656, 87, 1658, 1657, 87, 1660, 87, 87, 87, 1659,
- 1669, 87, 87, 1661, 1670, 1662, 1666, 1667, 1671, 1663,
- 1672, 1675, 87, 87, 1673, 1674, 1676, 1677, 87, 1679,
- 1678, 87, 87, 1681, 87, 87, 87, 1669, 1682, 1683,
- 1685, 1670, 173, 87, 87, 1671, 1680, 87, 1675, 1691,
- 87, 1673, 1674, 1676, 1677, 1684, 1679, 1678, 1690, 3904,
- 87, 1686, 1688, 1693, 1694, 87, 1683, 1687, 1689, 1692,
- 87, 87, 87, 1680, 87, 87, 87, 87, 87, 1696,
- 87, 87, 1684, 1695, 3904, 1690, 1697, 1700, 1686, 1688,
-
- 1693, 1694, 87, 87, 1687, 1689, 1692, 1698, 1699, 87,
- 1702, 1704, 1701, 1706, 1703, 87, 1696, 87, 87, 87,
- 1695, 87, 1705, 1697, 1700, 1711, 87, 1708, 1707, 1712,
- 87, 1713, 1709, 87, 1698, 1699, 1710, 87, 1704, 1701,
- 1706, 1703, 87, 87, 87, 87, 1720, 1719, 87, 1705,
- 1714, 3904, 1711, 1722, 1715, 1707, 1712, 1716, 1713, 87,
- 1724, 1717, 87, 1710, 1718, 87, 87, 1721, 3904, 1723,
- 1725, 87, 3904, 1720, 1719, 1726, 87, 1714, 1727, 1730,
- 87, 1715, 3904, 87, 1716, 87, 87, 1724, 1717, 1728,
- 87, 1718, 87, 1731, 1721, 1729, 1723, 1732, 1733, 1735,
-
- 1737, 87, 87, 1734, 87, 1727, 1730, 87, 1738, 1741,
- 87, 1736, 1744, 87, 1739, 87, 1728, 87, 87, 87,
- 1731, 87, 1729, 87, 1732, 1733, 1735, 1737, 1740, 1743,
- 1734, 1742, 87, 1745, 1746, 1738, 1741, 87, 1736, 1747,
- 87, 1739, 1752, 1754, 87, 87, 1748, 87, 87, 1751,
- 1749, 1750, 1753, 3904, 87, 1740, 1743, 87, 1742, 87,
- 1745, 1746, 87, 87, 87, 87, 1747, 1758, 1756, 1752,
- 1754, 1755, 87, 1748, 1759, 1760, 1751, 1749, 1750, 1753,
- 87, 87, 1757, 1762, 1766, 87, 1761, 87, 87, 1763,
- 87, 1764, 1765, 1767, 1758, 1756, 1773, 87, 1755, 1768,
-
- 87, 1759, 1760, 1770, 87, 1774, 1769, 1772, 1775, 1757,
- 1762, 1766, 1771, 1761, 87, 87, 1763, 1776, 87, 87,
- 1767, 1780, 1781, 87, 87, 3904, 87, 87, 87, 87,
- 1770, 1777, 1783, 1769, 1772, 1782, 1784, 87, 1788, 1771,
- 87, 87, 1785, 87, 1776, 87, 1832, 1787, 87, 1781,
- 1778, 87, 1779, 87, 1786, 87, 1790, 87, 1777, 1783,
- 1791, 1789, 1782, 1784, 87, 1788, 87, 87, 87, 1785,
- 1793, 1792, 1798, 87, 1787, 87, 1800, 1778, 87, 1779,
- 1794, 1786, 87, 1790, 87, 1795, 1796, 1791, 1789, 1799,
- 1803, 1797, 1801, 1802, 3904, 87, 87, 1793, 1792, 1798,
-
- 87, 87, 87, 1800, 1804, 1805, 1807, 1806, 87, 1808,
- 1814, 1812, 87, 87, 87, 87, 1799, 1803, 87, 1801,
- 1802, 1809, 1811, 87, 1813, 87, 87, 1810, 1817, 87,
- 3904, 1804, 1805, 1807, 1806, 1816, 87, 1815, 1812, 1818,
- 1819, 87, 87, 87, 1820, 87, 1824, 87, 1809, 1811,
- 1827, 1813, 87, 1821, 1810, 1822, 87, 1823, 87, 87,
- 87, 87, 1816, 87, 1815, 87, 1818, 1819, 1825, 1826,
- 1828, 1820, 1831, 1824, 87, 1829, 87, 1827, 1830, 1833,
- 1821, 87, 1822, 87, 1823, 1834, 87, 87, 1835, 1836,
- 1838, 3904, 1837, 3904, 87, 1825, 1826, 1828, 1844, 1831,
-
- 1839, 1843, 1829, 87, 87, 1830, 87, 87, 87, 1840,
- 87, 87, 1834, 1841, 87, 1835, 1836, 1838, 1846, 1837,
- 1845, 1848, 87, 1849, 1847, 1844, 1842, 1839, 1843, 1851,
- 87, 87, 87, 1850, 87, 1854, 1840, 1852, 1853, 1856,
- 1841, 1855, 87, 3904, 1862, 1846, 1857, 1845, 1848, 87,
- 87, 1847, 87, 1842, 1860, 87, 1863, 1865, 1869, 3904,
- 1850, 87, 87, 87, 1852, 1853, 1856, 87, 1855, 87,
- 1858, 1859, 87, 1857, 1867, 1861, 87, 87, 1864, 1866,
- 87, 1860, 87, 87, 1868, 87, 1870, 87, 1871, 87,
- 87, 1873, 1872, 87, 3904, 3904, 87, 1858, 1859, 1880,
-
- 1877, 1867, 1861, 1874, 3904, 1864, 1866, 1882, 3904, 1875,
- 87, 1868, 1876, 1870, 87, 87, 87, 87, 87, 1872,
- 87, 1888, 1878, 87, 87, 1879, 1880, 1877, 87, 1883,
- 1874, 1881, 87, 87, 1882, 1886, 1875, 1884, 87, 1876,
- 1885, 87, 1887, 87, 1889, 1890, 3904, 3904, 87, 1878,
- 1891, 3904, 1879, 87, 1892, 87, 1883, 87, 1881, 87,
- 1895, 1894, 1886, 87, 1884, 1896, 87, 1885, 87, 1887,
- 87, 1889, 1890, 1893, 1897, 87, 1898, 1891, 87, 1899,
- 1900, 1892, 1901, 87, 1903, 1904, 87, 1895, 1894, 1902,
- 87, 87, 1896, 1910, 1905, 1907, 87, 1906, 87, 3904,
-
- 1893, 1897, 87, 1898, 1909, 87, 1899, 87, 1913, 1901,
- 87, 1903, 1904, 87, 1911, 1908, 1902, 1916, 87, 1912,
- 87, 1905, 1907, 87, 1906, 1914, 87, 1915, 173, 1917,
- 1918, 1909, 87, 1919, 1920, 1913, 1924, 1921, 87, 87,
- 1923, 87, 1908, 87, 1916, 1922, 87, 87, 1925, 87,
- 87, 1927, 1914, 1929, 1915, 1931, 1917, 1918, 87, 1926,
- 1919, 1920, 87, 1924, 1921, 1932, 87, 1923, 1933, 1928,
- 87, 1930, 1922, 87, 1934, 1925, 87, 87, 1927, 87,
- 1929, 87, 87, 87, 1935, 1936, 1926, 1937, 1940, 1939,
- 87, 1941, 1932, 1938, 3904, 1933, 1928, 1942, 1930, 3904,
-
- 87, 1934, 1946, 1945, 87, 1943, 1944, 87, 1949, 87,
- 87, 1935, 1936, 87, 87, 1940, 1947, 1954, 1941, 87,
- 1938, 87, 1950, 87, 87, 87, 1951, 1952, 1948, 1946,
- 1945, 87, 1943, 1944, 87, 1949, 87, 1955, 87, 87,
- 1953, 87, 1956, 1947, 1954, 1957, 1962, 3904, 87, 1950,
- 1958, 87, 87, 1951, 1952, 1948, 1959, 87, 1964, 1960,
- 87, 1966, 1963, 87, 1955, 1967, 1968, 1953, 87, 1956,
- 1969, 1961, 1957, 1970, 1965, 1972, 1973, 1958, 87, 87,
- 87, 1977, 87, 1959, 87, 1964, 1960, 87, 1966, 1963,
- 1974, 1979, 1967, 1968, 87, 1975, 1971, 1969, 1961, 87,
-
- 87, 1965, 1976, 1978, 1987, 87, 1980, 87, 87, 1982,
- 1983, 1981, 87, 87, 1984, 87, 87, 1974, 1979, 87,
- 1985, 87, 1975, 1971, 1986, 87, 87, 1988, 87, 1976,
- 1978, 1987, 3904, 1980, 87, 1989, 1982, 1983, 1981, 87,
- 1991, 1990, 1992, 1994, 1993, 1995, 87, 1996, 1998, 3904,
- 87, 1997, 87, 87, 2003, 87, 87, 87, 87, 87,
- 1999, 87, 1989, 87, 87, 2004, 2000, 87, 1990, 1992,
- 1994, 1993, 1995, 87, 1996, 1998, 2001, 87, 1997, 87,
- 2002, 2003, 87, 2005, 2006, 87, 2007, 1999, 2009, 2011,
- 87, 87, 2004, 2000, 2008, 2010, 87, 2012, 2013, 2014,
-
- 3904, 87, 87, 2001, 87, 87, 2019, 2002, 87, 87,
- 2005, 2006, 87, 2007, 2015, 2009, 2011, 2017, 2018, 2022,
- 2021, 2008, 2020, 2024, 2012, 2013, 2014, 87, 2023, 87,
- 3904, 2039, 2016, 87, 87, 87, 87, 2026, 87, 2025,
- 87, 2015, 87, 87, 2017, 2018, 2022, 2021, 2027, 2020,
- 2024, 2028, 87, 2029, 87, 2023, 2030, 87, 87, 2016,
- 2033, 2037, 2038, 87, 2026, 87, 2025, 2031, 2040, 87,
- 2032, 87, 2034, 2036, 3904, 2027, 87, 2035, 2028, 2043,
- 2029, 2041, 87, 2030, 87, 87, 87, 2033, 2037, 2038,
- 2044, 2045, 2042, 2047, 2031, 87, 87, 2032, 2049, 2034,
-
- 2036, 87, 2046, 87, 2035, 87, 2043, 2050, 2041, 2048,
- 87, 2051, 2053, 87, 2054, 87, 2052, 87, 2045, 2042,
- 2047, 2061, 87, 87, 87, 2049, 2059, 2055, 2060, 2046,
- 2062, 87, 87, 87, 2050, 87, 2048, 2056, 2051, 2053,
- 2057, 2054, 2058, 2052, 87, 87, 3904, 2064, 87, 2063,
- 87, 2067, 2066, 2059, 2055, 87, 87, 2062, 2068, 2065,
- 87, 87, 87, 2069, 2056, 87, 2070, 2057, 87, 2058,
- 2071, 2072, 2073, 87, 2064, 2074, 2063, 3904, 2067, 2066,
- 2075, 87, 2077, 2076, 2084, 87, 2065, 2078, 87, 2080,
- 87, 2079, 3904, 2070, 87, 2085, 3904, 2071, 2072, 2073,
-
- 87, 87, 2074, 2081, 87, 2082, 87, 2075, 2083, 2077,
- 2076, 2084, 3904, 87, 2078, 87, 2080, 2086, 2079, 2087,
- 2088, 87, 2085, 87, 2091, 87, 87, 2092, 2089, 87,
- 2081, 2093, 2082, 2090, 2094, 2083, 87, 87, 2096, 87,
- 2095, 2097, 2098, 2099, 2086, 2102, 2087, 2088, 2107, 2100,
- 87, 2091, 2101, 87, 2092, 2104, 87, 2103, 2093, 2105,
- 87, 2094, 87, 2111, 3904, 87, 87, 2095, 2097, 87,
- 87, 87, 2106, 2108, 2112, 87, 2100, 87, 87, 2101,
- 87, 2117, 2104, 2109, 2103, 87, 2105, 87, 2113, 2110,
- 2114, 2118, 2116, 87, 2115, 87, 87, 2126, 87, 2106,
-
- 2108, 2112, 87, 87, 2120, 2127, 2119, 87, 2117, 87,
- 2109, 87, 2121, 2124, 2122, 2113, 2110, 2114, 2118, 2116,
- 87, 2115, 87, 2123, 2128, 2130, 87, 87, 2129, 87,
- 2134, 2120, 2136, 2119, 2125, 2132, 87, 87, 2131, 2121,
- 87, 2122, 87, 2140, 87, 87, 2133, 2143, 87, 2135,
- 2123, 2128, 87, 2137, 87, 2129, 2138, 87, 87, 2139,
- 2145, 2125, 2132, 87, 87, 2131, 2142, 87, 87, 87,
- 87, 2141, 2144, 2133, 2143, 2146, 2135, 2147, 87, 87,
- 2137, 2148, 87, 2138, 2151, 87, 2139, 2145, 2152, 87,
- 2149, 2155, 2153, 2142, 2154, 87, 2156, 87, 2141, 2144,
-
- 87, 2150, 2146, 87, 2147, 2157, 87, 2158, 2148, 173,
- 2160, 2151, 2159, 87, 87, 2152, 87, 2149, 2155, 2153,
- 87, 2154, 87, 87, 2161, 2162, 2164, 2163, 2150, 2165,
- 2166, 2171, 2157, 2168, 2158, 2169, 3904, 87, 87, 2159,
- 87, 87, 2167, 87, 2172, 87, 87, 87, 2170, 87,
- 2175, 2161, 2162, 2164, 2163, 87, 2165, 2166, 87, 87,
- 2168, 2173, 2169, 87, 2174, 2176, 2177, 2178, 2179, 2167,
- 87, 2172, 2180, 87, 2181, 2170, 2183, 87, 2182, 2184,
- 3904, 3904, 2185, 2187, 3904, 87, 87, 2186, 2173, 87,
- 87, 2174, 2176, 2177, 87, 2179, 87, 87, 2189, 2192,
-
- 3904, 2181, 2194, 87, 87, 2182, 87, 87, 87, 2185,
- 2187, 2188, 87, 2190, 2186, 2191, 2195, 2193, 87, 2197,
- 87, 87, 87, 2196, 87, 2189, 2192, 2203, 3904, 2194,
- 2200, 87, 2205, 2204, 2198, 87, 2206, 87, 2188, 87,
- 2190, 87, 2191, 2195, 2193, 87, 2197, 2199, 2201, 87,
- 2196, 2216, 87, 2208, 2203, 2202, 2207, 2200, 2209, 87,
- 2204, 2198, 87, 2210, 87, 2211, 87, 3904, 87, 2213,
- 87, 87, 2212, 2217, 2199, 2201, 87, 87, 2216, 87,
- 2208, 2218, 2202, 2207, 2214, 2209, 2215, 2220, 2219, 2225,
- 2210, 2221, 2211, 3904, 87, 87, 2213, 87, 2222, 2212,
-
- 87, 2223, 2227, 2224, 87, 2229, 2226, 87, 87, 87,
- 2231, 2214, 2228, 2215, 87, 2219, 87, 87, 2221, 2232,
- 2235, 2233, 2230, 87, 2234, 2222, 87, 2236, 2223, 87,
- 2224, 87, 2239, 2226, 87, 2238, 87, 87, 2237, 2228,
- 2240, 2242, 87, 87, 87, 87, 2232, 2235, 2233, 2230,
- 2241, 2234, 87, 2243, 87, 2244, 87, 87, 2246, 87,
- 2254, 2245, 2238, 87, 2263, 2237, 2251, 2240, 2242, 2247,
- 2248, 2249, 2253, 87, 3904, 87, 2250, 2241, 2252, 87,
- 2243, 87, 2244, 87, 87, 2258, 2257, 87, 2245, 87,
- 87, 2263, 87, 2251, 2255, 2256, 2247, 2248, 2249, 2253,
-
- 2264, 87, 87, 2250, 2259, 2252, 87, 87, 2262, 2260,
- 2261, 2266, 2258, 2257, 2265, 2267, 87, 2268, 2270, 2269,
- 87, 2255, 2256, 87, 87, 87, 87, 2264, 2271, 87,
- 2272, 2273, 2276, 87, 2274, 2262, 87, 2261, 87, 87,
- 2275, 2265, 2267, 87, 2268, 87, 2269, 2277, 2279, 2280,
- 2281, 87, 2282, 2278, 2284, 2271, 87, 2272, 2273, 87,
- 87, 2274, 2286, 2283, 2285, 2287, 87, 2275, 87, 87,
- 87, 2288, 87, 87, 87, 87, 2280, 2281, 87, 2282,
- 2278, 2289, 2290, 2291, 2292, 2295, 87, 87, 2294, 2286,
- 2283, 2285, 2287, 2297, 87, 2293, 87, 2298, 87, 2296,
-
- 87, 2299, 87, 87, 87, 2300, 2301, 2302, 2289, 2290,
- 2291, 2292, 87, 87, 87, 2294, 2303, 2304, 2306, 2307,
- 2297, 3904, 2293, 87, 2305, 2308, 2296, 87, 2299, 87,
- 2312, 2309, 87, 2301, 2302, 2313, 2311, 87, 87, 2314,
- 2315, 2310, 87, 87, 2304, 2318, 87, 87, 87, 87,
- 87, 2305, 2308, 87, 87, 2320, 2316, 2312, 2309, 87,
- 2317, 87, 2313, 2311, 87, 87, 2314, 2315, 2310, 2319,
- 87, 87, 2318, 2321, 3904, 2324, 2323, 2322, 3904, 2326,
- 2327, 2329, 2320, 2316, 87, 87, 87, 2317, 87, 2328,
- 2330, 2325, 2331, 87, 2336, 3904, 2337, 2332, 87, 2334,
-
- 87, 87, 2324, 2323, 2322, 87, 2326, 2327, 87, 87,
- 2335, 87, 2333, 2338, 87, 87, 2328, 2330, 2325, 2331,
- 87, 2336, 87, 2337, 2332, 2339, 2334, 2340, 2341, 2343,
- 3904, 2347, 2344, 2342, 2345, 2348, 87, 2335, 87, 2333,
- 87, 2346, 87, 87, 87, 2351, 2356, 87, 3904, 87,
- 87, 3904, 2339, 87, 2340, 2341, 87, 2349, 2347, 2344,
- 2342, 2345, 2348, 2350, 87, 2352, 2353, 2354, 2346, 2355,
- 87, 2357, 2358, 87, 87, 2360, 3904, 87, 87, 2362,
- 2361, 2363, 2359, 87, 2349, 2364, 87, 2365, 2368, 87,
- 2350, 87, 2352, 2353, 2354, 87, 2355, 87, 2357, 2358,
-
- 87, 2369, 2360, 87, 2371, 2366, 2362, 2361, 2363, 2359,
- 2367, 2373, 87, 2372, 87, 2370, 87, 2374, 2375, 2376,
- 87, 2377, 2378, 2379, 87, 2380, 87, 2381, 87, 2383,
- 87, 2371, 87, 87, 87, 2384, 2387, 87, 2382, 2388,
- 2372, 87, 2370, 87, 2374, 2375, 2376, 87, 2377, 2378,
- 87, 87, 2380, 2385, 87, 87, 2383, 2386, 173, 87,
- 2389, 87, 87, 2387, 87, 2382, 2388, 2391, 2390, 2392,
- 2398, 3904, 2394, 2393, 2395, 87, 87, 2396, 2397, 2399,
- 2385, 2400, 2401, 3904, 2386, 3904, 2402, 2389, 87, 87,
- 2403, 87, 2405, 2406, 2391, 2390, 87, 87, 87, 2394,
-
- 2393, 87, 87, 87, 2396, 87, 2399, 87, 2400, 2404,
- 87, 2407, 87, 2402, 87, 87, 2408, 2403, 2409, 2405,
- 2406, 2410, 2411, 3904, 2412, 2415, 2416, 87, 3904, 2413,
- 87, 2414, 2418, 2419, 3904, 2421, 2404, 87, 87, 2417,
- 87, 87, 3904, 2408, 87, 2409, 87, 87, 2410, 2411,
- 87, 2412, 2415, 87, 87, 87, 2413, 87, 2414, 2418,
- 2419, 2420, 87, 2422, 2423, 2424, 2417, 2425, 2428, 2429,
- 87, 2427, 2426, 3904, 87, 87, 2432, 2431, 87, 2430,
- 3904, 3904, 87, 2439, 3904, 87, 87, 2436, 2420, 87,
- 2422, 2423, 2424, 87, 2425, 87, 2429, 87, 2427, 2426,
-
- 87, 2433, 2435, 2432, 2431, 87, 2430, 2437, 2438, 87,
- 2439, 87, 2434, 2440, 2436, 87, 2442, 2441, 2445, 2443,
- 3904, 3904, 87, 2444, 2446, 87, 2452, 87, 2433, 2435,
- 2455, 87, 87, 2454, 2437, 2438, 2447, 87, 2448, 2434,
- 2440, 87, 2449, 2442, 2441, 87, 2443, 87, 87, 87,
- 2444, 2446, 2450, 87, 2451, 87, 2453, 2455, 87, 87,
- 2454, 2456, 2457, 2447, 87, 2448, 87, 87, 2458, 2449,
- 2460, 87, 2459, 2462, 87, 2461, 2464, 87, 2466, 2450,
- 2465, 2451, 2463, 2453, 2469, 2467, 2472, 2468, 2456, 2457,
- 87, 87, 87, 87, 87, 87, 2470, 87, 87, 2459,
-
- 2462, 87, 2461, 87, 2471, 2466, 2473, 2465, 87, 2463,
- 87, 2469, 2467, 2472, 2468, 2474, 2475, 2476, 2477, 87,
- 2478, 87, 87, 2470, 2479, 3904, 2490, 3904, 87, 2480,
- 87, 2471, 87, 2473, 2481, 2482, 87, 2488, 87, 87,
- 2489, 87, 2474, 2475, 2476, 2477, 3904, 2478, 2483, 2484,
- 2487, 2479, 2485, 87, 2491, 87, 2493, 87, 3904, 2492,
- 2494, 87, 2482, 87, 2488, 2486, 87, 2489, 2496, 2497,
- 3904, 2495, 2508, 87, 2504, 2483, 2484, 2487, 87, 2485,
- 87, 2491, 87, 2493, 2498, 2499, 2492, 2494, 2500, 87,
- 87, 2501, 2486, 87, 87, 2496, 2497, 2502, 2495, 2503,
-
- 2505, 2504, 2506, 2510, 87, 3904, 87, 87, 87, 87,
- 87, 2498, 2499, 2507, 2509, 2500, 2512, 87, 2501, 2511,
- 87, 87, 2513, 87, 2502, 87, 2503, 2505, 87, 2506,
- 2510, 2514, 87, 2516, 2515, 2517, 2518, 2520, 2519, 2521,
- 2507, 2509, 2523, 87, 87, 87, 2511, 87, 2522, 2513,
- 3904, 2524, 2531, 87, 2527, 87, 87, 87, 2514, 87,
- 2516, 2515, 2517, 2518, 2520, 2519, 87, 2525, 2528, 2523,
- 87, 87, 2526, 87, 2529, 2522, 87, 2530, 2524, 87,
- 2532, 2527, 2533, 2535, 2534, 2536, 2537, 87, 2539, 2538,
- 87, 2540, 87, 3904, 2543, 2528, 87, 87, 87, 87,
-
- 2545, 2529, 2546, 2544, 2530, 3904, 87, 2532, 87, 2533,
- 2535, 2534, 2541, 2537, 87, 2539, 2538, 87, 87, 2547,
- 2542, 87, 2548, 87, 2549, 2550, 87, 2545, 87, 2546,
- 2544, 87, 2551, 87, 3904, 2552, 2553, 87, 2555, 2541,
- 2557, 2559, 2561, 2556, 87, 3904, 2547, 2542, 87, 2548,
- 87, 2549, 2550, 2558, 2554, 87, 87, 87, 2560, 2551,
- 87, 87, 2552, 2553, 2562, 2563, 2567, 2557, 2559, 2561,
- 87, 87, 87, 2568, 2564, 3904, 3904, 2565, 3904, 3904,
- 2558, 2554, 3904, 2592, 87, 2560, 87, 87, 87, 2566,
- 2569, 2562, 2563, 2567, 2570, 2574, 87, 2571, 2572, 87,
-
- 87, 2564, 2575, 87, 2565, 2573, 87, 87, 87, 87,
- 87, 2576, 2577, 2578, 87, 2580, 2566, 2569, 3904, 2579,
- 2586, 2570, 2574, 2581, 2571, 2572, 87, 87, 87, 2575,
- 2582, 2584, 2573, 87, 2583, 3904, 3904, 87, 2576, 2577,
- 2578, 87, 2580, 87, 2585, 87, 2579, 2586, 87, 2587,
- 2581, 2588, 87, 87, 2590, 2589, 87, 2582, 2584, 2591,
- 2594, 2583, 2593, 87, 87, 2595, 2598, 2596, 2597, 2599,
- 2603, 2585, 2600, 3904, 87, 87, 2587, 87, 2588, 2607,
- 87, 2590, 2589, 87, 87, 2609, 2591, 87, 87, 2593,
- 2601, 87, 2595, 2598, 2596, 2597, 2599, 87, 2602, 2600,
-
- 2604, 2608, 87, 2605, 2610, 173, 87, 2611, 2606, 87,
- 2615, 87, 2609, 2612, 87, 2613, 3904, 2601, 2616, 87,
- 87, 2614, 2620, 87, 2621, 2602, 2622, 2604, 2619, 2623,
- 87, 2610, 2617, 87, 2611, 87, 2624, 87, 87, 2627,
- 2612, 87, 2613, 2618, 87, 2616, 87, 2626, 2614, 87,
- 87, 2621, 2625, 2622, 87, 2619, 2623, 2628, 2629, 2617,
- 2630, 87, 2631, 2632, 87, 2633, 2627, 3904, 87, 3904,
- 2618, 2635, 87, 2634, 2626, 2636, 3904, 87, 87, 2625,
- 3904, 2637, 87, 87, 2628, 87, 87, 2630, 2640, 2638,
- 2632, 2644, 2633, 87, 87, 2639, 87, 2641, 2635, 2646,
-
- 2634, 2642, 2636, 87, 2643, 3904, 87, 87, 2637, 2645,
- 87, 87, 87, 87, 87, 2640, 2638, 2647, 2644, 2649,
- 2648, 2650, 2639, 2655, 2641, 2656, 87, 2653, 2642, 2652,
- 87, 2643, 87, 2651, 87, 2654, 2645, 2658, 87, 87,
- 87, 87, 87, 87, 2647, 87, 2649, 2648, 2650, 2657,
- 2655, 2659, 2656, 2660, 2653, 2661, 2652, 2662, 87, 2669,
- 2651, 87, 2654, 87, 87, 87, 2664, 2663, 2666, 87,
- 87, 87, 2667, 2665, 87, 2670, 2657, 2668, 2659, 2673,
- 2660, 87, 2661, 87, 2662, 2671, 2675, 87, 2672, 2674,
- 2677, 87, 87, 2664, 2663, 2666, 2676, 87, 2678, 2667,
-
- 2665, 2682, 87, 87, 2668, 2679, 2673, 87, 2680, 2685,
- 87, 87, 2671, 2675, 87, 2672, 2674, 87, 2681, 2683,
- 87, 87, 87, 2676, 2684, 2678, 2687, 2686, 2682, 87,
- 2688, 2689, 2679, 87, 2690, 2680, 87, 2691, 2693, 3904,
- 2692, 2699, 87, 87, 2694, 2681, 2683, 2695, 87, 2696,
- 87, 2684, 87, 87, 2686, 2700, 2701, 2688, 2689, 87,
- 2706, 2690, 2705, 87, 2691, 87, 2697, 2692, 87, 2698,
- 87, 2694, 2702, 2703, 2695, 87, 2696, 87, 87, 2704,
- 87, 2707, 87, 2701, 87, 2709, 87, 87, 2710, 2705,
- 2708, 2711, 2712, 2697, 87, 2714, 2698, 87, 87, 2702,
-
- 2703, 2713, 2715, 2716, 87, 2718, 2704, 2717, 87, 2720,
- 2719, 2721, 87, 2722, 2724, 2710, 87, 2708, 87, 2712,
- 87, 87, 87, 87, 87, 87, 2723, 2725, 2713, 87,
- 2716, 87, 2718, 2726, 2717, 87, 87, 2719, 2721, 2728,
- 2722, 87, 2727, 2729, 2730, 2733, 3904, 2731, 87, 2734,
- 2736, 87, 2740, 2723, 2725, 2735, 2739, 87, 2741, 2743,
- 87, 87, 2732, 87, 87, 87, 2728, 87, 87, 2727,
- 2729, 2730, 87, 87, 2731, 87, 2734, 2736, 2737, 2738,
- 2742, 2744, 2735, 87, 87, 2741, 2743, 87, 2745, 2732,
- 87, 2746, 87, 87, 2747, 2748, 2749, 2750, 3904, 2751,
-
- 2753, 2756, 87, 2754, 2759, 2737, 2738, 2742, 2744, 87,
- 87, 87, 2755, 2752, 87, 2745, 87, 87, 87, 87,
- 2757, 2747, 2748, 2749, 2750, 87, 2751, 87, 2756, 87,
- 2754, 2759, 87, 2758, 2760, 87, 2761, 2762, 2767, 2755,
- 2752, 2763, 87, 3904, 2768, 3904, 3904, 2757, 3904, 3904,
- 2764, 2769, 2782, 2770, 2771, 87, 2772, 3904, 87, 87,
- 2758, 2760, 87, 2761, 2762, 2765, 87, 2766, 2763, 2775,
- 87, 2768, 2773, 87, 87, 87, 87, 2764, 2769, 2774,
- 2770, 2771, 2776, 2772, 87, 87, 87, 87, 2777, 87,
- 2778, 2779, 2765, 2781, 2766, 2783, 2775, 2780, 2785, 2773,
-
- 2786, 2784, 2791, 3904, 87, 87, 2774, 87, 2787, 2776,
- 87, 2788, 87, 87, 2789, 2777, 87, 2778, 2779, 87,
- 2781, 2793, 2790, 2798, 2780, 2785, 87, 87, 2784, 2791,
- 87, 2799, 87, 87, 2794, 2787, 87, 2792, 2788, 87,
- 2795, 2789, 2796, 2797, 87, 2800, 2801, 2802, 2793, 2790,
- 2804, 2805, 87, 87, 87, 87, 87, 2803, 87, 2811,
- 87, 2794, 2808, 87, 2792, 2809, 2812, 2795, 87, 2796,
- 2797, 2806, 2800, 2801, 2802, 87, 87, 2804, 87, 2807,
- 2813, 2810, 2814, 87, 2803, 87, 2811, 87, 173, 2808,
- 87, 2815, 2809, 2812, 2816, 2817, 2819, 87, 2806, 87,
-
- 2818, 2820, 87, 2822, 2824, 87, 2807, 2813, 2810, 2814,
- 2821, 2823, 87, 3904, 87, 87, 2827, 2831, 2815, 87,
- 2825, 2816, 87, 2819, 2826, 87, 87, 2818, 2820, 87,
- 2822, 2824, 87, 2828, 2829, 2830, 2832, 2821, 2823, 87,
- 87, 87, 2833, 2827, 87, 2834, 2835, 2825, 2837, 2838,
- 87, 2826, 2836, 2839, 3904, 87, 2840, 2841, 2848, 3904,
- 2828, 2829, 2830, 87, 2842, 3904, 2843, 2844, 3904, 87,
- 87, 87, 2834, 87, 87, 2837, 87, 87, 2847, 2836,
- 2846, 87, 87, 2840, 87, 87, 2845, 2849, 87, 2850,
- 87, 2842, 87, 2843, 2844, 2851, 2852, 2853, 3904, 87,
-
- 87, 3904, 2860, 2854, 87, 2847, 2855, 2846, 2856, 2857,
- 2858, 87, 2862, 2845, 2849, 2859, 2850, 87, 87, 2866,
- 87, 2870, 2851, 2852, 87, 87, 87, 87, 87, 87,
- 2854, 2861, 87, 2855, 87, 2856, 2857, 2858, 87, 2862,
- 2863, 2864, 2859, 2865, 2868, 87, 2866, 87, 87, 2867,
- 87, 87, 2869, 87, 2871, 3904, 2872, 2874, 2861, 2873,
- 3904, 2875, 2879, 2880, 2883, 2876, 87, 2863, 2864, 87,
- 2865, 2868, 87, 87, 87, 87, 2867, 2877, 87, 2869,
- 2881, 2871, 87, 2872, 2874, 87, 2873, 2878, 2875, 87,
- 2880, 87, 2876, 87, 2882, 2884, 87, 2886, 2885, 87,
-
- 3904, 2887, 2888, 3904, 2877, 2889, 2891, 2881, 2890, 2899,
- 2892, 2894, 2896, 87, 2878, 87, 87, 87, 87, 87,
- 2893, 2882, 87, 87, 2886, 2885, 2895, 87, 2887, 2888,
- 87, 2897, 2889, 2891, 87, 2890, 87, 2892, 2894, 2896,
- 2898, 87, 2901, 2902, 87, 2900, 2903, 2893, 2906, 2905,
- 87, 3904, 2907, 2895, 2913, 2904, 2914, 87, 2897, 87,
- 87, 87, 87, 87, 87, 2908, 87, 2898, 2909, 87,
- 2902, 2911, 2900, 87, 87, 2906, 2905, 87, 2910, 2907,
- 2912, 87, 2904, 87, 87, 2915, 2917, 2916, 2918, 2920,
- 3904, 2919, 2908, 87, 87, 2909, 87, 2922, 2911, 87,
-
- 2921, 2925, 87, 2929, 2923, 2910, 2932, 2912, 87, 2926,
- 2924, 87, 87, 2917, 2916, 2918, 2920, 87, 2919, 87,
- 87, 87, 2927, 2928, 2922, 87, 2934, 2921, 87, 2930,
- 2931, 2923, 2938, 87, 2933, 87, 2926, 2924, 87, 2935,
- 87, 87, 87, 2939, 87, 2940, 2941, 87, 3904, 2927,
- 2928, 87, 3904, 2934, 2936, 2937, 2930, 2931, 87, 2938,
- 2943, 2933, 87, 2944, 2945, 2942, 2935, 2947, 87, 87,
- 2939, 2946, 87, 2941, 87, 2948, 2951, 87, 87, 2950,
- 87, 2936, 2937, 87, 2949, 2953, 87, 2943, 87, 2954,
- 2944, 2945, 2942, 2952, 2947, 2956, 87, 2955, 2946, 87,
-
- 87, 87, 2948, 2951, 2957, 2958, 2950, 87, 2959, 87,
- 2961, 2949, 2953, 2960, 2962, 2966, 87, 2963, 2971, 87,
- 2952, 2964, 87, 87, 2955, 2965, 2967, 2972, 3904, 87,
- 87, 87, 87, 87, 2968, 2959, 87, 2961, 87, 2969,
- 2960, 2962, 2966, 87, 2963, 2971, 87, 87, 2964, 87,
- 2970, 87, 2965, 2967, 87, 2973, 87, 2974, 2975, 2976,
- 2977, 2968, 2981, 87, 2978, 2980, 2969, 2983, 2979, 87,
- 2985, 2982, 2986, 2987, 87, 87, 2984, 2970, 2991, 87,
- 87, 87, 2973, 87, 87, 87, 2976, 87, 87, 2981,
- 87, 2978, 2980, 87, 2983, 2979, 2990, 87, 2982, 2986,
-
- 87, 2988, 87, 2984, 2989, 2991, 2992, 2993, 2995, 2994,
- 87, 87, 2996, 87, 2997, 3904, 2998, 3904, 3000, 87,
- 2999, 3003, 3904, 2990, 87, 87, 87, 3006, 2988, 173,
- 87, 2989, 3001, 2992, 2993, 2995, 2994, 87, 87, 2996,
- 3002, 2997, 87, 2998, 87, 3000, 3004, 2999, 3003, 87,
- 3005, 87, 3007, 3009, 87, 3904, 87, 3008, 3012, 3001,
- 3010, 3011, 3013, 3904, 3014, 3017, 87, 3002, 3015, 3904,
- 3016, 3904, 87, 3004, 87, 3904, 3904, 3005, 3904, 3007,
- 3009, 87, 87, 87, 3008, 87, 3018, 3010, 3011, 87,
- 87, 3014, 3017, 3019, 87, 3015, 87, 3016, 3020, 3021,
-
- 3022, 87, 87, 3023, 3024, 3025, 87, 3026, 87, 87,
- 87, 87, 3027, 3018, 87, 3028, 3904, 3031, 3032, 3029,
- 3019, 3033, 87, 87, 3030, 3020, 3021, 3022, 87, 3036,
- 3023, 3024, 3025, 87, 3026, 3035, 3034, 87, 3037, 3027,
- 87, 87, 3028, 87, 3031, 3032, 3029, 87, 87, 87,
- 3038, 3030, 3039, 3043, 3904, 3040, 3036, 3041, 3042, 3044,
- 3045, 3046, 3035, 3034, 87, 87, 87, 87, 87, 87,
- 87, 87, 3047, 87, 3049, 3050, 3051, 3038, 3052, 87,
- 3043, 3048, 3040, 87, 3041, 3042, 3044, 3045, 3046, 87,
- 3055, 3053, 3056, 3057, 3058, 87, 3065, 87, 87, 3047,
-
- 3054, 3049, 3050, 87, 3059, 87, 3060, 3064, 3048, 87,
- 3061, 87, 3063, 87, 3066, 87, 3062, 3055, 3053, 87,
- 87, 87, 87, 87, 87, 87, 87, 3054, 3067, 87,
- 3069, 3059, 3070, 3060, 3064, 87, 3072, 3061, 3068, 3063,
- 3071, 3066, 3904, 3062, 3073, 87, 87, 87, 87, 3074,
- 3075, 3076, 3077, 3079, 3078, 3067, 3904, 3069, 87, 3070,
- 87, 87, 3082, 3072, 3084, 3068, 3081, 3071, 3080, 87,
- 3904, 3073, 87, 87, 3086, 87, 87, 3075, 87, 3077,
- 3079, 3078, 87, 87, 87, 3083, 87, 3085, 3090, 3082,
- 3087, 3084, 87, 3081, 87, 3080, 3088, 87, 3089, 3091,
-
- 3092, 3086, 3093, 3094, 3095, 87, 3904, 3099, 3097, 87,
- 3096, 87, 3083, 3101, 3085, 87, 87, 3087, 3100, 87,
- 87, 3104, 87, 3088, 3098, 3089, 3091, 3092, 87, 87,
- 3094, 3095, 3102, 87, 3099, 3097, 87, 3096, 3103, 3106,
- 87, 87, 3105, 3107, 3109, 3100, 87, 87, 87, 87,
- 87, 3098, 3110, 3108, 3111, 3112, 3904, 3113, 3114, 3102,
- 87, 3116, 87, 3904, 3117, 3103, 3106, 87, 3115, 3105,
- 3107, 87, 87, 3122, 3118, 3120, 87, 3124, 87, 3110,
- 3108, 3111, 3112, 87, 3113, 87, 87, 3119, 87, 3121,
- 87, 3117, 87, 3123, 3125, 3115, 87, 3127, 87, 87,
-
- 87, 3118, 3120, 87, 3124, 3126, 3904, 3134, 3128, 3129,
- 87, 3130, 87, 3131, 3119, 3132, 3121, 3136, 3137, 3133,
- 3123, 3125, 87, 87, 87, 87, 3140, 3138, 3139, 87,
- 3141, 87, 3126, 87, 87, 3128, 3129, 87, 3130, 87,
- 3131, 3135, 3132, 3142, 3136, 87, 3133, 3144, 87, 87,
- 87, 3143, 87, 3140, 3138, 3139, 3145, 3141, 3147, 87,
- 3146, 3149, 87, 3150, 3148, 87, 3151, 3152, 3135, 3153,
- 3142, 3904, 87, 87, 3144, 87, 3154, 3156, 3143, 3157,
- 87, 87, 3161, 3145, 3155, 3147, 87, 3146, 3149, 87,
- 87, 3148, 87, 87, 3152, 3158, 3153, 3162, 87, 87,
-
- 3159, 3160, 3904, 3154, 173, 3164, 3157, 3163, 3166, 87,
- 87, 3155, 3165, 3168, 87, 3167, 3169, 87, 87, 87,
- 87, 3171, 3158, 3172, 3162, 3904, 3173, 3159, 3160, 87,
- 3170, 3174, 3164, 3175, 3163, 3166, 3904, 87, 87, 3165,
- 87, 3176, 3167, 87, 87, 3178, 3177, 87, 87, 3179,
- 3172, 3181, 3180, 3182, 3185, 87, 3183, 3170, 87, 87,
- 3175, 3184, 3186, 87, 3189, 87, 3188, 87, 3176, 87,
- 3187, 3192, 87, 3177, 87, 87, 3179, 87, 3181, 3180,
- 3182, 87, 3190, 3183, 3191, 3193, 87, 3199, 3184, 3200,
- 3198, 87, 87, 3188, 87, 87, 3194, 3187, 3192, 3195,
-
- 87, 3197, 87, 3196, 87, 87, 87, 87, 3201, 3190,
- 87, 3191, 3193, 3202, 3199, 3203, 3200, 3198, 87, 3204,
- 3205, 87, 3206, 3194, 3207, 87, 3195, 3904, 3197, 87,
- 3196, 87, 3209, 3212, 87, 3201, 3208, 3213, 87, 87,
- 3202, 87, 3203, 3210, 87, 87, 3204, 3205, 3211, 3215,
- 87, 3207, 3217, 3214, 87, 3216, 87, 87, 3221, 3209,
- 87, 87, 3218, 3208, 3213, 3219, 3226, 87, 3904, 3220,
- 3210, 3904, 3223, 87, 87, 3211, 3215, 3225, 87, 3217,
- 3214, 87, 3216, 87, 87, 87, 3222, 3228, 3224, 3218,
- 3229, 3232, 3219, 87, 87, 87, 3220, 3230, 3231, 3223,
-
- 87, 3227, 3233, 87, 3225, 87, 3238, 87, 3234, 3235,
- 3236, 87, 3237, 3222, 3239, 3224, 3240, 3242, 3241, 87,
- 87, 3243, 87, 87, 3230, 3231, 87, 87, 3227, 87,
- 87, 3244, 87, 3238, 87, 3234, 3235, 3236, 3245, 3237,
- 87, 87, 3246, 3240, 3242, 3241, 87, 3247, 3243, 3248,
- 87, 3249, 3250, 3251, 3252, 87, 87, 3255, 87, 3253,
- 3256, 3254, 3904, 3257, 3904, 3245, 3260, 3258, 87, 3246,
- 87, 3261, 3904, 3904, 3247, 87, 87, 3259, 3249, 87,
- 87, 87, 87, 87, 3255, 3262, 3253, 87, 3254, 87,
- 3257, 3266, 87, 3267, 3258, 3263, 3264, 3268, 87, 3265,
-
- 87, 3269, 87, 87, 3259, 3270, 87, 3271, 3273, 3275,
- 3274, 3272, 3262, 3276, 3904, 3277, 87, 87, 3266, 87,
- 87, 87, 3263, 3264, 87, 87, 3265, 3278, 87, 87,
- 3280, 3279, 3270, 3281, 3271, 87, 3275, 3274, 3272, 3282,
- 87, 87, 3277, 87, 3284, 3285, 3283, 87, 87, 3290,
- 3287, 3286, 3294, 3289, 87, 3288, 87, 87, 3279, 87,
- 3281, 3291, 3292, 3295, 3296, 3297, 3282, 3293, 3298, 3299,
- 87, 87, 87, 3283, 87, 3300, 87, 87, 3286, 3294,
- 3289, 87, 87, 87, 3303, 3301, 87, 87, 3291, 3904,
- 3295, 3296, 3297, 3302, 87, 3304, 3305, 3306, 3904, 3309,
-
- 87, 87, 3307, 3308, 87, 3313, 3312, 87, 3310, 3311,
- 3316, 87, 3301, 3904, 87, 87, 87, 87, 87, 3904,
- 3302, 87, 3304, 3305, 3306, 87, 3309, 87, 87, 3307,
- 3308, 3314, 3313, 3312, 3315, 3310, 3311, 87, 87, 3317,
- 3318, 3320, 3321, 3322, 3323, 3327, 3325, 87, 3319, 3324,
- 87, 3326, 87, 87, 87, 3328, 3904, 3329, 3314, 3330,
- 3904, 3315, 87, 3331, 87, 3332, 3317, 3318, 3320, 3321,
- 3322, 3333, 3327, 3335, 3336, 3319, 87, 3334, 87, 3337,
- 87, 87, 87, 87, 3329, 87, 3330, 3338, 87, 87,
- 3331, 87, 3332, 3340, 3339, 87, 3342, 87, 3333, 3343,
-
- 3335, 3336, 3341, 3347, 3334, 87, 3337, 87, 3348, 3344,
- 87, 3351, 3345, 3349, 3338, 87, 87, 87, 87, 87,
- 3340, 3339, 3350, 3342, 3346, 3352, 3343, 3355, 3353, 3341,
- 87, 87, 3354, 3356, 87, 87, 3344, 87, 87, 3345,
- 3349, 87, 3357, 3358, 3359, 3360, 87, 3362, 3361, 3350,
- 87, 3346, 3352, 87, 87, 3353, 3366, 3367, 3363, 3354,
- 3356, 3364, 3369, 87, 3365, 87, 87, 3368, 3904, 87,
- 3358, 87, 3360, 87, 87, 3361, 87, 3371, 3370, 87,
- 87, 3380, 3376, 87, 87, 3363, 87, 3372, 3364, 3369,
- 87, 3365, 3374, 87, 3368, 3373, 87, 3375, 3377, 87,
-
- 3378, 3379, 87, 87, 3371, 3370, 3381, 3382, 3380, 3376,
- 3383, 3387, 3388, 87, 3372, 3390, 87, 3384, 3389, 3385,
- 87, 87, 3373, 87, 87, 3377, 3386, 3378, 3379, 3392,
- 87, 87, 3393, 87, 3382, 87, 87, 87, 87, 87,
- 3391, 3395, 3394, 3396, 3384, 3389, 3385, 87, 87, 3397,
- 3399, 3398, 3400, 3386, 87, 87, 3392, 87, 3401, 3393,
- 87, 3403, 3402, 3904, 87, 3405, 3410, 3391, 3395, 3394,
- 3904, 3411, 87, 3404, 87, 87, 3397, 3399, 3398, 3400,
- 87, 87, 3406, 87, 87, 3401, 87, 3412, 3403, 3402,
- 3407, 3419, 3405, 87, 3408, 3413, 87, 3409, 87, 3414,
-
- 3404, 3415, 3416, 87, 3417, 3418, 87, 3422, 87, 3406,
- 87, 3420, 87, 87, 87, 3421, 3423, 3407, 3428, 3904,
- 87, 3408, 3413, 87, 3409, 87, 3414, 87, 3415, 3416,
- 3424, 3417, 3418, 87, 87, 3425, 3426, 87, 3420, 3427,
- 3430, 87, 3421, 3423, 3429, 87, 87, 3431, 87, 3436,
- 87, 3432, 3435, 3433, 3904, 3434, 3437, 3424, 87, 3439,
- 87, 87, 3425, 3426, 3904, 3438, 3427, 87, 87, 3904,
- 87, 3429, 87, 87, 3431, 87, 3436, 3440, 3432, 3435,
- 3433, 87, 3434, 3437, 3441, 3442, 87, 3443, 3444, 3445,
- 3447, 87, 3438, 3446, 3455, 3449, 3448, 3904, 87, 87,
-
- 87, 87, 87, 3451, 3440, 3456, 87, 3452, 3458, 87,
- 87, 3441, 3442, 3459, 3443, 3444, 3445, 3447, 87, 3450,
- 3446, 87, 3449, 3448, 3453, 87, 87, 3454, 87, 87,
- 3451, 3457, 87, 87, 3452, 3460, 3461, 3462, 3463, 87,
- 87, 3464, 3465, 3471, 3466, 3467, 3450, 87, 87, 3469,
- 3474, 3453, 3468, 3470, 3454, 87, 87, 87, 3457, 3472,
- 87, 3476, 3460, 3461, 87, 87, 87, 3473, 3464, 87,
- 87, 3466, 3467, 3475, 87, 87, 3469, 87, 3478, 3468,
- 3470, 3477, 87, 3479, 3480, 87, 3472, 3482, 87, 87,
- 3481, 3483, 87, 3485, 3473, 3484, 87, 3486, 3904, 87,
-
- 3475, 3487, 87, 3489, 87, 3478, 87, 3490, 3477, 3491,
- 3479, 3480, 3488, 87, 87, 3495, 3493, 3481, 3498, 87,
- 3492, 87, 3484, 87, 3486, 87, 3496, 87, 3487, 3499,
- 87, 87, 3502, 3497, 87, 3494, 3491, 87, 3501, 3488,
- 87, 3503, 3495, 87, 87, 87, 3500, 3492, 3504, 3904,
- 87, 3904, 3505, 3496, 3506, 3513, 3499, 3508, 3507, 87,
- 3497, 87, 3494, 87, 87, 3501, 3512, 3510, 3503, 3511,
- 3514, 3509, 3904, 3500, 87, 87, 87, 3515, 87, 3505,
- 3516, 3506, 87, 87, 3508, 3507, 87, 87, 87, 3518,
- 3517, 3519, 3520, 3512, 3510, 3521, 3511, 87, 3509, 87,
-
- 3522, 87, 3525, 87, 3515, 3904, 3527, 3528, 3526, 87,
- 3529, 87, 87, 3530, 87, 87, 3518, 3517, 87, 3520,
- 3523, 3524, 3521, 87, 87, 3533, 3534, 3532, 3531, 87,
- 87, 3535, 87, 3527, 3528, 3526, 87, 3529, 87, 3536,
- 87, 3537, 3539, 87, 3538, 3540, 3541, 3523, 3524, 3542,
- 3544, 3545, 3533, 87, 3532, 3531, 3543, 87, 87, 3546,
- 87, 3547, 3548, 87, 87, 87, 87, 3549, 3537, 3539,
- 3550, 3538, 87, 87, 87, 3551, 87, 87, 3545, 3552,
- 3553, 87, 3554, 3543, 87, 3555, 3546, 87, 87, 3548,
- 87, 3556, 3559, 87, 87, 3557, 3565, 3550, 3558, 87,
-
- 87, 3562, 87, 3560, 87, 3561, 87, 3553, 3563, 3554,
- 3566, 3564, 3555, 87, 87, 87, 3567, 3568, 3556, 87,
- 3569, 3575, 3557, 87, 87, 3558, 87, 3570, 3562, 87,
- 3560, 3572, 3561, 3571, 87, 3563, 3574, 87, 3564, 87,
- 3573, 87, 87, 3567, 3568, 3576, 3577, 3579, 87, 3582,
- 3580, 3578, 87, 87, 3570, 3581, 3904, 3904, 3572, 3583,
- 3571, 3585, 87, 3574, 87, 87, 3904, 3573, 87, 3586,
- 3904, 3589, 87, 3577, 87, 3904, 87, 3580, 3578, 87,
- 3584, 87, 3581, 3587, 87, 3588, 3583, 87, 3585, 3590,
- 87, 87, 87, 87, 3591, 3594, 3586, 3592, 3589, 3593,
-
- 3595, 3904, 3599, 3606, 87, 3904, 87, 3584, 87, 87,
- 3587, 3596, 3588, 87, 87, 3603, 3590, 3904, 87, 3598,
- 87, 3591, 3594, 3597, 3592, 3604, 3593, 3595, 87, 3599,
- 87, 3600, 3601, 3602, 3607, 87, 3605, 87, 3596, 87,
- 3609, 87, 3603, 87, 3608, 3611, 3598, 87, 3610, 3612,
- 3597, 87, 3604, 3614, 3613, 3615, 87, 3616, 3600, 3601,
- 3602, 3607, 87, 3605, 87, 87, 3617, 3609, 3618, 3620,
- 3625, 3608, 87, 3619, 87, 3610, 87, 87, 3628, 87,
- 3614, 3613, 87, 3631, 3616, 87, 3621, 3622, 3623, 3624,
- 3626, 3627, 3904, 3617, 3629, 87, 87, 87, 3632, 3633,
-
- 3619, 87, 3630, 3634, 3636, 3628, 3635, 87, 3904, 3639,
- 87, 87, 87, 3638, 3640, 87, 87, 87, 3643, 87,
- 87, 3629, 3642, 87, 87, 3632, 3633, 3637, 3644, 3630,
- 87, 3636, 87, 3635, 87, 87, 87, 3641, 87, 3645,
- 3638, 3640, 3648, 3647, 87, 3643, 3646, 3650, 3653, 3642,
- 3649, 87, 87, 3651, 3637, 3644, 3652, 87, 87, 3654,
- 3655, 3663, 3658, 3656, 3641, 3904, 3645, 87, 87, 3648,
- 3647, 87, 87, 3646, 87, 87, 3657, 3649, 3659, 3665,
- 3651, 3660, 87, 3652, 87, 3667, 87, 87, 87, 3658,
- 3656, 87, 3661, 87, 3668, 3666, 87, 3662, 3664, 3670,
-
- 87, 87, 3669, 3657, 3671, 3659, 3665, 87, 3660, 3904,
- 87, 3672, 3667, 3673, 3674, 3675, 87, 3676, 3677, 3679,
- 3678, 3668, 3666, 3682, 87, 3664, 87, 87, 3681, 3669,
- 3680, 3683, 87, 87, 3684, 3685, 87, 87, 3672, 87,
- 87, 87, 3675, 3686, 3676, 87, 87, 3678, 87, 3687,
- 87, 3688, 3689, 3690, 87, 3681, 3691, 3680, 87, 3692,
- 3693, 87, 87, 3694, 3696, 3697, 3698, 3695, 3700, 3904,
- 87, 87, 3701, 3904, 87, 3702, 87, 87, 87, 87,
- 3690, 87, 87, 3691, 87, 3703, 87, 87, 3699, 87,
- 3694, 3696, 3697, 87, 3695, 87, 87, 3704, 3705, 3701,
-
- 87, 3706, 3702, 3708, 3707, 3709, 3716, 3904, 3710, 3711,
- 3712, 87, 3703, 87, 3713, 3699, 87, 87, 3715, 3904,
- 3714, 3717, 3718, 87, 3704, 3705, 3904, 87, 87, 87,
- 87, 3707, 3709, 87, 87, 3710, 3711, 3712, 87, 3721,
- 87, 3713, 87, 3719, 87, 3715, 3720, 3714, 3717, 3718,
- 87, 87, 3724, 3722, 3723, 87, 3725, 3904, 3726, 3727,
- 87, 3904, 3728, 3731, 3730, 3729, 3721, 3732, 87, 87,
- 3719, 3733, 87, 3720, 87, 87, 3734, 87, 3735, 3724,
- 3722, 3723, 3737, 3725, 87, 3726, 3727, 87, 87, 3728,
- 3731, 3730, 3729, 3736, 87, 3738, 3740, 87, 87, 3739,
-
- 87, 3741, 3742, 87, 3748, 87, 87, 3904, 87, 3737,
- 3745, 3743, 3747, 3744, 87, 87, 3746, 3750, 87, 3749,
- 3736, 3904, 3738, 3740, 87, 87, 3739, 3751, 3741, 87,
- 87, 3748, 87, 87, 87, 3756, 87, 3745, 3743, 3747,
- 3744, 87, 3752, 3746, 3750, 3753, 3749, 87, 3754, 3755,
- 87, 3757, 3758, 87, 3751, 3759, 3761, 3762, 87, 3760,
- 87, 3763, 3756, 3764, 87, 3767, 3770, 87, 87, 3752,
- 87, 3772, 3753, 87, 3765, 3754, 3755, 3768, 3757, 3758,
- 3771, 87, 3759, 3761, 87, 87, 3760, 87, 3763, 3766,
- 3764, 3769, 87, 87, 3773, 87, 87, 87, 3772, 3774,
-
- 3775, 3765, 87, 3776, 3768, 3777, 3778, 3771, 87, 3779,
- 87, 3780, 3781, 87, 3782, 87, 3766, 3786, 3769, 3904,
- 3785, 87, 3783, 3788, 87, 3784, 87, 3775, 87, 87,
- 3776, 87, 3777, 3778, 3787, 87, 3779, 3789, 3780, 3781,
- 87, 87, 87, 3790, 87, 3791, 87, 3785, 3792, 3783,
- 87, 3793, 3784, 3794, 3795, 3796, 3799, 3801, 3798, 87,
- 87, 3787, 3797, 3904, 87, 87, 87, 87, 3800, 3802,
- 87, 87, 87, 3803, 3804, 3792, 87, 87, 3793, 3904,
- 87, 3795, 3796, 87, 3801, 3798, 3805, 3806, 3808, 3797,
- 3807, 3809, 3810, 3812, 87, 3800, 3802, 3811, 87, 87,
-
- 87, 87, 3814, 87, 3816, 87, 87, 3904, 3813, 3817,
- 87, 3815, 3818, 3805, 3806, 3808, 87, 3807, 87, 87,
- 3812, 87, 87, 3820, 3811, 3819, 3821, 87, 3825, 87,
- 3832, 3816, 3823, 87, 87, 3813, 3817, 87, 3815, 3818,
- 87, 3822, 3824, 3829, 3826, 3830, 3838, 3827, 3904, 87,
- 3820, 87, 3819, 3821, 87, 87, 87, 3828, 3831, 3823,
- 3833, 87, 87, 3839, 87, 87, 3834, 3835, 3822, 3824,
- 3829, 3826, 87, 3836, 3827, 3837, 3840, 3841, 87, 3845,
- 87, 3848, 3842, 87, 3828, 3831, 87, 3833, 87, 87,
- 87, 87, 3843, 3834, 3835, 87, 3851, 3844, 87, 87,
-
- 3836, 3853, 3837, 3840, 87, 87, 3845, 3850, 3846, 3842,
- 3847, 3852, 3849, 87, 3854, 87, 87, 3855, 87, 3843,
- 87, 87, 87, 3851, 3844, 3856, 3904, 3860, 87, 3859,
- 3864, 87, 87, 87, 3850, 3846, 3861, 3847, 3852, 3849,
- 3857, 3854, 3858, 87, 3855, 3862, 3870, 87, 87, 3865,
- 87, 3863, 3856, 87, 3860, 3867, 3859, 3864, 87, 87,
- 3866, 3904, 3868, 3861, 3869, 3872, 87, 3857, 87, 3858,
- 3873, 3871, 3862, 3870, 87, 87, 3865, 3874, 3863, 87,
- 3875, 87, 3867, 3876, 3880, 3882, 87, 3866, 87, 3868,
- 3904, 3869, 87, 3877, 3878, 3879, 3884, 87, 3871, 87,
-
- 3881, 3883, 3885, 87, 3874, 87, 87, 3875, 87, 87,
- 87, 3880, 87, 87, 87, 3888, 3889, 3886, 87, 3892,
- 3877, 3878, 3879, 3884, 87, 87, 3887, 3881, 3883, 3885,
- 3890, 3891, 3893, 3895, 87, 3894, 3896, 3904, 87, 87,
- 3904, 87, 3888, 87, 3886, 87, 3892, 3897, 3898, 3899,
- 3902, 3903, 3904, 3887, 3904, 87, 3900, 3890, 3891, 87,
- 87, 3901, 3894, 87, 87, 3904, 3904, 87, 3904, 87,
- 87, 87, 3904, 3904, 3897, 3898, 3899, 87, 87, 3904,
- 3904, 3904, 3904, 3900, 3904, 3904, 3904, 3904, 3901, 48,
- 48, 48, 48, 48, 48, 48, 53, 53, 53, 53,
-
- 53, 53, 53, 58, 58, 58, 58, 58, 58, 58,
- 64, 64, 64, 64, 64, 64, 64, 69, 69, 69,
- 69, 69, 69, 69, 75, 75, 75, 75, 75, 75,
- 75, 81, 81, 81, 81, 81, 81, 81, 90, 90,
- 3904, 90, 90, 90, 90, 163, 163, 3904, 3904, 3904,
- 163, 163, 165, 165, 3904, 3904, 165, 3904, 165, 167,
- 3904, 3904, 3904, 3904, 3904, 167, 170, 170, 3904, 3904,
- 3904, 170, 170, 172, 3904, 3904, 3904, 3904, 3904, 172,
- 174, 174, 3904, 174, 174, 174, 174, 177, 3904, 3904,
- 3904, 3904, 3904, 177, 180, 180, 3904, 3904, 3904, 180,
-
- 180, 91, 91, 3904, 91, 91, 91, 91, 17, 3904,
- 3904, 3904, 3904, 3904, 3904, 3904, 3904, 3904, 3904, 3904,
- 3904, 3904, 3904, 3904, 3904, 3904, 3904, 3904, 3904, 3904,
- 3904, 3904, 3904, 3904, 3904, 3904, 3904, 3904, 3904, 3904,
- 3904, 3904, 3904, 3904, 3904, 3904, 3904, 3904, 3904, 3904,
- 3904, 3904, 3904, 3904, 3904, 3904, 3904, 3904, 3904, 3904,
- 3904, 3904, 3904, 3904, 3904, 3904, 3904, 3904, 3904, 3904,
- 3904, 3904, 3904, 3904, 3904
+ 1253, 87, 1249, 1254, 1258, 87, 1260, 1255, 1259, 1252,
+ 1261, 3920, 87, 1257, 1263, 1262, 87, 1256, 1264, 1250,
+ 87, 87, 1265, 1267, 1251, 1266, 87, 1253, 87, 87,
+ 1254, 1258, 87, 87, 1255, 1259, 1252, 1261, 1268, 1269,
+ 87, 1263, 1262, 87, 1256, 1264, 1271, 87, 1272, 1265,
+ 1273, 3920, 1266, 87, 1274, 87, 1282, 1283, 87, 1284,
+ 3920, 1285, 3920, 87, 1286, 3920, 87, 1289, 3920, 1302,
+ 87, 87, 87, 1592, 1593, 1272, 87, 1273, 87, 87,
+ 87, 1274, 1275, 1282, 1283, 1288, 1284, 1276, 1285, 1277,
+
+ 87, 1286, 1290, 1287, 1289, 1278, 87, 1291, 1292, 1295,
+ 1279, 1280, 87, 87, 87, 1293, 87, 1281, 87, 1275,
+ 87, 1296, 1288, 87, 1276, 87, 1277, 1298, 1294, 1290,
+ 1287, 1297, 1278, 1305, 1291, 1292, 87, 1279, 1280, 87,
+ 1299, 87, 1293, 87, 1281, 1303, 87, 1300, 1296, 1306,
+ 1301, 87, 3920, 1304, 1298, 1294, 87, 1308, 1297, 87,
+ 87, 1307, 1310, 1311, 1309, 87, 3920, 1299, 87, 87,
+ 3920, 1313, 1303, 87, 1300, 1312, 1306, 1301, 87, 87,
+ 1304, 1314, 1315, 87, 1308, 87, 1316, 1317, 1307, 87,
+ 1311, 1309, 1318, 87, 87, 1319, 1320, 1321, 1313, 87,
+
+ 87, 1322, 1312, 87, 1323, 87, 1324, 1325, 1314, 1315,
+ 87, 87, 1326, 1329, 1317, 1327, 1328, 87, 87, 1318,
+ 1335, 87, 1319, 1320, 1321, 87, 87, 87, 1322, 1330,
+ 87, 1323, 1334, 1324, 1325, 1331, 87, 1332, 1336, 1326,
+ 87, 1339, 1327, 1328, 87, 87, 87, 1333, 87, 87,
+ 1337, 1338, 87, 87, 87, 1344, 1330, 1340, 1341, 1334,
+ 87, 1342, 1331, 87, 1332, 1336, 1345, 1343, 1339, 1346,
+ 1347, 3920, 1348, 87, 1333, 3920, 1351, 1337, 1338, 87,
+ 87, 1350, 1344, 87, 1340, 1341, 1349, 87, 1342, 87,
+ 87, 1352, 87, 1345, 1343, 87, 1353, 1356, 87, 1348,
+
+ 1360, 87, 87, 1351, 1354, 1357, 1358, 1355, 1350, 87,
+ 1359, 87, 1362, 1349, 1363, 1361, 1365, 87, 1366, 87,
+ 1367, 87, 1369, 87, 1356, 87, 1364, 1360, 87, 87,
+ 87, 1354, 1357, 1358, 1355, 87, 1371, 1359, 87, 1362,
+ 1372, 1363, 1361, 1368, 87, 1366, 1370, 1374, 87, 1369,
+ 1373, 3920, 87, 1364, 1375, 87, 87, 1376, 1378, 87,
+ 1377, 1379, 87, 1371, 87, 1385, 3920, 1372, 87, 87,
+ 1368, 1380, 1381, 1370, 1374, 1383, 87, 1373, 87, 1382,
+ 87, 1375, 1386, 87, 1376, 1378, 87, 1377, 1379, 1384,
+ 87, 1388, 1387, 87, 1390, 87, 87, 87, 1380, 1381,
+
+ 87, 1389, 1383, 1391, 1393, 1392, 1382, 1396, 1395, 87,
+ 87, 87, 87, 87, 1394, 1397, 1384, 1398, 1388, 1387,
+ 87, 1390, 87, 1399, 1400, 87, 1401, 1403, 1389, 3920,
+ 1391, 1393, 1392, 1402, 1404, 1395, 1407, 1406, 87, 87,
+ 1408, 1394, 1409, 1405, 87, 87, 87, 87, 1410, 87,
+ 1399, 1400, 87, 1411, 1412, 87, 87, 1414, 87, 87,
+ 1402, 1404, 87, 1413, 1406, 87, 87, 1408, 87, 87,
+ 1405, 87, 87, 1415, 1416, 1410, 87, 1417, 3920, 1419,
+ 1411, 1412, 1426, 1418, 1414, 1422, 1421, 1420, 87, 1423,
+ 1413, 1424, 3920, 87, 87, 3920, 1429, 87, 87, 1428,
+
+ 1415, 1416, 87, 87, 1417, 87, 1419, 1425, 1427, 87,
+ 1418, 87, 87, 1421, 1420, 1430, 87, 87, 1424, 1432,
+ 1433, 87, 1434, 1429, 87, 1435, 1428, 87, 87, 87,
+ 87, 1436, 1437, 1438, 1425, 1427, 1439, 1442, 87, 87,
+ 1440, 1443, 1430, 1441, 173, 1444, 1432, 1433, 3920, 1434,
+ 87, 1445, 1435, 1446, 87, 87, 1447, 87, 1436, 1437,
+ 87, 1448, 87, 1439, 1442, 87, 87, 1440, 1443, 1449,
+ 1441, 1451, 1444, 87, 87, 87, 1452, 1450, 1445, 1453,
+ 1446, 3920, 1454, 1447, 87, 1456, 1455, 3920, 1448, 1457,
+ 3920, 3920, 1459, 1458, 87, 1461, 87, 87, 87, 1462,
+
+ 1464, 3920, 3920, 87, 1450, 87, 1453, 87, 87, 1454,
+ 1460, 87, 1456, 1455, 87, 87, 1457, 87, 1465, 1459,
+ 1458, 1463, 1461, 87, 87, 1467, 1462, 1464, 1466, 87,
+ 1468, 1469, 3920, 87, 1472, 1471, 1470, 1460, 87, 1473,
+ 87, 1480, 1475, 87, 87, 1465, 1474, 3920, 1463, 87,
+ 1482, 87, 1467, 87, 1481, 1466, 1483, 87, 1469, 87,
+ 3920, 1472, 1471, 1470, 87, 1476, 1473, 87, 1480, 1475,
+ 1484, 1485, 87, 1474, 1477, 1486, 1478, 1482, 1488, 1479,
+ 87, 1481, 1489, 87, 1487, 87, 87, 87, 87, 1490,
+ 87, 87, 1476, 1491, 1494, 1493, 1492, 1484, 1485, 3920,
+
+ 1496, 1477, 1486, 1478, 87, 1488, 1479, 87, 87, 1489,
+ 87, 1487, 1495, 87, 1497, 87, 1490, 1498, 1499, 3920,
+ 1491, 1500, 1493, 1492, 1501, 87, 87, 1496, 1502, 1504,
+ 87, 1503, 1505, 3920, 87, 87, 3920, 1506, 3920, 1495,
+ 3920, 1497, 1507, 87, 1498, 87, 87, 1512, 1500, 87,
+ 87, 1501, 87, 87, 87, 1502, 1504, 1508, 1503, 1505,
+ 1511, 1509, 1513, 1514, 1506, 87, 1516, 87, 1518, 1507,
+ 1510, 87, 87, 1515, 1512, 87, 1519, 87, 1517, 87,
+ 87, 1520, 3920, 1530, 1508, 87, 3920, 1511, 1509, 1513,
+ 1514, 1521, 87, 1516, 1522, 1518, 1523, 1510, 87, 87,
+
+ 1515, 87, 1525, 1519, 1524, 1517, 1528, 1526, 87, 1527,
+ 87, 1532, 1529, 87, 87, 87, 87, 87, 1521, 1531,
+ 1533, 1522, 87, 1523, 87, 1534, 87, 1539, 1536, 1525,
+ 1535, 1524, 87, 1528, 1526, 87, 1527, 1537, 87, 1529,
+ 1538, 1555, 87, 87, 1544, 1540, 1531, 1533, 87, 87,
+ 1541, 1542, 1534, 1543, 1539, 1536, 1545, 1535, 87, 87,
+ 1553, 3920, 87, 1554, 1537, 3920, 87, 1538, 1556, 1560,
+ 1558, 1544, 3920, 87, 87, 3920, 1557, 87, 1542, 3920,
+ 1543, 87, 87, 1545, 1546, 1561, 1559, 1553, 1547, 3920,
+ 1554, 1548, 1549, 87, 87, 1556, 1550, 1558, 87, 1562,
+
+ 3920, 87, 1551, 1557, 87, 1563, 1552, 87, 1564, 1570,
+ 87, 1546, 1561, 1559, 87, 1547, 1565, 3920, 1548, 1549,
+ 1566, 87, 1567, 1550, 1571, 3920, 1562, 1568, 1569, 1551,
+ 1573, 87, 1563, 1552, 87, 1564, 1572, 87, 1574, 1575,
+ 1576, 87, 87, 1565, 87, 87, 1578, 1566, 87, 1567,
+ 1577, 1580, 1579, 87, 1568, 1569, 87, 1573, 1581, 87,
+ 87, 87, 1583, 1572, 1582, 1574, 1575, 1576, 1589, 1590,
+ 3920, 1595, 3920, 87, 3920, 3920, 87, 1577, 87, 1579,
+ 87, 1591, 87, 87, 1594, 1581, 3920, 87, 1599, 1583,
+ 87, 1582, 1584, 1596, 87, 1589, 1590, 1585, 1595, 1586,
+
+ 87, 1587, 1597, 1588, 1598, 87, 87, 87, 1591, 87,
+ 87, 1594, 1600, 87, 1602, 1599, 1603, 1601, 1604, 1584,
+ 1596, 1607, 1606, 87, 1585, 1605, 1586, 1610, 1587, 1597,
+ 1588, 1598, 87, 1612, 87, 87, 1611, 1614, 1608, 87,
+ 87, 1602, 1609, 1603, 87, 1604, 87, 87, 1607, 1606,
+ 87, 1613, 1605, 1616, 1610, 1618, 87, 1615, 1617, 87,
+ 1612, 1619, 3920, 1620, 1614, 1608, 87, 1622, 87, 1609,
+ 87, 87, 87, 87, 1621, 87, 87, 1623, 1613, 1624,
+ 1616, 87, 1618, 1625, 1615, 1617, 1626, 1627, 1619, 87,
+ 1620, 87, 1628, 1629, 1622, 1630, 1632, 1634, 1633, 1631,
+
+ 3920, 1621, 1635, 87, 87, 87, 1624, 1640, 87, 1636,
+ 87, 1645, 87, 1626, 1627, 87, 87, 87, 3920, 1628,
+ 1629, 1637, 1630, 87, 87, 1633, 1631, 87, 87, 1635,
+ 1641, 87, 1638, 1639, 87, 1642, 1636, 87, 87, 87,
+ 1643, 1646, 1644, 87, 3920, 87, 1648, 1647, 1637, 87,
+ 1653, 1650, 1649, 3920, 1651, 1666, 1652, 1641, 1655, 1638,
+ 1639, 87, 1642, 87, 87, 87, 87, 1643, 1646, 1644,
+ 87, 87, 87, 1648, 1647, 87, 1654, 1653, 1650, 1649,
+ 87, 1651, 1656, 1652, 1657, 1655, 1658, 87, 1660, 87,
+ 1659, 1662, 1667, 1665, 1661, 3920, 1670, 3920, 1663, 3920,
+
+ 87, 87, 1664, 1654, 1668, 1669, 87, 87, 1674, 1656,
+ 87, 1657, 87, 1658, 87, 1660, 87, 1659, 1662, 87,
+ 1665, 1661, 87, 1671, 87, 1663, 87, 87, 87, 1664,
+ 1672, 1668, 1669, 1673, 1677, 87, 1675, 1676, 87, 1678,
+ 1680, 87, 1679, 87, 87, 1683, 1681, 1682, 87, 87,
+ 1671, 87, 173, 87, 1684, 1685, 87, 1672, 1687, 87,
+ 1673, 1677, 1686, 1675, 1676, 1693, 1678, 1680, 1695, 1679,
+ 3920, 1692, 3920, 1681, 1682, 1688, 87, 87, 87, 1690,
+ 1694, 1689, 1685, 87, 1698, 1691, 87, 87, 87, 1686,
+ 87, 1696, 87, 87, 1697, 1695, 1701, 87, 1692, 1700,
+
+ 1702, 87, 1688, 87, 87, 87, 1690, 1694, 1689, 1699,
+ 87, 1698, 1691, 1704, 3920, 1703, 87, 1706, 1696, 1708,
+ 1707, 1697, 87, 1701, 87, 1705, 1700, 1702, 87, 87,
+ 1710, 1709, 87, 1713, 1712, 1711, 1699, 1714, 1716, 87,
+ 87, 1715, 1703, 87, 1706, 87, 1708, 1707, 3920, 1722,
+ 87, 87, 1705, 1721, 87, 1724, 87, 3920, 1709, 1723,
+ 1713, 1712, 87, 1717, 1714, 1716, 1718, 1719, 1715, 1726,
+ 1720, 87, 87, 1725, 87, 87, 1722, 1728, 3920, 1727,
+ 1721, 1733, 1729, 1730, 87, 1734, 1723, 87, 1747, 87,
+ 1717, 87, 87, 1718, 1719, 87, 1726, 1720, 1731, 87,
+
+ 1725, 1735, 1732, 87, 1736, 1738, 1727, 87, 1733, 87,
+ 1730, 87, 1734, 87, 1737, 1739, 1744, 1740, 3920, 1743,
+ 87, 87, 87, 87, 1741, 1731, 1742, 87, 1735, 1732,
+ 87, 1736, 1738, 87, 1748, 87, 3920, 3920, 1745, 87,
+ 1746, 1737, 1739, 1744, 1740, 87, 1743, 87, 87, 87,
+ 1750, 1741, 1749, 1742, 1752, 1751, 1754, 1753, 87, 1759,
+ 1756, 1748, 1763, 87, 87, 1745, 87, 1746, 87, 87,
+ 1755, 1757, 87, 1761, 87, 1762, 1758, 1750, 1764, 1749,
+ 87, 1752, 1751, 1754, 1753, 87, 1759, 1756, 1760, 1763,
+ 1766, 87, 87, 87, 87, 1767, 87, 1755, 1757, 1765,
+
+ 1761, 87, 1762, 1758, 1768, 1764, 87, 1769, 1771, 1776,
+ 1777, 1770, 1772, 1773, 3920, 1760, 87, 1766, 1778, 1774,
+ 87, 1775, 3920, 3920, 87, 87, 1765, 87, 1779, 3920,
+ 1780, 1783, 1787, 87, 1769, 87, 87, 87, 1770, 1772,
+ 1773, 87, 87, 87, 1784, 1785, 1774, 87, 1775, 1781,
+ 87, 1782, 1786, 1788, 87, 1779, 87, 1780, 87, 1787,
+ 1791, 87, 1789, 87, 1790, 3920, 87, 87, 1792, 1793,
+ 1794, 1784, 1785, 1796, 87, 87, 1781, 1795, 1782, 1786,
+ 1788, 87, 1801, 3920, 87, 1803, 87, 1791, 87, 1789,
+ 87, 1790, 87, 1797, 1799, 1792, 1793, 1794, 1798, 1800,
+
+ 1796, 1802, 1804, 1806, 1795, 87, 1805, 1808, 87, 1801,
+ 87, 87, 1803, 1807, 87, 87, 1809, 1811, 1810, 1812,
+ 1817, 87, 1820, 87, 1814, 87, 87, 87, 1802, 1804,
+ 1806, 87, 1815, 1805, 1808, 87, 1816, 87, 1813, 1819,
+ 1807, 87, 1818, 1809, 87, 1810, 1812, 87, 1821, 87,
+ 87, 1814, 87, 1822, 87, 1829, 87, 3920, 1830, 1815,
+ 87, 1827, 1823, 1816, 1824, 1813, 1819, 87, 1825, 1818,
+ 87, 87, 87, 1826, 87, 1821, 87, 1828, 1831, 1832,
+ 1822, 87, 1829, 87, 87, 1830, 1833, 87, 1827, 1823,
+ 1835, 1824, 1834, 1836, 87, 1825, 1837, 1839, 1838, 3920,
+
+ 1826, 3920, 87, 1840, 1828, 1831, 1832, 87, 1841, 1847,
+ 3920, 87, 1843, 1833, 1842, 87, 1844, 87, 87, 1834,
+ 87, 87, 1846, 1837, 1839, 1838, 87, 3920, 87, 1845,
+ 1840, 87, 1848, 87, 1849, 1841, 1847, 87, 1850, 1843,
+ 1851, 1842, 1852, 1844, 1853, 87, 87, 1854, 1855, 1846,
+ 1856, 87, 1857, 3920, 87, 1859, 1845, 1865, 1858, 1848,
+ 87, 1849, 3920, 1860, 87, 1850, 87, 1851, 1866, 87,
+ 1863, 1853, 1868, 1872, 1861, 1855, 1870, 1856, 87, 87,
+ 87, 87, 1859, 1862, 87, 1858, 87, 1864, 87, 87,
+ 1860, 1867, 87, 1869, 87, 87, 1871, 1863, 87, 87,
+
+ 87, 1861, 1873, 1870, 87, 87, 1874, 1875, 1876, 87,
+ 1862, 1881, 1880, 1877, 1864, 1878, 1879, 87, 1867, 1883,
+ 1869, 1882, 87, 1871, 87, 1884, 87, 87, 87, 1873,
+ 1885, 87, 87, 87, 1875, 87, 87, 87, 1881, 1880,
+ 1877, 1886, 1878, 1879, 1887, 1889, 1883, 1888, 1882, 1890,
+ 87, 1891, 1884, 87, 1892, 87, 87, 1885, 1895, 1893,
+ 1894, 1896, 87, 87, 1898, 1899, 1897, 87, 1886, 87,
+ 87, 1887, 1889, 87, 1888, 1900, 1890, 87, 87, 1901,
+ 87, 1892, 1902, 87, 87, 1895, 1893, 1894, 1896, 1903,
+ 87, 1898, 1899, 1897, 87, 1904, 1905, 3920, 1906, 1907,
+
+ 1908, 87, 1900, 87, 87, 1909, 1901, 1910, 87, 1902,
+ 1913, 1911, 1914, 1912, 1917, 1916, 87, 1915, 87, 87,
+ 1919, 87, 1904, 1905, 87, 1906, 1907, 1908, 87, 1918,
+ 87, 173, 1909, 1921, 1910, 87, 1920, 87, 1911, 87,
+ 1912, 1917, 1916, 1927, 87, 87, 87, 1919, 1924, 1922,
+ 1923, 87, 1925, 1926, 87, 1929, 1918, 87, 1934, 1928,
+ 1921, 87, 87, 1920, 1932, 1930, 1931, 1945, 1940, 87,
+ 1927, 87, 1935, 87, 1936, 1924, 1922, 1923, 1938, 1925,
+ 1926, 87, 1929, 1942, 1939, 87, 1928, 87, 87, 1933,
+ 87, 1932, 1930, 1931, 87, 1937, 87, 87, 1943, 1935,
+
+ 87, 1936, 87, 87, 1944, 1938, 87, 1941, 1948, 3920,
+ 1946, 1939, 1949, 1947, 87, 87, 1933, 87, 87, 1950,
+ 87, 87, 1937, 1951, 1956, 1943, 87, 1952, 3920, 1953,
+ 87, 1944, 1954, 87, 1941, 1948, 87, 1946, 1955, 1949,
+ 1947, 87, 1957, 3920, 1958, 87, 1950, 87, 1959, 1960,
+ 1951, 1956, 1966, 87, 1952, 87, 1953, 87, 1962, 1954,
+ 1961, 1963, 1965, 3920, 87, 1955, 87, 87, 1967, 1957,
+ 87, 1958, 1973, 1964, 1970, 1959, 1960, 87, 1968, 1974,
+ 1975, 1971, 87, 87, 87, 1962, 1979, 1961, 1963, 1965,
+ 87, 1972, 87, 87, 1969, 1967, 87, 1976, 1977, 1973,
+
+ 1964, 1970, 87, 87, 1978, 1968, 87, 1975, 1971, 1980,
+ 1981, 1982, 87, 1979, 1983, 3920, 1984, 1986, 1972, 1985,
+ 1988, 1969, 1989, 1987, 87, 87, 87, 87, 87, 87,
+ 87, 1978, 1990, 87, 1991, 87, 1980, 1992, 1982, 1995,
+ 1994, 1983, 87, 1984, 1986, 1993, 1985, 87, 1996, 87,
+ 1987, 1997, 87, 3920, 87, 2000, 87, 3920, 1998, 1999,
+ 87, 1991, 87, 87, 87, 87, 87, 1994, 2002, 87,
+ 87, 87, 1993, 2001, 2003, 1996, 2004, 2008, 1997, 2005,
+ 87, 87, 2000, 2009, 2007, 1998, 1999, 87, 87, 87,
+ 2006, 87, 87, 2010, 2011, 2002, 2014, 2012, 3920, 3920,
+
+ 2001, 2003, 87, 2004, 2008, 2013, 2005, 87, 2015, 87,
+ 2009, 2007, 87, 87, 2016, 87, 2017, 2006, 2018, 87,
+ 2010, 2011, 2019, 87, 2012, 87, 2021, 2023, 87, 2022,
+ 2024, 87, 2013, 2025, 3920, 2015, 2026, 87, 2027, 2030,
+ 2020, 2016, 87, 2017, 3920, 2018, 87, 87, 2029, 2019,
+ 2028, 87, 87, 2021, 87, 87, 2022, 2024, 2032, 2031,
+ 2025, 87, 87, 2026, 87, 2027, 2030, 2020, 87, 2033,
+ 2034, 2035, 2037, 2040, 2036, 2029, 87, 2028, 2041, 2038,
+ 87, 87, 87, 87, 2039, 2032, 2031, 2043, 2042, 87,
+ 87, 87, 2044, 2045, 2046, 2048, 2033, 2034, 2035, 2037,
+
+ 2040, 2036, 2047, 87, 2049, 2041, 2038, 3920, 87, 2050,
+ 2051, 2039, 87, 2052, 87, 2042, 2055, 87, 87, 87,
+ 2045, 2046, 87, 2053, 2054, 2056, 87, 2058, 2057, 2047,
+ 87, 2049, 87, 87, 2059, 87, 2050, 2051, 87, 87,
+ 2052, 2060, 87, 2055, 2061, 87, 2062, 87, 2063, 87,
+ 2053, 2054, 2056, 2064, 2058, 2057, 2065, 2066, 3920, 87,
+ 2067, 2059, 2068, 2069, 2074, 2070, 87, 87, 2060, 2071,
+ 2100, 2061, 87, 2062, 2072, 2063, 87, 87, 87, 2073,
+ 87, 2078, 2075, 87, 2066, 87, 87, 2067, 2079, 2068,
+ 2069, 2074, 2070, 2076, 2077, 87, 2071, 87, 2081, 2080,
+
+ 3920, 2082, 87, 87, 2084, 2083, 87, 87, 2078, 2075,
+ 87, 2086, 87, 2088, 2087, 2079, 87, 2089, 2085, 3920,
+ 2076, 2077, 3920, 2103, 2090, 2081, 2080, 87, 2082, 87,
+ 87, 2084, 2083, 87, 2093, 87, 2091, 2092, 2086, 2094,
+ 2088, 2087, 87, 87, 2089, 2085, 87, 2095, 2097, 2096,
+ 2098, 2090, 2099, 87, 2102, 87, 2104, 2105, 2101, 2106,
+ 87, 87, 2111, 2091, 2092, 87, 87, 87, 2107, 2110,
+ 87, 2115, 87, 2108, 2095, 2097, 2096, 2098, 87, 2099,
+ 87, 87, 87, 2104, 2105, 2101, 2109, 2112, 2116, 87,
+ 2120, 87, 2113, 87, 87, 2107, 2110, 2117, 2114, 2121,
+
+ 2108, 87, 2118, 87, 2119, 87, 2123, 87, 3920, 87,
+ 87, 2128, 87, 2109, 2112, 2116, 87, 2120, 2122, 2113,
+ 87, 87, 2124, 2125, 2117, 2114, 2121, 2132, 2126, 2118,
+ 2127, 2119, 2129, 2123, 2130, 2131, 87, 87, 87, 3920,
+ 87, 87, 2133, 87, 2134, 2122, 2135, 2138, 2139, 2124,
+ 2125, 87, 2136, 87, 2132, 2126, 87, 2127, 2140, 2129,
+ 2137, 87, 87, 3920, 2144, 2141, 87, 87, 87, 2133,
+ 87, 87, 2142, 2135, 87, 2139, 2143, 2145, 2146, 2136,
+ 2147, 2148, 2151, 87, 87, 87, 2153, 2137, 87, 2149,
+ 87, 87, 2141, 2150, 2152, 2157, 2155, 2154, 87, 2142,
+
+ 87, 87, 87, 2143, 2145, 2146, 2175, 2147, 2148, 2151,
+ 87, 87, 87, 2153, 2156, 87, 2149, 2159, 2158, 87,
+ 2150, 2152, 2157, 2155, 2154, 2160, 2161, 2162, 2163, 87,
+ 2164, 2167, 87, 173, 87, 2166, 87, 2165, 87, 3920,
+ 2169, 2156, 87, 3920, 2159, 2158, 2168, 2171, 87, 2172,
+ 2170, 87, 87, 2161, 2162, 2163, 87, 87, 2167, 87,
+ 87, 87, 2166, 87, 2165, 87, 2176, 2169, 2174, 2178,
+ 2173, 2177, 2179, 2168, 2171, 87, 2172, 2170, 87, 2180,
+ 87, 87, 2181, 2182, 2184, 2183, 2186, 2187, 2185, 87,
+ 87, 2188, 3920, 2176, 3920, 2174, 2178, 2173, 2177, 87,
+
+ 87, 2190, 2189, 87, 87, 3920, 2180, 87, 2191, 2181,
+ 87, 2211, 2183, 2186, 2192, 2185, 87, 87, 87, 87,
+ 2193, 87, 2194, 2196, 2195, 87, 87, 3920, 2190, 2189,
+ 2197, 87, 87, 87, 2200, 2191, 2198, 2201, 2199, 3920,
+ 2202, 2192, 2203, 87, 2210, 87, 87, 2193, 3920, 2194,
+ 2196, 2195, 87, 87, 87, 2204, 2208, 2197, 2209, 87,
+ 87, 2200, 87, 2198, 2201, 2199, 2205, 2202, 2206, 2203,
+ 87, 87, 2217, 87, 2212, 2207, 2213, 2216, 87, 87,
+ 87, 2214, 2204, 2208, 2215, 2209, 2221, 87, 87, 87,
+ 87, 2218, 87, 2205, 2219, 2206, 2220, 2222, 2223, 2217,
+
+ 2225, 2212, 2207, 2213, 2216, 2226, 2230, 87, 2214, 2227,
+ 2224, 2215, 87, 2221, 2228, 87, 87, 87, 2218, 2231,
+ 87, 2219, 2229, 2220, 87, 87, 2232, 87, 87, 2233,
+ 2234, 87, 2226, 87, 2235, 2236, 2227, 2224, 2238, 2240,
+ 3920, 2228, 87, 87, 2237, 2239, 2231, 87, 87, 2229,
+ 2241, 2243, 2242, 87, 2244, 2251, 2233, 2245, 87, 87,
+ 87, 2235, 87, 87, 2246, 2238, 2240, 87, 2247, 87,
+ 87, 2237, 2239, 87, 2248, 3920, 2249, 87, 2243, 2242,
+ 2259, 87, 2250, 3920, 2245, 3920, 3920, 87, 2257, 2268,
+ 87, 2246, 2252, 2253, 2254, 2247, 87, 87, 2256, 2255,
+
+ 2263, 2248, 87, 2249, 87, 87, 2258, 87, 2262, 2250,
+ 2260, 2261, 87, 87, 87, 2257, 2268, 87, 87, 2252,
+ 2253, 2254, 87, 2266, 2264, 2256, 2255, 2263, 87, 2265,
+ 2267, 2269, 2270, 2258, 2271, 2262, 87, 2260, 2261, 3920,
+ 2274, 2273, 87, 2272, 87, 2275, 87, 87, 87, 2277,
+ 2266, 2276, 87, 2278, 2289, 2280, 87, 2267, 2269, 2270,
+ 87, 87, 2281, 2282, 2279, 2284, 87, 2274, 2273, 87,
+ 2272, 2285, 87, 87, 3920, 87, 2277, 2283, 2276, 2286,
+ 2278, 87, 2280, 2287, 87, 2293, 87, 2288, 2290, 87,
+ 87, 2279, 87, 87, 2291, 2292, 87, 87, 2285, 2295,
+
+ 2296, 87, 2299, 2294, 2283, 87, 2286, 2297, 87, 87,
+ 2287, 87, 87, 2300, 2288, 2290, 2298, 87, 2301, 87,
+ 87, 2291, 2292, 2303, 2302, 87, 2295, 2296, 87, 2299,
+ 2294, 2304, 2305, 2308, 2297, 87, 2307, 3920, 2311, 2306,
+ 87, 2310, 2309, 2298, 2312, 2301, 87, 2315, 3920, 87,
+ 2313, 2302, 2317, 87, 2316, 87, 87, 2314, 2304, 87,
+ 87, 87, 2318, 2307, 87, 87, 2306, 87, 2310, 2309,
+ 87, 87, 87, 2319, 2315, 87, 2321, 2313, 2320, 2317,
+ 2323, 2316, 2322, 87, 2314, 87, 87, 2324, 87, 2318,
+ 2326, 2327, 3920, 2325, 2329, 3920, 2332, 2331, 87, 2328,
+
+ 2319, 87, 87, 2321, 87, 2320, 87, 2323, 87, 2322,
+ 2330, 87, 2333, 2334, 3920, 3920, 2340, 87, 2327, 87,
+ 2325, 2329, 87, 2332, 2331, 2335, 2328, 2336, 87, 2337,
+ 2338, 2342, 2339, 2343, 87, 87, 3920, 2330, 87, 2333,
+ 87, 87, 87, 2340, 2341, 2344, 2345, 2348, 2346, 87,
+ 2356, 3920, 2335, 2347, 2336, 87, 2337, 2338, 2342, 2339,
+ 87, 2349, 2351, 87, 87, 87, 2350, 87, 2352, 87,
+ 87, 2341, 2344, 2345, 87, 2346, 2353, 2354, 2355, 87,
+ 2347, 2361, 87, 87, 87, 87, 2358, 2357, 2349, 2351,
+ 87, 2362, 2360, 2350, 2359, 2352, 87, 2363, 87, 2373,
+
+ 2368, 2369, 2367, 2353, 2354, 2355, 87, 2364, 87, 87,
+ 2365, 2370, 2374, 2358, 2357, 2366, 87, 87, 2362, 2360,
+ 87, 2359, 87, 2376, 2363, 87, 87, 2368, 87, 2367,
+ 2371, 87, 2375, 87, 2364, 2372, 2377, 2365, 87, 2378,
+ 2379, 2380, 2366, 2381, 87, 87, 2382, 2383, 2384, 87,
+ 2376, 87, 2385, 2386, 2387, 87, 2388, 87, 87, 2375,
+ 2389, 2390, 87, 2377, 87, 3920, 87, 2379, 2380, 87,
+ 2381, 87, 87, 2382, 2383, 2391, 2392, 2393, 87, 2385,
+ 87, 2387, 87, 2388, 2394, 87, 2395, 87, 2390, 2397,
+ 2396, 2398, 87, 2399, 87, 2400, 2403, 2401, 173, 87,
+
+ 2402, 2406, 2391, 2392, 2393, 2407, 3920, 2405, 2408, 2404,
+ 2409, 2394, 87, 2395, 87, 87, 87, 2396, 2398, 87,
+ 2399, 87, 87, 87, 2401, 2410, 87, 87, 87, 2411,
+ 87, 87, 2407, 87, 2405, 2408, 2404, 2409, 2414, 2412,
+ 2415, 2416, 2417, 87, 2413, 3920, 2418, 87, 3920, 2419,
+ 2422, 87, 2410, 2421, 3920, 2420, 2411, 87, 2427, 2424,
+ 2423, 2425, 87, 87, 87, 2414, 2426, 2415, 2416, 2417,
+ 87, 87, 87, 2418, 2429, 87, 2419, 87, 87, 3920,
+ 2421, 87, 2420, 87, 2428, 87, 2424, 2423, 2425, 2430,
+ 87, 87, 87, 2426, 2431, 2432, 2433, 2435, 87, 2436,
+
+ 3920, 2429, 87, 2434, 2437, 2438, 2442, 2439, 87, 3920,
+ 2443, 2428, 3920, 2440, 87, 87, 2430, 2444, 2459, 87,
+ 87, 2431, 87, 2433, 2441, 87, 2436, 87, 87, 87,
+ 2434, 2437, 2438, 2442, 2439, 87, 2445, 2443, 2446, 87,
+ 2440, 2447, 2448, 87, 2444, 2450, 2449, 2451, 2452, 2454,
+ 87, 2441, 87, 2453, 3920, 2455, 3920, 87, 2461, 87,
+ 87, 87, 2471, 2445, 87, 2446, 87, 87, 2447, 2448,
+ 2456, 2457, 2450, 2449, 2451, 87, 2454, 87, 2458, 2460,
+ 2453, 87, 2455, 87, 87, 2461, 2462, 2463, 2465, 87,
+ 2464, 87, 2467, 2466, 87, 2468, 3920, 2456, 2457, 87,
+
+ 87, 3920, 2470, 2469, 3920, 2458, 2460, 87, 2473, 2475,
+ 2480, 87, 87, 2462, 2463, 87, 87, 2464, 2472, 87,
+ 2466, 87, 2468, 87, 2476, 87, 2477, 2474, 87, 2470,
+ 2469, 87, 87, 2479, 2478, 2473, 2475, 2480, 3920, 87,
+ 2481, 2485, 2483, 2487, 2482, 2472, 2484, 87, 2488, 3920,
+ 87, 2476, 87, 2477, 2474, 87, 87, 87, 2486, 87,
+ 2479, 2478, 2489, 2497, 2496, 2494, 87, 2481, 2485, 2483,
+ 87, 2482, 87, 2484, 3920, 87, 2490, 2491, 2495, 87,
+ 2492, 2499, 87, 3920, 3920, 2486, 2498, 2500, 87, 2489,
+ 87, 2496, 2494, 2493, 2501, 87, 2503, 2504, 3920, 2502,
+
+ 2505, 87, 2511, 2490, 2491, 2495, 87, 2492, 2499, 87,
+ 2506, 87, 2508, 2498, 2500, 2507, 87, 87, 87, 2509,
+ 2493, 2501, 87, 2503, 2504, 2510, 2502, 2505, 87, 2511,
+ 87, 2512, 87, 2513, 2515, 87, 2517, 2506, 2514, 2508,
+ 2516, 87, 2507, 87, 2518, 87, 2509, 87, 2519, 2520,
+ 87, 2521, 2510, 2528, 2522, 2523, 87, 87, 2512, 2525,
+ 2513, 87, 2524, 2517, 3920, 2514, 87, 2516, 87, 2529,
+ 3920, 2518, 2538, 87, 2526, 87, 2520, 87, 2521, 87,
+ 2527, 2522, 2523, 87, 87, 87, 2525, 87, 2530, 2524,
+ 2531, 87, 2532, 2534, 2537, 2535, 2529, 2533, 2536, 87,
+
+ 2539, 2526, 87, 87, 2541, 87, 2543, 2527, 2545, 87,
+ 2544, 87, 87, 2540, 2550, 2530, 87, 2531, 3920, 2546,
+ 2534, 2537, 2535, 2542, 87, 2536, 87, 2539, 87, 87,
+ 87, 2541, 87, 87, 2547, 2545, 2548, 2544, 87, 3920,
+ 2540, 87, 2551, 2554, 2549, 2555, 2546, 2552, 3920, 2553,
+ 2542, 2556, 3920, 3920, 2557, 87, 3920, 87, 2560, 2562,
+ 87, 87, 2558, 2548, 2563, 2559, 87, 87, 2565, 2551,
+ 2554, 2549, 2555, 87, 2552, 87, 2553, 87, 2556, 2564,
+ 87, 2557, 2561, 87, 2566, 2560, 87, 2567, 87, 2558,
+ 2568, 87, 2559, 2569, 87, 2565, 2570, 2575, 2571, 87,
+
+ 3920, 87, 3920, 2574, 2576, 87, 2564, 2572, 2580, 2561,
+ 87, 2566, 87, 87, 2567, 87, 2581, 2568, 87, 2573,
+ 2569, 87, 2579, 2570, 87, 2571, 87, 2577, 2578, 87,
+ 2574, 2576, 2582, 87, 2572, 2580, 87, 87, 2583, 2587,
+ 2586, 2584, 2585, 2581, 87, 2589, 2573, 87, 2588, 2579,
+ 3920, 3920, 3920, 2590, 2577, 2578, 87, 87, 2591, 2582,
+ 87, 87, 87, 87, 2595, 2583, 2587, 2586, 2584, 2585,
+ 87, 2592, 2589, 2593, 2594, 2588, 87, 2596, 87, 87,
+ 2590, 2597, 2599, 87, 2598, 2591, 87, 2600, 2601, 2603,
+ 2602, 2595, 2606, 3920, 87, 2604, 2610, 87, 2592, 87,
+
+ 2593, 2594, 87, 2605, 2596, 87, 87, 3920, 2597, 87,
+ 2614, 2598, 2607, 2608, 2600, 87, 2603, 2602, 87, 2606,
+ 87, 2609, 2604, 2615, 87, 87, 2611, 2612, 87, 87,
+ 2605, 173, 2613, 2616, 2618, 2617, 2619, 2621, 2622, 2607,
+ 2608, 87, 87, 87, 2623, 2620, 87, 2627, 2609, 87,
+ 2626, 2632, 2628, 2611, 87, 87, 2639, 87, 2624, 87,
+ 2616, 2618, 2617, 2619, 2621, 87, 2629, 2630, 87, 2625,
+ 87, 2623, 2620, 2635, 87, 2633, 87, 2626, 87, 2628,
+ 2631, 87, 2634, 87, 2636, 2624, 2637, 87, 87, 87,
+ 2638, 2640, 2641, 2629, 2630, 87, 2625, 2642, 2643, 87,
+
+ 2635, 87, 2633, 3920, 2644, 87, 87, 2631, 2645, 2634,
+ 87, 2636, 87, 87, 87, 2647, 2649, 2638, 2640, 2641,
+ 87, 2655, 2646, 2648, 2642, 2643, 87, 87, 2650, 2651,
+ 87, 2644, 87, 3920, 2652, 2645, 2653, 87, 87, 2654,
+ 87, 87, 2647, 2649, 87, 2656, 3920, 2657, 87, 2646,
+ 2648, 2658, 2662, 2659, 2664, 2650, 2651, 2665, 87, 87,
+ 2661, 2652, 87, 2653, 2660, 87, 2654, 87, 87, 87,
+ 2667, 87, 2656, 87, 2657, 2663, 87, 2666, 2658, 2662,
+ 2659, 2664, 2668, 87, 2665, 2669, 87, 2661, 2670, 2673,
+ 2671, 2660, 87, 87, 2678, 2672, 87, 87, 87, 87,
+
+ 2674, 87, 2663, 2676, 2666, 2675, 2679, 2677, 87, 2668,
+ 2681, 87, 2669, 87, 2683, 2670, 2673, 2671, 87, 2680,
+ 2682, 3920, 2672, 2684, 87, 2686, 87, 2674, 2689, 2685,
+ 2676, 87, 2675, 87, 2677, 87, 87, 2681, 87, 2687,
+ 2688, 2683, 87, 2693, 2691, 2692, 2680, 2682, 87, 2694,
+ 2684, 2690, 87, 2696, 87, 2689, 2685, 87, 2695, 87,
+ 2702, 87, 2697, 2698, 87, 2699, 2687, 2688, 2703, 87,
+ 2693, 2691, 2692, 2705, 87, 87, 87, 2708, 2690, 87,
+ 87, 2700, 2709, 87, 2701, 2695, 2704, 87, 2706, 2697,
+ 2698, 2707, 2699, 2715, 87, 2703, 3920, 2710, 87, 87,
+
+ 2705, 2711, 2714, 2712, 87, 2713, 87, 87, 2700, 87,
+ 87, 2701, 87, 2704, 2716, 2706, 2718, 87, 2707, 87,
+ 87, 2720, 2719, 87, 2710, 2717, 2721, 2723, 2711, 2714,
+ 2712, 87, 2713, 87, 2722, 2724, 2728, 2725, 87, 2726,
+ 2729, 87, 2727, 87, 2733, 2730, 87, 2731, 87, 2719,
+ 87, 2732, 2717, 2721, 87, 87, 87, 87, 87, 2735,
+ 2737, 2722, 87, 2728, 2725, 2739, 2726, 87, 87, 2727,
+ 2736, 87, 2730, 87, 2731, 2734, 2742, 2738, 2732, 87,
+ 2740, 2748, 87, 87, 2744, 2743, 87, 2737, 2745, 87,
+ 3920, 2747, 2739, 87, 2749, 2741, 87, 2736, 87, 87,
+
+ 2754, 2755, 2734, 87, 2738, 2746, 87, 2740, 87, 2750,
+ 2752, 2744, 2743, 87, 87, 2745, 87, 87, 2747, 2751,
+ 2757, 2753, 2741, 87, 3920, 3920, 87, 2754, 87, 2758,
+ 2756, 87, 2746, 87, 3920, 2760, 2750, 2752, 87, 2759,
+ 2762, 2765, 87, 2763, 2764, 2776, 2751, 2757, 2753, 2761,
+ 87, 87, 87, 2768, 87, 2770, 2758, 2756, 2769, 87,
+ 2766, 87, 2760, 2767, 87, 87, 2759, 87, 2765, 87,
+ 2763, 2764, 87, 2771, 2772, 3920, 2761, 87, 2773, 2777,
+ 2768, 87, 2770, 3920, 3920, 2769, 2778, 2766, 2779, 2780,
+ 2767, 87, 2785, 2774, 87, 2775, 2781, 2791, 87, 87,
+
+ 2771, 2772, 87, 2782, 3920, 2773, 2777, 2784, 87, 2787,
+ 87, 87, 2783, 2778, 87, 2779, 2780, 87, 87, 2785,
+ 2774, 2788, 2775, 2781, 2789, 87, 2786, 87, 2790, 87,
+ 2782, 87, 2792, 2794, 2784, 2793, 2787, 2795, 2799, 2783,
+ 87, 87, 3920, 87, 2796, 87, 87, 2798, 2788, 87,
+ 2797, 2789, 87, 2786, 2800, 2790, 2801, 2802, 2803, 2807,
+ 2794, 2804, 2793, 87, 87, 2799, 87, 2806, 2805, 87,
+ 2808, 2796, 87, 2809, 2798, 87, 87, 2797, 87, 87,
+ 87, 2800, 2810, 2801, 2802, 2803, 87, 2812, 2804, 87,
+ 2811, 87, 2813, 2814, 2806, 2805, 87, 87, 3920, 2817,
+
+ 2809, 3920, 87, 2815, 3920, 87, 2818, 3920, 2820, 2810,
+ 2819, 2816, 3920, 2824, 2812, 87, 2825, 2811, 87, 2813,
+ 2821, 2826, 3920, 3920, 87, 87, 2817, 87, 87, 87,
+ 2815, 87, 2827, 2818, 87, 2820, 2828, 2819, 2816, 2822,
+ 2824, 2823, 173, 2825, 87, 2830, 87, 2821, 87, 2829,
+ 2832, 2831, 3920, 3920, 87, 2835, 2836, 2837, 2833, 2827,
+ 2841, 3920, 2834, 2828, 87, 87, 2822, 87, 2823, 87,
+ 87, 2840, 2830, 87, 87, 2839, 2829, 2832, 2831, 87,
+ 87, 2838, 2835, 2836, 2837, 2833, 87, 87, 87, 2834,
+ 2842, 2843, 2845, 87, 2844, 3920, 2848, 2849, 2840, 2846,
+
+ 2847, 3920, 2839, 2851, 3920, 2853, 2850, 3920, 2838, 2855,
+ 2859, 3920, 2852, 3920, 2858, 3920, 2881, 87, 87, 87,
+ 87, 2844, 87, 87, 87, 87, 2846, 2847, 87, 87,
+ 87, 87, 2853, 2850, 2854, 87, 2855, 2856, 2857, 2852,
+ 87, 2858, 87, 2860, 2861, 2862, 87, 2864, 87, 87,
+ 87, 2863, 2869, 3920, 2865, 2866, 87, 2871, 3920, 87,
+ 2870, 2854, 2867, 3920, 2856, 2857, 87, 2868, 87, 2873,
+ 2860, 2861, 2862, 3920, 87, 87, 87, 87, 2863, 2869,
+ 87, 2865, 2866, 87, 87, 87, 2872, 2870, 2874, 2867,
+ 2875, 87, 2876, 2877, 2868, 87, 2873, 87, 2878, 87,
+
+ 87, 2879, 2880, 3920, 2883, 2882, 87, 2884, 87, 2885,
+ 2890, 3920, 2894, 2872, 2886, 2874, 2888, 2875, 87, 2876,
+ 2877, 87, 87, 2897, 87, 2878, 87, 2887, 2879, 2880,
+ 87, 2883, 2882, 87, 2884, 87, 2885, 87, 87, 2889,
+ 2891, 2886, 2892, 2888, 87, 87, 2893, 2895, 87, 2899,
+ 2897, 2896, 3920, 87, 2887, 87, 2898, 2902, 2900, 3920,
+ 2901, 3920, 87, 2903, 2904, 2905, 2889, 2891, 87, 2892,
+ 87, 87, 2906, 2893, 87, 2908, 2899, 87, 2896, 87,
+ 2909, 87, 2910, 2898, 2902, 2900, 87, 2901, 87, 87,
+ 2903, 2904, 2905, 2907, 87, 2911, 87, 2912, 2913, 2906,
+
+ 2914, 87, 2908, 87, 2915, 2916, 2917, 2909, 2918, 2921,
+ 87, 2919, 87, 87, 87, 87, 87, 87, 87, 2920,
+ 2907, 2922, 2911, 2923, 87, 2913, 2924, 87, 87, 2925,
+ 87, 2915, 2916, 2917, 2926, 2918, 2921, 2927, 2919, 2940,
+ 3920, 2928, 2936, 87, 87, 87, 2920, 2929, 2922, 2930,
+ 2923, 2931, 2932, 87, 87, 2934, 87, 2933, 87, 2939,
+ 87, 2937, 2935, 2942, 2927, 2938, 87, 87, 2928, 87,
+ 87, 87, 87, 87, 2929, 87, 2930, 87, 2931, 2932,
+ 87, 87, 2934, 87, 2933, 2941, 2939, 2943, 2937, 2935,
+ 2942, 2944, 2938, 3920, 87, 2945, 2946, 2947, 2948, 2949,
+
+ 3920, 2950, 2951, 2954, 87, 87, 3920, 2953, 87, 2952,
+ 2956, 3920, 2941, 2957, 87, 87, 87, 3920, 2944, 2955,
+ 87, 87, 2945, 2946, 2947, 2948, 2949, 87, 2950, 87,
+ 2954, 87, 87, 87, 2953, 2958, 2952, 2956, 87, 2959,
+ 2957, 2960, 2961, 2962, 2963, 2964, 2955, 2965, 87, 2966,
+ 87, 87, 87, 2967, 2968, 2969, 87, 3920, 2970, 2971,
+ 3920, 87, 2958, 2974, 87, 2975, 2959, 87, 2960, 2961,
+ 2962, 2963, 2964, 87, 87, 2973, 2966, 2976, 2972, 2977,
+ 87, 87, 87, 2979, 87, 2970, 2971, 87, 2978, 87,
+ 2974, 87, 2975, 2980, 87, 87, 2983, 87, 87, 2985,
+
+ 87, 2981, 2973, 87, 2976, 2972, 2977, 87, 2982, 2984,
+ 2979, 2986, 2988, 2987, 2990, 2978, 2989, 87, 2991, 87,
+ 2980, 2996, 2993, 87, 2997, 2992, 87, 2998, 2981, 87,
+ 2994, 87, 87, 87, 87, 2982, 2984, 87, 87, 87,
+ 2987, 2990, 87, 2989, 87, 2991, 2995, 3001, 87, 2993,
+ 3003, 2997, 2992, 87, 87, 2999, 87, 2994, 3000, 3002,
+ 3004, 87, 87, 87, 3005, 87, 3006, 3007, 3008, 3920,
+ 3009, 87, 3010, 2995, 3001, 3013, 3011, 3003, 87, 87,
+ 3017, 3920, 2999, 173, 87, 3000, 3002, 3004, 87, 3012,
+ 87, 3005, 87, 3006, 3007, 3008, 87, 3009, 3016, 3010,
+
+ 3014, 87, 3013, 3011, 3015, 87, 3018, 87, 3019, 87,
+ 87, 3020, 3021, 3023, 3022, 3024, 3012, 3026, 3920, 3027,
+ 87, 3028, 3025, 3920, 87, 3016, 3920, 3014, 3920, 3920,
+ 3920, 3015, 87, 3018, 87, 3019, 87, 87, 3020, 3021,
+ 87, 3022, 87, 87, 3026, 87, 3027, 87, 3028, 3025,
+ 3029, 3030, 3031, 3032, 3033, 3034, 3036, 3035, 3038, 87,
+ 87, 87, 87, 87, 87, 87, 3037, 87, 3039, 3040,
+ 3920, 3920, 3046, 87, 3071, 87, 87, 3029, 3030, 3031,
+ 3032, 3033, 3034, 3036, 3035, 3038, 3044, 3045, 3047, 3042,
+ 3041, 3043, 3050, 3037, 87, 3039, 3040, 87, 87, 87,
+
+ 87, 87, 3048, 3049, 3051, 3052, 87, 87, 3056, 3920,
+ 87, 3053, 87, 3044, 3045, 3047, 3042, 3041, 3043, 87,
+ 87, 87, 87, 3064, 3054, 3055, 3920, 3057, 87, 3048,
+ 3049, 3051, 87, 87, 87, 3056, 3058, 3059, 3053, 87,
+ 3061, 3063, 3060, 3062, 3065, 87, 87, 3174, 87, 3066,
+ 87, 3054, 3055, 87, 3057, 3069, 87, 3068, 3070, 3920,
+ 3920, 87, 3078, 3058, 3059, 3067, 87, 3061, 3063, 3060,
+ 3062, 87, 3072, 3077, 87, 3074, 3066, 3073, 87, 87,
+ 3075, 87, 87, 3076, 3068, 87, 87, 87, 87, 87,
+ 3079, 3080, 3067, 3082, 3081, 87, 87, 87, 87, 3072,
+
+ 3077, 87, 3074, 3083, 3073, 3084, 3085, 3075, 3087, 87,
+ 3076, 3086, 87, 3089, 3088, 3090, 3091, 3079, 3080, 87,
+ 3082, 3081, 3920, 87, 3920, 3095, 3920, 3097, 87, 3092,
+ 3083, 3093, 3084, 3085, 87, 87, 87, 87, 3086, 87,
+ 87, 3088, 3090, 3091, 3094, 3099, 87, 87, 3096, 87,
+ 3098, 87, 3095, 87, 3097, 87, 3092, 87, 3093, 3100,
+ 3101, 3102, 3103, 3106, 3104, 3105, 87, 3107, 3108, 87,
+ 3109, 3094, 3099, 3114, 87, 3096, 87, 3098, 3112, 3113,
+ 87, 3117, 3920, 87, 3110, 87, 3100, 3101, 3102, 87,
+ 87, 3104, 3105, 87, 3107, 3108, 87, 3109, 3111, 87,
+
+ 87, 3115, 87, 3120, 3116, 3112, 3113, 3118, 87, 3119,
+ 87, 3110, 3121, 3122, 87, 87, 87, 87, 3123, 87,
+ 3124, 3125, 87, 3126, 3127, 3111, 3129, 3128, 3115, 3135,
+ 3120, 3116, 3920, 87, 3118, 87, 3119, 3130, 87, 3121,
+ 87, 3132, 3131, 3133, 87, 3123, 3137, 3124, 3125, 87,
+ 3126, 87, 87, 87, 3128, 3134, 87, 3136, 87, 87,
+ 87, 3138, 87, 87, 3130, 3140, 3139, 3141, 3132, 3131,
+ 3133, 87, 87, 3137, 3147, 3142, 3143, 3144, 3145, 87,
+ 3146, 87, 3134, 3150, 3136, 3149, 3151, 3152, 3138, 87,
+ 87, 3192, 87, 3139, 3141, 87, 87, 87, 87, 3148,
+
+ 3154, 87, 3142, 3143, 3144, 3145, 87, 3146, 87, 87,
+ 87, 3153, 3149, 3151, 3152, 3155, 3158, 3156, 3157, 3159,
+ 3162, 3163, 87, 87, 87, 87, 3148, 3154, 3160, 3161,
+ 3164, 87, 87, 3168, 87, 87, 87, 3165, 3153, 3167,
+ 3166, 87, 3155, 3158, 3156, 3157, 3159, 3162, 87, 3169,
+ 87, 87, 87, 3170, 3172, 3160, 3161, 87, 3177, 87,
+ 3168, 87, 3171, 87, 3165, 3173, 3167, 3166, 3175, 3176,
+ 3179, 87, 3178, 87, 87, 3181, 173, 3182, 3180, 3183,
+ 3170, 3172, 87, 3185, 87, 3177, 3204, 3186, 3920, 3171,
+ 87, 87, 3173, 3184, 3189, 3175, 3176, 3179, 87, 3178,
+
+ 87, 87, 87, 3187, 87, 3180, 3183, 87, 3188, 3190,
+ 87, 87, 3191, 87, 3186, 3193, 87, 3920, 3194, 3195,
+ 3184, 3189, 3197, 3199, 3198, 87, 3196, 3200, 3201, 87,
+ 3202, 87, 3920, 3920, 87, 87, 3190, 3207, 87, 3191,
+ 87, 87, 3193, 87, 87, 3194, 3195, 3203, 3205, 3197,
+ 3199, 3198, 87, 3196, 3206, 3208, 3209, 3202, 3210, 87,
+ 87, 87, 87, 3212, 3207, 3211, 3214, 3221, 87, 3216,
+ 87, 3215, 87, 3920, 3203, 3205, 87, 3213, 87, 3217,
+ 87, 3206, 3208, 3209, 87, 3210, 3218, 87, 3219, 87,
+ 3212, 87, 3211, 3214, 3220, 87, 3216, 87, 3215, 87,
+
+ 3223, 3222, 3227, 87, 3213, 3224, 3217, 3225, 87, 87,
+ 87, 3226, 87, 3218, 87, 3219, 3228, 3229, 3233, 87,
+ 3232, 3220, 87, 3230, 3231, 87, 3236, 3223, 3222, 87,
+ 87, 3234, 3224, 3243, 3225, 3920, 87, 3240, 3226, 3244,
+ 3235, 87, 87, 3228, 3229, 3233, 87, 3232, 3237, 87,
+ 3230, 3231, 87, 87, 3238, 3239, 87, 3241, 3234, 3242,
+ 87, 87, 87, 3246, 3240, 87, 87, 3235, 3245, 3247,
+ 3248, 87, 87, 3249, 3254, 3237, 87, 3250, 3252, 87,
+ 3251, 3238, 3239, 3259, 87, 3253, 3242, 3255, 3920, 3920,
+ 3246, 3261, 87, 3256, 3257, 3245, 87, 87, 3920, 87,
+
+ 3249, 87, 87, 87, 3250, 3252, 87, 3251, 3263, 3258,
+ 87, 87, 3253, 3260, 3255, 3262, 87, 87, 3261, 3264,
+ 3256, 3257, 87, 87, 87, 87, 3265, 3266, 3267, 3268,
+ 3270, 3271, 3920, 3920, 3272, 87, 3258, 3269, 3273, 3275,
+ 3260, 87, 3262, 3278, 3276, 3282, 3264, 3274, 87, 3920,
+ 87, 3277, 87, 87, 87, 87, 3268, 3270, 87, 87,
+ 87, 3272, 87, 3281, 3269, 3273, 87, 3283, 3279, 3280,
+ 3278, 87, 87, 3284, 3274, 87, 87, 3285, 3277, 3286,
+ 3288, 3290, 3289, 3287, 3291, 3920, 3292, 3293, 87, 87,
+ 3281, 87, 3295, 87, 87, 3279, 3280, 87, 3300, 3299,
+
+ 87, 87, 3296, 3294, 3285, 3298, 3286, 87, 3290, 3289,
+ 3287, 87, 87, 3292, 87, 87, 87, 3297, 87, 87,
+ 3301, 3304, 3302, 3305, 3306, 87, 87, 3303, 3307, 3296,
+ 3294, 87, 3298, 3308, 3309, 3310, 3312, 3313, 87, 3314,
+ 3315, 3317, 87, 87, 3297, 87, 87, 3301, 3304, 3311,
+ 3316, 3306, 87, 3318, 87, 87, 87, 87, 3319, 3320,
+ 87, 3309, 3310, 3312, 87, 3321, 3322, 3324, 3317, 87,
+ 3325, 87, 87, 3323, 3329, 87, 3311, 3316, 3326, 3327,
+ 87, 87, 3328, 87, 87, 87, 3320, 3332, 87, 3920,
+ 87, 87, 3321, 3322, 3324, 3330, 87, 3325, 3331, 3333,
+
+ 3323, 3329, 87, 3336, 87, 3326, 3327, 3334, 3338, 3328,
+ 3337, 87, 87, 3343, 87, 3335, 87, 3344, 87, 3339,
+ 3345, 87, 3330, 3341, 3340, 3331, 3333, 87, 3342, 3920,
+ 3336, 87, 3346, 3920, 3334, 3338, 3347, 3337, 3348, 3350,
+ 3343, 3349, 3335, 3920, 87, 3352, 87, 3345, 3351, 3356,
+ 87, 87, 87, 3353, 87, 87, 3354, 3358, 87, 3346,
+ 3355, 3357, 87, 3347, 87, 3348, 3350, 87, 3349, 87,
+ 87, 87, 3352, 87, 87, 3351, 3356, 3359, 3360, 87,
+ 3353, 3363, 3361, 3354, 3358, 87, 3362, 3355, 3357, 87,
+ 3364, 3365, 3367, 87, 3366, 87, 3371, 3373, 3370, 3368,
+
+ 3369, 3375, 3378, 3920, 3359, 3360, 87, 87, 87, 3361,
+ 3372, 3374, 3382, 3362, 3376, 87, 3377, 87, 3365, 87,
+ 87, 3366, 87, 87, 87, 3370, 3368, 3369, 87, 87,
+ 87, 3379, 87, 87, 87, 3380, 3381, 3372, 3374, 87,
+ 3383, 3376, 3384, 3377, 3386, 87, 3385, 3388, 3389, 87,
+ 3387, 3390, 87, 87, 3392, 87, 3391, 3394, 3379, 87,
+ 3393, 3397, 3380, 3381, 87, 87, 87, 87, 87, 3384,
+ 3395, 3386, 3396, 3385, 3388, 3389, 3398, 3387, 87, 3399,
+ 87, 3392, 87, 87, 3394, 3400, 3402, 3393, 87, 87,
+ 3401, 3403, 87, 3404, 87, 87, 3405, 3395, 87, 3396,
+
+ 3406, 3407, 3408, 3398, 87, 3412, 87, 3410, 3409, 3413,
+ 3920, 3415, 3400, 3402, 87, 3411, 87, 3401, 87, 3416,
+ 87, 3414, 87, 3405, 87, 87, 3417, 87, 3407, 3408,
+ 87, 3418, 87, 87, 3410, 3409, 3413, 87, 3415, 3419,
+ 3422, 87, 3411, 3420, 3421, 3426, 3416, 3427, 3414, 87,
+ 3423, 3428, 87, 3417, 87, 3429, 87, 3430, 3418, 3424,
+ 87, 87, 3425, 87, 87, 3435, 3419, 3422, 3431, 3434,
+ 3420, 3421, 87, 87, 87, 87, 3436, 3423, 87, 3432,
+ 3433, 3438, 3429, 3437, 3430, 87, 3424, 87, 87, 3425,
+ 3439, 87, 3442, 3443, 3440, 3431, 3434, 87, 87, 87,
+
+ 3444, 3446, 87, 3436, 3447, 87, 3432, 3433, 87, 87,
+ 3437, 3445, 3441, 87, 87, 3448, 3454, 3439, 87, 3442,
+ 3443, 3440, 3449, 87, 3450, 3451, 3455, 87, 87, 3452,
+ 3920, 3447, 87, 87, 3453, 3920, 3920, 87, 3445, 3441,
+ 3456, 87, 3448, 3454, 87, 3457, 87, 3459, 3458, 3449,
+ 87, 3450, 3451, 87, 87, 3460, 3452, 3461, 3462, 87,
+ 3463, 3453, 87, 3467, 3464, 3468, 87, 3456, 87, 3465,
+ 87, 3466, 3457, 87, 3459, 3458, 87, 3471, 87, 87,
+ 3470, 87, 3460, 87, 3461, 3462, 87, 3463, 3469, 87,
+ 3467, 3464, 3468, 3472, 3473, 3474, 3465, 87, 3466, 3476,
+
+ 3475, 3477, 87, 3478, 87, 3479, 3481, 3470, 3480, 3484,
+ 3487, 3920, 87, 3482, 87, 3469, 3486, 3490, 3483, 3920,
+ 87, 3473, 87, 3485, 87, 3492, 3476, 87, 3477, 87,
+ 87, 87, 87, 87, 87, 3480, 3484, 87, 87, 3488,
+ 3482, 3489, 3498, 3486, 3491, 3483, 87, 3493, 87, 87,
+ 3485, 3494, 87, 3496, 3495, 87, 3497, 3499, 3505, 87,
+ 3501, 87, 3920, 3500, 3502, 87, 3488, 87, 3489, 87,
+ 87, 3491, 3504, 87, 3493, 3506, 3507, 87, 3494, 3503,
+ 3496, 3495, 3509, 3497, 87, 87, 87, 3508, 87, 87,
+ 3500, 3502, 87, 3513, 87, 3511, 3515, 3512, 3514, 3504,
+
+ 87, 3510, 87, 3507, 87, 3517, 3503, 3518, 3920, 87,
+ 3516, 87, 87, 3519, 3508, 87, 3520, 3521, 3522, 3529,
+ 3513, 3524, 3511, 3515, 3512, 87, 3523, 3530, 3510, 87,
+ 87, 3525, 3517, 3528, 87, 87, 3532, 3516, 3531, 3538,
+ 3519, 3920, 87, 87, 3521, 3522, 87, 87, 3524, 3526,
+ 87, 87, 3527, 3523, 87, 87, 87, 3533, 3525, 87,
+ 3528, 3534, 87, 3535, 3536, 3531, 87, 3537, 87, 3541,
+ 3542, 87, 3539, 3540, 3546, 87, 3526, 3920, 3543, 3527,
+ 3550, 3548, 87, 87, 3533, 87, 87, 87, 3534, 3545,
+ 87, 3536, 87, 3544, 3537, 87, 87, 3542, 3547, 3539,
+
+ 3540, 87, 3551, 87, 3549, 3543, 87, 87, 3548, 3552,
+ 3553, 3554, 3555, 3556, 3557, 3558, 3545, 3559, 3560, 3561,
+ 3544, 3564, 87, 3563, 87, 3547, 3562, 87, 3920, 87,
+ 3565, 3549, 87, 87, 87, 87, 87, 3553, 3554, 3555,
+ 87, 87, 87, 87, 3559, 87, 3561, 3566, 3564, 3567,
+ 3568, 3569, 3575, 3562, 3572, 87, 3570, 87, 87, 87,
+ 3571, 87, 87, 3573, 3577, 87, 3574, 3578, 87, 3576,
+ 87, 3580, 87, 3581, 3566, 3579, 87, 87, 3569, 87,
+ 87, 3572, 87, 3570, 3582, 3583, 3584, 3571, 3585, 87,
+ 3573, 3577, 87, 3574, 3578, 87, 3576, 3586, 3580, 3587,
+
+ 87, 3588, 3579, 3589, 87, 3591, 3592, 87, 87, 3590,
+ 3595, 87, 3583, 3584, 3594, 87, 3593, 3598, 3597, 3596,
+ 87, 3920, 3920, 87, 3586, 87, 3587, 87, 3588, 3599,
+ 3589, 3601, 87, 87, 87, 3602, 3590, 87, 87, 3605,
+ 3600, 3594, 87, 3593, 87, 3597, 3596, 87, 3603, 3606,
+ 3607, 87, 3604, 3609, 87, 87, 3599, 87, 3601, 87,
+ 3608, 87, 3602, 3610, 87, 87, 3605, 3600, 3920, 87,
+ 3611, 3920, 3622, 3920, 87, 3603, 3606, 3607, 87, 3604,
+ 3609, 3612, 87, 3614, 3613, 3615, 3627, 3608, 87, 3618,
+ 3610, 87, 87, 3616, 3617, 87, 87, 3611, 3621, 3624,
+
+ 3619, 3620, 3623, 87, 87, 87, 87, 3625, 3612, 3628,
+ 3614, 3613, 3615, 87, 3629, 3920, 3618, 3631, 3626, 3634,
+ 3616, 3617, 87, 87, 87, 3621, 3624, 3619, 3620, 3623,
+ 3630, 87, 87, 3632, 3625, 3633, 87, 87, 3635, 3636,
+ 3641, 3629, 87, 87, 87, 3626, 87, 3637, 3638, 3920,
+ 87, 3639, 3640, 3642, 3643, 87, 3644, 3630, 3647, 3645,
+ 3632, 3648, 3633, 3650, 3649, 3635, 87, 87, 3651, 3646,
+ 87, 3652, 3920, 3655, 3920, 3654, 87, 87, 87, 87,
+ 87, 87, 87, 3644, 3656, 87, 3645, 87, 3648, 3659,
+ 87, 3649, 3653, 87, 87, 3651, 3646, 87, 3652, 87,
+
+ 87, 3657, 3654, 3658, 3660, 87, 3661, 3664, 87, 87,
+ 3662, 3656, 3663, 3665, 3666, 3669, 3659, 3668, 3667, 3653,
+ 3670, 87, 87, 3671, 87, 3679, 3673, 87, 3657, 3920,
+ 3658, 3660, 87, 3661, 3664, 87, 87, 3662, 87, 3663,
+ 3665, 87, 87, 87, 3668, 3667, 3672, 87, 3674, 3675,
+ 87, 87, 3676, 3673, 3677, 3682, 3680, 87, 87, 3678,
+ 3681, 87, 3683, 3684, 3686, 3687, 3685, 87, 3689, 3690,
+ 87, 3688, 87, 3672, 87, 3674, 3675, 3692, 3693, 3676,
+ 3695, 3694, 3682, 3680, 87, 87, 87, 3681, 3691, 3683,
+ 3684, 87, 87, 3685, 87, 87, 87, 87, 3688, 87,
+
+ 87, 3696, 3697, 3698, 3692, 87, 3699, 87, 3694, 3700,
+ 3701, 87, 3702, 3703, 3704, 3691, 3705, 3706, 87, 87,
+ 3707, 3708, 3709, 3713, 3710, 3712, 3714, 3920, 3696, 3697,
+ 87, 3711, 87, 87, 3716, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 3706, 3717, 87, 3707, 87, 87,
+ 3713, 3710, 3712, 87, 3715, 3718, 3719, 87, 3711, 3720,
+ 3721, 87, 87, 3722, 3723, 3724, 3725, 3732, 3726, 87,
+ 3727, 87, 3717, 3728, 87, 87, 87, 87, 3729, 3731,
+ 3730, 3715, 3718, 3719, 3920, 87, 3720, 3721, 87, 87,
+ 87, 3723, 87, 3725, 87, 3726, 3733, 3727, 3734, 87,
+
+ 3728, 3737, 3735, 87, 87, 3729, 3731, 3730, 3736, 87,
+ 87, 3738, 87, 3739, 3740, 3741, 3748, 87, 3742, 3744,
+ 87, 3743, 87, 3733, 3749, 3734, 87, 87, 3737, 3735,
+ 3745, 87, 87, 3747, 3746, 3736, 3750, 87, 3738, 3751,
+ 3739, 3740, 3741, 87, 87, 3742, 3744, 87, 3743, 3752,
+ 3753, 87, 87, 87, 3757, 3754, 3758, 3745, 87, 3756,
+ 3747, 3746, 3755, 87, 3760, 3761, 87, 87, 87, 87,
+ 3759, 87, 3763, 3762, 87, 3764, 3752, 3753, 87, 3765,
+ 87, 3757, 3754, 3920, 87, 3767, 3756, 87, 87, 3755,
+ 3772, 3760, 3761, 87, 87, 3766, 3768, 3759, 87, 3763,
+
+ 3762, 87, 3764, 87, 3770, 87, 3765, 87, 3769, 3771,
+ 87, 3773, 3767, 3774, 3775, 3776, 87, 3772, 3777, 87,
+ 3778, 3779, 3766, 3768, 3780, 3782, 87, 87, 87, 87,
+ 3781, 3770, 87, 87, 3783, 3769, 3771, 87, 3773, 3785,
+ 3774, 3775, 3776, 87, 3784, 3777, 87, 87, 3779, 3786,
+ 3787, 3780, 3782, 3788, 3789, 3790, 3791, 3781, 3792, 3798,
+ 3793, 87, 87, 87, 87, 87, 3785, 3794, 3795, 3920,
+ 3802, 3784, 87, 3796, 3797, 87, 87, 3787, 3920, 87,
+ 3788, 87, 87, 3791, 87, 3792, 87, 3793, 3800, 87,
+ 87, 87, 3799, 3804, 3794, 3795, 3801, 87, 3805, 3803,
+
+ 3796, 3797, 3806, 87, 3807, 87, 87, 3810, 3809, 3808,
+ 3811, 3812, 3815, 3817, 3813, 3800, 87, 87, 87, 3799,
+ 87, 87, 87, 3801, 3814, 87, 3803, 87, 3816, 87,
+ 3819, 87, 87, 87, 87, 3809, 3808, 3811, 3812, 87,
+ 3817, 3813, 3818, 3820, 3821, 3822, 3824, 3825, 3920, 3826,
+ 87, 3814, 3823, 3829, 87, 3816, 3828, 87, 3827, 87,
+ 87, 3830, 87, 87, 87, 3834, 87, 3831, 87, 3818,
+ 3832, 3821, 3822, 3824, 87, 87, 87, 3833, 87, 3823,
+ 3829, 3835, 3836, 3828, 87, 3827, 3837, 87, 87, 87,
+ 3838, 3841, 3834, 87, 3831, 3842, 87, 3832, 87, 3839,
+
+ 87, 3840, 87, 3843, 3833, 3846, 3844, 3845, 3835, 3836,
+ 3920, 3848, 87, 3837, 87, 3847, 3854, 3838, 87, 3849,
+ 3855, 87, 3842, 87, 3920, 87, 3839, 3850, 3840, 3851,
+ 3843, 3852, 87, 3844, 3845, 3856, 3853, 87, 3857, 3864,
+ 3920, 3858, 3847, 87, 87, 87, 3849, 87, 87, 87,
+ 87, 87, 3859, 87, 3850, 3867, 3851, 87, 3852, 3860,
+ 3861, 3862, 3856, 3853, 3863, 87, 3865, 87, 3858, 87,
+ 3866, 87, 87, 3868, 87, 87, 3869, 3872, 3920, 3859,
+ 87, 87, 3867, 3920, 87, 3876, 3860, 3861, 3862, 3870,
+ 3873, 3863, 3871, 3865, 3874, 87, 3875, 3866, 87, 87,
+
+ 3868, 3878, 87, 87, 3872, 3877, 3879, 87, 3880, 87,
+ 87, 87, 3876, 3881, 3882, 87, 3870, 3873, 3883, 3871,
+ 3884, 3874, 87, 3875, 3888, 3889, 3885, 87, 3878, 87,
+ 3886, 3920, 3877, 3879, 3887, 3880, 3890, 3891, 3892, 87,
+ 3881, 3882, 87, 3898, 87, 3883, 87, 3884, 87, 3893,
+ 87, 87, 87, 3885, 3894, 3896, 3900, 3886, 87, 3895,
+ 3897, 3887, 87, 3890, 3891, 87, 3901, 87, 87, 87,
+ 87, 3899, 3902, 3905, 87, 3904, 3893, 87, 87, 87,
+ 87, 3894, 3896, 3900, 3903, 3909, 3895, 3897, 87, 3906,
+ 3920, 3908, 87, 3901, 3910, 3907, 3911, 87, 3899, 3902,
+
+ 87, 87, 3904, 87, 3912, 3913, 3914, 3915, 3918, 3919,
+ 3920, 3903, 87, 3920, 87, 3920, 3906, 87, 3908, 3916,
+ 3920, 3910, 3907, 87, 3920, 87, 3920, 87, 87, 87,
+ 3917, 87, 3913, 3914, 3915, 87, 87, 3920, 87, 3920,
+ 3920, 3920, 3920, 3920, 3920, 3920, 3916, 3920, 3920, 3920,
+ 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3917, 48, 48,
+ 48, 48, 48, 48, 48, 53, 53, 53, 53, 53,
+ 53, 53, 58, 58, 58, 58, 58, 58, 58, 64,
+ 64, 64, 64, 64, 64, 64, 69, 69, 69, 69,
+ 69, 69, 69, 75, 75, 75, 75, 75, 75, 75,
+
+ 81, 81, 81, 81, 81, 81, 81, 90, 90, 3920,
+ 90, 90, 90, 90, 163, 163, 3920, 3920, 3920, 163,
+ 163, 165, 165, 3920, 3920, 165, 3920, 165, 167, 3920,
+ 3920, 3920, 3920, 3920, 167, 170, 170, 3920, 3920, 3920,
+ 170, 170, 172, 3920, 3920, 3920, 3920, 3920, 172, 174,
+ 174, 3920, 174, 174, 174, 174, 177, 3920, 3920, 3920,
+ 3920, 3920, 177, 180, 180, 3920, 3920, 3920, 180, 180,
+ 91, 91, 3920, 91, 91, 91, 91, 17, 3920, 3920,
+ 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920,
+ 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920,
+
+ 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920,
+ 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920,
+ 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920,
+ 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920,
+ 3920, 3920, 3920, 3920
} ;
-static const flex_int16_t yy_chk[11176] =
+static const flex_int16_t yy_chk[11245] =
{ 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
@@ -2958,16 +2969,16 @@ static const flex_int16_t yy_chk[11176] =
7, 7, 7, 33, 7, 8, 8, 8, 8, 32,
8, 9, 9, 9, 10, 10, 10, 19, 52, 52,
- 3912, 19, 235, 3, 32, 33, 4, 68, 68, 5,
- 33, 6, 3156, 13, 13, 13, 13, 7, 13, 14,
+ 3928, 19, 235, 3, 32, 33, 4, 68, 68, 5,
+ 33, 6, 3195, 13, 13, 13, 13, 7, 13, 14,
14, 14, 14, 8, 14, 15, 15, 15, 9, 25,
235, 10, 11, 11, 11, 11, 11, 11, 12, 12,
12, 12, 12, 12, 16, 16, 16, 34, 28, 85,
- 85, 13, 11, 46, 1212, 25, 25, 14, 12, 34,
- 39, 23, 15, 23, 23, 46, 23, 180, 28, 611,
- 11, 28, 23, 39, 34, 28, 12, 179, 88, 11,
- 46, 16, 88, 164, 164, 12, 30, 39, 29, 177,
- 45, 172, 37, 73, 30, 28, 26, 611, 37, 23,
+ 85, 13, 11, 46, 3169, 25, 25, 14, 12, 34,
+ 39, 23, 15, 23, 23, 46, 23, 1212, 28, 611,
+ 11, 28, 23, 39, 34, 28, 12, 180, 88, 11,
+ 46, 16, 88, 164, 164, 12, 30, 39, 29, 179,
+ 45, 177, 37, 73, 30, 28, 26, 611, 37, 23,
24, 24, 29, 26, 24, 30, 73, 26, 102, 24,
26, 24, 30, 30, 29, 29, 45, 45, 24, 37,
@@ -2975,41 +2986,41 @@ static const flex_int16_t yy_chk[11176] =
26, 24, 30, 200, 26, 102, 24, 26, 24, 57,
94, 166, 57, 306, 166, 24, 27, 225, 31, 93,
27, 31, 93, 27, 95, 27, 27, 228, 31, 47,
- 31, 47, 47, 94, 47, 200, 27, 94, 27, 170,
+ 31, 47, 47, 94, 47, 200, 27, 94, 27, 172,
47, 31, 306, 27, 95, 31, 35, 27, 31, 225,
27, 95, 27, 27, 35, 31, 101, 31, 36, 228,
- 35, 98, 36, 27, 35, 101, 44, 169, 98, 42,
+ 35, 98, 36, 27, 35, 101, 44, 170, 98, 42,
- 44, 42, 35, 35, 44, 96, 36, 167, 36, 165,
- 42, 35, 163, 101, 36, 36, 42, 35, 98, 36,
+ 44, 42, 35, 35, 44, 96, 36, 169, 36, 167,
+ 42, 35, 165, 101, 36, 36, 42, 35, 98, 36,
96, 35, 44, 44, 43, 42, 42, 44, 42, 109,
- 86, 44, 96, 36, 43, 36, 38, 42, 43, 43,
- 38, 97, 109, 42, 38, 171, 171, 43, 81, 97,
+ 163, 44, 96, 36, 43, 36, 38, 42, 43, 43,
+ 38, 97, 109, 42, 38, 171, 171, 43, 86, 97,
38, 43, 63, 38, 63, 63, 109, 63, 99, 106,
- 38, 43, 38, 38, 106, 43, 43, 38, 97, 76,
+ 38, 43, 38, 38, 106, 43, 43, 38, 97, 81,
71, 38, 71, 71, 113, 71, 74, 38, 74, 74,
- 38, 74, 99, 113, 75, 99, 106, 38, 40, 143,
+ 38, 74, 99, 113, 76, 99, 106, 38, 40, 143,
143, 80, 40, 80, 80, 87, 80, 87, 87, 139,
87, 113, 40, 40, 100, 40, 87, 90, 71, 90,
90, 114, 90, 107, 40, 40, 143, 100, 90, 40,
- 114, 107, 103, 103, 69, 139, 139, 64, 100, 40,
- 40, 100, 40, 41, 111, 103, 41, 59, 114, 115,
+ 114, 107, 103, 103, 75, 139, 139, 69, 100, 40,
+ 40, 100, 40, 41, 111, 103, 41, 64, 114, 115,
107, 111, 110, 41, 100, 90, 104, 41, 41, 103,
103, 110, 104, 108, 104, 41, 105, 105, 181, 181,
41, 111, 115, 41, 110, 105, 115, 104, 117, 110,
- 41, 108, 127, 104, 41, 41, 120, 58, 110, 104,
+ 41, 108, 127, 104, 41, 41, 120, 59, 110, 104,
118, 104, 116, 105, 105, 108, 112, 112, 119, 116,
117, 119, 127, 118, 112, 117, 355, 122, 108, 127,
- 120, 53, 112, 121, 119, 119, 129, 118, 120, 116,
- 48, 121, 119, 112, 112, 119, 123, 122, 119, 122,
+ 120, 58, 112, 121, 119, 119, 129, 118, 120, 116,
+ 53, 121, 119, 112, 112, 119, 123, 122, 119, 122,
123, 112, 125, 126, 122, 355, 129, 120, 131, 124,
121, 119, 119, 129, 124, 125, 123, 124, 128, 130,
123, 132, 131, 123, 122, 128, 126, 123, 132, 125,
- 126, 133, 128, 134, 135, 131, 124, 130, 136, 18,
+ 126, 133, 128, 134, 135, 131, 124, 130, 136, 48,
137, 124, 134, 123, 137, 128, 130, 136, 132, 138,
- 137, 17, 128, 0, 133, 141, 138, 135, 133, 140,
+ 137, 18, 128, 17, 133, 141, 138, 135, 133, 140,
134, 135, 137, 142, 141, 136, 140, 137, 145, 148,
141, 137, 144, 146, 241, 142, 138, 137, 141, 145,
@@ -3319,863 +3330,871 @@ static const flex_int16_t yy_chk[11176] =
1006, 1003, 1012, 1008, 1006, 1003, 0, 1003, 1009, 1007,
1010, 1010, 1003, 1011, 1012, 0, 1016, 1003, 1013, 1014,
1011, 1016, 1015, 1003, 1007, 1017, 1003, 0, 1003, 1012,
- 1025, 1013, 1003, 1010, 1003, 1015, 1023, 1010, 1010, 1003,
+ 0, 1013, 1003, 1010, 1003, 1015, 1022, 1010, 1010, 1003,
1011, 1014, 1018, 1017, 1003, 1013, 1014, 1019, 1016, 1015,
- 1020, 1021, 1017, 1022, 1024, 1018, 1034, 1025, 1023, 1019,
- 1026, 1021, 1020, 1023, 1028, 1032, 1026, 1024, 1022, 1018,
- 1019, 1027, 1029, 1021, 1019, 1030, 1033, 1020, 1021, 1031,
- 1022, 1024, 1028, 1034, 1027, 1036, 1019, 1026, 1021, 1350,
- 1350, 1028, 1041, 1042, 1029, 1037, 1030, 1032, 1027, 1029,
- 1037, 1031, 1030, 1038, 1039, 0, 1031, 1041, 1033, 1044,
- 0, 1038, 1054, 1039, 1043, 1042, 1045, 1036, 1350, 1041,
- 1042, 1047, 1037, 0, 1044, 1046, 1051, 1043, 0, 1061,
- 1038, 1039, 1040, 1048, 1051, 0, 1044, 1040, 1049, 1040,
-
- 1047, 1043, 1045, 1045, 1054, 1040, 1048, 1046, 1047, 1049,
- 1040, 1040, 1046, 1051, 1050, 1052, 1061, 1040, 1040, 1040,
- 1048, 1055, 1053, 1052, 1040, 1049, 1040, 1050, 1058, 1065,
- 1056, 1057, 1040, 1053, 0, 1070, 0, 1040, 1040, 1058,
- 1057, 1050, 1052, 1055, 1040, 1056, 1062, 1059, 1055, 1053,
- 1060, 1066, 1069, 1063, 1067, 1058, 1059, 1056, 1057, 1060,
- 1063, 1065, 1067, 1068, 1071, 1074, 1069, 1070, 1072, 1062,
- 1075, 1076, 1077, 1062, 1059, 1066, 1072, 1060, 1066, 1069,
- 1063, 1067, 1076, 1074, 1078, 1068, 1071, 1080, 1075, 1081,
- 1068, 1071, 1074, 1079, 1082, 1072, 1081, 1075, 1076, 1083,
-
- 1085, 1079, 1078, 1084, 1077, 1086, 1087, 1082, 1088, 1080,
- 1084, 1078, 1089, 1090, 1080, 1085, 1081, 1092, 1098, 1097,
- 1079, 1082, 1089, 1086, 1087, 1083, 1083, 1085, 1092, 1088,
- 1084, 1095, 1086, 1087, 1094, 1088, 1100, 1111, 1095, 1089,
- 1096, 1097, 1096, 1099, 1092, 1090, 1097, 1094, 1101, 1100,
- 1098, 1099, 1102, 1109, 1103, 1104, 1107, 1101, 1095, 1110,
- 1112, 1094, 1108, 1100, 1102, 0, 0, 1096, 0, 1111,
- 1099, 1109, 1113, 0, 0, 1101, 1103, 1104, 1107, 1102,
- 1109, 1103, 1104, 1107, 1108, 1110, 1110, 1115, 1114, 1108,
- 1113, 1117, 1112, 1118, 1120, 1121, 1123, 1120, 1118, 1113,
-
- 1114, 1115, 1117, 1122, 1124, 1125, 1126, 1121, 1127, 1123,
- 0, 1124, 1130, 1132, 1115, 1114, 1125, 1127, 1117, 0,
- 1120, 1120, 1121, 1123, 1120, 1118, 1126, 1122, 1128, 1129,
- 1122, 1124, 1125, 1126, 1133, 1127, 1131, 1134, 1135, 0,
- 1137, 1129, 1128, 1131, 1130, 1132, 1133, 1138, 1139, 1142,
- 1140, 1135, 0, 0, 1139, 1128, 1129, 1141, 1146, 1134,
- 1142, 1133, 1143, 1131, 1134, 1135, 1137, 1137, 1144, 1145,
- 1149, 1138, 1140, 1146, 1138, 1139, 1142, 1140, 1148, 1141,
- 1143, 1149, 1150, 1152, 1141, 1146, 1151, 1153, 0, 1143,
- 1144, 1145, 1151, 1154, 1156, 1144, 1145, 1149, 1155, 1148,
-
- 1157, 1158, 1163, 1150, 1159, 1148, 1161, 1155, 1162, 1150,
- 1158, 1154, 1159, 1151, 1153, 1152, 1160, 1164, 1156, 1165,
- 1154, 1156, 1162, 1160, 1168, 1155, 1157, 1157, 1158, 1170,
- 1161, 1159, 1166, 1161, 1163, 1162, 1167, 1173, 1169, 1175,
- 1172, 1174, 0, 1160, 0, 1177, 1173, 1176, 1174, 1164,
- 0, 1165, 1178, 1180, 1166, 1179, 1168, 1181, 1167, 1166,
- 1169, 1170, 1172, 1167, 1173, 1169, 1181, 1172, 1174, 1176,
- 1178, 1175, 1177, 1179, 1176, 1180, 1183, 1182, 1184, 1178,
- 1180, 1185, 1179, 1187, 1181, 1182, 1188, 1186, 1189, 1190,
- 1191, 1194, 1187, 0, 0, 0, 1189, 1185, 1193, 1192,
-
- 1183, 1188, 1184, 1183, 1182, 1184, 1196, 0, 1185, 1186,
- 1187, 1192, 1197, 1188, 1186, 1189, 1195, 1201, 1194, 1196,
- 1193, 1190, 1191, 1198, 1195, 1193, 1192, 1197, 1200, 1203,
- 1202, 1203, 1198, 1196, 1205, 1201, 1206, 1200, 1202, 1197,
- 1207, 1208, 1205, 1195, 1201, 1211, 1213, 1209, 1210, 1215,
- 1198, 1221, 1211, 1214, 1206, 1200, 1203, 1202, 1219, 1213,
- 1208, 1205, 1216, 1206, 1215, 1214, 1218, 1207, 1208, 1209,
- 1210, 1222, 1211, 1213, 1209, 1210, 1215, 1217, 1218, 1220,
- 1214, 1223, 1224, 1221, 1216, 1219, 1220, 1225, 1226, 1216,
- 1228, 1227, 1229, 1218, 1224, 1217, 0, 0, 1225, 1231,
-
- 1223, 1232, 1239, 1222, 1217, 1229, 1220, 1230, 1223, 1224,
- 1226, 1234, 1228, 1232, 1225, 1226, 1227, 1228, 1227, 1229,
- 1230, 1231, 1233, 1235, 1236, 1237, 1231, 1240, 1232, 1239,
- 1233, 0, 1241, 1237, 1230, 1234, 1236, 1243, 1234, 1242,
- 1240, 1244, 1245, 1235, 1249, 0, 1243, 1250, 0, 1233,
- 1235, 1236, 1237, 1244, 1240, 1241, 0, 1242, 1246, 1241,
- 1251, 1247, 1252, 1245, 1243, 1246, 1242, 1249, 1244, 1245,
- 1247, 1249, 1247, 1250, 1250, 1247, 1253, 1254, 1263, 1260,
- 1258, 1255, 1251, 1247, 1256, 1246, 1257, 1251, 1247, 1252,
- 1254, 1289, 1256, 1269, 1264, 1257, 1253, 1247, 1258, 1247,
-
- 1262, 1260, 1247, 1253, 1254, 1255, 1260, 1258, 1255, 1261,
- 1263, 1256, 1265, 1257, 1266, 1262, 1264, 1261, 1267, 0,
- 1269, 1264, 1270, 1289, 1271, 1265, 1267, 1262, 1272, 1274,
- 1266, 1273, 1275, 0, 0, 1272, 1261, 0, 0, 1265,
- 1290, 1266, 1276, 0, 1270, 1267, 1271, 1290, 1277, 1270,
- 1275, 1271, 1274, 1273, 1276, 1272, 1274, 1278, 1273, 1275,
- 1277, 1279, 1280, 1281, 1282, 1278, 1284, 1290, 1283, 1276,
- 1279, 1285, 1284, 1286, 1280, 1277, 1283, 0, 0, 1282,
- 1285, 0, 0, 1281, 1278, 1279, 1288, 1287, 1279, 1280,
- 1281, 1282, 1292, 1284, 1286, 1283, 1291, 1279, 1285, 1287,
-
- 1286, 1294, 1288, 1291, 1293, 1295, 1297, 1296, 1297, 1294,
- 1292, 1299, 1298, 1288, 1287, 1296, 1293, 1302, 1300, 1292,
- 1295, 0, 0, 1291, 1298, 1300, 1303, 1304, 1294, 1305,
- 1306, 1293, 1295, 1297, 1296, 1307, 1308, 1306, 1303, 1298,
- 1304, 1313, 1310, 1299, 1309, 1300, 1307, 1310, 1305, 1302,
- 1314, 1312, 1311, 1303, 1304, 1313, 1305, 1306, 1308, 1309,
- 1311, 1318, 1307, 1308, 1312, 1323, 0, 1316, 1313, 1319,
- 0, 1309, 1317, 1322, 1310, 0, 1314, 1314, 1312, 1311,
- 1315, 1316, 1320, 1324, 1315, 1321, 0, 1315, 1315, 1332,
- 1317, 1322, 1315, 1318, 1316, 1319, 1319, 1323, 1315, 1317,
-
- 1322, 1325, 1315, 1333, 1320, 1324, 1315, 1315, 1321, 1320,
- 1324, 1315, 1321, 1326, 1315, 1315, 1327, 0, 1328, 1315,
- 1330, 1332, 1327, 1325, 1329, 1315, 1329, 1330, 1325, 1315,
- 1334, 1335, 1331, 1338, 1337, 1333, 1340, 1342, 1380, 1326,
- 1326, 1331, 0, 1327, 1328, 1328, 1338, 1330, 1329, 1335,
- 1341, 1329, 1343, 1329, 1334, 1336, 1337, 1334, 1335, 1331,
- 1338, 1337, 1336, 1339, 1344, 1380, 1345, 0, 1340, 1342,
- 1347, 1341, 1339, 1348, 1343, 1353, 0, 1341, 0, 1343,
- 1345, 1349, 1336, 1354, 0, 0, 1348, 1344, 1351, 1355,
- 1339, 1344, 1347, 1345, 1346, 1354, 1355, 1347, 1353, 1346,
-
- 1348, 1346, 1353, 1346, 1351, 1346, 1357, 1349, 1349, 1356,
- 1354, 1359, 1346, 1360, 1358, 1351, 1355, 1361, 1356, 1358,
- 1362, 1346, 1361, 1364, 1357, 1368, 1346, 1369, 1346, 1359,
- 1346, 1360, 1346, 1357, 1370, 1363, 1356, 1365, 1359, 1367,
- 1360, 1364, 1362, 1366, 1361, 1365, 1358, 1362, 1363, 1370,
- 1364, 1366, 1367, 1369, 1369, 1371, 1372, 1368, 1373, 1374,
- 1375, 1370, 1363, 1378, 1365, 1378, 1367, 1377, 1376, 1372,
- 1366, 1379, 1374, 1382, 1371, 1383, 1377, 1381, 1375, 0,
- 1373, 1384, 1371, 1372, 1390, 1373, 1374, 1375, 1376, 1381,
- 1378, 1386, 1387, 1379, 1377, 1376, 1392, 1383, 1379, 1388,
-
- 1382, 1393, 1383, 1389, 1381, 1391, 1384, 1388, 1384, 1394,
- 1395, 1390, 1391, 1398, 1387, 1386, 1395, 1399, 1386, 1387,
- 1403, 1389, 1401, 1392, 1399, 0, 1388, 1393, 1393, 1396,
- 1389, 1394, 1391, 1397, 1402, 1396, 1394, 1395, 1400, 1397,
- 1398, 1402, 1404, 1406, 1399, 1405, 1401, 1409, 1400, 1401,
- 1407, 1412, 1403, 1411, 1410, 1426, 1396, 1414, 1427, 1407,
- 1397, 1402, 1413, 1405, 1404, 1400, 1410, 1411, 1406, 1404,
- 1406, 1409, 1405, 1412, 1409, 1413, 1415, 1407, 1412, 1414,
- 1411, 1410, 1416, 1417, 1414, 1419, 1418, 1426, 1421, 1413,
- 1427, 0, 1420, 0, 0, 1415, 1422, 1421, 1423, 1428,
-
- 1429, 1430, 1424, 1415, 1416, 0, 0, 1417, 1418, 1416,
- 1417, 1419, 1419, 1418, 1420, 1421, 1424, 1422, 1423, 1420,
- 1431, 1428, 1429, 1422, 1432, 1423, 1428, 1429, 1433, 1424,
- 1434, 1438, 1432, 1430, 1435, 1436, 1439, 1440, 1431, 1442,
- 1441, 1435, 1436, 1444, 1433, 1439, 1442, 1431, 1445, 1446,
- 1449, 1432, 1441, 1438, 1440, 1433, 1443, 1434, 1438, 1453,
- 1443, 1435, 1436, 1439, 1440, 1447, 1442, 1441, 1452, 0,
- 1446, 1450, 1451, 1455, 1456, 1444, 1446, 1450, 1451, 1454,
- 1445, 1447, 1449, 1443, 1450, 1451, 1454, 1456, 1455, 1458,
- 1452, 1453, 1447, 1457, 0, 1452, 1459, 1462, 1450, 1451,
-
- 1455, 1456, 1457, 1459, 1450, 1451, 1454, 1460, 1461, 1460,
- 1464, 1466, 1463, 1469, 1465, 1458, 1458, 1461, 1465, 1462,
- 1457, 1463, 1468, 1459, 1462, 1473, 1469, 1471, 1470, 1474,
- 1468, 1475, 1471, 1466, 1460, 1461, 1472, 1464, 1466, 1463,
- 1469, 1465, 1470, 1473, 1475, 1472, 1480, 1479, 1474, 1468,
- 1476, 0, 1473, 1483, 1477, 1470, 1474, 1477, 1475, 1471,
- 1485, 1478, 1476, 1472, 1478, 1479, 1477, 1481, 0, 1484,
- 1486, 1480, 0, 1480, 1479, 1486, 1485, 1476, 1487, 1490,
- 1481, 1477, 0, 1478, 1477, 1483, 1487, 1485, 1478, 1488,
- 1488, 1478, 1484, 1491, 1481, 1489, 1484, 1492, 1493, 1495,
-
- 1498, 1490, 1486, 1494, 1489, 1487, 1490, 1493, 1499, 1502,
- 1494, 1496, 1505, 1498, 1500, 1491, 1488, 1499, 1496, 1492,
- 1491, 1495, 1489, 1500, 1492, 1493, 1495, 1498, 1501, 1504,
- 1494, 1503, 1502, 1506, 1507, 1499, 1502, 1504, 1496, 1508,
- 1503, 1500, 1513, 1515, 1505, 1507, 1509, 1508, 1506, 1512,
- 1510, 1511, 1514, 0, 1501, 1501, 1504, 1512, 1503, 1509,
- 1506, 1507, 1510, 1511, 1513, 1515, 1508, 1519, 1517, 1513,
- 1515, 1516, 1514, 1509, 1520, 1521, 1512, 1510, 1511, 1514,
- 1516, 1517, 1518, 1523, 1527, 1519, 1522, 1521, 1518, 1524,
- 1523, 1525, 1526, 1528, 1519, 1517, 1534, 1527, 1516, 1529,
-
- 1520, 1520, 1521, 1531, 1522, 1535, 1530, 1533, 1536, 1518,
- 1523, 1527, 1532, 1522, 1531, 1524, 1524, 1537, 1532, 1528,
- 1528, 1540, 1541, 1525, 1526, 0, 1529, 1530, 1534, 1533,
- 1531, 1538, 1543, 1530, 1533, 1542, 1544, 1535, 1548, 1532,
- 1536, 1543, 1545, 1537, 1537, 1541, 1590, 1547, 1540, 1541,
- 1538, 1544, 1538, 1542, 1546, 1545, 1550, 1538, 1538, 1543,
- 1551, 1549, 1542, 1544, 1548, 1548, 1546, 1547, 1549, 1545,
- 1553, 1552, 1556, 1590, 1547, 1550, 1558, 1538, 1553, 1538,
- 1554, 1546, 1551, 1550, 1552, 1554, 1555, 1551, 1549, 1557,
- 1561, 1555, 1559, 1560, 0, 1556, 1557, 1553, 1552, 1556,
-
- 1559, 1560, 1558, 1558, 1562, 1563, 1565, 1564, 1561, 1566,
- 1572, 1570, 1554, 1563, 1564, 1565, 1557, 1561, 1555, 1559,
- 1560, 1567, 1569, 1570, 1571, 1571, 1562, 1568, 1575, 1569,
- 0, 1562, 1563, 1565, 1564, 1574, 1568, 1573, 1570, 1576,
- 1577, 1566, 1572, 1567, 1578, 1573, 1582, 1576, 1567, 1569,
- 1585, 1571, 1578, 1579, 1568, 1580, 1574, 1581, 1577, 1582,
- 1575, 1579, 1574, 1580, 1573, 1581, 1576, 1577, 1583, 1584,
- 1586, 1578, 1589, 1582, 1583, 1587, 1585, 1585, 1588, 1591,
- 1579, 1584, 1580, 1587, 1581, 1592, 1588, 1589, 1593, 1594,
- 1596, 0, 1595, 0, 1586, 1583, 1584, 1586, 1601, 1589,
-
- 1597, 1600, 1587, 1594, 1595, 1588, 1591, 1592, 1596, 1598,
- 1600, 1593, 1592, 1598, 1597, 1593, 1594, 1596, 1603, 1595,
- 1602, 1605, 1601, 1606, 1604, 1601, 1598, 1597, 1600, 1608,
- 1603, 1604, 1605, 1607, 1598, 1611, 1598, 1609, 1610, 1613,
- 1598, 1612, 1602, 0, 1619, 1603, 1614, 1602, 1605, 1609,
- 1606, 1604, 1610, 1598, 1617, 1607, 1620, 1624, 1628, 0,
- 1607, 1608, 1613, 1612, 1609, 1610, 1613, 1611, 1612, 1614,
- 1615, 1616, 1617, 1614, 1626, 1618, 1619, 1615, 1622, 1625,
- 1616, 1617, 1618, 1620, 1627, 1625, 1629, 1622, 1631, 1624,
- 1628, 1634, 1633, 1629, 0, 0, 1626, 1615, 1616, 1642,
-
- 1639, 1626, 1618, 1635, 0, 1622, 1625, 1644, 0, 1636,
- 1627, 1627, 1637, 1629, 1635, 1631, 1633, 1642, 1634, 1633,
- 1636, 1650, 1640, 1637, 1639, 1641, 1642, 1639, 1640, 1645,
- 1635, 1643, 1641, 1644, 1644, 1648, 1636, 1646, 1643, 1637,
- 1647, 1645, 1649, 1646, 1651, 1652, 0, 0, 1647, 1640,
- 1653, 0, 1641, 1650, 1654, 1649, 1645, 1648, 1643, 1653,
- 1657, 1656, 1648, 1652, 1646, 1658, 1654, 1647, 1656, 1649,
- 1651, 1651, 1652, 1655, 1659, 1655, 1660, 1653, 1658, 1661,
- 1662, 1654, 1663, 1659, 1665, 1666, 1657, 1657, 1656, 1664,
- 1666, 1661, 1658, 1673, 1667, 1669, 1664, 1668, 1660, 0,
-
- 1655, 1659, 1667, 1660, 1671, 1663, 1661, 1662, 1675, 1663,
- 1665, 1665, 1666, 1668, 1674, 1670, 1664, 1678, 1669, 1674,
- 1673, 1667, 1669, 1670, 1668, 1676, 1671, 1677, 1678, 1679,
- 1680, 1671, 1675, 1681, 1681, 1675, 1685, 1682, 1679, 1676,
- 1684, 1681, 1670, 1680, 1678, 1683, 1674, 1683, 1686, 1677,
- 1682, 1688, 1676, 1690, 1677, 1692, 1679, 1680, 1684, 1687,
- 1681, 1681, 1685, 1685, 1682, 1693, 1687, 1684, 1694, 1689,
- 1686, 1691, 1683, 1688, 1695, 1686, 1689, 1690, 1688, 1691,
- 1690, 1695, 1692, 1693, 1696, 1697, 1687, 1698, 1701, 1700,
- 1694, 1703, 1693, 1699, 0, 1694, 1689, 1704, 1691, 0,
-
- 1699, 1695, 1708, 1707, 1703, 1705, 1706, 1697, 1712, 1696,
- 1701, 1696, 1697, 1705, 1706, 1701, 1710, 1717, 1703, 1698,
- 1699, 1700, 1713, 1708, 1704, 1707, 1714, 1715, 1711, 1708,
- 1707, 1711, 1705, 1706, 1712, 1712, 1715, 1718, 1710, 1714,
- 1716, 1717, 1719, 1710, 1717, 1720, 1723, 0, 1713, 1713,
- 1721, 1719, 1716, 1714, 1715, 1711, 1722, 1721, 1725, 1722,
- 1720, 1727, 1724, 1718, 1718, 1728, 1729, 1716, 1729, 1719,
- 1730, 1722, 1720, 1731, 1725, 1733, 1734, 1721, 1723, 1727,
- 1722, 1738, 1725, 1722, 1724, 1725, 1722, 1728, 1727, 1724,
- 1735, 1740, 1728, 1729, 1730, 1736, 1732, 1730, 1722, 1732,
-
- 1731, 1725, 1737, 1739, 1748, 1740, 1741, 1733, 1734, 1743,
- 1744, 1742, 1735, 1738, 1745, 1741, 1743, 1735, 1740, 1742,
- 1746, 1736, 1736, 1732, 1747, 1739, 1748, 1749, 1737, 1737,
- 1739, 1748, 0, 1741, 1744, 1750, 1743, 1744, 1742, 1750,
- 1752, 1751, 1753, 1755, 1754, 1756, 1745, 1757, 1759, 0,
- 1755, 1758, 1746, 1754, 1764, 1757, 1747, 1756, 1758, 1749,
- 1760, 1759, 1750, 1751, 1753, 1765, 1761, 1752, 1751, 1753,
- 1755, 1754, 1756, 1760, 1757, 1759, 1762, 1764, 1758, 1761,
- 1763, 1764, 1763, 1766, 1767, 1762, 1769, 1760, 1771, 1773,
- 1765, 1766, 1765, 1761, 1770, 1772, 1773, 1774, 1775, 1776,
-
- 0, 1769, 1771, 1762, 1767, 1775, 1781, 1763, 1774, 1770,
- 1766, 1767, 1776, 1769, 1777, 1771, 1773, 1778, 1779, 1784,
- 1783, 1770, 1782, 1786, 1774, 1775, 1776, 1772, 1785, 1782,
- 0, 1801, 1777, 1781, 1784, 1786, 1779, 1788, 1777, 1787,
- 1788, 1777, 1783, 1778, 1778, 1779, 1784, 1783, 1789, 1782,
- 1786, 1790, 1787, 1791, 1785, 1785, 1792, 1789, 1801, 1777,
- 1794, 1799, 1800, 1799, 1788, 1791, 1787, 1793, 1802, 1790,
- 1793, 1794, 1796, 1798, 0, 1789, 1792, 1796, 1790, 1805,
- 1791, 1803, 1798, 1792, 1796, 1793, 1800, 1794, 1799, 1800,
- 1806, 1807, 1804, 1809, 1793, 1802, 1803, 1793, 1811, 1796,
-
- 1798, 1804, 1808, 1805, 1796, 1807, 1805, 1812, 1803, 1810,
- 1808, 1813, 1815, 1812, 1816, 1809, 1814, 1806, 1807, 1804,
- 1809, 1822, 1811, 1815, 1814, 1811, 1820, 1817, 1821, 1808,
- 1823, 1810, 1816, 1813, 1812, 1817, 1810, 1818, 1813, 1815,
- 1818, 1816, 1819, 1814, 1820, 1819, 0, 1825, 1822, 1824,
- 1823, 1828, 1827, 1820, 1817, 1818, 1824, 1823, 1829, 1826,
- 1821, 1825, 1828, 1829, 1818, 1827, 1830, 1818, 1826, 1819,
- 1831, 1834, 1835, 1834, 1825, 1836, 1824, 0, 1828, 1827,
- 1837, 1835, 1839, 1838, 1843, 1831, 1826, 1840, 1830, 1841,
- 1829, 1840, 0, 1830, 1838, 1844, 0, 1831, 1834, 1835,
-
- 1839, 1836, 1836, 1841, 1837, 1842, 1843, 1837, 1842, 1839,
- 1838, 1843, 0, 1840, 1840, 1841, 1841, 1845, 1840, 1846,
- 1847, 1844, 1844, 1842, 1850, 1846, 1845, 1851, 1848, 1847,
- 1841, 1852, 1842, 1848, 1853, 1842, 1852, 1850, 1855, 1851,
- 1854, 1856, 1857, 1858, 1845, 1861, 1846, 1847, 1867, 1859,
- 1856, 1850, 1860, 1854, 1851, 1864, 1853, 1862, 1852, 1865,
- 1848, 1853, 1864, 1870, 0, 1860, 1865, 1854, 1856, 1857,
- 1855, 1859, 1866, 1868, 1872, 1858, 1859, 1861, 1862, 1860,
- 1867, 1878, 1864, 1869, 1862, 1866, 1865, 1868, 1874, 1869,
- 1875, 1879, 1877, 1872, 1876, 1870, 1874, 1886, 1875, 1866,
-
- 1868, 1872, 1876, 1878, 1881, 1887, 1880, 1869, 1878, 1879,
- 1869, 1877, 1882, 1885, 1883, 1874, 1869, 1875, 1879, 1877,
- 1880, 1876, 1881, 1884, 1888, 1890, 1882, 1883, 1889, 1886,
- 1894, 1881, 1896, 1880, 1885, 1892, 1884, 1887, 1891, 1882,
- 1885, 1883, 1889, 1901, 1892, 1891, 1893, 1904, 1888, 1895,
- 1884, 1888, 1890, 1897, 1893, 1889, 1898, 1894, 1897, 1899,
- 1906, 1885, 1892, 1895, 1896, 1891, 1903, 1898, 1899, 1904,
- 1901, 1902, 1905, 1893, 1904, 1907, 1895, 1908, 1902, 1905,
- 1897, 1909, 1906, 1898, 1913, 1909, 1899, 1906, 1914, 1903,
- 1911, 1917, 1915, 1903, 1916, 1908, 1918, 1907, 1902, 1905,
-
- 1913, 1911, 1907, 1917, 1908, 1919, 1914, 1920, 1909, 1916,
- 1922, 1913, 1921, 1919, 1911, 1914, 1915, 1911, 1917, 1915,
- 1921, 1916, 1920, 1918, 1923, 1924, 1926, 1925, 1911, 1927,
- 1928, 1934, 1919, 1930, 1920, 1932, 0, 1922, 1924, 1921,
- 1930, 1926, 1929, 1932, 1935, 1928, 1923, 1925, 1933, 1927,
- 1938, 1923, 1924, 1926, 1925, 1933, 1927, 1928, 1929, 1935,
- 1930, 1936, 1932, 1934, 1937, 1939, 1940, 1941, 1943, 1929,
- 1936, 1935, 1944, 1940, 1945, 1933, 1947, 1938, 1946, 1948,
- 0, 0, 1949, 1951, 0, 1937, 1945, 1950, 1936, 1939,
- 1943, 1937, 1939, 1940, 1941, 1943, 1946, 1949, 1953, 1956,
-
- 0, 1945, 1958, 1953, 1944, 1946, 1948, 1951, 1947, 1949,
- 1951, 1952, 1950, 1954, 1950, 1955, 1959, 1957, 1952, 1961,
- 1958, 1956, 1954, 1960, 1955, 1953, 1956, 1965, 0, 1958,
- 1963, 1959, 1967, 1966, 1962, 1960, 1968, 1963, 1952, 1957,
- 1954, 1961, 1955, 1959, 1957, 1966, 1961, 1962, 1964, 1965,
- 1960, 1978, 1962, 1971, 1965, 1964, 1969, 1963, 1972, 1967,
- 1966, 1962, 1969, 1973, 1971, 1974, 1972, 0, 1968, 1976,
- 1964, 1973, 1975, 1979, 1962, 1964, 1974, 1978, 1978, 1975,
- 1971, 1980, 1964, 1969, 1977, 1972, 1977, 1982, 1981, 1987,
- 1973, 1983, 1974, 0, 1976, 1981, 1976, 1977, 1984, 1975,
-
- 1979, 1985, 1989, 1986, 1984, 1992, 1988, 1985, 1980, 1986,
- 1994, 1977, 1990, 1977, 1982, 1981, 1987, 1983, 1983, 1995,
- 1998, 1996, 1993, 1995, 1997, 1984, 1997, 1999, 1985, 1988,
- 1986, 1993, 2002, 1988, 1989, 2001, 1990, 1992, 2000, 1990,
- 2003, 2005, 1994, 1996, 1998, 2000, 1995, 1998, 1996, 1993,
- 2004, 1997, 2003, 2006, 1999, 2007, 2004, 2001, 2009, 2002,
- 2014, 2008, 2001, 2005, 2023, 2000, 2011, 2003, 2005, 2010,
- 2010, 2010, 2013, 2011, 0, 2006, 2010, 2004, 2012, 2013,
- 2006, 2007, 2007, 2008, 2010, 2018, 2017, 2012, 2008, 2023,
- 2009, 2023, 2014, 2011, 2015, 2016, 2010, 2010, 2010, 2013,
-
- 2024, 2015, 2016, 2010, 2020, 2012, 2017, 2018, 2022, 2020,
- 2021, 2026, 2018, 2017, 2025, 2027, 2024, 2028, 2030, 2029,
- 2022, 2015, 2016, 2021, 2028, 2029, 2025, 2024, 2031, 2031,
- 2032, 2033, 2036, 2027, 2034, 2022, 2020, 2021, 2033, 2034,
- 2035, 2025, 2027, 2026, 2028, 2030, 2029, 2037, 2041, 2042,
- 2043, 2042, 2045, 2038, 2047, 2031, 2032, 2032, 2033, 2036,
- 2038, 2034, 2049, 2046, 2048, 2050, 2035, 2035, 2043, 2046,
- 2045, 2051, 2048, 2049, 2037, 2041, 2042, 2043, 2050, 2045,
- 2038, 2052, 2053, 2054, 2055, 2058, 2047, 2052, 2057, 2049,
- 2046, 2048, 2050, 2060, 2053, 2056, 2056, 2062, 2051, 2059,
-
- 2059, 2063, 2055, 2054, 2060, 2064, 2065, 2066, 2052, 2053,
- 2054, 2055, 2058, 2065, 2057, 2057, 2067, 2068, 2071, 2072,
- 2060, 0, 2056, 2063, 2070, 2073, 2059, 2066, 2063, 2062,
- 2077, 2074, 2070, 2065, 2066, 2078, 2076, 2064, 2077, 2079,
- 2080, 2075, 2068, 2076, 2068, 2083, 2072, 2073, 2067, 2074,
- 2071, 2070, 2073, 2075, 2079, 2085, 2081, 2077, 2074, 2078,
- 2082, 2082, 2078, 2076, 2080, 2081, 2079, 2080, 2075, 2084,
- 2085, 2083, 2083, 2086, 0, 2089, 2088, 2087, 0, 2091,
- 2092, 2094, 2085, 2081, 2087, 2092, 2091, 2082, 2088, 2093,
- 2095, 2089, 2096, 2095, 2102, 0, 2103, 2097, 2089, 2100,
-
- 2096, 2084, 2089, 2088, 2087, 2086, 2091, 2092, 2094, 2097,
- 2101, 2093, 2099, 2104, 2103, 2102, 2093, 2095, 2089, 2096,
- 2099, 2102, 2100, 2103, 2097, 2105, 2100, 2106, 2107, 2108,
- 0, 2112, 2109, 2107, 2110, 2113, 2101, 2101, 2109, 2099,
- 2104, 2111, 2113, 2105, 2107, 2116, 2121, 2110, 0, 2111,
- 2106, 0, 2105, 2112, 2106, 2107, 2108, 2114, 2112, 2109,
- 2107, 2110, 2113, 2115, 2114, 2117, 2118, 2119, 2111, 2120,
- 2115, 2122, 2123, 2121, 2117, 2126, 0, 2116, 2118, 2127,
- 2126, 2128, 2125, 2120, 2114, 2129, 2127, 2131, 2133, 2119,
- 2115, 2126, 2117, 2118, 2119, 2123, 2120, 2122, 2122, 2123,
-
- 2125, 2135, 2126, 2128, 2137, 2132, 2127, 2126, 2128, 2125,
- 2132, 2139, 2129, 2138, 2131, 2136, 2136, 2141, 2142, 2143,
- 2133, 2144, 2145, 2146, 2145, 2147, 2137, 2148, 2138, 2150,
- 2147, 2137, 2141, 2135, 2143, 2151, 2154, 2132, 2149, 2155,
- 2138, 2142, 2136, 2139, 2141, 2142, 2143, 2144, 2144, 2145,
- 2149, 2150, 2147, 2152, 2155, 2146, 2150, 2153, 2154, 2148,
- 2157, 2152, 2151, 2154, 2153, 2149, 2155, 2159, 2158, 2161,
- 2167, 0, 2163, 2162, 2164, 2157, 2158, 2165, 2166, 2168,
- 2152, 2169, 2170, 0, 2153, 0, 2171, 2157, 2169, 2159,
- 2172, 2168, 2174, 2176, 2159, 2158, 2161, 2162, 2163, 2163,
-
- 2162, 2164, 2167, 2165, 2165, 2166, 2168, 2171, 2169, 2173,
- 2174, 2177, 2172, 2171, 2170, 2176, 2179, 2172, 2180, 2174,
- 2176, 2181, 2182, 0, 2183, 2187, 2188, 2181, 0, 2185,
- 2173, 2186, 2190, 2191, 0, 2193, 2173, 2182, 2177, 2189,
- 2179, 2180, 0, 2179, 2185, 2180, 2186, 2187, 2181, 2182,
- 2183, 2183, 2187, 2188, 2190, 2191, 2185, 2189, 2186, 2190,
- 2191, 2192, 2193, 2194, 2195, 2196, 2189, 2197, 2200, 2201,
- 2194, 2199, 2198, 0, 2196, 2197, 2204, 2203, 2201, 2202,
- 0, 0, 2195, 2211, 0, 2192, 2203, 2208, 2192, 2204,
- 2194, 2195, 2196, 2199, 2197, 2198, 2201, 2202, 2199, 2198,
-
- 2200, 2206, 2207, 2204, 2203, 2208, 2202, 2209, 2210, 2211,
- 2211, 2207, 2206, 2212, 2208, 2210, 2214, 2213, 2219, 2215,
- 0, 0, 2214, 2216, 2221, 2209, 2228, 2206, 2206, 2207,
- 2231, 2212, 2213, 2230, 2209, 2210, 2222, 2216, 2223, 2206,
- 2212, 2215, 2224, 2214, 2213, 2219, 2215, 2222, 2221, 2223,
- 2216, 2221, 2226, 2224, 2227, 2231, 2229, 2231, 2228, 2230,
- 2230, 2232, 2233, 2222, 2226, 2223, 2229, 2227, 2234, 2224,
- 2237, 2233, 2235, 2240, 2232, 2238, 2242, 2240, 2244, 2226,
- 2243, 2227, 2241, 2229, 2247, 2245, 2249, 2246, 2232, 2233,
- 2245, 2235, 2249, 2243, 2246, 2234, 2248, 2237, 2244, 2235,
-
- 2240, 2238, 2238, 2241, 2248, 2244, 2250, 2243, 2242, 2241,
- 2247, 2247, 2245, 2249, 2246, 2251, 2252, 2253, 2254, 2254,
- 2255, 2250, 2248, 2248, 2256, 0, 2264, 0, 2252, 2257,
- 2251, 2248, 2253, 2250, 2257, 2258, 2256, 2262, 2255, 2258,
- 2263, 2262, 2251, 2252, 2253, 2254, 0, 2255, 2259, 2259,
- 2261, 2256, 2259, 2264, 2265, 2263, 2267, 2261, 0, 2266,
- 2268, 2257, 2258, 2265, 2262, 2259, 2266, 2263, 2271, 2272,
- 0, 2269, 2286, 2259, 2282, 2259, 2259, 2261, 2269, 2259,
- 2267, 2265, 2268, 2267, 2273, 2274, 2266, 2268, 2275, 2282,
- 2271, 2278, 2259, 2273, 2272, 2271, 2272, 2280, 2269, 2281,
-
- 2283, 2282, 2284, 2289, 2286, 0, 2280, 2274, 2275, 2278,
- 2284, 2273, 2274, 2285, 2287, 2275, 2291, 2281, 2278, 2290,
- 2285, 2287, 2292, 2292, 2280, 2283, 2281, 2283, 2289, 2284,
- 2289, 2293, 2290, 2296, 2294, 2297, 2298, 2300, 2299, 2301,
- 2285, 2287, 2303, 2291, 2300, 2298, 2290, 2299, 2302, 2292,
- 0, 2304, 2311, 2293, 2306, 2296, 2303, 2297, 2293, 2294,
- 2296, 2294, 2297, 2298, 2300, 2299, 2304, 2305, 2308, 2303,
- 2302, 2301, 2305, 2306, 2309, 2302, 2308, 2310, 2304, 2311,
- 2312, 2306, 2313, 2315, 2314, 2316, 2317, 2309, 2319, 2318,
- 2315, 2320, 2310, 0, 2322, 2308, 2314, 2319, 2313, 2305,
-
- 2324, 2309, 2325, 2323, 2310, 0, 2312, 2312, 2317, 2313,
- 2315, 2314, 2321, 2317, 2318, 2319, 2318, 2316, 2323, 2326,
- 2321, 2322, 2327, 2320, 2328, 2330, 2324, 2324, 2325, 2325,
- 2323, 2321, 2331, 2328, 0, 2331, 2332, 2326, 2334, 2321,
- 2335, 2337, 2340, 2334, 2327, 0, 2326, 2321, 2330, 2327,
- 2331, 2328, 2330, 2336, 2333, 2335, 2337, 2340, 2339, 2331,
- 2333, 2332, 2331, 2332, 2341, 2342, 2346, 2335, 2337, 2340,
- 2334, 2336, 2339, 2347, 2344, 0, 0, 2345, 0, 0,
- 2336, 2333, 0, 2374, 2346, 2339, 2341, 2342, 2344, 2345,
- 2348, 2341, 2342, 2346, 2349, 2353, 2345, 2350, 2351, 2348,
-
- 2347, 2344, 2354, 2349, 2345, 2352, 2350, 2352, 2353, 2351,
- 2374, 2355, 2357, 2358, 2354, 2360, 2345, 2348, 0, 2359,
- 2368, 2349, 2353, 2361, 2350, 2351, 2359, 2357, 2358, 2354,
- 2362, 2366, 2352, 2355, 2363, 0, 0, 2360, 2355, 2357,
- 2358, 2368, 2360, 2363, 2366, 2361, 2359, 2368, 2362, 2369,
- 2361, 2370, 2366, 2369, 2372, 2371, 2372, 2362, 2366, 2373,
- 2376, 2363, 2375, 2370, 2371, 2377, 2380, 2378, 2379, 2381,
- 2386, 2366, 2382, 0, 2377, 2378, 2369, 2373, 2370, 2389,
- 2375, 2372, 2371, 2381, 2382, 2391, 2373, 2376, 2380, 2375,
- 2383, 2379, 2377, 2380, 2378, 2379, 2381, 2383, 2385, 2382,
-
- 2387, 2390, 2386, 2388, 2393, 2387, 2385, 2394, 2388, 2391,
- 2400, 2389, 2391, 2396, 2394, 2398, 0, 2383, 2401, 2398,
- 2396, 2399, 2403, 2393, 2404, 2385, 2405, 2387, 2402, 2406,
- 2399, 2393, 2401, 2390, 2394, 2388, 2408, 2400, 2406, 2411,
- 2396, 2405, 2398, 2401, 2401, 2401, 2402, 2410, 2399, 2403,
- 2404, 2404, 2409, 2405, 2410, 2402, 2406, 2412, 2413, 2401,
- 2414, 2411, 2415, 2417, 2409, 2418, 2411, 0, 2408, 0,
- 2401, 2420, 2418, 2419, 2410, 2422, 0, 2422, 2420, 2409,
- 0, 2423, 2414, 2412, 2412, 2413, 2417, 2414, 2426, 2424,
- 2417, 2430, 2418, 2424, 2415, 2425, 2419, 2427, 2420, 2432,
-
- 2419, 2428, 2422, 2423, 2429, 0, 2427, 2425, 2423, 2431,
- 2426, 2429, 2428, 2430, 2431, 2426, 2424, 2433, 2430, 2435,
- 2434, 2436, 2425, 2441, 2427, 2442, 2432, 2439, 2428, 2438,
- 2436, 2429, 2434, 2437, 2437, 2440, 2431, 2444, 2438, 2442,
- 2433, 2435, 2439, 2440, 2433, 2441, 2435, 2434, 2436, 2443,
- 2441, 2446, 2442, 2447, 2439, 2448, 2438, 2449, 2443, 2456,
- 2437, 2447, 2440, 2448, 2444, 2449, 2451, 2450, 2453, 2451,
- 2446, 2450, 2454, 2452, 2453, 2457, 2443, 2455, 2446, 2462,
- 2447, 2452, 2448, 2455, 2449, 2459, 2464, 2454, 2461, 2463,
- 2466, 2456, 2462, 2451, 2450, 2453, 2465, 2459, 2467, 2454,
-
- 2452, 2471, 2461, 2465, 2455, 2468, 2462, 2457, 2469, 2474,
- 2463, 2464, 2459, 2464, 2471, 2461, 2463, 2466, 2470, 2472,
- 2467, 2470, 2469, 2465, 2473, 2467, 2476, 2475, 2471, 2468,
- 2477, 2478, 2468, 2472, 2479, 2469, 2474, 2480, 2482, 0,
- 2480, 2487, 2477, 2478, 2483, 2470, 2472, 2484, 2479, 2485,
- 2473, 2473, 2475, 2476, 2475, 2488, 2489, 2477, 2478, 2484,
- 2495, 2479, 2494, 2480, 2480, 2482, 2486, 2480, 2487, 2486,
- 2483, 2483, 2491, 2492, 2484, 2485, 2485, 2494, 2489, 2493,
- 2492, 2496, 2488, 2489, 2486, 2498, 2493, 2495, 2499, 2494,
- 2497, 2500, 2501, 2486, 2491, 2503, 2486, 2499, 2497, 2491,
-
- 2492, 2502, 2504, 2505, 2501, 2507, 2493, 2506, 2496, 2509,
- 2508, 2510, 2498, 2511, 2514, 2499, 2505, 2497, 2500, 2501,
- 2508, 2511, 2503, 2502, 2510, 2506, 2513, 2515, 2502, 2504,
- 2505, 2507, 2507, 2516, 2506, 2515, 2509, 2508, 2510, 2518,
- 2511, 2514, 2517, 2519, 2520, 2522, 0, 2521, 2513, 2523,
- 2525, 2517, 2530, 2513, 2515, 2524, 2529, 2523, 2532, 2534,
- 2516, 2518, 2521, 2534, 2519, 2532, 2518, 2524, 2520, 2517,
- 2519, 2520, 2522, 2521, 2521, 2525, 2523, 2525, 2527, 2528,
- 2533, 2535, 2524, 2529, 2530, 2532, 2534, 2528, 2536, 2521,
- 2527, 2537, 2533, 2535, 2538, 2539, 2540, 2541, 0, 2542,
-
- 2544, 2547, 2538, 2545, 2550, 2527, 2528, 2533, 2535, 2541,
- 2545, 2536, 2546, 2542, 2547, 2536, 2550, 2539, 2537, 2540,
- 2548, 2538, 2539, 2540, 2541, 2542, 2542, 2544, 2547, 2548,
- 2545, 2550, 2546, 2549, 2551, 2551, 2552, 2553, 2557, 2546,
- 2542, 2554, 2549, 0, 2558, 0, 0, 2548, 0, 0,
- 2555, 2559, 2573, 2560, 2561, 2553, 2562, 0, 2562, 2558,
- 2549, 2551, 2552, 2552, 2553, 2555, 2554, 2555, 2554, 2565,
- 2557, 2558, 2563, 2559, 2555, 2560, 2561, 2555, 2559, 2564,
- 2560, 2561, 2566, 2562, 2573, 2564, 2563, 2565, 2567, 2567,
- 2569, 2570, 2555, 2572, 2555, 2574, 2565, 2571, 2576, 2563,
-
- 2577, 2575, 2582, 0, 2566, 2572, 2564, 2575, 2578, 2566,
- 2576, 2579, 2569, 2570, 2580, 2567, 2580, 2569, 2570, 2571,
- 2572, 2584, 2581, 2589, 2571, 2576, 2582, 2574, 2575, 2582,
- 2578, 2590, 2577, 2579, 2585, 2578, 2581, 2583, 2579, 2584,
- 2586, 2580, 2587, 2588, 2583, 2591, 2593, 2595, 2584, 2581,
- 2597, 2598, 2585, 2593, 2595, 2589, 2588, 2596, 2586, 2603,
- 2587, 2585, 2600, 2590, 2583, 2601, 2604, 2586, 2591, 2587,
- 2588, 2599, 2591, 2593, 2595, 2596, 2597, 2597, 2600, 2599,
- 2605, 2602, 2605, 2598, 2596, 2603, 2603, 2605, 2604, 2600,
- 2601, 2607, 2601, 2604, 2608, 2609, 2611, 2599, 2599, 2602,
-
- 2610, 2612, 2607, 2614, 2617, 2608, 2599, 2605, 2602, 2605,
- 2613, 2616, 2610, 0, 2611, 2617, 2621, 2625, 2607, 2612,
- 2618, 2608, 2609, 2611, 2619, 2614, 2616, 2610, 2612, 2613,
- 2614, 2617, 2618, 2622, 2623, 2624, 2626, 2613, 2616, 2619,
- 2621, 2623, 2627, 2621, 2625, 2628, 2630, 2618, 2632, 2633,
- 2624, 2619, 2631, 2634, 0, 2622, 2635, 2636, 2643, 0,
- 2622, 2623, 2624, 2626, 2637, 0, 2638, 2639, 0, 2627,
- 2632, 2628, 2628, 2630, 2635, 2632, 2631, 2637, 2642, 2631,
- 2641, 2633, 2639, 2635, 2636, 2634, 2640, 2644, 2641, 2645,
- 2643, 2637, 2638, 2638, 2639, 2647, 2648, 2649, 0, 2640,
-
- 2644, 0, 2656, 2650, 2642, 2642, 2651, 2641, 2652, 2653,
- 2654, 2645, 2659, 2640, 2644, 2655, 2645, 2654, 2647, 2663,
- 2648, 2667, 2647, 2648, 2649, 2650, 2652, 2653, 2651, 2656,
- 2650, 2657, 2663, 2651, 2659, 2652, 2653, 2654, 2655, 2659,
- 2660, 2661, 2655, 2662, 2665, 2657, 2663, 2660, 2661, 2664,
- 2662, 2665, 2666, 2667, 2668, 0, 2669, 2671, 2657, 2670,
- 0, 2672, 2676, 2678, 2681, 2673, 2671, 2660, 2661, 2672,
- 2662, 2665, 2664, 2673, 2666, 2668, 2664, 2674, 2678, 2666,
- 2679, 2668, 2669, 2669, 2671, 2670, 2670, 2675, 2672, 2676,
- 2678, 2679, 2673, 2675, 2680, 2682, 2681, 2684, 2683, 2674,
-
- 0, 2686, 2688, 0, 2674, 2689, 2691, 2679, 2690, 2702,
- 2692, 2695, 2697, 2697, 2675, 2688, 2680, 2683, 2689, 2686,
- 2694, 2680, 2684, 2695, 2684, 2683, 2696, 2682, 2686, 2688,
- 2691, 2698, 2689, 2691, 2690, 2690, 2692, 2692, 2695, 2697,
- 2701, 2702, 2704, 2705, 2694, 2703, 2708, 2694, 2713, 2712,
- 2696, 0, 2716, 2696, 2723, 2710, 2725, 2698, 2698, 2713,
- 2703, 2705, 2712, 2701, 2710, 2717, 2717, 2701, 2718, 2704,
- 2705, 2721, 2703, 2708, 2716, 2713, 2712, 2718, 2719, 2716,
- 2722, 2723, 2710, 2725, 2719, 2727, 2729, 2728, 2730, 2732,
- 0, 2731, 2717, 2721, 2728, 2718, 2731, 2735, 2721, 2730,
-
- 2734, 2738, 2722, 2743, 2736, 2719, 2747, 2722, 2734, 2740,
- 2737, 2732, 2729, 2729, 2728, 2730, 2732, 2727, 2731, 2736,
- 2740, 2735, 2741, 2742, 2735, 2737, 2749, 2734, 2738, 2744,
- 2745, 2736, 2752, 2747, 2748, 2743, 2740, 2737, 2744, 2750,
- 2741, 2752, 2745, 2754, 2742, 2755, 2756, 2750, 0, 2741,
- 2742, 2749, 0, 2749, 2751, 2751, 2744, 2745, 2748, 2752,
- 2758, 2748, 2751, 2759, 2760, 2757, 2750, 2762, 2756, 2754,
- 2754, 2761, 2755, 2756, 2757, 2763, 2766, 2759, 2758, 2765,
- 2762, 2751, 2751, 2766, 2764, 2768, 2760, 2758, 2763, 2769,
- 2759, 2760, 2757, 2767, 2762, 2771, 2761, 2770, 2761, 2764,
-
- 2767, 2765, 2763, 2766, 2772, 2773, 2765, 2768, 2774, 2770,
- 2776, 2764, 2768, 2775, 2777, 2781, 2769, 2778, 2786, 2776,
- 2767, 2779, 2771, 2774, 2770, 2780, 2782, 2787, 0, 2786,
- 2781, 2772, 2773, 2782, 2783, 2774, 2777, 2776, 2775, 2784,
- 2775, 2777, 2781, 2778, 2778, 2786, 2784, 2779, 2779, 2783,
- 2785, 2780, 2780, 2782, 2787, 2788, 2785, 2789, 2790, 2791,
- 2792, 2783, 2796, 2788, 2793, 2795, 2784, 2798, 2794, 2796,
- 2800, 2797, 2801, 2802, 2798, 2791, 2799, 2785, 2806, 2793,
- 2795, 2806, 2788, 2799, 2789, 2790, 2791, 2792, 2794, 2796,
- 2801, 2793, 2795, 2797, 2798, 2794, 2805, 2800, 2797, 2801,
-
- 2802, 2803, 2803, 2799, 2804, 2806, 2807, 2808, 2810, 2809,
- 2805, 2804, 2811, 2810, 2812, 0, 2813, 0, 2815, 2807,
- 2814, 2819, 0, 2805, 2809, 2808, 2819, 2822, 2803, 2812,
- 2815, 2804, 2816, 2807, 2808, 2810, 2809, 2811, 2814, 2811,
- 2818, 2812, 2813, 2813, 2816, 2815, 2820, 2814, 2819, 2818,
- 2821, 2820, 2823, 2825, 2822, 0, 2823, 2824, 2828, 2816,
- 2826, 2827, 2829, 0, 2830, 2837, 2825, 2818, 2834, 0,
- 2836, 0, 2821, 2820, 2837, 0, 0, 2821, 0, 2823,
- 2825, 2824, 2826, 2827, 2824, 2828, 2838, 2826, 2827, 2829,
- 2830, 2830, 2837, 2839, 2834, 2834, 2836, 2836, 2840, 2842,
-
- 2843, 2839, 2838, 2844, 2845, 2846, 2842, 2847, 2844, 2843,
- 2840, 2845, 2848, 2838, 2847, 2849, 0, 2852, 2854, 2850,
- 2839, 2855, 2849, 2846, 2851, 2840, 2842, 2843, 2850, 2858,
- 2844, 2845, 2846, 2851, 2847, 2857, 2856, 2848, 2859, 2848,
- 2857, 2854, 2849, 2852, 2852, 2854, 2850, 2858, 2855, 2856,
- 2861, 2851, 2862, 2866, 0, 2863, 2858, 2864, 2865, 2867,
- 2868, 2869, 2857, 2856, 2863, 2859, 2864, 2865, 2861, 2868,
- 2869, 2867, 2870, 2866, 2872, 2873, 2874, 2861, 2875, 2862,
- 2866, 2871, 2863, 2870, 2864, 2865, 2867, 2868, 2869, 2871,
- 2878, 2876, 2880, 2881, 2882, 2873, 2889, 2872, 2876, 2870,
-
- 2877, 2872, 2873, 2874, 2883, 2875, 2884, 2888, 2871, 2877,
- 2885, 2878, 2887, 2883, 2890, 2884, 2886, 2878, 2876, 2880,
- 2881, 2890, 2885, 2889, 2886, 2887, 2882, 2877, 2891, 2888,
- 2893, 2883, 2894, 2884, 2888, 2891, 2896, 2885, 2892, 2887,
- 2895, 2890, 0, 2886, 2897, 2892, 2893, 2895, 2894, 2898,
- 2899, 2900, 2902, 2905, 2904, 2891, 0, 2893, 2896, 2894,
- 2902, 2905, 2908, 2896, 2910, 2892, 2907, 2895, 2906, 2897,
- 0, 2897, 2904, 2907, 2912, 2899, 2898, 2899, 2900, 2902,
- 2905, 2904, 2912, 2906, 2908, 2909, 2910, 2911, 2918, 2908,
- 2915, 2910, 2909, 2907, 2911, 2906, 2916, 2915, 2917, 2919,
-
- 2920, 2912, 2921, 2922, 2923, 2916, 0, 2928, 2926, 2920,
- 2924, 2919, 2909, 2930, 2911, 2918, 2923, 2915, 2929, 2922,
- 2926, 2934, 2917, 2916, 2927, 2917, 2919, 2920, 2928, 2921,
- 2922, 2923, 2931, 2924, 2928, 2926, 2927, 2924, 2933, 2936,
- 2930, 2929, 2935, 2937, 2939, 2929, 2931, 2936, 2934, 2935,
- 2933, 2927, 2941, 2938, 2942, 2943, 0, 2944, 2945, 2931,
- 2938, 2947, 2937, 0, 2948, 2933, 2936, 2941, 2946, 2935,
- 2937, 2939, 2942, 2953, 2949, 2951, 2946, 2959, 2943, 2941,
- 2938, 2942, 2943, 2944, 2944, 2945, 2948, 2950, 2947, 2952,
- 2951, 2948, 2949, 2955, 2960, 2946, 2952, 2962, 2950, 2955,
-
- 2953, 2949, 2951, 2959, 2959, 2961, 0, 2969, 2963, 2964,
- 2961, 2965, 2960, 2966, 2950, 2967, 2952, 2971, 2973, 2968,
- 2955, 2960, 2963, 2964, 2962, 2965, 2979, 2976, 2978, 2971,
- 2980, 2966, 2961, 2967, 2969, 2963, 2964, 2968, 2965, 2979,
- 2966, 2970, 2967, 2981, 2971, 2973, 2968, 2983, 2970, 2976,
- 2978, 2982, 2980, 2979, 2976, 2978, 2984, 2980, 2988, 2982,
- 2986, 2990, 2981, 2991, 2989, 2983, 2992, 2993, 2970, 2994,
- 2981, 0, 2986, 2990, 2983, 2984, 2995, 2997, 2982, 2998,
- 2988, 2994, 3002, 2984, 2996, 2988, 2989, 2986, 2990, 2993,
- 2991, 2989, 2996, 2992, 2993, 2999, 2994, 3003, 2995, 2998,
-
- 3000, 3001, 0, 2995, 2997, 3005, 2998, 3004, 3008, 3000,
- 3001, 2996, 3007, 3010, 3002, 3009, 3011, 2999, 3005, 3003,
- 3008, 3015, 2999, 3016, 3003, 0, 3017, 3000, 3001, 3004,
- 3014, 3017, 3005, 3018, 3004, 3008, 0, 3009, 3007, 3007,
- 3010, 3019, 3009, 3011, 3014, 3021, 3020, 3016, 3015, 3022,
- 3016, 3024, 3023, 3025, 3028, 3018, 3026, 3014, 3017, 3020,
- 3018, 3027, 3029, 3019, 3032, 3025, 3031, 3027, 3019, 3024,
- 3030, 3036, 3022, 3020, 3023, 3026, 3022, 3021, 3024, 3023,
- 3025, 3031, 3034, 3026, 3035, 3038, 3028, 3045, 3027, 3046,
- 3044, 3032, 3030, 3031, 3029, 3036, 3040, 3030, 3036, 3041,
-
- 3038, 3043, 3034, 3042, 3044, 3045, 3035, 3046, 3047, 3034,
- 3043, 3035, 3038, 3048, 3045, 3049, 3046, 3044, 3040, 3050,
- 3053, 3041, 3054, 3040, 3055, 3042, 3041, 0, 3043, 3053,
- 3042, 3048, 3059, 3062, 3047, 3047, 3058, 3063, 3049, 3059,
- 3048, 3050, 3049, 3060, 3058, 3055, 3050, 3053, 3061, 3066,
- 3060, 3055, 3068, 3064, 3054, 3067, 3061, 3063, 3072, 3059,
- 3062, 3064, 3069, 3058, 3063, 3070, 3079, 3066, 0, 3071,
- 3060, 0, 3075, 3067, 3069, 3061, 3066, 3078, 3068, 3068,
- 3064, 3071, 3067, 3070, 3075, 3072, 3073, 3081, 3077, 3069,
- 3082, 3085, 3070, 3079, 3073, 3077, 3071, 3083, 3084, 3075,
-
- 3078, 3080, 3086, 3080, 3078, 3083, 3092, 3084, 3087, 3088,
- 3089, 3088, 3091, 3073, 3094, 3077, 3095, 3097, 3096, 3081,
- 3092, 3098, 3082, 3085, 3083, 3084, 3097, 3087, 3080, 3086,
- 3091, 3099, 3089, 3092, 3098, 3087, 3088, 3089, 3100, 3091,
- 3095, 3096, 3102, 3095, 3097, 3096, 3094, 3103, 3098, 3105,
- 3100, 3106, 3107, 3108, 3110, 3106, 3103, 3113, 3099, 3111,
- 3115, 3112, 0, 3117, 0, 3100, 3120, 3118, 3102, 3102,
- 3117, 3120, 0, 0, 3103, 3113, 3105, 3119, 3106, 3107,
- 3108, 3110, 3111, 3112, 3113, 3121, 3111, 3115, 3112, 3118,
- 3117, 3126, 3119, 3128, 3118, 3123, 3124, 3129, 3120, 3125,
-
- 3121, 3130, 3123, 3124, 3119, 3131, 3125, 3132, 3135, 3138,
- 3136, 3133, 3121, 3139, 0, 3140, 3138, 3126, 3126, 3136,
- 3128, 3132, 3123, 3124, 3129, 3133, 3125, 3141, 3130, 3131,
- 3143, 3142, 3131, 3144, 3132, 3135, 3138, 3136, 3133, 3145,
- 3139, 3140, 3140, 3142, 3147, 3148, 3146, 3144, 3145, 3154,
- 3152, 3149, 3158, 3153, 3141, 3152, 3158, 3143, 3142, 3146,
- 3144, 3155, 3157, 3159, 3160, 3161, 3145, 3157, 3162, 3163,
- 3159, 3160, 3148, 3146, 3149, 3164, 3147, 3153, 3149, 3158,
- 3153, 3154, 3152, 3155, 3167, 3165, 3161, 3165, 3155, 0,
- 3159, 3160, 3161, 3166, 3157, 3170, 3172, 3173, 0, 3177,
-
- 3162, 3163, 3175, 3176, 3175, 3180, 3179, 3164, 3178, 3178,
- 3183, 3167, 3165, 0, 3180, 3172, 3166, 3170, 3178, 0,
- 3166, 3173, 3170, 3172, 3173, 3177, 3177, 3176, 3179, 3175,
- 3176, 3181, 3180, 3179, 3182, 3178, 3178, 3183, 3181, 3184,
- 3185, 3186, 3187, 3188, 3190, 3192, 3191, 3182, 3185, 3190,
- 3187, 3191, 3184, 3192, 3186, 3193, 0, 3194, 3181, 3195,
- 0, 3182, 3188, 3196, 3185, 3197, 3184, 3185, 3186, 3187,
- 3188, 3198, 3192, 3200, 3201, 3185, 3190, 3199, 3191, 3202,
- 3202, 3201, 3193, 3194, 3194, 3195, 3195, 3203, 3199, 3196,
- 3196, 3197, 3197, 3205, 3204, 3200, 3207, 3198, 3198, 3208,
-
- 3200, 3201, 3206, 3213, 3199, 3203, 3202, 3204, 3214, 3209,
- 3206, 3217, 3210, 3215, 3203, 3205, 3209, 3208, 3207, 3210,
- 3205, 3204, 3216, 3207, 3211, 3218, 3208, 3222, 3219, 3206,
- 3213, 3211, 3220, 3223, 3216, 3214, 3209, 3215, 3217, 3210,
- 3215, 3220, 3224, 3225, 3227, 3228, 3218, 3230, 3229, 3216,
- 3219, 3211, 3218, 3223, 3222, 3219, 3235, 3236, 3231, 3220,
- 3223, 3232, 3238, 3228, 3234, 3225, 3229, 3237, 0, 3224,
- 3225, 3227, 3228, 3234, 3230, 3229, 3231, 3240, 3239, 3232,
- 3238, 3253, 3245, 3235, 3236, 3231, 3239, 3241, 3232, 3238,
- 3237, 3234, 3243, 3240, 3237, 3242, 3245, 3243, 3246, 3241,
-
- 3247, 3249, 3242, 3253, 3240, 3239, 3254, 3255, 3253, 3245,
- 3257, 3262, 3263, 3249, 3241, 3265, 3246, 3258, 3264, 3259,
- 3255, 3259, 3242, 3247, 3243, 3246, 3260, 3247, 3249, 3270,
- 3258, 3270, 3271, 3254, 3255, 3260, 3264, 3257, 3262, 3263,
- 3266, 3274, 3272, 3275, 3258, 3264, 3259, 3265, 3274, 3277,
- 3281, 3279, 3282, 3260, 3271, 3266, 3270, 3279, 3283, 3271,
- 3272, 3286, 3284, 0, 3277, 3289, 3294, 3266, 3274, 3272,
- 0, 3295, 3281, 3287, 3282, 3275, 3277, 3281, 3279, 3282,
- 3284, 3289, 3290, 3286, 3283, 3283, 3287, 3296, 3286, 3284,
- 3291, 3304, 3289, 3294, 3292, 3297, 3290, 3292, 3295, 3298,
-
- 3287, 3299, 3300, 3291, 3301, 3302, 3298, 3307, 3299, 3290,
- 3300, 3305, 3301, 3297, 3296, 3306, 3308, 3291, 3313, 0,
- 3292, 3292, 3297, 3304, 3292, 3308, 3298, 3302, 3299, 3300,
- 3309, 3301, 3302, 3305, 3307, 3310, 3311, 3306, 3305, 3312,
- 3315, 3310, 3306, 3308, 3314, 3309, 3314, 3317, 3312, 3322,
- 3313, 3318, 3321, 3319, 0, 3320, 3323, 3309, 3311, 3327,
- 3321, 3322, 3310, 3311, 0, 3325, 3312, 3315, 3323, 0,
- 3317, 3314, 3325, 3318, 3317, 3319, 3322, 3329, 3318, 3321,
- 3319, 3320, 3320, 3323, 3330, 3331, 3327, 3332, 3333, 3334,
- 3336, 3329, 3325, 3335, 3344, 3338, 3337, 0, 3330, 3331,
-
- 3334, 3335, 3338, 3340, 3329, 3345, 3333, 3341, 3349, 3336,
- 3332, 3330, 3331, 3349, 3332, 3333, 3334, 3336, 3337, 3339,
- 3335, 3344, 3338, 3337, 3342, 3341, 3339, 3343, 3343, 3340,
- 3340, 3346, 3345, 3342, 3341, 3350, 3352, 3353, 3354, 3346,
- 3349, 3356, 3358, 3368, 3360, 3361, 3339, 3356, 3350, 3364,
- 3371, 3342, 3363, 3365, 3343, 3360, 3361, 3352, 3346, 3369,
- 3364, 3373, 3350, 3352, 3353, 3354, 3369, 3370, 3356, 3358,
- 3368, 3360, 3361, 3372, 3363, 3365, 3364, 3372, 3376, 3363,
- 3365, 3374, 3371, 3377, 3378, 3370, 3369, 3380, 3373, 3374,
- 3379, 3382, 3378, 3385, 3370, 3384, 3377, 3386, 0, 3379,
-
- 3372, 3389, 3384, 3391, 3376, 3376, 3389, 3392, 3374, 3393,
- 3377, 3378, 3390, 3390, 3380, 3396, 3395, 3379, 3399, 3386,
- 3394, 3393, 3384, 3382, 3386, 3385, 3397, 3394, 3389, 3400,
- 3391, 3396, 3403, 3398, 3392, 3395, 3393, 3400, 3402, 3390,
- 3398, 3404, 3396, 3395, 3397, 3402, 3401, 3394, 3405, 0,
- 3399, 0, 3406, 3397, 3407, 3417, 3400, 3409, 3408, 3403,
- 3398, 3401, 3395, 3404, 3406, 3402, 3416, 3414, 3404, 3415,
- 3418, 3413, 0, 3401, 3414, 3405, 3415, 3419, 3407, 3406,
- 3420, 3407, 3408, 3409, 3409, 3408, 3413, 3417, 3416, 3423,
- 3421, 3424, 3425, 3416, 3414, 3426, 3415, 3418, 3413, 3421,
-
- 3427, 3419, 3429, 3426, 3419, 0, 3432, 3433, 3431, 3433,
- 3434, 3423, 3420, 3435, 3425, 3432, 3423, 3421, 3424, 3425,
- 3428, 3428, 3426, 3431, 3434, 3438, 3440, 3437, 3436, 3429,
- 3428, 3441, 3427, 3432, 3433, 3431, 3436, 3434, 3437, 3442,
- 3435, 3443, 3445, 3438, 3444, 3446, 3447, 3428, 3428, 3448,
- 3450, 3451, 3438, 3440, 3437, 3436, 3449, 3444, 3441, 3452,
- 3452, 3453, 3454, 3443, 3445, 3451, 3442, 3457, 3443, 3445,
- 3458, 3444, 3446, 3447, 3449, 3460, 3448, 3450, 3451, 3461,
- 3464, 3458, 3466, 3449, 3454, 3467, 3452, 3466, 3464, 3454,
- 3467, 3468, 3472, 3453, 3457, 3469, 3479, 3458, 3470, 3468,
-
- 3469, 3475, 3460, 3473, 3473, 3474, 3461, 3464, 3477, 3466,
- 3480, 3478, 3467, 3474, 3475, 3477, 3481, 3483, 3468, 3472,
- 3484, 3492, 3469, 3479, 3470, 3470, 3483, 3485, 3475, 3478,
- 3473, 3487, 3474, 3486, 3485, 3477, 3491, 3480, 3478, 3481,
- 3488, 3486, 3491, 3481, 3483, 3494, 3495, 3497, 3492, 3500,
- 3498, 3496, 3484, 3487, 3485, 3499, 0, 0, 3487, 3501,
- 3486, 3505, 3488, 3491, 3496, 3498, 0, 3488, 3495, 3506,
- 0, 3509, 3494, 3495, 3499, 0, 3500, 3498, 3496, 3497,
- 3503, 3501, 3499, 3507, 3505, 3508, 3501, 3503, 3505, 3510,
- 3507, 3506, 3508, 3509, 3511, 3515, 3506, 3512, 3509, 3513,
-
- 3516, 0, 3521, 3528, 3510, 0, 3512, 3503, 3516, 3511,
- 3507, 3517, 3508, 3521, 3515, 3524, 3510, 0, 3517, 3520,
- 3513, 3511, 3515, 3518, 3512, 3526, 3513, 3516, 3520, 3521,
- 3518, 3522, 3522, 3523, 3529, 3528, 3527, 3524, 3517, 3523,
- 3532, 3522, 3524, 3527, 3531, 3537, 3520, 3526, 3533, 3538,
- 3518, 3531, 3526, 3543, 3539, 3545, 3529, 3546, 3522, 3522,
- 3523, 3529, 3533, 3527, 3532, 3543, 3547, 3532, 3548, 3553,
- 3556, 3531, 3537, 3550, 3547, 3533, 3538, 3539, 3558, 3546,
- 3543, 3539, 3545, 3562, 3546, 3550, 3554, 3554, 3555, 3555,
- 3557, 3557, 0, 3547, 3560, 3548, 3553, 3556, 3563, 3564,
-
- 3550, 3558, 3561, 3567, 3569, 3558, 3568, 3563, 0, 3572,
- 3562, 3569, 3564, 3571, 3573, 3554, 3560, 3555, 3578, 3557,
- 3561, 3560, 3577, 3573, 3577, 3563, 3564, 3570, 3579, 3561,
- 3567, 3569, 3568, 3568, 3570, 3571, 3572, 3574, 3578, 3580,
- 3571, 3573, 3584, 3583, 3574, 3578, 3581, 3586, 3589, 3577,
- 3585, 3579, 3583, 3587, 3570, 3579, 3588, 3580, 3581, 3590,
- 3591, 3597, 3594, 3592, 3574, 0, 3580, 3584, 3592, 3584,
- 3583, 3587, 3585, 3581, 3586, 3589, 3593, 3585, 3595, 3599,
- 3587, 3595, 3588, 3588, 3594, 3601, 3590, 3591, 3593, 3594,
- 3592, 3599, 3596, 3597, 3602, 3600, 3595, 3596, 3598, 3604,
-
- 3598, 3600, 3603, 3593, 3605, 3595, 3599, 3601, 3595, 0,
- 3603, 3606, 3601, 3607, 3608, 3609, 3602, 3610, 3613, 3616,
- 3614, 3602, 3600, 3621, 3596, 3598, 3604, 3609, 3619, 3603,
- 3617, 3622, 3606, 3614, 3623, 3624, 3605, 3619, 3606, 3610,
- 3607, 3608, 3609, 3626, 3610, 3613, 3616, 3614, 3617, 3627,
- 3621, 3628, 3629, 3630, 3630, 3619, 3632, 3617, 3622, 3633,
- 3635, 3623, 3624, 3636, 3638, 3640, 3641, 3637, 3643, 0,
- 3626, 3638, 3644, 0, 3632, 3645, 3627, 3640, 3628, 3629,
- 3630, 3636, 3637, 3632, 3644, 3646, 3633, 3635, 3642, 3645,
- 3636, 3638, 3640, 3641, 3637, 3643, 3642, 3647, 3648, 3644,
-
- 3646, 3649, 3645, 3652, 3651, 3656, 3664, 0, 3657, 3658,
- 3659, 3659, 3646, 3648, 3660, 3642, 3651, 3657, 3663, 0,
- 3661, 3665, 3666, 3647, 3647, 3648, 0, 3656, 3649, 3661,
- 3652, 3651, 3656, 3658, 3665, 3657, 3658, 3659, 3664, 3669,
- 3660, 3660, 3663, 3667, 3666, 3663, 3668, 3661, 3665, 3666,
- 3669, 3667, 3675, 3671, 3672, 3668, 3676, 0, 3678, 3680,
- 3680, 0, 3681, 3694, 3691, 3690, 3669, 3695, 3676, 3681,
- 3667, 3696, 3672, 3668, 3671, 3675, 3697, 3694, 3699, 3675,
- 3671, 3672, 3702, 3676, 3678, 3678, 3680, 3690, 3691, 3681,
- 3694, 3691, 3690, 3701, 3695, 3703, 3705, 3701, 3696, 3704,
-
- 3702, 3707, 3709, 3697, 3715, 3699, 3704, 0, 3705, 3702,
- 3712, 3710, 3714, 3711, 3707, 3710, 3713, 3717, 3703, 3716,
- 3701, 0, 3703, 3705, 3714, 3717, 3704, 3718, 3707, 3711,
- 3715, 3715, 3712, 3716, 3709, 3723, 3718, 3712, 3710, 3714,
- 3711, 3713, 3719, 3713, 3717, 3720, 3716, 3720, 3721, 3722,
- 3723, 3724, 3725, 3719, 3718, 3726, 3728, 3729, 3725, 3727,
- 3721, 3730, 3723, 3731, 3728, 3738, 3741, 3722, 3730, 3719,
- 3726, 3743, 3720, 3724, 3736, 3721, 3722, 3739, 3724, 3725,
- 3742, 3727, 3726, 3728, 3729, 3731, 3727, 3736, 3730, 3737,
- 3731, 3740, 3738, 3741, 3744, 3739, 3737, 3743, 3743, 3745,
-
- 3746, 3736, 3742, 3747, 3739, 3748, 3749, 3742, 3746, 3750,
- 3747, 3751, 3752, 3751, 3753, 3740, 3737, 3757, 3740, 0,
- 3756, 3744, 3754, 3759, 3752, 3755, 3745, 3746, 3749, 3748,
- 3747, 3750, 3748, 3749, 3758, 3754, 3750, 3760, 3751, 3752,
- 3755, 3758, 3756, 3761, 3757, 3763, 3753, 3756, 3764, 3754,
- 3759, 3765, 3755, 3766, 3768, 3769, 3775, 3777, 3772, 3765,
- 3764, 3758, 3771, 0, 3760, 3771, 3768, 3772, 3776, 3778,
- 3761, 3769, 3763, 3779, 3780, 3764, 3777, 3778, 3765, 0,
- 3766, 3768, 3769, 3775, 3777, 3772, 3781, 3782, 3784, 3771,
- 3783, 3785, 3787, 3793, 3776, 3776, 3778, 3792, 3783, 3781,
-
- 3793, 3782, 3796, 3792, 3798, 3779, 3780, 0, 3795, 3800,
- 3784, 3797, 3801, 3781, 3782, 3784, 3800, 3783, 3785, 3787,
- 3793, 3795, 3797, 3803, 3792, 3802, 3804, 3798, 3808, 3796,
- 3818, 3798, 3806, 3802, 3801, 3795, 3800, 3803, 3797, 3801,
- 3804, 3805, 3807, 3815, 3811, 3816, 3824, 3812, 0, 3805,
- 3803, 3811, 3802, 3804, 3806, 3808, 3812, 3813, 3817, 3806,
- 3819, 3815, 3818, 3826, 3807, 3813, 3820, 3821, 3805, 3807,
- 3815, 3811, 3816, 3822, 3812, 3823, 3827, 3828, 3824, 3833,
- 3817, 3836, 3829, 3823, 3813, 3817, 3819, 3819, 3820, 3821,
- 3826, 3829, 3831, 3820, 3821, 3822, 3840, 3832, 3827, 3833,
-
- 3822, 3843, 3823, 3827, 3828, 3832, 3833, 3838, 3834, 3829,
- 3835, 3842, 3837, 3836, 3844, 3831, 3834, 3844, 3835, 3831,
- 3837, 3838, 3840, 3840, 3832, 3845, 0, 3849, 3843, 3848,
- 3854, 3854, 3844, 3842, 3838, 3834, 3850, 3835, 3842, 3837,
- 3846, 3844, 3847, 3848, 3844, 3851, 3860, 3845, 3846, 3855,
- 3847, 3852, 3845, 3849, 3849, 3857, 3848, 3854, 3850, 3851,
- 3856, 0, 3858, 3850, 3859, 3862, 3860, 3846, 3856, 3847,
- 3863, 3861, 3851, 3860, 3852, 3855, 3855, 3864, 3852, 3861,
- 3865, 3857, 3857, 3866, 3870, 3874, 3859, 3856, 3858, 3858,
- 0, 3859, 3862, 3867, 3868, 3869, 3877, 3863, 3861, 3864,
-
- 3871, 3875, 3878, 3869, 3864, 3865, 3870, 3865, 3871, 3875,
- 3866, 3870, 3874, 3867, 3868, 3881, 3883, 3879, 3877, 3886,
- 3867, 3868, 3869, 3877, 3878, 3879, 3880, 3871, 3875, 3878,
- 3884, 3885, 3887, 3890, 3880, 3888, 3891, 0, 3884, 3885,
- 0, 3881, 3881, 3883, 3879, 3886, 3886, 3892, 3894, 3897,
- 3900, 3901, 0, 3880, 0, 3888, 3898, 3884, 3885, 3887,
- 3890, 3899, 3888, 3891, 3898, 0, 0, 3892, 0, 3899,
- 3894, 3897, 0, 0, 3892, 3894, 3897, 3900, 3901, 0,
- 0, 0, 0, 3898, 0, 0, 0, 0, 3899, 3905,
- 3905, 3905, 3905, 3905, 3905, 3905, 3906, 3906, 3906, 3906,
-
- 3906, 3906, 3906, 3907, 3907, 3907, 3907, 3907, 3907, 3907,
- 3908, 3908, 3908, 3908, 3908, 3908, 3908, 3909, 3909, 3909,
- 3909, 3909, 3909, 3909, 3910, 3910, 3910, 3910, 3910, 3910,
- 3910, 3911, 3911, 3911, 3911, 3911, 3911, 3911, 3913, 3913,
- 0, 3913, 3913, 3913, 3913, 3914, 3914, 0, 0, 0,
- 3914, 3914, 3915, 3915, 0, 0, 3915, 0, 3915, 3916,
- 0, 0, 0, 0, 0, 3916, 3917, 3917, 0, 0,
- 0, 3917, 3917, 3918, 0, 0, 0, 0, 0, 3918,
- 3919, 3919, 0, 3919, 3919, 3919, 3919, 3920, 0, 0,
- 0, 0, 0, 3920, 3921, 3921, 0, 0, 0, 3921,
-
- 3921, 3922, 3922, 0, 3922, 3922, 3922, 3922, 3904, 3904,
- 3904, 3904, 3904, 3904, 3904, 3904, 3904, 3904, 3904, 3904,
- 3904, 3904, 3904, 3904, 3904, 3904, 3904, 3904, 3904, 3904,
- 3904, 3904, 3904, 3904, 3904, 3904, 3904, 3904, 3904, 3904,
- 3904, 3904, 3904, 3904, 3904, 3904, 3904, 3904, 3904, 3904,
- 3904, 3904, 3904, 3904, 3904, 3904, 3904, 3904, 3904, 3904,
- 3904, 3904, 3904, 3904, 3904, 3904, 3904, 3904, 3904, 3904,
- 3904, 3904, 3904, 3904, 3904
+ 1020, 1022, 1017, 1021, 1023, 1018, 1025, 1021, 1024, 1019,
+ 1026, 0, 1020, 1022, 1028, 1027, 1026, 1021, 1029, 1018,
+ 1019, 1024, 1030, 1032, 1019, 1031, 1023, 1020, 1027, 1021,
+ 1021, 1023, 1028, 1025, 1021, 1024, 1019, 1026, 1033, 1034,
+ 1029, 1028, 1027, 1030, 1021, 1029, 1036, 1031, 1037, 1030,
+ 1038, 0, 1031, 1037, 1039, 1032, 1041, 1042, 1038, 1043,
+ 0, 1044, 0, 1039, 1045, 0, 1034, 1048, 0, 1061,
+ 1033, 1041, 1043, 1351, 1351, 1037, 1044, 1038, 1036, 1042,
+ 1048, 1039, 1040, 1041, 1042, 1047, 1043, 1040, 1044, 1040,
+
+ 1045, 1045, 1049, 1046, 1048, 1040, 1061, 1050, 1051, 1054,
+ 1040, 1040, 1351, 1049, 1047, 1052, 1051, 1040, 1040, 1040,
+ 1050, 1055, 1047, 1052, 1040, 1046, 1040, 1057, 1053, 1049,
+ 1046, 1056, 1040, 1065, 1050, 1051, 1057, 1040, 1040, 1053,
+ 1058, 1054, 1052, 1055, 1040, 1062, 1056, 1059, 1055, 1066,
+ 1060, 1058, 0, 1063, 1057, 1053, 1059, 1068, 1056, 1060,
+ 1063, 1067, 1070, 1071, 1069, 1065, 0, 1058, 1062, 1067,
+ 0, 1074, 1062, 1066, 1059, 1072, 1066, 1060, 1069, 1068,
+ 1063, 1075, 1076, 1072, 1068, 1071, 1077, 1078, 1067, 1074,
+ 1071, 1069, 1079, 1076, 1070, 1080, 1081, 1082, 1074, 1075,
+
+ 1079, 1083, 1072, 1081, 1084, 1078, 1085, 1086, 1075, 1076,
+ 1082, 1084, 1087, 1090, 1078, 1088, 1089, 1080, 1077, 1079,
+ 1098, 1085, 1080, 1081, 1082, 1086, 1089, 1083, 1083, 1092,
+ 1087, 1084, 1097, 1085, 1086, 1094, 1088, 1095, 1099, 1087,
+ 1092, 1102, 1088, 1089, 1095, 1090, 1099, 1096, 1094, 1096,
+ 1100, 1101, 1098, 1102, 1097, 1109, 1092, 1103, 1104, 1097,
+ 1101, 1107, 1094, 1100, 1095, 1099, 1110, 1108, 1102, 1111,
+ 1112, 0, 1113, 1109, 1096, 0, 1117, 1100, 1101, 1103,
+ 1104, 1115, 1109, 1107, 1103, 1104, 1114, 1117, 1107, 1108,
+ 1113, 1118, 1110, 1110, 1108, 1115, 1118, 1121, 1114, 1113,
+
+ 1125, 1111, 1112, 1117, 1120, 1122, 1123, 1120, 1115, 1121,
+ 1124, 1125, 1127, 1114, 1128, 1126, 1130, 1124, 1131, 1123,
+ 1132, 1127, 1134, 1118, 1121, 1131, 1129, 1125, 1128, 1122,
+ 1120, 1120, 1122, 1123, 1120, 1126, 1137, 1124, 1129, 1127,
+ 1138, 1128, 1126, 1133, 1134, 1131, 1135, 1140, 1130, 1134,
+ 1139, 0, 1132, 1129, 1141, 1133, 1139, 1142, 1144, 1135,
+ 1143, 1145, 1137, 1137, 1138, 1152, 0, 1138, 1142, 1140,
+ 1133, 1146, 1148, 1135, 1140, 1150, 1141, 1139, 1143, 1149,
+ 1144, 1141, 1153, 1145, 1142, 1144, 1146, 1143, 1145, 1151,
+ 1149, 1155, 1154, 1148, 1157, 1151, 1150, 1152, 1146, 1148,
+
+ 1155, 1156, 1150, 1158, 1160, 1159, 1149, 1163, 1162, 1153,
+ 1154, 1160, 1158, 1159, 1161, 1164, 1151, 1165, 1155, 1154,
+ 1157, 1157, 1162, 1166, 1167, 1156, 1168, 1170, 1156, 0,
+ 1158, 1160, 1159, 1169, 1172, 1162, 1175, 1174, 1161, 1163,
+ 1176, 1161, 1177, 1173, 1174, 1166, 1167, 1164, 1178, 1165,
+ 1166, 1167, 1173, 1179, 1180, 1169, 1172, 1182, 1168, 1170,
+ 1169, 1172, 1176, 1181, 1174, 1182, 1178, 1176, 1175, 1177,
+ 1173, 1179, 1181, 1183, 1184, 1178, 1180, 1185, 0, 1187,
+ 1179, 1180, 1194, 1186, 1182, 1190, 1189, 1188, 1187, 1191,
+ 1181, 1192, 0, 1185, 1189, 0, 1197, 1183, 1184, 1196,
+
+ 1183, 1184, 1188, 1192, 1185, 1186, 1187, 1193, 1195, 1194,
+ 1186, 1197, 1196, 1189, 1188, 1198, 1195, 1190, 1192, 1200,
+ 1201, 1191, 1202, 1197, 1198, 1203, 1196, 1203, 1200, 1193,
+ 1202, 1205, 1206, 1207, 1193, 1195, 1208, 1211, 1201, 1205,
+ 1209, 1213, 1198, 1210, 1211, 1214, 1200, 1201, 0, 1202,
+ 1206, 1215, 1203, 1216, 1213, 1208, 1217, 1214, 1205, 1206,
+ 1207, 1218, 1209, 1208, 1211, 1210, 1215, 1209, 1213, 1219,
+ 1210, 1221, 1214, 1218, 1217, 1216, 1222, 1220, 1215, 1223,
+ 1216, 0, 1224, 1217, 1220, 1226, 1225, 0, 1218, 1227,
+ 0, 0, 1229, 1228, 1224, 1231, 1219, 1225, 1223, 1232,
+
+ 1234, 0, 0, 1221, 1220, 1229, 1223, 1226, 1222, 1224,
+ 1230, 1232, 1226, 1225, 1227, 1228, 1227, 1231, 1235, 1229,
+ 1228, 1233, 1231, 1230, 1234, 1237, 1232, 1234, 1236, 1233,
+ 1239, 1240, 0, 1237, 1243, 1242, 1241, 1230, 1235, 1244,
+ 1236, 1249, 1246, 1243, 1240, 1235, 1245, 0, 1233, 1246,
+ 1251, 1244, 1237, 1242, 1250, 1236, 1252, 1239, 1240, 1241,
+ 0, 1243, 1242, 1241, 1249, 1247, 1244, 1245, 1249, 1246,
+ 1253, 1254, 1251, 1245, 1247, 1255, 1247, 1251, 1257, 1247,
+ 1250, 1250, 1258, 1252, 1256, 1254, 1257, 1247, 1255, 1259,
+ 1253, 1258, 1247, 1261, 1264, 1263, 1262, 1253, 1254, 0,
+
+ 1266, 1247, 1255, 1247, 1262, 1257, 1247, 1259, 1256, 1258,
+ 1263, 1256, 1265, 1266, 1267, 1261, 1259, 1268, 1270, 0,
+ 1261, 1271, 1263, 1262, 1272, 1268, 1264, 1266, 1273, 1275,
+ 1267, 1274, 1276, 0, 1265, 1273, 0, 1277, 0, 1265,
+ 0, 1267, 1278, 1271, 1268, 1270, 1272, 1282, 1271, 1277,
+ 1276, 1272, 1275, 1274, 1278, 1273, 1275, 1279, 1274, 1276,
+ 1281, 1280, 1283, 1284, 1277, 1279, 1286, 1282, 1288, 1278,
+ 1280, 1284, 1281, 1285, 1282, 1286, 1289, 1283, 1287, 1285,
+ 1288, 1290, 0, 1300, 1279, 1280, 0, 1281, 1280, 1283,
+ 1284, 1291, 1289, 1286, 1292, 1288, 1293, 1280, 1291, 1287,
+
+ 1285, 1292, 1295, 1289, 1294, 1287, 1298, 1296, 1298, 1297,
+ 1295, 1303, 1299, 1290, 1293, 1300, 1294, 1297, 1291, 1301,
+ 1304, 1292, 1296, 1293, 1299, 1305, 1301, 1310, 1307, 1295,
+ 1306, 1294, 1304, 1298, 1296, 1307, 1297, 1308, 1305, 1299,
+ 1309, 1319, 1310, 1303, 1314, 1311, 1301, 1304, 1308, 1306,
+ 1311, 1312, 1305, 1313, 1310, 1307, 1315, 1306, 1314, 1312,
+ 1317, 0, 1309, 1318, 1308, 0, 1313, 1309, 1320, 1324,
+ 1322, 1314, 0, 1319, 1317, 0, 1321, 1311, 1312, 0,
+ 1313, 1318, 1315, 1315, 1316, 1325, 1323, 1317, 1316, 0,
+ 1318, 1316, 1316, 1322, 1320, 1320, 1316, 1322, 1321, 1326,
+
+ 0, 1324, 1316, 1321, 1323, 1327, 1316, 1325, 1328, 1333,
+ 1316, 1316, 1325, 1323, 1328, 1316, 1329, 0, 1316, 1316,
+ 1330, 1326, 1330, 1316, 1334, 0, 1326, 1331, 1332, 1316,
+ 1336, 1327, 1327, 1316, 1331, 1328, 1335, 1332, 1337, 1338,
+ 1339, 1333, 1329, 1329, 1330, 1337, 1341, 1330, 1336, 1330,
+ 1340, 1343, 1342, 1339, 1331, 1332, 1334, 1336, 1344, 1340,
+ 1335, 1338, 1346, 1335, 1345, 1337, 1338, 1339, 1348, 1349,
+ 0, 1354, 0, 1342, 0, 0, 1346, 1340, 1341, 1342,
+ 1344, 1350, 1349, 1343, 1352, 1344, 0, 1345, 1358, 1346,
+ 1348, 1345, 1347, 1355, 1354, 1348, 1349, 1347, 1354, 1347,
+
+ 1352, 1347, 1356, 1347, 1357, 1355, 1358, 1350, 1350, 1356,
+ 1347, 1352, 1359, 1357, 1360, 1358, 1361, 1359, 1362, 1347,
+ 1355, 1365, 1364, 1362, 1347, 1363, 1347, 1368, 1347, 1356,
+ 1347, 1357, 1360, 1370, 1361, 1364, 1369, 1372, 1366, 1365,
+ 1368, 1360, 1367, 1361, 1359, 1362, 1366, 1363, 1365, 1364,
+ 1367, 1371, 1363, 1374, 1368, 1376, 1372, 1373, 1375, 1370,
+ 1370, 1377, 0, 1378, 1372, 1366, 1371, 1380, 1369, 1367,
+ 1373, 1375, 1378, 1376, 1379, 1374, 1379, 1381, 1371, 1382,
+ 1374, 1377, 1376, 1383, 1373, 1375, 1384, 1385, 1377, 1380,
+ 1378, 1382, 1387, 1388, 1380, 1389, 1391, 1393, 1392, 1390,
+
+ 0, 1379, 1394, 1389, 1381, 1392, 1382, 1399, 1384, 1395,
+ 1383, 1404, 1385, 1384, 1385, 1388, 1387, 1390, 0, 1387,
+ 1388, 1396, 1389, 1391, 1393, 1392, 1390, 1396, 1394, 1394,
+ 1400, 1395, 1397, 1398, 1399, 1401, 1395, 1400, 1397, 1398,
+ 1402, 1405, 1403, 1404, 0, 1401, 1407, 1406, 1396, 1403,
+ 1413, 1410, 1408, 0, 1411, 1427, 1412, 1400, 1415, 1397,
+ 1398, 1408, 1401, 1405, 1402, 1406, 1411, 1402, 1405, 1403,
+ 1412, 1407, 1413, 1407, 1406, 1410, 1414, 1413, 1410, 1408,
+ 1415, 1411, 1416, 1412, 1417, 1415, 1418, 1427, 1420, 1414,
+ 1419, 1422, 1428, 1425, 1421, 0, 1431, 0, 1423, 0,
+
+ 1422, 1416, 1424, 1414, 1429, 1430, 1417, 1425, 1435, 1416,
+ 1418, 1417, 1419, 1418, 1420, 1420, 1421, 1419, 1422, 1423,
+ 1425, 1421, 1424, 1432, 1428, 1423, 1429, 1430, 1431, 1424,
+ 1433, 1429, 1430, 1434, 1439, 1435, 1436, 1437, 1433, 1440,
+ 1442, 1432, 1441, 1436, 1437, 1445, 1443, 1444, 1440, 1434,
+ 1432, 1444, 1442, 1443, 1446, 1447, 1439, 1433, 1450, 1441,
+ 1434, 1439, 1448, 1436, 1437, 1454, 1440, 1442, 1456, 1441,
+ 0, 1453, 0, 1443, 1444, 1451, 1447, 1445, 1448, 1452,
+ 1455, 1451, 1447, 1456, 1459, 1452, 1446, 1455, 1451, 1448,
+ 1450, 1457, 1452, 1453, 1458, 1456, 1462, 1454, 1453, 1461,
+
+ 1463, 1461, 1451, 1458, 1457, 1462, 1452, 1455, 1451, 1460,
+ 1459, 1459, 1452, 1465, 0, 1464, 1460, 1467, 1457, 1470,
+ 1469, 1458, 1463, 1462, 1464, 1466, 1461, 1463, 1469, 1466,
+ 1472, 1471, 1470, 1474, 1473, 1472, 1460, 1475, 1477, 1467,
+ 1465, 1476, 1464, 1473, 1467, 1471, 1470, 1469, 0, 1481,
+ 1477, 1474, 1466, 1480, 1476, 1484, 1475, 0, 1471, 1482,
+ 1474, 1473, 1472, 1478, 1475, 1477, 1478, 1479, 1476, 1486,
+ 1479, 1480, 1482, 1485, 1481, 1478, 1481, 1488, 0, 1487,
+ 1480, 1492, 1488, 1489, 1485, 1493, 1482, 1484, 1507, 1479,
+ 1478, 1489, 1486, 1478, 1479, 1487, 1486, 1479, 1490, 1490,
+
+ 1485, 1494, 1491, 1492, 1495, 1497, 1487, 1493, 1492, 1488,
+ 1489, 1491, 1493, 1495, 1496, 1498, 1504, 1500, 0, 1503,
+ 1507, 1496, 1498, 1494, 1501, 1490, 1502, 1497, 1494, 1491,
+ 1500, 1495, 1497, 1501, 1508, 1502, 0, 0, 1505, 1504,
+ 1506, 1496, 1498, 1504, 1500, 1503, 1503, 1505, 1506, 1508,
+ 1510, 1501, 1509, 1502, 1512, 1511, 1514, 1513, 1510, 1519,
+ 1516, 1508, 1523, 1509, 1514, 1505, 1512, 1506, 1511, 1513,
+ 1515, 1517, 1519, 1521, 1523, 1522, 1518, 1510, 1524, 1509,
+ 1516, 1512, 1511, 1514, 1513, 1518, 1519, 1516, 1520, 1523,
+ 1526, 1521, 1515, 1517, 1520, 1527, 1524, 1515, 1517, 1525,
+
+ 1521, 1522, 1522, 1518, 1528, 1524, 1525, 1529, 1531, 1536,
+ 1537, 1530, 1532, 1533, 0, 1520, 1526, 1526, 1538, 1534,
+ 1529, 1535, 0, 0, 1533, 1534, 1525, 1527, 1539, 0,
+ 1540, 1542, 1546, 1532, 1529, 1531, 1528, 1530, 1530, 1532,
+ 1533, 1536, 1537, 1535, 1543, 1544, 1534, 1546, 1535, 1540,
+ 1538, 1540, 1545, 1547, 1539, 1539, 1540, 1540, 1542, 1546,
+ 1550, 1545, 1548, 1544, 1549, 0, 1547, 1543, 1551, 1552,
+ 1553, 1543, 1544, 1555, 1548, 1551, 1540, 1554, 1540, 1545,
+ 1547, 1555, 1558, 0, 1549, 1560, 1550, 1550, 1552, 1548,
+ 1554, 1549, 1553, 1556, 1557, 1551, 1552, 1553, 1556, 1557,
+
+ 1555, 1559, 1561, 1563, 1554, 1558, 1562, 1565, 1559, 1558,
+ 1561, 1560, 1560, 1564, 1562, 1565, 1566, 1568, 1567, 1569,
+ 1574, 1563, 1577, 1566, 1571, 1556, 1557, 1567, 1559, 1561,
+ 1563, 1571, 1572, 1562, 1565, 1564, 1573, 1573, 1570, 1576,
+ 1564, 1569, 1575, 1566, 1572, 1567, 1569, 1570, 1578, 1568,
+ 1575, 1571, 1574, 1579, 1577, 1586, 1578, 0, 1587, 1572,
+ 1576, 1584, 1580, 1573, 1581, 1570, 1576, 1586, 1582, 1575,
+ 1580, 1579, 1581, 1583, 1584, 1578, 1582, 1585, 1588, 1589,
+ 1579, 1583, 1586, 1585, 1587, 1587, 1590, 1589, 1584, 1580,
+ 1592, 1581, 1591, 1593, 1590, 1582, 1594, 1596, 1595, 0,
+
+ 1583, 0, 1588, 1597, 1585, 1588, 1589, 1591, 1598, 1603,
+ 0, 1596, 1600, 1590, 1599, 1597, 1600, 1592, 1594, 1591,
+ 1593, 1595, 1602, 1594, 1596, 1595, 1598, 0, 1599, 1600,
+ 1597, 1602, 1604, 1603, 1605, 1598, 1603, 1600, 1606, 1600,
+ 1607, 1599, 1608, 1600, 1609, 1606, 1605, 1610, 1611, 1602,
+ 1612, 1607, 1613, 0, 1604, 1615, 1600, 1621, 1614, 1604,
+ 1611, 1605, 0, 1616, 1612, 1606, 1609, 1607, 1622, 1608,
+ 1619, 1609, 1626, 1630, 1617, 1611, 1628, 1612, 1615, 1610,
+ 1614, 1617, 1615, 1618, 1613, 1614, 1616, 1620, 1619, 1621,
+ 1616, 1624, 1618, 1627, 1620, 1622, 1629, 1619, 1628, 1627,
+
+ 1624, 1617, 1631, 1628, 1626, 1630, 1633, 1635, 1636, 1631,
+ 1618, 1642, 1641, 1637, 1620, 1638, 1639, 1642, 1624, 1644,
+ 1627, 1643, 1629, 1629, 1637, 1645, 1638, 1639, 1643, 1631,
+ 1646, 1635, 1645, 1633, 1635, 1636, 1641, 1644, 1642, 1641,
+ 1637, 1647, 1638, 1639, 1648, 1650, 1644, 1649, 1643, 1651,
+ 1648, 1652, 1645, 1647, 1653, 1649, 1646, 1646, 1656, 1654,
+ 1655, 1657, 1651, 1657, 1659, 1660, 1658, 1650, 1647, 1655,
+ 1656, 1648, 1650, 1658, 1649, 1661, 1651, 1654, 1660, 1662,
+ 1653, 1653, 1663, 1652, 1661, 1656, 1654, 1655, 1657, 1664,
+ 1659, 1659, 1660, 1658, 1663, 1665, 1666, 0, 1667, 1668,
+
+ 1669, 1662, 1661, 1666, 1668, 1670, 1662, 1671, 1669, 1663,
+ 1675, 1672, 1676, 1673, 1678, 1677, 1664, 1676, 1665, 1672,
+ 1680, 1670, 1665, 1666, 1667, 1667, 1668, 1669, 1678, 1679,
+ 1671, 1680, 1670, 1682, 1671, 1673, 1681, 1675, 1672, 1677,
+ 1673, 1678, 1677, 1687, 1676, 1681, 1682, 1680, 1684, 1683,
+ 1683, 1679, 1685, 1686, 1685, 1689, 1679, 1683, 1694, 1688,
+ 1682, 1684, 1689, 1681, 1692, 1690, 1691, 1706, 1700, 1687,
+ 1687, 1686, 1695, 1691, 1696, 1684, 1683, 1683, 1698, 1685,
+ 1686, 1688, 1689, 1702, 1699, 1694, 1688, 1690, 1692, 1693,
+ 1695, 1692, 1690, 1691, 1706, 1697, 1696, 1693, 1703, 1695,
+
+ 1700, 1696, 1697, 1698, 1705, 1698, 1699, 1701, 1709, 0,
+ 1707, 1699, 1710, 1708, 1701, 1702, 1693, 1705, 1707, 1712,
+ 1703, 1708, 1697, 1713, 1718, 1703, 1713, 1714, 0, 1715,
+ 1709, 1705, 1716, 1710, 1701, 1709, 1718, 1707, 1717, 1710,
+ 1708, 1712, 1719, 0, 1720, 1716, 1712, 1717, 1721, 1722,
+ 1713, 1718, 1726, 1714, 1714, 1715, 1715, 1721, 1724, 1716,
+ 1723, 1724, 1725, 0, 1722, 1717, 1719, 1723, 1727, 1719,
+ 1720, 1720, 1733, 1724, 1730, 1721, 1722, 1725, 1728, 1734,
+ 1735, 1731, 1724, 1735, 1726, 1724, 1739, 1723, 1724, 1725,
+ 1727, 1732, 1730, 1732, 1728, 1727, 1733, 1736, 1737, 1733,
+
+ 1724, 1730, 1728, 1731, 1738, 1728, 1734, 1735, 1731, 1740,
+ 1741, 1742, 1739, 1739, 1743, 0, 1744, 1746, 1732, 1745,
+ 1748, 1728, 1749, 1747, 1746, 1744, 1738, 1745, 1743, 1736,
+ 1737, 1738, 1750, 1742, 1751, 1740, 1740, 1752, 1742, 1755,
+ 1754, 1743, 1741, 1744, 1746, 1753, 1745, 1747, 1756, 1753,
+ 1747, 1757, 1748, 0, 1749, 1760, 1751, 0, 1758, 1759,
+ 1757, 1751, 1754, 1760, 1750, 1758, 1755, 1754, 1762, 1752,
+ 1756, 1759, 1753, 1761, 1763, 1756, 1764, 1768, 1757, 1765,
+ 1761, 1762, 1760, 1769, 1767, 1758, 1759, 1763, 1765, 1764,
+ 1766, 1769, 1766, 1770, 1772, 1762, 1775, 1773, 0, 0,
+
+ 1761, 1763, 1768, 1764, 1768, 1774, 1765, 1767, 1776, 1772,
+ 1769, 1767, 1773, 1770, 1777, 1776, 1778, 1766, 1779, 1774,
+ 1770, 1772, 1780, 1778, 1773, 1777, 1781, 1784, 1775, 1782,
+ 1785, 1779, 1774, 1786, 0, 1776, 1787, 1785, 1788, 1791,
+ 1780, 1777, 1791, 1778, 0, 1779, 1780, 1782, 1790, 1780,
+ 1789, 1787, 1781, 1781, 1784, 1786, 1782, 1785, 1793, 1792,
+ 1786, 1790, 1789, 1787, 1788, 1788, 1791, 1780, 1792, 1794,
+ 1795, 1796, 1797, 1801, 1796, 1790, 1793, 1789, 1802, 1799,
+ 1802, 1794, 1801, 1797, 1799, 1793, 1792, 1804, 1803, 1796,
+ 1795, 1799, 1805, 1806, 1807, 1809, 1794, 1795, 1796, 1797,
+
+ 1801, 1796, 1808, 1807, 1810, 1802, 1799, 0, 1806, 1811,
+ 1812, 1799, 1803, 1813, 1804, 1803, 1816, 1811, 1810, 1805,
+ 1806, 1807, 1809, 1814, 1815, 1817, 1808, 1819, 1818, 1808,
+ 1815, 1810, 1812, 1817, 1820, 1813, 1811, 1812, 1816, 1818,
+ 1813, 1821, 1820, 1816, 1821, 1819, 1822, 1814, 1823, 1822,
+ 1814, 1815, 1817, 1824, 1819, 1818, 1825, 1826, 0, 1821,
+ 1827, 1820, 1828, 1829, 1833, 1830, 1823, 1827, 1821, 1831,
+ 1858, 1821, 1829, 1822, 1832, 1823, 1828, 1826, 1830, 1832,
+ 1831, 1839, 1834, 1825, 1826, 1824, 1833, 1827, 1840, 1828,
+ 1829, 1833, 1830, 1837, 1838, 1837, 1831, 1834, 1842, 1841,
+
+ 0, 1843, 1858, 1838, 1844, 1843, 1832, 1839, 1839, 1834,
+ 1841, 1845, 1840, 1846, 1845, 1840, 1842, 1847, 1844, 0,
+ 1837, 1838, 0, 1861, 1848, 1842, 1841, 1843, 1843, 1845,
+ 1844, 1844, 1843, 1848, 1851, 1846, 1849, 1850, 1845, 1851,
+ 1846, 1845, 1849, 1847, 1847, 1844, 1850, 1853, 1855, 1854,
+ 1856, 1848, 1857, 1855, 1860, 1861, 1862, 1863, 1859, 1864,
+ 1853, 1854, 1870, 1849, 1850, 1857, 1851, 1859, 1865, 1869,
+ 1863, 1873, 1856, 1867, 1853, 1855, 1854, 1856, 1862, 1857,
+ 1867, 1860, 1869, 1862, 1863, 1859, 1868, 1871, 1875, 1865,
+ 1880, 1864, 1872, 1868, 1870, 1865, 1869, 1877, 1872, 1881,
+
+ 1867, 1871, 1878, 1873, 1879, 1877, 1883, 1875, 0, 1880,
+ 1878, 1888, 1879, 1868, 1871, 1875, 1872, 1880, 1882, 1872,
+ 1883, 1881, 1884, 1885, 1877, 1872, 1881, 1891, 1886, 1878,
+ 1887, 1879, 1888, 1883, 1889, 1890, 1882, 1885, 1888, 0,
+ 1884, 1886, 1892, 1887, 1893, 1882, 1894, 1897, 1898, 1884,
+ 1885, 1891, 1895, 1894, 1891, 1886, 1892, 1887, 1899, 1888,
+ 1896, 1895, 1898, 0, 1904, 1900, 1889, 1890, 1896, 1892,
+ 1900, 1893, 1901, 1894, 1897, 1898, 1902, 1905, 1906, 1895,
+ 1907, 1908, 1911, 1901, 1905, 1902, 1914, 1896, 1908, 1909,
+ 1899, 1904, 1900, 1910, 1912, 1918, 1916, 1914, 1912, 1901,
+
+ 1911, 1906, 1907, 1902, 1905, 1906, 1937, 1907, 1908, 1911,
+ 1914, 1909, 1916, 1914, 1917, 1910, 1909, 1920, 1919, 1918,
+ 1910, 1912, 1918, 1916, 1914, 1921, 1922, 1923, 1924, 1920,
+ 1925, 1928, 1917, 1919, 1922, 1927, 1924, 1926, 1937, 0,
+ 1930, 1917, 1923, 0, 1920, 1919, 1929, 1932, 1927, 1933,
+ 1931, 1928, 1921, 1922, 1923, 1924, 1933, 1925, 1928, 1926,
+ 1930, 1929, 1927, 1932, 1926, 1931, 1938, 1930, 1936, 1940,
+ 1935, 1939, 1941, 1929, 1932, 1936, 1933, 1931, 1935, 1942,
+ 1939, 1938, 1943, 1944, 1947, 1946, 1949, 1950, 1948, 1943,
+ 1940, 1951, 0, 1938, 0, 1936, 1940, 1935, 1939, 1941,
+
+ 1948, 1953, 1952, 1942, 1949, 0, 1942, 1946, 1954, 1943,
+ 1944, 1972, 1946, 1949, 1955, 1948, 1947, 1952, 1951, 1950,
+ 1956, 1955, 1957, 1959, 1958, 1956, 1953, 0, 1953, 1952,
+ 1960, 1957, 1954, 1958, 1963, 1954, 1961, 1964, 1962, 0,
+ 1965, 1955, 1966, 1972, 1971, 1959, 1963, 1956, 0, 1957,
+ 1959, 1958, 1960, 1962, 1961, 1966, 1969, 1960, 1970, 1964,
+ 1966, 1963, 1965, 1961, 1964, 1962, 1967, 1965, 1968, 1966,
+ 1970, 1971, 1979, 1967, 1973, 1968, 1975, 1978, 1969, 1979,
+ 1973, 1976, 1966, 1969, 1977, 1970, 1982, 1975, 1978, 1976,
+ 1968, 1980, 1977, 1967, 1981, 1968, 1981, 1983, 1984, 1979,
+
+ 1986, 1973, 1968, 1975, 1978, 1987, 1991, 1981, 1976, 1988,
+ 1985, 1977, 1982, 1982, 1989, 1988, 1980, 1985, 1980, 1992,
+ 1989, 1981, 1990, 1981, 1983, 1984, 1993, 1986, 1990, 1994,
+ 1996, 1987, 1987, 1991, 1997, 1998, 1988, 1985, 2000, 2002,
+ 0, 1989, 1992, 1997, 1999, 2001, 1992, 2001, 1999, 1990,
+ 2003, 2005, 2004, 1994, 2006, 2013, 1994, 2007, 1993, 2004,
+ 2000, 1997, 1996, 2002, 2008, 2000, 2002, 1998, 2009, 2007,
+ 2008, 1999, 2001, 2005, 2010, 0, 2011, 2003, 2005, 2004,
+ 2018, 2006, 2012, 0, 2007, 0, 0, 2013, 2016, 2027,
+ 2009, 2008, 2014, 2014, 2014, 2009, 2010, 2016, 2015, 2014,
+
+ 2022, 2010, 2011, 2011, 2012, 2015, 2017, 2014, 2021, 2012,
+ 2019, 2020, 2018, 2017, 2027, 2016, 2027, 2019, 2020, 2014,
+ 2014, 2014, 2022, 2025, 2024, 2015, 2014, 2022, 2021, 2024,
+ 2026, 2028, 2029, 2017, 2030, 2021, 2025, 2019, 2020, 0,
+ 2033, 2032, 2026, 2031, 2029, 2034, 2033, 2028, 2032, 2036,
+ 2025, 2035, 2035, 2037, 2051, 2039, 2024, 2026, 2028, 2029,
+ 2037, 2031, 2040, 2041, 2038, 2045, 2030, 2033, 2032, 2038,
+ 2031, 2046, 2034, 2046, 0, 2036, 2036, 2042, 2035, 2047,
+ 2037, 2039, 2039, 2049, 2042, 2055, 2051, 2050, 2052, 2040,
+ 2041, 2038, 2045, 2050, 2053, 2054, 2052, 2047, 2046, 2057,
+
+ 2058, 2049, 2061, 2056, 2042, 2053, 2047, 2059, 2054, 2056,
+ 2049, 2057, 2055, 2062, 2050, 2052, 2060, 2060, 2063, 2063,
+ 2058, 2053, 2054, 2066, 2064, 2059, 2057, 2058, 2061, 2061,
+ 2056, 2067, 2068, 2071, 2059, 2064, 2070, 0, 2075, 2069,
+ 2062, 2074, 2072, 2060, 2076, 2063, 2069, 2079, 0, 2074,
+ 2077, 2064, 2081, 2067, 2080, 2066, 2070, 2078, 2067, 2079,
+ 2081, 2080, 2082, 2070, 2068, 2071, 2069, 2072, 2074, 2072,
+ 2075, 2076, 2077, 2083, 2079, 2078, 2085, 2077, 2084, 2081,
+ 2087, 2080, 2086, 2086, 2078, 2085, 2082, 2088, 2083, 2082,
+ 2090, 2091, 0, 2089, 2093, 0, 2096, 2095, 2091, 2092,
+
+ 2083, 2096, 2084, 2085, 2095, 2084, 2087, 2087, 2089, 2086,
+ 2093, 2092, 2097, 2098, 0, 0, 2105, 2093, 2091, 2088,
+ 2089, 2093, 2090, 2096, 2095, 2099, 2092, 2100, 2099, 2101,
+ 2103, 2107, 2104, 2108, 2097, 2100, 0, 2093, 2103, 2097,
+ 2098, 2101, 2105, 2105, 2106, 2109, 2110, 2112, 2111, 2107,
+ 2120, 0, 2099, 2111, 2100, 2104, 2101, 2103, 2107, 2104,
+ 2108, 2113, 2115, 2109, 2111, 2106, 2114, 2113, 2116, 2110,
+ 2115, 2106, 2109, 2110, 2112, 2111, 2117, 2118, 2119, 2114,
+ 2111, 2125, 2120, 2117, 2118, 2119, 2122, 2121, 2113, 2115,
+ 2116, 2126, 2124, 2114, 2123, 2116, 2121, 2127, 2122, 2137,
+
+ 2132, 2133, 2131, 2117, 2118, 2119, 2124, 2129, 2125, 2131,
+ 2130, 2135, 2139, 2122, 2121, 2130, 2123, 2126, 2126, 2124,
+ 2127, 2123, 2132, 2141, 2127, 2129, 2130, 2132, 2133, 2131,
+ 2136, 2137, 2140, 2140, 2129, 2136, 2142, 2130, 2135, 2143,
+ 2145, 2146, 2130, 2147, 2139, 2141, 2148, 2149, 2150, 2149,
+ 2141, 2142, 2151, 2152, 2153, 2145, 2154, 2151, 2147, 2140,
+ 2155, 2156, 2136, 2142, 2146, 0, 2153, 2145, 2146, 2156,
+ 2147, 2143, 2148, 2148, 2149, 2157, 2158, 2159, 2154, 2151,
+ 2150, 2153, 2157, 2154, 2161, 2152, 2162, 2155, 2156, 2165,
+ 2163, 2166, 2159, 2167, 2162, 2168, 2171, 2169, 2158, 2161,
+
+ 2170, 2174, 2157, 2158, 2159, 2175, 0, 2173, 2176, 2172,
+ 2177, 2161, 2163, 2162, 2173, 2166, 2165, 2163, 2166, 2167,
+ 2167, 2172, 2168, 2169, 2169, 2178, 2175, 2170, 2171, 2180,
+ 2176, 2177, 2175, 2174, 2173, 2176, 2172, 2177, 2183, 2181,
+ 2184, 2185, 2186, 2178, 2181, 0, 2187, 2185, 0, 2189,
+ 2192, 2180, 2178, 2191, 0, 2190, 2180, 2186, 2197, 2194,
+ 2193, 2195, 2183, 2184, 2189, 2183, 2196, 2184, 2185, 2186,
+ 2190, 2181, 2187, 2187, 2199, 2191, 2189, 2192, 2193, 0,
+ 2191, 2194, 2190, 2195, 2198, 2197, 2194, 2193, 2195, 2200,
+ 2196, 2198, 2199, 2196, 2201, 2202, 2203, 2205, 2200, 2206,
+
+ 0, 2199, 2201, 2204, 2207, 2208, 2212, 2209, 2206, 0,
+ 2213, 2198, 0, 2211, 2208, 2212, 2200, 2214, 2233, 2203,
+ 2209, 2201, 2207, 2203, 2211, 2204, 2206, 2202, 2213, 2205,
+ 2204, 2207, 2208, 2212, 2209, 2214, 2215, 2213, 2216, 2211,
+ 2211, 2217, 2218, 2215, 2214, 2220, 2219, 2221, 2224, 2227,
+ 2233, 2211, 2219, 2226, 0, 2228, 0, 2218, 2235, 2217,
+ 2227, 2221, 2247, 2215, 2216, 2216, 2228, 2220, 2217, 2218,
+ 2229, 2231, 2220, 2219, 2221, 2224, 2227, 2226, 2232, 2234,
+ 2226, 2229, 2228, 2231, 2235, 2235, 2236, 2237, 2239, 2234,
+ 2238, 2232, 2242, 2240, 2247, 2243, 0, 2229, 2231, 2238,
+
+ 2237, 0, 2246, 2245, 0, 2232, 2234, 2245, 2249, 2251,
+ 2255, 2236, 2240, 2236, 2237, 2239, 2251, 2238, 2248, 2242,
+ 2240, 2243, 2243, 2246, 2252, 2255, 2253, 2250, 2249, 2246,
+ 2245, 2248, 2250, 2254, 2253, 2249, 2251, 2255, 0, 2254,
+ 2256, 2260, 2258, 2262, 2257, 2248, 2259, 2259, 2262, 0,
+ 2252, 2252, 2253, 2253, 2250, 2256, 2257, 2258, 2261, 2260,
+ 2254, 2253, 2263, 2269, 2268, 2266, 2263, 2256, 2260, 2258,
+ 2261, 2257, 2266, 2259, 0, 2262, 2264, 2264, 2267, 2268,
+ 2264, 2271, 2267, 0, 0, 2261, 2270, 2272, 2271, 2263,
+ 2269, 2268, 2266, 2264, 2273, 2270, 2276, 2277, 0, 2274,
+
+ 2278, 2264, 2287, 2264, 2264, 2267, 2274, 2264, 2271, 2278,
+ 2279, 2272, 2283, 2270, 2272, 2280, 2273, 2287, 2276, 2285,
+ 2264, 2273, 2277, 2276, 2277, 2286, 2274, 2278, 2285, 2287,
+ 2283, 2288, 2279, 2289, 2291, 2280, 2294, 2279, 2290, 2283,
+ 2292, 2289, 2280, 2286, 2295, 2290, 2285, 2292, 2296, 2297,
+ 2297, 2298, 2286, 2306, 2299, 2301, 2288, 2295, 2288, 2303,
+ 2289, 2294, 2302, 2294, 0, 2290, 2291, 2292, 2303, 2307,
+ 0, 2295, 2316, 2298, 2304, 2296, 2297, 2301, 2298, 2299,
+ 2305, 2299, 2301, 2304, 2302, 2306, 2303, 2305, 2308, 2302,
+ 2309, 2307, 2310, 2311, 2315, 2313, 2307, 2310, 2314, 2316,
+
+ 2317, 2304, 2308, 2313, 2319, 2309, 2321, 2305, 2323, 2315,
+ 2322, 2314, 2311, 2318, 2327, 2308, 2319, 2309, 0, 2324,
+ 2311, 2315, 2313, 2320, 2310, 2314, 2317, 2317, 2324, 2318,
+ 2320, 2319, 2322, 2323, 2325, 2323, 2326, 2322, 2321, 0,
+ 2318, 2327, 2328, 2331, 2326, 2332, 2324, 2329, 0, 2330,
+ 2320, 2333, 0, 0, 2335, 2326, 0, 2328, 2337, 2339,
+ 2333, 2331, 2336, 2326, 2339, 2336, 2325, 2332, 2341, 2328,
+ 2331, 2326, 2332, 2329, 2329, 2330, 2330, 2335, 2333, 2340,
+ 2336, 2335, 2338, 2337, 2342, 2337, 2341, 2344, 2338, 2336,
+ 2345, 2339, 2336, 2346, 2340, 2341, 2347, 2352, 2349, 2342,
+
+ 0, 2344, 0, 2351, 2353, 2345, 2340, 2350, 2357, 2338,
+ 2357, 2342, 2349, 2353, 2344, 2346, 2358, 2345, 2347, 2350,
+ 2346, 2351, 2356, 2347, 2352, 2349, 2350, 2354, 2355, 2358,
+ 2351, 2353, 2359, 2356, 2350, 2357, 2354, 2355, 2360, 2365,
+ 2364, 2362, 2363, 2358, 2359, 2367, 2350, 2364, 2366, 2356,
+ 0, 0, 0, 2368, 2354, 2355, 2362, 2363, 2371, 2359,
+ 2360, 2365, 2368, 2367, 2375, 2360, 2365, 2364, 2362, 2363,
+ 2366, 2371, 2367, 2373, 2374, 2366, 2375, 2376, 2374, 2371,
+ 2368, 2377, 2379, 2377, 2378, 2371, 2376, 2380, 2381, 2383,
+ 2382, 2375, 2386, 0, 2373, 2384, 2391, 2383, 2371, 2382,
+
+ 2373, 2374, 2378, 2385, 2376, 2380, 2386, 0, 2377, 2379,
+ 2394, 2378, 2387, 2388, 2380, 2381, 2383, 2382, 2384, 2386,
+ 2388, 2390, 2384, 2395, 2387, 2385, 2392, 2393, 2391, 2390,
+ 2385, 2392, 2393, 2396, 2399, 2398, 2401, 2404, 2405, 2387,
+ 2388, 2399, 2394, 2401, 2406, 2403, 2404, 2408, 2390, 2403,
+ 2407, 2414, 2409, 2392, 2398, 2395, 2421, 2396, 2406, 2393,
+ 2396, 2399, 2398, 2401, 2404, 2405, 2410, 2411, 2407, 2406,
+ 2406, 2406, 2403, 2417, 2408, 2415, 2411, 2407, 2409, 2409,
+ 2412, 2410, 2416, 2414, 2418, 2406, 2419, 2415, 2421, 2416,
+ 2420, 2423, 2424, 2410, 2411, 2417, 2406, 2425, 2426, 2424,
+
+ 2417, 2412, 2415, 0, 2428, 2426, 2428, 2412, 2429, 2416,
+ 2418, 2418, 2420, 2419, 2423, 2431, 2433, 2420, 2423, 2424,
+ 2425, 2439, 2430, 2432, 2425, 2426, 2430, 2431, 2434, 2435,
+ 2429, 2428, 2432, 0, 2436, 2429, 2437, 2434, 2433, 2438,
+ 2435, 2436, 2431, 2433, 2438, 2440, 0, 2441, 2439, 2430,
+ 2432, 2442, 2446, 2443, 2448, 2434, 2435, 2449, 2437, 2441,
+ 2445, 2436, 2443, 2437, 2444, 2444, 2438, 2446, 2440, 2445,
+ 2451, 2449, 2440, 2442, 2441, 2447, 2448, 2450, 2442, 2446,
+ 2443, 2448, 2453, 2447, 2449, 2454, 2450, 2445, 2455, 2458,
+ 2456, 2444, 2458, 2454, 2463, 2457, 2455, 2451, 2456, 2457,
+
+ 2459, 2453, 2447, 2461, 2450, 2460, 2464, 2462, 2459, 2453,
+ 2468, 2460, 2454, 2462, 2470, 2455, 2458, 2456, 2461, 2466,
+ 2469, 0, 2457, 2471, 2468, 2473, 2463, 2459, 2476, 2472,
+ 2461, 2466, 2460, 2469, 2462, 2470, 2472, 2468, 2464, 2474,
+ 2475, 2470, 2476, 2480, 2478, 2479, 2466, 2469, 2471, 2481,
+ 2471, 2477, 2473, 2483, 2477, 2476, 2472, 2478, 2482, 2479,
+ 2489, 2474, 2484, 2485, 2475, 2486, 2474, 2475, 2490, 2480,
+ 2480, 2478, 2479, 2492, 2484, 2485, 2481, 2494, 2477, 2486,
+ 2483, 2487, 2495, 2482, 2487, 2482, 2491, 2489, 2493, 2484,
+ 2485, 2493, 2486, 2502, 2490, 2490, 0, 2496, 2491, 2492,
+
+ 2492, 2498, 2501, 2499, 2494, 2500, 2493, 2487, 2487, 2495,
+ 2499, 2487, 2500, 2491, 2503, 2493, 2505, 2501, 2493, 2496,
+ 2502, 2507, 2506, 2498, 2496, 2504, 2508, 2510, 2498, 2501,
+ 2499, 2506, 2500, 2504, 2509, 2511, 2515, 2512, 2508, 2513,
+ 2516, 2503, 2514, 2505, 2521, 2517, 2515, 2518, 2507, 2506,
+ 2512, 2520, 2504, 2508, 2510, 2518, 2509, 2513, 2517, 2523,
+ 2525, 2509, 2511, 2515, 2512, 2527, 2513, 2516, 2514, 2514,
+ 2524, 2521, 2517, 2520, 2518, 2522, 2529, 2526, 2520, 2524,
+ 2528, 2536, 2525, 2522, 2531, 2530, 2523, 2525, 2532, 2527,
+ 0, 2535, 2527, 2530, 2537, 2528, 2531, 2524, 2526, 2535,
+
+ 2543, 2544, 2522, 2529, 2526, 2534, 2528, 2528, 2536, 2539,
+ 2541, 2531, 2530, 2532, 2541, 2532, 2539, 2534, 2535, 2540,
+ 2546, 2542, 2528, 2543, 0, 0, 2537, 2543, 2544, 2547,
+ 2545, 2540, 2534, 2542, 0, 2549, 2539, 2541, 2545, 2548,
+ 2551, 2554, 2546, 2552, 2553, 2564, 2540, 2546, 2542, 2549,
+ 2552, 2548, 2547, 2557, 2554, 2559, 2547, 2545, 2558, 2558,
+ 2555, 2549, 2549, 2556, 2553, 2557, 2548, 2551, 2554, 2555,
+ 2552, 2553, 2556, 2560, 2561, 0, 2549, 2564, 2562, 2565,
+ 2557, 2559, 2559, 0, 0, 2558, 2566, 2555, 2567, 2568,
+ 2556, 2560, 2573, 2562, 2565, 2562, 2569, 2580, 2569, 2561,
+
+ 2560, 2561, 2562, 2570, 0, 2562, 2565, 2572, 2566, 2576,
+ 2567, 2568, 2571, 2566, 2573, 2567, 2568, 2570, 2571, 2573,
+ 2562, 2577, 2562, 2569, 2578, 2572, 2574, 2574, 2579, 2580,
+ 2570, 2576, 2581, 2583, 2572, 2582, 2576, 2584, 2588, 2571,
+ 2579, 2582, 0, 2577, 2585, 2583, 2578, 2587, 2577, 2587,
+ 2586, 2578, 2588, 2574, 2589, 2579, 2590, 2591, 2592, 2596,
+ 2583, 2593, 2582, 2590, 2581, 2588, 2585, 2595, 2594, 2584,
+ 2597, 2585, 2586, 2598, 2587, 2591, 2592, 2586, 2589, 2593,
+ 2595, 2589, 2600, 2590, 2591, 2592, 2594, 2603, 2593, 2600,
+ 2602, 2596, 2604, 2605, 2595, 2594, 2598, 2602, 0, 2607,
+
+ 2598, 0, 2597, 2606, 0, 2603, 2608, 0, 2610, 2600,
+ 2609, 2606, 0, 2614, 2603, 2607, 2615, 2602, 2604, 2604,
+ 2611, 2616, 0, 0, 2614, 2605, 2607, 2615, 2609, 2606,
+ 2606, 2608, 2617, 2608, 2610, 2610, 2618, 2609, 2606, 2612,
+ 2614, 2612, 2611, 2615, 2617, 2620, 2612, 2611, 2616, 2619,
+ 2623, 2621, 0, 0, 2618, 2626, 2628, 2629, 2624, 2617,
+ 2633, 0, 2625, 2618, 2620, 2623, 2612, 2619, 2612, 2624,
+ 2626, 2632, 2620, 2621, 2625, 2631, 2619, 2623, 2621, 2629,
+ 2628, 2630, 2626, 2628, 2629, 2624, 2632, 2633, 2630, 2625,
+ 2634, 2635, 2638, 2631, 2636, 0, 2641, 2642, 2632, 2639,
+
+ 2640, 0, 2631, 2644, 0, 2646, 2643, 0, 2630, 2648,
+ 2652, 0, 2645, 0, 2651, 0, 2676, 2634, 2635, 2638,
+ 2636, 2636, 2640, 2639, 2643, 2645, 2639, 2640, 2641, 2642,
+ 2644, 2646, 2646, 2643, 2647, 2648, 2648, 2649, 2650, 2645,
+ 2651, 2651, 2652, 2653, 2654, 2656, 2650, 2658, 2676, 2647,
+ 2649, 2657, 2663, 0, 2659, 2660, 2653, 2665, 0, 2663,
+ 2664, 2647, 2661, 0, 2649, 2650, 2654, 2662, 2656, 2668,
+ 2653, 2654, 2656, 0, 2658, 2657, 2659, 2660, 2657, 2663,
+ 2661, 2659, 2660, 2664, 2665, 2662, 2666, 2664, 2669, 2661,
+ 2670, 2668, 2671, 2672, 2662, 2669, 2668, 2670, 2673, 2671,
+
+ 2666, 2674, 2675, 0, 2678, 2677, 2672, 2679, 2674, 2680,
+ 2685, 0, 2690, 2666, 2681, 2669, 2683, 2670, 2680, 2671,
+ 2672, 2673, 2681, 2693, 2675, 2673, 2677, 2682, 2674, 2675,
+ 2678, 2678, 2677, 2679, 2679, 2682, 2680, 2685, 2683, 2684,
+ 2687, 2681, 2688, 2683, 2690, 2684, 2689, 2691, 2693, 2697,
+ 2693, 2692, 0, 2688, 2682, 2687, 2695, 2700, 2698, 0,
+ 2699, 0, 2697, 2701, 2703, 2704, 2684, 2687, 2689, 2688,
+ 2692, 2698, 2705, 2689, 2695, 2707, 2697, 2704, 2692, 2691,
+ 2710, 2700, 2711, 2695, 2700, 2698, 2699, 2699, 2703, 2701,
+ 2701, 2703, 2704, 2706, 2706, 2712, 2705, 2713, 2714, 2705,
+
+ 2717, 2707, 2707, 2710, 2719, 2721, 2722, 2710, 2725, 2728,
+ 2712, 2726, 2726, 2719, 2711, 2728, 2714, 2722, 2721, 2727,
+ 2706, 2730, 2712, 2731, 2713, 2714, 2732, 2717, 2727, 2734,
+ 2725, 2719, 2721, 2722, 2736, 2725, 2728, 2737, 2726, 2752,
+ 0, 2738, 2747, 2730, 2737, 2731, 2727, 2739, 2730, 2740,
+ 2731, 2741, 2743, 2732, 2740, 2745, 2734, 2744, 2739, 2751,
+ 2743, 2749, 2746, 2754, 2737, 2750, 2736, 2738, 2738, 2747,
+ 2745, 2752, 2749, 2741, 2739, 2754, 2740, 2746, 2741, 2743,
+ 2751, 2744, 2745, 2750, 2744, 2753, 2751, 2756, 2749, 2746,
+ 2754, 2757, 2750, 0, 2753, 2758, 2759, 2760, 2760, 2761,
+
+ 0, 2763, 2764, 2767, 2759, 2760, 0, 2766, 2761, 2765,
+ 2769, 0, 2753, 2770, 2756, 2757, 2766, 0, 2757, 2768,
+ 2758, 2767, 2758, 2759, 2760, 2760, 2761, 2763, 2763, 2764,
+ 2767, 2765, 2769, 2768, 2766, 2771, 2765, 2769, 2770, 2772,
+ 2770, 2773, 2774, 2775, 2776, 2777, 2768, 2778, 2771, 2779,
+ 2775, 2776, 2772, 2780, 2781, 2782, 2773, 0, 2783, 2784,
+ 0, 2779, 2771, 2787, 2774, 2788, 2772, 2777, 2773, 2774,
+ 2775, 2776, 2777, 2783, 2778, 2786, 2779, 2789, 2785, 2790,
+ 2780, 2781, 2782, 2792, 2784, 2783, 2784, 2785, 2791, 2787,
+ 2787, 2788, 2788, 2793, 2790, 2791, 2796, 2786, 2792, 2798,
+
+ 2793, 2794, 2786, 2789, 2789, 2785, 2790, 2794, 2795, 2797,
+ 2792, 2799, 2801, 2800, 2803, 2791, 2802, 2797, 2804, 2795,
+ 2793, 2809, 2806, 2796, 2810, 2805, 2798, 2811, 2794, 2800,
+ 2807, 2802, 2805, 2804, 2803, 2795, 2797, 2807, 2799, 2801,
+ 2800, 2803, 2810, 2802, 2806, 2804, 2808, 2814, 2809, 2806,
+ 2816, 2810, 2805, 2808, 2811, 2812, 2812, 2807, 2813, 2815,
+ 2817, 2814, 2815, 2816, 2818, 2813, 2819, 2820, 2821, 0,
+ 2822, 2819, 2823, 2808, 2814, 2827, 2824, 2816, 2817, 2818,
+ 2831, 0, 2812, 2821, 2827, 2813, 2815, 2817, 2824, 2825,
+ 2823, 2818, 2820, 2819, 2820, 2821, 2822, 2822, 2830, 2823,
+
+ 2828, 2825, 2827, 2824, 2829, 2828, 2832, 2831, 2833, 2829,
+ 2832, 2834, 2835, 2837, 2836, 2838, 2825, 2840, 0, 2844,
+ 2830, 2846, 2839, 0, 2834, 2830, 0, 2828, 0, 0,
+ 0, 2829, 2833, 2832, 2835, 2833, 2836, 2839, 2834, 2835,
+ 2837, 2836, 2838, 2840, 2840, 2844, 2844, 2846, 2846, 2839,
+ 2847, 2848, 2849, 2850, 2852, 2853, 2855, 2854, 2857, 2847,
+ 2849, 2852, 2854, 2855, 2853, 2850, 2856, 2848, 2858, 2859,
+ 0, 0, 2866, 2856, 2893, 2858, 2857, 2847, 2848, 2849,
+ 2850, 2852, 2853, 2855, 2854, 2857, 2863, 2865, 2867, 2861,
+ 2860, 2862, 2870, 2856, 2859, 2858, 2859, 2860, 2861, 2866,
+
+ 2862, 2867, 2868, 2869, 2872, 2873, 2893, 2868, 2877, 0,
+ 2865, 2874, 2863, 2863, 2865, 2867, 2861, 2860, 2862, 2870,
+ 2874, 2869, 2872, 2885, 2875, 2876, 0, 2878, 2877, 2868,
+ 2869, 2872, 2873, 2875, 2876, 2877, 2879, 2880, 2874, 2878,
+ 2882, 2884, 2881, 2883, 2886, 2879, 2880, 3013, 2882, 2887,
+ 2885, 2875, 2876, 2881, 2878, 2891, 2887, 2889, 2892, 0,
+ 0, 2884, 2900, 2879, 2880, 2888, 2883, 2882, 2884, 2881,
+ 2883, 2886, 2894, 2899, 2888, 2896, 2887, 2895, 2889, 3013,
+ 2897, 2894, 2891, 2898, 2889, 2892, 2895, 2896, 2897, 2900,
+ 2901, 2902, 2888, 2904, 2903, 2899, 2898, 2901, 2902, 2894,
+
+ 2899, 2903, 2896, 2905, 2895, 2906, 2907, 2897, 2909, 2904,
+ 2898, 2908, 2906, 2911, 2910, 2913, 2915, 2901, 2902, 2905,
+ 2904, 2903, 0, 2913, 0, 2919, 0, 2921, 2907, 2916,
+ 2905, 2917, 2906, 2907, 2915, 2909, 2908, 2916, 2908, 2910,
+ 2911, 2910, 2913, 2915, 2918, 2923, 2917, 2919, 2920, 2921,
+ 2922, 2918, 2919, 2923, 2921, 2920, 2916, 2922, 2917, 2926,
+ 2927, 2928, 2929, 2932, 2930, 2931, 2926, 2933, 2934, 2927,
+ 2935, 2918, 2923, 2941, 2931, 2920, 2930, 2922, 2939, 2940,
+ 2934, 2945, 0, 2933, 2937, 2928, 2926, 2927, 2928, 2929,
+ 2932, 2930, 2931, 2935, 2933, 2934, 2937, 2935, 2938, 2939,
+
+ 2941, 2942, 2940, 2948, 2944, 2939, 2940, 2946, 2945, 2947,
+ 2938, 2937, 2949, 2950, 2946, 2942, 2944, 2947, 2952, 2949,
+ 2953, 2954, 2948, 2955, 2956, 2938, 2958, 2957, 2942, 2964,
+ 2948, 2944, 0, 2952, 2946, 2957, 2947, 2959, 2953, 2949,
+ 2950, 2961, 2960, 2962, 2954, 2952, 2970, 2953, 2954, 2955,
+ 2955, 2956, 2961, 2958, 2957, 2963, 2964, 2966, 2962, 2959,
+ 2960, 2971, 2963, 2966, 2959, 2973, 2972, 2974, 2961, 2960,
+ 2962, 2972, 2970, 2970, 2980, 2975, 2976, 2977, 2978, 2971,
+ 2979, 2974, 2963, 2984, 2966, 2982, 2987, 2989, 2971, 2975,
+ 2976, 3033, 2973, 2972, 2974, 2977, 2978, 2982, 2979, 2981,
+
+ 2991, 2980, 2975, 2976, 2977, 2978, 2981, 2979, 2987, 2989,
+ 2984, 2990, 2982, 2987, 2989, 2992, 2995, 2993, 2994, 2997,
+ 3001, 3002, 2991, 3033, 2990, 2993, 2981, 2991, 2999, 3000,
+ 3003, 2997, 3001, 3007, 2992, 2995, 2994, 3004, 2990, 3006,
+ 3005, 3007, 2992, 2995, 2993, 2994, 2997, 3001, 3002, 3008,
+ 2999, 3000, 3005, 3009, 3011, 2999, 3000, 3003, 3016, 3004,
+ 3007, 3006, 3010, 3011, 3004, 3012, 3006, 3005, 3014, 3015,
+ 3019, 3016, 3018, 3009, 3012, 3021, 3008, 3022, 3020, 3025,
+ 3009, 3011, 3019, 3027, 3010, 3016, 3045, 3028, 0, 3010,
+ 3014, 3015, 3012, 3026, 3030, 3014, 3015, 3019, 3018, 3018,
+
+ 3020, 3025, 3021, 3029, 3022, 3020, 3025, 3026, 3029, 3031,
+ 3027, 3028, 3032, 3045, 3028, 3034, 3030, 0, 3035, 3036,
+ 3026, 3030, 3038, 3040, 3039, 3032, 3037, 3041, 3042, 3040,
+ 3043, 3031, 0, 0, 3038, 3029, 3031, 3049, 3034, 3032,
+ 3035, 3036, 3034, 3039, 3037, 3035, 3036, 3044, 3047, 3038,
+ 3040, 3039, 3043, 3037, 3048, 3051, 3053, 3043, 3054, 3041,
+ 3042, 3049, 3044, 3056, 3049, 3055, 3058, 3067, 3047, 3060,
+ 3051, 3059, 3056, 0, 3044, 3047, 3048, 3057, 3053, 3061,
+ 3054, 3048, 3051, 3053, 3058, 3054, 3062, 3055, 3063, 3059,
+ 3056, 3057, 3055, 3058, 3066, 3060, 3060, 3061, 3059, 3067,
+
+ 3071, 3068, 3075, 3066, 3057, 3072, 3061, 3073, 3071, 3062,
+ 3063, 3074, 3072, 3062, 3073, 3063, 3076, 3077, 3082, 3074,
+ 3081, 3066, 3068, 3079, 3080, 3077, 3085, 3071, 3068, 3075,
+ 3082, 3083, 3072, 3094, 3073, 0, 3076, 3091, 3074, 3095,
+ 3084, 3079, 3080, 3076, 3077, 3082, 3081, 3081, 3086, 3083,
+ 3079, 3080, 3084, 3085, 3088, 3090, 3086, 3092, 3083, 3093,
+ 3091, 3093, 3090, 3097, 3091, 3094, 3088, 3084, 3096, 3098,
+ 3099, 3095, 3097, 3100, 3107, 3086, 3096, 3101, 3104, 3101,
+ 3102, 3088, 3090, 3112, 3092, 3105, 3093, 3108, 0, 0,
+ 3097, 3115, 3100, 3109, 3110, 3096, 3104, 3099, 0, 3105,
+
+ 3100, 3098, 3102, 3110, 3101, 3104, 3107, 3102, 3118, 3111,
+ 3112, 3108, 3105, 3113, 3108, 3116, 3109, 3115, 3115, 3119,
+ 3109, 3110, 3111, 3119, 3116, 3113, 3120, 3121, 3123, 3124,
+ 3126, 3128, 0, 0, 3130, 3118, 3111, 3125, 3131, 3133,
+ 3113, 3130, 3116, 3136, 3133, 3141, 3119, 3132, 3126, 0,
+ 3136, 3134, 3124, 3120, 3121, 3123, 3124, 3126, 3128, 3125,
+ 3131, 3130, 3132, 3139, 3125, 3131, 3134, 3142, 3137, 3138,
+ 3136, 3133, 3141, 3143, 3132, 3137, 3138, 3144, 3134, 3145,
+ 3148, 3151, 3149, 3146, 3152, 0, 3153, 3154, 3151, 3139,
+ 3139, 3149, 3156, 3145, 3142, 3137, 3138, 3146, 3161, 3160,
+
+ 3143, 3144, 3157, 3155, 3144, 3159, 3145, 3148, 3151, 3149,
+ 3146, 3152, 3153, 3153, 3154, 3155, 3157, 3158, 3159, 3156,
+ 3162, 3166, 3165, 3167, 3168, 3161, 3158, 3165, 3170, 3157,
+ 3155, 3160, 3159, 3170, 3171, 3172, 3174, 3175, 3171, 3176,
+ 3177, 3179, 3172, 3162, 3158, 3166, 3168, 3162, 3166, 3173,
+ 3178, 3168, 3178, 3180, 3165, 3167, 3173, 3174, 3183, 3184,
+ 3170, 3171, 3172, 3174, 3179, 3186, 3187, 3190, 3179, 3175,
+ 3191, 3176, 3177, 3189, 3194, 3189, 3173, 3178, 3192, 3192,
+ 3180, 3184, 3193, 3194, 3186, 3183, 3184, 3198, 3192, 0,
+ 3187, 3190, 3186, 3187, 3190, 3196, 3191, 3191, 3197, 3199,
+
+ 3189, 3194, 3196, 3201, 3193, 3192, 3192, 3200, 3203, 3193,
+ 3202, 3197, 3199, 3207, 3198, 3200, 3201, 3208, 3202, 3205,
+ 3209, 3207, 3196, 3206, 3205, 3197, 3199, 3203, 3206, 0,
+ 3201, 3200, 3210, 0, 3200, 3203, 3211, 3202, 3212, 3214,
+ 3207, 3213, 3200, 0, 3208, 3216, 3209, 3209, 3215, 3220,
+ 3214, 3205, 3216, 3217, 3217, 3206, 3218, 3222, 3210, 3210,
+ 3219, 3221, 3211, 3211, 3212, 3212, 3214, 3213, 3213, 3221,
+ 3215, 3220, 3216, 3219, 3218, 3215, 3220, 3223, 3224, 3222,
+ 3217, 3228, 3225, 3218, 3222, 3224, 3226, 3219, 3221, 3225,
+ 3229, 3230, 3232, 3226, 3231, 3223, 3237, 3239, 3235, 3233,
+
+ 3234, 3242, 3245, 0, 3223, 3224, 3231, 3235, 3228, 3225,
+ 3238, 3240, 3250, 3226, 3243, 3230, 3244, 3229, 3230, 3232,
+ 3233, 3231, 3234, 3237, 3239, 3235, 3233, 3234, 3242, 3245,
+ 3238, 3246, 3243, 3240, 3244, 3247, 3249, 3238, 3240, 3250,
+ 3251, 3243, 3252, 3244, 3254, 3249, 3253, 3256, 3257, 3246,
+ 3255, 3258, 3254, 3247, 3260, 3257, 3258, 3262, 3246, 3256,
+ 3261, 3269, 3247, 3249, 3253, 3252, 3255, 3251, 3260, 3252,
+ 3264, 3254, 3268, 3253, 3256, 3257, 3270, 3255, 3261, 3272,
+ 3262, 3260, 3264, 3258, 3262, 3273, 3275, 3261, 3269, 3270,
+ 3274, 3277, 3274, 3278, 3268, 3275, 3279, 3264, 3273, 3268,
+
+ 3280, 3281, 3285, 3270, 3285, 3290, 3272, 3287, 3286, 3292,
+ 0, 3296, 3273, 3275, 3279, 3289, 3281, 3274, 3277, 3297,
+ 3278, 3294, 3289, 3279, 3292, 3287, 3298, 3294, 3281, 3285,
+ 3286, 3299, 3280, 3296, 3287, 3286, 3292, 3290, 3296, 3301,
+ 3305, 3297, 3289, 3302, 3304, 3309, 3297, 3310, 3294, 3299,
+ 3306, 3311, 3298, 3298, 3305, 3312, 3302, 3313, 3299, 3307,
+ 3304, 3301, 3307, 3306, 3313, 3320, 3301, 3305, 3314, 3317,
+ 3302, 3304, 3309, 3312, 3310, 3314, 3321, 3306, 3311, 3315,
+ 3316, 3323, 3312, 3322, 3313, 3307, 3307, 3315, 3316, 3307,
+ 3324, 3317, 3327, 3328, 3325, 3314, 3317, 3320, 3321, 3324,
+
+ 3329, 3331, 3328, 3321, 3333, 3322, 3315, 3316, 3323, 3325,
+ 3322, 3330, 3326, 3330, 3327, 3334, 3341, 3324, 3326, 3327,
+ 3328, 3325, 3335, 3341, 3336, 3337, 3343, 3333, 3331, 3338,
+ 0, 3333, 3329, 3337, 3339, 0, 0, 3334, 3330, 3326,
+ 3345, 3338, 3334, 3341, 3335, 3346, 3339, 3348, 3347, 3335,
+ 3336, 3336, 3337, 3343, 3345, 3349, 3338, 3350, 3351, 3346,
+ 3352, 3339, 3347, 3356, 3353, 3357, 3351, 3345, 3350, 3354,
+ 3348, 3355, 3346, 3349, 3348, 3347, 3354, 3360, 3355, 3352,
+ 3359, 3359, 3349, 3357, 3350, 3351, 3353, 3352, 3358, 3356,
+ 3356, 3353, 3357, 3361, 3362, 3365, 3354, 3358, 3355, 3366,
+
+ 3365, 3368, 3362, 3369, 3360, 3370, 3374, 3359, 3372, 3379,
+ 3384, 0, 3366, 3376, 3372, 3358, 3381, 3387, 3377, 0,
+ 3361, 3362, 3368, 3380, 3376, 3389, 3366, 3365, 3368, 3377,
+ 3369, 3379, 3370, 3374, 3380, 3372, 3379, 3384, 3381, 3385,
+ 3376, 3386, 3396, 3381, 3388, 3377, 3385, 3390, 3388, 3387,
+ 3380, 3392, 3389, 3394, 3393, 3390, 3395, 3398, 3407, 3386,
+ 3401, 3394, 0, 3400, 3402, 3395, 3385, 3393, 3386, 3396,
+ 3400, 3388, 3406, 3406, 3390, 3408, 3409, 3392, 3392, 3405,
+ 3394, 3393, 3411, 3395, 3405, 3407, 3402, 3410, 3409, 3398,
+ 3400, 3402, 3401, 3414, 3410, 3412, 3416, 3413, 3415, 3406,
+
+ 3414, 3411, 3408, 3409, 3416, 3418, 3405, 3419, 0, 3411,
+ 3417, 3412, 3418, 3420, 3410, 3413, 3421, 3422, 3423, 3433,
+ 3414, 3425, 3412, 3416, 3413, 3417, 3424, 3434, 3411, 3422,
+ 3415, 3429, 3418, 3432, 3419, 3420, 3436, 3417, 3435, 3443,
+ 3420, 0, 3423, 3421, 3422, 3423, 3429, 3425, 3425, 3430,
+ 3424, 3433, 3431, 3424, 3434, 3432, 3430, 3437, 3429, 3431,
+ 3432, 3439, 3435, 3440, 3441, 3435, 3437, 3442, 3436, 3445,
+ 3447, 3443, 3444, 3444, 3451, 3442, 3430, 0, 3448, 3431,
+ 3456, 3453, 3444, 3439, 3437, 3447, 3441, 3448, 3439, 3450,
+ 3440, 3441, 3453, 3449, 3442, 3449, 3445, 3447, 3452, 3444,
+
+ 3444, 3451, 3457, 3450, 3454, 3448, 3452, 3456, 3453, 3458,
+ 3459, 3460, 3461, 3462, 3463, 3464, 3450, 3465, 3466, 3467,
+ 3449, 3470, 3454, 3469, 3460, 3452, 3468, 3468, 0, 3457,
+ 3473, 3454, 3459, 3467, 3461, 3465, 3458, 3459, 3460, 3461,
+ 3462, 3463, 3464, 3470, 3465, 3466, 3467, 3474, 3470, 3476,
+ 3477, 3480, 3488, 3468, 3484, 3469, 3482, 3473, 3474, 3480,
+ 3483, 3482, 3484, 3485, 3490, 3483, 3486, 3491, 3485, 3489,
+ 3489, 3494, 3490, 3495, 3474, 3493, 3476, 3477, 3480, 3488,
+ 3491, 3484, 3493, 3482, 3496, 3497, 3499, 3483, 3500, 3494,
+ 3485, 3490, 3486, 3486, 3491, 3499, 3489, 3501, 3494, 3502,
+
+ 3495, 3503, 3493, 3504, 3501, 3508, 3510, 3502, 3497, 3507,
+ 3513, 3496, 3497, 3499, 3512, 3507, 3511, 3516, 3515, 3514,
+ 3500, 0, 0, 3503, 3501, 3504, 3502, 3512, 3503, 3517,
+ 3504, 3521, 3508, 3510, 3514, 3522, 3507, 3515, 3511, 3525,
+ 3519, 3512, 3513, 3511, 3516, 3515, 3514, 3519, 3523, 3526,
+ 3527, 3517, 3524, 3529, 3521, 3523, 3517, 3522, 3521, 3524,
+ 3528, 3525, 3522, 3531, 3526, 3527, 3525, 3519, 0, 3528,
+ 3532, 0, 3544, 0, 3529, 3523, 3526, 3527, 3532, 3524,
+ 3529, 3533, 3531, 3536, 3534, 3537, 3553, 3528, 3533, 3539,
+ 3531, 3534, 3536, 3538, 3538, 3539, 3537, 3532, 3543, 3547,
+
+ 3540, 3542, 3545, 3538, 3544, 3543, 3547, 3548, 3533, 3554,
+ 3536, 3534, 3537, 3553, 3555, 0, 3539, 3561, 3549, 3564,
+ 3538, 3538, 3540, 3542, 3545, 3543, 3547, 3540, 3542, 3545,
+ 3559, 3548, 3549, 3562, 3548, 3563, 3554, 3555, 3566, 3569,
+ 3572, 3555, 3559, 3563, 3561, 3549, 3564, 3570, 3570, 0,
+ 3566, 3571, 3571, 3573, 3573, 3562, 3574, 3559, 3578, 3576,
+ 3562, 3579, 3563, 3583, 3580, 3566, 3569, 3572, 3584, 3577,
+ 3579, 3585, 0, 3588, 0, 3587, 3570, 3580, 3585, 3574,
+ 3571, 3576, 3573, 3574, 3589, 3578, 3576, 3577, 3579, 3594,
+ 3583, 3580, 3586, 3589, 3584, 3584, 3577, 3587, 3585, 3586,
+
+ 3588, 3590, 3587, 3593, 3595, 3593, 3596, 3600, 3590, 3594,
+ 3597, 3589, 3599, 3601, 3602, 3605, 3594, 3604, 3603, 3586,
+ 3606, 3599, 3597, 3607, 3596, 3613, 3609, 3595, 3590, 0,
+ 3593, 3595, 3600, 3596, 3600, 3601, 3603, 3597, 3609, 3599,
+ 3601, 3602, 3605, 3604, 3604, 3603, 3608, 3606, 3610, 3611,
+ 3607, 3608, 3611, 3609, 3612, 3616, 3614, 3613, 3614, 3612,
+ 3615, 3616, 3617, 3618, 3620, 3621, 3619, 3611, 3623, 3624,
+ 3610, 3622, 3615, 3608, 3619, 3610, 3611, 3626, 3629, 3611,
+ 3632, 3630, 3616, 3614, 3617, 3618, 3612, 3615, 3625, 3617,
+ 3618, 3620, 3622, 3619, 3630, 3623, 3624, 3621, 3622, 3626,
+
+ 3625, 3633, 3635, 3637, 3626, 3629, 3638, 3632, 3630, 3639,
+ 3640, 3635, 3642, 3643, 3644, 3625, 3645, 3646, 3646, 3633,
+ 3648, 3649, 3651, 3656, 3652, 3654, 3657, 0, 3633, 3635,
+ 3637, 3653, 3654, 3638, 3659, 3656, 3639, 3640, 3648, 3642,
+ 3643, 3644, 3652, 3645, 3646, 3660, 3653, 3648, 3649, 3651,
+ 3656, 3652, 3654, 3657, 3658, 3661, 3662, 3660, 3653, 3663,
+ 3664, 3659, 3658, 3665, 3667, 3668, 3672, 3680, 3673, 3661,
+ 3674, 3662, 3660, 3675, 3675, 3664, 3667, 3673, 3676, 3679,
+ 3677, 3658, 3661, 3662, 0, 3663, 3663, 3664, 3672, 3677,
+ 3665, 3667, 3668, 3672, 3674, 3673, 3681, 3674, 3682, 3680,
+
+ 3675, 3685, 3683, 3679, 3676, 3676, 3679, 3677, 3684, 3681,
+ 3683, 3687, 3685, 3688, 3691, 3692, 3711, 3684, 3694, 3697,
+ 3682, 3696, 3696, 3681, 3712, 3682, 3697, 3692, 3685, 3683,
+ 3706, 3688, 3687, 3710, 3707, 3684, 3713, 3691, 3687, 3715,
+ 3688, 3691, 3692, 3711, 3694, 3694, 3697, 3710, 3696, 3717,
+ 3718, 3712, 3706, 3717, 3723, 3719, 3725, 3706, 3707, 3721,
+ 3710, 3707, 3720, 3713, 3727, 3728, 3715, 3723, 3718, 3720,
+ 3726, 3721, 3730, 3729, 3726, 3731, 3717, 3718, 3719, 3732,
+ 3727, 3723, 3719, 0, 3730, 3734, 3721, 3728, 3725, 3720,
+ 3739, 3727, 3728, 3732, 3734, 3733, 3735, 3726, 3729, 3730,
+
+ 3729, 3731, 3731, 3733, 3737, 3739, 3732, 3735, 3736, 3738,
+ 3736, 3740, 3734, 3741, 3742, 3743, 3737, 3739, 3744, 3741,
+ 3745, 3746, 3733, 3735, 3747, 3753, 3744, 3738, 3746, 3742,
+ 3752, 3737, 3753, 3740, 3754, 3736, 3738, 3743, 3740, 3756,
+ 3741, 3742, 3743, 3752, 3755, 3744, 3747, 3745, 3746, 3757,
+ 3758, 3747, 3753, 3759, 3760, 3761, 3762, 3752, 3763, 3769,
+ 3764, 3754, 3755, 3756, 3762, 3763, 3756, 3765, 3766, 0,
+ 3773, 3755, 3758, 3767, 3768, 3767, 3757, 3758, 0, 3759,
+ 3759, 3760, 3761, 3762, 3764, 3763, 3768, 3764, 3771, 3765,
+ 3766, 3769, 3770, 3775, 3765, 3766, 3772, 3773, 3776, 3774,
+
+ 3767, 3768, 3777, 3771, 3779, 3770, 3774, 3782, 3781, 3780,
+ 3784, 3785, 3791, 3793, 3787, 3771, 3781, 3787, 3772, 3770,
+ 3775, 3780, 3784, 3772, 3788, 3776, 3774, 3785, 3792, 3777,
+ 3795, 3779, 3793, 3788, 3782, 3781, 3780, 3784, 3785, 3791,
+ 3793, 3787, 3794, 3796, 3797, 3798, 3800, 3801, 0, 3803,
+ 3794, 3788, 3799, 3811, 3792, 3792, 3809, 3797, 3808, 3798,
+ 3799, 3812, 3795, 3809, 3808, 3817, 3811, 3813, 3800, 3794,
+ 3814, 3797, 3798, 3800, 3801, 3796, 3803, 3816, 3813, 3799,
+ 3811, 3818, 3819, 3809, 3816, 3808, 3820, 3817, 3812, 3818,
+ 3821, 3824, 3817, 3814, 3813, 3827, 3819, 3814, 3821, 3822,
+
+ 3820, 3823, 3827, 3828, 3816, 3832, 3829, 3831, 3818, 3819,
+ 0, 3834, 3828, 3820, 3829, 3833, 3840, 3821, 3824, 3835,
+ 3842, 3822, 3827, 3823, 0, 3831, 3822, 3836, 3823, 3837,
+ 3828, 3838, 3832, 3829, 3831, 3843, 3839, 3833, 3844, 3852,
+ 0, 3845, 3833, 3834, 3839, 3835, 3835, 3842, 3840, 3836,
+ 3845, 3837, 3847, 3838, 3836, 3856, 3837, 3843, 3838, 3848,
+ 3849, 3850, 3843, 3839, 3851, 3844, 3853, 3848, 3845, 3850,
+ 3854, 3852, 3851, 3858, 3853, 3847, 3859, 3861, 0, 3847,
+ 3849, 3856, 3856, 0, 3854, 3865, 3848, 3849, 3850, 3860,
+ 3862, 3851, 3860, 3853, 3863, 3858, 3864, 3854, 3862, 3861,
+
+ 3858, 3867, 3863, 3859, 3861, 3866, 3868, 3860, 3870, 3870,
+ 3864, 3865, 3865, 3871, 3872, 3867, 3860, 3862, 3873, 3860,
+ 3874, 3863, 3872, 3864, 3878, 3879, 3875, 3866, 3867, 3868,
+ 3876, 0, 3866, 3868, 3877, 3870, 3880, 3881, 3882, 3871,
+ 3871, 3872, 3877, 3890, 3873, 3873, 3874, 3874, 3875, 3883,
+ 3876, 3878, 3879, 3875, 3884, 3886, 3893, 3876, 3880, 3885,
+ 3887, 3877, 3881, 3880, 3881, 3882, 3894, 3885, 3887, 3883,
+ 3890, 3891, 3895, 3899, 3884, 3897, 3883, 3886, 3893, 3891,
+ 3895, 3884, 3886, 3893, 3896, 3903, 3885, 3887, 3894, 3900,
+ 0, 3902, 3896, 3894, 3904, 3901, 3906, 3900, 3891, 3895,
+
+ 3899, 3897, 3897, 3901, 3907, 3908, 3910, 3913, 3916, 3917,
+ 0, 3896, 3903, 0, 3904, 0, 3900, 3902, 3902, 3914,
+ 0, 3904, 3901, 3906, 0, 3908, 0, 3914, 3910, 3913,
+ 3915, 3907, 3908, 3910, 3913, 3916, 3917, 0, 3915, 0,
+ 0, 0, 0, 0, 0, 0, 3914, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 3915, 3921, 3921,
+ 3921, 3921, 3921, 3921, 3921, 3922, 3922, 3922, 3922, 3922,
+ 3922, 3922, 3923, 3923, 3923, 3923, 3923, 3923, 3923, 3924,
+ 3924, 3924, 3924, 3924, 3924, 3924, 3925, 3925, 3925, 3925,
+ 3925, 3925, 3925, 3926, 3926, 3926, 3926, 3926, 3926, 3926,
+
+ 3927, 3927, 3927, 3927, 3927, 3927, 3927, 3929, 3929, 0,
+ 3929, 3929, 3929, 3929, 3930, 3930, 0, 0, 0, 3930,
+ 3930, 3931, 3931, 0, 0, 3931, 0, 3931, 3932, 0,
+ 0, 0, 0, 0, 3932, 3933, 3933, 0, 0, 0,
+ 3933, 3933, 3934, 0, 0, 0, 0, 0, 3934, 3935,
+ 3935, 0, 3935, 3935, 3935, 3935, 3936, 0, 0, 0,
+ 0, 0, 3936, 3937, 3937, 0, 0, 0, 3937, 3937,
+ 3938, 3938, 0, 3938, 3938, 3938, 3938, 3920, 3920, 3920,
+ 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920,
+ 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920,
+
+ 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920,
+ 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920,
+ 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920,
+ 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920,
+ 3920, 3920, 3920, 3920
} ;
static yy_state_type yy_last_accepting_state;
@@ -4381,7 +4400,7 @@ static void config_end_include(void)
}
#endif
-#line 4382 "<stdout>"
+#line 4401 "<stdout>"
#define YY_NO_INPUT 1
#line 191 "util/configlexer.lex"
#ifndef YY_NO_UNPUT
@@ -4390,9 +4409,9 @@ static void config_end_include(void)
#ifndef YY_NO_INPUT
#define YY_NO_INPUT 1
#endif
-#line 4391 "<stdout>"
+#line 4410 "<stdout>"
-#line 4393 "<stdout>"
+#line 4412 "<stdout>"
#define INITIAL 0
#define quotedstring 1
@@ -4616,7 +4635,7 @@ YY_DECL
{
#line 211 "util/configlexer.lex"
-#line 4617 "<stdout>"
+#line 4636 "<stdout>"
while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */
{
@@ -4649,13 +4668,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 >= 3905 )
+ if ( yy_current_state >= 3921 )
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] != 11109 );
+ while ( yy_base[yy_current_state] != 11178 );
yy_find_action:
yy_act = yy_accept[yy_current_state];
@@ -6154,102 +6173,102 @@ YY_RULE_SETUP
case 293:
YY_RULE_SETUP
#line 516 "util/configlexer.lex"
-{ YDVAR(1, VAR_DISABLE_DNSSEC_LAME_CHECK) }
+{ YDVAR(1, VAR_DNSTAP_SAMPLE_RATE) }
YY_BREAK
case 294:
YY_RULE_SETUP
#line 517 "util/configlexer.lex"
-{ YDVAR(1, VAR_IP_RATELIMIT) }
+{ YDVAR(1, VAR_DISABLE_DNSSEC_LAME_CHECK) }
YY_BREAK
case 295:
YY_RULE_SETUP
#line 518 "util/configlexer.lex"
-{ YDVAR(1, VAR_IP_RATELIMIT_COOKIE) }
+{ YDVAR(1, VAR_IP_RATELIMIT) }
YY_BREAK
case 296:
YY_RULE_SETUP
#line 519 "util/configlexer.lex"
-{ YDVAR(1, VAR_RATELIMIT) }
+{ YDVAR(1, VAR_IP_RATELIMIT_COOKIE) }
YY_BREAK
case 297:
YY_RULE_SETUP
#line 520 "util/configlexer.lex"
-{ YDVAR(1, VAR_IP_RATELIMIT_SLABS) }
+{ YDVAR(1, VAR_RATELIMIT) }
YY_BREAK
case 298:
YY_RULE_SETUP
#line 521 "util/configlexer.lex"
-{ YDVAR(1, VAR_RATELIMIT_SLABS) }
+{ YDVAR(1, VAR_IP_RATELIMIT_SLABS) }
YY_BREAK
case 299:
YY_RULE_SETUP
#line 522 "util/configlexer.lex"
-{ YDVAR(1, VAR_IP_RATELIMIT_SIZE) }
+{ YDVAR(1, VAR_RATELIMIT_SLABS) }
YY_BREAK
case 300:
YY_RULE_SETUP
#line 523 "util/configlexer.lex"
-{ YDVAR(1, VAR_RATELIMIT_SIZE) }
+{ YDVAR(1, VAR_IP_RATELIMIT_SIZE) }
YY_BREAK
case 301:
YY_RULE_SETUP
#line 524 "util/configlexer.lex"
-{ YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) }
+{ YDVAR(1, VAR_RATELIMIT_SIZE) }
YY_BREAK
case 302:
YY_RULE_SETUP
#line 525 "util/configlexer.lex"
-{ YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) }
+{ YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) }
YY_BREAK
case 303:
YY_RULE_SETUP
#line 526 "util/configlexer.lex"
-{ YDVAR(1, VAR_IP_RATELIMIT_FACTOR) }
+{ YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) }
YY_BREAK
case 304:
YY_RULE_SETUP
#line 527 "util/configlexer.lex"
-{ YDVAR(1, VAR_RATELIMIT_FACTOR) }
+{ YDVAR(1, VAR_IP_RATELIMIT_FACTOR) }
YY_BREAK
case 305:
YY_RULE_SETUP
#line 528 "util/configlexer.lex"
-{ YDVAR(1, VAR_IP_RATELIMIT_BACKOFF) }
+{ YDVAR(1, VAR_RATELIMIT_FACTOR) }
YY_BREAK
case 306:
YY_RULE_SETUP
#line 529 "util/configlexer.lex"
-{ YDVAR(1, VAR_RATELIMIT_BACKOFF) }
+{ YDVAR(1, VAR_IP_RATELIMIT_BACKOFF) }
YY_BREAK
case 307:
YY_RULE_SETUP
#line 530 "util/configlexer.lex"
-{ YDVAR(1, VAR_OUTBOUND_MSG_RETRY) }
+{ YDVAR(1, VAR_RATELIMIT_BACKOFF) }
YY_BREAK
case 308:
YY_RULE_SETUP
#line 531 "util/configlexer.lex"
-{ YDVAR(1, VAR_MAX_SENT_COUNT) }
+{ YDVAR(1, VAR_OUTBOUND_MSG_RETRY) }
YY_BREAK
case 309:
YY_RULE_SETUP
#line 532 "util/configlexer.lex"
-{ YDVAR(1, VAR_MAX_QUERY_RESTARTS) }
+{ YDVAR(1, VAR_MAX_SENT_COUNT) }
YY_BREAK
case 310:
YY_RULE_SETUP
#line 533 "util/configlexer.lex"
-{ YDVAR(1, VAR_LOW_RTT) }
+{ YDVAR(1, VAR_MAX_QUERY_RESTARTS) }
YY_BREAK
case 311:
YY_RULE_SETUP
#line 534 "util/configlexer.lex"
-{ YDVAR(1, VAR_FAST_SERVER_NUM) }
+{ YDVAR(1, VAR_LOW_RTT) }
YY_BREAK
case 312:
YY_RULE_SETUP
#line 535 "util/configlexer.lex"
-{ YDVAR(1, VAR_FAST_SERVER_PERMIL) }
+{ YDVAR(1, VAR_FAST_SERVER_NUM) }
YY_BREAK
case 313:
YY_RULE_SETUP
@@ -6264,119 +6283,119 @@ YY_RULE_SETUP
case 315:
YY_RULE_SETUP
#line 538 "util/configlexer.lex"
-{ YDVAR(2, VAR_RESPONSE_IP_TAG) }
+{ YDVAR(1, VAR_FAST_SERVER_PERMIL) }
YY_BREAK
case 316:
YY_RULE_SETUP
#line 539 "util/configlexer.lex"
-{ YDVAR(2, VAR_RESPONSE_IP) }
+{ YDVAR(2, VAR_RESPONSE_IP_TAG) }
YY_BREAK
case 317:
YY_RULE_SETUP
#line 540 "util/configlexer.lex"
-{ YDVAR(2, VAR_RESPONSE_IP_DATA) }
+{ YDVAR(2, VAR_RESPONSE_IP) }
YY_BREAK
case 318:
YY_RULE_SETUP
#line 541 "util/configlexer.lex"
-{ YDVAR(0, VAR_DNSCRYPT) }
+{ YDVAR(2, VAR_RESPONSE_IP_DATA) }
YY_BREAK
case 319:
YY_RULE_SETUP
#line 542 "util/configlexer.lex"
-{ YDVAR(1, VAR_DNSCRYPT_ENABLE) }
+{ YDVAR(0, VAR_DNSCRYPT) }
YY_BREAK
case 320:
YY_RULE_SETUP
#line 543 "util/configlexer.lex"
-{ YDVAR(1, VAR_DNSCRYPT_PORT) }
+{ YDVAR(1, VAR_DNSCRYPT_ENABLE) }
YY_BREAK
case 321:
YY_RULE_SETUP
#line 544 "util/configlexer.lex"
-{ YDVAR(1, VAR_DNSCRYPT_PROVIDER) }
+{ YDVAR(1, VAR_DNSCRYPT_PORT) }
YY_BREAK
case 322:
YY_RULE_SETUP
#line 545 "util/configlexer.lex"
-{ YDVAR(1, VAR_DNSCRYPT_SECRET_KEY) }
+{ YDVAR(1, VAR_DNSCRYPT_PROVIDER) }
YY_BREAK
case 323:
YY_RULE_SETUP
#line 546 "util/configlexer.lex"
-{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT) }
+{ YDVAR(1, VAR_DNSCRYPT_SECRET_KEY) }
YY_BREAK
case 324:
YY_RULE_SETUP
#line 547 "util/configlexer.lex"
-{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT_ROTATED) }
+{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT) }
YY_BREAK
case 325:
YY_RULE_SETUP
#line 548 "util/configlexer.lex"
-{
- YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE) }
+{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT_ROTATED) }
YY_BREAK
case 326:
YY_RULE_SETUP
-#line 550 "util/configlexer.lex"
+#line 549 "util/configlexer.lex"
{
- YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS) }
+ YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE) }
YY_BREAK
case 327:
YY_RULE_SETUP
-#line 552 "util/configlexer.lex"
-{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SIZE) }
+#line 551 "util/configlexer.lex"
+{
+ YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS) }
YY_BREAK
case 328:
YY_RULE_SETUP
#line 553 "util/configlexer.lex"
-{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SLABS) }
+{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SIZE) }
YY_BREAK
case 329:
YY_RULE_SETUP
#line 554 "util/configlexer.lex"
-{ YDVAR(1, VAR_PAD_RESPONSES) }
+{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SLABS) }
YY_BREAK
case 330:
YY_RULE_SETUP
#line 555 "util/configlexer.lex"
-{ YDVAR(1, VAR_PAD_RESPONSES_BLOCK_SIZE) }
+{ YDVAR(1, VAR_PAD_RESPONSES) }
YY_BREAK
case 331:
YY_RULE_SETUP
#line 556 "util/configlexer.lex"
-{ YDVAR(1, VAR_PAD_QUERIES) }
+{ YDVAR(1, VAR_PAD_RESPONSES_BLOCK_SIZE) }
YY_BREAK
case 332:
YY_RULE_SETUP
#line 557 "util/configlexer.lex"
-{ YDVAR(1, VAR_PAD_QUERIES_BLOCK_SIZE) }
+{ YDVAR(1, VAR_PAD_QUERIES) }
YY_BREAK
case 333:
YY_RULE_SETUP
#line 558 "util/configlexer.lex"
-{ YDVAR(1, VAR_IPSECMOD_ENABLED) }
+{ YDVAR(1, VAR_PAD_QUERIES_BLOCK_SIZE) }
YY_BREAK
case 334:
YY_RULE_SETUP
#line 559 "util/configlexer.lex"
-{ YDVAR(1, VAR_IPSECMOD_IGNORE_BOGUS) }
+{ YDVAR(1, VAR_IPSECMOD_ENABLED) }
YY_BREAK
case 335:
YY_RULE_SETUP
#line 560 "util/configlexer.lex"
-{ YDVAR(1, VAR_IPSECMOD_HOOK) }
+{ YDVAR(1, VAR_IPSECMOD_IGNORE_BOGUS) }
YY_BREAK
case 336:
YY_RULE_SETUP
#line 561 "util/configlexer.lex"
-{ YDVAR(1, VAR_IPSECMOD_MAX_TTL) }
+{ YDVAR(1, VAR_IPSECMOD_HOOK) }
YY_BREAK
case 337:
YY_RULE_SETUP
#line 562 "util/configlexer.lex"
-{ YDVAR(1, VAR_IPSECMOD_WHITELIST) }
+{ YDVAR(1, VAR_IPSECMOD_MAX_TTL) }
YY_BREAK
case 338:
YY_RULE_SETUP
@@ -6386,163 +6405,173 @@ YY_RULE_SETUP
case 339:
YY_RULE_SETUP
#line 564 "util/configlexer.lex"
-{ YDVAR(1, VAR_IPSECMOD_STRICT) }
+{ YDVAR(1, VAR_IPSECMOD_WHITELIST) }
YY_BREAK
case 340:
YY_RULE_SETUP
#line 565 "util/configlexer.lex"
-{ YDVAR(0, VAR_CACHEDB) }
+{ YDVAR(1, VAR_IPSECMOD_STRICT) }
YY_BREAK
case 341:
YY_RULE_SETUP
#line 566 "util/configlexer.lex"
-{ YDVAR(1, VAR_CACHEDB_BACKEND) }
+{ YDVAR(0, VAR_CACHEDB) }
YY_BREAK
case 342:
YY_RULE_SETUP
#line 567 "util/configlexer.lex"
-{ YDVAR(1, VAR_CACHEDB_SECRETSEED) }
+{ YDVAR(1, VAR_CACHEDB_BACKEND) }
YY_BREAK
case 343:
YY_RULE_SETUP
#line 568 "util/configlexer.lex"
-{ YDVAR(1, VAR_CACHEDB_NO_STORE) }
+{ YDVAR(1, VAR_CACHEDB_SECRETSEED) }
YY_BREAK
case 344:
YY_RULE_SETUP
#line 569 "util/configlexer.lex"
-{ YDVAR(1, VAR_CACHEDB_CHECK_WHEN_SERVE_EXPIRED) }
+{ YDVAR(1, VAR_CACHEDB_NO_STORE) }
YY_BREAK
case 345:
YY_RULE_SETUP
#line 570 "util/configlexer.lex"
-{ YDVAR(1, VAR_CACHEDB_REDISHOST) }
+{ YDVAR(1, VAR_CACHEDB_CHECK_WHEN_SERVE_EXPIRED) }
YY_BREAK
case 346:
YY_RULE_SETUP
#line 571 "util/configlexer.lex"
-{ YDVAR(1, VAR_CACHEDB_REDISPORT) }
+{ YDVAR(1, VAR_CACHEDB_REDISHOST) }
YY_BREAK
case 347:
YY_RULE_SETUP
#line 572 "util/configlexer.lex"
-{ YDVAR(1, VAR_CACHEDB_REDISPATH) }
+{ YDVAR(1, VAR_CACHEDB_REDISPORT) }
YY_BREAK
case 348:
YY_RULE_SETUP
#line 573 "util/configlexer.lex"
-{ YDVAR(1, VAR_CACHEDB_REDISPASSWORD) }
+{ YDVAR(1, VAR_CACHEDB_REDISPATH) }
YY_BREAK
case 349:
YY_RULE_SETUP
#line 574 "util/configlexer.lex"
-{ YDVAR(1, VAR_CACHEDB_REDISTIMEOUT) }
+{ YDVAR(1, VAR_CACHEDB_REDISPASSWORD) }
YY_BREAK
case 350:
YY_RULE_SETUP
#line 575 "util/configlexer.lex"
-{ YDVAR(1, VAR_CACHEDB_REDISEXPIRERECORDS) }
+{ YDVAR(1, VAR_CACHEDB_REDISTIMEOUT) }
YY_BREAK
case 351:
YY_RULE_SETUP
#line 576 "util/configlexer.lex"
-{ YDVAR(1, VAR_CACHEDB_REDISLOGICALDB) }
+{ YDVAR(1, VAR_CACHEDB_REDISEXPIRERECORDS) }
YY_BREAK
case 352:
YY_RULE_SETUP
#line 577 "util/configlexer.lex"
-{ YDVAR(0, VAR_IPSET) }
+{ YDVAR(1, VAR_CACHEDB_REDISLOGICALDB) }
YY_BREAK
case 353:
YY_RULE_SETUP
#line 578 "util/configlexer.lex"
-{ YDVAR(1, VAR_IPSET_NAME_V4) }
+{ YDVAR(0, VAR_IPSET) }
YY_BREAK
case 354:
YY_RULE_SETUP
#line 579 "util/configlexer.lex"
-{ YDVAR(1, VAR_IPSET_NAME_V6) }
+{ YDVAR(1, VAR_IPSET_NAME_V4) }
YY_BREAK
case 355:
YY_RULE_SETUP
#line 580 "util/configlexer.lex"
-{ YDVAR(1, VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM) }
+{ YDVAR(1, VAR_IPSET_NAME_V6) }
YY_BREAK
case 356:
YY_RULE_SETUP
#line 581 "util/configlexer.lex"
-{ YDVAR(2, VAR_TCP_CONNECTION_LIMIT) }
+{ YDVAR(1, VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM) }
YY_BREAK
case 357:
YY_RULE_SETUP
#line 582 "util/configlexer.lex"
-{ YDVAR(1, VAR_ANSWER_COOKIE ) }
+{ YDVAR(2, VAR_TCP_CONNECTION_LIMIT) }
YY_BREAK
case 358:
YY_RULE_SETUP
#line 583 "util/configlexer.lex"
-{ YDVAR(1, VAR_COOKIE_SECRET) }
+{ YDVAR(1, VAR_ANSWER_COOKIE ) }
YY_BREAK
case 359:
YY_RULE_SETUP
#line 584 "util/configlexer.lex"
-{ YDVAR(2, VAR_EDNS_CLIENT_STRING) }
+{ YDVAR(1, VAR_COOKIE_SECRET) }
YY_BREAK
case 360:
YY_RULE_SETUP
#line 585 "util/configlexer.lex"
-{ YDVAR(1, VAR_EDNS_CLIENT_STRING_OPCODE) }
+{ YDVAR(1, VAR_COOKIE_SECRET_FILE) }
YY_BREAK
case 361:
YY_RULE_SETUP
#line 586 "util/configlexer.lex"
-{ YDVAR(1, VAR_NSID ) }
+{ YDVAR(2, VAR_EDNS_CLIENT_STRING) }
YY_BREAK
case 362:
YY_RULE_SETUP
#line 587 "util/configlexer.lex"
-{ YDVAR(1, VAR_EDE ) }
+{ YDVAR(1, VAR_EDNS_CLIENT_STRING_OPCODE) }
YY_BREAK
case 363:
YY_RULE_SETUP
#line 588 "util/configlexer.lex"
-{ YDVAR(1, VAR_PROXY_PROTOCOL_PORT) }
+{ YDVAR(1, VAR_NSID ) }
YY_BREAK
case 364:
-/* rule 364 can match eol */
YY_RULE_SETUP
#line 589 "util/configlexer.lex"
+{ YDVAR(1, VAR_EDE ) }
+ YY_BREAK
+case 365:
+YY_RULE_SETUP
+#line 590 "util/configlexer.lex"
+{ YDVAR(1, VAR_PROXY_PROTOCOL_PORT) }
+ YY_BREAK
+case 366:
+/* rule 366 can match eol */
+YY_RULE_SETUP
+#line 591 "util/configlexer.lex"
{ LEXOUT(("NL\n")); cfg_parser->line++; }
YY_BREAK
/* Quoted strings. Strip leading and ending quotes */
-case 365:
+case 367:
YY_RULE_SETUP
-#line 592 "util/configlexer.lex"
+#line 594 "util/configlexer.lex"
{ BEGIN(quotedstring); LEXOUT(("QS ")); }
YY_BREAK
case YY_STATE_EOF(quotedstring):
-#line 593 "util/configlexer.lex"
+#line 595 "util/configlexer.lex"
{
yyerror("EOF inside quoted string");
if(--num_args == 0) { BEGIN(INITIAL); }
else { BEGIN(val); }
}
YY_BREAK
-case 366:
+case 368:
YY_RULE_SETUP
-#line 598 "util/configlexer.lex"
+#line 600 "util/configlexer.lex"
{ LEXOUT(("STR(%s) ", yytext)); yymore(); }
YY_BREAK
-case 367:
-/* rule 367 can match eol */
+case 369:
+/* rule 369 can match eol */
YY_RULE_SETUP
-#line 599 "util/configlexer.lex"
+#line 601 "util/configlexer.lex"
{ yyerror("newline inside quoted string, no end \"");
cfg_parser->line++; BEGIN(INITIAL); }
YY_BREAK
-case 368:
+case 370:
YY_RULE_SETUP
-#line 601 "util/configlexer.lex"
+#line 603 "util/configlexer.lex"
{
LEXOUT(("QE "));
if(--num_args == 0) { BEGIN(INITIAL); }
@@ -6555,34 +6584,34 @@ YY_RULE_SETUP
}
YY_BREAK
/* Single Quoted strings. Strip leading and ending quotes */
-case 369:
+case 371:
YY_RULE_SETUP
-#line 613 "util/configlexer.lex"
+#line 615 "util/configlexer.lex"
{ BEGIN(singlequotedstr); LEXOUT(("SQS ")); }
YY_BREAK
case YY_STATE_EOF(singlequotedstr):
-#line 614 "util/configlexer.lex"
+#line 616 "util/configlexer.lex"
{
yyerror("EOF inside quoted string");
if(--num_args == 0) { BEGIN(INITIAL); }
else { BEGIN(val); }
}
YY_BREAK
-case 370:
+case 372:
YY_RULE_SETUP
-#line 619 "util/configlexer.lex"
+#line 621 "util/configlexer.lex"
{ LEXOUT(("STR(%s) ", yytext)); yymore(); }
YY_BREAK
-case 371:
-/* rule 371 can match eol */
+case 373:
+/* rule 373 can match eol */
YY_RULE_SETUP
-#line 620 "util/configlexer.lex"
+#line 622 "util/configlexer.lex"
{ yyerror("newline inside quoted string, no end '");
cfg_parser->line++; BEGIN(INITIAL); }
YY_BREAK
-case 372:
+case 374:
YY_RULE_SETUP
-#line 622 "util/configlexer.lex"
+#line 624 "util/configlexer.lex"
{
LEXOUT(("SQE "));
if(--num_args == 0) { BEGIN(INITIAL); }
@@ -6595,38 +6624,38 @@ YY_RULE_SETUP
}
YY_BREAK
/* include: directive */
-case 373:
+case 375:
YY_RULE_SETUP
-#line 634 "util/configlexer.lex"
+#line 636 "util/configlexer.lex"
{
LEXOUT(("v(%s) ", yytext)); inc_prev = YYSTATE; BEGIN(include); }
YY_BREAK
case YY_STATE_EOF(include):
-#line 636 "util/configlexer.lex"
+#line 638 "util/configlexer.lex"
{
yyerror("EOF inside include directive");
BEGIN(inc_prev);
}
YY_BREAK
-case 374:
+case 376:
YY_RULE_SETUP
-#line 640 "util/configlexer.lex"
+#line 642 "util/configlexer.lex"
{ LEXOUT(("ISP ")); /* ignore */ }
YY_BREAK
-case 375:
-/* rule 375 can match eol */
+case 377:
+/* rule 377 can match eol */
YY_RULE_SETUP
-#line 641 "util/configlexer.lex"
+#line 643 "util/configlexer.lex"
{ LEXOUT(("NL\n")); cfg_parser->line++;}
YY_BREAK
-case 376:
+case 378:
YY_RULE_SETUP
-#line 642 "util/configlexer.lex"
+#line 644 "util/configlexer.lex"
{ LEXOUT(("IQS ")); BEGIN(include_quoted); }
YY_BREAK
-case 377:
+case 379:
YY_RULE_SETUP
-#line 643 "util/configlexer.lex"
+#line 645 "util/configlexer.lex"
{
LEXOUT(("Iunquotedstr(%s) ", yytext));
config_start_include_glob(yytext, 0);
@@ -6634,27 +6663,27 @@ YY_RULE_SETUP
}
YY_BREAK
case YY_STATE_EOF(include_quoted):
-#line 648 "util/configlexer.lex"
+#line 650 "util/configlexer.lex"
{
yyerror("EOF inside quoted string");
BEGIN(inc_prev);
}
YY_BREAK
-case 378:
+case 380:
YY_RULE_SETUP
-#line 652 "util/configlexer.lex"
+#line 654 "util/configlexer.lex"
{ LEXOUT(("ISTR(%s) ", yytext)); yymore(); }
YY_BREAK
-case 379:
-/* rule 379 can match eol */
+case 381:
+/* rule 381 can match eol */
YY_RULE_SETUP
-#line 653 "util/configlexer.lex"
+#line 655 "util/configlexer.lex"
{ yyerror("newline before \" in include name");
cfg_parser->line++; BEGIN(inc_prev); }
YY_BREAK
-case 380:
+case 382:
YY_RULE_SETUP
-#line 655 "util/configlexer.lex"
+#line 657 "util/configlexer.lex"
{
LEXOUT(("IQE "));
yytext[yyleng - 1] = '\0';
@@ -6664,7 +6693,7 @@ YY_RULE_SETUP
YY_BREAK
case YY_STATE_EOF(INITIAL):
case YY_STATE_EOF(val):
-#line 661 "util/configlexer.lex"
+#line 663 "util/configlexer.lex"
{
LEXOUT(("LEXEOF "));
yy_set_bol(1); /* Set beginning of line, so "^" rules match. */
@@ -6679,39 +6708,39 @@ case YY_STATE_EOF(val):
}
YY_BREAK
/* include-toplevel: directive */
-case 381:
+case 383:
YY_RULE_SETUP
-#line 675 "util/configlexer.lex"
+#line 677 "util/configlexer.lex"
{
LEXOUT(("v(%s) ", yytext)); inc_prev = YYSTATE; BEGIN(include_toplevel);
}
YY_BREAK
case YY_STATE_EOF(include_toplevel):
-#line 678 "util/configlexer.lex"
+#line 680 "util/configlexer.lex"
{
yyerror("EOF inside include_toplevel directive");
BEGIN(inc_prev);
}
YY_BREAK
-case 382:
+case 384:
YY_RULE_SETUP
-#line 682 "util/configlexer.lex"
+#line 684 "util/configlexer.lex"
{ LEXOUT(("ITSP ")); /* ignore */ }
YY_BREAK
-case 383:
-/* rule 383 can match eol */
+case 385:
+/* rule 385 can match eol */
YY_RULE_SETUP
-#line 683 "util/configlexer.lex"
+#line 685 "util/configlexer.lex"
{ LEXOUT(("NL\n")); cfg_parser->line++; }
YY_BREAK
-case 384:
+case 386:
YY_RULE_SETUP
-#line 684 "util/configlexer.lex"
+#line 686 "util/configlexer.lex"
{ LEXOUT(("ITQS ")); BEGIN(include_toplevel_quoted); }
YY_BREAK
-case 385:
+case 387:
YY_RULE_SETUP
-#line 685 "util/configlexer.lex"
+#line 687 "util/configlexer.lex"
{
LEXOUT(("ITunquotedstr(%s) ", yytext));
config_start_include_glob(yytext, 1);
@@ -6720,29 +6749,29 @@ YY_RULE_SETUP
}
YY_BREAK
case YY_STATE_EOF(include_toplevel_quoted):
-#line 691 "util/configlexer.lex"
+#line 693 "util/configlexer.lex"
{
yyerror("EOF inside quoted string");
BEGIN(inc_prev);
}
YY_BREAK
-case 386:
+case 388:
YY_RULE_SETUP
-#line 695 "util/configlexer.lex"
+#line 697 "util/configlexer.lex"
{ LEXOUT(("ITSTR(%s) ", yytext)); yymore(); }
YY_BREAK
-case 387:
-/* rule 387 can match eol */
+case 389:
+/* rule 389 can match eol */
YY_RULE_SETUP
-#line 696 "util/configlexer.lex"
+#line 698 "util/configlexer.lex"
{
yyerror("newline before \" in include name");
cfg_parser->line++; BEGIN(inc_prev);
}
YY_BREAK
-case 388:
+case 390:
YY_RULE_SETUP
-#line 700 "util/configlexer.lex"
+#line 702 "util/configlexer.lex"
{
LEXOUT(("ITQE "));
yytext[yyleng - 1] = '\0';
@@ -6751,33 +6780,33 @@ YY_RULE_SETUP
return (VAR_FORCE_TOPLEVEL);
}
YY_BREAK
-case 389:
+case 391:
YY_RULE_SETUP
-#line 708 "util/configlexer.lex"
+#line 710 "util/configlexer.lex"
{ LEXOUT(("unquotedstr(%s) ", yytext));
if(--num_args == 0) { BEGIN(INITIAL); }
yylval.str = strdup(yytext); return STRING_ARG; }
YY_BREAK
-case 390:
+case 392:
YY_RULE_SETUP
-#line 712 "util/configlexer.lex"
+#line 714 "util/configlexer.lex"
{
ub_c_error_msg("unknown keyword '%s'", yytext);
}
YY_BREAK
-case 391:
+case 393:
YY_RULE_SETUP
-#line 716 "util/configlexer.lex"
+#line 718 "util/configlexer.lex"
{
ub_c_error_msg("stray '%s'", yytext);
}
YY_BREAK
-case 392:
+case 394:
YY_RULE_SETUP
-#line 720 "util/configlexer.lex"
+#line 722 "util/configlexer.lex"
ECHO;
YY_BREAK
-#line 6778 "<stdout>"
+#line 6807 "<stdout>"
case YY_END_OF_BUFFER:
{
@@ -7072,7 +7101,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 >= 3905 )
+ if ( yy_current_state >= 3921 )
yy_c = yy_meta[yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
@@ -7100,11 +7129,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 >= 3905 )
+ if ( yy_current_state >= 3921 )
yy_c = yy_meta[yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
- yy_is_jam = (yy_current_state == 3904);
+ yy_is_jam = (yy_current_state == 3920);
return yy_is_jam ? 0 : yy_current_state;
}
@@ -7743,6 +7772,6 @@ void yyfree (void * ptr )
#define YYTABLES_NAME "yytables"
-#line 720 "util/configlexer.lex"
+#line 722 "util/configlexer.lex"
diff --git a/util/configlexer.lex b/util/configlexer.lex
index 7ae1b8c38f46..cd506209229a 100644
--- a/util/configlexer.lex
+++ b/util/configlexer.lex
@@ -513,6 +513,7 @@ dnstap-log-forwarder-query-messages{COLON} {
YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) }
dnstap-log-forwarder-response-messages{COLON} {
YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) }
+dnstap-sample-rate { YDVAR(1, VAR_DNSTAP_SAMPLE_RATE) }
disable-dnssec-lame-check{COLON} { YDVAR(1, VAR_DISABLE_DNSSEC_LAME_CHECK) }
ip-ratelimit{COLON} { YDVAR(1, VAR_IP_RATELIMIT) }
ip-ratelimit-cookie{COLON} { YDVAR(1, VAR_IP_RATELIMIT_COOKIE) }
@@ -581,6 +582,7 @@ udp-upstream-without-downstream{COLON} { YDVAR(1, VAR_UDP_UPSTREAM_WITHOUT_DOWNS
tcp-connection-limit{COLON} { YDVAR(2, VAR_TCP_CONNECTION_LIMIT) }
answer-cookie{COLON} { YDVAR(1, VAR_ANSWER_COOKIE ) }
cookie-secret{COLON} { YDVAR(1, VAR_COOKIE_SECRET) }
+cookie-secret-file{COLON} { YDVAR(1, VAR_COOKIE_SECRET_FILE) }
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 ) }
diff --git a/util/configparser.c b/util/configparser.c
index 5841490f2fcc..170b0d2f4559 100644
--- a/util/configparser.c
+++ b/util/configparser.c
@@ -318,553 +318,557 @@ enum yysymbol_kind_t
YYSYMBOL_VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES = 189, /* VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES */
YYSYMBOL_VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES = 190, /* VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES */
YYSYMBOL_VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES = 191, /* VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES */
- YYSYMBOL_VAR_RESPONSE_IP_TAG = 192, /* VAR_RESPONSE_IP_TAG */
- YYSYMBOL_VAR_RESPONSE_IP = 193, /* VAR_RESPONSE_IP */
- YYSYMBOL_VAR_RESPONSE_IP_DATA = 194, /* VAR_RESPONSE_IP_DATA */
- YYSYMBOL_VAR_HARDEN_ALGO_DOWNGRADE = 195, /* VAR_HARDEN_ALGO_DOWNGRADE */
- YYSYMBOL_VAR_IP_TRANSPARENT = 196, /* VAR_IP_TRANSPARENT */
- YYSYMBOL_VAR_IP_DSCP = 197, /* VAR_IP_DSCP */
- YYSYMBOL_VAR_DISABLE_DNSSEC_LAME_CHECK = 198, /* VAR_DISABLE_DNSSEC_LAME_CHECK */
- YYSYMBOL_VAR_IP_RATELIMIT = 199, /* VAR_IP_RATELIMIT */
- YYSYMBOL_VAR_IP_RATELIMIT_SLABS = 200, /* VAR_IP_RATELIMIT_SLABS */
- YYSYMBOL_VAR_IP_RATELIMIT_SIZE = 201, /* VAR_IP_RATELIMIT_SIZE */
- YYSYMBOL_VAR_RATELIMIT = 202, /* VAR_RATELIMIT */
- YYSYMBOL_VAR_RATELIMIT_SLABS = 203, /* VAR_RATELIMIT_SLABS */
- YYSYMBOL_VAR_RATELIMIT_SIZE = 204, /* VAR_RATELIMIT_SIZE */
- YYSYMBOL_VAR_OUTBOUND_MSG_RETRY = 205, /* VAR_OUTBOUND_MSG_RETRY */
- YYSYMBOL_VAR_MAX_SENT_COUNT = 206, /* VAR_MAX_SENT_COUNT */
- YYSYMBOL_VAR_MAX_QUERY_RESTARTS = 207, /* VAR_MAX_QUERY_RESTARTS */
- YYSYMBOL_VAR_RATELIMIT_FOR_DOMAIN = 208, /* VAR_RATELIMIT_FOR_DOMAIN */
- YYSYMBOL_VAR_RATELIMIT_BELOW_DOMAIN = 209, /* VAR_RATELIMIT_BELOW_DOMAIN */
- YYSYMBOL_VAR_IP_RATELIMIT_FACTOR = 210, /* VAR_IP_RATELIMIT_FACTOR */
- YYSYMBOL_VAR_RATELIMIT_FACTOR = 211, /* VAR_RATELIMIT_FACTOR */
- YYSYMBOL_VAR_IP_RATELIMIT_BACKOFF = 212, /* VAR_IP_RATELIMIT_BACKOFF */
- YYSYMBOL_VAR_RATELIMIT_BACKOFF = 213, /* VAR_RATELIMIT_BACKOFF */
- YYSYMBOL_VAR_SEND_CLIENT_SUBNET = 214, /* VAR_SEND_CLIENT_SUBNET */
- YYSYMBOL_VAR_CLIENT_SUBNET_ZONE = 215, /* VAR_CLIENT_SUBNET_ZONE */
- YYSYMBOL_VAR_CLIENT_SUBNET_ALWAYS_FORWARD = 216, /* VAR_CLIENT_SUBNET_ALWAYS_FORWARD */
- YYSYMBOL_VAR_CLIENT_SUBNET_OPCODE = 217, /* VAR_CLIENT_SUBNET_OPCODE */
- YYSYMBOL_VAR_MAX_CLIENT_SUBNET_IPV4 = 218, /* VAR_MAX_CLIENT_SUBNET_IPV4 */
- YYSYMBOL_VAR_MAX_CLIENT_SUBNET_IPV6 = 219, /* VAR_MAX_CLIENT_SUBNET_IPV6 */
- YYSYMBOL_VAR_MIN_CLIENT_SUBNET_IPV4 = 220, /* VAR_MIN_CLIENT_SUBNET_IPV4 */
- YYSYMBOL_VAR_MIN_CLIENT_SUBNET_IPV6 = 221, /* VAR_MIN_CLIENT_SUBNET_IPV6 */
- YYSYMBOL_VAR_MAX_ECS_TREE_SIZE_IPV4 = 222, /* VAR_MAX_ECS_TREE_SIZE_IPV4 */
- YYSYMBOL_VAR_MAX_ECS_TREE_SIZE_IPV6 = 223, /* VAR_MAX_ECS_TREE_SIZE_IPV6 */
- YYSYMBOL_VAR_CAPS_WHITELIST = 224, /* VAR_CAPS_WHITELIST */
- YYSYMBOL_VAR_CACHE_MAX_NEGATIVE_TTL = 225, /* VAR_CACHE_MAX_NEGATIVE_TTL */
- YYSYMBOL_VAR_PERMIT_SMALL_HOLDDOWN = 226, /* VAR_PERMIT_SMALL_HOLDDOWN */
- YYSYMBOL_VAR_CACHE_MIN_NEGATIVE_TTL = 227, /* VAR_CACHE_MIN_NEGATIVE_TTL */
- YYSYMBOL_VAR_QNAME_MINIMISATION = 228, /* VAR_QNAME_MINIMISATION */
- YYSYMBOL_VAR_QNAME_MINIMISATION_STRICT = 229, /* VAR_QNAME_MINIMISATION_STRICT */
- YYSYMBOL_VAR_IP_FREEBIND = 230, /* VAR_IP_FREEBIND */
- YYSYMBOL_VAR_DEFINE_TAG = 231, /* VAR_DEFINE_TAG */
- YYSYMBOL_VAR_LOCAL_ZONE_TAG = 232, /* VAR_LOCAL_ZONE_TAG */
- YYSYMBOL_VAR_ACCESS_CONTROL_TAG = 233, /* VAR_ACCESS_CONTROL_TAG */
- YYSYMBOL_VAR_LOCAL_ZONE_OVERRIDE = 234, /* VAR_LOCAL_ZONE_OVERRIDE */
- YYSYMBOL_VAR_ACCESS_CONTROL_TAG_ACTION = 235, /* VAR_ACCESS_CONTROL_TAG_ACTION */
- YYSYMBOL_VAR_ACCESS_CONTROL_TAG_DATA = 236, /* VAR_ACCESS_CONTROL_TAG_DATA */
- YYSYMBOL_VAR_VIEW = 237, /* VAR_VIEW */
- YYSYMBOL_VAR_ACCESS_CONTROL_VIEW = 238, /* VAR_ACCESS_CONTROL_VIEW */
- YYSYMBOL_VAR_VIEW_FIRST = 239, /* VAR_VIEW_FIRST */
- YYSYMBOL_VAR_SERVE_EXPIRED = 240, /* VAR_SERVE_EXPIRED */
- YYSYMBOL_VAR_SERVE_EXPIRED_TTL = 241, /* VAR_SERVE_EXPIRED_TTL */
- YYSYMBOL_VAR_SERVE_EXPIRED_TTL_RESET = 242, /* VAR_SERVE_EXPIRED_TTL_RESET */
- YYSYMBOL_VAR_SERVE_EXPIRED_REPLY_TTL = 243, /* VAR_SERVE_EXPIRED_REPLY_TTL */
- YYSYMBOL_VAR_SERVE_EXPIRED_CLIENT_TIMEOUT = 244, /* VAR_SERVE_EXPIRED_CLIENT_TIMEOUT */
- YYSYMBOL_VAR_EDE_SERVE_EXPIRED = 245, /* VAR_EDE_SERVE_EXPIRED */
- YYSYMBOL_VAR_SERVE_ORIGINAL_TTL = 246, /* VAR_SERVE_ORIGINAL_TTL */
- YYSYMBOL_VAR_FAKE_DSA = 247, /* VAR_FAKE_DSA */
- YYSYMBOL_VAR_FAKE_SHA1 = 248, /* VAR_FAKE_SHA1 */
- YYSYMBOL_VAR_LOG_IDENTITY = 249, /* VAR_LOG_IDENTITY */
- YYSYMBOL_VAR_HIDE_TRUSTANCHOR = 250, /* VAR_HIDE_TRUSTANCHOR */
- YYSYMBOL_VAR_HIDE_HTTP_USER_AGENT = 251, /* VAR_HIDE_HTTP_USER_AGENT */
- YYSYMBOL_VAR_HTTP_USER_AGENT = 252, /* VAR_HTTP_USER_AGENT */
- YYSYMBOL_VAR_TRUST_ANCHOR_SIGNALING = 253, /* VAR_TRUST_ANCHOR_SIGNALING */
- YYSYMBOL_VAR_AGGRESSIVE_NSEC = 254, /* VAR_AGGRESSIVE_NSEC */
- YYSYMBOL_VAR_USE_SYSTEMD = 255, /* VAR_USE_SYSTEMD */
- YYSYMBOL_VAR_SHM_ENABLE = 256, /* VAR_SHM_ENABLE */
- YYSYMBOL_VAR_SHM_KEY = 257, /* VAR_SHM_KEY */
- YYSYMBOL_VAR_ROOT_KEY_SENTINEL = 258, /* VAR_ROOT_KEY_SENTINEL */
- YYSYMBOL_VAR_DNSCRYPT = 259, /* VAR_DNSCRYPT */
- YYSYMBOL_VAR_DNSCRYPT_ENABLE = 260, /* VAR_DNSCRYPT_ENABLE */
- YYSYMBOL_VAR_DNSCRYPT_PORT = 261, /* VAR_DNSCRYPT_PORT */
- YYSYMBOL_VAR_DNSCRYPT_PROVIDER = 262, /* VAR_DNSCRYPT_PROVIDER */
- YYSYMBOL_VAR_DNSCRYPT_SECRET_KEY = 263, /* VAR_DNSCRYPT_SECRET_KEY */
- YYSYMBOL_VAR_DNSCRYPT_PROVIDER_CERT = 264, /* VAR_DNSCRYPT_PROVIDER_CERT */
- YYSYMBOL_VAR_DNSCRYPT_PROVIDER_CERT_ROTATED = 265, /* VAR_DNSCRYPT_PROVIDER_CERT_ROTATED */
- YYSYMBOL_VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 266, /* VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE */
- YYSYMBOL_VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 267, /* VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS */
- YYSYMBOL_VAR_DNSCRYPT_NONCE_CACHE_SIZE = 268, /* VAR_DNSCRYPT_NONCE_CACHE_SIZE */
- YYSYMBOL_VAR_DNSCRYPT_NONCE_CACHE_SLABS = 269, /* VAR_DNSCRYPT_NONCE_CACHE_SLABS */
- YYSYMBOL_VAR_PAD_RESPONSES = 270, /* VAR_PAD_RESPONSES */
- YYSYMBOL_VAR_PAD_RESPONSES_BLOCK_SIZE = 271, /* VAR_PAD_RESPONSES_BLOCK_SIZE */
- YYSYMBOL_VAR_PAD_QUERIES = 272, /* VAR_PAD_QUERIES */
- YYSYMBOL_VAR_PAD_QUERIES_BLOCK_SIZE = 273, /* VAR_PAD_QUERIES_BLOCK_SIZE */
- YYSYMBOL_VAR_IPSECMOD_ENABLED = 274, /* VAR_IPSECMOD_ENABLED */
- YYSYMBOL_VAR_IPSECMOD_HOOK = 275, /* VAR_IPSECMOD_HOOK */
- YYSYMBOL_VAR_IPSECMOD_IGNORE_BOGUS = 276, /* VAR_IPSECMOD_IGNORE_BOGUS */
- YYSYMBOL_VAR_IPSECMOD_MAX_TTL = 277, /* VAR_IPSECMOD_MAX_TTL */
- YYSYMBOL_VAR_IPSECMOD_WHITELIST = 278, /* VAR_IPSECMOD_WHITELIST */
- YYSYMBOL_VAR_IPSECMOD_STRICT = 279, /* VAR_IPSECMOD_STRICT */
- YYSYMBOL_VAR_CACHEDB = 280, /* VAR_CACHEDB */
- YYSYMBOL_VAR_CACHEDB_BACKEND = 281, /* VAR_CACHEDB_BACKEND */
- YYSYMBOL_VAR_CACHEDB_SECRETSEED = 282, /* VAR_CACHEDB_SECRETSEED */
- YYSYMBOL_VAR_CACHEDB_REDISHOST = 283, /* VAR_CACHEDB_REDISHOST */
- YYSYMBOL_VAR_CACHEDB_REDISPORT = 284, /* VAR_CACHEDB_REDISPORT */
- YYSYMBOL_VAR_CACHEDB_REDISTIMEOUT = 285, /* VAR_CACHEDB_REDISTIMEOUT */
- YYSYMBOL_VAR_CACHEDB_REDISEXPIRERECORDS = 286, /* VAR_CACHEDB_REDISEXPIRERECORDS */
- YYSYMBOL_VAR_CACHEDB_REDISPATH = 287, /* VAR_CACHEDB_REDISPATH */
- YYSYMBOL_VAR_CACHEDB_REDISPASSWORD = 288, /* VAR_CACHEDB_REDISPASSWORD */
- YYSYMBOL_VAR_CACHEDB_REDISLOGICALDB = 289, /* VAR_CACHEDB_REDISLOGICALDB */
- YYSYMBOL_VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 290, /* VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM */
- YYSYMBOL_VAR_FOR_UPSTREAM = 291, /* VAR_FOR_UPSTREAM */
- YYSYMBOL_VAR_AUTH_ZONE = 292, /* VAR_AUTH_ZONE */
- YYSYMBOL_VAR_ZONEFILE = 293, /* VAR_ZONEFILE */
- YYSYMBOL_VAR_MASTER = 294, /* VAR_MASTER */
- YYSYMBOL_VAR_URL = 295, /* VAR_URL */
- YYSYMBOL_VAR_FOR_DOWNSTREAM = 296, /* VAR_FOR_DOWNSTREAM */
- YYSYMBOL_VAR_FALLBACK_ENABLED = 297, /* VAR_FALLBACK_ENABLED */
- YYSYMBOL_VAR_TLS_ADDITIONAL_PORT = 298, /* VAR_TLS_ADDITIONAL_PORT */
- YYSYMBOL_VAR_LOW_RTT = 299, /* VAR_LOW_RTT */
- YYSYMBOL_VAR_LOW_RTT_PERMIL = 300, /* VAR_LOW_RTT_PERMIL */
- YYSYMBOL_VAR_FAST_SERVER_PERMIL = 301, /* VAR_FAST_SERVER_PERMIL */
- YYSYMBOL_VAR_FAST_SERVER_NUM = 302, /* VAR_FAST_SERVER_NUM */
- YYSYMBOL_VAR_ALLOW_NOTIFY = 303, /* VAR_ALLOW_NOTIFY */
- YYSYMBOL_VAR_TLS_WIN_CERT = 304, /* VAR_TLS_WIN_CERT */
- YYSYMBOL_VAR_TCP_CONNECTION_LIMIT = 305, /* VAR_TCP_CONNECTION_LIMIT */
- YYSYMBOL_VAR_ANSWER_COOKIE = 306, /* VAR_ANSWER_COOKIE */
- YYSYMBOL_VAR_COOKIE_SECRET = 307, /* VAR_COOKIE_SECRET */
- YYSYMBOL_VAR_IP_RATELIMIT_COOKIE = 308, /* VAR_IP_RATELIMIT_COOKIE */
- YYSYMBOL_VAR_FORWARD_NO_CACHE = 309, /* VAR_FORWARD_NO_CACHE */
- YYSYMBOL_VAR_STUB_NO_CACHE = 310, /* VAR_STUB_NO_CACHE */
- YYSYMBOL_VAR_LOG_SERVFAIL = 311, /* VAR_LOG_SERVFAIL */
- YYSYMBOL_VAR_DENY_ANY = 312, /* VAR_DENY_ANY */
- YYSYMBOL_VAR_UNKNOWN_SERVER_TIME_LIMIT = 313, /* VAR_UNKNOWN_SERVER_TIME_LIMIT */
- YYSYMBOL_VAR_LOG_TAG_QUERYREPLY = 314, /* VAR_LOG_TAG_QUERYREPLY */
- YYSYMBOL_VAR_DISCARD_TIMEOUT = 315, /* VAR_DISCARD_TIMEOUT */
- YYSYMBOL_VAR_WAIT_LIMIT = 316, /* VAR_WAIT_LIMIT */
- YYSYMBOL_VAR_WAIT_LIMIT_COOKIE = 317, /* VAR_WAIT_LIMIT_COOKIE */
- YYSYMBOL_VAR_WAIT_LIMIT_NETBLOCK = 318, /* VAR_WAIT_LIMIT_NETBLOCK */
- YYSYMBOL_VAR_WAIT_LIMIT_COOKIE_NETBLOCK = 319, /* VAR_WAIT_LIMIT_COOKIE_NETBLOCK */
- YYSYMBOL_VAR_STREAM_WAIT_SIZE = 320, /* VAR_STREAM_WAIT_SIZE */
- YYSYMBOL_VAR_TLS_CIPHERS = 321, /* VAR_TLS_CIPHERS */
- YYSYMBOL_VAR_TLS_CIPHERSUITES = 322, /* VAR_TLS_CIPHERSUITES */
- YYSYMBOL_VAR_TLS_USE_SNI = 323, /* VAR_TLS_USE_SNI */
- YYSYMBOL_VAR_IPSET = 324, /* VAR_IPSET */
- YYSYMBOL_VAR_IPSET_NAME_V4 = 325, /* VAR_IPSET_NAME_V4 */
- YYSYMBOL_VAR_IPSET_NAME_V6 = 326, /* VAR_IPSET_NAME_V6 */
- YYSYMBOL_VAR_TLS_SESSION_TICKET_KEYS = 327, /* VAR_TLS_SESSION_TICKET_KEYS */
- YYSYMBOL_VAR_RPZ = 328, /* VAR_RPZ */
- YYSYMBOL_VAR_TAGS = 329, /* VAR_TAGS */
- YYSYMBOL_VAR_RPZ_ACTION_OVERRIDE = 330, /* VAR_RPZ_ACTION_OVERRIDE */
- YYSYMBOL_VAR_RPZ_CNAME_OVERRIDE = 331, /* VAR_RPZ_CNAME_OVERRIDE */
- YYSYMBOL_VAR_RPZ_LOG = 332, /* VAR_RPZ_LOG */
- YYSYMBOL_VAR_RPZ_LOG_NAME = 333, /* VAR_RPZ_LOG_NAME */
- YYSYMBOL_VAR_DYNLIB = 334, /* VAR_DYNLIB */
- YYSYMBOL_VAR_DYNLIB_FILE = 335, /* VAR_DYNLIB_FILE */
- YYSYMBOL_VAR_EDNS_CLIENT_STRING = 336, /* VAR_EDNS_CLIENT_STRING */
- YYSYMBOL_VAR_EDNS_CLIENT_STRING_OPCODE = 337, /* VAR_EDNS_CLIENT_STRING_OPCODE */
- YYSYMBOL_VAR_NSID = 338, /* VAR_NSID */
- YYSYMBOL_VAR_ZONEMD_PERMISSIVE_MODE = 339, /* VAR_ZONEMD_PERMISSIVE_MODE */
- YYSYMBOL_VAR_ZONEMD_CHECK = 340, /* VAR_ZONEMD_CHECK */
- YYSYMBOL_VAR_ZONEMD_REJECT_ABSENCE = 341, /* VAR_ZONEMD_REJECT_ABSENCE */
- YYSYMBOL_VAR_RPZ_SIGNAL_NXDOMAIN_RA = 342, /* VAR_RPZ_SIGNAL_NXDOMAIN_RA */
- YYSYMBOL_VAR_INTERFACE_AUTOMATIC_PORTS = 343, /* VAR_INTERFACE_AUTOMATIC_PORTS */
- YYSYMBOL_VAR_EDE = 344, /* VAR_EDE */
- YYSYMBOL_VAR_INTERFACE_ACTION = 345, /* VAR_INTERFACE_ACTION */
- YYSYMBOL_VAR_INTERFACE_VIEW = 346, /* VAR_INTERFACE_VIEW */
- YYSYMBOL_VAR_INTERFACE_TAG = 347, /* VAR_INTERFACE_TAG */
- YYSYMBOL_VAR_INTERFACE_TAG_ACTION = 348, /* VAR_INTERFACE_TAG_ACTION */
- YYSYMBOL_VAR_INTERFACE_TAG_DATA = 349, /* VAR_INTERFACE_TAG_DATA */
- YYSYMBOL_VAR_PROXY_PROTOCOL_PORT = 350, /* VAR_PROXY_PROTOCOL_PORT */
- YYSYMBOL_VAR_STATISTICS_INHIBIT_ZERO = 351, /* VAR_STATISTICS_INHIBIT_ZERO */
- YYSYMBOL_VAR_HARDEN_UNKNOWN_ADDITIONAL = 352, /* VAR_HARDEN_UNKNOWN_ADDITIONAL */
- YYSYMBOL_VAR_DISABLE_EDNS_DO = 353, /* VAR_DISABLE_EDNS_DO */
- YYSYMBOL_VAR_CACHEDB_NO_STORE = 354, /* VAR_CACHEDB_NO_STORE */
- YYSYMBOL_VAR_LOG_DESTADDR = 355, /* VAR_LOG_DESTADDR */
- YYSYMBOL_VAR_CACHEDB_CHECK_WHEN_SERVE_EXPIRED = 356, /* VAR_CACHEDB_CHECK_WHEN_SERVE_EXPIRED */
- YYSYMBOL_YYACCEPT = 357, /* $accept */
- YYSYMBOL_toplevelvars = 358, /* toplevelvars */
- YYSYMBOL_toplevelvar = 359, /* toplevelvar */
- YYSYMBOL_force_toplevel = 360, /* force_toplevel */
- YYSYMBOL_serverstart = 361, /* serverstart */
- YYSYMBOL_contents_server = 362, /* contents_server */
- YYSYMBOL_content_server = 363, /* content_server */
- YYSYMBOL_stubstart = 364, /* stubstart */
- YYSYMBOL_contents_stub = 365, /* contents_stub */
- YYSYMBOL_content_stub = 366, /* content_stub */
- YYSYMBOL_forwardstart = 367, /* forwardstart */
- YYSYMBOL_contents_forward = 368, /* contents_forward */
- YYSYMBOL_content_forward = 369, /* content_forward */
- YYSYMBOL_viewstart = 370, /* viewstart */
- YYSYMBOL_contents_view = 371, /* contents_view */
- YYSYMBOL_content_view = 372, /* content_view */
- YYSYMBOL_authstart = 373, /* authstart */
- YYSYMBOL_contents_auth = 374, /* contents_auth */
- YYSYMBOL_content_auth = 375, /* content_auth */
- YYSYMBOL_rpz_tag = 376, /* rpz_tag */
- YYSYMBOL_rpz_action_override = 377, /* rpz_action_override */
- YYSYMBOL_rpz_cname_override = 378, /* rpz_cname_override */
- YYSYMBOL_rpz_log = 379, /* rpz_log */
- YYSYMBOL_rpz_log_name = 380, /* rpz_log_name */
- YYSYMBOL_rpz_signal_nxdomain_ra = 381, /* rpz_signal_nxdomain_ra */
- YYSYMBOL_rpzstart = 382, /* rpzstart */
- YYSYMBOL_contents_rpz = 383, /* contents_rpz */
- YYSYMBOL_content_rpz = 384, /* content_rpz */
- YYSYMBOL_server_num_threads = 385, /* server_num_threads */
- YYSYMBOL_server_verbosity = 386, /* server_verbosity */
- YYSYMBOL_server_statistics_interval = 387, /* server_statistics_interval */
- YYSYMBOL_server_statistics_cumulative = 388, /* server_statistics_cumulative */
- YYSYMBOL_server_extended_statistics = 389, /* server_extended_statistics */
- YYSYMBOL_server_statistics_inhibit_zero = 390, /* server_statistics_inhibit_zero */
- YYSYMBOL_server_shm_enable = 391, /* server_shm_enable */
- YYSYMBOL_server_shm_key = 392, /* server_shm_key */
- YYSYMBOL_server_port = 393, /* server_port */
- YYSYMBOL_server_send_client_subnet = 394, /* server_send_client_subnet */
- YYSYMBOL_server_client_subnet_zone = 395, /* server_client_subnet_zone */
- YYSYMBOL_server_client_subnet_always_forward = 396, /* server_client_subnet_always_forward */
- YYSYMBOL_server_client_subnet_opcode = 397, /* server_client_subnet_opcode */
- YYSYMBOL_server_max_client_subnet_ipv4 = 398, /* server_max_client_subnet_ipv4 */
- YYSYMBOL_server_max_client_subnet_ipv6 = 399, /* server_max_client_subnet_ipv6 */
- YYSYMBOL_server_min_client_subnet_ipv4 = 400, /* server_min_client_subnet_ipv4 */
- YYSYMBOL_server_min_client_subnet_ipv6 = 401, /* server_min_client_subnet_ipv6 */
- YYSYMBOL_server_max_ecs_tree_size_ipv4 = 402, /* server_max_ecs_tree_size_ipv4 */
- YYSYMBOL_server_max_ecs_tree_size_ipv6 = 403, /* server_max_ecs_tree_size_ipv6 */
- YYSYMBOL_server_interface = 404, /* server_interface */
- YYSYMBOL_server_outgoing_interface = 405, /* server_outgoing_interface */
- YYSYMBOL_server_outgoing_range = 406, /* server_outgoing_range */
- YYSYMBOL_server_outgoing_port_permit = 407, /* server_outgoing_port_permit */
- YYSYMBOL_server_outgoing_port_avoid = 408, /* server_outgoing_port_avoid */
- YYSYMBOL_server_outgoing_num_tcp = 409, /* server_outgoing_num_tcp */
- YYSYMBOL_server_incoming_num_tcp = 410, /* server_incoming_num_tcp */
- YYSYMBOL_server_interface_automatic = 411, /* server_interface_automatic */
- YYSYMBOL_server_interface_automatic_ports = 412, /* server_interface_automatic_ports */
- YYSYMBOL_server_do_ip4 = 413, /* server_do_ip4 */
- YYSYMBOL_server_do_ip6 = 414, /* server_do_ip6 */
- YYSYMBOL_server_do_nat64 = 415, /* server_do_nat64 */
- YYSYMBOL_server_do_udp = 416, /* server_do_udp */
- YYSYMBOL_server_do_tcp = 417, /* server_do_tcp */
- YYSYMBOL_server_prefer_ip4 = 418, /* server_prefer_ip4 */
- YYSYMBOL_server_prefer_ip6 = 419, /* server_prefer_ip6 */
- YYSYMBOL_server_tcp_mss = 420, /* server_tcp_mss */
- YYSYMBOL_server_outgoing_tcp_mss = 421, /* server_outgoing_tcp_mss */
- YYSYMBOL_server_tcp_idle_timeout = 422, /* server_tcp_idle_timeout */
- YYSYMBOL_server_max_reuse_tcp_queries = 423, /* server_max_reuse_tcp_queries */
- YYSYMBOL_server_tcp_reuse_timeout = 424, /* server_tcp_reuse_timeout */
- YYSYMBOL_server_tcp_auth_query_timeout = 425, /* server_tcp_auth_query_timeout */
- YYSYMBOL_server_tcp_keepalive = 426, /* server_tcp_keepalive */
- YYSYMBOL_server_tcp_keepalive_timeout = 427, /* server_tcp_keepalive_timeout */
- YYSYMBOL_server_sock_queue_timeout = 428, /* server_sock_queue_timeout */
- YYSYMBOL_server_tcp_upstream = 429, /* server_tcp_upstream */
- YYSYMBOL_server_udp_upstream_without_downstream = 430, /* server_udp_upstream_without_downstream */
- YYSYMBOL_server_ssl_upstream = 431, /* server_ssl_upstream */
- YYSYMBOL_server_ssl_service_key = 432, /* server_ssl_service_key */
- YYSYMBOL_server_ssl_service_pem = 433, /* server_ssl_service_pem */
- YYSYMBOL_server_ssl_port = 434, /* server_ssl_port */
- YYSYMBOL_server_tls_cert_bundle = 435, /* server_tls_cert_bundle */
- YYSYMBOL_server_tls_win_cert = 436, /* server_tls_win_cert */
- YYSYMBOL_server_tls_additional_port = 437, /* server_tls_additional_port */
- YYSYMBOL_server_tls_ciphers = 438, /* server_tls_ciphers */
- YYSYMBOL_server_tls_ciphersuites = 439, /* server_tls_ciphersuites */
- YYSYMBOL_server_tls_session_ticket_keys = 440, /* server_tls_session_ticket_keys */
- YYSYMBOL_server_tls_use_sni = 441, /* server_tls_use_sni */
- YYSYMBOL_server_https_port = 442, /* server_https_port */
- YYSYMBOL_server_http_endpoint = 443, /* server_http_endpoint */
- YYSYMBOL_server_http_max_streams = 444, /* server_http_max_streams */
- YYSYMBOL_server_http_query_buffer_size = 445, /* server_http_query_buffer_size */
- YYSYMBOL_server_http_response_buffer_size = 446, /* server_http_response_buffer_size */
- YYSYMBOL_server_http_nodelay = 447, /* server_http_nodelay */
- YYSYMBOL_server_http_notls_downstream = 448, /* server_http_notls_downstream */
- YYSYMBOL_server_use_systemd = 449, /* server_use_systemd */
- YYSYMBOL_server_do_daemonize = 450, /* server_do_daemonize */
- YYSYMBOL_server_use_syslog = 451, /* server_use_syslog */
- YYSYMBOL_server_log_time_ascii = 452, /* server_log_time_ascii */
- YYSYMBOL_server_log_queries = 453, /* server_log_queries */
- YYSYMBOL_server_log_replies = 454, /* server_log_replies */
- YYSYMBOL_server_log_tag_queryreply = 455, /* server_log_tag_queryreply */
- YYSYMBOL_server_log_servfail = 456, /* server_log_servfail */
- YYSYMBOL_server_log_destaddr = 457, /* server_log_destaddr */
- YYSYMBOL_server_log_local_actions = 458, /* server_log_local_actions */
- YYSYMBOL_server_chroot = 459, /* server_chroot */
- YYSYMBOL_server_username = 460, /* server_username */
- YYSYMBOL_server_directory = 461, /* server_directory */
- YYSYMBOL_server_logfile = 462, /* server_logfile */
- YYSYMBOL_server_pidfile = 463, /* server_pidfile */
- YYSYMBOL_server_root_hints = 464, /* server_root_hints */
- YYSYMBOL_server_dlv_anchor_file = 465, /* server_dlv_anchor_file */
- YYSYMBOL_server_dlv_anchor = 466, /* server_dlv_anchor */
- YYSYMBOL_server_auto_trust_anchor_file = 467, /* server_auto_trust_anchor_file */
- YYSYMBOL_server_trust_anchor_file = 468, /* server_trust_anchor_file */
- YYSYMBOL_server_trusted_keys_file = 469, /* server_trusted_keys_file */
- YYSYMBOL_server_trust_anchor = 470, /* server_trust_anchor */
- YYSYMBOL_server_trust_anchor_signaling = 471, /* server_trust_anchor_signaling */
- YYSYMBOL_server_root_key_sentinel = 472, /* server_root_key_sentinel */
- YYSYMBOL_server_domain_insecure = 473, /* server_domain_insecure */
- YYSYMBOL_server_hide_identity = 474, /* server_hide_identity */
- YYSYMBOL_server_hide_version = 475, /* server_hide_version */
- YYSYMBOL_server_hide_trustanchor = 476, /* server_hide_trustanchor */
- YYSYMBOL_server_hide_http_user_agent = 477, /* server_hide_http_user_agent */
- YYSYMBOL_server_identity = 478, /* server_identity */
- YYSYMBOL_server_version = 479, /* server_version */
- YYSYMBOL_server_http_user_agent = 480, /* server_http_user_agent */
- YYSYMBOL_server_nsid = 481, /* server_nsid */
- YYSYMBOL_server_so_rcvbuf = 482, /* server_so_rcvbuf */
- YYSYMBOL_server_so_sndbuf = 483, /* server_so_sndbuf */
- YYSYMBOL_server_so_reuseport = 484, /* server_so_reuseport */
- YYSYMBOL_server_ip_transparent = 485, /* server_ip_transparent */
- YYSYMBOL_server_ip_freebind = 486, /* server_ip_freebind */
- YYSYMBOL_server_ip_dscp = 487, /* server_ip_dscp */
- YYSYMBOL_server_stream_wait_size = 488, /* server_stream_wait_size */
- YYSYMBOL_server_edns_buffer_size = 489, /* server_edns_buffer_size */
- YYSYMBOL_server_msg_buffer_size = 490, /* server_msg_buffer_size */
- YYSYMBOL_server_msg_cache_size = 491, /* server_msg_cache_size */
- YYSYMBOL_server_msg_cache_slabs = 492, /* server_msg_cache_slabs */
- YYSYMBOL_server_num_queries_per_thread = 493, /* server_num_queries_per_thread */
- YYSYMBOL_server_jostle_timeout = 494, /* server_jostle_timeout */
- YYSYMBOL_server_delay_close = 495, /* server_delay_close */
- YYSYMBOL_server_udp_connect = 496, /* server_udp_connect */
- YYSYMBOL_server_unblock_lan_zones = 497, /* server_unblock_lan_zones */
- YYSYMBOL_server_insecure_lan_zones = 498, /* server_insecure_lan_zones */
- YYSYMBOL_server_rrset_cache_size = 499, /* server_rrset_cache_size */
- YYSYMBOL_server_rrset_cache_slabs = 500, /* server_rrset_cache_slabs */
- YYSYMBOL_server_infra_host_ttl = 501, /* server_infra_host_ttl */
- YYSYMBOL_server_infra_lame_ttl = 502, /* server_infra_lame_ttl */
- YYSYMBOL_server_infra_cache_numhosts = 503, /* server_infra_cache_numhosts */
- YYSYMBOL_server_infra_cache_lame_size = 504, /* server_infra_cache_lame_size */
- YYSYMBOL_server_infra_cache_slabs = 505, /* server_infra_cache_slabs */
- YYSYMBOL_server_infra_cache_min_rtt = 506, /* server_infra_cache_min_rtt */
- YYSYMBOL_server_infra_cache_max_rtt = 507, /* server_infra_cache_max_rtt */
- YYSYMBOL_server_infra_keep_probing = 508, /* server_infra_keep_probing */
- YYSYMBOL_server_target_fetch_policy = 509, /* server_target_fetch_policy */
- YYSYMBOL_server_harden_short_bufsize = 510, /* server_harden_short_bufsize */
- YYSYMBOL_server_harden_large_queries = 511, /* server_harden_large_queries */
- YYSYMBOL_server_harden_glue = 512, /* server_harden_glue */
- YYSYMBOL_server_harden_dnssec_stripped = 513, /* server_harden_dnssec_stripped */
- YYSYMBOL_server_harden_below_nxdomain = 514, /* server_harden_below_nxdomain */
- YYSYMBOL_server_harden_referral_path = 515, /* server_harden_referral_path */
- YYSYMBOL_server_harden_algo_downgrade = 516, /* server_harden_algo_downgrade */
- YYSYMBOL_server_harden_unknown_additional = 517, /* server_harden_unknown_additional */
- YYSYMBOL_server_use_caps_for_id = 518, /* server_use_caps_for_id */
- YYSYMBOL_server_caps_whitelist = 519, /* server_caps_whitelist */
- YYSYMBOL_server_private_address = 520, /* server_private_address */
- YYSYMBOL_server_private_domain = 521, /* server_private_domain */
- YYSYMBOL_server_prefetch = 522, /* server_prefetch */
- YYSYMBOL_server_prefetch_key = 523, /* server_prefetch_key */
- YYSYMBOL_server_deny_any = 524, /* server_deny_any */
- YYSYMBOL_server_unwanted_reply_threshold = 525, /* server_unwanted_reply_threshold */
- YYSYMBOL_server_do_not_query_address = 526, /* server_do_not_query_address */
- YYSYMBOL_server_do_not_query_localhost = 527, /* server_do_not_query_localhost */
- YYSYMBOL_server_access_control = 528, /* server_access_control */
- YYSYMBOL_server_interface_action = 529, /* server_interface_action */
- YYSYMBOL_server_module_conf = 530, /* server_module_conf */
- YYSYMBOL_server_val_override_date = 531, /* server_val_override_date */
- YYSYMBOL_server_val_sig_skew_min = 532, /* server_val_sig_skew_min */
- YYSYMBOL_server_val_sig_skew_max = 533, /* server_val_sig_skew_max */
- YYSYMBOL_server_val_max_restart = 534, /* server_val_max_restart */
- YYSYMBOL_server_cache_max_ttl = 535, /* server_cache_max_ttl */
- YYSYMBOL_server_cache_max_negative_ttl = 536, /* server_cache_max_negative_ttl */
- YYSYMBOL_server_cache_min_negative_ttl = 537, /* server_cache_min_negative_ttl */
- YYSYMBOL_server_cache_min_ttl = 538, /* server_cache_min_ttl */
- YYSYMBOL_server_bogus_ttl = 539, /* server_bogus_ttl */
- YYSYMBOL_server_val_clean_additional = 540, /* server_val_clean_additional */
- YYSYMBOL_server_val_permissive_mode = 541, /* server_val_permissive_mode */
- YYSYMBOL_server_aggressive_nsec = 542, /* server_aggressive_nsec */
- YYSYMBOL_server_ignore_cd_flag = 543, /* server_ignore_cd_flag */
- YYSYMBOL_server_disable_edns_do = 544, /* server_disable_edns_do */
- YYSYMBOL_server_serve_expired = 545, /* server_serve_expired */
- YYSYMBOL_server_serve_expired_ttl = 546, /* server_serve_expired_ttl */
- YYSYMBOL_server_serve_expired_ttl_reset = 547, /* server_serve_expired_ttl_reset */
- YYSYMBOL_server_serve_expired_reply_ttl = 548, /* server_serve_expired_reply_ttl */
- YYSYMBOL_server_serve_expired_client_timeout = 549, /* server_serve_expired_client_timeout */
- YYSYMBOL_server_ede_serve_expired = 550, /* server_ede_serve_expired */
- YYSYMBOL_server_serve_original_ttl = 551, /* server_serve_original_ttl */
- YYSYMBOL_server_fake_dsa = 552, /* server_fake_dsa */
- YYSYMBOL_server_fake_sha1 = 553, /* server_fake_sha1 */
- YYSYMBOL_server_val_log_level = 554, /* server_val_log_level */
- YYSYMBOL_server_val_nsec3_keysize_iterations = 555, /* server_val_nsec3_keysize_iterations */
- YYSYMBOL_server_zonemd_permissive_mode = 556, /* server_zonemd_permissive_mode */
- YYSYMBOL_server_add_holddown = 557, /* server_add_holddown */
- YYSYMBOL_server_del_holddown = 558, /* server_del_holddown */
- YYSYMBOL_server_keep_missing = 559, /* server_keep_missing */
- YYSYMBOL_server_permit_small_holddown = 560, /* server_permit_small_holddown */
- YYSYMBOL_server_key_cache_size = 561, /* server_key_cache_size */
- YYSYMBOL_server_key_cache_slabs = 562, /* server_key_cache_slabs */
- YYSYMBOL_server_neg_cache_size = 563, /* server_neg_cache_size */
- YYSYMBOL_server_local_zone = 564, /* server_local_zone */
- YYSYMBOL_server_local_data = 565, /* server_local_data */
- YYSYMBOL_server_local_data_ptr = 566, /* server_local_data_ptr */
- YYSYMBOL_server_minimal_responses = 567, /* server_minimal_responses */
- YYSYMBOL_server_rrset_roundrobin = 568, /* server_rrset_roundrobin */
- YYSYMBOL_server_unknown_server_time_limit = 569, /* server_unknown_server_time_limit */
- YYSYMBOL_server_discard_timeout = 570, /* server_discard_timeout */
- YYSYMBOL_server_wait_limit = 571, /* server_wait_limit */
- YYSYMBOL_server_wait_limit_cookie = 572, /* server_wait_limit_cookie */
- YYSYMBOL_server_wait_limit_netblock = 573, /* server_wait_limit_netblock */
- YYSYMBOL_server_wait_limit_cookie_netblock = 574, /* server_wait_limit_cookie_netblock */
- YYSYMBOL_server_max_udp_size = 575, /* server_max_udp_size */
- YYSYMBOL_server_dns64_prefix = 576, /* server_dns64_prefix */
- YYSYMBOL_server_dns64_synthall = 577, /* server_dns64_synthall */
- YYSYMBOL_server_dns64_ignore_aaaa = 578, /* server_dns64_ignore_aaaa */
- YYSYMBOL_server_nat64_prefix = 579, /* server_nat64_prefix */
- YYSYMBOL_server_define_tag = 580, /* server_define_tag */
- YYSYMBOL_server_local_zone_tag = 581, /* server_local_zone_tag */
- YYSYMBOL_server_access_control_tag = 582, /* server_access_control_tag */
- YYSYMBOL_server_access_control_tag_action = 583, /* server_access_control_tag_action */
- YYSYMBOL_server_access_control_tag_data = 584, /* server_access_control_tag_data */
- YYSYMBOL_server_local_zone_override = 585, /* server_local_zone_override */
- YYSYMBOL_server_access_control_view = 586, /* server_access_control_view */
- YYSYMBOL_server_interface_tag = 587, /* server_interface_tag */
- YYSYMBOL_server_interface_tag_action = 588, /* server_interface_tag_action */
- YYSYMBOL_server_interface_tag_data = 589, /* server_interface_tag_data */
- YYSYMBOL_server_interface_view = 590, /* server_interface_view */
- YYSYMBOL_server_response_ip_tag = 591, /* server_response_ip_tag */
- YYSYMBOL_server_ip_ratelimit = 592, /* server_ip_ratelimit */
- YYSYMBOL_server_ip_ratelimit_cookie = 593, /* server_ip_ratelimit_cookie */
- YYSYMBOL_server_ratelimit = 594, /* server_ratelimit */
- YYSYMBOL_server_ip_ratelimit_size = 595, /* server_ip_ratelimit_size */
- YYSYMBOL_server_ratelimit_size = 596, /* server_ratelimit_size */
- YYSYMBOL_server_ip_ratelimit_slabs = 597, /* server_ip_ratelimit_slabs */
- YYSYMBOL_server_ratelimit_slabs = 598, /* server_ratelimit_slabs */
- YYSYMBOL_server_ratelimit_for_domain = 599, /* server_ratelimit_for_domain */
- YYSYMBOL_server_ratelimit_below_domain = 600, /* server_ratelimit_below_domain */
- YYSYMBOL_server_ip_ratelimit_factor = 601, /* server_ip_ratelimit_factor */
- YYSYMBOL_server_ratelimit_factor = 602, /* server_ratelimit_factor */
- YYSYMBOL_server_ip_ratelimit_backoff = 603, /* server_ip_ratelimit_backoff */
- YYSYMBOL_server_ratelimit_backoff = 604, /* server_ratelimit_backoff */
- YYSYMBOL_server_outbound_msg_retry = 605, /* server_outbound_msg_retry */
- YYSYMBOL_server_max_sent_count = 606, /* server_max_sent_count */
- YYSYMBOL_server_max_query_restarts = 607, /* server_max_query_restarts */
- YYSYMBOL_server_low_rtt = 608, /* server_low_rtt */
- YYSYMBOL_server_fast_server_num = 609, /* server_fast_server_num */
- YYSYMBOL_server_fast_server_permil = 610, /* server_fast_server_permil */
- YYSYMBOL_server_qname_minimisation = 611, /* server_qname_minimisation */
- YYSYMBOL_server_qname_minimisation_strict = 612, /* server_qname_minimisation_strict */
- YYSYMBOL_server_pad_responses = 613, /* server_pad_responses */
- YYSYMBOL_server_pad_responses_block_size = 614, /* server_pad_responses_block_size */
- YYSYMBOL_server_pad_queries = 615, /* server_pad_queries */
- YYSYMBOL_server_pad_queries_block_size = 616, /* server_pad_queries_block_size */
- YYSYMBOL_server_ipsecmod_enabled = 617, /* server_ipsecmod_enabled */
- YYSYMBOL_server_ipsecmod_ignore_bogus = 618, /* server_ipsecmod_ignore_bogus */
- YYSYMBOL_server_ipsecmod_hook = 619, /* server_ipsecmod_hook */
- YYSYMBOL_server_ipsecmod_max_ttl = 620, /* server_ipsecmod_max_ttl */
- YYSYMBOL_server_ipsecmod_whitelist = 621, /* server_ipsecmod_whitelist */
- YYSYMBOL_server_ipsecmod_strict = 622, /* server_ipsecmod_strict */
- YYSYMBOL_server_edns_client_string = 623, /* server_edns_client_string */
- YYSYMBOL_server_edns_client_string_opcode = 624, /* server_edns_client_string_opcode */
- YYSYMBOL_server_ede = 625, /* server_ede */
- YYSYMBOL_server_proxy_protocol_port = 626, /* server_proxy_protocol_port */
- YYSYMBOL_stub_name = 627, /* stub_name */
- YYSYMBOL_stub_host = 628, /* stub_host */
- YYSYMBOL_stub_addr = 629, /* stub_addr */
- YYSYMBOL_stub_first = 630, /* stub_first */
- YYSYMBOL_stub_no_cache = 631, /* stub_no_cache */
- YYSYMBOL_stub_ssl_upstream = 632, /* stub_ssl_upstream */
- YYSYMBOL_stub_tcp_upstream = 633, /* stub_tcp_upstream */
- YYSYMBOL_stub_prime = 634, /* stub_prime */
- YYSYMBOL_forward_name = 635, /* forward_name */
- YYSYMBOL_forward_host = 636, /* forward_host */
- YYSYMBOL_forward_addr = 637, /* forward_addr */
- YYSYMBOL_forward_first = 638, /* forward_first */
- YYSYMBOL_forward_no_cache = 639, /* forward_no_cache */
- YYSYMBOL_forward_ssl_upstream = 640, /* forward_ssl_upstream */
- YYSYMBOL_forward_tcp_upstream = 641, /* forward_tcp_upstream */
- YYSYMBOL_auth_name = 642, /* auth_name */
- YYSYMBOL_auth_zonefile = 643, /* auth_zonefile */
- YYSYMBOL_auth_master = 644, /* auth_master */
- YYSYMBOL_auth_url = 645, /* auth_url */
- YYSYMBOL_auth_allow_notify = 646, /* auth_allow_notify */
- YYSYMBOL_auth_zonemd_check = 647, /* auth_zonemd_check */
- YYSYMBOL_auth_zonemd_reject_absence = 648, /* auth_zonemd_reject_absence */
- YYSYMBOL_auth_for_downstream = 649, /* auth_for_downstream */
- YYSYMBOL_auth_for_upstream = 650, /* auth_for_upstream */
- YYSYMBOL_auth_fallback_enabled = 651, /* auth_fallback_enabled */
- YYSYMBOL_view_name = 652, /* view_name */
- YYSYMBOL_view_local_zone = 653, /* view_local_zone */
- YYSYMBOL_view_response_ip = 654, /* view_response_ip */
- YYSYMBOL_view_response_ip_data = 655, /* view_response_ip_data */
- YYSYMBOL_view_local_data = 656, /* view_local_data */
- YYSYMBOL_view_local_data_ptr = 657, /* view_local_data_ptr */
- YYSYMBOL_view_first = 658, /* view_first */
- YYSYMBOL_rcstart = 659, /* rcstart */
- YYSYMBOL_contents_rc = 660, /* contents_rc */
- YYSYMBOL_content_rc = 661, /* content_rc */
- YYSYMBOL_rc_control_enable = 662, /* rc_control_enable */
- YYSYMBOL_rc_control_port = 663, /* rc_control_port */
- YYSYMBOL_rc_control_interface = 664, /* rc_control_interface */
- YYSYMBOL_rc_control_use_cert = 665, /* rc_control_use_cert */
- YYSYMBOL_rc_server_key_file = 666, /* rc_server_key_file */
- YYSYMBOL_rc_server_cert_file = 667, /* rc_server_cert_file */
- YYSYMBOL_rc_control_key_file = 668, /* rc_control_key_file */
- YYSYMBOL_rc_control_cert_file = 669, /* rc_control_cert_file */
- YYSYMBOL_dtstart = 670, /* dtstart */
- YYSYMBOL_contents_dt = 671, /* contents_dt */
- YYSYMBOL_content_dt = 672, /* content_dt */
- YYSYMBOL_dt_dnstap_enable = 673, /* dt_dnstap_enable */
- YYSYMBOL_dt_dnstap_bidirectional = 674, /* dt_dnstap_bidirectional */
- YYSYMBOL_dt_dnstap_socket_path = 675, /* dt_dnstap_socket_path */
- YYSYMBOL_dt_dnstap_ip = 676, /* dt_dnstap_ip */
- YYSYMBOL_dt_dnstap_tls = 677, /* dt_dnstap_tls */
- YYSYMBOL_dt_dnstap_tls_server_name = 678, /* dt_dnstap_tls_server_name */
- YYSYMBOL_dt_dnstap_tls_cert_bundle = 679, /* dt_dnstap_tls_cert_bundle */
- YYSYMBOL_dt_dnstap_tls_client_key_file = 680, /* dt_dnstap_tls_client_key_file */
- YYSYMBOL_dt_dnstap_tls_client_cert_file = 681, /* dt_dnstap_tls_client_cert_file */
- YYSYMBOL_dt_dnstap_send_identity = 682, /* dt_dnstap_send_identity */
- YYSYMBOL_dt_dnstap_send_version = 683, /* dt_dnstap_send_version */
- YYSYMBOL_dt_dnstap_identity = 684, /* dt_dnstap_identity */
- YYSYMBOL_dt_dnstap_version = 685, /* dt_dnstap_version */
- YYSYMBOL_dt_dnstap_log_resolver_query_messages = 686, /* dt_dnstap_log_resolver_query_messages */
- YYSYMBOL_dt_dnstap_log_resolver_response_messages = 687, /* dt_dnstap_log_resolver_response_messages */
- YYSYMBOL_dt_dnstap_log_client_query_messages = 688, /* dt_dnstap_log_client_query_messages */
- YYSYMBOL_dt_dnstap_log_client_response_messages = 689, /* dt_dnstap_log_client_response_messages */
- YYSYMBOL_dt_dnstap_log_forwarder_query_messages = 690, /* dt_dnstap_log_forwarder_query_messages */
- YYSYMBOL_dt_dnstap_log_forwarder_response_messages = 691, /* dt_dnstap_log_forwarder_response_messages */
- YYSYMBOL_pythonstart = 692, /* pythonstart */
- YYSYMBOL_contents_py = 693, /* contents_py */
- YYSYMBOL_content_py = 694, /* content_py */
- YYSYMBOL_py_script = 695, /* py_script */
- YYSYMBOL_dynlibstart = 696, /* dynlibstart */
- YYSYMBOL_contents_dl = 697, /* contents_dl */
- YYSYMBOL_content_dl = 698, /* content_dl */
- YYSYMBOL_dl_file = 699, /* dl_file */
- YYSYMBOL_server_disable_dnssec_lame_check = 700, /* server_disable_dnssec_lame_check */
- YYSYMBOL_server_log_identity = 701, /* server_log_identity */
- YYSYMBOL_server_response_ip = 702, /* server_response_ip */
- YYSYMBOL_server_response_ip_data = 703, /* server_response_ip_data */
- YYSYMBOL_dnscstart = 704, /* dnscstart */
- YYSYMBOL_contents_dnsc = 705, /* contents_dnsc */
- YYSYMBOL_content_dnsc = 706, /* content_dnsc */
- YYSYMBOL_dnsc_dnscrypt_enable = 707, /* dnsc_dnscrypt_enable */
- YYSYMBOL_dnsc_dnscrypt_port = 708, /* dnsc_dnscrypt_port */
- YYSYMBOL_dnsc_dnscrypt_provider = 709, /* dnsc_dnscrypt_provider */
- YYSYMBOL_dnsc_dnscrypt_provider_cert = 710, /* dnsc_dnscrypt_provider_cert */
- YYSYMBOL_dnsc_dnscrypt_provider_cert_rotated = 711, /* dnsc_dnscrypt_provider_cert_rotated */
- YYSYMBOL_dnsc_dnscrypt_secret_key = 712, /* dnsc_dnscrypt_secret_key */
- YYSYMBOL_dnsc_dnscrypt_shared_secret_cache_size = 713, /* dnsc_dnscrypt_shared_secret_cache_size */
- YYSYMBOL_dnsc_dnscrypt_shared_secret_cache_slabs = 714, /* dnsc_dnscrypt_shared_secret_cache_slabs */
- YYSYMBOL_dnsc_dnscrypt_nonce_cache_size = 715, /* dnsc_dnscrypt_nonce_cache_size */
- YYSYMBOL_dnsc_dnscrypt_nonce_cache_slabs = 716, /* dnsc_dnscrypt_nonce_cache_slabs */
- YYSYMBOL_cachedbstart = 717, /* cachedbstart */
- YYSYMBOL_contents_cachedb = 718, /* contents_cachedb */
- YYSYMBOL_content_cachedb = 719, /* content_cachedb */
- YYSYMBOL_cachedb_backend_name = 720, /* cachedb_backend_name */
- YYSYMBOL_cachedb_secret_seed = 721, /* cachedb_secret_seed */
- YYSYMBOL_cachedb_no_store = 722, /* cachedb_no_store */
- YYSYMBOL_cachedb_check_when_serve_expired = 723, /* cachedb_check_when_serve_expired */
- YYSYMBOL_redis_server_host = 724, /* redis_server_host */
- YYSYMBOL_redis_server_port = 725, /* redis_server_port */
- YYSYMBOL_redis_server_path = 726, /* redis_server_path */
- YYSYMBOL_redis_server_password = 727, /* redis_server_password */
- YYSYMBOL_redis_timeout = 728, /* redis_timeout */
- YYSYMBOL_redis_expire_records = 729, /* redis_expire_records */
- YYSYMBOL_redis_logical_db = 730, /* redis_logical_db */
- YYSYMBOL_server_tcp_connection_limit = 731, /* server_tcp_connection_limit */
- YYSYMBOL_server_answer_cookie = 732, /* server_answer_cookie */
- YYSYMBOL_server_cookie_secret = 733, /* server_cookie_secret */
- YYSYMBOL_ipsetstart = 734, /* ipsetstart */
- YYSYMBOL_contents_ipset = 735, /* contents_ipset */
- YYSYMBOL_content_ipset = 736, /* content_ipset */
- YYSYMBOL_ipset_name_v4 = 737, /* ipset_name_v4 */
- YYSYMBOL_ipset_name_v6 = 738 /* ipset_name_v6 */
+ YYSYMBOL_VAR_DNSTAP_SAMPLE_RATE = 192, /* VAR_DNSTAP_SAMPLE_RATE */
+ YYSYMBOL_VAR_RESPONSE_IP_TAG = 193, /* VAR_RESPONSE_IP_TAG */
+ YYSYMBOL_VAR_RESPONSE_IP = 194, /* VAR_RESPONSE_IP */
+ YYSYMBOL_VAR_RESPONSE_IP_DATA = 195, /* VAR_RESPONSE_IP_DATA */
+ YYSYMBOL_VAR_HARDEN_ALGO_DOWNGRADE = 196, /* VAR_HARDEN_ALGO_DOWNGRADE */
+ YYSYMBOL_VAR_IP_TRANSPARENT = 197, /* VAR_IP_TRANSPARENT */
+ YYSYMBOL_VAR_IP_DSCP = 198, /* VAR_IP_DSCP */
+ YYSYMBOL_VAR_DISABLE_DNSSEC_LAME_CHECK = 199, /* VAR_DISABLE_DNSSEC_LAME_CHECK */
+ YYSYMBOL_VAR_IP_RATELIMIT = 200, /* VAR_IP_RATELIMIT */
+ YYSYMBOL_VAR_IP_RATELIMIT_SLABS = 201, /* VAR_IP_RATELIMIT_SLABS */
+ YYSYMBOL_VAR_IP_RATELIMIT_SIZE = 202, /* VAR_IP_RATELIMIT_SIZE */
+ YYSYMBOL_VAR_RATELIMIT = 203, /* VAR_RATELIMIT */
+ YYSYMBOL_VAR_RATELIMIT_SLABS = 204, /* VAR_RATELIMIT_SLABS */
+ YYSYMBOL_VAR_RATELIMIT_SIZE = 205, /* VAR_RATELIMIT_SIZE */
+ YYSYMBOL_VAR_OUTBOUND_MSG_RETRY = 206, /* VAR_OUTBOUND_MSG_RETRY */
+ YYSYMBOL_VAR_MAX_SENT_COUNT = 207, /* VAR_MAX_SENT_COUNT */
+ YYSYMBOL_VAR_MAX_QUERY_RESTARTS = 208, /* VAR_MAX_QUERY_RESTARTS */
+ YYSYMBOL_VAR_RATELIMIT_FOR_DOMAIN = 209, /* VAR_RATELIMIT_FOR_DOMAIN */
+ YYSYMBOL_VAR_RATELIMIT_BELOW_DOMAIN = 210, /* VAR_RATELIMIT_BELOW_DOMAIN */
+ YYSYMBOL_VAR_IP_RATELIMIT_FACTOR = 211, /* VAR_IP_RATELIMIT_FACTOR */
+ YYSYMBOL_VAR_RATELIMIT_FACTOR = 212, /* VAR_RATELIMIT_FACTOR */
+ YYSYMBOL_VAR_IP_RATELIMIT_BACKOFF = 213, /* VAR_IP_RATELIMIT_BACKOFF */
+ YYSYMBOL_VAR_RATELIMIT_BACKOFF = 214, /* VAR_RATELIMIT_BACKOFF */
+ YYSYMBOL_VAR_SEND_CLIENT_SUBNET = 215, /* VAR_SEND_CLIENT_SUBNET */
+ YYSYMBOL_VAR_CLIENT_SUBNET_ZONE = 216, /* VAR_CLIENT_SUBNET_ZONE */
+ YYSYMBOL_VAR_CLIENT_SUBNET_ALWAYS_FORWARD = 217, /* VAR_CLIENT_SUBNET_ALWAYS_FORWARD */
+ YYSYMBOL_VAR_CLIENT_SUBNET_OPCODE = 218, /* VAR_CLIENT_SUBNET_OPCODE */
+ YYSYMBOL_VAR_MAX_CLIENT_SUBNET_IPV4 = 219, /* VAR_MAX_CLIENT_SUBNET_IPV4 */
+ YYSYMBOL_VAR_MAX_CLIENT_SUBNET_IPV6 = 220, /* VAR_MAX_CLIENT_SUBNET_IPV6 */
+ YYSYMBOL_VAR_MIN_CLIENT_SUBNET_IPV4 = 221, /* VAR_MIN_CLIENT_SUBNET_IPV4 */
+ YYSYMBOL_VAR_MIN_CLIENT_SUBNET_IPV6 = 222, /* VAR_MIN_CLIENT_SUBNET_IPV6 */
+ YYSYMBOL_VAR_MAX_ECS_TREE_SIZE_IPV4 = 223, /* VAR_MAX_ECS_TREE_SIZE_IPV4 */
+ YYSYMBOL_VAR_MAX_ECS_TREE_SIZE_IPV6 = 224, /* VAR_MAX_ECS_TREE_SIZE_IPV6 */
+ YYSYMBOL_VAR_CAPS_WHITELIST = 225, /* VAR_CAPS_WHITELIST */
+ YYSYMBOL_VAR_CACHE_MAX_NEGATIVE_TTL = 226, /* VAR_CACHE_MAX_NEGATIVE_TTL */
+ YYSYMBOL_VAR_PERMIT_SMALL_HOLDDOWN = 227, /* VAR_PERMIT_SMALL_HOLDDOWN */
+ YYSYMBOL_VAR_CACHE_MIN_NEGATIVE_TTL = 228, /* VAR_CACHE_MIN_NEGATIVE_TTL */
+ YYSYMBOL_VAR_QNAME_MINIMISATION = 229, /* VAR_QNAME_MINIMISATION */
+ YYSYMBOL_VAR_QNAME_MINIMISATION_STRICT = 230, /* VAR_QNAME_MINIMISATION_STRICT */
+ YYSYMBOL_VAR_IP_FREEBIND = 231, /* VAR_IP_FREEBIND */
+ YYSYMBOL_VAR_DEFINE_TAG = 232, /* VAR_DEFINE_TAG */
+ YYSYMBOL_VAR_LOCAL_ZONE_TAG = 233, /* VAR_LOCAL_ZONE_TAG */
+ YYSYMBOL_VAR_ACCESS_CONTROL_TAG = 234, /* VAR_ACCESS_CONTROL_TAG */
+ YYSYMBOL_VAR_LOCAL_ZONE_OVERRIDE = 235, /* VAR_LOCAL_ZONE_OVERRIDE */
+ YYSYMBOL_VAR_ACCESS_CONTROL_TAG_ACTION = 236, /* VAR_ACCESS_CONTROL_TAG_ACTION */
+ YYSYMBOL_VAR_ACCESS_CONTROL_TAG_DATA = 237, /* VAR_ACCESS_CONTROL_TAG_DATA */
+ YYSYMBOL_VAR_VIEW = 238, /* VAR_VIEW */
+ YYSYMBOL_VAR_ACCESS_CONTROL_VIEW = 239, /* VAR_ACCESS_CONTROL_VIEW */
+ YYSYMBOL_VAR_VIEW_FIRST = 240, /* VAR_VIEW_FIRST */
+ YYSYMBOL_VAR_SERVE_EXPIRED = 241, /* VAR_SERVE_EXPIRED */
+ YYSYMBOL_VAR_SERVE_EXPIRED_TTL = 242, /* VAR_SERVE_EXPIRED_TTL */
+ YYSYMBOL_VAR_SERVE_EXPIRED_TTL_RESET = 243, /* VAR_SERVE_EXPIRED_TTL_RESET */
+ YYSYMBOL_VAR_SERVE_EXPIRED_REPLY_TTL = 244, /* VAR_SERVE_EXPIRED_REPLY_TTL */
+ YYSYMBOL_VAR_SERVE_EXPIRED_CLIENT_TIMEOUT = 245, /* VAR_SERVE_EXPIRED_CLIENT_TIMEOUT */
+ YYSYMBOL_VAR_EDE_SERVE_EXPIRED = 246, /* VAR_EDE_SERVE_EXPIRED */
+ YYSYMBOL_VAR_SERVE_ORIGINAL_TTL = 247, /* VAR_SERVE_ORIGINAL_TTL */
+ YYSYMBOL_VAR_FAKE_DSA = 248, /* VAR_FAKE_DSA */
+ YYSYMBOL_VAR_FAKE_SHA1 = 249, /* VAR_FAKE_SHA1 */
+ YYSYMBOL_VAR_LOG_IDENTITY = 250, /* VAR_LOG_IDENTITY */
+ YYSYMBOL_VAR_HIDE_TRUSTANCHOR = 251, /* VAR_HIDE_TRUSTANCHOR */
+ YYSYMBOL_VAR_HIDE_HTTP_USER_AGENT = 252, /* VAR_HIDE_HTTP_USER_AGENT */
+ YYSYMBOL_VAR_HTTP_USER_AGENT = 253, /* VAR_HTTP_USER_AGENT */
+ YYSYMBOL_VAR_TRUST_ANCHOR_SIGNALING = 254, /* VAR_TRUST_ANCHOR_SIGNALING */
+ YYSYMBOL_VAR_AGGRESSIVE_NSEC = 255, /* VAR_AGGRESSIVE_NSEC */
+ YYSYMBOL_VAR_USE_SYSTEMD = 256, /* VAR_USE_SYSTEMD */
+ YYSYMBOL_VAR_SHM_ENABLE = 257, /* VAR_SHM_ENABLE */
+ YYSYMBOL_VAR_SHM_KEY = 258, /* VAR_SHM_KEY */
+ YYSYMBOL_VAR_ROOT_KEY_SENTINEL = 259, /* VAR_ROOT_KEY_SENTINEL */
+ YYSYMBOL_VAR_DNSCRYPT = 260, /* VAR_DNSCRYPT */
+ YYSYMBOL_VAR_DNSCRYPT_ENABLE = 261, /* VAR_DNSCRYPT_ENABLE */
+ YYSYMBOL_VAR_DNSCRYPT_PORT = 262, /* VAR_DNSCRYPT_PORT */
+ YYSYMBOL_VAR_DNSCRYPT_PROVIDER = 263, /* VAR_DNSCRYPT_PROVIDER */
+ YYSYMBOL_VAR_DNSCRYPT_SECRET_KEY = 264, /* VAR_DNSCRYPT_SECRET_KEY */
+ YYSYMBOL_VAR_DNSCRYPT_PROVIDER_CERT = 265, /* VAR_DNSCRYPT_PROVIDER_CERT */
+ YYSYMBOL_VAR_DNSCRYPT_PROVIDER_CERT_ROTATED = 266, /* VAR_DNSCRYPT_PROVIDER_CERT_ROTATED */
+ YYSYMBOL_VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 267, /* VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE */
+ YYSYMBOL_VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 268, /* VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS */
+ YYSYMBOL_VAR_DNSCRYPT_NONCE_CACHE_SIZE = 269, /* VAR_DNSCRYPT_NONCE_CACHE_SIZE */
+ YYSYMBOL_VAR_DNSCRYPT_NONCE_CACHE_SLABS = 270, /* VAR_DNSCRYPT_NONCE_CACHE_SLABS */
+ YYSYMBOL_VAR_PAD_RESPONSES = 271, /* VAR_PAD_RESPONSES */
+ YYSYMBOL_VAR_PAD_RESPONSES_BLOCK_SIZE = 272, /* VAR_PAD_RESPONSES_BLOCK_SIZE */
+ YYSYMBOL_VAR_PAD_QUERIES = 273, /* VAR_PAD_QUERIES */
+ YYSYMBOL_VAR_PAD_QUERIES_BLOCK_SIZE = 274, /* VAR_PAD_QUERIES_BLOCK_SIZE */
+ YYSYMBOL_VAR_IPSECMOD_ENABLED = 275, /* VAR_IPSECMOD_ENABLED */
+ YYSYMBOL_VAR_IPSECMOD_HOOK = 276, /* VAR_IPSECMOD_HOOK */
+ YYSYMBOL_VAR_IPSECMOD_IGNORE_BOGUS = 277, /* VAR_IPSECMOD_IGNORE_BOGUS */
+ YYSYMBOL_VAR_IPSECMOD_MAX_TTL = 278, /* VAR_IPSECMOD_MAX_TTL */
+ YYSYMBOL_VAR_IPSECMOD_WHITELIST = 279, /* VAR_IPSECMOD_WHITELIST */
+ YYSYMBOL_VAR_IPSECMOD_STRICT = 280, /* VAR_IPSECMOD_STRICT */
+ YYSYMBOL_VAR_CACHEDB = 281, /* VAR_CACHEDB */
+ YYSYMBOL_VAR_CACHEDB_BACKEND = 282, /* VAR_CACHEDB_BACKEND */
+ YYSYMBOL_VAR_CACHEDB_SECRETSEED = 283, /* VAR_CACHEDB_SECRETSEED */
+ YYSYMBOL_VAR_CACHEDB_REDISHOST = 284, /* VAR_CACHEDB_REDISHOST */
+ YYSYMBOL_VAR_CACHEDB_REDISPORT = 285, /* VAR_CACHEDB_REDISPORT */
+ YYSYMBOL_VAR_CACHEDB_REDISTIMEOUT = 286, /* VAR_CACHEDB_REDISTIMEOUT */
+ YYSYMBOL_VAR_CACHEDB_REDISEXPIRERECORDS = 287, /* VAR_CACHEDB_REDISEXPIRERECORDS */
+ YYSYMBOL_VAR_CACHEDB_REDISPATH = 288, /* VAR_CACHEDB_REDISPATH */
+ YYSYMBOL_VAR_CACHEDB_REDISPASSWORD = 289, /* VAR_CACHEDB_REDISPASSWORD */
+ YYSYMBOL_VAR_CACHEDB_REDISLOGICALDB = 290, /* VAR_CACHEDB_REDISLOGICALDB */
+ YYSYMBOL_VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 291, /* VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM */
+ YYSYMBOL_VAR_FOR_UPSTREAM = 292, /* VAR_FOR_UPSTREAM */
+ YYSYMBOL_VAR_AUTH_ZONE = 293, /* VAR_AUTH_ZONE */
+ YYSYMBOL_VAR_ZONEFILE = 294, /* VAR_ZONEFILE */
+ YYSYMBOL_VAR_MASTER = 295, /* VAR_MASTER */
+ YYSYMBOL_VAR_URL = 296, /* VAR_URL */
+ YYSYMBOL_VAR_FOR_DOWNSTREAM = 297, /* VAR_FOR_DOWNSTREAM */
+ YYSYMBOL_VAR_FALLBACK_ENABLED = 298, /* VAR_FALLBACK_ENABLED */
+ YYSYMBOL_VAR_TLS_ADDITIONAL_PORT = 299, /* VAR_TLS_ADDITIONAL_PORT */
+ YYSYMBOL_VAR_LOW_RTT = 300, /* VAR_LOW_RTT */
+ YYSYMBOL_VAR_LOW_RTT_PERMIL = 301, /* VAR_LOW_RTT_PERMIL */
+ YYSYMBOL_VAR_FAST_SERVER_PERMIL = 302, /* VAR_FAST_SERVER_PERMIL */
+ YYSYMBOL_VAR_FAST_SERVER_NUM = 303, /* VAR_FAST_SERVER_NUM */
+ YYSYMBOL_VAR_ALLOW_NOTIFY = 304, /* VAR_ALLOW_NOTIFY */
+ YYSYMBOL_VAR_TLS_WIN_CERT = 305, /* VAR_TLS_WIN_CERT */
+ YYSYMBOL_VAR_TCP_CONNECTION_LIMIT = 306, /* VAR_TCP_CONNECTION_LIMIT */
+ YYSYMBOL_VAR_ANSWER_COOKIE = 307, /* VAR_ANSWER_COOKIE */
+ YYSYMBOL_VAR_COOKIE_SECRET = 308, /* VAR_COOKIE_SECRET */
+ YYSYMBOL_VAR_IP_RATELIMIT_COOKIE = 309, /* VAR_IP_RATELIMIT_COOKIE */
+ YYSYMBOL_VAR_FORWARD_NO_CACHE = 310, /* VAR_FORWARD_NO_CACHE */
+ YYSYMBOL_VAR_STUB_NO_CACHE = 311, /* VAR_STUB_NO_CACHE */
+ YYSYMBOL_VAR_LOG_SERVFAIL = 312, /* VAR_LOG_SERVFAIL */
+ YYSYMBOL_VAR_DENY_ANY = 313, /* VAR_DENY_ANY */
+ YYSYMBOL_VAR_UNKNOWN_SERVER_TIME_LIMIT = 314, /* VAR_UNKNOWN_SERVER_TIME_LIMIT */
+ YYSYMBOL_VAR_LOG_TAG_QUERYREPLY = 315, /* VAR_LOG_TAG_QUERYREPLY */
+ YYSYMBOL_VAR_DISCARD_TIMEOUT = 316, /* VAR_DISCARD_TIMEOUT */
+ YYSYMBOL_VAR_WAIT_LIMIT = 317, /* VAR_WAIT_LIMIT */
+ YYSYMBOL_VAR_WAIT_LIMIT_COOKIE = 318, /* VAR_WAIT_LIMIT_COOKIE */
+ YYSYMBOL_VAR_WAIT_LIMIT_NETBLOCK = 319, /* VAR_WAIT_LIMIT_NETBLOCK */
+ YYSYMBOL_VAR_WAIT_LIMIT_COOKIE_NETBLOCK = 320, /* VAR_WAIT_LIMIT_COOKIE_NETBLOCK */
+ YYSYMBOL_VAR_STREAM_WAIT_SIZE = 321, /* VAR_STREAM_WAIT_SIZE */
+ YYSYMBOL_VAR_TLS_CIPHERS = 322, /* VAR_TLS_CIPHERS */
+ YYSYMBOL_VAR_TLS_CIPHERSUITES = 323, /* VAR_TLS_CIPHERSUITES */
+ YYSYMBOL_VAR_TLS_USE_SNI = 324, /* VAR_TLS_USE_SNI */
+ YYSYMBOL_VAR_IPSET = 325, /* VAR_IPSET */
+ YYSYMBOL_VAR_IPSET_NAME_V4 = 326, /* VAR_IPSET_NAME_V4 */
+ YYSYMBOL_VAR_IPSET_NAME_V6 = 327, /* VAR_IPSET_NAME_V6 */
+ YYSYMBOL_VAR_TLS_SESSION_TICKET_KEYS = 328, /* VAR_TLS_SESSION_TICKET_KEYS */
+ YYSYMBOL_VAR_RPZ = 329, /* VAR_RPZ */
+ YYSYMBOL_VAR_TAGS = 330, /* VAR_TAGS */
+ YYSYMBOL_VAR_RPZ_ACTION_OVERRIDE = 331, /* VAR_RPZ_ACTION_OVERRIDE */
+ YYSYMBOL_VAR_RPZ_CNAME_OVERRIDE = 332, /* VAR_RPZ_CNAME_OVERRIDE */
+ YYSYMBOL_VAR_RPZ_LOG = 333, /* VAR_RPZ_LOG */
+ YYSYMBOL_VAR_RPZ_LOG_NAME = 334, /* VAR_RPZ_LOG_NAME */
+ YYSYMBOL_VAR_DYNLIB = 335, /* VAR_DYNLIB */
+ YYSYMBOL_VAR_DYNLIB_FILE = 336, /* VAR_DYNLIB_FILE */
+ YYSYMBOL_VAR_EDNS_CLIENT_STRING = 337, /* VAR_EDNS_CLIENT_STRING */
+ YYSYMBOL_VAR_EDNS_CLIENT_STRING_OPCODE = 338, /* VAR_EDNS_CLIENT_STRING_OPCODE */
+ YYSYMBOL_VAR_NSID = 339, /* VAR_NSID */
+ YYSYMBOL_VAR_ZONEMD_PERMISSIVE_MODE = 340, /* VAR_ZONEMD_PERMISSIVE_MODE */
+ YYSYMBOL_VAR_ZONEMD_CHECK = 341, /* VAR_ZONEMD_CHECK */
+ YYSYMBOL_VAR_ZONEMD_REJECT_ABSENCE = 342, /* VAR_ZONEMD_REJECT_ABSENCE */
+ YYSYMBOL_VAR_RPZ_SIGNAL_NXDOMAIN_RA = 343, /* VAR_RPZ_SIGNAL_NXDOMAIN_RA */
+ YYSYMBOL_VAR_INTERFACE_AUTOMATIC_PORTS = 344, /* VAR_INTERFACE_AUTOMATIC_PORTS */
+ YYSYMBOL_VAR_EDE = 345, /* VAR_EDE */
+ YYSYMBOL_VAR_INTERFACE_ACTION = 346, /* VAR_INTERFACE_ACTION */
+ YYSYMBOL_VAR_INTERFACE_VIEW = 347, /* VAR_INTERFACE_VIEW */
+ YYSYMBOL_VAR_INTERFACE_TAG = 348, /* VAR_INTERFACE_TAG */
+ YYSYMBOL_VAR_INTERFACE_TAG_ACTION = 349, /* VAR_INTERFACE_TAG_ACTION */
+ YYSYMBOL_VAR_INTERFACE_TAG_DATA = 350, /* VAR_INTERFACE_TAG_DATA */
+ YYSYMBOL_VAR_PROXY_PROTOCOL_PORT = 351, /* VAR_PROXY_PROTOCOL_PORT */
+ YYSYMBOL_VAR_STATISTICS_INHIBIT_ZERO = 352, /* VAR_STATISTICS_INHIBIT_ZERO */
+ YYSYMBOL_VAR_HARDEN_UNKNOWN_ADDITIONAL = 353, /* VAR_HARDEN_UNKNOWN_ADDITIONAL */
+ YYSYMBOL_VAR_DISABLE_EDNS_DO = 354, /* VAR_DISABLE_EDNS_DO */
+ YYSYMBOL_VAR_CACHEDB_NO_STORE = 355, /* VAR_CACHEDB_NO_STORE */
+ YYSYMBOL_VAR_LOG_DESTADDR = 356, /* VAR_LOG_DESTADDR */
+ YYSYMBOL_VAR_CACHEDB_CHECK_WHEN_SERVE_EXPIRED = 357, /* VAR_CACHEDB_CHECK_WHEN_SERVE_EXPIRED */
+ YYSYMBOL_VAR_COOKIE_SECRET_FILE = 358, /* VAR_COOKIE_SECRET_FILE */
+ YYSYMBOL_YYACCEPT = 359, /* $accept */
+ YYSYMBOL_toplevelvars = 360, /* toplevelvars */
+ YYSYMBOL_toplevelvar = 361, /* toplevelvar */
+ YYSYMBOL_force_toplevel = 362, /* force_toplevel */
+ YYSYMBOL_serverstart = 363, /* serverstart */
+ YYSYMBOL_contents_server = 364, /* contents_server */
+ YYSYMBOL_content_server = 365, /* content_server */
+ YYSYMBOL_stubstart = 366, /* stubstart */
+ YYSYMBOL_contents_stub = 367, /* contents_stub */
+ YYSYMBOL_content_stub = 368, /* content_stub */
+ YYSYMBOL_forwardstart = 369, /* forwardstart */
+ YYSYMBOL_contents_forward = 370, /* contents_forward */
+ YYSYMBOL_content_forward = 371, /* content_forward */
+ YYSYMBOL_viewstart = 372, /* viewstart */
+ YYSYMBOL_contents_view = 373, /* contents_view */
+ YYSYMBOL_content_view = 374, /* content_view */
+ YYSYMBOL_authstart = 375, /* authstart */
+ YYSYMBOL_contents_auth = 376, /* contents_auth */
+ YYSYMBOL_content_auth = 377, /* content_auth */
+ YYSYMBOL_rpz_tag = 378, /* rpz_tag */
+ YYSYMBOL_rpz_action_override = 379, /* rpz_action_override */
+ YYSYMBOL_rpz_cname_override = 380, /* rpz_cname_override */
+ YYSYMBOL_rpz_log = 381, /* rpz_log */
+ YYSYMBOL_rpz_log_name = 382, /* rpz_log_name */
+ YYSYMBOL_rpz_signal_nxdomain_ra = 383, /* rpz_signal_nxdomain_ra */
+ YYSYMBOL_rpzstart = 384, /* rpzstart */
+ YYSYMBOL_contents_rpz = 385, /* contents_rpz */
+ YYSYMBOL_content_rpz = 386, /* content_rpz */
+ YYSYMBOL_server_num_threads = 387, /* server_num_threads */
+ YYSYMBOL_server_verbosity = 388, /* server_verbosity */
+ YYSYMBOL_server_statistics_interval = 389, /* server_statistics_interval */
+ YYSYMBOL_server_statistics_cumulative = 390, /* server_statistics_cumulative */
+ YYSYMBOL_server_extended_statistics = 391, /* server_extended_statistics */
+ YYSYMBOL_server_statistics_inhibit_zero = 392, /* server_statistics_inhibit_zero */
+ YYSYMBOL_server_shm_enable = 393, /* server_shm_enable */
+ YYSYMBOL_server_shm_key = 394, /* server_shm_key */
+ YYSYMBOL_server_port = 395, /* server_port */
+ YYSYMBOL_server_send_client_subnet = 396, /* server_send_client_subnet */
+ YYSYMBOL_server_client_subnet_zone = 397, /* server_client_subnet_zone */
+ YYSYMBOL_server_client_subnet_always_forward = 398, /* server_client_subnet_always_forward */
+ YYSYMBOL_server_client_subnet_opcode = 399, /* server_client_subnet_opcode */
+ YYSYMBOL_server_max_client_subnet_ipv4 = 400, /* server_max_client_subnet_ipv4 */
+ YYSYMBOL_server_max_client_subnet_ipv6 = 401, /* server_max_client_subnet_ipv6 */
+ YYSYMBOL_server_min_client_subnet_ipv4 = 402, /* server_min_client_subnet_ipv4 */
+ YYSYMBOL_server_min_client_subnet_ipv6 = 403, /* server_min_client_subnet_ipv6 */
+ YYSYMBOL_server_max_ecs_tree_size_ipv4 = 404, /* server_max_ecs_tree_size_ipv4 */
+ YYSYMBOL_server_max_ecs_tree_size_ipv6 = 405, /* server_max_ecs_tree_size_ipv6 */
+ YYSYMBOL_server_interface = 406, /* server_interface */
+ YYSYMBOL_server_outgoing_interface = 407, /* server_outgoing_interface */
+ YYSYMBOL_server_outgoing_range = 408, /* server_outgoing_range */
+ YYSYMBOL_server_outgoing_port_permit = 409, /* server_outgoing_port_permit */
+ YYSYMBOL_server_outgoing_port_avoid = 410, /* server_outgoing_port_avoid */
+ YYSYMBOL_server_outgoing_num_tcp = 411, /* server_outgoing_num_tcp */
+ YYSYMBOL_server_incoming_num_tcp = 412, /* server_incoming_num_tcp */
+ YYSYMBOL_server_interface_automatic = 413, /* server_interface_automatic */
+ YYSYMBOL_server_interface_automatic_ports = 414, /* server_interface_automatic_ports */
+ YYSYMBOL_server_do_ip4 = 415, /* server_do_ip4 */
+ YYSYMBOL_server_do_ip6 = 416, /* server_do_ip6 */
+ YYSYMBOL_server_do_nat64 = 417, /* server_do_nat64 */
+ YYSYMBOL_server_do_udp = 418, /* server_do_udp */
+ YYSYMBOL_server_do_tcp = 419, /* server_do_tcp */
+ YYSYMBOL_server_prefer_ip4 = 420, /* server_prefer_ip4 */
+ YYSYMBOL_server_prefer_ip6 = 421, /* server_prefer_ip6 */
+ YYSYMBOL_server_tcp_mss = 422, /* server_tcp_mss */
+ YYSYMBOL_server_outgoing_tcp_mss = 423, /* server_outgoing_tcp_mss */
+ YYSYMBOL_server_tcp_idle_timeout = 424, /* server_tcp_idle_timeout */
+ YYSYMBOL_server_max_reuse_tcp_queries = 425, /* server_max_reuse_tcp_queries */
+ YYSYMBOL_server_tcp_reuse_timeout = 426, /* server_tcp_reuse_timeout */
+ YYSYMBOL_server_tcp_auth_query_timeout = 427, /* server_tcp_auth_query_timeout */
+ YYSYMBOL_server_tcp_keepalive = 428, /* server_tcp_keepalive */
+ YYSYMBOL_server_tcp_keepalive_timeout = 429, /* server_tcp_keepalive_timeout */
+ YYSYMBOL_server_sock_queue_timeout = 430, /* server_sock_queue_timeout */
+ YYSYMBOL_server_tcp_upstream = 431, /* server_tcp_upstream */
+ YYSYMBOL_server_udp_upstream_without_downstream = 432, /* server_udp_upstream_without_downstream */
+ YYSYMBOL_server_ssl_upstream = 433, /* server_ssl_upstream */
+ YYSYMBOL_server_ssl_service_key = 434, /* server_ssl_service_key */
+ YYSYMBOL_server_ssl_service_pem = 435, /* server_ssl_service_pem */
+ YYSYMBOL_server_ssl_port = 436, /* server_ssl_port */
+ YYSYMBOL_server_tls_cert_bundle = 437, /* server_tls_cert_bundle */
+ YYSYMBOL_server_tls_win_cert = 438, /* server_tls_win_cert */
+ YYSYMBOL_server_tls_additional_port = 439, /* server_tls_additional_port */
+ YYSYMBOL_server_tls_ciphers = 440, /* server_tls_ciphers */
+ YYSYMBOL_server_tls_ciphersuites = 441, /* server_tls_ciphersuites */
+ YYSYMBOL_server_tls_session_ticket_keys = 442, /* server_tls_session_ticket_keys */
+ YYSYMBOL_server_tls_use_sni = 443, /* server_tls_use_sni */
+ YYSYMBOL_server_https_port = 444, /* server_https_port */
+ YYSYMBOL_server_http_endpoint = 445, /* server_http_endpoint */
+ YYSYMBOL_server_http_max_streams = 446, /* server_http_max_streams */
+ YYSYMBOL_server_http_query_buffer_size = 447, /* server_http_query_buffer_size */
+ YYSYMBOL_server_http_response_buffer_size = 448, /* server_http_response_buffer_size */
+ YYSYMBOL_server_http_nodelay = 449, /* server_http_nodelay */
+ YYSYMBOL_server_http_notls_downstream = 450, /* server_http_notls_downstream */
+ YYSYMBOL_server_use_systemd = 451, /* server_use_systemd */
+ YYSYMBOL_server_do_daemonize = 452, /* server_do_daemonize */
+ YYSYMBOL_server_use_syslog = 453, /* server_use_syslog */
+ YYSYMBOL_server_log_time_ascii = 454, /* server_log_time_ascii */
+ YYSYMBOL_server_log_queries = 455, /* server_log_queries */
+ YYSYMBOL_server_log_replies = 456, /* server_log_replies */
+ YYSYMBOL_server_log_tag_queryreply = 457, /* server_log_tag_queryreply */
+ YYSYMBOL_server_log_servfail = 458, /* server_log_servfail */
+ YYSYMBOL_server_log_destaddr = 459, /* server_log_destaddr */
+ YYSYMBOL_server_log_local_actions = 460, /* server_log_local_actions */
+ YYSYMBOL_server_chroot = 461, /* server_chroot */
+ YYSYMBOL_server_username = 462, /* server_username */
+ YYSYMBOL_server_directory = 463, /* server_directory */
+ YYSYMBOL_server_logfile = 464, /* server_logfile */
+ YYSYMBOL_server_pidfile = 465, /* server_pidfile */
+ YYSYMBOL_server_root_hints = 466, /* server_root_hints */
+ YYSYMBOL_server_dlv_anchor_file = 467, /* server_dlv_anchor_file */
+ YYSYMBOL_server_dlv_anchor = 468, /* server_dlv_anchor */
+ YYSYMBOL_server_auto_trust_anchor_file = 469, /* server_auto_trust_anchor_file */
+ YYSYMBOL_server_trust_anchor_file = 470, /* server_trust_anchor_file */
+ YYSYMBOL_server_trusted_keys_file = 471, /* server_trusted_keys_file */
+ YYSYMBOL_server_trust_anchor = 472, /* server_trust_anchor */
+ YYSYMBOL_server_trust_anchor_signaling = 473, /* server_trust_anchor_signaling */
+ YYSYMBOL_server_root_key_sentinel = 474, /* server_root_key_sentinel */
+ YYSYMBOL_server_domain_insecure = 475, /* server_domain_insecure */
+ YYSYMBOL_server_hide_identity = 476, /* server_hide_identity */
+ YYSYMBOL_server_hide_version = 477, /* server_hide_version */
+ YYSYMBOL_server_hide_trustanchor = 478, /* server_hide_trustanchor */
+ YYSYMBOL_server_hide_http_user_agent = 479, /* server_hide_http_user_agent */
+ YYSYMBOL_server_identity = 480, /* server_identity */
+ YYSYMBOL_server_version = 481, /* server_version */
+ YYSYMBOL_server_http_user_agent = 482, /* server_http_user_agent */
+ YYSYMBOL_server_nsid = 483, /* server_nsid */
+ YYSYMBOL_server_so_rcvbuf = 484, /* server_so_rcvbuf */
+ YYSYMBOL_server_so_sndbuf = 485, /* server_so_sndbuf */
+ YYSYMBOL_server_so_reuseport = 486, /* server_so_reuseport */
+ YYSYMBOL_server_ip_transparent = 487, /* server_ip_transparent */
+ YYSYMBOL_server_ip_freebind = 488, /* server_ip_freebind */
+ YYSYMBOL_server_ip_dscp = 489, /* server_ip_dscp */
+ YYSYMBOL_server_stream_wait_size = 490, /* server_stream_wait_size */
+ YYSYMBOL_server_edns_buffer_size = 491, /* server_edns_buffer_size */
+ YYSYMBOL_server_msg_buffer_size = 492, /* server_msg_buffer_size */
+ YYSYMBOL_server_msg_cache_size = 493, /* server_msg_cache_size */
+ YYSYMBOL_server_msg_cache_slabs = 494, /* server_msg_cache_slabs */
+ YYSYMBOL_server_num_queries_per_thread = 495, /* server_num_queries_per_thread */
+ YYSYMBOL_server_jostle_timeout = 496, /* server_jostle_timeout */
+ YYSYMBOL_server_delay_close = 497, /* server_delay_close */
+ YYSYMBOL_server_udp_connect = 498, /* server_udp_connect */
+ YYSYMBOL_server_unblock_lan_zones = 499, /* server_unblock_lan_zones */
+ YYSYMBOL_server_insecure_lan_zones = 500, /* server_insecure_lan_zones */
+ YYSYMBOL_server_rrset_cache_size = 501, /* server_rrset_cache_size */
+ YYSYMBOL_server_rrset_cache_slabs = 502, /* server_rrset_cache_slabs */
+ YYSYMBOL_server_infra_host_ttl = 503, /* server_infra_host_ttl */
+ YYSYMBOL_server_infra_lame_ttl = 504, /* server_infra_lame_ttl */
+ YYSYMBOL_server_infra_cache_numhosts = 505, /* server_infra_cache_numhosts */
+ YYSYMBOL_server_infra_cache_lame_size = 506, /* server_infra_cache_lame_size */
+ YYSYMBOL_server_infra_cache_slabs = 507, /* server_infra_cache_slabs */
+ YYSYMBOL_server_infra_cache_min_rtt = 508, /* server_infra_cache_min_rtt */
+ YYSYMBOL_server_infra_cache_max_rtt = 509, /* server_infra_cache_max_rtt */
+ YYSYMBOL_server_infra_keep_probing = 510, /* server_infra_keep_probing */
+ YYSYMBOL_server_target_fetch_policy = 511, /* server_target_fetch_policy */
+ YYSYMBOL_server_harden_short_bufsize = 512, /* server_harden_short_bufsize */
+ YYSYMBOL_server_harden_large_queries = 513, /* server_harden_large_queries */
+ YYSYMBOL_server_harden_glue = 514, /* server_harden_glue */
+ YYSYMBOL_server_harden_dnssec_stripped = 515, /* server_harden_dnssec_stripped */
+ YYSYMBOL_server_harden_below_nxdomain = 516, /* server_harden_below_nxdomain */
+ YYSYMBOL_server_harden_referral_path = 517, /* server_harden_referral_path */
+ YYSYMBOL_server_harden_algo_downgrade = 518, /* server_harden_algo_downgrade */
+ YYSYMBOL_server_harden_unknown_additional = 519, /* server_harden_unknown_additional */
+ YYSYMBOL_server_use_caps_for_id = 520, /* server_use_caps_for_id */
+ YYSYMBOL_server_caps_whitelist = 521, /* server_caps_whitelist */
+ YYSYMBOL_server_private_address = 522, /* server_private_address */
+ YYSYMBOL_server_private_domain = 523, /* server_private_domain */
+ YYSYMBOL_server_prefetch = 524, /* server_prefetch */
+ YYSYMBOL_server_prefetch_key = 525, /* server_prefetch_key */
+ YYSYMBOL_server_deny_any = 526, /* server_deny_any */
+ YYSYMBOL_server_unwanted_reply_threshold = 527, /* server_unwanted_reply_threshold */
+ YYSYMBOL_server_do_not_query_address = 528, /* server_do_not_query_address */
+ YYSYMBOL_server_do_not_query_localhost = 529, /* server_do_not_query_localhost */
+ YYSYMBOL_server_access_control = 530, /* server_access_control */
+ YYSYMBOL_server_interface_action = 531, /* server_interface_action */
+ YYSYMBOL_server_module_conf = 532, /* server_module_conf */
+ YYSYMBOL_server_val_override_date = 533, /* server_val_override_date */
+ YYSYMBOL_server_val_sig_skew_min = 534, /* server_val_sig_skew_min */
+ YYSYMBOL_server_val_sig_skew_max = 535, /* server_val_sig_skew_max */
+ YYSYMBOL_server_val_max_restart = 536, /* server_val_max_restart */
+ YYSYMBOL_server_cache_max_ttl = 537, /* server_cache_max_ttl */
+ YYSYMBOL_server_cache_max_negative_ttl = 538, /* server_cache_max_negative_ttl */
+ YYSYMBOL_server_cache_min_negative_ttl = 539, /* server_cache_min_negative_ttl */
+ YYSYMBOL_server_cache_min_ttl = 540, /* server_cache_min_ttl */
+ YYSYMBOL_server_bogus_ttl = 541, /* server_bogus_ttl */
+ YYSYMBOL_server_val_clean_additional = 542, /* server_val_clean_additional */
+ YYSYMBOL_server_val_permissive_mode = 543, /* server_val_permissive_mode */
+ YYSYMBOL_server_aggressive_nsec = 544, /* server_aggressive_nsec */
+ YYSYMBOL_server_ignore_cd_flag = 545, /* server_ignore_cd_flag */
+ YYSYMBOL_server_disable_edns_do = 546, /* server_disable_edns_do */
+ YYSYMBOL_server_serve_expired = 547, /* server_serve_expired */
+ YYSYMBOL_server_serve_expired_ttl = 548, /* server_serve_expired_ttl */
+ YYSYMBOL_server_serve_expired_ttl_reset = 549, /* server_serve_expired_ttl_reset */
+ YYSYMBOL_server_serve_expired_reply_ttl = 550, /* server_serve_expired_reply_ttl */
+ YYSYMBOL_server_serve_expired_client_timeout = 551, /* server_serve_expired_client_timeout */
+ YYSYMBOL_server_ede_serve_expired = 552, /* server_ede_serve_expired */
+ YYSYMBOL_server_serve_original_ttl = 553, /* server_serve_original_ttl */
+ YYSYMBOL_server_fake_dsa = 554, /* server_fake_dsa */
+ YYSYMBOL_server_fake_sha1 = 555, /* server_fake_sha1 */
+ YYSYMBOL_server_val_log_level = 556, /* server_val_log_level */
+ YYSYMBOL_server_val_nsec3_keysize_iterations = 557, /* server_val_nsec3_keysize_iterations */
+ YYSYMBOL_server_zonemd_permissive_mode = 558, /* server_zonemd_permissive_mode */
+ YYSYMBOL_server_add_holddown = 559, /* server_add_holddown */
+ YYSYMBOL_server_del_holddown = 560, /* server_del_holddown */
+ YYSYMBOL_server_keep_missing = 561, /* server_keep_missing */
+ YYSYMBOL_server_permit_small_holddown = 562, /* server_permit_small_holddown */
+ YYSYMBOL_server_key_cache_size = 563, /* server_key_cache_size */
+ YYSYMBOL_server_key_cache_slabs = 564, /* server_key_cache_slabs */
+ YYSYMBOL_server_neg_cache_size = 565, /* server_neg_cache_size */
+ YYSYMBOL_server_local_zone = 566, /* server_local_zone */
+ YYSYMBOL_server_local_data = 567, /* server_local_data */
+ YYSYMBOL_server_local_data_ptr = 568, /* server_local_data_ptr */
+ YYSYMBOL_server_minimal_responses = 569, /* server_minimal_responses */
+ YYSYMBOL_server_rrset_roundrobin = 570, /* server_rrset_roundrobin */
+ YYSYMBOL_server_unknown_server_time_limit = 571, /* server_unknown_server_time_limit */
+ YYSYMBOL_server_discard_timeout = 572, /* server_discard_timeout */
+ YYSYMBOL_server_wait_limit = 573, /* server_wait_limit */
+ YYSYMBOL_server_wait_limit_cookie = 574, /* server_wait_limit_cookie */
+ YYSYMBOL_server_wait_limit_netblock = 575, /* server_wait_limit_netblock */
+ YYSYMBOL_server_wait_limit_cookie_netblock = 576, /* server_wait_limit_cookie_netblock */
+ YYSYMBOL_server_max_udp_size = 577, /* server_max_udp_size */
+ YYSYMBOL_server_dns64_prefix = 578, /* server_dns64_prefix */
+ YYSYMBOL_server_dns64_synthall = 579, /* server_dns64_synthall */
+ YYSYMBOL_server_dns64_ignore_aaaa = 580, /* server_dns64_ignore_aaaa */
+ YYSYMBOL_server_nat64_prefix = 581, /* server_nat64_prefix */
+ YYSYMBOL_server_define_tag = 582, /* server_define_tag */
+ YYSYMBOL_server_local_zone_tag = 583, /* server_local_zone_tag */
+ YYSYMBOL_server_access_control_tag = 584, /* server_access_control_tag */
+ YYSYMBOL_server_access_control_tag_action = 585, /* server_access_control_tag_action */
+ YYSYMBOL_server_access_control_tag_data = 586, /* server_access_control_tag_data */
+ YYSYMBOL_server_local_zone_override = 587, /* server_local_zone_override */
+ YYSYMBOL_server_access_control_view = 588, /* server_access_control_view */
+ YYSYMBOL_server_interface_tag = 589, /* server_interface_tag */
+ YYSYMBOL_server_interface_tag_action = 590, /* server_interface_tag_action */
+ YYSYMBOL_server_interface_tag_data = 591, /* server_interface_tag_data */
+ YYSYMBOL_server_interface_view = 592, /* server_interface_view */
+ YYSYMBOL_server_response_ip_tag = 593, /* server_response_ip_tag */
+ YYSYMBOL_server_ip_ratelimit = 594, /* server_ip_ratelimit */
+ YYSYMBOL_server_ip_ratelimit_cookie = 595, /* server_ip_ratelimit_cookie */
+ YYSYMBOL_server_ratelimit = 596, /* server_ratelimit */
+ YYSYMBOL_server_ip_ratelimit_size = 597, /* server_ip_ratelimit_size */
+ YYSYMBOL_server_ratelimit_size = 598, /* server_ratelimit_size */
+ YYSYMBOL_server_ip_ratelimit_slabs = 599, /* server_ip_ratelimit_slabs */
+ YYSYMBOL_server_ratelimit_slabs = 600, /* server_ratelimit_slabs */
+ YYSYMBOL_server_ratelimit_for_domain = 601, /* server_ratelimit_for_domain */
+ YYSYMBOL_server_ratelimit_below_domain = 602, /* server_ratelimit_below_domain */
+ YYSYMBOL_server_ip_ratelimit_factor = 603, /* server_ip_ratelimit_factor */
+ YYSYMBOL_server_ratelimit_factor = 604, /* server_ratelimit_factor */
+ YYSYMBOL_server_ip_ratelimit_backoff = 605, /* server_ip_ratelimit_backoff */
+ YYSYMBOL_server_ratelimit_backoff = 606, /* server_ratelimit_backoff */
+ YYSYMBOL_server_outbound_msg_retry = 607, /* server_outbound_msg_retry */
+ YYSYMBOL_server_max_sent_count = 608, /* server_max_sent_count */
+ YYSYMBOL_server_max_query_restarts = 609, /* server_max_query_restarts */
+ YYSYMBOL_server_low_rtt = 610, /* server_low_rtt */
+ YYSYMBOL_server_fast_server_num = 611, /* server_fast_server_num */
+ YYSYMBOL_server_fast_server_permil = 612, /* server_fast_server_permil */
+ YYSYMBOL_server_qname_minimisation = 613, /* server_qname_minimisation */
+ YYSYMBOL_server_qname_minimisation_strict = 614, /* server_qname_minimisation_strict */
+ YYSYMBOL_server_pad_responses = 615, /* server_pad_responses */
+ YYSYMBOL_server_pad_responses_block_size = 616, /* server_pad_responses_block_size */
+ YYSYMBOL_server_pad_queries = 617, /* server_pad_queries */
+ YYSYMBOL_server_pad_queries_block_size = 618, /* server_pad_queries_block_size */
+ YYSYMBOL_server_ipsecmod_enabled = 619, /* server_ipsecmod_enabled */
+ YYSYMBOL_server_ipsecmod_ignore_bogus = 620, /* server_ipsecmod_ignore_bogus */
+ YYSYMBOL_server_ipsecmod_hook = 621, /* server_ipsecmod_hook */
+ YYSYMBOL_server_ipsecmod_max_ttl = 622, /* server_ipsecmod_max_ttl */
+ YYSYMBOL_server_ipsecmod_whitelist = 623, /* server_ipsecmod_whitelist */
+ YYSYMBOL_server_ipsecmod_strict = 624, /* server_ipsecmod_strict */
+ YYSYMBOL_server_edns_client_string = 625, /* server_edns_client_string */
+ YYSYMBOL_server_edns_client_string_opcode = 626, /* server_edns_client_string_opcode */
+ YYSYMBOL_server_ede = 627, /* server_ede */
+ YYSYMBOL_server_proxy_protocol_port = 628, /* server_proxy_protocol_port */
+ YYSYMBOL_stub_name = 629, /* stub_name */
+ YYSYMBOL_stub_host = 630, /* stub_host */
+ YYSYMBOL_stub_addr = 631, /* stub_addr */
+ YYSYMBOL_stub_first = 632, /* stub_first */
+ YYSYMBOL_stub_no_cache = 633, /* stub_no_cache */
+ YYSYMBOL_stub_ssl_upstream = 634, /* stub_ssl_upstream */
+ YYSYMBOL_stub_tcp_upstream = 635, /* stub_tcp_upstream */
+ YYSYMBOL_stub_prime = 636, /* stub_prime */
+ YYSYMBOL_forward_name = 637, /* forward_name */
+ YYSYMBOL_forward_host = 638, /* forward_host */
+ YYSYMBOL_forward_addr = 639, /* forward_addr */
+ YYSYMBOL_forward_first = 640, /* forward_first */
+ YYSYMBOL_forward_no_cache = 641, /* forward_no_cache */
+ YYSYMBOL_forward_ssl_upstream = 642, /* forward_ssl_upstream */
+ YYSYMBOL_forward_tcp_upstream = 643, /* forward_tcp_upstream */
+ YYSYMBOL_auth_name = 644, /* auth_name */
+ YYSYMBOL_auth_zonefile = 645, /* auth_zonefile */
+ YYSYMBOL_auth_master = 646, /* auth_master */
+ YYSYMBOL_auth_url = 647, /* auth_url */
+ YYSYMBOL_auth_allow_notify = 648, /* auth_allow_notify */
+ YYSYMBOL_auth_zonemd_check = 649, /* auth_zonemd_check */
+ YYSYMBOL_auth_zonemd_reject_absence = 650, /* auth_zonemd_reject_absence */
+ YYSYMBOL_auth_for_downstream = 651, /* auth_for_downstream */
+ YYSYMBOL_auth_for_upstream = 652, /* auth_for_upstream */
+ YYSYMBOL_auth_fallback_enabled = 653, /* auth_fallback_enabled */
+ YYSYMBOL_view_name = 654, /* view_name */
+ YYSYMBOL_view_local_zone = 655, /* view_local_zone */
+ YYSYMBOL_view_response_ip = 656, /* view_response_ip */
+ YYSYMBOL_view_response_ip_data = 657, /* view_response_ip_data */
+ YYSYMBOL_view_local_data = 658, /* view_local_data */
+ YYSYMBOL_view_local_data_ptr = 659, /* view_local_data_ptr */
+ YYSYMBOL_view_first = 660, /* view_first */
+ YYSYMBOL_rcstart = 661, /* rcstart */
+ YYSYMBOL_contents_rc = 662, /* contents_rc */
+ YYSYMBOL_content_rc = 663, /* content_rc */
+ YYSYMBOL_rc_control_enable = 664, /* rc_control_enable */
+ YYSYMBOL_rc_control_port = 665, /* rc_control_port */
+ YYSYMBOL_rc_control_interface = 666, /* rc_control_interface */
+ YYSYMBOL_rc_control_use_cert = 667, /* rc_control_use_cert */
+ YYSYMBOL_rc_server_key_file = 668, /* rc_server_key_file */
+ YYSYMBOL_rc_server_cert_file = 669, /* rc_server_cert_file */
+ YYSYMBOL_rc_control_key_file = 670, /* rc_control_key_file */
+ YYSYMBOL_rc_control_cert_file = 671, /* rc_control_cert_file */
+ YYSYMBOL_dtstart = 672, /* dtstart */
+ YYSYMBOL_contents_dt = 673, /* contents_dt */
+ YYSYMBOL_content_dt = 674, /* content_dt */
+ YYSYMBOL_dt_dnstap_enable = 675, /* dt_dnstap_enable */
+ YYSYMBOL_dt_dnstap_bidirectional = 676, /* dt_dnstap_bidirectional */
+ YYSYMBOL_dt_dnstap_socket_path = 677, /* dt_dnstap_socket_path */
+ YYSYMBOL_dt_dnstap_ip = 678, /* dt_dnstap_ip */
+ YYSYMBOL_dt_dnstap_tls = 679, /* dt_dnstap_tls */
+ YYSYMBOL_dt_dnstap_tls_server_name = 680, /* dt_dnstap_tls_server_name */
+ YYSYMBOL_dt_dnstap_tls_cert_bundle = 681, /* dt_dnstap_tls_cert_bundle */
+ YYSYMBOL_dt_dnstap_tls_client_key_file = 682, /* dt_dnstap_tls_client_key_file */
+ YYSYMBOL_dt_dnstap_tls_client_cert_file = 683, /* dt_dnstap_tls_client_cert_file */
+ YYSYMBOL_dt_dnstap_send_identity = 684, /* dt_dnstap_send_identity */
+ YYSYMBOL_dt_dnstap_send_version = 685, /* dt_dnstap_send_version */
+ YYSYMBOL_dt_dnstap_identity = 686, /* dt_dnstap_identity */
+ YYSYMBOL_dt_dnstap_version = 687, /* dt_dnstap_version */
+ YYSYMBOL_dt_dnstap_log_resolver_query_messages = 688, /* dt_dnstap_log_resolver_query_messages */
+ YYSYMBOL_dt_dnstap_log_resolver_response_messages = 689, /* dt_dnstap_log_resolver_response_messages */
+ YYSYMBOL_dt_dnstap_log_client_query_messages = 690, /* dt_dnstap_log_client_query_messages */
+ YYSYMBOL_dt_dnstap_log_client_response_messages = 691, /* dt_dnstap_log_client_response_messages */
+ YYSYMBOL_dt_dnstap_log_forwarder_query_messages = 692, /* dt_dnstap_log_forwarder_query_messages */
+ YYSYMBOL_dt_dnstap_log_forwarder_response_messages = 693, /* dt_dnstap_log_forwarder_response_messages */
+ YYSYMBOL_dt_dnstap_sample_rate = 694, /* dt_dnstap_sample_rate */
+ YYSYMBOL_pythonstart = 695, /* pythonstart */
+ YYSYMBOL_contents_py = 696, /* contents_py */
+ YYSYMBOL_content_py = 697, /* content_py */
+ YYSYMBOL_py_script = 698, /* py_script */
+ YYSYMBOL_dynlibstart = 699, /* dynlibstart */
+ YYSYMBOL_contents_dl = 700, /* contents_dl */
+ YYSYMBOL_content_dl = 701, /* content_dl */
+ YYSYMBOL_dl_file = 702, /* dl_file */
+ YYSYMBOL_server_disable_dnssec_lame_check = 703, /* server_disable_dnssec_lame_check */
+ YYSYMBOL_server_log_identity = 704, /* server_log_identity */
+ YYSYMBOL_server_response_ip = 705, /* server_response_ip */
+ YYSYMBOL_server_response_ip_data = 706, /* server_response_ip_data */
+ YYSYMBOL_dnscstart = 707, /* dnscstart */
+ YYSYMBOL_contents_dnsc = 708, /* contents_dnsc */
+ YYSYMBOL_content_dnsc = 709, /* content_dnsc */
+ YYSYMBOL_dnsc_dnscrypt_enable = 710, /* dnsc_dnscrypt_enable */
+ YYSYMBOL_dnsc_dnscrypt_port = 711, /* dnsc_dnscrypt_port */
+ YYSYMBOL_dnsc_dnscrypt_provider = 712, /* dnsc_dnscrypt_provider */
+ YYSYMBOL_dnsc_dnscrypt_provider_cert = 713, /* dnsc_dnscrypt_provider_cert */
+ YYSYMBOL_dnsc_dnscrypt_provider_cert_rotated = 714, /* dnsc_dnscrypt_provider_cert_rotated */
+ YYSYMBOL_dnsc_dnscrypt_secret_key = 715, /* dnsc_dnscrypt_secret_key */
+ YYSYMBOL_dnsc_dnscrypt_shared_secret_cache_size = 716, /* dnsc_dnscrypt_shared_secret_cache_size */
+ YYSYMBOL_dnsc_dnscrypt_shared_secret_cache_slabs = 717, /* dnsc_dnscrypt_shared_secret_cache_slabs */
+ YYSYMBOL_dnsc_dnscrypt_nonce_cache_size = 718, /* dnsc_dnscrypt_nonce_cache_size */
+ YYSYMBOL_dnsc_dnscrypt_nonce_cache_slabs = 719, /* dnsc_dnscrypt_nonce_cache_slabs */
+ YYSYMBOL_cachedbstart = 720, /* cachedbstart */
+ YYSYMBOL_contents_cachedb = 721, /* contents_cachedb */
+ YYSYMBOL_content_cachedb = 722, /* content_cachedb */
+ YYSYMBOL_cachedb_backend_name = 723, /* cachedb_backend_name */
+ YYSYMBOL_cachedb_secret_seed = 724, /* cachedb_secret_seed */
+ YYSYMBOL_cachedb_no_store = 725, /* cachedb_no_store */
+ YYSYMBOL_cachedb_check_when_serve_expired = 726, /* cachedb_check_when_serve_expired */
+ YYSYMBOL_redis_server_host = 727, /* redis_server_host */
+ YYSYMBOL_redis_server_port = 728, /* redis_server_port */
+ YYSYMBOL_redis_server_path = 729, /* redis_server_path */
+ YYSYMBOL_redis_server_password = 730, /* redis_server_password */
+ YYSYMBOL_redis_timeout = 731, /* redis_timeout */
+ YYSYMBOL_redis_expire_records = 732, /* redis_expire_records */
+ YYSYMBOL_redis_logical_db = 733, /* redis_logical_db */
+ YYSYMBOL_server_tcp_connection_limit = 734, /* server_tcp_connection_limit */
+ YYSYMBOL_server_answer_cookie = 735, /* server_answer_cookie */
+ YYSYMBOL_server_cookie_secret = 736, /* server_cookie_secret */
+ YYSYMBOL_server_cookie_secret_file = 737, /* server_cookie_secret_file */
+ YYSYMBOL_ipsetstart = 738, /* ipsetstart */
+ YYSYMBOL_contents_ipset = 739, /* contents_ipset */
+ YYSYMBOL_content_ipset = 740, /* content_ipset */
+ YYSYMBOL_ipset_name_v4 = 741, /* ipset_name_v4 */
+ YYSYMBOL_ipset_name_v6 = 742 /* ipset_name_v6 */
};
typedef enum yysymbol_kind_t yysymbol_kind_t;
@@ -1186,19 +1190,19 @@ union yyalloc
/* YYFINAL -- State number of the termination state. */
#define YYFINAL 2
/* YYLAST -- Last index in YYTABLE. */
-#define YYLAST 761
+#define YYLAST 815
/* YYNTOKENS -- Number of terminals. */
-#define YYNTOKENS 357
+#define YYNTOKENS 359
/* YYNNTS -- Number of nonterminals. */
-#define YYNNTS 382
+#define YYNNTS 384
/* YYNRULES -- Number of rules. */
-#define YYNRULES 741
+#define YYNRULES 745
/* YYNSTATES -- Number of states. */
-#define YYNSTATES 1111
+#define YYNSTATES 1120
/* YYMAXUTOK -- Last valid token kind. */
-#define YYMAXUTOK 611
+#define YYMAXUTOK 613
/* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM
@@ -1273,88 +1277,88 @@ static const yytype_int16 yytranslate[] =
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
+ 355, 356, 357, 358
};
#if YYDEBUG
/* YYRLINE[YYN] -- Source line where rule number YYN was defined. */
static const yytype_int16 yyrline[] =
{
- 0, 209, 209, 209, 210, 210, 211, 211, 212, 212,
- 212, 213, 213, 214, 214, 215, 215, 216, 218, 225,
- 231, 232, 233, 233, 233, 234, 234, 235, 235, 235,
- 236, 236, 236, 237, 237, 237, 238, 238, 239, 240,
- 240, 240, 241, 241, 241, 242, 242, 243, 243, 244,
- 244, 245, 245, 246, 246, 247, 247, 248, 248, 249,
- 249, 250, 250, 250, 251, 251, 252, 252, 252, 253,
- 253, 253, 254, 254, 255, 255, 256, 256, 257, 257,
- 258, 258, 258, 259, 259, 260, 260, 261, 261, 261,
- 262, 262, 263, 263, 264, 264, 265, 265, 265, 266,
- 266, 267, 267, 268, 268, 269, 269, 270, 270, 271,
- 271, 272, 272, 273, 273, 274, 274, 274, 275, 275,
- 275, 276, 276, 276, 277, 277, 277, 277, 278, 279,
- 279, 279, 280, 280, 280, 281, 281, 282, 282, 283,
- 283, 283, 284, 284, 284, 285, 285, 286, 286, 286,
- 287, 288, 288, 288, 289, 289, 289, 290, 290, 291,
- 291, 292, 292, 293, 294, 294, 295, 295, 296, 296,
- 297, 297, 298, 298, 299, 299, 300, 300, 301, 301,
- 302, 302, 303, 303, 304, 305, 305, 306, 306, 306,
- 307, 307, 308, 308, 309, 309, 310, 310, 310, 311,
- 311, 312, 313, 313, 314, 314, 315, 316, 316, 317,
- 317, 318, 318, 318, 319, 319, 320, 320, 320, 321,
- 321, 321, 322, 322, 323, 324, 324, 325, 325, 326,
- 326, 327, 327, 328, 328, 328, 329, 329, 329, 330,
- 330, 330, 331, 331, 332, 332, 332, 333, 333, 334,
- 334, 335, 335, 336, 336, 336, 337, 337, 338, 338,
- 339, 339, 340, 340, 341, 341, 342, 342, 343, 343,
- 344, 346, 360, 361, 362, 362, 362, 362, 362, 363,
- 363, 363, 365, 379, 380, 381, 381, 381, 381, 382,
- 382, 382, 384, 400, 401, 402, 402, 402, 402, 403,
- 403, 403, 405, 426, 427, 428, 428, 428, 428, 429,
- 429, 429, 430, 430, 430, 433, 452, 469, 477, 487,
- 494, 504, 523, 524, 525, 525, 525, 525, 525, 526,
- 526, 526, 527, 527, 527, 527, 529, 538, 547, 558,
- 567, 576, 585, 594, 605, 614, 626, 640, 655, 666,
- 683, 700, 717, 734, 749, 764, 777, 792, 801, 810,
- 819, 828, 837, 846, 853, 862, 871, 880, 889, 898,
- 907, 916, 925, 934, 947, 958, 969, 980, 989, 1002,
- 1015, 1024, 1033, 1042, 1049, 1056, 1065, 1072, 1081, 1089,
- 1096, 1103, 1111, 1120, 1128, 1144, 1152, 1160, 1168, 1176,
- 1184, 1193, 1202, 1216, 1225, 1234, 1243, 1252, 1261, 1270,
- 1279, 1286, 1293, 1319, 1327, 1334, 1341, 1348, 1355, 1363,
- 1371, 1379, 1386, 1397, 1408, 1415, 1424, 1433, 1442, 1451,
- 1458, 1465, 1472, 1488, 1496, 1504, 1514, 1524, 1534, 1548,
- 1556, 1569, 1580, 1588, 1601, 1610, 1619, 1628, 1637, 1647,
- 1657, 1665, 1678, 1687, 1695, 1704, 1712, 1725, 1734, 1743,
- 1753, 1760, 1770, 1780, 1790, 1800, 1810, 1820, 1830, 1840,
- 1850, 1857, 1864, 1871, 1880, 1889, 1898, 1907, 1914, 1924,
- 1932, 1941, 1948, 1966, 1979, 1992, 2005, 2014, 2023, 2032,
- 2041, 2050, 2060, 2070, 2081, 2090, 2099, 2108, 2117, 2126,
- 2135, 2144, 2153, 2162, 2175, 2188, 2197, 2204, 2213, 2222,
- 2231, 2240, 2250, 2258, 2271, 2279, 2335, 2342, 2357, 2367,
- 2377, 2384, 2391, 2398, 2405, 2420, 2435, 2442, 2449, 2458,
- 2466, 2473, 2487, 2508, 2529, 2541, 2553, 2565, 2574, 2595,
- 2607, 2619, 2628, 2649, 2658, 2667, 2676, 2684, 2692, 2705,
- 2718, 2733, 2748, 2757, 2766, 2776, 2786, 2795, 2804, 2813,
- 2819, 2828, 2837, 2847, 2857, 2867, 2876, 2886, 2895, 2908,
- 2921, 2933, 2947, 2959, 2973, 2982, 2993, 3002, 3009, 3019,
- 3026, 3033, 3042, 3051, 3061, 3071, 3081, 3091, 3098, 3105,
- 3114, 3123, 3133, 3143, 3153, 3160, 3167, 3174, 3182, 3192,
- 3202, 3212, 3222, 3232, 3242, 3298, 3308, 3316, 3324, 3339,
- 3348, 3354, 3355, 3356, 3356, 3356, 3357, 3357, 3357, 3358,
- 3358, 3360, 3370, 3379, 3386, 3393, 3400, 3407, 3414, 3421,
- 3427, 3428, 3429, 3429, 3429, 3430, 3430, 3430, 3431, 3432,
- 3432, 3433, 3433, 3434, 3434, 3435, 3436, 3437, 3438, 3439,
- 3440, 3442, 3451, 3461, 3468, 3475, 3484, 3491, 3498, 3505,
- 3512, 3521, 3530, 3537, 3544, 3554, 3564, 3574, 3584, 3594,
- 3604, 3610, 3611, 3612, 3614, 3621, 3627, 3628, 3629, 3631,
- 3638, 3648, 3655, 3664, 3672, 3678, 3679, 3681, 3681, 3681,
- 3682, 3682, 3683, 3684, 3685, 3686, 3687, 3689, 3698, 3707,
- 3714, 3723, 3730, 3739, 3747, 3760, 3768, 3781, 3787, 3788,
- 3789, 3789, 3790, 3790, 3790, 3791, 3791, 3791, 3792, 3792,
- 3792, 3794, 3806, 3818, 3831, 3844, 3856, 3871, 3883, 3895,
- 3908, 3921, 3936, 3947, 3956, 3972, 3978, 3979, 3980, 3980,
- 3982, 3997
+ 0, 211, 211, 211, 212, 212, 213, 213, 214, 214,
+ 214, 215, 215, 216, 216, 217, 217, 218, 220, 227,
+ 233, 234, 235, 235, 235, 236, 236, 237, 237, 237,
+ 238, 238, 238, 239, 239, 239, 240, 240, 241, 242,
+ 242, 242, 243, 243, 243, 244, 244, 245, 245, 246,
+ 246, 247, 247, 248, 248, 249, 249, 250, 250, 251,
+ 251, 252, 252, 252, 253, 253, 254, 254, 254, 255,
+ 255, 255, 256, 256, 257, 257, 258, 258, 259, 259,
+ 260, 260, 260, 261, 261, 262, 262, 263, 263, 263,
+ 264, 264, 265, 265, 266, 266, 267, 267, 267, 268,
+ 268, 269, 269, 270, 270, 271, 271, 272, 272, 273,
+ 273, 274, 274, 275, 275, 276, 276, 276, 277, 277,
+ 277, 278, 278, 278, 279, 279, 279, 279, 280, 281,
+ 281, 281, 282, 282, 282, 283, 283, 284, 284, 285,
+ 285, 285, 286, 286, 286, 287, 287, 288, 288, 288,
+ 289, 290, 290, 290, 291, 291, 291, 292, 292, 293,
+ 293, 294, 294, 295, 296, 296, 297, 297, 298, 298,
+ 299, 299, 300, 300, 301, 301, 302, 302, 303, 303,
+ 304, 304, 305, 305, 306, 307, 307, 308, 308, 308,
+ 309, 309, 310, 310, 311, 311, 312, 312, 312, 313,
+ 313, 314, 315, 315, 316, 316, 317, 318, 318, 319,
+ 319, 320, 320, 320, 321, 321, 322, 322, 322, 323,
+ 323, 323, 324, 324, 325, 326, 326, 327, 327, 328,
+ 328, 329, 329, 330, 330, 330, 331, 331, 331, 332,
+ 332, 332, 333, 333, 334, 334, 334, 335, 335, 336,
+ 336, 337, 337, 338, 338, 338, 339, 339, 340, 340,
+ 341, 341, 342, 342, 343, 343, 344, 344, 345, 345,
+ 346, 346, 348, 362, 364, 370, 370, 370, 370, 370,
+ 371, 371, 371, 373, 387, 389, 395, 395, 395, 395,
+ 396, 396, 396, 398, 412, 414, 420, 420, 420, 420,
+ 421, 421, 421, 423, 444, 445, 446, 446, 446, 446,
+ 447, 447, 447, 448, 448, 448, 451, 470, 487, 495,
+ 505, 512, 522, 541, 542, 543, 543, 543, 543, 543,
+ 544, 544, 544, 545, 545, 545, 545, 547, 556, 565,
+ 576, 585, 594, 603, 612, 623, 632, 644, 658, 673,
+ 684, 701, 718, 735, 752, 767, 782, 795, 810, 819,
+ 828, 837, 846, 855, 864, 871, 880, 889, 898, 907,
+ 916, 925, 934, 943, 952, 965, 976, 987, 998, 1007,
+ 1020, 1033, 1042, 1051, 1060, 1067, 1074, 1083, 1090, 1099,
+ 1107, 1114, 1121, 1129, 1138, 1146, 1162, 1170, 1178, 1186,
+ 1194, 1202, 1211, 1220, 1234, 1243, 1252, 1261, 1270, 1279,
+ 1288, 1297, 1304, 1311, 1337, 1345, 1352, 1359, 1366, 1373,
+ 1381, 1389, 1397, 1404, 1415, 1426, 1433, 1442, 1451, 1460,
+ 1469, 1476, 1483, 1490, 1506, 1514, 1522, 1532, 1542, 1552,
+ 1566, 1574, 1587, 1598, 1606, 1619, 1628, 1637, 1646, 1655,
+ 1665, 1675, 1683, 1696, 1705, 1713, 1722, 1730, 1743, 1752,
+ 1761, 1771, 1778, 1788, 1798, 1808, 1818, 1828, 1838, 1848,
+ 1858, 1868, 1875, 1882, 1889, 1898, 1907, 1916, 1925, 1932,
+ 1942, 1950, 1959, 1966, 1984, 1997, 2010, 2023, 2032, 2041,
+ 2050, 2059, 2068, 2078, 2088, 2099, 2108, 2117, 2126, 2135,
+ 2144, 2153, 2162, 2171, 2180, 2193, 2206, 2215, 2222, 2231,
+ 2240, 2249, 2258, 2268, 2276, 2289, 2297, 2353, 2360, 2375,
+ 2385, 2395, 2402, 2409, 2416, 2423, 2438, 2453, 2460, 2467,
+ 2476, 2484, 2491, 2505, 2526, 2547, 2559, 2571, 2583, 2592,
+ 2613, 2625, 2637, 2646, 2667, 2676, 2685, 2694, 2702, 2710,
+ 2723, 2736, 2751, 2766, 2775, 2784, 2794, 2804, 2813, 2822,
+ 2831, 2837, 2846, 2855, 2865, 2875, 2885, 2894, 2904, 2913,
+ 2926, 2939, 2951, 2965, 2977, 2991, 3000, 3011, 3020, 3027,
+ 3037, 3044, 3051, 3060, 3069, 3079, 3089, 3099, 3109, 3116,
+ 3123, 3132, 3141, 3151, 3161, 3171, 3178, 3185, 3192, 3200,
+ 3210, 3220, 3230, 3240, 3250, 3260, 3316, 3326, 3334, 3342,
+ 3357, 3366, 3372, 3373, 3374, 3374, 3374, 3375, 3375, 3375,
+ 3376, 3376, 3378, 3388, 3397, 3404, 3411, 3418, 3425, 3432,
+ 3439, 3445, 3446, 3447, 3447, 3447, 3448, 3448, 3448, 3449,
+ 3450, 3450, 3451, 3451, 3452, 3452, 3453, 3454, 3455, 3456,
+ 3457, 3458, 3459, 3461, 3470, 3480, 3487, 3494, 3503, 3510,
+ 3517, 3524, 3531, 3540, 3549, 3556, 3563, 3573, 3583, 3593,
+ 3603, 3613, 3623, 3634, 3640, 3641, 3642, 3644, 3651, 3657,
+ 3658, 3659, 3661, 3668, 3678, 3685, 3694, 3702, 3708, 3709,
+ 3711, 3711, 3711, 3712, 3712, 3713, 3714, 3715, 3716, 3717,
+ 3719, 3728, 3737, 3744, 3753, 3760, 3769, 3777, 3790, 3798,
+ 3811, 3817, 3818, 3819, 3819, 3820, 3820, 3820, 3821, 3821,
+ 3821, 3822, 3822, 3822, 3824, 3836, 3848, 3861, 3874, 3886,
+ 3901, 3913, 3925, 3938, 3951, 3966, 3977, 3986, 4002, 4009,
+ 4015, 4016, 4017, 4017, 4019, 4034
};
#endif
@@ -1440,12 +1444,13 @@ static const char *const yytname[] =
"VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES",
"VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES",
"VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES",
- "VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES", "VAR_RESPONSE_IP_TAG",
- "VAR_RESPONSE_IP", "VAR_RESPONSE_IP_DATA", "VAR_HARDEN_ALGO_DOWNGRADE",
- "VAR_IP_TRANSPARENT", "VAR_IP_DSCP", "VAR_DISABLE_DNSSEC_LAME_CHECK",
- "VAR_IP_RATELIMIT", "VAR_IP_RATELIMIT_SLABS", "VAR_IP_RATELIMIT_SIZE",
- "VAR_RATELIMIT", "VAR_RATELIMIT_SLABS", "VAR_RATELIMIT_SIZE",
- "VAR_OUTBOUND_MSG_RETRY", "VAR_MAX_SENT_COUNT", "VAR_MAX_QUERY_RESTARTS",
+ "VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES", "VAR_DNSTAP_SAMPLE_RATE",
+ "VAR_RESPONSE_IP_TAG", "VAR_RESPONSE_IP", "VAR_RESPONSE_IP_DATA",
+ "VAR_HARDEN_ALGO_DOWNGRADE", "VAR_IP_TRANSPARENT", "VAR_IP_DSCP",
+ "VAR_DISABLE_DNSSEC_LAME_CHECK", "VAR_IP_RATELIMIT",
+ "VAR_IP_RATELIMIT_SLABS", "VAR_IP_RATELIMIT_SIZE", "VAR_RATELIMIT",
+ "VAR_RATELIMIT_SLABS", "VAR_RATELIMIT_SIZE", "VAR_OUTBOUND_MSG_RETRY",
+ "VAR_MAX_SENT_COUNT", "VAR_MAX_QUERY_RESTARTS",
"VAR_RATELIMIT_FOR_DOMAIN", "VAR_RATELIMIT_BELOW_DOMAIN",
"VAR_IP_RATELIMIT_FACTOR", "VAR_RATELIMIT_FACTOR",
"VAR_IP_RATELIMIT_BACKOFF", "VAR_RATELIMIT_BACKOFF",
@@ -1507,18 +1512,18 @@ static const char *const yytname[] =
"VAR_INTERFACE_TAG_DATA", "VAR_PROXY_PROTOCOL_PORT",
"VAR_STATISTICS_INHIBIT_ZERO", "VAR_HARDEN_UNKNOWN_ADDITIONAL",
"VAR_DISABLE_EDNS_DO", "VAR_CACHEDB_NO_STORE", "VAR_LOG_DESTADDR",
- "VAR_CACHEDB_CHECK_WHEN_SERVE_EXPIRED", "$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_statistics_inhibit_zero",
- "server_shm_enable", "server_shm_key", "server_port",
- "server_send_client_subnet", "server_client_subnet_zone",
+ "VAR_CACHEDB_CHECK_WHEN_SERVE_EXPIRED", "VAR_COOKIE_SECRET_FILE",
+ "$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_statistics_inhibit_zero", "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",
@@ -1646,11 +1651,12 @@ static const char *const yytname[] =
"dt_dnstap_log_client_query_messages",
"dt_dnstap_log_client_response_messages",
"dt_dnstap_log_forwarder_query_messages",
- "dt_dnstap_log_forwarder_response_messages", "pythonstart",
- "contents_py", "content_py", "py_script", "dynlibstart", "contents_dl",
- "content_dl", "dl_file", "server_disable_dnssec_lame_check",
- "server_log_identity", "server_response_ip", "server_response_ip_data",
- "dnscstart", "contents_dnsc", "content_dnsc", "dnsc_dnscrypt_enable",
+ "dt_dnstap_log_forwarder_response_messages", "dt_dnstap_sample_rate",
+ "pythonstart", "contents_py", "content_py", "py_script", "dynlibstart",
+ "contents_dl", "content_dl", "dl_file",
+ "server_disable_dnssec_lame_check", "server_log_identity",
+ "server_response_ip", "server_response_ip_data", "dnscstart",
+ "contents_dnsc", "content_dnsc", "dnsc_dnscrypt_enable",
"dnsc_dnscrypt_port", "dnsc_dnscrypt_provider",
"dnsc_dnscrypt_provider_cert", "dnsc_dnscrypt_provider_cert_rotated",
"dnsc_dnscrypt_secret_key", "dnsc_dnscrypt_shared_secret_cache_size",
@@ -1662,8 +1668,8 @@ static const char *const yytname[] =
"redis_server_port", "redis_server_path", "redis_server_password",
"redis_timeout", "redis_expire_records", "redis_logical_db",
"server_tcp_connection_limit", "server_answer_cookie",
- "server_cookie_secret", "ipsetstart", "contents_ipset", "content_ipset",
- "ipset_name_v4", "ipset_name_v6", YY_NULLPTR
+ "server_cookie_secret", "server_cookie_secret_file", "ipsetstart",
+ "contents_ipset", "content_ipset", "ipset_name_v4", "ipset_name_v6", YY_NULLPTR
};
static const char *
@@ -1713,11 +1719,11 @@ static const yytype_int16 yytoknum[] =
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, 602, 603, 604,
- 605, 606, 607, 608, 609, 610, 611
+ 605, 606, 607, 608, 609, 610, 611, 612, 613
};
#endif
-#define YYPACT_NINF (-299)
+#define YYPACT_NINF (-293)
#define yypact_value_is_default(Yyn) \
((Yyn) == YYPACT_NINF)
@@ -1731,118 +1737,118 @@ static const yytype_int16 yytoknum[] =
STATE-NUM. */
static const yytype_int16 yypact[] =
{
- -299, 267, -299, -299, -299, -299, -299, -299, -299, -299,
- -299, -299, -299, -299, -299, -299, -299, -299, -299, -299,
- -299, -299, -299, -299, -299, -299, -299, -299, -299, -299,
- -299, -299, -13, 199, 225, 235, 112, 56, -14, 281,
- -81, -298, -100, 135, -291, 31, 32, 33, 83, 89,
- 94, 121, 122, 123, 125, 126, 134, 160, 161, 162,
- 163, 164, 165, 166, 167, 168, 214, 216, 237, 240,
- 241, 242, 243, 244, 245, 246, 258, 259, 260, 261,
- 263, 264, 265, 266, 273, 274, 277, 280, 286, 287,
- 302, 303, 306, 307, 310, 312, 317, 318, 319, 331,
- 333, 336, 338, 343, 344, 345, 347, 348, 350, 351,
- 352, 353, 354, 356, 357, 358, 360, 362, 363, 365,
- 366, 367, 368, 369, 370, 371, 372, 374, 380, 381,
- 382, 383, 384, 385, 386, 387, 389, 390, 391, 392,
- 394, 400, 401, 402, 403, 404, 415, 416, 417, 420,
- 421, 422, 423, 424, 425, 426, 427, 428, 430, 431,
- 432, 433, 434, 435, 436, 437, 438, 439, 440, 441,
- 463, 465, 466, 467, 468, 469, 470, 471, 472, 473,
- 474, 475, 476, 477, 478, 480, 482, 483, 484, 485,
- 486, 487, 488, 489, 490, 491, 492, 493, 495, 496,
- 497, 498, 500, 501, 502, 503, 504, 505, 506, 507,
- 508, 509, 510, 511, 512, 513, 514, 515, 517, 518,
- 519, 520, 521, 522, 523, 525, 526, 527, 528, 529,
- 530, 531, 532, 533, 534, 535, 536, 538, 539, 540,
- 541, 542, 543, 544, 545, 546, 547, 548, 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, 579, 580, 582,
- 583, 584, 586, 587, 588, 589, 590, 592, 593, 594,
- 595, 596, 597, 598, -299, -299, -299, -299, -299, -299,
- -299, -299, -299, -299, -299, -299, -299, -299, -299, -299,
- -299, -299, -299, -299, -299, -299, -299, -299, -299, -299,
- -299, -299, -299, -299, -299, -299, -299, -299, -299, -299,
- -299, -299, -299, -299, -299, -299, -299, -299, -299, -299,
- -299, -299, -299, -299, -299, -299, -299, -299, -299, -299,
- -299, -299, -299, -299, -299, -299, -299, -299, -299, -299,
- -299, -299, -299, -299, -299, -299, -299, -299, -299, -299,
- -299, -299, -299, -299, -299, -299, -299, -299, -299, -299,
- -299, -299, -299, -299, -299, -299, -299, -299, -299, -299,
- -299, -299, -299, -299, -299, -299, -299, -299, -299, -299,
- -299, -299, -299, -299, -299, -299, -299, -299, -299, -299,
- -299, -299, -299, -299, -299, -299, -299, -299, -299, -299,
- -299, -299, -299, -299, -299, -299, -299, -299, -299, -299,
- -299, -299, -299, -299, -299, -299, -299, -299, -299, -299,
- -299, -299, -299, -299, -299, -299, -299, -299, -299, -299,
- -299, -299, -299, -299, -299, -299, -299, -299, -299, -299,
- -299, -299, -299, -299, -299, -299, -299, -299, -299, -299,
- -299, -299, -299, -299, -299, -299, -299, -299, -299, -299,
- -299, -299, -299, -299, -299, -299, -299, -299, -299, -299,
- -299, -299, -299, -299, -299, -299, -299, -299, -299, -299,
- -299, -299, -299, -299, -299, -299, -299, -299, -299, -299,
- -299, -299, -299, -299, -299, -299, -299, -299, -299, -299,
- -299, -299, -299, -299, -299, -299, -299, -299, -299, -299,
- -299, -299, -299, -299, -299, -299, -299, -299, -299, -299,
- -299, -299, -299, -299, 599, 600, 601, 602, 603, 604,
- 605, 606, -299, -299, -299, -299, -299, -299, -299, -299,
- -299, 607, 608, 609, 610, 611, 612, 613, -299, -299,
- -299, -299, -299, -299, -299, -299, 614, 615, 616, 617,
- 618, 619, 620, -299, -299, -299, -299, -299, -299, -299,
- -299, 621, 622, 623, 624, 625, 626, 627, 628, 629,
- 630, -299, -299, -299, -299, -299, -299, -299, -299, -299,
- -299, -299, 631, 632, 633, 634, 635, 636, -299, -299,
- -299, -299, -299, -299, -299, -299, -299, -299, -299, -299,
- -299, 637, 638, 639, 640, 641, 642, 643, 644, -299,
- -299, -299, -299, -299, -299, -299, -299, -299, 645, 646,
- 647, 648, 649, 650, 651, 652, 653, 654, 655, 656,
- 657, 658, 659, 660, 661, 662, 663, -299, -299, -299,
- -299, -299, -299, -299, -299, -299, -299, -299, -299, -299,
- -299, -299, -299, -299, -299, -299, -299, 664, -299, -299,
- 665, -299, -299, 666, 667, 668, 669, 670, 671, 672,
- 673, 674, 675, -299, -299, -299, -299, -299, -299, -299,
- -299, -299, -299, -299, 676, 677, 678, 679, 680, 681,
- 682, 683, 684, 685, 686, -299, -299, -299, -299, -299,
- -299, -299, -299, -299, -299, -299, -299, 687, 688, -299,
- -299, -299, -299, -299, -299, -299, -299, -299, -299, -299,
- -299, -299, -299, -299, -299, -299, -299, -299, -299, -299,
- -299, -299, -299, -299, -299, -299, -299, -299, -299, -299,
- -299, -299, -299, -299, -299, -299, -299, -299, -299, -299,
- -299, -299, -299, -299, -299, -299, -299, -299, -299, -299,
- -299, -299, -299, -299, -299, -299, -299, -299, -299, -299,
- -299, -299, -299, -299, 689, 690, -299, -299, -299, -299,
- -299, -299, -299, -299, -299, -299, -299, -299, -299, -299,
- -299, -299, -299, -299, -299, -299, -299, -299, -299, -299,
- -299, -299, -299, -299, -299, -299, -299, -299, -299, -299,
- -299, -299, -299, -299, -299, -299, -299, -299, -299, -299,
- -299, -299, -299, -299, -299, -299, -299, -299, -299, -299,
- -299, -299, -299, -299, -299, -299, -299, -299, -299, -299,
- -299, -299, -299, -299, -299, -299, 691, 692, 693, -299,
- -299, -299, -299, -299, -299, -299, -299, -299, -299, -299,
- -299, -299, 694, 695, -299, -299, -299, -299, -299, -299,
- -299, -299, -299, -299, -299, -299, -299, -299, -299, -299,
- -299, -299, -299, -299, -299, -299, 696, 697, 698, 699,
- 700, 701, -299, -299, -299, -299, -299, -299, -299, -299,
- -299, -299, -299, -299, -299, -299, -299, -299, -299, -299,
- -299, -299, -299, -299, -299, -299, -299, -299, -299, -299,
- -299, -299, -299, -299, -299, -299, -299, 702, -299, -299,
- -299, -299, -299, -299, -299, -299, -299, -299, 703, 704,
- -299, -299, -299, -299, -299, 705, -299, -299, -299, -299,
- -299, 706, 707, 708, 709, 710, -299, -299, -299, -299,
- -299, -299, -299, -299, -299, -299, -299, -299, -299, -299,
- -299, -299, -299, -299, -299, -299, -299, 711, -299, -299,
- 712, 713, -299, -299, -299, -299, -299, -299, -299, -299,
- -299, -299, -299, -299, -299, -299, -299, -299, -299, -299,
- -299, -299, -299, -299, -299, -299, -299, -299, -299, -299,
- -299, -299, -299, -299, -299, -299, -299, -299, -299, -299,
- -299, -299, -299, -299, -299, -299, -299, -299, -299, -299,
- -299, -299, -299, -299, -299, -299, -299, -299, -299, -299,
- -299, -299, -299, -299, -299, -299, -299, -299, -299, -299,
- -299, -299, -299, -299, -299, -299, -299, -299, -299, -299,
- 714, 715, 716, -299, -299, -299, -299, -299, -299, -299,
- -299, 717, 718, -299, -299, -299, -299, -299, -299, -299,
- -299
+ -293, 268, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ 201, 226, 237, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -13, 26, 27, 31, 32, 33, 83, 89,
+ 94, -293, 201, -293, -293, -293, -293, -293, -293, -293,
+ -293, 121, 122, 123, 125, 126, 134, 160, -293, 226,
+ -293, -293, -293, -293, -293, -293, -293, 161, 162, 163,
+ 164, 165, 166, 167, -293, 237, -293, -293, -293, -293,
+ -293, -293, -293, 112, 56, -14, 282, 61, -157, -101,
+ 135, -292, 215, 217, 239, 242, 243, 244, 245, 246,
+ 247, 259, 260, 261, 262, 264, 265, 266, 267, 273,
+ 275, 278, 281, 287, 288, 302, 304, 307, 308, 309,
+ 313, 318, 319, 320, 332, 334, 338, 344, 345, 346,
+ 347, 349, 351, 352, 353, 354, 355, 357, 358, 359,
+ 361, 363, 364, 366, 367, 368, 369, 370, 371, 372,
+ 373, 375, 381, 382, 383, 384, 385, 386, 387, 388,
+ 390, 391, 392, 393, 395, 401, 402, 403, 404, 405,
+ 416, 417, 418, 419, 420, 423, 424, 425, 426, 427,
+ 428, 429, 431, 432, 433, 434, 435, 436, 437, 438,
+ 439, 440, 441, 442, 465, 466, 468, 469, 470, 471,
+ 472, 473, 474, 475, 476, 477, 478, 479, 481, 483,
+ 484, 485, 486, 487, 488, 489, 490, 491, 492, 493,
+ 494, 495, 497, 498, 499, 500, 501, 503, 504, 505,
+ 506, 507, 508, 509, 510, 511, 512, 513, 514, 515,
+ 516, 517, 519, 520, 521, 522, 523, 524, 525, 527,
+ 528, 529, 530, 531, 532, 533, 534, 535, 536, 537,
+ 538, 540, 541, 542, 543, 544, 545, 546, 547, 548,
+ 549, 550, 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, 579,
+ 580, 581, 582, 584, 585, 586, 588, 589, 590, 591,
+ 592, 594, 595, 596, 597, 598, 599, 600, 601, 602,
+ 603, 604, 605, 606, 607, 608, 609, 610, 611, 612,
+ 613, 614, 615, 616, 617, 618, 619, 620, 621, 622,
+ 623, 624, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, 625, -293, -293, 626, 627, -293, -293, 628, 629,
+ 630, 631, 632, 633, 634, 635, 636, 637, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, 638,
+ 639, 640, 641, 642, 643, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, 644, 645,
+ 646, 647, 648, 649, 650, 651, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, 652, 653, 654, 655, 656,
+ 657, 658, 659, 660, 661, 662, 663, 664, 665, 666,
+ 667, 668, 669, 670, 671, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, 672, -293, -293, 673,
+ -293, -293, 674, 675, 676, 677, 678, 679, 680, 681,
+ 682, 683, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, 684, 685, 686, 687, 688, 689, 690,
+ 691, 692, 693, 694, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, 695, 696, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, 697, 698, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, 699, 700, 701, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, 702, 703, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, 704, 705, 706, 707, 708,
+ 709, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, 710, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, 711, 712, -293,
+ -293, -293, -293, -293, 713, -293, -293, -293, -293, -293,
+ 714, 715, 716, 717, 718, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, 719, 720, 721, -293, -293, -293, -293, -293,
+ -293, -293, -293, 722, 723, -293, -293, -293, -293, -293
};
/* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -1850,11 +1856,16 @@ static const yytype_int16 yypact[] =
means the default is an error. */
static const yytype_int16 yydefact[] =
{
- 2, 0, 1, 18, 19, 271, 282, 610, 670, 629,
- 292, 684, 707, 302, 735, 321, 675, 3, 17, 21,
- 273, 284, 294, 304, 323, 612, 631, 672, 677, 686,
- 709, 737, 4, 5, 6, 10, 14, 15, 8, 9,
- 7, 16, 11, 12, 13, 0, 0, 0, 0, 0,
+ 2, 0, 1, 18, 19, 272, 283, 611, 673, 630,
+ 293, 687, 710, 303, 739, 322, 678, 3, 17, 21,
+ 274, 285, 295, 305, 324, 613, 632, 675, 680, 689,
+ 712, 741, 4, 0, 0, 0, 0, 0, 0, 0,
+ 0, 5, 274, 275, 276, 277, 279, 280, 281, 282,
+ 278, 0, 0, 0, 0, 0, 0, 0, 6, 285,
+ 286, 287, 288, 289, 290, 291, 292, 0, 0, 0,
+ 0, 0, 0, 0, 10, 295, 296, 297, 300, 301,
+ 298, 302, 299, 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, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -1879,177 +1890,172 @@ 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, 20, 22, 23, 90, 93, 102,
- 267, 219, 220, 24, 172, 173, 174, 175, 176, 177,
- 178, 179, 180, 181, 39, 81, 25, 94, 95, 50,
- 74, 89, 264, 26, 27, 28, 31, 32, 29, 30,
- 33, 34, 35, 261, 262, 263, 36, 37, 38, 126,
- 231, 127, 129, 130, 131, 233, 238, 234, 250, 251,
- 252, 256, 132, 133, 134, 135, 136, 137, 138, 215,
- 91, 80, 106, 124, 125, 243, 240, 270, 128, 40,
- 41, 42, 43, 44, 82, 96, 97, 113, 68, 78,
- 69, 223, 224, 107, 60, 61, 222, 64, 62, 63,
- 65, 259, 117, 121, 142, 154, 187, 157, 249, 118,
- 75, 45, 46, 47, 104, 143, 144, 145, 146, 48,
- 49, 51, 52, 54, 55, 53, 151, 152, 158, 56,
- 57, 58, 66, 85, 122, 99, 153, 268, 92, 182,
- 100, 101, 119, 120, 241, 105, 59, 83, 86, 196,
- 67, 70, 108, 109, 110, 84, 183, 184, 111, 71,
- 72, 73, 232, 123, 269, 206, 207, 208, 209, 210,
- 211, 212, 213, 221, 112, 79, 260, 114, 115, 116,
- 185, 76, 77, 98, 87, 88, 103, 139, 140, 242,
- 244, 245, 246, 247, 248, 141, 147, 148, 149, 150,
- 188, 189, 191, 193, 194, 192, 195, 198, 199, 200,
- 197, 216, 155, 255, 156, 161, 162, 159, 160, 163,
- 164, 166, 165, 168, 167, 169, 170, 171, 235, 237,
- 236, 186, 201, 202, 203, 204, 205, 225, 227, 226,
- 228, 229, 230, 257, 258, 265, 266, 190, 214, 217,
- 218, 239, 253, 254, 0, 0, 0, 0, 0, 0,
- 0, 0, 272, 274, 275, 276, 278, 279, 280, 281,
- 277, 0, 0, 0, 0, 0, 0, 0, 283, 285,
- 286, 287, 288, 289, 290, 291, 0, 0, 0, 0,
- 0, 0, 0, 293, 295, 296, 299, 300, 297, 301,
- 298, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 303, 305, 306, 307, 308, 312, 313, 314, 309,
- 310, 311, 0, 0, 0, 0, 0, 0, 326, 330,
- 331, 332, 333, 334, 322, 324, 325, 327, 328, 329,
- 335, 0, 0, 0, 0, 0, 0, 0, 0, 611,
- 613, 615, 614, 620, 616, 617, 618, 619, 0, 0,
+ 0, 0, 20, 22, 23, 90, 93, 102, 267, 219,
+ 220, 24, 172, 173, 174, 175, 176, 177, 178, 179,
+ 180, 181, 39, 81, 25, 94, 95, 50, 74, 89,
+ 264, 26, 27, 28, 31, 32, 29, 30, 33, 34,
+ 35, 261, 262, 263, 36, 37, 38, 126, 231, 127,
+ 129, 130, 131, 233, 238, 234, 250, 251, 252, 256,
+ 132, 133, 134, 135, 136, 137, 138, 215, 91, 80,
+ 106, 124, 125, 243, 240, 270, 128, 40, 41, 42,
+ 43, 44, 82, 96, 97, 113, 68, 78, 69, 223,
+ 224, 107, 60, 61, 222, 64, 62, 63, 65, 259,
+ 117, 121, 142, 154, 187, 157, 249, 118, 75, 45,
+ 46, 47, 104, 143, 144, 145, 146, 48, 49, 51,
+ 52, 54, 55, 53, 151, 152, 158, 56, 57, 58,
+ 66, 85, 122, 99, 153, 268, 92, 182, 100, 101,
+ 119, 120, 241, 105, 59, 83, 86, 196, 67, 70,
+ 108, 109, 110, 84, 183, 184, 111, 71, 72, 73,
+ 232, 123, 269, 206, 207, 208, 209, 210, 211, 212,
+ 213, 221, 112, 79, 260, 114, 115, 116, 185, 76,
+ 77, 98, 87, 88, 103, 139, 140, 242, 244, 245,
+ 246, 247, 248, 141, 147, 148, 149, 150, 188, 189,
+ 191, 193, 194, 192, 195, 198, 199, 200, 197, 216,
+ 155, 255, 156, 161, 162, 159, 160, 163, 164, 166,
+ 165, 168, 167, 169, 170, 171, 235, 237, 236, 186,
+ 201, 202, 203, 204, 205, 225, 227, 226, 228, 229,
+ 230, 257, 258, 265, 266, 190, 214, 217, 218, 239,
+ 253, 254, 271, 579, 580, 581, 586, 584, 585, 582,
+ 583, 273, 587, 588, 589, 590, 592, 593, 591, 284,
+ 604, 0, 608, 609, 0, 0, 610, 294, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 304, 306,
+ 307, 308, 309, 313, 314, 315, 310, 311, 312, 0,
+ 0, 0, 0, 0, 0, 327, 331, 332, 333, 334,
+ 335, 323, 325, 326, 328, 329, 330, 336, 0, 0,
+ 0, 0, 0, 0, 0, 0, 612, 614, 616, 615,
+ 621, 617, 618, 619, 620, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 630, 632, 634,
- 633, 635, 636, 637, 638, 639, 640, 641, 642, 643,
- 644, 645, 646, 647, 648, 649, 650, 0, 671, 673,
- 0, 676, 678, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 685, 687, 688, 689, 691, 692, 690,
- 693, 694, 695, 696, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 708, 710, 711, 718, 720,
- 712, 713, 716, 717, 714, 715, 719, 0, 0, 736,
- 738, 739, 337, 336, 344, 357, 355, 369, 364, 365,
- 366, 370, 367, 368, 371, 372, 373, 377, 378, 379,
- 410, 411, 412, 413, 414, 442, 443, 444, 450, 451,
- 360, 452, 453, 456, 454, 455, 460, 461, 462, 477,
- 425, 426, 429, 430, 463, 481, 419, 421, 482, 490,
- 491, 492, 361, 441, 512, 513, 420, 506, 402, 356,
- 415, 478, 486, 464, 0, 0, 516, 362, 338, 401,
- 469, 339, 358, 359, 416, 417, 514, 466, 471, 472,
- 375, 374, 340, 517, 445, 476, 403, 424, 483, 484,
- 485, 489, 505, 418, 510, 508, 509, 433, 440, 473,
- 474, 434, 435, 465, 494, 404, 405, 409, 380, 382,
- 376, 383, 384, 385, 386, 393, 394, 395, 396, 397,
- 398, 399, 518, 519, 526, 446, 447, 448, 449, 457,
- 458, 459, 527, 528, 529, 530, 0, 0, 0, 467,
- 436, 438, 680, 543, 548, 546, 545, 549, 547, 556,
- 557, 558, 0, 0, 552, 553, 554, 555, 345, 346,
- 347, 348, 349, 350, 351, 352, 353, 354, 470, 487,
- 511, 488, 562, 563, 437, 531, 0, 0, 0, 0,
- 0, 0, 496, 497, 498, 499, 500, 501, 502, 503,
- 504, 681, 427, 428, 431, 422, 493, 400, 342, 343,
- 423, 564, 565, 566, 567, 568, 570, 569, 571, 572,
- 573, 381, 388, 559, 561, 560, 387, 0, 733, 734,
- 544, 407, 475, 520, 406, 521, 522, 523, 0, 0,
- 439, 389, 390, 392, 391, 0, 575, 432, 507, 363,
- 576, 0, 0, 0, 0, 0, 577, 341, 468, 495,
- 408, 578, 579, 580, 585, 583, 584, 581, 582, 586,
- 587, 588, 589, 591, 592, 590, 603, 0, 607, 608,
- 0, 0, 609, 593, 601, 594, 595, 596, 600, 602,
- 597, 598, 599, 315, 316, 317, 318, 319, 320, 621,
- 623, 622, 625, 626, 627, 628, 624, 651, 653, 654,
- 655, 656, 657, 658, 659, 660, 661, 652, 662, 663,
- 664, 665, 666, 667, 668, 669, 674, 679, 697, 698,
- 699, 702, 700, 701, 703, 704, 705, 706, 721, 722,
- 725, 726, 729, 730, 727, 728, 731, 723, 724, 740,
- 741, 479, 515, 542, 682, 683, 550, 551, 532, 533,
- 0, 0, 0, 537, 732, 524, 525, 574, 480, 541,
- 538, 0, 0, 604, 605, 606, 536, 534, 535, 539,
- 540
+ 0, 0, 0, 0, 0, 631, 633, 635, 634, 636,
+ 637, 638, 639, 640, 641, 642, 643, 644, 645, 646,
+ 647, 648, 649, 650, 651, 652, 0, 674, 676, 0,
+ 679, 681, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 688, 690, 691, 692, 694, 695, 693, 696,
+ 697, 698, 699, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 711, 713, 714, 721, 723, 715,
+ 716, 719, 720, 717, 718, 722, 0, 0, 740, 742,
+ 743, 338, 337, 345, 358, 356, 370, 365, 366, 367,
+ 371, 368, 369, 372, 373, 374, 378, 379, 380, 411,
+ 412, 413, 414, 415, 443, 444, 445, 451, 452, 361,
+ 453, 454, 457, 455, 456, 461, 462, 463, 478, 426,
+ 427, 430, 431, 464, 482, 420, 422, 483, 491, 492,
+ 493, 362, 442, 513, 514, 421, 507, 403, 357, 416,
+ 479, 487, 465, 0, 0, 517, 363, 339, 402, 470,
+ 340, 359, 360, 417, 418, 515, 467, 472, 473, 376,
+ 375, 341, 518, 446, 477, 404, 425, 484, 485, 486,
+ 490, 506, 419, 511, 509, 510, 434, 441, 474, 475,
+ 435, 436, 466, 495, 405, 406, 410, 381, 383, 377,
+ 384, 385, 386, 387, 394, 395, 396, 397, 398, 399,
+ 400, 519, 520, 527, 447, 448, 449, 450, 458, 459,
+ 460, 528, 529, 530, 531, 0, 0, 0, 468, 437,
+ 439, 683, 544, 549, 547, 546, 550, 548, 557, 558,
+ 559, 0, 0, 553, 554, 555, 556, 346, 347, 348,
+ 349, 350, 351, 352, 353, 354, 355, 471, 488, 512,
+ 489, 563, 564, 438, 532, 0, 0, 0, 0, 0,
+ 0, 497, 498, 499, 500, 501, 502, 503, 504, 505,
+ 684, 428, 429, 432, 423, 494, 401, 343, 344, 424,
+ 565, 566, 567, 568, 569, 571, 570, 572, 573, 574,
+ 382, 389, 560, 562, 561, 388, 0, 736, 737, 545,
+ 408, 476, 521, 407, 522, 523, 524, 0, 0, 440,
+ 390, 391, 393, 392, 0, 576, 433, 508, 364, 577,
+ 0, 0, 0, 0, 0, 578, 342, 469, 496, 409,
+ 738, 605, 606, 607, 594, 602, 595, 596, 597, 601,
+ 603, 598, 599, 600, 316, 317, 318, 319, 320, 321,
+ 622, 624, 623, 626, 627, 628, 629, 625, 653, 655,
+ 656, 657, 658, 659, 660, 661, 662, 663, 654, 664,
+ 665, 666, 667, 668, 669, 670, 671, 672, 677, 682,
+ 700, 701, 702, 705, 703, 704, 706, 707, 708, 709,
+ 724, 725, 728, 729, 732, 733, 730, 731, 734, 726,
+ 727, 744, 745, 480, 516, 543, 685, 686, 551, 552,
+ 533, 534, 0, 0, 0, 538, 735, 525, 526, 575,
+ 481, 542, 539, 0, 0, 537, 535, 536, 540, 541
};
/* YYPGOTO[NTERM-NUM]. */
static const yytype_int16 yypgoto[] =
{
- -299, -299, -299, -299, -299, -299, -299, -299, -299, -299,
- -299, -299, -299, -299, -299, -299, -299, -299, -299, -299,
- -299, -299, -299, -299, -299, -299, -299, -299, -299, -299,
- -299, -299, -299, -299, -299, -299, -299, -299, -299, -299,
- -299, -299, -299, -299, -299, -299, -299, -299, -299, -299,
- -299, -299, -299, -299, -299, -299, -299, -299, -299, -299,
- -299, -299, -299, -299, -299, -299, -299, -299, -299, -299,
- -299, -299, -299, -299, -299, -299, -299, -299, -299, -299,
- -299, -299, -299, -299, -299, -299, -299, -299, -299, -299,
- -299, -299, -299, -299, -299, -299, -299, -299, -299, -299,
- -299, -299, -299, -299, -299, -299, -299, -299, -299, -299,
- -299, -299, -299, -299, -299, -299, -299, -299, -299, -299,
- -299, -299, -299, -299, -299, -299, -299, -299, -299, -299,
- -299, -299, -299, -299, -299, -299, -299, -299, -299, -299,
- -299, -299, -299, -299, -299, -299, -299, -299, -299, -299,
- -299, -299, -299, -299, -299, -299, -299, -299, -299, -299,
- -299, -299, -299, -299, -299, -299, -299, -299, -299, -299,
- -299, -299, -299, -299, -299, -299, -299, -299, -299, -299,
- -299, -299, -299, -299, -299, -299, -299, -299, -299, -299,
- -299, -299, -299, -299, -299, -299, -299, -299, -299, -299,
- -299, -299, -299, -299, -299, -299, -299, -299, -299, -299,
- -299, -299, -299, -299, -299, -299, -299, -299, -299, -299,
- -299, -299, -299, -299, -299, -299, -299, -299, -299, -299,
- -299, -299, -299, -299, -299, -299, -299, -299, -299, -299,
- -299, -299, -299, -299, -299, -299, -299, -299, -299, -299,
- -299, -299, -299, -299, -299, -299, -299, -299, -299, -299,
- -299, -299, -299, -299, -299, -299, -299, -299, -299, -299,
- -299, -299, -299, -299, -299, -299, -299, -299, -299, -299,
- -299, -299, -299, -299, -299, 719, 720, 721, 722, 723,
- -299, -299, 724, -299, -299, -299, -299, -299, -299, -299,
- -299, -299, -299, -299, -299, -299, -299, -299, -299, -299,
- -299, -299, -299, -299, -299, -299, -299, -299, -299, -299,
- -299, -299, -299, -299, -299, -299, -299, -299, -299, -299,
- -299, -299, -299, -299, -299, -299, -299, -299, -299, -299,
- -299, -299, -299, -299, -299, -299, -299, -299, -299, -299,
- -299, -299, -299, -299, -299, -299, -299, -299, -299, -299,
- -299, -299, -299, -299, -299, -299, -299, -299, -299, -299,
- -299, -299, -299, -299, -299, -299, -299, -299, -299, -299,
- -299, -299
+ -293, -293, -293, -293, -293, -293, -293, -293, 205, -293,
+ -293, 724, -293, -293, 725, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, 726, 727, 728, 729, 730,
+ -293, -293, 731, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293, -293, -293, -293, -293, -293, -293,
+ -293, -293, -293, -293
};
/* YYDEFGOTO[NTERM-NUM]. */
static const yytype_int16 yydefgoto[] =
{
- 0, 1, 17, 18, 19, 32, 294, 20, 33, 552,
- 21, 34, 568, 22, 35, 583, 23, 36, 601, 618,
- 619, 620, 621, 622, 623, 24, 37, 624, 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, 489, 490, 491, 492, 493, 494, 495, 496,
- 497, 498, 499, 500, 501, 502, 503, 504, 505, 506,
- 507, 508, 509, 510, 511, 512, 513, 514, 515, 516,
- 517, 518, 519, 520, 521, 522, 523, 524, 525, 526,
- 527, 528, 529, 530, 531, 532, 533, 534, 535, 536,
- 553, 554, 555, 556, 557, 558, 559, 560, 569, 570,
- 571, 572, 573, 574, 575, 602, 603, 604, 605, 606,
- 607, 608, 609, 610, 611, 584, 585, 586, 587, 588,
- 589, 590, 25, 38, 639, 640, 641, 642, 643, 644,
- 645, 646, 647, 26, 39, 667, 668, 669, 670, 671,
- 672, 673, 674, 675, 676, 677, 678, 679, 680, 681,
- 682, 683, 684, 685, 686, 27, 40, 688, 689, 28,
- 41, 691, 692, 537, 538, 539, 540, 29, 42, 703,
- 704, 705, 706, 707, 708, 709, 710, 711, 712, 713,
- 30, 43, 725, 726, 727, 728, 729, 730, 731, 732,
- 733, 734, 735, 736, 541, 542, 543, 31, 44, 739,
- 740, 741
+ 0, 1, 17, 18, 19, 32, 342, 20, 41, 42,
+ 21, 58, 59, 22, 74, 75, 23, 83, 628, 645,
+ 646, 647, 648, 649, 650, 24, 84, 651, 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, 489, 490, 491, 492, 493, 494,
+ 495, 496, 497, 498, 499, 500, 501, 502, 503, 504,
+ 505, 506, 507, 508, 509, 510, 511, 512, 513, 514,
+ 515, 516, 517, 518, 519, 520, 521, 522, 523, 524,
+ 525, 526, 527, 528, 529, 530, 531, 532, 533, 534,
+ 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, 568, 569, 570, 571, 572, 573, 574,
+ 575, 576, 577, 578, 579, 580, 581, 582, 583, 584,
+ 43, 44, 45, 46, 47, 48, 49, 50, 60, 61,
+ 62, 63, 64, 65, 66, 629, 630, 631, 632, 633,
+ 634, 635, 636, 637, 638, 76, 77, 78, 79, 80,
+ 81, 82, 25, 85, 666, 667, 668, 669, 670, 671,
+ 672, 673, 674, 26, 86, 695, 696, 697, 698, 699,
+ 700, 701, 702, 703, 704, 705, 706, 707, 708, 709,
+ 710, 711, 712, 713, 714, 715, 27, 87, 717, 718,
+ 28, 88, 720, 721, 585, 586, 587, 588, 29, 89,
+ 732, 733, 734, 735, 736, 737, 738, 739, 740, 741,
+ 742, 30, 90, 754, 755, 756, 757, 758, 759, 760,
+ 761, 762, 763, 764, 765, 589, 590, 591, 592, 31,
+ 91, 768, 769, 770
};
/* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If
@@ -2057,83 +2063,88 @@ static const yytype_int16 yydefgoto[] =
number is the opposite. If YYTABLE_NINF, syntax error. */
static const yytype_int16 yytable[] =
{
- 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, 77, 78, 737, 738, 687, 690, 79, 80,
- 81, 742, 743, 744, 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, 121, 122, 631, 632, 633, 634, 635,
- 636, 637, 638, 745, 123, 124, 125, 126, 127, 746,
- 128, 129, 130, 591, 747, 131, 132, 133, 134, 135,
- 136, 137, 138, 139, 140, 141, 142, 143, 144, 145,
- 146, 147, 148, 149, 150, 151, 152, 153, 154, 155,
- 156, 748, 749, 750, 157, 751, 752, 158, 159, 160,
- 161, 162, 163, 164, 753, 165, 166, 167, 168, 169,
- 170, 171, 172, 173, 174, 175, 176, 177, 178, 591,
- 693, 694, 695, 696, 697, 698, 699, 700, 701, 702,
- 754, 755, 756, 757, 758, 759, 760, 761, 762, 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, 217, 218, 219,
- 220, 221, 222, 223, 763, 224, 764, 225, 226, 227,
- 228, 229, 230, 231, 232, 233, 234, 235, 236, 237,
- 238, 239, 240, 241, 242, 243, 544, 765, 545, 546,
- 766, 767, 768, 769, 770, 771, 772, 244, 245, 246,
- 247, 248, 249, 250, 251, 252, 253, 2, 773, 774,
- 775, 776, 561, 777, 778, 779, 780, 254, 3, 4,
- 562, 563, 576, 781, 782, 255, 256, 783, 257, 258,
- 784, 259, 260, 261, 262, 263, 785, 786, 264, 265,
- 266, 267, 268, 269, 270, 271, 272, 273, 274, 275,
- 276, 547, 787, 788, 277, 5, 789, 790, 577, 578,
- 791, 6, 792, 278, 279, 280, 281, 793, 794, 795,
- 282, 283, 284, 285, 286, 287, 288, 289, 290, 291,
- 292, 796, 293, 797, 548, 579, 798, 549, 799, 593,
- 594, 595, 596, 800, 801, 802, 550, 803, 804, 598,
- 805, 806, 807, 808, 809, 7, 810, 811, 812, 564,
- 813, 565, 814, 815, 566, 816, 817, 818, 819, 820,
- 821, 822, 823, 8, 824, 612, 613, 614, 615, 616,
- 825, 826, 827, 828, 829, 830, 831, 832, 617, 833,
- 834, 835, 836, 592, 837, 593, 594, 595, 596, 597,
- 838, 839, 840, 841, 842, 598, 714, 715, 716, 717,
- 718, 719, 720, 721, 722, 843, 844, 845, 580, 581,
- 846, 847, 848, 849, 850, 851, 852, 853, 854, 9,
- 855, 856, 857, 858, 859, 860, 861, 862, 863, 864,
- 865, 866, 599, 600, 648, 649, 650, 651, 652, 653,
- 654, 655, 656, 657, 658, 659, 660, 661, 662, 663,
- 664, 665, 666, 867, 582, 868, 869, 870, 871, 872,
- 873, 874, 875, 876, 877, 878, 879, 880, 881, 723,
- 882, 724, 883, 884, 885, 886, 887, 888, 889, 890,
- 891, 892, 893, 894, 10, 895, 896, 897, 898, 551,
- 899, 900, 901, 902, 903, 904, 905, 906, 907, 908,
- 909, 910, 911, 912, 913, 914, 11, 915, 916, 917,
- 918, 919, 920, 921, 567, 922, 923, 924, 925, 926,
- 927, 928, 929, 930, 931, 932, 933, 12, 934, 935,
- 936, 937, 938, 939, 940, 941, 942, 943, 944, 13,
- 945, 946, 947, 948, 949, 950, 951, 952, 953, 954,
- 955, 956, 957, 958, 959, 960, 961, 962, 963, 964,
- 965, 966, 967, 968, 969, 970, 971, 972, 973, 974,
- 975, 14, 976, 977, 978, 15, 979, 980, 981, 982,
- 983, 16, 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,
- 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021,
- 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031,
- 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041,
- 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051,
- 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061,
- 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071,
- 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081,
- 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091,
- 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101,
- 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 0,
+ 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, 121,
+ 122, 123, 124, 125, 766, 767, 593, 594, 126, 127,
+ 128, 595, 596, 597, 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,
+ 155, 156, 157, 158, 159, 160, 161, 162, 163, 164,
+ 165, 166, 167, 168, 169, 658, 659, 660, 661, 662,
+ 663, 664, 665, 598, 170, 171, 172, 173, 174, 599,
+ 175, 176, 177, 618, 600, 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, 602, 603, 604, 204, 605, 606, 205, 206, 207,
+ 208, 209, 210, 211, 607, 212, 213, 214, 215, 216,
+ 217, 218, 219, 220, 221, 222, 223, 224, 225, 618,
+ 722, 723, 724, 725, 726, 727, 728, 729, 730, 731,
+ 608, 610, 611, 612, 613, 614, 615, 616, 716, 719,
+ 226, 227, 228, 229, 230, 231, 232, 233, 234, 235,
+ 236, 237, 238, 239, 240, 241, 242, 243, 244, 245,
+ 246, 247, 248, 249, 250, 251, 252, 253, 254, 255,
+ 256, 257, 258, 259, 260, 261, 262, 263, 264, 265,
+ 266, 267, 268, 269, 270, 771, 271, 772, 272, 273,
+ 274, 275, 276, 277, 278, 279, 280, 281, 282, 283,
+ 284, 285, 286, 287, 288, 289, 290, 601, 33, 773,
+ 34, 35, 774, 775, 776, 777, 778, 779, 291, 292,
+ 293, 294, 295, 296, 297, 298, 299, 300, 2, 780,
+ 781, 782, 783, 51, 784, 785, 786, 787, 301, 3,
+ 4, 52, 53, 788, 67, 789, 302, 303, 790, 304,
+ 305, 791, 306, 307, 308, 309, 310, 792, 793, 311,
+ 312, 313, 314, 315, 316, 317, 318, 319, 320, 321,
+ 322, 323, 794, 36, 795, 324, 5, 796, 797, 798,
+ 68, 69, 6, 799, 325, 326, 327, 328, 800, 801,
+ 802, 329, 330, 331, 332, 333, 334, 335, 336, 337,
+ 338, 339, 803, 340, 804, 341, 37, 70, 805, 38,
+ 620, 621, 622, 623, 806, 807, 808, 809, 39, 810,
+ 625, 811, 812, 813, 814, 815, 7, 816, 817, 818,
+ 54, 819, 55, 820, 821, 56, 822, 823, 824, 825,
+ 826, 827, 828, 829, 8, 830, 639, 640, 641, 642,
+ 643, 831, 832, 833, 834, 835, 836, 837, 838, 644,
+ 839, 840, 841, 842, 619, 843, 620, 621, 622, 623,
+ 624, 844, 845, 846, 847, 848, 625, 743, 744, 745,
+ 746, 747, 748, 749, 750, 751, 849, 850, 851, 852,
+ 853, 71, 72, 854, 855, 856, 857, 858, 859, 860,
+ 9, 861, 862, 863, 864, 865, 866, 867, 868, 869,
+ 870, 871, 872, 626, 627, 675, 676, 677, 678, 679,
+ 680, 681, 682, 683, 684, 685, 686, 687, 688, 689,
+ 690, 691, 692, 693, 694, 873, 874, 73, 875, 876,
+ 877, 878, 879, 880, 881, 882, 883, 884, 885, 886,
+ 752, 887, 753, 888, 889, 890, 891, 892, 893, 894,
+ 895, 896, 897, 898, 899, 900, 10, 901, 902, 903,
+ 904, 905, 40, 906, 907, 908, 909, 910, 911, 912,
+ 913, 914, 915, 916, 917, 918, 919, 920, 11, 921,
+ 922, 923, 924, 925, 926, 927, 57, 928, 929, 930,
+ 931, 932, 933, 934, 935, 936, 937, 938, 939, 12,
+ 940, 941, 942, 943, 944, 945, 946, 947, 948, 949,
+ 950, 13, 951, 952, 953, 954, 955, 956, 957, 958,
+ 959, 960, 961, 962, 963, 964, 965, 966, 967, 968,
+ 969, 970, 971, 972, 973, 974, 975, 976, 977, 978,
+ 979, 980, 981, 14, 982, 983, 984, 15, 985, 986,
+ 987, 988, 989, 16, 990, 991, 992, 993, 994, 995,
+ 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005,
+ 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015,
+ 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025,
+ 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035,
+ 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045,
+ 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055,
+ 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065,
+ 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075,
+ 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085,
+ 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095,
+ 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105,
+ 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115,
+ 1116, 1117, 1118, 1119, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 625, 626, 627, 628,
- 629, 630
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 609, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 617, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 652, 653, 654, 655, 656, 657
};
static const yytype_int16 yycheck[] =
@@ -2141,7 +2152,7 @@ static const yytype_int16 yycheck[] =
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, 45, 46, 325, 326, 117, 335, 51, 52,
+ 43, 44, 45, 46, 326, 327, 10, 10, 51, 52,
53, 10, 10, 10, 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,
@@ -2154,51 +2165,52 @@ static const yytype_int16 yycheck[] =
143, 10, 10, 10, 147, 10, 10, 150, 151, 152,
153, 154, 155, 156, 10, 158, 159, 160, 161, 162,
163, 164, 165, 166, 167, 168, 169, 170, 171, 47,
- 260, 261, 262, 263, 264, 265, 266, 267, 268, 269,
- 10, 10, 10, 10, 10, 10, 10, 10, 10, 192,
+ 261, 262, 263, 264, 265, 266, 267, 268, 269, 270,
+ 10, 10, 10, 10, 10, 10, 10, 10, 117, 336,
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, 230, 231, 232,
- 233, 234, 235, 236, 10, 238, 10, 240, 241, 242,
+ 233, 234, 235, 236, 237, 10, 239, 10, 241, 242,
243, 244, 245, 246, 247, 248, 249, 250, 251, 252,
- 253, 254, 255, 256, 257, 258, 47, 10, 49, 50,
- 10, 10, 10, 10, 10, 10, 10, 270, 271, 272,
- 273, 274, 275, 276, 277, 278, 279, 0, 10, 10,
- 10, 10, 47, 10, 10, 10, 10, 290, 11, 12,
- 55, 56, 47, 10, 10, 298, 299, 10, 301, 302,
- 10, 304, 305, 306, 307, 308, 10, 10, 311, 312,
+ 253, 254, 255, 256, 257, 258, 259, 42, 47, 10,
+ 49, 50, 10, 10, 10, 10, 10, 10, 271, 272,
+ 273, 274, 275, 276, 277, 278, 279, 280, 0, 10,
+ 10, 10, 10, 47, 10, 10, 10, 10, 291, 11,
+ 12, 55, 56, 10, 47, 10, 299, 300, 10, 302,
+ 303, 10, 305, 306, 307, 308, 309, 10, 10, 312,
313, 314, 315, 316, 317, 318, 319, 320, 321, 322,
- 323, 112, 10, 10, 327, 48, 10, 10, 83, 84,
- 10, 54, 10, 336, 337, 338, 339, 10, 10, 10,
- 343, 344, 345, 346, 347, 348, 349, 350, 351, 352,
- 353, 10, 355, 10, 145, 110, 10, 148, 10, 293,
- 294, 295, 296, 10, 10, 10, 157, 10, 10, 303,
- 10, 10, 10, 10, 10, 98, 10, 10, 10, 144,
- 10, 146, 10, 10, 149, 10, 10, 10, 10, 10,
- 10, 10, 10, 116, 10, 329, 330, 331, 332, 333,
- 10, 10, 10, 10, 10, 10, 10, 10, 342, 10,
- 10, 10, 10, 291, 10, 293, 294, 295, 296, 297,
- 10, 10, 10, 10, 10, 303, 281, 282, 283, 284,
- 285, 286, 287, 288, 289, 10, 10, 10, 193, 194,
- 10, 10, 10, 10, 10, 10, 10, 10, 10, 172,
+ 323, 324, 10, 112, 10, 328, 48, 10, 10, 10,
+ 83, 84, 54, 10, 337, 338, 339, 340, 10, 10,
+ 10, 344, 345, 346, 347, 348, 349, 350, 351, 352,
+ 353, 354, 10, 356, 10, 358, 145, 110, 10, 148,
+ 294, 295, 296, 297, 10, 10, 10, 10, 157, 10,
+ 304, 10, 10, 10, 10, 10, 98, 10, 10, 10,
+ 144, 10, 146, 10, 10, 149, 10, 10, 10, 10,
+ 10, 10, 10, 10, 116, 10, 330, 331, 332, 333,
+ 334, 10, 10, 10, 10, 10, 10, 10, 10, 343,
+ 10, 10, 10, 10, 292, 10, 294, 295, 296, 297,
+ 298, 10, 10, 10, 10, 10, 304, 282, 283, 284,
+ 285, 286, 287, 288, 289, 290, 10, 10, 10, 10,
+ 10, 194, 195, 10, 10, 10, 10, 10, 10, 10,
+ 172, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 341, 342, 173, 174, 175, 176, 177,
+ 178, 179, 180, 181, 182, 183, 184, 185, 186, 187,
+ 188, 189, 190, 191, 192, 10, 10, 240, 10, 10,
10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 340, 341, 173, 174, 175, 176, 177, 178,
- 179, 180, 181, 182, 183, 184, 185, 186, 187, 188,
- 189, 190, 191, 10, 239, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10, 10, 354,
- 10, 356, 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 237, 10, 10, 10, 10, 310,
+ 355, 10, 357, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 238, 10, 10, 10,
+ 10, 10, 311, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 260, 10,
+ 10, 10, 10, 10, 10, 10, 310, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 281,
10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 259, 10, 10, 10,
- 10, 10, 10, 10, 309, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 280, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10, 10, 292,
+ 10, 293, 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, 325, 10, 10, 10, 329, 10, 10,
+ 10, 10, 10, 335, 10, 10, 10, 10, 10, 10,
10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 324, 10, 10, 10, 328, 10, 10, 10, 10,
- 10, 334, 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,
@@ -2210,95 +2222,99 @@ 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,
- 10, 10, 10, 10, 10, 10, 10, 10, 10, -1,
+ 10, 10, 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, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 59, -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, 37
+ 75, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 84, 84, 84, 84, 84, 84
};
/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
symbol of state STATE-NUM. */
static const yytype_int16 yystos[] =
{
- 0, 358, 0, 11, 12, 48, 54, 98, 116, 172,
- 237, 259, 280, 292, 324, 328, 334, 359, 360, 361,
- 364, 367, 370, 373, 382, 659, 670, 692, 696, 704,
- 717, 734, 362, 365, 368, 371, 374, 383, 660, 671,
- 693, 697, 705, 718, 735, 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, 45, 46, 51,
- 52, 53, 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, 96, 97, 107, 108, 109, 110, 111, 113, 114,
- 115, 118, 119, 120, 121, 122, 123, 124, 125, 126,
- 127, 128, 129, 130, 131, 132, 133, 134, 135, 136,
- 137, 138, 139, 140, 141, 142, 143, 147, 150, 151,
- 152, 153, 154, 155, 156, 158, 159, 160, 161, 162,
- 163, 164, 165, 166, 167, 168, 169, 170, 171, 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, 230, 231, 232,
- 233, 234, 235, 236, 238, 240, 241, 242, 243, 244,
- 245, 246, 247, 248, 249, 250, 251, 252, 253, 254,
- 255, 256, 257, 258, 270, 271, 272, 273, 274, 275,
- 276, 277, 278, 279, 290, 298, 299, 301, 302, 304,
- 305, 306, 307, 308, 311, 312, 313, 314, 315, 316,
- 317, 318, 319, 320, 321, 322, 323, 327, 336, 337,
- 338, 339, 343, 344, 345, 346, 347, 348, 349, 350,
- 351, 352, 353, 355, 363, 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, 489,
- 490, 491, 492, 493, 494, 495, 496, 497, 498, 499,
- 500, 501, 502, 503, 504, 505, 506, 507, 508, 509,
- 510, 511, 512, 513, 514, 515, 516, 517, 518, 519,
- 520, 521, 522, 523, 524, 525, 526, 527, 528, 529,
- 530, 531, 532, 533, 534, 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, 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, 602, 603, 604, 605, 606, 607, 608, 609,
- 610, 611, 612, 613, 614, 615, 616, 617, 618, 619,
- 620, 621, 622, 623, 624, 625, 626, 700, 701, 702,
- 703, 731, 732, 733, 47, 49, 50, 112, 145, 148,
- 157, 310, 366, 627, 628, 629, 630, 631, 632, 633,
- 634, 47, 55, 56, 144, 146, 149, 309, 369, 635,
- 636, 637, 638, 639, 640, 641, 47, 83, 84, 110,
- 193, 194, 239, 372, 652, 653, 654, 655, 656, 657,
- 658, 47, 291, 293, 294, 295, 296, 297, 303, 340,
- 341, 375, 642, 643, 644, 645, 646, 647, 648, 649,
- 650, 651, 329, 330, 331, 332, 333, 342, 376, 377,
- 378, 379, 380, 381, 384, 642, 643, 644, 645, 646,
- 649, 99, 100, 101, 102, 103, 104, 105, 106, 661,
- 662, 663, 664, 665, 666, 667, 668, 669, 173, 174,
- 175, 176, 177, 178, 179, 180, 181, 182, 183, 184,
- 185, 186, 187, 188, 189, 190, 191, 672, 673, 674,
- 675, 676, 677, 678, 679, 680, 681, 682, 683, 684,
- 685, 686, 687, 688, 689, 690, 691, 117, 694, 695,
- 335, 698, 699, 260, 261, 262, 263, 264, 265, 266,
- 267, 268, 269, 706, 707, 708, 709, 710, 711, 712,
- 713, 714, 715, 716, 281, 282, 283, 284, 285, 286,
- 287, 288, 289, 354, 356, 719, 720, 721, 722, 723,
- 724, 725, 726, 727, 728, 729, 730, 325, 326, 736,
- 737, 738, 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,
+ 0, 360, 0, 11, 12, 48, 54, 98, 116, 172,
+ 238, 260, 281, 293, 325, 329, 335, 361, 362, 363,
+ 366, 369, 372, 375, 384, 661, 672, 695, 699, 707,
+ 720, 738, 364, 47, 49, 50, 112, 145, 148, 157,
+ 311, 367, 368, 629, 630, 631, 632, 633, 634, 635,
+ 636, 47, 55, 56, 144, 146, 149, 310, 370, 371,
+ 637, 638, 639, 640, 641, 642, 643, 47, 83, 84,
+ 110, 194, 195, 240, 373, 374, 654, 655, 656, 657,
+ 658, 659, 660, 376, 385, 662, 673, 696, 700, 708,
+ 721, 739, 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, 45, 46, 51, 52, 53, 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, 96, 97,
+ 107, 108, 109, 110, 111, 113, 114, 115, 118, 119,
+ 120, 121, 122, 123, 124, 125, 126, 127, 128, 129,
+ 130, 131, 132, 133, 134, 135, 136, 137, 138, 139,
+ 140, 141, 142, 143, 147, 150, 151, 152, 153, 154,
+ 155, 156, 158, 159, 160, 161, 162, 163, 164, 165,
+ 166, 167, 168, 169, 170, 171, 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, 230, 231, 232, 233, 234, 235, 236,
+ 237, 239, 241, 242, 243, 244, 245, 246, 247, 248,
+ 249, 250, 251, 252, 253, 254, 255, 256, 257, 258,
+ 259, 271, 272, 273, 274, 275, 276, 277, 278, 279,
+ 280, 291, 299, 300, 302, 303, 305, 306, 307, 308,
+ 309, 312, 313, 314, 315, 316, 317, 318, 319, 320,
+ 321, 322, 323, 324, 328, 337, 338, 339, 340, 344,
+ 345, 346, 347, 348, 349, 350, 351, 352, 353, 354,
+ 356, 358, 365, 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, 489, 490, 491, 492, 493,
+ 494, 495, 496, 497, 498, 499, 500, 501, 502, 503,
+ 504, 505, 506, 507, 508, 509, 510, 511, 512, 513,
+ 514, 515, 516, 517, 518, 519, 520, 521, 522, 523,
+ 524, 525, 526, 527, 528, 529, 530, 531, 532, 533,
+ 534, 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, 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, 602, 603,
+ 604, 605, 606, 607, 608, 609, 610, 611, 612, 613,
+ 614, 615, 616, 617, 618, 619, 620, 621, 622, 623,
+ 624, 625, 626, 627, 628, 703, 704, 705, 706, 734,
+ 735, 736, 737, 10, 10, 10, 10, 10, 10, 10,
+ 10, 367, 10, 10, 10, 10, 10, 10, 10, 370,
+ 10, 10, 10, 10, 10, 10, 10, 373, 47, 292,
+ 294, 295, 296, 297, 298, 304, 341, 342, 377, 644,
+ 645, 646, 647, 648, 649, 650, 651, 652, 653, 330,
+ 331, 332, 333, 334, 343, 378, 379, 380, 381, 382,
+ 383, 386, 644, 645, 646, 647, 648, 651, 99, 100,
+ 101, 102, 103, 104, 105, 106, 663, 664, 665, 666,
+ 667, 668, 669, 670, 671, 173, 174, 175, 176, 177,
+ 178, 179, 180, 181, 182, 183, 184, 185, 186, 187,
+ 188, 189, 190, 191, 192, 674, 675, 676, 677, 678,
+ 679, 680, 681, 682, 683, 684, 685, 686, 687, 688,
+ 689, 690, 691, 692, 693, 694, 117, 697, 698, 336,
+ 701, 702, 261, 262, 263, 264, 265, 266, 267, 268,
+ 269, 270, 709, 710, 711, 712, 713, 714, 715, 716,
+ 717, 718, 719, 282, 283, 284, 285, 286, 287, 288,
+ 289, 290, 355, 357, 722, 723, 724, 725, 726, 727,
+ 728, 729, 730, 731, 732, 733, 326, 327, 740, 741,
+ 742, 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, 10,
@@ -2332,87 +2348,87 @@ 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, 10, 10, 10, 10, 10, 10
};
/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
static const yytype_int16 yyr1[] =
{
- 0, 357, 358, 358, 359, 359, 359, 359, 359, 359,
- 359, 359, 359, 359, 359, 359, 359, 359, 360, 361,
- 362, 362, 363, 363, 363, 363, 363, 363, 363, 363,
- 363, 363, 363, 363, 363, 363, 363, 363, 363, 363,
- 363, 363, 363, 363, 363, 363, 363, 363, 363, 363,
- 363, 363, 363, 363, 363, 363, 363, 363, 363, 363,
- 363, 363, 363, 363, 363, 363, 363, 363, 363, 363,
- 363, 363, 363, 363, 363, 363, 363, 363, 363, 363,
- 363, 363, 363, 363, 363, 363, 363, 363, 363, 363,
- 363, 363, 363, 363, 363, 363, 363, 363, 363, 363,
- 363, 363, 363, 363, 363, 363, 363, 363, 363, 363,
- 363, 363, 363, 363, 363, 363, 363, 363, 363, 363,
- 363, 363, 363, 363, 363, 363, 363, 363, 363, 363,
- 363, 363, 363, 363, 363, 363, 363, 363, 363, 363,
- 363, 363, 363, 363, 363, 363, 363, 363, 363, 363,
- 363, 363, 363, 363, 363, 363, 363, 363, 363, 363,
- 363, 363, 363, 363, 363, 363, 363, 363, 363, 363,
- 363, 363, 363, 363, 363, 363, 363, 363, 363, 363,
- 363, 363, 363, 363, 363, 363, 363, 363, 363, 363,
- 363, 363, 363, 363, 363, 363, 363, 363, 363, 363,
- 363, 363, 363, 363, 363, 363, 363, 363, 363, 363,
- 363, 363, 363, 363, 363, 363, 363, 363, 363, 363,
- 363, 363, 363, 363, 363, 363, 363, 363, 363, 363,
- 363, 363, 363, 363, 363, 363, 363, 363, 363, 363,
- 363, 363, 363, 363, 363, 363, 363, 363, 363, 363,
- 363, 363, 363, 363, 363, 363, 363, 363, 363, 363,
- 363, 363, 363, 363, 363, 363, 363, 363, 363, 363,
- 363, 364, 365, 365, 366, 366, 366, 366, 366, 366,
- 366, 366, 367, 368, 368, 369, 369, 369, 369, 369,
- 369, 369, 370, 371, 371, 372, 372, 372, 372, 372,
- 372, 372, 373, 374, 374, 375, 375, 375, 375, 375,
- 375, 375, 375, 375, 375, 376, 377, 378, 379, 380,
- 381, 382, 383, 383, 384, 384, 384, 384, 384, 384,
- 384, 384, 384, 384, 384, 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,
- 489, 490, 491, 492, 493, 494, 495, 496, 497, 498,
- 499, 500, 501, 502, 503, 504, 505, 506, 507, 508,
- 509, 510, 511, 512, 513, 514, 515, 516, 517, 518,
- 519, 520, 521, 522, 523, 524, 525, 526, 527, 528,
- 529, 530, 531, 532, 533, 534, 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, 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, 602, 603, 604, 605, 606, 607, 608,
- 609, 610, 611, 612, 613, 614, 615, 616, 617, 618,
- 619, 620, 621, 622, 623, 624, 625, 626, 627, 628,
- 629, 630, 631, 632, 633, 634, 635, 636, 637, 638,
- 639, 640, 641, 642, 643, 644, 645, 646, 647, 648,
- 649, 650, 651, 652, 653, 654, 655, 656, 657, 658,
- 659, 660, 660, 661, 661, 661, 661, 661, 661, 661,
- 661, 662, 663, 664, 665, 666, 667, 668, 669, 670,
- 671, 671, 672, 672, 672, 672, 672, 672, 672, 672,
- 672, 672, 672, 672, 672, 672, 672, 672, 672, 672,
- 672, 673, 674, 675, 676, 677, 678, 679, 680, 681,
+ 0, 359, 360, 360, 361, 361, 361, 361, 361, 361,
+ 361, 361, 361, 361, 361, 361, 361, 361, 362, 363,
+ 364, 364, 365, 365, 365, 365, 365, 365, 365, 365,
+ 365, 365, 365, 365, 365, 365, 365, 365, 365, 365,
+ 365, 365, 365, 365, 365, 365, 365, 365, 365, 365,
+ 365, 365, 365, 365, 365, 365, 365, 365, 365, 365,
+ 365, 365, 365, 365, 365, 365, 365, 365, 365, 365,
+ 365, 365, 365, 365, 365, 365, 365, 365, 365, 365,
+ 365, 365, 365, 365, 365, 365, 365, 365, 365, 365,
+ 365, 365, 365, 365, 365, 365, 365, 365, 365, 365,
+ 365, 365, 365, 365, 365, 365, 365, 365, 365, 365,
+ 365, 365, 365, 365, 365, 365, 365, 365, 365, 365,
+ 365, 365, 365, 365, 365, 365, 365, 365, 365, 365,
+ 365, 365, 365, 365, 365, 365, 365, 365, 365, 365,
+ 365, 365, 365, 365, 365, 365, 365, 365, 365, 365,
+ 365, 365, 365, 365, 365, 365, 365, 365, 365, 365,
+ 365, 365, 365, 365, 365, 365, 365, 365, 365, 365,
+ 365, 365, 365, 365, 365, 365, 365, 365, 365, 365,
+ 365, 365, 365, 365, 365, 365, 365, 365, 365, 365,
+ 365, 365, 365, 365, 365, 365, 365, 365, 365, 365,
+ 365, 365, 365, 365, 365, 365, 365, 365, 365, 365,
+ 365, 365, 365, 365, 365, 365, 365, 365, 365, 365,
+ 365, 365, 365, 365, 365, 365, 365, 365, 365, 365,
+ 365, 365, 365, 365, 365, 365, 365, 365, 365, 365,
+ 365, 365, 365, 365, 365, 365, 365, 365, 365, 365,
+ 365, 365, 365, 365, 365, 365, 365, 365, 365, 365,
+ 365, 365, 365, 365, 365, 365, 365, 365, 365, 365,
+ 365, 365, 366, 367, 367, 368, 368, 368, 368, 368,
+ 368, 368, 368, 369, 370, 370, 371, 371, 371, 371,
+ 371, 371, 371, 372, 373, 373, 374, 374, 374, 374,
+ 374, 374, 374, 375, 376, 376, 377, 377, 377, 377,
+ 377, 377, 377, 377, 377, 377, 378, 379, 380, 381,
+ 382, 383, 384, 385, 385, 386, 386, 386, 386, 386,
+ 386, 386, 386, 386, 386, 386, 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, 489,
+ 490, 491, 492, 493, 494, 495, 496, 497, 498, 499,
+ 500, 501, 502, 503, 504, 505, 506, 507, 508, 509,
+ 510, 511, 512, 513, 514, 515, 516, 517, 518, 519,
+ 520, 521, 522, 523, 524, 525, 526, 527, 528, 529,
+ 530, 531, 532, 533, 534, 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, 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, 602, 603, 604, 605, 606, 607, 608, 609,
+ 610, 611, 612, 613, 614, 615, 616, 617, 618, 619,
+ 620, 621, 622, 623, 624, 625, 626, 627, 628, 629,
+ 630, 631, 632, 633, 634, 635, 636, 637, 638, 639,
+ 640, 641, 642, 643, 644, 645, 646, 647, 648, 649,
+ 650, 651, 652, 653, 654, 655, 656, 657, 658, 659,
+ 660, 661, 662, 662, 663, 663, 663, 663, 663, 663,
+ 663, 663, 664, 665, 666, 667, 668, 669, 670, 671,
+ 672, 673, 673, 674, 674, 674, 674, 674, 674, 674,
+ 674, 674, 674, 674, 674, 674, 674, 674, 674, 674,
+ 674, 674, 674, 675, 676, 677, 678, 679, 680, 681,
682, 683, 684, 685, 686, 687, 688, 689, 690, 691,
- 692, 693, 693, 694, 695, 696, 697, 697, 698, 699,
- 700, 701, 702, 703, 704, 705, 705, 706, 706, 706,
- 706, 706, 706, 706, 706, 706, 706, 707, 708, 709,
- 710, 711, 712, 713, 714, 715, 716, 717, 718, 718,
- 719, 719, 719, 719, 719, 719, 719, 719, 719, 719,
- 719, 720, 721, 722, 723, 724, 725, 726, 727, 728,
- 729, 730, 731, 732, 733, 734, 735, 735, 736, 736,
- 737, 738
+ 692, 693, 694, 695, 696, 696, 697, 698, 699, 700,
+ 700, 701, 702, 703, 704, 705, 706, 707, 708, 708,
+ 709, 709, 709, 709, 709, 709, 709, 709, 709, 709,
+ 710, 711, 712, 713, 714, 715, 716, 717, 718, 719,
+ 720, 721, 721, 722, 722, 722, 722, 722, 722, 722,
+ 722, 722, 722, 722, 723, 724, 725, 726, 727, 728,
+ 729, 730, 731, 732, 733, 734, 735, 736, 737, 738,
+ 739, 739, 740, 740, 741, 742
};
/* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */
@@ -2445,13 +2461,13 @@ 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, 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, 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,
@@ -2465,34 +2481,34 @@ 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, 2, 3,
- 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, 2, 2, 2, 3, 2, 2, 2, 2,
- 2, 2, 2, 2, 3, 3, 2, 2, 2, 2,
- 2, 2, 3, 3, 4, 4, 4, 3, 3, 4,
- 4, 3, 3, 2, 2, 2, 2, 2, 2, 2,
3, 3, 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,
+ 2, 2, 2, 2, 2, 2, 3, 2, 2, 2,
+ 2, 2, 2, 2, 2, 3, 3, 2, 2, 2,
+ 2, 2, 2, 3, 3, 4, 4, 4, 3, 3,
+ 4, 4, 3, 3, 2, 2, 2, 2, 2, 2,
+ 2, 3, 3, 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, 2, 2, 2, 3, 3, 3, 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, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 1, 1, 1, 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,
+ 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,
- 1, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 3, 2, 2, 1, 2, 0, 1, 1,
- 2, 2
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 1, 2, 0, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 3, 2, 2, 2, 1,
+ 2, 0, 1, 1, 2, 2
};
@@ -2960,25 +2976,25 @@ yyreduce:
switch (yyn)
{
case 18: /* force_toplevel: VAR_FORCE_TOPLEVEL */
-#line 219 "util/configparser.y"
+#line 221 "util/configparser.y"
{
OUTYY(("\nP(force-toplevel)\n"));
cfg_parser->started_toplevel = 0;
}
-#line 2969 "util/configparser.c"
+#line 2985 "util/configparser.c"
break;
case 19: /* serverstart: VAR_SERVER */
-#line 226 "util/configparser.y"
+#line 228 "util/configparser.y"
{
OUTYY(("\nP(server:)\n"));
cfg_parser->started_toplevel = 1;
}
-#line 2978 "util/configparser.c"
+#line 2994 "util/configparser.c"
break;
- case 271: /* stubstart: VAR_STUB_ZONE */
-#line 347 "util/configparser.y"
+ case 272: /* stubstart: VAR_STUB_ZONE */
+#line 349 "util/configparser.y"
{
struct config_stub* s;
OUTYY(("\nP(stub_zone:)\n"));
@@ -2991,11 +3007,22 @@ yyreduce:
yyerror("out of memory");
}
}
-#line 2995 "util/configparser.c"
+#line 3011 "util/configparser.c"
+ break;
+
+ case 274: /* contents_stub: %empty */
+#line 364 "util/configparser.y"
+ {
+ /* stub end */
+ if(cfg_parser->cfg->stubs &&
+ !cfg_parser->cfg->stubs->name)
+ yyerror("stub-zone without name");
+ }
+#line 3022 "util/configparser.c"
break;
- case 282: /* forwardstart: VAR_FORWARD_ZONE */
-#line 366 "util/configparser.y"
+ case 283: /* forwardstart: VAR_FORWARD_ZONE */
+#line 374 "util/configparser.y"
{
struct config_stub* s;
OUTYY(("\nP(forward_zone:)\n"));
@@ -3008,11 +3035,22 @@ yyreduce:
yyerror("out of memory");
}
}
-#line 3012 "util/configparser.c"
+#line 3039 "util/configparser.c"
+ break;
+
+ case 285: /* contents_forward: %empty */
+#line 389 "util/configparser.y"
+ {
+ /* forward end */
+ if(cfg_parser->cfg->forwards &&
+ !cfg_parser->cfg->forwards->name)
+ yyerror("forward-zone without name");
+ }
+#line 3050 "util/configparser.c"
break;
- case 292: /* viewstart: VAR_VIEW */
-#line 385 "util/configparser.y"
+ case 293: /* viewstart: VAR_VIEW */
+#line 399 "util/configparser.y"
{
struct config_view* s;
OUTYY(("\nP(view:)\n"));
@@ -3020,18 +3058,27 @@ yyreduce:
s = (struct config_view*)calloc(1, sizeof(struct config_view));
if(s) {
s->next = cfg_parser->cfg->views;
- if(s->next && !s->next->name)
- yyerror("view without name");
cfg_parser->cfg->views = s;
} else {
yyerror("out of memory");
}
}
-#line 3031 "util/configparser.c"
+#line 3067 "util/configparser.c"
+ break;
+
+ case 295: /* contents_view: %empty */
+#line 414 "util/configparser.y"
+ {
+ /* view end */
+ if(cfg_parser->cfg->views &&
+ !cfg_parser->cfg->views->name)
+ yyerror("view without name");
+ }
+#line 3078 "util/configparser.c"
break;
- case 302: /* authstart: VAR_AUTH_ZONE */
-#line 406 "util/configparser.y"
+ case 303: /* authstart: VAR_AUTH_ZONE */
+#line 424 "util/configparser.y"
{
struct config_auth* s;
OUTYY(("\nP(auth_zone:)\n"));
@@ -3051,11 +3098,11 @@ yyreduce:
yyerror("out of memory");
}
}
-#line 3055 "util/configparser.c"
+#line 3102 "util/configparser.c"
break;
- case 315: /* rpz_tag: VAR_TAGS STRING_ARG */
-#line 434 "util/configparser.y"
+ case 316: /* rpz_tag: VAR_TAGS STRING_ARG */
+#line 452 "util/configparser.y"
{
uint8_t* bitlist;
size_t len = 0;
@@ -3072,11 +3119,11 @@ yyreduce:
}
}
-#line 3076 "util/configparser.c"
+#line 3123 "util/configparser.c"
break;
- case 316: /* rpz_action_override: VAR_RPZ_ACTION_OVERRIDE STRING_ARG */
-#line 453 "util/configparser.y"
+ case 317: /* rpz_action_override: VAR_RPZ_ACTION_OVERRIDE STRING_ARG */
+#line 471 "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 &&
@@ -3091,21 +3138,21 @@ yyreduce:
cfg_parser->cfg->auths->rpz_action_override = (yyvsp[0].str);
}
}
-#line 3095 "util/configparser.c"
+#line 3142 "util/configparser.c"
break;
- case 317: /* rpz_cname_override: VAR_RPZ_CNAME_OVERRIDE STRING_ARG */
-#line 470 "util/configparser.y"
+ case 318: /* rpz_cname_override: VAR_RPZ_CNAME_OVERRIDE STRING_ARG */
+#line 488 "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 3105 "util/configparser.c"
+#line 3152 "util/configparser.c"
break;
- case 318: /* rpz_log: VAR_RPZ_LOG STRING_ARG */
-#line 478 "util/configparser.y"
+ case 319: /* rpz_log: VAR_RPZ_LOG STRING_ARG */
+#line 496 "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)
@@ -3113,21 +3160,21 @@ yyreduce:
else cfg_parser->cfg->auths->rpz_log = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3117 "util/configparser.c"
+#line 3164 "util/configparser.c"
break;
- case 319: /* rpz_log_name: VAR_RPZ_LOG_NAME STRING_ARG */
-#line 488 "util/configparser.y"
+ case 320: /* rpz_log_name: VAR_RPZ_LOG_NAME STRING_ARG */
+#line 506 "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 3127 "util/configparser.c"
+#line 3174 "util/configparser.c"
break;
- case 320: /* rpz_signal_nxdomain_ra: VAR_RPZ_SIGNAL_NXDOMAIN_RA STRING_ARG */
-#line 495 "util/configparser.y"
+ case 321: /* rpz_signal_nxdomain_ra: VAR_RPZ_SIGNAL_NXDOMAIN_RA STRING_ARG */
+#line 513 "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)
@@ -3135,11 +3182,11 @@ yyreduce:
else cfg_parser->cfg->auths->rpz_signal_nxdomain_ra = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3139 "util/configparser.c"
+#line 3186 "util/configparser.c"
break;
- case 321: /* rpzstart: VAR_RPZ */
-#line 505 "util/configparser.y"
+ case 322: /* rpzstart: VAR_RPZ */
+#line 523 "util/configparser.y"
{
struct config_auth* s;
OUTYY(("\nP(rpz:)\n"));
@@ -3157,11 +3204,11 @@ yyreduce:
yyerror("out of memory");
}
}
-#line 3161 "util/configparser.c"
+#line 3208 "util/configparser.c"
break;
- case 336: /* server_num_threads: VAR_NUM_THREADS STRING_ARG */
-#line 530 "util/configparser.y"
+ case 337: /* server_num_threads: VAR_NUM_THREADS STRING_ARG */
+#line 548 "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)
@@ -3169,11 +3216,11 @@ yyreduce:
else cfg_parser->cfg->num_threads = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 3173 "util/configparser.c"
+#line 3220 "util/configparser.c"
break;
- case 337: /* server_verbosity: VAR_VERBOSITY STRING_ARG */
-#line 539 "util/configparser.y"
+ case 338: /* server_verbosity: VAR_VERBOSITY STRING_ARG */
+#line 557 "util/configparser.y"
{
OUTYY(("P(server_verbosity:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -3181,11 +3228,11 @@ yyreduce:
else cfg_parser->cfg->verbosity = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 3185 "util/configparser.c"
+#line 3232 "util/configparser.c"
break;
- case 338: /* server_statistics_interval: VAR_STATISTICS_INTERVAL STRING_ARG */
-#line 548 "util/configparser.y"
+ case 339: /* server_statistics_interval: VAR_STATISTICS_INTERVAL STRING_ARG */
+#line 566 "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)
@@ -3195,11 +3242,11 @@ yyreduce:
else cfg_parser->cfg->stat_interval = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 3199 "util/configparser.c"
+#line 3246 "util/configparser.c"
break;
- case 339: /* server_statistics_cumulative: VAR_STATISTICS_CUMULATIVE STRING_ARG */
-#line 559 "util/configparser.y"
+ case 340: /* server_statistics_cumulative: VAR_STATISTICS_CUMULATIVE STRING_ARG */
+#line 577 "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)
@@ -3207,11 +3254,11 @@ yyreduce:
else cfg_parser->cfg->stat_cumulative = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3211 "util/configparser.c"
+#line 3258 "util/configparser.c"
break;
- case 340: /* server_extended_statistics: VAR_EXTENDED_STATISTICS STRING_ARG */
-#line 568 "util/configparser.y"
+ case 341: /* server_extended_statistics: VAR_EXTENDED_STATISTICS STRING_ARG */
+#line 586 "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)
@@ -3219,11 +3266,11 @@ yyreduce:
else cfg_parser->cfg->stat_extended = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3223 "util/configparser.c"
+#line 3270 "util/configparser.c"
break;
- case 341: /* server_statistics_inhibit_zero: VAR_STATISTICS_INHIBIT_ZERO STRING_ARG */
-#line 577 "util/configparser.y"
+ case 342: /* server_statistics_inhibit_zero: VAR_STATISTICS_INHIBIT_ZERO STRING_ARG */
+#line 595 "util/configparser.y"
{
OUTYY(("P(server_statistics_inhibit_zero:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3231,11 +3278,11 @@ yyreduce:
else cfg_parser->cfg->stat_inhibit_zero = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3235 "util/configparser.c"
+#line 3282 "util/configparser.c"
break;
- case 342: /* server_shm_enable: VAR_SHM_ENABLE STRING_ARG */
-#line 586 "util/configparser.y"
+ case 343: /* server_shm_enable: VAR_SHM_ENABLE STRING_ARG */
+#line 604 "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)
@@ -3243,11 +3290,11 @@ yyreduce:
else cfg_parser->cfg->shm_enable = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3247 "util/configparser.c"
+#line 3294 "util/configparser.c"
break;
- case 343: /* server_shm_key: VAR_SHM_KEY STRING_ARG */
-#line 595 "util/configparser.y"
+ case 344: /* server_shm_key: VAR_SHM_KEY STRING_ARG */
+#line 613 "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)
@@ -3257,11 +3304,11 @@ yyreduce:
else cfg_parser->cfg->shm_key = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 3261 "util/configparser.c"
+#line 3308 "util/configparser.c"
break;
- case 344: /* server_port: VAR_PORT STRING_ARG */
-#line 606 "util/configparser.y"
+ case 345: /* server_port: VAR_PORT STRING_ARG */
+#line 624 "util/configparser.y"
{
OUTYY(("P(server_port:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0)
@@ -3269,11 +3316,11 @@ yyreduce:
else cfg_parser->cfg->port = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 3273 "util/configparser.c"
+#line 3320 "util/configparser.c"
break;
- case 345: /* server_send_client_subnet: VAR_SEND_CLIENT_SUBNET STRING_ARG */
-#line 615 "util/configparser.y"
+ case 346: /* server_send_client_subnet: VAR_SEND_CLIENT_SUBNET STRING_ARG */
+#line 633 "util/configparser.y"
{
#ifdef CLIENT_SUBNET
OUTYY(("P(server_send_client_subnet:%s)\n", (yyvsp[0].str)));
@@ -3284,11 +3331,11 @@ yyreduce:
free((yyvsp[0].str));
#endif
}
-#line 3288 "util/configparser.c"
+#line 3335 "util/configparser.c"
break;
- case 346: /* server_client_subnet_zone: VAR_CLIENT_SUBNET_ZONE STRING_ARG */
-#line 627 "util/configparser.y"
+ case 347: /* server_client_subnet_zone: VAR_CLIENT_SUBNET_ZONE STRING_ARG */
+#line 645 "util/configparser.y"
{
#ifdef CLIENT_SUBNET
OUTYY(("P(server_client_subnet_zone:%s)\n", (yyvsp[0].str)));
@@ -3300,11 +3347,11 @@ yyreduce:
free((yyvsp[0].str));
#endif
}
-#line 3304 "util/configparser.c"
+#line 3351 "util/configparser.c"
break;
- case 347: /* server_client_subnet_always_forward: VAR_CLIENT_SUBNET_ALWAYS_FORWARD STRING_ARG */
-#line 641 "util/configparser.y"
+ case 348: /* server_client_subnet_always_forward: VAR_CLIENT_SUBNET_ALWAYS_FORWARD STRING_ARG */
+#line 659 "util/configparser.y"
{
#ifdef CLIENT_SUBNET
OUTYY(("P(server_client_subnet_always_forward:%s)\n", (yyvsp[0].str)));
@@ -3318,11 +3365,11 @@ yyreduce:
#endif
free((yyvsp[0].str));
}
-#line 3322 "util/configparser.c"
+#line 3369 "util/configparser.c"
break;
- case 348: /* server_client_subnet_opcode: VAR_CLIENT_SUBNET_OPCODE STRING_ARG */
-#line 656 "util/configparser.y"
+ case 349: /* server_client_subnet_opcode: VAR_CLIENT_SUBNET_OPCODE STRING_ARG */
+#line 674 "util/configparser.y"
{
#ifdef CLIENT_SUBNET
OUTYY(("P(client_subnet_opcode:%s)\n", (yyvsp[0].str)));
@@ -3332,11 +3379,11 @@ yyreduce:
#endif
free((yyvsp[0].str));
}
-#line 3336 "util/configparser.c"
+#line 3383 "util/configparser.c"
break;
- case 349: /* server_max_client_subnet_ipv4: VAR_MAX_CLIENT_SUBNET_IPV4 STRING_ARG */
-#line 667 "util/configparser.y"
+ case 350: /* server_max_client_subnet_ipv4: VAR_MAX_CLIENT_SUBNET_IPV4 STRING_ARG */
+#line 685 "util/configparser.y"
{
#ifdef CLIENT_SUBNET
OUTYY(("P(max_client_subnet_ipv4:%s)\n", (yyvsp[0].str)));
@@ -3352,11 +3399,11 @@ yyreduce:
#endif
free((yyvsp[0].str));
}
-#line 3356 "util/configparser.c"
+#line 3403 "util/configparser.c"
break;
- case 350: /* server_max_client_subnet_ipv6: VAR_MAX_CLIENT_SUBNET_IPV6 STRING_ARG */
-#line 684 "util/configparser.y"
+ case 351: /* server_max_client_subnet_ipv6: VAR_MAX_CLIENT_SUBNET_IPV6 STRING_ARG */
+#line 702 "util/configparser.y"
{
#ifdef CLIENT_SUBNET
OUTYY(("P(max_client_subnet_ipv6:%s)\n", (yyvsp[0].str)));
@@ -3372,11 +3419,11 @@ yyreduce:
#endif
free((yyvsp[0].str));
}
-#line 3376 "util/configparser.c"
+#line 3423 "util/configparser.c"
break;
- case 351: /* server_min_client_subnet_ipv4: VAR_MIN_CLIENT_SUBNET_IPV4 STRING_ARG */
-#line 701 "util/configparser.y"
+ case 352: /* server_min_client_subnet_ipv4: VAR_MIN_CLIENT_SUBNET_IPV4 STRING_ARG */
+#line 719 "util/configparser.y"
{
#ifdef CLIENT_SUBNET
OUTYY(("P(min_client_subnet_ipv4:%s)\n", (yyvsp[0].str)));
@@ -3392,11 +3439,11 @@ yyreduce:
#endif
free((yyvsp[0].str));
}
-#line 3396 "util/configparser.c"
+#line 3443 "util/configparser.c"
break;
- case 352: /* server_min_client_subnet_ipv6: VAR_MIN_CLIENT_SUBNET_IPV6 STRING_ARG */
-#line 718 "util/configparser.y"
+ case 353: /* server_min_client_subnet_ipv6: VAR_MIN_CLIENT_SUBNET_IPV6 STRING_ARG */
+#line 736 "util/configparser.y"
{
#ifdef CLIENT_SUBNET
OUTYY(("P(min_client_subnet_ipv6:%s)\n", (yyvsp[0].str)));
@@ -3412,11 +3459,11 @@ yyreduce:
#endif
free((yyvsp[0].str));
}
-#line 3416 "util/configparser.c"
+#line 3463 "util/configparser.c"
break;
- case 353: /* server_max_ecs_tree_size_ipv4: VAR_MAX_ECS_TREE_SIZE_IPV4 STRING_ARG */
-#line 735 "util/configparser.y"
+ case 354: /* server_max_ecs_tree_size_ipv4: VAR_MAX_ECS_TREE_SIZE_IPV4 STRING_ARG */
+#line 753 "util/configparser.y"
{
#ifdef CLIENT_SUBNET
OUTYY(("P(max_ecs_tree_size_ipv4:%s)\n", (yyvsp[0].str)));
@@ -3430,11 +3477,11 @@ yyreduce:
#endif
free((yyvsp[0].str));
}
-#line 3434 "util/configparser.c"
+#line 3481 "util/configparser.c"
break;
- case 354: /* server_max_ecs_tree_size_ipv6: VAR_MAX_ECS_TREE_SIZE_IPV6 STRING_ARG */
-#line 750 "util/configparser.y"
+ case 355: /* server_max_ecs_tree_size_ipv6: VAR_MAX_ECS_TREE_SIZE_IPV6 STRING_ARG */
+#line 768 "util/configparser.y"
{
#ifdef CLIENT_SUBNET
OUTYY(("P(max_ecs_tree_size_ipv6:%s)\n", (yyvsp[0].str)));
@@ -3448,11 +3495,11 @@ yyreduce:
#endif
free((yyvsp[0].str));
}
-#line 3452 "util/configparser.c"
+#line 3499 "util/configparser.c"
break;
- case 355: /* server_interface: VAR_INTERFACE STRING_ARG */
-#line 765 "util/configparser.y"
+ case 356: /* server_interface: VAR_INTERFACE STRING_ARG */
+#line 783 "util/configparser.y"
{
OUTYY(("P(server_interface:%s)\n", (yyvsp[0].str)));
if(cfg_parser->cfg->num_ifs == 0)
@@ -3464,11 +3511,11 @@ yyreduce:
else
cfg_parser->cfg->ifs[cfg_parser->cfg->num_ifs++] = (yyvsp[0].str);
}
-#line 3468 "util/configparser.c"
+#line 3515 "util/configparser.c"
break;
- case 356: /* server_outgoing_interface: VAR_OUTGOING_INTERFACE STRING_ARG */
-#line 778 "util/configparser.y"
+ case 357: /* server_outgoing_interface: VAR_OUTGOING_INTERFACE STRING_ARG */
+#line 796 "util/configparser.y"
{
OUTYY(("P(server_outgoing_interface:%s)\n", (yyvsp[0].str)));
if(cfg_parser->cfg->num_out_ifs == 0)
@@ -3482,11 +3529,11 @@ yyreduce:
cfg_parser->cfg->out_ifs[
cfg_parser->cfg->num_out_ifs++] = (yyvsp[0].str);
}
-#line 3486 "util/configparser.c"
+#line 3533 "util/configparser.c"
break;
- case 357: /* server_outgoing_range: VAR_OUTGOING_RANGE STRING_ARG */
-#line 793 "util/configparser.y"
+ case 358: /* server_outgoing_range: VAR_OUTGOING_RANGE STRING_ARG */
+#line 811 "util/configparser.y"
{
OUTYY(("P(server_outgoing_range:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0)
@@ -3494,11 +3541,11 @@ yyreduce:
else cfg_parser->cfg->outgoing_num_ports = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 3498 "util/configparser.c"
+#line 3545 "util/configparser.c"
break;
- case 358: /* server_outgoing_port_permit: VAR_OUTGOING_PORT_PERMIT STRING_ARG */
-#line 802 "util/configparser.y"
+ case 359: /* server_outgoing_port_permit: VAR_OUTGOING_PORT_PERMIT STRING_ARG */
+#line 820 "util/configparser.y"
{
OUTYY(("P(server_outgoing_port_permit:%s)\n", (yyvsp[0].str)));
if(!cfg_mark_ports((yyvsp[0].str), 1,
@@ -3506,11 +3553,11 @@ yyreduce:
yyerror("port number or range (\"low-high\") expected");
free((yyvsp[0].str));
}
-#line 3510 "util/configparser.c"
+#line 3557 "util/configparser.c"
break;
- case 359: /* server_outgoing_port_avoid: VAR_OUTGOING_PORT_AVOID STRING_ARG */
-#line 811 "util/configparser.y"
+ case 360: /* server_outgoing_port_avoid: VAR_OUTGOING_PORT_AVOID STRING_ARG */
+#line 829 "util/configparser.y"
{
OUTYY(("P(server_outgoing_port_avoid:%s)\n", (yyvsp[0].str)));
if(!cfg_mark_ports((yyvsp[0].str), 0,
@@ -3518,11 +3565,11 @@ yyreduce:
yyerror("port number or range (\"low-high\") expected");
free((yyvsp[0].str));
}
-#line 3522 "util/configparser.c"
+#line 3569 "util/configparser.c"
break;
- case 360: /* server_outgoing_num_tcp: VAR_OUTGOING_NUM_TCP STRING_ARG */
-#line 820 "util/configparser.y"
+ case 361: /* server_outgoing_num_tcp: VAR_OUTGOING_NUM_TCP STRING_ARG */
+#line 838 "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)
@@ -3530,11 +3577,11 @@ yyreduce:
else cfg_parser->cfg->outgoing_num_tcp = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 3534 "util/configparser.c"
+#line 3581 "util/configparser.c"
break;
- case 361: /* server_incoming_num_tcp: VAR_INCOMING_NUM_TCP STRING_ARG */
-#line 829 "util/configparser.y"
+ case 362: /* server_incoming_num_tcp: VAR_INCOMING_NUM_TCP STRING_ARG */
+#line 847 "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)
@@ -3542,11 +3589,11 @@ yyreduce:
else cfg_parser->cfg->incoming_num_tcp = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 3546 "util/configparser.c"
+#line 3593 "util/configparser.c"
break;
- case 362: /* server_interface_automatic: VAR_INTERFACE_AUTOMATIC STRING_ARG */
-#line 838 "util/configparser.y"
+ case 363: /* server_interface_automatic: VAR_INTERFACE_AUTOMATIC STRING_ARG */
+#line 856 "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)
@@ -3554,21 +3601,21 @@ yyreduce:
else cfg_parser->cfg->if_automatic = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3558 "util/configparser.c"
+#line 3605 "util/configparser.c"
break;
- case 363: /* server_interface_automatic_ports: VAR_INTERFACE_AUTOMATIC_PORTS STRING_ARG */
-#line 847 "util/configparser.y"
+ case 364: /* server_interface_automatic_ports: VAR_INTERFACE_AUTOMATIC_PORTS STRING_ARG */
+#line 865 "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 3568 "util/configparser.c"
+#line 3615 "util/configparser.c"
break;
- case 364: /* server_do_ip4: VAR_DO_IP4 STRING_ARG */
-#line 854 "util/configparser.y"
+ case 365: /* server_do_ip4: VAR_DO_IP4 STRING_ARG */
+#line 872 "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)
@@ -3576,11 +3623,11 @@ yyreduce:
else cfg_parser->cfg->do_ip4 = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3580 "util/configparser.c"
+#line 3627 "util/configparser.c"
break;
- case 365: /* server_do_ip6: VAR_DO_IP6 STRING_ARG */
-#line 863 "util/configparser.y"
+ case 366: /* server_do_ip6: VAR_DO_IP6 STRING_ARG */
+#line 881 "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)
@@ -3588,11 +3635,11 @@ yyreduce:
else cfg_parser->cfg->do_ip6 = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3592 "util/configparser.c"
+#line 3639 "util/configparser.c"
break;
- case 366: /* server_do_nat64: VAR_DO_NAT64 STRING_ARG */
-#line 872 "util/configparser.y"
+ case 367: /* server_do_nat64: VAR_DO_NAT64 STRING_ARG */
+#line 890 "util/configparser.y"
{
OUTYY(("P(server_do_nat64:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3600,11 +3647,11 @@ yyreduce:
else cfg_parser->cfg->do_nat64 = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3604 "util/configparser.c"
+#line 3651 "util/configparser.c"
break;
- case 367: /* server_do_udp: VAR_DO_UDP STRING_ARG */
-#line 881 "util/configparser.y"
+ case 368: /* server_do_udp: VAR_DO_UDP STRING_ARG */
+#line 899 "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)
@@ -3612,11 +3659,11 @@ yyreduce:
else cfg_parser->cfg->do_udp = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3616 "util/configparser.c"
+#line 3663 "util/configparser.c"
break;
- case 368: /* server_do_tcp: VAR_DO_TCP STRING_ARG */
-#line 890 "util/configparser.y"
+ case 369: /* server_do_tcp: VAR_DO_TCP STRING_ARG */
+#line 908 "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)
@@ -3624,11 +3671,11 @@ yyreduce:
else cfg_parser->cfg->do_tcp = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3628 "util/configparser.c"
+#line 3675 "util/configparser.c"
break;
- case 369: /* server_prefer_ip4: VAR_PREFER_IP4 STRING_ARG */
-#line 899 "util/configparser.y"
+ case 370: /* server_prefer_ip4: VAR_PREFER_IP4 STRING_ARG */
+#line 917 "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)
@@ -3636,11 +3683,11 @@ yyreduce:
else cfg_parser->cfg->prefer_ip4 = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3640 "util/configparser.c"
+#line 3687 "util/configparser.c"
break;
- case 370: /* server_prefer_ip6: VAR_PREFER_IP6 STRING_ARG */
-#line 908 "util/configparser.y"
+ case 371: /* server_prefer_ip6: VAR_PREFER_IP6 STRING_ARG */
+#line 926 "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)
@@ -3648,11 +3695,11 @@ yyreduce:
else cfg_parser->cfg->prefer_ip6 = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3652 "util/configparser.c"
+#line 3699 "util/configparser.c"
break;
- case 371: /* server_tcp_mss: VAR_TCP_MSS STRING_ARG */
-#line 917 "util/configparser.y"
+ case 372: /* server_tcp_mss: VAR_TCP_MSS STRING_ARG */
+#line 935 "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)
@@ -3660,11 +3707,11 @@ yyreduce:
else cfg_parser->cfg->tcp_mss = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 3664 "util/configparser.c"
+#line 3711 "util/configparser.c"
break;
- case 372: /* server_outgoing_tcp_mss: VAR_OUTGOING_TCP_MSS STRING_ARG */
-#line 926 "util/configparser.y"
+ case 373: /* server_outgoing_tcp_mss: VAR_OUTGOING_TCP_MSS STRING_ARG */
+#line 944 "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)
@@ -3672,11 +3719,11 @@ yyreduce:
else cfg_parser->cfg->outgoing_tcp_mss = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 3676 "util/configparser.c"
+#line 3723 "util/configparser.c"
break;
- case 373: /* server_tcp_idle_timeout: VAR_TCP_IDLE_TIMEOUT STRING_ARG */
-#line 935 "util/configparser.y"
+ case 374: /* server_tcp_idle_timeout: VAR_TCP_IDLE_TIMEOUT STRING_ARG */
+#line 953 "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)
@@ -3688,11 +3735,11 @@ yyreduce:
else cfg_parser->cfg->tcp_idle_timeout = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 3692 "util/configparser.c"
+#line 3739 "util/configparser.c"
break;
- case 374: /* server_max_reuse_tcp_queries: VAR_MAX_REUSE_TCP_QUERIES STRING_ARG */
-#line 948 "util/configparser.y"
+ case 375: /* server_max_reuse_tcp_queries: VAR_MAX_REUSE_TCP_QUERIES STRING_ARG */
+#line 966 "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)
@@ -3702,11 +3749,11 @@ yyreduce:
else cfg_parser->cfg->max_reuse_tcp_queries = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 3706 "util/configparser.c"
+#line 3753 "util/configparser.c"
break;
- case 375: /* server_tcp_reuse_timeout: VAR_TCP_REUSE_TIMEOUT STRING_ARG */
-#line 959 "util/configparser.y"
+ case 376: /* server_tcp_reuse_timeout: VAR_TCP_REUSE_TIMEOUT STRING_ARG */
+#line 977 "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)
@@ -3716,11 +3763,11 @@ yyreduce:
else cfg_parser->cfg->tcp_reuse_timeout = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 3720 "util/configparser.c"
+#line 3767 "util/configparser.c"
break;
- case 376: /* server_tcp_auth_query_timeout: VAR_TCP_AUTH_QUERY_TIMEOUT STRING_ARG */
-#line 970 "util/configparser.y"
+ case 377: /* server_tcp_auth_query_timeout: VAR_TCP_AUTH_QUERY_TIMEOUT STRING_ARG */
+#line 988 "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)
@@ -3730,11 +3777,11 @@ yyreduce:
else cfg_parser->cfg->tcp_auth_query_timeout = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 3734 "util/configparser.c"
+#line 3781 "util/configparser.c"
break;
- case 377: /* server_tcp_keepalive: VAR_EDNS_TCP_KEEPALIVE STRING_ARG */
-#line 981 "util/configparser.y"
+ case 378: /* server_tcp_keepalive: VAR_EDNS_TCP_KEEPALIVE STRING_ARG */
+#line 999 "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)
@@ -3742,11 +3789,11 @@ yyreduce:
else cfg_parser->cfg->do_tcp_keepalive = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3746 "util/configparser.c"
+#line 3793 "util/configparser.c"
break;
- case 378: /* server_tcp_keepalive_timeout: VAR_EDNS_TCP_KEEPALIVE_TIMEOUT STRING_ARG */
-#line 990 "util/configparser.y"
+ case 379: /* server_tcp_keepalive_timeout: VAR_EDNS_TCP_KEEPALIVE_TIMEOUT STRING_ARG */
+#line 1008 "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)
@@ -3758,11 +3805,11 @@ yyreduce:
else cfg_parser->cfg->tcp_keepalive_timeout = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 3762 "util/configparser.c"
+#line 3809 "util/configparser.c"
break;
- case 379: /* server_sock_queue_timeout: VAR_SOCK_QUEUE_TIMEOUT STRING_ARG */
-#line 1003 "util/configparser.y"
+ case 380: /* server_sock_queue_timeout: VAR_SOCK_QUEUE_TIMEOUT STRING_ARG */
+#line 1021 "util/configparser.y"
{
OUTYY(("P(server_sock_queue_timeout:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -3774,11 +3821,11 @@ yyreduce:
else cfg_parser->cfg->sock_queue_timeout = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 3778 "util/configparser.c"
+#line 3825 "util/configparser.c"
break;
- case 380: /* server_tcp_upstream: VAR_TCP_UPSTREAM STRING_ARG */
-#line 1016 "util/configparser.y"
+ case 381: /* server_tcp_upstream: VAR_TCP_UPSTREAM STRING_ARG */
+#line 1034 "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)
@@ -3786,11 +3833,11 @@ yyreduce:
else cfg_parser->cfg->tcp_upstream = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3790 "util/configparser.c"
+#line 3837 "util/configparser.c"
break;
- case 381: /* server_udp_upstream_without_downstream: VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM STRING_ARG */
-#line 1025 "util/configparser.y"
+ case 382: /* server_udp_upstream_without_downstream: VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM STRING_ARG */
+#line 1043 "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)
@@ -3798,11 +3845,11 @@ yyreduce:
else cfg_parser->cfg->udp_upstream_without_downstream = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3802 "util/configparser.c"
+#line 3849 "util/configparser.c"
break;
- case 382: /* server_ssl_upstream: VAR_SSL_UPSTREAM STRING_ARG */
-#line 1034 "util/configparser.y"
+ case 383: /* server_ssl_upstream: VAR_SSL_UPSTREAM STRING_ARG */
+#line 1052 "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)
@@ -3810,31 +3857,31 @@ yyreduce:
else cfg_parser->cfg->ssl_upstream = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3814 "util/configparser.c"
+#line 3861 "util/configparser.c"
break;
- case 383: /* server_ssl_service_key: VAR_SSL_SERVICE_KEY STRING_ARG */
-#line 1043 "util/configparser.y"
+ case 384: /* server_ssl_service_key: VAR_SSL_SERVICE_KEY STRING_ARG */
+#line 1061 "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 3824 "util/configparser.c"
+#line 3871 "util/configparser.c"
break;
- case 384: /* server_ssl_service_pem: VAR_SSL_SERVICE_PEM STRING_ARG */
-#line 1050 "util/configparser.y"
+ case 385: /* server_ssl_service_pem: VAR_SSL_SERVICE_PEM STRING_ARG */
+#line 1068 "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 3834 "util/configparser.c"
+#line 3881 "util/configparser.c"
break;
- case 385: /* server_ssl_port: VAR_SSL_PORT STRING_ARG */
-#line 1057 "util/configparser.y"
+ case 386: /* server_ssl_port: VAR_SSL_PORT STRING_ARG */
+#line 1075 "util/configparser.y"
{
OUTYY(("P(server_ssl_port:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0)
@@ -3842,21 +3889,21 @@ yyreduce:
else cfg_parser->cfg->ssl_port = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 3846 "util/configparser.c"
+#line 3893 "util/configparser.c"
break;
- case 386: /* server_tls_cert_bundle: VAR_TLS_CERT_BUNDLE STRING_ARG */
-#line 1066 "util/configparser.y"
+ case 387: /* server_tls_cert_bundle: VAR_TLS_CERT_BUNDLE STRING_ARG */
+#line 1084 "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 3856 "util/configparser.c"
+#line 3903 "util/configparser.c"
break;
- case 387: /* server_tls_win_cert: VAR_TLS_WIN_CERT STRING_ARG */
-#line 1073 "util/configparser.y"
+ case 388: /* server_tls_win_cert: VAR_TLS_WIN_CERT STRING_ARG */
+#line 1091 "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)
@@ -3864,53 +3911,53 @@ yyreduce:
else cfg_parser->cfg->tls_win_cert = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3868 "util/configparser.c"
+#line 3915 "util/configparser.c"
break;
- case 388: /* server_tls_additional_port: VAR_TLS_ADDITIONAL_PORT STRING_ARG */
-#line 1082 "util/configparser.y"
+ case 389: /* server_tls_additional_port: VAR_TLS_ADDITIONAL_PORT STRING_ARG */
+#line 1100 "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 3879 "util/configparser.c"
+#line 3926 "util/configparser.c"
break;
- case 389: /* server_tls_ciphers: VAR_TLS_CIPHERS STRING_ARG */
-#line 1090 "util/configparser.y"
+ case 390: /* server_tls_ciphers: VAR_TLS_CIPHERS STRING_ARG */
+#line 1108 "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 3889 "util/configparser.c"
+#line 3936 "util/configparser.c"
break;
- case 390: /* server_tls_ciphersuites: VAR_TLS_CIPHERSUITES STRING_ARG */
-#line 1097 "util/configparser.y"
+ case 391: /* server_tls_ciphersuites: VAR_TLS_CIPHERSUITES STRING_ARG */
+#line 1115 "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 3899 "util/configparser.c"
+#line 3946 "util/configparser.c"
break;
- case 391: /* server_tls_session_ticket_keys: VAR_TLS_SESSION_TICKET_KEYS STRING_ARG */
-#line 1104 "util/configparser.y"
+ case 392: /* server_tls_session_ticket_keys: VAR_TLS_SESSION_TICKET_KEYS STRING_ARG */
+#line 1122 "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 3910 "util/configparser.c"
+#line 3957 "util/configparser.c"
break;
- case 392: /* server_tls_use_sni: VAR_TLS_USE_SNI STRING_ARG */
-#line 1112 "util/configparser.y"
+ case 393: /* server_tls_use_sni: VAR_TLS_USE_SNI STRING_ARG */
+#line 1130 "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)
@@ -3918,11 +3965,11 @@ yyreduce:
else cfg_parser->cfg->tls_use_sni = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3922 "util/configparser.c"
+#line 3969 "util/configparser.c"
break;
- case 393: /* server_https_port: VAR_HTTPS_PORT STRING_ARG */
-#line 1121 "util/configparser.y"
+ case 394: /* server_https_port: VAR_HTTPS_PORT STRING_ARG */
+#line 1139 "util/configparser.y"
{
OUTYY(("P(server_https_port:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0)
@@ -3930,11 +3977,11 @@ yyreduce:
else cfg_parser->cfg->https_port = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 3934 "util/configparser.c"
+#line 3981 "util/configparser.c"
break;
- case 394: /* server_http_endpoint: VAR_HTTP_ENDPOINT STRING_ARG */
-#line 1129 "util/configparser.y"
+ case 395: /* server_http_endpoint: VAR_HTTP_ENDPOINT STRING_ARG */
+#line 1147 "util/configparser.y"
{
OUTYY(("P(server_http_endpoint:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->http_endpoint);
@@ -3950,11 +3997,11 @@ yyreduce:
cfg_parser->cfg->http_endpoint = (yyvsp[0].str);
}
}
-#line 3954 "util/configparser.c"
+#line 4001 "util/configparser.c"
break;
- case 395: /* server_http_max_streams: VAR_HTTP_MAX_STREAMS STRING_ARG */
-#line 1145 "util/configparser.y"
+ case 396: /* server_http_max_streams: VAR_HTTP_MAX_STREAMS STRING_ARG */
+#line 1163 "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)
@@ -3962,11 +4009,11 @@ yyreduce:
else cfg_parser->cfg->http_max_streams = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 3966 "util/configparser.c"
+#line 4013 "util/configparser.c"
break;
- case 396: /* server_http_query_buffer_size: VAR_HTTP_QUERY_BUFFER_SIZE STRING_ARG */
-#line 1153 "util/configparser.y"
+ case 397: /* server_http_query_buffer_size: VAR_HTTP_QUERY_BUFFER_SIZE STRING_ARG */
+#line 1171 "util/configparser.y"
{
OUTYY(("P(server_http_query_buffer_size:%s)\n", (yyvsp[0].str)));
if(!cfg_parse_memsize((yyvsp[0].str),
@@ -3974,11 +4021,11 @@ yyreduce:
yyerror("memory size expected");
free((yyvsp[0].str));
}
-#line 3978 "util/configparser.c"
+#line 4025 "util/configparser.c"
break;
- case 397: /* server_http_response_buffer_size: VAR_HTTP_RESPONSE_BUFFER_SIZE STRING_ARG */
-#line 1161 "util/configparser.y"
+ case 398: /* server_http_response_buffer_size: VAR_HTTP_RESPONSE_BUFFER_SIZE STRING_ARG */
+#line 1179 "util/configparser.y"
{
OUTYY(("P(server_http_response_buffer_size:%s)\n", (yyvsp[0].str)));
if(!cfg_parse_memsize((yyvsp[0].str),
@@ -3986,11 +4033,11 @@ yyreduce:
yyerror("memory size expected");
free((yyvsp[0].str));
}
-#line 3990 "util/configparser.c"
+#line 4037 "util/configparser.c"
break;
- case 398: /* server_http_nodelay: VAR_HTTP_NODELAY STRING_ARG */
-#line 1169 "util/configparser.y"
+ case 399: /* server_http_nodelay: VAR_HTTP_NODELAY STRING_ARG */
+#line 1187 "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)
@@ -3998,11 +4045,11 @@ yyreduce:
else cfg_parser->cfg->http_nodelay = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4002 "util/configparser.c"
+#line 4049 "util/configparser.c"
break;
- case 399: /* server_http_notls_downstream: VAR_HTTP_NOTLS_DOWNSTREAM STRING_ARG */
-#line 1177 "util/configparser.y"
+ case 400: /* server_http_notls_downstream: VAR_HTTP_NOTLS_DOWNSTREAM STRING_ARG */
+#line 1195 "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)
@@ -4010,11 +4057,11 @@ yyreduce:
else cfg_parser->cfg->http_notls_downstream = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4014 "util/configparser.c"
+#line 4061 "util/configparser.c"
break;
- case 400: /* server_use_systemd: VAR_USE_SYSTEMD STRING_ARG */
-#line 1185 "util/configparser.y"
+ case 401: /* server_use_systemd: VAR_USE_SYSTEMD STRING_ARG */
+#line 1203 "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)
@@ -4022,11 +4069,11 @@ yyreduce:
else cfg_parser->cfg->use_systemd = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4026 "util/configparser.c"
+#line 4073 "util/configparser.c"
break;
- case 401: /* server_do_daemonize: VAR_DO_DAEMONIZE STRING_ARG */
-#line 1194 "util/configparser.y"
+ case 402: /* server_do_daemonize: VAR_DO_DAEMONIZE STRING_ARG */
+#line 1212 "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)
@@ -4034,11 +4081,11 @@ yyreduce:
else cfg_parser->cfg->do_daemonize = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4038 "util/configparser.c"
+#line 4085 "util/configparser.c"
break;
- case 402: /* server_use_syslog: VAR_USE_SYSLOG STRING_ARG */
-#line 1203 "util/configparser.y"
+ case 403: /* server_use_syslog: VAR_USE_SYSLOG STRING_ARG */
+#line 1221 "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)
@@ -4051,11 +4098,11 @@ yyreduce:
#endif
free((yyvsp[0].str));
}
-#line 4055 "util/configparser.c"
+#line 4102 "util/configparser.c"
break;
- case 403: /* server_log_time_ascii: VAR_LOG_TIME_ASCII STRING_ARG */
-#line 1217 "util/configparser.y"
+ case 404: /* server_log_time_ascii: VAR_LOG_TIME_ASCII STRING_ARG */
+#line 1235 "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)
@@ -4063,11 +4110,11 @@ yyreduce:
else cfg_parser->cfg->log_time_ascii = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4067 "util/configparser.c"
+#line 4114 "util/configparser.c"
break;
- case 404: /* server_log_queries: VAR_LOG_QUERIES STRING_ARG */
-#line 1226 "util/configparser.y"
+ case 405: /* server_log_queries: VAR_LOG_QUERIES STRING_ARG */
+#line 1244 "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)
@@ -4075,11 +4122,11 @@ yyreduce:
else cfg_parser->cfg->log_queries = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4079 "util/configparser.c"
+#line 4126 "util/configparser.c"
break;
- case 405: /* server_log_replies: VAR_LOG_REPLIES STRING_ARG */
-#line 1235 "util/configparser.y"
+ case 406: /* server_log_replies: VAR_LOG_REPLIES STRING_ARG */
+#line 1253 "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)
@@ -4087,11 +4134,11 @@ yyreduce:
else cfg_parser->cfg->log_replies = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4091 "util/configparser.c"
+#line 4138 "util/configparser.c"
break;
- case 406: /* server_log_tag_queryreply: VAR_LOG_TAG_QUERYREPLY STRING_ARG */
-#line 1244 "util/configparser.y"
+ case 407: /* server_log_tag_queryreply: VAR_LOG_TAG_QUERYREPLY STRING_ARG */
+#line 1262 "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)
@@ -4099,11 +4146,11 @@ yyreduce:
else cfg_parser->cfg->log_tag_queryreply = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4103 "util/configparser.c"
+#line 4150 "util/configparser.c"
break;
- case 407: /* server_log_servfail: VAR_LOG_SERVFAIL STRING_ARG */
-#line 1253 "util/configparser.y"
+ case 408: /* server_log_servfail: VAR_LOG_SERVFAIL STRING_ARG */
+#line 1271 "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)
@@ -4111,11 +4158,11 @@ yyreduce:
else cfg_parser->cfg->log_servfail = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4115 "util/configparser.c"
+#line 4162 "util/configparser.c"
break;
- case 408: /* server_log_destaddr: VAR_LOG_DESTADDR STRING_ARG */
-#line 1262 "util/configparser.y"
+ case 409: /* server_log_destaddr: VAR_LOG_DESTADDR STRING_ARG */
+#line 1280 "util/configparser.y"
{
OUTYY(("P(server_log_destaddr:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4123,11 +4170,11 @@ yyreduce:
else cfg_parser->cfg->log_destaddr = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4127 "util/configparser.c"
+#line 4174 "util/configparser.c"
break;
- case 409: /* server_log_local_actions: VAR_LOG_LOCAL_ACTIONS STRING_ARG */
-#line 1271 "util/configparser.y"
+ case 410: /* server_log_local_actions: VAR_LOG_LOCAL_ACTIONS STRING_ARG */
+#line 1289 "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)
@@ -4135,31 +4182,31 @@ yyreduce:
else cfg_parser->cfg->log_local_actions = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4139 "util/configparser.c"
+#line 4186 "util/configparser.c"
break;
- case 410: /* server_chroot: VAR_CHROOT STRING_ARG */
-#line 1280 "util/configparser.y"
+ case 411: /* server_chroot: VAR_CHROOT STRING_ARG */
+#line 1298 "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 4149 "util/configparser.c"
+#line 4196 "util/configparser.c"
break;
- case 411: /* server_username: VAR_USERNAME STRING_ARG */
-#line 1287 "util/configparser.y"
+ case 412: /* server_username: VAR_USERNAME STRING_ARG */
+#line 1305 "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 4159 "util/configparser.c"
+#line 4206 "util/configparser.c"
break;
- case 412: /* server_directory: VAR_DIRECTORY STRING_ARG */
-#line 1294 "util/configparser.y"
+ case 413: /* server_directory: VAR_DIRECTORY STRING_ARG */
+#line 1312 "util/configparser.y"
{
OUTYY(("P(server_directory:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->directory);
@@ -4184,105 +4231,105 @@ yyreduce:
}
}
}
-#line 4188 "util/configparser.c"
+#line 4235 "util/configparser.c"
break;
- case 413: /* server_logfile: VAR_LOGFILE STRING_ARG */
-#line 1320 "util/configparser.y"
+ case 414: /* server_logfile: VAR_LOGFILE STRING_ARG */
+#line 1338 "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 4199 "util/configparser.c"
+#line 4246 "util/configparser.c"
break;
- case 414: /* server_pidfile: VAR_PIDFILE STRING_ARG */
-#line 1328 "util/configparser.y"
+ case 415: /* server_pidfile: VAR_PIDFILE STRING_ARG */
+#line 1346 "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 4209 "util/configparser.c"
+#line 4256 "util/configparser.c"
break;
- case 415: /* server_root_hints: VAR_ROOT_HINTS STRING_ARG */
-#line 1335 "util/configparser.y"
+ case 416: /* server_root_hints: VAR_ROOT_HINTS STRING_ARG */
+#line 1353 "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 4219 "util/configparser.c"
+#line 4266 "util/configparser.c"
break;
- case 416: /* server_dlv_anchor_file: VAR_DLV_ANCHOR_FILE STRING_ARG */
-#line 1342 "util/configparser.y"
+ case 417: /* server_dlv_anchor_file: VAR_DLV_ANCHOR_FILE STRING_ARG */
+#line 1360 "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 4229 "util/configparser.c"
+#line 4276 "util/configparser.c"
break;
- case 417: /* server_dlv_anchor: VAR_DLV_ANCHOR STRING_ARG */
-#line 1349 "util/configparser.y"
+ case 418: /* server_dlv_anchor: VAR_DLV_ANCHOR STRING_ARG */
+#line 1367 "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 4239 "util/configparser.c"
+#line 4286 "util/configparser.c"
break;
- case 418: /* server_auto_trust_anchor_file: VAR_AUTO_TRUST_ANCHOR_FILE STRING_ARG */
-#line 1356 "util/configparser.y"
+ case 419: /* server_auto_trust_anchor_file: VAR_AUTO_TRUST_ANCHOR_FILE STRING_ARG */
+#line 1374 "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 4250 "util/configparser.c"
+#line 4297 "util/configparser.c"
break;
- case 419: /* server_trust_anchor_file: VAR_TRUST_ANCHOR_FILE STRING_ARG */
-#line 1364 "util/configparser.y"
+ case 420: /* server_trust_anchor_file: VAR_TRUST_ANCHOR_FILE STRING_ARG */
+#line 1382 "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 4261 "util/configparser.c"
+#line 4308 "util/configparser.c"
break;
- case 420: /* server_trusted_keys_file: VAR_TRUSTED_KEYS_FILE STRING_ARG */
-#line 1372 "util/configparser.y"
+ case 421: /* server_trusted_keys_file: VAR_TRUSTED_KEYS_FILE STRING_ARG */
+#line 1390 "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 4272 "util/configparser.c"
+#line 4319 "util/configparser.c"
break;
- case 421: /* server_trust_anchor: VAR_TRUST_ANCHOR STRING_ARG */
-#line 1380 "util/configparser.y"
+ case 422: /* server_trust_anchor: VAR_TRUST_ANCHOR STRING_ARG */
+#line 1398 "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 4282 "util/configparser.c"
+#line 4329 "util/configparser.c"
break;
- case 422: /* server_trust_anchor_signaling: VAR_TRUST_ANCHOR_SIGNALING STRING_ARG */
-#line 1387 "util/configparser.y"
+ case 423: /* server_trust_anchor_signaling: VAR_TRUST_ANCHOR_SIGNALING STRING_ARG */
+#line 1405 "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)
@@ -4292,11 +4339,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4296 "util/configparser.c"
+#line 4343 "util/configparser.c"
break;
- case 423: /* server_root_key_sentinel: VAR_ROOT_KEY_SENTINEL STRING_ARG */
-#line 1398 "util/configparser.y"
+ case 424: /* server_root_key_sentinel: VAR_ROOT_KEY_SENTINEL STRING_ARG */
+#line 1416 "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)
@@ -4306,21 +4353,21 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4310 "util/configparser.c"
+#line 4357 "util/configparser.c"
break;
- case 424: /* server_domain_insecure: VAR_DOMAIN_INSECURE STRING_ARG */
-#line 1409 "util/configparser.y"
+ case 425: /* server_domain_insecure: VAR_DOMAIN_INSECURE STRING_ARG */
+#line 1427 "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 4320 "util/configparser.c"
+#line 4367 "util/configparser.c"
break;
- case 425: /* server_hide_identity: VAR_HIDE_IDENTITY STRING_ARG */
-#line 1416 "util/configparser.y"
+ case 426: /* server_hide_identity: VAR_HIDE_IDENTITY STRING_ARG */
+#line 1434 "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)
@@ -4328,11 +4375,11 @@ yyreduce:
else cfg_parser->cfg->hide_identity = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4332 "util/configparser.c"
+#line 4379 "util/configparser.c"
break;
- case 426: /* server_hide_version: VAR_HIDE_VERSION STRING_ARG */
-#line 1425 "util/configparser.y"
+ case 427: /* server_hide_version: VAR_HIDE_VERSION STRING_ARG */
+#line 1443 "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)
@@ -4340,11 +4387,11 @@ yyreduce:
else cfg_parser->cfg->hide_version = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4344 "util/configparser.c"
+#line 4391 "util/configparser.c"
break;
- case 427: /* server_hide_trustanchor: VAR_HIDE_TRUSTANCHOR STRING_ARG */
-#line 1434 "util/configparser.y"
+ case 428: /* server_hide_trustanchor: VAR_HIDE_TRUSTANCHOR STRING_ARG */
+#line 1452 "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)
@@ -4352,11 +4399,11 @@ yyreduce:
else cfg_parser->cfg->hide_trustanchor = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4356 "util/configparser.c"
+#line 4403 "util/configparser.c"
break;
- case 428: /* server_hide_http_user_agent: VAR_HIDE_HTTP_USER_AGENT STRING_ARG */
-#line 1443 "util/configparser.y"
+ case 429: /* server_hide_http_user_agent: VAR_HIDE_HTTP_USER_AGENT STRING_ARG */
+#line 1461 "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)
@@ -4364,41 +4411,41 @@ yyreduce:
else cfg_parser->cfg->hide_http_user_agent = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4368 "util/configparser.c"
+#line 4415 "util/configparser.c"
break;
- case 429: /* server_identity: VAR_IDENTITY STRING_ARG */
-#line 1452 "util/configparser.y"
+ case 430: /* server_identity: VAR_IDENTITY STRING_ARG */
+#line 1470 "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 4378 "util/configparser.c"
+#line 4425 "util/configparser.c"
break;
- case 430: /* server_version: VAR_VERSION STRING_ARG */
-#line 1459 "util/configparser.y"
+ case 431: /* server_version: VAR_VERSION STRING_ARG */
+#line 1477 "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 4388 "util/configparser.c"
+#line 4435 "util/configparser.c"
break;
- case 431: /* server_http_user_agent: VAR_HTTP_USER_AGENT STRING_ARG */
-#line 1466 "util/configparser.y"
+ case 432: /* server_http_user_agent: VAR_HTTP_USER_AGENT STRING_ARG */
+#line 1484 "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 4398 "util/configparser.c"
+#line 4445 "util/configparser.c"
break;
- case 432: /* server_nsid: VAR_NSID STRING_ARG */
-#line 1473 "util/configparser.y"
+ case 433: /* server_nsid: VAR_NSID STRING_ARG */
+#line 1491 "util/configparser.y"
{
OUTYY(("P(server_nsid:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->nsid_cfg_str);
@@ -4413,33 +4460,33 @@ yyreduce:
yyerror("the NSID must be either a hex string or an "
"ascii character string prepended with ascii_.");
}
-#line 4417 "util/configparser.c"
+#line 4464 "util/configparser.c"
break;
- case 433: /* server_so_rcvbuf: VAR_SO_RCVBUF STRING_ARG */
-#line 1489 "util/configparser.y"
+ case 434: /* server_so_rcvbuf: VAR_SO_RCVBUF STRING_ARG */
+#line 1507 "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 4428 "util/configparser.c"
+#line 4475 "util/configparser.c"
break;
- case 434: /* server_so_sndbuf: VAR_SO_SNDBUF STRING_ARG */
-#line 1497 "util/configparser.y"
+ case 435: /* server_so_sndbuf: VAR_SO_SNDBUF STRING_ARG */
+#line 1515 "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 4439 "util/configparser.c"
+#line 4486 "util/configparser.c"
break;
- case 435: /* server_so_reuseport: VAR_SO_REUSEPORT STRING_ARG */
-#line 1505 "util/configparser.y"
+ case 436: /* server_so_reuseport: VAR_SO_REUSEPORT STRING_ARG */
+#line 1523 "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)
@@ -4448,11 +4495,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4452 "util/configparser.c"
+#line 4499 "util/configparser.c"
break;
- case 436: /* server_ip_transparent: VAR_IP_TRANSPARENT STRING_ARG */
-#line 1515 "util/configparser.y"
+ case 437: /* server_ip_transparent: VAR_IP_TRANSPARENT STRING_ARG */
+#line 1533 "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)
@@ -4461,11 +4508,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4465 "util/configparser.c"
+#line 4512 "util/configparser.c"
break;
- case 437: /* server_ip_freebind: VAR_IP_FREEBIND STRING_ARG */
-#line 1525 "util/configparser.y"
+ case 438: /* server_ip_freebind: VAR_IP_FREEBIND STRING_ARG */
+#line 1543 "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)
@@ -4474,11 +4521,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4478 "util/configparser.c"
+#line 4525 "util/configparser.c"
break;
- case 438: /* server_ip_dscp: VAR_IP_DSCP STRING_ARG */
-#line 1535 "util/configparser.y"
+ case 439: /* server_ip_dscp: VAR_IP_DSCP STRING_ARG */
+#line 1553 "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)
@@ -4491,22 +4538,22 @@ yyreduce:
cfg_parser->cfg->ip_dscp = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 4495 "util/configparser.c"
+#line 4542 "util/configparser.c"
break;
- case 439: /* server_stream_wait_size: VAR_STREAM_WAIT_SIZE STRING_ARG */
-#line 1549 "util/configparser.y"
+ case 440: /* server_stream_wait_size: VAR_STREAM_WAIT_SIZE STRING_ARG */
+#line 1567 "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 4506 "util/configparser.c"
+#line 4553 "util/configparser.c"
break;
- case 440: /* server_edns_buffer_size: VAR_EDNS_BUFFER_SIZE STRING_ARG */
-#line 1557 "util/configparser.y"
+ case 441: /* server_edns_buffer_size: VAR_EDNS_BUFFER_SIZE STRING_ARG */
+#line 1575 "util/configparser.y"
{
OUTYY(("P(server_edns_buffer_size:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0)
@@ -4518,11 +4565,11 @@ yyreduce:
else cfg_parser->cfg->edns_buffer_size = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 4522 "util/configparser.c"
+#line 4569 "util/configparser.c"
break;
- case 441: /* server_msg_buffer_size: VAR_MSG_BUFFER_SIZE STRING_ARG */
-#line 1570 "util/configparser.y"
+ case 442: /* server_msg_buffer_size: VAR_MSG_BUFFER_SIZE STRING_ARG */
+#line 1588 "util/configparser.y"
{
OUTYY(("P(server_msg_buffer_size:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0)
@@ -4532,22 +4579,22 @@ yyreduce:
else cfg_parser->cfg->msg_buffer_size = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 4536 "util/configparser.c"
+#line 4583 "util/configparser.c"
break;
- case 442: /* server_msg_cache_size: VAR_MSG_CACHE_SIZE STRING_ARG */
-#line 1581 "util/configparser.y"
+ case 443: /* server_msg_cache_size: VAR_MSG_CACHE_SIZE STRING_ARG */
+#line 1599 "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 4547 "util/configparser.c"
+#line 4594 "util/configparser.c"
break;
- case 443: /* server_msg_cache_slabs: VAR_MSG_CACHE_SLABS STRING_ARG */
-#line 1589 "util/configparser.y"
+ case 444: /* server_msg_cache_slabs: VAR_MSG_CACHE_SLABS STRING_ARG */
+#line 1607 "util/configparser.y"
{
OUTYY(("P(server_msg_cache_slabs:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0) {
@@ -4559,11 +4606,11 @@ yyreduce:
}
free((yyvsp[0].str));
}
-#line 4563 "util/configparser.c"
+#line 4610 "util/configparser.c"
break;
- case 444: /* server_num_queries_per_thread: VAR_NUM_QUERIES_PER_THREAD STRING_ARG */
-#line 1602 "util/configparser.y"
+ case 445: /* server_num_queries_per_thread: VAR_NUM_QUERIES_PER_THREAD STRING_ARG */
+#line 1620 "util/configparser.y"
{
OUTYY(("P(server_num_queries_per_thread:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0)
@@ -4571,11 +4618,11 @@ yyreduce:
else cfg_parser->cfg->num_queries_per_thread = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 4575 "util/configparser.c"
+#line 4622 "util/configparser.c"
break;
- case 445: /* server_jostle_timeout: VAR_JOSTLE_TIMEOUT STRING_ARG */
-#line 1611 "util/configparser.y"
+ case 446: /* server_jostle_timeout: VAR_JOSTLE_TIMEOUT STRING_ARG */
+#line 1629 "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)
@@ -4583,11 +4630,11 @@ yyreduce:
else cfg_parser->cfg->jostle_time = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 4587 "util/configparser.c"
+#line 4634 "util/configparser.c"
break;
- case 446: /* server_delay_close: VAR_DELAY_CLOSE STRING_ARG */
-#line 1620 "util/configparser.y"
+ case 447: /* server_delay_close: VAR_DELAY_CLOSE STRING_ARG */
+#line 1638 "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)
@@ -4595,11 +4642,11 @@ yyreduce:
else cfg_parser->cfg->delay_close = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 4599 "util/configparser.c"
+#line 4646 "util/configparser.c"
break;
- case 447: /* server_udp_connect: VAR_UDP_CONNECT STRING_ARG */
-#line 1629 "util/configparser.y"
+ case 448: /* server_udp_connect: VAR_UDP_CONNECT STRING_ARG */
+#line 1647 "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)
@@ -4607,11 +4654,11 @@ yyreduce:
else cfg_parser->cfg->udp_connect = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4611 "util/configparser.c"
+#line 4658 "util/configparser.c"
break;
- case 448: /* server_unblock_lan_zones: VAR_UNBLOCK_LAN_ZONES STRING_ARG */
-#line 1638 "util/configparser.y"
+ case 449: /* server_unblock_lan_zones: VAR_UNBLOCK_LAN_ZONES STRING_ARG */
+#line 1656 "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)
@@ -4620,11 +4667,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4624 "util/configparser.c"
+#line 4671 "util/configparser.c"
break;
- case 449: /* server_insecure_lan_zones: VAR_INSECURE_LAN_ZONES STRING_ARG */
-#line 1648 "util/configparser.y"
+ case 450: /* server_insecure_lan_zones: VAR_INSECURE_LAN_ZONES STRING_ARG */
+#line 1666 "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)
@@ -4633,22 +4680,22 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4637 "util/configparser.c"
+#line 4684 "util/configparser.c"
break;
- case 450: /* server_rrset_cache_size: VAR_RRSET_CACHE_SIZE STRING_ARG */
-#line 1658 "util/configparser.y"
+ case 451: /* server_rrset_cache_size: VAR_RRSET_CACHE_SIZE STRING_ARG */
+#line 1676 "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 4648 "util/configparser.c"
+#line 4695 "util/configparser.c"
break;
- case 451: /* server_rrset_cache_slabs: VAR_RRSET_CACHE_SLABS STRING_ARG */
-#line 1666 "util/configparser.y"
+ case 452: /* server_rrset_cache_slabs: VAR_RRSET_CACHE_SLABS STRING_ARG */
+#line 1684 "util/configparser.y"
{
OUTYY(("P(server_rrset_cache_slabs:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0) {
@@ -4660,11 +4707,11 @@ yyreduce:
}
free((yyvsp[0].str));
}
-#line 4664 "util/configparser.c"
+#line 4711 "util/configparser.c"
break;
- case 452: /* server_infra_host_ttl: VAR_INFRA_HOST_TTL STRING_ARG */
-#line 1679 "util/configparser.y"
+ case 453: /* server_infra_host_ttl: VAR_INFRA_HOST_TTL STRING_ARG */
+#line 1697 "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)
@@ -4672,22 +4719,22 @@ yyreduce:
else cfg_parser->cfg->host_ttl = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 4676 "util/configparser.c"
+#line 4723 "util/configparser.c"
break;
- case 453: /* server_infra_lame_ttl: VAR_INFRA_LAME_TTL STRING_ARG */
-#line 1688 "util/configparser.y"
+ case 454: /* server_infra_lame_ttl: VAR_INFRA_LAME_TTL STRING_ARG */
+#line 1706 "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 4687 "util/configparser.c"
+#line 4734 "util/configparser.c"
break;
- case 454: /* server_infra_cache_numhosts: VAR_INFRA_CACHE_NUMHOSTS STRING_ARG */
-#line 1696 "util/configparser.y"
+ case 455: /* server_infra_cache_numhosts: VAR_INFRA_CACHE_NUMHOSTS STRING_ARG */
+#line 1714 "util/configparser.y"
{
OUTYY(("P(server_infra_cache_numhosts:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0)
@@ -4695,22 +4742,22 @@ yyreduce:
else cfg_parser->cfg->infra_cache_numhosts = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 4699 "util/configparser.c"
+#line 4746 "util/configparser.c"
break;
- case 455: /* server_infra_cache_lame_size: VAR_INFRA_CACHE_LAME_SIZE STRING_ARG */
-#line 1705 "util/configparser.y"
+ case 456: /* server_infra_cache_lame_size: VAR_INFRA_CACHE_LAME_SIZE STRING_ARG */
+#line 1723 "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 4710 "util/configparser.c"
+#line 4757 "util/configparser.c"
break;
- case 456: /* server_infra_cache_slabs: VAR_INFRA_CACHE_SLABS STRING_ARG */
-#line 1713 "util/configparser.y"
+ case 457: /* server_infra_cache_slabs: VAR_INFRA_CACHE_SLABS STRING_ARG */
+#line 1731 "util/configparser.y"
{
OUTYY(("P(server_infra_cache_slabs:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0) {
@@ -4722,11 +4769,11 @@ yyreduce:
}
free((yyvsp[0].str));
}
-#line 4726 "util/configparser.c"
+#line 4773 "util/configparser.c"
break;
- case 457: /* server_infra_cache_min_rtt: VAR_INFRA_CACHE_MIN_RTT STRING_ARG */
-#line 1726 "util/configparser.y"
+ case 458: /* server_infra_cache_min_rtt: VAR_INFRA_CACHE_MIN_RTT STRING_ARG */
+#line 1744 "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)
@@ -4734,11 +4781,11 @@ yyreduce:
else cfg_parser->cfg->infra_cache_min_rtt = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 4738 "util/configparser.c"
+#line 4785 "util/configparser.c"
break;
- case 458: /* server_infra_cache_max_rtt: VAR_INFRA_CACHE_MAX_RTT STRING_ARG */
-#line 1735 "util/configparser.y"
+ case 459: /* server_infra_cache_max_rtt: VAR_INFRA_CACHE_MAX_RTT STRING_ARG */
+#line 1753 "util/configparser.y"
{
OUTYY(("P(server_infra_cache_max_rtt:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -4746,11 +4793,11 @@ yyreduce:
else cfg_parser->cfg->infra_cache_max_rtt = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 4750 "util/configparser.c"
+#line 4797 "util/configparser.c"
break;
- case 459: /* server_infra_keep_probing: VAR_INFRA_KEEP_PROBING STRING_ARG */
-#line 1744 "util/configparser.y"
+ case 460: /* server_infra_keep_probing: VAR_INFRA_KEEP_PROBING STRING_ARG */
+#line 1762 "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)
@@ -4759,21 +4806,21 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4763 "util/configparser.c"
+#line 4810 "util/configparser.c"
break;
- case 460: /* server_target_fetch_policy: VAR_TARGET_FETCH_POLICY STRING_ARG */
-#line 1754 "util/configparser.y"
+ case 461: /* server_target_fetch_policy: VAR_TARGET_FETCH_POLICY STRING_ARG */
+#line 1772 "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 4773 "util/configparser.c"
+#line 4820 "util/configparser.c"
break;
- case 461: /* server_harden_short_bufsize: VAR_HARDEN_SHORT_BUFSIZE STRING_ARG */
-#line 1761 "util/configparser.y"
+ case 462: /* server_harden_short_bufsize: VAR_HARDEN_SHORT_BUFSIZE STRING_ARG */
+#line 1779 "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)
@@ -4782,11 +4829,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4786 "util/configparser.c"
+#line 4833 "util/configparser.c"
break;
- case 462: /* server_harden_large_queries: VAR_HARDEN_LARGE_QUERIES STRING_ARG */
-#line 1771 "util/configparser.y"
+ case 463: /* server_harden_large_queries: VAR_HARDEN_LARGE_QUERIES STRING_ARG */
+#line 1789 "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)
@@ -4795,11 +4842,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4799 "util/configparser.c"
+#line 4846 "util/configparser.c"
break;
- case 463: /* server_harden_glue: VAR_HARDEN_GLUE STRING_ARG */
-#line 1781 "util/configparser.y"
+ case 464: /* server_harden_glue: VAR_HARDEN_GLUE STRING_ARG */
+#line 1799 "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)
@@ -4808,11 +4855,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4812 "util/configparser.c"
+#line 4859 "util/configparser.c"
break;
- case 464: /* server_harden_dnssec_stripped: VAR_HARDEN_DNSSEC_STRIPPED STRING_ARG */
-#line 1791 "util/configparser.y"
+ case 465: /* server_harden_dnssec_stripped: VAR_HARDEN_DNSSEC_STRIPPED STRING_ARG */
+#line 1809 "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)
@@ -4821,11 +4868,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4825 "util/configparser.c"
+#line 4872 "util/configparser.c"
break;
- case 465: /* server_harden_below_nxdomain: VAR_HARDEN_BELOW_NXDOMAIN STRING_ARG */
-#line 1801 "util/configparser.y"
+ case 466: /* server_harden_below_nxdomain: VAR_HARDEN_BELOW_NXDOMAIN STRING_ARG */
+#line 1819 "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)
@@ -4834,11 +4881,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4838 "util/configparser.c"
+#line 4885 "util/configparser.c"
break;
- case 466: /* server_harden_referral_path: VAR_HARDEN_REFERRAL_PATH STRING_ARG */
-#line 1811 "util/configparser.y"
+ case 467: /* server_harden_referral_path: VAR_HARDEN_REFERRAL_PATH STRING_ARG */
+#line 1829 "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)
@@ -4847,11 +4894,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4851 "util/configparser.c"
+#line 4898 "util/configparser.c"
break;
- case 467: /* server_harden_algo_downgrade: VAR_HARDEN_ALGO_DOWNGRADE STRING_ARG */
-#line 1821 "util/configparser.y"
+ case 468: /* server_harden_algo_downgrade: VAR_HARDEN_ALGO_DOWNGRADE STRING_ARG */
+#line 1839 "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)
@@ -4860,11 +4907,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4864 "util/configparser.c"
+#line 4911 "util/configparser.c"
break;
- case 468: /* server_harden_unknown_additional: VAR_HARDEN_UNKNOWN_ADDITIONAL STRING_ARG */
-#line 1831 "util/configparser.y"
+ case 469: /* server_harden_unknown_additional: VAR_HARDEN_UNKNOWN_ADDITIONAL STRING_ARG */
+#line 1849 "util/configparser.y"
{
OUTYY(("P(server_harden_unknown_additional:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4873,11 +4920,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4877 "util/configparser.c"
+#line 4924 "util/configparser.c"
break;
- case 469: /* server_use_caps_for_id: VAR_USE_CAPS_FOR_ID STRING_ARG */
-#line 1841 "util/configparser.y"
+ case 470: /* server_use_caps_for_id: VAR_USE_CAPS_FOR_ID STRING_ARG */
+#line 1859 "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)
@@ -4886,41 +4933,41 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4890 "util/configparser.c"
+#line 4937 "util/configparser.c"
break;
- case 470: /* server_caps_whitelist: VAR_CAPS_WHITELIST STRING_ARG */
-#line 1851 "util/configparser.y"
+ case 471: /* server_caps_whitelist: VAR_CAPS_WHITELIST STRING_ARG */
+#line 1869 "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 4900 "util/configparser.c"
+#line 4947 "util/configparser.c"
break;
- case 471: /* server_private_address: VAR_PRIVATE_ADDRESS STRING_ARG */
-#line 1858 "util/configparser.y"
+ case 472: /* server_private_address: VAR_PRIVATE_ADDRESS STRING_ARG */
+#line 1876 "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 4910 "util/configparser.c"
+#line 4957 "util/configparser.c"
break;
- case 472: /* server_private_domain: VAR_PRIVATE_DOMAIN STRING_ARG */
-#line 1865 "util/configparser.y"
+ case 473: /* server_private_domain: VAR_PRIVATE_DOMAIN STRING_ARG */
+#line 1883 "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 4920 "util/configparser.c"
+#line 4967 "util/configparser.c"
break;
- case 473: /* server_prefetch: VAR_PREFETCH STRING_ARG */
-#line 1872 "util/configparser.y"
+ case 474: /* server_prefetch: VAR_PREFETCH STRING_ARG */
+#line 1890 "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)
@@ -4928,11 +4975,11 @@ yyreduce:
else cfg_parser->cfg->prefetch = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4932 "util/configparser.c"
+#line 4979 "util/configparser.c"
break;
- case 474: /* server_prefetch_key: VAR_PREFETCH_KEY STRING_ARG */
-#line 1881 "util/configparser.y"
+ case 475: /* server_prefetch_key: VAR_PREFETCH_KEY STRING_ARG */
+#line 1899 "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)
@@ -4940,11 +4987,11 @@ yyreduce:
else cfg_parser->cfg->prefetch_key = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4944 "util/configparser.c"
+#line 4991 "util/configparser.c"
break;
- case 475: /* server_deny_any: VAR_DENY_ANY STRING_ARG */
-#line 1890 "util/configparser.y"
+ case 476: /* server_deny_any: VAR_DENY_ANY STRING_ARG */
+#line 1908 "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)
@@ -4952,11 +4999,11 @@ yyreduce:
else cfg_parser->cfg->deny_any = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4956 "util/configparser.c"
+#line 5003 "util/configparser.c"
break;
- case 476: /* server_unwanted_reply_threshold: VAR_UNWANTED_REPLY_THRESHOLD STRING_ARG */
-#line 1899 "util/configparser.y"
+ case 477: /* server_unwanted_reply_threshold: VAR_UNWANTED_REPLY_THRESHOLD STRING_ARG */
+#line 1917 "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)
@@ -4964,21 +5011,21 @@ yyreduce:
else cfg_parser->cfg->unwanted_threshold = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 4968 "util/configparser.c"
+#line 5015 "util/configparser.c"
break;
- case 477: /* server_do_not_query_address: VAR_DO_NOT_QUERY_ADDRESS STRING_ARG */
-#line 1908 "util/configparser.y"
+ case 478: /* server_do_not_query_address: VAR_DO_NOT_QUERY_ADDRESS STRING_ARG */
+#line 1926 "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 4978 "util/configparser.c"
+#line 5025 "util/configparser.c"
break;
- case 478: /* server_do_not_query_localhost: VAR_DO_NOT_QUERY_LOCALHOST STRING_ARG */
-#line 1915 "util/configparser.y"
+ case 479: /* server_do_not_query_localhost: VAR_DO_NOT_QUERY_LOCALHOST STRING_ARG */
+#line 1933 "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)
@@ -4987,22 +5034,22 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4991 "util/configparser.c"
+#line 5038 "util/configparser.c"
break;
- case 479: /* server_access_control: VAR_ACCESS_CONTROL STRING_ARG STRING_ARG */
-#line 1925 "util/configparser.y"
+ case 480: /* server_access_control: VAR_ACCESS_CONTROL STRING_ARG STRING_ARG */
+#line 1943 "util/configparser.y"
{
OUTYY(("P(server_access_control:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
validate_acl_action((yyvsp[0].str));
if(!cfg_str2list_insert(&cfg_parser->cfg->acls, (yyvsp[-1].str), (yyvsp[0].str)))
fatal_exit("out of memory adding acl");
}
-#line 5002 "util/configparser.c"
+#line 5049 "util/configparser.c"
break;
- case 480: /* server_interface_action: VAR_INTERFACE_ACTION STRING_ARG STRING_ARG */
-#line 1933 "util/configparser.y"
+ case 481: /* server_interface_action: VAR_INTERFACE_ACTION STRING_ARG STRING_ARG */
+#line 1951 "util/configparser.y"
{
OUTYY(("P(server_interface_action:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
validate_acl_action((yyvsp[0].str));
@@ -5010,21 +5057,21 @@ yyreduce:
&cfg_parser->cfg->interface_actions, (yyvsp[-1].str), (yyvsp[0].str)))
fatal_exit("out of memory adding acl");
}
-#line 5014 "util/configparser.c"
+#line 5061 "util/configparser.c"
break;
- case 481: /* server_module_conf: VAR_MODULE_CONF STRING_ARG */
-#line 1942 "util/configparser.y"
+ case 482: /* server_module_conf: VAR_MODULE_CONF STRING_ARG */
+#line 1960 "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 5024 "util/configparser.c"
+#line 5071 "util/configparser.c"
break;
- case 482: /* server_val_override_date: VAR_VAL_OVERRIDE_DATE STRING_ARG */
-#line 1949 "util/configparser.y"
+ case 483: /* server_val_override_date: VAR_VAL_OVERRIDE_DATE STRING_ARG */
+#line 1967 "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) {
@@ -5041,11 +5088,11 @@ yyreduce:
}
free((yyvsp[0].str));
}
-#line 5045 "util/configparser.c"
+#line 5092 "util/configparser.c"
break;
- case 483: /* server_val_sig_skew_min: VAR_VAL_SIG_SKEW_MIN STRING_ARG */
-#line 1967 "util/configparser.y"
+ case 484: /* server_val_sig_skew_min: VAR_VAL_SIG_SKEW_MIN STRING_ARG */
+#line 1985 "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) {
@@ -5057,11 +5104,11 @@ yyreduce:
}
free((yyvsp[0].str));
}
-#line 5061 "util/configparser.c"
+#line 5108 "util/configparser.c"
break;
- case 484: /* server_val_sig_skew_max: VAR_VAL_SIG_SKEW_MAX STRING_ARG */
-#line 1980 "util/configparser.y"
+ case 485: /* server_val_sig_skew_max: VAR_VAL_SIG_SKEW_MAX STRING_ARG */
+#line 1998 "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) {
@@ -5073,11 +5120,11 @@ yyreduce:
}
free((yyvsp[0].str));
}
-#line 5077 "util/configparser.c"
+#line 5124 "util/configparser.c"
break;
- case 485: /* server_val_max_restart: VAR_VAL_MAX_RESTART STRING_ARG */
-#line 1993 "util/configparser.y"
+ case 486: /* server_val_max_restart: VAR_VAL_MAX_RESTART STRING_ARG */
+#line 2011 "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) {
@@ -5089,11 +5136,11 @@ yyreduce:
}
free((yyvsp[0].str));
}
-#line 5093 "util/configparser.c"
+#line 5140 "util/configparser.c"
break;
- case 486: /* server_cache_max_ttl: VAR_CACHE_MAX_TTL STRING_ARG */
-#line 2006 "util/configparser.y"
+ case 487: /* server_cache_max_ttl: VAR_CACHE_MAX_TTL STRING_ARG */
+#line 2024 "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)
@@ -5101,11 +5148,11 @@ yyreduce:
else cfg_parser->cfg->max_ttl = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 5105 "util/configparser.c"
+#line 5152 "util/configparser.c"
break;
- case 487: /* server_cache_max_negative_ttl: VAR_CACHE_MAX_NEGATIVE_TTL STRING_ARG */
-#line 2015 "util/configparser.y"
+ case 488: /* server_cache_max_negative_ttl: VAR_CACHE_MAX_NEGATIVE_TTL STRING_ARG */
+#line 2033 "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)
@@ -5113,11 +5160,11 @@ yyreduce:
else cfg_parser->cfg->max_negative_ttl = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 5117 "util/configparser.c"
+#line 5164 "util/configparser.c"
break;
- case 488: /* server_cache_min_negative_ttl: VAR_CACHE_MIN_NEGATIVE_TTL STRING_ARG */
-#line 2024 "util/configparser.y"
+ case 489: /* server_cache_min_negative_ttl: VAR_CACHE_MIN_NEGATIVE_TTL STRING_ARG */
+#line 2042 "util/configparser.y"
{
OUTYY(("P(server_cache_min_negative_ttl:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -5125,11 +5172,11 @@ yyreduce:
else cfg_parser->cfg->min_negative_ttl = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 5129 "util/configparser.c"
+#line 5176 "util/configparser.c"
break;
- case 489: /* server_cache_min_ttl: VAR_CACHE_MIN_TTL STRING_ARG */
-#line 2033 "util/configparser.y"
+ case 490: /* server_cache_min_ttl: VAR_CACHE_MIN_TTL STRING_ARG */
+#line 2051 "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)
@@ -5137,11 +5184,11 @@ yyreduce:
else cfg_parser->cfg->min_ttl = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 5141 "util/configparser.c"
+#line 5188 "util/configparser.c"
break;
- case 490: /* server_bogus_ttl: VAR_BOGUS_TTL STRING_ARG */
-#line 2042 "util/configparser.y"
+ case 491: /* server_bogus_ttl: VAR_BOGUS_TTL STRING_ARG */
+#line 2060 "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)
@@ -5149,11 +5196,11 @@ yyreduce:
else cfg_parser->cfg->bogus_ttl = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 5153 "util/configparser.c"
+#line 5200 "util/configparser.c"
break;
- case 491: /* server_val_clean_additional: VAR_VAL_CLEAN_ADDITIONAL STRING_ARG */
-#line 2051 "util/configparser.y"
+ case 492: /* server_val_clean_additional: VAR_VAL_CLEAN_ADDITIONAL STRING_ARG */
+#line 2069 "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)
@@ -5162,11 +5209,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5166 "util/configparser.c"
+#line 5213 "util/configparser.c"
break;
- case 492: /* server_val_permissive_mode: VAR_VAL_PERMISSIVE_MODE STRING_ARG */
-#line 2061 "util/configparser.y"
+ case 493: /* server_val_permissive_mode: VAR_VAL_PERMISSIVE_MODE STRING_ARG */
+#line 2079 "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)
@@ -5175,11 +5222,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5179 "util/configparser.c"
+#line 5226 "util/configparser.c"
break;
- case 493: /* server_aggressive_nsec: VAR_AGGRESSIVE_NSEC STRING_ARG */
-#line 2071 "util/configparser.y"
+ case 494: /* server_aggressive_nsec: VAR_AGGRESSIVE_NSEC STRING_ARG */
+#line 2089 "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)
@@ -5189,11 +5236,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5193 "util/configparser.c"
+#line 5240 "util/configparser.c"
break;
- case 494: /* server_ignore_cd_flag: VAR_IGNORE_CD_FLAG STRING_ARG */
-#line 2082 "util/configparser.y"
+ case 495: /* server_ignore_cd_flag: VAR_IGNORE_CD_FLAG STRING_ARG */
+#line 2100 "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)
@@ -5201,11 +5248,11 @@ yyreduce:
else cfg_parser->cfg->ignore_cd = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5205 "util/configparser.c"
+#line 5252 "util/configparser.c"
break;
- case 495: /* server_disable_edns_do: VAR_DISABLE_EDNS_DO STRING_ARG */
-#line 2091 "util/configparser.y"
+ case 496: /* server_disable_edns_do: VAR_DISABLE_EDNS_DO STRING_ARG */
+#line 2109 "util/configparser.y"
{
OUTYY(("P(server_disable_edns_do:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -5213,11 +5260,11 @@ yyreduce:
else cfg_parser->cfg->disable_edns_do = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5217 "util/configparser.c"
+#line 5264 "util/configparser.c"
break;
- case 496: /* server_serve_expired: VAR_SERVE_EXPIRED STRING_ARG */
-#line 2100 "util/configparser.y"
+ case 497: /* server_serve_expired: VAR_SERVE_EXPIRED STRING_ARG */
+#line 2118 "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)
@@ -5225,11 +5272,11 @@ yyreduce:
else cfg_parser->cfg->serve_expired = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5229 "util/configparser.c"
+#line 5276 "util/configparser.c"
break;
- case 497: /* server_serve_expired_ttl: VAR_SERVE_EXPIRED_TTL STRING_ARG */
-#line 2109 "util/configparser.y"
+ case 498: /* server_serve_expired_ttl: VAR_SERVE_EXPIRED_TTL STRING_ARG */
+#line 2127 "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)
@@ -5237,11 +5284,11 @@ yyreduce:
else cfg_parser->cfg->serve_expired_ttl = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 5241 "util/configparser.c"
+#line 5288 "util/configparser.c"
break;
- case 498: /* server_serve_expired_ttl_reset: VAR_SERVE_EXPIRED_TTL_RESET STRING_ARG */
-#line 2118 "util/configparser.y"
+ case 499: /* server_serve_expired_ttl_reset: VAR_SERVE_EXPIRED_TTL_RESET STRING_ARG */
+#line 2136 "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)
@@ -5249,11 +5296,11 @@ yyreduce:
else cfg_parser->cfg->serve_expired_ttl_reset = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5253 "util/configparser.c"
+#line 5300 "util/configparser.c"
break;
- case 499: /* server_serve_expired_reply_ttl: VAR_SERVE_EXPIRED_REPLY_TTL STRING_ARG */
-#line 2127 "util/configparser.y"
+ case 500: /* server_serve_expired_reply_ttl: VAR_SERVE_EXPIRED_REPLY_TTL STRING_ARG */
+#line 2145 "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)
@@ -5261,11 +5308,11 @@ yyreduce:
else cfg_parser->cfg->serve_expired_reply_ttl = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 5265 "util/configparser.c"
+#line 5312 "util/configparser.c"
break;
- case 500: /* server_serve_expired_client_timeout: VAR_SERVE_EXPIRED_CLIENT_TIMEOUT STRING_ARG */
-#line 2136 "util/configparser.y"
+ case 501: /* server_serve_expired_client_timeout: VAR_SERVE_EXPIRED_CLIENT_TIMEOUT STRING_ARG */
+#line 2154 "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)
@@ -5273,11 +5320,11 @@ yyreduce:
else cfg_parser->cfg->serve_expired_client_timeout = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 5277 "util/configparser.c"
+#line 5324 "util/configparser.c"
break;
- case 501: /* server_ede_serve_expired: VAR_EDE_SERVE_EXPIRED STRING_ARG */
-#line 2145 "util/configparser.y"
+ case 502: /* server_ede_serve_expired: VAR_EDE_SERVE_EXPIRED STRING_ARG */
+#line 2163 "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)
@@ -5285,11 +5332,11 @@ yyreduce:
else cfg_parser->cfg->ede_serve_expired = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5289 "util/configparser.c"
+#line 5336 "util/configparser.c"
break;
- case 502: /* server_serve_original_ttl: VAR_SERVE_ORIGINAL_TTL STRING_ARG */
-#line 2154 "util/configparser.y"
+ case 503: /* server_serve_original_ttl: VAR_SERVE_ORIGINAL_TTL STRING_ARG */
+#line 2172 "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)
@@ -5297,11 +5344,11 @@ yyreduce:
else cfg_parser->cfg->serve_original_ttl = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5301 "util/configparser.c"
+#line 5348 "util/configparser.c"
break;
- case 503: /* server_fake_dsa: VAR_FAKE_DSA STRING_ARG */
-#line 2163 "util/configparser.y"
+ case 504: /* server_fake_dsa: VAR_FAKE_DSA STRING_ARG */
+#line 2181 "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)
@@ -5313,11 +5360,11 @@ yyreduce:
#endif
free((yyvsp[0].str));
}
-#line 5317 "util/configparser.c"
+#line 5364 "util/configparser.c"
break;
- case 504: /* server_fake_sha1: VAR_FAKE_SHA1 STRING_ARG */
-#line 2176 "util/configparser.y"
+ case 505: /* server_fake_sha1: VAR_FAKE_SHA1 STRING_ARG */
+#line 2194 "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)
@@ -5329,11 +5376,11 @@ yyreduce:
#endif
free((yyvsp[0].str));
}
-#line 5333 "util/configparser.c"
+#line 5380 "util/configparser.c"
break;
- case 505: /* server_val_log_level: VAR_VAL_LOG_LEVEL STRING_ARG */
-#line 2189 "util/configparser.y"
+ case 506: /* server_val_log_level: VAR_VAL_LOG_LEVEL STRING_ARG */
+#line 2207 "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)
@@ -5341,21 +5388,21 @@ yyreduce:
else cfg_parser->cfg->val_log_level = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 5345 "util/configparser.c"
+#line 5392 "util/configparser.c"
break;
- case 506: /* server_val_nsec3_keysize_iterations: VAR_VAL_NSEC3_KEYSIZE_ITERATIONS STRING_ARG */
-#line 2198 "util/configparser.y"
+ case 507: /* server_val_nsec3_keysize_iterations: VAR_VAL_NSEC3_KEYSIZE_ITERATIONS STRING_ARG */
+#line 2216 "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 5355 "util/configparser.c"
+#line 5402 "util/configparser.c"
break;
- case 507: /* server_zonemd_permissive_mode: VAR_ZONEMD_PERMISSIVE_MODE STRING_ARG */
-#line 2205 "util/configparser.y"
+ case 508: /* server_zonemd_permissive_mode: VAR_ZONEMD_PERMISSIVE_MODE STRING_ARG */
+#line 2223 "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)
@@ -5363,11 +5410,11 @@ yyreduce:
else cfg_parser->cfg->zonemd_permissive_mode = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5367 "util/configparser.c"
+#line 5414 "util/configparser.c"
break;
- case 508: /* server_add_holddown: VAR_ADD_HOLDDOWN STRING_ARG */
-#line 2214 "util/configparser.y"
+ case 509: /* server_add_holddown: VAR_ADD_HOLDDOWN STRING_ARG */
+#line 2232 "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)
@@ -5375,11 +5422,11 @@ yyreduce:
else cfg_parser->cfg->add_holddown = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 5379 "util/configparser.c"
+#line 5426 "util/configparser.c"
break;
- case 509: /* server_del_holddown: VAR_DEL_HOLDDOWN STRING_ARG */
-#line 2223 "util/configparser.y"
+ case 510: /* server_del_holddown: VAR_DEL_HOLDDOWN STRING_ARG */
+#line 2241 "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)
@@ -5387,11 +5434,11 @@ yyreduce:
else cfg_parser->cfg->del_holddown = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 5391 "util/configparser.c"
+#line 5438 "util/configparser.c"
break;
- case 510: /* server_keep_missing: VAR_KEEP_MISSING STRING_ARG */
-#line 2232 "util/configparser.y"
+ case 511: /* server_keep_missing: VAR_KEEP_MISSING STRING_ARG */
+#line 2250 "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)
@@ -5399,11 +5446,11 @@ yyreduce:
else cfg_parser->cfg->keep_missing = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 5403 "util/configparser.c"
+#line 5450 "util/configparser.c"
break;
- case 511: /* server_permit_small_holddown: VAR_PERMIT_SMALL_HOLDDOWN STRING_ARG */
-#line 2241 "util/configparser.y"
+ case 512: /* server_permit_small_holddown: VAR_PERMIT_SMALL_HOLDDOWN STRING_ARG */
+#line 2259 "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)
@@ -5412,22 +5459,22 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5416 "util/configparser.c"
+#line 5463 "util/configparser.c"
break;
- case 512: /* server_key_cache_size: VAR_KEY_CACHE_SIZE STRING_ARG */
-#line 2251 "util/configparser.y"
+ case 513: /* server_key_cache_size: VAR_KEY_CACHE_SIZE STRING_ARG */
+#line 2269 "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 5427 "util/configparser.c"
+#line 5474 "util/configparser.c"
break;
- case 513: /* server_key_cache_slabs: VAR_KEY_CACHE_SLABS STRING_ARG */
-#line 2259 "util/configparser.y"
+ case 514: /* server_key_cache_slabs: VAR_KEY_CACHE_SLABS STRING_ARG */
+#line 2277 "util/configparser.y"
{
OUTYY(("P(server_key_cache_slabs:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0) {
@@ -5439,22 +5486,22 @@ yyreduce:
}
free((yyvsp[0].str));
}
-#line 5443 "util/configparser.c"
+#line 5490 "util/configparser.c"
break;
- case 514: /* server_neg_cache_size: VAR_NEG_CACHE_SIZE STRING_ARG */
-#line 2272 "util/configparser.y"
+ case 515: /* server_neg_cache_size: VAR_NEG_CACHE_SIZE STRING_ARG */
+#line 2290 "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 5454 "util/configparser.c"
+#line 5501 "util/configparser.c"
break;
- case 515: /* server_local_zone: VAR_LOCAL_ZONE STRING_ARG STRING_ARG */
-#line 2280 "util/configparser.y"
+ case 516: /* server_local_zone: VAR_LOCAL_ZONE STRING_ARG STRING_ARG */
+#line 2298 "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 &&
@@ -5509,21 +5556,21 @@ yyreduce:
fatal_exit("out of memory adding local-zone");
}
}
-#line 5513 "util/configparser.c"
+#line 5560 "util/configparser.c"
break;
- case 516: /* server_local_data: VAR_LOCAL_DATA STRING_ARG */
-#line 2336 "util/configparser.y"
+ case 517: /* server_local_data: VAR_LOCAL_DATA STRING_ARG */
+#line 2354 "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 5523 "util/configparser.c"
+#line 5570 "util/configparser.c"
break;
- case 517: /* server_local_data_ptr: VAR_LOCAL_DATA_PTR STRING_ARG */
-#line 2343 "util/configparser.y"
+ case 518: /* server_local_data_ptr: VAR_LOCAL_DATA_PTR STRING_ARG */
+#line 2361 "util/configparser.y"
{
char* ptr;
OUTYY(("P(server_local_data_ptr:%s)\n", (yyvsp[0].str)));
@@ -5537,11 +5584,11 @@ yyreduce:
yyerror("local-data-ptr could not be reversed");
}
}
-#line 5541 "util/configparser.c"
+#line 5588 "util/configparser.c"
break;
- case 518: /* server_minimal_responses: VAR_MINIMAL_RESPONSES STRING_ARG */
-#line 2358 "util/configparser.y"
+ case 519: /* server_minimal_responses: VAR_MINIMAL_RESPONSES STRING_ARG */
+#line 2376 "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)
@@ -5550,11 +5597,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5554 "util/configparser.c"
+#line 5601 "util/configparser.c"
break;
- case 519: /* server_rrset_roundrobin: VAR_RRSET_ROUNDROBIN STRING_ARG */
-#line 2368 "util/configparser.y"
+ case 520: /* server_rrset_roundrobin: VAR_RRSET_ROUNDROBIN STRING_ARG */
+#line 2386 "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)
@@ -5563,51 +5610,51 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5567 "util/configparser.c"
+#line 5614 "util/configparser.c"
break;
- case 520: /* server_unknown_server_time_limit: VAR_UNKNOWN_SERVER_TIME_LIMIT STRING_ARG */
-#line 2378 "util/configparser.y"
+ case 521: /* server_unknown_server_time_limit: VAR_UNKNOWN_SERVER_TIME_LIMIT STRING_ARG */
+#line 2396 "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 5577 "util/configparser.c"
+#line 5624 "util/configparser.c"
break;
- case 521: /* server_discard_timeout: VAR_DISCARD_TIMEOUT STRING_ARG */
-#line 2385 "util/configparser.y"
+ case 522: /* server_discard_timeout: VAR_DISCARD_TIMEOUT STRING_ARG */
+#line 2403 "util/configparser.y"
{
OUTYY(("P(server_discard_timeout:%s)\n", (yyvsp[0].str)));
cfg_parser->cfg->discard_timeout = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 5587 "util/configparser.c"
+#line 5634 "util/configparser.c"
break;
- case 522: /* server_wait_limit: VAR_WAIT_LIMIT STRING_ARG */
-#line 2392 "util/configparser.y"
+ case 523: /* server_wait_limit: VAR_WAIT_LIMIT STRING_ARG */
+#line 2410 "util/configparser.y"
{
OUTYY(("P(server_wait_limit:%s)\n", (yyvsp[0].str)));
cfg_parser->cfg->wait_limit = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 5597 "util/configparser.c"
+#line 5644 "util/configparser.c"
break;
- case 523: /* server_wait_limit_cookie: VAR_WAIT_LIMIT_COOKIE STRING_ARG */
-#line 2399 "util/configparser.y"
+ case 524: /* server_wait_limit_cookie: VAR_WAIT_LIMIT_COOKIE STRING_ARG */
+#line 2417 "util/configparser.y"
{
OUTYY(("P(server_wait_limit_cookie:%s)\n", (yyvsp[0].str)));
cfg_parser->cfg->wait_limit_cookie = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 5607 "util/configparser.c"
+#line 5654 "util/configparser.c"
break;
- case 524: /* server_wait_limit_netblock: VAR_WAIT_LIMIT_NETBLOCK STRING_ARG STRING_ARG */
-#line 2406 "util/configparser.y"
+ case 525: /* server_wait_limit_netblock: VAR_WAIT_LIMIT_NETBLOCK STRING_ARG STRING_ARG */
+#line 2424 "util/configparser.y"
{
OUTYY(("P(server_wait_limit_netblock:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) {
@@ -5621,11 +5668,11 @@ yyreduce:
"wait-limit-netblock");
}
}
-#line 5625 "util/configparser.c"
+#line 5672 "util/configparser.c"
break;
- case 525: /* server_wait_limit_cookie_netblock: VAR_WAIT_LIMIT_COOKIE_NETBLOCK STRING_ARG STRING_ARG */
-#line 2421 "util/configparser.y"
+ case 526: /* server_wait_limit_cookie_netblock: VAR_WAIT_LIMIT_COOKIE_NETBLOCK STRING_ARG STRING_ARG */
+#line 2439 "util/configparser.y"
{
OUTYY(("P(server_wait_limit_cookie_netblock:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) {
@@ -5639,31 +5686,31 @@ yyreduce:
"wait-limit-cookie-netblock");
}
}
-#line 5643 "util/configparser.c"
+#line 5690 "util/configparser.c"
break;
- case 526: /* server_max_udp_size: VAR_MAX_UDP_SIZE STRING_ARG */
-#line 2436 "util/configparser.y"
+ case 527: /* server_max_udp_size: VAR_MAX_UDP_SIZE STRING_ARG */
+#line 2454 "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 5653 "util/configparser.c"
+#line 5700 "util/configparser.c"
break;
- case 527: /* server_dns64_prefix: VAR_DNS64_PREFIX STRING_ARG */
-#line 2443 "util/configparser.y"
+ case 528: /* server_dns64_prefix: VAR_DNS64_PREFIX STRING_ARG */
+#line 2461 "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 5663 "util/configparser.c"
+#line 5710 "util/configparser.c"
break;
- case 528: /* server_dns64_synthall: VAR_DNS64_SYNTHALL STRING_ARG */
-#line 2450 "util/configparser.y"
+ case 529: /* server_dns64_synthall: VAR_DNS64_SYNTHALL STRING_ARG */
+#line 2468 "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)
@@ -5671,32 +5718,32 @@ yyreduce:
else cfg_parser->cfg->dns64_synthall = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5675 "util/configparser.c"
+#line 5722 "util/configparser.c"
break;
- case 529: /* server_dns64_ignore_aaaa: VAR_DNS64_IGNORE_AAAA STRING_ARG */
-#line 2459 "util/configparser.y"
+ case 530: /* server_dns64_ignore_aaaa: VAR_DNS64_IGNORE_AAAA STRING_ARG */
+#line 2477 "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 5686 "util/configparser.c"
+#line 5733 "util/configparser.c"
break;
- case 530: /* server_nat64_prefix: VAR_NAT64_PREFIX STRING_ARG */
-#line 2467 "util/configparser.y"
+ case 531: /* server_nat64_prefix: VAR_NAT64_PREFIX STRING_ARG */
+#line 2485 "util/configparser.y"
{
OUTYY(("P(nat64_prefix:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->nat64_prefix);
cfg_parser->cfg->nat64_prefix = (yyvsp[0].str);
}
-#line 5696 "util/configparser.c"
+#line 5743 "util/configparser.c"
break;
- case 531: /* server_define_tag: VAR_DEFINE_TAG STRING_ARG */
-#line 2474 "util/configparser.y"
+ case 532: /* server_define_tag: VAR_DEFINE_TAG STRING_ARG */
+#line 2492 "util/configparser.y"
{
char* p, *s = (yyvsp[0].str);
OUTYY(("P(server_define_tag:%s)\n", (yyvsp[0].str)));
@@ -5709,11 +5756,11 @@ yyreduce:
}
free((yyvsp[0].str));
}
-#line 5713 "util/configparser.c"
+#line 5760 "util/configparser.c"
break;
- case 532: /* server_local_zone_tag: VAR_LOCAL_ZONE_TAG STRING_ARG STRING_ARG */
-#line 2488 "util/configparser.y"
+ case 533: /* server_local_zone_tag: VAR_LOCAL_ZONE_TAG STRING_ARG STRING_ARG */
+#line 2506 "util/configparser.y"
{
size_t len = 0;
uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str),
@@ -5733,11 +5780,11 @@ yyreduce:
}
}
}
-#line 5737 "util/configparser.c"
+#line 5784 "util/configparser.c"
break;
- case 533: /* server_access_control_tag: VAR_ACCESS_CONTROL_TAG STRING_ARG STRING_ARG */
-#line 2509 "util/configparser.y"
+ case 534: /* server_access_control_tag: VAR_ACCESS_CONTROL_TAG STRING_ARG STRING_ARG */
+#line 2527 "util/configparser.y"
{
size_t len = 0;
uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str),
@@ -5757,11 +5804,11 @@ yyreduce:
}
}
}
-#line 5761 "util/configparser.c"
+#line 5808 "util/configparser.c"
break;
- case 534: /* server_access_control_tag_action: VAR_ACCESS_CONTROL_TAG_ACTION STRING_ARG STRING_ARG STRING_ARG */
-#line 2530 "util/configparser.y"
+ case 535: /* server_access_control_tag_action: VAR_ACCESS_CONTROL_TAG_ACTION STRING_ARG STRING_ARG STRING_ARG */
+#line 2548 "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,
@@ -5772,11 +5819,11 @@ yyreduce:
free((yyvsp[0].str));
}
}
-#line 5776 "util/configparser.c"
+#line 5823 "util/configparser.c"
break;
- case 535: /* server_access_control_tag_data: VAR_ACCESS_CONTROL_TAG_DATA STRING_ARG STRING_ARG STRING_ARG */
-#line 2542 "util/configparser.y"
+ case 536: /* server_access_control_tag_data: VAR_ACCESS_CONTROL_TAG_DATA STRING_ARG STRING_ARG STRING_ARG */
+#line 2560 "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,
@@ -5787,11 +5834,11 @@ yyreduce:
free((yyvsp[0].str));
}
}
-#line 5791 "util/configparser.c"
+#line 5838 "util/configparser.c"
break;
- case 536: /* server_local_zone_override: VAR_LOCAL_ZONE_OVERRIDE STRING_ARG STRING_ARG STRING_ARG */
-#line 2554 "util/configparser.y"
+ case 537: /* server_local_zone_override: VAR_LOCAL_ZONE_OVERRIDE STRING_ARG STRING_ARG STRING_ARG */
+#line 2572 "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,
@@ -5802,11 +5849,11 @@ yyreduce:
free((yyvsp[0].str));
}
}
-#line 5806 "util/configparser.c"
+#line 5853 "util/configparser.c"
break;
- case 537: /* server_access_control_view: VAR_ACCESS_CONTROL_VIEW STRING_ARG STRING_ARG */
-#line 2566 "util/configparser.y"
+ case 538: /* server_access_control_view: VAR_ACCESS_CONTROL_VIEW STRING_ARG STRING_ARG */
+#line 2584 "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,
@@ -5814,11 +5861,11 @@ yyreduce:
yyerror("out of memory");
}
}
-#line 5818 "util/configparser.c"
+#line 5865 "util/configparser.c"
break;
- case 538: /* server_interface_tag: VAR_INTERFACE_TAG STRING_ARG STRING_ARG */
-#line 2575 "util/configparser.y"
+ case 539: /* server_interface_tag: VAR_INTERFACE_TAG STRING_ARG STRING_ARG */
+#line 2593 "util/configparser.y"
{
size_t len = 0;
uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str),
@@ -5838,11 +5885,11 @@ yyreduce:
}
}
}
-#line 5842 "util/configparser.c"
+#line 5889 "util/configparser.c"
break;
- case 539: /* server_interface_tag_action: VAR_INTERFACE_TAG_ACTION STRING_ARG STRING_ARG STRING_ARG */
-#line 2596 "util/configparser.y"
+ case 540: /* server_interface_tag_action: VAR_INTERFACE_TAG_ACTION STRING_ARG STRING_ARG STRING_ARG */
+#line 2614 "util/configparser.y"
{
OUTYY(("P(server_interface_tag_action:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str)));
if(!cfg_str3list_insert(&cfg_parser->cfg->interface_tag_actions,
@@ -5853,11 +5900,11 @@ yyreduce:
free((yyvsp[0].str));
}
}
-#line 5857 "util/configparser.c"
+#line 5904 "util/configparser.c"
break;
- case 540: /* server_interface_tag_data: VAR_INTERFACE_TAG_DATA STRING_ARG STRING_ARG STRING_ARG */
-#line 2608 "util/configparser.y"
+ case 541: /* server_interface_tag_data: VAR_INTERFACE_TAG_DATA STRING_ARG STRING_ARG STRING_ARG */
+#line 2626 "util/configparser.y"
{
OUTYY(("P(server_interface_tag_data:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str)));
if(!cfg_str3list_insert(&cfg_parser->cfg->interface_tag_datas,
@@ -5868,11 +5915,11 @@ yyreduce:
free((yyvsp[0].str));
}
}
-#line 5872 "util/configparser.c"
+#line 5919 "util/configparser.c"
break;
- case 541: /* server_interface_view: VAR_INTERFACE_VIEW STRING_ARG STRING_ARG */
-#line 2620 "util/configparser.y"
+ case 542: /* server_interface_view: VAR_INTERFACE_VIEW STRING_ARG STRING_ARG */
+#line 2638 "util/configparser.y"
{
OUTYY(("P(server_interface_view:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
if(!cfg_str2list_insert(&cfg_parser->cfg->interface_view,
@@ -5880,11 +5927,11 @@ yyreduce:
yyerror("out of memory");
}
}
-#line 5884 "util/configparser.c"
+#line 5931 "util/configparser.c"
break;
- case 542: /* server_response_ip_tag: VAR_RESPONSE_IP_TAG STRING_ARG STRING_ARG */
-#line 2629 "util/configparser.y"
+ case 543: /* server_response_ip_tag: VAR_RESPONSE_IP_TAG STRING_ARG STRING_ARG */
+#line 2647 "util/configparser.y"
{
size_t len = 0;
uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str),
@@ -5904,11 +5951,11 @@ yyreduce:
}
}
}
-#line 5908 "util/configparser.c"
+#line 5955 "util/configparser.c"
break;
- case 543: /* server_ip_ratelimit: VAR_IP_RATELIMIT STRING_ARG */
-#line 2650 "util/configparser.y"
+ case 544: /* server_ip_ratelimit: VAR_IP_RATELIMIT STRING_ARG */
+#line 2668 "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)
@@ -5916,11 +5963,11 @@ yyreduce:
else cfg_parser->cfg->ip_ratelimit = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 5920 "util/configparser.c"
+#line 5967 "util/configparser.c"
break;
- case 544: /* server_ip_ratelimit_cookie: VAR_IP_RATELIMIT_COOKIE STRING_ARG */
-#line 2659 "util/configparser.y"
+ case 545: /* server_ip_ratelimit_cookie: VAR_IP_RATELIMIT_COOKIE STRING_ARG */
+#line 2677 "util/configparser.y"
{
OUTYY(("P(server_ip_ratelimit_cookie:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -5928,11 +5975,11 @@ yyreduce:
else cfg_parser->cfg->ip_ratelimit_cookie = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 5932 "util/configparser.c"
+#line 5979 "util/configparser.c"
break;
- case 545: /* server_ratelimit: VAR_RATELIMIT STRING_ARG */
-#line 2668 "util/configparser.y"
+ case 546: /* server_ratelimit: VAR_RATELIMIT STRING_ARG */
+#line 2686 "util/configparser.y"
{
OUTYY(("P(server_ratelimit:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -5940,33 +5987,33 @@ yyreduce:
else cfg_parser->cfg->ratelimit = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 5944 "util/configparser.c"
+#line 5991 "util/configparser.c"
break;
- case 546: /* server_ip_ratelimit_size: VAR_IP_RATELIMIT_SIZE STRING_ARG */
-#line 2677 "util/configparser.y"
+ case 547: /* server_ip_ratelimit_size: VAR_IP_RATELIMIT_SIZE STRING_ARG */
+#line 2695 "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 5955 "util/configparser.c"
+#line 6002 "util/configparser.c"
break;
- case 547: /* server_ratelimit_size: VAR_RATELIMIT_SIZE STRING_ARG */
-#line 2685 "util/configparser.y"
+ case 548: /* server_ratelimit_size: VAR_RATELIMIT_SIZE STRING_ARG */
+#line 2703 "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 5966 "util/configparser.c"
+#line 6013 "util/configparser.c"
break;
- case 548: /* server_ip_ratelimit_slabs: VAR_IP_RATELIMIT_SLABS STRING_ARG */
-#line 2693 "util/configparser.y"
+ case 549: /* server_ip_ratelimit_slabs: VAR_IP_RATELIMIT_SLABS STRING_ARG */
+#line 2711 "util/configparser.y"
{
OUTYY(("P(server_ip_ratelimit_slabs:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0) {
@@ -5978,11 +6025,11 @@ yyreduce:
}
free((yyvsp[0].str));
}
-#line 5982 "util/configparser.c"
+#line 6029 "util/configparser.c"
break;
- case 549: /* server_ratelimit_slabs: VAR_RATELIMIT_SLABS STRING_ARG */
-#line 2706 "util/configparser.y"
+ case 550: /* server_ratelimit_slabs: VAR_RATELIMIT_SLABS STRING_ARG */
+#line 2724 "util/configparser.y"
{
OUTYY(("P(server_ratelimit_slabs:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0) {
@@ -5994,11 +6041,11 @@ yyreduce:
}
free((yyvsp[0].str));
}
-#line 5998 "util/configparser.c"
+#line 6045 "util/configparser.c"
break;
- case 550: /* server_ratelimit_for_domain: VAR_RATELIMIT_FOR_DOMAIN STRING_ARG STRING_ARG */
-#line 2719 "util/configparser.y"
+ case 551: /* server_ratelimit_for_domain: VAR_RATELIMIT_FOR_DOMAIN STRING_ARG STRING_ARG */
+#line 2737 "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) {
@@ -6012,11 +6059,11 @@ yyreduce:
"ratelimit-for-domain");
}
}
-#line 6016 "util/configparser.c"
+#line 6063 "util/configparser.c"
break;
- case 551: /* server_ratelimit_below_domain: VAR_RATELIMIT_BELOW_DOMAIN STRING_ARG STRING_ARG */
-#line 2734 "util/configparser.y"
+ case 552: /* server_ratelimit_below_domain: VAR_RATELIMIT_BELOW_DOMAIN STRING_ARG STRING_ARG */
+#line 2752 "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) {
@@ -6030,11 +6077,11 @@ yyreduce:
"ratelimit-below-domain");
}
}
-#line 6034 "util/configparser.c"
+#line 6081 "util/configparser.c"
break;
- case 552: /* server_ip_ratelimit_factor: VAR_IP_RATELIMIT_FACTOR STRING_ARG */
-#line 2749 "util/configparser.y"
+ case 553: /* server_ip_ratelimit_factor: VAR_IP_RATELIMIT_FACTOR STRING_ARG */
+#line 2767 "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)
@@ -6042,11 +6089,11 @@ yyreduce:
else cfg_parser->cfg->ip_ratelimit_factor = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 6046 "util/configparser.c"
+#line 6093 "util/configparser.c"
break;
- case 553: /* server_ratelimit_factor: VAR_RATELIMIT_FACTOR STRING_ARG */
-#line 2758 "util/configparser.y"
+ case 554: /* server_ratelimit_factor: VAR_RATELIMIT_FACTOR STRING_ARG */
+#line 2776 "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)
@@ -6054,11 +6101,11 @@ yyreduce:
else cfg_parser->cfg->ratelimit_factor = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 6058 "util/configparser.c"
+#line 6105 "util/configparser.c"
break;
- case 554: /* server_ip_ratelimit_backoff: VAR_IP_RATELIMIT_BACKOFF STRING_ARG */
-#line 2767 "util/configparser.y"
+ case 555: /* server_ip_ratelimit_backoff: VAR_IP_RATELIMIT_BACKOFF STRING_ARG */
+#line 2785 "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)
@@ -6067,11 +6114,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 6071 "util/configparser.c"
+#line 6118 "util/configparser.c"
break;
- case 555: /* server_ratelimit_backoff: VAR_RATELIMIT_BACKOFF STRING_ARG */
-#line 2777 "util/configparser.y"
+ case 556: /* server_ratelimit_backoff: VAR_RATELIMIT_BACKOFF STRING_ARG */
+#line 2795 "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)
@@ -6080,11 +6127,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 6084 "util/configparser.c"
+#line 6131 "util/configparser.c"
break;
- case 556: /* server_outbound_msg_retry: VAR_OUTBOUND_MSG_RETRY STRING_ARG */
-#line 2787 "util/configparser.y"
+ case 557: /* server_outbound_msg_retry: VAR_OUTBOUND_MSG_RETRY STRING_ARG */
+#line 2805 "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)
@@ -6092,11 +6139,11 @@ yyreduce:
else cfg_parser->cfg->outbound_msg_retry = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 6096 "util/configparser.c"
+#line 6143 "util/configparser.c"
break;
- case 557: /* server_max_sent_count: VAR_MAX_SENT_COUNT STRING_ARG */
-#line 2796 "util/configparser.y"
+ case 558: /* server_max_sent_count: VAR_MAX_SENT_COUNT STRING_ARG */
+#line 2814 "util/configparser.y"
{
OUTYY(("P(server_max_sent_count:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -6104,11 +6151,11 @@ yyreduce:
else cfg_parser->cfg->max_sent_count = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 6108 "util/configparser.c"
+#line 6155 "util/configparser.c"
break;
- case 558: /* server_max_query_restarts: VAR_MAX_QUERY_RESTARTS STRING_ARG */
-#line 2805 "util/configparser.y"
+ case 559: /* server_max_query_restarts: VAR_MAX_QUERY_RESTARTS STRING_ARG */
+#line 2823 "util/configparser.y"
{
OUTYY(("P(server_max_query_restarts:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -6116,20 +6163,20 @@ yyreduce:
else cfg_parser->cfg->max_query_restarts = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 6120 "util/configparser.c"
+#line 6167 "util/configparser.c"
break;
- case 559: /* server_low_rtt: VAR_LOW_RTT STRING_ARG */
-#line 2814 "util/configparser.y"
+ case 560: /* server_low_rtt: VAR_LOW_RTT STRING_ARG */
+#line 2832 "util/configparser.y"
{
OUTYY(("P(low-rtt option is deprecated, use fast-server-num instead)\n"));
free((yyvsp[0].str));
}
-#line 6129 "util/configparser.c"
+#line 6176 "util/configparser.c"
break;
- case 560: /* server_fast_server_num: VAR_FAST_SERVER_NUM STRING_ARG */
-#line 2820 "util/configparser.y"
+ case 561: /* server_fast_server_num: VAR_FAST_SERVER_NUM STRING_ARG */
+#line 2838 "util/configparser.y"
{
OUTYY(("P(server_fast_server_num:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) <= 0)
@@ -6137,11 +6184,11 @@ yyreduce:
else cfg_parser->cfg->fast_server_num = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 6141 "util/configparser.c"
+#line 6188 "util/configparser.c"
break;
- case 561: /* server_fast_server_permil: VAR_FAST_SERVER_PERMIL STRING_ARG */
-#line 2829 "util/configparser.y"
+ case 562: /* server_fast_server_permil: VAR_FAST_SERVER_PERMIL STRING_ARG */
+#line 2847 "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)
@@ -6149,11 +6196,11 @@ yyreduce:
else cfg_parser->cfg->fast_server_permil = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 6153 "util/configparser.c"
+#line 6200 "util/configparser.c"
break;
- case 562: /* server_qname_minimisation: VAR_QNAME_MINIMISATION STRING_ARG */
-#line 2838 "util/configparser.y"
+ case 563: /* server_qname_minimisation: VAR_QNAME_MINIMISATION STRING_ARG */
+#line 2856 "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)
@@ -6162,11 +6209,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 6166 "util/configparser.c"
+#line 6213 "util/configparser.c"
break;
- case 563: /* server_qname_minimisation_strict: VAR_QNAME_MINIMISATION_STRICT STRING_ARG */
-#line 2848 "util/configparser.y"
+ case 564: /* server_qname_minimisation_strict: VAR_QNAME_MINIMISATION_STRICT STRING_ARG */
+#line 2866 "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)
@@ -6175,11 +6222,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 6179 "util/configparser.c"
+#line 6226 "util/configparser.c"
break;
- case 564: /* server_pad_responses: VAR_PAD_RESPONSES STRING_ARG */
-#line 2858 "util/configparser.y"
+ case 565: /* server_pad_responses: VAR_PAD_RESPONSES STRING_ARG */
+#line 2876 "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)
@@ -6188,11 +6235,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 6192 "util/configparser.c"
+#line 6239 "util/configparser.c"
break;
- case 565: /* server_pad_responses_block_size: VAR_PAD_RESPONSES_BLOCK_SIZE STRING_ARG */
-#line 2868 "util/configparser.y"
+ case 566: /* server_pad_responses_block_size: VAR_PAD_RESPONSES_BLOCK_SIZE STRING_ARG */
+#line 2886 "util/configparser.y"
{
OUTYY(("P(server_pad_responses_block_size:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0)
@@ -6200,11 +6247,11 @@ yyreduce:
else cfg_parser->cfg->pad_responses_block_size = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 6204 "util/configparser.c"
+#line 6251 "util/configparser.c"
break;
- case 566: /* server_pad_queries: VAR_PAD_QUERIES STRING_ARG */
-#line 2877 "util/configparser.y"
+ case 567: /* server_pad_queries: VAR_PAD_QUERIES STRING_ARG */
+#line 2895 "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)
@@ -6213,11 +6260,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 6217 "util/configparser.c"
+#line 6264 "util/configparser.c"
break;
- case 567: /* server_pad_queries_block_size: VAR_PAD_QUERIES_BLOCK_SIZE STRING_ARG */
-#line 2887 "util/configparser.y"
+ case 568: /* server_pad_queries_block_size: VAR_PAD_QUERIES_BLOCK_SIZE STRING_ARG */
+#line 2905 "util/configparser.y"
{
OUTYY(("P(server_pad_queries_block_size:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0)
@@ -6225,11 +6272,11 @@ yyreduce:
else cfg_parser->cfg->pad_queries_block_size = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 6229 "util/configparser.c"
+#line 6276 "util/configparser.c"
break;
- case 568: /* server_ipsecmod_enabled: VAR_IPSECMOD_ENABLED STRING_ARG */
-#line 2896 "util/configparser.y"
+ case 569: /* server_ipsecmod_enabled: VAR_IPSECMOD_ENABLED STRING_ARG */
+#line 2914 "util/configparser.y"
{
#ifdef USE_IPSECMOD
OUTYY(("P(server_ipsecmod_enabled:%s)\n", (yyvsp[0].str)));
@@ -6241,11 +6288,11 @@ yyreduce:
#endif
free((yyvsp[0].str));
}
-#line 6245 "util/configparser.c"
+#line 6292 "util/configparser.c"
break;
- case 569: /* server_ipsecmod_ignore_bogus: VAR_IPSECMOD_IGNORE_BOGUS STRING_ARG */
-#line 2909 "util/configparser.y"
+ case 570: /* server_ipsecmod_ignore_bogus: VAR_IPSECMOD_IGNORE_BOGUS STRING_ARG */
+#line 2927 "util/configparser.y"
{
#ifdef USE_IPSECMOD
OUTYY(("P(server_ipsecmod_ignore_bogus:%s)\n", (yyvsp[0].str)));
@@ -6257,11 +6304,11 @@ yyreduce:
#endif
free((yyvsp[0].str));
}
-#line 6261 "util/configparser.c"
+#line 6308 "util/configparser.c"
break;
- case 570: /* server_ipsecmod_hook: VAR_IPSECMOD_HOOK STRING_ARG */
-#line 2922 "util/configparser.y"
+ case 571: /* server_ipsecmod_hook: VAR_IPSECMOD_HOOK STRING_ARG */
+#line 2940 "util/configparser.y"
{
#ifdef USE_IPSECMOD
OUTYY(("P(server_ipsecmod_hook:%s)\n", (yyvsp[0].str)));
@@ -6272,11 +6319,11 @@ yyreduce:
free((yyvsp[0].str));
#endif
}
-#line 6276 "util/configparser.c"
+#line 6323 "util/configparser.c"
break;
- case 571: /* server_ipsecmod_max_ttl: VAR_IPSECMOD_MAX_TTL STRING_ARG */
-#line 2934 "util/configparser.y"
+ case 572: /* server_ipsecmod_max_ttl: VAR_IPSECMOD_MAX_TTL STRING_ARG */
+#line 2952 "util/configparser.y"
{
#ifdef USE_IPSECMOD
OUTYY(("P(server_ipsecmod_max_ttl:%s)\n", (yyvsp[0].str)));
@@ -6289,11 +6336,11 @@ yyreduce:
free((yyvsp[0].str));
#endif
}
-#line 6293 "util/configparser.c"
+#line 6340 "util/configparser.c"
break;
- case 572: /* server_ipsecmod_whitelist: VAR_IPSECMOD_WHITELIST STRING_ARG */
-#line 2948 "util/configparser.y"
+ case 573: /* server_ipsecmod_whitelist: VAR_IPSECMOD_WHITELIST STRING_ARG */
+#line 2966 "util/configparser.y"
{
#ifdef USE_IPSECMOD
OUTYY(("P(server_ipsecmod_whitelist:%s)\n", (yyvsp[0].str)));
@@ -6304,11 +6351,11 @@ yyreduce:
free((yyvsp[0].str));
#endif
}
-#line 6308 "util/configparser.c"
+#line 6355 "util/configparser.c"
break;
- case 573: /* server_ipsecmod_strict: VAR_IPSECMOD_STRICT STRING_ARG */
-#line 2960 "util/configparser.y"
+ case 574: /* server_ipsecmod_strict: VAR_IPSECMOD_STRICT STRING_ARG */
+#line 2978 "util/configparser.y"
{
#ifdef USE_IPSECMOD
OUTYY(("P(server_ipsecmod_strict:%s)\n", (yyvsp[0].str)));
@@ -6321,11 +6368,11 @@ yyreduce:
free((yyvsp[0].str));
#endif
}
-#line 6325 "util/configparser.c"
+#line 6372 "util/configparser.c"
break;
- case 574: /* server_edns_client_string: VAR_EDNS_CLIENT_STRING STRING_ARG STRING_ARG */
-#line 2974 "util/configparser.y"
+ case 575: /* server_edns_client_string: VAR_EDNS_CLIENT_STRING STRING_ARG STRING_ARG */
+#line 2992 "util/configparser.y"
{
OUTYY(("P(server_edns_client_string:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
if(!cfg_str2list_insert(
@@ -6333,11 +6380,11 @@ yyreduce:
fatal_exit("out of memory adding "
"edns-client-string");
}
-#line 6337 "util/configparser.c"
+#line 6384 "util/configparser.c"
break;
- case 575: /* server_edns_client_string_opcode: VAR_EDNS_CLIENT_STRING_OPCODE STRING_ARG */
-#line 2983 "util/configparser.y"
+ case 576: /* server_edns_client_string_opcode: VAR_EDNS_CLIENT_STRING_OPCODE STRING_ARG */
+#line 3001 "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)
@@ -6347,11 +6394,11 @@ yyreduce:
else cfg_parser->cfg->edns_client_string_opcode = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 6351 "util/configparser.c"
+#line 6398 "util/configparser.c"
break;
- case 576: /* server_ede: VAR_EDE STRING_ARG */
-#line 2994 "util/configparser.y"
+ case 577: /* server_ede: VAR_EDE STRING_ARG */
+#line 3012 "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)
@@ -6359,21 +6406,21 @@ yyreduce:
else cfg_parser->cfg->ede = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 6363 "util/configparser.c"
+#line 6410 "util/configparser.c"
break;
- case 577: /* server_proxy_protocol_port: VAR_PROXY_PROTOCOL_PORT STRING_ARG */
-#line 3003 "util/configparser.y"
+ case 578: /* server_proxy_protocol_port: VAR_PROXY_PROTOCOL_PORT STRING_ARG */
+#line 3021 "util/configparser.y"
{
OUTYY(("P(server_proxy_protocol_port:%s)\n", (yyvsp[0].str)));
if(!cfg_strlist_insert(&cfg_parser->cfg->proxy_protocol_port, (yyvsp[0].str)))
yyerror("out of memory");
}
-#line 6373 "util/configparser.c"
+#line 6420 "util/configparser.c"
break;
- case 578: /* stub_name: VAR_NAME STRING_ARG */
-#line 3010 "util/configparser.y"
+ case 579: /* stub_name: VAR_NAME STRING_ARG */
+#line 3028 "util/configparser.y"
{
OUTYY(("P(name:%s)\n", (yyvsp[0].str)));
if(cfg_parser->cfg->stubs->name)
@@ -6382,31 +6429,31 @@ yyreduce:
free(cfg_parser->cfg->stubs->name);
cfg_parser->cfg->stubs->name = (yyvsp[0].str);
}
-#line 6386 "util/configparser.c"
+#line 6433 "util/configparser.c"
break;
- case 579: /* stub_host: VAR_STUB_HOST STRING_ARG */
-#line 3020 "util/configparser.y"
+ case 580: /* stub_host: VAR_STUB_HOST STRING_ARG */
+#line 3038 "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 6396 "util/configparser.c"
+#line 6443 "util/configparser.c"
break;
- case 580: /* stub_addr: VAR_STUB_ADDR STRING_ARG */
-#line 3027 "util/configparser.y"
+ case 581: /* stub_addr: VAR_STUB_ADDR STRING_ARG */
+#line 3045 "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 6406 "util/configparser.c"
+#line 6453 "util/configparser.c"
break;
- case 581: /* stub_first: VAR_STUB_FIRST STRING_ARG */
-#line 3034 "util/configparser.y"
+ case 582: /* stub_first: VAR_STUB_FIRST STRING_ARG */
+#line 3052 "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)
@@ -6414,11 +6461,11 @@ yyreduce:
else cfg_parser->cfg->stubs->isfirst=(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 6418 "util/configparser.c"
+#line 6465 "util/configparser.c"
break;
- case 582: /* stub_no_cache: VAR_STUB_NO_CACHE STRING_ARG */
-#line 3043 "util/configparser.y"
+ case 583: /* stub_no_cache: VAR_STUB_NO_CACHE STRING_ARG */
+#line 3061 "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)
@@ -6426,11 +6473,11 @@ yyreduce:
else cfg_parser->cfg->stubs->no_cache=(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 6430 "util/configparser.c"
+#line 6477 "util/configparser.c"
break;
- case 583: /* stub_ssl_upstream: VAR_STUB_SSL_UPSTREAM STRING_ARG */
-#line 3052 "util/configparser.y"
+ case 584: /* stub_ssl_upstream: VAR_STUB_SSL_UPSTREAM STRING_ARG */
+#line 3070 "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)
@@ -6439,11 +6486,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 6443 "util/configparser.c"
+#line 6490 "util/configparser.c"
break;
- case 584: /* stub_tcp_upstream: VAR_STUB_TCP_UPSTREAM STRING_ARG */
-#line 3062 "util/configparser.y"
+ case 585: /* stub_tcp_upstream: VAR_STUB_TCP_UPSTREAM STRING_ARG */
+#line 3080 "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)
@@ -6452,11 +6499,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 6456 "util/configparser.c"
+#line 6503 "util/configparser.c"
break;
- case 585: /* stub_prime: VAR_STUB_PRIME STRING_ARG */
-#line 3072 "util/configparser.y"
+ case 586: /* stub_prime: VAR_STUB_PRIME STRING_ARG */
+#line 3090 "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)
@@ -6465,11 +6512,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 6469 "util/configparser.c"
+#line 6516 "util/configparser.c"
break;
- case 586: /* forward_name: VAR_NAME STRING_ARG */
-#line 3082 "util/configparser.y"
+ case 587: /* forward_name: VAR_NAME STRING_ARG */
+#line 3100 "util/configparser.y"
{
OUTYY(("P(name:%s)\n", (yyvsp[0].str)));
if(cfg_parser->cfg->forwards->name)
@@ -6478,31 +6525,31 @@ yyreduce:
free(cfg_parser->cfg->forwards->name);
cfg_parser->cfg->forwards->name = (yyvsp[0].str);
}
-#line 6482 "util/configparser.c"
+#line 6529 "util/configparser.c"
break;
- case 587: /* forward_host: VAR_FORWARD_HOST STRING_ARG */
-#line 3092 "util/configparser.y"
+ case 588: /* forward_host: VAR_FORWARD_HOST STRING_ARG */
+#line 3110 "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 6492 "util/configparser.c"
+#line 6539 "util/configparser.c"
break;
- case 588: /* forward_addr: VAR_FORWARD_ADDR STRING_ARG */
-#line 3099 "util/configparser.y"
+ case 589: /* forward_addr: VAR_FORWARD_ADDR STRING_ARG */
+#line 3117 "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 6502 "util/configparser.c"
+#line 6549 "util/configparser.c"
break;
- case 589: /* forward_first: VAR_FORWARD_FIRST STRING_ARG */
-#line 3106 "util/configparser.y"
+ case 590: /* forward_first: VAR_FORWARD_FIRST STRING_ARG */
+#line 3124 "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)
@@ -6510,11 +6557,11 @@ yyreduce:
else cfg_parser->cfg->forwards->isfirst=(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 6514 "util/configparser.c"
+#line 6561 "util/configparser.c"
break;
- case 590: /* forward_no_cache: VAR_FORWARD_NO_CACHE STRING_ARG */
-#line 3115 "util/configparser.y"
+ case 591: /* forward_no_cache: VAR_FORWARD_NO_CACHE STRING_ARG */
+#line 3133 "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)
@@ -6522,11 +6569,11 @@ yyreduce:
else cfg_parser->cfg->forwards->no_cache=(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 6526 "util/configparser.c"
+#line 6573 "util/configparser.c"
break;
- case 591: /* forward_ssl_upstream: VAR_FORWARD_SSL_UPSTREAM STRING_ARG */
-#line 3124 "util/configparser.y"
+ case 592: /* forward_ssl_upstream: VAR_FORWARD_SSL_UPSTREAM STRING_ARG */
+#line 3142 "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)
@@ -6535,11 +6582,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 6539 "util/configparser.c"
+#line 6586 "util/configparser.c"
break;
- case 592: /* forward_tcp_upstream: VAR_FORWARD_TCP_UPSTREAM STRING_ARG */
-#line 3134 "util/configparser.y"
+ case 593: /* forward_tcp_upstream: VAR_FORWARD_TCP_UPSTREAM STRING_ARG */
+#line 3152 "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)
@@ -6548,11 +6595,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 6552 "util/configparser.c"
+#line 6599 "util/configparser.c"
break;
- case 593: /* auth_name: VAR_NAME STRING_ARG */
-#line 3144 "util/configparser.y"
+ case 594: /* auth_name: VAR_NAME STRING_ARG */
+#line 3162 "util/configparser.y"
{
OUTYY(("P(name:%s)\n", (yyvsp[0].str)));
if(cfg_parser->cfg->auths->name)
@@ -6561,52 +6608,52 @@ yyreduce:
free(cfg_parser->cfg->auths->name);
cfg_parser->cfg->auths->name = (yyvsp[0].str);
}
-#line 6565 "util/configparser.c"
+#line 6612 "util/configparser.c"
break;
- case 594: /* auth_zonefile: VAR_ZONEFILE STRING_ARG */
-#line 3154 "util/configparser.y"
+ case 595: /* auth_zonefile: VAR_ZONEFILE STRING_ARG */
+#line 3172 "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 6575 "util/configparser.c"
+#line 6622 "util/configparser.c"
break;
- case 595: /* auth_master: VAR_MASTER STRING_ARG */
-#line 3161 "util/configparser.y"
+ case 596: /* auth_master: VAR_MASTER STRING_ARG */
+#line 3179 "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 6585 "util/configparser.c"
+#line 6632 "util/configparser.c"
break;
- case 596: /* auth_url: VAR_URL STRING_ARG */
-#line 3168 "util/configparser.y"
+ case 597: /* auth_url: VAR_URL STRING_ARG */
+#line 3186 "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 6595 "util/configparser.c"
+#line 6642 "util/configparser.c"
break;
- case 597: /* auth_allow_notify: VAR_ALLOW_NOTIFY STRING_ARG */
-#line 3175 "util/configparser.y"
+ case 598: /* auth_allow_notify: VAR_ALLOW_NOTIFY STRING_ARG */
+#line 3193 "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 6606 "util/configparser.c"
+#line 6653 "util/configparser.c"
break;
- case 598: /* auth_zonemd_check: VAR_ZONEMD_CHECK STRING_ARG */
-#line 3183 "util/configparser.y"
+ case 599: /* auth_zonemd_check: VAR_ZONEMD_CHECK STRING_ARG */
+#line 3201 "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)
@@ -6615,11 +6662,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 6619 "util/configparser.c"
+#line 6666 "util/configparser.c"
break;
- case 599: /* auth_zonemd_reject_absence: VAR_ZONEMD_REJECT_ABSENCE STRING_ARG */
-#line 3193 "util/configparser.y"
+ case 600: /* auth_zonemd_reject_absence: VAR_ZONEMD_REJECT_ABSENCE STRING_ARG */
+#line 3211 "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)
@@ -6628,11 +6675,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 6632 "util/configparser.c"
+#line 6679 "util/configparser.c"
break;
- case 600: /* auth_for_downstream: VAR_FOR_DOWNSTREAM STRING_ARG */
-#line 3203 "util/configparser.y"
+ case 601: /* auth_for_downstream: VAR_FOR_DOWNSTREAM STRING_ARG */
+#line 3221 "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)
@@ -6641,11 +6688,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 6645 "util/configparser.c"
+#line 6692 "util/configparser.c"
break;
- case 601: /* auth_for_upstream: VAR_FOR_UPSTREAM STRING_ARG */
-#line 3213 "util/configparser.y"
+ case 602: /* auth_for_upstream: VAR_FOR_UPSTREAM STRING_ARG */
+#line 3231 "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)
@@ -6654,11 +6701,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 6658 "util/configparser.c"
+#line 6705 "util/configparser.c"
break;
- case 602: /* auth_fallback_enabled: VAR_FALLBACK_ENABLED STRING_ARG */
-#line 3223 "util/configparser.y"
+ case 603: /* auth_fallback_enabled: VAR_FALLBACK_ENABLED STRING_ARG */
+#line 3241 "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)
@@ -6667,11 +6714,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 6671 "util/configparser.c"
+#line 6718 "util/configparser.c"
break;
- case 603: /* view_name: VAR_NAME STRING_ARG */
-#line 3233 "util/configparser.y"
+ case 604: /* view_name: VAR_NAME STRING_ARG */
+#line 3251 "util/configparser.y"
{
OUTYY(("P(name:%s)\n", (yyvsp[0].str)));
if(cfg_parser->cfg->views->name)
@@ -6680,11 +6727,11 @@ yyreduce:
free(cfg_parser->cfg->views->name);
cfg_parser->cfg->views->name = (yyvsp[0].str);
}
-#line 6684 "util/configparser.c"
+#line 6731 "util/configparser.c"
break;
- case 604: /* view_local_zone: VAR_LOCAL_ZONE STRING_ARG STRING_ARG */
-#line 3243 "util/configparser.y"
+ case 605: /* view_local_zone: VAR_LOCAL_ZONE STRING_ARG STRING_ARG */
+#line 3261 "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 &&
@@ -6739,11 +6786,11 @@ yyreduce:
fatal_exit("out of memory adding local-zone");
}
}
-#line 6743 "util/configparser.c"
+#line 6790 "util/configparser.c"
break;
- case 605: /* view_response_ip: VAR_RESPONSE_IP STRING_ARG STRING_ARG */
-#line 3299 "util/configparser.y"
+ case 606: /* view_response_ip: VAR_RESPONSE_IP STRING_ARG STRING_ARG */
+#line 3317 "util/configparser.y"
{
OUTYY(("P(view_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
validate_respip_action((yyvsp[0].str));
@@ -6752,33 +6799,33 @@ yyreduce:
fatal_exit("out of memory adding per-view "
"response-ip action");
}
-#line 6756 "util/configparser.c"
+#line 6803 "util/configparser.c"
break;
- case 606: /* view_response_ip_data: VAR_RESPONSE_IP_DATA STRING_ARG STRING_ARG */
-#line 3309 "util/configparser.y"
+ case 607: /* view_response_ip_data: VAR_RESPONSE_IP_DATA STRING_ARG STRING_ARG */
+#line 3327 "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 6767 "util/configparser.c"
+#line 6814 "util/configparser.c"
break;
- case 607: /* view_local_data: VAR_LOCAL_DATA STRING_ARG */
-#line 3317 "util/configparser.y"
+ case 608: /* view_local_data: VAR_LOCAL_DATA STRING_ARG */
+#line 3335 "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 6778 "util/configparser.c"
+#line 6825 "util/configparser.c"
break;
- case 608: /* view_local_data_ptr: VAR_LOCAL_DATA_PTR STRING_ARG */
-#line 3325 "util/configparser.y"
+ case 609: /* view_local_data_ptr: VAR_LOCAL_DATA_PTR STRING_ARG */
+#line 3343 "util/configparser.y"
{
char* ptr;
OUTYY(("P(view_local_data_ptr:%s)\n", (yyvsp[0].str)));
@@ -6792,11 +6839,11 @@ yyreduce:
yyerror("local-data-ptr could not be reversed");
}
}
-#line 6796 "util/configparser.c"
+#line 6843 "util/configparser.c"
break;
- case 609: /* view_first: VAR_VIEW_FIRST STRING_ARG */
-#line 3340 "util/configparser.y"
+ case 610: /* view_first: VAR_VIEW_FIRST STRING_ARG */
+#line 3358 "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)
@@ -6804,20 +6851,20 @@ yyreduce:
else cfg_parser->cfg->views->isfirst=(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 6808 "util/configparser.c"
+#line 6855 "util/configparser.c"
break;
- case 610: /* rcstart: VAR_REMOTE_CONTROL */
-#line 3349 "util/configparser.y"
+ case 611: /* rcstart: VAR_REMOTE_CONTROL */
+#line 3367 "util/configparser.y"
{
OUTYY(("\nP(remote-control:)\n"));
cfg_parser->started_toplevel = 1;
}
-#line 6817 "util/configparser.c"
+#line 6864 "util/configparser.c"
break;
- case 621: /* rc_control_enable: VAR_CONTROL_ENABLE STRING_ARG */
-#line 3361 "util/configparser.y"
+ case 622: /* rc_control_enable: VAR_CONTROL_ENABLE STRING_ARG */
+#line 3379 "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)
@@ -6826,11 +6873,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 6830 "util/configparser.c"
+#line 6877 "util/configparser.c"
break;
- case 622: /* rc_control_port: VAR_CONTROL_PORT STRING_ARG */
-#line 3371 "util/configparser.y"
+ case 623: /* rc_control_port: VAR_CONTROL_PORT STRING_ARG */
+#line 3389 "util/configparser.y"
{
OUTYY(("P(control_port:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0)
@@ -6838,80 +6885,80 @@ yyreduce:
else cfg_parser->cfg->control_port = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 6842 "util/configparser.c"
+#line 6889 "util/configparser.c"
break;
- case 623: /* rc_control_interface: VAR_CONTROL_INTERFACE STRING_ARG */
-#line 3380 "util/configparser.y"
+ case 624: /* rc_control_interface: VAR_CONTROL_INTERFACE STRING_ARG */
+#line 3398 "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 6852 "util/configparser.c"
+#line 6899 "util/configparser.c"
break;
- case 624: /* rc_control_use_cert: VAR_CONTROL_USE_CERT STRING_ARG */
-#line 3387 "util/configparser.y"
+ case 625: /* rc_control_use_cert: VAR_CONTROL_USE_CERT STRING_ARG */
+#line 3405 "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 6862 "util/configparser.c"
+#line 6909 "util/configparser.c"
break;
- case 625: /* rc_server_key_file: VAR_SERVER_KEY_FILE STRING_ARG */
-#line 3394 "util/configparser.y"
+ case 626: /* rc_server_key_file: VAR_SERVER_KEY_FILE STRING_ARG */
+#line 3412 "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 6872 "util/configparser.c"
+#line 6919 "util/configparser.c"
break;
- case 626: /* rc_server_cert_file: VAR_SERVER_CERT_FILE STRING_ARG */
-#line 3401 "util/configparser.y"
+ case 627: /* rc_server_cert_file: VAR_SERVER_CERT_FILE STRING_ARG */
+#line 3419 "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 6882 "util/configparser.c"
+#line 6929 "util/configparser.c"
break;
- case 627: /* rc_control_key_file: VAR_CONTROL_KEY_FILE STRING_ARG */
-#line 3408 "util/configparser.y"
+ case 628: /* rc_control_key_file: VAR_CONTROL_KEY_FILE STRING_ARG */
+#line 3426 "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 6892 "util/configparser.c"
+#line 6939 "util/configparser.c"
break;
- case 628: /* rc_control_cert_file: VAR_CONTROL_CERT_FILE STRING_ARG */
-#line 3415 "util/configparser.y"
+ case 629: /* rc_control_cert_file: VAR_CONTROL_CERT_FILE STRING_ARG */
+#line 3433 "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 6902 "util/configparser.c"
+#line 6949 "util/configparser.c"
break;
- case 629: /* dtstart: VAR_DNSTAP */
-#line 3422 "util/configparser.y"
+ case 630: /* dtstart: VAR_DNSTAP */
+#line 3440 "util/configparser.y"
{
OUTYY(("\nP(dnstap:)\n"));
cfg_parser->started_toplevel = 1;
}
-#line 6911 "util/configparser.c"
+#line 6958 "util/configparser.c"
break;
- case 651: /* dt_dnstap_enable: VAR_DNSTAP_ENABLE STRING_ARG */
-#line 3443 "util/configparser.y"
+ case 653: /* dt_dnstap_enable: VAR_DNSTAP_ENABLE STRING_ARG */
+#line 3462 "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)
@@ -6919,11 +6966,11 @@ yyreduce:
else cfg_parser->cfg->dnstap = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 6923 "util/configparser.c"
+#line 6970 "util/configparser.c"
break;
- case 652: /* dt_dnstap_bidirectional: VAR_DNSTAP_BIDIRECTIONAL STRING_ARG */
-#line 3452 "util/configparser.y"
+ case 654: /* dt_dnstap_bidirectional: VAR_DNSTAP_BIDIRECTIONAL STRING_ARG */
+#line 3471 "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)
@@ -6932,31 +6979,31 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 6936 "util/configparser.c"
+#line 6983 "util/configparser.c"
break;
- case 653: /* dt_dnstap_socket_path: VAR_DNSTAP_SOCKET_PATH STRING_ARG */
-#line 3462 "util/configparser.y"
+ case 655: /* dt_dnstap_socket_path: VAR_DNSTAP_SOCKET_PATH STRING_ARG */
+#line 3481 "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 6946 "util/configparser.c"
+#line 6993 "util/configparser.c"
break;
- case 654: /* dt_dnstap_ip: VAR_DNSTAP_IP STRING_ARG */
-#line 3469 "util/configparser.y"
+ case 656: /* dt_dnstap_ip: VAR_DNSTAP_IP STRING_ARG */
+#line 3488 "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 6956 "util/configparser.c"
+#line 7003 "util/configparser.c"
break;
- case 655: /* dt_dnstap_tls: VAR_DNSTAP_TLS STRING_ARG */
-#line 3476 "util/configparser.y"
+ case 657: /* dt_dnstap_tls: VAR_DNSTAP_TLS STRING_ARG */
+#line 3495 "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)
@@ -6964,51 +7011,51 @@ yyreduce:
else cfg_parser->cfg->dnstap_tls = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 6968 "util/configparser.c"
+#line 7015 "util/configparser.c"
break;
- case 656: /* dt_dnstap_tls_server_name: VAR_DNSTAP_TLS_SERVER_NAME STRING_ARG */
-#line 3485 "util/configparser.y"
+ case 658: /* dt_dnstap_tls_server_name: VAR_DNSTAP_TLS_SERVER_NAME STRING_ARG */
+#line 3504 "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 6978 "util/configparser.c"
+#line 7025 "util/configparser.c"
break;
- case 657: /* dt_dnstap_tls_cert_bundle: VAR_DNSTAP_TLS_CERT_BUNDLE STRING_ARG */
-#line 3492 "util/configparser.y"
+ case 659: /* dt_dnstap_tls_cert_bundle: VAR_DNSTAP_TLS_CERT_BUNDLE STRING_ARG */
+#line 3511 "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 6988 "util/configparser.c"
+#line 7035 "util/configparser.c"
break;
- case 658: /* dt_dnstap_tls_client_key_file: VAR_DNSTAP_TLS_CLIENT_KEY_FILE STRING_ARG */
-#line 3499 "util/configparser.y"
+ case 660: /* dt_dnstap_tls_client_key_file: VAR_DNSTAP_TLS_CLIENT_KEY_FILE STRING_ARG */
+#line 3518 "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 6998 "util/configparser.c"
+#line 7045 "util/configparser.c"
break;
- case 659: /* dt_dnstap_tls_client_cert_file: VAR_DNSTAP_TLS_CLIENT_CERT_FILE STRING_ARG */
-#line 3506 "util/configparser.y"
+ case 661: /* dt_dnstap_tls_client_cert_file: VAR_DNSTAP_TLS_CLIENT_CERT_FILE STRING_ARG */
+#line 3525 "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 7008 "util/configparser.c"
+#line 7055 "util/configparser.c"
break;
- case 660: /* dt_dnstap_send_identity: VAR_DNSTAP_SEND_IDENTITY STRING_ARG */
-#line 3513 "util/configparser.y"
+ case 662: /* dt_dnstap_send_identity: VAR_DNSTAP_SEND_IDENTITY STRING_ARG */
+#line 3532 "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)
@@ -7016,11 +7063,11 @@ yyreduce:
else cfg_parser->cfg->dnstap_send_identity = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 7020 "util/configparser.c"
+#line 7067 "util/configparser.c"
break;
- case 661: /* dt_dnstap_send_version: VAR_DNSTAP_SEND_VERSION STRING_ARG */
-#line 3522 "util/configparser.y"
+ case 663: /* dt_dnstap_send_version: VAR_DNSTAP_SEND_VERSION STRING_ARG */
+#line 3541 "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)
@@ -7028,31 +7075,31 @@ yyreduce:
else cfg_parser->cfg->dnstap_send_version = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 7032 "util/configparser.c"
+#line 7079 "util/configparser.c"
break;
- case 662: /* dt_dnstap_identity: VAR_DNSTAP_IDENTITY STRING_ARG */
-#line 3531 "util/configparser.y"
+ case 664: /* dt_dnstap_identity: VAR_DNSTAP_IDENTITY STRING_ARG */
+#line 3550 "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 7042 "util/configparser.c"
+#line 7089 "util/configparser.c"
break;
- case 663: /* dt_dnstap_version: VAR_DNSTAP_VERSION STRING_ARG */
-#line 3538 "util/configparser.y"
+ case 665: /* dt_dnstap_version: VAR_DNSTAP_VERSION STRING_ARG */
+#line 3557 "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 7052 "util/configparser.c"
+#line 7099 "util/configparser.c"
break;
- case 664: /* dt_dnstap_log_resolver_query_messages: VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES STRING_ARG */
-#line 3545 "util/configparser.y"
+ case 666: /* dt_dnstap_log_resolver_query_messages: VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES STRING_ARG */
+#line 3564 "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)
@@ -7061,11 +7108,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 7065 "util/configparser.c"
+#line 7112 "util/configparser.c"
break;
- case 665: /* dt_dnstap_log_resolver_response_messages: VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES STRING_ARG */
-#line 3555 "util/configparser.y"
+ case 667: /* dt_dnstap_log_resolver_response_messages: VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES STRING_ARG */
+#line 3574 "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)
@@ -7074,11 +7121,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 7078 "util/configparser.c"
+#line 7125 "util/configparser.c"
break;
- case 666: /* dt_dnstap_log_client_query_messages: VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES STRING_ARG */
-#line 3565 "util/configparser.y"
+ case 668: /* dt_dnstap_log_client_query_messages: VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES STRING_ARG */
+#line 3584 "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)
@@ -7087,11 +7134,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 7091 "util/configparser.c"
+#line 7138 "util/configparser.c"
break;
- case 667: /* dt_dnstap_log_client_response_messages: VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES STRING_ARG */
-#line 3575 "util/configparser.y"
+ case 669: /* dt_dnstap_log_client_response_messages: VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES STRING_ARG */
+#line 3594 "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)
@@ -7100,11 +7147,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 7104 "util/configparser.c"
+#line 7151 "util/configparser.c"
break;
- case 668: /* dt_dnstap_log_forwarder_query_messages: VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES STRING_ARG */
-#line 3585 "util/configparser.y"
+ case 670: /* dt_dnstap_log_forwarder_query_messages: VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES STRING_ARG */
+#line 3604 "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)
@@ -7113,11 +7160,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 7117 "util/configparser.c"
+#line 7164 "util/configparser.c"
break;
- case 669: /* dt_dnstap_log_forwarder_response_messages: VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES STRING_ARG */
-#line 3595 "util/configparser.y"
+ case 671: /* dt_dnstap_log_forwarder_response_messages: VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES STRING_ARG */
+#line 3614 "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)
@@ -7126,49 +7173,63 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 7130 "util/configparser.c"
+#line 7177 "util/configparser.c"
+ break;
+
+ case 672: /* dt_dnstap_sample_rate: VAR_DNSTAP_SAMPLE_RATE STRING_ARG */
+#line 3624 "util/configparser.y"
+ {
+ OUTYY(("P(dt_dnstap_sample_rate:%s)\n", (yyvsp[0].str)));
+ if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
+ yyerror("number expected");
+ else if(atoi((yyvsp[0].str)) < 0)
+ yyerror("dnstap sample rate too small");
+ else cfg_parser->cfg->dnstap_sample_rate = atoi((yyvsp[0].str));
+ free((yyvsp[0].str));
+ }
+#line 7191 "util/configparser.c"
break;
- case 670: /* pythonstart: VAR_PYTHON */
-#line 3605 "util/configparser.y"
+ case 673: /* pythonstart: VAR_PYTHON */
+#line 3635 "util/configparser.y"
{
OUTYY(("\nP(python:)\n"));
cfg_parser->started_toplevel = 1;
}
-#line 7139 "util/configparser.c"
+#line 7200 "util/configparser.c"
break;
- case 674: /* py_script: VAR_PYTHON_SCRIPT STRING_ARG */
-#line 3615 "util/configparser.y"
+ case 677: /* py_script: VAR_PYTHON_SCRIPT STRING_ARG */
+#line 3645 "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 7149 "util/configparser.c"
+#line 7210 "util/configparser.c"
break;
- case 675: /* dynlibstart: VAR_DYNLIB */
-#line 3622 "util/configparser.y"
+ case 678: /* dynlibstart: VAR_DYNLIB */
+#line 3652 "util/configparser.y"
{
OUTYY(("\nP(dynlib:)\n"));
cfg_parser->started_toplevel = 1;
}
-#line 7158 "util/configparser.c"
+#line 7219 "util/configparser.c"
break;
- case 679: /* dl_file: VAR_DYNLIB_FILE STRING_ARG */
-#line 3632 "util/configparser.y"
+ case 682: /* dl_file: VAR_DYNLIB_FILE STRING_ARG */
+#line 3662 "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 7168 "util/configparser.c"
+#line 7229 "util/configparser.c"
break;
- case 680: /* server_disable_dnssec_lame_check: VAR_DISABLE_DNSSEC_LAME_CHECK STRING_ARG */
-#line 3639 "util/configparser.y"
+ case 683: /* server_disable_dnssec_lame_check: VAR_DISABLE_DNSSEC_LAME_CHECK STRING_ARG */
+#line 3669 "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)
@@ -7177,21 +7238,21 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 7181 "util/configparser.c"
+#line 7242 "util/configparser.c"
break;
- case 681: /* server_log_identity: VAR_LOG_IDENTITY STRING_ARG */
-#line 3649 "util/configparser.y"
+ case 684: /* server_log_identity: VAR_LOG_IDENTITY STRING_ARG */
+#line 3679 "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 7191 "util/configparser.c"
+#line 7252 "util/configparser.c"
break;
- case 682: /* server_response_ip: VAR_RESPONSE_IP STRING_ARG STRING_ARG */
-#line 3656 "util/configparser.y"
+ case 685: /* server_response_ip: VAR_RESPONSE_IP STRING_ARG STRING_ARG */
+#line 3686 "util/configparser.y"
{
OUTYY(("P(server_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
validate_respip_action((yyvsp[0].str));
@@ -7199,31 +7260,31 @@ yyreduce:
(yyvsp[-1].str), (yyvsp[0].str)))
fatal_exit("out of memory adding response-ip");
}
-#line 7203 "util/configparser.c"
+#line 7264 "util/configparser.c"
break;
- case 683: /* server_response_ip_data: VAR_RESPONSE_IP_DATA STRING_ARG STRING_ARG */
-#line 3665 "util/configparser.y"
+ case 686: /* server_response_ip_data: VAR_RESPONSE_IP_DATA STRING_ARG STRING_ARG */
+#line 3695 "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 7214 "util/configparser.c"
+#line 7275 "util/configparser.c"
break;
- case 684: /* dnscstart: VAR_DNSCRYPT */
-#line 3673 "util/configparser.y"
+ case 687: /* dnscstart: VAR_DNSCRYPT */
+#line 3703 "util/configparser.y"
{
OUTYY(("\nP(dnscrypt:)\n"));
cfg_parser->started_toplevel = 1;
}
-#line 7223 "util/configparser.c"
+#line 7284 "util/configparser.c"
break;
- case 697: /* dnsc_dnscrypt_enable: VAR_DNSCRYPT_ENABLE STRING_ARG */
-#line 3690 "util/configparser.y"
+ case 700: /* dnsc_dnscrypt_enable: VAR_DNSCRYPT_ENABLE STRING_ARG */
+#line 3720 "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)
@@ -7231,11 +7292,11 @@ yyreduce:
else cfg_parser->cfg->dnscrypt = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 7235 "util/configparser.c"
+#line 7296 "util/configparser.c"
break;
- case 698: /* dnsc_dnscrypt_port: VAR_DNSCRYPT_PORT STRING_ARG */
-#line 3699 "util/configparser.y"
+ case 701: /* dnsc_dnscrypt_port: VAR_DNSCRYPT_PORT STRING_ARG */
+#line 3729 "util/configparser.y"
{
OUTYY(("P(dnsc_dnscrypt_port:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0)
@@ -7243,21 +7304,21 @@ yyreduce:
else cfg_parser->cfg->dnscrypt_port = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 7247 "util/configparser.c"
+#line 7308 "util/configparser.c"
break;
- case 699: /* dnsc_dnscrypt_provider: VAR_DNSCRYPT_PROVIDER STRING_ARG */
-#line 3708 "util/configparser.y"
+ case 702: /* dnsc_dnscrypt_provider: VAR_DNSCRYPT_PROVIDER STRING_ARG */
+#line 3738 "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 7257 "util/configparser.c"
+#line 7318 "util/configparser.c"
break;
- case 700: /* dnsc_dnscrypt_provider_cert: VAR_DNSCRYPT_PROVIDER_CERT STRING_ARG */
-#line 3715 "util/configparser.y"
+ case 703: /* dnsc_dnscrypt_provider_cert: VAR_DNSCRYPT_PROVIDER_CERT STRING_ARG */
+#line 3745 "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)))
@@ -7265,21 +7326,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 7269 "util/configparser.c"
+#line 7330 "util/configparser.c"
break;
- case 701: /* dnsc_dnscrypt_provider_cert_rotated: VAR_DNSCRYPT_PROVIDER_CERT_ROTATED STRING_ARG */
-#line 3724 "util/configparser.y"
+ case 704: /* dnsc_dnscrypt_provider_cert_rotated: VAR_DNSCRYPT_PROVIDER_CERT_ROTATED STRING_ARG */
+#line 3754 "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 7279 "util/configparser.c"
+#line 7340 "util/configparser.c"
break;
- case 702: /* dnsc_dnscrypt_secret_key: VAR_DNSCRYPT_SECRET_KEY STRING_ARG */
-#line 3731 "util/configparser.y"
+ case 705: /* dnsc_dnscrypt_secret_key: VAR_DNSCRYPT_SECRET_KEY STRING_ARG */
+#line 3761 "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)))
@@ -7287,22 +7348,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 7291 "util/configparser.c"
+#line 7352 "util/configparser.c"
break;
- case 703: /* dnsc_dnscrypt_shared_secret_cache_size: VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE STRING_ARG */
-#line 3740 "util/configparser.y"
+ case 706: /* dnsc_dnscrypt_shared_secret_cache_size: VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE STRING_ARG */
+#line 3770 "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 7302 "util/configparser.c"
+#line 7363 "util/configparser.c"
break;
- case 704: /* dnsc_dnscrypt_shared_secret_cache_slabs: VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS STRING_ARG */
-#line 3748 "util/configparser.y"
+ case 707: /* dnsc_dnscrypt_shared_secret_cache_slabs: VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS STRING_ARG */
+#line 3778 "util/configparser.y"
{
OUTYY(("P(dnscrypt_shared_secret_cache_slabs:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0) {
@@ -7314,22 +7375,22 @@ yyreduce:
}
free((yyvsp[0].str));
}
-#line 7318 "util/configparser.c"
+#line 7379 "util/configparser.c"
break;
- case 705: /* dnsc_dnscrypt_nonce_cache_size: VAR_DNSCRYPT_NONCE_CACHE_SIZE STRING_ARG */
-#line 3761 "util/configparser.y"
+ case 708: /* dnsc_dnscrypt_nonce_cache_size: VAR_DNSCRYPT_NONCE_CACHE_SIZE STRING_ARG */
+#line 3791 "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 7329 "util/configparser.c"
+#line 7390 "util/configparser.c"
break;
- case 706: /* dnsc_dnscrypt_nonce_cache_slabs: VAR_DNSCRYPT_NONCE_CACHE_SLABS STRING_ARG */
-#line 3769 "util/configparser.y"
+ case 709: /* dnsc_dnscrypt_nonce_cache_slabs: VAR_DNSCRYPT_NONCE_CACHE_SLABS STRING_ARG */
+#line 3799 "util/configparser.y"
{
OUTYY(("P(dnscrypt_nonce_cache_slabs:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0) {
@@ -7341,20 +7402,20 @@ yyreduce:
}
free((yyvsp[0].str));
}
-#line 7345 "util/configparser.c"
+#line 7406 "util/configparser.c"
break;
- case 707: /* cachedbstart: VAR_CACHEDB */
-#line 3782 "util/configparser.y"
+ case 710: /* cachedbstart: VAR_CACHEDB */
+#line 3812 "util/configparser.y"
{
OUTYY(("\nP(cachedb:)\n"));
cfg_parser->started_toplevel = 1;
}
-#line 7354 "util/configparser.c"
+#line 7415 "util/configparser.c"
break;
- case 721: /* cachedb_backend_name: VAR_CACHEDB_BACKEND STRING_ARG */
-#line 3795 "util/configparser.y"
+ case 724: /* cachedb_backend_name: VAR_CACHEDB_BACKEND STRING_ARG */
+#line 3825 "util/configparser.y"
{
#ifdef USE_CACHEDB
OUTYY(("P(backend:%s)\n", (yyvsp[0].str)));
@@ -7365,11 +7426,11 @@ yyreduce:
free((yyvsp[0].str));
#endif
}
-#line 7369 "util/configparser.c"
+#line 7430 "util/configparser.c"
break;
- case 722: /* cachedb_secret_seed: VAR_CACHEDB_SECRETSEED STRING_ARG */
-#line 3807 "util/configparser.y"
+ case 725: /* cachedb_secret_seed: VAR_CACHEDB_SECRETSEED STRING_ARG */
+#line 3837 "util/configparser.y"
{
#ifdef USE_CACHEDB
OUTYY(("P(secret-seed:%s)\n", (yyvsp[0].str)));
@@ -7380,11 +7441,11 @@ yyreduce:
free((yyvsp[0].str));
#endif
}
-#line 7384 "util/configparser.c"
+#line 7445 "util/configparser.c"
break;
- case 723: /* cachedb_no_store: VAR_CACHEDB_NO_STORE STRING_ARG */
-#line 3819 "util/configparser.y"
+ case 726: /* cachedb_no_store: VAR_CACHEDB_NO_STORE STRING_ARG */
+#line 3849 "util/configparser.y"
{
#ifdef USE_CACHEDB
OUTYY(("P(cachedb_no_store:%s)\n", (yyvsp[0].str)));
@@ -7396,11 +7457,11 @@ yyreduce:
#endif
free((yyvsp[0].str));
}
-#line 7400 "util/configparser.c"
+#line 7461 "util/configparser.c"
break;
- case 724: /* cachedb_check_when_serve_expired: VAR_CACHEDB_CHECK_WHEN_SERVE_EXPIRED STRING_ARG */
-#line 3832 "util/configparser.y"
+ case 727: /* cachedb_check_when_serve_expired: VAR_CACHEDB_CHECK_WHEN_SERVE_EXPIRED STRING_ARG */
+#line 3862 "util/configparser.y"
{
#ifdef USE_CACHEDB
OUTYY(("P(cachedb_check_when_serve_expired:%s)\n", (yyvsp[0].str)));
@@ -7412,11 +7473,11 @@ yyreduce:
#endif
free((yyvsp[0].str));
}
-#line 7416 "util/configparser.c"
+#line 7477 "util/configparser.c"
break;
- case 725: /* redis_server_host: VAR_CACHEDB_REDISHOST STRING_ARG */
-#line 3845 "util/configparser.y"
+ case 728: /* redis_server_host: VAR_CACHEDB_REDISHOST STRING_ARG */
+#line 3875 "util/configparser.y"
{
#if defined(USE_CACHEDB) && defined(USE_REDIS)
OUTYY(("P(redis_server_host:%s)\n", (yyvsp[0].str)));
@@ -7427,11 +7488,11 @@ yyreduce:
free((yyvsp[0].str));
#endif
}
-#line 7431 "util/configparser.c"
+#line 7492 "util/configparser.c"
break;
- case 726: /* redis_server_port: VAR_CACHEDB_REDISPORT STRING_ARG */
-#line 3857 "util/configparser.y"
+ case 729: /* redis_server_port: VAR_CACHEDB_REDISPORT STRING_ARG */
+#line 3887 "util/configparser.y"
{
#if defined(USE_CACHEDB) && defined(USE_REDIS)
int port;
@@ -7445,11 +7506,11 @@ yyreduce:
#endif
free((yyvsp[0].str));
}
-#line 7449 "util/configparser.c"
+#line 7510 "util/configparser.c"
break;
- case 727: /* redis_server_path: VAR_CACHEDB_REDISPATH STRING_ARG */
-#line 3872 "util/configparser.y"
+ case 730: /* redis_server_path: VAR_CACHEDB_REDISPATH STRING_ARG */
+#line 3902 "util/configparser.y"
{
#if defined(USE_CACHEDB) && defined(USE_REDIS)
OUTYY(("P(redis_server_path:%s)\n", (yyvsp[0].str)));
@@ -7460,11 +7521,11 @@ yyreduce:
free((yyvsp[0].str));
#endif
}
-#line 7464 "util/configparser.c"
+#line 7525 "util/configparser.c"
break;
- case 728: /* redis_server_password: VAR_CACHEDB_REDISPASSWORD STRING_ARG */
-#line 3884 "util/configparser.y"
+ case 731: /* redis_server_password: VAR_CACHEDB_REDISPASSWORD STRING_ARG */
+#line 3914 "util/configparser.y"
{
#if defined(USE_CACHEDB) && defined(USE_REDIS)
OUTYY(("P(redis_server_password:%s)\n", (yyvsp[0].str)));
@@ -7475,11 +7536,11 @@ yyreduce:
free((yyvsp[0].str));
#endif
}
-#line 7479 "util/configparser.c"
+#line 7540 "util/configparser.c"
break;
- case 729: /* redis_timeout: VAR_CACHEDB_REDISTIMEOUT STRING_ARG */
-#line 3896 "util/configparser.y"
+ case 732: /* redis_timeout: VAR_CACHEDB_REDISTIMEOUT STRING_ARG */
+#line 3926 "util/configparser.y"
{
#if defined(USE_CACHEDB) && defined(USE_REDIS)
OUTYY(("P(redis_timeout:%s)\n", (yyvsp[0].str)));
@@ -7491,11 +7552,11 @@ yyreduce:
#endif
free((yyvsp[0].str));
}
-#line 7495 "util/configparser.c"
+#line 7556 "util/configparser.c"
break;
- case 730: /* redis_expire_records: VAR_CACHEDB_REDISEXPIRERECORDS STRING_ARG */
-#line 3909 "util/configparser.y"
+ case 733: /* redis_expire_records: VAR_CACHEDB_REDISEXPIRERECORDS STRING_ARG */
+#line 3939 "util/configparser.y"
{
#if defined(USE_CACHEDB) && defined(USE_REDIS)
OUTYY(("P(redis_expire_records:%s)\n", (yyvsp[0].str)));
@@ -7507,11 +7568,11 @@ yyreduce:
#endif
free((yyvsp[0].str));
}
-#line 7511 "util/configparser.c"
+#line 7572 "util/configparser.c"
break;
- case 731: /* redis_logical_db: VAR_CACHEDB_REDISLOGICALDB STRING_ARG */
-#line 3922 "util/configparser.y"
+ case 734: /* redis_logical_db: VAR_CACHEDB_REDISLOGICALDB STRING_ARG */
+#line 3952 "util/configparser.y"
{
#if defined(USE_CACHEDB) && defined(USE_REDIS)
int db;
@@ -7525,11 +7586,11 @@ yyreduce:
#endif
free((yyvsp[0].str));
}
-#line 7529 "util/configparser.c"
+#line 7590 "util/configparser.c"
break;
- case 732: /* server_tcp_connection_limit: VAR_TCP_CONNECTION_LIMIT STRING_ARG STRING_ARG */
-#line 3937 "util/configparser.y"
+ case 735: /* server_tcp_connection_limit: VAR_TCP_CONNECTION_LIMIT STRING_ARG STRING_ARG */
+#line 3967 "util/configparser.y"
{
OUTYY(("P(server_tcp_connection_limit:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
if (atoi((yyvsp[0].str)) < 0)
@@ -7539,11 +7600,11 @@ yyreduce:
fatal_exit("out of memory adding tcp connection limit");
}
}
-#line 7543 "util/configparser.c"
+#line 7604 "util/configparser.c"
break;
- case 733: /* server_answer_cookie: VAR_ANSWER_COOKIE STRING_ARG */
-#line 3948 "util/configparser.y"
+ case 736: /* server_answer_cookie: VAR_ANSWER_COOKIE STRING_ARG */
+#line 3978 "util/configparser.y"
{
OUTYY(("P(server_answer_cookie:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -7551,11 +7612,11 @@ yyreduce:
else cfg_parser->cfg->do_answer_cookie = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 7555 "util/configparser.c"
+#line 7616 "util/configparser.c"
break;
- case 734: /* server_cookie_secret: VAR_COOKIE_SECRET STRING_ARG */
-#line 3957 "util/configparser.y"
+ case 737: /* server_cookie_secret: VAR_COOKIE_SECRET STRING_ARG */
+#line 3987 "util/configparser.y"
{
uint8_t secret[32];
size_t secret_len = sizeof(secret);
@@ -7570,56 +7631,66 @@ yyreduce:
}
free((yyvsp[0].str));
}
-#line 7574 "util/configparser.c"
+#line 7635 "util/configparser.c"
break;
- case 735: /* ipsetstart: VAR_IPSET */
-#line 3973 "util/configparser.y"
- {
- OUTYY(("\nP(ipset:)\n"));
- cfg_parser->started_toplevel = 1;
- }
-#line 7583 "util/configparser.c"
- break;
-
- case 740: /* ipset_name_v4: VAR_IPSET_NAME_V4 STRING_ARG */
-#line 3983 "util/configparser.y"
- {
- #ifdef USE_IPSET
- OUTYY(("P(name-v4:%s)\n", (yyvsp[0].str)));
- if(cfg_parser->cfg->ipset_name_v4)
- yyerror("ipset name v4 override, there must be one "
- "name for ip v4");
- free(cfg_parser->cfg->ipset_name_v4);
- cfg_parser->cfg->ipset_name_v4 = (yyvsp[0].str);
- #else
- OUTYY(("P(Compiled without ipset, ignoring)\n"));
- free((yyvsp[0].str));
- #endif
- }
-#line 7601 "util/configparser.c"
+ case 738: /* server_cookie_secret_file: VAR_COOKIE_SECRET_FILE STRING_ARG */
+#line 4003 "util/configparser.y"
+ {
+ OUTYY(("P(cookie_secret_file:%s)\n", (yyvsp[0].str)));
+ free(cfg_parser->cfg->cookie_secret_file);
+ cfg_parser->cfg->cookie_secret_file = (yyvsp[0].str);
+ }
+#line 7645 "util/configparser.c"
break;
- case 741: /* ipset_name_v6: VAR_IPSET_NAME_V6 STRING_ARG */
-#line 3998 "util/configparser.y"
+ case 739: /* ipsetstart: VAR_IPSET */
+#line 4010 "util/configparser.y"
{
- #ifdef USE_IPSET
- OUTYY(("P(name-v6:%s)\n", (yyvsp[0].str)));
- if(cfg_parser->cfg->ipset_name_v6)
- yyerror("ipset name v6 override, there must be one "
- "name for ip v6");
- free(cfg_parser->cfg->ipset_name_v6);
- cfg_parser->cfg->ipset_name_v6 = (yyvsp[0].str);
- #else
- OUTYY(("P(Compiled without ipset, ignoring)\n"));
- free((yyvsp[0].str));
- #endif
- }
-#line 7619 "util/configparser.c"
+ OUTYY(("\nP(ipset:)\n"));
+ cfg_parser->started_toplevel = 1;
+ }
+#line 7654 "util/configparser.c"
+ break;
+
+ case 744: /* ipset_name_v4: VAR_IPSET_NAME_V4 STRING_ARG */
+#line 4020 "util/configparser.y"
+ {
+ #ifdef USE_IPSET
+ OUTYY(("P(name-v4:%s)\n", (yyvsp[0].str)));
+ if(cfg_parser->cfg->ipset_name_v4)
+ yyerror("ipset name v4 override, there must be one "
+ "name for ip v4");
+ free(cfg_parser->cfg->ipset_name_v4);
+ cfg_parser->cfg->ipset_name_v4 = (yyvsp[0].str);
+ #else
+ OUTYY(("P(Compiled without ipset, ignoring)\n"));
+ free((yyvsp[0].str));
+ #endif
+ }
+#line 7672 "util/configparser.c"
+ break;
+
+ case 745: /* ipset_name_v6: VAR_IPSET_NAME_V6 STRING_ARG */
+#line 4035 "util/configparser.y"
+ {
+ #ifdef USE_IPSET
+ OUTYY(("P(name-v6:%s)\n", (yyvsp[0].str)));
+ if(cfg_parser->cfg->ipset_name_v6)
+ yyerror("ipset name v6 override, there must be one "
+ "name for ip v6");
+ free(cfg_parser->cfg->ipset_name_v6);
+ cfg_parser->cfg->ipset_name_v6 = (yyvsp[0].str);
+ #else
+ OUTYY(("P(Compiled without ipset, ignoring)\n"));
+ free((yyvsp[0].str));
+ #endif
+ }
+#line 7690 "util/configparser.c"
break;
-#line 7623 "util/configparser.c"
+#line 7694 "util/configparser.c"
default: break;
}
@@ -7813,7 +7884,7 @@ yyreturn:
return yyresult;
}
-#line 4012 "util/configparser.y"
+#line 4049 "util/configparser.y"
/* parse helper routines could be here */
diff --git a/util/configparser.h b/util/configparser.h
index cfb9e01cdcd5..44b5b491bd91 100644
--- a/util/configparser.h
+++ b/util/configparser.h
@@ -243,171 +243,173 @@ extern int yydebug;
VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES = 444, /* VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES */
VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES = 445, /* VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES */
VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES = 446, /* VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES */
- VAR_RESPONSE_IP_TAG = 447, /* VAR_RESPONSE_IP_TAG */
- VAR_RESPONSE_IP = 448, /* VAR_RESPONSE_IP */
- VAR_RESPONSE_IP_DATA = 449, /* VAR_RESPONSE_IP_DATA */
- VAR_HARDEN_ALGO_DOWNGRADE = 450, /* VAR_HARDEN_ALGO_DOWNGRADE */
- VAR_IP_TRANSPARENT = 451, /* VAR_IP_TRANSPARENT */
- VAR_IP_DSCP = 452, /* VAR_IP_DSCP */
- VAR_DISABLE_DNSSEC_LAME_CHECK = 453, /* VAR_DISABLE_DNSSEC_LAME_CHECK */
- VAR_IP_RATELIMIT = 454, /* VAR_IP_RATELIMIT */
- VAR_IP_RATELIMIT_SLABS = 455, /* VAR_IP_RATELIMIT_SLABS */
- VAR_IP_RATELIMIT_SIZE = 456, /* VAR_IP_RATELIMIT_SIZE */
- VAR_RATELIMIT = 457, /* VAR_RATELIMIT */
- VAR_RATELIMIT_SLABS = 458, /* VAR_RATELIMIT_SLABS */
- VAR_RATELIMIT_SIZE = 459, /* VAR_RATELIMIT_SIZE */
- VAR_OUTBOUND_MSG_RETRY = 460, /* VAR_OUTBOUND_MSG_RETRY */
- VAR_MAX_SENT_COUNT = 461, /* VAR_MAX_SENT_COUNT */
- VAR_MAX_QUERY_RESTARTS = 462, /* VAR_MAX_QUERY_RESTARTS */
- VAR_RATELIMIT_FOR_DOMAIN = 463, /* VAR_RATELIMIT_FOR_DOMAIN */
- VAR_RATELIMIT_BELOW_DOMAIN = 464, /* VAR_RATELIMIT_BELOW_DOMAIN */
- VAR_IP_RATELIMIT_FACTOR = 465, /* VAR_IP_RATELIMIT_FACTOR */
- VAR_RATELIMIT_FACTOR = 466, /* VAR_RATELIMIT_FACTOR */
- VAR_IP_RATELIMIT_BACKOFF = 467, /* VAR_IP_RATELIMIT_BACKOFF */
- VAR_RATELIMIT_BACKOFF = 468, /* VAR_RATELIMIT_BACKOFF */
- VAR_SEND_CLIENT_SUBNET = 469, /* VAR_SEND_CLIENT_SUBNET */
- VAR_CLIENT_SUBNET_ZONE = 470, /* VAR_CLIENT_SUBNET_ZONE */
- VAR_CLIENT_SUBNET_ALWAYS_FORWARD = 471, /* VAR_CLIENT_SUBNET_ALWAYS_FORWARD */
- VAR_CLIENT_SUBNET_OPCODE = 472, /* VAR_CLIENT_SUBNET_OPCODE */
- VAR_MAX_CLIENT_SUBNET_IPV4 = 473, /* VAR_MAX_CLIENT_SUBNET_IPV4 */
- VAR_MAX_CLIENT_SUBNET_IPV6 = 474, /* VAR_MAX_CLIENT_SUBNET_IPV6 */
- VAR_MIN_CLIENT_SUBNET_IPV4 = 475, /* VAR_MIN_CLIENT_SUBNET_IPV4 */
- VAR_MIN_CLIENT_SUBNET_IPV6 = 476, /* VAR_MIN_CLIENT_SUBNET_IPV6 */
- VAR_MAX_ECS_TREE_SIZE_IPV4 = 477, /* VAR_MAX_ECS_TREE_SIZE_IPV4 */
- VAR_MAX_ECS_TREE_SIZE_IPV6 = 478, /* VAR_MAX_ECS_TREE_SIZE_IPV6 */
- VAR_CAPS_WHITELIST = 479, /* VAR_CAPS_WHITELIST */
- VAR_CACHE_MAX_NEGATIVE_TTL = 480, /* VAR_CACHE_MAX_NEGATIVE_TTL */
- VAR_PERMIT_SMALL_HOLDDOWN = 481, /* VAR_PERMIT_SMALL_HOLDDOWN */
- VAR_CACHE_MIN_NEGATIVE_TTL = 482, /* VAR_CACHE_MIN_NEGATIVE_TTL */
- VAR_QNAME_MINIMISATION = 483, /* VAR_QNAME_MINIMISATION */
- VAR_QNAME_MINIMISATION_STRICT = 484, /* VAR_QNAME_MINIMISATION_STRICT */
- VAR_IP_FREEBIND = 485, /* VAR_IP_FREEBIND */
- VAR_DEFINE_TAG = 486, /* VAR_DEFINE_TAG */
- VAR_LOCAL_ZONE_TAG = 487, /* VAR_LOCAL_ZONE_TAG */
- VAR_ACCESS_CONTROL_TAG = 488, /* VAR_ACCESS_CONTROL_TAG */
- VAR_LOCAL_ZONE_OVERRIDE = 489, /* VAR_LOCAL_ZONE_OVERRIDE */
- VAR_ACCESS_CONTROL_TAG_ACTION = 490, /* VAR_ACCESS_CONTROL_TAG_ACTION */
- VAR_ACCESS_CONTROL_TAG_DATA = 491, /* VAR_ACCESS_CONTROL_TAG_DATA */
- VAR_VIEW = 492, /* VAR_VIEW */
- VAR_ACCESS_CONTROL_VIEW = 493, /* VAR_ACCESS_CONTROL_VIEW */
- VAR_VIEW_FIRST = 494, /* VAR_VIEW_FIRST */
- VAR_SERVE_EXPIRED = 495, /* VAR_SERVE_EXPIRED */
- VAR_SERVE_EXPIRED_TTL = 496, /* VAR_SERVE_EXPIRED_TTL */
- VAR_SERVE_EXPIRED_TTL_RESET = 497, /* VAR_SERVE_EXPIRED_TTL_RESET */
- VAR_SERVE_EXPIRED_REPLY_TTL = 498, /* VAR_SERVE_EXPIRED_REPLY_TTL */
- VAR_SERVE_EXPIRED_CLIENT_TIMEOUT = 499, /* VAR_SERVE_EXPIRED_CLIENT_TIMEOUT */
- VAR_EDE_SERVE_EXPIRED = 500, /* VAR_EDE_SERVE_EXPIRED */
- VAR_SERVE_ORIGINAL_TTL = 501, /* VAR_SERVE_ORIGINAL_TTL */
- VAR_FAKE_DSA = 502, /* VAR_FAKE_DSA */
- VAR_FAKE_SHA1 = 503, /* VAR_FAKE_SHA1 */
- VAR_LOG_IDENTITY = 504, /* VAR_LOG_IDENTITY */
- VAR_HIDE_TRUSTANCHOR = 505, /* VAR_HIDE_TRUSTANCHOR */
- VAR_HIDE_HTTP_USER_AGENT = 506, /* VAR_HIDE_HTTP_USER_AGENT */
- VAR_HTTP_USER_AGENT = 507, /* VAR_HTTP_USER_AGENT */
- VAR_TRUST_ANCHOR_SIGNALING = 508, /* VAR_TRUST_ANCHOR_SIGNALING */
- VAR_AGGRESSIVE_NSEC = 509, /* VAR_AGGRESSIVE_NSEC */
- VAR_USE_SYSTEMD = 510, /* VAR_USE_SYSTEMD */
- VAR_SHM_ENABLE = 511, /* VAR_SHM_ENABLE */
- VAR_SHM_KEY = 512, /* VAR_SHM_KEY */
- VAR_ROOT_KEY_SENTINEL = 513, /* VAR_ROOT_KEY_SENTINEL */
- VAR_DNSCRYPT = 514, /* VAR_DNSCRYPT */
- VAR_DNSCRYPT_ENABLE = 515, /* VAR_DNSCRYPT_ENABLE */
- VAR_DNSCRYPT_PORT = 516, /* VAR_DNSCRYPT_PORT */
- VAR_DNSCRYPT_PROVIDER = 517, /* VAR_DNSCRYPT_PROVIDER */
- VAR_DNSCRYPT_SECRET_KEY = 518, /* VAR_DNSCRYPT_SECRET_KEY */
- VAR_DNSCRYPT_PROVIDER_CERT = 519, /* VAR_DNSCRYPT_PROVIDER_CERT */
- VAR_DNSCRYPT_PROVIDER_CERT_ROTATED = 520, /* VAR_DNSCRYPT_PROVIDER_CERT_ROTATED */
- VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 521, /* VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE */
- VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 522, /* VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS */
- VAR_DNSCRYPT_NONCE_CACHE_SIZE = 523, /* VAR_DNSCRYPT_NONCE_CACHE_SIZE */
- VAR_DNSCRYPT_NONCE_CACHE_SLABS = 524, /* VAR_DNSCRYPT_NONCE_CACHE_SLABS */
- VAR_PAD_RESPONSES = 525, /* VAR_PAD_RESPONSES */
- VAR_PAD_RESPONSES_BLOCK_SIZE = 526, /* VAR_PAD_RESPONSES_BLOCK_SIZE */
- VAR_PAD_QUERIES = 527, /* VAR_PAD_QUERIES */
- VAR_PAD_QUERIES_BLOCK_SIZE = 528, /* VAR_PAD_QUERIES_BLOCK_SIZE */
- VAR_IPSECMOD_ENABLED = 529, /* VAR_IPSECMOD_ENABLED */
- VAR_IPSECMOD_HOOK = 530, /* VAR_IPSECMOD_HOOK */
- VAR_IPSECMOD_IGNORE_BOGUS = 531, /* VAR_IPSECMOD_IGNORE_BOGUS */
- VAR_IPSECMOD_MAX_TTL = 532, /* VAR_IPSECMOD_MAX_TTL */
- VAR_IPSECMOD_WHITELIST = 533, /* VAR_IPSECMOD_WHITELIST */
- VAR_IPSECMOD_STRICT = 534, /* VAR_IPSECMOD_STRICT */
- VAR_CACHEDB = 535, /* VAR_CACHEDB */
- VAR_CACHEDB_BACKEND = 536, /* VAR_CACHEDB_BACKEND */
- VAR_CACHEDB_SECRETSEED = 537, /* VAR_CACHEDB_SECRETSEED */
- VAR_CACHEDB_REDISHOST = 538, /* VAR_CACHEDB_REDISHOST */
- VAR_CACHEDB_REDISPORT = 539, /* VAR_CACHEDB_REDISPORT */
- VAR_CACHEDB_REDISTIMEOUT = 540, /* VAR_CACHEDB_REDISTIMEOUT */
- VAR_CACHEDB_REDISEXPIRERECORDS = 541, /* VAR_CACHEDB_REDISEXPIRERECORDS */
- VAR_CACHEDB_REDISPATH = 542, /* VAR_CACHEDB_REDISPATH */
- VAR_CACHEDB_REDISPASSWORD = 543, /* VAR_CACHEDB_REDISPASSWORD */
- VAR_CACHEDB_REDISLOGICALDB = 544, /* VAR_CACHEDB_REDISLOGICALDB */
- VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 545, /* VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM */
- VAR_FOR_UPSTREAM = 546, /* VAR_FOR_UPSTREAM */
- VAR_AUTH_ZONE = 547, /* VAR_AUTH_ZONE */
- VAR_ZONEFILE = 548, /* VAR_ZONEFILE */
- VAR_MASTER = 549, /* VAR_MASTER */
- VAR_URL = 550, /* VAR_URL */
- VAR_FOR_DOWNSTREAM = 551, /* VAR_FOR_DOWNSTREAM */
- VAR_FALLBACK_ENABLED = 552, /* VAR_FALLBACK_ENABLED */
- VAR_TLS_ADDITIONAL_PORT = 553, /* VAR_TLS_ADDITIONAL_PORT */
- VAR_LOW_RTT = 554, /* VAR_LOW_RTT */
- VAR_LOW_RTT_PERMIL = 555, /* VAR_LOW_RTT_PERMIL */
- VAR_FAST_SERVER_PERMIL = 556, /* VAR_FAST_SERVER_PERMIL */
- VAR_FAST_SERVER_NUM = 557, /* VAR_FAST_SERVER_NUM */
- VAR_ALLOW_NOTIFY = 558, /* VAR_ALLOW_NOTIFY */
- VAR_TLS_WIN_CERT = 559, /* VAR_TLS_WIN_CERT */
- VAR_TCP_CONNECTION_LIMIT = 560, /* VAR_TCP_CONNECTION_LIMIT */
- VAR_ANSWER_COOKIE = 561, /* VAR_ANSWER_COOKIE */
- VAR_COOKIE_SECRET = 562, /* VAR_COOKIE_SECRET */
- VAR_IP_RATELIMIT_COOKIE = 563, /* VAR_IP_RATELIMIT_COOKIE */
- VAR_FORWARD_NO_CACHE = 564, /* VAR_FORWARD_NO_CACHE */
- VAR_STUB_NO_CACHE = 565, /* VAR_STUB_NO_CACHE */
- VAR_LOG_SERVFAIL = 566, /* VAR_LOG_SERVFAIL */
- VAR_DENY_ANY = 567, /* VAR_DENY_ANY */
- VAR_UNKNOWN_SERVER_TIME_LIMIT = 568, /* VAR_UNKNOWN_SERVER_TIME_LIMIT */
- VAR_LOG_TAG_QUERYREPLY = 569, /* VAR_LOG_TAG_QUERYREPLY */
- VAR_DISCARD_TIMEOUT = 570, /* VAR_DISCARD_TIMEOUT */
- VAR_WAIT_LIMIT = 571, /* VAR_WAIT_LIMIT */
- VAR_WAIT_LIMIT_COOKIE = 572, /* VAR_WAIT_LIMIT_COOKIE */
- VAR_WAIT_LIMIT_NETBLOCK = 573, /* VAR_WAIT_LIMIT_NETBLOCK */
- VAR_WAIT_LIMIT_COOKIE_NETBLOCK = 574, /* VAR_WAIT_LIMIT_COOKIE_NETBLOCK */
- VAR_STREAM_WAIT_SIZE = 575, /* VAR_STREAM_WAIT_SIZE */
- VAR_TLS_CIPHERS = 576, /* VAR_TLS_CIPHERS */
- VAR_TLS_CIPHERSUITES = 577, /* VAR_TLS_CIPHERSUITES */
- VAR_TLS_USE_SNI = 578, /* VAR_TLS_USE_SNI */
- VAR_IPSET = 579, /* VAR_IPSET */
- VAR_IPSET_NAME_V4 = 580, /* VAR_IPSET_NAME_V4 */
- VAR_IPSET_NAME_V6 = 581, /* VAR_IPSET_NAME_V6 */
- VAR_TLS_SESSION_TICKET_KEYS = 582, /* VAR_TLS_SESSION_TICKET_KEYS */
- VAR_RPZ = 583, /* VAR_RPZ */
- VAR_TAGS = 584, /* VAR_TAGS */
- VAR_RPZ_ACTION_OVERRIDE = 585, /* VAR_RPZ_ACTION_OVERRIDE */
- VAR_RPZ_CNAME_OVERRIDE = 586, /* VAR_RPZ_CNAME_OVERRIDE */
- VAR_RPZ_LOG = 587, /* VAR_RPZ_LOG */
- VAR_RPZ_LOG_NAME = 588, /* VAR_RPZ_LOG_NAME */
- VAR_DYNLIB = 589, /* VAR_DYNLIB */
- VAR_DYNLIB_FILE = 590, /* VAR_DYNLIB_FILE */
- VAR_EDNS_CLIENT_STRING = 591, /* VAR_EDNS_CLIENT_STRING */
- VAR_EDNS_CLIENT_STRING_OPCODE = 592, /* VAR_EDNS_CLIENT_STRING_OPCODE */
- VAR_NSID = 593, /* VAR_NSID */
- VAR_ZONEMD_PERMISSIVE_MODE = 594, /* VAR_ZONEMD_PERMISSIVE_MODE */
- VAR_ZONEMD_CHECK = 595, /* VAR_ZONEMD_CHECK */
- VAR_ZONEMD_REJECT_ABSENCE = 596, /* VAR_ZONEMD_REJECT_ABSENCE */
- VAR_RPZ_SIGNAL_NXDOMAIN_RA = 597, /* VAR_RPZ_SIGNAL_NXDOMAIN_RA */
- VAR_INTERFACE_AUTOMATIC_PORTS = 598, /* VAR_INTERFACE_AUTOMATIC_PORTS */
- VAR_EDE = 599, /* VAR_EDE */
- VAR_INTERFACE_ACTION = 600, /* VAR_INTERFACE_ACTION */
- VAR_INTERFACE_VIEW = 601, /* VAR_INTERFACE_VIEW */
- VAR_INTERFACE_TAG = 602, /* VAR_INTERFACE_TAG */
- VAR_INTERFACE_TAG_ACTION = 603, /* VAR_INTERFACE_TAG_ACTION */
- VAR_INTERFACE_TAG_DATA = 604, /* VAR_INTERFACE_TAG_DATA */
- VAR_PROXY_PROTOCOL_PORT = 605, /* VAR_PROXY_PROTOCOL_PORT */
- VAR_STATISTICS_INHIBIT_ZERO = 606, /* VAR_STATISTICS_INHIBIT_ZERO */
- VAR_HARDEN_UNKNOWN_ADDITIONAL = 607, /* VAR_HARDEN_UNKNOWN_ADDITIONAL */
- VAR_DISABLE_EDNS_DO = 608, /* VAR_DISABLE_EDNS_DO */
- VAR_CACHEDB_NO_STORE = 609, /* VAR_CACHEDB_NO_STORE */
- VAR_LOG_DESTADDR = 610, /* VAR_LOG_DESTADDR */
- VAR_CACHEDB_CHECK_WHEN_SERVE_EXPIRED = 611 /* VAR_CACHEDB_CHECK_WHEN_SERVE_EXPIRED */
+ VAR_DNSTAP_SAMPLE_RATE = 447, /* VAR_DNSTAP_SAMPLE_RATE */
+ VAR_RESPONSE_IP_TAG = 448, /* VAR_RESPONSE_IP_TAG */
+ VAR_RESPONSE_IP = 449, /* VAR_RESPONSE_IP */
+ VAR_RESPONSE_IP_DATA = 450, /* VAR_RESPONSE_IP_DATA */
+ VAR_HARDEN_ALGO_DOWNGRADE = 451, /* VAR_HARDEN_ALGO_DOWNGRADE */
+ VAR_IP_TRANSPARENT = 452, /* VAR_IP_TRANSPARENT */
+ VAR_IP_DSCP = 453, /* VAR_IP_DSCP */
+ VAR_DISABLE_DNSSEC_LAME_CHECK = 454, /* VAR_DISABLE_DNSSEC_LAME_CHECK */
+ VAR_IP_RATELIMIT = 455, /* VAR_IP_RATELIMIT */
+ VAR_IP_RATELIMIT_SLABS = 456, /* VAR_IP_RATELIMIT_SLABS */
+ VAR_IP_RATELIMIT_SIZE = 457, /* VAR_IP_RATELIMIT_SIZE */
+ VAR_RATELIMIT = 458, /* VAR_RATELIMIT */
+ VAR_RATELIMIT_SLABS = 459, /* VAR_RATELIMIT_SLABS */
+ VAR_RATELIMIT_SIZE = 460, /* VAR_RATELIMIT_SIZE */
+ VAR_OUTBOUND_MSG_RETRY = 461, /* VAR_OUTBOUND_MSG_RETRY */
+ VAR_MAX_SENT_COUNT = 462, /* VAR_MAX_SENT_COUNT */
+ VAR_MAX_QUERY_RESTARTS = 463, /* VAR_MAX_QUERY_RESTARTS */
+ VAR_RATELIMIT_FOR_DOMAIN = 464, /* VAR_RATELIMIT_FOR_DOMAIN */
+ VAR_RATELIMIT_BELOW_DOMAIN = 465, /* VAR_RATELIMIT_BELOW_DOMAIN */
+ VAR_IP_RATELIMIT_FACTOR = 466, /* VAR_IP_RATELIMIT_FACTOR */
+ VAR_RATELIMIT_FACTOR = 467, /* VAR_RATELIMIT_FACTOR */
+ VAR_IP_RATELIMIT_BACKOFF = 468, /* VAR_IP_RATELIMIT_BACKOFF */
+ VAR_RATELIMIT_BACKOFF = 469, /* VAR_RATELIMIT_BACKOFF */
+ VAR_SEND_CLIENT_SUBNET = 470, /* VAR_SEND_CLIENT_SUBNET */
+ VAR_CLIENT_SUBNET_ZONE = 471, /* VAR_CLIENT_SUBNET_ZONE */
+ VAR_CLIENT_SUBNET_ALWAYS_FORWARD = 472, /* VAR_CLIENT_SUBNET_ALWAYS_FORWARD */
+ VAR_CLIENT_SUBNET_OPCODE = 473, /* VAR_CLIENT_SUBNET_OPCODE */
+ VAR_MAX_CLIENT_SUBNET_IPV4 = 474, /* VAR_MAX_CLIENT_SUBNET_IPV4 */
+ VAR_MAX_CLIENT_SUBNET_IPV6 = 475, /* VAR_MAX_CLIENT_SUBNET_IPV6 */
+ VAR_MIN_CLIENT_SUBNET_IPV4 = 476, /* VAR_MIN_CLIENT_SUBNET_IPV4 */
+ VAR_MIN_CLIENT_SUBNET_IPV6 = 477, /* VAR_MIN_CLIENT_SUBNET_IPV6 */
+ VAR_MAX_ECS_TREE_SIZE_IPV4 = 478, /* VAR_MAX_ECS_TREE_SIZE_IPV4 */
+ VAR_MAX_ECS_TREE_SIZE_IPV6 = 479, /* VAR_MAX_ECS_TREE_SIZE_IPV6 */
+ VAR_CAPS_WHITELIST = 480, /* VAR_CAPS_WHITELIST */
+ VAR_CACHE_MAX_NEGATIVE_TTL = 481, /* VAR_CACHE_MAX_NEGATIVE_TTL */
+ VAR_PERMIT_SMALL_HOLDDOWN = 482, /* VAR_PERMIT_SMALL_HOLDDOWN */
+ VAR_CACHE_MIN_NEGATIVE_TTL = 483, /* VAR_CACHE_MIN_NEGATIVE_TTL */
+ VAR_QNAME_MINIMISATION = 484, /* VAR_QNAME_MINIMISATION */
+ VAR_QNAME_MINIMISATION_STRICT = 485, /* VAR_QNAME_MINIMISATION_STRICT */
+ VAR_IP_FREEBIND = 486, /* VAR_IP_FREEBIND */
+ VAR_DEFINE_TAG = 487, /* VAR_DEFINE_TAG */
+ VAR_LOCAL_ZONE_TAG = 488, /* VAR_LOCAL_ZONE_TAG */
+ VAR_ACCESS_CONTROL_TAG = 489, /* VAR_ACCESS_CONTROL_TAG */
+ VAR_LOCAL_ZONE_OVERRIDE = 490, /* VAR_LOCAL_ZONE_OVERRIDE */
+ VAR_ACCESS_CONTROL_TAG_ACTION = 491, /* VAR_ACCESS_CONTROL_TAG_ACTION */
+ VAR_ACCESS_CONTROL_TAG_DATA = 492, /* VAR_ACCESS_CONTROL_TAG_DATA */
+ VAR_VIEW = 493, /* VAR_VIEW */
+ VAR_ACCESS_CONTROL_VIEW = 494, /* VAR_ACCESS_CONTROL_VIEW */
+ VAR_VIEW_FIRST = 495, /* VAR_VIEW_FIRST */
+ VAR_SERVE_EXPIRED = 496, /* VAR_SERVE_EXPIRED */
+ VAR_SERVE_EXPIRED_TTL = 497, /* VAR_SERVE_EXPIRED_TTL */
+ VAR_SERVE_EXPIRED_TTL_RESET = 498, /* VAR_SERVE_EXPIRED_TTL_RESET */
+ VAR_SERVE_EXPIRED_REPLY_TTL = 499, /* VAR_SERVE_EXPIRED_REPLY_TTL */
+ VAR_SERVE_EXPIRED_CLIENT_TIMEOUT = 500, /* VAR_SERVE_EXPIRED_CLIENT_TIMEOUT */
+ VAR_EDE_SERVE_EXPIRED = 501, /* VAR_EDE_SERVE_EXPIRED */
+ VAR_SERVE_ORIGINAL_TTL = 502, /* VAR_SERVE_ORIGINAL_TTL */
+ VAR_FAKE_DSA = 503, /* VAR_FAKE_DSA */
+ VAR_FAKE_SHA1 = 504, /* VAR_FAKE_SHA1 */
+ VAR_LOG_IDENTITY = 505, /* VAR_LOG_IDENTITY */
+ VAR_HIDE_TRUSTANCHOR = 506, /* VAR_HIDE_TRUSTANCHOR */
+ VAR_HIDE_HTTP_USER_AGENT = 507, /* VAR_HIDE_HTTP_USER_AGENT */
+ VAR_HTTP_USER_AGENT = 508, /* VAR_HTTP_USER_AGENT */
+ VAR_TRUST_ANCHOR_SIGNALING = 509, /* VAR_TRUST_ANCHOR_SIGNALING */
+ VAR_AGGRESSIVE_NSEC = 510, /* VAR_AGGRESSIVE_NSEC */
+ VAR_USE_SYSTEMD = 511, /* VAR_USE_SYSTEMD */
+ VAR_SHM_ENABLE = 512, /* VAR_SHM_ENABLE */
+ VAR_SHM_KEY = 513, /* VAR_SHM_KEY */
+ VAR_ROOT_KEY_SENTINEL = 514, /* VAR_ROOT_KEY_SENTINEL */
+ VAR_DNSCRYPT = 515, /* VAR_DNSCRYPT */
+ VAR_DNSCRYPT_ENABLE = 516, /* VAR_DNSCRYPT_ENABLE */
+ VAR_DNSCRYPT_PORT = 517, /* VAR_DNSCRYPT_PORT */
+ VAR_DNSCRYPT_PROVIDER = 518, /* VAR_DNSCRYPT_PROVIDER */
+ VAR_DNSCRYPT_SECRET_KEY = 519, /* VAR_DNSCRYPT_SECRET_KEY */
+ VAR_DNSCRYPT_PROVIDER_CERT = 520, /* VAR_DNSCRYPT_PROVIDER_CERT */
+ VAR_DNSCRYPT_PROVIDER_CERT_ROTATED = 521, /* VAR_DNSCRYPT_PROVIDER_CERT_ROTATED */
+ VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 522, /* VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE */
+ VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 523, /* VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS */
+ VAR_DNSCRYPT_NONCE_CACHE_SIZE = 524, /* VAR_DNSCRYPT_NONCE_CACHE_SIZE */
+ VAR_DNSCRYPT_NONCE_CACHE_SLABS = 525, /* VAR_DNSCRYPT_NONCE_CACHE_SLABS */
+ VAR_PAD_RESPONSES = 526, /* VAR_PAD_RESPONSES */
+ VAR_PAD_RESPONSES_BLOCK_SIZE = 527, /* VAR_PAD_RESPONSES_BLOCK_SIZE */
+ VAR_PAD_QUERIES = 528, /* VAR_PAD_QUERIES */
+ VAR_PAD_QUERIES_BLOCK_SIZE = 529, /* VAR_PAD_QUERIES_BLOCK_SIZE */
+ VAR_IPSECMOD_ENABLED = 530, /* VAR_IPSECMOD_ENABLED */
+ VAR_IPSECMOD_HOOK = 531, /* VAR_IPSECMOD_HOOK */
+ VAR_IPSECMOD_IGNORE_BOGUS = 532, /* VAR_IPSECMOD_IGNORE_BOGUS */
+ VAR_IPSECMOD_MAX_TTL = 533, /* VAR_IPSECMOD_MAX_TTL */
+ VAR_IPSECMOD_WHITELIST = 534, /* VAR_IPSECMOD_WHITELIST */
+ VAR_IPSECMOD_STRICT = 535, /* VAR_IPSECMOD_STRICT */
+ VAR_CACHEDB = 536, /* VAR_CACHEDB */
+ VAR_CACHEDB_BACKEND = 537, /* VAR_CACHEDB_BACKEND */
+ VAR_CACHEDB_SECRETSEED = 538, /* VAR_CACHEDB_SECRETSEED */
+ VAR_CACHEDB_REDISHOST = 539, /* VAR_CACHEDB_REDISHOST */
+ VAR_CACHEDB_REDISPORT = 540, /* VAR_CACHEDB_REDISPORT */
+ VAR_CACHEDB_REDISTIMEOUT = 541, /* VAR_CACHEDB_REDISTIMEOUT */
+ VAR_CACHEDB_REDISEXPIRERECORDS = 542, /* VAR_CACHEDB_REDISEXPIRERECORDS */
+ VAR_CACHEDB_REDISPATH = 543, /* VAR_CACHEDB_REDISPATH */
+ VAR_CACHEDB_REDISPASSWORD = 544, /* VAR_CACHEDB_REDISPASSWORD */
+ VAR_CACHEDB_REDISLOGICALDB = 545, /* VAR_CACHEDB_REDISLOGICALDB */
+ VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 546, /* VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM */
+ VAR_FOR_UPSTREAM = 547, /* VAR_FOR_UPSTREAM */
+ VAR_AUTH_ZONE = 548, /* VAR_AUTH_ZONE */
+ VAR_ZONEFILE = 549, /* VAR_ZONEFILE */
+ VAR_MASTER = 550, /* VAR_MASTER */
+ VAR_URL = 551, /* VAR_URL */
+ VAR_FOR_DOWNSTREAM = 552, /* VAR_FOR_DOWNSTREAM */
+ VAR_FALLBACK_ENABLED = 553, /* VAR_FALLBACK_ENABLED */
+ VAR_TLS_ADDITIONAL_PORT = 554, /* VAR_TLS_ADDITIONAL_PORT */
+ VAR_LOW_RTT = 555, /* VAR_LOW_RTT */
+ VAR_LOW_RTT_PERMIL = 556, /* VAR_LOW_RTT_PERMIL */
+ VAR_FAST_SERVER_PERMIL = 557, /* VAR_FAST_SERVER_PERMIL */
+ VAR_FAST_SERVER_NUM = 558, /* VAR_FAST_SERVER_NUM */
+ VAR_ALLOW_NOTIFY = 559, /* VAR_ALLOW_NOTIFY */
+ VAR_TLS_WIN_CERT = 560, /* VAR_TLS_WIN_CERT */
+ VAR_TCP_CONNECTION_LIMIT = 561, /* VAR_TCP_CONNECTION_LIMIT */
+ VAR_ANSWER_COOKIE = 562, /* VAR_ANSWER_COOKIE */
+ VAR_COOKIE_SECRET = 563, /* VAR_COOKIE_SECRET */
+ VAR_IP_RATELIMIT_COOKIE = 564, /* VAR_IP_RATELIMIT_COOKIE */
+ VAR_FORWARD_NO_CACHE = 565, /* VAR_FORWARD_NO_CACHE */
+ VAR_STUB_NO_CACHE = 566, /* VAR_STUB_NO_CACHE */
+ VAR_LOG_SERVFAIL = 567, /* VAR_LOG_SERVFAIL */
+ VAR_DENY_ANY = 568, /* VAR_DENY_ANY */
+ VAR_UNKNOWN_SERVER_TIME_LIMIT = 569, /* VAR_UNKNOWN_SERVER_TIME_LIMIT */
+ VAR_LOG_TAG_QUERYREPLY = 570, /* VAR_LOG_TAG_QUERYREPLY */
+ VAR_DISCARD_TIMEOUT = 571, /* VAR_DISCARD_TIMEOUT */
+ VAR_WAIT_LIMIT = 572, /* VAR_WAIT_LIMIT */
+ VAR_WAIT_LIMIT_COOKIE = 573, /* VAR_WAIT_LIMIT_COOKIE */
+ VAR_WAIT_LIMIT_NETBLOCK = 574, /* VAR_WAIT_LIMIT_NETBLOCK */
+ VAR_WAIT_LIMIT_COOKIE_NETBLOCK = 575, /* VAR_WAIT_LIMIT_COOKIE_NETBLOCK */
+ VAR_STREAM_WAIT_SIZE = 576, /* VAR_STREAM_WAIT_SIZE */
+ VAR_TLS_CIPHERS = 577, /* VAR_TLS_CIPHERS */
+ VAR_TLS_CIPHERSUITES = 578, /* VAR_TLS_CIPHERSUITES */
+ VAR_TLS_USE_SNI = 579, /* VAR_TLS_USE_SNI */
+ VAR_IPSET = 580, /* VAR_IPSET */
+ VAR_IPSET_NAME_V4 = 581, /* VAR_IPSET_NAME_V4 */
+ VAR_IPSET_NAME_V6 = 582, /* VAR_IPSET_NAME_V6 */
+ VAR_TLS_SESSION_TICKET_KEYS = 583, /* VAR_TLS_SESSION_TICKET_KEYS */
+ VAR_RPZ = 584, /* VAR_RPZ */
+ VAR_TAGS = 585, /* VAR_TAGS */
+ VAR_RPZ_ACTION_OVERRIDE = 586, /* VAR_RPZ_ACTION_OVERRIDE */
+ VAR_RPZ_CNAME_OVERRIDE = 587, /* VAR_RPZ_CNAME_OVERRIDE */
+ VAR_RPZ_LOG = 588, /* VAR_RPZ_LOG */
+ VAR_RPZ_LOG_NAME = 589, /* VAR_RPZ_LOG_NAME */
+ VAR_DYNLIB = 590, /* VAR_DYNLIB */
+ VAR_DYNLIB_FILE = 591, /* VAR_DYNLIB_FILE */
+ VAR_EDNS_CLIENT_STRING = 592, /* VAR_EDNS_CLIENT_STRING */
+ VAR_EDNS_CLIENT_STRING_OPCODE = 593, /* VAR_EDNS_CLIENT_STRING_OPCODE */
+ VAR_NSID = 594, /* VAR_NSID */
+ VAR_ZONEMD_PERMISSIVE_MODE = 595, /* VAR_ZONEMD_PERMISSIVE_MODE */
+ VAR_ZONEMD_CHECK = 596, /* VAR_ZONEMD_CHECK */
+ VAR_ZONEMD_REJECT_ABSENCE = 597, /* VAR_ZONEMD_REJECT_ABSENCE */
+ VAR_RPZ_SIGNAL_NXDOMAIN_RA = 598, /* VAR_RPZ_SIGNAL_NXDOMAIN_RA */
+ VAR_INTERFACE_AUTOMATIC_PORTS = 599, /* VAR_INTERFACE_AUTOMATIC_PORTS */
+ VAR_EDE = 600, /* VAR_EDE */
+ VAR_INTERFACE_ACTION = 601, /* VAR_INTERFACE_ACTION */
+ VAR_INTERFACE_VIEW = 602, /* VAR_INTERFACE_VIEW */
+ VAR_INTERFACE_TAG = 603, /* VAR_INTERFACE_TAG */
+ VAR_INTERFACE_TAG_ACTION = 604, /* VAR_INTERFACE_TAG_ACTION */
+ VAR_INTERFACE_TAG_DATA = 605, /* VAR_INTERFACE_TAG_DATA */
+ VAR_PROXY_PROTOCOL_PORT = 606, /* VAR_PROXY_PROTOCOL_PORT */
+ VAR_STATISTICS_INHIBIT_ZERO = 607, /* VAR_STATISTICS_INHIBIT_ZERO */
+ VAR_HARDEN_UNKNOWN_ADDITIONAL = 608, /* VAR_HARDEN_UNKNOWN_ADDITIONAL */
+ VAR_DISABLE_EDNS_DO = 609, /* VAR_DISABLE_EDNS_DO */
+ VAR_CACHEDB_NO_STORE = 610, /* VAR_CACHEDB_NO_STORE */
+ VAR_LOG_DESTADDR = 611, /* VAR_LOG_DESTADDR */
+ VAR_CACHEDB_CHECK_WHEN_SERVE_EXPIRED = 612, /* VAR_CACHEDB_CHECK_WHEN_SERVE_EXPIRED */
+ VAR_COOKIE_SECRET_FILE = 613 /* VAR_COOKIE_SECRET_FILE */
};
typedef enum yytokentype yytoken_kind_t;
#endif
@@ -605,171 +607,173 @@ extern int yydebug;
#define VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES 444
#define VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES 445
#define VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES 446
-#define VAR_RESPONSE_IP_TAG 447
-#define VAR_RESPONSE_IP 448
-#define VAR_RESPONSE_IP_DATA 449
-#define VAR_HARDEN_ALGO_DOWNGRADE 450
-#define VAR_IP_TRANSPARENT 451
-#define VAR_IP_DSCP 452
-#define VAR_DISABLE_DNSSEC_LAME_CHECK 453
-#define VAR_IP_RATELIMIT 454
-#define VAR_IP_RATELIMIT_SLABS 455
-#define VAR_IP_RATELIMIT_SIZE 456
-#define VAR_RATELIMIT 457
-#define VAR_RATELIMIT_SLABS 458
-#define VAR_RATELIMIT_SIZE 459
-#define VAR_OUTBOUND_MSG_RETRY 460
-#define VAR_MAX_SENT_COUNT 461
-#define VAR_MAX_QUERY_RESTARTS 462
-#define VAR_RATELIMIT_FOR_DOMAIN 463
-#define VAR_RATELIMIT_BELOW_DOMAIN 464
-#define VAR_IP_RATELIMIT_FACTOR 465
-#define VAR_RATELIMIT_FACTOR 466
-#define VAR_IP_RATELIMIT_BACKOFF 467
-#define VAR_RATELIMIT_BACKOFF 468
-#define VAR_SEND_CLIENT_SUBNET 469
-#define VAR_CLIENT_SUBNET_ZONE 470
-#define VAR_CLIENT_SUBNET_ALWAYS_FORWARD 471
-#define VAR_CLIENT_SUBNET_OPCODE 472
-#define VAR_MAX_CLIENT_SUBNET_IPV4 473
-#define VAR_MAX_CLIENT_SUBNET_IPV6 474
-#define VAR_MIN_CLIENT_SUBNET_IPV4 475
-#define VAR_MIN_CLIENT_SUBNET_IPV6 476
-#define VAR_MAX_ECS_TREE_SIZE_IPV4 477
-#define VAR_MAX_ECS_TREE_SIZE_IPV6 478
-#define VAR_CAPS_WHITELIST 479
-#define VAR_CACHE_MAX_NEGATIVE_TTL 480
-#define VAR_PERMIT_SMALL_HOLDDOWN 481
-#define VAR_CACHE_MIN_NEGATIVE_TTL 482
-#define VAR_QNAME_MINIMISATION 483
-#define VAR_QNAME_MINIMISATION_STRICT 484
-#define VAR_IP_FREEBIND 485
-#define VAR_DEFINE_TAG 486
-#define VAR_LOCAL_ZONE_TAG 487
-#define VAR_ACCESS_CONTROL_TAG 488
-#define VAR_LOCAL_ZONE_OVERRIDE 489
-#define VAR_ACCESS_CONTROL_TAG_ACTION 490
-#define VAR_ACCESS_CONTROL_TAG_DATA 491
-#define VAR_VIEW 492
-#define VAR_ACCESS_CONTROL_VIEW 493
-#define VAR_VIEW_FIRST 494
-#define VAR_SERVE_EXPIRED 495
-#define VAR_SERVE_EXPIRED_TTL 496
-#define VAR_SERVE_EXPIRED_TTL_RESET 497
-#define VAR_SERVE_EXPIRED_REPLY_TTL 498
-#define VAR_SERVE_EXPIRED_CLIENT_TIMEOUT 499
-#define VAR_EDE_SERVE_EXPIRED 500
-#define VAR_SERVE_ORIGINAL_TTL 501
-#define VAR_FAKE_DSA 502
-#define VAR_FAKE_SHA1 503
-#define VAR_LOG_IDENTITY 504
-#define VAR_HIDE_TRUSTANCHOR 505
-#define VAR_HIDE_HTTP_USER_AGENT 506
-#define VAR_HTTP_USER_AGENT 507
-#define VAR_TRUST_ANCHOR_SIGNALING 508
-#define VAR_AGGRESSIVE_NSEC 509
-#define VAR_USE_SYSTEMD 510
-#define VAR_SHM_ENABLE 511
-#define VAR_SHM_KEY 512
-#define VAR_ROOT_KEY_SENTINEL 513
-#define VAR_DNSCRYPT 514
-#define VAR_DNSCRYPT_ENABLE 515
-#define VAR_DNSCRYPT_PORT 516
-#define VAR_DNSCRYPT_PROVIDER 517
-#define VAR_DNSCRYPT_SECRET_KEY 518
-#define VAR_DNSCRYPT_PROVIDER_CERT 519
-#define VAR_DNSCRYPT_PROVIDER_CERT_ROTATED 520
-#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE 521
-#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS 522
-#define VAR_DNSCRYPT_NONCE_CACHE_SIZE 523
-#define VAR_DNSCRYPT_NONCE_CACHE_SLABS 524
-#define VAR_PAD_RESPONSES 525
-#define VAR_PAD_RESPONSES_BLOCK_SIZE 526
-#define VAR_PAD_QUERIES 527
-#define VAR_PAD_QUERIES_BLOCK_SIZE 528
-#define VAR_IPSECMOD_ENABLED 529
-#define VAR_IPSECMOD_HOOK 530
-#define VAR_IPSECMOD_IGNORE_BOGUS 531
-#define VAR_IPSECMOD_MAX_TTL 532
-#define VAR_IPSECMOD_WHITELIST 533
-#define VAR_IPSECMOD_STRICT 534
-#define VAR_CACHEDB 535
-#define VAR_CACHEDB_BACKEND 536
-#define VAR_CACHEDB_SECRETSEED 537
-#define VAR_CACHEDB_REDISHOST 538
-#define VAR_CACHEDB_REDISPORT 539
-#define VAR_CACHEDB_REDISTIMEOUT 540
-#define VAR_CACHEDB_REDISEXPIRERECORDS 541
-#define VAR_CACHEDB_REDISPATH 542
-#define VAR_CACHEDB_REDISPASSWORD 543
-#define VAR_CACHEDB_REDISLOGICALDB 544
-#define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 545
-#define VAR_FOR_UPSTREAM 546
-#define VAR_AUTH_ZONE 547
-#define VAR_ZONEFILE 548
-#define VAR_MASTER 549
-#define VAR_URL 550
-#define VAR_FOR_DOWNSTREAM 551
-#define VAR_FALLBACK_ENABLED 552
-#define VAR_TLS_ADDITIONAL_PORT 553
-#define VAR_LOW_RTT 554
-#define VAR_LOW_RTT_PERMIL 555
-#define VAR_FAST_SERVER_PERMIL 556
-#define VAR_FAST_SERVER_NUM 557
-#define VAR_ALLOW_NOTIFY 558
-#define VAR_TLS_WIN_CERT 559
-#define VAR_TCP_CONNECTION_LIMIT 560
-#define VAR_ANSWER_COOKIE 561
-#define VAR_COOKIE_SECRET 562
-#define VAR_IP_RATELIMIT_COOKIE 563
-#define VAR_FORWARD_NO_CACHE 564
-#define VAR_STUB_NO_CACHE 565
-#define VAR_LOG_SERVFAIL 566
-#define VAR_DENY_ANY 567
-#define VAR_UNKNOWN_SERVER_TIME_LIMIT 568
-#define VAR_LOG_TAG_QUERYREPLY 569
-#define VAR_DISCARD_TIMEOUT 570
-#define VAR_WAIT_LIMIT 571
-#define VAR_WAIT_LIMIT_COOKIE 572
-#define VAR_WAIT_LIMIT_NETBLOCK 573
-#define VAR_WAIT_LIMIT_COOKIE_NETBLOCK 574
-#define VAR_STREAM_WAIT_SIZE 575
-#define VAR_TLS_CIPHERS 576
-#define VAR_TLS_CIPHERSUITES 577
-#define VAR_TLS_USE_SNI 578
-#define VAR_IPSET 579
-#define VAR_IPSET_NAME_V4 580
-#define VAR_IPSET_NAME_V6 581
-#define VAR_TLS_SESSION_TICKET_KEYS 582
-#define VAR_RPZ 583
-#define VAR_TAGS 584
-#define VAR_RPZ_ACTION_OVERRIDE 585
-#define VAR_RPZ_CNAME_OVERRIDE 586
-#define VAR_RPZ_LOG 587
-#define VAR_RPZ_LOG_NAME 588
-#define VAR_DYNLIB 589
-#define VAR_DYNLIB_FILE 590
-#define VAR_EDNS_CLIENT_STRING 591
-#define VAR_EDNS_CLIENT_STRING_OPCODE 592
-#define VAR_NSID 593
-#define VAR_ZONEMD_PERMISSIVE_MODE 594
-#define VAR_ZONEMD_CHECK 595
-#define VAR_ZONEMD_REJECT_ABSENCE 596
-#define VAR_RPZ_SIGNAL_NXDOMAIN_RA 597
-#define VAR_INTERFACE_AUTOMATIC_PORTS 598
-#define VAR_EDE 599
-#define VAR_INTERFACE_ACTION 600
-#define VAR_INTERFACE_VIEW 601
-#define VAR_INTERFACE_TAG 602
-#define VAR_INTERFACE_TAG_ACTION 603
-#define VAR_INTERFACE_TAG_DATA 604
-#define VAR_PROXY_PROTOCOL_PORT 605
-#define VAR_STATISTICS_INHIBIT_ZERO 606
-#define VAR_HARDEN_UNKNOWN_ADDITIONAL 607
-#define VAR_DISABLE_EDNS_DO 608
-#define VAR_CACHEDB_NO_STORE 609
-#define VAR_LOG_DESTADDR 610
-#define VAR_CACHEDB_CHECK_WHEN_SERVE_EXPIRED 611
+#define VAR_DNSTAP_SAMPLE_RATE 447
+#define VAR_RESPONSE_IP_TAG 448
+#define VAR_RESPONSE_IP 449
+#define VAR_RESPONSE_IP_DATA 450
+#define VAR_HARDEN_ALGO_DOWNGRADE 451
+#define VAR_IP_TRANSPARENT 452
+#define VAR_IP_DSCP 453
+#define VAR_DISABLE_DNSSEC_LAME_CHECK 454
+#define VAR_IP_RATELIMIT 455
+#define VAR_IP_RATELIMIT_SLABS 456
+#define VAR_IP_RATELIMIT_SIZE 457
+#define VAR_RATELIMIT 458
+#define VAR_RATELIMIT_SLABS 459
+#define VAR_RATELIMIT_SIZE 460
+#define VAR_OUTBOUND_MSG_RETRY 461
+#define VAR_MAX_SENT_COUNT 462
+#define VAR_MAX_QUERY_RESTARTS 463
+#define VAR_RATELIMIT_FOR_DOMAIN 464
+#define VAR_RATELIMIT_BELOW_DOMAIN 465
+#define VAR_IP_RATELIMIT_FACTOR 466
+#define VAR_RATELIMIT_FACTOR 467
+#define VAR_IP_RATELIMIT_BACKOFF 468
+#define VAR_RATELIMIT_BACKOFF 469
+#define VAR_SEND_CLIENT_SUBNET 470
+#define VAR_CLIENT_SUBNET_ZONE 471
+#define VAR_CLIENT_SUBNET_ALWAYS_FORWARD 472
+#define VAR_CLIENT_SUBNET_OPCODE 473
+#define VAR_MAX_CLIENT_SUBNET_IPV4 474
+#define VAR_MAX_CLIENT_SUBNET_IPV6 475
+#define VAR_MIN_CLIENT_SUBNET_IPV4 476
+#define VAR_MIN_CLIENT_SUBNET_IPV6 477
+#define VAR_MAX_ECS_TREE_SIZE_IPV4 478
+#define VAR_MAX_ECS_TREE_SIZE_IPV6 479
+#define VAR_CAPS_WHITELIST 480
+#define VAR_CACHE_MAX_NEGATIVE_TTL 481
+#define VAR_PERMIT_SMALL_HOLDDOWN 482
+#define VAR_CACHE_MIN_NEGATIVE_TTL 483
+#define VAR_QNAME_MINIMISATION 484
+#define VAR_QNAME_MINIMISATION_STRICT 485
+#define VAR_IP_FREEBIND 486
+#define VAR_DEFINE_TAG 487
+#define VAR_LOCAL_ZONE_TAG 488
+#define VAR_ACCESS_CONTROL_TAG 489
+#define VAR_LOCAL_ZONE_OVERRIDE 490
+#define VAR_ACCESS_CONTROL_TAG_ACTION 491
+#define VAR_ACCESS_CONTROL_TAG_DATA 492
+#define VAR_VIEW 493
+#define VAR_ACCESS_CONTROL_VIEW 494
+#define VAR_VIEW_FIRST 495
+#define VAR_SERVE_EXPIRED 496
+#define VAR_SERVE_EXPIRED_TTL 497
+#define VAR_SERVE_EXPIRED_TTL_RESET 498
+#define VAR_SERVE_EXPIRED_REPLY_TTL 499
+#define VAR_SERVE_EXPIRED_CLIENT_TIMEOUT 500
+#define VAR_EDE_SERVE_EXPIRED 501
+#define VAR_SERVE_ORIGINAL_TTL 502
+#define VAR_FAKE_DSA 503
+#define VAR_FAKE_SHA1 504
+#define VAR_LOG_IDENTITY 505
+#define VAR_HIDE_TRUSTANCHOR 506
+#define VAR_HIDE_HTTP_USER_AGENT 507
+#define VAR_HTTP_USER_AGENT 508
+#define VAR_TRUST_ANCHOR_SIGNALING 509
+#define VAR_AGGRESSIVE_NSEC 510
+#define VAR_USE_SYSTEMD 511
+#define VAR_SHM_ENABLE 512
+#define VAR_SHM_KEY 513
+#define VAR_ROOT_KEY_SENTINEL 514
+#define VAR_DNSCRYPT 515
+#define VAR_DNSCRYPT_ENABLE 516
+#define VAR_DNSCRYPT_PORT 517
+#define VAR_DNSCRYPT_PROVIDER 518
+#define VAR_DNSCRYPT_SECRET_KEY 519
+#define VAR_DNSCRYPT_PROVIDER_CERT 520
+#define VAR_DNSCRYPT_PROVIDER_CERT_ROTATED 521
+#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE 522
+#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS 523
+#define VAR_DNSCRYPT_NONCE_CACHE_SIZE 524
+#define VAR_DNSCRYPT_NONCE_CACHE_SLABS 525
+#define VAR_PAD_RESPONSES 526
+#define VAR_PAD_RESPONSES_BLOCK_SIZE 527
+#define VAR_PAD_QUERIES 528
+#define VAR_PAD_QUERIES_BLOCK_SIZE 529
+#define VAR_IPSECMOD_ENABLED 530
+#define VAR_IPSECMOD_HOOK 531
+#define VAR_IPSECMOD_IGNORE_BOGUS 532
+#define VAR_IPSECMOD_MAX_TTL 533
+#define VAR_IPSECMOD_WHITELIST 534
+#define VAR_IPSECMOD_STRICT 535
+#define VAR_CACHEDB 536
+#define VAR_CACHEDB_BACKEND 537
+#define VAR_CACHEDB_SECRETSEED 538
+#define VAR_CACHEDB_REDISHOST 539
+#define VAR_CACHEDB_REDISPORT 540
+#define VAR_CACHEDB_REDISTIMEOUT 541
+#define VAR_CACHEDB_REDISEXPIRERECORDS 542
+#define VAR_CACHEDB_REDISPATH 543
+#define VAR_CACHEDB_REDISPASSWORD 544
+#define VAR_CACHEDB_REDISLOGICALDB 545
+#define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 546
+#define VAR_FOR_UPSTREAM 547
+#define VAR_AUTH_ZONE 548
+#define VAR_ZONEFILE 549
+#define VAR_MASTER 550
+#define VAR_URL 551
+#define VAR_FOR_DOWNSTREAM 552
+#define VAR_FALLBACK_ENABLED 553
+#define VAR_TLS_ADDITIONAL_PORT 554
+#define VAR_LOW_RTT 555
+#define VAR_LOW_RTT_PERMIL 556
+#define VAR_FAST_SERVER_PERMIL 557
+#define VAR_FAST_SERVER_NUM 558
+#define VAR_ALLOW_NOTIFY 559
+#define VAR_TLS_WIN_CERT 560
+#define VAR_TCP_CONNECTION_LIMIT 561
+#define VAR_ANSWER_COOKIE 562
+#define VAR_COOKIE_SECRET 563
+#define VAR_IP_RATELIMIT_COOKIE 564
+#define VAR_FORWARD_NO_CACHE 565
+#define VAR_STUB_NO_CACHE 566
+#define VAR_LOG_SERVFAIL 567
+#define VAR_DENY_ANY 568
+#define VAR_UNKNOWN_SERVER_TIME_LIMIT 569
+#define VAR_LOG_TAG_QUERYREPLY 570
+#define VAR_DISCARD_TIMEOUT 571
+#define VAR_WAIT_LIMIT 572
+#define VAR_WAIT_LIMIT_COOKIE 573
+#define VAR_WAIT_LIMIT_NETBLOCK 574
+#define VAR_WAIT_LIMIT_COOKIE_NETBLOCK 575
+#define VAR_STREAM_WAIT_SIZE 576
+#define VAR_TLS_CIPHERS 577
+#define VAR_TLS_CIPHERSUITES 578
+#define VAR_TLS_USE_SNI 579
+#define VAR_IPSET 580
+#define VAR_IPSET_NAME_V4 581
+#define VAR_IPSET_NAME_V6 582
+#define VAR_TLS_SESSION_TICKET_KEYS 583
+#define VAR_RPZ 584
+#define VAR_TAGS 585
+#define VAR_RPZ_ACTION_OVERRIDE 586
+#define VAR_RPZ_CNAME_OVERRIDE 587
+#define VAR_RPZ_LOG 588
+#define VAR_RPZ_LOG_NAME 589
+#define VAR_DYNLIB 590
+#define VAR_DYNLIB_FILE 591
+#define VAR_EDNS_CLIENT_STRING 592
+#define VAR_EDNS_CLIENT_STRING_OPCODE 593
+#define VAR_NSID 594
+#define VAR_ZONEMD_PERMISSIVE_MODE 595
+#define VAR_ZONEMD_CHECK 596
+#define VAR_ZONEMD_REJECT_ABSENCE 597
+#define VAR_RPZ_SIGNAL_NXDOMAIN_RA 598
+#define VAR_INTERFACE_AUTOMATIC_PORTS 599
+#define VAR_EDE 600
+#define VAR_INTERFACE_ACTION 601
+#define VAR_INTERFACE_VIEW 602
+#define VAR_INTERFACE_TAG 603
+#define VAR_INTERFACE_TAG_ACTION 604
+#define VAR_INTERFACE_TAG_DATA 605
+#define VAR_PROXY_PROTOCOL_PORT 606
+#define VAR_STATISTICS_INHIBIT_ZERO 607
+#define VAR_HARDEN_UNKNOWN_ADDITIONAL 608
+#define VAR_DISABLE_EDNS_DO 609
+#define VAR_CACHEDB_NO_STORE 610
+#define VAR_LOG_DESTADDR 611
+#define VAR_CACHEDB_CHECK_WHEN_SERVE_EXPIRED 612
+#define VAR_COOKIE_SECRET_FILE 613
/* Value type. */
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
@@ -779,7 +783,7 @@ union YYSTYPE
char* str;
-#line 783 "util/configparser.h"
+#line 787 "util/configparser.h"
};
typedef union YYSTYPE YYSTYPE;
diff --git a/util/configparser.y b/util/configparser.y
index 0feeb61b168b..b650b810918b 100644
--- a/util/configparser.y
+++ b/util/configparser.y
@@ -137,6 +137,7 @@ extern struct config_parser_state* cfg_parser;
%token VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES
%token VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES
%token VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES
+%token VAR_DNSTAP_SAMPLE_RATE
%token VAR_RESPONSE_IP_TAG VAR_RESPONSE_IP VAR_RESPONSE_IP_DATA
%token VAR_HARDEN_ALGO_DOWNGRADE VAR_IP_TRANSPARENT
%token VAR_IP_DSCP
@@ -204,6 +205,7 @@ extern struct config_parser_state* cfg_parser;
%token VAR_PROXY_PROTOCOL_PORT VAR_STATISTICS_INHIBIT_ZERO
%token VAR_HARDEN_UNKNOWN_ADDITIONAL VAR_DISABLE_EDNS_DO VAR_CACHEDB_NO_STORE
%token VAR_LOG_DESTADDR VAR_CACHEDB_CHECK_WHEN_SERVE_EXPIRED
+%token VAR_COOKIE_SECRET_FILE
%%
toplevelvars: /* empty */ | toplevelvars toplevelvar ;
@@ -341,7 +343,7 @@ content_server: server_num_threads | server_verbosity | server_port |
server_interface_automatic_ports | server_ede |
server_proxy_protocol_port | server_statistics_inhibit_zero |
server_harden_unknown_additional | server_disable_edns_do |
- server_log_destaddr
+ server_log_destaddr | server_cookie_secret_file
;
stubstart: VAR_STUB_ZONE
{
@@ -357,8 +359,14 @@ stubstart: VAR_STUB_ZONE
}
}
;
-contents_stub: contents_stub content_stub
- | ;
+contents_stub: content_stub contents_stub
+ |
+ {
+ /* stub end */
+ if(cfg_parser->cfg->stubs &&
+ !cfg_parser->cfg->stubs->name)
+ yyerror("stub-zone without name");
+ };
content_stub: stub_name | stub_host | stub_addr | stub_prime | stub_first |
stub_no_cache | stub_ssl_upstream | stub_tcp_upstream
;
@@ -376,8 +384,14 @@ forwardstart: VAR_FORWARD_ZONE
}
}
;
-contents_forward: contents_forward content_forward
- | ;
+contents_forward: content_forward contents_forward
+ |
+ {
+ /* forward end */
+ if(cfg_parser->cfg->forwards &&
+ !cfg_parser->cfg->forwards->name)
+ yyerror("forward-zone without name");
+ };
content_forward: forward_name | forward_host | forward_addr | forward_first |
forward_no_cache | forward_ssl_upstream | forward_tcp_upstream
;
@@ -389,16 +403,20 @@ viewstart: VAR_VIEW
s = (struct config_view*)calloc(1, sizeof(struct config_view));
if(s) {
s->next = cfg_parser->cfg->views;
- if(s->next && !s->next->name)
- yyerror("view without name");
cfg_parser->cfg->views = s;
} else {
yyerror("out of memory");
}
}
;
-contents_view: contents_view content_view
- | ;
+contents_view: content_view contents_view
+ |
+ {
+ /* view end */
+ if(cfg_parser->cfg->views &&
+ !cfg_parser->cfg->views->name)
+ yyerror("view without name");
+ };
content_view: view_name | view_local_zone | view_local_data | view_first |
view_response_ip | view_response_ip_data | view_local_data_ptr
;
@@ -3437,7 +3455,8 @@ content_dt: dt_dnstap_enable | dt_dnstap_socket_path | dt_dnstap_bidirectional |
dt_dnstap_log_client_query_messages |
dt_dnstap_log_client_response_messages |
dt_dnstap_log_forwarder_query_messages |
- dt_dnstap_log_forwarder_response_messages
+ dt_dnstap_log_forwarder_response_messages |
+ dt_dnstap_sample_rate
;
dt_dnstap_enable: VAR_DNSTAP_ENABLE STRING_ARG
{
@@ -3601,6 +3620,17 @@ dt_dnstap_log_forwarder_response_messages: VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MES
free($2);
}
;
+dt_dnstap_sample_rate: VAR_DNSTAP_SAMPLE_RATE STRING_ARG
+ {
+ OUTYY(("P(dt_dnstap_sample_rate:%s)\n", $2));
+ if(atoi($2) == 0 && strcmp($2, "0") != 0)
+ yyerror("number expected");
+ else if(atoi($2) < 0)
+ yyerror("dnstap sample rate too small");
+ else cfg_parser->cfg->dnstap_sample_rate = atoi($2);
+ free($2);
+ }
+ ;
pythonstart: VAR_PYTHON
{
OUTYY(("\nP(python:)\n"));
@@ -3969,45 +3999,52 @@ server_cookie_secret: VAR_COOKIE_SECRET STRING_ARG
free($2);
}
;
- ipsetstart: VAR_IPSET
- {
- OUTYY(("\nP(ipset:)\n"));
- cfg_parser->started_toplevel = 1;
- }
- ;
- contents_ipset: contents_ipset content_ipset
- | ;
- content_ipset: ipset_name_v4 | ipset_name_v6
- ;
- ipset_name_v4: VAR_IPSET_NAME_V4 STRING_ARG
- {
- #ifdef USE_IPSET
- OUTYY(("P(name-v4:%s)\n", $2));
- if(cfg_parser->cfg->ipset_name_v4)
- yyerror("ipset name v4 override, there must be one "
- "name for ip v4");
- free(cfg_parser->cfg->ipset_name_v4);
- cfg_parser->cfg->ipset_name_v4 = $2;
- #else
- OUTYY(("P(Compiled without ipset, ignoring)\n"));
- free($2);
- #endif
- }
+server_cookie_secret_file: VAR_COOKIE_SECRET_FILE STRING_ARG
+ {
+ OUTYY(("P(cookie_secret_file:%s)\n", $2));
+ free(cfg_parser->cfg->cookie_secret_file);
+ cfg_parser->cfg->cookie_secret_file = $2;
+ }
;
- ipset_name_v6: VAR_IPSET_NAME_V6 STRING_ARG
- {
- #ifdef USE_IPSET
- OUTYY(("P(name-v6:%s)\n", $2));
- if(cfg_parser->cfg->ipset_name_v6)
- yyerror("ipset name v6 override, there must be one "
- "name for ip v6");
- free(cfg_parser->cfg->ipset_name_v6);
- cfg_parser->cfg->ipset_name_v6 = $2;
- #else
- OUTYY(("P(Compiled without ipset, ignoring)\n"));
- free($2);
- #endif
- }
+ipsetstart: VAR_IPSET
+ {
+ OUTYY(("\nP(ipset:)\n"));
+ cfg_parser->started_toplevel = 1;
+ }
+ ;
+contents_ipset: contents_ipset content_ipset
+ | ;
+content_ipset: ipset_name_v4 | ipset_name_v6
+ ;
+ipset_name_v4: VAR_IPSET_NAME_V4 STRING_ARG
+ {
+ #ifdef USE_IPSET
+ OUTYY(("P(name-v4:%s)\n", $2));
+ if(cfg_parser->cfg->ipset_name_v4)
+ yyerror("ipset name v4 override, there must be one "
+ "name for ip v4");
+ free(cfg_parser->cfg->ipset_name_v4);
+ cfg_parser->cfg->ipset_name_v4 = $2;
+ #else
+ OUTYY(("P(Compiled without ipset, ignoring)\n"));
+ free($2);
+ #endif
+ }
+ ;
+ipset_name_v6: VAR_IPSET_NAME_V6 STRING_ARG
+ {
+ #ifdef USE_IPSET
+ OUTYY(("P(name-v6:%s)\n", $2));
+ if(cfg_parser->cfg->ipset_name_v6)
+ yyerror("ipset name v6 override, there must be one "
+ "name for ip v6");
+ free(cfg_parser->cfg->ipset_name_v6);
+ cfg_parser->cfg->ipset_name_v6 = $2;
+ #else
+ OUTYY(("P(Compiled without ipset, ignoring)\n"));
+ free($2);
+ #endif
+ }
;
%%
diff --git a/util/data/dname.h b/util/data/dname.h
index cb0f6735d924..15e28bd973bb 100644
--- a/util/data/dname.h
+++ b/util/data/dname.h
@@ -225,7 +225,7 @@ int dname_strict_subdomain(uint8_t* d1, int labs1, uint8_t* d2, int labs2);
int dname_strict_subdomain_c(uint8_t* d1, uint8_t* d2);
/**
- * Counts labels. Tests is d1 is a subdomain of d2.
+ * Counts labels. Tests if d1 is a subdomain of d2.
* @param d1: domain name, uncompressed wireformat
* @param d2: domain name, uncompressed wireformat
* @return true if d1 is a subdomain of d2.
diff --git a/util/data/msgparse.c b/util/data/msgparse.c
index d06b7bb25e6e..6963d850171e 100644
--- a/util/data/msgparse.c
+++ b/util/data/msgparse.c
@@ -947,7 +947,8 @@ parse_packet(sldns_buffer* pkt, struct msg_parse* msg, struct regional* region)
static int
parse_edns_options_from_query(uint8_t* rdata_ptr, size_t rdata_len,
struct edns_data* edns, struct config_file* cfg, struct comm_point* c,
- struct comm_reply* repinfo, uint32_t now, struct regional* region)
+ struct comm_reply* repinfo, uint32_t now, struct regional* region,
+ struct cookie_secrets* cookie_secrets)
{
/* To respond with a Keepalive option, the client connection must have
* received one message with a TCP Keepalive EDNS option, and that
@@ -1070,13 +1071,24 @@ parse_edns_options_from_query(uint8_t* rdata_ptr, size_t rdata_len,
&((struct sockaddr_in6*)&repinfo->remote_addr)->sin6_addr, 16);
}
- cookie_val_status = edns_cookie_server_validate(
- rdata_ptr, opt_len, cfg->cookie_secret,
- cfg->cookie_secret_len, cookie_is_v4,
- server_cookie, now);
+ if(cfg->cookie_secret_file &&
+ cfg->cookie_secret_file[0]) {
+ /* Loop over the active and staging cookies. */
+ cookie_val_status =
+ cookie_secrets_server_validate(
+ rdata_ptr, opt_len, cookie_secrets,
+ cookie_is_v4, server_cookie, now);
+ } else {
+ /* Use the cookie option value to validate. */
+ cookie_val_status = edns_cookie_server_validate(
+ rdata_ptr, opt_len, cfg->cookie_secret,
+ cfg->cookie_secret_len, cookie_is_v4,
+ server_cookie, now);
+ }
+ if(cookie_val_status == COOKIE_STATUS_VALID_RENEW)
+ edns->cookie_valid = 1;
switch(cookie_val_status) {
case COOKIE_STATUS_VALID:
- case COOKIE_STATUS_VALID_RENEW:
edns->cookie_valid = 1;
/* Reuse cookie */
if(!edns_opt_list_append(
@@ -1091,13 +1103,30 @@ parse_edns_options_from_query(uint8_t* rdata_ptr, size_t rdata_len,
break;
case COOKIE_STATUS_CLIENT_ONLY:
edns->cookie_client = 1;
+ ATTR_FALLTHROUGH
/* fallthrough */
+ case COOKIE_STATUS_VALID_RENEW:
case COOKIE_STATUS_FUTURE:
case COOKIE_STATUS_EXPIRED:
case COOKIE_STATUS_INVALID:
default:
- edns_cookie_server_write(server_cookie,
- cfg->cookie_secret, cookie_is_v4, now);
+ if(cfg->cookie_secret_file &&
+ cfg->cookie_secret_file[0]) {
+ if(!cookie_secrets)
+ break;
+ lock_basic_lock(&cookie_secrets->lock);
+ if(cookie_secrets->cookie_count < 1) {
+ lock_basic_unlock(&cookie_secrets->lock);
+ break;
+ }
+ edns_cookie_server_write(server_cookie,
+ cookie_secrets->cookie_secrets[0].cookie_secret,
+ cookie_is_v4, now);
+ lock_basic_unlock(&cookie_secrets->lock);
+ } else {
+ edns_cookie_server_write(server_cookie,
+ cfg->cookie_secret, cookie_is_v4, now);
+ }
if(!edns_opt_list_append(&edns->opt_list_out,
LDNS_EDNS_COOKIE, 24, server_cookie,
region)) {
@@ -1239,7 +1268,8 @@ skip_pkt_rrs(sldns_buffer* pkt, int num)
int
parse_edns_from_query_pkt(sldns_buffer* pkt, struct edns_data* edns,
struct config_file* cfg, struct comm_point* c,
- struct comm_reply* repinfo, time_t now, struct regional* region)
+ struct comm_reply* repinfo, time_t now, struct regional* region,
+ struct cookie_secrets* cookie_secrets)
{
size_t rdata_len;
uint8_t* rdata_ptr;
@@ -1285,7 +1315,7 @@ parse_edns_from_query_pkt(sldns_buffer* pkt, struct edns_data* edns,
rdata_ptr = sldns_buffer_current(pkt);
/* ignore rrsigs */
return parse_edns_options_from_query(rdata_ptr, rdata_len, edns, cfg,
- c, repinfo, now, region);
+ c, repinfo, now, region, cookie_secrets);
}
void
diff --git a/util/data/msgparse.h b/util/data/msgparse.h
index 656e0d285dcd..aebd48efac34 100644
--- a/util/data/msgparse.h
+++ b/util/data/msgparse.h
@@ -73,6 +73,7 @@ struct edns_option;
struct config_file;
struct comm_point;
struct comm_reply;
+struct cookie_secrets;
/** number of buckets in parse rrset hash table. Must be power of 2. */
#define PARSE_TABLE_SIZE 32
@@ -322,12 +323,14 @@ int skip_pkt_rrs(struct sldns_buffer* pkt, int num);
* @param repinfo: commreply to determine the client address
* @param now: current time
* @param region: region to alloc results in (edns option contents)
+ * @param cookie_secrets: the cookie secrets for EDNS COOKIE validation.
* @return: 0 on success, or an RCODE on error.
* RCODE formerr if OPT is badly formatted and so on.
*/
int parse_edns_from_query_pkt(struct sldns_buffer* pkt, struct edns_data* edns,
struct config_file* cfg, struct comm_point* c,
- struct comm_reply* repinfo, time_t now, struct regional* region);
+ struct comm_reply* repinfo, time_t now, struct regional* region,
+ struct cookie_secrets* cookie_secrets);
/**
* Calculate hash value for rrset in packet.
diff --git a/util/edns.c b/util/edns.c
index 2b4047f0b600..ee95a6912209 100644
--- a/util/edns.c
+++ b/util/edns.c
@@ -187,3 +187,189 @@ edns_cookie_server_validate(const uint8_t* cookie, size_t cookie_len,
return COOKIE_STATUS_VALID_RENEW;
return COOKIE_STATUS_VALID;
}
+
+struct cookie_secrets*
+cookie_secrets_create(void)
+{
+ struct cookie_secrets* cookie_secrets = calloc(1,
+ sizeof(*cookie_secrets));
+ if(!cookie_secrets)
+ return NULL;
+ lock_basic_init(&cookie_secrets->lock);
+ lock_protect(&cookie_secrets->lock, &cookie_secrets->cookie_count,
+ sizeof(cookie_secrets->cookie_count));
+ lock_protect(&cookie_secrets->lock, cookie_secrets->cookie_secrets,
+ sizeof(cookie_secret_type)*UNBOUND_COOKIE_HISTORY_SIZE);
+ return cookie_secrets;
+}
+
+void
+cookie_secrets_delete(struct cookie_secrets* cookie_secrets)
+{
+ if(!cookie_secrets)
+ return;
+ lock_basic_destroy(&cookie_secrets->lock);
+ explicit_bzero(cookie_secrets->cookie_secrets,
+ sizeof(cookie_secret_type)*UNBOUND_COOKIE_HISTORY_SIZE);
+ free(cookie_secrets);
+}
+
+/** Read the cookie secret file */
+static int
+cookie_secret_file_read(struct cookie_secrets* cookie_secrets,
+ char* cookie_secret_file)
+{
+ char secret[UNBOUND_COOKIE_SECRET_SIZE * 2 + 2/*'\n' and '\0'*/];
+ FILE* f;
+ int corrupt = 0;
+ size_t count;
+
+ log_assert(cookie_secret_file != NULL);
+ cookie_secrets->cookie_count = 0;
+ f = fopen(cookie_secret_file, "r");
+ /* a non-existing cookie file is not an error */
+ if( f == NULL ) {
+ if(errno != EPERM) {
+ log_err("Could not read cookie-secret-file '%s': %s",
+ cookie_secret_file, strerror(errno));
+ return 0;
+ }
+ return 1;
+ }
+ /* cookie secret file exists and is readable */
+ for( count = 0; count < UNBOUND_COOKIE_HISTORY_SIZE; count++ ) {
+ size_t secret_len = 0;
+ ssize_t decoded_len = 0;
+ if( fgets(secret, sizeof(secret), f) == NULL ) { break; }
+ secret_len = strlen(secret);
+ if( secret_len == 0 ) { break; }
+ log_assert( secret_len <= sizeof(secret) );
+ secret_len = secret[secret_len - 1] == '\n' ? secret_len - 1 : secret_len;
+ if( secret_len != UNBOUND_COOKIE_SECRET_SIZE * 2 ) { corrupt++; break; }
+ /* needed for `hex_pton`; stripping potential `\n` */
+ secret[secret_len] = '\0';
+ decoded_len = hex_pton(secret, cookie_secrets->cookie_secrets[count].cookie_secret,
+ UNBOUND_COOKIE_SECRET_SIZE);
+ if( decoded_len != UNBOUND_COOKIE_SECRET_SIZE ) { corrupt++; break; }
+ cookie_secrets->cookie_count++;
+ }
+ fclose(f);
+ return corrupt == 0;
+}
+
+int
+cookie_secrets_apply_cfg(struct cookie_secrets* cookie_secrets,
+ char* cookie_secret_file)
+{
+ if(!cookie_secrets) {
+ if(!cookie_secret_file || !cookie_secret_file[0])
+ return 1; /* There is nothing to read anyway */
+ log_err("Could not read cookie secrets, no structure alloced");
+ return 0;
+ }
+ if(!cookie_secret_file_read(cookie_secrets, cookie_secret_file))
+ return 0;
+ return 1;
+}
+
+enum edns_cookie_val_status
+cookie_secrets_server_validate(const uint8_t* cookie, size_t cookie_len,
+ struct cookie_secrets* cookie_secrets, int v4,
+ const uint8_t* hash_input, uint32_t now)
+{
+ size_t i;
+ enum edns_cookie_val_status cookie_val_status,
+ last = COOKIE_STATUS_INVALID;
+ if(!cookie_secrets)
+ return COOKIE_STATUS_INVALID; /* There are no cookie secrets.*/
+ lock_basic_lock(&cookie_secrets->lock);
+ if(cookie_secrets->cookie_count == 0) {
+ lock_basic_unlock(&cookie_secrets->lock);
+ return COOKIE_STATUS_INVALID; /* There are no cookie secrets.*/
+ }
+ for(i=0; i<cookie_secrets->cookie_count; i++) {
+ cookie_val_status = edns_cookie_server_validate(cookie,
+ cookie_len,
+ cookie_secrets->cookie_secrets[i].cookie_secret,
+ UNBOUND_COOKIE_SECRET_SIZE, v4, hash_input, now);
+ if(cookie_val_status == COOKIE_STATUS_VALID ||
+ cookie_val_status == COOKIE_STATUS_VALID_RENEW) {
+ lock_basic_unlock(&cookie_secrets->lock);
+ /* For staging cookies, write a fresh cookie. */
+ if(i != 0)
+ return COOKIE_STATUS_VALID_RENEW;
+ return cookie_val_status;
+ }
+ if(last == COOKIE_STATUS_INVALID)
+ last = cookie_val_status; /* Store more interesting
+ failure to return. */
+ }
+ lock_basic_unlock(&cookie_secrets->lock);
+ return last;
+}
+
+void add_cookie_secret(struct cookie_secrets* cookie_secrets,
+ uint8_t* secret, size_t secret_len)
+{
+ log_assert(secret_len == UNBOUND_COOKIE_SECRET_SIZE);
+ (void)secret_len;
+ if(!cookie_secrets)
+ return;
+
+ /* New cookie secret becomes the staging secret (position 1)
+ * unless there is no active cookie yet, then it becomes the active
+ * secret. If the UNBOUND_COOKIE_HISTORY_SIZE > 2 then all staging cookies
+ * are moved one position down.
+ */
+ if(cookie_secrets->cookie_count == 0) {
+ memcpy( cookie_secrets->cookie_secrets->cookie_secret
+ , secret, UNBOUND_COOKIE_SECRET_SIZE);
+ cookie_secrets->cookie_count = 1;
+ explicit_bzero(secret, UNBOUND_COOKIE_SECRET_SIZE);
+ return;
+ }
+#if UNBOUND_COOKIE_HISTORY_SIZE > 2
+ memmove( &cookie_secrets->cookie_secrets[2], &cookie_secrets->cookie_secrets[1]
+ , sizeof(struct cookie_secret) * (UNBOUND_COOKIE_HISTORY_SIZE - 2));
+#endif
+ memcpy( cookie_secrets->cookie_secrets[1].cookie_secret
+ , secret, UNBOUND_COOKIE_SECRET_SIZE);
+ cookie_secrets->cookie_count = cookie_secrets->cookie_count < UNBOUND_COOKIE_HISTORY_SIZE
+ ? cookie_secrets->cookie_count + 1 : UNBOUND_COOKIE_HISTORY_SIZE;
+ explicit_bzero(secret, UNBOUND_COOKIE_SECRET_SIZE);
+}
+
+void activate_cookie_secret(struct cookie_secrets* cookie_secrets)
+{
+ uint8_t active_secret[UNBOUND_COOKIE_SECRET_SIZE];
+ if(!cookie_secrets)
+ return;
+ /* The staging secret becomes the active secret.
+ * The active secret becomes a staging secret.
+ * If the UNBOUND_COOKIE_HISTORY_SIZE > 2 then all staging secrets are moved
+ * one position up and the previously active secret becomes the last
+ * staging secret.
+ */
+ if(cookie_secrets->cookie_count < 2)
+ return;
+ memcpy( active_secret, cookie_secrets->cookie_secrets[0].cookie_secret
+ , UNBOUND_COOKIE_SECRET_SIZE);
+ memmove( &cookie_secrets->cookie_secrets[0], &cookie_secrets->cookie_secrets[1]
+ , sizeof(struct cookie_secret) * (UNBOUND_COOKIE_HISTORY_SIZE - 1));
+ memcpy( cookie_secrets->cookie_secrets[cookie_secrets->cookie_count - 1].cookie_secret
+ , active_secret, UNBOUND_COOKIE_SECRET_SIZE);
+ explicit_bzero(active_secret, UNBOUND_COOKIE_SECRET_SIZE);
+}
+
+void drop_cookie_secret(struct cookie_secrets* cookie_secrets)
+{
+ if(!cookie_secrets)
+ return;
+ /* Drops a staging cookie secret. If there are more than one, it will
+ * drop the last staging secret. */
+ if(cookie_secrets->cookie_count < 2)
+ return;
+ explicit_bzero( cookie_secrets->cookie_secrets[cookie_secrets->cookie_count - 1].cookie_secret
+ , UNBOUND_COOKIE_SECRET_SIZE);
+ cookie_secrets->cookie_count -= 1;
+}
diff --git a/util/edns.h b/util/edns.h
index 5da0ecb290a7..47ccb1ad2cd3 100644
--- a/util/edns.h
+++ b/util/edns.h
@@ -43,6 +43,7 @@
#define UTIL_EDNS_H
#include "util/storage/dnstree.h"
+#include "util/locks.h"
struct edns_data;
struct config_file;
@@ -75,6 +76,31 @@ struct edns_string_addr {
size_t string_len;
};
+#define UNBOUND_COOKIE_HISTORY_SIZE 2
+#define UNBOUND_COOKIE_SECRET_SIZE 16
+
+typedef struct cookie_secret cookie_secret_type;
+struct cookie_secret {
+ /** cookie secret */
+ uint8_t cookie_secret[UNBOUND_COOKIE_SECRET_SIZE];
+};
+
+/**
+ * The cookie secrets from the cookie-secret-file.
+ */
+struct cookie_secrets {
+ /** lock on the structure, in case there are modifications
+ * from remote control, this avoids race conditions. */
+ lock_basic_type lock;
+
+ /** how many cookies are there in the cookies array */
+ size_t cookie_count;
+
+ /* keep track of the last `UNBOUND_COOKIE_HISTORY_SIZE`
+ * cookies as per rfc requirement .*/
+ cookie_secret_type cookie_secrets[UNBOUND_COOKIE_HISTORY_SIZE];
+};
+
enum edns_cookie_val_status {
COOKIE_STATUS_CLIENT_ONLY = -3,
COOKIE_STATUS_FUTURE = -2,
@@ -165,4 +191,63 @@ enum edns_cookie_val_status edns_cookie_server_validate(const uint8_t* cookie,
size_t cookie_len, const uint8_t* secret, size_t secret_len, int v4,
const uint8_t* hash_input, uint32_t now);
+/**
+ * Create the cookie secrets structure.
+ * @return the structure or NULL on failure.
+ */
+struct cookie_secrets* cookie_secrets_create(void);
+
+/**
+ * Delete the cookie secrets.
+ * @param cookie_secrets: the cookie secrets.
+ */
+void cookie_secrets_delete(struct cookie_secrets* cookie_secrets);
+
+/**
+ * Apply configuration to cookie secrets, read them from file.
+ * @param cookie_secrets: the cookie secrets structure.
+ * @param cookie_secret_file: the file name, it is read.
+ * @return false on failure.
+ */
+int cookie_secrets_apply_cfg(struct cookie_secrets* cookie_secrets,
+ char* cookie_secret_file);
+
+/**
+ * Validate the cookie secrets, try all of them.
+ * @param cookie: pointer to the cookie data.
+ * @param cookie_len: the length of the cookie data.
+ * @param cookie_secrets: struct of cookie secrets.
+ * @param v4: if the client IP is v4 or v6.
+ * @param hash_input: pointer to the hash input for validation. It needs to be:
+ * Client Cookie | Version | Reserved | Timestamp | Client-IP
+ * @param now: the current time.
+ * return edns_cookie_val_status with the cookie validation status i.e.,
+ * <=0 for invalid, else valid.
+ */
+enum edns_cookie_val_status cookie_secrets_server_validate(
+ const uint8_t* cookie, size_t cookie_len,
+ struct cookie_secrets* cookie_secrets, int v4,
+ const uint8_t* hash_input, uint32_t now);
+
+/**
+ * Add a cookie secret. If there are no secrets yet, the secret will become
+ * the active secret. Otherwise it will become the staging secret.
+ * Active secrets are used to both verify and create new DNS Cookies.
+ * Staging secrets are only used to verify DNS Cookies. Caller has to lock.
+ */
+void add_cookie_secret(struct cookie_secrets* cookie_secrets, uint8_t* secret,
+ size_t secret_len);
+
+/**
+ * Makes the staging cookie secret active and the active secret staging.
+ * Caller has to lock.
+ */
+void activate_cookie_secret(struct cookie_secrets* cookie_secrets);
+
+/**
+ * Drop a cookie secret. Drops the staging secret. An active secret will not
+ * be dropped. Caller has to lock.
+ */
+void drop_cookie_secret(struct cookie_secrets* cookie_secrets);
+
#endif
diff --git a/util/fptr_wlist.c b/util/fptr_wlist.c
index a792a3429549..705dc1bbe3c4 100644
--- a/util/fptr_wlist.c
+++ b/util/fptr_wlist.c
@@ -392,7 +392,7 @@ fptr_whitelist_modenv_detect_cycle(int (*fptr)(
return 0;
}
-int
+int
fptr_whitelist_mod_init(int (*fptr)(struct module_env* env, int id))
{
if(fptr == &iter_init) return 1;
@@ -420,7 +420,7 @@ fptr_whitelist_mod_init(int (*fptr)(struct module_env* env, int id))
return 0;
}
-int
+int
fptr_whitelist_mod_deinit(void (*fptr)(struct module_env* env, int id))
{
if(fptr == &iter_deinit) return 1;
@@ -448,6 +448,28 @@ fptr_whitelist_mod_deinit(void (*fptr)(struct module_env* env, int id))
return 0;
}
+int
+fptr_whitelist_mod_startup(int (*fptr)(struct module_env* env, int id))
+{
+#ifdef USE_IPSET
+ if(fptr == &ipset_startup) return 1;
+#else
+ (void)fptr;
+#endif
+ return 0;
+}
+
+int
+fptr_whitelist_mod_destartup(void (*fptr)(struct module_env* env, int id))
+{
+#ifdef USE_IPSET
+ if(fptr == &ipset_destartup) return 1;
+#else
+ (void)fptr;
+#endif
+ return 0;
+}
+
int
fptr_whitelist_mod_operate(void (*fptr)(struct module_qstate* qstate,
enum module_ev event, int id, struct outbound_entry* outbound))
diff --git a/util/fptr_wlist.h b/util/fptr_wlist.h
index a0d9867554b5..fb2475cce109 100644
--- a/util/fptr_wlist.h
+++ b/util/fptr_wlist.h
@@ -279,6 +279,22 @@ int fptr_whitelist_mod_init(int (*fptr)(struct module_env* env, int id));
int fptr_whitelist_mod_deinit(void (*fptr)(struct module_env* env, int id));
/**
+ * Check function pointer whitelist for module startup call values.
+ *
+ * @param fptr: function pointer to check.
+ * @return false if not in whitelist.
+ */
+int fptr_whitelist_mod_startup(int (*fptr)(struct module_env* env, int id));
+
+/**
+ * Check function pointer whitelist for module destartup call values.
+ *
+ * @param fptr: function pointer to check.
+ * @return false if not in whitelist.
+ */
+int fptr_whitelist_mod_destartup(void (*fptr)(struct module_env* env, int id));
+
+/**
* Check function pointer whitelist for module operate call values.
*
* @param fptr: function pointer to check.
diff --git a/util/module.h b/util/module.h
index c9df74624918..5bdb622a2515 100644
--- a/util/module.h
+++ b/util/module.h
@@ -143,7 +143,7 @@
* also contain an rcode that is nonzero, but in this case additional
* information (query, additional) can be passed along.
*
- * The rcode and dns_msg are used to pass the result from the the rightmost
+ * The rcode and dns_msg are used to pass the result from the rightmost
* module towards the leftmost modules and then towards the user.
*
* If you want to avoid recursion-cycles where queries need other queries
@@ -712,8 +712,29 @@ struct module_func_block {
/** text string name of module */
const char* name;
- /**
- * init the module. Called once for the global state.
+ /**
+ * Set up the module for start. This is called only once at startup.
+ * Privileged operations like opening device files may be done here.
+ * The function ptr can be NULL, if it is not used.
+ * @param env: module environment.
+ * @param id: module id number.
+ * return: 0 on error
+ */
+ int (*startup)(struct module_env* env, int id);
+
+ /**
+ * Close down the module for stop. This is called only once before
+ * shutdown to free resources allocated during startup().
+ * Closing privileged ports or files must be done here.
+ * The function ptr can be NULL, if it is not used.
+ * @param env: module environment.
+ * @param id: module id number.
+ */
+ void (*destartup)(struct module_env* env, int id);
+
+ /**
+ * Initialise the module. Called when restarting or reloading the
+ * daemon.
* This is the place to apply settings from the config file.
* @param env: module environment.
* @param id: module id number.
@@ -722,7 +743,8 @@ struct module_func_block {
int (*init)(struct module_env* env, int id);
/**
- * de-init, delete, the module. Called once for the global state.
+ * Deinitialise the module, undo stuff done during init().
+ * Called before reloading the daemon.
* @param env: module environment.
* @param id: module id number.
*/
diff --git a/util/net_help.c b/util/net_help.c
index d2218ea88332..5cf702ef9bca 100644
--- a/util/net_help.c
+++ b/util/net_help.c
@@ -47,6 +47,7 @@
#ifdef HAVE_NETIOAPI_H
#include <netioapi.h>
#endif
+#include <ctype.h>
#include "util/net_help.h"
#include "util/log.h"
#include "util/data/dname.h"
@@ -862,6 +863,20 @@ addr_is_ip4mapped(struct sockaddr_storage* addr, socklen_t addrlen)
return (memcmp(s, map_prefix, 12) == 0);
}
+int addr_is_ip6linklocal(struct sockaddr_storage* addr, socklen_t addrlen)
+{
+ const uint8_t prefix[2] = {0xfe, 0x80};
+ int af = (int)((struct sockaddr_in6*)addr)->sin6_family;
+ void* sin6addr = &((struct sockaddr_in6*)addr)->sin6_addr;
+ uint8_t start[2];
+ if(af != AF_INET6 || addrlen<(socklen_t)sizeof(struct sockaddr_in6))
+ return 0;
+ /* Put the first 10 bits of sin6addr in start, match fe80::/10. */
+ memmove(start, sin6addr, 2);
+ start[1] &= 0xc0;
+ return memcmp(start, prefix, 2) == 0;
+}
+
int addr_is_broadcast(struct sockaddr_storage* addr, socklen_t addrlen)
{
int af = (int)((struct sockaddr_in*)addr)->sin_family;
@@ -1206,7 +1221,7 @@ listen_sslctx_setup_2(void* ctxt)
if(!SSL_CTX_set_ecdh_auto(ctx,1)) {
log_crypto_err("Error in SSL_CTX_ecdh_auto, not enabling ECDHE");
}
-#elif defined(USE_ECDSA)
+#elif defined(USE_ECDSA) && defined(HAVE_SSL_CTX_SET_TMP_ECDH)
if(1) {
EC_KEY *ecdh = EC_KEY_new_by_curve_name (NID_X9_62_prime256v1);
if (!ecdh) {
@@ -1857,3 +1872,42 @@ sock_close(int socket)
closesocket(socket);
}
# endif /* USE_WINSOCK */
+
+ssize_t
+hex_ntop(uint8_t const *src, size_t srclength, char *target, size_t targsize)
+{
+ static char hexdigits[] = {
+ '0', '1', '2', '3', '4', '5', '6', '7',
+ '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'
+ };
+ size_t i;
+
+ if (targsize < srclength * 2 + 1) {
+ return -1;
+ }
+
+ for (i = 0; i < srclength; ++i) {
+ *target++ = hexdigits[src[i] >> 4U];
+ *target++ = hexdigits[src[i] & 0xfU];
+ }
+ *target = '\0';
+ return 2 * srclength;
+}
+
+ssize_t
+hex_pton(const char* src, uint8_t* target, size_t targsize)
+{
+ uint8_t *t = target;
+ if(strlen(src) % 2 != 0 || strlen(src)/2 > targsize) {
+ return -1;
+ }
+ while(*src) {
+ if(!isxdigit((unsigned char)src[0]) ||
+ !isxdigit((unsigned char)src[1]))
+ return -1;
+ *t++ = sldns_hexdigit_to_int(src[0]) * 16 +
+ sldns_hexdigit_to_int(src[1]) ;
+ src += 2;
+ }
+ return t-target;
+}
diff --git a/util/net_help.h b/util/net_help.h
index edaea42353d4..28245ea0c1ee 100644
--- a/util/net_help.h
+++ b/util/net_help.h
@@ -363,6 +363,14 @@ void addr_to_nat64(const struct sockaddr_storage* addr,
int addr_is_ip4mapped(struct sockaddr_storage* addr, socklen_t addrlen);
/**
+ * See if sockaddr is an ipv6 fe80::/10 link local address.
+ * @param addr: address
+ * @param addrlen: length of address
+ * @return true if so
+ */
+int addr_is_ip6linklocal(struct sockaddr_storage* addr, socklen_t addrlen);
+
+/**
* See if sockaddr is 255.255.255.255.
* @param addr: address
* @param addrlen: length of address
@@ -564,4 +572,13 @@ char* sock_strerror(int errn);
/** close the socket with close, or wsa closesocket */
void sock_close(int socket);
+/**
+ * Convert binary data to a string of hexadecimal characters.
+ */
+ssize_t hex_ntop(uint8_t const *src, size_t srclength, char *target,
+ size_t targsize);
+
+/** Convert hexadecimal data to binary. */
+ssize_t hex_pton(const char* src, uint8_t* target, size_t targsize);
+
#endif /* NET_HELP_H */
diff --git a/util/netevent.c b/util/netevent.c
index 980829d087e9..9d5131da9656 100644
--- a/util/netevent.c
+++ b/util/netevent.c
@@ -329,6 +329,7 @@ udp_send_errno_needs_log(struct sockaddr* addr, socklen_t addrlen)
case EACCES:
if(verbosity < VERB_ALGO)
return 0;
+ break;
default:
break;
}
@@ -2365,11 +2366,11 @@ recv_error:
#ifndef USE_WINSOCK
if(errno == EINTR || errno == EAGAIN)
return 1;
- if(recv_initial) {
#ifdef ECONNRESET
- if(errno == ECONNRESET && verbosity < 2)
- return 0; /* silence reset by peer */
+ if(errno == ECONNRESET && verbosity < 2)
+ return 0; /* silence reset by peer */
#endif
+ if(recv_initial) {
#ifdef ECONNREFUSED
if(errno == ECONNREFUSED && verbosity < 2)
return 0; /* silence reset by peer */
@@ -2396,7 +2397,7 @@ recv_error:
#endif
#ifdef ENOTCONN
if(errno == ENOTCONN) {
- log_err_addr("read (in tcp s) failed and this "
+ log_err_addr("read (in tcp initial) failed and this "
"could be because TCP Fast Open is "
"enabled [--disable-tfo-client "
"--disable-tfo-server] but does not "
@@ -2430,8 +2431,9 @@ recv_error:
return 1;
}
#endif
- log_err_addr("read (in tcp s)", sock_strerror(errno),
- &c->repinfo.remote_addr, c->repinfo.remote_addrlen);
+ log_err_addr((recv_initial?"read (in tcp initial)":"read (in tcp)"),
+ sock_strerror(errno), &c->repinfo.remote_addr,
+ c->repinfo.remote_addrlen);
return 0;
}
@@ -3306,6 +3308,13 @@ void http2_stream_add_meshstate(struct http2_stream* h2_stream,
h2_stream->mesh_state = m;
}
+void http2_stream_remove_mesh_state(struct http2_stream* h2_stream)
+{
+ if(!h2_stream)
+ return;
+ h2_stream->mesh_state = NULL;
+}
+
/** delete http2 session server. After closing connection. */
static void http2_session_server_delete(struct http2_session* h2_session)
{
diff --git a/util/netevent.h b/util/netevent.h
index 1e4a13f9b7e5..6f43ce56c8c9 100644
--- a/util/netevent.h
+++ b/util/netevent.h
@@ -955,6 +955,9 @@ void http2_session_add_stream(struct http2_session* h2_session,
void http2_stream_add_meshstate(struct http2_stream* h2_stream,
struct mesh_area* mesh, struct mesh_state* m);
+/** Remove mesh state from stream. When the mesh state has been removed. */
+void http2_stream_remove_mesh_state(struct http2_stream* h2_stream);
+
/**
* This routine is published for checks and tests, and is only used internally.
* handle libevent callback for timer comm.
diff --git a/util/proxy_protocol.c b/util/proxy_protocol.c
index a18804974043..235538b62515 100644
--- a/util/proxy_protocol.c
+++ b/util/proxy_protocol.c
@@ -153,6 +153,7 @@ pp2_write_to_buf(uint8_t* buf, size_t buflen,
break;
#endif /* INET6 */
case AF_UNIX:
+ ATTR_FALLTHROUGH
/* fallthrough */
default:
return 0;
diff --git a/util/siphash.c b/util/siphash.c
index 32797dff60e5..a13657ccffe1 100644
--- a/util/siphash.c
+++ b/util/siphash.c
@@ -128,26 +128,32 @@ int siphash(const uint8_t *in, const size_t inlen, const uint8_t *k,
case 7:
b |= ((uint64_t)in[6]) << 48;
/** EDIT annotate case statement fallthrough for gcc */
+ ATTR_FALLTHROUGH
/* fallthrough */
case 6:
b |= ((uint64_t)in[5]) << 40;
/** EDIT annotate case statement fallthrough for gcc */
+ ATTR_FALLTHROUGH
/* fallthrough */
case 5:
b |= ((uint64_t)in[4]) << 32;
/** EDIT annotate case statement fallthrough for gcc */
+ ATTR_FALLTHROUGH
/* fallthrough */
case 4:
b |= ((uint64_t)in[3]) << 24;
/** EDIT annotate case statement fallthrough for gcc */
+ ATTR_FALLTHROUGH
/* fallthrough */
case 3:
b |= ((uint64_t)in[2]) << 16;
/** EDIT annotate case statement fallthrough for gcc */
+ ATTR_FALLTHROUGH
/* fallthrough */
case 2:
b |= ((uint64_t)in[1]) << 8;
/** EDIT annotate case statement fallthrough for gcc */
+ ATTR_FALLTHROUGH
/* fallthrough */
case 1:
b |= ((uint64_t)in[0]);
diff --git a/util/storage/lookup3.c b/util/storage/lookup3.c
index f2a48f413da5..ae7c166ec371 100644
--- a/util/storage/lookup3.c
+++ b/util/storage/lookup3.c
@@ -254,11 +254,15 @@ uint32_t initval) /* the previous hash, or an arbitrary value */
switch(length) /* all the case statements fall through */
{
case 3 : c+=k[2];
- /* fallthrough */
+ ATTR_FALLTHROUGH
+ /* fallthrough */
case 2 : b+=k[1];
- /* fallthrough */
+ ATTR_FALLTHROUGH
+ /* fallthrough */
case 1 : a+=k[0];
final(a,b,c);
+ ATTR_FALLTHROUGH
+ /* fallthrough */
case 0: /* case 0: nothing left to add */
break;
}
@@ -304,9 +308,15 @@ uint32_t *pb) /* IN: more seed OUT: secondary hash value */
switch(length) /* all the case statements fall through */
{
case 3 : c+=k[2];
+ ATTR_FALLTHROUGH
+ /* fallthrough */
case 2 : b+=k[1];
+ ATTR_FALLTHROUGH
+ /* fallthrough */
case 1 : a+=k[0];
final(a,b,c);
+ ATTR_FALLTHROUGH
+ /* fallthrough */
case 0: /* case 0: nothing left to add */
break;
}
@@ -404,16 +414,32 @@ uint32_t hashlittle( const void *key, size_t length, uint32_t initval)
switch(length)
{
case 12: c+=k[2]; b+=k[1]; a+=k[0]; break;
- case 11: c+=((uint32_t)k8[10])<<16; /* fall through */
- case 10: c+=((uint32_t)k8[9])<<8; /* fall through */
- case 9 : c+=k8[8]; /* fall through */
+ case 11: c+=((uint32_t)k8[10])<<16;
+ ATTR_FALLTHROUGH
+ /* fallthrough */
+ case 10: c+=((uint32_t)k8[9])<<8;
+ ATTR_FALLTHROUGH
+ /* fallthrough */
+ case 9 : c+=k8[8];
+ ATTR_FALLTHROUGH
+ /* fallthrough */
case 8 : b+=k[1]; a+=k[0]; break;
- case 7 : b+=((uint32_t)k8[6])<<16; /* fall through */
- case 6 : b+=((uint32_t)k8[5])<<8; /* fall through */
- case 5 : b+=k8[4]; /* fall through */
+ case 7 : b+=((uint32_t)k8[6])<<16;
+ ATTR_FALLTHROUGH
+ /* fallthrough */
+ case 6 : b+=((uint32_t)k8[5])<<8;
+ ATTR_FALLTHROUGH
+ /* fallthrough */
+ case 5 : b+=k8[4];
+ ATTR_FALLTHROUGH
+ /* fallthrough */
case 4 : a+=k[0]; break;
- case 3 : a+=((uint32_t)k8[2])<<16; /* fall through */
- case 2 : a+=((uint32_t)k8[1])<<8; /* fall through */
+ case 3 : a+=((uint32_t)k8[2])<<16;
+ ATTR_FALLTHROUGH
+ /* fallthrough */
+ case 2 : a+=((uint32_t)k8[1])<<8;
+ ATTR_FALLTHROUGH
+ /* fallthrough */
case 1 : a+=k8[0]; break;
case 0 : return c;
}
@@ -443,23 +469,33 @@ uint32_t hashlittle( const void *key, size_t length, uint32_t initval)
b+=k[2]+(((uint32_t)k[3])<<16);
a+=k[0]+(((uint32_t)k[1])<<16);
break;
- case 11: c+=((uint32_t)k8[10])<<16; /* fall through */
+ case 11: c+=((uint32_t)k8[10])<<16;
+ ATTR_FALLTHROUGH
+ /* fallthrough */
case 10: c+=k[4];
b+=k[2]+(((uint32_t)k[3])<<16);
a+=k[0]+(((uint32_t)k[1])<<16);
break;
- case 9 : c+=k8[8]; /* fall through */
+ case 9 : c+=k8[8];
+ ATTR_FALLTHROUGH
+ /* fallthrough */
case 8 : b+=k[2]+(((uint32_t)k[3])<<16);
a+=k[0]+(((uint32_t)k[1])<<16);
break;
- case 7 : b+=((uint32_t)k8[6])<<16; /* fall through */
+ case 7 : b+=((uint32_t)k8[6])<<16;
+ ATTR_FALLTHROUGH
+ /* fallthrough */
case 6 : b+=k[2];
a+=k[0]+(((uint32_t)k[1])<<16);
break;
- case 5 : b+=k8[4]; /* fall through */
+ case 5 : b+=k8[4];
+ ATTR_FALLTHROUGH
+ /* fallthrough */
case 4 : a+=k[0]+(((uint32_t)k[1])<<16);
break;
- case 3 : a+=((uint32_t)k8[2])<<16; /* fall through */
+ case 3 : a+=((uint32_t)k8[2])<<16;
+ ATTR_FALLTHROUGH
+ /* fallthrough */
case 2 : a+=k[0];
break;
case 1 : a+=k8[0];
@@ -494,27 +530,38 @@ uint32_t hashlittle( const void *key, size_t length, uint32_t initval)
switch(length) /* all the case statements fall through */
{
case 12: c+=((uint32_t)k[11])<<24;
- /* fallthrough */
+ ATTR_FALLTHROUGH
+ /* fallthrough */
case 11: c+=((uint32_t)k[10])<<16;
- /* fallthrough */
+ ATTR_FALLTHROUGH
+ /* fallthrough */
case 10: c+=((uint32_t)k[9])<<8;
- /* fallthrough */
+ ATTR_FALLTHROUGH
+ /* fallthrough */
case 9 : c+=k[8];
- /* fallthrough */
+ ATTR_FALLTHROUGH
+ /* fallthrough */
case 8 : b+=((uint32_t)k[7])<<24;
- /* fallthrough */
+ ATTR_FALLTHROUGH
+ /* fallthrough */
case 7 : b+=((uint32_t)k[6])<<16;
- /* fallthrough */
+ ATTR_FALLTHROUGH
+ /* fallthrough */
case 6 : b+=((uint32_t)k[5])<<8;
- /* fallthrough */
+ ATTR_FALLTHROUGH
+ /* fallthrough */
case 5 : b+=k[4];
- /* fallthrough */
+ ATTR_FALLTHROUGH
+ /* fallthrough */
case 4 : a+=((uint32_t)k[3])<<24;
- /* fallthrough */
+ ATTR_FALLTHROUGH
+ /* fallthrough */
case 3 : a+=((uint32_t)k[2])<<16;
- /* fallthrough */
+ ATTR_FALLTHROUGH
+ /* fallthrough */
case 2 : a+=((uint32_t)k[1])<<8;
- /* fallthrough */
+ ATTR_FALLTHROUGH
+ /* fallthrough */
case 1 : a+=k[0];
break;
case 0 : return c;
@@ -603,16 +650,32 @@ void hashlittle2(
switch(length)
{
case 12: c+=k[2]; b+=k[1]; a+=k[0]; break;
- case 11: c+=((uint32_t)k8[10])<<16; /* fall through */
- case 10: c+=((uint32_t)k8[9])<<8; /* fall through */
- case 9 : c+=k8[8]; /* fall through */
+ case 11: c+=((uint32_t)k8[10])<<16;
+ ATTR_FALLTHROUGH
+ /* fallthrough */
+ case 10: c+=((uint32_t)k8[9])<<8;
+ ATTR_FALLTHROUGH
+ /* fallthrough */
+ case 9 : c+=k8[8];
+ ATTR_FALLTHROUGH
+ /* fallthrough */
case 8 : b+=k[1]; a+=k[0]; break;
- case 7 : b+=((uint32_t)k8[6])<<16; /* fall through */
- case 6 : b+=((uint32_t)k8[5])<<8; /* fall through */
- case 5 : b+=k8[4]; /* fall through */
+ case 7 : b+=((uint32_t)k8[6])<<16;
+ ATTR_FALLTHROUGH
+ /* fallthrough */
+ case 6 : b+=((uint32_t)k8[5])<<8;
+ ATTR_FALLTHROUGH
+ /* fallthrough */
+ case 5 : b+=k8[4];
+ ATTR_FALLTHROUGH
+ /* fallthrough */
case 4 : a+=k[0]; break;
- case 3 : a+=((uint32_t)k8[2])<<16; /* fall through */
- case 2 : a+=((uint32_t)k8[1])<<8; /* fall through */
+ case 3 : a+=((uint32_t)k8[2])<<16;
+ ATTR_FALLTHROUGH
+ /* fallthrough */
+ case 2 : a+=((uint32_t)k8[1])<<8;
+ ATTR_FALLTHROUGH
+ /* fallthrough */
case 1 : a+=k8[0]; break;
case 0 : *pc=c; *pb=b; return; /* zero length strings require no mixing */
}
@@ -642,23 +705,33 @@ void hashlittle2(
b+=k[2]+(((uint32_t)k[3])<<16);
a+=k[0]+(((uint32_t)k[1])<<16);
break;
- case 11: c+=((uint32_t)k8[10])<<16; /* fall through */
+ case 11: c+=((uint32_t)k8[10])<<16;
+ ATTR_FALLTHROUGH
+ /* fallthrough */
case 10: c+=k[4];
b+=k[2]+(((uint32_t)k[3])<<16);
a+=k[0]+(((uint32_t)k[1])<<16);
break;
- case 9 : c+=k8[8]; /* fall through */
+ case 9 : c+=k8[8];
+ ATTR_FALLTHROUGH
+ /* fallthrough */
case 8 : b+=k[2]+(((uint32_t)k[3])<<16);
a+=k[0]+(((uint32_t)k[1])<<16);
break;
- case 7 : b+=((uint32_t)k8[6])<<16; /* fall through */
+ case 7 : b+=((uint32_t)k8[6])<<16;
+ ATTR_FALLTHROUGH
+ /* fallthrough */
case 6 : b+=k[2];
a+=k[0]+(((uint32_t)k[1])<<16);
break;
- case 5 : b+=k8[4]; /* fall through */
+ case 5 : b+=k8[4];
+ ATTR_FALLTHROUGH
+ /* fallthrough */
case 4 : a+=k[0]+(((uint32_t)k[1])<<16);
break;
- case 3 : a+=((uint32_t)k8[2])<<16; /* fall through */
+ case 3 : a+=((uint32_t)k8[2])<<16;
+ ATTR_FALLTHROUGH
+ /* fallthrough */
case 2 : a+=k[0];
break;
case 1 : a+=k8[0];
@@ -693,16 +766,38 @@ void hashlittle2(
switch(length) /* all the case statements fall through */
{
case 12: c+=((uint32_t)k[11])<<24;
+ ATTR_FALLTHROUGH
+ /* fallthrough */
case 11: c+=((uint32_t)k[10])<<16;
+ ATTR_FALLTHROUGH
+ /* fallthrough */
case 10: c+=((uint32_t)k[9])<<8;
+ ATTR_FALLTHROUGH
+ /* fallthrough */
case 9 : c+=k[8];
+ ATTR_FALLTHROUGH
+ /* fallthrough */
case 8 : b+=((uint32_t)k[7])<<24;
+ ATTR_FALLTHROUGH
+ /* fallthrough */
case 7 : b+=((uint32_t)k[6])<<16;
+ ATTR_FALLTHROUGH
+ /* fallthrough */
case 6 : b+=((uint32_t)k[5])<<8;
+ ATTR_FALLTHROUGH
+ /* fallthrough */
case 5 : b+=k[4];
+ ATTR_FALLTHROUGH
+ /* fallthrough */
case 4 : a+=((uint32_t)k[3])<<24;
+ ATTR_FALLTHROUGH
+ /* fallthrough */
case 3 : a+=((uint32_t)k[2])<<16;
+ ATTR_FALLTHROUGH
+ /* fallthrough */
case 2 : a+=((uint32_t)k[1])<<8;
+ ATTR_FALLTHROUGH
+ /* fallthrough */
case 1 : a+=k[0];
break;
case 0 : *pc=c; *pb=b; return; /* zero length strings require no mixing */
@@ -784,16 +879,32 @@ uint32_t hashbig( const void *key, size_t length, uint32_t initval)
switch(length) /* all the case statements fall through */
{
case 12: c+=k[2]; b+=k[1]; a+=k[0]; break;
- case 11: c+=((uint32_t)k8[10])<<8; /* fall through */
- case 10: c+=((uint32_t)k8[9])<<16; /* fall through */
- case 9 : c+=((uint32_t)k8[8])<<24; /* fall through */
+ case 11: c+=((uint32_t)k8[10])<<8;
+ ATTR_FALLTHROUGH
+ /* fallthrough */
+ case 10: c+=((uint32_t)k8[9])<<16;
+ ATTR_FALLTHROUGH
+ /* fallthrough */
+ case 9 : c+=((uint32_t)k8[8])<<24;
+ ATTR_FALLTHROUGH
+ /* fallthrough */
case 8 : b+=k[1]; a+=k[0]; break;
- case 7 : b+=((uint32_t)k8[6])<<8; /* fall through */
- case 6 : b+=((uint32_t)k8[5])<<16; /* fall through */
- case 5 : b+=((uint32_t)k8[4])<<24; /* fall through */
+ case 7 : b+=((uint32_t)k8[6])<<8;
+ ATTR_FALLTHROUGH
+ /* fallthrough */
+ case 6 : b+=((uint32_t)k8[5])<<16;
+ ATTR_FALLTHROUGH
+ /* fallthrough */
+ case 5 : b+=((uint32_t)k8[4])<<24;
+ ATTR_FALLTHROUGH
+ /* fallthrough */
case 4 : a+=k[0]; break;
- case 3 : a+=((uint32_t)k8[2])<<8; /* fall through */
- case 2 : a+=((uint32_t)k8[1])<<16; /* fall through */
+ case 3 : a+=((uint32_t)k8[2])<<8;
+ ATTR_FALLTHROUGH
+ /* fallthrough */
+ case 2 : a+=((uint32_t)k8[1])<<16;
+ ATTR_FALLTHROUGH
+ /* fallthrough */
case 1 : a+=((uint32_t)k8[0])<<24; break;
case 0 : return c;
}
@@ -827,16 +938,38 @@ uint32_t hashbig( const void *key, size_t length, uint32_t initval)
switch(length) /* all the case statements fall through */
{
case 12: c+=k[11];
+ ATTR_FALLTHROUGH
+ /* fallthrough */
case 11: c+=((uint32_t)k[10])<<8;
+ ATTR_FALLTHROUGH
+ /* fallthrough */
case 10: c+=((uint32_t)k[9])<<16;
+ ATTR_FALLTHROUGH
+ /* fallthrough */
case 9 : c+=((uint32_t)k[8])<<24;
+ ATTR_FALLTHROUGH
+ /* fallthrough */
case 8 : b+=k[7];
+ ATTR_FALLTHROUGH
+ /* fallthrough */
case 7 : b+=((uint32_t)k[6])<<8;
+ ATTR_FALLTHROUGH
+ /* fallthrough */
case 6 : b+=((uint32_t)k[5])<<16;
+ ATTR_FALLTHROUGH
+ /* fallthrough */
case 5 : b+=((uint32_t)k[4])<<24;
+ ATTR_FALLTHROUGH
+ /* fallthrough */
case 4 : a+=k[3];
+ ATTR_FALLTHROUGH
+ /* fallthrough */
case 3 : a+=((uint32_t)k[2])<<8;
+ ATTR_FALLTHROUGH
+ /* fallthrough */
case 2 : a+=((uint32_t)k[1])<<16;
+ ATTR_FALLTHROUGH
+ /* fallthrough */
case 1 : a+=((uint32_t)k[0])<<24;
break;
case 0 : return c;
diff --git a/validator/autotrust.c b/validator/autotrust.c
index 3eb13b35c229..36cdf3e0a7a2 100644
--- a/validator/autotrust.c
+++ b/validator/autotrust.c
@@ -1262,12 +1262,13 @@ verify_dnskey(struct module_env* env, struct val_env* ve,
struct trust_anchor* tp, struct ub_packed_rrset_key* rrset,
struct module_qstate* qstate)
{
+ char reasonbuf[256];
char* reason = NULL;
uint8_t sigalg[ALGO_NEEDS_MAX+1];
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,
- NULL, qstate);
+ NULL, qstate, reasonbuf, sizeof(reasonbuf));
/* 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
diff --git a/validator/val_nsec.c b/validator/val_nsec.c
index d0cc67ff5d0b..ad0cba1c4b59 100644
--- a/validator/val_nsec.c
+++ b/validator/val_nsec.c
@@ -177,7 +177,7 @@ static int
nsec_verify_rrset(struct module_env* env, struct val_env* ve,
struct ub_packed_rrset_key* nsec, struct key_entry_key* kkey,
char** reason, sldns_ede_code* reason_bogus,
- struct module_qstate* qstate)
+ struct module_qstate* qstate, char* reasonbuf, size_t reasonlen)
{
struct packed_rrset_data* d = (struct packed_rrset_data*)
nsec->entry.data;
@@ -189,7 +189,8 @@ 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,
- reason_bogus, LDNS_SECTION_AUTHORITY, qstate, &verified);
+ reason_bogus, LDNS_SECTION_AUTHORITY, qstate, &verified,
+ reasonbuf, reasonlen);
if(d->security == sec_status_secure) {
rrset_update_sec_status(env->rrset_cache, nsec, *env->now);
return 1;
@@ -201,7 +202,8 @@ enum sec_status
val_nsec_prove_nodata_dsreply(struct module_env* env, struct val_env* ve,
struct query_info* qinfo, struct reply_info* rep,
struct key_entry_key* kkey, time_t* proof_ttl, char** reason,
- sldns_ede_code* reason_bogus, struct module_qstate* qstate)
+ sldns_ede_code* reason_bogus, struct module_qstate* qstate,
+ char* reasonbuf, size_t reasonlen)
{
struct ub_packed_rrset_key* nsec = reply_find_rrset_section_ns(
rep, qinfo->qname, qinfo->qname_len, LDNS_RR_TYPE_NSEC,
@@ -219,7 +221,7 @@ val_nsec_prove_nodata_dsreply(struct module_env* env, struct val_env* ve,
* 2) this is not a delegation point */
if(nsec) {
if(!nsec_verify_rrset(env, ve, nsec, kkey, reason,
- reason_bogus, qstate)) {
+ reason_bogus, qstate, reasonbuf, reasonlen)) {
verbose(VERB_ALGO, "NSEC RRset for the "
"referral did not verify.");
return sec_status_bogus;
@@ -250,7 +252,7 @@ val_nsec_prove_nodata_dsreply(struct module_env* env, struct val_env* ve,
if(rep->rrsets[i]->rk.type != htons(LDNS_RR_TYPE_NSEC))
continue;
if(!nsec_verify_rrset(env, ve, rep->rrsets[i], kkey, reason,
- reason_bogus, qstate)) {
+ reason_bogus, qstate, reasonbuf, reasonlen)) {
verbose(VERB_ALGO, "NSEC for empty non-terminal "
"did not verify.");
*reason = "NSEC for empty non-terminal "
diff --git a/validator/val_nsec.h b/validator/val_nsec.h
index 81844c908e54..c1d45314abea 100644
--- a/validator/val_nsec.h
+++ b/validator/val_nsec.h
@@ -68,6 +68,8 @@ struct key_entry_key;
* @param reason: string explaining why bogus.
* @param reason_bogus: relevant EDE code for validation failure.
* @param qstate: qstate with region.
+ * @param reasonbuf: buffer to use for fail reason string print.
+ * @param reasonlen: length of reasonbuf.
* @return security status.
* SECURE: proved absence of DS.
* INSECURE: proved that this was not a delegation point.
@@ -78,7 +80,7 @@ enum sec_status val_nsec_prove_nodata_dsreply(struct module_env* env,
struct val_env* ve, struct query_info* qinfo,
struct reply_info* rep, struct key_entry_key* kkey,
time_t* proof_ttl, char** reason, sldns_ede_code* reason_bogus,
- struct module_qstate* qstate);
+ struct module_qstate* qstate, char* reasonbuf, size_t reasonlen);
/**
* nsec typemap check, takes an NSEC-type bitmap as argument, checks for type.
diff --git a/validator/val_nsec3.c b/validator/val_nsec3.c
index 95d1e4d7e4fe..e790e99825ea 100644
--- a/validator/val_nsec3.c
+++ b/validator/val_nsec3.c
@@ -1445,7 +1445,7 @@ 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, sldns_ede_code *reason_bogus,
- struct module_qstate* qstate)
+ struct module_qstate* qstate, char* reasonbuf, size_t reasonlen)
{
struct packed_rrset_data* d;
size_t i;
@@ -1461,7 +1461,7 @@ list_is_secure(struct module_env* env, struct val_env* ve,
continue;
d->security = val_verify_rrset_entry(env, ve, list[i], kkey,
reason, reason_bogus, LDNS_SECTION_AUTHORITY, qstate,
- &verified);
+ &verified, reasonbuf, reasonlen);
if(d->security != sec_status_secure) {
verbose(VERB_ALGO, "NSEC3 did not verify");
return 0;
@@ -1476,7 +1476,7 @@ 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,
sldns_ede_code* reason_bogus, struct module_qstate* qstate,
- struct nsec3_cache_table* ct)
+ struct nsec3_cache_table* ct, char* reasonbuf, size_t reasonlen)
{
struct nsec3_filter flt;
struct ce_response ce;
@@ -1491,7 +1491,8 @@ 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, reason_bogus, qstate)) {
+ if(!list_is_secure(env, ve, list, num, kkey, reason, reason_bogus,
+ qstate, reasonbuf, reasonlen)) {
*reason = "not all NSEC3 records secure";
return sec_status_bogus; /* not all NSEC3 records secure */
}
diff --git a/validator/val_nsec3.h b/validator/val_nsec3.h
index 8ca912934fa6..f668a270ff12 100644
--- a/validator/val_nsec3.h
+++ b/validator/val_nsec3.h
@@ -210,6 +210,8 @@ nsec3_prove_wildcard(struct module_env* env, struct val_env* ve,
* @param reason_bogus: EDE (RFC8914) code paired with the reason of failure.
* @param qstate: qstate with region.
* @param ct: cached hashes table.
+ * @param reasonbuf: buffer to use for fail reason string print.
+ * @param reasonlen: length of reasonbuf.
* @return:
* sec_status SECURE of the proposition is proven by the NSEC3 RRs,
* BOGUS if not, INSECURE if all of the NSEC3s could be validly ignored.
@@ -222,7 +224,7 @@ 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,
sldns_ede_code* reason_bogus, struct module_qstate* qstate,
- struct nsec3_cache_table* ct);
+ struct nsec3_cache_table* ct, char* reasonbuf, size_t reasonlen);
/**
* Prove NXDOMAIN or NODATA.
diff --git a/validator/val_secalgo.c b/validator/val_secalgo.c
index 78651674991e..be8347b1bc88 100644
--- a/validator/val_secalgo.c
+++ b/validator/val_secalgo.c
@@ -423,7 +423,10 @@ setup_dsa_sig(unsigned char** sig, unsigned int* len)
if(!dsasig) return 0;
#ifdef HAVE_DSA_SIG_SET0
- if(!DSA_SIG_set0(dsasig, R, S)) return 0;
+ if(!DSA_SIG_set0(dsasig, R, S)) {
+ DSA_SIG_free(dsasig);
+ return 0;
+ }
#else
# ifndef S_SPLINT_S
dsasig->r = R;
@@ -2057,11 +2060,13 @@ verify_canonrrset(sldns_buffer* buf, int algo, unsigned char* sigblock,
digest_size = (digest_size ? digest_size : SHA1_DIGEST_SIZE);
#endif
/* double fallthrough annotation to please gcc parser */
+ ATTR_FALLTHROUGH
/* fallthrough */
#ifdef USE_SHA2
/* fallthrough */
case LDNS_RSASHA256:
digest_size = (digest_size ? digest_size : SHA256_DIGEST_SIZE);
+ ATTR_FALLTHROUGH
/* fallthrough */
case LDNS_RSASHA512:
digest_size = (digest_size ? digest_size : SHA512_DIGEST_SIZE);
@@ -2077,6 +2082,7 @@ verify_canonrrset(sldns_buffer* buf, int algo, unsigned char* sigblock,
#ifdef USE_ECDSA
case LDNS_ECDSAP256SHA256:
digest_size = (digest_size ? digest_size : SHA256_DIGEST_SIZE);
+ ATTR_FALLTHROUGH
/* fallthrough */
case LDNS_ECDSAP384SHA384:
digest_size = (digest_size ? digest_size : SHA384_DIGEST_SIZE);
diff --git a/validator/val_sigcrypt.c b/validator/val_sigcrypt.c
index 7c2b9d7e6608..9251d2b1f38a 100644
--- a/validator/val_sigcrypt.c
+++ b/validator/val_sigcrypt.c
@@ -623,7 +623,8 @@ 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_ede_code *reason_bogus,
- sldns_pkt_section section, struct module_qstate* qstate, int* verified)
+ sldns_pkt_section section, struct module_qstate* qstate, int* verified,
+ char* reasonbuf, size_t reasonlen)
{
enum sec_status sec;
size_t i, num;
@@ -680,7 +681,8 @@ dnskeyset_verify_rrset(struct module_env* env, struct val_env* ve,
verbose(VERB_ALGO, "rrset failed to verify: "
"no valid signatures for %d algorithms",
(int)algo_needs_num_missing(&needs));
- algo_needs_reason(env, alg, reason, "no signatures");
+ algo_needs_reason(alg, reason, "no signatures", reasonbuf,
+ reasonlen);
} else {
verbose(VERB_ALGO, "rrset failed to verify: "
"no valid signatures");
@@ -688,17 +690,16 @@ dnskeyset_verify_rrset(struct module_env* env, struct val_env* ve,
return sec_status_bogus;
}
-void algo_needs_reason(struct module_env* env, int alg, char** reason, char* s)
+void algo_needs_reason(int alg, char** reason, char* s, char* reasonbuf,
+ size_t reasonlen)
{
- char buf[256];
sldns_lookup_table *t = sldns_lookup_by_id(sldns_algorithms, alg);
if(t&&t->name)
- snprintf(buf, sizeof(buf), "%s with algorithm %s", s, t->name);
- else snprintf(buf, sizeof(buf), "%s with algorithm ALG%u", s,
+ snprintf(reasonbuf, reasonlen, "%s with algorithm %s", s,
+ t->name);
+ else snprintf(reasonbuf, reasonlen, "%s with algorithm ALG%u", s,
(unsigned)alg);
- *reason = regional_strdup(env->scratch, buf);
- if(!*reason)
- *reason = s;
+ *reason = reasonbuf;
}
enum sec_status
diff --git a/validator/val_sigcrypt.h b/validator/val_sigcrypt.h
index 1a3d8fcb22de..1fac8bde0e91 100644
--- a/validator/val_sigcrypt.h
+++ b/validator/val_sigcrypt.h
@@ -134,12 +134,14 @@ int algo_needs_missing(struct algo_needs* n);
/**
* Format error reason for algorithm missing.
- * @param env: module env with scratch for temp storage of string.
* @param alg: DNSKEY-algorithm missing.
* @param reason: destination.
* @param s: string, appended with 'with algorithm ..'.
+ * @param reasonbuf: buffer to use for fail reason string print.
+ * @param reasonlen: length of reasonbuf.
*/
-void algo_needs_reason(struct module_env* env, int alg, char** reason, char* s);
+void algo_needs_reason(int alg, char** reason, char* s, char* reasonbuf,
+ size_t reasonlen);
/**
* Check if dnskey matches a DS digest
@@ -261,6 +263,8 @@ uint16_t dnskey_get_flags(struct ub_packed_rrset_key* k, size_t idx);
* @param section: section of packet where this rrset comes from.
* @param qstate: qstate with region.
* @param verified: if not NULL the number of RRSIG validations is returned.
+ * @param reasonbuf: buffer to use for fail reason string print.
+ * @param reasonlen: length of reasonbuf.
* @return SECURE if one key in the set verifies one rrsig.
* UNCHECKED on allocation errors, unsupported algorithms, malformed data,
* and BOGUS on verification failures (no keys match any signatures).
@@ -269,8 +273,8 @@ 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_ede_code *reason_bogus,
- sldns_pkt_section section, struct module_qstate* qstate, int* verified);
-
+ sldns_pkt_section section, struct module_qstate* qstate, int* verified,
+ char* reasonbuf, size_t reasonlen);
/**
* verify rrset against one specific dnskey (from rrset)
diff --git a/validator/val_utils.c b/validator/val_utils.c
index a7db41dadc3d..549264d76a1f 100644
--- a/validator/val_utils.c
+++ b/validator/val_utils.c
@@ -240,6 +240,26 @@ val_find_best_signer(struct ub_packed_rrset_key* rrset,
}
}
+/** Detect if the, unsigned, CNAME is under a previous DNAME RR in the
+ * message, and thus it was generated from that previous DNAME.
+ */
+static int
+cname_under_previous_dname(struct reply_info* rep, size_t cname_idx,
+ size_t* ret)
+{
+ size_t i;
+ for(i=0; i<cname_idx; i++) {
+ if(ntohs(rep->rrsets[i]->rk.type) == LDNS_RR_TYPE_DNAME &&
+ dname_strict_subdomain_c(rep->rrsets[cname_idx]->
+ rk.dname, rep->rrsets[i]->rk.dname)) {
+ *ret = i;
+ return 1;
+ }
+ }
+ *ret = 0;
+ return 0;
+}
+
void
val_find_signer(enum val_classification subtype, struct query_info* qinf,
struct reply_info* rep, size_t skip, uint8_t** signer_name,
@@ -275,12 +295,19 @@ val_find_signer(enum val_classification subtype, struct query_info* qinf,
*signer_name = NULL;
*signer_len = 0;
} else if(subtype == VAL_CLASS_CNAME) {
+ size_t j;
/* check for the first signed cname/dname rrset */
for(i=skip; i<rep->an_numrrsets; i++) {
val_find_rrset_signer(rep->rrsets[i],
signer_name, signer_len);
if(*signer_name)
return;
+ if(ntohs(rep->rrsets[i]->rk.type) == LDNS_RR_TYPE_CNAME
+ && cname_under_previous_dname(rep, i, &j)) {
+ val_find_rrset_signer(rep->rrsets[j],
+ signer_name, signer_len);
+ return;
+ }
if(ntohs(rep->rrsets[i]->rk.type) != LDNS_RR_TYPE_DNAME)
break; /* only check CNAME after a DNAME */
}
@@ -379,7 +406,7 @@ 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_ede_code *reason_bogus,
sldns_pkt_section section, struct module_qstate* qstate,
- int *verified)
+ int *verified, char* reasonbuf, size_t reasonlen)
{
enum sec_status sec;
struct packed_rrset_data* d = (struct packed_rrset_data*)rrset->
@@ -404,7 +431,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,
- reason_bogus, section, qstate, verified);
+ reason_bogus, section, qstate, verified, reasonbuf, reasonlen);
verbose(VERB_ALGO, "verify result: %s", sec_status_to_string(sec));
regional_free_all(env->scratch);
@@ -439,7 +466,7 @@ 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_ede_code *reason_bogus,
sldns_pkt_section section, struct module_qstate* qstate,
- int* verified)
+ int* verified, char* reasonbuf, size_t reasonlen)
{
/* temporary dnskey rrset-key */
struct ub_packed_rrset_key dnskey;
@@ -453,7 +480,7 @@ 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,
- reason_bogus, section, qstate, verified);
+ reason_bogus, section, qstate, verified, reasonbuf, reasonlen);
return sec;
}
@@ -463,7 +490,7 @@ 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,
sldns_ede_code *reason_bogus, struct module_qstate* qstate,
- int *nonechecked)
+ int *nonechecked, char* reasonbuf, size_t reasonlen)
{
enum sec_status sec = sec_status_bogus;
size_t i, num, numchecked = 0, numhashok = 0, numsizesupp = 0;
@@ -517,8 +544,8 @@ verify_dnskeys_with_ds_rr(struct module_env* env, struct val_env* ve,
return sec_status_insecure;
}
if(numchecked == 0) {
- algo_needs_reason(env, ds_get_key_algo(ds_rrset, ds_idx),
- reason, "no keys have a DS");
+ algo_needs_reason(ds_get_key_algo(ds_rrset, ds_idx),
+ reason, "no keys have a DS", reasonbuf, reasonlen);
*nonechecked = 1;
} else if(numhashok == 0) {
*reason = "DS hash mismatches key";
@@ -549,7 +576,8 @@ 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)
+ sldns_ede_code *reason_bogus, struct module_qstate* qstate,
+ char* reasonbuf, size_t reasonlen)
{
/* as long as this is false, we can consider this DS rrset to be
* equivalent to no DS rrset. */
@@ -588,7 +616,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, reason_bogus, qstate,
- &nonechecked);
+ &nonechecked, reasonbuf, reasonlen);
if(sec == sec_status_insecure) {
/* DNSKEY too large unsupported or algo refused by
* crypto lib. */
@@ -639,8 +667,8 @@ val_verify_DNSKEY_with_DS(struct module_env* env, struct val_env* ve,
/* If any were understandable, then it is bad. */
verbose(VERB_QUERY, "Failed to match any usable DS to a DNSKEY.");
if(sigalg && (alg=algo_needs_missing(&needs)) != 0) {
- algo_needs_reason(env, alg, reason, "missing verification of "
- "DNSKEY signature");
+ algo_needs_reason(alg, reason, "missing verification of "
+ "DNSKEY signature", reasonbuf, reasonlen);
}
return sec_status_bogus;
}
@@ -649,12 +677,13 @@ 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)
+ sldns_ede_code *reason_bogus, struct module_qstate* qstate,
+ char* reasonbuf, size_t reasonlen)
{
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,
- reason_bogus, qstate);
+ reason_bogus, qstate, reasonbuf, reasonlen);
if(sec == sec_status_secure) {
return key_entry_create_rrset(region,
@@ -679,7 +708,8 @@ 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)
+ sldns_ede_code *reason_bogus, struct module_qstate* qstate,
+ char* reasonbuf, size_t reasonlen)
{
/* as long as this is false, we can consider this anchor to be
* equivalent to no anchor. */
@@ -730,7 +760,8 @@ 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, reason_bogus, qstate, &nonechecked);
+ ta_ds, i, reason, reason_bogus, qstate, &nonechecked,
+ reasonbuf, reasonlen);
if(sec == sec_status_insecure) {
has_algo_refusal = 1;
continue;
@@ -810,8 +841,8 @@ val_verify_DNSKEY_with_TA(struct module_env* env, struct val_env* ve,
/* If any were understandable, then it is bad. */
verbose(VERB_QUERY, "Failed to match any usable anchor to a DNSKEY.");
if(sigalg && (alg=algo_needs_missing(&needs)) != 0) {
- algo_needs_reason(env, alg, reason, "missing verification of "
- "DNSKEY signature");
+ algo_needs_reason(alg, reason, "missing verification of "
+ "DNSKEY signature", reasonbuf, reasonlen);
}
return sec_status_bogus;
}
@@ -821,12 +852,14 @@ 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, sldns_ede_code *reason_bogus, struct module_qstate* qstate)
+ char** reason, sldns_ede_code *reason_bogus,
+ struct module_qstate* qstate, char* reasonbuf, size_t reasonlen)
{
uint8_t sigalg[ALGO_NEEDS_MAX+1];
enum sec_status sec = val_verify_DNSKEY_with_TA(env, ve,
dnskey_rrset, ta_ds_rrset, ta_dnskey_rrset,
- downprot?sigalg:NULL, reason, reason_bogus, qstate);
+ downprot?sigalg:NULL, reason, reason_bogus, qstate,
+ reasonbuf, reasonlen);
if(sec == sec_status_secure) {
return key_entry_create_rrset(region,
@@ -979,7 +1012,7 @@ void
val_fill_reply(struct reply_info* chase, struct reply_info* orig,
size_t skip, uint8_t* name, size_t len, uint8_t* signer)
{
- size_t i;
+ size_t i, j;
int seen_dname = 0;
chase->rrset_count = 0;
chase->an_numrrsets = 0;
@@ -1002,8 +1035,15 @@ val_fill_reply(struct reply_info* chase, struct reply_info* orig,
LDNS_RR_TYPE_DNAME) {
seen_dname = 1;
}
+ } else if(ntohs(orig->rrsets[i]->rk.type) == LDNS_RR_TYPE_CNAME
+ && ((struct packed_rrset_data*)orig->rrsets[i]->
+ entry.data)->rrsig_count == 0 &&
+ cname_under_previous_dname(orig, i, &j) &&
+ rrset_has_signer(orig->rrsets[j], name, len)) {
+ chase->rrsets[chase->an_numrrsets++] = orig->rrsets[j];
+ chase->rrsets[chase->an_numrrsets++] = orig->rrsets[i];
}
- }
+ }
/* AUTHORITY section */
for(i = (skip > orig->an_numrrsets)?skip:orig->an_numrrsets;
i<orig->an_numrrsets+orig->ns_numrrsets;
diff --git a/validator/val_utils.h b/validator/val_utils.h
index e8cdcefa6923..4fe38c1bb995 100644
--- a/validator/val_utils.h
+++ b/validator/val_utils.h
@@ -125,13 +125,15 @@ void val_find_signer(enum val_classification subtype,
* @param section: section of packet where this rrset comes from.
* @param qstate: qstate with region.
* @param verified: if not NULL, the number of RRSIG validations is returned.
+ * @param reasonbuf: buffer to use for fail reason string print.
+ * @param reasonlen: length of reasonbuf.
* @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_ede_code *reason_bogus,
sldns_pkt_section section, struct module_qstate* qstate,
- int* verified);
+ int* verified, char* reasonbuf, size_t reasonlen);
/**
* Verify DNSKEYs with DS rrset. Like val_verify_new_DNSKEYs but
@@ -146,6 +148,8 @@ enum sec_status val_verify_rrset_entry(struct module_env* env,
* @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.
+ * @param reasonbuf: buffer to use for fail reason string print.
+ * @param reasonlen: length of reasonbuf.
* @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.
@@ -153,7 +157,8 @@ enum sec_status val_verify_rrset_entry(struct module_env* env,
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);
+ sldns_ede_code *reason_bogus, struct module_qstate* qstate,
+ char* reasonbuf, size_t reasonlen);
/**
* Verify DNSKEYs with DS and DNSKEY rrset. Like val_verify_DNSKEY_with_DS
@@ -167,8 +172,10 @@ 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 reason_bogus: EDE (RFC8914) code paired with the reason of failure.
* @param qstate: qstate with region.
+ * @param reasonbuf: buffer to use for fail reason string print.
+ * @param reasonlen: length of reasonbuf.
* @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.
@@ -177,7 +184,8 @@ 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);
+ sldns_ede_code *reason_bogus, struct module_qstate* qstate,
+ char* reasonbuf, size_t reasonlen);
/**
* Verify new DNSKEYs with DS rrset. The DS contains hash values that should
@@ -194,6 +202,8 @@ enum sec_status val_verify_DNSKEY_with_TA(struct module_env* env,
* @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.
+ * @param reasonbuf: buffer to use for fail reason string print.
+ * @param reasonlen: length of reasonbuf.
* @return a KeyEntry. This will either contain the now trusted
* dnskey_rrset, a "null" key entry indicating that this DS
* rrset/DNSKEY pair indicate an secure end to the island of trust
@@ -208,7 +218,8 @@ 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);
+ sldns_ede_code *reason_bogus, struct module_qstate* qstate,
+ char* reasonbuf, size_t reasonlen);
/**
* Verify rrset with trust anchor: DS and DNSKEY rrset.
@@ -224,6 +235,8 @@ struct key_entry_key* val_verify_new_DNSKEYs(struct regional* region,
* @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.
+ * @param reasonbuf: buffer to use for fail reason string print.
+ * @param reasonlen: length of reasonbuf.
* @return a KeyEntry. This will either contain the now trusted
* dnskey_rrset, a "null" key entry indicating that this DS
* rrset/DNSKEY pair indicate an secure end to the island of trust
@@ -239,7 +252,8 @@ struct key_entry_key* val_verify_new_DNSKEYs_with_ta(struct regional* region,
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);
+ char** reason, sldns_ede_code *reason_bogus, struct module_qstate* qstate,
+ char* reasonbuf, size_t reasonlen);
/**
* Determine if DS rrset is usable for validator or not.
diff --git a/validator/validator.c b/validator/validator.c
index 3cf291658e71..e6d19a2c9f06 100644
--- a/validator/validator.c
+++ b/validator/validator.c
@@ -72,7 +72,8 @@
/* forward decl for cache response and normal super inform calls of a DS */
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, int* suspend);
+ struct query_info* qinfo, struct sock_list* origin, int* suspend,
+ struct module_qstate* sub_qstate);
/* Updates the suplied EDE (RFC8914) code selectively so we don't lose
@@ -273,11 +274,17 @@ val_new_getmsg(struct module_qstate* qstate, struct val_qstate* vq)
return NULL;
if(vq->orig_msg->rep->rrset_count > RR_COUNT_MAX)
return NULL; /* protect against integer overflow */
- vq->chase_reply->rrsets = regional_alloc_init(qstate->region,
- vq->orig_msg->rep->rrsets, sizeof(struct ub_packed_rrset_key*)
- * vq->orig_msg->rep->rrset_count);
+ /* Over allocate (+an_numrrsets) in case we need to put extra DNAME
+ * records for unsigned CNAME repetitions */
+ vq->chase_reply->rrsets = regional_alloc(qstate->region,
+ sizeof(struct ub_packed_rrset_key*) *
+ (vq->orig_msg->rep->rrset_count
+ + vq->orig_msg->rep->an_numrrsets));
if(!vq->chase_reply->rrsets)
return NULL;
+ memmove(vq->chase_reply->rrsets, vq->orig_msg->rep->rrsets,
+ sizeof(struct ub_packed_rrset_key*) *
+ vq->orig_msg->rep->rrset_count);
vq->rrset_skip = 0;
return vq;
}
@@ -640,6 +647,7 @@ validate_msg_signatures(struct module_qstate* qstate, struct val_qstate* vq,
struct ub_packed_rrset_key* s;
enum sec_status sec;
int num_verifies = 0, verified, have_state = 0;
+ char reasonbuf[256];
char* reason = NULL;
sldns_ede_code reason_bogus = LDNS_EDE_DNSSEC_BOGUS;
*suspend = 0;
@@ -675,7 +683,8 @@ validate_msg_signatures(struct module_qstate* qstate, struct val_qstate* vq,
/* Verify the answer rrset */
sec = val_verify_rrset_entry(env, ve, s, key_entry, &reason,
- &reason_bogus, LDNS_SECTION_ANSWER, qstate, &verified);
+ &reason_bogus, LDNS_SECTION_ANSWER, qstate, &verified,
+ reasonbuf, sizeof(reasonbuf));
/* If the (answer) rrset failed to validate, then this
* message is BAD. */
if(sec != sec_status_secure) {
@@ -720,7 +729,7 @@ validate_msg_signatures(struct module_qstate* qstate, struct val_qstate* vq,
s = chase_reply->rrsets[i];
sec = val_verify_rrset_entry(env, ve, s, key_entry, &reason,
&reason_bogus, LDNS_SECTION_AUTHORITY, qstate,
- &verified);
+ &verified, reasonbuf, sizeof(reasonbuf));
/* If anything in the authority section fails to be secure,
* we have a bad message. */
if(sec != sec_status_secure) {
@@ -766,7 +775,7 @@ validate_msg_signatures(struct module_qstate* qstate, struct val_qstate* vq,
if(sname && query_dname_compare(sname, key_entry->name)==0)
(void)val_verify_rrset_entry(env, ve, s, key_entry,
&reason, NULL, LDNS_SECTION_ADDITIONAL, qstate,
- &verified);
+ &verified, reasonbuf, sizeof(reasonbuf));
/* the additional section can fail to be secure,
* it is optional, check signature in case we need
* to clean the additional section later. */
@@ -2060,7 +2069,7 @@ processFindKey(struct module_qstate* qstate, struct val_qstate* vq, int id)
verbose(VERB_ALGO, "Process suspended sub DS response");
msg = vq->sub_ds_msg;
process_ds_response(qstate, vq, id, LDNS_RCODE_NOERROR,
- msg, &msg->qinfo, NULL, &suspend);
+ msg, &msg->qinfo, NULL, &suspend, NULL);
if(suspend) {
/* we'll come back here later to continue */
if(!validate_suspend_setup_timer(qstate, vq,
@@ -2076,7 +2085,7 @@ processFindKey(struct module_qstate* qstate, struct val_qstate* vq, int id)
vq->key_entry->name)) ) {
verbose(VERB_ALGO, "Process cached DS response");
process_ds_response(qstate, vq, id, LDNS_RCODE_NOERROR,
- msg, &msg->qinfo, NULL, &suspend);
+ msg, &msg->qinfo, NULL, &suspend, NULL);
if(suspend) {
/* we'll come back here later to continue */
if(!validate_suspend_setup_timer(qstate, vq,
@@ -2658,6 +2667,8 @@ val_operate(struct module_qstate* qstate, enum module_ev event, int id,
* @param ta: trust anchor.
* @param qstate: qstate that needs key.
* @param id: module id.
+ * @param sub_qstate: the sub query state, that is the lookup that fetched
+ * the trust anchor data, it contains error information for the answer.
* @return new key entry or NULL on allocation failure.
* The key entry will either contain a validated DNSKEY rrset, or
* represent a Null key (query failed, but validation did not), or a
@@ -2665,31 +2676,38 @@ val_operate(struct module_qstate* qstate, enum module_ev event, int id,
*/
static struct key_entry_key*
primeResponseToKE(struct ub_packed_rrset_key* dnskey_rrset,
- struct trust_anchor* ta, struct module_qstate* qstate, int id)
+ struct trust_anchor* ta, struct module_qstate* qstate, int id,
+ struct module_qstate* sub_qstate)
{
struct val_env* ve = (struct val_env*)qstate->env->modinfo[id];
struct key_entry_key* kkey = NULL;
enum sec_status sec = sec_status_unchecked;
+ char reasonbuf[256];
char* reason = NULL;
sldns_ede_code reason_bogus = LDNS_EDE_DNSSEC_BOGUS;
int downprot = qstate->env->cfg->harden_algo_downgrade;
if(!dnskey_rrset) {
+ char* err = errinf_to_str_misc(sub_qstate);
+ char rstr[1024];
log_nametypeclass(VERB_OPS, "failed to prime trust anchor -- "
"could not fetch DNSKEY rrset",
ta->name, LDNS_RR_TYPE_DNSKEY, ta->dclass);
reason_bogus = LDNS_EDE_DNSKEY_MISSING;
- reason = "no DNSKEY rrset";
+ if(!err) {
+ snprintf(rstr, sizeof(rstr), "no DNSKEY rrset");
+ } else {
+ snprintf(rstr, sizeof(rstr), "no DNSKEY rrset "
+ "[%s]", err);
+ }
if(qstate->env->cfg->harden_dnssec_stripped) {
- errinf_ede(qstate, reason, reason_bogus);
+ errinf_ede(qstate, rstr, reason_bogus);
kkey = key_entry_create_bad(qstate->region, ta->name,
ta->namelen, ta->dclass, BOGUS_KEY_TTL,
- reason_bogus, reason,
- *qstate->env->now);
+ reason_bogus, rstr, *qstate->env->now);
} else kkey = key_entry_create_null(qstate->region, ta->name,
ta->namelen, ta->dclass, NULL_KEY_TTL,
- reason_bogus, reason,
- *qstate->env->now);
+ reason_bogus, rstr, *qstate->env->now);
if(!kkey) {
log_err("out of memory: allocate fail prime key");
return NULL;
@@ -2699,7 +2717,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, &reason_bogus, qstate);
+ &reason, &reason_bogus, qstate, reasonbuf, sizeof(reasonbuf));
if(!kkey) {
log_err("out of memory: verifying prime TA");
return NULL;
@@ -2754,6 +2772,9 @@ primeResponseToKE(struct ub_packed_rrset_key* dnskey_rrset,
* DS response indicated an end to secure space, is_good if the DS
* validated. It returns ke=NULL if the DS response indicated that the
* request wasn't a delegation point.
+ * @param sub_qstate: the sub query state, that is the lookup that fetched
+ * the trust anchor data, it contains error information for the answer.
+ * Can be NULL.
* @return
* 0 on success,
* 1 on servfail error (malloc failure),
@@ -2762,9 +2783,10 @@ primeResponseToKE(struct ub_packed_rrset_key* dnskey_rrset,
static int
ds_response_to_ke(struct module_qstate* qstate, struct val_qstate* vq,
int id, int rcode, struct dns_msg* msg, struct query_info* qinfo,
- struct key_entry_key** ke)
+ struct key_entry_key** ke, struct module_qstate* sub_qstate)
{
struct val_env* ve = (struct val_env*)qstate->env->modinfo[id];
+ char reasonbuf[256];
char* reason = NULL;
sldns_ede_code reason_bogus = LDNS_EDE_DNSSEC_BOGUS;
enum val_classification subtype;
@@ -2777,6 +2799,14 @@ ds_response_to_ke(struct module_qstate* qstate, struct val_qstate* vq,
verbose(VERB_DETAIL, "DS response was error, thus bogus");
errinf(qstate, rc);
reason = "no DS";
+ if(sub_qstate) {
+ char* err = errinf_to_str_misc(sub_qstate);
+ if(err) {
+ char buf[1024];
+ snprintf(buf, sizeof(buf), "[%s]", err);
+ errinf(qstate, buf);
+ }
+ }
reason_bogus = LDNS_EDE_NETWORK_ERROR;
errinf_ede(qstate, reason, reason_bogus);
goto return_bogus;
@@ -2799,7 +2829,9 @@ ds_response_to_ke(struct module_qstate* qstate, struct val_qstate* vq,
/* 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, &reason_bogus, LDNS_SECTION_ANSWER, qstate, &verified);
+ vq->key_entry, &reason, &reason_bogus,
+ LDNS_SECTION_ANSWER, qstate, &verified, reasonbuf,
+ sizeof(reasonbuf));
if(sec != sec_status_secure) {
verbose(VERB_DETAIL, "DS rrset in DS response did "
"not verify");
@@ -2849,7 +2881,8 @@ ds_response_to_ke(struct module_qstate* qstate, struct val_qstate* vq,
/* Try to prove absence of the DS with NSEC */
sec = val_nsec_prove_nodata_dsreply(
qstate->env, ve, qinfo, msg->rep, vq->key_entry,
- &proof_ttl, &reason, &reason_bogus, qstate);
+ &proof_ttl, &reason, &reason_bogus, qstate,
+ reasonbuf, sizeof(reasonbuf));
switch(sec) {
case sec_status_secure:
verbose(VERB_DETAIL, "NSEC RRset for the "
@@ -2886,7 +2919,8 @@ 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,
- &reason_bogus, qstate, &vq->nsec3_cache_table);
+ &reason_bogus, qstate, &vq->nsec3_cache_table,
+ reasonbuf, sizeof(reasonbuf));
switch(sec) {
case sec_status_insecure:
/* case insecure also continues to unsigned
@@ -2953,7 +2987,8 @@ ds_response_to_ke(struct module_qstate* qstate, struct val_qstate* vq,
}
sec = val_verify_rrset_entry(qstate->env, ve, cname,
vq->key_entry, &reason, &reason_bogus,
- LDNS_SECTION_ANSWER, qstate, &verified);
+ LDNS_SECTION_ANSWER, qstate, &verified, reasonbuf,
+ sizeof(reasonbuf));
if(sec == sec_status_secure) {
verbose(VERB_ALGO, "CNAME validated, "
"proof that DS does not exist");
@@ -3002,11 +3037,15 @@ return_bogus:
* @param origin: the origin of msg.
* @param suspend: returned true if the task takes too long and needs to
* suspend to continue the effort later.
+ * @param sub_qstate: the sub query state, that is the lookup that fetched
+ * the trust anchor data, it contains error information for the answer.
+ * Can be NULL.
*/
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, int* suspend)
+ struct sock_list* origin, int* suspend,
+ struct module_qstate* sub_qstate)
{
struct val_env* ve = (struct val_env*)qstate->env->modinfo[id];
struct key_entry_key* dske = NULL;
@@ -3014,7 +3053,8 @@ process_ds_response(struct module_qstate* qstate, struct val_qstate* vq,
int ret;
*suspend = 0;
vq->empty_DS_name = NULL;
- ret = ds_response_to_ke(qstate, vq, id, rcode, msg, qinfo, &dske);
+ ret = ds_response_to_ke(qstate, vq, id, rcode, msg, qinfo, &dske,
+ sub_qstate);
if(ret != 0) {
switch(ret) {
case 1:
@@ -3090,16 +3130,19 @@ process_ds_response(struct module_qstate* qstate, struct val_qstate* vq,
* @param msg: result message (if rcode is OK).
* @param qinfo: from the sub query state, query info.
* @param origin: the origin of msg.
+ * @param sub_qstate: the sub query state, that is the lookup that fetched
+ * the trust anchor data, it contains error information for the answer.
*/
static void
process_dnskey_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)
+ struct sock_list* origin, struct module_qstate* sub_qstate)
{
struct val_env* ve = (struct val_env*)qstate->env->modinfo[id];
struct key_entry_key* old = vq->key_entry;
struct ub_packed_rrset_key* dnskey = NULL;
int downprot;
+ char reasonbuf[256];
char* reason = NULL;
sldns_ede_code reason_bogus = LDNS_EDE_DNSSEC_BOGUS;
@@ -3107,6 +3150,8 @@ process_dnskey_response(struct module_qstate* qstate, struct val_qstate* vq,
dnskey = reply_find_answer_rrset(qinfo, msg->rep);
if(dnskey == NULL) {
+ char* err;
+ char rstr[1024];
/* bad response */
verbose(VERB_DETAIL, "Missing DNSKEY RRset in response to "
"DNSKEY query.");
@@ -3118,17 +3163,22 @@ process_dnskey_response(struct module_qstate* qstate, struct val_qstate* vq,
vq->restart_count++;
return;
}
- reason = "No DNSKEY record";
+ err = errinf_to_str_misc(sub_qstate);
+ if(!err) {
+ snprintf(rstr, sizeof(rstr), "No DNSKEY record");
+ } else {
+ snprintf(rstr, sizeof(rstr), "No DNSKEY record "
+ "[%s]", err);
+ }
reason_bogus = LDNS_EDE_DNSKEY_MISSING;
vq->key_entry = key_entry_create_bad(qstate->region,
qinfo->qname, qinfo->qname_len, qinfo->qclass,
- BOGUS_KEY_TTL, reason_bogus, reason,
- *qstate->env->now);
+ BOGUS_KEY_TTL, reason_bogus, rstr, *qstate->env->now);
if(!vq->key_entry) {
log_err("alloc failure in missing dnskey response");
/* key_entry is NULL for failure in Validate */
}
- errinf_ede(qstate, reason, reason_bogus);
+ errinf_ede(qstate, rstr, reason_bogus);
errinf_origin(qstate, origin);
errinf_dname(qstate, "for key", qinfo->qname);
vq->state = VAL_VALIDATE_STATE;
@@ -3142,7 +3192,8 @@ 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, &reason_bogus, qstate);
+ ve, dnskey, vq->ds_rrset, downprot, &reason, &reason_bogus,
+ qstate, reasonbuf, sizeof(reasonbuf));
if(!vq->key_entry) {
log_err("out of memory in verify new DNSKEYs");
@@ -3192,10 +3243,13 @@ process_dnskey_response(struct module_qstate* qstate, struct val_qstate* vq,
* @param rcode: rcode result value.
* @param msg: result message (if rcode is OK).
* @param origin: the origin of msg.
+ * @param sub_qstate: the sub query state, that is the lookup that fetched
+ * the trust anchor data, it contains error information for the answer.
*/
static void
process_prime_response(struct module_qstate* qstate, struct val_qstate* vq,
- int id, int rcode, struct dns_msg* msg, struct sock_list* origin)
+ int id, int rcode, struct dns_msg* msg, struct sock_list* origin,
+ struct module_qstate* sub_qstate)
{
struct val_env* ve = (struct val_env*)qstate->env->modinfo[id];
struct ub_packed_rrset_key* dnskey_rrset = NULL;
@@ -3227,7 +3281,8 @@ process_prime_response(struct module_qstate* qstate, struct val_qstate* vq,
return;
}
}
- vq->key_entry = primeResponseToKE(dnskey_rrset, ta, qstate, id);
+ vq->key_entry = primeResponseToKE(dnskey_rrset, ta, qstate, id,
+ sub_qstate);
lock_basic_unlock(&ta->lock);
if(vq->key_entry) {
if(key_entry_isbad(vq->key_entry)
@@ -3278,14 +3333,14 @@ val_inform_super(struct module_qstate* qstate, int id,
if(vq->wait_prime_ta) {
vq->wait_prime_ta = 0;
process_prime_response(super, vq, id, qstate->return_rcode,
- qstate->return_msg, qstate->reply_origin);
+ qstate->return_msg, qstate->reply_origin, qstate);
return;
}
if(qstate->qinfo.qtype == LDNS_RR_TYPE_DS) {
int suspend;
process_ds_response(super, vq, id, qstate->return_rcode,
qstate->return_msg, &qstate->qinfo,
- qstate->reply_origin, &suspend);
+ qstate->reply_origin, &suspend, qstate);
/* If NSEC3 was needed during validation, NULL the NSEC3 cache;
* it will be re-initiated if needed later on.
* Validation (and the cache table) are happening/allocated in
@@ -3306,7 +3361,7 @@ val_inform_super(struct module_qstate* qstate, int id,
} else if(qstate->qinfo.qtype == LDNS_RR_TYPE_DNSKEY) {
process_dnskey_response(super, vq, id, qstate->return_rcode,
qstate->return_msg, &qstate->qinfo,
- qstate->reply_origin);
+ qstate->reply_origin, qstate);
return;
}
log_err("internal error in validator: no inform_supers possible");
@@ -3344,8 +3399,8 @@ val_get_mem(struct module_env* env, int id)
*/
static struct module_func_block val_block = {
"validator",
- &val_init, &val_deinit, &val_operate, &val_inform_super, &val_clear,
- &val_get_mem
+ NULL, NULL, &val_init, &val_deinit, &val_operate, &val_inform_super,
+ &val_clear, &val_get_mem
};
struct module_func_block*
diff --git a/winrc/win_svc.c b/winrc/win_svc.c
index a87d73bf126b..49d4251fa260 100644
--- a/winrc/win_svc.c
+++ b/winrc/win_svc.c
@@ -352,6 +352,10 @@ service_init(int r, struct daemon** d, struct config_file** c)
daemon_apply_cfg(daemon, cfg);
if(!r) report_status(SERVICE_START_PENDING, NO_ERROR, 2300);
+ if(!r) {
+ if(!daemon_privileged(daemon))
+ fatal_exit("could not do privileged setup");
+ }
if(!(daemon->rc = daemon_remote_create(cfg))) {
log_err("could not set up remote-control");
daemon_delete(daemon);