aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README.md2
-rw-r--r--ax_pthread.m419
-rw-r--r--cachedb/cachedb.c11
-rw-r--r--compat/getentropy_osx.c389
-rw-r--r--compat/inet_pton.c13
-rwxr-xr-xconfig.guess26
-rw-r--r--config.h.in398
-rwxr-xr-xconfig.sub31
-rwxr-xr-xconfigure4758
-rw-r--r--configure.ac26
-rw-r--r--daemon/cachedump.c4
-rw-r--r--daemon/daemon.c40
-rw-r--r--daemon/remote.c263
-rw-r--r--daemon/remote.h8
-rw-r--r--daemon/stats.c28
-rw-r--r--daemon/worker.c41
-rw-r--r--dns64/dns64.c67
-rw-r--r--dnscrypt/dnscrypt.c9
-rw-r--r--dnstap/dnstap.c53
-rw-r--r--dnstap/dnstap.h4
-rw-r--r--dnstap/dtstream.c2
-rw-r--r--dnstap/unbound-dnstap-socket.c6
-rw-r--r--doc/Changelog577
-rw-r--r--doc/README2
-rw-r--r--doc/example.conf.in11
-rw-r--r--doc/libunbound.3.in4
-rw-r--r--doc/unbound-anchor.8.in4
-rw-r--r--doc/unbound-checkconf.8.in4
-rw-r--r--doc/unbound-control.8.in6
-rw-r--r--doc/unbound-control.rst2
-rw-r--r--doc/unbound-host.1.in4
-rw-r--r--doc/unbound.8.in4
-rw-r--r--doc/unbound.conf.5.in112
-rw-r--r--doc/unbound.conf.rst93
-rw-r--r--edns-subnet/addrtree.c1
-rw-r--r--edns-subnet/subnetmod.c3
-rw-r--r--ipsecmod/ipsecmod-whitelist.c2
-rw-r--r--ipsecmod/ipsecmod.c120
-rw-r--r--ipset/ipset.c31
-rw-r--r--iterator/iter_delegpt.c55
-rw-r--r--iterator/iter_delegpt.h6
-rw-r--r--iterator/iter_resptype.c25
-rw-r--r--iterator/iter_resptype.h6
-rw-r--r--iterator/iter_scrub.c76
-rw-r--r--iterator/iter_scrub.h7
-rw-r--r--iterator/iter_utils.c11
-rw-r--r--iterator/iter_utils.h3
-rw-r--r--iterator/iterator.c84
-rw-r--r--iterator/iterator.h18
-rw-r--r--libunbound/context.h2
-rw-r--r--libunbound/libunbound.c17
-rw-r--r--libunbound/libworker.c17
-rw-r--r--libunbound/remote.h65
-rw-r--r--libunbound/worker.h19
-rw-r--r--pythonmod/interface.i3
-rw-r--r--pythonmod/pythonmod.c15
-rw-r--r--respip/respip.c53
-rw-r--r--services/authzone.c349
-rw-r--r--services/authzone.h29
-rw-r--r--services/cache/dns.c14
-rw-r--r--services/cache/rrset.c21
-rw-r--r--services/listen_dnsport.c14
-rw-r--r--services/localzone.c67
-rw-r--r--services/localzone.h6
-rw-r--r--services/mesh.c193
-rw-r--r--services/mesh.h43
-rw-r--r--services/outside_network.c71
-rw-r--r--services/outside_network.h7
-rw-r--r--services/rpz.c50
-rw-r--r--sldns/keyraw.c13
-rw-r--r--sldns/str2wire.c10
-rw-r--r--smallapp/unbound-anchor.c176
-rw-r--r--smallapp/unbound-checkconf.c120
-rw-r--r--smallapp/worker_cb.c5
-rw-r--r--testcode/dohclient.c15
-rw-r--r--testcode/doqclient.c15
-rw-r--r--testcode/fake_event.c3
-rw-r--r--testcode/unitauth.c33
-rw-r--r--testcode/unitecs.c1
-rw-r--r--testcode/unitldns.c14
-rw-r--r--testcode/unitmain.c3
-rw-r--r--testdata/10-unbound-anchor.tdir/10-unbound-anchor.conf1
-rw-r--r--testdata/10-unbound-anchor.tdir/10-unbound-anchor.test4
-rw-r--r--testdata/10-unbound-anchor.tdir/127.0.0.1/no_more_keys.p7sbin1165 -> 1959 bytes
-rw-r--r--testdata/10-unbound-anchor.tdir/127.0.0.1/root.p7sbin1165 -> 1959 bytes
-rw-r--r--testdata/10-unbound-anchor.tdir/key-setup.sh201
-rw-r--r--testdata/10-unbound-anchor.tdir/petal.key61
-rw-r--r--testdata/10-unbound-anchor.tdir/petal.pem35
-rw-r--r--testdata/10-unbound-anchor.tdir/test_cert.key61
-rw-r--r--testdata/10-unbound-anchor.tdir/test_cert.pem38
-rw-r--r--testdata/auth_transfer_limit.tdir/auth_transfer_limit.conf32
-rw-r--r--testdata/auth_transfer_limit.tdir/auth_transfer_limit.dsc16
-rw-r--r--testdata/auth_transfer_limit.tdir/auth_transfer_limit.post16
-rw-r--r--testdata/auth_transfer_limit.tdir/auth_transfer_limit.pre54
-rw-r--r--testdata/auth_transfer_limit.tdir/auth_transfer_limit.test100
-rw-r--r--testdata/auth_transfer_limit.tdir/auth_transfer_limit.testns38
-rw-r--r--testdata/auth_transfer_limit.tdir/auth_transfer_limit.testns235
-rw-r--r--testdata/auth_xfr_host_bogus.rpl294
-rw-r--r--testdata/dns64_dnssec.rpl609
-rw-r--r--testdata/dns64_fwd_nocache.rpl209
-rw-r--r--testdata/dns64_respip_bypass.rpl288
-rw-r--r--testdata/edns_nsid_repeat.rpl1202
-rw-r--r--testdata/errreport_agent_domain_len.rpl221
-rw-r--r--testdata/fast_reload_authdel.tdir/example.com.zone3
-rw-r--r--testdata/fast_reload_authdel.tdir/fast_reload_authdel.conf34
-rw-r--r--testdata/fast_reload_authdel.tdir/fast_reload_authdel.conf224
-rw-r--r--testdata/fast_reload_authdel.tdir/fast_reload_authdel.dsc16
-rw-r--r--testdata/fast_reload_authdel.tdir/fast_reload_authdel.post13
-rw-r--r--testdata/fast_reload_authdel.tdir/fast_reload_authdel.pre46
-rw-r--r--testdata/fast_reload_authdel.tdir/fast_reload_authdel.test47
-rw-r--r--testdata/fast_reload_authdel.tdir/fast_reload_authdel.testns78
-rw-r--r--testdata/fill_reply_uninit.rpl265
-rw-r--r--testdata/ghost_glue_a.rpl365
-rwxr-xr-xtestdata/ipsecmod_hook.sh1
-rw-r--r--testdata/iter_class_any_merge.rpl195
-rw-r--r--testdata/iter_class_mixreferral.rpl144
-rw-r--r--testdata/iter_dname_ttl0_grace.rpl378
-rw-r--r--testdata/iter_ghost_ns_childapex.rpl299
-rw-r--r--testdata/iter_privaddr.rpl26
-rw-r--r--testdata/iter_resolve_minimised.rpl6
-rw-r--r--testdata/iter_scrub_mx.rpl191
-rw-r--r--testdata/iter_scrub_ns_min.rpl197
-rw-r--r--testdata/iter_self_glue.rpl109
-rw-r--r--testdata/iter_self_glue_promisc.rpl94
-rw-r--r--testdata/iter_svcb_malformed.rpl9
-rw-r--r--testdata/local_block_a.rpl334
-rw-r--r--testdata/local_ds.rpl2
-rw-r--r--testdata/nsec_cross_zone.rpl216
-rw-r--r--testdata/respip_bogus_rewrite.rpl216
-rw-r--r--testdata/respip_cname_loop_tagged.rpl254
-rw-r--r--testdata/root_anchor.tdir/root_anchor.test2
-rw-r--r--testdata/rpz_clientip_passthru_cache.rpl205
-rw-r--r--testdata/rpz_clientip_passthru_dns64.rpl247
-rw-r--r--testdata/rrsig_agr_wild.rpl374
-rw-r--r--testdata/serve_expired_respip_cname.rpl290
-rw-r--r--testdata/serve_expired_respip_drop.rpl274
-rw-r--r--testdata/serve_expired_rpz_drop.rpl246
-rw-r--r--testdata/serve_expired_rpz_nx.rpl319
-rw-r--r--testdata/serve_expired_wildcard_swap_ad.rpl330
-rw-r--r--testdata/stat_values.tdir/stat_values.test2
-rw-r--r--testdata/stop_nxdomain_label.rpl115
-rw-r--r--testdata/stop_nxdomain_minimised.rpl25
-rw-r--r--testdata/sub_ds_deepcopy.rpl676
-rw-r--r--testdata/subnet_dns64_lookup.crpl224
-rw-r--r--testdata/svcb.tdir/svcb.success-cases.zone4
-rw-r--r--testdata/svcb.tdir/svcb.success-cases.zone.cmp2
-rw-r--r--testdata/tcp_conn_limit_dec.tdir/tcp_conn_limit_dec.conf25
-rw-r--r--testdata/tcp_conn_limit_dec.tdir/tcp_conn_limit_dec.dsc16
-rw-r--r--testdata/tcp_conn_limit_dec.tdir/tcp_conn_limit_dec.post12
-rw-r--r--testdata/tcp_conn_limit_dec.tdir/tcp_conn_limit_dec.pre30
-rw-r--r--testdata/tcp_conn_limit_dec.tdir/tcp_conn_limit_dec.test42
-rw-r--r--testdata/tcp_conn_limit_dec.tdir/tcp_conn_limit_dec.testns41
-rw-r--r--testdata/val_any_cap.rpl350
-rw-r--r--testdata/val_canon_short_px.rpl215
-rw-r--r--testdata/val_cnameother.rpl270
-rw-r--r--testdata/val_cnametonsec.rpl2
-rw-r--r--testdata/val_cnametooptin.rpl2
-rw-r--r--testdata/val_ds_cname.rpl2
-rw-r--r--testdata/val_dsnsec.rpl2
-rw-r--r--testdata/val_global_quota.rpl358
-rw-r--r--testdata/val_negcache_ds_nsec3.rpl185
-rw-r--r--testdata/val_secds_nosig.rpl2
-rw-r--r--testdata/val_wcnsec_nods.rpl292
-rw-r--r--util/config_file.c63
-rw-r--r--util/config_file.h4
-rw-r--r--util/configlexer.c6994
-rw-r--r--util/configlexer.lex2
-rw-r--r--util/configparser.c4201
-rw-r--r--util/configparser.h26
-rw-r--r--util/configparser.y131
-rw-r--r--util/data/msgencode.c8
-rw-r--r--util/data/msgparse.c7
-rw-r--r--util/data/msgreply.c15
-rw-r--r--util/data/packed_rrset.c9
-rw-r--r--util/data/packed_rrset.h2
-rw-r--r--util/fptr_wlist.c2
-rw-r--r--util/fptr_wlist.h2
-rw-r--r--util/iana_ports.inc4
-rw-r--r--util/module.h11
-rw-r--r--util/net_help.c38
-rw-r--r--util/netevent.c123
-rw-r--r--util/netevent.h2
-rw-r--r--util/proxy_protocol.c25
-rw-r--r--util/proxy_protocol.h9
-rw-r--r--util/shm_side/shm_main.c2
-rw-r--r--util/tube.c20
-rw-r--r--validator/autotrust.c83
-rw-r--r--validator/val_anchor.c25
-rw-r--r--validator/val_neg.c27
-rw-r--r--validator/val_nsec.c32
-rw-r--r--validator/val_nsec3.c21
-rw-r--r--validator/val_secalgo.c8
-rw-r--r--validator/val_sigcrypt.c63
-rw-r--r--validator/val_utils.c37
-rw-r--r--validator/val_utils.h13
-rw-r--r--validator/validator.c37
196 files changed, 24413 insertions, 8823 deletions
diff --git a/README.md b/README.md
index d805e4d0a3d7..c9507e53e5e4 100644
--- a/README.md
+++ b/README.md
@@ -10,7 +10,7 @@ Unbound is a validating, recursive, caching DNS resolver. It is designed to be
fast and lean and incorporates modern features based on open standards. If you
have any feedback, we would love to hear from you. Don’t hesitate to
[create an issue on Github](https://github.com/NLnetLabs/unbound/issues/new)
-or post a message on the [Unbound mailing list](https://lists.nlnetlabs.nl/mailman/listinfo/unbound-users).
+or post a message on our [community forum](https://community.nlnetlabs.nl/).
You can learn more about Unbound by reading our
[documentation](https://unbound.docs.nlnetlabs.nl/).
diff --git a/ax_pthread.m4 b/ax_pthread.m4
index 9f35d139149f..a9019832ef07 100644
--- a/ax_pthread.m4
+++ b/ax_pthread.m4
@@ -87,7 +87,7 @@
# modified version of the Autoconf Macro, you may extend this special
# exception to the GPL to apply to your modified version as well.
-#serial 31
+#serial 32
AU_ALIAS([ACX_PTHREAD], [AX_PTHREAD])
AC_DEFUN([AX_PTHREAD], [
@@ -249,7 +249,22 @@ AS_IF([test "x$ax_pthread_clang" = "xyes"],
# correctly enabled
case $host_os in
- darwin* | hpux* | linux* | osf* | solaris*)
+ solaris*)
+ # Solaris 11.4 introduced XPG7 support and did away with the need for
+ # _REENTRANT.
+
+ AC_EGREP_CPP([AX_PTHREAD_SOLARIS__REENTRANT],
+ [
+# undef _XOPEN_SOURCE
+# include <sys/feature_tests.h>
+# if _XOPEN_VERSION < 700
+ AX_PTHREAD_SOLARIS__REENTRANT
+# endif
+ ],
+ [ax_pthread_check_macro="_REENTRANT"],
+ [ax_pthread_check_macro="--"])
+ ;;
+ darwin* | hpux* | linux* | osf*)
ax_pthread_check_macro="_REENTRANT"
;;
diff --git a/cachedb/cachedb.c b/cachedb/cachedb.c
index fd9f04e3d656..8d5a4a3dfebd 100644
--- a/cachedb/cachedb.c
+++ b/cachedb/cachedb.c
@@ -401,6 +401,12 @@ prep_data(struct module_qstate* qstate, struct sldns_buffer* buf)
FLAGS_GET_RCODE(qstate->return_msg->rep->flags) !=
LDNS_RCODE_YXDOMAIN)
return 0;
+ /* Do not persist data the validator has not yet seen, or has rejected.
+ * Otherwise an expired blob could maybe reach clients via
+ * serve-expired. */
+ if(qstate->env->need_to_validate &&
+ qstate->return_msg->rep->security == sec_status_bogus)
+ return 0;
/* We don't store the reply if its TTL is 0. This is probably coming
* from upstream and it is not meant to be stored. */
if(qstate->return_msg->rep->ttl == 0)
@@ -863,6 +869,11 @@ cachedb_handle_query(struct module_qstate* qstate,
return;
}
/* No 0TTL answers escaping from external cache. */
+ if(qstate->return_msg->rep->ttl == 0) {
+ qstate->return_msg = NULL;
+ qstate->ext_state[id] = module_wait_module;
+ return;
+ }
log_assert(qstate->return_msg->rep->ttl > 0);
qstate->is_cachedb_answer = 1;
/* we are done with the query */
diff --git a/compat/getentropy_osx.c b/compat/getentropy_osx.c
index 26dcc824dee7..ab9456a24cc6 100644
--- a/compat/getentropy_osx.c
+++ b/compat/getentropy_osx.c
@@ -20,398 +20,25 @@
* http://man.openbsd.org/getentropy.2
*/
-#include <TargetConditionals.h>
-#include <sys/types.h>
-#include <sys/param.h>
-#include <sys/ioctl.h>
-#include <sys/resource.h>
-#include <sys/syscall.h>
-#include <sys/sysctl.h>
-#include <sys/statvfs.h>
-#include <sys/socket.h>
-#include <sys/mount.h>
-#include <sys/mman.h>
-#include <sys/stat.h>
-#include <sys/time.h>
-#include <stdlib.h>
-#include <stdint.h>
-#include <stdio.h>
-#include <termios.h>
-#include <fcntl.h>
-#include <signal.h>
-#include <string.h>
+/* Modified to use SecRandomCopyBytes. It is from macOS 10.7 (2011) and
+ * iOS 2.0 (2008), and is the primary API for cryptographic random numbers. */
#include <errno.h>
-#include <unistd.h>
-#include <time.h>
-#include <mach/mach_time.h>
-#include <mach/mach_host.h>
-#include <mach/host_info.h>
-#if TARGET_OS_OSX
-#include <sys/socketvar.h>
-#include <sys/vmmeter.h>
-#endif
-#include <netinet/in.h>
-#include <netinet/tcp.h>
-#if TARGET_OS_OSX
-#include <netinet/udp.h>
-#include <netinet/ip_var.h>
-#include <netinet/tcp_var.h>
-#include <netinet/udp_var.h>
-#endif
-#include <CommonCrypto/CommonDigest.h>
-#define SHA512_Update(a, b, c) (CC_SHA512_Update((a), (b), (c)))
-#define SHA512_Init(xxx) (CC_SHA512_Init((xxx)))
-#define SHA512_Final(xxx, yyy) (CC_SHA512_Final((xxx), (yyy)))
-#define SHA512_CTX CC_SHA512_CTX
-#define SHA512_DIGEST_LENGTH CC_SHA512_DIGEST_LENGTH
-
-#define REPEAT 5
-#define min(a, b) (((a) < (b)) ? (a) : (b))
-
-#define HX(a, b) \
- do { \
- if ((a)) \
- HD(errno); \
- else \
- HD(b); \
- } while (0)
-
-#define HR(x, l) (SHA512_Update(&ctx, (char *)(x), (l)))
-#define HD(x) (SHA512_Update(&ctx, (char *)&(x), sizeof (x)))
-#define HF(x) (SHA512_Update(&ctx, (char *)&(x), sizeof (void*)))
+#include <Security/SecRandom.h>
int getentropy(void *buf, size_t len);
-static int getentropy_urandom(void *buf, size_t len);
-static int getentropy_fallback(void *buf, size_t len);
-
int
getentropy(void *buf, size_t len)
{
- int ret = -1;
-
if (len > 256) {
- errno = EIO;
- return (-1);
- }
-
- /*
- * Try to get entropy with /dev/urandom
- *
- * This can fail if the process is inside a chroot or if file
- * descriptors are exhausted.
- */
- ret = getentropy_urandom(buf, len);
- if (ret != -1)
- return (ret);
-
- /*
- * Entropy collection via /dev/urandom and sysctl have failed.
- *
- * No other API exists for collecting entropy, and we have
- * no failsafe way to get it on OSX that is not sensitive
- * to resource exhaustion.
- *
- * We have very few options:
- * - Even syslog_r is unsafe to call at this low level, so
- * there is no way to alert the user or program.
- * - Cannot call abort() because some systems have unsafe
- * corefiles.
- * - Could raise(SIGKILL) resulting in silent program termination.
- * - Return EIO, to hint that arc4random's stir function
- * should raise(SIGKILL)
- * - Do the best under the circumstances....
- *
- * This code path exists to bring light to the issue that OSX
- * does not provide a failsafe API for entropy collection.
- *
- * We hope this demonstrates that OSX should consider
- * providing a new failsafe API which works in a chroot or
- * when file descriptors are exhausted.
- */
-#undef FAIL_INSTEAD_OF_TRYING_FALLBACK
-#ifdef FAIL_INSTEAD_OF_TRYING_FALLBACK
- raise(SIGKILL);
-#endif
- ret = getentropy_fallback(buf, len);
- if (ret != -1)
- return (ret);
-
- errno = EIO;
- return (ret);
-}
-
-static int
-getentropy_urandom(void *buf, size_t len)
-{
- struct stat st;
- size_t i;
- int fd, flags;
- int save_errno = errno;
-
-start:
-
- flags = O_RDONLY;
-#ifdef O_NOFOLLOW
- flags |= O_NOFOLLOW;
-#endif
-#ifdef O_CLOEXEC
- flags |= O_CLOEXEC;
-#endif
- fd = open("/dev/urandom", flags, 0);
- if (fd == -1) {
- if (errno == EINTR)
- goto start;
- goto nodevrandom;
+ goto error;
}
-#ifndef O_CLOEXEC
- fcntl(fd, F_SETFD, fcntl(fd, F_GETFD) | FD_CLOEXEC);
-#endif
- /* Lightly verify that the device node looks sane */
- if (fstat(fd, &st) == -1 || !S_ISCHR(st.st_mode)) {
- close(fd);
- goto nodevrandom;
+ if (SecRandomCopyBytes(kSecRandomDefault, len, buf) == errSecSuccess) {
+ return 0;
}
- for (i = 0; i < len; ) {
- size_t wanted = len - i;
- ssize_t ret = read(fd, (char *)buf + i, wanted);
- if (ret == -1) {
- if (errno == EAGAIN || errno == EINTR)
- continue;
- close(fd);
- goto nodevrandom;
- }
- i += ret;
- }
- close(fd);
- errno = save_errno;
- return (0); /* satisfied */
-nodevrandom:
+error:
errno = EIO;
- return (-1);
-}
-
-#if TARGET_OS_OSX
-static int tcpmib[] = { CTL_NET, AF_INET, IPPROTO_TCP, TCPCTL_STATS };
-static int udpmib[] = { CTL_NET, AF_INET, IPPROTO_UDP, UDPCTL_STATS };
-static int ipmib[] = { CTL_NET, AF_INET, IPPROTO_IP, IPCTL_STATS };
-#endif
-static int kmib[] = { CTL_KERN, KERN_USRSTACK };
-static int hwmib[] = { CTL_HW, HW_USERMEM };
-
-static int
-getentropy_fallback(void *buf, size_t len)
-{
- uint8_t results[SHA512_DIGEST_LENGTH];
- int save_errno = errno, e, pgs = getpagesize(), faster = 0, repeat;
- static int cnt;
- struct timespec ts;
- struct timeval tv;
- struct rusage ru;
- sigset_t sigset;
- struct stat st;
- SHA512_CTX ctx;
- static pid_t lastpid;
- pid_t pid;
- size_t i, ii, m;
- char *p;
-#if TARGET_OS_OSX
- struct tcpstat tcpstat;
- struct udpstat udpstat;
- struct ipstat ipstat;
-#endif
- u_int64_t mach_time;
- unsigned int idata;
- void *addr;
-
- pid = getpid();
- if (lastpid == pid) {
- faster = 1;
- repeat = 2;
- } else {
- faster = 0;
- lastpid = pid;
- repeat = REPEAT;
- }
- for (i = 0; i < len; ) {
- int j;
- SHA512_Init(&ctx);
- for (j = 0; j < repeat; j++) {
- HX((e = gettimeofday(&tv, NULL)) == -1, tv);
- if (e != -1) {
- cnt += (int)tv.tv_sec;
- cnt += (int)tv.tv_usec;
- }
-
- mach_time = mach_absolute_time();
- HD(mach_time);
-
- ii = sizeof(addr);
- HX(sysctl(kmib, sizeof(kmib) / sizeof(kmib[0]),
- &addr, &ii, NULL, 0) == -1, addr);
-
- ii = sizeof(idata);
- HX(sysctl(hwmib, sizeof(hwmib) / sizeof(hwmib[0]),
- &idata, &ii, NULL, 0) == -1, idata);
-
-#if TARGET_OS_OSX
- ii = sizeof(tcpstat);
- HX(sysctl(tcpmib, sizeof(tcpmib) / sizeof(tcpmib[0]),
- &tcpstat, &ii, NULL, 0) == -1, tcpstat);
-
- ii = sizeof(udpstat);
- HX(sysctl(udpmib, sizeof(udpmib) / sizeof(udpmib[0]),
- &udpstat, &ii, NULL, 0) == -1, udpstat);
-
- ii = sizeof(ipstat);
- HX(sysctl(ipmib, sizeof(ipmib) / sizeof(ipmib[0]),
- &ipstat, &ii, NULL, 0) == -1, ipstat);
-#endif
-
- HX((pid = getpid()) == -1, pid);
- HX((pid = getsid(pid)) == -1, pid);
- HX((pid = getppid()) == -1, pid);
- HX((pid = getpgid(0)) == -1, pid);
- HX((e = getpriority(0, 0)) == -1, e);
-
- if (!faster) {
- ts.tv_sec = 0;
- ts.tv_nsec = 1;
- (void) nanosleep(&ts, NULL);
- }
-
- HX(sigpending(&sigset) == -1, sigset);
- HX(sigprocmask(SIG_BLOCK, NULL, &sigset) == -1,
- sigset);
-
- HF(getentropy); /* an addr in this library */
- HF(printf); /* an addr in libc */
- p = (char *)&p;
- HD(p); /* an addr on stack */
- p = (char *)&errno;
- HD(p); /* the addr of errno */
-
- if (i == 0) {
- struct sockaddr_storage ss;
- struct statvfs stvfs;
- struct termios tios;
- struct statfs stfs;
- socklen_t ssl;
- off_t off;
-
- /*
- * Prime-sized mappings encourage fragmentation;
- * thus exposing some address entropy.
- */
- struct mm {
- size_t npg;
- void *p;
- } mm[] = {
- { 17, MAP_FAILED }, { 3, MAP_FAILED },
- { 11, MAP_FAILED }, { 2, MAP_FAILED },
- { 5, MAP_FAILED }, { 3, MAP_FAILED },
- { 7, MAP_FAILED }, { 1, MAP_FAILED },
- { 57, MAP_FAILED }, { 3, MAP_FAILED },
- { 131, MAP_FAILED }, { 1, MAP_FAILED },
- };
-
- for (m = 0; m < sizeof mm/sizeof(mm[0]); m++) {
- HX(mm[m].p = mmap(NULL,
- mm[m].npg * pgs,
- PROT_READ|PROT_WRITE,
- MAP_PRIVATE|MAP_ANON, -1,
- (off_t)0), mm[m].p);
- if (mm[m].p != MAP_FAILED) {
- size_t mo;
-
- /* Touch some memory... */
- p = mm[m].p;
- mo = cnt %
- (mm[m].npg * pgs - 1);
- p[mo] = 1;
- cnt += (int)((long)(mm[m].p)
- / pgs);
- }
-
- /* Check cnts and times... */
- mach_time = mach_absolute_time();
- HD(mach_time);
- cnt += (int)mach_time;
-
- HX((e = getrusage(RUSAGE_SELF,
- &ru)) == -1, ru);
- if (e != -1) {
- cnt += (int)ru.ru_utime.tv_sec;
- cnt += (int)ru.ru_utime.tv_usec;
- }
- }
-
- for (m = 0; m < sizeof mm/sizeof(mm[0]); m++) {
- if (mm[m].p != MAP_FAILED)
- munmap(mm[m].p, mm[m].npg * pgs);
- mm[m].p = MAP_FAILED;
- }
-
- HX(stat(".", &st) == -1, st);
- HX(statvfs(".", &stvfs) == -1, stvfs);
- HX(statfs(".", &stfs) == -1, stfs);
-
- HX(stat("/", &st) == -1, st);
- HX(statvfs("/", &stvfs) == -1, stvfs);
- HX(statfs("/", &stfs) == -1, stfs);
-
- HX((e = fstat(0, &st)) == -1, st);
- if (e == -1) {
- if (S_ISREG(st.st_mode) ||
- S_ISFIFO(st.st_mode) ||
- S_ISSOCK(st.st_mode)) {
- HX(fstatvfs(0, &stvfs) == -1,
- stvfs);
- HX(fstatfs(0, &stfs) == -1,
- stfs);
- HX((off = lseek(0, (off_t)0,
- SEEK_CUR)) < 0, off);
- }
- if (S_ISCHR(st.st_mode)) {
- HX(tcgetattr(0, &tios) == -1,
- tios);
- } else if (S_ISSOCK(st.st_mode)) {
- memset(&ss, 0, sizeof ss);
- ssl = sizeof(ss);
- HX(getpeername(0,
- (void *)&ss, &ssl) == -1,
- ss);
- }
- }
-
- HX((e = getrusage(RUSAGE_CHILDREN,
- &ru)) == -1, ru);
- if (e != -1) {
- cnt += (int)ru.ru_utime.tv_sec;
- cnt += (int)ru.ru_utime.tv_usec;
- }
- } else {
- /* Subsequent hashes absorb previous result */
- HD(results);
- }
-
- HX((e = gettimeofday(&tv, NULL)) == -1, tv);
- if (e != -1) {
- cnt += (int)tv.tv_sec;
- cnt += (int)tv.tv_usec;
- }
-
- HD(cnt);
- }
-
- SHA512_Final(results, &ctx);
- memcpy((char *)buf + i, results, min(sizeof(results), len - i));
- i += min(sizeof(results), len - i);
- }
- explicit_bzero(&ctx, sizeof ctx);
- explicit_bzero(results, sizeof results);
- errno = save_errno;
- return (0); /* satisfied */
+ return -1;
}
diff --git a/compat/inet_pton.c b/compat/inet_pton.c
index 15780d0b7a17..6f863fabceee 100644
--- a/compat/inet_pton.c
+++ b/compat/inet_pton.c
@@ -59,10 +59,7 @@ static int inet_pton6 (const char *src, uint8_t *dst);
* Paul Vixie, 1996.
*/
int
-inet_pton(af, src, dst)
- int af;
- const char *src;
- void *dst;
+inet_pton(int af, const char *src, void *dst)
{
switch (af) {
case AF_INET:
@@ -91,9 +88,7 @@ inet_pton(af, src, dst)
* Paul Vixie, 1996.
*/
static int
-inet_pton4(src, dst)
- const char *src;
- uint8_t *dst;
+inet_pton4(const char *src, uint8_t *dst)
{
static const char digits[] = "0123456789";
int saw_digit, octets, ch;
@@ -145,9 +140,7 @@ inet_pton4(src, dst)
* Paul Vixie, 1996.
*/
static int
-inet_pton6(src, dst)
- const char *src;
- uint8_t *dst;
+inet_pton6(const char *src, uint8_t *dst)
{
static const char xdigits_l[] = "0123456789abcdef",
xdigits_u[] = "0123456789ABCDEF";
diff --git a/config.guess b/config.guess
index c7f4c3294a63..b790fcbe3602 100755
--- a/config.guess
+++ b/config.guess
@@ -1,10 +1,10 @@
-#! /bin/sh
+#!/usr/bin/sh
# Attempt to guess a canonical system name.
-# Copyright 1992-2026 Free Software Foundation, Inc.
+# Copyright 1992-2024 Free Software Foundation, Inc.
# shellcheck disable=SC2006,SC2268 # see below for rationale
-timestamp='2026-05-17'
+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
@@ -60,7 +60,7 @@ version="\
GNU config.guess ($timestamp)
Originally written by Per Bothner.
-Copyright 1992-2026 Free Software Foundation, Inc.
+Copyright 1992-2024 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -150,7 +150,7 @@ UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
case $UNAME_SYSTEM in
-Ironclad|Linux|GNU|GNU/*)
+Linux|GNU|GNU/*)
LIBC=unknown
set_cc_for_build
@@ -167,8 +167,6 @@ Ironclad|Linux|GNU|GNU/*)
LIBC=gnu
#elif defined(__LLVM_LIBC__)
LIBC=llvm
- #elif defined(__mlibc__)
- LIBC=mlibc
#else
#include <stdarg.h>
/* First heuristic to detect musl libc. */
@@ -1188,9 +1186,6 @@ EOF
sparc:Linux:*:* | sparc64:Linux:*:*)
GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
;;
- sw_64:Linux:*:*)
- GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
- ;;
tile*:Linux:*:*)
GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
;;
@@ -1602,11 +1597,8 @@ EOF
*:Unleashed:*:*)
GUESS=$UNAME_MACHINE-unknown-unleashed$UNAME_RELEASE
;;
- x86_64:[Ii]ronclad:*:*|i?86:[Ii]ronclad:*:*)
- GUESS=$UNAME_MACHINE-pc-ironclad-$LIBC
- ;;
- *:[Ii]ronclad:*:*)
- GUESS=$UNAME_MACHINE-unknown-ironclad-$LIBC
+ *:Ironclad:*:*)
+ GUESS=$UNAME_MACHINE-unknown-ironclad
;;
esac
@@ -1816,8 +1808,8 @@ fi
exit 1
# Local variables:
-# eval: (add-hook 'before-save-hook 'time-stamp nil t)
+# eval: (add-hook 'before-save-hook 'time-stamp)
# time-stamp-start: "timestamp='"
-# time-stamp-format: "%Y-%02m-%02d"
+# time-stamp-format: "%:y-%02m-%02d"
# time-stamp-end: "'"
# End:
diff --git a/config.h.in b/config.h.in
index 73548599103f..b35b9ce8d9c8 100644
--- a/config.h.in
+++ b/config.h.in
@@ -31,6 +31,9 @@
/* Whether daemon is deprecated */
#undef DEPRECATED_DAEMON
+/* Whether X509_NAME_get_text_by_NID is deprecated */
+#undef DEPRECATED_X509_NAME_GET_TEXT_BY_NID
+
/* Deprecate RSA 1024 bit length, makes that an unsupported key */
#undef DEPRECATE_RSA_1024
@@ -48,18 +51,21 @@
internal symbols */
#undef EXPORT_ALL_SYMBOLS
-/* Define to 1 if you have the `accept4' function. */
+/* Define to 1 if you have the 'accept4' function. */
#undef HAVE_ACCEPT4
-/* Define to 1 if you have the `arc4random' function. */
+/* Define to 1 if you have the 'arc4random' function. */
#undef HAVE_ARC4RANDOM
-/* Define to 1 if you have the `arc4random_uniform' function. */
+/* Define to 1 if you have the 'arc4random_uniform' function. */
#undef HAVE_ARC4RANDOM_UNIFORM
/* Define to 1 if you have the <arpa/inet.h> header file. */
#undef HAVE_ARPA_INET_H
+/* Define to 1 if you have the 'ASN1_STRING_get0_data' function. */
+#undef HAVE_ASN1_STRING_GET0_DATA
+
/* Whether the C compiler accepts the "fallthrough" attribute */
#undef HAVE_ATTR_FALLTHROUGH
@@ -81,7 +87,7 @@
/* If we have be64toh */
#undef HAVE_BE64TOH
-/* Define to 1 if you have the `BIO_set_callback_ex' function. */
+/* Define to 1 if you have the 'BIO_set_callback_ex' function. */
#undef HAVE_BIO_SET_CALLBACK_EX
/* Define to 1 if you have the <bsd/stdlib.h> header file. */
@@ -90,245 +96,255 @@
/* Define to 1 if you have the <bsd/string.h> header file. */
#undef HAVE_BSD_STRING_H
-/* Define to 1 if you have the `chown' function. */
+/* Define to 1 if you have the 'chown' function. */
#undef HAVE_CHOWN
-/* Define to 1 if you have the `chroot' function. */
+/* Define to 1 if you have the 'chroot' function. */
#undef HAVE_CHROOT
-/* Define to 1 if you have the `CRYPTO_cleanup_all_ex_data' function. */
+/* Define to 1 if you have the 'CRYPTO_cleanup_all_ex_data' function. */
#undef HAVE_CRYPTO_CLEANUP_ALL_EX_DATA
-/* Define to 1 if you have the `CRYPTO_THREADID_set_callback' function. */
+/* Define to 1 if you have the 'CRYPTO_THREADID_set_callback' function. */
#undef HAVE_CRYPTO_THREADID_SET_CALLBACK
-/* Define to 1 if you have the `ctime_r' function. */
+/* Define to 1 if you have the 'ctime_r' function. */
#undef HAVE_CTIME_R
-/* Define to 1 if you have the `daemon' function. */
+/* Define to 1 if you have the 'daemon' function. */
#undef HAVE_DAEMON
-/* Define to 1 if you have the declaration of `arc4random', and to 0 if you
+/* Define to 1 if you have the declaration of 'arc4random', and to 0 if you
don't. */
#undef HAVE_DECL_ARC4RANDOM
-/* Define to 1 if you have the declaration of `arc4random_uniform', and to 0
+/* Define to 1 if you have the declaration of 'arc4random_uniform', and to 0
if you don't. */
#undef HAVE_DECL_ARC4RANDOM_UNIFORM
-/* Define to 1 if you have the declaration of `evsignal_assign', and to 0 if
+/* Define to 1 if you have the declaration of 'evsignal_assign', and to 0 if
you don't. */
#undef HAVE_DECL_EVSIGNAL_ASSIGN
-/* Define to 1 if you have the declaration of `inet_ntop', and to 0 if you
+/* Define to 1 if you have the declaration of 'inet_ntop', and to 0 if you
don't. */
#undef HAVE_DECL_INET_NTOP
-/* Define to 1 if you have the declaration of `inet_pton', and to 0 if you
+/* Define to 1 if you have the declaration of 'inet_pton', and to 0 if you
don't. */
#undef HAVE_DECL_INET_PTON
-/* Define to 1 if you have the declaration of `nghttp2_session_server_new',
+/* Define to 1 if you have the declaration of 'nghttp2_session_server_new',
and to 0 if you don't. */
#undef HAVE_DECL_NGHTTP2_SESSION_SERVER_NEW
-/* Define to 1 if you have the declaration of `ngtcp2_conn_server_new', and to
+/* Define to 1 if you have the declaration of 'ngtcp2_conn_server_new', and to
0 if you don't. */
#undef HAVE_DECL_NGTCP2_CONN_SERVER_NEW
-/* Define to 1 if you have the declaration of `ngtcp2_crypto_encrypt_cb', and
+/* Define to 1 if you have the declaration of 'ngtcp2_crypto_encrypt_cb', and
to 0 if you don't. */
#undef HAVE_DECL_NGTCP2_CRYPTO_ENCRYPT_CB
-/* Define to 1 if you have the declaration of `NID_ED25519', and to 0 if you
+/* Define to 1 if you have the declaration of 'ngtcp2_crypto_ossl_ctx_new',
+ and to 0 if you don't. */
+#undef HAVE_DECL_NGTCP2_CRYPTO_OSSL_CTX_NEW
+
+/* Define to 1 if you have the declaration of 'NID_ED25519', and to 0 if you
don't. */
#undef HAVE_DECL_NID_ED25519
-/* Define to 1 if you have the declaration of `NID_ED448', and to 0 if you
+/* Define to 1 if you have the declaration of 'NID_ED448', and to 0 if you
don't. */
#undef HAVE_DECL_NID_ED448
-/* Define to 1 if you have the declaration of `NID_secp384r1', and to 0 if you
+/* Define to 1 if you have the declaration of 'NID_secp384r1', and to 0 if you
don't. */
#undef HAVE_DECL_NID_SECP384R1
-/* Define to 1 if you have the declaration of `NID_X9_62_prime256v1', and to 0
+/* Define to 1 if you have the declaration of 'NID_X9_62_prime256v1', and to 0
if you don't. */
#undef HAVE_DECL_NID_X9_62_PRIME256V1
-/* Define to 1 if you have the declaration of `reallocarray', and to 0 if you
+/* Define to 1 if you have the declaration of 'reallocarray', and to 0 if you
don't. */
#undef HAVE_DECL_REALLOCARRAY
-/* Define to 1 if you have the declaration of `redisConnect', and to 0 if you
+/* Define to 1 if you have the declaration of 'redisConnect', and to 0 if you
don't. */
#undef HAVE_DECL_REDISCONNECT
-/* Define to 1 if you have the declaration of `sk_SSL_COMP_pop_free', and to 0
+/* Define to 1 if you have the declaration of 'sk_SSL_COMP_pop_free', and to 0
if you don't. */
#undef HAVE_DECL_SK_SSL_COMP_POP_FREE
/* Define to 1 if you have the declaration of
- `SSL_COMP_get_compression_methods', and to 0 if you don't. */
+ 'SSL_COMP_get_compression_methods', and to 0 if you don't. */
#undef HAVE_DECL_SSL_COMP_GET_COMPRESSION_METHODS
-/* Define to 1 if you have the declaration of `SSL_CTX_set_ecdh_auto', and to
+/* Define to 1 if you have the declaration of 'SSL_CTX_set_ecdh_auto', and to
0 if you don't. */
#undef HAVE_DECL_SSL_CTX_SET_ECDH_AUTO
-/* Define to 1 if you have the declaration of `SSL_CTX_set_tmp_ecdh', and to 0
+/* Define to 1 if you have the declaration of 'SSL_CTX_set_tmp_ecdh', and to 0
if you don't. */
#undef HAVE_DECL_SSL_CTX_SET_TMP_ECDH
-/* Define to 1 if you have the declaration of `strlcat', and to 0 if you
+/* Define to 1 if you have the declaration of 'strlcat', and to 0 if you
don't. */
#undef HAVE_DECL_STRLCAT
-/* Define to 1 if you have the declaration of `strlcpy', and to 0 if you
+/* Define to 1 if you have the declaration of 'strlcpy', and to 0 if you
don't. */
#undef HAVE_DECL_STRLCPY
-/* Define to 1 if you have the declaration of `XML_StopParser', and to 0 if
+/* Define to 1 if you have the declaration of 'XML_StopParser', and to 0 if
you don't. */
#undef HAVE_DECL_XML_STOPPARSER
/* Define to 1 if you have the <dlfcn.h> header file. */
#undef HAVE_DLFCN_H
-/* Define to 1 if you have the `DSA_SIG_set0' function. */
+/* Define to 1 if you have the 'DSA_SIG_set0' function. */
#undef HAVE_DSA_SIG_SET0
/* Define to 1 if you have the <endian.h> header file. */
#undef HAVE_ENDIAN_H
-/* Define to 1 if you have the `endprotoent' function. */
+/* Define to 1 if you have the 'endprotoent' function. */
#undef HAVE_ENDPROTOENT
-/* Define to 1 if you have the `endpwent' function. */
+/* Define to 1 if you have the 'endpwent' function. */
#undef HAVE_ENDPWENT
-/* Define to 1 if you have the `endservent' function. */
+/* Define to 1 if you have the 'endservent' function. */
#undef HAVE_ENDSERVENT
-/* Define to 1 if you have the `ENGINE_cleanup' function. */
+/* Define to 1 if you have the 'ENGINE_cleanup' function. */
#undef HAVE_ENGINE_CLEANUP
-/* Define to 1 if you have the `ERR_free_strings' function. */
+/* Define to 1 if you have the 'ERR_free_strings' function. */
#undef HAVE_ERR_FREE_STRINGS
-/* Define to 1 if you have the `ERR_load_crypto_strings' function. */
+/* Define to 1 if you have the 'ERR_load_crypto_strings' function. */
#undef HAVE_ERR_LOAD_CRYPTO_STRINGS
-/* Define to 1 if you have the `event_assign' function. */
+/* Define to 1 if you have the 'event_assign' function. */
#undef HAVE_EVENT_ASSIGN
-/* Define to 1 if you have the `event_base_free' function. */
+/* Define to 1 if you have the 'event_base_free' function. */
#undef HAVE_EVENT_BASE_FREE
-/* Define to 1 if you have the `event_base_get_method' function. */
+/* Define to 1 if you have the 'event_base_get_method' function. */
#undef HAVE_EVENT_BASE_GET_METHOD
-/* Define to 1 if you have the `event_base_new' function. */
+/* Define to 1 if you have the 'event_base_new' function. */
#undef HAVE_EVENT_BASE_NEW
-/* Define to 1 if you have the `event_base_once' function. */
+/* Define to 1 if you have the 'event_base_once' function. */
#undef HAVE_EVENT_BASE_ONCE
/* Define to 1 if you have the <event.h> header file. */
#undef HAVE_EVENT_H
-/* Define to 1 if you have the `EVP_aes_256_cbc' function. */
+/* Define to 1 if you have the 'EVP_aes_256_cbc' function. */
#undef HAVE_EVP_AES_256_CBC
-/* Define to 1 if you have the `EVP_cleanup' function. */
+/* Define to 1 if you have the 'EVP_cleanup' function. */
#undef HAVE_EVP_CLEANUP
-/* Define to 1 if you have the `EVP_default_properties_is_fips_enabled'
+/* Define to 1 if you have the 'EVP_default_properties_is_fips_enabled'
function. */
#undef HAVE_EVP_DEFAULT_PROPERTIES_IS_FIPS_ENABLED
-/* Define to 1 if you have the `EVP_DigestVerify' function. */
+/* Define to 1 if you have the 'EVP_DigestVerify' function. */
#undef HAVE_EVP_DIGESTVERIFY
-/* Define to 1 if you have the `EVP_dss1' function. */
+/* Define to 1 if you have the 'EVP_dss1' function. */
#undef HAVE_EVP_DSS1
-/* Define to 1 if you have the `EVP_EncryptInit_ex' function. */
+/* Define to 1 if you have the 'EVP_EncryptInit_ex' function. */
#undef HAVE_EVP_ENCRYPTINIT_EX
-/* Define to 1 if you have the `EVP_MAC_CTX_set_params' function. */
+/* Define to 1 if you have the 'EVP_MAC_CTX_set_params' function. */
#undef HAVE_EVP_MAC_CTX_SET_PARAMS
-/* Define to 1 if you have the `EVP_MD_CTX_new' function. */
+/* Define to 1 if you have the 'EVP_MD_CTX_new' function. */
#undef HAVE_EVP_MD_CTX_NEW
-/* Define to 1 if you have the `EVP_sha1' function. */
+/* Define to 1 if you have the 'EVP_sha1' function. */
#undef HAVE_EVP_SHA1
-/* Define to 1 if you have the `EVP_sha256' function. */
+/* Define to 1 if you have the 'EVP_sha256' function. */
#undef HAVE_EVP_SHA256
-/* Define to 1 if you have the `EVP_sha512' function. */
+/* Define to 1 if you have the 'EVP_sha512' function. */
#undef HAVE_EVP_SHA512
-/* Define to 1 if you have the `ev_default_loop' function. */
+/* Define to 1 if you have the 'ev_default_loop' function. */
#undef HAVE_EV_DEFAULT_LOOP
-/* Define to 1 if you have the `ev_loop' function. */
+/* Define to 1 if you have the 'ev_loop' function. */
#undef HAVE_EV_LOOP
/* Define to 1 if you have the <expat.h> header file. */
#undef HAVE_EXPAT_H
-/* Define to 1 if you have the `explicit_bzero' function. */
+/* Define to 1 if you have the 'explicit_bzero' function. */
#undef HAVE_EXPLICIT_BZERO
-/* Define to 1 if you have the `fcntl' function. */
+/* Define to 1 if you have the 'fcntl' function. */
#undef HAVE_FCNTL
-/* Define to 1 if you have the `FIPS_mode' function. */
+/* Define to 1 if you have the 'FIPS_mode' function. */
#undef HAVE_FIPS_MODE
-/* Define to 1 if you have the `fork' function. */
+/* Define to 1 if you have the 'fnmatch' function. */
+#undef HAVE_FNMATCH
+
+/* Define to 1 if you have the <fnmatch.h> header file. */
+#undef HAVE_FNMATCH_H
+
+/* Define to 1 if you have the 'fork' function. */
#undef HAVE_FORK
-/* Define to 1 if fseeko (and presumably ftello) exists and is declared. */
+/* Define to 1 if fseeko (and ftello) are declared in stdio.h. */
#undef HAVE_FSEEKO
-/* Define to 1 if you have the `fsync' function. */
+/* Define to 1 if you have the 'fsync' function. */
#undef HAVE_FSYNC
/* Whether getaddrinfo is available */
#undef HAVE_GETADDRINFO
-/* Define to 1 if you have the `getauxval' function. */
+/* Define to 1 if you have the 'getauxval' function. */
#undef HAVE_GETAUXVAL
-/* Define to 1 if you have the `getentropy' function. */
+/* Define to 1 if you have the 'getentropy' function. */
#undef HAVE_GETENTROPY
-/* Define to 1 if you have the `getifaddrs' function. */
+/* Define to 1 if you have the 'getifaddrs' function. */
#undef HAVE_GETIFADDRS
/* Define to 1 if you have the <getopt.h> header file. */
#undef HAVE_GETOPT_H
-/* Define to 1 if you have the `getpwnam' function. */
+/* Define to 1 if you have the 'getpwnam' function. */
#undef HAVE_GETPWNAM
-/* Define to 1 if you have the `getrlimit' function. */
+/* Define to 1 if you have the 'getrlimit' function. */
#undef HAVE_GETRLIMIT
-/* Define to 1 if you have the `gettid' function. */
+/* Define to 1 if you have the 'gettid' function. */
#undef HAVE_GETTID
-/* Define to 1 if you have the `glob' function. */
+/* Define to 1 if you have the 'glob' function. */
#undef HAVE_GLOB
/* Define to 1 if you have the <glob.h> header file. */
#undef HAVE_GLOB_H
-/* Define to 1 if you have the `gmtime_r' function. */
+/* Define to 1 if you have the 'gmtime_r' function. */
#undef HAVE_GMTIME_R
/* Define to 1 if you have the <grp.h> header file. */
@@ -337,7 +353,7 @@
/* Define to 1 if you have the <hiredis/hiredis.h> header file. */
#undef HAVE_HIREDIS_HIREDIS_H
-/* Define to 1 if you have the `HMAC_Init_ex' function. */
+/* Define to 1 if you have the 'HMAC_Init_ex' function. */
#undef HAVE_HMAC_INIT_EX
/* If we have htobe64 */
@@ -346,19 +362,19 @@
/* Define to 1 if you have the <ifaddrs.h> header file. */
#undef HAVE_IFADDRS_H
-/* Define to 1 if you have the `if_nametoindex' function. */
+/* Define to 1 if you have the 'if_nametoindex' function. */
#undef HAVE_IF_NAMETOINDEX
-/* Define to 1 if you have the `inet_aton' function. */
+/* Define to 1 if you have the 'inet_aton' function. */
#undef HAVE_INET_ATON
-/* Define to 1 if you have the `inet_ntop' function. */
+/* Define to 1 if you have the 'inet_ntop' function. */
#undef HAVE_INET_NTOP
-/* Define to 1 if you have the `inet_pton' function. */
+/* Define to 1 if you have the 'inet_pton' function. */
#undef HAVE_INET_PTON
-/* Define to 1 if you have the `initgroups' function. */
+/* Define to 1 if you have the 'initgroups' function. */
#undef HAVE_INITGROUPS
/* Define to 1 if you have the <inttypes.h> header file. */
@@ -370,10 +386,10 @@
/* Define to 1 if you have the <iphlpapi.h> header file. */
#undef HAVE_IPHLPAPI_H
-/* Define to 1 if you have the `isblank' function. */
+/* Define to 1 if you have the 'isblank' function. */
#undef HAVE_ISBLANK
-/* Define to 1 if you have the `kill' function. */
+/* Define to 1 if you have the 'kill' function. */
#undef HAVE_KILL
/* Use portable libbsd functions */
@@ -391,7 +407,7 @@
/* Define to 1 if you have the <linux/net_tstamp.h> header file. */
#undef HAVE_LINUX_NET_TSTAMP_H
-/* Define to 1 if you have the `localtime_r' function. */
+/* Define to 1 if you have the 'localtime_r' function. */
#undef HAVE_LOCALTIME_R
/* Define to 1 if you have the <login_cap.h> header file. */
@@ -400,7 +416,7 @@
/* If have GNU libc compatible malloc */
#undef HAVE_MALLOC
-/* Define to 1 if you have the `memmove' function. */
+/* Define to 1 if you have the 'memmove' function. */
#undef HAVE_MEMMOVE
/* Define to 1 if you have the <minix/config.h> header file. */
@@ -442,52 +458,52 @@
/* Define this to use ngtcp2. */
#undef HAVE_NGTCP2
-/* Define to 1 if you have the `ngtcp2_ccerr_default' function. */
+/* Define to 1 if you have the 'ngtcp2_ccerr_default' function. */
#undef HAVE_NGTCP2_CCERR_DEFAULT
-/* Define to 1 if you have the `ngtcp2_conn_encode_0rtt_transport_params'
+/* Define to 1 if you have the 'ngtcp2_conn_encode_0rtt_transport_params'
function. */
#undef HAVE_NGTCP2_CONN_ENCODE_0RTT_TRANSPORT_PARAMS
-/* Define to 1 if you have the `ngtcp2_conn_get_max_local_streams_uni'
+/* Define to 1 if you have the 'ngtcp2_conn_get_max_local_streams_uni'
function. */
#undef HAVE_NGTCP2_CONN_GET_MAX_LOCAL_STREAMS_UNI
-/* Define to 1 if you have the `ngtcp2_conn_get_num_scid' function. */
+/* Define to 1 if you have the 'ngtcp2_conn_get_num_scid' function. */
#undef HAVE_NGTCP2_CONN_GET_NUM_SCID
-/* Define to 1 if you have the `ngtcp2_conn_in_closing_period' function. */
+/* Define to 1 if you have the 'ngtcp2_conn_in_closing_period' function. */
#undef HAVE_NGTCP2_CONN_IN_CLOSING_PERIOD
-/* Define to 1 if you have the `ngtcp2_conn_in_draining_period' function. */
+/* Define to 1 if you have the 'ngtcp2_conn_in_draining_period' function. */
#undef HAVE_NGTCP2_CONN_IN_DRAINING_PERIOD
/* Define if ngtcp2_conn_shutdown_stream has 4 arguments. */
#undef HAVE_NGTCP2_CONN_SHUTDOWN_STREAM4
-/* Define to 1 if you have the `ngtcp2_conn_tls_early_data_rejected' function.
+/* Define to 1 if you have the 'ngtcp2_conn_tls_early_data_rejected' function.
*/
#undef HAVE_NGTCP2_CONN_TLS_EARLY_DATA_REJECTED
-/* Define to 1 if you have the `ngtcp2_crypto_encrypt_cb' function. */
+/* Define to 1 if you have the 'ngtcp2_crypto_encrypt_cb' function. */
#undef HAVE_NGTCP2_CRYPTO_ENCRYPT_CB
/* Define to 1 if you have the
- `ngtcp2_crypto_quictls_configure_client_context' function. */
+ 'ngtcp2_crypto_quictls_configure_client_context' function. */
#undef HAVE_NGTCP2_CRYPTO_QUICTLS_CONFIGURE_CLIENT_CONTEXT
/* Define to 1 if you have the
- `ngtcp2_crypto_quictls_configure_server_context' function. */
+ 'ngtcp2_crypto_quictls_configure_server_context' function. */
#undef HAVE_NGTCP2_CRYPTO_QUICTLS_CONFIGURE_SERVER_CONTEXT
/* Define to 1 if you have the
- `ngtcp2_crypto_quictls_from_ossl_encryption_level' function. */
+ 'ngtcp2_crypto_quictls_from_ossl_encryption_level' function. */
#undef HAVE_NGTCP2_CRYPTO_QUICTLS_FROM_OSSL_ENCRYPTION_LEVEL
-/* Define to 1 if you have the `ngtcp2_crypto_quictls_init' function. */
+/* Define to 1 if you have the 'ngtcp2_crypto_quictls_init' function. */
#undef HAVE_NGTCP2_CRYPTO_QUICTLS_INIT
-/* Define to 1 if the system has the type `ngtcp2_encryption_level'. */
+/* Define to 1 if the system has the type 'ngtcp2_encryption_level'. */
#undef HAVE_NGTCP2_ENCRYPTION_LEVEL
/* Define to 1 if you have the <ngtcp2/ngtcp2_crypto_openssl.h> header file.
@@ -507,13 +523,16 @@
/* Use libnss for crypto */
#undef HAVE_NSS
-/* Define to 1 if you have the `OpenSSL_add_all_digests' function. */
+/* Define to 1 if you have the 'OpenSSL_add_all_digests' function. */
#undef HAVE_OPENSSL_ADD_ALL_DIGESTS
/* Define to 1 if you have the <openssl/bn.h> header file. */
#undef HAVE_OPENSSL_BN_H
-/* Define to 1 if you have the `OPENSSL_config' function. */
+/* Define to 1 if you have the 'OPENSSL_cleanup' function. */
+#undef HAVE_OPENSSL_CLEANUP
+
+/* Define to 1 if you have the 'OPENSSL_config' function. */
#undef HAVE_OPENSSL_CONFIG
/* Define to 1 if you have the <openssl/conf.h> header file. */
@@ -534,10 +553,10 @@
/* Define to 1 if you have the <openssl/err.h> header file. */
#undef HAVE_OPENSSL_ERR_H
-/* Define to 1 if you have the `OPENSSL_init_crypto' function. */
+/* Define to 1 if you have the 'OPENSSL_init_crypto' function. */
#undef HAVE_OPENSSL_INIT_CRYPTO
-/* Define to 1 if you have the `OPENSSL_init_ssl' function. */
+/* Define to 1 if you have the 'OPENSSL_init_ssl' function. */
#undef HAVE_OPENSSL_INIT_SSL
/* Define to 1 if you have the <openssl/param_build.h> header file. */
@@ -552,10 +571,10 @@
/* Define to 1 if you have the <openssl/ssl.h> header file. */
#undef HAVE_OPENSSL_SSL_H
-/* Define to 1 if you have the `OSSL_PARAM_BLD_new' function. */
+/* Define to 1 if you have the 'OSSL_PARAM_BLD_new' function. */
#undef HAVE_OSSL_PARAM_BLD_NEW
-/* Define to 1 if you have the `poll' function. */
+/* Define to 1 if you have the 'poll' function. */
#undef HAVE_POLL
/* Define to 1 if you have the <poll.h> header file. */
@@ -570,7 +589,7 @@
/* Have PTHREAD_PRIO_INHERIT. */
#undef HAVE_PTHREAD_PRIO_INHERIT
-/* Define to 1 if the system has the type `pthread_rwlock_t'. */
+/* Define to 1 if the system has the type 'pthread_rwlock_t'. */
#undef HAVE_PTHREAD_RWLOCK_T
/* Define if pthread_setname_np has the common 2 arguments. */
@@ -585,7 +604,7 @@
/* Define if pthread_setname_np exists as pthread_set_name_np instead. */
#undef HAVE_PTHREAD_SET_NAME_NP
-/* Define to 1 if the system has the type `pthread_spinlock_t'. */
+/* Define to 1 if the system has the type 'pthread_spinlock_t'. */
#undef HAVE_PTHREAD_SPINLOCK_T
/* Define to 1 if you have the <pwd.h> header file. */
@@ -594,100 +613,107 @@
/* Define if you have Python libraries and header files. */
#undef HAVE_PYTHON
-/* Define to 1 if you have the `random' function. */
+/* Define to 1 if you have the 'random' function. */
#undef HAVE_RANDOM
-/* Define to 1 if you have the `RAND_cleanup' function. */
+/* Define to 1 if you have the 'RAND_cleanup' function. */
#undef HAVE_RAND_CLEANUP
/* If we have reallocarray(3) */
#undef HAVE_REALLOCARRAY
-/* Define to 1 if you have the `recvmsg' function. */
+/* Define to 1 if you have the 'recvmsg' function. */
#undef HAVE_RECVMSG
-/* Define to 1 if you have the `sendmsg' function. */
+/* Define to 1 if you have the 'sendmsg' function. */
#undef HAVE_SENDMSG
-/* Define to 1 if you have the `setregid' function. */
+/* Define to 1 if you have the 'setregid' function. */
#undef HAVE_SETREGID
-/* Define to 1 if you have the `setresgid' function. */
+/* Define to 1 if you have the 'setresgid' function. */
#undef HAVE_SETRESGID
-/* Define to 1 if you have the `setresuid' function. */
+/* Define to 1 if you have the 'setresuid' function. */
#undef HAVE_SETRESUID
-/* Define to 1 if you have the `setreuid' function. */
+/* Define to 1 if you have the 'setreuid' function. */
#undef HAVE_SETREUID
-/* Define to 1 if you have the `setrlimit' function. */
+/* Define to 1 if you have the 'setrlimit' function. */
#undef HAVE_SETRLIMIT
-/* Define to 1 if you have the `setsid' function. */
+/* Define to 1 if you have the 'setsid' function. */
#undef HAVE_SETSID
-/* Define to 1 if you have the `setusercontext' function. */
+/* Define to 1 if you have the 'setusercontext' function. */
#undef HAVE_SETUSERCONTEXT
-/* Define to 1 if you have the `SHA512_Update' function. */
+/* Define to 1 if you have the 'SHA512_Update' function. */
#undef HAVE_SHA512_UPDATE
-/* Define to 1 if you have the `shmget' function. */
+/* Define to 1 if you have the 'shmget' function. */
#undef HAVE_SHMGET
-/* Define to 1 if you have the `sigprocmask' function. */
+/* Define to 1 if you have the 'sigprocmask' function. */
#undef HAVE_SIGPROCMASK
-/* Define to 1 if you have the `sleep' function. */
+/* Define to 1 if you have the 'sleep' function. */
#undef HAVE_SLEEP
-/* Define to 1 if you have the `snprintf' function. */
+/* Define to 1 if you have the 'snprintf' function. */
#undef HAVE_SNPRINTF
-/* Define to 1 if you have the `socketpair' function. */
+/* Define to 1 if you have the 'socketpair' function. */
#undef HAVE_SOCKETPAIR
/* Using Solaris threads */
#undef HAVE_SOLARIS_THREADS
-/* Define to 1 if you have the `srandom' function. */
+/* Define to 1 if you have the 'srandom' function. */
#undef HAVE_SRANDOM
/* Define if you have the SSL libraries installed. */
#undef HAVE_SSL
-/* Define to 1 if you have the `SSL_CTX_set_alpn_protos' function. */
+/* Define to 1 if you have the 'SSL_CTX_set_alpn_protos' function. */
#undef HAVE_SSL_CTX_SET_ALPN_PROTOS
-/* Define to 1 if you have the `SSL_CTX_set_alpn_select_cb' function. */
+/* Define to 1 if you have the 'SSL_CTX_set_alpn_select_cb' function. */
#undef HAVE_SSL_CTX_SET_ALPN_SELECT_CB
-/* Define to 1 if you have the `SSL_CTX_set_ciphersuites' function. */
+/* Define to 1 if you have the 'SSL_CTX_set_ciphersuites' function. */
#undef HAVE_SSL_CTX_SET_CIPHERSUITES
-/* Define to 1 if you have the `SSL_CTX_set_security_level' function. */
+/* Define to 1 if you have the 'SSL_CTX_set_security_level' function. */
#undef HAVE_SSL_CTX_SET_SECURITY_LEVEL
-/* Define to 1 if you have the `SSL_CTX_set_tlsext_ticket_key_evp_cb'
+/* Define to 1 if you have the 'SSL_CTX_set_tlsext_ticket_key_evp_cb'
function. */
#undef HAVE_SSL_CTX_SET_TLSEXT_TICKET_KEY_EVP_CB
-/* Define to 1 if you have the `SSL_get0_alpn_selected' function. */
+/* Define to 1 if you have the 'SSL_get0_alpn_selected' function. */
#undef HAVE_SSL_GET0_ALPN_SELECTED
-/* Define to 1 if you have the `SSL_get0_peername' function. */
+/* Define to 1 if you have the 'SSL_get0_peername' function. */
#undef HAVE_SSL_GET0_PEERNAME
-/* Define to 1 if you have the `SSL_get1_peer_certificate' function. */
+/* Define to 1 if you have the 'SSL_get1_peer_certificate' function. */
#undef HAVE_SSL_GET1_PEER_CERTIFICATE
-/* Define to 1 if you have the `SSL_is_quic' function. */
+/* Define to 1 if you have the 'SSL_is_quic' function. */
#undef HAVE_SSL_IS_QUIC
-/* Define to 1 if you have the `SSL_set1_host' function. */
+/* Define to 1 if you have the 'SSL_set1_dnsname' function. */
+#undef HAVE_SSL_SET1_DNSNAME
+
+/* Define to 1 if you have the 'SSL_set1_host' function. */
#undef HAVE_SSL_SET1_HOST
+/* Define to 1 if you have the 'SSL_set_quic_tls_early_data_enabled' function.
+ */
+#undef HAVE_SSL_SET_QUIC_TLS_EARLY_DATA_ENABLED
+
/* Define to 1 if you have the <stdarg.h> header file. */
#undef HAVE_STDARG_H
@@ -706,7 +732,7 @@
/* Define to 1 if you have the <stdlib.h> header file. */
#undef HAVE_STDLIB_H
-/* Define to 1 if you have the `strftime' function. */
+/* Define to 1 if you have the 'strftime' function. */
#undef HAVE_STRFTIME
/* Define to 1 if you have the <strings.h> header file. */
@@ -715,45 +741,45 @@
/* Define to 1 if you have the <string.h> header file. */
#undef HAVE_STRING_H
-/* Define to 1 if you have the `strlcat' function. */
+/* Define to 1 if you have the 'strlcat' function. */
#undef HAVE_STRLCAT
-/* Define to 1 if you have the `strlcpy' function. */
+/* Define to 1 if you have the 'strlcpy' function. */
#undef HAVE_STRLCPY
-/* Define to 1 if you have the `strptime' function. */
+/* Define to 1 if you have the 'strptime' function. */
#undef HAVE_STRPTIME
-/* Define to 1 if you have the `strsep' function. */
+/* Define to 1 if you have the 'strsep' function. */
#undef HAVE_STRSEP
-/* Define to 1 if `ipi_spec_dst' is a member of `struct in_pktinfo'. */
+/* Define to 1 if 'ipi_spec_dst' is a member of 'struct in_pktinfo'. */
#undef HAVE_STRUCT_IN_PKTINFO_IPI_SPEC_DST
-/* Define to 1 if `tokenlen' is a member of `struct ngtcp2_pkt_hd'. */
+/* Define to 1 if 'tokenlen' is a member of 'struct ngtcp2_pkt_hd'. */
#undef HAVE_STRUCT_NGTCP2_PKT_HD_TOKENLEN
-/* Define to 1 if `max_tx_udp_payload_size' is a member of `struct
+/* Define to 1 if 'max_tx_udp_payload_size' is a member of 'struct
ngtcp2_settings'. */
#undef HAVE_STRUCT_NGTCP2_SETTINGS_MAX_TX_UDP_PAYLOAD_SIZE
-/* Define to 1 if `tokenlen' is a member of `struct ngtcp2_settings'. */
+/* Define to 1 if 'tokenlen' is a member of 'struct ngtcp2_settings'. */
#undef HAVE_STRUCT_NGTCP2_SETTINGS_TOKENLEN
-/* Define to 1 if `original_dcid_present' is a member of `struct
+/* Define to 1 if 'original_dcid_present' is a member of 'struct
ngtcp2_transport_params'. */
#undef HAVE_STRUCT_NGTCP2_TRANSPORT_PARAMS_ORIGINAL_DCID_PRESENT
-/* Define to 1 if the system has the type `struct ngtcp2_version_cid'. */
+/* Define to 1 if the system has the type 'struct ngtcp2_version_cid'. */
#undef HAVE_STRUCT_NGTCP2_VERSION_CID
-/* Define to 1 if `sun_len' is a member of `struct sockaddr_un'. */
+/* Define to 1 if 'sun_len' is a member of 'struct sockaddr_un'. */
#undef HAVE_STRUCT_SOCKADDR_UN_SUN_LEN
-/* Define to 1 if `st_mtimensec' is a member of `struct stat'. */
+/* Define to 1 if 'st_mtimensec' is a member of 'struct stat'. */
#undef HAVE_STRUCT_STAT_ST_MTIMENSEC
-/* Define to 1 if `st_mtim.tv_nsec' is a member of `struct stat'. */
+/* Define to 1 if 'st_mtim.tv_nsec' is a member of 'struct stat'. */
#undef HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC
/* Define if you have Swig libraries and header files. */
@@ -813,16 +839,16 @@
/* Define to 1 if you have the <time.h> header file. */
#undef HAVE_TIME_H
-/* Define to 1 if you have the `tzset' function. */
+/* Define to 1 if you have the 'tzset' function. */
#undef HAVE_TZSET
/* Define to 1 if you have the <unistd.h> header file. */
#undef HAVE_UNISTD_H
-/* Define to 1 if you have the `usleep' function. */
+/* Define to 1 if you have the 'usleep' function. */
#undef HAVE_USLEEP
-/* Define to 1 if you have the `vfork' function. */
+/* Define to 1 if you have the 'vfork' function. */
#undef HAVE_VFORK
/* Define to 1 if you have the <vfork.h> header file. */
@@ -840,22 +866,28 @@
/* Define to 1 if you have the <winsock2.h> header file. */
#undef HAVE_WINSOCK2_H
-/* Define to 1 if `fork' works. */
+/* Define to 1 if 'fork' works. */
#undef HAVE_WORKING_FORK
-/* Define to 1 if `vfork' works. */
+/* Define to 1 if 'vfork' works. */
#undef HAVE_WORKING_VFORK
-/* Define to 1 if you have the `writev' function. */
+/* Define to 1 if you have the 'writev' function. */
#undef HAVE_WRITEV
/* Define to 1 if you have the <ws2tcpip.h> header file. */
#undef HAVE_WS2TCPIP_H
-/* Define to 1 if you have the `X509_VERIFY_PARAM_set1_host' function. */
+/* Define to 1 if you have the 'X509_get_key_usage' function. */
+#undef HAVE_X509_GET_KEY_USAGE
+
+/* Define to 1 if you have the 'X509_NAME_get_text_by_NID' function. */
+#undef HAVE_X509_NAME_GET_TEXT_BY_NID
+
+/* Define to 1 if you have the 'X509_VERIFY_PARAM_set1_host' function. */
#undef HAVE_X509_VERIFY_PARAM_SET1_HOST
-/* Define to 1 if you have the `_beginthreadex' function. */
+/* Define to 1 if you have the '_beginthreadex' function. */
#undef HAVE__BEGINTHREADEX
/* If HMAC_Init_ex() returns void */
@@ -954,16 +986,16 @@
/* Shared data */
#undef SHARE_DIR
-/* The size of `pthread_t', as computed by sizeof. */
+/* The size of 'pthread_t', as computed by sizeof. */
#undef SIZEOF_PTHREAD_T
-/* The size of `size_t', as computed by sizeof. */
+/* The size of 'size_t', as computed by sizeof. */
#undef SIZEOF_SIZE_T
-/* The size of `time_t', as computed by sizeof. */
+/* The size of 'time_t', as computed by sizeof. */
#undef SIZEOF_TIME_T
-/* The size of `unsigned long', as computed by sizeof. */
+/* The size of 'unsigned long', as computed by sizeof. */
#undef SIZEOF_UNSIGNED_LONG
/* define if (v)snprintf does not return length needed, (but length used) */
@@ -972,7 +1004,7 @@
/* Define to 1 if libsodium supports sodium_set_misuse_handler */
#undef SODIUM_MISUSE_HANDLER
-/* Define to 1 if all of the C90 standard headers exist (not just the ones
+/* Define to 1 if all of the C89 standard headers exist (not just the ones
required in a freestanding environment). This macro is provided for
backward compatibility; new code need not use it. */
#undef STDC_HEADERS
@@ -1069,7 +1101,7 @@
/* Define this to enable SHA256 and SHA512 support. */
#undef USE_SHA2
-/* Enable extensions on AIX 3, Interix. */
+/* Enable extensions on AIX, Interix, z/OS. */
#ifndef _ALL_SOURCE
# undef _ALL_SOURCE
#endif
@@ -1130,11 +1162,15 @@
#ifndef __STDC_WANT_IEC_60559_DFP_EXT__
# undef __STDC_WANT_IEC_60559_DFP_EXT__
#endif
+/* Enable extensions specified by C23 Annex F. */
+#ifndef __STDC_WANT_IEC_60559_EXT__
+# undef __STDC_WANT_IEC_60559_EXT__
+#endif
/* Enable extensions specified by ISO/IEC TS 18661-4:2015. */
#ifndef __STDC_WANT_IEC_60559_FUNCS_EXT__
# undef __STDC_WANT_IEC_60559_FUNCS_EXT__
#endif
-/* Enable extensions specified by ISO/IEC TS 18661-3:2015. */
+/* Enable extensions specified by C23 Annex H and ISO/IEC TS 18661-3:2015. */
#ifndef __STDC_WANT_IEC_60559_TYPES_EXT__
# undef __STDC_WANT_IEC_60559_TYPES_EXT__
#endif
@@ -1175,30 +1211,36 @@
/* Define if you want PyUnbound. */
#undef WITH_PYUNBOUND
-/* Define to 1 if `lex' declares `yytext' as a `char *' by default, not a
- `char[]'. */
+/* Define to 1 if 'lex' declares 'yytext' as a 'char *' by default, not a
+ 'char[]'. */
#undef YYTEXT_POINTER
/* Number of bits in a file offset, on hosts where this is settable. */
#undef _FILE_OFFSET_BITS
-/* Define to 1 to make fseeko visible on some hosts (e.g. glibc 2.2). */
+/* Define to 1 if necessary to make fseeko visible. */
#undef _LARGEFILE_SOURCE
-/* Define for large files, on AIX-style hosts. */
+/* Define to 1 on platforms where this makes off_t a 64-bit type. */
#undef _LARGE_FILES
/* Enable for compile on Minix */
#undef _NETBSD_SOURCE
+/* Number of bits in time_t, on hosts where this is settable. */
+#undef _TIME_BITS
+
+/* Define to 1 on platforms where this makes time_t a 64-bit type. */
+#undef __MINGW_USE_VC2005_COMPAT
+
/* defined to use gcc ansi snprintf and sscanf that understands %lld when
compiled for windows. */
#undef __USE_MINGW_ANSI_STDIO
-/* Define to empty if `const' does not conform to ANSI C. */
+/* Define to empty if 'const' does not conform to ANSI C. */
#undef const
-/* Define to `int' if <sys/types.h> doesn't define. */
+/* Define as 'int' if <sys/types.h> doesn't define. */
#undef gid_t
/* in_addr_t */
@@ -1207,28 +1249,28 @@
/* in_port_t */
#undef in_port_t
-/* Define to `__inline__' or `__inline' if that's what the C compiler
+/* Define to '__inline__' or '__inline' if that's what the C compiler
calls it, or to nothing if 'inline' is not supported under any name. */
#ifndef __cplusplus
#undef inline
#endif
-/* Define to `short' if <sys/types.h> does not define. */
+/* Define to 'short' if <sys/types.h> does not define. */
#undef int16_t
-/* Define to `int' if <sys/types.h> does not define. */
+/* Define to 'int' if <sys/types.h> does not define. */
#undef int32_t
-/* Define to `long long' if <sys/types.h> does not define. */
+/* Define to 'long long' if <sys/types.h> does not define. */
#undef int64_t
-/* Define to `signed char' if <sys/types.h> does not define. */
+/* Define to 'signed char' if <sys/types.h> does not define. */
#undef int8_t
/* Define if replacement function should be used. */
#undef malloc
-/* Define to `long int' if <sys/types.h> does not define. */
+/* Define to 'long int' if <sys/types.h> does not define. */
#undef off_t
/* Define as a signed integer type capable of holding a process identifier. */
@@ -1237,34 +1279,34 @@
/* Define to 'int' if not defined */
#undef rlim_t
-/* Define to `unsigned int' if <sys/types.h> does not define. */
+/* Define as 'unsigned int' if <stddef.h> doesn't define. */
#undef size_t
/* Define to 'int' if not defined */
#undef socklen_t
-/* Define to `int' if <sys/types.h> does not define. */
+/* Define to 'int' if <sys/types.h> does not define. */
#undef ssize_t
/* Define to 'unsigned char if not defined */
#undef u_char
-/* Define to `int' if <sys/types.h> doesn't define. */
+/* Define as 'int' if <sys/types.h> doesn't define. */
#undef uid_t
-/* Define to `unsigned short' if <sys/types.h> does not define. */
+/* Define to 'unsigned short' if <sys/types.h> does not define. */
#undef uint16_t
-/* Define to `unsigned int' if <sys/types.h> does not define. */
+/* Define to 'unsigned int' if <sys/types.h> does not define. */
#undef uint32_t
-/* Define to `unsigned long long' if <sys/types.h> does not define. */
+/* Define to 'unsigned long long' if <sys/types.h> does not define. */
#undef uint64_t
-/* Define to `unsigned char' if <sys/types.h> does not define. */
+/* Define to 'unsigned char' if <sys/types.h> does not define. */
#undef uint8_t
-/* Define as `fork' if `vfork' does not work. */
+/* Define as 'fork' if 'vfork' does not work. */
#undef vfork
#if defined(OMITTED__D_GNU_SOURCE) && !defined(_GNU_SOURCE)
diff --git a/config.sub b/config.sub
index 404aa0824443..743b8c28eef5 100755
--- a/config.sub
+++ b/config.sub
@@ -1,10 +1,10 @@
-#! /bin/sh
+#!/usr/bin/sh
# Configuration validation subroutine script.
-# Copyright 1992-2026 Free Software Foundation, Inc.
+# Copyright 1992-2024 Free Software Foundation, Inc.
# shellcheck disable=SC2006,SC2268,SC2162 # see below for rationale
-timestamp='2026-05-17'
+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
@@ -76,7 +76,7 @@ Report bugs and patches to <config-patches@gnu.org>."
version="\
GNU config.sub ($timestamp)
-Copyright 1992-2026 Free Software Foundation, Inc.
+Copyright 1992-2024 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -145,7 +145,6 @@ case $1 in
| kfreebsd*-gnu* \
| knetbsd*-gnu* \
| kopensolaris*-gnu* \
- | ironclad-* \
| linux-* \
| managarm-* \
| netbsd*-eabi* \
@@ -243,6 +242,7 @@ case $1 in
| rombug \
| semi \
| sequent* \
+ | siemens \
| sgi* \
| siemens \
| sim \
@@ -261,7 +261,7 @@ case $1 in
basic_machine=$field1-$field2
basic_os=
;;
- tock* | zephyr*)
+ zephyr*)
basic_machine=$field1-unknown
basic_os=$field2
;;
@@ -1194,7 +1194,7 @@ case $cpu-$vendor in
xscale-* | xscalee[bl]-*)
cpu=`echo "$cpu" | sed 's/^xscale/arm/'`
;;
- arm64-* | aarch64le-* | arm64_32-*)
+ arm64-* | aarch64le-*)
cpu=aarch64
;;
@@ -1321,7 +1321,6 @@ case $cpu-$vendor in
| i960 \
| ia16 \
| ia64 \
- | intelgt \
| ip2k \
| iq2000 \
| javascript \
@@ -1432,7 +1431,6 @@ case $cpu-$vendor in
| sparcv9v \
| spu \
| sv1 \
- | sw_64 \
| sx* \
| tahoe \
| thumbv7* \
@@ -1524,10 +1522,6 @@ EOF
kernel=nto
os=`echo "$basic_os" | sed -e 's|nto|qnx|'`
;;
- ironclad*)
- kernel=ironclad
- os=`echo "$basic_os" | sed -e 's|ironclad|gnu|'`
- ;;
linux*)
kernel=linux
os=`echo "$basic_os" | sed -e 's|linux|gnu|'`
@@ -1982,7 +1976,6 @@ case $os in
| atheos* \
| auroraux* \
| aux* \
- | banan_os* \
| beos* \
| bitrig* \
| bme* \
@@ -2029,6 +2022,7 @@ case $os in
| ios* \
| iris* \
| irix* \
+ | ironclad* \
| isc* \
| its* \
| l4re* \
@@ -2124,7 +2118,6 @@ case $os in
| sysv* \
| tenex* \
| tirtos* \
- | tock* \
| toppers* \
| tops10* \
| tops20* \
@@ -2221,8 +2214,6 @@ case $kernel-$os-$obj in
;;
uclinux-uclibc*- | uclinux-gnu*- )
;;
- ironclad-gnu*- | ironclad-mlibc*- )
- ;;
managarm-mlibc*- | managarm-kernel*- )
;;
windows*-msvc*-)
@@ -2258,8 +2249,6 @@ case $kernel-$os-$obj in
;;
*-eabi*- | *-gnueabi*-)
;;
- ios*-simulator- | tvos*-simulator- | watchos*-simulator- )
- ;;
none--*)
# None (no kernel, i.e. freestanding / bare metal),
# can be paired with an machine code file format
@@ -2358,8 +2347,8 @@ echo "$cpu-$vendor${kernel:+-$kernel}${os:+-$os}${obj:+-$obj}"
exit
# Local variables:
-# eval: (add-hook 'before-save-hook 'time-stamp nil t)
+# eval: (add-hook 'before-save-hook 'time-stamp)
# time-stamp-start: "timestamp='"
-# time-stamp-format: "%Y-%02m-%02d"
+# time-stamp-format: "%:y-%02m-%02d"
# time-stamp-end: "'"
# End:
diff --git a/configure b/configure
index 9efc0bafd338..2273b5d76e3b 100755
--- a/configure
+++ b/configure
@@ -1,11 +1,11 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.71 for unbound 1.25.2.
+# Generated by GNU Autoconf 2.72 for unbound 1.26.0.
#
# Report bugs to <unbound-bugs@nlnetlabs.nl or https://github.com/NLnetLabs/unbound/issues>.
#
#
-# Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation,
+# Copyright (C) 1992-1996, 1998-2017, 2020-2023 Free Software Foundation,
# Inc.
#
#
@@ -17,7 +17,6 @@
# Be more Bourne compatible
DUALCASE=1; export DUALCASE # for MKS sh
-as_nop=:
if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1
then :
emulate sh
@@ -26,12 +25,13 @@ then :
# is contrary to our usage. Disable this feature.
alias -g '${1+"$@"}'='"$@"'
setopt NO_GLOB_SUBST
-else $as_nop
- case `(set -o) 2>/dev/null` in #(
+else case e in #(
+ e) case `(set -o) 2>/dev/null` in #(
*posix*) :
set -o posix ;; #(
*) :
;;
+esac ;;
esac
fi
@@ -103,7 +103,7 @@ IFS=$as_save_IFS
;;
esac
-# We did not find ourselves, most probably we were run as `sh COMMAND'
+# We did not find ourselves, most probably we were run as 'sh COMMAND'
# in which case we are not to be found in the path.
if test "x$as_myself" = x; then
as_myself=$0
@@ -133,15 +133,14 @@ case $- in # ((((
esac
exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
# Admittedly, this is quite paranoid, since all the known shells bail
-# out after a failed `exec'.
+# out after a failed 'exec'.
printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2
exit 255
fi
# We don't want this to propagate to other subprocesses.
{ _as_can_reexec=; unset _as_can_reexec;}
if test "x$CONFIG_SHELL" = x; then
- as_bourne_compatible="as_nop=:
-if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1
+ as_bourne_compatible="if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1
then :
emulate sh
NULLCMD=:
@@ -149,12 +148,13 @@ then :
# is contrary to our usage. Disable this feature.
alias -g '\${1+\"\$@\"}'='\"\$@\"'
setopt NO_GLOB_SUBST
-else \$as_nop
- case \`(set -o) 2>/dev/null\` in #(
+else case e in #(
+ e) case \`(set -o) 2>/dev/null\` in #(
*posix*) :
set -o posix ;; #(
*) :
;;
+esac ;;
esac
fi
"
@@ -172,8 +172,9 @@ as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
if ( set x; as_fn_ret_success y && test x = \"\$1\" )
then :
-else \$as_nop
- exitcode=1; echo positional parameters were not saved.
+else case e in #(
+ e) exitcode=1; echo positional parameters were not saved. ;;
+esac
fi
test x\$exitcode = x0 || exit 1
blah=\$(echo \$(echo blah))
@@ -195,14 +196,15 @@ test \$(( 1 + 1 )) = 2 || exit 1
if (eval "$as_required") 2>/dev/null
then :
as_have_required=yes
-else $as_nop
- as_have_required=no
+else case e in #(
+ e) as_have_required=no ;;
+esac
fi
if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null
then :
-else $as_nop
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+else case e in #(
+ e) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
as_found=false
for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
do
@@ -235,12 +237,13 @@ IFS=$as_save_IFS
if $as_found
then :
-else $as_nop
- if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
+else case e in #(
+ e) if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null
then :
CONFIG_SHELL=$SHELL as_have_required=yes
-fi
+fi ;;
+esac
fi
@@ -262,7 +265,7 @@ case $- in # ((((
esac
exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
# Admittedly, this is quite paranoid, since all the known shells bail
-# out after a failed `exec'.
+# out after a failed 'exec'.
printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2
exit 255
fi
@@ -283,7 +286,8 @@ $0: message. Then install a modern shell, or manually run
$0: the script under such a shell if you do have one."
fi
exit 1
-fi
+fi ;;
+esac
fi
fi
SHELL=${CONFIG_SHELL-/bin/sh}
@@ -322,14 +326,6 @@ as_fn_exit ()
as_fn_set_status $1
exit $1
} # as_fn_exit
-# as_fn_nop
-# ---------
-# Do nothing but, unlike ":", preserve the value of $?.
-as_fn_nop ()
-{
- return $?
-}
-as_nop=as_fn_nop
# as_fn_mkdir_p
# -------------
@@ -398,11 +394,12 @@ then :
{
eval $1+=\$2
}'
-else $as_nop
- as_fn_append ()
+else case e in #(
+ e) as_fn_append ()
{
eval $1=\$$1\$2
- }
+ } ;;
+esac
fi # as_fn_append
# as_fn_arith ARG...
@@ -416,21 +413,14 @@ then :
{
as_val=$(( $* ))
}'
-else $as_nop
- as_fn_arith ()
+else case e in #(
+ e) as_fn_arith ()
{
as_val=`expr "$@" || test $? -eq 1`
- }
+ } ;;
+esac
fi # as_fn_arith
-# as_fn_nop
-# ---------
-# Do nothing but, unlike ":", preserve the value of $?.
-as_fn_nop ()
-{
- return $?
-}
-as_nop=as_fn_nop
# as_fn_error STATUS ERROR [LINENO LOG_FD]
# ----------------------------------------
@@ -504,6 +494,8 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits
/[$]LINENO/=
' <$as_myself |
sed '
+ t clear
+ :clear
s/[$]LINENO.*/&-/
t lineno
b
@@ -552,7 +544,6 @@ esac
as_echo='printf %s\n'
as_echo_n='printf %s'
-
rm -f conf$$ conf$$.exe conf$$.file
if test -d conf$$.dir; then
rm -f conf$$.dir/conf$$.file
@@ -564,9 +555,9 @@ if (echo >conf$$.file) 2>/dev/null; then
if ln -s conf$$.file conf$$ 2>/dev/null; then
as_ln_s='ln -s'
# ... but there are two gotchas:
- # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
- # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
- # In both cases, we have to default to `cp -pR'.
+ # 1) On MSYS, both 'ln -s file dir' and 'ln file dir' fail.
+ # 2) DJGPP < 2.04 has no symlinks; 'ln -s' creates a wrapper executable.
+ # In both cases, we have to default to 'cp -pR'.
ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
as_ln_s='cp -pR'
elif ln conf$$.file conf$$ 2>/dev/null; then
@@ -591,10 +582,12 @@ as_test_x='test -x'
as_executable_p=as_fn_executable_p
# Sed expression to map a string onto a valid CPP name.
-as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+as_sed_cpp="y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g"
+as_tr_cpp="eval sed '$as_sed_cpp'" # deprecated
# Sed expression to map a string onto a valid variable name.
-as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+as_sed_sh="y%*+%pp%;s%[^_$as_cr_alnum]%_%g"
+as_tr_sh="eval sed '$as_sed_sh'" # deprecated
SHELL=${CONFIG_SHELL-/bin/sh}
@@ -622,8 +615,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='unbound'
PACKAGE_TARNAME='unbound'
-PACKAGE_VERSION='1.25.2'
-PACKAGE_STRING='unbound 1.25.2'
+PACKAGE_VERSION='1.26.0'
+PACKAGE_STRING='unbound 1.26.0'
PACKAGE_BUGREPORT='unbound-bugs@nlnetlabs.nl or https://github.com/NLnetLabs/unbound/issues'
PACKAGE_URL=''
@@ -660,6 +653,7 @@ ac_includes_default="\
ac_header_c_list=
ac_func_c_list=
+enable_year2038=no
ac_subst_vars='LTLIBOBJS
date
version
@@ -748,6 +742,7 @@ PTHREAD_LIBS
PTHREAD_CXX
PTHREAD_CC
ax_pthread_config
+CPP
ASYNCLOOK_ALLOCCHECK_EXTRA_OBJ
SLDNS_ALLOCCHECK_EXTRA_OBJ
USE_SYSTEMD_FALSE
@@ -758,7 +753,6 @@ SYSTEMD_LIBS
SYSTEMD_CFLAGS
RUNTIME_PATH
LIBOBJS
-CPP
PKG_CONFIG_LIBDIR
PKG_CONFIG_PATH
PKG_CONFIG
@@ -944,6 +938,7 @@ with_libmnl
enable_explicit_port_randomisation
enable_linux_ip_local_port_range
with_libunbound_only
+enable_year2038
'
ac_precious_vars='build_alias
host_alias
@@ -959,11 +954,11 @@ LT_SYS_LIBRARY_PATH
PKG_CONFIG
PKG_CONFIG_PATH
PKG_CONFIG_LIBDIR
-CPP
SYSTEMD_CFLAGS
SYSTEMD_LIBS
SYSTEMD_DAEMON_CFLAGS
SYSTEMD_DAEMON_LIBS
+CPP
PYTHON_VERSION
SOURCE_DATE_EPOCH
PROTOBUFC_CFLAGS
@@ -1076,7 +1071,7 @@ do
ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
# Reject names that are not valid shell variable names.
expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid feature name: \`$ac_useropt'"
+ as_fn_error $? "invalid feature name: '$ac_useropt'"
ac_useropt_orig=$ac_useropt
ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'`
case $ac_user_opts in
@@ -1102,7 +1097,7 @@ do
ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
# Reject names that are not valid shell variable names.
expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid feature name: \`$ac_useropt'"
+ as_fn_error $? "invalid feature name: '$ac_useropt'"
ac_useropt_orig=$ac_useropt
ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'`
case $ac_user_opts in
@@ -1315,7 +1310,7 @@ do
ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
# Reject names that are not valid shell variable names.
expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid package name: \`$ac_useropt'"
+ as_fn_error $? "invalid package name: '$ac_useropt'"
ac_useropt_orig=$ac_useropt
ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'`
case $ac_user_opts in
@@ -1331,7 +1326,7 @@ do
ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
# Reject names that are not valid shell variable names.
expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid package name: \`$ac_useropt'"
+ as_fn_error $? "invalid package name: '$ac_useropt'"
ac_useropt_orig=$ac_useropt
ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'`
case $ac_user_opts in
@@ -1361,8 +1356,8 @@ do
| --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
x_libraries=$ac_optarg ;;
- -*) as_fn_error $? "unrecognized option: \`$ac_option'
-Try \`$0 --help' for more information"
+ -*) as_fn_error $? "unrecognized option: '$ac_option'
+Try '$0 --help' for more information"
;;
*=*)
@@ -1370,7 +1365,7 @@ Try \`$0 --help' for more information"
# Reject names that are not valid shell variable names.
case $ac_envvar in #(
'' | [0-9]* | *[!_$as_cr_alnum]* )
- as_fn_error $? "invalid variable name: \`$ac_envvar'" ;;
+ as_fn_error $? "invalid variable name: '$ac_envvar'" ;;
esac
eval $ac_envvar=\$ac_optarg
export $ac_envvar ;;
@@ -1420,7 +1415,7 @@ do
as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val"
done
-# There might be people who depend on the old broken behavior: `$host'
+# There might be people who depend on the old broken behavior: '$host'
# used to hold the argument of --host etc.
# FIXME: To remove some day.
build=$build_alias
@@ -1488,7 +1483,7 @@ if test ! -r "$srcdir/$ac_unique_file"; then
test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir"
fi
-ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
+ac_msg="sources are in $srcdir, but 'cd $srcdir' does not work"
ac_abs_confdir=`(
cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg"
pwd)`
@@ -1516,7 +1511,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.25.2 to adapt to many kinds of systems.
+'configure' configures unbound 1.26.0 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1530,11 +1525,11 @@ Configuration:
--help=short display options specific to this package
--help=recursive display the short help of all the included packages
-V, --version display version information and exit
- -q, --quiet, --silent do not print \`checking ...' messages
+ -q, --quiet, --silent do not print 'checking ...' messages
--cache-file=FILE cache test results in FILE [disabled]
- -C, --config-cache alias for \`--cache-file=config.cache'
+ -C, --config-cache alias for '--cache-file=config.cache'
-n, --no-create do not create output files
- --srcdir=DIR find the sources in DIR [configure dir or \`..']
+ --srcdir=DIR find the sources in DIR [configure dir or '..']
Installation directories:
--prefix=PREFIX install architecture-independent files in PREFIX
@@ -1542,10 +1537,10 @@ Installation directories:
--exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
[PREFIX]
-By default, \`make install' will install all the files in
-\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify
-an installation prefix other than \`$ac_default_prefix' using \`--prefix',
-for instance \`--prefix=\$HOME'.
+By default, 'make install' will install all the files in
+'$ac_default_prefix/bin', '$ac_default_prefix/lib' etc. You can specify
+an installation prefix other than '$ac_default_prefix' using '--prefix',
+for instance '--prefix=\$HOME'.
For better control, use the options below.
@@ -1582,7 +1577,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of unbound 1.25.2:";;
+ short | recursive ) echo "Configuration of unbound 1.26.0:";;
esac
cat <<\_ACEOF
@@ -1663,6 +1658,7 @@ Optional Features:
randomness. Define this only when the target system
restricts (e.g. some of SELinux enabled
distributions) the use of non-ephemeral ports.
+ --enable-year2038 support timestamps after 2038
Optional Packages:
--with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
@@ -1733,12 +1729,12 @@ Some influential environment variables:
LIBS libraries to pass to the linker, e.g. -l<library>
CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
you have headers in a nonstandard directory <include dir>
- YACC The `Yet Another Compiler Compiler' implementation to use.
- Defaults to the first program found out of: `bison -y', `byacc',
- `yacc'.
+ YACC The 'Yet Another Compiler Compiler' implementation to use.
+ Defaults to the first program found out of: 'bison -y', 'byacc',
+ 'yacc'.
YFLAGS The list of arguments that will be passed by default to $YACC.
This script will default YFLAGS to the empty string to avoid a
- default value of `-d' given by some make applications.
+ default value of '-d' given by some make applications.
LT_SYS_LIBRARY_PATH
User-defined run-time library search path.
PKG_CONFIG path to pkg-config utility
@@ -1746,7 +1742,6 @@ Some influential environment variables:
directories to add to pkg-config's search path
PKG_CONFIG_LIBDIR
path overriding pkg-config's built-in search path
- CPP C preprocessor
SYSTEMD_CFLAGS
C compiler flags for SYSTEMD, overriding pkg-config
SYSTEMD_LIBS
@@ -1755,6 +1750,7 @@ Some influential environment variables:
C compiler flags for SYSTEMD_DAEMON, overriding pkg-config
SYSTEMD_DAEMON_LIBS
linker flags for SYSTEMD_DAEMON, overriding pkg-config
+ CPP C preprocessor
PYTHON_VERSION
The installed Python version to use, for example '2.3'. This
string will be appended to the Python interpreter canonical
@@ -1768,7 +1764,7 @@ Some influential environment variables:
PROTOBUFC_LIBS
linker flags for PROTOBUFC, overriding pkg-config
-Use these variables to override the choices made by `configure' or to help
+Use these variables to override the choices made by 'configure' or to help
it to find libraries and programs with nonstandard names/locations.
Report bugs to <unbound-bugs@nlnetlabs.nl or https://github.com/NLnetLabs/unbound/issues>.
@@ -1835,10 +1831,10 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-unbound configure 1.25.2
-generated by GNU Autoconf 2.71
+unbound configure 1.26.0
+generated by GNU Autoconf 2.72
-Copyright (C) 2021 Free Software Foundation, Inc.
+Copyright (C) 2023 Free Software Foundation, Inc.
This configure script is free software; the Free Software Foundation
gives unlimited permission to copy, distribute and modify it.
_ACEOF
@@ -1877,11 +1873,12 @@ printf "%s\n" "$ac_try_echo"; } >&5
} && test -s conftest.$ac_objext
then :
ac_retval=0
-else $as_nop
- printf "%s\n" "$as_me: failed program was:" >&5
+else case e in #(
+ e) printf "%s\n" "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
- ac_retval=1
+ ac_retval=1 ;;
+esac
fi
eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
as_fn_set_status $ac_retval
@@ -1900,8 +1897,8 @@ printf %s "checking for $2... " >&6; }
if eval test \${$3+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+else case e in #(
+ e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
$4
#include <$2>
@@ -1909,10 +1906,12 @@ _ACEOF
if ac_fn_c_try_compile "$LINENO"
then :
eval "$3=yes"
-else $as_nop
- eval "$3=no"
+else case e in #(
+ e) eval "$3=no" ;;
+esac
fi
-rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;;
+esac
fi
eval ac_res=\$$3
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
@@ -1952,11 +1951,12 @@ printf "%s\n" "$ac_try_echo"; } >&5
}
then :
ac_retval=0
-else $as_nop
- printf "%s\n" "$as_me: failed program was:" >&5
+else case e in #(
+ e) printf "%s\n" "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
- ac_retval=1
+ ac_retval=1 ;;
+esac
fi
# Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
# created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
@@ -1979,15 +1979,15 @@ printf %s "checking for $2... " >&6; }
if eval test \${$3+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+else case e in #(
+ e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
/* Define $2 to an innocuous variant, in case <limits.h> declares $2.
For example, HP-UX 11i <limits.h> declares gettimeofday. */
#define $2 innocuous_$2
/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $2 (); below. */
+ which can conflict with char $2 (void); below. */
#include <limits.h>
#undef $2
@@ -1998,7 +1998,7 @@ else $as_nop
#ifdef __cplusplus
extern "C"
#endif
-char $2 ();
+char $2 (void);
/* The GNU C library defines this for functions which it implements
to always fail with ENOSYS. Some functions are actually named
something starting with __ and the normal name is an alias. */
@@ -2017,11 +2017,13 @@ _ACEOF
if ac_fn_c_try_link "$LINENO"
then :
eval "$3=yes"
-else $as_nop
- eval "$3=no"
+else case e in #(
+ e) eval "$3=no" ;;
+esac
fi
rm -f core conftest.err conftest.$ac_objext conftest.beam \
- conftest$ac_exeext conftest.$ac_ext
+ conftest$ac_exeext conftest.$ac_ext ;;
+esac
fi
eval ac_res=\$$3
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
@@ -2042,8 +2044,8 @@ printf %s "checking for $2... " >&6; }
if eval test \${$3+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- eval "$3=no"
+else case e in #(
+ e) eval "$3=no"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
$4
@@ -2073,12 +2075,14 @@ _ACEOF
if ac_fn_c_try_compile "$LINENO"
then :
-else $as_nop
- eval "$3=yes"
+else case e in #(
+ e) eval "$3=yes" ;;
+esac
fi
rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
-rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;;
+esac
fi
eval ac_res=\$$3
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
@@ -2087,44 +2091,6 @@ printf "%s\n" "$ac_res" >&6; }
} # ac_fn_c_check_type
-# ac_fn_c_try_cpp LINENO
-# ----------------------
-# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
-ac_fn_c_try_cpp ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- if { { ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-printf "%s\n" "$ac_try_echo"; } >&5
- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
- ac_status=$?
- if test -s conftest.err; then
- grep -v '^ *+' conftest.err >conftest.er1
- cat conftest.er1 >&5
- mv -f conftest.er1 conftest.err
- fi
- printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } > conftest.i && {
- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
- test ! -s conftest.err
- }
-then :
- ac_retval=0
-else $as_nop
- printf "%s\n" "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_retval=1
-fi
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
- as_fn_set_status $ac_retval
-
-} # ac_fn_c_try_cpp
-
# ac_fn_c_try_run LINENO
# ----------------------
# Try to run conftest.$ac_ext, and return whether this succeeded. Assumes that
@@ -2155,12 +2121,13 @@ printf "%s\n" "$ac_try_echo"; } >&5
test $ac_status = 0; }; }
then :
ac_retval=0
-else $as_nop
- printf "%s\n" "$as_me: program exited with status $ac_status" >&5
+else case e in #(
+ e) printf "%s\n" "$as_me: program exited with status $ac_status" >&5
printf "%s\n" "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
- ac_retval=$ac_status
+ ac_retval=$ac_status ;;
+esac
fi
rm -rf conftest.dSYM conftest_ipa8_conftest.oo
eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
@@ -2213,18 +2180,19 @@ _ACEOF
if ac_fn_c_try_compile "$LINENO"
then :
ac_hi=$ac_mid; break
-else $as_nop
- as_fn_arith $ac_mid + 1 && ac_lo=$as_val
+else case e in #(
+ e) as_fn_arith $ac_mid + 1 && ac_lo=$as_val
if test $ac_lo -le $ac_mid; then
ac_lo= ac_hi=
break
fi
- as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val
+ as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val ;;
+esac
fi
rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
done
-else $as_nop
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+else case e in #(
+ e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
$4
int
@@ -2259,20 +2227,23 @@ _ACEOF
if ac_fn_c_try_compile "$LINENO"
then :
ac_lo=$ac_mid; break
-else $as_nop
- as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val
+else case e in #(
+ e) as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val
if test $ac_mid -le $ac_hi; then
ac_lo= ac_hi=
break
fi
- as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val
+ as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val ;;
+esac
fi
rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
done
-else $as_nop
- ac_lo= ac_hi=
+else case e in #(
+ e) ac_lo= ac_hi= ;;
+esac
fi
-rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;;
+esac
fi
rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
# Binary search between lo and hi bounds.
@@ -2295,8 +2266,9 @@ _ACEOF
if ac_fn_c_try_compile "$LINENO"
then :
ac_hi=$ac_mid
-else $as_nop
- as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val
+else case e in #(
+ e) as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val ;;
+esac
fi
rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
done
@@ -2344,8 +2316,9 @@ _ACEOF
if ac_fn_c_try_run "$LINENO"
then :
echo >>conftest.val; read $3 <conftest.val; ac_retval=0
-else $as_nop
- ac_retval=1
+else case e in #(
+ e) ac_retval=1 ;;
+esac
fi
rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
conftest.$ac_objext conftest.beam conftest.$ac_ext
@@ -2357,6 +2330,45 @@ rm -f conftest.val
} # ac_fn_c_compute_int
+# ac_fn_c_try_cpp LINENO
+# ----------------------
+# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_cpp ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ if { { ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+printf "%s\n" "$ac_try_echo"; } >&5
+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } > conftest.i && {
+ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ }
+then :
+ ac_retval=0
+else case e in #(
+ e) printf "%s\n" "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1 ;;
+esac
+fi
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_cpp
+
# ac_fn_check_decl LINENO SYMBOL VAR INCLUDES EXTRA-OPTIONS FLAG-VAR
# ------------------------------------------------------------------
# Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR
@@ -2370,8 +2382,8 @@ printf %s "checking whether $as_decl_name is declared... " >&6; }
if eval test \${$3+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'`
+else case e in #(
+ e) as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'`
eval ac_save_FLAGS=\$$6
as_fn_append $6 " $5"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -2395,12 +2407,14 @@ _ACEOF
if ac_fn_c_try_compile "$LINENO"
then :
eval "$3=yes"
-else $as_nop
- eval "$3=no"
+else case e in #(
+ e) eval "$3=no" ;;
+esac
fi
rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
eval $6=\$ac_save_FLAGS
-
+ ;;
+esac
fi
eval ac_res=\$$3
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
@@ -2421,8 +2435,8 @@ printf %s "checking for $2.$3... " >&6; }
if eval test \${$4+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+else case e in #(
+ e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
$5
int
@@ -2438,8 +2452,8 @@ _ACEOF
if ac_fn_c_try_compile "$LINENO"
then :
eval "$4=yes"
-else $as_nop
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+else case e in #(
+ e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
$5
int
@@ -2455,12 +2469,15 @@ _ACEOF
if ac_fn_c_try_compile "$LINENO"
then :
eval "$4=yes"
-else $as_nop
- eval "$4=no"
+else case e in #(
+ e) eval "$4=no" ;;
+esac
fi
-rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;;
+esac
fi
-rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;;
+esac
fi
eval ac_res=\$$4
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
@@ -2492,8 +2509,8 @@ 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.25.2, which was
-generated by GNU Autoconf 2.71. Invocation command line was
+It was created by unbound $as_me 1.26.0, which was
+generated by GNU Autoconf 2.72. Invocation command line was
$ $0$ac_configure_args_raw
@@ -2739,10 +2756,10 @@ esac
printf "%s\n" "$as_me: loading site script $ac_site_file" >&6;}
sed 's/^/| /' "$ac_site_file" >&5
. "$ac_site_file" \
- || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+ || { { 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 $? "failed to load site script $ac_site_file
-See \`config.log' for more details" "$LINENO" 5; }
+See 'config.log' for more details" "$LINENO" 5; }
fi
done
@@ -2779,9 +2796,7 @@ struct stat;
/* Most of the following tests are stolen from RCS 5.7 src/conf.sh. */
struct buf { int x; };
struct buf * (*rcsopen) (struct buf *, struct stat *, int);
-static char *e (p, i)
- char **p;
- int i;
+static char *e (char **p, int i)
{
return p[i];
}
@@ -2795,6 +2810,21 @@ static char *f (char * (*g) (char **, int), char **p, ...)
return s;
}
+/* C89 style stringification. */
+#define noexpand_stringify(a) #a
+const char *stringified = noexpand_stringify(arbitrary+token=sequence);
+
+/* C89 style token pasting. Exercises some of the corner cases that
+ e.g. old MSVC gets wrong, but not very hard. */
+#define noexpand_concat(a,b) a##b
+#define expand_concat(a,b) noexpand_concat(a,b)
+extern int vA;
+extern int vbee;
+#define aye A
+#define bee B
+int *pvA = &expand_concat(v,aye);
+int *pvbee = &noexpand_concat(v,bee);
+
/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
function prototypes and stuff, but not \xHH hex character constants.
These do not provoke an error unfortunately, instead are silently treated
@@ -2822,16 +2852,19 @@ ok |= (argc == 0 || f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]);
# Test code for whether the C compiler supports C99 (global declarations)
ac_c_conftest_c99_globals='
-// Does the compiler advertise C99 conformance?
+/* Does the compiler advertise C99 conformance? */
#if !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L
# error "Compiler does not advertise C99 conformance"
#endif
+// See if C++-style comments work.
+
#include <stdbool.h>
extern int puts (const char *);
extern int printf (const char *, ...);
extern int dprintf (int, const char *, ...);
extern void *malloc (size_t);
+extern void free (void *);
// Check varargs macros. These examples are taken from C99 6.10.3.5.
// dprintf is used instead of fprintf to avoid needing to declare
@@ -2881,7 +2914,6 @@ typedef const char *ccp;
static inline int
test_restrict (ccp restrict text)
{
- // See if C++-style comments work.
// Iterate through items via the restricted pointer.
// Also check for declarations in for loops.
for (unsigned int i = 0; *(text+i) != '\''\0'\''; ++i)
@@ -2947,6 +2979,8 @@ ac_c_conftest_c99_main='
ia->datasize = 10;
for (int i = 0; i < ia->datasize; ++i)
ia->data[i] = i * 1.234;
+ // Work around memory leak warnings.
+ free (ia);
// Check named initializers.
struct named_init ni = {
@@ -2968,7 +3002,7 @@ ac_c_conftest_c99_main='
# Test code for whether the C compiler supports C11 (global declarations)
ac_c_conftest_c11_globals='
-// Does the compiler advertise C11 conformance?
+/* Does the compiler advertise C11 conformance? */
#if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112L
# error "Compiler does not advertise C11 conformance"
#endif
@@ -3164,8 +3198,9 @@ IFS=$as_save_IFS
if $as_found
then :
-else $as_nop
- as_fn_error $? "cannot find required auxiliary files:$ac_missing_aux_files" "$LINENO" 5
+else case e in #(
+ e) as_fn_error $? "cannot find required auxiliary files:$ac_missing_aux_files" "$LINENO" 5 ;;
+esac
fi
@@ -3193,12 +3228,12 @@ for ac_var in $ac_precious_vars; do
eval ac_new_val=\$ac_env_${ac_var}_value
case $ac_old_set,$ac_new_set in
set,)
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
-printf "%s\n" "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: '$ac_var' was set to '$ac_old_val' in the previous run" >&5
+printf "%s\n" "$as_me: error: '$ac_var' was set to '$ac_old_val' in the previous run" >&2;}
ac_cache_corrupted=: ;;
,set)
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
-printf "%s\n" "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: '$ac_var' was not set in the previous run" >&5
+printf "%s\n" "$as_me: error: '$ac_var' was not set in the previous run" >&2;}
ac_cache_corrupted=: ;;
,);;
*)
@@ -3207,18 +3242,18 @@ printf "%s\n" "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
ac_old_val_w=`echo x $ac_old_val`
ac_new_val_w=`echo x $ac_new_val`
if test "$ac_old_val_w" != "$ac_new_val_w"; then
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
-printf "%s\n" "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: '$ac_var' has changed since the previous run:" >&5
+printf "%s\n" "$as_me: error: '$ac_var' has changed since the previous run:" >&2;}
ac_cache_corrupted=:
else
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
-printf "%s\n" "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in '$ac_var' since the previous run:" >&5
+printf "%s\n" "$as_me: warning: ignoring whitespace changes in '$ac_var' since the previous run:" >&2;}
eval $ac_var=\$ac_old_val
fi
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5
-printf "%s\n" "$as_me: former value: \`$ac_old_val'" >&2;}
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5
-printf "%s\n" "$as_me: current value: \`$ac_new_val'" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: '$ac_old_val'" >&5
+printf "%s\n" "$as_me: former value: '$ac_old_val'" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: '$ac_new_val'" >&5
+printf "%s\n" "$as_me: current value: '$ac_new_val'" >&2;}
fi;;
esac
# Pass precious variables to config.status.
@@ -3234,11 +3269,11 @@ printf "%s\n" "$as_me: current value: \`$ac_new_val'" >&2;}
fi
done
if $ac_cache_corrupted; then
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;}
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
printf "%s\n" "$as_me: error: changes in the environment can compromise the build" >&2;}
- as_fn_error $? "run \`${MAKE-make} distclean' and/or \`rm $cache_file'
+ as_fn_error $? "run '${MAKE-make} distclean' and/or 'rm $cache_file'
and start over" "$LINENO" 5
fi
## -------------------- ##
@@ -3254,13 +3289,13 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
UNBOUND_VERSION_MAJOR=1
-UNBOUND_VERSION_MINOR=25
+UNBOUND_VERSION_MINOR=26
-UNBOUND_VERSION_MICRO=2
+UNBOUND_VERSION_MICRO=0
LIBUNBOUND_CURRENT=9
-LIBUNBOUND_REVISION=38
+LIBUNBOUND_REVISION=39
LIBUNBOUND_AGE=1
# 1.0.0 had 0:12:0
# 1.0.1 had 0:13:0
@@ -3366,6 +3401,7 @@ LIBUNBOUND_AGE=1
# 1.25.0 had 9:36:1
# 1.25.1 had 9:37:1
# 1.25.2 had 9:38:1
+# 1.26.0 had 9:39:1
# Current -- the number of the binary API that we're implementing
# Revision -- which iteration of the implementation of the binary
@@ -3418,8 +3454,8 @@ printf %s "checking for $ac_word... " >&6; }
if test ${ac_cv_prog_CC+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- if test -n "$CC"; then
+else case e in #(
+ e) if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -3441,7 +3477,8 @@ done
done
IFS=$as_save_IFS
-fi
+fi ;;
+esac
fi
CC=$ac_cv_prog_CC
if test -n "$CC"; then
@@ -3463,8 +3500,8 @@ printf %s "checking for $ac_word... " >&6; }
if test ${ac_cv_prog_ac_ct_CC+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- if test -n "$ac_ct_CC"; then
+else case e in #(
+ e) if test -n "$ac_ct_CC"; then
ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -3486,7 +3523,8 @@ done
done
IFS=$as_save_IFS
-fi
+fi ;;
+esac
fi
ac_ct_CC=$ac_cv_prog_ac_ct_CC
if test -n "$ac_ct_CC"; then
@@ -3521,8 +3559,8 @@ printf %s "checking for $ac_word... " >&6; }
if test ${ac_cv_prog_CC+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- if test -n "$CC"; then
+else case e in #(
+ e) if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -3544,7 +3582,8 @@ done
done
IFS=$as_save_IFS
-fi
+fi ;;
+esac
fi
CC=$ac_cv_prog_CC
if test -n "$CC"; then
@@ -3566,8 +3605,8 @@ printf %s "checking for $ac_word... " >&6; }
if test ${ac_cv_prog_CC+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- if test -n "$CC"; then
+else case e in #(
+ e) if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
else
ac_prog_rejected=no
@@ -3606,7 +3645,8 @@ if test $ac_prog_rejected = yes; then
ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@"
fi
fi
-fi
+fi ;;
+esac
fi
CC=$ac_cv_prog_CC
if test -n "$CC"; then
@@ -3630,8 +3670,8 @@ printf %s "checking for $ac_word... " >&6; }
if test ${ac_cv_prog_CC+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- if test -n "$CC"; then
+else case e in #(
+ e) if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -3653,7 +3693,8 @@ done
done
IFS=$as_save_IFS
-fi
+fi ;;
+esac
fi
CC=$ac_cv_prog_CC
if test -n "$CC"; then
@@ -3679,8 +3720,8 @@ printf %s "checking for $ac_word... " >&6; }
if test ${ac_cv_prog_ac_ct_CC+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- if test -n "$ac_ct_CC"; then
+else case e in #(
+ e) if test -n "$ac_ct_CC"; then
ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -3702,7 +3743,8 @@ done
done
IFS=$as_save_IFS
-fi
+fi ;;
+esac
fi
ac_ct_CC=$ac_cv_prog_ac_ct_CC
if test -n "$ac_ct_CC"; then
@@ -3740,8 +3782,8 @@ printf %s "checking for $ac_word... " >&6; }
if test ${ac_cv_prog_CC+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- if test -n "$CC"; then
+else case e in #(
+ e) if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -3763,7 +3805,8 @@ done
done
IFS=$as_save_IFS
-fi
+fi ;;
+esac
fi
CC=$ac_cv_prog_CC
if test -n "$CC"; then
@@ -3785,8 +3828,8 @@ printf %s "checking for $ac_word... " >&6; }
if test ${ac_cv_prog_ac_ct_CC+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- if test -n "$ac_ct_CC"; then
+else case e in #(
+ e) if test -n "$ac_ct_CC"; then
ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -3808,7 +3851,8 @@ done
done
IFS=$as_save_IFS
-fi
+fi ;;
+esac
fi
ac_ct_CC=$ac_cv_prog_ac_ct_CC
if test -n "$ac_ct_CC"; then
@@ -3837,10 +3881,10 @@ fi
fi
-test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+test -z "$CC" && { { 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 $? "no acceptable C compiler found in \$PATH
-See \`config.log' for more details" "$LINENO" 5; }
+See 'config.log' for more details" "$LINENO" 5; }
# Provide some information about the compiler.
printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
@@ -3912,8 +3956,8 @@ printf "%s\n" "$ac_try_echo"; } >&5
printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }
then :
- # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
-# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
+ # Autoconf-2.13 could set the ac_cv_exeext variable to 'no'.
+# So ignore a value of 'no', otherwise this would lead to 'EXEEXT = no'
# in a Makefile. We should not override ac_cv_exeext if it was cached,
# so that the user can short-circuit this test for compilers unknown to
# Autoconf.
@@ -3933,7 +3977,7 @@ do
ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
fi
# We set ac_cv_exeext here because the later test for it is not
- # safe: cross compilers may not add the suffix if given an `-o'
+ # safe: cross compilers may not add the suffix if given an '-o'
# argument, so we may need to know it at that point already.
# Even if this section looks crufty: it has the advantage of
# actually working.
@@ -3944,8 +3988,9 @@ do
done
test "$ac_cv_exeext" = no && ac_cv_exeext=
-else $as_nop
- ac_file=''
+else case e in #(
+ e) ac_file='' ;;
+esac
fi
if test -z "$ac_file"
then :
@@ -3954,13 +3999,14 @@ printf "%s\n" "no" >&6; }
printf "%s\n" "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+{ { 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 77 "C compiler cannot create executables
-See \`config.log' for more details" "$LINENO" 5; }
-else $as_nop
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-printf "%s\n" "yes" >&6; }
+See 'config.log' for more details" "$LINENO" 5; }
+else case e in #(
+ e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; } ;;
+esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
printf %s "checking for C compiler default output file name... " >&6; }
@@ -3984,10 +4030,10 @@ printf "%s\n" "$ac_try_echo"; } >&5
printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }
then :
- # If both `conftest.exe' and `conftest' are `present' (well, observable)
-# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will
-# work properly (i.e., refer to `conftest.exe'), while it won't with
-# `rm'.
+ # If both 'conftest.exe' and 'conftest' are 'present' (well, observable)
+# catch 'conftest.exe'. For instance with Cygwin, 'ls conftest' will
+# work properly (i.e., refer to 'conftest.exe'), while it won't with
+# 'rm'.
for ac_file in conftest.exe conftest conftest.*; do
test -f "$ac_file" || continue
case $ac_file in
@@ -3997,11 +4043,12 @@ for ac_file in conftest.exe conftest conftest.*; do
* ) break;;
esac
done
-else $as_nop
- { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+else case e in #(
+ e) { { 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 $? "cannot compute suffix of executables: cannot compile and link
-See \`config.log' for more details" "$LINENO" 5; }
+See 'config.log' for more details" "$LINENO" 5; } ;;
+esac
fi
rm -f conftest conftest$ac_cv_exeext
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
@@ -4017,6 +4064,8 @@ int
main (void)
{
FILE *f = fopen ("conftest.out", "w");
+ if (!f)
+ return 1;
return ferror (f) || fclose (f) != 0;
;
@@ -4056,26 +4105,27 @@ printf "%s\n" "$ac_try_echo"; } >&5
if test "$cross_compiling" = maybe; then
cross_compiling=yes
else
- { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+ { { 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 77 "cannot run C compiled programs.
-If you meant to cross compile, use \`--host'.
-See \`config.log' for more details" "$LINENO" 5; }
+If you meant to cross compile, use '--host'.
+See 'config.log' for more details" "$LINENO" 5; }
fi
fi
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
printf "%s\n" "$cross_compiling" >&6; }
-rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
+rm -f conftest.$ac_ext conftest$ac_cv_exeext \
+ conftest.o conftest.obj conftest.out
ac_clean_files=$ac_clean_files_save
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
printf %s "checking for suffix of object files... " >&6; }
if test ${ac_cv_objext+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+else case e in #(
+ e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
@@ -4107,16 +4157,18 @@ then :
break;;
esac
done
-else $as_nop
- printf "%s\n" "$as_me: failed program was:" >&5
+else case e in #(
+ e) printf "%s\n" "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+{ { 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 $? "cannot compute suffix of object files: cannot compile
-See \`config.log' for more details" "$LINENO" 5; }
+See 'config.log' for more details" "$LINENO" 5; } ;;
+esac
fi
-rm -f conftest.$ac_cv_objext conftest.$ac_ext
+rm -f conftest.$ac_cv_objext conftest.$ac_ext ;;
+esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
printf "%s\n" "$ac_cv_objext" >&6; }
@@ -4127,8 +4179,8 @@ printf %s "checking whether the compiler supports GNU C... " >&6; }
if test ${ac_cv_c_compiler_gnu+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+else case e in #(
+ e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
@@ -4145,12 +4197,14 @@ _ACEOF
if ac_fn_c_try_compile "$LINENO"
then :
ac_compiler_gnu=yes
-else $as_nop
- ac_compiler_gnu=no
+else case e in #(
+ e) ac_compiler_gnu=no ;;
+esac
fi
rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
ac_cv_c_compiler_gnu=$ac_compiler_gnu
-
+ ;;
+esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; }
@@ -4168,8 +4222,8 @@ printf %s "checking whether $CC accepts -g... " >&6; }
if test ${ac_cv_prog_cc_g+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- ac_save_c_werror_flag=$ac_c_werror_flag
+else case e in #(
+ e) ac_save_c_werror_flag=$ac_c_werror_flag
ac_c_werror_flag=yes
ac_cv_prog_cc_g=no
CFLAGS="-g"
@@ -4187,8 +4241,8 @@ _ACEOF
if ac_fn_c_try_compile "$LINENO"
then :
ac_cv_prog_cc_g=yes
-else $as_nop
- CFLAGS=""
+else case e in #(
+ e) CFLAGS=""
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -4203,8 +4257,8 @@ _ACEOF
if ac_fn_c_try_compile "$LINENO"
then :
-else $as_nop
- ac_c_werror_flag=$ac_save_c_werror_flag
+else case e in #(
+ e) ac_c_werror_flag=$ac_save_c_werror_flag
CFLAGS="-g"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -4221,12 +4275,15 @@ if ac_fn_c_try_compile "$LINENO"
then :
ac_cv_prog_cc_g=yes
fi
-rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;;
+esac
fi
-rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;;
+esac
fi
rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
- ac_c_werror_flag=$ac_save_c_werror_flag
+ ac_c_werror_flag=$ac_save_c_werror_flag ;;
+esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
printf "%s\n" "$ac_cv_prog_cc_g" >&6; }
@@ -4253,8 +4310,8 @@ printf %s "checking for $CC option to enable C11 features... " >&6; }
if test ${ac_cv_prog_cc_c11+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- ac_cv_prog_cc_c11=no
+else case e in #(
+ e) ac_cv_prog_cc_c11=no
ac_save_CC=$CC
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -4271,25 +4328,28 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam
test "x$ac_cv_prog_cc_c11" != "xno" && break
done
rm -f conftest.$ac_ext
-CC=$ac_save_CC
+CC=$ac_save_CC ;;
+esac
fi
if test "x$ac_cv_prog_cc_c11" = xno
then :
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
printf "%s\n" "unsupported" >&6; }
-else $as_nop
- if test "x$ac_cv_prog_cc_c11" = x
+else case e in #(
+ e) if test "x$ac_cv_prog_cc_c11" = x
then :
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
printf "%s\n" "none needed" >&6; }
-else $as_nop
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5
+else case e in #(
+ e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5
printf "%s\n" "$ac_cv_prog_cc_c11" >&6; }
- CC="$CC $ac_cv_prog_cc_c11"
+ CC="$CC $ac_cv_prog_cc_c11" ;;
+esac
fi
ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11
- ac_prog_cc_stdc=c11
+ ac_prog_cc_stdc=c11 ;;
+esac
fi
fi
if test x$ac_prog_cc_stdc = xno
@@ -4299,8 +4359,8 @@ printf %s "checking for $CC option to enable C99 features... " >&6; }
if test ${ac_cv_prog_cc_c99+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- ac_cv_prog_cc_c99=no
+else case e in #(
+ e) ac_cv_prog_cc_c99=no
ac_save_CC=$CC
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -4317,25 +4377,28 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam
test "x$ac_cv_prog_cc_c99" != "xno" && break
done
rm -f conftest.$ac_ext
-CC=$ac_save_CC
+CC=$ac_save_CC ;;
+esac
fi
if test "x$ac_cv_prog_cc_c99" = xno
then :
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
printf "%s\n" "unsupported" >&6; }
-else $as_nop
- if test "x$ac_cv_prog_cc_c99" = x
+else case e in #(
+ e) if test "x$ac_cv_prog_cc_c99" = x
then :
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
printf "%s\n" "none needed" >&6; }
-else $as_nop
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5
+else case e in #(
+ e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5
printf "%s\n" "$ac_cv_prog_cc_c99" >&6; }
- CC="$CC $ac_cv_prog_cc_c99"
+ CC="$CC $ac_cv_prog_cc_c99" ;;
+esac
fi
ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99
- ac_prog_cc_stdc=c99
+ ac_prog_cc_stdc=c99 ;;
+esac
fi
fi
if test x$ac_prog_cc_stdc = xno
@@ -4345,8 +4408,8 @@ printf %s "checking for $CC option to enable C89 features... " >&6; }
if test ${ac_cv_prog_cc_c89+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- ac_cv_prog_cc_c89=no
+else case e in #(
+ e) ac_cv_prog_cc_c89=no
ac_save_CC=$CC
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -4363,25 +4426,28 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam
test "x$ac_cv_prog_cc_c89" != "xno" && break
done
rm -f conftest.$ac_ext
-CC=$ac_save_CC
+CC=$ac_save_CC ;;
+esac
fi
if test "x$ac_cv_prog_cc_c89" = xno
then :
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
printf "%s\n" "unsupported" >&6; }
-else $as_nop
- if test "x$ac_cv_prog_cc_c89" = x
+else case e in #(
+ e) if test "x$ac_cv_prog_cc_c89" = x
then :
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
printf "%s\n" "none needed" >&6; }
-else $as_nop
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
+else case e in #(
+ e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
printf "%s\n" "$ac_cv_prog_cc_c89" >&6; }
- CC="$CC $ac_cv_prog_cc_c89"
+ CC="$CC $ac_cv_prog_cc_c89" ;;
+esac
fi
ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89
- ac_prog_cc_stdc=c89
+ ac_prog_cc_stdc=c89 ;;
+esac
fi
fi
@@ -4432,8 +4498,8 @@ printf %s "checking whether it is safe to define __EXTENSIONS__... " >&6; }
if test ${ac_cv_safe_to_define___extensions__+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+else case e in #(
+ e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
# define __EXTENSIONS__ 1
@@ -4449,10 +4515,12 @@ _ACEOF
if ac_fn_c_try_compile "$LINENO"
then :
ac_cv_safe_to_define___extensions__=yes
-else $as_nop
- ac_cv_safe_to_define___extensions__=no
+else case e in #(
+ e) ac_cv_safe_to_define___extensions__=no ;;
+esac
fi
-rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;;
+esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5
printf "%s\n" "$ac_cv_safe_to_define___extensions__" >&6; }
@@ -4462,8 +4530,8 @@ printf %s "checking whether _XOPEN_SOURCE should be defined... " >&6; }
if test ${ac_cv_should_define__xopen_source+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- ac_cv_should_define__xopen_source=no
+else case e in #(
+ e) ac_cv_should_define__xopen_source=no
if test $ac_cv_header_wchar_h = yes
then :
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -4482,8 +4550,8 @@ _ACEOF
if ac_fn_c_try_compile "$LINENO"
then :
-else $as_nop
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+else case e in #(
+ e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#define _XOPEN_SOURCE 500
@@ -4501,10 +4569,12 @@ if ac_fn_c_try_compile "$LINENO"
then :
ac_cv_should_define__xopen_source=yes
fi
-rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;;
+esac
fi
rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
+fi ;;
+esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_should_define__xopen_source" >&5
printf "%s\n" "$ac_cv_should_define__xopen_source" >&6; }
@@ -4529,6 +4599,8 @@ printf "%s\n" "$ac_cv_should_define__xopen_source" >&6; }
printf "%s\n" "#define __STDC_WANT_IEC_60559_DFP_EXT__ 1" >>confdefs.h
+ printf "%s\n" "#define __STDC_WANT_IEC_60559_EXT__ 1" >>confdefs.h
+
printf "%s\n" "#define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1" >>confdefs.h
printf "%s\n" "#define __STDC_WANT_IEC_60559_TYPES_EXT__ 1" >>confdefs.h
@@ -4548,8 +4620,9 @@ then :
printf "%s\n" "#define _POSIX_1_SOURCE 2" >>confdefs.h
-else $as_nop
- MINIX=
+else case e in #(
+ e) MINIX= ;;
+esac
fi
if test $ac_cv_safe_to_define___extensions__ = yes
then :
@@ -4644,13 +4717,14 @@ printf "%s\n" X"$ub_conf_file" |
if test ${with_run_dir+y}
then :
withval=$with_run_dir; UNBOUND_RUN_DIR="$withval"
-else $as_nop
- if test $on_mingw = no; then
+else case e in #(
+ e) if test $on_mingw = no; then
UNBOUND_RUN_DIR=`dirname "$ub_conf_file"`
else
UNBOUND_RUN_DIR=""
fi
-
+ ;;
+esac
fi
@@ -4665,13 +4739,14 @@ printf "%s\n" "#define RUN_DIR \"$hdr_run\"" >>confdefs.h
if test ${with_chroot_dir+y}
then :
withval=$with_chroot_dir; UNBOUND_CHROOT_DIR="$withval"
-else $as_nop
- if test $on_mingw = no; then
+else case e in #(
+ e) if test $on_mingw = no; then
UNBOUND_CHROOT_DIR="$UNBOUND_RUN_DIR"
else
UNBOUND_CHROOT_DIR=""
fi
-
+ ;;
+esac
fi
@@ -4686,8 +4761,9 @@ printf "%s\n" "#define CHROOT_DIR \"$hdr_chroot\"" >>confdefs.h
if test ${with_share_dir+y}
then :
withval=$with_share_dir; UNBOUND_SHARE_DIR="$withval"
-else $as_nop
- UNBOUND_SHARE_DIR="$UNBOUND_RUN_DIR"
+else case e in #(
+ e) UNBOUND_SHARE_DIR="$UNBOUND_RUN_DIR" ;;
+esac
fi
@@ -4700,13 +4776,14 @@ printf "%s\n" "#define SHARE_DIR \"$UNBOUND_SHARE_DIR\"" >>confdefs.h
if test ${with_pidfile+y}
then :
withval=$with_pidfile; UNBOUND_PIDFILE="$withval"
-else $as_nop
- if test $on_mingw = no; then
+else case e in #(
+ e) if test $on_mingw = no; then
UNBOUND_PIDFILE="$UNBOUND_RUN_DIR/unbound.pid"
else
UNBOUND_PIDFILE=""
fi
-
+ ;;
+esac
fi
@@ -4721,13 +4798,14 @@ printf "%s\n" "#define PIDFILE \"$hdr_pid\"" >>confdefs.h
if test ${with_rootkey_file+y}
then :
withval=$with_rootkey_file; UNBOUND_ROOTKEY_FILE="$withval"
-else $as_nop
- if test $on_mingw = no; then
+else case e in #(
+ e) if test $on_mingw = no; then
UNBOUND_ROOTKEY_FILE="$UNBOUND_RUN_DIR/root.key"
else
UNBOUND_ROOTKEY_FILE="C:\\Program Files\\Unbound\\root.key"
fi
-
+ ;;
+esac
fi
@@ -4742,13 +4820,14 @@ printf "%s\n" "#define ROOT_ANCHOR_FILE \"$hdr_rkey\"" >>confdefs.h
if test ${with_rootcert_file+y}
then :
withval=$with_rootcert_file; UNBOUND_ROOTCERT_FILE="$withval"
-else $as_nop
- if test $on_mingw = no; then
+else case e in #(
+ e) if test $on_mingw = no; then
UNBOUND_ROOTCERT_FILE="$UNBOUND_RUN_DIR/icannbundle.pem"
else
UNBOUND_ROOTCERT_FILE="C:\\Program Files\\Unbound\\icannbundle.pem"
fi
-
+ ;;
+esac
fi
@@ -4763,8 +4842,9 @@ printf "%s\n" "#define ROOT_CERT_FILE \"$hdr_rpem\"" >>confdefs.h
if test ${with_username+y}
then :
withval=$with_username; UNBOUND_USERNAME="$withval"
-else $as_nop
- UNBOUND_USERNAME="unbound"
+else case e in #(
+ e) UNBOUND_USERNAME="unbound" ;;
+esac
fi
@@ -4787,8 +4867,8 @@ printf %s "checking for grep that handles long lines and -e... " >&6; }
if test ${ac_cv_path_GREP+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- if test -z "$GREP"; then
+else case e in #(
+ e) if test -z "$GREP"; then
ac_path_GREP_found=false
# Loop through the user's path and test for each of PROGNAME-LIST
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -4807,9 +4887,10 @@ do
as_fn_executable_p "$ac_path_GREP" || continue
# Check for GNU ac_path_GREP and select it if it is found.
# Check for GNU $ac_path_GREP
-case `"$ac_path_GREP" --version 2>&1` in
+case `"$ac_path_GREP" --version 2>&1` in #(
*GNU*)
ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
+#(
*)
ac_count=0
printf %s 0123456789 >"conftest.in"
@@ -4844,7 +4925,8 @@ IFS=$as_save_IFS
else
ac_cv_path_GREP=$GREP
fi
-
+ ;;
+esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
printf "%s\n" "$ac_cv_path_GREP" >&6; }
@@ -4858,8 +4940,8 @@ printf %s "checking for an ANSI C-conforming const... " >&6; }
if test ${ac_cv_c_const+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+else case e in #(
+ e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
@@ -4923,10 +5005,12 @@ _ACEOF
if ac_fn_c_try_compile "$LINENO"
then :
ac_cv_c_const=yes
-else $as_nop
- ac_cv_c_const=no
+else case e in #(
+ e) ac_cv_c_const=no ;;
+esac
fi
-rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;;
+esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5
printf "%s\n" "$ac_cv_c_const" >&6; }
@@ -4953,8 +5037,8 @@ cache=`echo g | sed 'y%.=/+-%___p_%'`
if eval test \${cv_prog_cc_flag_$cache+y}
then :
printf %s "(cached) " >&6
-else $as_nop
-
+else case e in #(
+ e)
echo 'void f(void){}' >conftest.c
if test -z "`$CC $CPPFLAGS $CFLAGS -g -c conftest.c 2>&1`"; then
eval "cv_prog_cc_flag_$cache=yes"
@@ -4962,7 +5046,8 @@ else
eval "cv_prog_cc_flag_$cache=no"
fi
rm -f conftest conftest.o conftest.c
-
+ ;;
+esac
fi
if eval "test \"`echo '$cv_prog_cc_flag_'$cache`\" = yes"; then
@@ -4985,8 +5070,8 @@ cache=`echo O2 | sed 'y%.=/+-%___p_%'`
if eval test \${cv_prog_cc_flag_$cache+y}
then :
printf %s "(cached) " >&6
-else $as_nop
-
+else case e in #(
+ e)
echo 'void f(void){}' >conftest.c
if test -z "`$CC $CPPFLAGS $CFLAGS -O2 -c conftest.c 2>&1`"; then
eval "cv_prog_cc_flag_$cache=yes"
@@ -4994,7 +5079,8 @@ else
eval "cv_prog_cc_flag_$cache=no"
fi
rm -f conftest conftest.o conftest.c
-
+ ;;
+esac
fi
if eval "test \"`echo '$cv_prog_cc_flag_'$cache`\" = yes"; then
@@ -5024,8 +5110,8 @@ printf %s "checking for $ac_word... " >&6; }
if test ${ac_cv_prog_CC+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- if test -n "$CC"; then
+else case e in #(
+ e) if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -5047,7 +5133,8 @@ done
done
IFS=$as_save_IFS
-fi
+fi ;;
+esac
fi
CC=$ac_cv_prog_CC
if test -n "$CC"; then
@@ -5069,8 +5156,8 @@ printf %s "checking for $ac_word... " >&6; }
if test ${ac_cv_prog_ac_ct_CC+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- if test -n "$ac_ct_CC"; then
+else case e in #(
+ e) if test -n "$ac_ct_CC"; then
ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -5092,7 +5179,8 @@ done
done
IFS=$as_save_IFS
-fi
+fi ;;
+esac
fi
ac_ct_CC=$ac_cv_prog_ac_ct_CC
if test -n "$ac_ct_CC"; then
@@ -5127,8 +5215,8 @@ printf %s "checking for $ac_word... " >&6; }
if test ${ac_cv_prog_CC+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- if test -n "$CC"; then
+else case e in #(
+ e) if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -5150,7 +5238,8 @@ done
done
IFS=$as_save_IFS
-fi
+fi ;;
+esac
fi
CC=$ac_cv_prog_CC
if test -n "$CC"; then
@@ -5172,8 +5261,8 @@ printf %s "checking for $ac_word... " >&6; }
if test ${ac_cv_prog_CC+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- if test -n "$CC"; then
+else case e in #(
+ e) if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
else
ac_prog_rejected=no
@@ -5212,7 +5301,8 @@ if test $ac_prog_rejected = yes; then
ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@"
fi
fi
-fi
+fi ;;
+esac
fi
CC=$ac_cv_prog_CC
if test -n "$CC"; then
@@ -5236,8 +5326,8 @@ printf %s "checking for $ac_word... " >&6; }
if test ${ac_cv_prog_CC+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- if test -n "$CC"; then
+else case e in #(
+ e) if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -5259,7 +5349,8 @@ done
done
IFS=$as_save_IFS
-fi
+fi ;;
+esac
fi
CC=$ac_cv_prog_CC
if test -n "$CC"; then
@@ -5285,8 +5376,8 @@ printf %s "checking for $ac_word... " >&6; }
if test ${ac_cv_prog_ac_ct_CC+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- if test -n "$ac_ct_CC"; then
+else case e in #(
+ e) if test -n "$ac_ct_CC"; then
ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -5308,7 +5399,8 @@ done
done
IFS=$as_save_IFS
-fi
+fi ;;
+esac
fi
ac_ct_CC=$ac_cv_prog_ac_ct_CC
if test -n "$ac_ct_CC"; then
@@ -5346,8 +5438,8 @@ printf %s "checking for $ac_word... " >&6; }
if test ${ac_cv_prog_CC+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- if test -n "$CC"; then
+else case e in #(
+ e) if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -5369,7 +5461,8 @@ done
done
IFS=$as_save_IFS
-fi
+fi ;;
+esac
fi
CC=$ac_cv_prog_CC
if test -n "$CC"; then
@@ -5391,8 +5484,8 @@ printf %s "checking for $ac_word... " >&6; }
if test ${ac_cv_prog_ac_ct_CC+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- if test -n "$ac_ct_CC"; then
+else case e in #(
+ e) if test -n "$ac_ct_CC"; then
ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -5414,7 +5507,8 @@ done
done
IFS=$as_save_IFS
-fi
+fi ;;
+esac
fi
ac_ct_CC=$ac_cv_prog_ac_ct_CC
if test -n "$ac_ct_CC"; then
@@ -5443,10 +5537,10 @@ fi
fi
-test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+test -z "$CC" && { { 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 $? "no acceptable C compiler found in \$PATH
-See \`config.log' for more details" "$LINENO" 5; }
+See 'config.log' for more details" "$LINENO" 5; }
# Provide some information about the compiler.
printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
@@ -5478,8 +5572,8 @@ printf %s "checking whether the compiler supports GNU C... " >&6; }
if test ${ac_cv_c_compiler_gnu+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+else case e in #(
+ e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
@@ -5496,12 +5590,14 @@ _ACEOF
if ac_fn_c_try_compile "$LINENO"
then :
ac_compiler_gnu=yes
-else $as_nop
- ac_compiler_gnu=no
+else case e in #(
+ e) ac_compiler_gnu=no ;;
+esac
fi
rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
ac_cv_c_compiler_gnu=$ac_compiler_gnu
-
+ ;;
+esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; }
@@ -5519,8 +5615,8 @@ printf %s "checking whether $CC accepts -g... " >&6; }
if test ${ac_cv_prog_cc_g+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- ac_save_c_werror_flag=$ac_c_werror_flag
+else case e in #(
+ e) ac_save_c_werror_flag=$ac_c_werror_flag
ac_c_werror_flag=yes
ac_cv_prog_cc_g=no
CFLAGS="-g"
@@ -5538,8 +5634,8 @@ _ACEOF
if ac_fn_c_try_compile "$LINENO"
then :
ac_cv_prog_cc_g=yes
-else $as_nop
- CFLAGS=""
+else case e in #(
+ e) CFLAGS=""
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -5554,8 +5650,8 @@ _ACEOF
if ac_fn_c_try_compile "$LINENO"
then :
-else $as_nop
- ac_c_werror_flag=$ac_save_c_werror_flag
+else case e in #(
+ e) ac_c_werror_flag=$ac_save_c_werror_flag
CFLAGS="-g"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -5572,12 +5668,15 @@ if ac_fn_c_try_compile "$LINENO"
then :
ac_cv_prog_cc_g=yes
fi
-rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;;
+esac
fi
-rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;;
+esac
fi
rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
- ac_c_werror_flag=$ac_save_c_werror_flag
+ ac_c_werror_flag=$ac_save_c_werror_flag ;;
+esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
printf "%s\n" "$ac_cv_prog_cc_g" >&6; }
@@ -5604,8 +5703,8 @@ printf %s "checking for $CC option to enable C11 features... " >&6; }
if test ${ac_cv_prog_cc_c11+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- ac_cv_prog_cc_c11=no
+else case e in #(
+ e) ac_cv_prog_cc_c11=no
ac_save_CC=$CC
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -5622,25 +5721,28 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam
test "x$ac_cv_prog_cc_c11" != "xno" && break
done
rm -f conftest.$ac_ext
-CC=$ac_save_CC
+CC=$ac_save_CC ;;
+esac
fi
if test "x$ac_cv_prog_cc_c11" = xno
then :
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
printf "%s\n" "unsupported" >&6; }
-else $as_nop
- if test "x$ac_cv_prog_cc_c11" = x
+else case e in #(
+ e) if test "x$ac_cv_prog_cc_c11" = x
then :
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
printf "%s\n" "none needed" >&6; }
-else $as_nop
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5
+else case e in #(
+ e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5
printf "%s\n" "$ac_cv_prog_cc_c11" >&6; }
- CC="$CC $ac_cv_prog_cc_c11"
+ CC="$CC $ac_cv_prog_cc_c11" ;;
+esac
fi
ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11
- ac_prog_cc_stdc=c11
+ ac_prog_cc_stdc=c11 ;;
+esac
fi
fi
if test x$ac_prog_cc_stdc = xno
@@ -5650,8 +5752,8 @@ printf %s "checking for $CC option to enable C99 features... " >&6; }
if test ${ac_cv_prog_cc_c99+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- ac_cv_prog_cc_c99=no
+else case e in #(
+ e) ac_cv_prog_cc_c99=no
ac_save_CC=$CC
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -5668,25 +5770,28 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam
test "x$ac_cv_prog_cc_c99" != "xno" && break
done
rm -f conftest.$ac_ext
-CC=$ac_save_CC
+CC=$ac_save_CC ;;
+esac
fi
if test "x$ac_cv_prog_cc_c99" = xno
then :
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
printf "%s\n" "unsupported" >&6; }
-else $as_nop
- if test "x$ac_cv_prog_cc_c99" = x
+else case e in #(
+ e) if test "x$ac_cv_prog_cc_c99" = x
then :
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
printf "%s\n" "none needed" >&6; }
-else $as_nop
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5
+else case e in #(
+ e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5
printf "%s\n" "$ac_cv_prog_cc_c99" >&6; }
- CC="$CC $ac_cv_prog_cc_c99"
+ CC="$CC $ac_cv_prog_cc_c99" ;;
+esac
fi
ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99
- ac_prog_cc_stdc=c99
+ ac_prog_cc_stdc=c99 ;;
+esac
fi
fi
if test x$ac_prog_cc_stdc = xno
@@ -5696,8 +5801,8 @@ printf %s "checking for $CC option to enable C89 features... " >&6; }
if test ${ac_cv_prog_cc_c89+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- ac_cv_prog_cc_c89=no
+else case e in #(
+ e) ac_cv_prog_cc_c89=no
ac_save_CC=$CC
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -5714,25 +5819,28 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam
test "x$ac_cv_prog_cc_c89" != "xno" && break
done
rm -f conftest.$ac_ext
-CC=$ac_save_CC
+CC=$ac_save_CC ;;
+esac
fi
if test "x$ac_cv_prog_cc_c89" = xno
then :
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
printf "%s\n" "unsupported" >&6; }
-else $as_nop
- if test "x$ac_cv_prog_cc_c89" = x
+else case e in #(
+ e) if test "x$ac_cv_prog_cc_c89" = x
then :
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
printf "%s\n" "none needed" >&6; }
-else $as_nop
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
+else case e in #(
+ e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
printf "%s\n" "$ac_cv_prog_cc_c89" >&6; }
- CC="$CC $ac_cv_prog_cc_c89"
+ CC="$CC $ac_cv_prog_cc_c89" ;;
+esac
fi
ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89
- ac_prog_cc_stdc=c89
+ ac_prog_cc_stdc=c89 ;;
+esac
fi
fi
@@ -5769,8 +5877,8 @@ cache=`echo Werror | sed 'y%.=/+-%___p_%'`
if eval test \${cv_prog_cc_flag_$cache+y}
then :
printf %s "(cached) " >&6
-else $as_nop
-
+else case e in #(
+ e)
echo 'void f(void){}' >conftest.c
if test -z "`$CC $CPPFLAGS $CFLAGS -Werror -c conftest.c 2>&1`"; then
eval "cv_prog_cc_flag_$cache=yes"
@@ -5778,7 +5886,8 @@ else
eval "cv_prog_cc_flag_$cache=no"
fi
rm -f conftest conftest.o conftest.c
-
+ ;;
+esac
fi
if eval "test \"`echo '$cv_prog_cc_flag_'$cache`\" = yes"; then
@@ -5801,8 +5910,8 @@ cache=`echo Wall | sed 'y%.=/+-%___p_%'`
if eval test \${cv_prog_cc_flag_$cache+y}
then :
printf %s "(cached) " >&6
-else $as_nop
-
+else case e in #(
+ e)
echo 'void f(void){}' >conftest.c
if test -z "`$CC $CPPFLAGS $CFLAGS -Wall -c conftest.c 2>&1`"; then
eval "cv_prog_cc_flag_$cache=yes"
@@ -5810,7 +5919,8 @@ else
eval "cv_prog_cc_flag_$cache=no"
fi
rm -f conftest conftest.o conftest.c
-
+ ;;
+esac
fi
if eval "test \"`echo '$cv_prog_cc_flag_'$cache`\" = yes"; then
@@ -5835,8 +5945,8 @@ cache=`echo std=c99 | sed 'y%.=/+-%___p_%'`
if eval test \${cv_prog_cc_flag_$cache+y}
then :
printf %s "(cached) " >&6
-else $as_nop
-
+else case e in #(
+ e)
echo 'void f(void){}' >conftest.c
if test -z "`$CC $CPPFLAGS $CFLAGS -std=c99 -c conftest.c 2>&1`"; then
eval "cv_prog_cc_flag_$cache=yes"
@@ -5844,7 +5954,8 @@ else
eval "cv_prog_cc_flag_$cache=no"
fi
rm -f conftest conftest.o conftest.c
-
+ ;;
+esac
fi
if eval "test \"`echo '$cv_prog_cc_flag_'$cache`\" = yes"; then
@@ -5867,8 +5978,8 @@ cache=`echo xc99 | sed 'y%.=/+-%___p_%'`
if eval test \${cv_prog_cc_flag_$cache+y}
then :
printf %s "(cached) " >&6
-else $as_nop
-
+else case e in #(
+ e)
echo 'void f(void){}' >conftest.c
if test -z "`$CC $CPPFLAGS $CFLAGS -xc99 -c conftest.c 2>&1`"; then
eval "cv_prog_cc_flag_$cache=yes"
@@ -5876,7 +5987,8 @@ else
eval "cv_prog_cc_flag_$cache=no"
fi
rm -f conftest conftest.o conftest.c
-
+ ;;
+esac
fi
if eval "test \"`echo '$cv_prog_cc_flag_'$cache`\" = yes"; then
@@ -5913,12 +6025,12 @@ fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we need $C99FLAG -D__EXTENSIONS__ -D_BSD_SOURCE -D_DEFAULT_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -D_XOPEN_SOURCE_EXTENDED=1 -D_ALL_SOURCE as a flag for $CC" >&5
printf %s "checking whether we need $C99FLAG -D__EXTENSIONS__ -D_BSD_SOURCE -D_DEFAULT_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -D_XOPEN_SOURCE_EXTENDED=1 -D_ALL_SOURCE as a flag for $CC... " >&6; }
-cache=`printf "%s\n" "$C99FLAG -D__EXTENSIONS__ -D_BSD_SOURCE -D_DEFAULT_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -D_XOPEN_SOURCE_EXTENDED=1 -D_ALL_SOURCE" | $as_tr_sh`
+cache=`printf "%s\n" "$C99FLAG -D__EXTENSIONS__ -D_BSD_SOURCE -D_DEFAULT_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -D_XOPEN_SOURCE_EXTENDED=1 -D_ALL_SOURCE" | sed "$as_sed_sh"`
if eval test \${cv_prog_cc_flag_needed_$cache+y}
then :
printf %s "(cached) " >&6
-else $as_nop
-
+else case e in #(
+ e)
echo '
#include "confdefs.h"
#include <stdlib.h>
@@ -5972,7 +6084,8 @@ fi
fi
rm -f conftest conftest.c conftest.o
-
+ ;;
+esac
fi
if eval "test \"`echo '$cv_prog_cc_flag_needed_'$cache`\" = yes"; then
@@ -6005,12 +6118,12 @@ fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we need $C99FLAG -D__EXTENSIONS__ -D_BSD_SOURCE -D_DEFAULT_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -D_ALL_SOURCE as a flag for $CC" >&5
printf %s "checking whether we need $C99FLAG -D__EXTENSIONS__ -D_BSD_SOURCE -D_DEFAULT_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -D_ALL_SOURCE as a flag for $CC... " >&6; }
-cache=`printf "%s\n" "$C99FLAG -D__EXTENSIONS__ -D_BSD_SOURCE -D_DEFAULT_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -D_ALL_SOURCE" | $as_tr_sh`
+cache=`printf "%s\n" "$C99FLAG -D__EXTENSIONS__ -D_BSD_SOURCE -D_DEFAULT_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -D_ALL_SOURCE" | sed "$as_sed_sh"`
if eval test \${cv_prog_cc_flag_needed_$cache+y}
then :
printf %s "(cached) " >&6
-else $as_nop
-
+else case e in #(
+ e)
echo '
#include "confdefs.h"
#include <stdlib.h>
@@ -6064,7 +6177,8 @@ fi
fi
rm -f conftest conftest.c conftest.o
-
+ ;;
+esac
fi
if eval "test \"`echo '$cv_prog_cc_flag_needed_'$cache`\" = yes"; then
@@ -6097,12 +6211,12 @@ fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we need $C99FLAG as a flag for $CC" >&5
printf %s "checking whether we need $C99FLAG as a flag for $CC... " >&6; }
-cache=`printf "%s\n" "$C99FLAG" | $as_tr_sh`
+cache=`printf "%s\n" "$C99FLAG" | sed "$as_sed_sh"`
if eval test \${cv_prog_cc_flag_needed_$cache+y}
then :
printf %s "(cached) " >&6
-else $as_nop
-
+else case e in #(
+ e)
echo '
#include <stdbool.h>
#include <ctype.h>
@@ -6129,7 +6243,8 @@ fi
fi
rm -f conftest conftest.c conftest.o
-
+ ;;
+esac
fi
if eval "test \"`echo '$cv_prog_cc_flag_needed_'$cache`\" = yes"; then
@@ -6166,8 +6281,8 @@ cache=_D_BSD_SOURCE__D_DEFAULT_SOURCE
if eval test \${cv_prog_cc_flag_needed_$cache+y}
then :
printf %s "(cached) " >&6
-else $as_nop
-
+else case e in #(
+ e)
echo '
#include <ctype.h>
@@ -6195,7 +6310,8 @@ fi
fi
rm -f conftest conftest.c conftest.o
-
+ ;;
+esac
fi
if eval "test \"`echo '$cv_prog_cc_flag_needed_'$cache`\" = yes"; then
@@ -6232,8 +6348,8 @@ cache=_D_GNU_SOURCE
if eval test \${cv_prog_cc_flag_needed_$cache+y}
then :
printf %s "(cached) " >&6
-else $as_nop
-
+else case e in #(
+ e)
echo '
#include <netinet/in.h>
@@ -6261,7 +6377,8 @@ fi
fi
rm -f conftest conftest.c conftest.o
-
+ ;;
+esac
fi
if eval "test \"`echo '$cv_prog_cc_flag_needed_'$cache`\" = yes"; then
@@ -6301,8 +6418,8 @@ cache=_D_GNU_SOURCE__D_FRSRESGID
if eval test \${cv_prog_cc_flag_needed_$cache+y}
then :
printf %s "(cached) " >&6
-else $as_nop
-
+else case e in #(
+ e)
echo '
#include <unistd.h>
@@ -6330,7 +6447,8 @@ fi
fi
rm -f conftest conftest.c conftest.o
-
+ ;;
+esac
fi
if eval "test \"`echo '$cv_prog_cc_flag_needed_'$cache`\" = yes"; then
@@ -6367,8 +6485,8 @@ cache=_D_POSIX_C_SOURCE_200112
if eval test \${cv_prog_cc_flag_needed_$cache+y}
then :
printf %s "(cached) " >&6
-else $as_nop
-
+else case e in #(
+ e)
echo '
#include "confdefs.h"
#ifdef HAVE_TIME_H
@@ -6407,7 +6525,8 @@ fi
fi
rm -f conftest conftest.c conftest.o
-
+ ;;
+esac
fi
if eval "test \"`echo '$cv_prog_cc_flag_needed_'$cache`\" = yes"; then
@@ -6444,8 +6563,8 @@ cache=_D__EXTENSIONS__
if eval test \${cv_prog_cc_flag_needed_$cache+y}
then :
printf %s "(cached) " >&6
-else $as_nop
-
+else case e in #(
+ e)
echo '
#include "confdefs.h"
#include <stdlib.h>
@@ -6490,7 +6609,8 @@ fi
fi
rm -f conftest conftest.c conftest.o
-
+ ;;
+esac
fi
if eval "test \"`echo '$cv_prog_cc_flag_needed_'$cache`\" = yes"; then
@@ -6546,8 +6666,8 @@ cache=`echo W | sed 'y%.=/+-%___p_%'`
if eval test \${cv_prog_cc_flag_$cache+y}
then :
printf %s "(cached) " >&6
-else $as_nop
-
+else case e in #(
+ e)
echo 'void f(void){}' >conftest.c
if test -z "`$CC $CPPFLAGS $CFLAGS -W -c conftest.c 2>&1`"; then
eval "cv_prog_cc_flag_$cache=yes"
@@ -6555,7 +6675,8 @@ else
eval "cv_prog_cc_flag_$cache=no"
fi
rm -f conftest conftest.o conftest.c
-
+ ;;
+esac
fi
if eval "test \"`echo '$cv_prog_cc_flag_'$cache`\" = yes"; then
@@ -6578,8 +6699,8 @@ cache=`echo Wall | sed 'y%.=/+-%___p_%'`
if eval test \${cv_prog_cc_flag_$cache+y}
then :
printf %s "(cached) " >&6
-else $as_nop
-
+else case e in #(
+ e)
echo 'void f(void){}' >conftest.c
if test -z "`$CC $CPPFLAGS $CFLAGS -Wall -c conftest.c 2>&1`"; then
eval "cv_prog_cc_flag_$cache=yes"
@@ -6587,7 +6708,8 @@ else
eval "cv_prog_cc_flag_$cache=no"
fi
rm -f conftest conftest.o conftest.c
-
+ ;;
+esac
fi
if eval "test \"`echo '$cv_prog_cc_flag_'$cache`\" = yes"; then
@@ -6610,8 +6732,8 @@ cache=`echo Wextra | sed 'y%.=/+-%___p_%'`
if eval test \${cv_prog_cc_flag_$cache+y}
then :
printf %s "(cached) " >&6
-else $as_nop
-
+else case e in #(
+ e)
echo 'void f(void){}' >conftest.c
if test -z "`$CC $CPPFLAGS $CFLAGS -Wextra -c conftest.c 2>&1`"; then
eval "cv_prog_cc_flag_$cache=yes"
@@ -6619,7 +6741,8 @@ else
eval "cv_prog_cc_flag_$cache=no"
fi
rm -f conftest conftest.o conftest.c
-
+ ;;
+esac
fi
if eval "test \"`echo '$cv_prog_cc_flag_'$cache`\" = yes"; then
@@ -6642,8 +6765,8 @@ cache=`echo Wdeclaration-after-statement | sed 'y%.=/+-%___p_%'`
if eval test \${cv_prog_cc_flag_$cache+y}
then :
printf %s "(cached) " >&6
-else $as_nop
-
+else case e in #(
+ e)
echo 'void f(void){}' >conftest.c
if test -z "`$CC $CPPFLAGS $CFLAGS -Wdeclaration-after-statement -c conftest.c 2>&1`"; then
eval "cv_prog_cc_flag_$cache=yes"
@@ -6651,7 +6774,8 @@ else
eval "cv_prog_cc_flag_$cache=no"
fi
rm -f conftest conftest.o conftest.c
-
+ ;;
+esac
fi
if eval "test \"`echo '$cv_prog_cc_flag_'$cache`\" = yes"; then
@@ -6716,9 +6840,10 @@ printf "%s\n" "yes" >&6; }
fi
rm -f conftest conftest.c conftest.o
-else $as_nop
- CFLAGS="$BAKCFLAGS" ; { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
-printf "%s\n" "no" >&6; }
+else case e in #(
+ e) CFLAGS="$BAKCFLAGS" ; { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; } ;;
+esac
fi
rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
@@ -6765,9 +6890,10 @@ printf "%s\n" "yes" >&6; }
fi
rm -f conftest conftest.c conftest.o
-else $as_nop
- LDFLAGS="$BAKLDFLAGS" ; CFLAGS="$BAKCFLAGS" ; { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
-printf "%s\n" "no" >&6; }
+else case e in #(
+ e) LDFLAGS="$BAKLDFLAGS" ; CFLAGS="$BAKCFLAGS" ; { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; } ;;
+esac
fi
rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
@@ -6812,9 +6938,10 @@ printf "%s\n" "yes" >&6; }
fi
rm -f conftest conftest.c conftest.o
-else $as_nop
- LDFLAGS="$BAKLDFLAGS" ; { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
-printf "%s\n" "no" >&6; }
+else case e in #(
+ e) LDFLAGS="$BAKLDFLAGS" ; { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; } ;;
+esac
fi
rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
@@ -6828,8 +6955,8 @@ printf %s "checking for inline... " >&6; }
if test ${ac_cv_c_inline+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- ac_cv_c_inline=no
+else case e in #(
+ e) ac_cv_c_inline=no
for ac_kw in inline __inline__ __inline; do
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -6847,7 +6974,8 @@ fi
rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
test "$ac_cv_c_inline" != no && break
done
-
+ ;;
+esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5
printf "%s\n" "$ac_cv_c_inline" >&6; }
@@ -6873,8 +7001,8 @@ printf %s "checking whether the C compiler (${CC-cc}) accepts the \"format\" att
if test ${ac_cv_c_format_attribute+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- ac_cv_c_format_attribute=no
+else case e in #(
+ e) ac_cv_c_format_attribute=no
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <stdio.h>
@@ -6894,11 +7022,13 @@ _ACEOF
if ac_fn_c_try_compile "$LINENO"
then :
ac_cv_c_format_attribute="yes"
-else $as_nop
- ac_cv_c_format_attribute="no"
+else case e in #(
+ e) ac_cv_c_format_attribute="no" ;;
+esac
fi
rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
-
+ ;;
+esac
fi
@@ -6916,8 +7046,8 @@ printf %s "checking whether the C compiler (${CC-cc}) accepts the \"unused\" att
if test ${ac_cv_c_unused_attribute+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- ac_cv_c_unused_attribute=no
+else case e in #(
+ e) ac_cv_c_unused_attribute=no
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <stdio.h>
@@ -6936,11 +7066,13 @@ _ACEOF
if ac_fn_c_try_compile "$LINENO"
then :
ac_cv_c_unused_attribute="yes"
-else $as_nop
- ac_cv_c_unused_attribute="no"
+else case e in #(
+ e) ac_cv_c_unused_attribute="no" ;;
+esac
fi
rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
-
+ ;;
+esac
fi
@@ -6963,8 +7095,8 @@ printf %s "checking whether the C compiler (${CC-cc}) accepts the \"nonstring\"
if test ${ac_cv_c_nonstring_attribute+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- ac_cv_c_nonstring_attribute=no
+else case e in #(
+ e) ac_cv_c_nonstring_attribute=no
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <stdio.h>
@@ -6986,12 +7118,14 @@ _ACEOF
if ac_fn_c_try_compile "$LINENO"
then :
ac_cv_c_nonstring_attribute="yes"
-else $as_nop
- ac_cv_c_nonstring_attribute="no"
+else case e in #(
+ e) ac_cv_c_nonstring_attribute="no" ;;
+esac
fi
rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
CFLAGS="$BAKCFLAGS"
-
+ ;;
+esac
fi
@@ -7013,8 +7147,8 @@ printf %s "checking whether the C compiler (${CC-cc}) accepts the \"weak\" attri
if test ${ac_cv_c_weak_attribute+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- ac_cv_c_weak_attribute=no
+else case e in #(
+ e) ac_cv_c_weak_attribute=no
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <stdio.h>
@@ -7033,11 +7167,13 @@ _ACEOF
if ac_fn_c_try_compile "$LINENO"
then :
ac_cv_c_weak_attribute="yes"
-else $as_nop
- ac_cv_c_weak_attribute="no"
+else case e in #(
+ e) ac_cv_c_weak_attribute="no" ;;
+esac
fi
rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
-
+ ;;
+esac
fi
@@ -7064,8 +7200,8 @@ printf %s "checking whether the C compiler (${CC-cc}) accepts the \"noreturn\" a
if test ${ac_cv_c_noreturn_attribute+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- ac_cv_c_noreturn_attribute=no
+else case e in #(
+ e) ac_cv_c_noreturn_attribute=no
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <stdio.h>
@@ -7091,11 +7227,13 @@ _ACEOF
if ac_fn_c_try_compile "$LINENO"
then :
ac_cv_c_noreturn_attribute="yes"
-else $as_nop
- ac_cv_c_noreturn_attribute="no"
+else case e in #(
+ e) ac_cv_c_noreturn_attribute="no" ;;
+esac
fi
rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
-
+ ;;
+esac
fi
@@ -7124,8 +7262,8 @@ 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
+else case e in #(
+ e) ac_cv_c_fallthrough_attribute=no
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <stdio.h>
@@ -7159,11 +7297,13 @@ _ACEOF
if ac_fn_c_try_compile "$LINENO"
then :
ac_cv_c_fallthrough_attribute="yes"
-else $as_nop
- ac_cv_c_fallthrough_attribute="no"
+else case e in #(
+ e) ac_cv_c_fallthrough_attribute="no" ;;
+esac
fi
rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
-
+ ;;
+esac
fi
CFLAGS="$BAKCFLAGS"
@@ -7201,8 +7341,8 @@ printf %s "checking for $ac_word... " >&6; }
if test ${ac_cv_prog_LEX+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- if test -n "$LEX"; then
+else case e in #(
+ e) if test -n "$LEX"; then
ac_cv_prog_LEX="$LEX" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -7224,7 +7364,8 @@ done
done
IFS=$as_save_IFS
-fi
+fi ;;
+esac
fi
LEX=$ac_cv_prog_LEX
if test -n "$LEX"; then
@@ -7282,8 +7423,8 @@ printf %s "checking for lex output file root... " >&6; }
if test ${ac_cv_prog_lex_root+y}
then :
printf %s "(cached) " >&6
-else $as_nop
-
+else case e in #(
+ e)
ac_cv_prog_lex_root=unknown
{ { ac_try="$LEX conftest.l"
case "(($ac_try" in
@@ -7300,7 +7441,8 @@ if test -f lex.yy.c; then
ac_cv_prog_lex_root=lex.yy
elif test -f lexyy.c; then
ac_cv_prog_lex_root=lexyy
-fi
+fi ;;
+esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_lex_root" >&5
printf "%s\n" "$ac_cv_prog_lex_root" >&6; }
@@ -7315,15 +7457,15 @@ LEX_OUTPUT_ROOT=$ac_cv_prog_lex_root
if test ${LEXLIB+y}
then :
-else $as_nop
-
+else case e in #(
+ e)
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for lex library" >&5
printf %s "checking for lex library... " >&6; }
if test ${ac_cv_lib_lex+y}
then :
printf %s "(cached) " >&6
-else $as_nop
-
+else case e in #(
+ e)
ac_save_LIBS="$LIBS"
ac_found=false
for ac_cv_lib_lex in 'none needed' -lfl -ll 'not found'; do
@@ -7353,7 +7495,8 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam \
fi
done
LIBS="$ac_save_LIBS"
-
+ ;;
+esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lex" >&5
printf "%s\n" "$ac_cv_lib_lex" >&6; }
@@ -7365,10 +7508,12 @@ printf "%s\n" "$as_me: WARNING: required lex library not found; giving up on $LE
elif test "$ac_cv_lib_lex" = 'none needed'
then :
LEXLIB=''
-else $as_nop
- LEXLIB=$ac_cv_lib_lex
+else case e in #(
+ e) LEXLIB=$ac_cv_lib_lex ;;
+esac
fi
-
+ ;;
+esac
fi
@@ -7380,8 +7525,8 @@ printf %s "checking whether yytext is a pointer... " >&6; }
if test ${ac_cv_prog_lex_yytext_pointer+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- # POSIX says lex can declare yytext either as a pointer or an array; the
+else case e in #(
+ e) # POSIX says lex can declare yytext either as a pointer or an array; the
# default is implementation-dependent. Figure out which it is, since
# not all implementations provide the %pointer and %array declarations.
ac_cv_prog_lex_yytext_pointer=no
@@ -7396,7 +7541,8 @@ then :
ac_cv_prog_lex_yytext_pointer=yes
fi
rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
-
+ ;;
+esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_lex_yytext_pointer" >&5
printf "%s\n" "$ac_cv_prog_lex_yytext_pointer" >&6; }
@@ -7456,8 +7602,8 @@ printf %s "checking for $ac_word... " >&6; }
if test ${ac_cv_prog_YACC+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- if test -n "$YACC"; then
+else case e in #(
+ e) if test -n "$YACC"; then
ac_cv_prog_YACC="$YACC" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -7479,7 +7625,8 @@ done
done
IFS=$as_save_IFS
-fi
+fi ;;
+esac
fi
YACC=$ac_cv_prog_YACC
if test -n "$YACC"; then
@@ -7507,8 +7654,8 @@ printf %s "checking for $ac_word... " >&6; }
if test ${ac_cv_prog_doxygen+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- if test -n "$doxygen"; then
+else case e in #(
+ e) if test -n "$doxygen"; then
ac_cv_prog_doxygen="$doxygen" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -7530,7 +7677,8 @@ done
done
IFS=$as_save_IFS
-fi
+fi ;;
+esac
fi
doxygen=$ac_cv_prog_doxygen
if test -n "$doxygen"; then
@@ -7550,8 +7698,8 @@ printf %s "checking for $ac_word... " >&6; }
if test ${ac_cv_prog_STRIP+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- if test -n "$STRIP"; then
+else case e in #(
+ e) if test -n "$STRIP"; then
ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -7573,7 +7721,8 @@ done
done
IFS=$as_save_IFS
-fi
+fi ;;
+esac
fi
STRIP=$ac_cv_prog_STRIP
if test -n "$STRIP"; then
@@ -7595,8 +7744,8 @@ printf %s "checking for $ac_word... " >&6; }
if test ${ac_cv_prog_ac_ct_STRIP+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- if test -n "$ac_ct_STRIP"; then
+else case e in #(
+ e) if test -n "$ac_ct_STRIP"; then
ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -7618,7 +7767,8 @@ done
done
IFS=$as_save_IFS
-fi
+fi ;;
+esac
fi
ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
if test -n "$ac_ct_STRIP"; then
@@ -7656,15 +7806,16 @@ printf %s "checking build system type... " >&6; }
if test ${ac_cv_build+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- ac_build_alias=$build_alias
+else case e in #(
+ e) ac_build_alias=$build_alias
test "x$ac_build_alias" = x &&
ac_build_alias=`$SHELL "${ac_aux_dir}config.guess"`
test "x$ac_build_alias" = x &&
as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5
ac_cv_build=`$SHELL "${ac_aux_dir}config.sub" $ac_build_alias` ||
as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $ac_build_alias failed" "$LINENO" 5
-
+ ;;
+esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
printf "%s\n" "$ac_cv_build" >&6; }
@@ -7691,14 +7842,15 @@ printf %s "checking host system type... " >&6; }
if test ${ac_cv_host+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- if test "x$host_alias" = x; then
+else case e in #(
+ e) if test "x$host_alias" = x; then
ac_cv_host=$ac_cv_build
else
ac_cv_host=`$SHELL "${ac_aux_dir}config.sub" $host_alias` ||
as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $host_alias failed" "$LINENO" 5
fi
-
+ ;;
+esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
printf "%s\n" "$ac_cv_host" >&6; }
@@ -7748,8 +7900,8 @@ printf %s "checking for $ac_word... " >&6; }
if test ${ac_cv_path_AR+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- case $AR in
+else case e in #(
+ e) case $AR in
[\\/]* | ?:[\\/]*)
ac_cv_path_AR="$AR" # Let the user override the test with a path.
;;
@@ -7774,6 +7926,7 @@ done
IFS=$as_save_IFS
;;
+esac ;;
esac
fi
AR=$ac_cv_path_AR
@@ -7796,8 +7949,8 @@ printf %s "checking for $ac_word... " >&6; }
if test ${ac_cv_path_ac_pt_AR+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- case $ac_pt_AR in
+else case e in #(
+ e) case $ac_pt_AR in
[\\/]* | ?:[\\/]*)
ac_cv_path_ac_pt_AR="$ac_pt_AR" # Let the user override the test with a path.
;;
@@ -7822,6 +7975,7 @@ done
IFS=$as_save_IFS
;;
+esac ;;
esac
fi
ac_pt_AR=$ac_cv_path_ac_pt_AR
@@ -7953,8 +8107,8 @@ printf %s "checking for a sed that does not truncate output... " >&6; }
if test ${ac_cv_path_SED+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
+else case e in #(
+ e) ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
for ac_i in 1 2 3 4 5 6 7; do
ac_script="$ac_script$as_nl$ac_script"
done
@@ -7979,9 +8133,10 @@ do
as_fn_executable_p "$ac_path_SED" || continue
# Check for GNU ac_path_SED and select it if it is found.
# Check for GNU $ac_path_SED
-case `"$ac_path_SED" --version 2>&1` in
+case `"$ac_path_SED" --version 2>&1` in #(
*GNU*)
ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;;
+#(
*)
ac_count=0
printf %s 0123456789 >"conftest.in"
@@ -8016,7 +8171,8 @@ IFS=$as_save_IFS
else
ac_cv_path_SED=$SED
fi
-
+ ;;
+esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5
printf "%s\n" "$ac_cv_path_SED" >&6; }
@@ -8041,8 +8197,8 @@ printf %s "checking for egrep... " >&6; }
if test ${ac_cv_path_EGREP+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
+else case e in #(
+ e) if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
then ac_cv_path_EGREP="$GREP -E"
else
if test -z "$EGREP"; then
@@ -8064,9 +8220,10 @@ do
as_fn_executable_p "$ac_path_EGREP" || continue
# Check for GNU ac_path_EGREP and select it if it is found.
# Check for GNU $ac_path_EGREP
-case `"$ac_path_EGREP" --version 2>&1` in
+case `"$ac_path_EGREP" --version 2>&1` in #(
*GNU*)
ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
+#(
*)
ac_count=0
printf %s 0123456789 >"conftest.in"
@@ -8102,20 +8259,23 @@ else
ac_cv_path_EGREP=$EGREP
fi
- fi
+ fi ;;
+esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
printf "%s\n" "$ac_cv_path_EGREP" >&6; }
EGREP="$ac_cv_path_EGREP"
+ EGREP_TRADITIONAL=$EGREP
+ ac_cv_path_EGREP_TRADITIONAL=$EGREP
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5
printf %s "checking for fgrep... " >&6; }
if test ${ac_cv_path_FGREP+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1
+else case e in #(
+ e) if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1
then ac_cv_path_FGREP="$GREP -F"
else
if test -z "$FGREP"; then
@@ -8137,9 +8297,10 @@ do
as_fn_executable_p "$ac_path_FGREP" || continue
# Check for GNU ac_path_FGREP and select it if it is found.
# Check for GNU $ac_path_FGREP
-case `"$ac_path_FGREP" --version 2>&1` in
+case `"$ac_path_FGREP" --version 2>&1` in #(
*GNU*)
ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;;
+#(
*)
ac_count=0
printf %s 0123456789 >"conftest.in"
@@ -8175,7 +8336,8 @@ else
ac_cv_path_FGREP=$FGREP
fi
- fi
+ fi ;;
+esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5
printf "%s\n" "$ac_cv_path_FGREP" >&6; }
@@ -8206,8 +8368,9 @@ test -z "$GREP" && GREP=grep
if test ${with_gnu_ld+y}
then :
withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes
-else $as_nop
- with_gnu_ld=no
+else case e in #(
+ e) with_gnu_ld=no ;;
+esac
fi
ac_prog=ld
@@ -8252,8 +8415,8 @@ fi
if test ${lt_cv_path_LD+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- if test -z "$LD"; then
+else case e in #(
+ e) if test -z "$LD"; then
lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR
for ac_dir in $PATH; do
IFS=$lt_save_ifs
@@ -8276,7 +8439,8 @@ else $as_nop
IFS=$lt_save_ifs
else
lt_cv_path_LD=$LD # Let the user override the test with a path.
-fi
+fi ;;
+esac
fi
LD=$lt_cv_path_LD
@@ -8293,8 +8457,8 @@ printf %s "checking if the linker ($LD) is GNU ld... " >&6; }
if test ${lt_cv_prog_gnu_ld+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- # I'd rather use --version here, but apparently some GNU lds only accept -v.
+else case e in #(
+ e) # I'd rather use --version here, but apparently some GNU lds only accept -v.
case `$LD -v 2>&1 </dev/null` in
*GNU* | *'with BFD'*)
lt_cv_prog_gnu_ld=yes
@@ -8302,6 +8466,7 @@ case `$LD -v 2>&1 </dev/null` in
*)
lt_cv_prog_gnu_ld=no
;;
+esac ;;
esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5
@@ -8321,8 +8486,8 @@ printf %s "checking for BSD- or MS-compatible name lister (nm)... " >&6; }
if test ${lt_cv_path_NM+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- if test -n "$NM"; then
+else case e in #(
+ e) if test -n "$NM"; then
# Let the user override the test.
lt_cv_path_NM=$NM
else
@@ -8369,7 +8534,8 @@ else
IFS=$lt_save_ifs
done
: ${lt_cv_path_NM=no}
-fi
+fi ;;
+esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5
printf "%s\n" "$lt_cv_path_NM" >&6; }
@@ -8390,8 +8556,8 @@ printf %s "checking for $ac_word... " >&6; }
if test ${ac_cv_prog_DUMPBIN+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- if test -n "$DUMPBIN"; then
+else case e in #(
+ e) if test -n "$DUMPBIN"; then
ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -8413,7 +8579,8 @@ done
done
IFS=$as_save_IFS
-fi
+fi ;;
+esac
fi
DUMPBIN=$ac_cv_prog_DUMPBIN
if test -n "$DUMPBIN"; then
@@ -8439,8 +8606,8 @@ printf %s "checking for $ac_word... " >&6; }
if test ${ac_cv_prog_ac_ct_DUMPBIN+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- if test -n "$ac_ct_DUMPBIN"; then
+else case e in #(
+ e) if test -n "$ac_ct_DUMPBIN"; then
ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -8462,7 +8629,8 @@ done
done
IFS=$as_save_IFS
-fi
+fi ;;
+esac
fi
ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN
if test -n "$ac_ct_DUMPBIN"; then
@@ -8516,8 +8684,8 @@ printf %s "checking the name lister ($NM) interface... " >&6; }
if test ${lt_cv_nm_interface+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- lt_cv_nm_interface="BSD nm"
+else case e in #(
+ e) lt_cv_nm_interface="BSD nm"
echo "int some_variable = 0;" > conftest.$ac_ext
(eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5)
(eval "$ac_compile" 2>conftest.err)
@@ -8530,7 +8698,8 @@ else $as_nop
if $GREP 'External.*some_variable' conftest.out > /dev/null; then
lt_cv_nm_interface="MS dumpbin"
fi
- rm -f conftest*
+ rm -f conftest* ;;
+esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5
printf "%s\n" "$lt_cv_nm_interface" >&6; }
@@ -8552,8 +8721,8 @@ printf %s "checking the maximum length of command line arguments... " >&6; }
if test ${lt_cv_sys_max_cmd_len+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- i=0
+else case e in #(
+ e) i=0
teststring=ABCD
case $build_os in
@@ -8675,7 +8844,8 @@ else $as_nop
fi
;;
esac
-
+ ;;
+esac
fi
if test -n "$lt_cv_sys_max_cmd_len"; then
@@ -8732,8 +8902,8 @@ printf %s "checking how to convert $build file names to $host format... " >&6; }
if test ${lt_cv_to_host_file_cmd+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- case $host in
+else case e in #(
+ e) case $host in
*-*-mingw* )
case $build in
*-*-mingw* | *-*-windows* ) # actually msys
@@ -8764,7 +8934,8 @@ else $as_nop
lt_cv_to_host_file_cmd=func_convert_file_noop
;;
esac
-
+ ;;
+esac
fi
to_host_file_cmd=$lt_cv_to_host_file_cmd
@@ -8780,8 +8951,8 @@ printf %s "checking how to convert $build file names to toolchain format... " >&
if test ${lt_cv_to_tool_file_cmd+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- #assume ordinary cross tools, or native build.
+else case e in #(
+ e) #assume ordinary cross tools, or native build.
lt_cv_to_tool_file_cmd=func_convert_file_noop
case $host in
*-*-mingw* | *-*-windows* )
@@ -8792,7 +8963,8 @@ case $host in
esac
;;
esac
-
+ ;;
+esac
fi
to_tool_file_cmd=$lt_cv_to_tool_file_cmd
@@ -8808,8 +8980,9 @@ printf %s "checking for $LD option to reload object files... " >&6; }
if test ${lt_cv_ld_reload_flag+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- lt_cv_ld_reload_flag='-r'
+else case e in #(
+ e) lt_cv_ld_reload_flag='-r' ;;
+esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5
printf "%s\n" "$lt_cv_ld_reload_flag" >&6; }
@@ -8849,8 +9022,8 @@ printf %s "checking for $ac_word... " >&6; }
if test ${ac_cv_prog_FILECMD+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- if test -n "$FILECMD"; then
+else case e in #(
+ e) if test -n "$FILECMD"; then
ac_cv_prog_FILECMD="$FILECMD" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -8873,7 +9046,8 @@ done
IFS=$as_save_IFS
test -z "$ac_cv_prog_FILECMD" && ac_cv_prog_FILECMD=":"
-fi
+fi ;;
+esac
fi
FILECMD=$ac_cv_prog_FILECMD
if test -n "$FILECMD"; then
@@ -8899,8 +9073,8 @@ printf %s "checking for $ac_word... " >&6; }
if test ${ac_cv_prog_OBJDUMP+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- if test -n "$OBJDUMP"; then
+else case e in #(
+ e) if test -n "$OBJDUMP"; then
ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -8922,7 +9096,8 @@ done
done
IFS=$as_save_IFS
-fi
+fi ;;
+esac
fi
OBJDUMP=$ac_cv_prog_OBJDUMP
if test -n "$OBJDUMP"; then
@@ -8944,8 +9119,8 @@ printf %s "checking for $ac_word... " >&6; }
if test ${ac_cv_prog_ac_ct_OBJDUMP+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- if test -n "$ac_ct_OBJDUMP"; then
+else case e in #(
+ e) if test -n "$ac_ct_OBJDUMP"; then
ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -8967,7 +9142,8 @@ done
done
IFS=$as_save_IFS
-fi
+fi ;;
+esac
fi
ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP
if test -n "$ac_ct_OBJDUMP"; then
@@ -9008,8 +9184,8 @@ printf %s "checking how to recognize dependent libraries... " >&6; }
if test ${lt_cv_deplibs_check_method+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- lt_cv_file_magic_cmd='$MAGIC_CMD'
+else case e in #(
+ e) lt_cv_file_magic_cmd='$MAGIC_CMD'
lt_cv_file_magic_test_file=
lt_cv_deplibs_check_method='unknown'
# Need to set the preceding variable on all platforms that support
@@ -9209,7 +9385,8 @@ os2*)
lt_cv_deplibs_check_method=pass_all
;;
esac
-
+ ;;
+esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5
printf "%s\n" "$lt_cv_deplibs_check_method" >&6; }
@@ -9261,8 +9438,8 @@ printf %s "checking for $ac_word... " >&6; }
if test ${ac_cv_prog_DLLTOOL+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- if test -n "$DLLTOOL"; then
+else case e in #(
+ e) if test -n "$DLLTOOL"; then
ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -9284,7 +9461,8 @@ done
done
IFS=$as_save_IFS
-fi
+fi ;;
+esac
fi
DLLTOOL=$ac_cv_prog_DLLTOOL
if test -n "$DLLTOOL"; then
@@ -9306,8 +9484,8 @@ printf %s "checking for $ac_word... " >&6; }
if test ${ac_cv_prog_ac_ct_DLLTOOL+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- if test -n "$ac_ct_DLLTOOL"; then
+else case e in #(
+ e) if test -n "$ac_ct_DLLTOOL"; then
ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -9329,7 +9507,8 @@ done
done
IFS=$as_save_IFS
-fi
+fi ;;
+esac
fi
ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL
if test -n "$ac_ct_DLLTOOL"; then
@@ -9371,8 +9550,8 @@ printf %s "checking how to associate runtime and link libraries... " >&6; }
if test ${lt_cv_sharedlib_from_linklib_cmd+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- lt_cv_sharedlib_from_linklib_cmd='unknown'
+else case e in #(
+ e) lt_cv_sharedlib_from_linklib_cmd='unknown'
case $host_os in
cygwin* | mingw* | windows* | pw32* | cegcc*)
@@ -9392,7 +9571,8 @@ cygwin* | mingw* | windows* | pw32* | cegcc*)
lt_cv_sharedlib_from_linklib_cmd=$ECHO
;;
esac
-
+ ;;
+esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5
printf "%s\n" "$lt_cv_sharedlib_from_linklib_cmd" >&6; }
@@ -9413,8 +9593,8 @@ printf %s "checking for $ac_word... " >&6; }
if test ${ac_cv_prog_RANLIB+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- if test -n "$RANLIB"; then
+else case e in #(
+ e) if test -n "$RANLIB"; then
ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -9436,7 +9616,8 @@ done
done
IFS=$as_save_IFS
-fi
+fi ;;
+esac
fi
RANLIB=$ac_cv_prog_RANLIB
if test -n "$RANLIB"; then
@@ -9458,8 +9639,8 @@ printf %s "checking for $ac_word... " >&6; }
if test ${ac_cv_prog_ac_ct_RANLIB+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- if test -n "$ac_ct_RANLIB"; then
+else case e in #(
+ e) if test -n "$ac_ct_RANLIB"; then
ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -9481,7 +9662,8 @@ done
done
IFS=$as_save_IFS
-fi
+fi ;;
+esac
fi
ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
if test -n "$ac_ct_RANLIB"; then
@@ -9517,8 +9699,8 @@ printf %s "checking for $ac_word... " >&6; }
if test ${ac_cv_prog_AR+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- if test -n "$AR"; then
+else case e in #(
+ e) if test -n "$AR"; then
ac_cv_prog_AR="$AR" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -9540,7 +9722,8 @@ done
done
IFS=$as_save_IFS
-fi
+fi ;;
+esac
fi
AR=$ac_cv_prog_AR
if test -n "$AR"; then
@@ -9566,8 +9749,8 @@ printf %s "checking for $ac_word... " >&6; }
if test ${ac_cv_prog_ac_ct_AR+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- if test -n "$ac_ct_AR"; then
+else case e in #(
+ e) if test -n "$ac_ct_AR"; then
ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -9589,7 +9772,8 @@ done
done
IFS=$as_save_IFS
-fi
+fi ;;
+esac
fi
ac_ct_AR=$ac_cv_prog_ac_ct_AR
if test -n "$ac_ct_AR"; then
@@ -9651,8 +9835,8 @@ printf %s "checking for archiver @FILE support... " >&6; }
if test ${lt_cv_ar_at_file+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- lt_cv_ar_at_file=no
+else case e in #(
+ e) lt_cv_ar_at_file=no
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -9689,7 +9873,8 @@ then :
fi
rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
-
+ ;;
+esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5
printf "%s\n" "$lt_cv_ar_at_file" >&6; }
@@ -9714,8 +9899,8 @@ printf %s "checking for $ac_word... " >&6; }
if test ${ac_cv_prog_STRIP+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- if test -n "$STRIP"; then
+else case e in #(
+ e) if test -n "$STRIP"; then
ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -9737,7 +9922,8 @@ done
done
IFS=$as_save_IFS
-fi
+fi ;;
+esac
fi
STRIP=$ac_cv_prog_STRIP
if test -n "$STRIP"; then
@@ -9759,8 +9945,8 @@ printf %s "checking for $ac_word... " >&6; }
if test ${ac_cv_prog_ac_ct_STRIP+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- if test -n "$ac_ct_STRIP"; then
+else case e in #(
+ e) if test -n "$ac_ct_STRIP"; then
ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -9782,7 +9968,8 @@ done
done
IFS=$as_save_IFS
-fi
+fi ;;
+esac
fi
ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
if test -n "$ac_ct_STRIP"; then
@@ -9869,8 +10056,8 @@ printf %s "checking for $ac_word... " >&6; }
if test ${ac_cv_prog_AWK+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- if test -n "$AWK"; then
+else case e in #(
+ e) if test -n "$AWK"; then
ac_cv_prog_AWK="$AWK" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -9892,7 +10079,8 @@ done
done
IFS=$as_save_IFS
-fi
+fi ;;
+esac
fi
AWK=$ac_cv_prog_AWK
if test -n "$AWK"; then
@@ -9941,8 +10129,8 @@ printf %s "checking command to parse $NM output from $compiler object... " >&6;
if test ${lt_cv_sys_global_symbol_pipe+y}
then :
printf %s "(cached) " >&6
-else $as_nop
-
+else case e in #(
+ e)
# These are sane defaults that work on at least a few old systems.
# [They come from Ultrix. What could be older than Ultrix?!! ;)]
@@ -10194,7 +10382,8 @@ _LT_EOF
lt_cv_sys_global_symbol_pipe=
fi
done
-
+ ;;
+esac
fi
if test -z "$lt_cv_sys_global_symbol_pipe"; then
@@ -10258,8 +10447,9 @@ printf %s "checking for sysroot... " >&6; }
if test ${with_sysroot+y}
then :
withval=$with_sysroot;
-else $as_nop
- with_sysroot=no
+else case e in #(
+ e) with_sysroot=no ;;
+esac
fi
@@ -10296,8 +10486,8 @@ printf %s "checking for a working dd... " >&6; }
if test ${ac_cv_path_lt_DD+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- printf 0123456789abcdef0123456789abcdef >conftest.i
+else case e in #(
+ e) printf 0123456789abcdef0123456789abcdef >conftest.i
cat conftest.i conftest.i >conftest2.i
: ${lt_DD:=$DD}
if test -z "$lt_DD"; then
@@ -10333,7 +10523,8 @@ else
ac_cv_path_lt_DD=$lt_DD
fi
-rm -f conftest.i conftest2.i conftest.out
+rm -f conftest.i conftest2.i conftest.out ;;
+esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_lt_DD" >&5
printf "%s\n" "$ac_cv_path_lt_DD" >&6; }
@@ -10344,8 +10535,8 @@ printf %s "checking how to truncate binary pipes... " >&6; }
if test ${lt_cv_truncate_bin+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- printf 0123456789abcdef0123456789abcdef >conftest.i
+else case e in #(
+ e) printf 0123456789abcdef0123456789abcdef >conftest.i
cat conftest.i conftest.i >conftest2.i
lt_cv_truncate_bin=
if "$ac_cv_path_lt_DD" bs=32 count=1 <conftest2.i >conftest.out 2>/dev/null; then
@@ -10353,7 +10544,8 @@ if "$ac_cv_path_lt_DD" bs=32 count=1 <conftest2.i >conftest.out 2>/dev/null; the
&& lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1"
fi
rm -f conftest.i conftest2.i conftest.out
-test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q"
+test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q" ;;
+esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_truncate_bin" >&5
printf "%s\n" "$lt_cv_truncate_bin" >&6; }
@@ -10563,8 +10755,8 @@ printf %s "checking whether the C compiler needs -belf... " >&6; }
if test ${lt_cv_cc_needs_belf+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- ac_ext=c
+else case e in #(
+ e) ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
@@ -10584,8 +10776,9 @@ _ACEOF
if ac_fn_c_try_link "$LINENO"
then :
lt_cv_cc_needs_belf=yes
-else $as_nop
- lt_cv_cc_needs_belf=no
+else case e in #(
+ e) lt_cv_cc_needs_belf=no ;;
+esac
fi
rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
@@ -10594,7 +10787,8 @@ ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
+ ;;
+esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5
printf "%s\n" "$lt_cv_cc_needs_belf" >&6; }
@@ -10652,8 +10846,8 @@ printf %s "checking for $ac_word... " >&6; }
if test ${ac_cv_prog_MANIFEST_TOOL+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- if test -n "$MANIFEST_TOOL"; then
+else case e in #(
+ e) if test -n "$MANIFEST_TOOL"; then
ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -10675,7 +10869,8 @@ done
done
IFS=$as_save_IFS
-fi
+fi ;;
+esac
fi
MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL
if test -n "$MANIFEST_TOOL"; then
@@ -10697,8 +10892,8 @@ printf %s "checking for $ac_word... " >&6; }
if test ${ac_cv_prog_ac_ct_MANIFEST_TOOL+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- if test -n "$ac_ct_MANIFEST_TOOL"; then
+else case e in #(
+ e) if test -n "$ac_ct_MANIFEST_TOOL"; then
ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -10720,7 +10915,8 @@ done
done
IFS=$as_save_IFS
-fi
+fi ;;
+esac
fi
ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL
if test -n "$ac_ct_MANIFEST_TOOL"; then
@@ -10752,15 +10948,16 @@ printf %s "checking if $MANIFEST_TOOL is a manifest tool... " >&6; }
if test ${lt_cv_path_manifest_tool+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- lt_cv_path_manifest_tool=no
+else case e in #(
+ e) lt_cv_path_manifest_tool=no
echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5
$MANIFEST_TOOL '-?' 2>conftest.err > conftest.out
cat conftest.err >&5
if $GREP 'Manifest Tool' conftest.out > /dev/null; then
lt_cv_path_manifest_tool=yes
fi
- rm -f conftest*
+ rm -f conftest* ;;
+esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_manifest_tool" >&5
printf "%s\n" "$lt_cv_path_manifest_tool" >&6; }
@@ -10783,8 +10980,8 @@ printf %s "checking for $ac_word... " >&6; }
if test ${ac_cv_prog_DSYMUTIL+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- if test -n "$DSYMUTIL"; then
+else case e in #(
+ e) if test -n "$DSYMUTIL"; then
ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -10806,7 +11003,8 @@ done
done
IFS=$as_save_IFS
-fi
+fi ;;
+esac
fi
DSYMUTIL=$ac_cv_prog_DSYMUTIL
if test -n "$DSYMUTIL"; then
@@ -10828,8 +11026,8 @@ printf %s "checking for $ac_word... " >&6; }
if test ${ac_cv_prog_ac_ct_DSYMUTIL+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- if test -n "$ac_ct_DSYMUTIL"; then
+else case e in #(
+ e) if test -n "$ac_ct_DSYMUTIL"; then
ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -10851,7 +11049,8 @@ done
done
IFS=$as_save_IFS
-fi
+fi ;;
+esac
fi
ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL
if test -n "$ac_ct_DSYMUTIL"; then
@@ -10885,8 +11084,8 @@ printf %s "checking for $ac_word... " >&6; }
if test ${ac_cv_prog_NMEDIT+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- if test -n "$NMEDIT"; then
+else case e in #(
+ e) if test -n "$NMEDIT"; then
ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -10908,7 +11107,8 @@ done
done
IFS=$as_save_IFS
-fi
+fi ;;
+esac
fi
NMEDIT=$ac_cv_prog_NMEDIT
if test -n "$NMEDIT"; then
@@ -10930,8 +11130,8 @@ printf %s "checking for $ac_word... " >&6; }
if test ${ac_cv_prog_ac_ct_NMEDIT+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- if test -n "$ac_ct_NMEDIT"; then
+else case e in #(
+ e) if test -n "$ac_ct_NMEDIT"; then
ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -10953,7 +11153,8 @@ done
done
IFS=$as_save_IFS
-fi
+fi ;;
+esac
fi
ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT
if test -n "$ac_ct_NMEDIT"; then
@@ -10987,8 +11188,8 @@ printf %s "checking for $ac_word... " >&6; }
if test ${ac_cv_prog_LIPO+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- if test -n "$LIPO"; then
+else case e in #(
+ e) if test -n "$LIPO"; then
ac_cv_prog_LIPO="$LIPO" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -11010,7 +11211,8 @@ done
done
IFS=$as_save_IFS
-fi
+fi ;;
+esac
fi
LIPO=$ac_cv_prog_LIPO
if test -n "$LIPO"; then
@@ -11032,8 +11234,8 @@ printf %s "checking for $ac_word... " >&6; }
if test ${ac_cv_prog_ac_ct_LIPO+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- if test -n "$ac_ct_LIPO"; then
+else case e in #(
+ e) if test -n "$ac_ct_LIPO"; then
ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -11055,7 +11257,8 @@ done
done
IFS=$as_save_IFS
-fi
+fi ;;
+esac
fi
ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO
if test -n "$ac_ct_LIPO"; then
@@ -11089,8 +11292,8 @@ printf %s "checking for $ac_word... " >&6; }
if test ${ac_cv_prog_OTOOL+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- if test -n "$OTOOL"; then
+else case e in #(
+ e) if test -n "$OTOOL"; then
ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -11112,7 +11315,8 @@ done
done
IFS=$as_save_IFS
-fi
+fi ;;
+esac
fi
OTOOL=$ac_cv_prog_OTOOL
if test -n "$OTOOL"; then
@@ -11134,8 +11338,8 @@ printf %s "checking for $ac_word... " >&6; }
if test ${ac_cv_prog_ac_ct_OTOOL+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- if test -n "$ac_ct_OTOOL"; then
+else case e in #(
+ e) if test -n "$ac_ct_OTOOL"; then
ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -11157,7 +11361,8 @@ done
done
IFS=$as_save_IFS
-fi
+fi ;;
+esac
fi
ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL
if test -n "$ac_ct_OTOOL"; then
@@ -11191,8 +11396,8 @@ printf %s "checking for $ac_word... " >&6; }
if test ${ac_cv_prog_OTOOL64+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- if test -n "$OTOOL64"; then
+else case e in #(
+ e) if test -n "$OTOOL64"; then
ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -11214,7 +11419,8 @@ done
done
IFS=$as_save_IFS
-fi
+fi ;;
+esac
fi
OTOOL64=$ac_cv_prog_OTOOL64
if test -n "$OTOOL64"; then
@@ -11236,8 +11442,8 @@ printf %s "checking for $ac_word... " >&6; }
if test ${ac_cv_prog_ac_ct_OTOOL64+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- if test -n "$ac_ct_OTOOL64"; then
+else case e in #(
+ e) if test -n "$ac_ct_OTOOL64"; then
ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -11259,7 +11465,8 @@ done
done
IFS=$as_save_IFS
-fi
+fi ;;
+esac
fi
ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64
if test -n "$ac_ct_OTOOL64"; then
@@ -11316,8 +11523,8 @@ printf %s "checking for -single_module linker flag... " >&6; }
if test ${lt_cv_apple_cc_single_mod+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- lt_cv_apple_cc_single_mod=no
+else case e in #(
+ e) lt_cv_apple_cc_single_mod=no
if test -z "$LT_MULTI_MODULE"; then
# By default we will add the -single_module flag. You can override
# by either setting the environment variable LT_MULTI_MODULE
@@ -11343,7 +11550,8 @@ else $as_nop
fi
rm -rf libconftest.dylib*
rm -f conftest.*
- fi
+ fi ;;
+esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5
printf "%s\n" "$lt_cv_apple_cc_single_mod" >&6; }
@@ -11355,8 +11563,8 @@ printf %s "checking for -no_fixup_chains linker flag... " >&6; }
if test ${lt_cv_support_no_fixup_chains+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- save_LDFLAGS=$LDFLAGS
+else case e in #(
+ e) save_LDFLAGS=$LDFLAGS
LDFLAGS="$LDFLAGS -Wl,-no_fixup_chains"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -11372,15 +11580,17 @@ _ACEOF
if ac_fn_c_try_link "$LINENO"
then :
lt_cv_support_no_fixup_chains=yes
-else $as_nop
- lt_cv_support_no_fixup_chains=no
-
+else case e in #(
+ e) lt_cv_support_no_fixup_chains=no
+ ;;
+esac
fi
rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
LDFLAGS=$save_LDFLAGS
-
+ ;;
+esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_support_no_fixup_chains" >&5
printf "%s\n" "$lt_cv_support_no_fixup_chains" >&6; }
@@ -11390,8 +11600,8 @@ printf %s "checking for -exported_symbols_list linker flag... " >&6; }
if test ${lt_cv_ld_exported_symbols_list+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- lt_cv_ld_exported_symbols_list=no
+else case e in #(
+ e) lt_cv_ld_exported_symbols_list=no
save_LDFLAGS=$LDFLAGS
echo "_main" > conftest.sym
LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym"
@@ -11409,13 +11619,15 @@ _ACEOF
if ac_fn_c_try_link "$LINENO"
then :
lt_cv_ld_exported_symbols_list=yes
-else $as_nop
- lt_cv_ld_exported_symbols_list=no
+else case e in #(
+ e) lt_cv_ld_exported_symbols_list=no ;;
+esac
fi
rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
LDFLAGS=$save_LDFLAGS
-
+ ;;
+esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5
printf "%s\n" "$lt_cv_ld_exported_symbols_list" >&6; }
@@ -11425,8 +11637,8 @@ printf %s "checking for -force_load linker flag... " >&6; }
if test ${lt_cv_ld_force_load+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- lt_cv_ld_force_load=no
+else case e in #(
+ e) lt_cv_ld_force_load=no
cat > conftest.c << _LT_EOF
int forced_loaded() { return 2;}
_LT_EOF
@@ -11451,7 +11663,8 @@ _LT_EOF
fi
rm -f conftest.err libconftest.a conftest conftest.c
rm -rf conftest.dSYM
-
+ ;;
+esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5
printf "%s\n" "$lt_cv_ld_force_load" >&6; }
@@ -11583,8 +11796,9 @@ then :
IFS=$lt_save_ifs
;;
esac
-else $as_nop
- enable_shared=yes
+else case e in #(
+ e) enable_shared=yes ;;
+esac
fi
@@ -11615,8 +11829,9 @@ then :
IFS=$lt_save_ifs
;;
esac
-else $as_nop
- enable_static=yes
+else case e in #(
+ e) enable_static=yes ;;
+esac
fi
@@ -11646,8 +11861,8 @@ then :
IFS=$lt_save_ifs
;;
esac
-else $as_nop
- # Check whether --with-pic was given.
+else case e in #(
+ e) # Check whether --with-pic was given.
if test ${with_pic+y}
then :
withval=$with_pic; lt_p=${PACKAGE-default}
@@ -11666,11 +11881,13 @@ then :
IFS=$lt_save_ifs
;;
esac
-else $as_nop
- pic_mode=default
+else case e in #(
+ e) pic_mode=default ;;
+esac
fi
-
+ ;;
+esac
fi
@@ -11700,8 +11917,9 @@ then :
IFS=$lt_save_ifs
;;
esac
-else $as_nop
- enable_fast_install=yes
+else case e in #(
+ e) enable_fast_install=yes ;;
+esac
fi
@@ -11727,8 +11945,8 @@ then :
;;
esac
lt_cv_with_aix_soname=$enable_aix_soname
-else $as_nop
- # Check whether --with-aix-soname was given.
+else case e in #(
+ e) # Check whether --with-aix-soname was given.
if test ${with_aix_soname+y}
then :
withval=$with_aix_soname; case $withval in
@@ -11739,17 +11957,20 @@ then :
;;
esac
lt_cv_with_aix_soname=$with_aix_soname
-else $as_nop
- if test ${lt_cv_with_aix_soname+y}
+else case e in #(
+ e) if test ${lt_cv_with_aix_soname+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- lt_cv_with_aix_soname=aix
+else case e in #(
+ e) lt_cv_with_aix_soname=aix ;;
+esac
fi
-
+ ;;
+esac
fi
- enable_aix_soname=$lt_cv_with_aix_soname
+ enable_aix_soname=$lt_cv_with_aix_soname ;;
+esac
fi
with_aix_soname=$enable_aix_soname
@@ -11841,8 +12062,8 @@ printf %s "checking for objdir... " >&6; }
if test ${lt_cv_objdir+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- rm -f .libs 2>/dev/null
+else case e in #(
+ e) rm -f .libs 2>/dev/null
mkdir .libs 2>/dev/null
if test -d .libs; then
lt_cv_objdir=.libs
@@ -11850,7 +12071,8 @@ else
# MS-DOS does not allow filenames that begin with a dot.
lt_cv_objdir=_libs
fi
-rmdir .libs 2>/dev/null
+rmdir .libs 2>/dev/null ;;
+esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5
printf "%s\n" "$lt_cv_objdir" >&6; }
@@ -11911,8 +12133,8 @@ printf %s "checking for ${ac_tool_prefix}file... " >&6; }
if test ${lt_cv_path_MAGIC_CMD+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- case $MAGIC_CMD in
+else case e in #(
+ e) case $MAGIC_CMD in
[\\/*] | ?:[\\/]*)
lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path.
;;
@@ -11955,6 +12177,7 @@ _LT_EOF
IFS=$lt_save_ifs
MAGIC_CMD=$lt_save_MAGIC_CMD
;;
+esac ;;
esac
fi
@@ -11978,8 +12201,8 @@ printf %s "checking for file... " >&6; }
if test ${lt_cv_path_MAGIC_CMD+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- case $MAGIC_CMD in
+else case e in #(
+ e) case $MAGIC_CMD in
[\\/*] | ?:[\\/]*)
lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path.
;;
@@ -12022,6 +12245,7 @@ _LT_EOF
IFS=$lt_save_ifs
MAGIC_CMD=$lt_save_MAGIC_CMD
;;
+esac ;;
esac
fi
@@ -12117,8 +12341,8 @@ printf %s "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; }
if test ${lt_cv_prog_compiler_rtti_exceptions+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- lt_cv_prog_compiler_rtti_exceptions=no
+else case e in #(
+ e) lt_cv_prog_compiler_rtti_exceptions=no
ac_outfile=conftest.$ac_objext
echo "$lt_simple_compile_test_code" > conftest.$ac_ext
lt_compiler_flag="-fno-rtti -fno-exceptions" ## exclude from sc_useless_quotes_in_assignment
@@ -12146,7 +12370,8 @@ else $as_nop
fi
fi
$RM conftest*
-
+ ;;
+esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5
printf "%s\n" "$lt_cv_prog_compiler_rtti_exceptions" >&6; }
@@ -12526,8 +12751,9 @@ printf %s "checking for $compiler option to produce PIC... " >&6; }
if test ${lt_cv_prog_compiler_pic+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- lt_cv_prog_compiler_pic=$lt_prog_compiler_pic
+else case e in #(
+ e) lt_cv_prog_compiler_pic=$lt_prog_compiler_pic ;;
+esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5
printf "%s\n" "$lt_cv_prog_compiler_pic" >&6; }
@@ -12542,8 +12768,8 @@ printf %s "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6;
if test ${lt_cv_prog_compiler_pic_works+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- lt_cv_prog_compiler_pic_works=no
+else case e in #(
+ e) lt_cv_prog_compiler_pic_works=no
ac_outfile=conftest.$ac_objext
echo "$lt_simple_compile_test_code" > conftest.$ac_ext
lt_compiler_flag="$lt_prog_compiler_pic -DPIC" ## exclude from sc_useless_quotes_in_assignment
@@ -12571,7 +12797,8 @@ else $as_nop
fi
fi
$RM conftest*
-
+ ;;
+esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5
printf "%s\n" "$lt_cv_prog_compiler_pic_works" >&6; }
@@ -12607,8 +12834,8 @@ printf %s "checking if $compiler static flag $lt_tmp_static_flag works... " >&6;
if test ${lt_cv_prog_compiler_static_works+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- lt_cv_prog_compiler_static_works=no
+else case e in #(
+ e) lt_cv_prog_compiler_static_works=no
save_LDFLAGS=$LDFLAGS
LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
echo "$lt_simple_link_test_code" > conftest.$ac_ext
@@ -12629,7 +12856,8 @@ else $as_nop
fi
$RM -r conftest*
LDFLAGS=$save_LDFLAGS
-
+ ;;
+esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5
printf "%s\n" "$lt_cv_prog_compiler_static_works" >&6; }
@@ -12651,8 +12879,8 @@ printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
if test ${lt_cv_prog_compiler_c_o+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- lt_cv_prog_compiler_c_o=no
+else case e in #(
+ e) lt_cv_prog_compiler_c_o=no
$RM -r conftest 2>/dev/null
mkdir conftest
cd conftest
@@ -12692,7 +12920,8 @@ else $as_nop
cd ..
$RM -r conftest
$RM conftest*
-
+ ;;
+esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5
printf "%s\n" "$lt_cv_prog_compiler_c_o" >&6; }
@@ -12707,8 +12936,8 @@ printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
if test ${lt_cv_prog_compiler_c_o+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- lt_cv_prog_compiler_c_o=no
+else case e in #(
+ e) lt_cv_prog_compiler_c_o=no
$RM -r conftest 2>/dev/null
mkdir conftest
cd conftest
@@ -12748,7 +12977,8 @@ else $as_nop
cd ..
$RM -r conftest
$RM conftest*
-
+ ;;
+esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5
printf "%s\n" "$lt_cv_prog_compiler_c_o" >&6; }
@@ -13347,8 +13577,8 @@ else
if test ${lt_cv_aix_libpath_+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+else case e in #(
+ e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
@@ -13380,7 +13610,8 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam \
if test -z "$lt_cv_aix_libpath_"; then
lt_cv_aix_libpath_=/usr/lib:/lib
fi
-
+ ;;
+esac
fi
aix_libpath=$lt_cv_aix_libpath_
@@ -13402,8 +13633,8 @@ else
if test ${lt_cv_aix_libpath_+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+else case e in #(
+ e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
@@ -13435,7 +13666,8 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam \
if test -z "$lt_cv_aix_libpath_"; then
lt_cv_aix_libpath_=/usr/lib:/lib
fi
-
+ ;;
+esac
fi
aix_libpath=$lt_cv_aix_libpath_
@@ -13686,8 +13918,8 @@ printf %s "checking if $CC understands -b... " >&6; }
if test ${lt_cv_prog_compiler__b+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- lt_cv_prog_compiler__b=no
+else case e in #(
+ e) lt_cv_prog_compiler__b=no
save_LDFLAGS=$LDFLAGS
LDFLAGS="$LDFLAGS -b"
echo "$lt_simple_link_test_code" > conftest.$ac_ext
@@ -13708,7 +13940,8 @@ else $as_nop
fi
$RM -r conftest*
LDFLAGS=$save_LDFLAGS
-
+ ;;
+esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5
printf "%s\n" "$lt_cv_prog_compiler__b" >&6; }
@@ -13756,8 +13989,8 @@ printf %s "checking whether the $host_os linker accepts -exported_symbol... " >&
if test ${lt_cv_irix_exported_symbol+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- save_LDFLAGS=$LDFLAGS
+else case e in #(
+ e) save_LDFLAGS=$LDFLAGS
LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -13766,12 +13999,14 @@ _ACEOF
if ac_fn_c_try_link "$LINENO"
then :
lt_cv_irix_exported_symbol=yes
-else $as_nop
- lt_cv_irix_exported_symbol=no
+else case e in #(
+ e) lt_cv_irix_exported_symbol=no ;;
+esac
fi
rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
- LDFLAGS=$save_LDFLAGS
+ LDFLAGS=$save_LDFLAGS ;;
+esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5
printf "%s\n" "$lt_cv_irix_exported_symbol" >&6; }
@@ -14104,8 +14339,8 @@ printf %s "checking whether -lc should be explicitly linked in... " >&6; }
if test ${lt_cv_archive_cmds_need_lc+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- $RM conftest*
+else case e in #(
+ e) $RM conftest*
echo "$lt_simple_compile_test_code" > conftest.$ac_ext
if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
@@ -14141,7 +14376,8 @@ else $as_nop
cat conftest.err 1>&5
fi
$RM conftest*
-
+ ;;
+esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5
printf "%s\n" "$lt_cv_archive_cmds_need_lc" >&6; }
@@ -14722,8 +14958,9 @@ _ACEOF
if ac_fn_c_try_compile "$LINENO"
then :
shlibpath_var=LD_LIBRARY_PATH
-else $as_nop
- shlibpath_var=LD_32_LIBRARY_PATH
+else case e in #(
+ e) shlibpath_var=LD_32_LIBRARY_PATH ;;
+esac
fi
rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
;;
@@ -14904,8 +15141,8 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
if test ${lt_cv_shlibpath_overrides_runpath+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- lt_cv_shlibpath_overrides_runpath=no
+else case e in #(
+ e) lt_cv_shlibpath_overrides_runpath=no
save_LDFLAGS=$LDFLAGS
save_libdir=$libdir
eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \
@@ -14932,7 +15169,8 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
LDFLAGS=$save_LDFLAGS
libdir=$save_libdir
-
+ ;;
+esac
fi
shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath
@@ -15564,8 +15802,9 @@ printf %s "checking for $compiler option to produce PIC... " >&6; }
if test ${lt_cv_prog_compiler_pic+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- lt_cv_prog_compiler_pic=$lt_prog_compiler_pic
+else case e in #(
+ e) lt_cv_prog_compiler_pic=$lt_prog_compiler_pic ;;
+esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5
printf "%s\n" "$lt_cv_prog_compiler_pic" >&6; }
@@ -15580,8 +15819,8 @@ printf %s "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6;
if test ${lt_cv_prog_compiler_pic_works+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- lt_cv_prog_compiler_pic_works=no
+else case e in #(
+ e) lt_cv_prog_compiler_pic_works=no
ac_outfile=conftest.$ac_objext
echo "$lt_simple_compile_test_code" > conftest.$ac_ext
lt_compiler_flag="$lt_prog_compiler_pic -DPIC" ## exclude from sc_useless_quotes_in_assignment
@@ -15609,7 +15848,8 @@ else $as_nop
fi
fi
$RM conftest*
-
+ ;;
+esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5
printf "%s\n" "$lt_cv_prog_compiler_pic_works" >&6; }
@@ -15639,8 +15879,8 @@ printf %s "checking if $compiler static flag $lt_tmp_static_flag works... " >&6;
if test ${lt_cv_prog_compiler_static_works+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- lt_cv_prog_compiler_static_works=no
+else case e in #(
+ e) lt_cv_prog_compiler_static_works=no
save_LDFLAGS=$LDFLAGS
LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
echo "$lt_simple_link_test_code" > conftest.$ac_ext
@@ -15661,7 +15901,8 @@ else $as_nop
fi
$RM -r conftest*
LDFLAGS=$save_LDFLAGS
-
+ ;;
+esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5
printf "%s\n" "$lt_cv_prog_compiler_static_works" >&6; }
@@ -15882,16 +16123,22 @@ printf %s "checking for dlopen in -ldl... " >&6; }
if test ${ac_cv_lib_dl_dlopen+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- ac_check_lib_save_LIBS=$LIBS
+else case e in #(
+ e) ac_check_lib_save_LIBS=$LIBS
LIBS="-ldl $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-char dlopen ();
+ builtin and then its argument prototype would still apply.
+ The 'extern "C"' is for builds by C++ compilers;
+ although this is not generally supported in C code supporting it here
+ has little cost and some practical benefit (sr 110532). */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen (void);
int
main (void)
{
@@ -15903,24 +16150,27 @@ _ACEOF
if ac_fn_c_try_link "$LINENO"
then :
ac_cv_lib_dl_dlopen=yes
-else $as_nop
- ac_cv_lib_dl_dlopen=no
+else case e in #(
+ e) ac_cv_lib_dl_dlopen=no ;;
+esac
fi
rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
+LIBS=$ac_check_lib_save_LIBS ;;
+esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
printf "%s\n" "$ac_cv_lib_dl_dlopen" >&6; }
if test "x$ac_cv_lib_dl_dlopen" = xyes
then :
lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl
-else $as_nop
-
+else case e in #(
+ e)
lt_cv_dlopen=dyld
lt_cv_dlopen_libs=
lt_cv_dlopen_self=yes
-
+ ;;
+esac
fi
;;
@@ -15938,22 +16188,28 @@ fi
if test "x$ac_cv_func_shl_load" = xyes
then :
lt_cv_dlopen=shl_load
-else $as_nop
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5
+else case e in #(
+ e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5
printf %s "checking for shl_load in -ldld... " >&6; }
if test ${ac_cv_lib_dld_shl_load+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- ac_check_lib_save_LIBS=$LIBS
+else case e in #(
+ e) ac_check_lib_save_LIBS=$LIBS
LIBS="-ldld $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-char shl_load ();
+ builtin and then its argument prototype would still apply.
+ The 'extern "C"' is for builds by C++ compilers;
+ although this is not generally supported in C code supporting it here
+ has little cost and some practical benefit (sr 110532). */
+#ifdef __cplusplus
+extern "C"
+#endif
+char shl_load (void);
int
main (void)
{
@@ -15965,39 +16221,47 @@ _ACEOF
if ac_fn_c_try_link "$LINENO"
then :
ac_cv_lib_dld_shl_load=yes
-else $as_nop
- ac_cv_lib_dld_shl_load=no
+else case e in #(
+ e) ac_cv_lib_dld_shl_load=no ;;
+esac
fi
rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
+LIBS=$ac_check_lib_save_LIBS ;;
+esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5
printf "%s\n" "$ac_cv_lib_dld_shl_load" >&6; }
if test "x$ac_cv_lib_dld_shl_load" = xyes
then :
lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld
-else $as_nop
- ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen"
+else case e in #(
+ e) ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen"
if test "x$ac_cv_func_dlopen" = xyes
then :
lt_cv_dlopen=dlopen
-else $as_nop
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
+else case e in #(
+ e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
printf %s "checking for dlopen in -ldl... " >&6; }
if test ${ac_cv_lib_dl_dlopen+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- ac_check_lib_save_LIBS=$LIBS
+else case e in #(
+ e) ac_check_lib_save_LIBS=$LIBS
LIBS="-ldl $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-char dlopen ();
+ builtin and then its argument prototype would still apply.
+ The 'extern "C"' is for builds by C++ compilers;
+ although this is not generally supported in C code supporting it here
+ has little cost and some practical benefit (sr 110532). */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen (void);
int
main (void)
{
@@ -16009,34 +16273,42 @@ _ACEOF
if ac_fn_c_try_link "$LINENO"
then :
ac_cv_lib_dl_dlopen=yes
-else $as_nop
- ac_cv_lib_dl_dlopen=no
+else case e in #(
+ e) ac_cv_lib_dl_dlopen=no ;;
+esac
fi
rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
+LIBS=$ac_check_lib_save_LIBS ;;
+esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
printf "%s\n" "$ac_cv_lib_dl_dlopen" >&6; }
if test "x$ac_cv_lib_dl_dlopen" = xyes
then :
lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl
-else $as_nop
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5
+else case e in #(
+ e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5
printf %s "checking for dlopen in -lsvld... " >&6; }
if test ${ac_cv_lib_svld_dlopen+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- ac_check_lib_save_LIBS=$LIBS
+else case e in #(
+ e) ac_check_lib_save_LIBS=$LIBS
LIBS="-lsvld $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-char dlopen ();
+ builtin and then its argument prototype would still apply.
+ The 'extern "C"' is for builds by C++ compilers;
+ although this is not generally supported in C code supporting it here
+ has little cost and some practical benefit (sr 110532). */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen (void);
int
main (void)
{
@@ -16048,34 +16320,42 @@ _ACEOF
if ac_fn_c_try_link "$LINENO"
then :
ac_cv_lib_svld_dlopen=yes
-else $as_nop
- ac_cv_lib_svld_dlopen=no
+else case e in #(
+ e) ac_cv_lib_svld_dlopen=no ;;
+esac
fi
rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
+LIBS=$ac_check_lib_save_LIBS ;;
+esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5
printf "%s\n" "$ac_cv_lib_svld_dlopen" >&6; }
if test "x$ac_cv_lib_svld_dlopen" = xyes
then :
lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld
-else $as_nop
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5
+else case e in #(
+ e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5
printf %s "checking for dld_link in -ldld... " >&6; }
if test ${ac_cv_lib_dld_dld_link+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- ac_check_lib_save_LIBS=$LIBS
+else case e in #(
+ e) ac_check_lib_save_LIBS=$LIBS
LIBS="-ldld $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-char dld_link ();
+ builtin and then its argument prototype would still apply.
+ The 'extern "C"' is for builds by C++ compilers;
+ although this is not generally supported in C code supporting it here
+ has little cost and some practical benefit (sr 110532). */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dld_link (void);
int
main (void)
{
@@ -16087,12 +16367,14 @@ _ACEOF
if ac_fn_c_try_link "$LINENO"
then :
ac_cv_lib_dld_dld_link=yes
-else $as_nop
- ac_cv_lib_dld_dld_link=no
+else case e in #(
+ e) ac_cv_lib_dld_dld_link=no ;;
+esac
fi
rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
+LIBS=$ac_check_lib_save_LIBS ;;
+esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5
printf "%s\n" "$ac_cv_lib_dld_dld_link" >&6; }
@@ -16101,19 +16383,24 @@ then :
lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld
fi
-
+ ;;
+esac
fi
-
+ ;;
+esac
fi
-
+ ;;
+esac
fi
-
+ ;;
+esac
fi
-
+ ;;
+esac
fi
;;
@@ -16141,8 +16428,8 @@ printf %s "checking whether a program can dlopen itself... " >&6; }
if test ${lt_cv_dlopen_self+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- if test yes = "$cross_compiling"; then :
+else case e in #(
+ e) if test yes = "$cross_compiling"; then :
lt_cv_dlopen_self=cross
else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
@@ -16236,7 +16523,8 @@ _LT_EOF
fi
rm -fr conftest*
-
+ ;;
+esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5
printf "%s\n" "$lt_cv_dlopen_self" >&6; }
@@ -16248,8 +16536,8 @@ printf %s "checking whether a statically linked program can dlopen itself... " >
if test ${lt_cv_dlopen_self_static+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- if test yes = "$cross_compiling"; then :
+else case e in #(
+ e) if test yes = "$cross_compiling"; then :
lt_cv_dlopen_self_static=cross
else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
@@ -16343,7 +16631,8 @@ _LT_EOF
fi
rm -fr conftest*
-
+ ;;
+esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5
printf "%s\n" "$lt_cv_dlopen_self_static" >&6; }
@@ -16529,8 +16818,8 @@ printf %s "checking for $ac_word... " >&6; }
if test ${ac_cv_path_PKG_CONFIG+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- case $PKG_CONFIG in
+else case e in #(
+ e) case $PKG_CONFIG in
[\\/]* | ?:[\\/]*)
ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
;;
@@ -16555,6 +16844,7 @@ done
IFS=$as_save_IFS
;;
+esac ;;
esac
fi
PKG_CONFIG=$ac_cv_path_PKG_CONFIG
@@ -16577,8 +16867,8 @@ printf %s "checking for $ac_word... " >&6; }
if test ${ac_cv_path_ac_pt_PKG_CONFIG+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- case $ac_pt_PKG_CONFIG in
+else case e in #(
+ e) case $ac_pt_PKG_CONFIG in
[\\/]* | ?:[\\/]*)
ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path.
;;
@@ -16603,6 +16893,7 @@ done
IFS=$as_save_IFS
;;
+esac ;;
esac
fi
ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG
@@ -16761,6 +17052,13 @@ then :
printf "%s\n" "#define HAVE_GLOB_H 1" >>confdefs.h
fi
+ac_fn_c_check_header_compile "$LINENO" "fnmatch.h" "ac_cv_header_fnmatch_h" "$ac_includes_default
+"
+if test "x$ac_cv_header_fnmatch_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_FNMATCH_H 1" >>confdefs.h
+
+fi
ac_fn_c_check_header_compile "$LINENO" "grp.h" "ac_cv_header_grp_h" "$ac_includes_default
"
if test "x$ac_cv_header_grp_h" = xyes
@@ -16937,265 +17235,132 @@ ac_fn_c_check_type "$LINENO" "int8_t" "ac_cv_type_int8_t" "$ac_includes_default"
if test "x$ac_cv_type_int8_t" = xyes
then :
-else $as_nop
-
+else case e in #(
+ e)
printf "%s\n" "#define int8_t signed char" >>confdefs.h
-
+ ;;
+esac
fi
ac_fn_c_check_type "$LINENO" "int16_t" "ac_cv_type_int16_t" "$ac_includes_default"
if test "x$ac_cv_type_int16_t" = xyes
then :
-else $as_nop
-
+else case e in #(
+ e)
printf "%s\n" "#define int16_t short" >>confdefs.h
-
+ ;;
+esac
fi
ac_fn_c_check_type "$LINENO" "int32_t" "ac_cv_type_int32_t" "$ac_includes_default"
if test "x$ac_cv_type_int32_t" = xyes
then :
-else $as_nop
-
+else case e in #(
+ e)
printf "%s\n" "#define int32_t int" >>confdefs.h
-
+ ;;
+esac
fi
ac_fn_c_check_type "$LINENO" "int64_t" "ac_cv_type_int64_t" "$ac_includes_default"
if test "x$ac_cv_type_int64_t" = xyes
then :
-else $as_nop
-
+else case e in #(
+ e)
printf "%s\n" "#define int64_t long long" >>confdefs.h
-
+ ;;
+esac
fi
ac_fn_c_check_type "$LINENO" "uint8_t" "ac_cv_type_uint8_t" "$ac_includes_default"
if test "x$ac_cv_type_uint8_t" = xyes
then :
-else $as_nop
-
+else case e in #(
+ e)
printf "%s\n" "#define uint8_t unsigned char" >>confdefs.h
-
+ ;;
+esac
fi
ac_fn_c_check_type "$LINENO" "uint16_t" "ac_cv_type_uint16_t" "$ac_includes_default"
if test "x$ac_cv_type_uint16_t" = xyes
then :
-else $as_nop
-
+else case e in #(
+ e)
printf "%s\n" "#define uint16_t unsigned short" >>confdefs.h
-
+ ;;
+esac
fi
ac_fn_c_check_type "$LINENO" "uint32_t" "ac_cv_type_uint32_t" "$ac_includes_default"
if test "x$ac_cv_type_uint32_t" = xyes
then :
-else $as_nop
-
+else case e in #(
+ e)
printf "%s\n" "#define uint32_t unsigned int" >>confdefs.h
-
+ ;;
+esac
fi
ac_fn_c_check_type "$LINENO" "uint64_t" "ac_cv_type_uint64_t" "$ac_includes_default"
if test "x$ac_cv_type_uint64_t" = xyes
then :
-else $as_nop
-
+else case e in #(
+ e)
printf "%s\n" "#define uint64_t unsigned long long" >>confdefs.h
-
+ ;;
+esac
fi
ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default"
if test "x$ac_cv_type_size_t" = xyes
then :
-else $as_nop
-
+else case e in #(
+ e)
printf "%s\n" "#define size_t unsigned int" >>confdefs.h
-
+ ;;
+esac
fi
ac_fn_c_check_type "$LINENO" "ssize_t" "ac_cv_type_ssize_t" "$ac_includes_default"
if test "x$ac_cv_type_ssize_t" = xyes
then :
-else $as_nop
-
+else case e in #(
+ e)
printf "%s\n" "#define ssize_t int" >>confdefs.h
-
-fi
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5
-printf %s "checking how to run the C preprocessor... " >&6; }
-# On Suns, sometimes $CPP names a directory.
-if test -n "$CPP" && test -d "$CPP"; then
- CPP=
-fi
-if test -z "$CPP"; then
- if test ${ac_cv_prog_CPP+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
- # Double quotes because $CC needs to be expanded
- for CPP in "$CC -E" "$CC -E -traditional-cpp" cpp /lib/cpp
- do
- ac_preproc_ok=false
-for ac_c_preproc_warn_flag in '' yes
-do
- # Use a header file that comes with gcc, so configuring glibc
- # with a fresh cross-compiler works.
- # On the NeXT, cc -E runs the code through the compiler's parser,
- # not just through cpp. "Syntax error" is here to catch this case.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <limits.h>
- Syntax error
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"
-then :
-
-else $as_nop
- # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
- # OK, works on sane cases. Now check whether nonexistent headers
- # can be detected and how.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <ac_nonexistent.h>
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"
-then :
- # Broken: success on invalid input.
-continue
-else $as_nop
- # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.i conftest.err conftest.$ac_ext
-if $ac_preproc_ok
-then :
- break
-fi
-
- done
- ac_cv_prog_CPP=$CPP
-
-fi
- CPP=$ac_cv_prog_CPP
-else
- ac_cv_prog_CPP=$CPP
-fi
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5
-printf "%s\n" "$CPP" >&6; }
-ac_preproc_ok=false
-for ac_c_preproc_warn_flag in '' yes
-do
- # Use a header file that comes with gcc, so configuring glibc
- # with a fresh cross-compiler works.
- # On the NeXT, cc -E runs the code through the compiler's parser,
- # not just through cpp. "Syntax error" is here to catch this case.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <limits.h>
- Syntax error
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"
-then :
-
-else $as_nop
- # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
- # OK, works on sane cases. Now check whether nonexistent headers
- # can be detected and how.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <ac_nonexistent.h>
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"
-then :
- # Broken: success on invalid input.
-continue
-else $as_nop
- # Passes both tests.
-ac_preproc_ok=:
-break
+ ;;
+esac
fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.i conftest.err conftest.$ac_ext
-if $ac_preproc_ok
+ac_fn_c_check_type "$LINENO" "uid_t" "ac_cv_type_uid_t" "$ac_includes_default"
+if test "x$ac_cv_type_uid_t" = xyes
then :
-else $as_nop
- { { 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 $? "C preprocessor \"$CPP\" fails sanity check
-See \`config.log' for more details" "$LINENO" 5; }
+else case e in #(
+ e)
+printf "%s\n" "#define uid_t int" >>confdefs.h
+ ;;
+esac
fi
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for uid_t in sys/types.h" >&5
-printf %s "checking for uid_t in sys/types.h... " >&6; }
-if test ${ac_cv_type_uid_t+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <sys/types.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "uid_t" >/dev/null 2>&1
+ac_fn_c_check_type "$LINENO" "gid_t" "ac_cv_type_gid_t" "$ac_includes_default"
+if test "x$ac_cv_type_gid_t" = xyes
then :
- ac_cv_type_uid_t=yes
-else $as_nop
- ac_cv_type_uid_t=no
-fi
-rm -rf conftest*
-
-fi
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_uid_t" >&5
-printf "%s\n" "$ac_cv_type_uid_t" >&6; }
-if test $ac_cv_type_uid_t = no; then
-
-printf "%s\n" "#define uid_t int" >>confdefs.h
-
+else case e in #(
+ e)
printf "%s\n" "#define gid_t int" >>confdefs.h
-
+ ;;
+esac
fi
@@ -17204,8 +17369,8 @@ fi
if test "x$ac_cv_type_pid_t" = xyes
then :
-else $as_nop
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+else case e in #(
+ e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#if defined _WIN64 && !defined __CYGWIN__
@@ -17224,14 +17389,16 @@ _ACEOF
if ac_fn_c_try_compile "$LINENO"
then :
ac_pid_type='int'
-else $as_nop
- ac_pid_type='__int64'
+else case e in #(
+ e) ac_pid_type='__int64' ;;
+esac
fi
rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
printf "%s\n" "#define pid_t $ac_pid_type" >>confdefs.h
-
+ ;;
+esac
fi
@@ -17239,10 +17406,11 @@ ac_fn_c_check_type "$LINENO" "off_t" "ac_cv_type_off_t" "$ac_includes_default"
if test "x$ac_cv_type_off_t" = xyes
then :
-else $as_nop
-
+else case e in #(
+ e)
printf "%s\n" "#define off_t long int" >>confdefs.h
-
+ ;;
+esac
fi
ac_fn_c_check_type "$LINENO" "u_char" "ac_cv_type_u_char" "
@@ -17255,10 +17423,11 @@ $ac_includes_default
if test "x$ac_cv_type_u_char" = xyes
then :
-else $as_nop
-
+else case e in #(
+ e)
printf "%s\n" "#define u_char unsigned char" >>confdefs.h
-
+ ;;
+esac
fi
ac_fn_c_check_type "$LINENO" "rlim_t" "ac_cv_type_rlim_t" "
@@ -17271,10 +17440,11 @@ $ac_includes_default
if test "x$ac_cv_type_rlim_t" = xyes
then :
-else $as_nop
-
+else case e in #(
+ e)
printf "%s\n" "#define rlim_t unsigned long" >>confdefs.h
-
+ ;;
+esac
fi
@@ -17291,10 +17461,11 @@ $ac_includes_default
if test "x$ac_cv_type_socklen_t" = xyes
then :
-else $as_nop
-
+else case e in #(
+ e)
printf "%s\n" "#define socklen_t int" >>confdefs.h
-
+ ;;
+esac
fi
ac_fn_c_check_type "$LINENO" "in_addr_t" "ac_cv_type_in_addr_t" "
@@ -17310,10 +17481,11 @@ $ac_includes_default
if test "x$ac_cv_type_in_addr_t" = xyes
then :
-else $as_nop
-
+else case e in #(
+ e)
printf "%s\n" "#define in_addr_t uint32_t" >>confdefs.h
-
+ ;;
+esac
fi
ac_fn_c_check_type "$LINENO" "in_port_t" "ac_cv_type_in_port_t" "
@@ -17329,10 +17501,11 @@ $ac_includes_default
if test "x$ac_cv_type_in_port_t" = xyes
then :
-else $as_nop
-
+else case e in #(
+ e)
printf "%s\n" "#define in_port_t uint16_t" >>confdefs.h
-
+ ;;
+esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if memcmp compares unsigned" >&5
@@ -17351,8 +17524,8 @@ printf "%s\n" "#define MEMCMP_IS_BROKEN 1" >>confdefs.h
esac
-else $as_nop
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+else case e in #(
+ e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <stdio.h>
@@ -17371,8 +17544,8 @@ if ac_fn_c_try_run "$LINENO"
then :
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
printf "%s\n" "yes" >&6; }
-else $as_nop
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+else case e in #(
+ e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
printf "%s\n" "no" >&6; }
printf "%s\n" "#define MEMCMP_IS_BROKEN 1" >>confdefs.h
@@ -17383,24 +17556,26 @@ printf "%s\n" "#define MEMCMP_IS_BROKEN 1" >>confdefs.h
;;
esac
-
+ ;;
+esac
fi
rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
+ conftest.$ac_objext conftest.beam conftest.$ac_ext ;;
+esac
fi
# The cast to long int works around a bug in the HP C Compiler
# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# declarations like 'int a3[[(sizeof (unsigned char)) >= 0]];'.
# This bug is HP SR number 8606223364.
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of time_t" >&5
printf %s "checking size of time_t... " >&6; }
if test ${ac_cv_sizeof_time_t+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (time_t))" "ac_cv_sizeof_time_t" "
+else case e in #(
+ e) if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (time_t))" "ac_cv_sizeof_time_t" "
$ac_includes_default
#ifdef TIME_WITH_SYS_TIME
# include <sys/time.h>
@@ -17416,17 +17591,19 @@ $ac_includes_default
"
then :
-else $as_nop
- if test "$ac_cv_type_time_t" = yes; then
- { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+else case e in #(
+ e) if test "$ac_cv_type_time_t" = yes; then
+ { { 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 77 "cannot compute sizeof (time_t)
-See \`config.log' for more details" "$LINENO" 5; }
+See 'config.log' for more details" "$LINENO" 5; }
else
ac_cv_sizeof_time_t=0
- fi
+ fi ;;
+esac
fi
-
+ ;;
+esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_time_t" >&5
printf "%s\n" "$ac_cv_sizeof_time_t" >&6; }
@@ -17438,28 +17615,30 @@ printf "%s\n" "#define SIZEOF_TIME_T $ac_cv_sizeof_time_t" >>confdefs.h
# The cast to long int works around a bug in the HP C Compiler
# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# declarations like 'int a3[[(sizeof (unsigned char)) >= 0]];'.
# This bug is HP SR number 8606223364.
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of size_t" >&5
printf %s "checking size of size_t... " >&6; }
if test ${ac_cv_sizeof_size_t+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (size_t))" "ac_cv_sizeof_size_t" "$ac_includes_default"
+else case e in #(
+ e) if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (size_t))" "ac_cv_sizeof_size_t" "$ac_includes_default"
then :
-else $as_nop
- if test "$ac_cv_type_size_t" = yes; then
- { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+else case e in #(
+ e) if test "$ac_cv_type_size_t" = yes; then
+ { { 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 77 "cannot compute sizeof (size_t)
-See \`config.log' for more details" "$LINENO" 5; }
+See 'config.log' for more details" "$LINENO" 5; }
else
ac_cv_sizeof_size_t=0
- fi
+ fi ;;
+esac
fi
-
+ ;;
+esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_size_t" >&5
printf "%s\n" "$ac_cv_sizeof_size_t" >&6; }
@@ -17476,8 +17655,9 @@ printf "%s\n" "#define SIZEOF_SIZE_T $ac_cv_sizeof_size_t" >>confdefs.h
if test ${enable_rpath+y}
then :
enableval=$enable_rpath; enable_rpath=$enableval
-else $as_nop
- enable_rpath=yes
+else case e in #(
+ e) enable_rpath=yes ;;
+esac
fi
if test "x$enable_rpath" = xno; then
@@ -17493,15 +17673,21 @@ printf %s "checking for library containing inet_pton... " >&6; }
if test ${ac_cv_search_inet_pton+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- ac_func_search_save_LIBS=$LIBS
+else case e in #(
+ e) ac_func_search_save_LIBS=$LIBS
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-char inet_pton ();
+ builtin and then its argument prototype would still apply.
+ The 'extern "C"' is for builds by C++ compilers;
+ although this is not generally supported in C code supporting it here
+ has little cost and some practical benefit (sr 110532). */
+#ifdef __cplusplus
+extern "C"
+#endif
+char inet_pton (void);
int
main (void)
{
@@ -17532,11 +17718,13 @@ done
if test ${ac_cv_search_inet_pton+y}
then :
-else $as_nop
- ac_cv_search_inet_pton=no
+else case e in #(
+ e) ac_cv_search_inet_pton=no ;;
+esac
fi
rm conftest.$ac_ext
-LIBS=$ac_func_search_save_LIBS
+LIBS=$ac_func_search_save_LIBS ;;
+esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_inet_pton" >&5
printf "%s\n" "$ac_cv_search_inet_pton" >&6; }
@@ -17552,15 +17740,21 @@ printf %s "checking for library containing socket... " >&6; }
if test ${ac_cv_search_socket+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- ac_func_search_save_LIBS=$LIBS
+else case e in #(
+ e) ac_func_search_save_LIBS=$LIBS
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-char socket ();
+ builtin and then its argument prototype would still apply.
+ The 'extern "C"' is for builds by C++ compilers;
+ although this is not generally supported in C code supporting it here
+ has little cost and some practical benefit (sr 110532). */
+#ifdef __cplusplus
+extern "C"
+#endif
+char socket (void);
int
main (void)
{
@@ -17591,11 +17785,13 @@ done
if test ${ac_cv_search_socket+y}
then :
-else $as_nop
- ac_cv_search_socket=no
+else case e in #(
+ e) ac_cv_search_socket=no ;;
+esac
fi
rm conftest.$ac_ext
-LIBS=$ac_func_search_save_LIBS
+LIBS=$ac_func_search_save_LIBS ;;
+esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_socket" >&5
printf "%s\n" "$ac_cv_search_socket" >&6; }
@@ -17615,8 +17811,8 @@ printf %s "checking for working chown... " >&6; }
if test ${ac_cv_func_chown_works+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- if test "$cross_compiling" = yes
+else case e in #(
+ e) if test "$cross_compiling" = yes
then :
case "$host_os" in # ((
# Guess yes on glibc systems.
@@ -17624,8 +17820,8 @@ then :
# If we don't know, assume the worst.
*) ac_cv_func_chown_works=no ;;
esac
-else $as_nop
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+else case e in #(
+ e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
$ac_includes_default
#include <fcntl.h>
@@ -17653,15 +17849,18 @@ _ACEOF
if ac_fn_c_try_run "$LINENO"
then :
ac_cv_func_chown_works=yes
-else $as_nop
- ac_cv_func_chown_works=no
+else case e in #(
+ e) ac_cv_func_chown_works=no ;;
+esac
fi
rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
+ conftest.$ac_objext conftest.beam conftest.$ac_ext ;;
+esac
fi
rm -f conftest.chown
-
+ ;;
+esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_chown_works" >&5
printf "%s\n" "$ac_cv_func_chown_works" >&6; }
@@ -17694,19 +17893,19 @@ printf %s "checking for working fork... " >&6; }
if test ${ac_cv_func_fork_works+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- if test "$cross_compiling" = yes
+else case e in #(
+ e) if test "$cross_compiling" = yes
then :
ac_cv_func_fork_works=cross
-else $as_nop
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+else case e in #(
+ e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
$ac_includes_default
int
main (void)
{
- /* By Ruediger Kuhlmann. */
+ /* By R. Kuhlmann. */
return fork () < 0;
;
@@ -17716,13 +17915,16 @@ _ACEOF
if ac_fn_c_try_run "$LINENO"
then :
ac_cv_func_fork_works=yes
-else $as_nop
- ac_cv_func_fork_works=no
+else case e in #(
+ e) ac_cv_func_fork_works=no ;;
+esac
fi
rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
+ conftest.$ac_objext conftest.beam conftest.$ac_ext ;;
+esac
fi
-
+ ;;
+esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_fork_works" >&5
printf "%s\n" "$ac_cv_func_fork_works" >&6; }
@@ -17750,12 +17952,12 @@ printf %s "checking for working vfork... " >&6; }
if test ${ac_cv_func_vfork_works+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- if test "$cross_compiling" = yes
+else case e in #(
+ e) if test "$cross_compiling" = yes
then :
ac_cv_func_vfork_works=cross
-else $as_nop
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+else case e in #(
+ e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
/* Thanks to Paul Eggert for this test. */
$ac_includes_default
@@ -17866,13 +18068,16 @@ _ACEOF
if ac_fn_c_try_run "$LINENO"
then :
ac_cv_func_vfork_works=yes
-else $as_nop
- ac_cv_func_vfork_works=no
+else case e in #(
+ e) ac_cv_func_vfork_works=no ;;
+esac
fi
rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
+ conftest.$ac_objext conftest.beam conftest.$ac_ext ;;
+esac
fi
-
+ ;;
+esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_vfork_works" >&5
printf "%s\n" "$ac_cv_func_vfork_works" >&6; }
@@ -17902,74 +18107,99 @@ fi
printf "%s\n" "#define RETSIGTYPE void" >>confdefs.h
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for _LARGEFILE_SOURCE value needed for large files" >&5
-printf %s "checking for _LARGEFILE_SOURCE value needed for large files... " >&6; }
-if test ${ac_cv_sys_largefile_source+y}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for declarations of fseeko and ftello" >&5
+printf %s "checking for declarations of fseeko and ftello... " >&6; }
+if test ${ac_cv_func_fseeko_ftello+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- while :; do
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+else case e in #(
+ e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
+
+#if defined __hpux && !defined _LARGEFILE_SOURCE
+# include <limits.h>
+# if LONG_MAX >> 31 == 0
+# error "32-bit HP-UX 11/ia64 needs _LARGEFILE_SOURCE for fseeko in C++"
+# endif
+#endif
#include <sys/types.h> /* for off_t */
- #include <stdio.h>
+#include <stdio.h>
+
int
main (void)
{
-int (*fp) (FILE *, off_t, int) = fseeko;
- return fseeko (stdin, 0, 0) && fp (stdin, 0, 0);
+
+ int (*fp1) (FILE *, off_t, int) = fseeko;
+ off_t (*fp2) (FILE *) = ftello;
+ return fseeko (stdin, 0, 0)
+ && fp1 (stdin, 0, 0)
+ && ftello (stdin) >= 0
+ && fp2 (stdin) >= 0;
+
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"
+if ac_fn_c_try_compile "$LINENO"
then :
- ac_cv_sys_largefile_source=no; break
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.beam \
- conftest$ac_exeext conftest.$ac_ext
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ ac_cv_func_fseeko_ftello=yes
+else case e in #(
+ e) ac_save_CPPFLAGS="$CPPFLAGS"
+ CPPFLAGS="$CPPFLAGS -D_LARGEFILE_SOURCE=1"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-#define _LARGEFILE_SOURCE 1
+
+#if defined __hpux && !defined _LARGEFILE_SOURCE
+# include <limits.h>
+# if LONG_MAX >> 31 == 0
+# error "32-bit HP-UX 11/ia64 needs _LARGEFILE_SOURCE for fseeko in C++"
+# endif
+#endif
#include <sys/types.h> /* for off_t */
- #include <stdio.h>
+#include <stdio.h>
+
int
main (void)
{
-int (*fp) (FILE *, off_t, int) = fseeko;
- return fseeko (stdin, 0, 0) && fp (stdin, 0, 0);
+
+ int (*fp1) (FILE *, off_t, int) = fseeko;
+ off_t (*fp2) (FILE *) = ftello;
+ return fseeko (stdin, 0, 0)
+ && fp1 (stdin, 0, 0)
+ && ftello (stdin) >= 0
+ && fp2 (stdin) >= 0;
+
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"
+if ac_fn_c_try_compile "$LINENO"
then :
- ac_cv_sys_largefile_source=1; break
+ ac_cv_func_fseeko_ftello="need _LARGEFILE_SOURCE"
+else case e in #(
+ e) ac_cv_func_fseeko_ftello=no ;;
+esac
fi
-rm -f core conftest.err conftest.$ac_objext conftest.beam \
- conftest$ac_exeext conftest.$ac_ext
- ac_cv_sys_largefile_source=unknown
- break
-done
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;;
+esac
fi
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_source" >&5
-printf "%s\n" "$ac_cv_sys_largefile_source" >&6; }
-case $ac_cv_sys_largefile_source in #(
- no | unknown) ;;
- *)
-printf "%s\n" "#define _LARGEFILE_SOURCE $ac_cv_sys_largefile_source" >>confdefs.h
-;;
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;;
esac
-rm -rf conftest*
-
-# We used to try defining _XOPEN_SOURCE=500 too, to work around a bug
-# in glibc 2.1.3, but that breaks too many other things.
-# If you want fseeko and ftello with glibc, upgrade to a fixed glibc.
-if test $ac_cv_sys_largefile_source != unknown; then
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_fseeko_ftello" >&5
+printf "%s\n" "$ac_cv_func_fseeko_ftello" >&6; }
+if test "$ac_cv_func_fseeko_ftello" != no
+then :
printf "%s\n" "#define HAVE_FSEEKO 1" >>confdefs.h
fi
+if test "$ac_cv_func_fseeko_ftello" = "need _LARGEFILE_SOURCE"
+then :
+
+printf "%s\n" "#define _LARGEFILE_SOURCE 1" >>confdefs.h
+
+fi
# Check whether --enable-largefile was given.
@@ -17977,31 +18207,34 @@ if test ${enable_largefile+y}
then :
enableval=$enable_largefile;
fi
-
-if test "$enable_largefile" != no; then
-
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5
-printf %s "checking for special C compiler options needed for large files... " >&6; }
-if test ${ac_cv_sys_largefile_CC+y}
+if test "$enable_largefile,$enable_year2038" != no,no
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable large file support" >&5
+printf %s "checking for $CC option to enable large file support... " >&6; }
+if test ${ac_cv_sys_largefile_opts+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- ac_cv_sys_largefile_CC=no
- if test "$GCC" != yes; then
- ac_save_CC=$CC
- while :; do
- # IRIX 6.2 and later do not support large files by default,
- # so use the C compiler's -n32 option if that helps.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+else case e in #(
+ e) ac_save_CC="$CC"
+ ac_opt_found=no
+ for ac_opt in "none needed" "-D_FILE_OFFSET_BITS=64" "-D_LARGE_FILES=1" "-n32"; do
+ if test x"$ac_opt" != x"none needed"
+then :
+ CC="$ac_save_CC $ac_opt"
+fi
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <sys/types.h>
- /* Check that off_t can represent 2**63 - 1 correctly.
- We can't simply define LARGE_OFF_T to be 9223372036854775807,
+#ifndef FTYPE
+# define FTYPE off_t
+#endif
+ /* Check that FTYPE can represent 2**63 - 1 correctly.
+ We can't simply define LARGE_FTYPE to be 9223372036854775807,
since some C++ compilers masquerading as C compilers
incorrectly reject 9223372036854775807. */
-#define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31))
- int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
- && LARGE_OFF_T % 2147483647 == 1)
+#define LARGE_FTYPE (((FTYPE) 1 << 31 << 31) - 1 + ((FTYPE) 1 << 31 << 31))
+ int FTYPE_is_large[(LARGE_FTYPE % 2147483629 == 721
+ && LARGE_FTYPE % 2147483647 == 1)
? 1 : -1];
int
main (void)
@@ -18011,142 +18244,88 @@ main (void)
return 0;
}
_ACEOF
- if ac_fn_c_try_compile "$LINENO"
+if ac_fn_c_try_compile "$LINENO"
then :
- break
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.beam
- CC="$CC -n32"
+ if test x"$ac_opt" = x"none needed"
+then :
+ # GNU/Linux s390x and alpha need _FILE_OFFSET_BITS=64 for wide ino_t.
+ CC="$CC -DFTYPE=ino_t"
if ac_fn_c_try_compile "$LINENO"
then :
- ac_cv_sys_largefile_CC=' -n32'; break
+
+else case e in #(
+ e) CC="$CC -D_FILE_OFFSET_BITS=64"
+ if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_opt='-D_FILE_OFFSET_BITS=64'
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam ;;
+esac
fi
rm -f core conftest.err conftest.$ac_objext conftest.beam
- break
- done
- CC=$ac_save_CC
- rm -f conftest.$ac_ext
- fi
fi
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5
-printf "%s\n" "$ac_cv_sys_largefile_CC" >&6; }
- if test "$ac_cv_sys_largefile_CC" != no; then
- CC=$CC$ac_cv_sys_largefile_CC
- fi
-
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5
-printf %s "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; }
-if test ${ac_cv_sys_file_offset_bits+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
- while :; do
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <sys/types.h>
- /* Check that off_t can represent 2**63 - 1 correctly.
- We can't simply define LARGE_OFF_T to be 9223372036854775807,
- since some C++ compilers masquerading as C compilers
- incorrectly reject 9223372036854775807. */
-#define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31))
- int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
- && LARGE_OFF_T % 2147483647 == 1)
- ? 1 : -1];
-int
-main (void)
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"
-then :
- ac_cv_sys_file_offset_bits=no; break
+ ac_cv_sys_largefile_opts=$ac_opt
+ ac_opt_found=yes
fi
rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#define _FILE_OFFSET_BITS 64
-#include <sys/types.h>
- /* Check that off_t can represent 2**63 - 1 correctly.
- We can't simply define LARGE_OFF_T to be 9223372036854775807,
- since some C++ compilers masquerading as C compilers
- incorrectly reject 9223372036854775807. */
-#define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31))
- int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
- && LARGE_OFF_T % 2147483647 == 1)
- ? 1 : -1];
-int
-main (void)
-{
+ test $ac_opt_found = no || break
+ done
+ CC="$ac_save_CC"
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"
-then :
- ac_cv_sys_file_offset_bits=64; break
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
- ac_cv_sys_file_offset_bits=unknown
- break
-done
+ test $ac_opt_found = yes || ac_cv_sys_largefile_opts="support not detected" ;;
+esac
fi
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_file_offset_bits" >&5
-printf "%s\n" "$ac_cv_sys_file_offset_bits" >&6; }
-case $ac_cv_sys_file_offset_bits in #(
- no | unknown) ;;
- *)
-printf "%s\n" "#define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits" >>confdefs.h
-;;
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_opts" >&5
+printf "%s\n" "$ac_cv_sys_largefile_opts" >&6; }
+
+ac_have_largefile=yes
+case $ac_cv_sys_largefile_opts in #(
+ "none needed") :
+ ;; #(
+ "supported through gnulib") :
+ ;; #(
+ "support not detected") :
+ ac_have_largefile=no ;; #(
+ "-D_FILE_OFFSET_BITS=64") :
+
+printf "%s\n" "#define _FILE_OFFSET_BITS 64" >>confdefs.h
+ ;; #(
+ "-D_LARGE_FILES=1") :
+
+printf "%s\n" "#define _LARGE_FILES 1" >>confdefs.h
+ ;; #(
+ "-n32") :
+ CC="$CC -n32" ;; #(
+ *) :
+ as_fn_error $? "internal error: bad value for \$ac_cv_sys_largefile_opts" "$LINENO" 5 ;;
esac
-rm -rf conftest*
- if test $ac_cv_sys_file_offset_bits = unknown; then
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5
-printf %s "checking for _LARGE_FILES value needed for large files... " >&6; }
-if test ${ac_cv_sys_large_files+y}
+
+if test "$enable_year2038" != no
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option for timestamps after 2038" >&5
+printf %s "checking for $CC option for timestamps after 2038... " >&6; }
+if test ${ac_cv_sys_year2038_opts+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- while :; do
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <sys/types.h>
- /* Check that off_t can represent 2**63 - 1 correctly.
- We can't simply define LARGE_OFF_T to be 9223372036854775807,
- since some C++ compilers masquerading as C compilers
- incorrectly reject 9223372036854775807. */
-#define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31))
- int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
- && LARGE_OFF_T % 2147483647 == 1)
- ? 1 : -1];
-int
-main (void)
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"
+else case e in #(
+ e) ac_save_CPPFLAGS="$CPPFLAGS"
+ ac_opt_found=no
+ for ac_opt in "none needed" "-D_TIME_BITS=64" "-D__MINGW_USE_VC2005_COMPAT" "-U_USE_32_BIT_TIME_T -D__MINGW_USE_VC2005_COMPAT"; do
+ if test x"$ac_opt" != x"none needed"
then :
- ac_cv_sys_large_files=no; break
+ CPPFLAGS="$ac_save_CPPFLAGS $ac_opt"
fi
-rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-#define _LARGE_FILES 1
-#include <sys/types.h>
- /* Check that off_t can represent 2**63 - 1 correctly.
- We can't simply define LARGE_OFF_T to be 9223372036854775807,
- since some C++ compilers masquerading as C compilers
- incorrectly reject 9223372036854775807. */
-#define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31))
- int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
- && LARGE_OFF_T % 2147483647 == 1)
- ? 1 : -1];
+
+ #include <time.h>
+ /* Check that time_t can represent 2**32 - 1 correctly. */
+ #define LARGE_TIME_T \\
+ ((time_t) (((time_t) 1 << 30) - 1 + 3 * ((time_t) 1 << 30)))
+ int verify_time_t_range[(LARGE_TIME_T / 65537 == 65535
+ && LARGE_TIME_T % 65537 == 0)
+ ? 1 : -1];
+
int
main (void)
{
@@ -18157,25 +18336,47 @@ main (void)
_ACEOF
if ac_fn_c_try_compile "$LINENO"
then :
- ac_cv_sys_large_files=1; break
+ ac_cv_sys_year2038_opts="$ac_opt"
+ ac_opt_found=yes
fi
rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
- ac_cv_sys_large_files=unknown
- break
-done
+ test $ac_opt_found = no || break
+ done
+ CPPFLAGS="$ac_save_CPPFLAGS"
+ test $ac_opt_found = yes || ac_cv_sys_year2038_opts="support not detected" ;;
+esac
fi
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_large_files" >&5
-printf "%s\n" "$ac_cv_sys_large_files" >&6; }
-case $ac_cv_sys_large_files in #(
- no | unknown) ;;
- *)
-printf "%s\n" "#define _LARGE_FILES $ac_cv_sys_large_files" >>confdefs.h
-;;
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_year2038_opts" >&5
+printf "%s\n" "$ac_cv_sys_year2038_opts" >&6; }
+
+ac_have_year2038=yes
+case $ac_cv_sys_year2038_opts in #(
+ "none needed") :
+ ;; #(
+ "support not detected") :
+ ac_have_year2038=no ;; #(
+ "-D_TIME_BITS=64") :
+
+printf "%s\n" "#define _TIME_BITS 64" >>confdefs.h
+ ;; #(
+ "-D__MINGW_USE_VC2005_COMPAT") :
+
+printf "%s\n" "#define __MINGW_USE_VC2005_COMPAT 1" >>confdefs.h
+ ;; #(
+ "-U_USE_32_BIT_TIME_T"*) :
+ { { 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 'time_t' type is currently forced to be 32-bit. It
+will stop working after mid-January 2038. Remove
+_USE_32BIT_TIME_T from the compiler flags.
+See 'config.log' for more details" "$LINENO" 5; } ;; #(
+ *) :
+ as_fn_error $? "internal error: bad value for \$ac_cv_sys_year2038_opts" "$LINENO" 5 ;;
esac
-rm -rf conftest*
- fi
+
fi
+fi
@@ -18185,8 +18386,8 @@ cache=_D_LARGEFILE_SOURCE_1
if eval test \${cv_prog_cc_flag_needed_$cache+y}
then :
printf %s "(cached) " >&6
-else $as_nop
-
+else case e in #(
+ e)
echo '
#include <stdio.h>
int test(void) {
@@ -18212,7 +18413,8 @@ fi
fi
rm -f conftest conftest.c conftest.o
-
+ ;;
+esac
fi
if eval "test \"`echo '$cv_prog_cc_flag_needed_'$cache`\" = yes"; then
@@ -18256,8 +18458,8 @@ then :
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: crosscompile(yes)" >&5
printf "%s\n" "crosscompile(yes)" >&6; }
-else $as_nop
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+else case e in #(
+ e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -18392,17 +18594,19 @@ then :
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
printf "%s\n" "yes" >&6; }
-else $as_nop
-
+else case e in #(
+ e)
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
printf "%s\n" "no" >&6; }
printf "%s\n" "#define NONBLOCKING_IS_BROKEN 1" >>confdefs.h
-
+ ;;
+esac
fi
rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
+ conftest.$ac_objext conftest.beam conftest.$ac_ext ;;
+esac
fi
fi
@@ -18440,10 +18644,11 @@ printf "%s\n" "yes" >&6; }
printf "%s\n" "#define MKDIR_HAS_ONE_ARG 1" >>confdefs.h
-else $as_nop
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+else case e in #(
+ e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
printf "%s\n" "no" >&6; }
-
+ ;;
+esac
fi
rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
@@ -18461,8 +18666,8 @@ if test c${cross_compiling} = cno; then
if test "$cross_compiling" = yes
then :
eval "ac_cv_c_strptime_works=maybe"
-else $as_nop
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+else case e in #(
+ e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#define _XOPEN_SOURCE 600
@@ -18477,11 +18682,13 @@ _ACEOF
if ac_fn_c_try_run "$LINENO"
then :
eval "ac_cv_c_strptime_works=yes"
-else $as_nop
- eval "ac_cv_c_strptime_works=no"
+else case e in #(
+ e) eval "ac_cv_c_strptime_works=no" ;;
+esac
fi
rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
+ conftest.$ac_objext conftest.beam conftest.$ac_ext ;;
+esac
fi
else
@@ -18502,13 +18709,14 @@ printf "%s\n" "#define STRPTIME_WORKS 1" >>confdefs.h
fi
-else $as_nop
- case " $LIBOBJS " in
+else case e in #(
+ e) case " $LIBOBJS " in
*" strptime.$ac_objext "* ) ;;
*) LIBOBJS="$LIBOBJS strptime.$ac_objext"
;;
esac
-
+ ;;
+esac
fi
done
@@ -18535,8 +18743,9 @@ fi
if test ${enable_systemd+y}
then :
enableval=$enable_systemd;
-else $as_nop
- enable_systemd=no
+else case e in #(
+ e) enable_systemd=no ;;
+esac
fi
have_systemd=no
@@ -18617,8 +18826,8 @@ 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; }
- { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+ { { 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.
@@ -18628,7 +18837,7 @@ 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; }
+See 'config.log' for more details" "$LINENO" 5; }
else
SYSTEMD_CFLAGS=$pkg_cv_SYSTEMD_CFLAGS
SYSTEMD_LIBS=$pkg_cv_SYSTEMD_LIBS
@@ -18712,8 +18921,8 @@ 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; }
- { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+ { { 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.
@@ -18723,7 +18932,7 @@ 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; }
+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
@@ -18801,8 +19010,8 @@ printf "%s\n" "#define UNBOUND_ALLOC_STATS 1" >>confdefs.h
ASYNCLOOK_ALLOCCHECK_EXTRA_OBJ="alloc.lo"
-else $as_nop
-
+else case e in #(
+ e)
if test x_$enable_alloc_lite = x_yes
then :
@@ -18810,21 +19019,21 @@ then :
printf "%s\n" "#define UNBOUND_ALLOC_LITE 1" >>confdefs.h
-else $as_nop
-
+else case e in #(
+ e)
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU libc compatible malloc" >&5
printf %s "checking for GNU libc compatible malloc... " >&6; }
if test ${ac_cv_func_malloc_0_nonnull+y}
then :
printf %s "(cached) " >&6
-else $as_nop
-
+else case e in #(
+ e)
if test "$cross_compiling" = yes
then :
ac_cv_func_malloc_0_nonnull="no (crosscompile)"
-else $as_nop
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+else case e in #(
+ e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#if defined STDC_HEADERS || defined HAVE_STDLIB_H
#include <stdlib.h>
@@ -18844,14 +19053,17 @@ _ACEOF
if ac_fn_c_try_run "$LINENO"
then :
ac_cv_func_malloc_0_nonnull=no
-else $as_nop
- ac_cv_func_malloc_0_nonnull=yes
+else case e in #(
+ e) ac_cv_func_malloc_0_nonnull=yes ;;
+esac
fi
rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
+ conftest.$ac_objext conftest.beam conftest.$ac_ext ;;
+esac
fi
-
+ ;;
+esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_malloc_0_nonnull" >&5
printf "%s\n" "$ac_cv_func_malloc_0_nonnull" >&6; }
@@ -18860,8 +19072,8 @@ then :
printf "%s\n" "#define HAVE_MALLOC 1" >>confdefs.h
-else $as_nop
-
+else case e in #(
+ e)
case " $LIBOBJS " in
*" malloc.$ac_objext "* ) ;;
*) LIBOBJS="$LIBOBJS malloc.$ac_objext"
@@ -18871,12 +19083,15 @@ esac
printf "%s\n" "#define malloc rpl_malloc_unbound" >>confdefs.h
-
+ ;;
+esac
fi
-
+ ;;
+esac
fi
-
+ ;;
+esac
fi
# check windows threads (we use them, not pthreads, on windows).
@@ -18917,10 +19132,11 @@ printf "%s\n" "yes" >&6; }
printf "%s\n" "#define HAVE_WINDOWS_THREADS 1" >>confdefs.h
-else $as_nop
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+else case e in #(
+ e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
printf "%s\n" "no" >&6; }
-
+ ;;
+esac
fi
rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
@@ -18936,12 +19152,286 @@ else
if test ${with_pthreads+y}
then :
withval=$with_pthreads;
-else $as_nop
- withval="yes"
+else case e in #(
+ e) withval="yes" ;;
+esac
fi
ub_have_pthreads=no
if test x_$withval != x_no; then
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5
+printf %s "checking how to run the C preprocessor... " >&6; }
+# On Suns, sometimes $CPP names a directory.
+if test -n "$CPP" && test -d "$CPP"; then
+ CPP=
+fi
+if test -z "$CPP"; then
+ if test ${ac_cv_prog_CPP+y}
+then :
+ printf %s "(cached) " >&6
+else case e in #(
+ e) # Double quotes because $CC needs to be expanded
+ for CPP in "$CC -E" "$CC -E -traditional-cpp" cpp /lib/cpp
+ do
+ ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+ # Use a header file that comes with gcc, so configuring glibc
+ # with a fresh cross-compiler works.
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp. "Syntax error" is here to catch this case.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <limits.h>
+ Syntax error
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"
+then :
+
+else case e in #(
+ e) # Broken: fails on valid input.
+continue ;;
+esac
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+ # OK, works on sane cases. Now check whether nonexistent headers
+ # can be detected and how.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"
+then :
+ # Broken: success on invalid input.
+continue
+else case e in #(
+ e) # Passes both tests.
+ac_preproc_ok=:
+break ;;
+esac
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of 'break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok
+then :
+ break
+fi
+
+ done
+ ac_cv_prog_CPP=$CPP
+ ;;
+esac
+fi
+ CPP=$ac_cv_prog_CPP
+else
+ ac_cv_prog_CPP=$CPP
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5
+printf "%s\n" "$CPP" >&6; }
+ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+ # Use a header file that comes with gcc, so configuring glibc
+ # with a fresh cross-compiler works.
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp. "Syntax error" is here to catch this case.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <limits.h>
+ Syntax error
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"
+then :
+
+else case e in #(
+ e) # Broken: fails on valid input.
+continue ;;
+esac
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+ # OK, works on sane cases. Now check whether nonexistent headers
+ # can be detected and how.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"
+then :
+ # Broken: success on invalid input.
+continue
+else case e in #(
+ e) # Passes both tests.
+ac_preproc_ok=:
+break ;;
+esac
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of 'break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok
+then :
+
+else case e in #(
+ e) { { 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 $? "C preprocessor \"$CPP\" fails sanity check
+See 'config.log' for more details" "$LINENO" 5; } ;;
+esac
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for egrep -e" >&5
+printf %s "checking for egrep -e... " >&6; }
+if test ${ac_cv_path_EGREP_TRADITIONAL+y}
+then :
+ printf %s "(cached) " >&6
+else case e in #(
+ e) if test -z "$EGREP_TRADITIONAL"; then
+ ac_path_EGREP_TRADITIONAL_found=false
+ # Loop through the user's path and test for each of PROGNAME-LIST
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_prog in grep ggrep
+ do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_EGREP_TRADITIONAL="$as_dir$ac_prog$ac_exec_ext"
+ as_fn_executable_p "$ac_path_EGREP_TRADITIONAL" || continue
+# Check for GNU ac_path_EGREP_TRADITIONAL and select it if it is found.
+ # Check for GNU $ac_path_EGREP_TRADITIONAL
+case `"$ac_path_EGREP_TRADITIONAL" --version 2>&1` in #(
+*GNU*)
+ ac_cv_path_EGREP_TRADITIONAL="$ac_path_EGREP_TRADITIONAL" ac_path_EGREP_TRADITIONAL_found=:;;
+#(
+*)
+ ac_count=0
+ printf %s 0123456789 >"conftest.in"
+ while :
+ do
+ cat "conftest.in" "conftest.in" >"conftest.tmp"
+ mv "conftest.tmp" "conftest.in"
+ cp "conftest.in" "conftest.nl"
+ printf "%s\n" 'EGREP_TRADITIONAL' >> "conftest.nl"
+ "$ac_path_EGREP_TRADITIONAL" -E 'EGR(EP|AC)_TRADITIONAL$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+ as_fn_arith $ac_count + 1 && ac_count=$as_val
+ if test $ac_count -gt ${ac_path_EGREP_TRADITIONAL_max-0}; then
+ # Best one so far, save it but keep looking for a better one
+ ac_cv_path_EGREP_TRADITIONAL="$ac_path_EGREP_TRADITIONAL"
+ ac_path_EGREP_TRADITIONAL_max=$ac_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test $ac_count -gt 10 && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+ $ac_path_EGREP_TRADITIONAL_found && break 3
+ done
+ done
+ done
+IFS=$as_save_IFS
+ if test -z "$ac_cv_path_EGREP_TRADITIONAL"; then
+ :
+ fi
+else
+ ac_cv_path_EGREP_TRADITIONAL=$EGREP_TRADITIONAL
+fi
+
+ if test "$ac_cv_path_EGREP_TRADITIONAL"
+then :
+ ac_cv_path_EGREP_TRADITIONAL="$ac_cv_path_EGREP_TRADITIONAL -E"
+else case e in #(
+ e) if test -z "$EGREP_TRADITIONAL"; then
+ ac_path_EGREP_TRADITIONAL_found=false
+ # Loop through the user's path and test for each of PROGNAME-LIST
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_prog in egrep
+ do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_EGREP_TRADITIONAL="$as_dir$ac_prog$ac_exec_ext"
+ as_fn_executable_p "$ac_path_EGREP_TRADITIONAL" || continue
+# Check for GNU ac_path_EGREP_TRADITIONAL and select it if it is found.
+ # Check for GNU $ac_path_EGREP_TRADITIONAL
+case `"$ac_path_EGREP_TRADITIONAL" --version 2>&1` in #(
+*GNU*)
+ ac_cv_path_EGREP_TRADITIONAL="$ac_path_EGREP_TRADITIONAL" ac_path_EGREP_TRADITIONAL_found=:;;
+#(
+*)
+ ac_count=0
+ printf %s 0123456789 >"conftest.in"
+ while :
+ do
+ cat "conftest.in" "conftest.in" >"conftest.tmp"
+ mv "conftest.tmp" "conftest.in"
+ cp "conftest.in" "conftest.nl"
+ printf "%s\n" 'EGREP_TRADITIONAL' >> "conftest.nl"
+ "$ac_path_EGREP_TRADITIONAL" 'EGR(EP|AC)_TRADITIONAL$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+ as_fn_arith $ac_count + 1 && ac_count=$as_val
+ if test $ac_count -gt ${ac_path_EGREP_TRADITIONAL_max-0}; then
+ # Best one so far, save it but keep looking for a better one
+ ac_cv_path_EGREP_TRADITIONAL="$ac_path_EGREP_TRADITIONAL"
+ ac_path_EGREP_TRADITIONAL_max=$ac_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test $ac_count -gt 10 && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+ $ac_path_EGREP_TRADITIONAL_found && break 3
+ done
+ done
+ done
+IFS=$as_save_IFS
+ if test -z "$ac_cv_path_EGREP_TRADITIONAL"; then
+ as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+ fi
+else
+ ac_cv_path_EGREP_TRADITIONAL=$EGREP_TRADITIONAL
+fi
+ ;;
+esac
+fi ;;
+esac
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP_TRADITIONAL" >&5
+printf "%s\n" "$ac_cv_path_EGREP_TRADITIONAL" >&6; }
+ EGREP_TRADITIONAL=$ac_cv_path_EGREP_TRADITIONAL
+
@@ -18982,8 +19472,14 @@ printf %s "checking for pthread_join using $CC $PTHREAD_CFLAGS $PTHREAD_LIBS...
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-char pthread_join ();
+ builtin and then its argument prototype would still apply.
+ The 'extern "C"' is for builds by C++ compilers;
+ although this is not generally supported in C code supporting it here
+ has little cost and some practical benefit (sr 110532). */
+#ifdef __cplusplus
+extern "C"
+#endif
+char pthread_join (void);
int
main (void)
{
@@ -19077,7 +19573,7 @@ case $host_os in
_ACEOF
if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "AX_PTHREAD_ZOS_MISSING" >/dev/null 2>&1
+ $EGREP_TRADITIONAL "AX_PTHREAD_ZOS_MISSING" >/dev/null 2>&1
then :
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: IBM z/OS requires -D_OPEN_THREADS or -D_UNIX03_THREADS to enable pthreads support." >&5
printf "%s\n" "$as_me: WARNING: IBM z/OS requires -D_OPEN_THREADS or -D_UNIX03_THREADS to enable pthreads support." >&2;}
@@ -19107,8 +19603,8 @@ printf %s "checking whether $CC is Clang... " >&6; }
if test ${ax_cv_PTHREAD_CLANG+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- ax_cv_PTHREAD_CLANG=no
+else case e in #(
+ e) ax_cv_PTHREAD_CLANG=no
# Note that Autoconf sets GCC=yes for Clang as well as GCC
if test "x$GCC" = "xyes"; then
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -19120,14 +19616,15 @@ else $as_nop
_ACEOF
if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "AX_PTHREAD_CC_IS_CLANG" >/dev/null 2>&1
+ $EGREP_TRADITIONAL "AX_PTHREAD_CC_IS_CLANG" >/dev/null 2>&1
then :
ax_cv_PTHREAD_CLANG=yes
fi
rm -rf conftest*
fi
-
+ ;;
+esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_CLANG" >&5
printf "%s\n" "$ax_cv_PTHREAD_CLANG" >&6; }
@@ -19162,7 +19659,32 @@ fi
# correctly enabled
case $host_os in
- darwin* | hpux* | linux* | osf* | solaris*)
+ solaris*)
+ # Solaris 11.4 introduced XPG7 support and did away with the need for
+ # _REENTRANT.
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+# undef _XOPEN_SOURCE
+# include <sys/feature_tests.h>
+# if _XOPEN_VERSION < 700
+ AX_PTHREAD_SOLARIS__REENTRANT
+# endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP_TRADITIONAL "AX_PTHREAD_SOLARIS__REENTRANT" >/dev/null 2>&1
+then :
+ ax_pthread_check_macro="_REENTRANT"
+else case e in #(
+ e) ax_pthread_check_macro="--" ;;
+esac
+fi
+rm -rf conftest*
+
+ ;;
+ darwin* | hpux* | linux* | osf*)
ax_pthread_check_macro="_REENTRANT"
;;
@@ -19177,8 +19699,9 @@ esac
if test "x$ax_pthread_check_macro" = "x--"
then :
ax_pthread_check_cond=0
-else $as_nop
- ax_pthread_check_cond="!defined($ax_pthread_check_macro)"
+else case e in #(
+ e) ax_pthread_check_cond="!defined($ax_pthread_check_macro)" ;;
+esac
fi
@@ -19212,8 +19735,8 @@ printf %s "checking for $ac_word... " >&6; }
if test ${ac_cv_prog_ax_pthread_config+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- if test -n "$ax_pthread_config"; then
+else case e in #(
+ e) if test -n "$ax_pthread_config"; then
ac_cv_prog_ax_pthread_config="$ax_pthread_config" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -19236,7 +19759,8 @@ done
IFS=$as_save_IFS
test -z "$ac_cv_prog_ax_pthread_config" && ac_cv_prog_ax_pthread_config="no"
-fi
+fi ;;
+esac
fi
ax_pthread_config=$ac_cv_prog_ax_pthread_config
if test -n "$ax_pthread_config"; then
@@ -19369,8 +19893,8 @@ printf %s "checking whether Clang needs flag to prevent \"argument unused\" warn
if test ${ax_cv_PTHREAD_CLANG_NO_WARN_FLAG+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- ax_cv_PTHREAD_CLANG_NO_WARN_FLAG=unknown
+else case e in #(
+ e) ax_cv_PTHREAD_CLANG_NO_WARN_FLAG=unknown
# Create an alternate version of $ac_link that compiles and
# links in two steps (.c -> .o, .o -> exe) instead of one
# (.c -> exe), because the warning occurs only in the second
@@ -19416,7 +19940,8 @@ then :
ax_pthread_try=no
fi
ax_cv_PTHREAD_CLANG_NO_WARN_FLAG="$ax_pthread_try"
-
+ ;;
+esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_CLANG_NO_WARN_FLAG" >&5
printf "%s\n" "$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG" >&6; }
@@ -19443,8 +19968,8 @@ printf %s "checking for joinable pthread attribute... " >&6; }
if test ${ax_cv_PTHREAD_JOINABLE_ATTR+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- ax_cv_PTHREAD_JOINABLE_ATTR=unknown
+else case e in #(
+ e) ax_cv_PTHREAD_JOINABLE_ATTR=unknown
for ax_pthread_attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -19464,7 +19989,8 @@ fi
rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
done
-
+ ;;
+esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_JOINABLE_ATTR" >&5
printf "%s\n" "$ax_cv_PTHREAD_JOINABLE_ATTR" >&6; }
@@ -19484,14 +20010,15 @@ printf %s "checking whether more special flags are required for pthreads... " >&
if test ${ax_cv_PTHREAD_SPECIAL_FLAGS+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- ax_cv_PTHREAD_SPECIAL_FLAGS=no
+else case e in #(
+ e) ax_cv_PTHREAD_SPECIAL_FLAGS=no
case $host_os in
solaris*)
ax_cv_PTHREAD_SPECIAL_FLAGS="-D_POSIX_PTHREAD_SEMANTICS"
;;
esac
-
+ ;;
+esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_SPECIAL_FLAGS" >&5
printf "%s\n" "$ax_cv_PTHREAD_SPECIAL_FLAGS" >&6; }
@@ -19507,8 +20034,8 @@ printf %s "checking for PTHREAD_PRIO_INHERIT... " >&6; }
if test ${ax_cv_PTHREAD_PRIO_INHERIT+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+else case e in #(
+ e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <pthread.h>
int
@@ -19523,12 +20050,14 @@ _ACEOF
if ac_fn_c_try_link "$LINENO"
then :
ax_cv_PTHREAD_PRIO_INHERIT=yes
-else $as_nop
- ax_cv_PTHREAD_PRIO_INHERIT=no
+else case e in #(
+ e) ax_cv_PTHREAD_PRIO_INHERIT=no ;;
+esac
fi
rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
-
+ ;;
+esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_PRIO_INHERIT" >&5
printf "%s\n" "$ax_cv_PTHREAD_PRIO_INHERIT" >&6; }
@@ -19578,8 +20107,8 @@ printf %s "checking for $ac_word... " >&6; }
if test ${ac_cv_prog_PTHREAD_CC+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- if test -n "$PTHREAD_CC"; then
+else case e in #(
+ e) if test -n "$PTHREAD_CC"; then
ac_cv_prog_PTHREAD_CC="$PTHREAD_CC" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -19601,7 +20130,8 @@ done
done
IFS=$as_save_IFS
-fi
+fi ;;
+esac
fi
PTHREAD_CC=$ac_cv_prog_PTHREAD_CC
if test -n "$PTHREAD_CC"; then
@@ -19628,8 +20158,8 @@ printf %s "checking for $ac_word... " >&6; }
if test ${ac_cv_prog_PTHREAD_CXX+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- if test -n "$PTHREAD_CXX"; then
+else case e in #(
+ e) if test -n "$PTHREAD_CXX"; then
ac_cv_prog_PTHREAD_CXX="$PTHREAD_CXX" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -19651,7 +20181,8 @@ done
done
IFS=$as_save_IFS
-fi
+fi ;;
+esac
fi
PTHREAD_CXX=$ac_cv_prog_PTHREAD_CXX
if test -n "$PTHREAD_CXX"; then
@@ -19721,28 +20252,30 @@ fi
# The cast to long int works around a bug in the HP C Compiler
# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# declarations like 'int a3[[(sizeof (unsigned char)) >= 0]];'.
# This bug is HP SR number 8606223364.
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of unsigned long" >&5
printf %s "checking size of unsigned long... " >&6; }
if test ${ac_cv_sizeof_unsigned_long+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (unsigned long))" "ac_cv_sizeof_unsigned_long" "$ac_includes_default"
+else case e in #(
+ e) if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (unsigned long))" "ac_cv_sizeof_unsigned_long" "$ac_includes_default"
then :
-else $as_nop
- if test "$ac_cv_type_unsigned_long" = yes; then
- { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+else case e in #(
+ e) if test "$ac_cv_type_unsigned_long" = yes; then
+ { { 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 77 "cannot compute sizeof (unsigned long)
-See \`config.log' for more details" "$LINENO" 5; }
+See 'config.log' for more details" "$LINENO" 5; }
else
ac_cv_sizeof_unsigned_long=0
- fi
+ fi ;;
+esac
fi
-
+ ;;
+esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_unsigned_long" >&5
printf "%s\n" "$ac_cv_sizeof_unsigned_long" >&6; }
@@ -19754,28 +20287,30 @@ printf "%s\n" "#define SIZEOF_UNSIGNED_LONG $ac_cv_sizeof_unsigned_long" >>confd
# The cast to long int works around a bug in the HP C Compiler
# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# declarations like 'int a3[[(sizeof (unsigned char)) >= 0]];'.
# This bug is HP SR number 8606223364.
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of pthread_t" >&5
printf %s "checking size of pthread_t... " >&6; }
if test ${ac_cv_sizeof_pthread_t+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (pthread_t))" "ac_cv_sizeof_pthread_t" "$ac_includes_default"
+else case e in #(
+ e) if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (pthread_t))" "ac_cv_sizeof_pthread_t" "$ac_includes_default"
then :
-else $as_nop
- if test "$ac_cv_type_pthread_t" = yes; then
- { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+else case e in #(
+ e) if test "$ac_cv_type_pthread_t" = yes; then
+ { { 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 77 "cannot compute sizeof (pthread_t)
-See \`config.log' for more details" "$LINENO" 5; }
+See 'config.log' for more details" "$LINENO" 5; }
else
ac_cv_sizeof_pthread_t=0
- fi
+ fi ;;
+esac
fi
-
+ ;;
+esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_pthread_t" >&5
printf "%s\n" "$ac_cv_sizeof_pthread_t" >&6; }
@@ -19881,11 +20416,12 @@ printf "%s\n" "yes" >&6; }
printf "%s\n" "#define HAVE_PTHREAD_SETNAME_NP1 1" >>confdefs.h
-else $as_nop
-
+else case e in #(
+ e)
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
printf "%s\n" "no" >&6; }
-
+ ;;
+esac
fi
rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
# NetBSD has 3 arguments to allow for formatting of the name.
@@ -19918,11 +20454,12 @@ printf "%s\n" "yes" >&6; }
printf "%s\n" "#define HAVE_PTHREAD_SETNAME_NP3 1" >>confdefs.h
-else $as_nop
-
+else case e in #(
+ e)
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
printf "%s\n" "no" >&6; }
-
+ ;;
+esac
fi
rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
# Most OSes have the common 2 arguments, thread and name.
@@ -19955,11 +20492,12 @@ printf "%s\n" "yes" >&6; }
printf "%s\n" "#define HAVE_PTHREAD_SETNAME_NP 1" >>confdefs.h
-else $as_nop
-
+else case e in #(
+ e)
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
printf "%s\n" "no" >&6; }
-
+ ;;
+esac
fi
rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
# FreeBSD/OpenBSD use a slightly different function name.
@@ -19992,11 +20530,12 @@ printf "%s\n" "yes" >&6; }
printf "%s\n" "#define HAVE_PTHREAD_SET_NAME_NP 1" >>confdefs.h
-else $as_nop
-
+else case e in #(
+ e)
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
printf "%s\n" "no" >&6; }
-
+ ;;
+esac
fi
rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
CFLAGS="$BAKCFLAGS"
@@ -20008,8 +20547,9 @@ fi
if test ${with_solaris_threads+y}
then :
withval=$with_solaris_threads;
-else $as_nop
- withval="no"
+else case e in #(
+ e) withval="no" ;;
+esac
fi
ub_have_sol_threads=no
@@ -20023,15 +20563,21 @@ printf %s "checking for library containing thr_create... " >&6; }
if test ${ac_cv_search_thr_create+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- ac_func_search_save_LIBS=$LIBS
+else case e in #(
+ e) ac_func_search_save_LIBS=$LIBS
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-char thr_create ();
+ builtin and then its argument prototype would still apply.
+ The 'extern "C"' is for builds by C++ compilers;
+ although this is not generally supported in C code supporting it here
+ has little cost and some practical benefit (sr 110532). */
+#ifdef __cplusplus
+extern "C"
+#endif
+char thr_create (void);
int
main (void)
{
@@ -20062,11 +20608,13 @@ done
if test ${ac_cv_search_thr_create+y}
then :
-else $as_nop
- ac_cv_search_thr_create=no
+else case e in #(
+ e) ac_cv_search_thr_create=no ;;
+esac
fi
rm conftest.$ac_ext
-LIBS=$ac_func_search_save_LIBS
+LIBS=$ac_func_search_save_LIBS ;;
+esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_thr_create" >&5
printf "%s\n" "$ac_cv_search_thr_create" >&6; }
@@ -20087,8 +20635,8 @@ cache=`echo mt | sed 'y%.=/+-%___p_%'`
if eval test \${cv_prog_cc_flag_$cache+y}
then :
printf %s "(cached) " >&6
-else $as_nop
-
+else case e in #(
+ e)
echo 'void f(void){}' >conftest.c
if test -z "`$CC $CPPFLAGS $CFLAGS -mt -c conftest.c 2>&1`"; then
eval "cv_prog_cc_flag_$cache=yes"
@@ -20096,7 +20644,8 @@ else
eval "cv_prog_cc_flag_$cache=no"
fi
rm -f conftest conftest.o conftest.c
-
+ ;;
+esac
fi
if eval "test \"`echo '$cv_prog_cc_flag_'$cache`\" = yes"; then
@@ -20113,10 +20662,11 @@ fi
ub_have_sol_threads=yes
-else $as_nop
-
+else case e in #(
+ e)
as_fn_error $? "no solaris threads found." "$LINENO" 5
-
+ ;;
+esac
fi
fi
@@ -20149,8 +20699,9 @@ printf "%s\n" "#define UB_SYSLOG_FACILITY ${UNBOUND_SYSLOG_FACILITY}" >>confdefs
if test ${with_dynlibmodule+y}
then :
withval=$with_dynlibmodule;
-else $as_nop
- withval="no"
+else case e in #(
+ e) withval="no" ;;
+esac
fi
@@ -20173,15 +20724,21 @@ printf %s "checking for library containing dlopen... " >&6; }
if test ${ac_cv_search_dlopen+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- ac_func_search_save_LIBS=$LIBS
+else case e in #(
+ e) ac_func_search_save_LIBS=$LIBS
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-char dlopen ();
+ builtin and then its argument prototype would still apply.
+ The 'extern "C"' is for builds by C++ compilers;
+ although this is not generally supported in C code supporting it here
+ has little cost and some practical benefit (sr 110532). */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen (void);
int
main (void)
{
@@ -20212,11 +20769,13 @@ done
if test ${ac_cv_search_dlopen+y}
then :
-else $as_nop
- ac_cv_search_dlopen=no
+else case e in #(
+ e) ac_cv_search_dlopen=no ;;
+esac
fi
rm conftest.$ac_ext
-LIBS=$ac_func_search_save_LIBS
+LIBS=$ac_func_search_save_LIBS ;;
+esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_dlopen" >&5
printf "%s\n" "$ac_cv_search_dlopen" >&6; }
@@ -20240,8 +20799,9 @@ fi
if test ${with_pyunbound+y}
then :
withval=$with_pyunbound;
-else $as_nop
- withval="no"
+else case e in #(
+ e) withval="no" ;;
+esac
fi
@@ -20258,8 +20818,9 @@ fi
if test ${with_pythonmodule+y}
then :
withval=$with_pythonmodule;
-else $as_nop
- withval="no"
+else case e in #(
+ e) withval="no" ;;
+esac
fi
@@ -20287,8 +20848,8 @@ printf %s "checking for $ac_word... " >&6; }
if test ${ac_cv_path_PYTHON+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- case $PYTHON in
+else case e in #(
+ e) case $PYTHON in
[\\/]* | ?:[\\/]*)
ac_cv_path_PYTHON="$PYTHON" # Let the user override the test with a path.
;;
@@ -20313,6 +20874,7 @@ done
IFS=$as_save_IFS
;;
+esac ;;
esac
fi
PYTHON=$ac_cv_path_PYTHON
@@ -20490,8 +21052,9 @@ _ACEOF
if ac_fn_c_try_link "$LINENO"
then :
pythonexists=yes
-else $as_nop
- pythonexists=no
+else case e in #(
+ e) pythonexists=no ;;
+esac
fi
rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
@@ -20601,8 +21164,8 @@ printf %s "checking for $ac_word... " >&6; }
if test ${ac_cv_path_SWIG+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- case $SWIG in
+else case e in #(
+ e) case $SWIG in
[\\/]* | ?:[\\/]*)
ac_cv_path_SWIG="$SWIG" # Let the user override the test with a path.
;;
@@ -20627,6 +21190,7 @@ done
IFS=$as_save_IFS
;;
+esac ;;
esac
fi
SWIG=$ac_cv_path_SWIG
@@ -20727,8 +21291,8 @@ printf %s "checking for $ac_word... " >&6; }
if test ${ac_cv_path_SWIG+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- case $SWIG in
+else case e in #(
+ e) case $SWIG in
[\\/]* | ?:[\\/]*)
ac_cv_path_SWIG="$SWIG" # Let the user override the test with a path.
;;
@@ -20753,6 +21317,7 @@ done
IFS=$as_save_IFS
;;
+esac ;;
esac
fi
SWIG=$ac_cv_path_SWIG
@@ -20914,15 +21479,17 @@ ax_date_fmt="%Y%m%d"
if test x"$SOURCE_DATE_EPOCH" = x
then :
CONFIG_DATE=`date "+$ax_date_fmt"`
-else $as_nop
- ax_build_date=`date -u -d "@$SOURCE_DATE_EPOCH" "+$ax_date_fmt" 2>/dev/null \
+else case e in #(
+ e) ax_build_date=`date -u -d "@$SOURCE_DATE_EPOCH" "+$ax_date_fmt" 2>/dev/null \
|| date -u -r "$SOURCE_DATE_EPOCH" "+$ax_date_fmt" 2>/dev/null`
if test x"$ax_build_date" = x
then :
as_fn_error $? "malformed SOURCE_DATE_EPOCH" "$LINENO" 5
-else $as_nop
- CONFIG_DATE=$ax_build_date
-fi
+else case e in #(
+ e) CONFIG_DATE=$ax_build_date ;;
+esac
+fi ;;
+esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CONFIG_DATE" >&5
printf "%s\n" "$CONFIG_DATE" >&6; }
@@ -21017,10 +21584,11 @@ if test ${with_ssl+y}
then :
withval=$with_ssl;
-else $as_nop
-
+else case e in #(
+ e)
withval="yes"
-
+ ;;
+esac
fi
if test x_$withval = x_no; then
@@ -21116,8 +21684,8 @@ printf "%s\n" "yes" >&6; }
printf "%s\n" "#define HAVE_EVP_SHA256 1" >>confdefs.h
-else $as_nop
-
+else case e in #(
+ e)
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
printf "%s\n" "no" >&6; }
# check if -lwsock32 or -lgdi32 are needed.
@@ -21150,8 +21718,8 @@ printf "%s\n" "#define HAVE_EVP_SHA256 1" >>confdefs.h
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
printf "%s\n" "yes" >&6; }
-else $as_nop
-
+else case e in #(
+ e)
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
printf "%s\n" "no" >&6; }
LIBS="$BAKLIBS"
@@ -21184,8 +21752,8 @@ printf "%s\n" "#define HAVE_EVP_SHA256 1" >>confdefs.h
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
printf "%s\n" "yes" >&6; }
-else $as_nop
-
+else case e in #(
+ e)
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
printf "%s\n" "no" >&6; }
LIBS="$BAKLIBS"
@@ -21218,8 +21786,8 @@ printf "%s\n" "#define HAVE_EVP_SHA256 1" >>confdefs.h
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
printf "%s\n" "yes" >&6; }
-else $as_nop
-
+else case e in #(
+ e)
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
printf "%s\n" "no" >&6; }
LIBS="$BAKLIBS"
@@ -21252,8 +21820,8 @@ printf "%s\n" "#define HAVE_EVP_SHA256 1" >>confdefs.h
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
printf "%s\n" "yes" >&6; }
-else $as_nop
-
+else case e in #(
+ e)
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
printf "%s\n" "no" >&6; }
LIBS="$BAKLIBS"
@@ -21285,32 +21853,38 @@ printf "%s\n" "#define HAVE_EVP_SHA256 1" >>confdefs.h
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
printf "%s\n" "yes" >&6; }
-else $as_nop
-
+else case e in #(
+ e)
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
printf "%s\n" "no" >&6; }
as_fn_error $? "OpenSSL found in $ssldir, but version 0.9.7 or higher is required" "$LINENO" 5
-
+ ;;
+esac
fi
rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
-
+ ;;
+esac
fi
rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
-
+ ;;
+esac
fi
rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
-
+ ;;
+esac
fi
rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
-
+ ;;
+esac
fi
rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
-
+ ;;
+esac
fi
rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
@@ -21355,8 +21929,14 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-char SSL_CTX_new ();
+ builtin and then its argument prototype would still apply.
+ The 'extern "C"' is for builds by C++ compilers;
+ although this is not generally supported in C code supporting it here
+ has little cost and some practical benefit (sr 110532). */
+#ifdef __cplusplus
+extern "C"
+#endif
+char SSL_CTX_new (void);
int
main (void)
{
@@ -21372,8 +21952,8 @@ then :
printf "%s\n" "no" >&6; }
LIBS="$BAKLIBS"
-else $as_nop
-
+else case e in #(
+ e)
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
printf "%s\n" "yes" >&6; }
LIBS="$BAKLIBS"
@@ -21382,15 +21962,21 @@ printf %s "checking for library containing dlopen... " >&6; }
if test ${ac_cv_search_dlopen+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- ac_func_search_save_LIBS=$LIBS
+else case e in #(
+ e) ac_func_search_save_LIBS=$LIBS
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-char dlopen ();
+ builtin and then its argument prototype would still apply.
+ The 'extern "C"' is for builds by C++ compilers;
+ although this is not generally supported in C code supporting it here
+ has little cost and some practical benefit (sr 110532). */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen (void);
int
main (void)
{
@@ -21421,11 +22007,13 @@ done
if test ${ac_cv_search_dlopen+y}
then :
-else $as_nop
- ac_cv_search_dlopen=no
+else case e in #(
+ e) ac_cv_search_dlopen=no ;;
+esac
fi
rm conftest.$ac_ext
-LIBS=$ac_func_search_save_LIBS
+LIBS=$ac_func_search_save_LIBS ;;
+esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_dlopen" >&5
printf "%s\n" "$ac_cv_search_dlopen" >&6; }
@@ -21436,7 +22024,8 @@ then :
fi
-
+ ;;
+esac
fi
rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
@@ -21471,13 +22060,14 @@ then :
printf "%s\n" "no" >&6; }
LIBS="$BAKLIBS"
-else $as_nop
-
+else case e in #(
+ e)
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
printf "%s\n" "yes" >&6; }
LIBS="$BAKLIBS"
LIBS="$LIBS -lcrypt32"
-
+ ;;
+esac
fi
rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
@@ -21497,8 +22087,8 @@ printf %s "checking for $CC options needed to detect all undeclared functions...
if test ${ac_cv_c_undeclared_builtin_options+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- ac_save_CFLAGS=$CFLAGS
+else case e in #(
+ e) ac_save_CFLAGS=$CFLAGS
ac_cv_c_undeclared_builtin_options='cannot detect'
for ac_arg in '' -fno-builtin; do
CFLAGS="$ac_save_CFLAGS $ac_arg"
@@ -21517,8 +22107,8 @@ _ACEOF
if ac_fn_c_try_compile "$LINENO"
then :
-else $as_nop
- # This test program should compile successfully.
+else case e in #(
+ e) # This test program should compile successfully.
# No library function is consistently available on
# freestanding implementations, so test against a dummy
# declaration. Include always-available headers on the
@@ -21546,26 +22136,29 @@ then :
if test x"$ac_arg" = x
then :
ac_cv_c_undeclared_builtin_options='none needed'
-else $as_nop
- ac_cv_c_undeclared_builtin_options=$ac_arg
+else case e in #(
+ e) ac_cv_c_undeclared_builtin_options=$ac_arg ;;
+esac
fi
break
fi
-rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;;
+esac
fi
rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
done
CFLAGS=$ac_save_CFLAGS
-
+ ;;
+esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_undeclared_builtin_options" >&5
printf "%s\n" "$ac_cv_c_undeclared_builtin_options" >&6; }
case $ac_cv_c_undeclared_builtin_options in #(
'cannot detect') :
- { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+ { { 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 $? "cannot make $CC report undeclared builtins
-See \`config.log' for more details" "$LINENO" 5; } ;; #(
+See 'config.log' for more details" "$LINENO" 5; } ;; #(
'none needed') :
ac_c_undeclared_builtin_options='' ;; #(
*) :
@@ -21576,32 +22169,36 @@ ac_fn_check_decl "$LINENO" "strlcpy" "ac_cv_have_decl_strlcpy" "$ac_includes_def
if test "x$ac_cv_have_decl_strlcpy" = xyes
then :
ac_have_decl=1
-else $as_nop
- ac_have_decl=0
+else case e in #(
+ e) ac_have_decl=0 ;;
+esac
fi
printf "%s\n" "#define HAVE_DECL_STRLCPY $ac_have_decl" >>confdefs.h
ac_fn_check_decl "$LINENO" "strlcat" "ac_cv_have_decl_strlcat" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS"
if test "x$ac_cv_have_decl_strlcat" = xyes
then :
ac_have_decl=1
-else $as_nop
- ac_have_decl=0
+else case e in #(
+ e) ac_have_decl=0 ;;
+esac
fi
printf "%s\n" "#define HAVE_DECL_STRLCAT $ac_have_decl" >>confdefs.h
ac_fn_check_decl "$LINENO" "arc4random" "ac_cv_have_decl_arc4random" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS"
if test "x$ac_cv_have_decl_arc4random" = xyes
then :
ac_have_decl=1
-else $as_nop
- ac_have_decl=0
+else case e in #(
+ e) ac_have_decl=0 ;;
+esac
fi
printf "%s\n" "#define HAVE_DECL_ARC4RANDOM $ac_have_decl" >>confdefs.h
ac_fn_check_decl "$LINENO" "arc4random_uniform" "ac_cv_have_decl_arc4random_uniform" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS"
if test "x$ac_cv_have_decl_arc4random_uniform" = xyes
then :
ac_have_decl=1
-else $as_nop
- ac_have_decl=0
+else case e in #(
+ e) ac_have_decl=0 ;;
+esac
fi
printf "%s\n" "#define HAVE_DECL_ARC4RANDOM_UNIFORM $ac_have_decl" >>confdefs.h
@@ -21816,6 +22413,12 @@ then :
printf "%s\n" "#define HAVE_BIO_SET_CALLBACK_EX 1" >>confdefs.h
fi
+ac_fn_c_check_func "$LINENO" "OPENSSL_cleanup" "ac_cv_func_OPENSSL_cleanup"
+if test "x$ac_cv_func_OPENSSL_cleanup" = xyes
+then :
+ printf "%s\n" "#define HAVE_OPENSSL_CLEANUP 1" >>confdefs.h
+
+fi
# these check_funcs need -lssl
@@ -21845,6 +22448,24 @@ then :
printf "%s\n" "#define HAVE_SSL_GET0_PEERNAME 1" >>confdefs.h
fi
+ac_fn_c_check_func "$LINENO" "SSL_set1_dnsname" "ac_cv_func_SSL_set1_dnsname"
+if test "x$ac_cv_func_SSL_set1_dnsname" = xyes
+then :
+ printf "%s\n" "#define HAVE_SSL_SET1_DNSNAME 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "X509_get_key_usage" "ac_cv_func_X509_get_key_usage"
+if test "x$ac_cv_func_X509_get_key_usage" = xyes
+then :
+ printf "%s\n" "#define HAVE_X509_GET_KEY_USAGE 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "ASN1_STRING_get0_data" "ac_cv_func_ASN1_STRING_get0_data"
+if test "x$ac_cv_func_ASN1_STRING_get0_data" = xyes
+then :
+ printf "%s\n" "#define HAVE_ASN1_STRING_GET0_DATA 1" >>confdefs.h
+
+fi
ac_fn_c_check_func "$LINENO" "X509_VERIFY_PARAM_set1_host" "ac_cv_func_X509_VERIFY_PARAM_set1_host"
if test "x$ac_cv_func_X509_VERIFY_PARAM_set1_host" = xyes
then :
@@ -21888,6 +22509,55 @@ then :
fi
+ac_fn_c_check_func "$LINENO" "X509_NAME_get_text_by_NID" "ac_cv_func_X509_NAME_get_text_by_NID"
+if test "x$ac_cv_func_X509_NAME_get_text_by_NID" = xyes
+then :
+ printf "%s\n" "#define HAVE_X509_NAME_GET_TEXT_BY_NID 1" >>confdefs.h
+
+fi
+
+if test $ac_cv_func_X509_NAME_get_text_by_NID = yes; then
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if X509_NAME_get_text_by_NID is deprecated" >&5
+printf %s "checking if X509_NAME_get_text_by_NID is deprecated... " >&6; }
+cache=`echo X509_NAME_get_text_by_NID | sed 'y%.=/+-%___p_%'`
+if eval test \${cv_cc_deprecated_$cache+y}
+then :
+ printf %s "(cached) " >&6
+else case e in #(
+ e)
+echo '
+#include "openssl/x509.h"
+' >conftest.c
+echo 'void f(void){
+ (void)X509_NAME_get_text_by_NID(NULL, 0, NULL, 0); }' >>conftest.c
+if test -z "`$CC $CPPFLAGS $CFLAGS -c conftest.c 2>&1 | grep -e deprecated -e unavailable`"; then
+eval "cv_cc_deprecated_$cache=no"
+else
+eval "cv_cc_deprecated_$cache=yes"
+fi
+rm -f conftest conftest.o conftest.c
+ ;;
+esac
+fi
+
+if eval "test \"`echo '$cv_cc_deprecated_'$cache`\" = yes"; then
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+
+printf "%s\n" "#define DEPRECATED_X509_NAME_GET_TEXT_BY_NID 1" >>confdefs.h
+
+:
+
+else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+:
+
+fi
+
+fi
LIBS="$BAKLIBS"
ac_fn_check_decl "$LINENO" "SSL_COMP_get_compression_methods" "ac_cv_have_decl_SSL_COMP_get_compression_methods" "
@@ -21914,8 +22584,9 @@ $ac_includes_default
if test "x$ac_cv_have_decl_SSL_COMP_get_compression_methods" = xyes
then :
ac_have_decl=1
-else $as_nop
- ac_have_decl=0
+else case e in #(
+ e) ac_have_decl=0 ;;
+esac
fi
printf "%s\n" "#define HAVE_DECL_SSL_COMP_GET_COMPRESSION_METHODS $ac_have_decl" >>confdefs.h
ac_fn_check_decl "$LINENO" "sk_SSL_COMP_pop_free" "ac_cv_have_decl_sk_SSL_COMP_pop_free" "
@@ -21942,8 +22613,9 @@ $ac_includes_default
if test "x$ac_cv_have_decl_sk_SSL_COMP_pop_free" = xyes
then :
ac_have_decl=1
-else $as_nop
- ac_have_decl=0
+else case e in #(
+ e) ac_have_decl=0 ;;
+esac
fi
printf "%s\n" "#define HAVE_DECL_SK_SSL_COMP_POP_FREE $ac_have_decl" >>confdefs.h
ac_fn_check_decl "$LINENO" "SSL_CTX_set_ecdh_auto" "ac_cv_have_decl_SSL_CTX_set_ecdh_auto" "
@@ -21970,8 +22642,9 @@ $ac_includes_default
if test "x$ac_cv_have_decl_SSL_CTX_set_ecdh_auto" = xyes
then :
ac_have_decl=1
-else $as_nop
- ac_have_decl=0
+else case e in #(
+ e) ac_have_decl=0 ;;
+esac
fi
printf "%s\n" "#define HAVE_DECL_SSL_CTX_SET_ECDH_AUTO $ac_have_decl" >>confdefs.h
ac_fn_check_decl "$LINENO" "SSL_CTX_set_tmp_ecdh" "ac_cv_have_decl_SSL_CTX_set_tmp_ecdh" "
@@ -21998,8 +22671,9 @@ $ac_includes_default
if test "x$ac_cv_have_decl_SSL_CTX_set_tmp_ecdh" = xyes
then :
ac_have_decl=1
-else $as_nop
- ac_have_decl=0
+else case e in #(
+ e) ac_have_decl=0 ;;
+esac
fi
printf "%s\n" "#define HAVE_DECL_SSL_CTX_SET_TMP_ECDH $ac_have_decl" >>confdefs.h
@@ -22049,14 +22723,15 @@ then :
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: int" >&5
printf "%s\n" "int" >&6; }
-else $as_nop
-
+else case e in #(
+ e)
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: void" >&5
printf "%s\n" "void" >&6; }
printf "%s\n" "#define HMAC_INIT_EX_RETURNS_VOID 1" >>confdefs.h
-
+ ;;
+esac
fi
rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
@@ -22087,21 +22762,27 @@ fi
if test "x$ac_cv_header_bsd_string_h" = xyes -a "x$ac_cv_header_bsd_stdlib_h" = xyes; then
for func in strlcpy strlcat arc4random arc4random_uniform reallocarray; do
- as_ac_Search=`printf "%s\n" "ac_cv_search_$func" | $as_tr_sh`
+ as_ac_Search=`printf "%s\n" "ac_cv_search_$func" | sed "$as_sed_sh"`
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing $func" >&5
printf %s "checking for library containing $func... " >&6; }
if eval test \${$as_ac_Search+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- ac_func_search_save_LIBS=$LIBS
+else case e in #(
+ e) ac_func_search_save_LIBS=$LIBS
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-char $func ();
+ builtin and then its argument prototype would still apply.
+ The 'extern "C"' is for builds by C++ compilers;
+ although this is not generally supported in C code supporting it here
+ has little cost and some practical benefit (sr 110532). */
+#ifdef __cplusplus
+extern "C"
+#endif
+char $func (void);
int
main (void)
{
@@ -22132,11 +22813,13 @@ done
if eval test \${$as_ac_Search+y}
then :
-else $as_nop
- eval "$as_ac_Search=no"
+else case e in #(
+ e) eval "$as_ac_Search=no" ;;
+esac
fi
rm conftest.$ac_ext
-LIBS=$ac_func_search_save_LIBS
+LIBS=$ac_func_search_save_LIBS ;;
+esac
fi
eval ac_res=\$$as_ac_Search
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
@@ -22231,16 +22914,18 @@ case "$enable_gost" in
if test "x$ac_cv_func_EVP_PKEY_set_type_str" = xyes
then :
:
-else $as_nop
- as_fn_error $? "OpenSSL 1.0.0 is needed for GOST support" "$LINENO" 5
+else case e in #(
+ e) as_fn_error $? "OpenSSL 1.0.0 is needed for GOST support" "$LINENO" 5 ;;
+esac
fi
ac_fn_c_check_func "$LINENO" "EC_KEY_new" "ac_cv_func_EC_KEY_new"
if test "x$ac_cv_func_EC_KEY_new" = xyes
then :
-else $as_nop
- as_fn_error $? "OpenSSL does not support ECC, needed for GOST support" "$LINENO" 5
+else case e in #(
+ e) as_fn_error $? "OpenSSL does not support ECC, needed for GOST support" "$LINENO" 5 ;;
+esac
fi
@@ -22254,8 +22939,8 @@ fi
if test "$cross_compiling" = yes
then :
eval "ac_cv_c_gost_works=maybe"
-else $as_nop
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+else case e in #(
+ e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <string.h>
@@ -22343,11 +23028,13 @@ _ACEOF
if ac_fn_c_try_run "$LINENO"
then :
eval "ac_cv_c_gost_works=yes"
-else $as_nop
- eval "ac_cv_c_gost_works=no"
+else case e in #(
+ e) eval "ac_cv_c_gost_works=no" ;;
+esac
fi
rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
+ conftest.$ac_objext conftest.beam conftest.$ac_ext ;;
+esac
fi
CFLAGS="$BAKCFLAGS"
@@ -22393,26 +23080,29 @@ then :
fi
-else $as_nop
-
+else case e in #(
+ e)
# 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 :
-else $as_nop
- as_fn_error $? "OpenSSL does not support ECDSA: please upgrade or rerun with --disable-ecdsa" "$LINENO" 5
+else case e in #(
+ e) as_fn_error $? "OpenSSL does not support ECDSA: please upgrade or rerun with --disable-ecdsa" "$LINENO" 5 ;;
+esac
fi
ac_fn_c_check_func "$LINENO" "SHA384_Init" "ac_cv_func_SHA384_Init"
if test "x$ac_cv_func_SHA384_Init" = xyes
then :
-else $as_nop
- as_fn_error $? "OpenSSL does not support SHA384: please upgrade or rerun with --disable-ecdsa" "$LINENO" 5
+else case e in #(
+ e) as_fn_error $? "OpenSSL does not support SHA384: please upgrade or rerun with --disable-ecdsa" "$LINENO" 5 ;;
+esac
fi
-
+ ;;
+esac
fi
ac_fn_check_decl "$LINENO" "NID_X9_62_prime256v1" "ac_cv_have_decl_NID_X9_62_prime256v1" "$ac_includes_default
@@ -22422,15 +23112,17 @@ fi
if test "x$ac_cv_have_decl_NID_X9_62_prime256v1" = xyes
then :
ac_have_decl=1
-else $as_nop
- ac_have_decl=0
+else case e in #(
+ e) ac_have_decl=0 ;;
+esac
fi
printf "%s\n" "#define HAVE_DECL_NID_X9_62_PRIME256V1 $ac_have_decl" >>confdefs.h
if test $ac_have_decl = 1
then :
-else $as_nop
- as_fn_error $? "OpenSSL does not support the ECDSA curves: please upgrade or rerun with --disable-ecdsa" "$LINENO" 5
+else case e in #(
+ e) as_fn_error $? "OpenSSL does not support the ECDSA curves: please upgrade or rerun with --disable-ecdsa" "$LINENO" 5 ;;
+esac
fi
ac_fn_check_decl "$LINENO" "NID_secp384r1" "ac_cv_have_decl_NID_secp384r1" "$ac_includes_default
#include <openssl/evp.h>
@@ -22439,15 +23131,17 @@ ac_fn_check_decl "$LINENO" "NID_secp384r1" "ac_cv_have_decl_NID_secp384r1" "$ac_
if test "x$ac_cv_have_decl_NID_secp384r1" = xyes
then :
ac_have_decl=1
-else $as_nop
- ac_have_decl=0
+else case e in #(
+ e) ac_have_decl=0 ;;
+esac
fi
printf "%s\n" "#define HAVE_DECL_NID_SECP384R1 $ac_have_decl" >>confdefs.h
if test $ac_have_decl = 1
then :
-else $as_nop
- as_fn_error $? "OpenSSL does not support the ECDSA curves: please upgrade or rerun with --disable-ecdsa" "$LINENO" 5
+else case e in #(
+ e) as_fn_error $? "OpenSSL does not support the ECDSA curves: please upgrade or rerun with --disable-ecdsa" "$LINENO" 5 ;;
+esac
fi
# see if OPENSSL 1.0.0 or later (has EVP MD and Verify independency)
@@ -22493,7 +23187,7 @@ case "$enable_dsa" in
if test "x$ac_cv_func_DSA_SIG_new" = xyes
then :
- as_ac_Type=`printf "%s\n" "ac_cv_type_DSA_SIG*" | $as_tr_sh`
+ as_ac_Type=`printf "%s\n" "ac_cv_type_DSA_SIG*" | sed "$as_sed_sh"`
ac_fn_c_check_type "$LINENO" "DSA_SIG*" "$as_ac_Type" "
$ac_includes_default
#ifdef HAVE_OPENSSL_ERR_H
@@ -22520,15 +23214,17 @@ then :
printf "%s\n" "#define USE_DSA 1" >>confdefs.h
-else $as_nop
- if test "x$enable_dsa" = "xyes"; then as_fn_error $? "OpenSSL does not support DSA and you used --enable-dsa." "$LINENO" 5
- fi
+else case e in #(
+ e) if test "x$enable_dsa" = "xyes"; then as_fn_error $? "OpenSSL does not support DSA and you used --enable-dsa." "$LINENO" 5
+ fi ;;
+esac
fi
-else $as_nop
- if test "x$enable_dsa" = "xyes"; then as_fn_error $? "OpenSSL does not support DSA and you used --enable-dsa." "$LINENO" 5
- fi
+else case e in #(
+ e) if test "x$enable_dsa" = "xyes"; then as_fn_error $? "OpenSSL does not support DSA and you used --enable-dsa." "$LINENO" 5
+ fi ;;
+esac
fi
else
@@ -22575,8 +23271,9 @@ case "$enable_ed25519" in
if test "x$ac_cv_have_decl_NID_ED25519" = xyes
then :
ac_have_decl=1
-else $as_nop
- ac_have_decl=0
+else case e in #(
+ e) ac_have_decl=0 ;;
+esac
fi
printf "%s\n" "#define HAVE_DECL_NID_ED25519 $ac_have_decl" >>confdefs.h
if test $ac_have_decl = 1
@@ -22584,9 +23281,10 @@ then :
use_ed25519="yes"
-else $as_nop
- if test "x$enable_ed25519" = "xyes"; then as_fn_error $? "OpenSSL does not support ED25519 and you used --enable-ed25519." "$LINENO" 5
- fi
+else case e in #(
+ e) if test "x$enable_ed25519" = "xyes"; then as_fn_error $? "OpenSSL does not support ED25519 and you used --enable-ed25519." "$LINENO" 5
+ fi ;;
+esac
fi
fi
@@ -22630,8 +23328,9 @@ case "$enable_ed448" in
if test "x$ac_cv_have_decl_NID_ED448" = xyes
then :
ac_have_decl=1
-else $as_nop
- ac_have_decl=0
+else case e in #(
+ e) ac_have_decl=0 ;;
+esac
fi
printf "%s\n" "#define HAVE_DECL_NID_ED448 $ac_have_decl" >>confdefs.h
if test $ac_have_decl = 1
@@ -22639,9 +23338,10 @@ then :
use_ed448="yes"
-else $as_nop
- if test "x$enable_ed448" = "xyes"; then as_fn_error $? "OpenSSL does not support ED448 and you used --enable-ed448." "$LINENO" 5
- fi
+else case e in #(
+ e) if test "x$enable_ed448" = "xyes"; then as_fn_error $? "OpenSSL does not support ED448 and you used --enable-ed448." "$LINENO" 5
+ fi ;;
+esac
fi
fi
@@ -22687,8 +23387,9 @@ if test "x$ac_cv_have_decl_MSG_FASTOPEN" = xyes
then :
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Check the platform specific TFO kernel parameters are correctly configured to support client mode TFO" >&5
printf "%s\n" "$as_me: WARNING: Check the platform specific TFO kernel parameters are correctly configured to support client mode TFO" >&2;}
-else $as_nop
- as_fn_error $? "TCP Fast Open is not available for client mode: please rerun without --enable-tfo-client" "$LINENO" 5
+else case e in #(
+ e) as_fn_error $? "TCP Fast Open is not available for client mode: please rerun without --enable-tfo-client" "$LINENO" 5 ;;
+esac
fi
printf "%s\n" "#define USE_MSG_FASTOPEN 1" >>confdefs.h
@@ -22702,8 +23403,9 @@ if test "x$ac_cv_have_decl_CONNECT_RESUME_ON_READ_WRITE" = xyes
then :
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Check the platform specific TFO kernel parameters are correctly configured to support client mode TFO" >&5
printf "%s\n" "$as_me: WARNING: Check the platform specific TFO kernel parameters are correctly configured to support client mode TFO" >&2;}
-else $as_nop
- as_fn_error $? "TCP Fast Open is not available for client mode: please rerun without --enable-tfo-client" "$LINENO" 5
+else case e in #(
+ e) as_fn_error $? "TCP Fast Open is not available for client mode: please rerun without --enable-tfo-client" "$LINENO" 5 ;;
+esac
fi
printf "%s\n" "#define USE_OSX_MSG_FASTOPEN 1" >>confdefs.h
@@ -22731,8 +23433,9 @@ if test "x$ac_cv_have_decl_TCP_FASTOPEN" = xyes
then :
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Check the platform specific TFO kernel parameters are correctly configured to support server mode TFO" >&5
printf "%s\n" "$as_me: WARNING: Check the platform specific TFO kernel parameters are correctly configured to support server mode TFO" >&2;}
-else $as_nop
- as_fn_error $? "TCP Fast Open is not available for server mode: please rerun without --enable-tfo-server" "$LINENO" 5
+else case e in #(
+ e) as_fn_error $? "TCP Fast Open is not available for server mode: please rerun without --enable-tfo-server" "$LINENO" 5 ;;
+esac
fi
printf "%s\n" "#define USE_TCP_FASTOPEN 1" >>confdefs.h
@@ -22748,8 +23451,9 @@ esac
if test ${with_libevent+y}
then :
withval=$with_libevent;
-else $as_nop
- with_libevent="no"
+else case e in #(
+ e) with_libevent="no" ;;
+esac
fi
if test "x_$with_libevent" != x_no; then
@@ -22828,15 +23532,21 @@ printf %s "checking for library containing clock_gettime... " >&6; }
if test ${ac_cv_search_clock_gettime+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- ac_func_search_save_LIBS=$LIBS
+else case e in #(
+ e) ac_func_search_save_LIBS=$LIBS
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-char clock_gettime ();
+ builtin and then its argument prototype would still apply.
+ The 'extern "C"' is for builds by C++ compilers;
+ although this is not generally supported in C code supporting it here
+ has little cost and some practical benefit (sr 110532). */
+#ifdef __cplusplus
+extern "C"
+#endif
+char clock_gettime (void);
int
main (void)
{
@@ -22867,11 +23577,13 @@ done
if test ${ac_cv_search_clock_gettime+y}
then :
-else $as_nop
- ac_cv_search_clock_gettime=no
+else case e in #(
+ e) ac_cv_search_clock_gettime=no ;;
+esac
fi
rm conftest.$ac_ext
-LIBS=$ac_func_search_save_LIBS
+LIBS=$ac_func_search_save_LIBS ;;
+esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_clock_gettime" >&5
printf "%s\n" "$ac_cv_search_clock_gettime" >&6; }
@@ -22904,15 +23616,21 @@ printf %s "checking for library containing event_set... " >&6; }
if test ${ac_cv_search_event_set+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- ac_func_search_save_LIBS=$LIBS
+else case e in #(
+ e) ac_func_search_save_LIBS=$LIBS
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-char event_set ();
+ builtin and then its argument prototype would still apply.
+ The 'extern "C"' is for builds by C++ compilers;
+ although this is not generally supported in C code supporting it here
+ has little cost and some practical benefit (sr 110532). */
+#ifdef __cplusplus
+extern "C"
+#endif
+char event_set (void);
int
main (void)
{
@@ -22943,11 +23661,13 @@ done
if test ${ac_cv_search_event_set+y}
then :
-else $as_nop
- ac_cv_search_event_set=no
+else case e in #(
+ e) ac_cv_search_event_set=no ;;
+esac
fi
rm conftest.$ac_ext
-LIBS=$ac_func_search_save_LIBS
+LIBS=$ac_func_search_save_LIBS ;;
+esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_event_set" >&5
printf "%s\n" "$ac_cv_search_event_set" >&6; }
@@ -22959,22 +23679,28 @@ then :
fi
-else $as_nop
-
+else case e in #(
+ e)
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing event_set" >&5
printf %s "checking for library containing event_set... " >&6; }
if test ${ac_cv_search_event_set+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- ac_func_search_save_LIBS=$LIBS
+else case e in #(
+ e) ac_func_search_save_LIBS=$LIBS
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-char event_set ();
+ builtin and then its argument prototype would still apply.
+ The 'extern "C"' is for builds by C++ compilers;
+ although this is not generally supported in C code supporting it here
+ has little cost and some practical benefit (sr 110532). */
+#ifdef __cplusplus
+extern "C"
+#endif
+char event_set (void);
int
main (void)
{
@@ -23005,11 +23731,13 @@ done
if test ${ac_cv_search_event_set+y}
then :
-else $as_nop
- ac_cv_search_event_set=no
+else case e in #(
+ e) ac_cv_search_event_set=no ;;
+esac
fi
rm conftest.$ac_ext
-LIBS=$ac_func_search_save_LIBS
+LIBS=$ac_func_search_save_LIBS ;;
+esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_event_set" >&5
printf "%s\n" "$ac_cv_search_event_set" >&6; }
@@ -23020,7 +23748,8 @@ then :
fi
-
+ ;;
+esac
fi
ac_fn_c_check_func "$LINENO" "event_base_free" "ac_cv_func_event_base_free"
if test "x$ac_cv_func_event_base_free" = xyes
@@ -23082,8 +23811,9 @@ fi
if test "x$ac_cv_have_decl_evsignal_assign" = xyes
then :
ac_have_decl=1
-else $as_nop
- ac_have_decl=0
+else case e in #(
+ e) ac_have_decl=0 ;;
+esac
fi
printf "%s\n" "#define HAVE_DECL_EVSIGNAL_ASSIGN $ac_have_decl" >>confdefs.h
@@ -23104,8 +23834,9 @@ fi
if test ${with_libexpat+y}
then :
withval=$with_libexpat;
-else $as_nop
- withval="/usr/local /opt/local /usr/lib /usr/pkg /usr/sfw /usr"
+else case e in #(
+ e) withval="/usr/local /opt/local /usr/lib /usr/pkg /usr/sfw /usr" ;;
+esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for libexpat" >&5
@@ -23141,8 +23872,9 @@ ac_fn_check_decl "$LINENO" "XML_StopParser" "ac_cv_have_decl_XML_StopParser" "$a
if test "x$ac_cv_have_decl_XML_StopParser" = xyes
then :
ac_have_decl=1
-else $as_nop
- ac_have_decl=0
+else case e in #(
+ e) ac_have_decl=0 ;;
+esac
fi
printf "%s\n" "#define HAVE_DECL_XML_STOPPARSER $ac_have_decl" >>confdefs.h
@@ -23153,8 +23885,9 @@ printf "%s\n" "#define HAVE_DECL_XML_STOPPARSER $ac_have_decl" >>confdefs.h
if test ${with_libhiredis+y}
then :
withval=$with_libhiredis;
-else $as_nop
- withval="no"
+else case e in #(
+ e) withval="no" ;;
+esac
fi
found_libhiredis="no"
@@ -23198,8 +23931,9 @@ fi
if test "x$ac_cv_have_decl_redisConnect" = xyes
then :
ac_have_decl=1
-else $as_nop
- ac_have_decl=0
+else case e in #(
+ e) ac_have_decl=0 ;;
+esac
fi
printf "%s\n" "#define HAVE_DECL_REDISCONNECT $ac_have_decl" >>confdefs.h
@@ -23211,8 +23945,9 @@ fi
if test ${with_libnghttp2+y}
then :
withval=$with_libnghttp2;
-else $as_nop
- withval="no"
+else case e in #(
+ e) withval="no" ;;
+esac
fi
found_libnghttp2="no"
@@ -23256,8 +23991,9 @@ fi
if test "x$ac_cv_have_decl_nghttp2_session_server_new" = xyes
then :
ac_have_decl=1
-else $as_nop
- ac_have_decl=0
+else case e in #(
+ e) ac_have_decl=0 ;;
+esac
fi
printf "%s\n" "#define HAVE_DECL_NGHTTP2_SESSION_SERVER_NEW $ac_have_decl" >>confdefs.h
@@ -23269,8 +24005,9 @@ fi
if test ${with_libngtcp2+y}
then :
withval=$with_libngtcp2;
-else $as_nop
- withval="no"
+else case e in #(
+ e) withval="no" ;;
+esac
fi
found_libngtcp2="no"
@@ -23335,8 +24072,9 @@ fi
if test "x$ac_cv_have_decl_ngtcp2_conn_server_new" = xyes
then :
ac_have_decl=1
-else $as_nop
- ac_have_decl=0
+else case e in #(
+ e) ac_have_decl=0 ;;
+esac
fi
printf "%s\n" "#define HAVE_DECL_NGTCP2_CONN_SERVER_NEW $ac_have_decl" >>confdefs.h
@@ -23347,8 +24085,9 @@ printf "%s\n" "#define HAVE_DECL_NGTCP2_CONN_SERVER_NEW $ac_have_decl" >>confdef
if test "x$ac_cv_have_decl_ngtcp2_crypto_encrypt_cb" = xyes
then :
ac_have_decl=1
-else $as_nop
- ac_have_decl=0
+else case e in #(
+ e) ac_have_decl=0 ;;
+esac
fi
printf "%s\n" "#define HAVE_DECL_NGTCP2_CRYPTO_ENCRYPT_CB $ac_have_decl" >>confdefs.h
@@ -23357,16 +24096,22 @@ printf %s "checking for ngtcp2_crypto_encrypt_cb in -lngtcp2_crypto_ossl... " >&
if test ${ac_cv_lib_ngtcp2_crypto_ossl_ngtcp2_crypto_encrypt_cb+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- ac_check_lib_save_LIBS=$LIBS
+else case e in #(
+ e) ac_check_lib_save_LIBS=$LIBS
LIBS="-lngtcp2_crypto_ossl $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-char ngtcp2_crypto_encrypt_cb ();
+ builtin and then its argument prototype would still apply.
+ The 'extern "C"' is for builds by C++ compilers;
+ although this is not generally supported in C code supporting it here
+ has little cost and some practical benefit (sr 110532). */
+#ifdef __cplusplus
+extern "C"
+#endif
+char ngtcp2_crypto_encrypt_cb (void);
int
main (void)
{
@@ -23378,12 +24123,14 @@ _ACEOF
if ac_fn_c_try_link "$LINENO"
then :
ac_cv_lib_ngtcp2_crypto_ossl_ngtcp2_crypto_encrypt_cb=yes
-else $as_nop
- ac_cv_lib_ngtcp2_crypto_ossl_ngtcp2_crypto_encrypt_cb=no
+else case e in #(
+ e) ac_cv_lib_ngtcp2_crypto_ossl_ngtcp2_crypto_encrypt_cb=no ;;
+esac
fi
rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
+LIBS=$ac_check_lib_save_LIBS ;;
+esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ngtcp2_crypto_ossl_ngtcp2_crypto_encrypt_cb" >&5
printf "%s\n" "$ac_cv_lib_ngtcp2_crypto_ossl_ngtcp2_crypto_encrypt_cb" >&6; }
@@ -23394,24 +24141,50 @@ then :
printf "%s\n" "#define USE_NGTCP2_CRYPTO_OSSL 1" >>confdefs.h
+ ac_fn_check_decl "$LINENO" "ngtcp2_crypto_ossl_ctx_new" "ac_cv_have_decl_ngtcp2_crypto_ossl_ctx_new" "$ac_includes_default
+ #include <ngtcp2/ngtcp2_crypto_ossl.h>
-else $as_nop
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_ngtcp2_crypto_ossl_ctx_new" = xyes
+then :
+ ac_have_decl=1
+else case e in #(
+ e) ac_have_decl=0 ;;
+esac
+fi
+printf "%s\n" "#define HAVE_DECL_NGTCP2_CRYPTO_OSSL_CTX_NEW $ac_have_decl" >>confdefs.h
+if test $ac_have_decl = 1
+then :
+else case e in #(
+ e) as_fn_error $? "No declaration of ngtcp2_crypto_ossl_ctx_new in the ngtcp2_crypto_ossl header file. Perhaps the ngtcp2_crypto_ossl devel header files need to be installed." "$LINENO" 5 ;;
+esac
+fi
+
+
+else case e in #(
+ e)
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ngtcp2_crypto_encrypt_cb in -lngtcp2_crypto_openssl" >&5
printf %s "checking for ngtcp2_crypto_encrypt_cb in -lngtcp2_crypto_openssl... " >&6; }
if test ${ac_cv_lib_ngtcp2_crypto_openssl_ngtcp2_crypto_encrypt_cb+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- ac_check_lib_save_LIBS=$LIBS
+else case e in #(
+ e) ac_check_lib_save_LIBS=$LIBS
LIBS="-lngtcp2_crypto_openssl $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-char ngtcp2_crypto_encrypt_cb ();
+ builtin and then its argument prototype would still apply.
+ The 'extern "C"' is for builds by C++ compilers;
+ although this is not generally supported in C code supporting it here
+ has little cost and some practical benefit (sr 110532). */
+#ifdef __cplusplus
+extern "C"
+#endif
+char ngtcp2_crypto_encrypt_cb (void);
int
main (void)
{
@@ -23423,35 +24196,43 @@ _ACEOF
if ac_fn_c_try_link "$LINENO"
then :
ac_cv_lib_ngtcp2_crypto_openssl_ngtcp2_crypto_encrypt_cb=yes
-else $as_nop
- ac_cv_lib_ngtcp2_crypto_openssl_ngtcp2_crypto_encrypt_cb=no
+else case e in #(
+ e) ac_cv_lib_ngtcp2_crypto_openssl_ngtcp2_crypto_encrypt_cb=no ;;
+esac
fi
rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
+LIBS=$ac_check_lib_save_LIBS ;;
+esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ngtcp2_crypto_openssl_ngtcp2_crypto_encrypt_cb" >&5
printf "%s\n" "$ac_cv_lib_ngtcp2_crypto_openssl_ngtcp2_crypto_encrypt_cb" >&6; }
if test "x$ac_cv_lib_ngtcp2_crypto_openssl_ngtcp2_crypto_encrypt_cb" = xyes
then :
LIBS="$LIBS -lngtcp2_crypto_openssl"
-else $as_nop
-
+else case e in #(
+ e)
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ngtcp2_crypto_encrypt_cb in -lngtcp2_crypto_quictls" >&5
printf %s "checking for ngtcp2_crypto_encrypt_cb in -lngtcp2_crypto_quictls... " >&6; }
if test ${ac_cv_lib_ngtcp2_crypto_quictls_ngtcp2_crypto_encrypt_cb+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- ac_check_lib_save_LIBS=$LIBS
+else case e in #(
+ e) ac_check_lib_save_LIBS=$LIBS
LIBS="-lngtcp2_crypto_quictls $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-char ngtcp2_crypto_encrypt_cb ();
+ builtin and then its argument prototype would still apply.
+ The 'extern "C"' is for builds by C++ compilers;
+ although this is not generally supported in C code supporting it here
+ has little cost and some practical benefit (sr 110532). */
+#ifdef __cplusplus
+extern "C"
+#endif
+char ngtcp2_crypto_encrypt_cb (void);
int
main (void)
{
@@ -23463,12 +24244,14 @@ _ACEOF
if ac_fn_c_try_link "$LINENO"
then :
ac_cv_lib_ngtcp2_crypto_quictls_ngtcp2_crypto_encrypt_cb=yes
-else $as_nop
- ac_cv_lib_ngtcp2_crypto_quictls_ngtcp2_crypto_encrypt_cb=no
+else case e in #(
+ e) ac_cv_lib_ngtcp2_crypto_quictls_ngtcp2_crypto_encrypt_cb=no ;;
+esac
fi
rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
+LIBS=$ac_check_lib_save_LIBS ;;
+esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ngtcp2_crypto_quictls_ngtcp2_crypto_encrypt_cb" >&5
printf "%s\n" "$ac_cv_lib_ngtcp2_crypto_quictls_ngtcp2_crypto_encrypt_cb" >&6; }
@@ -23477,10 +24260,12 @@ then :
LIBS="$LIBS -lngtcp2_crypto_quictls"
fi
-
+ ;;
+esac
fi
-
+ ;;
+esac
fi
ac_fn_c_check_func "$LINENO" "ngtcp2_crypto_encrypt_cb" "ac_cv_func_ngtcp2_crypto_encrypt_cb"
@@ -23568,11 +24353,19 @@ if test "x$ac_cv_func_SSL_is_quic" = xyes
then :
printf "%s\n" "#define HAVE_SSL_IS_QUIC 1" >>confdefs.h
-else $as_nop
- as_fn_error $? "No QUIC support detected in OpenSSL. Need OpenSSL version with QUIC support to enable DNS over QUIC with libngtcp2." "$LINENO" 5
+else case e in #(
+ e) as_fn_error $? "No QUIC support detected in OpenSSL. Need OpenSSL version with QUIC support to enable DNS over QUIC with libngtcp2." "$LINENO" 5 ;;
+esac
fi
done
+ ac_fn_c_check_func "$LINENO" "SSL_set_quic_tls_early_data_enabled" "ac_cv_func_SSL_set_quic_tls_early_data_enabled"
+if test "x$ac_cv_func_SSL_set_quic_tls_early_data_enabled" = xyes
+then :
+ printf "%s\n" "#define HAVE_SSL_SET_QUIC_TLS_EARLY_DATA_ENABLED 1" >>confdefs.h
+
+fi
+
LIBS="$BAKLIBS"
ac_fn_c_check_type "$LINENO" "struct ngtcp2_version_cid" "ac_cv_type_struct_ngtcp2_version_cid" "$ac_includes_default
@@ -23670,11 +24463,12 @@ printf "%s\n" "yes" >&6; }
printf "%s\n" "#define HAVE_NGTCP2_CONN_SHUTDOWN_STREAM4 1" >>confdefs.h
-else $as_nop
-
+else case e in #(
+ e)
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
printf "%s\n" "no" >&6; }
-
+ ;;
+esac
fi
rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
@@ -23696,9 +24490,10 @@ if test "x$ac_cv_have_decl_CLOCK_MONOTONIC_________" = xyes
then :
-else $as_nop
- as_fn_error $? "ngtcp2 for QUIC needs at least CLOCK_MONOTONIC on the system" "$LINENO" 5
-
+else case e in #(
+ e) as_fn_error $? "ngtcp2 for QUIC needs at least CLOCK_MONOTONIC on the system" "$LINENO" 5
+ ;;
+esac
fi
fi
@@ -23727,16 +24522,22 @@ printf %s "checking for compress in -lz... " >&6; }
if test ${ac_cv_lib_z_compress+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- ac_check_lib_save_LIBS=$LIBS
+else case e in #(
+ e) ac_check_lib_save_LIBS=$LIBS
LIBS="-lz $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-char compress ();
+ builtin and then its argument prototype would still apply.
+ The 'extern "C"' is for builds by C++ compilers;
+ although this is not generally supported in C code supporting it here
+ has little cost and some practical benefit (sr 110532). */
+#ifdef __cplusplus
+extern "C"
+#endif
+char compress (void);
int
main (void)
{
@@ -23748,12 +24549,14 @@ _ACEOF
if ac_fn_c_try_link "$LINENO"
then :
ac_cv_lib_z_compress=yes
-else $as_nop
- ac_cv_lib_z_compress=no
+else case e in #(
+ e) ac_cv_lib_z_compress=no ;;
+esac
fi
rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
+LIBS=$ac_check_lib_save_LIBS ;;
+esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_z_compress" >&5
printf "%s\n" "$ac_cv_lib_z_compress" >&6; }
@@ -23793,16 +24596,22 @@ printf %s "checking for compress in -lz... " >&6; }
if test ${ac_cv_lib_z_compress+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- ac_check_lib_save_LIBS=$LIBS
+else case e in #(
+ e) ac_check_lib_save_LIBS=$LIBS
LIBS="-lz $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-char compress ();
+ builtin and then its argument prototype would still apply.
+ The 'extern "C"' is for builds by C++ compilers;
+ although this is not generally supported in C code supporting it here
+ has little cost and some practical benefit (sr 110532). */
+#ifdef __cplusplus
+extern "C"
+#endif
+char compress (void);
int
main (void)
{
@@ -23814,12 +24623,14 @@ _ACEOF
if ac_fn_c_try_link "$LINENO"
then :
ac_cv_lib_z_compress=yes
-else $as_nop
- ac_cv_lib_z_compress=no
+else case e in #(
+ e) ac_cv_lib_z_compress=no ;;
+esac
fi
rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
+LIBS=$ac_check_lib_save_LIBS ;;
+esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_z_compress" >&5
printf "%s\n" "$ac_cv_lib_z_compress" >&6; }
@@ -23890,8 +24701,8 @@ printf "%s\n" "#define USE_WINSOCK 1" >>confdefs.h
fi
fi
-else $as_nop
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+else case e in #(
+ e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#ifdef HAVE_WS2TCPIP_H
@@ -23918,8 +24729,8 @@ printf "%s\n" "#define USE_WINSOCK 1" >>confdefs.h
USE_WINSOCK="1"
-else $as_nop
- ORIGLIBS="$LIBS"
+else case e in #(
+ e) ORIGLIBS="$LIBS"
LIBS="$LIBS -lws2_32"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -23948,19 +24759,22 @@ printf "%s\n" "#define USE_WINSOCK 1" >>confdefs.h
USE_WINSOCK="1"
-else $as_nop
-
+else case e in #(
+ e)
ac_cv_func_getaddrinfo="no"
LIBS="$ORIGLIBS"
-
+ ;;
+esac
fi
rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
-
+ ;;
+esac
fi
rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
-
+ ;;
+esac
fi
rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
@@ -23995,8 +24809,8 @@ printf %s "checking for $ac_word... " >&6; }
if test ${ac_cv_prog_WINDRES+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- if test -n "$WINDRES"; then
+else case e in #(
+ e) if test -n "$WINDRES"; then
ac_cv_prog_WINDRES="$WINDRES" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -24018,7 +24832,8 @@ done
done
IFS=$as_save_IFS
-fi
+fi ;;
+esac
fi
WINDRES=$ac_cv_prog_WINDRES
if test -n "$WINDRES"; then
@@ -24040,8 +24855,8 @@ printf %s "checking for $ac_word... " >&6; }
if test ${ac_cv_prog_ac_ct_WINDRES+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- if test -n "$ac_ct_WINDRES"; then
+else case e in #(
+ e) if test -n "$ac_ct_WINDRES"; then
ac_cv_prog_ac_ct_WINDRES="$ac_ct_WINDRES" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -24063,7 +24878,8 @@ done
done
IFS=$as_save_IFS
-fi
+fi ;;
+esac
fi
ac_ct_WINDRES=$ac_cv_prog_ac_ct_WINDRES
if test -n "$ac_ct_WINDRES"; then
@@ -24153,9 +24969,10 @@ printf "%s\n" "yes" >&6; }
printf "%s\n" "#define HAVE_IOCTLSOCKET 1" >>confdefs.h
-else $as_nop
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
-printf "%s\n" "no" >&6; }
+else case e in #(
+ e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; } ;;
+esac
fi
rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
@@ -24178,8 +24995,8 @@ cache=`echo daemon | sed 'y%.=/+-%___p_%'`
if eval test \${cv_cc_deprecated_$cache+y}
then :
printf %s "(cached) " >&6
-else $as_nop
-
+else case e in #(
+ e)
echo '
#include <stdlib.h>
#include <unistd.h>
@@ -24191,7 +25008,8 @@ else
eval "cv_cc_deprecated_$cache=yes"
fi
rm -f conftest conftest.o conftest.c
-
+ ;;
+esac
fi
if eval "test \"`echo '$cv_cc_deprecated_'$cache`\" = yes"; then
@@ -24315,9 +25133,10 @@ printf "%s\n" "yes" >&6; }
printf "%s\n" "#define HAVE_HTOBE64 1" >>confdefs.h
-else $as_nop
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
-printf "%s\n" "no" >&6; }
+else case e in #(
+ e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; } ;;
+esac
fi
rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
@@ -24350,9 +25169,10 @@ printf "%s\n" "yes" >&6; }
printf "%s\n" "#define HAVE_BE64TOH 1" >>confdefs.h
-else $as_nop
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
-printf "%s\n" "no" >&6; }
+else case e in #(
+ e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; } ;;
+esac
fi
rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
@@ -24362,15 +25182,21 @@ printf %s "checking for library containing setusercontext... " >&6; }
if test ${ac_cv_search_setusercontext+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- ac_func_search_save_LIBS=$LIBS
+else case e in #(
+ e) ac_func_search_save_LIBS=$LIBS
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-char setusercontext ();
+ builtin and then its argument prototype would still apply.
+ The 'extern "C"' is for builds by C++ compilers;
+ although this is not generally supported in C code supporting it here
+ has little cost and some practical benefit (sr 110532). */
+#ifdef __cplusplus
+extern "C"
+#endif
+char setusercontext (void);
int
main (void)
{
@@ -24401,11 +25227,13 @@ done
if test ${ac_cv_search_setusercontext+y}
then :
-else $as_nop
- ac_cv_search_setusercontext=no
+else case e in #(
+ e) ac_cv_search_setusercontext=no ;;
+esac
fi
rm conftest.$ac_ext
-LIBS=$ac_func_search_save_LIBS
+LIBS=$ac_func_search_save_LIBS ;;
+esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_setusercontext" >&5
printf "%s\n" "$ac_cv_search_setusercontext" >&6; }
@@ -24536,6 +25364,12 @@ then :
printf "%s\n" "#define HAVE_GLOB 1" >>confdefs.h
fi
+ac_fn_c_check_func "$LINENO" "fnmatch" "ac_cv_func_fnmatch"
+if test "x$ac_cv_func_fnmatch" = xyes
+then :
+ printf "%s\n" "#define HAVE_FNMATCH 1" >>confdefs.h
+
+fi
ac_fn_c_check_func "$LINENO" "initgroups" "ac_cv_func_initgroups"
if test "x$ac_cv_func_initgroups" = xyes
then :
@@ -24629,14 +25463,15 @@ if test "x$ac_cv_func_setresuid" = xyes
then :
printf "%s\n" "#define HAVE_SETRESUID 1" >>confdefs.h
-else $as_nop
- ac_fn_c_check_func "$LINENO" "setreuid" "ac_cv_func_setreuid"
+else case e in #(
+ e) ac_fn_c_check_func "$LINENO" "setreuid" "ac_cv_func_setreuid"
if test "x$ac_cv_func_setreuid" = xyes
then :
printf "%s\n" "#define HAVE_SETREUID 1" >>confdefs.h
fi
-
+ ;;
+esac
fi
done
@@ -24648,14 +25483,15 @@ if test "x$ac_cv_func_setresgid" = xyes
then :
printf "%s\n" "#define HAVE_SETRESGID 1" >>confdefs.h
-else $as_nop
- ac_fn_c_check_func "$LINENO" "setregid" "ac_cv_func_setregid"
+else case e in #(
+ e) ac_fn_c_check_func "$LINENO" "setregid" "ac_cv_func_setregid"
if test "x$ac_cv_func_setregid" = xyes
then :
printf "%s\n" "#define HAVE_SETREGID 1" >>confdefs.h
fi
-
+ ;;
+esac
fi
done
@@ -24699,11 +25535,12 @@ printf "%s\n" "yes" >&6; }
printf "%s\n" "#define HAVE_LINK_ATOMIC_STORE 1" >>confdefs.h
-else $as_nop
-
+else case e in #(
+ e)
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
printf "%s\n" "no" >&6; }
-
+ ;;
+esac
fi
rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
@@ -24734,8 +25571,9 @@ $ac_includes_default
if test "x$ac_cv_have_decl_inet_pton" = xyes
then :
ac_have_decl=1
-else $as_nop
- ac_have_decl=0
+else case e in #(
+ e) ac_have_decl=0 ;;
+esac
fi
printf "%s\n" "#define HAVE_DECL_INET_PTON $ac_have_decl" >>confdefs.h
ac_fn_check_decl "$LINENO" "inet_ntop" "ac_cv_have_decl_inet_ntop" "
@@ -24764,8 +25602,9 @@ $ac_includes_default
if test "x$ac_cv_have_decl_inet_ntop" = xyes
then :
ac_have_decl=1
-else $as_nop
- ac_have_decl=0
+else case e in #(
+ e) ac_have_decl=0 ;;
+esac
fi
printf "%s\n" "#define HAVE_DECL_INET_NTOP $ac_have_decl" >>confdefs.h
@@ -24774,13 +25613,14 @@ if test "x$ac_cv_func_inet_aton" = xyes
then :
printf "%s\n" "#define HAVE_INET_ATON 1" >>confdefs.h
-else $as_nop
- case " $LIBOBJS " in
+else case e in #(
+ e) case " $LIBOBJS " in
*" inet_aton.$ac_objext "* ) ;;
*) LIBOBJS="$LIBOBJS inet_aton.$ac_objext"
;;
esac
-
+ ;;
+esac
fi
ac_fn_c_check_func "$LINENO" "inet_pton" "ac_cv_func_inet_pton"
@@ -24788,13 +25628,14 @@ if test "x$ac_cv_func_inet_pton" = xyes
then :
printf "%s\n" "#define HAVE_INET_PTON 1" >>confdefs.h
-else $as_nop
- case " $LIBOBJS " in
+else case e in #(
+ e) case " $LIBOBJS " in
*" inet_pton.$ac_objext "* ) ;;
*) LIBOBJS="$LIBOBJS inet_pton.$ac_objext"
;;
esac
-
+ ;;
+esac
fi
ac_fn_c_check_func "$LINENO" "inet_ntop" "ac_cv_func_inet_ntop"
@@ -24802,13 +25643,14 @@ if test "x$ac_cv_func_inet_ntop" = xyes
then :
printf "%s\n" "#define HAVE_INET_NTOP 1" >>confdefs.h
-else $as_nop
- case " $LIBOBJS " in
+else case e in #(
+ e) case " $LIBOBJS " in
*" inet_ntop.$ac_objext "* ) ;;
*) LIBOBJS="$LIBOBJS inet_ntop.$ac_objext"
;;
esac
-
+ ;;
+esac
fi
ac_fn_c_check_func "$LINENO" "snprintf" "ac_cv_func_snprintf"
@@ -24816,13 +25658,14 @@ if test "x$ac_cv_func_snprintf" = xyes
then :
printf "%s\n" "#define HAVE_SNPRINTF 1" >>confdefs.h
-else $as_nop
- case " $LIBOBJS " in
+else case e in #(
+ e) case " $LIBOBJS " in
*" snprintf.$ac_objext "* ) ;;
*) LIBOBJS="$LIBOBJS snprintf.$ac_objext"
;;
esac
-
+ ;;
+esac
fi
# test if snprintf return the proper length
@@ -24834,8 +25677,8 @@ printf %s "checking for correct snprintf return value... " >&6; }
then :
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: maybe" >&5
printf "%s\n" "maybe" >&6; }
-else $as_nop
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+else case e in #(
+ e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
$ac_includes_default
@@ -24846,8 +25689,8 @@ if ac_fn_c_try_run "$LINENO"
then :
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
printf "%s\n" "yes" >&6; }
-else $as_nop
-
+else case e in #(
+ e)
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
printf "%s\n" "no" >&6; }
@@ -24859,10 +25702,12 @@ printf "%s\n" "#define SNPRINTF_RET_BROKEN /**/" >>confdefs.h
;;
esac
-
+ ;;
+esac
fi
rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
+ conftest.$ac_objext conftest.beam conftest.$ac_ext ;;
+esac
fi
fi
@@ -24872,13 +25717,14 @@ if test "x$ac_cv_func_strlcat" = xyes
then :
printf "%s\n" "#define HAVE_STRLCAT 1" >>confdefs.h
-else $as_nop
- case " $LIBOBJS " in
+else case e in #(
+ e) case " $LIBOBJS " in
*" strlcat.$ac_objext "* ) ;;
*) LIBOBJS="$LIBOBJS strlcat.$ac_objext"
;;
esac
-
+ ;;
+esac
fi
ac_fn_c_check_func "$LINENO" "strlcpy" "ac_cv_func_strlcpy"
@@ -24886,13 +25732,14 @@ if test "x$ac_cv_func_strlcpy" = xyes
then :
printf "%s\n" "#define HAVE_STRLCPY 1" >>confdefs.h
-else $as_nop
- case " $LIBOBJS " in
+else case e in #(
+ e) case " $LIBOBJS " in
*" strlcpy.$ac_objext "* ) ;;
*) LIBOBJS="$LIBOBJS strlcpy.$ac_objext"
;;
esac
-
+ ;;
+esac
fi
ac_fn_c_check_func "$LINENO" "memmove" "ac_cv_func_memmove"
@@ -24900,13 +25747,14 @@ if test "x$ac_cv_func_memmove" = xyes
then :
printf "%s\n" "#define HAVE_MEMMOVE 1" >>confdefs.h
-else $as_nop
- case " $LIBOBJS " in
+else case e in #(
+ e) case " $LIBOBJS " in
*" memmove.$ac_objext "* ) ;;
*) LIBOBJS="$LIBOBJS memmove.$ac_objext"
;;
esac
-
+ ;;
+esac
fi
ac_fn_c_check_func "$LINENO" "gmtime_r" "ac_cv_func_gmtime_r"
@@ -24914,13 +25762,14 @@ if test "x$ac_cv_func_gmtime_r" = xyes
then :
printf "%s\n" "#define HAVE_GMTIME_R 1" >>confdefs.h
-else $as_nop
- case " $LIBOBJS " in
+else case e in #(
+ e) case " $LIBOBJS " in
*" gmtime_r.$ac_objext "* ) ;;
*) LIBOBJS="$LIBOBJS gmtime_r.$ac_objext"
;;
esac
-
+ ;;
+esac
fi
ac_fn_c_check_func "$LINENO" "isblank" "ac_cv_func_isblank"
@@ -24928,13 +25777,14 @@ if test "x$ac_cv_func_isblank" = xyes
then :
printf "%s\n" "#define HAVE_ISBLANK 1" >>confdefs.h
-else $as_nop
- case " $LIBOBJS " in
+else case e in #(
+ e) case " $LIBOBJS " in
*" isblank.$ac_objext "* ) ;;
*) LIBOBJS="$LIBOBJS isblank.$ac_objext"
;;
esac
-
+ ;;
+esac
fi
ac_fn_c_check_func "$LINENO" "explicit_bzero" "ac_cv_func_explicit_bzero"
@@ -24942,13 +25792,14 @@ if test "x$ac_cv_func_explicit_bzero" = xyes
then :
printf "%s\n" "#define HAVE_EXPLICIT_BZERO 1" >>confdefs.h
-else $as_nop
- case " $LIBOBJS " in
+else case e in #(
+ e) case " $LIBOBJS " in
*" explicit_bzero.$ac_objext "* ) ;;
*) LIBOBJS="$LIBOBJS explicit_bzero.$ac_objext"
;;
esac
-
+ ;;
+esac
fi
LIBOBJ_WITHOUT_CTIMEARC4="$LIBOBJS"
@@ -24978,8 +25829,8 @@ printf "%s\n" "yes" >&6; }
printf "%s\n" "#define HAVE_REALLOCARRAY 1" >>confdefs.h
-else $as_nop
-
+else case e in #(
+ e)
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
printf "%s\n" "no" >&6; }
case " $LIBOBJS " in
@@ -24988,7 +25839,8 @@ printf "%s\n" "no" >&6; }
;;
esac
-
+ ;;
+esac
fi
rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
@@ -24996,8 +25848,9 @@ ac_fn_check_decl "$LINENO" "reallocarray" "ac_cv_have_decl_reallocarray" "$ac_in
if test "x$ac_cv_have_decl_reallocarray" = xyes
then :
ac_have_decl=1
-else $as_nop
- ac_have_decl=0
+else case e in #(
+ e) ac_have_decl=0 ;;
+esac
fi
printf "%s\n" "#define HAVE_DECL_REALLOCARRAY $ac_have_decl" >>confdefs.h
@@ -25007,13 +25860,14 @@ if test "x$ac_cv_func_arc4random" = xyes
then :
printf "%s\n" "#define HAVE_ARC4RANDOM 1" >>confdefs.h
-else $as_nop
- case " $LIBOBJS " in
+else case e in #(
+ e) case " $LIBOBJS " in
*" arc4random.$ac_objext "* ) ;;
*) LIBOBJS="$LIBOBJS arc4random.$ac_objext"
;;
esac
-
+ ;;
+esac
fi
ac_fn_c_check_func "$LINENO" "arc4random_uniform" "ac_cv_func_arc4random_uniform"
@@ -25021,13 +25875,14 @@ if test "x$ac_cv_func_arc4random_uniform" = xyes
then :
printf "%s\n" "#define HAVE_ARC4RANDOM_UNIFORM 1" >>confdefs.h
-else $as_nop
- case " $LIBOBJS " in
+else case e in #(
+ e) case " $LIBOBJS " in
*" arc4random_uniform.$ac_objext "* ) ;;
*) LIBOBJS="$LIBOBJS arc4random_uniform.$ac_objext"
;;
esac
-
+ ;;
+esac
fi
if test "$ac_cv_func_arc4random" = "no"; then
@@ -25045,8 +25900,8 @@ if test "x$ac_cv_func_getentropy" = xyes
then :
printf "%s\n" "#define HAVE_GETENTROPY 1" >>confdefs.h
-else $as_nop
-
+else case e in #(
+ e)
if test "$USE_WINSOCK" = 1; then
case " $LIBOBJS " in
*" getentropy_win.$ac_objext "* ) ;;
@@ -25079,8 +25934,8 @@ if test "x$ac_cv_header_sys_sha2_h" = xyes
then :
printf "%s\n" "#define HAVE_SYS_SHA2_H 1" >>confdefs.h
-else $as_nop
-
+else case e in #(
+ e)
for ac_func in SHA512_Update
do :
@@ -25089,19 +25944,21 @@ if test "x$ac_cv_func_SHA512_Update" = xyes
then :
printf "%s\n" "#define HAVE_SHA512_UPDATE 1" >>confdefs.h
-else $as_nop
-
+else case e in #(
+ e)
case " $LIBOBJS " in
*" sha512.$ac_objext "* ) ;;
*) LIBOBJS="$LIBOBJS sha512.$ac_objext"
;;
esac
-
+ ;;
+esac
fi
done
-
+ ;;
+esac
fi
done
@@ -25114,15 +25971,21 @@ printf %s "checking for library containing clock_gettime... " >&6; }
if test ${ac_cv_search_clock_gettime+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- ac_func_search_save_LIBS=$LIBS
+else case e in #(
+ e) ac_func_search_save_LIBS=$LIBS
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-char clock_gettime ();
+ builtin and then its argument prototype would still apply.
+ The 'extern "C"' is for builds by C++ compilers;
+ although this is not generally supported in C code supporting it here
+ has little cost and some practical benefit (sr 110532). */
+#ifdef __cplusplus
+extern "C"
+#endif
+char clock_gettime (void);
int
main (void)
{
@@ -25153,11 +26016,13 @@ done
if test ${ac_cv_search_clock_gettime+y}
then :
-else $as_nop
- ac_cv_search_clock_gettime=no
+else case e in #(
+ e) ac_cv_search_clock_gettime=no ;;
+esac
fi
rm conftest.$ac_ext
-LIBS=$ac_func_search_save_LIBS
+LIBS=$ac_func_search_save_LIBS ;;
+esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_clock_gettime" >&5
printf "%s\n" "$ac_cv_search_clock_gettime" >&6; }
@@ -25192,8 +26057,8 @@ if test "x$ac_cv_func_SHA512_Update" = xyes
then :
printf "%s\n" "#define HAVE_SHA512_UPDATE 1" >>confdefs.h
-else $as_nop
-
+else case e in #(
+ e)
printf "%s\n" "#define COMPAT_SHA512 1" >>confdefs.h
@@ -25203,7 +26068,8 @@ printf "%s\n" "#define COMPAT_SHA512 1" >>confdefs.h
;;
esac
-
+ ;;
+esac
fi
done
@@ -25227,15 +26093,21 @@ printf %s "checking for library containing clock_gettime... " >&6; }
if test ${ac_cv_search_clock_gettime+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- ac_func_search_save_LIBS=$LIBS
+else case e in #(
+ e) ac_func_search_save_LIBS=$LIBS
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-char clock_gettime ();
+ builtin and then its argument prototype would still apply.
+ The 'extern "C"' is for builds by C++ compilers;
+ although this is not generally supported in C code supporting it here
+ has little cost and some practical benefit (sr 110532). */
+#ifdef __cplusplus
+extern "C"
+#endif
+char clock_gettime (void);
int
main (void)
{
@@ -25266,11 +26138,13 @@ done
if test ${ac_cv_search_clock_gettime+y}
then :
-else $as_nop
- ac_cv_search_clock_gettime=no
+else case e in #(
+ e) ac_cv_search_clock_gettime=no ;;
+esac
fi
rm conftest.$ac_ext
-LIBS=$ac_func_search_save_LIBS
+LIBS=$ac_func_search_save_LIBS ;;
+esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_clock_gettime" >&5
printf "%s\n" "$ac_cv_search_clock_gettime" >&6; }
@@ -25284,7 +26158,8 @@ fi
;;
esac
fi
-
+ ;;
+esac
fi
done
@@ -25297,13 +26172,14 @@ if test "x$ac_cv_func_ctime_r" = xyes
then :
printf "%s\n" "#define HAVE_CTIME_R 1" >>confdefs.h
-else $as_nop
- case " $LIBOBJS " in
+else case e in #(
+ e) case " $LIBOBJS " in
*" ctime_r.$ac_objext "* ) ;;
*) LIBOBJS="$LIBOBJS ctime_r.$ac_objext"
;;
esac
-
+ ;;
+esac
fi
ac_fn_c_check_func "$LINENO" "strsep" "ac_cv_func_strsep"
@@ -25311,13 +26187,14 @@ if test "x$ac_cv_func_strsep" = xyes
then :
printf "%s\n" "#define HAVE_STRSEP 1" >>confdefs.h
-else $as_nop
- case " $LIBOBJS " in
+else case e in #(
+ e) case " $LIBOBJS " in
*" strsep.$ac_objext "* ) ;;
*) LIBOBJS="$LIBOBJS strsep.$ac_objext"
;;
esac
-
+ ;;
+esac
fi
@@ -25368,8 +26245,9 @@ fi
if test ${enable_dnstap+y}
then :
enableval=$enable_dnstap; opt_dnstap=$enableval
-else $as_nop
- opt_dnstap=no
+else case e in #(
+ e) opt_dnstap=no ;;
+esac
fi
@@ -25378,8 +26256,9 @@ fi
if test ${with_dnstap_socket_path+y}
then :
withval=$with_dnstap_socket_path; opt_dnstap_socket_path=$withval
-else $as_nop
- opt_dnstap_socket_path="$UNBOUND_RUN_DIR/dnstap.sock"
+else case e in #(
+ e) opt_dnstap_socket_path="$UNBOUND_RUN_DIR/dnstap.sock" ;;
+esac
fi
@@ -25391,8 +26270,8 @@ printf %s "checking for $ac_word... " >&6; }
if test ${ac_cv_path_PROTOC+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- case $PROTOC in
+else case e in #(
+ e) case $PROTOC in
[\\/]* | ?:[\\/]*)
ac_cv_path_PROTOC="$PROTOC" # Let the user override the test with a path.
;;
@@ -25417,6 +26296,7 @@ done
IFS=$as_save_IFS
;;
+esac ;;
esac
fi
PROTOC=$ac_cv_path_PROTOC
@@ -25439,8 +26319,8 @@ printf %s "checking for $ac_word... " >&6; }
if test ${ac_cv_path_PROTOC_C+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- case $PROTOC_C in
+else case e in #(
+ e) case $PROTOC_C in
[\\/]* | ?:[\\/]*)
ac_cv_path_PROTOC_C="$PROTOC_C" # Let the user override the test with a path.
;;
@@ -25465,6 +26345,7 @@ done
IFS=$as_save_IFS
;;
+esac ;;
esac
fi
PROTOC_C=$ac_cv_path_PROTOC_C
@@ -25492,8 +26373,8 @@ printf %s "checking for $ac_word... " >&6; }
if test ${ac_cv_path_PROTOC_GEN_C+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- case $PROTOC_GEN_C in
+else case e in #(
+ e) case $PROTOC_GEN_C in
[\\/]* | ?:[\\/]*)
ac_cv_path_PROTOC_GEN_C="$PROTOC_GEN_C" # Let the user override the test with a path.
;;
@@ -25518,6 +26399,7 @@ done
IFS=$as_save_IFS
;;
+esac ;;
esac
fi
PROTOC_GEN_C=$ac_cv_path_PROTOC_GEN_C
@@ -25567,8 +26449,8 @@ then :
fi
LDFLAGS="$LDFLAGS -L$withval/lib"
-else $as_nop
-
+else case e in #(
+ e)
if test -n "$PKG_CONFIG"; then
pkg_failed=no
@@ -25684,7 +26566,8 @@ fi
fi
fi
-
+ ;;
+esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing protobuf_c_message_pack" >&5
@@ -25692,15 +26575,21 @@ printf %s "checking for library containing protobuf_c_message_pack... " >&6; }
if test ${ac_cv_search_protobuf_c_message_pack+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- ac_func_search_save_LIBS=$LIBS
+else case e in #(
+ e) ac_func_search_save_LIBS=$LIBS
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-char protobuf_c_message_pack ();
+ builtin and then its argument prototype would still apply.
+ The 'extern "C"' is for builds by C++ compilers;
+ although this is not generally supported in C code supporting it here
+ has little cost and some practical benefit (sr 110532). */
+#ifdef __cplusplus
+extern "C"
+#endif
+char protobuf_c_message_pack (void);
int
main (void)
{
@@ -25731,11 +26620,13 @@ done
if test ${ac_cv_search_protobuf_c_message_pack+y}
then :
-else $as_nop
- ac_cv_search_protobuf_c_message_pack=no
+else case e in #(
+ e) ac_cv_search_protobuf_c_message_pack=no ;;
+esac
fi
rm conftest.$ac_ext
-LIBS=$ac_func_search_save_LIBS
+LIBS=$ac_func_search_save_LIBS ;;
+esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_protobuf_c_message_pack" >&5
printf "%s\n" "$ac_cv_search_protobuf_c_message_pack" >&6; }
@@ -25744,8 +26635,9 @@ if test "$ac_res" != no
then :
test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
-else $as_nop
- as_fn_error $? "The protobuf-c library was not found. Please install the development libraries for protobuf-c!" "$LINENO" 5
+else case e in #(
+ e) as_fn_error $? "The protobuf-c library was not found. Please install the development libraries for protobuf-c!" "$LINENO" 5 ;;
+esac
fi
@@ -25785,8 +26677,9 @@ printf "%s\n" "#define DNSTAP_SOCKET_PATH \"$hdr_dnstap_socket_path\"" >>confdef
if test ${enable_dnscrypt+y}
then :
enableval=$enable_dnscrypt; opt_dnscrypt=$enableval
-else $as_nop
- opt_dnscrypt=no
+else case e in #(
+ e) opt_dnscrypt=no ;;
+esac
fi
@@ -25806,15 +26699,21 @@ printf %s "checking for library containing sodium_init... " >&6; }
if test ${ac_cv_search_sodium_init+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- ac_func_search_save_LIBS=$LIBS
+else case e in #(
+ e) ac_func_search_save_LIBS=$LIBS
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-char sodium_init ();
+ builtin and then its argument prototype would still apply.
+ The 'extern "C"' is for builds by C++ compilers;
+ although this is not generally supported in C code supporting it here
+ has little cost and some practical benefit (sr 110532). */
+#ifdef __cplusplus
+extern "C"
+#endif
+char sodium_init (void);
int
main (void)
{
@@ -25845,11 +26744,13 @@ done
if test ${ac_cv_search_sodium_init+y}
then :
-else $as_nop
- ac_cv_search_sodium_init=no
+else case e in #(
+ e) ac_cv_search_sodium_init=no ;;
+esac
fi
rm conftest.$ac_ext
-LIBS=$ac_func_search_save_LIBS
+LIBS=$ac_func_search_save_LIBS ;;
+esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_sodium_init" >&5
printf "%s\n" "$ac_cv_search_sodium_init" >&6; }
@@ -25858,8 +26759,9 @@ if test "$ac_res" != no
then :
test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
-else $as_nop
- as_fn_error $? "The sodium library was not found. Please install sodium!" "$LINENO" 5
+else case e in #(
+ e) as_fn_error $? "The sodium library was not found. Please install sodium!" "$LINENO" 5 ;;
+esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing crypto_box_curve25519xchacha20poly1305_beforenm" >&5
@@ -25867,15 +26769,21 @@ printf %s "checking for library containing crypto_box_curve25519xchacha20poly130
if test ${ac_cv_search_crypto_box_curve25519xchacha20poly1305_beforenm+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- ac_func_search_save_LIBS=$LIBS
+else case e in #(
+ e) ac_func_search_save_LIBS=$LIBS
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-char crypto_box_curve25519xchacha20poly1305_beforenm ();
+ builtin and then its argument prototype would still apply.
+ The 'extern "C"' is for builds by C++ compilers;
+ although this is not generally supported in C code supporting it here
+ has little cost and some practical benefit (sr 110532). */
+#ifdef __cplusplus
+extern "C"
+#endif
+char crypto_box_curve25519xchacha20poly1305_beforenm (void);
int
main (void)
{
@@ -25906,11 +26814,13 @@ done
if test ${ac_cv_search_crypto_box_curve25519xchacha20poly1305_beforenm+y}
then :
-else $as_nop
- ac_cv_search_crypto_box_curve25519xchacha20poly1305_beforenm=no
+else case e in #(
+ e) ac_cv_search_crypto_box_curve25519xchacha20poly1305_beforenm=no ;;
+esac
fi
rm conftest.$ac_ext
-LIBS=$ac_func_search_save_LIBS
+LIBS=$ac_func_search_save_LIBS ;;
+esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_crypto_box_curve25519xchacha20poly1305_beforenm" >&5
printf "%s\n" "$ac_cv_search_crypto_box_curve25519xchacha20poly1305_beforenm" >&6; }
@@ -25925,11 +26835,12 @@ then :
printf "%s\n" "#define USE_DNSCRYPT_XCHACHA20 1" >>confdefs.h
-else $as_nop
-
+else case e in #(
+ e)
ENABLE_DNSCRYPT_XCHACHA20=0
-
+ ;;
+esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing sodium_set_misuse_handler" >&5
@@ -25937,15 +26848,21 @@ printf %s "checking for library containing sodium_set_misuse_handler... " >&6; }
if test ${ac_cv_search_sodium_set_misuse_handler+y}
then :
printf %s "(cached) " >&6
-else $as_nop
- ac_func_search_save_LIBS=$LIBS
+else case e in #(
+ e) ac_func_search_save_LIBS=$LIBS
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-char sodium_set_misuse_handler ();
+ builtin and then its argument prototype would still apply.
+ The 'extern "C"' is for builds by C++ compilers;
+ although this is not generally supported in C code supporting it here
+ has little cost and some practical benefit (sr 110532). */
+#ifdef __cplusplus
+extern "C"
+#endif
+char sodium_set_misuse_handler (void);
int
main (void)
{
@@ -25976,11 +26893,13 @@ done
if test ${ac_cv_search_sodium_set_misuse_handler+y}
then :
-else $as_nop
- ac_cv_search_sodium_set_misuse_handler=no
+else case e in #(
+ e) ac_cv_search_sodium_set_misuse_handler=no ;;
+esac
fi
rm conftest.$ac_ext
-LIBS=$ac_func_search_save_LIBS
+LIBS=$ac_func_search_save_LIBS ;;
+esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_sodium_set_misuse_handler" >&5
printf "%s\n" "$ac_cv_search_sodium_set_misuse_handler" >&6; }
@@ -26093,16 +27012,17 @@ 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
-
+else case e in #(
+ e)
# mnl
# Check whether --with-libmnl was given.
if test ${with_libmnl+y}
then :
withval=$with_libmnl;
-else $as_nop
- withval="yes"
+else case e in #(
+ e) withval="yes" ;;
+esac
fi
found_libmnl="no"
@@ -26133,7 +27053,8 @@ printf "%s\n" "found in $dir" >&6; }
if test x_$found_libmnl != x_yes; then
as_fn_error $? "Could not find libmnl, libmnl.h" "$LINENO" 5
fi
-
+ ;;
+esac
fi
done
@@ -26331,7 +27252,7 @@ printf "%s\n" "#define MAXSYSLOGMSGLEN 10240" >>confdefs.h
-version=1.25.2
+version=1.26.0
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for build time" >&5
printf %s "checking for build time... " >&6; }
@@ -26339,15 +27260,17 @@ ax_date_fmt="%b %e, %Y"
if test x"$SOURCE_DATE_EPOCH" = x
then :
date=`date "+$ax_date_fmt"`
-else $as_nop
- ax_build_date=`date -u -d "@$SOURCE_DATE_EPOCH" "+$ax_date_fmt" 2>/dev/null \
+else case e in #(
+ e) ax_build_date=`date -u -d "@$SOURCE_DATE_EPOCH" "+$ax_date_fmt" 2>/dev/null \
|| date -u -r "$SOURCE_DATE_EPOCH" "+$ax_date_fmt" 2>/dev/null`
if test x"$ax_build_date" = x
then :
as_fn_error $? "malformed SOURCE_DATE_EPOCH" "$LINENO" 5
-else $as_nop
- date=$ax_build_date
-fi
+else case e in #(
+ e) date=$ax_build_date ;;
+esac
+fi ;;
+esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $date" >&5
printf "%s\n" "$date" >&6; }
@@ -26368,8 +27291,8 @@ cat >confcache <<\_ACEOF
# config.status only pays attention to the cache file if you give it
# the --recheck option to rerun configure.
#
-# `ac_cv_env_foo' variables (set or unset) will be overridden when
-# loading this file, other *unset* `ac_cv_foo' will be assigned the
+# 'ac_cv_env_foo' variables (set or unset) will be overridden when
+# loading this file, other *unset* 'ac_cv_foo' will be assigned the
# following values.
_ACEOF
@@ -26399,14 +27322,14 @@ printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;}
(set) 2>&1 |
case $as_nl`(ac_space=' '; set) 2>&1` in #(
*${as_nl}ac_space=\ *)
- # `set' does not quote correctly, so add quotes: double-quote
+ # 'set' does not quote correctly, so add quotes: double-quote
# substitution turns \\\\ into \\, and sed turns \\ into \.
sed -n \
"s/'/'\\\\''/g;
s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
;; #(
*)
- # `set' quotes correctly as required by POSIX, so do not add quotes.
+ # 'set' quotes correctly as required by POSIX, so do not add quotes.
sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
;;
esac |
@@ -26467,6 +27390,12 @@ LIBOBJS=$ac_libobjs
LTLIBOBJS=$ac_ltlibobjs
+# Check whether --enable-year2038 was given.
+if test ${enable_year2038+y}
+then :
+ enableval=$enable_year2038;
+fi
+
if test -z "${USE_SYSTEMD_TRUE}" && test -z "${USE_SYSTEMD_FALSE}"; then
as_fn_error $? "conditional \"USE_SYSTEMD\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -26500,7 +27429,6 @@ cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
# Be more Bourne compatible
DUALCASE=1; export DUALCASE # for MKS sh
-as_nop=:
if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1
then :
emulate sh
@@ -26509,12 +27437,13 @@ then :
# is contrary to our usage. Disable this feature.
alias -g '${1+"$@"}'='"$@"'
setopt NO_GLOB_SUBST
-else $as_nop
- case `(set -o) 2>/dev/null` in #(
+else case e in #(
+ e) case `(set -o) 2>/dev/null` in #(
*posix*) :
set -o posix ;; #(
*) :
;;
+esac ;;
esac
fi
@@ -26586,7 +27515,7 @@ IFS=$as_save_IFS
;;
esac
-# We did not find ourselves, most probably we were run as `sh COMMAND'
+# We did not find ourselves, most probably we were run as 'sh COMMAND'
# in which case we are not to be found in the path.
if test "x$as_myself" = x; then
as_myself=$0
@@ -26615,7 +27544,6 @@ as_fn_error ()
} # as_fn_error
-
# as_fn_set_status STATUS
# -----------------------
# Set $? to STATUS, without forking.
@@ -26655,11 +27583,12 @@ then :
{
eval $1+=\$2
}'
-else $as_nop
- as_fn_append ()
+else case e in #(
+ e) as_fn_append ()
{
eval $1=\$$1\$2
- }
+ } ;;
+esac
fi # as_fn_append
# as_fn_arith ARG...
@@ -26673,11 +27602,12 @@ then :
{
as_val=$(( $* ))
}'
-else $as_nop
- as_fn_arith ()
+else case e in #(
+ e) as_fn_arith ()
{
as_val=`expr "$@" || test $? -eq 1`
- }
+ } ;;
+esac
fi # as_fn_arith
@@ -26760,9 +27690,9 @@ if (echo >conf$$.file) 2>/dev/null; then
if ln -s conf$$.file conf$$ 2>/dev/null; then
as_ln_s='ln -s'
# ... but there are two gotchas:
- # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
- # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
- # In both cases, we have to default to `cp -pR'.
+ # 1) On MSYS, both 'ln -s file dir' and 'ln file dir' fail.
+ # 2) DJGPP < 2.04 has no symlinks; 'ln -s' creates a wrapper executable.
+ # In both cases, we have to default to 'cp -pR'.
ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
as_ln_s='cp -pR'
elif ln conf$$.file conf$$ 2>/dev/null; then
@@ -26843,10 +27773,12 @@ as_test_x='test -x'
as_executable_p=as_fn_executable_p
# Sed expression to map a string onto a valid CPP name.
-as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+as_sed_cpp="y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g"
+as_tr_cpp="eval sed '$as_sed_cpp'" # deprecated
# Sed expression to map a string onto a valid variable name.
-as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+as_sed_sh="y%*+%pp%;s%[^_$as_cr_alnum]%_%g"
+as_tr_sh="eval sed '$as_sed_sh'" # deprecated
exec 6>&1
@@ -26861,8 +27793,8 @@ 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.25.2, which was
-generated by GNU Autoconf 2.71. Invocation command line was
+This file was extended by unbound $as_me 1.26.0, which was
+generated by GNU Autoconf 2.72. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
CONFIG_HEADERS = $CONFIG_HEADERS
@@ -26894,7 +27826,7 @@ _ACEOF
cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
ac_cs_usage="\
-\`$as_me' instantiates files and other configuration actions
+'$as_me' instantiates files and other configuration actions
from templates according to the current configuration. Unless the files
and actions are specified as TAGs, all are instantiated by default.
@@ -26929,11 +27861,11 @@ 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.25.2
-configured by $0, generated by GNU Autoconf 2.71,
+unbound config.status 1.26.0
+configured by $0, generated by GNU Autoconf 2.72,
with options \\"\$ac_cs_config\\"
-Copyright (C) 2021 Free Software Foundation, Inc.
+Copyright (C) 2023 Free Software Foundation, Inc.
This config.status script is free software; the Free Software Foundation
gives unlimited permission to copy, distribute and modify it."
@@ -26993,8 +27925,8 @@ do
ac_need_defaults=false;;
--he | --h)
# Conflict between --help and --header
- as_fn_error $? "ambiguous option: \`$1'
-Try \`$0 --help' for more information.";;
+ as_fn_error $? "ambiguous option: '$1'
+Try '$0 --help' for more information.";;
--help | --hel | -h )
printf "%s\n" "$ac_cs_usage"; exit ;;
-q | -quiet | --quiet | --quie | --qui | --qu | --q \
@@ -27002,8 +27934,8 @@ Try \`$0 --help' for more information.";;
ac_cs_silent=: ;;
# This is an error.
- -*) as_fn_error $? "unrecognized option: \`$1'
-Try \`$0 --help' for more information." ;;
+ -*) as_fn_error $? "unrecognized option: '$1'
+Try '$0 --help' for more information." ;;
*) as_fn_append ac_config_targets " $1"
ac_need_defaults=false ;;
@@ -27360,7 +28292,7 @@ do
"contrib/unbound_portable.service") CONFIG_FILES="$CONFIG_FILES contrib/unbound_portable.service" ;;
"config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
- *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
+ *) as_fn_error $? "invalid argument: '$ac_config_target'" "$LINENO" 5;;
esac
done
@@ -27380,7 +28312,7 @@ fi
# creating and moving files from /tmp can sometimes cause problems.
# Hook for its removal unless debugging.
# Note that there is a small window in which the directory will not be cleaned:
-# after its creation but before its name has been assigned to `$tmp'.
+# after its creation but before its name has been assigned to '$tmp'.
$debug ||
{
tmp= ac_tmp=
@@ -27404,7 +28336,7 @@ ac_tmp=$tmp
# Set up the scripts for CONFIG_FILES section.
# No need to generate them if there are no CONFIG_FILES.
-# This happens for instance with `./config.status config.h'.
+# This happens for instance with './config.status config.h'.
if test -n "$CONFIG_FILES"; then
@@ -27562,13 +28494,13 @@ fi # test -n "$CONFIG_FILES"
# Set up the scripts for CONFIG_HEADERS section.
# No need to generate them if there are no CONFIG_HEADERS.
-# This happens for instance with `./config.status Makefile'.
+# This happens for instance with './config.status Makefile'.
if test -n "$CONFIG_HEADERS"; then
cat >"$ac_tmp/defines.awk" <<\_ACAWK ||
BEGIN {
_ACEOF
-# Transform confdefs.h into an awk script `defines.awk', embedded as
+# Transform confdefs.h into an awk script 'defines.awk', embedded as
# here-document in config.status, that substitutes the proper values into
# config.h.in to produce config.h.
@@ -27678,7 +28610,7 @@ do
esac
case $ac_mode$ac_tag in
:[FHL]*:*);;
- :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;;
+ :L* | :C*:*) as_fn_error $? "invalid tag '$ac_tag'" "$LINENO" 5;;
:[FH]-) ac_tag=-:-;;
:[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
esac
@@ -27700,19 +28632,19 @@ do
-) ac_f="$ac_tmp/stdin";;
*) # Look for the file first in the build tree, then in the source tree
# (if the path is not absolute). The absolute path cannot be DOS-style,
- # because $ac_f cannot contain `:'.
+ # because $ac_f cannot contain ':'.
test -f "$ac_f" ||
case $ac_f in
[\\/$]*) false;;
*) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
esac ||
- as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
+ as_fn_error 1 "cannot find input file: '$ac_f'" "$LINENO" 5;;
esac
case $ac_f in *\'*) ac_f=`printf "%s\n" "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
as_fn_append ac_file_inputs " '$ac_f'"
done
- # Let's still pretend it is `configure' which instantiates (i.e., don't
+ # Let's still pretend it is 'configure' which instantiates (i.e., don't
# use $as_me), people would be surprised to read:
# /* config.h. Generated by config.status. */
configure_input='Generated from '`
@@ -27836,7 +28768,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
esac
_ACEOF
-# Neutralize VPATH when `$srcdir' = `.'.
+# Neutralize VPATH when '$srcdir' = '.'.
# Shell code in configure.ac might set extrasub.
# FIXME: do we really want to maintain this feature?
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
@@ -27865,9 +28797,9 @@ test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
{ ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
{ ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \
"$ac_tmp/out"`; test -z "$ac_out"; } &&
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable 'datarootdir'
which seems to be undefined. Please make sure it is defined" >&5
-printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable 'datarootdir'
which seems to be undefined. Please make sure it is defined" >&2;}
rm -f "$ac_tmp/stdin"
diff --git a/configure.ac b/configure.ac
index a4b6b17bdc65..254a6c63095a 100644
--- a/configure.ac
+++ b/configure.ac
@@ -11,15 +11,15 @@ sinclude(dnscrypt/dnscrypt.m4)
# must be numbers. ac_defun because of later processing
m4_define([VERSION_MAJOR],[1])
-m4_define([VERSION_MINOR],[25])
-m4_define([VERSION_MICRO],[2])
+m4_define([VERSION_MINOR],[26])
+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])
AC_SUBST(UNBOUND_VERSION_MINOR, [VERSION_MINOR])
AC_SUBST(UNBOUND_VERSION_MICRO, [VERSION_MICRO])
LIBUNBOUND_CURRENT=9
-LIBUNBOUND_REVISION=38
+LIBUNBOUND_REVISION=39
LIBUNBOUND_AGE=1
# 1.0.0 had 0:12:0
# 1.0.1 had 0:13:0
@@ -125,6 +125,7 @@ LIBUNBOUND_AGE=1
# 1.25.0 had 9:36:1
# 1.25.1 had 9:37:1
# 1.25.2 had 9:38:1
+# 1.26.0 had 9:39:1
# Current -- the number of the binary API that we're implementing
# Revision -- which iteration of the implementation of the binary
@@ -483,7 +484,7 @@ PKG_PROG_PKG_CONFIG
fi
# Checks for header files.
-AC_CHECK_HEADERS([stdarg.h stdbool.h netinet/in.h netinet/tcp.h sys/param.h sys/select.h sys/socket.h sys/un.h sys/uio.h sys/resource.h arpa/inet.h syslog.h netdb.h sys/wait.h pwd.h glob.h grp.h login_cap.h winsock2.h ws2tcpip.h endian.h sys/endian.h libkern/OSByteOrder.h sys/ipc.h sys/shm.h ifaddrs.h poll.h],,, [AC_INCLUDES_DEFAULT])
+AC_CHECK_HEADERS([stdarg.h stdbool.h netinet/in.h netinet/tcp.h sys/param.h sys/select.h sys/socket.h sys/un.h sys/uio.h sys/resource.h arpa/inet.h syslog.h netdb.h sys/wait.h pwd.h glob.h fnmatch.h grp.h login_cap.h winsock2.h ws2tcpip.h endian.h sys/endian.h libkern/OSByteOrder.h sys/ipc.h sys/shm.h ifaddrs.h poll.h],,, [AC_INCLUDES_DEFAULT])
# net/if.h portability for Darwin see:
# https://www.gnu.org/software/autoconf/manual/autoconf-2.69/html_node/Header-Portability.html
AC_CHECK_HEADERS([net/if.h],,, [
@@ -1080,12 +1081,19 @@ 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 OPENSSL_cleanup])
# these check_funcs need -lssl
BAKLIBS="$LIBS"
LIBS="-lssl $LIBS"
-AC_CHECK_FUNCS([OPENSSL_init_ssl SSL_CTX_set_security_level SSL_set1_host SSL_get0_peername X509_VERIFY_PARAM_set1_host SSL_CTX_set_ciphersuites SSL_CTX_set_tlsext_ticket_key_evp_cb SSL_CTX_set_alpn_select_cb SSL_get0_alpn_selected SSL_CTX_set_alpn_protos SSL_get1_peer_certificate])
+AC_CHECK_FUNCS([OPENSSL_init_ssl SSL_CTX_set_security_level SSL_set1_host SSL_get0_peername SSL_set1_dnsname X509_get_key_usage ASN1_STRING_get0_data X509_VERIFY_PARAM_set1_host SSL_CTX_set_ciphersuites SSL_CTX_set_tlsext_ticket_key_evp_cb SSL_CTX_set_alpn_select_cb SSL_get0_alpn_selected SSL_CTX_set_alpn_protos SSL_get1_peer_certificate])
+AC_CHECK_FUNCS([X509_NAME_get_text_by_NID])
+if test $ac_cv_func_X509_NAME_get_text_by_NID = yes; then
+ ACX_FUNC_DEPRECATED([X509_NAME_get_text_by_NID], [
+ (void)X509_NAME_get_text_by_NID(NULL, 0, NULL, 0);], [
+#include "openssl/x509.h"
+])
+fi
LIBS="$BAKLIBS"
AC_CHECK_DECLS([SSL_COMP_get_compression_methods,sk_SSL_COMP_pop_free,SSL_CTX_set_ecdh_auto,SSL_CTX_set_tmp_ecdh], [], [], [
@@ -1704,6 +1712,9 @@ if test x_$withval = x_yes -o x_$withval != x_no; then
AC_CHECK_LIB([ngtcp2_crypto_ossl], [ngtcp2_crypto_encrypt_cb], [
LIBS="$LIBS -lngtcp2_crypto_ossl"
AC_DEFINE(USE_NGTCP2_CRYPTO_OSSL, 1, [Define this to use ngtcp2_crypto_ossl.])
+ AC_CHECK_DECLS([ngtcp2_crypto_ossl_ctx_new], [], [AC_MSG_ERROR([No declaration of ngtcp2_crypto_ossl_ctx_new in the ngtcp2_crypto_ossl header file. Perhaps the ngtcp2_crypto_ossl devel header files need to be installed.])], [AC_INCLUDES_DEFAULT
+ #include <ngtcp2/ngtcp2_crypto_ossl.h>
+ ])
], [
AC_CHECK_LIB([ngtcp2_crypto_openssl], [ngtcp2_crypto_encrypt_cb], [ LIBS="$LIBS -lngtcp2_crypto_openssl" ], [
AC_CHECK_LIB([ngtcp2_crypto_quictls], [ngtcp2_crypto_encrypt_cb], [ LIBS="$LIBS -lngtcp2_crypto_quictls" ])
@@ -1715,6 +1726,7 @@ if test x_$withval = x_yes -o x_$withval != x_no; then
BAKLIBS="$LIBS"
LIBS="-lssl $LIBS"
AC_CHECK_FUNCS([SSL_is_quic], [], [AC_MSG_ERROR([No QUIC support detected in OpenSSL. Need OpenSSL version with QUIC support to enable DNS over QUIC with libngtcp2.])])
+ AC_CHECK_FUNCS([SSL_set_quic_tls_early_data_enabled])
LIBS="$BAKLIBS"
AC_CHECK_TYPES([struct ngtcp2_version_cid, ngtcp2_encryption_level],,,[AC_INCLUDES_DEFAULT
@@ -1928,7 +1940,7 @@ AC_LINK_IFELSE([AC_LANG_PROGRAM([
AC_MSG_RESULT(no))
AC_SEARCH_LIBS([setusercontext], [util])
-AC_CHECK_FUNCS([tzset sigprocmask fcntl getpwnam endpwent getrlimit setrlimit setsid chroot kill chown sleep usleep random srandom recvmsg sendmsg writev socketpair glob initgroups strftime localtime_r setusercontext _beginthreadex endservent endprotoent fsync shmget accept4 getifaddrs if_nametoindex poll gettid])
+AC_CHECK_FUNCS([tzset sigprocmask fcntl getpwnam endpwent getrlimit setrlimit setsid chroot kill chown sleep usleep random srandom recvmsg sendmsg writev socketpair glob fnmatch initgroups strftime localtime_r setusercontext _beginthreadex endservent endprotoent fsync shmget accept4 getifaddrs if_nametoindex poll gettid])
AC_CHECK_FUNCS([setresuid],,[AC_CHECK_FUNCS([setreuid])])
AC_CHECK_FUNCS([setresgid],,[AC_CHECK_FUNCS([setregid])])
diff --git a/daemon/cachedump.c b/daemon/cachedump.c
index f0a693bf6f8e..3fc2081d85a7 100644
--- a/daemon/cachedump.c
+++ b/daemon/cachedump.c
@@ -99,7 +99,7 @@ static void
dump_rrset_line(struct config_strlist_head* txt, struct ub_packed_rrset_key* k,
time_t now, size_t i)
{
- char s[65535];
+ char s[65535*4+2048];
if(!packed_rr_to_string(k, i, now, s, sizeof(s))) {
spool_txt_string(txt, "BADRR\n");
return;
@@ -455,7 +455,7 @@ load_rr(RES* ssl, sldns_buffer* buf, struct regional* region,
/* read the line */
if(!ssl_read_buf(ssl, buf))
return 0;
- if(strncmp((char*)sldns_buffer_begin(buf), "BADRR\n", 6) == 0) {
+ if(strcmp((char*)sldns_buffer_begin(buf), "BADRR") == 0) {
*go_on = 0;
return 1;
}
diff --git a/daemon/daemon.c b/daemon/daemon.c
index 51dd51de38d4..ac2cd31442ff 100644
--- a/daemon/daemon.c
+++ b/daemon/daemon.c
@@ -217,7 +217,8 @@ setup_listen_sslctx(void** ctx, int is_dot, int is_doh,
(cfg->tls_session_ticket_keys.first &&
cfg->tls_session_ticket_keys.first->str[0] != 0),
is_dot, is_doh, cfg->tls_protocols))) {
- fatal_exit("could not set up listen SSL_CTX");
+ log_err("could not set up listen SSL_CTX");
+ *ctx = NULL;
}
}
#endif /* HAVE_SSL */
@@ -259,7 +260,8 @@ void* daemon_setup_listen_quic_sslctx(struct daemon* daemon,
pem += strlen(chroot);
if(!(ctx = quic_sslctx_create(key, pem, NULL))) {
- fatal_exit("could not set up quic SSL_CTX");
+ log_err("could not set up quic SSL_CTX");
+ return NULL;
}
return ctx;
}
@@ -277,8 +279,10 @@ void* daemon_setup_connect_dot_sslctx(struct daemon* daemon,
bundle += strlen(chroot);
if(!(ctx = connect_sslctx_create(NULL, NULL, bundle,
- cfg->tls_win_cert)))
- fatal_exit("could not set up connect SSL_CTX");
+ cfg->tls_win_cert))) {
+ log_err("could not set up connect SSL_CTX");
+ return NULL;
+ }
return ctx;
}
#endif /* HAVE_SSL */
@@ -308,16 +312,22 @@ daemon_setup_sslctxs(struct daemon* daemon, struct config_file* cfg)
}
daemon->listen_dot_sslctx = daemon_setup_listen_dot_sslctx(
daemon, cfg);
+ if(!daemon->listen_dot_sslctx)
+ fatal_exit("Could not set up listen dot sslctx");
#ifdef HAVE_NGHTTP2_NGHTTP2_H
if(cfg_has_https(cfg)) {
daemon->listen_doh_sslctx =
daemon_setup_listen_doh_sslctx(daemon, cfg);
+ if(!daemon->listen_doh_sslctx)
+ fatal_exit("Could not set up listen doh sslctx");
}
#endif
#ifdef HAVE_NGTCP2
if(cfg_has_quic(cfg)) {
daemon->listen_quic_sslctx =
daemon_setup_listen_quic_sslctx(daemon, cfg);
+ if(!daemon->listen_quic_sslctx)
+ fatal_exit("Could not set up listen quic sslctx");
}
#endif /* HAVE_NGTCP2 */
@@ -350,6 +360,8 @@ daemon_setup_sslctxs(struct daemon* daemon, struct config_file* cfg)
}
daemon->connect_dot_sslctx = daemon_setup_connect_dot_sslctx(
daemon, cfg);
+ if(!daemon->connect_dot_sslctx)
+ fatal_exit("could not setup connect dot sslctx");
#else /* HAVE_SSL */
(void)daemon;(void)cfg;
#endif /* HAVE_SSL */
@@ -921,13 +933,14 @@ thread_start(void* arg)
{
struct worker* worker = (struct worker*)arg;
int port_num = 0;
- log_assert(worker->thr_id);
set_log_thread_id(worker, worker->daemon->cfg);
{
char name[16]; /* seems to be the safest size between
different OSes */
snprintf(name, sizeof(name), "unbound/%u", worker->thread_num);
- ub_thread_setname(worker->thr_id, name);
+ /* worker->thr_id can be written to after the thread was made
+ * by the creating thread, so this uses pthread_self. */
+ ub_thread_setname(ub_thread_self(), name);
}
ub_thread_blocksigs();
#ifdef THREADS_DISABLED
@@ -942,8 +955,9 @@ thread_start(void* arg)
port_num = 0;
#endif
if(!worker_init(worker, worker->daemon->cfg,
- worker->daemon->ports[port_num], 0))
+ worker->daemon->ports[port_num], 0)) {
fatal_exit("Could not initialize thread");
+ }
worker_work(worker);
return NULL;
@@ -1105,8 +1119,9 @@ daemon_fork(struct daemon* daemon)
#if defined(HAVE_EV_LOOP) || defined(HAVE_EV_DEFAULT_LOOP)
/* in libev the first inited base gets signals */
- if(!worker_init(daemon->workers[0], daemon->cfg, daemon->ports[0], 1))
+ if(!worker_init(daemon->workers[0], daemon->cfg, daemon->ports[0], 1)) {
fatal_exit("Could not initialize main thread");
+ }
#endif
/* Now create the threads and init the workers.
@@ -1119,8 +1134,9 @@ daemon_fork(struct daemon* daemon)
*/
#if !(defined(HAVE_EV_LOOP) || defined(HAVE_EV_DEFAULT_LOOP))
/* libevent has the last inited base get signals (or any base) */
- if(!worker_init(daemon->workers[0], daemon->cfg, daemon->ports[0], 1))
+ if(!worker_init(daemon->workers[0], daemon->cfg, daemon->ports[0], 1)) {
fatal_exit("Could not initialize main thread");
+ }
#endif
signal_handling_playback(daemon->workers[0]);
@@ -1164,7 +1180,6 @@ daemon_cleanup(struct daemon* daemon)
/* before stopping main worker, handle signals ourselves, so we
don't die on multiple reload signals for example. */
signal_handling_record();
- log_thread_set(NULL);
/* clean up caches because
* a) RRset IDs will be recycled after a reload, causing collisions
* b) validation config can change, thus rrset, msg, keycache clear
@@ -1270,7 +1285,7 @@ daemon_delete(struct daemon* daemon)
# if HAVE_DECL_SSL_COMP_GET_COMPRESSION_METHODS && HAVE_DECL_SK_SSL_COMP_POP_FREE
# ifndef S_SPLINT_S
# if OPENSSL_VERSION_NUMBER < 0x10100000
- sk_SSL_COMP_pop_free(comp_meth, (void(*)())CRYPTO_free);
+ sk_SSL_COMP_pop_free(comp_meth, (void(*)(SSL_COMP*))CRYPTO_free);
# endif
# endif
# endif
@@ -1293,6 +1308,9 @@ daemon_delete(struct daemon* daemon)
# if defined(HAVE_SSL) && defined(OPENSSL_THREADS) && !defined(THREADS_DISABLED)
ub_openssl_lock_delete();
# endif
+#ifdef HAVE_OPENSSL_CLEANUP
+ OPENSSL_cleanup();
+#endif
#ifndef HAVE_ARC4RANDOM
_ARC4_LOCK_DESTROY();
#endif
diff --git a/daemon/remote.c b/daemon/remote.c
index 61beb7c2fa69..8e6ba19b1b85 100644
--- a/daemon/remote.c
+++ b/daemon/remote.c
@@ -307,7 +307,7 @@ add_open(const char* ip, int nr, struct listen_port** list, int noproto_is_err,
#endif
}
} else {
- char* s = strchr(ip, '@');
+ const char* s = strchr(ip, '@');
char newif[128];
if(s) {
/* override port with ifspec@port */
@@ -1533,18 +1533,95 @@ do_datas_add(struct daemon_remote* rc, RES* ssl, struct worker* worker)
(void)ssl_printf(ssl, "added %d datas\n", num);
}
+static int
+perform_data_remove_rr(RES* ssl, struct local_zones* local_zones,
+ uint8_t* rr, size_t len, size_t dname_len, char *arg)
+{
+ uint16_t rr_class, rr_type;
+ int labs;
+ struct local_zone* z;
+ struct local_data* ld;
+ uint8_t *rdata;
+ size_t rdata_len, index;
+ struct packed_rrset_data* d;
+ struct local_rrset* p;
+
+ rdata = sldns_wirerr_get_rdatawl(rr, len, dname_len);
+ rdata_len = ((size_t)sldns_wirerr_get_rdatalen(rr, len, dname_len))+2;
+
+ labs = dname_count_labels(rr);
+
+ rr_class = sldns_wirerr_get_class(rr, len, dname_len);
+ rr_type = sldns_wirerr_get_type(rr, len, dname_len);
+
+ z = local_zones_lookup(local_zones, rr, dname_len,
+ labs, rr_class, rr_type, 1);
+ if (!z) {
+ ssl_printf(ssl, "error no zone for rr %s\n", arg);
+ return 0;
+ }
+
+ ld = local_zone_find_data(z, rr, dname_len, labs);
+ if (!ld) {
+ ssl_printf(ssl, "error no local data for rr %s\n", arg);
+ return 0;
+ }
+
+ p = ld->rrsets;
+ while (p && ntohs(p->rrset->rk.type) != rr_type) {
+ p = p->next;
+ }
+
+ if (!p) {
+ ssl_printf(ssl, "error no rrset for rr %s\n", arg);
+ return 0;
+ }
+
+ d = (struct packed_rrset_data*)p->rrset->entry.data;
+ if (!packed_rrset_find_rr(d, rdata, rdata_len, &index)) {
+ ssl_printf(ssl, "error rr %s not found in rrset\n", arg);
+ return 0;
+ }
+
+ if (!local_rrset_remove_rr(d, index)) {
+ ssl_printf(ssl, "error unable to delete rr %s\n", arg);
+ return 0;
+ }
+
+ return 1;
+}
+
/** Remove RR data */
static int
perform_data_remove(RES* ssl, struct local_zones* zones, char* arg)
{
- uint8_t* nm;
- int nmlabs;
- size_t nmlen;
- if(!parse_arg_name(ssl, arg, &nm, &nmlen, &nmlabs))
+ uint8_t rr[LDNS_RR_BUF_SIZE], *nm;
+ size_t len = sizeof(rr);
+ int status, nmlabs;
+ size_t nmlen, dname_len;
+
+ /* try to parse as a rr first */
+ status = sldns_str2wire_rr_buf(arg, rr, &len, &dname_len, 3600,
+ NULL, 0, NULL, 0);
+
+ /* try to parse as a domain name second */
+ if (status != 0) {
+ if (parse_arg_name(ssl, arg, &nm, &nmlen, &nmlabs)) {
+ local_zones_del_data(zones, nm,
+ nmlen, nmlabs, LDNS_RR_CLASS_IN);
+ free(nm);
+ return 1;
+ }
+ ssl_printf(ssl, "error cannot parse rr %s at %d: %s\n", arg,
+ LDNS_WIREPARSE_OFFSET(status),
+ sldns_get_errorstr_parse(status));
return 0;
- local_zones_del_data(zones, nm,
- nmlen, nmlabs, LDNS_RR_CLASS_IN);
- free(nm);
+ }
+
+ /* handle the rr case */
+ if (!perform_data_remove_rr(ssl, zones, rr, len, dname_len, arg))
+ return 0;
+
return 1;
}
@@ -2315,6 +2392,9 @@ zone_del_rrset(struct lruhash_entry* e, void* arg)
(struct packed_rrset_data*)e->data;
if(d->ttl > inf->expired) {
d->ttl = inf->expired;
+ if(d->ttl_add > inf->expired)
+ d->ttl_add = inf->expired; /* for 0TTL rrsets,
+ means that d->ttl_add <= d->ttl */
inf->num_rrsets++;
}
}
@@ -3238,6 +3318,10 @@ do_auth_zone_reload(RES* ssl, struct worker* worker, char* arg)
return;
}
if(!auth_zone_read_zonefile(z, worker->env.cfg)) {
+ /* The old tree was already cleared. Do not answer from the
+ * failed load. */
+ z->zone_expired = 1;
+ auth_zone_clear_data(z);
lock_rw_unlock(&z->lock);
if(xfr) {
lock_basic_unlock(&xfr->lock);
@@ -3249,6 +3333,7 @@ do_auth_zone_reload(RES* ssl, struct worker* worker, char* arg)
z->zone_expired = 0;
if(xfr) {
xfr->zone_expired = 0;
+ xfr->num_ixfrs = 0;
if(!xfr_find_soa(z, xfr)) {
if(z->data.count == 0) {
lock_rw_unlock(&z->lock);
@@ -4941,6 +5026,74 @@ fr_check_changed_cfg_str2list(struct config_str2list* cmp1,
}
}
+/** fast reload thread, check if config str3list has changed. */
+#define FR_CHECK_CHANGED_CFG_STR3LIST(desc, var, buff) do { \
+ fr_check_changed_cfg_str3list(cfg->var, newcfg->var, desc, buff,\
+ sizeof(buff)); \
+ } while(0);
+static void
+fr_check_changed_cfg_str3list(struct config_str3list* cmp1,
+ struct config_str3list* cmp2, const char* desc, char* str, size_t len)
+{
+ struct config_str3list* p1 = cmp1, *p2 = cmp2;
+ while(p1 && p2) {
+ if((!p1->str && p2->str) ||
+ (p1->str && !p2->str) ||
+ (p1->str && p2->str && strcmp(p1->str, p2->str) != 0)) {
+ /* The str3list is different. */
+ fr_add_incompatible_option(desc, str, len);
+ return;
+ }
+ if((!p1->str2 && p2->str2) ||
+ (p1->str2 && !p2->str2) ||
+ (p1->str2 && p2->str2 &&
+ strcmp(p1->str2, p2->str2) != 0)) {
+ /* The str3list is different. */
+ fr_add_incompatible_option(desc, str, len);
+ return;
+ }
+ if((!p1->str3 && p2->str3) ||
+ (p1->str3 && !p2->str3) ||
+ (p1->str3 && p2->str3 &&
+ strcmp(p1->str3, p2->str3) != 0)) {
+ /* The str3list is different. */
+ fr_add_incompatible_option(desc, str, len);
+ return;
+ }
+ p1 = p1->next;
+ p2 = p2->next;
+ }
+ if((!p1 && p2) || (p1 && !p2)) {
+ fr_add_incompatible_option(desc, str, len);
+ }
+}
+
+/** fast reload thread, check tag datas. */
+static int
+fr_check_tag_datas(struct fast_reload_thread* fr, struct config_file* newcfg)
+{
+ char changed_str[1024];
+ struct config_file* cfg = fr->worker->env.cfg;
+ changed_str[0]=0;
+
+ /* Check for tag_datas in acl_addr. */
+ FR_CHECK_CHANGED_CFG_STR3LIST("interface-tag-data", interface_tag_datas, changed_str);
+ FR_CHECK_CHANGED_CFG_STR3LIST("access-control-tag-data", acl_tag_datas, changed_str);
+
+ if(changed_str[0] != 0) {
+ if(fr->fr_drop_mesh)
+ return 1; /* already dropping queries */
+ fr->fr_drop_mesh = 1;
+ fr->worker->daemon->fast_reload_drop_mesh = fr->fr_drop_mesh;
+ if(!fr_output_printf(fr, "recursion referenced data has changed, with: '%s"
+ "', and the queries have to be dropped"
+ ", setting '+d'\n", changed_str))
+ return 0;
+ fr_send_notification(fr, fast_reload_notification_printout);
+ }
+ return 1;
+}
+
/** fast reload thread, check compatible config items */
static int
fr_check_compat_cfg(struct fast_reload_thread* fr, struct config_file* newcfg)
@@ -5477,6 +5630,23 @@ xfr_masterlist_equal(struct auth_master* list1, struct auth_master* list2)
return 0;
}
+/** See if configuration has changed. */
+static int
+xfr_config_equal(struct auth_xfer* xfr1, struct auth_xfer* xfr2)
+{
+ if(xfr1 == NULL && xfr2 == NULL)
+ return 1;
+ if(xfr1 == NULL && xfr2 != NULL)
+ return 0;
+ if(xfr1 != NULL && xfr2 == NULL)
+ return 0;
+ if(xfr1->max_transfer_size != xfr2->max_transfer_size)
+ return 0;
+ if(xfr1->max_transfer_time != xfr2->max_transfer_time)
+ return 0;
+ return 1;
+}
+
/** See if the list of masters has changed. */
static int
xfr_masters_equal(struct auth_xfer* xfr1, struct auth_xfer* xfr2)
@@ -5565,8 +5735,31 @@ auth_zones_check_changes(struct fast_reload_thread* fr,
&old_serial)!=0);
have_new = (auth_zone_get_serial(new_z,
&new_serial)!=0);
+ /* A change in primaries, also means it is different
+ * and the change makes it fire new transfers, from
+ * the new primaries. */
+ /* Treat as changed when the old zone has an
+ * outstanding ZONEMD DS/DNSKEY mesh callback.
+ * This will make the worker pickup change code
+ * remove the mesh callback, before the old zone is
+ * deleted. Also it makes a new zonemd lookup.
+ * The new lookup is needed, because the new zone
+ * entry needs to have a valid zonemd result,
+ * and if that is bad, needs to be invalidated.
+ * Also if there is a race event where the
+ * outstanding callback makes the zone invalid,
+ * before fast-reload completes, the change makes
+ * the new zone entry have a new zonemd lookup,
+ * to then invalidate that new zone.
+ * There is also a brief operational window at
+ * program start when a zonemd has to be looked
+ * up on-line, where the zone is operational.
+ * And this copies that for such a race event.
+ */
if(have_old != have_new || old_serial != new_serial
- || !xfr_masters_equal(old_xfr, new_xfr)) {
+ || !xfr_masters_equal(old_xfr, new_xfr)
+ || !xfr_config_equal(old_xfr, new_xfr)
+ || old_z->zonemd_callback_env != NULL) {
/* The zone has been changed. */
if(!fr_add_auth_zone_change(fr, old_z, new_z,
0, 0, 1)) {
@@ -5639,6 +5832,8 @@ ct_create_sslctxs(struct fast_reload_construct* ct,
/* Leave listen ctxs and file str at NULL */
ct->connect_dot_sslctx = daemon_setup_connect_dot_sslctx(
daemon, newcfg);
+ if(!ct->connect_dot_sslctx)
+ return 0;
return 1;
}
@@ -5648,20 +5843,28 @@ ct_create_sslctxs(struct fast_reload_construct* ct,
pem += strlen(chroot);
ct->listen_dot_sslctx = daemon_setup_listen_dot_sslctx(daemon, newcfg);
+ if(!ct->listen_dot_sslctx)
+ return 0;
#ifdef HAVE_NGHTTP2_NGHTTP2_H
if(cfg_has_https(newcfg)) {
ct->listen_doh_sslctx = daemon_setup_listen_doh_sslctx(
daemon, newcfg);
+ if(!ct->listen_doh_sslctx)
+ return 0;
}
#endif
#ifdef HAVE_NGTCP2
if(cfg_has_quic(newcfg)) {
ct->listen_quic_sslctx = daemon_setup_listen_quic_sslctx(
daemon, newcfg);
+ if(!ct->listen_quic_sslctx)
+ return 0;
}
#endif /* HAVE_NGTCP2 */
ct->connect_dot_sslctx = daemon_setup_connect_dot_sslctx(daemon,
newcfg);
+ if(!ct->connect_dot_sslctx)
+ return 0;
/* Store mtime and names */
ct->ssl_service_key = strdup(newcfg->ssl_service_key);
@@ -6631,9 +6834,12 @@ fr_reload_config(struct fast_reload_thread* fr, struct config_file* newcfg,
}
#ifdef USE_DNSTAP
if(env->cfg->dnstap) {
- if(!fr->fr_nopause)
- dt_apply_cfg(daemon->dtenv, env->cfg);
- else dt_apply_logcfg(daemon->dtenv, env->cfg);
+ if(!fr->fr_nopause) {
+ if(!dt_apply_cfg(daemon->dtenv, env->cfg))
+ log_warn("fast_reload: dnstap identity/version metadata not updated due to allocation failure");
+ } else {
+ dt_apply_logcfg(daemon->dtenv, env->cfg);
+ }
}
#endif
fr_adjust_cache(env, ct->oldcfg);
@@ -6773,6 +6979,10 @@ fr_load_config(struct fast_reload_thread* fr, struct timeval* time_read,
config_delete(newcfg);
return 0;
}
+ if(!fr_check_tag_datas(fr, newcfg)) {
+ config_delete(newcfg);
+ return 0;
+ }
if(!fr_check_compat_cfg(fr, newcfg)) {
config_delete(newcfg);
return 0;
@@ -6864,7 +7074,7 @@ static void* fast_reload_thread_main(void* arg)
#endif
log_thread_set(&fast_reload_thread->threadnum);
- ub_thread_setname(fast_reload_thread->tid, name);
+ ub_thread_setname(ub_thread_self(), name);
(void)name; /* When setname is not defined, ignore the name variable. */
verbose(VERB_ALGO, "start fast reload thread");
@@ -7587,7 +7797,8 @@ auth_zone_zonemd_stop_lookup(struct auth_zone* z, struct mesh_area* mesh)
qinfo.local_alias = NULL;
mesh_remove_callback(mesh, &qinfo, qflags,
- &auth_zonemd_dnskey_lookup_callback, z);
+ &auth_zonemd_dnskey_lookup_callback, z,
+ z->zonemd_callback_unique_info);
}
/** Pick up the auth zone locks. */
@@ -7696,6 +7907,9 @@ auth_xfr_pickup_config(struct auth_xfer* loadxfr, struct auth_xfer* xfr)
log_assert(loadxfr->namelabs == xfr->namelabs);
log_assert(loadxfr->dclass == xfr->dclass);
+ xfr->max_transfer_size = loadxfr->max_transfer_size;
+ xfr->max_transfer_time = loadxfr->max_transfer_time;
+
/* The lists can be swapped in, the other xfr struct will be deleted
* afterwards. */
probe_masters = xfr->task_probe->masters;
@@ -7720,6 +7934,16 @@ fr_worker_auth_add(struct worker* worker, struct fast_reload_auth_change* item,
/* The xfr item needs to be created. The auth zones lock
* is held to make this possible. */
xfr = auth_xfer_create(worker->env.auth_zones, item->new_z);
+ if(!xfr) {
+ log_err("out of memory in fr_worker_auth_add");
+ lock_rw_unlock(&item->new_z->lock);
+ lock_rw_unlock(&worker->env.auth_zones->lock);
+ lock_rw_unlock(&worker->daemon->fast_reload_thread->old_auth_zones->lock);
+ if(loadxfr) {
+ lock_basic_unlock(&loadxfr->lock);
+ }
+ return;
+ }
auth_xfr_pickup_config(loadxfr, xfr);
/* Serial information is copied into the xfr struct. */
if(!xfr_find_soa(item->new_z, xfr)) {
@@ -7789,6 +8013,17 @@ fr_worker_auth_cha(struct worker* worker, struct fast_reload_auth_change* item)
} else if(loadxfr && !xfr) {
/* Create the xfr. */
xfr = auth_xfer_create(worker->env.auth_zones, item->new_z);
+ if(!xfr) {
+ log_err("out of memory in fr_worker_auth_cha");
+ lock_rw_unlock(&item->new_z->lock);
+ lock_rw_unlock(&item->old_z->lock);
+ lock_rw_unlock(&worker->daemon->fast_reload_thread->old_auth_zones->lock);
+ lock_rw_unlock(&worker->env.auth_zones->lock);
+ if(loadxfr) {
+ lock_basic_unlock(&loadxfr->lock);
+ }
+ return;
+ }
auth_xfr_pickup_config(loadxfr, xfr);
item->new_z->zone_is_slave = 1;
}
diff --git a/daemon/remote.h b/daemon/remote.h
index e9c392fd819e..7e1f3c2422b0 100644
--- a/daemon/remote.h
+++ b/daemon/remote.h
@@ -49,6 +49,7 @@
#include <openssl/ssl.h>
#endif
#include "util/locks.h"
+#include "libunbound/remote.h"
struct config_file;
struct listen_list;
struct listen_port;
@@ -365,13 +366,6 @@ void fast_reload_thread_start(RES* ssl, struct worker* worker,
*/
void fast_reload_thread_stop(struct fast_reload_thread* fast_reload_thread);
-/** fast reload thread commands to remote service thread event callback */
-void fast_reload_service_cb(int fd, short bits, void* arg);
-
-/** fast reload callback for the remote control client connection */
-int fast_reload_client_callback(struct comm_point* c, void* arg, int err,
- struct comm_reply* rep);
-
/** fast reload printq delete list */
void fast_reload_printq_list_delete(struct fast_reload_printq* list);
diff --git a/daemon/stats.c b/daemon/stats.c
index 43a9f7092034..64a31ae3992b 100644
--- a/daemon/stats.c
+++ b/daemon/stats.c
@@ -422,12 +422,28 @@ void server_stats_obtain(struct worker* worker, struct worker* who,
# endif
#endif
);
+ log_err("server_stats_obtain: no response from worker %d "
+ "(stats timeout); returning zero stats for this worker",
+ who->thread_num);
+ /* A later reply from the worker, would be sizeof stats reply,
+ * and the worker_handle_control_cmd routine discards if
+ * it is not a 4byte command, when that is received here. */
+ memset(s, 0, sizeof(*s));
+ return;
+ }
+ if(!tube_read_msg(worker->cmd, &reply, &len, 0)) {
+ log_err("server_stats_obtain: failed to read stats from worker "
+ "(tube read error); returning zero stats for this worker");
+ memset(s, 0, sizeof(*s));
+ return;
+ }
+ if(len != (uint32_t)sizeof(*s)) {
+ log_err("server_stats_obtain: wrong stats length %d (expected %d); "
+ "discarding", (int)len, (int)sizeof(*s));
+ free(reply);
+ memset(s, 0, sizeof(*s));
+ return;
}
- if(!tube_read_msg(worker->cmd, &reply, &len, 0))
- fatal_exit("failed to read stats over cmd channel");
- if(len != (uint32_t)sizeof(*s))
- fatal_exit("stats on cmd channel wrong length %d %d",
- (int)len, (int)sizeof(*s));
memcpy(s, reply, (size_t)len);
free(reply);
}
@@ -439,7 +455,7 @@ void server_stats_reply(struct worker* worker, int reset)
verbose(VERB_ALGO, "write stats replymsg");
if(!tube_write_msg(worker->daemon->workers[0]->cmd,
(uint8_t*)&s, sizeof(s), 0))
- fatal_exit("could not write stat values over cmd channel");
+ log_err("could not write stat values over cmd channel");
}
void server_stats_add(struct ub_stats_info* total, struct ub_stats_info* a)
diff --git a/daemon/worker.c b/daemon/worker.c
index 765fb2299a55..5cc586442570 100644
--- a/daemon/worker.c
+++ b/daemon/worker.c
@@ -501,7 +501,9 @@ worker_handle_control_cmd(struct tube* ATTR_UNUSED(tube), uint8_t* msg,
return;
}
if(len != sizeof(uint32_t)) {
- fatal_exit("bad control msg length %d", (int)len);
+ verbose(VERB_ALGO, "bad control msg length %d", (int)len);
+ free(msg);
+ return;
}
cmd = sldns_read_uint32(msg);
free(msg);
@@ -714,7 +716,8 @@ apply_respip_action(struct worker* worker, const struct query_info* qinfo,
struct respip_client_info* cinfo, struct reply_info* rep,
struct sockaddr_storage* addr, socklen_t addrlen,
struct ub_packed_rrset_key** alias_rrset,
- struct reply_info** encode_repp, struct auth_zones* az)
+ struct reply_info** encode_repp, struct auth_zones* az,
+ int* rpz_passthru)
{
struct respip_action_info actinfo = {0, 0, 0, 0, NULL, 0, NULL};
actinfo.action = respip_none;
@@ -725,7 +728,7 @@ apply_respip_action(struct worker* worker, const struct query_info* qinfo,
return 1;
if(!respip_rewrite_reply(qinfo, cinfo, rep, encode_repp, &actinfo,
- alias_rrset, 0, worker->scratchpad, az, NULL,
+ alias_rrset, 0, worker->scratchpad, az, rpz_passthru,
worker->env.views, worker->env.respip_set))
return 0;
@@ -772,7 +775,7 @@ answer_from_cache(struct worker* worker, struct query_info* qinfo,
int* is_secure_answer, struct ub_packed_rrset_key** alias_rrset,
struct reply_info** partial_repp,
struct reply_info* rep, uint16_t id, uint16_t flags,
- struct comm_reply* repinfo, struct edns_data* edns)
+ struct comm_reply* repinfo, struct edns_data* edns, int* rpz_passthru)
{
time_t timenow = *worker->env.now;
uint16_t udpsize = edns->udp_size;
@@ -882,7 +885,7 @@ answer_from_cache(struct worker* worker, struct query_info* qinfo,
if((worker->daemon->use_response_ip || worker->daemon->use_rpz) &&
!partial_rep && !apply_respip_action(worker, qinfo, cinfo, rep,
&repinfo->client_addr, repinfo->client_addrlen, alias_rrset,
- &encode_rep, worker->env.auth_zones)) {
+ &encode_rep, worker->env.auth_zones, rpz_passthru)) {
goto bail_out;
} else if(partial_rep &&
!respip_merge_cname(partial_rep, qinfo, rep, cinfo,
@@ -1494,6 +1497,8 @@ worker_handle_request(struct comm_point* c, void* arg, int error,
struct reply_info* partial_rep = NULL;
struct query_info* lookup_qinfo = &qinfo;
struct query_info qinfo_tmp; /* placeholder for lookup_qinfo */
+ uint8_t* alias_orig_qname = NULL; /* original qname for logs, if
+ a local_alias is used to change the qname. */
struct respip_client_info* cinfo = NULL, cinfo_tmp;
struct timeval wait_time;
struct check_request_result check_result = {0,0};
@@ -1511,7 +1516,7 @@ worker_handle_request(struct comm_point* c, void* arg, int error,
if (worker->stats.max_query_time_us < wait_queue_time)
worker->stats.max_query_time_us = wait_queue_time;
if(wait_queue_time >
- (long long)(worker->env.cfg->sock_queue_timeout * 1000000)) {
+ (long long)worker->env.cfg->sock_queue_timeout * 1000000) {
/* count and drop queries that were sitting in the socket queue too long */
worker->stats.num_queries_timed_out++;
return 0;
@@ -1936,6 +1941,11 @@ worker_handle_request(struct comm_point* c, void* arg, int error,
/* If we've found a local alias, replace the qname with the alias
* target before resolving it. */
if(qinfo.local_alias) {
+ if(qinfo.local_alias->rrset &&
+ qinfo.local_alias->rrset->rk.dname)
+ /* Store the original qname, used for logs, since
+ * local_alias can be removed by region_free_all. */
+ alias_orig_qname = qinfo.local_alias->rrset->rk.dname;
if(!local_alias_shallow_copy_qname(qinfo.local_alias, &qinfo.qname,
&qinfo.qname_len)) {
regional_free_all(worker->scratchpad);
@@ -1983,7 +1993,7 @@ lookup_cache:
&alias_rrset, &partial_rep, rep,
*(uint16_t*)(void *)sldns_buffer_begin(c->buffer),
sldns_buffer_read_u16_at(c->buffer, 2), repinfo,
- &edns)) {
+ &edns, &rpz_passthru)) {
/* prefetch it if the prefetch TTL expired.
* Note that if there is more than one pass
* its qname must be that used for cache
@@ -2101,11 +2111,10 @@ send_reply_rc:
{
struct timeval tv;
memset(&tv, 0, sizeof(tv));
- if(qinfo.local_alias && qinfo.local_alias->rrset &&
- qinfo.local_alias->rrset->rk.dname) {
+ if(alias_orig_qname) {
/* log original qname, before the local alias was
* used to resolve that CNAME to something else */
- qinfo.qname = qinfo.local_alias->rrset->rk.dname;
+ qinfo.qname = alias_orig_qname;
log_reply_info(NO_VERBOSE, &qinfo,
&repinfo->client_addr, repinfo->client_addrlen,
tv, 1, c->buffer,
@@ -2374,6 +2383,8 @@ worker_init(struct worker* worker, struct config_file *cfg,
worker_stat_timer_cb, worker);
if(!worker->stat_timer) {
log_err("could not create statistics timer");
+ worker_delete(worker);
+ return 0;
}
/* we use the msg_buffer_size as a good estimate for what the
@@ -2526,6 +2537,8 @@ worker_delete(struct worker* worker)
/* don't touch worker->alloc, as it's maintained in daemon */
regional_destroy(worker->env.scratch);
regional_destroy(worker->scratchpad);
+ /* The thread id can reference this worker's id value, so clear it. */
+ log_thread_set(NULL);
free(worker);
}
@@ -2534,7 +2547,8 @@ worker_send_query(struct query_info* qinfo, uint16_t flags, int dnssec,
int want_dnssec, int nocaps, int check_ratelimit,
struct sockaddr_storage* addr, socklen_t addrlen, uint8_t* zone,
size_t zonelen, int tcp_upstream, int ssl_upstream, char* tls_auth_name,
- struct module_qstate* q, int* was_ratelimited)
+ struct module_qstate* q, int* was_ratelimited,
+ int* ratelimit_incremented)
{
struct worker* worker = q->env->worker;
struct outbound_entry* e = (struct outbound_entry*)regional_alloc(
@@ -2546,7 +2560,7 @@ worker_send_query(struct query_info* qinfo, uint16_t flags, int dnssec,
want_dnssec, nocaps, check_ratelimit, tcp_upstream,
ssl_upstream, tls_auth_name, addr, addrlen, zone, zonelen, q,
worker_handle_service_reply, e, worker->back->udp_buff, q->env,
- was_ratelimited);
+ was_ratelimited, ratelimit_incremented);
if(!e->qsent) {
return NULL;
}
@@ -2595,7 +2609,8 @@ struct outbound_entry* libworker_send_query(
struct sockaddr_storage* ATTR_UNUSED(addr), socklen_t ATTR_UNUSED(addrlen),
uint8_t* ATTR_UNUSED(zone), size_t ATTR_UNUSED(zonelen), int ATTR_UNUSED(tcp_upstream),
int ATTR_UNUSED(ssl_upstream), char* ATTR_UNUSED(tls_auth_name),
- struct module_qstate* ATTR_UNUSED(q), int* ATTR_UNUSED(was_ratelimited))
+ struct module_qstate* ATTR_UNUSED(q), int* ATTR_UNUSED(was_ratelimited),
+ int* ATTR_UNUSED(ratelimit_incremented))
{
log_assert(0);
return 0;
diff --git a/dns64/dns64.c b/dns64/dns64.c
index 9a407072ef07..8f9dba82f12d 100644
--- a/dns64/dns64.c
+++ b/dns64/dns64.c
@@ -643,6 +643,12 @@ handle_event_moddone(struct module_qstate* qstate, int id)
qstate->return_msg->rep &&
reply_find_answer_rrset(&qstate->qinfo, qstate->return_msg->rep);
int synth_qname = 0;
+ if(could_synth && !has_data && qstate->env->need_to_validate &&
+ qstate->return_msg && qstate->return_msg->rep &&
+ qstate->return_msg->rep->security == sec_status_bogus) {
+ verbose(VERB_ALGO, "dns64: bogus AAAA reply not synthesized");
+ could_synth = 0;
+ }
if(could_synth &&
(!has_data ||
@@ -654,8 +660,11 @@ handle_event_moddone(struct module_qstate* qstate, int id)
/* Store the response in cache. */
if( (!iq || !iq->started_no_cache_store) &&
+ !qstate->rpz_applied && !qstate->rpz_passthru &&
+ !qstate->is_subnet_answer &&
qstate->return_msg &&
qstate->return_msg->rep &&
+ !qstate->fwd_stub_no_cache &&
!dns_cache_store(
qstate->env, &qstate->qinfo, qstate->return_msg->rep,
0, qstate->prefetch_leeway, 0, NULL,
@@ -717,8 +726,15 @@ dns64_operate(struct module_qstate* qstate, enum module_ev event, int id,
}
if(qstate->ext_state[id] == module_finished) {
iq = (struct dns64_qstate*)qstate->minfo[id];
- if(iq && iq->state != DNS64_INTERNAL_QUERY)
- qstate->no_cache_store = iq->started_no_cache_store;
+ if(iq && iq->state != DNS64_INTERNAL_QUERY) {
+ if(qstate->fwd_stub_no_cache) {
+ /* If the forward/stub has no cache, then
+ * continue with the query with no cache. */
+ qstate->no_cache_store = qstate->fwd_stub_no_cache;
+ } else {
+ qstate->no_cache_store = iq->started_no_cache_store;
+ }
+ }
}
}
@@ -825,6 +841,7 @@ dns64_adjust_a(int id, struct module_qstate* super, struct module_qstate* qstate
size_t i, s;
struct packed_rrset_data* fd, *dd;
struct ub_packed_rrset_key* fk, *dk;
+ int allocated_return_msg = 0;
verbose(VERB_ALGO, "converting A answers to AAAA answers");
@@ -840,6 +857,7 @@ dns64_adjust_a(int id, struct module_qstate* super, struct module_qstate* qstate
return;
memset(super->return_msg, 0, sizeof(*super->return_msg));
super->return_msg->qinfo = super->qinfo;
+ allocated_return_msg = 1;
}
rep = qstate->return_msg->rep;
@@ -852,11 +870,14 @@ dns64_adjust_a(int id, struct module_qstate* super, struct module_qstate* qstate
rep->serve_expired_norec_ttl,
rep->an_numrrsets, rep->ns_numrrsets, rep->ar_numrrsets,
rep->rrset_count, rep->security, LDNS_EDE_NONE);
- if(!cp)
+ if(!cp) {
+ if(allocated_return_msg) super->return_msg = NULL;
return;
+ }
/* allocate ub_key structures special or not */
if(!reply_info_alloc_rrset_keys(cp, NULL, super->region)) {
+ if(allocated_return_msg) super->return_msg = NULL;
return;
}
@@ -871,8 +892,10 @@ dns64_adjust_a(int id, struct module_qstate* super, struct module_qstate* qstate
if(i<rep->an_numrrsets && fk->rk.type == htons(LDNS_RR_TYPE_A)) {
/* also sets dk->entry.hash */
dns64_synth_aaaa_data(fk, fd, dk, &dd, super->region, dns64_env);
- if(!dd)
+ if(!dd) {
+ if(allocated_return_msg) super->return_msg = NULL;
return;
+ }
/* Delete negative AAAA record from cache stored by
* the iterator module */
rrset_cache_remove(super->env->rrset_cache, dk->rk.dname,
@@ -889,15 +912,19 @@ dns64_adjust_a(int id, struct module_qstate* super, struct module_qstate* qstate
dk->rk.dname = (uint8_t*)regional_alloc_init(super->region,
fk->rk.dname, fk->rk.dname_len);
- if(!dk->rk.dname)
+ if(!dk->rk.dname) {
+ if(allocated_return_msg) super->return_msg = NULL;
return;
+ }
s = packed_rrset_sizeof(fd);
dd = (struct packed_rrset_data*)regional_alloc_init(
super->region, fd, s);
- if(!dd)
+ if(!dd) {
+ if(allocated_return_msg) super->return_msg = NULL;
return;
+ }
}
packed_rrset_ptr_fixup(dd);
@@ -928,8 +955,10 @@ dns64_adjust_ptr(struct module_qstate* qstate, struct module_qstate* super)
return;
super->return_msg->qinfo = super->qinfo;
if (!(super->return_msg->rep = reply_info_copy(qstate->return_msg->rep,
- NULL, super->region)))
+ NULL, super->region))) {
+ super->return_msg = NULL;
return;
+ }
/*
* Adjust the domain name of the answer RR set so that it matches the
@@ -998,6 +1027,21 @@ dns64_inform_super(struct module_qstate* qstate, int id,
/* Use return code from A query in response to client. */
if (super->return_rcode != LDNS_RCODE_NOERROR)
super->return_rcode = qstate->return_rcode;
+ /* RPZ applied to the subquery need to then change (not cache)
+ * the super query. With the super query not cached, it is
+ * going to run the state machine modules on incoming queries,
+ * that fetch the subquery (cache) response, and modify it
+ * according to the rpz policy. That makes the synthesized
+ * super query also adjusted by rpz policies. But loses cache
+ * hits. Even though the subquery likely is answered from cache,
+ * internally in its state machine process. */
+ if(qstate->rpz_applied)
+ super->rpz_applied = 1;
+ if(qstate->rpz_passthru)
+ super->rpz_passthru = 1;
+
+ /* Since the super qstate has a new response, its errinf is removed. */
+ super->errinf = NULL;
/* Generate a response suitable for the original query. */
if (qstate->qinfo.qtype == LDNS_RR_TYPE_A) {
@@ -1006,9 +1050,16 @@ dns64_inform_super(struct module_qstate* qstate, int id,
log_assert(qstate->qinfo.qtype == LDNS_RR_TYPE_PTR);
dns64_adjust_ptr(qstate, super);
}
+ /* If the sub-query has no cache store, then also the super query. */
+ if(qstate->fwd_stub_no_cache)
+ super->fwd_stub_no_cache = 1;
/* Store the generated response in cache. */
- if ( (!super_dq || !super_dq->started_no_cache_store) &&
+ if ( super->return_msg && super->return_msg->rep &&
+ (!super_dq || !super_dq->started_no_cache_store) &&
+ !qstate->fwd_stub_no_cache &&
+ !super->rpz_applied && !super->rpz_passthru &&
+ !super->is_subnet_answer &&
!dns_cache_store(super->env, &super->qinfo, super->return_msg->rep,
0, super->prefetch_leeway, 0, NULL, super->query_flags,
qstate->qstarttime, qstate->is_valrec))
diff --git a/dnscrypt/dnscrypt.c b/dnscrypt/dnscrypt.c
index 6f1a236ad7e5..fb7dff8618a5 100644
--- a/dnscrypt/dnscrypt.c
+++ b/dnscrypt/dnscrypt.c
@@ -842,7 +842,14 @@ dnsc_parse_keys(struct dnsc_env *env, struct config_file *cfg)
if(memcmp(current_keypair->crypt_publickey,
env->signed_certs[c].server_publickey,
crypto_box_PUBLICKEYBYTES) == 0) {
- dnsccert *current_cert = &env->certs[cert_id++];
+ dnsccert* current_cert;
+ if(cert_id >= env->signed_certs_count) {
+ log_err("dnscrypt: secret key %s matches a cert that "
+ "is already bound to another key (duplicate "
+ "dnscrypt-secret-key?)", head->str);
+ return -1;
+ }
+ current_cert = &env->certs[cert_id++];
found_cert = 1;
current_cert->keypair = current_keypair;
memcpy(current_cert->magic_query,
diff --git a/dnstap/dnstap.c b/dnstap/dnstap.c
index 3b27301825c2..76bdced9a785 100644
--- a/dnstap/dnstap.c
+++ b/dnstap/dnstap.c
@@ -176,26 +176,29 @@ dt_create(struct config_file* cfg)
env->dtio = dt_io_thread_create();
if(!env->dtio) {
log_err("malloc failure");
- free(env);
+ dt_delete(env);
return NULL;
}
if(!dt_io_thread_apply_cfg(env->dtio, cfg)) {
- dt_io_thread_delete(env->dtio);
- free(env);
+ dt_delete(env);
+ return NULL;
+ }
+ if(!dt_apply_cfg(env, cfg)) {
+ dt_delete(env);
return NULL;
}
- dt_apply_cfg(env, cfg);
return env;
}
-static void
+static int
dt_apply_identity(struct dt_env *env, struct config_file *cfg)
{
char buf[MAXHOSTNAMELEN+1];
if (!cfg->dnstap_send_identity) {
free(env->identity);
env->identity = NULL;
- return;
+ env->len_identity = 0;
+ return 1;
}
free(env->identity);
if (cfg->dnstap_identity == NULL || cfg->dnstap_identity[0] == 0) {
@@ -203,36 +206,49 @@ dt_apply_identity(struct dt_env *env, struct config_file *cfg)
buf[MAXHOSTNAMELEN] = 0;
env->identity = strdup(buf);
} else {
- fatal_exit("dt_apply_identity: gethostname() failed");
+ log_err("dt_apply_identity: gethostname() failed: %s",
+ strerror(errno));
+ env->identity = NULL;
+ env->len_identity = 0;
+ return 0;
}
} else {
env->identity = strdup(cfg->dnstap_identity);
}
- if (env->identity == NULL)
- fatal_exit("dt_apply_identity: strdup() failed");
+ if (env->identity == NULL) {
+ log_err("dt_apply_identity: strdup() failed");
+ env->len_identity = 0;
+ return 0;
+ }
env->len_identity = (unsigned int)strlen(env->identity);
verbose(VERB_OPS, "dnstap identity field set to \"%s\"",
env->identity);
+ return 1;
}
-static void
+static int
dt_apply_version(struct dt_env *env, struct config_file *cfg)
{
if (!cfg->dnstap_send_version) {
free(env->version);
env->version = NULL;
- return;
+ env->len_version = 0;
+ return 1;
}
free(env->version);
if (cfg->dnstap_version == NULL || cfg->dnstap_version[0] == 0)
env->version = strdup(PACKAGE_STRING);
else
env->version = strdup(cfg->dnstap_version);
- if (env->version == NULL)
- fatal_exit("dt_apply_version: strdup() failed");
+ if (env->version == NULL) {
+ log_err("dt_apply_version: strdup() failed");
+ env->len_version = 0;
+ return 0;
+ }
env->len_version = (unsigned int)strlen(env->version);
verbose(VERB_OPS, "dnstap version field set to \"%s\"",
env->version);
+ return 1;
}
void
@@ -276,15 +292,18 @@ dt_apply_logcfg(struct dt_env *env, struct config_file *cfg)
lock_basic_unlock(&env->sample_lock);
}
-void
+int
dt_apply_cfg(struct dt_env *env, struct config_file *cfg)
{
if (!cfg->dnstap)
- return;
+ return 1;
- dt_apply_identity(env, cfg);
- dt_apply_version(env, cfg);
dt_apply_logcfg(env, cfg);
+ if(!dt_apply_identity(env, cfg))
+ return 0;
+ if(!dt_apply_version(env, cfg))
+ return 0;
+ return 1;
}
int
diff --git a/dnstap/dnstap.h b/dnstap/dnstap.h
index 4390a9cf1591..c8cf265b4cc4 100644
--- a/dnstap/dnstap.h
+++ b/dnstap/dnstap.h
@@ -102,9 +102,9 @@ dt_create(struct config_file* cfg);
* Apply config settings.
* @param env: dnstap environment object.
* @param cfg: new config settings.
+ * @return false on failure.
*/
-void
-dt_apply_cfg(struct dt_env *env, struct config_file *cfg);
+int dt_apply_cfg(struct dt_env *env, struct config_file *cfg);
/**
* Apply config settings for log enable for message types.
diff --git a/dnstap/dtstream.c b/dnstap/dtstream.c
index 09bdfd662794..eee768ee222e 100644
--- a/dnstap/dtstream.c
+++ b/dnstap/dtstream.c
@@ -2144,7 +2144,7 @@ static void* dnstap_io(void* arg)
#endif
log_thread_set(&dtio->threadnum);
- ub_thread_setname(dtio->tid, name);
+ ub_thread_setname(ub_thread_self(), name);
/* setup */
verbose(VERB_ALGO, "start dnstap io thread");
diff --git a/dnstap/unbound-dnstap-socket.c b/dnstap/unbound-dnstap-socket.c
index 2bf017430fe0..2b9ab95287b7 100644
--- a/dnstap/unbound-dnstap-socket.c
+++ b/dnstap/unbound-dnstap-socket.c
@@ -1659,7 +1659,8 @@ struct outbound_entry* worker_send_query(
socklen_t ATTR_UNUSED(addrlen), uint8_t* ATTR_UNUSED(zone),
size_t ATTR_UNUSED(zonelen), int ATTR_UNUSED(tcp_upstream),
int ATTR_UNUSED(ssl_upstream), char* ATTR_UNUSED(tls_auth_name),
- struct module_qstate* ATTR_UNUSED(q), int* ATTR_UNUSED(was_ratelimited))
+ struct module_qstate* ATTR_UNUSED(q), int* ATTR_UNUSED(was_ratelimited),
+ int* ATTR_UNUSED(ratelimit_incremented))
{
log_assert(0);
return 0;
@@ -1693,7 +1694,8 @@ struct outbound_entry* libworker_send_query(
socklen_t ATTR_UNUSED(addrlen), uint8_t* ATTR_UNUSED(zone),
size_t ATTR_UNUSED(zonelen), int ATTR_UNUSED(tcp_upstream),
int ATTR_UNUSED(ssl_upstream), char* ATTR_UNUSED(tls_auth_name),
- struct module_qstate* ATTR_UNUSED(q), int* ATTR_UNUSED(was_ratelimited))
+ struct module_qstate* ATTR_UNUSED(q), int* ATTR_UNUSED(was_ratelimited),
+ int* ATTR_UNUSED(ratelimit_incremented))
{
log_assert(0);
return 0;
diff --git a/doc/Changelog b/doc/Changelog
index 02148aaa1b36..b6f771b819fb 100644
--- a/doc/Changelog
+++ b/doc/Changelog
@@ -1,3 +1,507 @@
+24 July 2026: Wouter
+ - Merge #1433 from jisakiel: Add new static zone type
+ block_aaaa to suppress AAAA queries.
+ - Unit test for block_a and block_aaaa.
+ - Fix #1477: respip + dns64: dns64 uses A records modified by
+ respip instead of original A records. Adds local-zone types
+ block_a_wdata and block_aaaa_wdata, that are like block_a
+ and block_aaaa, and uses local-data if present.
+ - set code repository version to 1.26.0.
+ - Update generated man pages.
+ - Fix to allow test fake sha1 on systems with possible sha1
+ support.
+ - Fix to use sha256 for unbound-anchor unit test.
+ - Fix unbound-anchor check for return value of
+ X509_NAME_get_text_by_NID of the emailaddress.
+ - Fix lock test protect for auth zone change.
+ - Fix to lock shared_ports structure during initialisation.
+ - Fix to lock anchor structure when file is set for it in
+ parse of the header.
+ - Merge #1480 from petrvaganoff: authzone: fix memory leak in
+ xfer_set_masters() error path.
+ - Fix unused variable warnings in shared_ports_fetch_random
+ and shared_ports_return_port when compiled without threads.
+ - Fix to guard access to shared ports interface array during
+ set up, for analyzer.
+ - Fix sign of comparison warning in shared ports setup.
+ - Fix #1481: Fix to use tls-port after referral if
+ tls-upstream is set.
+ - Merge #1479 from psumbera: Fix pthread detection on
+ Solaris 11.4.
+ - Fix to call OPENSSL_cleanup on exit when that is defined.
+
+23 July 2026: Wouter
+ - Updated credits for Xuanchao Xie in 22 july changelog.
+ - Merge #1478 from petrvaganoff: pythonmod: add check return
+ value after ftell().
+ - Fix that for NSEC3 proofs the NSEC3 zone, as the b32.name is
+ checked to be the same as the signer name. Also RRSIGs are
+ not considered valid when an NSEC3 is not b32.signerzone.
+ Thanks to Qifan Zhang, Palo Alto Networks, for the report.
+ - Fix that the aggressive negative cache does not insert NSEC
+ records with overreaching next owner name. Also the result
+ is not above the trust anchor's bailiwick. Also RRSIGS are
+ not considered valid when an NSEC next owner name is not
+ under the signer zone name. Thanks to Qifan Zhang, Palo
+ Alto Networks, for the report.
+ - Fix mesh cycle detection for configuration with respip CNAME
+ loop and tagged clients. Thanks to Qifan Zhang, Palo Alto
+ Networks, for the report.
+
+22 July 2026: Wouter
+ - Release tag for 1.25.2, with the security commits:
+ - Fix CVE-2026-14586, Assertion in libngtcp2 when under pressure
+ in high concurrency DNS-over-QUIC environments. Thanks to Kunta
+ Chu, Kaihua Wang, and Jianjun Chen from Tsinghua University,
+ for the report.
+ - Fix CVE-2026-32665, Remote DNS-over-QUIC denial of
+ service due to `quic-size` budget bypass. Thanks to N0zoM1z0
+ (https://github.com/N0zoM1z0) for the report. In addition, thanks to
+ Kunta Chu, Kaihua Wang, and Jianjun Chen from Tsinghua University,
+ for also reporting this issue. In addition, thanks to Qifan Zhang,
+ Palo Alto Networks, for also reporting this issue. In addition,
+ thanks to Xuanchao Xie, Lutong Chen, and Kaiping Xue of the
+ University of Science and Technology of China (USTC), for also
+ reporting this issue.
+ - Fix CVE-2026-40691, Packet of death for DNSCrypt over TCP. Thanks
+ to Qifan Zhang, Palo Alto Networks, for the report. In addition,
+ thanks to Trung Nguyen (@everping) of CyStack, for also reporting
+ this issue.
+ - Fix CVE-2026-41637, Degradation of resolution service from
+ improperly accounted client-terminated DNS-over-QUIC queries. Thanks
+ to Qifan Zhang, Palo Alto Networks, for the report.
+ - Fix CVE-2026-42955, Extra fix for CVE-2026-40622 to also clamp
+ the TTL of A/AAAA records disallowing a one-time 'ghost domain'
+ delegation renewal via glue records. Thanks to Qifan Zhang, Palo
+ Alto Networks, for the report.
+ - Fix CVE-2026-44621, Libunbound applications configured with
+ 'unwanted-reply-threshold' could eventually be abruptly
+ terminated. Thanks to Qifan Zhang, Palo Alto Networks, for the
+ report.
+ - Fix CVE-2026-44687, Off-by-one error in 'harden-below-nxdomain'
+ logic can shadow a stub/forward zone by a legitimate parent's
+ NXDOMAIN. Thanks to Qifan Zhang, Palo Alto Networks, for the report.
+ - Fix CVE-2026-44690, Cross-zone wildcard cache poisoning via
+ RRSIG.labels manipulation. Thanks to Qifan Zhang, Palo Alto
+ Networks, for the report.
+ - Fix CVE-2026-46582, A wildcard replay, as another piece of data,
+ triggers poisoning in the serve expired reply path. Thanks to
+ Qifan Zhang, Palo Alto Networks, for the report.
+ - Fix CVE-2026-50045, 'max-global-quota' reset by DNSSEC validation
+ restarts. Thanks to Kunjie Shang, University of Science and
+ Technology of China, for the report.
+ - Fix CVE-2026-50046, Possible heap use-after-free in an error path
+ when a DoT forwarded query is jostled out. Thanks to Qifan Zhang,
+ Palo Alto Networks, for the report.
+ - Fix CVE-2026-50243, 'response-ip'/'rpz' can rewrite BOGUS answers
+ instead of returning SERVFAIL. Thanks to Qifan Zhang, Palo Alto
+ Networks, for the report.
+ - Fix CVE-2026-50248, BOGUS configured primary hostname accepted for
+ XFR in auth/rpz zones. Thanks to Qifan Zhang, Palo Alto Networks,
+ for the report.
+ - Fix CVE-2026-50251, Attacker supplied `0.0.0.0`/`::` glue triggers
+ defensive full-cache flush. Thanks to Qifan Zhang, Palo Alto
+ Networks, for the report.
+ - Fix CVE-2026-50252, Possible cache poisoning attack by mapping
+ source port population per thread. Thanks to Inbal Schussheim and
+ Amit Klein, Hebrew University, for the report.
+ - Fix CVE-2026-52863, Memory corruption could lead to crash and
+ denial of service. Thanks to Qifan Zhang, Palo Alto Networks,
+ for the report.
+ - Fix CVE-2026-54478, DNS Cookie bypass when combined with
+ proxy-protocol use. Thanks to Qifan Zhang, Palo Alto Networks,
+ for the report.
+ - Fix CVE-2026-55708, Privacy/configuration issue when adding local
+ data in views through 'unbound-control'. Thanks to Qifan Zhang,
+ Palo Alto Networks, for the report.
+ - Fix CVE-2026-55717, 'serve-expired-client-timeout' and 'response-ip'
+ CNAME redirect could lead to a crash. Thanks to Qifan Zhang, Palo
+ Alto Networks, for the report. In addition, thanks to Xin Wang,
+ Jiapeng Li, and Jiajia Liu, Northwestern Polytechnical University,
+ for also reporting this issue.
+ - Fix CVE-2026-55973, 'dns-error-reporting: yes' leads to stack buffer
+ overflow. Thanks to Qifan Zhang, Palo Alto Networks, for the report.
+ - Fix CVE-2026-55990, Packet of death for a DNSCrypt misconfigured
+ Unbound. Thanks to Qifan Zhang, Palo Alto Networks, for the report.
+ - Fix CVE-2026-55991, Remote DNS-over-QUIC (DoQ) flow-control
+ assertion failure in libngtcp2. Thanks to Qifan Zhang, Palo Alto
+ Networks, for the report. In addition, thanks to Xuanchao Xie,
+ Lutong Chen, and Kaiping Xue of the University of Science and
+ Technology of China (USTC), for also reporting this issue.
+ - Fix CVE-2026-56416, Possible heap buffer overflow when validator
+ canonicalizes RDATA that contains domain name. Thanks to Qifan
+ Zhang, Palo Alto Networks, for the report.
+ - Fix CVE-2026-56444, Degradation of resolution service when
+ 'discard-timeout' and 'serve-expired-client-timeout' are combined in
+ unusual configuration. Thanks to Qifan Zhang, Palo Alto Networks,
+ for the report. In addition, thanks to Xin Wang, Jiapeng Li,
+ and Jiajia Liu, Northwestern Polytechnical University, for also
+ reporting this issue. In addition, thanks to Haruki Oyama (Waseda
+ University), for also reporting this issue.
+ - Set the repository to 1.25.3, it continues with the previous
+ changes.
+ - Unit test for CVE-2026-42955.
+ - Unit test for CVE-2026-44687.
+ - Unit test for CVE-2026-44690.
+ - Unit test for CVE-2026-46582.
+ - Unit test for CVE-2026-50045.
+ - Unit test for CVE-2026-50243.
+ - Unit test for CVE-2026-50248.
+ - Unit test for CVE-2026-55717.
+ - Unit test for CVE-2026-55973.
+ - Unit test for CVE-2026-56416.
+ - Fix error in log printout in fix for CVE-2026-50248, when the
+ primary name is bogus.
+ - iana portlist update.
+
+21 July 2026: Wouter
+ - Merge #1476 from petrvaganoff: ipsecmod: fix possible deref
+ on null after reply_find_answer_rrset().
+
+20 July 2026: Wouter
+ - Merge #1475 from petrvaganoff: ipsecmod: fix deref on null
+ in ipsecmod-whitelist after OOM.
+ - Fix #1474: DoQ responses are never padded - pad-responses
+ does not apply to comm_doq (RFC 9250 §5.4 MUST).
+
+9 July 2026: Wouter
+ - Merge #1383 from jdek: Fix randomness generation on
+ macOS/iOS under chroot.
+ - Fix unit test for malformed svcb for test on Windows.
+
+2 July 2026: Wouter
+ - Merge #1087: Overload `local_data_remove` to support removing
+ specific records.
+
+30 June 2026: Wouter
+ - Fix #1469: dohclient: DoH POST missing content-length → :status
+ 400 from strict resolvers (Cloudflare, Mullvad).
+ - iana portlist updated.
+
+26 June 2026: Wouter
+ - Merge #1467: daemon: fix DEREF_AFTER_NULL.EX.COND on
+ worker_init. This fixes error handling if the worker
+ stat_timer allocation has an out of memory error. That
+ makes the server not crash later, attempting to use it.
+
+24 June 2026: Wouter
+ - Merge #1465 from dag-erling: Add libunbound/remote.h. Add
+ a shared header containing prototypes for functions that
+ both ends of a remote control connection need to implement.
+
+19 June 2026: Wouter
+ - Fix for #1457: fix thread setname for thread start of
+ dnstap, and fast_reload.
+ - Fix to update github ci actions/checkout to v7.
+ - Fix warning about file_string_matches in unbound-checkconf.
+
+17 June 2026: Wouter
+ - Fix that after fast_reload the disown of the auth zone
+ transfer task cleans the chunk list. Also fix the
+ auth_transfer_limit test to use a forwarder for each type
+ of failure, so the one is not blocked by the other waiting.
+ - Fix to remove debug from auth_transfer_limit test.
+ - Fix that unbound-checkconf checks if an auth-zone download
+ can overwrite another file, by filename collision.
+ Thanks to Qifan Zhang, Palo Alto Networks, for the report.
+ - Fix that malloc failure in auth-zone insert rr does
+ not create an empty node and does not cause an infinite
+ loop. Thanks to Qifan Zhang, Palo Alto Networks, for
+ the report.
+ - Fix that unbound-control auth_zone_reload stops the
+ server answering from the zone after a failure to read.
+ Thanks to Qifan Zhang, Palo Alto Networks, for the report.
+ - Fix that malloc failure in dns64_inform_super does
+ not set up a half-built reply for cache store, that could
+ lead to a crash. Thanks to Qifan Zhang, Palo Alto Networks,
+ for the report.
+ - Fix that malloc failure for new_local_rrset for RPZ qname
+ trigger RR insert does not crash. It does not link a
+ partial RRset, and logs an error on failure, and cleans
+ up the dname allocation. Thanks to Qifan Zhang, Palo Alto
+ Networks, for the report.
+ - Fix that malloc failure in doq connection setup, does
+ not crash in doq connection delete later. Thanks to Qifan
+ Zhang, Palo Alto Networks, for the report.
+ - Fix that malloc failure for ngtcp2_conn_server_new
+ cleans up reference that older ngtcp2 versions can leave.
+ Thanks to Qifan Zhang, Palo Alto Networks, for the report.
+ - Fix that on malloc failure during accept of TCP, the
+ socket is not left to cause a read event loop. It uses
+ slow-accept to delay accepting new connections, if
+ that fails it drops the new connections. When the tcp
+ connection usage is full, it waits for 50msec, to allow
+ existing queries to be resolved. Thanks to Qifan Zhang,
+ Palo Alto Networks, for the report.
+ - Fix that malloc failure for rpz_strip_nsdname is
+ checked and handled, so that it does not crash later.
+ Thanks to Qifan Zhang, Palo Alto Networks, for the report.
+ - Fix that malloc failure during edns subnet addrtree
+ insert is checked, so it does not crash later. Thanks to
+ Qifan Zhang, Palo Alto Networks, for the report.
+ - Fix to check the return value of auth_xfer_create
+ during fast_reload auth-zone add and change processing.
+ Thanks to Qifan Zhang, Palo Alto Networks, for the report.
+ - Fix to check for malloc failure in rpz response create,
+ for nodata and nxdomain, so it does not crash later.
+ Thanks to Qifan Zhang, Palo Alto Networks, for the report.
+ - Fix that fast_reload does not terminate the server
+ on malloc failure for dnstap, or if gethostname fails.
+ Thanks to Qifan Zhang, Palo Alto Networks, for the report.
+ - Fix after malloc failure for stats, then it drains the pipe
+ so the internal messaging stays correct. Also it does
+ not exit the server if stats pipe communication fails.
+ Thanks to Qifan Zhang, Palo Alto Networks, for the report.
+ - Fix that fast_reload does not terminate the server
+ on config read failure after malloc failure. Thanks to
+ Qifan Zhang, Palo Alto Networks, for the report.
+ - Fix that fast_reload does not terminate the server if
+ random init for DNS cookies fails. The data is only random
+ generated if cookies are enabled, and the random data
+ is necessary. Thanks to Qifan Zhang, Palo Alto Networks,
+ for the report.
+
+17 June 2026: Yorgos
+ - Fix memory leak on DNAME 0TTL records.
+
+16 June 2026: Wouter
+ - Fix to disallow $INCLUDE for secondary zones. Start up
+ of server continues if a secondary zone fails to load.
+ Failed loads clear the zone data, so there is no partial
+ zone. Thanks to Qifan Zhang, Palo Alto Networks, for
+ the report.
+ - Fix that when SVCB records cannot be written out, and
+ are written in unknown format, that the zone read allows
+ such unknown format SVCB records. Thanks to Qifan Zhang,
+ Palo Alto Networks, for the report.
+ - Fix that a half-written trust anchor file does not crash
+ the server at runtime. It unlinks a wrong file from the list.
+ Thanks to Qifan Zhang, Palo Alto Networks, for the report.
+ - Fix that auth-zone, and RPZ zones, do not allow out-of-zone
+ records. These are records that are not under the zone apex.
+ The out-of-zone records are dropped from the zone contents.
+ Thanks to Qifan Zhang, Palo Alto Networks, for the report.
+ - Fix that dns64 does not ignore the `forward-no-cache` and
+ `stub-no-cache` options. Thanks to Qifan Zhang, Palo Alto
+ Networks, for the report.
+ - Fix that a signed wildcard NSEC, is checked before use,
+ so it does not allow insecure DS proofs inappropriately.
+ Thanks to Qifan Zhang, Palo Alto Networks, for the report.
+ - Fix that after malloc failure a half-built local_alias does
+ not crash the server. Thanks to Qifan Zhang, Palo Alto
+ Networks, for the report.
+ - Fix that for a zonefile only zone, if that file does not
+ exist on server start, the server continues to start with
+ a warning log message. Thanks to Qifan Zhang, Palo Alto
+ Networks, for the report.
+ - Fix that after malloc failure in RPZ load a half built
+ list does not crash later. The newly created RRset is
+ linked after creation has succeeded. Thanks to Qifan Zhang,
+ Palo Alto Networks, for the report.
+ - Fix that dnscrypt configuration does not crash, due to
+ inconsistency between secret and public keys. Also
+ duplicate files are skipped. Thanks to Qifan Zhang, Palo
+ Alto Networks, for the report.
+ - Fix locking in libunbound ub_ctx_set_event call.
+ Thanks to Qifan Zhang, Palo Alto Networks, for the report.
+ - Fix that libunbound pipe functions fail with error after
+ an event base is set. Thanks to Qifan Zhang, Palo Alto
+ Networks, for the report.
+ - Fix for neater solution to clear log thread id after
+ worker init failure. Thanks to Qifan Zhang, Palo Alto
+ Networks, for the report.
+ - Fix incorrect cleanup after an allocation failure for
+ a delegation point. Thanks to Qifan Zhang, Palo Alto
+ Networks, for the report.
+ - Fix that after malloc failure in find_tag_datas, the
+ local_alias is cleaned up. Thanks to Qifan Zhang, Palo
+ Alto Networks, for the report.
+ - Fix that after shared memory cannot be created, from
+ `shm-enable`, the server does not crash. Thanks to Qifan
+ Zhang, Palo Alto Networks, for the report.
+ - Fix incorrect cleanup after an allocation failure for
+ a delegation point in a region. Thanks to Qifan Zhang,
+ Palo Alto Networks, for the report.
+ - Fix after malloc failure the rrset_insert_rr in
+ localzone processing, during RPZ qname trigger processing,
+ the RRset retains its previous data correcly. Thanks to
+ Qifan Zhang, Palo Alto Networks, for the report.
+ - Fix for #1462: Fix that auth primary host name lookup
+ allows CNAMEs.
+
+15 June 2026: Wouter
+ - Fix to add `max-transfer-size` and `max-transfer-time` that
+ limit auth-zone and rpz transfer amount and time taken.
+ Default is disabled. This hardens against unbounded
+ transfers. Thanks to Qifan Zhang, Palo Alto Networks,
+ for the report.
+ - Fix perform a full transfer every number of incremental
+ transfers, to stop increasing memory usage, for rpz
+ zones. Thanks to Qifan Zhang, Palo Alto Networks, for
+ the report.
+ - Fix assertion failure for long HTTP header that fills
+ buffer. Thanks to Qifan Zhang, Palo Alto Networks, for
+ the report.
+ - Fix buffer overflow when configured with lower than
+ default size and http transfer. Thanks to Qifan Zhang,
+ Palo Alto Networks, for the report.
+ - Fix that misconfigured `iter-scrub-ns: 0` causes request
+ failures. Thanks to Qifan Zhang, Palo Alto Networks,
+ for the report.
+ - Fix that fast_reload when a zonemd verification lookup
+ it in progress with subnet loaded, deregisters the
+ callback. Thanks to Qifan Zhang, Palo Alto Networks,
+ for the report.
+ - Fix for fast_reload that removes an auth zone while its
+ lookups are in progress, for a primary name. Also after the
+ change, it no longer picks up the old results. Thanks to
+ Qifan Zhang, Palo Alto Networks, for the report.
+ - Fix integer overflow in infra-cache-max-rtt calculation.
+ Thanks to Qifan Zhang, Palo Alto Networks, for the report.
+ - Fix erroneous DNS error report values after bogus AAAA
+ query caused error information that was not cleared by
+ a successful A subquery. Thanks to Qifan Zhang, Palo Alto
+ Networks, for the report.
+ - Fix integer overflow for very high values of
+ `sock-queue-timeout`. Thanks to Qifan Zhang, Palo Alto
+ Networks, for the report.
+ - Fix that fast_reload does not terminate the server for
+ errors in config, for key files. Thanks to Qifan Zhang,
+ Palo Alto Networks, for the report.
+ - Fix log of an aliased qname, to not use freed region
+ memory. Thanks to Qifan Zhang, Palo Alto Networks, for
+ the report.
+ - Fix DNAME synthesis from cache that keeps use of 0TTL
+ entries in a sliding window. It did not surpass RRSIG
+ expiry. Thanks to Qifan Zhang, Palo Alto Networks, for
+ the report.
+ - Fix misconfigured ipsecmod hook causing path name
+ similarity with other file. The ipsecmod is changed for
+ exec of the hook. The ipsecmod hook, if a script, has to
+ start now with a line like `#!/bin/sh`. Thanks to Qifan
+ Zhang, Palo Alto Networks, for the report.
+ - Fix that dns64 bypasses rpz-passthru rule during
+ synthesis. This restricted more than necessary. Thanks to
+ Qifan Zhang, Palo Alto Networks, for the report.
+
+12 June 2026: Wouter
+ - Fix that for auth-zone and rpz zones the allow-notify
+ addresses and netblocks are available from start, and
+ fix the probe step skip.
+
+11 June 2026: Wouter
+ - Fix for #1306: configure detects specifically the call to
+ SSL_set_quic_tls_early_data_enabled and
+ SSL_set_quic_early_data_enabled, so the correct one is used.
+ - Fix for #1306: configure checks if the ngtcp2_crypto_ossl
+ header file is available, and prints an error otherwise.
+ - Fix #1437: Fix compile with OpenSSL 4.0.1.
+ - Fix compile for OpenSSL 1.0.2 and before in server cleanup.
+
+10 June 2026: Wouter
+ - Fix pythonmod script read for numeric overflow.
+ - Fix warnings with gcc in compat/inet_pton.c.
+
+9 June 2026: Wouter
+ - Fix unit test for ecs to check for malloc success.
+
+3 June 2026: Wouter
+ - Fix that the processing of class responses does not have
+ a heap use-after-free. That could happen if at least two
+ distinct classes are configured for resolution. Thanks
+ to Qifan Zhang, Palo Alto Networks for the report.
+ In addition, thanks to Xin Wang, Jiapeng Li, and Jiajia
+ Liu, Northwestern Polytechnical University, for also
+ reporting this.
+ - Fix negative cache to work with NSEC3 records without salt.
+ Thanks to Xin Wang, Jiapeng Li, and Jiajia Liu, Northwestern
+ Polytechnical University, for the report.
+ - Fix parse of svcbparam ech, it had incorrect length. Thanks
+ to Qifan Zhang, Palo Alto Networks for the report.
+ - Fix that quotation and escaping works the same in auth-zone
+ url content, as in the zonefile read. Thanks to Qifan Zhang,
+ Palo Alto Networks for the report.
+ - Fix ipset module to use larger domain name buffers, and
+ check buffer lengths. Thanks to Qifan Zhang, Palo Alto
+ Networks for the report.
+ - Fix PROXYv2 header read and consume, it checks the header
+ size. Thanks to Qifan Zhang, Palo Alto Networks for
+ the report.
+ - Fix negative cache NSEC3 nodata proof, to use the correct
+ message size. Thanks to Qifan Zhang, Palo Alto Networks,
+ for the report.
+ - Fix fast_reload for when a ZONEMD lookup is in progress.
+ Thanks to Qifan Zhang, Palo Alto Networks, for the report.
+ - Fix that validation canonicalization of domain names
+ in rdata checks for buffer bounds. Thanks to Qifan Zhang,
+ Palo Alto Networks, for the report.
+ - Fix that dump_cache has a larger buffer for records,
+ and it checks that an owner name does not collide with BADRR
+ on the input, and changes verbosity on the log of failure in
+ rrset to string. Thanks to Qifan Zhang, Palo Alto Networks,
+ for the report.
+ - Fix that dns64 cleans up the allocated message if the adjust
+ routines fail, and checks if there is a reply before cache
+ store, also unbound checks if A and AAAA are malformed
+ for auth-zones. Thanks to Qifan Zhang, Palo Alto Networks,
+ for the report.
+
+3 June 2026: Yorgos
+ - Fix const as reported by newest compiler warnings.
+
+29 May 2026: Wouter
+ - Fix header_seen detection for trust anchor files, so that it
+ detects the id line.
+ - iana portlist updated.
+ - Update icannbundle.pem certificates in unbound-anchor. It
+ has the public keys for 2009 to 2029 and for 2025 to 2045.
+ - Fix unit test to check for new icannbundle.pem.
+
+28 May 2026: Wouter
+ - Fix #1457: race condition causes segfault when starting
+ threads.
+
+27 May 2026: Wouter
+ - Fix for autotrust state-file line overflow, that can give
+ hold-down bypass. Thanks to Qifan Zhang, Palo Alto Networks,
+ for the report.
+ - Fix to limit the DSNS per-label walk in the iterator. Thanks
+ to Qifan Zhang, Palo Alto Networks, for the report.
+ - Fix that the ratelimit is decremented on successful
+ referrals. Thanks to Qifan Zhang, Palo Alto Networks, for
+ the report.
+ - Fix that msgencode insert_query has the correct assertion,
+ for a local_alias. Thanks to Qifan Zhang, Palo Alto Networks,
+ for the report.
+ - Fix to reset the tcp-timeout before applying a load based
+ reduction. Thanks to Qifan Zhang, Palo Alto Networks, for the
+ report.
+ - Fix to decrement the per-netblock tcp connection limits, so
+ it keeps usable. Thanks to Qifan Zhang, Palo Alto Networks,
+ for the report.
+ - Fix manual to document ratelimit, that it is for target
+ nameservers for a domain, and keeps queries limited. Thanks
+ to Qifan Zhang, Palo Alto Networks, for the report.
+ - Fix, in depth, for respip rewrite of dns64 responses. Thanks
+ to Qifan Zhang, Palo Alto Networks, for the report.
+ - Fix that dns64 with subnetcache does not write ECS scoped
+ answers to global cache. Thanks to Qifan Zhang, Palo Alto
+ Networks, for the report.
+ - Fix ipset module for name too long checks, race conditions
+ on local name buffer, and for socket close race condition.
+ Thanks to Qifan Zhang, Palo Alto Networks, for the report.
+ - Fix that validator caps number of ANY RRsets it can
+ validate, and the wait timer is shortened. Thanks to Qifan
+ Zhang, Palo Alto Networks, for the report.
+ - Fix analyzer warning in mesh_new_client.
+
+26 May 2026: Wouter
+ - Fix for mesh new client and mesh new callback to rollback the
+ added address, tcp mesh state and callback when there is a failure
+ to initialize. This fixes the mesh accounting of reply addresses.
+ Thanks to Xin Wang, Jiapeng Li, and Jiajia Liu, Northwestern
+ Polytechnical University, for the report
+
20 May 2026: Wouter
- Fix CVE-2026-33278, Possible remote code execution during DNSSEC
validation. Thanks to Qifan Zhang, Palo Alto Networks, for the report.
@@ -27,6 +531,79 @@
Networks, for the report.
- Fix CVE-2026-44608, Use after free and crash in RPZ code. Thanks
to Qifan Zhang, Palo Alto Networks, for the report.
+ - Tag for 1.25.1 release, it contains the security fixes on 1.25.0.
+ the code repository continues with in addition the previous fixes,
+ for 1.25.2.
+ - Unit test for CVE-2026-33278.
+ - Unit test for CVE-2026-42944.
+ - Unit test for CVE-2026-42959.
+ - Unit test for CVE-2026-40622.
+ - Unit test for CVE-2026-42960.
+ - Fix in depth for serve-expired responses from cachedb, that it
+ does not store bogus. Thanks to Qifan Zhang, Palo Alto Networks,
+ for the report.
+ - Fix lame server detection, for selfpointed glue records.
+ Thanks to Shuhan Zhang, Dan Li, and Baojun Liu from Tsinghua
+ University for the report.
+ - Fix cleaning up DoH session. The same query can be on multiple
+ streams in a session. Thanks to Qifan Zhang, Palo Alto Networks,
+ for the report.
+ - Fix for signed same-owner CNAME and ordinary RRset responses.
+ Thanks to Xin Wang and Jiajia Liu, Northwestern Polytechnical
+ University, for the report.
+
+18 May 2026: Wouter
+ - Fix for mixed class referrals, the resolver uses the query
+ class. Thanks to Xin Wang and Jiajia Liu, Northwestern
+ Polytechnical University, for the report.
+
+15 May 2026: Wouter
+ - Fix man page entry for so-sndbuf, it is for responses sent out.
+ - Fix val_find_DS for robustness, to check the result of
+ packet_rrset_copy_region before using it. Thanks to Xin Wang
+ and Jiajia Liu, Northwestern Polytechnical University, for
+ the report.
+ - Fix that for dns64 answers, the AAAA query is checked to be
+ DNSSEC validated, when DNSSEC is enabled. This improves
+ the RFC6147 conformance of Unbound. Thanks to Xin Wang
+ and Jiajia Liu, Northwestern Polytechnical University, for
+ the report. In addition, thanks to Qifan Zhang, Palo Alto
+ Networks, for reporting it.
+ - Fix for allocation-failure hardening of rrset cache wildcard
+ storage and canonical NSEC owner replacement. Thanks to Xin
+ Wang and Jiajia Liu, Northwestern Polytechnical University,
+ for the report.
+ - Fix DNSSEC validation with libnettle for noncanonical RSA
+ DNSKEYs with leading zeroes for n. Thanks to Xin Wang and
+ Jiajia Liu, Northwestern Polytechnical University, for
+ the report.
+ - Fix DNSKEY size calculation for noncanonical RSA DNSKEYs
+ with leading zeroes for n. Thanks to Xin Wang and Jiajia Liu,
+ Northwestern Polytechnical University, for the report.
+
+11 May 2026: Yorgos
+ - Fix comment and verbose logging for EDNS fallback buffer size.
+
+8 May 2026: Wouter
+ - Fix to relax assertions after the TTL 0 handling change.
+ This relaxes an assertion in cachedb (it fails instead),
+ and for packet_rrset_copy_region.
+
+7 May 2026: Wouter
+ - Fix for Heap Out-of-Bounds Write via size_t-to-int Truncation
+ in setup_if() - outside_network_create(). This fixes that
+ large values for num_ports do not overflow and create
+ invalid references after integer truncation. Thanks
+ to Karnakar Reddy (@karnakarreddi) for the report.
+ - Fix to clean up log ids after a failure to start a worker thread.
+
+1 May 2026: Wouter
+ - iana portlist updated.
+
+29 April 2026: Wouter
+ - tag for 1.25.0. The code repository continues with 1.25.1 in
+ development.
+ - Fix windows 64bit build for libssp dependency.
23 April 2026: Wouter
- Merge #1441: Fix buffer overrun in
diff --git a/doc/README b/doc/README
index fa60d3b0b570..2f5c5a574824 100644
--- a/doc/README
+++ b/doc/README
@@ -1,4 +1,4 @@
-README for Unbound 1.25.2
+README for Unbound 1.26.0
Copyright 2007 NLnet Labs
http://unbound.net
diff --git a/doc/example.conf.in b/doc/example.conf.in
index e03d41153b36..de37e557e53a 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.25.2.
+# See unbound.conf(5) man page, version 1.26.0.
#
# this is a comment.
@@ -899,6 +899,10 @@ server:
# that name
# o block_a resolves all records normally but returns
# NODATA for A queries and ignores local data for that name
+ # o block_aaaa similarly to block_a, resolves all records normally but
+ # returns NODATA for AAAA queries and ignores local data for that name
+ # o block_a_wdata like block_a but uses local data if present.
+ # o block_aaaa_wdata like block_aaaa but uses local data if present.
# o always_null returns 0.0.0.0 or ::0 for any name in the zone.
# o noview breaks out of that view towards global local-zones.
#
@@ -1287,6 +1291,9 @@ remote-control:
# zonemd-check: no
# zonemd-reject-absence: no
# zonefile: "example.org.zone"
+# max-transfer-size: 0
+# max-transfer-time: 0
+
# Views
# Create named views. Name must be unique.
@@ -1453,3 +1460,5 @@ remote-control:
# rpz-signal-nxdomain-ra: no
# for-downstream: no
# tags: "example"
+# max-transfer-size: 0
+# max-transfer-time: 0
diff --git a/doc/libunbound.3.in b/doc/libunbound.3.in
index b9158ef902a7..7fc31b3b0fbe 100644
--- a/doc/libunbound.3.in
+++ b/doc/libunbound.3.in
@@ -27,9 +27,9 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
..
-.TH "LIBUNBOUND" "3" "Jul 22, 2026" "1.25.2" "Unbound"
+.TH "LIBUNBOUND" "3" "Aug 4, 2026" "1.26.0" "Unbound"
.SH NAME
-libunbound \- Unbound DNS validating resolver 1.25.2 functions.
+libunbound \- Unbound DNS validating resolver 1.26.0 functions.
.SH SYNOPSIS
.sp
\fB#include <unbound.h>\fP
diff --git a/doc/unbound-anchor.8.in b/doc/unbound-anchor.8.in
index c9810f8f2c03..c4ca01dc1152 100644
--- a/doc/unbound-anchor.8.in
+++ b/doc/unbound-anchor.8.in
@@ -27,9 +27,9 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
..
-.TH "UNBOUND-ANCHOR" "8" "Jul 22, 2026" "1.25.2" "Unbound"
+.TH "UNBOUND-ANCHOR" "8" "Aug 4, 2026" "1.26.0" "Unbound"
.SH NAME
-unbound-anchor \- Unbound 1.25.2 anchor utility.
+unbound-anchor \- Unbound 1.26.0 anchor utility.
.SH SYNOPSIS
.sp
\fBunbound\-anchor\fP [\fBopts\fP]
diff --git a/doc/unbound-checkconf.8.in b/doc/unbound-checkconf.8.in
index a3094e486a7b..dfb26eb7d518 100644
--- a/doc/unbound-checkconf.8.in
+++ b/doc/unbound-checkconf.8.in
@@ -27,9 +27,9 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
..
-.TH "UNBOUND-CHECKCONF" "8" "Jul 22, 2026" "1.25.2" "Unbound"
+.TH "UNBOUND-CHECKCONF" "8" "Aug 4, 2026" "1.26.0" "Unbound"
.SH NAME
-unbound-checkconf \- Check Unbound 1.25.2 configuration file for errors.
+unbound-checkconf \- Check Unbound 1.26.0 configuration file for errors.
.SH SYNOPSIS
.sp
\fBunbound\-checkconf\fP [\fB\-hf\fP] [\fB\-o option\fP] [cfgfile]
diff --git a/doc/unbound-control.8.in b/doc/unbound-control.8.in
index c1ad6b8d68c6..7f29ec7335c3 100644
--- a/doc/unbound-control.8.in
+++ b/doc/unbound-control.8.in
@@ -27,9 +27,9 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
..
-.TH "UNBOUND-CONTROL" "8" "Jul 22, 2026" "1.25.2" "Unbound"
+.TH "UNBOUND-CONTROL" "8" "Aug 4, 2026" "1.26.0" "Unbound"
.SH NAME
-unbound-control \- Unbound 1.25.2 remote server control utility.
+unbound-control \- Unbound 1.26.0 remote server control utility.
.SH SYNOPSIS
.sp
\fBunbound\-control\fP [\fB\-hq\fP] [\fB\-c cfgfile\fP] [\fB\-s server\fP] command
@@ -354,6 +354,8 @@ If the name already has no items, nothing happens.
Often results in NXDOMAIN for the name (in a static zone), but if the name
has become an empty nonterminal (there is still data in domain names below
the removed name), NOERROR nodata answers are the result for that name.
+With a specific RR instead of a domain name, that specific record is
+removed from the local data, and not all the RR data.
.UNINDENT
.INDENT 0.0
.TP
diff --git a/doc/unbound-control.rst b/doc/unbound-control.rst
index d95d6dd0b975..9253e53ccc2d 100644
--- a/doc/unbound-control.rst
+++ b/doc/unbound-control.rst
@@ -347,6 +347,8 @@ There are several commands that the server understands.
Often results in NXDOMAIN for the name (in a static zone), but if the name
has become an empty nonterminal (there is still data in domain names below
the removed name), NOERROR nodata answers are the result for that name.
+ With a specific RR instead of a domain name, that specific record is
+ removed from the local data, and not all the RR data.
@@UAHL@unbound-control.commands@local_zones@@
diff --git a/doc/unbound-host.1.in b/doc/unbound-host.1.in
index 1582fd54813b..a7955c93dd04 100644
--- a/doc/unbound-host.1.in
+++ b/doc/unbound-host.1.in
@@ -27,9 +27,9 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
..
-.TH "UNBOUND-HOST" "1" "Jul 22, 2026" "1.25.2" "Unbound"
+.TH "UNBOUND-HOST" "1" "Aug 4, 2026" "1.26.0" "Unbound"
.SH NAME
-unbound-host \- Unbound 1.25.2 DNS lookup utility.
+unbound-host \- Unbound 1.26.0 DNS lookup utility.
.SH SYNOPSIS
.sp
\fBunbound\-host\fP [\fB\-C configfile\fP] [\fB\-vdhr46D\fP] [\fB\-c class\fP]
diff --git a/doc/unbound.8.in b/doc/unbound.8.in
index cf15d5b2b4a9..91a4f96a697a 100644
--- a/doc/unbound.8.in
+++ b/doc/unbound.8.in
@@ -27,9 +27,9 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
..
-.TH "UNBOUND" "8" "Jul 22, 2026" "1.25.2" "Unbound"
+.TH "UNBOUND" "8" "Aug 4, 2026" "1.26.0" "Unbound"
.SH NAME
-unbound \- Unbound DNS validating resolver 1.25.2.
+unbound \- Unbound DNS validating resolver 1.26.0.
.SH SYNOPSIS
.sp
\fBunbound\fP [\fB\-hdpVv\fP] [\fB\-c <cfgfile>\fP]
diff --git a/doc/unbound.conf.5.in b/doc/unbound.conf.5.in
index 1d333938d414..67b59b090db5 100644
--- a/doc/unbound.conf.5.in
+++ b/doc/unbound.conf.5.in
@@ -27,9 +27,9 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
..
-.TH "UNBOUND.CONF" "5" "Jul 22, 2026" "1.25.2" "Unbound"
+.TH "UNBOUND.CONF" "5" "Aug 4, 2026" "1.26.0" "Unbound"
.SH NAME
-unbound.conf \- Unbound 1.25.2 configuration file.
+unbound.conf \- Unbound 1.26.0 configuration file.
.SH SYNOPSIS
.sp
\fBunbound.conf\fP
@@ -691,7 +691,7 @@ Default: 0 (use system value)
.TP
.B so\-sndbuf: \fI<number>\fP
If not 0, then set the SO_SNDBUF socket option to get more buffer space on
-UDP port 53 outgoing queries.
+UDP port 53 outgoing responses.
This for very busy servers handles spikes in answer traffic, otherwise:
.INDENT 7.0
.INDENT 3.5
@@ -2312,6 +2312,13 @@ The defensive action is to clear the rrset and message caches, hopefully
flushing away any poison.
A value of 10 million is suggested.
.sp
+It is useful to add 0.0.0.0/8 and \(aq::\(aq to the
+\fI\%do\-not\-query\-address\fP list.
+Otherwise they may be answered, from localhost, and the different source
+makes an unwanted reply that unnecessarily ticks up.
+The \fI\%do\-not\-query\-localhost\fP
+option includes them, the zero subnets, when it is enabled.
+.sp
Default: 0 (disabled)
.UNINDENT
.INDENT 0.0
@@ -2362,6 +2369,8 @@ If yes, deny queries of type ANY with an empty response.
If disabled, Unbound responds with a short list of resource records if some
can be found in the cache and makes the upstream type ANY query if there
are none.
+The option stops the DNSSEC validation from processing, possibly lengthy,
+ANY responses, when the option is enabled.
.sp
Default: no
.UNINDENT
@@ -2910,6 +2919,9 @@ The types are
\fI\%inform_redirect\fP,
\fI\%always_transparent\fP,
\fI\%block_a\fP,
+\fI\%block_aaaa\fP,
+\fI\%block_a_wdata\fP,
+\fI\%block_aaaa_wdata\fP,
\fI\%always_refuse\fP,
\fI\%always_nxdomain\fP,
\fI\%always_null\fP,
@@ -3100,6 +3112,32 @@ use IPv6 protocol and avoid any queries to IPv4.
.UNINDENT
.INDENT 7.0
.TP
+.B block_aaaa
+Like \fI\%transparent\fP or
+\fI\%block_a\fP, but
+ignores local data and resolves normally all query types excluding AAAA.
+For AAAA queries it unconditionally returns NODATA.
+Useful in cases when there is a need to explicitly force all apps to
+use IPv4 protocol and avoid any queries to IPv6.
+.UNINDENT
+.INDENT 7.0
+.TP
+.B block_a_wdata
+Like \fI\%block_a\fP, but
+uses local data if present.
+If there is local data that is returned, and it acts like transparent.
+For A queries it returns NODATA.
+.UNINDENT
+.INDENT 7.0
+.TP
+.B block_aaaa_wdata
+Like \fI\%block_aaaa\fP, but
+uses local data if present.
+If there is local data that is returned, and it acts like transparent.
+For AAAA queries it returns NODATA.
+.UNINDENT
+.INDENT 7.0
+.TP
.B always_refuse
Like \fI\%refuse\fP, but ignores
local data and refuses the query.
@@ -3567,6 +3605,18 @@ For example, 1000 may be a suitable value to stop the server from being
overloaded with random names, and keeps unbound from sending traffic to the
nameservers for those zones.
.sp
+It is intended to count the number of queries towards the nameservers
+for the zone, and keep those queries limited.
+When there is a delegation that needs a lot of lookups, those are
+charged in the counters for the destination, the target name, of
+the NS records.
+Since that is where the nameserver lookup queries are sent to.
+That keeps the target, the victim domain, from having many queries.
+With the \fI\%ratelimit\-factor\fP, some
+genuine queries that are also made to the target zone, can filter
+through, and then end up in cache, where the genuine answers have
+a chance to collect, keeping up service to some extent.
+.sp
\fBNOTE:\fP
.INDENT 7.0
.INDENT 3.5
@@ -4594,6 +4644,32 @@ If not given then no zonefile is used.
If the file does not exist or is empty, Unbound will attempt to fetch zone
data (eg. from the primary servers).
.UNINDENT
+.INDENT 0.0
+.TP
+.B max\-transfer\-size: \fI<number>\fP
+Number of bytes size of the maximum zone transfer size.
+Larger transfers, over AXFR, IXFR and HTTP, are not allowed.
+A plain number is in bytes, append \(aqk\(aq, \(aqm\(aq or \(aqg\(aq for kilobytes, megabytes
+or gigabytes (1024*1024 bytes in a megabyte).
+The value \fB0\fP disables the feature.
+.sp
+Only consider for untrusted/misbehaving primaries that could hog resources
+and bring down the resolver.
+.sp
+Default: 0
+.UNINDENT
+.INDENT 0.0
+.TP
+.B max\-transfer\-time: \fI<msec>\fP
+Maximum time in milliseconds that a zone transfer is allowed to take from
+the start.
+The value \fB0\fP disables the feature.
+.sp
+Only consider for untrusted/misbehaving primaries that could hog resources
+and bring down the resolver.
+.sp
+Default: 0
+.UNINDENT
.SH VIEW OPTIONS
.sp
These options are part of the \fBview:\fP section.
@@ -5806,6 +5882,10 @@ from a webserver that would work.
If you specify the hostname, you cannot use the domain from the zonefile,
because it may not have that when retrieving that data, instead use a plain
IP address to avoid a circular dependency on retrieving that IP address.
+.sp
+Every number of IXFR transfers, a full AXFR is performed.
+This is to consolidate the rpz memory, that would otherwise grow.
+The fixed value is after 5 IXFR transfers.
.UNINDENT
.INDENT 0.0
.TP
@@ -5928,6 +6008,32 @@ Enclose list of tags in quotes (\fB\(dq\(dq\fP) and put spaces between tags.
If no tags are specified the policies from this section will be applied for
all clients.
.UNINDENT
+.INDENT 0.0
+.TP
+.B max\-transfer\-size: \fI<number>\fP
+Number of bytes size of the maximum zone transfer size.
+Larger transfers, over AXFR, IXFR and HTTP, are not allowed.
+A plain number is in bytes, append \(aqk\(aq, \(aqm\(aq or \(aqg\(aq for kilobytes, megabytes
+or gigabytes (1024*1024 bytes in a megabyte).
+The value \fB0\fP disables the feature.
+.sp
+Only consider for untrusted/misbehaving primaries that could hog resources
+and bring down the resolver.
+.sp
+Default: 0
+.UNINDENT
+.INDENT 0.0
+.TP
+.B max\-transfer\-time: \fI<msec>\fP
+Maximum time in milliseconds that a zone transfer is allowed to take from
+the start.
+The value \fB0\fP disables the feature.
+.sp
+Only consider for untrusted/misbehaving primaries that could hog resources
+and bring down the resolver.
+.sp
+Default: 0
+.UNINDENT
.SH MEMORY CONTROL EXAMPLE
.sp
In the example config settings below memory usage is reduced.
diff --git a/doc/unbound.conf.rst b/doc/unbound.conf.rst
index 2e37e2e5d45d..e341c516ff84 100644
--- a/doc/unbound.conf.rst
+++ b/doc/unbound.conf.rst
@@ -642,7 +642,7 @@ These options are part of the ``server:`` section.
@@UAHL@unbound.conf@so-sndbuf@@: *<number>*
If not 0, then set the SO_SNDBUF socket option to get more buffer space on
- UDP port 53 outgoing queries.
+ UDP port 53 outgoing responses.
This for very busy servers handles spikes in answer traffic, otherwise:
.. code-block:: text
@@ -2107,6 +2107,8 @@ These options are part of the ``server:`` section.
If disabled, Unbound responds with a short list of resource records if some
can be found in the cache and makes the upstream type ANY query if there
are none.
+ The option stops the DNSSEC validation from processing, possibly lengthy,
+ ANY responses, when the option is enabled.
Default: no
@@ -2590,6 +2592,9 @@ These options are part of the ``server:`` section.
:ref:`inform_redirect<unbound.conf.local-zone.type.inform_redirect>`,
:ref:`always_transparent<unbound.conf.local-zone.type.always_transparent>`,
:ref:`block_a<unbound.conf.local-zone.type.block_a>`,
+ :ref:`block_aaaa<unbound.conf.local-zone.type.block_aaaa>`,
+ :ref:`block_a_wdata<unbound.conf.local-zone.type.block_a_wdata>`,
+ :ref:`block_aaaa_wdata<unbound.conf.local-zone.type.block_aaaa_wdata>`,
:ref:`always_refuse<unbound.conf.local-zone.type.always_refuse>`,
:ref:`always_nxdomain<unbound.conf.local-zone.type.always_nxdomain>`,
:ref:`always_null<unbound.conf.local-zone.type.always_null>`,
@@ -2739,6 +2744,26 @@ These options are part of the ``server:`` section.
Useful in cases when there is a need to explicitly force all apps to
use IPv6 protocol and avoid any queries to IPv4.
+ @@UAHL@unbound.conf.local-zone.type@block_aaaa@@
+ Like :ref:`transparent<unbound.conf.local-zone.type.transparent>` or
+ :ref:`block_a<unbound.conf.local-zone.type.block_a>`, but
+ ignores local data and resolves normally all query types excluding AAAA.
+ For AAAA queries it unconditionally returns NODATA.
+ Useful in cases when there is a need to explicitly force all apps to
+ use IPv4 protocol and avoid any queries to IPv6.
+
+ @@UAHL@unbound.conf.local-zone.type@block_a_wdata@@
+ Like :ref:`block_a<unbound.conf.local-zone.type.block_a>`, but
+ uses local data if present.
+ If there is local data that is returned, and it acts like transparent.
+ For A queries it returns NODATA.
+
+ @@UAHL@unbound.conf.local-zone.type@block_aaaa_wdata@@
+ Like :ref:`block_aaaa<unbound.conf.local-zone.type.block_aaaa>`, but
+ uses local data if present.
+ If there is local data that is returned, and it acts like transparent.
+ For AAAA queries it returns NODATA.
+
@@UAHL@unbound.conf.local-zone.type@always_refuse@@
Like :ref:`refuse<unbound.conf.local-zone.type.refuse>`, but ignores
local data and refuses the query.
@@ -3085,6 +3110,18 @@ These options are part of the ``server:`` section.
overloaded with random names, and keeps unbound from sending traffic to the
nameservers for those zones.
+ It is intended to count the number of queries towards the nameservers
+ for the zone, and keep those queries limited.
+ When there is a delegation that needs a lot of lookups, those are
+ charged in the counters for the destination, the target name, of
+ the NS records.
+ Since that is where the nameserver lookup queries are sent to.
+ That keeps the target, the victim domain, from having many queries.
+ With the :ref:`ratelimit-factor<unbound.conf.ratelimit-factor>`, some
+ genuine queries that are also made to the target zone, can filter
+ through, and then end up in cache, where the genuine answers have
+ a chance to collect, keeping up service to some extent.
+
.. note:: Configured forwarders are excluded from ratelimiting.
Default: 0
@@ -4018,6 +4055,31 @@ fallback activates to fetch from the upstream instead of the SERVFAIL.
If the file does not exist or is empty, Unbound will attempt to fetch zone
data (eg. from the primary servers).
+
+@@UAHL@unbound.conf.auth@max-transfer-size@@: *<number>*
+ Number of bytes size of the maximum zone transfer size.
+ Larger transfers, over AXFR, IXFR and HTTP, are not allowed.
+ A plain number is in bytes, append 'k', 'm' or 'g' for kilobytes, megabytes
+ or gigabytes (1024*1024 bytes in a megabyte).
+ The value ``0`` disables the feature.
+
+ Only consider for untrusted/misbehaving primaries that could hog resources
+ and bring down the resolver.
+
+ Default: 0
+
+
+@@UAHL@unbound.conf.auth@max-transfer-time@@: *<msec>*
+ Maximum time in milliseconds that a zone transfer is allowed to take from
+ the start.
+ The value ``0`` disables the feature.
+
+ Only consider for untrusted/misbehaving primaries that could hog resources
+ and bring down the resolver.
+
+ Default: 0
+
+
.. _unbound.conf.view:
View Options
@@ -5098,6 +5160,10 @@ answer queries with that content.
because it may not have that when retrieving that data, instead use a plain
IP address to avoid a circular dependency on retrieving that IP address.
+ Every number of IXFR transfers, a full AXFR is performed.
+ This is to consolidate the rpz memory, that would otherwise grow.
+ The fixed value is after 5 IXFR transfers.
+
@@UAHL@unbound.conf.rpz@master@@: *<IP address or host name>*
Alternate syntax for :ref:`primary<unbound.conf.rpz.primary>`.
@@ -5198,6 +5264,31 @@ answer queries with that content.
If no tags are specified the policies from this section will be applied for
all clients.
+
+@@UAHL@unbound.conf.rpz@max-transfer-size@@: *<number>*
+ Number of bytes size of the maximum zone transfer size.
+ Larger transfers, over AXFR, IXFR and HTTP, are not allowed.
+ A plain number is in bytes, append 'k', 'm' or 'g' for kilobytes, megabytes
+ or gigabytes (1024*1024 bytes in a megabyte).
+ The value ``0`` disables the feature.
+
+ Only consider for untrusted/misbehaving primaries that could hog resources
+ and bring down the resolver.
+
+ Default: 0
+
+
+@@UAHL@unbound.conf.rpz@max-transfer-time@@: *<msec>*
+ Maximum time in milliseconds that a zone transfer is allowed to take from
+ the start.
+ The value ``0`` disables the feature.
+
+ Only consider for untrusted/misbehaving primaries that could hog resources
+ and bring down the resolver.
+
+ Default: 0
+
+
Memory Control Example
----------------------
diff --git a/edns-subnet/addrtree.c b/edns-subnet/addrtree.c
index ebe71b9706e4..278a16f384b0 100644
--- a/edns-subnet/addrtree.c
+++ b/edns-subnet/addrtree.c
@@ -459,6 +459,7 @@ addrtree_insert(struct addrtree *tree, const addrkey_t *addr,
/* Data is stored in other leafnode */
node = newnode;
newnode = node_create(tree, elem, scope, ttl);
+ if (!newnode) return;
if (!edge_create(newnode, addr, sourcemask, node,
index^1)) {
clean_node(tree, newnode);
diff --git a/edns-subnet/subnetmod.c b/edns-subnet/subnetmod.c
index 587839faa6df..be09742f89e6 100644
--- a/edns-subnet/subnetmod.c
+++ b/edns-subnet/subnetmod.c
@@ -1015,6 +1015,7 @@ subnetmod_operate(struct module_qstate *qstate, enum module_ev event,
subnet_ecs_opt_list_append(&sq->ecs_client_out,
&qstate->edns_opts_front_out, qstate,
qstate->region);
+ qstate->is_subnet_answer = 1;
}
sq->wait_subquery_done = 0;
qstate->ext_state[id] = module_finished;
@@ -1094,6 +1095,7 @@ subnetmod_operate(struct module_qstate *qstate, enum module_ev event,
qstate->env->cfg->prefetch)) {
sne->num_msg_cache++;
lock_rw_unlock(&sne->biglock);
+ qstate->is_subnet_answer = 1;
verbose(VERB_QUERY, "subnetcache: answered from cache");
qstate->ext_state[id] = module_finished;
@@ -1165,6 +1167,7 @@ subnetmod_operate(struct module_qstate *qstate, enum module_ev event,
subnet_ecs_opt_list_append(&sq->ecs_client_out,
&qstate->edns_opts_front_out, qstate,
qstate->region);
+ qstate->is_subnet_answer = 1;
if(verbosity >= VERB_ALGO) {
subnet_log_print("reply has edns subnet",
edns_opt_list_find(
diff --git a/ipsecmod/ipsecmod-whitelist.c b/ipsecmod/ipsecmod-whitelist.c
index c2b1f5d4a596..0ff59145f40f 100644
--- a/ipsecmod/ipsecmod-whitelist.c
+++ b/ipsecmod/ipsecmod-whitelist.c
@@ -100,6 +100,8 @@ ipsecmod_whitelist_apply_cfg(struct ipsecmod_env* ie,
struct config_file* cfg)
{
ie->whitelist = rbtree_create(name_tree_compare);
+ if (!ie->whitelist)
+ return 0;
if(!read_whitelist(ie->whitelist, cfg))
return 0;
name_tree_init_parents(ie->whitelist);
diff --git a/ipsecmod/ipsecmod.c b/ipsecmod/ipsecmod.c
index ce38b55cfb32..d1c0d442fe00 100644
--- a/ipsecmod/ipsecmod.c
+++ b/ipsecmod/ipsecmod.c
@@ -51,6 +51,9 @@
#include "util/config_file.h"
#include "services/cache/dns.h"
#include "sldns/wire2str.h"
+#ifdef HAVE_SYS_WAIT_H
+#include <sys/wait.h>
+#endif
/** Apply configuration to ipsecmod module 'global' state. */
static int
@@ -60,6 +63,11 @@ ipsecmod_apply_cfg(struct ipsecmod_env* ipsecmod_env, struct config_file* cfg)
log_err("ipsecmod: missing ipsecmod-hook.");
return 0;
}
+ if(access(cfg->ipsecmod_hook, X_OK) != 0) {
+ log_err("ipsecmod: ipsecmod-hook '%s' is not an executable file: %s",
+ cfg->ipsecmod_hook, strerror(errno));
+ return 0;
+ }
if(cfg->ipsecmod_whitelist &&
!ipsecmod_whitelist_apply_cfg(ipsecmod_env, cfg))
return 0;
@@ -250,27 +258,16 @@ call_hook(struct module_qstate* qstate, struct ipsecmod_qstate* iq,
struct ipsecmod_env* ATTR_UNUSED(ie))
{
size_t slen, tempdata_len, tempstring_len, i;
- char str[65535], *s, *tempstring;
+ char qname_s[LDNS_MAX_DOMAINLEN*5+16], ttl_s[32], a_s[32768], k_s[32768];
+ char *s, *tempstring;
int w = 0, w_temp, qtype;
struct ub_packed_rrset_key* rrset_key;
struct packed_rrset_data* rrset_data;
uint8_t *tempdata;
+ pid_t pid;
+ int st;
+ char* argv[6];
- /* Check if a shell is available */
- if(system(NULL) == 0) {
- log_err("ipsecmod: no shell available for ipsecmod-hook");
- return 0;
- }
-
- /* Zero the buffer. */
- s = str;
- slen = sizeof(str);
- memset(s, 0, slen);
-
- /* Copy the hook into the buffer. */
- w += sldns_str_print(&s, &slen, "%s", qstate->env->cfg->ipsecmod_hook);
- /* Put space into the buffer. */
- w += sldns_str_print(&s, &slen, " ");
/* Copy the qname into the buffer. */
tempstring = sldns_wire2str_dname(qstate->qinfo.qname,
qstate->qinfo.qname_len);
@@ -283,17 +280,24 @@ call_hook(struct module_qstate* qstate, struct ipsecmod_qstate* iq,
free(tempstring);
return 0;
}
- w += sldns_str_print(&s, &slen, "\"%s\"", tempstring);
+ if(strlen(tempstring)+1 > sizeof(qname_s)) {
+ log_err("ipsecmod: string too long");
+ free(tempstring);
+ return 0;
+ }
+ snprintf(qname_s, sizeof(qname_s), "%s", tempstring);
free(tempstring);
- /* Put space into the buffer. */
- w += sldns_str_print(&s, &slen, " ");
+
/* Copy the IPSECKEY TTL into the buffer. */
rrset_data = (struct packed_rrset_data*)iq->ipseckey_rrset->entry.data;
- w += sldns_str_print(&s, &slen, "\"%ld\"", (long)rrset_data->ttl);
- /* Put space into the buffer. */
- w += sldns_str_print(&s, &slen, " ");
+ snprintf(ttl_s, sizeof(ttl_s), "%ld", (long)rrset_data->ttl);
+
rrset_key = reply_find_answer_rrset(&qstate->return_msg->qinfo,
qstate->return_msg->rep);
+ if(!rrset_key) {
+ log_err("ipsecmod: could not find answer rrset for A/AAAA");
+ return 0;
+ }
/* Double check that the records are indeed A/AAAA.
* This should never happen as this function is only executed for A/AAAA
* queries but make sure we don't pass anything other than A/AAAA to the
@@ -304,9 +308,15 @@ call_hook(struct module_qstate* qstate, struct ipsecmod_qstate* iq,
return 0;
}
rrset_data = (struct packed_rrset_data*)rrset_key->entry.data;
- /* Copy the A/AAAA record(s) into the buffer. Start and end this section
- * with a double quote. */
- w += sldns_str_print(&s, &slen, "\"");
+ if(!rrset_data) {
+ log_err("ipsecmod: Answer has no data");
+ return 0;
+ }
+ /* Copy the A/AAAA record(s) into the buffer. */
+ w = 0;
+ s = a_s;
+ slen = sizeof(a_s);
+ memset(s, 0, slen);
for(i=0; i<rrset_data->count; i++) {
if(i > 0) {
/* Put space into the buffer. */
@@ -322,7 +332,7 @@ call_hook(struct module_qstate* qstate, struct ipsecmod_qstate* iq,
} else if((size_t)w_temp >= slen) {
s = NULL; /* We do not want str to point outside of buffer. */
slen = 0;
- log_err("ipsecmod: shell command too long");
+ log_err("ipsecmod: command addr argument too long");
return 0;
} else {
s += w_temp;
@@ -330,12 +340,17 @@ call_hook(struct module_qstate* qstate, struct ipsecmod_qstate* iq,
w += w_temp;
}
}
- w += sldns_str_print(&s, &slen, "\"");
- /* Put space into the buffer. */
- w += sldns_str_print(&s, &slen, " ");
+ if(w >= (int)sizeof(a_s)) {
+ log_err("ipsecmod: command addr argument too long");
+ return 0;
+ }
+
/* Copy the IPSECKEY record(s) into the buffer. Start and end this section
* with a double quote. */
- w += sldns_str_print(&s, &slen, "\"");
+ w = 0;
+ s = k_s;
+ slen = sizeof(k_s);
+ memset(s, 0, slen);
rrset_data = (struct packed_rrset_data*)iq->ipseckey_rrset->entry.data;
for(i=0; i<rrset_data->count; i++) {
if(i > 0) {
@@ -362,15 +377,44 @@ call_hook(struct module_qstate* qstate, struct ipsecmod_qstate* iq,
w += w_temp;
}
}
- w += sldns_str_print(&s, &slen, "\"");
- if(w >= (int)sizeof(str)) {
- log_err("ipsecmod: shell command too long");
+ if(w >= (int)sizeof(k_s)) {
+ log_err("ipsecmod: command ipseckey argument too long");
return 0;
}
- verbose(VERB_ALGO, "ipsecmod: shell command: '%s'", str);
+
/* ipsecmod-hook should return 0 on success. */
- if(system(str) != 0)
+ /* exec the ipsecmod-hook */
+ argv[0] = qstate->env->cfg->ipsecmod_hook;
+ argv[1] = qname_s;
+ argv[2] = ttl_s;
+ argv[3] = a_s;
+ argv[4] = k_s;
+ argv[5] = NULL;
+ verbose(VERB_ALGO, "ipsecmod: exec %s \"%s\" %s \"%s\" \"%s\"",
+ argv[0], argv[1], argv[2], argv[3], argv[4]);
+ if((pid = fork()) < 0) {
+ log_err("ipsecmod: for exec, can not fork: %s",
+ strerror(errno));
+ return 0;
+ }
+ if(pid == 0) {
+ if(execv(argv[0], argv) < 0)
+ fprintf(stderr, "ipsecmod: execv: %s\n",
+ strerror(errno));
+ _exit(127);
+ }
+ while(1) {
+ if(waitpid(pid, &st, 0) < 0) {
+ if(errno == EINTR)
+ continue;
+ log_err("ipsecmod: wait_pid: %s", strerror(errno));
+ }
+ break;
+ }
+ if(!(WIFEXITED(st) && WEXITSTATUS(st) == 0)) {
+ /* the command failed */
return 0;
+ }
return 1;
}
@@ -435,6 +479,12 @@ ipsecmod_handle_query(struct module_qstate* qstate,
* ipsecmod_max_ttl. */
rrset_key = reply_find_answer_rrset(&qstate->return_msg->qinfo,
qstate->return_msg->rep);
+ if(!rrset_key) {
+ log_err("ipsecmod: reply-find-answer failed");
+ errinf(qstate, "ipsecmod: reply-find-answer failed");
+ ipsecmod_error(qstate, id);
+ return;
+ }
rrset_data = (struct packed_rrset_data*)rrset_key->entry.data;
if(rrset_data->ttl > (time_t)qstate->env->cfg->ipsecmod_max_ttl) {
/* Update TTL for rrset to fixed value. */
diff --git a/ipset/ipset.c b/ipset/ipset.c
index 1ad2c09f46da..1f9af4d9c157 100644
--- a/ipset/ipset.c
+++ b/ipset/ipset.c
@@ -143,7 +143,7 @@ static int add_to_ipset(filter_dev dev, const char *setname, const void *ipaddr,
struct nlmsghdr *nlh;
struct nfgenmsg *nfg;
struct nlattr *nested[2];
- static char buffer[BUFF_LEN];
+ char buffer[BUFF_LEN];
if (strlen(setname) >= IPSET_MAXNAMELEN) {
errno = ENAMETOOLONG;
@@ -208,13 +208,6 @@ ipset_add_rrset_data(struct ipset_env *ie,
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);
-
-#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;
}
}
@@ -226,15 +219,15 @@ ipset_check_zones_for_rrset(struct module_env *env, struct ipset_env *ie,
struct ub_packed_rrset_key *rrset, const char *qname, int qlen,
const char *setname, int af)
{
- static char dname[BUFF_LEN];
+ char dname[LDNS_MAX_DOMAINLEN*4+16];
const char *ds, *qs;
int dlen, plen;
struct config_strlist *p;
struct packed_rrset_data *d;
- dlen = sldns_wire2str_dname_buf(rrset->rk.dname, rrset->rk.dname_len, dname, BUFF_LEN);
- if (dlen == 0) {
+ dlen = sldns_wire2str_dname_buf(rrset->rk.dname, rrset->rk.dname_len, dname, sizeof(dname));
+ if (dlen == 0 || dlen >= (int)sizeof(dname)) {
log_err("bad domain name");
return -1;
}
@@ -276,7 +269,7 @@ static int ipset_update(struct module_env *env, struct dns_msg *return_msg,
const char *setname;
struct ub_packed_rrset_key *rrset;
int af;
- static char qname[BUFF_LEN];
+ char qname[LDNS_MAX_DOMAINLEN*4+16];
int qlen;
#ifdef HAVE_NET_PFVAR_H
@@ -292,8 +285,8 @@ static int ipset_update(struct module_env *env, struct dns_msg *return_msg,
#endif
qlen = sldns_wire2str_dname_buf(qinfo.qname, qinfo.qname_len,
- qname, BUFF_LEN);
- if(qlen == 0) {
+ qname, sizeof(qname));
+ if(qlen == 0 || qlen >= (int)sizeof(qname)) {
log_err("bad domain name");
return -1;
}
@@ -372,6 +365,16 @@ int ipset_init(struct module_env* env, int id) {
ipset_env->name_v4 = env->cfg->ipset_name_v4;
ipset_env->name_v6 = env->cfg->ipset_name_v6;
+#ifndef HAVE_NET_PFVAR_H
+ if (ipset_env->name_v4 && strlen(ipset_env->name_v4) >= IPSET_MAXNAMELEN) {
+ log_err("ipset: name-v4 exceeds IPSET_MAXNAMELEN (%d)", IPSET_MAXNAMELEN);
+ return 0;
+ }
+ if (ipset_env->name_v6 && strlen(ipset_env->name_v6) >= IPSET_MAXNAMELEN) {
+ log_err("ipset: name-v6 exceeds IPSET_MAXNAMELEN (%d)", IPSET_MAXNAMELEN);
+ return 0;
+ }
+#endif
ipset_env->v4_enabled = !ipset_env->name_v4 || (strlen(ipset_env->name_v4) == 0) ? 0 : 1;
ipset_env->v6_enabled = !ipset_env->name_v6 || (strlen(ipset_env->name_v6) == 0) ? 0 : 1;
diff --git a/iterator/iter_delegpt.c b/iterator/iter_delegpt.c
index be5bf482d673..f0f94cadd219 100644
--- a/iterator/iter_delegpt.c
+++ b/iterator/iter_delegpt.c
@@ -118,10 +118,10 @@ delegpt_add_ns(struct delegpt* dp, struct regional* region, uint8_t* name,
sizeof(struct delegpt_ns));
if(!ns)
return 0;
- ns->next = dp->nslist;
ns->namelen = len;
- dp->nslist = ns;
ns->name = regional_alloc_init(region, name, ns->namelen);
+ if(!ns->name)
+ return 0;
ns->cache_lookup_count = 0;
ns->resolved = 0;
ns->got4 = 0;
@@ -137,7 +137,9 @@ delegpt_add_ns(struct delegpt* dp, struct regional* region, uint8_t* name,
} else {
ns->tls_auth_name = NULL;
}
- return ns->name != 0;
+ ns->next = dp->nslist;
+ dp->nslist = ns;
+ return 1;
}
struct delegpt_ns*
@@ -223,11 +225,7 @@ delegpt_add_addr(struct delegpt* dp, struct regional* region,
sizeof(struct delegpt_addr));
if(!a)
return 0;
- a->next_target = dp->target_list;
- dp->target_list = a;
a->next_result = 0;
- a->next_usable = dp->usable_list;
- dp->usable_list = a;
memcpy(&a->addr, addr, addrlen);
a->addrlen = addrlen;
a->attempts = 0;
@@ -241,6 +239,10 @@ delegpt_add_addr(struct delegpt* dp, struct regional* region,
} else {
a->tls_auth_name = NULL;
}
+ a->next_target = dp->target_list;
+ dp->target_list = a;
+ a->next_usable = dp->usable_list;
+ dp->usable_list = a;
return 1;
}
@@ -398,30 +400,33 @@ delegpt_count_missing_targets(struct delegpt* dp, int* alllame)
/** find NS rrset in given list */
static struct ub_packed_rrset_key*
-find_NS(struct reply_info* rep, size_t from, size_t to)
+find_NS(struct reply_info* rep, size_t from, size_t to, uint16_t qclass)
{
size_t i;
for(i=from; i<to; i++) {
- if(ntohs(rep->rrsets[i]->rk.type) == LDNS_RR_TYPE_NS)
+ if(ntohs(rep->rrsets[i]->rk.type) == LDNS_RR_TYPE_NS &&
+ ntohs(rep->rrsets[i]->rk.rrset_class) == qclass)
return rep->rrsets[i];
}
return NULL;
}
struct delegpt*
-delegpt_from_message(struct dns_msg* msg, struct regional* region)
+delegpt_from_message(struct dns_msg* msg, struct regional* region, int port)
{
struct ub_packed_rrset_key* ns_rrset = NULL;
struct delegpt* dp;
size_t i;
/* look for NS records in the authority section... */
ns_rrset = find_NS(msg->rep, msg->rep->an_numrrsets,
- msg->rep->an_numrrsets+msg->rep->ns_numrrsets);
+ msg->rep->an_numrrsets+msg->rep->ns_numrrsets,
+ msg->qinfo.qclass);
/* In some cases (even legitimate, perfectly legal cases), the
* NS set for the "referral" might be in the answer section. */
if(!ns_rrset)
- ns_rrset = find_NS(msg->rep, 0, msg->rep->an_numrrsets);
+ ns_rrset = find_NS(msg->rep, 0, msg->rep->an_numrrsets,
+ msg->qinfo.qclass);
/* If there was no NS rrset in the authority section, then this
* wasn't a referral message. (It might not actually be a
@@ -436,7 +441,7 @@ delegpt_from_message(struct dns_msg* msg, struct regional* region)
dp->has_parent_side_NS = 1; /* created from message */
if(!delegpt_set_name(dp, region, ns_rrset->rk.dname))
return NULL;
- if(!delegpt_rrset_add_ns(dp, region, ns_rrset, 0))
+ if(!delegpt_rrset_add_ns(dp, region, ns_rrset, 0, port))
return NULL;
/* add glue, A and AAAA in answer and additional section */
@@ -447,10 +452,12 @@ delegpt_from_message(struct dns_msg* msg, struct regional* region)
i < (msg->rep->an_numrrsets+msg->rep->ns_numrrsets))
continue;
- if(ntohs(s->rk.type) == LDNS_RR_TYPE_A) {
+ if(ntohs(s->rk.type) == LDNS_RR_TYPE_A &&
+ ntohs(s->rk.rrset_class) == msg->qinfo.qclass) {
if(!delegpt_add_rrset_A(dp, region, s, 0, NULL))
return NULL;
- } else if(ntohs(s->rk.type) == LDNS_RR_TYPE_AAAA) {
+ } else if(ntohs(s->rk.type) == LDNS_RR_TYPE_AAAA &&
+ ntohs(s->rk.rrset_class) == msg->qinfo.qclass) {
if(!delegpt_add_rrset_AAAA(dp, region, s, 0, NULL))
return NULL;
}
@@ -460,7 +467,7 @@ delegpt_from_message(struct dns_msg* msg, struct regional* region)
int
delegpt_rrset_add_ns(struct delegpt* dp, struct regional* region,
- struct ub_packed_rrset_key* ns_rrset, uint8_t lame)
+ struct ub_packed_rrset_key* ns_rrset, uint8_t lame, int port)
{
struct packed_rrset_data* nsdata = (struct packed_rrset_data*)
ns_rrset->entry.data;
@@ -475,7 +482,7 @@ delegpt_rrset_add_ns(struct delegpt* dp, struct regional* region,
continue; /* bad format */
/* add rdata of NS (= wirefmt dname), skip rdatalen bytes */
if(!delegpt_add_ns(dp, region, nsdata->rr_data[i]+2, lame,
- NULL, UNBOUND_DNS_PORT))
+ NULL, (port==-1?UNBOUND_DNS_PORT:port)))
return 0;
}
return 1;
@@ -534,7 +541,7 @@ delegpt_add_rrset(struct delegpt* dp, struct regional* region,
if(!rrset)
return 1;
if(ntohs(rrset->rk.type) == LDNS_RR_TYPE_NS)
- return delegpt_rrset_add_ns(dp, region, rrset, lame);
+ return delegpt_rrset_add_ns(dp, region, rrset, lame, -1);
else if(ntohs(rrset->rk.type) == LDNS_RR_TYPE_A)
return delegpt_add_rrset_A(dp, region, rrset, lame, additions);
else if(ntohs(rrset->rk.type) == LDNS_RR_TYPE_AAAA)
@@ -659,8 +666,6 @@ int delegpt_add_ns_mlc(struct delegpt* dp, uint8_t* name, uint8_t lame,
free(ns);
return 0;
}
- ns->next = dp->nslist;
- dp->nslist = ns;
ns->cache_lookup_count = 0;
ns->resolved = 0;
ns->got4 = 0;
@@ -679,6 +684,8 @@ int delegpt_add_ns_mlc(struct delegpt* dp, uint8_t* name, uint8_t lame,
} else {
ns->tls_auth_name = NULL;
}
+ ns->next = dp->nslist;
+ dp->nslist = ns;
return 1;
}
@@ -704,11 +711,7 @@ int delegpt_add_addr_mlc(struct delegpt* dp, struct sockaddr_storage* addr,
a = (struct delegpt_addr*)malloc(sizeof(struct delegpt_addr));
if(!a)
return 0;
- a->next_target = dp->target_list;
- dp->target_list = a;
a->next_result = 0;
- a->next_usable = dp->usable_list;
- dp->usable_list = a;
memcpy(&a->addr, addr, addrlen);
a->addrlen = addrlen;
a->attempts = 0;
@@ -724,6 +727,10 @@ int delegpt_add_addr_mlc(struct delegpt* dp, struct sockaddr_storage* addr,
} else {
a->tls_auth_name = NULL;
}
+ a->next_target = dp->target_list;
+ dp->target_list = a;
+ a->next_usable = dp->usable_list;
+ dp->usable_list = a;
return 1;
}
diff --git a/iterator/iter_delegpt.h b/iterator/iter_delegpt.h
index 287bf92134d2..db15277fca18 100644
--- a/iterator/iter_delegpt.h
+++ b/iterator/iter_delegpt.h
@@ -221,10 +221,11 @@ int delegpt_add_ns(struct delegpt* dp, struct regional* regional,
* @param regional: where to allocate the info.
* @param ns_rrset: NS rrset.
* @param lame: rrset is lame, disprefer it.
+ * @param port: port or -1 if not set.
* @return 0 on alloc error.
*/
int delegpt_rrset_add_ns(struct delegpt* dp, struct regional* regional,
- struct ub_packed_rrset_key* ns_rrset, uint8_t lame);
+ struct ub_packed_rrset_key* ns_rrset, uint8_t lame, int port);
/**
* Add target address to the delegation point.
@@ -365,11 +366,12 @@ size_t delegpt_count_targets(struct delegpt* dp);
*
* @param msg: the dns message, referral.
* @param regional: where to allocate delegation point.
+ * @param port: if not -1 specifies a port number.
* @return new delegation point or NULL on alloc error, or if the
* message was not appropriate.
*/
struct delegpt* delegpt_from_message(struct dns_msg* msg,
- struct regional* regional);
+ struct regional* regional, int port);
/**
* Mark negative return in delegation point for specific nameserver.
diff --git a/iterator/iter_resptype.c b/iterator/iter_resptype.c
index 38e186e79048..f16520b3eaad 100644
--- a/iterator/iter_resptype.c
+++ b/iterator/iter_resptype.c
@@ -107,7 +107,7 @@ response_type_from_cache(struct dns_msg* msg,
enum response_type
response_type_from_server(int rdset,
struct dns_msg* msg, struct query_info* request, struct delegpt* dp,
- int* empty_nodata_found)
+ int* empty_nodata_found, int msg_lame_empty, int msg_lame_referral)
{
uint8_t* origzone = (uint8_t*)"\000"; /* the default */
struct ub_packed_rrset_key* s;
@@ -122,6 +122,10 @@ response_type_from_server(int rdset,
/* If the message is NXDOMAIN, then it answers the question. */
if(FLAGS_GET_RCODE(msg->rep->flags) == LDNS_RCODE_NXDOMAIN) {
+ if(msg->rep->an_numrrsets == 0 &&
+ msg->rep->ns_numrrsets == 0 &&
+ msg_lame_empty)
+ return RESPONSE_TYPE_LAME;
/* make sure its not recursive when we don't want it to */
if( (msg->rep->flags&BIT_RA) &&
!(msg->rep->flags&BIT_AA) && !rdset)
@@ -143,6 +147,10 @@ response_type_from_server(int rdset,
if(FLAGS_GET_RCODE(msg->rep->flags) != LDNS_RCODE_NOERROR)
return RESPONSE_TYPE_THROWAWAY;
+ if(msg->rep->an_numrrsets == 0 && msg->rep->ns_numrrsets == 0 &&
+ msg_lame_empty)
+ return RESPONSE_TYPE_LAME;
+
/* Note: TC bit has already been handled */
if(dp) {
@@ -249,13 +257,16 @@ response_type_from_server(int rdset,
* which gives ns==zone delegation from cache
* without AA bit as well, with nodata nosoa*/
/* real answer must be +AA and SOA RFC(2308),
- * so this is wrong, and we SERVFAIL it if
- * this is the only possible reply, if it
- * is misdeployed the THROWAWAY makes us pick
- * the next server from the selection */
- if(msg->rep->an_numrrsets==0 &&
+ * this is picked up as lame_referral by the
+ * sanitize step, so it can spot if there
+ * was data in the answer section before
+ * removal. If such data is then removed we
+ * do not want to turn that answer into lame.
+ * But if it was not there, it can be lame. */
+ if(msg_lame_referral &&
+ msg->rep->an_numrrsets==0 &&
!(msg->rep->flags&BIT_AA) && !rdset)
- return RESPONSE_TYPE_THROWAWAY;
+ return RESPONSE_TYPE_LAME;
return RESPONSE_TYPE_ANSWER;
}
/* If we are getting a referral upwards (or to
diff --git a/iterator/iter_resptype.h b/iterator/iter_resptype.h
index bfd4b664f621..73719abda875 100644
--- a/iterator/iter_resptype.h
+++ b/iterator/iter_resptype.h
@@ -120,10 +120,14 @@ enum response_type response_type_from_cache(struct dns_msg* msg,
* @param dp: The delegation point that was being queried
* when the response was returned.
* @param empty_nodata_found: flag to keep track of empty nodata detection.
+ * @param msg_lame_empty: The scrubber indicates that this empty message
+ * is lame, before it became empty.
+ * @param msg_lame_referral: returned true if the reply has a referral before
+ * scrub.
* @return the response type (CNAME or ANSWER).
*/
enum response_type response_type_from_server(int rdset,
struct dns_msg* msg, struct query_info* request, struct delegpt* dp,
- int* empty_nodata_found);
+ int* empty_nodata_found, int msg_lame_empty, int msg_lame_referral);
#endif /* ITERATOR_ITER_RESPTYPE_H */
diff --git a/iterator/iter_scrub.c b/iterator/iter_scrub.c
index 74a2586402cb..f2f20a5c1ad3 100644
--- a/iterator/iter_scrub.c
+++ b/iterator/iter_scrub.c
@@ -316,6 +316,20 @@ synth_cname_rrset(uint8_t** sname, size_t* snamelen, uint8_t* alias,
return cn;
}
+/** Check if the packet has type NS in answer or authority section */
+static int
+pkt_contains_ns(struct msg_parse* msg)
+{
+ struct rrset_parse* rrset;
+ for(rrset = msg->rrset_first; rrset; rrset = rrset->rrset_all_next) {
+ if(rrset->type == LDNS_RR_TYPE_NS &&
+ (rrset->section == LDNS_SECTION_ANSWER ||
+ rrset->section == LDNS_SECTION_AUTHORITY))
+ return 1;
+ }
+ return 0;
+}
+
/** check if DNAME applies to a name */
static int
pkt_strict_sub(sldns_buffer* pkt, uint8_t* sname, uint8_t* dr)
@@ -394,6 +408,8 @@ shorten_rrset(sldns_buffer* pkt, struct rrset_parse* rrset, int count)
struct rr_parse* rr = rrset->rr_first, *prev = NULL;
if(!rr)
return;
+ if(count < 1)
+ return; /* cannot leave a still-linked rrset_parse with rr_count == 0 */
for(i=0; i<count; i++) {
prev = rr;
rr = rr->next;
@@ -478,6 +494,7 @@ scrub_normalize(sldns_buffer* pkt, struct msg_parse* msg,
size_t snamelen = qinfo->qname_len;
struct rrset_parse* rrset, *prev, *nsset=NULL;
int cname_length = 0; /* number of CNAMEs, or DNAMEs */
+ int has_answer = 0; /* if answer section contains nonCNAME,nonDNAME */
if(FLAGS_GET_RCODE(msg->flags) != LDNS_RCODE_NOERROR &&
FLAGS_GET_RCODE(msg->flags) != LDNS_RCODE_NXDOMAIN &&
@@ -519,6 +536,11 @@ scrub_normalize(sldns_buffer* pkt, struct msg_parse* msg,
(unsigned)rrset->rr_count);
return 0;
}
+ if(has_answer) {
+ remove_rrset("normalize: removing DNAME redirection after answer:",
+ pkt, msg, prev, &rrset);
+ continue;
+ }
if(!synth_cname(sname, snamelen, rrset, alias,
&aliaslen, pkt)) {
verbose(VERB_ALGO, "synthesized CNAME "
@@ -569,6 +591,11 @@ 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;
+ if(has_answer) {
+ remove_rrset("normalize: removing redirection after answer:",
+ pkt, msg, prev, &rrset);
+ continue;
+ }
cname_length++;
/* see if the next one is a DNAME, if so, swap them */
if(nx && nx->section == LDNS_SECTION_ANSWER &&
@@ -647,6 +674,7 @@ scrub_normalize(sldns_buffer* pkt, struct msg_parse* msg,
* will be removed by sanitize, so no additional for them */
if(dname_pkt_compare(pkt, qinfo->qname, rrset->dname) == 0)
mark_additional_rrset(pkt, msg, rrset);
+ has_answer = 1;
prev = rrset;
rrset = rrset->rrset_all_next;
@@ -732,6 +760,11 @@ scrub_normalize(sldns_buffer* pkt, struct msg_parse* msg,
"RRset:", pkt, msg, prev, &rrset);
continue;
}
+ if(ntohs(rrset->rrset_class) != qinfo->qclass) {
+ remove_rrset("normalize: removing other class "
+ "RRset:", pkt, msg, prev, &rrset);
+ continue;
+ }
if(nsset == NULL) {
nsset = rrset;
} else {
@@ -968,12 +1001,20 @@ scrub_sanitize_rr_length(sldns_buffer* pkt, struct msg_parse* msg,
* @param env: module environment with config and cache.
* @param ie: iterator environment with private address data.
* @param qstate: for setting errinf for EDE error messages.
+ * @param pkt_before_NS: if the packet had type NS before scrub. If that
+ * is removed now, that indicates this may have been lame.
+ * @param msg_lame_empty: returned true if the empty packet is lame.
+ * @param msg_lame_referral: returned true if the reply has a referral before
+ * scrub.
+ * @param rdset: if RD bit was sent in query sent by unbound.
* @return 0 on error.
*/
static int
scrub_sanitize(sldns_buffer* pkt, struct msg_parse* msg,
struct query_info* qinfo, uint8_t* zonename, struct module_env* env,
- struct iter_env* ie, struct module_qstate* qstate)
+ struct iter_env* ie, struct module_qstate* qstate,
+ int pkt_before_NS, int* msg_lame_empty, int* msg_lame_referral,
+ int rdset)
{
int del_addi = 0; /* if additional-holding rrsets are deleted, we
do not trust the normalized additional-A-AAAA any more */
@@ -1130,6 +1171,21 @@ scrub_sanitize(sldns_buffer* pkt, struct msg_parse* msg,
prev = rrset;
rrset = rrset->rrset_all_next;
}
+
+ /* If the packet is empty now, but it was not before. And there
+ * was type NS in authority, then that indicates the answer is lame. */
+ if(msg->rrset_first == NULL && pkt_before_NS) {
+ *msg_lame_empty = 1;
+ verbose(VERB_ALGO, "sanitize: empty message had referral to NS before, marked as lame");
+ } else if(pkt_before_NS && msg->an_rrsets==0 &&
+ !(msg->flags&BIT_AA) && !rdset) {
+ /* If the packet is now a referral, not really a nodata,
+ * then if it was also with an empty answer section before,
+ * it is also lame. */
+ *msg_lame_referral = 1;
+ verbose(VERB_ALGO, "sanitize: message has referral not answer, marked as lame");
+ }
+
return 1;
}
@@ -1137,11 +1193,15 @@ int
scrub_message(sldns_buffer* pkt, struct msg_parse* msg,
struct query_info* qinfo, uint8_t* zonename, struct regional* region,
struct module_env* env, struct module_qstate* qstate,
- struct iter_env* ie)
+ struct iter_env* ie, int* msg_lame_empty, int* msg_lame_referral,
+ int rdset)
{
+ int pkt_before_NS;
/* basic sanity checks */
log_nametypeclass(VERB_ALGO, "scrub for", zonename, LDNS_RR_TYPE_NS,
qinfo->qclass);
+ *msg_lame_empty = 0;
+ *msg_lame_referral = 0;
if(msg->qdcount > 1)
return 0;
if( !(msg->flags&BIT_QR) )
@@ -1166,11 +1226,21 @@ scrub_message(sldns_buffer* pkt, struct msg_parse* msg,
return 0;
}
+ /* If the packet contains type NS in authority before scrub,
+ * like a self referral. With the answer section empty, it
+ * was not AA, the query was not sent with RD, with NS in auth,
+ * and no SOA in auth. For a negative answer, type SOA is present.
+ * This detects certain lameness if after has removed that. */
+ pkt_before_NS = msg->an_rrsets == 0 &&
+ !(msg->flags&BIT_AA) && !rdset &&
+ pkt_contains_ns(msg) && !soa_in_auth(msg);
+
/* normalize the response, this cleans up the additional. */
if(!scrub_normalize(pkt, msg, qinfo, region, env, zonename))
return 0;
/* delete all out-of-zone information */
- if(!scrub_sanitize(pkt, msg, qinfo, zonename, env, ie, qstate))
+ if(!scrub_sanitize(pkt, msg, qinfo, zonename, env, ie, qstate,
+ pkt_before_NS, msg_lame_empty, msg_lame_referral, rdset))
return 0;
return 1;
}
diff --git a/iterator/iter_scrub.h b/iterator/iter_scrub.h
index 4d6ce7166516..6b40e6c574c9 100644
--- a/iterator/iter_scrub.h
+++ b/iterator/iter_scrub.h
@@ -62,11 +62,16 @@ struct module_qstate;
* @param env: module environment with config settings and cache.
* @param qstate: for setting errinf for EDE error messages.
* @param ie: iterator module environment data.
+ * @param msg_lame_empty: returned true if the empty packet is lame.
+ * @param msg_lame_referral: returned true if the reply has a referral before
+ * scrub.
+ * @param rdset: if RD bit was sent in query sent by unbound.
* @return: false if the message is total waste. true if scrubbed with success.
*/
int scrub_message(struct sldns_buffer* pkt, struct msg_parse* msg,
struct query_info* qinfo, uint8_t* zonename, struct regional* regional,
struct module_env* env, struct module_qstate* qstate,
- struct iter_env* ie);
+ struct iter_env* ie, int* msg_lame_empty, int* msg_lame_referral,
+ int rdset);
#endif /* ITERATOR_ITER_SCRUB_H */
diff --git a/iterator/iter_utils.c b/iterator/iter_utils.c
index cc09fa52461e..e848e83ba812 100644
--- a/iterator/iter_utils.c
+++ b/iterator/iter_utils.c
@@ -1313,7 +1313,8 @@ iter_lookup_parent_NS_from_cache(struct module_env* env, struct delegpt* dp,
log_rrset_key(VERB_ALGO, "found parent-side NS in cache", akey);
dp->has_parent_side_NS = 1;
/* and mark the new names as lame */
- if(!delegpt_rrset_add_ns(dp, region, akey, 1)) {
+ if(!delegpt_rrset_add_ns(dp, region, akey, 1,
+ deleg_port_number(env))) {
lock_rw_unlock(&akey->entry.lock);
return 0;
}
@@ -1703,3 +1704,11 @@ iter_make_minimal(struct reply_info* rep)
rep->ar_numrrsets = 0;
rep->rrset_count -= rem;
}
+
+int
+deleg_port_number(struct module_env* env)
+{
+ if(env->cfg->ssl_upstream)
+ return env->cfg->ssl_port;
+ return -1;
+}
diff --git a/iterator/iter_utils.h b/iterator/iter_utils.h
index f7f374742803..9fb361ab5298 100644
--- a/iterator/iter_utils.h
+++ b/iterator/iter_utils.h
@@ -483,4 +483,7 @@ void limit_nsec_ttl(struct dns_msg* msg);
*/
void iter_make_minimal(struct reply_info* rep);
+/** See if we need a different port number */
+int deleg_port_number(struct module_env* env);
+
#endif /* ITERATOR_ITER_UTILS_H */
diff --git a/iterator/iterator.c b/iterator/iterator.c
index 78cd9485bad4..cadb95ebd0ab 100644
--- a/iterator/iterator.c
+++ b/iterator/iterator.c
@@ -1511,6 +1511,7 @@ processInitRequest(struct module_qstate* qstate, struct iter_qstate* iq,
verbose(VERB_ALGO, "no-cache set, going to the network");
qstate->no_cache_lookup = 1;
qstate->no_cache_store = 1;
+ qstate->fwd_stub_no_cache = 1;
msg = NULL;
} else if(qstate->blacklist) {
/* if cache, or anything else, was blacklisted then
@@ -1530,7 +1531,7 @@ processInitRequest(struct module_qstate* qstate, struct iter_qstate* iq,
msg = val_neg_getmsg(qstate->env->neg_cache, &iq->qchase,
qstate->region, qstate->env->rrset_cache,
qstate->env->scratch_buffer,
- *qstate->env->now, 1/*add SOA*/, NULL,
+ *qstate->env->now, 1/*add SOA*/, dpname,
qstate->env->cfg);
}
/* item taken from cache does not match our query name, thus
@@ -2391,6 +2392,12 @@ processDSNSFind(struct module_qstate* qstate, struct iter_qstate* iq, int id)
/* go up one (more) step, until we hit the dp, if so, end */
dname_remove_label(&iq->dsns_point, &iq->dsns_point_len);
+ if(++iq->dsns_count > MAX_DSNS_FIND_COUNT) {
+ verbose(VERB_QUERY, "DS NS search exceeded %d labels",
+ MAX_DSNS_FIND_COUNT);
+ errinf(qstate, "DS NS search exceeded label limit");
+ return error_response_cache(qstate, id, LDNS_RCODE_SERVFAIL);
+ }
if(query_dname_compare(iq->dsns_point, iq->dp->name) == 0) {
/* there was no inbetween nameserver, use the old delegation
* point again. And this time, because dsns_point is nonNULL
@@ -3073,7 +3080,9 @@ processQueryTargets(struct module_qstate* qstate, struct iter_qstate* iq,
/* 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);
+ sq_check_ratelimit = ((!(iq->chase_flags & BIT_RD) &&
+ !iq->ratelimit_ok));
+ iq->ratelimit_incremented = 0;
/* We have a valid target. */
if(verbosity >= VERB_QUERY) {
log_query_info(VERB_QUERY, "sending query:", &iq->qinfo_out);
@@ -3099,7 +3108,8 @@ processQueryTargets(struct module_qstate* qstate, struct iter_qstate* iq,
iq->dp->name, iq->dp->namelen,
(iq->dp->tcp_upstream || qstate->env->cfg->tcp_upstream),
(iq->dp->ssl_upstream || qstate->env->cfg->ssl_upstream),
- target->tls_auth_name, qstate, &sq_was_ratelimited);
+ target->tls_auth_name, qstate, &sq_was_ratelimited,
+ &iq->ratelimit_incremented);
if(!outq) {
if(sq_was_ratelimited) {
lock_basic_lock(&ie->queries_ratelimit_lock);
@@ -3137,7 +3147,6 @@ find_NS(struct reply_info* rep, size_t from, size_t to)
return NULL;
}
-
/**
* Process the query response. All queries end up at this state first. This
* process generally consists of analyzing the response and routing the
@@ -3179,7 +3188,8 @@ processQueryResponse(struct module_qstate* qstate, struct iter_qstate* iq,
orig_empty_nodata_found = iq->empty_nodata_found;
type = response_type_from_server(
(int)((iq->chase_flags&BIT_RD) || iq->chase_to_rd),
- iq->response, &iq->qinfo_out, iq->dp, &iq->empty_nodata_found);
+ iq->response, &iq->qinfo_out, iq->dp, &iq->empty_nodata_found,
+ iq->msg_lame_empty, iq->msg_lame_referral);
iq->chase_to_rd = 0;
/* remove TC flag, if this is erroneously set by TCP upstream */
iq->response->rep->flags &= ~BIT_TC;
@@ -3457,7 +3467,14 @@ processQueryResponse(struct module_qstate* qstate, struct iter_qstate* iq,
iq->deleg_msg = iq->response;
/* Keep current delegation point for label comparison */
old_dp = iq->dp;
- iq->dp = delegpt_from_message(iq->response, qstate->region);
+ /* A referral reply is "pleasant", refund the
+ * parent dp's rate charge before descending to the child. */
+ if(iq->ratelimit_incremented)
+ infra_ratelimit_dec(qstate->env->infra_cache,
+ old_dp->name, old_dp->namelen,
+ *qstate->env->now);
+ iq->dp = delegpt_from_message(iq->response, qstate->region,
+ deleg_port_number(qstate->env));
if (qstate->env->cfg->qname_minimisation)
iq->minimisation_state = INIT_MINIMISE_STATE;
if(!iq->dp) {
@@ -3734,7 +3751,8 @@ prime_supers(struct module_qstate* qstate, int id, struct module_qstate* forq)
log_assert(qstate->is_priming || foriq->wait_priming_stub);
log_assert(qstate->return_rcode == LDNS_RCODE_NOERROR);
/* Convert our response to a delegation point */
- dp = delegpt_from_message(qstate->return_msg, forq->region);
+ dp = delegpt_from_message(qstate->return_msg, forq->region,
+ deleg_port_number(forq->env));
if(!dp) {
/* if there is no convertible delegation point, then
* the ANSWER type was (presumably) a negative answer. */
@@ -3785,7 +3803,8 @@ processPrimeResponse(struct module_qstate* qstate, int id)
iq->response->rep->flags &= ~(BIT_RD|BIT_RA); /* ignore rec-lame */
type = response_type_from_server(
(int)((iq->chase_flags&BIT_RD) || iq->chase_to_rd),
- iq->response, &iq->qchase, iq->dp, NULL);
+ iq->response, &iq->qchase, iq->dp, NULL, iq->msg_lame_empty,
+ iq->msg_lame_referral);
if(type == RESPONSE_TYPE_ANSWER) {
qstate->return_rcode = LDNS_RCODE_NOERROR;
qstate->return_msg = iq->response;
@@ -3949,7 +3968,8 @@ processDSNSResponse(struct module_qstate* qstate, int id,
/* else, store as DP and continue at querytargets */
foriq->state = QUERYTARGETS_STATE;
- foriq->dp = delegpt_from_message(qstate->return_msg, forq->region);
+ foriq->dp = delegpt_from_message(qstate->return_msg, forq->region,
+ deleg_port_number(forq->env));
if(!foriq->dp) {
log_err("out of memory in dsns dp alloc");
errinf(qstate, "malloc failure, in DS search");
@@ -3998,7 +4018,7 @@ processClassResponse(struct module_qstate* qstate, int id,
/* if there are records, copy RCODE */
/* lower sec_state if this message is lower */
if(from->rep->rrset_count != 0) {
- size_t n = from->rep->rrset_count+to->rep->rrset_count;
+ size_t i, n = from->rep->rrset_count+to->rep->rrset_count;
struct ub_packed_rrset_key** dest, **d;
/* copy appropriate rcode */
to->rep->flags = from->rep->flags;
@@ -4020,24 +4040,49 @@ processClassResponse(struct module_qstate* qstate, int id,
memcpy(dest, to->rep->rrsets, to->rep->an_numrrsets
* sizeof(dest[0]));
dest += to->rep->an_numrrsets;
- memcpy(dest, from->rep->rrsets, from->rep->an_numrrsets
- * sizeof(dest[0]));
+ for(i=0; i<from->rep->an_numrrsets; i++) {
+ dest[i] = packed_rrset_copy_region(
+ from->rep->rrsets[i], forq->region, 0);
+ if(!dest[i]) {
+ log_err("malloc failed in collect ANY");
+ foriq->state = FINISHED_STATE;
+ return;
+ }
+ }
dest += from->rep->an_numrrsets;
/* copy NS */
memcpy(dest, to->rep->rrsets+to->rep->an_numrrsets,
to->rep->ns_numrrsets * sizeof(dest[0]));
dest += to->rep->ns_numrrsets;
- memcpy(dest, from->rep->rrsets+from->rep->an_numrrsets,
- from->rep->ns_numrrsets * sizeof(dest[0]));
+ for(i=0; i<from->rep->ns_numrrsets; i++) {
+ dest[i] = packed_rrset_copy_region(
+ from->rep->rrsets[
+ from->rep->an_numrrsets+i],
+ forq->region, 0);
+ if(!dest[i]) {
+ log_err("malloc failed in collect ANY");
+ foriq->state = FINISHED_STATE;
+ return;
+ }
+ }
dest += from->rep->ns_numrrsets;
/* copy AR */
memcpy(dest, to->rep->rrsets+to->rep->an_numrrsets+
to->rep->ns_numrrsets,
to->rep->ar_numrrsets * sizeof(dest[0]));
dest += to->rep->ar_numrrsets;
- memcpy(dest, from->rep->rrsets+from->rep->an_numrrsets+
- from->rep->ns_numrrsets,
- from->rep->ar_numrrsets * sizeof(dest[0]));
+ for(i=0; i<from->rep->ar_numrrsets; i++) {
+ dest[i] = packed_rrset_copy_region(
+ from->rep->rrsets[
+ from->rep->an_numrrsets+
+ from->rep->ns_numrrsets+i],
+ forq->region, 0);
+ if(!dest[i]) {
+ log_err("malloc failed in collect ANY");
+ foriq->state = FINISHED_STATE;
+ return;
+ }
+ }
/* update counts */
to->rep->rrsets = d;
to->rep->an_numrrsets += from->rep->an_numrrsets;
@@ -4395,7 +4440,10 @@ process_response(struct module_qstate* qstate, struct iter_qstate* iq,
/* normalize and sanitize: easy to delete items from linked lists */
if(!scrub_message(pkt, prs, &iq->qinfo_out, iq->dp->name,
- qstate->env->scratch, qstate->env, qstate, ie)) {
+ qstate->env->scratch, qstate->env, qstate, ie,
+ &iq->msg_lame_empty, &iq->msg_lame_referral,
+ (int)((iq->chase_flags&BIT_RD) || iq->chase_to_rd)
+ )) {
/* if 0x20 enabled, start fallback, but we have no message */
if(event == module_event_capsfail && !iq->caps_fallback) {
iq->caps_fallback = 1;
diff --git a/iterator/iterator.h b/iterator/iterator.h
index ae4b4e45170a..df5449c52533 100644
--- a/iterator/iterator.h
+++ b/iterator/iterator.h
@@ -104,6 +104,11 @@ extern int BLACKLIST_PENALTY;
#define RTT_BAND 400
/** Number of retries for empty nodata packets before it is accepted. */
#define EMPTY_NODATA_RETRY_COUNT 2
+/** max label-strip iterations in DSNS_FIND_STATE (RFC 4035 4.2 parent-NS
+ * search) before giving up; bounds upstream NS sends per client DS.
+ * Means the max number of labels in grandchild to the grandparent zone that
+ * are co-hosted. */
+#define MAX_DSNS_FIND_COUNT 20
/**
* Iterator global state for nat64.
@@ -375,6 +380,10 @@ struct iter_qstate {
/** if true, already tested for ratelimiting and passed the test */
int ratelimit_ok;
+ /** If the last query, that may be a referral, incremented the
+ * ratelimit counter. */
+ int ratelimit_incremented;
+
/**
* The query must store NS records from referrals as parentside RRs
* Enabled once it hits resolution problems, to throttle retries.
@@ -399,6 +408,8 @@ struct iter_qstate {
uint8_t* dsns_point;
/** length of the dname in dsns_point */
size_t dsns_point_len;
+ /** number of label-strip iterations performed in DSNS_FIND_STATE */
+ int dsns_count;
/**
* expected dnssec information for this iteration step.
@@ -434,6 +445,13 @@ struct iter_qstate {
* already so that it is accepted later. */
int empty_nodata_found;
+ /** Store if the answer was empty, but lame, before it became empty.*/
+ int msg_lame_empty;
+
+ /** Store if the answer was a referral, to self, before scrub. So the
+ * it is not some sort of answer. */
+ int msg_lame_referral;
+
/** list of pending queries to authoritative servers. */
struct outbound_list outlist;
diff --git a/libunbound/context.h b/libunbound/context.h
index c0fc80e57be4..090df345b0e7 100644
--- a/libunbound/context.h
+++ b/libunbound/context.h
@@ -167,6 +167,8 @@ struct ctx_query {
ub_event_callback_type cb_event;
/** for async query, the callback user arg */
void* cb_arg;
+ /** for async query the unique info */
+ void* unique_info;
/** answer message, result from resolver lookup. */
uint8_t* msg;
diff --git a/libunbound/libunbound.c b/libunbound/libunbound.c
index 9c6a3e309717..140a4523395d 100644
--- a/libunbound/libunbound.c
+++ b/libunbound/libunbound.c
@@ -571,6 +571,8 @@ ub_ctx_async(struct ub_ctx* ctx, int dothread)
int
ub_poll(struct ub_ctx* ctx)
{
+ if(!ctx || ctx->event_base)
+ return UB_INITFAIL;
/* no need to hold lock while testing for readability. */
return tube_poll(ctx->rr_pipe);
}
@@ -578,6 +580,8 @@ ub_poll(struct ub_ctx* ctx)
int
ub_fd(struct ub_ctx* ctx)
{
+ if(!ctx || ctx->event_base)
+ return -1;
return tube_read_fd(ctx->rr_pipe);
}
@@ -672,6 +676,8 @@ ub_process(struct ub_ctx* ctx)
int r;
uint8_t* msg;
uint32_t len;
+ if(!ctx || ctx->event_base)
+ return UB_INITFAIL;
while(1) {
msg = NULL;
lock_basic_lock(&ctx->rrpipe_lock);
@@ -700,6 +706,8 @@ ub_wait(struct ub_ctx* ctx)
int r;
uint8_t* msg;
uint32_t len;
+ if(!ctx || ctx->event_base)
+ return UB_INITFAIL;
/* this is basically the same loop as _process(), but with changes.
* holds the rrpipe lock and waits with tube_wait */
while(1) {
@@ -837,6 +845,8 @@ ub_resolve_async(struct ub_ctx* ctx, const char* name, int rrtype,
struct ctx_query* q;
uint8_t* msg = NULL;
uint32_t len = 0;
+ if(!ctx || ctx->event_base)
+ return UB_INITFAIL;
if(async_id)
*async_id = 0;
@@ -1467,8 +1477,15 @@ ub_ctx_set_event(struct ub_ctx* ctx, struct event_base* base) {
lock_basic_lock(&ctx->cfglock);
/* destroy the current worker - safe to pass in NULL */
+
+ /* Unlock the cfglock during libworker_delete_event, since it
+ * calls context_release_alloc, that wants to lock cfglock again.
+ * Since the event base is used from one thread, the one that
+ * called this function, it is safe to do so. */
+ lock_basic_unlock(&ctx->cfglock);
libworker_delete_event(ctx->event_worker);
ctx->event_worker = NULL;
+ lock_basic_lock(&ctx->cfglock);
new_base = ub_libevent_event_base(base);
if (new_base)
ctx->event_base = new_base;
diff --git a/libunbound/libworker.c b/libunbound/libworker.c
index d70527f59f66..2d6029f0c7ed 100644
--- a/libunbound/libworker.c
+++ b/libunbound/libworker.c
@@ -651,7 +651,8 @@ int libworker_fg(struct ub_ctx* ctx, struct ctx_query* q)
}
/* process new query */
if(!mesh_new_callback(w->env->mesh, &qinfo, qflags, &edns,
- w->back->udp_buff, qid, libworker_fg_done_cb, q, 0)) {
+ w->back->udp_buff, qid, libworker_fg_done_cb, q, 0,
+ &q->unique_info)) {
free(qinfo.qname);
return UB_NOMEM;
}
@@ -732,7 +733,8 @@ int libworker_attach_mesh(struct ub_ctx* ctx, struct ctx_query* q,
if(async_id)
*async_id = q->querynum;
if(!mesh_new_callback(w->env->mesh, &qinfo, qflags, &edns,
- w->back->udp_buff, qid, libworker_event_done_cb, q, 0)) {
+ w->back->udp_buff, qid, libworker_event_done_cb, q, 0,
+ &q->unique_info)) {
free(qinfo.qname);
return UB_NOMEM;
}
@@ -870,7 +872,8 @@ handle_newq(struct libworker* w, uint8_t* buf, uint32_t len)
q->w = w;
/* process new query */
if(!mesh_new_callback(w->env->mesh, &qinfo, qflags, &edns,
- w->back->udp_buff, qid, libworker_bg_done_cb, q, 0)) {
+ w->back->udp_buff, qid, libworker_bg_done_cb, q, 0,
+ &q->unique_info)) {
add_bg_result(w, q, NULL, UB_NOMEM, NULL, 0);
}
free(qinfo.qname);
@@ -888,7 +891,8 @@ struct outbound_entry* libworker_send_query(struct query_info* qinfo,
int check_ratelimit,
struct sockaddr_storage* addr, socklen_t addrlen, uint8_t* zone,
size_t zonelen, int tcp_upstream, int ssl_upstream, char* tls_auth_name,
- struct module_qstate* q, int* was_ratelimited)
+ struct module_qstate* q, int* was_ratelimited,
+ int* ratelimit_incremented)
{
struct libworker* w = (struct libworker*)q->env->worker;
struct outbound_entry* e = (struct outbound_entry*)regional_alloc(
@@ -900,7 +904,7 @@ struct outbound_entry* libworker_send_query(struct query_info* qinfo,
want_dnssec, nocaps, check_ratelimit, tcp_upstream, ssl_upstream,
tls_auth_name, addr, addrlen, zone, zonelen, q,
libworker_handle_service_reply, e, w->back->udp_buff, q->env,
- was_ratelimited);
+ was_ratelimited, ratelimit_incremented);
if(!e->qsent) {
return NULL;
}
@@ -985,7 +989,8 @@ struct outbound_entry* worker_send_query(struct query_info* ATTR_UNUSED(qinfo),
struct sockaddr_storage* ATTR_UNUSED(addr), socklen_t ATTR_UNUSED(addrlen),
uint8_t* ATTR_UNUSED(zone), size_t ATTR_UNUSED(zonelen), int ATTR_UNUSED(tcp_upstream),
int ATTR_UNUSED(ssl_upstream), char* ATTR_UNUSED(tls_auth_name),
- struct module_qstate* ATTR_UNUSED(q), int* ATTR_UNUSED(was_ratelimited))
+ struct module_qstate* ATTR_UNUSED(q), int* ATTR_UNUSED(was_ratelimited),
+ int* ATTR_UNUSED(ratelimit_incremented))
{
log_assert(0);
return 0;
diff --git a/libunbound/remote.h b/libunbound/remote.h
new file mode 100644
index 000000000000..4730c8e49fc5
--- /dev/null
+++ b/libunbound/remote.h
@@ -0,0 +1,65 @@
+/*
+ * libunbound/remote.h - prototypes for remote control methods.
+ *
+ * Copyright (c) 2026, NLnet Labs. All rights reserved.
+ *
+ * This software is open source.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * Neither the name of the NLNET LABS nor the names of its contributors may
+ * be used to endorse or promote products derived from this software without
+ * specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+ * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/**
+ * \file
+ *
+ * This file declares the methods that must be implemented to use the
+ * remote control service.
+ */
+
+#ifndef LIBUNBOUND_REMOTE_H
+#define LIBUNBOUND_REMOTE_H
+
+struct comm_reply;
+struct comm_point;
+
+/** fast reload thread commands to remote service thread event callback */
+void fast_reload_service_cb(int fd, short bits, void* arg);
+
+/** fast reload callback for the remote control client connection */
+int fast_reload_client_callback(struct comm_point* c, void* arg, int err,
+ struct comm_reply* rep);
+
+/** handle remote control accept callbacks */
+int remote_accept_callback(struct comm_point*, void*, int, struct comm_reply*);
+
+/** handle remote control data callbacks */
+int remote_control_callback(struct comm_point*, void*, int, struct comm_reply*);
+
+/** routine to printout option values over SSL */
+void remote_get_opt_ssl(char* line, void* arg);
+
+#endif /* LIBUNBOUND_REMOTE_H */
diff --git a/libunbound/worker.h b/libunbound/worker.h
index 0fa5bfa99430..48f9ee15be17 100644
--- a/libunbound/worker.h
+++ b/libunbound/worker.h
@@ -70,6 +70,8 @@ struct query_info;
* @param q: which query state to reactivate upon return.
* @param was_ratelimited: it will signal back if the query failed to pass the
* ratelimit check.
+ * @param ratelimit_incremented: set to true if the ratelimit counter
+ * was increased.
* @return: false on failure (memory or socket related). no query was
* sent.
*/
@@ -78,7 +80,8 @@ struct outbound_entry* libworker_send_query(struct query_info* qinfo,
int check_ratelimit,
struct sockaddr_storage* addr, socklen_t addrlen, uint8_t* zone,
size_t zonelen, int tcp_upstream, int ssl_upstream, char* tls_auth_name,
- struct module_qstate* q, int* was_ratelimited);
+ struct module_qstate* q, int* was_ratelimited,
+ int* ratelimit_incremented);
/** process incoming serviced query replies from the network */
int libworker_handle_service_reply(struct comm_point* c, void* arg, int error,
@@ -126,6 +129,8 @@ void worker_sighandler(int sig, void* arg);
* @param q: which query state to reactivate upon return.
* @param was_ratelimited: it will signal back if the query failed to pass the
* ratelimit check.
+ * @param ratelimit_incremented: set to true if the ratelimit counter
+ * was increased.
* @return: false on failure (memory or socket related). no query was
* sent.
*/
@@ -134,7 +139,8 @@ struct outbound_entry* worker_send_query(struct query_info* qinfo,
int check_ratelimit,
struct sockaddr_storage* addr, socklen_t addrlen, uint8_t* zone,
size_t zonelen, int tcp_upstream, int ssl_upstream, char* tls_auth_name,
- struct module_qstate* q, int* was_ratelimited);
+ struct module_qstate* q, int* was_ratelimited,
+ int* ratelimit_incremented);
/**
* process control messages from the main thread. Frees the control
@@ -171,13 +177,4 @@ void worker_start_accept(void* arg);
/** stop accept callback handler */
void worker_stop_accept(void* arg);
-/** handle remote control accept callbacks */
-int remote_accept_callback(struct comm_point*, void*, int, struct comm_reply*);
-
-/** handle remote control data callbacks */
-int remote_control_callback(struct comm_point*, void*, int, struct comm_reply*);
-
-/** routine to printout option values over SSL */
-void remote_get_opt_ssl(char* line, void* arg);
-
#endif /* LIBUNBOUND_WORKER_H */
diff --git a/pythonmod/interface.i b/pythonmod/interface.i
index 7ac868df5002..735f2ed50ea0 100644
--- a/pythonmod/interface.i
+++ b/pythonmod/interface.i
@@ -729,7 +729,8 @@ struct module_env {
int check_ratelimit,
struct sockaddr_storage* addr, socklen_t addrlen,
uint8_t* zone, size_t zonelen, int tcp_upstream, int ssl_upstream,
- char* tls_auth_name, struct module_qstate* q, int* was_ratelimited);
+ char* tls_auth_name, struct module_qstate* q, int* was_ratelimited,
+ int* ratelimit_incremented);
void (*detach_subs)(struct module_qstate* qstate);
int (*attach_sub)(struct module_qstate* qstate,
struct query_info* qinfo, struct respip_client_info* cinfo,
diff --git a/pythonmod/pythonmod.c b/pythonmod/pythonmod.c
index 7cd9a7543fdd..045dd1bbd09e 100644
--- a/pythonmod/pythonmod.c
+++ b/pythonmod/pythonmod.c
@@ -487,10 +487,23 @@ int pythonmod_init(struct module_env* env, int id)
/* for python 3.9 and newer */
char* fstr = NULL;
size_t flen = 0;
+ long pos = 0;
log_err("pythonmod: can't parse Python script %s", pe->fname);
/* print the error to logs too, run it again */
fseek(script_py, 0, SEEK_END);
- flen = (size_t)ftell(script_py);
+ pos = ftell(script_py);
+ if (pos == -1L) {
+ log_err("ftell failed to print parse error: %s: %s",
+ pe->fname, strerror(errno));
+ goto fail_close_file;
+ }
+ flen = (size_t)pos;
+#ifdef SIZE_MAX
+ if(flen > SIZE_MAX-2) {
+ log_err("script file too large");
+ goto fail_close_file;
+ }
+#endif
fstr = malloc(flen+1);
if(!fstr) {
log_err("malloc failure to print parse error");
diff --git a/respip/respip.c b/respip/respip.c
index 0a7dedd07ab6..fc9de4c0120e 100644
--- a/respip/respip.c
+++ b/respip/respip.c
@@ -899,27 +899,34 @@ respip_rewrite_reply(const struct query_info* qinfo,
int rpz_cname_override = 0;
char* log_name = NULL;
- if(!cinfo)
- goto done;
- ctaglist = cinfo->taglist;
- ctaglen = cinfo->taglen;
- tag_actions = cinfo->tag_actions;
- tag_actions_size = cinfo->tag_actions_size;
- tag_datas = cinfo->tag_datas;
- tag_datas_size = cinfo->tag_datas_size;
- if(cinfo->view) {
- view = cinfo->view;
- lock_rw_rdlock(&view->lock);
- } else if(cinfo->view_name) {
- view = views_find_view(views, cinfo->view_name, 0);
- if(!view) {
- /* If the view no longer exists, the rewrite can not
- * be processed further. */
- verbose(VERB_ALGO, "respip: failed because view %s no "
- "longer exists", cinfo->view_name);
- return 0;
+ if(!cinfo) {
+ /* Internal mesh sub-query (e.g. dns64 A lookup): no
+ * per-client view/tags, but global response-ip and RPZ
+ * rpz-ip must still apply. */
+ ctaglist = NULL; ctaglen = 0;
+ tag_actions = NULL; tag_actions_size = 0;
+ tag_datas = NULL; tag_datas_size = 0;
+ } else {
+ ctaglist = cinfo->taglist;
+ ctaglen = cinfo->taglen;
+ tag_actions = cinfo->tag_actions;
+ tag_actions_size = cinfo->tag_actions_size;
+ tag_datas = cinfo->tag_datas;
+ tag_datas_size = cinfo->tag_datas_size;
+ if(cinfo->view) {
+ view = cinfo->view;
+ lock_rw_rdlock(&view->lock);
+ } else if(cinfo->view_name) {
+ view = views_find_view(views, cinfo->view_name, 0);
+ if(!view) {
+ /* If the view no longer exists, the rewrite can not
+ * be processed further. */
+ verbose(VERB_ALGO, "respip: failed because view %s no "
+ "longer exists", cinfo->view_name);
+ return 0;
+ }
+ /* The view is rdlocked by views_find_view. */
}
- /* The view is rdlocked by views_find_view. */
}
log_assert(ipset);
@@ -1157,8 +1164,10 @@ respip_operate(struct module_qstate* qstate, enum module_ev event, int id,
* clients. */
qstate->is_drop = 1;
} else if(alias_rrset) {
- if(!generate_cname_request(qstate, alias_rrset))
+ if(!generate_cname_request(qstate, alias_rrset)) {
+ errinf(qstate, "Could not generate CNAME request");
goto servfail;
+ }
next_state = module_wait_subquery;
}
qstate->return_msg->rep = new_rep;
@@ -1172,6 +1181,7 @@ respip_operate(struct module_qstate* qstate, enum module_ev event, int id,
servfail:
qstate->return_rcode = LDNS_RCODE_SERVFAIL;
qstate->return_msg = NULL;
+ qstate->ext_state[id] = module_finished;
}
int
@@ -1268,6 +1278,7 @@ respip_inform_super(struct module_qstate* qstate, int id,
return;
fail:
+ errinf(super, "CNAME lookup failed");
super->return_rcode = LDNS_RCODE_SERVFAIL;
super->return_msg = NULL;
return;
diff --git a/services/authzone.c b/services/authzone.c
index e7a55391650d..72b37fef9e79 100644
--- a/services/authzone.c
+++ b/services/authzone.c
@@ -55,6 +55,7 @@
#include "util/log.h"
#include "util/module.h"
#include "util/random.h"
+#include "util/timeval_func.h"
#include "services/cache/dns.h"
#include "services/outside_network.h"
#include "services/listen_dnsport.h"
@@ -95,6 +96,8 @@
/** number of timeouts before we fallback from IXFR to AXFR,
* because some versions of servers (eg. dnsmasq) drop IXFR packets. */
#define NUM_TIMEOUTS_FALLBACK_IXFR 3
+/** number of IXFRs before an AXFR is performed, to consolidate RPZ memory. */
+#define NUM_IXFR_BEFORE_AXFR 5
/** pick up nextprobe task to start waiting to perform transfer actions */
static void xfr_set_timeout(struct auth_xfer* xfr, struct module_env* env,
@@ -106,6 +109,9 @@ static void xfr_probe_send_or_end(struct auth_xfer* xfr,
* or transfer task if nothing to probe, or false if already in progress */
static int xfr_start_probe(struct auth_xfer* xfr, struct module_env* env,
struct auth_master* spec);
+/** copy the master addresses from the task_probe lookups to the allow_notify
+ * list of masters */
+static void probe_copy_masters_for_allow_notify(struct auth_xfer* xfr);
/** delete xfer structure (not its tree entry) */
void auth_xfer_delete(struct auth_xfer* xfr);
@@ -432,7 +438,12 @@ auth_zone_create(struct auth_zones* az, uint8_t* nm, size_t nmlen,
rbtree_init(&z->data, &auth_data_cmp);
lock_rw_init(&z->lock);
lock_protect(&z->lock, &z->name, sizeof(*z)-sizeof(rbnode_type)-
- sizeof(&z->rpz_az_next)-sizeof(&z->rpz_az_prev));
+ sizeof(z->rpz_az_next)-sizeof(z->rpz_az_prev)-
+ sizeof(z->max_transfer_size)-sizeof(z->max_transfer_size));
+ lock_protect(&z->lock, &z->max_transfer_size,
+ sizeof(z->max_transfer_size));
+ lock_protect(&z->lock, &z->max_transfer_time,
+ sizeof(z->max_transfer_time));
lock_rw_wrlock(&z->lock);
/* z lock protects all, except rbtree itself and the rpz linked list
* pointers, which are protected using az->lock */
@@ -1175,6 +1186,22 @@ az_insert_rr(struct auth_zone* z, uint8_t* rr, size_t rr_len,
log_err("wrong class for RR");
return 0;
}
+ if(rr_type == LDNS_RR_TYPE_A && rdatalen != 6 /* 2 + 4 */) {
+ log_err("malformed A record");
+ return 0;
+ } else if(rr_type == LDNS_RR_TYPE_AAAA && rdatalen != 18 /* 2 + 16 */) {
+ log_err("malformed AAAA record");
+ return 0;
+ }
+ if(!dname_subdomain_c(dname, z->name)) {
+ char nm[LDNS_MAX_DOMAINLEN], zn[LDNS_MAX_DOMAINLEN];
+ dname_str(dname, nm);
+ dname_str(z->name, zn);
+ verbose(VERB_ALGO, "auth-zone %s: dropping out-of-zone RR "
+ "%s", zn, nm);
+ if(duplicate) *duplicate=1; /* treat as bad insert */
+ return 1;
+ }
if(!(node=az_domain_find_or_create(z, dname, dname_len))) {
log_err("cannot create domain");
return 0;
@@ -1182,6 +1209,10 @@ az_insert_rr(struct auth_zone* z, uint8_t* rr, size_t rr_len,
if(!az_domain_add_rr(node, rr_type, rr_ttl, rdata, rdatalen,
duplicate)) {
log_err("cannot add RR to domain");
+ if(node->rrsets == NULL) {
+ (void)rbtree_delete(&z->data, node);
+ auth_data_delete(node);
+ }
return 0;
}
if(z->rpz) {
@@ -1505,6 +1536,11 @@ az_parse_file(struct auth_zone* z, FILE* in, uint8_t* rr, size_t rrbuflen,
"exceeded", fname, state->lineno);
return 0;
}
+ /* A $INCLUDE is not expected for a secondary zone. */
+ if(z->zone_is_slave) {
+ log_err("%s:%d $INCLUDE not allowed for secondary zone", fname, state->lineno);
+ return 0;
+ }
/* skip spaces */
while(*incfile == ' ' || *incfile == '\t')
incfile++;
@@ -1570,6 +1606,16 @@ az_parse_file(struct auth_zone* z, FILE* in, uint8_t* rr, size_t rrbuflen,
return 1;
}
+void auth_zone_clear_data(struct auth_zone* z)
+{
+ /* clear the data tree */
+ traverse_postorder(&z->data, auth_data_del, NULL);
+ rbtree_init(&z->data, &auth_data_cmp);
+ /* clear the RPZ policies */
+ if(z->rpz)
+ rpz_clear(z->rpz);
+}
+
int
auth_zone_read_zonefile(struct auth_zone* z, struct config_file* cfg)
{
@@ -1592,10 +1638,16 @@ auth_zone_read_zonefile(struct auth_zone* z, struct config_file* cfg)
in = fopen(zfilename, "r");
if(!in) {
char* n = sldns_wire2str_dname(z->name, z->namelen);
- if(z->zone_is_slave && errno == ENOENT) {
- /* we fetch the zone contents later, no file yet */
- verbose(VERB_ALGO, "no zonefile %s for %s",
- zfilename, n?n:"error");
+ if(errno == ENOENT) {
+ /* For a secondary, fetch the zone contents later, no
+ * file yet. For a primary, no way to fetch the zone,
+ * so warn. */
+ if(z->zone_is_slave)
+ verbose(VERB_ALGO, "no zonefile %s for %s",
+ zfilename, n?n:"error");
+ else
+ log_warn("no zonefile %s for %s",
+ zfilename, n?n:"error");
free(n);
return 1;
}
@@ -1798,9 +1850,11 @@ auth_zones_read_zones(struct auth_zones* az, struct config_file* cfg,
RBTREE_FOR(z, struct auth_zone*, &az->ztree) {
lock_rw_wrlock(&z->lock);
if(!auth_zone_read_zonefile(z, cfg)) {
+ /* For both secondary and primary zones, not fatal.
+ * This keeps the server up. */
+ auth_zone_clear_data(z);
lock_rw_unlock(&z->lock);
- lock_rw_unlock(&az->lock);
- return 0;
+ continue;
}
if(z->zonefile && z->zonefile[0]!=0 && env)
zonemd_offline_verify(z, env, mods);
@@ -2076,6 +2130,7 @@ auth_xfer_setup(struct auth_zone* z, struct auth_xfer* x)
if(!xfr_find_soa(z, x)) {
return 1;
}
+ x->is_rpz = (z->rpz!=NULL);
/* nothing for probe, nextprobe and transfer tasks */
return 1;
}
@@ -2135,6 +2190,9 @@ auth_zones_cfg(struct auth_zones* az, struct config_auth* c)
}
return 0;
}
+ /* Populate the xfer related options early since we may create one now */
+ z->max_transfer_size = c->max_transfer_size;
+ z->max_transfer_time = c->max_transfer_time;
if(c->masters || c->urls) {
if(!(x=auth_zones_find_or_add_xfer(az, z))) {
lock_rw_unlock(&az->lock);
@@ -2168,7 +2226,12 @@ auth_zones_cfg(struct auth_zones* az, struct config_auth* c)
z->zonemd_reject_absence = c->zonemd_reject_absence;
if(c->isrpz && !z->rpz){
if(!(z->rpz = rpz_create(c))){
- fatal_exit("Could not setup RPZ zones");
+ log_err("Could not setup RPZ zones");
+ if(x) {
+ lock_basic_unlock(&x->lock);
+ }
+ lock_rw_unlock(&z->lock);
+ lock_rw_unlock(&az->rpz_lock);
return 0;
}
lock_protect(&z->lock, &z->rpz->local_zones, sizeof(*z->rpz));
@@ -2206,6 +2269,10 @@ auth_zones_cfg(struct auth_zones* az, struct config_auth* c)
lock_rw_unlock(&z->lock);
return 0;
}
+ /* Pick up allow notify entries, early. This works for
+ * addresses and netblocks. */
+ if(!x->allow_notify_list)
+ probe_copy_masters_for_allow_notify(x);
lock_basic_unlock(&x->lock);
}
@@ -2313,6 +2380,7 @@ auth_chunks_delete(struct auth_transfer* at)
}
at->chunks_first = NULL;
at->chunks_last = NULL;
+ at->chunks_total = 0;
}
/** free master addr list */
@@ -2644,7 +2712,7 @@ az_empty_nonterminal(struct auth_zone* z, struct query_info* qinfo,
while(next && (rbnode_type*)next != RBTREE_NULL && next->rrsets == NULL) {
/* the next name has empty rrsets, is an empty nonterminal
* itself, see if there exists something below it */
- next = (struct auth_data*)rbtree_next(&node->node);
+ next = (struct auth_data*)rbtree_next(&next->node);
}
if((rbnode_type*)next == RBTREE_NULL || !next) {
/* there is no next node, so something below it cannot
@@ -4298,7 +4366,7 @@ xfr_create_ixfr_packet(struct auth_xfer* xfr, sldns_buffer* buf, uint16_t id,
{
struct query_info qinfo;
uint32_t serial;
- int have_zone;
+ int have_zone, get_full = 0;
have_zone = xfr->have_zone;
serial = xfr->serial;
@@ -4311,7 +4379,18 @@ xfr_create_ixfr_packet(struct auth_xfer* xfr, sldns_buffer* buf, uint16_t id,
xfr->task_transfer->on_ixfr_is_axfr = 0;
xfr->task_transfer->on_ixfr = 1;
qinfo.qtype = LDNS_RR_TYPE_IXFR;
- if(!have_zone || xfr->task_transfer->ixfr_fail || !master->ixfr) {
+ if(xfr->num_ixfrs >= NUM_IXFR_BEFORE_AXFR && xfr->is_rpz) {
+ /* For the RPZ, an IXFR is going to grow regions, and a
+ * full transfer, zonefile read, AXFR and HTTP clear the
+ * region, but IXFR does not. That memory keeps growing,
+ * and getting a full transfer with AXFR here resets that.
+ * The rpz->client_set->region, rpz->ns_set->region and
+ * rpz->respip_set->region need to be reset, they are for
+ * rpz-client-ip, rpz-nsip and rpz-ip. */
+ get_full = 1;
+ }
+ if(!have_zone || xfr->task_transfer->ixfr_fail || !master->ixfr
+ || get_full) {
qinfo.qtype = LDNS_RR_TYPE_AXFR;
xfr->task_transfer->ixfr_fail = 0;
xfr->task_transfer->on_ixfr = 0;
@@ -4462,29 +4541,31 @@ chunkline_get_line(struct auth_chunk** chunk, size_t* chunk_pos,
}
/** count number of open and closed parenthesis in a chunkline */
-static int
+int
chunkline_count_parens(sldns_buffer* buf, size_t start)
{
size_t end = sldns_buffer_position(buf);
size_t i;
int count = 0;
- int squote = 0, dquote = 0;
+ int dquote = 0;
+ char prev_c = 0;
for(i=start; i<end; i++) {
char c = (char)sldns_buffer_read_u8_at(buf, i);
- if(squote && c != '\'') continue;
- if(dquote && c != '"') continue;
- if(c == '"')
+ if(dquote && !(c == '"' && prev_c != '\\')) {
+ prev_c = (prev_c == '\\' && c == '\\') ? 0 : c;
+ continue;
+ }
+ if(c == '"' && prev_c != '\\')
dquote = !dquote; /* skip quoted part */
- else if(c == '\'')
- squote = !squote; /* skip quoted part */
- else if(c == '(')
+ else if(c == '(' && prev_c != '\\')
count ++;
- else if(c == ')')
+ else if(c == ')' && prev_c != '\\')
count --;
- else if(c == ';') {
+ else if(c == ';' && prev_c != '\\') {
/* rest is a comment */
return count;
}
+ prev_c = (prev_c == '\\' && c == '\\') ? 0 : c;
}
return count;
}
@@ -4495,20 +4576,22 @@ chunkline_remove_trailcomment(sldns_buffer* buf, size_t start)
{
size_t end = sldns_buffer_position(buf);
size_t i;
- int squote = 0, dquote = 0;
+ int dquote = 0;
+ char prev_c = 0;
for(i=start; i<end; i++) {
char c = (char)sldns_buffer_read_u8_at(buf, i);
- if(squote && c != '\'') continue;
- if(dquote && c != '"') continue;
- if(c == '"')
+ if(dquote && !(c == '"' && prev_c != '\\')) {
+ prev_c = (prev_c == '\\' && c == '\\') ? 0 : c;
+ continue;
+ }
+ if(c == '"' && prev_c != '\\')
dquote = !dquote; /* skip quoted part */
- else if(c == '\'')
- squote = !squote; /* skip quoted part */
- else if(c == ';') {
+ else if(c == ';' && prev_c != '\\') {
/* rest is a comment */
sldns_buffer_set_position(buf, i);
return;
}
+ prev_c = (prev_c == '\\' && c == '\\') ? 0 : c;
}
/* nothing to remove */
}
@@ -4932,6 +5015,8 @@ apply_ixfr(struct auth_xfer* xfr, struct auth_zone* z,
int delmode = 0;
int softfail = 0;
+ xfr->num_ixfrs++;
+
/* start RR iterator over chunklist of packets */
chunk_rrlist_start(xfr, &rr_chunk, &rr_num, &rr_pos);
while(!chunk_rrlist_end(rr_chunk, rr_num)) {
@@ -5067,16 +5152,11 @@ apply_axfr(struct auth_xfer* xfr, struct auth_zone* z,
size_t rr_counter = 0;
int have_end_soa = 0;
- /* clear the data tree */
- traverse_postorder(&z->data, auth_data_del, NULL);
- rbtree_init(&z->data, &auth_data_cmp);
- /* clear the RPZ policies */
- if(z->rpz)
- rpz_clear(z->rpz);
-
+ auth_zone_clear_data(z);
xfr->have_zone = 0;
xfr->serial = 0;
xfr->soa_zone_acquired = 0;
+ xfr->num_ixfrs = 0;
/* insert all RRs in to the zone */
/* insert the SOA only once, skip the last one */
@@ -5169,16 +5249,11 @@ apply_http(struct auth_xfer* xfr, struct auth_zone* z,
return 0;
}
- /* clear the data tree */
- traverse_postorder(&z->data, auth_data_del, NULL);
- rbtree_init(&z->data, &auth_data_cmp);
- /* clear the RPZ policies */
- if(z->rpz)
- rpz_clear(z->rpz);
-
+ auth_zone_clear_data(z);
xfr->have_zone = 0;
xfr->serial = 0;
xfr->soa_zone_acquired = 0;
+ xfr->num_ixfrs = 0;
chunk = xfr->task_transfer->chunks_first;
chunk_pos = 0;
@@ -5359,6 +5434,7 @@ xfr_process_chunk_list(struct auth_xfer* xfr, struct module_env* env,
/* apply data */
if(xfr->task_transfer->master->http) {
if(!apply_http(xfr, z, env->scratch_buffer)) {
+ auth_zone_clear_data(z);
lock_rw_unlock(&z->lock);
verbose(VERB_ALGO, "http from %s: could not store data",
xfr->task_transfer->master->host);
@@ -5367,6 +5443,7 @@ xfr_process_chunk_list(struct auth_xfer* xfr, struct module_env* env,
} else if(xfr->task_transfer->on_ixfr &&
!xfr->task_transfer->on_ixfr_is_axfr) {
if(!apply_ixfr(xfr, z, env->scratch_buffer)) {
+ auth_zone_clear_data(z);
lock_rw_unlock(&z->lock);
verbose(VERB_ALGO, "xfr from %s: could not store IXFR"
" data", xfr->task_transfer->master->host);
@@ -5375,6 +5452,7 @@ xfr_process_chunk_list(struct auth_xfer* xfr, struct module_env* env,
}
} else {
if(!apply_axfr(xfr, z, env->scratch_buffer)) {
+ auth_zone_clear_data(z);
lock_rw_unlock(&z->lock);
verbose(VERB_ALGO, "xfr from %s: could not store AXFR"
" data", xfr->task_transfer->master->host);
@@ -5391,6 +5469,7 @@ xfr_process_chunk_list(struct auth_xfer* xfr, struct module_env* env,
}
z->soa_zone_acquired = *env->now;
xfr->soa_zone_acquired = *env->now;
+ xfr->is_rpz = (z->rpz!=NULL);
/* release xfr lock while verifying zonemd because it may have
* to spawn lookups in the state machines */
@@ -5440,16 +5519,50 @@ xfr_process_chunk_list(struct auth_xfer* xfr, struct module_env* env,
return 1;
}
+/** Stop lookup using callback */
+static void
+xfr_stop_lookup(struct auth_master** lookup_target, void* lookup_unique_info,
+ int lookup_aaaa, uint16_t dclass, struct mesh_area* mesh,
+ mesh_cb_func_type cb, void* cb_arg)
+{
+ struct query_info qinfo;
+ uint8_t dname[LDNS_MAX_DOMAINLEN+1];
+ if(!*lookup_target) return;
+ qinfo.qname_len = sizeof(dname);
+ if(sldns_str2wire_dname_buf((*lookup_target)->host, dname,
+ &qinfo.qname_len) != 0) {
+ *lookup_target = NULL;
+ return;
+ }
+ qinfo.qname = dname;
+ qinfo.qclass = dclass;
+ qinfo.qtype = lookup_aaaa ? LDNS_RR_TYPE_AAAA : LDNS_RR_TYPE_A;
+ qinfo.local_alias = NULL;
+ log_query_info(VERB_ALGO, "removing xfr callback", &qinfo);
+
+ mesh_remove_callback(mesh, &qinfo, BIT_RD, cb, cb_arg,
+ lookup_unique_info);
+ *lookup_target = NULL;
+}
+
/** disown task_transfer. caller must hold xfr.lock */
static void
xfr_transfer_disown(struct auth_xfer* xfr)
{
+ /* remove data chunks */
+ auth_chunks_delete(xfr->task_transfer);
/* remove timer (from this worker's event base) */
comm_timer_delete(xfr->task_transfer->timer);
xfr->task_transfer->timer = NULL;
/* remove the commpoint */
comm_point_delete(xfr->task_transfer->cp);
xfr->task_transfer->cp = NULL;
+ if(xfr->task_transfer->env)
+ xfr_stop_lookup(&xfr->task_transfer->lookup_target,
+ xfr->task_transfer->lookup_unique_info,
+ xfr->task_transfer->lookup_aaaa, xfr->dclass,
+ xfr->task_transfer->env->mesh,
+ &auth_xfer_transfer_lookup_callback, xfr);
/* we don't own this item anymore */
xfr->task_transfer->worker = NULL;
xfr->task_transfer->env = NULL;
@@ -5516,7 +5629,8 @@ xfr_transfer_lookup_host(struct auth_xfer* xfr, struct module_env* env)
* called straight away */
lock_basic_unlock(&xfr->lock);
if(!mesh_new_callback(env->mesh, &qinfo, qflags, &edns, buf, 0,
- &auth_xfer_transfer_lookup_callback, xfr, 0)) {
+ &auth_xfer_transfer_lookup_callback, xfr, 0,
+ &xfr->task_transfer->lookup_unique_info)) {
lock_basic_lock(&xfr->lock);
log_err("out of memory lookup up master %s", master->host);
return 0;
@@ -5574,6 +5688,7 @@ xfr_transfer_init_fetch(struct auth_xfer* xfr, struct module_env* env)
t.tv_sec = timeout/1000;
t.tv_usec = (timeout%1000)*1000;
#endif
+ xfr->task_transfer->start_time = *env->now_tv;
if(master->http) {
/* perform http fetch */
@@ -5743,6 +5858,31 @@ xfr_master_add_addrs(struct auth_master* m, struct ub_packed_rrset_key* rrset,
}
}
+/** check if the lookup target name equals the found answer name. */
+static int
+xfer_target_equals_answer_name(struct auth_master* lookup_target,
+ struct ub_packed_rrset_key* answer, struct query_info* rq,
+ struct reply_info* rep)
+{
+ uint8_t qname[LDNS_MAX_DOMAINLEN+1];
+ size_t qname_len;
+ if(!lookup_target) return 0;
+ if(!answer) return 0;
+ qname_len = sizeof(qname);
+ if(sldns_str2wire_dname_buf(lookup_target->host, qname, &qname_len)
+ != 0) {
+ verbose(VERB_ALGO, "xfer_target_equals_answer_name: could not parse auth host name");
+ return 0;
+ }
+ if(query_dname_compare(answer->rk.dname, qname) == 0)
+ return 1;
+ /* It could be a CNAME. */
+ if(reply_find_rrset_section_an(rep, qname, qname_len,
+ LDNS_RR_TYPE_CNAME, rq->qclass))
+ return 1;
+ return 0;
+}
+
/** callback for task_transfer lookup of host name, of A or AAAA */
void auth_xfer_transfer_lookup_callback(void* arg, int rcode, sldns_buffer* buf,
enum sec_status sec, char* why_bogus, int ATTR_UNUSED(was_ratelimited))
@@ -5781,21 +5921,29 @@ void auth_xfer_transfer_lookup_callback(void* arg, int rcode, sldns_buffer* buf,
/* parsed successfully */
struct ub_packed_rrset_key* answer =
reply_find_answer_rrset(&rq, rep);
- if(answer) {
+ if(answer && xfer_target_equals_answer_name(
+ xfr->task_transfer->lookup_target, answer,
+ &rq, rep)) {
xfr_master_add_addrs(xfr->task_transfer->
lookup_target, answer, wanted_qtype);
+ } else if(answer) {
+ if(verbosity >= VERB_ALGO) {
+ char zname[LDNS_MAX_DOMAINLEN];
+ dname_str(xfr->name, zname);
+ verbose(VERB_ALGO, "auth zone %s host %s type %s transfer lookup has mismatch in answer name", zname, ((xfr->task_transfer->lookup_target && xfr->task_transfer->lookup_target->host) ? xfr->task_transfer->lookup_target->host : "null"), (xfr->task_transfer->lookup_aaaa?"AAAA":"A"));
+ }
} else {
if(verbosity >= VERB_ALGO) {
char zname[LDNS_MAX_DOMAINLEN];
dname_str(xfr->name, zname);
- verbose(VERB_ALGO, "auth zone %s host %s type %s transfer lookup has nodata", zname, xfr->task_transfer->lookup_target->host, (xfr->task_transfer->lookup_aaaa?"AAAA":"A"));
+ verbose(VERB_ALGO, "auth zone %s host %s type %s transfer lookup has nodata", zname, ((xfr->task_transfer->lookup_target && xfr->task_transfer->lookup_target->host) ? xfr->task_transfer->lookup_target->host : "null"), (xfr->task_transfer->lookup_aaaa?"AAAA":"A"));
}
}
} else {
if(verbosity >= VERB_ALGO) {
char zname[LDNS_MAX_DOMAINLEN];
dname_str(xfr->name, zname);
- verbose(VERB_ALGO, "auth zone %s host %s type %s transfer lookup has no answer", zname, xfr->task_transfer->lookup_target->host, (xfr->task_transfer->lookup_aaaa?"AAAA":"A"));
+ verbose(VERB_ALGO, "auth zone %s host %s type %s transfer lookup has no answer", zname, ((xfr->task_transfer->lookup_target && xfr->task_transfer->lookup_target->host) ? xfr->task_transfer->lookup_target->host : "null"), (xfr->task_transfer->lookup_aaaa?"AAAA":"A"));
}
}
regional_free_all(temp);
@@ -5803,10 +5951,11 @@ void auth_xfer_transfer_lookup_callback(void* arg, int rcode, sldns_buffer* buf,
if(verbosity >= VERB_ALGO) {
char zname[LDNS_MAX_DOMAINLEN];
dname_str(xfr->name, zname);
- verbose(VERB_ALGO, "auth zone %s host %s type %s transfer lookup failed", zname, xfr->task_transfer->lookup_target->host, (xfr->task_transfer->lookup_aaaa?"AAAA":"A"));
+ verbose(VERB_ALGO, "auth zone %s host %s type %s transfer lookup failed", zname, ((xfr->task_transfer->lookup_target && xfr->task_transfer->lookup_target->host) ? xfr->task_transfer->lookup_target->host : "null"), (xfr->task_transfer->lookup_aaaa?"AAAA":"A"));
}
}
- if(xfr->task_transfer->lookup_target->list &&
+ if(xfr->task_transfer->lookup_target &&
+ xfr->task_transfer->lookup_target->list &&
xfr->task_transfer->lookup_target == xfr_transfer_current_master(xfr))
xfr->task_transfer->scan_addr = xfr->task_transfer->lookup_target->list;
@@ -6136,6 +6285,7 @@ xfer_link_data(sldns_buffer* pkt, struct auth_xfer* xfr)
if(xfr->task_transfer->chunks_last)
xfr->task_transfer->chunks_last->next = e;
xfr->task_transfer->chunks_last = e;
+ xfr->task_transfer->chunks_total += e->len;
return 1;
}
@@ -6231,6 +6381,15 @@ auth_xfer_transfer_timer_callback(void* arg)
xfr_transfer_nexttarget_or_end(xfr, env);
}
+/** return the time taken by the transfer */
+static int
+auth_xfer_transfer_time_taken(struct auth_xfer* xfr, struct module_env* env)
+{
+ struct timeval delta;
+ timeval_subtract(&delta, env->now_tv, &xfr->task_transfer->start_time);
+ return ((int)delta.tv_sec)*1000 + ((int)delta.tv_usec)/1000;
+}
+
/** callback for task_transfer tcp connections */
int
auth_xfer_transfer_tcp_callback(struct comm_point* c, void* arg, int err,
@@ -6297,6 +6456,15 @@ auth_xfer_transfer_tcp_callback(struct comm_point* c, void* arg, int err,
xfr->task_transfer->master->host);
goto failed;
}
+ if(xfr->max_transfer_size > 0 &&
+ xfr->task_transfer->chunks_total > xfr->max_transfer_size) {
+ char zname[LDNS_MAX_DOMAINLEN];
+ dname_str(xfr->name, zname);
+ log_err("auth zone %s transfer from %s exceeded %u bytes, aborting",
+ zname, xfr->task_transfer->master->host,
+ (unsigned)xfr->max_transfer_size);
+ goto failed;
+ }
/* if the transfer is done now, disconnect and process the list */
if(transferdone) {
comm_point_delete(xfr->task_transfer->cp);
@@ -6305,6 +6473,16 @@ auth_xfer_transfer_tcp_callback(struct comm_point* c, void* arg, int err,
return 0;
}
+ if(xfr->max_transfer_time > 0 &&
+ auth_xfer_transfer_time_taken(xfr, env) > xfr->max_transfer_time) {
+ char zname[LDNS_MAX_DOMAINLEN];
+ dname_str(xfr->name, zname);
+ log_err("auth zone %s transfer from %s exceeded %u msec total running time, aborting",
+ zname, xfr->task_transfer->master->host,
+ (unsigned)xfr->max_transfer_time);
+ goto failed;
+ }
+
/* if we want to read more messages, setup the commpoint to read
* a DNS packet, and the timeout */
lock_basic_unlock(&xfr->lock);
@@ -6360,6 +6538,16 @@ auth_xfer_transfer_http_callback(struct comm_point* c, void* arg, int err,
xfr->task_transfer->master->host);
goto failed;
}
+ if(xfr->max_transfer_size > 0 &&
+ xfr->task_transfer->chunks_total > xfr->max_transfer_size) {
+ char zname[LDNS_MAX_DOMAINLEN];
+ dname_str(xfr->name, zname);
+ log_err("auth zone %s http %s/%s exceeded %u bytes, aborting",
+ zname, xfr->task_transfer->master->host,
+ xfr->task_transfer->master->file,
+ (unsigned)xfr->max_transfer_size);
+ goto failed;
+ }
}
/* if the transfer is done now, disconnect and process the list */
if(err == NETEVENT_DONE) {
@@ -6371,6 +6559,17 @@ auth_xfer_transfer_http_callback(struct comm_point* c, void* arg, int err,
return 0;
}
+ if(xfr->max_transfer_time > 0 &&
+ auth_xfer_transfer_time_taken(xfr, env) > xfr->max_transfer_time) {
+ char zname[LDNS_MAX_DOMAINLEN];
+ dname_str(xfr->name, zname);
+ log_err("auth zone %s transfer http %s/%s exceeded %u msec total running time, aborting",
+ zname, xfr->task_transfer->master->host,
+ xfr->task_transfer->master->file,
+ (unsigned)xfr->max_transfer_time);
+ goto failed;
+ }
+
/* if we want to read more messages, setup the commpoint to read
* a DNS packet, and the timeout */
lock_basic_unlock(&xfr->lock);
@@ -6413,6 +6612,12 @@ xfr_probe_disown(struct auth_xfer* xfr)
/* remove the commpoint */
comm_point_delete(xfr->task_probe->cp);
xfr->task_probe->cp = NULL;
+ if(xfr->task_probe->env)
+ xfr_stop_lookup(&xfr->task_probe->lookup_target,
+ xfr->task_probe->lookup_unique_info,
+ xfr->task_probe->lookup_aaaa, xfr->dclass,
+ xfr->task_probe->env->mesh,
+ &auth_xfer_probe_lookup_callback, xfr);
/* we don't own this item anymore */
xfr->task_probe->worker = NULL;
xfr->task_probe->env = NULL;
@@ -6719,7 +6924,8 @@ xfr_probe_lookup_host(struct auth_xfer* xfr, struct module_env* env)
* called straight away */
lock_basic_unlock(&xfr->lock);
if(!mesh_new_callback(env->mesh, &qinfo, qflags, &edns, buf, 0,
- &auth_xfer_probe_lookup_callback, xfr, 0)) {
+ &auth_xfer_probe_lookup_callback, xfr, 0,
+ &xfr->task_probe->lookup_unique_info)) {
lock_basic_lock(&xfr->lock);
log_err("out of memory lookup up master %s", master->host);
return 0;
@@ -6856,7 +7062,7 @@ void auth_xfer_probe_lookup_callback(void* arg, int rcode, sldns_buffer* buf,
char zname[LDNS_MAX_DOMAINLEN];
dname_str(xfr->name, zname);
verbose(VERB_OPS, "auth zone %s: primary %s address probe lookup is DNSSEC bogus: %s",
- zname, xfr->task_transfer->lookup_target->host,
+ zname, xfr->task_probe->lookup_target->host,
(why_bogus?why_bogus:""));
}
/* fall through to next-lookup / next-master */
@@ -6874,21 +7080,29 @@ void auth_xfer_probe_lookup_callback(void* arg, int rcode, sldns_buffer* buf,
/* parsed successfully */
struct ub_packed_rrset_key* answer =
reply_find_answer_rrset(&rq, rep);
- if(answer) {
+ if(answer && xfer_target_equals_answer_name(
+ xfr->task_probe->lookup_target, answer,
+ &rq, rep)) {
xfr_master_add_addrs(xfr->task_probe->
lookup_target, answer, wanted_qtype);
+ } else if(answer) {
+ if(verbosity >= VERB_ALGO) {
+ char zname[LDNS_MAX_DOMAINLEN];
+ dname_str(xfr->name, zname);
+ verbose(VERB_ALGO, "auth zone %s host %s type %s probe lookup has mismatch in answer name", zname, ((xfr->task_probe->lookup_target && xfr->task_probe->lookup_target->host) ? xfr->task_probe->lookup_target->host : "null"), (xfr->task_probe->lookup_aaaa?"AAAA":"A"));
+ }
} else {
if(verbosity >= VERB_ALGO) {
char zname[LDNS_MAX_DOMAINLEN];
dname_str(xfr->name, zname);
- verbose(VERB_ALGO, "auth zone %s host %s type %s probe lookup has nodata", zname, xfr->task_probe->lookup_target->host, (xfr->task_probe->lookup_aaaa?"AAAA":"A"));
+ verbose(VERB_ALGO, "auth zone %s host %s type %s probe lookup has nodata", zname, ((xfr->task_probe->lookup_target && xfr->task_probe->lookup_target->host) ? xfr->task_probe->lookup_target->host : "null"), (xfr->task_probe->lookup_aaaa?"AAAA":"A"));
}
}
} else {
if(verbosity >= VERB_ALGO) {
char zname[LDNS_MAX_DOMAINLEN];
dname_str(xfr->name, zname);
- verbose(VERB_ALGO, "auth zone %s host %s type %s probe lookup has no address", zname, xfr->task_probe->lookup_target->host, (xfr->task_probe->lookup_aaaa?"AAAA":"A"));
+ verbose(VERB_ALGO, "auth zone %s host %s type %s probe lookup has no address", zname, ((xfr->task_probe->lookup_target && xfr->task_probe->lookup_target->host) ? xfr->task_probe->lookup_target->host : "null"), (xfr->task_probe->lookup_aaaa?"AAAA":"A"));
}
}
regional_free_all(temp);
@@ -6896,10 +7110,11 @@ void auth_xfer_probe_lookup_callback(void* arg, int rcode, sldns_buffer* buf,
if(verbosity >= VERB_ALGO) {
char zname[LDNS_MAX_DOMAINLEN];
dname_str(xfr->name, zname);
- verbose(VERB_ALGO, "auth zone %s host %s type %s probe lookup failed", zname, xfr->task_probe->lookup_target->host, (xfr->task_probe->lookup_aaaa?"AAAA":"A"));
+ verbose(VERB_ALGO, "auth zone %s host %s type %s probe lookup failed", zname, ((xfr->task_probe->lookup_target && xfr->task_probe->lookup_target->host) ? xfr->task_probe->lookup_target->host : "null"), (xfr->task_probe->lookup_aaaa?"AAAA":"A"));
}
}
- if(xfr->task_probe->lookup_target->list &&
+ if(xfr->task_probe->lookup_target &&
+ xfr->task_probe->lookup_target->list &&
xfr->task_probe->lookup_target == xfr_probe_current_master(xfr))
xfr->task_probe->scan_addr = xfr->task_probe->lookup_target->list;
@@ -6966,8 +7181,8 @@ xfr_start_probe(struct auth_xfer* xfr, struct module_env* env,
if(!have_probe_targets(xfr->task_probe->masters) &&
xfr->task_probe->masters != NULL)
xfr->task_probe->only_lookup = 1;
- if(!(xfr->task_probe->only_lookup &&
- xfr->task_probe->masters != NULL)) {
+ if(!xfr->task_probe->only_lookup &&
+ !have_probe_targets(xfr->task_probe->masters)) {
/* useless to pick up task_probe, no masters to
* probe. Instead attempt to pick up task transfer */
if(xfr->task_transfer->worker == NULL) {
@@ -7170,6 +7385,8 @@ auth_xfer_new(struct auth_zone* z)
xfr->namelen = z->namelen;
xfr->namelabs = z->namelabs;
xfr->dclass = z->dclass;
+ xfr->max_transfer_size = z->max_transfer_size;
+ xfr->max_transfer_time = z->max_transfer_time;
xfr->task_nextprobe = (struct auth_nextprobe*)calloc(1,
sizeof(struct auth_nextprobe));
@@ -7379,35 +7596,48 @@ xfer_set_masters(struct auth_master** list, struct config_auth* c,
{
struct auth_master* m;
struct config_strlist* p;
+ struct auth_master** tail;
/* list points to the first, or next pointer for the new element */
while(*list) {
list = &( (*list)->next );
}
if(with_http)
for(p = c->urls; p; p = p->next) {
+ tail = list;
m = auth_master_new(&list);
if(!m) return 0;
m->http = 1;
- if(!parse_url(p->str, &m->host, &m->file, &m->port, &m->ssl))
+ if(!parse_url(p->str, &m->host, &m->file, &m->port, &m->ssl)) {
+ free(m->host);
+ free(m->file);
+ free(m);
+ *tail = NULL;
return 0;
+ }
}
for(p = c->masters; p; p = p->next) {
+ tail = list;
m = auth_master_new(&list);
if(!m) return 0;
m->ixfr = 1; /* this flag is not configurable */
m->host = strdup(p->str);
if(!m->host) {
log_err("malloc failure");
+ free(m);
+ *tail = NULL;
return 0;
}
}
for(p = c->allow_notify; p; p = p->next) {
+ tail = list;
m = auth_master_new(&list);
if(!m) return 0;
m->allow_notify = 1;
m->host = strdup(p->str);
if(!m->host) {
log_err("malloc failure");
+ free(m);
+ *tail = NULL;
return 0;
}
}
@@ -8561,7 +8791,8 @@ zonemd_lookup_dnskey(struct auth_zone* z, struct module_env* env)
/* the callback can be called straight away */
lock_rw_unlock(&z->lock);
if(!mesh_new_callback(env->mesh, &qinfo, qflags, &edns, buf, 0,
- &auth_zonemd_dnskey_lookup_callback, z, 0)) {
+ &auth_zonemd_dnskey_lookup_callback, z, 0,
+ &z->zonemd_callback_unique_info)) {
lock_rw_wrlock(&z->lock);
log_err("out of memory lookup of %s for zonemd",
(fetch_ds?"DS":"DNSKEY"));
diff --git a/services/authzone.h b/services/authzone.h
index d38cf9d26622..97ab01fcbc1d 100644
--- a/services/authzone.h
+++ b/services/authzone.h
@@ -144,6 +144,8 @@ struct auth_zone {
struct module_env* zonemd_callback_env;
/** for the zonemd callback, the type of data looked up */
uint16_t zonemd_callback_qtype;
+ /** for the zonemd callback, the unique info */
+ void* zonemd_callback_unique_info;
/** zone has been deleted */
int zone_deleted;
/** deletelist pointer, unused normally except during delete */
@@ -153,6 +155,10 @@ struct auth_zone {
struct auth_zone* rpz_az_next;
/** previous auth zone containing RPZ data, or NULL */
struct auth_zone* rpz_az_prev;
+ /** The maximum auth zone transfer size, in bytes. */
+ size_t max_transfer_size;
+ /** The maximum auth zone transfer time taken, in msec. */
+ int max_transfer_time;
};
/**
@@ -283,6 +289,15 @@ struct auth_xfer {
* this is renewed every SOA probe and transfer. On zone load
* from zonefile it is also set (with probe set soon to check) */
time_t lease_time;
+
+ /** The maximum auth zone transfer size, in bytes. */
+ size_t max_transfer_size;
+ /** The maximum auth zone transfer time taken, in msec. */
+ int max_transfer_time;
+ /** the zone is an rpz zone */
+ int is_rpz;
+ /** the number of IXFRs since the last full transfer. */
+ int num_ixfrs;
};
/**
@@ -331,6 +346,8 @@ struct auth_probe {
/** for the hostname lookups, which master is current */
struct auth_master* lookup_target;
+ /** for the lookup, the callback unique info */
+ void* lookup_unique_info;
/** are we looking up A or AAAA, first A, then AAAA (if ip6 enabled) */
int lookup_aaaa;
/** we only want to do lookups for making config work (for notify),
@@ -379,12 +396,18 @@ struct auth_transfer {
struct auth_chunk* chunks_first;
/** last element in chunks list (to append new data at the end) */
struct auth_chunk* chunks_last;
+ /** running total of bytes held in chunks_first..chunks_last */
+ size_t chunks_total;
+ /** start time of the transfer */
+ struct timeval start_time;
/** list of upstream masters for this zone, from config */
struct auth_master* masters;
/** for the hostname lookups, which master is current */
struct auth_master* lookup_target;
+ /** for the lookup, the callback unique info */
+ void* lookup_unique_info;
/** are we looking up A or AAAA, first A, then AAAA (if ip6 enabled) */
int lookup_aaaa;
@@ -828,4 +851,10 @@ void auth_xfer_delete(struct auth_xfer* xfr);
*/
void xfr_disown_tasks(struct auth_xfer* xfr, struct worker* worker);
+/** count number of open and closed parenthesis in a chunkline */
+int chunkline_count_parens(struct sldns_buffer* buf, size_t start);
+
+/** Clear data in auth zone */
+void auth_zone_clear_data(struct auth_zone* z);
+
#endif /* SERVICES_AUTHZONE_H */
diff --git a/services/cache/dns.c b/services/cache/dns.c
index 9fc79dad012c..04d5ae2d6302 100644
--- a/services/cache/dns.c
+++ b/services/cache/dns.c
@@ -43,6 +43,7 @@
#include "iterator/iter_utils.h"
#include "validator/val_nsec.h"
#include "validator/val_utils.h"
+#include "iterator/iter_utils.h"
#include "services/cache/dns.h"
#include "services/cache/rrset.h"
#include "util/data/msgparse.h"
@@ -586,8 +587,12 @@ dns_cache_find_delegation(struct module_env* env, uint8_t* qname,
return NULL;
}
}
- if(!delegpt_rrset_add_ns(dp, region, nskey, 0))
+ if(!delegpt_rrset_add_ns(dp, region, nskey, 0,
+ deleg_port_number(env))) {
+ lock_rw_unlock(&nskey->entry.lock);
log_err("find_delegation: addns out of memory");
+ return NULL;
+ }
lock_rw_unlock(&nskey->entry.lock); /* first unlock before next lookup*/
/* find and add DS/NSEC (if any) */
if(msg)
@@ -782,11 +787,16 @@ synth_dname_msg(struct ub_packed_rrset_key* rrset, struct regional* region,
uint8_t* newname, *dtarg = NULL;
size_t newlen, dtarglen;
time_t rr_ttl;
+ int graceperiod = 0;
if(TTL_IS_EXPIRED(d->ttl, now)) {
/* Allow TTL=0 DNAME from upstream within grace period */
if(!(rrset->rk.flags & PACKED_RRSET_UPSTREAM_0TTL))
return NULL;
rr_ttl = 0;
+ /* Since PACKED_RRSET_UPSTREAM_0TTL set the flag that
+ * the grace period has been applied, this stops the rrset
+ * from getting stored back into the cache with a bigger TTL.*/
+ graceperiod = 1;
} else {
rr_ttl = d->ttl - now;
}
@@ -814,6 +824,8 @@ synth_dname_msg(struct ub_packed_rrset_key* rrset, struct regional* region,
msg->rep->rrsets[0] = packed_rrset_copy_region(rrset, region, now);
if(!msg->rep->rrsets[0]) /* copy DNAME */
return NULL;
+ if(graceperiod)
+ msg->rep->rrsets[0]->rk.flags |= PACKED_RRSET_0TTL_GRACE;
/* synth CNAME rrset */
get_cname_target(rrset, &dtarg, &dtarglen);
if(!dtarg)
diff --git a/services/cache/rrset.c b/services/cache/rrset.c
index 79bf473bb53d..9b0319140b7b 100644
--- a/services/cache/rrset.c
+++ b/services/cache/rrset.c
@@ -215,6 +215,13 @@ rrset_cache_update(struct rrset_cache* r, struct rrset_ref* ref,
int equal = 0;
log_assert(ref->id != 0 && k->id != 0);
log_assert(k->rk.dname != NULL);
+ if((k->rk.flags&PACKED_RRSET_0TTL_GRACE) !=0) {
+ log_nametypeclass(VERB_ALGO, "rrset store of PACKED_RRSET_0TTL_GRACE rrset skipped", k->rk.dname, rrset_type, ntohs(k->rk.rrset_class));
+ ub_packed_rrset_parsedelete(k, alloc);
+ return 0; /* Do not store 0TTL items after apply of
+ the grace ttl amount.
+ This means the ref was not changed by the call. */
+ }
/* looks up item with a readlock - no editing! */
if((e=slabhash_lookup(&r->table, h, k, 0)) != 0) {
/* return id and key as they will be used in the cache
@@ -291,6 +298,8 @@ void rrset_cache_update_wildcard(struct rrset_cache* rrset_cache,
{
struct rrset_ref ref;
uint8_t wc_dname[LDNS_MAX_DOMAINLEN+3];
+ uint8_t* new_dname;
+ size_t new_dname_len;
/* See if the RRSIG signer name allows this wildcard,
* the new rrset should fall within the zone of the RRSIG signer(s). */
@@ -310,14 +319,16 @@ void rrset_cache_update_wildcard(struct rrset_cache* rrset_cache,
wc_dname[1] = (uint8_t)'*';
memmove(wc_dname+2, ce, ce_len);
- free(rrset->rk.dname);
- rrset->rk.dname_len = ce_len + 2;
- rrset->rk.dname = (uint8_t*)memdup(wc_dname, rrset->rk.dname_len);
- if(!rrset->rk.dname) {
- alloc_special_release(alloc, rrset);
+ new_dname_len = ce_len + 2;
+ new_dname = (uint8_t*)memdup(wc_dname, new_dname_len);
+ if(!new_dname) {
+ ub_packed_rrset_parsedelete(rrset, alloc);
log_err("memdup failure in rrset_cache_update_wildcard");
return;
}
+ free(rrset->rk.dname);
+ rrset->rk.dname = new_dname;
+ rrset->rk.dname_len = new_dname_len;
rrset->entry.hash = rrset_key_hash(&rrset->rk);
ref.key = rrset;
diff --git a/services/listen_dnsport.c b/services/listen_dnsport.c
index 38b493a256db..8ef084e5e299 100644
--- a/services/listen_dnsport.c
+++ b/services/listen_dnsport.c
@@ -1125,7 +1125,7 @@ make_sock_port(int stype, const char* ifname, int port,
int use_systemd, int dscp, struct unbound_socket* ub_sock,
const char* additional)
{
- char* s = strchr(ifname, '@');
+ const char* s = strchr(ifname, '@');
if(s) {
/* override port with ifspec@port */
int port;
@@ -2167,7 +2167,7 @@ void tcp_req_info_clear(struct tcp_req_info* req)
while(open) {
nopen = open->next;
mesh_state_remove_reply(open->mesh, open->mesh_state, req->cp,
- NULL);
+ NULL, NULL);
free(open);
open = nopen;
}
@@ -3617,7 +3617,7 @@ stream_tree_del(rbnode_type* node, void* arg)
stream = (struct doq_stream*)node;
if(stream->mesh_state) {
mesh_state_remove_reply(stream->mesh, stream->mesh_state,
- args->conn->doq_socket->cp, stream);
+ args->conn->doq_socket->cp, NULL, stream);
stream->mesh_state = NULL;
}
if(stream->in)
@@ -3639,7 +3639,8 @@ doq_conn_delete(struct doq_conn* conn, struct doq_table* table)
lock_rw_unlock(&conn->table->conid_lock);
/* Remove the app data from ngtcp2 before SSL_free of conn->ssl,
* because the ngtcp2 conn is deleted. */
- SSL_set_app_data(conn->ssl, NULL);
+ if(conn->ssl)
+ SSL_set_app_data(conn->ssl, NULL);
if(conn->stream_tree.count != 0) {
struct doq_stream_tree_del_args args;
memset(&args, 0, sizeof(args));
@@ -3956,7 +3957,7 @@ doq_stream_close(struct doq_conn* conn, struct doq_stream* stream,
stream->is_closed = 1;
if(stream->mesh_state) {
mesh_state_remove_reply(stream->mesh, stream->mesh_state,
- conn->doq_socket->cp, stream);
+ conn->doq_socket->cp, NULL, stream);
stream->mesh_state = NULL;
}
doq_stream_off_write_list(conn, stream);
@@ -4851,7 +4852,7 @@ doq_ssl_server_setup(SSL_CTX* ctx, struct doq_conn* conn)
SSL_set_app_data(ssl, conn);
#endif
SSL_set_accept_state(ssl);
-#ifdef USE_NGTCP2_CRYPTO_OSSL
+#ifdef HAVE_SSL_SET_QUIC_TLS_EARLY_DATA_ENABLED
SSL_set_quic_tls_early_data_enabled(ssl, 1);
#else
SSL_set_quic_early_data_enabled(ssl, 1);
@@ -4960,6 +4961,7 @@ doq_conn_setup(struct doq_conn* conn, uint8_t* scid, size_t scidlen,
rv = ngtcp2_conn_server_new(&conn->conn, &scid_cid, &sv_scid, &path,
conn->version, &callbacks, &settings, &params, NULL, conn);
if(rv != 0) {
+ conn->conn = NULL;
lock_rw_unlock(&conn->table->conid_lock);
log_err("ngtcp2_conn_server_new failed: %s",
ngtcp2_strerror(rv));
diff --git a/services/localzone.c b/services/localzone.c
index 52166ae2d2bd..5de7801277d9 100644
--- a/services/localzone.c
+++ b/services/localzone.c
@@ -386,8 +386,6 @@ new_local_rrset(struct regional* region, struct local_data* node,
log_err("out of memory");
return NULL;
}
- rrset->next = node->rrsets;
- node->rrsets = rrset;
rrset->rrset = (struct ub_packed_rrset_key*)
regional_alloc_zero(region, sizeof(*rrset->rrset));
if(!rrset->rrset) {
@@ -408,6 +406,8 @@ new_local_rrset(struct regional* region, struct local_data* node,
rrset->rrset->rk.dname_len = node->namelen;
rrset->rrset->rk.type = htons(rrtype);
rrset->rrset->rk.rrset_class = htons(rrclass);
+ rrset->next = node->rrsets;
+ node->rrsets = rrset;
return rrset;
}
@@ -431,6 +431,10 @@ rrset_insert_rr(struct regional* region, struct packed_rrset_data* pd,
pd->rr_ttl = regional_alloc(region, sizeof(*pd->rr_ttl)*pd->count);
pd->rr_data = regional_alloc(region, sizeof(*pd->rr_data)*pd->count);
if(!pd->rr_len || !pd->rr_ttl || !pd->rr_data) {
+ pd->count--;
+ pd->rr_len = oldlen;
+ pd->rr_ttl = oldttl;
+ pd->rr_data = olddata;
log_err("out of memory");
return 0;
}
@@ -446,6 +450,10 @@ rrset_insert_rr(struct regional* region, struct packed_rrset_data* pd,
pd->rr_ttl[0] = ttl;
pd->rr_data[0] = regional_alloc_init(region, rdata, rdata_len);
if(!pd->rr_data[0]) {
+ pd->count--;
+ pd->rr_len = oldlen;
+ pd->rr_ttl = oldttl;
+ pd->rr_data = olddata;
log_err("out of memory");
return 0;
}
@@ -671,7 +679,9 @@ lz_enter_rr_str(struct local_zones* zones, const char* rr)
z = local_zones_lookup(zones, rr_name, len, labs, rr_class, rr_type, 1);
if(!z) {
lock_rw_unlock(&zones->lock);
- fatal_exit("internal error: no zone for rr %s", rr);
+ log_err("internal error: no zone for rr %s", rr);
+ free(rr_name);
+ return 0;
}
lock_rw_wrlock(&z->lock);
lock_rw_unlock(&zones->lock);
@@ -1500,8 +1510,10 @@ find_tag_datas(struct query_info* qinfo, struct config_strlist* list,
return 0; /* out of memory */
qinfo->local_alias->rrset =
regional_alloc_init(temp, r, sizeof(*r));
- if(!qinfo->local_alias->rrset)
+ if(!qinfo->local_alias->rrset) {
+ qinfo->local_alias = NULL;
return 0; /* out of memory */
+ }
}
return result;
}
@@ -1567,13 +1579,17 @@ local_data_answer(struct local_zone* z, struct module_env* env,
return 0; /* out of memory */
qinfo->local_alias->rrset = regional_alloc_init(
temp, lr->rrset, sizeof(*lr->rrset));
- if(!qinfo->local_alias->rrset)
+ if(!qinfo->local_alias->rrset) {
+ qinfo->local_alias = NULL;
return 0; /* out of memory */
+ }
qinfo->local_alias->rrset->rk.dname = qinfo->qname;
qinfo->local_alias->rrset->rk.dname_len = qinfo->qname_len;
get_cname_target(lr->rrset, &ctarget, &ctargetlen);
- if(!ctargetlen)
+ if(!ctargetlen) {
+ qinfo->local_alias = NULL;
return 0; /* invalid cname */
+ }
if(dname_is_wild(ctarget)) {
/* synthesize cname target */
struct packed_rrset_data* d, *lr_d;
@@ -1602,8 +1618,10 @@ local_data_answer(struct local_zone* z, struct module_env* env,
sizeof(struct packed_rrset_data) + sizeof(size_t) +
sizeof(uint8_t*) + sizeof(time_t) + sizeof(uint16_t)
+ newtargetlen);
- if(!d)
+ if(!d) {
+ qinfo->local_alias = NULL;
return 0; /* out of memory */
+ }
lr_d = (struct packed_rrset_data*)lr->rrset->entry.data;
qinfo->local_alias->rrset->entry.data = d;
d->ttl = lr_d->rr_ttl[0]; /* RFC6672-like behavior:
@@ -1650,7 +1668,7 @@ local_zone_does_not_cover(struct local_zone* z, struct query_info* qinfo,
struct local_data key;
struct local_data* ld = NULL;
struct local_rrset* lr = NULL;
- if(z->type == local_zone_always_transparent || z->type == local_zone_block_a)
+ if(z->type == local_zone_always_transparent || z->type == local_zone_block_a || z->type == local_zone_block_aaaa)
return 1;
if(z->type != local_zone_transparent
&& z->type != local_zone_typetransparent
@@ -1661,7 +1679,9 @@ local_zone_does_not_cover(struct local_zone* z, struct query_info* qinfo,
key.namelen = qinfo->qname_len;
key.namelabs = labs;
ld = (struct local_data*)rbtree_search(&z->data, &key.node);
- if(z->type == local_zone_transparent || z->type == local_zone_inform)
+ if(z->type == local_zone_transparent || z->type == local_zone_inform
+ || z->type == local_zone_block_a_wdata
+ || z->type == local_zone_block_aaaa_wdata)
return (ld == NULL);
if(ld)
lr = local_data_find_type(ld, qinfo->qtype, 1);
@@ -1727,7 +1747,8 @@ local_zones_zone_answer(struct local_zone* z, struct module_env* env,
|| lz_type == local_zone_always_transparent) {
/* no NODATA or NXDOMAINS for this zone type */
return 0;
- } else if(lz_type == local_zone_block_a) {
+ } else if(lz_type == local_zone_block_a ||
+ lz_type == local_zone_block_a_wdata) {
/* Return NODATA for all A queries */
if(qinfo->qtype == LDNS_RR_TYPE_A) {
local_error_encode(qinfo, env, edns, repinfo, buf, temp,
@@ -1737,6 +1758,17 @@ local_zones_zone_answer(struct local_zone* z, struct module_env* env,
}
return 0;
+ } else if(lz_type == local_zone_block_aaaa ||
+ lz_type == local_zone_block_aaaa_wdata) {
+ /* Return NODATA for all AAAA queries */
+ if(qinfo->qtype == LDNS_RR_TYPE_AAAA) {
+ local_error_encode(qinfo, env, edns, repinfo, buf, temp,
+ LDNS_RCODE_NOERROR, (LDNS_RCODE_NOERROR|BIT_AA),
+ LDNS_EDE_NONE, NULL);
+ return 1;
+ }
+
+ return 0;
} else if(lz_type == local_zone_always_null) {
/* 0.0.0.0 or ::0 or noerror/nodata for this zone type,
* used for blocklists. */
@@ -1904,7 +1936,10 @@ local_zones_answer(struct local_zones* zones, struct module_env* env,
lzt == local_zone_typetransparent ||
lzt == local_zone_inform ||
lzt == local_zone_always_transparent ||
- lzt == local_zone_block_a) &&
+ lzt == local_zone_block_a ||
+ lzt == local_zone_block_aaaa ||
+ lzt == local_zone_block_a_wdata ||
+ lzt == local_zone_block_aaaa_wdata) &&
local_zone_does_not_cover(z, qinfo, labs)) {
lock_rw_unlock(&z->lock);
z = NULL;
@@ -1953,6 +1988,7 @@ local_zones_answer(struct local_zones* zones, struct module_env* env,
if(lzt != local_zone_always_refuse
&& lzt != local_zone_always_transparent
&& lzt != local_zone_block_a
+ && lzt != local_zone_block_aaaa
&& lzt != local_zone_always_nxdomain
&& lzt != local_zone_always_nodata
&& lzt != local_zone_always_deny
@@ -1984,6 +2020,9 @@ const char* local_zone_type2str(enum localzone_type t)
case local_zone_inform_redirect: return "inform_redirect";
case local_zone_always_transparent: return "always_transparent";
case local_zone_block_a: return "block_a";
+ case local_zone_block_aaaa: return "block_aaaa";
+ case local_zone_block_a_wdata: return "block_a_wdata";
+ case local_zone_block_aaaa_wdata: return "block_aaaa_wdata";
case local_zone_always_refuse: return "always_refuse";
case local_zone_always_nxdomain: return "always_nxdomain";
case local_zone_always_nodata: return "always_nodata";
@@ -2020,6 +2059,12 @@ int local_zone_str2type(const char* type, enum localzone_type* t)
*t = local_zone_always_transparent;
else if(strcmp(type, "block_a") == 0)
*t = local_zone_block_a;
+ else if(strcmp(type, "block_aaaa") == 0)
+ *t = local_zone_block_aaaa;
+ else if(strcmp(type, "block_a_wdata") == 0)
+ *t = local_zone_block_a_wdata;
+ else if(strcmp(type, "block_aaaa_wdata") == 0)
+ *t = local_zone_block_aaaa_wdata;
else if(strcmp(type, "always_refuse") == 0)
*t = local_zone_always_refuse;
else if(strcmp(type, "always_nxdomain") == 0)
diff --git a/services/localzone.h b/services/localzone.h
index e3fb0afe3e4a..436874e0faa3 100644
--- a/services/localzone.h
+++ b/services/localzone.h
@@ -93,6 +93,12 @@ enum localzone_type {
local_zone_always_transparent,
/** resolve normally, even when there is local data but return NODATA for A queries */
local_zone_block_a,
+ /** resolve normally, even when there is local data, but return NODATA for AAAA queries */
+ local_zone_block_aaaa,
+ /** resolve normally, use local data, else return NODATA for A queries */
+ local_zone_block_a_wdata,
+ /** resolve normally, use local data, else return NODATA for AAAA queries */
+ local_zone_block_aaaa_wdata,
/** answer with error, even when there is local data */
local_zone_always_refuse,
/** answer with nxdomain, even when there is local data */
diff --git a/services/mesh.c b/services/mesh.c
index 99361b17f964..add773b88c5a 100644
--- a/services/mesh.c
+++ b/services/mesh.c
@@ -424,6 +424,44 @@ mesh_serve_expired_init(struct mesh_state* mstate, int timeout)
return 1;
}
+/** remove a reply without accounting, rollback the add reply. */
+static void
+mesh_remove_reply_without_accounting(struct mesh_state* s,
+ struct mesh_reply* todel)
+{
+ struct mesh_reply* r, *prev = NULL;
+ for(r = s->reply_list; r; r = r->next) {
+ if(r == todel) {
+ if(prev)
+ prev->next = r->next;
+ else s->reply_list = r->next;
+ r->next = NULL;
+ /* todel is allocated in region */
+ return;
+ }
+ prev = r;
+ }
+}
+
+/** remove a callback without accounting, rollback the add reply. */
+static void
+mesh_remove_callback_without_accounting(struct mesh_state* s,
+ struct mesh_cb* todel)
+{
+ struct mesh_cb* r, *prev = NULL;
+ for(r = s->cb_list; r; r = r->next) {
+ if(r == todel) {
+ if(prev)
+ prev->next = r->next;
+ else s->cb_list = r->next;
+ r->next = NULL;
+ /* todel is allocated in region */
+ return;
+ }
+ prev = r;
+ }
+}
+
void mesh_new_client(struct mesh_area* mesh, struct query_info* qinfo,
struct respip_client_info* cinfo, uint16_t qflags,
struct edns_data* edns, struct comm_reply* rep, uint16_t qid,
@@ -433,7 +471,8 @@ void mesh_new_client(struct mesh_area* mesh, struct query_info* qinfo,
int unique = unique_mesh_state(edns->opt_list_in, mesh->env);
int was_detached = 0;
int was_noreply = 0;
- int added = 0;
+ int added = 0, added_reply_without_accounting = 0, added_tcp = 0;
+ struct mesh_reply* repadded = NULL;
int timeout = mesh->env->cfg->serve_expired?
mesh->env->cfg->serve_expired_client_timeout:0;
struct sldns_buffer* r_buffer = rep->c->buffer;
@@ -544,16 +583,18 @@ void mesh_new_client(struct mesh_area* mesh, struct query_info* qinfo,
}
}
/* add reply to s */
- if(!mesh_state_add_reply(s, edns, rep, qid, qflags, qinfo)) {
+ if(!mesh_state_add_reply(s, edns, rep, qid, qflags, qinfo, &repadded)) {
log_err("mesh_new_client: out of memory; SERVFAIL");
goto servfail_mem;
}
+ added_reply_without_accounting = 1;
if(rep->c->tcp_req_info) {
if(!tcp_req_info_add_meshstate(rep->c->tcp_req_info, mesh, s)) {
log_err("mesh_new_client: out of memory add tcpreqinfo");
goto servfail_mem;
}
}
+ added_tcp = 1;
if(rep->c->use_h2) {
http2_stream_add_meshstate(rep->c->h2_stream, mesh, s);
} else if(rep->c->type == comm_doq && rep->doq_stream) {
@@ -575,6 +616,8 @@ void mesh_new_client(struct mesh_area* mesh, struct query_info* qinfo,
}
}
#endif
+ /* Since the acccounting now happens,
+ * added_reply_without_accounting = 0; but that is not used. */
infra_wait_limit_inc(mesh->env->infra_cache, rep, *mesh->env->now,
mesh->env->cfg);
/* update statistics */
@@ -614,6 +657,11 @@ servfail_mem:
else if(rep->c->type == comm_doq && rep->doq_stream)
doq_stream_remove_mesh_state(rep->doq_stream);
comm_point_send_reply(rep);
+ if(added_reply_without_accounting) {
+ mesh_remove_reply_without_accounting(s, repadded);
+ if(added_tcp && rep->c->tcp_req_info)
+ tcp_req_info_remove_mesh_state(rep->c->tcp_req_info, s);
+ }
if(added)
mesh_state_delete(&s->s);
return;
@@ -622,7 +670,8 @@ servfail_mem:
int
mesh_new_callback(struct mesh_area* mesh, struct query_info* qinfo,
uint16_t qflags, struct edns_data* edns, sldns_buffer* buf,
- uint16_t qid, mesh_cb_func_type cb, void* cb_arg, int rpz_passthru)
+ uint16_t qid, mesh_cb_func_type cb, void* cb_arg, int rpz_passthru,
+ void** unique_info)
{
struct mesh_state* s = NULL;
int unique = unique_mesh_state(edns->opt_list_in, mesh->env);
@@ -631,6 +680,7 @@ mesh_new_callback(struct mesh_area* mesh, struct query_info* qinfo,
int was_detached = 0;
int was_noreply = 0;
int added = 0;
+ struct mesh_cb* add_cb = NULL;
uint16_t mesh_flags = qflags&(BIT_RD|BIT_CD);
if(!unique)
s = mesh_area_find(mesh, NULL, qinfo, mesh_flags, 0, 0);
@@ -676,13 +726,14 @@ mesh_new_callback(struct mesh_area* mesh, struct query_info* qinfo,
}
}
/* add reply to s */
- if(!mesh_state_add_cb(s, edns, buf, cb, cb_arg, qid, qflags)) {
+ if(!mesh_state_add_cb(s, edns, buf, cb, cb_arg, qid, qflags, &add_cb)) {
if(added)
mesh_state_delete(&s->s);
return 0;
}
/* add serve expired timer if not already there */
if(timeout && !mesh_serve_expired_init(s, timeout)) {
+ mesh_remove_callback_without_accounting(s, add_cb);
if(added)
mesh_state_delete(&s->s);
return 0;
@@ -693,6 +744,7 @@ mesh_new_callback(struct mesh_area* mesh, struct query_info* qinfo,
(mesh->env->cachedb_enabled &&
mesh->env->cfg->cachedb_check_when_serve_expired)) {
if(!mesh_serve_expired_init(s, -1)) {
+ mesh_remove_callback_without_accounting(s, add_cb);
if(added)
mesh_state_delete(&s->s);
return 0;
@@ -708,6 +760,8 @@ mesh_new_callback(struct mesh_area* mesh, struct query_info* qinfo,
mesh->num_reply_states ++;
}
mesh->num_reply_addrs++;
+ if(unique_info)
+ *unique_info = s->unique;
if(added)
mesh_run(mesh, s, module_event_new, NULL);
return 1;
@@ -911,32 +965,9 @@ void mesh_report_reply(struct mesh_area* mesh, struct outbound_entry* e,
mesh_run(mesh, e->qstate->mesh_info, event, e);
}
-/** copy strlist to region */
-static struct config_strlist*
-cfg_region_strlist_copy(struct regional* region, struct config_strlist* list)
-{
- struct config_strlist* result = NULL, *last = NULL, *s = list;
- while(s) {
- struct config_strlist* n = regional_alloc_zero(region,
- sizeof(*n));
- if(!n)
- return NULL;
- n->str = regional_strdup(region, s->str);
- if(!n->str)
- return NULL;
- if(last)
- last->next = n;
- else result = n;
- last = n;
- s = s->next;
- }
- return result;
-}
-
struct respip_client_info*
mesh_copy_client_info(struct regional* region, struct respip_client_info* cinfo)
{
- size_t i;
struct respip_client_info* client_info;
client_info = regional_alloc_init(region, cinfo, sizeof(*cinfo));
if(!client_info)
@@ -955,20 +986,13 @@ mesh_copy_client_info(struct regional* region, struct respip_client_info* cinfo)
if(!client_info->tag_actions)
return NULL;
}
- if(cinfo->tag_datas) {
- client_info->tag_datas = regional_alloc_zero(region,
- sizeof(struct config_strlist*)*cinfo->tag_datas_size);
- if(!client_info->tag_datas)
- return NULL;
- for(i=0; i<cinfo->tag_datas_size; i++) {
- if(cinfo->tag_datas[i]) {
- client_info->tag_datas[i] = cfg_region_strlist_copy(
- region, cinfo->tag_datas[i]);
- if(!client_info->tag_datas[i])
- return NULL;
- }
- }
- }
+ /* tag_datas is owned by the matched acl_addr in config_file; its
+ * lifetime is until config reload, which tears down all mesh states
+ * first. Keep the original pointer so client_info_compare()
+ * can recognise two states from the same ACL entry. */
+ /* fast reload insists on dropping the queries when interface-tag-data
+ * or access-control-tag-data are changed. */
+ /* client_info->tag_datas already copied by regional_alloc_init above */
if(cinfo->view) {
/* Do not copy the view pointer but store a name instead.
* The name is looked up later when done, this means that
@@ -1090,14 +1114,6 @@ mesh_state_cleanup(struct mesh_state* mstate)
if(!mstate->replies_sent) {
struct mesh_reply* rep = mstate->reply_list;
struct mesh_cb* cb;
- /* One http2 stream could bring down its comm_point along with
- * the other streams which could share the same query. Do all
- * the http2 stream bookkeeping upfront. */
- for(; rep; rep=rep->next) {
- if(rep->query_reply.c->use_h2)
- http2_stream_remove_mesh_state(rep->h2_stream);
- }
- rep = mstate->reply_list;
/* in tcp_req_info, the mstates linked are removed, but
* the reply_list is now NULL, so the remove-from-empty-list
* takes no time and also it does not do the mesh accounting */
@@ -1241,6 +1257,9 @@ int mesh_add_sub(struct module_qstate* qstate, struct query_info* qinfo,
log_err("mesh_attach_sub: out of memory");
return 0;
}
+ /* inherit RPZ passthru from the parent so respip on the sub
+ * sees the same client-IP/qname PASSTHRU decision */
+ (*sub)->s.rpz_passthru = qstate->rpz_passthru;
#ifdef UNBOUND_DEBUG
n =
#else
@@ -1763,7 +1782,8 @@ void mesh_query_done(struct mesh_state* mstate)
}
}
- if(mstate->reply_list && mstate->s.env->cfg->dns_error_reporting)
+ if(mstate->reply_list && mstate->s.env->cfg->dns_error_reporting
+ && (!rep || rep->security != sec_status_secure))
dns_error_reporting(&mstate->s, rep);
for(r = mstate->reply_list; r; r = r->next) {
@@ -1946,6 +1966,25 @@ struct mesh_state* mesh_area_find(struct mesh_area* mesh,
return result;
}
+struct mesh_state* mesh_area_find_unique(struct mesh_area* mesh,
+ struct respip_client_info* cinfo, struct query_info* qinfo,
+ uint16_t qflags, int prime, int valrec, void* unique_info)
+{
+ struct mesh_state key;
+ struct mesh_state* result;
+
+ key.node.key = &key;
+ key.s.is_priming = prime;
+ key.s.is_valrec = valrec;
+ key.s.qinfo = *qinfo;
+ key.s.query_flags = qflags;
+ key.unique = (struct mesh_state*)unique_info;
+ key.s.client_info = cinfo;
+
+ result = (struct mesh_state*)rbtree_search(&mesh->all, &key);
+ return result;
+}
+
/** remove mesh state callback */
int mesh_state_del_cb(struct mesh_state* s, mesh_cb_func_type cb, void* cb_arg)
{
@@ -1967,7 +2006,7 @@ int mesh_state_del_cb(struct mesh_state* s, mesh_cb_func_type cb, void* cb_arg)
int mesh_state_add_cb(struct mesh_state* s, struct edns_data* edns,
sldns_buffer* buf, mesh_cb_func_type cb, void* cb_arg,
- uint16_t qid, uint16_t qflags)
+ uint16_t qid, uint16_t qflags, struct mesh_cb** result)
{
struct mesh_cb* r = regional_alloc(s->s.region,
sizeof(struct mesh_cb));
@@ -1991,13 +2030,14 @@ int mesh_state_add_cb(struct mesh_state* s, struct edns_data* edns,
r->qflags = qflags;
r->next = s->cb_list;
s->cb_list = r;
+ *result = r;
return 1;
}
int mesh_state_add_reply(struct mesh_state* s, struct edns_data* edns,
struct comm_reply* rep, uint16_t qid, uint16_t qflags,
- const struct query_info* qinfo)
+ const struct query_info* qinfo, struct mesh_reply** result)
{
struct mesh_reply* r = regional_alloc(s->s.region,
sizeof(struct mesh_reply));
@@ -2078,6 +2118,7 @@ int mesh_state_add_reply(struct mesh_state* s, struct edns_data* edns,
r->local_alias = NULL;
s->reply_list = r;
+ *result = r;
return 1;
}
@@ -2235,8 +2276,29 @@ void mesh_run(struct mesh_area* mesh, struct mesh_state* mstate,
enum module_ev ev, struct outbound_entry* e)
{
enum module_ext_state s;
+ int numrun = 0;
verbose(VERB_ALGO, "mesh_run: start");
while(mstate) {
+ if(numrun++ > MESH_MAX_RUN_ITER) {
+ /* These modules are too much to activate, stop them.*/
+ log_err("Too many module run iterations, deleting");
+ while(mstate) {
+ /* notify supers */
+ if(mstate->super_set.count > 0) {
+ verbose(VERB_ALGO, "notify supers of failure");
+ mstate->s.return_msg = NULL;
+ mstate->s.return_rcode = LDNS_RCODE_SERVFAIL;
+ mesh_walk_supers(mesh, mstate);
+ }
+ mesh_state_delete(&mstate->s);
+ if(mesh->run.count > 0) {
+ /* pop random element off the runnable tree */
+ mstate = (struct mesh_state*)mesh->run.root->key;
+ (void)rbtree_delete(&mesh->run, mstate);
+ } else mstate = NULL;
+ }
+ break;
+ }
/* run the module */
fptr_ok(fptr_whitelist_mod_operate(
mesh->mods.mod[mstate->s.curmod]->operate));
@@ -2388,7 +2450,8 @@ void mesh_list_remove(struct mesh_state* m, struct mesh_state** fp,
}
void mesh_state_remove_reply(struct mesh_area* mesh, struct mesh_state* m,
- struct comm_point* cp, struct doq_stream* doq_stream)
+ struct comm_point* cp, struct http2_stream* h2_stream,
+ struct doq_stream* doq_stream)
{
struct mesh_reply* n, *prev = NULL;
n = m->reply_list;
@@ -2397,6 +2460,7 @@ void mesh_state_remove_reply(struct mesh_area* mesh, struct mesh_state* m,
if(!n) return; /* nothing to remove, also no accounting needed */
while(n) {
if(n->query_reply.c == cp
+ && (!h2_stream || n->h2_stream == h2_stream)
&& (!doq_stream || n->query_reply.doq_stream == doq_stream)) {
/* unlink it */
if(prev) prev->next = n->next;
@@ -2692,13 +2756,30 @@ int mesh_jostle_exceeded(struct mesh_area* mesh)
}
void mesh_remove_callback(struct mesh_area* mesh, struct query_info* qinfo,
- uint16_t qflags, mesh_cb_func_type cb, void* cb_arg)
+ uint16_t qflags, mesh_cb_func_type cb, void* cb_arg, void* unique_info)
{
struct mesh_state* s = NULL;
s = mesh_area_find(mesh, NULL, qinfo, qflags&(BIT_RD|BIT_CD), 0, 0);
- if(!s) return;
- if(!mesh_state_del_cb(s, cb, cb_arg)) return;
+ if(s && mesh_state_del_cb(s, cb, cb_arg))
+ goto removed;
+ if(unique_info) {
+ s = mesh_area_find_unique(mesh, NULL, qinfo,
+ qflags&(BIT_RD|BIT_CD), 0, 0, unique_info);
+ if(s && mesh_state_del_cb(s, cb, cb_arg))
+ goto removed;
+ }
+ /* mesh_area_find builds key.unique=NULL and cannot match a state
+ * created with mesh_state_make_unique (e.g. subnetcache sets
+ * env->unique_mesh). Fall back to a linear scan; cb+cb_arg is an
+ * exact key (mesh_state_del_cb compares both).
+ * This works for both lookups for zonemd and for hostname authzone. */
+ RBTREE_FOR(s, struct mesh_state*, &mesh->all) {
+ if(s->cb_list && mesh_state_del_cb(s, cb, cb_arg))
+ goto removed;
+ }
+ return;
+removed:
/* It was in the list and removed. */
log_assert(mesh->num_reply_addrs > 0);
mesh->num_reply_addrs--;
diff --git a/services/mesh.h b/services/mesh.h
index 6ea63d098916..9e3da53a7306 100644
--- a/services/mesh.h
+++ b/services/mesh.h
@@ -70,6 +70,13 @@ struct respip_client_info;
#define MESH_MAX_ACTIVATION 10000
/**
+ * Maximum number of mesh state run items. These are different modules
+ * activated during a mesh run. Any more is likely an infinite loop
+ * in the module. It is then terminated, and states are deleted.
+ */
+#define MESH_MAX_RUN_ITER 10000
+
+/**
* Max number of references-to-references-to-references.. search size.
* Any more is treated like 'too large', and the creation of a new
* dependency is failed (so that no loops can be created).
@@ -342,11 +349,14 @@ void mesh_new_client(struct mesh_area* mesh, struct query_info* qinfo,
* @param cb_arg: callback user arg.
* @param rpz_passthru: if true, the rpz passthru was previously found and
* further rpz processing is stopped.
+ * @param unique_info: if nonnull, unique info is passed back to be used
+ * for the callback remove call. It does not need to be deallocated.
* @return 0 on error.
*/
int mesh_new_callback(struct mesh_area* mesh, struct query_info* qinfo,
uint16_t qflags, struct edns_data* edns, struct sldns_buffer* buf,
- uint16_t qid, mesh_cb_func_type cb, void* cb_arg, int rpz_passthru);
+ uint16_t qid, mesh_cb_func_type cb, void* cb_arg, int rpz_passthru,
+ void** unique_info);
/**
* New prefetch message. Create new query state if needed.
@@ -544,6 +554,23 @@ struct mesh_state* mesh_area_find(struct mesh_area* mesh,
uint16_t qflags, int prime, int valrec);
/**
+ * Find a unique mesh state in the mesh area. Pass relevant flags.
+ *
+ * @param mesh: the mesh area to look in.
+ * @param cinfo: if non-NULL client specific info that may affect IP-based
+ * actions that apply to the query result.
+ * @param qinfo: what query
+ * @param qflags: if RD / CD bit is set or not.
+ * @param prime: if it is a priming query.
+ * @param valrec: if it is a validation-recursion query.
+ * @param unique_info: the unique info for the state. NULL can be passed.
+ * @return: mesh state or NULL if not found.
+ */
+struct mesh_state* mesh_area_find_unique(struct mesh_area* mesh,
+ struct respip_client_info* cinfo, struct query_info* qinfo,
+ uint16_t qflags, int prime, int valrec, void* unique_info);
+
+/**
* Setup attachment super/sub relation between super and sub mesh state.
* The relation must not be present when calling the function.
* Does not update stat items in mesh_area.
@@ -562,11 +589,12 @@ int mesh_state_attachment(struct mesh_state* super, struct mesh_state* sub);
* @param qid: ID of reply.
* @param qflags: original query flags.
* @param qinfo: original query info.
+ * @param result: the allocated reply structure, for rollback.
* @return: 0 on alloc error.
*/
int mesh_state_add_reply(struct mesh_state* s, struct edns_data* edns,
struct comm_reply* rep, uint16_t qid, uint16_t qflags,
- const struct query_info* qinfo);
+ const struct query_info* qinfo, struct mesh_reply** result);
/**
* Create new callback structure and attach it to a mesh state.
@@ -578,11 +606,12 @@ int mesh_state_add_reply(struct mesh_state* s, struct edns_data* edns,
* @param cb_arg: callback user arg.
* @param qid: ID of reply.
* @param qflags: original query flags.
+ * @param result: the allocated callback structure, for rollback.
* @return: 0 on alloc error.
*/
int mesh_state_add_cb(struct mesh_state* s, struct edns_data* edns,
struct sldns_buffer* buf, mesh_cb_func_type cb, void* cb_arg,
- uint16_t qid, uint16_t qflags);
+ uint16_t qid, uint16_t qflags, struct mesh_cb** result);
/**
* Run the mesh. Run all runnable mesh states. Which can create new
@@ -683,11 +712,14 @@ void mesh_list_remove(struct mesh_state* m, struct mesh_state** fp,
* @param mesh: to update the counters.
* @param m: the mesh state.
* @param cp: the comm_point to remove from the list.
+ * @param h2_stream: if not NULL, it specifies the h2_stream to match
+ * for the delete.
* @param doq_stream: if not NULL, it specifies the doq_stream to match
* for the delete.
*/
void mesh_state_remove_reply(struct mesh_area* mesh, struct mesh_state* m,
- struct comm_point* cp, struct doq_stream* doq_stream);
+ struct comm_point* cp, struct http2_stream* h2_stream,
+ struct doq_stream* doq_stream);
/** Callback for when the serve expired client timer has run out. Tries to
* find an expired answer in the cache and reply that to the client.
@@ -734,9 +766,10 @@ void mesh_respond_serve_expired(struct mesh_state* mstate);
* @param qflags: flags from client query.
* @param cb: callback function.
* @param cb_arg: callback user arg.
+ * @param unique_info: if not NULL, used to find a unique state for removal.
*/
void mesh_remove_callback(struct mesh_area* mesh, struct query_info* qinfo,
- uint16_t qflags, mesh_cb_func_type cb, void* cb_arg);
+ uint16_t qflags, mesh_cb_func_type cb, void* cb_arg, void* unique_info);
/** Copy the client info to the query region. */
struct respip_client_info* mesh_copy_client_info(struct regional* region,
diff --git a/services/outside_network.c b/services/outside_network.c
index 9dfa8b4d0c46..0f22c920f478 100644
--- a/services/outside_network.c
+++ b/services/outside_network.c
@@ -1702,6 +1702,12 @@ static int setup_if(struct port_if* pif, const char* addrstr, size_t numfd,
!netblockstrtoaddr(addrstr, UNBOUND_DNS_PORT,
&pif->addr, &pif->addrlen, &pif->pfxlen))
return 0;
+#ifdef INT_MAX
+ if(numfd > (size_t)INT_MAX) {
+ log_err("num_ports exceeds INT_MAX");
+ return 0;
+ }
+#endif
#ifndef DISABLE_EXPLICIT_PORT_RANDOMISATION
pif->shpif = shared_ports_find_if(shp, &pif->addr, pif->addrlen,
pif->pfxlen);
@@ -1777,6 +1783,13 @@ outside_network_create(struct comm_base *base, size_t bufsize,
outside_network_delete(outnet);
return NULL;
}
+#ifdef INT_MAX
+ if(num_ports > (size_t)INT_MAX) {
+ log_err("outgoing num_ports exceeds INT_MAX");
+ outside_network_delete(outnet);
+ return NULL;
+ }
+#endif
#ifndef INET6
do_ip6 = 0;
#endif
@@ -3349,9 +3362,9 @@ serviced_udp_callback(struct comm_point* c, void* arg, int error,
if(error == NETEVENT_TIMEOUT) {
if(sq->status == serviced_query_UDP_EDNS && sq->last_rtt < 5000 &&
(serviced_query_udp_size(sq, serviced_query_UDP_EDNS_FRAG) < serviced_query_udp_size(sq, serviced_query_UDP_EDNS))) {
- /* fallback to 1480/1280 */
+ /* fallback to 1472/1232 */
sq->status = serviced_query_UDP_EDNS_FRAG;
- log_name_addr(VERB_ALGO, "try edns1xx0", sq->qbuf+10,
+ log_name_addr(VERB_ALGO, "try edns1xx2", sq->qbuf+10,
&sq->addr, sq->addrlen);
if(!serviced_udp_send(sq, c->buffer)) {
serviced_callbacks(sq, NETEVENT_CLOSED, c, rep);
@@ -3488,7 +3501,8 @@ outnet_serviced_query(struct outside_network* outnet,
char* tls_auth_name, struct sockaddr_storage* addr, socklen_t addrlen,
uint8_t* zone, size_t zonelen, struct module_qstate* qstate,
comm_point_callback_type* callback, void* callback_arg,
- sldns_buffer* buff, struct module_env* env, int* was_ratelimited)
+ sldns_buffer* buff, struct module_env* env, int* was_ratelimited,
+ int* ratelimit_incremented)
{
struct serviced_query* sq;
struct service_callback* cb;
@@ -3560,6 +3574,7 @@ outnet_serviced_query(struct outside_network* outnet,
"delegation point", zone,
LDNS_RR_TYPE_NS, LDNS_RR_CLASS_IN);
}
+ *ratelimit_incremented = 1;
}
/* make new serviced query entry */
sq = serviced_create(outnet, buff, dnssec, want_dnssec, nocaps,
@@ -3765,7 +3780,33 @@ setup_comm_ssl(struct comm_point* cp, struct outside_network* outnet,
(void)SSL_set_tlsext_host_name(cp->ssl, host);
}
#endif
-#ifdef HAVE_SSL_SET1_HOST
+#ifdef HAVE_SSL_SET1_DNSNAME
+ if((SSL_CTX_get_verify_mode(outnet->sslctx)&SSL_VERIFY_PEER)) {
+ /* because we set SSL_VERIFY_PEER, in netevent in
+ * ssl_handshake, it'll check if the certificate
+ * verification has succeeded */
+ /* SSL_VERIFY_PEER is set on the sslctx */
+ /* and the certificates to verify with are loaded into
+ * it with SSL_load_verify_locations or
+ * SSL_CTX_set_default_verify_paths */
+ /* setting the hostname makes openssl verify the
+ * host name in the x509 certificate in the
+ * SSL connection*/
+ struct sockaddr_storage tmpaddr;
+ socklen_t tmpaddrlen = (socklen_t)sizeof(tmpaddr);
+ if(ipstrtoaddr(host, UNBOUND_DNS_PORT, &tmpaddr, &tmpaddrlen)) {
+ if(!SSL_set1_ipaddr(cp->ssl, host)) {
+ log_err("SSL_set1_ipaddr failed");
+ return 0;
+ }
+ } else {
+ if(!SSL_set1_dnsname(cp->ssl, host)) {
+ log_err("SSL_set1_dnsname failed");
+ return 0;
+ }
+ }
+ }
+#elif defined(HAVE_SSL_SET1_HOST)
if((SSL_CTX_get_verify_mode(outnet->sslctx)&SSL_VERIFY_PEER)) {
/* because we set SSL_VERIFY_PEER, in netevent in
* ssl_handshake, it'll check if the certificate
@@ -3894,7 +3935,8 @@ outnet_comm_point_for_http(struct outside_network* outnet,
/* outnet_tcp_connect has closed fd on error for us */
return 0;
}
- cp = comm_point_create_http_out(outnet->base, 65552, cb, cb_arg,
+ cp = comm_point_create_http_out(outnet->base,
+ sldns_buffer_capacity(outnet->udp_buff), cb, cb_arg,
outnet->udp_buff);
if(!cp) {
log_err("malloc failure");
@@ -4085,13 +4127,15 @@ static int shared_ports_alloc_ifs(struct shared_ports* shp, char** ifs,
size_t done_4 = 0, done_6 = 0;
int i;
for(i=0; i<num_ifs; i++) {
- if(str_is_ip6(ifs[i]) && do_ip6) {
+ if(str_is_ip6(ifs[i]) && do_ip6 &&
+ (int)done_6 < shp->num_ip6) {
if(!shared_ports_setup_if(&shp->ip6_ifs[done_6],
ifs[i], availports, numavailports))
return 0;
done_6++;
}
- if(!str_is_ip6(ifs[i]) && do_ip4) {
+ if(!str_is_ip6(ifs[i]) && do_ip4 &&
+ (int)done_4 < shp->num_ip4) {
if(!shared_ports_setup_if(&shp->ip4_ifs[done_4],
ifs[i], availports, numavailports))
return 0;
@@ -4112,16 +4156,21 @@ struct shared_ports* shared_ports_create(char** ifs, int num_ifs, int do_ip4,
return NULL;
}
lock_basic_init(&shp->lock);
- lock_protect(&shp->lock, shp, sizeof(*shp));
+ lock_protect(&shp->lock, &shp->ip4_ifs, sizeof(shp->ip4_ifs));
+ lock_protect(&shp->lock, &shp->num_ip4, sizeof(shp->num_ip4));
+ lock_protect(&shp->lock, &shp->ip6_ifs, sizeof(shp->ip6_ifs));
+ lock_protect(&shp->lock, &shp->num_ip6, sizeof(shp->num_ip6));
#ifndef DISABLE_EXPLICIT_PORT_RANDOMISATION
/* Allocate interfaces */
+ lock_basic_lock(&shp->lock);
if(!shared_ports_alloc_ifs(shp, ifs, num_ifs, do_ip4, do_ip6,
availports, numavailports)) {
log_err("malloc failed");
shared_ports_delete(shp);
return NULL;
}
+ lock_basic_unlock(&shp->lock);
#else
(void)ifs; (void)num_ifs; (void)do_ip4; (void)do_ip6;
(void)availports; (void)numavailports;
@@ -4199,6 +4248,9 @@ int shared_ports_fetch_random(struct shared_ports* shp,
int portno = 0, my_port = 0;
if(!shpif)
return 0;
+# ifdef THREADS_DISABLED
+ (void)shp;
+# endif
lock_basic_lock(&shp->lock);
if(udp_connect) {
/* if we connect() we cannot reuse fds for a port. */
@@ -4256,6 +4308,9 @@ void shared_ports_return_port(struct shared_ports* shp,
#ifndef DISABLE_EXPLICIT_PORT_RANDOMISATION
if(!shpif)
return;
+# ifdef THREADS_DISABLED
+ (void)shp;
+# endif
lock_basic_lock(&shp->lock);
log_assert(shpif->inuse > 0);
shpif->avail_ports[shpif->avail_total - shpif->inuse] = port;
diff --git a/services/outside_network.h b/services/outside_network.h
index 8841c607d8cc..f135a48471e2 100644
--- a/services/outside_network.h
+++ b/services/outside_network.h
@@ -538,7 +538,7 @@ struct serviced_query {
serviced_query_UDP_EDNS_fallback,
/** probe to test TCP noEDNS0 (EDNS gives FORMERRorNOTIMP) */
serviced_query_TCP_EDNS_fallback,
- /** send UDP query with EDNS1480 (or 1280) */
+ /** send UDP query with EDNS1472 (or 1232) */
serviced_query_UDP_EDNS_FRAG
}
/** variable with current status */
@@ -697,6 +697,8 @@ void pending_delete(struct outside_network* outnet, struct pending* p);
* @param env: the module environment.
* @param was_ratelimited: it will signal back if the query failed to pass the
* ratelimit check.
+ * @param ratelimit_incremented: set to true if the ratelimit counter
+ * was increased.
* @return 0 on error, or pointer to serviced query that is used to answer
* this serviced query may be shared with other callbacks as well.
*/
@@ -706,7 +708,8 @@ struct serviced_query* outnet_serviced_query(struct outside_network* outnet,
char* tls_auth_name, struct sockaddr_storage* addr, socklen_t addrlen,
uint8_t* zone, size_t zonelen, struct module_qstate* qstate,
comm_point_callback_type* callback, void* callback_arg,
- struct sldns_buffer* buff, struct module_env* env, int* was_ratelimited);
+ struct sldns_buffer* buff, struct module_env* env, int* was_ratelimited,
+ int* ratelimit_incremented);
/**
* Remove service query callback.
diff --git a/services/rpz.c b/services/rpz.c
index 5121e46b5457..1a23e52a0ae7 100644
--- a/services/rpz.c
+++ b/services/rpz.c
@@ -721,13 +721,22 @@ rpz_insert_local_zones_trigger(struct local_zones* lz, uint8_t* dname,
char* rrstr = sldns_wire2str_rr(rr, rr_len);
if(rrstr == NULL) {
log_err("malloc error while inserting rpz nsdname trigger");
- free(dname);
+ if(!newzone)
+ free(dname);
lock_rw_unlock(&lz->lock);
return;
}
lock_rw_wrlock(&z->lock);
- local_zone_enter_rr(z, dname, dnamelen, dnamelabs, rrtype,
- rrclass, ttl, rdata, rdata_len, rrstr);
+ if(!local_zone_enter_rr(z, dname, dnamelen, dnamelabs, rrtype,
+ rrclass, ttl, rdata, rdata_len, rrstr)) {
+ log_err("rpz: could not enter local-data: %s", rrstr);
+ if(!newzone)
+ free(dname);
+ lock_rw_unlock(&z->lock);
+ lock_rw_unlock(&lz->lock);
+ free(rrstr);
+ return;
+ }
lock_rw_unlock(&z->lock);
free(rrstr);
}
@@ -805,8 +814,9 @@ rpz_insert_nsdname_trigger(struct rpz* r, uint8_t* dname, size_t dnamelen,
uint8_t* dname_stripped = NULL;
size_t dnamelen_stripped = 0;
- rpz_strip_nsdname_suffix(dname, dnamelen, &dname_stripped,
- &dnamelen_stripped);
+ if(!rpz_strip_nsdname_suffix(dname, dnamelen, &dname_stripped,
+ &dnamelen_stripped))
+ return;
if(a == RPZ_INVALID_ACTION) {
verbose(VERB_ALGO, "rpz: skipping invalid action");
free(dname_stripped);
@@ -904,8 +914,8 @@ rpz_report_rrset_error(const char* msg, uint8_t* rr, size_t rr_len) {
/* from localzone.c; difference is we don't have a dname */
static struct local_rrset*
-rpz_clientip_new_rrset(struct regional* region,
- struct clientip_synthesized_rr* raddr, uint16_t rrtype, uint16_t rrclass)
+rpz_clientip_new_rrset(struct regional* region, uint16_t rrtype,
+ uint16_t rrclass)
{
struct packed_rrset_data* pd;
struct local_rrset* rrset = (struct local_rrset*)
@@ -914,8 +924,6 @@ rpz_clientip_new_rrset(struct regional* region,
log_err("out of memory");
return NULL;
}
- rrset->next = raddr->data;
- raddr->data = rrset;
rrset->rrset = (struct ub_packed_rrset_key*)
regional_alloc_zero(region, sizeof(*rrset->rrset));
if(rrset->rrset == NULL) {
@@ -954,12 +962,18 @@ rpz_clientip_enter_rr(struct regional* region, struct clientip_synthesized_rr* r
return 0;
}
- rrset = rpz_clientip_new_rrset(region, raddr, rrtype, rrclass);
- if(raddr->data == NULL) {
+ rrset = rpz_clientip_new_rrset(region, rrtype, rrclass);
+ if(rrset == NULL) {
return 0;
}
- return rrset_insert_rr(region, rrset->rrset->entry.data, rdata, rdata_len, ttl, "");
+ if(!rrset_insert_rr(region, rrset->rrset->entry.data, rdata, rdata_len, ttl, ""))
+ return 0;
+
+ /* Link in now that the allocations have succeeded. */
+ rrset->next = raddr->data;
+ raddr->data = rrset;
+ return 1;
}
static int
@@ -982,7 +996,6 @@ rpz_clientip_insert_trigger_rr(struct clientip_synthesized_rrset* set, struct so
lock_rw_wrlock(&node->lock);
lock_rw_unlock(&set->lock);
- node->action = a;
if(a == RPZ_LOCAL_DATA_ACTION) {
if(!rpz_clientip_enter_rr(set->region, node, rrtype,
rrclass, ttl, rdata, rdata_len)) {
@@ -992,6 +1005,7 @@ rpz_clientip_insert_trigger_rr(struct clientip_synthesized_rrset* set, struct so
}
}
+ node->action = a;
lock_rw_unlock(&node->lock);
@@ -1977,8 +1991,9 @@ rpz_synthesize_nodata(struct rpz* ATTR_UNUSED(r), struct module_qstate* ms,
0, /* total */
sec_status_insecure,
LDNS_EDE_NONE);
- if(msg->rep)
- msg->rep->authoritative = 1;
+ if(!msg->rep)
+ return NULL;
+ msg->rep->authoritative = 1;
if(!rpz_add_soa(msg->rep, ms, az))
return NULL;
return msg;
@@ -2008,8 +2023,9 @@ rpz_synthesize_nxdomain(struct rpz* r, struct module_qstate* ms,
0, /* total */
sec_status_insecure,
LDNS_EDE_NONE);
- if(msg->rep)
- msg->rep->authoritative = 1;
+ if(!msg->rep)
+ return NULL;
+ msg->rep->authoritative = 1;
if(!rpz_add_soa(msg->rep, ms, az))
return NULL;
return msg;
diff --git a/sldns/keyraw.c b/sldns/keyraw.c
index 42a9262a30da..ab5c459147cf 100644
--- a/sldns/keyraw.c
+++ b/sldns/keyraw.c
@@ -67,19 +67,28 @@ sldns_rr_dnskey_key_size_raw(const unsigned char* keydata,
case LDNS_RSASHA512:
#endif
if (len > 0) {
+ size_t nlen, offset;
if (keydata[0] == 0) {
/* big exponent */
if (len > 3) {
memmove(&int16, keydata + 1, 2);
exp = ntohs(int16);
- return (len - exp - 3)*8;
+ offset = 3;
} else {
return 0;
}
} else {
exp = keydata[0];
- return (len-exp-1)*8;
+ offset = 1;
}
+ if(exp+offset > len)
+ return 0;
+ nlen = len - exp - offset;
+ /* prefixed zeroes mean a smaller value */
+ while(nlen > 0 &&
+ keydata[len-nlen] == 0)
+ nlen--;
+ return nlen*8;
} else {
return 0;
}
diff --git a/sldns/str2wire.c b/sldns/str2wire.c
index 392fc8f1d32a..d2c44980c4e5 100644
--- a/sldns/str2wire.c
+++ b/sldns/str2wire.c
@@ -842,7 +842,8 @@ rrinternal_parse_rdata(sldns_buffer* strbuf, char* token, size_t token_len,
sldns_write_uint16(rr+dname_len+8, (uint16_t)(rr_cur_len-dname_len-10));
*rr_len = rr_cur_len;
/* SVCB/HTTPS handling */
- if (rr_type == LDNS_RR_TYPE_SVCB || rr_type == LDNS_RR_TYPE_HTTPS) {
+ if ((rr_type == LDNS_RR_TYPE_SVCB || rr_type == LDNS_RR_TYPE_HTTPS)
+ && !was_unknown_rr_format) {
size_t rdata_len = rr_cur_len - dname_len - 10;
uint8_t *rdata = rr+dname_len + 10;
@@ -1201,7 +1202,7 @@ sldns_str2wire_svcbparam_ipv4hint(const char* val, uint8_t* rd, size_t* rd_len)
{
size_t count;
char ip_str[INET_ADDRSTRLEN+1];
- char *next_ip_str;
+ const char *next_ip_str;
size_t i;
for (i = 0, count = 1; val[i]; i++) {
@@ -1256,7 +1257,7 @@ sldns_str2wire_svcbparam_ipv6hint(const char* val, uint8_t* rd, size_t* rd_len)
{
size_t count;
char ip_str[INET6_ADDRSTRLEN+1];
- char *next_ip_str;
+ const char *next_ip_str;
size_t i;
for (i = 0, count = 1; val[i]; i++) {
@@ -1317,7 +1318,7 @@ static int
sldns_str2wire_svcbparam_mandatory(const char* val, uint8_t* rd, size_t* rd_len)
{
size_t i, count, val_len;
- char* next_key;
+ const char* next_key;
val_len = strlen(val);
@@ -1410,6 +1411,7 @@ sldns_str2wire_svcbparam_ech_value(const char* val, uint8_t* rd, size_t* rd_len)
return LDNS_WIREPARSE_ERR_BUFFER_TOO_SMALL;
sldns_write_uint16(rd, SVCB_KEY_ECH);
sldns_write_uint16(rd + 2, 0);
+ *rd_len = 4;
return LDNS_WIREPARSE_ERR_OK;
}
diff --git a/smallapp/unbound-anchor.c b/smallapp/unbound-anchor.c
index fac8676d1769..8f84bae0e267 100644
--- a/smallapp/unbound-anchor.c
+++ b/smallapp/unbound-anchor.c
@@ -156,7 +156,7 @@ char* wsa_strerror(int err);
#endif
static const char ICANN_UPDATE_CA[] =
- /* The ICANN CA fetched at 24 Sep 2010. Valid to 2028 */
+ /* The ICANN CA fetched at 29 May 2026. Valid to 20 Mar 2045 */
"-----BEGIN CERTIFICATE-----\n"
"MIIDdzCCAl+gAwIBAgIBATANBgkqhkiG9w0BAQsFADBdMQ4wDAYDVQQKEwVJQ0FO\n"
"TjEmMCQGA1UECxMdSUNBTk4gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxFjAUBgNV\n"
@@ -177,6 +177,40 @@ static const char ICANN_UPDATE_CA[] =
"15nu5JBSewrCkYqYYmaxyOC3WrVGfHZxVI7MpIFcGdvSb2a1uyuua8l0BKgk3ujF\n"
"0/wsHNeP22qNyVO+XVBzrM8fk8BSUFuiT/6tZTYXRtEt5aKQZgXbKU5dUF3jT9qg\n"
"j/Br5BZw3X/zd325TvnswzMC1+ljLzHnQGGk\n"
+ "-----END CERTIFICATE-----\n"
+ "\n"
+ "-----BEGIN CERTIFICATE-----\n"
+ "MIIFsTCCA5mgAwIBAgIUQFsYkgroBoe69HKQPy8/DQuiLwgwDQYJKoZIhvcNAQEN\n"
+ "BQAwYDELMAkGA1UEBhMCVVMxDjAMBgNVBAoMBUlDQU5OMSYwJAYDVQQLDB1JQ0FO\n"
+ "TiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEZMBcGA1UEAwwQSUNBTk4gUm9vdCBD\n"
+ "QSB2MjAeFw0yNTAzMjAyMTA0MjZaFw00NTAzMjAyMTA0MjZaMGAxCzAJBgNVBAYT\n"
+ "AlVTMQ4wDAYDVQQKDAVJQ0FOTjEmMCQGA1UECwwdSUNBTk4gQ2VydGlmaWNhdGlv\n"
+ "biBBdXRob3JpdHkxGTAXBgNVBAMMEElDQU5OIFJvb3QgQ0EgdjIwggIiMA0GCSqG\n"
+ "SIb3DQEBAQUAA4ICDwAwggIKAoICAQCepDjrubjR7en/uZWo7MAnzFIIvUPYEc7b\n"
+ "+AlefdlEDQ1JEmpfrvt/4CX9lJ9ShIBR6zwrQeDvrj5XZ2kEjbJ8Nnc6sM/ojdyr\n"
+ "5jSLqcDPH9fJg7jCW02KF8CtqWsnqcW6jjTIZcCWkg9lEixdF8QAjIEgJtZte+Yh\n"
+ "XeyN0KD2EaO8U5Id0bLvMyphuO1OCGKzDtetcX8K7SvoshdJx3lPIlYzqXl0nVAY\n"
+ "iCeNdeDzTNjEOHYJOP6dYoZI8nKRJltMkZcCCjBE2vQuSMY2w4pOlWk1skHjMWXj\n"
+ "QsZzngXuNG56zialL0TPEDVWjWRjzOnruHUAs4KUY8Zs+Nt8JdSlXMi825PKoKpp\n"
+ "ESs7/ZG1mPjVOYp7Z7ntrRjJFgnUBjWzVPOx4yHiJj1ur+OpqP18oP5YfqY+tKmz\n"
+ "7vlfRGGOEd08a0XgZISDNKpMAovn5pRUHTWPCCjc28tns9ODPvr1cQi+QSwTv+v8\n"
+ "wnA5etGrsead88Rv/ieaq5ikMJTRDfW4d9SY2uPcMGvfU6VdQLRhQkzEVTQNAJ1R\n"
+ "i2lOoJbbjwnK+OU9OhST/OqdjJDJAhTAstdUnrr8WBU80xM75MIaaTjSBCvZ1wro\n"
+ "pAi2hYb0tedTH6WarSW3MH9HcEoGGzs2GD3hDB0a2eCp+TdAs8Up944SjY7UV4Jx\n"
+ "sOC7TxbmkQIDAQABo2MwYTAdBgNVHQ4EFgQU+1EuMRuOZ/ecsfYzNQ+yGZsxZrMw\n"
+ "HwYDVR0jBBgwFoAU+1EuMRuOZ/ecsfYzNQ+yGZsxZrMwDwYDVR0TAQH/BAUwAwEB\n"
+ "/zAOBgNVHQ8BAf8EBAMCAf4wDQYJKoZIhvcNAQENBQADggIBACz38SkKR1WsEZnX\n"
+ "x1BKaS5/oQPw+7quDQCKGoD2Vz7CR7yQh4zQn/Hh0173vKvRWcwN2io0iLJ1ysv5\n"
+ "jXBLeWZh3djiQlXP3iWp4s01SiUwmFssxi3SD1IT2jNosk1xcVWthle9zth7Y8Mp\n"
+ "iUJYnHobP7tX7H2g+I8Rqw2sEX/yPSYMYcdH5a1xRMPOLHTyOaCgevRBBBtXkiAJ\n"
+ "Ob9QKZTaFaXntPXBKNSGkVb2d+2qKyJMrwd0KNI+SVSoIgNDAxkNOdi9x6X6ETW2\n"
+ "4aYFsytohFVkNUXx2eFYRim4yjnD8PHIvDQSofLfSAC5TOERtwUFd+Mw3/di+HCm\n"
+ "50OJPyoxZLjWQCCfNUZzgZZOe+zT6lgBiV3KB0UuuAdq7jGUeH/328HJDi30BvNj\n"
+ "+TNb9Hmpm+ZDguM+f8p7GxapX8AVNu/xErtl4msYiVJrr1qqV+qLLEMwIz0raujG\n"
+ "FFDd6N43wgduffbU20pThry0Y7rku5+RZjUZe/T7ZL+NUKiqXAPufrkqVkjX/8T+\n"
+ "wyNZz8KkiQwkJthojpppa79FDxn/A2M8tt+FQqIONAUPR2m5nurVgftQH0z5ZtDB\n"
+ "YykUlkUiPOJNXoDOIkbpA7lW2wezeY4te+EiSeUZSE541N5QBwaItaonIZsIgn6C\n"
+ "pMnwChV9468oRE20bdqq9+Go7g4E\n"
"-----END CERTIFICATE-----\n";
static const char DS_TRUST_ANCHOR[] =
@@ -1674,18 +1708,116 @@ static unsigned long
get_usage_of_ex(X509* cert)
{
unsigned long val = 0;
+#ifdef HAVE_X509_GET_KEY_USAGE
+ val = X509_get_key_usage(cert);
+ if (val == UINT32_MAX)
+ return 0;
+#else
ASN1_BIT_STRING* s;
if((s=X509_get_ext_d2i(cert, NID_key_usage, NULL, NULL))) {
- if(s->length > 0) {
- val = s->data[0];
- if(s->length > 1)
- val |= s->data[1] << 8;
+# ifdef HAVE_ASN1_STRING_GET0_DATA
+ const unsigned char *data = ASN1_STRING_get0_data(s);
+# else
+ const unsigned char *data = ASN1_STRING_data(s);
+# endif
+ int len = ASN1_STRING_length(s);
+ if(len > 0) {
+ val = data[0];
+ if(len > 1)
+ val |= data[1] << 8;
}
ASN1_BIT_STRING_free(s);
}
+#endif
return val;
}
+#if !defined(HAVE_X509_NAME_GET_TEXT_BY_NID) || defined(DEPRECATED_X509_NAME_GET_TEXT_BY_NID)
+/** print verbose output about name extension data. */
+static void
+print_name_ext(
+#if OPENSSL_VERSION_NUMBER >= 0x40000000
+ const
+#endif
+ X509_NAME* nm, int nid, const char* str)
+{
+ int lastpos = -1;
+ for(;;) {
+#if OPENSSL_VERSION_NUMBER >= 0x40000000
+ const
+#endif
+ X509_NAME_ENTRY* ne;
+#if OPENSSL_VERSION_NUMBER >= 0x40000000
+ const
+#endif
+ ASN1_STRING *asn;
+ const unsigned char *data;
+ char buf[1024];
+
+ lastpos = X509_NAME_get_index_by_NID(nm, nid, lastpos);
+ if(lastpos == -1 || lastpos == -2)
+ break;
+ ne = X509_NAME_get_entry(nm, lastpos);
+ if(!ne) continue;
+ asn = X509_NAME_ENTRY_get_data(ne);
+ if(!asn) continue;
+# ifdef HAVE_ASN1_STRING_GET0_DATA
+ data = ASN1_STRING_get0_data(asn);
+# else
+ data = ASN1_STRING_data(asn);
+# endif
+ if(!data) continue;
+ if(ASN1_STRING_length(asn) > (int)sizeof(buf)-1) continue;
+ memcpy(buf, data, ASN1_STRING_length(asn));
+ buf[ASN1_STRING_length(asn)]=0;
+ printf("%s: %s\n", str, buf);
+ }
+}
+#endif /* X509_NAME_GET_TEXT_BY_NID */
+
+#if !defined(HAVE_X509_NAME_GET_TEXT_BY_NID) || defined(DEPRECATED_X509_NAME_GET_TEXT_BY_NID)
+/** see if the valid emailaddr is present. */
+static int
+has_valid_emailaddr(
+#if OPENSSL_VERSION_NUMBER >= 0x40000000
+ const
+#endif
+ X509_NAME* nm, const char* p7signer)
+{
+ int lastpos = -1;
+ for(;;) {
+#if OPENSSL_VERSION_NUMBER >= 0x40000000
+ const
+#endif
+ X509_NAME_ENTRY* ne;
+#if OPENSSL_VERSION_NUMBER >= 0x40000000
+ const
+#endif
+ ASN1_STRING *asn;
+ const unsigned char *data;
+
+ lastpos = X509_NAME_get_index_by_NID(nm,
+ NID_pkcs9_emailAddress, lastpos);
+ if(lastpos == -1 || lastpos == -2)
+ break;
+ ne = X509_NAME_get_entry(nm, lastpos);
+ if(!ne) continue;
+ asn = X509_NAME_ENTRY_get_data(ne);
+ if(!asn) continue;
+# ifdef HAVE_ASN1_STRING_GET0_DATA
+ data = ASN1_STRING_get0_data(asn);
+# else
+ data = ASN1_STRING_data(asn);
+# endif
+ if(!data) continue;
+ if(ASN1_STRING_length(asn) == (int)strlen(p7signer) &&
+ strncmp((char*)data, p7signer, strlen(p7signer)) == 0)
+ return 1; /* match */
+ }
+ return 0;
+}
+#endif /* X509_NAME_GET_TEXT_BY_NID */
+
/** get valid signers from the list of signers in the signature */
static STACK_OF(X509)*
get_valid_signers(PKCS7* p7, const char* p7signer)
@@ -1705,6 +1837,9 @@ get_valid_signers(PKCS7* p7, const char* p7signer)
return NULL;
}
for(i=0; i<sk_X509_num(signers); i++) {
+#if OPENSSL_VERSION_NUMBER >= 0x40000000
+ const
+#endif
X509_NAME* nm = X509_get_subject_name(
sk_X509_value(signers, i));
char buf[1024];
@@ -1717,17 +1852,29 @@ get_valid_signers(PKCS7* p7, const char* p7signer)
(int)sizeof(buf));
printf("signer %d: Subject: %s\n", i,
nmline?nmline:"no subject");
+#if !defined(HAVE_X509_NAME_GET_TEXT_BY_NID) || defined(DEPRECATED_X509_NAME_GET_TEXT_BY_NID)
+ if(verb >= 3) {
+ print_name_ext(nm, NID_commonName,
+ "commonName");
+ print_name_ext(nm, NID_pkcs9_emailAddress,
+ "emailAddress");
+ }
+#else
if(verb >= 3 && X509_NAME_get_text_by_NID(nm,
- NID_commonName, buf, (int)sizeof(buf)))
+ NID_commonName, buf, (int)sizeof(buf)) > 0)
printf("commonName: %s\n", buf);
if(verb >= 3 && X509_NAME_get_text_by_NID(nm,
- NID_pkcs9_emailAddress, buf, (int)sizeof(buf)))
+ NID_pkcs9_emailAddress, buf, (int)sizeof(buf)) > 0)
printf("emailAddress: %s\n", buf);
+#endif
}
if(verb) {
int ku_loc = X509_get_ext_by_NID(
sk_X509_value(signers, i), NID_key_usage, -1);
if(verb >= 3 && ku_loc >= 0) {
+#if OPENSSL_VERSION_NUMBER >= 0x40000000
+ const
+#endif
X509_EXTENSION *ex = X509_get_ext(
sk_X509_value(signers, i), ku_loc);
if(ex) {
@@ -1741,16 +1888,23 @@ get_valid_signers(PKCS7* p7, const char* p7signer)
/* there is no name to check, return all records */
if(verb) printf("did not check commonName of signer\n");
} else {
- if(!X509_NAME_get_text_by_NID(nm,
+#if !defined(HAVE_X509_NAME_GET_TEXT_BY_NID) || defined(DEPRECATED_X509_NAME_GET_TEXT_BY_NID)
+ if(!has_valid_emailaddr(nm, p7signer)) {
+ if(verb) printf("removed cert with wrong emailaddress\n");
+ continue; /* wrong name, skip it */
+ }
+#else
+ if(X509_NAME_get_text_by_NID(nm,
NID_pkcs9_emailAddress,
- buf, (int)sizeof(buf))) {
- if(verb) printf("removed cert with no name\n");
+ buf, (int)sizeof(buf)) <= 0) {
+ if(verb) printf("removed cert with no emailaddress\n");
continue; /* no name, no use */
}
if(strcmp(buf, p7signer) != 0) {
- if(verb) printf("removed cert with wrong name\n");
+ if(verb) printf("removed cert with wrong emailaddress\n");
continue; /* wrong name, skip it */
}
+#endif
}
/* check that the key usage allows digital signatures
diff --git a/smallapp/unbound-checkconf.c b/smallapp/unbound-checkconf.c
index a8e19241f782..75a2c231688b 100644
--- a/smallapp/unbound-checkconf.c
+++ b/smallapp/unbound-checkconf.c
@@ -73,6 +73,9 @@
#ifdef HAVE_GLOB_H
#include <glob.h>
#endif
+#ifdef HAVE_FNMATCH_H
+#include <fnmatch.h>
+#endif
#ifdef WITH_PYTHONMODULE
#include "pythonmod/pythonmod.h"
#endif
@@ -728,6 +731,122 @@ check_modules_exist(const char* module_conf)
}
}
+#ifdef USE_IPSECMOD
+/** Compare filename with string, true if it matches the name. */
+static int
+file_string_matches(char* str, char* fname, struct config_file* cfg)
+{
+ char* f;
+ if(!str || str[0] == 0)
+ return 0;
+ /* compare name after chroot and working dir are applied */
+ f = fname_after_chroot(str, cfg, 1);
+ if(!f) fatal_exit("out of memory");
+ if(strcmp(fname, f) == 0) {
+ free(f);
+ return 1;
+ }
+ free(f);
+ return 0;
+}
+#endif /* USE_IPSECMOD */
+
+/** Compare filename with list of files, true if list contains the name. */
+static int
+file_list_contains(struct config_strlist* list, char* fname,
+ struct config_file* cfg)
+{
+ struct config_strlist* s;
+ char* f;
+ for(s = list; s; s = s->next) {
+ if(!s->str || s->str[0] == 0)
+ continue; /* skip if no file name */
+ /* compare names after chroot and working dir are applied */
+ f = fname_after_chroot(s->str, cfg, 1);
+ if(!f) fatal_exit("out of memory");
+ if(strcmp(fname, f) == 0) {
+ free(f);
+ return 1;
+ }
+ free(f);
+ }
+ return 0;
+}
+
+/** Compare filename with list of files, true if list contains the name,
+ * with glob compare. */
+static int
+file_list_contains_wild(struct config_strlist* list, char* fname,
+ struct config_file* cfg)
+{
+ struct config_strlist* s;
+ char* f;
+ for(s = list; s; s = s->next) {
+ if(!s->str || s->str[0] == 0)
+ continue; /* skip if no file name */
+ /* compare names after chroot and working dir are applied */
+ f = fname_after_chroot(s->str, cfg, 1);
+ if(!f) fatal_exit("out of memory");
+ if(strcmp(fname, f) == 0) {
+ free(f);
+ return 1;
+ }
+#ifdef HAVE_FNMATCH
+ if(fnmatch(f, fname, 0) == 0) {
+ log_err("trusted-keys-file: \"%s\" matches zonefile '%s'",
+ s->str, fname);
+ free(f);
+ return 1;
+ }
+#endif
+ free(f);
+ }
+ return 0;
+}
+
+/** Check if the auth-zone/rpz zonefile: conflicts with other files,
+ * so it would overwrite that file. Refuse it aliasing any read-side bootstrap
+ * file. */
+static void
+check_file_clobber(struct config_file* cfg)
+{
+ struct config_auth* p;
+ char* zfile, *sourceopt = NULL;
+ for(p = cfg->auths; p; p = p->next) {
+ if(!p->name || p->name[0] == 0)
+ continue; /* skip if no name */
+ if(!p->zonefile || p->zonefile[0]==0)
+ continue; /* no zone file */
+ zfile = fname_after_chroot(p->zonefile, cfg, 1);
+ if(!zfile) fatal_exit("out of memory");
+ if(file_list_contains(cfg->auto_trust_anchor_file_list, zfile,
+ cfg))
+ sourceopt = "auto-trust-anchor-file";
+ else if(file_list_contains(cfg->trust_anchor_file_list, zfile,
+ cfg))
+ sourceopt = "trust-anchor-file";
+ else if(file_list_contains_wild(cfg->trusted_keys_file_list,
+ zfile, cfg))
+ sourceopt = "trusted-keys-file";
+ else if(file_list_contains(cfg->root_hints, zfile, cfg))
+ sourceopt = "root-hints";
+ else if(file_list_contains(cfg->tls_session_ticket_keys.first,
+ zfile, cfg))
+ sourceopt = "tls-session-ticket-keys";
+#ifdef USE_IPSECMOD
+ if(cfg->ipsecmod_enabled &&
+ file_string_matches(cfg->ipsecmod_hook, zfile, cfg))
+ sourceopt = "ipsecmod-hook";
+#endif
+ if(sourceopt)
+ fatal_exit("auth-zone '%s': zonefile \"%s\" "
+ "is the same path as a %s option. "
+ "The auth-zone transfer would overwrite it.",
+ p->name, p->zonefile, sourceopt);
+ free(zfile);
+ }
+}
+
/** check configuration for errors */
static void
morechecks(struct config_file* cfg)
@@ -822,6 +941,7 @@ morechecks(struct config_file* cfg)
cfg->chrootdir, cfg);
}
#endif
+ check_file_clobber(cfg);
/* remove chroot setting so that modules are not stripping pathnames */
free(cfg->chrootdir);
cfg->chrootdir = NULL;
diff --git a/smallapp/worker_cb.c b/smallapp/worker_cb.c
index 876c7db4e439..3f48da508d18 100644
--- a/smallapp/worker_cb.c
+++ b/smallapp/worker_cb.c
@@ -43,6 +43,7 @@
#include "config.h"
#include "libunbound/context.h"
#include "libunbound/worker.h"
+#include "libunbound/remote.h"
#include "util/fptr_wlist.h"
#include "util/log.h"
#include "services/mesh.h"
@@ -102,7 +103,7 @@ struct outbound_entry* worker_send_query(
socklen_t ATTR_UNUSED(addrlen), uint8_t* ATTR_UNUSED(zone),
size_t ATTR_UNUSED(zonelen), int ATTR_UNUSED(tcp_upstream), int ATTR_UNUSED(ssl_upstream),
char* ATTR_UNUSED(tls_auth_name), struct module_qstate* ATTR_UNUSED(q),
- int* ATTR_UNUSED(was_ratelimited))
+ int* ATTR_UNUSED(was_ratelimited), int* ATTR_UNUSED(ratelimit_incremented))
{
log_assert(0);
return 0;
@@ -142,7 +143,7 @@ struct outbound_entry* libworker_send_query(
socklen_t ATTR_UNUSED(addrlen), uint8_t* ATTR_UNUSED(zone),
size_t ATTR_UNUSED(zonelen), int ATTR_UNUSED(tcp_upstream), int ATTR_UNUSED(ssl_upstream),
char* ATTR_UNUSED(tls_auth_name), struct module_qstate* ATTR_UNUSED(q),
- int* ATTR_UNUSED(was_ratelimited))
+ int* ATTR_UNUSED(was_ratelimited), int* ATTR_UNUSED(ratelimit_incremented))
{
log_assert(0);
return 0;
diff --git a/testcode/dohclient.c b/testcode/dohclient.c
index 8d8adaf5df34..08250ef3ae65 100644
--- a/testcode/dohclient.c
+++ b/testcode/dohclient.c
@@ -146,7 +146,9 @@ submit_query(struct http2_session* h2_session, struct sldns_buffer* buf)
{
int32_t stream_id;
struct http2_stream* h2_stream;
- nghttp2_nv headers[5];
+ nghttp2_nv headers[6];
+ size_t num_headers = 5;
+ char clen[16];
char* qb64;
size_t qb64_size;
size_t qb64_expected_size;
@@ -194,9 +196,16 @@ submit_query(struct http2_session* h2_session, struct sldns_buffer* buf)
headers[3].value = (uint8_t*)h2_session->authority;
headers[4].name = (uint8_t*)"content-type";
headers[4].value = (uint8_t*)h2_session->content_type;
+ if(h2_session->post) {
+ snprintf(clen, sizeof(clen), "%u",
+ (unsigned)sldns_buffer_remaining(buf));
+ headers[5].name = (uint8_t*)"content-length";
+ headers[5].value = (uint8_t*)clen;
+ num_headers = 6;
+ }
printf("Request headers\n");
- for(i=0; i<sizeof(headers)/sizeof(headers[0]); i++) {
+ for(i=0; i<num_headers; i++) {
headers[i].namelen = strlen((char*)headers[i].name);
headers[i].valuelen = strlen((char*)headers[i].value);
headers[i].flags = NGHTTP2_NV_FLAG_NONE;
@@ -204,7 +213,7 @@ submit_query(struct http2_session* h2_session, struct sldns_buffer* buf)
}
stream_id = nghttp2_submit_request(h2_session->session, NULL, headers,
- sizeof(headers)/sizeof(headers[0]),
+ num_headers,
(h2_session->post) ? &data_prd : NULL, h2_stream);
if(stream_id < 0) {
printf("Failed to submit nghttp2 request");
diff --git a/testcode/doqclient.c b/testcode/doqclient.c
index 4c2142211cc5..050248f8c227 100644
--- a/testcode/doqclient.c
+++ b/testcode/doqclient.c
@@ -1137,8 +1137,11 @@ static struct ngtcp2_conn* conn_client_setup(struct doq_client_data* data)
client_chosen_version, &cbs, &settings, &params,
NULL, /* ngtcp2_mem allocator, use default */
data /* callback argument */);
- if(!conn) fatal_exit("could not ngtcp2_conn_client_new: %s",
- ngtcp2_strerror(rv));
+ if(rv!=0) {
+ conn = NULL;
+ fatal_exit("could not ngtcp2_conn_client_new: %s",
+ ngtcp2_strerror(rv));
+ }
data->cc_algo = settings.cc_algo;
return conn;
}
@@ -2098,7 +2101,7 @@ early_data_setup_session(struct doq_client_data* data)
SSL_SESSION_free(session);
return 0;
}
-#ifdef USE_NGTCP2_CRYPTO_OSSL
+#ifdef HAVE_SSL_SET_QUIC_TLS_EARLY_DATA_ENABLED
SSL_set_quic_tls_early_data_enabled(data->ssl, 1);
#else
SSL_set_quic_early_data_enabled(data->ssl, 1);
@@ -2595,7 +2598,8 @@ struct outbound_entry* worker_send_query(
socklen_t ATTR_UNUSED(addrlen), uint8_t* ATTR_UNUSED(zone),
size_t ATTR_UNUSED(zonelen), int ATTR_UNUSED(tcp_upstream),
int ATTR_UNUSED(ssl_upstream), char* ATTR_UNUSED(tls_auth_name),
- struct module_qstate* ATTR_UNUSED(q), int* ATTR_UNUSED(was_ratelimited))
+ struct module_qstate* ATTR_UNUSED(q), int* ATTR_UNUSED(was_ratelimited),
+ int* ATTR_UNUSED(ratelimit_incremented))
{
log_assert(0);
return 0;
@@ -2629,7 +2633,8 @@ struct outbound_entry* libworker_send_query(
socklen_t ATTR_UNUSED(addrlen), uint8_t* ATTR_UNUSED(zone),
size_t ATTR_UNUSED(zonelen), int ATTR_UNUSED(tcp_upstream),
int ATTR_UNUSED(ssl_upstream), char* ATTR_UNUSED(tls_auth_name),
- struct module_qstate* ATTR_UNUSED(q), int* ATTR_UNUSED(was_ratelimited))
+ struct module_qstate* ATTR_UNUSED(q), int* ATTR_UNUSED(was_ratelimited),
+ int* ATTR_UNUSED(ratelimit_incremented))
{
log_assert(0);
return 0;
diff --git a/testcode/fake_event.c b/testcode/fake_event.c
index 4ca357770747..629eae87fe5e 100644
--- a/testcode/fake_event.c
+++ b/testcode/fake_event.c
@@ -1276,7 +1276,8 @@ struct serviced_query* outnet_serviced_query(struct outside_network* outnet,
socklen_t addrlen, uint8_t* zone, size_t zonelen,
struct module_qstate* qstate, comm_point_callback_type* callback,
void* callback_arg, sldns_buffer* ATTR_UNUSED(buff),
- struct module_env* env, int* ATTR_UNUSED(was_ratelimited))
+ struct module_env* env, int* ATTR_UNUSED(was_ratelimited),
+ int* ATTR_UNUSED(ratelimit_incremented))
{
struct replay_runtime* runtime = (struct replay_runtime*)outnet->base;
struct fake_pending* pend = (struct fake_pending*)calloc(1,
diff --git a/testcode/unitauth.c b/testcode/unitauth.c
index 401e93af39dc..e904bdcec0b2 100644
--- a/testcode/unitauth.c
+++ b/testcode/unitauth.c
@@ -1027,6 +1027,38 @@ authzone_query_test(void)
check_queries("example.com", zone_example_com, example_com_queries);
}
+/** Test chunkline_count_parens output */
+static void
+authzone_chunkline_count_parens_test(void)
+{
+ sldns_buffer* buf;
+ if(vbmp) printf("Testing chunkline_count_parens\n");
+ buf = sldns_buffer_new(1024);
+ if(!buf) fatal_exit("out of memory");
+
+ /* Check that escaped characters are handled, '\x', and in quotes. */
+ sldns_buffer_printf(buf, "TXT \"x\" \\(");
+ unit_assert(chunkline_count_parens(buf, 0) == 0);
+
+ sldns_buffer_clear(buf);
+ sldns_buffer_printf(buf, "TXT ';x' (");
+ unit_assert(chunkline_count_parens(buf, 0) == 0);
+
+ sldns_buffer_clear(buf);
+ sldns_buffer_printf(buf, "TXT \"a;b\" (");
+ unit_assert(chunkline_count_parens(buf, 0) == 1);
+
+ sldns_buffer_clear(buf);
+ sldns_buffer_printf(buf, "TXT \\) )");
+ unit_assert(chunkline_count_parens(buf, 0) == -1);
+
+ sldns_buffer_clear(buf);
+ sldns_buffer_printf(buf, "TXT \"a\\\\\" \"(\" ");
+ unit_assert(chunkline_count_parens(buf, 0) == 0);
+
+ sldns_buffer_free(buf);
+}
+
/** test authzone code */
void
authzone_test(void)
@@ -1036,4 +1068,5 @@ authzone_test(void)
authzone_compare_serial();
authzone_read_test();
authzone_query_test();
+ authzone_chunkline_count_parens_test();
}
diff --git a/testcode/unitecs.c b/testcode/unitecs.c
index 68d6907f81a7..1f3c63b0f026 100644
--- a/testcode/unitecs.c
+++ b/testcode/unitecs.c
@@ -141,6 +141,7 @@ static addrlen_t randomkey(addrkey_t **k, int maxlen)
int bits = rand() % maxlen;
int bytes = bits/8 + (bits%8>0); /*ceil*/
*k = (addrkey_t *) malloc(bytes * sizeof(addrkey_t));
+ if(!*k) fatal_exit("out of memory");
for (byte = 0; byte < bytes; byte++) {
(*k)[byte] = (addrkey_t)(rand() & 0xFF);
}
diff --git a/testcode/unitldns.c b/testcode/unitldns.c
index 07d001a792e1..003fcec7d6e0 100644
--- a/testcode/unitldns.c
+++ b/testcode/unitldns.c
@@ -279,10 +279,24 @@ b64_test(void)
unit_assert(result == -1);
}
+/** test SVCB ech svcparam */
+static void
+svcb_ech_test(void)
+{
+ uint8_t rr[LDNS_RR_BUF_SIZE];
+ size_t rr_len = sizeof(rr), dname_len = 0;
+ int e = sldns_str2wire_rr_buf("x. 300 IN HTTPS 1 . ech=0",
+ rr, &rr_len, &dname_len, 300, NULL, 0, NULL, 0);
+ unit_assert(e == LDNS_WIREPARSE_ERR_OK);
+ unit_assert(rr_len == dname_len + 10 /* type,class,ttl,rdatalen */ + 7 /* rdata */);
+ unit_assert(sldns_read_uint16(rr + dname_len + 8 /* rdlen */) == 7);
+}
+
void
ldns_test(void)
{
unit_show_feature("sldns");
rr_tests();
b64_test();
+ svcb_ech_test();
}
diff --git a/testcode/unitmain.c b/testcode/unitmain.c
index 62f37375f756..985a9d5522e8 100644
--- a/testcode/unitmain.c
+++ b/testcode/unitmain.c
@@ -1445,6 +1445,9 @@ main(int argc, char* argv[])
# ifdef HAVE_RAND_CLEANUP
RAND_cleanup();
# endif
+#ifdef HAVE_OPENSSL_CLEANUP
+ OPENSSL_cleanup();
+#endif
#elif defined(HAVE_NSS)
if(NSS_Shutdown() != SECSuccess)
fatal_exit("could not shutdown NSS");
diff --git a/testdata/10-unbound-anchor.tdir/10-unbound-anchor.conf b/testdata/10-unbound-anchor.tdir/10-unbound-anchor.conf
index bb125c0d5c55..9ce1fa223f56 100644
--- a/testdata/10-unbound-anchor.tdir/10-unbound-anchor.conf
+++ b/testdata/10-unbound-anchor.tdir/10-unbound-anchor.conf
@@ -2,6 +2,7 @@
server:
do-not-query-localhost: no
fake-sha1: yes
+ verbosity: 8
forward-zone:
name: "."
forward-addr: "127.0.0.1@@TOPORT@"
diff --git a/testdata/10-unbound-anchor.tdir/10-unbound-anchor.test b/testdata/10-unbound-anchor.tdir/10-unbound-anchor.test
index 46cea626cb00..d779fca34f01 100644
--- a/testdata/10-unbound-anchor.tdir/10-unbound-anchor.test
+++ b/testdata/10-unbound-anchor.tdir/10-unbound-anchor.test
@@ -35,11 +35,13 @@ function check_insecure() {
# test with good start key, and must do 5011 (no URL possible)
echo "*** TEST 1 ***"
echo $DS > root.key
-$PRE/unbound-anchor -x "notexist.xml" -s "notexist.p7s" $OPTS
+cat root.key
+$PRE/unbound-anchor -x "notexist.xml" -s "notexist.p7s" $OPTS -vvvv
if test $? != 0; then
echo "Exitcode not OK"
exit 1
fi
+cat root.key
check_works
# save for test 5
cp root.key root.key.probed
diff --git a/testdata/10-unbound-anchor.tdir/127.0.0.1/no_more_keys.p7s b/testdata/10-unbound-anchor.tdir/127.0.0.1/no_more_keys.p7s
index c76b5b6e4754..c7c33d3db24a 100644
--- a/testdata/10-unbound-anchor.tdir/127.0.0.1/no_more_keys.p7s
+++ b/testdata/10-unbound-anchor.tdir/127.0.0.1/no_more_keys.p7s
Binary files differ
diff --git a/testdata/10-unbound-anchor.tdir/127.0.0.1/root.p7s b/testdata/10-unbound-anchor.tdir/127.0.0.1/root.p7s
index afbdb1b91388..b0dc637a39cf 100644
--- a/testdata/10-unbound-anchor.tdir/127.0.0.1/root.p7s
+++ b/testdata/10-unbound-anchor.tdir/127.0.0.1/root.p7s
Binary files differ
diff --git a/testdata/10-unbound-anchor.tdir/key-setup.sh b/testdata/10-unbound-anchor.tdir/key-setup.sh
new file mode 100644
index 000000000000..7e37c62b9786
--- /dev/null
+++ b/testdata/10-unbound-anchor.tdir/key-setup.sh
@@ -0,0 +1,201 @@
+#!/bin/sh
+
+# run in temp dir.
+# Then for petal, move into basedir.
+# For test_cert.key and test_cert.pem, rename the output files to that.
+# And run signit.sh for both signature files, by commenting infile and outfile.
+# for test_cert.pem it has emailAddress and keyUsage, but petal.pem does not
+# need that.
+
+# settings:
+
+# directory for files
+DESTDIR=.
+
+# issuer and subject name for certificates
+SERVERNAME=petal
+CLIENTNAME=petal
+
+# validity period for certificates
+DAYS=7200
+
+# size of keys in bits
+BITS=3072
+
+# hash algorithm
+HASH=sha256
+
+# base name for unbound server keys
+SVR_BASE=petal
+
+# base name for unbound-control keys
+CTL_BASE=petal
+
+# flag to recreate generated certificates
+RECREATE=0
+
+# we want -rw-r----- access (say you run this as root: grp=yes (server), all=no).
+umask 0027
+
+# end of options
+
+set -eu
+
+cleanup() {
+ echo "removing artifacts"
+
+ rm -rf \
+ server.cnf \
+ client.cnf \
+ "${SVR_BASE}_trust.pem" \
+ "${CTL_BASE}_trust.pem" \
+ "${SVR_BASE}_trust.srl"
+}
+
+fatal() {
+ printf "fatal error: $*\n" >/dev/stderr
+ exit 1
+}
+
+usage() {
+ cat <<EOF
+usage: $0 OPTIONS
+OPTIONS
+-d <dir> used directory to store keys and certificates (default: $DESTDIR)
+-h show help notice
+-r recreate certificates
+EOF
+}
+
+OPTIND=1
+while getopts 'd:hr' arg; do
+ case "$arg" in
+ d) DESTDIR="$OPTARG" ;;
+ h) usage; exit 1 ;;
+ r) RECREATE=1 ;;
+ ?) fatal "'$arg' unknown option" ;;
+ esac
+done
+shift $((OPTIND - 1))
+
+if ! openssl version </dev/null >/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"
+
+trap cleanup INT
+
+# ===
+# Generate server certificate
+# ===
+
+# generate private key; do no recreate it if they already exist.
+if [ ! -f "$SVR_BASE.key" ]; then
+ openssl genrsa -out "$SVR_BASE.key" "$BITS"
+fi
+
+cat >server.cnf <<EOF
+[req]
+default_bits=$BITS
+default_md=$HASH
+prompt=no
+distinguished_name=req_distinguished_name
+x509_extensions=v3_ca
+[req_distinguished_name]
+commonName=$SERVERNAME
+emailAddress=$SERVERNAME
+[v3_ca]
+subjectKeyIdentifier=hash
+authorityKeyIdentifier=keyid:always,issuer:always
+basicConstraints=critical,CA:TRUE,pathlen:0
+subjectAltName=DNS:$SERVERNAME
+keyUsage = digitalSignature, keyCertSign
+EOF
+
+[ -f server.cnf ] || fatal "cannot create openssl configuration"
+
+if [ ! -f "$SVR_BASE.pem" -o $RECREATE -eq 1 ]; then
+ openssl req \
+ -new -x509 \
+ -key "$SVR_BASE.key" \
+ -config server.cnf \
+ -days "$DAYS" \
+ -out "$SVR_BASE.pem"
+
+ [ ! -f "SVR_BASE.pem" ] || fatal "cannot create server certificate"
+fi
+
+# ===
+# Generate client certificate
+# ===
+
+# generate private key; do no recreate it if they already exist.
+if [ ! -f "$CTL_BASE.key" ]; then
+ openssl genrsa -out "$CTL_BASE.key" "$BITS"
+fi
+
+cat >client.cnf <<EOF
+[req]
+default_bits=$BITS
+default_md=$HASH
+prompt=no
+distinguished_name=req_distinguished_name
+req_extensions=v3_req
+[req_distinguished_name]
+commonName=$CLIENTNAME
+[v3_req]
+basicConstraints=critical,CA:FALSE
+subjectAltName=DNS:$CLIENTNAME
+EOF
+
+[ -f client.cnf ] || fatal "cannot create openssl configuration"
+
+if [ ! -f "$CTL_BASE.pem" -o $RECREATE -eq 1 ]; then
+ openssl x509 \
+ -addtrust serverAuth \
+ -in "$SVR_BASE.pem" \
+ -out "${SVR_BASE}_trust.pem"
+
+ openssl req \
+ -new \
+ -config client.cnf \
+ -key "$CTL_BASE.key" \
+ | openssl x509 \
+ -req \
+ -days "$DAYS" \
+ -CA "${SVR_BASE}_trust.pem" \
+ -CAkey "$SVR_BASE.key" \
+ -CAcreateserial \
+ -$HASH \
+ -extfile client.cnf \
+ -extensions v3_req \
+ -out "$CTL_BASE.pem"
+
+ [ ! -f "CTL_BASE.pem" ] || fatal "cannot create signed client certificate"
+fi
+
+# remove unused permissions
+chmod o-rw \
+ "$SVR_BASE.pem" \
+ "$SVR_BASE.key"
+chmod g+r,o-rw \
+ "$CTL_BASE.pem" \
+ "$CTL_BASE.key"
+
+cleanup
+
+echo "Setup success. Certificates created. Enable in unbound.conf file to use"
+
+# create trusted usage pem
+# openssl x509 -in $CTL_BASE.pem -addtrust clientAuth -out $CTL_BASE"_trust.pem"
+
+# see details with openssl x509 -noout -text < $SVR_BASE.pem
+# echo "create $CTL_BASE""_browser.pfx (web client certificate)"
+# echo "create webbrowser PKCS#12 .PFX certificate file. In Firefox import in:"
+# echo "preferences - advanced - encryption - view certificates - your certs"
+# echo "empty password is used, simply click OK on the password dialog box."
+# openssl pkcs12 -export -in $CTL_BASE"_trust.pem" -inkey $CTL_BASE.key -name "unbound remote control client cert" -out $CTL_BASE"_browser.pfx" -password "pass:" || error "could not create browser certificate"
+
diff --git a/testdata/10-unbound-anchor.tdir/petal.key b/testdata/10-unbound-anchor.tdir/petal.key
index 6614e498fcd2..7daef6ab239c 100644
--- a/testdata/10-unbound-anchor.tdir/petal.key
+++ b/testdata/10-unbound-anchor.tdir/petal.key
@@ -1,21 +1,40 @@
------BEGIN RSA PRIVATE KEY-----
-MIIDfQIBAAKBwQC1xQ/Kca6zszZbcCtdOTIH2Uy2gOy/DfabMUU7TmNPm0dVE0NJ
-RuN+Rm304SonpwghfP2/ULZNnuDgpG03/32yI7k/VzG6iA4hiF7tT/KAAWC/+2l1
-QCsawCV2bSrFK0VhcZr7ALqXd8vkDaQ867K029ypjOQtAJ85qdO3mERy7TGtdUcu
-O6hLeVet419YeQ2F8cfNxn63d7bOzNGLPW5xwaCd3UcgD+Ib0k4xfFvbinvPQUeU
-J/i4YDWexFYSL+ECAwEAAQKBwCLXXQl+9O+5AEhSnd1Go1Jh0pSA7eBJOuXQcebG
-Rb7ykp+6C4G2NtDziwwPRNdI6wQQQ0sym18RfyVQHydGr78/nbiIbB3HCn5e92Mh
-mefzW6ow9Kvm2txLzGKA1lvoyRbNm81jnG/eygi3u7Nqd5PNv+4dHj2RkTlmxOeh
-qnDMVP5md8uZPv6lYNnrnIzvLCR5vnPNdVwn89AqzI85IcDZdy0R9ZX4NBbsDgAU
-6ig6uXuRXvSGiyJ/OUXSrnogaQJhAOjvkHUhVZQkPOxO90TNH4j0GdKKtbSWxIdz
-lKfuJeBAEqs0TL+C6vbS81Xw3W1alyDdUBk3rJMOBqW6Ryq5HNL+j5H+Jfsh7fvc
-Yle+5wHGci0P9zCFZCrY8It7n9XFIwJhAMfEi6oJa2G8waPJ1bQhxka82Tf9pnKM
-XCn/1BBOFjVIx5F842cpA+zp5a62GENTGYPQTTRBB/2/ZwnW5aIkrlg54AtmbqBZ
-Oh+2kJdJQD/tfoVmc5soUE2ScTHadK5RKwJhAN4w9kjkXS+MSZjX0kIMsBIBVkhh
-C+aREjJqa9ir7/Ey7RvmLXdYuCxtGLRXp7/R8+rjcK49Tx6O+IRJZe042mfhbq3C
-EhS1Tr86f4xXix9EXlDhs9bSxrOgcAN9Dv/opQJhAK7eBcPaav0rVfYh/8emqQHS
-3fJ9Pu6WnzbEksWTFS2ff9KDGCx9YspIFJ5TF/oXDAaumGZdZrlgirm6O1kr8tGY
-F97i04PZl1+bWAaWQH+1TUNI43m2WFUPE7coG2tb8QJgcddDg9VlXliZqgcETZfJ
-kJmYETxrcSn3ao6v116N8yxhEgUgjkmsCTiFgx36iDVnXwK6PIt+sIu8MC7eYNa3
-berrv/M21K0LRn20IWRxvUobG070weHCAgkko7fTWgr2
------END RSA PRIVATE KEY-----
+-----BEGIN PRIVATE KEY-----
+MIIG/gIBADANBgkqhkiG9w0BAQEFAASCBugwggbkAgEAAoIBgQDiNGqbEmyFI9QF
+EvWcU36irjzp1W+VMuMHGD5PDYy5ib1QIrUcUQPvWydV4er/6gnpv6VQ+dfOeVlr
+Acu73kdh+N0u5UgjIY9CJnoN12eEGjTrVFlHoA2Ur/TMbN3DW20Nbyi5LUJ8KrGl
+Yg8tPbLqGvfJsIYTspBEzgQcJg5ZTD3YA2ZESrbZe2sOunri0j1myv+EoTqB4nPb
+ShHx8i11IJpUoBEoHoSyMQgEgYJqbmqCHaTGJWNxHUUhI5MmTPEzyrG6T0B3v5Pb
+y1eFOyAU+I4SCs0fqHPg4DbPlNTe/MEBm2LQAVrUFjcFx+Cq75oOa9sVp6xvBmYN
+nMiwGgLJYjN7l0lhRQEtao6tEGQUYbmpKoLQJMsKs6bjs6HK5TXMzQUfHATirmjE
+C1Fcb/eKJ27HNiKS+uw2g9Tpu/af2qKl3ePNUioPbMYtgGhu5csD22heGeilNVtN
+8D47kU0SveXjokV476CecW0SZnN9rVrvd0IqtnU9fMoAQyZE6ScCAwEAAQKCAYAk
+0//fS3qbmp+0S8ftMbLWbaPBNly6X9SSnSHX4Q7eTkyiNWRjPdV0LNUUqHmIPORs
+SCV0L5kxJpSmVV6EMcZRbyEjt3StM5ONY5JPmphh65peDheTD73mTVd/yOG6IrJ4
+k3Z/35yJdrIBiRuLdBYjA00Aa1sI7fOLIDePFasUYtNWzgbia3+lnPBrL3U+ZJhW
+mgpL36wU5XeTZlXRnGpGPY6i5ISmkYFtOYpioWtIRL3WfVkMYZ31FpzgrlgQzknQ
+lrKN2g7/3q0uLlbasgCsAK50hL2f2xxzsALDCGFjDJbwdIZKfdoxRbgS0L7q7gj0
+SUK4fc1obR5qHc2lTuCSzPpionq022ElC0DChupiosyXN4GxNZ2Dwoln4Y5s2YXo
++VTtyYbVEib15WbhHorvfg0QUO00Nwqu+LVTVUXueNre2n507fSiOhCIpbPUWDGz
+RoeRFEP0T9+mzQgXr56TAiYunIat1qVxXrwaSWSXEfInGUTkdRUC4rctv7KJ1nEC
+gcEA8jDTh1OLBG3/JkQxQNOoqFUFssPlJ+z3LcyaNT6bM5lH5Vwn3sGOFWOMLILD
+f/qbGG/1VPVfoCEY1NEkYsocOMtkLIJrIdtD5DOnWz1JJE7Zh2AoWWfIfXd9v5sh
+m1fB3SVa6D9JtGoDnKttMl25Tqf6YehVo35Axxar74k3kC/vuZrp/81iZscdRsyK
+kQh9fPXl4Oqw2cUYdx3L8UprLS4JguvR0zXvbukJ75DjLZELvjnxBbA1vdtyQz58
+2uk1AoHBAO8aP5h08kwTIJCXS6uyAJ0F8F/30srAtchSpzsC3YEEs/Z+43D7W1RR
+Obw4KhVjjmFeh83U8pdEuUEjv3ua52+uoUCqTywe+o180owiWsTDSXVtDHiUD7bu
+x+nRnpk3flZD28GHKLdWMmJvd8DzMgsa9fJIucMYT7xQHzxCW+4nhhBckX9LEH7i
+Jo6MaVuh8b6NuZXOBgU3cp20GTZ3SwRNkKOigctQVZT4A1Vf4ioLrVyhv/LVLBC+
+UvoIu82wawKBwQDakMXU8sgaj0ocNp5caqdigphJ5BACIBBR/LuOIZnezw3bJ3ez
+x+l51ATEhp33+SnOu/sjWO2bjULjjHrRzKP7fVJB+NDGFSMH5rW52W0Qnzggu96u
+EMMWt6d8K3wAvQnvka6gubzCXIo18V7yfTKmkWGcyhe/HElJYmR4H9VNAnXNgsh6
+Wdfb+QWqxxymFotpImD6wdIoNX8GwJU0hHyEoW9j/320ppAV/6k/0fmzPZrjaVbi
+U0uss0ZC+TmkNaECgcB9L6gGYYyOyiDts1k6LvtlOzvMc0uZPmau2J+YJPrmVxkG
+QQ9CE0iRD+oDowBdrH9aeYzu9sSA8Mlx0o6p38O21J625bSILDwQoj72gfI2PO0U
+HyE9bIABzmk7AbZhEA4Eiojffa2St/2vTh9MFcioydfln7Aq9mqg9O41taS+P1FQ
+9bZ0CFA9rphzYA61nEee9kMprPG3/3zyFt5whuru+NF261m7onb8hRHxvD8EtpJx
+AnsmX/gvWAbHxJTXr7sCgcEAp6QAysy0/sgRYvzBkqv05kz4xBqy2a4ZKjnMLEWY
+7MicZiQrkSsEjMNDy20rjXfZbhDJWGVjBOZ1QsYehKhGAIoORXID9B3aZ32m//VU
+IUxkLcrIPLPmfdzZvlRPnQc/TAZNe41BGBa4WlDwTFE9TdpVtTzjW1ac5yBN7sa+
+V7YbBSiOhP+NuqQFQM01aaZCmOetcj70B4SwJVzswhITS0O+7ZAvicGJiQKTUvUY
+ijWm+Luu3QYDc2HBMwUAmHT5
+-----END PRIVATE KEY-----
diff --git a/testdata/10-unbound-anchor.tdir/petal.pem b/testdata/10-unbound-anchor.tdir/petal.pem
index 19c8b895ba86..d069d3c118ba 100644
--- a/testdata/10-unbound-anchor.tdir/petal.pem
+++ b/testdata/10-unbound-anchor.tdir/petal.pem
@@ -1,14 +1,25 @@
-----BEGIN CERTIFICATE-----
-MIICFzCCAUACCQDO660L5y5LGDANBgkqhkiG9w0BAQUFADAQMQ4wDAYDVQQDEwVw
-ZXRhbDAeFw0xMDA5MzAxMzQzMDFaFw0zMDA2MTcxMzQzMDFaMBAxDjAMBgNVBAMT
-BXBldGFsMIHfMA0GCSqGSIb3DQEBAQUAA4HNADCByQKBwQC1xQ/Kca6zszZbcCtd
-OTIH2Uy2gOy/DfabMUU7TmNPm0dVE0NJRuN+Rm304SonpwghfP2/ULZNnuDgpG03
-/32yI7k/VzG6iA4hiF7tT/KAAWC/+2l1QCsawCV2bSrFK0VhcZr7ALqXd8vkDaQ8
-67K029ypjOQtAJ85qdO3mERy7TGtdUcuO6hLeVet419YeQ2F8cfNxn63d7bOzNGL
-PW5xwaCd3UcgD+Ib0k4xfFvbinvPQUeUJ/i4YDWexFYSL+ECAwEAATANBgkqhkiG
-9w0BAQUFAAOBwQBBkX9KDP2RXbg+xPmdJ4P6CwvA5x1LZwC++ydVx4NlvT0pWicD
-ZUnXjcWAJlkeOuUBAqFG7WHTrXpUUAjmdqFVq2yFjteUYBdrFz0RDB2jM9feeKYO
-mTgxdZyT9a6humxCxt5VfgT02axLjm/2AqCyFPMbf4PASoJDln01AEuZLZ8Xl2gV
-bYHMnHTGoD1Hu6FNEzRgkMC6XT8X3YjHvzQhpc/qL5wEfEsinQGdX4twsuWbf8xd
-q7miNnkO8vd0maw=
+MIIERDCCAqygAwIBAgIUY5FZe4tAZd0ITNbceavVGLvEe2QwDQYJKoZIhvcNAQEL
+BQAwEDEOMAwGA1UEAwwFcGV0YWwwHhcNMjYwNzI0MDkwNTMyWhcNNDYwNDEwMDkw
+NTMyWjAQMQ4wDAYDVQQDDAVwZXRhbDCCAaIwDQYJKoZIhvcNAQEBBQADggGPADCC
+AYoCggGBAOI0apsSbIUj1AUS9ZxTfqKuPOnVb5Uy4wcYPk8NjLmJvVAitRxRA+9b
+J1Xh6v/qCem/pVD51855WWsBy7veR2H43S7lSCMhj0Imeg3XZ4QaNOtUWUegDZSv
+9Mxs3cNbbQ1vKLktQnwqsaViDy09suoa98mwhhOykETOBBwmDllMPdgDZkRKttl7
+aw66euLSPWbK/4ShOoHic9tKEfHyLXUgmlSgESgehLIxCASBgmpuaoIdpMYlY3Ed
+RSEjkyZM8TPKsbpPQHe/k9vLV4U7IBT4jhIKzR+oc+DgNs+U1N78wQGbYtABWtQW
+NwXH4Krvmg5r2xWnrG8GZg2cyLAaAsliM3uXSWFFAS1qjq0QZBRhuakqgtAkywqz
+puOzocrlNczNBR8cBOKuaMQLUVxv94onbsc2IpL67DaD1Om79p/aoqXd481SKg9s
+xi2AaG7lywPbaF4Z6KU1W03wPjuRTRK95eOiRXjvoJ5xbRJmc32tWu93Qiq2dT18
+ygBDJkTpJwIDAQABo4GVMIGSMB0GA1UdDgQWBBSLQ6cvFrU2JiedggRXjiUemV3h
+QzBLBgNVHSMERDBCgBSLQ6cvFrU2JiedggRXjiUemV3hQ6EUpBIwEDEOMAwGA1UE
+AwwFcGV0YWyCFGORWXuLQGXdCEzW3Hmr1Ri7xHtkMBIGA1UdEwEB/wQIMAYBAf8C
+AQAwEAYDVR0RBAkwB4IFcGV0YWwwDQYJKoZIhvcNAQELBQADggGBANj5PXClrk76
+UddT6aniB/VbErfu1MwfyYSGhE4y5VVJVyD+wHYECswdm2IIo/v/4I+4KWgAcGPk
+u+j1B2iXN8sQTe500+KMSRFfaxdbwlX42+oDKwRoz8pwMzETyZYQA4PAE5j2rnjb
+n9USomWzvwavo7GRE6VauBcSAekrNFDjPw43tElmr2TTz4lUFXlvBlQvcbloJ4OU
+60ek8d1erlsLXzAtf4kCFH1aiII0g0fA448gnIOIgT9LiV88smKNDPVqusw9TBd5
+/f1R8ETy7jcIJ9TU34dy6S39s4aUjWUAZMV1TIH3wJPDsE6+1yD5OC5b50akIwpJ
+jO9naDRvgaHIWxJRcREXd+H7IlybL+l+Qq4L4RX583cdL/rZEWdnESgbDq7EkEPn
+ZbpjdM4oNGUlXsrZw0/GFgzYlN2MBFiLht6y2iBbhFxPb2SM3Xx/M5YnsNLym+I/
+m9mck/aeeSEyJ2uIfFfVndfPfqmKxwvoPu0OCv/ppsi+xTvhE6B/UQ==
-----END CERTIFICATE-----
diff --git a/testdata/10-unbound-anchor.tdir/test_cert.key b/testdata/10-unbound-anchor.tdir/test_cert.key
index b860b1b298e6..484b8d9d0dbf 100644
--- a/testdata/10-unbound-anchor.tdir/test_cert.key
+++ b/testdata/10-unbound-anchor.tdir/test_cert.key
@@ -1,21 +1,40 @@
------BEGIN RSA PRIVATE KEY-----
-MIIDfAIBAAKBwQC48GhhmIU66TZKc3QiyF4L5bsm8Aly/y2SzLP+GACepK0OcOtD
-i2sXrTtoJDvGOPZ9ICqmIy8u/Q/cK26txNEeZFcClLcYF/U+NaqjEwrwkHEIgc3g
-8qnKrhzM61I8foAWVT7cqxFHDKYuClNITXk1i//Yzpnf9wvVKQ51W9UOtm/WA7g4
-IDHCuAjocyyNC3B7XqYawFDOsdMI4ZW7hC0hIRQOvBkvbvY8WxmsSkdd30u1KmoI
-Sg4y6OvnikrEEQkCAwEAAQKBwQC3hQlv37RF82sGkm8qnP6Ge+AuEYCu9v44cJ4k
-hZkH1I5OiEtN6anKAwOyolIWsCwZmrP3zW5jCIiWiRr5oReLOzMEwqK2a//XTdYY
-oSr38b3ZHUY59VP8Zq75woMGuNed35kAmGxzDRP1gI/TmvTvaHlqYyvxBtxnZJij
-Za1CrT+a9JvR6hI8xXrE33CF0T6JO1v3v0HeBuve5+83cCHKo+GyqIBjL3FJgefZ
-EsPz6rGnPDKTYgMyaljFV3LI5ikCYQDlaBnyiWk1C7tYO5x3CRoHoiuiiREZCncK
-QkSxjiDoSP0rc+3BQp2kG3yy6S9mN4qMQPELEtBa6bORogxNK+Pxg8TRI/+xgeFt
-bod5Bd4pfl6Y5hXm21JwELFlOzPI3PMCYQDOYK6Z7vegiOJyyAJXMjcI07H8S0Gr
-SZW8f4tHRzO+RrRpR5ANzarELX7nF/Qj5mPXiZNiiMDGocxqkNzIa5HFLOqBhRkv
-o7yC1Cj582dUBFHyEbsZxR6UMTPLdE3UaRMCYACC1Nv3dmaJ2ib+KwEQ4h/2Ooao
-K4OUxGMfdqu2l1gtIXNBVNxDW7qL3SFA57wgj4x0cJUHu7MYJjBC3igl2uIk2wFk
-RSOOGIR35JFec/o/r9JDYPUcs/hP8TU6hokCBQJgHbH/rZqa+vh3TPjGjXFmRdjg
-JWNWwaTG7OaVTd5K7bgSwYtQiQvs5Gl/dxUVRg0ilKLxGB6BTpN9bGAHxLbltK9v
-1s8l/praxyBr/PsvBQHSILi4aU7ZxY0G3OGRSV0NAmBx28Msdgc0yHh3qSkbwVEr
-gr7av1iOH73ee+o4CmMWXYUBHOMW5Su0s0QHjNGDMiRiRoCvzYqdLcJj9/sFJxOT
-CM35WGGeKDMNubX7C6YroQ91q7kUmhi7HHY3QOyhCDU=
------END RSA PRIVATE KEY-----
+-----BEGIN PRIVATE KEY-----
+MIIG/gIBADANBgkqhkiG9w0BAQEFAASCBugwggbkAgEAAoIBgQC7Tr0JP6gVKA2Z
+wtpcBmd27WquMfhdfePva0mV6oc+eE+py2gwHBUAVhMnnYAwT/7ziC0a7pel43tS
+NSHgr0oSUZJC2x+gYMKZ341Q+qNFUJTTv+hG41uKwGfcx02+0HuVU1A9m60PNtE2
+oc83Au8RwyPgcuzWwk3hmX6XUrZmz0vrUxbniLF9xl0gWeFFFWVeioItYDVAKxtl
+Ufrb5/9ju3mzfnEtWWEl+qfraA8DFA10BZRVUBKNB7aGc8KDRBwC4yQBHtIu8ob1
+9DGNe2lYnMCHPFR3dsCHjBYbuGf+J66uAxtMu0IygwI3inNtBUTnQ/QVv2fQNJc2
+vL9ic1BHSwi5byPld3igVCc35wmKLgKX0WtQKcuxI1BwYfaMK+jTZl6mQcE4AuMk
+tvhWbbLn7UQxNAe6X2JKM/M7ds1dIjyfL6nuB1yESX+FiRpjOMuRV1BwrPLJNOfl
+C9QkIRgoy1C9WxZUcigeDAApooDls4H/Q16tWdHj8toQWvYKVqMCAwEAAQKCAYBF
+/w+/pA1BEr26Z0nIuA/0Lpb+T+g7r+79Kr/OCV3PJ5DFqCDgUa47eO8hj8c2xr5E
+7e/FL8J2GMOeHgLx/y+UFu2slEyGV4KBlDwwNenL3mgvlXjM/OvZtztZExXnp+t3
+CzJiQ4nxtI+Mdf2E1lDW93Cx0ODXBLesBft7u0o0s2TwpRVbIwcJNJbanxwDABLo
+uKQbJuffefx76Z3wjgsvjwDU5fyPcOZQFhKoczOg995rLCaZlxnHoElCh4H6Ifod
+K9LQAERjLicBtSThAuO+0us353y3dJ6lY3iYsi2u69UBcvFSepzKjFsx/FPv8B8N
+QMmwpfEZvB4ODM7VvZkvmQZcN3HHopRJWVFWkTkCX5A0RXCXO+AaQV+AVJWnGCxj
+dyV6L1qBK/HsyOto9KGIHN1VFj+n4hTthNPWkDE7CkA7gAMomNvmlf6zNOrbwzro
+LznDK7OQC5Qqoge0R+u/l2xgqzIl8hl5jtmwhi6kT47HBBQ1dBKa6M4rNIFRr9EC
+gcEA9CTQHdAax7XcoeETto/TMKKfv0QyfIivscr250/87GNjzsKCK2MxHZ50jmtF
+7Q7iYhepRuvhbvF9h4BwK7fUbi/KQAW4qiVxqi+MfQkoVYdvnLgekhdmnrThqWmf
+p4ZTZ0tBe29m713WdozHZv6nNcyIrt0JXrVvIFDDpil/6ETHa+y6OMiePc8gklDD
+VVCwKpq+F+taFBzfgqNHkdnaMlP/I/35KEQyhV07aLJhR1leExoGkmc7eaK6WqVD
+iQqZAoHBAMRnVukeUNiSPZmC3IyyfD8iMXnjyPmb/+a9LmwaVOs4yjdBUmGTx+ZV
+mnDb94d3ijyshysbjCc8ebZ7FxuXoaIJ7JWYOgTeMJs1JOAoEVsHBtd1W/RpQ8Hr
+NegSwP4cmCzXAQOtenZnCC2QveHlngxk7rUiayj7G4awrJLtyW9Z9WAUokm810Nq
+muUXhHxRobc40H65+qyCuPODKz3wO4Lt5VaYd4vR+wkUFc0IghmRX0HVlVe/q9gA
+JgXwRPfMmwKBwDWRzkh8XSPs95hddqHcNQ664CproFhK9aIhUsO2fVyxAjlf3IgA
+n8pL9m85goJdfbbgUjhJkZFyU4Tj3bj6ARacTdh2aOqMhMA+5qiY1czOhuLwU2Ti
+1ZWFQu6VSn7Lrok/rgKTkxZ6lJA2m5oxziaz1lnoDiJF1ThWAFf5SyN/0/IOY14K
+Rw5w4Ei6h+G0brMqeQNulLlNDI3xncaW8pWQcK9JDt6S+DLjHiH+4fFx3n56e26s
+UBSEbDdvg74SIQKBwQCrCRM2j5/3+eKK/Nrz67snf692Zlduh9uiJL14hrXM4fe3
+hrsnHnrGq2WDQwucfQ11KQnNEIBM6u1TbH4DGVk4s0vEOnzMIHJTt0QVsM7sZoIe
+v6UEg2buSNb48tv+bwhWhCXt/fTXh4InrBSv1DZ+tKbsNrz7QzIFaXXfvhPdVInK
+0i1B6aHMo9mgB4roeG5MEL4AnhUehfhql5/goIQy0NkXQE9bA9GJZmRV2ULy4RYD
+TuxvLguIXxi9sy9cXGECgcEA2MCZvKU9hml/4n1/dEiNvSGEA9rz92Vzsb50yeRM
+3yLTaYe5koVNbag+IpqpCNP4T2xNnWIxv7ceqB78wxWykadF0z5T5I+/HBPYWLms
+mpQPr7grVqcX5gqxJoUwWwxvKLwh5KjqjRX43turXOWlsSHMVNH6KMLt1K3OtArs
+OMROcUcXBJc2hvr+YBeHOpIC1ZlawIr5BRi2FICN7TeIiE3h7VFY0ucAyOOKvfH9
+FzIeEhSTR60ZN1HtILhRJmjG
+-----END PRIVATE KEY-----
diff --git a/testdata/10-unbound-anchor.tdir/test_cert.pem b/testdata/10-unbound-anchor.tdir/test_cert.pem
index 6e588a4abc8f..5a7c3c266dd3 100644
--- a/testdata/10-unbound-anchor.tdir/test_cert.pem
+++ b/testdata/10-unbound-anchor.tdir/test_cert.pem
@@ -1,15 +1,27 @@
-----BEGIN CERTIFICATE-----
-MIICWTCCAYKgAwIBAgIJAN5YIkuCvJf5MA0GCSqGSIb3DQEBBQUAMCYxDjAMBgNV
-BAMTBXBldGFsMRQwEgYJKoZIhvcNAQkBFgVwZXRhbDAeFw0xMzAxMTcxMTUyNDVa
-Fw0zMjEwMDQxMTUyNDVaMCYxDjAMBgNVBAMTBXBldGFsMRQwEgYJKoZIhvcNAQkB
-FgVwZXRhbDCB3zANBgkqhkiG9w0BAQEFAAOBzQAwgckCgcEAuPBoYZiFOuk2SnN0
-IsheC+W7JvAJcv8tksyz/hgAnqStDnDrQ4trF607aCQ7xjj2fSAqpiMvLv0P3Ctu
-rcTRHmRXApS3GBf1PjWqoxMK8JBxCIHN4PKpyq4czOtSPH6AFlU+3KsRRwymLgpT
-SE15NYv/2M6Z3/cL1SkOdVvVDrZv1gO4OCAxwrgI6HMsjQtwe16mGsBQzrHTCOGV
-u4QtISEUDrwZL272PFsZrEpHXd9LtSpqCEoOMujr54pKxBEJAgMBAAGjDzANMAsG
-A1UdDwQEAwIChDANBgkqhkiG9w0BAQUFAAOBwQCaA3ys5hDPMNV1oXIxH6u2KfAX
-C9tYJId/SR0x8whsZuNaSEZAgImdM5dnyWdjey8Pio772E9/F2aUBGFkdadZx4My
-d7hBfEi/NECEKs86k9g0ijbin41NKtnajb6GwyNQ9vDx7Z5FS8BZ3CD0BZIdCQUE
-gKuDSWBROQU3tqrjdk2QTwGQkj2mgzT871Jn1MwZw0mczPjS1y469Ejym8wi3uCd
-EboDOoGBCpmUQbxBv6JI75cUCdmNNEwjQjZ0XQw=
+MIIEkzCCAvugAwIBAgIUSAvgFLH//MkCJQDFBcJfyjrVJYswDQYJKoZIhvcNAQEL
+BQAwJjEOMAwGA1UEAwwFcGV0YWwxFDASBgkqhkiG9w0BCQEWBXBldGFsMB4XDTI2
+MDcyNDA5NDEyNloXDTQ2MDQxMDA5NDEyNlowJjEOMAwGA1UEAwwFcGV0YWwxFDAS
+BgkqhkiG9w0BCQEWBXBldGFsMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKC
+AYEAu069CT+oFSgNmcLaXAZndu1qrjH4XX3j72tJleqHPnhPqctoMBwVAFYTJ52A
+ME/+84gtGu6XpeN7UjUh4K9KElGSQtsfoGDCmd+NUPqjRVCU07/oRuNbisBn3MdN
+vtB7lVNQPZutDzbRNqHPNwLvEcMj4HLs1sJN4Zl+l1K2Zs9L61MW54ixfcZdIFnh
+RRVlXoqCLWA1QCsbZVH62+f/Y7t5s35xLVlhJfqn62gPAxQNdAWUVVASjQe2hnPC
+g0QcAuMkAR7SLvKG9fQxjXtpWJzAhzxUd3bAh4wWG7hn/ieurgMbTLtCMoMCN4pz
+bQVE50P0Fb9n0DSXNry/YnNQR0sIuW8j5Xd4oFQnN+cJii4Cl9FrUCnLsSNQcGH2
+jCvo02ZepkHBOALjJLb4Vm2y5+1EMTQHul9iSjPzO3bNXSI8ny+p7gdchEl/hYka
+YzjLkVdQcKzyyTTn5QvUJCEYKMtQvVsWVHIoHgwAKaKA5bOB/0NerVnR4/LaEFr2
+ClajAgMBAAGjgbgwgbUwHQYDVR0OBBYEFHTJazw63SRJUbZ3slMXV9O9L7JIMGEG
+A1UdIwRaMFiAFHTJazw63SRJUbZ3slMXV9O9L7JIoSqkKDAmMQ4wDAYDVQQDDAVw
+ZXRhbDEUMBIGCSqGSIb3DQEJARYFcGV0YWyCFEgL4BSx//zJAiUAxQXCX8o61SWL
+MBIGA1UdEwEB/wQIMAYBAf8CAQAwEAYDVR0RBAkwB4IFcGV0YWwwCwYDVR0PBAQD
+AgKEMA0GCSqGSIb3DQEBCwUAA4IBgQBYyONVmgUv8mpGTp2U+12e715VDGQLRNEu
+TjGBgpVF4Vebw8E+L++Fzbd0iJVq0o1WzcM3SxdgPr/AZCqgbzHeRx3ZmE/7QNtF
+w+IvOU35VQAYlA3Caz2gYoTLYaCyPF1ZwH7cbviI1pdv1jWotHVYbK/hFXHx1GaF
+as3AHGAr1lGFFrnt0pA3G1VJACGEHOFZRxeDAwnyl9VN/JC8uujaSekA98fzspvk
+fQYTfOAhR4qd9smwg/af/cgJHcFeMbfLWYmeLa01zMR1NypBOdVJQOXCn9bBn6xW
+Niwa9JitzJaK0hRccdOEerw0UI/5s5xCKIYepn5MZ7RlWfarjBTZbVvyzkMMSFa4
+qB39pqLTQtxq3KLDpTs76Q+U9UyuQuxuC2kNyPHmpYgCT/2Aaiezx80GMeEL3XCJ
+L+vmo/3jU6miAXEFZRBCe1z8bwEWb1RiEHh/pVxRbIMRgtGfCQoQwHpZyx9VUWd0
+ZBYZlQ0Ql1YGPEuEWkobTBppzHsaIX8=
-----END CERTIFICATE-----
diff --git a/testdata/auth_transfer_limit.tdir/auth_transfer_limit.conf b/testdata/auth_transfer_limit.tdir/auth_transfer_limit.conf
new file mode 100644
index 000000000000..7052eef43aa9
--- /dev/null
+++ b/testdata/auth_transfer_limit.tdir/auth_transfer_limit.conf
@@ -0,0 +1,32 @@
+server:
+ verbosity: 7
+ # num-threads: 1
+ interface: 127.0.0.1
+ port: @PORT@
+ use-syslog: no
+ directory: ""
+ pidfile: "unbound.pid"
+ chroot: ""
+ username: ""
+ do-not-query-localhost: no
+ use-caps-for-id: no
+
+auth-zone:
+ name: "example.com"
+ for-upstream: yes
+ for-downstream: yes
+ master: "127.0.0.1@@TOPORT@"
+ max-transfer-size: 512
+ max-transfer-time: 2000
+auth-zone:
+ name: "example2.com"
+ for-upstream: yes
+ for-downstream: yes
+ master: "127.0.0.1@@TOPORT2@"
+ max-transfer-size: 512
+ max-transfer-time: 2000
+remote-control:
+ control-enable: yes
+ control-interface: @CONTROL_PATH@/controlpipe.@CONTROL_PID@
+ control-use-cert: no
+
diff --git a/testdata/auth_transfer_limit.tdir/auth_transfer_limit.dsc b/testdata/auth_transfer_limit.tdir/auth_transfer_limit.dsc
new file mode 100644
index 000000000000..926099e190b1
--- /dev/null
+++ b/testdata/auth_transfer_limit.tdir/auth_transfer_limit.dsc
@@ -0,0 +1,16 @@
+BaseName: auth_transfer_limit
+Version: 1.0
+Description: Test limit of authority zone transfer.
+CreationDate: Tue May 12 03:00:00 PM CEST 2026
+Maintainer: dr. W.C.A. Wijngaards
+Category:
+Component:
+CmdDepends:
+Depends:
+Help:
+Pre: auth_transfer_limit.pre
+Post: auth_transfer_limit.post
+Test: auth_transfer_limit.test
+AuxFiles:
+Passed:
+Failure:
diff --git a/testdata/auth_transfer_limit.tdir/auth_transfer_limit.post b/testdata/auth_transfer_limit.tdir/auth_transfer_limit.post
new file mode 100644
index 000000000000..8ec0f5fc395e
--- /dev/null
+++ b/testdata/auth_transfer_limit.tdir/auth_transfer_limit.post
@@ -0,0 +1,16 @@
+# #-- auth_transfer_limit.post --#
+# source the master var file when it's there
+[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master
+# source the test var file when it's there
+[ -f .tpkg.var.test ] && source .tpkg.var.test
+#
+# do your teardown here
+. ../common.sh
+kill_pid $FWD_PID
+kill_pid $FWD2_PID
+kill_pid $UNBOUND_PID
+rm -f $CONTROL_PATH/controlpipe.$CONTROL_PID
+echo "> cat logfiles"
+cat fwd.log
+cat fwd2.log
+cat unbound.log
diff --git a/testdata/auth_transfer_limit.tdir/auth_transfer_limit.pre b/testdata/auth_transfer_limit.tdir/auth_transfer_limit.pre
new file mode 100644
index 000000000000..52a1c09dd44f
--- /dev/null
+++ b/testdata/auth_transfer_limit.tdir/auth_transfer_limit.pre
@@ -0,0 +1,54 @@
+# #-- auth_transfer_limit.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
+
+PRE="../.."
+. ../common.sh
+if grep -e "define HAVE_PTHREAD 1" -e "define HAVE_SOLARIS_THREADS 1" -e "define HAVE_WINDOWS_THREADS 1" $PRE/config.h; then
+ TEST_FAST_RELOAD="yes"
+else
+ TEST_FAST_RELOAD="no"
+fi
+echo "TEST_FAST_RELOAD=$TEST_FAST_RELOAD" >> .tpkg.var.test
+
+get_random_port 3
+UNBOUND_PORT=$RND_PORT
+FWD_PORT=$(($RND_PORT + 1))
+FWD2_PORT=$(($RND_PORT + 2))
+echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test
+echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test
+echo "FWD2_PORT=$FWD2_PORT" >> .tpkg.var.test
+
+# start forwarders
+get_ldns_testns
+$LDNS_TESTNS -p $FWD_PORT auth_transfer_limit.testns >fwd.log 2>&1 &
+FWD_PID=$!
+echo "FWD_PID=$FWD_PID" >> .tpkg.var.test
+
+$LDNS_TESTNS -p $FWD2_PORT auth_transfer_limit.testns2 >fwd2.log 2>&1 &
+FWD2_PID=$!
+echo "FWD2_PID=$FWD2_PID" >> .tpkg.var.test
+
+# make config file
+CONTROL_PATH=/tmp
+CONTROL_PID=$$
+sed -e 's/@PORT\@/'$UNBOUND_PORT'/' \
+ -e 's/@TOPORT\@/'$FWD_PORT'/' \
+ -e 's/@TOPORT2\@/'$FWD2_PORT'/' \
+ -e 's?@CONTROL_PATH\@?'$CONTROL_PATH'?' \
+ -e 's/@CONTROL_PID@/'$CONTROL_PID'/' \
+ < auth_transfer_limit.conf > ub.conf
+# start unbound in the background
+$PRE/unbound -d -c ub.conf >unbound.log 2>&1 &
+UNBOUND_PID=$!
+echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test
+echo "CONTROL_PATH=$CONTROL_PATH" >> .tpkg.var.test
+echo "CONTROL_PID=$CONTROL_PID" >> .tpkg.var.test
+
+cat .tpkg.var.test
+wait_ldns_testns_up fwd.log
+wait_ldns_testns_up fwd2.log
+wait_unbound_up unbound.log
+
diff --git a/testdata/auth_transfer_limit.tdir/auth_transfer_limit.test b/testdata/auth_transfer_limit.tdir/auth_transfer_limit.test
new file mode 100644
index 000000000000..d4a0131ec07b
--- /dev/null
+++ b/testdata/auth_transfer_limit.tdir/auth_transfer_limit.test
@@ -0,0 +1,100 @@
+# #-- auth_transfer_limit.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
+# do the test
+
+teststep "wait for unbound to transfer"
+sleep 3
+
+teststep "check log for max-transfer-size"
+if grep "auth zone example.com. transfer.*exceeded 512 bytes" unbound.log; then
+ echo "OK"
+else
+ echo "Not OK"
+ exit 1
+fi
+
+teststep "check log for max-transfer-time"
+if grep "auth zone example2.com. transfer.*exceeded 2000 msec" unbound.log; then
+ echo "OK"
+else
+ echo "Not OK"
+ exit 1
+fi
+
+if test "$TEST_FAST_RELOAD" == "yes"; then
+ teststep "Testing with fast_reload"
+ cp ub.conf ub.conf.old
+ sed -e 's/max-transfer-size: 512/max-transfer-size: 500/' -e 's/max-transfer-time: 2000/max-transfer-time: 1000/' < ub.conf.old > ub.conf
+
+ teststep "unbound-control status"
+ $PRE/unbound-control -c ub.conf status
+ if test $? -ne 0; then
+ echo "wrong exit value."
+ exit 1
+ else
+ echo "exit value: OK"
+ fi
+
+ teststep "unbound-control fast_reload +vvdp"
+ $PRE/unbound-control -c ub.conf fast_reload +vvdp 2>&1 | tee output
+ if test $? -ne 0; then
+ echo "wrong exit value."
+ exit 1
+ else
+ echo "exit value: OK"
+ fi
+ wait_logfile unbound.log "start fast reload thread" 60
+ wait_logfile unbound.log "stop fast reload thread" 60
+ wait_logfile unbound.log "joined with fastreload thread" 60
+
+ if grep "ok" output; then
+ echo "OK"
+ else
+ echo "output not correct"
+ exit 1
+ fi
+
+ teststep "wait for unbound to transfer"
+ sleep 3
+
+ $PRE/unbound-control -c ub.conf auth_zone_transfer example.com 2>&1
+ if test $? -ne 0; then
+ echo "wrong exit value."
+ exit 1
+ else
+ echo "exit value: OK"
+ fi
+ $PRE/unbound-control -c ub.conf auth_zone_transfer example2.com 2>&1
+ if test $? -ne 0; then
+ echo "wrong exit value."
+ exit 1
+ else
+ echo "exit value: OK"
+ fi
+ teststep "wait for unbound to transfer"
+ sleep 3
+
+ teststep "check log for max-transfer-size"
+ if grep "auth zone example.com. transfer.*exceeded 500 bytes" unbound.log; then
+ echo "OK"
+ else
+ echo "Not OK"
+ exit 1
+ fi
+
+ teststep "check log for max-transfer-time"
+ if grep "auth zone example2.com. transfer.*exceeded 1000 msec" unbound.log; then
+ echo "OK"
+ else
+ echo "Not OK"
+ exit 1
+ fi
+fi
+
+exit 0
diff --git a/testdata/auth_transfer_limit.tdir/auth_transfer_limit.testns b/testdata/auth_transfer_limit.tdir/auth_transfer_limit.testns
new file mode 100644
index 000000000000..9b8694d45f49
--- /dev/null
+++ b/testdata/auth_transfer_limit.tdir/auth_transfer_limit.testns
@@ -0,0 +1,38 @@
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+example.com. IN SOA
+SECTION ANSWER
+example.com. IN SOA ns.example.com. hostmaster.example.com. 1 3600 900 86400 3600
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+example.com. IN AXFR
+SECTION ANSWER
+example.com. IN SOA ns.example.com. hostmaster.example.com. 1 3600 900 86400 3600
+example.com. IN NS ns.example.net.
+; too big!
+EXTRA_PACKET
+REPLY QR AA NOERROR
+SECTION QUESTION
+example.com. IN AXFR
+SECTION ANSWER
+large01.example.com. IN TXT "123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789"
+large02.example.com. IN TXT "123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789"
+large03.example.com. IN TXT "123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789"
+large04.example.com. IN TXT "123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789"
+large05.example.com. IN TXT "123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789"
+EXTRA_PACKET
+REPLY QR AA NOERROR
+SECTION QUESTION
+example.com. IN AXFR
+SECTION ANSWER
+www.example.com. IN A 1.2.3.4
+example.com. IN SOA ns.example.com. hostmaster.example.com. 1 3600 900 86400 3600
+ENTRY_END
diff --git a/testdata/auth_transfer_limit.tdir/auth_transfer_limit.testns2 b/testdata/auth_transfer_limit.tdir/auth_transfer_limit.testns2
new file mode 100644
index 000000000000..6356aa93aac0
--- /dev/null
+++ b/testdata/auth_transfer_limit.tdir/auth_transfer_limit.testns2
@@ -0,0 +1,35 @@
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+example2.com. IN SOA
+SECTION ANSWER
+example2.com. IN SOA ns.example2.com. hostmaster.example2.com. 1 3600 900 86400 3600
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+example2.com. IN AXFR
+SECTION ANSWER
+example2.com. IN SOA ns.example2.com. hostmaster.example2.com. 1 3600 900 86400 3600
+example2.com. IN NS ns.example2.net.
+EXTRA_PACKET
+REPLY QR AA NOERROR
+; too slow
+ADJUST packet_sleep=3
+SECTION QUESTION
+example2.com. IN AXFR
+SECTION ANSWER
+extra.example2.com. IN A 1.2.3.5
+EXTRA_PACKET
+REPLY QR AA NOERROR
+SECTION QUESTION
+example2.com. IN AXFR
+SECTION ANSWER
+www.example2.com. IN A 1.2.3.4
+example2.com. IN SOA ns.example2.com. hostmaster.example2.com. 1 3600 900 86400 3600
+ENTRY_END
diff --git a/testdata/auth_xfr_host_bogus.rpl b/testdata/auth_xfr_host_bogus.rpl
new file mode 100644
index 000000000000..bd8973855681
--- /dev/null
+++ b/testdata/auth_xfr_host_bogus.rpl
@@ -0,0 +1,294 @@
+; config options
+server:
+ trust-anchor: "example.net. 3600 IN DS 29332 8 2 fe9d2d1f797b8dbe717febca0b7ff2125e0bdc819eb529008aad5630e61d4d99"
+ val-override-date: "20201020135527"
+ target-fetch-policy: "0 0 0 0 0"
+ fake-sha1: yes
+ trust-anchor-signaling: no
+ target-fetch-policy: "0 0 0 0 0"
+ qname-minimisation: no
+
+auth-zone:
+ name: "example.com."
+ master: ns.example.net.
+ for-downstream: yes
+ for-upstream: yes
+ ## fallback-enabled: no
+ ## this line generates zonefile: \n"/tmp/xxx.example.com"\n
+ zonefile:
+TEMPFILE_NAME example.com
+ ## this is the inline file /tmp/xxx.example.com
+ ## the tempfiles are deleted when the testrun is over.
+TEMPFILE_CONTENTS example.com
+TEMPFILE_END
+
+stub-zone:
+ name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Test authority zone with bogus host name lookup
+
+; 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
+example.net. IN A
+SECTION ANSWER
+SECTION AUTHORITY
+example.net. IN NS ns2.example.net.
+SECTION ADDITIONAL
+ns2.example.net. IN A 1.2.3.45
+ENTRY_END
+RANGE_END
+
+; a.gtld-servers.net.
+RANGE_BEGIN 0 100
+ ADDRESS 192.5.6.30
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+com. IN NS
+SECTION ANSWER
+com. IN NS a.gtld-servers.net.
+SECTION ADDITIONAL
+a.gtld-servers.net. IN A 192.5.6.30
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+example.com. IN NS
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.44
+ENTRY_END
+RANGE_END
+
+; ns.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.44
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.com. IN NS
+SECTION ANSWER
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.44
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+ns.example.com. IN A
+SECTION ANSWER
+ns.example.com. IN A 1.2.3.44
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+ns.example.com. IN AAAA
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+www.example.com. IN A 1.2.3.44
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.com. IN NS
+SECTION ANSWER
+example.com. IN NS ns.example.com.
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. IN A 10.20.30.40
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.com. IN SOA
+SECTION ANSWER
+; serial, refresh, retry, expire, minimum
+example.com. IN SOA ns.example.com. hostmaster.example.com. 1 3600 900 86400 3600
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+example.com. IN AXFR
+SECTION ANSWER
+example.com. IN SOA ns.example.com. hostmaster.example.com. 1 3600 900 86400 3600
+example.com. IN NS ns.example.com.
+www.example.com. IN A 1.2.3.4
+example.com. IN SOA ns.example.com. hostmaster.example.com. 1 3600 900 86400 3600
+ENTRY_END
+RANGE_END
+
+; ns2.example.net
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.45
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns2.example.net. IN A
+SECTION ANSWER
+ns2.example.net. 3600 IN A 1.2.3.45
+ns2.example.net. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 29332 example.net. ttH0qGYFJp0zfoqb6h9cDGhkosucRPI64gd3+i7gwAcbOtfGJhHR7+NQ7uH+gRRv4lzPEiWP6zM7IiSeC1o+gW/Y2u6J1a330KzikT1YxIWGQJ825NU3PJ5ifTC8IgrN8HFwBuof3K4x/ftdA9VRcyCbFicazOD4RLlbhffMpoVQKyRa/NqHT8mSWLPry9q9skgdyRk17f65i0sdSCEyCXv8+vX6vBxaMF3in+zQxvnA9nyB4omwLLJZx3jaF0+lSiBcx3u20DTbCC/cyjxJArhLlv1N5U3GRUpFXl1d7k0FmacQCP4H5UXSzy6vf6XoQwtfIgNzwYgFN5RuCdJ71w==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns2.example.net. IN AAAA
+SECTION ANSWER
+SECTION AUTHORITY
+example.net. 3600 IN SOA ns.example.com. root.example.com. 4 14400 3600 604800 3600
+example.net. 3600 IN RRSIG SOA 8 2 3600 20201116135527 20201019135527 29332 example.net. OWDPS0sJQOhZlqKUbdL8OVwT0u1e1asbjW+9dMRxIF/VoxxRaYIqD/lsn1U+irRrbIPDp9wxDdFu7ChddB1n2/do/by9xuIMLD00mkxSJduxMjRl/8hWvhBV6j8jqU0pbsxS3Oolcju8imrobEqqCDi1YVD6OQuBzwnQ7trF9mfANv208pDA4chWXWUimFETKzpc3aLarcm3qVnb53AQhggyLow/ZLG1egbwaGn3pcf+kPHw+G4MSOR1TtS0mWKiPgdYRiqSS+AqrZUu/ZuAKAGweKeIypDgm6RZC5M4FmRA+f8gZg2rI2Xog6TLt0qrjD8ARwXkyBq8wL3G0Ihkew==
+ns2.example.net. 3600 IN NSEC ns3.example.net. A RRSIG NSEC
+ns2.example.net. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 29332 example.net. MMDdm3yz6Ocreg8HE7Cf9EnIJ5NFCVzEv+I9zBeUR90pFBlrBY4LqmMxC5GXoEEc1iql5XpPkIspsWTkCUSWutoiDh4Vlg54HrZ4ONy8GzVzg5ePcuXT51nYq1xjfDx4Yi124GT/QKx4+B7HFoyFfoRT1Kf+uP3c7F7qK+VB3FrBBQpl7f6dX87qO23Bb+Vp+L0RPCmuLkhdnrM34bB6jT1lGwgsD4upDy81XKSH6uces8D/fvl0+Evzcy3gkKlxY6uzV53cUD0FM9AVg7/ZWXwQe5n7PIU9gzQ3xtnH5MA8fG6iUyVQJixjqzEqjJdh2PMJA31qTT2X6LQO95ZM2w==
+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 AwEAAb4WMOTBLTFvmBra5m6SK4VfViOzmvyUAU0qv861ZQXeEFvwlndqNU9rwRsMxrSWAYs5nHErKDn49usC/HyxxW1477iGFHhfgL4mjNreJm9zft2QFB1VLbRbEPYdDMLCn4co0qnG7/KG8W2i8Pym1L7f+aREwbLo+/716AS2PbaKMhfWLKLiq5wnBcUClQMNzCiwhqxDJp1oePqfkVdeUgXOtgi0dYRIKyQFhJ5VWJ22npoi/Gif0XLCADAlAwRLKc8o/yJkCxskzgpHpw5Cki1lclg0aq4ssOuPRQ+ne6IHYCz9D2mwzulblhLFamKdq7aHzNt4NlyxhpANVFiKLD8= ;{id = 29332 (ksk), size = 2048b}
+example.net. 3600 IN RRSIG DNSKEY 8 2 3600 20201116135527 20201019135527 29332 example.net. a0AqvyBN1Dr1Try1RBjbWjhaaTj3WGpSBywSxLu09bElAFinC3kUgk/WTjfsIIxruUHmzVgPssYeb5g79rdaz7YanSi06LQsnEjMS+hexSU6TXBCtJnhA8taKPlPj+qBRQL/Ptju72upty6Mw8eMG05QOQOa2WC5mPLgo2k6PmgsBMyW3Rhn+lldlmz1NZIZ3udDHs6xxX6Gjio67ogGm0MUbWRZo68oGt/xYv6JzZAVzZROlWvs5D+pf1Mrfzn3yOMJ0jh2XTXJAiw3vX+i2k/P/Yfscm7BWULJ7fBx+0JcDuYccd2mj9ijmD7KuM/laFSIUvxAixu7gV2TDrKEjw==
+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. IN A 1.2.3.44
+; bad RRSIG
+ns.example.net. 3600 IN RRSIG A 8 2 3600 20201116135527 20201019135527 29332 example.net. a0AqvyBN1Dr1Try1RBjbWjhaaTj3WGpSBywSxLu09bElAFinC3kUgk/WTjfsIIxruUHmzVgPssYeb5g79rdaz7YanSi06LQsnEjMS+hexSU6TXBCtJnhA8taKPlPj+qBRQL/Ptju72upty6Mw8eMG05QOQOa2WC5mPLgo2k6PmgsBMyW3Rhn+lldlmz1NZIZ3udDHs6xxX6Gjio67ogGm0MUbWRZo68oGt/xYv6JzZAVzZROlWvs5D+pf1Mrfzn3yOMJ0jh2XTXJAiw3vX+i2k/P/Yfscm7BWULJ7fBx+0JcDuYccd2mj9ijmD7KuM/laFSIUvxAixu7gV2TDrKEjw==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.example.net. IN AAAA
+SECTION ANSWER
+SECTION AUTHORITY
+example.net. 3600 IN SOA ns.example.com. root.example.com. 4 14400 3600 604800 3600
+example.net. 3600 IN RRSIG SOA 8 2 3600 20201116135527 20201019135527 29332 example.net. OWDPS0sJQOhZlqKUbdL8OVwT0u1e1asbjW+9dMRxIF/VoxxRaYIqD/lsn1U+irRrbIPDp9wxDdFu7ChddB1n2/do/by9xuIMLD00mkxSJduxMjRl/8hWvhBV6j8jqU0pbsxS3Oolcju8imrobEqqCDi1YVD6OQuBzwnQ7trF9mfANv208pDA4chWXWUimFETKzpc3aLarcm3qVnb53AQhggyLow/ZLG1egbwaGn3pcf+kPHw+G4MSOR1TtS0mWKiPgdYRiqSS+AqrZUu/ZuAKAGweKeIypDgm6RZC5M4FmRA+f8gZg2rI2Xog6TLt0qrjD8ARwXkyBq8wL3G0Ihkew==
+ns.example.net. 3600 IN NSEC ns2.example.net. A RRSIG NSEC
+ns.example.net. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 29332 example.net. bwmn1nX0amfcIK6+NXdX7i3VvebPGpVLd0Ry0P+5JbiLCO3lI8kbXxpQh2jpIAKAdfSq+WZPGAhwOSOTVak1mEcYf5xLvmiKWmGz0LH8RTCzQTAlcQTnuybmQWuwBjIXaetVQ1ADiJZK57M41d5lOE0KqWe5xfAHE+UhMOQ6JhQwLFK/QfQJB7ke1itM/qfsJHgdb/rbT7v7G8Nd342NMCZEgzP/wFyZ3JRP0XY5D7K71IuFZd9NfxXkKRMn5UM/lMDITqE3MknzXnsKJcH9SpoykKMya9SsrwI+IuOxpQkyiyd+N33H3di4uWI1MiWdayQnR2D3HhHi1Vdp42CDxQ==
+ENTRY_END
+RANGE_END
+
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www.example.com. IN A
+ENTRY_END
+
+; recursion happens here.
+STEP 20 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR AA RD RA SERVFAIL
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+ENTRY_END
+
+STEP 30 TIME_PASSES ELAPSE 10
+STEP 40 TRAFFIC
+
+STEP 50 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www.example.com. IN A
+ENTRY_END
+
+; The bogus host was not used.
+STEP 60 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR AA RD RA SERVFAIL
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+ENTRY_END
+
+; the zonefile was updated with new contents
+STEP 70 CHECK_TEMPFILE example.com
+FILE_BEGIN
+FILE_END
+
+SCENARIO_END
diff --git a/testdata/dns64_dnssec.rpl b/testdata/dns64_dnssec.rpl
new file mode 100644
index 000000000000..019b0eb7abce
--- /dev/null
+++ b/testdata/dns64_dnssec.rpl
@@ -0,0 +1,609 @@
+; config options
+; The island of trust is at test.
+server:
+ trust-anchor: "test. DS 1444 8 2 8a87d067fd09a5965244fe2e317dd26d182c468e0a7f26ecc4c7b479bf89db9b"
+ val-override-date: "20201020135527"
+ target-fetch-policy: "0 0 0 0 0"
+ qname-minimisation: no
+ fake-sha1: yes
+ trust-anchor-signaling: no
+ minimal-responses: no
+ iter-scrub-promiscuous: no
+ local-zone: test. nodefault
+ log-servfail: yes
+ module-config: "dns64 validator iterator"
+ dns64-prefix: 64:ff9b::0/96
+
+stub-zone:
+ name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Test DNS64 with DNSSEC validation.
+; valid.example.test. both AAAA and A are DNSSEC valid
+; invaaaa.example.test. AAAA is invalid, A is DNSSEC valid
+; inva.example.test. AAAA is valid, A is DNSSEC invalid
+; invboth.example.test. AAAA is invalid, A is DNSSEC invalid
+; hasaaaa.example.test. has an AAAA record.
+; queries with and without CD flag.
+
+; K.ROOT-SERVERS.NET.
+RANGE_BEGIN 0 300
+ 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
+test. IN NS
+SECTION AUTHORITY
+test. IN NS ns.test.
+SECTION ADDITIONAL
+ns.test. IN A 1.2.3.5
+ENTRY_END
+RANGE_END
+
+; ns.test
+RANGE_BEGIN 0 300
+ ADDRESS 1.2.3.5
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+test. IN NS
+SECTION ANSWER
+test. IN NS ns.test
+test. 3600 IN RRSIG NS 8 1 3600 20201116135527 20201019135527 1444 test. RGCxIO32TbbLTk6xZmTr+fjYPH50hntBxeOQ2DIj2pDsmjALcHYtVkOfpfk2EhOhHZd+9PLuoJPbJh6a9NqLSFeBvr0XZoCZoQ2g0tCHUNHcH5EVjA2TuYBQem6DVYnPLJ3914aRx0uA1j42b8dC2xsam/XkOo7U+dLbUW2Os1s=
+SECTION ADDITIONAL
+ns.test. IN A 1.2.3.5
+ns.test. 3600 IN RRSIG A 8 2 3600 20201116135527 20201019135527 1444 test. GskCc4/k6GjH9V9Jz2V5L2XLiizbOeWkB0feSbf+aN859S3vxVvtuqkvIgwY4LafUO1QAn/pUcv9zA7rcFO++rlg+8t6gvZTo9p3v0bfeIv2uJDsfSBD5jDh0WXlxjekfnrKrQp7zE+GiA93tWwKUWKPvxXDgP+n886e6WcbHJw=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.test. IN A
+SECTION ANSWER
+ns.test. IN A 1.2.3.5
+ns.test. 3600 IN RRSIG A 8 2 3600 20201116135527 20201019135527 1444 test. GskCc4/k6GjH9V9Jz2V5L2XLiizbOeWkB0feSbf+aN859S3vxVvtuqkvIgwY4LafUO1QAn/pUcv9zA7rcFO++rlg+8t6gvZTo9p3v0bfeIv2uJDsfSBD5jDh0WXlxjekfnrKrQp7zE+GiA93tWwKUWKPvxXDgP+n886e6WcbHJw=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.test. IN AAAA
+SECTION AUTHORITY
+test. 3600 IN SOA ns.test. host.test. 20201 3600 1800 604800 3600
+test. 3600 IN RRSIG SOA 8 1 3600 20201116135527 20201019135527 1444 test. IZJIDmEgf0W7A5G7hvvZ2hUqJ9Trbv1/i7ySapDmPbYV9lVCmHHobySxO01yDhI2/Pvpsvxqrm1Tiv3BxH8uzZ4keKgiQjBsSy4htAsFct9I4E7ly2glPj/Fm3oun3PsjJDv5QYhx0KS7w4IQKU7Nc9pfJc92uoUI5bdoC1pRGw=
+ns.test. 3600 IN NSEC nz.test. A RRSIG
+ns.test. 3600 IN RRSIG NSEC 8 2 3600 20201116135527 20201019135527 1444 test. PElArVB3KPg8KHAP7lzcNbhFuXNxTsHNTn1dZVncB5qmWRdIaeKpaXDjpH0JSXMaelGFS+/QhuQ6Hmw9+4VyZFRqMzGhw4agUR/2bxABHcDIG4ZpUwyeSP61ATTfHUkQVxaH2wjCWI/tfmesdP2xVE4GXyUvCIBxU914MkZbULU=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+test. IN DNSKEY
+SECTION ANSWER
+test. 3600 IN DNSKEY 257 3 8 AwEAAbd9WqjzE2Pynz21OG5doSf9hFzMr5dhzz2waZ3vTa+0o5r7AjTAqmA1yH/B3+aAMihUm5ucZSfVqo7+kOaRE8yFj9aivOmA1n1+JLevJq/oyvQyjxQN2Qb89LyaNUT5oKZIiL+uyyhNW3KDR3SSbQ/GBwQNDHVcZi+JDR3RC0r7 ;{id = 1444 (ksk), size = 1024b}
+test. 3600 IN RRSIG DNSKEY 8 1 3600 20201116135527 20201019135527 1444 test. UmRMS4iG9NBBHZYOtpwFFcJgbEb5SfHSgHd9XRe/8pTWM31WSDayn5ViPOBMqI1T5TXg2amc13dDI574xIM2oKMus3b5cBW72jJLW13jprBtslO6P8BMWb4HNnvLrJtQjwf3ErRirtTxinLmywQtmyr1cdthyG3Gp4N7i90fHSc=
+SECTION ADDITIONAL
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qname qtype
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+example.test. IN DS
+SECTION ANSWER
+example.test. 3600 IN DS 55567 8 2 a2d578906330a10a57d40462257b6ce038bad3f7bf4a45c46c46086e20a94b39
+example.test. 3600 IN RRSIG DS 8 2 3600 20201116135527 20201019135527 1444 test. P7+FTYW2qHuJ4I1YbuvseEz5X1lOYAraGEHB3C5y0OOCQFmhmSiFRdquNi2NlpcS6FXLdsE0EU+Bo1+0atTG4EkMWXbpF21lrtbB51BdsnlX4Mzc/o375fvjiOMwmF6wPCUaOUN62jrVrhsE/hedaVyDphDToqL17ETohwgUO2I=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+example.test. IN NS
+SECTION AUTHORITY
+example.test. IN NS ns.example.test.
+example.test. 3600 IN DS 55567 8 2 a2d578906330a10a57d40462257b6ce038bad3f7bf4a45c46c46086e20a94b39
+example.test. 3600 IN RRSIG DS 8 2 3600 20201116135527 20201019135527 1444 test. P7+FTYW2qHuJ4I1YbuvseEz5X1lOYAraGEHB3C5y0OOCQFmhmSiFRdquNi2NlpcS6FXLdsE0EU+Bo1+0atTG4EkMWXbpF21lrtbB51BdsnlX4Mzc/o375fvjiOMwmF6wPCUaOUN62jrVrhsE/hedaVyDphDToqL17ETohwgUO2I=
+SECTION ADDITIONAL
+ns.example.test. IN A 1.2.3.4
+ENTRY_END
+RANGE_END
+
+; ns.example.test.
+RANGE_BEGIN 0 300
+ ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.test. IN NS
+SECTION ANSWER
+example.test. IN NS ns.example.test.
+example.test. 3600 IN RRSIG NS 8 2 3600 20201116135527 20201019135527 55567 example.test. l1JT0wMlK0YI7/CWHzexf/k0iafUhCgN+BdgjBXIRXmSQNf4HDTiAkbcWL2/15qtnp12nQy9JeiTdSQ3vtPoHAJX4C5uTWaze4ms+Wrrf+n92sLCjacP9x50uuicH3URT6cKb1QCAPwlvlWxIlZjAMYFScSns7+C441NMJT8aE4=
+SECTION ADDITIONAL
+ns.example.test. IN A 1.2.3.4
+ns.example.test. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55567 example.test. 2PWaVaccZFQgfPKXNsdEGYUVaashCAj1ZhBo9XRt5eQKUFvZcauBjMnXIuxZFyWeootn1fZGw6GuPI5W48Y0FDx38H6adprkFgQikso2Y64jDdDMWznSo38Z/XqP+U0+kq4vmwonvmEMpm7hKnNEXvhqGKyGzyBwb+CZVJ2L8Eo=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.example.test. IN A
+SECTION ANSWER
+ns.example.test. IN A 1.2.3.4
+ns.example.test. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55567 example.test. 2PWaVaccZFQgfPKXNsdEGYUVaashCAj1ZhBo9XRt5eQKUFvZcauBjMnXIuxZFyWeootn1fZGw6GuPI5W48Y0FDx38H6adprkFgQikso2Y64jDdDMWznSo38Z/XqP+U0+kq4vmwonvmEMpm7hKnNEXvhqGKyGzyBwb+CZVJ2L8Eo=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.example.test. IN AAAA
+SECTION AUTHORITY
+example.test. 3600 IN SOA ns.example.test. host.example.test. 20301 3600 1800 604800 3600
+example.test. 3600 IN RRSIG SOA 8 2 3600 20201116135527 20201019135527 55567 example.test. 2UUkScBAN37fJpSrelhE8DotKvmOzj3q9wicaanCIaCv95DE4nQnePih5B+ek3FIRjB/Uv2+z4Ro5Uxy94XAnlK0rCkDLSa0U9U7KP0ytc88sevO0x1SCPAMoZoJO6JqHkv42pdh54WSz+Zb/D8npY0j/tksHe/uX+VQnMymgb8=
+ns.example.test. 3600 IN NSEC nz.example.test. A RRSIG
+ns.example.test. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55567 example.test. v/5aO/n8Ow21y7LE7JKZsFkUJU5MjIfadVRm2Tdb8f3RLwYDdBTs3aWeeEQdCRSUF61TmfJM1jIxlWQPuHbqzGnjSk7adw9gFpP7wFwoqG3/xdCFHoxo/3/1F/4Ankey3sDgKgOFsgnu40TlL36mGPYszeK+/2o3SAx2GM+3BdU=
+ENTRY_END
+
+; response to DNSKEY priming query
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.test. IN DNSKEY
+SECTION ANSWER
+example.test. 3600 IN DNSKEY 257 3 8 AwEAAdug/L739i0mgN2nuK/bhxu3wFn5Ud9nK2+XUmZQlPUEZUC5YZvm1rfMmEWTGBn87fFxEu/kjFZHJ55JLzqsbbpVHLbmKCTT2gYR2FV2WDKROGKuYbVkJIXdKAjJ0ONuK507NinYvlWXIoxHn22KAWOd9wKgSTNHBlmGkX+ts3hh ;{id = 55567 (ksk), size = 1024b}
+example.test. 3600 IN RRSIG DNSKEY 8 2 3600 20201116135527 20201019135527 55567 example.test. IbWMC6quOuZFNPAVxQLqCJ9nLhindBo826rnLcg5yMgs9dGUSPOCXAfHTmbgJAUNs9HTFfrJWNvasnETs0UOpmEuifGwWdH1OlME7Gny4RL2QmITUFeMW81Jz1tiVQxFXl6yxT0jxOxvz+bqMHlrz+8IeWQXcO+GZTPu8ueq30g=
+ENTRY_END
+
+; response to query of interest
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+valid.example.test. AAAA
+SECTION ANSWER
+SECTION AUTHORITY
+example.test. 3600 IN SOA ns.example.test. host.example.test. 20301 3600 1800 604800 3600
+example.test. 3600 IN RRSIG SOA 8 2 3600 20201116135527 20201019135527 55567 example.test. 2UUkScBAN37fJpSrelhE8DotKvmOzj3q9wicaanCIaCv95DE4nQnePih5B+ek3FIRjB/Uv2+z4Ro5Uxy94XAnlK0rCkDLSa0U9U7KP0ytc88sevO0x1SCPAMoZoJO6JqHkv42pdh54WSz+Zb/D8npY0j/tksHe/uX+VQnMymgb8=
+valid.example.test. 3600 IN NSEC valid2.example.test. A RRSIG NSEC
+valid.example.test. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55567 example.test. GgwpBUFe6s1OLhunIQt5IXPMc51bScvWApWC7j0GbqL3FvtDyHDW4+vBxSh4lxX+262wGkw4OksRXIq0jNm313s8RUKmfszKeNfOr7KwubNeTZnU8dhl7RwIbBAYzqv2KPT7fPX7Vi3sKYDbJrU+KJUBohueJdGf4Y6Ixcb6sqY=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+valid.example.test. A
+SECTION ANSWER
+valid.example.test. 3600 IN A 192.0.2.1
+valid.example.test. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55567 example.test. hZx175Bx+TmOZjv021Y5Os4254guBqMWLk9A1ixCM0B7v9s9WxMBidDvjiWO6dwjkvC4v8dfcoCWvoFfgwBNUFQQV9xDrqB06Oo4qyMftpyQrV/FsHrHQ7OlxaX/P5vhuPtQvLMj/J67P7WWIewqZV9SKP4I1vFX+c5L/uO/8Ts=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+invaaaa.example.test. AAAA
+SECTION ANSWER
+SECTION AUTHORITY
+example.test. 3600 IN SOA ns.example.test. host.example.test. 20301 3600 1800 604800 3600
+example.test. 3600 IN RRSIG SOA 8 2 3600 20201116135527 20201019135527 55567 example.test. 2UUkScBAN37fJpSrelhE8DotKvmOzj3q9wicaanCIaCv95DE4nQnePih5B+ek3FIRjB/Uv2+z4Ro5Uxy94XAnlK0rCkDLSa0U9U7KP0ytc88sevO0x1SCPAMoZoJO6JqHkv42pdh54WSz+Zb/D8npY0j/tksHe/uX+VQnMymgb8=
+invaaaa.example.test. 3600 IN NSEC invaaaa2.example.test. A RRSIG NSEC
+; signature on the NSEC is invalidated: (wrong keytag)
+; correct is:
+; invaaaa.example.test. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55567 example.test. Xsc0PJbV3dYo6EweR5e/o4ROVNpJkWNdrDXNrU9vwwCOFrfdvkoOLCnmejpHM5V+v8yNt43l4gcurut8GU4hzBD2gdx1SdMV6k3Uv8UYRrQhidIwEynQRqaDhdAt7lCqTvKAn2iTHbHU9Fss0ezL01aYaCVTyPTeGZP6CgSzGU0=
+invaaaa.example.test. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 11567 example.test. Xsc0PJbV3dYo6EweR5e/o4ROVNpJkWNdrDXNrU9vwwCOFrfdvkoOLCnmejpHM5V+v8yNt43l4gcurut8GU4hzBD2gdx1SdMV6k3Uv8UYRrQhidIwEynQRqaDhdAt7lCqTvKAn2iTHbHU9Fss0ezL01aYaCVTyPTeGZP6CgSzGU0=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+invaaaa.example.test. A
+SECTION ANSWER
+invaaaa.example.test. 3600 IN A 192.0.2.2
+invaaaa.example.test. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55567 example.test. vNWrVbz9L8eaBXIulg+zswK02cjy+stKxHhedDclVqduavv7+6ZV7idFY+zlHZU6KxrfjGB8/UFMkdpOlcgrAy0D9YQAVjm2zCKzx6f3GSenlNWMlhwgeAJb+ozP/cmrZ+ctqF7id9q4E5P08yTPHEqEcdXDMG0iTEuSvel/p7I=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+inva.example.test. AAAA
+SECTION ANSWER
+SECTION AUTHORITY
+example.test. 3600 IN SOA ns.example.test. host.example.test. 20301 3600 1800 604800 3600
+example.test. 3600 IN RRSIG SOA 8 2 3600 20201116135527 20201019135527 55567 example.test. 2UUkScBAN37fJpSrelhE8DotKvmOzj3q9wicaanCIaCv95DE4nQnePih5B+ek3FIRjB/Uv2+z4Ro5Uxy94XAnlK0rCkDLSa0U9U7KP0ytc88sevO0x1SCPAMoZoJO6JqHkv42pdh54WSz+Zb/D8npY0j/tksHe/uX+VQnMymgb8=
+inva.example.test. 3600 IN NSEC inva2.example.test. A RRSIG NSEC
+inva.example.test. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55567 example.test. 1Rltlowol5kpdPYUuOt4GQJJjUr7UvJQGuhJ58Tuwxsd1rt/M+HAM61lzE2z6xcT2ezw5ja60lzNQsMiFYP0JCwcT6874X4er4+544O6fwFVcZPEh9jTOEH5TsjiYT1OltIsPf8LSUchRAo8LMSbHBpfFHe6JPZiyvBs4N60/hM=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+inva.example.test. A
+SECTION ANSWER
+inva.example.test. 3600 IN A 192.0.2.3
+; signature is invalidated: (wrong keytag)
+; correct is:
+;inva.example.test. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55567 example.test. CrBrpUkdpdDv/rg6u5I/Ja5FOHUvTl8g0wxymHfrm+qQMCJ86CHdsON6g8JyCE4HsZ6ZXEc9/s5Qxnse/awlEKGjvM6SYRbXhhbjJDDY2MoitwYXLAocq2gM0tqZeKMnYZzMRiRdhaL4XvwubHAtD/gU/RiF2/uequViwlaFo8w=
+inva.example.test. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 11567 example.test. CrBrpUkdpdDv/rg6u5I/Ja5FOHUvTl8g0wxymHfrm+qQMCJ86CHdsON6g8JyCE4HsZ6ZXEc9/s5Qxnse/awlEKGjvM6SYRbXhhbjJDDY2MoitwYXLAocq2gM0tqZeKMnYZzMRiRdhaL4XvwubHAtD/gU/RiF2/uequViwlaFo8w=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+invboth.example.test. AAAA
+SECTION ANSWER
+SECTION AUTHORITY
+example.test. 3600 IN SOA ns.example.test. host.example.test. 20301 3600 1800 604800 3600
+example.test. 3600 IN RRSIG SOA 8 2 3600 20201116135527 20201019135527 55567 example.test. 2UUkScBAN37fJpSrelhE8DotKvmOzj3q9wicaanCIaCv95DE4nQnePih5B+ek3FIRjB/Uv2+z4Ro5Uxy94XAnlK0rCkDLSa0U9U7KP0ytc88sevO0x1SCPAMoZoJO6JqHkv42pdh54WSz+Zb/D8npY0j/tksHe/uX+VQnMymgb8=
+invboth.example.test. 3600 IN NSEC invboth2.example.test. A RRSIG NSEC
+; signature on the NSEC is invalidated: (wrong keytag)
+; correct is:
+;invboth.example.test. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55567 example.test. w7oGj0Tb3o30iIknVEVToQ39DCQVUx9yV2mm1SkR4MBc4zj3eZRRoL40lHPrIndFRsrBxm7+pxdy29Nw+diWdQj5NnsEsPDSPRvkb04xaah22/zd7lmjLLx3qtFCZpEVbsLUGQAy546NmVlv65/TghlTFA3e6dOFtiwQhdWskyg=
+invboth.example.test. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 11567 example.test. w7oGj0Tb3o30iIknVEVToQ39DCQVUx9yV2mm1SkR4MBc4zj3eZRRoL40lHPrIndFRsrBxm7+pxdy29Nw+diWdQj5NnsEsPDSPRvkb04xaah22/zd7lmjLLx3qtFCZpEVbsLUGQAy546NmVlv65/TghlTFA3e6dOFtiwQhdWskyg=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+invboth.example.test. A
+SECTION ANSWER
+invboth.example.test. 3600 IN A 192.0.2.4
+; signature is invalidated: (wrong keytag)
+; correct is:
+;invboth.example.test. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55567 example.test. Dt7oT9T55C83sIo8P21SzpB9WWBvEllrj0QXzCkO5Jb7XFtt7YwNnBmRMwbLbRol3YUVCkGaY/mSrATuP5xiq0sPulr8togzKWD0QOAJrxOnuk40ffkp1zrwiqkH7tRy5S9wQUx+vUt7RT1PcEqWufI4XRPmbhFuPXIMM1i8Te8=
+invboth.example.test. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 11567 example.test. Dt7oT9T55C83sIo8P21SzpB9WWBvEllrj0QXzCkO5Jb7XFtt7YwNnBmRMwbLbRol3YUVCkGaY/mSrATuP5xiq0sPulr8togzKWD0QOAJrxOnuk40ffkp1zrwiqkH7tRy5S9wQUx+vUt7RT1PcEqWufI4XRPmbhFuPXIMM1i8Te8=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+hasaaaa.example.test. AAAA
+SECTION ANSWER
+hasaaaa.example.test. 3600 IN AAAA 2001::db8:5
+hasaaaa.example.test. 3600 IN RRSIG AAAA 8 3 3600 20201116135527 20201019135527 55567 example.test. eat6Eh6Sqy9OE+BUIdUzzKuToqFn7K62oLbNUcj+JG/mlv85xeM3fKGbbwyR1mDbt/mghLfcchxWDoXtWJtYbItFVpRn4UyIuqK2w4igUb/Ic7iKoBJ4ZWlfYadE5MnAhVSQ094yAj3iUWydqQXVmTJ4UAJ3ouyzCJS8LojzZS8=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+hasaaaa.example.test. A
+SECTION ANSWER
+hasaaaa.example.test. 3600 IN A 192.0.2.5
+hasaaaa.example.test. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55567 example.test. Lh0DMv541AunEERFv3Zck1JE4fCC48V247y5+4O/ciblzc67VDjlCnp2BAXtjoYgWmvRqtxgPMzttALbHN2YxweX0Tq6/Ji0iyvLepC6a0+LjT45KPAmXYEigX/oxyUX7bxKXJ0k+Tm9FdnesDMGuoDuk7gVYi9Bdrst8DWULJc=
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+valid.example.test. IN AAAA
+ENTRY_END
+
+STEP 2 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA AD DO NOERROR
+SECTION QUESTION
+valid.example.test. IN AAAA
+SECTION ANSWER
+valid.example.test. 0 IN AAAA 64:ff9b::c000:201
+ENTRY_END
+
+; from cache
+STEP 10 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+valid.example.test. IN AAAA
+ENTRY_END
+
+STEP 11 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA AD DO NOERROR
+SECTION QUESTION
+valid.example.test. IN AAAA
+SECTION ANSWER
+valid.example.test. 0 IN AAAA 64:ff9b::c000:201
+ENTRY_END
+
+; with cd flag
+STEP 20 QUERY
+ENTRY_BEGIN
+REPLY RD CD DO
+SECTION QUESTION
+valid.example.test. IN AAAA
+ENTRY_END
+
+STEP 21 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA AD CD DO NOERROR
+SECTION QUESTION
+valid.example.test. IN AAAA
+SECTION ANSWER
+SECTION AUTHORITY
+example.test. 3600 IN SOA ns.example.test. host.example.test. 20301 3600 1800 604800 3600
+example.test. 3600 IN RRSIG SOA 8 2 3600 20201116135527 20201019135527 55567 example.test. 2UUkScBAN37fJpSrelhE8DotKvmOzj3q9wicaanCIaCv95DE4nQnePih5B+ek3FIRjB/Uv2+z4Ro5Uxy94XAnlK0rCkDLSa0U9U7KP0ytc88sevO0x1SCPAMoZoJO6JqHkv42pdh54WSz+Zb/D8npY0j/tksHe/uX+VQnMymgb8= ;{id = 55567}
+valid.example.test. 3600 IN NSEC valid2.example.test. A RRSIG NSEC
+valid.example.test. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55567 example.test. GgwpBUFe6s1OLhunIQt5IXPMc51bScvWApWC7j0GbqL3FvtDyHDW4+vBxSh4lxX+262wGkw4OksRXIq0jNm313s8RUKmfszKeNfOr7KwubNeTZnU8dhl7RwIbBAYzqv2KPT7fPX7Vi3sKYDbJrU+KJUBohueJdGf4Y6Ixcb6sqY= ;{id = 55567}
+ENTRY_END
+
+; invaaaa.example.test.
+STEP 30 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+invaaaa.example.test. IN AAAA
+ENTRY_END
+
+STEP 31 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA DO SERVFAIL
+SECTION QUESTION
+invaaaa.example.test. IN AAAA
+SECTION ANSWER
+; It is not: invaaaa.example.test. 3600 IN AAAA 64:ff9b::c000:202
+ENTRY_END
+
+; from cache
+STEP 40 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+invaaaa.example.test. IN AAAA
+ENTRY_END
+
+STEP 41 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA DO SERVFAIL
+SECTION QUESTION
+invaaaa.example.test. IN AAAA
+SECTION ANSWER
+ENTRY_END
+
+; with cd flag
+STEP 50 QUERY
+ENTRY_BEGIN
+REPLY RD CD DO
+SECTION QUESTION
+invaaaa.example.test. IN AAAA
+ENTRY_END
+
+STEP 51 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA CD DO NOERROR
+SECTION QUESTION
+invaaaa.example.test. IN AAAA
+SECTION ANSWER
+SECTION AUTHORITY
+example.test. 3600 IN SOA ns.example.test. host.example.test. 20301 3600 1800 604800 3600
+example.test. 3600 IN RRSIG SOA 8 2 3600 20201116135527 20201019135527 55567 example.test. 2UUkScBAN37fJpSrelhE8DotKvmOzj3q9wicaanCIaCv95DE4nQnePih5B+ek3FIRjB/Uv2+z4Ro5Uxy94XAnlK0rCkDLSa0U9U7KP0ytc88sevO0x1SCPAMoZoJO6JqHkv42pdh54WSz+Zb/D8npY0j/tksHe/uX+VQnMymgb8= ;{id = 55567}
+invaaaa.example.test. 60 IN NSEC invaaaa2.example.test. A RRSIG NSEC
+invaaaa.example.test. 60 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 11567 example.test. Xsc0PJbV3dYo6EweR5e/o4ROVNpJkWNdrDXNrU9vwwCOFrfdvkoOLCnmejpHM5V+v8yNt43l4gcurut8GU4hzBD2gdx1SdMV6k3Uv8UYRrQhidIwEynQRqaDhdAt7lCqTvKAn2iTHbHU9Fss0ezL01aYaCVTyPTeGZP6CgSzGU0= ;{id = 11567}
+ENTRY_END
+
+; inva.example.test.
+STEP 60 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+inva.example.test. IN AAAA
+ENTRY_END
+
+STEP 61 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA DO SERVFAIL
+SECTION QUESTION
+inva.example.test. IN AAAA
+SECTION ANSWER
+ENTRY_END
+
+; from cache
+STEP 70 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+inva.example.test. IN AAAA
+ENTRY_END
+
+STEP 71 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA DO SERVFAIL
+SECTION QUESTION
+inva.example.test. IN AAAA
+SECTION ANSWER
+ENTRY_END
+
+; with cd flag
+STEP 80 QUERY
+ENTRY_BEGIN
+REPLY RD CD DO
+SECTION QUESTION
+inva.example.test. IN AAAA
+ENTRY_END
+
+STEP 81 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA AD CD DO NOERROR
+SECTION QUESTION
+inva.example.test. IN AAAA
+SECTION ANSWER
+SECTION AUTHORITY
+example.test. 0 IN SOA ns.example.test. host.example.test. 20301 3600 1800 604800 3600
+example.test. 0 IN RRSIG SOA 8 2 3600 20201116135527 20201019135527 55567 example.test. 2UUkScBAN37fJpSrelhE8DotKvmOzj3q9wicaanCIaCv95DE4nQnePih5B+ek3FIRjB/Uv2+z4Ro5Uxy94XAnlK0rCkDLSa0U9U7KP0ytc88sevO0x1SCPAMoZoJO6JqHkv42pdh54WSz+Zb/D8npY0j/tksHe/uX+VQnMymgb8= ;{id = 55567}
+inva.example.test. 0 IN NSEC inva2.example.test. A RRSIG NSEC
+inva.example.test. 0 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55567 example.test. 1Rltlowol5kpdPYUuOt4GQJJjUr7UvJQGuhJ58Tuwxsd1rt/M+HAM61lzE2z6xcT2ezw5ja60lzNQsMiFYP0JCwcT6874X4er4+544O6fwFVcZPEh9jTOEH5TsjiYT1OltIsPf8LSUchRAo8LMSbHBpfFHe6JPZiyvBs4N60/hM= ;{id = 55567}
+ENTRY_END
+
+; invboth.example.test.
+STEP 90 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+invboth.example.test. IN AAAA
+ENTRY_END
+
+STEP 91 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA DO SERVFAIL
+SECTION QUESTION
+invboth.example.test. IN AAAA
+SECTION ANSWER
+ENTRY_END
+
+; from cache
+STEP 100 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+invboth.example.test. IN AAAA
+ENTRY_END
+
+STEP 101 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA DO SERVFAIL
+SECTION QUESTION
+invboth.example.test. IN AAAA
+SECTION ANSWER
+ENTRY_END
+
+; with cd flag
+STEP 110 QUERY
+ENTRY_BEGIN
+REPLY RD CD DO
+SECTION QUESTION
+invboth.example.test. IN AAAA
+ENTRY_END
+
+STEP 111 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA CD DO NOERROR
+SECTION QUESTION
+invboth.example.test. IN AAAA
+SECTION ANSWER
+SECTION AUTHORITY
+example.test. 3600 IN SOA ns.example.test. host.example.test. 20301 3600 1800 604800 3600
+example.test. 3600 IN RRSIG SOA 8 2 3600 20201116135527 20201019135527 55567 example.test. 2UUkScBAN37fJpSrelhE8DotKvmOzj3q9wicaanCIaCv95DE4nQnePih5B+ek3FIRjB/Uv2+z4Ro5Uxy94XAnlK0rCkDLSa0U9U7KP0ytc88sevO0x1SCPAMoZoJO6JqHkv42pdh54WSz+Zb/D8npY0j/tksHe/uX+VQnMymgb8= ;{id = 55567}
+invboth.example.test. 60 IN NSEC invboth2.example.test. A RRSIG NSEC
+invboth.example.test. 60 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 11567 example.test. w7oGj0Tb3o30iIknVEVToQ39DCQVUx9yV2mm1SkR4MBc4zj3eZRRoL40lHPrIndFRsrBxm7+pxdy29Nw+diWdQj5NnsEsPDSPRvkb04xaah22/zd7lmjLLx3qtFCZpEVbsLUGQAy546NmVlv65/TghlTFA3e6dOFtiwQhdWskyg= ;{id = 11567}
+ENTRY_END
+
+; hasaaaa.example.test.
+STEP 120 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+hasaaaa.example.test. IN AAAA
+ENTRY_END
+
+STEP 121 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA AD DO NOERROR
+SECTION QUESTION
+hasaaaa.example.test. IN AAAA
+SECTION ANSWER
+hasaaaa.example.test. 0 IN AAAA 2001::db8:5
+hasaaaa.example.test. 0 IN RRSIG AAAA 8 3 3600 20201116135527 20201019135527 55567 example.test. eat6Eh6Sqy9OE+BUIdUzzKuToqFn7K62oLbNUcj+JG/mlv85xeM3fKGbbwyR1mDbt/mghLfcchxWDoXtWJtYbItFVpRn4UyIuqK2w4igUb/Ic7iKoBJ4ZWlfYadE5MnAhVSQ094yAj3iUWydqQXVmTJ4UAJ3ouyzCJS8LojzZS8= ;{id = 55567}
+ENTRY_END
+
+; from cache
+STEP 130 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+hasaaaa.example.test. IN AAAA
+ENTRY_END
+
+STEP 131 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA AD DO NOERROR
+SECTION QUESTION
+hasaaaa.example.test. IN AAAA
+SECTION ANSWER
+hasaaaa.example.test. 0 IN AAAA 2001::db8:5
+hasaaaa.example.test. 0 IN RRSIG AAAA 8 3 3600 20201116135527 20201019135527 55567 example.test. eat6Eh6Sqy9OE+BUIdUzzKuToqFn7K62oLbNUcj+JG/mlv85xeM3fKGbbwyR1mDbt/mghLfcchxWDoXtWJtYbItFVpRn4UyIuqK2w4igUb/Ic7iKoBJ4ZWlfYadE5MnAhVSQ094yAj3iUWydqQXVmTJ4UAJ3ouyzCJS8LojzZS8= ;{id = 55567}
+ENTRY_END
+
+; with cd flag
+STEP 140 QUERY
+ENTRY_BEGIN
+REPLY RD CD DO
+SECTION QUESTION
+hasaaaa.example.test. IN AAAA
+ENTRY_END
+
+STEP 141 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA AD CD DO NOERROR
+SECTION QUESTION
+hasaaaa.example.test. IN AAAA
+SECTION ANSWER
+hasaaaa.example.test. 0 IN AAAA 2001::db8:5
+hasaaaa.example.test. 0 IN RRSIG AAAA 8 3 3600 20201116135527 20201019135527 55567 example.test. eat6Eh6Sqy9OE+BUIdUzzKuToqFn7K62oLbNUcj+JG/mlv85xeM3fKGbbwyR1mDbt/mghLfcchxWDoXtWJtYbItFVpRn4UyIuqK2w4igUb/Ic7iKoBJ4ZWlfYadE5MnAhVSQ094yAj3iUWydqQXVmTJ4UAJ3ouyzCJS8LojzZS8= ;{id = 55567}
+ENTRY_END
+
+SCENARIO_END
diff --git a/testdata/dns64_fwd_nocache.rpl b/testdata/dns64_fwd_nocache.rpl
new file mode 100644
index 000000000000..51ab74401de7
--- /dev/null
+++ b/testdata/dns64_fwd_nocache.rpl
@@ -0,0 +1,209 @@
+; config options go here.
+server:
+ target-fetch-policy: "0 0 0 0 0"
+ qname-minimisation: no
+ minimal-responses: yes
+ module-config: "dns64 iterator"
+ dns64-prefix: 64:ff9b::0/96
+forward-zone: name: "." forward-addr: 216.0.0.1
+ forward-no-cache: yes
+CONFIG_END
+
+SCENARIO_BEGIN Test DNS64 with forward zone with forward-no-cache set.
+RANGE_BEGIN 0 15
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. IN A 10.20.30.40
+ENTRY_END
+RANGE_END
+
+RANGE_BEGIN 15 25
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. IN A 10.20.30.41
+ENTRY_END
+RANGE_END
+
+RANGE_BEGIN 25 35
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+www2.example.com. IN A
+SECTION ANSWER
+www2.example.com. IN A 10.20.30.42
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+www2.example.com. IN AAAA
+SECTION ANSWER
+SECTION AUTHORITY
+example.com. 300 IN SOA ns.example.com. host.example.com. 5 86400 7200 604800 300
+ENTRY_END
+RANGE_END
+
+RANGE_BEGIN 35 45
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+www2.example.com. IN A
+SECTION ANSWER
+www2.example.com. IN A 10.20.30.43
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+www2.example.com. IN AAAA
+SECTION ANSWER
+SECTION AUTHORITY
+example.com. 300 IN SOA ns.example.com. host.example.com. 5 86400 7200 604800 300
+ENTRY_END
+RANGE_END
+
+RANGE_BEGIN 45 55
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+www3.example.com. IN AAAA
+SECTION ANSWER
+www3.example.com. 3600 IN AAAA 2001:db8::5
+ENTRY_END
+RANGE_END
+
+RANGE_BEGIN 55 65
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+www3.example.com. IN AAAA
+SECTION ANSWER
+www3.example.com. 3600 IN AAAA 2001:db8::6
+ENTRY_END
+RANGE_END
+
+; query for A record
+STEP 10 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www.example.com. IN A
+ENTRY_END
+STEP 11 CHECK_ANSWER
+ENTRY_BEGIN
+REPLY QR RD RA
+MATCH opcode qname qtype all
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. IN A 10.20.30.40
+ENTRY_END
+
+; the upstream has changed, ask for A record again
+STEP 20 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www.example.com. IN A
+ENTRY_END
+STEP 21 CHECK_ANSWER
+ENTRY_BEGIN
+REPLY QR RD RA
+MATCH opcode qname qtype all
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. IN A 10.20.30.41
+ENTRY_END
+
+; query for synthesized AAAA record
+STEP 30 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www2.example.com. IN AAAA
+ENTRY_END
+STEP 31 CHECK_ANSWER
+ENTRY_BEGIN
+REPLY QR RD RA
+MATCH opcode qname qtype all
+SECTION QUESTION
+www2.example.com. IN AAAA
+SECTION ANSWER
+www2.example.com. 3600 IN AAAA 64:ff9b::a14:1e2a
+ENTRY_END
+
+; the upstream has changed, query for synthesized AAAA again.
+STEP 40 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www2.example.com. IN AAAA
+ENTRY_END
+STEP 41 CHECK_ANSWER
+ENTRY_BEGIN
+REPLY QR RD RA
+MATCH opcode qname qtype all
+SECTION QUESTION
+www2.example.com. IN AAAA
+SECTION ANSWER
+www2.example.com. 3600 IN AAAA 64:ff9b::a14:1e2b
+ENTRY_END
+
+; query for AAAA record, that is present, no synthesis.
+STEP 50 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www3.example.com. IN AAAA
+ENTRY_END
+STEP 51 CHECK_ANSWER
+ENTRY_BEGIN
+REPLY QR RD RA
+MATCH opcode qname qtype all
+SECTION QUESTION
+www3.example.com. IN AAAA
+SECTION ANSWER
+www3.example.com. 3600 IN AAAA 2001:db8::5
+ENTRY_END
+
+; the upstream has changed, query for AAAA record again (no synthesis).
+STEP 60 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www3.example.com. IN AAAA
+ENTRY_END
+STEP 61 CHECK_ANSWER
+ENTRY_BEGIN
+REPLY QR RD RA
+MATCH opcode qname qtype all
+SECTION QUESTION
+www3.example.com. IN AAAA
+SECTION ANSWER
+www3.example.com. 3600 IN AAAA 2001:db8::6
+ENTRY_END
+
+SCENARIO_END
diff --git a/testdata/dns64_respip_bypass.rpl b/testdata/dns64_respip_bypass.rpl
new file mode 100644
index 000000000000..2c45d69e1f0e
--- /dev/null
+++ b/testdata/dns64_respip_bypass.rpl
@@ -0,0 +1,288 @@
+; config options
+server:
+ target-fetch-policy: "0 0 0 0 0"
+ qname-minimisation: no
+ minimal-responses: yes
+ log-servfail: yes
+ module-config: "dns64 respip iterator"
+ ; or
+ ; module-config: "respip dns64 iterator"
+ dns64-prefix: 64:ff9b::/96
+ ; possibly as well:
+ ; response-ip: 192.0.2.66/32 always_nxdomain
+
+rpz:
+ name: "rpz.example.com."
+ rpz-log: yes
+ rpz-log-name: "rpz.example.com"
+ zonefile:
+TEMPFILE_NAME rpz.example.com
+TEMPFILE_CONTENTS rpz.example.com
+$ORIGIN example.com.
+rpz 3600 IN SOA ns1.rpz.gotham.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.
+; block 192.0.2.66/32
+32.66.2.0.192.rpz-ip IN CNAME .
+TEMPFILE_END
+
+stub-zone:
+ name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Test RPZ filtered query with DNS64 enabled.
+
+; 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
+tld. IN NS
+SECTION AUTHORITY
+tld. IN NS ns.tld.
+SECTION ADDITIONAL
+ns.tld. IN A 1.2.3.5
+ENTRY_END
+RANGE_END
+
+; ns.tld
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.5
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+tld. IN NS
+SECTION ANSWER
+tld. IN NS ns.tld
+SECTION ADDITIONAL
+ns.tld. IN A 1.2.3.5
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.tld. IN A
+SECTION ANSWER
+ns.tld. IN A 1.2.3.5
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.tld. IN AAAA
+SECTION AUTHORITY
+tld. 3600 IN SOA ns.tld. host.tld. 20201 3600 1800 604800 3600
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+example.tld. IN NS
+SECTION AUTHORITY
+example.tld. 5 IN NS ns.example.tld.
+SECTION ADDITIONAL
+ns.example.tld. 5 IN A 1.2.3.4
+ENTRY_END
+RANGE_END
+
+; ns.example.tld.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.tld. IN NS
+SECTION ANSWER
+example.tld. 86400 IN NS ns.example.tld.
+SECTION ADDITIONAL
+ns.example.tld. 86400 IN A 1.2.3.4
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.example.tld. IN A
+SECTION ANSWER
+ns.example.tld. IN A 1.2.3.4
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.example.tld. IN AAAA
+SECTION AUTHORITY
+example.tld. 3600 IN SOA ns.example.tld. host.example.tld. 20301 3600 1800 604800 3600
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+bad.example.tld. IN A
+SECTION ANSWER
+bad.example.tld. IN A 192.0.2.66
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+bad.example.tld. IN AAAA
+SECTION AUTHORITY
+example.tld. 3600 IN SOA ns.example.tld. host.example.tld. 20301 3600 1800 604800 3600
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+synth.example.tld. IN A
+SECTION ANSWER
+synth.example.tld. IN A 203.0.113.5
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+synth.example.tld. IN AAAA
+SECTION AUTHORITY
+example.tld. 3600 IN SOA ns.example.tld. host.example.tld. 20301 3600 1800 604800 3600
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+clean.example.tld. IN A
+SECTION ANSWER
+clean.example.tld. IN A 203.0.113.5
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+clean.example.tld. IN AAAA
+SECTION AUTHORITY
+example.tld. 3600 IN SOA ns.example.tld. host.example.tld. 20301 3600 1800 604800 3600
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD NOERROR
+SECTION QUESTION
+bad.example.tld. IN A
+ENTRY_END
+
+; RPZ works on A query
+STEP 2 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NXDOMAIN
+SECTION QUESTION
+bad.example.tld. IN A
+SECTION ANSWER
+ENTRY_END
+
+STEP 10 QUERY
+ENTRY_BEGIN
+REPLY RD NOERROR
+SECTION QUESTION
+synth.example.tld. IN AAAA
+ENTRY_END
+
+; DNS64 synthesizes an unblocked address.
+STEP 11 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+synth.example.tld. IN AAAA
+SECTION ANSWER
+synth.example.tld. 3600 IN AAAA 64:ff9b::cb00:7105
+ENTRY_END
+
+STEP 20 QUERY
+ENTRY_BEGIN
+REPLY RD NOERROR
+SECTION QUESTION
+bad.example.tld. IN AAAA
+ENTRY_END
+
+; synthesized AAAA for A that is blocked by RPZ.
+STEP 21 CHECK_ANSWER
+;ENTRY_BEGIN
+;MATCH all
+;REPLY QR RD RA NXDOMAIN
+;SECTION QUESTION
+;bad.example.tld. IN AAAA
+;SECTION ANSWER
+;ENTRY_END
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+bad.example.tld. IN AAAA
+SECTION AUTHORITY
+example.tld. 3600 IN SOA ns.example.tld. host.example.tld. 20301 3600 1800 604800 3600
+ENTRY_END
+
+STEP 30 QUERY
+ENTRY_BEGIN
+REPLY RD NOERROR
+SECTION QUESTION
+bad.example.tld. IN AAAA
+ENTRY_END
+
+; same from cache.
+STEP 31 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+bad.example.tld. IN AAAA
+SECTION AUTHORITY
+example.tld. 3600 IN SOA ns.example.tld. host.example.tld. 20301 3600 1800 604800 3600
+ENTRY_END
+
+SCENARIO_END
diff --git a/testdata/edns_nsid_repeat.rpl b/testdata/edns_nsid_repeat.rpl
new file mode 100644
index 000000000000..ba222d71100e
--- /dev/null
+++ b/testdata/edns_nsid_repeat.rpl
@@ -0,0 +1,1202 @@
+; config options
+server:
+ target-fetch-policy: "0 0 0 0 0"
+ qname-minimisation: "no"
+ minimal-responses: yes
+ local-zone: test. nodefault
+ log-servfail: yes
+ module-config: "iterator"
+ # 60-byte NSID (120 hex chars)
+ nsid: "414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141"
+ answer-cookie: yes
+ cookie-secret: "000102030405060708090a0b0c0d0e0f"
+
+stub-zone:
+ name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Test EDNS NSID and COOKIE repeated options.
+
+; 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
+test. IN NS
+SECTION AUTHORITY
+test. IN NS ns.test.
+SECTION ADDITIONAL
+ns.test. IN A 1.2.3.5
+ENTRY_END
+RANGE_END
+
+; ns.test
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.5
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+test. IN NS
+SECTION ANSWER
+test. IN NS ns.test
+SECTION ADDITIONAL
+ns.test. IN A 1.2.3.5
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.test. IN A
+SECTION ANSWER
+ns.test. IN A 1.2.3.5
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.test. IN AAAA
+SECTION AUTHORITY
+test. 3600 IN SOA ns.test. host.test. 20201 3600 1800 604800 3600
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+example.test. IN NS
+SECTION AUTHORITY
+example.test. IN NS ns.example.test.
+SECTION ADDITIONAL
+ns.example.test. IN A 1.2.3.4
+ENTRY_END
+RANGE_END
+
+; ns.example.test.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.test. IN NS
+SECTION ANSWER
+example.test. IN NS ns.example.test.
+SECTION ADDITIONAL
+ns.example.test. IN A 1.2.3.4
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.example.test. IN A
+SECTION ANSWER
+ns.example.test. IN A 1.2.3.4
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.example.test. IN AAAA
+SECTION AUTHORITY
+example.test. 3600 IN SOA ns.example.test. host.example.test. 20301 3600 1800 604800 3600
+ENTRY_END
+
+; response to query of interest
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+www.example.test. IN A
+SECTION ANSWER
+www.example.test. IN A 10.20.30.40
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ww2.example.test. IN A
+SECTION ANSWER
+ww2.example.test. IN A 10.20.30.42
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+MATCH TCP
+HEX_ANSWER_BEGIN
+00 00 01 00 00 01 00 00 ;ID 0
+00 00 00 01 03 77 77 77 ; www.example.com A? (DO)
+07 65 78 61 6d 70 6c 65
+04 74 65 73 74 00
+00 01 00 01
+00 00 29 10 00 00 00 80 00
+10 04 ; EDNS rdata length 4100
+
+; EDNS rdata contents
+; 1025 x 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00
+HEX_ANSWER_END
+ENTRY_END
+
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+www.example.test. IN A
+SECTION ANSWER
+www.example.test. IN A 10.20.30.40
+SECTION ADDITIONAL
+HEX_EDNSDATA_BEGIN
+; There is one NSID option in the reply.
+00 03 00 3c
+414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141
+HEX_EDNSDATA_END
+ENTRY_END
+
+STEP 20 QUERY
+ENTRY_BEGIN
+MATCH TCP
+REPLY RD
+SECTION QUESTION
+ww2.example.test. IN A
+SECTION ADDITIONAL
+HEX_EDNSDATA_BEGIN
+; 2341 cookie options.
+; Opcode 10, Length 8, with cookie 0102030405060708.
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708 000a 0008 0102030405060708 000a 0008 0102030405060708
+000a 0008 0102030405060708
+HEX_EDNSDATA_END
+ENTRY_END
+
+; get a new COOKIE.
+STEP 30 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA DO NOERROR
+SECTION QUESTION
+ww2.example.test. IN A
+SECTION ANSWER
+ww2.example.test. IN A 10.20.30.42
+SECTION ADDITIONAL
+HEX_EDNSDATA_BEGIN
+000a 0018
+0102030405060708 0100000000000000 9FD0C29FDA3E95BE
+HEX_EDNSDATA_END
+ENTRY_END
+
+SCENARIO_END
diff --git a/testdata/errreport_agent_domain_len.rpl b/testdata/errreport_agent_domain_len.rpl
new file mode 100644
index 000000000000..9efdbb65914e
--- /dev/null
+++ b/testdata/errreport_agent_domain_len.rpl
@@ -0,0 +1,221 @@
+; Test DNS Error Reporting.
+
+server:
+ module-config: "validator iterator"
+ trust-anchor-signaling: no
+ target-fetch-policy: "0 0 0 0 0"
+ verbosity: 4
+ qname-minimisation: no
+ minimal-responses: no
+ rrset-roundrobin: no
+ trust-anchor: "test. DS 1444 8 2 8a87d067fd09a5965244fe2e317dd26d182c468e0a7f26ecc4c7b479bf89db9b"
+ val-override-date: "20201020135527"
+ ede: no # It is not needed for dns-error-reporting; only for clients to receive EDEs
+ dns-error-reporting: yes
+ do-ip6: no
+ local-zone: test. nodefault
+ log-servfail: yes
+
+stub-zone:
+ name: test
+ stub-addr: 1.2.3.5
+stub-zone:
+ name: an.agent
+ stub-addr: 0.0.0.2
+CONFIG_END
+
+SCENARIO_BEGIN Test DNS Error Reporting with agent domain len malformed.
+
+; ns.test
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.5
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+test. IN NS
+SECTION ANSWER
+test. IN NS ns.test
+test. 3600 IN RRSIG NS 8 1 3600 20201116135527 20201019135527 1444 test. RGCxIO32TbbLTk6xZmTr+fjYPH50hntBxeOQ2DIj2pDsmjALcHYtVkOfpfk2EhOhHZd+9PLuoJPbJh6a9NqLSFeBvr0XZoCZoQ2g0tCHUNHcH5EVjA2TuYBQem6DVYnPLJ3914aRx0uA1j42b8dC2xsam/XkOo7U+dLbUW2Os1s=
+SECTION ADDITIONAL
+ns.test. IN A 1.2.3.5
+ns.test. 3600 IN RRSIG A 8 2 3600 20201116135527 20201019135527 1444 test. GskCc4/k6GjH9V9Jz2V5L2XLiizbOeWkB0feSbf+aN859S3vxVvtuqkvIgwY4LafUO1QAn/pUcv9zA7rcFO++rlg+8t6gvZTo9p3v0bfeIv2uJDsfSBD5jDh0WXlxjekfnrKrQp7zE+GiA93tWwKUWKPvxXDgP+n886e6WcbHJw=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.test. IN A
+SECTION ANSWER
+ns.test. IN A 1.2.3.5
+ns.test. 3600 IN RRSIG A 8 2 3600 20201116135527 20201019135527 1444 test. GskCc4/k6GjH9V9Jz2V5L2XLiizbOeWkB0feSbf+aN859S3vxVvtuqkvIgwY4LafUO1QAn/pUcv9zA7rcFO++rlg+8t6gvZTo9p3v0bfeIv2uJDsfSBD5jDh0WXlxjekfnrKrQp7zE+GiA93tWwKUWKPvxXDgP+n886e6WcbHJw=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.test. IN AAAA
+SECTION AUTHORITY
+test. 3600 IN SOA ns.test. host.test. 20201 3600 1800 604800 3600
+test. 3600 IN RRSIG SOA 8 1 3600 20201116135527 20201019135527 1444 test. IZJIDmEgf0W7A5G7hvvZ2hUqJ9Trbv1/i7ySapDmPbYV9lVCmHHobySxO01yDhI2/Pvpsvxqrm1Tiv3BxH8uzZ4keKgiQjBsSy4htAsFct9I4E7ly2glPj/Fm3oun3PsjJDv5QYhx0KS7w4IQKU7Nc9pfJc92uoUI5bdoC1pRGw=
+ns.test. 3600 IN NSEC nz.test. A RRSIG
+ns.test. 3600 IN RRSIG NSEC 8 2 3600 20201116135527 20201019135527 1444 test. PElArVB3KPg8KHAP7lzcNbhFuXNxTsHNTn1dZVncB5qmWRdIaeKpaXDjpH0JSXMaelGFS+/QhuQ6Hmw9+4VyZFRqMzGhw4agUR/2bxABHcDIG4ZpUwyeSP61ATTfHUkQVxaH2wjCWI/tfmesdP2xVE4GXyUvCIBxU914MkZbULU=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+test. IN DNSKEY
+SECTION ANSWER
+test. 3600 IN DNSKEY 257 3 8 AwEAAbd9WqjzE2Pynz21OG5doSf9hFzMr5dhzz2waZ3vTa+0o5r7AjTAqmA1yH/B3+aAMihUm5ucZSfVqo7+kOaRE8yFj9aivOmA1n1+JLevJq/oyvQyjxQN2Qb89LyaNUT5oKZIiL+uyyhNW3KDR3SSbQ/GBwQNDHVcZi+JDR3RC0r7 ;{id = 1444 (ksk), size = 1024b}
+test. 3600 IN RRSIG DNSKEY 8 1 3600 20201116135527 20201019135527 1444 test. UmRMS4iG9NBBHZYOtpwFFcJgbEb5SfHSgHd9XRe/8pTWM31WSDayn5ViPOBMqI1T5TXg2amc13dDI574xIM2oKMus3b5cBW72jJLW13jprBtslO6P8BMWb4HNnvLrJtQjwf3ErRirtTxinLmywQtmyr1cdthyG3Gp4N7i90fHSc=
+SECTION ADDITIONAL
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qname qtype
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+example.test. IN DS
+SECTION ANSWER
+example.test. 3600 IN DS 55567 8 2 a2d578906330a10a57d40462257b6ce038bad3f7bf4a45c46c46086e20a94b39
+example.test. 3600 IN RRSIG DS 8 2 3600 20201116135527 20201019135527 1444 test. P7+FTYW2qHuJ4I1YbuvseEz5X1lOYAraGEHB3C5y0OOCQFmhmSiFRdquNi2NlpcS6FXLdsE0EU+Bo1+0atTG4EkMWXbpF21lrtbB51BdsnlX4Mzc/o375fvjiOMwmF6wPCUaOUN62jrVrhsE/hedaVyDphDToqL17ETohwgUO2I=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+example.test. IN NS
+SECTION AUTHORITY
+example.test. IN NS ns.example.test.
+example.test. 3600 IN DS 55567 8 2 a2d578906330a10a57d40462257b6ce038bad3f7bf4a45c46c46086e20a94b39
+example.test. 3600 IN RRSIG DS 8 2 3600 20201116135527 20201019135527 1444 test. P7+FTYW2qHuJ4I1YbuvseEz5X1lOYAraGEHB3C5y0OOCQFmhmSiFRdquNi2NlpcS6FXLdsE0EU+Bo1+0atTG4EkMWXbpF21lrtbB51BdsnlX4Mzc/o375fvjiOMwmF6wPCUaOUN62jrVrhsE/hedaVyDphDToqL17ETohwgUO2I=
+SECTION ADDITIONAL
+ns.example.test. IN A 1.2.3.4
+ENTRY_END
+RANGE_END
+
+; ns.example.test.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.test. IN NS
+SECTION ANSWER
+example.test. IN NS ns.example.test.
+example.test. 3600 IN RRSIG NS 8 2 3600 20201116135527 20201019135527 55567 example.test. l1JT0wMlK0YI7/CWHzexf/k0iafUhCgN+BdgjBXIRXmSQNf4HDTiAkbcWL2/15qtnp12nQy9JeiTdSQ3vtPoHAJX4C5uTWaze4ms+Wrrf+n92sLCjacP9x50uuicH3URT6cKb1QCAPwlvlWxIlZjAMYFScSns7+C441NMJT8aE4=
+SECTION ADDITIONAL
+ns.example.test. IN A 1.2.3.4
+ns.example.test. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55567 example.test. 2PWaVaccZFQgfPKXNsdEGYUVaashCAj1ZhBo9XRt5eQKUFvZcauBjMnXIuxZFyWeootn1fZGw6GuPI5W48Y0FDx38H6adprkFgQikso2Y64jDdDMWznSo38Z/XqP+U0+kq4vmwonvmEMpm7hKnNEXvhqGKyGzyBwb+CZVJ2L8Eo=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.example.test. IN A
+SECTION ANSWER
+ns.example.test. IN A 1.2.3.4
+ns.example.test. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55567 example.test. 2PWaVaccZFQgfPKXNsdEGYUVaashCAj1ZhBo9XRt5eQKUFvZcauBjMnXIuxZFyWeootn1fZGw6GuPI5W48Y0FDx38H6adprkFgQikso2Y64jDdDMWznSo38Z/XqP+U0+kq4vmwonvmEMpm7hKnNEXvhqGKyGzyBwb+CZVJ2L8Eo=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.example.test. IN AAAA
+SECTION AUTHORITY
+example.test. 3600 IN SOA ns.example.test. host.example.test. 20301 3600 1800 604800 3600
+example.test. 3600 IN RRSIG SOA 8 2 3600 20201116135527 20201019135527 55567 example.test. 2UUkScBAN37fJpSrelhE8DotKvmOzj3q9wicaanCIaCv95DE4nQnePih5B+ek3FIRjB/Uv2+z4Ro5Uxy94XAnlK0rCkDLSa0U9U7KP0ytc88sevO0x1SCPAMoZoJO6JqHkv42pdh54WSz+Zb/D8npY0j/tksHe/uX+VQnMymgb8=
+ns.example.test. 3600 IN NSEC nz.example.test. A RRSIG
+example.test. 3600 IN SOA ns.example.test. host.example.test. 20301 3600 1800 604800 3600
+ENTRY_END
+
+; response to DNSKEY priming query
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.test. IN DNSKEY
+SECTION ANSWER
+example.test. 3600 IN DNSKEY 257 3 8 AwEAAdug/L739i0mgN2nuK/bhxu3wFn5Ud9nK2+XUmZQlPUEZUC5YZvm1rfMmEWTGBn87fFxEu/kjFZHJ55JLzqsbbpVHLbmKCTT2gYR2FV2WDKROGKuYbVkJIXdKAjJ0ONuK507NinYvlWXIoxHn22KAWOd9wKgSTNHBlmGkX+ts3hh ;{id = 55567 (ksk), size = 1024b}
+example.test. 3600 IN RRSIG DNSKEY 8 2 3600 20201116135527 20201019135527 55567 example.test. IbWMC6quOuZFNPAVxQLqCJ9nLhindBo826rnLcg5yMgs9dGUSPOCXAfHTmbgJAUNs9HTFfrJWNvasnETs0UOpmEuifGwWdH1OlME7Gny4RL2QmITUFeMW81Jz1tiVQxFXl6yxT0jxOxvz+bqMHlrz+8IeWQXcO+GZTPu8ueq30g=
+ENTRY_END
+
+; response to query of interest
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+www.example.test. IN A
+SECTION ANSWER
+www.example.test. 3600 IN A 10.20.30.40
+; valid signature
+;www.example.test. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55567 example.test. OQEgDcpez8Bvdwd+hxA3v63FWJhutWkv9w+k+8RLcWv34WPhebsf7CBV74ggY2c+HafvYiuIFfhdF5CX28YQjxqWVzFgE6bEA6spPc6qdHiQaY/096/4SLCDcL+2EtOqcR/uZGj5uNhhaCJ9UjscBKfEZmHUOAMXKmjsvl0I/+I=
+; invalid: expired signature
+www.example.test. 3600 IN RRSIG A 8 3 3600 20200816135527 20200719135527 55567 example.test. DNM4PJALboBNDe5pJ2NScYqYYmmpq8E0NogjbDNithIcQ7HtzkssLIR46DiPb/B7QIhBRpfQ6sUwMb4l+NDhm82DxaecEwnAV6Y0zYK6dZ5jI7e8rDI2hkW/LO75qSZ8Y1I9pgX5uyeBCon42IVjc3vyYbRbFNv1xgJs5rk308U=
+SECTION ADDITIONAL
+HEX_EDNSDATA_BEGIN
+; This dns error reporting option is malformed, with garbage at end.
+ 00 12 ; opt-code (Report-Channel)
+ 00 28 ; opt-len 10 + 30
+ 02 61 6E 05 61 67 65 6E 74 00 ; an.agent.
+ ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ; 30 0xFF tail
+ ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
+HEX_EDNSDATA_END
+ENTRY_END
+RANGE_END
+
+; an.agent
+RANGE_BEGIN 10 20
+ ADDRESS 0.0.0.2
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+_er.1.www.example.test.7._er.an.agent. IN TXT
+SECTION ANSWER
+_er.1.www.example.test.7._er.an.agent. IN TXT "OK"
+ENTRY_END
+RANGE_END
+
+; Query again
+STEP 10 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www.example.test. IN A
+ENTRY_END
+
+; Check that validation failed
+; (a DNS Error Report query should have been generated)
+STEP 11 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA SERVFAIL
+SECTION QUESTION
+www.example.test. IN A
+ENTRY_END
+
+; answer the reporting agent reply.
+STEP 20 TRAFFIC
+
+SCENARIO_END
diff --git a/testdata/fast_reload_authdel.tdir/example.com.zone b/testdata/fast_reload_authdel.tdir/example.com.zone
new file mode 100644
index 000000000000..695eb1c32bd4
--- /dev/null
+++ b/testdata/fast_reload_authdel.tdir/example.com.zone
@@ -0,0 +1,3 @@
+example.com. IN SOA ns.example.com. hostmaster.example.com. 1 3600 900 86400 3600
+example.com. IN NS ns.example.net.
+www.example.com. IN A 1.2.3.4
diff --git a/testdata/fast_reload_authdel.tdir/fast_reload_authdel.conf b/testdata/fast_reload_authdel.tdir/fast_reload_authdel.conf
new file mode 100644
index 000000000000..1820eaa99565
--- /dev/null
+++ b/testdata/fast_reload_authdel.tdir/fast_reload_authdel.conf
@@ -0,0 +1,34 @@
+server:
+ verbosity: 7
+ # num-threads: 1
+ interface: 127.0.0.1
+ port: @PORT@
+ use-syslog: no
+ directory: ""
+ pidfile: "unbound.pid"
+ chroot: ""
+ username: ""
+ do-not-query-localhost: no
+ use-caps-for-id: no
+
+stub-zone:
+ name: "."
+ stub-addr: 127.0.0.1@@TOPORT@
+
+remote-control:
+ control-enable: yes
+ control-interface: @CONTROL_PATH@/controlpipe.@CONTROL_PID@
+ control-use-cert: no
+
+auth-zone:
+ name: "example.com"
+ for-upstream: yes
+ for-downstream: yes
+ allow-notify: notif.example.net
+ zonefile: "example.com.zone"
+ master: "127.0.0.1@@TOPORT@"
+auth-zone:
+ name: "example2.com"
+ for-upstream: yes
+ for-downstream: yes
+ master: prim.example.net
diff --git a/testdata/fast_reload_authdel.tdir/fast_reload_authdel.conf2 b/testdata/fast_reload_authdel.tdir/fast_reload_authdel.conf2
new file mode 100644
index 000000000000..aefde13c269c
--- /dev/null
+++ b/testdata/fast_reload_authdel.tdir/fast_reload_authdel.conf2
@@ -0,0 +1,24 @@
+server:
+ verbosity: 7
+ # num-threads: 1
+ interface: 127.0.0.1
+ port: @PORT@
+ use-syslog: no
+ directory: ""
+ pidfile: "unbound.pid"
+ chroot: ""
+ username: ""
+ do-not-query-localhost: no
+ use-caps-for-id: no
+
+stub-zone:
+ name: "."
+ stub-addr: 127.0.0.1@@TOPORT@
+
+remote-control:
+ control-enable: yes
+ control-interface: @CONTROL_PATH@/controlpipe.@CONTROL_PID@
+ control-use-cert: no
+
+# auth zone removed for example.com
+# auth zone removed for example2.com
diff --git a/testdata/fast_reload_authdel.tdir/fast_reload_authdel.dsc b/testdata/fast_reload_authdel.tdir/fast_reload_authdel.dsc
new file mode 100644
index 000000000000..ed53225a863c
--- /dev/null
+++ b/testdata/fast_reload_authdel.tdir/fast_reload_authdel.dsc
@@ -0,0 +1,16 @@
+BaseName: fast_reload_authdel
+Version: 1.0
+Description: Test fast_reload with auth zone delete of callbacks.
+CreationDate: Tue May 13 03:00:00 PM CEST 2026
+Maintainer: dr. W.C.A. Wijngaards
+Category:
+Component:
+CmdDepends:
+Depends:
+Help:
+Pre: fast_reload_authdel.pre
+Post: fast_reload_authdel.post
+Test: fast_reload_authdel.test
+AuxFiles:
+Passed:
+Failure:
diff --git a/testdata/fast_reload_authdel.tdir/fast_reload_authdel.post b/testdata/fast_reload_authdel.tdir/fast_reload_authdel.post
new file mode 100644
index 000000000000..46c34871fa1f
--- /dev/null
+++ b/testdata/fast_reload_authdel.tdir/fast_reload_authdel.post
@@ -0,0 +1,13 @@
+# #-- fast_reload_authdel.post --#
+# source the master var file when it's there
+[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master
+# source the test var file when it's there
+[ -f .tpkg.var.test ] && source .tpkg.var.test
+#
+# do your teardown here
+. ../common.sh
+kill_pid $FWD_PID
+kill_pid $UNBOUND_PID
+echo "> cat logfiles"
+cat fwd.log
+cat unbound.log
diff --git a/testdata/fast_reload_authdel.tdir/fast_reload_authdel.pre b/testdata/fast_reload_authdel.tdir/fast_reload_authdel.pre
new file mode 100644
index 000000000000..226f24d044cc
--- /dev/null
+++ b/testdata/fast_reload_authdel.tdir/fast_reload_authdel.pre
@@ -0,0 +1,46 @@
+# #-- fast_reload_authdel.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
+
+PRE="../.."
+. ../common.sh
+# if no threads; exit
+if grep -e "define HAVE_PTHREAD 1" -e "define HAVE_SOLARIS_THREADS 1" -e "define HAVE_WINDOWS_THREADS 1" $PRE/config.h; then
+ echo "have threads"
+else
+ skip_test "no threads"
+fi
+
+get_random_port 2
+UNBOUND_PORT=$RND_PORT
+FWD_PORT=$(($RND_PORT + 1))
+echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test
+echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test
+
+# start forwarder
+get_ldns_testns
+$LDNS_TESTNS -p $FWD_PORT fast_reload_authdel.testns >fwd.log 2>&1 &
+FWD_PID=$!
+echo "FWD_PID=$FWD_PID" >> .tpkg.var.test
+
+# make config files
+CONTROL_PATH=/tmp
+CONTROL_PID=$$
+sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' -e 's?@CONTROL_PATH\@?'$CONTROL_PATH'?' -e 's/@CONTROL_PID@/'$CONTROL_PID'/' < fast_reload_authdel.conf > ub.conf
+sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' -e 's?@CONTROL_PATH\@?'$CONTROL_PATH'?' -e 's/@CONTROL_PID@/'$CONTROL_PID'/' < fast_reload_authdel.conf2 > ub.conf2
+
+# make config file
+# 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
+echo "CONTROL_PATH=$CONTROL_PATH" >> .tpkg.var.test
+echo "CONTROL_PID=$CONTROL_PID" >> .tpkg.var.test
+
+cat .tpkg.var.test
+wait_ldns_testns_up fwd.log
+wait_unbound_up unbound.log
+
diff --git a/testdata/fast_reload_authdel.tdir/fast_reload_authdel.test b/testdata/fast_reload_authdel.tdir/fast_reload_authdel.test
new file mode 100644
index 000000000000..0a147c8ed28e
--- /dev/null
+++ b/testdata/fast_reload_authdel.tdir/fast_reload_authdel.test
@@ -0,0 +1,47 @@
+# #-- fast_reload_authdel.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="../.."
+# do the test
+
+# the upstream delays.
+# wait for the notify: probe of example to be in the middle of the callback,
+# and for the primary: probe of example2 to be in the middle of the callback.
+# And then fastreload to delete.
+
+echo "> wait for unbound to transfer"
+sleep 1
+
+mv ub.conf ub.conf.orig
+mv ub.conf2 ub.conf
+echo ""
+echo "> unbound-control fast_reload"
+$PRE/unbound-control -c ub.conf fast_reload +vv 2>&1 | tee output
+if test $? -ne 0; then
+ echo "wrong exit value."
+ exit 1
+else
+ echo "exit value: OK"
+fi
+
+sleep 1
+
+echo "> check log"
+if grep "removing xfr callback prim.example.net. A IN" unbound.log; then
+ echo "OK"
+else
+ echo "Not OK"
+ exit 1
+fi
+
+if grep "removing xfr callback notif.example.net. A IN" unbound.log; then
+ echo "OK"
+else
+ echo "Not OK"
+ exit 1
+fi
+
+exit 0
diff --git a/testdata/fast_reload_authdel.tdir/fast_reload_authdel.testns b/testdata/fast_reload_authdel.tdir/fast_reload_authdel.testns
new file mode 100644
index 000000000000..ba16798d1ded
--- /dev/null
+++ b/testdata/fast_reload_authdel.tdir/fast_reload_authdel.testns
@@ -0,0 +1,78 @@
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+example.com. IN SOA
+SECTION ANSWER
+example.com. IN SOA ns.example.com. hostmaster.example.com. 1 3600 900 86400 3600
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+example.com. IN AXFR
+SECTION ANSWER
+example.com. IN SOA ns.example.com. hostmaster.example.com. 1 3600 900 86400 3600
+example.com. IN NS ns.example.net.
+www.example.com. IN A 1.2.3.4
+example.com. IN SOA ns.example.com. hostmaster.example.com. 1 3600 900 86400 3600
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+example2.com. IN SOA
+SECTION ANSWER
+example2.com. IN SOA ns.example2.com. hostmaster.example2.com. 1 3600 900 86400 3600
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+example2.com. IN AXFR
+SECTION ANSWER
+example2.com. IN SOA ns.example2.com. hostmaster.example2.com. 1 3600 900 86400 3600
+example2.com. IN NS ns.example2.net.
+EXTRA_PACKET
+REPLY QR AA NOERROR
+; too slow
+ADJUST packet_sleep=5
+SECTION QUESTION
+example2.com. IN AXFR
+SECTION ANSWER
+extra.example2.com. IN A 1.2.3.5
+EXTRA_PACKET
+REPLY QR AA NOERROR
+SECTION QUESTION
+example2.com. IN AXFR
+SECTION ANSWER
+www.example2.com. IN A 1.2.3.4
+example2.com. IN SOA ns.example2.com. hostmaster.example2.com. 1 3600 900 86400 3600
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id sleep=5
+REPLY QR AA NOERROR
+SECTION QUESTION
+prim.example.net. IN A
+SECTION ANSWER
+prim.example.net. IN A 127.0.0.1
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id sleep=5
+REPLY QR AA NOERROR
+SECTION QUESTION
+notif.example.net. IN A
+SECTION ANSWER
+notif.example.net. IN A 127.0.0.1
+ENTRY_END
diff --git a/testdata/fill_reply_uninit.rpl b/testdata/fill_reply_uninit.rpl
new file mode 100644
index 000000000000..cda167cd5d76
--- /dev/null
+++ b/testdata/fill_reply_uninit.rpl
@@ -0,0 +1,265 @@
+; config options
+; The island of trust is at test.
+server:
+ trust-anchor: "test. DS 1444 8 2 8a87d067fd09a5965244fe2e317dd26d182c468e0a7f26ecc4c7b479bf89db9b"
+ val-override-date: "20201020135527"
+ target-fetch-policy: "0 0 0 0 0"
+ qname-minimisation: "no"
+ fake-sha1: yes
+ trust-anchor-signaling: no
+ minimal-responses: no
+ iter-scrub-promiscuous: no
+ aggressive-nsec: yes
+ local-zone: test. nodefault
+ log-servfail: yes
+
+stub-zone:
+ name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Test val fill reply for uninit copy.
+; Test DNSSEC validator additional section processing use of uninit data.
+
+; 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
+test. IN NS
+SECTION AUTHORITY
+test. IN NS ns.test.
+SECTION ADDITIONAL
+ns.test. IN A 1.2.3.5
+ENTRY_END
+RANGE_END
+
+; ns.test
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.5
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+test. IN NS
+SECTION ANSWER
+test. IN NS ns.test
+test. 3600 IN RRSIG NS 8 1 3600 20201116135527 20201019135527 1444 test. RGCxIO32TbbLTk6xZmTr+fjYPH50hntBxeOQ2DIj2pDsmjALcHYtVkOfpfk2EhOhHZd+9PLuoJPbJh6a9NqLSFeBvr0XZoCZoQ2g0tCHUNHcH5EVjA2TuYBQem6DVYnPLJ3914aRx0uA1j42b8dC2xsam/XkOo7U+dLbUW2Os1s=
+SECTION ADDITIONAL
+ns.test. IN A 1.2.3.5
+ns.test. 3600 IN RRSIG A 8 2 3600 20201116135527 20201019135527 1444 test. GskCc4/k6GjH9V9Jz2V5L2XLiizbOeWkB0feSbf+aN859S3vxVvtuqkvIgwY4LafUO1QAn/pUcv9zA7rcFO++rlg+8t6gvZTo9p3v0bfeIv2uJDsfSBD5jDh0WXlxjekfnrKrQp7zE+GiA93tWwKUWKPvxXDgP+n886e6WcbHJw=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.test. IN A
+SECTION ANSWER
+ns.test. IN A 1.2.3.5
+ns.test. 3600 IN RRSIG A 8 2 3600 20201116135527 20201019135527 1444 test. GskCc4/k6GjH9V9Jz2V5L2XLiizbOeWkB0feSbf+aN859S3vxVvtuqkvIgwY4LafUO1QAn/pUcv9zA7rcFO++rlg+8t6gvZTo9p3v0bfeIv2uJDsfSBD5jDh0WXlxjekfnrKrQp7zE+GiA93tWwKUWKPvxXDgP+n886e6WcbHJw=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.test. IN AAAA
+SECTION AUTHORITY
+test. 3600 IN SOA ns.test. host.test. 20201 3600 1800 604800 3600
+test. 3600 IN RRSIG SOA 8 1 3600 20201116135527 20201019135527 1444 test. IZJIDmEgf0W7A5G7hvvZ2hUqJ9Trbv1/i7ySapDmPbYV9lVCmHHobySxO01yDhI2/Pvpsvxqrm1Tiv3BxH8uzZ4keKgiQjBsSy4htAsFct9I4E7ly2glPj/Fm3oun3PsjJDv5QYhx0KS7w4IQKU7Nc9pfJc92uoUI5bdoC1pRGw=
+ns.test. 3600 IN NSEC nz.test. A RRSIG
+ns.test. 3600 IN RRSIG NSEC 8 2 3600 20201116135527 20201019135527 1444 test. PElArVB3KPg8KHAP7lzcNbhFuXNxTsHNTn1dZVncB5qmWRdIaeKpaXDjpH0JSXMaelGFS+/QhuQ6Hmw9+4VyZFRqMzGhw4agUR/2bxABHcDIG4ZpUwyeSP61ATTfHUkQVxaH2wjCWI/tfmesdP2xVE4GXyUvCIBxU914MkZbULU=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+test. IN DNSKEY
+SECTION ANSWER
+test. 3600 IN DNSKEY 257 3 8 AwEAAbd9WqjzE2Pynz21OG5doSf9hFzMr5dhzz2waZ3vTa+0o5r7AjTAqmA1yH/B3+aAMihUm5ucZSfVqo7+kOaRE8yFj9aivOmA1n1+JLevJq/oyvQyjxQN2Qb89LyaNUT5oKZIiL+uyyhNW3KDR3SSbQ/GBwQNDHVcZi+JDR3RC0r7 ;{id = 1444 (ksk), size = 1024b}
+test. 3600 IN RRSIG DNSKEY 8 1 3600 20201116135527 20201019135527 1444 test. UmRMS4iG9NBBHZYOtpwFFcJgbEb5SfHSgHd9XRe/8pTWM31WSDayn5ViPOBMqI1T5TXg2amc13dDI574xIM2oKMus3b5cBW72jJLW13jprBtslO6P8BMWb4HNnvLrJtQjwf3ErRirtTxinLmywQtmyr1cdthyG3Gp4N7i90fHSc=
+SECTION ADDITIONAL
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qname qtype
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+example.test. IN DS
+SECTION ANSWER
+example.test. 3600 IN DS 55567 8 2 a2d578906330a10a57d40462257b6ce038bad3f7bf4a45c46c46086e20a94b39
+example.test. 3600 IN RRSIG DS 8 2 3600 20201116135527 20201019135527 1444 test. P7+FTYW2qHuJ4I1YbuvseEz5X1lOYAraGEHB3C5y0OOCQFmhmSiFRdquNi2NlpcS6FXLdsE0EU+Bo1+0atTG4EkMWXbpF21lrtbB51BdsnlX4Mzc/o375fvjiOMwmF6wPCUaOUN62jrVrhsE/hedaVyDphDToqL17ETohwgUO2I=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+example.test. IN NS
+SECTION AUTHORITY
+example.test. IN NS ns.example.test.
+example.test. 3600 IN DS 55567 8 2 a2d578906330a10a57d40462257b6ce038bad3f7bf4a45c46c46086e20a94b39
+example.test. 3600 IN RRSIG DS 8 2 3600 20201116135527 20201019135527 1444 test. P7+FTYW2qHuJ4I1YbuvseEz5X1lOYAraGEHB3C5y0OOCQFmhmSiFRdquNi2NlpcS6FXLdsE0EU+Bo1+0atTG4EkMWXbpF21lrtbB51BdsnlX4Mzc/o375fvjiOMwmF6wPCUaOUN62jrVrhsE/hedaVyDphDToqL17ETohwgUO2I=
+SECTION ADDITIONAL
+ns.example.test. IN A 1.2.3.4
+ENTRY_END
+RANGE_END
+
+; ns.example.test.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.test. IN NS
+SECTION ANSWER
+example.test. IN NS ns.example.test.
+example.test. 3600 IN RRSIG NS 8 2 3600 20201116135527 20201019135527 55567 example.test. l1JT0wMlK0YI7/CWHzexf/k0iafUhCgN+BdgjBXIRXmSQNf4HDTiAkbcWL2/15qtnp12nQy9JeiTdSQ3vtPoHAJX4C5uTWaze4ms+Wrrf+n92sLCjacP9x50uuicH3URT6cKb1QCAPwlvlWxIlZjAMYFScSns7+C441NMJT8aE4=
+SECTION ADDITIONAL
+ns.example.test. IN A 1.2.3.4
+ns.example.test. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55567 example.test. 2PWaVaccZFQgfPKXNsdEGYUVaashCAj1ZhBo9XRt5eQKUFvZcauBjMnXIuxZFyWeootn1fZGw6GuPI5W48Y0FDx38H6adprkFgQikso2Y64jDdDMWznSo38Z/XqP+U0+kq4vmwonvmEMpm7hKnNEXvhqGKyGzyBwb+CZVJ2L8Eo=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.example.test. IN A
+SECTION ANSWER
+ns.example.test. IN A 1.2.3.4
+ns.example.test. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55567 example.test. 2PWaVaccZFQgfPKXNsdEGYUVaashCAj1ZhBo9XRt5eQKUFvZcauBjMnXIuxZFyWeootn1fZGw6GuPI5W48Y0FDx38H6adprkFgQikso2Y64jDdDMWznSo38Z/XqP+U0+kq4vmwonvmEMpm7hKnNEXvhqGKyGzyBwb+CZVJ2L8Eo=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.example.test. IN AAAA
+SECTION AUTHORITY
+example.test. 3600 IN SOA ns.example.test. host.example.test. 20301 3600 1800 604800 3600
+example.test. 3600 IN RRSIG SOA 8 2 3600 20201116135527 20201019135527 55567 example.test. 2UUkScBAN37fJpSrelhE8DotKvmOzj3q9wicaanCIaCv95DE4nQnePih5B+ek3FIRjB/Uv2+z4Ro5Uxy94XAnlK0rCkDLSa0U9U7KP0ytc88sevO0x1SCPAMoZoJO6JqHkv42pdh54WSz+Zb/D8npY0j/tksHe/uX+VQnMymgb8=
+ns.example.test. 3600 IN NSEC nz.example.test. A RRSIG
+example.test. 3600 IN SOA ns.example.test. host.example.test. 20301 3600 1800 604800 3600
+ENTRY_END
+
+; response to DNSKEY priming query
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.test. IN DNSKEY
+SECTION ANSWER
+example.test. 3600 IN DNSKEY 257 3 8 AwEAAdug/L739i0mgN2nuK/bhxu3wFn5Ud9nK2+XUmZQlPUEZUC5YZvm1rfMmEWTGBn87fFxEu/kjFZHJ55JLzqsbbpVHLbmKCTT2gYR2FV2WDKROGKuYbVkJIXdKAjJ0ONuK507NinYvlWXIoxHn22KAWOd9wKgSTNHBlmGkX+ts3hh ;{id = 55567 (ksk), size = 1024b}
+example.test. 3600 IN RRSIG DNSKEY 8 2 3600 20201116135527 20201019135527 55567 example.test. IbWMC6quOuZFNPAVxQLqCJ9nLhindBo826rnLcg5yMgs9dGUSPOCXAfHTmbgJAUNs9HTFfrJWNvasnETs0UOpmEuifGwWdH1OlME7Gny4RL2QmITUFeMW81Jz1tiVQxFXl6yxT0jxOxvz+bqMHlrz+8IeWQXcO+GZTPu8ueq30g=
+ENTRY_END
+
+; response to query of interest
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+a.d.example.test. IN MX
+SECTION ANSWER
+d.example.test. 3600 IN DNAME tgt.example.test.
+d.example.test. 3600 IN RRSIG DNAME 8 3 3600 20201116135527 20201019135527 55567 example.test. EGpXUnJuzkETAO2OWyZDrTeInnyxF7CXPXGDfFt2x3CBUeckUUZcgQQ3yMh+BATKph2nOhBfk8klvZ35C9sQO7Z32REAnqGjpHiR86xRPYxG62Nk9kXv1Odeh/adz2QhB93N8U7W57FM0P/VQDkP0GQXTSRGTuj+7ihfYVd4HWI=
+a.d.example.test. 3600 IN CNAME a.tgt.example.test.
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+a.tgt.example.test. IN MX
+SECTION ANSWER
+a.tgt.example.test. 3600 IN CNAME b.d.example.test.
+a.tgt.example.test. 3600 IN RRSIG CNAME 8 4 3600 20201116135527 20201019135527 55567 example.test. XHYWSHIm9J8j8T1qMh1tHZS71UguXYUVescKPFtoGHRuyRhHNob+NAqdn3I4/+8HSSGrJDqhTX/Vo3rcc3/g5HOHScwzZByB/diyJWpG9IA7pm7c7FnHnHpGBVdHq9wXlkgCPiaJShpE1zg1nNy3p99ca9/wh4y9XWSfcl0L8aw=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+b.d.example.test. IN MX
+SECTION ANSWER
+b.d.example.test. 3600 IN CNAME c.d.example.test.
+; (unsigned - no RRSIG)
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+c.d.example.test. IN MX
+SECTION ANSWER
+c.d.example.test. 3600 IN CNAME evil.example.test.
+; (unsigned - no RRSIG)
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+evil.example.test. IN MX
+SECTION ANSWER
+evil.example.test. 3600 IN MX 10 mail.example.test.
+evil.example.test. 3600 IN RRSIG MX 8 3 3600 20201116135527 20201019135527 55567 example.test. ddinUzYoxk5OLUFBVdfFqyz39P6Z+VfQciTRC2EmEl+tbD/oJGFaEEnoU2eZil7E/kOygTFwFShDrmCYUq9W3DTpDKSaj1ci2Wze1E9zwOZguSwevAtw7qEenQei2TgPWrH39OlOwcW31Siqm9RDfX9eTRW72L1qYvqXnkTIctU=
+SECTION AUTHORITY
+evil.example.test. 3600 IN NSEC evil.example.test. MX RRSIG
+; (unsigned)
+SECTION ADDITIONAL
+mail.example.test. 3600 IN A 192.0.2.10
+mail.example.test. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55567 example.test. JYvTCMU4isgSHS7R0tGUE+3i0FdPvKFENylO8bSuDzYr2iR8Ac6CFq8OepOYn4QUp73CL7QHho2Zy6Hxn4FK/5ryynGc3IjP9gvpV1YZ54TPKmvJkhWasRoALdrPqaWKS3i2Jyr6LeGgwc7Tlntc5ZwEdr4rOAJ0MgVpPpUxjnk=
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+a.d.example.test. IN MX
+ENTRY_END
+
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA DO SERVFAIL
+SECTION QUESTION
+a.d.example.test. IN MX
+SECTION ANSWER
+; The reply is bogus due to the 'NSEC' rrset missing signatures.
+ENTRY_END
+
+SCENARIO_END
diff --git a/testdata/ghost_glue_a.rpl b/testdata/ghost_glue_a.rpl
new file mode 100644
index 000000000000..5468ab842ff1
--- /dev/null
+++ b/testdata/ghost_glue_a.rpl
@@ -0,0 +1,365 @@
+; config options
+; The island of trust is at test.
+server:
+ target-fetch-policy: "0 0 0 0 0"
+ qname-minimisation: no
+ minimal-responses: yes
+ iter-scrub-promiscuous: yes
+ aggressive-nsec: no
+ local-zone: test. nodefault
+ log-servfail: yes
+ module-config: "iterator"
+
+stub-zone:
+ name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Test ghost domain glue TTL extension
+; for A and AAAA records.
+
+; 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
+test. IN NS
+SECTION AUTHORITY
+test. IN NS ns.test.
+SECTION ADDITIONAL
+ns.test. IN A 1.2.3.5
+ENTRY_END
+RANGE_END
+
+; ns.test
+RANGE_BEGIN 0 20
+ ADDRESS 1.2.3.5
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+test. IN NS
+SECTION ANSWER
+test. IN NS ns.test
+SECTION ADDITIONAL
+ns.test. IN A 1.2.3.5
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.test. IN A
+SECTION ANSWER
+ns.test. IN A 1.2.3.5
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.test. IN AAAA
+SECTION AUTHORITY
+test. 3600 IN SOA ns.test. host.test. 20201 3600 1800 604800 3600
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+example.test. IN NS
+SECTION AUTHORITY
+example.test. 4 IN NS ns.example.test.
+SECTION ADDITIONAL
+ns.example.test. 4 IN A 1.2.3.4
+ENTRY_END
+RANGE_END
+
+; ns.test
+RANGE_BEGIN 25 100
+ ADDRESS 1.2.3.5
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+test. IN NS
+SECTION ANSWER
+test. IN NS ns.test
+SECTION ADDITIONAL
+ns.test. IN A 1.2.3.5
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.test. IN A
+SECTION ANSWER
+ns.test. IN A 1.2.3.5
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.test. IN AAAA
+SECTION AUTHORITY
+test. 3600 IN SOA ns.test. host.test. 20201 3600 1800 604800 3600
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+example.test. IN NS
+SECTION AUTHORITY
+example.test. 4 IN NS ns.example.test.
+SECTION ADDITIONAL
+ns.example.test. 4 IN A 1.2.3.7
+ENTRY_END
+RANGE_END
+
+; ns.example.test.
+RANGE_BEGIN 0 20
+ ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.test. IN NS
+SECTION ANSWER
+example.test. 7200 IN NS ns.example.test.
+SECTION ADDITIONAL
+ns.example.test. 7200 IN A 1.2.3.4
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.example.test. IN A
+SECTION ANSWER
+ns.example.test. 7200 IN A 1.2.3.4
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.example.test. IN AAAA
+SECTION AUTHORITY
+example.test. 3600 IN SOA ns.example.test. host.example.test. 20301 3600 1800 604800 3600
+ENTRY_END
+
+; response to query of interest
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+www.example.test. IN A
+SECTION ANSWER
+www.example.test. 1 IN A 192.0.2.1
+ENTRY_END
+RANGE_END
+
+; ns.example.test.
+; after the delegation change, the old hoster.
+RANGE_BEGIN 20 100
+ ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+www3.example.test. IN A
+SECTION ANSWER
+www3.example.test. IN A 10.20.30.46
+ENTRY_END
+RANGE_END
+
+; ns.example.test.
+; the new hoster
+RANGE_BEGIN 20 100
+ ADDRESS 1.2.3.7
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.example.test. IN A
+SECTION ANSWER
+ns.example.test. IN A 1.2.3.7
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.example.test. IN AAAA
+SECTION AUTHORITY
+example.test. 3600 IN SOA ns.example.test. host.example.test. 20301 3600 1800 604800 3600
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+www2.example.test. IN A
+SECTION ANSWER
+www2.example.test. IN A 10.20.30.47
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA SERVFAIL
+SECTION QUESTION
+www3.example.test. IN A
+SECTION ANSWER
+ENTRY_END
+RANGE_END
+
+; The TTL of the NS and glue is 4 for example.test.
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+www.example.test. IN A
+ENTRY_END
+
+STEP 2 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all ttl
+REPLY QR RD RA DO NOERROR
+SECTION QUESTION
+www.example.test. IN A
+SECTION ANSWER
+www.example.test. 1 IN A 192.0.2.1
+ENTRY_END
+
+; query for the NS record
+STEP 8 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+example.test. IN NS
+ENTRY_END
+
+STEP 9 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all ttl
+REPLY QR RD RA DO NOERROR
+SECTION QUESTION
+example.test. IN NS
+SECTION ANSWER
+example.test. 7200 IN NS ns.example.test.
+SECTION ADDITIONAL
+ns.example.test. 4 IN A 1.2.3.4
+ENTRY_END
+
+; query for glue specifically
+STEP 10 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+ns.example.test. IN A
+ENTRY_END
+
+STEP 11 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all ttl
+REPLY QR RD RA DO NOERROR
+SECTION QUESTION
+ns.example.test. IN A
+SECTION ANSWER
+ns.example.test. 7200 IN A 1.2.3.4
+ENTRY_END
+
+; query for glue from cache again
+STEP 12 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+ns.example.test. IN A
+ENTRY_END
+
+STEP 13 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all ttl
+REPLY QR RD RA DO NOERROR
+SECTION QUESTION
+ns.example.test. IN A
+SECTION ANSWER
+ns.example.test. 4 IN A 1.2.3.4
+ENTRY_END
+
+; Move time to expire the delegation
+STEP 20 TIME_PASSES ELAPSE 6
+
+; The upstream changes to delegate to another server.
+STEP 30 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+www2.example.test. IN A
+ENTRY_END
+
+STEP 31 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all ttl
+REPLY QR RD RA DO NOERROR
+SECTION QUESTION
+www2.example.test. IN A
+SECTION ANSWER
+www2.example.test. IN A 10.20.30.47
+ENTRY_END
+
+; the new server, 1.2.3.7 is not responsive (SERVFAILs), it
+; should not have the old one 1.2.3.4 now.
+STEP 40 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+www3.example.test. IN A
+ENTRY_END
+
+STEP 50 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all ttl
+REPLY QR RD RA DO SERVFAIL
+SECTION QUESTION
+www3.example.test. IN A
+SECTION ANSWER
+ENTRY_END
+
+
+SCENARIO_END
diff --git a/testdata/ipsecmod_hook.sh b/testdata/ipsecmod_hook.sh
index a418cb591fc3..e10c17806609 100755
--- a/testdata/ipsecmod_hook.sh
+++ b/testdata/ipsecmod_hook.sh
@@ -1,2 +1,3 @@
+#!/bin/sh
echo " ---[ IPsec external hook FAIL; only care if ipsecmod-strict: yes ]---"
exit 1
diff --git a/testdata/iter_class_any_merge.rpl b/testdata/iter_class_any_merge.rpl
new file mode 100644
index 000000000000..19ad5d2bc12b
--- /dev/null
+++ b/testdata/iter_class_any_merge.rpl
@@ -0,0 +1,195 @@
+; 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
+ minimal-responses: no
+ iter-scrub-promiscuous: no
+ root-hints:
+TEMPFILE_NAME class_in.hints
+TEMPFILE_CONTENTS class_in.hints
+; hints for dns CLASS IN
+. 3600 NS k.root-servers.net.
+k.root-servers.net. 3600 IN A 193.0.14.129
+TEMPFILE_END
+
+ root-hints:
+TEMPFILE_NAME class_ch.hints
+TEMPFILE_CONTENTS class_ch.hints
+; hints for dns CLASS CH
+. 3600 CH NS ns.ch.test.
+ns.ch.test. 3600 CH A 1.2.3.5
+TEMPFILE_END
+
+CONFIG_END
+
+SCENARIO_BEGIN Test lookup of class any responses from several classes.
+; It merges the responses.
+
+; 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 qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION AUTHORITY
+com. IN NS a.gtld-servers.net.
+SECTION ADDITIONAL
+a.gtld-servers.net. IN A 192.5.6.30
+ENTRY_END
+RANGE_END
+
+; a.gtld-servers.net.
+RANGE_BEGIN 0 100
+ ADDRESS 192.5.6.30
+ENTRY_BEGIN
+MATCH opcode qtype qname
+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 qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+RANGE_END
+
+; ns.example.com.
+RANGE_BEGIN 0 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 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
+
+; 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.ch.test.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.5
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+. CH NS
+SECTION ANSWER
+. CH NS ns.ch.test.
+SECTION ADDITIONAL
+ns.ch.test. CH A 1.2.3.5
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.example.com. CH A
+SECTION ANSWER
+www.example.com. CH A 3.4.5.6
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+www.example.com. ANY A
+ENTRY_END
+
+; recursion happens here.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA DO NOERROR
+SECTION QUESTION
+www.example.com. ANY A
+SECTION ANSWER
+www.example.com. CH A 3.4.5.6
+www.example.com. IN A 10.20.30.40
+www.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFC99iE9K5y2WNgI0gFvBWaTi9wm6AhUAoUqOpDtG5Zct+Qr9F3mSdnbc6V4= ;{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 20070926134150 20070829134150 2854 example.com. MC0CFQCQMyTjn7WWwpwAR1LlVeLpRgZGuQIUCcJDEkwAuzytTDRlYK7nIMwH1CM= ;{id = 2854}
+ENTRY_END
+
+SCENARIO_END
diff --git a/testdata/iter_class_mixreferral.rpl b/testdata/iter_class_mixreferral.rpl
new file mode 100644
index 000000000000..2438825b4540
--- /dev/null
+++ b/testdata/iter_class_mixreferral.rpl
@@ -0,0 +1,144 @@
+; config options
+server:
+ target-fetch-policy: "0 0 0 0 0"
+ qname-minimisation: "no"
+ minimal-responses: no
+ iter-scrub-promiscuous: no
+
+stub-zone:
+ name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Test referral with mixed class items
+
+; 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 qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION AUTHORITY
+com. IN NS a.gtld-servers.net.
+SECTION ADDITIONAL
+a.gtld-servers.net. IN A 192.5.6.30
+ENTRY_END
+RANGE_END
+
+; a.gtld-servers.net.
+RANGE_BEGIN 0 100
+ ADDRESS 192.5.6.30
+ENTRY_BEGIN
+MATCH opcode qtype qname
+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
+; mixed class contents
+example.com. CH NS ch.example.com.
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ch.example.com. CH A 1.2.3.5
+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.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. IN A 10.20.30.40
+ENTRY_END
+RANGE_END
+
+; ch.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.5
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.com. IN NS
+SECTION ANSWER
+example.com. IN NS ch.example.com.
+SECTION ADDITIONAL
+ch.example.com. IN A 1.2.3.5
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. IN A 10.20.30.42
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www.example.com. IN A
+ENTRY_END
+
+; recursion happens here.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. IN A 10.20.30.40
+ENTRY_END
+
+SCENARIO_END
diff --git a/testdata/iter_dname_ttl0_grace.rpl b/testdata/iter_dname_ttl0_grace.rpl
new file mode 100644
index 000000000000..b6b28ff7c431
--- /dev/null
+++ b/testdata/iter_dname_ttl0_grace.rpl
@@ -0,0 +1,378 @@
+; config options
+; Test DNAME TTL=0 grace period: synthesis from cache within 1 second
+; Island of trust at example.com, DNSSEC signed DNAME with TTL=0 (RFC 2308)
+server:
+ trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b"
+ trust-anchor: "example.net. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b}"
+ 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 DNAME TTL=0 and the grace period
+; the grace period ends, and new data appears, while traffic queries the
+; store DNAME record, for synthesis.
+
+; 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 A
+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 qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+net. IN NS
+SECTION ANSWER
+net. 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 A
+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. - DNAME with TTL=0 (RRSIG Original TTL=0)
+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 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
+
+; DNAME with TTL=0, RRSIG Original TTL=0 (signed with ldns-signzone)
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+foo.test-dname.example.com. IN A
+SECTION ANSWER
+test-dname.example.com. 0 IN DNAME example.net.
+test-dname.example.com. 0 IN RRSIG DNAME 3 3 0 20070926135752 20070829135752 2854 example.com. ADRb2Jl5SCTF2a9/5QFOCfwFzh4Cpt90pJptwrKc+vBHnlivGyPShrU=
+foo.test-dname.example.com. 0 IN CNAME foo.example.net.
+ENTRY_END
+
+RANGE_END
+
+; ns.example.net.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.5
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.net. IN NS
+SECTION ANSWER
+example.net. IN NS ns.example.net.
+example.net. 3600 IN RRSIG NS RSASHA1 2 3600 20070926134150 20070829134150 30899 example.net. E8JX0l4B+cSR5bkHQwOJy1pBmlLMTYCJ8EwfNMU/eCv0YhKwo26rHhn52FGisgv+Nwp7/NbhHqQ+kJgoZC94XA== ;{id = 30899}
+SECTION ADDITIONAL
+ns.example.net. IN A 1.2.3.5
+ns.example.net. 3600 IN RRSIG A RSASHA1 3 3600 20070926134150 20070829134150 30899 example.net. x+tQMC9FhzT7Fcy1pM5NrOC7E8nLd7THPI3C6ie4EwL8PrxllqlR3q/DKB0d/m0qCOPcgN6HFOYURV1s4uAcsw== ;{id = 30899}
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.net. IN DNSKEY
+SECTION ANSWER
+example.net. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b}
+example.net. 3600 IN RRSIG DNSKEY RSASHA1 2 3600 20070926134150 20070829134150 30899 example.net. hiFzlQ8VoYgCuvIsfVuxC3mfJDqsTh0yc6abs5xMx5uEcIjb0dndFQx7INOM+imlzveEN73Hqp4OLFpFhsWLlw== ;{id = 30899}
+SECTION AUTHORITY
+example.net. IN NS ns.example.net.
+example.net. 3600 IN RRSIG NS RSASHA1 2 3600 20070926134150 20070829134150 30899 example.net. E8JX0l4B+cSR5bkHQwOJy1pBmlLMTYCJ8EwfNMU/eCv0YhKwo26rHhn52FGisgv+Nwp7/NbhHqQ+kJgoZC94XA== ;{id = 30899}
+SECTION ADDITIONAL
+ns.example.net. IN A 1.2.3.5
+ns.example.net. 3600 IN RRSIG A RSASHA1 3 3600 20070926134150 20070829134150 30899 example.net. x+tQMC9FhzT7Fcy1pM5NrOC7E8nLd7THPI3C6ie4EwL8PrxllqlR3q/DKB0d/m0qCOPcgN6HFOYURV1s4uAcsw== ;{id = 30899}
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+foo.example.net. IN A
+SECTION ANSWER
+foo.example.net. IN A 11.12.13.15
+foo.example.net. 3600 IN RRSIG A 5 3 3600 20070926134150 20070829134150 30899 example.net. X6T6SE9UzxAD/4zKpwGOxEDyE4g7lfYYw3lvw533uwRN8mWTcBvSva0/jjyhrogJcuLO32jPHK6zGb93w2xnuA==
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+foo2.example.net. IN A
+SECTION ANSWER
+foo2.example.net. IN A 11.12.13.16
+foo2.example.net. 3600 IN RRSIG A 5 3 3600 20070926134150 20070829134150 30899 example.net. BZm+GljD8m9N+pNJN8D+LlSyHqM+InNUe0+heKILR9be+Goqv6SEb7LKtX6+kj3239Y5by7u+/Cuk8kkWistEQ==
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+RANGE_END
+
+; ns.example.com. - it has retracted the DNAME
+RANGE_BEGIN 100 200
+ ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+foo2.test-dname.example.com. IN A
+SECTION ANSWER
+foo2.test-dname.example.com. 3600 IN A 10.20.30.40
+foo2.test-dname.example.com. 3600 IN RRSIG A 3 4 3600 20070926135752 20070829135752 2854 example.com. AI9LJPn/HKBYnuSTnK3Pv9eV+m3aYOa6ogB/jtUoWASLmYHXuetNFGw=
+ENTRY_END
+RANGE_END
+
+STEP 1 TIME_PASSES ELAPSE 10
+; First query: get DNAME TTL=0 into cache
+STEP 10 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+foo.test-dname.example.com. IN A
+ENTRY_END
+
+STEP 20 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all ttl
+REPLY QR RD RA AD DO NOERROR
+SECTION QUESTION
+foo.test-dname.example.com. IN A
+SECTION ANSWER
+test-dname.example.com. 0 IN DNAME example.net.
+test-dname.example.com. 0 IN RRSIG DNAME 3 3 0 20070926135752 20070829135752 2854 example.com. ADRb2Jl5SCTF2a9/5QFOCfwFzh4Cpt90pJptwrKc+vBHnlivGyPShrU=
+foo.test-dname.example.com. 0 IN CNAME foo.example.net.
+foo.example.net. IN A 11.12.13.15
+foo.example.net. 3600 IN RRSIG A 5 3 3600 20070926134150 20070829134150 30899 example.net. X6T6SE9UzxAD/4zKpwGOxEDyE4g7lfYYw3lvw533uwRN8mWTcBvSva0/jjyhrogJcuLO32jPHK6zGb93w2xnuA==
+ENTRY_END
+
+STEP 29 TIME_PASSES ELAPSE 0.1
+
+; Second query: within grace period (TIME_PASSES above)
+; With cache grace: synthesis from cached TTL=0 DNAME
+STEP 30 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+foo2.test-dname.example.com. IN A
+ENTRY_END
+
+; foo2.test-dname.example.com is not answered upstream
+; so this reply is synthesized by the cached (1 second grace period) DNAME
+STEP 40 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all ttl
+REPLY QR RD RA AD DO NOERROR
+SECTION QUESTION
+foo2.test-dname.example.com. IN A
+SECTION ANSWER
+test-dname.example.com. 0 IN DNAME example.net.
+test-dname.example.com. 0 IN RRSIG DNAME 3 3 0 20070926135752 20070829135752 2854 example.com. ADRb2Jl5SCTF2a9/5QFOCfwFzh4Cpt90pJptwrKc+vBHnlivGyPShrU=
+foo2.test-dname.example.com. 0 IN CNAME foo2.example.net.
+foo2.example.net. 3600 IN A 11.12.13.16
+foo2.example.net. 3600 IN RRSIG A 5 3 3600 20070926134150 20070829134150 30899 example.net. BZm+GljD8m9N+pNJN8D+LlSyHqM+InNUe0+heKILR9be+Goqv6SEb7LKtX6+kj3239Y5by7u+/Cuk8kkWistEQ==
+ENTRY_END
+
+STEP 45 TIME_PASSES ELAPSE 0.2
+
+STEP 46 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+foo2.test-dname.example.com. IN A
+ENTRY_END
+
+STEP 47 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all ttl
+REPLY QR RD RA AD DO NOERROR
+SECTION QUESTION
+foo2.test-dname.example.com. IN A
+SECTION ANSWER
+test-dname.example.com. 0 IN DNAME example.net.
+test-dname.example.com. 0 IN RRSIG DNAME 3 3 0 20070926135752 20070829135752 2854 example.com. ADRb2Jl5SCTF2a9/5QFOCfwFzh4Cpt90pJptwrKc+vBHnlivGyPShrU=
+foo2.test-dname.example.com. 0 IN CNAME foo2.example.net.
+foo2.example.net. 3600 IN A 11.12.13.16
+foo2.example.net. 3600 IN RRSIG A 5 3 3600 20070926134150 20070829134150 30899 example.net. BZm+GljD8m9N+pNJN8D+LlSyHqM+InNUe0+heKILR9be+Goqv6SEb7LKtX6+kj3239Y5by7u+/Cuk8kkWistEQ==
+ENTRY_END
+
+STEP 50 TIME_PASSES ELAPSE 0.5
+
+STEP 51 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+foo2.test-dname.example.com. IN A
+ENTRY_END
+
+STEP 52 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all ttl
+REPLY QR RD RA AD DO NOERROR
+SECTION QUESTION
+foo2.test-dname.example.com. IN A
+SECTION ANSWER
+test-dname.example.com. 0 IN DNAME example.net.
+test-dname.example.com. 0 IN RRSIG DNAME 3 3 0 20070926135752 20070829135752 2854 example.com. ADRb2Jl5SCTF2a9/5QFOCfwFzh4Cpt90pJptwrKc+vBHnlivGyPShrU=
+foo2.test-dname.example.com. 0 IN CNAME foo2.example.net.
+foo2.example.net. 3600 IN A 11.12.13.16
+foo2.example.net. 3600 IN RRSIG A 5 3 3600 20070926134150 20070829134150 30899 example.net. BZm+GljD8m9N+pNJN8D+LlSyHqM+InNUe0+heKILR9be+Goqv6SEb7LKtX6+kj3239Y5by7u+/Cuk8kkWistEQ==
+ENTRY_END
+
+STEP 55 TIME_PASSES ELAPSE 0.5
+
+STEP 56 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+foo2.test-dname.example.com. IN A
+ENTRY_END
+
+STEP 57 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all ttl
+REPLY QR RD RA AD DO NOERROR
+SECTION QUESTION
+foo2.test-dname.example.com. IN A
+SECTION ANSWER
+test-dname.example.com. 0 IN DNAME example.net.
+test-dname.example.com. 0 IN RRSIG DNAME 3 3 0 20070926135752 20070829135752 2854 example.com. ADRb2Jl5SCTF2a9/5QFOCfwFzh4Cpt90pJptwrKc+vBHnlivGyPShrU=
+foo2.test-dname.example.com. 0 IN CNAME foo2.example.net.
+foo2.example.net. 3599 IN A 11.12.13.16
+foo2.example.net. 3599 IN RRSIG A 5 3 3600 20070926134150 20070829134150 30899 example.net. BZm+GljD8m9N+pNJN8D+LlSyHqM+InNUe0+heKILR9be+Goqv6SEb7LKtX6+kj3239Y5by7u+/Cuk8kkWistEQ==
+ENTRY_END
+
+; upstream has new DNAME record to check.
+STEP 110 TIME_PASSES ELAPSE 0.8
+
+STEP 111 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+foo2.test-dname.example.com. IN A
+ENTRY_END
+
+STEP 112 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all ttl
+REPLY QR RD RA AD DO NOERROR
+SECTION QUESTION
+foo2.test-dname.example.com. IN A
+SECTION ANSWER
+foo2.test-dname.example.com. 3600 IN A 10.20.30.40
+foo2.test-dname.example.com. 3600 IN RRSIG A 3 4 3600 20070926135752 20070829135752 2854 example.com. AI9LJPn/HKBYnuSTnK3Pv9eV+m3aYOa6ogB/jtUoWASLmYHXuetNFGw=
+ENTRY_END
+SCENARIO_END
diff --git a/testdata/iter_ghost_ns_childapex.rpl b/testdata/iter_ghost_ns_childapex.rpl
new file mode 100644
index 000000000000..2b046a86cac5
--- /dev/null
+++ b/testdata/iter_ghost_ns_childapex.rpl
@@ -0,0 +1,299 @@
+; config options
+server:
+ target-fetch-policy: "0 0 0 0 0"
+ qname-minimisation: no
+ minimal-responses: yes
+ log-servfail: yes
+ module-config: "iterator"
+
+stub-zone:
+ name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Test for ghost domain with a child apex NS query.
+
+; 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
+tld. IN NS
+SECTION AUTHORITY
+tld. IN NS ns.tld.
+SECTION ADDITIONAL
+ns.tld. IN A 1.2.3.5
+ENTRY_END
+RANGE_END
+
+; ns.tld
+RANGE_BEGIN 0 15
+ ADDRESS 1.2.3.5
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+tld. IN NS
+SECTION ANSWER
+tld. IN NS ns.tld
+SECTION ADDITIONAL
+ns.tld. IN A 1.2.3.5
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.tld. IN A
+SECTION ANSWER
+ns.tld. IN A 1.2.3.5
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.tld. IN AAAA
+SECTION AUTHORITY
+tld. 3600 IN SOA ns.tld. host.tld. 20201 3600 1800 604800 3600
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+mid.tld. IN NS
+SECTION AUTHORITY
+mid.tld. 5 IN NS ns.mid.tld.
+SECTION ADDITIONAL
+ns.mid.tld. 5 IN A 1.2.3.4
+ENTRY_END
+RANGE_END
+
+; ns.tld
+RANGE_BEGIN 20 100
+ ADDRESS 1.2.3.5
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+tld. IN NS
+SECTION ANSWER
+tld. IN NS ns.tld
+SECTION ADDITIONAL
+ns.tld. IN A 1.2.3.5
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.tld. IN A
+SECTION ANSWER
+ns.tld. IN A 1.2.3.5
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.tld. IN AAAA
+SECTION AUTHORITY
+tld. 3600 IN SOA ns.tld. host.tld. 20201 3600 1800 604800 3600
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR AA NXDOMAIN
+SECTION QUESTION
+mid.tld. IN NS
+SECTION AUTHORITY
+tld. 3600 IN SOA ns.tld. host.tld. 20201 3600 1800 604800 3600
+ENTRY_END
+RANGE_END
+
+; ns.mid.tld.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+mid.tld. IN NS
+SECTION ANSWER
+mid.tld. 86400 IN NS ns.mid.tld.
+SECTION ADDITIONAL
+ns.mid.tld. 86400 IN A 1.2.3.4
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.mid.tld. IN A
+SECTION ANSWER
+ns.mid.tld. IN A 1.2.3.4
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.mid.tld. IN AAAA
+SECTION AUTHORITY
+mid.tld. 3600 IN SOA ns.mid.tld. host.mid.tld. 20301 3600 1800 604800 3600
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+sub.mid.tld. IN NS
+SECTION AUTHORITY
+sub.mid.tld. 3600 IN NS ns.sub.mid.tld.
+SECTION ADDITIONAL
+ns.sub.mid.tld. 3600 IN A 1.2.3.6
+ENTRY_END
+RANGE_END
+
+; ns.sub.mid.tld.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.6
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+sub.mid.tld. IN NS
+SECTION ANSWER
+sub.mid.tld. IN NS ns.sub.mid.tld.
+SECTION ADDITIONAL
+ns.sub.mid.tld. IN A 1.2.3.6
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.sub.mid.tld. IN A
+SECTION ANSWER
+ns.sub.mid.tld. IN A 1.2.3.6
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.sub.mid.tld. IN AAAA
+SECTION AUTHORITY
+sub.mid.tld. 3600 IN SOA ns.sub.mid.tld. host.sub.mid.tld. 20301 3600 1800 604800 3600
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+a.sub.mid.tld. IN A
+SECTION ANSWER
+a.sub.mid.tld. 3600 IN A 10.20.30.40
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+b.sub.mid.tld. IN A
+SECTION ANSWER
+b.sub.mid.tld. 3600 IN A 10.20.30.41
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD NOERROR
+SECTION QUESTION
+a.sub.mid.tld. IN A
+ENTRY_END
+
+STEP 2 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+a.sub.mid.tld. IN A
+SECTION ANSWER
+a.sub.mid.tld. 3600 IN A 10.20.30.40
+ENTRY_END
+
+STEP 10 QUERY
+ENTRY_BEGIN
+REPLY RD NOERROR
+SECTION QUESTION
+mid.tld. IN NS
+ENTRY_END
+
+STEP 11 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+mid.tld. IN NS
+SECTION ANSWER
+mid.tld. 86400 IN NS ns.mid.tld.
+SECTION ADDITIONAL
+ns.mid.tld. 86400 IN A 1.2.3.4
+ENTRY_END
+
+STEP 20 TIME_PASSES ELAPSE 10
+; The authority for .tld switches to NXDOMAIN for mid.tld.
+
+STEP 30 QUERY
+ENTRY_BEGIN
+REPLY RD NOERROR
+SECTION QUESTION
+b.sub.mid.tld. IN A
+ENTRY_END
+
+STEP 31 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NXDOMAIN
+SECTION QUESTION
+b.sub.mid.tld. IN A
+SECTION ANSWER
+SECTION AUTHORITY
+tld. 3600 IN SOA ns.tld. host.tld. 20201 3600 1800 604800 3600
+ENTRY_END
+
+SCENARIO_END
diff --git a/testdata/iter_privaddr.rpl b/testdata/iter_privaddr.rpl
index b7a6fde29b6c..15511996fc0b 100644
--- a/testdata/iter_privaddr.rpl
+++ b/testdata/iter_privaddr.rpl
@@ -95,7 +95,7 @@ RANGE_BEGIN 0 100
ENTRY_BEGIN
MATCH opcode qtype qname
ADJUST copy_id
-REPLY QR NOERROR
+REPLY QR AA NOERROR
SECTION QUESTION
example.com. IN NS
SECTION ANSWER
@@ -107,7 +107,7 @@ ENTRY_END
ENTRY_BEGIN
MATCH opcode qtype qname
ADJUST copy_id
-REPLY QR NOERROR
+REPLY QR AA NOERROR
SECTION QUESTION
ns.example.com. IN A
SECTION ANSWER
@@ -119,7 +119,7 @@ ENTRY_END
ENTRY_BEGIN
MATCH opcode qtype qname
ADJUST copy_id
-REPLY QR NOERROR
+REPLY QR AA NOERROR
SECTION QUESTION
ns.example.com. IN AAAA
SECTION ANSWER
@@ -130,7 +130,7 @@ ENTRY_END
ENTRY_BEGIN
MATCH opcode qtype qname
ADJUST copy_id
-REPLY QR NOERROR
+REPLY QR AA NOERROR
SECTION QUESTION
www.example.com. IN A
SECTION ANSWER
@@ -144,7 +144,7 @@ ENTRY_END
ENTRY_BEGIN
MATCH opcode qtype qname
ADJUST copy_id
-REPLY QR NOERROR
+REPLY QR AA NOERROR
SECTION QUESTION
mail.example.com. IN AAAA
SECTION ANSWER
@@ -158,7 +158,7 @@ ENTRY_END
ENTRY_BEGIN
MATCH opcode qtype qname
ADJUST copy_id
-REPLY QR NOERROR
+REPLY QR AA NOERROR
SECTION QUESTION
foo.example.com. IN A
SECTION ANSWER
@@ -172,7 +172,7 @@ ENTRY_END
ENTRY_BEGIN
MATCH opcode qtype qname
ADJUST copy_id
-REPLY QR NOERROR
+REPLY QR AA NOERROR
SECTION QUESTION
toss.example.com. IN A
SECTION ANSWER
@@ -221,12 +221,16 @@ ENTRY_END
STEP 10 CHECK_ANSWER
ENTRY_BEGIN
MATCH all
-REPLY QR RD RA SERVFAIL
+REPLY QR RD RA NOERROR
SECTION QUESTION
foo.example.com. IN A
SECTION ANSWER
; scrubbed away
;foo.example.com. IN A 10.20.30.40
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
ENTRY_END
; IPv6 address is scrubbed
@@ -240,10 +244,14 @@ ENTRY_END
STEP 30 CHECK_ANSWER
ENTRY_BEGIN
MATCH all
-REPLY QR RD RA SERVFAIL
+REPLY QR RD RA NOERROR
SECTION QUESTION
mail.example.com. IN AAAA
SECTION ANSWER
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
ENTRY_END
; allowed domain is not scrubbed.
diff --git a/testdata/iter_resolve_minimised.rpl b/testdata/iter_resolve_minimised.rpl
index 13f04d4817f6..fbcdf35eef07 100644
--- a/testdata/iter_resolve_minimised.rpl
+++ b/testdata/iter_resolve_minimised.rpl
@@ -73,7 +73,7 @@ RANGE_BEGIN 0 100
ENTRY_BEGIN
MATCH opcode qtype qname
ADJUST copy_id
-REPLY QR NOERROR
+REPLY QR AA NOERROR
SECTION QUESTION
example.com. IN A
SECTION AUTHORITY
@@ -85,7 +85,7 @@ ENTRY_END
ENTRY_BEGIN
MATCH opcode qtype qname
ADJUST copy_id
-REPLY QR NOERROR
+REPLY QR AA NOERROR
SECTION QUESTION
www.example.com. IN A
SECTION AUTHORITY
@@ -97,7 +97,7 @@ ENTRY_END
ENTRY_BEGIN
MATCH opcode qtype qname
ADJUST copy_id
-REPLY QR NOERROR
+REPLY QR AA NOERROR
SECTION QUESTION
www.example.com. IN AAAA
SECTION ANSWER
diff --git a/testdata/iter_scrub_mx.rpl b/testdata/iter_scrub_mx.rpl
new file mode 100644
index 000000000000..4fe7cfc980fa
--- /dev/null
+++ b/testdata/iter_scrub_mx.rpl
@@ -0,0 +1,191 @@
+; config options
+server:
+ target-fetch-policy: "0 0 0 0 0"
+ qname-minimisation: no
+ iter-scrub-promiscuous: yes
+
+stub-zone:
+ name: "."
+ stub-addr: 1.2.3.0 # ns.root
+CONFIG_END
+
+SCENARIO_BEGIN Test iterator with scrub of authority MX records
+; The test queries receive spoofed answers. The check queries see if
+; the record is returned by the original server or by a spoofed source.
+; The test domain is pollute3.mesa.
+; with ns.pollute3.mesa A records are tested for cache placement.
+; MX records and other records should not be allowed to make glue in cache,
+; when present in the authority section.
+
+; ns.root
+RANGE_BEGIN 0 400
+ ADDRESS 1.2.3.0
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+. IN NS
+SECTION ANSWER
+. IN NS NS.ROOT.
+SECTION ADDITIONAL
+NS.ROOT. IN A 1.2.3.0
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+mesa. IN NS
+SECTION AUTHORITY
+mesa. IN NS ns.mesa.
+SECTION ADDITIONAL
+ns.mesa. IN A 1.2.7.7
+ENTRY_END
+RANGE_END
+
+; ns.mesa
+RANGE_BEGIN 0 400
+ ADDRESS 1.2.7.7
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+pollute3.mesa. IN NS
+SECTION AUTHORITY
+pollute3.mesa. IN NS ns.pollute3.mesa.
+SECTION ADDITIONAL
+ns.pollute3.mesa. IN A 1.2.4.3
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+attacker.mesa. IN NS
+SECTION AUTHORITY
+attacker.mesa. IN NS ns.attacker.mesa.
+SECTION ADDITIONAL
+ns.attacker.mesa. IN A 5.6.7.8
+ENTRY_END
+RANGE_END
+
+; ns.pollute3.mesa
+RANGE_BEGIN 0 400
+ ADDRESS 1.2.4.3
+
+; This is the spoofed answer that is returned.
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+test3.atkr.pollute3.mesa. IN A
+SECTION ANSWER
+test3.atkr.pollute3.mesa. 86400 IN A 1.2.3.4
+SECTION AUTHORITY
+test3.atkr.pollute3.mesa. 86400 IN MX 20 ns.pollute3.mesa.
+SECTION ADDITIONAL
+ns.pollute3.mesa. 86400 IN A 5.6.7.8
+ENTRY_END
+
+; correct answer for the check query.
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+check.pollute3.mesa. IN A
+SECTION ANSWER
+check.pollute3.mesa. IN A 1.8.9.3
+ENTRY_END
+RANGE_END
+
+; ns.attacker.mesa
+RANGE_BEGIN 0 400
+ ADDRESS 5.6.7.8
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.attacker.mesa. IN A
+SECTION ANSWER
+ns.attacker.mesa. 86400 IN A 5.6.7.8
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.attacker.mesa. IN AAAA
+SECTION AUTHORITY
+attacker.mesa. 3600 IN SOA ns.attacker.mesa. root.attacker.mesa. 4 7200 3600 604800 3600
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.attacker.mesa. IN A
+SECTION ANSWER
+ns.attacker.mesa. 86400 IN A 5.6.7.8
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+check.pollute3.mesa. IN A
+SECTION ANSWER
+check.pollute3.mesa. 86400 IN A 5.6.7.9
+ENTRY_END
+RANGE_END
+
+; Test query with authority section MX glue.
+STEP 10 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+test3.atkr.pollute3.mesa. IN A
+ENTRY_END
+
+STEP 20 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+test3.atkr.pollute3.mesa. IN A
+SECTION ANSWER
+test3.atkr.pollute3.mesa. 86400 IN A 1.2.3.4
+ENTRY_END
+
+; Check the cache contents, for query with authority section MX glue.
+STEP 100 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+check.pollute3.mesa. IN A
+ENTRY_END
+
+STEP 110 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+check.pollute3.mesa. IN A
+SECTION ANSWER
+; good answer
+check.pollute3.mesa. IN A 1.8.9.3
+; bad answer
+;check.pollute3.mesa. IN A 5.6.7.9
+ENTRY_END
+
+SCENARIO_END
diff --git a/testdata/iter_scrub_ns_min.rpl b/testdata/iter_scrub_ns_min.rpl
new file mode 100644
index 000000000000..0cf115bc7992
--- /dev/null
+++ b/testdata/iter_scrub_ns_min.rpl
@@ -0,0 +1,197 @@
+; config options
+server:
+ target-fetch-policy: "0 0 0 0 0"
+ qname-minimisation: no
+ minimal-responses: yes
+ iter-scrub-promiscuous: yes
+ iter-scrub-ns: 1
+
+stub-zone:
+ name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Test resolution with minimum iter-scrub-ns
+
+; 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
+. 518400 IN NS i.root-servers.net.
+. 518400 IN NS b.root-servers.net.
+. 518400 IN NS d.root-servers.net.
+. 518400 IN NS f.root-servers.net.
+. 518400 IN NS e.root-servers.net.
+. 518400 IN NS j.root-servers.net.
+. 518400 IN NS m.root-servers.net.
+. 518400 IN NS h.root-servers.net.
+. 518400 IN NS k.root-servers.net.
+. 518400 IN NS c.root-servers.net.
+. 518400 IN NS a.root-servers.net.
+. 518400 IN NS l.root-servers.net.
+. 518400 IN NS g.root-servers.net.
+SECTION ADDITIONAL
+m.root-servers.net. 518400 IN AAAA 2001:dc3::35
+l.root-servers.net. 518400 IN AAAA 2001:500:9f::42
+k.root-servers.net. 518400 IN AAAA 2001:7fd::1
+j.root-servers.net. 518400 IN AAAA 2001:503:c27::2:30
+i.root-servers.net. 518400 IN AAAA 2001:7fe::53
+h.root-servers.net. 518400 IN AAAA 2001:500:1::53
+g.root-servers.net. 518400 IN AAAA 2001:500:12::d0d
+f.root-servers.net. 518400 IN AAAA 2001:500:2f::f
+e.root-servers.net. 518400 IN AAAA 2001:500:a8::e
+d.root-servers.net. 518400 IN AAAA 2001:500:2d::d
+c.root-servers.net. 518400 IN AAAA 2001:500:2::c
+b.root-servers.net. 518400 IN AAAA 2801:1b8:10::b
+a.root-servers.net. 518400 IN AAAA 2001:503:ba3e::2:30
+m.root-servers.net. 518400 IN A 202.12.27.33
+l.root-servers.net. 518400 IN A 199.7.83.42
+k.root-servers.net. 518400 IN A 193.0.14.129
+j.root-servers.net. 518400 IN A 192.58.128.30
+i.root-servers.net. 518400 IN A 192.36.148.17
+h.root-servers.net. 518400 IN A 198.97.190.53
+g.root-servers.net. 518400 IN A 192.112.36.4
+f.root-servers.net. 518400 IN A 192.5.5.241
+e.root-servers.net. 518400 IN A 192.203.230.10
+d.root-servers.net. 518400 IN A 199.7.91.13
+c.root-servers.net. 518400 IN A 192.33.4.12
+b.root-servers.net. 518400 IN A 170.247.170.2
+a.root-servers.net. 518400 IN A 198.41.0.4
+ENTRY_END
+RANGE_END
+
+; I.ROOT-SERVERS.NET.
+RANGE_BEGIN 0 100
+ ADDRESS 192.36.148.17
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+. IN NS
+SECTION ANSWER
+. 518400 IN NS i.root-servers.net.
+. 518400 IN NS b.root-servers.net.
+. 518400 IN NS d.root-servers.net.
+. 518400 IN NS f.root-servers.net.
+. 518400 IN NS e.root-servers.net.
+. 518400 IN NS j.root-servers.net.
+. 518400 IN NS m.root-servers.net.
+. 518400 IN NS h.root-servers.net.
+. 518400 IN NS k.root-servers.net.
+. 518400 IN NS c.root-servers.net.
+. 518400 IN NS a.root-servers.net.
+. 518400 IN NS l.root-servers.net.
+. 518400 IN NS g.root-servers.net.
+SECTION ADDITIONAL
+m.root-servers.net. 518400 IN AAAA 2001:dc3::35
+l.root-servers.net. 518400 IN AAAA 2001:500:9f::42
+k.root-servers.net. 518400 IN AAAA 2001:7fd::1
+j.root-servers.net. 518400 IN AAAA 2001:503:c27::2:30
+i.root-servers.net. 518400 IN AAAA 2001:7fe::53
+h.root-servers.net. 518400 IN AAAA 2001:500:1::53
+g.root-servers.net. 518400 IN AAAA 2001:500:12::d0d
+f.root-servers.net. 518400 IN AAAA 2001:500:2f::f
+e.root-servers.net. 518400 IN AAAA 2001:500:a8::e
+d.root-servers.net. 518400 IN AAAA 2001:500:2d::d
+c.root-servers.net. 518400 IN AAAA 2001:500:2::c
+b.root-servers.net. 518400 IN AAAA 2801:1b8:10::b
+a.root-servers.net. 518400 IN AAAA 2001:503:ba3e::2:30
+m.root-servers.net. 518400 IN A 202.12.27.33
+l.root-servers.net. 518400 IN A 199.7.83.42
+k.root-servers.net. 518400 IN A 193.0.14.129
+j.root-servers.net. 518400 IN A 192.58.128.30
+i.root-servers.net. 518400 IN A 192.36.148.17
+h.root-servers.net. 518400 IN A 198.97.190.53
+g.root-servers.net. 518400 IN A 192.112.36.4
+f.root-servers.net. 518400 IN A 192.5.5.241
+e.root-servers.net. 518400 IN A 192.203.230.10
+d.root-servers.net. 518400 IN A 199.7.91.13
+c.root-servers.net. 518400 IN A 192.33.4.12
+b.root-servers.net. 518400 IN A 170.247.170.2
+a.root-servers.net. 518400 IN A 198.41.0.4
+ENTRY_END
+RANGE_END
+
+; I.ROOT-SERVERS.NET.
+RANGE_BEGIN 0 100
+ ADDRESS 2001:7fe::53
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+. IN NS
+SECTION ANSWER
+. 518400 IN NS i.root-servers.net.
+. 518400 IN NS b.root-servers.net.
+. 518400 IN NS d.root-servers.net.
+. 518400 IN NS f.root-servers.net.
+. 518400 IN NS e.root-servers.net.
+. 518400 IN NS j.root-servers.net.
+. 518400 IN NS m.root-servers.net.
+. 518400 IN NS h.root-servers.net.
+. 518400 IN NS k.root-servers.net.
+. 518400 IN NS c.root-servers.net.
+. 518400 IN NS a.root-servers.net.
+. 518400 IN NS l.root-servers.net.
+. 518400 IN NS g.root-servers.net.
+SECTION ADDITIONAL
+m.root-servers.net. 518400 IN AAAA 2001:dc3::35
+l.root-servers.net. 518400 IN AAAA 2001:500:9f::42
+k.root-servers.net. 518400 IN AAAA 2001:7fd::1
+j.root-servers.net. 518400 IN AAAA 2001:503:c27::2:30
+i.root-servers.net. 518400 IN AAAA 2001:7fe::53
+h.root-servers.net. 518400 IN AAAA 2001:500:1::53
+g.root-servers.net. 518400 IN AAAA 2001:500:12::d0d
+f.root-servers.net. 518400 IN AAAA 2001:500:2f::f
+e.root-servers.net. 518400 IN AAAA 2001:500:a8::e
+d.root-servers.net. 518400 IN AAAA 2001:500:2d::d
+c.root-servers.net. 518400 IN AAAA 2001:500:2::c
+b.root-servers.net. 518400 IN AAAA 2801:1b8:10::b
+a.root-servers.net. 518400 IN AAAA 2001:503:ba3e::2:30
+m.root-servers.net. 518400 IN A 202.12.27.33
+l.root-servers.net. 518400 IN A 199.7.83.42
+k.root-servers.net. 518400 IN A 193.0.14.129
+j.root-servers.net. 518400 IN A 192.58.128.30
+i.root-servers.net. 518400 IN A 192.36.148.17
+h.root-servers.net. 518400 IN A 198.97.190.53
+g.root-servers.net. 518400 IN A 192.112.36.4
+f.root-servers.net. 518400 IN A 192.5.5.241
+e.root-servers.net. 518400 IN A 192.203.230.10
+d.root-servers.net. 518400 IN A 199.7.91.13
+c.root-servers.net. 518400 IN A 192.33.4.12
+b.root-servers.net. 518400 IN A 170.247.170.2
+a.root-servers.net. 518400 IN A 198.41.0.4
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+. IN NS
+ENTRY_END
+
+; recursion happens here.
+STEP 20 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+. IN NS
+SECTION ANSWER
+. 518400 IN NS i.root-servers.net.
+SECTION AUTHORITY
+SECTION ADDITIONAL
+i.root-servers.net. 518400 IN AAAA 2001:7fe::53
+i.root-servers.net. 518400 IN A 192.36.148.17
+ENTRY_END
+
+SCENARIO_END
diff --git a/testdata/iter_self_glue.rpl b/testdata/iter_self_glue.rpl
new file mode 100644
index 000000000000..003b294e82da
--- /dev/null
+++ b/testdata/iter_self_glue.rpl
@@ -0,0 +1,109 @@
+; config options
+server:
+ target-fetch-policy: "0 0 0 0 0"
+ qname-minimisation: no
+ iter-scrub-promiscuous: yes
+
+stub-zone:
+ name: "."
+ stub-addr: 1.2.3.0 # ns.root
+CONFIG_END
+
+SCENARIO_BEGIN Test iterator with self glue response that becomes empty.
+
+; ns.root
+RANGE_BEGIN 0 400
+ ADDRESS 1.2.3.0
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+. IN NS
+SECTION ANSWER
+. IN NS NS.ROOT.
+SECTION ADDITIONAL
+NS.ROOT. IN A 1.2.3.0
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+mesa. IN NS
+SECTION AUTHORITY
+mesa. IN NS ns.mesa.
+SECTION ADDITIONAL
+ns.mesa. IN A 1.2.7.7
+ENTRY_END
+RANGE_END
+
+; ns.mesa
+RANGE_BEGIN 0 400
+ ADDRESS 1.2.7.7
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+example.mesa. IN NS
+SECTION AUTHORITY
+example.mesa. IN NS ns.example.mesa.
+SECTION ADDITIONAL
+ns.example.mesa. IN A 1.2.4.3
+ENTRY_END
+RANGE_END
+
+; ns.example.mesa
+RANGE_BEGIN 0 400
+ ADDRESS 1.2.4.3
+
+; This answer contains an NS record that points to itself.
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+sub.example.mesa. IN NS
+SECTION AUTHORITY
+sub.example.mesa. IN NS ns.nonce1.sub.example.mesa.
+SECTION ADDITIONAL
+ns.nonce1.sub.example.mesa. IN A 1.2.4.3
+ENTRY_END
+RANGE_END
+
+; Test query with authority section MX glue.
+STEP 10 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+test1.sub.example.mesa. IN A
+ENTRY_END
+
+STEP 20 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA SERVFAIL
+SECTION QUESTION
+test1.sub.example.mesa. IN A
+SECTION ANSWER
+ENTRY_END
+
+STEP 30 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+test2.sub.example.mesa. IN A
+ENTRY_END
+
+STEP 40 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA SERVFAIL
+SECTION QUESTION
+test2.sub.example.mesa. IN A
+SECTION ANSWER
+ENTRY_END
+
+SCENARIO_END
diff --git a/testdata/iter_self_glue_promisc.rpl b/testdata/iter_self_glue_promisc.rpl
new file mode 100644
index 000000000000..36b2a268d512
--- /dev/null
+++ b/testdata/iter_self_glue_promisc.rpl
@@ -0,0 +1,94 @@
+; config options
+server:
+ target-fetch-policy: "0 0 0 0 0"
+ qname-minimisation: no
+ iter-scrub-promiscuous: no
+
+stub-zone:
+ name: "."
+ stub-addr: 1.2.3.0 # ns.root
+CONFIG_END
+
+SCENARIO_BEGIN Test iterator with self glue response that becomes empty.
+; It allows promiscuous NS records.
+
+; ns.root
+RANGE_BEGIN 0 400
+ ADDRESS 1.2.3.0
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+. IN NS
+SECTION ANSWER
+. IN NS NS.ROOT.
+SECTION ADDITIONAL
+NS.ROOT. IN A 1.2.3.0
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+mesa. IN NS
+SECTION AUTHORITY
+mesa. IN NS ns.mesa.
+SECTION ADDITIONAL
+ns.mesa. IN A 1.2.7.7
+ENTRY_END
+RANGE_END
+
+; ns.mesa
+RANGE_BEGIN 0 400
+ ADDRESS 1.2.7.7
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+example.mesa. IN NS
+SECTION AUTHORITY
+example.mesa. IN NS ns.example.mesa.
+SECTION ADDITIONAL
+ns.example.mesa. IN A 1.2.4.3
+ENTRY_END
+RANGE_END
+
+; ns.example.mesa
+RANGE_BEGIN 0 400
+ ADDRESS 1.2.4.3
+
+; This answer contains an NS record that points to itself.
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+sub.example.mesa. IN NS
+SECTION AUTHORITY
+sub.example.mesa. IN NS ns.sub.example.mesa.
+SECTION ADDITIONAL
+ns.sub.example.mesa. IN A 1.2.4.3
+ENTRY_END
+RANGE_END
+
+; Test query with authority section MX glue.
+STEP 10 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+test1.sub.example.mesa. IN A
+ENTRY_END
+
+STEP 20 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA SERVFAIL
+SECTION QUESTION
+test1.sub.example.mesa. IN A
+SECTION ANSWER
+ENTRY_END
+
+SCENARIO_END
diff --git a/testdata/iter_svcb_malformed.rpl b/testdata/iter_svcb_malformed.rpl
index 8ac31fd2d403..e08ed8e52cb0 100644
--- a/testdata/iter_svcb_malformed.rpl
+++ b/testdata/iter_svcb_malformed.rpl
@@ -151,7 +151,14 @@ REPLY QR RD RA NOERROR
SECTION QUESTION
www.example.com. IN HTTPS
SECTION ANSWER
-www.example.com. 0 IN HTTPS 1 . alpn="h2" alpn="h3"
+; www.example.com. 0 IN HTTPS 1 . alpn="h2" alpn="h3"
+; in unknown record format, otherwise the zonefile format reader converts
+; the svcb and sorts the svcbparams, and puts them in-order. That qsort is
+; not stable, on some systems(windows), and that would put the identical
+; key elements in a different order. With the unknown record format this
+; conversion is ommitted, and the bad svcb record with duplicate keys stays
+; in the same byte format.
+www.example.com. IN HTTPS \# 17 00 01 00 00 01 00 03 02 68 32 00 01 00 03 02 68 33
ENTRY_END
STEP 20 QUERY
diff --git a/testdata/local_block_a.rpl b/testdata/local_block_a.rpl
new file mode 100644
index 000000000000..6db5cb20042f
--- /dev/null
+++ b/testdata/local_block_a.rpl
@@ -0,0 +1,334 @@
+; config options
+; The island of trust is at example.com
+server:
+ qname-minimisation: no
+ local-zone: "example1.com." block_a
+ local-zone: "example2.com." block_aaaa
+ local-zone: "example3.com." block_a_wdata
+ local-data: "b.example3.com. A 1.2.3.5"
+ local-data: "b.example3.com. AAAA 1:2:3::5"
+ local-zone: "example4.com." block_aaaa_wdata
+ local-data: "b.example4.com. A 1.2.3.5"
+ local-data: "b.example4.com. AAAA 1:2:3::5"
+
+stub-zone:
+ name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN test local data with block_a and block_aaaa
+
+; 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 qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+a.example1.com. IN A
+SECTION ANSWER
+a.example1.com. IN A 1.2.3.4
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+a.example1.com. IN AAAA
+SECTION ANSWER
+a.example1.com. IN AAAA 1:2:3::4
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+a.example2.com. IN A
+SECTION ANSWER
+a.example2.com. IN A 1.2.3.4
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+a.example2.com. IN AAAA
+SECTION ANSWER
+a.example2.com. IN AAAA 1:2:3::4
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+a.example3.com. IN A
+SECTION ANSWER
+a.example3.com. IN A 1.2.3.4
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+a.example3.com. IN AAAA
+SECTION ANSWER
+a.example3.com. IN AAAA 1:2:3::4
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+a.example4.com. IN A
+SECTION ANSWER
+a.example4.com. IN A 1.2.3.4
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+a.example4.com. IN AAAA
+SECTION ANSWER
+a.example4.com. IN AAAA 1:2:3::4
+ENTRY_END
+RANGE_END
+
+; block_a for example1.com
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+a.example1.com. IN A
+ENTRY_END
+
+; block_a blocks A
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR AA RD RA DO NOERROR
+SECTION QUESTION
+a.example1.com. IN A
+SECTION ANSWER
+SECTION AUTHORITY
+ENTRY_END
+
+STEP 20 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+a.example1.com. IN AAAA
+ENTRY_END
+
+; block_a allows AAAA from upstream
+STEP 30 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA DO NOERROR
+SECTION QUESTION
+a.example1.com. IN AAAA
+SECTION ANSWER
+a.example1.com. IN AAAA 1:2:3::4
+ENTRY_END
+
+; block_aaaa for example2.com
+STEP 40 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+a.example2.com. IN A
+ENTRY_END
+
+; block_aaaa allows A from upstream
+STEP 50 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA DO NOERROR
+SECTION QUESTION
+a.example2.com. IN A
+SECTION ANSWER
+a.example2.com. IN A 1.2.3.4
+ENTRY_END
+
+STEP 60 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+a.example2.com. IN AAAA
+ENTRY_END
+
+; block_aaaa blocks AAAA
+STEP 70 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR AA RD RA DO NOERROR
+SECTION QUESTION
+a.example2.com. IN AAAA
+SECTION ANSWER
+ENTRY_END
+
+; block_a_wdata for example3.com
+STEP 80 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+a.example3.com. IN A
+ENTRY_END
+
+; block_a_wdata blocks A
+STEP 90 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR AA RD RA DO NOERROR
+SECTION QUESTION
+a.example3.com. IN A
+SECTION ANSWER
+ENTRY_END
+
+STEP 100 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+a.example3.com. IN AAAA
+ENTRY_END
+
+; block_a_wdata allows AAAA from upstream
+STEP 110 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA DO NOERROR
+SECTION QUESTION
+a.example3.com. IN AAAA
+SECTION ANSWER
+a.example3.com. IN AAAA 1:2:3::4
+ENTRY_END
+
+STEP 120 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+b.example3.com. IN A
+ENTRY_END
+
+; block_a_wdata allows local-data A
+STEP 130 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR AA RD RA DO NOERROR
+SECTION QUESTION
+b.example3.com. IN A
+SECTION ANSWER
+b.example3.com. A 1.2.3.5
+ENTRY_END
+
+STEP 140 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+b.example3.com. IN AAAA
+ENTRY_END
+
+; block_a_wdata allows local-data AAAA
+STEP 150 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR AA RD RA DO NOERROR
+SECTION QUESTION
+b.example3.com. IN AAAA
+SECTION ANSWER
+b.example3.com. AAAA 1:2:3::5
+ENTRY_END
+
+; block_aaaa_wdata for example4.com
+STEP 160 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+a.example4.com. IN A
+ENTRY_END
+
+; block_aaaa_wdata allows A from upstream
+STEP 170 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA DO NOERROR
+SECTION QUESTION
+a.example4.com. IN A
+SECTION ANSWER
+a.example4.com. IN A 1.2.3.4
+ENTRY_END
+
+STEP 180 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+a.example4.com. IN AAAA
+ENTRY_END
+
+; block_aaaa_wdata blocks AAAA
+STEP 190 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR AA RD RA DO NOERROR
+SECTION QUESTION
+a.example4.com. IN AAAA
+SECTION ANSWER
+ENTRY_END
+
+STEP 200 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+b.example4.com. IN A
+ENTRY_END
+
+; block_aaaa_wdata allows local-data A
+STEP 210 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR AA RD RA DO NOERROR
+SECTION QUESTION
+b.example4.com. IN A
+SECTION ANSWER
+b.example4.com. A 1.2.3.5
+ENTRY_END
+
+STEP 220 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+b.example4.com. IN AAAA
+ENTRY_END
+
+; block_aaaa_wdata allows local-data AAAA
+STEP 230 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR AA RD RA DO NOERROR
+SECTION QUESTION
+b.example4.com. IN AAAA
+SECTION ANSWER
+b.example4.com. AAAA 1:2:3::5
+ENTRY_END
+
+SCENARIO_END
diff --git a/testdata/local_ds.rpl b/testdata/local_ds.rpl
index d76d34601417..51ffb4121a37 100644
--- a/testdata/local_ds.rpl
+++ b/testdata/local_ds.rpl
@@ -32,6 +32,7 @@ SECTION QUESTION
arpa. IN NS
SECTION ANSWER
SECTION AUTHORITY
+. IN SOA invalid. invalid. 1 2 3 4 5
. IN NS K.ROOT-SERVERS.NET.
SECTION ADDITIONAL
K.ROOT-SERVERS.NET. IN A 193.0.14.129
@@ -45,6 +46,7 @@ SECTION QUESTION
in-addr.arpa. IN NS
SECTION ANSWER
SECTION AUTHORITY
+. IN SOA invalid. invalid. 1 2 3 4 5
. IN NS K.ROOT-SERVERS.NET.
SECTION ADDITIONAL
K.ROOT-SERVERS.NET. IN A 193.0.14.129
diff --git a/testdata/nsec_cross_zone.rpl b/testdata/nsec_cross_zone.rpl
new file mode 100644
index 000000000000..8973fae9fee3
--- /dev/null
+++ b/testdata/nsec_cross_zone.rpl
@@ -0,0 +1,216 @@
+; config options
+; The island of trust is at test.
+server:
+ trust-anchor: "test. DS 1444 8 2 8a87d067fd09a5965244fe2e317dd26d182c468e0a7f26ecc4c7b479bf89db9b"
+ val-override-date: "20201020135527"
+ target-fetch-policy: "0 0 0 0 0"
+ qname-minimisation: "no"
+ fake-sha1: yes
+ trust-anchor-signaling: no
+ minimal-responses: no
+ iter-scrub-promiscuous: no
+ aggressive-nsec: yes
+ local-zone: test. nodefault
+ log-servfail: yes
+
+stub-zone:
+ name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Test overreaching NSEC with aggressive cache
+
+; 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
+test. IN NS
+SECTION AUTHORITY
+test. IN NS ns.test.
+SECTION ADDITIONAL
+ns.test. IN A 1.2.3.5
+ENTRY_END
+RANGE_END
+
+; ns.test
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.5
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+test. IN NS
+SECTION ANSWER
+test. IN NS ns.test
+test. 3600 IN RRSIG NS 8 1 3600 20201116135527 20201019135527 1444 test. RGCxIO32TbbLTk6xZmTr+fjYPH50hntBxeOQ2DIj2pDsmjALcHYtVkOfpfk2EhOhHZd+9PLuoJPbJh6a9NqLSFeBvr0XZoCZoQ2g0tCHUNHcH5EVjA2TuYBQem6DVYnPLJ3914aRx0uA1j42b8dC2xsam/XkOo7U+dLbUW2Os1s=
+SECTION ADDITIONAL
+ns.test. IN A 1.2.3.5
+ns.test. 3600 IN RRSIG A 8 2 3600 20201116135527 20201019135527 1444 test. GskCc4/k6GjH9V9Jz2V5L2XLiizbOeWkB0feSbf+aN859S3vxVvtuqkvIgwY4LafUO1QAn/pUcv9zA7rcFO++rlg+8t6gvZTo9p3v0bfeIv2uJDsfSBD5jDh0WXlxjekfnrKrQp7zE+GiA93tWwKUWKPvxXDgP+n886e6WcbHJw=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.test. IN A
+SECTION ANSWER
+ns.test. IN A 1.2.3.5
+ns.test. 3600 IN RRSIG A 8 2 3600 20201116135527 20201019135527 1444 test. GskCc4/k6GjH9V9Jz2V5L2XLiizbOeWkB0feSbf+aN859S3vxVvtuqkvIgwY4LafUO1QAn/pUcv9zA7rcFO++rlg+8t6gvZTo9p3v0bfeIv2uJDsfSBD5jDh0WXlxjekfnrKrQp7zE+GiA93tWwKUWKPvxXDgP+n886e6WcbHJw=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.test. IN AAAA
+SECTION AUTHORITY
+test. 3600 IN SOA ns.test. host.test. 20201 3600 1800 604800 3600
+test. 3600 IN RRSIG SOA 8 1 3600 20201116135527 20201019135527 1444 test. IZJIDmEgf0W7A5G7hvvZ2hUqJ9Trbv1/i7ySapDmPbYV9lVCmHHobySxO01yDhI2/Pvpsvxqrm1Tiv3BxH8uzZ4keKgiQjBsSy4htAsFct9I4E7ly2glPj/Fm3oun3PsjJDv5QYhx0KS7w4IQKU7Nc9pfJc92uoUI5bdoC1pRGw=
+ns.test. 3600 IN NSEC nz.test. A RRSIG
+ns.test. 3600 IN RRSIG NSEC 8 2 3600 20201116135527 20201019135527 1444 test. PElArVB3KPg8KHAP7lzcNbhFuXNxTsHNTn1dZVncB5qmWRdIaeKpaXDjpH0JSXMaelGFS+/QhuQ6Hmw9+4VyZFRqMzGhw4agUR/2bxABHcDIG4ZpUwyeSP61ATTfHUkQVxaH2wjCWI/tfmesdP2xVE4GXyUvCIBxU914MkZbULU=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+test. IN DNSKEY
+SECTION ANSWER
+test. 3600 IN DNSKEY 257 3 8 AwEAAbd9WqjzE2Pynz21OG5doSf9hFzMr5dhzz2waZ3vTa+0o5r7AjTAqmA1yH/B3+aAMihUm5ucZSfVqo7+kOaRE8yFj9aivOmA1n1+JLevJq/oyvQyjxQN2Qb89LyaNUT5oKZIiL+uyyhNW3KDR3SSbQ/GBwQNDHVcZi+JDR3RC0r7 ;{id = 1444 (ksk), size = 1024b}
+test. 3600 IN RRSIG DNSKEY 8 1 3600 20201116135527 20201019135527 1444 test. UmRMS4iG9NBBHZYOtpwFFcJgbEb5SfHSgHd9XRe/8pTWM31WSDayn5ViPOBMqI1T5TXg2amc13dDI574xIM2oKMus3b5cBW72jJLW13jprBtslO6P8BMWb4HNnvLrJtQjwf3ErRirtTxinLmywQtmyr1cdthyG3Gp4N7i90fHSc=
+SECTION ADDITIONAL
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qname qtype
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+example.test. IN DS
+SECTION ANSWER
+example.test. 3600 IN DS 55567 8 2 a2d578906330a10a57d40462257b6ce038bad3f7bf4a45c46c46086e20a94b39
+example.test. 3600 IN RRSIG DS 8 2 3600 20201116135527 20201019135527 1444 test. P7+FTYW2qHuJ4I1YbuvseEz5X1lOYAraGEHB3C5y0OOCQFmhmSiFRdquNi2NlpcS6FXLdsE0EU+Bo1+0atTG4EkMWXbpF21lrtbB51BdsnlX4Mzc/o375fvjiOMwmF6wPCUaOUN62jrVrhsE/hedaVyDphDToqL17ETohwgUO2I=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+example.test. IN NS
+SECTION AUTHORITY
+example.test. IN NS ns.example.test.
+example.test. 3600 IN DS 55567 8 2 a2d578906330a10a57d40462257b6ce038bad3f7bf4a45c46c46086e20a94b39
+example.test. 3600 IN RRSIG DS 8 2 3600 20201116135527 20201019135527 1444 test. P7+FTYW2qHuJ4I1YbuvseEz5X1lOYAraGEHB3C5y0OOCQFmhmSiFRdquNi2NlpcS6FXLdsE0EU+Bo1+0atTG4EkMWXbpF21lrtbB51BdsnlX4Mzc/o375fvjiOMwmF6wPCUaOUN62jrVrhsE/hedaVyDphDToqL17ETohwgUO2I=
+SECTION ADDITIONAL
+ns.example.test. IN A 1.2.3.4
+ENTRY_END
+RANGE_END
+
+; ns.example.test.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.test. IN NS
+SECTION ANSWER
+example.test. IN NS ns.example.test.
+example.test. 3600 IN RRSIG NS 8 2 3600 20201116135527 20201019135527 55567 example.test. l1JT0wMlK0YI7/CWHzexf/k0iafUhCgN+BdgjBXIRXmSQNf4HDTiAkbcWL2/15qtnp12nQy9JeiTdSQ3vtPoHAJX4C5uTWaze4ms+Wrrf+n92sLCjacP9x50uuicH3URT6cKb1QCAPwlvlWxIlZjAMYFScSns7+C441NMJT8aE4=
+SECTION ADDITIONAL
+ns.example.test. IN A 1.2.3.4
+ns.example.test. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55567 example.test. 2PWaVaccZFQgfPKXNsdEGYUVaashCAj1ZhBo9XRt5eQKUFvZcauBjMnXIuxZFyWeootn1fZGw6GuPI5W48Y0FDx38H6adprkFgQikso2Y64jDdDMWznSo38Z/XqP+U0+kq4vmwonvmEMpm7hKnNEXvhqGKyGzyBwb+CZVJ2L8Eo=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.example.test. IN A
+SECTION ANSWER
+ns.example.test. IN A 1.2.3.4
+ns.example.test. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55567 example.test. 2PWaVaccZFQgfPKXNsdEGYUVaashCAj1ZhBo9XRt5eQKUFvZcauBjMnXIuxZFyWeootn1fZGw6GuPI5W48Y0FDx38H6adprkFgQikso2Y64jDdDMWznSo38Z/XqP+U0+kq4vmwonvmEMpm7hKnNEXvhqGKyGzyBwb+CZVJ2L8Eo=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.example.test. IN AAAA
+SECTION AUTHORITY
+example.test. 3600 IN SOA ns.example.test. host.example.test. 20301 3600 1800 604800 3600
+example.test. 3600 IN RRSIG SOA 8 2 3600 20201116135527 20201019135527 55567 example.test. 2UUkScBAN37fJpSrelhE8DotKvmOzj3q9wicaanCIaCv95DE4nQnePih5B+ek3FIRjB/Uv2+z4Ro5Uxy94XAnlK0rCkDLSa0U9U7KP0ytc88sevO0x1SCPAMoZoJO6JqHkv42pdh54WSz+Zb/D8npY0j/tksHe/uX+VQnMymgb8=
+ns.example.test. 3600 IN NSEC nz.example.test. A RRSIG
+example.test. 3600 IN SOA ns.example.test. host.example.test. 20301 3600 1800 604800 3600
+ENTRY_END
+
+; response to DNSKEY priming query
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.test. IN DNSKEY
+SECTION ANSWER
+example.test. 3600 IN DNSKEY 257 3 8 AwEAAdug/L739i0mgN2nuK/bhxu3wFn5Ud9nK2+XUmZQlPUEZUC5YZvm1rfMmEWTGBn87fFxEu/kjFZHJ55JLzqsbbpVHLbmKCTT2gYR2FV2WDKROGKuYbVkJIXdKAjJ0ONuK507NinYvlWXIoxHn22KAWOd9wKgSTNHBlmGkX+ts3hh ;{id = 55567 (ksk), size = 1024b}
+example.test. 3600 IN RRSIG DNSKEY 8 2 3600 20201116135527 20201019135527 55567 example.test. IbWMC6quOuZFNPAVxQLqCJ9nLhindBo826rnLcg5yMgs9dGUSPOCXAfHTmbgJAUNs9HTFfrJWNvasnETs0UOpmEuifGwWdH1OlME7Gny4RL2QmITUFeMW81Jz1tiVQxFXl6yxT0jxOxvz+bqMHlrz+8IeWQXcO+GZTPu8ueq30g=
+ENTRY_END
+
+; response to query of interest
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+example.test. IN NSEC
+SECTION ANSWER
+; normal record has next owner in example.test.
+; example.test. IN NSEC b.example.test. SOA DNSKEY NS RRSIG NSEC
+example.test. IN NSEC b.foo.test. NS SOA RRSIG NSEC DNSKEY
+example.test. 3600 IN RRSIG NSEC 8 2 3600 20201116135527 20201019135527 55567 example.test. xxepzzIxsJURk4/eZrwcDm5jhQNHtf1OmnPuu3T/w8y5NWwzlgn/hL17xoI71dIgTJg2GAq97wxEUhp951jtGMCeLH2Dz5lDZXxQI4wf2Wl43u2mTBQFRagDwfAauFc6Z4FYI/biDZyYcylZ3A5Q6j6ifFnsgMTL+cP0UIEZBTQ=
+ENTRY_END
+RANGE_END
+
+; CD=1 query for type NSEC
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD CD DO
+SECTION QUESTION
+example.test. IN NSEC
+ENTRY_END
+
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD CD RA DO NOERROR
+SECTION QUESTION
+example.test. IN NSEC
+SECTION ANSWER
+; The overreaching NSEC is removed by the scrubber.
+ENTRY_END
+
+SCENARIO_END
diff --git a/testdata/respip_bogus_rewrite.rpl b/testdata/respip_bogus_rewrite.rpl
new file mode 100644
index 000000000000..7f80612dd887
--- /dev/null
+++ b/testdata/respip_bogus_rewrite.rpl
@@ -0,0 +1,216 @@
+; config options
+; The island of trust is at test.
+server:
+ trust-anchor: "test. DS 1444 8 2 8a87d067fd09a5965244fe2e317dd26d182c468e0a7f26ecc4c7b479bf89db9b"
+ val-override-date: "20201020135527"
+ target-fetch-policy: "0 0 0 0 0"
+ qname-minimisation: "no"
+ fake-sha1: yes
+ trust-anchor-signaling: no
+ minimal-responses: no
+ iter-scrub-promiscuous: no
+ aggressive-nsec: yes
+ local-zone: test. nodefault
+ log-servfail: yes
+ module-config: "respip validator iterator"
+ response-ip: 192.0.2.0/24 redirect
+ response-ip-data: 192.0.2.0/24 "A 10.10.10.10"
+
+stub-zone:
+ name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Test respip with rewrite of a bogus reply
+
+; 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
+test. IN NS
+SECTION AUTHORITY
+test. IN NS ns.test.
+SECTION ADDITIONAL
+ns.test. IN A 1.2.3.5
+ENTRY_END
+RANGE_END
+
+; ns.test
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.5
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+test. IN NS
+SECTION ANSWER
+test. IN NS ns.test
+test. 3600 IN RRSIG NS 8 1 3600 20201116135527 20201019135527 1444 test. RGCxIO32TbbLTk6xZmTr+fjYPH50hntBxeOQ2DIj2pDsmjALcHYtVkOfpfk2EhOhHZd+9PLuoJPbJh6a9NqLSFeBvr0XZoCZoQ2g0tCHUNHcH5EVjA2TuYBQem6DVYnPLJ3914aRx0uA1j42b8dC2xsam/XkOo7U+dLbUW2Os1s=
+SECTION ADDITIONAL
+ns.test. IN A 1.2.3.5
+ns.test. 3600 IN RRSIG A 8 2 3600 20201116135527 20201019135527 1444 test. GskCc4/k6GjH9V9Jz2V5L2XLiizbOeWkB0feSbf+aN859S3vxVvtuqkvIgwY4LafUO1QAn/pUcv9zA7rcFO++rlg+8t6gvZTo9p3v0bfeIv2uJDsfSBD5jDh0WXlxjekfnrKrQp7zE+GiA93tWwKUWKPvxXDgP+n886e6WcbHJw=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.test. IN A
+SECTION ANSWER
+ns.test. IN A 1.2.3.5
+ns.test. 3600 IN RRSIG A 8 2 3600 20201116135527 20201019135527 1444 test. GskCc4/k6GjH9V9Jz2V5L2XLiizbOeWkB0feSbf+aN859S3vxVvtuqkvIgwY4LafUO1QAn/pUcv9zA7rcFO++rlg+8t6gvZTo9p3v0bfeIv2uJDsfSBD5jDh0WXlxjekfnrKrQp7zE+GiA93tWwKUWKPvxXDgP+n886e6WcbHJw=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.test. IN AAAA
+SECTION AUTHORITY
+test. 3600 IN SOA ns.test. host.test. 20201 3600 1800 604800 3600
+test. 3600 IN RRSIG SOA 8 1 3600 20201116135527 20201019135527 1444 test. IZJIDmEgf0W7A5G7hvvZ2hUqJ9Trbv1/i7ySapDmPbYV9lVCmHHobySxO01yDhI2/Pvpsvxqrm1Tiv3BxH8uzZ4keKgiQjBsSy4htAsFct9I4E7ly2glPj/Fm3oun3PsjJDv5QYhx0KS7w4IQKU7Nc9pfJc92uoUI5bdoC1pRGw=
+ns.test. 3600 IN NSEC nz.test. A RRSIG
+ns.test. 3600 IN RRSIG NSEC 8 2 3600 20201116135527 20201019135527 1444 test. PElArVB3KPg8KHAP7lzcNbhFuXNxTsHNTn1dZVncB5qmWRdIaeKpaXDjpH0JSXMaelGFS+/QhuQ6Hmw9+4VyZFRqMzGhw4agUR/2bxABHcDIG4ZpUwyeSP61ATTfHUkQVxaH2wjCWI/tfmesdP2xVE4GXyUvCIBxU914MkZbULU=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+test. IN DNSKEY
+SECTION ANSWER
+test. 3600 IN DNSKEY 257 3 8 AwEAAbd9WqjzE2Pynz21OG5doSf9hFzMr5dhzz2waZ3vTa+0o5r7AjTAqmA1yH/B3+aAMihUm5ucZSfVqo7+kOaRE8yFj9aivOmA1n1+JLevJq/oyvQyjxQN2Qb89LyaNUT5oKZIiL+uyyhNW3KDR3SSbQ/GBwQNDHVcZi+JDR3RC0r7 ;{id = 1444 (ksk), size = 1024b}
+test. 3600 IN RRSIG DNSKEY 8 1 3600 20201116135527 20201019135527 1444 test. UmRMS4iG9NBBHZYOtpwFFcJgbEb5SfHSgHd9XRe/8pTWM31WSDayn5ViPOBMqI1T5TXg2amc13dDI574xIM2oKMus3b5cBW72jJLW13jprBtslO6P8BMWb4HNnvLrJtQjwf3ErRirtTxinLmywQtmyr1cdthyG3Gp4N7i90fHSc=
+SECTION ADDITIONAL
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qname qtype
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+example.test. IN DS
+SECTION ANSWER
+example.test. 3600 IN DS 55567 8 2 a2d578906330a10a57d40462257b6ce038bad3f7bf4a45c46c46086e20a94b39
+example.test. 3600 IN RRSIG DS 8 2 3600 20201116135527 20201019135527 1444 test. P7+FTYW2qHuJ4I1YbuvseEz5X1lOYAraGEHB3C5y0OOCQFmhmSiFRdquNi2NlpcS6FXLdsE0EU+Bo1+0atTG4EkMWXbpF21lrtbB51BdsnlX4Mzc/o375fvjiOMwmF6wPCUaOUN62jrVrhsE/hedaVyDphDToqL17ETohwgUO2I=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+example.test. IN NS
+SECTION AUTHORITY
+example.test. IN NS ns.example.test.
+example.test. 3600 IN DS 55567 8 2 a2d578906330a10a57d40462257b6ce038bad3f7bf4a45c46c46086e20a94b39
+example.test. 3600 IN RRSIG DS 8 2 3600 20201116135527 20201019135527 1444 test. P7+FTYW2qHuJ4I1YbuvseEz5X1lOYAraGEHB3C5y0OOCQFmhmSiFRdquNi2NlpcS6FXLdsE0EU+Bo1+0atTG4EkMWXbpF21lrtbB51BdsnlX4Mzc/o375fvjiOMwmF6wPCUaOUN62jrVrhsE/hedaVyDphDToqL17ETohwgUO2I=
+SECTION ADDITIONAL
+ns.example.test. IN A 1.2.3.4
+ENTRY_END
+RANGE_END
+
+; ns.example.test.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.test. IN NS
+SECTION ANSWER
+example.test. IN NS ns.example.test.
+example.test. 3600 IN RRSIG NS 8 2 3600 20201116135527 20201019135527 55567 example.test. l1JT0wMlK0YI7/CWHzexf/k0iafUhCgN+BdgjBXIRXmSQNf4HDTiAkbcWL2/15qtnp12nQy9JeiTdSQ3vtPoHAJX4C5uTWaze4ms+Wrrf+n92sLCjacP9x50uuicH3URT6cKb1QCAPwlvlWxIlZjAMYFScSns7+C441NMJT8aE4=
+SECTION ADDITIONAL
+ns.example.test. IN A 1.2.3.4
+ns.example.test. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55567 example.test. 2PWaVaccZFQgfPKXNsdEGYUVaashCAj1ZhBo9XRt5eQKUFvZcauBjMnXIuxZFyWeootn1fZGw6GuPI5W48Y0FDx38H6adprkFgQikso2Y64jDdDMWznSo38Z/XqP+U0+kq4vmwonvmEMpm7hKnNEXvhqGKyGzyBwb+CZVJ2L8Eo=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.example.test. IN A
+SECTION ANSWER
+ns.example.test. IN A 1.2.3.4
+ns.example.test. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55567 example.test. 2PWaVaccZFQgfPKXNsdEGYUVaashCAj1ZhBo9XRt5eQKUFvZcauBjMnXIuxZFyWeootn1fZGw6GuPI5W48Y0FDx38H6adprkFgQikso2Y64jDdDMWznSo38Z/XqP+U0+kq4vmwonvmEMpm7hKnNEXvhqGKyGzyBwb+CZVJ2L8Eo=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.example.test. IN AAAA
+SECTION AUTHORITY
+example.test. 3600 IN SOA ns.example.test. host.example.test. 20301 3600 1800 604800 3600
+example.test. 3600 IN RRSIG SOA 8 2 3600 20201116135527 20201019135527 55567 example.test. 2UUkScBAN37fJpSrelhE8DotKvmOzj3q9wicaanCIaCv95DE4nQnePih5B+ek3FIRjB/Uv2+z4Ro5Uxy94XAnlK0rCkDLSa0U9U7KP0ytc88sevO0x1SCPAMoZoJO6JqHkv42pdh54WSz+Zb/D8npY0j/tksHe/uX+VQnMymgb8=
+ns.example.test. 3600 IN NSEC nz.example.test. A RRSIG
+example.test. 3600 IN SOA ns.example.test. host.example.test. 20301 3600 1800 604800 3600
+ENTRY_END
+
+; response to DNSKEY priming query
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.test. IN DNSKEY
+SECTION ANSWER
+example.test. 3600 IN DNSKEY 257 3 8 AwEAAdug/L739i0mgN2nuK/bhxu3wFn5Ud9nK2+XUmZQlPUEZUC5YZvm1rfMmEWTGBn87fFxEu/kjFZHJ55JLzqsbbpVHLbmKCTT2gYR2FV2WDKROGKuYbVkJIXdKAjJ0ONuK507NinYvlWXIoxHn22KAWOd9wKgSTNHBlmGkX+ts3hh ;{id = 55567 (ksk), size = 1024b}
+example.test. 3600 IN RRSIG DNSKEY 8 2 3600 20201116135527 20201019135527 55567 example.test. IbWMC6quOuZFNPAVxQLqCJ9nLhindBo826rnLcg5yMgs9dGUSPOCXAfHTmbgJAUNs9HTFfrJWNvasnETs0UOpmEuifGwWdH1OlME7Gny4RL2QmITUFeMW81Jz1tiVQxFXl6yxT0jxOxvz+bqMHlrz+8IeWQXcO+GZTPu8ueq30g=
+ENTRY_END
+
+; response to query of interest
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+www.example.test. IN A
+SECTION ANSWER
+; this is expired
+www.example.test. 3600 IN A 192.0.2.1
+www.example.test. 3600 IN RRSIG A 8 3 3600 20181116135527 20181019135527 55567 example.test. GIyjRM2i5plokjqjH7DRCaEi3AnP8+Wf02fOW6vrDSThr/yvvFXYKLhYwfddPNZRehANOmLQxuXyk6pEHh26Mi7T2Gh7n0SNkQ79e3Ba4Zu6Pih0nRBuEDvlSXjcFzvY9jx+7zZolg3KW8eC/Fn7moxAuDT/+1ZgZdhMOQ802+Q=
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+www.example.test. IN A
+ENTRY_END
+
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA DO SERVFAIL
+SECTION QUESTION
+www.example.test. IN A
+SECTION ANSWER
+ENTRY_END
+
+SCENARIO_END
diff --git a/testdata/respip_cname_loop_tagged.rpl b/testdata/respip_cname_loop_tagged.rpl
new file mode 100644
index 000000000000..a97ae77add0f
--- /dev/null
+++ b/testdata/respip_cname_loop_tagged.rpl
@@ -0,0 +1,254 @@
+; config options
+; The island of trust is at test.
+server:
+ target-fetch-policy: "0 0 0 0 0"
+ qname-minimisation: "no"
+ fake-sha1: yes
+ trust-anchor-signaling: no
+ minimal-responses: no
+ iter-scrub-promiscuous: no
+ aggressive-nsec: no
+ local-zone: test. nodefault
+ log-servfail: yes
+ discard-timeout: 0
+ module-config: "respip iterator"
+ define-tag: "turqoise"
+ access-control-tag: 127.0.0.0/8 "turqoise"
+ access-control-tag-data: 127.0.0.0/8 "turqoise" "A 127.0.0.1"
+
+ ; These two CNAMEs form a loop.
+ response-ip: 192.0.2.1/32 redirect
+ response-ip-data: 192.0.2.1/32 "CNAME loop2.far.test."
+ response-ip: 192.0.2.2/32 redirect
+ response-ip-data: 192.0.2.2/32 "CNAME loop1.far.test."
+
+stub-zone:
+ name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Test respip CNAME loop that is tagged.
+
+; 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
+test. IN NS
+SECTION AUTHORITY
+test. IN NS ns.test.
+SECTION ADDITIONAL
+ns.test. IN A 1.2.3.5
+ENTRY_END
+RANGE_END
+
+; ns.test
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.5
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+test. IN NS
+SECTION ANSWER
+test. IN NS ns.test
+SECTION ADDITIONAL
+ns.test. IN A 1.2.3.5
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.test. IN A
+SECTION ANSWER
+ns.test. IN A 1.2.3.5
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.test. IN AAAA
+SECTION AUTHORITY
+test. 3600 IN SOA ns.test. host.test. 20201 3600 1800 604800 3600
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+example.test. IN NS
+SECTION AUTHORITY
+example.test. IN NS ns.example.test.
+SECTION ADDITIONAL
+ns.example.test. IN A 1.2.3.4
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+far.test. IN NS
+SECTION AUTHORITY
+far.test. IN NS ns.far.test.
+SECTION ADDITIONAL
+ns.far.test. IN A 1.2.3.6
+ENTRY_END
+RANGE_END
+
+; ns.example.test.
+RANGE_BEGIN 0 20
+ ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.test. IN NS
+SECTION ANSWER
+example.test. IN NS ns.example.test.
+SECTION ADDITIONAL
+ns.example.test. IN A 1.2.3.4
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.example.test. IN A
+SECTION ANSWER
+ns.example.test. IN A 1.2.3.4
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.example.test. IN AAAA
+SECTION AUTHORITY
+example.test. 3600 IN SOA ns.example.test. host.example.test. 20301 3600 1800 604800 3600
+ENTRY_END
+
+; response to query of interest
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+www.example.test. IN A
+SECTION ANSWER
+www.example.test. 1 IN A 192.0.2.1
+ENTRY_END
+RANGE_END
+
+; ns.example.test.
+RANGE_BEGIN 45 100
+ ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+www.example.test. IN A
+SECTION ANSWER
+www.example.test. 1 IN A 192.0.2.1
+ENTRY_END
+RANGE_END
+
+; ns.far.test.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.6
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+far.test. IN NS
+SECTION ANSWER
+far.test. IN NS ns.far.test.
+SECTION ADDITIONAL
+ns.far.test. IN A 1.2.3.6
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.far.test. IN A
+SECTION ANSWER
+ns.far.test. IN A 1.2.3.6
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.far.test. IN AAAA
+SECTION AUTHORITY
+far.test. 3600 IN SOA ns.far.test. host.far.test. 20301 3600 1800 604800 3600
+ENTRY_END
+
+; response to query of interest
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+loop1.far.test. IN A
+SECTION ANSWER
+loop1.far.test. IN A 192.0.2.1
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+loop2.far.test. IN A
+SECTION ANSWER
+loop2.far.test. IN A 192.0.2.2
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+loop1.far.test. IN A
+ENTRY_END
+
+STEP 2 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA DO SERVFAIL
+SECTION QUESTION
+loop1.far.test. IN A
+SECTION ANSWER
+ENTRY_END
+
+SCENARIO_END
diff --git a/testdata/root_anchor.tdir/root_anchor.test b/testdata/root_anchor.tdir/root_anchor.test
index bbff028beb58..5fcd0316a127 100644
--- a/testdata/root_anchor.tdir/root_anchor.test
+++ b/testdata/root_anchor.tdir/root_anchor.test
@@ -29,7 +29,7 @@ else
fi
# use curl to see if the PGP certificate has been updated.
-curl --time-cond "20210908 17:00:00" https://data.iana.org/root-anchors/icannbundle.pem > newcert
+curl --time-cond "20260529 17:00:00" https://data.iana.org/root-anchors/icannbundle.pem > newcert
if test -n "`cat newcert`"; then
echo "icannbundle.pem has been updated"
cat newcert
diff --git a/testdata/rpz_clientip_passthru_cache.rpl b/testdata/rpz_clientip_passthru_cache.rpl
new file mode 100644
index 000000000000..4abada518389
--- /dev/null
+++ b/testdata/rpz_clientip_passthru_cache.rpl
@@ -0,0 +1,205 @@
+; config options
+server:
+ target-fetch-policy: "0 0 0 0 0"
+ qname-minimisation: no
+ minimal-responses: yes
+ log-servfail: yes
+ access-control: 0.0.0.0/0 allow
+ module-config: "respip iterator"
+
+rpz:
+ name: "rpz.example.com."
+ rpz-log: yes
+ rpz-log-name: "rpz.example.com"
+ zonefile:
+TEMPFILE_NAME rpz.example.com
+TEMPFILE_CONTENTS rpz.example.com
+$ORIGIN example.com.
+rpz 3600 IN SOA ns1.rpz.gotham.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.
+; whitelist client 192.0.3.33
+32.33.3.0.192.rpz-client-ip CNAME rpz-passthru.
+; block A 10.20.30.42
+32.42.30.20.10.rpz-ip CNAME .
+TEMPFILE_END
+
+stub-zone:
+ name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Test RPZ passthru query, with answer from cache.
+
+; 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
+tld. IN NS
+SECTION AUTHORITY
+tld. IN NS ns.tld.
+SECTION ADDITIONAL
+ns.tld. IN A 1.2.3.5
+ENTRY_END
+RANGE_END
+
+; ns.tld
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.5
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+tld. IN NS
+SECTION ANSWER
+tld. IN NS ns.tld
+SECTION ADDITIONAL
+ns.tld. IN A 1.2.3.5
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.tld. IN A
+SECTION ANSWER
+ns.tld. IN A 1.2.3.5
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.tld. IN AAAA
+SECTION AUTHORITY
+tld. 3600 IN SOA ns.tld. host.tld. 20201 3600 1800 604800 3600
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+example.tld. IN NS
+SECTION AUTHORITY
+example.tld. 5 IN NS ns.example.tld.
+SECTION ADDITIONAL
+ns.example.tld. 5 IN A 1.2.3.4
+ENTRY_END
+RANGE_END
+
+; ns.example.tld.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.tld. IN NS
+SECTION ANSWER
+example.tld. 86400 IN NS ns.example.tld.
+SECTION ADDITIONAL
+ns.example.tld. 86400 IN A 1.2.3.4
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.example.tld. IN A
+SECTION ANSWER
+ns.example.tld. IN A 1.2.3.4
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.example.tld. IN AAAA
+SECTION AUTHORITY
+example.tld. 3600 IN SOA ns.example.tld. host.example.tld. 20301 3600 1800 604800 3600
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+bad.example.tld. IN A
+SECTION ANSWER
+bad.example.tld. IN A 10.20.30.42
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+bad.example.tld. IN AAAA
+SECTION AUTHORITY
+example.tld. 3600 IN SOA ns.example.tld. host.example.tld. 20301 3600 1800 604800 3600
+ENTRY_END
+
+RANGE_END
+
+; query the record directly, from a blocked client
+STEP 1 QUERY ADDRESS 192.0.2.1
+ENTRY_BEGIN
+REPLY RD NOERROR
+SECTION QUESTION
+bad.example.tld. IN A
+ENTRY_END
+
+; RPZ works
+STEP 2 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NXDOMAIN
+SECTION QUESTION
+bad.example.tld. IN A
+SECTION ANSWER
+ENTRY_END
+
+; query the record directly, from the unblocked client
+STEP 5 QUERY ADDRESS 192.0.3.33
+ENTRY_BEGIN
+REPLY RD NOERROR
+SECTION QUESTION
+bad.example.tld. IN A
+ENTRY_END
+
+STEP 6 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+bad.example.tld. IN A
+SECTION ANSWER
+bad.example.tld. IN A 10.20.30.42
+ENTRY_END
+
+SCENARIO_END
diff --git a/testdata/rpz_clientip_passthru_dns64.rpl b/testdata/rpz_clientip_passthru_dns64.rpl
new file mode 100644
index 000000000000..91ca4ef180e9
--- /dev/null
+++ b/testdata/rpz_clientip_passthru_dns64.rpl
@@ -0,0 +1,247 @@
+; config options
+server:
+ target-fetch-policy: "0 0 0 0 0"
+ qname-minimisation: no
+ minimal-responses: yes
+ log-servfail: yes
+ access-control: 0.0.0.0/0 allow
+ ; module-config: "dns64 respip iterator"
+ ; or
+ module-config: "respip dns64 iterator"
+ dns64-prefix: 64:ff9b::/96
+ ; possibly as well:
+ ; response-ip: 192.0.2.66/32 always_nxdomain
+
+rpz:
+ name: "rpz.example.com."
+ rpz-log: yes
+ rpz-log-name: "rpz.example.com"
+ zonefile:
+TEMPFILE_NAME rpz.example.com
+TEMPFILE_CONTENTS rpz.example.com
+$ORIGIN example.com.
+rpz 3600 IN SOA ns1.rpz.gotham.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.
+; whitelist client 192.0.3.33
+32.33.3.0.192.rpz-client-ip CNAME rpz-passthru.
+; block A 10.20.30.42
+32.42.30.20.10.rpz-ip CNAME .
+TEMPFILE_END
+
+stub-zone:
+ name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Test RPZ passthru query with DNS64 enabled.
+
+; 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
+tld. IN NS
+SECTION AUTHORITY
+tld. IN NS ns.tld.
+SECTION ADDITIONAL
+ns.tld. IN A 1.2.3.5
+ENTRY_END
+RANGE_END
+
+; ns.tld
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.5
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+tld. IN NS
+SECTION ANSWER
+tld. IN NS ns.tld
+SECTION ADDITIONAL
+ns.tld. IN A 1.2.3.5
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.tld. IN A
+SECTION ANSWER
+ns.tld. IN A 1.2.3.5
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.tld. IN AAAA
+SECTION AUTHORITY
+tld. 3600 IN SOA ns.tld. host.tld. 20201 3600 1800 604800 3600
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+example.tld. IN NS
+SECTION AUTHORITY
+example.tld. 5 IN NS ns.example.tld.
+SECTION ADDITIONAL
+ns.example.tld. 5 IN A 1.2.3.4
+ENTRY_END
+RANGE_END
+
+; ns.example.tld.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.tld. IN NS
+SECTION ANSWER
+example.tld. 86400 IN NS ns.example.tld.
+SECTION ADDITIONAL
+ns.example.tld. 86400 IN A 1.2.3.4
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.example.tld. IN A
+SECTION ANSWER
+ns.example.tld. IN A 1.2.3.4
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.example.tld. IN AAAA
+SECTION AUTHORITY
+example.tld. 3600 IN SOA ns.example.tld. host.example.tld. 20301 3600 1800 604800 3600
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+bad.example.tld. IN A
+SECTION ANSWER
+bad.example.tld. IN A 10.20.30.42
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+bad.example.tld. IN AAAA
+SECTION AUTHORITY
+example.tld. 3600 IN SOA ns.example.tld. host.example.tld. 20301 3600 1800 604800 3600
+ENTRY_END
+
+RANGE_END
+
+; query the record directly, from the unblocked client
+STEP 5 QUERY ADDRESS 192.0.3.33
+ENTRY_BEGIN
+REPLY RD NOERROR
+SECTION QUESTION
+bad.example.tld. IN A
+ENTRY_END
+
+STEP 6 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+bad.example.tld. IN A
+SECTION ANSWER
+bad.example.tld. IN A 10.20.30.42
+ENTRY_END
+
+; query the record with dns64, from the unblocked client.
+STEP 10 QUERY ADDRESS 192.0.3.33
+ENTRY_BEGIN
+REPLY RD NOERROR
+SECTION QUESTION
+bad.example.tld. IN AAAA
+ENTRY_END
+
+STEP 11 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+bad.example.tld. IN AAAA
+SECTION ANSWER
+bad.example.tld. 3600 IN AAAA 64:ff9b::a14:1e2a
+ENTRY_END
+
+; query the record with dns64, from a blocked client.
+STEP 15 QUERY ADDRESS 192.0.2.1
+ENTRY_BEGIN
+REPLY RD NOERROR
+SECTION QUESTION
+bad.example.tld. IN AAAA
+ENTRY_END
+
+STEP 16 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+bad.example.tld. IN AAAA
+SECTION ANSWER
+SECTION AUTHORITY
+example.tld. 3600 IN SOA ns.example.tld. host.example.tld. 20301 3600 1800 604800 3600
+ENTRY_END
+
+; query the record directly, from a blocked client
+STEP 21 QUERY ADDRESS 192.0.2.1
+ENTRY_BEGIN
+REPLY RD NOERROR
+SECTION QUESTION
+bad.example.tld. IN A
+ENTRY_END
+
+; RPZ works
+STEP 22 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NXDOMAIN
+SECTION QUESTION
+bad.example.tld. IN A
+SECTION ANSWER
+ENTRY_END
+
+SCENARIO_END
diff --git a/testdata/rrsig_agr_wild.rpl b/testdata/rrsig_agr_wild.rpl
new file mode 100644
index 000000000000..7281aa7590ee
--- /dev/null
+++ b/testdata/rrsig_agr_wild.rpl
@@ -0,0 +1,374 @@
+; config options
+; The island of trust is at com.
+server:
+ trust-anchor: "test. DS 1444 8 2 8a87d067fd09a5965244fe2e317dd26d182c468e0a7f26ecc4c7b479bf89db9b"
+ val-override-date: "20201020135527"
+ target-fetch-policy: "0 0 0 0 0"
+ qname-minimisation: "no"
+ fake-sha1: yes
+ trust-anchor-signaling: no
+ minimal-responses: no
+ iter-scrub-promiscuous: no
+ aggressive-nsec: yes
+ local-zone: test. nodefault
+ log-servfail: yes
+
+stub-zone:
+ name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Test with RRSIG labels for wildcard with aggressive cache.
+
+; 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
+test. IN NS
+SECTION AUTHORITY
+test. IN NS ns.test.
+SECTION ADDITIONAL
+ns.test. IN A 1.2.3.5
+ENTRY_END
+RANGE_END
+
+; ns.test
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.5
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+test. IN NS
+SECTION ANSWER
+test. IN NS ns.test
+test. 3600 IN RRSIG NS 8 1 3600 20201116135527 20201019135527 1444 test. RGCxIO32TbbLTk6xZmTr+fjYPH50hntBxeOQ2DIj2pDsmjALcHYtVkOfpfk2EhOhHZd+9PLuoJPbJh6a9NqLSFeBvr0XZoCZoQ2g0tCHUNHcH5EVjA2TuYBQem6DVYnPLJ3914aRx0uA1j42b8dC2xsam/XkOo7U+dLbUW2Os1s=
+SECTION ADDITIONAL
+ns.test. IN A 1.2.3.5
+ns.test. 3600 IN RRSIG A 8 2 3600 20201116135527 20201019135527 1444 test. GskCc4/k6GjH9V9Jz2V5L2XLiizbOeWkB0feSbf+aN859S3vxVvtuqkvIgwY4LafUO1QAn/pUcv9zA7rcFO++rlg+8t6gvZTo9p3v0bfeIv2uJDsfSBD5jDh0WXlxjekfnrKrQp7zE+GiA93tWwKUWKPvxXDgP+n886e6WcbHJw=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.test. IN A
+SECTION ANSWER
+ns.test. IN A 1.2.3.5
+ns.test. 3600 IN RRSIG A 8 2 3600 20201116135527 20201019135527 1444 test. GskCc4/k6GjH9V9Jz2V5L2XLiizbOeWkB0feSbf+aN859S3vxVvtuqkvIgwY4LafUO1QAn/pUcv9zA7rcFO++rlg+8t6gvZTo9p3v0bfeIv2uJDsfSBD5jDh0WXlxjekfnrKrQp7zE+GiA93tWwKUWKPvxXDgP+n886e6WcbHJw=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.test. IN AAAA
+SECTION AUTHORITY
+test. 3600 IN SOA ns.test. host.test. 20201 3600 1800 604800 3600
+test. 3600 IN RRSIG SOA 8 1 3600 20201116135527 20201019135527 1444 test. IZJIDmEgf0W7A5G7hvvZ2hUqJ9Trbv1/i7ySapDmPbYV9lVCmHHobySxO01yDhI2/Pvpsvxqrm1Tiv3BxH8uzZ4keKgiQjBsSy4htAsFct9I4E7ly2glPj/Fm3oun3PsjJDv5QYhx0KS7w4IQKU7Nc9pfJc92uoUI5bdoC1pRGw=
+ns.test. 3600 IN NSEC nz.test. A RRSIG
+ns.test. 3600 IN RRSIG NSEC 8 2 3600 20201116135527 20201019135527 1444 test. PElArVB3KPg8KHAP7lzcNbhFuXNxTsHNTn1dZVncB5qmWRdIaeKpaXDjpH0JSXMaelGFS+/QhuQ6Hmw9+4VyZFRqMzGhw4agUR/2bxABHcDIG4ZpUwyeSP61ATTfHUkQVxaH2wjCWI/tfmesdP2xVE4GXyUvCIBxU914MkZbULU=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+test. IN DNSKEY
+SECTION ANSWER
+test. 3600 IN DNSKEY 257 3 8 AwEAAbd9WqjzE2Pynz21OG5doSf9hFzMr5dhzz2waZ3vTa+0o5r7AjTAqmA1yH/B3+aAMihUm5ucZSfVqo7+kOaRE8yFj9aivOmA1n1+JLevJq/oyvQyjxQN2Qb89LyaNUT5oKZIiL+uyyhNW3KDR3SSbQ/GBwQNDHVcZi+JDR3RC0r7 ;{id = 1444 (ksk), size = 1024b}
+test. 3600 IN RRSIG DNSKEY 8 1 3600 20201116135527 20201019135527 1444 test. UmRMS4iG9NBBHZYOtpwFFcJgbEb5SfHSgHd9XRe/8pTWM31WSDayn5ViPOBMqI1T5TXg2amc13dDI574xIM2oKMus3b5cBW72jJLW13jprBtslO6P8BMWb4HNnvLrJtQjwf3ErRirtTxinLmywQtmyr1cdthyG3Gp4N7i90fHSc=
+SECTION ADDITIONAL
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qname qtype
+ADJUST copy_id
+REPLY QR AA NXDOMAIN
+SECTION QUESTION
+domain1.test. IN A
+SECTION ANSWER
+SECTION AUTHORITY
+test. 3600 IN SOA ns.test. host.test. 20201 3600 1800 604800 3600
+test. 3600 IN RRSIG SOA 8 1 3600 20201116135527 20201019135527 1444 test. IZJIDmEgf0W7A5G7hvvZ2hUqJ9Trbv1/i7ySapDmPbYV9lVCmHHobySxO01yDhI2/Pvpsvxqrm1Tiv3BxH8uzZ4keKgiQjBsSy4htAsFct9I4E7ly2glPj/Fm3oun3PsjJDv5QYhx0KS7w4IQKU7Nc9pfJc92uoUI5bdoC1pRGw=
+test. 3600 IN NSEC abc.test. NS SOA DNSKEY RRSIG NSEC
+test. 3600 IN RRSIG NSEC 8 1 3600 20201116135527 20201019135527 1444 test. SHU0veyxtCpPvwdJxn2xCEq9xXJZLIvAlYYy7/dBMSjo6ugBPSxs1+8hUZFxks+YQoPLR5nTU0C0yuhZ9dfg/2VGkCYLsDLYnh1lJj6uQ2VgwfhbwSJC0E9hwYvD7yl6LcmpySbGiyI0cCbK/wWHE8wVw4VBcbuv01f3Cj6F+mo=
+cee.test. 3600 IN NSEC erts.test. RRSIG DS
+cee.test. 3600 IN RRSIG NSEC 8 2 3600 20201116135527 20201019135527 1444 test. kIveXrsXAeb7fsc3YNZ6UyJeCGxENpeUAl3mUCW2py+0vXfLjmDNs4FG5cwkLSIrni1z8k4939Bt+/3i+ABE84Utb77LpF29+dIay0L5V9c+avY2rJH8F1JU0kidtFQAccZqXuHtGSHHAi35w09UqghK+hNKfv+7qRUICX5ByCA=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qname qtype
+ADJUST copy_id
+REPLY QR AA NXDOMAIN
+SECTION QUESTION
+domain2.test. IN DS
+SECTION ANSWER
+SECTION AUTHORITY
+test. 3600 IN SOA ns.test. host.test. 20201 3600 1800 604800 3600
+test. 3600 IN RRSIG SOA 8 1 3600 20201116135527 20201019135527 1444 test. IZJIDmEgf0W7A5G7hvvZ2hUqJ9Trbv1/i7ySapDmPbYV9lVCmHHobySxO01yDhI2/Pvpsvxqrm1Tiv3BxH8uzZ4keKgiQjBsSy4htAsFct9I4E7ly2glPj/Fm3oun3PsjJDv5QYhx0KS7w4IQKU7Nc9pfJc92uoUI5bdoC1pRGw=
+test. 3600 IN NSEC abc.test. NS SOA DNSKEY RRSIG NSEC
+test. 3600 IN RRSIG NSEC 8 1 3600 20201116135527 20201019135527 1444 test. SHU0veyxtCpPvwdJxn2xCEq9xXJZLIvAlYYy7/dBMSjo6ugBPSxs1+8hUZFxks+YQoPLR5nTU0C0yuhZ9dfg/2VGkCYLsDLYnh1lJj6uQ2VgwfhbwSJC0E9hwYvD7yl6LcmpySbGiyI0cCbK/wWHE8wVw4VBcbuv01f3Cj6F+mo=
+cee.test. 3600 IN NSEC erts.test. RRSIG DS
+cee.test. 3600 IN RRSIG NSEC 8 2 3600 20201116135527 20201019135527 1444 test. kIveXrsXAeb7fsc3YNZ6UyJeCGxENpeUAl3mUCW2py+0vXfLjmDNs4FG5cwkLSIrni1z8k4939Bt+/3i+ABE84Utb77LpF29+dIay0L5V9c+avY2rJH8F1JU0kidtFQAccZqXuHtGSHHAi35w09UqghK+hNKfv+7qRUICX5ByCA=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qname qtype
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+example.test. IN DS
+SECTION ANSWER
+example.test. 3600 IN DS 55567 8 2 a2d578906330a10a57d40462257b6ce038bad3f7bf4a45c46c46086e20a94b39
+example.test. 3600 IN RRSIG DS 8 2 3600 20201116135527 20201019135527 1444 test. P7+FTYW2qHuJ4I1YbuvseEz5X1lOYAraGEHB3C5y0OOCQFmhmSiFRdquNi2NlpcS6FXLdsE0EU+Bo1+0atTG4EkMWXbpF21lrtbB51BdsnlX4Mzc/o375fvjiOMwmF6wPCUaOUN62jrVrhsE/hedaVyDphDToqL17ETohwgUO2I=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+example.test. IN NS
+SECTION AUTHORITY
+example.test. IN NS ns.example.test.
+example.test. 3600 IN DS 55567 8 2 a2d578906330a10a57d40462257b6ce038bad3f7bf4a45c46c46086e20a94b39
+example.test. 3600 IN RRSIG DS 8 2 3600 20201116135527 20201019135527 1444 test. P7+FTYW2qHuJ4I1YbuvseEz5X1lOYAraGEHB3C5y0OOCQFmhmSiFRdquNi2NlpcS6FXLdsE0EU+Bo1+0atTG4EkMWXbpF21lrtbB51BdsnlX4Mzc/o375fvjiOMwmF6wPCUaOUN62jrVrhsE/hedaVyDphDToqL17ETohwgUO2I=
+SECTION ADDITIONAL
+ns.example.test. IN A 1.2.3.4
+ENTRY_END
+
+RANGE_END
+
+; ns.example.test.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.test. IN NS
+SECTION ANSWER
+example.test. IN NS ns.example.test.
+example.test. 3600 IN RRSIG NS 8 2 3600 20201116135527 20201019135527 55567 example.test. l1JT0wMlK0YI7/CWHzexf/k0iafUhCgN+BdgjBXIRXmSQNf4HDTiAkbcWL2/15qtnp12nQy9JeiTdSQ3vtPoHAJX4C5uTWaze4ms+Wrrf+n92sLCjacP9x50uuicH3URT6cKb1QCAPwlvlWxIlZjAMYFScSns7+C441NMJT8aE4=
+SECTION ADDITIONAL
+ns.example.test. IN A 1.2.3.4
+ns.example.test. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55567 example.test. 2PWaVaccZFQgfPKXNsdEGYUVaashCAj1ZhBo9XRt5eQKUFvZcauBjMnXIuxZFyWeootn1fZGw6GuPI5W48Y0FDx38H6adprkFgQikso2Y64jDdDMWznSo38Z/XqP+U0+kq4vmwonvmEMpm7hKnNEXvhqGKyGzyBwb+CZVJ2L8Eo=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.example.test. IN A
+SECTION ANSWER
+ns.example.test. IN A 1.2.3.4
+ns.example.test. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55567 example.test. 2PWaVaccZFQgfPKXNsdEGYUVaashCAj1ZhBo9XRt5eQKUFvZcauBjMnXIuxZFyWeootn1fZGw6GuPI5W48Y0FDx38H6adprkFgQikso2Y64jDdDMWznSo38Z/XqP+U0+kq4vmwonvmEMpm7hKnNEXvhqGKyGzyBwb+CZVJ2L8Eo=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.example.test. IN AAAA
+SECTION AUTHORITY
+example.test. 3600 IN SOA ns.example.test. host.example.test. 20301 3600 1800 604800 3600
+example.test. 3600 IN RRSIG SOA 8 2 3600 20201116135527 20201019135527 55567 example.test. 2UUkScBAN37fJpSrelhE8DotKvmOzj3q9wicaanCIaCv95DE4nQnePih5B+ek3FIRjB/Uv2+z4Ro5Uxy94XAnlK0rCkDLSa0U9U7KP0ytc88sevO0x1SCPAMoZoJO6JqHkv42pdh54WSz+Zb/D8npY0j/tksHe/uX+VQnMymgb8=
+ns.example.test. 3600 IN NSEC nz.example.test. A RRSIG
+example.test. 3600 IN SOA ns.example.test. host.example.test. 20301 3600 1800 604800 3600
+ENTRY_END
+
+; response to DNSKEY priming query
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.test. IN DNSKEY
+SECTION ANSWER
+example.test. 3600 IN DNSKEY 257 3 8 AwEAAdug/L739i0mgN2nuK/bhxu3wFn5Ud9nK2+XUmZQlPUEZUC5YZvm1rfMmEWTGBn87fFxEu/kjFZHJ55JLzqsbbpVHLbmKCTT2gYR2FV2WDKROGKuYbVkJIXdKAjJ0ONuK507NinYvlWXIoxHn22KAWOd9wKgSTNHBlmGkX+ts3hh ;{id = 55567 (ksk), size = 1024b}
+example.test. 3600 IN RRSIG DNSKEY 8 2 3600 20201116135527 20201019135527 55567 example.test. IbWMC6quOuZFNPAVxQLqCJ9nLhindBo826rnLcg5yMgs9dGUSPOCXAfHTmbgJAUNs9HTFfrJWNvasnETs0UOpmEuifGwWdH1OlME7Gny4RL2QmITUFeMW81Jz1tiVQxFXl6yxT0jxOxvz+bqMHlrz+8IeWQXcO+GZTPu8ueq30g=
+ENTRY_END
+
+; response to query of interest
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+wild.example.test. IN A
+SECTION ANSWER
+wild.example.test. IN A 10.20.30.40
+; normal RRSIG:
+;wild.example.test. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55567 example.test. RzIsliJeEcLIHQGJqr5U2tfgxjzyxvwpqWYMdF2qOmb5a5erx3AFwRLbHhl7383Kdpdi+KxVKIWmkG6YCta0sWE42UeDXAVtZnFK/VeADRWpzWljQaTdIG8eN6FdB/X3gSPXnxMhsd9OoAWHPJYrwXtoFbciH6Hy0gl4Cosc+7Q=
+; with labelcount lower, 2 lower.
+; like it is : *.test. IN A 10.20.30.40
+wild.example.test. 3600 IN RRSIG A 8 1 3600 20201116135527 20201019135527 55567 example.test. XR1dPkaZmhIXoKRBmVLiDdIROYxlVNuII0kD/Nh/L3QteSvjwdfDBbVvwWGc+y011is0eFZBlFHWxmhw8BXytktlcJ3rZ1GPbcixkX7XPIIZER7jvZiFnKDS2Fwgh2wgpAXdo8KrmMgeUGPjP9scbzbBxLfSV/ja93PTuTSi6VA=
+SECTION AUTHORITY
+un.example.test. 3600 IN NSEC xy.example.test. A RRSIG
+un.example.test. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55567 example.test. rP0p0viq8A3y/RSth9BNkDVAufPRVp8uohX+Wp1lby4naxlOjZCONz3aeLz8c0XgrIUtdU4t2sZZz9gF9jfr/QnAr5JDMDAIpMXKYGx/3dk5mSP/OBRX9sNVuBdr9YuyYy5N9K97aKTSQTRNU8FdTVYx9yjImVlwA8KI+SkztJ4=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+wild2.example.test. IN DS
+SECTION ANSWER
+wild2.example.test. IN DS 12345 250 2 00000000
+; normal RRSIG
+; wild2.example.test. 3600 IN RRSIG DS 8 3 3600 20201116135527 20201019135527 55567 example.test. GdSaD9J3c2QwsAPRbzY7lbuqguaBNEu/19jnZIrdMx4nmRRaMOS1MqMGZyOJdYvupVA0zg32bhCbmZdHSQLwzybjIgixGeiPC9MnfHdSqZKG7QG/AlUR2A/Mhmedp7RngROgIf6c7de88zsX+60xSfvBgNtg55YmODHqOICvTLs=
+; with labelcount lower, 2 lower.
+; for *.test. IN DS 12345 250 2 00000000
+wild2.example.test. 3600 IN RRSIG DS 8 1 3600 20201116135527 20201019135527 55567 example.test. qZQ/bfTCVuGISm6Pkq6OYDnyZMx8/uQQE3vq402UVWyy7ZrDBVI/CAErEIqz7Xl4cGgFUoezL2LCBIS7BMERCbQ0cVm3YTpnSzCgiDNJsu9W778SLOTcWlqJaiJn9EieFGkiFo2k3c1iuW++yufdhQmuXGk+DdLzE87tgvIkQm0=
+SECTION AUTHORITY
+un.example.test. 3600 IN NSEC xy.example.test. A RRSIG
+un.example.test. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55567 example.test. rP0p0viq8A3y/RSth9BNkDVAufPRVp8uohX+Wp1lby4naxlOjZCONz3aeLz8c0XgrIUtdU4t2sZZz9gF9jfr/QnAr5JDMDAIpMXKYGx/3dk5mSP/OBRX9sNVuBdr9YuyYy5N9K97aKTSQTRNU8FdTVYx9yjImVlwA8KI+SkztJ4=
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+domain1.test. IN A
+ENTRY_END
+
+; Picks up NSECs for aggressive negative cache.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA AD DO NXDOMAIN
+SECTION QUESTION
+domain1.test. IN A
+SECTION AUTHORITY
+test. 3600 IN SOA ns.test. host.test. 20201 3600 1800 604800 3600
+test. 3600 IN RRSIG SOA 8 1 3600 20201116135527 20201019135527 1444 test. IZJIDmEgf0W7A5G7hvvZ2hUqJ9Trbv1/i7ySapDmPbYV9lVCmHHobySxO01yDhI2/Pvpsvxqrm1Tiv3BxH8uzZ4keKgiQjBsSy4htAsFct9I4E7ly2glPj/Fm3oun3PsjJDv5QYhx0KS7w4IQKU7Nc9pfJc92uoUI5bdoC1pRGw=
+test. 3600 IN NSEC abc.test. NS SOA DNSKEY RRSIG NSEC
+test. 3600 IN RRSIG NSEC 8 1 3600 20201116135527 20201019135527 1444 test. SHU0veyxtCpPvwdJxn2xCEq9xXJZLIvAlYYy7/dBMSjo6ugBPSxs1+8hUZFxks+YQoPLR5nTU0C0yuhZ9dfg/2VGkCYLsDLYnh1lJj6uQ2VgwfhbwSJC0E9hwYvD7yl6LcmpySbGiyI0cCbK/wWHE8wVw4VBcbuv01f3Cj6F+mo=
+cee.test. 3600 IN NSEC erts.test. RRSIG DS
+cee.test. 3600 IN RRSIG NSEC 8 2 3600 20201116135527 20201019135527 1444 test. kIveXrsXAeb7fsc3YNZ6UyJeCGxENpeUAl3mUCW2py+0vXfLjmDNs4FG5cwkLSIrni1z8k4939Bt+/3i+ABE84Utb77LpF29+dIay0L5V9c+avY2rJH8F1JU0kidtFQAccZqXuHtGSHHAi35w09UqghK+hNKfv+7qRUICX5ByCA=
+ENTRY_END
+
+STEP 20 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+wild.example.test. IN A
+ENTRY_END
+
+; query for the wildcard record.
+STEP 30 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA DO SERVFAIL
+SECTION QUESTION
+wild.example.test. IN A
+ENTRY_END
+;REPLY QR RD RA AD DO NXDOMAIN
+;SECTION QUESTION
+;domain1.test. IN A
+;SECTION ANSWER
+;wild.example.test. IN A 10.20.30.40
+;wild.example.test. 3600 IN RRSIG A 8 1 3600 20201116135527 20201019135527 55567 example.test. XR1dPkaZmhIXoKRBmVLiDdIROYxlVNuII0kD/Nh/L3QteSvjwdfDBbVvwWGc+y011is0eFZBlFHWxmhw8BXytktlcJ3rZ1GPbcixkX7XPIIZER7jvZiFnKDS2Fwgh2wgpAXdo8KrmMgeUGPjP9scbzbBxLfSV/ja93PTuTSi6VA=
+;SECTION AUTHORITY
+;un.example.test. 3600 IN NSEC xy.example.test. A RRSIG
+;un.example.test. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55567 example.test. rP0p0viq8A3y/RSth9BNkDVAufPRVp8uohX+Wp1lby4naxlOjZCONz3aeLz8c0XgrIUtdU4t2sZZz9gF9jfr/QnAr5JDMDAIpMXKYGx/3dk5mSP/OBRX9sNVuBdr9YuyYy5N9K97aKTSQTRNU8FdTVYx9yjImVlwA8KI+SkztJ4=
+;ENTRY_END
+
+;STEP 40 QUERY
+;ENTRY_BEGIN
+;REPLY RD DO
+;SECTION QUESTION
+;domain2.test. IN A
+;ENTRY_END
+;
+;; aggressive cache synthesis, the '*.test' from the wildcard lookup.
+;STEP 50 CHECK_ANSWER
+;ENTRY_BEGIN
+;MATCH all
+;REPLY QR RD RA DO SERVFAIL
+;SECTION QUESTION
+;domain2.test. IN A
+;SECTION ANSWER
+;ENTRY_END
+
+STEP 60 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+wild2.example.test. IN DS
+ENTRY_END
+
+; wild2 is for *.test DS
+STEP 70 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA DO SERVFAIL
+SECTION QUESTION
+wild2.example.test. IN DS
+SECTION ANSWER
+ENTRY_END
+
+STEP 80 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+domain3.test. IN A
+ENTRY_END
+
+; aggressive cache synthesis, the '*.test' from the wildcard lookup.
+; with '*.test' DS record.
+STEP 90 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+
+; The bad answer
+;REPLY QR RD RA DO NOERROR
+;SECTION QUESTION
+;domain3.test. IN A
+;SECTION ANSWER
+;domain3.test. 0 IN A 10.20.30.40
+;domain3.test. 0 IN RRSIG A 8 1 3600 20201116135527 20201019135527 55567 example.test. XR1dPkaZmhIXoKRBmVLiDdIROYxlVNuII0kD/Nh/L3QteSvjwdfDBbVvwWGc+y011is0eFZBlFHWxmhw8BXytktlcJ3rZ1GPbcixkX7XPIIZER7jvZiFnKDS2Fwgh2wgpAXdo8KrmMgeUGPjP9scbzbBxLfSV/ja93PTuTSi6VA= ;{id = 55567}
+;SECTION AUTHORITY
+;cee.test. 0 IN NSEC erts.test. DS RRSIG
+;cee.test. 0 IN RRSIG NSEC 8 2 3600 20201116135527 20201019135527 1444 test. kIveXrsXAeb7fsc3YNZ6UyJeCGxENpeUAl3mUCW2py+0vXfLjmDNs4FG5cwkLSIrni1z8k4939Bt+/3i+ABE84Utb77LpF29+dIay0L5V9c+avY2rJH8F1JU0kidtFQAccZqXuHtGSHHAi35w09UqghK+hNKfv+7qRUICX5ByCA= ;{id = 1444}
+
+; The correct answer
+REPLY QR RD RA AD DO NXDOMAIN
+SECTION QUESTION
+domain3.test. IN A
+SECTION AUTHORITY
+test. 3600 IN NSEC abc.test. NS SOA DNSKEY RRSIG NSEC
+test. 3600 IN RRSIG NSEC 8 1 3600 20201116135527 20201019135527 1444 test. SHU0veyxtCpPvwdJxn2xCEq9xXJZLIvAlYYy7/dBMSjo6ugBPSxs1+8hUZFxks+YQoPLR5nTU0C0yuhZ9dfg/2VGkCYLsDLYnh1lJj6uQ2VgwfhbwSJC0E9hwYvD7yl6LcmpySbGiyI0cCbK/wWHE8wVw4VBcbuv01f3Cj6F+mo=
+cee.test. 3600 IN NSEC erts.test. RRSIG DS
+cee.test. 3600 IN RRSIG NSEC 8 2 3600 20201116135527 20201019135527 1444 test. kIveXrsXAeb7fsc3YNZ6UyJeCGxENpeUAl3mUCW2py+0vXfLjmDNs4FG5cwkLSIrni1z8k4939Bt+/3i+ABE84Utb77LpF29+dIay0L5V9c+avY2rJH8F1JU0kidtFQAccZqXuHtGSHHAi35w09UqghK+hNKfv+7qRUICX5ByCA=
+test. 3600 IN SOA ns.test. host.test. 20201 3600 1800 604800 3600
+test. 3600 IN RRSIG SOA 8 1 3600 20201116135527 20201019135527 1444 test. IZJIDmEgf0W7A5G7hvvZ2hUqJ9Trbv1/i7ySapDmPbYV9lVCmHHobySxO01yDhI2/Pvpsvxqrm1Tiv3BxH8uzZ4keKgiQjBsSy4htAsFct9I4E7ly2glPj/Fm3oun3PsjJDv5QYhx0KS7w4IQKU7Nc9pfJc92uoUI5bdoC1pRGw=
+ENTRY_END
+
+SCENARIO_END
diff --git a/testdata/serve_expired_respip_cname.rpl b/testdata/serve_expired_respip_cname.rpl
new file mode 100644
index 000000000000..977836f5af61
--- /dev/null
+++ b/testdata/serve_expired_respip_cname.rpl
@@ -0,0 +1,290 @@
+; config options
+; The island of trust is at test.
+server:
+ target-fetch-policy: "0 0 0 0 0"
+ qname-minimisation: "no"
+ fake-sha1: yes
+ trust-anchor-signaling: no
+ minimal-responses: no
+ iter-scrub-promiscuous: no
+ aggressive-nsec: no
+ local-zone: test. nodefault
+ log-servfail: yes
+ discard-timeout: 0
+ module-config: "respip iterator"
+ serve-expired: yes
+ serve-expired-client-timeout: 500
+ serve-expired-ttl: 3600
+ serve-expired-reply-ttl: 30
+ response-ip: 192.0.2.0/24 redirect
+ response-ip-data: 192.0.2.0/24 "CNAME tgt.far.test."
+
+stub-zone:
+ name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Test expired response respip rewrite
+
+; 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
+test. IN NS
+SECTION AUTHORITY
+test. IN NS ns.test.
+SECTION ADDITIONAL
+ns.test. IN A 1.2.3.5
+ENTRY_END
+RANGE_END
+
+; ns.test
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.5
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+test. IN NS
+SECTION ANSWER
+test. IN NS ns.test
+SECTION ADDITIONAL
+ns.test. IN A 1.2.3.5
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.test. IN A
+SECTION ANSWER
+ns.test. IN A 1.2.3.5
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.test. IN AAAA
+SECTION AUTHORITY
+test. 3600 IN SOA ns.test. host.test. 20201 3600 1800 604800 3600
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+example.test. IN NS
+SECTION AUTHORITY
+example.test. IN NS ns.example.test.
+SECTION ADDITIONAL
+ns.example.test. IN A 1.2.3.4
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+far.test. IN NS
+SECTION AUTHORITY
+far.test. IN NS ns.far.test.
+SECTION ADDITIONAL
+ns.far.test. IN A 1.2.3.6
+ENTRY_END
+RANGE_END
+
+; ns.example.test.
+RANGE_BEGIN 0 20
+ ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.test. IN NS
+SECTION ANSWER
+example.test. IN NS ns.example.test.
+SECTION ADDITIONAL
+ns.example.test. IN A 1.2.3.4
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.example.test. IN A
+SECTION ANSWER
+ns.example.test. IN A 1.2.3.4
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.example.test. IN AAAA
+SECTION AUTHORITY
+example.test. 3600 IN SOA ns.example.test. host.example.test. 20301 3600 1800 604800 3600
+ENTRY_END
+
+; response to query of interest
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+www.example.test. IN A
+SECTION ANSWER
+www.example.test. 1 IN A 192.0.2.1
+ENTRY_END
+RANGE_END
+
+; ns.example.test.
+RANGE_BEGIN 45 100
+ ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+www.example.test. IN A
+SECTION ANSWER
+www.example.test. 1 IN A 192.0.2.1
+ENTRY_END
+RANGE_END
+
+; ns.far.test.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.6
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+far.test. IN NS
+SECTION ANSWER
+far.test. IN NS ns.far.test.
+SECTION ADDITIONAL
+ns.far.test. IN A 1.2.3.6
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.far.test. IN A
+SECTION ANSWER
+ns.far.test. IN A 1.2.3.6
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.far.test. IN AAAA
+SECTION AUTHORITY
+far.test. 3600 IN SOA ns.far.test. host.far.test. 20301 3600 1800 604800 3600
+ENTRY_END
+
+; response to query of interest
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+tgt.far.test. IN A
+SECTION ANSWER
+tgt.far.test. 1 IN A 10.20.30.40
+ENTRY_END
+RANGE_END
+
+; Put items with TTL 1 in cache.
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+tgt.far.test. IN A
+ENTRY_END
+
+STEP 2 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA DO NOERROR
+SECTION QUESTION
+tgt.far.test. IN A
+SECTION ANSWER
+tgt.far.test. 1 IN A 10.20.30.40
+ENTRY_END
+
+STEP 10 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+www.example.test. IN A
+ENTRY_END
+
+STEP 11 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA DO NOERROR
+SECTION QUESTION
+www.example.test. IN A
+SECTION ANSWER
+www.example.test. 3600 IN CNAME tgt.far.test.
+tgt.far.test. 1 IN A 10.20.30.40
+ENTRY_END
+
+; Move time to expire the cache entries.
+STEP 20 TIME_PASSES ELAPSE 2
+
+; the upstream RANGE is removed, so serve-expired has to act.
+
+STEP 30 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+www.example.test. IN A
+ENTRY_END
+
+; for serve expired callback.
+STEP 31 TIME_PASSES ELAPSE 2
+
+STEP 40 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA DO NOERROR
+SECTION QUESTION
+www.example.test. IN A
+SECTION ANSWER
+www.example.test. 3600 IN CNAME tgt.far.test.
+tgt.far.test. 1 IN A 10.20.30.40
+ENTRY_END
+
+; The pending lookup for the data, that was answered with expired to the client.
+STEP 50 TRAFFIC
+
+SCENARIO_END
diff --git a/testdata/serve_expired_respip_drop.rpl b/testdata/serve_expired_respip_drop.rpl
new file mode 100644
index 000000000000..de9eee7be57c
--- /dev/null
+++ b/testdata/serve_expired_respip_drop.rpl
@@ -0,0 +1,274 @@
+; config options
+; The island of trust is at test.
+server:
+ target-fetch-policy: "0 0 0 0 0"
+ qname-minimisation: "no"
+ fake-sha1: yes
+ trust-anchor-signaling: no
+ minimal-responses: no
+ iter-scrub-promiscuous: no
+ aggressive-nsec: no
+ local-zone: test. nodefault
+ log-servfail: yes
+ discard-timeout: 0
+ module-config: "respip iterator"
+ serve-expired: yes
+ serve-expired-client-timeout: 500
+ serve-expired-ttl: 3600
+ serve-expired-reply-ttl: 30
+ response-ip: 192.0.2.0/24 deny
+
+stub-zone:
+ name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Test expired response respip drop
+
+; 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
+test. IN NS
+SECTION AUTHORITY
+test. IN NS ns.test.
+SECTION ADDITIONAL
+ns.test. IN A 1.2.3.5
+ENTRY_END
+RANGE_END
+
+; ns.test
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.5
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+test. IN NS
+SECTION ANSWER
+test. IN NS ns.test
+SECTION ADDITIONAL
+ns.test. IN A 1.2.3.5
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.test. IN A
+SECTION ANSWER
+ns.test. IN A 1.2.3.5
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.test. IN AAAA
+SECTION AUTHORITY
+test. 3600 IN SOA ns.test. host.test. 20201 3600 1800 604800 3600
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+example.test. IN NS
+SECTION AUTHORITY
+example.test. IN NS ns.example.test.
+SECTION ADDITIONAL
+ns.example.test. IN A 1.2.3.4
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+far.test. IN NS
+SECTION AUTHORITY
+far.test. IN NS ns.far.test.
+SECTION ADDITIONAL
+ns.far.test. IN A 1.2.3.6
+ENTRY_END
+RANGE_END
+
+; ns.example.test.
+RANGE_BEGIN 0 20
+ ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.test. IN NS
+SECTION ANSWER
+example.test. IN NS ns.example.test.
+SECTION ADDITIONAL
+ns.example.test. IN A 1.2.3.4
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.example.test. IN A
+SECTION ANSWER
+ns.example.test. IN A 1.2.3.4
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.example.test. IN AAAA
+SECTION AUTHORITY
+example.test. 3600 IN SOA ns.example.test. host.example.test. 20301 3600 1800 604800 3600
+ENTRY_END
+
+; response to query of interest
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+www.example.test. IN A
+SECTION ANSWER
+www.example.test. 1 IN A 192.0.2.1
+ENTRY_END
+RANGE_END
+
+; ns.example.test.
+RANGE_BEGIN 45 100
+ ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+www.example.test. IN A
+SECTION ANSWER
+www.example.test. 1 IN A 192.0.2.1
+ENTRY_END
+RANGE_END
+
+; ns.far.test.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.6
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+far.test. IN NS
+SECTION ANSWER
+far.test. IN NS ns.far.test.
+SECTION ADDITIONAL
+ns.far.test. IN A 1.2.3.6
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.far.test. IN A
+SECTION ANSWER
+ns.far.test. IN A 1.2.3.6
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.far.test. IN AAAA
+SECTION AUTHORITY
+far.test. 3600 IN SOA ns.far.test. host.far.test. 20301 3600 1800 604800 3600
+ENTRY_END
+
+; response to query of interest
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+tgt.far.test. IN A
+SECTION ANSWER
+tgt.far.test. 1 IN A 10.20.30.40
+ENTRY_END
+RANGE_END
+
+; Put items with TTL 1 in cache.
+STEP 10 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+www.example.test. IN A
+ENTRY_END
+
+; Answer is dropped
+;STEP 11 CHECK_ANSWER
+;ENTRY_BEGIN
+;MATCH all
+;REPLY QR RD RA DO NOERROR
+;SECTION QUESTION
+;www.example.test. IN A
+;SECTION ANSWER
+;www.example.test. 3600 IN CNAME tgt.far.test.
+;tgt.far.test. 1 IN A 10.20.30.40
+;ENTRY_END
+
+; Move time to expire the cache entries.
+STEP 20 TIME_PASSES ELAPSE 2
+
+; the upstream RANGE is removed, so serve-expired has to act.
+
+STEP 30 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+www.example.test. IN A
+ENTRY_END
+
+; for serve expired callback.
+STEP 31 TIME_PASSES ELAPSE 2
+
+; Answer is dropped
+;STEP 40 CHECK_ANSWER
+;ENTRY_BEGIN
+;MATCH all
+;REPLY QR RD RA DO NOERROR
+;SECTION QUESTION
+;www.example.test. IN A
+;SECTION ANSWER
+;www.example.test. 3600 IN CNAME tgt.far.test.
+;tgt.far.test. 1 IN A 10.20.30.40
+;ENTRY_END
+
+; The pending lookup for the data, that was answered with expired to the client.
+STEP 50 TRAFFIC
+
+SCENARIO_END
diff --git a/testdata/serve_expired_rpz_drop.rpl b/testdata/serve_expired_rpz_drop.rpl
new file mode 100644
index 000000000000..ab5d49827ab7
--- /dev/null
+++ b/testdata/serve_expired_rpz_drop.rpl
@@ -0,0 +1,246 @@
+; config options
+; The island of trust is at test.
+server:
+ target-fetch-policy: "0 0 0 0 0"
+ qname-minimisation: "no"
+ fake-sha1: yes
+ trust-anchor-signaling: no
+ minimal-responses: no
+ iter-scrub-promiscuous: no
+ aggressive-nsec: no
+ local-zone: test. nodefault
+ log-servfail: yes
+ discard-timeout: 0
+ module-config: "respip iterator"
+ serve-expired: yes
+ serve-expired-client-timeout: 500
+ serve-expired-ttl: 3600
+ serve-expired-reply-ttl: 30
+
+rpz:
+ name: "rpz.example.com."
+ rpz-log: yes
+ rpz-log-name: "rpz.example.com"
+ zonefile:
+TEMPFILE_NAME rpz.example.com
+TEMPFILE_CONTENTS rpz.example.com
+$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.
+24.0.2.0.192.rpz-ip CNAME rpz-drop.
+TEMPFILE_END
+
+stub-zone:
+ name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Test expired response RPZ drop
+
+; 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
+test. IN NS
+SECTION AUTHORITY
+test. IN NS ns.test.
+SECTION ADDITIONAL
+ns.test. IN A 1.2.3.5
+ENTRY_END
+RANGE_END
+
+; ns.test
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.5
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+test. IN NS
+SECTION ANSWER
+test. IN NS ns.test
+SECTION ADDITIONAL
+ns.test. IN A 1.2.3.5
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.test. IN A
+SECTION ANSWER
+ns.test. IN A 1.2.3.5
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.test. IN AAAA
+SECTION AUTHORITY
+test. 3600 IN SOA ns.test. host.test. 20201 3600 1800 604800 3600
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+example.test. IN NS
+SECTION AUTHORITY
+example.test. IN NS ns.example.test.
+SECTION ADDITIONAL
+ns.example.test. IN A 1.2.3.4
+ENTRY_END
+RANGE_END
+
+; ns.example.test.
+RANGE_BEGIN 0 20
+ ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.test. IN NS
+SECTION ANSWER
+example.test. IN NS ns.example.test.
+SECTION ADDITIONAL
+ns.example.test. IN A 1.2.3.4
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.example.test. IN A
+SECTION ANSWER
+ns.example.test. IN A 1.2.3.4
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.example.test. IN AAAA
+SECTION AUTHORITY
+example.test. 3600 IN SOA ns.example.test. host.example.test. 20301 3600 1800 604800 3600
+ENTRY_END
+
+; response to query of interest
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+www.example.test. IN A
+SECTION ANSWER
+www.example.test. 1 IN A 192.0.2.1
+ENTRY_END
+RANGE_END
+
+; ns.example.test.
+RANGE_BEGIN 50 100
+ ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.example.test. IN A
+SECTION ANSWER
+ns.example.test. IN A 1.2.3.4
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.example.test. IN AAAA
+SECTION AUTHORITY
+example.test. 3600 IN SOA ns.example.test. host.example.test. 20301 3600 1800 604800 3600
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+www.example.test. IN A
+SECTION ANSWER
+www.example.test. 1 IN A 192.0.2.1
+ENTRY_END
+RANGE_END
+
+; Put items with TTL 1 in cache.
+STEP 10 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+www.example.test. IN A
+ENTRY_END
+
+; answer is dropped.
+;STEP 11 CHECK_ANSWER
+;ENTRY_BEGIN
+;MATCH all
+;REPLY QR RD RA DO NXDOMAIN
+;SECTION QUESTION
+;www.example.test. IN A
+;SECTION ANSWER
+;ENTRY_END
+
+; Move time to expire the cache entries.
+STEP 20 TIME_PASSES ELAPSE 2
+
+; the upstream RANGE is removed, so serve-expired has to act.
+
+STEP 30 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+www.example.test. IN A
+ENTRY_END
+
+; for serve expired callback.
+STEP 31 TIME_PASSES ELAPSE 2
+
+; answer is dropped
+;STEP 40 CHECK_ANSWER
+;ENTRY_BEGIN
+;MATCH all
+;REPLY QR RD RA DO NXDOMAIN
+;SECTION QUESTION
+;www.example.test. IN A
+;SECTION ANSWER
+;ENTRY_END
+
+; The pending lookup for the data, that was answered with expired to the client.
+STEP 50 TRAFFIC
+
+SCENARIO_END
diff --git a/testdata/serve_expired_rpz_nx.rpl b/testdata/serve_expired_rpz_nx.rpl
new file mode 100644
index 000000000000..19956545efb0
--- /dev/null
+++ b/testdata/serve_expired_rpz_nx.rpl
@@ -0,0 +1,319 @@
+; config options
+; The island of trust is at test.
+server:
+ target-fetch-policy: "0 0 0 0 0"
+ qname-minimisation: "no"
+ fake-sha1: yes
+ trust-anchor-signaling: no
+ minimal-responses: no
+ iter-scrub-promiscuous: no
+ aggressive-nsec: no
+ local-zone: test. nodefault
+ log-servfail: yes
+ discard-timeout: 0
+ module-config: "respip iterator"
+ serve-expired: yes
+ serve-expired-client-timeout: 500
+ serve-expired-ttl: 3600
+ serve-expired-reply-ttl: 30
+
+rpz:
+ name: "rpz.example.com."
+ rpz-log: yes
+ rpz-log-name: "rpz.example.com"
+ zonefile:
+TEMPFILE_NAME rpz.example.com
+TEMPFILE_CONTENTS rpz.example.com
+$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.
+24.0.2.0.192.rpz-ip CNAME .
+TEMPFILE_END
+
+stub-zone:
+ name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Test expired response RPZ rewrite
+
+; 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
+test. IN NS
+SECTION AUTHORITY
+test. IN NS ns.test.
+SECTION ADDITIONAL
+ns.test. IN A 1.2.3.5
+ENTRY_END
+RANGE_END
+
+; ns.test
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.5
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+test. IN NS
+SECTION ANSWER
+test. IN NS ns.test
+SECTION ADDITIONAL
+ns.test. IN A 1.2.3.5
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.test. IN A
+SECTION ANSWER
+ns.test. IN A 1.2.3.5
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.test. IN AAAA
+SECTION AUTHORITY
+test. 3600 IN SOA ns.test. host.test. 20201 3600 1800 604800 3600
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+example.test. IN NS
+SECTION AUTHORITY
+example.test. IN NS ns.example.test.
+SECTION ADDITIONAL
+ns.example.test. IN A 1.2.3.4
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+far.test. IN NS
+SECTION AUTHORITY
+far.test. IN NS ns.far.test.
+SECTION ADDITIONAL
+ns.far.test. IN A 1.2.3.6
+ENTRY_END
+RANGE_END
+
+; ns.example.test.
+RANGE_BEGIN 0 20
+ ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.test. IN NS
+SECTION ANSWER
+example.test. IN NS ns.example.test.
+SECTION ADDITIONAL
+ns.example.test. IN A 1.2.3.4
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.example.test. IN A
+SECTION ANSWER
+ns.example.test. IN A 1.2.3.4
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.example.test. IN AAAA
+SECTION AUTHORITY
+example.test. 3600 IN SOA ns.example.test. host.example.test. 20301 3600 1800 604800 3600
+ENTRY_END
+
+; response to query of interest
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+www.example.test. IN A
+SECTION ANSWER
+www.example.test. 1 IN A 192.0.2.1
+ENTRY_END
+RANGE_END
+
+; ns.example.test.
+RANGE_BEGIN 20 100
+ ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.example.test. IN A
+SECTION ANSWER
+ns.example.test. IN A 1.2.3.4
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.example.test. IN AAAA
+SECTION AUTHORITY
+example.test. 3600 IN SOA ns.example.test. host.example.test. 20301 3600 1800 604800 3600
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR SERVFAIL
+SECTION QUESTION
+www.example.test. IN A
+SECTION ANSWER
+ENTRY_END
+RANGE_END
+
+; ns.far.test.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.6
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+far.test. IN NS
+SECTION ANSWER
+far.test. IN NS ns.far.test.
+SECTION ADDITIONAL
+ns.far.test. IN A 1.2.3.6
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.far.test. IN A
+SECTION ANSWER
+ns.far.test. IN A 1.2.3.6
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.far.test. IN AAAA
+SECTION AUTHORITY
+far.test. 3600 IN SOA ns.far.test. host.far.test. 20301 3600 1800 604800 3600
+ENTRY_END
+
+; response to query of interest
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+tgt.far.test. IN A
+SECTION ANSWER
+tgt.far.test. 1 IN A 10.20.30.40
+ENTRY_END
+RANGE_END
+
+; Put items with TTL 1 in cache.
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+tgt.far.test. IN A
+ENTRY_END
+
+STEP 2 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA DO NOERROR
+SECTION QUESTION
+tgt.far.test. IN A
+SECTION ANSWER
+tgt.far.test. 1 IN A 10.20.30.40
+ENTRY_END
+
+STEP 10 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+www.example.test. IN A
+ENTRY_END
+
+STEP 11 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA DO NXDOMAIN
+SECTION QUESTION
+www.example.test. IN A
+SECTION ANSWER
+ENTRY_END
+
+; Move time to expire the cache entries.
+STEP 20 TIME_PASSES ELAPSE 2
+
+; the upstream RANGE is removed, so serve-expired has to act.
+
+STEP 30 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+www.example.test. IN A
+ENTRY_END
+
+; for serve expired callback.
+STEP 31 TIME_PASSES ELAPSE 2
+
+STEP 40 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA DO NXDOMAIN
+SECTION QUESTION
+www.example.test. IN A
+SECTION ANSWER
+ENTRY_END
+
+; The pending lookup for the data, that was answered with expired to the client.
+STEP 50 TRAFFIC
+
+SCENARIO_END
diff --git a/testdata/serve_expired_wildcard_swap_ad.rpl b/testdata/serve_expired_wildcard_swap_ad.rpl
new file mode 100644
index 000000000000..9bfd5caaa90d
--- /dev/null
+++ b/testdata/serve_expired_wildcard_swap_ad.rpl
@@ -0,0 +1,330 @@
+; config options
+; The island of trust is at test.
+server:
+ trust-anchor: "test. DS 1444 8 2 8a87d067fd09a5965244fe2e317dd26d182c468e0a7f26ecc4c7b479bf89db9b"
+ val-override-date: "20201020135527"
+ target-fetch-policy: "0 0 0 0 0"
+ qname-minimisation: "no"
+ fake-sha1: yes
+ trust-anchor-signaling: no
+ minimal-responses: no
+ iter-scrub-promiscuous: no
+ aggressive-nsec: no
+ local-zone: test. nodefault
+ log-servfail: yes
+ serve-expired: yes
+ serve-expired-client-timeout: 0
+
+stub-zone:
+ name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Test serve-expired on wildcard secure from another message
+
+; 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
+test. IN NS
+SECTION AUTHORITY
+test. IN NS ns.test.
+SECTION ADDITIONAL
+ns.test. IN A 1.2.3.5
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+alias.other.tld. IN A
+SECTION ANSWER
+alias.other.tld. IN CNAME www.example.test.
+ENTRY_END
+RANGE_END
+
+; ns.test
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.5
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+test. IN NS
+SECTION ANSWER
+test. IN NS ns.test
+test. 3600 IN RRSIG NS 8 1 3600 20201116135527 20201019135527 1444 test. RGCxIO32TbbLTk6xZmTr+fjYPH50hntBxeOQ2DIj2pDsmjALcHYtVkOfpfk2EhOhHZd+9PLuoJPbJh6a9NqLSFeBvr0XZoCZoQ2g0tCHUNHcH5EVjA2TuYBQem6DVYnPLJ3914aRx0uA1j42b8dC2xsam/XkOo7U+dLbUW2Os1s=
+SECTION ADDITIONAL
+ns.test. IN A 1.2.3.5
+ns.test. 3600 IN RRSIG A 8 2 3600 20201116135527 20201019135527 1444 test. GskCc4/k6GjH9V9Jz2V5L2XLiizbOeWkB0feSbf+aN859S3vxVvtuqkvIgwY4LafUO1QAn/pUcv9zA7rcFO++rlg+8t6gvZTo9p3v0bfeIv2uJDsfSBD5jDh0WXlxjekfnrKrQp7zE+GiA93tWwKUWKPvxXDgP+n886e6WcbHJw=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.test. IN A
+SECTION ANSWER
+ns.test. IN A 1.2.3.5
+ns.test. 3600 IN RRSIG A 8 2 3600 20201116135527 20201019135527 1444 test. GskCc4/k6GjH9V9Jz2V5L2XLiizbOeWkB0feSbf+aN859S3vxVvtuqkvIgwY4LafUO1QAn/pUcv9zA7rcFO++rlg+8t6gvZTo9p3v0bfeIv2uJDsfSBD5jDh0WXlxjekfnrKrQp7zE+GiA93tWwKUWKPvxXDgP+n886e6WcbHJw=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.test. IN AAAA
+SECTION AUTHORITY
+test. 3600 IN SOA ns.test. host.test. 20201 3600 1800 604800 3600
+test. 3600 IN RRSIG SOA 8 1 3600 20201116135527 20201019135527 1444 test. IZJIDmEgf0W7A5G7hvvZ2hUqJ9Trbv1/i7ySapDmPbYV9lVCmHHobySxO01yDhI2/Pvpsvxqrm1Tiv3BxH8uzZ4keKgiQjBsSy4htAsFct9I4E7ly2glPj/Fm3oun3PsjJDv5QYhx0KS7w4IQKU7Nc9pfJc92uoUI5bdoC1pRGw=
+ns.test. 3600 IN NSEC nz.test. A RRSIG
+ns.test. 3600 IN RRSIG NSEC 8 2 3600 20201116135527 20201019135527 1444 test. PElArVB3KPg8KHAP7lzcNbhFuXNxTsHNTn1dZVncB5qmWRdIaeKpaXDjpH0JSXMaelGFS+/QhuQ6Hmw9+4VyZFRqMzGhw4agUR/2bxABHcDIG4ZpUwyeSP61ATTfHUkQVxaH2wjCWI/tfmesdP2xVE4GXyUvCIBxU914MkZbULU=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+test. IN DNSKEY
+SECTION ANSWER
+test. 3600 IN DNSKEY 257 3 8 AwEAAbd9WqjzE2Pynz21OG5doSf9hFzMr5dhzz2waZ3vTa+0o5r7AjTAqmA1yH/B3+aAMihUm5ucZSfVqo7+kOaRE8yFj9aivOmA1n1+JLevJq/oyvQyjxQN2Qb89LyaNUT5oKZIiL+uyyhNW3KDR3SSbQ/GBwQNDHVcZi+JDR3RC0r7 ;{id = 1444 (ksk), size = 1024b}
+test. 3600 IN RRSIG DNSKEY 8 1 3600 20201116135527 20201019135527 1444 test. UmRMS4iG9NBBHZYOtpwFFcJgbEb5SfHSgHd9XRe/8pTWM31WSDayn5ViPOBMqI1T5TXg2amc13dDI574xIM2oKMus3b5cBW72jJLW13jprBtslO6P8BMWb4HNnvLrJtQjwf3ErRirtTxinLmywQtmyr1cdthyG3Gp4N7i90fHSc=
+SECTION ADDITIONAL
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qname qtype
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+example.test. IN DS
+SECTION ANSWER
+example.test. 3600 IN DS 55567 8 2 a2d578906330a10a57d40462257b6ce038bad3f7bf4a45c46c46086e20a94b39
+example.test. 3600 IN RRSIG DS 8 2 3600 20201116135527 20201019135527 1444 test. P7+FTYW2qHuJ4I1YbuvseEz5X1lOYAraGEHB3C5y0OOCQFmhmSiFRdquNi2NlpcS6FXLdsE0EU+Bo1+0atTG4EkMWXbpF21lrtbB51BdsnlX4Mzc/o375fvjiOMwmF6wPCUaOUN62jrVrhsE/hedaVyDphDToqL17ETohwgUO2I=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+example.test. IN NS
+SECTION AUTHORITY
+example.test. IN NS ns.example.test.
+example.test. 3600 IN DS 55567 8 2 a2d578906330a10a57d40462257b6ce038bad3f7bf4a45c46c46086e20a94b39
+example.test. 3600 IN RRSIG DS 8 2 3600 20201116135527 20201019135527 1444 test. P7+FTYW2qHuJ4I1YbuvseEz5X1lOYAraGEHB3C5y0OOCQFmhmSiFRdquNi2NlpcS6FXLdsE0EU+Bo1+0atTG4EkMWXbpF21lrtbB51BdsnlX4Mzc/o375fvjiOMwmF6wPCUaOUN62jrVrhsE/hedaVyDphDToqL17ETohwgUO2I=
+SECTION ADDITIONAL
+ns.example.test. IN A 1.2.3.4
+ENTRY_END
+RANGE_END
+
+; ns.example.test.
+RANGE_BEGIN 0 25
+ ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.test. IN NS
+SECTION ANSWER
+example.test. IN NS ns.example.test.
+example.test. 3600 IN RRSIG NS 8 2 3600 20201116135527 20201019135527 55567 example.test. l1JT0wMlK0YI7/CWHzexf/k0iafUhCgN+BdgjBXIRXmSQNf4HDTiAkbcWL2/15qtnp12nQy9JeiTdSQ3vtPoHAJX4C5uTWaze4ms+Wrrf+n92sLCjacP9x50uuicH3URT6cKb1QCAPwlvlWxIlZjAMYFScSns7+C441NMJT8aE4=
+SECTION ADDITIONAL
+ns.example.test. IN A 1.2.3.4
+ns.example.test. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55567 example.test. 2PWaVaccZFQgfPKXNsdEGYUVaashCAj1ZhBo9XRt5eQKUFvZcauBjMnXIuxZFyWeootn1fZGw6GuPI5W48Y0FDx38H6adprkFgQikso2Y64jDdDMWznSo38Z/XqP+U0+kq4vmwonvmEMpm7hKnNEXvhqGKyGzyBwb+CZVJ2L8Eo=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.example.test. IN A
+SECTION ANSWER
+ns.example.test. IN A 1.2.3.4
+ns.example.test. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55567 example.test. 2PWaVaccZFQgfPKXNsdEGYUVaashCAj1ZhBo9XRt5eQKUFvZcauBjMnXIuxZFyWeootn1fZGw6GuPI5W48Y0FDx38H6adprkFgQikso2Y64jDdDMWznSo38Z/XqP+U0+kq4vmwonvmEMpm7hKnNEXvhqGKyGzyBwb+CZVJ2L8Eo=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.example.test. IN AAAA
+SECTION AUTHORITY
+example.test. 3600 IN SOA ns.example.test. host.example.test. 20301 3600 1800 604800 3600
+example.test. 3600 IN RRSIG SOA 8 2 3600 20201116135527 20201019135527 55567 example.test. 2UUkScBAN37fJpSrelhE8DotKvmOzj3q9wicaanCIaCv95DE4nQnePih5B+ek3FIRjB/Uv2+z4Ro5Uxy94XAnlK0rCkDLSa0U9U7KP0ytc88sevO0x1SCPAMoZoJO6JqHkv42pdh54WSz+Zb/D8npY0j/tksHe/uX+VQnMymgb8=
+ns.example.test. 3600 IN NSEC nz.example.test. A RRSIG
+ENTRY_END
+
+; response to DNSKEY priming query
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.test. IN DNSKEY
+SECTION ANSWER
+example.test. 3600 IN DNSKEY 257 3 8 AwEAAdug/L739i0mgN2nuK/bhxu3wFn5Ud9nK2+XUmZQlPUEZUC5YZvm1rfMmEWTGBn87fFxEu/kjFZHJ55JLzqsbbpVHLbmKCTT2gYR2FV2WDKROGKuYbVkJIXdKAjJ0ONuK507NinYvlWXIoxHn22KAWOd9wKgSTNHBlmGkX+ts3hh ;{id = 55567 (ksk), size = 1024b}
+example.test. 3600 IN RRSIG DNSKEY 8 2 3600 20201116135527 20201019135527 55567 example.test. IbWMC6quOuZFNPAVxQLqCJ9nLhindBo826rnLcg5yMgs9dGUSPOCXAfHTmbgJAUNs9HTFfrJWNvasnETs0UOpmEuifGwWdH1OlME7Gny4RL2QmITUFeMW81Jz1tiVQxFXl6yxT0jxOxvz+bqMHlrz+8IeWQXcO+GZTPu8ueq30g=
+ENTRY_END
+
+; This wildcard exists in the zone. It is signed by example.test.
+; *.example.test. 10 IN A 10.20.30.33
+;
+; *.example.test. 10 IN A 10.20.30.33
+; *.example.test. 10 IN RRSIG A 8 2 10 20201116135527 20201019135527 55567 example.test. txqAQLRwy7ZdpExOnpLAQ1/xOz7gOp5C3XB/vg3CoTqvUtGqJ2MxEc3H0XtCfhSJJocbIof+lQSleAzs+Y/B0FV7YruCzPoNlZDW7qVaY0fITTwef97ui3AbxkOpNEptVN3xxsH3o5AYKAmh+oePzBsZlxmP4KuF9DoKl9/m52M=
+
+; response to query of interest
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+www.example.test. IN A
+SECTION ANSWER
+www.example.test. 10 IN A 10.20.30.40
+www.example.test. 10 IN RRSIG A 8 3 10 20201116135527 20201019135527 55567 example.test. 1by1cfB/FwdGm2gH/TUmn9KYzyIpd1i2iDwHXayd4uOuYC/v4CCHwl1pbhlz4J7WNoetG7QmVNKhXQyH1446BEUOpEe0skYOYb0r+gk3Cv6BwTH+bAzkiseFLUQ/YVbmUmLOXMm0fN1rP6sUM1aDBd+ugIr0UNPQJcbCTMjtvIQ=
+ENTRY_END
+RANGE_END
+
+RANGE_BEGIN 25 45
+ ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.example.test. IN A
+SECTION ANSWER
+ns.example.test. IN A 1.2.3.4
+ns.example.test. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55567 example.test. 2PWaVaccZFQgfPKXNsdEGYUVaashCAj1ZhBo9XRt5eQKUFvZcauBjMnXIuxZFyWeootn1fZGw6GuPI5W48Y0FDx38H6adprkFgQikso2Y64jDdDMWznSo38Z/XqP+U0+kq4vmwonvmEMpm7hKnNEXvhqGKyGzyBwb+CZVJ2L8Eo=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.example.test. IN AAAA
+SECTION AUTHORITY
+example.test. 3600 IN SOA ns.example.test. host.example.test. 20301 3600 1800 604800 3600
+example.test. 3600 IN RRSIG SOA 8 2 3600 20201116135527 20201019135527 55567 example.test. 2UUkScBAN37fJpSrelhE8DotKvmOzj3q9wicaanCIaCv95DE4nQnePih5B+ek3FIRjB/Uv2+z4Ro5Uxy94XAnlK0rCkDLSa0U9U7KP0ytc88sevO0x1SCPAMoZoJO6JqHkv42pdh54WSz+Zb/D8npY0j/tksHe/uX+VQnMymgb8=
+ns.example.test. 3600 IN NSEC nz.example.test. A RRSIG
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+www.example.test. IN A
+SECTION ANSWER
+; the wildcard put as the www.example.test.
+www.example.test. 10 IN A 10.20.30.33
+www.example.test. 10 IN RRSIG A 8 2 10 20201116135527 20201019135527 55567 example.test. txqAQLRwy7ZdpExOnpLAQ1/xOz7gOp5C3XB/vg3CoTqvUtGqJ2MxEc3H0XtCfhSJJocbIof+lQSleAzs+Y/B0FV7YruCzPoNlZDW7qVaY0fITTwef97ui3AbxkOpNEptVN3xxsH3o5AYKAmh+oePzBsZlxmP4KuF9DoKl9/m52M=
+; no wildcard NSEC proof
+ENTRY_END
+RANGE_END
+
+RANGE_BEGIN 45 65
+ ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+www.example.test. IN A
+SECTION ANSWER
+www.example.test. 10 IN A 10.20.30.40
+www.example.test. 10 IN RRSIG A 8 3 10 20201116135527 20201019135527 55567 example.test. 1by1cfB/FwdGm2gH/TUmn9KYzyIpd1i2iDwHXayd4uOuYC/v4CCHwl1pbhlz4J7WNoetG7QmVNKhXQyH1446BEUOpEe0skYOYb0r+gk3Cv6BwTH+bAzkiseFLUQ/YVbmUmLOXMm0fN1rP6sUM1aDBd+ugIr0UNPQJcbCTMjtvIQ=
+ENTRY_END
+RANGE_END
+
+; query for a message in cache that is going to be expired,
+; and then get an RRset replaced.
+; The query is for a record not covered by the wildcard in the zone.
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+www.example.test. IN A
+ENTRY_END
+
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA AD DO NOERROR
+SECTION QUESTION
+www.example.test. IN A
+SECTION ANSWER
+www.example.test. 10 IN A 10.20.30.40
+www.example.test. 10 IN RRSIG A 8 3 10 20201116135527 20201019135527 55567 example.test. 1by1cfB/FwdGm2gH/TUmn9KYzyIpd1i2iDwHXayd4uOuYC/v4CCHwl1pbhlz4J7WNoetG7QmVNKhXQyH1446BEUOpEe0skYOYb0r+gk3Cv6BwTH+bAzkiseFLUQ/YVbmUmLOXMm0fN1rP6sUM1aDBd+ugIr0UNPQJcbCTMjtvIQ=
+ENTRY_END
+
+; wait to expire the message
+STEP 20 TIME_PASSES ELAPSE 18
+
+; swap the www.example.test. RRset with another.
+
+STEP 30 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+alias.other.tld. IN A
+ENTRY_END
+
+STEP 40 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA DO SERVFAIL
+SECTION QUESTION
+alias.other.tld. IN A
+SECTION ANSWER
+; the wildcard proof fails here, but it validated the RRSIG over
+; wildcard A record.
+ENTRY_END
+
+; the serve expired response
+STEP 50 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+www.example.test. IN A
+ENTRY_END
+
+STEP 60 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA AD DO NOERROR
+SECTION QUESTION
+www.example.test. IN A
+SECTION ANSWER
+www.example.test. 10 IN A 10.20.30.40
+www.example.test. 10 IN RRSIG A 8 3 10 20201116135527 20201019135527 55567 example.test. 1by1cfB/FwdGm2gH/TUmn9KYzyIpd1i2iDwHXayd4uOuYC/v4CCHwl1pbhlz4J7WNoetG7QmVNKhXQyH1446BEUOpEe0skYOYb0r+gk3Cv6BwTH+bAzkiseFLUQ/YVbmUmLOXMm0fN1rP6sUM1aDBd+ugIr0UNPQJcbCTMjtvIQ=
+ENTRY_END
+
+SCENARIO_END
diff --git a/testdata/stat_values.tdir/stat_values.test b/testdata/stat_values.tdir/stat_values.test
index 9156f95a9716..c02bfcf19964 100644
--- a/testdata/stat_values.tdir/stat_values.test
+++ b/testdata/stat_values.tdir/stat_values.test
@@ -282,7 +282,7 @@ if grep "192.0.2.1" outfile; then
else
end 1
fi
-sleep 1 # make sure the outgoing UDP (and no edns1xx0 retry because not a smaller buffer size) are accounted for.
+sleep 1 # make sure the outgoing UDP (and no edns1xx2 retry because not a smaller buffer size) are accounted for.
check_stats "\
total.num.queries=1
total.num.expired=1
diff --git a/testdata/stop_nxdomain_label.rpl b/testdata/stop_nxdomain_label.rpl
new file mode 100644
index 000000000000..b882cf05f6eb
--- /dev/null
+++ b/testdata/stop_nxdomain_label.rpl
@@ -0,0 +1,115 @@
+; config options
+server:
+ target-fetch-policy: "0 0 0 0 0"
+ qname-minimisation: "no"
+ harden-below-nxdomain: yes
+ trust-anchor: ". IN DNSKEY 257 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3"
+ val-override-date: "20070916134226"
+ fake-sha1: yes
+ trust-anchor-signaling: no
+ aggressive-nsec: no
+ domain-insecure: "under.example.local"
+
+stub-zone:
+ name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+stub-zone:
+ name: "under.example.local"
+ stub-addr: 1.2.3.4
+CONFIG_END
+
+SCENARIO_BEGIN Test stop cache on nxdomain, with stub under intermediate label
+
+; 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 qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+. IN DNSKEY
+SECTION ANSWER
+. 3600 IN DNSKEY 257 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30900 (ksk), size = 512b}
+. 3600 IN RRSIG DNSKEY 5 0 3600 20070926134150 20070829134150 30900 . BlVcSh8xSgm7ne+XVCJwNHQKjk5kTJgG4Fa3sOSfp3YUjb2YclmVWyIw7XEHl0/C6CN5gdy18idnM6vT6Hy42A== ;{id = 30900}
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NXDOMAIN
+SECTION QUESTION
+example.local. IN A
+SECTION AUTHORITY
+. 86400 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2010111601 1800 900 604800 86400
+. 86400 IN RRSIG SOA 5 0 86400 20070926134150 20070829134150 30900 . bOYbFZZp7vWWC2oxV+kph+YXjoQj2f6QJktlgmzRI7oReFX9jy/LibTPQi/sW0SGHpLaj3G5p4IfIlBibne4DA== ;{id = 30900}
+. 86400 IN NSEC ac. NS SOA RRSIG NSEC DNSKEY
+. 86400 IN RRSIG NSEC 5 0 86400 20070926134150 20070829134150 30900 . U+/m5+FmczzkosEx1aTP7MK/F3PpcKWct8CzM1jhjwNe2RlnW7qFe0IH8SLzD/elvxDTQMpJSMlKOhUUdapB8g== ;{id = 30900}
+lk. 86400 IN NSEC lr. NS DS RRSIG NSEC
+lk. 86400 IN RRSIG NSEC 5 1 86400 20070926134150 20070829134150 30900 . j6Pw5Eu9vGHDJcckTSWa8YD1b7FV7c/Z8aVkLfJCH+iPcaa40/LSp784+t2PnAAXL8fgriNL6jF/ve1rti3ANQ== ;{id = 30900}
+ENTRY_END
+RANGE_END
+
+; under.example.local
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+www.under.example.local. IN A
+SECTION ANSWER
+www.under.example.local. IN A 10.20.30.40
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+example.local. IN A
+ENTRY_END
+
+; recursion happens here.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NXDOMAIN
+SECTION QUESTION
+example.local. IN A
+SECTION AUTHORITY
+. 86400 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2010111601 1800 900 604800 86400
+ENTRY_END
+
+STEP 20 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www.under.example.local. IN A
+ENTRY_END
+
+; this query does not get sent to K-ROOT.
+STEP 30 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+www.under.example.local. IN A
+SECTION ANSWER
+www.under.example.local. IN A 10.20.30.40
+ENTRY_END
+
+SCENARIO_END
diff --git a/testdata/stop_nxdomain_minimised.rpl b/testdata/stop_nxdomain_minimised.rpl
index 0de22edde641..d6e881f59e87 100644
--- a/testdata/stop_nxdomain_minimised.rpl
+++ b/testdata/stop_nxdomain_minimised.rpl
@@ -7,6 +7,7 @@ server:
val-override-date: "20070916134226"
fake-sha1: yes
trust-anchor-signaling: no
+ domain-insecure: "anotherexample.local"
stub-zone:
name: "."
@@ -69,7 +70,7 @@ REPLY QR AA NOERROR
SECTION QUESTION
anotherexample.local. IN TXT
SECTION ANSWER
-anotherexample.local. 86400 IN TXT "should not resolve this"
+anotherexample.local. 86400 IN TXT "stub works"
ENTRY_END
RANGE_END
@@ -95,7 +96,7 @@ STEP 20 QUERY
ENTRY_BEGIN
REPLY RD
SECTION QUESTION
-anotherexample.local. IN TXT
+anotherexample2.local. IN TXT
ENTRY_END
; query should be answered using NXDOMAIN for local in cache
@@ -104,9 +105,27 @@ ENTRY_BEGIN
MATCH all
REPLY QR RD RA NXDOMAIN
SECTION QUESTION
-anotherexample.local. IN TXT
+anotherexample2.local. IN TXT
SECTION AUTHORITY
. 86400 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2010111601 1800 900 604800 86400
ENTRY_END
+STEP 40 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+anotherexample.local. IN TXT
+ENTRY_END
+
+; The stub stops going higher in the negative cache.
+STEP 50 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+anotherexample.local. IN TXT
+SECTION ANSWER
+anotherexample.local. 86400 IN TXT "stub works"
+ENTRY_END
+
SCENARIO_END
diff --git a/testdata/sub_ds_deepcopy.rpl b/testdata/sub_ds_deepcopy.rpl
new file mode 100644
index 000000000000..2845bfe32d92
--- /dev/null
+++ b/testdata/sub_ds_deepcopy.rpl
@@ -0,0 +1,676 @@
+; config options
+; The island of trust is at test.
+server:
+ access-control: 10.0.0.0/8 allow
+ trust-anchor: "test. DS 1444 8 2 8a87d067fd09a5965244fe2e317dd26d182c468e0a7f26ecc4c7b479bf89db9b"
+ val-override-date: "20201020135527"
+ target-fetch-policy: "0 0 0 0 0"
+ qname-minimisation: "no"
+ fake-sha1: yes
+ trust-anchor-signaling: no
+ minimal-responses: no
+ iter-scrub-promiscuous: no
+ aggressive-nsec: yes
+ local-zone: test. nodefault
+ log-servfail: yes
+ ; otherwise after timers, the old replies are discarded as old.
+ discard-timeout: 0
+
+stub-zone:
+ name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Test sub DS deep copy during DNSSEC validation suspension
+
+; K.ROOT-SERVERS.NET.
+RANGE_BEGIN 0 20
+ 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
+test. IN NS
+SECTION AUTHORITY
+test. IN NS ns.test.
+SECTION ADDITIONAL
+ns.test. IN A 1.2.3.5
+ENTRY_END
+RANGE_END
+
+; ns.test
+RANGE_BEGIN 0 20
+ ADDRESS 1.2.3.5
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+test. IN NS
+SECTION ANSWER
+test. IN NS ns.test
+test. 3600 IN RRSIG NS 8 1 3600 20201116135527 20201019135527 1444 test. RGCxIO32TbbLTk6xZmTr+fjYPH50hntBxeOQ2DIj2pDsmjALcHYtVkOfpfk2EhOhHZd+9PLuoJPbJh6a9NqLSFeBvr0XZoCZoQ2g0tCHUNHcH5EVjA2TuYBQem6DVYnPLJ3914aRx0uA1j42b8dC2xsam/XkOo7U+dLbUW2Os1s=
+SECTION ADDITIONAL
+ns.test. IN A 1.2.3.5
+ns.test. 3600 IN RRSIG A 8 2 3600 20201116135527 20201019135527 1444 test. GskCc4/k6GjH9V9Jz2V5L2XLiizbOeWkB0feSbf+aN859S3vxVvtuqkvIgwY4LafUO1QAn/pUcv9zA7rcFO++rlg+8t6gvZTo9p3v0bfeIv2uJDsfSBD5jDh0WXlxjekfnrKrQp7zE+GiA93tWwKUWKPvxXDgP+n886e6WcbHJw=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.test. IN A
+SECTION ANSWER
+ns.test. IN A 1.2.3.5
+ns.test. 3600 IN RRSIG A 8 2 3600 20201116135527 20201019135527 1444 test. GskCc4/k6GjH9V9Jz2V5L2XLiizbOeWkB0feSbf+aN859S3vxVvtuqkvIgwY4LafUO1QAn/pUcv9zA7rcFO++rlg+8t6gvZTo9p3v0bfeIv2uJDsfSBD5jDh0WXlxjekfnrKrQp7zE+GiA93tWwKUWKPvxXDgP+n886e6WcbHJw=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.test. IN AAAA
+SECTION AUTHORITY
+test. 3600 IN SOA ns.test. host.test. 20201 3600 1800 604800 3600
+test. 3600 IN RRSIG SOA 8 1 3600 20201116135527 20201019135527 1444 test. IZJIDmEgf0W7A5G7hvvZ2hUqJ9Trbv1/i7ySapDmPbYV9lVCmHHobySxO01yDhI2/Pvpsvxqrm1Tiv3BxH8uzZ4keKgiQjBsSy4htAsFct9I4E7ly2glPj/Fm3oun3PsjJDv5QYhx0KS7w4IQKU7Nc9pfJc92uoUI5bdoC1pRGw=
+ns.test. 3600 IN NSEC nz.test. A RRSIG
+ns.test. 3600 IN RRSIG NSEC 8 2 3600 20201116135527 20201019135527 1444 test. PElArVB3KPg8KHAP7lzcNbhFuXNxTsHNTn1dZVncB5qmWRdIaeKpaXDjpH0JSXMaelGFS+/QhuQ6Hmw9+4VyZFRqMzGhw4agUR/2bxABHcDIG4ZpUwyeSP61ATTfHUkQVxaH2wjCWI/tfmesdP2xVE4GXyUvCIBxU914MkZbULU=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+test. IN DNSKEY
+SECTION ANSWER
+test. 3600 IN DNSKEY 257 3 8 AwEAAbd9WqjzE2Pynz21OG5doSf9hFzMr5dhzz2waZ3vTa+0o5r7AjTAqmA1yH/B3+aAMihUm5ucZSfVqo7+kOaRE8yFj9aivOmA1n1+JLevJq/oyvQyjxQN2Qb89LyaNUT5oKZIiL+uyyhNW3KDR3SSbQ/GBwQNDHVcZi+JDR3RC0r7 ;{id = 1444 (ksk), size = 1024b}
+test. 3600 IN RRSIG DNSKEY 8 1 3600 20201116135527 20201019135527 1444 test. UmRMS4iG9NBBHZYOtpwFFcJgbEb5SfHSgHd9XRe/8pTWM31WSDayn5ViPOBMqI1T5TXg2amc13dDI574xIM2oKMus3b5cBW72jJLW13jprBtslO6P8BMWb4HNnvLrJtQjwf3ErRirtTxinLmywQtmyr1cdthyG3Gp4N7i90fHSc=
+SECTION ADDITIONAL
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qname qtype
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+example.test. IN DS
+SECTION ANSWER
+example.test. 3600 IN DS 55567 8 2 a2d578906330a10a57d40462257b6ce038bad3f7bf4a45c46c46086e20a94b39
+example.test. 3600 IN RRSIG DS 8 2 3600 20201116135527 20201019135527 1444 test. P7+FTYW2qHuJ4I1YbuvseEz5X1lOYAraGEHB3C5y0OOCQFmhmSiFRdquNi2NlpcS6FXLdsE0EU+Bo1+0atTG4EkMWXbpF21lrtbB51BdsnlX4Mzc/o375fvjiOMwmF6wPCUaOUN62jrVrhsE/hedaVyDphDToqL17ETohwgUO2I=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+example.test. IN NS
+SECTION AUTHORITY
+example.test. IN NS ns.example.test.
+example.test. 3600 IN DS 55567 8 2 a2d578906330a10a57d40462257b6ce038bad3f7bf4a45c46c46086e20a94b39
+example.test. 3600 IN RRSIG DS 8 2 3600 20201116135527 20201019135527 1444 test. P7+FTYW2qHuJ4I1YbuvseEz5X1lOYAraGEHB3C5y0OOCQFmhmSiFRdquNi2NlpcS6FXLdsE0EU+Bo1+0atTG4EkMWXbpF21lrtbB51BdsnlX4Mzc/o375fvjiOMwmF6wPCUaOUN62jrVrhsE/hedaVyDphDToqL17ETohwgUO2I=
+SECTION ADDITIONAL
+ns.example.test. IN A 1.2.3.4
+ENTRY_END
+RANGE_END
+
+; ns.example.test.
+RANGE_BEGIN 0 25
+ ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.test. IN NS
+SECTION ANSWER
+example.test. IN NS ns.example.test.
+example.test. 3600 IN RRSIG NS 8 2 3600 20201116135527 20201019135527 55567 example.test. l1JT0wMlK0YI7/CWHzexf/k0iafUhCgN+BdgjBXIRXmSQNf4HDTiAkbcWL2/15qtnp12nQy9JeiTdSQ3vtPoHAJX4C5uTWaze4ms+Wrrf+n92sLCjacP9x50uuicH3URT6cKb1QCAPwlvlWxIlZjAMYFScSns7+C441NMJT8aE4=
+SECTION ADDITIONAL
+ns.example.test. IN A 1.2.3.4
+ns.example.test. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55567 example.test. 2PWaVaccZFQgfPKXNsdEGYUVaashCAj1ZhBo9XRt5eQKUFvZcauBjMnXIuxZFyWeootn1fZGw6GuPI5W48Y0FDx38H6adprkFgQikso2Y64jDdDMWznSo38Z/XqP+U0+kq4vmwonvmEMpm7hKnNEXvhqGKyGzyBwb+CZVJ2L8Eo=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.example.test. IN A
+SECTION ANSWER
+ns.example.test. IN A 1.2.3.4
+ns.example.test. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55567 example.test. 2PWaVaccZFQgfPKXNsdEGYUVaashCAj1ZhBo9XRt5eQKUFvZcauBjMnXIuxZFyWeootn1fZGw6GuPI5W48Y0FDx38H6adprkFgQikso2Y64jDdDMWznSo38Z/XqP+U0+kq4vmwonvmEMpm7hKnNEXvhqGKyGzyBwb+CZVJ2L8Eo=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.example.test. IN AAAA
+SECTION AUTHORITY
+example.test. 3600 IN SOA ns.example.test. host.example.test. 20301 3600 1800 604800 3600
+example.test. 3600 IN RRSIG SOA 8 2 3600 20201116135527 20201019135527 55567 example.test. 2UUkScBAN37fJpSrelhE8DotKvmOzj3q9wicaanCIaCv95DE4nQnePih5B+ek3FIRjB/Uv2+z4Ro5Uxy94XAnlK0rCkDLSa0U9U7KP0ytc88sevO0x1SCPAMoZoJO6JqHkv42pdh54WSz+Zb/D8npY0j/tksHe/uX+VQnMymgb8=
+ns.example.test. 3600 IN NSEC nz.example.test. A RRSIG
+ns.example.test. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55567 example.test. v/5aO/n8Ow21y7LE7JKZsFkUJU5MjIfadVRm2Tdb8f3RLwYDdBTs3aWeeEQdCRSUF61TmfJM1jIxlWQPuHbqzGnjSk7adw9gFpP7wFwoqG3/xdCFHoxo/3/1F/4Ankey3sDgKgOFsgnu40TlL36mGPYszeK+/2o3SAx2GM+3BdU=
+ENTRY_END
+
+; response to DNSKEY priming query
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.test. IN DNSKEY
+SECTION ANSWER
+example.test. 3600 IN DNSKEY 257 3 8 AwEAAdug/L739i0mgN2nuK/bhxu3wFn5Ud9nK2+XUmZQlPUEZUC5YZvm1rfMmEWTGBn87fFxEu/kjFZHJ55JLzqsbbpVHLbmKCTT2gYR2FV2WDKROGKuYbVkJIXdKAjJ0ONuK507NinYvlWXIoxHn22KAWOd9wKgSTNHBlmGkX+ts3hh ;{id = 55567 (ksk), size = 1024b}
+example.test. 3600 IN RRSIG DNSKEY 8 2 3600 20201116135527 20201019135527 55567 example.test. IbWMC6quOuZFNPAVxQLqCJ9nLhindBo826rnLcg5yMgs9dGUSPOCXAfHTmbgJAUNs9HTFfrJWNvasnETs0UOpmEuifGwWdH1OlME7Gny4RL2QmITUFeMW81Jz1tiVQxFXl6yxT0jxOxvz+bqMHlrz+8IeWQXcO+GZTPu8ueq30g=
+ENTRY_END
+
+; response to query of interest
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+www.example.test. IN A
+SECTION ANSWER
+www.example.test. IN A 1.2.3.4
+www.example.test. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55567 example.test. sbK517uW0iiO1FbJ+rCSrISg6RoIsXAFmd8NgF9mERAefkiVYTjUxdm4USccVg4Xwig9S14yANFPXY1QQbTxx25mcOdw4wyJUjGZosaIYS2DSTsAnDSgEOHPiEnYM84/UCjfWY54P4SFnCx8esaZfSdMu6YG+d3CxR1wJGloju4=
+ENTRY_END
+RANGE_END
+
+; ns.example.test. later at 50
+RANGE_BEGIN 50 55
+ ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.test. IN NS
+SECTION ANSWER
+example.test. IN NS ns.example.test.
+example.test. 3600 IN RRSIG NS 8 2 3600 20201116135527 20201019135527 55567 example.test. l1JT0wMlK0YI7/CWHzexf/k0iafUhCgN+BdgjBXIRXmSQNf4HDTiAkbcWL2/15qtnp12nQy9JeiTdSQ3vtPoHAJX4C5uTWaze4ms+Wrrf+n92sLCjacP9x50uuicH3URT6cKb1QCAPwlvlWxIlZjAMYFScSns7+C441NMJT8aE4=
+SECTION ADDITIONAL
+ns.example.test. IN A 1.2.3.4
+ns.example.test. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55567 example.test. 2PWaVaccZFQgfPKXNsdEGYUVaashCAj1ZhBo9XRt5eQKUFvZcauBjMnXIuxZFyWeootn1fZGw6GuPI5W48Y0FDx38H6adprkFgQikso2Y64jDdDMWznSo38Z/XqP+U0+kq4vmwonvmEMpm7hKnNEXvhqGKyGzyBwb+CZVJ2L8Eo=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.example.test. IN A
+SECTION ANSWER
+ns.example.test. IN A 1.2.3.4
+ns.example.test. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55567 example.test. 2PWaVaccZFQgfPKXNsdEGYUVaashCAj1ZhBo9XRt5eQKUFvZcauBjMnXIuxZFyWeootn1fZGw6GuPI5W48Y0FDx38H6adprkFgQikso2Y64jDdDMWznSo38Z/XqP+U0+kq4vmwonvmEMpm7hKnNEXvhqGKyGzyBwb+CZVJ2L8Eo=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.example.test. IN AAAA
+SECTION AUTHORITY
+example.test. 3600 IN SOA ns.example.test. host.example.test. 20301 3600 1800 604800 3600
+example.test. 3600 IN RRSIG SOA 8 2 3600 20201116135527 20201019135527 55567 example.test. 2UUkScBAN37fJpSrelhE8DotKvmOzj3q9wicaanCIaCv95DE4nQnePih5B+ek3FIRjB/Uv2+z4Ro5Uxy94XAnlK0rCkDLSa0U9U7KP0ytc88sevO0x1SCPAMoZoJO6JqHkv42pdh54WSz+Zb/D8npY0j/tksHe/uX+VQnMymgb8=
+ns.example.test. 3600 IN NSEC nz.example.test. A RRSIG
+ns.example.test. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55567 example.test. v/5aO/n8Ow21y7LE7JKZsFkUJU5MjIfadVRm2Tdb8f3RLwYDdBTs3aWeeEQdCRSUF61TmfJM1jIxlWQPuHbqzGnjSk7adw9gFpP7wFwoqG3/xdCFHoxo/3/1F/4Ankey3sDgKgOFsgnu40TlL36mGPYszeK+/2o3SAx2GM+3BdU=
+ENTRY_END
+
+; response to DNSKEY priming query
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.test. IN DNSKEY
+SECTION ANSWER
+example.test. 3600 IN DNSKEY 257 3 8 AwEAAdug/L739i0mgN2nuK/bhxu3wFn5Ud9nK2+XUmZQlPUEZUC5YZvm1rfMmEWTGBn87fFxEu/kjFZHJ55JLzqsbbpVHLbmKCTT2gYR2FV2WDKROGKuYbVkJIXdKAjJ0ONuK507NinYvlWXIoxHn22KAWOd9wKgSTNHBlmGkX+ts3hh ;{id = 55567 (ksk), size = 1024b}
+example.test. 3600 IN RRSIG DNSKEY 8 2 3600 20201116135527 20201019135527 55567 example.test. IbWMC6quOuZFNPAVxQLqCJ9nLhindBo826rnLcg5yMgs9dGUSPOCXAfHTmbgJAUNs9HTFfrJWNvasnETs0UOpmEuifGwWdH1OlME7Gny4RL2QmITUFeMW81Jz1tiVQxFXl6yxT0jxOxvz+bqMHlrz+8IeWQXcO+GZTPu8ueq30g=
+ENTRY_END
+
+; response to query of interest
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+aaa.parcel.example.test. IN A
+SECTION ANSWER
+aaa.parcel.example.test. IN A 1.2.3.5
+;aaa.parcel.example.test. 3600 IN RRSIG A 8 4 3600 20201116135527 20201019135527 55567 example.test. eFryWdR6+3OiuHnbOFnpEt2sVeMJw+maoPZPoiut24b0oGruN85ujzooVwYjvl+IPiEJo+sajnGhG9R5Uibvw1zg1LX0fATYytCVNSKGdjYEiO3+1yyiq1lxlo/zaxJi2Vl750s250ooIpQo/6zQVoIfHKDFSif4Xb4bFeRBTUY=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+bbb.parcel.example.test. IN A
+SECTION ANSWER
+bbb.parcel.example.test. IN A 1.2.3.6
+;bbb.parcel.example.test. 3600 IN RRSIG A 8 4 3600 20201116135527 20201019135527 55567 example.test. mm2EmvC5UE1MCFw7lHNUE9tlrvSDr6IKUrC143YohY+S22Fb1RkmxmQIKcNVasZ8O+YJKOsiIz2+2iWvjhFMHXC7Y7QLu19Qe9ndQ4cx4mYUTFkA5imQkqiV9CJLCi9cjoCayJUDxAuT7pq6Y1VPIn0AUWNmcPNUZcYgy8NSe1A=
+ENTRY_END
+RANGE_END
+
+; ns.example.test.
+RANGE_BEGIN 60 70
+ ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+parcel.example.test. IN DS
+SECTION ANSWER
+SECTION AUTHORITY
+example.test. 3600 IN SOA ns.example.test. host.example.test. 20301 3600 1800 604800 3600
+example.test. 3600 IN RRSIG SOA 8 2 3600 20201116135527 20201019135527 55567 example.test. 2UUkScBAN37fJpSrelhE8DotKvmOzj3q9wicaanCIaCv95DE4nQnePih5B+ek3FIRjB/Uv2+z4Ro5Uxy94XAnlK0rCkDLSa0U9U7KP0ytc88sevO0x1SCPAMoZoJO6JqHkv42pdh54WSz+Zb/D8npY0j/tksHe/uX+VQnMymgb8=
+00000001.example.test. 3600 IN NSEC3 1 0 5 AA 00000002 A RRSIG
+00000001.example.test. 3600 IN RRSIG NSEC3 8 3 3600 20201116135527 20201019135527 55567 example.test. e8JQpXALnirEp55SDzotEv/nBj1K+Rnx8BgNQQ74grKFHcrTx1xcJo2uhD5JSJk+5A11oWRcnzYwGYZyzjw4h9UBz7XZQogcvL5igPGbvtK71DiPnIMMj7aN/7yl/Q2gdkCqr0bBi2ZWO6AzGG90K33IlW2ZrttdaDzTNsF43rk=
+00000002.example.test. 3600 IN NSEC3 1 0 5 BB 00000003 A RRSIG
+00000002.example.test. 3600 IN RRSIG NSEC3 8 3 3600 20201116135527 20201019135527 55567 example.test. b0jlxmbQqwGxB7jkiMW3PeEnvv9kBYHQ24qCgDXqpeqMfQxpEoXrSxmipI3JitV2FZqvNw+mJJ7Wy5kEGLvOqHJhxcPlbOJjVH2UDhWVNh0fR6UFGwZb62xaQMlltlUszFUNvbdIN4sO4EaLn2C1/LePUlQHWKZs2DCUbG6JOM4=
+00000003.example.test. 3600 IN NSEC3 1 0 5 CC 00000004 A RRSIG
+00000003.example.test. 3600 IN RRSIG NSEC3 8 3 3600 20201116135527 20201019135527 55567 example.test. E0K4skeGIEfxlxHkJRBoES23n95OYtRz8KIvbcCHTXYCuM+CKnKtTCdVtgDYcx2IdyvXNDTaoylNpOAJ4IGLYNbCTCeIScQdTSB8meqDV/nFvlARcgz6ptCwi6gRoe4xpQ7T1v/h6/MFKr5BDqwFk2tDtz21Bpf8NoMLLPWIjw8=
+00000004.example.test. 3600 IN NSEC3 1 0 5 DD 00000005 A RRSIG
+00000004.example.test. 3600 IN RRSIG NSEC3 8 3 3600 20201116135527 20201019135527 55567 example.test. yX+fvu905NpBGT0YFUtG0K/qzV4znlqNwAfIvblEW6GEanU5tiolunXXi1QYSfn8AbsPzokADW2xfGDbdMDR2FEbv7SXwoO1iQX6Yh0Sgyr8EGsUz8fLCcpZS+hovZX421RePnZkqQBY9LESeDdDpfvuxQTrh4ILSYxTSdKyBgg=
+00000005.example.test. 3600 IN NSEC3 1 0 5 EE 00000006 A RRSIG
+00000005.example.test. 3600 IN RRSIG NSEC3 8 3 3600 20201116135527 20201019135527 55567 example.test. REolHghL+AZ46rpw+e7RwfBzPC9O6RyXnfvM4JSBfxw2J0+b7uvRoK83CHEbvkPDDgPJR8N74H1OtvRL4EkifKR5Vr11VLUDcJmXYTNP2mmlA0rwsC625cGVdZzuJjK2bvva2Cnu5vdQvjFLBPn2LVb2rxlkXeEToAQNDJMhNHo=
+00000006.example.test. 3600 IN NSEC3 1 0 5 11 00000007 A RRSIG
+00000006.example.test. 3600 IN RRSIG NSEC3 8 3 3600 20201116135527 20201019135527 55567 example.test. V/7Yv/HdEmfHr2hGUuzoEm9/ovRxQOgeiiOVWL4S2h0r+PDd2XlpnCvS4E+fJhNsY+xGhtrPRTJTjJjxfF2r8AxcXW0Wbf6ZdPZliAAFuIK/brX6T6ReMrNq8dmEiHqg92y66Ff+aDTIdL1ufMJ+JoaygsbPghFPkD61kjs6GMs=
+00000007.example.test. 3600 IN NSEC3 1 0 5 22 00000008 A RRSIG
+00000007.example.test. 3600 IN RRSIG NSEC3 8 3 3600 20201116135527 20201019135527 55567 example.test. gh7itP+B2Aa+S/iXkCo5lLzHY5OvW2VzkmnZ9kmezlXlJA7LkUUcPj33nCk+lY7Bvno1SEcQAYi9tCHegMsqh/RZg5gmRKMN3sn2ob2P7vbXzNiFCPpXdzHAzsmLwR61MqMPtT7gNNajKecoTM0/VkRht3J1aJJxsrmuGXyu3oM=
+00000008.example.test. 3600 IN NSEC3 1 0 5 33 00000009 A RRSIG
+00000008.example.test. 3600 IN RRSIG NSEC3 8 3 3600 20201116135527 20201019135527 55567 example.test. qVQ4/COf1vEtswdtl8NvcZWX9otn4cjYWvVrx8Y9XbvPnboIOTrKpuej16wo6k6ak6IBBOQkIK4KDIP3iHNBlZQsxTUoaxb7EyNQ/Fkou3HNkJuf3VAUM2d/UhCmKpx5EPbmY5WQ7erDuRGMSIHYivjPOsSuLhfpcc8/jtHDcRI=
+ENTRY_END
+RANGE_END
+
+; ns.example.test.
+RANGE_BEGIN 160 170
+ ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+parcel.example.test. IN DS
+SECTION ANSWER
+SECTION AUTHORITY
+example.test. 3600 IN SOA ns.example.test. host.example.test. 20301 3600 1800 604800 3600
+example.test. 3600 IN RRSIG SOA 8 2 3600 20201116135527 20201019135527 55567 example.test. 2UUkScBAN37fJpSrelhE8DotKvmOzj3q9wicaanCIaCv95DE4nQnePih5B+ek3FIRjB/Uv2+z4Ro5Uxy94XAnlK0rCkDLSa0U9U7KP0ytc88sevO0x1SCPAMoZoJO6JqHkv42pdh54WSz+Zb/D8npY0j/tksHe/uX+VQnMymgb8=
+00000001.example.test. 3600 IN NSEC3 1 0 5 AA 00000002 A RRSIG
+00000001.example.test. 3600 IN RRSIG NSEC3 8 3 3600 20201116135527 20201019135527 55567 example.test. e8JQpXALnirEp55SDzotEv/nBj1K+Rnx8BgNQQ74grKFHcrTx1xcJo2uhD5JSJk+5A11oWRcnzYwGYZyzjw4h9UBz7XZQogcvL5igPGbvtK71DiPnIMMj7aN/7yl/Q2gdkCqr0bBi2ZWO6AzGG90K33IlW2ZrttdaDzTNsF43rk=
+00000002.example.test. 3600 IN NSEC3 1 0 5 BB 00000003 A RRSIG
+00000002.example.test. 3600 IN RRSIG NSEC3 8 3 3600 20201116135527 20201019135527 55567 example.test. b0jlxmbQqwGxB7jkiMW3PeEnvv9kBYHQ24qCgDXqpeqMfQxpEoXrSxmipI3JitV2FZqvNw+mJJ7Wy5kEGLvOqHJhxcPlbOJjVH2UDhWVNh0fR6UFGwZb62xaQMlltlUszFUNvbdIN4sO4EaLn2C1/LePUlQHWKZs2DCUbG6JOM4=
+00000003.example.test. 3600 IN NSEC3 1 0 5 CC 00000004 A RRSIG
+00000003.example.test. 3600 IN RRSIG NSEC3 8 3 3600 20201116135527 20201019135527 55567 example.test. E0K4skeGIEfxlxHkJRBoES23n95OYtRz8KIvbcCHTXYCuM+CKnKtTCdVtgDYcx2IdyvXNDTaoylNpOAJ4IGLYNbCTCeIScQdTSB8meqDV/nFvlARcgz6ptCwi6gRoe4xpQ7T1v/h6/MFKr5BDqwFk2tDtz21Bpf8NoMLLPWIjw8=
+00000004.example.test. 3600 IN NSEC3 1 0 5 DD 00000005 A RRSIG
+00000004.example.test. 3600 IN RRSIG NSEC3 8 3 3600 20201116135527 20201019135527 55567 example.test. yX+fvu905NpBGT0YFUtG0K/qzV4znlqNwAfIvblEW6GEanU5tiolunXXi1QYSfn8AbsPzokADW2xfGDbdMDR2FEbv7SXwoO1iQX6Yh0Sgyr8EGsUz8fLCcpZS+hovZX421RePnZkqQBY9LESeDdDpfvuxQTrh4ILSYxTSdKyBgg=
+00000005.example.test. 3600 IN NSEC3 1 0 5 EE 00000006 A RRSIG
+00000005.example.test. 3600 IN RRSIG NSEC3 8 3 3600 20201116135527 20201019135527 55567 example.test. REolHghL+AZ46rpw+e7RwfBzPC9O6RyXnfvM4JSBfxw2J0+b7uvRoK83CHEbvkPDDgPJR8N74H1OtvRL4EkifKR5Vr11VLUDcJmXYTNP2mmlA0rwsC625cGVdZzuJjK2bvva2Cnu5vdQvjFLBPn2LVb2rxlkXeEToAQNDJMhNHo=
+00000006.example.test. 3600 IN NSEC3 1 0 5 11 00000007 A RRSIG
+00000006.example.test. 3600 IN RRSIG NSEC3 8 3 3600 20201116135527 20201019135527 55567 example.test. V/7Yv/HdEmfHr2hGUuzoEm9/ovRxQOgeiiOVWL4S2h0r+PDd2XlpnCvS4E+fJhNsY+xGhtrPRTJTjJjxfF2r8AxcXW0Wbf6ZdPZliAAFuIK/brX6T6ReMrNq8dmEiHqg92y66Ff+aDTIdL1ufMJ+JoaygsbPghFPkD61kjs6GMs=
+00000007.example.test. 3600 IN NSEC3 1 0 5 22 00000008 A RRSIG
+00000007.example.test. 3600 IN RRSIG NSEC3 8 3 3600 20201116135527 20201019135527 55567 example.test. gh7itP+B2Aa+S/iXkCo5lLzHY5OvW2VzkmnZ9kmezlXlJA7LkUUcPj33nCk+lY7Bvno1SEcQAYi9tCHegMsqh/RZg5gmRKMN3sn2ob2P7vbXzNiFCPpXdzHAzsmLwR61MqMPtT7gNNajKecoTM0/VkRht3J1aJJxsrmuGXyu3oM=
+00000008.example.test. 3600 IN NSEC3 1 0 5 33 00000009 A RRSIG
+00000008.example.test. 3600 IN RRSIG NSEC3 8 3 3600 20201116135527 20201019135527 55567 example.test. qVQ4/COf1vEtswdtl8NvcZWX9otn4cjYWvVrx8Y9XbvPnboIOTrKpuej16wo6k6ak6IBBOQkIK4KDIP3iHNBlZQsxTUoaxb7EyNQ/Fkou3HNkJuf3VAUM2d/UhCmKpx5EPbmY5WQ7erDuRGMSIHYivjPOsSuLhfpcc8/jtHDcRI=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ccc.parcel.example.test. IN A
+SECTION ANSWER
+ccc.parcel.example.test. IN A 1.2.3.7
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ddd.parcel.example.test. IN A
+SECTION ANSWER
+ddd.parcel.example.test. IN A 1.2.3.8
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+eee.parcel.example.test. IN A
+SECTION ANSWER
+eee.parcel.example.test. IN A 1.2.3.9
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+fff.parcel.example.test. IN A
+SECTION ANSWER
+fff.parcel.example.test. IN A 1.2.3.10
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ggg.parcel.example.test. IN A
+SECTION ANSWER
+ggg.parcel.example.test. IN A 1.2.3.11
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+hhh.parcel.example.test. IN A
+SECTION ANSWER
+hhh.parcel.example.test. IN A 1.2.3.12
+ENTRY_END
+RANGE_END
+
+; ns.example.test.
+RANGE_BEGIN 270 300
+ ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+parcel.example.test. IN DS
+SECTION ANSWER
+SECTION AUTHORITY
+example.test. 3600 IN SOA ns.example.test. host.example.test. 20301 3600 1800 604800 3600
+example.test. 3600 IN RRSIG SOA 8 2 3600 20201116135527 20201019135527 55567 example.test. 2UUkScBAN37fJpSrelhE8DotKvmOzj3q9wicaanCIaCv95DE4nQnePih5B+ek3FIRjB/Uv2+z4Ro5Uxy94XAnlK0rCkDLSa0U9U7KP0ytc88sevO0x1SCPAMoZoJO6JqHkv42pdh54WSz+Zb/D8npY0j/tksHe/uX+VQnMymgb8=
+00000001.example.test. 3600 IN NSEC3 1 0 5 AA 00000002 A RRSIG
+00000001.example.test. 3600 IN RRSIG NSEC3 8 3 3600 20201116135527 20201019135527 55567 example.test. e8JQpXALnirEp55SDzotEv/nBj1K+Rnx8BgNQQ74grKFHcrTx1xcJo2uhD5JSJk+5A11oWRcnzYwGYZyzjw4h9UBz7XZQogcvL5igPGbvtK71DiPnIMMj7aN/7yl/Q2gdkCqr0bBi2ZWO6AzGG90K33IlW2ZrttdaDzTNsF43rk=
+00000002.example.test. 3600 IN NSEC3 1 0 5 BB 00000003 A RRSIG
+00000002.example.test. 3600 IN RRSIG NSEC3 8 3 3600 20201116135527 20201019135527 55567 example.test. b0jlxmbQqwGxB7jkiMW3PeEnvv9kBYHQ24qCgDXqpeqMfQxpEoXrSxmipI3JitV2FZqvNw+mJJ7Wy5kEGLvOqHJhxcPlbOJjVH2UDhWVNh0fR6UFGwZb62xaQMlltlUszFUNvbdIN4sO4EaLn2C1/LePUlQHWKZs2DCUbG6JOM4=
+00000003.example.test. 3600 IN NSEC3 1 0 5 CC 00000004 A RRSIG
+00000003.example.test. 3600 IN RRSIG NSEC3 8 3 3600 20201116135527 20201019135527 55567 example.test. E0K4skeGIEfxlxHkJRBoES23n95OYtRz8KIvbcCHTXYCuM+CKnKtTCdVtgDYcx2IdyvXNDTaoylNpOAJ4IGLYNbCTCeIScQdTSB8meqDV/nFvlARcgz6ptCwi6gRoe4xpQ7T1v/h6/MFKr5BDqwFk2tDtz21Bpf8NoMLLPWIjw8=
+00000004.example.test. 3600 IN NSEC3 1 0 5 DD 00000005 A RRSIG
+00000004.example.test. 3600 IN RRSIG NSEC3 8 3 3600 20201116135527 20201019135527 55567 example.test. yX+fvu905NpBGT0YFUtG0K/qzV4znlqNwAfIvblEW6GEanU5tiolunXXi1QYSfn8AbsPzokADW2xfGDbdMDR2FEbv7SXwoO1iQX6Yh0Sgyr8EGsUz8fLCcpZS+hovZX421RePnZkqQBY9LESeDdDpfvuxQTrh4ILSYxTSdKyBgg=
+00000005.example.test. 3600 IN NSEC3 1 0 5 EE 00000006 A RRSIG
+00000005.example.test. 3600 IN RRSIG NSEC3 8 3 3600 20201116135527 20201019135527 55567 example.test. REolHghL+AZ46rpw+e7RwfBzPC9O6RyXnfvM4JSBfxw2J0+b7uvRoK83CHEbvkPDDgPJR8N74H1OtvRL4EkifKR5Vr11VLUDcJmXYTNP2mmlA0rwsC625cGVdZzuJjK2bvva2Cnu5vdQvjFLBPn2LVb2rxlkXeEToAQNDJMhNHo=
+00000006.example.test. 3600 IN NSEC3 1 0 5 11 00000007 A RRSIG
+00000006.example.test. 3600 IN RRSIG NSEC3 8 3 3600 20201116135527 20201019135527 55567 example.test. V/7Yv/HdEmfHr2hGUuzoEm9/ovRxQOgeiiOVWL4S2h0r+PDd2XlpnCvS4E+fJhNsY+xGhtrPRTJTjJjxfF2r8AxcXW0Wbf6ZdPZliAAFuIK/brX6T6ReMrNq8dmEiHqg92y66Ff+aDTIdL1ufMJ+JoaygsbPghFPkD61kjs6GMs=
+00000007.example.test. 3600 IN NSEC3 1 0 5 22 00000008 A RRSIG
+00000007.example.test. 3600 IN RRSIG NSEC3 8 3 3600 20201116135527 20201019135527 55567 example.test. gh7itP+B2Aa+S/iXkCo5lLzHY5OvW2VzkmnZ9kmezlXlJA7LkUUcPj33nCk+lY7Bvno1SEcQAYi9tCHegMsqh/RZg5gmRKMN3sn2ob2P7vbXzNiFCPpXdzHAzsmLwR61MqMPtT7gNNajKecoTM0/VkRht3J1aJJxsrmuGXyu3oM=
+00000008.example.test. 3600 IN NSEC3 1 0 5 33 00000009 A RRSIG
+00000008.example.test. 3600 IN RRSIG NSEC3 8 3 3600 20201116135527 20201019135527 55567 example.test. qVQ4/COf1vEtswdtl8NvcZWX9otn4cjYWvVrx8Y9XbvPnboIOTrKpuej16wo6k6ak6IBBOQkIK4KDIP3iHNBlZQsxTUoaxb7EyNQ/Fkou3HNkJuf3VAUM2d/UhCmKpx5EPbmY5WQ7erDuRGMSIHYivjPOsSuLhfpcc8/jtHDcRI=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ccc.parcel.example.test. IN A
+SECTION ANSWER
+ccc.parcel.example.test. IN A 1.2.3.7
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ddd.parcel.example.test. IN A
+SECTION ANSWER
+ddd.parcel.example.test. IN A 1.2.3.8
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+eee.parcel.example.test. IN A
+SECTION ANSWER
+eee.parcel.example.test. IN A 1.2.3.9
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+fff.parcel.example.test. IN A
+SECTION ANSWER
+fff.parcel.example.test. IN A 1.2.3.10
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ggg.parcel.example.test. IN A
+SECTION ANSWER
+ggg.parcel.example.test. IN A 1.2.3.11
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+hhh.parcel.example.test. IN A
+SECTION ANSWER
+hhh.parcel.example.test. IN A 1.2.3.12
+ENTRY_END
+RANGE_END
+
+STEP 10 QUERY ADDRESS 10.0.0.1
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+www.example.test. IN A
+ENTRY_END
+
+; the DNSSEC chain is set up, in cache.
+STEP 20 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA AD DO NOERROR
+SECTION QUESTION
+www.example.test. IN A
+SECTION ANSWER
+www.example.test. IN A 1.2.3.4
+www.example.test. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55567 example.test. sbK517uW0iiO1FbJ+rCSrISg6RoIsXAFmd8NgF9mERAefkiVYTjUxdm4USccVg4Xwig9S14yANFPXY1QQbTxx25mcOdw4wyJUjGZosaIYS2DSTsAnDSgEOHPiEnYM84/UCjfWY54P4SFnCx8esaZfSdMu6YG+d3CxR1wJGloju4=
+ENTRY_END
+
+; The answer RANGE is stopped during this time, so the two queries
+; are both filed before unbound can get upstream answers.
+STEP 30 QUERY ADDRESS 10.0.0.1
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+aaa.parcel.example.test. IN A
+ENTRY_END
+
+STEP 40 QUERY ADDRESS 10.0.0.2
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+bbb.parcel.example.test. IN A
+ENTRY_END
+
+; The RANGE starts again, for example.test
+STEP 50 TRAFFIC
+
+STEP 60 TRAFFIC
+
+; The long NSEC3 RRSIGs are suspended from the validator,
+; with a timer that waits, about 0.040 sec.
+STEP 61 TIME_PASSES ELAPSE 0.01
+; now fire off the other queries.
+
+; while the parcel.example.test. DS query has finished up,
+; but aaa.parcel.example.test and bbb.parcel.example exist, and the
+; validator suspend timer is set to happen (in a while).
+; new queries come in.
+STEP 100 QUERY ADDRESS 10.0.0.1
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+ccc.parcel.example.test. IN A
+ENTRY_END
+
+STEP 110 QUERY ADDRESS 10.0.0.2
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+ddd.parcel.example.test. IN A
+ENTRY_END
+
+STEP 120 QUERY ADDRESS 10.0.0.3
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+eee.parcel.example.test. IN A
+ENTRY_END
+
+STEP 130 QUERY ADDRESS 10.0.0.4
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+fff.parcel.example.test. IN A
+ENTRY_END
+
+STEP 140 QUERY ADDRESS 10.0.0.5
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+ggg.parcel.example.test. IN A
+ENTRY_END
+
+STEP 150 QUERY ADDRESS 10.0.0.6
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+hhh.parcel.example.test. IN A
+ENTRY_END
+
+; validation suspend timer from aaa.parcel and bbb.parcel fires
+STEP 261 TIME_PASSES ELAPSE 0.1
+STEP 262 TIME_PASSES ELAPSE 0.1
+STEP 263 TIME_PASSES ELAPSE 0.2
+STEP 264 TIME_PASSES ELAPSE 0.4
+STEP 265 TIME_PASSES ELAPSE 0.4
+STEP 266 TIME_PASSES ELAPSE 0.4
+STEP 267 TIME_PASSES ELAPSE 0.4
+
+; now ordinary traffic flows again
+STEP 270 TRAFFIC
+; and timers elapse
+STEP 271 TIME_PASSES ELAPSE 0.4
+STEP 272 TIME_PASSES ELAPSE 0.4
+STEP 273 TIME_PASSES ELAPSE 0.4
+STEP 274 TIME_PASSES ELAPSE 0.4
+STEP 275 TIME_PASSES ELAPSE 0.4
+STEP 276 TIME_PASSES ELAPSE 0.4
+STEP 277 TIME_PASSES ELAPSE 0.4
+
+STEP 280 TRAFFIC
+STEP 300 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA DO SERVFAIL
+SECTION QUESTION
+aaa.parcel.example.test. IN A
+SECTION ANSWER
+ENTRY_END
+
+STEP 310 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA DO SERVFAIL
+SECTION QUESTION
+bbb.parcel.example.test. IN A
+SECTION ANSWER
+ENTRY_END
+
+STEP 320 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA DO SERVFAIL
+SECTION QUESTION
+ccc.parcel.example.test. IN A
+SECTION ANSWER
+ENTRY_END
+
+STEP 330 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA DO SERVFAIL
+SECTION QUESTION
+ddd.parcel.example.test. IN A
+SECTION ANSWER
+ENTRY_END
+
+STEP 340 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA DO SERVFAIL
+SECTION QUESTION
+eee.parcel.example.test. IN A
+SECTION ANSWER
+ENTRY_END
+
+STEP 350 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA DO SERVFAIL
+SECTION QUESTION
+fff.parcel.example.test. IN A
+SECTION ANSWER
+ENTRY_END
+
+STEP 360 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA DO SERVFAIL
+SECTION QUESTION
+ggg.parcel.example.test. IN A
+SECTION ANSWER
+ENTRY_END
+
+STEP 370 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA DO SERVFAIL
+SECTION QUESTION
+hhh.parcel.example.test. IN A
+SECTION ANSWER
+ENTRY_END
+
+SCENARIO_END
diff --git a/testdata/subnet_dns64_lookup.crpl b/testdata/subnet_dns64_lookup.crpl
new file mode 100644
index 000000000000..ec30d541551f
--- /dev/null
+++ b/testdata/subnet_dns64_lookup.crpl
@@ -0,0 +1,224 @@
+server:
+ target-fetch-policy: "0 0 0 0 0"
+ access-control: 0.0.0.0/0 allow
+ send-client-subnet: 5.0.15.10
+ max-client-subnet-ipv4: 24
+ verbosity: 3
+ module-config: "dns64 subnetcache iterator"
+ qname-minimisation: no
+ minimal-responses: yes
+ dns64-prefix: 64:ff9b::0/96
+
+stub-zone:
+ name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Subnet with DNS64 lookup
+
+RANGE_BEGIN 0 100
+ ADDRESS 193.0.14.129
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA 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 qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+a.gtld-servers.net. IN AAAA
+SECTION AUTHORITY
+net. IN SOA ns.example.com. root.example.com. 4 14400 3600 604800 3600
+SECTION ADDITIONAL
+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
+
+RANGE_BEGIN 0 100
+ ADDRESS 192.5.6.30
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+example.com. IN A
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 5.0.15.10
+ENTRY_END
+RANGE_END
+
+RANGE_BEGIN 0 100
+ ADDRESS 5.0.15.10
+ENTRY_BEGIN
+MATCH opcode qtype qname ednsdata
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+example.com. IN NS
+SECTION ANSWER
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+HEX_EDNSDATA_BEGIN
+ ;; we expect to receive empty
+HEX_EDNSDATA_END
+ns.example.com. IN A 5.0.15.10
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname ednsdata
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.example.com. IN AAAA
+SECTION ANSWER
+SECTION AUTHORITY
+example.com. IN SOA ns.example.com. root.example.com. 4 14400 3600 604800 3600
+SECTION ADDITIONAL
+HEX_EDNSDATA_BEGIN
+ ;; we expect to receive empty
+HEX_EDNSDATA_END
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname ednsdata
+ADJUST copy_id copy_query copy_ednsdata_assume_clientsubnet
+REPLY QR AA NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. IN A 4.3.0.3
+SECTION ADDITIONAL
+HEX_EDNSDATA_BEGIN
+ ; client is 10.0.3.0
+ 00 08 ; OPC
+ 00 07 ; option length
+ 00 01 ; Family
+ 18 00 ; source mask, scopemask
+ 0a 00 03 ; address
+HEX_EDNSDATA_END
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname ednsdata
+ADJUST copy_id copy_query copy_ednsdata_assume_clientsubnet
+REPLY QR AA NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. IN A 4.3.0.4
+SECTION ADDITIONAL
+HEX_EDNSDATA_BEGIN
+ ; client is 10.0.4.0
+ 00 08 ; OPC
+ 00 07 ; option length
+ 00 01 ; Family
+ 18 00 ; source mask, scopemask
+ 0a 00 04 ; address
+HEX_EDNSDATA_END
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname ednsdata
+ADJUST copy_id copy_query copy_ednsdata_assume_clientsubnet
+REPLY QR AA NOERROR
+SECTION QUESTION
+www.example.com. IN AAAA
+SECTION ANSWER
+www.example.com. IN AAAA 2001:db8::3
+SECTION ADDITIONAL
+HEX_EDNSDATA_BEGIN
+ ; client is 10.0.3.0
+ 00 08 ; OPC
+ 00 07 ; option length
+ 00 01 ; Family
+ 18 00 ; source mask, scopemask
+ 0a 00 03 ; address
+HEX_EDNSDATA_END
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname ednsdata
+ADJUST copy_id copy_query copy_ednsdata_assume_clientsubnet
+REPLY QR AA NOERROR
+SECTION QUESTION
+www.example.com. IN AAAA
+SECTION ANSWER
+www.example.com. IN AAAA 2001:db8::4
+SECTION ADDITIONAL
+HEX_EDNSDATA_BEGIN
+ ; client is 10.0.4.0
+ 00 08 ; OPC
+ 00 07 ; option length
+ 00 01 ; Family
+ 18 00 ; source mask, scopemask
+ 0a 00 04 ; address
+HEX_EDNSDATA_END
+ENTRY_END
+
+RANGE_END
+
+STEP 1 QUERY ADDRESS 10.0.3.1
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www.example.com. IN AAAA
+ENTRY_END
+
+STEP 2 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+www.example.com. IN AAAA
+SECTION ANSWER
+;www.example.com. IN A 4.3.0.3
+www.example.com. IN AAAA 2001:db8::3
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+STEP 10 QUERY ADDRESS 10.0.4.1
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www.example.com. IN AAAA
+ENTRY_END
+
+STEP 11 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+www.example.com. IN AAAA
+SECTION ANSWER
+;www.example.com. IN A 4.3.0.4
+www.example.com. IN AAAA 2001:db8::4
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+SCENARIO_END
diff --git a/testdata/svcb.tdir/svcb.success-cases.zone b/testdata/svcb.tdir/svcb.success-cases.zone
index c3d015ec0f03..50cf1f3c9575 100644
--- a/testdata/svcb.tdir/svcb.success-cases.zone
+++ b/testdata/svcb.tdir/svcb.success-cases.zone
@@ -59,3 +59,7 @@ _dns.doh.example. 7200 IN SVCB 1 doh.example. alpn=h2 dohpath="/dns-query{?dns}"
_dns.doh.example. 7200 IN SVCB 1 doh.example. alpn=h2 dohpath=/dns-query{?abcd}{!abcd}{?dns}
_dns.doh.example. 7200 IN SVCB 1 doh.example. alpn=h2 dohpath=/dns-query{?abcdabcd?dns?defedf}
_dns.doh.example. 7200 IN SVCB 1 doh.example. alpn=h2 dohpath=/dns-queryéè{?dns}
+
+; The ech=0 convenience entry for empty ech list
+echempty SVCB 0 . ech=0
+echempty SVCB 0 h2. ech
diff --git a/testdata/svcb.tdir/svcb.success-cases.zone.cmp b/testdata/svcb.tdir/svcb.success-cases.zone.cmp
index 3a42393baa17..fc84d601e379 100644
--- a/testdata/svcb.tdir/svcb.success-cases.zone.cmp
+++ b/testdata/svcb.tdir/svcb.success-cases.zone.cmp
@@ -16,3 +16,5 @@ _dns.doh.example. 7200 IN SVCB 1 doh.example. alpn="h2" dohpath="/dns-query{?dns
_dns.doh.example. 7200 IN SVCB 1 doh.example. alpn="h2" dohpath="/dns-query{?abcd}{!abcd}{?dns}"
_dns.doh.example. 7200 IN SVCB 1 doh.example. alpn="h2" dohpath="/dns-query{?abcdabcd?dns?defedf}"
_dns.doh.example. 7200 IN SVCB 1 doh.example. alpn="h2" dohpath="/dns-query\195\169\195\168{?dns}"
+echempty.success-cases. 7200 IN SVCB 0 . ech
+echempty.success-cases. 7200 IN SVCB 0 h2. ech
diff --git a/testdata/tcp_conn_limit_dec.tdir/tcp_conn_limit_dec.conf b/testdata/tcp_conn_limit_dec.tdir/tcp_conn_limit_dec.conf
new file mode 100644
index 000000000000..bac2ebcf979b
--- /dev/null
+++ b/testdata/tcp_conn_limit_dec.tdir/tcp_conn_limit_dec.conf
@@ -0,0 +1,25 @@
+server:
+ verbosity: 4
+ num-threads: 1
+ interface: 127.0.0.1
+ port: @PORT@
+ use-syslog: no
+ directory: .
+ pidfile: "unbound.pid"
+ chroot: ""
+ username: ""
+ do-not-query-localhost: no
+ incoming-num-tcp: 20
+ tcp-connection-limit: 0.0.0.0/0 3
+ local-data: "www1.example.net. A 10.20.30.41"
+ local-data: "www2.example.net. A 10.20.30.42"
+ local-data: "www3.example.net. A 10.20.30.43"
+ local-data: "www4.example.net. A 10.20.30.44"
+ local-data: "www5.example.net. A 10.20.30.45"
+ local-data: "www6.example.net. A 10.20.30.46"
+ local-data: "www7.example.net. A 10.20.30.47"
+ local-data: "www8.example.net. A 10.20.30.48"
+
+forward-zone:
+ name: "."
+ forward-addr: "127.0.0.1@@TOPORT@"
diff --git a/testdata/tcp_conn_limit_dec.tdir/tcp_conn_limit_dec.dsc b/testdata/tcp_conn_limit_dec.tdir/tcp_conn_limit_dec.dsc
new file mode 100644
index 000000000000..d3a7483c4929
--- /dev/null
+++ b/testdata/tcp_conn_limit_dec.tdir/tcp_conn_limit_dec.dsc
@@ -0,0 +1,16 @@
+BaseName: tcp_conn_limit_dec
+Version: 1.0
+Description: Test tcp-connection-limit setting decrement.
+CreationData: Fri May 1 10:10:00 CEST 2026
+Maintainer: dr. W.C.A. Wijngaards
+Category:
+Component:
+CmdDepends:
+Depends:
+Help:
+Pre: tcp_conn_limit_dec.pre
+Post: tcp_conn_limit_dec.post
+Test: tcp_conn_limit_dec.test
+AuxFiles:
+Passed:
+Failure:
diff --git a/testdata/tcp_conn_limit_dec.tdir/tcp_conn_limit_dec.post b/testdata/tcp_conn_limit_dec.tdir/tcp_conn_limit_dec.post
new file mode 100644
index 000000000000..767ec91dd975
--- /dev/null
+++ b/testdata/tcp_conn_limit_dec.tdir/tcp_conn_limit_dec.post
@@ -0,0 +1,12 @@
+# #-- tcp_conn_limit_dec.post --#
+# source the master var file when it's there
+[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master
+# source the test var file when it's there
+[ -f .tpkg.var.test ] && source .tpkg.var.test
+#
+# do your teardown here
+. ../common.sh
+kill_pid $FWD_PID
+kill_pid $UNBOUND_PID
+cat fwd.log
+cat unbound.log
diff --git a/testdata/tcp_conn_limit_dec.tdir/tcp_conn_limit_dec.pre b/testdata/tcp_conn_limit_dec.tdir/tcp_conn_limit_dec.pre
new file mode 100644
index 000000000000..795d56e5a6fd
--- /dev/null
+++ b/testdata/tcp_conn_limit_dec.tdir/tcp_conn_limit_dec.pre
@@ -0,0 +1,30 @@
+# #-- tcp_conn_limit_dec.pre--#
+# source the master var file when it's there
+[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master
+# use .tpkg.var.test for in test variable passing
+[ -f .tpkg.var.test ] && source .tpkg.var.test
+
+. ../common.sh
+get_random_port 2
+UNBOUND_PORT=$RND_PORT
+FWD_PORT=$(($RND_PORT + 1))
+echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test
+echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test
+
+# start forwarder
+get_ldns_testns
+$LDNS_TESTNS -p $FWD_PORT tcp_conn_limit_dec.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'/' < tcp_conn_limit_dec.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/tcp_conn_limit_dec.tdir/tcp_conn_limit_dec.test b/testdata/tcp_conn_limit_dec.tdir/tcp_conn_limit_dec.test
new file mode 100644
index 000000000000..973559df6cc8
--- /dev/null
+++ b/testdata/tcp_conn_limit_dec.tdir/tcp_conn_limit_dec.test
@@ -0,0 +1,42 @@
+# #-- tcp_conn_limit_dec.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
+
+
+# Set unbound to limit all IPv4 addresses to 0 connections.
+# Make sure TCP connection fails.
+
+
+if uname | grep MINGW >/dev/null; then
+ echo "no job control in shell on windows. end test"
+ exit 0
+fi
+
+PRE="../.."
+. ../common.sh
+get_make
+(cd $PRE; $MAKE streamtcp)
+
+# after first three queries, the counter must decrement to answer the others.
+for i in 1 2 3 4 5 6 7 8; do
+ echo
+ echo "> query www$i.example.net."
+ $PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT www$i.example.net. A IN 2>&1 | tee outfile
+ if test "$?" -ne 0; then
+ echo "exit status not OK"
+ echo "Not OK"
+ exit 1
+ else
+ echo "exit status OK"
+ fi
+ if grep "10.20.30.4$i" outfile; then
+ echo "OK"
+ else
+ echo "not OK"
+ exit 1
+ fi
+done
+
+exit 0
diff --git a/testdata/tcp_conn_limit_dec.tdir/tcp_conn_limit_dec.testns b/testdata/tcp_conn_limit_dec.tdir/tcp_conn_limit_dec.testns
new file mode 100644
index 000000000000..2f8afd878363
--- /dev/null
+++ b/testdata/tcp_conn_limit_dec.tdir/tcp_conn_limit_dec.testns
@@ -0,0 +1,41 @@
+; nameserver test file
+$ORIGIN example.com.
+$TTL 3600
+
+ENTRY_BEGIN
+MATCH UDP opcode qtype qname
+REPLY QR AA NOERROR TC
+ADJUST copy_id
+SECTION QUESTION
+www IN A
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH TCP opcode qtype qname
+REPLY QR AA NOERROR
+ADJUST copy_id sleep=2
+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 NOERROR
+ADJUST copy_id
+SECTION QUESTION
+www2 IN A
+SECTION ANSWER
+www2 IN A 10.20.30.42
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+REPLY QR AA NOERROR
+ADJUST copy_id
+SECTION QUESTION
+www3 IN A
+SECTION ANSWER
+www3 IN A 10.20.30.43
+ENTRY_END
diff --git a/testdata/val_any_cap.rpl b/testdata/val_any_cap.rpl
new file mode 100644
index 000000000000..86d4b3a6c984
--- /dev/null
+++ b/testdata/val_any_cap.rpl
@@ -0,0 +1,350 @@
+; 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
+ rrset-roundrobin: no
+ harden-unknown-additional: yes
+
+stub-zone:
+ name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Test validator with response to qtype ANY
+
+; 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 qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.com. IN ANY
+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 qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.com. IN ANY
+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 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
+
+; response to query of interest
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.com. IN ANY
+SECTION ANSWER
+example.com. 86400 IN SOA open.example.com. hostmaster.example.com. 2007090400 28800 7200 604800 18000
+example.com. 86400 IN RRSIG SOA 3 2 86400 20070926134150 20070829134150 2854 example.com. MC0CFQCSs8KJepwaIp5vu++/0hk04lkXvgIUdphJSAE/MYob30WcRei9/nL49tE= ;{id = 2854}
+example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJIIs70j+sDS/UT2QRp61SE7S3EEXopNXoFE73JLRmvpi/UrOO/Vz4Se6wXv/CYCKjGw06U4WRgRYXcpEhJROyNapmdIKSxhOzfLVE1gqA0PweZR8dtY3aNQSRn3sPpwJr6Mi/PqQKAMMrZ9ckJpf1+bQMOOvxgzz2U1GS18b3yZKcgTMEaJzd/GZYzi/BN2DzQ0MsrSwYXfsNLFOBbs8PJMW4LYIxeeOe6rUgkWOF7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b}
+example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFHq7BNVAeLW+Uw/rkjVS08lrMDk/AhR+bvChHfiE4jLb6uoyE54/irCuqA== ;{id = 2854}
+example.com. 600 IN NAPTR 20 0 "s" "SIP+D2U" "" _sip._udp.example.com.
+example.com. 600 IN RRSIG NAPTR 3 2 600 20070926134150 20070829134150 2854 example.com. MC0CFE8qs66bzuOyKmTIacamrmqabMRzAhUAn0MujX1LB0UpTHuLMgdgMgJJlq4= ;{id = 2854}
+example.com. 86400 IN AAAA 2001:7b8:206:1::1
+example.com. 86400 IN RRSIG AAAA 3 2 86400 20070926134150 20070829134150 2854 example.com. MC0CFEqS4WHyqhUkv7t42TsBZJk/Q9paAhUAtTZ8GaXGpot0PmsM0oGzQU+2iw4= ;{id = 2854}
+example.com. 86400 IN TXT "Stichting NLnet Labs"
+example.com. 86400 IN RRSIG TXT 3 2 86400 20070926134150 20070829134150 2854 example.com. MCwCFH3otn2u8zXczBS8L0VKpyAYZGSkAhQLGaQclkzMAzlB5j73opFjdkh8TA== ;{id = 2854}
+example.com. 86400 IN MX 100 v.net.example.
+example.com. 86400 IN MX 50 open.example.com.
+example.com. 86400 IN RRSIG MX 3 2 86400 20070926134150 20070829134150 2854 example.com. MCwCFEKh3jeqh69zcOqWWv3GNKlMECPyAhR9HJkcPLqlyVWUccWDFJfGGcQfdg== ;{id = 2854}
+example.com. 86400 IN NS v.net.example.
+example.com. 86400 IN NS open.example.com.
+example.com. 86400 IN NS ns7.domain-registry.example.
+example.com. 86400 IN RRSIG NS 3 2 86400 20070926134150 20070829134150 2854 example.com. MC0CFQCaRn30X4neKW7KYoTa2kcsoOLgfgIURvKEyDczLypWlx99KpxzMxRYhEc= ;{id = 2854}
+example.com. 86400 IN A 213.154.224.1
+example.com. 86400 IN RRSIG A 3 2 86400 20070926134150 20070829134150 2854 example.com. MCwCFH8kSLxmRTwzlGDxvF1e4y/gM+5dAhQkzyQ2a6Gf+CMaHzVScaUvTt9HhQ== ;{id = 2854}
+example.com. 18000 IN NSEC _sip._udp.example.com. A NS SOA MX TXT AAAA NAPTR RRSIG NSEC DNSKEY
+example.com. 18000 IN RRSIG NSEC 3 2 18000 20070926134150 20070829134150 2854 example.com. MCwCFBzOGtpgq4uJ2jeuLPYl2HowIRzDAhQVXNz1haQ1mI7z9lt5gcvWW+lFhA== ;{id = 2854}
+
+example.com. 3600 IN TYPE4001 \# 1 01
+example.com. 3600 IN RRSIG TYPE4001 3 2 3600 20070926134150 20070829134150 2854 example.com. ACwNOwI1/wEdnsnotQgFNLjmjcJonpU432TLsHbRo1atuUHhOA1cdeI=
+
+example.com. 3600 IN TYPE4002 \# 1 01
+example.com. 3600 IN RRSIG TYPE4002 3 2 3600 20070926134150 20070829134150 2854 example.com. AGSTEFePJzOtkGGJDJ2vvqV1ja0deBPWu6+DLV66VbWncuNjhGlgn4s=
+
+example.com. 3600 IN TYPE4003 \# 1 01
+example.com. 3600 IN RRSIG TYPE4003 3 2 3600 20070926134150 20070829134150 2854 example.com. AByS2v3czunuc/ISzNWxDfk1LDbXQvxdbdBf1kruF03Q+yumKsC5BMU=
+
+example.com. 3600 IN TYPE4004 \# 1 01
+example.com. 3600 IN RRSIG TYPE4004 3 2 3600 20070926134150 20070829134150 2854 example.com. AG8JfqFxAJDRsANgZvIhk6C4/d7oF5rXsNZN5pEFwRHL8oNN/xEkUpM=
+
+example.com. 3600 IN TYPE4005 \# 1 01
+example.com. 3600 IN RRSIG TYPE4005 3 2 3600 20070926134150 20070829134150 2854 example.com. AFv/ylW2n88mhr65bo4kWNp45w0mp4qcKxMfEZAuZt8d/DB0KZDn538=
+
+example.com. 3600 IN TYPE4006 \# 1 01
+example.com. 3600 IN RRSIG TYPE4006 3 2 3600 20070926134150 20070829134150 2854 example.com. AIrw3YdUF3Ri9KbDd89xtnpf7KeKkXy6VzOxguaFbS30jZcEc+8p+TM=
+
+example.com. 3600 IN TYPE4007 \# 1 01
+example.com. 3600 IN RRSIG TYPE4007 3 2 3600 20070926134150 20070829134150 2854 example.com. ABcI5dVAx0Ro+rl9+++Eh5/RG/Tbn0O4F8Mn+iwgaJwvZ9biGIaFPb8=
+
+example.com. 3600 IN TYPE4008 \# 1 01
+example.com. 3600 IN RRSIG TYPE4008 3 2 3600 20070926134150 20070829134150 2854 example.com. ADFnpyINGZa3komnJQft55pkXVr6HIwbn+CjJDEKT/t3va0UW78RJV0=
+
+example.com. 3600 IN TYPE4009 \# 1 01
+example.com. 3600 IN RRSIG TYPE4009 3 2 3600 20070926134150 20070829134150 2854 example.com. AA160AjWpMkX1YF0aXvL/PeRRA3vZsDtMvotP1NEm687q9nx46wW7To=
+
+example.com. 3600 IN TYPE4010 \# 1 01
+example.com. 3600 IN RRSIG TYPE4010 3 2 3600 20070926134150 20070829134150 2854 example.com. AKgBFj85Uo2wNKfAmAKAuYuPv97dce/nRestfAyI/8xSV+ItducejWo=
+
+example.com. 3600 IN TYPE4011 \# 1 01
+example.com. 3600 IN RRSIG TYPE4011 3 2 3600 20070926134150 20070829134150 2854 example.com. AH6j4Lu9LzXaBMVFJv9LreuN2Ll0NZyLFDSlNyHMrYfSLmeIn3cjDaU=
+
+example.com. 3600 IN TYPE4012 \# 1 01
+example.com. 3600 IN RRSIG TYPE4012 3 2 3600 20070926134150 20070829134150 2854 example.com. AAjv9pQ3LjqN0wF1qFeMGXAuCt1URjPfjleedRYVzuRNXoQ5lXfpzyQ=
+
+example.com. 3600 IN TYPE4013 \# 1 01
+example.com. 3600 IN RRSIG TYPE4013 3 2 3600 20070926134150 20070829134150 2854 example.com. AH+2xPq9wrY9vSffsyNoIL3Apx78r5dssiS3TAP08BPVnjjDcNq4Bes=
+
+example.com. 3600 IN TYPE4014 \# 1 01
+example.com. 3600 IN RRSIG TYPE4014 3 2 3600 20070926134150 20070829134150 2854 example.com. ADKIK2RFjMOaqJ+M/tjOTavLKFNfmaRUVVSxqEThZz1U8CmMbIXhGJA=
+
+example.com. 3600 IN TYPE4015 \# 1 01
+example.com. 3600 IN RRSIG TYPE4015 3 2 3600 20070926134150 20070829134150 2854 example.com. AFu7ugUzI62yezWpaKQG6N2Yo+b/sMA9Rs1fLO40uiQ6zlky1O3MycA=
+
+example.com. 3600 IN TYPE4016 \# 1 01
+example.com. 3600 IN RRSIG TYPE4016 3 2 3600 20070926134150 20070829134150 2854 example.com. ADTGoPxpupJxeWtz4ZhqORhENIfQsvqWkDuwYfjYhWzBAInC5imcTdg=
+
+example.com. 3600 IN TYPE4017 \# 1 01
+example.com. 3600 IN RRSIG TYPE4017 3 2 3600 20070926134150 20070829134150 2854 example.com. ACboMr6p4SPV1qWM0jB2xGatOB55TvGhxsPWgM/GZnLhFl48mlUcV4s=
+
+example.com. 3600 IN TYPE4018 \# 1 01
+example.com. 3600 IN RRSIG TYPE4018 3 2 3600 20070926134150 20070829134150 2854 example.com. AKt3978Rr4cHFt8ybI/yQX4k166vfExEvjhhIt0oB/+xMwTqx1hbUKM=
+
+example.com. 3600 IN TYPE4019 \# 1 01
+example.com. 3600 IN RRSIG TYPE4019 3 2 3600 20070926134150 20070829134150 2854 example.com. AIwfMRhehYbil+xZXBeP6HTHzUBHkVbAgh+2uyEkWzzrjlnNy03BuNM=
+
+example.com. 3600 IN TYPE4020 \# 1 01
+example.com. 3600 IN RRSIG TYPE4020 3 2 3600 20070926134150 20070829134150 2854 example.com. ACPwXUUcLJcmTbxF5JMHjo2DjQfBWKQSCOtcAZe9rMe/MJ6dHEwlumc=
+
+example.com. 3600 IN TYPE4021 \# 1 01
+example.com. 3600 IN RRSIG TYPE4021 3 2 3600 20070926134150 20070829134150 2854 example.com. ADAGCUWISYj/NdMZAfEy6kG7AHXRMR5FB1cV9lke2JJb2G/r8mtJagw=
+
+example.com. 3600 IN TYPE4022 \# 1 01
+example.com. 3600 IN RRSIG TYPE4022 3 2 3600 20070926134150 20070829134150 2854 example.com. AHadIaUoEkAiFv/QW3ecrmt0D2/jC5JFdvDWKKvUt5xKqjXhWYEmt98=
+
+example.com. 3600 IN TYPE4023 \# 1 01
+example.com. 3600 IN RRSIG TYPE4023 3 2 3600 20070926134150 20070829134150 2854 example.com. ABZe4wLu0p9wwoB5Ks4yPiqiuVuIGiYXmukpfk9dm0wgluLVMAxqgCY=
+
+example.com. 3600 IN TYPE4024 \# 1 01
+example.com. 3600 IN RRSIG TYPE4024 3 2 3600 20070926134150 20070829134150 2854 example.com. AIQFmNXXbv99UrY8mDBv+noyxVHAqha2ueUUjn4v71t2FFVoh1AqzHY=
+
+example.com. 3600 IN TYPE4025 \# 1 01
+example.com. 3600 IN RRSIG TYPE4025 3 2 3600 20070926134150 20070829134150 2854 example.com. ACyDyHNctQoASoF4SNLgeRxc/kY2kLkK8e+8pEkE4yaiUGewO5jGAn4=
+
+example.com. 3600 IN TYPE4026 \# 1 01
+example.com. 3600 IN RRSIG TYPE4026 3 2 3600 20070926134150 20070829134150 2854 example.com. AGlB5LBNgxjcniTsPBZCOHO92LMtrw3RtnITlb6YAfyFljiyFXjzAr4=
+
+example.com. 3600 IN TYPE4027 \# 1 01
+example.com. 3600 IN RRSIG TYPE4027 3 2 3600 20070926134150 20070829134150 2854 example.com. AFP+FhrZw6hmuyiPd5LKirvfO/P/S1Ps1sy6FZGhFXQvFgMP3h8/AC0=
+
+example.com. 3600 IN TYPE4028 \# 1 01
+example.com. 3600 IN RRSIG TYPE4028 3 2 3600 20070926134150 20070829134150 2854 example.com. AJpyyjJY7TdAuD30QPiuBYgXCQECFlSdgrgBDpuOPwtFrxJfOfgJGN4=
+
+example.com. 3600 IN TYPE4029 \# 1 01
+example.com. 3600 IN RRSIG TYPE4029 3 2 3600 20070926134150 20070829134150 2854 example.com. AGaczd1oGZ/awOeOh20PDfL5HrH9kMC60dVIdVELP/PNZ5j9Y3O0FZY=
+
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ns7.domain-registry.example. 80173 IN A 62.4.86.230
+open.example.com. 600 IN A 213.154.224.1
+open.example.com. 600 IN AAAA 2001:7b8:206:1::53
+open.example.com. 600 IN AAAA 2001:7b8:206:1::1
+v.net.example. 28800 IN A 213.154.224.17
+v.net.example. 28800 IN AAAA 2001:7b8:206:1:200:39ff:fe59:b187
+johnny.example.com. 600 IN A 213.154.224.44
+open.example.com. 600 IN RRSIG A 3 3 600 20070926134150 20070829134150 2854 example.com. MC0CFQCh8bja923UJmg1+sYXMK8WIE4dpgIUQe9sZa0GOcUYSgb2rXoogF8af+Y= ;{id = 2854}
+open.example.com. 600 IN RRSIG AAAA 3 3 600 20070926134150 20070829134150 2854 example.com. MC0CFQCRGJgIS6kEVG7aJfovuG/q3cgOWwIUYEIFCnfRQlMIYWF7BKMQoMbdkE0= ;{id = 2854}
+johnny.example.com. 600 IN RRSIG A 3 3 600 20070926134150 20070829134150 2854 example.com. MCwCFAh0/zSpCd/9eMNz7AyfnuGQFD1ZAhQEpNFNw4XByNEcbi/vsVeii9kp7g== ;{id = 2854}
+_sip._udp.example.com. 600 IN RRSIG SRV 3 4 600 20070926134150 20070829134150 2854 example.com. MCwCFFSRVgOcq1ihVuO6MhCuzWs6SxpVAhRPHHCKy0JxymVkYeFOxTkbVSWMMw== ;{id = 2854}
+_sip._udp.example.com. 600 IN SRV 0 0 5060 johnny.example.com.
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+lot.example.com. IN ANY
+SECTION ANSWER
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+MATCH TCP
+REPLY RD DO
+SECTION QUESTION
+example.com. IN ANY
+ENTRY_END
+
+; Allow validation resuming for the RRSIGs
+STEP 2 TIME_PASSES ELAPSE 0.05
+STEP 3 TIME_PASSES ELAPSE 0.10
+
+; recursion happens here.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA AD DO NOERROR
+SECTION QUESTION
+example.com. IN ANY
+SECTION ANSWER
+example.com. 86400 IN SOA open.example.com. hostmaster.example.com. 2007090400 28800 7200 604800 18000
+example.com. 86400 IN RRSIG SOA 3 2 86400 20070926134150 20070829134150 2854 example.com. MC0CFQCSs8KJepwaIp5vu++/0hk04lkXvgIUdphJSAE/MYob30WcRei9/nL49tE= ;{id = 2854}
+example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJIIs70j+sDS/UT2QRp61SE7S3EEXopNXoFE73JLRmvpi/UrOO/Vz4Se6wXv/CYCKjGw06U4WRgRYXcpEhJROyNapmdIKSxhOzfLVE1gqA0PweZR8dtY3aNQSRn3sPpwJr6Mi/PqQKAMMrZ9ckJpf1+bQMOOvxgzz2U1GS18b3yZKcgTMEaJzd/GZYzi/BN2DzQ0MsrSwYXfsNLFOBbs8PJMW4LYIxeeOe6rUgkWOF7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b}
+example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFHq7BNVAeLW+Uw/rkjVS08lrMDk/AhR+bvChHfiE4jLb6uoyE54/irCuqA== ;{id = 2854}
+example.com. 600 IN NAPTR 20 0 "s" "SIP+D2U" "" _sip._udp.example.com.
+example.com. 600 IN RRSIG NAPTR 3 2 600 20070926134150 20070829134150 2854 example.com. MC0CFE8qs66bzuOyKmTIacamrmqabMRzAhUAn0MujX1LB0UpTHuLMgdgMgJJlq4= ;{id = 2854}
+example.com. 86400 IN AAAA 2001:7b8:206:1::1
+example.com. 86400 IN RRSIG AAAA 3 2 86400 20070926134150 20070829134150 2854 example.com. MC0CFEqS4WHyqhUkv7t42TsBZJk/Q9paAhUAtTZ8GaXGpot0PmsM0oGzQU+2iw4= ;{id = 2854}
+example.com. 86400 IN TXT "Stichting NLnet Labs"
+example.com. 86400 IN RRSIG TXT 3 2 86400 20070926134150 20070829134150 2854 example.com. MCwCFH3otn2u8zXczBS8L0VKpyAYZGSkAhQLGaQclkzMAzlB5j73opFjdkh8TA== ;{id = 2854}
+example.com. 86400 IN MX 100 v.net.example.
+example.com. 86400 IN MX 50 open.example.com.
+example.com. 86400 IN RRSIG MX 3 2 86400 20070926134150 20070829134150 2854 example.com. MCwCFEKh3jeqh69zcOqWWv3GNKlMECPyAhR9HJkcPLqlyVWUccWDFJfGGcQfdg== ;{id = 2854}
+example.com. 86400 IN NS v.net.example.
+example.com. 86400 IN NS open.example.com.
+example.com. 86400 IN NS ns7.domain-registry.example.
+example.com. 86400 IN RRSIG NS 3 2 86400 20070926134150 20070829134150 2854 example.com. MC0CFQCaRn30X4neKW7KYoTa2kcsoOLgfgIURvKEyDczLypWlx99KpxzMxRYhEc= ;{id = 2854}
+example.com. 86400 IN A 213.154.224.1
+example.com. 86400 IN RRSIG A 3 2 86400 20070926134150 20070829134150 2854 example.com. MCwCFH8kSLxmRTwzlGDxvF1e4y/gM+5dAhQkzyQ2a6Gf+CMaHzVScaUvTt9HhQ== ;{id = 2854}
+example.com. 18000 IN NSEC _sip._udp.example.com. A NS SOA MX TXT AAAA NAPTR RRSIG NSEC DNSKEY
+example.com. 18000 IN RRSIG NSEC 3 2 18000 20070926134150 20070829134150 2854 example.com. MCwCFBzOGtpgq4uJ2jeuLPYl2HowIRzDAhQVXNz1haQ1mI7z9lt5gcvWW+lFhA== ;{id = 2854}
+
+example.com. 3600 IN TYPE4001 \# 1 01
+example.com. 3600 IN RRSIG TYPE4001 3 2 3600 20070926134150 20070829134150 2854 example.com. ACwNOwI1/wEdnsnotQgFNLjmjcJonpU432TLsHbRo1atuUHhOA1cdeI=
+
+example.com. 3600 IN TYPE4002 \# 1 01
+example.com. 3600 IN RRSIG TYPE4002 3 2 3600 20070926134150 20070829134150 2854 example.com. AGSTEFePJzOtkGGJDJ2vvqV1ja0deBPWu6+DLV66VbWncuNjhGlgn4s=
+
+example.com. 3600 IN TYPE4003 \# 1 01
+example.com. 3600 IN RRSIG TYPE4003 3 2 3600 20070926134150 20070829134150 2854 example.com. AByS2v3czunuc/ISzNWxDfk1LDbXQvxdbdBf1kruF03Q+yumKsC5BMU=
+
+example.com. 3600 IN TYPE4004 \# 1 01
+example.com. 3600 IN RRSIG TYPE4004 3 2 3600 20070926134150 20070829134150 2854 example.com. AG8JfqFxAJDRsANgZvIhk6C4/d7oF5rXsNZN5pEFwRHL8oNN/xEkUpM=
+
+example.com. 3600 IN TYPE4005 \# 1 01
+example.com. 3600 IN RRSIG TYPE4005 3 2 3600 20070926134150 20070829134150 2854 example.com. AFv/ylW2n88mhr65bo4kWNp45w0mp4qcKxMfEZAuZt8d/DB0KZDn538=
+
+example.com. 3600 IN TYPE4006 \# 1 01
+example.com. 3600 IN RRSIG TYPE4006 3 2 3600 20070926134150 20070829134150 2854 example.com. AIrw3YdUF3Ri9KbDd89xtnpf7KeKkXy6VzOxguaFbS30jZcEc+8p+TM=
+
+example.com. 3600 IN TYPE4007 \# 1 01
+example.com. 3600 IN RRSIG TYPE4007 3 2 3600 20070926134150 20070829134150 2854 example.com. ABcI5dVAx0Ro+rl9+++Eh5/RG/Tbn0O4F8Mn+iwgaJwvZ9biGIaFPb8=
+
+example.com. 3600 IN TYPE4008 \# 1 01
+example.com. 3600 IN RRSIG TYPE4008 3 2 3600 20070926134150 20070829134150 2854 example.com. ADFnpyINGZa3komnJQft55pkXVr6HIwbn+CjJDEKT/t3va0UW78RJV0=
+
+example.com. 3600 IN TYPE4009 \# 1 01
+example.com. 3600 IN RRSIG TYPE4009 3 2 3600 20070926134150 20070829134150 2854 example.com. AA160AjWpMkX1YF0aXvL/PeRRA3vZsDtMvotP1NEm687q9nx46wW7To=
+
+example.com. 3600 IN TYPE4010 \# 1 01
+example.com. 3600 IN RRSIG TYPE4010 3 2 3600 20070926134150 20070829134150 2854 example.com. AKgBFj85Uo2wNKfAmAKAuYuPv97dce/nRestfAyI/8xSV+ItducejWo=
+
+example.com. 3600 IN TYPE4011 \# 1 01
+example.com. 3600 IN RRSIG TYPE4011 3 2 3600 20070926134150 20070829134150 2854 example.com. AH6j4Lu9LzXaBMVFJv9LreuN2Ll0NZyLFDSlNyHMrYfSLmeIn3cjDaU=
+
+example.com. 3600 IN TYPE4012 \# 1 01
+example.com. 3600 IN RRSIG TYPE4012 3 2 3600 20070926134150 20070829134150 2854 example.com. AAjv9pQ3LjqN0wF1qFeMGXAuCt1URjPfjleedRYVzuRNXoQ5lXfpzyQ=
+
+example.com. 3600 IN TYPE4013 \# 1 01
+example.com. 3600 IN RRSIG TYPE4013 3 2 3600 20070926134150 20070829134150 2854 example.com. AH+2xPq9wrY9vSffsyNoIL3Apx78r5dssiS3TAP08BPVnjjDcNq4Bes=
+
+example.com. 3600 IN TYPE4014 \# 1 01
+example.com. 3600 IN RRSIG TYPE4014 3 2 3600 20070926134150 20070829134150 2854 example.com. ADKIK2RFjMOaqJ+M/tjOTavLKFNfmaRUVVSxqEThZz1U8CmMbIXhGJA=
+
+example.com. 3600 IN TYPE4015 \# 1 01
+example.com. 3600 IN RRSIG TYPE4015 3 2 3600 20070926134150 20070829134150 2854 example.com. AFu7ugUzI62yezWpaKQG6N2Yo+b/sMA9Rs1fLO40uiQ6zlky1O3MycA=
+
+SECTION AUTHORITY
+SECTION ADDITIONAL
+open.example.com. 600 IN A 213.154.224.1
+open.example.com. 600 IN AAAA 2001:7b8:206:1::53
+open.example.com. 600 IN AAAA 2001:7b8:206:1::1
+open.example.com. 600 IN RRSIG A 3 3 600 20070926134150 20070829134150 2854 example.com. MC0CFQCh8bja923UJmg1+sYXMK8WIE4dpgIUQe9sZa0GOcUYSgb2rXoogF8af+Y= ;{id = 2854}
+open.example.com. 600 IN RRSIG AAAA 3 3 600 20070926134150 20070829134150 2854 example.com. MC0CFQCRGJgIS6kEVG7aJfovuG/q3cgOWwIUYEIFCnfRQlMIYWF7BKMQoMbdkE0= ;{id = 2854}
+ENTRY_END
+
+SCENARIO_END
diff --git a/testdata/val_canon_short_px.rpl b/testdata/val_canon_short_px.rpl
new file mode 100644
index 000000000000..3dda85fbec8b
--- /dev/null
+++ b/testdata/val_canon_short_px.rpl
@@ -0,0 +1,215 @@
+; config options
+; The island of trust is at test.
+server:
+ trust-anchor: "test. DS 1444 8 2 8a87d067fd09a5965244fe2e317dd26d182c468e0a7f26ecc4c7b479bf89db9b"
+ val-override-date: "20201020135527"
+ target-fetch-policy: "0 0 0 0 0"
+ qname-minimisation: "no"
+ fake-sha1: yes
+ trust-anchor-signaling: no
+ minimal-responses: no
+ iter-scrub-promiscuous: no
+ aggressive-nsec: yes
+ local-zone: test. nodefault
+ log-servfail: yes
+ ;msg-buffer-size: 4096
+
+stub-zone:
+ name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Test validator canonicalize of short PX record.
+; The record ends just before the second dname.
+; And the message buffer is small, and filled with previous content.
+
+; 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
+test. IN NS
+SECTION AUTHORITY
+test. IN NS ns.test.
+SECTION ADDITIONAL
+ns.test. IN A 1.2.3.5
+ENTRY_END
+RANGE_END
+
+; ns.test
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.5
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+test. IN NS
+SECTION ANSWER
+test. IN NS ns.test
+test. 3600 IN RRSIG NS 8 1 3600 20201116135527 20201019135527 1444 test. RGCxIO32TbbLTk6xZmTr+fjYPH50hntBxeOQ2DIj2pDsmjALcHYtVkOfpfk2EhOhHZd+9PLuoJPbJh6a9NqLSFeBvr0XZoCZoQ2g0tCHUNHcH5EVjA2TuYBQem6DVYnPLJ3914aRx0uA1j42b8dC2xsam/XkOo7U+dLbUW2Os1s=
+SECTION ADDITIONAL
+ns.test. IN A 1.2.3.5
+ns.test. 3600 IN RRSIG A 8 2 3600 20201116135527 20201019135527 1444 test. GskCc4/k6GjH9V9Jz2V5L2XLiizbOeWkB0feSbf+aN859S3vxVvtuqkvIgwY4LafUO1QAn/pUcv9zA7rcFO++rlg+8t6gvZTo9p3v0bfeIv2uJDsfSBD5jDh0WXlxjekfnrKrQp7zE+GiA93tWwKUWKPvxXDgP+n886e6WcbHJw=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.test. IN A
+SECTION ANSWER
+ns.test. IN A 1.2.3.5
+ns.test. 3600 IN RRSIG A 8 2 3600 20201116135527 20201019135527 1444 test. GskCc4/k6GjH9V9Jz2V5L2XLiizbOeWkB0feSbf+aN859S3vxVvtuqkvIgwY4LafUO1QAn/pUcv9zA7rcFO++rlg+8t6gvZTo9p3v0bfeIv2uJDsfSBD5jDh0WXlxjekfnrKrQp7zE+GiA93tWwKUWKPvxXDgP+n886e6WcbHJw=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.test. IN AAAA
+SECTION AUTHORITY
+test. 3600 IN SOA ns.test. host.test. 20201 3600 1800 604800 3600
+test. 3600 IN RRSIG SOA 8 1 3600 20201116135527 20201019135527 1444 test. IZJIDmEgf0W7A5G7hvvZ2hUqJ9Trbv1/i7ySapDmPbYV9lVCmHHobySxO01yDhI2/Pvpsvxqrm1Tiv3BxH8uzZ4keKgiQjBsSy4htAsFct9I4E7ly2glPj/Fm3oun3PsjJDv5QYhx0KS7w4IQKU7Nc9pfJc92uoUI5bdoC1pRGw=
+ns.test. 3600 IN NSEC nz.test. A RRSIG
+ns.test. 3600 IN RRSIG NSEC 8 2 3600 20201116135527 20201019135527 1444 test. PElArVB3KPg8KHAP7lzcNbhFuXNxTsHNTn1dZVncB5qmWRdIaeKpaXDjpH0JSXMaelGFS+/QhuQ6Hmw9+4VyZFRqMzGhw4agUR/2bxABHcDIG4ZpUwyeSP61ATTfHUkQVxaH2wjCWI/tfmesdP2xVE4GXyUvCIBxU914MkZbULU=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+test. IN DNSKEY
+SECTION ANSWER
+test. 3600 IN DNSKEY 257 3 8 AwEAAbd9WqjzE2Pynz21OG5doSf9hFzMr5dhzz2waZ3vTa+0o5r7AjTAqmA1yH/B3+aAMihUm5ucZSfVqo7+kOaRE8yFj9aivOmA1n1+JLevJq/oyvQyjxQN2Qb89LyaNUT5oKZIiL+uyyhNW3KDR3SSbQ/GBwQNDHVcZi+JDR3RC0r7 ;{id = 1444 (ksk), size = 1024b}
+test. 3600 IN RRSIG DNSKEY 8 1 3600 20201116135527 20201019135527 1444 test. UmRMS4iG9NBBHZYOtpwFFcJgbEb5SfHSgHd9XRe/8pTWM31WSDayn5ViPOBMqI1T5TXg2amc13dDI574xIM2oKMus3b5cBW72jJLW13jprBtslO6P8BMWb4HNnvLrJtQjwf3ErRirtTxinLmywQtmyr1cdthyG3Gp4N7i90fHSc=
+SECTION ADDITIONAL
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qname qtype
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+example.test. IN DS
+SECTION ANSWER
+example.test. 3600 IN DS 55567 8 2 a2d578906330a10a57d40462257b6ce038bad3f7bf4a45c46c46086e20a94b39
+example.test. 3600 IN RRSIG DS 8 2 3600 20201116135527 20201019135527 1444 test. P7+FTYW2qHuJ4I1YbuvseEz5X1lOYAraGEHB3C5y0OOCQFmhmSiFRdquNi2NlpcS6FXLdsE0EU+Bo1+0atTG4EkMWXbpF21lrtbB51BdsnlX4Mzc/o375fvjiOMwmF6wPCUaOUN62jrVrhsE/hedaVyDphDToqL17ETohwgUO2I=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+example.test. IN NS
+SECTION AUTHORITY
+example.test. IN NS ns.example.test.
+example.test. 3600 IN DS 55567 8 2 a2d578906330a10a57d40462257b6ce038bad3f7bf4a45c46c46086e20a94b39
+example.test. 3600 IN RRSIG DS 8 2 3600 20201116135527 20201019135527 1444 test. P7+FTYW2qHuJ4I1YbuvseEz5X1lOYAraGEHB3C5y0OOCQFmhmSiFRdquNi2NlpcS6FXLdsE0EU+Bo1+0atTG4EkMWXbpF21lrtbB51BdsnlX4Mzc/o375fvjiOMwmF6wPCUaOUN62jrVrhsE/hedaVyDphDToqL17ETohwgUO2I=
+SECTION ADDITIONAL
+ns.example.test. IN A 1.2.3.4
+ENTRY_END
+RANGE_END
+
+; ns.example.test.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.test. IN NS
+SECTION ANSWER
+example.test. IN NS ns.example.test.
+example.test. 3600 IN RRSIG NS 8 2 3600 20201116135527 20201019135527 55567 example.test. l1JT0wMlK0YI7/CWHzexf/k0iafUhCgN+BdgjBXIRXmSQNf4HDTiAkbcWL2/15qtnp12nQy9JeiTdSQ3vtPoHAJX4C5uTWaze4ms+Wrrf+n92sLCjacP9x50uuicH3URT6cKb1QCAPwlvlWxIlZjAMYFScSns7+C441NMJT8aE4=
+SECTION ADDITIONAL
+ns.example.test. IN A 1.2.3.4
+ns.example.test. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55567 example.test. 2PWaVaccZFQgfPKXNsdEGYUVaashCAj1ZhBo9XRt5eQKUFvZcauBjMnXIuxZFyWeootn1fZGw6GuPI5W48Y0FDx38H6adprkFgQikso2Y64jDdDMWznSo38Z/XqP+U0+kq4vmwonvmEMpm7hKnNEXvhqGKyGzyBwb+CZVJ2L8Eo=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.example.test. IN A
+SECTION ANSWER
+ns.example.test. IN A 1.2.3.4
+ns.example.test. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55567 example.test. 2PWaVaccZFQgfPKXNsdEGYUVaashCAj1ZhBo9XRt5eQKUFvZcauBjMnXIuxZFyWeootn1fZGw6GuPI5W48Y0FDx38H6adprkFgQikso2Y64jDdDMWznSo38Z/XqP+U0+kq4vmwonvmEMpm7hKnNEXvhqGKyGzyBwb+CZVJ2L8Eo=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.example.test. IN AAAA
+SECTION AUTHORITY
+example.test. 3600 IN SOA ns.example.test. host.example.test. 20301 3600 1800 604800 3600
+example.test. 3600 IN RRSIG SOA 8 2 3600 20201116135527 20201019135527 55567 example.test. 2UUkScBAN37fJpSrelhE8DotKvmOzj3q9wicaanCIaCv95DE4nQnePih5B+ek3FIRjB/Uv2+z4Ro5Uxy94XAnlK0rCkDLSa0U9U7KP0ytc88sevO0x1SCPAMoZoJO6JqHkv42pdh54WSz+Zb/D8npY0j/tksHe/uX+VQnMymgb8=
+ns.example.test. 3600 IN NSEC nz.example.test. A RRSIG
+ENTRY_END
+
+; response to DNSKEY priming query
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.test. IN DNSKEY
+SECTION ANSWER
+example.test. 3600 IN DNSKEY 257 3 8 AwEAAdug/L739i0mgN2nuK/bhxu3wFn5Ud9nK2+XUmZQlPUEZUC5YZvm1rfMmEWTGBn87fFxEu/kjFZHJ55JLzqsbbpVHLbmKCTT2gYR2FV2WDKROGKuYbVkJIXdKAjJ0ONuK507NinYvlWXIoxHn22KAWOd9wKgSTNHBlmGkX+ts3hh ;{id = 55567 (ksk), size = 1024b}
+example.test. 3600 IN RRSIG DNSKEY 8 2 3600 20201116135527 20201019135527 55567 example.test. IbWMC6quOuZFNPAVxQLqCJ9nLhindBo826rnLcg5yMgs9dGUSPOCXAfHTmbgJAUNs9HTFfrJWNvasnETs0UOpmEuifGwWdH1OlME7Gny4RL2QmITUFeMW81Jz1tiVQxFXl6yxT0jxOxvz+bqMHlrz+8IeWQXcO+GZTPu8ueq30g=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+px.example.test. IN PX
+SECTION ANSWER
+; PX with preference 10, first name "." , second name is missing.
+px.example.test. 3600 IN PX \# 3 000A00
+; invalid signature
+px.example.test. 3600 IN RRSIG PX 8 2 3600 20201116135527 20201019135527 55567 example.test. IbWMC6quOuZFNPAVxQLqCJ9nLhindBo826rnLcg5yMgs9dGUSPOCXAfHTmbgJAUNs9HTFfrJWNvasnETs0UOpmEuifGwWdH1OlME7Gny4RL2QmITUFeMW81Jz1tiVQxFXl6yxT0jxOxvz+bqMHlrz+8IeWQXcO+GZTPu8ueq30g
+ENTRY_END
+RANGE_END
+
+STEP 10 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+px.example.test. IN PX
+ENTRY_END
+
+STEP 20 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA DO SERVFAIL
+SECTION QUESTION
+px.example.test. IN PX
+SECTION ANSWER
+ENTRY_END
+
+SCENARIO_END
diff --git a/testdata/val_cnameother.rpl b/testdata/val_cnameother.rpl
new file mode 100644
index 000000000000..e21c9255b238
--- /dev/null
+++ b/testdata/val_cnameother.rpl
@@ -0,0 +1,270 @@
+; config options
+; The island of trust is at test.
+server:
+ trust-anchor: "test. DS 1444 8 2 8a87d067fd09a5965244fe2e317dd26d182c468e0a7f26ecc4c7b479bf89db9b"
+ val-override-date: "20201020135527"
+ target-fetch-policy: "0 0 0 0 0"
+ qname-minimisation: no
+ fake-sha1: yes
+ trust-anchor-signaling: no
+ minimal-responses: no
+ iter-scrub-promiscuous: no
+ aggressive-nsec: yes
+ local-zone: test. nodefault
+ log-servfail: yes
+
+stub-zone:
+ name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Test validator with CNAME and other data at the name
+
+; 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
+test. IN NS
+SECTION AUTHORITY
+test. IN NS ns.test.
+SECTION ADDITIONAL
+ns.test. IN A 1.2.3.5
+ENTRY_END
+RANGE_END
+
+; ns.test
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.5
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+test. IN NS
+SECTION ANSWER
+test. IN NS ns.test
+test. 3600 IN RRSIG NS 8 1 3600 20201116135527 20201019135527 1444 test. RGCxIO32TbbLTk6xZmTr+fjYPH50hntBxeOQ2DIj2pDsmjALcHYtVkOfpfk2EhOhHZd+9PLuoJPbJh6a9NqLSFeBvr0XZoCZoQ2g0tCHUNHcH5EVjA2TuYBQem6DVYnPLJ3914aRx0uA1j42b8dC2xsam/XkOo7U+dLbUW2Os1s=
+SECTION ADDITIONAL
+ns.test. IN A 1.2.3.5
+ns.test. 3600 IN RRSIG A 8 2 3600 20201116135527 20201019135527 1444 test. GskCc4/k6GjH9V9Jz2V5L2XLiizbOeWkB0feSbf+aN859S3vxVvtuqkvIgwY4LafUO1QAn/pUcv9zA7rcFO++rlg+8t6gvZTo9p3v0bfeIv2uJDsfSBD5jDh0WXlxjekfnrKrQp7zE+GiA93tWwKUWKPvxXDgP+n886e6WcbHJw=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.test. IN A
+SECTION ANSWER
+ns.test. IN A 1.2.3.5
+ns.test. 3600 IN RRSIG A 8 2 3600 20201116135527 20201019135527 1444 test. GskCc4/k6GjH9V9Jz2V5L2XLiizbOeWkB0feSbf+aN859S3vxVvtuqkvIgwY4LafUO1QAn/pUcv9zA7rcFO++rlg+8t6gvZTo9p3v0bfeIv2uJDsfSBD5jDh0WXlxjekfnrKrQp7zE+GiA93tWwKUWKPvxXDgP+n886e6WcbHJw=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.test. IN AAAA
+SECTION AUTHORITY
+test. 3600 IN SOA ns.test. host.test. 20201 3600 1800 604800 3600
+test. 3600 IN RRSIG SOA 8 1 3600 20201116135527 20201019135527 1444 test. IZJIDmEgf0W7A5G7hvvZ2hUqJ9Trbv1/i7ySapDmPbYV9lVCmHHobySxO01yDhI2/Pvpsvxqrm1Tiv3BxH8uzZ4keKgiQjBsSy4htAsFct9I4E7ly2glPj/Fm3oun3PsjJDv5QYhx0KS7w4IQKU7Nc9pfJc92uoUI5bdoC1pRGw=
+ns.test. 3600 IN NSEC nz.test. A RRSIG
+ns.test. 3600 IN RRSIG NSEC 8 2 3600 20201116135527 20201019135527 1444 test. PElArVB3KPg8KHAP7lzcNbhFuXNxTsHNTn1dZVncB5qmWRdIaeKpaXDjpH0JSXMaelGFS+/QhuQ6Hmw9+4VyZFRqMzGhw4agUR/2bxABHcDIG4ZpUwyeSP61ATTfHUkQVxaH2wjCWI/tfmesdP2xVE4GXyUvCIBxU914MkZbULU=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+test. IN DNSKEY
+SECTION ANSWER
+test. 3600 IN DNSKEY 257 3 8 AwEAAbd9WqjzE2Pynz21OG5doSf9hFzMr5dhzz2waZ3vTa+0o5r7AjTAqmA1yH/B3+aAMihUm5ucZSfVqo7+kOaRE8yFj9aivOmA1n1+JLevJq/oyvQyjxQN2Qb89LyaNUT5oKZIiL+uyyhNW3KDR3SSbQ/GBwQNDHVcZi+JDR3RC0r7 ;{id = 1444 (ksk), size = 1024b}
+test. 3600 IN RRSIG DNSKEY 8 1 3600 20201116135527 20201019135527 1444 test. UmRMS4iG9NBBHZYOtpwFFcJgbEb5SfHSgHd9XRe/8pTWM31WSDayn5ViPOBMqI1T5TXg2amc13dDI574xIM2oKMus3b5cBW72jJLW13jprBtslO6P8BMWb4HNnvLrJtQjwf3ErRirtTxinLmywQtmyr1cdthyG3Gp4N7i90fHSc=
+SECTION ADDITIONAL
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qname qtype
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+example.test. IN DS
+SECTION ANSWER
+example.test. 3600 IN DS 55567 8 2 a2d578906330a10a57d40462257b6ce038bad3f7bf4a45c46c46086e20a94b39
+example.test. 3600 IN RRSIG DS 8 2 3600 20201116135527 20201019135527 1444 test. P7+FTYW2qHuJ4I1YbuvseEz5X1lOYAraGEHB3C5y0OOCQFmhmSiFRdquNi2NlpcS6FXLdsE0EU+Bo1+0atTG4EkMWXbpF21lrtbB51BdsnlX4Mzc/o375fvjiOMwmF6wPCUaOUN62jrVrhsE/hedaVyDphDToqL17ETohwgUO2I=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+example.test. IN NS
+SECTION AUTHORITY
+example.test. IN NS ns.example.test.
+example.test. 3600 IN DS 55567 8 2 a2d578906330a10a57d40462257b6ce038bad3f7bf4a45c46c46086e20a94b39
+example.test. 3600 IN RRSIG DS 8 2 3600 20201116135527 20201019135527 1444 test. P7+FTYW2qHuJ4I1YbuvseEz5X1lOYAraGEHB3C5y0OOCQFmhmSiFRdquNi2NlpcS6FXLdsE0EU+Bo1+0atTG4EkMWXbpF21lrtbB51BdsnlX4Mzc/o375fvjiOMwmF6wPCUaOUN62jrVrhsE/hedaVyDphDToqL17ETohwgUO2I=
+SECTION ADDITIONAL
+ns.example.test. IN A 1.2.3.4
+ENTRY_END
+RANGE_END
+
+; ns.example.test.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.test. IN NS
+SECTION ANSWER
+example.test. IN NS ns.example.test.
+example.test. 3600 IN RRSIG NS 8 2 3600 20201116135527 20201019135527 55567 example.test. l1JT0wMlK0YI7/CWHzexf/k0iafUhCgN+BdgjBXIRXmSQNf4HDTiAkbcWL2/15qtnp12nQy9JeiTdSQ3vtPoHAJX4C5uTWaze4ms+Wrrf+n92sLCjacP9x50uuicH3URT6cKb1QCAPwlvlWxIlZjAMYFScSns7+C441NMJT8aE4=
+SECTION ADDITIONAL
+ns.example.test. IN A 1.2.3.4
+ns.example.test. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55567 example.test. 2PWaVaccZFQgfPKXNsdEGYUVaashCAj1ZhBo9XRt5eQKUFvZcauBjMnXIuxZFyWeootn1fZGw6GuPI5W48Y0FDx38H6adprkFgQikso2Y64jDdDMWznSo38Z/XqP+U0+kq4vmwonvmEMpm7hKnNEXvhqGKyGzyBwb+CZVJ2L8Eo=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.example.test. IN A
+SECTION ANSWER
+ns.example.test. IN A 1.2.3.4
+ns.example.test. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55567 example.test. 2PWaVaccZFQgfPKXNsdEGYUVaashCAj1ZhBo9XRt5eQKUFvZcauBjMnXIuxZFyWeootn1fZGw6GuPI5W48Y0FDx38H6adprkFgQikso2Y64jDdDMWznSo38Z/XqP+U0+kq4vmwonvmEMpm7hKnNEXvhqGKyGzyBwb+CZVJ2L8Eo=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.example.test. IN AAAA
+SECTION AUTHORITY
+example.test. 3600 IN SOA ns.example.test. host.example.test. 20301 3600 1800 604800 3600
+example.test. 3600 IN RRSIG SOA 8 2 3600 20201116135527 20201019135527 55567 example.test. 2UUkScBAN37fJpSrelhE8DotKvmOzj3q9wicaanCIaCv95DE4nQnePih5B+ek3FIRjB/Uv2+z4Ro5Uxy94XAnlK0rCkDLSa0U9U7KP0ytc88sevO0x1SCPAMoZoJO6JqHkv42pdh54WSz+Zb/D8npY0j/tksHe/uX+VQnMymgb8=
+ns.example.test. 3600 IN NSEC nz.example.test. A RRSIG
+ENTRY_END
+
+; response to DNSKEY priming query
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.test. IN DNSKEY
+SECTION ANSWER
+example.test. 3600 IN DNSKEY 257 3 8 AwEAAdug/L739i0mgN2nuK/bhxu3wFn5Ud9nK2+XUmZQlPUEZUC5YZvm1rfMmEWTGBn87fFxEu/kjFZHJ55JLzqsbbpVHLbmKCTT2gYR2FV2WDKROGKuYbVkJIXdKAjJ0ONuK507NinYvlWXIoxHn22KAWOd9wKgSTNHBlmGkX+ts3hh ;{id = 55567 (ksk), size = 1024b}
+example.test. 3600 IN RRSIG DNSKEY 8 2 3600 20201116135527 20201019135527 55567 example.test. IbWMC6quOuZFNPAVxQLqCJ9nLhindBo826rnLcg5yMgs9dGUSPOCXAfHTmbgJAUNs9HTFfrJWNvasnETs0UOpmEuifGwWdH1OlME7Gny4RL2QmITUFeMW81Jz1tiVQxFXl6yxT0jxOxvz+bqMHlrz+8IeWQXcO+GZTPu8ueq30g=
+ENTRY_END
+
+; response to query of interest
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+www.example.test. IN A
+SECTION ANSWER
+www.example.test. 3600 IN A 10.20.30.40
+www.example.test. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55567 example.test. OQEgDcpez8Bvdwd+hxA3v63FWJhutWkv9w+k+8RLcWv34WPhebsf7CBV74ggY2c+HafvYiuIFfhdF5CX28YQjxqWVzFgE6bEA6spPc6qdHiQaY/096/4SLCDcL+2EtOqcR/uZGj5uNhhaCJ9UjscBKfEZmHUOAMXKmjsvl0I/+I=
+www.example.test. 3600 IN CNAME tgt.example.test.
+www.example.test. 3600 IN RRSIG CNAME 8 3 3600 20201116135527 20201019135527 55567 example.test. hbJ/74XR/5S9KJ36xi5eXTV9Qmx9RTkVpkuN3sFJb2cRbkqSSv8VhMhbePh/XbGQCaVvPoTRrKMASf5Nkn2x1LX378cFdnn1p2+85Q9AYjc6oAcvGh2NNBEh/F6UA3nzCHI6S++QlyQFNUKwuAnrg/9g9nE6BdVC3rL0pKSEWPU=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+www2.example.test. IN A
+SECTION ANSWER
+www2.example.test. 3600 IN CNAME tgt2.example.test.
+www2.example.test. 3600 IN RRSIG CNAME 8 3 3600 20201116135527 20201019135527 55567 example.test. LOs6t3W5DExcLi17Zysn0Iw4dFl/G0gUMvLDtLZh/Vq7QNGFZ/EI55hUkiELI0HTyCHW2z/5MbGk3mLfStGBrNaTbZTSUxkUnxKI+eaEReWXPepEALea4Isf5KYxj1HyrhWcjI3CQp9+ALjZWtI63fVf64mdiu2hAAMIVt7GiGU=
+www2.example.test. 3600 IN A 10.20.30.42
+www2.example.test. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55567 example.test. tbNIBmCBc1WeNrgG2aXc+g/T73iRKteVWrhHf4w/9EBr7bVW0K0Lt7oewg5LvWMmJwhEef54Er3SxoVsxwFWnUavJqVymv55EMp0fkFv7Fiud8Q3CBwi19h2x5T0upNadHkKFKo1FGjs3jasaPHcV3MLU0uxTUaIJZ9v4GY8HlU=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+tgt.example.test. IN A
+SECTION ANSWER
+tgt.example.test. 3600 IN A 10.20.30.44
+tgt.example.test. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55567 example.test. NuTUOwgit91nOEVd4OrA0WdfMzwkRQBgFdgHkv65+MVkjBBI8MzDrgmrJykwNfhjOetsUU7/ON1rABPCNbdaGFwXjDAghukNxCiN+vAGk+dMgG6JVI/mDDJaC9MdJpBGBEWOnF1yB66aLENIhNYoiYyn9aAc79MfVh/1bu5by9E=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+tgt2.example.test. IN A
+SECTION ANSWER
+tgt2.example.test. 3600 IN A 10.20.30.45
+tgt2.example.test. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55567 example.test. W1fB3ZFbW5nLDgVEeyvlD/SFBWudR32ELh0JOlyC3kN/ZVGrJvEH7QQCvuJ0KuXgjcio2uxNSCXeVoYP8AyiCdL/ji+MAy3y+YvRWSEAVqhIebKlr5zOWtAscNBnMxenpmkd23jrIIHMQepfv4jvQue73Lb2+url/RJtNcsRaio=
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+www.example.test. IN A
+ENTRY_END
+
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA AD DO NOERROR
+SECTION QUESTION
+www.example.test. IN A
+SECTION ANSWER
+www.example.test. 3600 IN A 10.20.30.40
+www.example.test. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55567 example.test. OQEgDcpez8Bvdwd+hxA3v63FWJhutWkv9w+k+8RLcWv34WPhebsf7CBV74ggY2c+HafvYiuIFfhdF5CX28YQjxqWVzFgE6bEA6spPc6qdHiQaY/096/4SLCDcL+2EtOqcR/uZGj5uNhhaCJ9UjscBKfEZmHUOAMXKmjsvl0I/+I=
+ENTRY_END
+
+STEP 20 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+www2.example.test. IN A
+ENTRY_END
+
+STEP 21 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA AD DO NOERROR
+SECTION QUESTION
+www2.example.test. IN A
+SECTION ANSWER
+www2.example.test. 3600 IN CNAME tgt2.example.test.
+www2.example.test. 3600 IN RRSIG CNAME 8 3 3600 20201116135527 20201019135527 55567 example.test. LOs6t3W5DExcLi17Zysn0Iw4dFl/G0gUMvLDtLZh/Vq7QNGFZ/EI55hUkiELI0HTyCHW2z/5MbGk3mLfStGBrNaTbZTSUxkUnxKI+eaEReWXPepEALea4Isf5KYxj1HyrhWcjI3CQp9+ALjZWtI63fVf64mdiu2hAAMIVt7GiGU=
+tgt2.example.test. 3600 IN A 10.20.30.45
+tgt2.example.test. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55567 example.test. W1fB3ZFbW5nLDgVEeyvlD/SFBWudR32ELh0JOlyC3kN/ZVGrJvEH7QQCvuJ0KuXgjcio2uxNSCXeVoYP8AyiCdL/ji+MAy3y+YvRWSEAVqhIebKlr5zOWtAscNBnMxenpmkd23jrIIHMQepfv4jvQue73Lb2+url/RJtNcsRaio=
+ENTRY_END
+
+SCENARIO_END
diff --git a/testdata/val_cnametonsec.rpl b/testdata/val_cnametonsec.rpl
index 27a562f3a645..9e758a56fb6e 100644
--- a/testdata/val_cnametonsec.rpl
+++ b/testdata/val_cnametonsec.rpl
@@ -91,7 +91,7 @@ ENTRY_END
ENTRY_BEGIN
MATCH opcode qtype qname
ADJUST copy_id
-REPLY QR NOERROR
+REPLY QR AA NOERROR
SECTION QUESTION
ns.example.com. IN AAAA
SECTION ANSWER
diff --git a/testdata/val_cnametooptin.rpl b/testdata/val_cnametooptin.rpl
index 77a3c06bdef7..8441760ce86b 100644
--- a/testdata/val_cnametooptin.rpl
+++ b/testdata/val_cnametooptin.rpl
@@ -91,7 +91,7 @@ ENTRY_END
ENTRY_BEGIN
MATCH opcode qtype qname
ADJUST copy_id
-REPLY QR NOERROR
+REPLY QR AA NOERROR
SECTION QUESTION
ns.example.com. IN AAAA
SECTION ANSWER
diff --git a/testdata/val_ds_cname.rpl b/testdata/val_ds_cname.rpl
index 9a8919fb0005..c14d31edaee1 100644
--- a/testdata/val_ds_cname.rpl
+++ b/testdata/val_ds_cname.rpl
@@ -90,7 +90,7 @@ RANGE_BEGIN 0 100
ENTRY_BEGIN
MATCH opcode qtype qname
ADJUST copy_id
-REPLY QR NOERROR
+REPLY QR AA NOERROR
SECTION QUESTION
ns.example.com. IN AAAA
SECTION ANSWER
diff --git a/testdata/val_dsnsec.rpl b/testdata/val_dsnsec.rpl
index 07dd40340c4d..3e47c5ae0aba 100644
--- a/testdata/val_dsnsec.rpl
+++ b/testdata/val_dsnsec.rpl
@@ -92,7 +92,7 @@ ENTRY_END
ENTRY_BEGIN
MATCH opcode qtype qname
ADJUST copy_id
-REPLY QR NOERROR
+REPLY QR AA NOERROR
SECTION QUESTION
ns.example.com. IN AAAA
SECTION ANSWER
diff --git a/testdata/val_global_quota.rpl b/testdata/val_global_quota.rpl
new file mode 100644
index 000000000000..baeaa5cbb245
--- /dev/null
+++ b/testdata/val_global_quota.rpl
@@ -0,0 +1,358 @@
+; config options
+; The island of trust is at test.
+server:
+ trust-anchor: "test. DS 1444 8 2 8a87d067fd09a5965244fe2e317dd26d182c468e0a7f26ecc4c7b479bf89db9b"
+ val-override-date: "20201020135527"
+ target-fetch-policy: "0 0 0 0 0"
+ qname-minimisation: no
+ fake-sha1: yes
+ trust-anchor-signaling: no
+ minimal-responses: no
+ iter-scrub-promiscuous: no
+ aggressive-nsec: yes
+ local-zone: test. nodefault
+ log-servfail: yes
+ max-global-quota: 200
+ val-max-restart: 5
+
+stub-zone:
+ name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Test global quota with validator
+
+; 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
+test. IN NS
+SECTION AUTHORITY
+test. IN NS ns.test.
+SECTION ADDITIONAL
+ns.test. IN A 1.2.3.5
+ENTRY_END
+RANGE_END
+
+; ns.test
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.5
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+test. IN NS
+SECTION ANSWER
+test. IN NS ns.test
+test. 3600 IN RRSIG NS 8 1 3600 20201116135527 20201019135527 1444 test. RGCxIO32TbbLTk6xZmTr+fjYPH50hntBxeOQ2DIj2pDsmjALcHYtVkOfpfk2EhOhHZd+9PLuoJPbJh6a9NqLSFeBvr0XZoCZoQ2g0tCHUNHcH5EVjA2TuYBQem6DVYnPLJ3914aRx0uA1j42b8dC2xsam/XkOo7U+dLbUW2Os1s=
+SECTION ADDITIONAL
+ns.test. IN A 1.2.3.5
+ns.test. 3600 IN RRSIG A 8 2 3600 20201116135527 20201019135527 1444 test. GskCc4/k6GjH9V9Jz2V5L2XLiizbOeWkB0feSbf+aN859S3vxVvtuqkvIgwY4LafUO1QAn/pUcv9zA7rcFO++rlg+8t6gvZTo9p3v0bfeIv2uJDsfSBD5jDh0WXlxjekfnrKrQp7zE+GiA93tWwKUWKPvxXDgP+n886e6WcbHJw=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.test. IN A
+SECTION ANSWER
+ns.test. IN A 1.2.3.5
+ns.test. 3600 IN RRSIG A 8 2 3600 20201116135527 20201019135527 1444 test. GskCc4/k6GjH9V9Jz2V5L2XLiizbOeWkB0feSbf+aN859S3vxVvtuqkvIgwY4LafUO1QAn/pUcv9zA7rcFO++rlg+8t6gvZTo9p3v0bfeIv2uJDsfSBD5jDh0WXlxjekfnrKrQp7zE+GiA93tWwKUWKPvxXDgP+n886e6WcbHJw=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.test. IN AAAA
+SECTION AUTHORITY
+test. 3600 IN SOA ns.test. host.test. 20201 3600 1800 604800 3600
+test. 3600 IN RRSIG SOA 8 1 3600 20201116135527 20201019135527 1444 test. IZJIDmEgf0W7A5G7hvvZ2hUqJ9Trbv1/i7ySapDmPbYV9lVCmHHobySxO01yDhI2/Pvpsvxqrm1Tiv3BxH8uzZ4keKgiQjBsSy4htAsFct9I4E7ly2glPj/Fm3oun3PsjJDv5QYhx0KS7w4IQKU7Nc9pfJc92uoUI5bdoC1pRGw=
+ns.test. 3600 IN NSEC nz.test. A RRSIG
+ns.test. 3600 IN RRSIG NSEC 8 2 3600 20201116135527 20201019135527 1444 test. PElArVB3KPg8KHAP7lzcNbhFuXNxTsHNTn1dZVncB5qmWRdIaeKpaXDjpH0JSXMaelGFS+/QhuQ6Hmw9+4VyZFRqMzGhw4agUR/2bxABHcDIG4ZpUwyeSP61ATTfHUkQVxaH2wjCWI/tfmesdP2xVE4GXyUvCIBxU914MkZbULU=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+test. IN DNSKEY
+SECTION ANSWER
+test. 3600 IN DNSKEY 257 3 8 AwEAAbd9WqjzE2Pynz21OG5doSf9hFzMr5dhzz2waZ3vTa+0o5r7AjTAqmA1yH/B3+aAMihUm5ucZSfVqo7+kOaRE8yFj9aivOmA1n1+JLevJq/oyvQyjxQN2Qb89LyaNUT5oKZIiL+uyyhNW3KDR3SSbQ/GBwQNDHVcZi+JDR3RC0r7 ;{id = 1444 (ksk), size = 1024b}
+test. 3600 IN RRSIG DNSKEY 8 1 3600 20201116135527 20201019135527 1444 test. UmRMS4iG9NBBHZYOtpwFFcJgbEb5SfHSgHd9XRe/8pTWM31WSDayn5ViPOBMqI1T5TXg2amc13dDI574xIM2oKMus3b5cBW72jJLW13jprBtslO6P8BMWb4HNnvLrJtQjwf3ErRirtTxinLmywQtmyr1cdthyG3Gp4N7i90fHSc=
+SECTION ADDITIONAL
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qname qtype
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+example.test. IN DS
+SECTION ANSWER
+example.test. 3600 IN DS 55567 8 2 a2d578906330a10a57d40462257b6ce038bad3f7bf4a45c46c46086e20a94b39
+example.test. 3600 IN RRSIG DS 8 2 3600 20201116135527 20201019135527 1444 test. P7+FTYW2qHuJ4I1YbuvseEz5X1lOYAraGEHB3C5y0OOCQFmhmSiFRdquNi2NlpcS6FXLdsE0EU+Bo1+0atTG4EkMWXbpF21lrtbB51BdsnlX4Mzc/o375fvjiOMwmF6wPCUaOUN62jrVrhsE/hedaVyDphDToqL17ETohwgUO2I=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+example.test. IN NS
+SECTION AUTHORITY
+example.test. IN NS ns.example.test.
+example.test. 3600 IN DS 55567 8 2 a2d578906330a10a57d40462257b6ce038bad3f7bf4a45c46c46086e20a94b39
+example.test. 3600 IN RRSIG DS 8 2 3600 20201116135527 20201019135527 1444 test. P7+FTYW2qHuJ4I1YbuvseEz5X1lOYAraGEHB3C5y0OOCQFmhmSiFRdquNi2NlpcS6FXLdsE0EU+Bo1+0atTG4EkMWXbpF21lrtbB51BdsnlX4Mzc/o375fvjiOMwmF6wPCUaOUN62jrVrhsE/hedaVyDphDToqL17ETohwgUO2I=
+SECTION ADDITIONAL
+ns.example.test. IN A 1.2.3.4
+ENTRY_END
+RANGE_END
+
+; ns.example.test.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.test. IN NS
+SECTION ANSWER
+example.test. IN NS ns.example.test.
+example.test. 3600 IN RRSIG NS 8 2 3600 20201116135527 20201019135527 55567 example.test. l1JT0wMlK0YI7/CWHzexf/k0iafUhCgN+BdgjBXIRXmSQNf4HDTiAkbcWL2/15qtnp12nQy9JeiTdSQ3vtPoHAJX4C5uTWaze4ms+Wrrf+n92sLCjacP9x50uuicH3URT6cKb1QCAPwlvlWxIlZjAMYFScSns7+C441NMJT8aE4=
+SECTION ADDITIONAL
+ns.example.test. IN A 1.2.3.4
+ns.example.test. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55567 example.test. 2PWaVaccZFQgfPKXNsdEGYUVaashCAj1ZhBo9XRt5eQKUFvZcauBjMnXIuxZFyWeootn1fZGw6GuPI5W48Y0FDx38H6adprkFgQikso2Y64jDdDMWznSo38Z/XqP+U0+kq4vmwonvmEMpm7hKnNEXvhqGKyGzyBwb+CZVJ2L8Eo=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.example.test. IN A
+SECTION ANSWER
+ns.example.test. IN A 1.2.3.4
+ns.example.test. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55567 example.test. 2PWaVaccZFQgfPKXNsdEGYUVaashCAj1ZhBo9XRt5eQKUFvZcauBjMnXIuxZFyWeootn1fZGw6GuPI5W48Y0FDx38H6adprkFgQikso2Y64jDdDMWznSo38Z/XqP+U0+kq4vmwonvmEMpm7hKnNEXvhqGKyGzyBwb+CZVJ2L8Eo=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.example.test. IN AAAA
+SECTION AUTHORITY
+example.test. 3600 IN SOA ns.example.test. host.example.test. 20301 3600 1800 604800 3600
+example.test. 3600 IN RRSIG SOA 8 2 3600 20201116135527 20201019135527 55567 example.test. 2UUkScBAN37fJpSrelhE8DotKvmOzj3q9wicaanCIaCv95DE4nQnePih5B+ek3FIRjB/Uv2+z4Ro5Uxy94XAnlK0rCkDLSa0U9U7KP0ytc88sevO0x1SCPAMoZoJO6JqHkv42pdh54WSz+Zb/D8npY0j/tksHe/uX+VQnMymgb8=
+ns.example.test. 3600 IN NSEC nz.example.test. A RRSIG
+example.test. 3600 IN SOA ns.example.test. host.example.test. 20301 3600 1800 604800 3600
+ENTRY_END
+
+; response to DNSKEY priming query
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.test. IN DNSKEY
+SECTION ANSWER
+example.test. 3600 IN DNSKEY 257 3 8 AwEAAdug/L739i0mgN2nuK/bhxu3wFn5Ud9nK2+XUmZQlPUEZUC5YZvm1rfMmEWTGBn87fFxEu/kjFZHJ55JLzqsbbpVHLbmKCTT2gYR2FV2WDKROGKuYbVkJIXdKAjJ0ONuK507NinYvlWXIoxHn22KAWOd9wKgSTNHBlmGkX+ts3hh ;{id = 55567 (ksk), size = 1024b}
+example.test. 3600 IN RRSIG DNSKEY 8 2 3600 20201116135527 20201019135527 55567 example.test. IbWMC6quOuZFNPAVxQLqCJ9nLhindBo826rnLcg5yMgs9dGUSPOCXAfHTmbgJAUNs9HTFfrJWNvasnETs0UOpmEuifGwWdH1OlME7Gny4RL2QmITUFeMW81Jz1tiVQxFXl6yxT0jxOxvz+bqMHlrz+8IeWQXcO+GZTPu8ueq30g=
+ENTRY_END
+
+; response to query of interest
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+;a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.example.test. IN A
+a.a.a.a.a.example.test. IN A
+SECTION ANSWER
+; unsigned answer
+;a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.example.test. 3600 IN A 10.20.30.40
+a.a.a.a.a.example.test. IN A 10.20.30.40
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+a.example.test. IN DS
+SECTION ANSWER
+SECTION AUTHORITY
+example.test. 3600 IN SOA ns.example.test. host.example.test. 20301 3600 1800 604800 3600
+example.test. 3600 IN RRSIG SOA 8 2 3600 20201116135527 20201019135527 55567 example.test. 2UUkScBAN37fJpSrelhE8DotKvmOzj3q9wicaanCIaCv95DE4nQnePih5B+ek3FIRjB/Uv2+z4Ro5Uxy94XAnlK0rCkDLSa0U9U7KP0ytc88sevO0x1SCPAMoZoJO6JqHkv42pdh54WSz+Zb/D8npY0j/tksHe/uX+VQnMymgb8=
+a.example.test. IN NSEC \000.a.example.test. NSEC RRSIG TYPE128
+a.example.test. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55567 example.test. IFHxa61iaEHyRiTrez1FNy6TArOerKgaRwkhjwEk8basD2SZ7wP63ZvxfiNJlg3VAKxM8RApT4GIXDLBT2IlAK5I+K2Ti1dxUw9XwhnOpVf7/4WDEEgQKBsYPVrSAGVig9v5eefuEmVQTphHovDAAOkKYd4rCJ50WX+ckLsP658=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+a.a.example.test. IN DS
+SECTION ANSWER
+SECTION AUTHORITY
+example.test. 3600 IN SOA ns.example.test. host.example.test. 20301 3600 1800 604800 3600
+example.test. 3600 IN RRSIG SOA 8 2 3600 20201116135527 20201019135527 55567 example.test. 2UUkScBAN37fJpSrelhE8DotKvmOzj3q9wicaanCIaCv95DE4nQnePih5B+ek3FIRjB/Uv2+z4Ro5Uxy94XAnlK0rCkDLSa0U9U7KP0ytc88sevO0x1SCPAMoZoJO6JqHkv42pdh54WSz+Zb/D8npY0j/tksHe/uX+VQnMymgb8=
+a.a.example.test. IN NSEC \000.a.a.example.test. NSEC RRSIG TYPE128
+a.a.example.test. 3600 IN RRSIG NSEC 8 4 3600 20201116135527 20201019135527 55567 example.test. hqwhNsdny2lWkGnWhF7WaIyWhGDJHBVzJbwO8wZ6e+SIfQtt4AFFqXqCtqOIN9u+jjU7YT8SdABQLEoFm6TN47+lC0689fpO59xx4qOnpSyCRA0sRMDW4AcwVDHLECLGEMzI7xHdCPGFGxYl+abr5lcw+A4sH5RomJ0DTRKbB10=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+a.a.a.example.test. IN DS
+SECTION ANSWER
+SECTION AUTHORITY
+example.test. 3600 IN SOA ns.example.test. host.example.test. 20301 3600 1800 604800 3600
+example.test. 3600 IN RRSIG SOA 8 2 3600 20201116135527 20201019135527 55567 example.test. 2UUkScBAN37fJpSrelhE8DotKvmOzj3q9wicaanCIaCv95DE4nQnePih5B+ek3FIRjB/Uv2+z4Ro5Uxy94XAnlK0rCkDLSa0U9U7KP0ytc88sevO0x1SCPAMoZoJO6JqHkv42pdh54WSz+Zb/D8npY0j/tksHe/uX+VQnMymgb8=
+a.a.a.example.test. IN NSEC \000.a.a.a.example.test. NSEC RRSIG TYPE128
+a.a.a.example.test. 3600 IN RRSIG NSEC 8 5 3600 20201116135527 20201019135527 55567 example.test. afjzouI1IgcLgzkuTUTZC6yBZ2IDhWjV1s7zIRuL9fdf1sKvhooJK7+1mnozoQ4VCbLWFVoD4NX/nKcB5ALxJYjEw28qcAYtMwEme3Hj0FNoe7NR2M/nQonqvGfYo6FAUJBJfvcJaXMROAyw16R8qdlpqBgdecfk8LfEcJ3DcWA=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+a.a.a.a.example.test. IN DS
+SECTION ANSWER
+SECTION AUTHORITY
+example.test. 3600 IN SOA ns.example.test. host.example.test. 20301 3600 1800 604800 3600
+example.test. 3600 IN RRSIG SOA 8 2 3600 20201116135527 20201019135527 55567 example.test. 2UUkScBAN37fJpSrelhE8DotKvmOzj3q9wicaanCIaCv95DE4nQnePih5B+ek3FIRjB/Uv2+z4Ro5Uxy94XAnlK0rCkDLSa0U9U7KP0ytc88sevO0x1SCPAMoZoJO6JqHkv42pdh54WSz+Zb/D8npY0j/tksHe/uX+VQnMymgb8=
+a.a.a.a.example.test. IN NSEC \000.a.a.a.a.example.test. NSEC RRSIG TYPE128
+a.a.a.a.example.test. 3600 IN RRSIG NSEC 8 6 3600 20201116135527 20201019135527 55567 example.test. F9mOk6KyGI6LSDgs7l50fPIWQVz65bO2ONxoZe4BzE0NqCTloznQ7r0QXXMmcI6IAC2W7RjsymsViTexuMI8sLaFvzNoM5jDLnic4KFZFIuUy1oA/2Hd56TwofK/KctbkQQpT8IDKc/pnxp8iXTjwNsV31fzZ5RPWt2YqpMfY4Q=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+a.a.a.a.a.example.test. IN DS
+SECTION ANSWER
+SECTION AUTHORITY
+example.test. 3600 IN SOA ns.example.test. host.example.test. 20301 3600 1800 604800 3600
+example.test. 3600 IN RRSIG SOA 8 2 3600 20201116135527 20201019135527 55567 example.test. 2UUkScBAN37fJpSrelhE8DotKvmOzj3q9wicaanCIaCv95DE4nQnePih5B+ek3FIRjB/Uv2+z4Ro5Uxy94XAnlK0rCkDLSa0U9U7KP0ytc88sevO0x1SCPAMoZoJO6JqHkv42pdh54WSz+Zb/D8npY0j/tksHe/uX+VQnMymgb8=
+a.a.a.a.a.example.test. IN NSEC \000.a.a.a.a.a.example.test. NSEC RRSIG TYPE128
+a.a.a.a.a.example.test. 3600 IN RRSIG NSEC 8 7 3600 20201116135527 20201019135527 55567 example.test. AlEcceF3UARAczJQW7/skNbf0t6gum2LEfFWilZtakpdrnnl+HkIR8LttE/gOjLFv/MWzSWPLDmsj9Be/7PsWWddJwN0hgrskt/W4KBPdYkBhgnrfxOMYm6ZTDY6EUh9iTUAdWP0SDmfG7Zs5UIhIpsYEnxsYF0oRT5HZpYMBq8=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+a.a.a.a.a.a.example.test. IN DS
+SECTION ANSWER
+SECTION AUTHORITY
+example.test. 3600 IN SOA ns.example.test. host.example.test. 20301 3600 1800 604800 3600
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+a.example.test. IN A
+SECTION ANSWER
+SECTION AUTHORITY
+example.test. 3600 IN SOA ns.example.test. host.example.test. 20301 3600 1800 604800 3600
+example.test. 3600 IN RRSIG SOA 8 2 3600 20201116135527 20201019135527 55567 example.test. 2UUkScBAN37fJpSrelhE8DotKvmOzj3q9wicaanCIaCv95DE4nQnePih5B+ek3FIRjB/Uv2+z4Ro5Uxy94XAnlK0rCkDLSa0U9U7KP0ytc88sevO0x1SCPAMoZoJO6JqHkv42pdh54WSz+Zb/D8npY0j/tksHe/uX+VQnMymgb8=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+a.a.example.test. IN A
+SECTION ANSWER
+SECTION AUTHORITY
+example.test. 3600 IN SOA ns.example.test. host.example.test. 20301 3600 1800 604800 3600
+example.test. 3600 IN RRSIG SOA 8 2 3600 20201116135527 20201019135527 55567 example.test. 2UUkScBAN37fJpSrelhE8DotKvmOzj3q9wicaanCIaCv95DE4nQnePih5B+ek3FIRjB/Uv2+z4Ro5Uxy94XAnlK0rCkDLSa0U9U7KP0ytc88sevO0x1SCPAMoZoJO6JqHkv42pdh54WSz+Zb/D8npY0j/tksHe/uX+VQnMymgb8=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+a.a.a.example.test. IN A
+SECTION ANSWER
+SECTION AUTHORITY
+example.test. 3600 IN SOA ns.example.test. host.example.test. 20301 3600 1800 604800 3600
+example.test. 3600 IN RRSIG SOA 8 2 3600 20201116135527 20201019135527 55567 example.test. 2UUkScBAN37fJpSrelhE8DotKvmOzj3q9wicaanCIaCv95DE4nQnePih5B+ek3FIRjB/Uv2+z4Ro5Uxy94XAnlK0rCkDLSa0U9U7KP0ytc88sevO0x1SCPAMoZoJO6JqHkv42pdh54WSz+Zb/D8npY0j/tksHe/uX+VQnMymgb8=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+a.a.a.a.example.test. IN A
+SECTION ANSWER
+SECTION AUTHORITY
+example.test. 3600 IN SOA ns.example.test. host.example.test. 20301 3600 1800 604800 3600
+example.test. 3600 IN RRSIG SOA 8 2 3600 20201116135527 20201019135527 55567 example.test. 2UUkScBAN37fJpSrelhE8DotKvmOzj3q9wicaanCIaCv95DE4nQnePih5B+ek3FIRjB/Uv2+z4Ro5Uxy94XAnlK0rCkDLSa0U9U7KP0ytc88sevO0x1SCPAMoZoJO6JqHkv42pdh54WSz+Zb/D8npY0j/tksHe/uX+VQnMymgb8=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+a.a.a.a.a.example.test. IN A
+SECTION ANSWER
+SECTION AUTHORITY
+example.test. 3600 IN SOA ns.example.test. host.example.test. 20301 3600 1800 604800 3600
+example.test. 3600 IN RRSIG SOA 8 2 3600 20201116135527 20201019135527 55567 example.test. 2UUkScBAN37fJpSrelhE8DotKvmOzj3q9wicaanCIaCv95DE4nQnePih5B+ek3FIRjB/Uv2+z4Ro5Uxy94XAnlK0rCkDLSa0U9U7KP0ytc88sevO0x1SCPAMoZoJO6JqHkv42pdh54WSz+Zb/D8npY0j/tksHe/uX+VQnMymgb8=
+ENTRY_END
+
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+a.a.a.a.a.example.test. IN A
+ENTRY_END
+
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA DO SERVFAIL
+SECTION QUESTION
+a.a.a.a.a.example.test. IN A
+SECTION ANSWER
+ENTRY_END
+
+SCENARIO_END
diff --git a/testdata/val_negcache_ds_nsec3.rpl b/testdata/val_negcache_ds_nsec3.rpl
new file mode 100644
index 000000000000..c530abeaf950
--- /dev/null
+++ b/testdata/val_negcache_ds_nsec3.rpl
@@ -0,0 +1,185 @@
+; 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 negative cache NSEC3 nosalt DS response
+
+; 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 qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.sub.example.com. IN A
+SECTION AUTHORITY
+com. IN NS a.gtld-servers.net.
+SECTION ADDITIONAL
+a.gtld-servers.net. IN A 192.5.6.30
+ENTRY_END
+RANGE_END
+
+; a.gtld-servers.net.
+RANGE_BEGIN 0 100
+ ADDRESS 192.5.6.30
+ENTRY_BEGIN
+MATCH opcode qtype qname
+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 qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.sub.example.com. IN A
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+RANGE_END
+
+; ns.example.com.
+RANGE_BEGIN 0 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 for delegation to sub.example.com.
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.sub.example.com. IN A
+SECTION ANSWER
+SECTION AUTHORITY
+sub.example.com. IN NS ns.sub.example.com.
+; H(example.com.) NSEC3 SOA NS DNSKEY RRSIG
+; example.com. -> onib9mgub9h0rml3cdf5bgrj59dkjhvk.
+onib9mgub9h0rml3cdf5bgrj59dkjhvk.example.com. 3600 IN NSEC3 1 0 0 - onib9mgub9h0rml3cdf5bgrj59dkjhvl NS SOA RRSIG DNSKEY NSEC3
+onib9mgub9h0rml3cdf5bgrj59dkjhvk.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926134150 20070829134150 2854 example.com. AC8XUZo1he4odxG32SfOzFznQn83N4/gJv8AWE0wzrbPO+bbO80+0pg=
+
+; H(sub.example.com.) IN NSEC3 NS RRSIG
+; sub.example.com. -> kg19n32806c832kijdnglq8p9m2r5mdj.
+kg19n32806c832kijdnglq8p9m2r5mdj.example.com. 3600 IN NSEC3 1 0 0 - kg19n32806c832kijdnglq8p9m2r5mdk NS RRSIG
+kg19n32806c832kijdnglq8p9m2r5mdj.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926134150 20070829134150 2854 example.com. AD1ed7zhMyd/S4fTCwip94DwMbiDV1lF+11zFI/yeR4R7k/n0Hh7GcE=
+
+SECTION ADDITIONAL
+ns.sub.example.com. IN A 1.2.3.6
+ENTRY_END
+
+RANGE_END
+
+; ns.sub.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.6
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+sub.example.com. IN NS
+SECTION ANSWER
+sub.example.com. IN NS ns.sub.example.com.
+SECTION ADDITIONAL
+ns.sub.example.com. IN A 1.2.3.6
+ENTRY_END
+
+; response to query of interest
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.sub.example.com. IN A
+SECTION ANSWER
+www.sub.example.com. IN A 11.11.11.11
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+www.sub.example.com. IN A
+ENTRY_END
+
+; recursion happens here.
+; The DS record should be retrieved from the neg cache.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA DO NOERROR
+SECTION QUESTION
+www.sub.example.com. IN A
+SECTION ANSWER
+www.sub.example.com. 3600 IN A 11.11.11.11
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+SCENARIO_END
diff --git a/testdata/val_secds_nosig.rpl b/testdata/val_secds_nosig.rpl
index ec768799d7f9..6a892772d5ec 100644
--- a/testdata/val_secds_nosig.rpl
+++ b/testdata/val_secds_nosig.rpl
@@ -159,7 +159,7 @@ ENTRY_END
ENTRY_BEGIN
MATCH opcode qtype qname
ADJUST copy_id
-REPLY QR NOERROR
+REPLY QR AA NOERROR
SECTION QUESTION
ns.sub.example.com. IN AAAA
SECTION AUTHORITY
diff --git a/testdata/val_wcnsec_nods.rpl b/testdata/val_wcnsec_nods.rpl
new file mode 100644
index 000000000000..d276acc19db5
--- /dev/null
+++ b/testdata/val_wcnsec_nods.rpl
@@ -0,0 +1,292 @@
+; config options
+; The island of trust is at test.
+server:
+ trust-anchor: "test. DS 1444 8 2 8a87d067fd09a5965244fe2e317dd26d182c468e0a7f26ecc4c7b479bf89db9b"
+ val-override-date: "20201020135527"
+ target-fetch-policy: "0 0 0 0 0"
+ qname-minimisation: "no"
+ fake-sha1: yes
+ trust-anchor-signaling: no
+ minimal-responses: no
+ iter-scrub-promiscuous: no
+ aggressive-nsec: no
+ local-zone: test. nodefault
+ log-servfail: yes
+
+stub-zone:
+ name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Test NS wildcard with NSEC that has DS denial.
+; The NS wildcard NSEC should not be used to deny the DS.
+
+; 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
+test. IN NS
+SECTION AUTHORITY
+test. IN NS ns.test.
+SECTION ADDITIONAL
+ns.test. IN A 1.2.3.5
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.other. IN A
+SECTION ANSWER
+ns.other. IN A 1.2.3.6
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.other. IN AAAA
+SECTION AUTHORITY
+. IN SOA ns.example.com. host.example.com. 1 86400 7200 86400 3600
+ENTRY_END
+RANGE_END
+
+; ns.test
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.5
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+test. IN NS
+SECTION ANSWER
+test. IN NS ns.test
+test. 3600 IN RRSIG NS 8 1 3600 20201116135527 20201019135527 1444 test. RGCxIO32TbbLTk6xZmTr+fjYPH50hntBxeOQ2DIj2pDsmjALcHYtVkOfpfk2EhOhHZd+9PLuoJPbJh6a9NqLSFeBvr0XZoCZoQ2g0tCHUNHcH5EVjA2TuYBQem6DVYnPLJ3914aRx0uA1j42b8dC2xsam/XkOo7U+dLbUW2Os1s=
+SECTION ADDITIONAL
+ns.test. IN A 1.2.3.5
+ns.test. 3600 IN RRSIG A 8 2 3600 20201116135527 20201019135527 1444 test. GskCc4/k6GjH9V9Jz2V5L2XLiizbOeWkB0feSbf+aN859S3vxVvtuqkvIgwY4LafUO1QAn/pUcv9zA7rcFO++rlg+8t6gvZTo9p3v0bfeIv2uJDsfSBD5jDh0WXlxjekfnrKrQp7zE+GiA93tWwKUWKPvxXDgP+n886e6WcbHJw=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.test. IN A
+SECTION ANSWER
+ns.test. IN A 1.2.3.5
+ns.test. 3600 IN RRSIG A 8 2 3600 20201116135527 20201019135527 1444 test. GskCc4/k6GjH9V9Jz2V5L2XLiizbOeWkB0feSbf+aN859S3vxVvtuqkvIgwY4LafUO1QAn/pUcv9zA7rcFO++rlg+8t6gvZTo9p3v0bfeIv2uJDsfSBD5jDh0WXlxjekfnrKrQp7zE+GiA93tWwKUWKPvxXDgP+n886e6WcbHJw=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.test. IN AAAA
+SECTION AUTHORITY
+test. 3600 IN SOA ns.test. host.test. 20201 3600 1800 604800 3600
+test. 3600 IN RRSIG SOA 8 1 3600 20201116135527 20201019135527 1444 test. IZJIDmEgf0W7A5G7hvvZ2hUqJ9Trbv1/i7ySapDmPbYV9lVCmHHobySxO01yDhI2/Pvpsvxqrm1Tiv3BxH8uzZ4keKgiQjBsSy4htAsFct9I4E7ly2glPj/Fm3oun3PsjJDv5QYhx0KS7w4IQKU7Nc9pfJc92uoUI5bdoC1pRGw=
+ns.test. 3600 IN NSEC nz.test. A RRSIG
+ns.test. 3600 IN RRSIG NSEC 8 2 3600 20201116135527 20201019135527 1444 test. PElArVB3KPg8KHAP7lzcNbhFuXNxTsHNTn1dZVncB5qmWRdIaeKpaXDjpH0JSXMaelGFS+/QhuQ6Hmw9+4VyZFRqMzGhw4agUR/2bxABHcDIG4ZpUwyeSP61ATTfHUkQVxaH2wjCWI/tfmesdP2xVE4GXyUvCIBxU914MkZbULU=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+test. IN DNSKEY
+SECTION ANSWER
+test. 3600 IN DNSKEY 257 3 8 AwEAAbd9WqjzE2Pynz21OG5doSf9hFzMr5dhzz2waZ3vTa+0o5r7AjTAqmA1yH/B3+aAMihUm5ucZSfVqo7+kOaRE8yFj9aivOmA1n1+JLevJq/oyvQyjxQN2Qb89LyaNUT5oKZIiL+uyyhNW3KDR3SSbQ/GBwQNDHVcZi+JDR3RC0r7 ;{id = 1444 (ksk), size = 1024b}
+test. 3600 IN RRSIG DNSKEY 8 1 3600 20201116135527 20201019135527 1444 test. UmRMS4iG9NBBHZYOtpwFFcJgbEb5SfHSgHd9XRe/8pTWM31WSDayn5ViPOBMqI1T5TXg2amc13dDI574xIM2oKMus3b5cBW72jJLW13jprBtslO6P8BMWb4HNnvLrJtQjwf3ErRirtTxinLmywQtmyr1cdthyG3Gp4N7i90fHSc=
+SECTION ADDITIONAL
+ENTRY_END
+
+; The actual example.test delegation.
+;ENTRY_BEGIN
+;MATCH opcode qname qtype
+;ADJUST copy_id
+;REPLY QR AA NOERROR
+;SECTION QUESTION
+;example.test. IN DS
+;SECTION ANSWER
+;example.test. 3600 IN DS 55567 8 2 a2d578906330a10a57d40462257b6ce038bad3f7bf4a45c46c46086e20a94b39
+;;example.test. 3600 IN RRSIG DS 8 2 3600 20201116135527 20201019135527 1444 test. P7+FTYW2qHuJ4I1YbuvseEz5X1lOYAraGEHB3C5y0OOCQFmhmSiFRdquNi2NlpcS6FXLdsE0EU+Bo1+0atTG4EkMWXbpF21lrtbB51BdsnlX4Mzc/o375fvjiOMwmF6wPCUaOUN62jrVrhsE/hedaVyDphDToqL17ETohwgUO2I=
+;ENTRY_END
+;
+;ENTRY_BEGIN
+;MATCH opcode subdomain
+;ADJUST copy_id copy_query
+;REPLY QR NOERROR
+;SECTION QUESTION
+;example.test. IN NS
+;SECTION AUTHORITY
+;example.test. IN NS ns.example.test.
+;example.test. 3600 IN DS 55567 8 2 a2d578906330a10a57d40462257b6ce038bad3f7bf4a45c46c46086e20a94b39
+;example.test. 3600 IN RRSIG DS 8 2 3600 20201116135527 20201019135527 1444 test. P7+FTYW2qHuJ4I1YbuvseEz5X1lOYAraGEHB3C5y0OOCQFmhmSiFRdquNi2NlpcS6FXLdsE0EU+Bo1+0atTG4EkMWXbpF21lrtbB51BdsnlX4Mzc/o375fvjiOMwmF6wPCUaOUN62jrVrhsE/hedaVyDphDToqL17ETohwgUO2I=
+;SECTION ADDITIONAL
+;ns.example.test. IN A 1.2.3.4
+;ENTRY_END
+;
+; The following wildcard exists in the parent zone,
+; *.test. IN NS ns.service.test.
+; this creates an NSEC record
+; *.test. IN NSEC aa.test. NS RRSIG NSEC
+; this is used in the replay reply for the delegation,
+; changing the owner name to example.test.
+;
+; *.test. 3600 IN NS ns.service.test.
+; *.test. 3600 IN RRSIG NS 8 1 3600 20201116135527 20201019135527 1444 test. G+b6EsP49+D/r8JZznWUNbf5QVTP/JcH/0mifzdCPB4c19sNQ8R52/RESMREilB3u2mnZUBpiZRozIOOjv8ZNgVvPmALslYPX1qPVT1qmYzLDl0NTN+ebLpf69V/XXLHi9aG5SgtOcTJHN3M4R3HMt1s9po1oTKMMwv1Ss+EtcE=
+;
+; *.test. 3600 IN NSEC aa.test. NS RRSIG NSEC
+; *.test. 3600 IN RRSIG NSEC 8 1 3600 20201116135527 20201019135527 1444 test. nIB5+xRH8rMdECAL5TDfujWe/BiWHyN3Y2P1iBG3Z+6JcA/FwBEMxNzcjA08FQc3Eu9uh/7sB+9NJN7bOEZoMzL2mETGaR5uM7HfUx6JpfK4RpoG66MnzbXbWjDOH+sF8Ei4ziR3p2AoWKg8wBzh6wP2YlLun0v4f6+fU8A5Yh8=
+;
+; and also for the DS lookup
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.test. IN DS
+SECTION AUTHORITY
+; note the labelcount of 1 in the RRSIG, it is a wildcard.
+example.test. 3600 IN NSEC aa.test. NS RRSIG NSEC
+example.test. 3600 IN RRSIG NSEC 8 1 3600 20201116135527 20201019135527 1444 test. nIB5+xRH8rMdECAL5TDfujWe/BiWHyN3Y2P1iBG3Z+6JcA/FwBEMxNzcjA08FQc3Eu9uh/7sB+9NJN7bOEZoMzL2mETGaR5uM7HfUx6JpfK4RpoG66MnzbXbWjDOH+sF8Ei4ziR3p2AoWKg8wBzh6wP2YlLun0v4f6+fU8A5Yh8=
+; there is no next closer denial NSEC. The example.test delegation exists,
+; so the parent has not signed that.
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+example.test. IN NS
+SECTION AUTHORITY
+; note the labelcount of 1 in the RRSIG, it is a wildcard.
+example.test. 3600 IN NSEC aa.test. NS RRSIG NSEC
+example.test. 3600 IN RRSIG NSEC 8 1 3600 20201116135527 20201019135527 1444 test. nIB5+xRH8rMdECAL5TDfujWe/BiWHyN3Y2P1iBG3Z+6JcA/FwBEMxNzcjA08FQc3Eu9uh/7sB+9NJN7bOEZoMzL2mETGaR5uM7HfUx6JpfK4RpoG66MnzbXbWjDOH+sF8Ei4ziR3p2AoWKg8wBzh6wP2YlLun0v4f6+fU8A5Yh8=
+; there is no next closer denial NSEC. The example.test delegation exists,
+; so the parent has not signed that.
+example.test. IN NS ns.other.
+SECTION ADDITIONAL
+ns.other. IN A 1.2.3.6
+ENTRY_END
+RANGE_END
+
+; ns.example.test.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.test. IN NS
+SECTION ANSWER
+example.test. IN NS ns.example.test.
+example.test. 3600 IN RRSIG NS 8 2 3600 20201116135527 20201019135527 55567 example.test. l1JT0wMlK0YI7/CWHzexf/k0iafUhCgN+BdgjBXIRXmSQNf4HDTiAkbcWL2/15qtnp12nQy9JeiTdSQ3vtPoHAJX4C5uTWaze4ms+Wrrf+n92sLCjacP9x50uuicH3URT6cKb1QCAPwlvlWxIlZjAMYFScSns7+C441NMJT8aE4=
+SECTION ADDITIONAL
+ns.example.test. IN A 1.2.3.4
+ns.example.test. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55567 example.test. 2PWaVaccZFQgfPKXNsdEGYUVaashCAj1ZhBo9XRt5eQKUFvZcauBjMnXIuxZFyWeootn1fZGw6GuPI5W48Y0FDx38H6adprkFgQikso2Y64jDdDMWznSo38Z/XqP+U0+kq4vmwonvmEMpm7hKnNEXvhqGKyGzyBwb+CZVJ2L8Eo=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.example.test. IN A
+SECTION ANSWER
+ns.example.test. IN A 1.2.3.4
+ns.example.test. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55567 example.test. 2PWaVaccZFQgfPKXNsdEGYUVaashCAj1ZhBo9XRt5eQKUFvZcauBjMnXIuxZFyWeootn1fZGw6GuPI5W48Y0FDx38H6adprkFgQikso2Y64jDdDMWznSo38Z/XqP+U0+kq4vmwonvmEMpm7hKnNEXvhqGKyGzyBwb+CZVJ2L8Eo=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.example.test. IN AAAA
+SECTION AUTHORITY
+example.test. 3600 IN SOA ns.example.test. host.example.test. 20301 3600 1800 604800 3600
+example.test. 3600 IN RRSIG SOA 8 2 3600 20201116135527 20201019135527 55567 example.test. 2UUkScBAN37fJpSrelhE8DotKvmOzj3q9wicaanCIaCv95DE4nQnePih5B+ek3FIRjB/Uv2+z4Ro5Uxy94XAnlK0rCkDLSa0U9U7KP0ytc88sevO0x1SCPAMoZoJO6JqHkv42pdh54WSz+Zb/D8npY0j/tksHe/uX+VQnMymgb8=
+ns.example.test. 3600 IN NSEC nz.example.test. A RRSIG
+ENTRY_END
+
+; response to DNSKEY priming query
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.test. IN DNSKEY
+SECTION ANSWER
+example.test. 3600 IN DNSKEY 257 3 8 AwEAAdug/L739i0mgN2nuK/bhxu3wFn5Ud9nK2+XUmZQlPUEZUC5YZvm1rfMmEWTGBn87fFxEu/kjFZHJ55JLzqsbbpVHLbmKCTT2gYR2FV2WDKROGKuYbVkJIXdKAjJ0ONuK507NinYvlWXIoxHn22KAWOd9wKgSTNHBlmGkX+ts3hh ;{id = 55567 (ksk), size = 1024b}
+example.test. 3600 IN RRSIG DNSKEY 8 2 3600 20201116135527 20201019135527 55567 example.test. IbWMC6quOuZFNPAVxQLqCJ9nLhindBo826rnLcg5yMgs9dGUSPOCXAfHTmbgJAUNs9HTFfrJWNvasnETs0UOpmEuifGwWdH1OlME7Gny4RL2QmITUFeMW81Jz1tiVQxFXl6yxT0jxOxvz+bqMHlrz+8IeWQXcO+GZTPu8ueq30g=
+ENTRY_END
+
+; response to query of interest
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+www.example.test. IN A
+SECTION ANSWER
+www.example.test. IN A 10.20.30.40
+ENTRY_END
+RANGE_END
+
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.6
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+www.example.test. IN A
+SECTION ANSWER
+www.example.test. IN A 10.20.30.66
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+www.example.test. IN A
+ENTRY_END
+
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA DO SERVFAIL
+SECTION QUESTION
+www.example.test. IN A
+SECTION ANSWER
+ENTRY_END
+
+; to resolve pending lookups
+STEP 20 TRAFFIC
+SCENARIO_END
diff --git a/util/config_file.c b/util/config_file.c
index adee403b811f..ab209a818e31 100644
--- a/util/config_file.c
+++ b/util/config_file.c
@@ -46,6 +46,7 @@
#ifdef HAVE_TIME_H
#include <time.h>
#endif
+#include <limits.h>
#include "util/log.h"
#include "util/configyyrename.h"
#include "util/config_file.h"
@@ -93,7 +94,7 @@ struct config_parser_state* cfg_parser = 0;
static void init_outgoing_availports(int* array, int num);
/** init cookie with random data */
-static void init_cookie_secret(uint8_t* cookie_secret, size_t cookie_secret_len);
+static int init_cookie_secret(struct config_file* cfg);
struct config_file*
config_create(void)
@@ -389,8 +390,7 @@ config_create(void)
#endif
cfg->do_answer_cookie = 0;
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_len = 0; /* not set yet */
cfg->cookie_secret_file = NULL;
#ifdef USE_CACHEDB
if(!(cfg->cachedb_backend = strdup("testframe"))) goto error_exit;
@@ -533,7 +533,11 @@ probe_maxrto(int useful_server_top_timeout) {
int config_apply_max_rtt(int max_rtt)
{
USEFUL_SERVER_TOP_TIMEOUT = max_rtt;
- BLACKLIST_PENALTY = max_rtt*4;
+ BLACKLIST_PENALTY =
+#ifdef INT_MAX
+ (max_rtt > INT_MAX/4) ? INT_MAX :
+#endif
+ max_rtt*4;
PROBE_MAXRTO = probe_maxrto(max_rtt);
return max_rtt;
}
@@ -776,7 +780,7 @@ int config_set_option(struct config_file* cfg, const char* opt,
else S_YNO("ede:", ede)
else S_YNO("ede-serve-expired:", ede_serve_expired)
else S_YNO("dns-error-reporting:", dns_error_reporting)
- else S_NUMBER_OR_ZERO("iter-scrub-ns:", iter_scrub_ns)
+ else S_NUMBER_NONZERO("iter-scrub-ns:", iter_scrub_ns)
else S_NUMBER_OR_ZERO("iter-scrub-cname:", iter_scrub_cname)
else S_NUMBER_OR_ZERO("iter-scrub-rrsig:", iter_scrub_rrsig)
else S_YNO("iter-scrub-promiscuous:", iter_scrub_promiscuous)
@@ -1572,6 +1576,8 @@ config_read(struct config_file* cfg, const char* filename, const char* chroot)
}
globfree(&g);
config_auto_slab_values(cfg);
+ if(!init_cookie_secret(cfg))
+ return 0;
return 1;
}
#endif /* HAVE_GLOB */
@@ -1596,6 +1602,8 @@ config_read(struct config_file* cfg, const char* filename, const char* chroot)
}
config_auto_slab_values(cfg);
+ if(!init_cookie_secret(cfg))
+ return 0;
return 1;
}
@@ -1870,18 +1878,33 @@ config_delete(struct config_file* cfg)
free(cfg);
}
-static void
-init_cookie_secret(uint8_t* cookie_secret, size_t cookie_secret_len)
+static int
+init_cookie_secret(struct config_file* cfg)
{
- struct ub_randstate *rand = ub_initstate(NULL);
+ struct ub_randstate* rand;
+ size_t cookie_secret_len;
+ uint8_t* cookie_secret;
+ if(!cfg->do_answer_cookie)
+ return 1;
+ if(cfg->cookie_secret_file && cfg->cookie_secret_file[0])
+ return 1;
+ if(cfg->cookie_secret_len != 0)
+ return 1;
- if (!rand)
- fatal_exit("could not init random generator");
+ rand = ub_initstate(NULL);
+ if(!rand) {
+ log_err("init_cookie_secret: could not init random generator");
+ return 0;
+ }
+ cfg->cookie_secret_len = 16;
+ cookie_secret_len = cfg->cookie_secret_len;
+ cookie_secret = cfg->cookie_secret;
while (cookie_secret_len) {
*cookie_secret++ = (uint8_t)ub_random(rand);
cookie_secret_len--;
}
ub_randfree(rand);
+ return 1;
}
static void
@@ -1944,7 +1967,7 @@ extract_port_from_str(const char* str, int max_port) {
int
cfg_mark_ports(const char* str, int allow, int* avail, int num)
{
- char* mid = strchr(str, '-');
+ const char* mid = strchr(str, '-');
#ifdef DISABLE_EXPLICIT_PORT_RANDOMISATION
log_warn("Explicit port randomisation disabled, ignoring "
"outgoing-port-permit and outgoing-port-avoid configuration "
@@ -2647,10 +2670,10 @@ fname_after_chroot(const char* fname, struct config_file* cfg, int use_chdir)
}
/** return next space character in string */
-static char* next_space_pos(const char* str)
+static const char* next_space_pos(const char* str)
{
- char* sp = strchr(str, ' ');
- char* tab = strchr(str, '\t');
+ const char* sp = strchr(str, ' ');
+ const char* tab = strchr(str, '\t');
if(!tab && !sp)
return NULL;
if(!sp) return tab;
@@ -2659,10 +2682,10 @@ static char* next_space_pos(const char* str)
}
/** return last space character in string */
-static char* last_space_pos(const char* str)
+static const char* last_space_pos(const char* str)
{
- char* sp = strrchr(str, ' ');
- char* tab = strrchr(str, '\t');
+ const char* sp = strrchr(str, ' ');
+ const char* tab = strrchr(str, '\t');
if(!tab && !sp)
return NULL;
if(!sp) return tab;
@@ -2720,8 +2743,8 @@ cfg_parse_local_zone(struct config_file* cfg, const char* val)
char* cfg_ptr_reverse(char* str)
{
- char* ip, *ip_end;
- char* name;
+ const char* ip, *ip_end;
+ const char* name;
char* result;
char buf[1024];
struct sockaddr_storage addr;
@@ -2872,7 +2895,7 @@ if_listens_on(const char* ifname, int default_port, int port,
struct config_strlist* additional_ports)
{
struct config_strlist* s;
- char* p = strchr(ifname, '@');
+ const char* p = strchr(ifname, '@');
int if_port;
if(p) if_port = atoi(p+1);
else if_port = default_port;
diff --git a/util/config_file.h b/util/config_file.h
index 6dadf0b72072..c2b45759f8e5 100644
--- a/util/config_file.h
+++ b/util/config_file.h
@@ -884,6 +884,10 @@ struct config_auth {
int zonemd_check;
/** Reject absence of ZONEMD records, zone must have one */
int zonemd_reject_absence;
+ /** The maximum auth zone transfer size, in bytes. */
+ size_t max_transfer_size;
+ /** The maximum auth zone transfer time taken, in msec. */
+ int max_transfer_time;
};
/**
diff --git a/util/configlexer.c b/util/configlexer.c
index 276f8c6fea3c..6e9f8ab62525 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 416
-#define YY_END_OF_BUFFER 417
+#define YY_NUM_RULES 418
+#define YY_END_OF_BUFFER 419
/* This struct is not used in this scanner,
but its presence is necessary. */
struct yy_trans_info
@@ -363,465 +363,467 @@ struct yy_trans_info
flex_int32_t yy_verify;
flex_int32_t yy_nxt;
};
-static const flex_int16_t yy_accept[4154] =
+static const flex_int16_t yy_accept[4173] =
{ 0,
- 1, 1, 390, 390, 394, 394, 398, 398, 402, 402,
- 1, 1, 406, 406, 410, 410, 417, 414, 1, 388,
- 388, 415, 2, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 415, 390, 391, 391,
- 392, 415, 394, 395, 395, 396, 415, 401, 398, 399,
- 399, 400, 415, 402, 403, 403, 404, 415, 413, 389,
- 2, 393, 413, 415, 409, 406, 407, 407, 408, 415,
- 410, 411, 411, 412, 415, 414, 0, 1, 2, 2,
- 2, 2, 414, 414, 414, 414, 414, 414, 414, 414,
+ 1, 1, 392, 392, 396, 396, 400, 400, 404, 404,
+ 1, 1, 408, 408, 412, 412, 419, 416, 1, 390,
+ 390, 417, 2, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 417, 392, 393, 393,
+ 394, 417, 396, 397, 397, 398, 417, 403, 400, 401,
+ 401, 402, 417, 404, 405, 405, 406, 417, 415, 391,
+ 2, 395, 415, 417, 411, 408, 409, 409, 410, 417,
+ 412, 413, 413, 414, 417, 416, 0, 1, 2, 2,
+ 2, 2, 416, 416, 416, 416, 416, 416, 416, 416,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 390, 0, 394, 0, 401, 0,
- 398, 402, 0, 413, 0, 2, 2, 413, 409, 0,
- 406, 410, 0, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 392, 0, 396, 0, 403, 0,
+ 400, 404, 0, 415, 0, 2, 2, 415, 411, 0,
+ 408, 412, 0, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 413, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 415, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 380, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 141, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 380, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 141, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
- 414, 414, 414, 414, 414, 151, 414, 414, 414, 414,
- 414, 414, 414, 414, 413, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
+ 416, 416, 416, 416, 416, 151, 416, 416, 416, 416,
+ 416, 416, 416, 416, 415, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
- 414, 414, 414, 414, 414, 123, 414, 414, 379, 414,
- 414, 414, 414, 414, 414, 414, 414, 8, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 142, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 156, 414, 414, 414, 413,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
+ 416, 416, 416, 416, 416, 416, 123, 416, 416, 379,
+ 416, 416, 416, 416, 416, 416, 416, 416, 8, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 142, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 156, 416, 416, 416,
+ 415, 416, 416, 416, 416, 416, 416, 416, 416, 416,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 369, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 369, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 413, 414, 414, 414, 414, 414, 414, 414, 414,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 415, 416, 416, 416, 416, 416, 416,
- 414, 414, 414, 414, 414, 74, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 279, 414, 14, 15, 414, 414, 20,
- 19, 414, 414, 253, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 149, 414, 414, 414, 414, 414, 414, 414, 414,
+ 416, 416, 416, 416, 416, 416, 416, 74, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 279, 416, 14, 15, 416,
+ 416, 20, 19, 416, 416, 253, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 149, 416, 416, 416, 416, 416, 416,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 251, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 3, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 251, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 3, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 413, 414, 414, 414, 414, 414, 414, 414,
- 414, 348, 414, 414, 414, 347, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 397, 414, 414, 414, 414, 414, 414, 414, 414,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 415, 416, 416, 416, 416,
+ 416, 416, 416, 416, 348, 416, 416, 416, 347, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 399, 416, 416, 416, 416, 416,
- 73, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 77, 414, 317, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 370, 371, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 78, 414, 414, 150,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 145, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 240, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
+ 416, 416, 416, 73, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 77, 416, 317, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 370,
+ 371, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 78, 416, 416, 150, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 145, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 240, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
- 414, 414, 414, 414, 414, 22, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 177,
- 414, 414, 414, 414, 414, 414, 413, 397, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 121, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 325, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 16, 414, 414, 414,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 22,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 177, 416, 416, 416, 416, 416, 416,
+ 415, 399, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 121, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 325, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
- 414, 414, 414, 414, 414, 205, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 176, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 120, 414, 414, 414, 414, 414, 414, 414,
+ 16, 416, 416, 416, 416, 416, 416, 416, 416, 205,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 176, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 120, 416, 416,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 37, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 38, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 75, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 148, 414, 414, 414, 413, 414, 414,
- 414, 414, 414, 414, 140, 414, 414, 414, 414, 414,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 37, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 38, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 75, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 148, 416,
+ 416, 416, 415, 416, 416, 416, 416, 416, 416, 140,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 76, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 283,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 206, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 63, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 76, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 283, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 206, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 63, 416, 416, 416, 416, 416, 416,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 59, 60, 414, 303, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 68,
- 414, 69, 414, 414, 414, 414, 414, 414, 124, 414,
- 125, 414, 414, 414, 414, 414, 122, 414, 414, 414,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 59, 60, 416,
+ 303, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 68, 416, 69, 416, 416,
+ 416, 416, 416, 416, 124, 416, 125, 416, 416, 416,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 7, 414, 414, 414, 414, 414, 413, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 268, 414, 414, 414, 414, 414, 414, 180, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 284, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
+ 416, 416, 122, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 7, 416, 416,
+ 416, 416, 416, 415, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 268, 416, 416,
+ 416, 416, 416, 416, 180, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 284, 416, 416, 416, 416, 416, 416,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 52, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 64, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 231, 414,
- 230, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 17, 18,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 52, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 64, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 231, 416, 230, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 79, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 239, 414, 414, 414, 414, 414, 414, 414,
- 127, 414, 126, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 219, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 157, 414, 259, 414, 414, 414, 413, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
+ 416, 416, 416, 416, 416, 17, 18, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 79, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 239,
+ 416, 416, 416, 416, 416, 416, 416, 127, 416, 126,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 219, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 157, 416, 259,
+ 416, 416, 416, 415, 416, 416, 416, 416, 416, 416,
- 414, 115, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 101, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 252, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 106, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 72, 414, 414, 414, 414, 414, 414, 414,
+ 416, 416, 416, 416, 416, 416, 416, 416, 115, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 101,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 252,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 106, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 72,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 223, 224, 414, 414,
- 414, 414, 414, 319, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 6, 414, 414, 414, 414, 414, 414, 414, 338,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 323, 414, 414, 414, 414, 414, 414,
- 414, 349, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 223, 224, 416, 416, 416, 416, 416,
+ 319, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 6,
+ 416, 416, 416, 416, 416, 416, 416, 338, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 323, 416, 416, 416, 416, 416, 416, 416, 349,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
- 414, 414, 414, 414, 414, 414, 414, 48, 414, 414,
- 414, 414, 414, 414, 50, 414, 414, 414, 102, 414,
- 414, 414, 414, 414, 61, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 413, 414,
- 215, 414, 414, 414, 152, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 244,
- 414, 414, 216, 414, 414, 414, 414, 414, 414, 264,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 62, 414, 414, 414, 414, 414, 414, 414, 414,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 48, 416, 416, 416, 416,
+ 416, 416, 50, 416, 416, 416, 102, 416, 416, 416,
+ 416, 416, 61, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 415, 416, 215, 416,
+ 416, 416, 152, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 244, 416, 416,
+ 216, 416, 416, 416, 416, 416, 416, 264, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 62,
- 414, 414, 414, 154, 133, 414, 134, 414, 414, 414,
- 414, 132, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 173, 414, 414, 57, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 301, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 217, 414, 414, 414, 414, 414, 228, 220, 414,
- 227, 414, 414, 414, 222, 414, 414, 414, 414, 414,
- 414, 414, 263, 414, 414, 414, 414, 414, 414, 267,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 154, 133, 416, 134, 416, 416, 416, 416, 132,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 173, 416, 416, 57, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 301, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 217,
+ 416, 416, 416, 416, 416, 228, 220, 416, 227, 416,
+ 416, 416, 222, 416, 416, 416, 416, 416, 416, 416,
+ 416, 263, 416, 416, 416, 416, 416, 416, 267, 416,
- 414, 119, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 146, 414, 414, 414,
- 414, 414, 414, 414, 414, 70, 414, 414, 414, 414,
- 31, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 21, 414, 414, 414, 414, 414, 414,
- 414, 414, 32, 41, 414, 185, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 213, 414, 414, 413, 414, 414, 414, 414,
- 374, 414, 414, 87, 414, 90, 414, 414, 414, 414,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 119, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 146, 416, 416, 416, 416,
+ 416, 416, 416, 416, 70, 416, 416, 416, 416, 31,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 21, 416, 416, 416, 416, 416, 416, 416,
+ 416, 32, 41, 416, 185, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 213, 416, 416, 415, 416, 416, 416, 416, 374,
- 414, 414, 414, 414, 414, 414, 375, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 327, 414, 414, 414,
- 414, 280, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 135, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 172, 414, 53, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 274, 414, 414, 414, 414, 414, 414,
- 414, 414, 342, 414, 414, 414, 414, 414, 383, 414,
+ 416, 416, 87, 416, 90, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 375, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 327, 416, 416, 416, 416,
+ 280, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 135, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 172,
+ 416, 53, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 274, 416, 416, 416, 416, 416, 416, 416,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 229,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 179, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 336, 414, 414, 414, 414, 250,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 360, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 198, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 128,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 51, 414, 414, 414, 414, 414, 414, 414, 414,
+ 416, 342, 416, 416, 416, 416, 416, 383, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 229, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 179, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 336, 416, 416, 416, 416,
+ 250, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 360, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 198, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 128, 416, 416, 416, 416, 416, 416, 416, 416, 416,
- 414, 414, 414, 414, 192, 414, 207, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 413, 414, 160, 414,
- 414, 414, 414, 414, 414, 414, 414, 114, 414, 414,
- 414, 414, 242, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 265, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 292, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 153, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 196, 414, 414, 414, 414, 414, 414,
+ 416, 416, 51, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 192, 416, 207, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 415, 416, 160,
+ 416, 416, 416, 416, 416, 416, 416, 416, 114, 416,
+ 416, 416, 416, 242, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 265, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 292, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 153, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
- 414, 91, 414, 92, 414, 414, 414, 414, 414, 277,
- 414, 414, 414, 414, 414, 71, 345, 414, 414, 414,
- 414, 414, 414, 414, 414, 100, 208, 414, 232, 414,
- 269, 414, 414, 221, 320, 414, 414, 414, 414, 414,
- 315, 414, 414, 414, 83, 414, 210, 414, 414, 414,
- 414, 414, 414, 9, 414, 414, 414, 414, 414, 118,
- 414, 414, 414, 414, 414, 414, 307, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 241,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
+ 416, 416, 416, 416, 196, 416, 416, 416, 416, 416,
+ 416, 416, 91, 416, 92, 416, 416, 416, 416, 416,
+ 277, 416, 416, 416, 416, 416, 71, 345, 416, 416,
+ 416, 416, 416, 416, 416, 416, 100, 208, 416, 232,
+ 416, 269, 416, 416, 221, 320, 416, 416, 416, 416,
+ 416, 315, 416, 416, 416, 416, 416, 83, 416, 210,
+ 416, 416, 416, 416, 416, 416, 9, 416, 416, 416,
+ 416, 416, 118, 416, 416, 416, 416, 416, 416, 307,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 241, 416, 416, 416, 416, 416, 416, 416,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 413, 414,
- 414, 414, 414, 195, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 197, 258,
- 181, 414, 414, 326, 414, 414, 414, 414, 414, 291,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 254, 414, 414, 414, 414, 414, 414, 318,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 415, 416, 416, 416, 416, 195, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 197, 258, 181, 416, 416, 326, 416, 416, 416,
+ 416, 416, 291, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 254, 416, 416, 416, 416,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 178,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 346, 414, 414, 414, 414, 209, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 82, 84, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 117,
- 414, 414, 414, 414, 414, 414, 305, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 322, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 246, 414, 39, 33, 35, 414,
+ 416, 416, 318, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 178, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 346, 416, 416, 416, 416, 209,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 82, 84, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 117, 416, 416, 416, 416, 416,
+ 416, 305, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 322, 416, 416, 416, 416,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 40, 414, 34, 36, 414, 42, 414, 414,
- 414, 414, 414, 414, 414, 113, 414, 191, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 413, 414, 414,
- 414, 414, 414, 414, 414, 414, 350, 414, 414, 414,
- 414, 414, 248, 245, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 81, 414, 414, 414,
- 155, 414, 136, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 174, 54, 414, 414, 414,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 246,
+ 416, 39, 33, 35, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 40, 416, 34,
+ 36, 416, 42, 416, 416, 416, 416, 416, 416, 416,
+ 113, 416, 191, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 415, 416, 416, 416, 416, 416, 416, 416,
+ 416, 350, 416, 416, 416, 416, 416, 248, 245, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 81, 416, 416, 416, 155, 416, 136, 416, 416,
- 405, 13, 414, 414, 414, 414, 414, 414, 414, 161,
- 414, 414, 414, 414, 414, 414, 414, 414, 340, 414,
- 343, 414, 384, 414, 385, 414, 414, 414, 414, 414,
- 386, 414, 414, 414, 414, 414, 414, 414, 12, 414,
- 414, 23, 414, 414, 414, 414, 414, 414, 414, 311,
- 414, 414, 414, 414, 367, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 324, 414, 414, 414, 414, 85,
- 414, 256, 414, 414, 414, 414, 414, 247, 414, 414,
- 414, 414, 80, 414, 414, 414, 414, 414, 414, 24,
- 414, 414, 49, 414, 414, 414, 414, 414, 414, 414,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 174, 54, 416, 416, 416, 407, 13, 416, 416, 416,
+ 416, 416, 416, 416, 161, 416, 416, 416, 416, 416,
+ 416, 416, 416, 340, 416, 343, 416, 384, 416, 385,
+ 416, 416, 416, 416, 416, 386, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 12, 416, 416, 23, 416,
+ 416, 416, 416, 416, 416, 416, 311, 416, 416, 416,
+ 416, 367, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 324, 416, 416, 416, 416, 85, 416, 256, 416,
+ 416, 416, 416, 416, 247, 416, 416, 416, 416, 80,
- 414, 414, 414, 414, 414, 190, 189, 414, 414, 414,
- 414, 405, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 249, 243, 414, 414, 414, 266, 414,
- 414, 328, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 203, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 93, 414, 414, 414, 414, 414, 414, 414, 414,
- 306, 414, 414, 414, 414, 414, 226, 414, 414, 414,
- 414, 414, 414, 255, 414, 414, 414, 414, 414, 414,
+ 416, 416, 416, 416, 416, 416, 24, 416, 416, 49,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 190, 189, 416, 416, 416, 416, 407, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 249, 243, 416, 416, 416, 266, 416, 416, 328, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 203, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 93, 416,
+ 416, 416, 416, 416, 416, 416, 416, 306, 416, 416,
- 414, 414, 414, 414, 313, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 352, 414, 356, 354, 187,
- 414, 414, 414, 86, 414, 414, 414, 414, 199, 414,
- 414, 414, 414, 414, 129, 131, 130, 414, 414, 414,
- 26, 414, 414, 182, 414, 184, 414, 233, 414, 414,
- 414, 414, 188, 414, 414, 260, 414, 414, 414, 414,
- 270, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 163, 376, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 299, 414, 414, 282, 414, 414, 414,
- 414, 414, 414, 414, 377, 414, 28, 414, 321, 414,
+ 416, 416, 416, 226, 416, 416, 416, 416, 416, 387,
+ 388, 416, 255, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 313, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 352, 416, 356, 354, 187, 416,
+ 416, 416, 86, 416, 416, 416, 416, 199, 416, 416,
+ 416, 416, 416, 129, 131, 130, 416, 416, 416, 26,
+ 416, 416, 182, 416, 184, 416, 233, 416, 416, 416,
+ 416, 188, 416, 416, 260, 416, 416, 416, 416, 270,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 163,
+ 376, 416, 416, 416, 416, 416, 416, 416, 416, 416,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 98, 234,
- 414, 414, 276, 414, 414, 414, 304, 414, 344, 414,
- 414, 225, 414, 414, 316, 414, 414, 414, 314, 65,
- 414, 414, 414, 414, 414, 414, 414, 4, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 144, 414, 162, 414, 414, 414, 204, 30, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 273,
- 43, 44, 414, 414, 414, 414, 414, 414, 414, 381,
+ 416, 416, 299, 416, 416, 282, 416, 416, 416, 416,
+ 416, 416, 416, 377, 416, 28, 416, 321, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 98, 234, 416,
+ 416, 276, 416, 416, 416, 304, 416, 344, 416, 416,
+ 225, 416, 416, 316, 416, 416, 416, 314, 65, 416,
+ 416, 416, 416, 416, 416, 416, 4, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 144,
+ 416, 162, 416, 416, 416, 204, 30, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
- 414, 414, 329, 414, 414, 414, 414, 414, 414, 414,
- 290, 414, 414, 414, 414, 414, 414, 414, 414, 237,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 97, 96, 414, 414,
- 66, 414, 414, 302, 310, 414, 414, 278, 414, 414,
- 414, 414, 414, 11, 414, 414, 414, 414, 382, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 143, 414, 414, 414, 414, 414, 414, 235, 103,
- 414, 414, 46, 414, 414, 414, 414, 414, 414, 414,
- 414, 194, 414, 261, 414, 414, 414, 414, 414, 414,
+ 416, 416, 416, 416, 416, 416, 416, 416, 273, 43,
+ 44, 416, 416, 416, 416, 416, 416, 416, 381, 416,
+ 416, 329, 416, 416, 416, 416, 416, 416, 416, 290,
+ 416, 416, 416, 416, 416, 416, 416, 416, 237, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 97, 96, 416, 416, 66,
+ 416, 416, 302, 310, 416, 416, 278, 416, 416, 416,
+ 416, 416, 11, 416, 416, 416, 416, 382, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 143, 416, 416, 416, 416, 416, 416, 235, 103, 416,
- 414, 414, 414, 165, 414, 414, 414, 414, 281, 414,
- 414, 414, 414, 414, 289, 414, 414, 414, 414, 158,
- 414, 414, 414, 137, 139, 138, 414, 414, 414, 105,
- 110, 104, 414, 414, 175, 414, 414, 414, 414, 94,
- 414, 275, 312, 414, 414, 414, 414, 414, 414, 414,
- 10, 414, 414, 414, 414, 414, 308, 414, 414, 366,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 373, 45, 414, 414, 414, 414, 414,
- 193, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
+ 416, 46, 416, 416, 416, 416, 416, 416, 416, 416,
+ 194, 416, 261, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 165, 416, 416, 416, 416, 281, 416, 416,
+ 416, 416, 416, 289, 416, 416, 416, 416, 158, 416,
+ 416, 416, 137, 139, 138, 416, 416, 416, 105, 110,
+ 104, 416, 416, 175, 416, 416, 416, 416, 94, 416,
+ 275, 312, 416, 416, 416, 416, 416, 416, 416, 10,
+ 416, 416, 416, 416, 416, 308, 416, 416, 366, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 373, 45, 416, 416, 416, 416, 416, 193,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 111,
- 109, 414, 414, 414, 58, 414, 414, 95, 414, 341,
- 414, 414, 414, 414, 414, 25, 414, 414, 414, 414,
- 414, 218, 414, 414, 362, 364, 414, 414, 414, 414,
- 414, 361, 358, 414, 414, 414, 414, 236, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 214, 414,
- 414, 183, 88, 89, 414, 414, 414, 414, 414, 414,
- 330, 414, 414, 414, 414, 414, 414, 414, 286, 414,
- 414, 285, 159, 414, 414, 108, 414, 107, 55, 414,
- 414, 387, 166, 167, 170, 171, 168, 169, 99, 339,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 111, 109,
+ 416, 416, 416, 58, 416, 416, 95, 416, 341, 416,
+ 416, 416, 416, 416, 25, 416, 416, 416, 416, 416,
+ 218, 416, 416, 362, 364, 416, 416, 416, 416, 416,
+ 361, 358, 416, 416, 416, 416, 236, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 214, 416, 416,
+ 183, 88, 89, 416, 416, 416, 416, 416, 416, 330,
+ 416, 416, 416, 416, 416, 416, 416, 286, 416, 416,
- 414, 414, 309, 414, 414, 414, 414, 414, 414, 147,
- 414, 414, 414, 414, 27, 414, 186, 414, 414, 414,
- 414, 414, 212, 414, 272, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 201, 200, 238, 47, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 337, 414, 414, 414, 368,
- 414, 414, 414, 414, 414, 414, 414, 116, 414, 414,
+ 285, 159, 416, 416, 108, 416, 107, 55, 416, 416,
+ 389, 166, 167, 170, 171, 168, 169, 99, 339, 416,
+ 416, 309, 416, 416, 416, 416, 416, 416, 147, 416,
+ 416, 416, 416, 27, 416, 186, 416, 416, 416, 416,
+ 416, 212, 416, 272, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 201, 200, 238, 47, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
- 271, 414, 414, 300, 334, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 378, 414, 112, 56,
- 67, 5, 414, 414, 353, 414, 357, 355, 414, 414,
- 257, 414, 414, 414, 414, 335, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 287, 29, 414, 414, 414,
- 414, 414, 414, 262, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 288, 414, 414, 414, 414, 414,
- 414, 414, 164, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 202, 414, 211, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 363, 365, 359, 414,
+ 416, 416, 416, 416, 337, 416, 416, 416, 368, 416,
+ 416, 416, 416, 416, 416, 416, 116, 416, 416, 271,
+ 416, 416, 300, 334, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 378, 416, 112, 56, 67,
+ 5, 416, 416, 353, 416, 357, 355, 416, 416, 257,
+ 416, 416, 416, 416, 335, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 287, 29, 416, 416, 416, 416,
+ 416, 416, 262, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 288, 416, 416, 416, 416, 416, 416,
+ 416, 164, 416, 416, 416, 416, 416, 416, 416, 416,
- 414, 331, 414, 414, 414, 414, 414, 414, 414, 414,
- 414, 414, 414, 414, 414, 414, 414, 414, 414, 414,
- 372, 351, 414, 414, 295, 414, 414, 414, 414, 414,
- 332, 414, 414, 414, 414, 414, 414, 333, 414, 414,
- 414, 293, 414, 296, 297, 414, 414, 414, 414, 414,
- 294, 298, 0
+ 416, 416, 416, 202, 416, 211, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 363, 365, 359, 416, 416,
+ 331, 416, 416, 416, 416, 416, 416, 416, 416, 416,
+ 416, 416, 416, 416, 416, 416, 416, 416, 416, 372,
+ 351, 416, 416, 295, 416, 416, 416, 416, 416, 332,
+ 416, 416, 416, 416, 416, 416, 333, 416, 416, 416,
+ 293, 416, 296, 297, 416, 416, 416, 416, 416, 294,
+ 298, 0
} ;
static const YY_CHAR yy_ec[256] =
@@ -867,17 +869,17 @@ static const YY_CHAR yy_meta[67] =
1, 1, 1, 1, 1, 1
} ;
-static const flex_int16_t yy_base[4172] =
+static const flex_int16_t yy_base[4191] =
{ 0,
0, 0, 64, 67, 70, 72, 78, 84, 89, 92,
- 131, 137, 112, 118, 123, 142, 573, 532, 96,11846,
- 11846,11846, 160, 185, 116, 183, 229, 132, 175, 173,
+ 131, 137, 112, 118, 123, 142, 573, 532, 96,11868,
+ 11868,11868, 160, 185, 116, 183, 229, 132, 175, 173,
278, 50, 66, 120, 230, 268, 159, 325, 226, 377,
- 418, 290, 318, 279, 177, 126, 380, 531,11846,11846,
- 11846, 95, 469,11846,11846,11846, 181, 464, 493,11846,
- 11846,11846, 238, 424,11846,11846,11846, 104, 422,11846,
- 394,11846, 167, 350, 380, 402,11846,11846,11846, 405,
- 329,11846,11846,11846, 146, 306, 424, 168, 0, 436,
+ 418, 290, 318, 279, 177, 126, 380, 531,11868,11868,
+ 11868, 95, 469,11868,11868,11868, 181, 464, 493,11868,
+ 11868,11868, 238, 424,11868,11868,11868, 104, 422,11868,
+ 394,11868, 167, 350, 380, 402,11868,11868,11868, 405,
+ 329,11868,11868,11868, 146, 306, 424, 168, 0, 436,
0, 0, 225, 219, 252, 209, 319, 215, 248, 357,
283, 339, 417, 428, 429, 354, 371, 444, 263, 463,
@@ -904,896 +906,898 @@ static const flex_int16_t yy_base[4172] =
1056, 1059, 1066, 1064, 1069, 1072, 1078, 1093, 1096, 1076,
150, 1077, 1105, 1108, 1098, 1111, 1107, 1113, 1118, 1119,
- 1123,11846, 1103, 1129, 1120, 1146, 1124, 1145, 1130, 1147,
+ 1123,11868, 1103, 1129, 1120, 1146, 1124, 1145, 1130, 1147,
1134, 1164, 1140, 1144, 1157, 1150, 1167, 1177, 1170, 1181,
1173, 1184, 1195, 1191, 1200, 1186, 1187, 1206, 1213, 1205,
1244, 1215, 1207, 1223, 1289, 1238, 1218, 1227, 1257, 1272,
- 488, 1243, 1249, 1278, 1270, 1286, 1297, 1273, 1284, 1277,
- 1312, 1302, 1325, 1311, 1316, 1313, 1211, 1320, 1327, 1328,
- 1334, 1242, 1359,11846, 1330, 1361, 1356, 1363, 1369, 1367,
- 1365, 1386, 1399, 1355, 1383, 1390, 1400, 1398, 1447, 1495,
+ 488, 1243, 1249, 1278, 1270, 1286, 1297, 1284, 1291, 1277,
+ 1312, 1302, 1325, 1313, 1316, 1327, 1211, 1333, 1328, 1329,
+ 1335, 1242, 1363,11868, 1341, 1346, 1353, 1352, 1376, 1380,
+ 1372, 1368, 1401, 1362, 1369, 1374, 1367, 1400, 1449, 1497,
- 1389, 1401, 1397, 1417, 1394,11846, 1434, 1440, 1544, 1428,
- 1442, 1419, 1439, 1466, 1436, 1463, 1458, 1467, 1478, 1493,
- 1444, 1475, 1488, 1490, 1517, 1545, 1506, 1507, 1522, 1534,
- 1535, 1554, 1515, 1551, 1555, 1553, 1570, 1562, 1573, 1524,
- 1574, 1577, 1589, 1607, 1590, 1592, 1582, 1595, 1600, 1606,
- 1618, 1626, 1609, 1638, 1631, 1624, 1633, 1636, 1644, 1640,
- 1668, 1713, 1666, 1655, 1667, 1670, 1669, 1671, 1659, 1480,
- 1679, 1682, 1687, 1696, 1701, 1695, 1711, 1705, 1715, 1712,
- 1732, 1673, 1736, 1717, 1722, 1729, 1757, 1760, 1766, 1743,
- 1749, 1753, 1761, 1776, 1778, 1751, 1780, 1781, 1787, 1783,
+ 1391, 1403, 1414, 1419, 1412,11868, 1418, 1428, 1546, 1439,
+ 1448, 1465, 1441, 1474, 1451, 1373, 1444, 1479, 1463, 1468,
+ 1398, 1476, 1484, 1469, 1524, 1503, 1485, 1517, 1527, 1536,
+ 1545, 1551, 1496, 1555, 1547, 1568, 1552, 1557, 1563, 1596,
+ 1574, 1584, 1597, 1605, 1586, 1589, 1594, 1598, 1601, 1616,
+ 1607, 1628, 1613, 1634, 1619, 1632, 1635, 1633, 1636, 1642,
+ 1662, 1707, 1640, 1659, 1647, 1660, 1663, 1678, 1667, 1686,
+ 1696, 1699, 1703, 1690, 1705, 1691, 1666, 1695, 1711, 1723,
+ 1739, 1747, 1741, 1745, 1729, 1732, 1752, 1755, 1761, 1763,
+ 1734, 1759, 1766, 1780, 1773, 1771, 1786, 1789, 1781, 1797,
- 1796, 1799, 1788, 1810, 1794,11846, 1824, 1819,11846, 1806,
- 1817, 1807, 1821, 1808, 1834, 1822, 1833,11846, 1844, 1814,
- 1838, 1855, 1826, 1868, 1854, 1865, 1880, 1871, 1863, 1875,
- 1881, 1879, 1872, 1869, 1885, 1889, 1891, 1920, 1903, 1914,
- 1900, 1902, 1921, 1907, 1926, 1913, 1927, 1929, 1916, 1944,
- 1984,11846, 1940, 1943, 1946, 1962, 1949, 1969, 1959, 1978,
- 2009, 1979, 2008, 2007, 1972, 2027, 2001, 2022, 2012, 2021,
- 2031, 2019, 2030, 2060, 2037, 2050, 2041, 2065, 2048, 2047,
- 2058, 2064, 2053, 2071, 1936,11846, 2083, 2075, 2077, 2093,
- 2106, 2091, 2090, 2088, 2098, 2111, 2094, 2096, 2115, 2113,
+ 1802, 1805, 1790, 1782, 1810, 1793,11868, 1828, 1824,11868,
+ 1813, 1819, 1818, 1822, 1823, 1830, 1816, 1841,11868, 1847,
+ 1842, 1850, 1852, 1845, 1861, 1857, 1855, 1880, 1878, 1871,
+ 1882, 1886, 1881, 1884, 1887, 1906, 1898, 1901, 1911, 1905,
+ 1910, 1908, 1900, 1920, 1917, 1931, 1925, 1938, 1923, 1922,
+ 1942, 1982,11868, 1933, 1951, 1944, 1950, 1957, 1968, 1948,
+ 1958, 2007, 1979, 2006, 2003, 1978, 2032, 2005, 2024, 2015,
+ 2021, 2030, 2025, 2029, 2035, 2045, 2043, 2046, 2064, 2047,
+ 2053, 2063, 2067, 2059, 2069, 2073,11868, 2071, 2080, 2081,
+ 2093, 2074, 2087, 2094, 2096, 2090, 2118, 2107, 2101, 2121,
- 2125, 1956, 2108, 2128, 2134, 2132, 2136, 2142, 2133, 2146,
- 2137, 2135, 2143, 2152, 2154, 2140, 2171, 2166, 2191, 2161,
- 2165, 2168, 782, 2194, 2196, 2197, 2199, 2204, 2184, 2179,
- 2193, 2207, 2198, 2189, 2211, 2209, 2217, 2218, 2221, 2224,
- 2220, 2223, 2229, 2234, 2237, 2239, 2256, 2244, 2251, 2249,
- 2246, 2247, 2255, 2267, 2280, 2273, 2293, 2270, 2290, 2271,
- 2279, 2298, 2306, 2294, 2309,11846, 2307, 2282, 2317, 2316,
- 2323, 2320, 2335, 2338, 2337, 2329, 2330, 2351, 2334, 2346,
- 2350, 2343, 2360, 2362, 2361, 2366, 2369, 2370, 2378, 2367,
- 2375, 2387, 2400, 2397, 2401, 2414, 2390, 2412, 2411, 2402,
+ 2114, 2128, 2105, 2131, 2133, 2123, 2126, 2140, 2142, 2132,
+ 2148, 2147, 2149, 2157, 2159, 2165, 2152, 2184, 2156, 2182,
+ 2167, 2181, 2185, 782, 2178, 2187, 2196, 2206, 2215, 2186,
+ 2195, 2190, 2218, 2214, 2179, 2220, 2223, 2227, 2211, 2217,
+ 2231, 2229, 2237, 2245, 2233, 2247, 2253, 2238, 2254, 2250,
+ 2263, 2256, 2266, 2265, 2278, 2281, 2273, 2307, 2279, 2298,
+ 2293, 2300, 2296, 2312, 2308, 2306,11868, 2326, 2309, 2323,
+ 2327, 2336, 2328, 2346, 2338, 2353, 2344, 2334, 2357, 2348,
+ 2356, 2365, 2361, 2372, 2367, 2363, 2371, 2390, 2379, 2387,
+ 2403, 2389, 2393, 2398, 2412, 2409, 2408, 2420, 2407, 2418,
- 2395, 2407, 2418, 2413, 2430, 2439, 2440, 2434, 2424, 2441,
- 2436, 2458, 2442, 2445, 2447, 2457, 2495, 2459, 2462, 2466,
- 2472, 2474, 2464, 2483, 2489, 2502, 2485, 2491, 2504, 2511,
- 2523, 2501, 2531, 2516, 2537, 2527, 2534, 2538, 2541, 2530,
- 2543, 2542, 2540, 2546, 2557, 2562, 2560, 2561, 2582, 2566,
- 2579, 2571, 2583, 2584, 2573, 2574, 2598, 2599, 2602, 2600,
- 2610, 2618, 2613, 2615, 2619, 2609, 2621, 2648, 2646, 2625,
- 2637, 2640, 2643, 2658, 2652, 2653, 2661, 2662, 2666, 2675,
- 2667, 2676, 2687, 2679, 2693, 2677, 2696, 2698, 2702, 2703,
- 2717, 2716, 2719, 2701, 2712, 2724, 2720, 2728, 2727, 2729,
+ 2419, 2422, 2427, 2429, 2428, 2425, 2431, 2448, 2462, 2456,
+ 2436, 2460, 2450, 2469, 2463, 2457, 2464, 2468, 2506, 2467,
+ 2455, 2470, 2480, 2490, 2477, 2495, 2507, 2512, 2521, 2501,
+ 2539, 2532, 2519, 2531, 2533, 2504, 2541, 2528, 2545, 2546,
+ 2547, 2542, 2555, 2572, 2573, 2569, 2570, 2571, 2562, 2560,
+ 2581, 2588, 2599, 2589, 2587, 2583, 2598, 2597, 2600, 2625,
+ 2605, 2615, 2616, 2606, 2620, 2622, 2632, 2630, 2626, 2636,
+ 2650, 2646, 2652, 2658, 2656, 2667, 2659, 2655, 2663, 2673,
+ 2679, 2681, 2665, 2686, 2690, 2687, 2697, 2700, 2696, 2703,
+ 2711, 2707, 2698, 2716, 2723, 2724, 2715, 2731, 2718, 2732,
- 2736, 2756, 2745, 2747, 2755,11846, 2740, 2766, 2751, 2749,
- 2767, 2761, 2760, 2762, 2786, 2795, 2791, 2787, 2794, 2788,
- 2778, 2784, 2832,11846, 2793,11846,11846, 777, 2792,11846,
- 11846, 2829, 2833,11846, 2818, 2836, 2846, 2800, 2819, 2847,
- 2856, 2859, 2831, 2858, 2860, 2867, 2907, 2868, 2885, 2875,
- 2871, 2873, 2879, 2917, 2886, 2874, 2900, 2916, 2897, 2930,
- 2945, 2932, 2941, 2935, 2924, 2946, 2949, 2958, 2960, 2963,
- 2968, 2955, 2952, 2974, 2957, 2966, 2964, 2972, 2988, 2981,
- 2984, 2992, 2999, 2985, 2997, 2995, 3019, 3013, 3015, 3021,
- 3034,11846, 3023, 3030, 3033, 3014, 3024, 3029, 3042, 3047,
+ 2727, 2736, 2744, 2760, 2770, 2747, 2755,11868, 2753, 2754,
+ 2756, 2746, 2773, 2774, 2751, 2767, 2794, 2795, 2784, 2783,
+ 2799, 2787, 2782, 2788, 2834,11868, 2802,11868,11868, 777,
+ 2801,11868,11868, 2811, 2824,11868, 2815, 2825, 2814, 2832,
+ 2845, 2859, 2861, 2844, 2847, 2863, 2858, 2800, 2905, 2864,
+ 2888, 2873, 2883, 2891, 2889, 2910, 2920, 2900, 2933, 2916,
+ 2929, 2932, 2902, 2941, 2944, 2934, 2937, 2962, 2950, 2964,
+ 2961, 2840, 2968, 2971, 2959, 2969, 2974, 2960, 2984, 2977,
+ 2998, 2987, 2986, 2994, 3014, 2991, 3004, 2995, 3025, 3018,
+ 3019, 2869, 3032,11868, 3029, 3033, 3035, 3020, 3021, 3043,
- 3044, 3050, 3048, 3055, 3038, 3058, 3046, 3059, 3060, 3061,
- 3068, 3076, 3071, 3080, 3065, 3097, 3091, 3093, 3102, 3109,
- 3088, 3094,11846, 3099, 3104, 3111, 3103, 3117, 3090, 3119,
- 3120, 3138, 3133, 3145, 3146, 3136, 3128, 3147, 3141, 3162,
- 3144, 3165, 3152, 3157, 3173, 3163, 3168, 3185,11846, 3189,
- 3197, 3177, 3194, 3180, 3200, 3190, 3202, 3184, 3211, 3221,
- 3212, 3215, 3216, 3217, 3213, 3232, 3233, 3237, 3228, 3238,
- 3244, 3243, 3240, 3261, 3256, 3257, 3255, 3260, 3265, 3278,
- 3270, 3271, 3267, 3280, 3281, 3284, 3300, 3305, 3292, 3314,
- 3296, 3295, 3319, 3325, 3317, 3311, 3323, 3324, 3313, 3338,
+ 3039, 3044, 3049, 3060, 3055, 3051, 3061, 3068, 3072, 3056,
+ 3065, 3059, 3070, 3085, 3084, 3076, 3082, 3086, 3079, 3099,
+ 3102, 3093, 3112, 3096, 3100,11868, 3106, 3104, 3117, 3121,
+ 3109, 3123, 3113, 3129, 3133, 3136, 3149, 3148, 3140, 3137,
+ 3150, 3155, 3171, 3164, 3157, 3172, 3169, 3174, 3166, 3176,
+ 3189,11868, 3195, 3202, 3185, 3199, 3186, 3203, 3191, 3205,
+ 3201, 3216, 3228, 3217, 3235, 3224, 3222, 3250, 3238, 3234,
+ 3232, 3251, 3244, 3254, 3245, 3262, 3252, 3256, 3263, 3266,
+ 3279, 3271, 3284, 3274, 3275, 3277, 3281, 3285, 3287, 3301,
+ 3315, 3302, 3322, 3306, 3303, 3329, 3330, 3327, 3317, 3325,
- 3341, 3350, 3344, 3331, 3340, 3359, 3352, 3355, 3342, 3351,
- 3358, 3378, 3388, 3374, 3371, 3383, 3370, 3373, 3380, 3398,
- 3385,11846, 3382, 3399, 3414,11846, 3405, 3407, 3408, 3454,
- 3419, 3441, 3433, 3434, 3439, 3425, 3467, 3453, 3447, 3440,
- 3464, 3474, 3468, 3488, 3484, 3489, 3492, 3495, 3512, 3502,
- 3499, 3507, 3518, 3511, 3519, 3515, 3520, 3522, 3531, 3548,
- 3555, 3553, 414, 3561, 3535, 3545, 3547, 3592, 3556, 3562,
- 3563, 3558, 3575, 3581, 3588, 3587, 3583, 3595, 3597, 3602,
- 3614, 3578, 3626, 3605, 3619, 3624, 3629, 3632, 3607, 3638,
- 3634,11846, 3657, 3646, 3636, 3661, 3658, 3665, 3663, 3643,
+ 3333, 3314, 3339, 3344, 3351, 3350, 3341, 3342, 3356, 3354,
+ 3348, 3343, 3360, 3371, 3381, 3390, 3364, 3385, 3391, 3380,
+ 3393, 3394, 3400, 3377,11868, 3398, 3401, 3427,11868, 3418,
+ 3417, 3412, 3466, 3429, 3445, 3439, 3420, 3438, 3426, 3476,
+ 3432, 3459, 3449, 3470, 3458, 3478, 3488, 3486, 3485, 3502,
+ 3501, 3519, 3498, 3512, 3509, 3500, 3511, 3521, 3522, 3525,
+ 3536, 3548, 3494, 3545, 3541, 414, 3559, 3533, 3537, 3547,
+ 3592, 3558, 3562, 3563, 3564, 3580, 3582, 3588, 3599, 3589,
+ 3603, 3583, 3609, 3608, 3604, 3616, 3610, 3623, 3626, 3629,
+ 3634, 3646, 3650, 3637,11868, 3639, 3655, 3640, 3660, 3649,
- 11846, 3669, 3670, 3656, 3680, 3673, 3677, 3682, 3697, 3683,
- 3698, 3690, 3688, 3699, 3705, 3707, 3713, 3706, 3721, 3725,
- 11846, 3715,11846, 3730, 3727, 3735, 3726, 3732, 3750, 3741,
- 3742, 3743, 3740, 3767, 3768,11846,11846, 3770, 3771, 3757,
- 3764, 3784, 3785, 3777, 3774, 3783,11846, 3790, 3814,11846,
- 3804, 3792, 3812, 3810, 3798, 3816, 3800, 3836, 3813, 3819,
- 3828, 3834, 3841, 3842, 3795, 3838, 3833, 3847, 3859, 3853,
- 11846, 3865, 3869, 3861, 3868, 3870, 3871, 3874, 3885, 3898,
- 3892,11846, 3899, 3891, 3900, 3894, 3843, 3908, 3902, 3895,
- 3917, 3922, 3910, 3897, 3919, 3933, 3932, 3946, 3953, 3956,
+ 3668, 3666, 3651,11868, 3663, 3674, 3664, 3693, 3673, 3687,
+ 3684, 3697, 3685, 3690, 3707, 3686, 3710, 3700, 3716, 3712,
+ 3711, 3714, 3721,11868, 3724,11868, 3730, 3699, 3746, 3729,
+ 3745, 3758, 3741, 3742, 3748, 3752, 3749, 3773, 3775,11868,
+ 11868, 3777, 3779, 3756, 3785, 3763, 3768, 3787, 3783, 3781,
+ 11868, 3799, 3822,11868, 3823, 3801, 3817, 3804, 3809, 3814,
+ 3810, 3821, 3836, 3826, 3839, 3840, 3846, 3849, 3843, 3845,
+ 3844, 3853, 3869, 3861,11868, 3876, 3878, 3862, 3879, 3882,
+ 3891, 3885, 3888, 3892, 3886,11868, 3910, 3901, 3920, 3902,
+ 3895, 3766, 3918, 3912, 3928, 3932, 3922, 3919, 3915, 3945,
- 3947, 3949, 3958, 3957, 3961,11846, 3959, 3950, 3951, 3963,
- 3960, 3967, 3955, 3966, 3987, 3994, 3982, 3984, 3998, 4002,
- 3993, 4007, 3988, 4010, 3989, 4015, 4018, 4009, 4014, 4017,
- 4021, 4029, 4026, 4032, 158, 4034, 4045, 4028, 4033,11846,
- 4044, 4048, 4062, 4056, 4061, 4068, 4049, 115, 4072, 4065,
- 4070, 4089, 4078, 4083, 4101, 4084, 4107, 4108, 4109, 4091,
- 4096, 4110, 4118, 4114, 4113, 4116, 4121, 4123, 4105, 4146,
- 4145, 4140, 4137,11846, 4158, 4147, 4159, 4151, 4144, 4164,
- 4153, 4169, 4150, 4187,11846, 4177, 4183, 4188, 4194, 4191,
- 4186, 4195, 4197, 4204, 4189, 4208,11846, 4224, 4213, 4225,
+ 3939, 3905, 3941, 3946, 3951, 3958, 3966, 3959, 3974,11868,
+ 3965, 3953, 3957, 3979, 3976, 3982, 3972, 3980, 3985, 3983,
+ 3978, 3992, 3997, 3999, 4006, 4008, 4004, 4016, 4015, 4023,
+ 4025, 4021, 4027, 4030, 4018, 4033, 4029, 4035, 158, 4040,
+ 4042, 4046, 4045,11868, 4052, 4057, 4075, 4068, 4072, 4078,
+ 4061, 115, 4073, 4067, 4074, 4084, 4097, 4092, 4090, 4095,
+ 4096, 4101, 4104, 4103, 4105, 4120, 4124, 4122, 4123, 4129,
+ 4130, 4131, 4117, 4138, 4133, 4144, 4142,11868, 4155, 4152,
+ 4168, 4165, 4157, 4181, 4162, 4179, 4160, 4195,11868, 4186,
+ 4193, 4178, 4191, 4189, 4202, 4205, 4221, 4206, 4208, 4222,
- 4243, 4234, 4227, 4231, 4226,11846, 4246, 4244, 4250, 4240,
- 4252, 4258, 4238, 4248, 4265, 4259, 4285, 4266, 4276, 4279,
- 4275, 4274, 4282, 4290, 4284, 4303, 4309, 4293, 4308, 4307,
- 4304, 4310, 4320, 4323, 4324, 4318, 4343, 4334,11846, 4344,
- 4338, 4348, 4350, 4337, 4347, 4361, 4355, 4373, 4359, 4365,
- 4370, 4371, 4410, 4385, 4382, 4394, 4401, 4407, 4399, 4409,
- 4416, 4412, 4422, 4436, 4431, 4426, 4440, 4456, 4459, 4428,
- 4443, 4439, 4474, 4477, 4470, 4467, 4460, 4485, 4468, 4475,
- 4484, 4492, 4486, 4491, 4495, 4497, 4529, 4500, 4494, 4513,
- 2826, 4504,11846, 4502, 4519, 4524, 4512, 4527, 4528, 4548,
+ 11868, 4223, 4218, 4227, 4203, 4229, 4230, 4232, 4241,11868,
+ 4240, 4242, 4257, 4245, 4258, 4269, 4266, 4261, 4264, 4259,
+ 4292, 4267, 4274, 4271, 4280, 4290, 4294, 4291, 4298, 4305,
+ 4319, 4303, 4308, 4306, 4314, 4317, 4322, 4318, 4326, 4332,
+ 4325, 4338,11868, 4353, 4342, 4346, 4354, 4348, 4350, 4365,
+ 4355, 4376, 4364, 4372, 4375, 4378, 4415, 4398, 4377, 4399,
+ 4403, 4413, 4404, 4417, 4410, 4406, 4427, 4440, 4448, 4391,
+ 4425, 4457, 4459, 4433, 4450, 4451, 4474, 4475, 4470, 4465,
+ 4472, 4467, 4477, 4469, 4461, 4508, 4499, 4512, 4506, 4509,
+ 4502, 4534, 4514, 4503, 4530, 4522, 4507,11868, 4520, 4538,
- 4558, 4537, 4546, 4553, 4557, 4540, 4556, 4554, 4555, 4579,
- 4571, 4572, 4580, 4573, 4596, 4583, 4584, 4587, 4598, 4599,
- 4593, 4605, 4609, 4606, 4611, 4608, 4619, 4637, 4636, 4640,
- 11846, 4644, 4643, 4626, 4646, 4649, 4630, 4651, 4658, 4657,
- 4639, 4667, 4669, 4652, 4671, 4666, 4677, 4672, 4670, 4676,
- 4686, 4698, 4684,11846, 4703, 4709, 4699, 4707, 4696, 4710,
- 4711, 4713, 4726, 4729, 4730, 4741, 4739, 4727, 4740, 4743,
- 4736,11846, 4757, 4760, 4756, 4759, 4765, 4766, 4755, 4767,
- 4779, 4769, 4770,11846, 4776, 4777, 4788, 4784, 4780, 4786,
- 4785, 4815, 4808, 4807,11846, 4824, 4817, 4819, 4816, 4825,
+ 4535, 4541, 4547, 4537, 4560, 4571, 4563, 4558, 4564, 4569,
+ 4577, 4566, 4579, 4580, 4583, 4582, 4593, 4581, 4602, 4613,
+ 4605, 4610, 4609, 4619, 4611, 4621, 4620, 4608, 4606, 4629,
+ 4642, 4628, 4649, 4654, 4658,11868, 4661, 4657, 4644, 4656,
+ 4666, 4647, 4668, 4671, 4670, 4652, 4680, 4682, 4677, 4685,
+ 4679, 4707, 4688, 4687, 4706, 4704, 4714, 4699,11868, 4715,
+ 4719, 4709, 4712, 4742, 4734, 4745, 4746, 4751, 4752, 4753,
+ 4759, 4757, 4749, 4764, 4761, 4777,11868, 4726, 4732, 4766,
+ 4787, 4769, 4791, 4780, 4794, 4801, 4782, 4783,11868, 4806,
+ 4795, 4798, 4797, 4796, 4814, 4820, 4825, 4828, 4831,11868,
- 4803, 4820, 4826, 4811, 4827, 4841, 4838, 4844, 4852, 4851,
- 4849, 4847, 4867,11846, 4854, 4866, 4864, 4887, 4865, 4868,
- 4876, 4890, 4888, 4891, 4893, 4914, 4896, 4899, 4907,11846,
- 4929, 4900, 4926, 4920, 4942, 4917, 4913, 4927, 4946, 4947,
- 4950, 4941, 4940, 4956, 4944,11846, 4948, 4958, 4963, 4969,
- 4980, 4974, 4975, 4985, 4983, 4977, 4979, 4986, 4990, 4999,
- 4996, 5004, 5011, 5019, 5010, 5002, 5025, 5012, 5026, 5039,
- 5029, 5038, 5034, 5048, 5053, 5055, 5045, 5057, 5063, 5062,
- 5061, 5043, 5073, 5074, 5084, 5088, 5086, 5096,11846, 5092,
- 5090, 5093, 5080, 5100, 5095, 5111, 5101, 5105, 5083, 5123,
+ 4836, 4830, 4839, 4840, 4841, 4829, 4848, 4851, 4852, 4861,
+ 4854, 4821, 4864, 4878, 4866, 4885, 4867, 4891,11868, 4876,
+ 4886, 4889, 4904, 4880, 4888, 4899, 4911, 4907, 4905, 4922,
+ 4931, 4915, 4926, 4916,11868, 4946, 4929, 4948, 4933, 4959,
+ 4942, 4950, 4947, 4957, 4963, 4973, 4964, 4960, 4988, 4974,
+ 11868, 4956, 4981, 4984, 4995, 5000, 4992, 4979, 4986, 5005,
+ 5008, 5009, 5016, 5018, 5019, 5020, 5035, 5031, 5036, 5032,
+ 5042, 5043, 5051, 5044, 5063, 5058, 5065, 5059, 5075, 5054,
+ 5057, 5068, 5086, 4985, 5083, 5077, 5067, 5091, 5102, 5103,
+ 5110, 5106, 5116,11868, 5108, 5115, 5112, 5104, 5113, 5114,
- 5139, 5132, 5127, 5121, 5147, 5149, 5142, 5135, 5150, 5133,
- 5138, 5154, 5156, 5175, 5153, 5166, 5167, 5168, 5176, 5184,
- 5180, 5173, 5177, 5181, 5179, 5203, 5182, 5204, 5220, 5198,
- 5212, 5200, 5207, 5214, 5216, 5215, 5224, 5223, 5239, 5246,
- 5236, 5242, 5247, 5252, 5254, 5253, 5260, 5244, 5262, 5266,
- 5265,11846,11846, 5288,11846, 5269, 5293, 5281, 5292, 5274,
- 5301, 5285, 5289, 5287, 5311, 5308, 5241, 5314, 5305, 5328,
- 5319, 5327, 5333, 5322, 5321, 5334, 5330, 5349, 5347,11846,
- 5335,11846, 5357, 5338, 5358, 5366, 5373, 5351,11846, 5372,
- 11846, 5376, 5375, 5365, 5380, 5385,11846, 5384, 5361, 5377,
+ 5130, 5120, 5123, 5133, 5148, 5131, 5154, 5147, 5143, 5169,
+ 5171, 5163, 5157, 5172, 5149, 5160, 5176, 5186, 5183, 5174,
+ 5178, 5182, 5189, 5187, 5203, 5216, 5199, 5195, 5204, 5218,
+ 5201, 5226, 5206, 5230, 5237, 5220, 5229, 5221, 5222, 5232,
+ 5242, 5244, 5249, 5245, 5254, 5259, 5256, 5265, 5267, 5273,
+ 5274, 5272, 5276, 5278, 5281, 5286, 5285,11868,11868, 5308,
+ 11868, 5289, 5288, 5301, 5306, 5312, 5324, 5311, 5320, 5315,
+ 5330, 5338, 5337, 5334, 5332, 5339, 5347, 5346, 5351, 5342,
+ 5353, 5354, 5348, 5365, 5383,11868, 5366,11868, 5390, 5367,
+ 5381, 5395, 5392, 5377,11868, 5391,11868, 5398, 5399, 5387,
- 5386, 5390, 5388, 5403, 5398, 5402, 5405, 5422, 5412, 5378,
- 5430, 5424, 5416, 5423, 5415, 5432, 5435, 5441, 5446, 5439,
- 5454, 5456, 5466, 5457, 5471, 5453, 5459, 5463, 5481, 5468,
- 5483,11846, 5476, 5494, 5489, 5493, 5495, 5491, 5499, 5497,
- 5509, 5516, 5498, 5504, 5531, 5534, 5515, 5536, 5525, 5543,
- 5548, 5537, 5538, 5544, 5533, 5552, 5564, 5556, 5557, 5583,
- 5580,11846, 5568, 5586, 5570, 5571, 5587, 5593,11846, 5595,
- 5596, 5578, 5605, 5607, 5597, 5603, 5610, 5612, 5617, 5613,
- 5624, 5623, 5650, 5634, 5652, 5644, 5659,11846, 5645, 5655,
- 5632, 5661, 5665, 5642, 5672, 5679, 5670, 5684, 5689, 5699,
+ 5389, 5393,11868, 5404, 5379, 5413, 5412, 5415, 5428, 5422,
+ 5417, 5424, 5426, 5440, 5432, 5452, 5449, 5448, 5436, 5451,
+ 5444, 5460, 5473, 5468, 5465, 5481, 5470, 5461, 5487, 5478,
+ 5488, 5472, 5484, 5479, 5500, 5501, 5497,11868, 5519, 5537,
+ 5523, 5509, 5528, 5518, 5517, 5524, 5521, 5525, 5529, 5548,
+ 5542, 5553, 5551, 5567, 5556, 5560, 5555, 5559, 5564, 5583,
+ 5569, 5575, 5587, 5584, 5585, 5598, 5590,11868, 5593, 5597,
+ 5594, 5599, 5601, 5602,11868, 5604, 5622, 5614, 5629, 5636,
+ 5625, 5624, 5628, 5620, 5645, 5626, 5647, 5640, 5672, 5649,
+ 5653, 5657, 5674,11868, 5670, 5676, 5658, 5665, 5682, 5667,
- 5691, 5687, 5680, 5682, 5683, 5705, 5709, 5718, 5720, 5714,
- 5725, 5706, 5716, 5722, 5726, 5724, 5717, 5723, 5736, 5740,
- 5735, 5743, 5746, 5747, 5748, 5751, 5764, 5769, 5753, 5770,
- 11846, 5767, 5773, 5788, 5794, 5763, 5786, 5787, 5778, 5805,
- 5810, 5800,11846, 5816, 5797, 5813, 5819, 5821, 5815, 5806,
- 5827, 5823, 5843, 5853, 5845, 5832, 5864, 5847,11846, 5862,
- 11846, 5857, 5861, 5878, 5865, 5885, 5883, 5879, 5884, 5896,
- 5892, 5901, 5902, 5898, 5909, 5904, 5911, 5924, 5912, 5913,
- 5928, 5919, 5923, 5930, 5944, 5934, 5943, 5828, 5937, 5959,
- 5945, 5950, 5951, 5954, 5957, 5987, 5962, 5976,11846,11846,
+ 5701, 5703, 5695, 5706, 5710, 5717, 5708, 5702, 5696, 5697,
+ 5699, 5718, 5730, 5736, 5737, 5734, 5741, 5724, 5744, 5750,
+ 5748, 5738, 5732, 5740, 5742, 5735, 5758, 5759, 5770, 5774,
+ 5771, 5765, 5768, 5791, 5775, 5796,11868, 5792, 5795, 5797,
+ 5801, 5786, 5798, 5809, 5812, 5824, 5831, 5833,11868, 5808,
+ 5820, 5838, 5834, 5847, 5835, 5830, 5825, 5837, 5854, 5875,
+ 5853, 5872, 5874, 5869,11868, 5877,11868, 5876, 5873, 5881,
+ 5887, 5888, 5895, 5899, 5900, 5920, 5913, 5929, 5918, 5911,
+ 5927, 5916, 5934, 5938, 5921, 5919, 5944, 5943, 5936, 5958,
+ 5953, 5965, 5951, 5964, 5956, 5981, 5979, 5968, 5969, 5966,
- 5972, 5980, 5974, 6001, 5989, 5982, 6007, 6018, 6011, 5999,
- 6014, 6016, 6009, 6024, 6031, 6032, 6034, 6062,11846, 6015,
- 6040, 6041, 6059, 6051, 6071, 6054, 6069, 6075, 6068, 6060,
- 6076, 6077,11846, 6085, 6086, 6070, 6080, 6081, 6111, 6082,
- 11846, 6107,11846, 6097, 6098, 6099, 6119, 6123, 6113, 6124,
- 6121, 6126, 6138, 6142, 6159, 6146, 6134, 6136, 6157, 6149,
- 6167, 6148, 6154, 6151, 6171, 6161, 6182, 6169, 6176, 6175,
- 11846, 6190, 6184, 6196, 6201, 6185, 6203, 6209, 6207, 6198,
- 11846, 6210,11846, 6211, 6217, 6212, 6233, 6231, 6229, 6228,
- 6238, 6235, 6252, 6256, 6243, 6259, 6251, 6260, 6264, 6258,
+ 5976, 5971, 6010, 5992, 5995,11868,11868, 5991, 5994, 6019,
+ 6022, 6011, 6014, 6028, 6030, 6039, 6026, 6032, 6037, 6043,
+ 6058, 6047, 6052, 6050, 6081,11868, 6066, 6067, 6062, 6078,
+ 6072, 6092, 6079, 6036, 6095, 6091, 6087, 6103, 6098,11868,
+ 6100, 6106, 6088, 6108, 6119, 6131, 6117,11868, 6128,11868,
+ 6118, 6122, 6123, 6130, 6116, 6143, 6147, 6145, 6149, 6157,
+ 6159, 6156, 6139, 6180, 6185, 6179, 6175, 6190, 6172, 6176,
+ 6174, 6191, 6183, 6200, 6186, 6189, 6204,11868, 6197, 6206,
+ 6207, 6209, 6210, 6220, 6223, 6231, 6216,11868, 6242,11868,
+ 6233, 6237, 6248, 6247, 6250, 6254, 6243, 6249, 6260, 6263,
- 6248,11846, 6270, 6272, 6285, 6286, 6282, 6295, 6302, 6303,
- 6284, 6305,11846, 6309, 6312, 6293, 6315, 6294, 6320, 6317,
- 6311, 6316, 6331, 6326, 6327, 6330, 6337, 6335, 6347, 6350,
- 6344, 6345, 6358, 6361, 6369, 6372, 6389, 6375, 6382, 6368,
- 6386, 6377,11846, 6384, 6387, 6393, 6399, 6383, 6420, 6418,
- 6416, 6408, 6423, 6409, 6431, 6436, 6419, 6427, 6430, 6438,
- 6449, 6446, 6452,11846, 6457, 6442, 6467, 6443, 6459, 6469,
- 6456, 6482, 6471, 6470, 6472, 6488, 6476, 6479, 6484, 6487,
- 6501, 6505, 6512, 6511, 6493, 6504, 6506, 6539, 6515, 6516,
- 6514, 6540,11846, 6559, 6533, 6529, 6553, 6550, 6531, 6569,
+ 6275, 6268, 6277, 6273, 6286, 6287, 6283, 6271,11868, 6278,
+ 6276, 6306, 6303, 6290, 6310, 6319, 6322, 6307, 6328,11868,
+ 6324, 6336, 6317, 6330, 6331, 6341, 6338, 6333, 6346, 6337,
+ 6342, 6349, 6343, 6359, 6373, 6374, 6372, 6368, 6367, 6385,
+ 6386, 6375, 6376, 6409, 6388, 6395, 6392, 6358, 6404,11868,
+ 6400, 6407, 6411, 6412, 6413, 6427, 6431, 6434, 6432, 6442,
+ 6424, 6446, 6448, 6443, 6456, 6457, 6463, 6461, 6455, 6476,
+ 11868, 6471, 6462, 6472, 6458, 6459, 6482, 6469, 6490, 6497,
+ 6491, 6495, 6501, 6498, 6489, 6507, 6514, 6522, 6521, 6520,
+ 6517, 6515, 6525, 6534, 6537, 6539, 6540, 6538, 6546,11868,
- 6556, 6548, 6562, 6551, 6563, 6566, 6558, 6587, 6572, 6590,
- 6574, 6578, 6601, 6604, 6607, 6589,11846,11846, 6610, 6588,
- 6608, 6611, 6619,11846, 6614, 6603, 6627, 6605, 6625, 6629,
- 6628, 6633, 6622, 6646, 6641, 6649, 6636, 6656, 6659, 6638,
- 6650,11846, 6672, 6669, 6683, 6660, 6675, 6684, 6679,11846,
- 6671, 6697, 6694, 6695, 6696, 6688, 6692, 6699, 6701, 6702,
- 6710, 6698, 6707, 6719, 6731, 6722, 6741, 6726, 6743, 6753,
- 6730, 6736, 6752,11846, 6734, 6737, 6761, 6755, 6749, 6748,
- 6769,11846, 6768, 6770, 6788, 6779, 6781, 6791, 6783, 6794,
- 6793, 6802, 6786, 6808, 6805, 6818, 6806, 6810, 6819, 6832,
+ 6574, 6541, 6556, 6573, 6565, 6562, 6584, 6579, 6570, 6566,
+ 6572, 6567, 6578, 6587, 6595, 6583, 6612, 6599, 6594, 6623,
+ 6620, 6625, 6607,11868,11868, 6628, 6604, 6626, 6632, 6633,
+ 11868, 6635, 6621, 6637, 6640, 6639, 6622, 6649, 6650, 6670,
+ 6651, 6659, 6666, 6671, 6655, 6678, 6675, 6657, 6676,11868,
+ 6694, 6682, 6696, 6684, 6688, 6699, 6710,11868, 6697, 6701,
+ 6713, 6715, 6708, 6703, 6705, 6714, 6724, 6722, 6726, 6728,
+ 6731, 6735, 6744, 6739, 6743, 6738, 6763, 6772, 6749, 6753,
+ 6774,11868, 6761, 6760, 6780, 6779, 6765, 6783, 6788,11868,
+ 6792, 6793, 6799, 6798, 6805, 6813, 6808, 6818, 6812, 6833,
- 6820, 6813, 6836, 6829, 6843, 6847, 6840,11846, 6845, 6833,
- 6862, 6856, 6853, 6861,11846, 6864, 6882, 6867,11846, 6889,
- 6860, 6885, 6880, 6898,11846, 6883, 6893, 6884, 6900, 6877,
- 6903, 6899, 6904, 6891, 6909, 6908, 6913, 6917, 6929, 6926,
- 11846, 6927, 6923, 6940,11846, 6943, 6944, 6948, 6946, 6950,
- 6952, 6960, 6953, 6961, 6962, 6957, 6977, 6979, 6974,11846,
- 6986, 6997,11846, 6990, 6992, 6973, 6987, 6988, 7001,11846,
- 6995, 7004, 7000, 6998, 7024, 7030, 7031, 7034, 7011, 7019,
- 7032, 7022, 7023, 7049, 7043, 7048, 7050, 7038, 7045, 7055,
- 7057,11846, 7077, 7061, 7076, 7081, 7066, 7091, 7087, 7082,
+ 6815, 6820, 6824, 6832, 6826, 6838, 6842, 6853, 6839, 6841,
+ 6847, 6854, 6871, 6874, 6868,11868, 6869, 6863, 6876, 6866,
+ 6883, 6877,11868, 6891, 6911, 6881,11868, 6902, 6890, 6895,
+ 6908, 6912,11868, 6909, 6919, 6913, 6927, 6899, 6917, 6910,
+ 6935, 6918, 6926, 6934, 6922, 6936, 6937, 6945,11868, 6953,
+ 6947, 6962,11868, 6970, 6968, 6972, 6975, 6976, 6978, 6981,
+ 6964, 6987, 6986, 6982, 6985, 6995, 7002,11868, 6991, 7021,
+ 11868, 7016, 7006, 6999, 7012, 7015, 7026,11868, 7013, 7023,
+ 7031, 7032, 7040, 7039, 7050, 7038, 7045, 7053, 7047, 7042,
+ 7051, 7066, 7071, 7059, 7084, 7063, 7076, 7074, 7080,11868,
- 7074, 7097, 7098,11846,11846, 7099,11846, 7104, 7112, 7114,
- 7116,11846, 7100, 7106, 7060, 7118, 7109, 7138, 7134, 7143,
- 7126, 7146, 7142,11846, 7151, 7153,11846, 7129, 7157, 7165,
- 7158, 7159, 7160, 7168, 7173, 7193, 7162, 7179, 7184, 7189,
- 7185, 7181, 7205, 7198, 7203, 7199, 7233,11846, 7217, 7215,
- 7216, 7219, 7227, 7230, 7244, 7243, 7255, 7251, 7246, 7240,
- 7249,11846, 7253, 7266, 7263, 7279, 7280,11846,11846, 7282,
- 11846, 7271, 7292, 7285,11846, 7288, 7295, 7283, 7286, 7303,
- 7304, 7305,11846, 7315, 7306, 7326, 7308, 7331, 7335,11846,
- 7333, 7340, 7321, 7328, 7329, 7348, 7352, 7341, 7347, 7382,
+ 7087, 7077, 7096, 7097, 7069, 7108, 7101, 7113, 7117, 7115,
+ 7114,11868,11868, 7118,11868, 7126, 7123, 7130, 7132,11868,
+ 7116, 7135, 7156, 7143, 7154, 7159, 7150, 7157, 7151, 7167,
+ 7166,11868, 7168, 7170,11868, 7162, 7173, 7177, 7178, 7195,
+ 7181, 7187, 7198, 7208, 7189, 7201, 7206, 7196, 7212, 7194,
+ 7222, 7200, 7246, 7225, 7251,11868, 7235, 7233, 7238, 7232,
+ 7245, 7241, 7264, 7266, 7268, 7274, 7272, 7273, 7259,11868,
+ 7280, 7300, 7286, 7284, 7296,11868,11868, 7299,11868, 7291,
+ 7305, 7301,11868, 7312, 7313, 7298, 7306, 7314, 7325, 7318,
+ 7327,11868, 7341, 7335, 7350, 7329, 7348, 7356,11868, 7352,
- 7343,11846, 7361, 7369, 7373, 7371, 7386, 7378, 7375, 7372,
- 7374, 7388, 7395, 7396, 7399, 7400, 7408, 7409, 7413, 7406,
- 7416, 7410, 7424, 7422, 7427, 7412,11846, 7437, 7435, 7440,
- 7439, 7470, 7434, 7454, 7464,11846, 7459, 7465, 7448, 7473,
- 11846, 7466, 7474, 7475, 7483, 7471, 7490, 7495, 7469, 7493,
- 7500, 7492, 7510,11846, 7511, 7512, 7505, 7526, 7528, 7531,
- 7520, 7530,11846,11846, 7540,11846, 7537, 7538, 7539, 7544,
- 7547, 7560, 7549, 7568, 7578, 7564, 7565, 7575, 7580, 7570,
- 7586, 7573,11846, 7571, 7599, 7581, 7619, 7620, 7621, 7615,
- 11846, 7614, 7604,11846, 7605,11846, 7600, 7611, 7633, 7638,
+ 7354, 7342, 7345, 7344, 7371, 7362, 7365, 7376, 7400, 7385,
+ 11868, 7377, 7383, 7387, 7401, 7405, 7391, 7392, 7389, 7413,
+ 7412, 7419, 7416, 7418, 7404, 7430, 7435, 7434, 7437, 7426,
+ 7440, 7446, 7443, 7449, 7433,11868, 7455, 7463, 7456, 7466,
+ 7471, 7468, 7479, 7477,11868, 7478, 7482, 7492, 7495,11868,
+ 7483, 7493, 7499, 7484, 7485, 7507, 7511, 7515, 7512, 7518,
+ 7521, 7528,11868, 7534, 7535, 7523, 7517, 7544, 7548, 7542,
+ 7539,11868,11868, 7562,11868, 7559, 7556, 7567, 7569, 7563,
+ 7576, 7572, 7584, 7577, 7573, 7578, 7594, 7596, 7589, 7592,
+ 7590,11868, 7603, 7618, 7604, 7632, 7638, 7640, 7633,11868,
- 7627, 7634, 7642, 7628, 7617, 7651,11846, 7663, 7644, 7648,
- 7667, 7655, 7675, 7674, 7678, 7682,11846, 7677, 7665, 7684,
- 7669,11846, 7692, 7693, 7691, 7706, 7679, 7702, 7695, 7710,
- 7703, 7722, 7709, 7728, 7734, 7720, 7737, 7725, 7719, 7733,
- 7744, 7740, 7752, 7750, 7748, 7768,11846, 7765, 7755, 7761,
- 7762, 7764, 7770, 7777, 7778, 7786, 7782, 7790, 7793, 7811,
- 11846, 7795,11846, 7805, 7801, 7806, 7814, 7804, 7819, 7822,
- 7831, 7823, 7820, 7821, 7839, 7854, 7840, 7851, 7856, 7842,
- 7845, 7846, 7864,11846, 7870, 7873, 7861, 7884, 7881, 7875,
- 7877, 7889,11846, 7891, 7878, 7879, 7895, 7897,11846, 7900,
+ 7631, 7621,11868, 7623,11868, 7619, 7629, 7644, 7660, 7645,
+ 7651, 7656, 7650, 7637, 7646,11868, 7681, 7665, 7670, 7688,
+ 7667, 7694, 7691, 7696, 7703,11868, 7700, 7679, 7705, 7713,
+ 11868, 7689, 7719, 7702, 7720, 7692, 7729, 7721, 7722, 7723,
+ 7737, 7731, 7744, 7741, 7740, 7749, 7756, 7751, 7757, 7761,
+ 7760, 7758, 7776, 7768, 7791,11868, 7784, 7778, 7780, 7790,
+ 7771, 7769, 7795, 7802, 7798, 7806, 7813, 7803, 7820,11868,
+ 7816,11868, 7815, 7818, 7829, 7836, 7824, 7834, 7841, 7845,
+ 7839, 7833, 7850, 7840, 7868, 7849, 7872, 7870, 7863, 7866,
+ 7873, 7884,11868, 7882, 7891, 7879, 7897, 7895, 7883, 7887,
- 7905, 7909, 7915, 7911, 7919, 7917, 7928, 7916, 7924,11846,
- 7933, 7939, 7934, 7936, 7927, 7949, 7942, 7952, 7951, 7954,
- 11846, 7962, 7953, 7963, 7964, 7966, 7978, 7979, 7968, 7986,
- 7970, 7969, 7989, 7997,11846, 7992, 7998, 8001, 8008,11846,
- 8000, 8003, 8009, 8006, 8019, 8022, 8024, 8033, 8034, 8035,
- 8037, 8063, 8042, 8064,11846, 8058, 8051, 8067, 8059, 8069,
- 8070, 8062, 8081, 8094, 8090, 8101, 8109,11846, 8110, 8104,
- 8106, 8108, 8114, 8093, 8131, 8121, 8123, 8120, 8134,11846,
- 8146, 8148, 8150, 8147, 8154, 8168, 8143, 8152, 8170, 8161,
- 8171,11846, 8158, 8159, 8181, 8180, 8187, 8192, 8193, 8195,
+ 7911,11868, 7912, 7900, 7903, 7914, 7915,11868, 7919, 7924,
+ 7902, 7935, 7918, 7936, 7922, 7948, 7939, 7947,11868, 7956,
+ 7957, 7944, 7959, 7945, 7960, 7953, 7969, 7964, 7967, 7963,
+ 7974,11868, 7984, 7978, 7979, 7982, 7981, 7997, 8001, 8009,
+ 8014, 8010, 7994, 8004, 8016,11868, 8008, 8025, 8022, 8032,
+ 11868, 8027, 8033, 8028, 8038, 8052, 8058, 8042, 8043, 8046,
+ 8057, 8060, 8083, 8067, 8091,11868, 8072, 8077, 8074, 8084,
+ 8078, 8089, 8085, 8088, 8116, 8111, 8119, 8132,11868, 8131,
+ 8124, 8134, 8137, 8140, 8128, 8141, 8144, 8147, 8155, 8149,
+ 11868, 8168, 8179, 8180, 8163, 8162, 8191, 8167, 8181, 8198,
- 8191, 8197, 8211, 8186,11846, 8189,11846, 8206, 8203, 8214,
- 8230, 8234, 8210, 8238, 8236, 8246, 8239, 8229,11846, 8242,
- 8248, 8250, 8253, 8270, 8272, 8274, 8278,11846, 8275, 8273,
- 8269, 8276,11846, 8290, 8299, 8292, 8298, 8301, 8259, 8294,
- 8318, 8302, 8323,11846, 8327, 8329, 8325, 8265, 8328, 8326,
- 8333, 8334, 8336, 8331, 8340, 8351, 8347, 8345, 8349, 8355,
- 8372,11846, 8367, 8376, 8380, 8378, 8381, 8375, 8382, 8368,
- 8385, 8387, 8404,11846, 8392, 8400, 8401, 8402, 8409, 8426,
- 8405, 8428, 8431, 8429, 8436, 8434, 8440, 8424, 8419, 8451,
- 8449, 8450, 8445,11846, 8447, 8457, 8474, 8448, 8485, 8475,
+ 8192, 8194,11868, 8176, 8200, 8206, 8190, 8195, 8205, 8207,
+ 8211, 8215, 8203, 8240, 8235,11868, 8224,11868, 8225, 8237,
+ 8247, 8254, 8249, 8242, 8255, 8251, 8262, 8256, 8271,11868,
+ 8243, 8252, 8265, 8279, 8287, 8288, 8292, 8298,11868, 8289,
+ 8283, 8290, 8295,11868, 8306, 8308, 8284, 8320, 8325, 8312,
+ 8338, 8341, 8322, 8343,11868, 8345, 8347, 8346, 8348, 8353,
+ 8349, 8354, 8352, 8356, 8355, 8359, 8374, 8370, 8390, 8368,
+ 8378, 8393,11868, 8395, 8397, 8396, 8401, 8402, 8394, 8404,
+ 8412, 8410, 8408, 8423,11868, 8433, 8422, 8424, 8425, 8429,
+ 8449, 8427, 8441, 8460, 8451, 8461, 8459, 8465, 8440, 8456,
- 8480,11846, 8478,11846, 8476, 8477, 8488, 8492, 8493,11846,
- 8496, 8498, 8505, 8501, 8510,11846,11846, 8520, 8534, 8518,
- 8531, 8532, 8528, 8535, 8529,11846,11846, 8539,11846, 8525,
- 11846, 8550, 8526,11846,11846, 8560, 8522, 8545, 8549, 8553,
- 11846, 8573, 8576, 8579,11846, 8582,11846, 8588, 8566, 8583,
- 8569, 8568, 8592,11846, 8580, 8595, 8577, 8602, 8618,11846,
- 8604, 8612, 8617, 8607, 8609, 8613,11846, 8630, 8624, 8626,
- 8629, 8636, 8622, 8631, 8647, 8634, 8648, 8649, 8653,11846,
- 8665, 8672, 8673, 8659, 8674, 8675, 8676, 8680, 8670, 8692,
- 8700, 8686, 8694, 8696, 8715, 8690, 8707, 8724, 8725, 8726,
+ 8463, 8472, 8473, 8479,11868, 8469, 8485, 8490, 8502, 8503,
+ 8497, 8508,11868, 8498,11868, 8499, 8500, 8515, 8517, 8518,
+ 11868, 8528, 8496, 8530, 8522, 8535,11868,11868, 8546, 8544,
+ 8539, 8552, 8545, 8556, 8555, 8558,11868,11868, 8553,11868,
+ 8541,11868, 8560, 8568,11868,11868, 8562, 8543, 8575, 8572,
+ 8577,11868, 8579, 8580, 8592, 8595, 8608,11868, 8609,11868,
+ 8615, 8594, 8611, 8602, 8601, 8621,11868, 8624, 8610, 8619,
+ 8622, 8630,11868, 8617, 8638, 8646, 8659, 8637, 8641,11868,
+ 8662, 8654, 8657, 8664, 8669, 8660, 8661, 8672, 8683, 8678,
+ 8681, 8688,11868, 8684, 8680, 8690, 8691, 8704, 8703, 8715,
- 8717, 8728, 8713, 8727, 8734, 8736, 8744, 8738, 8740, 8754,
- 8748, 8749, 8753, 8746, 8755, 8778, 8779, 8772, 8784, 8773,
- 8781, 8777, 8771, 8787, 8782, 8793, 8790, 8794, 8807, 8796,
- 8804, 8812, 8808, 8814, 8817, 8815, 8811, 8834, 8831, 8844,
- 8837, 8835, 8841,11846, 8830, 8847, 8854, 8860, 8866, 8855,
- 8864, 8870, 8874, 8875, 8885, 8886, 8877, 8887,11846,11846,
- 11846, 8881, 8894,11846, 8897, 8882, 8899, 8901, 8903,11846,
- 8909, 8905, 8911, 8914, 8915, 8922, 8919, 8938, 8924, 8925,
- 8930, 8952,11846, 8950, 8955, 8945, 8941, 8960, 8964,11846,
- 8965, 8973, 8958, 8966, 8970, 8971, 8968, 8981, 8986, 8990,
+ 8712, 8707, 8711, 8717, 8718, 8726, 8731, 8727, 8735, 8722,
+ 8755, 8757, 8760, 8749, 8763, 8748, 8762, 8768, 8770, 8773,
+ 8779, 8752, 8790, 8783, 8756, 8789, 8780, 8792, 8781, 8785,
+ 8798, 8786, 8808, 8807, 8810, 8801, 8818, 8804, 8806, 8815,
+ 8830, 8827, 8817, 8832, 8833, 8831, 8842, 8853, 8849, 8841,
+ 8838, 8859, 8873, 8866, 8857, 8870,11868, 8860, 8869, 8881,
+ 8887, 8877, 8883, 8904, 8895, 8889, 8908, 8911, 8915, 8905,
+ 8919,11868,11868,11868, 8914, 8924,11868, 8926, 8910, 8918,
+ 8930, 8933,11868, 8938, 8941, 8939, 8942, 8943, 8955, 8947,
+ 8969, 8952, 8960, 8965, 8976,11868, 8980, 8973, 8979, 8975,
- 8975, 8985, 9003, 9002, 9014, 9018, 9000, 9001, 9016,11846,
- 9023, 9024, 9030, 9017, 9021, 9025, 9034, 9028, 9027, 9037,
- 9036, 9038, 9048, 9049, 9059, 9051, 9067, 9075, 9073, 9079,
- 9074,11846, 9063, 9084, 9069, 9089,11846, 9083, 9086, 9091,
- 9087, 9112, 9093, 9101, 9118, 9102, 9106,11846,11846, 9104,
- 9108, 9133, 9127, 9128, 9119, 9138, 9129, 9132, 9153,11846,
- 9146, 9151, 9135, 9154, 9142, 9159,11846, 9162, 9163, 9156,
- 9177, 9178, 9180, 9179, 9169, 9174, 9181, 9202, 9193, 9195,
- 11846, 9199, 9203, 9219, 9214, 9216, 9198, 9228, 9226, 9224,
- 9218, 9220, 9229, 9235,11846, 9227,11846,11846,11846, 9251,
+ 8986, 8981,11868, 8992, 9009, 8994, 8996, 8998, 9008, 9002,
+ 9000, 9013, 9010, 9011, 9028, 9029, 9027, 9046, 9047, 9042,
+ 9045, 9043,11868, 9048, 9050, 9056, 9053, 9060, 9037, 9065,
+ 9054, 9061, 9067, 9076, 9077, 9079, 9074, 9075, 9080, 9103,
+ 9089, 9082, 9112, 9110,11868, 9098, 9115, 9101, 9119,11868,
+ 9113, 9102, 9124, 9111, 9127, 9133, 9123, 9129, 9140, 9147,
+ 9135, 9138,11868,11868, 9144, 9148, 9150, 9168, 9154, 9158,
+ 9173, 9167, 9171, 9179,11868, 9172, 9174, 9182, 9193, 9190,
+ 9191,11868, 9194, 9195, 9196, 9192, 9212, 9220, 9210, 9216,
+ 9213, 9217, 9222, 9221, 9232,11868, 9234, 9242, 9254, 9244,
- 9254, 9242, 9257, 9253, 9255, 9258, 9256, 9261, 9277, 9267,
- 9269, 9272,11846, 9273,11846,11846, 9296,11846, 9297, 9291,
- 9298, 9299, 9290, 9306, 9300,11846, 9295,11846, 9314, 9316,
- 9323, 9312, 9320, 9326, 9325, 9339, 9330, 9345, 9347, 9346,
- 9337, 9341, 9279, 9356, 9357, 9363,11846, 9368, 9360, 9365,
- 9379, 9380,11846,11846, 9386, 9372, 9384, 9393, 9397, 9408,
- 9389, 9396, 9395, 9410, 9411, 9412, 9414, 9420, 9416, 9418,
- 9413, 9435, 9437, 9428, 9436, 9449,11846, 9443, 9446, 9454,
- 11846, 9440,11846, 9460, 9461, 9463, 9453, 9456, 9473, 9476,
- 9488, 9477, 9470, 9464, 9467,11846,11846, 9484, 9510, 9500,
+ 9250, 9243, 9264, 9260, 9257, 9259, 9255, 9256, 9274,11868,
+ 9269,11868,11868,11868, 9278, 9271, 9273, 9288, 9284, 9286,
+ 9291, 9300, 9301, 9303, 9308, 9294, 9305,11868, 9316,11868,
+ 11868, 9318,11868, 9324, 9311, 9328, 9326, 9321, 9335, 9338,
+ 11868, 9327,11868, 9352, 9353, 9348, 9349, 9359, 9361, 9355,
+ 9367, 9362, 9364, 9371, 9369, 9350, 9365, 9392, 9395, 9397,
+ 9389,11868, 9405, 9394, 9399, 9407, 9411,11868,11868, 9408,
+ 9401, 9398, 9415, 9417, 9423, 9432, 9438, 9431, 9422, 9442,
+ 9447, 9448, 9451, 9439, 9449, 9434, 9456, 9461, 9458, 9450,
+ 9467,11868, 9464, 9481, 9465,11868, 9484,11868, 9488, 9492,
- 11846,11846, 9495, 9497, 9498, 9501, 9507, 9512, 9504,11846,
- 9499, 9521, 9531, 9525, 9527, 9528, 9538, 9534,11846, 9541,
- 11846, 9522,11846, 9548,11846, 9558, 9560, 9539, 9576, 9577,
- 11846, 9554, 9561, 9581, 9574, 9578, 9557, 9585,11846, 9583,
- 9580,11846, 9599, 9594, 9591, 9584, 9600, 9596, 9601,11846,
- 9624, 9610, 9626, 9612,11846, 9619, 9620, 9627, 9611, 9635,
- 9644, 9622, 9648, 9650,11846, 9655, 9652, 9659, 9657,11846,
- 9665,11846, 9649, 9663, 9658, 9678, 9662,11846, 9660, 9661,
- 9679, 9693,11846, 9698, 9700, 9702, 9701, 9690, 9696,11846,
- 9710, 9695,11846, 9691, 9712, 9714, 9716, 9717, 9719, 9720,
+ 9494, 9482, 9489, 9495, 9498, 9505, 9501, 9508, 9519, 9513,
+ 11868,11868, 9520, 9522, 9524,11868,11868, 9517, 9521, 9523,
+ 9533, 9542, 9546, 9535,11868, 9547, 9549, 9560, 9540, 9550,
+ 9551, 9564, 9565,11868, 9574,11868, 9570,11868, 9568,11868,
+ 9592, 9572, 9575, 9580, 9599,11868, 9585, 9587, 9603, 9606,
+ 9613, 9609, 9602, 9593, 9616,11868, 9615, 9612,11868, 9620,
+ 9619, 9630, 9617, 9614, 9638, 9639,11868, 9649, 9648, 9651,
+ 9640,11868, 9646, 9655, 9661, 9641, 9666, 9660, 9668, 9672,
+ 9674,11868, 9679, 9680, 9687, 9685,11868, 9689,11868, 9682,
+ 9695, 9693, 9708, 9698,11868, 9697, 9703, 9706, 9712,11868,
- 9727, 9721, 9729, 9734, 9746,11846,11846, 9757, 9748, 9754,
- 9753, 73, 9768, 9742, 9744, 9747, 9749, 9771, 9775, 9784,
- 9761, 9779, 9787,11846,11846, 9789, 9785, 9792,11846, 9788,
- 9794,11846, 9776, 9802, 9803, 9791, 9795, 9807, 9793, 9813,
- 9823, 9838, 9827, 9836, 9828, 9824, 9840,11846, 9849, 9858,
- 9852, 9845, 9855, 9860, 9872, 9876, 9879, 9862, 9854, 9864,
- 9866, 9881, 9887, 9882, 9897, 9891, 9907, 9886, 9900, 9905,
- 9906,11846, 9901, 9915, 9913, 9921, 9930, 9929, 9933, 9923,
- 11846, 9931, 9937, 9945, 9928, 9946,11846, 9954, 9950, 9952,
- 9966, 9958, 9960,11846, 9956, 9970, 9975, 9976, 9973, 9965,
+ 9704, 9715, 9728, 9731, 9725, 9730,11868, 9736, 9727,11868,
+ 9721, 9746, 9748, 9747, 9744, 9751, 9753, 9742, 9750, 9761,
+ 9762, 9763,11868,11868, 9784, 9778, 9787, 9780, 73, 9797,
+ 9772, 9776, 9782, 9777, 9803, 9805, 9806, 9788, 9812, 9817,
+ 11868,11868, 9818, 9814, 9820,11868, 9823, 9822,11868, 9801,
+ 9832, 9833, 9838, 9837, 9830, 9836, 9846, 9853, 9851, 9854,
+ 9873, 9858, 9852, 9862,11868, 9891, 9892, 9869, 9874, 9889,
+ 9901, 9903, 9905, 9907, 9893, 9916, 9917, 9886, 9913, 9918,
+ 9900, 9919, 9923, 9933, 9944, 9927, 9935, 9936,11868, 9957,
+ 9958, 9963, 9946, 9959, 9962, 9965, 9949,11868, 9972, 9971,
- 9978, 9983, 9979, 9995,11846, 9991,10003, 9993,10000,10009,
- 10016,10014,10018,10023,10022,11846,10032,11846,11846,11846,
- 10024,10033,10038,11846,10034,10039,10042,10036,11846,10057,
- 10058,10059, 9996,10050,11846,11846,11846,10045,10066,10064,
- 11846,10055,10081,11846,10076,11846,10069,11846,10078,10082,
- 10091,10095,11846,10094,10093,11846,10100,10103,10098,10128,
- 11846,10101,10106,10113,10114,10115,10117,10126,10127,10131,
- 11846,11846,10152,10124,10143,10144,10157,10142,10153,10140,
- 10163,10156,10171,11846,10164,10177,11846,10178,10176,10180,
- 10192,10167,10184,10187,11846,10190,11846,10196,11846,10205,
+ 9975, 9960, 9974,11868, 9977, 9982, 9987,10000, 9994,11868,
+ 11868, 9998,11868, 9992,10011,10012,10009,10006, 9997,10017,
+ 10005,10002,10031,11868,10032,10026,10033,10036,10037,10049,
+ 10047,10043,10056,10039,11868,10042,11868,11868,11868,10060,
+ 10067,10066,11868,10071,10068,10064,10072,11868,10085,10086,
+ 10087, 9811,10088,11868,11868,11868,10076,10092,10093,11868,
+ 10084,10110,11868,10094,11868,10105,11868,10103,10113,10121,
+ 10116,11868,10129,10124,11868,10128,10123,10127,10143,11868,
+ 10142,10146,10157,10149,10140,10152,10156,10159,10176,11868,
+ 11868,10164,10162,10177,10183,10180,10174,10184,10173,10185,
- 10208,10209,10211,10197,10212,10224,10217,10226,10207,10229,
- 10220,10245,10248,10232,10234,10262,10263,10247,11846,11846,
- 10269,10251,11846,10270,10271,10279,11846,10259,11846,10267,
- 10281,11846,10272,10275,11846,10278,10284,10290,11846,11846,
- 10285,10293,10292,10309,10298,10314,10297,11846,10322,10312,
- 10308,10310,10311,10318,10339,10333,10328,10341,10336,10344,
- 11846,10338,11846,10347,10352,10359,11846,11846,10348,10325,
- 10372,10376,10365,10357,10382,10379,10378,10368,10398,10381,
- 10371,10391,10385,10397,10396,10404,10410,10417,10415,11846,
- 11846,11846,10409,10406,10412,10425,10427,10434,10438,11846,
+ 10179,10198,11868,10189,10195,11868,10209,10215,10221,10217,
+ 10208,10216,10219,11868,10210,11868,10228,11868,10225,10236,
+ 10237,10229,10242,10243,10247,10254,10263,10252,10255,10253,
+ 10270,10274,10257,10261,10285,10291,10277,11868,11868,10308,
+ 10278,11868,10300,10307,10309,11868,10290,11868,10298,10315,
+ 11868,10304,10305,11868,10317,10310,10319,11868,11868,10316,
+ 10325,10330,10333,10327,10329,10336,11868,10340,10344,10338,
+ 10343,10342,10348,10370,10375,10356,10357,10363,10379,11868,
+ 10385,11868,10367,10397,10388,11868,11868,10377,10369,10398,
+ 10407,10394,10390,10411,10402,10414,10408,10421,10400,10406,
- 10440,10431,11846,10445,10451,10455,10437,10467,10452,10463,
- 11846,10454,10453,10448,10461,10484,10472,10476,10477,11846,
- 10485,10489,10495,10497,10493,10500,10506,10508,10509,10501,
- 10494,10514,10504,10499,10528,10533,11846,11846,10530,10523,
- 11846,10540,10543,11846,11846,10526,10527,11846,10524,10534,
- 10544,10537,10557,11846,10547,10542,10560,10535,11846,10561,
- 10569,10577,10562,10571,10580,10588,10573,10585,10599,10583,
- 10598,11846,10595,10604,10594,10608,10596,10606,11846,11846,
- 10615,10616,11846,10617,10629,10618,10642,10635,10631,10646,
- 10643,11846,10630,11846,10645,10655,10644,10658,10662,10641,
+ 10412,10431,10437,10443,10429,10446,10448,10452,11868,11868,
+ 11868,10435,10434,10440,10458,10457,10465,10469,11868,10471,
+ 10450,11868,10477,10483,10481,10470,10493,10484,10491,11868,
+ 10488,10476,10480,10499,10506,10495,10503,10508,11868,10523,
+ 10524,10525,10526,10520,10532,10536,10538,10540,10533,10522,
+ 10545,10535,10528,10561,10552,11868,11868,10566,10555,11868,
+ 10568,10573,11868,11868,10558,10553,11868,10556,10564,10570,
+ 10565,10575,11868,10590,10580,10591,10582,11868,10588,10585,
+ 10599,10600,10602,10611,10615,10604,10613,10633,10612,10626,
+ 11868,10616,10641,10628,10631,10639,10640,11868,11868,10635,
- 10669,10661,10659,11846,10675,10671,10673,10677,11846,10685,
- 10668,10696,10680,10694,11846,10704,10695,10721,10720,11846,
- 10707,10716,10705,11846,11846,11846,10729,10733,10731,11846,
- 11846,11846,10722,10734,11846,10738,10745,10732,10744,11846,
- 10740,11846,11846,10753,10749,10771,10775,10757,10787,10777,
- 11846,10774,10780,10763,10765,10782,11846,10788,10791,11846,
- 10792,10798,10799,10795,10797,10800,10804,10793,10801,10807,
- 10817,10815,10809,11846,11846,10810,10834,10839,10836,10831,
- 11846,10832,10847,10848,10851,10855,10856,10852,10854,10865,
- 10863,10871,10862,10884,10900,10860,10872,10887,10880,10883,
+ 10654,11868,10663,10659,10651,10646,10657,10662,10674,10671,
+ 11868,10660,11868,10675,10677,10668,10673,10689,10687,10696,
+ 10692,10705,11868,10704,10698,10702,10707,11868,10706,10714,
+ 10725,10719,10723,11868,10731,10733,10718,10751,11868,10739,
+ 10744,10735,11868,11868,11868,10761,10764,10768,11868,11868,
+ 11868,10750,10771,11868,10773,10774,10762,10782,11868,10769,
+ 11868,11868,10785,10775, 8363,10806,10787,10817,10786,11868,
+ 10792,10798,10793,10800,10796,11868,10822,10826,11868,10833,
+ 10834,10835,10823,10832,10836,10837,10820,10821,10846,10842,
+ 10825,10852,11868,11868,10829,10848,10853,10862,10859,11868,
- 10898,10889,10904,10910,10911,10906,10909,10907,10913,11846,
- 11846,10919,10912,10921,11846,10932,10933,11846,10923,11846,
- 10943,10947,10951,10952,10954,11846,10955,10956,10957,10958,
- 10935,11846,10962,10963,11846,11846,10945,10946,10960,10979,
- 10985,11846,11846,10975,10968,10984,10981,11846,10982,10976,
- 10980,11005,10995,11002,11004,11013,11006,11017,11846,11019,
- 11020,11846,11846,11846,11025,11021,11032,11023,11037,11033,
- 11846,11050,11041,11040,11058,11052,11055,11056,11846,11064,
- 11060,11846,11846,11080,11059,11846,11087,11846,11846,11066,
- 11075,11846,11846,11846,11846,11846,11846,11846,11846,11846,
+ 10858,10875,10878,10887,10879,10889,10891,10892,10893,10873,
+ 10881,10902,10885,10930,10914,10886,10912,10905,10923,10931,
+ 10916,10933,10942,10934,10944,10945,10932,10941,11868,11868,
+ 10948,10937,10949,11868,10952,10956,11868,10959,11868,10966,
+ 10970,10980,10981,10982,11868,10984,10985,10987,10988,10963,
+ 11868,10986,10991,11868,11868,10974,10976,10998,10990,11009,
+ 11868,11868,10999,11011,11007,11008,11868,11012,11006,11021,
+ 11030,11016,11029,11032,11048,11033,11041,11868,11035,11052,
+ 11868,11868,11868,11056,11046,11060,11039,11069,11062,11868,
+ 11071,11058,11067,11073,11076,11066,11083,11868,11096,11077,
- 11089,11100,11846,11096,11097,11102,11090,11093,11107,11846,
- 11115,11108,11110,11118,11846,11126,11846,11120,11129,11137,
- 11124,11131,11846,11134,11846,11154,11127,11149,11152,11161,
- 11147,11158,11153,11164,11151,11176,11170,11167,11189,11187,
- 11196,11179,11190,11203,11185,11205,11191,11194,11220,11213,
- 11216,11218,11231,11221,11219,11846,11846,11846,11846,11228,
- 11229,11244,11243,11247,11253,11254,11256,11261,11262,11246,
- 11255,11264,11273,11280,11268,11272,11277,11276,11284,11292,
- 11298,11281,11306,11309,11310,11846,11313,11311,11317,11846,
- 11315,11303,11318,11321,11312,11328,11329,11846,11319,11324,
+ 11868,11868,11105,11091,11868,11111,11868,11868,11088,11097,
+ 11868,11868,11868,11868,11868,11868,11868,11868,11868,11115,
+ 11113,11868,11110,11118,11123,11129,11138,11133,11868,11122,
+ 11128,11134,11153,11868,11159,11868,11140,11155,11162,11149,
+ 11156,11868,11154,11868,11175,11150,11161,11174,11185,11177,
+ 11193,11184,11186,11189,11199,11183,11202,11200,11191,11218,
+ 11201,11213,11226,11214,11237,11219,11230,11234,11238,11228,
+ 11232,11246,11236,11257,11868,11868,11868,11868,11253,11249,
+ 11268,11263,11274,11271,11280,11278,11282,11286,11273,11283,
+ 11284,11288,11297,11291,11306,11296,11308,11305,11320,11326,
- 11846,11333,11314,11846,11846,11331,11349,11344,11345,11368,
- 11370,11353,11356,11354,11361,11375,11846,11378,11846,11846,
- 11846,11846,11371,11372,11846,11374,11846,11846,11382,11365,
- 11846,11390,11406,11391,11411,11846,11399,11405,11401,11395,
- 11412,11402,11418,11422,11424,11846,11846,11432,11434,11438,
- 11416,11439,11441,11846,11431,11444,11459,11446,11461,11465,
- 11467,11469,11458,11480,11846,11473,11475,11486,11476,11500,
- 11479,11491,11846,11494,11489,11503,11492,11496,11517,11507,
- 11501,11524,11529,11531,11846,11532,11846,11534,11540,11536,
- 11538,11527,11528,11537,11551,11544,11846,11846,11846,11555,
+ 11307,11328,11331,11336,11868,11337,11333,11334,11868,11340,
+ 11318,11342,11346,11335,11332,11356,11868,11355,11360,11868,
+ 11348,11358,11868,11868,11357,11373,11378,11361,11384,11394,
+ 11367,11377,11383,11387,11391,11868,11393,11868,11868,11868,
+ 11868,11397,11400,11868,11401,11868,11868,11404,11403,11868,
+ 11395,11406,11410,11428,11868,11414,11430,11419,11427,11431,
+ 11429,11442,11446,11445,11868,11868,11439,11443,11450,11456,
+ 11461,11462,11868,11471,11463,11477,11489,11484,11487,11488,
+ 11491,11467,11502,11868,11490,11501,11495,11500,11519,11505,
+ 11507,11868,11526,11512,11528,11514,11517,11543,11523,11527,
- 11553,11846,11559,11561,11564,11580,11586,11588,11589,11571,
- 11592,11594,11595,11597,11601,11598,11602,11584,11613,11612,
- 11846,11846,11606,11615,11846,11630,11632,11619,11622,11642,
- 11846,11644,11628,11629,11649,11651,11645,11846,11653,11654,
- 11656,11846,11655,11846,11846,11661,11665,11667,11673,11685,
- 11846,11846,11846,11726,11733,11740,11747,11754,11761,11768,
- 100,11775,11782,11789,11796,11803,11810,11817,11824,11831,
- 11838
+ 11545,11547,11549,11868,11555,11868,11554,11561,11566,11560,
+ 11552,11558,11567,11563,11568,11868,11868,11868,11576,11592,
+ 11868,11582,11583,11587,11598,11600,11607,11590,11594,11615,
+ 11618,11617,11627,11620,11623,11624,11619,11632,11633,11868,
+ 11868,11636,11634,11868,11643,11650,11647,11649,11661,11868,
+ 11667,11654,11659,11670,11669,11665,11868,11683,11684,11680,
+ 11868,11685,11868,11868,11686,11682,11689,11702,11703,11868,
+ 11868,11868,11748,11755,11762,11769,11776,11783,11790, 100,
+ 11797,11804,11811,11818,11825,11832,11839,11846,11853,11860
} ;
-static const flex_int16_t yy_def[4172] =
+static const flex_int16_t yy_def[4191] =
{ 0,
- 4153, 1, 4154, 4154, 4155, 4155, 4156, 4156, 4157, 4157,
- 4158, 4158, 4159, 4159, 4160, 4160, 4153, 4161, 4153, 4153,
- 4153, 4153, 4162, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4163, 4153, 4153,
- 4153, 4163, 4164, 4153, 4153, 4153, 4164, 4165, 4153, 4153,
- 4153, 4153, 4165, 4166, 4153, 4153, 4153, 4166, 4167, 4153,
- 4168, 4153, 4167, 4167, 4169, 4153, 4153, 4153, 4153, 4169,
- 4170, 4153, 4153, 4153, 4170, 4161, 4161, 4153, 4171, 4162,
- 4171, 4162, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
+ 4172, 1, 4173, 4173, 4174, 4174, 4175, 4175, 4176, 4176,
+ 4177, 4177, 4178, 4178, 4179, 4179, 4172, 4180, 4172, 4172,
+ 4172, 4172, 4181, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4182, 4172, 4172,
+ 4172, 4182, 4183, 4172, 4172, 4172, 4183, 4184, 4172, 4172,
+ 4172, 4172, 4184, 4185, 4172, 4172, 4172, 4185, 4186, 4172,
+ 4187, 4172, 4186, 4186, 4188, 4172, 4172, 4172, 4172, 4188,
+ 4189, 4172, 4172, 4172, 4189, 4180, 4180, 4172, 4190, 4181,
+ 4190, 4181, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4163, 4163, 4164, 4164, 4165, 4165,
- 4153, 4166, 4166, 4167, 4167, 4168, 4168, 4167, 4169, 4169,
- 4153, 4170, 4170, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4182, 4182, 4183, 4183, 4184, 4184,
+ 4172, 4185, 4185, 4186, 4186, 4187, 4187, 4186, 4188, 4188,
+ 4172, 4189, 4189, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4167, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4186, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4153, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4153, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4172, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4172, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
- 4161, 4161, 4161, 4161, 4161, 4153, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4167, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
+ 4180, 4180, 4180, 4180, 4180, 4172, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4186, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
- 4161, 4161, 4161, 4161, 4161, 4153, 4161, 4161, 4153, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4153, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4153, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4153, 4161, 4161, 4161, 4167,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4172, 4180, 4180, 4172,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4172, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4172, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4172, 4180, 4180, 4180,
+ 4186, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4153, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4172, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4167, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4186, 4180, 4180, 4180, 4180, 4180, 4180,
- 4161, 4161, 4161, 4161, 4161, 4153, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4153, 4161, 4153, 4153, 4161, 4161, 4153,
- 4153, 4161, 4161, 4153, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4153, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4172, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4172, 4180, 4172, 4172, 4180,
+ 4180, 4172, 4172, 4180, 4180, 4172, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4172, 4180, 4180, 4180, 4180, 4180, 4180,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4153, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4153, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4172, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4172, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4167, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4153, 4161, 4161, 4161, 4153, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4153, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4186, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4172, 4180, 4180, 4180, 4172, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4172, 4180, 4180, 4180, 4180, 4180,
- 4153, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4153, 4161, 4153, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4153, 4153, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4153, 4161, 4161, 4153,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4153, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4153, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
+ 4180, 4180, 4180, 4172, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4172, 4180, 4172, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4172,
+ 4172, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4172, 4180, 4180, 4172, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4172, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4172, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
- 4161, 4161, 4161, 4161, 4161, 4153, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4153,
- 4161, 4161, 4161, 4161, 4161, 4161, 4167, 4167, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4153, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4153, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4153, 4161, 4161, 4161,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4172,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4172, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4186, 4186, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4172, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4172, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
- 4161, 4161, 4161, 4161, 4161, 4153, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4153, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4153, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
+ 4172, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4172,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4172, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4172, 4180, 4180,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4153, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4153, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4153, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4153, 4161, 4161, 4161, 4167, 4161, 4161,
- 4161, 4161, 4161, 4161, 4153, 4161, 4161, 4161, 4161, 4161,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4172, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4172, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4172, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4172, 4180,
+ 4180, 4180, 4186, 4180, 4180, 4180, 4180, 4180, 4180, 4172,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4153, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4153,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4153, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4153, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4172, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4172, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4172, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4172, 4180, 4180, 4180, 4180, 4180, 4180,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4153, 4153, 4161, 4153, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4153,
- 4161, 4153, 4161, 4161, 4161, 4161, 4161, 4161, 4153, 4161,
- 4153, 4161, 4161, 4161, 4161, 4161, 4153, 4161, 4161, 4161,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4172, 4172, 4180,
+ 4172, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4172, 4180, 4172, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4172, 4180, 4172, 4180, 4180, 4180,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4153, 4161, 4161, 4161, 4161, 4161, 4167, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4153, 4161, 4161, 4161, 4161, 4161, 4161, 4153, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4153, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
+ 4180, 4180, 4172, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4172, 4180, 4180,
+ 4180, 4180, 4180, 4186, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4172, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4172, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4172, 4180, 4180, 4180, 4180, 4180, 4180,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4153, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4153, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4153, 4161,
- 4153, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4153, 4153,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4172, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4172, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4172, 4180, 4172, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4153, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4153, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4153, 4161, 4153, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4153, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4153, 4161, 4153, 4161, 4161, 4161, 4167, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
+ 4180, 4180, 4180, 4180, 4180, 4172, 4172, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4172, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4172,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4172, 4180, 4172,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4172, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4172, 4180, 4172,
+ 4180, 4180, 4180, 4186, 4180, 4180, 4180, 4180, 4180, 4180,
- 4161, 4153, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4153, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4153, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4153, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4153, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4172, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4172,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4172,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4172, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4172,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4153, 4153, 4161, 4161,
- 4161, 4161, 4161, 4153, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4153, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4153,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4153, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4153, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4172, 4172, 4180, 4180, 4180, 4180, 4180,
+ 4172, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4172,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4172, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4172, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4172,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4153, 4161, 4161,
- 4161, 4161, 4161, 4161, 4153, 4161, 4161, 4161, 4153, 4161,
- 4161, 4161, 4161, 4161, 4153, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4167, 4161,
- 4153, 4161, 4161, 4161, 4153, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4153,
- 4161, 4161, 4153, 4161, 4161, 4161, 4161, 4161, 4161, 4153,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4153, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4172, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4172, 4180, 4180, 4180, 4172, 4180, 4180, 4180,
+ 4180, 4180, 4172, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4186, 4180, 4172, 4180,
+ 4180, 4180, 4172, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4172, 4180, 4180,
+ 4172, 4180, 4180, 4180, 4180, 4180, 4180, 4172, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4172,
- 4161, 4161, 4161, 4153, 4153, 4161, 4153, 4161, 4161, 4161,
- 4161, 4153, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4153, 4161, 4161, 4153, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4153, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4153, 4161, 4161, 4161, 4161, 4161, 4153, 4153, 4161,
- 4153, 4161, 4161, 4161, 4153, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4153, 4161, 4161, 4161, 4161, 4161, 4161, 4153,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4172, 4172, 4180, 4172, 4180, 4180, 4180, 4180, 4172,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4172, 4180, 4180, 4172, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4172, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4172,
+ 4180, 4180, 4180, 4180, 4180, 4172, 4172, 4180, 4172, 4180,
+ 4180, 4180, 4172, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4172, 4180, 4180, 4180, 4180, 4180, 4180, 4172, 4180,
- 4161, 4153, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4153, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4153, 4161, 4161, 4161, 4161,
- 4153, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4153, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4153, 4153, 4161, 4153, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4153, 4161, 4161, 4167, 4161, 4161, 4161, 4161,
- 4153, 4161, 4161, 4153, 4161, 4153, 4161, 4161, 4161, 4161,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4172, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4172, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4172, 4180, 4180, 4180, 4180, 4172,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4172, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4172, 4172, 4180, 4172, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4172, 4180, 4180, 4186, 4180, 4180, 4180, 4180, 4172,
- 4161, 4161, 4161, 4161, 4161, 4161, 4153, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4153, 4161, 4161, 4161,
- 4161, 4153, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4153, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4153, 4161, 4153, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4153, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4153, 4161, 4161, 4161, 4161, 4161, 4153, 4161,
+ 4180, 4180, 4172, 4180, 4172, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4172, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4172, 4180, 4180, 4180, 4180,
+ 4172, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4172, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4172,
+ 4180, 4172, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4172, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4153,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4153, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4153, 4161, 4161, 4161, 4161, 4153,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4153, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4153, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4153,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4153, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
+ 4180, 4172, 4180, 4180, 4180, 4180, 4180, 4172, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4172, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4172, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4172, 4180, 4180, 4180, 4180,
+ 4172, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4172, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4172, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4172, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
- 4161, 4161, 4161, 4161, 4153, 4161, 4153, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4167, 4161, 4153, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4153, 4161, 4161,
- 4161, 4161, 4153, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4153, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4153, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4153, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4153, 4161, 4161, 4161, 4161, 4161, 4161,
+ 4180, 4180, 4172, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4172, 4180, 4172, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4186, 4180, 4172,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4172, 4180,
+ 4180, 4180, 4180, 4172, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4172, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4172, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4172, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
- 4161, 4153, 4161, 4153, 4161, 4161, 4161, 4161, 4161, 4153,
- 4161, 4161, 4161, 4161, 4161, 4153, 4153, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4153, 4153, 4161, 4153, 4161,
- 4153, 4161, 4161, 4153, 4153, 4161, 4161, 4161, 4161, 4161,
- 4153, 4161, 4161, 4161, 4153, 4161, 4153, 4161, 4161, 4161,
- 4161, 4161, 4161, 4153, 4161, 4161, 4161, 4161, 4161, 4153,
- 4161, 4161, 4161, 4161, 4161, 4161, 4153, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4153,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
+ 4180, 4180, 4180, 4180, 4172, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4172, 4180, 4172, 4180, 4180, 4180, 4180, 4180,
+ 4172, 4180, 4180, 4180, 4180, 4180, 4172, 4172, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4172, 4172, 4180, 4172,
+ 4180, 4172, 4180, 4180, 4172, 4172, 4180, 4180, 4180, 4180,
+ 4180, 4172, 4180, 4180, 4180, 4180, 4180, 4172, 4180, 4172,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4172, 4180, 4180, 4180,
+ 4180, 4180, 4172, 4180, 4180, 4180, 4180, 4180, 4180, 4172,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4172, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4167, 4161,
- 4161, 4161, 4161, 4153, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4153, 4153,
- 4153, 4161, 4161, 4153, 4161, 4161, 4161, 4161, 4161, 4153,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4153, 4161, 4161, 4161, 4161, 4161, 4161, 4153,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4186, 4180, 4180, 4180, 4180, 4172, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4172, 4172, 4172, 4180, 4180, 4172, 4180, 4180, 4180,
+ 4180, 4180, 4172, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4172, 4180, 4180, 4180, 4180,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4153,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4153, 4161, 4161, 4161, 4161, 4153, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4153, 4153, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4153,
- 4161, 4161, 4161, 4161, 4161, 4161, 4153, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4153, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4153, 4161, 4153, 4153, 4153, 4161,
+ 4180, 4180, 4172, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4172, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4172, 4180, 4180, 4180, 4180, 4172,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4172, 4172, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4172, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4172, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4172, 4180, 4180, 4180, 4180,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4153, 4161, 4153, 4153, 4161, 4153, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4153, 4161, 4153, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4167, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4153, 4161, 4161, 4161,
- 4161, 4161, 4153, 4153, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4153, 4161, 4161, 4161,
- 4153, 4161, 4153, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4153, 4153, 4161, 4161, 4161,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4172,
+ 4180, 4172, 4172, 4172, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4172, 4180, 4172,
+ 4172, 4180, 4172, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4172, 4180, 4172, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4186, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4172, 4180, 4180, 4180, 4180, 4180, 4172, 4172, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4172, 4180, 4180, 4180, 4172, 4180, 4172, 4180, 4180,
- 4153, 4153, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4153,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4153, 4161,
- 4153, 4161, 4153, 4161, 4153, 4161, 4161, 4161, 4161, 4161,
- 4153, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4153, 4161,
- 4161, 4153, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4153,
- 4161, 4161, 4161, 4161, 4153, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4153, 4161, 4161, 4161, 4161, 4153,
- 4161, 4153, 4161, 4161, 4161, 4161, 4161, 4153, 4161, 4161,
- 4161, 4161, 4153, 4161, 4161, 4161, 4161, 4161, 4161, 4153,
- 4161, 4161, 4153, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4172, 4172, 4180, 4180, 4180, 4172, 4172, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4172, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4172, 4180, 4172, 4180, 4172, 4180, 4172,
+ 4180, 4180, 4180, 4180, 4180, 4172, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4172, 4180, 4180, 4172, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4172, 4180, 4180, 4180,
+ 4180, 4172, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4172, 4180, 4180, 4180, 4180, 4172, 4180, 4172, 4180,
+ 4180, 4180, 4180, 4180, 4172, 4180, 4180, 4180, 4180, 4172,
- 4161, 4161, 4161, 4161, 4161, 4153, 4153, 4161, 4161, 4161,
- 4161, 4167, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4153, 4153, 4161, 4161, 4161, 4153, 4161,
- 4161, 4153, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4153, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4153, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4153, 4161, 4161, 4161, 4161, 4161, 4153, 4161, 4161, 4161,
- 4161, 4161, 4161, 4153, 4161, 4161, 4161, 4161, 4161, 4161,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4172, 4180, 4180, 4172,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4172, 4172, 4180, 4180, 4180, 4180, 4186, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4172, 4172, 4180, 4180, 4180, 4172, 4180, 4180, 4172, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4172, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4172, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4172, 4180, 4180,
- 4161, 4161, 4161, 4161, 4153, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4153, 4161, 4153, 4153, 4153,
- 4161, 4161, 4161, 4153, 4161, 4161, 4161, 4161, 4153, 4161,
- 4161, 4161, 4161, 4161, 4153, 4153, 4153, 4161, 4161, 4161,
- 4153, 4161, 4161, 4153, 4161, 4153, 4161, 4153, 4161, 4161,
- 4161, 4161, 4153, 4161, 4161, 4153, 4161, 4161, 4161, 4161,
- 4153, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4153, 4153, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4153, 4161, 4161, 4153, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4153, 4161, 4153, 4161, 4153, 4161,
+ 4180, 4180, 4180, 4172, 4180, 4180, 4180, 4180, 4180, 4172,
+ 4172, 4180, 4172, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4172, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4172, 4180, 4172, 4172, 4172, 4180,
+ 4180, 4180, 4172, 4180, 4180, 4180, 4180, 4172, 4180, 4180,
+ 4180, 4180, 4180, 4172, 4172, 4172, 4180, 4180, 4180, 4172,
+ 4180, 4180, 4172, 4180, 4172, 4180, 4172, 4180, 4180, 4180,
+ 4180, 4172, 4180, 4180, 4172, 4180, 4180, 4180, 4180, 4172,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4172,
+ 4172, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4153, 4153,
- 4161, 4161, 4153, 4161, 4161, 4161, 4153, 4161, 4153, 4161,
- 4161, 4153, 4161, 4161, 4153, 4161, 4161, 4161, 4153, 4153,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4153, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4153, 4161, 4153, 4161, 4161, 4161, 4153, 4153, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4153,
- 4153, 4153, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4153,
+ 4180, 4180, 4172, 4180, 4180, 4172, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4172, 4180, 4172, 4180, 4172, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4172, 4172, 4180,
+ 4180, 4172, 4180, 4180, 4180, 4172, 4180, 4172, 4180, 4180,
+ 4172, 4180, 4180, 4172, 4180, 4180, 4180, 4172, 4172, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4172, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4172,
+ 4180, 4172, 4180, 4180, 4180, 4172, 4172, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
- 4161, 4161, 4153, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4153, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4153,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4153, 4153, 4161, 4161,
- 4153, 4161, 4161, 4153, 4153, 4161, 4161, 4153, 4161, 4161,
- 4161, 4161, 4161, 4153, 4161, 4161, 4161, 4161, 4153, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4153, 4161, 4161, 4161, 4161, 4161, 4161, 4153, 4153,
- 4161, 4161, 4153, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4153, 4161, 4153, 4161, 4161, 4161, 4161, 4161, 4161,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4172, 4172,
+ 4172, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4172, 4180,
+ 4180, 4172, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4172,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4172, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4172, 4172, 4180, 4180, 4172,
+ 4180, 4180, 4172, 4172, 4180, 4180, 4172, 4180, 4180, 4180,
+ 4180, 4180, 4172, 4180, 4180, 4180, 4180, 4172, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4172, 4180, 4180, 4180, 4180, 4180, 4180, 4172, 4172, 4180,
- 4161, 4161, 4161, 4153, 4161, 4161, 4161, 4161, 4153, 4161,
- 4161, 4161, 4161, 4161, 4153, 4161, 4161, 4161, 4161, 4153,
- 4161, 4161, 4161, 4153, 4153, 4153, 4161, 4161, 4161, 4153,
- 4153, 4153, 4161, 4161, 4153, 4161, 4161, 4161, 4161, 4153,
- 4161, 4153, 4153, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4153, 4161, 4161, 4161, 4161, 4161, 4153, 4161, 4161, 4153,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4153, 4153, 4161, 4161, 4161, 4161, 4161,
- 4153, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
+ 4180, 4172, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4172, 4180, 4172, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4172, 4180, 4180, 4180, 4180, 4172, 4180, 4180,
+ 4180, 4180, 4180, 4172, 4180, 4180, 4180, 4180, 4172, 4180,
+ 4180, 4180, 4172, 4172, 4172, 4180, 4180, 4180, 4172, 4172,
+ 4172, 4180, 4180, 4172, 4180, 4180, 4180, 4180, 4172, 4180,
+ 4172, 4172, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4172,
+ 4180, 4180, 4180, 4180, 4180, 4172, 4180, 4180, 4172, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4172, 4172, 4180, 4180, 4180, 4180, 4180, 4172,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4153,
- 4153, 4161, 4161, 4161, 4153, 4161, 4161, 4153, 4161, 4153,
- 4161, 4161, 4161, 4161, 4161, 4153, 4161, 4161, 4161, 4161,
- 4161, 4153, 4161, 4161, 4153, 4153, 4161, 4161, 4161, 4161,
- 4161, 4153, 4153, 4161, 4161, 4161, 4161, 4153, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4153, 4161,
- 4161, 4153, 4153, 4153, 4161, 4161, 4161, 4161, 4161, 4161,
- 4153, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4153, 4161,
- 4161, 4153, 4153, 4161, 4161, 4153, 4161, 4153, 4153, 4161,
- 4161, 4153, 4153, 4153, 4153, 4153, 4153, 4153, 4153, 4153,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4172, 4172,
+ 4180, 4180, 4180, 4172, 4180, 4180, 4172, 4180, 4172, 4180,
+ 4180, 4180, 4180, 4180, 4172, 4180, 4180, 4180, 4180, 4180,
+ 4172, 4180, 4180, 4172, 4172, 4180, 4180, 4180, 4180, 4180,
+ 4172, 4172, 4180, 4180, 4180, 4180, 4172, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4172, 4180, 4180,
+ 4172, 4172, 4172, 4180, 4180, 4180, 4180, 4180, 4180, 4172,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4172, 4180, 4180,
- 4161, 4161, 4153, 4161, 4161, 4161, 4161, 4161, 4161, 4153,
- 4161, 4161, 4161, 4161, 4153, 4161, 4153, 4161, 4161, 4161,
- 4161, 4161, 4153, 4161, 4153, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4153, 4153, 4153, 4153, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4153, 4161, 4161, 4161, 4153,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4153, 4161, 4161,
+ 4172, 4172, 4180, 4180, 4172, 4180, 4172, 4172, 4180, 4180,
+ 4172, 4172, 4172, 4172, 4172, 4172, 4172, 4172, 4172, 4180,
+ 4180, 4172, 4180, 4180, 4180, 4180, 4180, 4180, 4172, 4180,
+ 4180, 4180, 4180, 4172, 4180, 4172, 4180, 4180, 4180, 4180,
+ 4180, 4172, 4180, 4172, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4172, 4172, 4172, 4172, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
- 4153, 4161, 4161, 4153, 4153, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4153, 4161, 4153, 4153,
- 4153, 4153, 4161, 4161, 4153, 4161, 4153, 4153, 4161, 4161,
- 4153, 4161, 4161, 4161, 4161, 4153, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4153, 4153, 4161, 4161, 4161,
- 4161, 4161, 4161, 4153, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4153, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4153, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4153, 4161, 4153, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4153, 4153, 4153, 4161,
+ 4180, 4180, 4180, 4180, 4172, 4180, 4180, 4180, 4172, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4172, 4180, 4180, 4172,
+ 4180, 4180, 4172, 4172, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4172, 4180, 4172, 4172, 4172,
+ 4172, 4180, 4180, 4172, 4180, 4172, 4172, 4180, 4180, 4172,
+ 4180, 4180, 4180, 4180, 4172, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4172, 4172, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4172, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4172, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4172, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
- 4161, 4153, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
- 4153, 4153, 4161, 4161, 4153, 4161, 4161, 4161, 4161, 4161,
- 4153, 4161, 4161, 4161, 4161, 4161, 4161, 4153, 4161, 4161,
- 4161, 4153, 4161, 4153, 4153, 4161, 4161, 4161, 4161, 4161,
- 4153, 4153, 0, 4153, 4153, 4153, 4153, 4153, 4153, 4153,
- 4153, 4153, 4153, 4153, 4153, 4153, 4153, 4153, 4153, 4153,
- 4153
+ 4180, 4180, 4180, 4172, 4180, 4172, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4172, 4172, 4172, 4180, 4180,
+ 4172, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4172,
+ 4172, 4180, 4180, 4172, 4180, 4180, 4180, 4180, 4180, 4172,
+ 4180, 4180, 4180, 4180, 4180, 4180, 4172, 4180, 4180, 4180,
+ 4172, 4180, 4172, 4172, 4180, 4180, 4180, 4180, 4180, 4172,
+ 4172, 0, 4172, 4172, 4172, 4172, 4172, 4172, 4172, 4172,
+ 4172, 4172, 4172, 4172, 4172, 4172, 4172, 4172, 4172, 4172
} ;
-static const flex_int16_t yy_nxt[11913] =
+static const flex_int16_t yy_nxt[11935] =
{ 0,
18, 19, 20, 21, 22, 23, 22, 18, 18, 18,
18, 18, 22, 24, 25, 26, 27, 28, 29, 18,
@@ -1812,7 +1816,7 @@ static const flex_int16_t yy_nxt[11913] =
87, 68, 19, 20, 21, 70, 71, 72, 19, 20,
21, 70, 71, 72, 82, 83, 84, 124, 110, 182,
182, 80, 73, 164, 175, 87, 99, 80, 73, 87,
- 440, 91, 85, 91, 91, 87, 91, 1477, 111, 88,
+ 440, 91, 85, 91, 91, 87, 91, 1482, 111, 88,
74, 87, 91, 89, 124, 110, 74, 165, 165, 73,
164, 85, 172, 172, 167, 73, 114, 167, 112, 87,
163, 183, 133, 178, 115, 111, 100, 87, 87, 92,
@@ -1841,14 +1845,14 @@ static const flex_int16_t yy_nxt[11913] =
91, 274, 203, 181, 144, 145, 179, 146, 179, 179,
87, 179, 192, 87, 213, 202, 87, 142, 217, 180,
- 292, 143, 1307, 87, 87, 86, 309, 86, 86, 203,
+ 292, 143, 1311, 87, 87, 86, 309, 86, 86, 203,
86, 144, 145, 177, 146, 147, 86, 91, 148, 91,
91, 213, 91, 195, 196, 149, 197, 292, 91, 150,
151, 204, 198, 87, 199, 214, 87, 87, 87, 200,
201, 175, 147, 173, 87, 148, 226, 87, 87, 205,
195, 196, 149, 197, 87, 92, 150, 151, 218, 198,
207, 199, 214, 87, 210, 211, 200, 201, 216, 208,
- 223, 87, 212, 226, 171, 87, 205, 235, 507, 225,
+ 223, 87, 212, 226, 171, 87, 205, 235, 508, 225,
87, 219, 87, 170, 220, 218, 349, 207, 168, 229,
227, 210, 211, 230, 224, 216, 208, 221, 222, 212,
@@ -1857,1258 +1861,1260 @@ static const flex_int16_t yy_nxt[11913] =
230, 224, 87, 87, 221, 222, 237, 240, 87, 241,
239, 242, 243, 238, 245, 244, 231, 228, 87, 246,
87, 232, 234, 87, 87, 87, 233, 252, 87, 251,
- 166, 87, 4153, 237, 240, 87, 241, 87, 242, 243,
+ 166, 87, 4172, 237, 240, 87, 241, 87, 242, 243,
238, 245, 244, 247, 250, 87, 246, 248, 257, 254,
253, 87, 353, 249, 252, 87, 251, 87, 255, 259,
87, 258, 87, 266, 256, 87, 355, 87, 260, 359,
247, 250, 87, 263, 248, 257, 254, 253, 87, 261,
249, 264, 267, 262, 87, 255, 259, 87, 258, 265,
- 266, 256, 87, 272, 270, 260, 275, 4153, 87, 268,
+ 266, 256, 87, 272, 270, 260, 275, 4172, 87, 268,
263, 87, 269, 273, 87, 271, 261, 87, 87, 267,
262, 87, 279, 87, 87, 276, 265, 284, 281, 280,
- 272, 270, 282, 275, 277, 283, 268, 87, 4153, 269,
- 273, 87, 271, 87, 4153, 87, 278, 285, 4153, 279,
- 87, 87, 276, 4153, 284, 281, 280, 87, 286, 282,
- 87, 277, 283, 169, 4153, 169, 169, 174, 169, 174,
+ 272, 270, 282, 275, 277, 283, 268, 87, 4172, 269,
+ 273, 87, 271, 87, 4172, 87, 278, 285, 4172, 279,
+ 87, 87, 276, 4172, 284, 281, 280, 87, 286, 282,
+ 87, 277, 283, 169, 4172, 169, 169, 174, 169, 174,
174, 287, 174, 278, 285, 91, 288, 91, 91, 290,
91, 179, 175, 179, 179, 286, 179, 291, 87, 295,
- 289, 296, 297, 87, 300, 298, 293, 4153, 287, 87,
+ 289, 296, 297, 87, 300, 298, 293, 4172, 287, 87,
87, 87, 299, 294, 301, 87, 290, 87, 87, 302,
- 87, 4153, 306, 177, 291, 87, 295, 289, 296, 297,
+ 87, 4172, 306, 177, 291, 87, 295, 289, 296, 297,
87, 300, 298, 293, 87, 319, 303, 87, 320, 299,
294, 301, 304, 305, 87, 87, 302, 310, 307, 306,
308, 311, 321, 87, 324, 312, 323, 322, 325, 327,
- 328, 87, 319, 326, 87, 320, 87, 1053, 87, 304,
- 305, 330, 313, 828, 87, 307, 87, 308, 87, 87,
+ 328, 87, 319, 326, 87, 320, 87, 1056, 87, 304,
+ 305, 330, 313, 830, 87, 307, 87, 308, 87, 87,
- 87, 324, 312, 323, 87, 325, 327, 331, 329, 4153,
+ 87, 324, 312, 323, 87, 325, 327, 331, 329, 4172,
326, 332, 87, 333, 87, 334, 87, 362, 330, 313,
- 314, 87, 87, 337, 338, 315, 87, 87, 4153, 87,
+ 314, 87, 87, 337, 338, 315, 87, 87, 4172, 87,
316, 339, 87, 345, 331, 329, 317, 318, 332, 346,
- 333, 335, 334, 87, 336, 4153, 87, 314, 87, 87,
+ 333, 335, 334, 87, 336, 4172, 87, 314, 87, 87,
337, 338, 315, 87, 347, 87, 87, 316, 339, 348,
- 345, 87, 4153, 317, 318, 351, 346, 350, 335, 356,
- 87, 336, 340, 354, 364, 341, 352, 342, 358, 4153,
- 87, 347, 367, 357, 87, 360, 348, 4153, 363, 343,
- 4153, 344, 4153, 87, 350, 368, 369, 87, 87, 340,
+ 345, 87, 4172, 317, 318, 351, 346, 350, 335, 356,
+ 87, 336, 340, 354, 364, 341, 352, 342, 358, 4172,
+ 87, 347, 367, 357, 87, 360, 348, 4172, 363, 343,
+ 4172, 344, 4172, 87, 350, 368, 369, 87, 87, 340,
354, 87, 341, 352, 342, 358, 87, 87, 365, 87,
357, 87, 360, 366, 87, 363, 343, 87, 344, 370,
- 371, 374, 368, 369, 87, 372, 87, 377, 376, 4153,
- 375, 378, 379, 87, 373, 365, 382, 4153, 389, 87,
+ 371, 374, 368, 369, 87, 372, 87, 377, 376, 4172,
+ 375, 378, 379, 87, 373, 365, 382, 4172, 389, 87,
366, 87, 87, 87, 380, 385, 370, 371, 374, 87,
87, 87, 372, 87, 377, 376, 87, 375, 378, 379,
383, 373, 381, 382, 387, 384, 386, 87, 392, 388,
87, 380, 385, 87, 87, 87, 390, 391, 393, 394,
- 395, 398, 397, 4153, 87, 87, 87, 87, 396, 381,
+ 395, 398, 397, 4172, 87, 87, 87, 87, 396, 381,
87, 387, 87, 386, 399, 392, 388, 400, 402, 407,
406, 87, 87, 390, 391, 403, 394, 395, 398, 397,
- 87, 401, 404, 87, 405, 396, 409, 410, 4153, 87,
- 87, 4153, 408, 414, 412, 87, 87, 87, 87, 87,
+ 87, 401, 404, 87, 405, 396, 409, 410, 4172, 87,
+ 87, 4172, 408, 414, 412, 87, 87, 87, 87, 87,
87, 87, 403, 422, 411, 419, 413, 415, 401, 404,
87, 405, 87, 87, 410, 87, 416, 417, 87, 408,
414, 412, 175, 418, 87, 420, 421, 87, 423, 87,
87, 411, 419, 413, 415, 87, 87, 424, 426, 425,
- 429, 4153, 427, 416, 417, 428, 434, 430, 87, 87,
- 418, 4153, 420, 421, 87, 431, 432, 435, 87, 87,
+ 429, 4172, 427, 416, 417, 428, 434, 430, 87, 87,
+ 418, 4172, 420, 421, 87, 431, 432, 435, 87, 87,
87, 87, 436, 439, 424, 87, 425, 429, 87, 427,
87, 433, 428, 87, 430, 87, 437, 441, 87, 438,
452, 87, 431, 432, 435, 87, 87, 87, 442, 436,
- 439, 443, 447, 4153, 445, 4153, 444, 454, 433, 448,
- 4153, 456, 87, 437, 441, 87, 438, 87, 446, 449,
+ 439, 443, 447, 4172, 445, 4172, 444, 454, 433, 448,
+ 4172, 456, 87, 437, 441, 87, 438, 87, 446, 449,
450, 461, 87, 459, 87, 442, 87, 87, 443, 447,
87, 445, 87, 444, 451, 453, 448, 87, 87, 87,
455, 457, 87, 87, 460, 446, 449, 450, 87, 87,
- 459, 462, 464, 87, 465, 467, 4153, 4153, 458, 87,
+ 459, 462, 464, 87, 465, 467, 4172, 4172, 458, 87,
468, 451, 453, 87, 87, 87, 87, 455, 457, 87,
- 466, 460, 469, 478, 4153, 463, 87, 471, 4153, 464,
+ 466, 460, 469, 478, 4172, 463, 87, 471, 4172, 464,
470, 465, 467, 87, 472, 458, 87, 468, 474, 87,
- 4153, 479, 87, 480, 473, 476, 87, 466, 525, 469,
+ 4172, 479, 87, 480, 473, 476, 87, 466, 526, 469,
87, 475, 463, 87, 471, 87, 87, 470, 481, 482,
- 87, 472, 477, 4153, 87, 474, 490, 491, 479, 87,
- 492, 473, 476, 501, 87, 87, 87, 4153, 475, 530,
- 87, 502, 87, 500, 87, 481, 482, 87, 508, 477,
- 483, 509, 87, 490, 491, 484, 87, 492, 485, 4153,
- 501, 503, 504, 486, 487, 488, 489, 87, 502, 505,
- 500, 87, 87, 87, 506, 508, 4153, 483, 87, 518,
- 4153, 4153, 484, 4153, 516, 485, 87, 512, 503, 504,
+ 87, 472, 477, 4172, 87, 474, 490, 491, 479, 87,
+ 492, 473, 476, 502, 87, 87, 87, 4172, 475, 531,
+ 87, 503, 87, 501, 87, 481, 482, 87, 509, 477,
+ 483, 510, 87, 490, 491, 484, 87, 492, 485, 4172,
+ 502, 504, 505, 486, 487, 488, 489, 87, 503, 506,
+ 501, 87, 87, 87, 507, 509, 4172, 483, 87, 519,
+ 4172, 4172, 484, 4172, 4172, 485, 87, 513, 504, 505,
- 486, 487, 488, 489, 493, 517, 494, 510, 495, 87,
- 511, 87, 87, 513, 4153, 520, 87, 87, 496, 497,
- 498, 516, 499, 87, 512, 87, 514, 515, 87, 519,
- 524, 493, 517, 494, 510, 495, 87, 511, 521, 4153,
- 513, 87, 520, 523, 526, 496, 497, 498, 522, 499,
- 87, 87, 87, 514, 515, 87, 519, 524, 527, 87,
- 528, 529, 535, 537, 87, 521, 87, 87, 4153, 87,
- 523, 526, 531, 87, 532, 522, 549, 4153, 536, 4153,
- 538, 4153, 541, 533, 542, 527, 539, 528, 529, 535,
- 534, 543, 540, 544, 87, 87, 550, 551, 87, 531,
+ 486, 487, 488, 489, 493, 517, 494, 511, 495, 87,
+ 512, 87, 518, 514, 4172, 521, 87, 87, 496, 497,
+ 498, 499, 500, 87, 513, 87, 515, 516, 87, 520,
+ 87, 493, 517, 494, 511, 495, 87, 512, 522, 518,
+ 514, 87, 521, 524, 525, 496, 497, 498, 499, 500,
+ 523, 87, 87, 515, 516, 87, 520, 527, 4172, 528,
+ 538, 529, 530, 537, 87, 522, 87, 87, 87, 539,
+ 524, 525, 87, 536, 87, 545, 532, 523, 533, 553,
+ 87, 552, 551, 550, 527, 87, 528, 534, 529, 530,
+ 537, 87, 87, 540, 535, 542, 539, 543, 544, 541,
- 87, 532, 87, 549, 87, 536, 87, 538, 87, 541,
- 533, 542, 552, 539, 545, 553, 567, 534, 543, 540,
- 571, 566, 87, 550, 569, 87, 585, 546, 87, 87,
- 547, 586, 548, 87, 568, 4153, 87, 87, 87, 87,
- 87, 545, 553, 567, 570, 4153, 587, 571, 566, 572,
- 4153, 569, 4153, 4153, 546, 583, 87, 547, 87, 548,
- 554, 568, 555, 584, 4153, 573, 574, 87, 556, 590,
- 4153, 570, 557, 87, 596, 175, 572, 558, 87, 87,
- 559, 87, 583, 87, 588, 592, 87, 554, 593, 555,
- 584, 589, 573, 574, 591, 556, 590, 87, 659, 557,
+ 536, 87, 87, 532, 592, 533, 87, 87, 87, 551,
+ 550, 87, 87, 87, 534, 87, 546, 554, 568, 87,
+ 540, 535, 542, 567, 543, 544, 541, 4172, 597, 547,
+ 87, 592, 548, 573, 549, 4172, 569, 87, 572, 87,
+ 87, 570, 87, 546, 554, 568, 571, 4172, 588, 574,
+ 567, 87, 4172, 87, 575, 597, 547, 87, 87, 548,
+ 573, 549, 555, 569, 556, 572, 584, 87, 570, 585,
+ 557, 593, 586, 571, 558, 596, 574, 587, 87, 559,
+ 87, 575, 560, 87, 591, 4172, 4172, 87, 87, 555,
+ 175, 556, 589, 584, 595, 600, 585, 557, 593, 590,
- 595, 596, 87, 4153, 558, 87, 87, 559, 560, 594,
- 561, 588, 592, 597, 87, 593, 599, 87, 589, 87,
- 598, 591, 610, 562, 600, 659, 563, 87, 564, 87,
- 565, 617, 87, 601, 87, 560, 594, 561, 604, 605,
- 597, 4153, 4153, 599, 4153, 87, 87, 598, 4153, 606,
- 562, 607, 608, 563, 87, 564, 87, 565, 575, 576,
- 601, 87, 602, 87, 611, 604, 605, 4153, 577, 578,
- 579, 580, 581, 87, 87, 582, 606, 613, 607, 608,
- 603, 609, 4153, 87, 87, 575, 576, 612, 615, 602,
- 87, 611, 87, 87, 87, 577, 578, 579, 580, 581,
+ 594, 558, 87, 611, 87, 4172, 559, 87, 87, 560,
+ 561, 591, 562, 87, 598, 87, 599, 605, 87, 589,
+ 603, 595, 600, 87, 87, 563, 590, 594, 564, 4172,
+ 565, 601, 566, 4172, 4172, 87, 87, 561, 604, 562,
+ 602, 598, 87, 599, 605, 4172, 4172, 603, 4172, 606,
+ 4172, 4172, 563, 608, 607, 564, 87, 565, 4172, 566,
+ 576, 577, 609, 87, 4172, 604, 87, 602, 612, 4172,
+ 578, 579, 580, 581, 582, 87, 606, 583, 610, 613,
+ 608, 607, 615, 616, 87, 87, 87, 576, 577, 609,
+ 87, 87, 614, 617, 87, 612, 87, 578, 579, 580,
- 614, 87, 582, 616, 613, 619, 620, 603, 609, 87,
- 625, 618, 87, 87, 612, 615, 87, 621, 622, 4153,
- 628, 87, 623, 626, 624, 633, 627, 614, 87, 87,
- 616, 87, 619, 620, 87, 629, 4153, 625, 618, 87,
- 630, 631, 4153, 4153, 636, 87, 87, 628, 87, 623,
- 626, 624, 633, 627, 634, 637, 4153, 87, 632, 4153,
- 638, 4153, 629, 87, 639, 87, 641, 630, 631, 635,
- 87, 636, 87, 652, 640, 87, 653, 87, 657, 87,
- 671, 634, 637, 87, 654, 632, 655, 638, 642, 643,
- 656, 639, 658, 641, 87, 660, 635, 661, 87, 4153,
+ 581, 582, 87, 618, 583, 610, 613, 87, 4172, 615,
+ 616, 619, 620, 87, 621, 622, 623, 4172, 624, 614,
+ 617, 625, 626, 87, 630, 87, 627, 628, 87, 634,
+ 629, 4172, 637, 87, 4172, 87, 87, 87, 619, 620,
+ 87, 621, 631, 632, 87, 624, 87, 653, 625, 626,
+ 635, 630, 87, 627, 628, 87, 634, 629, 87, 637,
+ 633, 640, 639, 638, 655, 636, 641, 87, 642, 631,
+ 632, 87, 87, 87, 87, 87, 656, 635, 667, 87,
+ 654, 87, 643, 644, 657, 658, 87, 633, 640, 639,
+ 638, 655, 636, 641, 645, 642, 646, 4172, 87, 87,
- 644, 640, 645, 653, 662, 87, 87, 87, 87, 87,
- 87, 654, 87, 655, 664, 642, 643, 656, 87, 658,
- 665, 87, 660, 666, 661, 4153, 87, 644, 663, 645,
- 646, 662, 668, 673, 87, 87, 667, 669, 647, 648,
- 87, 664, 649, 650, 87, 670, 651, 665, 4153, 674,
- 87, 87, 87, 672, 87, 663, 87, 646, 4153, 668,
- 673, 87, 675, 667, 669, 647, 648, 681, 87, 649,
- 650, 87, 670, 651, 676, 87, 674, 677, 4153, 678,
- 672, 682, 87, 683, 687, 684, 679, 680, 87, 675,
- 87, 685, 87, 4153, 681, 4153, 87, 688, 689, 87,
+ 659, 87, 87, 656, 660, 87, 87, 654, 4172, 643,
+ 644, 657, 661, 4172, 662, 4172, 666, 87, 665, 4172,
+ 663, 645, 664, 646, 647, 87, 668, 659, 669, 87,
+ 87, 660, 648, 649, 87, 87, 650, 651, 87, 661,
+ 652, 662, 87, 666, 87, 665, 87, 663, 670, 664,
+ 87, 647, 671, 668, 672, 669, 675, 4172, 673, 648,
+ 649, 674, 87, 650, 651, 676, 683, 652, 87, 677,
+ 4172, 87, 678, 87, 679, 670, 4172, 4172, 87, 671,
+ 87, 680, 681, 675, 87, 673, 87, 682, 674, 684,
+ 685, 87, 676, 683, 87, 686, 677, 687, 87, 678,
- 87, 676, 686, 690, 677, 87, 678, 691, 682, 692,
- 683, 687, 684, 679, 680, 87, 693, 87, 685, 87,
- 87, 694, 87, 695, 688, 689, 87, 87, 696, 686,
- 690, 697, 698, 87, 691, 87, 692, 700, 87, 699,
- 701, 703, 702, 693, 709, 87, 87, 87, 694, 87,
- 695, 704, 712, 87, 705, 696, 87, 706, 87, 698,
- 87, 87, 711, 87, 700, 87, 699, 701, 703, 702,
- 710, 709, 87, 87, 707, 713, 708, 87, 704, 712,
- 4153, 705, 714, 87, 706, 715, 716, 717, 718, 719,
- 725, 4153, 726, 87, 87, 720, 722, 710, 721, 724,
+ 87, 679, 87, 689, 688, 87, 690, 695, 680, 681,
+ 87, 691, 87, 692, 682, 696, 684, 685, 694, 87,
+ 87, 87, 686, 697, 687, 87, 693, 698, 87, 87,
+ 689, 688, 87, 690, 695, 699, 87, 700, 691, 702,
+ 692, 87, 696, 704, 87, 694, 701, 706, 707, 87,
+ 697, 703, 87, 693, 698, 87, 705, 87, 87, 713,
+ 4172, 87, 87, 87, 700, 708, 702, 87, 715, 87,
+ 704, 714, 711, 701, 706, 707, 718, 709, 703, 710,
+ 87, 87, 712, 705, 87, 716, 87, 719, 717, 87,
+ 4172, 87, 708, 4172, 87, 720, 87, 721, 714, 711,
- 4153, 707, 87, 708, 87, 723, 728, 87, 87, 714,
- 87, 87, 715, 716, 87, 718, 719, 725, 87, 87,
- 87, 727, 720, 722, 87, 721, 724, 729, 87, 731,
- 87, 732, 723, 728, 733, 734, 736, 735, 4153, 87,
- 738, 87, 87, 737, 739, 4153, 87, 741, 727, 4153,
- 730, 4153, 87, 87, 788, 87, 731, 740, 732, 87,
- 87, 733, 734, 736, 735, 87, 87, 738, 87, 742,
- 737, 739, 751, 753, 741, 87, 752, 730, 754, 87,
- 755, 788, 87, 87, 740, 87, 756, 757, 87, 4153,
- 4153, 4153, 804, 767, 758, 87, 742, 743, 87, 751,
+ 87, 724, 722, 718, 709, 723, 710, 725, 727, 712,
+ 87, 726, 716, 728, 4172, 717, 730, 87, 731, 87,
+ 87, 87, 720, 87, 721, 87, 87, 734, 724, 722,
+ 729, 733, 723, 736, 725, 727, 737, 87, 726, 87,
+ 87, 732, 735, 730, 87, 87, 738, 87, 739, 87,
+ 87, 742, 740, 743, 734, 741, 87, 729, 733, 87,
+ 736, 87, 87, 737, 87, 753, 756, 744, 732, 735,
+ 87, 755, 87, 738, 760, 739, 759, 87, 742, 740,
+ 743, 87, 741, 87, 754, 758, 4172, 87, 757, 87,
+ 87, 4172, 753, 756, 744, 745, 87, 87, 755, 769,
- 753, 87, 744, 752, 745, 754, 761, 755, 87, 762,
- 746, 87, 747, 756, 757, 748, 749, 87, 87, 804,
- 767, 758, 750, 87, 743, 763, 759, 772, 770, 744,
- 760, 745, 775, 761, 768, 765, 762, 746, 766, 747,
- 87, 4153, 748, 749, 769, 764, 87, 87, 87, 750,
- 771, 87, 763, 759, 772, 770, 773, 760, 87, 775,
- 87, 87, 765, 774, 778, 766, 87, 776, 780, 87,
- 87, 769, 764, 777, 779, 784, 87, 771, 781, 782,
- 87, 783, 4153, 773, 786, 785, 87, 87, 4153, 87,
- 774, 778, 87, 791, 776, 780, 790, 87, 787, 87,
+ 746, 760, 747, 759, 4172, 4172, 763, 87, 748, 764,
+ 749, 754, 758, 750, 751, 757, 4172, 87, 87, 4172,
+ 752, 87, 745, 765, 761, 4172, 769, 746, 762, 747,
+ 774, 767, 772, 763, 768, 748, 764, 749, 777, 770,
+ 750, 751, 87, 766, 87, 87, 87, 752, 779, 771,
+ 765, 761, 773, 4172, 87, 762, 775, 774, 767, 772,
+ 87, 768, 776, 87, 87, 777, 778, 781, 87, 87,
+ 766, 87, 780, 782, 87, 779, 771, 783, 784, 773,
+ 786, 795, 87, 775, 87, 87, 87, 785, 787, 776,
+ 788, 790, 87, 778, 781, 791, 789, 793, 87, 780,
- 777, 779, 784, 87, 87, 781, 782, 789, 783, 792,
- 87, 786, 785, 793, 87, 794, 87, 795, 798, 796,
- 791, 799, 87, 790, 797, 787, 800, 87, 805, 87,
- 87, 801, 175, 87, 789, 87, 792, 87, 802, 803,
- 806, 807, 794, 809, 795, 87, 796, 87, 799, 810,
- 87, 797, 87, 800, 87, 805, 808, 811, 801, 4153,
- 815, 812, 814, 813, 87, 802, 803, 87, 816, 817,
- 818, 87, 87, 87, 87, 87, 87, 826, 4153, 87,
- 827, 87, 87, 808, 811, 87, 825, 815, 812, 814,
- 813, 87, 819, 87, 822, 816, 817, 818, 823, 820,
+ 782, 792, 87, 87, 783, 784, 87, 786, 87, 794,
+ 87, 796, 87, 87, 785, 787, 799, 788, 790, 87,
+ 87, 797, 791, 789, 793, 800, 87, 798, 792, 87,
+ 809, 802, 175, 87, 801, 87, 794, 803, 796, 804,
+ 87, 806, 805, 799, 87, 808, 87, 811, 797, 812,
+ 810, 807, 4172, 87, 798, 4172, 813, 87, 802, 4172,
+ 87, 801, 87, 814, 803, 87, 804, 87, 806, 805,
+ 87, 87, 87, 815, 817, 818, 816, 810, 807, 87,
+ 819, 87, 820, 813, 824, 831, 87, 87, 87, 825,
+ 814, 87, 827, 828, 826, 87, 87, 829, 87, 832,
- 87, 829, 821, 824, 87, 87, 832, 87, 830, 831,
- 87, 833, 836, 825, 835, 839, 834, 837, 87, 819,
- 840, 822, 838, 87, 842, 4153, 820, 847, 87, 821,
- 87, 841, 87, 87, 843, 87, 87, 87, 87, 836,
- 846, 835, 839, 87, 837, 849, 87, 840, 87, 838,
- 87, 842, 845, 844, 851, 848, 87, 87, 841, 87,
- 87, 843, 87, 87, 850, 852, 856, 846, 87, 853,
- 4153, 854, 849, 87, 860, 858, 87, 857, 87, 845,
- 844, 851, 848, 87, 855, 87, 87, 859, 87, 876,
- 87, 850, 852, 856, 87, 87, 853, 861, 854, 862,
+ 815, 817, 818, 816, 87, 821, 87, 819, 833, 820,
+ 842, 824, 822, 834, 839, 823, 837, 87, 87, 827,
+ 87, 87, 835, 87, 87, 87, 87, 836, 838, 87,
+ 4172, 841, 821, 840, 87, 87, 849, 842, 844, 822,
+ 843, 839, 823, 837, 845, 87, 846, 848, 847, 4172,
+ 87, 855, 4172, 87, 87, 838, 87, 87, 841, 87,
+ 840, 851, 87, 852, 853, 844, 87, 843, 87, 850,
+ 87, 845, 87, 846, 848, 847, 87, 87, 855, 854,
+ 858, 856, 4172, 857, 87, 862, 87, 859, 851, 87,
+ 852, 853, 87, 87, 860, 87, 850, 861, 863, 864,
- 867, 869, 858, 868, 857, 4153, 87, 870, 863, 87,
- 87, 855, 87, 864, 859, 871, 865, 866, 87, 87,
- 873, 87, 875, 872, 861, 4153, 862, 867, 869, 87,
- 868, 878, 87, 87, 870, 863, 874, 87, 877, 879,
- 864, 4153, 871, 865, 866, 87, 87, 873, 87, 875,
- 872, 881, 882, 883, 884, 87, 87, 885, 878, 87,
- 886, 880, 87, 874, 888, 877, 879, 890, 87, 87,
- 887, 889, 892, 87, 87, 891, 87, 87, 881, 882,
- 883, 884, 87, 893, 885, 87, 896, 886, 880, 87,
- 87, 888, 894, 895, 890, 899, 900, 887, 889, 87,
+ 4172, 4172, 87, 4172, 87, 87, 854, 858, 856, 869,
+ 857, 870, 87, 873, 859, 4172, 878, 87, 87, 4172,
+ 87, 860, 865, 871, 861, 863, 864, 866, 872, 874,
+ 867, 868, 87, 876, 875, 87, 869, 87, 870, 87,
+ 873, 877, 880, 4172, 879, 87, 87, 87, 87, 865,
+ 871, 87, 881, 885, 866, 872, 874, 867, 868, 883,
+ 876, 875, 87, 884, 888, 87, 87, 87, 877, 880,
+ 886, 879, 887, 87, 882, 87, 889, 87, 890, 881,
+ 885, 891, 892, 87, 894, 87, 883, 87, 895, 4172,
+ 884, 888, 87, 893, 896, 87, 87, 886, 897, 887,
- 87, 87, 891, 897, 898, 87, 87, 902, 87, 87,
- 893, 901, 4153, 896, 87, 903, 904, 87, 907, 894,
- 895, 911, 899, 900, 905, 906, 87, 908, 909, 87,
- 897, 898, 910, 912, 87, 913, 87, 915, 901, 87,
- 87, 87, 903, 904, 914, 907, 87, 917, 911, 918,
- 87, 87, 87, 87, 908, 909, 916, 87, 920, 910,
- 912, 919, 913, 87, 921, 922, 934, 924, 926, 87,
- 923, 914, 925, 87, 4153, 87, 918, 939, 87, 87,
- 87, 87, 927, 916, 87, 920, 87, 936, 919, 937,
- 4153, 921, 944, 935, 924, 926, 87, 87, 87, 925,
+ 87, 882, 87, 889, 87, 890, 87, 898, 891, 892,
+ 87, 87, 899, 900, 903, 895, 901, 902, 87, 905,
+ 893, 896, 904, 907, 4172, 897, 87, 906, 87, 87,
+ 908, 909, 87, 911, 898, 910, 912, 87, 918, 899,
+ 900, 903, 87, 901, 902, 916, 87, 87, 87, 904,
+ 907, 87, 913, 914, 906, 915, 917, 87, 87, 87,
+ 911, 87, 910, 912, 87, 919, 87, 87, 87, 920,
+ 87, 921, 916, 922, 937, 87, 925, 923, 924, 913,
+ 914, 926, 915, 917, 928, 929, 938, 87, 927, 87,
+ 942, 939, 919, 930, 87, 87, 87, 940, 921, 87,
- 4153, 87, 940, 87, 939, 87, 938, 4153, 941, 927,
- 928, 87, 929, 87, 936, 945, 937, 942, 948, 930,
- 935, 946, 87, 949, 87, 931, 932, 933, 87, 940,
- 87, 947, 943, 938, 87, 941, 950, 928, 951, 929,
- 87, 87, 945, 87, 942, 952, 930, 953, 946, 961,
- 87, 954, 931, 932, 933, 87, 962, 4153, 947, 943,
- 955, 959, 87, 950, 956, 951, 87, 963, 957, 87,
- 87, 958, 952, 87, 953, 960, 87, 87, 954, 87,
- 87, 87, 87, 962, 964, 87, 971, 955, 959, 965,
- 966, 956, 967, 970, 963, 957, 87, 968, 958, 87,
+ 922, 87, 87, 87, 923, 924, 87, 87, 87, 87,
+ 4172, 928, 929, 938, 943, 927, 87, 942, 939, 87,
+ 930, 931, 941, 932, 940, 948, 944, 945, 947, 87,
+ 933, 4172, 953, 4172, 87, 956, 934, 935, 936, 951,
+ 87, 943, 946, 87, 952, 87, 87, 955, 931, 941,
+ 932, 87, 948, 944, 945, 957, 949, 933, 87, 953,
+ 87, 958, 956, 934, 935, 936, 950, 87, 954, 946,
+ 87, 87, 87, 962, 955, 959, 960, 961, 87, 964,
+ 87, 87, 957, 949, 87, 87, 87, 963, 958, 965,
+ 966, 970, 969, 950, 87, 954, 971, 967, 968, 87,
- 87, 87, 960, 972, 975, 87, 969, 976, 974, 973,
- 87, 964, 87, 87, 4153, 978, 965, 966, 87, 967,
- 970, 87, 87, 87, 968, 4153, 987, 4153, 980, 977,
- 972, 975, 979, 969, 976, 974, 973, 87, 87, 87,
- 981, 87, 978, 983, 984, 982, 985, 988, 87, 87,
- 986, 991, 87, 987, 87, 980, 977, 87, 87, 979,
- 87, 989, 990, 993, 87, 4153, 4153, 981, 992, 994,
- 983, 984, 982, 985, 988, 995, 87, 986, 991, 87,
- 996, 999, 87, 1000, 997, 87, 998, 87, 989, 990,
- 993, 87, 87, 1003, 1001, 992, 994, 87, 1007, 4153,
+ 962, 87, 959, 960, 961, 972, 974, 977, 87, 87,
+ 87, 87, 87, 976, 963, 973, 965, 966, 970, 969,
+ 87, 975, 87, 971, 967, 968, 87, 87, 87, 978,
+ 979, 980, 972, 985, 977, 982, 87, 87, 87, 87,
+ 976, 981, 973, 983, 87, 87, 984, 990, 975, 992,
+ 986, 987, 991, 988, 87, 87, 978, 979, 980, 87,
+ 985, 87, 982, 989, 87, 87, 993, 4172, 981, 87,
+ 983, 87, 994, 984, 990, 87, 992, 986, 987, 991,
+ 988, 996, 997, 995, 998, 87, 1000, 999, 1001, 87,
+ 989, 87, 1002, 993, 87, 87, 1003, 87, 87, 994,
- 87, 87, 995, 1002, 1004, 87, 87, 996, 999, 1005,
- 1000, 997, 1006, 998, 87, 87, 87, 1015, 87, 1009,
- 1003, 1001, 1008, 1010, 1012, 1007, 87, 1011, 4153, 4153,
- 1002, 1004, 87, 1013, 1014, 87, 1005, 87, 1016, 1006,
- 87, 87, 87, 1019, 1015, 1017, 1009, 1018, 1022, 1008,
- 1010, 87, 1025, 1020, 1011, 175, 87, 1026, 87, 87,
- 1013, 1014, 1021, 87, 1027, 1016, 87, 87, 87, 1023,
- 1019, 1029, 1017, 1030, 1018, 87, 1028, 1024, 4153, 87,
- 1020, 1032, 1031, 1033, 87, 1034, 87, 4153, 87, 1021,
- 87, 1027, 1036, 1037, 87, 87, 1023, 1035, 1029, 87,
+ 1004, 1005, 87, 1006, 87, 1015, 87, 1007, 996, 997,
+ 995, 998, 87, 1000, 999, 1001, 1009, 1008, 87, 1002,
+ 87, 1010, 1011, 1003, 1012, 87, 87, 1004, 1005, 87,
+ 1006, 1014, 1013, 1016, 1007, 87, 87, 87, 1017, 87,
+ 1018, 1019, 87, 1009, 1008, 1021, 87, 1022, 1010, 1011,
+ 87, 1012, 1020, 1023, 87, 175, 1025, 87, 1014, 1013,
+ 1016, 1033, 87, 87, 1030, 1017, 87, 1018, 1019, 1024,
+ 87, 87, 1021, 1026, 1022, 87, 1031, 1028, 1035, 1020,
+ 1023, 1027, 1029, 87, 1032, 87, 87, 1034, 1038, 1036,
+ 87, 1030, 87, 87, 87, 87, 1024, 1039, 1037, 87,
- 87, 87, 1038, 1028, 1024, 87, 87, 4153, 1032, 1031,
- 1033, 1039, 1034, 1041, 1040, 1043, 1044, 87, 1042, 1036,
- 1052, 1054, 4153, 87, 1035, 87, 87, 87, 1060, 4153,
- 87, 87, 87, 87, 87, 1061, 1644, 1645, 1039, 87,
- 1041, 1040, 1043, 1044, 4153, 1042, 1045, 1052, 1054, 1046,
- 1055, 1056, 1057, 1047, 1058, 1060, 1048, 87, 87, 4153,
- 1062, 1065, 1061, 1049, 1050, 87, 1051, 1059, 87, 1063,
- 87, 87, 87, 1045, 1068, 87, 1046, 1055, 1056, 1057,
- 1047, 1058, 1064, 1048, 1066, 87, 87, 1062, 1065, 1081,
- 1049, 1050, 1067, 1051, 1059, 87, 1063, 87, 87, 87,
+ 1026, 1040, 1041, 1031, 1042, 1035, 87, 1071, 1027, 87,
+ 1043, 1032, 87, 87, 1034, 1038, 1036, 1045, 1044, 1046,
+ 1047, 87, 87, 87, 1039, 1037, 87, 87, 4172, 1055,
+ 1057, 1042, 1058, 87, 87, 1062, 4172, 1043, 87, 87,
+ 87, 87, 1059, 1061, 1045, 1044, 1046, 1047, 1048, 1060,
+ 87, 1049, 1104, 87, 87, 1050, 1055, 1057, 1051, 1058,
+ 1063, 1064, 1062, 87, 87, 1052, 1053, 1067, 1054, 1059,
+ 1061, 87, 1065, 87, 1066, 1048, 1060, 1068, 1049, 87,
+ 4172, 1124, 1050, 87, 87, 1051, 87, 1063, 1064, 1069,
+ 1070, 4172, 1052, 1053, 1067, 1054, 1080, 87, 87, 1065,
- 1077, 1080, 1078, 1085, 4153, 1086, 87, 87, 1079, 1064,
- 87, 1066, 87, 87, 87, 1082, 1081, 1087, 87, 1067,
- 1069, 1070, 4153, 1071, 87, 87, 1072, 1077, 1080, 1078,
- 1085, 1073, 1086, 1083, 1089, 1079, 87, 1074, 1075, 87,
- 1076, 1096, 1082, 1088, 1087, 1090, 87, 1069, 1070, 1084,
- 1071, 1093, 1091, 1072, 1094, 87, 87, 1092, 1073, 1097,
- 1083, 1089, 1095, 87, 1074, 1075, 1098, 1076, 1096, 87,
- 1088, 87, 1090, 1099, 87, 1101, 1084, 1100, 1093, 1103,
- 87, 1094, 1102, 1104, 87, 87, 1097, 1106, 87, 1095,
- 1105, 87, 1109, 1098, 87, 1108, 87, 87, 1107, 87,
+ 87, 1066, 87, 87, 1068, 1081, 1082, 1084, 87, 1094,
+ 4172, 4172, 87, 1083, 1095, 4172, 1069, 1070, 1072, 1073,
+ 4172, 1074, 87, 1080, 1075, 1085, 1086, 87, 87, 1076,
+ 87, 1089, 1081, 1082, 1084, 1077, 1078, 1088, 1079, 87,
+ 1083, 87, 1087, 1091, 87, 1072, 1073, 1093, 1074, 87,
+ 1090, 1075, 1085, 1086, 1099, 87, 1076, 1097, 1089, 87,
+ 1096, 1098, 1077, 1078, 1088, 1079, 1092, 1101, 87, 1087,
+ 1091, 87, 87, 87, 1093, 1100, 87, 1090, 1103, 1102,
+ 87, 1099, 1105, 87, 1097, 1108, 4172, 1096, 1098, 87,
+ 1107, 4172, 1110, 1092, 1101, 1106, 4172, 1112, 87, 87,
- 1099, 1110, 87, 87, 1100, 87, 1103, 87, 1111, 1102,
- 1104, 87, 1114, 87, 1106, 1115, 1112, 1105, 1113, 1109,
- 87, 1116, 1108, 87, 87, 1107, 1118, 87, 1110, 1117,
- 1119, 87, 1120, 1121, 87, 1111, 87, 1125, 87, 1114,
- 1124, 1122, 1115, 1112, 1127, 1113, 1123, 1126, 1116, 1130,
- 1136, 1132, 87, 87, 87, 1128, 1117, 1119, 87, 1120,
- 87, 1129, 87, 87, 1131, 1133, 1134, 1124, 87, 87,
- 1137, 1127, 87, 87, 1126, 1135, 1138, 87, 1141, 1139,
- 4153, 87, 1128, 87, 1142, 87, 87, 87, 1129, 87,
- 1140, 1131, 1133, 1134, 87, 1143, 1146, 87, 87, 87,
+ 87, 87, 1100, 87, 1109, 1103, 1102, 87, 87, 1105,
+ 87, 1113, 1108, 87, 1114, 1111, 87, 1107, 1115, 1110,
+ 1116, 1118, 1106, 87, 1112, 87, 87, 1117, 1119, 1120,
+ 87, 1109, 1121, 87, 87, 1122, 1123, 87, 1113, 1125,
+ 1128, 1114, 1111, 87, 1126, 1115, 1127, 1116, 1118, 1129,
+ 1130, 1134, 1131, 87, 1117, 1119, 1120, 87, 87, 87,
+ 87, 4172, 1122, 1123, 87, 1133, 1135, 1136, 87, 1138,
+ 1137, 87, 87, 1127, 87, 1132, 1129, 1130, 87, 1131,
+ 1140, 1139, 87, 87, 1141, 1143, 1142, 1145, 87, 1144,
+ 87, 1151, 1133, 1135, 87, 87, 1138, 1137, 87, 87,
- 87, 1144, 1135, 1138, 87, 1141, 1139, 87, 1145, 1147,
- 87, 1142, 1148, 1149, 1150, 87, 1151, 1140, 1152, 87,
- 1154, 4153, 1143, 1146, 1157, 1153, 1159, 87, 1144, 87,
- 87, 4153, 87, 87, 1155, 1145, 87, 1161, 87, 1148,
- 1149, 87, 87, 87, 1158, 1152, 1160, 1154, 87, 1156,
- 87, 1157, 1153, 1159, 1163, 1162, 87, 4153, 87, 87,
- 1164, 1155, 1166, 1165, 1161, 1167, 1169, 87, 1168, 1170,
- 1172, 1158, 87, 1160, 1171, 87, 1156, 87, 1173, 1174,
- 87, 1163, 1162, 87, 87, 87, 87, 1164, 1175, 1166,
- 1165, 87, 1167, 1169, 1176, 1168, 87, 1172, 1178, 1177,
+ 87, 1146, 1132, 1147, 87, 1154, 1148, 87, 1139, 87,
+ 1149, 87, 1143, 1142, 1145, 87, 1144, 1150, 87, 1155,
+ 1152, 87, 1153, 87, 87, 87, 1156, 1158, 1146, 4172,
+ 1147, 1157, 87, 1148, 1159, 87, 1162, 1149, 87, 87,
+ 1164, 87, 1161, 87, 1150, 87, 1165, 1152, 87, 1153,
+ 1166, 87, 87, 1156, 1158, 1160, 87, 1167, 1157, 1163,
+ 87, 1159, 87, 1162, 1168, 1169, 1170, 1164, 87, 1161,
+ 1177, 1172, 87, 1165, 1171, 87, 87, 1166, 1174, 87,
+ 1173, 4172, 1160, 1175, 1167, 4172, 1163, 87, 87, 87,
+ 1176, 1168, 1169, 1170, 87, 1180, 87, 1177, 1172, 1178,
- 1179, 87, 87, 1181, 87, 1173, 1174, 87, 1180, 1182,
- 1183, 1184, 87, 1185, 4153, 1175, 87, 1186, 1189, 87,
- 1196, 1176, 1187, 87, 87, 1178, 1177, 1179, 87, 87,
- 1181, 1193, 4153, 87, 1188, 1180, 87, 1183, 1184, 87,
- 1185, 87, 1191, 1190, 1186, 1189, 1194, 1192, 1195, 1187,
- 87, 87, 87, 1197, 87, 87, 87, 1198, 1193, 1200,
- 87, 1188, 1202, 1203, 1201, 1199, 1204, 87, 1206, 1191,
- 1190, 87, 87, 1194, 1192, 1195, 87, 87, 1205, 87,
- 1197, 1209, 87, 87, 1198, 4153, 1200, 1208, 1207, 1202,
- 1203, 1201, 1199, 1204, 87, 87, 87, 1210, 1211, 87,
+ 1179, 1171, 1181, 87, 1183, 87, 1182, 1173, 87, 1185,
+ 87, 87, 1184, 87, 1186, 87, 1188, 1176, 1187, 1189,
+ 1190, 4172, 1180, 1191, 87, 87, 1178, 1179, 87, 1181,
+ 87, 1183, 4172, 1182, 87, 1193, 1185, 1192, 87, 1184,
+ 87, 87, 87, 1188, 87, 1187, 1189, 1190, 1194, 1195,
+ 1191, 1197, 1196, 1199, 1198, 87, 87, 1200, 1202, 1201,
+ 1203, 87, 1193, 87, 1192, 1207, 4172, 87, 1210, 1209,
+ 1205, 87, 1206, 87, 87, 1194, 1195, 87, 1197, 1196,
+ 1199, 1198, 1204, 87, 87, 1202, 1201, 1203, 1208, 87,
+ 87, 87, 1207, 87, 1211, 87, 1209, 1205, 1212, 1206,
- 87, 1214, 1212, 1213, 87, 1205, 87, 1218, 1209, 87,
- 87, 1215, 1219, 1216, 1208, 1207, 1217, 87, 1220, 87,
- 87, 1221, 1222, 87, 1210, 1211, 1224, 1223, 1214, 1212,
- 1213, 87, 1225, 1226, 87, 87, 4153, 4153, 1215, 87,
- 1216, 1230, 1227, 1217, 87, 1220, 1231, 1228, 1233, 1222,
- 87, 1232, 87, 87, 1223, 1229, 87, 1234, 87, 1235,
- 1226, 1236, 87, 87, 87, 1237, 1238, 1240, 1230, 1227,
- 87, 4153, 1241, 1231, 1228, 1243, 1242, 87, 1232, 87,
- 87, 87, 1229, 87, 1239, 4153, 1235, 1250, 1236, 87,
- 87, 87, 1237, 1244, 87, 1247, 1251, 87, 87, 1241,
+ 1213, 87, 87, 1214, 1215, 87, 1216, 1217, 1222, 1204,
+ 87, 1218, 1219, 87, 87, 1208, 87, 1220, 87, 1221,
+ 87, 1211, 1223, 87, 87, 1212, 87, 1213, 1224, 1225,
+ 1214, 1215, 1226, 1216, 1217, 1227, 1228, 1229, 1218, 1219,
+ 87, 87, 87, 1230, 1220, 87, 1221, 1235, 1231, 1232,
+ 1234, 1237, 1236, 87, 87, 1224, 87, 1233, 1238, 1226,
+ 1244, 87, 1227, 1242, 87, 1239, 87, 1241, 87, 87,
+ 1230, 1240, 87, 1245, 1235, 1231, 1232, 1234, 87, 1236,
+ 87, 87, 87, 87, 1233, 1246, 1243, 87, 1247, 87,
+ 87, 1253, 1239, 87, 1241, 87, 1248, 1251, 1240, 87,
- 1248, 1249, 1243, 1242, 1252, 1253, 1245, 1254, 1246, 87,
- 87, 1239, 87, 87, 1250, 1255, 1256, 87, 1257, 87,
- 1244, 87, 87, 1251, 87, 1258, 4153, 175, 1249, 1259,
- 1261, 1252, 1253, 1245, 1254, 1246, 1270, 87, 87, 1262,
- 1260, 1263, 1255, 1256, 87, 1257, 87, 87, 4153, 1272,
- 4153, 1274, 1258, 87, 1271, 4153, 1259, 1261, 87, 4153,
- 4153, 1273, 1275, 1270, 87, 4153, 1262, 1260, 1263, 1264,
- 1280, 1265, 87, 87, 1279, 1266, 1272, 1267, 87, 87,
- 87, 1271, 1268, 1276, 1277, 1278, 87, 1269, 1273, 1275,
- 1281, 1282, 87, 87, 1283, 1284, 1264, 1280, 1265, 4153,
+ 1245, 1254, 1252, 87, 1255, 4172, 4172, 4172, 1260, 1249,
+ 87, 1250, 1246, 1243, 1256, 1247, 87, 1259, 1253, 87,
+ 87, 1258, 4172, 1248, 87, 1257, 4172, 1262, 1254, 175,
+ 87, 1255, 87, 87, 1261, 1260, 1249, 87, 1250, 87,
+ 87, 1256, 1263, 1265, 1259, 1267, 1274, 1277, 1258, 1266,
+ 1278, 87, 1257, 1264, 1262, 1276, 87, 87, 1275, 87,
+ 4172, 1261, 4172, 1279, 1282, 87, 87, 4172, 87, 1263,
+ 1265, 87, 1267, 1274, 1277, 1286, 1266, 87, 87, 1284,
+ 1264, 1268, 1276, 1269, 87, 1275, 1283, 1270, 87, 1271,
+ 1279, 1282, 1280, 1281, 1272, 1288, 1285, 87, 87, 1273,
- 1285, 1279, 1266, 87, 1267, 1286, 87, 87, 1288, 1268,
- 1276, 1277, 1278, 87, 1269, 1287, 1295, 1281, 1282, 4153,
- 1289, 1283, 1290, 87, 4153, 1291, 1294, 87, 87, 1292,
- 1297, 87, 1286, 1296, 87, 1288, 1300, 1301, 87, 1293,
- 1302, 87, 1287, 1295, 1298, 1299, 87, 1289, 1303, 1290,
- 87, 87, 1291, 1294, 87, 1304, 1292, 87, 87, 87,
- 1296, 87, 1305, 1300, 1301, 1306, 1293, 1302, 1308, 1309,
- 87, 1298, 1299, 4153, 87, 1303, 1310, 1311, 4153, 1320,
- 1319, 4153, 1322, 4153, 87, 1332, 87, 87, 1323, 1321,
- 4153, 4153, 87, 4153, 87, 87, 1309, 87, 1324, 4153,
+ 1289, 1308, 1286, 4172, 1287, 87, 1284, 1290, 1268, 87,
+ 1269, 1291, 1301, 1283, 1270, 87, 1271, 87, 1292, 1280,
+ 1281, 1272, 1298, 1285, 87, 87, 1273, 87, 1294, 1299,
+ 1293, 1287, 1295, 87, 1290, 1300, 1296, 87, 1291, 87,
+ 87, 87, 1305, 1304, 1302, 1292, 1297, 1303, 87, 1298,
+ 87, 87, 1309, 1310, 1306, 1294, 1299, 1293, 87, 1295,
+ 87, 87, 1300, 1296, 87, 1307, 1312, 1313, 1314, 1305,
+ 1304, 1302, 87, 1297, 1303, 87, 87, 1315, 4172, 1324,
+ 87, 1306, 1323, 4172, 87, 4172, 87, 87, 1326, 1325,
+ 4172, 4172, 1307, 1327, 1313, 1314, 4172, 87, 87, 1328,
- 87, 87, 87, 1310, 1311, 1312, 1320, 1319, 1325, 1322,
- 1313, 1327, 1314, 1326, 87, 1323, 1321, 87, 1315, 1339,
- 87, 1328, 87, 1316, 1317, 1324, 87, 87, 1329, 1334,
- 1318, 87, 1312, 1330, 87, 1325, 87, 1313, 1327, 1314,
- 1326, 87, 1331, 1333, 87, 1315, 87, 4153, 1328, 1335,
- 1316, 1317, 1336, 87, 1340, 1329, 1334, 1318, 87, 1337,
- 1330, 1343, 1338, 87, 1342, 87, 1341, 1344, 87, 1331,
- 1333, 87, 1347, 87, 1349, 87, 1335, 87, 1345, 1336,
- 1348, 1340, 87, 1346, 1352, 87, 1337, 1353, 1343, 1338,
- 1350, 1351, 4153, 1341, 1344, 87, 87, 87, 1355, 4153,
+ 4172, 87, 87, 87, 1315, 1316, 1324, 4172, 1329, 1323,
+ 1317, 1336, 1318, 4172, 1333, 1326, 1325, 1331, 1319, 87,
+ 1327, 87, 87, 1320, 1321, 1330, 1328, 87, 87, 1332,
+ 1322, 87, 1316, 1337, 1338, 1329, 1335, 1317, 87, 1318,
+ 1334, 1333, 87, 87, 1331, 1319, 1346, 87, 87, 87,
+ 1320, 1321, 1330, 1339, 1340, 87, 1332, 1322, 1343, 1341,
+ 1337, 1338, 87, 1335, 1342, 87, 1344, 1334, 87, 1345,
+ 1347, 1348, 4172, 87, 1350, 1351, 87, 1349, 87, 87,
+ 1339, 1340, 1353, 1352, 1354, 87, 1341, 4172, 87, 87,
+ 87, 1342, 1356, 1344, 87, 1355, 1345, 1347, 1348, 87,
- 87, 1349, 87, 1360, 87, 1345, 1354, 1348, 87, 87,
- 1346, 1352, 87, 1356, 1357, 1358, 87, 1350, 1351, 87,
- 1361, 87, 87, 1362, 1359, 1355, 1363, 87, 1364, 87,
- 1360, 1365, 1368, 1354, 1367, 1366, 87, 87, 87, 4153,
- 1356, 1357, 1358, 1369, 87, 87, 87, 1361, 1372, 1374,
- 1362, 1359, 87, 1363, 87, 1364, 1370, 1375, 1365, 1371,
- 87, 1367, 1366, 1373, 87, 87, 87, 1379, 1377, 87,
- 1369, 87, 1376, 1378, 87, 1372, 1374, 1385, 1384, 87,
- 87, 87, 87, 1370, 1380, 1381, 1371, 1382, 1383, 87,
- 1373, 1386, 1387, 4153, 1379, 1377, 87, 4153, 1388, 1376,
+ 1357, 1350, 87, 87, 1349, 87, 1358, 87, 1359, 1353,
+ 1352, 1354, 87, 87, 1361, 1360, 1363, 1362, 1365, 1356,
+ 1364, 1367, 1355, 87, 87, 87, 87, 1371, 1372, 87,
+ 1369, 1375, 87, 1358, 1366, 1359, 87, 1368, 87, 87,
+ 1370, 1361, 1360, 1363, 1362, 1365, 87, 1364, 1367, 87,
+ 87, 87, 1373, 87, 1371, 87, 1374, 1369, 1375, 1376,
+ 87, 1366, 1378, 87, 1368, 1379, 1377, 1370, 87, 87,
+ 1391, 4172, 1380, 1381, 1382, 1392, 1384, 1389, 1436, 1373,
+ 87, 87, 1383, 1374, 87, 87, 1376, 87, 87, 1378,
+ 1385, 87, 1386, 1377, 1387, 87, 1388, 87, 1390, 1380,
- 1378, 1389, 1410, 87, 1385, 1384, 87, 87, 1390, 87,
- 87, 1380, 1381, 87, 1382, 1383, 87, 1394, 1391, 1396,
- 1395, 1392, 87, 87, 87, 1388, 1393, 1397, 1389, 87,
- 1399, 87, 1401, 1400, 87, 1390, 1398, 87, 1405, 87,
- 1412, 1404, 4153, 87, 1394, 1391, 1396, 1395, 4153, 87,
- 1430, 87, 87, 87, 1397, 87, 1406, 1399, 87, 1401,
- 1400, 1402, 1403, 1398, 1407, 1405, 1408, 87, 1404, 1409,
- 1411, 4153, 87, 87, 1413, 87, 1414, 87, 1416, 1415,
- 87, 87, 87, 1406, 1417, 1419, 87, 1420, 1402, 1403,
- 4153, 1407, 87, 1408, 1418, 1422, 1409, 1411, 87, 1421,
+ 1381, 1382, 87, 1384, 1389, 87, 1395, 87, 1393, 1383,
+ 1394, 4172, 87, 4172, 87, 4172, 87, 1385, 87, 1386,
+ 87, 1387, 87, 1388, 87, 1390, 87, 1396, 1401, 1397,
+ 1403, 1405, 1402, 1395, 1398, 1393, 1399, 1394, 87, 1400,
+ 87, 1404, 1406, 87, 4172, 1410, 1407, 1408, 87, 87,
+ 1415, 1417, 4172, 87, 1396, 1401, 87, 1403, 1405, 1402,
+ 87, 87, 87, 1399, 1409, 87, 1400, 1411, 1404, 1406,
+ 1412, 1413, 1410, 1407, 1408, 87, 1414, 1416, 87, 87,
+ 1418, 4172, 87, 87, 87, 87, 1419, 1420, 87, 1421,
+ 4172, 1409, 87, 1422, 1411, 1423, 1424, 1412, 1413, 1425,
- 87, 1413, 1423, 1414, 87, 1416, 1415, 87, 87, 87,
- 87, 1417, 1419, 87, 1420, 1424, 1425, 1426, 1428, 1427,
- 1431, 1418, 1422, 1432, 87, 1433, 1421, 1429, 1437, 1423,
- 87, 87, 1434, 87, 87, 1435, 87, 87, 87, 87,
- 1436, 87, 1424, 1425, 1426, 1428, 1427, 87, 1439, 87,
- 1432, 1438, 1433, 1441, 1429, 1437, 87, 1440, 87, 1434,
- 1442, 87, 1435, 1443, 1444, 1446, 1445, 1436, 1448, 4153,
- 1452, 87, 87, 4153, 1447, 1439, 1449, 1453, 1438, 1454,
- 1450, 4153, 1455, 1451, 1440, 87, 87, 1456, 87, 87,
- 87, 1444, 87, 1445, 87, 87, 87, 87, 87, 87,
+ 87, 87, 1435, 1414, 1416, 1428, 1427, 1418, 87, 1429,
+ 1430, 4172, 1446, 1419, 1420, 87, 1421, 87, 87, 1426,
+ 1422, 87, 1423, 1424, 87, 87, 1425, 87, 1431, 1432,
+ 87, 87, 1428, 1427, 87, 1434, 1429, 1430, 1433, 1437,
+ 87, 87, 1438, 1439, 87, 1440, 1426, 1443, 1447, 87,
+ 1442, 87, 1441, 1448, 87, 1431, 1432, 87, 87, 87,
+ 1444, 87, 1434, 4172, 1445, 1433, 1437, 87, 1449, 1438,
+ 1439, 87, 1440, 1451, 1443, 1450, 1452, 1442, 87, 1441,
+ 87, 1453, 1454, 1455, 87, 87, 1457, 1444, 4172, 1456,
+ 87, 1445, 87, 1458, 1459, 1449, 87, 87, 87, 1460,
- 87, 1447, 87, 1449, 1453, 87, 87, 1450, 1457, 1455,
- 1451, 1458, 1459, 1461, 1456, 1460, 1463, 1462, 1465, 4153,
- 1467, 87, 1468, 87, 1464, 1469, 87, 87, 87, 1472,
- 4153, 1471, 87, 87, 1466, 1457, 1470, 87, 1458, 1459,
- 1461, 87, 1460, 1463, 1462, 1465, 87, 1467, 87, 87,
- 1475, 1464, 1473, 87, 87, 1474, 87, 87, 1471, 1480,
- 87, 1466, 1476, 1470, 1478, 87, 1479, 87, 87, 1483,
- 1481, 87, 87, 87, 1484, 1482, 1485, 1475, 1486, 1473,
- 4153, 1488, 1474, 87, 87, 1487, 1480, 87, 175, 1476,
- 4153, 1478, 1490, 1479, 1491, 87, 1483, 1481, 1489, 1493,
+ 1463, 1461, 1450, 1452, 87, 87, 1462, 4172, 1464, 1454,
+ 1455, 87, 1466, 87, 1467, 87, 1456, 87, 87, 87,
+ 1458, 87, 87, 1465, 87, 1469, 1460, 1463, 1461, 1468,
+ 1473, 87, 1474, 1462, 1470, 1464, 87, 4172, 87, 1466,
+ 1471, 1467, 1477, 87, 1476, 87, 1472, 87, 1475, 1478,
+ 1465, 4172, 1469, 1480, 87, 87, 1468, 87, 4172, 1479,
+ 87, 1470, 87, 1484, 87, 1481, 87, 1471, 87, 87,
+ 1483, 1476, 87, 1472, 87, 1475, 1478, 1485, 1488, 87,
+ 1480, 87, 1486, 1487, 87, 87, 1479, 1489, 1490, 1491,
+ 1484, 87, 1481, 1493, 1495, 1492, 87, 1483, 1496, 1494,
- 87, 87, 1482, 1485, 87, 1486, 1492, 87, 1488, 87,
- 1494, 87, 1487, 1495, 1497, 1498, 1496, 87, 1500, 1490,
- 4153, 1491, 87, 87, 1501, 1489, 1493, 1502, 87, 1499,
- 87, 1504, 1503, 1492, 4153, 87, 1509, 1494, 1507, 1505,
- 87, 4153, 1506, 1496, 87, 1500, 87, 87, 87, 87,
- 1508, 1501, 87, 87, 1502, 87, 1499, 87, 1504, 1503,
- 87, 1510, 87, 1509, 1511, 1507, 1505, 1512, 1513, 1506,
- 1514, 1519, 1517, 1515, 1518, 1516, 87, 1508, 4153, 87,
- 1520, 4153, 1522, 87, 87, 87, 87, 1521, 1510, 87,
- 87, 1511, 87, 1527, 1512, 1513, 1528, 87, 87, 1517,
+ 175, 1497, 1500, 1502, 1485, 1488, 87, 87, 1503, 1486,
+ 1487, 87, 87, 87, 87, 1490, 1491, 87, 1498, 1499,
+ 1493, 1495, 1492, 87, 1504, 1496, 1494, 1501, 1497, 87,
+ 1505, 87, 4172, 1506, 87, 87, 87, 1507, 1508, 1509,
+ 87, 4172, 87, 87, 87, 1498, 1499, 1512, 1514, 1510,
+ 4172, 1504, 1516, 1515, 1501, 1511, 87, 1505, 1513, 87,
+ 1506, 87, 87, 87, 1507, 1508, 1509, 1519, 87, 87,
+ 87, 1517, 87, 1518, 1512, 1514, 1510, 87, 1520, 1516,
+ 1515, 87, 1511, 87, 1521, 1513, 1522, 1523, 1524, 1525,
+ 4172, 87, 1527, 4172, 87, 1534, 87, 1526, 1517, 87,
- 1515, 1518, 1516, 87, 1523, 1529, 1530, 1520, 87, 1522,
- 1531, 1532, 1534, 1524, 1521, 1525, 87, 4153, 1526, 1536,
- 1527, 1533, 87, 1528, 4153, 87, 87, 87, 87, 1537,
- 87, 1523, 1529, 87, 87, 1535, 87, 1531, 1532, 1534,
- 1524, 1538, 1525, 87, 1539, 1526, 1536, 87, 1533, 1540,
- 1541, 1542, 87, 1543, 1544, 4153, 1537, 1545, 1546, 1552,
- 4153, 1547, 1535, 87, 87, 87, 87, 1548, 1538, 1550,
- 87, 1539, 1549, 87, 1551, 1553, 1540, 87, 1542, 87,
- 1543, 1544, 87, 87, 1545, 87, 1552, 87, 1547, 87,
- 1555, 87, 1554, 1558, 1548, 1559, 1550, 87, 87, 1549,
+ 1518, 87, 1532, 1535, 87, 1520, 1533, 87, 1536, 4172,
+ 1546, 1521, 1528, 1522, 1523, 4172, 1525, 87, 87, 1527,
+ 87, 1529, 1534, 1530, 1526, 87, 1531, 1537, 87, 1532,
+ 87, 1538, 87, 1533, 87, 1536, 1539, 1540, 1541, 1528,
+ 1543, 87, 87, 1542, 87, 87, 1547, 87, 1529, 1544,
+ 1530, 1545, 1551, 1531, 1537, 1549, 1548, 87, 1538, 1552,
+ 87, 87, 87, 1539, 1540, 1541, 87, 1543, 87, 87,
+ 1542, 87, 1550, 1547, 1553, 1555, 1544, 1554, 1545, 87,
+ 87, 87, 1549, 1548, 87, 1556, 1552, 1557, 1558, 4172,
+ 1560, 1559, 4172, 1564, 1563, 1565, 87, 87, 87, 1550,
- 1556, 1551, 1553, 1560, 87, 87, 1561, 1562, 1564, 1557,
- 4153, 1565, 1563, 87, 87, 87, 1568, 1555, 87, 1554,
- 1558, 87, 1559, 87, 87, 1569, 1566, 1556, 1571, 87,
- 1560, 1572, 87, 1561, 1562, 1564, 1557, 1567, 1565, 1563,
- 1570, 1573, 87, 87, 1574, 1577, 87, 87, 87, 87,
- 1578, 1580, 1569, 1566, 1575, 1571, 4153, 87, 1572, 87,
- 4153, 1576, 87, 87, 1567, 1581, 1579, 1570, 1573, 1584,
- 1583, 1574, 1577, 87, 1582, 1585, 87, 87, 1586, 1587,
- 1588, 1575, 87, 87, 1593, 1589, 87, 87, 1576, 87,
- 1590, 1591, 1581, 1579, 87, 1592, 1584, 1583, 87, 1601,
+ 87, 1553, 1555, 87, 1554, 87, 87, 1561, 87, 1569,
+ 87, 1566, 1556, 87, 1557, 1558, 1562, 1560, 1559, 87,
+ 1564, 1563, 1565, 1567, 1568, 1570, 1573, 1576, 1571, 87,
+ 87, 87, 1583, 87, 1561, 1574, 1569, 87, 1566, 1572,
+ 1575, 1577, 87, 1562, 87, 87, 1579, 87, 1578, 1580,
+ 1567, 1568, 1570, 87, 1576, 1571, 87, 87, 87, 1582,
+ 1585, 87, 1574, 1581, 87, 87, 1572, 1575, 1577, 1586,
+ 1584, 87, 1587, 1579, 1588, 1578, 1580, 87, 1590, 1592,
+ 1589, 87, 1591, 1593, 4172, 87, 1582, 87, 1594, 87,
+ 1581, 1598, 87, 87, 87, 1595, 1586, 1584, 1596, 1587,
- 87, 1582, 1585, 4153, 87, 1586, 1587, 1602, 1604, 87,
- 87, 1593, 87, 4153, 4153, 1603, 1606, 1590, 1591, 1609,
- 1605, 87, 1592, 1594, 87, 1607, 1601, 1595, 4153, 4153,
- 1596, 1597, 4153, 87, 1602, 1598, 4153, 1608, 87, 1610,
- 87, 1599, 1603, 1606, 1612, 1600, 87, 1605, 87, 87,
- 1594, 87, 1607, 1611, 1595, 87, 1614, 1596, 1597, 1613,
- 1619, 87, 1598, 1621, 1608, 87, 1610, 87, 1599, 1615,
- 87, 1612, 1600, 1620, 1617, 87, 1618, 1616, 87, 87,
- 1611, 1622, 87, 1614, 1623, 1624, 1613, 1619, 1625, 4153,
- 1621, 1630, 1626, 1632, 1628, 87, 1615, 4153, 87, 87,
+ 1597, 1588, 1607, 87, 87, 1590, 1592, 1589, 4172, 1591,
+ 1609, 87, 1606, 1614, 87, 87, 87, 87, 1598, 4172,
+ 1608, 1611, 1595, 4172, 1618, 1596, 1610, 1597, 1599, 1607,
+ 87, 1613, 1600, 1612, 4172, 1601, 1602, 87, 87, 1606,
+ 1603, 1619, 87, 87, 1615, 87, 1604, 1608, 1611, 87,
+ 1605, 1618, 87, 1610, 87, 1599, 87, 1616, 1613, 1600,
+ 1612, 1617, 1601, 1602, 87, 1624, 87, 1603, 1619, 4172,
+ 1620, 1615, 87, 1604, 1622, 1626, 1623, 1605, 1621, 87,
+ 1625, 1627, 1628, 1630, 1616, 1629, 4172, 87, 1617, 87,
+ 87, 1635, 1624, 1631, 1633, 1634, 87, 1620, 87, 1632,
- 1620, 1617, 1627, 1618, 1616, 1629, 87, 87, 1633, 87,
- 1631, 1634, 1624, 87, 87, 1625, 87, 1641, 1647, 1626,
- 1642, 1628, 1635, 87, 87, 87, 1643, 1646, 4153, 1627,
- 87, 87, 1629, 87, 87, 1633, 87, 1631, 1634, 87,
- 1652, 87, 1650, 87, 1641, 1647, 1648, 1642, 1651, 1635,
- 1636, 87, 87, 1643, 1646, 1637, 1649, 1638, 87, 1639,
- 1653, 1640, 1656, 87, 1660, 1654, 87, 87, 87, 1650,
- 1655, 1662, 1657, 1648, 1658, 1651, 87, 1636, 1659, 87,
- 1668, 1663, 1637, 1649, 1638, 87, 1639, 87, 1640, 1656,
- 1661, 1660, 87, 87, 87, 87, 87, 87, 1662, 1657,
+ 87, 1622, 1626, 1623, 87, 1621, 87, 1625, 87, 87,
+ 1630, 87, 1629, 87, 87, 1636, 87, 1637, 1635, 1638,
+ 1631, 1633, 1634, 1639, 4172, 1640, 1632, 1641, 4172, 1648,
+ 1652, 1647, 1650, 1651, 4172, 4172, 1653, 4172, 87, 4172,
+ 4172, 87, 87, 1649, 1637, 87, 87, 87, 87, 1658,
+ 1639, 87, 1640, 87, 1641, 1642, 1648, 1652, 1647, 87,
+ 1643, 87, 1644, 1653, 1645, 1654, 1646, 1655, 1657, 87,
+ 1649, 1656, 1659, 87, 87, 4172, 87, 87, 1660, 4172,
+ 87, 4172, 1642, 1661, 1663, 1664, 87, 1643, 1662, 1644,
+ 1665, 1645, 1654, 1646, 1655, 1657, 1668, 87, 1656, 87,
- 1664, 1658, 1665, 1666, 1671, 1659, 1667, 1670, 1663, 1669,
- 87, 87, 87, 1672, 1675, 1673, 4153, 1661, 87, 87,
- 1680, 4153, 87, 87, 1676, 1674, 87, 1664, 1679, 1665,
- 1666, 1671, 87, 1667, 1670, 87, 1669, 87, 87, 1677,
- 1672, 1675, 1673, 1678, 87, 87, 1681, 87, 87, 1682,
- 87, 1676, 1674, 1683, 1684, 1679, 4153, 1687, 87, 1685,
- 1686, 1689, 1690, 1691, 1697, 87, 1677, 1688, 4153, 87,
- 1678, 1692, 1694, 1681, 1693, 87, 87, 1702, 87, 87,
- 1683, 1684, 87, 87, 1687, 87, 1685, 1686, 87, 1690,
- 87, 87, 1700, 1703, 1688, 1699, 87, 87, 1692, 1694,
+ 1667, 1666, 87, 87, 1670, 87, 1669, 1673, 87, 1674,
+ 87, 1663, 1664, 1671, 4172, 1662, 87, 1665, 87, 87,
+ 87, 87, 87, 1668, 1672, 4172, 1675, 1667, 1666, 1676,
+ 1677, 1670, 87, 1669, 1673, 1678, 1679, 1680, 1683, 1682,
+ 1671, 87, 1681, 1684, 87, 87, 1685, 87, 87, 87,
+ 87, 1672, 87, 1675, 1686, 1687, 1676, 1677, 87, 87,
+ 87, 1688, 1678, 1679, 1680, 1683, 1682, 87, 87, 1681,
+ 1684, 1689, 1690, 1685, 1692, 1693, 1691, 1694, 1695, 1696,
+ 1697, 87, 1687, 87, 1698, 1700, 87, 1699, 87, 1703,
+ 4172, 87, 4172, 87, 1708, 87, 87, 87, 1689, 1690,
- 1695, 1693, 1696, 1698, 1701, 87, 87, 1704, 87, 87,
- 87, 87, 1705, 1711, 1706, 87, 87, 4153, 1707, 1700,
- 1703, 4153, 1699, 87, 1708, 87, 1709, 1695, 1713, 1696,
- 1698, 1701, 1710, 1714, 1704, 87, 1712, 87, 87, 1705,
- 1711, 1706, 87, 1715, 1716, 1707, 87, 1717, 87, 87,
- 87, 1708, 87, 1709, 1718, 1713, 1719, 1720, 1721, 1710,
- 1714, 1723, 1722, 1712, 1724, 87, 87, 1725, 87, 87,
- 1715, 1716, 1728, 1726, 1717, 87, 1727, 4153, 87, 87,
- 87, 1718, 87, 1719, 1720, 1721, 1730, 1729, 1723, 1722,
- 1731, 1732, 1741, 1735, 87, 87, 87, 4153, 87, 87,
+ 87, 1692, 1693, 1691, 1694, 87, 1696, 87, 1705, 87,
+ 87, 1698, 1700, 1701, 1699, 1702, 87, 1704, 87, 87,
+ 1707, 87, 1706, 1709, 87, 1710, 87, 87, 1711, 1712,
+ 1713, 4172, 4172, 1730, 1714, 1705, 1715, 1716, 87, 1731,
+ 1701, 4172, 1702, 87, 1704, 87, 87, 1707, 87, 1706,
+ 1709, 87, 1710, 87, 87, 1711, 1712, 1713, 87, 1717,
+ 1718, 1714, 1719, 1715, 1716, 87, 1720, 1722, 1721, 4172,
+ 1723, 87, 1724, 87, 1725, 4172, 1734, 4172, 4172, 1726,
+ 1728, 87, 1727, 1732, 87, 87, 1717, 1718, 87, 1719,
+ 87, 87, 87, 1720, 1722, 1721, 87, 1723, 87, 1724,
- 1726, 1733, 1734, 1727, 87, 87, 87, 1736, 87, 87,
- 1737, 1738, 1739, 1730, 1729, 87, 87, 1731, 87, 87,
- 1735, 1740, 1742, 175, 87, 87, 1743, 87, 1733, 1734,
- 1744, 1745, 1751, 1750, 1736, 1752, 4153, 1737, 1738, 1739,
- 1756, 1755, 87, 1746, 1753, 1748, 87, 87, 1740, 1747,
- 87, 1749, 1754, 1743, 87, 87, 87, 1744, 87, 87,
- 1750, 1762, 1752, 87, 87, 87, 87, 1756, 1755, 1760,
- 1746, 1753, 1748, 1757, 1759, 1758, 1747, 87, 1749, 1754,
- 87, 1761, 1763, 87, 1764, 1765, 87, 4153, 87, 1767,
- 87, 87, 1766, 87, 1768, 1770, 1760, 1772, 1771, 1769,
+ 87, 1725, 1729, 87, 1733, 87, 1726, 1728, 87, 1727,
+ 1732, 1736, 1735, 1738, 1739, 1740, 87, 1737, 4172, 87,
+ 1743, 87, 87, 1741, 1744, 1742, 87, 1747, 1745, 1729,
+ 87, 1733, 1748, 87, 87, 87, 175, 87, 1736, 1735,
+ 87, 1739, 1740, 1751, 1737, 87, 1749, 1743, 1757, 1746,
+ 1741, 1744, 1742, 87, 1750, 1745, 1752, 1756, 1764, 87,
+ 87, 1758, 1753, 4172, 87, 1754, 4172, 87, 87, 87,
+ 87, 1755, 1759, 1749, 1762, 87, 1746, 1760, 87, 87,
+ 87, 1750, 1761, 1752, 1756, 1764, 1763, 87, 1758, 1753,
+ 87, 87, 1754, 87, 1765, 1766, 1767, 1768, 1755, 1759,
- 1757, 1759, 1758, 87, 87, 87, 87, 87, 1761, 1763,
- 1773, 1764, 1765, 1781, 1774, 87, 1767, 1780, 1775, 1766,
- 1776, 4153, 1770, 1777, 1772, 1771, 87, 87, 1784, 87,
- 87, 1778, 87, 1782, 1779, 87, 1783, 1773, 87, 87,
- 1781, 1774, 1785, 1786, 1780, 1775, 87, 1776, 1789, 1787,
- 1777, 1790, 87, 87, 1788, 1784, 87, 1791, 1778, 87,
- 1782, 1779, 4153, 1792, 1793, 87, 87, 1794, 87, 1785,
- 1786, 1795, 1796, 1797, 1799, 1789, 1798, 4153, 1790, 87,
- 87, 87, 1802, 87, 1791, 87, 87, 87, 1800, 87,
- 1792, 1793, 1806, 1801, 1794, 87, 1803, 87, 1795, 1796,
+ 87, 1762, 1769, 87, 1760, 87, 87, 1771, 1770, 1761,
+ 1776, 1774, 1772, 1763, 1773, 87, 1775, 87, 1777, 87,
+ 1778, 1765, 1766, 1767, 87, 87, 4172, 87, 87, 1769,
+ 87, 1779, 1781, 1780, 1771, 1770, 1786, 1776, 87, 1772,
+ 1787, 1773, 1788, 87, 87, 1777, 87, 1778, 1784, 1782,
+ 87, 1785, 1783, 1789, 87, 87, 1792, 1790, 1779, 1781,
+ 1780, 87, 4172, 1786, 1791, 87, 1793, 1787, 87, 1788,
+ 87, 1794, 87, 1795, 1798, 1784, 1782, 1797, 1785, 1783,
+ 1799, 87, 1805, 1792, 1790, 87, 87, 87, 1796, 87,
+ 1800, 1791, 1802, 1812, 1801, 87, 87, 1837, 87, 87,
- 1797, 1799, 87, 1798, 1804, 1808, 1805, 1807, 87, 1802,
- 1809, 4153, 1810, 87, 87, 1800, 87, 1811, 87, 87,
- 1801, 1814, 87, 1803, 87, 87, 1812, 1813, 1818, 87,
- 1815, 1804, 1808, 1805, 1807, 87, 1816, 1809, 87, 1810,
- 1817, 87, 1819, 87, 1811, 1820, 4153, 1821, 1814, 87,
- 87, 87, 1822, 1812, 1813, 1818, 1823, 1815, 87, 1824,
- 1827, 1826, 1828, 1816, 87, 87, 1825, 1817, 87, 1819,
- 1830, 1829, 1820, 87, 1821, 1831, 1834, 87, 87, 1822,
- 1832, 1836, 87, 1823, 87, 4153, 1824, 87, 1826, 1833,
- 1835, 1837, 87, 1825, 87, 1838, 87, 1830, 1829, 1839,
+ 1795, 1798, 87, 87, 1797, 1803, 1804, 1799, 1808, 1805,
+ 1811, 1806, 87, 87, 1807, 1796, 1809, 1800, 87, 1802,
+ 87, 1801, 1810, 87, 87, 87, 4172, 87, 4172, 1813,
+ 4172, 87, 1803, 1804, 87, 1808, 1814, 1811, 1806, 87,
+ 1815, 1807, 1816, 1809, 87, 1817, 1818, 87, 87, 1810,
+ 1821, 1819, 1820, 1822, 4172, 87, 1813, 87, 87, 87,
+ 1825, 1833, 1823, 1814, 1834, 1827, 4172, 1815, 1824, 1816,
+ 87, 87, 1817, 1818, 87, 87, 1828, 1821, 1819, 1820,
+ 1822, 87, 87, 87, 1826, 1829, 1830, 1825, 1832, 1823,
+ 87, 1831, 1827, 87, 1835, 1824, 87, 87, 87, 1836,
- 87, 87, 87, 1834, 1843, 4153, 1844, 1832, 4153, 1840,
- 1846, 4153, 87, 87, 1845, 1852, 1833, 1835, 1851, 87,
- 1850, 1848, 87, 87, 1847, 87, 1839, 87, 1841, 87,
- 1842, 87, 87, 1844, 87, 87, 1840, 1846, 1849, 87,
- 87, 1845, 1852, 1853, 87, 1851, 1854, 1850, 1848, 1855,
- 87, 1847, 1857, 1856, 1858, 1841, 1860, 1842, 1862, 1859,
- 87, 1861, 87, 1864, 1865, 1849, 87, 1863, 4153, 1866,
- 1853, 87, 87, 1868, 87, 1867, 1855, 87, 87, 1857,
- 1856, 87, 1869, 1874, 1870, 1862, 87, 1876, 87, 87,
- 1864, 1865, 87, 87, 1863, 87, 1866, 1871, 1873, 1872,
+ 1840, 1838, 87, 1828, 87, 1839, 87, 87, 1841, 1842,
+ 1843, 1826, 1829, 1830, 87, 1832, 87, 1844, 1831, 1845,
+ 1849, 1835, 87, 4172, 4172, 87, 1836, 1840, 1838, 1846,
+ 87, 1850, 1839, 1851, 1852, 1841, 1857, 1853, 1860, 1856,
+ 1854, 87, 87, 87, 4172, 87, 1845, 87, 1847, 87,
+ 1848, 87, 87, 87, 87, 87, 1846, 1855, 1850, 87,
+ 1851, 1852, 87, 1857, 1853, 1858, 1856, 1854, 1859, 87,
+ 87, 1861, 87, 1862, 1863, 1847, 1864, 1848, 1866, 1868,
+ 1871, 1865, 87, 1867, 1855, 1870, 87, 87, 87, 1869,
+ 1875, 1872, 1858, 87, 1880, 1859, 87, 1873, 1861, 87,
- 1868, 1875, 1867, 1877, 4153, 87, 87, 87, 1879, 1878,
- 1881, 1870, 87, 1882, 87, 87, 87, 1880, 87, 87,
- 87, 87, 1883, 87, 1871, 1873, 1872, 1884, 1875, 1885,
- 1877, 1887, 4153, 1886, 4153, 1879, 1878, 87, 1888, 87,
- 1882, 1891, 87, 87, 1880, 1889, 87, 1890, 1921, 1883,
- 1893, 87, 1894, 87, 87, 87, 1885, 1892, 1887, 87,
- 1886, 1895, 87, 87, 1899, 1888, 1900, 1896, 1891, 1903,
- 1901, 1898, 1889, 1897, 1890, 87, 1902, 1893, 87, 1894,
- 87, 87, 1910, 87, 1892, 87, 87, 1905, 1895, 1904,
- 1906, 87, 87, 87, 1896, 1914, 1903, 1901, 1898, 87,
+ 1862, 1863, 87, 1874, 4172, 1876, 1868, 1871, 87, 1877,
+ 87, 87, 1870, 87, 1878, 87, 1869, 87, 1872, 1879,
+ 1881, 87, 87, 1882, 1873, 87, 87, 1884, 87, 1883,
+ 1874, 1885, 1876, 1888, 87, 1886, 1877, 1889, 87, 1887,
+ 87, 1878, 87, 87, 1891, 87, 1879, 1881, 1890, 4172,
+ 1893, 1892, 1894, 1895, 1884, 87, 1883, 87, 1885, 87,
+ 87, 87, 1886, 1896, 1889, 87, 1887, 1901, 87, 87,
+ 1898, 87, 1900, 1897, 1902, 1890, 87, 1893, 1892, 1894,
+ 1895, 87, 1899, 87, 87, 1906, 1907, 1903, 87, 1908,
+ 1896, 1905, 1909, 87, 1901, 87, 1904, 1898, 87, 1900,
- 1897, 87, 1907, 1902, 87, 87, 1908, 1913, 87, 1910,
- 1911, 1912, 1916, 87, 1905, 1918, 1904, 1906, 1915, 1909,
- 87, 1917, 1914, 1919, 87, 1920, 87, 87, 87, 1907,
- 1923, 87, 87, 1908, 1913, 1924, 1925, 1911, 1912, 1916,
- 87, 1922, 1918, 1926, 87, 1915, 1909, 87, 1917, 1927,
- 87, 1929, 1920, 87, 1928, 1930, 1932, 1923, 87, 1933,
- 87, 87, 1931, 1925, 1935, 1934, 87, 87, 1922, 87,
- 1926, 1936, 87, 87, 87, 1937, 1927, 87, 1929, 1938,
- 1939, 1928, 1930, 1940, 1941, 1959, 87, 1943, 87, 1931,
- 87, 1942, 1934, 1944, 1948, 4153, 87, 87, 1936, 1947,
+ 1897, 1902, 1917, 1910, 87, 1918, 87, 1912, 1911, 1899,
+ 1913, 87, 87, 87, 1903, 87, 1908, 87, 1905, 1909,
+ 87, 1920, 1914, 1904, 87, 87, 1915, 87, 87, 1917,
+ 1910, 1919, 1918, 1921, 1912, 1911, 4172, 1913, 1923, 1916,
+ 87, 1922, 1926, 1925, 1928, 87, 1931, 87, 1920, 1914,
+ 87, 87, 1924, 1915, 87, 1927, 4172, 1930, 1919, 87,
+ 1921, 1929, 1933, 87, 1932, 1923, 1916, 1934, 1922, 87,
+ 1925, 87, 1939, 87, 1935, 1937, 87, 87, 87, 1924,
+ 1938, 87, 1927, 1936, 1930, 87, 87, 87, 1929, 1933,
+ 87, 1932, 87, 87, 1934, 1940, 1941, 1942, 1944, 1946,
- 87, 1952, 1937, 4153, 87, 87, 1938, 1950, 1945, 1949,
- 1940, 87, 87, 1946, 87, 87, 87, 87, 1942, 87,
- 1944, 1948, 1951, 87, 87, 87, 1947, 87, 1952, 87,
- 1953, 1954, 1956, 1955, 1950, 1945, 1949, 87, 1958, 1957,
- 1946, 87, 87, 1960, 87, 1961, 1962, 4153, 1966, 1951,
- 1963, 87, 1964, 4153, 87, 87, 1969, 1953, 1954, 1956,
- 1955, 87, 87, 87, 1965, 1958, 1957, 1967, 1971, 87,
- 1960, 87, 1961, 1962, 87, 1966, 1968, 1963, 87, 1964,
- 87, 1970, 1972, 1969, 1974, 87, 1977, 1975, 1981, 1973,
- 1976, 1965, 87, 87, 1967, 87, 87, 1978, 87, 1979,
+ 1943, 1935, 1937, 1948, 87, 87, 87, 1938, 1945, 1947,
+ 1936, 1950, 1955, 1949, 4172, 1951, 87, 1952, 87, 1954,
+ 87, 1953, 87, 1941, 4172, 1944, 87, 1943, 87, 87,
+ 87, 87, 87, 1957, 87, 1945, 1947, 87, 87, 1955,
+ 1949, 1959, 1951, 87, 1952, 1956, 1954, 1958, 1953, 1960,
+ 1961, 87, 87, 1963, 87, 1962, 87, 1964, 1965, 1966,
+ 1957, 87, 1967, 87, 4172, 87, 1969, 87, 1959, 1968,
+ 4172, 87, 1956, 1978, 1958, 87, 1960, 1961, 1970, 87,
+ 1963, 1971, 1962, 87, 1964, 1965, 1973, 87, 87, 1967,
+ 87, 87, 1972, 1969, 1974, 1975, 1968, 1977, 1976, 87,
- 1980, 1982, 87, 1968, 1984, 87, 1983, 87, 1970, 1972,
- 87, 1974, 1986, 1977, 1975, 87, 1973, 1976, 1985, 1987,
- 87, 4153, 87, 1989, 1978, 1994, 1979, 1980, 87, 1988,
- 175, 1984, 87, 87, 87, 1993, 87, 87, 87, 1986,
- 1990, 1991, 1992, 87, 1995, 1985, 1987, 1997, 87, 2002,
- 1989, 1996, 1994, 1998, 87, 87, 1988, 1999, 2000, 2003,
- 4153, 2004, 1993, 2008, 87, 2005, 2006, 1990, 1991, 1992,
- 87, 1995, 87, 87, 1997, 87, 87, 87, 1996, 2001,
- 1998, 2007, 87, 87, 1999, 2000, 2003, 87, 2004, 2009,
- 2010, 87, 2005, 2006, 2012, 87, 87, 2011, 2013, 4153,
+ 87, 1981, 1984, 1979, 87, 1970, 1982, 87, 1971, 87,
+ 1980, 87, 87, 1973, 1987, 1983, 1985, 87, 87, 1972,
+ 87, 1974, 1975, 87, 1977, 1976, 87, 87, 1981, 1984,
+ 1979, 1988, 1986, 1982, 1992, 4172, 87, 1980, 1991, 87,
+ 87, 1987, 1983, 1985, 1989, 1993, 1994, 1995, 87, 1990,
+ 1996, 1999, 1997, 1998, 4172, 2002, 87, 175, 87, 1986,
+ 87, 1992, 87, 87, 87, 1991, 2000, 87, 87, 2001,
+ 2003, 2009, 1993, 1994, 1995, 2007, 87, 1996, 1999, 1997,
+ 1998, 87, 2002, 2004, 2005, 2010, 2008, 87, 2006, 2013,
+ 87, 2015, 87, 2000, 87, 87, 2001, 2003, 87, 87,
- 4153, 2014, 2015, 87, 2016, 4153, 2001, 87, 2007, 87,
- 87, 2017, 2018, 2019, 2020, 4153, 2009, 87, 2021, 87,
- 2022, 2012, 87, 2023, 2011, 87, 87, 2026, 2014, 2015,
- 2027, 2016, 87, 2024, 87, 87, 87, 2025, 2017, 2018,
- 2019, 2020, 87, 2028, 87, 2021, 87, 2022, 2029, 87,
- 2023, 87, 87, 4153, 2026, 2030, 87, 2027, 2034, 2035,
- 2024, 2036, 87, 87, 2025, 2031, 2039, 4153, 2032, 2041,
- 2028, 87, 2040, 87, 2037, 2029, 2042, 2043, 2044, 2045,
- 2033, 87, 2030, 87, 87, 2034, 2046, 2047, 2036, 87,
- 2038, 87, 2031, 2039, 87, 2032, 2041, 2048, 87, 2040,
+ 2011, 2012, 2007, 87, 2014, 2017, 87, 2018, 87, 2020,
+ 2004, 2005, 2010, 2008, 87, 2006, 2013, 2016, 2023, 2019,
+ 2024, 2025, 87, 87, 87, 2021, 87, 2011, 2012, 87,
+ 2022, 2014, 87, 87, 2018, 2033, 87, 87, 87, 2026,
+ 87, 87, 2028, 87, 2016, 2023, 2019, 2024, 2025, 2029,
+ 2027, 2030, 2021, 87, 2031, 2032, 2035, 2022, 2034, 87,
+ 2042, 87, 2033, 87, 87, 87, 2026, 87, 87, 2028,
+ 4172, 2036, 2037, 2041, 2043, 87, 2029, 2027, 2030, 87,
+ 2049, 2031, 2032, 2035, 87, 2034, 87, 2038, 87, 2044,
+ 2039, 2046, 87, 2047, 2050, 2048, 87, 87, 2036, 2037,
- 87, 2037, 2049, 2042, 87, 2044, 2050, 2033, 2051, 87,
- 2053, 87, 2052, 2054, 2047, 2055, 2057, 2038, 87, 87,
- 2056, 87, 87, 87, 2048, 2058, 87, 2059, 87, 2049,
- 87, 2060, 2061, 2063, 2064, 2051, 4153, 2053, 87, 2052,
- 2054, 2062, 2055, 2065, 87, 87, 4153, 2056, 87, 2067,
- 2068, 4153, 4153, 87, 2066, 87, 87, 87, 2060, 87,
- 2063, 87, 87, 87, 87, 87, 2069, 2071, 2062, 2072,
- 2065, 2070, 2073, 2074, 87, 87, 2067, 2068, 2075, 87,
- 2077, 2066, 87, 2078, 2079, 87, 87, 87, 2076, 2080,
- 87, 2081, 87, 2069, 2071, 2085, 2072, 2082, 2070, 2073,
+ 2041, 2043, 2040, 2051, 87, 2045, 87, 2049, 2052, 87,
+ 2053, 87, 2054, 87, 2038, 87, 2044, 2039, 2046, 2055,
+ 2047, 87, 2048, 2056, 2057, 2058, 2060, 2059, 2061, 2040,
+ 2051, 2062, 2045, 2063, 87, 87, 87, 2064, 87, 2054,
+ 87, 87, 87, 2065, 2066, 87, 2055, 87, 2068, 87,
+ 2056, 2067, 2058, 2060, 2059, 2061, 87, 87, 2062, 2069,
+ 2063, 2070, 2071, 87, 2074, 2072, 2077, 2075, 2073, 87,
+ 4172, 87, 2076, 87, 87, 87, 87, 87, 2067, 87,
+ 87, 87, 4172, 87, 2084, 2079, 2069, 87, 2070, 87,
+ 2078, 2074, 2072, 2077, 2075, 2073, 2080, 87, 87, 2076,
- 2074, 2084, 87, 87, 2088, 2075, 87, 2077, 87, 87,
- 2078, 2079, 87, 2083, 2086, 2076, 2080, 87, 2081, 2087,
- 2089, 2092, 2085, 2091, 2082, 87, 87, 87, 2093, 2094,
- 2095, 2088, 2099, 87, 2097, 2141, 87, 4153, 2090, 87,
- 2083, 2086, 2098, 2096, 87, 87, 2087, 2089, 2092, 87,
- 2091, 2108, 87, 2101, 87, 87, 2094, 2095, 87, 2099,
- 87, 2097, 87, 2100, 2102, 2090, 87, 87, 2103, 2098,
- 2096, 87, 2107, 4153, 4153, 2111, 4153, 2117, 2108, 2104,
- 2101, 2105, 87, 2106, 87, 2109, 87, 2114, 2110, 2112,
- 2100, 2102, 87, 2116, 2113, 2103, 87, 2118, 2115, 2107,
+ 2081, 2082, 2083, 4172, 87, 2085, 2086, 87, 2091, 87,
+ 87, 2084, 2079, 87, 87, 2087, 2088, 2078, 2092, 2089,
+ 2100, 4172, 2090, 2080, 4172, 87, 2093, 2081, 2082, 2083,
+ 87, 87, 2085, 2086, 87, 87, 87, 87, 2095, 2096,
+ 87, 2094, 2087, 2088, 2098, 2092, 2089, 87, 87, 2090,
+ 4172, 87, 2101, 2093, 2099, 2102, 2106, 2097, 2103, 87,
+ 2104, 2107, 2105, 87, 87, 2095, 2096, 2108, 2094, 87,
+ 87, 2098, 87, 87, 87, 2109, 87, 87, 4172, 2101,
+ 2114, 2099, 2102, 2106, 2097, 2103, 87, 2104, 2107, 2105,
+ 2110, 2115, 87, 87, 2108, 2116, 2123, 2118, 2117, 2124,
- 87, 87, 2111, 87, 87, 2121, 2104, 2119, 2105, 2120,
- 2106, 2122, 2109, 2124, 2114, 2110, 2112, 87, 87, 2123,
- 2116, 2113, 87, 87, 87, 2115, 2127, 2125, 2129, 2126,
- 2132, 87, 2121, 2128, 2119, 87, 2120, 87, 2122, 2130,
- 87, 87, 4153, 87, 2135, 2131, 2123, 2134, 87, 2142,
- 87, 87, 87, 2127, 2125, 2129, 2126, 2132, 87, 2133,
- 2128, 2136, 87, 87, 2140, 2137, 2130, 87, 2138, 87,
- 2139, 2135, 2131, 87, 2134, 2145, 87, 2144, 2143, 2151,
- 2147, 2146, 87, 87, 87, 2148, 2133, 2155, 2136, 87,
- 87, 2140, 2137, 87, 2149, 2138, 87, 2139, 87, 2150,
+ 2125, 2111, 2109, 2112, 2119, 2113, 2121, 2114, 87, 2120,
+ 2122, 87, 87, 87, 87, 87, 87, 2110, 2115, 2126,
+ 87, 2128, 2116, 2123, 2118, 2117, 87, 87, 2111, 2127,
+ 2112, 2119, 2113, 2121, 87, 2129, 2120, 2122, 87, 87,
+ 2130, 2131, 2133, 2132, 2134, 2135, 2126, 4172, 2128, 2139,
+ 87, 2136, 87, 2137, 2138, 87, 2127, 87, 87, 87,
+ 87, 2140, 2129, 2149, 2142, 4172, 87, 2130, 87, 2133,
+ 2132, 2134, 2135, 87, 2141, 87, 2139, 87, 2136, 2143,
+ 2137, 2138, 87, 87, 2144, 2148, 2145, 2147, 2140, 2146,
+ 87, 2142, 87, 2150, 2153, 87, 2154, 87, 2151, 2156,
- 2152, 87, 2145, 2158, 2144, 2143, 2151, 2147, 2146, 2153,
- 2154, 87, 2148, 87, 2155, 87, 2156, 2157, 4153, 87,
- 2159, 87, 2168, 4153, 2160, 2165, 87, 2152, 87, 2166,
- 2158, 2161, 2163, 2167, 4153, 2164, 2153, 2154, 87, 2169,
- 87, 2175, 4153, 2156, 2157, 2162, 87, 2159, 87, 2168,
- 87, 2160, 2165, 87, 87, 87, 2166, 87, 2161, 2163,
- 2167, 2170, 2164, 87, 2172, 2171, 2169, 2176, 2175, 2173,
- 87, 87, 2162, 87, 2174, 2177, 2178, 2179, 2180, 87,
- 87, 2182, 2183, 2186, 2181, 2184, 2185, 2191, 2170, 2195,
- 87, 2172, 2171, 87, 2176, 2187, 2190, 4153, 87, 87,
+ 2152, 2141, 2155, 87, 87, 87, 2143, 87, 87, 2159,
+ 87, 2144, 2148, 2145, 2147, 87, 2146, 2157, 87, 2160,
+ 87, 2153, 2158, 2154, 2162, 2151, 2156, 2152, 2161, 2155,
+ 87, 87, 2163, 87, 87, 2166, 2159, 2164, 4172, 2165,
+ 4172, 2167, 4172, 2169, 4172, 2168, 2160, 2174, 2190, 87,
+ 87, 2162, 2173, 87, 2175, 2161, 2176, 2170, 87, 2163,
+ 2171, 87, 2166, 2172, 2164, 87, 2165, 87, 2167, 87,
+ 2169, 87, 2168, 2177, 2174, 87, 87, 2178, 87, 2173,
+ 2180, 2175, 87, 2176, 2170, 2179, 87, 2171, 2181, 87,
+ 2172, 87, 2183, 2182, 2184, 2186, 2185, 87, 2187, 2188,
- 4153, 87, 2177, 2178, 2179, 4153, 2192, 87, 87, 87,
- 87, 2181, 2184, 2185, 87, 87, 87, 2188, 2189, 87,
- 87, 87, 2187, 2190, 87, 87, 2193, 2196, 2197, 2198,
- 2199, 4153, 2194, 2192, 2202, 4153, 87, 87, 87, 2200,
- 2201, 2211, 2204, 2212, 2188, 2189, 87, 4153, 4153, 2203,
- 87, 2205, 87, 2193, 2196, 2197, 2198, 2199, 87, 2194,
- 87, 2202, 87, 87, 2206, 87, 2200, 2201, 2207, 2204,
- 2210, 2208, 2213, 87, 2214, 87, 2203, 87, 2205, 2215,
- 2216, 87, 2218, 2219, 2217, 87, 2220, 87, 87, 2221,
- 87, 2206, 2209, 87, 4153, 2207, 87, 2210, 87, 2213,
+ 2177, 87, 2191, 4172, 2178, 87, 87, 2180, 2192, 2189,
+ 2194, 87, 2179, 2193, 2198, 2199, 2195, 87, 87, 2183,
+ 87, 2184, 2186, 2185, 2203, 2187, 87, 87, 4172, 4172,
+ 87, 87, 2196, 2209, 87, 2192, 2189, 87, 2197, 87,
+ 2193, 2198, 87, 2195, 2200, 87, 2201, 87, 2204, 2205,
+ 2208, 4172, 2202, 2206, 2207, 87, 87, 87, 87, 2196,
+ 2209, 87, 87, 2218, 2210, 2197, 2212, 87, 2216, 87,
+ 87, 2200, 2211, 2201, 2213, 2204, 2205, 2208, 87, 2202,
+ 2206, 2207, 87, 2214, 87, 2215, 87, 2219, 87, 2217,
+ 2218, 2210, 2220, 2212, 2221, 87, 87, 4172, 87, 2211,
- 87, 2214, 2225, 2222, 2223, 2224, 87, 2216, 87, 2218,
- 87, 2217, 2227, 2220, 87, 87, 2226, 2229, 2228, 2209,
- 2230, 87, 4153, 87, 87, 2234, 2231, 2238, 2232, 87,
- 2222, 2223, 2224, 2233, 2236, 87, 2235, 87, 2237, 2227,
- 87, 2241, 87, 2226, 2229, 2228, 87, 2230, 87, 87,
- 87, 87, 2234, 2231, 2238, 2232, 87, 2239, 2240, 2242,
- 2233, 2236, 2243, 2235, 2245, 2237, 2244, 87, 87, 2247,
- 87, 4153, 175, 2246, 87, 2249, 4153, 87, 2248, 2250,
- 2253, 2252, 87, 4153, 2239, 2240, 2242, 87, 2251, 2243,
- 87, 87, 2256, 2244, 4153, 87, 2247, 87, 87, 87,
+ 2222, 2213, 2223, 2227, 2224, 2226, 2225, 2229, 2228, 2233,
+ 2214, 87, 2215, 87, 87, 87, 2217, 2231, 87, 87,
+ 2230, 2221, 87, 2235, 87, 87, 2236, 2222, 87, 87,
+ 87, 2224, 2226, 2225, 2232, 2228, 87, 2238, 2234, 87,
+ 2239, 4172, 2237, 87, 2231, 87, 87, 2230, 87, 87,
+ 2235, 2241, 2240, 2236, 4172, 87, 2244, 2242, 2245, 87,
+ 4172, 2232, 87, 2246, 2238, 2234, 2249, 2239, 2243, 2237,
+ 87, 2247, 87, 2251, 2250, 2253, 87, 2248, 2241, 2240,
+ 4172, 87, 87, 2244, 2242, 2245, 175, 87, 87, 87,
+ 2246, 2252, 2254, 87, 2255, 2243, 2256, 2257, 2247, 87,
- 2246, 2254, 2249, 87, 2255, 2248, 2250, 2253, 2252, 87,
- 2257, 87, 2258, 2259, 2260, 2251, 2262, 2263, 2261, 2265,
- 2266, 87, 2268, 87, 87, 87, 2264, 2269, 2254, 2270,
- 2272, 2255, 87, 87, 87, 2271, 2267, 2257, 4153, 2258,
- 2259, 87, 87, 2262, 87, 2261, 2273, 2266, 87, 2268,
- 87, 87, 2278, 2264, 87, 87, 87, 2272, 2274, 87,
- 2276, 2275, 2271, 2267, 2279, 87, 87, 2277, 2281, 87,
- 87, 2280, 2282, 2273, 87, 2283, 87, 4153, 2284, 2278,
- 2292, 4153, 4153, 87, 87, 2274, 87, 2276, 2275, 87,
- 2285, 2279, 2290, 2293, 2277, 2281, 4153, 87, 2280, 2282,
+ 2251, 2250, 87, 2261, 2248, 2258, 2260, 87, 2263, 2262,
+ 87, 2259, 87, 2264, 87, 87, 87, 87, 2252, 2254,
+ 2266, 2255, 87, 2256, 2257, 87, 87, 2265, 2267, 87,
+ 2261, 2268, 2258, 2260, 4172, 2263, 2262, 2269, 2259, 2270,
+ 2271, 2272, 87, 2273, 2274, 87, 87, 2266, 2277, 87,
+ 2278, 2275, 2281, 4172, 2265, 2267, 87, 2279, 87, 2276,
+ 2280, 87, 4172, 87, 2269, 2301, 2270, 87, 2272, 87,
+ 87, 2274, 87, 2284, 2282, 87, 87, 87, 2275, 2281,
+ 87, 87, 87, 2283, 2279, 87, 2276, 2280, 87, 2285,
+ 2286, 2287, 2289, 2288, 2290, 4172, 2293, 87, 87, 4172,
- 87, 4153, 2283, 2286, 2287, 2284, 2288, 87, 87, 2291,
- 2294, 87, 2295, 2289, 87, 2299, 87, 2285, 2296, 2290,
- 2304, 87, 87, 87, 2297, 87, 87, 2298, 87, 2303,
- 2286, 2287, 87, 2288, 2300, 2305, 2291, 2294, 87, 2295,
- 2289, 2306, 2299, 2307, 2301, 2296, 2302, 87, 87, 2308,
- 2312, 2297, 2309, 2314, 2298, 87, 2303, 87, 87, 87,
- 2310, 2300, 87, 2311, 2316, 2313, 87, 2315, 2306, 87,
- 87, 2301, 2317, 2302, 2318, 87, 2308, 87, 2319, 2309,
- 2320, 87, 87, 2324, 4153, 87, 2321, 2310, 87, 2326,
- 2311, 87, 2313, 2322, 2315, 87, 87, 2323, 87, 2317,
+ 2284, 2282, 2291, 2292, 2300, 2298, 87, 87, 2295, 2294,
+ 2283, 87, 87, 87, 87, 87, 2285, 2286, 2287, 2289,
+ 2288, 2290, 2299, 2293, 87, 87, 2296, 87, 2303, 2291,
+ 2292, 87, 2298, 2297, 87, 2295, 2294, 2302, 2304, 87,
+ 2306, 2308, 2305, 87, 2312, 2307, 87, 2311, 87, 2299,
+ 87, 87, 87, 2296, 2313, 2303, 2314, 2309, 2315, 2310,
+ 2297, 2316, 2322, 87, 2302, 2304, 87, 2306, 2308, 2305,
+ 87, 87, 2307, 87, 2311, 2320, 2317, 2321, 2324, 2326,
+ 2328, 87, 87, 2314, 2309, 87, 2310, 87, 2316, 2318,
+ 2319, 2323, 2325, 2327, 87, 87, 87, 87, 87, 2329,
- 2327, 2330, 2325, 2328, 2331, 2319, 87, 2320, 87, 87,
- 87, 87, 2329, 2321, 2332, 87, 2326, 4153, 87, 2334,
- 2322, 87, 2333, 87, 2323, 2339, 87, 87, 2330, 2325,
- 2328, 2331, 87, 2345, 2340, 2335, 2336, 2337, 2341, 2329,
- 87, 2332, 2338, 87, 87, 87, 2342, 2343, 2344, 2333,
- 87, 87, 2339, 87, 87, 87, 2350, 2346, 2353, 2349,
- 2345, 2340, 2335, 2336, 2337, 2341, 2347, 2351, 87, 2338,
- 87, 2348, 87, 2352, 2343, 2344, 2354, 2355, 87, 87,
- 2356, 4153, 2358, 2350, 2346, 2353, 2349, 87, 2357, 87,
- 87, 2361, 87, 2359, 2351, 87, 2360, 87, 87, 2362,
+ 87, 87, 87, 2317, 2321, 2331, 2330, 2328, 87, 2332,
+ 87, 87, 2334, 2335, 4172, 87, 2318, 2319, 2323, 2325,
+ 2327, 87, 2337, 2333, 2338, 2336, 2329, 2342, 87, 87,
+ 87, 2339, 2331, 2330, 87, 2340, 87, 87, 2341, 2334,
+ 87, 2343, 2344, 2345, 2350, 4172, 87, 2347, 2346, 2337,
+ 2333, 2338, 2336, 87, 87, 2348, 87, 2353, 2339, 87,
+ 87, 87, 2340, 2354, 87, 2341, 2349, 2357, 2343, 2344,
+ 2345, 2351, 2352, 87, 2347, 2346, 87, 87, 87, 87,
+ 87, 2355, 2348, 2358, 2353, 87, 2356, 2359, 2360, 2361,
+ 2354, 2362, 2365, 2349, 2357, 87, 4172, 2367, 2351, 2352,
- 2352, 87, 87, 2364, 2355, 87, 2365, 2356, 87, 2358,
- 2363, 87, 2366, 87, 2367, 2357, 2368, 87, 2361, 2369,
- 2359, 2370, 2371, 2360, 2373, 2372, 87, 87, 87, 87,
- 2364, 2375, 2374, 2365, 2378, 2376, 2377, 2363, 2379, 2366,
- 87, 2367, 87, 87, 87, 2383, 87, 87, 2370, 87,
- 87, 2373, 2372, 87, 2382, 2384, 2380, 2381, 87, 2374,
- 2386, 87, 2376, 2377, 87, 2379, 87, 87, 87, 2389,
- 2387, 2390, 87, 2385, 2388, 87, 2391, 87, 2392, 2393,
- 87, 2382, 2384, 2380, 2381, 87, 2394, 2386, 87, 87,
- 2395, 2398, 2396, 2399, 2397, 87, 2389, 2387, 87, 87,
+ 2363, 87, 2364, 2366, 87, 87, 87, 2370, 2368, 87,
+ 2358, 87, 87, 87, 2359, 2360, 2361, 87, 87, 2365,
+ 2369, 2371, 87, 87, 2367, 2372, 87, 2363, 2374, 2364,
+ 2366, 2373, 2376, 87, 87, 2368, 2375, 2377, 87, 2378,
+ 2379, 2380, 2381, 87, 2386, 2383, 87, 2369, 2371, 4172,
+ 2389, 87, 2372, 2382, 2385, 2374, 2384, 2391, 2373, 87,
+ 87, 87, 87, 2375, 87, 87, 2378, 87, 2380, 2381,
+ 2388, 87, 87, 2387, 87, 2390, 87, 2389, 87, 87,
+ 2382, 2385, 2392, 2384, 2393, 2395, 2394, 2399, 87, 87,
+ 87, 2398, 2396, 2397, 87, 2400, 87, 2388, 87, 2403,
- 2385, 2388, 2400, 2391, 2401, 2392, 2402, 4153, 87, 4153,
- 87, 87, 2403, 2394, 87, 2405, 2408, 2404, 87, 2396,
- 2399, 2397, 87, 87, 2406, 2410, 2409, 87, 2411, 2400,
- 2407, 87, 2413, 87, 87, 87, 87, 87, 87, 2403,
- 87, 87, 2405, 2408, 2404, 2412, 87, 2414, 2416, 87,
- 2417, 2406, 2410, 2409, 2415, 2411, 2418, 2407, 87, 2413,
- 2419, 87, 2420, 2421, 4153, 87, 2424, 2427, 2422, 87,
- 87, 2425, 2412, 87, 2414, 87, 87, 2417, 2426, 2429,
- 87, 2415, 87, 2418, 2423, 2428, 2432, 87, 87, 2420,
- 2421, 87, 87, 2424, 87, 2422, 2430, 2434, 2425, 2431,
+ 2387, 2402, 2390, 2404, 2401, 87, 2407, 2406, 2410, 87,
+ 87, 2393, 2395, 2394, 87, 87, 2405, 87, 2398, 2396,
+ 2397, 87, 2400, 87, 2408, 2411, 2403, 87, 2409, 2413,
+ 2414, 2401, 2412, 87, 2406, 87, 87, 2415, 87, 2417,
+ 87, 2419, 87, 2405, 87, 2416, 2418, 87, 2422, 87,
+ 2425, 2408, 87, 87, 87, 2409, 2413, 2414, 2420, 2412,
+ 2423, 87, 2426, 87, 2415, 87, 2417, 87, 2419, 2421,
+ 87, 2424, 2416, 2418, 87, 2422, 2427, 87, 87, 2428,
+ 2430, 2429, 87, 87, 4172, 2420, 4172, 2423, 87, 2426,
+ 2431, 2436, 87, 2433, 2434, 4172, 2421, 2435, 2424, 87,
- 87, 2433, 2435, 2436, 2437, 2426, 2429, 87, 87, 87,
- 2438, 2423, 2428, 2432, 2441, 4153, 2439, 4153, 87, 2442,
- 87, 2440, 87, 2430, 2434, 87, 2431, 87, 2433, 2435,
- 87, 2437, 87, 87, 2443, 2445, 2444, 2438, 2446, 2449,
- 2451, 87, 2447, 2439, 87, 87, 2442, 87, 2440, 87,
- 2450, 2448, 87, 2452, 2453, 2454, 2456, 87, 87, 87,
- 2455, 2443, 2445, 2444, 2458, 2446, 2457, 2451, 87, 2447,
- 2462, 87, 87, 2463, 2467, 87, 2464, 2450, 2448, 87,
- 2452, 2453, 87, 2456, 87, 2459, 87, 2455, 2461, 2465,
- 2460, 2458, 87, 2457, 2466, 87, 2468, 2462, 2469, 87,
+ 87, 2437, 87, 2427, 87, 4172, 2432, 2430, 2429, 2441,
+ 4172, 87, 2442, 87, 2438, 2439, 2443, 2431, 87, 87,
+ 2433, 2434, 87, 2440, 2435, 2445, 2444, 87, 2437, 2446,
+ 4172, 87, 87, 2432, 2447, 2448, 2441, 87, 87, 2442,
+ 2449, 2438, 2439, 2443, 87, 2450, 2452, 87, 2451, 2454,
+ 2440, 87, 87, 2444, 87, 2453, 2446, 87, 2455, 87,
+ 2458, 2447, 2448, 87, 2461, 87, 4172, 2449, 2460, 2459,
+ 2456, 87, 87, 2452, 2457, 2451, 2454, 87, 87, 2462,
+ 87, 87, 2453, 2463, 2465, 2455, 87, 2464, 2476, 2472,
+ 2466, 2461, 87, 87, 2467, 2460, 2459, 2456, 2470, 2468,
- 87, 87, 2470, 87, 2471, 2472, 87, 2473, 2475, 2474,
- 2478, 2480, 2459, 2476, 2477, 2461, 87, 2460, 2481, 87,
- 2483, 87, 87, 87, 87, 2469, 2482, 4153, 87, 2470,
- 87, 2471, 87, 2479, 2473, 2475, 2474, 87, 87, 87,
- 2476, 2477, 87, 87, 2484, 2481, 2486, 87, 87, 2485,
- 2487, 2488, 87, 2482, 2489, 2491, 87, 2490, 2494, 2492,
- 2479, 2493, 87, 2495, 2496, 87, 87, 2497, 175, 2500,
- 4153, 2484, 4153, 2486, 4153, 2501, 2485, 2487, 2488, 87,
- 2498, 2489, 87, 87, 2490, 87, 2492, 87, 2493, 87,
- 2495, 87, 87, 2499, 2502, 2504, 87, 2503, 4153, 87,
+ 2471, 2457, 87, 2473, 2469, 87, 2462, 87, 87, 2477,
+ 87, 2465, 2479, 87, 2464, 87, 87, 2466, 2474, 2481,
+ 87, 2467, 87, 2475, 2487, 2470, 2468, 2471, 2478, 87,
+ 87, 2469, 2480, 2482, 87, 2483, 2486, 2484, 87, 2479,
+ 2485, 87, 2489, 2491, 2488, 2490, 2492, 87, 87, 87,
+ 87, 87, 87, 2493, 2495, 2478, 87, 87, 87, 2480,
+ 2482, 87, 2483, 2486, 2484, 87, 87, 2485, 2494, 2496,
+ 2491, 2488, 2490, 87, 87, 87, 175, 2497, 2498, 2499,
+ 2493, 2495, 2500, 2501, 87, 2502, 87, 2503, 2506, 2504,
+ 2505, 2507, 87, 2509, 4172, 2494, 2496, 4172, 4172, 4172,
- 87, 87, 2501, 2505, 2506, 2508, 2510, 2498, 2509, 2507,
- 2517, 2511, 87, 87, 2513, 2512, 87, 2516, 87, 2514,
- 2499, 2502, 2504, 2522, 2503, 87, 87, 87, 2515, 87,
- 2505, 87, 2508, 2510, 87, 2509, 87, 87, 2511, 87,
- 87, 2513, 2512, 87, 2516, 2518, 2514, 2519, 2520, 2521,
- 87, 2523, 2525, 2524, 2526, 2515, 2527, 2530, 87, 2528,
- 4153, 87, 87, 87, 4153, 2529, 2532, 2554, 2531, 87,
- 87, 87, 2518, 87, 2519, 2520, 2521, 87, 2523, 2525,
- 2524, 2526, 87, 2534, 87, 2533, 2528, 87, 87, 87,
- 2535, 2537, 2529, 2532, 87, 2531, 87, 2538, 2540, 87,
+ 2510, 87, 2511, 87, 2497, 2498, 2499, 87, 2514, 87,
+ 2501, 87, 2502, 2512, 87, 87, 2504, 87, 2507, 2508,
+ 87, 87, 2518, 2513, 87, 87, 87, 2510, 2515, 2511,
+ 87, 2517, 2519, 2516, 87, 2514, 2520, 2523, 87, 2522,
+ 2512, 87, 2521, 4172, 2526, 87, 2508, 2524, 2525, 2518,
+ 2513, 87, 87, 2530, 87, 87, 2528, 2531, 2517, 2519,
+ 87, 2527, 87, 2520, 2523, 87, 2522, 2529, 2533, 2521,
+ 87, 87, 2534, 2536, 2524, 2525, 2538, 87, 87, 87,
+ 2530, 87, 2535, 2528, 87, 2532, 87, 2537, 2527, 87,
+ 87, 2539, 87, 2540, 2529, 2533, 4172, 2541, 87, 2534,
- 87, 2536, 2539, 4153, 2541, 87, 2543, 2544, 2542, 4153,
- 2534, 2547, 2533, 87, 2545, 87, 87, 2535, 2537, 2548,
- 87, 87, 2556, 2546, 2538, 2540, 87, 2552, 2536, 2539,
- 87, 2541, 2553, 2543, 2544, 2542, 87, 87, 87, 87,
- 2549, 2545, 2550, 87, 2551, 87, 2548, 2555, 87, 2556,
- 2546, 87, 2557, 87, 2552, 87, 2560, 87, 2561, 2553,
- 2558, 2559, 2562, 2563, 2565, 87, 2564, 2549, 87, 2550,
- 4153, 2551, 2567, 87, 2555, 2566, 4153, 87, 2569, 2557,
- 4153, 87, 87, 2560, 2568, 87, 2572, 2558, 2559, 2562,
- 87, 2565, 87, 2564, 2570, 2575, 87, 87, 87, 87,
+ 2544, 2549, 87, 2538, 2542, 87, 2543, 2546, 87, 2535,
+ 87, 2545, 2532, 87, 2537, 87, 87, 2547, 2548, 87,
+ 2540, 2550, 2551, 87, 2541, 4172, 87, 2544, 2549, 4172,
+ 2556, 2542, 2554, 2543, 2546, 87, 87, 2552, 2545, 2555,
+ 87, 2557, 4172, 2561, 2547, 2548, 4172, 87, 2550, 2551,
+ 2553, 2558, 87, 87, 87, 87, 87, 87, 2559, 2554,
+ 2560, 2562, 87, 2563, 2552, 87, 2555, 2565, 2557, 87,
+ 2561, 87, 2564, 2566, 87, 2568, 2567, 2553, 2558, 2570,
+ 2572, 2569, 87, 2573, 2576, 2559, 2571, 2560, 2562, 87,
+ 87, 2575, 4172, 87, 2565, 87, 87, 2574, 87, 2564,
- 2571, 87, 2566, 2576, 87, 2569, 2573, 87, 2577, 2579,
- 2583, 2568, 87, 2572, 2574, 2584, 2578, 4153, 87, 2580,
- 87, 2570, 2575, 87, 87, 2582, 2581, 2571, 87, 4153,
- 2576, 2593, 87, 2573, 2585, 2577, 2579, 87, 87, 4153,
- 2592, 2574, 87, 2578, 87, 4153, 2580, 2586, 2587, 2590,
- 2591, 2588, 2582, 2581, 87, 87, 87, 2594, 87, 2596,
- 2597, 2585, 2595, 2599, 2589, 4153, 87, 2592, 2598, 87,
- 2603, 2601, 87, 2600, 2586, 2587, 2590, 2591, 2588, 87,
- 2604, 2602, 87, 87, 2594, 87, 2596, 2597, 87, 2595,
- 87, 2589, 87, 2605, 87, 2598, 2606, 2603, 2601, 2607,
+ 2566, 87, 2568, 2567, 2577, 87, 87, 87, 2569, 87,
+ 2573, 2581, 87, 2571, 2578, 2579, 87, 87, 2575, 2580,
+ 87, 2582, 2584, 2587, 2574, 2585, 87, 2591, 87, 2583,
+ 2586, 2577, 2589, 87, 87, 87, 2588, 87, 2581, 87,
+ 87, 2578, 2579, 2590, 2602, 87, 2580, 87, 2582, 2584,
+ 2587, 87, 2585, 2592, 2591, 4172, 2583, 2586, 2593, 2589,
+ 2594, 87, 2601, 2588, 87, 2595, 2596, 2599, 2600, 2597,
+ 2590, 87, 87, 2604, 87, 2603, 4172, 87, 4172, 2605,
+ 87, 2607, 2598, 2606, 87, 87, 2608, 2594, 4172, 2601,
+ 87, 2611, 2595, 2596, 2599, 2600, 2597, 2612, 87, 2609,
- 2600, 2609, 87, 2608, 2610, 87, 2611, 2604, 2602, 2613,
- 87, 2617, 2612, 2615, 2614, 4153, 4153, 4153, 87, 87,
- 2605, 87, 87, 2606, 87, 87, 2607, 87, 2609, 2619,
- 2608, 87, 2620, 2611, 87, 2616, 2613, 2618, 2621, 2612,
- 2615, 2614, 87, 87, 87, 87, 2622, 87, 2623, 2624,
- 2625, 2627, 4153, 4153, 87, 2630, 2619, 2626, 2628, 2620,
- 87, 2629, 2616, 2636, 2618, 87, 2632, 87, 87, 2631,
- 87, 2633, 87, 2622, 87, 2623, 2624, 2625, 2627, 87,
- 87, 2645, 87, 2640, 2626, 2628, 87, 87, 2629, 2634,
- 2636, 87, 2637, 2632, 2635, 2638, 2631, 2639, 2633, 2641,
+ 2604, 2615, 2603, 87, 2610, 87, 2605, 87, 2607, 2598,
+ 2606, 87, 87, 87, 2613, 2616, 2614, 2619, 2611, 87,
+ 2617, 2618, 2620, 87, 2612, 87, 2609, 2622, 2615, 2623,
+ 87, 2610, 2626, 2624, 4172, 87, 2621, 87, 87, 87,
+ 87, 2613, 2616, 2614, 87, 87, 2625, 2617, 2618, 2620,
+ 2627, 87, 87, 87, 2622, 2630, 2623, 87, 2628, 2629,
+ 2624, 2631, 2632, 2621, 87, 2634, 87, 2633, 87, 2636,
+ 2635, 2637, 2638, 2625, 87, 2639, 2640, 2627, 2641, 2642,
+ 87, 87, 2630, 87, 87, 2628, 2629, 87, 2631, 87,
+ 2643, 87, 2634, 87, 2633, 87, 2636, 2635, 2637, 2638,
- 87, 2642, 2643, 2648, 2644, 2646, 2649, 4153, 87, 2647,
- 87, 87, 87, 87, 87, 2651, 2652, 87, 2655, 2637,
- 4153, 87, 2638, 2657, 2639, 87, 2641, 87, 2642, 2643,
- 2650, 2644, 2646, 2653, 87, 87, 2647, 2658, 87, 87,
- 2656, 2654, 2661, 2659, 2660, 87, 4153, 87, 87, 87,
- 2657, 87, 87, 2662, 2665, 87, 2663, 2650, 2669, 2664,
- 2653, 87, 4153, 87, 2658, 2674, 87, 2656, 2654, 2661,
- 2659, 2660, 2666, 87, 87, 2670, 87, 2667, 87, 87,
- 2662, 2665, 2668, 2663, 2672, 2669, 2664, 87, 2671, 2673,
- 2675, 2676, 2674, 87, 2677, 2680, 2679, 2684, 87, 2666,
+ 2644, 87, 2639, 2640, 87, 2647, 2642, 2645, 2648, 2649,
+ 87, 2650, 2646, 2651, 2653, 87, 87, 2643, 2652, 2654,
+ 2656, 2655, 87, 2659, 87, 2660, 87, 2644, 87, 2657,
+ 87, 87, 2647, 2658, 2661, 2648, 2649, 2662, 2650, 87,
+ 87, 2653, 2663, 87, 87, 2652, 2654, 4172, 2655, 2666,
+ 2667, 87, 87, 2668, 2664, 87, 2657, 87, 87, 2669,
+ 2658, 2661, 2665, 2672, 2670, 87, 2671, 4172, 4172, 87,
+ 2676, 2673, 87, 87, 87, 4172, 87, 2667, 2678, 87,
+ 2668, 2664, 87, 2679, 2674, 87, 2669, 2675, 87, 2665,
+ 2672, 2670, 2680, 2671, 87, 87, 2691, 2676, 2673, 2677,
- 4153, 2681, 2670, 87, 87, 87, 2678, 4153, 87, 87,
- 87, 2672, 87, 87, 87, 2671, 2673, 2675, 2676, 2687,
- 2682, 2677, 87, 2679, 2684, 2683, 2686, 2688, 2681, 87,
- 2685, 87, 87, 2678, 87, 2689, 2690, 2691, 2692, 87,
- 4153, 2695, 4153, 4153, 87, 2693, 2687, 2682, 2694, 87,
- 87, 87, 2683, 2686, 2688, 2699, 4153, 2685, 2697, 87,
- 2696, 2705, 2689, 2690, 2691, 87, 2701, 87, 2695, 87,
- 87, 2698, 2693, 2700, 2702, 2694, 87, 87, 87, 87,
- 4153, 2704, 2699, 87, 2703, 2697, 87, 2696, 87, 2706,
- 2707, 2710, 4153, 2701, 2708, 2712, 2709, 2711, 2698, 87,
+ 2681, 2682, 87, 2683, 4172, 87, 2684, 87, 2687, 2685,
+ 87, 2674, 2686, 2688, 2675, 2692, 87, 87, 87, 2680,
+ 2690, 87, 87, 87, 87, 2689, 2677, 2681, 2682, 2703,
+ 2683, 87, 87, 2684, 87, 2687, 2685, 2693, 87, 2686,
+ 2688, 2694, 2692, 2695, 2697, 2699, 87, 2690, 2698, 2696,
+ 87, 87, 2689, 4172, 87, 2702, 87, 87, 2700, 2701,
+ 87, 2704, 87, 2706, 2693, 2705, 4172, 87, 2694, 2707,
+ 2695, 2697, 2699, 87, 87, 2698, 2696, 2710, 87, 4172,
+ 2708, 87, 2702, 87, 2716, 2700, 2701, 87, 2704, 2718,
+ 2706, 2711, 2705, 2709, 2712, 87, 2707, 2715, 87, 2713,
- 2700, 2702, 2715, 87, 87, 2714, 2716, 87, 2704, 87,
- 87, 2703, 87, 2713, 87, 2717, 2706, 87, 2710, 87,
- 175, 2708, 2712, 2709, 2711, 87, 2718, 2720, 2721, 2715,
- 2722, 2719, 2714, 4153, 2723, 2726, 2724, 2725, 87, 87,
- 2713, 2727, 2717, 87, 87, 2728, 2733, 2736, 2732, 4153,
- 87, 2729, 2735, 87, 87, 2734, 87, 2722, 87, 87,
- 87, 2723, 2726, 2724, 2725, 2730, 87, 87, 2727, 2737,
- 2738, 2739, 87, 87, 2736, 2732, 2731, 87, 2729, 2735,
- 2740, 87, 2734, 87, 2741, 2742, 2744, 87, 2743, 2746,
- 87, 4153, 2730, 2747, 87, 2745, 2737, 2748, 2739, 4153,
+ 2714, 87, 87, 2719, 2710, 2717, 87, 2708, 87, 2720,
+ 2721, 87, 87, 2722, 2723, 87, 87, 87, 2711, 2724,
+ 2709, 2712, 2725, 87, 2715, 2727, 2713, 2714, 87, 87,
+ 2719, 87, 2717, 87, 2726, 87, 2720, 2721, 2728, 2729,
+ 2722, 2723, 87, 175, 2730, 2731, 2724, 2732, 2733, 2725,
+ 4172, 2734, 4172, 2735, 2737, 2736, 2739, 87, 87, 2738,
+ 87, 2726, 87, 2744, 2748, 2728, 2743, 2747, 87, 2745,
+ 87, 87, 87, 2740, 2746, 2733, 87, 87, 2734, 87,
+ 2735, 2737, 2736, 87, 87, 87, 2738, 2741, 2749, 87,
+ 87, 2748, 2750, 2743, 2747, 87, 2745, 2753, 2742, 87,
- 2749, 2750, 87, 2731, 87, 4153, 87, 2740, 87, 2755,
- 2752, 2741, 2742, 87, 87, 2743, 87, 87, 87, 2756,
- 2747, 87, 2745, 87, 2748, 2757, 2753, 2749, 2750, 2751,
- 87, 87, 87, 2754, 87, 2759, 2755, 2752, 2758, 2760,
- 2762, 87, 87, 2761, 4153, 87, 2756, 2764, 87, 87,
- 2763, 4153, 2757, 2753, 2765, 2766, 2751, 2767, 87, 87,
- 2754, 87, 2759, 2768, 87, 2758, 2760, 87, 2769, 2771,
- 2761, 2770, 87, 87, 2764, 2772, 87, 2763, 2773, 87,
- 2774, 2765, 2766, 87, 2767, 2775, 2776, 87, 4153, 87,
- 2768, 87, 2777, 2778, 87, 2769, 2771, 2785, 2770, 2779,
+ 2740, 2746, 2751, 2755, 87, 2752, 87, 2754, 4172, 87,
+ 2757, 2759, 4172, 2756, 2741, 4172, 2758, 4172, 87, 2750,
+ 87, 2760, 2766, 4172, 2753, 2742, 2762, 87, 87, 2751,
+ 87, 87, 2752, 87, 2754, 87, 2763, 2764, 2759, 87,
+ 2756, 87, 87, 2758, 87, 2761, 2767, 2765, 2760, 2766,
+ 2769, 2768, 87, 2762, 2771, 2770, 2773, 2774, 87, 87,
+ 87, 87, 87, 2763, 2764, 2772, 2776, 2775, 87, 4172,
+ 87, 4172, 2761, 2767, 2765, 2782, 87, 2769, 2768, 87,
+ 87, 2771, 2770, 87, 2774, 2780, 2777, 2779, 87, 2778,
+ 87, 2781, 2772, 2776, 2775, 87, 87, 87, 2784, 87,
- 87, 87, 2772, 87, 87, 2773, 2780, 87, 2781, 87,
- 2783, 2782, 2775, 2776, 2786, 2784, 87, 87, 2787, 2777,
- 2778, 87, 2788, 4153, 2791, 87, 2779, 2790, 2792, 87,
- 2789, 2794, 87, 2780, 87, 2781, 2793, 2783, 2782, 2795,
- 87, 2786, 2784, 87, 87, 87, 2796, 2799, 2797, 2788,
- 87, 2791, 2802, 87, 2790, 2792, 2798, 2789, 87, 87,
- 87, 87, 87, 2793, 2800, 2803, 2795, 2801, 2804, 2805,
- 87, 2807, 2806, 2796, 2799, 2797, 4153, 2808, 87, 87,
- 2809, 87, 2810, 2798, 87, 87, 2811, 2816, 2812, 2817,
- 87, 2800, 2803, 87, 2801, 87, 2805, 2813, 2807, 2806,
+ 87, 2783, 2782, 2785, 2786, 2791, 2790, 87, 87, 2787,
+ 87, 2788, 2780, 2777, 2779, 87, 2778, 87, 2781, 87,
+ 2796, 2789, 2794, 87, 2797, 2784, 2792, 2798, 2783, 87,
+ 87, 2786, 2791, 2790, 87, 2793, 2787, 87, 2788, 2795,
+ 2800, 87, 87, 2799, 2801, 87, 2805, 2802, 2789, 2794,
+ 2803, 2797, 87, 2792, 87, 87, 2804, 87, 2806, 87,
+ 2807, 2813, 2793, 87, 2808, 2811, 2795, 2800, 87, 2809,
+ 2799, 2801, 87, 87, 2802, 87, 2810, 2803, 87, 87,
+ 87, 2812, 2815, 2804, 87, 2806, 2814, 2807, 87, 87,
+ 2816, 2808, 2811, 2817, 2821, 2827, 2809, 2819, 2818, 2828,
- 87, 4153, 2814, 87, 2808, 2815, 2818, 2809, 2819, 87,
- 2820, 2821, 87, 2811, 87, 2812, 87, 87, 87, 2822,
- 87, 2826, 2823, 87, 2813, 2824, 2825, 2827, 87, 2814,
- 87, 2829, 2815, 2818, 87, 2819, 87, 2820, 2821, 87,
- 2831, 2833, 2828, 2832, 87, 2834, 2822, 2830, 87, 2823,
- 87, 2835, 2824, 2825, 87, 87, 87, 2837, 87, 2838,
- 2836, 4153, 2839, 87, 2841, 2845, 87, 87, 2833, 2828,
- 2832, 2840, 87, 87, 2830, 87, 2847, 2842, 87, 2844,
- 4153, 87, 2854, 2851, 2837, 2843, 2838, 2836, 87, 2839,
- 87, 87, 87, 87, 2846, 2849, 2848, 2850, 2840, 2852,
+ 2820, 4172, 87, 2810, 2822, 87, 2823, 87, 2812, 87,
+ 2824, 87, 87, 2814, 2837, 4172, 2825, 2816, 87, 2826,
+ 2817, 87, 87, 87, 2819, 2818, 87, 2820, 2829, 2830,
+ 87, 2822, 2831, 2823, 87, 2832, 87, 2824, 2833, 87,
+ 2834, 87, 87, 2825, 2835, 2836, 2826, 2838, 2840, 2839,
+ 87, 87, 2841, 87, 87, 2829, 2830, 87, 87, 2831,
+ 2842, 87, 2832, 87, 2844, 2833, 2843, 2834, 2845, 2846,
+ 2847, 2835, 2836, 2850, 87, 87, 2839, 2849, 87, 2841,
+ 2848, 2852, 2851, 87, 87, 2853, 87, 87, 2854, 2855,
+ 2858, 2844, 87, 2843, 2860, 87, 87, 2847, 87, 87,
- 2855, 87, 87, 87, 2842, 87, 2844, 87, 87, 87,
- 2851, 2857, 2843, 2860, 2853, 2861, 2856, 87, 87, 2858,
- 4153, 2846, 2849, 2848, 2850, 87, 2852, 2855, 87, 2859,
- 2863, 87, 2862, 2865, 2867, 2866, 87, 87, 2857, 87,
- 87, 2853, 87, 2856, 2864, 87, 2858, 87, 87, 4153,
- 4153, 4153, 2871, 2872, 4153, 2868, 2859, 2863, 87, 2862,
- 2865, 87, 2866, 87, 4153, 2869, 2870, 4153, 4153, 2877,
- 2880, 2864, 87, 87, 87, 4153, 87, 2878, 2873, 2871,
- 2872, 87, 2868, 2881, 4153, 2883, 2882, 2874, 4153, 2886,
- 87, 2879, 2869, 2870, 2875, 2876, 2877, 87, 87, 2884,
+ 2850, 2857, 87, 87, 2849, 2856, 87, 2848, 87, 2851,
+ 2859, 2861, 2853, 87, 2862, 2854, 2855, 87, 87, 2863,
+ 87, 87, 2867, 87, 2864, 2868, 4172, 2865, 2857, 4172,
+ 2870, 2869, 2856, 87, 2873, 2871, 87, 2859, 2861, 2874,
+ 87, 2862, 2866, 87, 4172, 4172, 2863, 87, 87, 87,
+ 4172, 2864, 2868, 87, 2865, 87, 2872, 2870, 2869, 2875,
+ 2876, 87, 2871, 2877, 87, 2878, 87, 87, 2879, 2866,
+ 2880, 87, 87, 2881, 2884, 2882, 2885, 87, 2883, 4172,
+ 4172, 87, 87, 2872, 2893, 87, 2875, 2876, 4172, 4172,
+ 2877, 87, 2878, 2895, 2890, 2879, 87, 87, 2886, 87,
- 2885, 87, 87, 87, 2878, 2873, 87, 2888, 87, 87,
- 2881, 2889, 2883, 2882, 2874, 2890, 2886, 2894, 2879, 2887,
- 87, 2875, 2876, 2896, 2891, 2897, 2884, 2885, 2895, 87,
- 2899, 2898, 87, 87, 2888, 4153, 4153, 2903, 2889, 2892,
- 87, 2893, 2890, 87, 2902, 87, 2887, 87, 87, 87,
- 2896, 2891, 2897, 87, 2901, 2895, 2900, 2899, 2898, 87,
- 87, 2909, 87, 2905, 2903, 2906, 2892, 2907, 2893, 4153,
- 87, 2902, 2904, 87, 2908, 2910, 2911, 2913, 2914, 2912,
- 4153, 2901, 87, 2900, 2917, 87, 87, 87, 2915, 87,
- 2905, 87, 2906, 87, 2907, 2916, 2918, 87, 87, 2904,
+ 2881, 2884, 2882, 2885, 2891, 2883, 87, 2887, 2897, 2894,
+ 2896, 87, 2899, 87, 2888, 2889, 87, 87, 2892, 2898,
+ 2895, 2890, 87, 87, 87, 2886, 2900, 87, 87, 2901,
+ 87, 2891, 2902, 2903, 2887, 2897, 2894, 2896, 2907, 2899,
+ 4172, 2888, 2889, 4172, 4172, 2892, 2898, 2904, 2908, 4172,
+ 87, 2909, 4172, 2900, 2910, 87, 2901, 2911, 87, 2902,
+ 2903, 4172, 2905, 87, 2906, 2912, 2913, 87, 2915, 2922,
+ 87, 87, 2916, 87, 2904, 2908, 87, 2914, 2909, 87,
+ 87, 2910, 4172, 87, 2911, 2918, 87, 2917, 87, 2905,
+ 2921, 2906, 2912, 2913, 87, 2915, 2919, 2920, 2923, 2916,
- 87, 2908, 2927, 2911, 2925, 2914, 2912, 87, 2920, 87,
- 87, 2917, 2919, 2921, 2922, 2915, 2923, 2924, 2926, 87,
- 87, 2928, 2916, 2918, 2930, 87, 87, 2931, 87, 2927,
- 87, 87, 87, 2935, 87, 2920, 87, 2932, 2929, 2919,
- 2921, 2922, 87, 2923, 2924, 87, 4153, 2933, 2928, 87,
- 87, 2930, 2936, 87, 2931, 2934, 2939, 2937, 4153, 2938,
- 2935, 2940, 2944, 2941, 4153, 2929, 4153, 4153, 87, 87,
- 2942, 2959, 2967, 87, 2933, 87, 2943, 87, 175, 2936,
- 2945, 87, 2934, 2939, 2937, 87, 2938, 87, 2940, 87,
- 2941, 2946, 87, 2947, 2948, 2949, 2952, 2942, 87, 2950,
+ 2924, 87, 87, 4172, 2914, 2926, 87, 87, 2925, 2927,
+ 2938, 2928, 2918, 2929, 2917, 87, 2933, 2921, 87, 87,
+ 87, 2931, 2932, 2919, 2920, 2930, 2934, 2924, 2935, 87,
+ 87, 87, 2936, 87, 87, 2925, 2927, 87, 2928, 87,
+ 2929, 2937, 87, 2933, 87, 87, 87, 2939, 2931, 2932,
+ 87, 2940, 2930, 2934, 87, 2935, 2941, 2942, 2943, 2936,
+ 2944, 2945, 2946, 87, 87, 2948, 4172, 4172, 2937, 2949,
+ 2947, 2955, 2950, 2952, 87, 2951, 87, 2957, 2940, 87,
+ 2956, 87, 87, 2941, 2942, 2943, 87, 2944, 87, 2946,
+ 87, 87, 2948, 87, 87, 175, 2949, 2947, 2955, 2950,
- 2953, 2951, 4153, 2943, 87, 2954, 2960, 2945, 87, 87,
- 4153, 87, 87, 87, 87, 87, 2955, 87, 2946, 2957,
- 2947, 2948, 2949, 2952, 2956, 2958, 2950, 2953, 2951, 87,
- 2961, 87, 2954, 87, 2962, 2968, 2963, 87, 87, 2964,
- 87, 87, 2966, 2955, 2965, 2970, 2957, 2969, 4153, 2972,
- 4153, 2956, 2958, 2974, 4153, 2973, 2978, 87, 2977, 4153,
- 2971, 2962, 87, 2963, 87, 87, 87, 87, 87, 2966,
- 87, 2965, 87, 87, 2969, 87, 2972, 2975, 2976, 87,
- 2974, 2979, 2973, 2981, 87, 2977, 87, 2971, 87, 2980,
- 87, 2982, 2983, 4153, 87, 2984, 2986, 4153, 2985, 2990,
+ 2952, 87, 2951, 2953, 87, 2954, 2958, 2956, 2959, 2960,
+ 87, 2964, 2961, 2963, 4172, 2962, 2969, 2965, 87, 2966,
+ 4172, 2967, 87, 87, 2972, 2968, 87, 87, 87, 87,
+ 2953, 87, 2954, 2958, 87, 2959, 2960, 87, 2964, 2961,
+ 2963, 2970, 2962, 2969, 2965, 87, 2966, 87, 2967, 2971,
+ 2973, 87, 2968, 2974, 2975, 2980, 2976, 2977, 4172, 87,
+ 2981, 87, 2978, 2979, 87, 4172, 2983, 4172, 2970, 2985,
+ 2982, 4172, 2987, 3841, 3842, 2991, 2971, 87, 2984, 2986,
+ 87, 2975, 87, 2976, 87, 87, 87, 87, 87, 2978,
+ 2979, 87, 87, 87, 87, 87, 2985, 2982, 87, 2987,
- 2988, 2989, 4153, 2987, 2975, 2976, 87, 87, 2979, 2992,
- 2981, 87, 4153, 4153, 87, 87, 2980, 87, 2982, 87,
- 87, 87, 2984, 2986, 87, 2985, 87, 2988, 2989, 2991,
- 2987, 87, 2993, 2994, 2995, 2996, 2992, 2998, 3000, 87,
- 87, 87, 2997, 87, 87, 2999, 4153, 3001, 87, 3002,
- 3006, 3003, 4153, 3004, 3005, 3014, 2991, 3010, 87, 2993,
- 2994, 2995, 2996, 87, 2998, 87, 3008, 87, 87, 2997,
- 87, 3011, 2999, 87, 3001, 87, 3002, 3006, 3003, 87,
- 3004, 3005, 3007, 3009, 87, 3012, 87, 87, 87, 87,
- 87, 3013, 3015, 3008, 3017, 3016, 87, 4153, 3011, 3018,
+ 2988, 2989, 87, 2990, 2992, 2984, 2986, 87, 2996, 87,
+ 2993, 2994, 2995, 87, 4172, 2999, 4172, 87, 2997, 2998,
+ 3003, 4172, 4172, 4172, 4172, 3000, 3002, 2988, 2989, 87,
+ 2990, 2992, 87, 87, 87, 87, 87, 2993, 2994, 2995,
+ 87, 87, 2999, 87, 3001, 2997, 2998, 87, 3004, 87,
+ 3005, 87, 3000, 3002, 3006, 3009, 3007, 3008, 3012, 3011,
+ 4172, 87, 87, 87, 87, 3010, 87, 3013, 87, 3014,
+ 3018, 3001, 87, 4172, 3015, 3004, 3016, 3005, 3017, 87,
+ 87, 3006, 3009, 3007, 3008, 3012, 3011, 3019, 87, 3021,
+ 87, 3023, 3010, 3024, 3020, 87, 3014, 3018, 87, 87,
- 4153, 3021, 3019, 3020, 4153, 4153, 3023, 3022, 4153, 3007,
- 3009, 3024, 3012, 87, 87, 87, 87, 87, 3013, 87,
- 3026, 3017, 3016, 3028, 87, 3025, 3018, 87, 3021, 3019,
- 3020, 87, 87, 3023, 3022, 87, 3029, 87, 3024, 3027,
- 87, 3030, 3031, 3032, 87, 3034, 4153, 3026, 3036, 87,
- 3028, 3037, 3025, 3033, 3040, 3038, 3035, 87, 3043, 87,
- 3042, 87, 4153, 3029, 87, 87, 3027, 87, 87, 3031,
- 87, 87, 3034, 87, 87, 3036, 3039, 3041, 87, 3044,
- 3033, 3040, 3038, 3035, 87, 3043, 3045, 3042, 87, 87,
- 3046, 3048, 87, 3047, 3049, 3050, 3052, 3053, 3051, 87,
+ 87, 3015, 87, 3016, 87, 3017, 3022, 3026, 87, 3027,
+ 3028, 87, 87, 3025, 3019, 4172, 3021, 3029, 87, 3031,
+ 3024, 3020, 3030, 3038, 87, 3032, 3033, 4172, 3034, 87,
+ 4172, 3036, 3035, 3022, 3026, 87, 87, 87, 87, 87,
+ 3025, 87, 87, 3037, 3029, 3039, 3031, 87, 3041, 3030,
+ 3038, 3043, 3032, 3033, 87, 3034, 87, 87, 3036, 3035,
+ 3040, 87, 3042, 3044, 3045, 3050, 3046, 87, 4172, 87,
+ 3037, 3051, 3039, 3047, 87, 3041, 3048, 3049, 87, 3054,
+ 87, 3055, 87, 87, 87, 87, 3052, 3040, 3056, 3042,
+ 3044, 87, 87, 3046, 87, 87, 3053, 87, 3051, 87,
- 4153, 3058, 3054, 3039, 3041, 87, 3044, 87, 87, 3055,
- 3057, 3056, 87, 3045, 3064, 87, 87, 3046, 87, 87,
- 3047, 87, 87, 3052, 3053, 3051, 3059, 87, 3058, 3054,
- 3060, 87, 3061, 3062, 87, 3063, 3055, 3057, 3056, 3065,
- 3066, 87, 3067, 87, 3070, 3068, 87, 3069, 87, 3072,
- 3071, 87, 87, 3059, 4153, 3075, 87, 87, 3073, 3061,
- 3062, 87, 3063, 87, 3074, 87, 3065, 3066, 87, 87,
- 87, 3070, 3068, 87, 3069, 87, 3072, 3071, 3080, 3076,
- 3077, 3078, 3075, 3079, 3081, 3073, 87, 87, 87, 3083,
- 3082, 3074, 87, 3086, 3087, 3084, 3088, 4153, 87, 4153,
+ 3047, 87, 3057, 3048, 3049, 3060, 3054, 87, 3055, 3061,
+ 3058, 87, 3062, 3052, 87, 3056, 87, 3059, 87, 87,
+ 3063, 3064, 3065, 3053, 3067, 3072, 3066, 4172, 4172, 3057,
+ 3068, 87, 3060, 87, 87, 3069, 3061, 3058, 3070, 3062,
+ 87, 87, 3075, 3073, 3059, 3076, 3074, 87, 87, 87,
+ 87, 3067, 3072, 3066, 87, 3071, 87, 3068, 87, 3077,
+ 87, 87, 3069, 87, 3078, 3070, 3079, 3080, 3081, 87,
+ 3073, 4172, 3076, 3074, 3082, 3083, 87, 87, 3084, 3085,
+ 87, 4172, 3071, 3086, 4172, 87, 3077, 3087, 3088, 3089,
+ 4172, 3078, 3096, 87, 3080, 3081, 87, 3095, 87, 87,
- 3085, 4153, 3095, 3091, 87, 3080, 3076, 3077, 3078, 87,
- 3079, 87, 87, 87, 87, 87, 3083, 3082, 3089, 87,
- 3086, 3087, 3084, 3088, 3090, 87, 3092, 3085, 3093, 87,
- 3091, 87, 3094, 87, 3096, 87, 3097, 3098, 3099, 87,
- 4153, 3100, 3101, 3102, 3103, 3089, 87, 3104, 4153, 3105,
- 4153, 3090, 87, 3092, 87, 3093, 87, 3106, 3113, 3094,
- 4153, 3096, 3107, 87, 87, 87, 87, 87, 3100, 3101,
- 3102, 3103, 3108, 87, 3104, 87, 3105, 87, 3109, 87,
- 3110, 3112, 3111, 87, 3106, 87, 3114, 87, 87, 3107,
- 3115, 3116, 87, 87, 87, 3117, 3118, 3119, 4153, 3108,
+ 87, 87, 3083, 87, 3090, 3084, 3085, 3097, 87, 3091,
+ 3086, 87, 3092, 3093, 3087, 3088, 3089, 87, 3094, 87,
+ 87, 3098, 87, 87, 3095, 3099, 3102, 87, 3100, 87,
+ 87, 3090, 3101, 3103, 3097, 3106, 3091, 3104, 4172, 3092,
+ 3093, 3105, 87, 87, 3109, 3094, 87, 3110, 3098, 3111,
+ 87, 87, 3099, 3102, 87, 3100, 87, 87, 3107, 3101,
+ 3103, 87, 3106, 3108, 3104, 87, 87, 3112, 3105, 3113,
+ 87, 3109, 3114, 3115, 87, 4172, 3111, 3116, 3117, 3118,
+ 4172, 3119, 4172, 3120, 3123, 3107, 3121, 87, 87, 3126,
+ 3108, 87, 3128, 3130, 87, 87, 87, 3131, 3133, 87,
- 3120, 3121, 3126, 3122, 3123, 3109, 4153, 3110, 3112, 3111,
- 87, 87, 87, 3114, 3124, 3127, 87, 87, 87, 3128,
- 87, 87, 3117, 87, 3119, 3125, 87, 3120, 3121, 87,
- 3122, 3123, 87, 87, 3129, 87, 3130, 3131, 3134, 3135,
- 3133, 3124, 3127, 87, 3132, 3136, 87, 87, 3137, 4153,
- 87, 87, 3125, 87, 87, 3138, 87, 3139, 3140, 4153,
- 3143, 3129, 3141, 3130, 3131, 3134, 3135, 3133, 3142, 87,
- 175, 3132, 3136, 87, 87, 3137, 87, 3146, 3147, 3149,
- 87, 3144, 3138, 87, 3139, 3140, 87, 3143, 3145, 3141,
- 3148, 3151, 3152, 87, 87, 3142, 3150, 3153, 3154, 87,
+ 3115, 87, 87, 3122, 3116, 3117, 3118, 87, 3119, 87,
+ 3120, 3123, 87, 3121, 3124, 3125, 3126, 3127, 87, 87,
+ 87, 3132, 87, 3129, 87, 87, 3135, 3141, 87, 87,
+ 3122, 87, 3134, 3137, 3136, 3138, 3139, 87, 3140, 3143,
+ 87, 3124, 3125, 87, 3127, 87, 87, 87, 3132, 87,
+ 3129, 3142, 3152, 3135, 87, 3144, 87, 87, 3146, 3134,
+ 3137, 3136, 3138, 3139, 3145, 3140, 87, 3147, 3148, 87,
+ 87, 87, 87, 3150, 3149, 3151, 4172, 87, 3142, 3152,
+ 87, 87, 3144, 3153, 3156, 3146, 3154, 3155, 87, 3162,
+ 3158, 3145, 87, 4172, 3147, 3148, 87, 3157, 175, 87,
- 3156, 3155, 3157, 87, 3146, 87, 3149, 3158, 3144, 87,
- 3159, 4153, 3160, 87, 87, 3145, 87, 3148, 3151, 3152,
- 87, 87, 3161, 3150, 87, 87, 87, 3156, 3155, 3157,
- 3163, 4153, 3162, 87, 3158, 3165, 87, 3159, 87, 3160,
- 87, 3164, 87, 3169, 87, 3166, 3167, 3168, 87, 3161,
- 87, 3170, 3171, 87, 87, 3173, 3172, 3163, 87, 3162,
- 3174, 87, 3165, 87, 87, 3175, 3176, 3177, 3164, 87,
- 3169, 3178, 3166, 3167, 3168, 3179, 3181, 87, 3170, 3171,
- 87, 3180, 3173, 3172, 87, 3183, 3182, 3174, 3184, 87,
- 3187, 87, 3175, 3176, 87, 3188, 3185, 87, 3178, 87,
+ 3150, 3149, 3151, 3159, 3161, 87, 3166, 4172, 87, 87,
+ 3153, 3156, 87, 3154, 3155, 3160, 87, 3158, 3163, 3164,
+ 87, 3165, 87, 3168, 3157, 3167, 87, 3169, 87, 3170,
+ 3159, 3161, 3171, 3166, 87, 3172, 4172, 3173, 4172, 3174,
+ 3175, 3176, 3160, 87, 87, 3163, 3164, 87, 3165, 87,
+ 87, 4172, 3167, 87, 87, 4172, 3170, 87, 87, 3171,
+ 3178, 3177, 3172, 87, 3173, 87, 3174, 3175, 3176, 87,
+ 3179, 3180, 87, 3181, 3182, 3183, 3184, 87, 87, 3185,
+ 87, 87, 87, 3186, 3187, 3192, 87, 3178, 3177, 3190,
+ 3188, 87, 4172, 3196, 87, 3189, 3191, 3179, 3180, 87,
- 3186, 3193, 3179, 87, 87, 87, 3192, 87, 3180, 87,
- 87, 3189, 87, 3182, 87, 3184, 3190, 3187, 3191, 3194,
- 87, 3195, 3188, 3185, 87, 87, 3196, 3186, 3193, 87,
- 3197, 3199, 3198, 3192, 3200, 3201, 3202, 3203, 3189, 87,
- 87, 87, 87, 3190, 3209, 3191, 3194, 3204, 3195, 3210,
- 4153, 3205, 3206, 87, 3208, 87, 87, 87, 3199, 3198,
- 87, 3200, 87, 87, 87, 3207, 87, 87, 3211, 87,
- 3212, 3209, 3214, 87, 3204, 87, 87, 87, 3205, 3206,
- 3213, 3208, 3215, 3216, 3217, 3219, 3221, 87, 87, 3218,
- 87, 4153, 3207, 3220, 3222, 3211, 3223, 3212, 87, 3214,
+ 3181, 3182, 3183, 3184, 87, 3193, 3185, 3195, 87, 3194,
+ 3186, 3187, 87, 3197, 87, 87, 3190, 3188, 87, 87,
+ 87, 3198, 3189, 3191, 3199, 87, 3200, 3202, 3201, 3203,
+ 3204, 87, 3193, 87, 3195, 87, 3194, 87, 3206, 87,
+ 3197, 87, 3207, 3205, 3208, 3209, 3210, 87, 87, 87,
+ 87, 3199, 87, 3200, 3202, 3201, 3203, 3204, 3211, 3212,
+ 3216, 3215, 3217, 3218, 3221, 3206, 87, 87, 87, 3207,
+ 3205, 3208, 3209, 3210, 3213, 3214, 87, 4172, 3224, 3225,
+ 3223, 87, 87, 3219, 87, 87, 87, 87, 3215, 87,
+ 3220, 3221, 87, 87, 3234, 87, 3222, 3229, 3230, 87,
- 3224, 3225, 87, 4153, 3226, 3231, 87, 3213, 87, 3215,
- 3216, 3217, 87, 87, 87, 3228, 3218, 3227, 87, 3229,
- 3220, 3222, 87, 87, 4153, 87, 87, 3224, 87, 3230,
- 87, 3226, 87, 3232, 3234, 3233, 3236, 3235, 3237, 3239,
- 87, 87, 3228, 87, 3227, 87, 3229, 87, 3238, 3241,
- 3242, 87, 3243, 3248, 3250, 3240, 3230, 87, 87, 3244,
- 3232, 3234, 3233, 3236, 3235, 3237, 87, 87, 87, 3245,
- 3249, 87, 87, 3246, 87, 3238, 3241, 87, 3247, 3243,
- 3248, 87, 3240, 3254, 3251, 87, 3244, 3252, 3253, 3255,
- 87, 4153, 87, 87, 3260, 87, 3245, 3249, 87, 3258,
+ 87, 3213, 3214, 3233, 87, 3224, 87, 3223, 3226, 3227,
+ 3219, 3228, 3231, 87, 87, 87, 87, 3220, 87, 87,
+ 3232, 87, 3236, 3222, 3229, 3230, 3235, 3238, 87, 3237,
+ 3233, 3240, 3239, 3242, 3241, 3226, 3227, 87, 3228, 3231,
+ 87, 87, 87, 3244, 3245, 3246, 3248, 3232, 3243, 87,
+ 87, 87, 87, 3235, 87, 3247, 3237, 3249, 87, 3239,
+ 3242, 3241, 87, 87, 3250, 3255, 87, 3251, 87, 3252,
+ 3244, 3245, 87, 3248, 87, 3243, 3253, 87, 3254, 87,
+ 3256, 3257, 3247, 87, 3249, 3259, 87, 87, 3258, 87,
+ 3260, 3250, 3255, 87, 3251, 3262, 3252, 87, 3261, 3263,
- 3246, 87, 87, 3256, 3257, 3247, 3261, 3265, 87, 3259,
- 3254, 3251, 3262, 87, 3252, 3253, 87, 87, 87, 87,
- 87, 3260, 3263, 3266, 3267, 3264, 3258, 3269, 3270, 3271,
- 3256, 3257, 87, 3261, 87, 3268, 3259, 87, 87, 3262,
- 3272, 87, 87, 3273, 3276, 3274, 3275, 3278, 4153, 3263,
- 3266, 3267, 3264, 87, 3269, 87, 3271, 87, 87, 87,
- 3279, 3277, 3268, 87, 3280, 87, 87, 87, 87, 3283,
- 3273, 3276, 3274, 3275, 87, 3281, 3282, 3287, 3284, 3290,
- 3285, 87, 3288, 3286, 4153, 3293, 3317, 3279, 3277, 4153,
- 87, 3280, 87, 87, 87, 87, 87, 87, 3289, 3292,
+ 3265, 3264, 3267, 3253, 3272, 3254, 87, 87, 3257, 3266,
+ 87, 87, 87, 87, 4172, 3258, 3268, 3260, 87, 3269,
+ 3270, 87, 3262, 3271, 4172, 3261, 3263, 3265, 3264, 87,
+ 87, 87, 87, 87, 87, 87, 3266, 3273, 3274, 3275,
+ 3276, 3277, 3280, 3268, 3282, 3278, 3269, 3270, 3279, 87,
+ 3271, 87, 87, 3281, 4172, 87, 87, 3286, 3283, 87,
+ 87, 87, 3287, 3284, 3273, 3274, 3275, 3276, 3277, 3280,
+ 3285, 87, 3278, 87, 3288, 3279, 3289, 3290, 3291, 3293,
+ 3281, 87, 87, 87, 3286, 3283, 3295, 3292, 3294, 87,
+ 3284, 3297, 3298, 87, 87, 87, 87, 3285, 87, 87,
- 87, 3291, 3281, 3282, 3287, 3284, 87, 3285, 87, 3288,
- 3286, 87, 87, 3294, 3295, 3297, 87, 3296, 87, 3298,
- 3301, 3299, 3302, 4153, 3306, 3289, 3292, 3300, 3291, 87,
- 87, 3303, 3307, 3304, 87, 87, 87, 87, 87, 87,
- 3294, 3295, 3297, 3308, 3296, 87, 3298, 3301, 3299, 3302,
- 3305, 87, 3309, 87, 3300, 87, 3310, 3312, 3303, 87,
- 3304, 3311, 87, 3314, 87, 87, 3313, 3315, 4153, 87,
- 3308, 3316, 4153, 3318, 3319, 4153, 87, 3305, 87, 3309,
- 87, 3321, 3323, 3310, 175, 87, 87, 3322, 3311, 3320,
- 3314, 3324, 3325, 3313, 3315, 87, 87, 3327, 3316, 87,
+ 3300, 3288, 3296, 87, 3290, 3291, 3293, 3299, 87, 3301,
+ 87, 3302, 87, 87, 3292, 3294, 3303, 87, 3297, 3298,
+ 3307, 3304, 3305, 87, 3306, 87, 3308, 87, 3310, 3296,
+ 87, 4172, 3309, 87, 3299, 3311, 3301, 3313, 3302, 87,
+ 87, 3312, 87, 3303, 87, 3314, 3315, 87, 3304, 3305,
+ 87, 3306, 3316, 3308, 3319, 87, 3317, 87, 3318, 3309,
+ 87, 3323, 3311, 87, 3313, 87, 87, 87, 3312, 3320,
+ 3321, 3324, 3314, 3315, 87, 3322, 3329, 87, 3325, 3316,
+ 3332, 3319, 3326, 3317, 3327, 3318, 3331, 87, 87, 87,
+ 3330, 87, 87, 3328, 87, 3333, 3320, 3321, 87, 3334,
- 3318, 3319, 87, 3326, 87, 3329, 3333, 87, 3321, 3323,
- 3328, 87, 3330, 3334, 3322, 3331, 3320, 3336, 87, 87,
- 3332, 3335, 4153, 87, 3327, 87, 4153, 3337, 87, 3338,
- 3326, 3339, 87, 3333, 87, 87, 87, 3328, 3342, 3330,
- 3334, 3340, 3344, 3341, 3345, 3346, 3343, 87, 3335, 87,
- 87, 87, 87, 87, 3337, 87, 3338, 87, 3339, 87,
- 3347, 3348, 3349, 3350, 3352, 3342, 4153, 87, 3340, 3351,
- 3341, 3363, 3346, 3343, 87, 87, 87, 3353, 3354, 87,
- 3355, 3357, 87, 3356, 3364, 87, 3362, 3347, 87, 3349,
- 3350, 3352, 87, 87, 3358, 87, 3351, 3359, 3361, 87,
+ 87, 87, 3322, 175, 87, 3325, 87, 3332, 87, 3326,
+ 87, 3327, 3335, 3331, 3336, 3337, 3340, 3330, 3338, 3341,
+ 3328, 3339, 3333, 3342, 3345, 3343, 3344, 3346, 87, 3353,
+ 3348, 87, 3347, 87, 87, 3349, 87, 87, 87, 3335,
+ 87, 3336, 3337, 3340, 87, 3338, 87, 87, 3339, 3350,
+ 87, 3345, 3343, 3344, 87, 3351, 87, 3352, 3354, 3347,
+ 4172, 87, 87, 3361, 3355, 3356, 3358, 3360, 3362, 3359,
+ 87, 87, 3357, 87, 3364, 3363, 3350, 87, 87, 3365,
+ 3368, 87, 3351, 3366, 3352, 3354, 87, 87, 87, 87,
+ 87, 3355, 3356, 3358, 3360, 87, 3359, 87, 3367, 3357,
- 87, 3360, 87, 87, 3353, 3354, 87, 3355, 3357, 87,
- 3356, 3364, 87, 3362, 3365, 87, 87, 3366, 3367, 3372,
- 3375, 3358, 4153, 87, 3359, 3361, 3368, 87, 3360, 3369,
- 3370, 3373, 3371, 4153, 87, 3374, 87, 87, 87, 87,
- 87, 3365, 3376, 87, 3377, 3367, 87, 3375, 3379, 87,
- 3381, 87, 3378, 3368, 3384, 3380, 3369, 3370, 3373, 3371,
- 87, 87, 3374, 3385, 87, 3382, 87, 87, 3383, 3376,
- 87, 3377, 3387, 87, 3386, 3379, 3388, 87, 87, 3378,
- 87, 3384, 3380, 3389, 3390, 3391, 3394, 87, 3393, 4153,
- 3385, 3392, 3382, 87, 3396, 3383, 87, 87, 3395, 87,
+ 87, 3364, 3363, 87, 87, 3370, 87, 3368, 3369, 3371,
+ 3366, 3372, 3373, 4172, 3374, 4172, 3375, 4172, 3377, 3376,
+ 87, 87, 3378, 87, 3379, 3367, 3380, 87, 87, 3383,
+ 3381, 87, 3370, 87, 87, 3369, 3371, 87, 3372, 3373,
+ 87, 3374, 3384, 3375, 87, 3377, 3376, 87, 3385, 3378,
+ 3382, 3379, 87, 3386, 3389, 3387, 87, 3381, 87, 87,
+ 87, 87, 87, 87, 3388, 3390, 3391, 3395, 3392, 3384,
+ 3393, 3396, 87, 3394, 87, 3385, 3398, 3382, 3397, 87,
+ 3386, 87, 3387, 3402, 3404, 87, 87, 3406, 87, 87,
+ 87, 3388, 3390, 3391, 3395, 3392, 3399, 3393, 3396, 87,
- 87, 3386, 3397, 3388, 3398, 3399, 3400, 3402, 3405, 3401,
- 4153, 4153, 3391, 87, 3403, 87, 87, 87, 3392, 87,
- 87, 3396, 87, 87, 87, 3395, 3404, 3408, 3406, 3397,
- 87, 3398, 3399, 87, 3402, 87, 3401, 3407, 87, 87,
- 87, 3403, 3410, 3409, 3411, 3414, 3412, 4153, 3413, 87,
- 87, 87, 3415, 3404, 3408, 3406, 3416, 3417, 87, 87,
- 3418, 87, 3419, 87, 3407, 87, 87, 3420, 3421, 3410,
- 3409, 3411, 3414, 3412, 87, 3413, 3422, 3424, 3423, 3415,
- 3426, 3425, 3427, 87, 3417, 3428, 3430, 87, 87, 87,
- 3429, 87, 3431, 3432, 87, 3421, 87, 87, 87, 87,
+ 3394, 3400, 3401, 87, 87, 3397, 3407, 87, 3403, 87,
+ 3402, 87, 3405, 87, 87, 3410, 3408, 3409, 3411, 87,
+ 3412, 3413, 3414, 3399, 87, 4172, 87, 3419, 3400, 3401,
+ 3415, 87, 87, 3416, 3420, 3403, 3417, 3418, 87, 3405,
+ 3423, 87, 87, 3408, 3409, 87, 3421, 3422, 87, 3414,
+ 3424, 87, 87, 87, 87, 87, 87, 3415, 87, 87,
+ 3416, 3420, 3426, 3417, 3418, 3427, 3425, 3423, 3428, 87,
+ 3429, 3430, 3435, 3421, 3422, 3433, 4172, 87, 87, 87,
+ 87, 3431, 3432, 3434, 3437, 87, 3438, 87, 87, 3426,
+ 87, 3439, 3427, 3425, 87, 3428, 3440, 3429, 3430, 87,
- 87, 87, 87, 3422, 87, 3423, 3434, 3426, 3425, 3427,
- 3435, 3433, 3436, 3430, 3437, 3439, 3438, 87, 87, 3431,
- 3432, 3440, 3441, 3443, 3444, 3442, 4153, 3445, 3446, 87,
- 87, 3448, 87, 3434, 87, 87, 3452, 87, 3433, 87,
- 87, 87, 3439, 3438, 3447, 3449, 3453, 3451, 3440, 87,
- 3443, 87, 3442, 87, 3445, 87, 87, 3450, 87, 87,
- 87, 3458, 3454, 3457, 3455, 4153, 87, 3465, 87, 3456,
- 3459, 3447, 3449, 87, 3451, 3460, 3463, 3462, 3466, 3464,
- 3461, 87, 3467, 87, 3450, 87, 87, 87, 87, 3454,
- 3457, 3468, 87, 87, 3465, 3470, 87, 3459, 3469, 3471,
+ 87, 3443, 3433, 3436, 3441, 87, 3442, 87, 3431, 3432,
+ 3434, 87, 3445, 87, 3444, 3447, 3454, 3446, 87, 87,
+ 3448, 87, 3449, 3440, 87, 3453, 87, 3455, 87, 3450,
+ 3436, 3441, 87, 3442, 87, 3451, 87, 87, 3452, 3445,
+ 3456, 3444, 87, 87, 3446, 87, 3457, 87, 3460, 3449,
+ 3458, 87, 3453, 3462, 87, 3459, 3450, 3461, 3463, 3465,
+ 87, 3464, 3451, 3467, 87, 3452, 87, 87, 3471, 87,
+ 87, 3466, 3469, 3457, 3472, 87, 3470, 3458, 3468, 3473,
+ 3462, 87, 3459, 87, 3461, 87, 87, 87, 3464, 87,
+ 87, 3474, 87, 3476, 3477, 3484, 3475, 3478, 3466, 3469,
- 87, 3472, 3473, 3463, 3462, 3484, 3464, 87, 3475, 3476,
- 87, 3474, 3482, 3477, 87, 87, 3479, 3478, 87, 4153,
- 3480, 3481, 3470, 87, 87, 3469, 87, 87, 87, 3473,
- 87, 87, 87, 87, 87, 3475, 3476, 3483, 3474, 3482,
- 3477, 87, 87, 3479, 3478, 3485, 87, 3480, 3481, 3486,
- 3487, 3489, 87, 3488, 3491, 3492, 3494, 3499, 4153, 3490,
- 3493, 3495, 87, 87, 3483, 3496, 87, 87, 3500, 4153,
- 3497, 3506, 3485, 3501, 4153, 87, 3486, 87, 3489, 87,
- 3488, 3491, 3492, 3498, 87, 3502, 3490, 3493, 87, 3503,
- 3505, 87, 3504, 87, 87, 3500, 3507, 87, 3506, 87,
+ 87, 87, 87, 3470, 3479, 3468, 3473, 3481, 3482, 3480,
+ 3485, 87, 3486, 3487, 3483, 87, 87, 87, 3589, 87,
+ 3476, 87, 3484, 87, 3478, 3488, 87, 87, 3489, 3490,
+ 3491, 3492, 4172, 4172, 3481, 3482, 87, 3495, 3496, 3493,
+ 87, 3483, 87, 3494, 87, 87, 3498, 3497, 3503, 4172,
+ 87, 87, 3488, 87, 3501, 3489, 87, 87, 3492, 87,
+ 3502, 87, 87, 3506, 3495, 3496, 3493, 3499, 3500, 87,
+ 3494, 87, 87, 3498, 3497, 87, 87, 87, 3504, 3505,
+ 3507, 3501, 3512, 3511, 3510, 87, 3518, 3502, 3508, 4172,
+ 87, 87, 87, 87, 3499, 3500, 3509, 87, 3513, 3515,
- 3501, 87, 3509, 87, 3508, 87, 3510, 3515, 3511, 4153,
- 3498, 87, 3502, 3519, 3512, 87, 3503, 3505, 87, 3504,
- 87, 87, 3513, 3507, 3514, 87, 87, 3520, 3521, 3509,
- 87, 3508, 3516, 3510, 3515, 3511, 87, 3517, 3518, 87,
- 87, 3512, 3523, 3527, 87, 87, 87, 3524, 3522, 3513,
- 3525, 3514, 87, 3526, 87, 3521, 3528, 3529, 4153, 3516,
- 87, 3530, 87, 3531, 3517, 3518, 3532, 87, 87, 87,
- 87, 3533, 87, 3534, 3524, 3522, 87, 3525, 3535, 3536,
- 3526, 3537, 3539, 3528, 87, 87, 3538, 3540, 3530, 87,
- 3531, 87, 3541, 87, 3542, 87, 3543, 87, 3533, 87,
+ 3517, 87, 3519, 3514, 3516, 3504, 3505, 3507, 87, 3512,
+ 3511, 3510, 87, 87, 3520, 3508, 3521, 4172, 3522, 4172,
+ 3523, 3524, 4172, 3509, 3527, 87, 3530, 3517, 87, 3519,
+ 87, 87, 87, 3525, 3528, 4172, 3531, 3529, 4172, 87,
+ 87, 3520, 87, 3521, 87, 3522, 87, 3523, 3524, 3526,
+ 3533, 3527, 87, 3530, 3532, 87, 87, 87, 87, 3535,
+ 3525, 3528, 87, 3531, 3529, 3534, 87, 3536, 3537, 3538,
+ 3539, 3542, 87, 3541, 87, 87, 3526, 3533, 3540, 3545,
+ 3543, 3532, 3544, 87, 3546, 87, 3535, 3548, 87, 3551,
+ 3547, 3550, 3534, 3549, 3536, 3537, 87, 87, 87, 87,
- 3534, 3544, 3547, 3570, 87, 87, 3536, 3548, 3537, 87,
- 3545, 3546, 87, 3538, 87, 87, 3549, 87, 87, 3541,
- 3551, 3542, 87, 3543, 3550, 3553, 4153, 3552, 3544, 3554,
- 87, 3555, 87, 3556, 87, 87, 4153, 3545, 3546, 87,
- 3557, 3560, 87, 3549, 4153, 3561, 3563, 3551, 87, 3558,
- 4153, 3550, 3553, 87, 3552, 87, 3554, 87, 3555, 3559,
- 3556, 87, 87, 87, 3562, 3564, 3566, 3557, 3560, 3567,
- 3568, 87, 87, 87, 3571, 87, 3558, 87, 87, 3565,
- 3569, 87, 3572, 3573, 87, 3574, 3559, 3575, 3576, 87,
- 4153, 3562, 3564, 3566, 87, 3579, 87, 87, 87, 3580,
+ 3541, 87, 87, 3552, 87, 3540, 3545, 3543, 3553, 3544,
+ 87, 87, 3554, 87, 87, 3555, 87, 3547, 3550, 3556,
+ 3549, 87, 3557, 3558, 3559, 3560, 87, 3561, 3562, 4172,
+ 3552, 87, 3564, 87, 3565, 3553, 87, 87, 3566, 87,
+ 3563, 87, 3555, 3567, 87, 87, 3556, 3569, 87, 3557,
+ 87, 87, 3560, 3572, 3561, 3562, 87, 3568, 3575, 3564,
+ 3570, 3565, 3573, 3571, 3574, 87, 3577, 3563, 4172, 3578,
+ 87, 87, 87, 3576, 3569, 87, 87, 3579, 87, 3580,
+ 3572, 87, 87, 3582, 3568, 3575, 87, 3570, 87, 3573,
+ 3571, 3574, 3581, 3577, 3583, 87, 3578, 3586, 3587, 87,
- 3577, 3571, 3578, 87, 3581, 87, 3565, 3569, 87, 3572,
- 3573, 3583, 3574, 3590, 3575, 87, 3582, 87, 3591, 3584,
- 87, 87, 3579, 3585, 3587, 3592, 3580, 3577, 3586, 3578,
- 87, 3581, 87, 87, 87, 3593, 3600, 87, 3583, 87,
- 87, 3588, 87, 3582, 3589, 87, 3584, 3594, 3598, 3595,
- 3585, 3587, 87, 87, 87, 3586, 87, 3596, 3597, 3599,
- 3601, 3602, 3593, 87, 4153, 87, 87, 87, 3588, 3603,
- 87, 3589, 3604, 3606, 3594, 3598, 3595, 3605, 3609, 87,
- 3607, 87, 87, 87, 3596, 3597, 3608, 3601, 3602, 3611,
- 4153, 87, 87, 3613, 3612, 87, 87, 3614, 3616, 3604,
+ 3576, 3584, 3585, 87, 3579, 87, 87, 87, 3588, 3592,
+ 87, 87, 3590, 3591, 3593, 87, 3594, 3595, 3596, 3581,
+ 3598, 3583, 4172, 87, 87, 87, 87, 87, 3584, 3585,
+ 3599, 87, 87, 87, 3600, 3588, 3592, 3601, 3597, 3590,
+ 3591, 3593, 87, 3594, 87, 3596, 3602, 3598, 3605, 87,
+ 3603, 3604, 87, 3606, 3609, 87, 3607, 3599, 3610, 3608,
+ 87, 3600, 87, 87, 3601, 3597, 87, 87, 87, 3611,
+ 3612, 3618, 3613, 3602, 3619, 3605, 4172, 3603, 3604, 87,
+ 3606, 87, 87, 3607, 3614, 87, 3608, 3615, 87, 4172,
+ 3616, 87, 3622, 3617, 3620, 87, 87, 3612, 87, 3613,
- 3606, 3610, 87, 87, 3605, 3615, 87, 3607, 3620, 4153,
- 87, 3617, 4153, 3608, 3618, 87, 87, 87, 3625, 87,
- 3613, 3612, 3619, 87, 3614, 3616, 87, 3624, 3610, 87,
- 3621, 87, 3615, 3622, 3623, 87, 87, 3628, 3617, 3630,
- 3626, 3618, 4153, 3629, 87, 3625, 87, 87, 87, 3619,
- 87, 87, 3632, 3631, 3624, 3627, 87, 3621, 3633, 87,
- 3622, 3623, 3635, 87, 3628, 87, 3630, 3626, 87, 3634,
- 3629, 87, 3636, 87, 3637, 3638, 3640, 3642, 3639, 3632,
- 3631, 3641, 3627, 3644, 87, 3633, 87, 87, 3643, 3635,
- 87, 3645, 3646, 3648, 3647, 3651, 3634, 3654, 87, 3636,
+ 3621, 87, 3626, 87, 3623, 3628, 3625, 3630, 3624, 3627,
+ 4172, 3614, 87, 87, 3615, 87, 87, 3616, 87, 87,
+ 3617, 3620, 87, 87, 87, 3631, 3629, 3621, 87, 3626,
+ 3634, 3623, 3632, 3625, 87, 3624, 3627, 87, 3633, 3635,
+ 3639, 4172, 3638, 3636, 4172, 3643, 3637, 87, 87, 87,
+ 3640, 4172, 3631, 3629, 87, 87, 87, 3634, 87, 3632,
+ 87, 3641, 3642, 3644, 87, 3633, 3635, 87, 87, 3638,
+ 3636, 3645, 3643, 3637, 3647, 87, 87, 3640, 3646, 3650,
+ 3648, 87, 87, 3652, 3649, 3651, 87, 3654, 3641, 3642,
+ 3644, 87, 87, 87, 87, 3653, 87, 3656, 3645, 3655,
- 3649, 87, 87, 3650, 3642, 3639, 87, 3653, 87, 87,
- 87, 87, 3652, 3656, 87, 3643, 3657, 87, 87, 3646,
- 87, 3647, 3651, 87, 87, 3655, 3659, 3649, 3660, 87,
- 3650, 87, 87, 3658, 3653, 3661, 87, 87, 3662, 3652,
- 3656, 3663, 3665, 3664, 3666, 3673, 3668, 87, 87, 87,
- 87, 87, 3655, 87, 3667, 3660, 3672, 87, 3669, 3675,
- 3658, 87, 3661, 3678, 87, 3662, 3671, 87, 3663, 3665,
- 3664, 3666, 87, 3668, 3670, 87, 3676, 87, 87, 3674,
- 87, 3667, 3677, 87, 3679, 3669, 87, 87, 3680, 3682,
- 3678, 87, 3681, 3671, 3683, 3690, 87, 3692, 87, 3686,
+ 87, 3647, 87, 3657, 3661, 3646, 3650, 3648, 3658, 87,
+ 3652, 3649, 3651, 87, 3654, 3659, 87, 87, 3662, 3663,
+ 3660, 3664, 3653, 3665, 87, 3666, 3655, 3667, 3673, 87,
+ 87, 3661, 3668, 3669, 3670, 3658, 3672, 87, 3671, 87,
+ 3676, 3678, 4172, 87, 87, 3662, 87, 87, 87, 87,
+ 3665, 3675, 3666, 3680, 87, 87, 87, 3674, 87, 3668,
+ 3669, 3670, 3677, 3672, 87, 3671, 87, 3679, 87, 87,
+ 3681, 3682, 87, 3684, 3685, 87, 3683, 87, 3675, 87,
+ 3680, 87, 87, 87, 3674, 3686, 3688, 87, 3687, 3677,
+ 3689, 3691, 3692, 3690, 3679, 87, 87, 3681, 3682, 3693,
- 3687, 3670, 3685, 3676, 87, 3688, 3674, 87, 3694, 3677,
- 87, 87, 3689, 3684, 3693, 87, 3682, 87, 87, 3681,
- 87, 87, 3690, 3691, 87, 3696, 3686, 3687, 3698, 3685,
- 87, 3695, 3697, 3699, 3703, 87, 87, 87, 3700, 3689,
- 3684, 3693, 3702, 87, 3701, 87, 3704, 3706, 87, 87,
- 3691, 87, 3696, 3705, 87, 3698, 87, 4153, 3695, 3697,
- 3699, 3707, 3708, 3709, 87, 3700, 87, 4153, 3711, 3702,
- 87, 3701, 3710, 87, 3712, 3715, 87, 87, 3716, 87,
- 3705, 3713, 3714, 3717, 87, 3718, 3719, 87, 3707, 3708,
- 87, 87, 87, 87, 87, 3711, 3720, 3724, 3723, 3710,
+ 3684, 3685, 87, 3683, 3694, 3695, 87, 3697, 87, 87,
+ 3698, 3696, 3686, 3688, 87, 3687, 87, 3689, 87, 3699,
+ 3690, 3700, 3701, 3702, 87, 3704, 3693, 87, 3707, 87,
+ 3709, 3708, 3695, 87, 3697, 3705, 87, 87, 3696, 87,
+ 3706, 87, 3703, 3711, 3710, 87, 87, 87, 3700, 3701,
+ 87, 87, 3704, 87, 3712, 3713, 3714, 3709, 3708, 3718,
+ 87, 3715, 3705, 3716, 3722, 3717, 3719, 3706, 87, 3703,
+ 87, 3710, 3720, 87, 87, 3721, 87, 3723, 3725, 87,
+ 3726, 3712, 87, 3714, 3724, 87, 3718, 87, 3715, 87,
+ 3716, 87, 3717, 3719, 3727, 3728, 87, 87, 3729, 3720,
- 87, 3725, 87, 3721, 3722, 3716, 87, 3726, 3713, 3714,
- 3717, 87, 3718, 3719, 3727, 87, 87, 3729, 3730, 3728,
- 3731, 3732, 3733, 87, 87, 3723, 3735, 3734, 87, 3736,
- 3721, 3722, 87, 87, 87, 3738, 87, 3737, 87, 87,
- 87, 3727, 3740, 87, 3729, 87, 3728, 87, 87, 3733,
- 3739, 3741, 3742, 87, 3734, 3743, 3736, 3744, 3746, 3751,
- 3745, 3754, 87, 87, 3737, 87, 87, 87, 3747, 87,
- 3750, 3749, 87, 87, 87, 3748, 87, 3739, 3741, 87,
- 3752, 87, 87, 87, 3744, 3746, 87, 3745, 3754, 3757,
- 3756, 3753, 3760, 3755, 3758, 3747, 87, 3750, 3749, 87,
+ 3731, 3730, 3721, 3734, 87, 4172, 3736, 3726, 87, 87,
+ 87, 3724, 3735, 3732, 3733, 87, 87, 3737, 3739, 87,
+ 87, 3727, 87, 87, 3738, 3729, 3740, 87, 3730, 3742,
+ 87, 3741, 87, 3736, 87, 3743, 3744, 3745, 87, 3735,
+ 3732, 3733, 87, 3746, 3737, 87, 3747, 87, 3749, 3748,
+ 3750, 3738, 3751, 3740, 3752, 3753, 3742, 3754, 3741, 87,
+ 3755, 87, 87, 87, 87, 87, 3756, 87, 3757, 3758,
+ 3746, 87, 87, 3747, 87, 87, 3748, 87, 3759, 87,
+ 3761, 3752, 3753, 3760, 87, 3762, 3764, 3755, 3769, 3763,
+ 3765, 87, 87, 3756, 87, 87, 3758, 87, 3766, 3768,
- 87, 87, 3748, 3759, 3761, 3762, 3764, 3752, 87, 3763,
- 87, 3768, 87, 3771, 3766, 3765, 87, 3756, 3753, 87,
- 3755, 3758, 87, 3772, 87, 3767, 3769, 87, 3774, 3775,
- 3759, 3761, 3762, 87, 87, 87, 3763, 87, 87, 3770,
- 3771, 3766, 3765, 87, 3777, 87, 3776, 87, 3773, 3778,
- 3772, 3780, 3767, 3769, 87, 87, 87, 87, 3781, 3779,
- 3782, 3784, 3783, 4153, 4153, 3789, 3770, 4153, 87, 87,
- 87, 3777, 3785, 3776, 87, 3773, 3786, 3792, 3780, 3788,
- 87, 87, 87, 87, 87, 87, 3779, 3782, 3784, 3783,
- 3787, 3791, 3789, 3790, 87, 3793, 3798, 87, 87, 3785,
+ 87, 3767, 3770, 87, 87, 87, 3775, 87, 3773, 87,
+ 3760, 3776, 87, 3764, 87, 3769, 3763, 3765, 3771, 87,
+ 3774, 87, 3772, 3779, 87, 3766, 3768, 87, 3767, 87,
+ 87, 3780, 3777, 3775, 3778, 3773, 3781, 3782, 87, 87,
+ 3783, 87, 3785, 87, 3784, 3771, 3786, 3774, 3787, 3772,
+ 87, 87, 87, 3797, 87, 87, 3790, 3791, 3780, 3777,
+ 3788, 3778, 3789, 3781, 3782, 87, 3793, 87, 3792, 3785,
+ 87, 3784, 87, 3786, 87, 3794, 3795, 3796, 87, 87,
+ 87, 3798, 3799, 3790, 3791, 87, 3800, 3788, 3801, 3789,
+ 87, 3803, 3802, 87, 3804, 3792, 87, 4172, 87, 87,
- 87, 87, 3794, 3786, 3792, 3795, 3788, 87, 87, 3796,
- 87, 3802, 87, 3801, 87, 3797, 87, 3787, 3791, 87,
- 3790, 3803, 3793, 3798, 87, 3799, 3800, 3804, 3805, 3794,
- 3809, 3808, 3795, 87, 87, 87, 3796, 3806, 3802, 3807,
- 3801, 3810, 3797, 87, 87, 3811, 87, 3812, 3803, 3813,
- 3815, 3814, 3799, 3800, 3804, 87, 3818, 3809, 3808, 87,
- 87, 87, 3816, 3817, 3806, 3820, 3807, 3819, 87, 3826,
- 87, 87, 87, 87, 3812, 3832, 3813, 87, 3814, 87,
- 3821, 3822, 3823, 87, 87, 3824, 3825, 4153, 87, 3816,
- 3817, 3830, 87, 3829, 3819, 3833, 87, 3827, 3828, 3837,
+ 3805, 87, 87, 3795, 3796, 3806, 3807, 87, 3798, 3799,
+ 87, 3808, 87, 87, 87, 3801, 87, 4172, 3803, 3802,
+ 3809, 3804, 3810, 3811, 3812, 3824, 87, 3805, 87, 3813,
+ 4172, 87, 3806, 3807, 3814, 87, 3816, 87, 3808, 3815,
+ 3821, 87, 3817, 87, 87, 87, 87, 3809, 3822, 3810,
+ 3811, 3812, 3820, 87, 3818, 3819, 3813, 87, 87, 3827,
+ 3828, 3814, 87, 3816, 87, 3823, 3815, 3821, 3825, 3817,
+ 87, 3826, 87, 3829, 87, 3822, 3830, 3832, 87, 3820,
+ 4172, 3818, 3819, 87, 3831, 3834, 3827, 3828, 3833, 87,
+ 87, 3835, 3823, 3836, 3837, 3825, 3838, 3839, 3826, 3845,
- 3835, 3831, 87, 3836, 87, 3838, 3839, 3821, 3834, 3842,
- 87, 4153, 3843, 87, 87, 3840, 87, 3844, 3830, 87,
- 3829, 87, 3833, 3841, 3847, 3845, 87, 87, 3831, 3848,
- 87, 87, 87, 3846, 87, 3834, 87, 87, 87, 87,
- 87, 3850, 3840, 87, 3844, 3849, 87, 3851, 87, 87,
- 3841, 3847, 3845, 3852, 87, 3853, 87, 3854, 3855, 4153,
- 3846, 3857, 3856, 3859, 3862, 3858, 3863, 3872, 3850, 3861,
- 87, 87, 3849, 87, 3851, 87, 3860, 3864, 87, 3867,
- 3852, 4153, 3853, 4153, 3854, 3855, 87, 87, 3857, 3856,
- 87, 87, 3858, 87, 87, 87, 3861, 3865, 3866, 87,
+ 87, 87, 3848, 87, 3832, 3851, 3840, 87, 87, 3849,
+ 87, 3831, 87, 87, 87, 3833, 3843, 3844, 3835, 3850,
+ 3836, 87, 3853, 3838, 87, 87, 87, 3846, 3847, 3848,
+ 3852, 87, 87, 3840, 3854, 87, 3849, 87, 3855, 87,
+ 3856, 3857, 3858, 3859, 3861, 87, 3850, 4172, 3862, 3853,
+ 3863, 3860, 3864, 3865, 3867, 3868, 87, 3852, 4172, 87,
+ 87, 87, 87, 3866, 87, 87, 3870, 3871, 87, 3872,
+ 3859, 87, 87, 87, 87, 87, 87, 3863, 3860, 3864,
+ 3865, 87, 3868, 3873, 3869, 87, 3874, 87, 3875, 3876,
+ 3866, 87, 87, 3870, 3871, 3877, 3872, 87, 87, 3878,
- 3876, 87, 87, 3860, 87, 3868, 3867, 3870, 3869, 3873,
- 87, 87, 3871, 3875, 3874, 3877, 3879, 3880, 3882, 87,
- 3878, 3883, 87, 87, 3865, 3866, 87, 3876, 87, 3881,
- 3885, 3886, 3868, 3888, 3884, 3869, 3873, 87, 3887, 87,
- 3875, 3874, 3877, 87, 3889, 87, 87, 3878, 87, 87,
- 87, 87, 87, 3891, 3890, 3892, 3881, 3885, 87, 3893,
- 87, 3884, 87, 3894, 3895, 3887, 3896, 3897, 3898, 3899,
- 3900, 87, 87, 3901, 87, 3903, 3906, 3904, 3905, 4153,
- 3891, 3890, 87, 3902, 87, 87, 87, 3910, 3915, 3911,
- 87, 87, 4153, 87, 87, 87, 87, 87, 3908, 87,
+ 3879, 87, 3880, 3881, 3882, 3883, 3887, 3884, 3885, 3888,
+ 3873, 3869, 87, 3874, 87, 3875, 3876, 87, 87, 3886,
+ 87, 3891, 3877, 3892, 87, 87, 87, 3879, 87, 3880,
+ 87, 87, 87, 3887, 3884, 3885, 3888, 3889, 3894, 3893,
+ 3895, 87, 3890, 4172, 87, 3898, 3886, 3897, 3896, 3899,
+ 3892, 87, 3900, 87, 4172, 87, 3901, 3902, 3904, 3903,
+ 3905, 3907, 87, 3906, 3908, 3894, 3893, 3895, 4172, 87,
+ 87, 87, 87, 87, 3897, 3896, 87, 3909, 3911, 3900,
+ 87, 87, 3912, 87, 87, 3904, 3903, 87, 87, 3910,
+ 3906, 87, 3913, 3914, 3915, 87, 3916, 3917, 87, 3918,
- 3901, 87, 87, 3906, 3904, 3905, 3907, 87, 3912, 3914,
- 3902, 3916, 3909, 3913, 87, 87, 3911, 3917, 87, 87,
- 87, 87, 3918, 87, 87, 3908, 3921, 3919, 3920, 3923,
- 3922, 4153, 3925, 3907, 87, 3912, 3914, 4153, 3916, 3909,
- 3913, 87, 3926, 87, 87, 87, 3924, 3928, 3933, 3918,
- 3930, 3927, 87, 3921, 3919, 3920, 87, 3922, 87, 87,
- 87, 3929, 87, 3931, 87, 3932, 3934, 4153, 4153, 3926,
- 4153, 87, 87, 3924, 3928, 3935, 87, 3930, 3927, 87,
- 87, 3940, 3939, 3936, 3938, 3937, 3942, 4153, 3929, 87,
- 3931, 87, 3932, 3934, 87, 87, 3941, 87, 87, 87,
+ 3919, 3920, 87, 3922, 3909, 87, 3923, 3921, 3924, 87,
+ 4172, 3929, 4172, 87, 3925, 87, 3910, 3926, 3934, 87,
+ 87, 87, 3927, 87, 87, 87, 87, 87, 3920, 87,
+ 87, 3931, 3930, 3923, 3921, 3924, 3928, 87, 87, 3933,
+ 3932, 3925, 3936, 3937, 3926, 87, 87, 87, 87, 3927,
+ 87, 87, 3935, 3942, 3938, 87, 3939, 3941, 3931, 3930,
+ 87, 3940, 3943, 3928, 3944, 3952, 3933, 3932, 87, 87,
+ 3937, 87, 87, 3945, 87, 3947, 3946, 3948, 87, 3935,
+ 87, 3938, 3949, 3939, 3941, 87, 3951, 87, 3940, 3943,
+ 3954, 87, 3950, 3953, 4172, 87, 3956, 87, 3959, 87,
- 3943, 4153, 3935, 87, 3944, 87, 3946, 3945, 3940, 3939,
- 3936, 3938, 3937, 3942, 87, 3947, 3950, 3948, 3949, 87,
- 3956, 3951, 3957, 3941, 3952, 3953, 87, 3943, 87, 87,
- 3958, 3944, 87, 3946, 3945, 87, 87, 3954, 3959, 87,
- 3955, 87, 3947, 3950, 3948, 3949, 87, 87, 3951, 87,
- 3961, 3952, 3953, 3962, 87, 3960, 3963, 87, 3964, 87,
- 3965, 3966, 3967, 87, 3954, 87, 87, 3955, 87, 3969,
- 87, 3972, 3968, 87, 3971, 3970, 87, 3961, 3973, 4153,
- 3962, 3975, 3960, 3963, 4153, 3964, 87, 3965, 87, 3967,
- 87, 87, 87, 87, 3978, 3974, 3969, 87, 3972, 3968,
+ 3945, 87, 3947, 3946, 3948, 87, 87, 3955, 87, 3949,
+ 87, 3957, 87, 3951, 3958, 87, 87, 3954, 3961, 3950,
+ 3953, 3960, 87, 3956, 3962, 3959, 3963, 87, 3966, 3964,
+ 87, 3967, 3965, 4172, 3955, 87, 87, 3969, 3957, 3968,
+ 3975, 3958, 4172, 4172, 87, 3961, 3976, 3974, 3960, 87,
+ 87, 3962, 87, 3963, 87, 3966, 3964, 87, 3967, 3965,
+ 3970, 87, 87, 3973, 3969, 3977, 3968, 87, 87, 3971,
+ 3972, 3978, 87, 87, 3974, 3979, 3980, 87, 3981, 87,
+ 3984, 3982, 3985, 3983, 3987, 3986, 4172, 3970, 87, 87,
+ 3973, 3988, 87, 87, 87, 87, 3971, 3972, 87, 3989,
- 87, 3971, 3970, 87, 3976, 3973, 87, 3977, 3975, 87,
- 3979, 3980, 3982, 3981, 3983, 87, 3985, 3986, 87, 3988,
- 3984, 3978, 3974, 3987, 87, 3990, 87, 4153, 87, 87,
- 87, 3976, 4153, 87, 3977, 87, 3995, 3979, 3980, 3982,
- 3981, 3983, 87, 3985, 87, 3989, 3988, 3984, 3991, 3992,
- 3987, 3993, 87, 3994, 3996, 87, 3998, 87, 87, 87,
- 87, 3997, 4000, 3995, 3999, 4001, 4153, 87, 87, 4003,
- 87, 4002, 3989, 4004, 4005, 3991, 3992, 4006, 3993, 4008,
- 3994, 3996, 87, 87, 4013, 87, 87, 4007, 3997, 4000,
- 4009, 3999, 87, 87, 87, 87, 4003, 4010, 4002, 4012,
+ 87, 87, 3979, 3980, 3990, 3981, 3991, 3984, 3982, 3992,
+ 3983, 3987, 3986, 87, 87, 3999, 87, 3993, 3988, 3994,
+ 3996, 3998, 87, 87, 87, 87, 3989, 3995, 87, 3997,
+ 87, 3990, 87, 3991, 4001, 4000, 3992, 4002, 87, 87,
+ 87, 87, 3999, 4003, 3993, 4004, 3994, 3996, 3998, 4005,
+ 4009, 4006, 87, 87, 3995, 4007, 3997, 87, 87, 4008,
+ 4010, 4001, 4000, 4011, 4002, 87, 4012, 87, 4013, 87,
+ 4003, 87, 4004, 87, 4014, 87, 87, 87, 4006, 4015,
+ 4017, 4016, 4007, 4020, 4018, 87, 4008, 4010, 87, 4019,
+ 4011, 4022, 87, 4012, 4023, 4013, 87, 4021, 4024, 4027,
- 87, 87, 4014, 87, 4006, 4011, 4008, 87, 4015, 4016,
- 4017, 87, 87, 4018, 4007, 87, 87, 4009, 4019, 87,
- 87, 4020, 4021, 87, 4010, 4022, 4012, 4025, 4023, 4014,
- 4027, 87, 4011, 4028, 4024, 4015, 4016, 87, 4026, 4029,
- 4018, 4031, 87, 4036, 4035, 87, 4032, 4033, 87, 87,
- 87, 87, 87, 87, 87, 4023, 87, 87, 87, 4030,
- 87, 4024, 4037, 87, 4038, 4026, 4029, 87, 87, 4034,
- 87, 4035, 87, 4032, 4033, 4040, 4039, 4041, 4045, 4042,
- 4153, 4043, 4153, 87, 87, 4044, 4030, 4046, 87, 4037,
- 4047, 4038, 87, 87, 4153, 87, 4034, 4052, 4048, 4049,
+ 4172, 4014, 87, 4032, 4025, 4028, 4015, 87, 4016, 4172,
+ 87, 4018, 87, 87, 4029, 4026, 4019, 87, 4022, 87,
+ 4172, 87, 87, 87, 4021, 87, 4027, 87, 4030, 4034,
+ 87, 4025, 4028, 4031, 4033, 87, 87, 4035, 4036, 4037,
+ 4038, 4029, 4026, 4039, 87, 87, 87, 87, 4040, 4041,
+ 4042, 4043, 4044, 4045, 4046, 4030, 4034, 87, 4047, 87,
+ 4031, 4033, 4048, 4049, 4035, 87, 4037, 87, 4050, 4055,
+ 87, 87, 87, 87, 87, 87, 87, 4042, 4043, 87,
+ 4045, 87, 4051, 4052, 4053, 87, 4056, 87, 4054, 4048,
+ 4049, 4059, 4058, 4061, 87, 87, 87, 87, 4057, 87,
- 87, 4050, 4153, 4039, 87, 4045, 4042, 87, 4043, 87,
- 87, 87, 4044, 87, 87, 4051, 4053, 87, 4054, 4055,
- 4060, 87, 4058, 4153, 4052, 4048, 4049, 4056, 4050, 87,
- 87, 4057, 4059, 4062, 87, 4063, 4065, 4061, 87, 4064,
- 87, 87, 4051, 4053, 87, 87, 4055, 4060, 4069, 4058,
- 87, 87, 4072, 4075, 4056, 87, 4073, 87, 4057, 4059,
- 4062, 87, 4063, 87, 4061, 4066, 4064, 4067, 4068, 4070,
- 87, 87, 4071, 87, 4076, 4069, 4074, 87, 87, 4072,
- 87, 4153, 4077, 87, 4078, 87, 4079, 4081, 4085, 4080,
- 4153, 4087, 4066, 4153, 4067, 4068, 4070, 87, 87, 4071,
+ 87, 4060, 4062, 4065, 4064, 4066, 87, 4172, 4172, 4051,
+ 4052, 4053, 87, 4056, 4063, 4054, 87, 87, 4073, 4058,
+ 4061, 4072, 87, 87, 4067, 4057, 87, 4068, 4069, 4062,
+ 87, 4064, 87, 87, 87, 4071, 87, 4070, 4074, 87,
+ 87, 4063, 87, 87, 4075, 87, 4076, 4077, 4072, 87,
+ 4078, 4067, 4079, 87, 4068, 4069, 4080, 4084, 87, 4082,
+ 4081, 4172, 4071, 4083, 4070, 4074, 87, 87, 87, 87,
+ 87, 4075, 4085, 4076, 4077, 4092, 4086, 4078, 87, 4079,
+ 4087, 87, 87, 4080, 87, 87, 4082, 4081, 4088, 87,
+ 4083, 4089, 4091, 4090, 4093, 87, 4094, 4095, 4099, 4085,
- 87, 4076, 4084, 4074, 87, 4082, 87, 4083, 87, 4077,
- 4089, 4078, 87, 4079, 87, 87, 4080, 4086, 87, 87,
- 4090, 4088, 4091, 4092, 4094, 87, 4096, 4093, 87, 4084,
- 87, 87, 4082, 87, 4083, 87, 4097, 4089, 4095, 87,
- 87, 4098, 87, 4099, 4086, 4100, 87, 4090, 4088, 4091,
- 4092, 4101, 4102, 4096, 4093, 4105, 87, 4103, 4106, 4107,
- 4104, 4110, 4108, 87, 4109, 4095, 87, 87, 87, 4112,
- 87, 87, 4100, 87, 4114, 87, 87, 87, 4101, 87,
- 4111, 4153, 4105, 87, 4103, 4106, 4107, 4104, 4110, 4108,
- 87, 4109, 87, 4116, 87, 4115, 4112, 4113, 87, 4117,
+ 87, 87, 87, 4086, 4096, 4097, 87, 4087, 4098, 4100,
+ 87, 4103, 4104, 4172, 4172, 4088, 87, 4106, 4089, 4091,
+ 4090, 4093, 4101, 87, 4095, 4099, 87, 87, 87, 87,
+ 87, 4096, 4097, 4102, 87, 4098, 4105, 4107, 4103, 87,
+ 87, 87, 4108, 4109, 87, 4111, 87, 4110, 4112, 4101,
+ 4113, 87, 4115, 87, 4114, 4172, 87, 4116, 87, 4117,
+ 4102, 4118, 87, 4105, 4107, 87, 87, 87, 4119, 4108,
+ 4109, 4120, 4111, 4121, 4110, 4112, 4128, 4124, 4172, 4115,
+ 4172, 4114, 87, 4125, 87, 4129, 87, 4122, 87, 4126,
+ 4123, 87, 4127, 87, 87, 4119, 4133, 87, 4120, 87,
- 87, 4114, 4120, 87, 4121, 4118, 4122, 4111, 4119, 4153,
- 87, 4124, 4123, 4125, 4153, 4128, 4153, 4126, 4131, 87,
- 4116, 4127, 4115, 87, 4113, 87, 4117, 87, 87, 4120,
- 4129, 87, 4118, 87, 87, 4119, 87, 87, 4124, 4123,
- 87, 87, 4128, 4130, 4126, 87, 4132, 4133, 4127, 4134,
- 4135, 87, 87, 4136, 87, 4137, 4138, 4129, 87, 4139,
- 4140, 87, 4141, 4142, 4143, 4144, 4145, 87, 87, 87,
- 4130, 87, 4147, 4132, 4133, 4146, 4134, 4135, 4148, 4153,
- 4136, 87, 4137, 87, 87, 4151, 4139, 4140, 87, 4141,
- 87, 4143, 87, 87, 87, 87, 4149, 4152, 4150, 4147,
+ 87, 4130, 87, 4128, 4124, 87, 87, 87, 4131, 4138,
+ 4125, 4135, 4129, 4136, 4122, 87, 4126, 4123, 4134, 4127,
+ 4132, 87, 87, 4133, 4137, 4139, 87, 4140, 4130, 87,
+ 4141, 87, 4144, 87, 4142, 4131, 4138, 87, 4135, 87,
+ 4136, 4143, 4145, 4146, 4172, 4134, 87, 4132, 4150, 4148,
+ 4147, 4137, 4139, 4172, 87, 4172, 87, 87, 87, 87,
+ 4152, 4142, 87, 87, 4149, 4151, 87, 4153, 4143, 4145,
+ 4146, 87, 87, 87, 4156, 87, 4148, 4147, 4154, 4157,
+ 4155, 4161, 87, 4160, 4162, 4158, 87, 4152, 87, 87,
+ 4159, 4149, 4151, 87, 4153, 4163, 4164, 4172, 87, 4165,
- 87, 4153, 4146, 4153, 87, 4148, 87, 4153, 4153, 4153,
- 4153, 4153, 87, 4153, 4153, 4153, 4153, 4153, 4153, 4153,
- 4153, 4153, 4153, 4149, 87, 4150, 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, 4153, 90, 90,
- 90, 90, 165, 165, 4153, 4153, 4153, 165, 165, 167,
- 167, 4153, 4153, 167, 4153, 167, 169, 4153, 4153, 4153,
+ 87, 4156, 4166, 4167, 87, 4154, 87, 4155, 87, 87,
+ 4160, 4162, 4158, 4168, 4170, 4171, 4172, 4159, 4172, 87,
+ 4169, 87, 87, 87, 87, 87, 4165, 4172, 87, 4166,
+ 4167, 4172, 4172, 4172, 4172, 4172, 4172, 4172, 4172, 4172,
+ 4168, 87, 87, 4172, 4172, 4172, 4172, 4169, 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, 4172,
- 4153, 4153, 169, 172, 172, 4153, 4153, 4153, 172, 172,
- 174, 4153, 4153, 4153, 4153, 4153, 174, 176, 176, 4153,
- 176, 176, 176, 176, 179, 4153, 4153, 4153, 4153, 4153,
- 179, 182, 182, 4153, 4153, 4153, 182, 182, 91, 91,
- 4153, 91, 91, 91, 91, 17, 4153, 4153, 4153, 4153,
- 4153, 4153, 4153, 4153, 4153, 4153, 4153, 4153, 4153, 4153,
- 4153, 4153, 4153, 4153, 4153, 4153, 4153, 4153, 4153, 4153,
- 4153, 4153, 4153, 4153, 4153, 4153, 4153, 4153, 4153, 4153,
- 4153, 4153, 4153, 4153, 4153, 4153, 4153, 4153, 4153, 4153,
- 4153, 4153, 4153, 4153, 4153, 4153, 4153, 4153, 4153, 4153,
+ 90, 90, 90, 90, 165, 165, 4172, 4172, 4172, 165,
+ 165, 167, 167, 4172, 4172, 167, 4172, 167, 169, 4172,
+ 4172, 4172, 4172, 4172, 169, 172, 172, 4172, 4172, 4172,
+ 172, 172, 174, 4172, 4172, 4172, 4172, 4172, 174, 176,
+ 176, 4172, 176, 176, 176, 176, 179, 4172, 4172, 4172,
+ 4172, 4172, 179, 182, 182, 4172, 4172, 4172, 182, 182,
+ 91, 91, 4172, 91, 91, 91, 91, 17, 4172, 4172,
+ 4172, 4172, 4172, 4172, 4172, 4172, 4172, 4172, 4172, 4172,
+ 4172, 4172, 4172, 4172, 4172, 4172, 4172, 4172, 4172, 4172,
+ 4172, 4172, 4172, 4172, 4172, 4172, 4172, 4172, 4172, 4172,
- 4153, 4153, 4153, 4153, 4153, 4153, 4153, 4153, 4153, 4153,
- 4153, 4153
+ 4172, 4172, 4172, 4172, 4172, 4172, 4172, 4172, 4172, 4172,
+ 4172, 4172, 4172, 4172, 4172, 4172, 4172, 4172, 4172, 4172,
+ 4172, 4172, 4172, 4172, 4172, 4172, 4172, 4172, 4172, 4172,
+ 4172, 4172, 4172, 4172
} ;
-static const flex_int16_t yy_chk[11913] =
+static const flex_int16_t yy_chk[11935] =
{ 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
@@ -3121,16 +3127,16 @@ static const flex_int16_t yy_chk[11913] =
7, 7, 7, 33, 7, 8, 8, 8, 8, 32,
8, 9, 9, 9, 10, 10, 10, 19, 52, 52,
- 4161, 19, 238, 3, 32, 33, 4, 68, 68, 5,
- 33, 6, 3312, 13, 13, 13, 13, 7, 13, 14,
+ 4180, 19, 238, 3, 32, 33, 4, 68, 68, 5,
+ 33, 6, 3329, 13, 13, 13, 13, 7, 13, 14,
14, 14, 14, 8, 14, 15, 15, 15, 9, 25,
238, 10, 11, 11, 11, 11, 11, 11, 12, 12,
12, 12, 12, 12, 16, 16, 16, 34, 28, 85,
- 85, 13, 11, 46, 1248, 25, 25, 14, 12, 34,
- 311, 23, 15, 23, 23, 46, 23, 1235, 28, 88,
+ 85, 13, 11, 46, 1252, 25, 25, 14, 12, 34,
+ 311, 23, 15, 23, 23, 46, 23, 1239, 28, 88,
11, 28, 23, 88, 34, 28, 12, 166, 166, 11,
46, 16, 173, 173, 57, 12, 30, 57, 29, 311,
- 45, 182, 37, 73, 30, 28, 26, 1235, 37, 23,
+ 45, 182, 37, 73, 30, 28, 26, 1239, 37, 23,
24, 24, 29, 26, 24, 30, 73, 26, 181, 24,
26, 24, 30, 30, 29, 29, 45, 45, 24, 37,
@@ -3156,10 +3162,10 @@ static const flex_int16_t yy_chk[11913] =
71, 155, 107, 76, 40, 40, 80, 40, 80, 80,
107, 80, 100, 117, 113, 106, 40, 40, 117, 75,
- 188, 40, 1063, 113, 188, 87, 202, 87, 87, 107,
+ 188, 40, 1066, 113, 188, 87, 202, 87, 87, 107,
87, 40, 40, 71, 40, 41, 87, 90, 41, 90,
90, 113, 90, 103, 103, 41, 104, 188, 90, 41,
- 41, 108, 104, 1063, 104, 114, 103, 41, 202, 105,
+ 41, 108, 104, 1066, 104, 114, 103, 41, 202, 105,
105, 69, 41, 64, 114, 41, 122, 104, 105, 108,
103, 103, 41, 104, 122, 90, 41, 41, 118, 104,
110, 104, 114, 108, 112, 112, 105, 105, 116, 110,
@@ -3195,12 +3201,12 @@ static const flex_int16_t yy_chk[11913] =
196, 195, 193, 189, 194, 205, 198, 197, 206, 194,
189, 196, 198, 199, 200, 199, 197, 203, 201, 200,
201, 203, 207, 206, 209, 203, 208, 207, 210, 212,
- 213, 205, 205, 211, 208, 206, 212, 828, 198, 198,
- 199, 214, 203, 623, 201, 201, 209, 201, 211, 203,
+ 213, 205, 205, 211, 208, 206, 212, 830, 198, 198,
+ 199, 214, 203, 624, 201, 201, 209, 201, 211, 203,
210, 209, 203, 208, 207, 210, 212, 215, 213, 0,
- 211, 216, 213, 217, 214, 218, 828, 239, 214, 203,
- 204, 623, 216, 220, 221, 204, 217, 218, 0, 215,
+ 211, 216, 213, 217, 214, 218, 830, 239, 214, 203,
+ 204, 624, 216, 220, 221, 204, 217, 218, 0, 215,
204, 222, 220, 224, 215, 213, 204, 204, 216, 225,
217, 219, 218, 204, 219, 0, 221, 204, 225, 239,
220, 221, 204, 222, 226, 224, 219, 204, 222, 227,
@@ -3251,1176 +3257,1178 @@ static const flex_int16_t yy_chk[11913] =
351, 363, 354, 352, 353, 351, 358, 354, 351, 0,
357, 359, 359, 351, 351, 351, 351, 356, 358, 360,
356, 382, 362, 351, 360, 362, 0, 351, 363, 370,
- 0, 0, 351, 0, 368, 351, 359, 365, 359, 359,
+ 0, 0, 351, 0, 0, 351, 359, 365, 359, 359,
- 351, 351, 351, 351, 355, 369, 355, 364, 355, 365,
- 364, 360, 368, 366, 0, 372, 370, 364, 355, 355,
- 355, 368, 355, 369, 365, 366, 367, 367, 355, 371,
- 376, 355, 369, 355, 364, 355, 367, 364, 373, 0,
- 366, 372, 372, 375, 378, 355, 355, 355, 374, 355,
- 374, 371, 376, 367, 367, 375, 371, 376, 379, 378,
- 380, 381, 385, 387, 373, 373, 379, 380, 0, 385,
- 375, 378, 383, 381, 383, 374, 394, 0, 386, 0,
- 388, 0, 390, 383, 390, 379, 389, 380, 381, 385,
- 383, 391, 389, 392, 394, 387, 395, 396, 383, 383,
+ 351, 351, 351, 351, 355, 368, 355, 364, 355, 365,
+ 364, 360, 369, 366, 0, 372, 370, 364, 355, 355,
+ 355, 355, 355, 368, 365, 366, 367, 367, 355, 371,
+ 369, 355, 368, 355, 364, 355, 367, 364, 373, 369,
+ 366, 372, 372, 375, 376, 355, 355, 355, 355, 355,
+ 374, 371, 374, 367, 367, 375, 371, 378, 0, 379,
+ 387, 380, 381, 386, 373, 373, 376, 379, 380, 388,
+ 375, 376, 378, 385, 381, 392, 383, 374, 383, 397,
+ 385, 396, 395, 394, 378, 386, 379, 383, 380, 381,
+ 386, 388, 387, 389, 383, 390, 388, 390, 391, 389,
- 386, 383, 388, 394, 391, 386, 390, 388, 389, 390,
- 383, 390, 397, 389, 393, 398, 402, 383, 391, 389,
- 405, 401, 395, 395, 403, 392, 412, 393, 401, 396,
- 393, 412, 393, 405, 402, 0, 403, 398, 393, 397,
- 402, 393, 398, 402, 404, 0, 413, 405, 401, 407,
- 0, 403, 0, 0, 393, 410, 404, 393, 412, 393,
- 399, 402, 399, 411, 0, 407, 408, 410, 399, 415,
- 0, 404, 399, 407, 421, 415, 407, 399, 413, 408,
- 399, 411, 410, 421, 414, 417, 399, 399, 418, 399,
- 411, 414, 407, 408, 416, 399, 415, 417, 470, 399,
+ 385, 394, 383, 383, 416, 383, 397, 392, 395, 395,
+ 394, 391, 416, 396, 383, 389, 393, 398, 402, 390,
+ 389, 383, 390, 401, 390, 391, 389, 0, 421, 393,
+ 401, 416, 393, 407, 393, 0, 402, 421, 405, 398,
+ 393, 403, 402, 393, 398, 402, 404, 0, 413, 407,
+ 401, 405, 0, 403, 408, 421, 393, 407, 404, 393,
+ 407, 393, 399, 402, 399, 405, 410, 408, 403, 411,
+ 399, 417, 412, 404, 399, 420, 407, 412, 410, 399,
+ 413, 408, 399, 417, 415, 0, 0, 411, 399, 399,
+ 415, 399, 414, 410, 419, 424, 411, 399, 417, 414,
- 420, 421, 416, 0, 399, 414, 418, 399, 400, 419,
- 400, 414, 417, 422, 422, 418, 424, 419, 414, 470,
- 423, 416, 433, 400, 425, 470, 400, 423, 400, 424,
- 400, 440, 420, 425, 400, 400, 419, 400, 427, 428,
- 422, 0, 0, 424, 0, 427, 428, 423, 0, 429,
- 400, 430, 431, 400, 433, 400, 425, 400, 409, 409,
- 425, 429, 426, 440, 434, 427, 428, 0, 409, 409,
- 409, 409, 409, 430, 431, 409, 429, 436, 430, 431,
- 426, 432, 0, 409, 426, 409, 409, 435, 438, 426,
- 434, 434, 436, 432, 435, 409, 409, 409, 409, 409,
+ 418, 399, 419, 433, 412, 0, 399, 420, 424, 399,
+ 400, 415, 400, 414, 422, 422, 423, 427, 418, 414,
+ 426, 419, 424, 423, 427, 400, 414, 418, 400, 0,
+ 400, 425, 400, 0, 0, 433, 400, 400, 426, 400,
+ 425, 422, 426, 423, 427, 0, 0, 426, 0, 428,
+ 0, 0, 400, 430, 429, 400, 428, 400, 0, 400,
+ 409, 409, 431, 425, 0, 426, 429, 425, 434, 0,
+ 409, 409, 409, 409, 409, 430, 428, 409, 432, 435,
+ 430, 429, 437, 438, 431, 409, 435, 409, 409, 431,
+ 432, 437, 436, 439, 434, 434, 438, 409, 409, 409,
- 437, 438, 409, 439, 436, 442, 443, 426, 432, 437,
- 447, 441, 439, 441, 435, 438, 442, 444, 444, 0,
- 450, 447, 445, 448, 446, 453, 449, 437, 443, 445,
- 439, 446, 442, 443, 448, 451, 0, 447, 441, 449,
- 452, 452, 0, 0, 455, 450, 444, 450, 453, 445,
- 448, 446, 453, 449, 454, 456, 0, 451, 452, 0,
- 457, 0, 451, 456, 458, 452, 460, 452, 452, 454,
- 455, 455, 457, 463, 459, 458, 464, 454, 468, 460,
- 482, 454, 456, 459, 465, 452, 466, 457, 461, 461,
- 467, 458, 469, 460, 464, 471, 454, 472, 469, 0,
+ 409, 409, 439, 440, 409, 432, 435, 436, 0, 437,
+ 438, 441, 442, 441, 443, 444, 444, 0, 445, 436,
+ 439, 446, 447, 442, 451, 445, 448, 449, 446, 453,
+ 450, 0, 455, 447, 0, 440, 443, 448, 441, 442,
+ 449, 443, 452, 452, 444, 445, 451, 463, 446, 447,
+ 454, 451, 453, 448, 449, 450, 453, 450, 455, 455,
+ 452, 458, 457, 456, 465, 454, 459, 452, 460, 452,
+ 452, 456, 458, 454, 457, 459, 466, 454, 477, 463,
+ 464, 460, 461, 461, 467, 468, 465, 452, 458, 457,
+ 456, 465, 454, 459, 461, 460, 461, 0, 464, 466,
- 461, 459, 461, 464, 473, 463, 465, 461, 467, 466,
- 468, 465, 482, 466, 475, 461, 461, 467, 471, 469,
- 476, 472, 471, 477, 472, 0, 473, 461, 474, 461,
- 462, 473, 479, 484, 476, 474, 478, 480, 462, 462,
- 475, 475, 462, 462, 478, 481, 462, 476, 0, 485,
- 477, 480, 462, 483, 479, 474, 484, 462, 0, 479,
- 484, 485, 486, 478, 480, 462, 462, 490, 486, 462,
- 462, 481, 481, 462, 487, 483, 485, 488, 0, 489,
- 483, 491, 490, 492, 496, 493, 489, 489, 491, 486,
- 496, 494, 492, 0, 490, 0, 487, 497, 498, 488,
+ 469, 461, 467, 466, 470, 477, 469, 464, 0, 461,
+ 461, 467, 471, 0, 472, 0, 476, 468, 475, 0,
+ 473, 461, 474, 461, 462, 470, 478, 469, 479, 474,
+ 476, 470, 462, 462, 478, 471, 462, 462, 472, 471,
+ 462, 472, 473, 476, 475, 475, 462, 473, 480, 474,
+ 479, 462, 481, 478, 482, 479, 485, 0, 483, 462,
+ 462, 484, 480, 462, 462, 486, 491, 462, 485, 487,
+ 0, 486, 488, 491, 489, 480, 0, 0, 481, 481,
+ 483, 489, 489, 485, 484, 483, 482, 490, 484, 492,
+ 493, 487, 486, 491, 488, 494, 487, 495, 492, 488,
- 493, 487, 495, 499, 488, 489, 489, 500, 491, 501,
- 492, 496, 493, 489, 489, 494, 502, 495, 494, 497,
- 498, 503, 500, 504, 497, 498, 499, 503, 505, 495,
- 499, 507, 508, 505, 500, 501, 501, 511, 502, 510,
- 512, 514, 513, 502, 520, 510, 512, 514, 503, 504,
- 504, 515, 523, 520, 516, 505, 511, 517, 508, 508,
- 513, 516, 522, 507, 511, 523, 510, 512, 514, 513,
- 521, 520, 517, 515, 519, 524, 519, 521, 515, 523,
- 0, 516, 525, 519, 517, 525, 526, 527, 528, 529,
- 534, 0, 535, 525, 522, 530, 531, 521, 530, 533,
+ 489, 489, 490, 497, 496, 493, 498, 503, 489, 489,
+ 496, 499, 495, 500, 490, 504, 492, 493, 502, 494,
+ 499, 504, 494, 505, 495, 497, 501, 506, 498, 503,
+ 497, 496, 506, 498, 503, 508, 500, 509, 499, 512,
+ 500, 501, 504, 514, 502, 502, 511, 516, 517, 505,
+ 505, 513, 511, 501, 506, 517, 515, 513, 512, 523,
+ 0, 514, 515, 509, 509, 518, 512, 508, 525, 516,
+ 514, 524, 521, 511, 516, 517, 527, 520, 513, 520,
+ 518, 521, 522, 515, 524, 526, 520, 528, 526, 522,
+ 0, 523, 518, 0, 527, 529, 526, 530, 524, 521,
- 0, 519, 529, 519, 526, 532, 537, 524, 534, 525,
- 528, 533, 525, 526, 530, 528, 529, 534, 532, 527,
- 531, 536, 530, 531, 535, 530, 533, 538, 536, 539,
- 537, 540, 532, 537, 541, 542, 544, 543, 0, 541,
- 546, 542, 539, 545, 547, 0, 544, 549, 536, 0,
- 538, 0, 546, 540, 585, 549, 539, 548, 540, 538,
- 543, 541, 542, 544, 543, 545, 547, 546, 548, 550,
- 545, 547, 553, 555, 549, 585, 554, 538, 556, 553,
- 557, 585, 554, 550, 548, 555, 558, 559, 557, 0,
- 0, 0, 602, 565, 560, 602, 550, 551, 559, 553,
+ 525, 532, 531, 527, 520, 531, 520, 533, 535, 522,
+ 530, 534, 526, 536, 0, 526, 538, 529, 539, 528,
+ 533, 531, 529, 534, 530, 532, 535, 541, 532, 531,
+ 537, 540, 531, 543, 533, 535, 544, 537, 534, 543,
+ 538, 539, 542, 538, 540, 536, 545, 542, 546, 541,
+ 539, 549, 547, 550, 541, 548, 545, 537, 540, 544,
+ 543, 550, 549, 544, 547, 554, 557, 551, 539, 542,
+ 546, 556, 554, 545, 561, 546, 560, 548, 549, 547,
+ 550, 551, 548, 556, 555, 559, 0, 560, 558, 557,
+ 555, 0, 554, 557, 551, 552, 558, 561, 556, 566,
- 555, 556, 551, 554, 551, 556, 562, 557, 558, 562,
- 551, 565, 551, 558, 559, 551, 551, 560, 562, 602,
- 565, 560, 551, 551, 551, 563, 561, 569, 567, 551,
- 561, 551, 572, 562, 566, 564, 562, 551, 564, 551,
- 567, 0, 551, 551, 566, 563, 564, 563, 561, 551,
- 568, 569, 563, 561, 569, 567, 570, 561, 572, 572,
- 570, 568, 564, 571, 575, 564, 566, 573, 577, 573,
- 571, 566, 563, 574, 576, 581, 575, 568, 578, 579,
- 577, 580, 0, 570, 583, 582, 580, 579, 0, 576,
- 571, 575, 583, 589, 573, 577, 588, 581, 584, 574,
+ 552, 561, 552, 560, 0, 0, 563, 559, 552, 563,
+ 552, 555, 559, 552, 552, 558, 0, 566, 563, 0,
+ 552, 552, 552, 564, 562, 0, 566, 552, 562, 552,
+ 570, 565, 568, 563, 565, 552, 563, 552, 573, 567,
+ 552, 552, 565, 564, 568, 564, 562, 552, 575, 567,
+ 564, 562, 569, 0, 570, 562, 571, 570, 565, 568,
+ 571, 565, 572, 569, 573, 573, 574, 577, 574, 572,
+ 564, 567, 576, 578, 575, 575, 567, 579, 580, 569,
+ 582, 592, 577, 571, 576, 578, 580, 581, 583, 572,
+ 584, 586, 581, 574, 577, 588, 585, 590, 584, 576,
- 574, 576, 581, 582, 578, 578, 579, 587, 580, 590,
- 584, 583, 582, 591, 588, 592, 589, 593, 596, 594,
- 589, 597, 587, 588, 595, 584, 598, 594, 603, 593,
- 592, 599, 590, 597, 587, 598, 590, 595, 600, 601,
- 604, 605, 592, 607, 593, 591, 594, 603, 597, 608,
- 596, 595, 600, 598, 599, 603, 606, 609, 599, 0,
- 613, 610, 612, 611, 601, 600, 601, 604, 614, 615,
- 616, 606, 609, 605, 612, 607, 611, 621, 0, 616,
- 622, 608, 613, 606, 609, 610, 620, 613, 610, 612,
- 611, 614, 617, 615, 618, 614, 615, 616, 619, 617,
+ 578, 589, 582, 579, 579, 580, 583, 582, 585, 591,
+ 588, 593, 586, 592, 581, 583, 596, 584, 586, 589,
+ 590, 594, 588, 585, 590, 597, 593, 595, 589, 596,
+ 606, 599, 591, 594, 598, 595, 591, 600, 593, 601,
+ 599, 603, 602, 596, 603, 605, 598, 608, 594, 609,
+ 607, 604, 0, 601, 595, 0, 610, 597, 599, 0,
+ 600, 598, 606, 611, 600, 607, 601, 602, 603, 602,
+ 604, 610, 605, 612, 614, 615, 613, 607, 604, 608,
+ 616, 609, 617, 610, 619, 625, 612, 611, 613, 620,
+ 611, 617, 621, 622, 620, 619, 614, 623, 615, 626,
- 620, 624, 617, 619, 621, 618, 627, 622, 625, 626,
- 617, 628, 630, 620, 629, 633, 628, 631, 630, 617,
- 634, 618, 632, 629, 636, 0, 617, 641, 634, 617,
- 619, 635, 631, 624, 637, 625, 626, 633, 627, 630,
- 640, 629, 633, 628, 631, 643, 632, 634, 636, 632,
- 635, 636, 639, 638, 645, 642, 637, 638, 635, 641,
- 639, 637, 642, 640, 644, 646, 650, 640, 643, 647,
- 0, 648, 643, 644, 654, 652, 645, 651, 646, 639,
- 638, 645, 642, 648, 649, 651, 652, 653, 650, 668,
- 649, 644, 646, 650, 653, 647, 647, 655, 648, 656,
+ 612, 614, 615, 613, 616, 618, 621, 616, 627, 617,
+ 635, 619, 618, 628, 632, 618, 630, 625, 635, 621,
+ 622, 620, 629, 618, 623, 630, 626, 629, 631, 632,
+ 0, 634, 618, 633, 631, 627, 642, 635, 637, 618,
+ 636, 632, 618, 630, 638, 628, 639, 641, 640, 0,
+ 639, 648, 0, 634, 629, 631, 640, 633, 634, 636,
+ 633, 644, 637, 645, 646, 637, 638, 636, 642, 643,
+ 641, 638, 645, 639, 641, 640, 643, 648, 648, 647,
+ 651, 649, 0, 650, 644, 655, 646, 652, 644, 650,
+ 645, 646, 647, 649, 653, 652, 643, 654, 656, 657,
- 658, 660, 652, 659, 651, 0, 654, 661, 657, 658,
- 660, 649, 656, 657, 653, 662, 657, 657, 661, 655,
- 664, 668, 667, 663, 655, 0, 656, 658, 660, 659,
- 659, 670, 657, 664, 661, 657, 665, 662, 669, 671,
- 657, 0, 662, 657, 657, 663, 667, 664, 665, 667,
- 663, 672, 673, 674, 675, 670, 669, 676, 670, 672,
- 677, 671, 671, 665, 679, 669, 671, 681, 676, 677,
- 678, 680, 683, 679, 673, 682, 675, 674, 672, 673,
- 674, 675, 682, 684, 676, 680, 687, 677, 671, 681,
- 678, 679, 685, 686, 681, 690, 691, 678, 680, 683,
+ 0, 0, 651, 0, 654, 653, 647, 651, 649, 659,
+ 650, 660, 657, 663, 652, 0, 669, 655, 659, 0,
+ 656, 653, 658, 661, 654, 656, 657, 658, 662, 664,
+ 658, 658, 661, 666, 665, 663, 659, 660, 660, 662,
+ 663, 668, 671, 0, 670, 666, 658, 665, 669, 658,
+ 661, 664, 672, 675, 658, 662, 664, 658, 658, 673,
+ 666, 665, 670, 674, 678, 668, 671, 673, 668, 671,
+ 676, 670, 677, 678, 672, 672, 679, 675, 680, 672,
+ 675, 681, 682, 677, 684, 674, 673, 680, 685, 0,
+ 674, 678, 676, 683, 686, 681, 679, 676, 687, 677,
- 685, 684, 682, 688, 689, 686, 690, 693, 687, 688,
- 684, 692, 0, 687, 691, 694, 695, 689, 697, 685,
- 686, 701, 690, 691, 696, 696, 692, 698, 699, 697,
- 688, 689, 700, 702, 701, 703, 694, 705, 692, 693,
- 695, 700, 694, 695, 704, 697, 702, 707, 701, 708,
- 699, 698, 704, 696, 698, 699, 706, 703, 710, 700,
- 702, 709, 703, 709, 711, 712, 718, 713, 715, 705,
- 712, 704, 714, 708, 0, 711, 708, 723, 706, 707,
- 710, 713, 716, 706, 714, 710, 715, 720, 709, 721,
- 0, 711, 727, 719, 713, 715, 716, 712, 718, 714,
+ 683, 672, 686, 679, 682, 680, 685, 688, 681, 682,
+ 687, 684, 689, 690, 693, 685, 691, 692, 689, 695,
+ 683, 686, 694, 697, 0, 687, 690, 696, 692, 688,
+ 698, 698, 693, 700, 688, 699, 701, 694, 707, 689,
+ 690, 693, 691, 691, 692, 705, 699, 697, 696, 694,
+ 697, 695, 702, 703, 696, 704, 706, 700, 701, 698,
+ 700, 702, 699, 701, 706, 708, 703, 705, 704, 709,
+ 707, 710, 705, 711, 720, 711, 714, 712, 713, 702,
+ 703, 714, 704, 706, 716, 717, 721, 708, 715, 713,
+ 725, 722, 708, 718, 721, 710, 716, 723, 710, 712,
- 0, 719, 724, 723, 723, 720, 722, 0, 725, 716,
- 717, 721, 717, 722, 720, 728, 721, 726, 730, 717,
- 719, 729, 724, 730, 727, 717, 717, 717, 725, 724,
- 728, 729, 726, 722, 717, 725, 731, 717, 732, 717,
- 732, 726, 728, 729, 726, 733, 717, 734, 729, 742,
- 730, 735, 717, 717, 717, 734, 743, 0, 729, 726,
- 736, 740, 731, 731, 737, 732, 736, 744, 738, 740,
- 733, 739, 733, 737, 734, 741, 735, 738, 735, 743,
- 739, 742, 741, 743, 745, 744, 751, 736, 740, 746,
- 747, 737, 748, 750, 744, 738, 745, 749, 739, 747,
+ 711, 709, 715, 717, 712, 713, 720, 718, 714, 722,
+ 0, 716, 717, 721, 726, 715, 725, 725, 722, 723,
+ 718, 719, 724, 719, 723, 730, 727, 728, 729, 724,
+ 719, 0, 733, 0, 726, 736, 719, 719, 719, 732,
+ 730, 726, 728, 736, 732, 719, 727, 735, 719, 724,
+ 719, 728, 730, 727, 728, 737, 731, 719, 733, 733,
+ 729, 738, 736, 719, 719, 719, 731, 738, 734, 728,
+ 734, 732, 735, 742, 735, 739, 740, 741, 731, 744,
+ 737, 742, 737, 731, 739, 740, 741, 743, 738, 745,
+ 746, 750, 749, 731, 743, 734, 751, 747, 748, 750,
- 748, 746, 741, 752, 755, 750, 749, 756, 754, 753,
- 752, 745, 755, 756, 0, 758, 746, 747, 751, 748,
- 750, 749, 753, 754, 749, 0, 766, 0, 760, 757,
- 752, 755, 759, 749, 756, 754, 753, 757, 758, 760,
- 761, 759, 758, 763, 763, 762, 764, 767, 766, 761,
- 765, 770, 763, 766, 764, 760, 757, 762, 765, 759,
- 767, 768, 769, 772, 770, 0, 0, 761, 771, 773,
- 763, 763, 762, 764, 767, 774, 771, 765, 770, 772,
- 775, 778, 773, 779, 776, 769, 777, 768, 768, 769,
- 772, 775, 776, 782, 780, 771, 773, 774, 786, 0,
+ 742, 749, 739, 740, 741, 751, 753, 756, 746, 747,
+ 748, 744, 745, 755, 743, 752, 745, 746, 750, 749,
+ 751, 754, 756, 751, 747, 748, 755, 752, 754, 757,
+ 758, 759, 751, 764, 756, 761, 758, 757, 753, 759,
+ 755, 760, 752, 762, 761, 764, 763, 768, 754, 770,
+ 765, 765, 769, 766, 762, 763, 757, 758, 759, 765,
+ 764, 766, 761, 767, 760, 769, 771, 0, 760, 768,
+ 762, 767, 772, 763, 768, 770, 770, 765, 765, 769,
+ 766, 774, 775, 773, 776, 772, 778, 777, 779, 771,
+ 767, 773, 780, 771, 778, 775, 781, 774, 777, 772,
- 777, 778, 774, 781, 783, 779, 781, 775, 778, 784,
- 779, 776, 785, 777, 780, 782, 786, 794, 784, 788,
- 782, 780, 787, 789, 791, 786, 783, 790, 0, 0,
- 781, 783, 785, 792, 793, 787, 784, 788, 795, 785,
- 794, 789, 790, 798, 794, 796, 788, 797, 801, 787,
- 789, 795, 803, 799, 790, 792, 791, 803, 793, 797,
- 792, 793, 800, 796, 804, 795, 799, 798, 800, 802,
- 798, 807, 796, 808, 797, 801, 805, 802, 0, 807,
- 799, 810, 809, 811, 803, 812, 804, 0, 810, 800,
- 809, 804, 814, 815, 805, 802, 802, 813, 807, 813,
+ 782, 783, 779, 784, 783, 793, 776, 785, 774, 775,
+ 773, 776, 780, 778, 777, 779, 787, 786, 781, 780,
+ 782, 788, 789, 781, 790, 784, 786, 782, 783, 785,
+ 784, 792, 791, 794, 785, 789, 787, 793, 795, 788,
+ 796, 797, 790, 787, 786, 799, 792, 800, 788, 789,
+ 791, 790, 798, 801, 797, 794, 803, 799, 792, 791,
+ 794, 810, 795, 796, 806, 795, 801, 796, 797, 802,
+ 798, 800, 799, 804, 800, 802, 807, 805, 812, 798,
+ 801, 804, 805, 803, 809, 812, 806, 811, 815, 813,
+ 815, 806, 809, 810, 807, 811, 802, 816, 814, 804,
- 812, 814, 816, 805, 802, 808, 811, 0, 810, 809,
- 811, 817, 812, 819, 818, 821, 822, 821, 820, 814,
- 825, 829, 0, 822, 813, 815, 818, 820, 838, 0,
- 817, 829, 825, 819, 816, 839, 1391, 1391, 817, 838,
- 819, 818, 821, 822, 0, 820, 823, 825, 829, 823,
- 832, 833, 835, 823, 836, 838, 823, 835, 839, 0,
- 840, 843, 839, 823, 823, 1391, 823, 837, 832, 841,
- 843, 823, 833, 823, 846, 836, 823, 832, 833, 835,
- 823, 836, 842, 823, 844, 837, 840, 840, 843, 852,
- 823, 823, 845, 823, 837, 841, 841, 844, 842, 845,
+ 804, 817, 818, 807, 819, 812, 816, 848, 804, 805,
+ 820, 809, 813, 814, 811, 815, 813, 822, 821, 823,
+ 824, 823, 820, 819, 816, 814, 822, 824, 0, 827,
+ 831, 819, 834, 817, 818, 839, 0, 820, 821, 848,
+ 831, 827, 835, 838, 822, 821, 823, 824, 825, 837,
+ 834, 825, 872, 839, 837, 825, 827, 831, 825, 834,
+ 840, 841, 839, 835, 838, 825, 825, 844, 825, 835,
+ 838, 840, 842, 825, 843, 825, 837, 845, 825, 872,
+ 0, 892, 825, 844, 841, 825, 845, 840, 841, 846,
+ 847, 0, 825, 825, 844, 825, 850, 847, 842, 842,
- 848, 851, 849, 855, 0, 856, 846, 848, 850, 842,
- 851, 844, 852, 856, 850, 853, 852, 857, 853, 845,
- 847, 847, 0, 847, 849, 855, 847, 848, 851, 849,
- 855, 847, 856, 854, 859, 850, 859, 847, 847, 857,
- 847, 865, 853, 858, 857, 860, 847, 847, 847, 854,
- 847, 862, 861, 847, 863, 858, 854, 861, 847, 866,
- 854, 859, 864, 865, 847, 847, 867, 847, 865, 860,
- 858, 862, 860, 868, 864, 870, 854, 869, 862, 872,
- 863, 863, 871, 873, 861, 866, 866, 875, 867, 864,
- 874, 873, 878, 867, 872, 877, 875, 868, 876, 869,
+ 843, 843, 846, 850, 845, 851, 852, 854, 892, 863,
+ 0, 0, 852, 853, 863, 0, 846, 847, 849, 849,
+ 0, 849, 853, 850, 849, 855, 856, 851, 855, 849,
+ 854, 858, 851, 852, 854, 849, 849, 857, 849, 858,
+ 853, 863, 856, 860, 849, 849, 849, 862, 849, 856,
+ 859, 849, 855, 856, 867, 860, 849, 865, 858, 857,
+ 864, 866, 849, 849, 857, 849, 861, 869, 861, 856,
+ 860, 862, 859, 866, 862, 868, 867, 859, 871, 870,
+ 864, 867, 873, 865, 865, 876, 0, 864, 866, 869,
+ 875, 0, 878, 861, 869, 874, 0, 880, 875, 878,
- 868, 879, 870, 877, 869, 876, 872, 871, 880, 871,
- 873, 878, 883, 874, 875, 884, 881, 874, 882, 878,
- 880, 885, 877, 881, 884, 876, 887, 879, 879, 886,
- 888, 882, 889, 890, 886, 880, 885, 894, 883, 883,
- 893, 891, 884, 881, 896, 882, 891, 895, 885, 899,
- 905, 901, 888, 896, 889, 897, 886, 888, 887, 889,
- 890, 898, 893, 897, 900, 902, 903, 893, 898, 894,
- 906, 896, 895, 891, 895, 904, 907, 905, 910, 908,
- 0, 899, 897, 901, 911, 907, 900, 903, 898, 902,
- 909, 900, 902, 903, 904, 912, 915, 906, 908, 909,
+ 871, 868, 868, 870, 877, 871, 870, 873, 876, 873,
+ 874, 881, 876, 877, 882, 879, 880, 875, 883, 878,
+ 884, 886, 874, 879, 880, 883, 882, 885, 887, 888,
+ 886, 877, 889, 884, 888, 890, 891, 881, 881, 893,
+ 896, 882, 879, 887, 893, 883, 895, 884, 886, 897,
+ 898, 902, 899, 885, 885, 887, 888, 890, 891, 898,
+ 899, 0, 890, 891, 889, 901, 903, 904, 895, 906,
+ 905, 893, 896, 895, 897, 900, 897, 898, 901, 899,
+ 908, 907, 900, 902, 909, 911, 910, 913, 903, 912,
+ 906, 919, 901, 903, 905, 910, 906, 905, 912, 904,
- 910, 913, 904, 907, 915, 910, 908, 911, 914, 916,
- 913, 911, 917, 918, 919, 912, 920, 909, 921, 914,
- 924, 0, 912, 915, 927, 922, 929, 921, 913, 929,
- 917, 0, 918, 922, 925, 914, 916, 931, 924, 917,
- 918, 919, 927, 925, 928, 921, 930, 924, 920, 926,
- 926, 927, 922, 929, 933, 932, 928, 0, 930, 931,
- 934, 925, 936, 935, 931, 937, 939, 937, 938, 940,
- 941, 928, 933, 930, 940, 936, 926, 932, 942, 943,
- 939, 933, 932, 941, 934, 935, 938, 934, 944, 936,
- 935, 943, 937, 939, 945, 938, 944, 941, 947, 946,
+ 907, 914, 900, 915, 911, 922, 916, 908, 907, 913,
+ 917, 909, 911, 910, 913, 916, 912, 918, 919, 923,
+ 920, 917, 921, 915, 914, 918, 924, 927, 914, 0,
+ 915, 925, 922, 916, 928, 924, 931, 917, 920, 925,
+ 933, 921, 930, 928, 918, 927, 934, 920, 931, 921,
+ 935, 923, 933, 924, 927, 929, 929, 936, 925, 932,
+ 930, 928, 932, 931, 937, 938, 939, 933, 934, 930,
+ 945, 941, 935, 934, 940, 936, 940, 935, 943, 939,
+ 942, 0, 929, 943, 936, 0, 932, 938, 937, 941,
+ 944, 937, 938, 939, 942, 948, 945, 945, 941, 946,
- 948, 940, 946, 950, 942, 942, 943, 947, 948, 951,
- 952, 953, 945, 954, 0, 944, 952, 955, 958, 954,
- 965, 945, 956, 958, 948, 947, 946, 948, 950, 956,
- 950, 962, 0, 953, 957, 948, 951, 952, 953, 955,
- 954, 957, 960, 959, 955, 958, 963, 961, 964, 956,
- 959, 961, 965, 966, 962, 963, 964, 967, 962, 969,
- 960, 957, 971, 972, 970, 968, 973, 969, 975, 960,
- 959, 966, 967, 963, 961, 964, 968, 970, 974, 973,
- 966, 978, 972, 971, 967, 0, 969, 977, 976, 971,
- 972, 970, 968, 973, 977, 975, 976, 979, 980, 978,
+ 947, 940, 949, 944, 951, 949, 950, 942, 947, 953,
+ 943, 946, 951, 948, 954, 950, 956, 944, 955, 957,
+ 958, 0, 948, 959, 955, 957, 946, 947, 951, 949,
+ 959, 951, 0, 950, 953, 961, 953, 960, 956, 951,
+ 961, 954, 958, 956, 960, 955, 957, 958, 962, 963,
+ 959, 965, 964, 967, 966, 962, 964, 968, 970, 969,
+ 971, 967, 961, 966, 960, 975, 0, 963, 978, 977,
+ 973, 971, 974, 970, 965, 962, 963, 969, 965, 964,
+ 967, 966, 972, 973, 975, 970, 969, 971, 976, 968,
+ 972, 977, 975, 974, 979, 978, 977, 973, 980, 974,
- 974, 983, 981, 982, 979, 974, 983, 987, 978, 981,
- 982, 984, 988, 985, 977, 976, 986, 980, 989, 984,
- 985, 990, 991, 986, 979, 980, 993, 992, 983, 981,
- 982, 989, 994, 995, 992, 991, 0, 0, 984, 987,
- 985, 998, 996, 986, 988, 989, 999, 997, 1001, 991,
- 996, 1000, 999, 990, 992, 997, 995, 1002, 993, 1003,
- 995, 1004, 997, 998, 994, 1005, 1006, 1008, 998, 996,
- 1004, 0, 1009, 999, 997, 1011, 1010, 1000, 1000, 1005,
- 1001, 1009, 997, 1003, 1007, 0, 1003, 1015, 1004, 1002,
- 1010, 1007, 1005, 1012, 1008, 1013, 1016, 1011, 1006, 1009,
+ 981, 976, 979, 982, 983, 980, 984, 985, 990, 972,
+ 982, 986, 987, 984, 985, 976, 986, 988, 981, 989,
+ 987, 979, 991, 983, 988, 980, 989, 981, 992, 993,
+ 982, 983, 994, 984, 985, 995, 996, 997, 986, 987,
+ 990, 992, 995, 998, 988, 994, 989, 1002, 999, 1000,
+ 1001, 1004, 1003, 1002, 991, 992, 999, 1000, 1005, 994,
+ 1011, 993, 995, 1009, 1000, 1006, 998, 1008, 996, 997,
+ 998, 1007, 1001, 1012, 1002, 999, 1000, 1001, 1003, 1003,
+ 1007, 1008, 1012, 1004, 1000, 1013, 1010, 1011, 1014, 1006,
+ 1005, 1017, 1006, 1010, 1008, 1009, 1015, 1016, 1007, 1013,
- 1013, 1014, 1011, 1010, 1017, 1018, 1012, 1019, 1012, 1017,
- 1015, 1007, 1018, 1014, 1015, 1020, 1021, 1012, 1023, 1019,
- 1012, 1023, 1016, 1016, 1021, 1024, 0, 1013, 1014, 1025,
- 1027, 1017, 1018, 1012, 1019, 1012, 1031, 1020, 1024, 1028,
- 1025, 1029, 1020, 1021, 1027, 1023, 1028, 1029, 0, 1033,
- 0, 1035, 1024, 1025, 1032, 0, 1025, 1027, 1031, 0,
- 0, 1034, 1036, 1031, 1036, 0, 1028, 1025, 1029, 1030,
- 1040, 1030, 1033, 1034, 1039, 1030, 1033, 1030, 1035, 1040,
- 1032, 1032, 1030, 1037, 1037, 1038, 1039, 1030, 1034, 1036,
- 1041, 1042, 1038, 1030, 1043, 1044, 1030, 1040, 1030, 0,
+ 1012, 1018, 1016, 1017, 1019, 0, 0, 0, 1024, 1015,
+ 1014, 1015, 1013, 1010, 1020, 1014, 1024, 1023, 1017, 1020,
+ 1015, 1022, 0, 1015, 1018, 1021, 0, 1027, 1018, 1016,
+ 1019, 1019, 1021, 1022, 1026, 1024, 1015, 1026, 1015, 1023,
+ 1027, 1020, 1028, 1030, 1023, 1032, 1034, 1037, 1022, 1031,
+ 1038, 1032, 1021, 1028, 1027, 1036, 1031, 1030, 1035, 1037,
+ 0, 1026, 0, 1039, 1041, 1039, 1028, 0, 1034, 1028,
+ 1030, 1041, 1032, 1034, 1037, 1045, 1031, 1038, 1036, 1043,
+ 1028, 1033, 1036, 1033, 1035, 1035, 1042, 1033, 1043, 1033,
+ 1039, 1041, 1040, 1040, 1033, 1047, 1044, 1045, 1042, 1033,
- 1044, 1039, 1030, 1041, 1030, 1045, 1037, 1043, 1047, 1030,
- 1037, 1037, 1038, 1042, 1030, 1046, 1051, 1041, 1042, 0,
- 1047, 1043, 1048, 1045, 0, 1049, 1050, 1044, 1046, 1049,
- 1053, 1047, 1045, 1052, 1048, 1047, 1056, 1057, 1051, 1049,
- 1058, 1050, 1046, 1051, 1054, 1055, 1052, 1047, 1059, 1048,
- 1054, 1049, 1049, 1050, 1056, 1060, 1049, 1053, 1055, 1057,
- 1052, 1058, 1061, 1056, 1057, 1062, 1049, 1058, 1064, 1065,
- 1059, 1054, 1055, 0, 1065, 1059, 1066, 1067, 0, 1070,
- 1069, 0, 1072, 0, 1066, 1082, 1067, 1060, 1073, 1071,
- 0, 0, 1062, 0, 1061, 1069, 1065, 1072, 1074, 0,
+ 1047, 1063, 1045, 0, 1046, 1033, 1043, 1048, 1033, 1044,
+ 1033, 1049, 1056, 1042, 1033, 1040, 1033, 1046, 1050, 1040,
+ 1040, 1033, 1053, 1044, 1049, 1048, 1033, 1047, 1051, 1054,
+ 1050, 1046, 1052, 1063, 1048, 1055, 1052, 1053, 1049, 1056,
+ 1051, 1050, 1060, 1059, 1057, 1050, 1052, 1058, 1055, 1053,
+ 1057, 1054, 1064, 1065, 1061, 1051, 1054, 1050, 1052, 1052,
+ 1058, 1059, 1055, 1052, 1060, 1062, 1067, 1068, 1069, 1060,
+ 1059, 1057, 1068, 1052, 1058, 1061, 1069, 1070, 0, 1073,
+ 1065, 1061, 1072, 0, 1064, 0, 1070, 1062, 1075, 1074,
+ 0, 0, 1062, 1076, 1068, 1069, 0, 1072, 1067, 1077,
- 1064, 1070, 1071, 1066, 1067, 1068, 1070, 1069, 1075, 1072,
- 1068, 1077, 1068, 1076, 1073, 1073, 1071, 1082, 1068, 1089,
- 1074, 1078, 1077, 1068, 1068, 1074, 1076, 1075, 1079, 1084,
- 1068, 1068, 1068, 1080, 1078, 1075, 1079, 1068, 1077, 1068,
- 1076, 1080, 1081, 1083, 1084, 1068, 1089, 0, 1078, 1085,
- 1068, 1068, 1086, 1081, 1090, 1079, 1084, 1068, 1085, 1087,
- 1080, 1094, 1088, 1086, 1093, 1083, 1091, 1095, 1087, 1081,
- 1083, 1088, 1098, 1091, 1100, 1095, 1085, 1090, 1096, 1086,
- 1099, 1090, 1100, 1097, 1104, 1094, 1087, 1105, 1094, 1088,
- 1102, 1103, 0, 1091, 1095, 1104, 1093, 1097, 1107, 0,
+ 0, 1073, 1074, 1075, 1070, 1071, 1073, 0, 1078, 1072,
+ 1071, 1085, 1071, 0, 1082, 1075, 1074, 1080, 1071, 1076,
+ 1076, 1077, 1082, 1071, 1071, 1079, 1077, 1078, 1080, 1081,
+ 1071, 1071, 1071, 1086, 1087, 1078, 1084, 1071, 1079, 1071,
+ 1083, 1082, 1081, 1085, 1080, 1071, 1096, 1084, 1083, 1087,
+ 1071, 1071, 1079, 1088, 1089, 1086, 1081, 1071, 1092, 1090,
+ 1086, 1087, 1088, 1084, 1091, 1089, 1093, 1083, 1090, 1094,
+ 1097, 1098, 0, 1091, 1100, 1101, 1094, 1099, 1096, 1098,
+ 1088, 1089, 1103, 1102, 1105, 1092, 1090, 0, 1100, 1093,
+ 1103, 1091, 1107, 1093, 1097, 1106, 1094, 1097, 1098, 1099,
- 1096, 1100, 1099, 1112, 1098, 1096, 1106, 1099, 1102, 1103,
- 1097, 1104, 1106, 1108, 1109, 1110, 1107, 1102, 1103, 1105,
- 1113, 1108, 1110, 1114, 1111, 1107, 1115, 1113, 1116, 1112,
- 1112, 1117, 1120, 1106, 1119, 1118, 1109, 1111, 1114, 0,
- 1108, 1109, 1110, 1122, 1115, 1118, 1116, 1113, 1126, 1128,
- 1114, 1111, 1117, 1115, 1122, 1116, 1124, 1129, 1117, 1125,
- 1119, 1119, 1118, 1127, 1120, 1127, 1125, 1133, 1131, 1124,
- 1122, 1128, 1130, 1132, 1126, 1126, 1128, 1141, 1140, 1133,
- 1130, 1131, 1132, 1124, 1134, 1135, 1125, 1138, 1139, 1129,
- 1127, 1142, 1143, 0, 1133, 1131, 1140, 0, 1144, 1130,
+ 1108, 1100, 1105, 1107, 1099, 1102, 1109, 1101, 1110, 1103,
+ 1102, 1105, 1109, 1106, 1112, 1111, 1114, 1113, 1116, 1107,
+ 1115, 1118, 1106, 1111, 1113, 1116, 1110, 1122, 1123, 1114,
+ 1120, 1128, 1108, 1109, 1117, 1110, 1112, 1119, 1128, 1118,
+ 1121, 1112, 1111, 1114, 1113, 1116, 1115, 1115, 1118, 1117,
+ 1121, 1120, 1125, 1122, 1122, 1119, 1127, 1120, 1128, 1129,
+ 1123, 1117, 1131, 1125, 1119, 1132, 1130, 1121, 1130, 1127,
+ 1146, 0, 1133, 1134, 1135, 1147, 1137, 1144, 1192, 1125,
+ 1133, 1134, 1136, 1127, 1131, 1129, 1129, 1135, 1137, 1131,
+ 1138, 1136, 1139, 1130, 1142, 1144, 1143, 1132, 1145, 1133,
- 1132, 1145, 1165, 1141, 1141, 1140, 1134, 1135, 1146, 1138,
- 1139, 1134, 1135, 1145, 1138, 1139, 1144, 1151, 1148, 1152,
- 1151, 1149, 1146, 1142, 1143, 1144, 1149, 1153, 1145, 1148,
- 1155, 1152, 1157, 1156, 1165, 1146, 1154, 1155, 1160, 1157,
- 1167, 1159, 0, 1151, 1151, 1148, 1152, 1151, 0, 1154,
- 1187, 1153, 1159, 1149, 1153, 1156, 1161, 1155, 1160, 1157,
- 1156, 1158, 1158, 1154, 1162, 1160, 1163, 1161, 1159, 1164,
- 1166, 0, 1167, 1162, 1168, 1158, 1169, 1166, 1172, 1170,
- 1163, 1164, 1187, 1161, 1173, 1175, 1168, 1176, 1158, 1158,
- 0, 1162, 1170, 1163, 1174, 1178, 1164, 1166, 1169, 1177,
+ 1134, 1135, 1146, 1137, 1144, 1192, 1150, 1147, 1148, 1136,
+ 1149, 0, 1138, 0, 1139, 0, 1142, 1138, 1143, 1139,
+ 1150, 1142, 1149, 1143, 1145, 1145, 1148, 1152, 1156, 1153,
+ 1158, 1160, 1157, 1150, 1153, 1148, 1155, 1149, 1152, 1155,
+ 1156, 1159, 1161, 1158, 0, 1164, 1162, 1162, 1159, 1161,
+ 1169, 1171, 0, 1160, 1152, 1156, 1157, 1158, 1160, 1157,
+ 1162, 1153, 1155, 1155, 1163, 1164, 1155, 1165, 1159, 1161,
+ 1166, 1167, 1164, 1162, 1162, 1163, 1168, 1170, 1165, 1166,
+ 1172, 0, 1169, 1171, 1170, 1167, 1173, 1174, 1168, 1176,
+ 0, 1163, 1172, 1177, 1165, 1178, 1179, 1166, 1167, 1180,
- 1174, 1168, 1179, 1169, 1172, 1172, 1170, 1175, 1173, 1176,
- 1177, 1173, 1175, 1178, 1176, 1180, 1181, 1183, 1185, 1184,
- 1188, 1174, 1178, 1189, 1179, 1190, 1177, 1186, 1194, 1179,
- 1184, 1181, 1191, 1186, 1190, 1192, 1194, 1180, 1183, 1185,
- 1193, 1189, 1180, 1181, 1183, 1185, 1184, 1188, 1196, 1193,
- 1189, 1195, 1190, 1198, 1186, 1194, 1191, 1197, 1195, 1191,
- 1199, 1192, 1192, 1200, 1201, 1203, 1202, 1193, 1205, 0,
- 1210, 1197, 1196, 0, 1204, 1196, 1207, 1211, 1195, 1212,
- 1208, 0, 1213, 1209, 1197, 1198, 1201, 1214, 1202, 1208,
- 1209, 1201, 1199, 1202, 1213, 1200, 1204, 1203, 1207, 1211,
+ 1174, 1178, 1191, 1168, 1170, 1183, 1182, 1172, 1173, 1184,
+ 1185, 0, 1202, 1173, 1174, 1176, 1176, 1177, 1179, 1181,
+ 1177, 1180, 1178, 1179, 1182, 1185, 1180, 1183, 1187, 1188,
+ 1181, 1184, 1183, 1182, 1191, 1190, 1184, 1185, 1189, 1193,
+ 1188, 1190, 1194, 1195, 1202, 1196, 1181, 1199, 1203, 1187,
+ 1198, 1194, 1197, 1204, 1199, 1187, 1188, 1193, 1198, 1189,
+ 1200, 1197, 1190, 0, 1201, 1189, 1193, 1195, 1205, 1194,
+ 1195, 1196, 1196, 1207, 1199, 1206, 1208, 1198, 1201, 1197,
+ 1203, 1209, 1211, 1212, 1200, 1204, 1214, 1200, 0, 1213,
+ 1205, 1201, 1212, 1215, 1216, 1205, 1213, 1206, 1208, 1217,
- 1205, 1204, 1210, 1207, 1211, 1214, 1212, 1208, 1215, 1213,
- 1209, 1216, 1217, 1219, 1214, 1218, 1221, 1220, 1223, 0,
- 1225, 1217, 1226, 1218, 1222, 1227, 1215, 1223, 1225, 1230,
- 0, 1229, 1221, 1216, 1224, 1215, 1228, 1219, 1216, 1217,
- 1219, 1220, 1218, 1221, 1220, 1223, 1222, 1225, 1228, 1224,
- 1233, 1222, 1231, 1229, 1226, 1232, 1230, 1227, 1229, 1238,
- 1231, 1224, 1234, 1228, 1236, 1233, 1237, 1238, 1232, 1242,
- 1239, 1234, 1239, 1236, 1243, 1241, 1244, 1233, 1245, 1231,
- 0, 1247, 1232, 1241, 1237, 1246, 1238, 1242, 1247, 1234,
- 0, 1236, 1250, 1237, 1251, 1244, 1242, 1239, 1249, 1253,
+ 1220, 1218, 1206, 1208, 1211, 1207, 1219, 0, 1221, 1211,
+ 1212, 1217, 1223, 1209, 1224, 1215, 1213, 1221, 1214, 1218,
+ 1215, 1216, 1220, 1222, 1219, 1226, 1217, 1220, 1218, 1225,
+ 1230, 1222, 1231, 1219, 1227, 1221, 1223, 0, 1224, 1223,
+ 1228, 1224, 1234, 1227, 1233, 1225, 1229, 1226, 1232, 1235,
+ 1222, 0, 1226, 1237, 1229, 1228, 1225, 1235, 0, 1236,
+ 1232, 1227, 1230, 1241, 1231, 1238, 1233, 1228, 1237, 1234,
+ 1240, 1233, 1236, 1229, 1238, 1232, 1235, 1242, 1246, 1240,
+ 1237, 1241, 1243, 1245, 1243, 1242, 1236, 1247, 1248, 1249,
+ 1241, 1245, 1238, 1251, 1254, 1250, 1246, 1240, 1255, 1253,
- 1245, 1243, 1241, 1244, 1250, 1245, 1252, 1246, 1247, 1251,
- 1254, 1249, 1246, 1255, 1257, 1258, 1256, 1253, 1260, 1250,
- 0, 1251, 1254, 1256, 1261, 1249, 1253, 1262, 1252, 1259,
- 1260, 1264, 1263, 1252, 0, 1261, 1269, 1254, 1267, 1265,
- 1255, 0, 1266, 1256, 1269, 1260, 1257, 1258, 1259, 1262,
- 1268, 1261, 1265, 1264, 1262, 1266, 1259, 1263, 1264, 1263,
- 1267, 1270, 1268, 1269, 1271, 1267, 1265, 1272, 1273, 1266,
- 1275, 1280, 1278, 1276, 1279, 1277, 1273, 1268, 0, 1272,
- 1281, 0, 1283, 1279, 1271, 1270, 1276, 1282, 1270, 1283,
- 1278, 1271, 1281, 1286, 1272, 1273, 1287, 1275, 1277, 1278,
+ 1251, 1256, 1259, 1261, 1242, 1246, 1254, 1248, 1262, 1243,
+ 1245, 1249, 1253, 1255, 1247, 1248, 1249, 1250, 1257, 1258,
+ 1251, 1254, 1250, 1256, 1263, 1255, 1253, 1260, 1256, 1259,
+ 1264, 1258, 0, 1265, 1260, 1261, 1257, 1266, 1267, 1268,
+ 1262, 0, 1264, 1263, 1265, 1257, 1258, 1271, 1273, 1269,
+ 0, 1263, 1275, 1274, 1260, 1270, 1273, 1264, 1272, 1266,
+ 1265, 1268, 1269, 1267, 1266, 1267, 1268, 1279, 1270, 1271,
+ 1272, 1276, 1275, 1277, 1271, 1273, 1269, 1274, 1280, 1275,
+ 1274, 1277, 1270, 1276, 1281, 1272, 1282, 1283, 1284, 1285,
+ 0, 1280, 1287, 0, 1279, 1292, 1283, 1286, 1276, 1287,
- 1276, 1279, 1277, 1280, 1284, 1288, 1289, 1281, 1282, 1283,
- 1290, 1291, 1293, 1284, 1282, 1284, 1286, 0, 1284, 1295,
- 1286, 1292, 1287, 1287, 0, 1291, 1284, 1288, 1295, 1296,
- 1290, 1284, 1288, 1289, 1292, 1294, 1293, 1290, 1291, 1293,
- 1284, 1298, 1284, 1294, 1299, 1284, 1295, 1296, 1292, 1300,
- 1301, 1302, 1299, 1303, 1304, 0, 1296, 1305, 1307, 1313,
- 0, 1308, 1294, 1298, 1300, 1305, 1303, 1309, 1298, 1311,
- 1304, 1299, 1310, 1302, 1312, 1314, 1300, 1313, 1302, 1310,
- 1303, 1304, 1301, 1308, 1305, 1307, 1313, 1314, 1308, 1309,
- 1316, 1311, 1315, 1318, 1309, 1319, 1311, 1312, 1316, 1310,
+ 1277, 1285, 1290, 1293, 1282, 1280, 1291, 1281, 1294, 0,
+ 1305, 1281, 1288, 1282, 1283, 0, 1285, 1292, 1286, 1287,
+ 1284, 1288, 1292, 1288, 1286, 1290, 1288, 1295, 1294, 1290,
+ 1293, 1296, 1291, 1291, 1288, 1294, 1297, 1298, 1299, 1288,
+ 1302, 1295, 1305, 1300, 1296, 1298, 1306, 1299, 1288, 1303,
+ 1288, 1304, 1311, 1288, 1295, 1308, 1307, 1303, 1296, 1312,
+ 1297, 1300, 1302, 1297, 1298, 1299, 1304, 1302, 1306, 1307,
+ 1300, 1308, 1309, 1306, 1313, 1315, 1303, 1314, 1304, 1311,
+ 1309, 1312, 1308, 1307, 1314, 1316, 1312, 1317, 1318, 0,
+ 1320, 1319, 0, 1323, 1322, 1324, 1313, 1315, 1320, 1309,
- 1317, 1312, 1314, 1320, 1315, 1318, 1321, 1322, 1324, 1317,
- 0, 1325, 1323, 1322, 1321, 1319, 1327, 1316, 1320, 1315,
- 1318, 1323, 1319, 1325, 1317, 1328, 1326, 1317, 1330, 1324,
- 1320, 1331, 1328, 1321, 1322, 1324, 1317, 1326, 1325, 1323,
- 1329, 1332, 1326, 1331, 1333, 1336, 1330, 1329, 1327, 1332,
- 1337, 1340, 1328, 1326, 1334, 1330, 0, 1336, 1331, 1333,
- 0, 1335, 1334, 1335, 1326, 1341, 1338, 1329, 1332, 1344,
- 1343, 1333, 1336, 1338, 1342, 1345, 1344, 1341, 1346, 1347,
- 1348, 1334, 1337, 1340, 1352, 1348, 1345, 1342, 1335, 1343,
- 1349, 1350, 1341, 1338, 1347, 1351, 1344, 1343, 1349, 1354,
+ 1318, 1313, 1315, 1319, 1314, 1317, 1322, 1321, 1316, 1328,
+ 1324, 1325, 1316, 1323, 1317, 1318, 1321, 1320, 1319, 1325,
+ 1323, 1322, 1324, 1326, 1327, 1329, 1331, 1334, 1330, 1326,
+ 1328, 1321, 1341, 1327, 1321, 1332, 1328, 1329, 1325, 1330,
+ 1333, 1335, 1332, 1321, 1330, 1334, 1337, 1333, 1336, 1338,
+ 1326, 1327, 1329, 1335, 1334, 1330, 1336, 1338, 1331, 1340,
+ 1344, 1337, 1332, 1339, 1341, 1339, 1330, 1333, 1335, 1345,
+ 1342, 1340, 1346, 1337, 1347, 1336, 1338, 1342, 1349, 1351,
+ 1348, 1345, 1350, 1352, 0, 1346, 1340, 1348, 1352, 1349,
+ 1339, 1356, 1344, 1347, 1351, 1353, 1345, 1342, 1354, 1346,
- 1346, 1342, 1345, 0, 1350, 1346, 1347, 1355, 1357, 1351,
- 1352, 1352, 1348, 0, 0, 1356, 1359, 1349, 1350, 1362,
- 1358, 1355, 1351, 1353, 1354, 1360, 1354, 1353, 0, 0,
- 1353, 1353, 0, 1356, 1355, 1353, 0, 1361, 1359, 1363,
- 1357, 1353, 1356, 1359, 1365, 1353, 1358, 1358, 1360, 1353,
- 1353, 1362, 1360, 1364, 1353, 1361, 1367, 1353, 1353, 1366,
- 1370, 1363, 1353, 1372, 1361, 1366, 1363, 1370, 1353, 1368,
- 1365, 1365, 1353, 1371, 1369, 1364, 1369, 1368, 1372, 1367,
- 1364, 1373, 1371, 1367, 1374, 1375, 1366, 1370, 1376, 0,
- 1372, 1381, 1377, 1383, 1379, 1368, 1368, 0, 1369, 1377,
+ 1355, 1347, 1359, 1353, 1350, 1349, 1351, 1348, 0, 1350,
+ 1361, 1354, 1358, 1366, 1355, 1352, 1359, 1356, 1356, 0,
+ 1360, 1363, 1353, 0, 1370, 1354, 1362, 1355, 1357, 1359,
+ 1370, 1365, 1357, 1364, 0, 1357, 1357, 1358, 1360, 1358,
+ 1357, 1371, 1361, 1363, 1367, 1366, 1357, 1360, 1363, 1365,
+ 1357, 1370, 1362, 1362, 1357, 1357, 1364, 1368, 1365, 1357,
+ 1364, 1369, 1357, 1357, 1371, 1374, 1367, 1357, 1371, 0,
+ 1372, 1367, 1374, 1357, 1373, 1376, 1373, 1357, 1372, 1368,
+ 1375, 1377, 1378, 1380, 1368, 1379, 0, 1369, 1369, 1375,
+ 1376, 1385, 1374, 1381, 1383, 1384, 1372, 1372, 1373, 1382,
- 1371, 1369, 1378, 1369, 1368, 1380, 1376, 1379, 1384, 1375,
- 1382, 1385, 1375, 1373, 1380, 1376, 1374, 1388, 1394, 1377,
- 1389, 1379, 1386, 1381, 1378, 1383, 1390, 1392, 0, 1378,
- 1384, 1382, 1380, 1389, 1385, 1384, 1386, 1382, 1385, 1388,
- 1399, 1394, 1397, 1392, 1388, 1394, 1395, 1389, 1398, 1386,
- 1387, 1397, 1390, 1390, 1392, 1387, 1396, 1387, 1395, 1387,
- 1400, 1387, 1402, 1396, 1406, 1401, 1398, 1399, 1387, 1397,
- 1401, 1408, 1403, 1395, 1404, 1398, 1402, 1387, 1405, 1406,
- 1414, 1409, 1387, 1396, 1387, 1403, 1387, 1400, 1387, 1402,
- 1407, 1406, 1404, 1408, 1409, 1407, 1405, 1401, 1408, 1403,
+ 1385, 1373, 1376, 1373, 1380, 1372, 1382, 1375, 1384, 1379,
+ 1380, 1381, 1379, 1377, 1378, 1386, 1383, 1387, 1385, 1388,
+ 1381, 1383, 1384, 1389, 0, 1390, 1382, 1391, 0, 1394,
+ 1397, 1393, 1396, 1396, 0, 0, 1399, 0, 1387, 0,
+ 0, 1391, 1394, 1395, 1387, 1389, 1397, 1386, 1390, 1404,
+ 1389, 1388, 1390, 1393, 1391, 1392, 1394, 1397, 1393, 1399,
+ 1392, 1396, 1392, 1399, 1392, 1400, 1392, 1401, 1403, 1395,
+ 1395, 1402, 1405, 1392, 1401, 0, 1404, 1400, 1406, 0,
+ 1402, 0, 1392, 1406, 1408, 1409, 1403, 1392, 1407, 1392,
+ 1410, 1392, 1400, 1392, 1401, 1403, 1413, 1408, 1402, 1405,
- 1410, 1404, 1411, 1412, 1417, 1405, 1413, 1416, 1409, 1415,
- 1411, 1412, 1414, 1418, 1421, 1419, 0, 1407, 1410, 1413,
- 1426, 0, 1416, 1417, 1422, 1420, 1418, 1410, 1425, 1411,
- 1412, 1417, 1421, 1413, 1416, 1415, 1415, 1419, 1420, 1423,
- 1418, 1421, 1419, 1424, 1422, 1424, 1427, 1426, 1423, 1428,
- 1425, 1422, 1420, 1429, 1430, 1425, 0, 1434, 1427, 1432,
- 1433, 1436, 1437, 1438, 1444, 1434, 1423, 1435, 0, 1437,
- 1424, 1439, 1441, 1427, 1440, 1429, 1428, 1449, 1441, 1430,
- 1429, 1430, 1433, 1432, 1434, 1435, 1432, 1433, 1436, 1437,
- 1438, 1444, 1447, 1450, 1435, 1446, 1440, 1439, 1439, 1441,
+ 1412, 1411, 1407, 1409, 1415, 1412, 1414, 1418, 1410, 1419,
+ 1406, 1408, 1409, 1416, 0, 1407, 1411, 1410, 1413, 1414,
+ 1418, 1416, 1415, 1413, 1417, 0, 1420, 1412, 1411, 1421,
+ 1422, 1415, 1417, 1414, 1418, 1423, 1424, 1425, 1428, 1427,
+ 1416, 1419, 1426, 1429, 1421, 1429, 1430, 1428, 1423, 1422,
+ 1425, 1417, 1420, 1420, 1431, 1432, 1421, 1422, 1424, 1427,
+ 1426, 1433, 1423, 1424, 1425, 1428, 1427, 1432, 1430, 1426,
+ 1429, 1434, 1435, 1430, 1438, 1439, 1437, 1440, 1441, 1442,
+ 1443, 1431, 1432, 1439, 1444, 1446, 1442, 1445, 1433, 1449,
+ 0, 1446, 0, 1434, 1454, 1440, 1438, 1435, 1434, 1435,
- 1442, 1440, 1443, 1445, 1448, 1446, 1442, 1451, 1443, 1449,
- 1445, 1448, 1452, 1459, 1453, 1450, 1447, 0, 1455, 1447,
- 1450, 0, 1446, 1453, 1456, 1451, 1457, 1442, 1461, 1443,
- 1445, 1448, 1458, 1462, 1451, 1459, 1460, 1452, 1457, 1452,
- 1459, 1453, 1455, 1463, 1464, 1455, 1458, 1465, 1456, 1460,
- 1461, 1456, 1462, 1457, 1466, 1461, 1467, 1468, 1469, 1458,
- 1462, 1471, 1470, 1460, 1473, 1463, 1468, 1474, 1464, 1465,
- 1463, 1464, 1477, 1475, 1465, 1471, 1476, 0, 1467, 1469,
- 1466, 1466, 1470, 1467, 1468, 1469, 1479, 1478, 1471, 1470,
- 1480, 1481, 1491, 1485, 1479, 1475, 1473, 0, 1476, 1474,
+ 1437, 1438, 1439, 1437, 1440, 1441, 1442, 1443, 1451, 1445,
+ 1444, 1444, 1446, 1447, 1445, 1448, 1449, 1450, 1451, 1447,
+ 1453, 1448, 1452, 1455, 1450, 1456, 1454, 1453, 1457, 1458,
+ 1460, 0, 0, 1478, 1461, 1451, 1462, 1463, 1458, 1479,
+ 1447, 0, 1448, 1456, 1450, 1455, 1452, 1453, 1462, 1452,
+ 1455, 1463, 1456, 1457, 1460, 1457, 1458, 1460, 1461, 1464,
+ 1465, 1461, 1466, 1462, 1463, 1478, 1467, 1469, 1468, 0,
+ 1470, 1479, 1471, 1465, 1472, 0, 1482, 0, 0, 1473,
+ 1475, 1464, 1474, 1480, 1466, 1467, 1464, 1465, 1473, 1466,
+ 1468, 1469, 1470, 1467, 1469, 1468, 1472, 1470, 1471, 1471,
- 1475, 1482, 1483, 1476, 1477, 1478, 1480, 1486, 1482, 1483,
- 1487, 1488, 1489, 1479, 1478, 1485, 1486, 1480, 1481, 1489,
- 1485, 1490, 1492, 1488, 1491, 1490, 1493, 1487, 1482, 1483,
- 1494, 1496, 1500, 1499, 1486, 1501, 0, 1487, 1488, 1489,
- 1505, 1504, 1501, 1497, 1502, 1498, 1494, 1493, 1490, 1497,
- 1504, 1498, 1503, 1493, 1492, 1499, 1497, 1494, 1498, 1502,
- 1499, 1511, 1501, 1496, 1500, 1503, 1505, 1505, 1504, 1509,
- 1497, 1502, 1498, 1506, 1508, 1507, 1497, 1507, 1498, 1503,
- 1506, 1510, 1512, 1508, 1513, 1515, 1512, 0, 1511, 1517,
- 1510, 1509, 1516, 1515, 1518, 1519, 1509, 1521, 1520, 1518,
+ 1475, 1472, 1476, 1474, 1481, 1480, 1473, 1475, 1482, 1474,
+ 1480, 1484, 1483, 1486, 1487, 1488, 1476, 1485, 0, 1484,
+ 1492, 1487, 1488, 1490, 1493, 1491, 1481, 1496, 1494, 1476,
+ 1483, 1481, 1497, 1485, 1491, 1494, 1493, 1492, 1484, 1483,
+ 1486, 1487, 1488, 1501, 1485, 1490, 1498, 1492, 1505, 1495,
+ 1490, 1493, 1491, 1495, 1499, 1494, 1502, 1504, 1512, 1496,
+ 1512, 1506, 1502, 0, 1497, 1503, 0, 1498, 1506, 1502,
+ 1499, 1503, 1507, 1498, 1510, 1501, 1495, 1508, 1503, 1504,
+ 1505, 1499, 1509, 1502, 1504, 1512, 1511, 1507, 1506, 1502,
+ 1508, 1509, 1503, 1511, 1513, 1514, 1515, 1516, 1503, 1507,
- 1506, 1508, 1507, 1517, 1519, 1516, 1513, 1520, 1510, 1512,
- 1522, 1513, 1515, 1528, 1523, 1521, 1517, 1527, 1524, 1516,
- 1525, 0, 1519, 1525, 1521, 1520, 1518, 1523, 1532, 1522,
- 1524, 1526, 1525, 1529, 1526, 1527, 1531, 1522, 1528, 1532,
- 1528, 1523, 1533, 1534, 1527, 1524, 1529, 1525, 1536, 1535,
- 1525, 1537, 1537, 1526, 1535, 1532, 1536, 1538, 1526, 1534,
- 1529, 1526, 0, 1539, 1540, 1533, 1538, 1541, 1531, 1533,
- 1534, 1542, 1543, 1544, 1547, 1536, 1545, 0, 1537, 1543,
- 1542, 1535, 1550, 1545, 1538, 1539, 1540, 1547, 1548, 1541,
- 1539, 1540, 1554, 1549, 1541, 1544, 1551, 1548, 1542, 1543,
+ 1510, 1510, 1517, 1513, 1508, 1515, 1517, 1520, 1518, 1509,
+ 1524, 1523, 1521, 1511, 1522, 1520, 1523, 1514, 1525, 1524,
+ 1526, 1513, 1514, 1515, 1516, 1521, 0, 1525, 1522, 1517,
+ 1518, 1527, 1529, 1528, 1520, 1518, 1532, 1524, 1526, 1521,
+ 1533, 1522, 1534, 1523, 1529, 1525, 1528, 1526, 1531, 1530,
+ 1527, 1531, 1530, 1536, 1532, 1534, 1539, 1537, 1527, 1529,
+ 1528, 1530, 0, 1532, 1538, 1533, 1540, 1533, 1537, 1534,
+ 1531, 1540, 1539, 1541, 1544, 1531, 1530, 1543, 1531, 1530,
+ 1545, 1541, 1552, 1539, 1537, 1536, 1543, 1538, 1542, 1542,
+ 1546, 1538, 1548, 1559, 1547, 1552, 1544, 1584, 1540, 1548,
- 1544, 1547, 1549, 1545, 1552, 1556, 1553, 1555, 1550, 1550,
- 1557, 0, 1558, 1552, 1553, 1548, 1556, 1559, 1557, 1551,
- 1549, 1562, 1555, 1551, 1554, 1558, 1560, 1561, 1566, 1559,
- 1563, 1552, 1556, 1553, 1555, 1561, 1564, 1557, 1560, 1558,
- 1565, 1566, 1567, 1562, 1559, 1568, 0, 1569, 1562, 1565,
- 1563, 1568, 1570, 1560, 1561, 1566, 1571, 1563, 1564, 1572,
- 1575, 1574, 1576, 1564, 1567, 1569, 1573, 1565, 1571, 1567,
- 1578, 1577, 1568, 1573, 1569, 1579, 1582, 1572, 1570, 1570,
- 1580, 1584, 1582, 1571, 1577, 0, 1572, 1574, 1574, 1581,
- 1583, 1585, 1575, 1573, 1576, 1586, 1578, 1578, 1577, 1587,
+ 1541, 1544, 1545, 1547, 1543, 1549, 1550, 1545, 1555, 1552,
+ 1558, 1553, 1546, 1550, 1554, 1542, 1556, 1546, 1558, 1548,
+ 1553, 1547, 1557, 1554, 1584, 1559, 0, 1549, 0, 1560,
+ 0, 1557, 1549, 1550, 1555, 1555, 1561, 1558, 1553, 1556,
+ 1562, 1554, 1563, 1556, 1560, 1564, 1565, 1561, 1562, 1557,
+ 1568, 1566, 1567, 1569, 0, 1563, 1560, 1564, 1565, 1566,
+ 1572, 1580, 1570, 1561, 1581, 1574, 0, 1562, 1571, 1563,
+ 1568, 1570, 1564, 1565, 1567, 1569, 1575, 1568, 1566, 1567,
+ 1569, 1571, 1572, 1574, 1573, 1576, 1577, 1572, 1579, 1570,
+ 1573, 1578, 1574, 1580, 1582, 1571, 1581, 1576, 1578, 1583,
- 1581, 1580, 1579, 1582, 1590, 0, 1591, 1580, 0, 1588,
- 1593, 0, 1583, 1584, 1592, 1599, 1581, 1583, 1598, 1593,
- 1597, 1595, 1599, 1585, 1594, 1587, 1587, 1586, 1588, 1591,
- 1588, 1590, 1592, 1591, 1595, 1588, 1588, 1593, 1596, 1594,
- 1597, 1592, 1599, 1600, 1598, 1598, 1601, 1597, 1595, 1602,
- 1596, 1594, 1604, 1603, 1605, 1588, 1606, 1588, 1607, 1605,
- 1604, 1606, 1600, 1609, 1610, 1596, 1603, 1608, 0, 1611,
- 1600, 1602, 1610, 1613, 1608, 1612, 1602, 1611, 1601, 1604,
- 1603, 1607, 1614, 1619, 1615, 1607, 1605, 1621, 1606, 1609,
- 1609, 1610, 1615, 1612, 1608, 1613, 1611, 1616, 1618, 1617,
+ 1587, 1585, 1575, 1575, 1577, 1586, 1587, 1582, 1588, 1589,
+ 1590, 1573, 1576, 1577, 1579, 1579, 1586, 1591, 1578, 1592,
+ 1595, 1582, 1585, 0, 0, 1583, 1583, 1587, 1585, 1593,
+ 1588, 1596, 1586, 1597, 1598, 1588, 1603, 1599, 1606, 1602,
+ 1600, 1589, 1590, 1598, 0, 1592, 1592, 1595, 1593, 1591,
+ 1593, 1597, 1599, 1600, 1596, 1593, 1593, 1601, 1596, 1602,
+ 1597, 1598, 1603, 1603, 1599, 1604, 1602, 1600, 1605, 1601,
+ 1606, 1607, 1604, 1608, 1609, 1593, 1610, 1593, 1611, 1612,
+ 1615, 1610, 1609, 1611, 1601, 1614, 1608, 1605, 1615, 1613,
+ 1619, 1616, 1604, 1607, 1624, 1605, 1613, 1617, 1607, 1616,
- 1613, 1620, 1612, 1622, 0, 1616, 1617, 1618, 1624, 1623,
- 1626, 1615, 1622, 1627, 1614, 1619, 1623, 1625, 1625, 1621,
- 1624, 1627, 1628, 1620, 1616, 1618, 1617, 1629, 1620, 1630,
- 1622, 1632, 0, 1631, 0, 1624, 1623, 1630, 1633, 1632,
- 1627, 1636, 1626, 1628, 1625, 1634, 1633, 1635, 1667, 1628,
- 1638, 1631, 1639, 1634, 1636, 1635, 1630, 1637, 1632, 1629,
- 1631, 1640, 1638, 1637, 1644, 1633, 1645, 1641, 1636, 1648,
- 1646, 1643, 1634, 1642, 1635, 1641, 1647, 1638, 1639, 1639,
- 1667, 1642, 1656, 1648, 1637, 1640, 1643, 1650, 1640, 1649,
- 1651, 1644, 1646, 1645, 1641, 1660, 1648, 1646, 1643, 1647,
+ 1608, 1609, 1612, 1618, 0, 1620, 1612, 1615, 1610, 1621,
+ 1611, 1614, 1614, 1620, 1622, 1617, 1613, 1621, 1616, 1623,
+ 1625, 1622, 1619, 1626, 1617, 1618, 1624, 1628, 1623, 1627,
+ 1618, 1629, 1620, 1632, 1628, 1630, 1621, 1633, 1627, 1631,
+ 1631, 1622, 1625, 1629, 1635, 1633, 1623, 1625, 1634, 0,
+ 1637, 1636, 1638, 1639, 1628, 1626, 1627, 1630, 1629, 1636,
+ 1638, 1639, 1630, 1640, 1633, 1632, 1631, 1645, 1637, 1634,
+ 1642, 1640, 1644, 1641, 1646, 1634, 1635, 1637, 1636, 1638,
+ 1639, 1641, 1643, 1642, 1644, 1650, 1651, 1647, 1643, 1652,
+ 1640, 1649, 1653, 1645, 1645, 1647, 1648, 1642, 1646, 1644,
- 1642, 1649, 1654, 1647, 1651, 1650, 1654, 1659, 1656, 1656,
- 1657, 1658, 1662, 1660, 1650, 1664, 1649, 1651, 1661, 1654,
- 1658, 1663, 1660, 1665, 1662, 1666, 1664, 1654, 1663, 1654,
- 1669, 1659, 1657, 1654, 1659, 1670, 1671, 1657, 1658, 1662,
- 1661, 1668, 1664, 1672, 1669, 1661, 1654, 1666, 1663, 1673,
- 1665, 1675, 1666, 1668, 1674, 1676, 1678, 1669, 1671, 1679,
- 1675, 1674, 1677, 1671, 1683, 1681, 1672, 1670, 1668, 1677,
- 1672, 1684, 1673, 1676, 1681, 1685, 1673, 1684, 1675, 1686,
- 1687, 1674, 1676, 1688, 1690, 1710, 1679, 1693, 1678, 1677,
- 1688, 1692, 1681, 1694, 1699, 0, 1683, 1685, 1684, 1698,
+ 1641, 1646, 1662, 1654, 1648, 1663, 1649, 1656, 1655, 1643,
+ 1657, 1652, 1650, 1651, 1647, 1653, 1652, 1654, 1649, 1653,
+ 1655, 1665, 1660, 1648, 1657, 1656, 1660, 1663, 1662, 1662,
+ 1654, 1664, 1663, 1666, 1656, 1655, 0, 1657, 1668, 1660,
+ 1664, 1667, 1671, 1670, 1673, 1665, 1676, 1660, 1665, 1660,
+ 1668, 1666, 1669, 1660, 1670, 1672, 0, 1675, 1664, 1669,
+ 1666, 1674, 1678, 1667, 1677, 1668, 1660, 1679, 1667, 1671,
+ 1670, 1675, 1684, 1674, 1680, 1682, 1673, 1672, 1676, 1669,
+ 1683, 1680, 1672, 1681, 1675, 1678, 1677, 1683, 1674, 1678,
+ 1679, 1677, 1681, 1682, 1679, 1685, 1687, 1689, 1691, 1693,
- 1699, 1703, 1685, 0, 1694, 1686, 1686, 1701, 1695, 1700,
- 1688, 1690, 1687, 1696, 1693, 1692, 1700, 1710, 1692, 1695,
- 1694, 1699, 1702, 1698, 1696, 1701, 1698, 1703, 1703, 1702,
- 1704, 1705, 1707, 1706, 1701, 1695, 1700, 1705, 1709, 1708,
- 1696, 1706, 1704, 1711, 1707, 1712, 1713, 0, 1717, 1702,
- 1714, 1709, 1715, 0, 1715, 1713, 1720, 1704, 1705, 1707,
- 1706, 1708, 1714, 1712, 1716, 1709, 1708, 1718, 1722, 1711,
- 1711, 1716, 1712, 1713, 1717, 1717, 1719, 1714, 1720, 1715,
- 1718, 1721, 1723, 1720, 1725, 1719, 1728, 1726, 1733, 1724,
- 1727, 1716, 1726, 1721, 1718, 1722, 1724, 1729, 1727, 1730,
+ 1690, 1680, 1682, 1696, 1684, 1687, 1690, 1683, 1692, 1694,
+ 1681, 1699, 1705, 1698, 0, 1700, 1694, 1701, 1705, 1704,
+ 1691, 1702, 1685, 1687, 0, 1691, 1700, 1690, 1701, 1689,
+ 1696, 1693, 1702, 1707, 1692, 1692, 1694, 1698, 1699, 1705,
+ 1698, 1709, 1700, 1704, 1701, 1706, 1704, 1708, 1702, 1710,
+ 1711, 1707, 1706, 1713, 1708, 1712, 1711, 1714, 1715, 1716,
+ 1707, 1710, 1717, 1712, 0, 1713, 1719, 1709, 1709, 1718,
+ 0, 1715, 1706, 1728, 1708, 1719, 1710, 1711, 1720, 1714,
+ 1713, 1721, 1712, 1721, 1714, 1715, 1723, 1718, 1717, 1717,
+ 1720, 1716, 1722, 1719, 1724, 1725, 1718, 1727, 1726, 1722,
- 1731, 1734, 1728, 1719, 1735, 1723, 1734, 1730, 1721, 1723,
- 1725, 1725, 1737, 1728, 1726, 1733, 1724, 1727, 1736, 1738,
- 1729, 0, 1731, 1740, 1729, 1744, 1730, 1731, 1735, 1739,
- 1738, 1735, 1736, 1734, 1737, 1743, 1740, 1743, 1739, 1737,
- 1741, 1741, 1742, 1744, 1745, 1736, 1738, 1747, 1741, 1752,
- 1740, 1746, 1744, 1748, 1747, 1742, 1739, 1749, 1750, 1753,
- 0, 1754, 1743, 1758, 1749, 1755, 1756, 1741, 1741, 1742,
- 1745, 1745, 1755, 1746, 1747, 1748, 1752, 1753, 1746, 1751,
- 1748, 1757, 1750, 1754, 1749, 1750, 1753, 1751, 1754, 1759,
- 1760, 1756, 1755, 1756, 1763, 1758, 1759, 1761, 1764, 0,
+ 1728, 1731, 1734, 1729, 1725, 1720, 1732, 1724, 1721, 1727,
+ 1730, 1732, 1723, 1723, 1737, 1733, 1735, 1730, 1734, 1722,
+ 1726, 1724, 1725, 1733, 1727, 1726, 1729, 1731, 1731, 1734,
+ 1729, 1739, 1736, 1732, 1742, 0, 1737, 1730, 1741, 1735,
+ 1736, 1737, 1733, 1735, 1740, 1743, 1744, 1745, 1742, 1740,
+ 1746, 1748, 1747, 1747, 0, 1751, 1745, 1744, 1739, 1736,
+ 1747, 1742, 1741, 1746, 1748, 1741, 1749, 1743, 1749, 1750,
+ 1752, 1758, 1743, 1744, 1745, 1756, 1740, 1746, 1748, 1747,
+ 1747, 1751, 1751, 1753, 1754, 1759, 1757, 1750, 1755, 1762,
+ 1753, 1764, 1752, 1749, 1757, 1755, 1750, 1752, 1758, 1756,
- 0, 1765, 1766, 1757, 1767, 0, 1751, 1763, 1757, 1765,
- 1766, 1768, 1770, 1771, 1772, 0, 1759, 1772, 1773, 1761,
- 1774, 1763, 1760, 1775, 1761, 1764, 1767, 1778, 1765, 1766,
- 1779, 1767, 1768, 1776, 1770, 1771, 1775, 1777, 1768, 1770,
- 1771, 1772, 1776, 1780, 1773, 1773, 1774, 1774, 1781, 1777,
- 1775, 1778, 1780, 0, 1778, 1782, 1779, 1779, 1784, 1785,
- 1776, 1786, 1782, 1781, 1777, 1783, 1789, 0, 1783, 1791,
- 1780, 1791, 1790, 1784, 1787, 1781, 1792, 1793, 1794, 1795,
- 1783, 1794, 1782, 1786, 1789, 1784, 1796, 1797, 1786, 1783,
- 1787, 1785, 1783, 1789, 1790, 1783, 1791, 1798, 1787, 1790,
+ 1760, 1761, 1756, 1759, 1763, 1766, 1754, 1767, 1761, 1770,
+ 1753, 1754, 1759, 1757, 1762, 1755, 1762, 1765, 1773, 1769,
+ 1774, 1776, 1760, 1764, 1765, 1771, 1763, 1760, 1761, 1767,
+ 1772, 1763, 1769, 1771, 1767, 1784, 1770, 1766, 1772, 1777,
+ 1773, 1774, 1779, 1776, 1765, 1773, 1769, 1774, 1776, 1780,
+ 1778, 1781, 1771, 1778, 1782, 1783, 1786, 1772, 1785, 1784,
+ 1791, 1777, 1784, 1782, 1781, 1786, 1777, 1783, 1779, 1779,
+ 0, 1787, 1788, 1790, 1792, 1780, 1780, 1778, 1781, 1788,
+ 1798, 1782, 1783, 1786, 1785, 1785, 1787, 1789, 1790, 1793,
+ 1789, 1795, 1791, 1796, 1799, 1797, 1792, 1797, 1787, 1788,
- 1792, 1787, 1799, 1792, 1793, 1794, 1800, 1783, 1801, 1797,
- 1803, 1795, 1802, 1804, 1797, 1805, 1807, 1787, 1796, 1803,
- 1806, 1804, 1805, 1798, 1798, 1808, 1802, 1809, 1799, 1799,
- 1801, 1810, 1811, 1813, 1814, 1801, 0, 1803, 1800, 1802,
- 1804, 1812, 1805, 1815, 1806, 1812, 0, 1806, 1807, 1817,
- 1818, 0, 0, 1810, 1816, 1813, 1817, 1808, 1810, 1809,
- 1813, 1814, 1818, 1816, 1811, 1815, 1819, 1821, 1812, 1822,
- 1815, 1820, 1823, 1824, 1821, 1819, 1817, 1818, 1825, 1820,
- 1827, 1816, 1822, 1828, 1829, 1823, 1824, 1825, 1826, 1830,
- 1826, 1832, 1829, 1819, 1821, 1836, 1822, 1833, 1820, 1823,
+ 1790, 1792, 1789, 1800, 1798, 1793, 1800, 1798, 1801, 1795,
+ 1802, 1789, 1803, 1793, 1789, 1796, 1793, 1789, 1795, 1804,
+ 1796, 1799, 1797, 1805, 1806, 1807, 1809, 1808, 1810, 1789,
+ 1800, 1811, 1793, 1812, 1803, 1809, 1810, 1813, 1811, 1803,
+ 1801, 1808, 1802, 1814, 1815, 1804, 1804, 1807, 1817, 1805,
+ 1805, 1816, 1807, 1809, 1808, 1810, 1806, 1812, 1811, 1818,
+ 1812, 1819, 1820, 1818, 1823, 1821, 1826, 1824, 1822, 1813,
+ 0, 1823, 1825, 1816, 1826, 1814, 1815, 1822, 1816, 1824,
+ 1817, 1825, 0, 1819, 1833, 1828, 1818, 1821, 1819, 1820,
+ 1827, 1823, 1821, 1826, 1824, 1822, 1829, 1827, 1828, 1825,
- 1824, 1835, 1836, 1827, 1839, 1825, 1832, 1827, 1828, 1830,
- 1828, 1829, 1833, 1834, 1837, 1826, 1830, 1839, 1832, 1838,
- 1840, 1842, 1836, 1841, 1833, 1837, 1838, 1834, 1844, 1845,
- 1846, 1839, 1850, 1835, 1848, 1888, 1845, 0, 1840, 1842,
- 1834, 1837, 1849, 1847, 1840, 1850, 1838, 1840, 1842, 1841,
- 1841, 1856, 1846, 1852, 1849, 1844, 1845, 1846, 1847, 1850,
- 1848, 1848, 1852, 1851, 1853, 1840, 1851, 1888, 1854, 1849,
- 1847, 1856, 1855, 0, 0, 1858, 0, 1865, 1856, 1854,
- 1852, 1854, 1853, 1854, 1855, 1857, 1858, 1862, 1857, 1860,
- 1851, 1853, 1854, 1864, 1860, 1854, 1862, 1866, 1863, 1855,
+ 1830, 1831, 1832, 0, 1832, 1834, 1835, 1833, 1841, 1829,
+ 1831, 1833, 1828, 1830, 1835, 1836, 1838, 1827, 1842, 1839,
+ 1850, 0, 1840, 1829, 0, 1842, 1843, 1830, 1831, 1832,
+ 1834, 1838, 1834, 1835, 1839, 1836, 1840, 1843, 1845, 1846,
+ 1841, 1844, 1836, 1838, 1847, 1842, 1839, 1850, 1844, 1840,
+ 0, 1845, 1851, 1843, 1848, 1852, 1856, 1846, 1853, 1851,
+ 1854, 1857, 1855, 1846, 1857, 1845, 1846, 1858, 1844, 1856,
+ 1847, 1847, 1848, 1853, 1855, 1859, 1858, 1852, 0, 1851,
+ 1861, 1848, 1852, 1856, 1846, 1853, 1854, 1854, 1857, 1855,
+ 1860, 1862, 1861, 1859, 1858, 1863, 1870, 1864, 1863, 1871,
- 1863, 1860, 1858, 1857, 1865, 1869, 1854, 1867, 1854, 1868,
- 1854, 1870, 1857, 1872, 1862, 1857, 1860, 1864, 1868, 1871,
- 1864, 1860, 1867, 1869, 1866, 1863, 1875, 1873, 1877, 1874,
- 1880, 1871, 1869, 1876, 1867, 1870, 1868, 1874, 1870, 1878,
- 1872, 1873, 0, 1876, 1883, 1879, 1871, 1882, 1875, 1889,
- 1877, 1879, 1880, 1875, 1873, 1877, 1874, 1880, 1882, 1881,
- 1876, 1884, 1883, 1878, 1887, 1885, 1878, 1881, 1885, 1884,
- 1886, 1883, 1879, 1886, 1882, 1892, 1889, 1891, 1890, 1897,
- 1894, 1893, 1887, 1885, 1891, 1895, 1881, 1903, 1884, 1892,
- 1893, 1887, 1885, 1894, 1896, 1885, 1895, 1886, 1890, 1896,
+ 1872, 1860, 1859, 1860, 1866, 1860, 1868, 1861, 1864, 1866,
+ 1869, 1862, 1869, 1863, 1860, 1868, 1866, 1860, 1862, 1873,
+ 1870, 1875, 1863, 1870, 1864, 1863, 1871, 1872, 1860, 1874,
+ 1860, 1866, 1860, 1868, 1873, 1876, 1866, 1869, 1874, 1875,
+ 1877, 1878, 1880, 1879, 1881, 1882, 1873, 0, 1875, 1886,
+ 1880, 1883, 1877, 1884, 1885, 1882, 1874, 1879, 1886, 1876,
+ 1885, 1887, 1876, 1895, 1889, 0, 1881, 1877, 1878, 1880,
+ 1879, 1881, 1882, 1883, 1888, 1889, 1886, 1884, 1883, 1890,
+ 1884, 1885, 1888, 1887, 1891, 1894, 1892, 1893, 1887, 1892,
+ 1893, 1889, 1891, 1896, 1899, 1895, 1900, 1890, 1897, 1902,
- 1898, 1897, 1892, 1906, 1891, 1890, 1897, 1894, 1893, 1901,
- 1902, 1901, 1895, 1903, 1903, 1898, 1904, 1905, 0, 1902,
- 1907, 1906, 1913, 0, 1907, 1910, 1896, 1898, 1905, 1911,
- 1906, 1908, 1909, 1912, 0, 1909, 1901, 1902, 1910, 1914,
- 1904, 1920, 0, 1904, 1905, 1908, 1907, 1907, 1913, 1913,
- 1909, 1907, 1910, 1911, 1920, 1912, 1911, 1908, 1908, 1909,
- 1912, 1915, 1909, 1914, 1917, 1916, 1914, 1921, 1920, 1918,
- 1915, 1916, 1908, 1917, 1918, 1922, 1923, 1924, 1925, 1921,
- 1922, 1927, 1928, 1931, 1926, 1929, 1930, 1937, 1915, 1940,
- 1924, 1917, 1916, 1926, 1921, 1932, 1936, 0, 1923, 1930,
+ 1898, 1888, 1901, 1894, 1892, 1900, 1890, 1898, 1899, 1904,
+ 1902, 1891, 1894, 1892, 1893, 1901, 1892, 1903, 1897, 1905,
+ 1896, 1899, 1903, 1900, 1909, 1897, 1902, 1898, 1908, 1901,
+ 1908, 1904, 1910, 1909, 1905, 1913, 1904, 1911, 0, 1912,
+ 0, 1914, 0, 1915, 0, 1914, 1905, 1918, 1934, 1903,
+ 1912, 1909, 1917, 1913, 1919, 1908, 1920, 1915, 1910, 1910,
+ 1916, 1911, 1913, 1916, 1911, 1917, 1912, 1914, 1914, 1915,
+ 1915, 1918, 1914, 1921, 1918, 1934, 1919, 1922, 1916, 1917,
+ 1924, 1919, 1920, 1920, 1915, 1923, 1922, 1916, 1925, 1924,
+ 1916, 1923, 1927, 1925, 1928, 1930, 1929, 1921, 1931, 1932,
- 0, 1918, 1922, 1923, 1924, 0, 1938, 1929, 1927, 1936,
- 1925, 1926, 1929, 1930, 1928, 1931, 1932, 1934, 1935, 1937,
- 1938, 1940, 1932, 1936, 1934, 1935, 1939, 1942, 1944, 1945,
- 1946, 0, 1939, 1938, 1949, 0, 1944, 1945, 1946, 1947,
- 1948, 1957, 1951, 1958, 1934, 1935, 1942, 0, 0, 1950,
- 1939, 1952, 1949, 1939, 1942, 1944, 1945, 1946, 1947, 1939,
- 1951, 1949, 1948, 1950, 1953, 1952, 1947, 1948, 1954, 1951,
- 1956, 1955, 1959, 1957, 1960, 1958, 1950, 1953, 1952, 1961,
- 1962, 1954, 1964, 1965, 1963, 1956, 1966, 1962, 1960, 1967,
- 1964, 1953, 1955, 1963, 0, 1954, 1959, 1956, 1955, 1959,
+ 1921, 1929, 1935, 0, 1922, 1927, 1928, 1924, 1936, 1933,
+ 1938, 1931, 1923, 1937, 1943, 1944, 1939, 1930, 1933, 1927,
+ 1925, 1928, 1930, 1929, 1947, 1931, 1937, 1943, 0, 0,
+ 1936, 1932, 1941, 1955, 1935, 1936, 1933, 1939, 1942, 1941,
+ 1937, 1943, 1938, 1939, 1945, 1942, 1946, 1944, 1949, 1951,
+ 1954, 0, 1946, 1952, 1953, 1955, 1947, 1951, 1945, 1941,
+ 1955, 1952, 1953, 1963, 1956, 1942, 1958, 1949, 1962, 1954,
+ 1946, 1945, 1957, 1946, 1959, 1949, 1951, 1954, 1963, 1946,
+ 1952, 1953, 1956, 1960, 1958, 1961, 1957, 1964, 1959, 1962,
+ 1963, 1956, 1965, 1958, 1966, 1962, 1960, 0, 1961, 1957,
- 1966, 1960, 1972, 1968, 1969, 1970, 1961, 1962, 1968, 1964,
- 1965, 1963, 1974, 1966, 1970, 1969, 1973, 1976, 1975, 1955,
- 1977, 1967, 0, 1973, 1976, 1982, 1978, 1986, 1979, 1972,
- 1968, 1969, 1970, 1980, 1984, 1974, 1982, 1980, 1985, 1974,
- 1975, 1989, 1977, 1973, 1976, 1975, 1979, 1977, 1978, 1982,
- 1984, 1986, 1982, 1978, 1986, 1979, 1985, 1987, 1988, 1990,
- 1980, 1984, 1991, 1982, 1993, 1985, 1992, 1990, 1989, 1995,
- 1988, 0, 1987, 1994, 1992, 1997, 0, 1991, 1996, 1998,
- 2001, 2000, 1995, 0, 1987, 1988, 1990, 2001, 1999, 1991,
- 1997, 1993, 2005, 1992, 0, 1994, 1995, 2000, 1996, 1998,
+ 1967, 1959, 1968, 1972, 1969, 1971, 1970, 1974, 1973, 1979,
+ 1960, 1969, 1961, 1971, 1967, 1970, 1962, 1976, 1966, 1964,
+ 1975, 1966, 1973, 1981, 1965, 1975, 1982, 1967, 1976, 1968,
+ 1972, 1969, 1971, 1970, 1977, 1973, 1979, 1984, 1980, 1974,
+ 1985, 0, 1983, 1977, 1976, 1980, 1981, 1975, 1982, 1983,
+ 1981, 1987, 1986, 1982, 0, 1987, 1991, 1989, 1992, 1984,
+ 0, 1977, 1985, 1993, 1984, 1980, 1996, 1985, 1989, 1983,
+ 1986, 1994, 1991, 1998, 1997, 2000, 1992, 1995, 1987, 1986,
+ 0, 1989, 1997, 1991, 1989, 1992, 1994, 1993, 1998, 1995,
+ 1993, 1999, 2001, 1996, 2002, 1989, 2003, 2004, 1994, 1999,
- 1994, 2003, 1997, 1999, 2004, 1996, 1998, 2001, 2000, 2003,
- 2006, 2004, 2007, 2008, 2009, 1999, 2011, 2012, 2010, 2015,
- 2016, 2007, 2018, 2011, 2005, 2006, 2014, 2019, 2003, 2020,
- 2022, 2004, 2016, 2018, 2008, 2021, 2017, 2006, 0, 2007,
- 2008, 2009, 2010, 2011, 2012, 2010, 2023, 2016, 2014, 2018,
- 2021, 2015, 2028, 2014, 2017, 2022, 2020, 2022, 2024, 2019,
- 2026, 2025, 2021, 2017, 2029, 2024, 2025, 2027, 2031, 2026,
- 2023, 2030, 2032, 2023, 2028, 2033, 2027, 0, 2034, 2028,
- 2040, 0, 0, 2031, 2032, 2024, 2029, 2026, 2025, 2030,
- 2035, 2029, 2038, 2041, 2027, 2031, 0, 2033, 2030, 2032,
+ 1998, 1997, 2000, 2008, 1995, 2005, 2007, 2002, 2011, 2010,
+ 2008, 2006, 2004, 2012, 2001, 2011, 2003, 2010, 1999, 2001,
+ 2014, 2002, 2007, 2003, 2004, 2005, 2006, 2013, 2015, 2014,
+ 2008, 2016, 2005, 2007, 0, 2011, 2010, 2017, 2006, 2018,
+ 2019, 2021, 2013, 2022, 2023, 2012, 2018, 2014, 2026, 2015,
+ 2027, 2024, 2030, 0, 2013, 2015, 2023, 2028, 2016, 2025,
+ 2029, 2017, 0, 2021, 2017, 2048, 2018, 2019, 2021, 2024,
+ 2025, 2023, 2028, 2033, 2031, 2022, 2030, 2027, 2024, 2030,
+ 2026, 2031, 2033, 2032, 2028, 2029, 2025, 2029, 2032, 2034,
+ 2035, 2036, 2038, 2037, 2039, 0, 2042, 2048, 2034, 0,
- 2034, 0, 2033, 2035, 2036, 2034, 2037, 2040, 2035, 2039,
- 2042, 2036, 2044, 2037, 2038, 2048, 2042, 2035, 2045, 2038,
- 2052, 2039, 2048, 2044, 2046, 2041, 2045, 2047, 2037, 2051,
- 2035, 2036, 2046, 2037, 2049, 2053, 2039, 2042, 2047, 2044,
- 2037, 2054, 2048, 2055, 2050, 2045, 2050, 2052, 2054, 2056,
- 2060, 2046, 2057, 2062, 2047, 2051, 2051, 2050, 2057, 2049,
- 2058, 2049, 2053, 2059, 2065, 2061, 2058, 2063, 2054, 2059,
- 2055, 2050, 2066, 2050, 2067, 2056, 2056, 2060, 2068, 2057,
- 2069, 2066, 2068, 2073, 0, 2062, 2070, 2058, 2061, 2075,
- 2059, 2063, 2061, 2071, 2063, 2071, 2065, 2072, 2069, 2066,
+ 2033, 2031, 2040, 2041, 2047, 2045, 2039, 2038, 2043, 2042,
+ 2032, 2037, 2035, 2036, 2042, 2043, 2034, 2035, 2036, 2038,
+ 2037, 2039, 2046, 2042, 2040, 2041, 2044, 2045, 2051, 2040,
+ 2041, 2047, 2045, 2044, 2046, 2043, 2042, 2049, 2052, 2051,
+ 2054, 2056, 2053, 2049, 2059, 2055, 2052, 2058, 2044, 2046,
+ 2053, 2054, 2055, 2044, 2060, 2051, 2061, 2057, 2062, 2057,
+ 2044, 2063, 2069, 2061, 2049, 2052, 2056, 2054, 2056, 2053,
+ 2057, 2059, 2055, 2058, 2058, 2067, 2064, 2068, 2072, 2074,
+ 2076, 2060, 2064, 2061, 2057, 2062, 2057, 2063, 2063, 2065,
+ 2066, 2070, 2073, 2075, 2069, 2065, 2066, 2075, 2076, 2077,
- 2076, 2079, 2074, 2077, 2080, 2068, 2067, 2069, 2070, 2074,
- 2073, 2075, 2078, 2070, 2081, 2077, 2075, 0, 2078, 2083,
- 2071, 2072, 2082, 2079, 2072, 2085, 2080, 2076, 2079, 2074,
- 2077, 2080, 2085, 2091, 2086, 2084, 2084, 2084, 2087, 2078,
- 2081, 2081, 2084, 2086, 2082, 2087, 2088, 2089, 2090, 2082,
- 2084, 2083, 2085, 2091, 2089, 2090, 2096, 2092, 2099, 2095,
- 2091, 2086, 2084, 2084, 2084, 2087, 2094, 2097, 2096, 2084,
- 2099, 2094, 2095, 2098, 2089, 2090, 2100, 2101, 2088, 2092,
- 2102, 0, 2104, 2096, 2092, 2099, 2095, 2102, 2103, 2098,
- 2104, 2107, 2097, 2105, 2097, 2101, 2106, 2107, 2094, 2108,
+ 2068, 2073, 2067, 2064, 2068, 2079, 2078, 2076, 2078, 2080,
+ 2072, 2074, 2082, 2083, 0, 2070, 2065, 2066, 2070, 2073,
+ 2075, 2077, 2085, 2081, 2086, 2084, 2077, 2090, 2085, 2079,
+ 2081, 2087, 2079, 2078, 2082, 2088, 2080, 2084, 2089, 2082,
+ 2083, 2091, 2091, 2091, 2095, 0, 2086, 2092, 2091, 2085,
+ 2081, 2086, 2084, 2087, 2092, 2093, 2091, 2098, 2087, 2090,
+ 2089, 2088, 2088, 2099, 2093, 2089, 2094, 2102, 2091, 2091,
+ 2091, 2096, 2097, 2094, 2092, 2091, 2095, 2098, 2096, 2097,
+ 2102, 2101, 2093, 2103, 2098, 2099, 2101, 2104, 2105, 2106,
+ 2099, 2107, 2110, 2094, 2102, 2103, 0, 2112, 2096, 2097,
- 2098, 2103, 2105, 2110, 2101, 2106, 2111, 2102, 2100, 2104,
- 2109, 2109, 2112, 2111, 2113, 2103, 2114, 2112, 2107, 2115,
- 2105, 2116, 2119, 2106, 2121, 2120, 2108, 2120, 2116, 2110,
- 2110, 2123, 2122, 2111, 2127, 2125, 2126, 2109, 2128, 2112,
- 2113, 2113, 2126, 2114, 2128, 2132, 2115, 2121, 2116, 2119,
- 2122, 2121, 2120, 2125, 2131, 2133, 2129, 2130, 2123, 2122,
- 2135, 2133, 2125, 2126, 2129, 2128, 2127, 2131, 2130, 2138,
- 2136, 2139, 2132, 2134, 2137, 2137, 2140, 2140, 2141, 2143,
- 2135, 2131, 2133, 2129, 2130, 2134, 2144, 2135, 2136, 2141,
- 2145, 2148, 2146, 2149, 2147, 2138, 2138, 2136, 2139, 2146,
+ 2108, 2106, 2109, 2111, 2105, 2110, 2112, 2115, 2113, 2109,
+ 2103, 2111, 2104, 2101, 2104, 2105, 2106, 2113, 2108, 2110,
+ 2114, 2116, 2116, 2107, 2112, 2117, 2114, 2108, 2119, 2109,
+ 2111, 2118, 2121, 2119, 2115, 2113, 2120, 2122, 2118, 2123,
+ 2126, 2127, 2128, 2127, 2134, 2130, 2123, 2114, 2116, 0,
+ 2137, 2117, 2117, 2129, 2133, 2119, 2132, 2139, 2118, 2121,
+ 2133, 2137, 2120, 2120, 2122, 2128, 2123, 2126, 2127, 2128,
+ 2136, 2129, 2130, 2135, 2132, 2138, 2134, 2137, 2136, 2135,
+ 2129, 2133, 2140, 2132, 2141, 2143, 2142, 2147, 2138, 2139,
+ 2141, 2146, 2144, 2145, 2145, 2148, 2148, 2136, 2142, 2152,
- 2134, 2137, 2151, 2140, 2152, 2141, 2153, 0, 2144, 0,
- 2151, 2143, 2154, 2144, 2147, 2156, 2159, 2155, 2149, 2146,
- 2149, 2147, 2145, 2148, 2157, 2161, 2160, 2156, 2162, 2151,
- 2158, 2157, 2164, 2153, 2154, 2155, 2152, 2162, 2158, 2154,
- 2159, 2160, 2156, 2159, 2155, 2163, 2163, 2165, 2167, 2161,
- 2168, 2157, 2161, 2160, 2166, 2162, 2169, 2158, 2164, 2164,
- 2170, 2166, 2171, 2172, 0, 2168, 2175, 2178, 2173, 2171,
- 2165, 2176, 2163, 2175, 2165, 2172, 2176, 2168, 2177, 2180,
- 2167, 2166, 2169, 2169, 2173, 2179, 2184, 2180, 2179, 2171,
- 2172, 2173, 2170, 2175, 2178, 2173, 2181, 2186, 2176, 2183,
+ 2135, 2151, 2138, 2153, 2149, 2143, 2156, 2155, 2160, 2140,
+ 2144, 2141, 2143, 2142, 2147, 2149, 2154, 2146, 2146, 2144,
+ 2145, 2152, 2148, 2154, 2157, 2161, 2152, 2155, 2159, 2163,
+ 2164, 2149, 2162, 2151, 2155, 2153, 2159, 2165, 2156, 2167,
+ 2160, 2169, 2164, 2154, 2165, 2166, 2168, 2163, 2172, 2157,
+ 2175, 2157, 2161, 2166, 2162, 2159, 2163, 2164, 2170, 2162,
+ 2173, 2168, 2176, 2167, 2165, 2169, 2167, 2170, 2169, 2171,
+ 2171, 2174, 2166, 2168, 2172, 2172, 2177, 2176, 2174, 2178,
+ 2180, 2179, 2175, 2173, 0, 2170, 0, 2173, 2179, 2176,
+ 2181, 2186, 2180, 2183, 2184, 0, 2171, 2185, 2174, 2184,
- 2177, 2185, 2187, 2188, 2189, 2177, 2180, 2183, 2181, 2184,
- 2190, 2173, 2179, 2184, 2192, 0, 2191, 0, 2186, 2193,
- 2187, 2191, 2189, 2181, 2186, 2193, 2183, 2185, 2185, 2187,
- 2188, 2189, 2191, 2190, 2194, 2196, 2195, 2190, 2197, 2200,
- 2202, 2192, 2198, 2191, 2195, 2197, 2193, 2194, 2191, 2198,
- 2201, 2199, 2202, 2203, 2204, 2205, 2207, 2196, 2199, 2201,
- 2206, 2194, 2196, 2195, 2210, 2197, 2209, 2202, 2204, 2198,
- 2213, 2200, 2210, 2214, 2218, 2203, 2216, 2201, 2199, 2207,
- 2203, 2204, 2205, 2207, 2209, 2211, 2206, 2206, 2212, 2217,
- 2211, 2210, 2213, 2209, 2217, 2212, 2220, 2213, 2221, 2221,
+ 2183, 2187, 2177, 2177, 2187, 0, 2181, 2180, 2179, 2192,
+ 0, 2178, 2193, 2181, 2188, 2189, 2194, 2181, 2186, 2185,
+ 2183, 2184, 2188, 2191, 2185, 2196, 2195, 2189, 2187, 2197,
+ 0, 2191, 2192, 2181, 2198, 2199, 2192, 2194, 2193, 2193,
+ 2199, 2188, 2189, 2194, 2195, 2200, 2202, 2197, 2201, 2204,
+ 2191, 2199, 2196, 2195, 2201, 2203, 2197, 2198, 2205, 2202,
+ 2208, 2198, 2199, 2203, 2211, 2205, 0, 2199, 2210, 2209,
+ 2206, 2204, 2200, 2202, 2207, 2201, 2204, 2206, 2209, 2212,
+ 2210, 2207, 2203, 2213, 2215, 2205, 2211, 2214, 2226, 2222,
+ 2217, 2211, 2208, 2212, 2218, 2210, 2209, 2206, 2220, 2219,
- 2214, 2211, 2222, 2216, 2223, 2224, 2218, 2226, 2228, 2227,
- 2231, 2233, 2211, 2229, 2230, 2212, 2230, 2211, 2234, 2223,
- 2236, 2217, 2226, 2228, 2222, 2221, 2235, 0, 2220, 2222,
- 2234, 2223, 2227, 2232, 2226, 2228, 2227, 2224, 2232, 2229,
- 2229, 2230, 2231, 2233, 2237, 2234, 2239, 2236, 2235, 2238,
- 2240, 2242, 2237, 2235, 2243, 2246, 2238, 2244, 2249, 2247,
- 2232, 2248, 2243, 2250, 2251, 2240, 2242, 2252, 2239, 2255,
- 0, 2237, 0, 2239, 0, 2256, 2238, 2240, 2242, 2244,
- 2253, 2243, 2246, 2247, 2244, 2249, 2247, 2248, 2248, 2250,
- 2250, 2251, 2253, 2254, 2257, 2259, 2256, 2258, 0, 2252,
+ 2221, 2207, 2218, 2224, 2219, 2220, 2212, 2215, 2217, 2228,
+ 2213, 2215, 2230, 2214, 2214, 2219, 2222, 2217, 2225, 2232,
+ 2226, 2218, 2221, 2225, 2239, 2220, 2219, 2221, 2229, 2229,
+ 2224, 2219, 2231, 2234, 2230, 2235, 2238, 2236, 2238, 2230,
+ 2237, 2228, 2241, 2243, 2240, 2242, 2244, 2231, 2234, 2240,
+ 2225, 2232, 2236, 2245, 2247, 2229, 2239, 2242, 2235, 2231,
+ 2234, 2245, 2235, 2238, 2236, 2243, 2237, 2237, 2246, 2248,
+ 2243, 2240, 2242, 2244, 2241, 2246, 2247, 2250, 2251, 2252,
+ 2245, 2247, 2254, 2255, 2248, 2256, 2251, 2257, 2260, 2258,
+ 2259, 2261, 2250, 2263, 0, 2246, 2248, 0, 0, 0,
- 2254, 2255, 2256, 2261, 2262, 2264, 2266, 2253, 2265, 2262,
- 2274, 2267, 2266, 2259, 2269, 2268, 2257, 2273, 2258, 2271,
- 2254, 2257, 2259, 2279, 2258, 2261, 2267, 2268, 2272, 2264,
- 2261, 2265, 2264, 2266, 2271, 2265, 2262, 2274, 2267, 2273,
- 2269, 2269, 2268, 2272, 2273, 2275, 2271, 2276, 2277, 2278,
- 2279, 2280, 2282, 2281, 2283, 2272, 2284, 2287, 2280, 2285,
- 0, 2282, 2283, 2275, 0, 2286, 2289, 2315, 2288, 2276,
- 2277, 2281, 2275, 2278, 2276, 2277, 2278, 2288, 2280, 2282,
- 2281, 2283, 2285, 2291, 2289, 2290, 2285, 2286, 2284, 2287,
- 2293, 2294, 2286, 2289, 2290, 2288, 2291, 2295, 2297, 2315,
+ 2264, 2252, 2265, 2261, 2250, 2251, 2252, 2255, 2269, 2254,
+ 2255, 2256, 2256, 2266, 2257, 2258, 2258, 2259, 2261, 2262,
+ 2260, 2264, 2273, 2267, 2265, 2263, 2262, 2264, 2270, 2265,
+ 2269, 2272, 2274, 2270, 2266, 2269, 2275, 2279, 2274, 2277,
+ 2266, 2267, 2276, 0, 2282, 2273, 2262, 2280, 2281, 2273,
+ 2267, 2275, 2279, 2286, 2276, 2272, 2284, 2287, 2272, 2274,
+ 2270, 2283, 2280, 2275, 2279, 2277, 2277, 2285, 2289, 2276,
+ 2281, 2282, 2290, 2292, 2280, 2281, 2294, 2286, 2284, 2283,
+ 2286, 2290, 2291, 2284, 2287, 2288, 2289, 2293, 2283, 2285,
+ 2291, 2295, 2288, 2296, 2285, 2289, 0, 2297, 2294, 2290,
- 2294, 2293, 2296, 0, 2298, 2297, 2300, 2301, 2299, 0,
- 2291, 2306, 2290, 2301, 2302, 2295, 2293, 2293, 2294, 2308,
- 2296, 2300, 2317, 2303, 2295, 2297, 2299, 2313, 2293, 2296,
- 2298, 2298, 2314, 2300, 2301, 2299, 2302, 2303, 2306, 2313,
- 2309, 2302, 2310, 2308, 2311, 2314, 2308, 2316, 2317, 2317,
- 2303, 2309, 2318, 2310, 2313, 2311, 2321, 2316, 2322, 2314,
- 2319, 2320, 2323, 2325, 2328, 2321, 2326, 2309, 2328, 2310,
- 0, 2311, 2330, 2319, 2316, 2329, 0, 2318, 2332, 2318,
- 0, 2323, 2320, 2321, 2331, 2322, 2335, 2319, 2320, 2323,
- 2325, 2328, 2326, 2326, 2333, 2337, 2329, 2331, 2332, 2333,
+ 2301, 2305, 2296, 2294, 2298, 2292, 2299, 2302, 2305, 2291,
+ 2293, 2301, 2288, 2298, 2293, 2297, 2302, 2303, 2304, 2299,
+ 2296, 2306, 2307, 2295, 2297, 0, 2301, 2301, 2305, 0,
+ 2314, 2298, 2310, 2299, 2302, 2303, 2304, 2308, 2301, 2311,
+ 2307, 2316, 0, 2321, 2303, 2304, 0, 2306, 2306, 2307,
+ 2309, 2317, 2308, 2311, 2310, 2321, 2309, 2314, 2318, 2310,
+ 2319, 2322, 2317, 2323, 2308, 2316, 2311, 2325, 2316, 2318,
+ 2321, 2319, 2324, 2326, 2322, 2328, 2327, 2309, 2317, 2330,
+ 2333, 2329, 2324, 2334, 2338, 2318, 2331, 2319, 2322, 2327,
+ 2329, 2337, 0, 2325, 2325, 2323, 2328, 2336, 2326, 2324,
- 2334, 2337, 2329, 2338, 2330, 2332, 2336, 2334, 2339, 2341,
- 2345, 2331, 2335, 2335, 2336, 2345, 2340, 0, 2338, 2342,
- 2342, 2333, 2337, 2339, 2341, 2344, 2343, 2334, 2340, 0,
- 2338, 2352, 2336, 2336, 2346, 2339, 2341, 2344, 2346, 0,
- 2351, 2336, 2345, 2340, 2343, 0, 2342, 2347, 2347, 2349,
- 2350, 2347, 2344, 2343, 2350, 2351, 2349, 2353, 2352, 2355,
- 2356, 2346, 2354, 2358, 2347, 0, 2353, 2351, 2357, 2354,
- 2363, 2360, 2347, 2359, 2347, 2347, 2349, 2350, 2347, 2360,
- 2364, 2361, 2356, 2355, 2353, 2359, 2355, 2356, 2361, 2354,
- 2358, 2347, 2363, 2365, 2357, 2357, 2366, 2363, 2360, 2367,
+ 2326, 2336, 2328, 2327, 2339, 2331, 2330, 2333, 2329, 2334,
+ 2334, 2343, 2337, 2331, 2340, 2341, 2338, 2339, 2337, 2342,
+ 2341, 2344, 2345, 2348, 2336, 2346, 2342, 2352, 2345, 2344,
+ 2347, 2339, 2350, 2350, 2340, 2348, 2349, 2343, 2343, 2352,
+ 2346, 2340, 2341, 2351, 2360, 2347, 2342, 2344, 2344, 2345,
+ 2348, 2349, 2346, 2353, 2352, 0, 2344, 2347, 2353, 2350,
+ 2354, 2351, 2359, 2349, 2354, 2355, 2355, 2357, 2358, 2355,
+ 2351, 2360, 2358, 2362, 2357, 2361, 0, 2359, 0, 2363,
+ 2362, 2365, 2355, 2364, 2361, 2353, 2366, 2354, 0, 2359,
+ 2355, 2369, 2355, 2355, 2357, 2358, 2355, 2371, 2369, 2367,
- 2359, 2372, 2365, 2370, 2373, 2364, 2374, 2364, 2361, 2377,
- 2372, 2381, 2376, 2379, 2378, 0, 0, 0, 2366, 2367,
- 2365, 2370, 2378, 2366, 2374, 2379, 2367, 2376, 2372, 2384,
- 2370, 2373, 2385, 2374, 2377, 2380, 2377, 2382, 2386, 2376,
- 2379, 2378, 2380, 2381, 2382, 2385, 2387, 2387, 2388, 2389,
- 2391, 2393, 0, 0, 2384, 2396, 2384, 2392, 2394, 2385,
- 2393, 2395, 2380, 2401, 2382, 2386, 2398, 2394, 2395, 2397,
- 2388, 2399, 2391, 2387, 2389, 2388, 2389, 2391, 2393, 2392,
- 2398, 2411, 2401, 2406, 2392, 2394, 2399, 2396, 2395, 2400,
- 2401, 2397, 2403, 2398, 2400, 2404, 2397, 2405, 2399, 2407,
+ 2362, 2374, 2361, 2363, 2368, 2364, 2363, 2365, 2365, 2355,
+ 2364, 2367, 2368, 2366, 2372, 2375, 2373, 2381, 2369, 2371,
+ 2378, 2380, 2382, 2374, 2371, 2373, 2367, 2385, 2374, 2386,
+ 2380, 2368, 2389, 2387, 0, 2375, 2384, 2386, 2378, 2372,
+ 2382, 2372, 2375, 2373, 2381, 2387, 2388, 2378, 2380, 2382,
+ 2390, 2384, 2385, 2388, 2385, 2393, 2386, 2390, 2391, 2391,
+ 2387, 2394, 2395, 2384, 2389, 2397, 2391, 2396, 2396, 2400,
+ 2398, 2401, 2402, 2388, 2394, 2403, 2404, 2390, 2405, 2406,
+ 2393, 2402, 2393, 2404, 2403, 2391, 2391, 2397, 2394, 2395,
+ 2407, 2400, 2397, 2401, 2396, 2398, 2400, 2398, 2401, 2402,
- 2403, 2408, 2409, 2414, 2410, 2412, 2415, 0, 2404, 2413,
- 2406, 2410, 2405, 2411, 2409, 2417, 2418, 2408, 2420, 2403,
- 0, 2400, 2404, 2422, 2405, 2407, 2407, 2412, 2408, 2409,
- 2416, 2410, 2412, 2419, 2413, 2414, 2413, 2423, 2415, 2416,
- 2421, 2419, 2426, 2424, 2425, 2420, 0, 2417, 2418, 2422,
- 2422, 2426, 2419, 2428, 2430, 2421, 2429, 2416, 2433, 2429,
- 2419, 2424, 0, 2423, 2423, 2439, 2425, 2421, 2419, 2426,
- 2424, 2425, 2431, 2433, 2429, 2434, 2428, 2432, 2431, 2430,
- 2428, 2430, 2432, 2429, 2437, 2433, 2429, 2439, 2435, 2438,
- 2440, 2442, 2439, 2434, 2443, 2445, 2444, 2449, 2437, 2431,
+ 2408, 2406, 2403, 2404, 2407, 2410, 2406, 2409, 2412, 2413,
+ 2405, 2414, 2409, 2415, 2417, 2408, 2412, 2407, 2416, 2418,
+ 2420, 2419, 2413, 2423, 2410, 2424, 2414, 2408, 2419, 2421,
+ 2417, 2418, 2410, 2422, 2425, 2412, 2413, 2426, 2414, 2409,
+ 2415, 2417, 2427, 2425, 2416, 2416, 2418, 0, 2419, 2429,
+ 2430, 2421, 2420, 2431, 2428, 2423, 2421, 2424, 2422, 2432,
+ 2422, 2425, 2428, 2435, 2433, 2430, 2434, 0, 0, 2426,
+ 2439, 2437, 2435, 2428, 2427, 0, 2429, 2430, 2441, 2431,
+ 2431, 2428, 2433, 2441, 2438, 2432, 2432, 2438, 2434, 2428,
+ 2435, 2433, 2442, 2434, 2437, 2439, 2454, 2439, 2437, 2440,
- 0, 2446, 2434, 2435, 2438, 2442, 2443, 0, 2449, 2432,
- 2446, 2437, 2440, 2443, 2444, 2435, 2438, 2440, 2442, 2452,
- 2447, 2443, 2445, 2444, 2449, 2448, 2451, 2453, 2446, 2447,
- 2450, 2452, 2450, 2443, 2448, 2455, 2456, 2457, 2458, 2451,
- 0, 2461, 0, 0, 2457, 2459, 2452, 2447, 2460, 2453,
- 2455, 2456, 2448, 2451, 2453, 2467, 0, 2450, 2465, 2461,
- 2462, 2473, 2455, 2456, 2457, 2458, 2469, 2459, 2461, 2462,
- 2460, 2465, 2459, 2468, 2470, 2460, 2467, 2468, 2469, 2465,
- 0, 2472, 2467, 2470, 2471, 2465, 2471, 2462, 2473, 2474,
- 2475, 2478, 0, 2469, 2476, 2480, 2477, 2479, 2465, 2472,
+ 2443, 2444, 2438, 2446, 0, 2440, 2447, 2442, 2451, 2448,
+ 2441, 2438, 2449, 2452, 2438, 2455, 2444, 2446, 2443, 2442,
+ 2453, 2447, 2451, 2454, 2455, 2452, 2440, 2443, 2444, 2467,
+ 2446, 2448, 2452, 2447, 2449, 2451, 2448, 2456, 2453, 2449,
+ 2452, 2457, 2455, 2458, 2460, 2462, 2456, 2453, 2461, 2459,
+ 2457, 2459, 2452, 0, 2458, 2466, 2467, 2460, 2464, 2465,
+ 2461, 2468, 2466, 2470, 2456, 2469, 0, 2462, 2457, 2471,
+ 2458, 2460, 2462, 2464, 2465, 2461, 2459, 2476, 2471, 0,
+ 2474, 2470, 2466, 2468, 2482, 2464, 2465, 2469, 2468, 2484,
+ 2470, 2477, 2469, 2474, 2478, 2477, 2471, 2481, 2476, 2479,
- 2468, 2470, 2484, 2476, 2477, 2482, 2485, 2474, 2472, 2480,
- 2484, 2471, 2482, 2481, 2478, 2486, 2474, 2475, 2478, 2479,
- 2486, 2476, 2480, 2477, 2479, 2481, 2487, 2488, 2489, 2484,
- 2490, 2487, 2482, 0, 2492, 2497, 2493, 2495, 2485, 2497,
- 2481, 2498, 2486, 2493, 2495, 2499, 2502, 2505, 2501, 0,
- 2498, 2500, 2504, 2492, 2490, 2503, 2505, 2490, 2487, 2488,
- 2489, 2492, 2497, 2493, 2495, 2500, 2501, 2504, 2498, 2506,
- 2508, 2509, 2499, 2502, 2505, 2501, 2500, 2500, 2500, 2504,
- 2510, 2503, 2503, 2509, 2511, 2512, 2514, 2510, 2513, 2516,
- 2506, 0, 2500, 2518, 2512, 2515, 2506, 2519, 2509, 0,
+ 2480, 2474, 2480, 2485, 2476, 2483, 2478, 2474, 2479, 2486,
+ 2487, 2482, 2485, 2488, 2489, 2481, 2484, 2486, 2477, 2490,
+ 2474, 2478, 2491, 2483, 2481, 2494, 2479, 2480, 2489, 2491,
+ 2485, 2490, 2483, 2487, 2493, 2488, 2486, 2487, 2495, 2496,
+ 2488, 2489, 2493, 2495, 2496, 2497, 2490, 2498, 2499, 2491,
+ 0, 2501, 0, 2502, 2506, 2504, 2508, 2494, 2506, 2507,
+ 2502, 2493, 2504, 2511, 2515, 2495, 2510, 2514, 2507, 2512,
+ 2501, 2496, 2499, 2509, 2513, 2499, 2514, 2497, 2501, 2498,
+ 2502, 2506, 2504, 2508, 2510, 2515, 2507, 2509, 2517, 2513,
+ 2511, 2515, 2518, 2510, 2514, 2512, 2512, 2521, 2509, 2509,
- 2520, 2521, 2508, 2500, 2519, 0, 2511, 2510, 2521, 2527,
- 2524, 2511, 2512, 2514, 2513, 2513, 2518, 2515, 2527, 2528,
- 2518, 2516, 2515, 2520, 2519, 2529, 2525, 2520, 2521, 2523,
- 2525, 2523, 2524, 2526, 2529, 2531, 2527, 2524, 2530, 2532,
- 2534, 2528, 2531, 2533, 0, 2526, 2528, 2536, 2533, 2530,
- 2535, 0, 2529, 2525, 2537, 2538, 2523, 2539, 2539, 2536,
- 2526, 2532, 2531, 2540, 2538, 2530, 2532, 2534, 2541, 2543,
- 2533, 2542, 2540, 2535, 2536, 2544, 2537, 2535, 2545, 2542,
- 2546, 2537, 2538, 2541, 2539, 2548, 2549, 2545, 0, 2544,
- 2540, 2543, 2550, 2551, 2549, 2541, 2543, 2558, 2542, 2552,
+ 2509, 2513, 2519, 2523, 2518, 2520, 2521, 2522, 0, 2519,
+ 2525, 2528, 0, 2524, 2509, 0, 2527, 0, 2528, 2518,
+ 2517, 2529, 2536, 0, 2521, 2509, 2532, 2520, 2532, 2519,
+ 2523, 2536, 2520, 2522, 2522, 2524, 2533, 2534, 2528, 2527,
+ 2524, 2534, 2525, 2527, 2529, 2530, 2537, 2535, 2529, 2536,
+ 2539, 2538, 2530, 2532, 2541, 2540, 2543, 2544, 2533, 2535,
+ 2538, 2539, 2540, 2533, 2534, 2542, 2546, 2545, 2537, 0,
+ 2542, 0, 2530, 2537, 2535, 2552, 2541, 2539, 2538, 2545,
+ 2544, 2541, 2540, 2543, 2544, 2550, 2547, 2549, 2546, 2548,
+ 2548, 2551, 2542, 2546, 2545, 2547, 2549, 2552, 2554, 2551,
- 2550, 2551, 2544, 2552, 2548, 2545, 2553, 2546, 2554, 2553,
- 2556, 2555, 2548, 2549, 2559, 2557, 2554, 2555, 2560, 2550,
- 2551, 2557, 2562, 0, 2566, 2556, 2552, 2565, 2567, 2558,
- 2564, 2569, 2559, 2553, 2562, 2554, 2568, 2556, 2555, 2570,
- 2565, 2559, 2557, 2568, 2564, 2566, 2571, 2574, 2572, 2562,
- 2560, 2566, 2577, 2567, 2565, 2567, 2573, 2564, 2569, 2573,
- 2574, 2570, 2572, 2568, 2575, 2578, 2570, 2576, 2579, 2580,
- 2571, 2582, 2581, 2571, 2574, 2572, 0, 2583, 2575, 2577,
- 2583, 2580, 2585, 2573, 2581, 2582, 2586, 2590, 2587, 2591,
- 2578, 2575, 2578, 2576, 2576, 2579, 2580, 2588, 2582, 2581,
+ 2550, 2553, 2552, 2555, 2557, 2562, 2561, 2554, 2562, 2558,
+ 2561, 2559, 2550, 2547, 2549, 2553, 2548, 2558, 2551, 2559,
+ 2567, 2560, 2565, 2557, 2568, 2554, 2563, 2569, 2553, 2560,
+ 2555, 2557, 2562, 2561, 2563, 2564, 2558, 2565, 2559, 2566,
+ 2573, 2564, 2568, 2571, 2574, 2566, 2578, 2575, 2560, 2565,
+ 2576, 2568, 2567, 2563, 2573, 2571, 2577, 2574, 2579, 2569,
+ 2580, 2586, 2564, 2577, 2581, 2584, 2566, 2573, 2575, 2582,
+ 2571, 2574, 2582, 2578, 2575, 2576, 2583, 2576, 2581, 2584,
+ 2579, 2585, 2588, 2577, 2580, 2579, 2587, 2580, 2586, 2583,
+ 2589, 2581, 2584, 2590, 2594, 2599, 2582, 2592, 2591, 2600,
- 2587, 0, 2589, 2583, 2583, 2589, 2592, 2583, 2594, 2585,
- 2595, 2596, 2586, 2586, 2590, 2587, 2591, 2595, 2596, 2597,
- 2589, 2602, 2598, 2588, 2588, 2600, 2601, 2603, 2592, 2589,
- 2594, 2605, 2589, 2592, 2597, 2594, 2598, 2595, 2596, 2600,
- 2607, 2609, 2604, 2608, 2601, 2611, 2597, 2606, 2602, 2598,
- 2604, 2612, 2600, 2601, 2603, 2608, 2606, 2614, 2605, 2615,
- 2613, 0, 2616, 2609, 2618, 2623, 2615, 2607, 2609, 2604,
- 2608, 2617, 2611, 2613, 2606, 2614, 2625, 2619, 2612, 2622,
- 0, 2617, 2631, 2629, 2614, 2620, 2615, 2613, 2616, 2616,
- 2619, 2618, 2623, 2620, 2624, 2627, 2626, 2628, 2617, 2630,
+ 2592, 0, 2589, 2583, 2595, 2590, 2596, 2585, 2585, 2588,
+ 2597, 2587, 2591, 2587, 2611, 0, 2598, 2589, 2596, 2598,
+ 2590, 2594, 2599, 2592, 2592, 2591, 2600, 2592, 2601, 2603,
+ 2595, 2595, 2604, 2596, 2598, 2605, 2597, 2597, 2606, 2604,
+ 2607, 2611, 2605, 2598, 2609, 2610, 2598, 2612, 2614, 2613,
+ 2601, 2603, 2615, 2606, 2607, 2601, 2603, 2613, 2609, 2604,
+ 2616, 2615, 2605, 2610, 2618, 2606, 2617, 2607, 2620, 2621,
+ 2622, 2609, 2610, 2625, 2612, 2614, 2613, 2624, 2617, 2615,
+ 2623, 2627, 2626, 2622, 2624, 2628, 2618, 2616, 2629, 2630,
+ 2634, 2618, 2626, 2617, 2636, 2620, 2621, 2622, 2623, 2625,
- 2632, 2622, 2624, 2625, 2619, 2626, 2622, 2629, 2632, 2631,
- 2629, 2634, 2620, 2638, 2630, 2639, 2633, 2627, 2628, 2636,
- 0, 2624, 2627, 2626, 2628, 2630, 2630, 2632, 2633, 2637,
- 2642, 2636, 2641, 2644, 2646, 2645, 2634, 2637, 2634, 2641,
- 2638, 2630, 2642, 2633, 2643, 2644, 2636, 2639, 2643, 0,
- 0, 0, 2650, 2651, 0, 2647, 2637, 2642, 2645, 2641,
- 2644, 2646, 2645, 2647, 0, 2648, 2649, 0, 0, 2653,
- 2656, 2643, 2648, 2649, 2650, 0, 2651, 2654, 2652, 2650,
- 2651, 2653, 2647, 2657, 0, 2659, 2658, 2652, 0, 2662,
- 2657, 2654, 2648, 2649, 2652, 2652, 2653, 2656, 2659, 2660,
+ 2625, 2633, 2630, 2628, 2624, 2631, 2629, 2623, 2627, 2626,
+ 2635, 2637, 2628, 2631, 2638, 2629, 2630, 2634, 2635, 2639,
+ 2637, 2636, 2642, 2633, 2640, 2643, 0, 2641, 2633, 0,
+ 2645, 2644, 2631, 2643, 2649, 2647, 2638, 2635, 2637, 2650,
+ 2639, 2638, 2641, 2644, 0, 0, 2639, 2647, 2640, 2642,
+ 0, 2640, 2643, 2641, 2641, 2645, 2648, 2645, 2644, 2652,
+ 2653, 2649, 2647, 2654, 2648, 2655, 2652, 2654, 2656, 2641,
+ 2657, 2650, 2653, 2658, 2661, 2659, 2662, 2655, 2660, 0,
+ 0, 2658, 2659, 2648, 2667, 2660, 2652, 2653, 0, 0,
+ 2654, 2656, 2655, 2669, 2664, 2656, 2661, 2657, 2663, 2662,
- 2661, 2662, 2652, 2654, 2654, 2652, 2658, 2664, 2660, 2661,
- 2657, 2665, 2659, 2658, 2652, 2666, 2662, 2669, 2654, 2663,
- 2663, 2652, 2652, 2671, 2667, 2672, 2660, 2661, 2670, 2665,
- 2674, 2673, 2674, 2664, 2664, 0, 0, 2678, 2665, 2667,
- 2666, 2667, 2666, 2670, 2677, 2671, 2663, 2672, 2667, 2669,
- 2671, 2667, 2672, 2673, 2676, 2670, 2675, 2674, 2673, 2678,
- 2676, 2685, 2677, 2681, 2678, 2682, 2667, 2683, 2667, 0,
- 2675, 2677, 2679, 2679, 2684, 2686, 2687, 2689, 2690, 2688,
- 0, 2676, 2687, 2675, 2694, 2681, 2684, 2682, 2691, 2683,
- 2681, 2688, 2682, 2685, 2683, 2693, 2695, 2693, 2694, 2679,
+ 2658, 2661, 2659, 2662, 2665, 2660, 2664, 2663, 2671, 2668,
+ 2670, 2667, 2673, 2669, 2663, 2663, 2668, 2671, 2665, 2672,
+ 2669, 2664, 2663, 2670, 2673, 2663, 2674, 2674, 2672, 2675,
+ 2665, 2665, 2676, 2677, 2663, 2671, 2668, 2670, 2680, 2673,
+ 0, 2663, 2663, 0, 0, 2665, 2672, 2678, 2681, 0,
+ 2676, 2682, 0, 2674, 2683, 2675, 2675, 2684, 2677, 2676,
+ 2677, 0, 2678, 2681, 2678, 2685, 2686, 2685, 2688, 2696,
+ 2680, 2678, 2689, 2682, 2678, 2681, 2683, 2687, 2682, 2684,
+ 2686, 2683, 0, 2687, 2684, 2692, 2688, 2690, 2690, 2678,
+ 2695, 2678, 2685, 2686, 2689, 2688, 2693, 2694, 2697, 2689,
- 2690, 2684, 2704, 2687, 2702, 2690, 2688, 2686, 2697, 2689,
- 2691, 2694, 2696, 2698, 2699, 2691, 2700, 2701, 2703, 2696,
- 2695, 2706, 2693, 2695, 2709, 2704, 2697, 2710, 2706, 2704,
- 2701, 2698, 2699, 2713, 2700, 2697, 2702, 2711, 2708, 2696,
- 2698, 2699, 2709, 2700, 2701, 2708, 0, 2712, 2706, 2713,
- 2703, 2709, 2714, 2710, 2710, 2712, 2717, 2715, 0, 2716,
- 2713, 2718, 2722, 2718, 0, 2708, 0, 0, 2718, 2711,
- 2720, 2739, 2748, 2712, 2712, 2715, 2721, 2714, 2717, 2714,
- 2723, 2720, 2712, 2717, 2715, 2716, 2716, 2721, 2718, 2722,
- 2718, 2724, 2723, 2725, 2726, 2727, 2731, 2720, 2739, 2729,
+ 2698, 2696, 2695, 0, 2687, 2700, 2698, 2692, 2699, 2701,
+ 2713, 2702, 2692, 2704, 2690, 2704, 2708, 2695, 2693, 2694,
+ 2699, 2706, 2707, 2693, 2694, 2705, 2709, 2698, 2710, 2707,
+ 2697, 2701, 2711, 2702, 2708, 2699, 2701, 2700, 2702, 2705,
+ 2704, 2712, 2713, 2708, 2709, 2706, 2710, 2714, 2706, 2707,
+ 2711, 2715, 2705, 2709, 2712, 2710, 2717, 2719, 2720, 2711,
+ 2721, 2722, 2723, 2717, 2719, 2724, 0, 0, 2712, 2725,
+ 2723, 2731, 2726, 2728, 2715, 2727, 2720, 2733, 2715, 2714,
+ 2732, 2724, 2731, 2717, 2719, 2720, 2721, 2721, 2723, 2723,
+ 2726, 2732, 2724, 2722, 2725, 2728, 2725, 2723, 2731, 2726,
- 2732, 2730, 0, 2721, 2748, 2734, 2740, 2723, 2731, 2724,
- 0, 2725, 2730, 2726, 2729, 2732, 2735, 2727, 2724, 2737,
- 2725, 2726, 2727, 2731, 2736, 2738, 2729, 2732, 2730, 2734,
- 2741, 2736, 2734, 2740, 2742, 2749, 2743, 2737, 2735, 2745,
- 2738, 2742, 2747, 2735, 2746, 2751, 2737, 2750, 0, 2753,
- 0, 2736, 2738, 2755, 0, 2754, 2759, 2741, 2758, 0,
- 2752, 2742, 2743, 2743, 2747, 2750, 2745, 2749, 2746, 2747,
- 2754, 2746, 2751, 2752, 2750, 2753, 2753, 2756, 2757, 2755,
- 2755, 2760, 2754, 2763, 2758, 2758, 2757, 2752, 2759, 2761,
- 2756, 2764, 2765, 0, 2760, 2766, 2768, 0, 2767, 2772,
+ 2728, 2727, 2727, 2729, 2733, 2729, 2734, 2732, 2735, 2736,
+ 2729, 2741, 2737, 2740, 0, 2738, 2747, 2742, 2734, 2743,
+ 0, 2745, 2741, 2747, 2750, 2746, 2735, 2736, 2740, 2742,
+ 2729, 2737, 2729, 2734, 2743, 2735, 2736, 2738, 2741, 2737,
+ 2740, 2748, 2738, 2747, 2742, 2745, 2743, 2746, 2745, 2749,
+ 2751, 2750, 2746, 2752, 2753, 2759, 2754, 2756, 0, 2748,
+ 2760, 2753, 2757, 2758, 2749, 0, 2762, 0, 2748, 2764,
+ 2761, 0, 2766, 3765, 3765, 2770, 2749, 2751, 2763, 2765,
+ 2752, 2753, 2754, 2754, 2756, 2758, 2757, 2759, 2761, 2757,
+ 2758, 2763, 2760, 2762, 2765, 2764, 2764, 2761, 2766, 2766,
- 2770, 2771, 0, 2769, 2756, 2757, 2763, 2770, 2760, 2775,
- 2763, 2761, 0, 0, 2768, 2764, 2761, 2766, 2764, 2765,
- 2767, 2769, 2766, 2768, 2771, 2767, 2772, 2770, 2771, 2773,
- 2769, 2775, 2776, 2777, 2778, 2779, 2775, 2781, 2783, 2776,
- 2777, 2778, 2780, 2773, 2781, 2782, 0, 2784, 2779, 2785,
- 2789, 2786, 0, 2787, 2788, 2798, 2773, 2793, 2789, 2776,
- 2777, 2778, 2779, 2788, 2781, 2780, 2791, 2782, 2784, 2780,
- 2783, 2795, 2782, 2786, 2784, 2785, 2785, 2789, 2786, 2787,
- 2787, 2788, 2790, 2792, 2793, 2796, 2795, 2798, 2791, 2792,
- 2790, 2797, 2799, 2791, 2801, 2800, 2796, 0, 2795, 2803,
+ 2767, 2768, 3765, 2769, 2771, 2763, 2765, 2770, 2776, 2768,
+ 2772, 2774, 2775, 2767, 0, 2779, 0, 2771, 2777, 2778,
+ 2783, 0, 0, 0, 0, 2780, 2782, 2767, 2768, 2769,
+ 2769, 2771, 2772, 2779, 2774, 2776, 2775, 2772, 2774, 2775,
+ 2777, 2778, 2779, 2780, 2781, 2777, 2778, 2783, 2784, 2782,
+ 2786, 2781, 2780, 2782, 2787, 2790, 2788, 2789, 2793, 2792,
+ 0, 2787, 2784, 2788, 2789, 2791, 2792, 2794, 2790, 2795,
+ 2799, 2781, 2786, 0, 2796, 2784, 2797, 2786, 2798, 2799,
+ 2793, 2787, 2790, 2788, 2789, 2793, 2792, 2800, 2791, 2802,
+ 2795, 2804, 2791, 2806, 2801, 2800, 2795, 2799, 2797, 2794,
- 0, 2807, 2805, 2806, 0, 0, 2809, 2808, 0, 2790,
- 2792, 2811, 2796, 2797, 2800, 2805, 2806, 2803, 2797, 2801,
- 2813, 2801, 2800, 2815, 2799, 2812, 2803, 2807, 2807, 2805,
- 2806, 2808, 2809, 2809, 2808, 2811, 2818, 2812, 2811, 2814,
- 2814, 2819, 2820, 2821, 2813, 2823, 0, 2813, 2825, 2815,
- 2815, 2828, 2812, 2822, 2833, 2830, 2824, 2820, 2838, 2818,
- 2837, 2837, 0, 2818, 2830, 2833, 2814, 2823, 2825, 2820,
- 2821, 2822, 2823, 2819, 2824, 2825, 2832, 2836, 2828, 2839,
- 2822, 2833, 2830, 2824, 2838, 2838, 2840, 2837, 2839, 2832,
- 2842, 2844, 2840, 2843, 2846, 2848, 2850, 2851, 2849, 2836,
+ 2796, 2796, 2801, 2797, 2798, 2798, 2803, 2808, 2806, 2809,
+ 2810, 2802, 2803, 2807, 2800, 0, 2802, 2811, 2804, 2814,
+ 2806, 2801, 2812, 2823, 2807, 2816, 2817, 0, 2818, 2808,
+ 0, 2820, 2819, 2803, 2808, 2823, 2811, 2814, 2816, 2817,
+ 2807, 2809, 2810, 2822, 2811, 2824, 2814, 2812, 2826, 2812,
+ 2823, 2830, 2816, 2817, 2818, 2818, 2819, 2820, 2820, 2819,
+ 2825, 2825, 2829, 2831, 2832, 2839, 2833, 2822, 0, 2824,
+ 2822, 2841, 2824, 2834, 2826, 2826, 2835, 2836, 2831, 2847,
+ 2841, 2848, 2848, 2830, 2833, 2829, 2843, 2825, 2849, 2829,
+ 2831, 2832, 2839, 2833, 2835, 2834, 2844, 2836, 2841, 2843,
- 0, 2857, 2852, 2832, 2836, 2849, 2839, 2852, 2851, 2853,
- 2856, 2855, 2842, 2840, 2864, 2843, 2857, 2842, 2844, 2855,
- 2843, 2846, 2850, 2850, 2851, 2849, 2858, 2848, 2857, 2852,
- 2859, 2853, 2861, 2862, 2856, 2863, 2853, 2856, 2855, 2865,
- 2866, 2858, 2868, 2861, 2871, 2869, 2864, 2870, 2865, 2873,
- 2872, 2862, 2866, 2858, 0, 2876, 2863, 2859, 2874, 2861,
- 2862, 2873, 2863, 2869, 2875, 2870, 2865, 2866, 2871, 2868,
- 2874, 2871, 2869, 2876, 2870, 2872, 2873, 2872, 2881, 2877,
- 2878, 2878, 2876, 2879, 2882, 2874, 2875, 2877, 2878, 2884,
- 2883, 2875, 2879, 2887, 2888, 2885, 2889, 0, 2884, 0,
+ 2834, 2847, 2850, 2835, 2836, 2854, 2847, 2844, 2848, 2855,
+ 2851, 2850, 2856, 2843, 2849, 2849, 2851, 2853, 2853, 2854,
+ 2857, 2859, 2861, 2844, 2863, 2869, 2862, 0, 0, 2850,
+ 2864, 2855, 2854, 2862, 2856, 2865, 2855, 2851, 2866, 2856,
+ 2865, 2864, 2872, 2870, 2853, 2874, 2871, 2857, 2859, 2869,
+ 2863, 2863, 2869, 2862, 2861, 2868, 2874, 2864, 2870, 2875,
+ 2866, 2871, 2865, 2868, 2876, 2866, 2877, 2878, 2879, 2872,
+ 2870, 0, 2874, 2871, 2881, 2882, 2878, 2875, 2883, 2884,
+ 2879, 0, 2868, 2885, 0, 2876, 2875, 2886, 2887, 2888,
+ 0, 2876, 2895, 2882, 2878, 2879, 2883, 2894, 2877, 2886,
- 2886, 0, 2896, 2892, 2881, 2881, 2877, 2878, 2878, 2889,
- 2879, 2882, 2883, 2885, 2886, 2887, 2884, 2883, 2890, 2888,
- 2887, 2888, 2885, 2889, 2891, 2892, 2893, 2886, 2894, 2896,
- 2892, 2890, 2895, 2893, 2897, 2894, 2898, 2899, 2900, 2891,
- 0, 2901, 2902, 2903, 2904, 2890, 2897, 2905, 0, 2906,
- 0, 2891, 2903, 2893, 2895, 2894, 2901, 2907, 2914, 2895,
- 0, 2897, 2908, 2898, 2899, 2900, 2904, 2902, 2901, 2902,
- 2903, 2904, 2909, 2905, 2905, 2906, 2906, 2908, 2910, 2909,
- 2911, 2913, 2912, 2907, 2907, 2914, 2915, 2911, 2912, 2908,
- 2916, 2917, 2913, 2910, 2915, 2918, 2919, 2920, 0, 2909,
+ 2887, 2881, 2882, 2884, 2889, 2883, 2884, 2896, 2885, 2890,
+ 2885, 2888, 2891, 2891, 2886, 2887, 2888, 2890, 2892, 2895,
+ 2891, 2897, 2889, 2894, 2894, 2898, 2901, 2892, 2899, 2896,
+ 2897, 2889, 2900, 2902, 2896, 2905, 2890, 2903, 0, 2891,
+ 2891, 2904, 2899, 2898, 2908, 2892, 2902, 2909, 2897, 2910,
+ 2903, 2901, 2898, 2901, 2900, 2899, 2904, 2905, 2906, 2900,
+ 2902, 2910, 2905, 2907, 2903, 2906, 2908, 2911, 2904, 2912,
+ 2907, 2908, 2913, 2914, 2909, 0, 2910, 2915, 2916, 2917,
+ 0, 2918, 0, 2919, 2922, 2906, 2920, 2916, 2914, 2925,
+ 2907, 2922, 2927, 2929, 2911, 2925, 2912, 2930, 2932, 2913,
- 2921, 2922, 2927, 2923, 2924, 2910, 0, 2911, 2913, 2912,
- 2923, 2918, 2920, 2915, 2925, 2928, 2922, 2916, 2917, 2929,
- 2921, 2925, 2918, 2919, 2920, 2926, 2924, 2921, 2922, 2927,
- 2923, 2924, 2926, 2928, 2930, 2930, 2931, 2932, 2935, 2936,
- 2934, 2925, 2928, 2931, 2933, 2937, 2929, 2933, 2938, 0,
- 2937, 2932, 2926, 2934, 2936, 2939, 2935, 2940, 2941, 0,
- 2945, 2930, 2942, 2931, 2932, 2935, 2936, 2934, 2943, 2945,
- 2939, 2933, 2937, 2938, 2942, 2938, 2941, 2948, 2949, 2951,
- 2943, 2946, 2939, 2940, 2940, 2941, 2946, 2945, 2947, 2942,
- 2950, 2953, 2954, 2947, 2950, 2943, 2952, 2955, 2956, 2948,
+ 2914, 2917, 2915, 2921, 2915, 2916, 2917, 2918, 2918, 2919,
+ 2919, 2922, 2920, 2920, 2923, 2924, 2925, 2926, 2921, 2927,
+ 2929, 2931, 2924, 2928, 2930, 2932, 2934, 2940, 2926, 2923,
+ 2921, 2928, 2933, 2936, 2935, 2937, 2938, 2931, 2939, 2942,
+ 2936, 2923, 2924, 2938, 2926, 2939, 2934, 2933, 2931, 2935,
+ 2928, 2941, 2951, 2934, 2940, 2943, 2943, 2937, 2945, 2933,
+ 2936, 2935, 2937, 2938, 2944, 2939, 2942, 2946, 2947, 2941,
+ 2946, 2944, 2945, 2949, 2948, 2950, 0, 2951, 2941, 2951,
+ 2950, 2947, 2943, 2952, 2955, 2945, 2953, 2954, 2949, 2962,
+ 2958, 2944, 2948, 0, 2946, 2947, 2955, 2956, 2952, 2958,
- 2958, 2957, 2962, 2951, 2948, 2949, 2951, 2963, 2946, 2952,
- 2965, 0, 2966, 2953, 2954, 2947, 2957, 2950, 2953, 2954,
- 2962, 2966, 2967, 2952, 2955, 2956, 2958, 2958, 2957, 2962,
- 2969, 0, 2968, 2963, 2963, 2972, 2965, 2965, 2967, 2966,
- 2968, 2971, 2969, 2976, 2972, 2973, 2974, 2975, 2971, 2967,
- 2973, 2977, 2978, 2974, 2975, 2980, 2979, 2969, 2977, 2968,
- 2981, 2976, 2972, 2979, 2980, 2982, 2984, 2985, 2971, 2981,
- 2976, 2986, 2973, 2974, 2975, 2987, 2989, 2978, 2977, 2978,
- 2987, 2988, 2980, 2979, 2986, 2992, 2991, 2981, 2993, 2984,
- 2996, 2982, 2982, 2984, 2985, 2997, 2994, 2993, 2986, 2988,
+ 2949, 2948, 2950, 2959, 2961, 2954, 2966, 0, 2959, 2956,
+ 2952, 2955, 2953, 2953, 2954, 2960, 2962, 2958, 2963, 2964,
+ 2960, 2965, 2963, 2968, 2956, 2967, 2961, 2969, 2966, 2970,
+ 2959, 2961, 2971, 2966, 2965, 2975, 0, 2976, 0, 2978,
+ 2979, 2980, 2960, 2964, 2970, 2963, 2964, 2967, 2965, 2979,
+ 2968, 0, 2967, 2975, 2969, 0, 2970, 2980, 2971, 2971,
+ 2982, 2981, 2975, 2976, 2976, 2978, 2978, 2979, 2980, 2981,
+ 2984, 2985, 2982, 2986, 2987, 2988, 2989, 2984, 2986, 2990,
+ 2985, 2987, 2988, 2991, 2992, 2998, 2990, 2982, 2981, 2995,
+ 2993, 2992, 0, 3002, 2989, 2994, 2997, 2984, 2985, 2993,
- 2995, 3002, 2987, 2989, 2991, 2994, 3001, 2997, 2988, 2995,
- 2996, 2998, 2992, 2991, 3001, 2993, 2999, 2996, 3000, 3003,
- 2998, 3004, 2997, 2994, 3002, 2999, 3005, 2995, 3002, 3000,
- 3006, 3008, 3007, 3001, 3009, 3011, 3012, 3013, 2998, 3007,
- 3008, 3004, 3003, 2999, 3019, 3000, 3003, 3014, 3004, 3020,
- 0, 3015, 3016, 3005, 3018, 3009, 3014, 3006, 3008, 3007,
- 3015, 3009, 3011, 3012, 3016, 3017, 3019, 3018, 3021, 3013,
- 3022, 3019, 3024, 3017, 3014, 3021, 3020, 3022, 3015, 3016,
- 3023, 3018, 3025, 3026, 3027, 3029, 3031, 3023, 3024, 3028,
- 3026, 0, 3017, 3030, 3033, 3021, 3034, 3022, 3025, 3024,
+ 2986, 2987, 2988, 2989, 2994, 2999, 2990, 3001, 2991, 3000,
+ 2991, 2992, 2998, 3004, 3000, 2995, 2995, 2993, 2999, 2997,
+ 3002, 3005, 2994, 2997, 3006, 3001, 3007, 3009, 3008, 3010,
+ 3011, 3004, 2999, 3006, 3001, 3007, 3000, 3008, 3013, 3011,
+ 3004, 3010, 3014, 3012, 3015, 3016, 3017, 3009, 3005, 3013,
+ 3014, 3006, 3012, 3007, 3009, 3008, 3010, 3011, 3018, 3019,
+ 3024, 3022, 3025, 3026, 3029, 3013, 3017, 3015, 3016, 3014,
+ 3012, 3015, 3016, 3017, 3020, 3021, 3029, 0, 3032, 3033,
+ 3031, 3020, 3022, 3027, 3021, 3018, 3019, 3024, 3022, 3025,
+ 3028, 3029, 3027, 3031, 3042, 3026, 3030, 3037, 3038, 3028,
- 3035, 3036, 3033, 0, 3038, 3043, 3027, 3023, 3035, 3025,
- 3026, 3027, 3029, 3031, 3028, 3040, 3028, 3039, 3030, 3041,
- 3030, 3033, 3038, 3034, 0, 3039, 3041, 3035, 3036, 3042,
- 3040, 3038, 3043, 3044, 3046, 3045, 3050, 3047, 3051, 3053,
- 3044, 3046, 3040, 3050, 3039, 3047, 3041, 3051, 3052, 3055,
- 3056, 3042, 3057, 3063, 3065, 3054, 3042, 3045, 3055, 3058,
- 3044, 3046, 3045, 3050, 3047, 3051, 3053, 3054, 3057, 3059,
- 3064, 3058, 3052, 3061, 3063, 3052, 3055, 3056, 3062, 3057,
- 3063, 3065, 3054, 3070, 3066, 3061, 3058, 3068, 3069, 3071,
- 3062, 0, 3059, 3064, 3075, 3070, 3059, 3064, 3066, 3073,
+ 3032, 3020, 3021, 3041, 3030, 3032, 3033, 3031, 3034, 3035,
+ 3027, 3036, 3039, 3037, 3038, 3034, 3035, 3028, 3036, 3039,
+ 3040, 3042, 3044, 3030, 3037, 3038, 3043, 3047, 3041, 3046,
+ 3041, 3049, 3048, 3052, 3051, 3034, 3035, 3046, 3036, 3039,
+ 3048, 3052, 3040, 3054, 3055, 3056, 3058, 3040, 3053, 3044,
+ 3054, 3043, 3051, 3043, 3047, 3057, 3046, 3059, 3049, 3048,
+ 3052, 3051, 3057, 3053, 3060, 3067, 3055, 3061, 3058, 3062,
+ 3054, 3055, 3056, 3058, 3061, 3053, 3065, 3062, 3066, 3059,
+ 3068, 3069, 3057, 3065, 3059, 3071, 3060, 3066, 3070, 3067,
+ 3072, 3060, 3067, 3069, 3061, 3074, 3062, 3070, 3073, 3076,
- 3061, 3068, 3069, 3072, 3072, 3062, 3076, 3080, 3075, 3074,
- 3070, 3066, 3077, 3076, 3068, 3069, 3071, 3072, 3074, 3073,
- 3077, 3075, 3078, 3082, 3083, 3079, 3073, 3085, 3086, 3087,
- 3072, 3072, 3079, 3076, 3080, 3084, 3074, 3087, 3082, 3077,
- 3088, 3078, 3083, 3089, 3092, 3090, 3091, 3094, 0, 3078,
- 3082, 3083, 3079, 3085, 3085, 3086, 3087, 3091, 3084, 3092,
- 3096, 3093, 3084, 3090, 3100, 3089, 3096, 3088, 3093, 3103,
- 3089, 3092, 3090, 3091, 3094, 3101, 3102, 3107, 3104, 3110,
- 3105, 3102, 3108, 3106, 0, 3114, 3143, 3096, 3093, 0,
- 3100, 3100, 3104, 3101, 3105, 3107, 3103, 3106, 3109, 3112,
+ 3078, 3077, 3080, 3065, 3086, 3066, 3072, 3068, 3069, 3079,
+ 3073, 3076, 3071, 3077, 0, 3070, 3081, 3072, 3074, 3083,
+ 3084, 3078, 3074, 3085, 0, 3073, 3076, 3078, 3077, 3080,
+ 3081, 3086, 3079, 3083, 3084, 3085, 3079, 3087, 3087, 3088,
+ 3089, 3090, 3093, 3081, 3095, 3091, 3083, 3084, 3092, 3089,
+ 3085, 3087, 3091, 3094, 0, 3090, 3092, 3100, 3097, 3088,
+ 3094, 3093, 3101, 3098, 3087, 3087, 3088, 3089, 3090, 3093,
+ 3099, 3095, 3091, 3097, 3102, 3092, 3103, 3104, 3105, 3107,
+ 3094, 3098, 3102, 3100, 3100, 3097, 3109, 3106, 3108, 3101,
+ 3098, 3115, 3116, 3099, 3107, 3108, 3105, 3099, 3106, 3104,
- 3108, 3111, 3101, 3102, 3107, 3104, 3110, 3105, 3111, 3108,
- 3106, 3112, 3114, 3117, 3119, 3121, 3109, 3120, 3143, 3122,
- 3125, 3123, 3127, 0, 3132, 3109, 3112, 3124, 3111, 3123,
- 3120, 3129, 3133, 3130, 3127, 3117, 3119, 3121, 3122, 3125,
- 3117, 3119, 3121, 3134, 3120, 3124, 3122, 3125, 3123, 3127,
- 3131, 3132, 3135, 3129, 3124, 3130, 3136, 3138, 3129, 3133,
- 3130, 3137, 3131, 3140, 3135, 3134, 3139, 3141, 0, 3137,
- 3134, 3142, 0, 3144, 3145, 0, 3141, 3131, 3136, 3135,
- 3142, 3148, 3150, 3136, 3138, 3140, 3139, 3149, 3137, 3146,
- 3140, 3151, 3152, 3139, 3141, 3144, 3145, 3156, 3142, 3149,
+ 3118, 3102, 3111, 3103, 3104, 3105, 3107, 3117, 3111, 3119,
+ 3116, 3120, 3117, 3109, 3106, 3108, 3121, 3115, 3115, 3116,
+ 3125, 3122, 3123, 3119, 3124, 3120, 3126, 3118, 3129, 3111,
+ 3121, 0, 3127, 3126, 3117, 3132, 3119, 3135, 3120, 3122,
+ 3123, 3134, 3124, 3121, 3127, 3136, 3137, 3125, 3122, 3123,
+ 3135, 3124, 3138, 3126, 3142, 3129, 3139, 3132, 3140, 3127,
+ 3138, 3147, 3132, 3134, 3135, 3137, 3142, 3136, 3134, 3144,
+ 3145, 3148, 3136, 3137, 3139, 3146, 3153, 3140, 3149, 3138,
+ 3156, 3142, 3150, 3139, 3151, 3140, 3155, 3146, 3147, 3156,
+ 3154, 3144, 3145, 3152, 3150, 3157, 3144, 3145, 3148, 3158,
- 3144, 3145, 3146, 3155, 3150, 3158, 3161, 3148, 3148, 3150,
- 3157, 3156, 3159, 3162, 3149, 3160, 3146, 3164, 3151, 3152,
- 3160, 3163, 0, 3157, 3156, 3155, 0, 3165, 3161, 3166,
- 3155, 3167, 3158, 3161, 3163, 3162, 3159, 3157, 3170, 3159,
- 3162, 3168, 3172, 3169, 3173, 3174, 3171, 3160, 3163, 3164,
- 3165, 3166, 3171, 3167, 3165, 3169, 3166, 3170, 3167, 3168,
- 3175, 3176, 3178, 3179, 3182, 3170, 0, 3174, 3168, 3180,
- 3169, 3194, 3174, 3171, 3172, 3175, 3173, 3184, 3185, 3182,
- 3186, 3188, 3178, 3187, 3195, 3179, 3193, 3175, 3176, 3178,
- 3179, 3182, 3187, 3180, 3189, 3188, 3180, 3190, 3192, 3184,
+ 3149, 3152, 3146, 3153, 3157, 3149, 3151, 3156, 3155, 3150,
+ 3154, 3151, 3159, 3155, 3160, 3161, 3165, 3154, 3163, 3166,
+ 3152, 3164, 3157, 3167, 3172, 3170, 3171, 3173, 3161, 3179,
+ 3175, 3158, 3174, 3164, 3159, 3175, 3160, 3172, 3165, 3159,
+ 3171, 3160, 3161, 3165, 3163, 3163, 3166, 3170, 3164, 3176,
+ 3167, 3172, 3170, 3171, 3173, 3177, 3174, 3178, 3180, 3174,
+ 0, 3179, 3175, 3187, 3181, 3182, 3184, 3186, 3188, 3185,
+ 3178, 3176, 3183, 3186, 3190, 3189, 3176, 3177, 3184, 3191,
+ 3195, 3180, 3177, 3193, 3178, 3180, 3181, 3182, 3185, 3190,
+ 3183, 3181, 3182, 3184, 3186, 3187, 3185, 3189, 3194, 3183,
- 3185, 3191, 3186, 3194, 3184, 3185, 3195, 3186, 3188, 3193,
- 3187, 3195, 3189, 3193, 3198, 3190, 3192, 3199, 3200, 3207,
- 3211, 3189, 0, 3198, 3190, 3192, 3203, 3191, 3191, 3204,
- 3205, 3208, 3206, 0, 3203, 3209, 3204, 3205, 3211, 3200,
- 3206, 3198, 3212, 3209, 3213, 3200, 3207, 3211, 3215, 3199,
- 3217, 3208, 3214, 3203, 3222, 3216, 3204, 3205, 3208, 3206,
- 3212, 3222, 3209, 3224, 3214, 3218, 3215, 3216, 3220, 3212,
- 3213, 3213, 3227, 3218, 3226, 3215, 3228, 3217, 3228, 3214,
- 3220, 3222, 3216, 3229, 3230, 3232, 3235, 3224, 3234, 0,
- 3224, 3233, 3218, 3232, 3237, 3220, 3237, 3226, 3236, 3227,
+ 3188, 3190, 3189, 3193, 3195, 3199, 3191, 3195, 3197, 3200,
+ 3193, 3201, 3202, 0, 3203, 0, 3204, 0, 3206, 3205,
+ 3194, 3202, 3207, 3197, 3208, 3194, 3209, 3199, 3203, 3214,
+ 3210, 3200, 3199, 3201, 3204, 3197, 3200, 3205, 3201, 3202,
+ 3207, 3203, 3215, 3204, 3206, 3206, 3205, 3208, 3218, 3207,
+ 3213, 3208, 3210, 3219, 3222, 3220, 3218, 3210, 3209, 3213,
+ 3219, 3214, 3220, 3215, 3221, 3223, 3224, 3229, 3226, 3215,
+ 3227, 3230, 3221, 3228, 3224, 3218, 3232, 3213, 3231, 3229,
+ 3219, 3222, 3220, 3239, 3242, 3223, 3226, 3244, 3227, 3230,
+ 3231, 3221, 3223, 3224, 3229, 3226, 3233, 3227, 3230, 3228,
- 3233, 3226, 3238, 3228, 3240, 3241, 3243, 3245, 3248, 3244,
- 0, 0, 3232, 3235, 3246, 3229, 3230, 3236, 3233, 3241,
- 3234, 3237, 3240, 3246, 3238, 3236, 3247, 3252, 3249, 3238,
- 3245, 3240, 3241, 3244, 3245, 3248, 3244, 3251, 3243, 3247,
- 3249, 3246, 3254, 3253, 3256, 3259, 3257, 0, 3258, 3252,
- 3259, 3254, 3260, 3247, 3252, 3249, 3261, 3262, 3256, 3257,
- 3263, 3262, 3264, 3251, 3251, 3253, 3258, 3266, 3267, 3254,
- 3253, 3256, 3259, 3257, 3260, 3258, 3268, 3271, 3269, 3260,
- 3274, 3273, 3275, 3261, 3262, 3276, 3277, 3263, 3273, 3264,
- 3276, 3267, 3279, 3280, 3266, 3267, 3269, 3275, 3268, 3279,
+ 3228, 3235, 3237, 3232, 3233, 3231, 3245, 3239, 3241, 3237,
+ 3239, 3242, 3243, 3235, 3243, 3249, 3247, 3248, 3250, 3244,
+ 3251, 3252, 3253, 3233, 3247, 0, 3248, 3260, 3235, 3237,
+ 3254, 3241, 3254, 3255, 3261, 3241, 3257, 3258, 3245, 3243,
+ 3264, 3253, 3249, 3247, 3248, 3250, 3262, 3263, 3252, 3253,
+ 3265, 3258, 3251, 3264, 3257, 3255, 3263, 3254, 3261, 3260,
+ 3255, 3261, 3268, 3257, 3258, 3269, 3266, 3264, 3270, 3262,
+ 3271, 3273, 3278, 3262, 3263, 3276, 0, 3265, 3266, 3271,
+ 3276, 3274, 3275, 3277, 3280, 3273, 3281, 3269, 3268, 3268,
+ 3270, 3283, 3269, 3266, 3274, 3270, 3284, 3271, 3273, 3278,
- 3280, 3277, 3274, 3268, 3271, 3269, 3282, 3274, 3273, 3275,
- 3284, 3281, 3285, 3277, 3286, 3288, 3287, 3276, 3281, 3279,
- 3280, 3289, 3291, 3294, 3295, 3292, 0, 3296, 3297, 3288,
- 3294, 3299, 3282, 3282, 3292, 3289, 3303, 3284, 3281, 3285,
- 3287, 3286, 3288, 3287, 3298, 3300, 3304, 3302, 3289, 3291,
- 3294, 3295, 3292, 3296, 3296, 3297, 3298, 3301, 3299, 3300,
- 3302, 3310, 3305, 3309, 3308, 0, 3301, 3317, 3303, 3308,
- 3311, 3298, 3300, 3304, 3302, 3313, 3315, 3314, 3318, 3316,
- 3313, 3314, 3319, 3315, 3301, 3305, 3316, 3309, 3317, 3305,
- 3309, 3320, 3311, 3310, 3317, 3322, 3308, 3311, 3321, 3323,
+ 3275, 3288, 3276, 3279, 3285, 3277, 3286, 3279, 3274, 3275,
+ 3277, 3280, 3291, 3281, 3290, 3293, 3301, 3292, 3283, 3284,
+ 3293, 3290, 3294, 3284, 3286, 3299, 3285, 3302, 3288, 3296,
+ 3279, 3285, 3292, 3286, 3291, 3297, 3296, 3294, 3298, 3291,
+ 3303, 3290, 3297, 3301, 3292, 3298, 3304, 3293, 3308, 3294,
+ 3305, 3299, 3299, 3311, 3302, 3306, 3296, 3309, 3312, 3314,
+ 3311, 3313, 3297, 3316, 3305, 3298, 3309, 3303, 3320, 3306,
+ 3304, 3315, 3318, 3304, 3321, 3308, 3319, 3305, 3317, 3322,
+ 3311, 3318, 3306, 3315, 3309, 3312, 3314, 3313, 3313, 3319,
+ 3316, 3325, 3317, 3326, 3327, 3334, 3325, 3328, 3315, 3318,
- 3321, 3326, 3327, 3315, 3314, 3339, 3316, 3313, 3330, 3331,
- 3318, 3328, 3337, 3333, 3319, 3333, 3335, 3334, 3322, 0,
- 3336, 3336, 3322, 3320, 3327, 3321, 3323, 3330, 3326, 3327,
- 3336, 3328, 3339, 3331, 3337, 3330, 3331, 3338, 3328, 3337,
- 3333, 3334, 3335, 3335, 3334, 3340, 3338, 3336, 3336, 3341,
- 3342, 3344, 3340, 3343, 3345, 3346, 3349, 3352, 0, 3344,
- 3347, 3349, 3341, 3346, 3338, 3350, 3343, 3345, 3353, 0,
- 3350, 3359, 3340, 3354, 0, 3344, 3341, 3342, 3344, 3347,
- 3343, 3345, 3346, 3351, 3352, 3355, 3344, 3347, 3349, 3356,
- 3358, 3351, 3357, 3359, 3353, 3353, 3360, 3350, 3359, 3354,
+ 3320, 3321, 3322, 3319, 3330, 3317, 3322, 3331, 3332, 3330,
+ 3335, 3331, 3336, 3337, 3333, 3332, 3334, 3326, 3452, 3328,
+ 3326, 3333, 3334, 3325, 3328, 3338, 3327, 3338, 3339, 3340,
+ 3343, 3344, 0, 0, 3331, 3332, 3330, 3348, 3350, 3345,
+ 3350, 3333, 3335, 3347, 3336, 3337, 3352, 3351, 3356, 0,
+ 3452, 3339, 3338, 3344, 3354, 3339, 3340, 3343, 3344, 3345,
+ 3355, 3348, 3347, 3359, 3348, 3350, 3345, 3353, 3353, 3355,
+ 3347, 3351, 3352, 3352, 3351, 3356, 3354, 3353, 3357, 3358,
+ 3360, 3354, 3364, 3363, 3362, 3357, 3369, 3355, 3361, 0,
+ 3359, 3363, 3358, 3360, 3353, 3353, 3361, 3362, 3366, 3367,
- 3354, 3358, 3362, 3360, 3361, 3361, 3363, 3368, 3364, 0,
- 3351, 3355, 3355, 3373, 3365, 3356, 3356, 3358, 3357, 3357,
- 3362, 3364, 3366, 3360, 3367, 3368, 3363, 3374, 3375, 3362,
- 3366, 3361, 3369, 3363, 3368, 3364, 3365, 3370, 3371, 3369,
- 3373, 3365, 3377, 3382, 3370, 3371, 3367, 3378, 3376, 3366,
- 3379, 3367, 3375, 3380, 3374, 3375, 3383, 3384, 0, 3369,
- 3376, 3385, 3380, 3386, 3370, 3371, 3388, 3385, 3378, 3377,
- 3382, 3389, 3379, 3390, 3378, 3376, 3383, 3379, 3391, 3392,
- 3380, 3393, 3396, 3383, 3384, 3386, 3395, 3397, 3385, 3389,
- 3386, 3390, 3398, 3388, 3399, 3395, 3400, 3392, 3389, 3393,
+ 3368, 3364, 3370, 3366, 3367, 3357, 3358, 3360, 3368, 3364,
+ 3363, 3362, 3361, 3369, 3371, 3361, 3372, 0, 3373, 0,
+ 3374, 3375, 0, 3361, 3378, 3378, 3381, 3368, 3370, 3370,
+ 3366, 3367, 3375, 3376, 3379, 0, 3382, 3380, 0, 3381,
+ 3371, 3371, 3372, 3372, 3373, 3373, 3374, 3374, 3375, 3377,
+ 3384, 3378, 3379, 3381, 3383, 3376, 3377, 3380, 3382, 3386,
+ 3376, 3379, 3383, 3382, 3380, 3385, 3386, 3387, 3388, 3390,
+ 3391, 3394, 3384, 3393, 3387, 3388, 3377, 3384, 3392, 3397,
+ 3395, 3383, 3396, 3385, 3399, 3393, 3386, 3401, 3397, 3405,
+ 3400, 3403, 3385, 3402, 3387, 3388, 3390, 3391, 3394, 3402,
- 3390, 3401, 3404, 3433, 3400, 3391, 3392, 3404, 3393, 3396,
- 3402, 3403, 3399, 3395, 3397, 3398, 3406, 3401, 3403, 3398,
- 3408, 3399, 3402, 3400, 3407, 3410, 0, 3409, 3401, 3411,
- 3406, 3412, 3408, 3413, 3404, 3433, 0, 3402, 3403, 3409,
- 3414, 3421, 3407, 3406, 0, 3422, 3425, 3408, 3410, 3415,
- 0, 3407, 3410, 3412, 3409, 3411, 3411, 3413, 3412, 3417,
- 3413, 3415, 3414, 3421, 3423, 3426, 3428, 3414, 3421, 3430,
- 3431, 3417, 3422, 3425, 3434, 3428, 3415, 3423, 3426, 3427,
- 3432, 3427, 3438, 3439, 3438, 3440, 3417, 3442, 3443, 3434,
- 0, 3423, 3426, 3428, 3442, 3449, 3430, 3431, 3432, 3450,
+ 3393, 3395, 3392, 3406, 3396, 3392, 3397, 3395, 3407, 3396,
+ 3400, 3399, 3408, 3403, 3401, 3409, 3405, 3400, 3403, 3412,
+ 3402, 3406, 3414, 3415, 3416, 3417, 3407, 3418, 3419, 0,
+ 3406, 3414, 3421, 3409, 3422, 3407, 3419, 3412, 3423, 3408,
+ 3420, 3422, 3409, 3423, 3421, 3418, 3412, 3426, 3417, 3414,
+ 3415, 3416, 3417, 3429, 3418, 3419, 3420, 3425, 3432, 3421,
+ 3427, 3422, 3430, 3428, 3431, 3426, 3434, 3420, 0, 3436,
+ 3423, 3425, 3427, 3433, 3426, 3428, 3429, 3440, 3434, 3441,
+ 3429, 3436, 3432, 3444, 3425, 3432, 3431, 3427, 3430, 3430,
+ 3428, 3431, 3442, 3434, 3445, 3433, 3436, 3449, 3450, 3440,
- 3445, 3434, 3447, 3440, 3451, 3439, 3427, 3432, 3447, 3438,
- 3439, 3454, 3440, 3462, 3442, 3445, 3452, 3449, 3463, 3455,
- 3443, 3450, 3449, 3457, 3459, 3464, 3450, 3445, 3458, 3447,
- 3451, 3451, 3455, 3454, 3452, 3465, 3474, 3459, 3454, 3457,
- 3462, 3460, 3458, 3452, 3460, 3463, 3455, 3466, 3470, 3467,
- 3457, 3459, 3464, 3465, 3466, 3458, 3467, 3468, 3469, 3473,
- 3475, 3476, 3465, 3474, 0, 3468, 3469, 3460, 3460, 3477,
- 3470, 3460, 3478, 3480, 3466, 3470, 3467, 3479, 3483, 3480,
- 3481, 3478, 3475, 3476, 3468, 3469, 3482, 3475, 3476, 3486,
- 0, 3473, 3479, 3489, 3488, 3482, 3477, 3490, 3492, 3478,
+ 3433, 3446, 3447, 3446, 3440, 3442, 3441, 3445, 3451, 3458,
+ 3444, 3447, 3453, 3457, 3459, 3457, 3461, 3462, 3464, 3442,
+ 3468, 3445, 0, 3461, 3449, 3450, 3451, 3453, 3446, 3447,
+ 3469, 3458, 3459, 3464, 3470, 3451, 3458, 3471, 3466, 3453,
+ 3457, 3459, 3468, 3461, 3466, 3464, 3473, 3468, 3477, 3462,
+ 3474, 3476, 3469, 3478, 3481, 3471, 3479, 3469, 3482, 3479,
+ 3470, 3470, 3477, 3474, 3471, 3466, 3478, 3476, 3473, 3483,
+ 3484, 3492, 3485, 3473, 3493, 3477, 0, 3474, 3476, 3485,
+ 3478, 3481, 3479, 3479, 3486, 3482, 3479, 3487, 3484, 0,
+ 3488, 3486, 3496, 3489, 3494, 3487, 3483, 3484, 3488, 3485,
- 3480, 3485, 3481, 3485, 3479, 3491, 3492, 3481, 3498, 0,
- 3483, 3493, 0, 3482, 3494, 3489, 3486, 3488, 3504, 3490,
- 3489, 3488, 3496, 3493, 3490, 3492, 3494, 3503, 3485, 3496,
- 3500, 3491, 3491, 3501, 3502, 3498, 3504, 3507, 3493, 3509,
- 3505, 3494, 0, 3508, 3500, 3504, 3509, 3501, 3502, 3496,
- 3503, 3505, 3511, 3510, 3503, 3506, 3507, 3500, 3512, 3511,
- 3501, 3502, 3514, 3506, 3507, 3508, 3509, 3505, 3510, 3513,
- 3508, 3514, 3515, 3515, 3516, 3517, 3521, 3522, 3518, 3511,
- 3510, 3521, 3506, 3525, 3512, 3512, 3518, 3513, 3524, 3514,
- 3522, 3526, 3528, 3531, 3530, 3536, 3513, 3541, 3528, 3515,
+ 3495, 3493, 3500, 3492, 3497, 3502, 3499, 3505, 3498, 3501,
+ 0, 3486, 3499, 3497, 3487, 3489, 3494, 3488, 3501, 3496,
+ 3489, 3494, 3495, 3498, 3500, 3507, 3504, 3495, 3504, 3500,
+ 3510, 3497, 3508, 3499, 3505, 3498, 3501, 3502, 3509, 3511,
+ 3517, 0, 3515, 3512, 0, 3522, 3513, 3511, 3507, 3515,
+ 3519, 0, 3507, 3504, 3508, 3512, 3510, 3510, 3513, 3508,
+ 3509, 3520, 3521, 3523, 3519, 3509, 3511, 3517, 3522, 3515,
+ 3512, 3524, 3522, 3513, 3526, 3520, 3521, 3519, 3525, 3529,
+ 3527, 3523, 3524, 3531, 3528, 3530, 3525, 3533, 3520, 3521,
+ 3523, 3528, 3530, 3526, 3529, 3532, 3533, 3535, 3524, 3534,
- 3533, 3516, 3517, 3534, 3522, 3518, 3530, 3538, 3521, 3524,
- 3525, 3533, 3537, 3543, 3534, 3524, 3544, 3536, 3526, 3528,
- 3531, 3530, 3536, 3537, 3541, 3542, 3546, 3533, 3547, 3538,
- 3534, 3543, 3542, 3545, 3538, 3549, 3547, 3545, 3550, 3537,
- 3543, 3551, 3553, 3552, 3554, 3562, 3556, 3551, 3544, 3552,
- 3553, 3550, 3542, 3546, 3555, 3547, 3560, 3554, 3557, 3565,
- 3545, 3549, 3549, 3570, 3570, 3550, 3559, 3557, 3551, 3553,
- 3552, 3554, 3556, 3556, 3558, 3559, 3566, 3562, 3555, 3564,
- 3558, 3555, 3569, 3560, 3571, 3557, 3564, 3569, 3572, 3574,
- 3570, 3565, 3573, 3559, 3575, 3581, 3574, 3583, 3566, 3577,
+ 3534, 3526, 3527, 3536, 3541, 3525, 3529, 3527, 3537, 3531,
+ 3531, 3528, 3530, 3532, 3533, 3540, 3537, 3541, 3543, 3544,
+ 3540, 3545, 3532, 3547, 3535, 3549, 3534, 3550, 3560, 3547,
+ 3536, 3541, 3552, 3553, 3555, 3537, 3557, 3549, 3556, 3543,
+ 3563, 3565, 0, 3552, 3553, 3543, 3544, 3540, 3545, 3556,
+ 3547, 3562, 3549, 3568, 3550, 3560, 3555, 3561, 3557, 3552,
+ 3553, 3555, 3564, 3557, 3561, 3556, 3564, 3566, 3565, 3562,
+ 3569, 3570, 3563, 3572, 3573, 3566, 3571, 3570, 3562, 3568,
+ 3568, 3572, 3571, 3569, 3561, 3574, 3576, 3573, 3575, 3564,
+ 3577, 3579, 3581, 3578, 3566, 3576, 3577, 3569, 3570, 3583,
- 3578, 3558, 3576, 3566, 3573, 3579, 3564, 3578, 3585, 3569,
- 3581, 3571, 3580, 3575, 3584, 3572, 3574, 3577, 3576, 3573,
- 3580, 3575, 3581, 3582, 3583, 3587, 3577, 3578, 3589, 3576,
- 3582, 3586, 3588, 3593, 3597, 3585, 3584, 3579, 3594, 3580,
- 3575, 3584, 3596, 3586, 3595, 3594, 3598, 3601, 3593, 3587,
- 3582, 3595, 3587, 3599, 3589, 3589, 3588, 0, 3586, 3588,
- 3593, 3602, 3604, 3605, 3596, 3594, 3597, 0, 3607, 3596,
- 3602, 3595, 3606, 3598, 3608, 3610, 3607, 3599, 3612, 3601,
- 3599, 3609, 3609, 3613, 3604, 3614, 3615, 3614, 3602, 3604,
- 3605, 3609, 3613, 3612, 3606, 3607, 3616, 3621, 3619, 3606,
+ 3572, 3573, 3578, 3571, 3584, 3585, 3583, 3589, 3589, 3574,
+ 3590, 3588, 3574, 3576, 3575, 3575, 3588, 3577, 3579, 3591,
+ 3578, 3592, 3593, 3594, 3581, 3595, 3583, 3585, 3598, 3593,
+ 3600, 3599, 3585, 3592, 3589, 3596, 3584, 3590, 3588, 3599,
+ 3597, 3595, 3594, 3602, 3601, 3600, 3591, 3597, 3592, 3593,
+ 3594, 3601, 3595, 3596, 3603, 3604, 3605, 3600, 3599, 3612,
+ 3598, 3606, 3596, 3607, 3616, 3608, 3613, 3597, 3605, 3594,
+ 3602, 3601, 3614, 3613, 3612, 3615, 3603, 3617, 3620, 3614,
+ 3621, 3603, 3604, 3605, 3618, 3606, 3612, 3607, 3606, 3621,
+ 3607, 3608, 3608, 3613, 3623, 3624, 3616, 3615, 3625, 3614,
- 3615, 3622, 3610, 3617, 3618, 3612, 3608, 3623, 3609, 3609,
- 3613, 3617, 3614, 3615, 3624, 3618, 3619, 3626, 3627, 3625,
- 3628, 3629, 3630, 3616, 3621, 3619, 3632, 3631, 3622, 3633,
- 3617, 3618, 3625, 3631, 3623, 3635, 3624, 3634, 3634, 3626,
- 3630, 3624, 3639, 3633, 3626, 3627, 3625, 3628, 3629, 3630,
- 3636, 3640, 3642, 3632, 3631, 3643, 3633, 3646, 3649, 3655,
- 3647, 3658, 3640, 3649, 3634, 3646, 3647, 3635, 3650, 3639,
- 3653, 3652, 3636, 3650, 3658, 3651, 3652, 3636, 3640, 3642,
- 3656, 3656, 3643, 3651, 3646, 3649, 3655, 3647, 3658, 3662,
- 3661, 3657, 3665, 3660, 3663, 3650, 3653, 3653, 3652, 3657,
+ 3627, 3626, 3615, 3629, 3617, 0, 3632, 3621, 3618, 3626,
+ 3620, 3618, 3631, 3628, 3628, 3632, 3623, 3633, 3635, 3633,
+ 3625, 3623, 3624, 3628, 3634, 3625, 3636, 3631, 3626, 3638,
+ 3629, 3637, 3627, 3632, 3636, 3640, 3641, 3642, 3634, 3631,
+ 3628, 3628, 3637, 3643, 3633, 3635, 3644, 3638, 3646, 3645,
+ 3647, 3634, 3648, 3636, 3649, 3650, 3638, 3651, 3637, 3644,
+ 3652, 3650, 3640, 3641, 3642, 3643, 3653, 3653, 3654, 3655,
+ 3643, 3645, 3649, 3644, 3652, 3646, 3645, 3647, 3658, 3648,
+ 3661, 3649, 3650, 3659, 3651, 3662, 3666, 3652, 3672, 3665,
+ 3668, 3655, 3666, 3653, 3659, 3668, 3655, 3665, 3669, 3671,
- 3660, 3663, 3651, 3664, 3666, 3667, 3669, 3656, 3661, 3668,
- 3664, 3674, 3667, 3677, 3671, 3670, 3662, 3661, 3657, 3665,
- 3660, 3663, 3670, 3678, 3668, 3673, 3675, 3666, 3682, 3684,
- 3664, 3666, 3667, 3675, 3673, 3677, 3668, 3671, 3669, 3676,
- 3677, 3671, 3670, 3674, 3686, 3678, 3685, 3676, 3681, 3687,
- 3678, 3689, 3673, 3675, 3681, 3682, 3684, 3686, 3690, 3688,
- 3691, 3695, 3693, 0, 0, 3700, 3676, 0, 3685, 3693,
- 3689, 3686, 3696, 3685, 3688, 3681, 3697, 3703, 3689, 3699,
- 3700, 3687, 3691, 3697, 3695, 3690, 3688, 3691, 3695, 3693,
- 3698, 3702, 3700, 3701, 3696, 3705, 3711, 3698, 3703, 3696,
+ 3654, 3670, 3674, 3669, 3671, 3658, 3680, 3661, 3677, 3670,
+ 3659, 3681, 3662, 3666, 3672, 3672, 3665, 3668, 3675, 3675,
+ 3679, 3677, 3676, 3684, 3680, 3669, 3671, 3679, 3670, 3674,
+ 3676, 3685, 3682, 3680, 3683, 3677, 3686, 3687, 3681, 3682,
+ 3688, 3683, 3690, 3686, 3689, 3675, 3692, 3679, 3693, 3676,
+ 3684, 3689, 3687, 3706, 3685, 3692, 3696, 3697, 3685, 3682,
+ 3694, 3683, 3695, 3686, 3687, 3690, 3701, 3694, 3700, 3690,
+ 3695, 3689, 3688, 3692, 3700, 3703, 3704, 3705, 3696, 3697,
+ 3693, 3707, 3708, 3696, 3697, 3706, 3709, 3694, 3710, 3695,
+ 3705, 3714, 3712, 3701, 3715, 3700, 3707, 0, 3704, 3712,
- 3702, 3699, 3706, 3697, 3703, 3707, 3699, 3711, 3701, 3708,
- 3706, 3714, 3707, 3713, 3705, 3710, 3708, 3698, 3702, 3713,
- 3701, 3716, 3705, 3711, 3710, 3712, 3712, 3717, 3718, 3706,
- 3723, 3722, 3707, 3714, 3717, 3712, 3708, 3719, 3714, 3721,
- 3713, 3727, 3710, 3716, 3723, 3728, 3721, 3729, 3716, 3733,
- 3736, 3734, 3712, 3712, 3717, 3722, 3739, 3723, 3722, 3719,
- 3718, 3733, 3737, 3738, 3719, 3744, 3721, 3741, 3727, 3748,
- 3729, 3738, 3728, 3734, 3729, 3754, 3733, 3736, 3734, 3741,
- 3745, 3746, 3746, 3739, 3737, 3747, 3747, 0, 3745, 3737,
- 3738, 3752, 3744, 3750, 3741, 3755, 3748, 3749, 3749, 3761,
+ 3716, 3708, 3703, 3704, 3705, 3717, 3718, 3716, 3707, 3708,
+ 3710, 3719, 3717, 3709, 3714, 3710, 3715, 0, 3714, 3712,
+ 3720, 3715, 3721, 3722, 3724, 3737, 3719, 3716, 3718, 3725,
+ 0, 3721, 3717, 3718, 3726, 3720, 3729, 3725, 3719, 3727,
+ 3733, 3726, 3730, 3724, 3722, 3729, 3727, 3720, 3735, 3721,
+ 3722, 3724, 3732, 3730, 3731, 3731, 3725, 3737, 3732, 3741,
+ 3742, 3726, 3733, 3729, 3731, 3736, 3727, 3733, 3738, 3730,
+ 3735, 3740, 3736, 3746, 3742, 3735, 3747, 3752, 3740, 3732,
+ 0, 3731, 3731, 3741, 3748, 3755, 3741, 3742, 3753, 3752,
+ 3738, 3756, 3736, 3757, 3758, 3738, 3760, 3763, 3740, 3767,
- 3758, 3753, 3754, 3759, 3755, 3762, 3763, 3745, 3756, 3765,
- 3746, 0, 3766, 3752, 3747, 3764, 3750, 3767, 3752, 3753,
- 3750, 3756, 3755, 3764, 3770, 3768, 3749, 3758, 3753, 3771,
- 3759, 3761, 3768, 3769, 3764, 3756, 3765, 3762, 3763, 3766,
- 3769, 3773, 3764, 3767, 3767, 3772, 3770, 3776, 3773, 3776,
- 3764, 3770, 3768, 3777, 3772, 3778, 3771, 3779, 3780, 0,
- 3769, 3783, 3782, 3785, 3788, 3784, 3789, 3796, 3773, 3787,
- 3780, 3782, 3772, 3777, 3776, 3779, 3786, 3790, 3778, 3793,
- 3777, 0, 3778, 0, 3779, 3780, 3783, 3784, 3783, 3782,
- 3785, 3788, 3784, 3789, 3786, 3787, 3787, 3791, 3792, 3796,
+ 3746, 3757, 3769, 3747, 3752, 3773, 3764, 3748, 3760, 3771,
+ 3753, 3748, 3755, 3756, 3764, 3753, 3766, 3766, 3756, 3772,
+ 3757, 3758, 3775, 3760, 3763, 3769, 3767, 3768, 3768, 3769,
+ 3774, 3771, 3773, 3764, 3777, 3775, 3771, 3772, 3778, 3774,
+ 3780, 3781, 3782, 3783, 3784, 3766, 3772, 0, 3785, 3775,
+ 3786, 3783, 3787, 3788, 3790, 3791, 3768, 3774, 0, 3787,
+ 3788, 3777, 3783, 3789, 3791, 3778, 3795, 3796, 3795, 3797,
+ 3783, 3784, 3780, 3781, 3782, 3785, 3786, 3786, 3783, 3787,
+ 3788, 3790, 3791, 3798, 3792, 3789, 3799, 3796, 3801, 3802,
+ 3789, 3792, 3797, 3795, 3796, 3803, 3797, 3801, 3799, 3804,
- 3800, 3793, 3791, 3786, 3790, 3794, 3793, 3795, 3794, 3797,
- 3792, 3797, 3795, 3799, 3798, 3801, 3803, 3804, 3806, 3799,
- 3802, 3807, 3800, 3794, 3791, 3792, 3798, 3800, 3802, 3805,
- 3809, 3812, 3794, 3814, 3808, 3794, 3797, 3801, 3813, 3795,
- 3799, 3798, 3801, 3803, 3816, 3806, 3808, 3802, 3807, 3804,
- 3805, 3813, 3809, 3819, 3817, 3821, 3805, 3809, 3812, 3822,
- 3814, 3808, 3819, 3823, 3824, 3813, 3825, 3827, 3828, 3829,
- 3830, 3816, 3817, 3831, 3831, 3834, 3839, 3837, 3838, 0,
- 3819, 3817, 3821, 3833, 3837, 3838, 3822, 3844, 3850, 3845,
- 3823, 3824, 0, 3825, 3827, 3828, 3829, 3830, 3841, 3839,
+ 3805, 3798, 3806, 3807, 3808, 3809, 3813, 3810, 3811, 3813,
+ 3798, 3792, 3810, 3799, 3802, 3801, 3802, 3803, 3805, 3812,
+ 3811, 3815, 3803, 3816, 3813, 3816, 3804, 3805, 3806, 3806,
+ 3807, 3808, 3809, 3813, 3810, 3811, 3813, 3814, 3818, 3817,
+ 3819, 3812, 3814, 0, 3818, 3822, 3812, 3821, 3820, 3823,
+ 3816, 3817, 3824, 3815, 0, 3821, 3825, 3826, 3828, 3827,
+ 3831, 3833, 3819, 3832, 3835, 3818, 3817, 3819, 0, 3814,
+ 3820, 3827, 3822, 3824, 3821, 3820, 3832, 3836, 3840, 3824,
+ 3828, 3823, 3841, 3825, 3826, 3828, 3827, 3831, 3833, 3838,
+ 3832, 3835, 3842, 3843, 3844, 3836, 3846, 3847, 3838, 3848,
- 3831, 3833, 3834, 3839, 3837, 3838, 3840, 3845, 3846, 3849,
- 3833, 3851, 3841, 3847, 3844, 3850, 3845, 3852, 3840, 3851,
- 3847, 3849, 3853, 3846, 3841, 3841, 3856, 3854, 3855, 3858,
- 3857, 0, 3861, 3840, 3853, 3846, 3849, 0, 3851, 3841,
- 3847, 3854, 3865, 3855, 3852, 3857, 3860, 3867, 3873, 3853,
- 3869, 3866, 3856, 3856, 3854, 3855, 3858, 3857, 3860, 3861,
- 3866, 3868, 3868, 3870, 3865, 3872, 3874, 0, 0, 3865,
- 0, 3867, 3870, 3860, 3867, 3875, 3869, 3869, 3866, 3874,
- 3873, 3881, 3880, 3876, 3878, 3877, 3885, 0, 3868, 3872,
- 3870, 3876, 3872, 3874, 3877, 3878, 3884, 3875, 3885, 3881,
+ 3849, 3850, 3850, 3853, 3836, 3840, 3856, 3852, 3857, 3841,
+ 0, 3863, 0, 3856, 3858, 3857, 3838, 3859, 3869, 3842,
+ 3843, 3844, 3860, 3846, 3847, 3852, 3848, 3849, 3850, 3859,
+ 3853, 3865, 3864, 3856, 3852, 3857, 3860, 3858, 3863, 3868,
+ 3866, 3858, 3871, 3872, 3859, 3869, 3865, 3866, 3860, 3860,
+ 3864, 3868, 3870, 3877, 3873, 3872, 3874, 3876, 3865, 3864,
+ 3870, 3875, 3879, 3860, 3880, 3892, 3868, 3866, 3873, 3871,
+ 3872, 3874, 3876, 3884, 3879, 3886, 3885, 3887, 3887, 3870,
+ 3877, 3873, 3888, 3874, 3876, 3885, 3891, 3875, 3875, 3879,
+ 3894, 3880, 3889, 3893, 0, 3884, 3896, 3892, 3900, 3886,
- 3887, 0, 3875, 3880, 3890, 3890, 3901, 3891, 3881, 3880,
- 3876, 3878, 3877, 3885, 3891, 3902, 3906, 3904, 3905, 3884,
- 3912, 3907, 3913, 3884, 3908, 3908, 3887, 3887, 3901, 3907,
- 3914, 3890, 3908, 3901, 3891, 3904, 3905, 3909, 3916, 3902,
- 3911, 3906, 3902, 3906, 3904, 3905, 3909, 3912, 3907, 3913,
- 3919, 3908, 3908, 3920, 3911, 3918, 3921, 3914, 3922, 3918,
- 3924, 3926, 3927, 3921, 3909, 3916, 3927, 3911, 3919, 3929,
- 3922, 3932, 3928, 3924, 3931, 3930, 3920, 3919, 3933, 0,
- 3920, 3935, 3918, 3921, 0, 3922, 3931, 3924, 3928, 3927,
- 3935, 3929, 3933, 3926, 3938, 3934, 3929, 3932, 3932, 3928,
+ 3884, 3889, 3886, 3885, 3887, 3896, 3893, 3895, 3888, 3888,
+ 3891, 3897, 3894, 3891, 3899, 3895, 3900, 3894, 3904, 3889,
+ 3893, 3903, 3897, 3896, 3906, 3900, 3909, 3909, 3921, 3910,
+ 3904, 3923, 3920, 0, 3895, 3899, 3910, 3925, 3897, 3924,
+ 3931, 3899, 0, 0, 3903, 3904, 3932, 3930, 3903, 3923,
+ 3906, 3906, 3921, 3909, 3920, 3921, 3910, 3924, 3923, 3920,
+ 3926, 3930, 3925, 3928, 3925, 3933, 3924, 3931, 3926, 3927,
+ 3927, 3935, 3928, 3932, 3930, 3937, 3938, 3927, 3939, 3937,
+ 3943, 3940, 3945, 3941, 3947, 3946, 0, 3926, 3940, 3946,
+ 3928, 3948, 3933, 3943, 3938, 3941, 3927, 3927, 3935, 3949,
- 3930, 3931, 3930, 3934, 3936, 3933, 3938, 3937, 3935, 3937,
- 3939, 3940, 3942, 3941, 3943, 3936, 3945, 3946, 3942, 3948,
- 3944, 3938, 3934, 3947, 3945, 3950, 3940, 0, 3939, 3943,
- 3947, 3936, 0, 3948, 3937, 3941, 3955, 3939, 3940, 3942,
- 3941, 3943, 3944, 3945, 3946, 3949, 3948, 3944, 3951, 3952,
- 3947, 3953, 3950, 3954, 3960, 3951, 3962, 3952, 3955, 3949,
- 3954, 3961, 3964, 3955, 3963, 3965, 0, 3960, 3961, 3967,
- 3953, 3966, 3949, 3968, 3969, 3951, 3952, 3970, 3953, 3972,
- 3954, 3960, 3963, 3962, 3977, 3970, 3964, 3971, 3961, 3964,
- 3973, 3963, 3965, 3966, 3971, 3967, 3967, 3974, 3966, 3976,
+ 3947, 3939, 3937, 3938, 3950, 3939, 3951, 3943, 3940, 3952,
+ 3941, 3947, 3946, 3948, 3945, 3959, 3950, 3953, 3948, 3954,
+ 3956, 3958, 3956, 3952, 3949, 3953, 3949, 3955, 3954, 3957,
+ 3959, 3950, 3951, 3951, 3961, 3960, 3952, 3962, 3955, 3958,
+ 3961, 3957, 3959, 3963, 3953, 3964, 3954, 3956, 3958, 3965,
+ 3969, 3966, 3962, 3964, 3955, 3967, 3957, 3960, 3966, 3968,
+ 3970, 3961, 3960, 3971, 3962, 3963, 3972, 3970, 3973, 3967,
+ 3963, 3971, 3964, 3968, 3974, 3973, 3965, 3969, 3966, 3979,
+ 3981, 3980, 3967, 3984, 3982, 3972, 3968, 3970, 3980, 3983,
+ 3971, 3986, 3979, 3972, 3987, 3973, 3974, 3985, 3988, 3991,
- 3968, 3969, 3978, 3972, 3970, 3975, 3972, 3975, 3979, 3980,
- 3981, 3976, 3973, 3982, 3971, 3978, 3977, 3973, 3983, 3974,
- 3982, 3984, 3985, 3979, 3974, 3987, 3976, 3991, 3988, 3978,
- 3993, 3980, 3975, 3994, 3989, 3979, 3980, 3981, 3992, 3995,
- 3982, 3997, 3992, 4006, 4003, 3983, 3999, 4000, 3984, 3985,
- 3988, 3995, 3987, 4003, 3991, 3988, 3989, 3993, 3999, 3996,
- 3994, 3989, 4007, 4000, 4008, 3992, 3995, 3996, 3997, 4002,
- 4006, 4003, 4002, 3999, 4000, 4010, 4009, 4011, 4015, 4012,
- 0, 4013, 0, 4008, 4009, 4014, 3996, 4016, 4007, 4007,
- 4018, 4008, 4012, 4014, 0, 4013, 4002, 4030, 4023, 4024,
+ 0, 3974, 3982, 3996, 3989, 3992, 3979, 3981, 3980, 0,
+ 3984, 3982, 3989, 3983, 3993, 3990, 3983, 3986, 3986, 3985,
+ 0, 3987, 3990, 3991, 3985, 3988, 3991, 3992, 3994, 3998,
+ 3994, 3989, 3992, 3995, 3997, 3996, 3993, 3999, 4000, 4001,
+ 4002, 3993, 3990, 4003, 3998, 3995, 4001, 3997, 4004, 4006,
+ 4007, 4008, 4010, 4011, 4012, 3994, 3998, 4011, 4013, 3999,
+ 3995, 3997, 4014, 4015, 3999, 4000, 4001, 4002, 4016, 4025,
+ 4003, 4015, 4007, 4008, 4014, 4004, 4006, 4007, 4008, 4010,
+ 4011, 4012, 4018, 4019, 4021, 4013, 4026, 4021, 4022, 4014,
+ 4015, 4029, 4028, 4031, 4018, 4016, 4025, 4022, 4027, 4019,
- 4015, 4026, 0, 4009, 4030, 4015, 4012, 4010, 4013, 4011,
- 4023, 4024, 4014, 4026, 4016, 4029, 4032, 4018, 4033, 4034,
- 4040, 4029, 4038, 0, 4030, 4023, 4024, 4035, 4026, 4032,
- 4034, 4037, 4039, 4042, 4040, 4043, 4045, 4041, 4037, 4044,
- 4039, 4042, 4029, 4032, 4038, 4033, 4034, 4040, 4051, 4038,
- 4035, 4041, 4055, 4058, 4035, 4051, 4056, 4043, 4037, 4039,
- 4042, 4044, 4043, 4045, 4041, 4048, 4044, 4049, 4050, 4052,
- 4055, 4048, 4053, 4049, 4059, 4051, 4057, 4050, 4052, 4055,
- 4053, 0, 4060, 4056, 4061, 4058, 4062, 4064, 4069, 4063,
- 0, 4071, 4048, 0, 4049, 4050, 4052, 4063, 4057, 4053,
+ 4028, 4030, 4032, 4035, 4034, 4037, 4031, 0, 0, 4018,
+ 4019, 4021, 4026, 4026, 4033, 4022, 4032, 4027, 4052, 4028,
+ 4031, 4051, 4033, 4029, 4042, 4027, 4034, 4043, 4045, 4032,
+ 4035, 4034, 4037, 4030, 4051, 4049, 4042, 4048, 4053, 4043,
+ 4045, 4033, 4049, 4048, 4054, 4052, 4056, 4057, 4051, 4053,
+ 4058, 4042, 4059, 4056, 4043, 4045, 4060, 4064, 4058, 4062,
+ 4061, 0, 4049, 4063, 4048, 4053, 4059, 4054, 4061, 4057,
+ 4060, 4054, 4067, 4056, 4057, 4075, 4068, 4058, 4067, 4059,
+ 4069, 4062, 4068, 4060, 4064, 4063, 4062, 4061, 4070, 4069,
+ 4063, 4071, 4074, 4072, 4076, 4070, 4077, 4078, 4082, 4067,
- 4059, 4059, 4068, 4057, 4060, 4066, 4061, 4067, 4062, 4060,
- 4074, 4061, 4066, 4062, 4067, 4069, 4063, 4070, 4071, 4064,
- 4075, 4072, 4076, 4077, 4079, 4068, 4081, 4078, 4075, 4068,
- 4072, 4077, 4066, 4074, 4067, 4078, 4082, 4074, 4080, 4070,
- 4081, 4083, 4076, 4084, 4070, 4086, 4080, 4075, 4072, 4076,
- 4077, 4088, 4089, 4081, 4078, 4091, 4079, 4090, 4092, 4093,
- 4090, 4096, 4094, 4082, 4095, 4080, 4092, 4093, 4083, 4101,
- 4084, 4086, 4086, 4088, 4104, 4090, 4094, 4091, 4088, 4089,
- 4100, 0, 4091, 4096, 4090, 4092, 4093, 4090, 4096, 4094,
- 4095, 4095, 4101, 4106, 4100, 4105, 4101, 4103, 4103, 4107,
+ 4071, 4072, 4075, 4068, 4079, 4080, 4082, 4069, 4081, 4083,
+ 4074, 4087, 4088, 0, 0, 4070, 4076, 4090, 4071, 4074,
+ 4072, 4076, 4085, 4078, 4078, 4082, 4079, 4080, 4077, 4085,
+ 4081, 4079, 4080, 4086, 4087, 4081, 4089, 4091, 4087, 4088,
+ 4086, 4083, 4093, 4094, 4090, 4096, 4091, 4095, 4097, 4085,
+ 4098, 4094, 4100, 4096, 4099, 0, 4097, 4101, 4089, 4102,
+ 4086, 4103, 4099, 4089, 4091, 4093, 4100, 4095, 4105, 4093,
+ 4094, 4107, 4096, 4108, 4095, 4097, 4114, 4110, 0, 4100,
+ 0, 4099, 4098, 4111, 4101, 4115, 4102, 4109, 4103, 4112,
+ 4109, 4111, 4113, 4107, 4105, 4105, 4123, 4112, 4107, 4110,
- 4104, 4104, 4110, 4105, 4111, 4108, 4112, 4100, 4109, 0,
- 4110, 4114, 4113, 4115, 0, 4118, 0, 4116, 4123, 4106,
- 4106, 4117, 4105, 4118, 4103, 4107, 4107, 4108, 4109, 4110,
- 4119, 4111, 4108, 4112, 4113, 4109, 4114, 4116, 4114, 4113,
- 4115, 4117, 4118, 4120, 4116, 4123, 4124, 4126, 4117, 4127,
- 4128, 4120, 4119, 4129, 4124, 4130, 4132, 4119, 4128, 4133,
- 4134, 4129, 4135, 4136, 4137, 4139, 4140, 4133, 4134, 4126,
- 4120, 4127, 4143, 4124, 4126, 4141, 4127, 4128, 4146, 0,
- 4129, 4130, 4130, 4132, 4137, 4149, 4133, 4134, 4135, 4135,
- 4136, 4137, 4139, 4140, 4143, 4141, 4147, 4150, 4148, 4143,
+ 4108, 4119, 4114, 4114, 4110, 4109, 4113, 4115, 4120, 4128,
+ 4111, 4125, 4115, 4126, 4109, 4119, 4112, 4109, 4124, 4113,
+ 4122, 4122, 4123, 4123, 4127, 4129, 4124, 4130, 4119, 4128,
+ 4131, 4120, 4134, 4129, 4132, 4120, 4128, 4125, 4125, 4126,
+ 4126, 4133, 4135, 4136, 0, 4124, 4127, 4122, 4142, 4138,
+ 4137, 4127, 4129, 0, 4130, 0, 4132, 4131, 4137, 4134,
+ 4145, 4132, 4135, 4136, 4139, 4143, 4133, 4146, 4133, 4135,
+ 4136, 4138, 4139, 4143, 4149, 4142, 4138, 4137, 4147, 4151,
+ 4148, 4155, 4145, 4154, 4156, 4152, 4147, 4145, 4148, 4146,
+ 4153, 4139, 4143, 4152, 4146, 4158, 4159, 0, 4153, 4160,
- 4146, 0, 4141, 0, 4147, 4146, 4148, 0, 0, 0,
- 0, 0, 4149, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 4147, 4150, 4148, 4154, 4154, 4154, 4154,
- 4154, 4154, 4154, 4155, 4155, 4155, 4155, 4155, 4155, 4155,
- 4156, 4156, 4156, 4156, 4156, 4156, 4156, 4157, 4157, 4157,
- 4157, 4157, 4157, 4157, 4158, 4158, 4158, 4158, 4158, 4158,
- 4158, 4159, 4159, 4159, 4159, 4159, 4159, 4159, 4160, 4160,
- 4160, 4160, 4160, 4160, 4160, 4162, 4162, 0, 4162, 4162,
- 4162, 4162, 4163, 4163, 0, 0, 0, 4163, 4163, 4164,
- 4164, 0, 0, 4164, 0, 4164, 4165, 0, 0, 0,
+ 4149, 4149, 4162, 4165, 4156, 4147, 4151, 4148, 4155, 4154,
+ 4154, 4156, 4152, 4166, 4168, 4169, 0, 4153, 0, 4160,
+ 4167, 4166, 4158, 4159, 4162, 4165, 4160, 0, 4167, 4162,
+ 4165, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4166, 4168, 4169, 0, 0, 0, 0, 4167, 4173, 4173,
+ 4173, 4173, 4173, 4173, 4173, 4174, 4174, 4174, 4174, 4174,
+ 4174, 4174, 4175, 4175, 4175, 4175, 4175, 4175, 4175, 4176,
+ 4176, 4176, 4176, 4176, 4176, 4176, 4177, 4177, 4177, 4177,
+ 4177, 4177, 4177, 4178, 4178, 4178, 4178, 4178, 4178, 4178,
+ 4179, 4179, 4179, 4179, 4179, 4179, 4179, 4181, 4181, 0,
- 0, 0, 4165, 4166, 4166, 0, 0, 0, 4166, 4166,
- 4167, 0, 0, 0, 0, 0, 4167, 4168, 4168, 0,
- 4168, 4168, 4168, 4168, 4169, 0, 0, 0, 0, 0,
- 4169, 4170, 4170, 0, 0, 0, 4170, 4170, 4171, 4171,
- 0, 4171, 4171, 4171, 4171, 4153, 4153, 4153, 4153, 4153,
- 4153, 4153, 4153, 4153, 4153, 4153, 4153, 4153, 4153, 4153,
- 4153, 4153, 4153, 4153, 4153, 4153, 4153, 4153, 4153, 4153,
- 4153, 4153, 4153, 4153, 4153, 4153, 4153, 4153, 4153, 4153,
- 4153, 4153, 4153, 4153, 4153, 4153, 4153, 4153, 4153, 4153,
- 4153, 4153, 4153, 4153, 4153, 4153, 4153, 4153, 4153, 4153,
+ 4181, 4181, 4181, 4181, 4182, 4182, 0, 0, 0, 4182,
+ 4182, 4183, 4183, 0, 0, 4183, 0, 4183, 4184, 0,
+ 0, 0, 0, 0, 4184, 4185, 4185, 0, 0, 0,
+ 4185, 4185, 4186, 0, 0, 0, 0, 0, 4186, 4187,
+ 4187, 0, 4187, 4187, 4187, 4187, 4188, 0, 0, 0,
+ 0, 0, 4188, 4189, 4189, 0, 0, 0, 4189, 4189,
+ 4190, 4190, 0, 4190, 4190, 4190, 4190, 4172, 4172, 4172,
+ 4172, 4172, 4172, 4172, 4172, 4172, 4172, 4172, 4172, 4172,
+ 4172, 4172, 4172, 4172, 4172, 4172, 4172, 4172, 4172, 4172,
+ 4172, 4172, 4172, 4172, 4172, 4172, 4172, 4172, 4172, 4172,
- 4153, 4153, 4153, 4153, 4153, 4153, 4153, 4153, 4153, 4153,
- 4153, 4153
+ 4172, 4172, 4172, 4172, 4172, 4172, 4172, 4172, 4172, 4172,
+ 4172, 4172, 4172, 4172, 4172, 4172, 4172, 4172, 4172, 4172,
+ 4172, 4172, 4172, 4172, 4172, 4172, 4172, 4172, 4172, 4172,
+ 4172, 4172, 4172, 4172
} ;
static yy_state_type yy_last_accepting_state;
@@ -4625,7 +4633,7 @@ static void config_end_include(void)
}
#endif
-#line 4626 "<stdout>"
+#line 4634 "<stdout>"
#define YY_NO_INPUT 1
#line 190 "util/configlexer.lex"
#ifndef YY_NO_UNPUT
@@ -4634,9 +4642,9 @@ static void config_end_include(void)
#ifndef YY_NO_INPUT
#define YY_NO_INPUT 1
#endif
-#line 4635 "<stdout>"
+#line 4643 "<stdout>"
-#line 4637 "<stdout>"
+#line 4645 "<stdout>"
#define INITIAL 0
#define quotedstring 1
@@ -4860,7 +4868,7 @@ YY_DECL
{
#line 210 "util/configlexer.lex"
-#line 4861 "<stdout>"
+#line 4869 "<stdout>"
while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */
{
@@ -4893,13 +4901,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 >= 4154 )
+ if ( yy_current_state >= 4173 )
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] != 11846 );
+ while ( yy_base[yy_current_state] != 11868 );
yy_find_action:
yy_act = yy_accept[yy_current_state];
@@ -6870,43 +6878,53 @@ YY_RULE_SETUP
case 387:
YY_RULE_SETUP
#line 611 "util/configlexer.lex"
-{ YDVAR(1, VAR_ITER_SCRUB_PROMISCUOUS) }
+{ YDVAR(1, VAR_MAX_TRANSFER_SIZE) }
YY_BREAK
case 388:
-/* rule 388 can match eol */
YY_RULE_SETUP
#line 612 "util/configlexer.lex"
+{ YDVAR(1, VAR_MAX_TRANSFER_TIME) }
+ YY_BREAK
+case 389:
+YY_RULE_SETUP
+#line 613 "util/configlexer.lex"
+{ YDVAR(1, VAR_ITER_SCRUB_PROMISCUOUS) }
+ YY_BREAK
+case 390:
+/* rule 390 can match eol */
+YY_RULE_SETUP
+#line 614 "util/configlexer.lex"
{ LEXOUT(("NL\n")); cfg_parser->line++; }
YY_BREAK
/* Quoted strings. Strip leading and ending quotes */
-case 389:
+case 391:
YY_RULE_SETUP
-#line 615 "util/configlexer.lex"
+#line 617 "util/configlexer.lex"
{ BEGIN(quotedstring); LEXOUT(("QS ")); }
YY_BREAK
case YY_STATE_EOF(quotedstring):
-#line 616 "util/configlexer.lex"
+#line 618 "util/configlexer.lex"
{
yyerror("EOF inside quoted string");
if(--num_args == 0) { BEGIN(INITIAL); }
else { BEGIN(val); }
}
YY_BREAK
-case 390:
+case 392:
YY_RULE_SETUP
-#line 621 "util/configlexer.lex"
+#line 623 "util/configlexer.lex"
{ LEXOUT(("STR(%s) ", yytext)); yymore(); }
YY_BREAK
-case 391:
-/* rule 391 can match eol */
+case 393:
+/* rule 393 can match eol */
YY_RULE_SETUP
-#line 622 "util/configlexer.lex"
+#line 624 "util/configlexer.lex"
{ yyerror("newline inside quoted string, no end \"");
cfg_parser->line++; BEGIN(INITIAL); }
YY_BREAK
-case 392:
+case 394:
YY_RULE_SETUP
-#line 624 "util/configlexer.lex"
+#line 626 "util/configlexer.lex"
{
LEXOUT(("QE "));
if(--num_args == 0) { BEGIN(INITIAL); }
@@ -6919,34 +6937,34 @@ YY_RULE_SETUP
}
YY_BREAK
/* Single Quoted strings. Strip leading and ending quotes */
-case 393:
+case 395:
YY_RULE_SETUP
-#line 636 "util/configlexer.lex"
+#line 638 "util/configlexer.lex"
{ BEGIN(singlequotedstr); LEXOUT(("SQS ")); }
YY_BREAK
case YY_STATE_EOF(singlequotedstr):
-#line 637 "util/configlexer.lex"
+#line 639 "util/configlexer.lex"
{
yyerror("EOF inside quoted string");
if(--num_args == 0) { BEGIN(INITIAL); }
else { BEGIN(val); }
}
YY_BREAK
-case 394:
+case 396:
YY_RULE_SETUP
-#line 642 "util/configlexer.lex"
+#line 644 "util/configlexer.lex"
{ LEXOUT(("STR(%s) ", yytext)); yymore(); }
YY_BREAK
-case 395:
-/* rule 395 can match eol */
+case 397:
+/* rule 397 can match eol */
YY_RULE_SETUP
-#line 643 "util/configlexer.lex"
+#line 645 "util/configlexer.lex"
{ yyerror("newline inside quoted string, no end '");
cfg_parser->line++; BEGIN(INITIAL); }
YY_BREAK
-case 396:
+case 398:
YY_RULE_SETUP
-#line 645 "util/configlexer.lex"
+#line 647 "util/configlexer.lex"
{
LEXOUT(("SQE "));
if(--num_args == 0) { BEGIN(INITIAL); }
@@ -6959,38 +6977,38 @@ YY_RULE_SETUP
}
YY_BREAK
/* include: directive */
-case 397:
+case 399:
YY_RULE_SETUP
-#line 657 "util/configlexer.lex"
+#line 659 "util/configlexer.lex"
{
LEXOUT(("v(%s) ", yytext)); inc_prev = YYSTATE; BEGIN(include); }
YY_BREAK
case YY_STATE_EOF(include):
-#line 659 "util/configlexer.lex"
+#line 661 "util/configlexer.lex"
{
yyerror("EOF inside include directive");
BEGIN(inc_prev);
}
YY_BREAK
-case 398:
+case 400:
YY_RULE_SETUP
-#line 663 "util/configlexer.lex"
+#line 665 "util/configlexer.lex"
{ LEXOUT(("ISP ")); /* ignore */ }
YY_BREAK
-case 399:
-/* rule 399 can match eol */
+case 401:
+/* rule 401 can match eol */
YY_RULE_SETUP
-#line 664 "util/configlexer.lex"
+#line 666 "util/configlexer.lex"
{ LEXOUT(("NL\n")); cfg_parser->line++;}
YY_BREAK
-case 400:
+case 402:
YY_RULE_SETUP
-#line 665 "util/configlexer.lex"
+#line 667 "util/configlexer.lex"
{ LEXOUT(("IQS ")); BEGIN(include_quoted); }
YY_BREAK
-case 401:
+case 403:
YY_RULE_SETUP
-#line 666 "util/configlexer.lex"
+#line 668 "util/configlexer.lex"
{
LEXOUT(("Iunquotedstr(%s) ", yytext));
config_start_include_glob(yytext, 0);
@@ -6998,27 +7016,27 @@ YY_RULE_SETUP
}
YY_BREAK
case YY_STATE_EOF(include_quoted):
-#line 671 "util/configlexer.lex"
+#line 673 "util/configlexer.lex"
{
yyerror("EOF inside quoted string");
BEGIN(inc_prev);
}
YY_BREAK
-case 402:
+case 404:
YY_RULE_SETUP
-#line 675 "util/configlexer.lex"
+#line 677 "util/configlexer.lex"
{ LEXOUT(("ISTR(%s) ", yytext)); yymore(); }
YY_BREAK
-case 403:
-/* rule 403 can match eol */
+case 405:
+/* rule 405 can match eol */
YY_RULE_SETUP
-#line 676 "util/configlexer.lex"
+#line 678 "util/configlexer.lex"
{ yyerror("newline before \" in include name");
cfg_parser->line++; BEGIN(inc_prev); }
YY_BREAK
-case 404:
+case 406:
YY_RULE_SETUP
-#line 678 "util/configlexer.lex"
+#line 680 "util/configlexer.lex"
{
LEXOUT(("IQE "));
yytext[yyleng - 1] = '\0';
@@ -7028,7 +7046,7 @@ YY_RULE_SETUP
YY_BREAK
case YY_STATE_EOF(INITIAL):
case YY_STATE_EOF(val):
-#line 684 "util/configlexer.lex"
+#line 686 "util/configlexer.lex"
{
LEXOUT(("LEXEOF "));
yy_set_bol(1); /* Set beginning of line, so "^" rules match. */
@@ -7043,39 +7061,39 @@ case YY_STATE_EOF(val):
}
YY_BREAK
/* include-toplevel: directive */
-case 405:
+case 407:
YY_RULE_SETUP
-#line 698 "util/configlexer.lex"
+#line 700 "util/configlexer.lex"
{
LEXOUT(("v(%s) ", yytext)); inc_prev = YYSTATE; BEGIN(include_toplevel);
}
YY_BREAK
case YY_STATE_EOF(include_toplevel):
-#line 701 "util/configlexer.lex"
+#line 703 "util/configlexer.lex"
{
yyerror("EOF inside include_toplevel directive");
BEGIN(inc_prev);
}
YY_BREAK
-case 406:
+case 408:
YY_RULE_SETUP
-#line 705 "util/configlexer.lex"
+#line 707 "util/configlexer.lex"
{ LEXOUT(("ITSP ")); /* ignore */ }
YY_BREAK
-case 407:
-/* rule 407 can match eol */
+case 409:
+/* rule 409 can match eol */
YY_RULE_SETUP
-#line 706 "util/configlexer.lex"
+#line 708 "util/configlexer.lex"
{ LEXOUT(("NL\n")); cfg_parser->line++; }
YY_BREAK
-case 408:
+case 410:
YY_RULE_SETUP
-#line 707 "util/configlexer.lex"
+#line 709 "util/configlexer.lex"
{ LEXOUT(("ITQS ")); BEGIN(include_toplevel_quoted); }
YY_BREAK
-case 409:
+case 411:
YY_RULE_SETUP
-#line 708 "util/configlexer.lex"
+#line 710 "util/configlexer.lex"
{
LEXOUT(("ITunquotedstr(%s) ", yytext));
config_start_include_glob(yytext, 1);
@@ -7084,29 +7102,29 @@ YY_RULE_SETUP
}
YY_BREAK
case YY_STATE_EOF(include_toplevel_quoted):
-#line 714 "util/configlexer.lex"
+#line 716 "util/configlexer.lex"
{
yyerror("EOF inside quoted string");
BEGIN(inc_prev);
}
YY_BREAK
-case 410:
+case 412:
YY_RULE_SETUP
-#line 718 "util/configlexer.lex"
+#line 720 "util/configlexer.lex"
{ LEXOUT(("ITSTR(%s) ", yytext)); yymore(); }
YY_BREAK
-case 411:
-/* rule 411 can match eol */
+case 413:
+/* rule 413 can match eol */
YY_RULE_SETUP
-#line 719 "util/configlexer.lex"
+#line 721 "util/configlexer.lex"
{
yyerror("newline before \" in include name");
cfg_parser->line++; BEGIN(inc_prev);
}
YY_BREAK
-case 412:
+case 414:
YY_RULE_SETUP
-#line 723 "util/configlexer.lex"
+#line 725 "util/configlexer.lex"
{
LEXOUT(("ITQE "));
yytext[yyleng - 1] = '\0';
@@ -7115,33 +7133,33 @@ YY_RULE_SETUP
return (VAR_FORCE_TOPLEVEL);
}
YY_BREAK
-case 413:
+case 415:
YY_RULE_SETUP
-#line 731 "util/configlexer.lex"
+#line 733 "util/configlexer.lex"
{ LEXOUT(("unquotedstr(%s) ", yytext));
if(--num_args == 0) { BEGIN(INITIAL); }
yylval.str = strdup(yytext); return STRING_ARG; }
YY_BREAK
-case 414:
+case 416:
YY_RULE_SETUP
-#line 735 "util/configlexer.lex"
+#line 737 "util/configlexer.lex"
{
ub_c_error_msg("unknown keyword '%s'", yytext);
}
YY_BREAK
-case 415:
+case 417:
YY_RULE_SETUP
-#line 739 "util/configlexer.lex"
+#line 741 "util/configlexer.lex"
{
ub_c_error_msg("stray '%s'", yytext);
}
YY_BREAK
-case 416:
+case 418:
YY_RULE_SETUP
-#line 743 "util/configlexer.lex"
+#line 745 "util/configlexer.lex"
ECHO;
YY_BREAK
-#line 7142 "<stdout>"
+#line 7160 "<stdout>"
case YY_END_OF_BUFFER:
{
@@ -7436,7 +7454,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 >= 4154 )
+ if ( yy_current_state >= 4173 )
yy_c = yy_meta[yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
@@ -7464,11 +7482,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 >= 4154 )
+ if ( yy_current_state >= 4173 )
yy_c = yy_meta[yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
- yy_is_jam = (yy_current_state == 4153);
+ yy_is_jam = (yy_current_state == 4172);
return yy_is_jam ? 0 : yy_current_state;
}
@@ -8107,6 +8125,6 @@ void yyfree (void * ptr )
#define YYTABLES_NAME "yytables"
-#line 743 "util/configlexer.lex"
+#line 745 "util/configlexer.lex"
diff --git a/util/configlexer.lex b/util/configlexer.lex
index d6222cdf9a75..196575bdb8a5 100644
--- a/util/configlexer.lex
+++ b/util/configlexer.lex
@@ -608,6 +608,8 @@ iter-scrub-ns{COLON} { YDVAR(1, VAR_ITER_SCRUB_NS) }
iter-scrub-cname{COLON} { YDVAR(1, VAR_ITER_SCRUB_CNAME) }
iter-scrub-rrsig{COLON} { YDVAR(1, VAR_ITER_SCRUB_RRSIG) }
max-global-quota{COLON} { YDVAR(1, VAR_MAX_GLOBAL_QUOTA) }
+max-transfer-size{COLON} { YDVAR(1, VAR_MAX_TRANSFER_SIZE) }
+max-transfer-time{COLON} { YDVAR(1, VAR_MAX_TRANSFER_TIME) }
iter-scrub-promiscuous{COLON} { YDVAR(1, VAR_ITER_SCRUB_PROMISCUOUS) }
<INITIAL,val>{NEWLINE} { LEXOUT(("NL\n")); cfg_parser->line++; }
diff --git a/util/configparser.c b/util/configparser.c
index 436fc7f55aaf..f5ff34eca6ab 100644
--- a/util/configparser.c
+++ b/util/configparser.c
@@ -502,420 +502,424 @@ enum yysymbol_kind_t
YYSYMBOL_VAR_ITER_SCRUB_NS = 373, /* VAR_ITER_SCRUB_NS */
YYSYMBOL_VAR_ITER_SCRUB_CNAME = 374, /* VAR_ITER_SCRUB_CNAME */
YYSYMBOL_VAR_ITER_SCRUB_RRSIG = 375, /* VAR_ITER_SCRUB_RRSIG */
- YYSYMBOL_VAR_MAX_GLOBAL_QUOTA = 376, /* VAR_MAX_GLOBAL_QUOTA */
- YYSYMBOL_VAR_HARDEN_UNVERIFIED_GLUE = 377, /* VAR_HARDEN_UNVERIFIED_GLUE */
- YYSYMBOL_VAR_LOG_TIME_ISO = 378, /* VAR_LOG_TIME_ISO */
- YYSYMBOL_VAR_ITER_SCRUB_PROMISCUOUS = 379, /* VAR_ITER_SCRUB_PROMISCUOUS */
- YYSYMBOL_VAR_LOG_THREAD_ID = 380, /* VAR_LOG_THREAD_ID */
- YYSYMBOL_YYACCEPT = 381, /* $accept */
- YYSYMBOL_toplevelvars = 382, /* toplevelvars */
- YYSYMBOL_toplevelvar = 383, /* toplevelvar */
- YYSYMBOL_force_toplevel = 384, /* force_toplevel */
- YYSYMBOL_serverstart = 385, /* serverstart */
- YYSYMBOL_contents_server = 386, /* contents_server */
- YYSYMBOL_content_server = 387, /* content_server */
- YYSYMBOL_stub_clause = 388, /* stub_clause */
- YYSYMBOL_stubstart = 389, /* stubstart */
- YYSYMBOL_contents_stub = 390, /* contents_stub */
- YYSYMBOL_content_stub = 391, /* content_stub */
- YYSYMBOL_forward_clause = 392, /* forward_clause */
- YYSYMBOL_forwardstart = 393, /* forwardstart */
- YYSYMBOL_contents_forward = 394, /* contents_forward */
- YYSYMBOL_content_forward = 395, /* content_forward */
- YYSYMBOL_view_clause = 396, /* view_clause */
- YYSYMBOL_viewstart = 397, /* viewstart */
- YYSYMBOL_contents_view = 398, /* contents_view */
- YYSYMBOL_content_view = 399, /* content_view */
- YYSYMBOL_authstart = 400, /* authstart */
- YYSYMBOL_contents_auth = 401, /* contents_auth */
- YYSYMBOL_content_auth = 402, /* content_auth */
- YYSYMBOL_rpz_tag = 403, /* rpz_tag */
- YYSYMBOL_rpz_action_override = 404, /* rpz_action_override */
- YYSYMBOL_rpz_cname_override = 405, /* rpz_cname_override */
- YYSYMBOL_rpz_log = 406, /* rpz_log */
- YYSYMBOL_rpz_log_name = 407, /* rpz_log_name */
- YYSYMBOL_rpz_signal_nxdomain_ra = 408, /* rpz_signal_nxdomain_ra */
- YYSYMBOL_rpzstart = 409, /* rpzstart */
- YYSYMBOL_contents_rpz = 410, /* contents_rpz */
- YYSYMBOL_content_rpz = 411, /* content_rpz */
- YYSYMBOL_server_num_threads = 412, /* server_num_threads */
- YYSYMBOL_server_verbosity = 413, /* server_verbosity */
- YYSYMBOL_server_statistics_interval = 414, /* server_statistics_interval */
- YYSYMBOL_server_statistics_cumulative = 415, /* server_statistics_cumulative */
- YYSYMBOL_server_extended_statistics = 416, /* server_extended_statistics */
- YYSYMBOL_server_statistics_inhibit_zero = 417, /* server_statistics_inhibit_zero */
- YYSYMBOL_server_shm_enable = 418, /* server_shm_enable */
- YYSYMBOL_server_shm_key = 419, /* server_shm_key */
- YYSYMBOL_server_port = 420, /* server_port */
- YYSYMBOL_server_send_client_subnet = 421, /* server_send_client_subnet */
- YYSYMBOL_server_client_subnet_zone = 422, /* server_client_subnet_zone */
- YYSYMBOL_server_client_subnet_always_forward = 423, /* server_client_subnet_always_forward */
- YYSYMBOL_server_client_subnet_opcode = 424, /* server_client_subnet_opcode */
- YYSYMBOL_server_max_client_subnet_ipv4 = 425, /* server_max_client_subnet_ipv4 */
- YYSYMBOL_server_max_client_subnet_ipv6 = 426, /* server_max_client_subnet_ipv6 */
- YYSYMBOL_server_min_client_subnet_ipv4 = 427, /* server_min_client_subnet_ipv4 */
- YYSYMBOL_server_min_client_subnet_ipv6 = 428, /* server_min_client_subnet_ipv6 */
- YYSYMBOL_server_max_ecs_tree_size_ipv4 = 429, /* server_max_ecs_tree_size_ipv4 */
- YYSYMBOL_server_max_ecs_tree_size_ipv6 = 430, /* server_max_ecs_tree_size_ipv6 */
- YYSYMBOL_server_interface = 431, /* server_interface */
- YYSYMBOL_server_outgoing_interface = 432, /* server_outgoing_interface */
- YYSYMBOL_server_outgoing_range = 433, /* server_outgoing_range */
- YYSYMBOL_server_outgoing_port_permit = 434, /* server_outgoing_port_permit */
- YYSYMBOL_server_outgoing_port_avoid = 435, /* server_outgoing_port_avoid */
- YYSYMBOL_server_outgoing_num_tcp = 436, /* server_outgoing_num_tcp */
- YYSYMBOL_server_incoming_num_tcp = 437, /* server_incoming_num_tcp */
- YYSYMBOL_server_interface_automatic = 438, /* server_interface_automatic */
- YYSYMBOL_server_interface_automatic_ports = 439, /* server_interface_automatic_ports */
- YYSYMBOL_server_do_ip4 = 440, /* server_do_ip4 */
- YYSYMBOL_server_do_ip6 = 441, /* server_do_ip6 */
- YYSYMBOL_server_do_nat64 = 442, /* server_do_nat64 */
- YYSYMBOL_server_do_udp = 443, /* server_do_udp */
- YYSYMBOL_server_do_tcp = 444, /* server_do_tcp */
- YYSYMBOL_server_prefer_ip4 = 445, /* server_prefer_ip4 */
- YYSYMBOL_server_prefer_ip6 = 446, /* server_prefer_ip6 */
- YYSYMBOL_server_tcp_mss = 447, /* server_tcp_mss */
- YYSYMBOL_server_outgoing_tcp_mss = 448, /* server_outgoing_tcp_mss */
- YYSYMBOL_server_tcp_idle_timeout = 449, /* server_tcp_idle_timeout */
- YYSYMBOL_server_max_reuse_tcp_queries = 450, /* server_max_reuse_tcp_queries */
- YYSYMBOL_server_tcp_reuse_timeout = 451, /* server_tcp_reuse_timeout */
- YYSYMBOL_server_tcp_auth_query_timeout = 452, /* server_tcp_auth_query_timeout */
- YYSYMBOL_server_tcp_keepalive = 453, /* server_tcp_keepalive */
- YYSYMBOL_server_tcp_keepalive_timeout = 454, /* server_tcp_keepalive_timeout */
- YYSYMBOL_server_sock_queue_timeout = 455, /* server_sock_queue_timeout */
- YYSYMBOL_server_tcp_upstream = 456, /* server_tcp_upstream */
- YYSYMBOL_server_udp_upstream_without_downstream = 457, /* server_udp_upstream_without_downstream */
- YYSYMBOL_server_ssl_upstream = 458, /* server_ssl_upstream */
- YYSYMBOL_server_ssl_service_key = 459, /* server_ssl_service_key */
- YYSYMBOL_server_ssl_service_pem = 460, /* server_ssl_service_pem */
- YYSYMBOL_server_ssl_port = 461, /* server_ssl_port */
- YYSYMBOL_server_tls_cert_bundle = 462, /* server_tls_cert_bundle */
- YYSYMBOL_server_tls_win_cert = 463, /* server_tls_win_cert */
- YYSYMBOL_server_tls_additional_port = 464, /* server_tls_additional_port */
- YYSYMBOL_server_tls_ciphers = 465, /* server_tls_ciphers */
- YYSYMBOL_server_tls_ciphersuites = 466, /* server_tls_ciphersuites */
- YYSYMBOL_server_tls_session_ticket_keys = 467, /* server_tls_session_ticket_keys */
- YYSYMBOL_server_tls_use_sni = 468, /* server_tls_use_sni */
- YYSYMBOL_server_tls_protocols = 469, /* server_tls_protocols */
- YYSYMBOL_server_https_port = 470, /* server_https_port */
- YYSYMBOL_server_http_endpoint = 471, /* server_http_endpoint */
- YYSYMBOL_server_http_max_streams = 472, /* server_http_max_streams */
- YYSYMBOL_server_http_query_buffer_size = 473, /* server_http_query_buffer_size */
- YYSYMBOL_server_http_response_buffer_size = 474, /* server_http_response_buffer_size */
- YYSYMBOL_server_http_nodelay = 475, /* server_http_nodelay */
- YYSYMBOL_server_http_notls_downstream = 476, /* server_http_notls_downstream */
- YYSYMBOL_server_quic_port = 477, /* server_quic_port */
- YYSYMBOL_server_quic_size = 478, /* server_quic_size */
- YYSYMBOL_server_use_systemd = 479, /* server_use_systemd */
- YYSYMBOL_server_do_daemonize = 480, /* server_do_daemonize */
- YYSYMBOL_server_use_syslog = 481, /* server_use_syslog */
- YYSYMBOL_server_log_time_ascii = 482, /* server_log_time_ascii */
- YYSYMBOL_server_log_time_iso = 483, /* server_log_time_iso */
- YYSYMBOL_server_log_queries = 484, /* server_log_queries */
- YYSYMBOL_server_log_replies = 485, /* server_log_replies */
- YYSYMBOL_server_log_tag_queryreply = 486, /* server_log_tag_queryreply */
- YYSYMBOL_server_log_servfail = 487, /* server_log_servfail */
- YYSYMBOL_server_log_destaddr = 488, /* server_log_destaddr */
- YYSYMBOL_server_log_thread_id = 489, /* server_log_thread_id */
- YYSYMBOL_server_log_local_actions = 490, /* server_log_local_actions */
- YYSYMBOL_server_chroot = 491, /* server_chroot */
- YYSYMBOL_server_username = 492, /* server_username */
- YYSYMBOL_server_directory = 493, /* server_directory */
- YYSYMBOL_server_logfile = 494, /* server_logfile */
- YYSYMBOL_server_pidfile = 495, /* server_pidfile */
- YYSYMBOL_server_root_hints = 496, /* server_root_hints */
- YYSYMBOL_server_dlv_anchor_file = 497, /* server_dlv_anchor_file */
- YYSYMBOL_server_dlv_anchor = 498, /* server_dlv_anchor */
- YYSYMBOL_server_auto_trust_anchor_file = 499, /* server_auto_trust_anchor_file */
- YYSYMBOL_server_trust_anchor_file = 500, /* server_trust_anchor_file */
- YYSYMBOL_server_trusted_keys_file = 501, /* server_trusted_keys_file */
- YYSYMBOL_server_trust_anchor = 502, /* server_trust_anchor */
- YYSYMBOL_server_trust_anchor_signaling = 503, /* server_trust_anchor_signaling */
- YYSYMBOL_server_root_key_sentinel = 504, /* server_root_key_sentinel */
- YYSYMBOL_server_domain_insecure = 505, /* server_domain_insecure */
- YYSYMBOL_server_hide_identity = 506, /* server_hide_identity */
- YYSYMBOL_server_hide_version = 507, /* server_hide_version */
- YYSYMBOL_server_hide_trustanchor = 508, /* server_hide_trustanchor */
- YYSYMBOL_server_hide_http_user_agent = 509, /* server_hide_http_user_agent */
- YYSYMBOL_server_identity = 510, /* server_identity */
- YYSYMBOL_server_version = 511, /* server_version */
- YYSYMBOL_server_http_user_agent = 512, /* server_http_user_agent */
- YYSYMBOL_server_nsid = 513, /* server_nsid */
- YYSYMBOL_server_so_rcvbuf = 514, /* server_so_rcvbuf */
- YYSYMBOL_server_so_sndbuf = 515, /* server_so_sndbuf */
- YYSYMBOL_server_so_reuseport = 516, /* server_so_reuseport */
- YYSYMBOL_server_ip_transparent = 517, /* server_ip_transparent */
- YYSYMBOL_server_ip_freebind = 518, /* server_ip_freebind */
- YYSYMBOL_server_ip_dscp = 519, /* server_ip_dscp */
- YYSYMBOL_server_stream_wait_size = 520, /* server_stream_wait_size */
- YYSYMBOL_server_edns_buffer_size = 521, /* server_edns_buffer_size */
- YYSYMBOL_server_msg_buffer_size = 522, /* server_msg_buffer_size */
- YYSYMBOL_server_msg_cache_size = 523, /* server_msg_cache_size */
- YYSYMBOL_server_msg_cache_slabs = 524, /* server_msg_cache_slabs */
- YYSYMBOL_server_num_queries_per_thread = 525, /* server_num_queries_per_thread */
- YYSYMBOL_server_jostle_timeout = 526, /* server_jostle_timeout */
- YYSYMBOL_server_delay_close = 527, /* server_delay_close */
- YYSYMBOL_server_udp_connect = 528, /* server_udp_connect */
- YYSYMBOL_server_unblock_lan_zones = 529, /* server_unblock_lan_zones */
- YYSYMBOL_server_insecure_lan_zones = 530, /* server_insecure_lan_zones */
- YYSYMBOL_server_rrset_cache_size = 531, /* server_rrset_cache_size */
- YYSYMBOL_server_rrset_cache_slabs = 532, /* server_rrset_cache_slabs */
- YYSYMBOL_server_infra_host_ttl = 533, /* server_infra_host_ttl */
- YYSYMBOL_server_infra_lame_ttl = 534, /* server_infra_lame_ttl */
- YYSYMBOL_server_infra_cache_numhosts = 535, /* server_infra_cache_numhosts */
- YYSYMBOL_server_infra_cache_lame_size = 536, /* server_infra_cache_lame_size */
- YYSYMBOL_server_infra_cache_slabs = 537, /* server_infra_cache_slabs */
- YYSYMBOL_server_infra_cache_min_rtt = 538, /* server_infra_cache_min_rtt */
- YYSYMBOL_server_infra_cache_max_rtt = 539, /* server_infra_cache_max_rtt */
- YYSYMBOL_server_infra_keep_probing = 540, /* server_infra_keep_probing */
- YYSYMBOL_server_target_fetch_policy = 541, /* server_target_fetch_policy */
- YYSYMBOL_server_harden_short_bufsize = 542, /* server_harden_short_bufsize */
- YYSYMBOL_server_harden_large_queries = 543, /* server_harden_large_queries */
- YYSYMBOL_server_harden_glue = 544, /* server_harden_glue */
- YYSYMBOL_server_harden_unverified_glue = 545, /* server_harden_unverified_glue */
- YYSYMBOL_server_harden_dnssec_stripped = 546, /* server_harden_dnssec_stripped */
- YYSYMBOL_server_harden_below_nxdomain = 547, /* server_harden_below_nxdomain */
- YYSYMBOL_server_harden_referral_path = 548, /* server_harden_referral_path */
- YYSYMBOL_server_harden_algo_downgrade = 549, /* server_harden_algo_downgrade */
- YYSYMBOL_server_harden_unknown_additional = 550, /* server_harden_unknown_additional */
- YYSYMBOL_server_use_caps_for_id = 551, /* server_use_caps_for_id */
- YYSYMBOL_server_caps_whitelist = 552, /* server_caps_whitelist */
- YYSYMBOL_server_private_address = 553, /* server_private_address */
- YYSYMBOL_server_private_domain = 554, /* server_private_domain */
- YYSYMBOL_server_prefetch = 555, /* server_prefetch */
- YYSYMBOL_server_prefetch_key = 556, /* server_prefetch_key */
- YYSYMBOL_server_deny_any = 557, /* server_deny_any */
- YYSYMBOL_server_unwanted_reply_threshold = 558, /* server_unwanted_reply_threshold */
- YYSYMBOL_server_do_not_query_address = 559, /* server_do_not_query_address */
- YYSYMBOL_server_do_not_query_localhost = 560, /* server_do_not_query_localhost */
- YYSYMBOL_server_access_control = 561, /* server_access_control */
- YYSYMBOL_server_interface_action = 562, /* server_interface_action */
- YYSYMBOL_server_module_conf = 563, /* server_module_conf */
- YYSYMBOL_server_val_override_date = 564, /* server_val_override_date */
- YYSYMBOL_server_val_sig_skew_min = 565, /* server_val_sig_skew_min */
- YYSYMBOL_server_val_sig_skew_max = 566, /* server_val_sig_skew_max */
- YYSYMBOL_server_val_max_restart = 567, /* server_val_max_restart */
- YYSYMBOL_server_cache_max_ttl = 568, /* server_cache_max_ttl */
- YYSYMBOL_server_cache_max_negative_ttl = 569, /* server_cache_max_negative_ttl */
- YYSYMBOL_server_cache_min_negative_ttl = 570, /* server_cache_min_negative_ttl */
- YYSYMBOL_server_cache_min_ttl = 571, /* server_cache_min_ttl */
- YYSYMBOL_server_bogus_ttl = 572, /* server_bogus_ttl */
- YYSYMBOL_server_val_clean_additional = 573, /* server_val_clean_additional */
- YYSYMBOL_server_val_permissive_mode = 574, /* server_val_permissive_mode */
- YYSYMBOL_server_aggressive_nsec = 575, /* server_aggressive_nsec */
- YYSYMBOL_server_ignore_cd_flag = 576, /* server_ignore_cd_flag */
- YYSYMBOL_server_disable_edns_do = 577, /* server_disable_edns_do */
- YYSYMBOL_server_serve_expired = 578, /* server_serve_expired */
- YYSYMBOL_server_serve_expired_ttl = 579, /* server_serve_expired_ttl */
- YYSYMBOL_server_serve_expired_ttl_reset = 580, /* server_serve_expired_ttl_reset */
- YYSYMBOL_server_serve_expired_reply_ttl = 581, /* server_serve_expired_reply_ttl */
- YYSYMBOL_server_serve_expired_client_timeout = 582, /* server_serve_expired_client_timeout */
- YYSYMBOL_server_ede_serve_expired = 583, /* server_ede_serve_expired */
- YYSYMBOL_server_serve_original_ttl = 584, /* server_serve_original_ttl */
- YYSYMBOL_server_fake_dsa = 585, /* server_fake_dsa */
- YYSYMBOL_server_fake_sha1 = 586, /* server_fake_sha1 */
- YYSYMBOL_server_val_log_level = 587, /* server_val_log_level */
- YYSYMBOL_server_val_nsec3_keysize_iterations = 588, /* server_val_nsec3_keysize_iterations */
- YYSYMBOL_server_zonemd_permissive_mode = 589, /* server_zonemd_permissive_mode */
- YYSYMBOL_server_add_holddown = 590, /* server_add_holddown */
- YYSYMBOL_server_del_holddown = 591, /* server_del_holddown */
- YYSYMBOL_server_keep_missing = 592, /* server_keep_missing */
- YYSYMBOL_server_permit_small_holddown = 593, /* server_permit_small_holddown */
- YYSYMBOL_server_key_cache_size = 594, /* server_key_cache_size */
- YYSYMBOL_server_key_cache_slabs = 595, /* server_key_cache_slabs */
- YYSYMBOL_server_neg_cache_size = 596, /* server_neg_cache_size */
- YYSYMBOL_server_local_zone = 597, /* server_local_zone */
- YYSYMBOL_server_local_data = 598, /* server_local_data */
- YYSYMBOL_server_local_data_ptr = 599, /* server_local_data_ptr */
- YYSYMBOL_server_minimal_responses = 600, /* server_minimal_responses */
- YYSYMBOL_server_rrset_roundrobin = 601, /* server_rrset_roundrobin */
- YYSYMBOL_server_unknown_server_time_limit = 602, /* server_unknown_server_time_limit */
- YYSYMBOL_server_discard_timeout = 603, /* server_discard_timeout */
- YYSYMBOL_server_wait_limit = 604, /* server_wait_limit */
- YYSYMBOL_server_wait_limit_cookie = 605, /* server_wait_limit_cookie */
- YYSYMBOL_server_wait_limit_netblock = 606, /* server_wait_limit_netblock */
- YYSYMBOL_server_wait_limit_cookie_netblock = 607, /* server_wait_limit_cookie_netblock */
- YYSYMBOL_server_max_udp_size = 608, /* server_max_udp_size */
- YYSYMBOL_server_dns64_prefix = 609, /* server_dns64_prefix */
- YYSYMBOL_server_dns64_synthall = 610, /* server_dns64_synthall */
- YYSYMBOL_server_dns64_ignore_aaaa = 611, /* server_dns64_ignore_aaaa */
- YYSYMBOL_server_nat64_prefix = 612, /* server_nat64_prefix */
- YYSYMBOL_server_define_tag = 613, /* server_define_tag */
- YYSYMBOL_server_local_zone_tag = 614, /* server_local_zone_tag */
- YYSYMBOL_server_access_control_tag = 615, /* server_access_control_tag */
- YYSYMBOL_server_access_control_tag_action = 616, /* server_access_control_tag_action */
- YYSYMBOL_server_access_control_tag_data = 617, /* server_access_control_tag_data */
- YYSYMBOL_server_local_zone_override = 618, /* server_local_zone_override */
- YYSYMBOL_server_access_control_view = 619, /* server_access_control_view */
- YYSYMBOL_server_interface_tag = 620, /* server_interface_tag */
- YYSYMBOL_server_interface_tag_action = 621, /* server_interface_tag_action */
- YYSYMBOL_server_interface_tag_data = 622, /* server_interface_tag_data */
- YYSYMBOL_server_interface_view = 623, /* server_interface_view */
- YYSYMBOL_server_response_ip_tag = 624, /* server_response_ip_tag */
- YYSYMBOL_server_ip_ratelimit = 625, /* server_ip_ratelimit */
- YYSYMBOL_server_ip_ratelimit_cookie = 626, /* server_ip_ratelimit_cookie */
- YYSYMBOL_server_ratelimit = 627, /* server_ratelimit */
- YYSYMBOL_server_ip_ratelimit_size = 628, /* server_ip_ratelimit_size */
- YYSYMBOL_server_ratelimit_size = 629, /* server_ratelimit_size */
- YYSYMBOL_server_ip_ratelimit_slabs = 630, /* server_ip_ratelimit_slabs */
- YYSYMBOL_server_ratelimit_slabs = 631, /* server_ratelimit_slabs */
- YYSYMBOL_server_ratelimit_for_domain = 632, /* server_ratelimit_for_domain */
- YYSYMBOL_server_ratelimit_below_domain = 633, /* server_ratelimit_below_domain */
- YYSYMBOL_server_ip_ratelimit_factor = 634, /* server_ip_ratelimit_factor */
- YYSYMBOL_server_ratelimit_factor = 635, /* server_ratelimit_factor */
- YYSYMBOL_server_ip_ratelimit_backoff = 636, /* server_ip_ratelimit_backoff */
- YYSYMBOL_server_ratelimit_backoff = 637, /* server_ratelimit_backoff */
- YYSYMBOL_server_outbound_msg_retry = 638, /* server_outbound_msg_retry */
- YYSYMBOL_server_max_sent_count = 639, /* server_max_sent_count */
- YYSYMBOL_server_max_query_restarts = 640, /* server_max_query_restarts */
- YYSYMBOL_server_low_rtt = 641, /* server_low_rtt */
- YYSYMBOL_server_fast_server_num = 642, /* server_fast_server_num */
- YYSYMBOL_server_fast_server_permil = 643, /* server_fast_server_permil */
- YYSYMBOL_server_qname_minimisation = 644, /* server_qname_minimisation */
- YYSYMBOL_server_qname_minimisation_strict = 645, /* server_qname_minimisation_strict */
- YYSYMBOL_server_pad_responses = 646, /* server_pad_responses */
- YYSYMBOL_server_pad_responses_block_size = 647, /* server_pad_responses_block_size */
- YYSYMBOL_server_pad_queries = 648, /* server_pad_queries */
- YYSYMBOL_server_pad_queries_block_size = 649, /* server_pad_queries_block_size */
- YYSYMBOL_server_ipsecmod_enabled = 650, /* server_ipsecmod_enabled */
- YYSYMBOL_server_ipsecmod_ignore_bogus = 651, /* server_ipsecmod_ignore_bogus */
- YYSYMBOL_server_ipsecmod_hook = 652, /* server_ipsecmod_hook */
- YYSYMBOL_server_ipsecmod_max_ttl = 653, /* server_ipsecmod_max_ttl */
- YYSYMBOL_server_ipsecmod_whitelist = 654, /* server_ipsecmod_whitelist */
- YYSYMBOL_server_ipsecmod_strict = 655, /* server_ipsecmod_strict */
- YYSYMBOL_server_edns_client_string = 656, /* server_edns_client_string */
- YYSYMBOL_server_edns_client_string_opcode = 657, /* server_edns_client_string_opcode */
- YYSYMBOL_server_ede = 658, /* server_ede */
- YYSYMBOL_server_dns_error_reporting = 659, /* server_dns_error_reporting */
- YYSYMBOL_server_proxy_protocol_port = 660, /* server_proxy_protocol_port */
- YYSYMBOL_stub_name = 661, /* stub_name */
- YYSYMBOL_stub_host = 662, /* stub_host */
- YYSYMBOL_stub_addr = 663, /* stub_addr */
- YYSYMBOL_stub_first = 664, /* stub_first */
- YYSYMBOL_stub_no_cache = 665, /* stub_no_cache */
- YYSYMBOL_stub_ssl_upstream = 666, /* stub_ssl_upstream */
- YYSYMBOL_stub_tcp_upstream = 667, /* stub_tcp_upstream */
- YYSYMBOL_stub_prime = 668, /* stub_prime */
- YYSYMBOL_forward_name = 669, /* forward_name */
- YYSYMBOL_forward_host = 670, /* forward_host */
- YYSYMBOL_forward_addr = 671, /* forward_addr */
- YYSYMBOL_forward_first = 672, /* forward_first */
- YYSYMBOL_forward_no_cache = 673, /* forward_no_cache */
- YYSYMBOL_forward_ssl_upstream = 674, /* forward_ssl_upstream */
- YYSYMBOL_forward_tcp_upstream = 675, /* forward_tcp_upstream */
- YYSYMBOL_auth_name = 676, /* auth_name */
- YYSYMBOL_auth_zonefile = 677, /* auth_zonefile */
- YYSYMBOL_auth_master = 678, /* auth_master */
- YYSYMBOL_auth_url = 679, /* auth_url */
- YYSYMBOL_auth_allow_notify = 680, /* auth_allow_notify */
- YYSYMBOL_auth_zonemd_check = 681, /* auth_zonemd_check */
- YYSYMBOL_auth_zonemd_reject_absence = 682, /* auth_zonemd_reject_absence */
- YYSYMBOL_auth_for_downstream = 683, /* auth_for_downstream */
- YYSYMBOL_auth_for_upstream = 684, /* auth_for_upstream */
- YYSYMBOL_auth_fallback_enabled = 685, /* auth_fallback_enabled */
- YYSYMBOL_view_name = 686, /* view_name */
- YYSYMBOL_view_local_zone = 687, /* view_local_zone */
- YYSYMBOL_view_response_ip = 688, /* view_response_ip */
- YYSYMBOL_view_response_ip_data = 689, /* view_response_ip_data */
- YYSYMBOL_view_local_data = 690, /* view_local_data */
- YYSYMBOL_view_local_data_ptr = 691, /* view_local_data_ptr */
- YYSYMBOL_view_first = 692, /* view_first */
- YYSYMBOL_rcstart = 693, /* rcstart */
- YYSYMBOL_contents_rc = 694, /* contents_rc */
- YYSYMBOL_content_rc = 695, /* content_rc */
- YYSYMBOL_rc_control_enable = 696, /* rc_control_enable */
- YYSYMBOL_rc_control_port = 697, /* rc_control_port */
- YYSYMBOL_rc_control_interface = 698, /* rc_control_interface */
- YYSYMBOL_rc_control_use_cert = 699, /* rc_control_use_cert */
- YYSYMBOL_rc_server_key_file = 700, /* rc_server_key_file */
- YYSYMBOL_rc_server_cert_file = 701, /* rc_server_cert_file */
- YYSYMBOL_rc_control_key_file = 702, /* rc_control_key_file */
- YYSYMBOL_rc_control_cert_file = 703, /* rc_control_cert_file */
- YYSYMBOL_dtstart = 704, /* dtstart */
- YYSYMBOL_contents_dt = 705, /* contents_dt */
- YYSYMBOL_content_dt = 706, /* content_dt */
- YYSYMBOL_dt_dnstap_enable = 707, /* dt_dnstap_enable */
- YYSYMBOL_dt_dnstap_bidirectional = 708, /* dt_dnstap_bidirectional */
- YYSYMBOL_dt_dnstap_socket_path = 709, /* dt_dnstap_socket_path */
- YYSYMBOL_dt_dnstap_ip = 710, /* dt_dnstap_ip */
- YYSYMBOL_dt_dnstap_tls = 711, /* dt_dnstap_tls */
- YYSYMBOL_dt_dnstap_tls_server_name = 712, /* dt_dnstap_tls_server_name */
- YYSYMBOL_dt_dnstap_tls_cert_bundle = 713, /* dt_dnstap_tls_cert_bundle */
- YYSYMBOL_dt_dnstap_tls_client_key_file = 714, /* dt_dnstap_tls_client_key_file */
- YYSYMBOL_dt_dnstap_tls_client_cert_file = 715, /* dt_dnstap_tls_client_cert_file */
- YYSYMBOL_dt_dnstap_send_identity = 716, /* dt_dnstap_send_identity */
- YYSYMBOL_dt_dnstap_send_version = 717, /* dt_dnstap_send_version */
- YYSYMBOL_dt_dnstap_identity = 718, /* dt_dnstap_identity */
- YYSYMBOL_dt_dnstap_version = 719, /* dt_dnstap_version */
- YYSYMBOL_dt_dnstap_log_resolver_query_messages = 720, /* dt_dnstap_log_resolver_query_messages */
- YYSYMBOL_dt_dnstap_log_resolver_response_messages = 721, /* dt_dnstap_log_resolver_response_messages */
- YYSYMBOL_dt_dnstap_log_client_query_messages = 722, /* dt_dnstap_log_client_query_messages */
- YYSYMBOL_dt_dnstap_log_client_response_messages = 723, /* dt_dnstap_log_client_response_messages */
- YYSYMBOL_dt_dnstap_log_forwarder_query_messages = 724, /* dt_dnstap_log_forwarder_query_messages */
- YYSYMBOL_dt_dnstap_log_forwarder_response_messages = 725, /* dt_dnstap_log_forwarder_response_messages */
- YYSYMBOL_dt_dnstap_sample_rate = 726, /* dt_dnstap_sample_rate */
- YYSYMBOL_pythonstart = 727, /* pythonstart */
- YYSYMBOL_contents_py = 728, /* contents_py */
- YYSYMBOL_content_py = 729, /* content_py */
- YYSYMBOL_py_script = 730, /* py_script */
- YYSYMBOL_dynlibstart = 731, /* dynlibstart */
- YYSYMBOL_contents_dl = 732, /* contents_dl */
- YYSYMBOL_content_dl = 733, /* content_dl */
- YYSYMBOL_dl_file = 734, /* dl_file */
- YYSYMBOL_server_disable_dnssec_lame_check = 735, /* server_disable_dnssec_lame_check */
- YYSYMBOL_server_log_identity = 736, /* server_log_identity */
- YYSYMBOL_server_response_ip = 737, /* server_response_ip */
- YYSYMBOL_server_response_ip_data = 738, /* server_response_ip_data */
- YYSYMBOL_dnscstart = 739, /* dnscstart */
- YYSYMBOL_contents_dnsc = 740, /* contents_dnsc */
- YYSYMBOL_content_dnsc = 741, /* content_dnsc */
- YYSYMBOL_dnsc_dnscrypt_enable = 742, /* dnsc_dnscrypt_enable */
- YYSYMBOL_dnsc_dnscrypt_port = 743, /* dnsc_dnscrypt_port */
- YYSYMBOL_dnsc_dnscrypt_provider = 744, /* dnsc_dnscrypt_provider */
- YYSYMBOL_dnsc_dnscrypt_provider_cert = 745, /* dnsc_dnscrypt_provider_cert */
- YYSYMBOL_dnsc_dnscrypt_provider_cert_rotated = 746, /* dnsc_dnscrypt_provider_cert_rotated */
- YYSYMBOL_dnsc_dnscrypt_secret_key = 747, /* dnsc_dnscrypt_secret_key */
- YYSYMBOL_dnsc_dnscrypt_shared_secret_cache_size = 748, /* dnsc_dnscrypt_shared_secret_cache_size */
- YYSYMBOL_dnsc_dnscrypt_shared_secret_cache_slabs = 749, /* dnsc_dnscrypt_shared_secret_cache_slabs */
- YYSYMBOL_dnsc_dnscrypt_nonce_cache_size = 750, /* dnsc_dnscrypt_nonce_cache_size */
- YYSYMBOL_dnsc_dnscrypt_nonce_cache_slabs = 751, /* dnsc_dnscrypt_nonce_cache_slabs */
- YYSYMBOL_cachedbstart = 752, /* cachedbstart */
- YYSYMBOL_contents_cachedb = 753, /* contents_cachedb */
- YYSYMBOL_content_cachedb = 754, /* content_cachedb */
- YYSYMBOL_cachedb_backend_name = 755, /* cachedb_backend_name */
- YYSYMBOL_cachedb_secret_seed = 756, /* cachedb_secret_seed */
- YYSYMBOL_cachedb_no_store = 757, /* cachedb_no_store */
- YYSYMBOL_cachedb_check_when_serve_expired = 758, /* cachedb_check_when_serve_expired */
- YYSYMBOL_redis_server_host = 759, /* redis_server_host */
- YYSYMBOL_redis_replica_server_host = 760, /* redis_replica_server_host */
- YYSYMBOL_redis_server_port = 761, /* redis_server_port */
- YYSYMBOL_redis_replica_server_port = 762, /* redis_replica_server_port */
- YYSYMBOL_redis_server_path = 763, /* redis_server_path */
- YYSYMBOL_redis_replica_server_path = 764, /* redis_replica_server_path */
- YYSYMBOL_redis_server_password = 765, /* redis_server_password */
- YYSYMBOL_redis_replica_server_password = 766, /* redis_replica_server_password */
- YYSYMBOL_redis_timeout = 767, /* redis_timeout */
- YYSYMBOL_redis_replica_timeout = 768, /* redis_replica_timeout */
- YYSYMBOL_redis_command_timeout = 769, /* redis_command_timeout */
- YYSYMBOL_redis_replica_command_timeout = 770, /* redis_replica_command_timeout */
- YYSYMBOL_redis_connect_timeout = 771, /* redis_connect_timeout */
- YYSYMBOL_redis_replica_connect_timeout = 772, /* redis_replica_connect_timeout */
- YYSYMBOL_redis_expire_records = 773, /* redis_expire_records */
- YYSYMBOL_redis_logical_db = 774, /* redis_logical_db */
- YYSYMBOL_redis_replica_logical_db = 775, /* redis_replica_logical_db */
- YYSYMBOL_server_tcp_connection_limit = 776, /* server_tcp_connection_limit */
- YYSYMBOL_server_answer_cookie = 777, /* server_answer_cookie */
- YYSYMBOL_server_cookie_secret = 778, /* server_cookie_secret */
- YYSYMBOL_server_cookie_secret_file = 779, /* server_cookie_secret_file */
- YYSYMBOL_server_iter_scrub_ns = 780, /* server_iter_scrub_ns */
- YYSYMBOL_server_iter_scrub_cname = 781, /* server_iter_scrub_cname */
- YYSYMBOL_server_iter_scrub_rrsig = 782, /* server_iter_scrub_rrsig */
- YYSYMBOL_server_max_global_quota = 783, /* server_max_global_quota */
- YYSYMBOL_server_iter_scrub_promiscuous = 784, /* server_iter_scrub_promiscuous */
- YYSYMBOL_ipsetstart = 785, /* ipsetstart */
- YYSYMBOL_contents_ipset = 786, /* contents_ipset */
- YYSYMBOL_content_ipset = 787, /* content_ipset */
- YYSYMBOL_ipset_name_v4 = 788, /* ipset_name_v4 */
- YYSYMBOL_ipset_name_v6 = 789 /* ipset_name_v6 */
+ YYSYMBOL_VAR_MAX_TRANSFER_SIZE = 376, /* VAR_MAX_TRANSFER_SIZE */
+ YYSYMBOL_VAR_MAX_TRANSFER_TIME = 377, /* VAR_MAX_TRANSFER_TIME */
+ YYSYMBOL_VAR_MAX_GLOBAL_QUOTA = 378, /* VAR_MAX_GLOBAL_QUOTA */
+ YYSYMBOL_VAR_HARDEN_UNVERIFIED_GLUE = 379, /* VAR_HARDEN_UNVERIFIED_GLUE */
+ YYSYMBOL_VAR_LOG_TIME_ISO = 380, /* VAR_LOG_TIME_ISO */
+ YYSYMBOL_VAR_ITER_SCRUB_PROMISCUOUS = 381, /* VAR_ITER_SCRUB_PROMISCUOUS */
+ YYSYMBOL_VAR_LOG_THREAD_ID = 382, /* VAR_LOG_THREAD_ID */
+ YYSYMBOL_YYACCEPT = 383, /* $accept */
+ YYSYMBOL_toplevelvars = 384, /* toplevelvars */
+ YYSYMBOL_toplevelvar = 385, /* toplevelvar */
+ YYSYMBOL_force_toplevel = 386, /* force_toplevel */
+ YYSYMBOL_serverstart = 387, /* serverstart */
+ YYSYMBOL_contents_server = 388, /* contents_server */
+ YYSYMBOL_content_server = 389, /* content_server */
+ YYSYMBOL_stub_clause = 390, /* stub_clause */
+ YYSYMBOL_stubstart = 391, /* stubstart */
+ YYSYMBOL_contents_stub = 392, /* contents_stub */
+ YYSYMBOL_content_stub = 393, /* content_stub */
+ YYSYMBOL_forward_clause = 394, /* forward_clause */
+ YYSYMBOL_forwardstart = 395, /* forwardstart */
+ YYSYMBOL_contents_forward = 396, /* contents_forward */
+ YYSYMBOL_content_forward = 397, /* content_forward */
+ YYSYMBOL_view_clause = 398, /* view_clause */
+ YYSYMBOL_viewstart = 399, /* viewstart */
+ YYSYMBOL_contents_view = 400, /* contents_view */
+ YYSYMBOL_content_view = 401, /* content_view */
+ YYSYMBOL_authstart = 402, /* authstart */
+ YYSYMBOL_contents_auth = 403, /* contents_auth */
+ YYSYMBOL_content_auth = 404, /* content_auth */
+ YYSYMBOL_rpz_tag = 405, /* rpz_tag */
+ YYSYMBOL_rpz_action_override = 406, /* rpz_action_override */
+ YYSYMBOL_rpz_cname_override = 407, /* rpz_cname_override */
+ YYSYMBOL_rpz_log = 408, /* rpz_log */
+ YYSYMBOL_rpz_log_name = 409, /* rpz_log_name */
+ YYSYMBOL_rpz_signal_nxdomain_ra = 410, /* rpz_signal_nxdomain_ra */
+ YYSYMBOL_rpzstart = 411, /* rpzstart */
+ YYSYMBOL_contents_rpz = 412, /* contents_rpz */
+ YYSYMBOL_content_rpz = 413, /* content_rpz */
+ YYSYMBOL_server_num_threads = 414, /* server_num_threads */
+ YYSYMBOL_server_verbosity = 415, /* server_verbosity */
+ YYSYMBOL_server_statistics_interval = 416, /* server_statistics_interval */
+ YYSYMBOL_server_statistics_cumulative = 417, /* server_statistics_cumulative */
+ YYSYMBOL_server_extended_statistics = 418, /* server_extended_statistics */
+ YYSYMBOL_server_statistics_inhibit_zero = 419, /* server_statistics_inhibit_zero */
+ YYSYMBOL_server_shm_enable = 420, /* server_shm_enable */
+ YYSYMBOL_server_shm_key = 421, /* server_shm_key */
+ YYSYMBOL_server_port = 422, /* server_port */
+ YYSYMBOL_server_send_client_subnet = 423, /* server_send_client_subnet */
+ YYSYMBOL_server_client_subnet_zone = 424, /* server_client_subnet_zone */
+ YYSYMBOL_server_client_subnet_always_forward = 425, /* server_client_subnet_always_forward */
+ YYSYMBOL_server_client_subnet_opcode = 426, /* server_client_subnet_opcode */
+ YYSYMBOL_server_max_client_subnet_ipv4 = 427, /* server_max_client_subnet_ipv4 */
+ YYSYMBOL_server_max_client_subnet_ipv6 = 428, /* server_max_client_subnet_ipv6 */
+ YYSYMBOL_server_min_client_subnet_ipv4 = 429, /* server_min_client_subnet_ipv4 */
+ YYSYMBOL_server_min_client_subnet_ipv6 = 430, /* server_min_client_subnet_ipv6 */
+ YYSYMBOL_server_max_ecs_tree_size_ipv4 = 431, /* server_max_ecs_tree_size_ipv4 */
+ YYSYMBOL_server_max_ecs_tree_size_ipv6 = 432, /* server_max_ecs_tree_size_ipv6 */
+ YYSYMBOL_server_interface = 433, /* server_interface */
+ YYSYMBOL_server_outgoing_interface = 434, /* server_outgoing_interface */
+ YYSYMBOL_server_outgoing_range = 435, /* server_outgoing_range */
+ YYSYMBOL_server_outgoing_port_permit = 436, /* server_outgoing_port_permit */
+ YYSYMBOL_server_outgoing_port_avoid = 437, /* server_outgoing_port_avoid */
+ YYSYMBOL_server_outgoing_num_tcp = 438, /* server_outgoing_num_tcp */
+ YYSYMBOL_server_incoming_num_tcp = 439, /* server_incoming_num_tcp */
+ YYSYMBOL_server_interface_automatic = 440, /* server_interface_automatic */
+ YYSYMBOL_server_interface_automatic_ports = 441, /* server_interface_automatic_ports */
+ YYSYMBOL_server_do_ip4 = 442, /* server_do_ip4 */
+ YYSYMBOL_server_do_ip6 = 443, /* server_do_ip6 */
+ YYSYMBOL_server_do_nat64 = 444, /* server_do_nat64 */
+ YYSYMBOL_server_do_udp = 445, /* server_do_udp */
+ YYSYMBOL_server_do_tcp = 446, /* server_do_tcp */
+ YYSYMBOL_server_prefer_ip4 = 447, /* server_prefer_ip4 */
+ YYSYMBOL_server_prefer_ip6 = 448, /* server_prefer_ip6 */
+ YYSYMBOL_server_tcp_mss = 449, /* server_tcp_mss */
+ YYSYMBOL_server_outgoing_tcp_mss = 450, /* server_outgoing_tcp_mss */
+ YYSYMBOL_server_tcp_idle_timeout = 451, /* server_tcp_idle_timeout */
+ YYSYMBOL_server_max_reuse_tcp_queries = 452, /* server_max_reuse_tcp_queries */
+ YYSYMBOL_server_tcp_reuse_timeout = 453, /* server_tcp_reuse_timeout */
+ YYSYMBOL_server_tcp_auth_query_timeout = 454, /* server_tcp_auth_query_timeout */
+ YYSYMBOL_server_tcp_keepalive = 455, /* server_tcp_keepalive */
+ YYSYMBOL_server_tcp_keepalive_timeout = 456, /* server_tcp_keepalive_timeout */
+ YYSYMBOL_server_sock_queue_timeout = 457, /* server_sock_queue_timeout */
+ YYSYMBOL_server_tcp_upstream = 458, /* server_tcp_upstream */
+ YYSYMBOL_server_udp_upstream_without_downstream = 459, /* server_udp_upstream_without_downstream */
+ YYSYMBOL_server_ssl_upstream = 460, /* server_ssl_upstream */
+ YYSYMBOL_server_ssl_service_key = 461, /* server_ssl_service_key */
+ YYSYMBOL_server_ssl_service_pem = 462, /* server_ssl_service_pem */
+ YYSYMBOL_server_ssl_port = 463, /* server_ssl_port */
+ YYSYMBOL_server_tls_cert_bundle = 464, /* server_tls_cert_bundle */
+ YYSYMBOL_server_tls_win_cert = 465, /* server_tls_win_cert */
+ YYSYMBOL_server_tls_additional_port = 466, /* server_tls_additional_port */
+ YYSYMBOL_server_tls_ciphers = 467, /* server_tls_ciphers */
+ YYSYMBOL_server_tls_ciphersuites = 468, /* server_tls_ciphersuites */
+ YYSYMBOL_server_tls_session_ticket_keys = 469, /* server_tls_session_ticket_keys */
+ YYSYMBOL_server_tls_use_sni = 470, /* server_tls_use_sni */
+ YYSYMBOL_server_tls_protocols = 471, /* server_tls_protocols */
+ YYSYMBOL_server_https_port = 472, /* server_https_port */
+ YYSYMBOL_server_http_endpoint = 473, /* server_http_endpoint */
+ YYSYMBOL_server_http_max_streams = 474, /* server_http_max_streams */
+ YYSYMBOL_server_http_query_buffer_size = 475, /* server_http_query_buffer_size */
+ YYSYMBOL_server_http_response_buffer_size = 476, /* server_http_response_buffer_size */
+ YYSYMBOL_server_http_nodelay = 477, /* server_http_nodelay */
+ YYSYMBOL_server_http_notls_downstream = 478, /* server_http_notls_downstream */
+ YYSYMBOL_server_quic_port = 479, /* server_quic_port */
+ YYSYMBOL_server_quic_size = 480, /* server_quic_size */
+ YYSYMBOL_server_use_systemd = 481, /* server_use_systemd */
+ YYSYMBOL_server_do_daemonize = 482, /* server_do_daemonize */
+ YYSYMBOL_server_use_syslog = 483, /* server_use_syslog */
+ YYSYMBOL_server_log_time_ascii = 484, /* server_log_time_ascii */
+ YYSYMBOL_server_log_time_iso = 485, /* server_log_time_iso */
+ YYSYMBOL_server_log_queries = 486, /* server_log_queries */
+ YYSYMBOL_server_log_replies = 487, /* server_log_replies */
+ YYSYMBOL_server_log_tag_queryreply = 488, /* server_log_tag_queryreply */
+ YYSYMBOL_server_log_servfail = 489, /* server_log_servfail */
+ YYSYMBOL_server_log_destaddr = 490, /* server_log_destaddr */
+ YYSYMBOL_server_log_thread_id = 491, /* server_log_thread_id */
+ YYSYMBOL_server_log_local_actions = 492, /* server_log_local_actions */
+ YYSYMBOL_server_chroot = 493, /* server_chroot */
+ YYSYMBOL_server_username = 494, /* server_username */
+ YYSYMBOL_server_directory = 495, /* server_directory */
+ YYSYMBOL_server_logfile = 496, /* server_logfile */
+ YYSYMBOL_server_pidfile = 497, /* server_pidfile */
+ YYSYMBOL_server_root_hints = 498, /* server_root_hints */
+ YYSYMBOL_server_dlv_anchor_file = 499, /* server_dlv_anchor_file */
+ YYSYMBOL_server_dlv_anchor = 500, /* server_dlv_anchor */
+ YYSYMBOL_server_auto_trust_anchor_file = 501, /* server_auto_trust_anchor_file */
+ YYSYMBOL_server_trust_anchor_file = 502, /* server_trust_anchor_file */
+ YYSYMBOL_server_trusted_keys_file = 503, /* server_trusted_keys_file */
+ YYSYMBOL_server_trust_anchor = 504, /* server_trust_anchor */
+ YYSYMBOL_server_trust_anchor_signaling = 505, /* server_trust_anchor_signaling */
+ YYSYMBOL_server_root_key_sentinel = 506, /* server_root_key_sentinel */
+ YYSYMBOL_server_domain_insecure = 507, /* server_domain_insecure */
+ YYSYMBOL_server_hide_identity = 508, /* server_hide_identity */
+ YYSYMBOL_server_hide_version = 509, /* server_hide_version */
+ YYSYMBOL_server_hide_trustanchor = 510, /* server_hide_trustanchor */
+ YYSYMBOL_server_hide_http_user_agent = 511, /* server_hide_http_user_agent */
+ YYSYMBOL_server_identity = 512, /* server_identity */
+ YYSYMBOL_server_version = 513, /* server_version */
+ YYSYMBOL_server_http_user_agent = 514, /* server_http_user_agent */
+ YYSYMBOL_server_nsid = 515, /* server_nsid */
+ YYSYMBOL_server_so_rcvbuf = 516, /* server_so_rcvbuf */
+ YYSYMBOL_server_so_sndbuf = 517, /* server_so_sndbuf */
+ YYSYMBOL_server_so_reuseport = 518, /* server_so_reuseport */
+ YYSYMBOL_server_ip_transparent = 519, /* server_ip_transparent */
+ YYSYMBOL_server_ip_freebind = 520, /* server_ip_freebind */
+ YYSYMBOL_server_ip_dscp = 521, /* server_ip_dscp */
+ YYSYMBOL_server_stream_wait_size = 522, /* server_stream_wait_size */
+ YYSYMBOL_server_edns_buffer_size = 523, /* server_edns_buffer_size */
+ YYSYMBOL_server_msg_buffer_size = 524, /* server_msg_buffer_size */
+ YYSYMBOL_server_msg_cache_size = 525, /* server_msg_cache_size */
+ YYSYMBOL_server_msg_cache_slabs = 526, /* server_msg_cache_slabs */
+ YYSYMBOL_server_num_queries_per_thread = 527, /* server_num_queries_per_thread */
+ YYSYMBOL_server_jostle_timeout = 528, /* server_jostle_timeout */
+ YYSYMBOL_server_delay_close = 529, /* server_delay_close */
+ YYSYMBOL_server_udp_connect = 530, /* server_udp_connect */
+ YYSYMBOL_server_unblock_lan_zones = 531, /* server_unblock_lan_zones */
+ YYSYMBOL_server_insecure_lan_zones = 532, /* server_insecure_lan_zones */
+ YYSYMBOL_server_rrset_cache_size = 533, /* server_rrset_cache_size */
+ YYSYMBOL_server_rrset_cache_slabs = 534, /* server_rrset_cache_slabs */
+ YYSYMBOL_server_infra_host_ttl = 535, /* server_infra_host_ttl */
+ YYSYMBOL_server_infra_lame_ttl = 536, /* server_infra_lame_ttl */
+ YYSYMBOL_server_infra_cache_numhosts = 537, /* server_infra_cache_numhosts */
+ YYSYMBOL_server_infra_cache_lame_size = 538, /* server_infra_cache_lame_size */
+ YYSYMBOL_server_infra_cache_slabs = 539, /* server_infra_cache_slabs */
+ YYSYMBOL_server_infra_cache_min_rtt = 540, /* server_infra_cache_min_rtt */
+ YYSYMBOL_server_infra_cache_max_rtt = 541, /* server_infra_cache_max_rtt */
+ YYSYMBOL_server_infra_keep_probing = 542, /* server_infra_keep_probing */
+ YYSYMBOL_server_target_fetch_policy = 543, /* server_target_fetch_policy */
+ YYSYMBOL_server_harden_short_bufsize = 544, /* server_harden_short_bufsize */
+ YYSYMBOL_server_harden_large_queries = 545, /* server_harden_large_queries */
+ YYSYMBOL_server_harden_glue = 546, /* server_harden_glue */
+ YYSYMBOL_server_harden_unverified_glue = 547, /* server_harden_unverified_glue */
+ YYSYMBOL_server_harden_dnssec_stripped = 548, /* server_harden_dnssec_stripped */
+ YYSYMBOL_server_harden_below_nxdomain = 549, /* server_harden_below_nxdomain */
+ YYSYMBOL_server_harden_referral_path = 550, /* server_harden_referral_path */
+ YYSYMBOL_server_harden_algo_downgrade = 551, /* server_harden_algo_downgrade */
+ YYSYMBOL_server_harden_unknown_additional = 552, /* server_harden_unknown_additional */
+ YYSYMBOL_server_use_caps_for_id = 553, /* server_use_caps_for_id */
+ YYSYMBOL_server_caps_whitelist = 554, /* server_caps_whitelist */
+ YYSYMBOL_server_private_address = 555, /* server_private_address */
+ YYSYMBOL_server_private_domain = 556, /* server_private_domain */
+ YYSYMBOL_server_prefetch = 557, /* server_prefetch */
+ YYSYMBOL_server_prefetch_key = 558, /* server_prefetch_key */
+ YYSYMBOL_server_deny_any = 559, /* server_deny_any */
+ YYSYMBOL_server_unwanted_reply_threshold = 560, /* server_unwanted_reply_threshold */
+ YYSYMBOL_server_do_not_query_address = 561, /* server_do_not_query_address */
+ YYSYMBOL_server_do_not_query_localhost = 562, /* server_do_not_query_localhost */
+ YYSYMBOL_server_access_control = 563, /* server_access_control */
+ YYSYMBOL_server_interface_action = 564, /* server_interface_action */
+ YYSYMBOL_server_module_conf = 565, /* server_module_conf */
+ YYSYMBOL_server_val_override_date = 566, /* server_val_override_date */
+ YYSYMBOL_server_val_sig_skew_min = 567, /* server_val_sig_skew_min */
+ YYSYMBOL_server_val_sig_skew_max = 568, /* server_val_sig_skew_max */
+ YYSYMBOL_server_val_max_restart = 569, /* server_val_max_restart */
+ YYSYMBOL_server_cache_max_ttl = 570, /* server_cache_max_ttl */
+ YYSYMBOL_server_cache_max_negative_ttl = 571, /* server_cache_max_negative_ttl */
+ YYSYMBOL_server_cache_min_negative_ttl = 572, /* server_cache_min_negative_ttl */
+ YYSYMBOL_server_cache_min_ttl = 573, /* server_cache_min_ttl */
+ YYSYMBOL_server_bogus_ttl = 574, /* server_bogus_ttl */
+ YYSYMBOL_server_val_clean_additional = 575, /* server_val_clean_additional */
+ YYSYMBOL_server_val_permissive_mode = 576, /* server_val_permissive_mode */
+ YYSYMBOL_server_aggressive_nsec = 577, /* server_aggressive_nsec */
+ YYSYMBOL_server_ignore_cd_flag = 578, /* server_ignore_cd_flag */
+ YYSYMBOL_server_disable_edns_do = 579, /* server_disable_edns_do */
+ YYSYMBOL_server_serve_expired = 580, /* server_serve_expired */
+ YYSYMBOL_server_serve_expired_ttl = 581, /* server_serve_expired_ttl */
+ YYSYMBOL_server_serve_expired_ttl_reset = 582, /* server_serve_expired_ttl_reset */
+ YYSYMBOL_server_serve_expired_reply_ttl = 583, /* server_serve_expired_reply_ttl */
+ YYSYMBOL_server_serve_expired_client_timeout = 584, /* server_serve_expired_client_timeout */
+ YYSYMBOL_server_ede_serve_expired = 585, /* server_ede_serve_expired */
+ YYSYMBOL_server_serve_original_ttl = 586, /* server_serve_original_ttl */
+ YYSYMBOL_server_fake_dsa = 587, /* server_fake_dsa */
+ YYSYMBOL_server_fake_sha1 = 588, /* server_fake_sha1 */
+ YYSYMBOL_server_val_log_level = 589, /* server_val_log_level */
+ YYSYMBOL_server_val_nsec3_keysize_iterations = 590, /* server_val_nsec3_keysize_iterations */
+ YYSYMBOL_server_zonemd_permissive_mode = 591, /* server_zonemd_permissive_mode */
+ YYSYMBOL_server_add_holddown = 592, /* server_add_holddown */
+ YYSYMBOL_server_del_holddown = 593, /* server_del_holddown */
+ YYSYMBOL_server_keep_missing = 594, /* server_keep_missing */
+ YYSYMBOL_server_permit_small_holddown = 595, /* server_permit_small_holddown */
+ YYSYMBOL_server_key_cache_size = 596, /* server_key_cache_size */
+ YYSYMBOL_server_key_cache_slabs = 597, /* server_key_cache_slabs */
+ YYSYMBOL_server_neg_cache_size = 598, /* server_neg_cache_size */
+ YYSYMBOL_server_local_zone = 599, /* server_local_zone */
+ YYSYMBOL_server_local_data = 600, /* server_local_data */
+ YYSYMBOL_server_local_data_ptr = 601, /* server_local_data_ptr */
+ YYSYMBOL_server_minimal_responses = 602, /* server_minimal_responses */
+ YYSYMBOL_server_rrset_roundrobin = 603, /* server_rrset_roundrobin */
+ YYSYMBOL_server_unknown_server_time_limit = 604, /* server_unknown_server_time_limit */
+ YYSYMBOL_server_discard_timeout = 605, /* server_discard_timeout */
+ YYSYMBOL_server_wait_limit = 606, /* server_wait_limit */
+ YYSYMBOL_server_wait_limit_cookie = 607, /* server_wait_limit_cookie */
+ YYSYMBOL_server_wait_limit_netblock = 608, /* server_wait_limit_netblock */
+ YYSYMBOL_server_wait_limit_cookie_netblock = 609, /* server_wait_limit_cookie_netblock */
+ YYSYMBOL_server_max_udp_size = 610, /* server_max_udp_size */
+ YYSYMBOL_server_dns64_prefix = 611, /* server_dns64_prefix */
+ YYSYMBOL_server_dns64_synthall = 612, /* server_dns64_synthall */
+ YYSYMBOL_server_dns64_ignore_aaaa = 613, /* server_dns64_ignore_aaaa */
+ YYSYMBOL_server_nat64_prefix = 614, /* server_nat64_prefix */
+ YYSYMBOL_server_define_tag = 615, /* server_define_tag */
+ YYSYMBOL_server_local_zone_tag = 616, /* server_local_zone_tag */
+ YYSYMBOL_server_access_control_tag = 617, /* server_access_control_tag */
+ YYSYMBOL_server_access_control_tag_action = 618, /* server_access_control_tag_action */
+ YYSYMBOL_server_access_control_tag_data = 619, /* server_access_control_tag_data */
+ YYSYMBOL_server_local_zone_override = 620, /* server_local_zone_override */
+ YYSYMBOL_server_access_control_view = 621, /* server_access_control_view */
+ YYSYMBOL_server_interface_tag = 622, /* server_interface_tag */
+ YYSYMBOL_server_interface_tag_action = 623, /* server_interface_tag_action */
+ YYSYMBOL_server_interface_tag_data = 624, /* server_interface_tag_data */
+ YYSYMBOL_server_interface_view = 625, /* server_interface_view */
+ YYSYMBOL_server_response_ip_tag = 626, /* server_response_ip_tag */
+ YYSYMBOL_server_ip_ratelimit = 627, /* server_ip_ratelimit */
+ YYSYMBOL_server_ip_ratelimit_cookie = 628, /* server_ip_ratelimit_cookie */
+ YYSYMBOL_server_ratelimit = 629, /* server_ratelimit */
+ YYSYMBOL_server_ip_ratelimit_size = 630, /* server_ip_ratelimit_size */
+ YYSYMBOL_server_ratelimit_size = 631, /* server_ratelimit_size */
+ YYSYMBOL_server_ip_ratelimit_slabs = 632, /* server_ip_ratelimit_slabs */
+ YYSYMBOL_server_ratelimit_slabs = 633, /* server_ratelimit_slabs */
+ YYSYMBOL_server_ratelimit_for_domain = 634, /* server_ratelimit_for_domain */
+ YYSYMBOL_server_ratelimit_below_domain = 635, /* server_ratelimit_below_domain */
+ YYSYMBOL_server_ip_ratelimit_factor = 636, /* server_ip_ratelimit_factor */
+ YYSYMBOL_server_ratelimit_factor = 637, /* server_ratelimit_factor */
+ YYSYMBOL_server_ip_ratelimit_backoff = 638, /* server_ip_ratelimit_backoff */
+ YYSYMBOL_server_ratelimit_backoff = 639, /* server_ratelimit_backoff */
+ YYSYMBOL_server_outbound_msg_retry = 640, /* server_outbound_msg_retry */
+ YYSYMBOL_server_max_sent_count = 641, /* server_max_sent_count */
+ YYSYMBOL_server_max_query_restarts = 642, /* server_max_query_restarts */
+ YYSYMBOL_server_low_rtt = 643, /* server_low_rtt */
+ YYSYMBOL_server_fast_server_num = 644, /* server_fast_server_num */
+ YYSYMBOL_server_fast_server_permil = 645, /* server_fast_server_permil */
+ YYSYMBOL_server_qname_minimisation = 646, /* server_qname_minimisation */
+ YYSYMBOL_server_qname_minimisation_strict = 647, /* server_qname_minimisation_strict */
+ YYSYMBOL_server_pad_responses = 648, /* server_pad_responses */
+ YYSYMBOL_server_pad_responses_block_size = 649, /* server_pad_responses_block_size */
+ YYSYMBOL_server_pad_queries = 650, /* server_pad_queries */
+ YYSYMBOL_server_pad_queries_block_size = 651, /* server_pad_queries_block_size */
+ YYSYMBOL_server_ipsecmod_enabled = 652, /* server_ipsecmod_enabled */
+ YYSYMBOL_server_ipsecmod_ignore_bogus = 653, /* server_ipsecmod_ignore_bogus */
+ YYSYMBOL_server_ipsecmod_hook = 654, /* server_ipsecmod_hook */
+ YYSYMBOL_server_ipsecmod_max_ttl = 655, /* server_ipsecmod_max_ttl */
+ YYSYMBOL_server_ipsecmod_whitelist = 656, /* server_ipsecmod_whitelist */
+ YYSYMBOL_server_ipsecmod_strict = 657, /* server_ipsecmod_strict */
+ YYSYMBOL_server_edns_client_string = 658, /* server_edns_client_string */
+ YYSYMBOL_server_edns_client_string_opcode = 659, /* server_edns_client_string_opcode */
+ YYSYMBOL_server_ede = 660, /* server_ede */
+ YYSYMBOL_server_dns_error_reporting = 661, /* server_dns_error_reporting */
+ YYSYMBOL_server_proxy_protocol_port = 662, /* server_proxy_protocol_port */
+ YYSYMBOL_stub_name = 663, /* stub_name */
+ YYSYMBOL_stub_host = 664, /* stub_host */
+ YYSYMBOL_stub_addr = 665, /* stub_addr */
+ YYSYMBOL_stub_first = 666, /* stub_first */
+ YYSYMBOL_stub_no_cache = 667, /* stub_no_cache */
+ YYSYMBOL_stub_ssl_upstream = 668, /* stub_ssl_upstream */
+ YYSYMBOL_stub_tcp_upstream = 669, /* stub_tcp_upstream */
+ YYSYMBOL_stub_prime = 670, /* stub_prime */
+ YYSYMBOL_forward_name = 671, /* forward_name */
+ YYSYMBOL_forward_host = 672, /* forward_host */
+ YYSYMBOL_forward_addr = 673, /* forward_addr */
+ YYSYMBOL_forward_first = 674, /* forward_first */
+ YYSYMBOL_forward_no_cache = 675, /* forward_no_cache */
+ YYSYMBOL_forward_ssl_upstream = 676, /* forward_ssl_upstream */
+ YYSYMBOL_forward_tcp_upstream = 677, /* forward_tcp_upstream */
+ YYSYMBOL_auth_name = 678, /* auth_name */
+ YYSYMBOL_auth_zonefile = 679, /* auth_zonefile */
+ YYSYMBOL_auth_master = 680, /* auth_master */
+ YYSYMBOL_auth_url = 681, /* auth_url */
+ YYSYMBOL_auth_allow_notify = 682, /* auth_allow_notify */
+ YYSYMBOL_auth_zonemd_check = 683, /* auth_zonemd_check */
+ YYSYMBOL_auth_zonemd_reject_absence = 684, /* auth_zonemd_reject_absence */
+ YYSYMBOL_auth_for_downstream = 685, /* auth_for_downstream */
+ YYSYMBOL_auth_for_upstream = 686, /* auth_for_upstream */
+ YYSYMBOL_auth_fallback_enabled = 687, /* auth_fallback_enabled */
+ YYSYMBOL_auth_max_transfer_size = 688, /* auth_max_transfer_size */
+ YYSYMBOL_auth_max_transfer_time = 689, /* auth_max_transfer_time */
+ YYSYMBOL_view_name = 690, /* view_name */
+ YYSYMBOL_view_local_zone = 691, /* view_local_zone */
+ YYSYMBOL_view_response_ip = 692, /* view_response_ip */
+ YYSYMBOL_view_response_ip_data = 693, /* view_response_ip_data */
+ YYSYMBOL_view_local_data = 694, /* view_local_data */
+ YYSYMBOL_view_local_data_ptr = 695, /* view_local_data_ptr */
+ YYSYMBOL_view_first = 696, /* view_first */
+ YYSYMBOL_rcstart = 697, /* rcstart */
+ YYSYMBOL_contents_rc = 698, /* contents_rc */
+ YYSYMBOL_content_rc = 699, /* content_rc */
+ YYSYMBOL_rc_control_enable = 700, /* rc_control_enable */
+ YYSYMBOL_rc_control_port = 701, /* rc_control_port */
+ YYSYMBOL_rc_control_interface = 702, /* rc_control_interface */
+ YYSYMBOL_rc_control_use_cert = 703, /* rc_control_use_cert */
+ YYSYMBOL_rc_server_key_file = 704, /* rc_server_key_file */
+ YYSYMBOL_rc_server_cert_file = 705, /* rc_server_cert_file */
+ YYSYMBOL_rc_control_key_file = 706, /* rc_control_key_file */
+ YYSYMBOL_rc_control_cert_file = 707, /* rc_control_cert_file */
+ YYSYMBOL_dtstart = 708, /* dtstart */
+ YYSYMBOL_contents_dt = 709, /* contents_dt */
+ YYSYMBOL_content_dt = 710, /* content_dt */
+ YYSYMBOL_dt_dnstap_enable = 711, /* dt_dnstap_enable */
+ YYSYMBOL_dt_dnstap_bidirectional = 712, /* dt_dnstap_bidirectional */
+ YYSYMBOL_dt_dnstap_socket_path = 713, /* dt_dnstap_socket_path */
+ YYSYMBOL_dt_dnstap_ip = 714, /* dt_dnstap_ip */
+ YYSYMBOL_dt_dnstap_tls = 715, /* dt_dnstap_tls */
+ YYSYMBOL_dt_dnstap_tls_server_name = 716, /* dt_dnstap_tls_server_name */
+ YYSYMBOL_dt_dnstap_tls_cert_bundle = 717, /* dt_dnstap_tls_cert_bundle */
+ YYSYMBOL_dt_dnstap_tls_client_key_file = 718, /* dt_dnstap_tls_client_key_file */
+ YYSYMBOL_dt_dnstap_tls_client_cert_file = 719, /* dt_dnstap_tls_client_cert_file */
+ YYSYMBOL_dt_dnstap_send_identity = 720, /* dt_dnstap_send_identity */
+ YYSYMBOL_dt_dnstap_send_version = 721, /* dt_dnstap_send_version */
+ YYSYMBOL_dt_dnstap_identity = 722, /* dt_dnstap_identity */
+ YYSYMBOL_dt_dnstap_version = 723, /* dt_dnstap_version */
+ YYSYMBOL_dt_dnstap_log_resolver_query_messages = 724, /* dt_dnstap_log_resolver_query_messages */
+ YYSYMBOL_dt_dnstap_log_resolver_response_messages = 725, /* dt_dnstap_log_resolver_response_messages */
+ YYSYMBOL_dt_dnstap_log_client_query_messages = 726, /* dt_dnstap_log_client_query_messages */
+ YYSYMBOL_dt_dnstap_log_client_response_messages = 727, /* dt_dnstap_log_client_response_messages */
+ YYSYMBOL_dt_dnstap_log_forwarder_query_messages = 728, /* dt_dnstap_log_forwarder_query_messages */
+ YYSYMBOL_dt_dnstap_log_forwarder_response_messages = 729, /* dt_dnstap_log_forwarder_response_messages */
+ YYSYMBOL_dt_dnstap_sample_rate = 730, /* dt_dnstap_sample_rate */
+ YYSYMBOL_pythonstart = 731, /* pythonstart */
+ YYSYMBOL_contents_py = 732, /* contents_py */
+ YYSYMBOL_content_py = 733, /* content_py */
+ YYSYMBOL_py_script = 734, /* py_script */
+ YYSYMBOL_dynlibstart = 735, /* dynlibstart */
+ YYSYMBOL_contents_dl = 736, /* contents_dl */
+ YYSYMBOL_content_dl = 737, /* content_dl */
+ YYSYMBOL_dl_file = 738, /* dl_file */
+ YYSYMBOL_server_disable_dnssec_lame_check = 739, /* server_disable_dnssec_lame_check */
+ YYSYMBOL_server_log_identity = 740, /* server_log_identity */
+ YYSYMBOL_server_response_ip = 741, /* server_response_ip */
+ YYSYMBOL_server_response_ip_data = 742, /* server_response_ip_data */
+ YYSYMBOL_dnscstart = 743, /* dnscstart */
+ YYSYMBOL_contents_dnsc = 744, /* contents_dnsc */
+ YYSYMBOL_content_dnsc = 745, /* content_dnsc */
+ YYSYMBOL_dnsc_dnscrypt_enable = 746, /* dnsc_dnscrypt_enable */
+ YYSYMBOL_dnsc_dnscrypt_port = 747, /* dnsc_dnscrypt_port */
+ YYSYMBOL_dnsc_dnscrypt_provider = 748, /* dnsc_dnscrypt_provider */
+ YYSYMBOL_dnsc_dnscrypt_provider_cert = 749, /* dnsc_dnscrypt_provider_cert */
+ YYSYMBOL_dnsc_dnscrypt_provider_cert_rotated = 750, /* dnsc_dnscrypt_provider_cert_rotated */
+ YYSYMBOL_dnsc_dnscrypt_secret_key = 751, /* dnsc_dnscrypt_secret_key */
+ YYSYMBOL_dnsc_dnscrypt_shared_secret_cache_size = 752, /* dnsc_dnscrypt_shared_secret_cache_size */
+ YYSYMBOL_dnsc_dnscrypt_shared_secret_cache_slabs = 753, /* dnsc_dnscrypt_shared_secret_cache_slabs */
+ YYSYMBOL_dnsc_dnscrypt_nonce_cache_size = 754, /* dnsc_dnscrypt_nonce_cache_size */
+ YYSYMBOL_dnsc_dnscrypt_nonce_cache_slabs = 755, /* dnsc_dnscrypt_nonce_cache_slabs */
+ YYSYMBOL_cachedbstart = 756, /* cachedbstart */
+ YYSYMBOL_contents_cachedb = 757, /* contents_cachedb */
+ YYSYMBOL_content_cachedb = 758, /* content_cachedb */
+ YYSYMBOL_cachedb_backend_name = 759, /* cachedb_backend_name */
+ YYSYMBOL_cachedb_secret_seed = 760, /* cachedb_secret_seed */
+ YYSYMBOL_cachedb_no_store = 761, /* cachedb_no_store */
+ YYSYMBOL_cachedb_check_when_serve_expired = 762, /* cachedb_check_when_serve_expired */
+ YYSYMBOL_redis_server_host = 763, /* redis_server_host */
+ YYSYMBOL_redis_replica_server_host = 764, /* redis_replica_server_host */
+ YYSYMBOL_redis_server_port = 765, /* redis_server_port */
+ YYSYMBOL_redis_replica_server_port = 766, /* redis_replica_server_port */
+ YYSYMBOL_redis_server_path = 767, /* redis_server_path */
+ YYSYMBOL_redis_replica_server_path = 768, /* redis_replica_server_path */
+ YYSYMBOL_redis_server_password = 769, /* redis_server_password */
+ YYSYMBOL_redis_replica_server_password = 770, /* redis_replica_server_password */
+ YYSYMBOL_redis_timeout = 771, /* redis_timeout */
+ YYSYMBOL_redis_replica_timeout = 772, /* redis_replica_timeout */
+ YYSYMBOL_redis_command_timeout = 773, /* redis_command_timeout */
+ YYSYMBOL_redis_replica_command_timeout = 774, /* redis_replica_command_timeout */
+ YYSYMBOL_redis_connect_timeout = 775, /* redis_connect_timeout */
+ YYSYMBOL_redis_replica_connect_timeout = 776, /* redis_replica_connect_timeout */
+ YYSYMBOL_redis_expire_records = 777, /* redis_expire_records */
+ YYSYMBOL_redis_logical_db = 778, /* redis_logical_db */
+ YYSYMBOL_redis_replica_logical_db = 779, /* redis_replica_logical_db */
+ YYSYMBOL_server_tcp_connection_limit = 780, /* server_tcp_connection_limit */
+ YYSYMBOL_server_answer_cookie = 781, /* server_answer_cookie */
+ YYSYMBOL_server_cookie_secret = 782, /* server_cookie_secret */
+ YYSYMBOL_server_cookie_secret_file = 783, /* server_cookie_secret_file */
+ YYSYMBOL_server_iter_scrub_ns = 784, /* server_iter_scrub_ns */
+ YYSYMBOL_server_iter_scrub_cname = 785, /* server_iter_scrub_cname */
+ YYSYMBOL_server_iter_scrub_rrsig = 786, /* server_iter_scrub_rrsig */
+ YYSYMBOL_server_max_global_quota = 787, /* server_max_global_quota */
+ YYSYMBOL_server_iter_scrub_promiscuous = 788, /* server_iter_scrub_promiscuous */
+ YYSYMBOL_ipsetstart = 789, /* ipsetstart */
+ YYSYMBOL_contents_ipset = 790, /* contents_ipset */
+ YYSYMBOL_content_ipset = 791, /* content_ipset */
+ YYSYMBOL_ipset_name_v4 = 792, /* ipset_name_v4 */
+ YYSYMBOL_ipset_name_v6 = 793 /* ipset_name_v6 */
};
typedef enum yysymbol_kind_t yysymbol_kind_t;
@@ -1243,19 +1247,19 @@ union yyalloc
/* YYFINAL -- State number of the termination state. */
#define YYFINAL 2
/* YYLAST -- Last index in YYTABLE. */
-#define YYLAST 813
+#define YYLAST 821
/* YYNTOKENS -- Number of terminals. */
-#define YYNTOKENS 381
+#define YYNTOKENS 383
/* YYNNTS -- Number of nonterminals. */
-#define YYNNTS 409
+#define YYNNTS 411
/* YYNRULES -- Number of rules. */
-#define YYNRULES 792
+#define YYNRULES 798
/* YYNSTATES -- Number of states. */
-#define YYNSTATES 1186
+#define YYNSTATES 1194
/* YYMAXUTOK -- Last valid token kind. */
-#define YYMAXUTOK 635
+#define YYMAXUTOK 637
/* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM
@@ -1332,93 +1336,93 @@ static const yytype_int16 yytranslate[] =
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
+ 375, 376, 377, 378, 379, 380, 381, 382
};
#if YYDEBUG
/* YYRLINE[YYN] -- Source line where rule number YYN was defined. */
static const yytype_int16 yyrline[] =
{
- 0, 223, 223, 223, 224, 224, 225, 225, 226, 226,
- 226, 227, 227, 228, 228, 229, 229, 230, 232, 239,
- 245, 246, 247, 247, 247, 248, 248, 249, 249, 249,
- 250, 250, 250, 251, 251, 251, 252, 252, 253, 254,
- 254, 254, 255, 255, 255, 256, 256, 257, 257, 258,
- 258, 259, 259, 260, 260, 261, 261, 262, 262, 263,
- 263, 264, 264, 264, 265, 265, 266, 266, 266, 267,
- 267, 267, 268, 268, 269, 269, 270, 270, 271, 271,
- 272, 272, 272, 273, 273, 274, 274, 275, 275, 275,
- 276, 276, 277, 277, 278, 278, 279, 279, 279, 280,
- 280, 281, 281, 282, 282, 283, 283, 284, 284, 285,
- 285, 286, 286, 287, 287, 288, 288, 288, 289, 289,
- 289, 290, 290, 290, 291, 291, 291, 291, 292, 292,
- 293, 293, 293, 294, 294, 294, 295, 295, 296, 296,
- 297, 297, 297, 298, 298, 298, 299, 299, 300, 300,
- 300, 301, 302, 302, 302, 303, 303, 303, 304, 304,
- 305, 305, 306, 306, 307, 308, 308, 309, 309, 310,
- 310, 311, 311, 312, 312, 313, 313, 314, 314, 315,
- 315, 316, 316, 317, 317, 318, 319, 319, 320, 320,
- 320, 321, 321, 322, 322, 323, 323, 324, 324, 324,
- 325, 325, 326, 327, 327, 328, 328, 329, 330, 330,
- 331, 331, 332, 332, 332, 333, 333, 334, 334, 334,
- 335, 335, 335, 336, 336, 337, 338, 338, 339, 339,
- 340, 340, 341, 341, 342, 342, 342, 343, 343, 343,
- 344, 344, 344, 345, 345, 346, 346, 346, 347, 347,
- 348, 348, 349, 349, 350, 350, 350, 351, 351, 351,
- 352, 352, 353, 353, 354, 354, 355, 355, 356, 356,
- 357, 358, 358, 359, 359, 360, 360, 361, 361, 361,
- 362, 363, 363, 363, 365, 373, 387, 388, 389, 389,
- 389, 389, 389, 390, 390, 390, 392, 400, 414, 415,
- 416, 416, 416, 416, 417, 417, 417, 419, 427, 441,
- 442, 443, 443, 443, 443, 444, 444, 444, 446, 467,
- 468, 469, 469, 469, 469, 470, 470, 470, 471, 471,
- 471, 474, 493, 510, 518, 528, 535, 545, 564, 565,
- 566, 566, 566, 566, 566, 567, 567, 567, 568, 568,
- 568, 568, 570, 579, 588, 599, 608, 617, 626, 635,
- 646, 655, 667, 681, 696, 707, 724, 741, 758, 775,
- 790, 805, 818, 833, 842, 851, 860, 869, 878, 887,
- 894, 903, 912, 921, 930, 939, 948, 957, 966, 975,
- 988, 999, 1010, 1021, 1030, 1043, 1056, 1065, 1074, 1083,
- 1090, 1097, 1106, 1113, 1122, 1130, 1137, 1144, 1152, 1161,
- 1170, 1178, 1196, 1204, 1212, 1220, 1228, 1236, 1252, 1259,
- 1268, 1277, 1291, 1300, 1309, 1318, 1327, 1336, 1345, 1354,
- 1363, 1372, 1379, 1386, 1412, 1420, 1427, 1434, 1441, 1448,
- 1456, 1464, 1472, 1479, 1490, 1501, 1508, 1517, 1526, 1535,
- 1544, 1551, 1558, 1565, 1581, 1589, 1597, 1607, 1617, 1627,
- 1641, 1649, 1662, 1673, 1681, 1694, 1703, 1712, 1721, 1730,
- 1740, 1750, 1758, 1771, 1780, 1788, 1797, 1805, 1818, 1827,
- 1836, 1846, 1853, 1863, 1873, 1883, 1893, 1903, 1913, 1923,
- 1933, 1943, 1953, 1960, 1967, 1974, 1983, 1992, 2001, 2010,
- 2017, 2027, 2035, 2044, 2051, 2069, 2082, 2095, 2108, 2117,
- 2126, 2135, 2144, 2153, 2163, 2173, 2184, 2193, 2202, 2211,
- 2220, 2229, 2238, 2247, 2256, 2265, 2278, 2291, 2300, 2307,
- 2316, 2325, 2334, 2343, 2353, 2361, 2374, 2382, 2438, 2445,
- 2460, 2470, 2480, 2487, 2494, 2501, 2508, 2523, 2538, 2545,
- 2552, 2561, 2569, 2576, 2590, 2611, 2632, 2644, 2656, 2668,
- 2677, 2698, 2710, 2722, 2731, 2752, 2761, 2770, 2779, 2787,
- 2795, 2808, 2821, 2836, 2851, 2860, 2869, 2879, 2889, 2898,
- 2907, 2916, 2922, 2931, 2940, 2950, 2960, 2970, 2979, 2989,
- 2998, 3011, 3024, 3036, 3050, 3062, 3076, 3085, 3096, 3105,
- 3114, 3121, 3131, 3138, 3145, 3154, 3163, 3173, 3183, 3193,
- 3203, 3210, 3217, 3226, 3235, 3245, 3255, 3265, 3272, 3279,
- 3286, 3294, 3304, 3314, 3324, 3334, 3344, 3354, 3410, 3420,
- 3428, 3436, 3451, 3460, 3466, 3467, 3468, 3468, 3468, 3469,
- 3469, 3469, 3470, 3470, 3472, 3482, 3491, 3498, 3505, 3512,
- 3519, 3526, 3533, 3539, 3540, 3541, 3541, 3541, 3542, 3542,
- 3542, 3543, 3544, 3544, 3545, 3545, 3546, 3546, 3547, 3548,
- 3549, 3550, 3551, 3552, 3553, 3555, 3564, 3574, 3581, 3588,
- 3597, 3604, 3611, 3618, 3625, 3634, 3643, 3650, 3657, 3667,
- 3677, 3687, 3697, 3707, 3717, 3728, 3734, 3735, 3736, 3738,
- 3745, 3751, 3752, 3753, 3755, 3762, 3772, 3779, 3788, 3796,
- 3802, 3803, 3805, 3805, 3805, 3806, 3806, 3807, 3808, 3809,
- 3810, 3811, 3813, 3822, 3831, 3838, 3847, 3854, 3863, 3871,
- 3884, 3892, 3905, 3911, 3912, 3913, 3913, 3914, 3914, 3915,
- 3915, 3916, 3916, 3917, 3917, 3918, 3918, 3919, 3919, 3920,
- 3920, 3921, 3921, 3922, 3922, 3923, 3925, 3937, 3949, 3962,
- 3975, 3987, 3999, 4014, 4029, 4041, 4053, 4065, 4077, 4090,
- 4103, 4116, 4129, 4142, 4155, 4168, 4183, 4198, 4209, 4218,
- 4234, 4241, 4250, 4259, 4268, 4277, 4287, 4293, 4294, 4295,
- 4295, 4297, 4312
+ 0, 224, 224, 224, 225, 225, 226, 226, 227, 227,
+ 227, 228, 228, 229, 229, 230, 230, 231, 233, 240,
+ 246, 247, 248, 248, 248, 249, 249, 250, 250, 250,
+ 251, 251, 251, 252, 252, 252, 253, 253, 254, 255,
+ 255, 255, 256, 256, 256, 257, 257, 258, 258, 259,
+ 259, 260, 260, 261, 261, 262, 262, 263, 263, 264,
+ 264, 265, 265, 265, 266, 266, 267, 267, 267, 268,
+ 268, 268, 269, 269, 270, 270, 271, 271, 272, 272,
+ 273, 273, 273, 274, 274, 275, 275, 276, 276, 276,
+ 277, 277, 278, 278, 279, 279, 280, 280, 280, 281,
+ 281, 282, 282, 283, 283, 284, 284, 285, 285, 286,
+ 286, 287, 287, 288, 288, 289, 289, 289, 290, 290,
+ 290, 291, 291, 291, 292, 292, 292, 292, 293, 293,
+ 294, 294, 294, 295, 295, 295, 296, 296, 297, 297,
+ 298, 298, 298, 299, 299, 299, 300, 300, 301, 301,
+ 301, 302, 303, 303, 303, 304, 304, 304, 305, 305,
+ 306, 306, 307, 307, 308, 309, 309, 310, 310, 311,
+ 311, 312, 312, 313, 313, 314, 314, 315, 315, 316,
+ 316, 317, 317, 318, 318, 319, 320, 320, 321, 321,
+ 321, 322, 322, 323, 323, 324, 324, 325, 325, 325,
+ 326, 326, 327, 328, 328, 329, 329, 330, 331, 331,
+ 332, 332, 333, 333, 333, 334, 334, 335, 335, 335,
+ 336, 336, 336, 337, 337, 338, 339, 339, 340, 340,
+ 341, 341, 342, 342, 343, 343, 343, 344, 344, 344,
+ 345, 345, 345, 346, 346, 347, 347, 347, 348, 348,
+ 349, 349, 350, 350, 351, 351, 351, 352, 352, 352,
+ 353, 353, 354, 354, 355, 355, 356, 356, 357, 357,
+ 358, 359, 359, 360, 360, 361, 361, 362, 362, 362,
+ 363, 364, 364, 364, 366, 374, 388, 389, 390, 390,
+ 390, 390, 390, 391, 391, 391, 393, 401, 415, 416,
+ 417, 417, 417, 417, 418, 418, 418, 420, 428, 442,
+ 443, 444, 444, 444, 444, 445, 445, 445, 447, 470,
+ 471, 472, 472, 472, 472, 473, 473, 473, 474, 474,
+ 474, 475, 475, 478, 497, 514, 522, 532, 539, 549,
+ 570, 571, 572, 572, 572, 572, 572, 573, 573, 573,
+ 574, 574, 574, 574, 575, 575, 577, 586, 595, 606,
+ 615, 624, 633, 642, 653, 662, 674, 688, 703, 714,
+ 731, 748, 765, 782, 797, 812, 825, 840, 849, 858,
+ 867, 876, 885, 894, 901, 910, 919, 928, 937, 946,
+ 955, 964, 973, 982, 995, 1006, 1017, 1028, 1037, 1050,
+ 1063, 1072, 1081, 1090, 1097, 1104, 1113, 1120, 1129, 1137,
+ 1144, 1151, 1159, 1168, 1177, 1185, 1203, 1211, 1219, 1227,
+ 1235, 1243, 1259, 1266, 1275, 1284, 1298, 1307, 1316, 1325,
+ 1334, 1343, 1352, 1361, 1370, 1379, 1386, 1393, 1419, 1427,
+ 1434, 1441, 1448, 1455, 1463, 1471, 1479, 1486, 1497, 1508,
+ 1515, 1524, 1533, 1542, 1551, 1558, 1565, 1572, 1588, 1596,
+ 1604, 1614, 1624, 1634, 1648, 1656, 1669, 1680, 1688, 1701,
+ 1710, 1719, 1728, 1737, 1747, 1757, 1765, 1778, 1787, 1795,
+ 1804, 1812, 1825, 1834, 1843, 1853, 1860, 1870, 1880, 1890,
+ 1900, 1910, 1920, 1930, 1940, 1950, 1960, 1967, 1974, 1981,
+ 1990, 1999, 2008, 2017, 2024, 2034, 2042, 2051, 2058, 2076,
+ 2089, 2102, 2115, 2124, 2133, 2142, 2151, 2160, 2170, 2180,
+ 2191, 2200, 2209, 2218, 2227, 2236, 2245, 2254, 2263, 2272,
+ 2285, 2298, 2307, 2314, 2323, 2332, 2341, 2350, 2360, 2368,
+ 2381, 2389, 2453, 2460, 2475, 2485, 2495, 2502, 2509, 2516,
+ 2523, 2537, 2551, 2558, 2565, 2574, 2582, 2589, 2603, 2624,
+ 2645, 2657, 2669, 2681, 2690, 2711, 2723, 2735, 2744, 2765,
+ 2774, 2783, 2792, 2800, 2808, 2821, 2834, 2848, 2862, 2871,
+ 2880, 2890, 2900, 2909, 2918, 2927, 2933, 2942, 2951, 2961,
+ 2971, 2981, 2990, 3000, 3009, 3022, 3035, 3047, 3061, 3073,
+ 3087, 3095, 3106, 3115, 3124, 3131, 3141, 3148, 3155, 3164,
+ 3173, 3183, 3193, 3203, 3213, 3220, 3227, 3236, 3245, 3255,
+ 3265, 3275, 3282, 3289, 3296, 3304, 3314, 3324, 3334, 3344,
+ 3354, 3362, 3371, 3381, 3440, 3449, 3457, 3465, 3480, 3489,
+ 3495, 3496, 3497, 3497, 3497, 3498, 3498, 3498, 3499, 3499,
+ 3501, 3511, 3520, 3527, 3534, 3541, 3548, 3555, 3562, 3568,
+ 3569, 3570, 3570, 3570, 3571, 3571, 3571, 3572, 3573, 3573,
+ 3574, 3574, 3575, 3575, 3576, 3577, 3578, 3579, 3580, 3581,
+ 3582, 3584, 3593, 3603, 3610, 3617, 3626, 3633, 3640, 3647,
+ 3654, 3663, 3672, 3679, 3686, 3696, 3706, 3716, 3726, 3736,
+ 3746, 3757, 3763, 3764, 3765, 3767, 3774, 3780, 3781, 3782,
+ 3784, 3791, 3801, 3808, 3817, 3825, 3831, 3832, 3834, 3834,
+ 3834, 3835, 3835, 3836, 3837, 3838, 3839, 3840, 3842, 3851,
+ 3860, 3867, 3878, 3885, 3896, 3904, 3917, 3925, 3938, 3944,
+ 3945, 3946, 3946, 3947, 3947, 3948, 3948, 3949, 3949, 3950,
+ 3950, 3951, 3951, 3952, 3952, 3953, 3953, 3954, 3954, 3955,
+ 3955, 3956, 3958, 3970, 3982, 3995, 4008, 4020, 4032, 4047,
+ 4062, 4074, 4086, 4098, 4110, 4123, 4136, 4149, 4162, 4175,
+ 4188, 4201, 4216, 4231, 4242, 4251, 4267, 4274, 4283, 4292,
+ 4301, 4310, 4320, 4326, 4327, 4328, 4328, 4330, 4345
};
#endif
@@ -1582,7 +1586,8 @@ static const char *const yytname[] =
"VAR_DISABLE_EDNS_DO", "VAR_CACHEDB_NO_STORE", "VAR_LOG_DESTADDR",
"VAR_CACHEDB_CHECK_WHEN_SERVE_EXPIRED", "VAR_COOKIE_SECRET_FILE",
"VAR_ITER_SCRUB_NS", "VAR_ITER_SCRUB_CNAME", "VAR_ITER_SCRUB_RRSIG",
- "VAR_MAX_GLOBAL_QUOTA", "VAR_HARDEN_UNVERIFIED_GLUE", "VAR_LOG_TIME_ISO",
+ "VAR_MAX_TRANSFER_SIZE", "VAR_MAX_TRANSFER_TIME", "VAR_MAX_GLOBAL_QUOTA",
+ "VAR_HARDEN_UNVERIFIED_GLUE", "VAR_LOG_TIME_ISO",
"VAR_ITER_SCRUB_PROMISCUOUS", "VAR_LOG_THREAD_ID", "$accept",
"toplevelvars", "toplevelvar", "force_toplevel", "serverstart",
"contents_server", "content_server", "stub_clause", "stubstart",
@@ -1708,10 +1713,11 @@ static const char *const yytname[] =
"forward_ssl_upstream", "forward_tcp_upstream", "auth_name",
"auth_zonefile", "auth_master", "auth_url", "auth_allow_notify",
"auth_zonemd_check", "auth_zonemd_reject_absence", "auth_for_downstream",
- "auth_for_upstream", "auth_fallback_enabled", "view_name",
- "view_local_zone", "view_response_ip", "view_response_ip_data",
- "view_local_data", "view_local_data_ptr", "view_first", "rcstart",
- "contents_rc", "content_rc", "rc_control_enable", "rc_control_port",
+ "auth_for_upstream", "auth_fallback_enabled", "auth_max_transfer_size",
+ "auth_max_transfer_time", "view_name", "view_local_zone",
+ "view_response_ip", "view_response_ip_data", "view_local_data",
+ "view_local_data_ptr", "view_first", "rcstart", "contents_rc",
+ "content_rc", "rc_control_enable", "rc_control_port",
"rc_control_interface", "rc_control_use_cert", "rc_server_key_file",
"rc_server_cert_file", "rc_control_key_file", "rc_control_cert_file",
"dtstart", "contents_dt", "content_dt", "dt_dnstap_enable",
@@ -1779,34 +1785,34 @@ static const yytype_int16 yypact[] =
-311, 275, -311, -311, -311, -311, -311, -311, -311, -311,
-311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
-311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
- -311, -311, -311, -311, -311, -13, 227, 225, 293, 112,
- 88, -14, 294, -81, -310, 143, -122, -303, 31, 32,
+ -311, -311, -311, -311, -311, -13, 227, 234, 280, 114,
+ 88, -14, 384, -81, -310, -99, 210, -303, 31, 32,
33, 83, 89, 93, 94, 121, 122, 123, 126, 134,
- 169, 215, 217, 238, 240, 241, 242, 243, 244, 245,
- 246, 247, 258, 259, 260, 261, 263, 268, 269, 272,
- 273, 274, 279, 280, 281, 282, 283, 284, 285, 288,
- 291, 297, 298, 314, 315, 317, 318, 320, 321, 322,
- 323, 324, 331, 346, 348, 358, 360, 368, 369, 370,
- 371, 372, 373, 375, 376, 377, 378, 379, 380, 386,
- 387, 388, 389, 390, 391, 405, 411, 412, 413, 414,
- 415, 417, 418, 424, 425, 426, 427, 428, 429, 430,
- 431, 433, 434, 435, 436, 438, 439, 440, 441, 442,
- 443, 444, 445, 446, 447, 448, 449, 450, 451, 452,
- 453, 456, 479, 480, 481, 482, 483, 484, 485, 486,
- 487, 488, 489, 490, 491, 492, 493, 494, 495, 496,
- 497, 498, 499, 500, 501, 502, 504, 505, 506, 507,
- 508, 509, 510, 511, 512, 513, 514, 515, 516, 517,
- 518, 519, 520, 521, 522, 524, 526, 527, 528, 529,
- 530, 531, 532, 533, 534, 536, 537, 539, 540, 541,
- 542, 543, 544, 545, 547, 548, 549, 550, 551, 552,
- 553, 554, 555, 556, 557, 558, 559, 560, 561, 562,
- 563, 564, 565, 566, 567, 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, 602, 603, 604,
- 606, 607, 608, 609, 610, 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,
+ 149, 150, 162, 163, 164, 165, 166, 167, 168, 169,
+ 215, 217, 237, 238, 239, 240, 241, 242, 243, 244,
+ 245, 246, 247, 258, 259, 260, 261, 262, 263, 268,
+ 269, 270, 272, 273, 274, 281, 282, 283, 284, 285,
+ 288, 291, 297, 298, 314, 315, 318, 320, 321, 322,
+ 323, 324, 330, 331, 346, 348, 360, 361, 364, 366,
+ 367, 369, 371, 372, 375, 376, 377, 378, 379, 386,
+ 387, 388, 389, 390, 391, 393, 394, 395, 396, 397,
+ 398, 399, 400, 401, 402, 403, 404, 405, 407, 413,
+ 414, 415, 416, 417, 424, 425, 426, 427, 428, 429,
+ 430, 431, 433, 434, 435, 436, 438, 439, 440, 441,
+ 442, 443, 444, 445, 446, 447, 448, 449, 450, 451,
+ 452, 453, 458, 459, 460, 461, 462, 463, 466, 467,
+ 468, 469, 470, 471, 472, 473, 474, 475, 476, 477,
+ 478, 479, 501, 502, 504, 505, 506, 507, 508, 509,
+ 511, 512, 513, 514, 515, 516, 517, 518, 519, 520,
+ 521, 522, 523, 524, 526, 527, 528, 529, 530, 531,
+ 532, 533, 534, 535, 536, 537, 539, 540, 541, 542,
+ 543, 545, 567, 570, 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, 602, 603, 604, 606, 607, 608, 609,
+ 610, 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,
-311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
-311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
-311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
@@ -1833,68 +1839,69 @@ static const yytype_int16 yypact[] =
-311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
-311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
-311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
- -311, -311, -311, 637, 638, 639, 640, 641, 642, 643,
- 644, -311, -311, -311, -311, -311, -311, -311, -311, -311,
- 645, 646, 647, 648, 649, 650, 651, -311, -311, -311,
- -311, -311, -311, -311, -311, 652, 653, 654, 655, 656,
- 657, 658, -311, -311, -311, -311, -311, -311, -311, -311,
- 659, 660, 661, 662, 663, 664, 665, 666, 667, 668,
+ -311, -311, -311, 641, 642, 643, 644, 645, 646, 647,
+ 648, -311, -311, -311, -311, -311, -311, -311, -311, -311,
+ 649, 650, 651, 652, 653, 654, 655, -311, -311, -311,
+ -311, -311, -311, -311, -311, 656, 657, 658, 659, 660,
+ 661, 662, -311, -311, -311, -311, -311, -311, -311, -311,
+ 663, 664, 665, 666, 667, 668, 669, 670, 671, 672,
+ 673, 674, -311, -311, -311, -311, -311, -311, -311, -311,
+ -311, -311, -311, -311, -311, 675, 676, 677, 678, 679,
+ 680, -311, -311, -311, -311, -311, -311, -311, -311, -311,
+ -311, -311, -311, -311, -311, -311, 681, 682, 683, 684,
+ 685, 686, 687, 688, -311, -311, -311, -311, -311, -311,
+ -311, -311, -311, 689, 690, 691, 692, 693, 694, 695,
+ 696, 697, 698, 699, 700, 701, 702, 703, 704, 705,
+ 706, 707, 708, -311, -311, -311, -311, -311, -311, -311,
-311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
- -311, 669, 670, 671, 672, 673, 674, -311, -311, -311,
+ -311, -311, -311, -311, 709, -311, -311, 710, -311, -311,
+ 711, 712, 713, 714, 715, 716, 717, 718, 719, 720,
-311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
- 675, 676, 677, 678, 679, 680, 681, 682, -311, -311,
- -311, -311, -311, -311, -311, -311, -311, 683, 684, 685,
- 686, 687, 688, 689, 690, 691, 692, 693, 694, 695,
- 696, 697, 698, 699, 700, 701, 702, -311, -311, -311,
+ -311, 721, 722, 723, 724, 725, 726, 727, 728, 729,
+ 730, 731, 732, 733, 734, 735, 736, 737, 738, 739,
+ 740, 741, -311, -311, -311, -311, -311, -311, -311, -311,
-311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
- -311, -311, -311, -311, -311, -311, -311, -311, 703, -311,
- -311, 704, -311, -311, 705, 706, 707, 708, 709, 710,
- 711, 712, 713, 714, -311, -311, -311, -311, -311, -311,
- -311, -311, -311, -311, -311, 715, 716, 717, 718, 719,
- 720, 721, 722, 723, 724, 725, 726, 727, 728, 729,
- 730, 731, 732, 733, 734, 735, -311, -311, -311, -311,
+ -311, -311, -311, -311, 742, 743, -311, -311, -311, -311,
-311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
- -311, -311, -311, -311, -311, -311, -311, -311, 736, 737,
-311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
-311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
-311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
-311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
-311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
+ -311, 744, 745, -311, -311, -311, -311, -311, -311, -311,
-311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
- -311, -311, -311, -311, -311, 738, 739, -311, -311, -311,
-311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
-311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
-311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
-311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
-311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
+ -311, -311, -311, 746, 747, 748, -311, -311, -311, -311,
+ -311, -311, -311, -311, -311, -311, -311, -311, -311, 749,
+ 750, -311, -311, -311, -311, -311, -311, -311, -311, -311,
-311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
- -311, -311, -311, -311, -311, -311, -311, 740, 741, 742,
+ -311, -311, -311, 751, 752, 753, 754, 755, 756, -311,
-311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
- -311, -311, -311, 743, 744, -311, -311, -311, -311, -311,
-311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
- -311, -311, -311, -311, -311, -311, -311, 745, 746, 747,
- 748, 749, 750, -311, -311, -311, -311, -311, -311, -311,
-311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
+ -311, -311, -311, -311, 757, -311, -311, -311, -311, -311,
+ -311, -311, -311, -311, -311, 758, 759, -311, -311, -311,
+ -311, -311, -311, 760, -311, -311, -311, -311, -311, -311,
+ 761, 762, 763, 764, 765, -311, -311, -311, -311, -311,
-311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
- -311, -311, -311, -311, -311, -311, -311, -311, 751, -311,
- -311, -311, -311, -311, -311, -311, -311, -311, -311, 752,
- 753, -311, -311, -311, -311, -311, -311, 754, -311, -311,
- -311, -311, -311, -311, 755, 756, 757, 758, 759, -311,
-311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
+ -311, -311, -311, -311, -311, -311, -311, 766, -311, -311,
+ 767, 768, -311, -311, -311, -311, -311, -311, -311, -311,
-311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
-311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
- -311, 760, -311, -311, 761, 762, -311, -311, -311, -311,
-311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
-311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
-311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
-311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
-311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
-311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
- -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
- -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
- -311, -311, -311, -311, -311, 763, 764, 765, -311, -311,
- -311, -311, -311, -311, -311, -311, 766, 767, -311, -311,
- -311, -311, -311, -311, -311, -311
+ -311, -311, -311, 769, 770, 771, -311, -311, -311, -311,
+ -311, -311, -311, -311, 772, 773, -311, -311, -311, -311,
+ -311, -311, -311, -311
};
/* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -1902,10 +1909,10 @@ static const yytype_int16 yypact[] =
means the default is an error. */
static const yytype_int16 yydefact[] =
{
- 2, 0, 1, 18, 19, 285, 297, 633, 695, 652,
- 308, 709, 732, 318, 786, 337, 700, 3, 17, 21,
- 5, 287, 6, 299, 10, 310, 320, 339, 635, 654,
- 697, 702, 711, 734, 788, 4, 284, 296, 307, 14,
+ 2, 0, 1, 18, 19, 285, 297, 639, 701, 658,
+ 308, 715, 738, 318, 792, 339, 706, 3, 17, 21,
+ 5, 287, 6, 299, 10, 310, 320, 341, 641, 660,
+ 703, 708, 717, 740, 794, 4, 284, 296, 307, 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,
@@ -1965,62 +1972,63 @@ static const yytype_int16 yydefact[] =
302, 303, 304, 305, 306, 0, 0, 0, 0, 0,
0, 0, 309, 311, 312, 315, 316, 313, 317, 314,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 319, 321, 322, 323, 324, 328, 329, 330, 325, 326,
- 327, 0, 0, 0, 0, 0, 0, 342, 346, 347,
- 348, 349, 350, 338, 340, 341, 343, 344, 345, 351,
- 0, 0, 0, 0, 0, 0, 0, 0, 634, 636,
- 638, 637, 643, 639, 640, 641, 642, 0, 0, 0,
+ 0, 0, 319, 321, 322, 323, 324, 328, 329, 330,
+ 325, 326, 327, 331, 332, 0, 0, 0, 0, 0,
+ 0, 344, 348, 349, 350, 351, 352, 340, 342, 343,
+ 345, 346, 347, 353, 354, 355, 0, 0, 0, 0,
+ 0, 0, 0, 0, 640, 642, 644, 643, 649, 645,
+ 646, 647, 648, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 653, 655, 657,
- 656, 658, 659, 660, 661, 662, 663, 664, 665, 666,
- 667, 668, 669, 670, 671, 672, 673, 674, 0, 696,
- 698, 0, 701, 703, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 710, 712, 713, 714, 716, 717,
- 715, 718, 719, 720, 721, 0, 0, 0, 0, 0,
+ 0, 0, 0, 659, 661, 663, 662, 664, 665, 666,
+ 667, 668, 669, 670, 671, 672, 673, 674, 675, 676,
+ 677, 678, 679, 680, 0, 702, 704, 0, 707, 709,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 733, 735, 736, 753,
- 755, 737, 738, 739, 740, 747, 748, 749, 750, 741,
- 742, 743, 744, 745, 746, 754, 751, 752, 0, 0,
- 787, 789, 790, 353, 352, 360, 373, 371, 385, 380,
- 381, 382, 386, 383, 384, 387, 388, 389, 393, 394,
- 395, 431, 432, 433, 434, 435, 463, 464, 465, 471,
- 472, 376, 473, 474, 477, 475, 476, 481, 482, 483,
- 499, 446, 447, 450, 451, 484, 503, 440, 442, 504,
- 512, 513, 514, 377, 462, 534, 535, 441, 528, 421,
- 372, 436, 500, 508, 486, 0, 0, 538, 378, 354,
- 420, 491, 355, 374, 375, 437, 438, 536, 488, 493,
- 494, 391, 390, 356, 539, 466, 498, 422, 445, 505,
- 506, 507, 511, 527, 439, 532, 530, 531, 454, 461,
- 495, 496, 455, 456, 487, 516, 424, 425, 430, 396,
- 398, 392, 399, 400, 401, 402, 410, 411, 412, 413,
- 414, 415, 416, 540, 541, 548, 467, 468, 469, 470,
- 478, 479, 480, 549, 550, 551, 552, 0, 0, 0,
- 489, 457, 459, 705, 565, 570, 568, 567, 571, 569,
- 578, 579, 580, 0, 0, 574, 575, 576, 577, 361,
- 362, 363, 364, 365, 366, 367, 368, 369, 370, 492,
- 509, 533, 510, 584, 585, 458, 553, 0, 0, 0,
- 0, 0, 0, 518, 519, 520, 521, 522, 523, 524,
- 525, 526, 706, 448, 449, 452, 443, 515, 419, 358,
- 359, 444, 586, 587, 588, 589, 590, 592, 591, 593,
- 594, 595, 397, 404, 581, 583, 582, 403, 0, 778,
- 779, 566, 427, 497, 542, 426, 543, 544, 545, 0,
- 0, 460, 405, 406, 408, 409, 407, 0, 597, 453,
- 529, 379, 598, 599, 0, 0, 0, 0, 0, 417,
- 418, 600, 357, 490, 517, 428, 780, 781, 782, 783,
- 784, 485, 423, 785, 429, 601, 602, 603, 608, 606,
- 607, 604, 605, 609, 610, 611, 612, 614, 615, 613,
- 626, 0, 630, 631, 0, 0, 632, 616, 624, 617,
- 618, 619, 623, 625, 620, 621, 622, 331, 332, 333,
- 334, 335, 336, 644, 646, 645, 648, 649, 650, 651,
- 647, 675, 677, 678, 679, 680, 681, 682, 683, 684,
- 685, 676, 686, 687, 688, 689, 690, 691, 692, 693,
- 694, 699, 704, 722, 723, 724, 727, 725, 726, 728,
- 729, 730, 731, 756, 757, 760, 761, 762, 763, 768,
- 769, 774, 764, 765, 766, 767, 775, 776, 770, 771,
- 772, 773, 758, 759, 791, 792, 501, 537, 564, 707,
- 708, 572, 573, 554, 555, 0, 0, 0, 559, 777,
- 546, 547, 596, 502, 563, 560, 0, 0, 627, 628,
- 629, 558, 556, 557, 561, 562
+ 716, 718, 719, 720, 722, 723, 721, 724, 725, 726,
+ 727, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 739, 741, 742, 759, 761, 743, 744, 745,
+ 746, 753, 754, 755, 756, 747, 748, 749, 750, 751,
+ 752, 760, 757, 758, 0, 0, 793, 795, 796, 357,
+ 356, 364, 377, 375, 389, 384, 385, 386, 390, 387,
+ 388, 391, 392, 393, 397, 398, 399, 435, 436, 437,
+ 438, 439, 467, 468, 469, 475, 476, 380, 477, 478,
+ 481, 479, 480, 485, 486, 487, 503, 450, 451, 454,
+ 455, 488, 507, 444, 446, 508, 516, 517, 518, 381,
+ 466, 538, 539, 445, 532, 425, 376, 440, 504, 512,
+ 490, 0, 0, 542, 382, 358, 424, 495, 359, 378,
+ 379, 441, 442, 540, 492, 497, 498, 395, 394, 360,
+ 543, 470, 502, 426, 449, 509, 510, 511, 515, 531,
+ 443, 536, 534, 535, 458, 465, 499, 500, 459, 460,
+ 491, 520, 428, 429, 434, 400, 402, 396, 403, 404,
+ 405, 406, 414, 415, 416, 417, 418, 419, 420, 544,
+ 545, 552, 471, 472, 473, 474, 482, 483, 484, 553,
+ 554, 555, 556, 0, 0, 0, 493, 461, 463, 711,
+ 569, 574, 572, 571, 575, 573, 582, 583, 584, 0,
+ 0, 578, 579, 580, 581, 365, 366, 367, 368, 369,
+ 370, 371, 372, 373, 374, 496, 513, 537, 514, 588,
+ 589, 462, 557, 0, 0, 0, 0, 0, 0, 522,
+ 523, 524, 525, 526, 527, 528, 529, 530, 712, 452,
+ 453, 456, 447, 519, 423, 362, 363, 448, 590, 591,
+ 592, 593, 594, 596, 595, 597, 598, 599, 401, 408,
+ 585, 587, 586, 407, 0, 784, 785, 570, 431, 501,
+ 546, 430, 547, 548, 549, 0, 0, 464, 409, 410,
+ 412, 413, 411, 0, 601, 457, 533, 383, 602, 603,
+ 0, 0, 0, 0, 0, 421, 422, 604, 361, 494,
+ 521, 432, 786, 787, 788, 789, 790, 489, 427, 791,
+ 433, 605, 606, 607, 612, 610, 611, 608, 609, 613,
+ 614, 615, 616, 618, 619, 617, 632, 0, 636, 637,
+ 0, 0, 638, 620, 628, 621, 622, 623, 627, 629,
+ 624, 625, 626, 630, 631, 333, 334, 335, 336, 337,
+ 338, 650, 652, 651, 654, 655, 656, 657, 653, 681,
+ 683, 684, 685, 686, 687, 688, 689, 690, 691, 682,
+ 692, 693, 694, 695, 696, 697, 698, 699, 700, 705,
+ 710, 728, 729, 730, 733, 731, 732, 734, 735, 736,
+ 737, 762, 763, 766, 767, 768, 769, 774, 775, 780,
+ 770, 771, 772, 773, 781, 782, 776, 777, 778, 779,
+ 764, 765, 797, 798, 505, 541, 568, 713, 714, 576,
+ 577, 558, 559, 0, 0, 0, 563, 783, 550, 551,
+ 600, 506, 567, 564, 0, 0, 633, 634, 635, 562,
+ 560, 561, 565, 566
};
/* YYPGOTO[NTERM-NUM]. */
@@ -2055,8 +2063,9 @@ static const yytype_int16 yypgoto[] =
-311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
-311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
-311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
- -311, -311, -311, -311, -311, 768, 769, 770, 771, 772,
- -311, -311, 773, -311, -311, -311, -311, -311, -311, -311,
+ -311, -311, -311, -311, -311, 774, 775, 776, 777, 778,
+ -311, -311, 779, -311, -311, 780, 781, -311, -311, -311,
+ -311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
-311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
-311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
-311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
@@ -2066,7 +2075,7 @@ static const yytype_int16 yypgoto[] =
-311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
-311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
-311, -311, -311, -311, -311, -311, -311, -311, -311, -311,
- -311, -311, -311, -311, -311, -311, -311, -311, -311
+ -311
};
/* YYDEFGOTO[NTERM-NUM]. */
@@ -2074,8 +2083,8 @@ static const yytype_int16 yydefgoto[] =
{
0, 1, 17, 18, 19, 35, 310, 20, 21, 36,
581, 22, 23, 37, 597, 24, 25, 38, 612, 26,
- 39, 630, 647, 648, 649, 650, 651, 652, 27, 40,
- 653, 311, 312, 313, 314, 315, 316, 317, 318, 319,
+ 39, 632, 651, 652, 653, 654, 655, 656, 27, 40,
+ 657, 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,
@@ -2101,18 +2110,19 @@ static const yytype_int16 yydefgoto[] =
540, 541, 542, 543, 544, 545, 546, 547, 548, 549,
550, 551, 552, 553, 554, 555, 556, 557, 558, 559,
582, 583, 584, 585, 586, 587, 588, 589, 598, 599,
- 600, 601, 602, 603, 604, 631, 632, 633, 634, 635,
- 636, 637, 638, 639, 640, 613, 614, 615, 616, 617,
- 618, 619, 28, 41, 668, 669, 670, 671, 672, 673,
- 674, 675, 676, 29, 42, 697, 698, 699, 700, 701,
- 702, 703, 704, 705, 706, 707, 708, 709, 710, 711,
- 712, 713, 714, 715, 716, 717, 30, 43, 719, 720,
- 31, 44, 722, 723, 560, 561, 562, 563, 32, 45,
- 734, 735, 736, 737, 738, 739, 740, 741, 742, 743,
- 744, 33, 46, 766, 767, 768, 769, 770, 771, 772,
- 773, 774, 775, 776, 777, 778, 779, 780, 781, 782,
- 783, 784, 785, 786, 787, 564, 565, 566, 567, 568,
- 569, 570, 571, 572, 34, 47, 790, 791, 792
+ 600, 601, 602, 603, 604, 633, 634, 635, 636, 637,
+ 638, 639, 640, 641, 642, 643, 644, 613, 614, 615,
+ 616, 617, 618, 619, 28, 41, 674, 675, 676, 677,
+ 678, 679, 680, 681, 682, 29, 42, 703, 704, 705,
+ 706, 707, 708, 709, 710, 711, 712, 713, 714, 715,
+ 716, 717, 718, 719, 720, 721, 722, 723, 30, 43,
+ 725, 726, 31, 44, 728, 729, 560, 561, 562, 563,
+ 32, 45, 740, 741, 742, 743, 744, 745, 746, 747,
+ 748, 749, 750, 33, 46, 772, 773, 774, 775, 776,
+ 777, 778, 779, 780, 781, 782, 783, 784, 785, 786,
+ 787, 788, 789, 790, 791, 792, 793, 564, 565, 566,
+ 567, 568, 569, 570, 571, 572, 34, 47, 796, 797,
+ 798
};
/* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If
@@ -2123,85 +2133,86 @@ static const yytype_int16 yytable[] =
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, 79, 80, 81, 788, 789, 718, 721, 82, 83,
- 84, 793, 794, 795, 85, 86, 87, 88, 89, 90,
+ 78, 79, 80, 81, 794, 795, 724, 727, 82, 83,
+ 84, 799, 800, 801, 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, 123, 124, 125, 660, 661, 662, 663, 664,
- 665, 666, 667, 796, 126, 127, 128, 129, 130, 797,
- 131, 132, 133, 798, 799, 134, 135, 136, 137, 138,
+ 121, 122, 123, 124, 125, 666, 667, 668, 669, 670,
+ 671, 672, 673, 802, 126, 127, 128, 129, 130, 803,
+ 131, 132, 133, 804, 805, 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, 800, 801, 802, 160, 620, 803, 161, 162, 163,
- 164, 165, 166, 167, 804, 168, 169, 170, 171, 172,
- 173, 174, 175, 176, 177, 178, 179, 180, 181, 620,
- 745, 746, 747, 748, 749, 750, 751, 752, 753, 754,
- 755, 756, 757, 758, 759, 760, 761, 762, 763, 805,
+ 159, 806, 807, 808, 160, 620, 809, 161, 162, 163,
+ 164, 165, 166, 167, 810, 168, 169, 170, 171, 172,
+ 173, 174, 175, 176, 177, 178, 179, 180, 181, 811,
+ 812, 620, 730, 731, 732, 733, 734, 735, 736, 737,
+ 738, 739, 813, 814, 815, 816, 817, 818, 819, 820,
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, 224, 225, 226, 806, 227, 807, 228, 229,
+ 222, 223, 224, 225, 226, 821, 227, 822, 228, 229,
230, 231, 232, 233, 234, 235, 236, 237, 238, 239,
- 240, 241, 242, 243, 244, 245, 246, 764, 808, 765,
- 809, 810, 811, 812, 813, 814, 815, 816, 247, 248,
- 249, 250, 251, 252, 253, 254, 255, 256, 817, 818,
- 819, 820, 590, 821, 573, 2, 574, 575, 822, 823,
- 591, 592, 824, 825, 826, 0, 3, 4, 257, 827,
- 828, 829, 830, 831, 832, 833, 258, 259, 834, 260,
- 261, 835, 262, 263, 264, 265, 266, 836, 837, 267,
+ 240, 241, 242, 243, 244, 245, 246, 823, 824, 825,
+ 826, 827, 828, 829, 830, 831, 832, 833, 247, 248,
+ 249, 250, 251, 252, 253, 254, 255, 256, 834, 835,
+ 836, 837, 838, 839, 573, 2, 574, 575, 840, 841,
+ 842, 590, 843, 844, 845, 0, 3, 4, 257, 591,
+ 592, 846, 847, 848, 849, 850, 258, 259, 851, 260,
+ 261, 852, 262, 263, 264, 265, 266, 853, 854, 267,
268, 269, 270, 271, 272, 273, 274, 275, 276, 277,
- 278, 279, 280, 5, 838, 839, 281, 840, 841, 6,
- 842, 843, 844, 845, 846, 282, 283, 284, 285, 576,
- 605, 847, 286, 287, 288, 289, 290, 291, 292, 293,
- 294, 295, 296, 297, 298, 299, 848, 300, 849, 301,
- 302, 303, 304, 305, 306, 307, 308, 309, 850, 593,
- 851, 594, 577, 7, 595, 578, 606, 607, 852, 853,
- 854, 855, 856, 857, 579, 858, 859, 860, 861, 862,
- 863, 8, 622, 623, 624, 625, 864, 865, 866, 867,
- 868, 869, 627, 608, 724, 725, 726, 727, 728, 729,
- 730, 731, 732, 733, 621, 870, 622, 623, 624, 625,
- 626, 871, 872, 873, 874, 875, 627, 876, 877, 641,
- 642, 643, 644, 645, 878, 879, 880, 881, 882, 883,
- 884, 885, 646, 886, 887, 888, 889, 9, 890, 891,
- 892, 893, 894, 895, 896, 897, 898, 899, 900, 901,
- 902, 903, 904, 905, 628, 629, 906, 677, 678, 679,
- 680, 681, 682, 683, 684, 685, 686, 687, 688, 689,
- 690, 691, 692, 693, 694, 695, 696, 609, 610, 907,
- 908, 909, 910, 911, 912, 913, 914, 915, 916, 917,
- 918, 919, 920, 921, 922, 923, 924, 925, 926, 927,
- 928, 929, 930, 10, 931, 932, 933, 934, 935, 936,
- 937, 938, 939, 940, 941, 942, 943, 944, 945, 946,
- 947, 948, 949, 611, 950, 11, 951, 952, 953, 954,
- 955, 956, 957, 958, 959, 596, 960, 961, 580, 962,
- 963, 964, 965, 966, 967, 968, 12, 969, 970, 971,
- 972, 973, 974, 975, 976, 977, 978, 979, 980, 981,
- 982, 983, 984, 985, 986, 987, 988, 989, 13, 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, 14, 1022, 1023, 1024, 15, 1025, 1026, 1027, 1028,
- 1029, 16, 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, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127,
- 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137,
- 1138, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147,
- 1148, 1149, 1150, 1151, 1152, 1153, 1154, 1155, 1156, 1157,
- 1158, 1159, 1160, 1161, 1162, 1163, 1164, 1165, 1166, 1167,
- 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177,
- 1178, 1179, 1180, 1181, 1182, 1183, 1184, 1185, 0, 0,
+ 278, 279, 280, 5, 855, 856, 281, 605, 857, 6,
+ 858, 859, 860, 861, 862, 282, 283, 284, 285, 576,
+ 863, 864, 286, 287, 288, 289, 290, 291, 292, 293,
+ 294, 295, 296, 297, 298, 299, 865, 300, 866, 301,
+ 302, 303, 304, 606, 607, 305, 306, 307, 308, 309,
+ 867, 868, 577, 7, 869, 578, 870, 871, 593, 872,
+ 594, 873, 874, 595, 579, 875, 876, 877, 878, 879,
+ 608, 8, 622, 623, 624, 625, 880, 881, 882, 883,
+ 884, 885, 627, 886, 887, 888, 889, 890, 891, 892,
+ 893, 894, 895, 896, 897, 898, 621, 899, 622, 623,
+ 624, 625, 626, 900, 901, 902, 903, 904, 627, 645,
+ 646, 647, 648, 649, 905, 906, 907, 908, 909, 910,
+ 911, 912, 650, 913, 914, 915, 916, 9, 917, 918,
+ 919, 920, 921, 922, 923, 924, 925, 926, 927, 928,
+ 929, 930, 931, 932, 630, 631, 628, 629, 933, 934,
+ 935, 936, 937, 938, 609, 610, 939, 940, 941, 942,
+ 943, 944, 945, 946, 947, 948, 949, 950, 951, 952,
+ 630, 631, 751, 752, 753, 754, 755, 756, 757, 758,
+ 759, 760, 761, 762, 763, 764, 765, 766, 767, 768,
+ 769, 953, 954, 10, 955, 956, 957, 958, 959, 960,
+ 611, 961, 962, 963, 964, 965, 966, 967, 968, 969,
+ 970, 971, 972, 973, 974, 11, 975, 976, 977, 978,
+ 979, 980, 981, 982, 983, 984, 985, 986, 580, 987,
+ 988, 989, 990, 991, 596, 992, 12, 683, 684, 685,
+ 686, 687, 688, 689, 690, 691, 692, 693, 694, 695,
+ 696, 697, 698, 699, 700, 701, 702, 993, 13, 770,
+ 994, 771, 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, 14, 1024, 1025, 1026, 15, 1027, 1028, 1029, 1030,
+ 1031, 16, 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,
+ 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129,
+ 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1138, 1139,
+ 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149,
+ 1150, 1151, 1152, 1153, 1154, 1155, 1156, 1157, 1158, 1159,
+ 1160, 1161, 1162, 1163, 1164, 1165, 1166, 1167, 1168, 1169,
+ 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179,
+ 1180, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189,
+ 1190, 1191, 1192, 1193, 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, 654, 655,
- 656, 657, 658, 659
+ 0, 0, 0, 0, 658, 659, 660, 661, 662, 663,
+ 664, 665
};
static const yytype_int16 yycheck[] =
@@ -2221,50 +2232,50 @@ static const yytype_int16 yycheck[] =
133, 134, 135, 136, 137, 138, 139, 140, 141, 142,
143, 10, 10, 10, 147, 47, 10, 150, 151, 152,
153, 154, 155, 156, 10, 158, 159, 160, 161, 162,
- 163, 164, 165, 166, 167, 168, 169, 170, 171, 47,
- 282, 283, 284, 285, 286, 287, 288, 289, 290, 291,
- 292, 293, 294, 295, 296, 297, 298, 299, 300, 10,
+ 163, 164, 165, 166, 167, 168, 169, 170, 171, 10,
+ 10, 47, 261, 262, 263, 264, 265, 266, 267, 268,
+ 269, 270, 10, 10, 10, 10, 10, 10, 10, 10,
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, 10, 239, 10, 241, 242,
243, 244, 245, 246, 247, 248, 249, 250, 251, 252,
- 253, 254, 255, 256, 257, 258, 259, 369, 10, 371,
+ 253, 254, 255, 256, 257, 258, 259, 10, 10, 10,
10, 10, 10, 10, 10, 10, 10, 10, 271, 272,
273, 274, 275, 276, 277, 278, 279, 280, 10, 10,
- 10, 10, 47, 10, 47, 0, 49, 50, 10, 10,
- 55, 56, 10, 10, 10, -1, 11, 12, 301, 10,
- 10, 10, 10, 10, 10, 10, 309, 310, 10, 312,
+ 10, 10, 10, 10, 47, 0, 49, 50, 10, 10,
+ 10, 47, 10, 10, 10, -1, 11, 12, 301, 55,
+ 56, 10, 10, 10, 10, 10, 309, 310, 10, 312,
313, 10, 315, 316, 317, 318, 319, 10, 10, 322,
323, 324, 325, 326, 327, 328, 329, 330, 331, 332,
- 333, 334, 335, 48, 10, 10, 339, 10, 10, 54,
+ 333, 334, 335, 48, 10, 10, 339, 47, 10, 54,
10, 10, 10, 10, 10, 348, 349, 350, 351, 112,
- 47, 10, 355, 356, 357, 358, 359, 360, 361, 362,
+ 10, 10, 355, 356, 357, 358, 359, 360, 361, 362,
363, 364, 365, 366, 367, 368, 10, 370, 10, 372,
- 373, 374, 375, 376, 377, 378, 379, 380, 10, 144,
- 10, 146, 145, 98, 149, 148, 83, 84, 10, 10,
- 10, 10, 10, 10, 157, 10, 10, 10, 10, 10,
- 10, 116, 304, 305, 306, 307, 10, 10, 10, 10,
- 10, 10, 314, 110, 261, 262, 263, 264, 265, 266,
- 267, 268, 269, 270, 302, 10, 304, 305, 306, 307,
- 308, 10, 10, 10, 10, 10, 314, 10, 10, 341,
+ 373, 374, 375, 83, 84, 378, 379, 380, 381, 382,
+ 10, 10, 145, 98, 10, 148, 10, 10, 144, 10,
+ 146, 10, 10, 149, 157, 10, 10, 10, 10, 10,
+ 110, 116, 304, 305, 306, 307, 10, 10, 10, 10,
+ 10, 10, 314, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 302, 10, 304, 305,
+ 306, 307, 308, 10, 10, 10, 10, 10, 314, 341,
342, 343, 344, 345, 10, 10, 10, 10, 10, 10,
10, 10, 354, 10, 10, 10, 10, 172, 10, 10,
10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 352, 353, 10, 173, 174, 175,
- 176, 177, 178, 179, 180, 181, 182, 183, 184, 185,
- 186, 187, 188, 189, 190, 191, 192, 194, 195, 10,
- 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 238, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 240, 10, 260, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 320, 10, 10, 321, 10,
- 10, 10, 10, 10, 10, 10, 281, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10, 303, 10,
+ 10, 10, 10, 10, 376, 377, 352, 353, 10, 10,
+ 10, 10, 10, 10, 194, 195, 10, 10, 10, 10,
10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 376, 377, 282, 283, 284, 285, 286, 287, 288, 289,
+ 290, 291, 292, 293, 294, 295, 296, 297, 298, 299,
+ 300, 10, 10, 238, 10, 10, 10, 10, 10, 10,
+ 240, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 260, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 321, 10,
+ 10, 10, 10, 10, 320, 10, 281, 173, 174, 175,
+ 176, 177, 178, 179, 180, 181, 182, 183, 184, 185,
+ 186, 187, 188, 189, 190, 191, 192, 10, 303, 369,
+ 10, 371, 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, 336, 10, 10, 10, 340, 10, 10, 10, 10,
@@ -2283,22 +2294,23 @@ 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, -1, -1,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 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, 40, 40,
- 40, 40, 40, 40
+ -1, -1, -1, -1, 40, 40, 40, 40, 40, 40,
+ 40, 40
};
/* YYSTOS[STATE-NUM] -- The symbol kind of the accessing symbol of
state STATE-NUM. */
static const yytype_int16 yystos[] =
{
- 0, 382, 0, 11, 12, 48, 54, 98, 116, 172,
- 238, 260, 281, 303, 336, 340, 346, 383, 384, 385,
- 388, 389, 392, 393, 396, 397, 400, 409, 693, 704,
- 727, 731, 739, 752, 785, 386, 390, 394, 398, 401,
- 410, 694, 705, 728, 732, 740, 753, 786, 13, 14,
+ 0, 384, 0, 11, 12, 48, 54, 98, 116, 172,
+ 238, 260, 281, 303, 336, 340, 346, 385, 386, 387,
+ 390, 391, 394, 395, 398, 399, 402, 411, 697, 708,
+ 731, 735, 743, 756, 789, 388, 392, 396, 400, 403,
+ 412, 698, 709, 732, 736, 744, 757, 790, 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,
@@ -2324,56 +2336,57 @@ static const yytype_int16 yystos[] =
325, 326, 327, 328, 329, 330, 331, 332, 333, 334,
335, 339, 348, 349, 350, 351, 355, 356, 357, 358,
359, 360, 361, 362, 363, 364, 365, 366, 367, 368,
- 370, 372, 373, 374, 375, 376, 377, 378, 379, 380,
- 387, 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,
- 735, 736, 737, 738, 776, 777, 778, 779, 780, 781,
- 782, 783, 784, 47, 49, 50, 112, 145, 148, 157,
- 321, 391, 661, 662, 663, 664, 665, 666, 667, 668,
- 47, 55, 56, 144, 146, 149, 320, 395, 669, 670,
- 671, 672, 673, 674, 675, 47, 83, 84, 110, 194,
- 195, 240, 399, 686, 687, 688, 689, 690, 691, 692,
+ 370, 372, 373, 374, 375, 378, 379, 380, 381, 382,
+ 389, 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,
+ 739, 740, 741, 742, 780, 781, 782, 783, 784, 785,
+ 786, 787, 788, 47, 49, 50, 112, 145, 148, 157,
+ 321, 393, 663, 664, 665, 666, 667, 668, 669, 670,
+ 47, 55, 56, 144, 146, 149, 320, 397, 671, 672,
+ 673, 674, 675, 676, 677, 47, 83, 84, 110, 194,
+ 195, 240, 401, 690, 691, 692, 693, 694, 695, 696,
47, 302, 304, 305, 306, 307, 308, 314, 352, 353,
- 402, 676, 677, 678, 679, 680, 681, 682, 683, 684,
- 685, 341, 342, 343, 344, 345, 354, 403, 404, 405,
- 406, 407, 408, 411, 676, 677, 678, 679, 680, 683,
- 99, 100, 101, 102, 103, 104, 105, 106, 695, 696,
- 697, 698, 699, 700, 701, 702, 703, 173, 174, 175,
- 176, 177, 178, 179, 180, 181, 182, 183, 184, 185,
- 186, 187, 188, 189, 190, 191, 192, 706, 707, 708,
- 709, 710, 711, 712, 713, 714, 715, 716, 717, 718,
- 719, 720, 721, 722, 723, 724, 725, 726, 117, 729,
- 730, 347, 733, 734, 261, 262, 263, 264, 265, 266,
- 267, 268, 269, 270, 741, 742, 743, 744, 745, 746,
- 747, 748, 749, 750, 751, 282, 283, 284, 285, 286,
- 287, 288, 289, 290, 291, 292, 293, 294, 295, 296,
- 297, 298, 299, 300, 369, 371, 754, 755, 756, 757,
- 758, 759, 760, 761, 762, 763, 764, 765, 766, 767,
- 768, 769, 770, 771, 772, 773, 774, 775, 337, 338,
- 787, 788, 789, 10, 10, 10, 10, 10, 10, 10,
+ 376, 377, 404, 678, 679, 680, 681, 682, 683, 684,
+ 685, 686, 687, 688, 689, 341, 342, 343, 344, 345,
+ 354, 405, 406, 407, 408, 409, 410, 413, 678, 679,
+ 680, 681, 682, 685, 688, 689, 99, 100, 101, 102,
+ 103, 104, 105, 106, 699, 700, 701, 702, 703, 704,
+ 705, 706, 707, 173, 174, 175, 176, 177, 178, 179,
+ 180, 181, 182, 183, 184, 185, 186, 187, 188, 189,
+ 190, 191, 192, 710, 711, 712, 713, 714, 715, 716,
+ 717, 718, 719, 720, 721, 722, 723, 724, 725, 726,
+ 727, 728, 729, 730, 117, 733, 734, 347, 737, 738,
+ 261, 262, 263, 264, 265, 266, 267, 268, 269, 270,
+ 745, 746, 747, 748, 749, 750, 751, 752, 753, 754,
+ 755, 282, 283, 284, 285, 286, 287, 288, 289, 290,
+ 291, 292, 293, 294, 295, 296, 297, 298, 299, 300,
+ 369, 371, 758, 759, 760, 761, 762, 763, 764, 765,
+ 766, 767, 768, 769, 770, 771, 772, 773, 774, 775,
+ 776, 777, 778, 779, 337, 338, 791, 792, 793, 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,
@@ -2412,92 +2425,92 @@ 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
};
/* YYR1[RULE-NUM] -- Symbol kind of the left-hand side of rule RULE-NUM. */
static const yytype_int16 yyr1[] =
{
- 0, 381, 382, 382, 383, 383, 383, 383, 383, 383,
- 383, 383, 383, 383, 383, 383, 383, 383, 384, 385,
- 386, 386, 387, 387, 387, 387, 387, 387, 387, 387,
- 387, 387, 387, 387, 387, 387, 387, 387, 387, 387,
- 387, 387, 387, 387, 387, 387, 387, 387, 387, 387,
- 387, 387, 387, 387, 387, 387, 387, 387, 387, 387,
- 387, 387, 387, 387, 387, 387, 387, 387, 387, 387,
- 387, 387, 387, 387, 387, 387, 387, 387, 387, 387,
- 387, 387, 387, 387, 387, 387, 387, 387, 387, 387,
- 387, 387, 387, 387, 387, 387, 387, 387, 387, 387,
- 387, 387, 387, 387, 387, 387, 387, 387, 387, 387,
- 387, 387, 387, 387, 387, 387, 387, 387, 387, 387,
- 387, 387, 387, 387, 387, 387, 387, 387, 387, 387,
- 387, 387, 387, 387, 387, 387, 387, 387, 387, 387,
- 387, 387, 387, 387, 387, 387, 387, 387, 387, 387,
- 387, 387, 387, 387, 387, 387, 387, 387, 387, 387,
- 387, 387, 387, 387, 387, 387, 387, 387, 387, 387,
- 387, 387, 387, 387, 387, 387, 387, 387, 387, 387,
- 387, 387, 387, 387, 387, 387, 387, 387, 387, 387,
- 387, 387, 387, 387, 387, 387, 387, 387, 387, 387,
- 387, 387, 387, 387, 387, 387, 387, 387, 387, 387,
- 387, 387, 387, 387, 387, 387, 387, 387, 387, 387,
- 387, 387, 387, 387, 387, 387, 387, 387, 387, 387,
- 387, 387, 387, 387, 387, 387, 387, 387, 387, 387,
- 387, 387, 387, 387, 387, 387, 387, 387, 387, 387,
- 387, 387, 387, 387, 387, 387, 387, 387, 387, 387,
- 387, 387, 387, 387, 387, 387, 387, 387, 387, 387,
- 387, 387, 387, 387, 387, 387, 387, 387, 387, 387,
- 387, 387, 387, 387, 388, 389, 390, 390, 391, 391,
- 391, 391, 391, 391, 391, 391, 392, 393, 394, 394,
- 395, 395, 395, 395, 395, 395, 395, 396, 397, 398,
- 398, 399, 399, 399, 399, 399, 399, 399, 400, 401,
- 401, 402, 402, 402, 402, 402, 402, 402, 402, 402,
- 402, 403, 404, 405, 406, 407, 408, 409, 410, 410,
- 411, 411, 411, 411, 411, 411, 411, 411, 411, 411,
- 411, 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, 663, 664, 665, 666, 667, 668, 669,
- 670, 671, 672, 673, 674, 675, 676, 677, 678, 679,
- 680, 681, 682, 683, 684, 685, 686, 687, 688, 689,
- 690, 691, 692, 693, 694, 694, 695, 695, 695, 695,
- 695, 695, 695, 695, 696, 697, 698, 699, 700, 701,
- 702, 703, 704, 705, 705, 706, 706, 706, 706, 706,
- 706, 706, 706, 706, 706, 706, 706, 706, 706, 706,
- 706, 706, 706, 706, 706, 707, 708, 709, 710, 711,
- 712, 713, 714, 715, 716, 717, 718, 719, 720, 721,
- 722, 723, 724, 725, 726, 727, 728, 728, 729, 730,
- 731, 732, 732, 733, 734, 735, 736, 737, 738, 739,
- 740, 740, 741, 741, 741, 741, 741, 741, 741, 741,
- 741, 741, 742, 743, 744, 745, 746, 747, 748, 749,
- 750, 751, 752, 753, 753, 754, 754, 754, 754, 754,
- 754, 754, 754, 754, 754, 754, 754, 754, 754, 754,
- 754, 754, 754, 754, 754, 754, 755, 756, 757, 758,
- 759, 760, 761, 762, 763, 764, 765, 766, 767, 768,
- 769, 770, 771, 772, 773, 774, 775, 776, 777, 778,
- 779, 780, 781, 782, 783, 784, 785, 786, 786, 787,
- 787, 788, 789
+ 0, 383, 384, 384, 385, 385, 385, 385, 385, 385,
+ 385, 385, 385, 385, 385, 385, 385, 385, 386, 387,
+ 388, 388, 389, 389, 389, 389, 389, 389, 389, 389,
+ 389, 389, 389, 389, 389, 389, 389, 389, 389, 389,
+ 389, 389, 389, 389, 389, 389, 389, 389, 389, 389,
+ 389, 389, 389, 389, 389, 389, 389, 389, 389, 389,
+ 389, 389, 389, 389, 389, 389, 389, 389, 389, 389,
+ 389, 389, 389, 389, 389, 389, 389, 389, 389, 389,
+ 389, 389, 389, 389, 389, 389, 389, 389, 389, 389,
+ 389, 389, 389, 389, 389, 389, 389, 389, 389, 389,
+ 389, 389, 389, 389, 389, 389, 389, 389, 389, 389,
+ 389, 389, 389, 389, 389, 389, 389, 389, 389, 389,
+ 389, 389, 389, 389, 389, 389, 389, 389, 389, 389,
+ 389, 389, 389, 389, 389, 389, 389, 389, 389, 389,
+ 389, 389, 389, 389, 389, 389, 389, 389, 389, 389,
+ 389, 389, 389, 389, 389, 389, 389, 389, 389, 389,
+ 389, 389, 389, 389, 389, 389, 389, 389, 389, 389,
+ 389, 389, 389, 389, 389, 389, 389, 389, 389, 389,
+ 389, 389, 389, 389, 389, 389, 389, 389, 389, 389,
+ 389, 389, 389, 389, 389, 389, 389, 389, 389, 389,
+ 389, 389, 389, 389, 389, 389, 389, 389, 389, 389,
+ 389, 389, 389, 389, 389, 389, 389, 389, 389, 389,
+ 389, 389, 389, 389, 389, 389, 389, 389, 389, 389,
+ 389, 389, 389, 389, 389, 389, 389, 389, 389, 389,
+ 389, 389, 389, 389, 389, 389, 389, 389, 389, 389,
+ 389, 389, 389, 389, 389, 389, 389, 389, 389, 389,
+ 389, 389, 389, 389, 389, 389, 389, 389, 389, 389,
+ 389, 389, 389, 389, 389, 389, 389, 389, 389, 389,
+ 389, 389, 389, 389, 390, 391, 392, 392, 393, 393,
+ 393, 393, 393, 393, 393, 393, 394, 395, 396, 396,
+ 397, 397, 397, 397, 397, 397, 397, 398, 399, 400,
+ 400, 401, 401, 401, 401, 401, 401, 401, 402, 403,
+ 403, 404, 404, 404, 404, 404, 404, 404, 404, 404,
+ 404, 404, 404, 405, 406, 407, 408, 409, 410, 411,
+ 412, 412, 413, 413, 413, 413, 413, 413, 413, 413,
+ 413, 413, 413, 413, 413, 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, 663, 664, 665, 666, 667,
+ 668, 669, 670, 671, 672, 673, 674, 675, 676, 677,
+ 678, 679, 680, 681, 682, 683, 684, 685, 686, 687,
+ 688, 689, 690, 691, 692, 693, 694, 695, 696, 697,
+ 698, 698, 699, 699, 699, 699, 699, 699, 699, 699,
+ 700, 701, 702, 703, 704, 705, 706, 707, 708, 709,
+ 709, 710, 710, 710, 710, 710, 710, 710, 710, 710,
+ 710, 710, 710, 710, 710, 710, 710, 710, 710, 710,
+ 710, 711, 712, 713, 714, 715, 716, 717, 718, 719,
+ 720, 721, 722, 723, 724, 725, 726, 727, 728, 729,
+ 730, 731, 732, 732, 733, 734, 735, 736, 736, 737,
+ 738, 739, 740, 741, 742, 743, 744, 744, 745, 745,
+ 745, 745, 745, 745, 745, 745, 745, 745, 746, 747,
+ 748, 749, 750, 751, 752, 753, 754, 755, 756, 757,
+ 757, 758, 758, 758, 758, 758, 758, 758, 758, 758,
+ 758, 758, 758, 758, 758, 758, 758, 758, 758, 758,
+ 758, 758, 759, 760, 761, 762, 763, 764, 765, 766,
+ 767, 768, 769, 770, 771, 772, 773, 774, 775, 776,
+ 777, 778, 779, 780, 781, 782, 783, 784, 785, 786,
+ 787, 788, 789, 790, 790, 791, 791, 792, 793
};
/* YYR2[RULE-NUM] -- Number of symbols on the right-hand side of rule RULE-NUM. */
@@ -2536,9 +2549,10 @@ static const yytype_int8 yyr2[] =
1, 1, 1, 1, 1, 1, 1, 2, 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,
+ 1, 1, 1, 2, 2, 2, 2, 2, 2, 1,
+ 2, 0, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 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,
@@ -2552,37 +2566,36 @@ 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, 3, 3, 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, 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, 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,
+ 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, 3, 3, 3,
- 2, 2, 2, 1, 2, 0, 1, 1, 1, 1,
- 1, 1, 1, 1, 2, 2, 2, 2, 2, 2,
- 2, 2, 1, 2, 0, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 1, 2, 0, 1, 2,
- 1, 2, 0, 1, 2, 2, 2, 3, 3, 1,
+ 2, 2, 2, 3, 3, 3, 2, 2, 2, 1,
2, 0, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 1, 2, 0, 1, 1, 1, 1, 1,
+ 2, 2, 2, 2, 2, 2, 2, 2, 1, 2,
+ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 2, 2, 2, 2,
+ 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, 3, 2, 2,
- 2, 2, 2, 2, 2, 2, 1, 2, 0, 1,
- 1, 2, 2
+ 2, 1, 2, 0, 1, 2, 1, 2, 0, 1,
+ 2, 2, 2, 3, 3, 1, 2, 0, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 1, 2,
+ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 3, 2, 2, 2, 2, 2, 2,
+ 2, 2, 1, 2, 0, 1, 1, 2, 2
};
@@ -3046,36 +3059,36 @@ yyreduce:
switch (yyn)
{
case 18: /* force_toplevel: VAR_FORCE_TOPLEVEL */
-#line 233 "util/configparser.y"
+#line 234 "util/configparser.y"
{
OUTYY(("\nP(force-toplevel)\n"));
cfg_parser->started_toplevel = 0;
}
-#line 3055 "util/configparser.c"
+#line 3068 "util/configparser.c"
break;
case 19: /* serverstart: VAR_SERVER */
-#line 240 "util/configparser.y"
+#line 241 "util/configparser.y"
{
OUTYY(("\nP(server:)\n"));
cfg_parser->started_toplevel = 1;
}
-#line 3064 "util/configparser.c"
+#line 3077 "util/configparser.c"
break;
case 284: /* stub_clause: stubstart contents_stub */
-#line 366 "util/configparser.y"
+#line 367 "util/configparser.y"
{
/* stub end */
if(cfg_parser->cfg->stubs &&
!cfg_parser->cfg->stubs->name)
yyerror("stub-zone without name");
}
-#line 3075 "util/configparser.c"
+#line 3088 "util/configparser.c"
break;
case 285: /* stubstart: VAR_STUB_ZONE */
-#line 374 "util/configparser.y"
+#line 375 "util/configparser.y"
{
struct config_stub* s;
OUTYY(("\nP(stub_zone:)\n"));
@@ -3088,22 +3101,22 @@ yyreduce:
yyerror("out of memory");
}
}
-#line 3092 "util/configparser.c"
+#line 3105 "util/configparser.c"
break;
case 296: /* forward_clause: forwardstart contents_forward */
-#line 393 "util/configparser.y"
+#line 394 "util/configparser.y"
{
/* forward end */
if(cfg_parser->cfg->forwards &&
!cfg_parser->cfg->forwards->name)
yyerror("forward-zone without name");
}
-#line 3103 "util/configparser.c"
+#line 3116 "util/configparser.c"
break;
case 297: /* forwardstart: VAR_FORWARD_ZONE */
-#line 401 "util/configparser.y"
+#line 402 "util/configparser.y"
{
struct config_stub* s;
OUTYY(("\nP(forward_zone:)\n"));
@@ -3116,22 +3129,22 @@ yyreduce:
yyerror("out of memory");
}
}
-#line 3120 "util/configparser.c"
+#line 3133 "util/configparser.c"
break;
case 307: /* view_clause: viewstart contents_view */
-#line 420 "util/configparser.y"
+#line 421 "util/configparser.y"
{
/* view end */
if(cfg_parser->cfg->views &&
!cfg_parser->cfg->views->name)
yyerror("view without name");
}
-#line 3131 "util/configparser.c"
+#line 3144 "util/configparser.c"
break;
case 308: /* viewstart: VAR_VIEW */
-#line 428 "util/configparser.y"
+#line 429 "util/configparser.y"
{
struct config_view* s;
OUTYY(("\nP(view:)\n"));
@@ -3144,11 +3157,11 @@ yyreduce:
yyerror("out of memory");
}
}
-#line 3148 "util/configparser.c"
+#line 3161 "util/configparser.c"
break;
case 318: /* authstart: VAR_AUTH_ZONE */
-#line 447 "util/configparser.y"
+#line 448 "util/configparser.y"
{
struct config_auth* s;
OUTYY(("\nP(auth_zone:)\n"));
@@ -3164,15 +3177,17 @@ yyreduce:
s->zonemd_check = 0;
s->zonemd_reject_absence = 0;
s->isrpz = 0;
+ s->max_transfer_size = 0;
+ s->max_transfer_time = 0;
} else {
yyerror("out of memory");
}
}
-#line 3172 "util/configparser.c"
+#line 3187 "util/configparser.c"
break;
- case 331: /* rpz_tag: VAR_TAGS STRING_ARG */
-#line 475 "util/configparser.y"
+ case 333: /* rpz_tag: VAR_TAGS STRING_ARG */
+#line 479 "util/configparser.y"
{
uint8_t* bitlist;
size_t len = 0;
@@ -3189,11 +3204,11 @@ yyreduce:
}
}
-#line 3193 "util/configparser.c"
+#line 3208 "util/configparser.c"
break;
- case 332: /* rpz_action_override: VAR_RPZ_ACTION_OVERRIDE STRING_ARG */
-#line 494 "util/configparser.y"
+ case 334: /* rpz_action_override: VAR_RPZ_ACTION_OVERRIDE STRING_ARG */
+#line 498 "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 &&
@@ -3208,21 +3223,21 @@ yyreduce:
cfg_parser->cfg->auths->rpz_action_override = (yyvsp[0].str);
}
}
-#line 3212 "util/configparser.c"
+#line 3227 "util/configparser.c"
break;
- case 333: /* rpz_cname_override: VAR_RPZ_CNAME_OVERRIDE STRING_ARG */
-#line 511 "util/configparser.y"
+ case 335: /* rpz_cname_override: VAR_RPZ_CNAME_OVERRIDE STRING_ARG */
+#line 515 "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 3222 "util/configparser.c"
+#line 3237 "util/configparser.c"
break;
- case 334: /* rpz_log: VAR_RPZ_LOG STRING_ARG */
-#line 519 "util/configparser.y"
+ case 336: /* rpz_log: VAR_RPZ_LOG STRING_ARG */
+#line 523 "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)
@@ -3230,21 +3245,21 @@ yyreduce:
else cfg_parser->cfg->auths->rpz_log = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3234 "util/configparser.c"
+#line 3249 "util/configparser.c"
break;
- case 335: /* rpz_log_name: VAR_RPZ_LOG_NAME STRING_ARG */
-#line 529 "util/configparser.y"
+ case 337: /* rpz_log_name: VAR_RPZ_LOG_NAME STRING_ARG */
+#line 533 "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 3244 "util/configparser.c"
+#line 3259 "util/configparser.c"
break;
- case 336: /* rpz_signal_nxdomain_ra: VAR_RPZ_SIGNAL_NXDOMAIN_RA STRING_ARG */
-#line 536 "util/configparser.y"
+ case 338: /* rpz_signal_nxdomain_ra: VAR_RPZ_SIGNAL_NXDOMAIN_RA STRING_ARG */
+#line 540 "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)
@@ -3252,11 +3267,11 @@ yyreduce:
else cfg_parser->cfg->auths->rpz_signal_nxdomain_ra = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3256 "util/configparser.c"
+#line 3271 "util/configparser.c"
break;
- case 337: /* rpzstart: VAR_RPZ */
-#line 546 "util/configparser.y"
+ case 339: /* rpzstart: VAR_RPZ */
+#line 550 "util/configparser.y"
{
struct config_auth* s;
OUTYY(("\nP(rpz:)\n"));
@@ -3270,15 +3285,17 @@ yyreduce:
s->for_upstream = 0;
s->fallback_enabled = 0;
s->isrpz = 1;
+ s->max_transfer_size = 0;
+ s->max_transfer_time = 0;
} else {
yyerror("out of memory");
}
}
-#line 3278 "util/configparser.c"
+#line 3295 "util/configparser.c"
break;
- case 352: /* server_num_threads: VAR_NUM_THREADS STRING_ARG */
-#line 571 "util/configparser.y"
+ case 356: /* server_num_threads: VAR_NUM_THREADS STRING_ARG */
+#line 578 "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)
@@ -3286,11 +3303,11 @@ yyreduce:
else cfg_parser->cfg->num_threads = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 3290 "util/configparser.c"
+#line 3307 "util/configparser.c"
break;
- case 353: /* server_verbosity: VAR_VERBOSITY STRING_ARG */
-#line 580 "util/configparser.y"
+ case 357: /* server_verbosity: VAR_VERBOSITY STRING_ARG */
+#line 587 "util/configparser.y"
{
OUTYY(("P(server_verbosity:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -3298,11 +3315,11 @@ yyreduce:
else cfg_parser->cfg->verbosity = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 3302 "util/configparser.c"
+#line 3319 "util/configparser.c"
break;
- case 354: /* server_statistics_interval: VAR_STATISTICS_INTERVAL STRING_ARG */
-#line 589 "util/configparser.y"
+ case 358: /* server_statistics_interval: VAR_STATISTICS_INTERVAL STRING_ARG */
+#line 596 "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)
@@ -3312,11 +3329,11 @@ yyreduce:
else cfg_parser->cfg->stat_interval = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 3316 "util/configparser.c"
+#line 3333 "util/configparser.c"
break;
- case 355: /* server_statistics_cumulative: VAR_STATISTICS_CUMULATIVE STRING_ARG */
-#line 600 "util/configparser.y"
+ case 359: /* server_statistics_cumulative: VAR_STATISTICS_CUMULATIVE STRING_ARG */
+#line 607 "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)
@@ -3324,11 +3341,11 @@ yyreduce:
else cfg_parser->cfg->stat_cumulative = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3328 "util/configparser.c"
+#line 3345 "util/configparser.c"
break;
- case 356: /* server_extended_statistics: VAR_EXTENDED_STATISTICS STRING_ARG */
-#line 609 "util/configparser.y"
+ case 360: /* server_extended_statistics: VAR_EXTENDED_STATISTICS STRING_ARG */
+#line 616 "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)
@@ -3336,11 +3353,11 @@ yyreduce:
else cfg_parser->cfg->stat_extended = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3340 "util/configparser.c"
+#line 3357 "util/configparser.c"
break;
- case 357: /* server_statistics_inhibit_zero: VAR_STATISTICS_INHIBIT_ZERO STRING_ARG */
-#line 618 "util/configparser.y"
+ case 361: /* server_statistics_inhibit_zero: VAR_STATISTICS_INHIBIT_ZERO STRING_ARG */
+#line 625 "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)
@@ -3348,11 +3365,11 @@ yyreduce:
else cfg_parser->cfg->stat_inhibit_zero = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3352 "util/configparser.c"
+#line 3369 "util/configparser.c"
break;
- case 358: /* server_shm_enable: VAR_SHM_ENABLE STRING_ARG */
-#line 627 "util/configparser.y"
+ case 362: /* server_shm_enable: VAR_SHM_ENABLE STRING_ARG */
+#line 634 "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)
@@ -3360,11 +3377,11 @@ yyreduce:
else cfg_parser->cfg->shm_enable = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3364 "util/configparser.c"
+#line 3381 "util/configparser.c"
break;
- case 359: /* server_shm_key: VAR_SHM_KEY STRING_ARG */
-#line 636 "util/configparser.y"
+ case 363: /* server_shm_key: VAR_SHM_KEY STRING_ARG */
+#line 643 "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)
@@ -3374,11 +3391,11 @@ yyreduce:
else cfg_parser->cfg->shm_key = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 3378 "util/configparser.c"
+#line 3395 "util/configparser.c"
break;
- case 360: /* server_port: VAR_PORT STRING_ARG */
-#line 647 "util/configparser.y"
+ case 364: /* server_port: VAR_PORT STRING_ARG */
+#line 654 "util/configparser.y"
{
OUTYY(("P(server_port:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0)
@@ -3386,42 +3403,42 @@ yyreduce:
else cfg_parser->cfg->port = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 3390 "util/configparser.c"
+#line 3407 "util/configparser.c"
break;
- case 361: /* server_send_client_subnet: VAR_SEND_CLIENT_SUBNET STRING_ARG */
-#line 656 "util/configparser.y"
+ case 365: /* server_send_client_subnet: VAR_SEND_CLIENT_SUBNET STRING_ARG */
+#line 663 "util/configparser.y"
{
#ifdef CLIENT_SUBNET
OUTYY(("P(server_send_client_subnet:%s)\n", (yyvsp[0].str)));
if(!cfg_strlist_insert(&cfg_parser->cfg->client_subnet, (yyvsp[0].str)))
- fatal_exit("out of memory adding client-subnet");
+ yyerror("out of memory");
#else
OUTYY(("P(Compiled without edns subnet option, ignoring)\n"));
free((yyvsp[0].str));
#endif
}
-#line 3405 "util/configparser.c"
+#line 3422 "util/configparser.c"
break;
- case 362: /* server_client_subnet_zone: VAR_CLIENT_SUBNET_ZONE STRING_ARG */
-#line 668 "util/configparser.y"
+ case 366: /* server_client_subnet_zone: VAR_CLIENT_SUBNET_ZONE STRING_ARG */
+#line 675 "util/configparser.y"
{
#ifdef CLIENT_SUBNET
OUTYY(("P(server_client_subnet_zone:%s)\n", (yyvsp[0].str)));
if(!cfg_strlist_insert(&cfg_parser->cfg->client_subnet_zone,
(yyvsp[0].str)))
- fatal_exit("out of memory adding client-subnet-zone");
+ yyerror("out of memory");
#else
OUTYY(("P(Compiled without edns subnet option, ignoring)\n"));
free((yyvsp[0].str));
#endif
}
-#line 3421 "util/configparser.c"
+#line 3438 "util/configparser.c"
break;
- case 363: /* server_client_subnet_always_forward: VAR_CLIENT_SUBNET_ALWAYS_FORWARD STRING_ARG */
-#line 682 "util/configparser.y"
+ case 367: /* server_client_subnet_always_forward: VAR_CLIENT_SUBNET_ALWAYS_FORWARD STRING_ARG */
+#line 689 "util/configparser.y"
{
#ifdef CLIENT_SUBNET
OUTYY(("P(server_client_subnet_always_forward:%s)\n", (yyvsp[0].str)));
@@ -3435,11 +3452,11 @@ yyreduce:
#endif
free((yyvsp[0].str));
}
-#line 3439 "util/configparser.c"
+#line 3456 "util/configparser.c"
break;
- case 364: /* server_client_subnet_opcode: VAR_CLIENT_SUBNET_OPCODE STRING_ARG */
-#line 697 "util/configparser.y"
+ case 368: /* server_client_subnet_opcode: VAR_CLIENT_SUBNET_OPCODE STRING_ARG */
+#line 704 "util/configparser.y"
{
#ifdef CLIENT_SUBNET
OUTYY(("P(client_subnet_opcode:%s)\n", (yyvsp[0].str)));
@@ -3449,11 +3466,11 @@ yyreduce:
#endif
free((yyvsp[0].str));
}
-#line 3453 "util/configparser.c"
+#line 3470 "util/configparser.c"
break;
- case 365: /* server_max_client_subnet_ipv4: VAR_MAX_CLIENT_SUBNET_IPV4 STRING_ARG */
-#line 708 "util/configparser.y"
+ case 369: /* server_max_client_subnet_ipv4: VAR_MAX_CLIENT_SUBNET_IPV4 STRING_ARG */
+#line 715 "util/configparser.y"
{
#ifdef CLIENT_SUBNET
OUTYY(("P(max_client_subnet_ipv4:%s)\n", (yyvsp[0].str)));
@@ -3469,11 +3486,11 @@ yyreduce:
#endif
free((yyvsp[0].str));
}
-#line 3473 "util/configparser.c"
+#line 3490 "util/configparser.c"
break;
- case 366: /* server_max_client_subnet_ipv6: VAR_MAX_CLIENT_SUBNET_IPV6 STRING_ARG */
-#line 725 "util/configparser.y"
+ case 370: /* server_max_client_subnet_ipv6: VAR_MAX_CLIENT_SUBNET_IPV6 STRING_ARG */
+#line 732 "util/configparser.y"
{
#ifdef CLIENT_SUBNET
OUTYY(("P(max_client_subnet_ipv6:%s)\n", (yyvsp[0].str)));
@@ -3489,11 +3506,11 @@ yyreduce:
#endif
free((yyvsp[0].str));
}
-#line 3493 "util/configparser.c"
+#line 3510 "util/configparser.c"
break;
- case 367: /* server_min_client_subnet_ipv4: VAR_MIN_CLIENT_SUBNET_IPV4 STRING_ARG */
-#line 742 "util/configparser.y"
+ case 371: /* server_min_client_subnet_ipv4: VAR_MIN_CLIENT_SUBNET_IPV4 STRING_ARG */
+#line 749 "util/configparser.y"
{
#ifdef CLIENT_SUBNET
OUTYY(("P(min_client_subnet_ipv4:%s)\n", (yyvsp[0].str)));
@@ -3509,11 +3526,11 @@ yyreduce:
#endif
free((yyvsp[0].str));
}
-#line 3513 "util/configparser.c"
+#line 3530 "util/configparser.c"
break;
- case 368: /* server_min_client_subnet_ipv6: VAR_MIN_CLIENT_SUBNET_IPV6 STRING_ARG */
-#line 759 "util/configparser.y"
+ case 372: /* server_min_client_subnet_ipv6: VAR_MIN_CLIENT_SUBNET_IPV6 STRING_ARG */
+#line 766 "util/configparser.y"
{
#ifdef CLIENT_SUBNET
OUTYY(("P(min_client_subnet_ipv6:%s)\n", (yyvsp[0].str)));
@@ -3529,11 +3546,11 @@ yyreduce:
#endif
free((yyvsp[0].str));
}
-#line 3533 "util/configparser.c"
+#line 3550 "util/configparser.c"
break;
- case 369: /* server_max_ecs_tree_size_ipv4: VAR_MAX_ECS_TREE_SIZE_IPV4 STRING_ARG */
-#line 776 "util/configparser.y"
+ case 373: /* server_max_ecs_tree_size_ipv4: VAR_MAX_ECS_TREE_SIZE_IPV4 STRING_ARG */
+#line 783 "util/configparser.y"
{
#ifdef CLIENT_SUBNET
OUTYY(("P(max_ecs_tree_size_ipv4:%s)\n", (yyvsp[0].str)));
@@ -3547,11 +3564,11 @@ yyreduce:
#endif
free((yyvsp[0].str));
}
-#line 3551 "util/configparser.c"
+#line 3568 "util/configparser.c"
break;
- case 370: /* server_max_ecs_tree_size_ipv6: VAR_MAX_ECS_TREE_SIZE_IPV6 STRING_ARG */
-#line 791 "util/configparser.y"
+ case 374: /* server_max_ecs_tree_size_ipv6: VAR_MAX_ECS_TREE_SIZE_IPV6 STRING_ARG */
+#line 798 "util/configparser.y"
{
#ifdef CLIENT_SUBNET
OUTYY(("P(max_ecs_tree_size_ipv6:%s)\n", (yyvsp[0].str)));
@@ -3565,11 +3582,11 @@ yyreduce:
#endif
free((yyvsp[0].str));
}
-#line 3569 "util/configparser.c"
+#line 3586 "util/configparser.c"
break;
- case 371: /* server_interface: VAR_INTERFACE STRING_ARG */
-#line 806 "util/configparser.y"
+ case 375: /* server_interface: VAR_INTERFACE STRING_ARG */
+#line 813 "util/configparser.y"
{
OUTYY(("P(server_interface:%s)\n", (yyvsp[0].str)));
if(cfg_parser->cfg->num_ifs == 0)
@@ -3581,11 +3598,11 @@ yyreduce:
else
cfg_parser->cfg->ifs[cfg_parser->cfg->num_ifs++] = (yyvsp[0].str);
}
-#line 3585 "util/configparser.c"
+#line 3602 "util/configparser.c"
break;
- case 372: /* server_outgoing_interface: VAR_OUTGOING_INTERFACE STRING_ARG */
-#line 819 "util/configparser.y"
+ case 376: /* server_outgoing_interface: VAR_OUTGOING_INTERFACE STRING_ARG */
+#line 826 "util/configparser.y"
{
OUTYY(("P(server_outgoing_interface:%s)\n", (yyvsp[0].str)));
if(cfg_parser->cfg->num_out_ifs == 0)
@@ -3599,11 +3616,11 @@ yyreduce:
cfg_parser->cfg->out_ifs[
cfg_parser->cfg->num_out_ifs++] = (yyvsp[0].str);
}
-#line 3603 "util/configparser.c"
+#line 3620 "util/configparser.c"
break;
- case 373: /* server_outgoing_range: VAR_OUTGOING_RANGE STRING_ARG */
-#line 834 "util/configparser.y"
+ case 377: /* server_outgoing_range: VAR_OUTGOING_RANGE STRING_ARG */
+#line 841 "util/configparser.y"
{
OUTYY(("P(server_outgoing_range:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0)
@@ -3611,11 +3628,11 @@ yyreduce:
else cfg_parser->cfg->outgoing_num_ports = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 3615 "util/configparser.c"
+#line 3632 "util/configparser.c"
break;
- case 374: /* server_outgoing_port_permit: VAR_OUTGOING_PORT_PERMIT STRING_ARG */
-#line 843 "util/configparser.y"
+ case 378: /* server_outgoing_port_permit: VAR_OUTGOING_PORT_PERMIT STRING_ARG */
+#line 850 "util/configparser.y"
{
OUTYY(("P(server_outgoing_port_permit:%s)\n", (yyvsp[0].str)));
if(!cfg_mark_ports((yyvsp[0].str), 1,
@@ -3623,11 +3640,11 @@ yyreduce:
yyerror("port number or range (\"low-high\") expected");
free((yyvsp[0].str));
}
-#line 3627 "util/configparser.c"
+#line 3644 "util/configparser.c"
break;
- case 375: /* server_outgoing_port_avoid: VAR_OUTGOING_PORT_AVOID STRING_ARG */
-#line 852 "util/configparser.y"
+ case 379: /* server_outgoing_port_avoid: VAR_OUTGOING_PORT_AVOID STRING_ARG */
+#line 859 "util/configparser.y"
{
OUTYY(("P(server_outgoing_port_avoid:%s)\n", (yyvsp[0].str)));
if(!cfg_mark_ports((yyvsp[0].str), 0,
@@ -3635,11 +3652,11 @@ yyreduce:
yyerror("port number or range (\"low-high\") expected");
free((yyvsp[0].str));
}
-#line 3639 "util/configparser.c"
+#line 3656 "util/configparser.c"
break;
- case 376: /* server_outgoing_num_tcp: VAR_OUTGOING_NUM_TCP STRING_ARG */
-#line 861 "util/configparser.y"
+ case 380: /* server_outgoing_num_tcp: VAR_OUTGOING_NUM_TCP STRING_ARG */
+#line 868 "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)
@@ -3647,11 +3664,11 @@ yyreduce:
else cfg_parser->cfg->outgoing_num_tcp = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 3651 "util/configparser.c"
+#line 3668 "util/configparser.c"
break;
- case 377: /* server_incoming_num_tcp: VAR_INCOMING_NUM_TCP STRING_ARG */
-#line 870 "util/configparser.y"
+ case 381: /* server_incoming_num_tcp: VAR_INCOMING_NUM_TCP STRING_ARG */
+#line 877 "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)
@@ -3659,11 +3676,11 @@ yyreduce:
else cfg_parser->cfg->incoming_num_tcp = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 3663 "util/configparser.c"
+#line 3680 "util/configparser.c"
break;
- case 378: /* server_interface_automatic: VAR_INTERFACE_AUTOMATIC STRING_ARG */
-#line 879 "util/configparser.y"
+ case 382: /* server_interface_automatic: VAR_INTERFACE_AUTOMATIC STRING_ARG */
+#line 886 "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)
@@ -3671,21 +3688,21 @@ yyreduce:
else cfg_parser->cfg->if_automatic = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3675 "util/configparser.c"
+#line 3692 "util/configparser.c"
break;
- case 379: /* server_interface_automatic_ports: VAR_INTERFACE_AUTOMATIC_PORTS STRING_ARG */
-#line 888 "util/configparser.y"
+ case 383: /* server_interface_automatic_ports: VAR_INTERFACE_AUTOMATIC_PORTS STRING_ARG */
+#line 895 "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 3685 "util/configparser.c"
+#line 3702 "util/configparser.c"
break;
- case 380: /* server_do_ip4: VAR_DO_IP4 STRING_ARG */
-#line 895 "util/configparser.y"
+ case 384: /* server_do_ip4: VAR_DO_IP4 STRING_ARG */
+#line 902 "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)
@@ -3693,11 +3710,11 @@ yyreduce:
else cfg_parser->cfg->do_ip4 = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3697 "util/configparser.c"
+#line 3714 "util/configparser.c"
break;
- case 381: /* server_do_ip6: VAR_DO_IP6 STRING_ARG */
-#line 904 "util/configparser.y"
+ case 385: /* server_do_ip6: VAR_DO_IP6 STRING_ARG */
+#line 911 "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)
@@ -3705,11 +3722,11 @@ yyreduce:
else cfg_parser->cfg->do_ip6 = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3709 "util/configparser.c"
+#line 3726 "util/configparser.c"
break;
- case 382: /* server_do_nat64: VAR_DO_NAT64 STRING_ARG */
-#line 913 "util/configparser.y"
+ case 386: /* server_do_nat64: VAR_DO_NAT64 STRING_ARG */
+#line 920 "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)
@@ -3717,11 +3734,11 @@ yyreduce:
else cfg_parser->cfg->do_nat64 = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3721 "util/configparser.c"
+#line 3738 "util/configparser.c"
break;
- case 383: /* server_do_udp: VAR_DO_UDP STRING_ARG */
-#line 922 "util/configparser.y"
+ case 387: /* server_do_udp: VAR_DO_UDP STRING_ARG */
+#line 929 "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)
@@ -3729,11 +3746,11 @@ yyreduce:
else cfg_parser->cfg->do_udp = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3733 "util/configparser.c"
+#line 3750 "util/configparser.c"
break;
- case 384: /* server_do_tcp: VAR_DO_TCP STRING_ARG */
-#line 931 "util/configparser.y"
+ case 388: /* server_do_tcp: VAR_DO_TCP STRING_ARG */
+#line 938 "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)
@@ -3741,11 +3758,11 @@ yyreduce:
else cfg_parser->cfg->do_tcp = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3745 "util/configparser.c"
+#line 3762 "util/configparser.c"
break;
- case 385: /* server_prefer_ip4: VAR_PREFER_IP4 STRING_ARG */
-#line 940 "util/configparser.y"
+ case 389: /* server_prefer_ip4: VAR_PREFER_IP4 STRING_ARG */
+#line 947 "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)
@@ -3753,11 +3770,11 @@ yyreduce:
else cfg_parser->cfg->prefer_ip4 = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3757 "util/configparser.c"
+#line 3774 "util/configparser.c"
break;
- case 386: /* server_prefer_ip6: VAR_PREFER_IP6 STRING_ARG */
-#line 949 "util/configparser.y"
+ case 390: /* server_prefer_ip6: VAR_PREFER_IP6 STRING_ARG */
+#line 956 "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)
@@ -3765,11 +3782,11 @@ yyreduce:
else cfg_parser->cfg->prefer_ip6 = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3769 "util/configparser.c"
+#line 3786 "util/configparser.c"
break;
- case 387: /* server_tcp_mss: VAR_TCP_MSS STRING_ARG */
-#line 958 "util/configparser.y"
+ case 391: /* server_tcp_mss: VAR_TCP_MSS STRING_ARG */
+#line 965 "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)
@@ -3777,11 +3794,11 @@ yyreduce:
else cfg_parser->cfg->tcp_mss = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 3781 "util/configparser.c"
+#line 3798 "util/configparser.c"
break;
- case 388: /* server_outgoing_tcp_mss: VAR_OUTGOING_TCP_MSS STRING_ARG */
-#line 967 "util/configparser.y"
+ case 392: /* server_outgoing_tcp_mss: VAR_OUTGOING_TCP_MSS STRING_ARG */
+#line 974 "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)
@@ -3789,11 +3806,11 @@ yyreduce:
else cfg_parser->cfg->outgoing_tcp_mss = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 3793 "util/configparser.c"
+#line 3810 "util/configparser.c"
break;
- case 389: /* server_tcp_idle_timeout: VAR_TCP_IDLE_TIMEOUT STRING_ARG */
-#line 976 "util/configparser.y"
+ case 393: /* server_tcp_idle_timeout: VAR_TCP_IDLE_TIMEOUT STRING_ARG */
+#line 983 "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)
@@ -3805,11 +3822,11 @@ yyreduce:
else cfg_parser->cfg->tcp_idle_timeout = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 3809 "util/configparser.c"
+#line 3826 "util/configparser.c"
break;
- case 390: /* server_max_reuse_tcp_queries: VAR_MAX_REUSE_TCP_QUERIES STRING_ARG */
-#line 989 "util/configparser.y"
+ case 394: /* server_max_reuse_tcp_queries: VAR_MAX_REUSE_TCP_QUERIES STRING_ARG */
+#line 996 "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)
@@ -3819,11 +3836,11 @@ yyreduce:
else cfg_parser->cfg->max_reuse_tcp_queries = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 3823 "util/configparser.c"
+#line 3840 "util/configparser.c"
break;
- case 391: /* server_tcp_reuse_timeout: VAR_TCP_REUSE_TIMEOUT STRING_ARG */
-#line 1000 "util/configparser.y"
+ case 395: /* server_tcp_reuse_timeout: VAR_TCP_REUSE_TIMEOUT STRING_ARG */
+#line 1007 "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)
@@ -3833,11 +3850,11 @@ yyreduce:
else cfg_parser->cfg->tcp_reuse_timeout = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 3837 "util/configparser.c"
+#line 3854 "util/configparser.c"
break;
- case 392: /* server_tcp_auth_query_timeout: VAR_TCP_AUTH_QUERY_TIMEOUT STRING_ARG */
-#line 1011 "util/configparser.y"
+ case 396: /* server_tcp_auth_query_timeout: VAR_TCP_AUTH_QUERY_TIMEOUT STRING_ARG */
+#line 1018 "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)
@@ -3847,11 +3864,11 @@ yyreduce:
else cfg_parser->cfg->tcp_auth_query_timeout = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 3851 "util/configparser.c"
+#line 3868 "util/configparser.c"
break;
- case 393: /* server_tcp_keepalive: VAR_EDNS_TCP_KEEPALIVE STRING_ARG */
-#line 1022 "util/configparser.y"
+ case 397: /* server_tcp_keepalive: VAR_EDNS_TCP_KEEPALIVE STRING_ARG */
+#line 1029 "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)
@@ -3859,11 +3876,11 @@ yyreduce:
else cfg_parser->cfg->do_tcp_keepalive = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3863 "util/configparser.c"
+#line 3880 "util/configparser.c"
break;
- case 394: /* server_tcp_keepalive_timeout: VAR_EDNS_TCP_KEEPALIVE_TIMEOUT STRING_ARG */
-#line 1031 "util/configparser.y"
+ case 398: /* server_tcp_keepalive_timeout: VAR_EDNS_TCP_KEEPALIVE_TIMEOUT STRING_ARG */
+#line 1038 "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)
@@ -3875,11 +3892,11 @@ yyreduce:
else cfg_parser->cfg->tcp_keepalive_timeout = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 3879 "util/configparser.c"
+#line 3896 "util/configparser.c"
break;
- case 395: /* server_sock_queue_timeout: VAR_SOCK_QUEUE_TIMEOUT STRING_ARG */
-#line 1044 "util/configparser.y"
+ case 399: /* server_sock_queue_timeout: VAR_SOCK_QUEUE_TIMEOUT STRING_ARG */
+#line 1051 "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)
@@ -3891,11 +3908,11 @@ yyreduce:
else cfg_parser->cfg->sock_queue_timeout = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 3895 "util/configparser.c"
+#line 3912 "util/configparser.c"
break;
- case 396: /* server_tcp_upstream: VAR_TCP_UPSTREAM STRING_ARG */
-#line 1057 "util/configparser.y"
+ case 400: /* server_tcp_upstream: VAR_TCP_UPSTREAM STRING_ARG */
+#line 1064 "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)
@@ -3903,11 +3920,11 @@ yyreduce:
else cfg_parser->cfg->tcp_upstream = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3907 "util/configparser.c"
+#line 3924 "util/configparser.c"
break;
- case 397: /* server_udp_upstream_without_downstream: VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM STRING_ARG */
-#line 1066 "util/configparser.y"
+ case 401: /* server_udp_upstream_without_downstream: VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM STRING_ARG */
+#line 1073 "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)
@@ -3915,11 +3932,11 @@ yyreduce:
else cfg_parser->cfg->udp_upstream_without_downstream = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3919 "util/configparser.c"
+#line 3936 "util/configparser.c"
break;
- case 398: /* server_ssl_upstream: VAR_SSL_UPSTREAM STRING_ARG */
-#line 1075 "util/configparser.y"
+ case 402: /* server_ssl_upstream: VAR_SSL_UPSTREAM STRING_ARG */
+#line 1082 "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)
@@ -3927,31 +3944,31 @@ yyreduce:
else cfg_parser->cfg->ssl_upstream = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3931 "util/configparser.c"
+#line 3948 "util/configparser.c"
break;
- case 399: /* server_ssl_service_key: VAR_SSL_SERVICE_KEY STRING_ARG */
-#line 1084 "util/configparser.y"
+ case 403: /* server_ssl_service_key: VAR_SSL_SERVICE_KEY STRING_ARG */
+#line 1091 "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 3941 "util/configparser.c"
+#line 3958 "util/configparser.c"
break;
- case 400: /* server_ssl_service_pem: VAR_SSL_SERVICE_PEM STRING_ARG */
-#line 1091 "util/configparser.y"
+ case 404: /* server_ssl_service_pem: VAR_SSL_SERVICE_PEM STRING_ARG */
+#line 1098 "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 3951 "util/configparser.c"
+#line 3968 "util/configparser.c"
break;
- case 401: /* server_ssl_port: VAR_SSL_PORT STRING_ARG */
-#line 1098 "util/configparser.y"
+ case 405: /* server_ssl_port: VAR_SSL_PORT STRING_ARG */
+#line 1105 "util/configparser.y"
{
OUTYY(("P(server_ssl_port:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0)
@@ -3959,21 +3976,21 @@ yyreduce:
else cfg_parser->cfg->ssl_port = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 3963 "util/configparser.c"
+#line 3980 "util/configparser.c"
break;
- case 402: /* server_tls_cert_bundle: VAR_TLS_CERT_BUNDLE STRING_ARG */
-#line 1107 "util/configparser.y"
+ case 406: /* server_tls_cert_bundle: VAR_TLS_CERT_BUNDLE STRING_ARG */
+#line 1114 "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 3973 "util/configparser.c"
+#line 3990 "util/configparser.c"
break;
- case 403: /* server_tls_win_cert: VAR_TLS_WIN_CERT STRING_ARG */
-#line 1114 "util/configparser.y"
+ case 407: /* server_tls_win_cert: VAR_TLS_WIN_CERT STRING_ARG */
+#line 1121 "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)
@@ -3981,53 +3998,53 @@ yyreduce:
else cfg_parser->cfg->tls_win_cert = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3985 "util/configparser.c"
+#line 4002 "util/configparser.c"
break;
- case 404: /* server_tls_additional_port: VAR_TLS_ADDITIONAL_PORT STRING_ARG */
-#line 1123 "util/configparser.y"
+ case 408: /* server_tls_additional_port: VAR_TLS_ADDITIONAL_PORT STRING_ARG */
+#line 1130 "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 3996 "util/configparser.c"
+#line 4013 "util/configparser.c"
break;
- case 405: /* server_tls_ciphers: VAR_TLS_CIPHERS STRING_ARG */
-#line 1131 "util/configparser.y"
+ case 409: /* server_tls_ciphers: VAR_TLS_CIPHERS STRING_ARG */
+#line 1138 "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 4006 "util/configparser.c"
+#line 4023 "util/configparser.c"
break;
- case 406: /* server_tls_ciphersuites: VAR_TLS_CIPHERSUITES STRING_ARG */
-#line 1138 "util/configparser.y"
+ case 410: /* server_tls_ciphersuites: VAR_TLS_CIPHERSUITES STRING_ARG */
+#line 1145 "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 4016 "util/configparser.c"
+#line 4033 "util/configparser.c"
break;
- case 407: /* server_tls_session_ticket_keys: VAR_TLS_SESSION_TICKET_KEYS STRING_ARG */
-#line 1145 "util/configparser.y"
+ case 411: /* server_tls_session_ticket_keys: VAR_TLS_SESSION_TICKET_KEYS STRING_ARG */
+#line 1152 "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 4027 "util/configparser.c"
+#line 4044 "util/configparser.c"
break;
- case 408: /* server_tls_use_sni: VAR_TLS_USE_SNI STRING_ARG */
-#line 1153 "util/configparser.y"
+ case 412: /* server_tls_use_sni: VAR_TLS_USE_SNI STRING_ARG */
+#line 1160 "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)
@@ -4035,11 +4052,11 @@ yyreduce:
else cfg_parser->cfg->tls_use_sni = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4039 "util/configparser.c"
+#line 4056 "util/configparser.c"
break;
- case 409: /* server_tls_protocols: VAR_TLS_PROTOCOLS STRING_ARG */
-#line 1162 "util/configparser.y"
+ case 413: /* server_tls_protocols: VAR_TLS_PROTOCOLS STRING_ARG */
+#line 1169 "util/configparser.y"
{
OUTYY(("P(server_tls_protocols:%s)\n", (yyvsp[0].str)));
if(!cfg_tls_protocols_is_valid((yyvsp[0].str)))
@@ -4047,11 +4064,11 @@ yyreduce:
free(cfg_parser->cfg->tls_protocols);
cfg_parser->cfg->tls_protocols = (yyvsp[0].str);
}
-#line 4051 "util/configparser.c"
+#line 4068 "util/configparser.c"
break;
- case 410: /* server_https_port: VAR_HTTPS_PORT STRING_ARG */
-#line 1171 "util/configparser.y"
+ case 414: /* server_https_port: VAR_HTTPS_PORT STRING_ARG */
+#line 1178 "util/configparser.y"
{
OUTYY(("P(server_https_port:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0)
@@ -4059,11 +4076,11 @@ yyreduce:
else cfg_parser->cfg->https_port = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 4063 "util/configparser.c"
+#line 4080 "util/configparser.c"
break;
- case 411: /* server_http_endpoint: VAR_HTTP_ENDPOINT STRING_ARG */
-#line 1179 "util/configparser.y"
+ case 415: /* server_http_endpoint: VAR_HTTP_ENDPOINT STRING_ARG */
+#line 1186 "util/configparser.y"
{
OUTYY(("P(server_http_endpoint:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->http_endpoint);
@@ -4081,11 +4098,11 @@ yyreduce:
cfg_parser->cfg->http_endpoint = (yyvsp[0].str);
}
}
-#line 4085 "util/configparser.c"
+#line 4102 "util/configparser.c"
break;
- case 412: /* server_http_max_streams: VAR_HTTP_MAX_STREAMS STRING_ARG */
-#line 1197 "util/configparser.y"
+ case 416: /* server_http_max_streams: VAR_HTTP_MAX_STREAMS STRING_ARG */
+#line 1204 "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)
@@ -4093,11 +4110,11 @@ yyreduce:
else cfg_parser->cfg->http_max_streams = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 4097 "util/configparser.c"
+#line 4114 "util/configparser.c"
break;
- case 413: /* server_http_query_buffer_size: VAR_HTTP_QUERY_BUFFER_SIZE STRING_ARG */
-#line 1205 "util/configparser.y"
+ case 417: /* server_http_query_buffer_size: VAR_HTTP_QUERY_BUFFER_SIZE STRING_ARG */
+#line 1212 "util/configparser.y"
{
OUTYY(("P(server_http_query_buffer_size:%s)\n", (yyvsp[0].str)));
if(!cfg_parse_memsize((yyvsp[0].str),
@@ -4105,11 +4122,11 @@ yyreduce:
yyerror("memory size expected");
free((yyvsp[0].str));
}
-#line 4109 "util/configparser.c"
+#line 4126 "util/configparser.c"
break;
- case 414: /* server_http_response_buffer_size: VAR_HTTP_RESPONSE_BUFFER_SIZE STRING_ARG */
-#line 1213 "util/configparser.y"
+ case 418: /* server_http_response_buffer_size: VAR_HTTP_RESPONSE_BUFFER_SIZE STRING_ARG */
+#line 1220 "util/configparser.y"
{
OUTYY(("P(server_http_response_buffer_size:%s)\n", (yyvsp[0].str)));
if(!cfg_parse_memsize((yyvsp[0].str),
@@ -4117,11 +4134,11 @@ yyreduce:
yyerror("memory size expected");
free((yyvsp[0].str));
}
-#line 4121 "util/configparser.c"
+#line 4138 "util/configparser.c"
break;
- case 415: /* server_http_nodelay: VAR_HTTP_NODELAY STRING_ARG */
-#line 1221 "util/configparser.y"
+ case 419: /* server_http_nodelay: VAR_HTTP_NODELAY STRING_ARG */
+#line 1228 "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)
@@ -4129,11 +4146,11 @@ yyreduce:
else cfg_parser->cfg->http_nodelay = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4133 "util/configparser.c"
+#line 4150 "util/configparser.c"
break;
- case 416: /* server_http_notls_downstream: VAR_HTTP_NOTLS_DOWNSTREAM STRING_ARG */
-#line 1229 "util/configparser.y"
+ case 420: /* server_http_notls_downstream: VAR_HTTP_NOTLS_DOWNSTREAM STRING_ARG */
+#line 1236 "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)
@@ -4141,11 +4158,11 @@ yyreduce:
else cfg_parser->cfg->http_notls_downstream = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4145 "util/configparser.c"
+#line 4162 "util/configparser.c"
break;
- case 417: /* server_quic_port: VAR_QUIC_PORT STRING_ARG */
-#line 1237 "util/configparser.y"
+ case 421: /* server_quic_port: VAR_QUIC_PORT STRING_ARG */
+#line 1244 "util/configparser.y"
{
OUTYY(("P(server_quic_port:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str),"0")!=0)
@@ -4161,22 +4178,22 @@ yyreduce:
}
free((yyvsp[0].str));
}
-#line 4165 "util/configparser.c"
+#line 4182 "util/configparser.c"
break;
- case 418: /* server_quic_size: VAR_QUIC_SIZE STRING_ARG */
-#line 1253 "util/configparser.y"
+ case 422: /* server_quic_size: VAR_QUIC_SIZE STRING_ARG */
+#line 1260 "util/configparser.y"
{
OUTYY(("P(server_quic_size:%s)\n", (yyvsp[0].str)));
if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->quic_size))
yyerror("memory size expected");
free((yyvsp[0].str));
}
-#line 4176 "util/configparser.c"
+#line 4193 "util/configparser.c"
break;
- case 419: /* server_use_systemd: VAR_USE_SYSTEMD STRING_ARG */
-#line 1260 "util/configparser.y"
+ case 423: /* server_use_systemd: VAR_USE_SYSTEMD STRING_ARG */
+#line 1267 "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)
@@ -4184,11 +4201,11 @@ yyreduce:
else cfg_parser->cfg->use_systemd = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4188 "util/configparser.c"
+#line 4205 "util/configparser.c"
break;
- case 420: /* server_do_daemonize: VAR_DO_DAEMONIZE STRING_ARG */
-#line 1269 "util/configparser.y"
+ case 424: /* server_do_daemonize: VAR_DO_DAEMONIZE STRING_ARG */
+#line 1276 "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)
@@ -4196,11 +4213,11 @@ yyreduce:
else cfg_parser->cfg->do_daemonize = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4200 "util/configparser.c"
+#line 4217 "util/configparser.c"
break;
- case 421: /* server_use_syslog: VAR_USE_SYSLOG STRING_ARG */
-#line 1278 "util/configparser.y"
+ case 425: /* server_use_syslog: VAR_USE_SYSLOG STRING_ARG */
+#line 1285 "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)
@@ -4213,11 +4230,11 @@ yyreduce:
#endif
free((yyvsp[0].str));
}
-#line 4217 "util/configparser.c"
+#line 4234 "util/configparser.c"
break;
- case 422: /* server_log_time_ascii: VAR_LOG_TIME_ASCII STRING_ARG */
-#line 1292 "util/configparser.y"
+ case 426: /* server_log_time_ascii: VAR_LOG_TIME_ASCII STRING_ARG */
+#line 1299 "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)
@@ -4225,11 +4242,11 @@ yyreduce:
else cfg_parser->cfg->log_time_ascii = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4229 "util/configparser.c"
+#line 4246 "util/configparser.c"
break;
- case 423: /* server_log_time_iso: VAR_LOG_TIME_ISO STRING_ARG */
-#line 1301 "util/configparser.y"
+ case 427: /* server_log_time_iso: VAR_LOG_TIME_ISO STRING_ARG */
+#line 1308 "util/configparser.y"
{
OUTYY(("P(server_log_time_iso:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4237,11 +4254,11 @@ yyreduce:
else cfg_parser->cfg->log_time_iso = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4241 "util/configparser.c"
+#line 4258 "util/configparser.c"
break;
- case 424: /* server_log_queries: VAR_LOG_QUERIES STRING_ARG */
-#line 1310 "util/configparser.y"
+ case 428: /* server_log_queries: VAR_LOG_QUERIES STRING_ARG */
+#line 1317 "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)
@@ -4249,11 +4266,11 @@ yyreduce:
else cfg_parser->cfg->log_queries = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4253 "util/configparser.c"
+#line 4270 "util/configparser.c"
break;
- case 425: /* server_log_replies: VAR_LOG_REPLIES STRING_ARG */
-#line 1319 "util/configparser.y"
+ case 429: /* server_log_replies: VAR_LOG_REPLIES STRING_ARG */
+#line 1326 "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)
@@ -4261,11 +4278,11 @@ yyreduce:
else cfg_parser->cfg->log_replies = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4265 "util/configparser.c"
+#line 4282 "util/configparser.c"
break;
- case 426: /* server_log_tag_queryreply: VAR_LOG_TAG_QUERYREPLY STRING_ARG */
-#line 1328 "util/configparser.y"
+ case 430: /* server_log_tag_queryreply: VAR_LOG_TAG_QUERYREPLY STRING_ARG */
+#line 1335 "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)
@@ -4273,11 +4290,11 @@ yyreduce:
else cfg_parser->cfg->log_tag_queryreply = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4277 "util/configparser.c"
+#line 4294 "util/configparser.c"
break;
- case 427: /* server_log_servfail: VAR_LOG_SERVFAIL STRING_ARG */
-#line 1337 "util/configparser.y"
+ case 431: /* server_log_servfail: VAR_LOG_SERVFAIL STRING_ARG */
+#line 1344 "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)
@@ -4285,11 +4302,11 @@ yyreduce:
else cfg_parser->cfg->log_servfail = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4289 "util/configparser.c"
+#line 4306 "util/configparser.c"
break;
- case 428: /* server_log_destaddr: VAR_LOG_DESTADDR STRING_ARG */
-#line 1346 "util/configparser.y"
+ case 432: /* server_log_destaddr: VAR_LOG_DESTADDR STRING_ARG */
+#line 1353 "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)
@@ -4297,11 +4314,11 @@ yyreduce:
else cfg_parser->cfg->log_destaddr = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4301 "util/configparser.c"
+#line 4318 "util/configparser.c"
break;
- case 429: /* server_log_thread_id: VAR_LOG_THREAD_ID STRING_ARG */
-#line 1355 "util/configparser.y"
+ case 433: /* server_log_thread_id: VAR_LOG_THREAD_ID STRING_ARG */
+#line 1362 "util/configparser.y"
{
OUTYY(("P(server_log_thread_id:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4309,11 +4326,11 @@ yyreduce:
else cfg_parser->cfg->log_thread_id = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4313 "util/configparser.c"
+#line 4330 "util/configparser.c"
break;
- case 430: /* server_log_local_actions: VAR_LOG_LOCAL_ACTIONS STRING_ARG */
-#line 1364 "util/configparser.y"
+ case 434: /* server_log_local_actions: VAR_LOG_LOCAL_ACTIONS STRING_ARG */
+#line 1371 "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)
@@ -4321,31 +4338,31 @@ yyreduce:
else cfg_parser->cfg->log_local_actions = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4325 "util/configparser.c"
+#line 4342 "util/configparser.c"
break;
- case 431: /* server_chroot: VAR_CHROOT STRING_ARG */
-#line 1373 "util/configparser.y"
+ case 435: /* server_chroot: VAR_CHROOT STRING_ARG */
+#line 1380 "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 4335 "util/configparser.c"
+#line 4352 "util/configparser.c"
break;
- case 432: /* server_username: VAR_USERNAME STRING_ARG */
-#line 1380 "util/configparser.y"
+ case 436: /* server_username: VAR_USERNAME STRING_ARG */
+#line 1387 "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 4345 "util/configparser.c"
+#line 4362 "util/configparser.c"
break;
- case 433: /* server_directory: VAR_DIRECTORY STRING_ARG */
-#line 1387 "util/configparser.y"
+ case 437: /* server_directory: VAR_DIRECTORY STRING_ARG */
+#line 1394 "util/configparser.y"
{
OUTYY(("P(server_directory:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->directory);
@@ -4370,105 +4387,105 @@ yyreduce:
}
}
}
-#line 4374 "util/configparser.c"
+#line 4391 "util/configparser.c"
break;
- case 434: /* server_logfile: VAR_LOGFILE STRING_ARG */
-#line 1413 "util/configparser.y"
+ case 438: /* server_logfile: VAR_LOGFILE STRING_ARG */
+#line 1420 "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 4385 "util/configparser.c"
+#line 4402 "util/configparser.c"
break;
- case 435: /* server_pidfile: VAR_PIDFILE STRING_ARG */
-#line 1421 "util/configparser.y"
+ case 439: /* server_pidfile: VAR_PIDFILE STRING_ARG */
+#line 1428 "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 4395 "util/configparser.c"
+#line 4412 "util/configparser.c"
break;
- case 436: /* server_root_hints: VAR_ROOT_HINTS STRING_ARG */
-#line 1428 "util/configparser.y"
+ case 440: /* server_root_hints: VAR_ROOT_HINTS STRING_ARG */
+#line 1435 "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 4405 "util/configparser.c"
+#line 4422 "util/configparser.c"
break;
- case 437: /* server_dlv_anchor_file: VAR_DLV_ANCHOR_FILE STRING_ARG */
-#line 1435 "util/configparser.y"
+ case 441: /* server_dlv_anchor_file: VAR_DLV_ANCHOR_FILE STRING_ARG */
+#line 1442 "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 4415 "util/configparser.c"
+#line 4432 "util/configparser.c"
break;
- case 438: /* server_dlv_anchor: VAR_DLV_ANCHOR STRING_ARG */
-#line 1442 "util/configparser.y"
+ case 442: /* server_dlv_anchor: VAR_DLV_ANCHOR STRING_ARG */
+#line 1449 "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 4425 "util/configparser.c"
+#line 4442 "util/configparser.c"
break;
- case 439: /* server_auto_trust_anchor_file: VAR_AUTO_TRUST_ANCHOR_FILE STRING_ARG */
-#line 1449 "util/configparser.y"
+ case 443: /* server_auto_trust_anchor_file: VAR_AUTO_TRUST_ANCHOR_FILE STRING_ARG */
+#line 1456 "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 4436 "util/configparser.c"
+#line 4453 "util/configparser.c"
break;
- case 440: /* server_trust_anchor_file: VAR_TRUST_ANCHOR_FILE STRING_ARG */
-#line 1457 "util/configparser.y"
+ case 444: /* server_trust_anchor_file: VAR_TRUST_ANCHOR_FILE STRING_ARG */
+#line 1464 "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 4447 "util/configparser.c"
+#line 4464 "util/configparser.c"
break;
- case 441: /* server_trusted_keys_file: VAR_TRUSTED_KEYS_FILE STRING_ARG */
-#line 1465 "util/configparser.y"
+ case 445: /* server_trusted_keys_file: VAR_TRUSTED_KEYS_FILE STRING_ARG */
+#line 1472 "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 4458 "util/configparser.c"
+#line 4475 "util/configparser.c"
break;
- case 442: /* server_trust_anchor: VAR_TRUST_ANCHOR STRING_ARG */
-#line 1473 "util/configparser.y"
+ case 446: /* server_trust_anchor: VAR_TRUST_ANCHOR STRING_ARG */
+#line 1480 "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 4468 "util/configparser.c"
+#line 4485 "util/configparser.c"
break;
- case 443: /* server_trust_anchor_signaling: VAR_TRUST_ANCHOR_SIGNALING STRING_ARG */
-#line 1480 "util/configparser.y"
+ case 447: /* server_trust_anchor_signaling: VAR_TRUST_ANCHOR_SIGNALING STRING_ARG */
+#line 1487 "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)
@@ -4478,11 +4495,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4482 "util/configparser.c"
+#line 4499 "util/configparser.c"
break;
- case 444: /* server_root_key_sentinel: VAR_ROOT_KEY_SENTINEL STRING_ARG */
-#line 1491 "util/configparser.y"
+ case 448: /* server_root_key_sentinel: VAR_ROOT_KEY_SENTINEL STRING_ARG */
+#line 1498 "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)
@@ -4492,21 +4509,21 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4496 "util/configparser.c"
+#line 4513 "util/configparser.c"
break;
- case 445: /* server_domain_insecure: VAR_DOMAIN_INSECURE STRING_ARG */
-#line 1502 "util/configparser.y"
+ case 449: /* server_domain_insecure: VAR_DOMAIN_INSECURE STRING_ARG */
+#line 1509 "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 4506 "util/configparser.c"
+#line 4523 "util/configparser.c"
break;
- case 446: /* server_hide_identity: VAR_HIDE_IDENTITY STRING_ARG */
-#line 1509 "util/configparser.y"
+ case 450: /* server_hide_identity: VAR_HIDE_IDENTITY STRING_ARG */
+#line 1516 "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)
@@ -4514,11 +4531,11 @@ yyreduce:
else cfg_parser->cfg->hide_identity = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4518 "util/configparser.c"
+#line 4535 "util/configparser.c"
break;
- case 447: /* server_hide_version: VAR_HIDE_VERSION STRING_ARG */
-#line 1518 "util/configparser.y"
+ case 451: /* server_hide_version: VAR_HIDE_VERSION STRING_ARG */
+#line 1525 "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)
@@ -4526,11 +4543,11 @@ yyreduce:
else cfg_parser->cfg->hide_version = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4530 "util/configparser.c"
+#line 4547 "util/configparser.c"
break;
- case 448: /* server_hide_trustanchor: VAR_HIDE_TRUSTANCHOR STRING_ARG */
-#line 1527 "util/configparser.y"
+ case 452: /* server_hide_trustanchor: VAR_HIDE_TRUSTANCHOR STRING_ARG */
+#line 1534 "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)
@@ -4538,11 +4555,11 @@ yyreduce:
else cfg_parser->cfg->hide_trustanchor = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4542 "util/configparser.c"
+#line 4559 "util/configparser.c"
break;
- case 449: /* server_hide_http_user_agent: VAR_HIDE_HTTP_USER_AGENT STRING_ARG */
-#line 1536 "util/configparser.y"
+ case 453: /* server_hide_http_user_agent: VAR_HIDE_HTTP_USER_AGENT STRING_ARG */
+#line 1543 "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)
@@ -4550,41 +4567,41 @@ yyreduce:
else cfg_parser->cfg->hide_http_user_agent = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4554 "util/configparser.c"
+#line 4571 "util/configparser.c"
break;
- case 450: /* server_identity: VAR_IDENTITY STRING_ARG */
-#line 1545 "util/configparser.y"
+ case 454: /* server_identity: VAR_IDENTITY STRING_ARG */
+#line 1552 "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 4564 "util/configparser.c"
+#line 4581 "util/configparser.c"
break;
- case 451: /* server_version: VAR_VERSION STRING_ARG */
-#line 1552 "util/configparser.y"
+ case 455: /* server_version: VAR_VERSION STRING_ARG */
+#line 1559 "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 4574 "util/configparser.c"
+#line 4591 "util/configparser.c"
break;
- case 452: /* server_http_user_agent: VAR_HTTP_USER_AGENT STRING_ARG */
-#line 1559 "util/configparser.y"
+ case 456: /* server_http_user_agent: VAR_HTTP_USER_AGENT STRING_ARG */
+#line 1566 "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 4584 "util/configparser.c"
+#line 4601 "util/configparser.c"
break;
- case 453: /* server_nsid: VAR_NSID STRING_ARG */
-#line 1566 "util/configparser.y"
+ case 457: /* server_nsid: VAR_NSID STRING_ARG */
+#line 1573 "util/configparser.y"
{
OUTYY(("P(server_nsid:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->nsid_cfg_str);
@@ -4599,33 +4616,33 @@ yyreduce:
yyerror("the NSID must be either a hex string or an "
"ascii character string prepended with ascii_.");
}
-#line 4603 "util/configparser.c"
+#line 4620 "util/configparser.c"
break;
- case 454: /* server_so_rcvbuf: VAR_SO_RCVBUF STRING_ARG */
-#line 1582 "util/configparser.y"
+ case 458: /* server_so_rcvbuf: VAR_SO_RCVBUF STRING_ARG */
+#line 1589 "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 4614 "util/configparser.c"
+#line 4631 "util/configparser.c"
break;
- case 455: /* server_so_sndbuf: VAR_SO_SNDBUF STRING_ARG */
-#line 1590 "util/configparser.y"
+ case 459: /* server_so_sndbuf: VAR_SO_SNDBUF STRING_ARG */
+#line 1597 "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 4625 "util/configparser.c"
+#line 4642 "util/configparser.c"
break;
- case 456: /* server_so_reuseport: VAR_SO_REUSEPORT STRING_ARG */
-#line 1598 "util/configparser.y"
+ case 460: /* server_so_reuseport: VAR_SO_REUSEPORT STRING_ARG */
+#line 1605 "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)
@@ -4634,11 +4651,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4638 "util/configparser.c"
+#line 4655 "util/configparser.c"
break;
- case 457: /* server_ip_transparent: VAR_IP_TRANSPARENT STRING_ARG */
-#line 1608 "util/configparser.y"
+ case 461: /* server_ip_transparent: VAR_IP_TRANSPARENT STRING_ARG */
+#line 1615 "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)
@@ -4647,11 +4664,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4651 "util/configparser.c"
+#line 4668 "util/configparser.c"
break;
- case 458: /* server_ip_freebind: VAR_IP_FREEBIND STRING_ARG */
-#line 1618 "util/configparser.y"
+ case 462: /* server_ip_freebind: VAR_IP_FREEBIND STRING_ARG */
+#line 1625 "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)
@@ -4660,11 +4677,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4664 "util/configparser.c"
+#line 4681 "util/configparser.c"
break;
- case 459: /* server_ip_dscp: VAR_IP_DSCP STRING_ARG */
-#line 1628 "util/configparser.y"
+ case 463: /* server_ip_dscp: VAR_IP_DSCP STRING_ARG */
+#line 1635 "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)
@@ -4677,22 +4694,22 @@ yyreduce:
cfg_parser->cfg->ip_dscp = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 4681 "util/configparser.c"
+#line 4698 "util/configparser.c"
break;
- case 460: /* server_stream_wait_size: VAR_STREAM_WAIT_SIZE STRING_ARG */
-#line 1642 "util/configparser.y"
+ case 464: /* server_stream_wait_size: VAR_STREAM_WAIT_SIZE STRING_ARG */
+#line 1649 "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 4692 "util/configparser.c"
+#line 4709 "util/configparser.c"
break;
- case 461: /* server_edns_buffer_size: VAR_EDNS_BUFFER_SIZE STRING_ARG */
-#line 1650 "util/configparser.y"
+ case 465: /* server_edns_buffer_size: VAR_EDNS_BUFFER_SIZE STRING_ARG */
+#line 1657 "util/configparser.y"
{
OUTYY(("P(server_edns_buffer_size:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0)
@@ -4704,11 +4721,11 @@ yyreduce:
else cfg_parser->cfg->edns_buffer_size = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 4708 "util/configparser.c"
+#line 4725 "util/configparser.c"
break;
- case 462: /* server_msg_buffer_size: VAR_MSG_BUFFER_SIZE STRING_ARG */
-#line 1663 "util/configparser.y"
+ case 466: /* server_msg_buffer_size: VAR_MSG_BUFFER_SIZE STRING_ARG */
+#line 1670 "util/configparser.y"
{
OUTYY(("P(server_msg_buffer_size:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0)
@@ -4718,22 +4735,22 @@ yyreduce:
else cfg_parser->cfg->msg_buffer_size = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 4722 "util/configparser.c"
+#line 4739 "util/configparser.c"
break;
- case 463: /* server_msg_cache_size: VAR_MSG_CACHE_SIZE STRING_ARG */
-#line 1674 "util/configparser.y"
+ case 467: /* server_msg_cache_size: VAR_MSG_CACHE_SIZE STRING_ARG */
+#line 1681 "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 4733 "util/configparser.c"
+#line 4750 "util/configparser.c"
break;
- case 464: /* server_msg_cache_slabs: VAR_MSG_CACHE_SLABS STRING_ARG */
-#line 1682 "util/configparser.y"
+ case 468: /* server_msg_cache_slabs: VAR_MSG_CACHE_SLABS STRING_ARG */
+#line 1689 "util/configparser.y"
{
OUTYY(("P(server_msg_cache_slabs:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0) {
@@ -4745,11 +4762,11 @@ yyreduce:
}
free((yyvsp[0].str));
}
-#line 4749 "util/configparser.c"
+#line 4766 "util/configparser.c"
break;
- case 465: /* server_num_queries_per_thread: VAR_NUM_QUERIES_PER_THREAD STRING_ARG */
-#line 1695 "util/configparser.y"
+ case 469: /* server_num_queries_per_thread: VAR_NUM_QUERIES_PER_THREAD STRING_ARG */
+#line 1702 "util/configparser.y"
{
OUTYY(("P(server_num_queries_per_thread:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0)
@@ -4757,11 +4774,11 @@ yyreduce:
else cfg_parser->cfg->num_queries_per_thread = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 4761 "util/configparser.c"
+#line 4778 "util/configparser.c"
break;
- case 466: /* server_jostle_timeout: VAR_JOSTLE_TIMEOUT STRING_ARG */
-#line 1704 "util/configparser.y"
+ case 470: /* server_jostle_timeout: VAR_JOSTLE_TIMEOUT STRING_ARG */
+#line 1711 "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)
@@ -4769,11 +4786,11 @@ yyreduce:
else cfg_parser->cfg->jostle_time = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 4773 "util/configparser.c"
+#line 4790 "util/configparser.c"
break;
- case 467: /* server_delay_close: VAR_DELAY_CLOSE STRING_ARG */
-#line 1713 "util/configparser.y"
+ case 471: /* server_delay_close: VAR_DELAY_CLOSE STRING_ARG */
+#line 1720 "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)
@@ -4781,11 +4798,11 @@ yyreduce:
else cfg_parser->cfg->delay_close = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 4785 "util/configparser.c"
+#line 4802 "util/configparser.c"
break;
- case 468: /* server_udp_connect: VAR_UDP_CONNECT STRING_ARG */
-#line 1722 "util/configparser.y"
+ case 472: /* server_udp_connect: VAR_UDP_CONNECT STRING_ARG */
+#line 1729 "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)
@@ -4793,11 +4810,11 @@ yyreduce:
else cfg_parser->cfg->udp_connect = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4797 "util/configparser.c"
+#line 4814 "util/configparser.c"
break;
- case 469: /* server_unblock_lan_zones: VAR_UNBLOCK_LAN_ZONES STRING_ARG */
-#line 1731 "util/configparser.y"
+ case 473: /* server_unblock_lan_zones: VAR_UNBLOCK_LAN_ZONES STRING_ARG */
+#line 1738 "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)
@@ -4806,11 +4823,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4810 "util/configparser.c"
+#line 4827 "util/configparser.c"
break;
- case 470: /* server_insecure_lan_zones: VAR_INSECURE_LAN_ZONES STRING_ARG */
-#line 1741 "util/configparser.y"
+ case 474: /* server_insecure_lan_zones: VAR_INSECURE_LAN_ZONES STRING_ARG */
+#line 1748 "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)
@@ -4819,22 +4836,22 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4823 "util/configparser.c"
+#line 4840 "util/configparser.c"
break;
- case 471: /* server_rrset_cache_size: VAR_RRSET_CACHE_SIZE STRING_ARG */
-#line 1751 "util/configparser.y"
+ case 475: /* server_rrset_cache_size: VAR_RRSET_CACHE_SIZE STRING_ARG */
+#line 1758 "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 4834 "util/configparser.c"
+#line 4851 "util/configparser.c"
break;
- case 472: /* server_rrset_cache_slabs: VAR_RRSET_CACHE_SLABS STRING_ARG */
-#line 1759 "util/configparser.y"
+ case 476: /* server_rrset_cache_slabs: VAR_RRSET_CACHE_SLABS STRING_ARG */
+#line 1766 "util/configparser.y"
{
OUTYY(("P(server_rrset_cache_slabs:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0) {
@@ -4846,11 +4863,11 @@ yyreduce:
}
free((yyvsp[0].str));
}
-#line 4850 "util/configparser.c"
+#line 4867 "util/configparser.c"
break;
- case 473: /* server_infra_host_ttl: VAR_INFRA_HOST_TTL STRING_ARG */
-#line 1772 "util/configparser.y"
+ case 477: /* server_infra_host_ttl: VAR_INFRA_HOST_TTL STRING_ARG */
+#line 1779 "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)
@@ -4858,22 +4875,22 @@ yyreduce:
else cfg_parser->cfg->host_ttl = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 4862 "util/configparser.c"
+#line 4879 "util/configparser.c"
break;
- case 474: /* server_infra_lame_ttl: VAR_INFRA_LAME_TTL STRING_ARG */
-#line 1781 "util/configparser.y"
+ case 478: /* server_infra_lame_ttl: VAR_INFRA_LAME_TTL STRING_ARG */
+#line 1788 "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 4873 "util/configparser.c"
+#line 4890 "util/configparser.c"
break;
- case 475: /* server_infra_cache_numhosts: VAR_INFRA_CACHE_NUMHOSTS STRING_ARG */
-#line 1789 "util/configparser.y"
+ case 479: /* server_infra_cache_numhosts: VAR_INFRA_CACHE_NUMHOSTS STRING_ARG */
+#line 1796 "util/configparser.y"
{
OUTYY(("P(server_infra_cache_numhosts:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0)
@@ -4881,22 +4898,22 @@ yyreduce:
else cfg_parser->cfg->infra_cache_numhosts = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 4885 "util/configparser.c"
+#line 4902 "util/configparser.c"
break;
- case 476: /* server_infra_cache_lame_size: VAR_INFRA_CACHE_LAME_SIZE STRING_ARG */
-#line 1798 "util/configparser.y"
+ case 480: /* server_infra_cache_lame_size: VAR_INFRA_CACHE_LAME_SIZE STRING_ARG */
+#line 1805 "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 4896 "util/configparser.c"
+#line 4913 "util/configparser.c"
break;
- case 477: /* server_infra_cache_slabs: VAR_INFRA_CACHE_SLABS STRING_ARG */
-#line 1806 "util/configparser.y"
+ case 481: /* server_infra_cache_slabs: VAR_INFRA_CACHE_SLABS STRING_ARG */
+#line 1813 "util/configparser.y"
{
OUTYY(("P(server_infra_cache_slabs:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0) {
@@ -4908,11 +4925,11 @@ yyreduce:
}
free((yyvsp[0].str));
}
-#line 4912 "util/configparser.c"
+#line 4929 "util/configparser.c"
break;
- case 478: /* server_infra_cache_min_rtt: VAR_INFRA_CACHE_MIN_RTT STRING_ARG */
-#line 1819 "util/configparser.y"
+ case 482: /* server_infra_cache_min_rtt: VAR_INFRA_CACHE_MIN_RTT STRING_ARG */
+#line 1826 "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)
@@ -4920,11 +4937,11 @@ yyreduce:
else cfg_parser->cfg->infra_cache_min_rtt = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 4924 "util/configparser.c"
+#line 4941 "util/configparser.c"
break;
- case 479: /* server_infra_cache_max_rtt: VAR_INFRA_CACHE_MAX_RTT STRING_ARG */
-#line 1828 "util/configparser.y"
+ case 483: /* server_infra_cache_max_rtt: VAR_INFRA_CACHE_MAX_RTT STRING_ARG */
+#line 1835 "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)
@@ -4932,11 +4949,11 @@ yyreduce:
else cfg_parser->cfg->infra_cache_max_rtt = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 4936 "util/configparser.c"
+#line 4953 "util/configparser.c"
break;
- case 480: /* server_infra_keep_probing: VAR_INFRA_KEEP_PROBING STRING_ARG */
-#line 1837 "util/configparser.y"
+ case 484: /* server_infra_keep_probing: VAR_INFRA_KEEP_PROBING STRING_ARG */
+#line 1844 "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)
@@ -4945,21 +4962,21 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4949 "util/configparser.c"
+#line 4966 "util/configparser.c"
break;
- case 481: /* server_target_fetch_policy: VAR_TARGET_FETCH_POLICY STRING_ARG */
-#line 1847 "util/configparser.y"
+ case 485: /* server_target_fetch_policy: VAR_TARGET_FETCH_POLICY STRING_ARG */
+#line 1854 "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 4959 "util/configparser.c"
+#line 4976 "util/configparser.c"
break;
- case 482: /* server_harden_short_bufsize: VAR_HARDEN_SHORT_BUFSIZE STRING_ARG */
-#line 1854 "util/configparser.y"
+ case 486: /* server_harden_short_bufsize: VAR_HARDEN_SHORT_BUFSIZE STRING_ARG */
+#line 1861 "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)
@@ -4968,11 +4985,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4972 "util/configparser.c"
+#line 4989 "util/configparser.c"
break;
- case 483: /* server_harden_large_queries: VAR_HARDEN_LARGE_QUERIES STRING_ARG */
-#line 1864 "util/configparser.y"
+ case 487: /* server_harden_large_queries: VAR_HARDEN_LARGE_QUERIES STRING_ARG */
+#line 1871 "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)
@@ -4981,11 +4998,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4985 "util/configparser.c"
+#line 5002 "util/configparser.c"
break;
- case 484: /* server_harden_glue: VAR_HARDEN_GLUE STRING_ARG */
-#line 1874 "util/configparser.y"
+ case 488: /* server_harden_glue: VAR_HARDEN_GLUE STRING_ARG */
+#line 1881 "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)
@@ -4994,11 +5011,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4998 "util/configparser.c"
+#line 5015 "util/configparser.c"
break;
- case 485: /* server_harden_unverified_glue: VAR_HARDEN_UNVERIFIED_GLUE STRING_ARG */
-#line 1884 "util/configparser.y"
+ case 489: /* server_harden_unverified_glue: VAR_HARDEN_UNVERIFIED_GLUE STRING_ARG */
+#line 1891 "util/configparser.y"
{
OUTYY(("P(server_harden_unverified_glue:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -5007,11 +5024,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5011 "util/configparser.c"
+#line 5028 "util/configparser.c"
break;
- case 486: /* server_harden_dnssec_stripped: VAR_HARDEN_DNSSEC_STRIPPED STRING_ARG */
-#line 1894 "util/configparser.y"
+ case 490: /* server_harden_dnssec_stripped: VAR_HARDEN_DNSSEC_STRIPPED STRING_ARG */
+#line 1901 "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)
@@ -5020,11 +5037,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5024 "util/configparser.c"
+#line 5041 "util/configparser.c"
break;
- case 487: /* server_harden_below_nxdomain: VAR_HARDEN_BELOW_NXDOMAIN STRING_ARG */
-#line 1904 "util/configparser.y"
+ case 491: /* server_harden_below_nxdomain: VAR_HARDEN_BELOW_NXDOMAIN STRING_ARG */
+#line 1911 "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)
@@ -5033,11 +5050,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5037 "util/configparser.c"
+#line 5054 "util/configparser.c"
break;
- case 488: /* server_harden_referral_path: VAR_HARDEN_REFERRAL_PATH STRING_ARG */
-#line 1914 "util/configparser.y"
+ case 492: /* server_harden_referral_path: VAR_HARDEN_REFERRAL_PATH STRING_ARG */
+#line 1921 "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)
@@ -5046,11 +5063,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5050 "util/configparser.c"
+#line 5067 "util/configparser.c"
break;
- case 489: /* server_harden_algo_downgrade: VAR_HARDEN_ALGO_DOWNGRADE STRING_ARG */
-#line 1924 "util/configparser.y"
+ case 493: /* server_harden_algo_downgrade: VAR_HARDEN_ALGO_DOWNGRADE STRING_ARG */
+#line 1931 "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)
@@ -5059,11 +5076,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5063 "util/configparser.c"
+#line 5080 "util/configparser.c"
break;
- case 490: /* server_harden_unknown_additional: VAR_HARDEN_UNKNOWN_ADDITIONAL STRING_ARG */
-#line 1934 "util/configparser.y"
+ case 494: /* server_harden_unknown_additional: VAR_HARDEN_UNKNOWN_ADDITIONAL STRING_ARG */
+#line 1941 "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)
@@ -5072,11 +5089,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5076 "util/configparser.c"
+#line 5093 "util/configparser.c"
break;
- case 491: /* server_use_caps_for_id: VAR_USE_CAPS_FOR_ID STRING_ARG */
-#line 1944 "util/configparser.y"
+ case 495: /* server_use_caps_for_id: VAR_USE_CAPS_FOR_ID STRING_ARG */
+#line 1951 "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)
@@ -5085,41 +5102,41 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5089 "util/configparser.c"
+#line 5106 "util/configparser.c"
break;
- case 492: /* server_caps_whitelist: VAR_CAPS_WHITELIST STRING_ARG */
-#line 1954 "util/configparser.y"
+ case 496: /* server_caps_whitelist: VAR_CAPS_WHITELIST STRING_ARG */
+#line 1961 "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 5099 "util/configparser.c"
+#line 5116 "util/configparser.c"
break;
- case 493: /* server_private_address: VAR_PRIVATE_ADDRESS STRING_ARG */
-#line 1961 "util/configparser.y"
+ case 497: /* server_private_address: VAR_PRIVATE_ADDRESS STRING_ARG */
+#line 1968 "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 5109 "util/configparser.c"
+#line 5126 "util/configparser.c"
break;
- case 494: /* server_private_domain: VAR_PRIVATE_DOMAIN STRING_ARG */
-#line 1968 "util/configparser.y"
+ case 498: /* server_private_domain: VAR_PRIVATE_DOMAIN STRING_ARG */
+#line 1975 "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 5119 "util/configparser.c"
+#line 5136 "util/configparser.c"
break;
- case 495: /* server_prefetch: VAR_PREFETCH STRING_ARG */
-#line 1975 "util/configparser.y"
+ case 499: /* server_prefetch: VAR_PREFETCH STRING_ARG */
+#line 1982 "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)
@@ -5127,11 +5144,11 @@ yyreduce:
else cfg_parser->cfg->prefetch = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5131 "util/configparser.c"
+#line 5148 "util/configparser.c"
break;
- case 496: /* server_prefetch_key: VAR_PREFETCH_KEY STRING_ARG */
-#line 1984 "util/configparser.y"
+ case 500: /* server_prefetch_key: VAR_PREFETCH_KEY STRING_ARG */
+#line 1991 "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)
@@ -5139,11 +5156,11 @@ yyreduce:
else cfg_parser->cfg->prefetch_key = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5143 "util/configparser.c"
+#line 5160 "util/configparser.c"
break;
- case 497: /* server_deny_any: VAR_DENY_ANY STRING_ARG */
-#line 1993 "util/configparser.y"
+ case 501: /* server_deny_any: VAR_DENY_ANY STRING_ARG */
+#line 2000 "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)
@@ -5151,11 +5168,11 @@ yyreduce:
else cfg_parser->cfg->deny_any = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5155 "util/configparser.c"
+#line 5172 "util/configparser.c"
break;
- case 498: /* server_unwanted_reply_threshold: VAR_UNWANTED_REPLY_THRESHOLD STRING_ARG */
-#line 2002 "util/configparser.y"
+ case 502: /* server_unwanted_reply_threshold: VAR_UNWANTED_REPLY_THRESHOLD STRING_ARG */
+#line 2009 "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)
@@ -5163,21 +5180,21 @@ yyreduce:
else cfg_parser->cfg->unwanted_threshold = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 5167 "util/configparser.c"
+#line 5184 "util/configparser.c"
break;
- case 499: /* server_do_not_query_address: VAR_DO_NOT_QUERY_ADDRESS STRING_ARG */
-#line 2011 "util/configparser.y"
+ case 503: /* server_do_not_query_address: VAR_DO_NOT_QUERY_ADDRESS STRING_ARG */
+#line 2018 "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 5177 "util/configparser.c"
+#line 5194 "util/configparser.c"
break;
- case 500: /* server_do_not_query_localhost: VAR_DO_NOT_QUERY_LOCALHOST STRING_ARG */
-#line 2018 "util/configparser.y"
+ case 504: /* server_do_not_query_localhost: VAR_DO_NOT_QUERY_LOCALHOST STRING_ARG */
+#line 2025 "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)
@@ -5186,44 +5203,44 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5190 "util/configparser.c"
+#line 5207 "util/configparser.c"
break;
- case 501: /* server_access_control: VAR_ACCESS_CONTROL STRING_ARG STRING_ARG */
-#line 2028 "util/configparser.y"
+ case 505: /* server_access_control: VAR_ACCESS_CONTROL STRING_ARG STRING_ARG */
+#line 2035 "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");
+ yyerror("out of memory");
}
-#line 5201 "util/configparser.c"
+#line 5218 "util/configparser.c"
break;
- case 502: /* server_interface_action: VAR_INTERFACE_ACTION STRING_ARG STRING_ARG */
-#line 2036 "util/configparser.y"
+ case 506: /* server_interface_action: VAR_INTERFACE_ACTION STRING_ARG STRING_ARG */
+#line 2043 "util/configparser.y"
{
OUTYY(("P(server_interface_action:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
validate_acl_action((yyvsp[0].str));
if(!cfg_str2list_insert(
&cfg_parser->cfg->interface_actions, (yyvsp[-1].str), (yyvsp[0].str)))
- fatal_exit("out of memory adding acl");
+ yyerror("out of memory");
}
-#line 5213 "util/configparser.c"
+#line 5230 "util/configparser.c"
break;
- case 503: /* server_module_conf: VAR_MODULE_CONF STRING_ARG */
-#line 2045 "util/configparser.y"
+ case 507: /* server_module_conf: VAR_MODULE_CONF STRING_ARG */
+#line 2052 "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 5223 "util/configparser.c"
+#line 5240 "util/configparser.c"
break;
- case 504: /* server_val_override_date: VAR_VAL_OVERRIDE_DATE STRING_ARG */
-#line 2052 "util/configparser.y"
+ case 508: /* server_val_override_date: VAR_VAL_OVERRIDE_DATE STRING_ARG */
+#line 2059 "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) {
@@ -5240,11 +5257,11 @@ yyreduce:
}
free((yyvsp[0].str));
}
-#line 5244 "util/configparser.c"
+#line 5261 "util/configparser.c"
break;
- case 505: /* server_val_sig_skew_min: VAR_VAL_SIG_SKEW_MIN STRING_ARG */
-#line 2070 "util/configparser.y"
+ case 509: /* server_val_sig_skew_min: VAR_VAL_SIG_SKEW_MIN STRING_ARG */
+#line 2077 "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) {
@@ -5256,11 +5273,11 @@ yyreduce:
}
free((yyvsp[0].str));
}
-#line 5260 "util/configparser.c"
+#line 5277 "util/configparser.c"
break;
- case 506: /* server_val_sig_skew_max: VAR_VAL_SIG_SKEW_MAX STRING_ARG */
-#line 2083 "util/configparser.y"
+ case 510: /* server_val_sig_skew_max: VAR_VAL_SIG_SKEW_MAX STRING_ARG */
+#line 2090 "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) {
@@ -5272,11 +5289,11 @@ yyreduce:
}
free((yyvsp[0].str));
}
-#line 5276 "util/configparser.c"
+#line 5293 "util/configparser.c"
break;
- case 507: /* server_val_max_restart: VAR_VAL_MAX_RESTART STRING_ARG */
-#line 2096 "util/configparser.y"
+ case 511: /* server_val_max_restart: VAR_VAL_MAX_RESTART STRING_ARG */
+#line 2103 "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) {
@@ -5288,11 +5305,11 @@ yyreduce:
}
free((yyvsp[0].str));
}
-#line 5292 "util/configparser.c"
+#line 5309 "util/configparser.c"
break;
- case 508: /* server_cache_max_ttl: VAR_CACHE_MAX_TTL STRING_ARG */
-#line 2109 "util/configparser.y"
+ case 512: /* server_cache_max_ttl: VAR_CACHE_MAX_TTL STRING_ARG */
+#line 2116 "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)
@@ -5300,11 +5317,11 @@ yyreduce:
else cfg_parser->cfg->max_ttl = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 5304 "util/configparser.c"
+#line 5321 "util/configparser.c"
break;
- case 509: /* server_cache_max_negative_ttl: VAR_CACHE_MAX_NEGATIVE_TTL STRING_ARG */
-#line 2118 "util/configparser.y"
+ case 513: /* server_cache_max_negative_ttl: VAR_CACHE_MAX_NEGATIVE_TTL STRING_ARG */
+#line 2125 "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)
@@ -5312,11 +5329,11 @@ yyreduce:
else cfg_parser->cfg->max_negative_ttl = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 5316 "util/configparser.c"
+#line 5333 "util/configparser.c"
break;
- case 510: /* server_cache_min_negative_ttl: VAR_CACHE_MIN_NEGATIVE_TTL STRING_ARG */
-#line 2127 "util/configparser.y"
+ case 514: /* server_cache_min_negative_ttl: VAR_CACHE_MIN_NEGATIVE_TTL STRING_ARG */
+#line 2134 "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)
@@ -5324,11 +5341,11 @@ yyreduce:
else cfg_parser->cfg->min_negative_ttl = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 5328 "util/configparser.c"
+#line 5345 "util/configparser.c"
break;
- case 511: /* server_cache_min_ttl: VAR_CACHE_MIN_TTL STRING_ARG */
-#line 2136 "util/configparser.y"
+ case 515: /* server_cache_min_ttl: VAR_CACHE_MIN_TTL STRING_ARG */
+#line 2143 "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)
@@ -5336,11 +5353,11 @@ yyreduce:
else cfg_parser->cfg->min_ttl = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 5340 "util/configparser.c"
+#line 5357 "util/configparser.c"
break;
- case 512: /* server_bogus_ttl: VAR_BOGUS_TTL STRING_ARG */
-#line 2145 "util/configparser.y"
+ case 516: /* server_bogus_ttl: VAR_BOGUS_TTL STRING_ARG */
+#line 2152 "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)
@@ -5348,11 +5365,11 @@ yyreduce:
else cfg_parser->cfg->bogus_ttl = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 5352 "util/configparser.c"
+#line 5369 "util/configparser.c"
break;
- case 513: /* server_val_clean_additional: VAR_VAL_CLEAN_ADDITIONAL STRING_ARG */
-#line 2154 "util/configparser.y"
+ case 517: /* server_val_clean_additional: VAR_VAL_CLEAN_ADDITIONAL STRING_ARG */
+#line 2161 "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)
@@ -5361,11 +5378,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5365 "util/configparser.c"
+#line 5382 "util/configparser.c"
break;
- case 514: /* server_val_permissive_mode: VAR_VAL_PERMISSIVE_MODE STRING_ARG */
-#line 2164 "util/configparser.y"
+ case 518: /* server_val_permissive_mode: VAR_VAL_PERMISSIVE_MODE STRING_ARG */
+#line 2171 "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)
@@ -5374,11 +5391,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5378 "util/configparser.c"
+#line 5395 "util/configparser.c"
break;
- case 515: /* server_aggressive_nsec: VAR_AGGRESSIVE_NSEC STRING_ARG */
-#line 2174 "util/configparser.y"
+ case 519: /* server_aggressive_nsec: VAR_AGGRESSIVE_NSEC STRING_ARG */
+#line 2181 "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)
@@ -5388,11 +5405,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5392 "util/configparser.c"
+#line 5409 "util/configparser.c"
break;
- case 516: /* server_ignore_cd_flag: VAR_IGNORE_CD_FLAG STRING_ARG */
-#line 2185 "util/configparser.y"
+ case 520: /* server_ignore_cd_flag: VAR_IGNORE_CD_FLAG STRING_ARG */
+#line 2192 "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)
@@ -5400,11 +5417,11 @@ yyreduce:
else cfg_parser->cfg->ignore_cd = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5404 "util/configparser.c"
+#line 5421 "util/configparser.c"
break;
- case 517: /* server_disable_edns_do: VAR_DISABLE_EDNS_DO STRING_ARG */
-#line 2194 "util/configparser.y"
+ case 521: /* server_disable_edns_do: VAR_DISABLE_EDNS_DO STRING_ARG */
+#line 2201 "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)
@@ -5412,11 +5429,11 @@ yyreduce:
else cfg_parser->cfg->disable_edns_do = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5416 "util/configparser.c"
+#line 5433 "util/configparser.c"
break;
- case 518: /* server_serve_expired: VAR_SERVE_EXPIRED STRING_ARG */
-#line 2203 "util/configparser.y"
+ case 522: /* server_serve_expired: VAR_SERVE_EXPIRED STRING_ARG */
+#line 2210 "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)
@@ -5424,11 +5441,11 @@ yyreduce:
else cfg_parser->cfg->serve_expired = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5428 "util/configparser.c"
+#line 5445 "util/configparser.c"
break;
- case 519: /* server_serve_expired_ttl: VAR_SERVE_EXPIRED_TTL STRING_ARG */
-#line 2212 "util/configparser.y"
+ case 523: /* server_serve_expired_ttl: VAR_SERVE_EXPIRED_TTL STRING_ARG */
+#line 2219 "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)
@@ -5436,11 +5453,11 @@ yyreduce:
else cfg_parser->cfg->serve_expired_ttl = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 5440 "util/configparser.c"
+#line 5457 "util/configparser.c"
break;
- case 520: /* server_serve_expired_ttl_reset: VAR_SERVE_EXPIRED_TTL_RESET STRING_ARG */
-#line 2221 "util/configparser.y"
+ case 524: /* server_serve_expired_ttl_reset: VAR_SERVE_EXPIRED_TTL_RESET STRING_ARG */
+#line 2228 "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)
@@ -5448,11 +5465,11 @@ yyreduce:
else cfg_parser->cfg->serve_expired_ttl_reset = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5452 "util/configparser.c"
+#line 5469 "util/configparser.c"
break;
- case 521: /* server_serve_expired_reply_ttl: VAR_SERVE_EXPIRED_REPLY_TTL STRING_ARG */
-#line 2230 "util/configparser.y"
+ case 525: /* server_serve_expired_reply_ttl: VAR_SERVE_EXPIRED_REPLY_TTL STRING_ARG */
+#line 2237 "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)
@@ -5460,11 +5477,11 @@ yyreduce:
else cfg_parser->cfg->serve_expired_reply_ttl = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 5464 "util/configparser.c"
+#line 5481 "util/configparser.c"
break;
- case 522: /* server_serve_expired_client_timeout: VAR_SERVE_EXPIRED_CLIENT_TIMEOUT STRING_ARG */
-#line 2239 "util/configparser.y"
+ case 526: /* server_serve_expired_client_timeout: VAR_SERVE_EXPIRED_CLIENT_TIMEOUT STRING_ARG */
+#line 2246 "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)
@@ -5472,11 +5489,11 @@ yyreduce:
else cfg_parser->cfg->serve_expired_client_timeout = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 5476 "util/configparser.c"
+#line 5493 "util/configparser.c"
break;
- case 523: /* server_ede_serve_expired: VAR_EDE_SERVE_EXPIRED STRING_ARG */
-#line 2248 "util/configparser.y"
+ case 527: /* server_ede_serve_expired: VAR_EDE_SERVE_EXPIRED STRING_ARG */
+#line 2255 "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)
@@ -5484,11 +5501,11 @@ yyreduce:
else cfg_parser->cfg->ede_serve_expired = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5488 "util/configparser.c"
+#line 5505 "util/configparser.c"
break;
- case 524: /* server_serve_original_ttl: VAR_SERVE_ORIGINAL_TTL STRING_ARG */
-#line 2257 "util/configparser.y"
+ case 528: /* server_serve_original_ttl: VAR_SERVE_ORIGINAL_TTL STRING_ARG */
+#line 2264 "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)
@@ -5496,11 +5513,11 @@ yyreduce:
else cfg_parser->cfg->serve_original_ttl = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5500 "util/configparser.c"
+#line 5517 "util/configparser.c"
break;
- case 525: /* server_fake_dsa: VAR_FAKE_DSA STRING_ARG */
-#line 2266 "util/configparser.y"
+ case 529: /* server_fake_dsa: VAR_FAKE_DSA STRING_ARG */
+#line 2273 "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)
@@ -5512,11 +5529,11 @@ yyreduce:
#endif
free((yyvsp[0].str));
}
-#line 5516 "util/configparser.c"
+#line 5533 "util/configparser.c"
break;
- case 526: /* server_fake_sha1: VAR_FAKE_SHA1 STRING_ARG */
-#line 2279 "util/configparser.y"
+ case 530: /* server_fake_sha1: VAR_FAKE_SHA1 STRING_ARG */
+#line 2286 "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)
@@ -5528,11 +5545,11 @@ yyreduce:
#endif
free((yyvsp[0].str));
}
-#line 5532 "util/configparser.c"
+#line 5549 "util/configparser.c"
break;
- case 527: /* server_val_log_level: VAR_VAL_LOG_LEVEL STRING_ARG */
-#line 2292 "util/configparser.y"
+ case 531: /* server_val_log_level: VAR_VAL_LOG_LEVEL STRING_ARG */
+#line 2299 "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)
@@ -5540,21 +5557,21 @@ yyreduce:
else cfg_parser->cfg->val_log_level = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 5544 "util/configparser.c"
+#line 5561 "util/configparser.c"
break;
- case 528: /* server_val_nsec3_keysize_iterations: VAR_VAL_NSEC3_KEYSIZE_ITERATIONS STRING_ARG */
-#line 2301 "util/configparser.y"
+ case 532: /* server_val_nsec3_keysize_iterations: VAR_VAL_NSEC3_KEYSIZE_ITERATIONS STRING_ARG */
+#line 2308 "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 5554 "util/configparser.c"
+#line 5571 "util/configparser.c"
break;
- case 529: /* server_zonemd_permissive_mode: VAR_ZONEMD_PERMISSIVE_MODE STRING_ARG */
-#line 2308 "util/configparser.y"
+ case 533: /* server_zonemd_permissive_mode: VAR_ZONEMD_PERMISSIVE_MODE STRING_ARG */
+#line 2315 "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)
@@ -5562,11 +5579,11 @@ yyreduce:
else cfg_parser->cfg->zonemd_permissive_mode = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5566 "util/configparser.c"
+#line 5583 "util/configparser.c"
break;
- case 530: /* server_add_holddown: VAR_ADD_HOLDDOWN STRING_ARG */
-#line 2317 "util/configparser.y"
+ case 534: /* server_add_holddown: VAR_ADD_HOLDDOWN STRING_ARG */
+#line 2324 "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)
@@ -5574,11 +5591,11 @@ yyreduce:
else cfg_parser->cfg->add_holddown = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 5578 "util/configparser.c"
+#line 5595 "util/configparser.c"
break;
- case 531: /* server_del_holddown: VAR_DEL_HOLDDOWN STRING_ARG */
-#line 2326 "util/configparser.y"
+ case 535: /* server_del_holddown: VAR_DEL_HOLDDOWN STRING_ARG */
+#line 2333 "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)
@@ -5586,11 +5603,11 @@ yyreduce:
else cfg_parser->cfg->del_holddown = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 5590 "util/configparser.c"
+#line 5607 "util/configparser.c"
break;
- case 532: /* server_keep_missing: VAR_KEEP_MISSING STRING_ARG */
-#line 2335 "util/configparser.y"
+ case 536: /* server_keep_missing: VAR_KEEP_MISSING STRING_ARG */
+#line 2342 "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)
@@ -5598,11 +5615,11 @@ yyreduce:
else cfg_parser->cfg->keep_missing = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 5602 "util/configparser.c"
+#line 5619 "util/configparser.c"
break;
- case 533: /* server_permit_small_holddown: VAR_PERMIT_SMALL_HOLDDOWN STRING_ARG */
-#line 2344 "util/configparser.y"
+ case 537: /* server_permit_small_holddown: VAR_PERMIT_SMALL_HOLDDOWN STRING_ARG */
+#line 2351 "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)
@@ -5611,22 +5628,22 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5615 "util/configparser.c"
+#line 5632 "util/configparser.c"
break;
- case 534: /* server_key_cache_size: VAR_KEY_CACHE_SIZE STRING_ARG */
-#line 2354 "util/configparser.y"
+ case 538: /* server_key_cache_size: VAR_KEY_CACHE_SIZE STRING_ARG */
+#line 2361 "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 5626 "util/configparser.c"
+#line 5643 "util/configparser.c"
break;
- case 535: /* server_key_cache_slabs: VAR_KEY_CACHE_SLABS STRING_ARG */
-#line 2362 "util/configparser.y"
+ case 539: /* server_key_cache_slabs: VAR_KEY_CACHE_SLABS STRING_ARG */
+#line 2369 "util/configparser.y"
{
OUTYY(("P(server_key_cache_slabs:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0) {
@@ -5638,22 +5655,22 @@ yyreduce:
}
free((yyvsp[0].str));
}
-#line 5642 "util/configparser.c"
+#line 5659 "util/configparser.c"
break;
- case 536: /* server_neg_cache_size: VAR_NEG_CACHE_SIZE STRING_ARG */
-#line 2375 "util/configparser.y"
+ case 540: /* server_neg_cache_size: VAR_NEG_CACHE_SIZE STRING_ARG */
+#line 2382 "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 5653 "util/configparser.c"
+#line 5670 "util/configparser.c"
break;
- case 537: /* server_local_zone: VAR_LOCAL_ZONE STRING_ARG STRING_ARG */
-#line 2383 "util/configparser.y"
+ case 541: /* server_local_zone: VAR_LOCAL_ZONE STRING_ARG STRING_ARG */
+#line 2390 "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 &&
@@ -5662,6 +5679,9 @@ yyreduce:
&& strcmp((yyvsp[0].str), "typetransparent")!=0
&& strcmp((yyvsp[0].str), "always_transparent")!=0
&& strcmp((yyvsp[0].str), "block_a")!=0
+ && strcmp((yyvsp[0].str), "block_aaaa")!=0
+ && strcmp((yyvsp[0].str), "block_a_wdata")!=0
+ && strcmp((yyvsp[0].str), "block_aaaa_wdata")!=0
&& strcmp((yyvsp[0].str), "always_refuse")!=0
&& strcmp((yyvsp[0].str), "always_nxdomain")!=0
&& strcmp((yyvsp[0].str), "always_nodata")!=0
@@ -5674,7 +5694,9 @@ yyreduce:
yyerror("local-zone type: expected static, deny, "
"refuse, redirect, transparent, "
"typetransparent, inform, inform_deny, "
- "inform_redirect, always_transparent, block_a, "
+ "inform_redirect, always_transparent, "
+ "block_a, block_aaaa, "
+ "block_a_wdata, block_aaaa_wdata, "
"always_refuse, always_nxdomain, "
"always_nodata, always_deny, always_null, "
"noview, nodefault or ipset");
@@ -5683,7 +5705,7 @@ yyreduce:
} else if(strcmp((yyvsp[0].str), "nodefault")==0) {
if(!cfg_strlist_insert(&cfg_parser->cfg->
local_zones_nodefault, (yyvsp[-1].str)))
- fatal_exit("out of memory adding local-zone");
+ yyerror("out of memory");
free((yyvsp[0].str));
#ifdef USE_IPSET
} else if(strcmp((yyvsp[0].str), "ipset")==0) {
@@ -5691,38 +5713,41 @@ yyreduce:
/* Make sure to add the trailing dot.
* These are str compared to domain names. */
if((yyvsp[-1].str)[len-1] != '.') {
+ char* prev = (yyvsp[-1].str);
if(!((yyvsp[-1].str) = realloc((yyvsp[-1].str), len+2))) {
- fatal_exit("out of memory adding local-zone");
+ yyerror("out of memory");
+ free(prev);
+ } else {
+ (yyvsp[-1].str)[len] = '.';
+ (yyvsp[-1].str)[len+1] = 0;
}
- (yyvsp[-1].str)[len] = '.';
- (yyvsp[-1].str)[len+1] = 0;
}
if(!cfg_strlist_insert(&cfg_parser->cfg->
local_zones_ipset, (yyvsp[-1].str)))
- fatal_exit("out of memory adding local-zone");
+ yyerror("out of memory");
free((yyvsp[0].str));
#endif
} else {
if(!cfg_str2list_insert(&cfg_parser->cfg->local_zones,
(yyvsp[-1].str), (yyvsp[0].str)))
- fatal_exit("out of memory adding local-zone");
+ yyerror("out of memory");
}
}
-#line 5712 "util/configparser.c"
+#line 5737 "util/configparser.c"
break;
- case 538: /* server_local_data: VAR_LOCAL_DATA STRING_ARG */
-#line 2439 "util/configparser.y"
+ case 542: /* server_local_data: VAR_LOCAL_DATA STRING_ARG */
+#line 2454 "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");
+ yyerror("out of memory");
}
-#line 5722 "util/configparser.c"
+#line 5747 "util/configparser.c"
break;
- case 539: /* server_local_data_ptr: VAR_LOCAL_DATA_PTR STRING_ARG */
-#line 2446 "util/configparser.y"
+ case 543: /* server_local_data_ptr: VAR_LOCAL_DATA_PTR STRING_ARG */
+#line 2461 "util/configparser.y"
{
char* ptr;
OUTYY(("P(server_local_data_ptr:%s)\n", (yyvsp[0].str)));
@@ -5731,16 +5756,16 @@ yyreduce:
if(ptr) {
if(!cfg_strlist_insert(&cfg_parser->cfg->
local_data, ptr))
- fatal_exit("out of memory adding local-data");
+ yyerror("out of memory");
} else {
yyerror("local-data-ptr could not be reversed");
}
}
-#line 5740 "util/configparser.c"
+#line 5765 "util/configparser.c"
break;
- case 540: /* server_minimal_responses: VAR_MINIMAL_RESPONSES STRING_ARG */
-#line 2461 "util/configparser.y"
+ case 544: /* server_minimal_responses: VAR_MINIMAL_RESPONSES STRING_ARG */
+#line 2476 "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)
@@ -5749,11 +5774,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5753 "util/configparser.c"
+#line 5778 "util/configparser.c"
break;
- case 541: /* server_rrset_roundrobin: VAR_RRSET_ROUNDROBIN STRING_ARG */
-#line 2471 "util/configparser.y"
+ case 545: /* server_rrset_roundrobin: VAR_RRSET_ROUNDROBIN STRING_ARG */
+#line 2486 "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)
@@ -5762,51 +5787,51 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5766 "util/configparser.c"
+#line 5791 "util/configparser.c"
break;
- case 542: /* server_unknown_server_time_limit: VAR_UNKNOWN_SERVER_TIME_LIMIT STRING_ARG */
-#line 2481 "util/configparser.y"
+ case 546: /* server_unknown_server_time_limit: VAR_UNKNOWN_SERVER_TIME_LIMIT STRING_ARG */
+#line 2496 "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 5776 "util/configparser.c"
+#line 5801 "util/configparser.c"
break;
- case 543: /* server_discard_timeout: VAR_DISCARD_TIMEOUT STRING_ARG */
-#line 2488 "util/configparser.y"
+ case 547: /* server_discard_timeout: VAR_DISCARD_TIMEOUT STRING_ARG */
+#line 2503 "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 5786 "util/configparser.c"
+#line 5811 "util/configparser.c"
break;
- case 544: /* server_wait_limit: VAR_WAIT_LIMIT STRING_ARG */
-#line 2495 "util/configparser.y"
+ case 548: /* server_wait_limit: VAR_WAIT_LIMIT STRING_ARG */
+#line 2510 "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 5796 "util/configparser.c"
+#line 5821 "util/configparser.c"
break;
- case 545: /* server_wait_limit_cookie: VAR_WAIT_LIMIT_COOKIE STRING_ARG */
-#line 2502 "util/configparser.y"
+ case 549: /* server_wait_limit_cookie: VAR_WAIT_LIMIT_COOKIE STRING_ARG */
+#line 2517 "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 5806 "util/configparser.c"
+#line 5831 "util/configparser.c"
break;
- case 546: /* server_wait_limit_netblock: VAR_WAIT_LIMIT_NETBLOCK STRING_ARG STRING_ARG */
-#line 2509 "util/configparser.y"
+ case 550: /* server_wait_limit_netblock: VAR_WAIT_LIMIT_NETBLOCK STRING_ARG STRING_ARG */
+#line 2524 "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) {
@@ -5816,15 +5841,14 @@ yyreduce:
} else {
if(!cfg_str2list_insert(&cfg_parser->cfg->
wait_limit_netblock, (yyvsp[-1].str), (yyvsp[0].str)))
- fatal_exit("out of memory adding "
- "wait-limit-netblock");
+ yyerror("out of memory");
}
}
-#line 5824 "util/configparser.c"
+#line 5848 "util/configparser.c"
break;
- case 547: /* server_wait_limit_cookie_netblock: VAR_WAIT_LIMIT_COOKIE_NETBLOCK STRING_ARG STRING_ARG */
-#line 2524 "util/configparser.y"
+ case 551: /* server_wait_limit_cookie_netblock: VAR_WAIT_LIMIT_COOKIE_NETBLOCK STRING_ARG STRING_ARG */
+#line 2538 "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) {
@@ -5834,35 +5858,34 @@ yyreduce:
} else {
if(!cfg_str2list_insert(&cfg_parser->cfg->
wait_limit_cookie_netblock, (yyvsp[-1].str), (yyvsp[0].str)))
- fatal_exit("out of memory adding "
- "wait-limit-cookie-netblock");
+ yyerror("out of memory");
}
}
-#line 5842 "util/configparser.c"
+#line 5865 "util/configparser.c"
break;
- case 548: /* server_max_udp_size: VAR_MAX_UDP_SIZE STRING_ARG */
-#line 2539 "util/configparser.y"
+ case 552: /* server_max_udp_size: VAR_MAX_UDP_SIZE STRING_ARG */
+#line 2552 "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 5852 "util/configparser.c"
+#line 5875 "util/configparser.c"
break;
- case 549: /* server_dns64_prefix: VAR_DNS64_PREFIX STRING_ARG */
-#line 2546 "util/configparser.y"
+ case 553: /* server_dns64_prefix: VAR_DNS64_PREFIX STRING_ARG */
+#line 2559 "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 5862 "util/configparser.c"
+#line 5885 "util/configparser.c"
break;
- case 550: /* server_dns64_synthall: VAR_DNS64_SYNTHALL STRING_ARG */
-#line 2553 "util/configparser.y"
+ case 554: /* server_dns64_synthall: VAR_DNS64_SYNTHALL STRING_ARG */
+#line 2566 "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)
@@ -5870,32 +5893,32 @@ yyreduce:
else cfg_parser->cfg->dns64_synthall = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5874 "util/configparser.c"
+#line 5897 "util/configparser.c"
break;
- case 551: /* server_dns64_ignore_aaaa: VAR_DNS64_IGNORE_AAAA STRING_ARG */
-#line 2562 "util/configparser.y"
+ case 555: /* server_dns64_ignore_aaaa: VAR_DNS64_IGNORE_AAAA STRING_ARG */
+#line 2575 "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");
+ yyerror("out of memory");
}
-#line 5885 "util/configparser.c"
+#line 5908 "util/configparser.c"
break;
- case 552: /* server_nat64_prefix: VAR_NAT64_PREFIX STRING_ARG */
-#line 2570 "util/configparser.y"
+ case 556: /* server_nat64_prefix: VAR_NAT64_PREFIX STRING_ARG */
+#line 2583 "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 5895 "util/configparser.c"
+#line 5918 "util/configparser.c"
break;
- case 553: /* server_define_tag: VAR_DEFINE_TAG STRING_ARG */
-#line 2577 "util/configparser.y"
+ case 557: /* server_define_tag: VAR_DEFINE_TAG STRING_ARG */
+#line 2590 "util/configparser.y"
{
char* p, *s = (yyvsp[0].str);
OUTYY(("P(server_define_tag:%s)\n", (yyvsp[0].str)));
@@ -5908,11 +5931,11 @@ yyreduce:
}
free((yyvsp[0].str));
}
-#line 5912 "util/configparser.c"
+#line 5935 "util/configparser.c"
break;
- case 554: /* server_local_zone_tag: VAR_LOCAL_ZONE_TAG STRING_ARG STRING_ARG */
-#line 2591 "util/configparser.y"
+ case 558: /* server_local_zone_tag: VAR_LOCAL_ZONE_TAG STRING_ARG STRING_ARG */
+#line 2604 "util/configparser.y"
{
size_t len = 0;
uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str),
@@ -5932,11 +5955,11 @@ yyreduce:
}
}
}
-#line 5936 "util/configparser.c"
+#line 5959 "util/configparser.c"
break;
- case 555: /* server_access_control_tag: VAR_ACCESS_CONTROL_TAG STRING_ARG STRING_ARG */
-#line 2612 "util/configparser.y"
+ case 559: /* server_access_control_tag: VAR_ACCESS_CONTROL_TAG STRING_ARG STRING_ARG */
+#line 2625 "util/configparser.y"
{
size_t len = 0;
uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str),
@@ -5956,11 +5979,11 @@ yyreduce:
}
}
}
-#line 5960 "util/configparser.c"
+#line 5983 "util/configparser.c"
break;
- case 556: /* server_access_control_tag_action: VAR_ACCESS_CONTROL_TAG_ACTION STRING_ARG STRING_ARG STRING_ARG */
-#line 2633 "util/configparser.y"
+ case 560: /* server_access_control_tag_action: VAR_ACCESS_CONTROL_TAG_ACTION STRING_ARG STRING_ARG STRING_ARG */
+#line 2646 "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,
@@ -5971,11 +5994,11 @@ yyreduce:
free((yyvsp[0].str));
}
}
-#line 5975 "util/configparser.c"
+#line 5998 "util/configparser.c"
break;
- case 557: /* server_access_control_tag_data: VAR_ACCESS_CONTROL_TAG_DATA STRING_ARG STRING_ARG STRING_ARG */
-#line 2645 "util/configparser.y"
+ case 561: /* server_access_control_tag_data: VAR_ACCESS_CONTROL_TAG_DATA STRING_ARG STRING_ARG STRING_ARG */
+#line 2658 "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,
@@ -5986,11 +6009,11 @@ yyreduce:
free((yyvsp[0].str));
}
}
-#line 5990 "util/configparser.c"
+#line 6013 "util/configparser.c"
break;
- case 558: /* server_local_zone_override: VAR_LOCAL_ZONE_OVERRIDE STRING_ARG STRING_ARG STRING_ARG */
-#line 2657 "util/configparser.y"
+ case 562: /* server_local_zone_override: VAR_LOCAL_ZONE_OVERRIDE STRING_ARG STRING_ARG STRING_ARG */
+#line 2670 "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,
@@ -6001,11 +6024,11 @@ yyreduce:
free((yyvsp[0].str));
}
}
-#line 6005 "util/configparser.c"
+#line 6028 "util/configparser.c"
break;
- case 559: /* server_access_control_view: VAR_ACCESS_CONTROL_VIEW STRING_ARG STRING_ARG */
-#line 2669 "util/configparser.y"
+ case 563: /* server_access_control_view: VAR_ACCESS_CONTROL_VIEW STRING_ARG STRING_ARG */
+#line 2682 "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,
@@ -6013,11 +6036,11 @@ yyreduce:
yyerror("out of memory");
}
}
-#line 6017 "util/configparser.c"
+#line 6040 "util/configparser.c"
break;
- case 560: /* server_interface_tag: VAR_INTERFACE_TAG STRING_ARG STRING_ARG */
-#line 2678 "util/configparser.y"
+ case 564: /* server_interface_tag: VAR_INTERFACE_TAG STRING_ARG STRING_ARG */
+#line 2691 "util/configparser.y"
{
size_t len = 0;
uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str),
@@ -6037,11 +6060,11 @@ yyreduce:
}
}
}
-#line 6041 "util/configparser.c"
+#line 6064 "util/configparser.c"
break;
- case 561: /* server_interface_tag_action: VAR_INTERFACE_TAG_ACTION STRING_ARG STRING_ARG STRING_ARG */
-#line 2699 "util/configparser.y"
+ case 565: /* server_interface_tag_action: VAR_INTERFACE_TAG_ACTION STRING_ARG STRING_ARG STRING_ARG */
+#line 2712 "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,
@@ -6052,11 +6075,11 @@ yyreduce:
free((yyvsp[0].str));
}
}
-#line 6056 "util/configparser.c"
+#line 6079 "util/configparser.c"
break;
- case 562: /* server_interface_tag_data: VAR_INTERFACE_TAG_DATA STRING_ARG STRING_ARG STRING_ARG */
-#line 2711 "util/configparser.y"
+ case 566: /* server_interface_tag_data: VAR_INTERFACE_TAG_DATA STRING_ARG STRING_ARG STRING_ARG */
+#line 2724 "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,
@@ -6067,11 +6090,11 @@ yyreduce:
free((yyvsp[0].str));
}
}
-#line 6071 "util/configparser.c"
+#line 6094 "util/configparser.c"
break;
- case 563: /* server_interface_view: VAR_INTERFACE_VIEW STRING_ARG STRING_ARG */
-#line 2723 "util/configparser.y"
+ case 567: /* server_interface_view: VAR_INTERFACE_VIEW STRING_ARG STRING_ARG */
+#line 2736 "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,
@@ -6079,11 +6102,11 @@ yyreduce:
yyerror("out of memory");
}
}
-#line 6083 "util/configparser.c"
+#line 6106 "util/configparser.c"
break;
- case 564: /* server_response_ip_tag: VAR_RESPONSE_IP_TAG STRING_ARG STRING_ARG */
-#line 2732 "util/configparser.y"
+ case 568: /* server_response_ip_tag: VAR_RESPONSE_IP_TAG STRING_ARG STRING_ARG */
+#line 2745 "util/configparser.y"
{
size_t len = 0;
uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str),
@@ -6103,11 +6126,11 @@ yyreduce:
}
}
}
-#line 6107 "util/configparser.c"
+#line 6130 "util/configparser.c"
break;
- case 565: /* server_ip_ratelimit: VAR_IP_RATELIMIT STRING_ARG */
-#line 2753 "util/configparser.y"
+ case 569: /* server_ip_ratelimit: VAR_IP_RATELIMIT STRING_ARG */
+#line 2766 "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)
@@ -6115,11 +6138,11 @@ yyreduce:
else cfg_parser->cfg->ip_ratelimit = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 6119 "util/configparser.c"
+#line 6142 "util/configparser.c"
break;
- case 566: /* server_ip_ratelimit_cookie: VAR_IP_RATELIMIT_COOKIE STRING_ARG */
-#line 2762 "util/configparser.y"
+ case 570: /* server_ip_ratelimit_cookie: VAR_IP_RATELIMIT_COOKIE STRING_ARG */
+#line 2775 "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)
@@ -6127,11 +6150,11 @@ yyreduce:
else cfg_parser->cfg->ip_ratelimit_cookie = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 6131 "util/configparser.c"
+#line 6154 "util/configparser.c"
break;
- case 567: /* server_ratelimit: VAR_RATELIMIT STRING_ARG */
-#line 2771 "util/configparser.y"
+ case 571: /* server_ratelimit: VAR_RATELIMIT STRING_ARG */
+#line 2784 "util/configparser.y"
{
OUTYY(("P(server_ratelimit:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -6139,33 +6162,33 @@ yyreduce:
else cfg_parser->cfg->ratelimit = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 6143 "util/configparser.c"
+#line 6166 "util/configparser.c"
break;
- case 568: /* server_ip_ratelimit_size: VAR_IP_RATELIMIT_SIZE STRING_ARG */
-#line 2780 "util/configparser.y"
+ case 572: /* server_ip_ratelimit_size: VAR_IP_RATELIMIT_SIZE STRING_ARG */
+#line 2793 "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 6154 "util/configparser.c"
+#line 6177 "util/configparser.c"
break;
- case 569: /* server_ratelimit_size: VAR_RATELIMIT_SIZE STRING_ARG */
-#line 2788 "util/configparser.y"
+ case 573: /* server_ratelimit_size: VAR_RATELIMIT_SIZE STRING_ARG */
+#line 2801 "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 6165 "util/configparser.c"
+#line 6188 "util/configparser.c"
break;
- case 570: /* server_ip_ratelimit_slabs: VAR_IP_RATELIMIT_SLABS STRING_ARG */
-#line 2796 "util/configparser.y"
+ case 574: /* server_ip_ratelimit_slabs: VAR_IP_RATELIMIT_SLABS STRING_ARG */
+#line 2809 "util/configparser.y"
{
OUTYY(("P(server_ip_ratelimit_slabs:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0) {
@@ -6177,11 +6200,11 @@ yyreduce:
}
free((yyvsp[0].str));
}
-#line 6181 "util/configparser.c"
+#line 6204 "util/configparser.c"
break;
- case 571: /* server_ratelimit_slabs: VAR_RATELIMIT_SLABS STRING_ARG */
-#line 2809 "util/configparser.y"
+ case 575: /* server_ratelimit_slabs: VAR_RATELIMIT_SLABS STRING_ARG */
+#line 2822 "util/configparser.y"
{
OUTYY(("P(server_ratelimit_slabs:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0) {
@@ -6193,11 +6216,11 @@ yyreduce:
}
free((yyvsp[0].str));
}
-#line 6197 "util/configparser.c"
+#line 6220 "util/configparser.c"
break;
- case 572: /* server_ratelimit_for_domain: VAR_RATELIMIT_FOR_DOMAIN STRING_ARG STRING_ARG */
-#line 2822 "util/configparser.y"
+ case 576: /* server_ratelimit_for_domain: VAR_RATELIMIT_FOR_DOMAIN STRING_ARG STRING_ARG */
+#line 2835 "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) {
@@ -6207,15 +6230,14 @@ yyreduce:
} else {
if(!cfg_str2list_insert(&cfg_parser->cfg->
ratelimit_for_domain, (yyvsp[-1].str), (yyvsp[0].str)))
- fatal_exit("out of memory adding "
- "ratelimit-for-domain");
+ yyerror("out of memory");
}
}
-#line 6215 "util/configparser.c"
+#line 6237 "util/configparser.c"
break;
- case 573: /* server_ratelimit_below_domain: VAR_RATELIMIT_BELOW_DOMAIN STRING_ARG STRING_ARG */
-#line 2837 "util/configparser.y"
+ case 577: /* server_ratelimit_below_domain: VAR_RATELIMIT_BELOW_DOMAIN STRING_ARG STRING_ARG */
+#line 2849 "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) {
@@ -6225,15 +6247,14 @@ yyreduce:
} else {
if(!cfg_str2list_insert(&cfg_parser->cfg->
ratelimit_below_domain, (yyvsp[-1].str), (yyvsp[0].str)))
- fatal_exit("out of memory adding "
- "ratelimit-below-domain");
+ yyerror("out of memory");
}
}
-#line 6233 "util/configparser.c"
+#line 6254 "util/configparser.c"
break;
- case 574: /* server_ip_ratelimit_factor: VAR_IP_RATELIMIT_FACTOR STRING_ARG */
-#line 2852 "util/configparser.y"
+ case 578: /* server_ip_ratelimit_factor: VAR_IP_RATELIMIT_FACTOR STRING_ARG */
+#line 2863 "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)
@@ -6241,11 +6262,11 @@ yyreduce:
else cfg_parser->cfg->ip_ratelimit_factor = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 6245 "util/configparser.c"
+#line 6266 "util/configparser.c"
break;
- case 575: /* server_ratelimit_factor: VAR_RATELIMIT_FACTOR STRING_ARG */
-#line 2861 "util/configparser.y"
+ case 579: /* server_ratelimit_factor: VAR_RATELIMIT_FACTOR STRING_ARG */
+#line 2872 "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)
@@ -6253,11 +6274,11 @@ yyreduce:
else cfg_parser->cfg->ratelimit_factor = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 6257 "util/configparser.c"
+#line 6278 "util/configparser.c"
break;
- case 576: /* server_ip_ratelimit_backoff: VAR_IP_RATELIMIT_BACKOFF STRING_ARG */
-#line 2870 "util/configparser.y"
+ case 580: /* server_ip_ratelimit_backoff: VAR_IP_RATELIMIT_BACKOFF STRING_ARG */
+#line 2881 "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)
@@ -6266,11 +6287,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 6270 "util/configparser.c"
+#line 6291 "util/configparser.c"
break;
- case 577: /* server_ratelimit_backoff: VAR_RATELIMIT_BACKOFF STRING_ARG */
-#line 2880 "util/configparser.y"
+ case 581: /* server_ratelimit_backoff: VAR_RATELIMIT_BACKOFF STRING_ARG */
+#line 2891 "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)
@@ -6279,11 +6300,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 6283 "util/configparser.c"
+#line 6304 "util/configparser.c"
break;
- case 578: /* server_outbound_msg_retry: VAR_OUTBOUND_MSG_RETRY STRING_ARG */
-#line 2890 "util/configparser.y"
+ case 582: /* server_outbound_msg_retry: VAR_OUTBOUND_MSG_RETRY STRING_ARG */
+#line 2901 "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)
@@ -6291,11 +6312,11 @@ yyreduce:
else cfg_parser->cfg->outbound_msg_retry = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 6295 "util/configparser.c"
+#line 6316 "util/configparser.c"
break;
- case 579: /* server_max_sent_count: VAR_MAX_SENT_COUNT STRING_ARG */
-#line 2899 "util/configparser.y"
+ case 583: /* server_max_sent_count: VAR_MAX_SENT_COUNT STRING_ARG */
+#line 2910 "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)
@@ -6303,11 +6324,11 @@ yyreduce:
else cfg_parser->cfg->max_sent_count = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 6307 "util/configparser.c"
+#line 6328 "util/configparser.c"
break;
- case 580: /* server_max_query_restarts: VAR_MAX_QUERY_RESTARTS STRING_ARG */
-#line 2908 "util/configparser.y"
+ case 584: /* server_max_query_restarts: VAR_MAX_QUERY_RESTARTS STRING_ARG */
+#line 2919 "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)
@@ -6315,20 +6336,20 @@ yyreduce:
else cfg_parser->cfg->max_query_restarts = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 6319 "util/configparser.c"
+#line 6340 "util/configparser.c"
break;
- case 581: /* server_low_rtt: VAR_LOW_RTT STRING_ARG */
-#line 2917 "util/configparser.y"
+ case 585: /* server_low_rtt: VAR_LOW_RTT STRING_ARG */
+#line 2928 "util/configparser.y"
{
OUTYY(("P(low-rtt option is deprecated, use fast-server-num instead)\n"));
free((yyvsp[0].str));
}
-#line 6328 "util/configparser.c"
+#line 6349 "util/configparser.c"
break;
- case 582: /* server_fast_server_num: VAR_FAST_SERVER_NUM STRING_ARG */
-#line 2923 "util/configparser.y"
+ case 586: /* server_fast_server_num: VAR_FAST_SERVER_NUM STRING_ARG */
+#line 2934 "util/configparser.y"
{
OUTYY(("P(server_fast_server_num:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) <= 0)
@@ -6336,11 +6357,11 @@ yyreduce:
else cfg_parser->cfg->fast_server_num = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 6340 "util/configparser.c"
+#line 6361 "util/configparser.c"
break;
- case 583: /* server_fast_server_permil: VAR_FAST_SERVER_PERMIL STRING_ARG */
-#line 2932 "util/configparser.y"
+ case 587: /* server_fast_server_permil: VAR_FAST_SERVER_PERMIL STRING_ARG */
+#line 2943 "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)
@@ -6348,11 +6369,11 @@ yyreduce:
else cfg_parser->cfg->fast_server_permil = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 6352 "util/configparser.c"
+#line 6373 "util/configparser.c"
break;
- case 584: /* server_qname_minimisation: VAR_QNAME_MINIMISATION STRING_ARG */
-#line 2941 "util/configparser.y"
+ case 588: /* server_qname_minimisation: VAR_QNAME_MINIMISATION STRING_ARG */
+#line 2952 "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)
@@ -6361,11 +6382,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 6365 "util/configparser.c"
+#line 6386 "util/configparser.c"
break;
- case 585: /* server_qname_minimisation_strict: VAR_QNAME_MINIMISATION_STRICT STRING_ARG */
-#line 2951 "util/configparser.y"
+ case 589: /* server_qname_minimisation_strict: VAR_QNAME_MINIMISATION_STRICT STRING_ARG */
+#line 2962 "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)
@@ -6374,11 +6395,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 6378 "util/configparser.c"
+#line 6399 "util/configparser.c"
break;
- case 586: /* server_pad_responses: VAR_PAD_RESPONSES STRING_ARG */
-#line 2961 "util/configparser.y"
+ case 590: /* server_pad_responses: VAR_PAD_RESPONSES STRING_ARG */
+#line 2972 "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)
@@ -6387,11 +6408,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 6391 "util/configparser.c"
+#line 6412 "util/configparser.c"
break;
- case 587: /* server_pad_responses_block_size: VAR_PAD_RESPONSES_BLOCK_SIZE STRING_ARG */
-#line 2971 "util/configparser.y"
+ case 591: /* server_pad_responses_block_size: VAR_PAD_RESPONSES_BLOCK_SIZE STRING_ARG */
+#line 2982 "util/configparser.y"
{
OUTYY(("P(server_pad_responses_block_size:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0)
@@ -6399,11 +6420,11 @@ yyreduce:
else cfg_parser->cfg->pad_responses_block_size = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 6403 "util/configparser.c"
+#line 6424 "util/configparser.c"
break;
- case 588: /* server_pad_queries: VAR_PAD_QUERIES STRING_ARG */
-#line 2980 "util/configparser.y"
+ case 592: /* server_pad_queries: VAR_PAD_QUERIES STRING_ARG */
+#line 2991 "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)
@@ -6412,11 +6433,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 6416 "util/configparser.c"
+#line 6437 "util/configparser.c"
break;
- case 589: /* server_pad_queries_block_size: VAR_PAD_QUERIES_BLOCK_SIZE STRING_ARG */
-#line 2990 "util/configparser.y"
+ case 593: /* server_pad_queries_block_size: VAR_PAD_QUERIES_BLOCK_SIZE STRING_ARG */
+#line 3001 "util/configparser.y"
{
OUTYY(("P(server_pad_queries_block_size:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0)
@@ -6424,11 +6445,11 @@ yyreduce:
else cfg_parser->cfg->pad_queries_block_size = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 6428 "util/configparser.c"
+#line 6449 "util/configparser.c"
break;
- case 590: /* server_ipsecmod_enabled: VAR_IPSECMOD_ENABLED STRING_ARG */
-#line 2999 "util/configparser.y"
+ case 594: /* server_ipsecmod_enabled: VAR_IPSECMOD_ENABLED STRING_ARG */
+#line 3010 "util/configparser.y"
{
#ifdef USE_IPSECMOD
OUTYY(("P(server_ipsecmod_enabled:%s)\n", (yyvsp[0].str)));
@@ -6440,11 +6461,11 @@ yyreduce:
#endif
free((yyvsp[0].str));
}
-#line 6444 "util/configparser.c"
+#line 6465 "util/configparser.c"
break;
- case 591: /* server_ipsecmod_ignore_bogus: VAR_IPSECMOD_IGNORE_BOGUS STRING_ARG */
-#line 3012 "util/configparser.y"
+ case 595: /* server_ipsecmod_ignore_bogus: VAR_IPSECMOD_IGNORE_BOGUS STRING_ARG */
+#line 3023 "util/configparser.y"
{
#ifdef USE_IPSECMOD
OUTYY(("P(server_ipsecmod_ignore_bogus:%s)\n", (yyvsp[0].str)));
@@ -6456,11 +6477,11 @@ yyreduce:
#endif
free((yyvsp[0].str));
}
-#line 6460 "util/configparser.c"
+#line 6481 "util/configparser.c"
break;
- case 592: /* server_ipsecmod_hook: VAR_IPSECMOD_HOOK STRING_ARG */
-#line 3025 "util/configparser.y"
+ case 596: /* server_ipsecmod_hook: VAR_IPSECMOD_HOOK STRING_ARG */
+#line 3036 "util/configparser.y"
{
#ifdef USE_IPSECMOD
OUTYY(("P(server_ipsecmod_hook:%s)\n", (yyvsp[0].str)));
@@ -6471,11 +6492,11 @@ yyreduce:
free((yyvsp[0].str));
#endif
}
-#line 6475 "util/configparser.c"
+#line 6496 "util/configparser.c"
break;
- case 593: /* server_ipsecmod_max_ttl: VAR_IPSECMOD_MAX_TTL STRING_ARG */
-#line 3037 "util/configparser.y"
+ case 597: /* server_ipsecmod_max_ttl: VAR_IPSECMOD_MAX_TTL STRING_ARG */
+#line 3048 "util/configparser.y"
{
#ifdef USE_IPSECMOD
OUTYY(("P(server_ipsecmod_max_ttl:%s)\n", (yyvsp[0].str)));
@@ -6488,11 +6509,11 @@ yyreduce:
free((yyvsp[0].str));
#endif
}
-#line 6492 "util/configparser.c"
+#line 6513 "util/configparser.c"
break;
- case 594: /* server_ipsecmod_whitelist: VAR_IPSECMOD_WHITELIST STRING_ARG */
-#line 3051 "util/configparser.y"
+ case 598: /* server_ipsecmod_whitelist: VAR_IPSECMOD_WHITELIST STRING_ARG */
+#line 3062 "util/configparser.y"
{
#ifdef USE_IPSECMOD
OUTYY(("P(server_ipsecmod_whitelist:%s)\n", (yyvsp[0].str)));
@@ -6503,11 +6524,11 @@ yyreduce:
free((yyvsp[0].str));
#endif
}
-#line 6507 "util/configparser.c"
+#line 6528 "util/configparser.c"
break;
- case 595: /* server_ipsecmod_strict: VAR_IPSECMOD_STRICT STRING_ARG */
-#line 3063 "util/configparser.y"
+ case 599: /* server_ipsecmod_strict: VAR_IPSECMOD_STRICT STRING_ARG */
+#line 3074 "util/configparser.y"
{
#ifdef USE_IPSECMOD
OUTYY(("P(server_ipsecmod_strict:%s)\n", (yyvsp[0].str)));
@@ -6520,23 +6541,22 @@ yyreduce:
free((yyvsp[0].str));
#endif
}
-#line 6524 "util/configparser.c"
+#line 6545 "util/configparser.c"
break;
- case 596: /* server_edns_client_string: VAR_EDNS_CLIENT_STRING STRING_ARG STRING_ARG */
-#line 3077 "util/configparser.y"
+ case 600: /* server_edns_client_string: VAR_EDNS_CLIENT_STRING STRING_ARG STRING_ARG */
+#line 3088 "util/configparser.y"
{
OUTYY(("P(server_edns_client_string:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
if(!cfg_str2list_insert(
&cfg_parser->cfg->edns_client_strings, (yyvsp[-1].str), (yyvsp[0].str)))
- fatal_exit("out of memory adding "
- "edns-client-string");
+ yyerror("out of memory");
}
-#line 6536 "util/configparser.c"
+#line 6556 "util/configparser.c"
break;
- case 597: /* server_edns_client_string_opcode: VAR_EDNS_CLIENT_STRING_OPCODE STRING_ARG */
-#line 3086 "util/configparser.y"
+ case 601: /* server_edns_client_string_opcode: VAR_EDNS_CLIENT_STRING_OPCODE STRING_ARG */
+#line 3096 "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)
@@ -6546,11 +6566,11 @@ yyreduce:
else cfg_parser->cfg->edns_client_string_opcode = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 6550 "util/configparser.c"
+#line 6570 "util/configparser.c"
break;
- case 598: /* server_ede: VAR_EDE STRING_ARG */
-#line 3097 "util/configparser.y"
+ case 602: /* server_ede: VAR_EDE STRING_ARG */
+#line 3107 "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)
@@ -6558,11 +6578,11 @@ yyreduce:
else cfg_parser->cfg->ede = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 6562 "util/configparser.c"
+#line 6582 "util/configparser.c"
break;
- case 599: /* server_dns_error_reporting: VAR_DNS_ERROR_REPORTING STRING_ARG */
-#line 3106 "util/configparser.y"
+ case 603: /* server_dns_error_reporting: VAR_DNS_ERROR_REPORTING STRING_ARG */
+#line 3116 "util/configparser.y"
{
OUTYY(("P(server_dns_error_reporting:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -6570,21 +6590,21 @@ yyreduce:
else cfg_parser->cfg->dns_error_reporting = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 6574 "util/configparser.c"
+#line 6594 "util/configparser.c"
break;
- case 600: /* server_proxy_protocol_port: VAR_PROXY_PROTOCOL_PORT STRING_ARG */
-#line 3115 "util/configparser.y"
+ case 604: /* server_proxy_protocol_port: VAR_PROXY_PROTOCOL_PORT STRING_ARG */
+#line 3125 "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 6584 "util/configparser.c"
+#line 6604 "util/configparser.c"
break;
- case 601: /* stub_name: VAR_NAME STRING_ARG */
-#line 3122 "util/configparser.y"
+ case 605: /* stub_name: VAR_NAME STRING_ARG */
+#line 3132 "util/configparser.y"
{
OUTYY(("P(name:%s)\n", (yyvsp[0].str)));
if(cfg_parser->cfg->stubs->name)
@@ -6593,31 +6613,31 @@ yyreduce:
free(cfg_parser->cfg->stubs->name);
cfg_parser->cfg->stubs->name = (yyvsp[0].str);
}
-#line 6597 "util/configparser.c"
+#line 6617 "util/configparser.c"
break;
- case 602: /* stub_host: VAR_STUB_HOST STRING_ARG */
-#line 3132 "util/configparser.y"
+ case 606: /* stub_host: VAR_STUB_HOST STRING_ARG */
+#line 3142 "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 6607 "util/configparser.c"
+#line 6627 "util/configparser.c"
break;
- case 603: /* stub_addr: VAR_STUB_ADDR STRING_ARG */
-#line 3139 "util/configparser.y"
+ case 607: /* stub_addr: VAR_STUB_ADDR STRING_ARG */
+#line 3149 "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 6617 "util/configparser.c"
+#line 6637 "util/configparser.c"
break;
- case 604: /* stub_first: VAR_STUB_FIRST STRING_ARG */
-#line 3146 "util/configparser.y"
+ case 608: /* stub_first: VAR_STUB_FIRST STRING_ARG */
+#line 3156 "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)
@@ -6625,11 +6645,11 @@ yyreduce:
else cfg_parser->cfg->stubs->isfirst=(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 6629 "util/configparser.c"
+#line 6649 "util/configparser.c"
break;
- case 605: /* stub_no_cache: VAR_STUB_NO_CACHE STRING_ARG */
-#line 3155 "util/configparser.y"
+ case 609: /* stub_no_cache: VAR_STUB_NO_CACHE STRING_ARG */
+#line 3165 "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)
@@ -6637,11 +6657,11 @@ yyreduce:
else cfg_parser->cfg->stubs->no_cache=(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 6641 "util/configparser.c"
+#line 6661 "util/configparser.c"
break;
- case 606: /* stub_ssl_upstream: VAR_STUB_SSL_UPSTREAM STRING_ARG */
-#line 3164 "util/configparser.y"
+ case 610: /* stub_ssl_upstream: VAR_STUB_SSL_UPSTREAM STRING_ARG */
+#line 3174 "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)
@@ -6650,11 +6670,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 6654 "util/configparser.c"
+#line 6674 "util/configparser.c"
break;
- case 607: /* stub_tcp_upstream: VAR_STUB_TCP_UPSTREAM STRING_ARG */
-#line 3174 "util/configparser.y"
+ case 611: /* stub_tcp_upstream: VAR_STUB_TCP_UPSTREAM STRING_ARG */
+#line 3184 "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)
@@ -6663,11 +6683,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 6667 "util/configparser.c"
+#line 6687 "util/configparser.c"
break;
- case 608: /* stub_prime: VAR_STUB_PRIME STRING_ARG */
-#line 3184 "util/configparser.y"
+ case 612: /* stub_prime: VAR_STUB_PRIME STRING_ARG */
+#line 3194 "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)
@@ -6676,11 +6696,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 6680 "util/configparser.c"
+#line 6700 "util/configparser.c"
break;
- case 609: /* forward_name: VAR_NAME STRING_ARG */
-#line 3194 "util/configparser.y"
+ case 613: /* forward_name: VAR_NAME STRING_ARG */
+#line 3204 "util/configparser.y"
{
OUTYY(("P(name:%s)\n", (yyvsp[0].str)));
if(cfg_parser->cfg->forwards->name)
@@ -6689,31 +6709,31 @@ yyreduce:
free(cfg_parser->cfg->forwards->name);
cfg_parser->cfg->forwards->name = (yyvsp[0].str);
}
-#line 6693 "util/configparser.c"
+#line 6713 "util/configparser.c"
break;
- case 610: /* forward_host: VAR_FORWARD_HOST STRING_ARG */
-#line 3204 "util/configparser.y"
+ case 614: /* forward_host: VAR_FORWARD_HOST STRING_ARG */
+#line 3214 "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 6703 "util/configparser.c"
+#line 6723 "util/configparser.c"
break;
- case 611: /* forward_addr: VAR_FORWARD_ADDR STRING_ARG */
-#line 3211 "util/configparser.y"
+ case 615: /* forward_addr: VAR_FORWARD_ADDR STRING_ARG */
+#line 3221 "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 6713 "util/configparser.c"
+#line 6733 "util/configparser.c"
break;
- case 612: /* forward_first: VAR_FORWARD_FIRST STRING_ARG */
-#line 3218 "util/configparser.y"
+ case 616: /* forward_first: VAR_FORWARD_FIRST STRING_ARG */
+#line 3228 "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)
@@ -6721,11 +6741,11 @@ yyreduce:
else cfg_parser->cfg->forwards->isfirst=(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 6725 "util/configparser.c"
+#line 6745 "util/configparser.c"
break;
- case 613: /* forward_no_cache: VAR_FORWARD_NO_CACHE STRING_ARG */
-#line 3227 "util/configparser.y"
+ case 617: /* forward_no_cache: VAR_FORWARD_NO_CACHE STRING_ARG */
+#line 3237 "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)
@@ -6733,11 +6753,11 @@ yyreduce:
else cfg_parser->cfg->forwards->no_cache=(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 6737 "util/configparser.c"
+#line 6757 "util/configparser.c"
break;
- case 614: /* forward_ssl_upstream: VAR_FORWARD_SSL_UPSTREAM STRING_ARG */
-#line 3236 "util/configparser.y"
+ case 618: /* forward_ssl_upstream: VAR_FORWARD_SSL_UPSTREAM STRING_ARG */
+#line 3246 "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)
@@ -6746,11 +6766,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 6750 "util/configparser.c"
+#line 6770 "util/configparser.c"
break;
- case 615: /* forward_tcp_upstream: VAR_FORWARD_TCP_UPSTREAM STRING_ARG */
-#line 3246 "util/configparser.y"
+ case 619: /* forward_tcp_upstream: VAR_FORWARD_TCP_UPSTREAM STRING_ARG */
+#line 3256 "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)
@@ -6759,11 +6779,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 6763 "util/configparser.c"
+#line 6783 "util/configparser.c"
break;
- case 616: /* auth_name: VAR_NAME STRING_ARG */
-#line 3256 "util/configparser.y"
+ case 620: /* auth_name: VAR_NAME STRING_ARG */
+#line 3266 "util/configparser.y"
{
OUTYY(("P(name:%s)\n", (yyvsp[0].str)));
if(cfg_parser->cfg->auths->name)
@@ -6772,52 +6792,52 @@ yyreduce:
free(cfg_parser->cfg->auths->name);
cfg_parser->cfg->auths->name = (yyvsp[0].str);
}
-#line 6776 "util/configparser.c"
+#line 6796 "util/configparser.c"
break;
- case 617: /* auth_zonefile: VAR_ZONEFILE STRING_ARG */
-#line 3266 "util/configparser.y"
+ case 621: /* auth_zonefile: VAR_ZONEFILE STRING_ARG */
+#line 3276 "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 6786 "util/configparser.c"
+#line 6806 "util/configparser.c"
break;
- case 618: /* auth_master: VAR_MASTER STRING_ARG */
-#line 3273 "util/configparser.y"
+ case 622: /* auth_master: VAR_MASTER STRING_ARG */
+#line 3283 "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 6796 "util/configparser.c"
+#line 6816 "util/configparser.c"
break;
- case 619: /* auth_url: VAR_URL STRING_ARG */
-#line 3280 "util/configparser.y"
+ case 623: /* auth_url: VAR_URL STRING_ARG */
+#line 3290 "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 6806 "util/configparser.c"
+#line 6826 "util/configparser.c"
break;
- case 620: /* auth_allow_notify: VAR_ALLOW_NOTIFY STRING_ARG */
-#line 3287 "util/configparser.y"
+ case 624: /* auth_allow_notify: VAR_ALLOW_NOTIFY STRING_ARG */
+#line 3297 "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 6817 "util/configparser.c"
+#line 6837 "util/configparser.c"
break;
- case 621: /* auth_zonemd_check: VAR_ZONEMD_CHECK STRING_ARG */
-#line 3295 "util/configparser.y"
+ case 625: /* auth_zonemd_check: VAR_ZONEMD_CHECK STRING_ARG */
+#line 3305 "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)
@@ -6826,11 +6846,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 6830 "util/configparser.c"
+#line 6850 "util/configparser.c"
break;
- case 622: /* auth_zonemd_reject_absence: VAR_ZONEMD_REJECT_ABSENCE STRING_ARG */
-#line 3305 "util/configparser.y"
+ case 626: /* auth_zonemd_reject_absence: VAR_ZONEMD_REJECT_ABSENCE STRING_ARG */
+#line 3315 "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)
@@ -6839,11 +6859,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 6843 "util/configparser.c"
+#line 6863 "util/configparser.c"
break;
- case 623: /* auth_for_downstream: VAR_FOR_DOWNSTREAM STRING_ARG */
-#line 3315 "util/configparser.y"
+ case 627: /* auth_for_downstream: VAR_FOR_DOWNSTREAM STRING_ARG */
+#line 3325 "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)
@@ -6852,11 +6872,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 6856 "util/configparser.c"
+#line 6876 "util/configparser.c"
break;
- case 624: /* auth_for_upstream: VAR_FOR_UPSTREAM STRING_ARG */
-#line 3325 "util/configparser.y"
+ case 628: /* auth_for_upstream: VAR_FOR_UPSTREAM STRING_ARG */
+#line 3335 "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)
@@ -6865,11 +6885,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 6869 "util/configparser.c"
+#line 6889 "util/configparser.c"
break;
- case 625: /* auth_fallback_enabled: VAR_FALLBACK_ENABLED STRING_ARG */
-#line 3335 "util/configparser.y"
+ case 629: /* auth_fallback_enabled: VAR_FALLBACK_ENABLED STRING_ARG */
+#line 3345 "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)
@@ -6878,11 +6898,34 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 6882 "util/configparser.c"
+#line 6902 "util/configparser.c"
break;
- case 626: /* view_name: VAR_NAME STRING_ARG */
-#line 3345 "util/configparser.y"
+ case 630: /* auth_max_transfer_size: VAR_MAX_TRANSFER_SIZE STRING_ARG */
+#line 3355 "util/configparser.y"
+ {
+ OUTYY(("P(max-transfer-size:%s)\n", (yyvsp[0].str)));
+ if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->auths->max_transfer_size))
+ yyerror("memory size expected");
+ free((yyvsp[0].str));
+ }
+#line 6913 "util/configparser.c"
+ break;
+
+ case 631: /* auth_max_transfer_time: VAR_MAX_TRANSFER_TIME STRING_ARG */
+#line 3363 "util/configparser.y"
+ {
+ OUTYY(("P(max-transfer-time:%s)\n", (yyvsp[0].str)));
+ if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
+ yyerror("number expected");
+ else cfg_parser->cfg->auths->max_transfer_time = atoi((yyvsp[0].str));
+ free((yyvsp[0].str));
+ }
+#line 6925 "util/configparser.c"
+ break;
+
+ case 632: /* view_name: VAR_NAME STRING_ARG */
+#line 3372 "util/configparser.y"
{
OUTYY(("P(name:%s)\n", (yyvsp[0].str)));
if(cfg_parser->cfg->views->name)
@@ -6891,11 +6934,11 @@ yyreduce:
free(cfg_parser->cfg->views->name);
cfg_parser->cfg->views->name = (yyvsp[0].str);
}
-#line 6895 "util/configparser.c"
+#line 6938 "util/configparser.c"
break;
- case 627: /* view_local_zone: VAR_LOCAL_ZONE STRING_ARG STRING_ARG */
-#line 3355 "util/configparser.y"
+ case 633: /* view_local_zone: VAR_LOCAL_ZONE STRING_ARG STRING_ARG */
+#line 3382 "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 &&
@@ -6924,7 +6967,7 @@ yyreduce:
} else if(strcmp((yyvsp[0].str), "nodefault")==0) {
if(!cfg_strlist_insert(&cfg_parser->cfg->views->
local_zones_nodefault, (yyvsp[-1].str)))
- fatal_exit("out of memory adding local-zone");
+ yyerror("out of memory");
free((yyvsp[0].str));
#ifdef USE_IPSET
} else if(strcmp((yyvsp[0].str), "ipset")==0) {
@@ -6932,64 +6975,66 @@ yyreduce:
/* Make sure to add the trailing dot.
* These are str compared to domain names. */
if((yyvsp[-1].str)[len-1] != '.') {
+ char* prev = (yyvsp[-1].str);
if(!((yyvsp[-1].str) = realloc((yyvsp[-1].str), len+2))) {
- fatal_exit("out of memory adding local-zone");
+ yyerror("out of memory");
+ free(prev);
+ } else {
+ (yyvsp[-1].str)[len] = '.';
+ (yyvsp[-1].str)[len+1] = 0;
}
- (yyvsp[-1].str)[len] = '.';
- (yyvsp[-1].str)[len+1] = 0;
}
if(!cfg_strlist_insert(&cfg_parser->cfg->views->
local_zones_ipset, (yyvsp[-1].str)))
- fatal_exit("out of memory adding local-zone");
+ yyerror("out of memory");
free((yyvsp[0].str));
#endif
} else {
if(!cfg_str2list_insert(
&cfg_parser->cfg->views->local_zones,
(yyvsp[-1].str), (yyvsp[0].str)))
- fatal_exit("out of memory adding local-zone");
+ yyerror("out of memory");
}
}
-#line 6954 "util/configparser.c"
+#line 7000 "util/configparser.c"
break;
- case 628: /* view_response_ip: VAR_RESPONSE_IP STRING_ARG STRING_ARG */
-#line 3411 "util/configparser.y"
+ case 634: /* view_response_ip: VAR_RESPONSE_IP STRING_ARG STRING_ARG */
+#line 3441 "util/configparser.y"
{
OUTYY(("P(view_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
validate_respip_action((yyvsp[0].str));
if(!cfg_str2list_insert(
&cfg_parser->cfg->views->respip_actions, (yyvsp[-1].str), (yyvsp[0].str)))
- fatal_exit("out of memory adding per-view "
- "response-ip action");
+ yyerror("out of memory");
}
-#line 6967 "util/configparser.c"
+#line 7012 "util/configparser.c"
break;
- case 629: /* view_response_ip_data: VAR_RESPONSE_IP_DATA STRING_ARG STRING_ARG */
-#line 3421 "util/configparser.y"
+ case 635: /* view_response_ip_data: VAR_RESPONSE_IP_DATA STRING_ARG STRING_ARG */
+#line 3450 "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");
+ yyerror("out of memory");
}
-#line 6978 "util/configparser.c"
+#line 7023 "util/configparser.c"
break;
- case 630: /* view_local_data: VAR_LOCAL_DATA STRING_ARG */
-#line 3429 "util/configparser.y"
+ case 636: /* view_local_data: VAR_LOCAL_DATA STRING_ARG */
+#line 3458 "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");
+ yyerror("out of memory");
}
}
-#line 6989 "util/configparser.c"
+#line 7034 "util/configparser.c"
break;
- case 631: /* view_local_data_ptr: VAR_LOCAL_DATA_PTR STRING_ARG */
-#line 3437 "util/configparser.y"
+ case 637: /* view_local_data_ptr: VAR_LOCAL_DATA_PTR STRING_ARG */
+#line 3466 "util/configparser.y"
{
char* ptr;
OUTYY(("P(view_local_data_ptr:%s)\n", (yyvsp[0].str)));
@@ -6998,16 +7043,16 @@ yyreduce:
if(ptr) {
if(!cfg_strlist_insert(&cfg_parser->cfg->views->
local_data, ptr))
- fatal_exit("out of memory adding local-data");
+ yyerror("out of memory");
} else {
yyerror("local-data-ptr could not be reversed");
}
}
-#line 7007 "util/configparser.c"
+#line 7052 "util/configparser.c"
break;
- case 632: /* view_first: VAR_VIEW_FIRST STRING_ARG */
-#line 3452 "util/configparser.y"
+ case 638: /* view_first: VAR_VIEW_FIRST STRING_ARG */
+#line 3481 "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)
@@ -7015,20 +7060,20 @@ yyreduce:
else cfg_parser->cfg->views->isfirst=(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 7019 "util/configparser.c"
+#line 7064 "util/configparser.c"
break;
- case 633: /* rcstart: VAR_REMOTE_CONTROL */
-#line 3461 "util/configparser.y"
+ case 639: /* rcstart: VAR_REMOTE_CONTROL */
+#line 3490 "util/configparser.y"
{
OUTYY(("\nP(remote-control:)\n"));
cfg_parser->started_toplevel = 1;
}
-#line 7028 "util/configparser.c"
+#line 7073 "util/configparser.c"
break;
- case 644: /* rc_control_enable: VAR_CONTROL_ENABLE STRING_ARG */
-#line 3473 "util/configparser.y"
+ case 650: /* rc_control_enable: VAR_CONTROL_ENABLE STRING_ARG */
+#line 3502 "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)
@@ -7037,11 +7082,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 7041 "util/configparser.c"
+#line 7086 "util/configparser.c"
break;
- case 645: /* rc_control_port: VAR_CONTROL_PORT STRING_ARG */
-#line 3483 "util/configparser.y"
+ case 651: /* rc_control_port: VAR_CONTROL_PORT STRING_ARG */
+#line 3512 "util/configparser.y"
{
OUTYY(("P(control_port:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0)
@@ -7049,80 +7094,80 @@ yyreduce:
else cfg_parser->cfg->control_port = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 7053 "util/configparser.c"
+#line 7098 "util/configparser.c"
break;
- case 646: /* rc_control_interface: VAR_CONTROL_INTERFACE STRING_ARG */
-#line 3492 "util/configparser.y"
+ case 652: /* rc_control_interface: VAR_CONTROL_INTERFACE STRING_ARG */
+#line 3521 "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 7063 "util/configparser.c"
+#line 7108 "util/configparser.c"
break;
- case 647: /* rc_control_use_cert: VAR_CONTROL_USE_CERT STRING_ARG */
-#line 3499 "util/configparser.y"
+ case 653: /* rc_control_use_cert: VAR_CONTROL_USE_CERT STRING_ARG */
+#line 3528 "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 7073 "util/configparser.c"
+#line 7118 "util/configparser.c"
break;
- case 648: /* rc_server_key_file: VAR_SERVER_KEY_FILE STRING_ARG */
-#line 3506 "util/configparser.y"
+ case 654: /* rc_server_key_file: VAR_SERVER_KEY_FILE STRING_ARG */
+#line 3535 "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 7083 "util/configparser.c"
+#line 7128 "util/configparser.c"
break;
- case 649: /* rc_server_cert_file: VAR_SERVER_CERT_FILE STRING_ARG */
-#line 3513 "util/configparser.y"
+ case 655: /* rc_server_cert_file: VAR_SERVER_CERT_FILE STRING_ARG */
+#line 3542 "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 7093 "util/configparser.c"
+#line 7138 "util/configparser.c"
break;
- case 650: /* rc_control_key_file: VAR_CONTROL_KEY_FILE STRING_ARG */
-#line 3520 "util/configparser.y"
+ case 656: /* rc_control_key_file: VAR_CONTROL_KEY_FILE STRING_ARG */
+#line 3549 "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 7103 "util/configparser.c"
+#line 7148 "util/configparser.c"
break;
- case 651: /* rc_control_cert_file: VAR_CONTROL_CERT_FILE STRING_ARG */
-#line 3527 "util/configparser.y"
+ case 657: /* rc_control_cert_file: VAR_CONTROL_CERT_FILE STRING_ARG */
+#line 3556 "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 7113 "util/configparser.c"
+#line 7158 "util/configparser.c"
break;
- case 652: /* dtstart: VAR_DNSTAP */
-#line 3534 "util/configparser.y"
+ case 658: /* dtstart: VAR_DNSTAP */
+#line 3563 "util/configparser.y"
{
OUTYY(("\nP(dnstap:)\n"));
cfg_parser->started_toplevel = 1;
}
-#line 7122 "util/configparser.c"
+#line 7167 "util/configparser.c"
break;
- case 675: /* dt_dnstap_enable: VAR_DNSTAP_ENABLE STRING_ARG */
-#line 3556 "util/configparser.y"
+ case 681: /* dt_dnstap_enable: VAR_DNSTAP_ENABLE STRING_ARG */
+#line 3585 "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)
@@ -7130,11 +7175,11 @@ yyreduce:
else cfg_parser->cfg->dnstap = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 7134 "util/configparser.c"
+#line 7179 "util/configparser.c"
break;
- case 676: /* dt_dnstap_bidirectional: VAR_DNSTAP_BIDIRECTIONAL STRING_ARG */
-#line 3565 "util/configparser.y"
+ case 682: /* dt_dnstap_bidirectional: VAR_DNSTAP_BIDIRECTIONAL STRING_ARG */
+#line 3594 "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)
@@ -7143,31 +7188,31 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 7147 "util/configparser.c"
+#line 7192 "util/configparser.c"
break;
- case 677: /* dt_dnstap_socket_path: VAR_DNSTAP_SOCKET_PATH STRING_ARG */
-#line 3575 "util/configparser.y"
+ case 683: /* dt_dnstap_socket_path: VAR_DNSTAP_SOCKET_PATH STRING_ARG */
+#line 3604 "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 7157 "util/configparser.c"
+#line 7202 "util/configparser.c"
break;
- case 678: /* dt_dnstap_ip: VAR_DNSTAP_IP STRING_ARG */
-#line 3582 "util/configparser.y"
+ case 684: /* dt_dnstap_ip: VAR_DNSTAP_IP STRING_ARG */
+#line 3611 "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 7167 "util/configparser.c"
+#line 7212 "util/configparser.c"
break;
- case 679: /* dt_dnstap_tls: VAR_DNSTAP_TLS STRING_ARG */
-#line 3589 "util/configparser.y"
+ case 685: /* dt_dnstap_tls: VAR_DNSTAP_TLS STRING_ARG */
+#line 3618 "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)
@@ -7175,51 +7220,51 @@ yyreduce:
else cfg_parser->cfg->dnstap_tls = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 7179 "util/configparser.c"
+#line 7224 "util/configparser.c"
break;
- case 680: /* dt_dnstap_tls_server_name: VAR_DNSTAP_TLS_SERVER_NAME STRING_ARG */
-#line 3598 "util/configparser.y"
+ case 686: /* dt_dnstap_tls_server_name: VAR_DNSTAP_TLS_SERVER_NAME STRING_ARG */
+#line 3627 "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 7189 "util/configparser.c"
+#line 7234 "util/configparser.c"
break;
- case 681: /* dt_dnstap_tls_cert_bundle: VAR_DNSTAP_TLS_CERT_BUNDLE STRING_ARG */
-#line 3605 "util/configparser.y"
+ case 687: /* dt_dnstap_tls_cert_bundle: VAR_DNSTAP_TLS_CERT_BUNDLE STRING_ARG */
+#line 3634 "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 7199 "util/configparser.c"
+#line 7244 "util/configparser.c"
break;
- case 682: /* dt_dnstap_tls_client_key_file: VAR_DNSTAP_TLS_CLIENT_KEY_FILE STRING_ARG */
-#line 3612 "util/configparser.y"
+ case 688: /* dt_dnstap_tls_client_key_file: VAR_DNSTAP_TLS_CLIENT_KEY_FILE STRING_ARG */
+#line 3641 "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 7209 "util/configparser.c"
+#line 7254 "util/configparser.c"
break;
- case 683: /* dt_dnstap_tls_client_cert_file: VAR_DNSTAP_TLS_CLIENT_CERT_FILE STRING_ARG */
-#line 3619 "util/configparser.y"
+ case 689: /* dt_dnstap_tls_client_cert_file: VAR_DNSTAP_TLS_CLIENT_CERT_FILE STRING_ARG */
+#line 3648 "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 7219 "util/configparser.c"
+#line 7264 "util/configparser.c"
break;
- case 684: /* dt_dnstap_send_identity: VAR_DNSTAP_SEND_IDENTITY STRING_ARG */
-#line 3626 "util/configparser.y"
+ case 690: /* dt_dnstap_send_identity: VAR_DNSTAP_SEND_IDENTITY STRING_ARG */
+#line 3655 "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)
@@ -7227,11 +7272,11 @@ yyreduce:
else cfg_parser->cfg->dnstap_send_identity = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 7231 "util/configparser.c"
+#line 7276 "util/configparser.c"
break;
- case 685: /* dt_dnstap_send_version: VAR_DNSTAP_SEND_VERSION STRING_ARG */
-#line 3635 "util/configparser.y"
+ case 691: /* dt_dnstap_send_version: VAR_DNSTAP_SEND_VERSION STRING_ARG */
+#line 3664 "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)
@@ -7239,31 +7284,31 @@ yyreduce:
else cfg_parser->cfg->dnstap_send_version = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 7243 "util/configparser.c"
+#line 7288 "util/configparser.c"
break;
- case 686: /* dt_dnstap_identity: VAR_DNSTAP_IDENTITY STRING_ARG */
-#line 3644 "util/configparser.y"
+ case 692: /* dt_dnstap_identity: VAR_DNSTAP_IDENTITY STRING_ARG */
+#line 3673 "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 7253 "util/configparser.c"
+#line 7298 "util/configparser.c"
break;
- case 687: /* dt_dnstap_version: VAR_DNSTAP_VERSION STRING_ARG */
-#line 3651 "util/configparser.y"
+ case 693: /* dt_dnstap_version: VAR_DNSTAP_VERSION STRING_ARG */
+#line 3680 "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 7263 "util/configparser.c"
+#line 7308 "util/configparser.c"
break;
- case 688: /* dt_dnstap_log_resolver_query_messages: VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES STRING_ARG */
-#line 3658 "util/configparser.y"
+ case 694: /* dt_dnstap_log_resolver_query_messages: VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES STRING_ARG */
+#line 3687 "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)
@@ -7272,11 +7317,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 7276 "util/configparser.c"
+#line 7321 "util/configparser.c"
break;
- case 689: /* dt_dnstap_log_resolver_response_messages: VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES STRING_ARG */
-#line 3668 "util/configparser.y"
+ case 695: /* dt_dnstap_log_resolver_response_messages: VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES STRING_ARG */
+#line 3697 "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)
@@ -7285,11 +7330,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 7289 "util/configparser.c"
+#line 7334 "util/configparser.c"
break;
- case 690: /* dt_dnstap_log_client_query_messages: VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES STRING_ARG */
-#line 3678 "util/configparser.y"
+ case 696: /* dt_dnstap_log_client_query_messages: VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES STRING_ARG */
+#line 3707 "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)
@@ -7298,11 +7343,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 7302 "util/configparser.c"
+#line 7347 "util/configparser.c"
break;
- case 691: /* dt_dnstap_log_client_response_messages: VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES STRING_ARG */
-#line 3688 "util/configparser.y"
+ case 697: /* dt_dnstap_log_client_response_messages: VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES STRING_ARG */
+#line 3717 "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)
@@ -7311,11 +7356,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 7315 "util/configparser.c"
+#line 7360 "util/configparser.c"
break;
- case 692: /* dt_dnstap_log_forwarder_query_messages: VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES STRING_ARG */
-#line 3698 "util/configparser.y"
+ case 698: /* dt_dnstap_log_forwarder_query_messages: VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES STRING_ARG */
+#line 3727 "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)
@@ -7324,11 +7369,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 7328 "util/configparser.c"
+#line 7373 "util/configparser.c"
break;
- case 693: /* dt_dnstap_log_forwarder_response_messages: VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES STRING_ARG */
-#line 3708 "util/configparser.y"
+ case 699: /* dt_dnstap_log_forwarder_response_messages: VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES STRING_ARG */
+#line 3737 "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)
@@ -7337,11 +7382,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 7341 "util/configparser.c"
+#line 7386 "util/configparser.c"
break;
- case 694: /* dt_dnstap_sample_rate: VAR_DNSTAP_SAMPLE_RATE STRING_ARG */
-#line 3718 "util/configparser.y"
+ case 700: /* dt_dnstap_sample_rate: VAR_DNSTAP_SAMPLE_RATE STRING_ARG */
+#line 3747 "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)
@@ -7351,49 +7396,49 @@ yyreduce:
else cfg_parser->cfg->dnstap_sample_rate = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 7355 "util/configparser.c"
+#line 7400 "util/configparser.c"
break;
- case 695: /* pythonstart: VAR_PYTHON */
-#line 3729 "util/configparser.y"
+ case 701: /* pythonstart: VAR_PYTHON */
+#line 3758 "util/configparser.y"
{
OUTYY(("\nP(python:)\n"));
cfg_parser->started_toplevel = 1;
}
-#line 7364 "util/configparser.c"
+#line 7409 "util/configparser.c"
break;
- case 699: /* py_script: VAR_PYTHON_SCRIPT STRING_ARG */
-#line 3739 "util/configparser.y"
+ case 705: /* py_script: VAR_PYTHON_SCRIPT STRING_ARG */
+#line 3768 "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 7374 "util/configparser.c"
+#line 7419 "util/configparser.c"
break;
- case 700: /* dynlibstart: VAR_DYNLIB */
-#line 3746 "util/configparser.y"
+ case 706: /* dynlibstart: VAR_DYNLIB */
+#line 3775 "util/configparser.y"
{
OUTYY(("\nP(dynlib:)\n"));
cfg_parser->started_toplevel = 1;
}
-#line 7383 "util/configparser.c"
+#line 7428 "util/configparser.c"
break;
- case 704: /* dl_file: VAR_DYNLIB_FILE STRING_ARG */
-#line 3756 "util/configparser.y"
+ case 710: /* dl_file: VAR_DYNLIB_FILE STRING_ARG */
+#line 3785 "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 7393 "util/configparser.c"
+#line 7438 "util/configparser.c"
break;
- case 705: /* server_disable_dnssec_lame_check: VAR_DISABLE_DNSSEC_LAME_CHECK STRING_ARG */
-#line 3763 "util/configparser.y"
+ case 711: /* server_disable_dnssec_lame_check: VAR_DISABLE_DNSSEC_LAME_CHECK STRING_ARG */
+#line 3792 "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)
@@ -7402,53 +7447,53 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 7406 "util/configparser.c"
+#line 7451 "util/configparser.c"
break;
- case 706: /* server_log_identity: VAR_LOG_IDENTITY STRING_ARG */
-#line 3773 "util/configparser.y"
+ case 712: /* server_log_identity: VAR_LOG_IDENTITY STRING_ARG */
+#line 3802 "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 7416 "util/configparser.c"
+#line 7461 "util/configparser.c"
break;
- case 707: /* server_response_ip: VAR_RESPONSE_IP STRING_ARG STRING_ARG */
-#line 3780 "util/configparser.y"
+ case 713: /* server_response_ip: VAR_RESPONSE_IP STRING_ARG STRING_ARG */
+#line 3809 "util/configparser.y"
{
OUTYY(("P(server_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
validate_respip_action((yyvsp[0].str));
if(!cfg_str2list_insert(&cfg_parser->cfg->respip_actions,
(yyvsp[-1].str), (yyvsp[0].str)))
- fatal_exit("out of memory adding response-ip");
+ yyerror("out of memory");
}
-#line 7428 "util/configparser.c"
+#line 7473 "util/configparser.c"
break;
- case 708: /* server_response_ip_data: VAR_RESPONSE_IP_DATA STRING_ARG STRING_ARG */
-#line 3789 "util/configparser.y"
+ case 714: /* server_response_ip_data: VAR_RESPONSE_IP_DATA STRING_ARG STRING_ARG */
+#line 3818 "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");
+ yyerror("out of memory");
}
-#line 7439 "util/configparser.c"
+#line 7484 "util/configparser.c"
break;
- case 709: /* dnscstart: VAR_DNSCRYPT */
-#line 3797 "util/configparser.y"
+ case 715: /* dnscstart: VAR_DNSCRYPT */
+#line 3826 "util/configparser.y"
{
OUTYY(("\nP(dnscrypt:)\n"));
cfg_parser->started_toplevel = 1;
}
-#line 7448 "util/configparser.c"
+#line 7493 "util/configparser.c"
break;
- case 722: /* dnsc_dnscrypt_enable: VAR_DNSCRYPT_ENABLE STRING_ARG */
-#line 3814 "util/configparser.y"
+ case 728: /* dnsc_dnscrypt_enable: VAR_DNSCRYPT_ENABLE STRING_ARG */
+#line 3843 "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)
@@ -7456,11 +7501,11 @@ yyreduce:
else cfg_parser->cfg->dnscrypt = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 7460 "util/configparser.c"
+#line 7505 "util/configparser.c"
break;
- case 723: /* dnsc_dnscrypt_port: VAR_DNSCRYPT_PORT STRING_ARG */
-#line 3823 "util/configparser.y"
+ case 729: /* dnsc_dnscrypt_port: VAR_DNSCRYPT_PORT STRING_ARG */
+#line 3852 "util/configparser.y"
{
OUTYY(("P(dnsc_dnscrypt_port:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0)
@@ -7468,66 +7513,70 @@ yyreduce:
else cfg_parser->cfg->dnscrypt_port = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 7472 "util/configparser.c"
+#line 7517 "util/configparser.c"
break;
- case 724: /* dnsc_dnscrypt_provider: VAR_DNSCRYPT_PROVIDER STRING_ARG */
-#line 3832 "util/configparser.y"
+ case 730: /* dnsc_dnscrypt_provider: VAR_DNSCRYPT_PROVIDER STRING_ARG */
+#line 3861 "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 7482 "util/configparser.c"
+#line 7527 "util/configparser.c"
break;
- case 725: /* dnsc_dnscrypt_provider_cert: VAR_DNSCRYPT_PROVIDER_CERT STRING_ARG */
-#line 3839 "util/configparser.y"
+ case 731: /* dnsc_dnscrypt_provider_cert: VAR_DNSCRYPT_PROVIDER_CERT STRING_ARG */
+#line 3868 "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)))
+ if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str))) {
log_warn("dnscrypt-provider-cert %s is a duplicate", (yyvsp[0].str));
- if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str)))
- fatal_exit("out of memory adding dnscrypt-provider-cert");
+ free((yyvsp[0].str));
+ } else if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str))) {
+ yyerror("out of memory");
+ }
}
-#line 7494 "util/configparser.c"
+#line 7541 "util/configparser.c"
break;
- case 726: /* dnsc_dnscrypt_provider_cert_rotated: VAR_DNSCRYPT_PROVIDER_CERT_ROTATED STRING_ARG */
-#line 3848 "util/configparser.y"
+ case 732: /* dnsc_dnscrypt_provider_cert_rotated: VAR_DNSCRYPT_PROVIDER_CERT_ROTATED STRING_ARG */
+#line 3879 "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");
+ yyerror("out of memory");
}
-#line 7504 "util/configparser.c"
+#line 7551 "util/configparser.c"
break;
- case 727: /* dnsc_dnscrypt_secret_key: VAR_DNSCRYPT_SECRET_KEY STRING_ARG */
-#line 3855 "util/configparser.y"
+ case 733: /* dnsc_dnscrypt_secret_key: VAR_DNSCRYPT_SECRET_KEY STRING_ARG */
+#line 3886 "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)))
+ if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str))) {
log_warn("dnscrypt-secret-key: %s is a duplicate", (yyvsp[0].str));
- if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str)))
- fatal_exit("out of memory adding dnscrypt-secret-key");
+ free((yyvsp[0].str));
+ } else if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str))) {
+ yyerror("out of memory");
+ }
}
-#line 7516 "util/configparser.c"
+#line 7565 "util/configparser.c"
break;
- case 728: /* dnsc_dnscrypt_shared_secret_cache_size: VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE STRING_ARG */
-#line 3864 "util/configparser.y"
+ case 734: /* dnsc_dnscrypt_shared_secret_cache_size: VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE STRING_ARG */
+#line 3897 "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 7527 "util/configparser.c"
+#line 7576 "util/configparser.c"
break;
- case 729: /* dnsc_dnscrypt_shared_secret_cache_slabs: VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS STRING_ARG */
-#line 3872 "util/configparser.y"
+ case 735: /* dnsc_dnscrypt_shared_secret_cache_slabs: VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS STRING_ARG */
+#line 3905 "util/configparser.y"
{
OUTYY(("P(dnscrypt_shared_secret_cache_slabs:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0) {
@@ -7539,22 +7588,22 @@ yyreduce:
}
free((yyvsp[0].str));
}
-#line 7543 "util/configparser.c"
+#line 7592 "util/configparser.c"
break;
- case 730: /* dnsc_dnscrypt_nonce_cache_size: VAR_DNSCRYPT_NONCE_CACHE_SIZE STRING_ARG */
-#line 3885 "util/configparser.y"
+ case 736: /* dnsc_dnscrypt_nonce_cache_size: VAR_DNSCRYPT_NONCE_CACHE_SIZE STRING_ARG */
+#line 3918 "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 7554 "util/configparser.c"
+#line 7603 "util/configparser.c"
break;
- case 731: /* dnsc_dnscrypt_nonce_cache_slabs: VAR_DNSCRYPT_NONCE_CACHE_SLABS STRING_ARG */
-#line 3893 "util/configparser.y"
+ case 737: /* dnsc_dnscrypt_nonce_cache_slabs: VAR_DNSCRYPT_NONCE_CACHE_SLABS STRING_ARG */
+#line 3926 "util/configparser.y"
{
OUTYY(("P(dnscrypt_nonce_cache_slabs:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0) {
@@ -7566,20 +7615,20 @@ yyreduce:
}
free((yyvsp[0].str));
}
-#line 7570 "util/configparser.c"
+#line 7619 "util/configparser.c"
break;
- case 732: /* cachedbstart: VAR_CACHEDB */
-#line 3906 "util/configparser.y"
+ case 738: /* cachedbstart: VAR_CACHEDB */
+#line 3939 "util/configparser.y"
{
OUTYY(("\nP(cachedb:)\n"));
cfg_parser->started_toplevel = 1;
}
-#line 7579 "util/configparser.c"
+#line 7628 "util/configparser.c"
break;
- case 756: /* cachedb_backend_name: VAR_CACHEDB_BACKEND STRING_ARG */
-#line 3926 "util/configparser.y"
+ case 762: /* cachedb_backend_name: VAR_CACHEDB_BACKEND STRING_ARG */
+#line 3959 "util/configparser.y"
{
#ifdef USE_CACHEDB
OUTYY(("P(backend:%s)\n", (yyvsp[0].str)));
@@ -7590,11 +7639,11 @@ yyreduce:
free((yyvsp[0].str));
#endif
}
-#line 7594 "util/configparser.c"
+#line 7643 "util/configparser.c"
break;
- case 757: /* cachedb_secret_seed: VAR_CACHEDB_SECRETSEED STRING_ARG */
-#line 3938 "util/configparser.y"
+ case 763: /* cachedb_secret_seed: VAR_CACHEDB_SECRETSEED STRING_ARG */
+#line 3971 "util/configparser.y"
{
#ifdef USE_CACHEDB
OUTYY(("P(secret-seed:%s)\n", (yyvsp[0].str)));
@@ -7605,11 +7654,11 @@ yyreduce:
free((yyvsp[0].str));
#endif
}
-#line 7609 "util/configparser.c"
+#line 7658 "util/configparser.c"
break;
- case 758: /* cachedb_no_store: VAR_CACHEDB_NO_STORE STRING_ARG */
-#line 3950 "util/configparser.y"
+ case 764: /* cachedb_no_store: VAR_CACHEDB_NO_STORE STRING_ARG */
+#line 3983 "util/configparser.y"
{
#ifdef USE_CACHEDB
OUTYY(("P(cachedb_no_store:%s)\n", (yyvsp[0].str)));
@@ -7621,11 +7670,11 @@ yyreduce:
#endif
free((yyvsp[0].str));
}
-#line 7625 "util/configparser.c"
+#line 7674 "util/configparser.c"
break;
- case 759: /* cachedb_check_when_serve_expired: VAR_CACHEDB_CHECK_WHEN_SERVE_EXPIRED STRING_ARG */
-#line 3963 "util/configparser.y"
+ case 765: /* cachedb_check_when_serve_expired: VAR_CACHEDB_CHECK_WHEN_SERVE_EXPIRED STRING_ARG */
+#line 3996 "util/configparser.y"
{
#ifdef USE_CACHEDB
OUTYY(("P(cachedb_check_when_serve_expired:%s)\n", (yyvsp[0].str)));
@@ -7637,11 +7686,11 @@ yyreduce:
#endif
free((yyvsp[0].str));
}
-#line 7641 "util/configparser.c"
+#line 7690 "util/configparser.c"
break;
- case 760: /* redis_server_host: VAR_CACHEDB_REDISHOST STRING_ARG */
-#line 3976 "util/configparser.y"
+ case 766: /* redis_server_host: VAR_CACHEDB_REDISHOST STRING_ARG */
+#line 4009 "util/configparser.y"
{
#if defined(USE_CACHEDB) && defined(USE_REDIS)
OUTYY(("P(redis_server_host:%s)\n", (yyvsp[0].str)));
@@ -7652,11 +7701,11 @@ yyreduce:
free((yyvsp[0].str));
#endif
}
-#line 7656 "util/configparser.c"
+#line 7705 "util/configparser.c"
break;
- case 761: /* redis_replica_server_host: VAR_CACHEDB_REDISREPLICAHOST STRING_ARG */
-#line 3988 "util/configparser.y"
+ case 767: /* redis_replica_server_host: VAR_CACHEDB_REDISREPLICAHOST STRING_ARG */
+#line 4021 "util/configparser.y"
{
#if defined(USE_CACHEDB) && defined(USE_REDIS)
OUTYY(("P(redis_replica_server_host:%s)\n", (yyvsp[0].str)));
@@ -7667,11 +7716,11 @@ yyreduce:
free((yyvsp[0].str));
#endif
}
-#line 7671 "util/configparser.c"
+#line 7720 "util/configparser.c"
break;
- case 762: /* redis_server_port: VAR_CACHEDB_REDISPORT STRING_ARG */
-#line 4000 "util/configparser.y"
+ case 768: /* redis_server_port: VAR_CACHEDB_REDISPORT STRING_ARG */
+#line 4033 "util/configparser.y"
{
#if defined(USE_CACHEDB) && defined(USE_REDIS)
int port;
@@ -7685,11 +7734,11 @@ yyreduce:
#endif
free((yyvsp[0].str));
}
-#line 7689 "util/configparser.c"
+#line 7738 "util/configparser.c"
break;
- case 763: /* redis_replica_server_port: VAR_CACHEDB_REDISREPLICAPORT STRING_ARG */
-#line 4015 "util/configparser.y"
+ case 769: /* redis_replica_server_port: VAR_CACHEDB_REDISREPLICAPORT STRING_ARG */
+#line 4048 "util/configparser.y"
{
#if defined(USE_CACHEDB) && defined(USE_REDIS)
int port;
@@ -7703,11 +7752,11 @@ yyreduce:
#endif
free((yyvsp[0].str));
}
-#line 7707 "util/configparser.c"
+#line 7756 "util/configparser.c"
break;
- case 764: /* redis_server_path: VAR_CACHEDB_REDISPATH STRING_ARG */
-#line 4030 "util/configparser.y"
+ case 770: /* redis_server_path: VAR_CACHEDB_REDISPATH STRING_ARG */
+#line 4063 "util/configparser.y"
{
#if defined(USE_CACHEDB) && defined(USE_REDIS)
OUTYY(("P(redis_server_path:%s)\n", (yyvsp[0].str)));
@@ -7718,11 +7767,11 @@ yyreduce:
free((yyvsp[0].str));
#endif
}
-#line 7722 "util/configparser.c"
+#line 7771 "util/configparser.c"
break;
- case 765: /* redis_replica_server_path: VAR_CACHEDB_REDISREPLICAPATH STRING_ARG */
-#line 4042 "util/configparser.y"
+ case 771: /* redis_replica_server_path: VAR_CACHEDB_REDISREPLICAPATH STRING_ARG */
+#line 4075 "util/configparser.y"
{
#if defined(USE_CACHEDB) && defined(USE_REDIS)
OUTYY(("P(redis_replica_server_path:%s)\n", (yyvsp[0].str)));
@@ -7733,11 +7782,11 @@ yyreduce:
free((yyvsp[0].str));
#endif
}
-#line 7737 "util/configparser.c"
+#line 7786 "util/configparser.c"
break;
- case 766: /* redis_server_password: VAR_CACHEDB_REDISPASSWORD STRING_ARG */
-#line 4054 "util/configparser.y"
+ case 772: /* redis_server_password: VAR_CACHEDB_REDISPASSWORD STRING_ARG */
+#line 4087 "util/configparser.y"
{
#if defined(USE_CACHEDB) && defined(USE_REDIS)
OUTYY(("P(redis_server_password:%s)\n", (yyvsp[0].str)));
@@ -7748,11 +7797,11 @@ yyreduce:
free((yyvsp[0].str));
#endif
}
-#line 7752 "util/configparser.c"
+#line 7801 "util/configparser.c"
break;
- case 767: /* redis_replica_server_password: VAR_CACHEDB_REDISREPLICAPASSWORD STRING_ARG */
-#line 4066 "util/configparser.y"
+ case 773: /* redis_replica_server_password: VAR_CACHEDB_REDISREPLICAPASSWORD STRING_ARG */
+#line 4099 "util/configparser.y"
{
#if defined(USE_CACHEDB) && defined(USE_REDIS)
OUTYY(("P(redis_replica_server_password:%s)\n", (yyvsp[0].str)));
@@ -7763,11 +7812,11 @@ yyreduce:
free((yyvsp[0].str));
#endif
}
-#line 7767 "util/configparser.c"
+#line 7816 "util/configparser.c"
break;
- case 768: /* redis_timeout: VAR_CACHEDB_REDISTIMEOUT STRING_ARG */
-#line 4078 "util/configparser.y"
+ case 774: /* redis_timeout: VAR_CACHEDB_REDISTIMEOUT STRING_ARG */
+#line 4111 "util/configparser.y"
{
#if defined(USE_CACHEDB) && defined(USE_REDIS)
OUTYY(("P(redis_timeout:%s)\n", (yyvsp[0].str)));
@@ -7779,11 +7828,11 @@ yyreduce:
#endif
free((yyvsp[0].str));
}
-#line 7783 "util/configparser.c"
+#line 7832 "util/configparser.c"
break;
- case 769: /* redis_replica_timeout: VAR_CACHEDB_REDISREPLICATIMEOUT STRING_ARG */
-#line 4091 "util/configparser.y"
+ case 775: /* redis_replica_timeout: VAR_CACHEDB_REDISREPLICATIMEOUT STRING_ARG */
+#line 4124 "util/configparser.y"
{
#if defined(USE_CACHEDB) && defined(USE_REDIS)
OUTYY(("P(redis_replica_timeout:%s)\n", (yyvsp[0].str)));
@@ -7795,11 +7844,11 @@ yyreduce:
#endif
free((yyvsp[0].str));
}
-#line 7799 "util/configparser.c"
+#line 7848 "util/configparser.c"
break;
- case 770: /* redis_command_timeout: VAR_CACHEDB_REDISCOMMANDTIMEOUT STRING_ARG */
-#line 4104 "util/configparser.y"
+ case 776: /* redis_command_timeout: VAR_CACHEDB_REDISCOMMANDTIMEOUT STRING_ARG */
+#line 4137 "util/configparser.y"
{
#if defined(USE_CACHEDB) && defined(USE_REDIS)
OUTYY(("P(redis_command_timeout:%s)\n", (yyvsp[0].str)));
@@ -7811,11 +7860,11 @@ yyreduce:
#endif
free((yyvsp[0].str));
}
-#line 7815 "util/configparser.c"
+#line 7864 "util/configparser.c"
break;
- case 771: /* redis_replica_command_timeout: VAR_CACHEDB_REDISREPLICACOMMANDTIMEOUT STRING_ARG */
-#line 4117 "util/configparser.y"
+ case 777: /* redis_replica_command_timeout: VAR_CACHEDB_REDISREPLICACOMMANDTIMEOUT STRING_ARG */
+#line 4150 "util/configparser.y"
{
#if defined(USE_CACHEDB) && defined(USE_REDIS)
OUTYY(("P(redis_replica_command_timeout:%s)\n", (yyvsp[0].str)));
@@ -7827,11 +7876,11 @@ yyreduce:
#endif
free((yyvsp[0].str));
}
-#line 7831 "util/configparser.c"
+#line 7880 "util/configparser.c"
break;
- case 772: /* redis_connect_timeout: VAR_CACHEDB_REDISCONNECTTIMEOUT STRING_ARG */
-#line 4130 "util/configparser.y"
+ case 778: /* redis_connect_timeout: VAR_CACHEDB_REDISCONNECTTIMEOUT STRING_ARG */
+#line 4163 "util/configparser.y"
{
#if defined(USE_CACHEDB) && defined(USE_REDIS)
OUTYY(("P(redis_connect_timeout:%s)\n", (yyvsp[0].str)));
@@ -7843,11 +7892,11 @@ yyreduce:
#endif
free((yyvsp[0].str));
}
-#line 7847 "util/configparser.c"
+#line 7896 "util/configparser.c"
break;
- case 773: /* redis_replica_connect_timeout: VAR_CACHEDB_REDISREPLICACONNECTTIMEOUT STRING_ARG */
-#line 4143 "util/configparser.y"
+ case 779: /* redis_replica_connect_timeout: VAR_CACHEDB_REDISREPLICACONNECTTIMEOUT STRING_ARG */
+#line 4176 "util/configparser.y"
{
#if defined(USE_CACHEDB) && defined(USE_REDIS)
OUTYY(("P(redis_replica_connect_timeout:%s)\n", (yyvsp[0].str)));
@@ -7859,11 +7908,11 @@ yyreduce:
#endif
free((yyvsp[0].str));
}
-#line 7863 "util/configparser.c"
+#line 7912 "util/configparser.c"
break;
- case 774: /* redis_expire_records: VAR_CACHEDB_REDISEXPIRERECORDS STRING_ARG */
-#line 4156 "util/configparser.y"
+ case 780: /* redis_expire_records: VAR_CACHEDB_REDISEXPIRERECORDS STRING_ARG */
+#line 4189 "util/configparser.y"
{
#if defined(USE_CACHEDB) && defined(USE_REDIS)
OUTYY(("P(redis_expire_records:%s)\n", (yyvsp[0].str)));
@@ -7875,11 +7924,11 @@ yyreduce:
#endif
free((yyvsp[0].str));
}
-#line 7879 "util/configparser.c"
+#line 7928 "util/configparser.c"
break;
- case 775: /* redis_logical_db: VAR_CACHEDB_REDISLOGICALDB STRING_ARG */
-#line 4169 "util/configparser.y"
+ case 781: /* redis_logical_db: VAR_CACHEDB_REDISLOGICALDB STRING_ARG */
+#line 4202 "util/configparser.y"
{
#if defined(USE_CACHEDB) && defined(USE_REDIS)
int db;
@@ -7893,11 +7942,11 @@ yyreduce:
#endif
free((yyvsp[0].str));
}
-#line 7897 "util/configparser.c"
+#line 7946 "util/configparser.c"
break;
- case 776: /* redis_replica_logical_db: VAR_CACHEDB_REDISREPLICALOGICALDB STRING_ARG */
-#line 4184 "util/configparser.y"
+ case 782: /* redis_replica_logical_db: VAR_CACHEDB_REDISREPLICALOGICALDB STRING_ARG */
+#line 4217 "util/configparser.y"
{
#if defined(USE_CACHEDB) && defined(USE_REDIS)
int db;
@@ -7911,25 +7960,25 @@ yyreduce:
#endif
free((yyvsp[0].str));
}
-#line 7915 "util/configparser.c"
+#line 7964 "util/configparser.c"
break;
- case 777: /* server_tcp_connection_limit: VAR_TCP_CONNECTION_LIMIT STRING_ARG STRING_ARG */
-#line 4199 "util/configparser.y"
+ case 783: /* server_tcp_connection_limit: VAR_TCP_CONNECTION_LIMIT STRING_ARG STRING_ARG */
+#line 4232 "util/configparser.y"
{
OUTYY(("P(server_tcp_connection_limit:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
if (atoi((yyvsp[0].str)) < 0)
yyerror("positive number expected");
else {
if(!cfg_str2list_insert(&cfg_parser->cfg->tcp_connection_limits, (yyvsp[-1].str), (yyvsp[0].str)))
- fatal_exit("out of memory adding tcp connection limit");
+ yyerror("out of memory");
}
}
-#line 7929 "util/configparser.c"
+#line 7978 "util/configparser.c"
break;
- case 778: /* server_answer_cookie: VAR_ANSWER_COOKIE STRING_ARG */
-#line 4210 "util/configparser.y"
+ case 784: /* server_answer_cookie: VAR_ANSWER_COOKIE STRING_ARG */
+#line 4243 "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)
@@ -7937,11 +7986,11 @@ yyreduce:
else cfg_parser->cfg->do_answer_cookie = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 7941 "util/configparser.c"
+#line 7990 "util/configparser.c"
break;
- case 779: /* server_cookie_secret: VAR_COOKIE_SECRET STRING_ARG */
-#line 4219 "util/configparser.y"
+ case 785: /* server_cookie_secret: VAR_COOKIE_SECRET STRING_ARG */
+#line 4252 "util/configparser.y"
{
uint8_t secret[32];
size_t secret_len = sizeof(secret);
@@ -7956,33 +8005,33 @@ yyreduce:
}
free((yyvsp[0].str));
}
-#line 7960 "util/configparser.c"
+#line 8009 "util/configparser.c"
break;
- case 780: /* server_cookie_secret_file: VAR_COOKIE_SECRET_FILE STRING_ARG */
-#line 4235 "util/configparser.y"
+ case 786: /* server_cookie_secret_file: VAR_COOKIE_SECRET_FILE STRING_ARG */
+#line 4268 "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 7970 "util/configparser.c"
+#line 8019 "util/configparser.c"
break;
- case 781: /* server_iter_scrub_ns: VAR_ITER_SCRUB_NS STRING_ARG */
-#line 4242 "util/configparser.y"
+ case 787: /* server_iter_scrub_ns: VAR_ITER_SCRUB_NS STRING_ARG */
+#line 4275 "util/configparser.y"
{
OUTYY(("P(server_iter_scrub_ns:%s)\n", (yyvsp[0].str)));
- if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
- yyerror("number expected");
+ if(atoi((yyvsp[0].str)) < 1)
+ yyerror("number >= 1 expected");
else cfg_parser->cfg->iter_scrub_ns = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 7982 "util/configparser.c"
+#line 8031 "util/configparser.c"
break;
- case 782: /* server_iter_scrub_cname: VAR_ITER_SCRUB_CNAME STRING_ARG */
-#line 4251 "util/configparser.y"
+ case 788: /* server_iter_scrub_cname: VAR_ITER_SCRUB_CNAME STRING_ARG */
+#line 4284 "util/configparser.y"
{
OUTYY(("P(server_iter_scrub_cname:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -7990,11 +8039,11 @@ yyreduce:
else cfg_parser->cfg->iter_scrub_cname = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 7994 "util/configparser.c"
+#line 8043 "util/configparser.c"
break;
- case 783: /* server_iter_scrub_rrsig: VAR_ITER_SCRUB_RRSIG STRING_ARG */
-#line 4260 "util/configparser.y"
+ case 789: /* server_iter_scrub_rrsig: VAR_ITER_SCRUB_RRSIG STRING_ARG */
+#line 4293 "util/configparser.y"
{
OUTYY(("P(server_iter_scrub_rrsig:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -8002,11 +8051,11 @@ yyreduce:
else cfg_parser->cfg->iter_scrub_rrsig = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 8006 "util/configparser.c"
+#line 8055 "util/configparser.c"
break;
- case 784: /* server_max_global_quota: VAR_MAX_GLOBAL_QUOTA STRING_ARG */
-#line 4269 "util/configparser.y"
+ case 790: /* server_max_global_quota: VAR_MAX_GLOBAL_QUOTA STRING_ARG */
+#line 4302 "util/configparser.y"
{
OUTYY(("P(server_max_global_quota:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -8014,11 +8063,11 @@ yyreduce:
else cfg_parser->cfg->max_global_quota = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 8018 "util/configparser.c"
+#line 8067 "util/configparser.c"
break;
- case 785: /* server_iter_scrub_promiscuous: VAR_ITER_SCRUB_PROMISCUOUS STRING_ARG */
-#line 4278 "util/configparser.y"
+ case 791: /* server_iter_scrub_promiscuous: VAR_ITER_SCRUB_PROMISCUOUS STRING_ARG */
+#line 4311 "util/configparser.y"
{
OUTYY(("P(server_iter_scrub_promiscuous:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -8027,20 +8076,20 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 8031 "util/configparser.c"
+#line 8080 "util/configparser.c"
break;
- case 786: /* ipsetstart: VAR_IPSET */
-#line 4288 "util/configparser.y"
+ case 792: /* ipsetstart: VAR_IPSET */
+#line 4321 "util/configparser.y"
{
OUTYY(("\nP(ipset:)\n"));
cfg_parser->started_toplevel = 1;
}
-#line 8040 "util/configparser.c"
+#line 8089 "util/configparser.c"
break;
- case 791: /* ipset_name_v4: VAR_IPSET_NAME_V4 STRING_ARG */
-#line 4298 "util/configparser.y"
+ case 797: /* ipset_name_v4: VAR_IPSET_NAME_V4 STRING_ARG */
+#line 4331 "util/configparser.y"
{
#ifdef USE_IPSET
OUTYY(("P(name-v4:%s)\n", (yyvsp[0].str)));
@@ -8054,11 +8103,11 @@ yyreduce:
free((yyvsp[0].str));
#endif
}
-#line 8058 "util/configparser.c"
+#line 8107 "util/configparser.c"
break;
- case 792: /* ipset_name_v6: VAR_IPSET_NAME_V6 STRING_ARG */
-#line 4313 "util/configparser.y"
+ case 798: /* ipset_name_v6: VAR_IPSET_NAME_V6 STRING_ARG */
+#line 4346 "util/configparser.y"
{
#ifdef USE_IPSET
OUTYY(("P(name-v6:%s)\n", (yyvsp[0].str)));
@@ -8072,11 +8121,11 @@ yyreduce:
free((yyvsp[0].str));
#endif
}
-#line 8076 "util/configparser.c"
+#line 8125 "util/configparser.c"
break;
-#line 8080 "util/configparser.c"
+#line 8129 "util/configparser.c"
default: break;
}
@@ -8269,7 +8318,7 @@ yyreturnlab:
return yyresult;
}
-#line 4327 "util/configparser.y"
+#line 4360 "util/configparser.y"
/* parse helper routines could be here */
diff --git a/util/configparser.h b/util/configparser.h
index 26e8baa7a3b3..95e317feb7d1 100644
--- a/util/configparser.h
+++ b/util/configparser.h
@@ -427,11 +427,13 @@ extern int yydebug;
VAR_ITER_SCRUB_NS = 628, /* VAR_ITER_SCRUB_NS */
VAR_ITER_SCRUB_CNAME = 629, /* VAR_ITER_SCRUB_CNAME */
VAR_ITER_SCRUB_RRSIG = 630, /* VAR_ITER_SCRUB_RRSIG */
- VAR_MAX_GLOBAL_QUOTA = 631, /* VAR_MAX_GLOBAL_QUOTA */
- VAR_HARDEN_UNVERIFIED_GLUE = 632, /* VAR_HARDEN_UNVERIFIED_GLUE */
- VAR_LOG_TIME_ISO = 633, /* VAR_LOG_TIME_ISO */
- VAR_ITER_SCRUB_PROMISCUOUS = 634, /* VAR_ITER_SCRUB_PROMISCUOUS */
- VAR_LOG_THREAD_ID = 635 /* VAR_LOG_THREAD_ID */
+ VAR_MAX_TRANSFER_SIZE = 631, /* VAR_MAX_TRANSFER_SIZE */
+ VAR_MAX_TRANSFER_TIME = 632, /* VAR_MAX_TRANSFER_TIME */
+ VAR_MAX_GLOBAL_QUOTA = 633, /* VAR_MAX_GLOBAL_QUOTA */
+ VAR_HARDEN_UNVERIFIED_GLUE = 634, /* VAR_HARDEN_UNVERIFIED_GLUE */
+ VAR_LOG_TIME_ISO = 635, /* VAR_LOG_TIME_ISO */
+ VAR_ITER_SCRUB_PROMISCUOUS = 636, /* VAR_ITER_SCRUB_PROMISCUOUS */
+ VAR_LOG_THREAD_ID = 637 /* VAR_LOG_THREAD_ID */
};
typedef enum yytokentype yytoken_kind_t;
#endif
@@ -813,11 +815,13 @@ extern int yydebug;
#define VAR_ITER_SCRUB_NS 628
#define VAR_ITER_SCRUB_CNAME 629
#define VAR_ITER_SCRUB_RRSIG 630
-#define VAR_MAX_GLOBAL_QUOTA 631
-#define VAR_HARDEN_UNVERIFIED_GLUE 632
-#define VAR_LOG_TIME_ISO 633
-#define VAR_ITER_SCRUB_PROMISCUOUS 634
-#define VAR_LOG_THREAD_ID 635
+#define VAR_MAX_TRANSFER_SIZE 631
+#define VAR_MAX_TRANSFER_TIME 632
+#define VAR_MAX_GLOBAL_QUOTA 633
+#define VAR_HARDEN_UNVERIFIED_GLUE 634
+#define VAR_LOG_TIME_ISO 635
+#define VAR_ITER_SCRUB_PROMISCUOUS 636
+#define VAR_LOG_THREAD_ID 637
/* Value type. */
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
@@ -827,7 +831,7 @@ union YYSTYPE
char* str;
-#line 831 "util/configparser.h"
+#line 835 "util/configparser.h"
};
typedef union YYSTYPE YYSTYPE;
diff --git a/util/configparser.y b/util/configparser.y
index 6ea214ea5587..490bba0ffaa4 100644
--- a/util/configparser.y
+++ b/util/configparser.y
@@ -216,6 +216,7 @@ extern struct config_parser_state* cfg_parser;
%token VAR_LOG_DESTADDR VAR_CACHEDB_CHECK_WHEN_SERVE_EXPIRED
%token VAR_COOKIE_SECRET_FILE VAR_ITER_SCRUB_NS VAR_ITER_SCRUB_CNAME
%token VAR_ITER_SCRUB_RRSIG
+%token VAR_MAX_TRANSFER_SIZE VAR_MAX_TRANSFER_TIME
%token VAR_MAX_GLOBAL_QUOTA VAR_HARDEN_UNVERIFIED_GLUE VAR_LOG_TIME_ISO
%token VAR_ITER_SCRUB_PROMISCUOUS VAR_LOG_THREAD_ID
@@ -459,6 +460,8 @@ authstart: VAR_AUTH_ZONE
s->zonemd_check = 0;
s->zonemd_reject_absence = 0;
s->isrpz = 0;
+ s->max_transfer_size = 0;
+ s->max_transfer_time = 0;
} else {
yyerror("out of memory");
}
@@ -468,7 +471,8 @@ contents_auth: contents_auth content_auth
| ;
content_auth: auth_name | auth_zonefile | auth_master | auth_url |
auth_for_downstream | auth_for_upstream | auth_fallback_enabled |
- auth_allow_notify | auth_zonemd_check | auth_zonemd_reject_absence
+ auth_allow_notify | auth_zonemd_check | auth_zonemd_reject_absence |
+ auth_max_transfer_size | auth_max_transfer_time
;
rpz_tag: VAR_TAGS STRING_ARG
@@ -556,6 +560,8 @@ rpzstart: VAR_RPZ
s->for_upstream = 0;
s->fallback_enabled = 0;
s->isrpz = 1;
+ s->max_transfer_size = 0;
+ s->max_transfer_time = 0;
} else {
yyerror("out of memory");
}
@@ -565,7 +571,8 @@ contents_rpz: contents_rpz content_rpz
| ;
content_rpz: auth_name | auth_zonefile | rpz_tag | auth_master | auth_url |
auth_allow_notify | rpz_action_override | rpz_cname_override |
- rpz_log | rpz_log_name | rpz_signal_nxdomain_ra | auth_for_downstream
+ rpz_log | rpz_log_name | rpz_signal_nxdomain_ra | auth_for_downstream |
+ auth_max_transfer_size | auth_max_transfer_time
;
server_num_threads: VAR_NUM_THREADS STRING_ARG
{
@@ -657,7 +664,7 @@ server_send_client_subnet: VAR_SEND_CLIENT_SUBNET STRING_ARG
#ifdef CLIENT_SUBNET
OUTYY(("P(server_send_client_subnet:%s)\n", $2));
if(!cfg_strlist_insert(&cfg_parser->cfg->client_subnet, $2))
- fatal_exit("out of memory adding client-subnet");
+ yyerror("out of memory");
#else
OUTYY(("P(Compiled without edns subnet option, ignoring)\n"));
free($2);
@@ -670,7 +677,7 @@ server_client_subnet_zone: VAR_CLIENT_SUBNET_ZONE STRING_ARG
OUTYY(("P(server_client_subnet_zone:%s)\n", $2));
if(!cfg_strlist_insert(&cfg_parser->cfg->client_subnet_zone,
$2))
- fatal_exit("out of memory adding client-subnet-zone");
+ yyerror("out of memory");
#else
OUTYY(("P(Compiled without edns subnet option, ignoring)\n"));
free($2);
@@ -2029,7 +2036,7 @@ server_access_control: VAR_ACCESS_CONTROL STRING_ARG STRING_ARG
OUTYY(("P(server_access_control:%s %s)\n", $2, $3));
validate_acl_action($3);
if(!cfg_str2list_insert(&cfg_parser->cfg->acls, $2, $3))
- fatal_exit("out of memory adding acl");
+ yyerror("out of memory");
}
;
server_interface_action: VAR_INTERFACE_ACTION STRING_ARG STRING_ARG
@@ -2038,7 +2045,7 @@ server_interface_action: VAR_INTERFACE_ACTION STRING_ARG STRING_ARG
validate_acl_action($3);
if(!cfg_str2list_insert(
&cfg_parser->cfg->interface_actions, $2, $3))
- fatal_exit("out of memory adding acl");
+ yyerror("out of memory");
}
;
server_module_conf: VAR_MODULE_CONF STRING_ARG
@@ -2388,6 +2395,9 @@ server_local_zone: VAR_LOCAL_ZONE STRING_ARG STRING_ARG
&& strcmp($3, "typetransparent")!=0
&& strcmp($3, "always_transparent")!=0
&& strcmp($3, "block_a")!=0
+ && strcmp($3, "block_aaaa")!=0
+ && strcmp($3, "block_a_wdata")!=0
+ && strcmp($3, "block_aaaa_wdata")!=0
&& strcmp($3, "always_refuse")!=0
&& strcmp($3, "always_nxdomain")!=0
&& strcmp($3, "always_nodata")!=0
@@ -2400,7 +2410,9 @@ server_local_zone: VAR_LOCAL_ZONE STRING_ARG STRING_ARG
yyerror("local-zone type: expected static, deny, "
"refuse, redirect, transparent, "
"typetransparent, inform, inform_deny, "
- "inform_redirect, always_transparent, block_a, "
+ "inform_redirect, always_transparent, "
+ "block_a, block_aaaa, "
+ "block_a_wdata, block_aaaa_wdata, "
"always_refuse, always_nxdomain, "
"always_nodata, always_deny, always_null, "
"noview, nodefault or ipset");
@@ -2409,7 +2421,7 @@ server_local_zone: VAR_LOCAL_ZONE STRING_ARG STRING_ARG
} else if(strcmp($3, "nodefault")==0) {
if(!cfg_strlist_insert(&cfg_parser->cfg->
local_zones_nodefault, $2))
- fatal_exit("out of memory adding local-zone");
+ yyerror("out of memory");
free($3);
#ifdef USE_IPSET
} else if(strcmp($3, "ipset")==0) {
@@ -2417,21 +2429,24 @@ server_local_zone: VAR_LOCAL_ZONE STRING_ARG STRING_ARG
/* Make sure to add the trailing dot.
* These are str compared to domain names. */
if($2[len-1] != '.') {
+ char* prev = $2;
if(!($2 = realloc($2, len+2))) {
- fatal_exit("out of memory adding local-zone");
+ yyerror("out of memory");
+ free(prev);
+ } else {
+ $2[len] = '.';
+ $2[len+1] = 0;
}
- $2[len] = '.';
- $2[len+1] = 0;
}
if(!cfg_strlist_insert(&cfg_parser->cfg->
local_zones_ipset, $2))
- fatal_exit("out of memory adding local-zone");
+ yyerror("out of memory");
free($3);
#endif
} else {
if(!cfg_str2list_insert(&cfg_parser->cfg->local_zones,
$2, $3))
- fatal_exit("out of memory adding local-zone");
+ yyerror("out of memory");
}
}
;
@@ -2439,7 +2454,7 @@ server_local_data: VAR_LOCAL_DATA STRING_ARG
{
OUTYY(("P(server_local_data:%s)\n", $2));
if(!cfg_strlist_insert(&cfg_parser->cfg->local_data, $2))
- fatal_exit("out of memory adding local-data");
+ yyerror("out of memory");
}
;
server_local_data_ptr: VAR_LOCAL_DATA_PTR STRING_ARG
@@ -2451,7 +2466,7 @@ server_local_data_ptr: VAR_LOCAL_DATA_PTR STRING_ARG
if(ptr) {
if(!cfg_strlist_insert(&cfg_parser->cfg->
local_data, ptr))
- fatal_exit("out of memory adding local-data");
+ yyerror("out of memory");
} else {
yyerror("local-data-ptr could not be reversed");
}
@@ -2515,8 +2530,7 @@ server_wait_limit_netblock: VAR_WAIT_LIMIT_NETBLOCK STRING_ARG STRING_ARG
} else {
if(!cfg_str2list_insert(&cfg_parser->cfg->
wait_limit_netblock, $2, $3))
- fatal_exit("out of memory adding "
- "wait-limit-netblock");
+ yyerror("out of memory");
}
}
;
@@ -2530,8 +2544,7 @@ server_wait_limit_cookie_netblock: VAR_WAIT_LIMIT_COOKIE_NETBLOCK STRING_ARG STR
} else {
if(!cfg_str2list_insert(&cfg_parser->cfg->
wait_limit_cookie_netblock, $2, $3))
- fatal_exit("out of memory adding "
- "wait-limit-cookie-netblock");
+ yyerror("out of memory");
}
}
;
@@ -2563,7 +2576,7 @@ server_dns64_ignore_aaaa: VAR_DNS64_IGNORE_AAAA STRING_ARG
OUTYY(("P(dns64_ignore_aaaa:%s)\n", $2));
if(!cfg_strlist_insert(&cfg_parser->cfg->dns64_ignore_aaaa,
$2))
- fatal_exit("out of memory adding dns64-ignore-aaaa");
+ yyerror("out of memory");
}
;
server_nat64_prefix: VAR_NAT64_PREFIX STRING_ARG
@@ -2828,8 +2841,7 @@ server_ratelimit_for_domain: VAR_RATELIMIT_FOR_DOMAIN STRING_ARG STRING_ARG
} else {
if(!cfg_str2list_insert(&cfg_parser->cfg->
ratelimit_for_domain, $2, $3))
- fatal_exit("out of memory adding "
- "ratelimit-for-domain");
+ yyerror("out of memory");
}
}
;
@@ -2843,8 +2855,7 @@ server_ratelimit_below_domain: VAR_RATELIMIT_BELOW_DOMAIN STRING_ARG STRING_ARG
} else {
if(!cfg_str2list_insert(&cfg_parser->cfg->
ratelimit_below_domain, $2, $3))
- fatal_exit("out of memory adding "
- "ratelimit-below-domain");
+ yyerror("out of memory");
}
}
;
@@ -3078,8 +3089,7 @@ server_edns_client_string: VAR_EDNS_CLIENT_STRING STRING_ARG STRING_ARG
OUTYY(("P(server_edns_client_string:%s %s)\n", $2, $3));
if(!cfg_str2list_insert(
&cfg_parser->cfg->edns_client_strings, $2, $3))
- fatal_exit("out of memory adding "
- "edns-client-string");
+ yyerror("out of memory");
}
;
server_edns_client_string_opcode: VAR_EDNS_CLIENT_STRING_OPCODE STRING_ARG
@@ -3341,6 +3351,23 @@ auth_fallback_enabled: VAR_FALLBACK_ENABLED STRING_ARG
free($2);
}
;
+auth_max_transfer_size: VAR_MAX_TRANSFER_SIZE STRING_ARG
+ {
+ OUTYY(("P(max-transfer-size:%s)\n", $2));
+ if(!cfg_parse_memsize($2, &cfg_parser->cfg->auths->max_transfer_size))
+ yyerror("memory size expected");
+ free($2);
+ }
+ ;
+auth_max_transfer_time: VAR_MAX_TRANSFER_TIME STRING_ARG
+ {
+ OUTYY(("P(max-transfer-time:%s)\n", $2));
+ if(atoi($2) == 0 && strcmp($2, "0") != 0)
+ yyerror("number expected");
+ else cfg_parser->cfg->auths->max_transfer_time = atoi($2);
+ free($2);
+ }
+ ;
view_name: VAR_NAME STRING_ARG
{
OUTYY(("P(name:%s)\n", $2));
@@ -3380,7 +3407,7 @@ view_local_zone: VAR_LOCAL_ZONE STRING_ARG STRING_ARG
} else if(strcmp($3, "nodefault")==0) {
if(!cfg_strlist_insert(&cfg_parser->cfg->views->
local_zones_nodefault, $2))
- fatal_exit("out of memory adding local-zone");
+ yyerror("out of memory");
free($3);
#ifdef USE_IPSET
} else if(strcmp($3, "ipset")==0) {
@@ -3388,22 +3415,25 @@ view_local_zone: VAR_LOCAL_ZONE STRING_ARG STRING_ARG
/* Make sure to add the trailing dot.
* These are str compared to domain names. */
if($2[len-1] != '.') {
+ char* prev = $2;
if(!($2 = realloc($2, len+2))) {
- fatal_exit("out of memory adding local-zone");
+ yyerror("out of memory");
+ free(prev);
+ } else {
+ $2[len] = '.';
+ $2[len+1] = 0;
}
- $2[len] = '.';
- $2[len+1] = 0;
}
if(!cfg_strlist_insert(&cfg_parser->cfg->views->
local_zones_ipset, $2))
- fatal_exit("out of memory adding local-zone");
+ yyerror("out of memory");
free($3);
#endif
} else {
if(!cfg_str2list_insert(
&cfg_parser->cfg->views->local_zones,
$2, $3))
- fatal_exit("out of memory adding local-zone");
+ yyerror("out of memory");
}
}
;
@@ -3413,8 +3443,7 @@ view_response_ip: VAR_RESPONSE_IP STRING_ARG STRING_ARG
validate_respip_action($3);
if(!cfg_str2list_insert(
&cfg_parser->cfg->views->respip_actions, $2, $3))
- fatal_exit("out of memory adding per-view "
- "response-ip action");
+ yyerror("out of memory");
}
;
view_response_ip_data: VAR_RESPONSE_IP_DATA STRING_ARG STRING_ARG
@@ -3422,14 +3451,14 @@ view_response_ip_data: VAR_RESPONSE_IP_DATA STRING_ARG STRING_ARG
OUTYY(("P(view_response_ip_data:%s)\n", $2));
if(!cfg_str2list_insert(
&cfg_parser->cfg->views->respip_data, $2, $3))
- fatal_exit("out of memory adding response-ip-data");
+ yyerror("out of memory");
}
;
view_local_data: VAR_LOCAL_DATA STRING_ARG
{
OUTYY(("P(view_local_data:%s)\n", $2));
if(!cfg_strlist_insert(&cfg_parser->cfg->views->local_data, $2)) {
- fatal_exit("out of memory adding local-data");
+ yyerror("out of memory");
}
}
;
@@ -3442,7 +3471,7 @@ view_local_data_ptr: VAR_LOCAL_DATA_PTR STRING_ARG
if(ptr) {
if(!cfg_strlist_insert(&cfg_parser->cfg->views->
local_data, ptr))
- fatal_exit("out of memory adding local-data");
+ yyerror("out of memory");
} else {
yyerror("local-data-ptr could not be reversed");
}
@@ -3782,7 +3811,7 @@ server_response_ip: VAR_RESPONSE_IP STRING_ARG STRING_ARG
validate_respip_action($3);
if(!cfg_str2list_insert(&cfg_parser->cfg->respip_actions,
$2, $3))
- fatal_exit("out of memory adding response-ip");
+ yyerror("out of memory");
}
;
server_response_ip_data: VAR_RESPONSE_IP_DATA STRING_ARG STRING_ARG
@@ -3790,7 +3819,7 @@ server_response_ip_data: VAR_RESPONSE_IP_DATA STRING_ARG STRING_ARG
OUTYY(("P(server_response_ip_data:%s)\n", $2));
if(!cfg_str2list_insert(&cfg_parser->cfg->respip_data,
$2, $3))
- fatal_exit("out of memory adding response-ip-data");
+ yyerror("out of memory");
}
;
dnscstart: VAR_DNSCRYPT
@@ -3838,26 +3867,30 @@ dnsc_dnscrypt_provider: VAR_DNSCRYPT_PROVIDER STRING_ARG
dnsc_dnscrypt_provider_cert: VAR_DNSCRYPT_PROVIDER_CERT STRING_ARG
{
OUTYY(("P(dnsc_dnscrypt_provider_cert:%s)\n", $2));
- if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_provider_cert, $2))
+ if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_provider_cert, $2)) {
log_warn("dnscrypt-provider-cert %s is a duplicate", $2);
- if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert, $2))
- fatal_exit("out of memory adding dnscrypt-provider-cert");
+ free($2);
+ } else if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert, $2)) {
+ yyerror("out of memory");
+ }
}
;
dnsc_dnscrypt_provider_cert_rotated: VAR_DNSCRYPT_PROVIDER_CERT_ROTATED STRING_ARG
{
OUTYY(("P(dnsc_dnscrypt_provider_cert_rotated:%s)\n", $2));
if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert_rotated, $2))
- fatal_exit("out of memory adding dnscrypt-provider-cert-rotated");
+ yyerror("out of memory");
}
;
dnsc_dnscrypt_secret_key: VAR_DNSCRYPT_SECRET_KEY STRING_ARG
{
OUTYY(("P(dnsc_dnscrypt_secret_key:%s)\n", $2));
- if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_secret_key, $2))
+ if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_secret_key, $2)) {
log_warn("dnscrypt-secret-key: %s is a duplicate", $2);
- if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_secret_key, $2))
- fatal_exit("out of memory adding dnscrypt-secret-key");
+ free($2);
+ } else if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_secret_key, $2)) {
+ yyerror("out of memory");
+ }
}
;
dnsc_dnscrypt_shared_secret_cache_size: VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE STRING_ARG
@@ -4202,7 +4235,7 @@ server_tcp_connection_limit: VAR_TCP_CONNECTION_LIMIT STRING_ARG STRING_ARG
yyerror("positive number expected");
else {
if(!cfg_str2list_insert(&cfg_parser->cfg->tcp_connection_limits, $2, $3))
- fatal_exit("out of memory adding tcp connection limit");
+ yyerror("out of memory");
}
}
;
@@ -4241,8 +4274,8 @@ server_cookie_secret_file: VAR_COOKIE_SECRET_FILE STRING_ARG
server_iter_scrub_ns: VAR_ITER_SCRUB_NS STRING_ARG
{
OUTYY(("P(server_iter_scrub_ns:%s)\n", $2));
- if(atoi($2) == 0 && strcmp($2, "0") != 0)
- yyerror("number expected");
+ if(atoi($2) < 1)
+ yyerror("number >= 1 expected");
else cfg_parser->cfg->iter_scrub_ns = atoi($2);
free($2);
}
diff --git a/util/data/msgencode.c b/util/data/msgencode.c
index dd56cc6aad67..8e55e13f1e07 100644
--- a/util/data/msgencode.c
+++ b/util/data/msgencode.c
@@ -634,7 +634,7 @@ insert_query(struct query_info* qinfo, struct compress_tree_node** tree,
size_t qname_len = qinfo->local_alias ?
qinfo->local_alias->rrset->rk.dname_len : qinfo->qname_len;
if(sldns_buffer_remaining(buffer) <
- qinfo->qname_len+sizeof(uint16_t)*2)
+ qname_len+sizeof(uint16_t)*2)
return RETVAL_TRUNC; /* buffer too small */
/* the query is the first name inserted into the tree */
if(!compress_tree_store(qname, dname_count_labels(qname),
@@ -1129,9 +1129,11 @@ extended_error_encode(sldns_buffer* buf, uint16_t rcode,
sldns_buffer_write(buf, &flags, sizeof(uint16_t));
sldns_buffer_write(buf, &flags, sizeof(uint16_t));
if(qinfo) {
- const uint8_t* qname = qinfo->local_alias ?
+ const uint8_t* qname =
+ (qinfo->local_alias && qinfo->local_alias->rrset) ?
qinfo->local_alias->rrset->rk.dname : qinfo->qname;
- size_t qname_len = qinfo->local_alias ?
+ size_t qname_len =
+ (qinfo->local_alias && qinfo->local_alias->rrset) ?
qinfo->local_alias->rrset->rk.dname_len :
qinfo->qname_len;
if(sldns_buffer_current(buf) == qname)
diff --git a/util/data/msgparse.c b/util/data/msgparse.c
index 4be1a72dcb5a..f9beb605ca93 100644
--- a/util/data/msgparse.c
+++ b/util/data/msgparse.c
@@ -1033,8 +1033,11 @@ parse_edns_options_from_query(uint8_t* rdata_ptr, size_t rdata_len,
break;
case LDNS_EDNS_PADDING:
- if(!cfg || !cfg->pad_responses ||
- !c || c->type != comm_tcp ||!c->ssl || padding_seen)
+ if(!cfg || !cfg->pad_responses || !c || padding_seen)
+ break;
+ if(!((c->type == comm_tcp && c->ssl) ||
+ (c->type == comm_http && c->ssl) ||
+ c->type == comm_doq))
break;
padding_seen = 1;
if(!edns_opt_list_append(&edns->opt_list_out,
diff --git a/util/data/msgreply.c b/util/data/msgreply.c
index e0c4768a6127..0beb893c3573 100644
--- a/util/data/msgreply.c
+++ b/util/data/msgreply.c
@@ -483,9 +483,12 @@ parse_copy_decompress_rrset(sldns_buffer* pkt, struct msg_parse* msg,
}
pk->entry.data = (void*)data;
pk->entry.key = (void*)pk;
- pk->entry.hash = pset->hash;
- data->trust = get_rrset_trust(msg, pset);
pk->rk.flags |= (data->ttl == 0) ? PACKED_RRSET_UPSTREAM_0TTL : 0;
+ if( (pk->rk.flags & PACKED_RRSET_UPSTREAM_0TTL) != 0)
+ pk->entry.hash = rrset_key_hash(&pk->rk);
+ else
+ pk->entry.hash = pset->hash;
+ data->trust = get_rrset_trust(msg, pset);
return 1;
}
@@ -1503,8 +1506,12 @@ struct edns_option* edns_opt_list_find(struct edns_option* list, uint16_t code)
int local_alias_shallow_copy_qname(struct local_rrset* local_alias, uint8_t** qname,
size_t* qname_len)
{
- struct ub_packed_rrset_key* rrset = local_alias->rrset;
- struct packed_rrset_data* d = rrset->entry.data;
+ struct ub_packed_rrset_key* rrset;
+ struct packed_rrset_data* d;
+ rrset = local_alias->rrset;
+ if(!rrset) return 0;
+ d = rrset->entry.data;
+ if(!d) return 0;
/* Sanity check: our current implementation only supports
* a single CNAME RRset as a local alias. */
diff --git a/util/data/packed_rrset.c b/util/data/packed_rrset.c
index b695c1b7162d..3b0330c5560b 100644
--- a/util/data/packed_rrset.c
+++ b/util/data/packed_rrset.c
@@ -297,7 +297,7 @@ int packed_rr_to_string(struct ub_packed_rrset_key* rrset, size_t i,
wlen = (size_t)sldns_wire2str_rr_buf(rr, rlen, dest, dest_len);
if(wlen >= dest_len) {
/* the output string was truncated */
- log_info("rrbuf failure %d %s", (int)d->rr_len[i], dest);
+ verbose(VERB_ALGO, "rrbuf failure %d %s", (int)d->rr_len[i], dest);
dest[0] = 0;
return 0;
}
@@ -363,8 +363,11 @@ packed_rrset_copy_region(struct ub_packed_rrset_key* key,
* of the novel ghost attack mitigation i.e., using the
* qstarttime for NS RRSets. In that case make sure that the
* returned TTL is not higher than the original one. */
- log_assert(d->ttl_add <= now ||
- (ntohs(key->rk.type) == LDNS_RR_TYPE_NS));
+ /* For types other than type NS, auth zone and rpz code
+ * can have ttl_add values. Also time could conceivably move
+ * in reverse, due to operator action, and it is prudent
+ * to not assert on that here.
+ * So there is no assertion d->ttl_add <= now || type==NS */
now_control = SERVE_ORIGINAL_TTL ? data->ttl_add
: (d->ttl_add > now ? d->ttl_add : now );
for(i=0; i<d->count + d->rrsig_count; i++) {
diff --git a/util/data/packed_rrset.h b/util/data/packed_rrset.h
index 4e0911ccf0a2..454a5da4761a 100644
--- a/util/data/packed_rrset.h
+++ b/util/data/packed_rrset.h
@@ -72,6 +72,8 @@ typedef uint64_t rrset_id_type;
#define PACKED_RRSET_UNVERIFIED_GLUE 0x10
/** this rrset has a 0TTL from upstream */
#define PACKED_RRSET_UPSTREAM_0TTL 0x20
+/** this rrset has 0TTL from upstream and also has had grace TTL applied */
+#define PACKED_RRSET_0TTL_GRACE 0x40
/** number of rrs and rrsets for integer overflow protection. More than
* this is not really possible (64K packet has much less RRs and RRsets) in
diff --git a/util/fptr_wlist.c b/util/fptr_wlist.c
index 5edd8adf270a..0ff6840ad5e9 100644
--- a/util/fptr_wlist.c
+++ b/util/fptr_wlist.c
@@ -362,7 +362,7 @@ fptr_whitelist_modenv_send_query(struct outbound_entry* (*fptr)(
int nocaps, int check_ratelimit, struct sockaddr_storage* addr,
socklen_t addrlen, uint8_t* zone, size_t zonelen, int tcp_upstream,
int ssl_upstream, char* tls_auth_name, struct module_qstate* q,
- int* was_ratelimited))
+ int* was_ratelimited, int* ratelimit_incremented))
{
if(fptr == &worker_send_query) return 1;
else if(fptr == &libworker_send_query) return 1;
diff --git a/util/fptr_wlist.h b/util/fptr_wlist.h
index a1a75625d590..f76d2c3a30e9 100644
--- a/util/fptr_wlist.h
+++ b/util/fptr_wlist.h
@@ -214,7 +214,7 @@ int fptr_whitelist_modenv_send_query(struct outbound_entry* (*fptr)(
int nocaps, int check_ratelimit, struct sockaddr_storage* addr,
socklen_t addrlen, uint8_t* zone, size_t zonelen, int tcp_upstream,
int ssl_upstream, char* tls_auth_name, struct module_qstate* q,
- int* was_ratelimited));
+ int* was_ratelimited, int* ratelimit_incremented));
/**
* Check function pointer whitelist for module_env detach_subs callback values.
diff --git a/util/iana_ports.inc b/util/iana_ports.inc
index 191d0f557b9e..0d61e948e2c6 100644
--- a/util/iana_ports.inc
+++ b/util/iana_ports.inc
@@ -3866,6 +3866,7 @@
4456,
4457,
4458,
+4480,
4484,
4486,
4488,
@@ -4506,6 +4507,7 @@
6581,
6582,
6583,
+6610,
6619,
6620,
6621,
@@ -4608,6 +4610,7 @@
7101,
7107,
7121,
+7123,
7128,
7129,
7161,
@@ -5393,6 +5396,7 @@
30004,
30260,
30832,
+30939,
30999,
31016,
31029,
diff --git a/util/module.h b/util/module.h
index 75c3675e1be2..9192c9af5f78 100644
--- a/util/module.h
+++ b/util/module.h
@@ -375,6 +375,8 @@ struct module_env {
* @param q: which query state to reactivate upon return.
* @param was_ratelimited: it will signal back if the query failed to pass the
* ratelimit check.
+ * @param ratelimit_incremented: set to true if the ratelimit counter
+ * was increased.
* @return: false on failure (memory or socket related). no query was
* sent. Or returns an outbound entry with qsent and qstate set.
* This outbound_entry will be used on later module invocations
@@ -385,7 +387,8 @@ struct module_env {
int check_ratelimit,
struct sockaddr_storage* addr, socklen_t addrlen,
uint8_t* zone, size_t zonelen, int tcp_upstream, int ssl_upstream,
- char* tls_auth_name, struct module_qstate* q, int* was_ratelimited);
+ char* tls_auth_name, struct module_qstate* q, int* was_ratelimited,
+ int* ratelimit_incremented);
/**
* Detach-subqueries.
@@ -698,10 +701,16 @@ struct module_qstate {
time_t qstarttime;
/** whether a message from cachedb will be used for the reply */
int is_cachedb_answer;
+ /** whether the reply is subnet specific */
+ int is_subnet_answer;
/** if the response as error is from error_response_cache, and is
* suitable for caching (briefly) the error response. Set by the
* iterator when no_cache_store is enabled, and there is an error. */
int error_response_cache;
+ /** if the iterator sees that the forward/stub has no_cache set.
+ * to signal to calling modules that their setting of no_cache for
+ * other reasons, has to take into account the fwd/stub no_cache. */
+ int fwd_stub_no_cache;
/**
* Attributes of clients that share the qstate that may affect IP-based
diff --git a/util/net_help.c b/util/net_help.c
index a0e23f5cd2de..2bf4f47edff7 100644
--- a/util/net_help.c
+++ b/util/net_help.c
@@ -242,7 +242,7 @@ int
extstrtoaddr(const char* str, struct sockaddr_storage* addr,
socklen_t* addrlen, int port)
{
- char* s;
+ const char* s;
if((s=strchr(str, '@'))) {
char buf[MAX_ADDR_STRLEN];
if(s-str >= MAX_ADDR_STRLEN) {
@@ -268,7 +268,7 @@ ipstrtoaddr(const char* ip, int port, struct sockaddr_storage* addr,
p = (uint16_t) port;
if(str_is_ip6(ip)) {
char buf[MAX_ADDR_STRLEN];
- char* s;
+ const char* s;
struct sockaddr_in6* sa = (struct sockaddr_in6*)addr;
*addrlen = (socklen_t)sizeof(struct sockaddr_in6);
memset(sa, 0, *addrlen);
@@ -304,8 +304,9 @@ ipstrtoaddr(const char* ip, int port, struct sockaddr_storage* addr,
int netblockstrtoaddr(const char* str, int port, struct sockaddr_storage* addr,
socklen_t* addrlen, int* net)
{
+ const char* s;
char buf[64];
- char* s;
+ char* b = NULL;
*net = (str_is_ip6(str)?128:32);
if((s=strchr(str, '/'))) {
if(atoi(s+1) > *net) {
@@ -323,15 +324,15 @@ int netblockstrtoaddr(const char* str, int port, struct sockaddr_storage* addr,
return 0;
}
strlcpy(buf, str, sizeof(buf));
- s = strchr(buf, '/');
- if(s) *s = 0;
- s = buf;
+ b = strchr(buf, '/');
+ if(b) *b = 0;
+ b = buf;
}
- if(!ipstrtoaddr(s?s:str, port, addr, addrlen)) {
+ if(!ipstrtoaddr(b?b:str, port, addr, addrlen)) {
log_err("cannot parse ip address: '%s'", str);
return 0;
}
- if(s) {
+ if(b) {
addr_mask(addr, *addrlen, *net);
}
return 1;
@@ -1445,6 +1446,8 @@ void* listen_sslctx_create(const char* key, const char* pem,
SSL_CTX_set_alpn_select_cb(ctx, doh_alpn_select_cb, NULL);
#endif
}
+#else /* HAVE_SSL_CTX_SET_ALPN_SELECT_CB */
+ (void)is_dot; (void)is_doh;
#endif /* HAVE_SSL_CTX_SET_ALPN_SELECT_CB */
return ctx;
#else
@@ -1704,6 +1707,10 @@ int check_auth_name_for_ssl(char* auth_name)
/** set the authname on an SSL structure, SSL* ssl */
int set_auth_name_on_ssl(void* ssl, char* auth_name, int use_sni)
{
+#ifdef HAVE_SSL_SET1_DNSNAME
+ struct sockaddr_storage tmpaddr;
+ socklen_t tmpaddrlen = (socklen_t)sizeof(tmpaddr);
+#endif
if(!auth_name) return 1;
#ifdef HAVE_SSL
if(use_sni) {
@@ -1713,7 +1720,20 @@ int set_auth_name_on_ssl(void* ssl, char* auth_name, int use_sni)
(void)ssl;
(void)use_sni;
#endif
-#ifdef HAVE_SSL_SET1_HOST
+#ifdef HAVE_SSL_SET1_DNSNAME
+ SSL_set_verify(ssl, SSL_VERIFY_PEER, NULL);
+ if(ipstrtoaddr(auth_name, UNBOUND_DNS_PORT, &tmpaddr, &tmpaddrlen)) {
+ if(!SSL_set1_ipaddr(ssl, auth_name)) {
+ log_err("SSL_set1_ipaddr failed");
+ return 0;
+ }
+ } else {
+ if(!SSL_set1_dnsname(ssl, auth_name)) {
+ log_err("SSL_set1_dnsname failed");
+ return 0;
+ }
+ }
+#elif defined(HAVE_SSL_SET1_HOST)
SSL_set_verify(ssl, SSL_VERIFY_PEER, NULL);
/* setting the hostname makes openssl verify the
* host name in the x509 certificate in the
diff --git a/util/netevent.c b/util/netevent.c
index b7092b88a876..432fead1b19d 100644
--- a/util/netevent.c
+++ b/util/netevent.c
@@ -951,6 +951,10 @@ static int consume_pp2_header(struct sldns_buffer* buf, struct comm_reply* rep,
{
struct sockaddr_in* addr =
(struct sockaddr_in*)&rep->client_addr;
+ if(ntohs(header->len) < PP2_HEADER_LEN_INET) {
+ verbose(VERB_OPS, "proxy_protocol: header too short for IPv4 address");
+ return 0;
+ }
addr->sin_family = AF_INET;
addr->sin_addr.s_addr = header->addr.addr4.src_addr;
addr->sin_port = header->addr.addr4.src_port;
@@ -963,6 +967,10 @@ static int consume_pp2_header(struct sldns_buffer* buf, struct comm_reply* rep,
{
struct sockaddr_in6* addr =
(struct sockaddr_in6*)&rep->client_addr;
+ if(ntohs(header->len) < PP2_HEADER_LEN_INET6) {
+ verbose(VERB_OPS, "proxy_protocol: header too short for IPv6 address");
+ return 0;
+ }
memset(addr, 0, sizeof(*addr));
addr->sin6_family = AF_INET6;
memcpy(&addr->sin6_addr,
@@ -2932,6 +2940,8 @@ setup_tcp_handler(struct comm_point* c, int fd, int cur, int max)
c->tcp_is_reading = 1;
c->tcp_byte_count = 0;
c->tcp_keepalive = 0;
+ /* reset to configured value before applying load-based reduction */
+ c->tcp_timeout_msec = c->tcp_parent->tcp_timeout_msec;
/* if more than half the tcp handlers are in use, use a shorter
* timeout for this TCP connection, we need to make space for
* other connections to be able to get attention */
@@ -2967,6 +2977,62 @@ void comm_base_handle_slow_accept(int ATTR_UNUSED(fd),
}
}
+/** out of resources in the accept path: pause all listening for
+ * NETEVENT_SLOW_ACCEPT_TIME and re-arm via comm_base_handle_slow_accept.
+ *
+ * If the routine fails, the socket is accepted and then closed, draining it
+ * from the waiting list of connections to be accepted.
+ * @param c: the comm point that is a listening socket.
+ * @param msec: if 0: uses the slow accept time. Otherwise, sets the time
+ * to wait.
+ */
+static void
+comm_point_slow_accept(struct comm_point* c, int msec)
+{
+ struct comm_base* b = c->ev->base;
+ struct timeval tv;
+ struct ub_event* slowev;
+ if(!b->stop_accept)
+ return;
+ if(b->eb->slow_accept_enabled)
+ return;
+ /* Allocate the event */
+ slowev = ub_event_new(b->eb->base, -1, UB_EV_TIMEOUT,
+ comm_base_handle_slow_accept, b);
+ if(!slowev) {
+ /* The slow accept was not enabled yet, to handle
+ * the allocation failure, instead drain the incoming
+ * connection. */
+ int new_fd = accept(c->fd, NULL, NULL);
+ if(new_fd != -1) {
+ verbose(VERB_ALGO, "slow accept: event_new failed, "
+ "drop connection");
+ sock_close(new_fd);
+ }
+ return;
+ }
+ ub_comm_base_now(b);
+ if(b->eb->last_slow_log+SLOW_LOG_TIME <= b->eb->secs) {
+ b->eb->last_slow_log = b->eb->secs;
+ verbose(VERB_OPS, "out of resources on accept, "
+ "slow down accept for %d msec",
+ NETEVENT_SLOW_ACCEPT_TIME);
+ }
+ b->eb->slow_accept_enabled = 1;
+ fptr_ok(fptr_whitelist_stop_accept(b->stop_accept));
+ (*b->stop_accept)(b->cb_arg);
+ /* set timeout, no mallocs */
+ if(msec == 0)
+ msec = NETEVENT_SLOW_ACCEPT_TIME;
+ tv.tv_sec = msec/1000;
+ tv.tv_usec = (msec%1000)*1000;
+ b->eb->slow_accept = slowev;
+ if(ub_event_add(b->eb->slow_accept, &tv) != 0) {
+ /* we do not want to log here,
+ * error: "event_add failed." */
+ }
+}
+
int comm_point_perform_accept(struct comm_point* c,
struct sockaddr_storage* addr, socklen_t* addrlen)
{
@@ -3000,6 +3066,14 @@ int comm_point_perform_accept(struct comm_point* c,
if(c->ev->base->stop_accept) {
struct comm_base* b = c->ev->base;
struct timeval tv;
+ struct ub_event* slowev = ub_event_new(
+ b->eb->base, -1, UB_EV_TIMEOUT,
+ comm_base_handle_slow_accept, b);
+ if(!slowev) {
+ verbose(VERB_ALGO, "slow accept: "
+ "event_new failed");
+ return -1;
+ }
verbose(VERB_ALGO, "out of file descriptors: "
"slow accept");
ub_comm_base_now(b);
@@ -3019,15 +3093,8 @@ int comm_point_perform_accept(struct comm_point* c,
/* set timeout, no mallocs */
tv.tv_sec = NETEVENT_SLOW_ACCEPT_TIME/1000;
tv.tv_usec = (NETEVENT_SLOW_ACCEPT_TIME%1000)*1000;
- b->eb->slow_accept = ub_event_new(b->eb->base,
- -1, UB_EV_TIMEOUT,
- comm_base_handle_slow_accept, b);
- if(b->eb->slow_accept == NULL) {
- /* we do not want to log here, because
- * that would spam the logfiles.
- * error: "event_base_set failed." */
- }
- else if(ub_event_add(b->eb->slow_accept, &tv)
+ b->eb->slow_accept = slowev;
+ if(ub_event_add(b->eb->slow_accept, &tv)
!= 0) {
/* we do not want to log here,
* error: "event_add failed." */
@@ -3166,7 +3233,7 @@ static void http2_stream_delete(struct http2_session* h2_session,
{
if(h2_stream->mesh_state) {
mesh_state_remove_reply(h2_stream->mesh, h2_stream->mesh_state,
- h2_session->c, NULL);
+ h2_session->c, h2_stream, NULL);
h2_stream->mesh_state = NULL;
}
http2_req_stream_clear(h2_stream);
@@ -3208,6 +3275,13 @@ comm_point_tcp_accept_callback(int fd, short event, void* arg)
/* find free tcp handler. */
if(!c->tcp_free) {
log_warn("accepted too many tcp, connections full");
+ /* Wait for a short moment (say 50msec) so that other
+ * TCP connections can complete. Or timeout, at the busy
+ * timeout of about 200msec. That stops this routine from
+ * spinning endlessly, and gives time to complete the other
+ * requests. But it is not as slow as the 2000msec wait
+ * time for when the kernel is out of buffers. */
+ comm_point_slow_accept(c, NETEVENT_SLOW_ACCEPT_QUEUE_TIME);
return;
}
/* accept incoming connection. */
@@ -3229,6 +3303,7 @@ comm_point_tcp_accept_callback(int fd, short event, void* arg)
if(!c_hdl->h2_session ||
!http2_session_server_create(c_hdl->h2_session)) {
log_warn("failed to create nghttp2");
+ comm_point_slow_accept(c, 0);
return;
}
if(!c_hdl->h2_session ||
@@ -3236,6 +3311,7 @@ comm_point_tcp_accept_callback(int fd, short event, void* arg)
log_warn("failed to submit http2 settings");
if(c_hdl->h2_session)
http2_session_server_delete(c_hdl->h2_session);
+ comm_point_slow_accept(c, 0);
return;
}
if(!c->ssl) {
@@ -3252,11 +3328,12 @@ comm_point_tcp_accept_callback(int fd, short event, void* arg)
comm_point_tcp_handle_callback, c_hdl);
}
if(!c_hdl->ev->ev) {
- log_warn("could not ub_event_new, dropped tcp");
+ log_warn("could not ub_event_new, for new tcp");
#ifdef HAVE_NGHTTP2
if(c_hdl->type == comm_http && c_hdl->h2_session)
http2_session_server_delete(c_hdl->h2_session);
#endif
+ comm_point_slow_accept(c, 0);
return;
}
log_assert(fd != -1);
@@ -3270,6 +3347,10 @@ comm_point_tcp_accept_callback(int fd, short event, void* arg)
#endif
return;
}
+ /* move per-netblock TCP-connection-limit handle to the handler so that
+ * comm_point_close() on the handler decrements the count on close */
+ c_hdl->tcl_addr = c->tcl_addr;
+ c->tcl_addr = NULL;
/* Copy remote_address to client_address.
* Simplest way/time for streams to do that. */
c_hdl->repinfo.client_addrlen = c_hdl->repinfo.remote_addrlen;
@@ -5014,6 +5095,14 @@ http_chunked_segment(struct comm_point* c)
c->http_stored = 0;
sldns_buffer_skip(c->buffer, (ssize_t)c->tcp_byte_count);
sldns_buffer_clear(c->http_temp);
+ if(sldns_buffer_remaining(c->buffer) >
+ sldns_buffer_capacity(c->http_temp)) {
+ verbose(VERB_OPS, "http chunked: surplus %d exceeds "
+ "temp buffer %d", (int)sldns_buffer_remaining(
+ c->buffer), (int)sldns_buffer_capacity(
+ c->http_temp));
+ return 0;
+ }
sldns_buffer_write(c->http_temp,
sldns_buffer_current(c->buffer),
sldns_buffer_remaining(c->buffer));
@@ -5344,6 +5433,13 @@ comm_point_http_handle_read(int fd, struct comm_point* c)
if(c->http_in_headers || c->http_in_chunk_headers) {
/* if header is done, process the header */
if(!http_header_done(c->buffer)) {
+ if(sldns_buffer_limit(c->buffer) ==
+ sldns_buffer_capacity(c->buffer)) {
+ verbose(VERB_OPS, "http header line "
+ "exceeds %d bytes, transfer "
+ "failed", (int)sldns_buffer_capacity(c->buffer));
+ return 0;
+ }
/* copy remaining data to front of buffer
* and set rest for writing into it */
http_moveover_buffer(c->buffer);
@@ -6584,7 +6680,10 @@ comm_point_close(struct comm_point* c)
c->event_added = 0;
}
}
- tcl_close_connection(c->tcl_addr);
+ if(c->tcl_addr) {
+ tcl_close_connection(c->tcl_addr);
+ c->tcl_addr = NULL;
+ }
if(c->tcp_req_info)
tcp_req_info_clear(c->tcp_req_info);
if(c->h2_session)
diff --git a/util/netevent.h b/util/netevent.h
index aee8a653988c..7d64fac5b540 100644
--- a/util/netevent.h
+++ b/util/netevent.h
@@ -111,6 +111,8 @@ typedef int comm_point_callback_type(struct comm_point*, void*, int,
/** timeout to slow accept calls when not possible, in msec. */
#define NETEVENT_SLOW_ACCEPT_TIME 2000
+/** timeout to slow accept calls when tcp queue is full, in msec. */
+#define NETEVENT_SLOW_ACCEPT_QUEUE_TIME 50
/** timeout to slow down log print, so it does not spam the logs, in sec */
#define SLOW_LOG_TIME 10
/** for doq, the maximum dcid length, in ngtcp2 it is 20. */
diff --git a/util/proxy_protocol.c b/util/proxy_protocol.c
index 235538b62515..689745ee9174 100644
--- a/util/proxy_protocol.c
+++ b/util/proxy_protocol.c
@@ -185,14 +185,23 @@ pp2_read_header(uint8_t* buf, size_t buflen)
(header->ver_cmd & 0xF) != PP2_CMD_PROXY) {
return PP_PARSE_UNKNOWN_CMD;
}
- /* Check for supported family and protocol */
- if(header->fam_prot != PP2_UNSPEC_UNSPEC &&
- header->fam_prot != PP2_INET_STREAM &&
- header->fam_prot != PP2_INET_DGRAM &&
- header->fam_prot != PP2_INET6_STREAM &&
- header->fam_prot != PP2_INET6_DGRAM &&
- header->fam_prot != PP2_UNIX_STREAM &&
- header->fam_prot != PP2_UNIX_DGRAM) {
+ /* Check for supported family and protocol, and that len covers
+ * the per-family address block (proxy-protocol.txt s2.2). */
+ switch(header->fam_prot) {
+ case PP2_UNSPEC_UNSPEC:
+ break;
+ case PP2_INET_STREAM:
+ case PP2_INET_DGRAM:
+ if(ntohs(header->len) < PP2_HEADER_LEN_INET)
+ return PP_PARSE_SIZE;
+ break;
+ case PP2_INET6_STREAM:
+ case PP2_INET6_DGRAM:
+ if(ntohs(header->len) < PP2_HEADER_LEN_INET6)
+ return PP_PARSE_SIZE;
+ break;
+ default:
+ /* PP2_UNIX_STREAM, PP2_UNIX_DGRAM, others. */
return PP_PARSE_UNKNOWN_FAM_PROT;
}
/* We have a correct header */
diff --git a/util/proxy_protocol.h b/util/proxy_protocol.h
index ca81065bf49a..52a0128156eb 100644
--- a/util/proxy_protocol.h
+++ b/util/proxy_protocol.h
@@ -54,6 +54,15 @@
/** PROXYv2 version (protocol value) */
#define PP2_VERSION 0x2
+/** PROXYv2 minimum header.len value for TCP/UDP over IPv4 */
+#define PP2_HEADER_LEN_INET 12
+
+/** PROXYv2 minimum header.len value for TCP/UDP over IPv6 */
+#define PP2_HEADER_LEN_INET6 36
+
+/** PROXYv2 minimum header.len value for TCP/UDP over AF_UNIX */
+#define PP2_HEADER_LEN_UNIX 216
+
/**
* PROXYv2 command (protocol value).
*/
diff --git a/util/shm_side/shm_main.c b/util/shm_side/shm_main.c
index ec0231b121b7..736f14ca55f9 100644
--- a/util/shm_side/shm_main.c
+++ b/util/shm_side/shm_main.c
@@ -351,6 +351,8 @@ void shm_main_run(struct worker *worker)
int offset;
double total_mesh_time_median;
struct shm_main_info* shm_info = worker->daemon->shm_info;
+ if(!shm_info)
+ return;
#ifndef S_SPLINT_S
verbose(VERB_DETAIL, "SHM run - worker [%d] - daemon [%p] - timenow(%u) - timeboot(%u)",
diff --git a/util/tube.c b/util/tube.c
index 96187e134e2f..135ef130a06f 100644
--- a/util/tube.c
+++ b/util/tube.c
@@ -145,6 +145,20 @@ void tube_remove_bg_write(struct tube* tube)
}
}
+/** Drain the pipe of bytes. */
+static void
+fd_drain(int fd, uint32_t len)
+{
+ uint8_t discard[256];
+ uint32_t remaining = len;
+ while(remaining > 0) {
+ ssize_t n = read(fd, discard,
+ remaining < sizeof(discard) ? remaining : sizeof(discard));
+ if(n <= 0) break;
+ remaining -= (uint32_t)n;
+ }
+}
+
int
tube_handle_listen(struct comm_point* c, void* arg, int error,
struct comm_reply* ATTR_UNUSED(reply_info))
@@ -184,6 +198,9 @@ tube_handle_listen(struct comm_point* c, void* arg, int error,
tube->cmd_msg = (uint8_t*)calloc(1, tube->cmd_len);
if(!tube->cmd_msg) {
log_err("malloc failure");
+ /* Drain the remaining bytes, since they belong to this
+ * message. The next message starts after it. */
+ fd_drain(c->fd, tube->cmd_len);
tube->cmd_read = 0;
return 0;
}
@@ -374,6 +391,9 @@ int tube_read_msg(struct tube* tube, uint8_t** buf, uint32_t* len,
*buf = (uint8_t*)malloc(*len);
if(!*buf) {
log_err("tube read out of memory");
+ /* Drain the remaining bytes, since they belong to this
+ * message. The next message starts after it. */
+ fd_drain(fd, *len);
(void)fd_set_nonblock(fd);
return 0;
}
diff --git a/validator/autotrust.c b/validator/autotrust.c
index a0f61885f5dd..fc7897b712e9 100644
--- a/validator/autotrust.c
+++ b/validator/autotrust.c
@@ -160,10 +160,12 @@ verbose_key(struct autr_ta* ta, enum verbosity_value level,
* Parse comments
* @param str: to parse
* @param ta: trust key autotrust metadata
+ * @param header_seen: if an autotrust file header was seen.
+ * Without such a header it is a list of resource records.
* @return false on failure.
*/
static int
-parse_comments(char* str, struct autr_ta* ta)
+parse_comments(char* str, struct autr_ta* ta, int header_seen)
{
int len = (int)strlen(str), pos = 0, timestamp = 0;
char* comment = (char*) malloc(sizeof(char)*len+1);
@@ -196,10 +198,18 @@ parse_comments(char* str, struct autr_ta* ta)
free(comment);
return 0;
}
- if (pos <= 0)
- ta->s = AUTR_STATE_VALID;
- else
- {
+ if (pos <= 0) {
+ if(header_seen) {
+ /* There was an autotrust trust anchor file header,
+ * with a ;; id=.. line, so the entries
+ * have to have ;;state= annotations. */
+ log_err("trust anchor in state file has no ;;state= "
+ "annotation, ignoring");
+ free(comment);
+ return 0;
+ }
+ ta->s = AUTR_STATE_VALID;
+ } else {
int s = (int) comments[pos] - '0';
switch(s)
{
@@ -391,6 +401,15 @@ autr_rrset_delete(struct ub_packed_rrset_key* r)
}
}
+/** delete autotrust key data */
+static void
+autr_ta_delete(struct autr_ta* ta)
+{
+ if(!ta) return;
+ free(ta->rr);
+ free(ta);
+}
+
void autr_point_delete(struct trust_anchor* tp)
{
if(!tp)
@@ -404,8 +423,7 @@ void autr_point_delete(struct trust_anchor* tp)
struct autr_ta* p = tp->autr->keys, *np;
while(p) {
np = p->next;
- free(p->rr);
- free(p);
+ autr_ta_delete(p);
p = np;
}
free(tp->autr->file);
@@ -449,8 +467,7 @@ add_trustanchor_frm_rr(struct val_anchors* anchors, uint8_t* rr, size_t rr_len,
return NULL;
*tp = find_add_tp(anchors, rr, rr_len, dname_len);
if(!*tp) {
- free(ta->rr);
- free(ta);
+ autr_ta_delete(ta);
return NULL;
}
/* add ta to tp */
@@ -523,12 +540,14 @@ add_trustanchor_frm_str(struct val_anchors* anchors, char* str,
* @param prev: passed to ldns.
* @param prev_len: length of prev
* @param skip: if true, the result is NULL, but not an error, skip it.
+ * @param header_seen: if an autotrust file header was seen.
+ * Without such a header it is a list of resource records.
* @return false on failure, otherwise the tp read.
*/
static struct trust_anchor*
load_trustanchor(struct val_anchors* anchors, char* str, const char* fname,
uint8_t* origin, size_t origin_len, uint8_t** prev, size_t* prev_len,
- int* skip)
+ int* skip, int header_seen)
{
struct autr_ta* ta = NULL;
struct trust_anchor* tp = NULL;
@@ -538,7 +557,11 @@ load_trustanchor(struct val_anchors* anchors, char* str, const char* fname,
if(!ta)
return NULL;
lock_basic_lock(&tp->lock);
- if(!parse_comments(str, ta)) {
+ if(!parse_comments(str, ta, header_seen)) {
+ /* ta was already linked into the list of keys, unlink it */
+ log_assert(tp->autr->keys == ta);
+ tp->autr->keys = ta->next;
+ autr_ta_delete(ta);
lock_basic_unlock(&tp->lock);
return NULL;
}
@@ -846,19 +869,32 @@ parse_id(struct val_anchors* anchors, char* line)
* @param anchors: the anchor is added to this, if "id:" is seen.
* @param anchor: the anchor as result value or previously returned anchor
* value to read the variable lines into.
+ * @param header_seen: if a header ';;id: example.com.' was seen.
+ * @param nm: file name.
* @return: 0 no match, -1 failed syntax error, +1 success line read.
* +2 revoked trust anchor file.
*/
static int
parse_var_line(char* line, struct val_anchors* anchors,
- struct trust_anchor** anchor)
+ struct trust_anchor** anchor, int* header_seen, const char* nm)
{
struct trust_anchor* tp = *anchor;
int r = 0;
if(strncmp(line, ";;id: ", 6) == 0) {
+ *header_seen = 1;
*anchor = parse_id(anchors, line+6);
if(!*anchor) return -1;
- else return 1;
+ lock_basic_lock(&(*anchor)->lock);
+ if(*anchor && !(*anchor)->autr->file) {
+ (*anchor)->autr->file = strdup(nm);
+ if(!(*anchor)->autr->file) {
+ lock_basic_unlock(&(*anchor)->lock);
+ log_err("malloc failure");
+ return -1;
+ }
+ }
+ lock_basic_unlock(&(*anchor)->lock);
+ if(*anchor) return 1;
} else if(strncmp(line, ";;REVOKED", 9) == 0) {
if(tp) {
log_err("REVOKED statement must be at start of file");
@@ -992,14 +1028,15 @@ int autr_read_file(struct val_anchors* anchors, const char* nm)
FILE* fd;
/* keep track of line numbers */
int line_nr = 0;
- /* single line */
- char line[10240];
+ /* single line, enough space for large DNSKEY, 64K, in hex and dname */
+ char line[10240+65536*2];
/* trust point being read */
struct trust_anchor *tp = NULL, *tp2;
int r;
/* for $ORIGIN parsing */
uint8_t *origin=NULL, *prev=NULL;
size_t origin_len=0, prev_len=0;
+ int header_seen = 0;
if (!(fd = fopen(nm, "r"))) {
log_err("unable to open %s for reading: %s",
@@ -1008,7 +1045,7 @@ int autr_read_file(struct val_anchors* anchors, const char* nm)
}
verbose(VERB_ALGO, "reading autotrust anchor file %s", nm);
while ( (r=read_multiline(line, sizeof(line), fd, &line_nr)) != 0) {
- if(r == -1 || (r = parse_var_line(line, anchors, &tp)) == -1) {
+ if(r == -1 || (r = parse_var_line(line, anchors, &tp, &header_seen, nm)) == -1) {
log_err("could not parse auto-trust-anchor-file "
"%s line %d", nm, line_nr);
fclose(fd);
@@ -1030,7 +1067,7 @@ int autr_read_file(struct val_anchors* anchors, const char* nm)
continue;
r = 0;
if(!(tp2=load_trustanchor(anchors, line, nm, origin,
- origin_len, &prev, &prev_len, &r))) {
+ origin_len, &prev, &prev_len, &r, header_seen))) {
if(!r) log_err("failed to load trust anchor from %s "
"at line %i, skipping", nm, line_nr);
/* try to do the rest */
@@ -1194,6 +1231,11 @@ void autr_write_file(struct module_env* env, struct trust_anchor* tp)
#endif
char tempf[2048];
log_assert(tp->autr);
+ if(!fname) {
+ log_err("autotrust: trust point has no backing file, "
+ "skipping write");
+ return;
+ }
if(!env) {
log_err("autr_write_file: Module environment is NULL.");
return;
@@ -1992,8 +2034,7 @@ autr_cleanup_keys(struct trust_anchor* tp)
!= LDNS_RR_TYPE_DNSKEY) {
struct autr_ta* np = p->next;
/* remove */
- free(p->rr);
- free(p);
+ autr_ta_delete(p);
/* snip and go to next item */
*prevp = np;
p = np;
@@ -2318,7 +2359,7 @@ autr_debug_print_tp(struct trust_anchor* tp)
if(tp->dnskey_rrset) {
log_packed_rrset(NO_VERBOSE, "DNSKEY:", tp->dnskey_rrset);
}
- log_info("file %s", tp->autr->file);
+ log_info("file %s", (tp->autr->file?tp->autr->file:"null"));
(void)autr_ctime_r(&tp->autr->last_queried, buf);
if(buf[0]) buf[strlen(buf)-1]=0; /* remove newline */
log_info("last_queried: %u %s", (unsigned)tp->autr->last_queried, buf);
@@ -2416,7 +2457,7 @@ probe_anchor(struct module_env* env, struct trust_anchor* tp)
qinfo.qclass);
if(!mesh_new_callback(env->mesh, &qinfo, qflags, &edns, buf, 0,
- &probe_answer_cb, env, 0)) {
+ &probe_answer_cb, env, 0, NULL)) {
log_err("out of memory making 5011 probe");
}
}
diff --git a/validator/val_anchor.c b/validator/val_anchor.c
index daa04504e595..af42d53c7ca0 100644
--- a/validator/val_anchor.c
+++ b/validator/val_anchor.c
@@ -534,7 +534,10 @@ readkeyword_bindfile(FILE* in, sldns_buffer* buf, int* line, int comments)
while((c = getc(in)) != EOF ) {
if(comments && c == '#') { /* # blabla */
skip_to_eol(in, &c);
- if(c == EOF) return 0;
+ if(c == EOF) {
+ log_err("trusted-keys, %d, got EOF", *line);
+ return 0;
+ }
(*line)++;
continue;
} else if(comments && c=='/' && numdone>0 && /* /_/ bla*/
@@ -543,7 +546,10 @@ readkeyword_bindfile(FILE* in, sldns_buffer* buf, int* line, int comments)
sldns_buffer_skip(buf, -1);
numdone--;
skip_to_eol(in, &c);
- if(c == EOF) return 0;
+ if(c == EOF) {
+ log_err("trusted-keys, %d, got EOF", *line);
+ return 0;
+ }
(*line)++;
continue;
} else if(comments && c=='*' && numdone>0 && /* /_* bla *_/ */
@@ -560,7 +566,10 @@ readkeyword_bindfile(FILE* in, sldns_buffer* buf, int* line, int comments)
if(c == '\n')
(*line)++;
}
- if(c == EOF) return 0;
+ if(c == EOF) {
+ log_err("trusted-keys, %d, got EOF", *line);
+ return 0;
+ }
continue;
}
/* not a comment, complete the keyword */
@@ -581,7 +590,8 @@ readkeyword_bindfile(FILE* in, sldns_buffer* buf, int* line, int comments)
}
/* space for 1 char + 0 string terminator */
if(sldns_buffer_remaining(buf) < 2) {
- fatal_exit("trusted-keys, %d, string too long", *line);
+ log_err("trusted-keys, %d, string too long", *line);
+ return 0;
}
sldns_buffer_write_u8(buf, (uint8_t)c);
numdone++;
@@ -595,7 +605,10 @@ readkeyword_bindfile(FILE* in, sldns_buffer* buf, int* line, int comments)
break;
}
}
- if(c == EOF) return 0;
+ if(c == EOF) {
+ log_err("trusted-keys, %d, got EOF", *line);
+ return 0;
+ }
return numdone;
}
if(is_bind_special(c))
@@ -623,7 +636,7 @@ skip_to_special(FILE* in, sldns_buffer* buf, int* line, int spec)
}
return 1;
}
- log_err("trusted-keys, line %d, expected %c got EOF", *line, spec);
+ log_err("trusted-keys, line %d, expected %c, read failed", *line, spec);
return 0;
}
diff --git a/validator/val_neg.c b/validator/val_neg.c
index e82f335b9ad9..63f380ad9ecf 100644
--- a/validator/val_neg.c
+++ b/validator/val_neg.c
@@ -938,6 +938,10 @@ void val_neg_addreply(struct val_neg_cache* neg, struct reply_info* rep)
continue;
if(!dname_subdomain_c(rep->rrsets[i]->rk.dname,
zone->name)) continue;
+ if(ntohs(rep->rrsets[i]->rk.type) == LDNS_RR_TYPE_NSEC &&
+ !nsec_nextowner_subdomain(rep->rrsets[i], zone->name)) {
+ continue; /* nextowner not in zone */
+ }
/* insert NSEC into this zone's tree */
neg_insert_data(neg, zone, rep->rrsets[i]);
}
@@ -1022,6 +1026,10 @@ void val_neg_addreferral(struct val_neg_cache* neg, struct reply_info* rep,
continue;
if(!dname_subdomain_c(rep->rrsets[i]->rk.dname,
zone->name)) continue;
+ if(ntohs(rep->rrsets[i]->rk.type) == LDNS_RR_TYPE_NSEC &&
+ !nsec_nextowner_subdomain(rep->rrsets[i], zone->name)) {
+ continue; /* nextowner not in zone */
+ }
/* insert NSEC into this zone's tree */
neg_insert_data(neg, zone, rep->rrsets[i]);
}
@@ -1110,12 +1118,14 @@ grab_nsec(struct rrset_cache* rrset_cache, uint8_t* qname, size_t qname_len,
* @param rrset_cache: rrset cache
* @param now: to check ttl against
* @param region: where to alloc result
+ * @param topname: do not look higher than this name, so that the
+ * result cannot be taken from a zone above the current trust anchor.
* @return rrset or NULL
*/
static struct ub_packed_rrset_key*
neg_find_nsec(struct val_neg_cache* neg_cache, uint8_t* qname, size_t qname_len,
uint16_t qclass, struct rrset_cache* rrset_cache, time_t now,
- struct regional* region)
+ struct regional* region, uint8_t* topname)
{
int labs;
uint32_t flags;
@@ -1133,6 +1143,11 @@ neg_find_nsec(struct val_neg_cache* neg_cache, uint8_t* qname, size_t qname_len,
lock_basic_unlock(&neg_cache->lock);
return NULL;
}
+ if(topname && !dname_subdomain_c(zone->name, topname)) {
+ /* Reject NSEC not within trust anchor's bailiwick */
+ lock_basic_unlock(&neg_cache->lock);
+ return NULL;
+ }
/* NSEC only for now */
if(zone->nsec3_hash) {
@@ -1223,8 +1238,8 @@ neg_params_ok(struct val_neg_zone* zone, struct ub_packed_rrset_key* rrset)
return 0;
return (h == zone->nsec3_hash && it == zone->nsec3_iter &&
slen == zone->nsec3_saltlen &&
- (slen != 0 && zone->nsec3_salt && s
- && memcmp(zone->nsec3_salt, s, slen) == 0));
+ (slen == 0 || (slen != 0 && zone->nsec3_salt && s
+ && memcmp(zone->nsec3_salt, s, slen) == 0)));
}
/** get next closer for nsec3 proof */
@@ -1313,7 +1328,7 @@ neg_nsec3_proof_ds(struct val_neg_zone* zone, uint8_t* qname, size_t qname_len,
!nsec3_has_type(ce_rrset, 0, LDNS_RR_TYPE_NS))
return NULL;
if(!(msg = dns_msg_create(qname, qname_len,
- LDNS_RR_TYPE_DS, zone->dclass, region, 1)))
+ LDNS_RR_TYPE_DS, zone->dclass, region, 2))) /* ce + soa */
return NULL;
/* The cache response means recursion is available. */
msg->rep->flags |= BIT_RA;
@@ -1430,7 +1445,7 @@ val_neg_getmsg(struct val_neg_cache* neg, struct query_info* qinfo,
/* Get best available NSEC for qname */
nsec = neg_find_nsec(neg, qinfo->qname, qinfo->qname_len, qinfo->qclass,
- rrset_cache, now, region);
+ rrset_cache, now, region, topname);
/* Matching NSEC, use to generate No Data answer. Not creating answers
* yet for No Data proven using wildcard. */
@@ -1510,7 +1525,7 @@ val_neg_getmsg(struct val_neg_cache* neg, struct query_info* qinfo,
* proof */
if(!(wcrr = neg_find_nsec(neg, wc_qinfo.qname,
wc_qinfo.qname_len, qinfo->qclass,
- rrset_cache, now, region)))
+ rrset_cache, now, region, topname)))
return NULL;
nodata_wc = NULL;
diff --git a/validator/val_nsec.c b/validator/val_nsec.c
index ad0cba1c4b59..becd42b4db1e 100644
--- a/validator/val_nsec.c
+++ b/validator/val_nsec.c
@@ -226,21 +226,27 @@ val_nsec_prove_nodata_dsreply(struct module_env* env, struct val_env* ve,
"referral did not verify.");
return sec_status_bogus;
}
- sec = val_nsec_proves_no_ds(nsec, qinfo);
- if(sec == sec_status_bogus) {
- /* something was wrong. */
- *reason = "NSEC does not prove absence of DS";
- *reason_bogus = LDNS_EDE_DNSSEC_BOGUS;
- return sec;
- } else if(sec == sec_status_insecure) {
- /* this wasn't a delegation point. */
- return sec;
- } else if(sec == sec_status_secure) {
- /* this proved no DS. */
- *proof_ttl = ub_packed_rrset_ttl(nsec);
- return sec;
+ /* If the NSEC was a wildcard, the verify rewrites the
+ * owner to '*.zone'. Check the NSEC owner matches. */
+ if(query_dname_compare(nsec->rk.dname, qinfo->qname) == 0) {
+ sec = val_nsec_proves_no_ds(nsec, qinfo);
+ if(sec == sec_status_bogus) {
+ /* something was wrong. */
+ *reason = "NSEC does not prove absence of DS";
+ *reason_bogus = LDNS_EDE_DNSSEC_BOGUS;
+ return sec;
+ } else if(sec == sec_status_insecure) {
+ /* this wasn't a delegation point. */
+ return sec;
+ } else if(sec == sec_status_secure) {
+ /* this proved no DS. */
+ *proof_ttl = ub_packed_rrset_ttl(nsec);
+ return sec;
+ }
}
/* if unchecked, fall through to next proof */
+ /* For *.closest-encloser NSEC, there is a closer-match
+ * check for the wildcard below. */
}
/* Otherwise, there is no NSEC at qname. This could be an ENT.
diff --git a/validator/val_nsec3.c b/validator/val_nsec3.c
index 62effde2093f..d0385be68e0c 100644
--- a/validator/val_nsec3.c
+++ b/validator/val_nsec3.c
@@ -1248,6 +1248,10 @@ nsec3_prove_nameerror(struct module_env* env, struct val_env* ve,
filter_init(&flt, list, num, qinfo); /* init RR iterator */
if(!flt.zone)
return sec_status_bogus; /* no RRs */
+ if(query_dname_compare(flt.zone, kkey->name) != 0) {
+ verbose(VERB_ALGO, "NSEC3 name is not b32.signer name");
+ return sec_status_bogus;
+ }
if(!param_set_same(&flt, NULL))
return sec_status_bogus; /* nsec3 params from distinct chains*/
if(nsec3_iteration_count_high(ve, &flt, kkey))
@@ -1436,6 +1440,10 @@ nsec3_prove_nodata(struct module_env* env, struct val_env* ve,
filter_init(&flt, list, num, qinfo); /* init RR iterator */
if(!flt.zone)
return sec_status_bogus; /* no RRs */
+ if(query_dname_compare(flt.zone, kkey->name) != 0) {
+ verbose(VERB_ALGO, "NSEC3 name is not b32.signer name");
+ return sec_status_bogus;
+ }
if(!param_set_same(&flt, NULL))
return sec_status_bogus; /* nsec3 params from distinct chains*/
if(nsec3_iteration_count_high(ve, &flt, kkey))
@@ -1461,6 +1469,10 @@ nsec3_prove_wildcard(struct module_env* env, struct val_env* ve,
filter_init(&flt, list, num, qinfo); /* init RR iterator */
if(!flt.zone)
return sec_status_bogus; /* no RRs */
+ if(query_dname_compare(flt.zone, kkey->name) != 0) {
+ verbose(VERB_ALGO, "NSEC3 name is not b32.signer name");
+ return sec_status_bogus;
+ }
if(!param_set_same(&flt, NULL))
return sec_status_bogus; /* nsec3 params from distinct chains*/
if(nsec3_iteration_count_high(ve, &flt, kkey))
@@ -1565,6 +1577,11 @@ nsec3_prove_nods(struct module_env* env, struct val_env* ve,
*reason = "no NSEC3 records";
return sec_status_bogus; /* no RRs */
}
+ if(query_dname_compare(flt.zone, kkey->name) != 0) {
+ verbose(VERB_ALGO, "NSEC3 name is not b32.signer name");
+ *reason = "NSEC3 name is not b32.signer name";
+ return sec_status_bogus;
+ }
if(!param_set_same(&flt, reason))
return sec_status_bogus; /* nsec3 params from distinct chains*/
if(nsec3_iteration_count_high(ve, &flt, kkey))
@@ -1660,6 +1677,10 @@ nsec3_prove_nxornodata(struct module_env* env, struct val_env* ve,
filter_init(&flt, list, num, qinfo); /* init RR iterator */
if(!flt.zone)
return sec_status_bogus; /* no RRs */
+ if(query_dname_compare(flt.zone, kkey->name) != 0) {
+ verbose(VERB_ALGO, "NSEC3 name is not b32.signer name");
+ return sec_status_bogus;
+ }
if(!param_set_same(&flt, NULL))
return sec_status_bogus; /* nsec3 params from distinct chains*/
if(nsec3_iteration_count_high(ve, &flt, kkey))
diff --git a/validator/val_secalgo.c b/validator/val_secalgo.c
index be8347b1bc88..d0d6d73d821c 100644
--- a/validator/val_secalgo.c
+++ b/validator/val_secalgo.c
@@ -745,11 +745,9 @@ verify_canonrrset(sldns_buffer* buf, int algo, unsigned char* sigblock,
if((algo == LDNS_DSA || algo == LDNS_DSA_NSEC3) &&(fake_dsa||fake_sha1))
return sec_status_secure;
#endif
-#ifndef USE_SHA1
if(fake_sha1 && (algo == LDNS_DSA || algo == LDNS_DSA_NSEC3 || algo == LDNS_RSASHA1 || algo == LDNS_RSASHA1_NSEC3))
return sec_status_secure;
-#endif
-
+
if(!setup_key_digest(algo, &evp_key, &digest_type, key, keylen)) {
verbose(VERB_QUERY, "verify: failed to setup key");
*reason = "use of key for crypto failed";
@@ -1874,9 +1872,9 @@ _verify_nettle_rsa(sldns_buffer* buf, unsigned int digest_size, char* sigblock,
}
mod_offset = exp_offset + exp_len;
nettle_rsa_public_key_init(&pubkey);
- pubkey.size = keylen - mod_offset;
nettle_mpz_set_str_256_u(pubkey.e, exp_len, &key[exp_offset]);
- nettle_mpz_set_str_256_u(pubkey.n, pubkey.size, &key[mod_offset]);
+ nettle_mpz_set_str_256_u(pubkey.n, keylen - mod_offset, &key[mod_offset]);
+ pubkey.size = nettle_mpz_sizeinbase_256_u(pubkey.n);
/* Digest content of "buf" and verify its RSA signature in "sigblock"*/
nettle_mpz_init_set_str_256_u(signature, sigblock_len, (uint8_t*)sigblock);
diff --git a/validator/val_sigcrypt.c b/validator/val_sigcrypt.c
index 16c01d2ee372..4139cc1fe0ce 100644
--- a/validator/val_sigcrypt.c
+++ b/validator/val_sigcrypt.c
@@ -1083,6 +1083,18 @@ insert_can_owner(sldns_buffer* buf, struct ub_packed_rrset_key* k,
}
}
+/** lowercase a wire dname but never step past end */
+static void
+canon_dname_tolower(uint8_t* d, uint8_t* end)
+{
+ uint8_t lab;
+ while(d < end && (lab = *d) != 0) {
+ if((size_t)lab+1 > (size_t)(end-d)) return; /* malformed */
+ for(d++; lab; lab--, d++)
+ *d = (uint8_t)tolower((unsigned char)*d);
+ }
+}
+
/**
* Canonicalize Rdata in buffer.
* @param buf: buffer at position just after the rdata.
@@ -1094,6 +1106,7 @@ canonicalize_rdata(sldns_buffer* buf, struct ub_packed_rrset_key* rrset,
size_t len)
{
uint8_t* datstart = sldns_buffer_current(buf)-len+2;
+ uint8_t* datend = sldns_buffer_current(buf);
size_t firstlen;
switch(ntohs(rrset->rk.type)) {
case LDNS_RR_TYPE_NXT:
@@ -1107,16 +1120,16 @@ canonicalize_rdata(sldns_buffer* buf, struct ub_packed_rrset_key* rrset,
case LDNS_RR_TYPE_PTR:
case LDNS_RR_TYPE_DNAME:
/* type only has a single argument, the name */
- query_dname_tolower(datstart);
+ canon_dname_tolower(datstart, datend);
return;
case LDNS_RR_TYPE_MINFO:
case LDNS_RR_TYPE_RP:
case LDNS_RR_TYPE_SOA:
/* two names after another */
- query_dname_tolower(datstart);
+ canon_dname_tolower(datstart, datend);
firstlen = dname_valid(datstart, len-2);
if(firstlen && firstlen < len-2)
- query_dname_tolower(datstart + firstlen);
+ canon_dname_tolower(datstart + firstlen, datend);
return;
case LDNS_RR_TYPE_RT:
case LDNS_RR_TYPE_AFSDB:
@@ -1126,7 +1139,7 @@ canonicalize_rdata(sldns_buffer* buf, struct ub_packed_rrset_key* rrset,
if(len < 2+2+1) /* rdlen, skiplen, 1byteroot */
return;
datstart += 2;
- query_dname_tolower(datstart);
+ canon_dname_tolower(datstart, datend);
return;
case LDNS_RR_TYPE_SIG:
/* downcase the RRSIG, compat with BIND (kept it from SIG) */
@@ -1135,17 +1148,17 @@ canonicalize_rdata(sldns_buffer* buf, struct ub_packed_rrset_key* rrset,
if(len < 2+18+1)
return;
datstart += 18;
- query_dname_tolower(datstart);
+ canon_dname_tolower(datstart, datend);
return;
case LDNS_RR_TYPE_PX:
/* skip, then two names after another */
if(len < 2+2+1)
return;
datstart += 2;
- query_dname_tolower(datstart);
+ canon_dname_tolower(datstart, datend);
firstlen = dname_valid(datstart, len-2-2);
if(firstlen && firstlen < len-2-2)
- query_dname_tolower(datstart + firstlen);
+ canon_dname_tolower(datstart + firstlen, datend);
return;
case LDNS_RR_TYPE_NAPTR:
if(len < 2+4)
@@ -1166,14 +1179,14 @@ canonicalize_rdata(sldns_buffer* buf, struct ub_packed_rrset_key* rrset,
datstart += (size_t)datstart[0]+1;
if(len < 1) /* check name is at least 1 byte*/
return;
- query_dname_tolower(datstart);
+ canon_dname_tolower(datstart, datend);
return;
case LDNS_RR_TYPE_SRV:
/* skip fixed part */
if(len < 2+6+1)
return;
datstart += 6;
- query_dname_tolower(datstart);
+ canon_dname_tolower(datstart, datend);
return;
/* do not canonicalize NSEC rdata name, compat with
@@ -1297,7 +1310,8 @@ rrset_canonical(struct regional* region, sldns_buffer* buf,
sldns_buffer_clear(buf);
sldns_buffer_write(buf, sig, siglen);
/* canonicalize signer name */
- query_dname_tolower(sldns_buffer_begin(buf)+18);
+ canon_dname_tolower(sldns_buffer_begin(buf)+18,
+ sldns_buffer_current(buf));
RBTREE_FOR(walk, struct canon_rr*, (*sortree)) {
/* see if there is enough space left in the buffer */
if(sldns_buffer_remaining(buf) < can_owner_len + 2 + 2 + 4
@@ -1325,10 +1339,11 @@ rrset_canonical(struct regional* region, sldns_buffer* buf,
* the non-existence proves. */
if(ntohs(k->rk.type) == LDNS_RR_TYPE_NSEC &&
section == LDNS_SECTION_AUTHORITY && qstate) {
- k->rk.dname = regional_alloc_init(qstate->region, can_owner,
+ uint8_t* new_dname = regional_alloc_init(qstate->region, can_owner,
can_owner_len);
- if(!k->rk.dname)
+ if(!new_dname)
return 0;
+ k->rk.dname = new_dname;
k->rk.dname_len = can_owner_len;
}
@@ -1612,6 +1627,30 @@ dnskey_verify_rrset_sig(struct regional* region, sldns_buffer* buf,
*reason_bogus = LDNS_EDE_DNSSEC_BOGUS;
return sec_status_bogus; /* signer name offtree */
}
+ /* NSEC3, the owner name must be the <base32hash>.signername */
+ if(ntohs(rrset->rk.type) == LDNS_RR_TYPE_NSEC3 &&
+ rrset->rk.dname_len > 0) {
+ uint8_t* dnameless = rrset->rk.dname;
+ size_t dnamelesslen = rrset->rk.dname_len;
+ dname_remove_label(&dnameless, &dnamelesslen);
+ if(query_dname_compare(dnameless, signer) != 0) {
+ verbose(VERB_QUERY, "verify: NSEC3 owner name is not b32.signer name");
+ *reason = "NSEC3 owner name is not b32.signer name";
+ if(reason_bogus)
+ *reason_bogus = LDNS_EDE_DNSSEC_BOGUS;
+ return sec_status_bogus; /* NSEC3 owner not b32.signer */
+ }
+ }
+ /* NSEC, a next owner that is not under the signer is not allowed.*/
+ if(ntohs(rrset->rk.type) == LDNS_RR_TYPE_NSEC &&
+ !nsec_nextowner_subdomain(rrset, signer)) {
+ verbose(VERB_QUERY, "verify: NSEC next owner overreaches signer name");
+ *reason = "NSEC next owner overreaches signer name";
+ if(reason_bogus)
+ *reason_bogus = LDNS_EDE_DNSSEC_BOGUS;
+ return sec_status_bogus; /* nextowner overreaching */
+ }
+
sigblock = (unsigned char*)signer+signer_len;
if(siglen < 2+18+signer_len+1) {
verbose(VERB_QUERY, "verify: too short, no signature data");
diff --git a/validator/val_utils.c b/validator/val_utils.c
index 6754a8bab69e..e77f93f5ae8e 100644
--- a/validator/val_utils.c
+++ b/validator/val_utils.c
@@ -1086,6 +1086,23 @@ val_fill_reply(struct reply_info* chase, struct reply_info* orig,
chase->ar_numrrsets;
}
+void val_reply_remove_answers(struct reply_info* rep, size_t index,
+ size_t count)
+{
+ log_assert(index < rep->rrset_count);
+ log_assert(index < rep->an_numrrsets);
+ if(count == 0)
+ return; /* nothing to do */
+ log_assert(index+(count-1) < rep->rrset_count);
+ log_assert(index+(count-1) < rep->an_numrrsets);
+ if(rep->rrset_count - (count-1) - index - 1 > 0)
+ memmove(rep->rrsets+index, rep->rrsets+index+(count-1)+1,
+ sizeof(struct ub_packed_rrset_key*)*
+ (rep->rrset_count - (count-1) - index - 1));
+ rep->an_numrrsets -= count;
+ rep->rrset_count -= count;
+}
+
void val_reply_remove_auth(struct reply_info* rep, size_t index)
{
log_assert(index < rep->rrset_count);
@@ -1319,10 +1336,11 @@ val_find_DS(struct module_env* env, uint8_t* nm, size_t nmlen, uint16_t c,
/* DS rrset exists. Return it to the validator immediately*/
struct ub_packed_rrset_key* copy = packed_rrset_copy_region(
rrset, region, *env->now);
- struct packed_rrset_data* d = copy->entry.data;
+ struct packed_rrset_data* d;
lock_rw_unlock(&rrset->entry.lock);
if(!copy)
return NULL;
+ d = (struct packed_rrset_data*)copy->entry.data;
msg = dns_msg_create(nm, nmlen, LDNS_RR_TYPE_DS, c, region, 1);
if(!msg)
return NULL;
@@ -1366,3 +1384,20 @@ int derive_cname_from_dname(struct ub_packed_rrset_key* cname,
memmove(out+prefix_len, dname_target, dname_target_len);
return 1;
}
+
+int nsec_nextowner_subdomain(struct ub_packed_rrset_key* rrset, uint8_t* name)
+{
+ struct packed_rrset_data* d;
+ uint8_t* next;
+ size_t nextlen;
+ if(ntohs(rrset->rk.type) != LDNS_RR_TYPE_NSEC)
+ return 0;
+ d = (struct packed_rrset_data*)rrset->entry.data;
+ if(!d || d->count == 0)
+ return 0;
+ next = d->rr_data[0]+2;
+ nextlen = dname_valid(next, d->rr_len[0]-2);
+ if(nextlen == 0)
+ return 0; /* malformed */
+ return dname_subdomain_c(next, name);
+}
diff --git a/validator/val_utils.h b/validator/val_utils.h
index f3750742b5d1..43386edbf351 100644
--- a/validator/val_utils.h
+++ b/validator/val_utils.h
@@ -315,6 +315,16 @@ void val_fill_reply(struct reply_info* chase, struct reply_info* orig,
size_t cname_skip, uint8_t* name, size_t len, uint8_t* signer);
/**
+ * Remove rrsets with index .. index+count from reply, from the answer section.
+ * @param rep: reply to remove it from.
+ * @param index: rrset to remove, must be in the answer section.
+ * @param count: number of rrsets to remove, starting from the index.
+ * with count=1, it removes only the index rrset.
+ */
+void val_reply_remove_answers(struct reply_info* rep, size_t index,
+ size_t count);
+
+/**
* Remove rrset with index from reply, from the authority section.
* @param rep: reply to remove it from.
* @param index: rrset to remove, must be in the authority section.
@@ -442,4 +452,7 @@ int derive_cname_from_dname(struct ub_packed_rrset_key* cname,
void rrsig_get_signer(uint8_t* data, size_t len, uint8_t** sname,
size_t* slen);
+/** See if the NSEC nextowner name is a subdomain of the name. */
+int nsec_nextowner_subdomain(struct ub_packed_rrset_key* rrset, uint8_t* name);
+
#endif /* VALIDATOR_VAL_UTILS_H */
diff --git a/validator/validator.c b/validator/validator.c
index f27ae5b4290a..d3ed8be3ed34 100644
--- a/validator/validator.c
+++ b/validator/validator.c
@@ -68,6 +68,9 @@
#define MAX_VALIDATE_AT_ONCE 8
/** Max number of validation suspends allowed, error out otherwise. */
#define MAX_VALIDATION_SUSPENDS 16
+/** Max answer RRsets for qtype ANY that are validated. The lists is
+ * shortened to fit this limit. */
+#define MAX_RRSETS_ANY_VALIDATED 24
/* forward decl for cache response and normal super inform calls of a DS */
static void process_ds_response(struct module_qstate* qstate,
@@ -921,10 +924,10 @@ validate_suspend_setup_timer(struct module_qstate* qstate,
slack += 2;
else if(qstate->env->mesh->all.count >= qstate->env->mesh->max_reply_states/4)
slack += 1;
- if(vq->suspend_count > 3)
- slack += 3;
- else if(vq->suspend_count > 0)
- slack += vq->suspend_count;
+ /* One step of back-off after the first suspend so a single bad
+ * message still yields, but does not grow exponentially on its own. */
+ if(vq->suspend_count > 0)
+ slack += 1;
if(slack != 0 && slack <= 12 /* No numeric overflow. */) {
usec = usec << slack;
}
@@ -1025,6 +1028,29 @@ remove_spurious_authority(struct reply_info* chase_reply,
}
/**
+ * Cap the number of answer RRsets for validation of type ANY.
+ * This limits the number of RRSIG validations performed.
+ * It is allowed to return a subset of available RRsets when processing
+ * ANY query.
+ * @param chase_reply: the chased reply, shorten if if too long.
+ * @param orig_reply: original reply, remove the records here as well,
+ * so it can be marked as DNSSEC valid.
+ * @param skip: the number of rrsets skipped in the answer section due to
+ * CNAME chain that is followed.
+ * @param max_rrsets: the number allowed.
+ */
+static void
+shorten_answer_any(struct reply_info* chase_reply,
+ struct reply_info* orig_reply, size_t skip, size_t max_rrsets)
+{
+ if(chase_reply->an_numrrsets > max_rrsets) {
+ size_t to_rem = chase_reply->an_numrrsets - max_rrsets;
+ val_reply_remove_answers(chase_reply, max_rrsets, to_rem);
+ val_reply_remove_answers(orig_reply, skip+max_rrsets, to_rem);
+ }
+}
+
+/**
* Given a "positive" response -- a response that contains an answer to the
* question, and no CNAME chain, validate this response.
*
@@ -2306,6 +2332,9 @@ processValidate(struct module_qstate* qstate, struct val_qstate* vq,
&vq->qchase, vq->orig_msg->rep, vq->rrset_skip);
if(subtype != VAL_CLASS_REFERRAL)
remove_spurious_authority(vq->chase_reply, vq->orig_msg->rep);
+ if(subtype == VAL_CLASS_ANY)
+ shorten_answer_any(vq->chase_reply, vq->orig_msg->rep,
+ vq->rrset_skip, MAX_RRSETS_ANY_VALIDATED);
/* check signatures in the message;
* answer and authority must be valid, additional is only checked. */