From 16fd0b24910488e59ca1941387b9ac7fb646a837 Mon Sep 17 00:00:00 2001 From: Cy Schubert Date: Mon, 13 Nov 2023 11:44:16 -0800 Subject: [PATCH] unbound: Vendor import 1.19.0 Release notes at https://www.nlnetlabs.nl/news/2023/Aug/30/unbound-1.19.0-released/ --- .gitignore | 1 - Makefile.in | 4 +- README.md | 6 +- cachedb/cachedb.c | 11 +- cachedb/redis.c | 68 +- config.guess | 8 +- config.h.in~ | 1456 ++++ config.sub | 155 +- configure | 650 +- configure.ac | 17 +- daemon/remote.c | 35 +- daemon/worker.c | 8 + dns64/dns64.c | 97 +- dnstap/dnstap.m4 | 2 +- dnstap/dtstream.c | 8 +- dnstap/unbound-dnstap-socket.c | 12 +- doc/Changelog | 154 +- doc/README | 2 +- doc/example.conf.in | 11 +- doc/libunbound.3.in | 4 +- doc/unbound-anchor.8.in | 2 +- doc/unbound-checkconf.8.in | 2 +- doc/unbound-control.8.in | 2 +- doc/unbound-host.1.in | 2 +- doc/unbound.8.in | 4 +- doc/unbound.conf.5.in | 32 +- dynlibmod/dynlibmod.c | 3 +- edns-subnet/subnetmod.c | 30 +- edns-subnet/subnetmod.h | 7 + ipset/ipset.c | 4 +- iterator/iter_priv.c | 26 +- iterator/iter_resptype.c | 25 +- iterator/iter_resptype.h | 4 +- iterator/iter_scrub.c | 67 +- iterator/iter_scrub.h | 5 +- iterator/iterator.c | 74 +- iterator/iterator.h | 7 + libunbound/libworker.c | 4 + libunbound/python/libunbound.i | 3 + pythonmod/doc/examples/example0-1.py | 4 +- pythonmod/doc/examples/example0.rst | 4 +- pythonmod/doc/modules/config.rst | 7 +- pythonmod/doc/modules/env.rst | 7 +- pythonmod/examples/edns.py | 2 +- pythonmod/examples/inplace_callbacks.py | 2 +- pythonmod/examples/log.py | 2 +- pythonmod/interface.i | 36 + pythonmod/pythonmod.c | 40 +- pythonmod/ubmodule-msg.py | 2 +- pythonmod/ubmodule-tst.py | 39 +- services/authzone.c | 11 +- services/listen_dnsport.c | 8 +- services/mesh.c | 9 +- services/outside_network.c | 2 +- services/rpz.c | 10 +- sldns/str2wire.c | 21 +- sldns/wire2str.c | 82 + sldns/wire2str.h | 13 + smallapp/unbound-checkconf.c | 17 + testcode/dohclient.c | 6 +- testcode/fake_event.c | 2 +- testcode/streamtcp.1 | 11 + testcode/streamtcp.c | 76 +- testcode/unitauth.c | 128 + testdata/autotrust_init_failsig.rpl | 6 +- .../cachedb_no_store.conf | 29 + .../cachedb_no_store.dsc | 16 + .../cachedb_no_store.post | 20 + .../cachedb_no_store.pre | 36 + .../cachedb_no_store.servfail.testns | 8 + .../cachedb_no_store.test | 132 + .../cachedb_no_store.testns | 9 + testdata/disable_edns_do.rpl | 164 + testdata/dns64_lookup.rpl | 118 +- testdata/ipset.tdir/ipset.conf | 3 + testdata/ipset.tdir/ipset.test | 23 + testdata/ipset.tdir/ipset.testns | 10 + testdata/iter_ignore_empty.rpl | 50 + testdata/iter_scrub_rr_length.rpl | 298 + testdata/pymod.tdir/pymod.py | 7 +- testdata/pymod_thread.tdir/pymod_thread.py | 2 +- testdata/root_zonemd.tdir/root_zonemd.conf | 34 + testdata/root_zonemd.tdir/root_zonemd.dsc | 16 + testdata/root_zonemd.tdir/root_zonemd.post | 14 + testdata/root_zonemd.tdir/root_zonemd.pre | 50 + testdata/root_zonemd.tdir/root_zonemd.test | 51 + testdata/root_zonemd.tdir/root_zonemd.testns | 9 + testdata/rpz_cached_cname.rpl | 122 + testdata/rpz_nsdname.rpl | 81 + testdata/subnet_prezero.crpl | 155 + testdata/val_scrub_rr_length.rpl | 164 + util/config_file.c | 10 + util/config_file.h | 6 + util/configlexer.c | 6617 +++++++++-------- util/configlexer.lex | 3 + util/configparser.c | 4217 +++++------ util/configparser.h | 240 +- util/configparser.y | 45 +- util/data/msgencode.c | 4 +- util/data/msgparse.c | 25 + util/data/msgparse.h | 18 + util/fptr_wlist.c | 2 + util/log.c | 2 +- util/module.c | 18 + util/module.h | 10 + util/net_help.c | 108 +- util/net_help.h | 18 + util/netevent.c | 102 +- util/proxy_protocol.c | 174 +- util/proxy_protocol.h | 66 +- util/rfc_1982.c | 1 + util/siphash.c | 5 + validator/val_anchor.c | 21 + validator/val_anchor.h | 8 + validator/validator.c | 11 + 115 files changed, 10555 insertions(+), 6356 deletions(-) delete mode 100644 .gitignore create mode 100644 config.h.in~ create mode 100644 testdata/cachedb_no_store.tdir/cachedb_no_store.conf create mode 100644 testdata/cachedb_no_store.tdir/cachedb_no_store.dsc create mode 100644 testdata/cachedb_no_store.tdir/cachedb_no_store.post create mode 100644 testdata/cachedb_no_store.tdir/cachedb_no_store.pre create mode 100644 testdata/cachedb_no_store.tdir/cachedb_no_store.servfail.testns create mode 100644 testdata/cachedb_no_store.tdir/cachedb_no_store.test create mode 100644 testdata/cachedb_no_store.tdir/cachedb_no_store.testns create mode 100644 testdata/disable_edns_do.rpl create mode 100644 testdata/iter_scrub_rr_length.rpl create mode 100644 testdata/root_zonemd.tdir/root_zonemd.conf create mode 100644 testdata/root_zonemd.tdir/root_zonemd.dsc create mode 100644 testdata/root_zonemd.tdir/root_zonemd.post create mode 100644 testdata/root_zonemd.tdir/root_zonemd.pre create mode 100644 testdata/root_zonemd.tdir/root_zonemd.test create mode 100644 testdata/root_zonemd.tdir/root_zonemd.testns create mode 100644 testdata/rpz_cached_cname.rpl create mode 100644 testdata/subnet_prezero.crpl create mode 100644 testdata/val_scrub_rr_length.rpl diff --git a/.gitignore b/.gitignore deleted file mode 100644 index b25c15b81fae..000000000000 --- a/.gitignore +++ /dev/null @@ -1 +0,0 @@ -*~ diff --git a/Makefile.in b/Makefile.in index 0a2e7f9b6f08..22fb75c123bd 100644 --- a/Makefile.in +++ b/Makefile.in @@ -738,7 +738,7 @@ msgencode.lo msgencode.o: $(srcdir)/util/data/msgencode.c config.h $(srcdir)/uti msgparse.lo msgparse.o: $(srcdir)/util/data/msgparse.c config.h $(srcdir)/util/data/msgparse.h \ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/sldns/pkthdr.h \ $(srcdir)/sldns/rrdef.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \ - $(srcdir)/util/data/dname.h $(srcdir)/util/storage/lookup3.h $(srcdir)/util/regional.h $(srcdir)/sldns/sbuffer.h \ + $(srcdir)/util/data/dname.h $(srcdir)/util/storage/lookup3.h $(srcdir)/util/regional.h $(srcdir)/util/net_help.h $(srcdir)/sldns/sbuffer.h \ $(srcdir)/sldns/parseutil.h $(srcdir)/sldns/wire2str.h msgreply.lo msgreply.o: $(srcdir)/util/data/msgreply.c config.h $(srcdir)/util/data/msgreply.h \ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/data/packed_rrset.h \ @@ -793,7 +793,7 @@ iter_priv.lo iter_priv.o: $(srcdir)/iterator/iter_priv.c config.h $(srcdir)/iter $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/net_help.h \ $(srcdir)/util/storage/dnstree.h $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/sbuffer.h iter_resptype.lo iter_resptype.o: $(srcdir)/iterator/iter_resptype.c config.h \ - $(srcdir)/iterator/iter_resptype.h $(srcdir)/iterator/iter_delegpt.h $(srcdir)/util/log.h \ + $(srcdir)/iterator/iter_resptype.h $(srcdir)/iterator/iter_delegpt.h $(srcdir)/iterator/iterator.h $(srcdir)/util/log.h \ $(srcdir)/services/cache/dns.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \ $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/net_help.h \ $(srcdir)/util/data/dname.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/pkthdr.h diff --git a/README.md b/README.md index c220da030458..3bbd38b3b78b 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,9 @@ You can learn more about Unbound by reading our ## Compiling Make sure you have the C toolchain, OpenSSL and its include files, and libexpat -installed. Unbound can be compiled and installed using: +installed. +If building from the repository source you also need flex and bison installed. +Unbound can be compiled and installed using: ``` ./configure && make && make install @@ -27,7 +29,7 @@ You can use libevent if you want. libevent is useful when using many (10000) outgoing ports. By default max 256 ports are opened at the same time and the builtin alternative is equally capable and a little faster. -Use the `--with-libevent=dir` configure option to compile Unbound with libevent +Use the `--with-libevent` configure option to compile Unbound with libevent support. ## Unbound configuration diff --git a/cachedb/cachedb.c b/cachedb/cachedb.c index 30645268ca23..b912be8ed54f 100644 --- a/cachedb/cachedb.c +++ b/cachedb/cachedb.c @@ -265,11 +265,11 @@ cachedb_init(struct module_env* env, int id) return 0; } cachedb_env->enabled = 1; - if(env->cfg->serve_expired_reply_ttl) + if(env->cfg->serve_expired && env->cfg->serve_expired_reply_ttl) log_warn( "cachedb: serve-expired-reply-ttl is set but not working for data " - "originating from the external cache; 0 TLL is used for those."); - if(env->cfg->serve_expired_client_timeout) + "originating from the external cache; 0 TTL is used for those."); + if(env->cfg->serve_expired && env->cfg->serve_expired_client_timeout) log_warn( "cachedb: serve-expired-client-timeout is set but not working for " "data originating from the external cache; expired data are used " @@ -815,6 +815,11 @@ cachedb_handle_response(struct module_qstate* qstate, qstate->ext_state[id] = module_finished; return; } + if(qstate->env->cfg->cachedb_no_store) { + /* do not store the item in the external cache */ + qstate->ext_state[id] = module_finished; + return; + } /* store the item into the backend cache */ cachedb_extcache_store(qstate, ie); diff --git a/cachedb/redis.c b/cachedb/redis.c index 93a575a4c6d2..6cc975901df2 100644 --- a/cachedb/redis.c +++ b/cachedb/redis.c @@ -59,11 +59,28 @@ struct redis_moddata { const char* server_path; /* server's unix path, or "", NULL if unused */ const char* server_password; /* server's AUTH password, or "", NULL if unused */ struct timeval timeout; /* timeout for connection setup and commands */ + int logical_db; /* the redis logical database to use */ }; static redisReply* redis_command(struct module_env*, struct cachedb_env*, const char*, const uint8_t*, size_t); +static void +moddata_clean(struct redis_moddata** moddata) { + if(!moddata || !*moddata) + return; + if((*moddata)->ctxs) { + int i; + for(i = 0; i < (*moddata)->numctxs; i++) { + if((*moddata)->ctxs[i]) + redisFree((*moddata)->ctxs[i]); + } + free((*moddata)->ctxs); + } + free(*moddata); + *moddata = NULL; +} + static redisContext* redis_connect(const struct redis_moddata* moddata) { @@ -97,10 +114,21 @@ redis_connect(const struct redis_moddata* moddata) } freeReplyObject(rep); } + if(moddata->logical_db > 0) { + redisReply* rep; + rep = redisCommand(ctx, "SELECT %d", moddata->logical_db); + if(!rep || rep->type == REDIS_REPLY_ERROR) { + log_err("failed to set logical database (%d)", + moddata->logical_db); + freeReplyObject(rep); + goto fail; + } + freeReplyObject(rep); + } verbose(VERB_OPS, "Connection to Redis established"); return ctx; - fail: +fail: if(ctx) redisFree(ctx); return NULL; @@ -117,14 +145,13 @@ redis_init(struct module_env* env, struct cachedb_env* cachedb_env) moddata = calloc(1, sizeof(struct redis_moddata)); if(!moddata) { log_err("out of memory"); - return 0; + goto fail; } moddata->numctxs = env->cfg->num_threads; moddata->ctxs = calloc(env->cfg->num_threads, sizeof(redisContext*)); if(!moddata->ctxs) { log_err("out of memory"); - free(moddata); - return 0; + goto fail; } /* note: server_host is a shallow reference to configured string. * we don't have to free it in this module. */ @@ -134,8 +161,15 @@ redis_init(struct module_env* env, struct cachedb_env* cachedb_env) moddata->server_password = env->cfg->redis_server_password; moddata->timeout.tv_sec = env->cfg->redis_timeout / 1000; moddata->timeout.tv_usec = (env->cfg->redis_timeout % 1000) * 1000; - for(i = 0; i < moddata->numctxs; i++) - moddata->ctxs[i] = redis_connect(moddata); + moddata->logical_db = env->cfg->redis_logical_db; + for(i = 0; i < moddata->numctxs; i++) { + redisContext* ctx = redis_connect(moddata); + if(!ctx) { + log_err("redis_init: failed to init redis"); + goto fail; + } + moddata->ctxs[i] = ctx; + } cachedb_env->backend_data = moddata; if(env->cfg->redis_expire_records) { redisReply* rep = NULL; @@ -148,7 +182,7 @@ redis_init(struct module_env* env, struct cachedb_env* cachedb_env) log_err("redis_init: failed to init redis, the " "redis-expire-records option requires the SETEX command " "(redis >= 2.0.0)"); - return 0; + goto fail; } redis_reply_type = rep->type; freeReplyObject(rep); @@ -160,11 +194,14 @@ redis_init(struct module_env* env, struct cachedb_env* cachedb_env) log_err("redis_init: failed to init redis, the " "redis-expire-records option requires the SETEX command " "(redis >= 2.0.0)"); - return 0; + goto fail; } } - return 1; + +fail: + moddata_clean(&moddata); + return 0; } static void @@ -175,18 +212,7 @@ redis_deinit(struct module_env* env, struct cachedb_env* cachedb_env) (void)env; verbose(VERB_OPS, "Redis deinitialization"); - - if(!moddata) - return; - if(moddata->ctxs) { - int i; - for(i = 0; i < moddata->numctxs; i++) { - if(moddata->ctxs[i]) - redisFree(moddata->ctxs[i]); - } - free(moddata->ctxs); - } - free(moddata); + moddata_clean(&moddata); } /* diff --git a/config.guess b/config.guess index b187213930f1..cdfc4392047c 100755 --- a/config.guess +++ b/config.guess @@ -4,7 +4,7 @@ # shellcheck disable=SC2006,SC2268 # see below for rationale -timestamp='2023-07-20' +timestamp='2023-08-22' # 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 @@ -155,6 +155,9 @@ Linux|GNU|GNU/*) set_cc_for_build cat <<-EOF > "$dummy.c" + #if defined(__ANDROID__) + LIBC=android + #else #include #if defined(__UCLIBC__) LIBC=uclibc @@ -169,6 +172,7 @@ Linux|GNU|GNU/*) LIBC=musl #endif #endif + #endif EOF cc_set_libc=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` eval "$cc_set_libc" @@ -904,7 +908,7 @@ EOF fi ;; *:FreeBSD:*:*) - UNAME_PROCESSOR=`/usr/bin/uname -p` + UNAME_PROCESSOR=`uname -p` case $UNAME_PROCESSOR in amd64) UNAME_PROCESSOR=x86_64 ;; diff --git a/config.h.in~ b/config.h.in~ new file mode 100644 index 000000000000..f31354d01408 --- /dev/null +++ b/config.h.in~ @@ -0,0 +1,1456 @@ +/* config.h.in. Generated from configure.ac by autoheader. */ + +/* apply the noreturn attribute to a function that exits the program */ +#undef ATTR_NORETURN + +/* apply the weak attribute to a symbol */ +#undef ATTR_WEAK + +/* Directory to chroot to */ +#undef CHROOT_DIR + +/* Define this to enable client subnet option. */ +#undef CLIENT_SUBNET + +/* Do sha512 definitions in config.h */ +#undef COMPAT_SHA512 + +/* Command line arguments used with configure */ +#undef CONFCMDLINE + +/* Pathname to the Unbound configuration file */ +#undef CONFIGFILE + +/* Define this if on macOSX10.4-darwin8 and setreuid and setregid do not work + */ +#undef DARWIN_BROKEN_SETREUID + +/* Whether daemon is deprecated */ +#undef DEPRECATED_DAEMON + +/* Deprecate RSA 1024 bit length, makes that an unsupported key */ +#undef DEPRECATE_RSA_1024 + +/* Define this to enable kernel based UDP source port randomization. */ +#undef DISABLE_EXPLICIT_PORT_RANDOMISATION + +/* default dnstap socket path */ +#undef DNSTAP_SOCKET_PATH + +/* Define if you want to use debug lock checking (slow). */ +#undef ENABLE_LOCK_CHECKS + +/* Define this if you enabled-allsymbols from libunbound to link binaries to + it for smaller install size, but the libunbound export table is polluted by + internal symbols */ +#undef EXPORT_ALL_SYMBOLS + +/* Define to 1 if you have the `accept4' function. */ +#undef HAVE_ACCEPT4 + +/* Define to 1 if you have the `arc4random' function. */ +#undef HAVE_ARC4RANDOM + +/* Define to 1 if you have the `arc4random_uniform' function. */ +#undef HAVE_ARC4RANDOM_UNIFORM + +/* Define to 1 if you have the header file. */ +#undef HAVE_ARPA_INET_H + +/* Whether the C compiler accepts the "format" attribute */ +#undef HAVE_ATTR_FORMAT + +/* Whether the C compiler accepts the "noreturn" attribute */ +#undef HAVE_ATTR_NORETURN + +/* Whether the C compiler accepts the "unused" attribute */ +#undef HAVE_ATTR_UNUSED + +/* Whether the C compiler accepts the "weak" attribute */ +#undef HAVE_ATTR_WEAK + +/* If we have be64toh */ +#undef HAVE_BE64TOH + +/* 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 header file. */ +#undef HAVE_BSD_STDLIB_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_BSD_STRING_H + +/* Define to 1 if you have the `chown' function. */ +#undef HAVE_CHOWN + +/* 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. */ +#undef HAVE_CRYPTO_CLEANUP_ALL_EX_DATA + +/* 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. */ +#undef HAVE_CTIME_R + +/* 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 + don't. */ +#undef HAVE_DECL_ARC4RANDOM + +/* 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 + you don't. */ +#undef HAVE_DECL_EVSIGNAL_ASSIGN + +/* 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 + don't. */ +#undef HAVE_DECL_INET_PTON + +/* 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 `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 + don't. */ +#undef HAVE_DECL_NID_ED448 + +/* 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 + 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 + don't. */ +#undef HAVE_DECL_REALLOCARRAY + +/* 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 + 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. */ +#undef HAVE_DECL_SSL_COMP_GET_COMPRESSION_METHODS + +/* 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 `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 + don't. */ +#undef HAVE_DECL_STRLCPY + +/* 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 header file. */ +#undef HAVE_DLFCN_H + +/* Define to 1 if you have the `DSA_SIG_set0' function. */ +#undef HAVE_DSA_SIG_SET0 + +/* Define to 1 if you have the header file. */ +#undef HAVE_ENDIAN_H + +/* Define to 1 if you have the `endprotoent' function. */ +#undef HAVE_ENDPROTOENT + +/* Define to 1 if you have the `endpwent' function. */ +#undef HAVE_ENDPWENT + +/* Define to 1 if you have the `endservent' function. */ +#undef HAVE_ENDSERVENT + +/* 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. */ +#undef HAVE_ERR_FREE_STRINGS + +/* 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. */ +#undef HAVE_EVENT_ASSIGN + +/* 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. */ +#undef HAVE_EVENT_BASE_GET_METHOD + +/* 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. */ +#undef HAVE_EVENT_BASE_ONCE + +/* Define to 1 if you have the header file. */ +#undef HAVE_EVENT_H + +/* 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. */ +#undef HAVE_EVP_CLEANUP + +/* 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. */ +#undef HAVE_EVP_DIGESTVERIFY + +/* 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. */ +#undef HAVE_EVP_ENCRYPTINIT_EX + +/* 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. */ +#undef HAVE_EVP_MD_CTX_NEW + +/* Define to 1 if you have the `EVP_sha1' function. */ +#undef HAVE_EVP_SHA1 + +/* Define to 1 if you have the `EVP_sha256' function. */ +#undef HAVE_EVP_SHA256 + +/* 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. */ +#undef HAVE_EV_DEFAULT_LOOP + +/* Define to 1 if you have the `ev_loop' function. */ +#undef HAVE_EV_LOOP + +/* Define to 1 if you have the header file. */ +#undef HAVE_EXPAT_H + +/* Define to 1 if you have the `explicit_bzero' function. */ +#undef HAVE_EXPLICIT_BZERO + +/* Define to 1 if you have the `fcntl' function. */ +#undef HAVE_FCNTL + +/* Define to 1 if you have the `FIPS_mode' function. */ +#undef HAVE_FIPS_MODE + +/* Define to 1 if you have the `fork' function. */ +#undef HAVE_FORK + +/* Define to 1 if fseeko (and presumably ftello) exists and is declared. */ +#undef HAVE_FSEEKO + +/* 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. */ +#undef HAVE_GETAUXVAL + +/* Define to 1 if you have the `getentropy' function. */ +#undef HAVE_GETENTROPY + +/* Define to 1 if you have the `getifaddrs' function. */ +#undef HAVE_GETIFADDRS + +/* Define to 1 if you have the header file. */ +#undef HAVE_GETOPT_H + +/* Define to 1 if you have the `getpwnam' function. */ +#undef HAVE_GETPWNAM + +/* Define to 1 if you have the `getrlimit' function. */ +#undef HAVE_GETRLIMIT + +/* Define to 1 if you have the `gettid' function. */ +#undef HAVE_GETTID + +/* Define to 1 if you have the `glob' function. */ +#undef HAVE_GLOB + +/* Define to 1 if you have the header file. */ +#undef HAVE_GLOB_H + +/* Define to 1 if you have the `gmtime_r' function. */ +#undef HAVE_GMTIME_R + +/* Define to 1 if you have the header file. */ +#undef HAVE_GRP_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_HIREDIS_HIREDIS_H + +/* Define to 1 if you have the `HMAC_Init_ex' function. */ +#undef HAVE_HMAC_INIT_EX + +/* If we have htobe64 */ +#undef HAVE_HTOBE64 + +/* Define to 1 if you have the header file. */ +#undef HAVE_IFADDRS_H + +/* Define to 1 if you have the `if_nametoindex' function. */ +#undef HAVE_IF_NAMETOINDEX + +/* Define to 1 if you have the `inet_aton' function. */ +#undef HAVE_INET_ATON + +/* Define to 1 if you have the `inet_ntop' function. */ +#undef HAVE_INET_NTOP + +/* Define to 1 if you have the `inet_pton' function. */ +#undef HAVE_INET_PTON + +/* Define to 1 if you have the `initgroups' function. */ +#undef HAVE_INITGROUPS + +/* Define to 1 if you have the header file. */ +#undef HAVE_INTTYPES_H + +/* if the function 'ioctlsocket' is available */ +#undef HAVE_IOCTLSOCKET + +/* Define to 1 if you have the header file. */ +#undef HAVE_IPHLPAPI_H + +/* Define to 1 if you have the `isblank' function. */ +#undef HAVE_ISBLANK + +/* Define to 1 if you have the `kill' function. */ +#undef HAVE_KILL + +/* Use portable libbsd functions */ +#undef HAVE_LIBBSD + +/* Define to 1 if you have the header file. */ +#undef HAVE_LIBKERN_OSBYTEORDER_H + +/* Define if we have LibreSSL */ +#undef HAVE_LIBRESSL + +/* Define to 1 if you have the header file. */ +#undef HAVE_LINUX_NET_TSTAMP_H + +/* Define to 1 if you have the `localtime_r' function. */ +#undef HAVE_LOCALTIME_R + +/* Define to 1 if you have the header file. */ +#undef HAVE_LOGIN_CAP_H + +/* If have GNU libc compatible malloc */ +#undef HAVE_MALLOC + +/* Define to 1 if you have the `memmove' function. */ +#undef HAVE_MEMMOVE + +/* Define to 1 if you have the header file. */ +#undef HAVE_MEMORY_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_NETDB_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_NETINET_IN_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_NETINET_TCP_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_NETIOAPI_H + +/* Use libnettle for crypto */ +#undef HAVE_NETTLE + +/* Define to 1 if you have the header file. */ +#undef HAVE_NETTLE_DSA_COMPAT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_NETTLE_EDDSA_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_NET_IF_H + +/* Define this to use nghttp2 client. */ +#undef HAVE_NGHTTP2 + +/* Define to 1 if you have the header file. */ +#undef HAVE_NGHTTP2_NGHTTP2_H + +/* Use libnss for crypto */ +#undef HAVE_NSS + +/* 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 header file. */ +#undef HAVE_OPENSSL_BN_H + +/* Define to 1 if you have the `OPENSSL_config' function. */ +#undef HAVE_OPENSSL_CONFIG + +/* Define to 1 if you have the header file. */ +#undef HAVE_OPENSSL_CONF_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_OPENSSL_CORE_NAMES_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_OPENSSL_DH_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_OPENSSL_DSA_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_OPENSSL_ENGINE_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_OPENSSL_ERR_H + +/* 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. */ +#undef HAVE_OPENSSL_INIT_SSL + +/* Define to 1 if you have the header file. */ +#undef HAVE_OPENSSL_PARAM_BUILD_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_OPENSSL_RAND_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_OPENSSL_RSA_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_OPENSSL_SSL_H + +/* 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. */ +#undef HAVE_POLL + +/* Define to 1 if you have the header file. */ +#undef HAVE_POLL_H + +/* Define if you have POSIX threads libraries and header files. */ +#undef HAVE_PTHREAD + +/* Have PTHREAD_PRIO_INHERIT. */ +#undef HAVE_PTHREAD_PRIO_INHERIT + +/* Define to 1 if the system has the type `pthread_rwlock_t'. */ +#undef HAVE_PTHREAD_RWLOCK_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 header file. */ +#undef HAVE_PWD_H + +/* Define if you have Python libraries and header files. */ +#undef HAVE_PYTHON + +/* Define to 1 if you have the `random' function. */ +#undef HAVE_RANDOM + +/* 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. */ +#undef HAVE_RECVMSG + +/* Define to 1 if you have the `sendmsg' function. */ +#undef HAVE_SENDMSG + +/* Define to 1 if you have the `setregid' function. */ +#undef HAVE_SETREGID + +/* Define to 1 if you have the `setresgid' function. */ +#undef HAVE_SETRESGID + +/* Define to 1 if you have the `setresuid' function. */ +#undef HAVE_SETRESUID + +/* Define to 1 if you have the `setreuid' function. */ +#undef HAVE_SETREUID + +/* Define to 1 if you have the `setrlimit' function. */ +#undef HAVE_SETRLIMIT + +/* Define to 1 if you have the `setsid' function. */ +#undef HAVE_SETSID + +/* Define to 1 if you have the `setusercontext' function. */ +#undef HAVE_SETUSERCONTEXT + +/* Define to 1 if you have the `SHA512_Update' function. */ +#undef HAVE_SHA512_UPDATE + +/* Define to 1 if you have the `shmget' function. */ +#undef HAVE_SHMGET + +/* Define to 1 if you have the `sigprocmask' function. */ +#undef HAVE_SIGPROCMASK + +/* Define to 1 if you have the `sleep' function. */ +#undef HAVE_SLEEP + +/* Define to 1 if you have the `snprintf' function. */ +#undef HAVE_SNPRINTF + +/* 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. */ +#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. */ +#undef HAVE_SSL_CTX_SET_ALPN_PROTOS + +/* 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. */ +#undef HAVE_SSL_CTX_SET_CIPHERSUITES + +/* 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' + function. */ +#undef HAVE_SSL_CTX_SET_TLSEXT_TICKET_KEY_EVP_CB + +/* 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. */ +#undef HAVE_SSL_GET0_PEERNAME + +/* 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_set1_host' function. */ +#undef HAVE_SSL_SET1_HOST + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDARG_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDBOOL_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDINT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDLIB_H + +/* Define to 1 if you have the `strftime' function. */ +#undef HAVE_STRFTIME + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRINGS_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRING_H + +/* Define to 1 if you have the `strlcat' function. */ +#undef HAVE_STRLCAT + +/* Define to 1 if you have the `strlcpy' function. */ +#undef HAVE_STRLCPY + +/* Define to 1 if you have the `strptime' function. */ +#undef HAVE_STRPTIME + +/* 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'. */ +#undef HAVE_STRUCT_IN_PKTINFO_IPI_SPEC_DST + +/* Define to 1 if `sun_len' is a member of `struct sockaddr_un'. */ +#undef HAVE_STRUCT_SOCKADDR_UN_SUN_LEN + +/* Define if you have Swig libraries and header files. */ +#undef HAVE_SWIG + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYSLOG_H + +/* Define to 1 if systemd should be used */ +#undef HAVE_SYSTEMD + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_ENDIAN_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_IPC_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_PARAM_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_RESOURCE_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_SELECT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_SHA2_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_SHM_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_SOCKET_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_STAT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_SYSCTL_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_TYPES_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_UIO_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_UN_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_WAIT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_TARGETCONDITIONALS_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_TIME_H + +/* Define to 1 if you have the `tzset' function. */ +#undef HAVE_TZSET + +/* Define to 1 if you have the header file. */ +#undef HAVE_UNISTD_H + +/* Define to 1 if you have the `usleep' function. */ +#undef HAVE_USLEEP + +/* Define to 1 if you have the `vfork' function. */ +#undef HAVE_VFORK + +/* Define to 1 if you have the header file. */ +#undef HAVE_VFORK_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_WINDOWS_H + +/* Using Windows threads */ +#undef HAVE_WINDOWS_THREADS + +/* Define to 1 if you have the header file. */ +#undef HAVE_WINSOCK2_H + +/* Define to 1 if `fork' works. */ +#undef HAVE_WORKING_FORK + +/* Define to 1 if `vfork' works. */ +#undef HAVE_WORKING_VFORK + +/* Define to 1 if you have the `writev' function. */ +#undef HAVE_WRITEV + +/* Define to 1 if you have the header file. */ +#undef HAVE_WS2TCPIP_H + +/* 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. */ +#undef HAVE__BEGINTHREADEX + +/* If HMAC_Init_ex() returns void */ +#undef HMAC_INIT_EX_RETURNS_VOID + +/* if lex has yylex_destroy */ +#undef LEX_HAS_YYLEX_DESTROY + +/* Define to the sub-directory where libtool stores uninstalled libraries. */ +#undef LT_OBJDIR + +/* Define to the maximum message length to pass to syslog. */ +#undef MAXSYSLOGMSGLEN + +/* Define if memcmp() does not compare unsigned bytes */ +#undef MEMCMP_IS_BROKEN + +/* Define if mkdir has one argument. */ +#undef MKDIR_HAS_ONE_ARG + +/* Define if the network stack does not fully support nonblocking io (causes + lower performance). */ +#undef NONBLOCKING_IS_BROKEN + +/* Put -D_ALL_SOURCE define in config.h */ +#undef OMITTED__D_ALL_SOURCE + +/* Put -D_BSD_SOURCE define in config.h */ +#undef OMITTED__D_BSD_SOURCE + +/* Put -D_DEFAULT_SOURCE define in config.h */ +#undef OMITTED__D_DEFAULT_SOURCE + +/* Put -D_GNU_SOURCE define in config.h */ +#undef OMITTED__D_GNU_SOURCE + +/* Put -D_LARGEFILE_SOURCE=1 define in config.h */ +#undef OMITTED__D_LARGEFILE_SOURCE_1 + +/* Put -D_POSIX_C_SOURCE=200112 define in config.h */ +#undef OMITTED__D_POSIX_C_SOURCE_200112 + +/* Put -D_XOPEN_SOURCE=600 define in config.h */ +#undef OMITTED__D_XOPEN_SOURCE_600 + +/* Put -D_XOPEN_SOURCE_EXTENDED=1 define in config.h */ +#undef OMITTED__D_XOPEN_SOURCE_EXTENDED_1 + +/* Put -D__EXTENSIONS__ define in config.h */ +#undef OMITTED__D__EXTENSIONS__ + +/* Define to the address where bug reports for this package should be sent. */ +#undef PACKAGE_BUGREPORT + +/* Define to the full name of this package. */ +#undef PACKAGE_NAME + +/* Define to the full name and version of this package. */ +#undef PACKAGE_STRING + +/* Define to the one symbol short name of this package. */ +#undef PACKAGE_TARNAME + +/* Define to the home page for this package. */ +#undef PACKAGE_URL + +/* Define to the version of this package. */ +#undef PACKAGE_VERSION + +/* default pidfile location */ +#undef PIDFILE + +/* Define to necessary symbol if this constant uses a non-standard name on + your system. */ +#undef PTHREAD_CREATE_JOINABLE + +/* Return type of signal handlers, but autoconf 2.70 says 'your code may + safely assume C89 semantics that RETSIGTYPE is void.' */ +#undef RETSIGTYPE + +/* if REUSEPORT is enabled by default */ +#undef REUSEPORT_DEFAULT + +/* default rootkey location */ +#undef ROOT_ANCHOR_FILE + +/* default rootcert location */ +#undef ROOT_CERT_FILE + +/* version number for resource files */ +#undef RSRC_PACKAGE_VERSION + +/* Directory to chdir to */ +#undef RUN_DIR + +/* Shared data */ +#undef SHARE_DIR + +/* The size of `pthread_t', as computed by sizeof. */ +#undef SIZEOF_PTHREAD_T + +/* The size of `size_t', as computed by sizeof. */ +#undef SIZEOF_SIZE_T + +/* The size of `time_t', as computed by sizeof. */ +#undef SIZEOF_TIME_T + +/* 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) */ +#undef SNPRINTF_RET_BROKEN + +/* Define to 1 if libsodium supports sodium_set_misuse_handler */ +#undef SODIUM_MISUSE_HANDLER + +/* Define to 1 if you have the ANSI C header files. */ +#undef STDC_HEADERS + +/* use default strptime. */ +#undef STRPTIME_WORKS + +/* Use win32 resources and API */ +#undef UB_ON_WINDOWS + +/* the SYSLOG_FACILITY to use, default LOG_DAEMON */ +#undef UB_SYSLOG_FACILITY + +/* default username */ +#undef UB_USERNAME + +/* use to enable lightweight alloc assertions, for debug use */ +#undef UNBOUND_ALLOC_LITE + +/* use malloc not regions, for debug use */ +#undef UNBOUND_ALLOC_NONREGIONAL + +/* use statistics for allocs and frees, for debug use */ +#undef UNBOUND_ALLOC_STATS + +/* define this to enable debug checks. */ +#undef UNBOUND_DEBUG + +/* Define to 1 to use cachedb support */ +#undef USE_CACHEDB + +/* Define to 1 to enable dnscrypt support */ +#undef USE_DNSCRYPT + +/* Define to 1 to enable dnscrypt with xchacha20 support */ +#undef USE_DNSCRYPT_XCHACHA20 + +/* Define to 1 to enable dnstap support */ +#undef USE_DNSTAP + +/* Define this to enable DSA support. */ +#undef USE_DSA + +/* Define this to enable ECDSA support. */ +#undef USE_ECDSA + +/* Define this to enable an EVP workaround for older openssl */ +#undef USE_ECDSA_EVP_WORKAROUND + +/* Define this to enable ED25519 support. */ +#undef USE_ED25519 + +/* Define this to enable ED448 support. */ +#undef USE_ED448 + +/* Define this to enable GOST support. */ +#undef USE_GOST + +/* Define to 1 to use ipsecmod support. */ +#undef USE_IPSECMOD + +/* Define to 1 to use ipset support */ +#undef USE_IPSET + +/* Define if you enable libevent */ +#undef USE_LIBEVENT + +/* Define this to enable use of /proc/sys/net/ipv4/ip_local_port_range as a + default outgoing port range. This is only for the libunbound on Linux and + does not affect unbound resolving daemon itself. This may severely limit + the number of available outgoing ports and thus decrease randomness. Define + this only when the target system restricts (e.g. some of SELinux enabled + distributions) the use of non-ephemeral ports. */ +#undef USE_LINUX_IP_LOCAL_PORT_RANGE + +/* Define if you want to use internal select based events */ +#undef USE_MINI_EVENT + +/* Define this to enable client TCP Fast Open. */ +#undef USE_MSG_FASTOPEN + +/* Define this to enable client TCP Fast Open. */ +#undef USE_OSX_MSG_FASTOPEN + +/* Define this to use hiredis client. */ +#undef USE_REDIS + +/* Define this to enable SHA1 support. */ +#undef USE_SHA1 + +/* Define this to enable SHA256 and SHA512 support. */ +#undef USE_SHA2 + +/* Enable extensions on AIX 3, Interix. */ +#ifndef _ALL_SOURCE +# undef _ALL_SOURCE +#endif +/* Enable GNU extensions on systems that have them. */ +#ifndef _GNU_SOURCE +# undef _GNU_SOURCE +#endif +/* Enable threading extensions on Solaris. */ +#ifndef _POSIX_PTHREAD_SEMANTICS +# undef _POSIX_PTHREAD_SEMANTICS +#endif +/* Enable extensions on HP NonStop. */ +#ifndef _TANDEM_SOURCE +# undef _TANDEM_SOURCE +#endif +/* Enable general extensions on Solaris. */ +#ifndef __EXTENSIONS__ +# undef __EXTENSIONS__ +#endif + + +/* Define this to enable server TCP Fast Open. */ +#undef USE_TCP_FASTOPEN + +/* Whether the windows socket API is used */ +#undef USE_WINSOCK + +/* the version of the windows API enabled */ +#undef WINVER + +/* Define if you want dynlib module. */ +#undef WITH_DYNLIBMODULE + +/* Define if you want Python module. */ +#undef WITH_PYTHONMODULE + +/* Define if you want PyUnbound. */ +#undef WITH_PYUNBOUND + +/* Define to 1 if `lex' declares `yytext' as a `char *' by default, not a + `char[]'. */ +#undef YYTEXT_POINTER + +/* Enable large inode numbers on Mac OS X 10.5. */ +#ifndef _DARWIN_USE_64_BIT_INODE +# define _DARWIN_USE_64_BIT_INODE 1 +#endif + +/* 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). */ +#undef _LARGEFILE_SOURCE + +/* Define for large files, on AIX-style hosts. */ +#undef _LARGE_FILES + +/* Define to 1 if on MINIX. */ +#undef _MINIX + +/* Enable for compile on Minix */ +#undef _NETBSD_SOURCE + +/* Define to 2 if the system does not provide POSIX.1 features except with + this defined. */ +#undef _POSIX_1_SOURCE + +/* Define to 1 if you need to in order for `stat' and other things to work. */ +#undef _POSIX_SOURCE + +/* defined to use gcc ansi snprintf and sscanf that understands %lld when + compiled for windows. */ +#undef __USE_MINGW_ANSI_STDIO + +/* Define to empty if `const' does not conform to ANSI C. */ +#undef const + +/* Define to `int' if doesn't define. */ +#undef gid_t + +/* in_addr_t */ +#undef in_addr_t + +/* in_port_t */ +#undef in_port_t + +/* 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 does not define. */ +#undef int16_t + +/* Define to `int' if does not define. */ +#undef int32_t + +/* Define to `long long' if does not define. */ +#undef int64_t + +/* Define to `signed char' if does not define. */ +#undef int8_t + +/* Define if replacement function should be used. */ +#undef malloc + +/* Define to `long int' if does not define. */ +#undef off_t + +/* Define to `int' if does not define. */ +#undef pid_t + +/* Define to 'int' if not defined */ +#undef rlim_t + +/* Define to `unsigned int' if does not define. */ +#undef size_t + +/* Define to 'int' if not defined */ +#undef socklen_t + +/* Define to `int' if does not define. */ +#undef ssize_t + +/* Define to 'unsigned char if not defined */ +#undef u_char + +/* Define to `int' if doesn't define. */ +#undef uid_t + +/* Define to `unsigned short' if does not define. */ +#undef uint16_t + +/* Define to `unsigned int' if does not define. */ +#undef uint32_t + +/* Define to `unsigned long long' if does not define. */ +#undef uint64_t + +/* Define to `unsigned char' if does not define. */ +#undef uint8_t + +/* Define as `fork' if `vfork' does not work. */ +#undef vfork + +#if defined(OMITTED__D_GNU_SOURCE) && !defined(_GNU_SOURCE) +#define _GNU_SOURCE 1 +#endif + +#if defined(OMITTED__D_BSD_SOURCE) && !defined(_BSD_SOURCE) +#define _BSD_SOURCE 1 +#endif + +#if defined(OMITTED__D_DEFAULT_SOURCE) && !defined(_DEFAULT_SOURCE) +#define _DEFAULT_SOURCE 1 +#endif + +#if defined(OMITTED__D__EXTENSIONS__) && !defined(__EXTENSIONS__) +#define __EXTENSIONS__ 1 +#endif + +#if defined(OMITTED__D_POSIX_C_SOURCE_200112) && !defined(_POSIX_C_SOURCE) +#define _POSIX_C_SOURCE 200112 +#endif + +#if defined(OMITTED__D_XOPEN_SOURCE_600) && !defined(_XOPEN_SOURCE) +#define _XOPEN_SOURCE 600 +#endif + +#if defined(OMITTED__D_XOPEN_SOURCE_EXTENDED_1) && !defined(_XOPEN_SOURCE_EXTENDED) +#define _XOPEN_SOURCE_EXTENDED 1 +#endif + +#if defined(OMITTED__D_ALL_SOURCE) && !defined(_ALL_SOURCE) +#define _ALL_SOURCE 1 +#endif + +#if defined(OMITTED__D_LARGEFILE_SOURCE_1) && !defined(_LARGEFILE_SOURCE) +#define _LARGEFILE_SOURCE 1 +#endif + + + + +#ifndef _OPENBSD_SOURCE +#define _OPENBSD_SOURCE 1 +#endif + +#ifndef UNBOUND_DEBUG +# ifndef NDEBUG +# define NDEBUG +# endif +#endif + +/** Use small-ldns codebase */ +#define USE_SLDNS 1 +#ifdef HAVE_SSL +# define LDNS_BUILD_CONFIG_HAVE_SSL 1 +#endif + +#include +#include +#include +#include + +#if STDC_HEADERS +#include +#include +#endif + +#ifdef HAVE_STDARG_H +#include +#endif + +#ifdef HAVE_STDINT_H +#include +#endif + +#include + +#if HAVE_SYS_PARAM_H +#include +#endif + +#ifdef HAVE_SYS_SOCKET_H +#include +#endif + +#ifdef HAVE_SYS_UIO_H +#include +#endif + +#ifdef HAVE_NETINET_IN_H +#include +#endif + +#ifdef HAVE_NETINET_TCP_H +#include +#endif + +#ifdef HAVE_ARPA_INET_H +#include +#endif + +#ifdef HAVE_WINSOCK2_H +#include +#endif + +#ifdef HAVE_WS2TCPIP_H +#include +#endif + +#if !defined(USE_WINSOCK) || !defined(HAVE_SNPRINTF) || defined(SNPRINTF_RET_BROKEN) || defined(__USE_MINGW_ANSI_STDIO) +#define ARG_LL "%ll" +#else +#define ARG_LL "%I64" +#endif + +#ifndef AF_LOCAL +#define AF_LOCAL AF_UNIX +#endif + + + +#ifdef HAVE_ATTR_FORMAT +# define ATTR_FORMAT(archetype, string_index, first_to_check) \ + __attribute__ ((format (archetype, string_index, first_to_check))) +#else /* !HAVE_ATTR_FORMAT */ +# define ATTR_FORMAT(archetype, string_index, first_to_check) /* empty */ +#endif /* !HAVE_ATTR_FORMAT */ + + +#if defined(DOXYGEN) +# define ATTR_UNUSED(x) x +#elif defined(__cplusplus) +# define ATTR_UNUSED(x) +#elif defined(HAVE_ATTR_UNUSED) +# define ATTR_UNUSED(x) x __attribute__((unused)) +#else /* !HAVE_ATTR_UNUSED */ +# define ATTR_UNUSED(x) x +#endif /* !HAVE_ATTR_UNUSED */ + + +#ifndef HAVE_FSEEKO +#define fseeko fseek +#define ftello ftell +#endif /* HAVE_FSEEKO */ + + +#ifndef MAXHOSTNAMELEN +#define MAXHOSTNAMELEN 256 +#endif + +#if !defined(HAVE_SNPRINTF) || defined(SNPRINTF_RET_BROKEN) +#define snprintf snprintf_unbound +#define vsnprintf vsnprintf_unbound +#include +int snprintf (char *str, size_t count, const char *fmt, ...); +int vsnprintf (char *str, size_t count, const char *fmt, va_list arg); +#endif /* HAVE_SNPRINTF or SNPRINTF_RET_BROKEN */ + +#ifndef HAVE_INET_PTON +#define inet_pton inet_pton_unbound +int inet_pton(int af, const char* src, void* dst); +#endif /* HAVE_INET_PTON */ + + +#ifndef HAVE_INET_NTOP +#define inet_ntop inet_ntop_unbound +const char *inet_ntop(int af, const void *src, char *dst, size_t size); +#endif + + +#ifndef HAVE_INET_ATON +#define inet_aton inet_aton_unbound +int inet_aton(const char *cp, struct in_addr *addr); +#endif + + +#ifndef HAVE_MEMMOVE +#define memmove memmove_unbound +void *memmove(void *dest, const void *src, size_t n); +#endif + + +#ifndef HAVE_STRLCAT +#define strlcat strlcat_unbound +size_t strlcat(char *dst, const char *src, size_t siz); +#endif + + +#ifndef HAVE_STRLCPY +#define strlcpy strlcpy_unbound +size_t strlcpy(char *dst, const char *src, size_t siz); +#endif + + +#ifndef HAVE_GMTIME_R +#define gmtime_r gmtime_r_unbound +struct tm *gmtime_r(const time_t *timep, struct tm *result); +#endif + + +#ifndef HAVE_REALLOCARRAY +#define reallocarray reallocarrayunbound +void* reallocarray(void *ptr, size_t nmemb, size_t size); +#endif + + +#if !defined(HAVE_SLEEP) || defined(HAVE_WINDOWS_H) +#define sleep(x) Sleep((x)*1000) /* on win32 */ +#endif /* HAVE_SLEEP */ + + +#ifndef HAVE_USLEEP +#define usleep(x) Sleep((x)/1000 + 1) /* on win32 */ +#endif /* HAVE_USLEEP */ + + +#ifndef HAVE_RANDOM +#define random rand /* on win32, for tests only (bad random) */ +#endif /* HAVE_RANDOM */ + + +#ifndef HAVE_SRANDOM +#define srandom(x) srand(x) /* on win32, for tests only (bad random) */ +#endif /* HAVE_SRANDOM */ + + +/* detect if we need to cast to unsigned int for FD_SET to avoid warnings */ +#ifdef HAVE_WINSOCK2_H +#define FD_SET_T (u_int) +#else +#define FD_SET_T +#endif + + +#ifndef IPV6_MIN_MTU +#define IPV6_MIN_MTU 1280 +#endif /* IPV6_MIN_MTU */ + + +#ifdef MEMCMP_IS_BROKEN +#include "compat/memcmp.h" +#define memcmp memcmp_unbound +int memcmp(const void *x, const void *y, size_t n); +#endif + + + +#ifndef HAVE_CTIME_R +#define ctime_r unbound_ctime_r +char *ctime_r(const time_t *timep, char *buf); +#endif + +#ifndef HAVE_STRSEP +#define strsep unbound_strsep +char *strsep(char **stringp, const char *delim); +#endif + +#ifndef HAVE_ISBLANK +#define isblank unbound_isblank +int isblank(int c); +#endif + +#ifndef HAVE_EXPLICIT_BZERO +#define explicit_bzero unbound_explicit_bzero +void explicit_bzero(void* buf, size_t len); +#endif + +#if defined(HAVE_INET_NTOP) && !HAVE_DECL_INET_NTOP +const char *inet_ntop(int af, const void *src, char *dst, size_t size); +#endif + +#if defined(HAVE_INET_PTON) && !HAVE_DECL_INET_PTON +int inet_pton(int af, const char* src, void* dst); +#endif + +#if !defined(HAVE_STRPTIME) || !defined(STRPTIME_WORKS) +#define strptime unbound_strptime +struct tm; +char *strptime(const char *s, const char *format, struct tm *tm); +#endif + +#if !HAVE_DECL_REALLOCARRAY +void *reallocarray(void *ptr, size_t nmemb, size_t size); +#endif + +#ifdef HAVE_LIBBSD +#include +#include +#endif + +#ifdef HAVE_LIBRESSL +# if !HAVE_DECL_STRLCPY +size_t strlcpy(char *dst, const char *src, size_t siz); +# endif +# if !HAVE_DECL_STRLCAT +size_t strlcat(char *dst, const char *src, size_t siz); +# endif +# if !HAVE_DECL_ARC4RANDOM && defined(HAVE_ARC4RANDOM) +uint32_t arc4random(void); +# endif +# if !HAVE_DECL_ARC4RANDOM_UNIFORM && defined(HAVE_ARC4RANDOM_UNIFORM) +uint32_t arc4random_uniform(uint32_t upper_bound); +# endif +#endif /* HAVE_LIBRESSL */ +#ifndef HAVE_ARC4RANDOM +int getentropy(void* buf, size_t len); +uint32_t arc4random(void); +void arc4random_buf(void* buf, size_t n); +void _ARC4_LOCK(void); +void _ARC4_UNLOCK(void); +void _ARC4_LOCK_DESTROY(void); +#endif +#ifndef HAVE_ARC4RANDOM_UNIFORM +uint32_t arc4random_uniform(uint32_t upper_bound); +#endif +#ifdef COMPAT_SHA512 +#ifndef SHA512_DIGEST_LENGTH +#define SHA512_BLOCK_LENGTH 128 +#define SHA512_DIGEST_LENGTH 64 +#define SHA512_DIGEST_STRING_LENGTH (SHA512_DIGEST_LENGTH * 2 + 1) +typedef struct _SHA512_CTX { + uint64_t state[8]; + uint64_t bitcount[2]; + uint8_t buffer[SHA512_BLOCK_LENGTH]; +} SHA512_CTX; +#endif /* SHA512_DIGEST_LENGTH */ +void SHA512_Init(SHA512_CTX*); +void SHA512_Update(SHA512_CTX*, void*, size_t); +void SHA512_Final(uint8_t[SHA512_DIGEST_LENGTH], SHA512_CTX*); +unsigned char *SHA512(void* data, unsigned int data_len, unsigned char *digest); +#endif /* COMPAT_SHA512 */ + + + +#if defined(HAVE_EVENT_H) && !defined(HAVE_EVENT_BASE_ONCE) && !(defined(HAVE_EV_LOOP) || defined(HAVE_EV_DEFAULT_LOOP)) && (defined(HAVE_PTHREAD) || defined(HAVE_SOLARIS_THREADS)) + /* using version of libevent that is not threadsafe. */ +# define LIBEVENT_SIGNAL_PROBLEM 1 +#endif + +#ifndef CHECKED_INET6 +# define CHECKED_INET6 +# ifdef AF_INET6 +# define INET6 +# else +# define AF_INET6 28 +# endif +#endif /* CHECKED_INET6 */ + +#ifndef HAVE_GETADDRINFO +struct sockaddr_storage; +#include "compat/fake-rfc2553.h" +#endif + +#ifdef UNBOUND_ALLOC_STATS +# define malloc(s) unbound_stat_malloc_log(s, __FILE__, __LINE__, __func__) +# define calloc(n,s) unbound_stat_calloc_log(n, s, __FILE__, __LINE__, __func__) +# define free(p) unbound_stat_free_log(p, __FILE__, __LINE__, __func__) +# define realloc(p,s) unbound_stat_realloc_log(p, s, __FILE__, __LINE__, __func__) +void *unbound_stat_malloc(size_t size); +void *unbound_stat_calloc(size_t nmemb, size_t size); +void unbound_stat_free(void *ptr); +void *unbound_stat_realloc(void *ptr, size_t size); +void *unbound_stat_malloc_log(size_t size, const char* file, int line, + const char* func); +void *unbound_stat_calloc_log(size_t nmemb, size_t size, const char* file, + int line, const char* func); +void unbound_stat_free_log(void *ptr, const char* file, int line, + const char* func); +void *unbound_stat_realloc_log(void *ptr, size_t size, const char* file, + int line, const char* func); +#elif defined(UNBOUND_ALLOC_LITE) +# include "util/alloc.h" +#endif /* UNBOUND_ALLOC_LITE and UNBOUND_ALLOC_STATS */ + +/** default port for DNS traffic. */ +#define UNBOUND_DNS_PORT 53 +/** default port for DNS over TLS traffic. */ +#define UNBOUND_DNS_OVER_TLS_PORT 853 +/** default port for DNS over HTTPS traffic. */ +#define UNBOUND_DNS_OVER_HTTPS_PORT 443 +/** default port for unbound control traffic, registered port with IANA, + ub-dns-control 8953/tcp unbound dns nameserver control */ +#define UNBOUND_CONTROL_PORT 8953 +/** the version of unbound-control that this software implements */ +#define UNBOUND_CONTROL_VERSION 1 + + diff --git a/config.sub b/config.sub index 6ae25027537a..defe52c0c874 100755 --- a/config.sub +++ b/config.sub @@ -4,7 +4,7 @@ # shellcheck disable=SC2006,SC2268 # see below for rationale -timestamp='2023-07-31' +timestamp='2023-09-19' # 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 @@ -1181,7 +1181,7 @@ case $cpu-$vendor in case $cpu in 1750a | 580 \ | a29k \ - | aarch64 | aarch64_be \ + | aarch64 | aarch64_be | aarch64c | arm64ec \ | abacus \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] \ @@ -1200,6 +1200,7 @@ case $cpu-$vendor in | d10v | d30v | dlx | dsp16xx \ | e2k | elxsi | epiphany \ | f30[01] | f700 | fido | fr30 | frv | ft32 | fx80 \ + | javascript \ | h8300 | h8500 \ | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ @@ -1284,11 +1285,12 @@ esac # Decode manufacturer-specific aliases for certain operating systems. -if test x$basic_os != x +if test x"$basic_os" != x then # First recognize some ad-hoc cases, or perhaps split kernel-os, or else just # set os. +obj= case $basic_os in gnu/linux*) kernel=linux @@ -1488,10 +1490,16 @@ case $os in os=eabi ;; *) - os=elf + os= + obj=elf ;; esac ;; + aout* | coff* | elf* | pe*) + # These are machine code file formats, not OSes + obj=$os + os= + ;; *) # No normalization, but not necessarily accepted, that comes below. ;; @@ -1510,12 +1518,15 @@ else # system, and we'll never get to this point. kernel= +obj= case $cpu-$vendor in score-*) - os=elf + os= + obj=elf ;; spu-*) - os=elf + os= + obj=elf ;; *-acorn) os=riscix1.2 @@ -1525,28 +1536,35 @@ case $cpu-$vendor in os=gnu ;; arm*-semi) - os=aout + os= + obj=aout ;; c4x-* | tic4x-*) - os=coff + os= + obj=coff ;; c8051-*) - os=elf + os= + obj=elf ;; clipper-intergraph) os=clix ;; hexagon-*) - os=elf + os= + obj=elf ;; tic54x-*) - os=coff + os= + obj=coff ;; tic55x-*) - os=coff + os= + obj=coff ;; tic6x-*) - os=coff + os= + obj=coff ;; # This must come before the *-dec entry. pdp10-*) @@ -1568,19 +1586,24 @@ case $cpu-$vendor in os=sunos3 ;; m68*-cisco) - os=aout + os= + obj=aout ;; mep-*) - os=elf + os= + obj=elf ;; mips*-cisco) - os=elf + os= + obj=elf ;; mips*-*) - os=elf + os= + obj=elf ;; or32-*) - os=coff + os= + obj=coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=sysv3 @@ -1589,7 +1612,8 @@ case $cpu-$vendor in os=sunos4.1.1 ;; pru-*) - os=elf + os= + obj=elf ;; *-be) os=beos @@ -1670,10 +1694,12 @@ case $cpu-$vendor in os=uxpv ;; *-rom68k) - os=coff + os= + obj=coff ;; *-*bug) - os=coff + os= + obj=coff ;; *-apple) os=macos @@ -1691,7 +1717,8 @@ esac fi -# Now, validate our (potentially fixed-up) OS. +# Now, validate our (potentially fixed-up) individual pieces (OS, OBJ). + case $os in # Sometimes we do "kernel-libc", so those need to count as OSes. musl* | newlib* | relibc* | uclibc*) @@ -1702,6 +1729,9 @@ case $os in # VxWorks passes extra cpu info in the 4th filed. simlinux | simwindows | spe) ;; + # See `case $cpu-$os` validation below + ghcjs) + ;; # Now accept the basic system types. # The portable systems comes first. # Each alternative MUST end in a * to match a version number. @@ -1719,11 +1749,11 @@ case $os in | mirbsd* | netbsd* | dicos* | openedition* | ose* \ | bitrig* | openbsd* | secbsd* | solidbsd* | libertybsd* | os108* \ | ekkobsd* | freebsd* | riscix* | lynxos* | os400* \ - | bosx* | nextstep* | cxux* | aout* | elf* | oabi* \ - | ptx* | coff* | ecoff* | winnt* | domain* | vsta* \ + | bosx* | nextstep* | cxux* | oabi* \ + | ptx* | ecoff* | winnt* | domain* | vsta* \ | udi* | lites* | ieee* | go32* | aux* | hcos* \ | chorusrdb* | cegcc* | glidix* | serenity* \ - | cygwin* | msys* | pe* | moss* | proelf* | rtems* \ + | cygwin* | msys* | moss* | proelf* | rtems* \ | midipix* | mingw32* | mingw64* | mint* \ | uxpv* | beos* | mpeix* | udk* | moxiebox* \ | interix* | uwin* | mks* | rhapsody* | darwin* \ @@ -1747,60 +1777,95 @@ case $os in kernel* | msvc* ) # Restricted further below ;; + '') + if test x"$obj" = x + then + echo "Invalid configuration '$1': Blank OS only allowed with explicit machine code file format" 1>&2 + fi + ;; *) echo "Invalid configuration '$1': OS '$os' not recognized" 1>&2 exit 1 ;; esac +case $obj in + aout* | coff* | elf* | pe*) + ;; + '') + # empty is fine + ;; + *) + echo "Invalid configuration '$1': Machine code format '$obj' not recognized" 1>&2 + exit 1 + ;; +esac + +# Here we handle the constraint that a (synthetic) cpu and os are +# valid only in combination with each other and nowhere else. +case $cpu-$os in + # The "javascript-unknown-ghcjs" triple is used by GHC; we + # accept it here in order to tolerate that, but reject any + # variations. + javascript-ghcjs) + ;; + javascript-* | *-ghcjs) + echo "Invalid configuration '$1': cpu '$cpu' is not valid with os '$os$obj'" 1>&2 + exit 1 + ;; +esac + # As a final step for OS-related things, validate the OS-kernel combination # (given a valid OS), if there is a kernel. -case $kernel-$os in - linux-gnu* | linux-dietlibc* | linux-android* | linux-newlib* \ - | linux-musl* | linux-relibc* | linux-uclibc* | linux-mlibc* ) +case $kernel-$os-$obj in + linux-gnu*- | linux-dietlibc*- | linux-android*- | linux-newlib*- \ + | linux-musl*- | linux-relibc*- | linux-uclibc*- | linux-mlibc*- ) ;; - uclinux-uclibc* ) + uclinux-uclibc*- ) ;; - managarm-mlibc* | managarm-kernel* ) + managarm-mlibc*- | managarm-kernel*- ) ;; - windows*-gnu* | windows*-msvc*) + windows*-msvc*-) ;; - -dietlibc* | -newlib* | -musl* | -relibc* | -uclibc* | -mlibc* ) + -dietlibc*- | -newlib*- | -musl*- | -relibc*- | -uclibc*- | -mlibc*- ) # These are just libc implementations, not actual OSes, and thus # require a kernel. echo "Invalid configuration '$1': libc '$os' needs explicit kernel." 1>&2 exit 1 ;; - -kernel* ) + -kernel*- ) echo "Invalid configuration '$1': '$os' needs explicit kernel." 1>&2 exit 1 ;; - *-kernel* ) + *-kernel*- ) echo "Invalid configuration '$1': '$kernel' does not support '$os'." 1>&2 exit 1 ;; - *-msvc* ) + *-msvc*- ) echo "Invalid configuration '$1': '$os' needs 'windows'." 1>&2 exit 1 ;; - kfreebsd*-gnu* | kopensolaris*-gnu*) + kfreebsd*-gnu*- | kopensolaris*-gnu*-) ;; - vxworks-simlinux | vxworks-simwindows | vxworks-spe) + vxworks-simlinux- | vxworks-simwindows- | vxworks-spe-) ;; - nto-qnx*) + nto-qnx*-) ;; - os2-emx) + os2-emx-) ;; - *-eabi* | *-gnueabi*) + *-eabi*- | *-gnueabi*-) ;; - none-coff* | none-elf*) + none--*) # None (no kernel, i.e. freestanding / bare metal), - # can be paired with an output format "OS" + # can be paired with an machine code file format ;; - -*) + -*-) # Blank kernel with real OS is always fine. ;; - *-*) + --*) + # Blank kernel and OS with real machine code file format is always fine. + ;; + *-*-*) echo "Invalid configuration '$1': Kernel '$kernel' not known to work with OS '$os'." 1>&2 exit 1 ;; @@ -1884,7 +1949,7 @@ case $vendor in ;; esac -echo "$cpu-$vendor-${kernel:+$kernel-}$os" +echo "$cpu-$vendor${kernel:+-$kernel}${os:+-$os}${obj:+-$obj}" exit # Local variables: diff --git a/configure b/configure index a77094ff7671..fbe6f8697742 100755 --- a/configure +++ b/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for unbound 1.18.0. +# Generated by GNU Autoconf 2.69 for unbound 1.19.0. # # Report bugs to . # @@ -591,8 +591,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='unbound' PACKAGE_TARNAME='unbound' -PACKAGE_VERSION='1.18.0' -PACKAGE_STRING='unbound 1.18.0' +PACKAGE_VERSION='1.19.0' +PACKAGE_STRING='unbound 1.19.0' PACKAGE_BUGREPORT='unbound-bugs@nlnetlabs.nl or https://github.com/NLnetLabs/unbound/issues' PACKAGE_URL='' @@ -1477,7 +1477,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures unbound 1.18.0 to adapt to many kinds of systems. +\`configure' configures unbound 1.19.0 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1543,7 +1543,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of unbound 1.18.0:";; + short | recursive ) echo "Configuration of unbound 1.19.0:";; esac cat <<\_ACEOF @@ -1785,7 +1785,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -unbound configure 1.18.0 +unbound configure 1.19.0 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2494,7 +2494,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by unbound $as_me 1.18.0, which was +It was created by unbound $as_me 1.19.0, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -2844,13 +2844,13 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu UNBOUND_VERSION_MAJOR=1 -UNBOUND_VERSION_MINOR=18 +UNBOUND_VERSION_MINOR=19 UNBOUND_VERSION_MICRO=0 LIBUNBOUND_CURRENT=9 -LIBUNBOUND_REVISION=22 +LIBUNBOUND_REVISION=23 LIBUNBOUND_AGE=1 # 1.0.0 had 0:12:0 # 1.0.1 had 0:13:0 @@ -2940,6 +2940,7 @@ LIBUNBOUND_AGE=1 # 1.17.0 had 9:20:1 # 1.17.1 had 9:21:1 # 1.18.0 had 9:22:1 +# 1.19.0 had 9:23:1 # Current -- the number of the binary API that we're implementing # Revision -- which iteration of the implementation of the binary @@ -4604,450 +4605,186 @@ fi default_cflags=yes 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 -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. -set dummy ${ac_tool_prefix}gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : + case $ac_cv_prog_cc_stdc in #( + no) : + ac_cv_prog_cc_c99=no; ac_cv_prog_cc_c89=no ;; #( + *) : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C99" >&5 +$as_echo_n "checking for $CC option to accept ISO C99... " >&6; } +if ${ac_cv_prog_cc_c99+:} false; then : $as_echo_n "(cached) " >&6 else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_CC="${ac_tool_prefix}gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_CC"; then - ac_ct_CC=$CC - # Extract the first word of "gcc", so it can be a program name with args. -set dummy gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_CC="gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -else - CC="$ac_cv_prog_CC" -fi - -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. -set dummy ${ac_tool_prefix}cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_CC="${ac_tool_prefix}cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - fi -fi -if test -z "$CC"; then - # Extract the first word of "cc", so it can be a program name with args. -set dummy cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else - ac_prog_rejected=no -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then - ac_prog_rejected=yes - continue - fi - ac_cv_prog_CC="cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -if test $ac_prog_rejected = yes; then - # We found a bogon in the path, so make sure we never use it. - set dummy $ac_cv_prog_CC - shift - if test $# != 0; then - # We chose a different compiler from the bogus one. - # However, it has the same basename, so the bogon will be chosen - # first if we set CC to just the basename; use the full file name. - shift - ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" - fi -fi -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - for ac_prog in cl.exe - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_CC="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$CC" && break - done -fi -if test -z "$CC"; then - ac_ct_CC=$CC - for ac_prog in cl.exe -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_CC="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$ac_ct_CC" && break -done - - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -fi - -fi - - -test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$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; } - -# Provide some information about the compiler. -$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 -set X $ac_compile -ac_compiler=$2 -for ac_option in --version -v -V -qversion; do - { { ac_try="$ac_compiler $ac_option >&5" -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\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compiler $ac_option >&5") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - sed '10a\ -... rest of stderr output deleted ... - 10q' conftest.err >conftest.er1 - cat conftest.er1 >&5 - fi - rm -f conftest.er1 conftest.err - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -done - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 -$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } -if ${ac_cv_c_compiler_gnu+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + ac_cv_prog_cc_c99=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ +#include +#include +#include +#include +#include -int -main () +// Check varargs macros. These examples are taken from C99 6.10.3.5. +#define debug(...) fprintf (stderr, __VA_ARGS__) +#define showlist(...) puts (#__VA_ARGS__) +#define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) +static void +test_varargs_macros (void) { -#ifndef __GNUC__ - choke me + int x = 1234; + int y = 5678; + debug ("Flag"); + debug ("X = %d\n", x); + showlist (The first, second, and third items.); + report (x>y, "x is %d but y is %d", x, y); +} + +// Check long long types. +#define BIG64 18446744073709551615ull +#define BIG32 4294967295ul +#define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) +#if !BIG_OK + your preprocessor is broken; #endif +#if BIG_OK +#else + your preprocessor is broken; +#endif +static long long int bignum = -9223372036854775807LL; +static unsigned long long int ubignum = BIG64; - ; +struct incomplete_array +{ + int datasize; + double data[]; +}; + +struct named_init { + int number; + const wchar_t *name; + double average; +}; + +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) + continue; return 0; } -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_compiler_gnu=yes -else - ac_compiler_gnu=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_c_compiler_gnu=$ac_compiler_gnu -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 -$as_echo "$ac_cv_c_compiler_gnu" >&6; } -if test $ac_compiler_gnu = yes; then - GCC=yes -else - GCC= -fi -ac_test_CFLAGS=${CFLAGS+set} -ac_save_CFLAGS=$CFLAGS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 -$as_echo_n "checking whether $CC accepts -g... " >&6; } -if ${ac_cv_prog_cc_g+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_save_c_werror_flag=$ac_c_werror_flag - ac_c_werror_flag=yes - ac_cv_prog_cc_g=no - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ +// Check varargs and va_copy. +static void +test_varargs (const char *format, ...) +{ + va_list args; + va_start (args, format); + va_list args_copy; + va_copy (args_copy, args); + + const char *str; + int number; + float fnumber; + + while (*format) + { + switch (*format++) + { + case 's': // string + str = va_arg (args_copy, const char *); + break; + case 'd': // int + number = va_arg (args_copy, int); + break; + case 'f': // float + fnumber = va_arg (args_copy, double); + break; + default: + break; + } + } + va_end (args_copy); + va_end (args); +} int main () { - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_g=yes -else - CFLAGS="" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ + // Check bool. + _Bool success = false; -int -main () -{ + // Check restrict. + if (test_restrict ("String literal") == 0) + success = true; + char *restrict newvar = "Another string"; + + // Check varargs. + test_varargs ("s, d' f .", "string", 65, 34.234); + test_varargs_macros (); + + // Check flexible array members. + struct incomplete_array *ia = + malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); + ia->datasize = 10; + for (int i = 0; i < ia->datasize; ++i) + ia->data[i] = i * 1.234; + + // Check named initializers. + struct named_init ni = { + .number = 34, + .name = L"Test wide string", + .average = 543.34343, + }; + + ni.number = 58; + + int dynamic_array[ni.number]; + dynamic_array[ni.number - 1] = 543; + + // work around unused variable warnings + return (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == 'x' + || dynamic_array[ni.number - 1] != 543); ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +for ac_arg in '' -std=gnu99 -std=c99 -c99 -AC99 -D_STDC_C99= -qlanglvl=extc99 +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c99=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c99" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c99" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c99" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 +$as_echo "$ac_cv_prog_cc_c99" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c99" != xno; then : + ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 else - ac_c_werror_flag=$ac_save_c_werror_flag - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_g=yes -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_c_werror_flag=$ac_save_c_werror_flag -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 -$as_echo "$ac_cv_prog_cc_g" >&6; } -if test "$ac_test_CFLAGS" = set; then - CFLAGS=$ac_save_CFLAGS -elif test $ac_cv_prog_cc_g = yes; then - if test "$GCC" = yes; then - CFLAGS="-g -O2" - else - CFLAGS="-g" - fi -else - if test "$GCC" = yes; then - CFLAGS="-O2" - else - CFLAGS= - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 @@ -5134,14 +4871,31 @@ $as_echo "unsupported" >&6; } ;; $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : - + ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 +else + ac_cv_prog_cc_stdc=no 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 +fi + ;; +esac + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO Standard C" >&5 +$as_echo_n "checking for $CC option to accept ISO Standard C... " >&6; } + if ${ac_cv_prog_cc_stdc+:} false; then : + $as_echo_n "(cached) " >&6 +fi + + case $ac_cv_prog_cc_stdc in #( + no) : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; #( + '') : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; #( + *) : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_stdc" >&5 +$as_echo "$ac_cv_prog_cc_stdc" >&6; } ;; +esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking $CC dependency flag" >&5 @@ -16247,10 +16001,7 @@ _ACEOF $as_echo_n "checking whether strptime works... " >&6; } if test c${cross_compiling} = cno; then if test "$cross_compiling" = yes; then : - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot run test program while cross compiling -See \`config.log' for more details" "$LINENO" 5; } + eval "ac_cv_c_strptime_works=maybe" else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -19039,10 +18790,7 @@ if test -n "$ssldir"; then CFLAGS="$CFLAGS -Wl,-rpath,$ssldir_lib" fi if test "$cross_compiling" = yes; then : - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot run test program while cross compiling -See \`config.log' for more details" "$LINENO" 5; } + eval "ac_cv_c_gost_works=maybe" else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -20916,10 +20664,8 @@ if test "x$ac_cv_func_snprintf" = xyes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for correct snprintf return value" >&5 $as_echo_n "checking for correct snprintf return value... " >&6; } if test "$cross_compiling" = yes; then : - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot run test program while cross compiling -See \`config.log' for more details" "$LINENO" 5; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: maybe" >&5 +$as_echo "maybe" >&6; } else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -21594,7 +21340,7 @@ if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" else - as_fn_error $? "The protobuf-c library was not found. Please install protobuf-c!" "$LINENO" 5 + as_fn_error $? "The protobuf-c library was not found. Please install the development libraries for protobuf-c!" "$LINENO" 5 fi @@ -22148,7 +21894,7 @@ _ACEOF -version=1.18.0 +version=1.19.0 date=`date +'%b %e, %Y'` @@ -22667,7 +22413,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by unbound $as_me 1.18.0, which was +This file was extended by unbound $as_me 1.19.0, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -22733,7 +22479,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -unbound config.status 1.18.0 +unbound config.status 1.19.0 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff --git a/configure.ac b/configure.ac index 098988f55f8a..1b999596d09a 100644 --- a/configure.ac +++ b/configure.ac @@ -10,7 +10,7 @@ sinclude(dnscrypt/dnscrypt.m4) # must be numbers. ac_defun because of later processing m4_define([VERSION_MAJOR],[1]) -m4_define([VERSION_MINOR],[18]) +m4_define([VERSION_MINOR],[19]) m4_define([VERSION_MICRO],[0]) AC_INIT([unbound],m4_defn([VERSION_MAJOR]).m4_defn([VERSION_MINOR]).m4_defn([VERSION_MICRO]),[unbound-bugs@nlnetlabs.nl or https://github.com/NLnetLabs/unbound/issues],[unbound]) AC_SUBST(UNBOUND_VERSION_MAJOR, [VERSION_MAJOR]) @@ -18,7 +18,7 @@ AC_SUBST(UNBOUND_VERSION_MINOR, [VERSION_MINOR]) AC_SUBST(UNBOUND_VERSION_MICRO, [VERSION_MICRO]) LIBUNBOUND_CURRENT=9 -LIBUNBOUND_REVISION=22 +LIBUNBOUND_REVISION=23 LIBUNBOUND_AGE=1 # 1.0.0 had 0:12:0 # 1.0.1 had 0:13:0 @@ -108,6 +108,7 @@ LIBUNBOUND_AGE=1 # 1.17.0 had 9:20:1 # 1.17.1 had 9:21:1 # 1.18.0 had 9:22:1 +# 1.19.0 had 9:23:1 # Current -- the number of the binary API that we're implementing # Revision -- which iteration of the implementation of the binary @@ -279,7 +280,7 @@ ACX_CHECK_COMPILER_FLAG(g, [CFLAGS="$CFLAGS -g"]) ACX_CHECK_COMPILER_FLAG(O2, [CFLAGS="$CFLAGS -O2"]) default_cflags=yes fi -AC_PROG_CC +m4_version_prereq([2.70], [AC_PROG_CC], [AC_PROG_CC_STDC]) ACX_DEPFLAG ACX_DETERMINE_EXT_FLAGS_UNBOUND @@ -525,7 +526,8 @@ res = strptime("2010-07-15T00:00:00+00:00", "%t%Y%t-%t%m%t-%t%d%tT%t%H%t:%t%M%t: if (!res) return 2; res = strptime("20070207111842", "%Y%m%d%H%M%S", &tm); if (!res) return 1; return 0; } -]])] , [eval "ac_cv_c_strptime_works=yes"], [eval "ac_cv_c_strptime_works=no"]) +]])] , [eval "ac_cv_c_strptime_works=yes"], [eval "ac_cv_c_strptime_works=no"], +[eval "ac_cv_c_strptime_works=maybe"]) else eval "ac_cv_c_strptime_works=maybe" fi @@ -1137,7 +1139,8 @@ int main(void) { return 6; return 0; } -]])] , [eval "ac_cv_c_gost_works=yes"], [eval "ac_cv_c_gost_works=no"]) +]])] , [eval "ac_cv_c_gost_works=yes"], [eval "ac_cv_c_gost_works=no"], +[eval "ac_cv_c_gost_works=maybe"]) CFLAGS="$BAKCFLAGS" else eval "ac_cv_c_gost_works=maybe" @@ -1714,7 +1717,7 @@ int main(void) { return !(snprintf(NULL, 0, "test") == 4); } AC_MSG_RESULT(no) AC_DEFINE([SNPRINTF_RET_BROKEN], [], [define if (v)snprintf does not return length needed, (but length used)]) AC_LIBOBJ(snprintf) - ]) + ], [AC_MSG_RESULT(maybe)]) fi fi AC_REPLACE_FUNCS(strlcat) @@ -1944,7 +1947,7 @@ case "$enable_explicit_port_randomisation" in esac if echo "$host" | $GREP -i -e linux >/dev/null; then - AC_ARG_ENABLE(linux-ip-local-port-range, AC_HELP_STRING([--enable-linux-ip-local-port-range], [Define this to enable use of /proc/sys/net/ipv4/ip_local_port_range as a default outgoing port range. This is only for the libunbound on Linux and does not affect unbound resolving daemon itself. This may severely limit the number of available outgoing ports and thus decrease randomness. Define this only when the target system restricts (e.g. some of SELinux enabled distributions) the use of non-ephemeral ports.])) + AC_ARG_ENABLE(linux-ip-local-port-range, AS_HELP_STRING([--enable-linux-ip-local-port-range], [Define this to enable use of /proc/sys/net/ipv4/ip_local_port_range as a default outgoing port range. This is only for the libunbound on Linux and does not affect unbound resolving daemon itself. This may severely limit the number of available outgoing ports and thus decrease randomness. Define this only when the target system restricts (e.g. some of SELinux enabled distributions) the use of non-ephemeral ports.])) case "$enable_linux_ip_local_port_range" in yes) AC_DEFINE([USE_LINUX_IP_LOCAL_PORT_RANGE], [1], [Define this to enable use of /proc/sys/net/ipv4/ip_local_port_range as a default outgoing port range. This is only for the libunbound on Linux and does not affect unbound resolving daemon itself. This may severely limit the number of available outgoing ports and thus decrease randomness. Define this only when the target system restricts (e.g. some of SELinux enabled distributions) the use of non-ephemeral ports.]) diff --git a/daemon/remote.c b/daemon/remote.c index 4990fc8e9195..3eb711ce6428 100644 --- a/daemon/remote.c +++ b/daemon/remote.c @@ -523,12 +523,13 @@ ssl_print_text(RES* res, const char* text) if(res->ssl) { ERR_clear_error(); if((r=SSL_write(res->ssl, text, (int)strlen(text))) <= 0) { - if(SSL_get_error(res->ssl, r) == SSL_ERROR_ZERO_RETURN) { + int r2; + if((r2=SSL_get_error(res->ssl, r)) == SSL_ERROR_ZERO_RETURN) { verbose(VERB_QUERY, "warning, in SSL_write, peer " "closed connection"); return 0; } - log_crypto_err("could not SSL_write"); + log_crypto_err_io("could not SSL_write", r2); return 0; } } else { @@ -579,11 +580,12 @@ ssl_read_line(RES* res, char* buf, size_t max) if(res->ssl) { ERR_clear_error(); if((r=SSL_read(res->ssl, buf+len, 1)) <= 0) { - if(SSL_get_error(res->ssl, r) == SSL_ERROR_ZERO_RETURN) { + int r2; + if((r2=SSL_get_error(res->ssl, r)) == SSL_ERROR_ZERO_RETURN) { buf[len] = 0; return 1; } - log_crypto_err("could not SSL_read"); + log_crypto_err_io("could not SSL_read", r2); return 0; } } else { @@ -596,7 +598,7 @@ ssl_read_line(RES* res, char* buf, size_t max) } if(errno == EINTR || errno == EAGAIN) continue; - log_err("could not recv: %s", + if(rr < 0) log_err("could not recv: %s", sock_strerror(errno)); return 0; } @@ -1223,8 +1225,8 @@ do_zones_add(RES* ssl, struct local_zones* zones) char buf[2048]; int num = 0; while(ssl_read_line(ssl, buf, sizeof(buf))) { - if(buf[0] == 0x04 && buf[1] == 0) - break; /* end of transmission */ + if(buf[0] == 0 || (buf[0] == 0x04 && buf[1] == 0)) + break; /* zero byte line or end of transmission */ if(!perform_zone_add(ssl, zones, buf)) { if(!ssl_printf(ssl, "error for input line: %s\n", buf)) return; @@ -1272,8 +1274,8 @@ do_zones_remove(RES* ssl, struct local_zones* zones) char buf[2048]; int num = 0; while(ssl_read_line(ssl, buf, sizeof(buf))) { - if(buf[0] == 0x04 && buf[1] == 0) - break; /* end of transmission */ + if(buf[0] == 0 || (buf[0] == 0x04 && buf[1] == 0)) + break; /* zero byte line or end of transmission */ if(!perform_zone_remove(ssl, zones, buf)) { if(!ssl_printf(ssl, "error for input line: %s\n", buf)) return; @@ -1336,8 +1338,8 @@ do_datas_add(RES* ssl, struct local_zones* zones) char buf[2048]; int num = 0, line = 0; while(ssl_read_line(ssl, buf, sizeof(buf))) { - if(buf[0] == 0x04 && buf[1] == 0) - break; /* end of transmission */ + if(buf[0] == 0 || (buf[0] == 0x04 && buf[1] == 0)) + break; /* zero byte line or end of transmission */ line++; if(perform_data_add(ssl, zones, buf, line)) num++; @@ -1376,8 +1378,8 @@ do_datas_remove(RES* ssl, struct local_zones* zones) char buf[2048]; int num = 0; while(ssl_read_line(ssl, buf, sizeof(buf))) { - if(buf[0] == 0x04 && buf[1] == 0) - break; /* end of transmission */ + if(buf[0] == 0 || (buf[0] == 0x04 && buf[1] == 0)) + break; /* zero byte line or end of transmission */ if(!perform_data_remove(ssl, zones, buf)) { if(!ssl_printf(ssl, "error for input line: %s\n", buf)) return; @@ -3222,9 +3224,10 @@ handle_req(struct daemon_remote* rc, struct rc_state* s, RES* res) if(res->ssl) { ERR_clear_error(); if((r=SSL_read(res->ssl, magic, (int)sizeof(magic)-1)) <= 0) { - if(SSL_get_error(res->ssl, r) == SSL_ERROR_ZERO_RETURN) + int r2; + if((r2=SSL_get_error(res->ssl, r)) == SSL_ERROR_ZERO_RETURN) return; - log_crypto_err("could not SSL_read"); + log_crypto_err_io("could not SSL_read", r2); return; } } else { @@ -3291,7 +3294,7 @@ remote_handshake_later(struct daemon_remote* rc, struct rc_state* s, log_err("remote control connection closed prematurely"); log_addr(VERB_OPS, "failed connection from", &s->c->repinfo.remote_addr, s->c->repinfo.remote_addrlen); - log_crypto_err("remote control failed ssl"); + log_crypto_err_io("remote control failed ssl", r2); clean_point(rc, s); } return 0; diff --git a/daemon/worker.c b/daemon/worker.c index 8c6fa3b9af33..8ae05eb67e66 100644 --- a/daemon/worker.c +++ b/daemon/worker.c @@ -66,6 +66,7 @@ #include "util/data/msgencode.h" #include "util/data/dname.h" #include "util/fptr_wlist.h" +#include "util/proxy_protocol.h" #include "util/tube.h" #include "util/edns.h" #include "util/timeval_func.h" @@ -542,6 +543,8 @@ answer_norec_from_cache(struct worker* worker, struct query_info* qinfo, edns->udp_size = EDNS_ADVERTISED_SIZE; edns->ext_rcode = 0; edns->bits &= EDNS_DO; + if(worker->env.cfg->disable_edns_do && (edns->bits & EDNS_DO)) + edns->edns_present = 0; if(!inplace_cb_reply_cache_call(&worker->env, qinfo, NULL, msg->rep, (int)(flags&LDNS_RCODE_MASK), edns, repinfo, worker->scratchpad, worker->env.now_tv)) @@ -702,6 +705,8 @@ answer_from_cache(struct worker* worker, struct query_info* qinfo, edns->udp_size = EDNS_ADVERTISED_SIZE; edns->ext_rcode = 0; edns->bits &= EDNS_DO; + if(worker->env.cfg->disable_edns_do && (edns->bits & EDNS_DO)) + edns->edns_present = 0; if(!inplace_cb_reply_servfail_call(&worker->env, qinfo, NULL, rep, LDNS_RCODE_SERVFAIL, edns, repinfo, worker->scratchpad, worker->env.now_tv)) @@ -742,6 +747,8 @@ answer_from_cache(struct worker* worker, struct query_info* qinfo, edns->udp_size = EDNS_ADVERTISED_SIZE; edns->ext_rcode = 0; edns->bits &= EDNS_DO; + if(worker->env.cfg->disable_edns_do && (edns->bits & EDNS_DO)) + edns->edns_present = 0; *alias_rrset = NULL; /* avoid confusion if caller set it to non-NULL */ if((worker->daemon->use_response_ip || worker->daemon->use_rpz) && !partial_rep && !apply_respip_action(worker, qinfo, cinfo, rep, @@ -2317,6 +2324,7 @@ worker_init(struct worker* worker, struct config_file *cfg, worker->env.cfg->stat_interval); worker_restart_timer(worker); } + pp_init(&sldns_write_uint16, &sldns_write_uint32); return 1; } diff --git a/dns64/dns64.c b/dns64/dns64.c index 1e31f51e831f..83fb027790e0 100644 --- a/dns64/dns64.c +++ b/dns64/dns64.c @@ -573,28 +573,29 @@ static enum module_ext_state handle_event_pass(struct module_qstate* qstate, int id) { struct dns64_qstate* iq = (struct dns64_qstate*)qstate->minfo[id]; - if (iq && iq->state == DNS64_NEW_QUERY - && qstate->qinfo.qtype == LDNS_RR_TYPE_PTR - && qstate->qinfo.qname_len == 74 - && !strcmp((char*)&qstate->qinfo.qname[64], "\03ip6\04arpa")) - /* Handle PTR queries for IPv6 addresses. */ - return handle_ipv6_ptr(qstate, id); + int synth_all_cfg = qstate->env->cfg->dns64_synthall; + int synth_qname = 0; - if (qstate->env->cfg->dns64_synthall && - iq && iq->state == DNS64_NEW_QUERY - && qstate->qinfo.qtype == LDNS_RR_TYPE_AAAA) - return generate_type_A_query(qstate, id); + if(iq && iq->state == DNS64_NEW_QUERY + && qstate->qinfo.qtype == LDNS_RR_TYPE_PTR + && qstate->qinfo.qname_len == 74 + && !strcmp((char*)&qstate->qinfo.qname[64], "\03ip6\04arpa")) { + /* Handle PTR queries for IPv6 addresses. */ + return handle_ipv6_ptr(qstate, id); + } - if(dns64_always_synth_for_qname(qstate, id) && - iq && iq->state == DNS64_NEW_QUERY - && !(qstate->query_flags & BIT_CD) - && qstate->qinfo.qtype == LDNS_RR_TYPE_AAAA) { - verbose(VERB_ALGO, "dns64: ignore-aaaa and synthesize anyway"); + if(iq && iq->state == DNS64_NEW_QUERY && + qstate->qinfo.qtype == LDNS_RR_TYPE_AAAA && + (synth_all_cfg || + (synth_qname=(dns64_always_synth_for_qname(qstate, id) + && !(qstate->query_flags & BIT_CD))))) { + if(synth_qname) + verbose(VERB_ALGO, "dns64: ignore-aaaa and synthesize anyway"); return generate_type_A_query(qstate, id); } /* We are finished when our sub-query is finished. */ - if (iq && iq->state == DNS64_SUBQUERY_FINISHED) + if(iq && iq->state == DNS64_SUBQUERY_FINISHED) return module_finished; /* Otherwise, pass request to next module. */ @@ -627,32 +628,37 @@ handle_event_moddone(struct module_qstate* qstate, int id) * synthesize in (sec 5.1.2 of RFC6147). * - A successful AAAA query with an answer. */ - if((!iq || iq->state != DNS64_INTERNAL_QUERY) - && qstate->qinfo.qtype == LDNS_RR_TYPE_AAAA - && !(qstate->query_flags & BIT_CD) - && !(qstate->return_msg && - qstate->return_msg->rep && - reply_find_answer_rrset(&qstate->qinfo, - qstate->return_msg->rep))) - /* not internal, type AAAA, not CD, and no answer RRset, - * So, this is a AAAA noerror/nodata answer */ - return generate_type_A_query(qstate, id); - if((!iq || iq->state != DNS64_INTERNAL_QUERY) - && qstate->qinfo.qtype == LDNS_RR_TYPE_AAAA - && !(qstate->query_flags & BIT_CD) - && dns64_always_synth_for_qname(qstate, id)) { - /* if it is not internal, AAAA, not CD and listed domain, - * generate from A record and ignore AAAA */ - verbose(VERB_ALGO, "dns64: ignore-aaaa and synthesize anyway"); + /* When an AAAA query completes check if we want to perform DNS64 + * synthesis. We skip queries with DNSSEC enabled (!CD) and + * ones generated by us to retrive the A/PTR record to use for + * synth. */ + int could_synth = + qstate->qinfo.qtype == LDNS_RR_TYPE_AAAA && + (!iq || iq->state != DNS64_INTERNAL_QUERY) && + !(qstate->query_flags & BIT_CD); + int has_data = /* whether query returned non-empty rrset */ + qstate->return_msg && + qstate->return_msg->rep && + reply_find_answer_rrset(&qstate->qinfo, qstate->return_msg->rep); + int synth_qname = 0; + + if(could_synth && + (!has_data || + (synth_qname=dns64_always_synth_for_qname(qstate, id)))) { + if(synth_qname) + verbose(VERB_ALGO, "dns64: ignore-aaaa and synthesize anyway"); return generate_type_A_query(qstate, id); } /* Store the response in cache. */ - if ( (!iq || !iq->started_no_cache_store) && - qstate->return_msg && qstate->return_msg->rep && - !dns_cache_store(qstate->env, &qstate->qinfo, qstate->return_msg->rep, - 0, 0, 0, NULL, qstate->query_flags, qstate->qstarttime)) + if( (!iq || !iq->started_no_cache_store) && + qstate->return_msg && + qstate->return_msg->rep && + !dns_cache_store( + qstate->env, &qstate->qinfo, qstate->return_msg->rep, + 0, 0, 0, NULL, + qstate->query_flags, qstate->qstarttime)) log_err("out of memory"); /* do nothing */ @@ -969,10 +975,19 @@ dns64_inform_super(struct module_qstate* qstate, int id, } super_dq->state = DNS64_SUBQUERY_FINISHED; - /* If there is no successful answer, we're done. */ - if (qstate->return_rcode != LDNS_RCODE_NOERROR - || !qstate->return_msg - || !qstate->return_msg->rep) { + /* If there is no successful answer, we're done. + * Guarantee that we have at least a NOERROR reply further on. */ + if(qstate->return_rcode != LDNS_RCODE_NOERROR + || !qstate->return_msg + || !qstate->return_msg->rep) { + return; + } + + /* When no A record is found for synthesis fall back to AAAA again. */ + if(qstate->qinfo.qtype == LDNS_RR_TYPE_A && + !reply_find_answer_rrset(&qstate->qinfo, + qstate->return_msg->rep)) { + super_dq->state = DNS64_INTERNAL_QUERY; return; } diff --git a/dnstap/dnstap.m4 b/dnstap/dnstap.m4 index 1ff6c3fea2ef..be8b40c4505d 100644 --- a/dnstap/dnstap.m4 +++ b/dnstap/dnstap.m4 @@ -41,7 +41,7 @@ AC_DEFUN([dt_DNSTAP], fi ]) AC_SEARCH_LIBS([protobuf_c_message_pack], [protobuf-c], [], - AC_MSG_ERROR([The protobuf-c library was not found. Please install protobuf-c!])) + AC_MSG_ERROR([The protobuf-c library was not found. Please install the development libraries for protobuf-c!])) $2 else $3 diff --git a/dnstap/dtstream.c b/dnstap/dtstream.c index 9153f040472d..69c951276ff0 100644 --- a/dnstap/dtstream.c +++ b/dnstap/dtstream.c @@ -788,7 +788,7 @@ static int dtio_write_ssl(struct dt_io_thread* dtio, uint8_t* buf, } return -1; } - log_crypto_err("dnstap io, could not SSL_write"); + log_crypto_err_io("dnstap io, could not SSL_write", want); return -1; } return r; @@ -1029,7 +1029,7 @@ static int ssl_read_bytes(struct dt_io_thread* dtio, void* buf, size_t len) "other side"); return 0; } - log_crypto_err("could not SSL_read"); + log_crypto_err_io("could not SSL_read", want); verbose(VERB_DETAIL, "dnstap io: output closed by the " "other side"); return 0; @@ -1431,8 +1431,8 @@ static int dtio_ssl_handshake(struct dt_io_thread* dtio, } else { unsigned long err = ERR_get_error(); if(!squelch_err_ssl_handshake(err)) { - log_crypto_err_code("dnstap io, ssl handshake failed", - err); + log_crypto_err_io_code("dnstap io, ssl handshake failed", + want, err); verbose(VERB_OPS, "dnstap io, ssl handshake failed " "from %s", dtio->ip_str); } diff --git a/dnstap/unbound-dnstap-socket.c b/dnstap/unbound-dnstap-socket.c index d172a6744a07..04fda74b80e1 100644 --- a/dnstap/unbound-dnstap-socket.c +++ b/dnstap/unbound-dnstap-socket.c @@ -708,7 +708,7 @@ static ssize_t ssl_read_bytes(struct tap_data* data, void* buf, size_t len) (data->id?data->id:"")); return 0; } - log_crypto_err("could not SSL_read"); + log_crypto_err_io("could not SSL_read", want); if(verbosity) log_info("dnstap client stream closed from %s", (data->id?data->id:"")); return 0; @@ -760,10 +760,11 @@ static int reply_with_accept(struct tap_data* data) fd_set_block(data->fd); if(data->ssl) { if((r=SSL_write(data->ssl, acceptframe, len)) <= 0) { - if(SSL_get_error(data->ssl, r) == SSL_ERROR_ZERO_RETURN) + int r2; + if((r2=SSL_get_error(data->ssl, r)) == SSL_ERROR_ZERO_RETURN) log_err("SSL_write, peer closed connection"); else - log_err("could not SSL_write"); + log_crypto_err_io("could not SSL_write", r2); fd_set_nonblock(data->fd); free(acceptframe); return 0; @@ -805,10 +806,11 @@ static int reply_with_finish(struct tap_data* data) if(data->ssl) { int r; if((r=SSL_write(data->ssl, finishframe, len)) <= 0) { - if(SSL_get_error(data->ssl, r) == SSL_ERROR_ZERO_RETURN) + int r2; + if((r2=SSL_get_error(data->ssl, r)) == SSL_ERROR_ZERO_RETURN) log_err("SSL_write, peer closed connection"); else - log_err("could not SSL_write"); + log_crypto_err_io("could not SSL_write", r2); fd_set_nonblock(data->fd); free(finishframe); return 0; diff --git a/doc/Changelog b/doc/Changelog index a7c9c40026e5..05112e898a39 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,8 +1,158 @@ +2 November 2023: Wouter + - Set version number to 1.19.0. + - Tag for 1.19.0rc1 release. + +1 November 2023: George + - Mention flex and bison in README.md when building from repository + source. + +1 November 2023: Wouter + - Fix SSL compile failure for definition in log_crypto_err_io_code_arg. + - Fix SSL compile failure for other missing definitions in + log_crypto_err_io_code_arg. + - Fix compilation without openssl, remove unused function warning. + +31 October 2023: George + - Fix #941: dnscrypt doesn't work after upgrade to 1.18 with + suggestion by dukeartem to also fix the udp_ancil with dnscrypt. + +30 October 2023: George + - Merge #930 from Stuart Henderson: add void to + log_ident_revert_to_default declaration. + +30 October 2023: Wouter + - autoconf. + +24 October 2023: George + - Clearer configure text for missing protobuf-c development libraries. + +20 October 2023: Wouter + - Merge #951: Cachedb no store. The cachedb-no-store: yes option is + used to stop cachedb from writing messages to the backend storage. + It reads messages when data is available from the backend. The + default is no. + +19 October 2023: Wouter + - Fix to print detailed errors when an SSL IO routine fails via + SSL_get_error. + +18 October 2023: George + - Mailing list patches from Daniel Gröber for DNS64 fallback to plain + AAAA when no A record exists for synthesis, and minor DNS64 code + refactoring for better readability. + - Fixes for the DNS64 patches. + - Update the dns64_lookup.rpl test for the DNS64 fallback patch. + - Merge #955 from buevsan: fix ipset wrong behavior. + - Update testdata/ipset.tdir test for ipset fix. + +17 October 2023: Wouter + - Fix #954: Inconsistent RPZ handling for A record returned along with + CNAME. + +16 October 2023: George + - Expose the script filename in the Python module environment 'mod_env' + instead of the config_file structure which includes the linked list + of scripts in a multi Python module setup; fixes #79. + - Expose the configured listening and outgoing interfaces, if any, as + a list of strings in the Python 'config_file' class instead of the + current Swig object proxy; fixes #79. + - For multi Python module setups, clean previously parsed module + functions in __main__'s dictionary, if any, so that only current + module functions are registered. + +13 October 2023: George + - Better fix for infinite loop when reading multiple lines of input on + a broken remote control socket, by treating a zero byte line the + same as transmission end. Addesses #947 and #948. + +12 October 2023: Wouter + - Merge #944: Disable EDNS DO. + Disable the EDNS DO flag in upstream requests. This can be helpful + for devices that cannot handle DNSSEC information. But it should not + be enabled otherwise, because that would stop DNSSEC validation. The + DNSSEC validation would not work for Unbound itself, and also not + for downstream users. Default is no. The option + is disable-edns-do: no + +11 October 2023: George + - Fix #850: [FR] Ability to use specific database in Redis, with new + redis-logical-db configuration option. + +11 October 2023: Wouter + - Fix #949: "could not create control compt". + - Fix that cachedb does not warn when serve-expired is disabled about + use of serve-expired-reply-ttl and serve-expired-client-timeout. + - Fix for #949: Fix pythonmod/ubmodule-tst.py for Python 3.x. + +10 October 2023: George + - Fix infinite loop when reading multiple lines of input on a broken + remote control socket. Addesses #947 and #948. + +9 October 2023: Wouter + - Fix edns subnet so that queries with a source prefix of zero cause + the recursor send no edns subnet option to the upstream. + - Fix that printout of EDNS options shows the EDNS cookie option by + name. + +4 October 2023: Wouter + - Fix #946: Forwarder returns servfail on upstream response noerror no + data. + +3 October 2023: George + - Merge #881: Generalise the proxy protocol code. + +2 October 2023: George + - Fix misplaced comment. + +22 September 2023: Wouter + - Fix #942: 1.18.0 libunbound DNS regression when built without + OpenSSL. + +18 September 2023: Wouter + - Fix rpz tcp-only action with rpz triggers nsdname and nsip. + +15 September 2023: Wouter + - Merge #936: Check for c99 with autoconf versions prior to 2.70. + - Fix to remove two c99 notations. + +14 September 2023: Wouter + - Fix authority zone answers for obscured DNAMEs and delegations. + +8 September 2023: Wouter + - Fix send of udp retries when ENOBUFS is returned. It stops looping + and also waits for the condition to go away. Reported by Florian + Obser. + +7 September 2023: Wouter + - Fix to scrub resource records of type A and AAAA that have an + inappropriate size. They are removed from responses. + - Fix to move msgparse_rrset_remove_rr code to util/msgparse.c. + - Fix to add EDE text when RRs have been removed due to length. + - Fix to set ede match in unit test for rr length removal. + - Fix to print EDE text in readable form in output logs. + +6 September 2023: Wouter + - Merge #931: Prevent warnings from -Wmissing-prototypes. + +31 August 2023: Wouter + - Fix autoconf 2.69 warnings in configure. + - Fix #927: unbound 1.18.0 make test error. Fix make test without SHA1. + +30 August 2023: Wouter + - Fix for WKS call to getservbyname that creates allocation on exit + in unit test by testing numbers first and testing from the services + list later. + +28 August 2023: Wouter + - Fix for version generation race condition that ignored changes. + 25 August 2023: Wouter - Fix compile error on NetBSD in util/netevent.h. 23 August 2023: Wouter - - Tag for 1.18.0rc1 release. + - Tag for 1.18.0rc1 release. This became the 1.18.0 release on + 30 aug 2023, with the fix from 25 aug, fix compile on NetBSD + included. The repository continues with version 1.18.1. 22 August 2023: Wouter - Set version number to 1.18.0. @@ -4749,7 +4899,7 @@ - Fix that with openssl 1.1 control-use-cert: no uses less cpu, by using no encryption over the unix socket. -22 Novenber 2016: Ralph +22 November 2016: Ralph - Make access-control-tag-data RDATA absolute. This makes the RDATA origin consistent between local-data and access-control-tag-data. - Fix NSEC ENT wildcard check. Matching wildcard does not have to be a diff --git a/doc/README b/doc/README index 8bc8765d464f..592a9f4ae8d2 100644 --- a/doc/README +++ b/doc/README @@ -1,4 +1,4 @@ -README for Unbound 1.18.0 +README for Unbound 1.19.0 Copyright 2007 NLnet Labs http://unbound.net diff --git a/doc/example.conf.in b/doc/example.conf.in index 849e6d28446f..fe0dde69fa19 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.18.0. +# See unbound.conf(5) man page, version 1.19.0. # # this is a comment. @@ -683,6 +683,11 @@ server: # that set CD but cannot validate themselves. # ignore-cd-flag: no + # Disable the DO flag in outgoing requests. It is helpful for upstream + # devices that cannot handle DNSSEC information. But do not enable it + # otherwise, because it would stop DNSSEC validation. + # disable-edns-do: no + # Serve expired responses from cache, with serve-expired-reply-ttl in # the response, and then attempt to fetch the data afresh. # serve-expired: no @@ -1221,6 +1226,8 @@ remote-control: # backend: "testframe" # # secret seed string to calculate hashed keys # secret-seed: "default" +# # if the backend should be read from, but not written to. +# cachedb-no-store: no # # # For "redis" backend: # # (to enable, use --with-libhiredis to configure before compiling) @@ -1236,6 +1243,8 @@ remote-control: # redis-timeout: 100 # # set timeout on redis records based on DNS response TTL # redis-expire-records: no +# # redis logical database to use, 0 is the default database. +# redis-logical-db: 0 # IPSet # Add specify domain into set via ipset. diff --git a/doc/libunbound.3.in b/doc/libunbound.3.in index 429ac93407fd..fa090d58186f 100644 --- a/doc/libunbound.3.in +++ b/doc/libunbound.3.in @@ -1,4 +1,4 @@ -.TH "libunbound" "3" "Aug 30, 2023" "NLnet Labs" "unbound 1.18.0" +.TH "libunbound" "3" "Nov 8, 2023" "NLnet Labs" "unbound 1.19.0" .\" .\" libunbound.3 -- unbound library functions manual .\" @@ -44,7 +44,7 @@ .B ub_ctx_zone_remove, .B ub_ctx_data_add, .B ub_ctx_data_remove -\- Unbound DNS validating resolver 1.18.0 functions. +\- Unbound DNS validating resolver 1.19.0 functions. .SH "SYNOPSIS" .B #include .LP diff --git a/doc/unbound-anchor.8.in b/doc/unbound-anchor.8.in index 4e862fc89c79..a108db9faa72 100644 --- a/doc/unbound-anchor.8.in +++ b/doc/unbound-anchor.8.in @@ -1,4 +1,4 @@ -.TH "unbound-anchor" "8" "Aug 30, 2023" "NLnet Labs" "unbound 1.18.0" +.TH "unbound-anchor" "8" "Nov 8, 2023" "NLnet Labs" "unbound 1.19.0" .\" .\" unbound-anchor.8 -- unbound anchor maintenance utility manual .\" diff --git a/doc/unbound-checkconf.8.in b/doc/unbound-checkconf.8.in index 6a2c2cc94eea..b80c723cd3f0 100644 --- a/doc/unbound-checkconf.8.in +++ b/doc/unbound-checkconf.8.in @@ -1,4 +1,4 @@ -.TH "unbound-checkconf" "8" "Aug 30, 2023" "NLnet Labs" "unbound 1.18.0" +.TH "unbound-checkconf" "8" "Nov 8, 2023" "NLnet Labs" "unbound 1.19.0" .\" .\" unbound-checkconf.8 -- unbound configuration checker manual .\" diff --git a/doc/unbound-control.8.in b/doc/unbound-control.8.in index db4eb72308a6..44e73c93dfd5 100644 --- a/doc/unbound-control.8.in +++ b/doc/unbound-control.8.in @@ -1,4 +1,4 @@ -.TH "unbound-control" "8" "Aug 30, 2023" "NLnet Labs" "unbound 1.18.0" +.TH "unbound-control" "8" "Nov 8, 2023" "NLnet Labs" "unbound 1.19.0" .\" .\" unbound-control.8 -- unbound remote control manual .\" diff --git a/doc/unbound-host.1.in b/doc/unbound-host.1.in index e4fe718ab071..36f22ee9b6d1 100644 --- a/doc/unbound-host.1.in +++ b/doc/unbound-host.1.in @@ -1,4 +1,4 @@ -.TH "unbound\-host" "1" "Aug 30, 2023" "NLnet Labs" "unbound 1.18.0" +.TH "unbound\-host" "1" "Nov 8, 2023" "NLnet Labs" "unbound 1.19.0" .\" .\" unbound-host.1 -- unbound DNS lookup utility .\" diff --git a/doc/unbound.8.in b/doc/unbound.8.in index 7b955a92e542..3d56b7bfa190 100644 --- a/doc/unbound.8.in +++ b/doc/unbound.8.in @@ -1,4 +1,4 @@ -.TH "unbound" "8" "Aug 30, 2023" "NLnet Labs" "unbound 1.18.0" +.TH "unbound" "8" "Nov 8, 2023" "NLnet Labs" "unbound 1.19.0" .\" .\" unbound.8 -- unbound manual .\" @@ -9,7 +9,7 @@ .\" .SH "NAME" .B unbound -\- Unbound DNS validating resolver 1.18.0. +\- Unbound DNS validating resolver 1.19.0. .SH "SYNOPSIS" .B unbound .RB [ \-h ] diff --git a/doc/unbound.conf.5.in b/doc/unbound.conf.5.in index 1c785ea5fa6a..ac8fa7953f3c 100644 --- a/doc/unbound.conf.5.in +++ b/doc/unbound.conf.5.in @@ -1,4 +1,4 @@ -.TH "unbound.conf" "5" "Aug 30, 2023" "NLnet Labs" "unbound 1.18.0" +.TH "unbound.conf" "5" "Nov 8, 2023" "NLnet Labs" "unbound 1.19.0" .\" .\" unbound.conf.5 -- unbound.conf manual .\" @@ -1302,6 +1302,20 @@ servers that set the CD flag but cannot validate DNSSEC themselves are the clients, and then Unbound provides them with DNSSEC protection. The default value is "no". .TP +.B disable\-edns\-do: \fI +Disable the EDNS DO flag in upstream requests. +It breaks DNSSEC validation for Unbound's clients. +This results in the upstream name servers to not include DNSSEC records in +their replies and could be helpful for devices that cannot handle DNSSEC +information. +When the option is enabled, clients that set the DO flag receive no EDNS +record in the response to indicate the lack of support to them. +If this option is enabled but Unbound is already configured for DNSSEC +validation (i.e., the validator module is enabled; default) this option is +implicitly turned off with a warning as to not break DNSSEC validation in +Unbound. +Default is no. +.TP .B serve\-expired: \fI If enabled, Unbound attempts to serve old responses from cache with a TTL of \fBserve\-expired\-reply\-ttl\fR in the response without waiting for the @@ -2667,6 +2681,11 @@ operationally. If the backend database is shared by multiple Unbound instances, all instances must use the same secret seed. This option defaults to "default". +.TP +.B cachedb-no-store: \fI\fR +If the backend should be read from, but not written to. This makes this +instance not store dns messages in the backend. But if data is available it +is retrieved. The default is no. .P The following .B cachedb @@ -2707,6 +2726,17 @@ Unbound is configured with \fBserve-expired\fR and \fBserve-expired-ttl\fR is 0, this option is internally reverted to "no". Redis SETEX support is required for this option (Redis >= 2.0.0). This option defaults to no. +.TP +.B redis-logical-db: \fI +The logical database in Redis to use. +These are databases in the same Redis instance sharing the same configuration +and persisted in the same RDB/AOF file. +If unsure about using this option, Redis documentation +(https://redis.io/commands/select/) suggests not to use a single Redis instance +for multiple unrelated applications. +The default database in Redis is 0 while other logical databases need to be +explicitly SELECT'ed upon connecting. +This option defaults to 0. .SS DNSTAP Logging Options DNSTAP support, when compiled in by using \fB\-\-enable\-dnstap\fR, is enabled in the \fBdnstap:\fR section. diff --git a/dynlibmod/dynlibmod.c b/dynlibmod/dynlibmod.c index ffac7ff306a5..1e040a30e743 100644 --- a/dynlibmod/dynlibmod.c +++ b/dynlibmod/dynlibmod.c @@ -75,6 +75,7 @@ int dynlibmod_init(struct module_env* env, int id) { struct config_strlist* cfg_item = env->cfg->dynlib_file; struct dynlibmod_env* de = (struct dynlibmod_env*)calloc(1, sizeof(struct dynlibmod_env)); __DYNMOD dynamic_library; + int i; if (!de) { log_err("dynlibmod[%d]: malloc failure", dynlib_mod_idx); @@ -84,7 +85,7 @@ int dynlibmod_init(struct module_env* env, int id) { env->modinfo[id] = (void*) de; de->fname = NULL; - for(int i = dynlib_mod_idx; + for(i = dynlib_mod_idx; i != 0 && cfg_item != NULL; i--, cfg_item = cfg_item->next) {} diff --git a/edns-subnet/subnetmod.c b/edns-subnet/subnetmod.c index 13fd669b5d52..cefde84e5f4c 100644 --- a/edns-subnet/subnetmod.c +++ b/edns-subnet/subnetmod.c @@ -156,6 +156,7 @@ int ecs_whitelist_check(struct query_info* qinfo, qstate->no_cache_store = 0; } + sq->subnet_sent_no_subnet = 0; if(sq->ecs_server_out.subnet_validdata && ((sq->subnet_downstream && qstate->env->cfg->client_subnet_always_forward) || ecs_is_whitelisted(sn_env->whitelist, @@ -166,6 +167,14 @@ int ecs_whitelist_check(struct query_info* qinfo, * set. */ if(!edns_opt_list_find(qstate->edns_opts_back_out, qstate->env->cfg->client_subnet_opcode)) { + /* if the client is not wanting an EDNS subnet option, + * omit it and store that we omitted it but actually + * are doing EDNS subnet to the server. */ + if(sq->ecs_server_out.subnet_source_mask == 0) { + sq->subnet_sent_no_subnet = 1; + sq->subnet_sent = 0; + return 1; + } subnet_ecs_opt_list_append(&sq->ecs_server_out, &qstate->edns_opts_back_out, qstate, region); } @@ -515,7 +524,7 @@ eval_response(struct module_qstate *qstate, int id, struct subnet_qstate *sq) } /* We have not asked for subnet data */ - if (!sq->subnet_sent) { + if (!sq->subnet_sent && !sq->subnet_sent_no_subnet) { if (s_in->subnet_validdata) verbose(VERB_QUERY, "subnetcache: received spurious data"); if (sq->subnet_downstream) /* Copy back to client */ @@ -524,7 +533,7 @@ eval_response(struct module_qstate *qstate, int id, struct subnet_qstate *sq) } /* subnet sent but nothing came back */ - if (!s_in->subnet_validdata) { + if (!s_in->subnet_validdata && !sq->subnet_sent_no_subnet) { /* The authority indicated no support for edns subnet. As a * consequence the answer ended up in the regular cache. It * is still useful to put it in the edns subnet cache for @@ -540,6 +549,18 @@ eval_response(struct module_qstate *qstate, int id, struct subnet_qstate *sq) return module_finished; } + /* Purposefully there was no sent subnet, and there is consequently + * no subnet in the answer. If there was, use the subnet in the answer + * anyway. But if there is not, treat it as a prefix 0 answer. */ + if(sq->subnet_sent_no_subnet && !s_in->subnet_validdata) { + /* Fill in 0.0.0.0/0 scope 0, or ::0/0 scope 0, for caching. */ + s_in->subnet_addr_fam = s_out->subnet_addr_fam; + s_in->subnet_source_mask = 0; + s_in->subnet_scope_mask = 0; + memset(s_in->subnet_addr, 0, INET6_SIZE); + s_in->subnet_validdata = 1; + } + /* Being here means we have asked for and got a subnet specific * answer. Also, the answer from the authority is not yet cached * anywhere. */ @@ -556,6 +577,7 @@ eval_response(struct module_qstate *qstate, int id, struct subnet_qstate *sq) (void)edns_opt_list_remove(&qstate->edns_opts_back_out, qstate->env->cfg->client_subnet_opcode); sq->subnet_sent = 0; + sq->subnet_sent_no_subnet = 0; return module_restart_next; } @@ -676,6 +698,7 @@ ecs_query_response(struct module_qstate* qstate, struct dns_msg* response, edns_opt_list_remove(&qstate->edns_opts_back_out, qstate->env->cfg->client_subnet_opcode); sq->subnet_sent = 0; + sq->subnet_sent_no_subnet = 0; memset(&sq->ecs_server_out, 0, sizeof(sq->ecs_server_out)); } else if (!sq->track_max_scope && FLAGS_GET_RCODE(response->rep->flags) == LDNS_RCODE_NOERROR && @@ -737,6 +760,9 @@ ecs_edns_back_parsed(struct module_qstate* qstate, int id, sq->ecs_server_in.subnet_scope_mask > sq->max_scope)) sq->max_scope = sq->ecs_server_in.subnet_scope_mask; + } else if(sq->subnet_sent_no_subnet) { + /* The answer can be stored as scope 0, not in global cache. */ + qstate->no_cache_store = 1; } return 1; diff --git a/edns-subnet/subnetmod.h b/edns-subnet/subnetmod.h index f0bcaad33e15..1ff8a23ecdba 100644 --- a/edns-subnet/subnetmod.h +++ b/edns-subnet/subnetmod.h @@ -85,6 +85,13 @@ struct subnet_qstate { struct ecs_data ecs_server_out; int subnet_downstream; int subnet_sent; + /** + * If there was no subnet sent because the client used source prefix + * length 0 for omitting the information. Then the answer is cached + * like subnet was a /0 scope. Like the subnet_sent flag, but when + * the EDNS subnet option is omitted because the client asked. + */ + int subnet_sent_no_subnet; /** keep track of longest received scope, set after receiving CNAME for * incoming QNAME. */ int track_max_scope; diff --git a/ipset/ipset.c b/ipset/ipset.c index c61ebc205ee8..af55de8d6fc2 100644 --- a/ipset/ipset.c +++ b/ipset/ipset.c @@ -158,10 +158,10 @@ ipset_check_zones_for_rrset(struct module_env *env, struct ipset_env *ie, qs = NULL; plen = strlen(p->str); - if (dlen >= plen) { + if (dlen == plen || (dlen > plen && dname[dlen - plen - 1] == '.' )) { ds = dname + (dlen - plen); } - if (qlen >= plen) { + if (qlen == plen || (qlen > plen && qname[qlen - plen - 1] == '.' )) { qs = qname + (qlen - plen); } if ((ds && strncasecmp(p->str, ds, plen) == 0) diff --git a/iterator/iter_priv.c b/iterator/iter_priv.c index 90bea1746d9a..be4219216a4c 100644 --- a/iterator/iter_priv.c +++ b/iterator/iter_priv.c @@ -207,28 +207,6 @@ size_t priv_get_mem(struct iter_priv* priv) return sizeof(*priv) + regional_get_mem(priv->region); } -/** remove RR from msgparse RRset, return true if rrset is entirely bad */ -static int -remove_rr(const char* str, sldns_buffer* pkt, struct rrset_parse* rrset, - struct rr_parse* prev, struct rr_parse** rr, struct sockaddr_storage* addr, socklen_t addrlen) -{ - if(verbosity >= VERB_QUERY && rrset->dname_len <= LDNS_MAX_DOMAINLEN && str) { - uint8_t buf[LDNS_MAX_DOMAINLEN+1]; - dname_pkt_copy(pkt, buf, rrset->dname); - log_name_addr(VERB_QUERY, str, buf, addr, addrlen); - } - if(prev) - prev->next = (*rr)->next; - else rrset->rr_first = (*rr)->next; - if(rrset->rr_last == *rr) - rrset->rr_last = prev; - rrset->rr_count --; - rrset->size -= (*rr)->size; - /* rr struct still exists, but is unlinked, so that in the for loop - * the rr->next works fine to continue. */ - return rrset->rr_count == 0; -} - int priv_rrset_bad(struct iter_priv* priv, sldns_buffer* pkt, struct rrset_parse* rrset) { @@ -261,7 +239,7 @@ int priv_rrset_bad(struct iter_priv* priv, sldns_buffer* pkt, INET_SIZE); memmove(&addr, &sa, len); if(priv_lookup_addr(priv, &addr, len)) { - if(remove_rr("sanitize: removing public name with private address", pkt, rrset, prev, &rr, &addr, len)) + if(msgparse_rrset_remove_rr("sanitize: removing public name with private address", pkt, rrset, prev, rr, &addr, len)) return 1; continue; } @@ -284,7 +262,7 @@ int priv_rrset_bad(struct iter_priv* priv, sldns_buffer* pkt, INET6_SIZE); memmove(&addr, &sa, len); if(priv_lookup_addr(priv, &addr, len)) { - if(remove_rr("sanitize: removing public name with private address", pkt, rrset, prev, &rr, &addr, len)) + if(msgparse_rrset_remove_rr("sanitize: removing public name with private address", pkt, rrset, prev, rr, &addr, len)) return 1; continue; } diff --git a/iterator/iter_resptype.c b/iterator/iter_resptype.c index e85595b843d3..38e186e79048 100644 --- a/iterator/iter_resptype.c +++ b/iterator/iter_resptype.c @@ -42,6 +42,7 @@ #include "config.h" #include "iterator/iter_resptype.h" #include "iterator/iter_delegpt.h" +#include "iterator/iterator.h" #include "services/cache/dns.h" #include "util/net_help.h" #include "util/data/dname.h" @@ -105,7 +106,8 @@ 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) + struct dns_msg* msg, struct query_info* request, struct delegpt* dp, + int* empty_nodata_found) { uint8_t* origzone = (uint8_t*)"\000"; /* the default */ struct ub_packed_rrset_key* s; @@ -284,13 +286,22 @@ response_type_from_server(int rdset, /* If we've gotten this far, this is NOERROR/NODATA (which could * be an entirely empty message) */ - /* but ignore entirely empty messages, noerror/nodata has a soa - * negative ttl value in the authority section, this makes it try - * again at another authority. And turns it from a 5 second empty - * message into a 5 second servfail response. */ + /* For entirely empty messages, try again, at first, then accept + * it it happens more. A regular noerror/nodata response has a soa + * negative ttl value in the authority section. This makes it try + * again at another authority. And decides between storing a 5 second + * empty message or a 5 second servfail response. */ if(msg->rep->an_numrrsets == 0 && msg->rep->ns_numrrsets == 0 && - msg->rep->ar_numrrsets == 0) - return RESPONSE_TYPE_THROWAWAY; + msg->rep->ar_numrrsets == 0) { + if(empty_nodata_found) { + /* detect as throwaway at first, but accept later. */ + (*empty_nodata_found)++; + if(*empty_nodata_found < EMPTY_NODATA_RETRY_COUNT) + return RESPONSE_TYPE_THROWAWAY; + return RESPONSE_TYPE_ANSWER; + } + return RESPONSE_TYPE_ANSWER; + } /* check if recursive answer; saying it has empty cache */ if( (msg->rep->flags&BIT_RA) && !(msg->rep->flags&BIT_AA) && !rdset) return RESPONSE_TYPE_REC_LAME; diff --git a/iterator/iter_resptype.h b/iterator/iter_resptype.h index fee9ef35f83f..bfd4b664f621 100644 --- a/iterator/iter_resptype.h +++ b/iterator/iter_resptype.h @@ -119,9 +119,11 @@ enum response_type response_type_from_cache(struct dns_msg* msg, * @param request: the request that generated the response. * @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. * @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); + struct dns_msg* msg, struct query_info* request, struct delegpt* dp, + int* empty_nodata_found); #endif /* ITERATOR_ITER_RESPTYPE_H */ diff --git a/iterator/iter_scrub.c b/iterator/iter_scrub.c index d1fedcd0f908..5f2e30337229 100644 --- a/iterator/iter_scrub.c +++ b/iterator/iter_scrub.c @@ -716,6 +716,56 @@ static int sanitize_nsec_is_overreach(sldns_buffer* pkt, return 0; } +/** Remove individual RRs, if the length is wrong. Returns true if the RRset + * has been removed. */ +static int +scrub_sanitize_rr_length(sldns_buffer* pkt, struct msg_parse* msg, + struct rrset_parse* prev, struct rrset_parse** rrset, int* added_ede, + struct module_qstate* qstate) +{ + struct rr_parse* rr, *rr_prev = NULL; + for(rr = (*rrset)->rr_first; rr; rr = rr->next) { + + /* Sanity check for length of records + * An A record should be 6 bytes only + * (2 bytes for length and 4 for IPv4 addr)*/ + if((*rrset)->type == LDNS_RR_TYPE_A && rr->size != 6 ) { + if(!*added_ede) { + *added_ede = 1; + errinf_ede(qstate, "sanitize: records of inappropriate length have been removed.", + LDNS_EDE_OTHER); + } + if(msgparse_rrset_remove_rr("sanitize: removing type A RR of inappropriate length:", + pkt, *rrset, rr_prev, rr, NULL, 0)) { + remove_rrset("sanitize: removing type A RRset of inappropriate length:", + pkt, msg, prev, rrset); + return 1; + } + continue; + } + + /* Sanity check for length of records + * An AAAA record should be 18 bytes only + * (2 bytes for length and 16 for IPv6 addr)*/ + if((*rrset)->type == LDNS_RR_TYPE_AAAA && rr->size != 18 ) { + if(!*added_ede) { + *added_ede = 1; + errinf_ede(qstate, "sanitize: records of inappropriate length have been removed.", + LDNS_EDE_OTHER); + } + if(msgparse_rrset_remove_rr("sanitize: removing type AAAA RR of inappropriate length:", + pkt, *rrset, rr_prev, rr, NULL, 0)) { + remove_rrset("sanitize: removing type AAAA RRset of inappropriate length:", + pkt, msg, prev, rrset); + return 1; + } + continue; + } + rr_prev = rr; + } + return 0; +} + /** * Given a response event, remove suspect RRsets from the response. * "Suspect" rrsets are potentially poison. Note that this routine expects @@ -728,15 +778,17 @@ static int sanitize_nsec_is_overreach(sldns_buffer* pkt, * @param zonename: name of server zone. * @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. * @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 iter_env* ie, struct module_qstate* qstate) { int del_addi = 0; /* if additional-holding rrsets are deleted, we do not trust the normalized additional-A-AAAA any more */ + int added_rrlen_ede = 0; struct rrset_parse* rrset, *prev; prev = NULL; rrset = msg->rrset_first; @@ -781,6 +833,14 @@ scrub_sanitize(sldns_buffer* pkt, struct msg_parse* msg, rrset = msg->rrset_first; while(rrset) { + /* Sanity check for length of records */ + if(rrset->type == LDNS_RR_TYPE_A || + rrset->type == LDNS_RR_TYPE_AAAA) { + if(scrub_sanitize_rr_length(pkt, msg, prev, &rrset, + &added_rrlen_ede, qstate)) + continue; + } + /* remove private addresses */ if( (rrset->type == LDNS_RR_TYPE_A || rrset->type == LDNS_RR_TYPE_AAAA)) { @@ -854,7 +914,8 @@ scrub_sanitize(sldns_buffer* pkt, struct msg_parse* msg, 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 iter_env* ie) + struct module_env* env, struct module_qstate* qstate, + struct iter_env* ie) { /* basic sanity checks */ log_nametypeclass(VERB_ALGO, "scrub for", zonename, LDNS_RR_TYPE_NS, @@ -886,7 +947,7 @@ scrub_message(sldns_buffer* pkt, struct msg_parse* msg, if(!scrub_normalize(pkt, msg, qinfo, region, env)) return 0; /* delete all out-of-zone information */ - if(!scrub_sanitize(pkt, msg, qinfo, zonename, env, ie)) + if(!scrub_sanitize(pkt, msg, qinfo, zonename, env, ie, qstate)) return 0; return 1; } diff --git a/iterator/iter_scrub.h b/iterator/iter_scrub.h index cbbaf73c91d2..4d6ce7166516 100644 --- a/iterator/iter_scrub.h +++ b/iterator/iter_scrub.h @@ -48,6 +48,7 @@ struct query_info; struct regional; struct module_env; struct iter_env; +struct module_qstate; /** * Cleanup the passed dns message. @@ -59,11 +60,13 @@ struct iter_env; * Used to determine out of bailiwick information. * @param regional: where to allocate (new) parts of the message. * @param env: module environment with config settings and cache. + * @param qstate: for setting errinf for EDE error messages. * @param ie: iterator module environment data. * @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 iter_env* ie); + struct module_env* env, struct module_qstate* qstate, + struct iter_env* ie); #endif /* ITERATOR_ITER_SCRUB_H */ diff --git a/iterator/iterator.c b/iterator/iterator.c index 1548dfcaee62..6ff811a27d06 100644 --- a/iterator/iterator.c +++ b/iterator/iterator.c @@ -1449,6 +1449,39 @@ processInitRequest(struct module_qstate* qstate, struct iter_qstate* iq, } iq->qchase.qname = sname; iq->qchase.qname_len = slen; + if(qstate->env->auth_zones) { + /* apply rpz qname triggers after cname */ + struct dns_msg* forged_response = + rpz_callback_from_iterator_cname(qstate, iq); + while(forged_response && reply_find_rrset_section_an( + forged_response->rep, iq->qchase.qname, + iq->qchase.qname_len, LDNS_RR_TYPE_CNAME, + iq->qchase.qclass)) { + /* another cname to follow */ + if(!handle_cname_response(qstate, iq, forged_response, + &sname, &slen)) { + errinf(qstate, "malloc failure, CNAME info"); + return error_response(qstate, id, LDNS_RCODE_SERVFAIL); + } + iq->qchase.qname = sname; + iq->qchase.qname_len = slen; + forged_response = + rpz_callback_from_iterator_cname(qstate, iq); + } + if(forged_response != NULL) { + qstate->ext_state[id] = module_finished; + qstate->return_rcode = LDNS_RCODE_NOERROR; + qstate->return_msg = forged_response; + iq->response = forged_response; + next_state(iq, FINISHED_STATE); + if(!iter_prepend(iq, qstate->return_msg, qstate->region)) { + log_err("rpz: after cached cname, prepend rrsets: out of memory"); + return error_response(qstate, id, LDNS_RCODE_SERVFAIL); + } + qstate->return_msg->qinfo = qstate->qinfo; + return 0; + } + } /* This *is* a query restart, even if it is a cheap * one. */ iq->dp = NULL; @@ -2875,7 +2908,8 @@ processQueryTargets(struct module_qstate* qstate, struct iter_qstate* iq, /* unset CD if to forwarder(RD set) and not dnssec retry * (blacklist nonempty) and no trust-anchors are configured * above the qname or on the first attempt when dnssec is on */ - EDNS_DO| ((iq->chase_to_rd||(iq->chase_flags&BIT_RD)!=0)&& + (qstate->env->cfg->disable_edns_do?0:EDNS_DO)| + ((iq->chase_to_rd||(iq->chase_flags&BIT_RD)!=0)&& !qstate->blacklist&&(!iter_qname_indicates_dnssec(qstate->env, &iq->qinfo_out)||target->attempts==1)?0:BIT_CD), iq->dnssec_expected, iq->caps_fallback || is_caps_whitelisted( @@ -2940,7 +2974,7 @@ static int processQueryResponse(struct module_qstate* qstate, struct iter_qstate* iq, struct iter_env* ie, int id) { - int dnsseclame = 0, origtypecname = 0; + int dnsseclame = 0, origtypecname = 0, orig_empty_nodata_found; enum response_type type; iq->num_current_queries--; @@ -2960,12 +2994,25 @@ processQueryResponse(struct module_qstate* qstate, struct iter_qstate* iq, return next_state(iq, QUERYTARGETS_STATE); } iq->timeout_count = 0; + 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->response, &iq->qinfo_out, iq->dp, &iq->empty_nodata_found); iq->chase_to_rd = 0; /* remove TC flag, if this is erroneously set by TCP upstream */ iq->response->rep->flags &= ~BIT_TC; + if(orig_empty_nodata_found != iq->empty_nodata_found && + iq->empty_nodata_found < EMPTY_NODATA_RETRY_COUNT) { + /* try to search at another server */ + if(qstate->reply) { + struct delegpt_addr* a = delegpt_find_addr( + iq->dp, &qstate->reply->remote_addr, + qstate->reply->remote_addrlen); + /* make selection disprefer it */ + if(a) a->lame = 1; + } + return next_state(iq, QUERYTARGETS_STATE); + } if(type == RESPONSE_TYPE_REFERRAL && (iq->chase_flags&BIT_RD) && !iq->auth_zone_response) { /* When forwarding (RD bit is set), we handle referrals @@ -3501,7 +3548,7 @@ 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); + iq->response, &iq->qchase, iq->dp, NULL); if(type == RESPONSE_TYPE_ANSWER) { qstate->return_rcode = LDNS_RCODE_NOERROR; qstate->return_msg = iq->response; @@ -3874,6 +3921,23 @@ processFinished(struct module_qstate* qstate, struct iter_qstate* iq, /* explicitly set the EDE string to NULL */ iq->response->rep->reason_bogus_str = NULL; + if((qstate->env->cfg->val_log_level >= 2 || + qstate->env->cfg->log_servfail) && qstate->errinf && + !qstate->env->cfg->val_log_squelch) { + char* err_str = errinf_to_str_misc(qstate); + if(err_str) { + size_t err_str_len = strlen(err_str); + verbose(VERB_ALGO, "iterator EDE: %s", err_str); + /* allocate space and store the error + * string */ + iq->response->rep->reason_bogus_str = regional_alloc( + qstate->region, + sizeof(char) * (err_str_len+1)); + memcpy(iq->response->rep->reason_bogus_str, + err_str, err_str_len+1); + } + free(err_str); + } /* we have finished processing this query */ qstate->ext_state[id] = module_finished; @@ -4098,7 +4162,7 @@ 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, ie)) { + qstate->env->scratch, qstate->env, qstate, ie)) { /* 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 fad7f03e63de..e253f3f7e2bd 100644 --- a/iterator/iterator.h +++ b/iterator/iterator.h @@ -101,6 +101,8 @@ extern int BLACKLIST_PENALTY; * Chosen so that the UNKNOWN_SERVER_NICENESS falls within the band of a * fast server, this causes server exploration as a side benefit. msec. */ #define RTT_BAND 400 +/** Number of retries for empty nodata packets before it is accepted. */ +#define EMPTY_NODATA_RETRY_COUNT 2 /** * Global state for the iterator. @@ -415,6 +417,11 @@ struct iter_qstate { */ int refetch_glue; + /** + * This flag detects that a completely empty nodata was received, + * already so that it is accepted later. */ + int empty_nodata_found; + /** list of pending queries to authoritative servers. */ struct outbound_list outlist; diff --git a/libunbound/libworker.c b/libunbound/libworker.c index 104244937bf0..0e1c40393763 100644 --- a/libunbound/libworker.c +++ b/libunbound/libworker.c @@ -62,6 +62,7 @@ #include "util/random.h" #include "util/config_file.h" #include "util/netevent.h" +#include "util/proxy_protocol.h" #include "util/storage/lookup3.h" #include "util/storage/slabhash.h" #include "util/net_help.h" @@ -168,6 +169,7 @@ libworker_setup(struct ub_ctx* ctx, int is_bg, struct ub_event_base* eb) hints_delete(w->env->hints); w->env->hints = NULL; } +#ifdef HAVE_SSL w->sslctx = connect_sslctx_create(NULL, NULL, cfg->tls_cert_bundle, cfg->tls_win_cert); if(!w->sslctx) { @@ -175,6 +177,7 @@ libworker_setup(struct ub_ctx* ctx, int is_bg, struct ub_event_base* eb) hints_delete(w->env->hints); w->env->hints = NULL; } +#endif if(!w->is_bg || w->is_bg_thread) { lock_basic_unlock(&ctx->cfglock); } @@ -263,6 +266,7 @@ libworker_setup(struct ub_ctx* ctx, int is_bg, struct ub_event_base* eb) w->env->kill_sub = &mesh_state_delete; w->env->detect_cycle = &mesh_detect_cycle; comm_base_timept(w->base, &w->env->now, &w->env->now_tv); + pp_init(&sldns_write_uint16, &sldns_write_uint32); return w; } diff --git a/libunbound/python/libunbound.i b/libunbound/python/libunbound.i index 0cdb3d7e59d6..dc125146c0f0 100644 --- a/libunbound/python/libunbound.i +++ b/libunbound/python/libunbound.i @@ -863,6 +863,9 @@ Result: ['74.125.43.147', '74.125.43.99', '74.125.43.103', '74.125.43.104'] %inline %{ //SWIG will see the ub_ctx as a class struct ub_ctx { + /* Dummy member, so the struct is not empty, MSVC complains about + * that. */ + int dummy; }; %} diff --git a/pythonmod/doc/examples/example0-1.py b/pythonmod/doc/examples/example0-1.py index 7904f73a55e8..506235eb4205 100644 --- a/pythonmod/doc/examples/example0-1.py +++ b/pythonmod/doc/examples/example0-1.py @@ -1,9 +1,9 @@ def init(id, cfg): - log_info("pythonmod: init called, module id is %d port: %d script: %s" % (id, cfg.port, cfg.python_script)) + log_info("pythonmod: init called, module id is %d port: %d script: %s" % (id, cfg.port, mod_env['script'])) return True def init_standard(id, env): - log_info("pythonmod: init called, module id is %d port: %d script: %s" % (id, env.cfg.port, env.cfg.python_script)) + log_info("pythonmod: init called, module id is %d port: %d script: %s" % (id, env.cfg.port, mod_env['script'])) return True def deinit(id): diff --git a/pythonmod/doc/examples/example0.rst b/pythonmod/doc/examples/example0.rst index 693972a141a4..cee551de0259 100644 --- a/pythonmod/doc/examples/example0.rst +++ b/pythonmod/doc/examples/example0.rst @@ -50,7 +50,7 @@ Script file must contain four compulsory functions: :: def init(id, cfg): - log_info("pythonmod: init called, module id is %d port: %d script: %s" % (id, cfg.port, cfg.python_script)) + log_info("pythonmod: init called, module id is %d port: %d script: %s" % (id, cfg.port, mod_env['script'])) return True @@ -69,7 +69,7 @@ Script file must contain four compulsory functions: :: def init_standard(id, env): - log_info("pythonmod: init called, module id is %d port: %d script: %s" % (id, env.cfg.port, env.cfg.python_script)) + log_info("pythonmod: init called, module id is %d port: %d script: %s" % (id, env.cfg.port, mod_env['script'])) return True diff --git a/pythonmod/doc/modules/config.rst b/pythonmod/doc/modules/config.rst index 89afbef8ac2c..ac4db4c94af2 100644 --- a/pythonmod/doc/modules/config.rst +++ b/pythonmod/doc/modules/config.rst @@ -129,7 +129,7 @@ config_file .. attribute:: ifs - Interface description strings (IP addresses). + List of interface description strings (IP addresses). .. attribute:: num_out_ifs @@ -138,7 +138,7 @@ config_file .. attribute:: out_ifs - Outgoing interface description strings (IP addresses). + List of outgoing interface description strings (IP addresses). .. attribute:: root_hints @@ -339,4 +339,5 @@ config_file .. attribute:: python_script - Python script file. + Linked list of Python script files. + Deprecated; `mod_env['script']` should be used instead. diff --git a/pythonmod/doc/modules/env.rst b/pythonmod/doc/modules/env.rst index eae4c73c7cfd..be5c3b1dbe6c 100644 --- a/pythonmod/doc/modules/env.rst +++ b/pythonmod/doc/modules/env.rst @@ -6,8 +6,11 @@ Global variables .. envvar:: mod_env - Module environment, contains data pointer for module-specific data. - See :class:`pythonmod_env`. + Module environment, it is the 'data' pointer for module-specific data + in :class:`pythonmod_env`. + It is initialized as a dictionary with the 'script' key pointing to the + module's python script. + It can be further populated during runtime for module-specific data. Predefined constants diff --git a/pythonmod/examples/edns.py b/pythonmod/examples/edns.py index ddcccc51c9bd..4e2eebd4fd1d 100644 --- a/pythonmod/examples/edns.py +++ b/pythonmod/examples/edns.py @@ -80,7 +80,7 @@ def init_standard(id, env): ..note:: The previously accessible configuration options can now be found in env.cfg. """ - log_info("python: inited script {}".format(env.cfg.python_script)) + log_info("python: inited script {}".format(mod_env['script'])) # Register EDNS option 65001 as a known EDNS option. if not register_edns_option(env, 65001, bypass_cache_stage=True, diff --git a/pythonmod/examples/inplace_callbacks.py b/pythonmod/examples/inplace_callbacks.py index e1caaecc74e7..42806daa107a 100644 --- a/pythonmod/examples/inplace_callbacks.py +++ b/pythonmod/examples/inplace_callbacks.py @@ -287,7 +287,7 @@ def init_standard(id, env): env.cfg. """ - log_info("python: inited script {}".format(env.cfg.python_script)) + log_info("python: inited script {}".format(mod_env['script'])) # Register the inplace_reply_callback function as an inplace callback # function when answering a resolved query. diff --git a/pythonmod/examples/log.py b/pythonmod/examples/log.py index c17106b0f268..03f741962644 100644 --- a/pythonmod/examples/log.py +++ b/pythonmod/examples/log.py @@ -87,7 +87,7 @@ def logDnsMsg(qstate): print "-"*100 def init(id, cfg): - log_info("pythonmod: init called, module id is %d port: %d script: %s" % (id, cfg.port, cfg.python_script)) + log_info("pythonmod: init called, module id is %d port: %d script: %s" % (id, cfg.port, mod_env['script'])) return True def deinit(id): diff --git a/pythonmod/interface.i b/pythonmod/interface.i index a436389e1184..d9839fc3866c 100644 --- a/pythonmod/interface.i +++ b/pythonmod/interface.i @@ -86,6 +86,20 @@ } return list; } + + /* converts an array of strings (char**) to a List of strings */ + PyObject* CharArrayAsStringList(char** array, int len) { + PyObject* list; + int i; + + if(!array||len==0) return PyList_New(0); + + list = PyList_New(len); + for (i=0; i < len; i++) { + PyList_SET_ITEM(list, i, PyString_FromString(array[i])); + } + return list; + } %} /* ************************************************************************************ * @@ -952,6 +966,9 @@ struct config_str2list { /* ************************************************************************************ * Structure config_file * ************************************************************************************ */ +%ignore config_file::ifs; +%ignore config_file::out_ifs; +%ignore config_file::python_script; struct config_file { int verbosity; int stat_interval; @@ -1035,6 +1052,25 @@ struct config_file { struct config_strlist* python_script; }; +%inline %{ + PyObject* _get_ifs_tuple(struct config_file* cfg) { + return CharArrayAsStringList(cfg->ifs, cfg->num_ifs); + } + PyObject* _get_ifs_out_tuple(struct config_file* cfg) { + return CharArrayAsStringList(cfg->out_ifs, cfg->num_out_ifs); + } +%} + +%extend config_file { + %pythoncode %{ + ifs = property(_unboundmodule._get_ifs_tuple) + out_ifs = property(_unboundmodule._get_ifs_out_tuple) + + def _deprecated_python_script(self): return "cfg.python_script is deprecated, you can use `mod_env['script']` instead." + python_script = property(_deprecated_python_script) + %} +} + /* ************************************************************************************ * ASN: Adding structures related to forwards_lookup and dns_cache_find_delegation * ************************************************************************************ */ diff --git a/pythonmod/pythonmod.c b/pythonmod/pythonmod.c index 628308612ac0..c6294a1d50c9 100644 --- a/pythonmod/pythonmod.c +++ b/pythonmod/pythonmod.c @@ -112,6 +112,34 @@ struct pythonmod_qstate { PyObject* data; }; +/* The dict from __main__ could have remnants from a previous script + * invocation, in a multi python module setup. Usually this is fine since newer + * scripts will update their values. The obvious erroneous case is when mixing + * python scripts that make use of both 'init' and 'init_standard'. This + * results in 'init_standard' to persist on following scripts that don't use it + * (thus not replacing it). This is also problematic in case where a script + * does not define a required function but a previously loaded script did. The + * current solution is to make sure to clean offensive remnants that influence + * further parsing of the individual scripts. + */ +static void +clean_python_function_objects(PyObject* dict) { + const char* function_names[] = { + "init", + "init_standard", + "deinit", + "operate", + "inform_super" + }; + size_t i; + + for(i=0; imodule); pe->dict = PyModule_GetDict(pe->module); Py_XINCREF(pe->dict); + clean_python_function_objects(pe->dict); + pe->data = PyDict_New(); + /* add the script filename to the global "mod_env" for trivial access */ + fname = PyString_FromString(pe->fname); + if(PyDict_SetItemString(pe->data, "script", fname) < 0) { + log_err("pythonmod: could not add item to dictionary"); + Py_XDECREF(fname); + goto python_init_fail; + } + Py_XDECREF(fname); Py_XINCREF(pe->data); /* reference will be stolen below */ if(PyModule_AddObject(pe->module, "mod_env", pe->data) < 0) { log_err("pythonmod: could not add mod_env object"); diff --git a/pythonmod/ubmodule-msg.py b/pythonmod/ubmodule-msg.py index 648368080c07..6a690e281de5 100644 --- a/pythonmod/ubmodule-msg.py +++ b/pythonmod/ubmodule-msg.py @@ -35,7 +35,7 @@ import os def init(id, cfg): - log_info("pythonmod: init called, module id is %d port: %d script: %s" % (id, cfg.port, cfg.python_script)) + log_info("pythonmod: init called, module id is %d port: %d script: %s" % (id, cfg.port, mod_env['script'])) return True def deinit(id): diff --git a/pythonmod/ubmodule-tst.py b/pythonmod/ubmodule-tst.py index 0b9b5a9d2cfa..07543e399d0d 100644 --- a/pythonmod/ubmodule-tst.py +++ b/pythonmod/ubmodule-tst.py @@ -33,7 +33,7 @@ POSSIBILITY OF SUCH DAMAGE. ''' def init(id, cfg): - log_info("pythonmod: init called, module id is %d port: %d script: %s" % (id, cfg.port, cfg.python_script)) + log_info("pythonmod: init called, module id is %d port: %d script: %s" % (id, cfg.port, mod_env['script'])) return True def deinit(id): @@ -55,12 +55,15 @@ def setTTL(qstate, ttl): def dataHex(data, prefix=""): res = "" - for i in range(0, (len(data)+15)/16): + for i in range(0, int((len(data)+15)/16)): res += "%s0x%02X | " % (prefix, i*16) - d = map(lambda x:ord(x), data[i*16:i*16+17]) + if type(data[0]) == type(1): + d = map(lambda x:int(x), data[i*16:i*16+17]) + else: + d = map(lambda x:ord(x), data[i*16:i*16+17]) for ch in d: res += "%02X " % ch - for i in range(0,17-len(d)): + for i in range(0,17-len(data[i*16:i*16+17])): res += " " res += "| " for ch in d: @@ -72,31 +75,31 @@ def dataHex(data, prefix=""): return res def printReturnMsg(qstate): - print "Return MSG rep :: flags: %04X, QDcount: %d, Security:%d, TTL=%d" % (qstate.return_msg.rep.flags, qstate.return_msg.rep.qdcount,qstate.return_msg.rep.security, qstate.return_msg.rep.ttl) - print " qinfo :: qname:",qstate.return_msg.qinfo.qname_list, qstate.return_msg.qinfo.qname_str, "type:",qstate.return_msg.qinfo.qtype_str, "class:",qstate.return_msg.qinfo.qclass_str + print("Return MSG rep :: flags: %04X, QDcount: %d, Security:%d, TTL=%d" % (qstate.return_msg.rep.flags, qstate.return_msg.rep.qdcount,qstate.return_msg.rep.security, qstate.return_msg.rep.ttl)) + print(" qinfo :: qname:",qstate.return_msg.qinfo.qname_list, qstate.return_msg.qinfo.qname_str, "type:",qstate.return_msg.qinfo.qtype_str, "class:",qstate.return_msg.qinfo.qclass_str) if (qstate.return_msg.rep): - print "RRSets:",qstate.return_msg.rep.rrset_count + print("RRSets:",qstate.return_msg.rep.rrset_count) prevkey = None for i in range(0,qstate.return_msg.rep.rrset_count): r = qstate.return_msg.rep.rrsets[i] rk = r.rk - print i,":",rk.dname_list, rk.dname_str, "flags: %04X" % rk.flags, - print "type:",rk.type_str,"(%d)" % ntohs(rk.type), "class:",rk.rrset_class_str,"(%d)" % ntohs(rk.rrset_class) + print(i,":",rk.dname_list, rk.dname_str, "flags: %04X" % rk.flags) + print("type:",rk.type_str,"(%d)" % ntohs(rk.type), "class:",rk.rrset_class_str,"(%d)" % ntohs(rk.rrset_class)) d = r.entry.data - print " RRDatas:",d.count+d.rrsig_count + print(" RRDatas:",d.count+d.rrsig_count) for j in range(0,d.count+d.rrsig_count): - print " ",j,":","TTL=",d.rr_ttl[j],"RR data:" - print dataHex(d.rr_data[j]," ") + print(" ",j,":","TTL=",d.rr_ttl[j],"RR data:") + print(dataHex(d.rr_data[j]," ")) def operate(id, event, qstate, qdata): log_info("pythonmod: operate called, id: %d, event:%s" % (id, strmodulevent(event))) - #print "pythonmod: per query data", qdata + #print("pythonmod: per query data", qdata) - print "Query:", ''.join(map(lambda x:chr(max(32,ord(x))),qstate.qinfo.qname)), qstate.qinfo.qname_list, - print "Type:",qstate.qinfo.qtype_str,"(%d)" % qstate.qinfo.qtype, - print "Class:",qstate.qinfo.qclass_str,"(%d)" % qstate.qinfo.qclass - print + print("Query:", qstate.qinfo.qname, qstate.qinfo.qname_list, qstate.qinfo.qname_str) + print("Type:",qstate.qinfo.qtype_str,"(%d)" % qstate.qinfo.qtype) + print("Class:",qstate.qinfo.qclass_str,"(%d)" % qstate.qinfo.qclass) + print("") # TEST: # > dig @127.0.0.1 www.seznam.cz A @@ -118,7 +121,7 @@ def operate(id, event, qstate, qdata): invalidateQueryInCache(qstate, qstate.return_msg.qinfo) if (qstate.return_msg.rep.authoritative): - print "X"*300 + print("X"*300) setTTL(qstate, 10) #do cache nastavime TTL na 10 if not storeQueryInCache(qstate, qstate.return_msg.qinfo, qstate.return_msg.rep, 0): diff --git a/services/authzone.c b/services/authzone.c index cd3ef8dbbf3d..a1b3d22787d2 100644 --- a/services/authzone.c +++ b/services/authzone.c @@ -2475,6 +2475,7 @@ az_find_ce(struct auth_zone* z, struct query_info* qinfo, struct auth_rrset** rrset) { struct auth_data* n = node; + struct auth_rrset* lookrrset; *ce = NULL; *rrset = NULL; if(!node_exact) { @@ -2497,21 +2498,23 @@ az_find_ce(struct auth_zone* z, struct query_info* qinfo, /* see if the current candidate has issues */ /* not zone apex and has type NS */ if(n->namelen != z->namelen && - (*rrset=az_domain_rrset(n, LDNS_RR_TYPE_NS)) && + (lookrrset=az_domain_rrset(n, LDNS_RR_TYPE_NS)) && /* delegate here, but DS at exact the dp has notype */ (qinfo->qtype != LDNS_RR_TYPE_DS || n->namelen != qinfo->qname_len)) { /* referral */ /* this is ce and the lowernode is nonexisting */ *ce = n; - return 0; + *rrset = lookrrset; + node_exact = 0; } /* not equal to qname and has type DNAME */ if(n->namelen != qinfo->qname_len && - (*rrset=az_domain_rrset(n, LDNS_RR_TYPE_DNAME))) { + (lookrrset=az_domain_rrset(n, LDNS_RR_TYPE_DNAME))) { /* this is ce and the lowernode is nonexisting */ *ce = n; - return 0; + *rrset = lookrrset; + node_exact = 0; } if(*ce == NULL && !domain_has_only_nsec3(n)) { diff --git a/services/listen_dnsport.c b/services/listen_dnsport.c index 60f9b41e5f6c..753550978a07 100644 --- a/services/listen_dnsport.c +++ b/services/listen_dnsport.c @@ -1327,7 +1327,9 @@ ports_create_if(const char* ifname, int do_auto, int do_udp, int do_tcp, log_warn("socket timestamping is not available"); } if(!port_insert(list, s, is_dnscrypt - ?listen_type_udp_dnscrypt:listen_type_udp, + ?listen_type_udp_dnscrypt : + (sock_queue_timeout ? + listen_type_udpancil:listen_type_udp), is_pp2, ub_sock)) { sock_close(s); if(ub_sock->addr) @@ -1498,9 +1500,13 @@ listen_create(struct comm_base* base, struct listen_port* ports, } } else if(ports->ftype == listen_type_udpancil || ports->ftype == listen_type_udpancil_dnscrypt) { +#if defined(AF_INET6) && defined(IPV6_PKTINFO) && defined(HAVE_RECVMSG) cp = comm_point_create_udp_ancil(base, ports->fd, front->udp_buff, ports->pp2_enabled, cb, cb_arg, ports->socket); +#else + log_warn("This system does not support UDP ancilliary data."); +#endif } if(!cp) { log_err("can't create commpoint"); diff --git a/services/mesh.c b/services/mesh.c index 52d14a2d1f54..509bee36a2c4 100644 --- a/services/mesh.c +++ b/services/mesh.c @@ -1197,6 +1197,8 @@ mesh_do_callback(struct mesh_state* m, int rcode, struct reply_info* rep, r->edns.udp_size = EDNS_ADVERTISED_SIZE; r->edns.ext_rcode = 0; r->edns.bits &= EDNS_DO; + if(m->s.env->cfg->disable_edns_do && (r->edns.bits&EDNS_DO)) + r->edns.edns_present = 0; if(!inplace_cb_reply_call(m->s.env, &m->s.qinfo, &m->s, rep, LDNS_RCODE_NOERROR, &r->edns, NULL, m->s.region, start_time) || @@ -1224,11 +1226,12 @@ static inline int mesh_is_rpz_respip_tcponly_action(struct mesh_state const* m) { struct respip_action_info const* respip_info = m->s.respip_action_info; - return respip_info == NULL + return (respip_info == NULL ? 0 : (respip_info->rpz_used && !respip_info->rpz_disabled - && respip_info->action == respip_truncate); + && respip_info->action == respip_truncate)) + || m->s.tcp_required; } static inline int @@ -1371,6 +1374,8 @@ mesh_send_reply(struct mesh_state* m, int rcode, struct reply_info* rep, r->edns.udp_size = EDNS_ADVERTISED_SIZE; r->edns.ext_rcode = 0; r->edns.bits &= EDNS_DO; + if(m->s.env->cfg->disable_edns_do && (r->edns.bits&EDNS_DO)) + r->edns.edns_present = 0; m->s.qinfo.qname = r->qname; m->s.qinfo.local_alias = r->local_alias; diff --git a/services/outside_network.c b/services/outside_network.c index 2a219cbc6e92..12923f07d788 100644 --- a/services/outside_network.c +++ b/services/outside_network.c @@ -550,7 +550,6 @@ reuse_tcp_find(struct outside_network* outnet, struct sockaddr_storage* addr, log_assert(&key_p.reuse != (struct reuse_tcp*)result); log_assert(&key_p != ((struct reuse_tcp*)result)->pending); } - /* not found, return null */ /* It is possible that we search for something before the first element * in the tree. Replace a null pointer with the first element. @@ -560,6 +559,7 @@ reuse_tcp_find(struct outside_network* outnet, struct sockaddr_storage* addr, result = rbtree_first(&outnet->tcp_reuse); } + /* not found, return null */ if(!result || result == RBTREE_NULL) return NULL; diff --git a/services/rpz.c b/services/rpz.c index 6ce83cb66a35..18d76c07bff3 100644 --- a/services/rpz.c +++ b/services/rpz.c @@ -2162,7 +2162,7 @@ rpz_apply_nsip_trigger(struct module_qstate* ms, struct rpz* r, case RPZ_TCP_ONLY_ACTION: /* basically a passthru here but the tcp-only will be * honored before the query gets sent. */ - ms->respip_action_info->action = respip_truncate; + ms->tcp_required = 1; ret = NULL; break; case RPZ_DROP_ACTION: @@ -2217,7 +2217,7 @@ rpz_apply_nsdname_trigger(struct module_qstate* ms, struct rpz* r, case RPZ_TCP_ONLY_ACTION: /* basically a passthru here but the tcp-only will be * honored before the query gets sent. */ - ms->respip_action_info->action = respip_truncate; + ms->tcp_required = 1; ret = NULL; break; case RPZ_DROP_ACTION: @@ -2428,7 +2428,7 @@ struct dns_msg* rpz_callback_from_iterator_cname(struct module_qstate* ms, case RPZ_TCP_ONLY_ACTION: /* basically a passthru here but the tcp-only will be * honored before the query gets sent. */ - ms->respip_action_info->action = respip_truncate; + ms->tcp_required = 1; ret = NULL; break; case RPZ_DROP_ACTION: @@ -2448,6 +2448,10 @@ struct dns_msg* rpz_callback_from_iterator_cname(struct module_qstate* ms, rpz_action_to_string(localzone_type_to_rpz_action(lzt))); ret = NULL; } + if(r->log) + log_rpz_apply("qname", (z?z->name:NULL), NULL, + localzone_type_to_rpz_action(lzt), + &is->qchase, NULL, ms, r->log_name); lock_rw_unlock(&z->lock); lock_rw_unlock(&a->lock); return ret; diff --git a/sldns/str2wire.c b/sldns/str2wire.c index 45e247613745..fdd40e0f2238 100644 --- a/sldns/str2wire.c +++ b/sldns/str2wire.c @@ -2459,12 +2459,13 @@ int sldns_str2wire_wks_buf(const char* str, uint8_t* rd, size_t* len) (void)strlcpy(proto_str, token, sizeof(proto_str)); } else { int serv_port; - struct servent *serv = getservbyname(token, proto_str); - if(serv) serv_port=(int)ntohs((uint16_t)serv->s_port); + if(atoi(token) != 0) serv_port=atoi(token); + else if(strcmp(token, "0") == 0) serv_port=0; else if(strcasecmp(token, "domain")==0) serv_port=53; else { - serv_port = atoi(token); - if(serv_port == 0 && strcmp(token, "0") != 0) { + struct servent *serv = getservbyname(token, proto_str); + if(serv) serv_port=(int)ntohs((uint16_t)serv->s_port); + else { #ifdef HAVE_ENDSERVENT endservent(); #endif @@ -2474,16 +2475,16 @@ int sldns_str2wire_wks_buf(const char* str, uint8_t* rd, size_t* len) return RET_ERR(LDNS_WIREPARSE_ERR_SYNTAX, sldns_buffer_position(&strbuf)); } - if(serv_port < 0 || serv_port > 65535) { + } + if(serv_port < 0 || serv_port > 65535) { #ifdef HAVE_ENDSERVENT - endservent(); + endservent(); #endif #ifdef HAVE_ENDPROTOENT - endprotoent(); + endprotoent(); #endif - return RET_ERR(LDNS_WIREPARSE_ERR_SYNTAX, - sldns_buffer_position(&strbuf)); - } + return RET_ERR(LDNS_WIREPARSE_ERR_SYNTAX, + sldns_buffer_position(&strbuf)); } if(rd_len < 1+serv_port/8+1) { /* bitmap is larger, init new bytes at 0 */ diff --git a/sldns/wire2str.c b/sldns/wire2str.c index e6278ff560da..2b5dc0513f81 100644 --- a/sldns/wire2str.c +++ b/sldns/wire2str.c @@ -192,6 +192,7 @@ static sldns_lookup_table sldns_edns_options_data[] = { { 6, "DHU" }, { 7, "N3U" }, { 8, "edns-client-subnet" }, + { 10, "COOKIE" }, { 11, "edns-tcp-keepalive"}, { 12, "Padding" }, { 15, "EDE"}, @@ -199,6 +200,38 @@ static sldns_lookup_table sldns_edns_options_data[] = { }; sldns_lookup_table* sldns_edns_options = sldns_edns_options_data; +/* From RFC8914 5.2 Table 3, the "Extended DNS Error Codes" registry. */ +static sldns_lookup_table sldns_edns_ede_codes_data[] = { + { LDNS_EDE_NONE, "None" }, + { LDNS_EDE_OTHER, "Other Error" }, + { LDNS_EDE_UNSUPPORTED_DNSKEY_ALG, "Unsupported DNSKEY Algorithm" }, + { LDNS_EDE_UNSUPPORTED_DS_DIGEST, "Unsupported DS Digest Type" }, + { LDNS_EDE_STALE_ANSWER, "Stale Answer" }, + { LDNS_EDE_FORGED_ANSWER, "Forged Answer" }, + { LDNS_EDE_DNSSEC_INDETERMINATE, "DNSSEC Indeterminate" }, + { LDNS_EDE_DNSSEC_BOGUS, "DNSSEC Bogus" }, + { LDNS_EDE_SIGNATURE_EXPIRED, "Signature Expired" }, + { LDNS_EDE_SIGNATURE_NOT_YET_VALID, "Signature Not Yet Valid" }, + { LDNS_EDE_DNSKEY_MISSING, "DNSKEY Missing" }, + { LDNS_EDE_RRSIGS_MISSING, "RRSIGs Missing" }, + { LDNS_EDE_NO_ZONE_KEY_BIT_SET, "No Zone Key Bit Set" }, + { LDNS_EDE_NSEC_MISSING, "NSEC Missing" }, + { LDNS_EDE_CACHED_ERROR, "Cached Error" }, + { LDNS_EDE_NOT_READY, "Not Ready" }, + { LDNS_EDE_BLOCKED, "Blocked" }, + { LDNS_EDE_CENSORED, "Censored" }, + { LDNS_EDE_FILTERED, "Filtered" }, + { LDNS_EDE_PROHIBITED, "Prohibited" }, + { LDNS_EDE_STALE_NXDOMAIN_ANSWER, "Stale NXDOMAIN Answer" }, + { LDNS_EDE_NOT_AUTHORITATIVE, "Not Authoritative" }, + { LDNS_EDE_NOT_SUPPORTED, "Not Supported" }, + { LDNS_EDE_NO_REACHABLE_AUTHORITY, "No Reachable Authority" }, + { LDNS_EDE_NETWORK_ERROR, "Network Error" }, + { LDNS_EDE_INVALID_DATA, "Invalid Data" }, + { 0, NULL} +}; +sldns_lookup_table* sldns_edns_ede_codes = sldns_edns_ede_codes_data; + static sldns_lookup_table sldns_tsig_errors_data[] = { { LDNS_TSIG_ERROR_NOERROR, "NOERROR" }, { LDNS_RCODE_FORMERR, "FORMERR" }, @@ -2234,6 +2267,52 @@ static int sldns_wire2str_edns_keepalive_print(char** s, size_t* sl, return w; } +int sldns_wire2str_edns_ede_print(char** s, size_t* sl, + uint8_t* data, size_t len) +{ + uint16_t ede_code; + int w = 0; + sldns_lookup_table *lt; + size_t i; + int printable; + + if(len < 2) { + w += sldns_str_print(s, sl, "malformed ede "); + w += print_hex_buf(s, sl, data, len); + return w; + } + + ede_code = sldns_read_uint16(data); + lt = sldns_lookup_by_id(sldns_edns_ede_codes, (int)ede_code); + if(lt && lt->name) + w += sldns_str_print(s, sl, "%s", lt->name); + else w += sldns_str_print(s, sl, "%d", (int)ede_code); + + if(len == 2) + return w; + + w += sldns_str_print(s, sl, " "); + + /* If it looks like text, show it as text. */ + printable=1; + for(i=2; iauto_trust_anchor_file_list, cfg->chrootdir, cfg); check_chroot_filelist_wild("trusted-keys-file", cfg->trusted_keys_file_list, cfg->chrootdir, cfg); + if(cfg->disable_edns_do && strstr(cfg->module_conf, "validator") + && (cfg->trust_anchor_file_list + || cfg->trust_anchor_list + || cfg->auto_trust_anchor_file_list + || cfg->trusted_keys_file_list)) { + char* key = NULL; + if(cfg->auto_trust_anchor_file_list) + key = cfg->auto_trust_anchor_file_list->str; + if(!key && cfg->trust_anchor_file_list) + key = cfg->trust_anchor_file_list->str; + if(!key && cfg->trust_anchor_list) + key = cfg->trust_anchor_list->str; + if(!key && cfg->trusted_keys_file_list) + key = cfg->trusted_keys_file_list->str; + if(!key) key = ""; + fatal_exit("disable-edns-do does not allow DNSSEC to work, but the validator module uses a trust anchor %s, turn off disable-edns-do or disable validation", key); + } #ifdef USE_IPSECMOD if(cfg->ipsecmod_enabled && strstr(cfg->module_conf, "ipsecmod")) { /* only check hook if enabled */ diff --git a/testcode/dohclient.c b/testcode/dohclient.c index de9f39d7d941..2c12a5043f65 100644 --- a/testcode/dohclient.c +++ b/testcode/dohclient.c @@ -286,7 +286,7 @@ static ssize_t http2_recv_cb(nghttp2_session* ATTR_UNUSED(session), if(want == SSL_ERROR_ZERO_RETURN) { return NGHTTP2_ERR_EOF; } - log_crypto_err("could not SSL_read"); + log_crypto_err_io("could not SSL_read", want); return NGHTTP2_ERR_EOF; } return r; @@ -317,7 +317,7 @@ static ssize_t http2_send_cb(nghttp2_session* ATTR_UNUSED(session), if(want == SSL_ERROR_ZERO_RETURN) { return NGHTTP2_ERR_CALLBACK_FAILURE; } - log_crypto_err("could not SSL_write"); + log_crypto_err_io("could not SSL_write", want); return NGHTTP2_ERR_CALLBACK_FAILURE; } return r; @@ -526,7 +526,7 @@ run(struct http2_session* h2_session, int port, int no_tls, int count, char** q) r = SSL_get_error(ssl, r); if(r != SSL_ERROR_WANT_READ && r != SSL_ERROR_WANT_WRITE) { - log_crypto_err("could not ssl_handshake"); + log_crypto_err_io("could not ssl_handshake", r); exit(1); } } diff --git a/testcode/fake_event.c b/testcode/fake_event.c index 2140b212adc3..13970c37726a 100644 --- a/testcode/fake_event.c +++ b/testcode/fake_event.c @@ -1249,7 +1249,7 @@ struct serviced_query* outnet_serviced_query(struct outside_network* outnet, edns.edns_version = EDNS_ADVERTISED_VERSION; edns.udp_size = EDNS_ADVERTISED_SIZE; edns.bits = 0; - if(dnssec) + if((dnssec & EDNS_DO)) edns.bits = EDNS_DO; edns.padding_block_size = 0; edns.cookie_present = 0; diff --git a/testcode/streamtcp.1 b/testcode/streamtcp.1 index f02b168d2ac8..55ed4a27902d 100644 --- a/testcode/streamtcp.1 +++ b/testcode/streamtcp.1 @@ -61,6 +61,17 @@ Specify the server to send the queries to. If not specified localhost (127.0.0.1 .B \-d \fIsecs Delay after the connection before sending query. This tests the timeout on the other side, eg. if shorter the connection is closed. +.TP +.B \-p \fIclient +Use proxy protocol to send the query. Specify the ipaddr@portnr of the client +to include in PROXYv2. +.TP +.B IXFR=serial +Pass the type of the query as IXFR=N to send an IXFR query with serial N. +.TP +.B NOTIFY[=serial] +Pass the type of the query as NOTIFY[=N] to send a notify packet. The serial N +of the new zone can be included. .SH "EXAMPLES" .LP Some examples of use. diff --git a/testcode/streamtcp.c b/testcode/streamtcp.c index 84d2b65f6f5c..037bcfd8b6a4 100644 --- a/testcode/streamtcp.c +++ b/testcode/streamtcp.c @@ -79,6 +79,8 @@ static void usage(char* argv[]) printf("-d secs delay after connection before sending query\n"); printf("-s use ssl\n"); printf("-h this help text\n"); + printf("IXFR=N for the type, sends ixfr query with serial N.\n"); + printf("NOTIFY[=N] for the type, sends notify. Can set new zone serial N.\n"); exit(1); } @@ -115,6 +117,29 @@ open_svr(const char* svr, int udp, struct sockaddr_storage* addr, return fd; } +/** Append a SOA record with serial number */ +static void +write_soa_serial_to_buf(sldns_buffer* buf, struct query_info* qinfo, + uint32_t serial) +{ + sldns_buffer_set_position(buf, sldns_buffer_limit(buf)); + sldns_buffer_set_limit(buf, sldns_buffer_capacity(buf)); + /* Write compressed reference to the query */ + sldns_buffer_write_u16(buf, PTR_CREATE(LDNS_HEADER_SIZE)); + sldns_buffer_write_u16(buf, LDNS_RR_TYPE_SOA); + sldns_buffer_write_u16(buf, qinfo->qclass); + sldns_buffer_write_u32(buf, 3600); /* TTL */ + sldns_buffer_write_u16(buf, 1+1+4*5); /* rdatalen */ + sldns_buffer_write_u8(buf, 0); /* primary "." */ + sldns_buffer_write_u8(buf, 0); /* email "." */ + sldns_buffer_write_u32(buf, serial); /* serial */ + sldns_buffer_write_u32(buf, 0); /* refresh */ + sldns_buffer_write_u32(buf, 0); /* retry */ + sldns_buffer_write_u32(buf, 0); /* expire */ + sldns_buffer_write_u32(buf, 0); /* minimum */ + sldns_buffer_flip(buf); +} + /** write a query over the TCP fd */ static void write_q(int fd, int udp, SSL* ssl, sldns_buffer* buf, uint16_t id, @@ -123,6 +148,8 @@ write_q(int fd, int udp, SSL* ssl, sldns_buffer* buf, uint16_t id, { struct query_info qinfo; size_t proxy_buf_limit = sldns_buffer_limit(proxy_buf); + int have_serial = 0, is_notify = 0; + uint32_t serial = 0; /* qname */ qinfo.qname = sldns_str2wire_dname(strname, &qinfo.qname_len); if(!qinfo.qname) { @@ -130,12 +157,27 @@ write_q(int fd, int udp, SSL* ssl, sldns_buffer* buf, uint16_t id, exit(1); } - /* qtype and qclass */ - qinfo.qtype = sldns_get_rr_type_by_name(strtype); - if(qinfo.qtype == 0 && strcmp(strtype, "TYPE0") != 0) { - printf("cannot parse query type: '%s'\n", strtype); - exit(1); + /* qtype */ + if(strncasecmp(strtype, "IXFR=", 5) == 0) { + serial = (uint32_t)atoi(strtype+5); + have_serial = 1; + qinfo.qtype = LDNS_RR_TYPE_IXFR; + } else if(strcasecmp(strtype, "NOTIFY") == 0) { + is_notify = 1; + qinfo.qtype = LDNS_RR_TYPE_SOA; + } else if(strncasecmp(strtype, "NOTIFY=", 7) == 0) { + serial = (uint32_t)atoi(strtype+7); + have_serial = 1; + is_notify = 1; + qinfo.qtype = LDNS_RR_TYPE_SOA; + } else { + qinfo.qtype = sldns_get_rr_type_by_name(strtype); + if(qinfo.qtype == 0 && strcmp(strtype, "TYPE0") != 0) { + printf("cannot parse query type: '%s'\n", strtype); + exit(1); + } } + /* qclass */ qinfo.qclass = sldns_get_rr_class_by_name(strclass); if(qinfo.qclass == 0 && strcmp(strclass, "CLASS0") != 0) { printf("cannot parse query class: '%s'\n", strclass); @@ -150,6 +192,21 @@ write_q(int fd, int udp, SSL* ssl, sldns_buffer* buf, uint16_t id, sldns_buffer_write_u16_at(buf, 0, id); sldns_buffer_write_u16_at(buf, 2, BIT_RD); + if(have_serial && qinfo.qtype == LDNS_RR_TYPE_IXFR) { + /* Attach serial to SOA record in the authority section. */ + write_soa_serial_to_buf(buf, &qinfo, serial); + LDNS_NSCOUNT_SET(sldns_buffer_begin(buf), 1); + } + if(is_notify) { + LDNS_OPCODE_SET(sldns_buffer_begin(buf), LDNS_PACKET_NOTIFY); + LDNS_RD_CLR(sldns_buffer_begin(buf)); + LDNS_AA_SET(sldns_buffer_begin(buf)); + if(have_serial) { + write_soa_serial_to_buf(buf, &qinfo, serial); + LDNS_ANCOUNT_SET(sldns_buffer_begin(buf), 1); + } + } + if(1) { /* add EDNS DO */ struct edns_data edns; @@ -361,6 +418,7 @@ static int parse_pp2_client(const char* pp2_client, int udp, sldns_buffer* proxy_buf) { struct sockaddr_storage pp2_addr; + size_t bytes_written; socklen_t pp2_addrlen = 0; memset(&pp2_addr, 0, sizeof(pp2_addr)); if(*pp2_client == 0) return 0; @@ -369,7 +427,9 @@ static int parse_pp2_client(const char* pp2_client, int udp, exit(1); } sldns_buffer_clear(proxy_buf); - pp2_write_to_buf(proxy_buf, &pp2_addr, !udp); + bytes_written = pp2_write_to_buf(sldns_buffer_begin(proxy_buf), + sldns_buffer_remaining(proxy_buf), &pp2_addr, !udp); + sldns_buffer_set_position(proxy_buf, bytes_written); sldns_buffer_flip(proxy_buf); return 1; } @@ -406,7 +466,7 @@ send_em(const char* svr, const char* pp2_client, int udp, int usessl, r = SSL_get_error(ssl, r); if(r != SSL_ERROR_WANT_READ && r != SSL_ERROR_WANT_WRITE) { - log_crypto_err("could not ssl_handshake"); + log_crypto_err_io("could not ssl_handshake", r); exit(1); } } @@ -541,6 +601,8 @@ int main(int argc, char** argv) break; case 'p': pp2_client = optarg; + pp_init(&sldns_write_uint16, + &sldns_write_uint32); break; case 'a': onarrival = 1; diff --git a/testcode/unitauth.c b/testcode/unitauth.c index d193526b8c28..11eeb43b2163 100644 --- a/testcode/unitauth.c +++ b/testcode/unitauth.c @@ -76,10 +76,18 @@ static const char* zone_example_com = "out.example.com. 3600 IN CNAME www.example.com.\n" "plan.example.com. 3600 IN CNAME nonexist.example.com.\n" "redir.example.com. 3600 IN DNAME redir.example.org.\n" +"redir2.example.com. 3600 IN DNAME redir2.example.org.\n" +"obscured.redir2.example.com. 3600 IN A 10.0.0.12\n" +"under2.redir2.example.com. 3600 IN DNAME redir3.example.net.\n" +"doubleobscured.under2.redir2.example.com. 3600 IN A 10.0.0.13\n" "sub.example.com. 3600 IN NS ns1.sub.example.com.\n" "sub.example.com. 3600 IN NS ns2.sub.example.com.\n" "ns1.sub.example.com. 3600 IN A 10.0.0.6\n" "ns2.sub.example.com. 3600 IN AAAA 2001::7\n" +"sub2.example.com. 3600 IN NS ns1.sub.example.com.\n" +"obscured.sub2.example.com. 3600 IN A 10.0.0.10\n" +"under.sub2.example.com. 3600 IN NS ns.under.sub2.example.com.\n" +"doubleobscured.under.sub2.example.com. 3600 IN A 10.0.0.11\n" "*.wild.example.com. 3600 IN A 10.0.0.8\n" "*.wild2.example.com. 3600 IN CNAME www.example.com.\n" "*.wild3.example.com. 3600 IN A 10.0.0.8\n" @@ -281,6 +289,54 @@ static struct q_ans example_com_queries[] = { "foo.abc.redir.example.com. 0 IN CNAME foo.abc.redir.example.org.\n" }, + { "example.com", "redir2.example.com. DNAME", "", +";flags QR AA rcode NOERROR\n" +";answer section\n" +"redir2.example.com. 3600 IN DNAME redir2.example.org.\n" + }, + + { "example.com", "abc.redir2.example.com. A", "", +";flags QR AA rcode NOERROR\n" +";answer section\n" +"redir2.example.com. 3600 IN DNAME redir2.example.org.\n" +"abc.redir2.example.com. 0 IN CNAME abc.redir2.example.org.\n" + }, + + { "example.com", "obscured.redir2.example.com. A", "", +";flags QR AA rcode NOERROR\n" +";answer section\n" +"redir2.example.com. 3600 IN DNAME redir2.example.org.\n" +"obscured.redir2.example.com. 0 IN CNAME obscured.redir2.example.org.\n" + }, + + { "example.com", "under2.redir2.example.com. A", "", +";flags QR AA rcode NOERROR\n" +";answer section\n" +"redir2.example.com. 3600 IN DNAME redir2.example.org.\n" +"under2.redir2.example.com. 0 IN CNAME under2.redir2.example.org.\n" + }, + + { "example.com", "doubleobscured.under2.redir2.example.com. A", "", +";flags QR AA rcode NOERROR\n" +";answer section\n" +"redir2.example.com. 3600 IN DNAME redir2.example.org.\n" +"doubleobscured.under2.redir2.example.com. 0 IN CNAME doubleobscured.under2.redir2.example.org.\n" + }, + + { "example.com", "foo.doubleobscured.under2.redir2.example.com. A", "", +";flags QR AA rcode NOERROR\n" +";answer section\n" +"redir2.example.com. 3600 IN DNAME redir2.example.org.\n" +"foo.doubleobscured.under2.redir2.example.com. 0 IN CNAME foo.doubleobscured.under2.redir2.example.org.\n" + }, + + { "example.com", "foo.under2.redir2.example.com. A", "", +";flags QR AA rcode NOERROR\n" +";answer section\n" +"redir2.example.com. 3600 IN DNAME redir2.example.org.\n" +"foo.under2.redir2.example.com. 0 IN CNAME foo.under2.redir2.example.org.\n" + }, + { "example.com", "sub.example.com. NS", "", ";flags QR rcode NOERROR\n" ";authority section\n" @@ -357,6 +413,78 @@ static struct q_ans example_com_queries[] = { "ns2.sub.example.com. 3600 IN AAAA 2001::7\n" }, + { "example.com", "sub2.example.com. A", "", +";flags QR rcode NOERROR\n" +";authority section\n" +"sub2.example.com. 3600 IN NS ns1.sub.example.com.\n" +";additional section\n" +"ns1.sub.example.com. 3600 IN A 10.0.0.6\n" + }, + + { "example.com", "sub2.example.com. NS", "", +";flags QR rcode NOERROR\n" +";authority section\n" +"sub2.example.com. 3600 IN NS ns1.sub.example.com.\n" +";additional section\n" +"ns1.sub.example.com. 3600 IN A 10.0.0.6\n" + }, + + { "example.com", "obscured.sub2.example.com. A", "", +";flags QR rcode NOERROR\n" +";authority section\n" +"sub2.example.com. 3600 IN NS ns1.sub.example.com.\n" +";additional section\n" +"ns1.sub.example.com. 3600 IN A 10.0.0.6\n" + }, + + { "example.com", "abc.obscured.sub2.example.com. A", "", +";flags QR rcode NOERROR\n" +";authority section\n" +"sub2.example.com. 3600 IN NS ns1.sub.example.com.\n" +";additional section\n" +"ns1.sub.example.com. 3600 IN A 10.0.0.6\n" + }, + + { "example.com", "under.sub2.example.com. A", "", +";flags QR rcode NOERROR\n" +";authority section\n" +"sub2.example.com. 3600 IN NS ns1.sub.example.com.\n" +";additional section\n" +"ns1.sub.example.com. 3600 IN A 10.0.0.6\n" + }, + + { "example.com", "under.sub2.example.com. NS", "", +";flags QR rcode NOERROR\n" +";authority section\n" +"sub2.example.com. 3600 IN NS ns1.sub.example.com.\n" +";additional section\n" +"ns1.sub.example.com. 3600 IN A 10.0.0.6\n" + }, + + { "example.com", "abc.under.sub2.example.com. A", "", +";flags QR rcode NOERROR\n" +";authority section\n" +"sub2.example.com. 3600 IN NS ns1.sub.example.com.\n" +";additional section\n" +"ns1.sub.example.com. 3600 IN A 10.0.0.6\n" + }, + + { "example.com", "doubleobscured.under.sub2.example.com. A", "", +";flags QR rcode NOERROR\n" +";authority section\n" +"sub2.example.com. 3600 IN NS ns1.sub.example.com.\n" +";additional section\n" +"ns1.sub.example.com. 3600 IN A 10.0.0.6\n" + }, + + { "example.com", "abc.doubleobscured.under.sub2.example.com. A", "", +";flags QR rcode NOERROR\n" +";authority section\n" +"sub2.example.com. 3600 IN NS ns1.sub.example.com.\n" +";additional section\n" +"ns1.sub.example.com. 3600 IN A 10.0.0.6\n" + }, + { "example.com", "wild.example.com. A", "", ";flags QR AA rcode NOERROR\n" ";authority section\n" diff --git a/testdata/autotrust_init_failsig.rpl b/testdata/autotrust_init_failsig.rpl index 29a8d11d193d..4642a31bca8d 100644 --- a/testdata/autotrust_init_failsig.rpl +++ b/testdata/autotrust_init_failsig.rpl @@ -139,9 +139,11 @@ SECTION QUESTION www.example.com. IN A ENTRY_END +; ede=6 with sha1, and ede=7 without, due to the fake-sha1 option it picks +; a different error cause, the signature expiry or crypto mismatch. STEP 20 CHECK_ANSWER ENTRY_BEGIN -MATCH all ede=6 +MATCH all ede=any REPLY QR RD RA DO SERVFAIL SECTION QUESTION www.example.com. IN A @@ -158,7 +160,7 @@ ENTRY_END STEP 22 CHECK_ANSWER ENTRY_BEGIN -MATCH all ede=6 +MATCH all ede=any REPLY QR RA DO SERVFAIL SECTION QUESTION www.example.com. IN A diff --git a/testdata/cachedb_no_store.tdir/cachedb_no_store.conf b/testdata/cachedb_no_store.tdir/cachedb_no_store.conf new file mode 100644 index 000000000000..ff76cc37970c --- /dev/null +++ b/testdata/cachedb_no_store.tdir/cachedb_no_store.conf @@ -0,0 +1,29 @@ +server: + verbosity: 4 + interface: 127.0.0.1 + port: @PORT@ + use-syslog: no + directory: "" + pidfile: "unbound.pid" + chroot: "" + username: "" + module-config: "cachedb iterator" + do-not-query-localhost: no + qname-minimisation: no + +forward-zone: + name: "." + forward-addr: 127.0.0.1@@TOPORT@ + +stub-zone: + name: "example.com" + stub-addr: 127.0.0.1@@TOPORT@ + +remote-control: + control-enable: yes + control-interface: @CONTROL_PATH@/controlpipe.@CONTROL_PID@ + control-use-cert: no + +cachedb: + backend: "testframe" + secret-seed: "testvalue" diff --git a/testdata/cachedb_no_store.tdir/cachedb_no_store.dsc b/testdata/cachedb_no_store.tdir/cachedb_no_store.dsc new file mode 100644 index 000000000000..9d267436edf6 --- /dev/null +++ b/testdata/cachedb_no_store.tdir/cachedb_no_store.dsc @@ -0,0 +1,16 @@ +BaseName: cachedb_no_store +Version: 1.0 +Description: cachedb test the cachedb-no-store option +CreationDate: Wed 11 Oct 11:00:00 CEST 2023 +Maintainer: dr. W.C.A. Wijngaards +Category: +Component: +CmdDepends: +Depends: +Help: +Pre: cachedb_no_store.pre +Post: cachedb_no_store.post +Test: cachedb_no_store.test +AuxFiles: +Passed: +Failure: diff --git a/testdata/cachedb_no_store.tdir/cachedb_no_store.post b/testdata/cachedb_no_store.tdir/cachedb_no_store.post new file mode 100644 index 000000000000..901f01a8753d --- /dev/null +++ b/testdata/cachedb_no_store.tdir/cachedb_no_store.post @@ -0,0 +1,20 @@ +# #-- cachedb_no_store.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 +PRE="../.." +. ../common.sh + +echo "> cat logfiles" +cat fwd.log +if test -f fwd2.log; then cat fwd2.log; else echo "no fwd2.log"; fi +if test -f fwd3.log; then cat fwd3.log; else echo "no fwd3.log"; fi +if test -f fwd4.log; then cat fwd4.log; else echo "no fwd4.log"; fi +cat unbound.log +if test -f unbound2.log; then cat unbound2.log; else echo "no unbound2.log"; fi +kill_pid $FWD_PID +kill_pid `cat unbound.pid` +rm -f $CONTROL_PATH/controlpipe.$CONTROL_PID diff --git a/testdata/cachedb_no_store.tdir/cachedb_no_store.pre b/testdata/cachedb_no_store.tdir/cachedb_no_store.pre new file mode 100644 index 000000000000..e59d3b8da759 --- /dev/null +++ b/testdata/cachedb_no_store.tdir/cachedb_no_store.pre @@ -0,0 +1,36 @@ +# #-- cachedb_no_store.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 "define USE_CACHEDB 1" $PRE/config.h; then echo test enabled; else skip_test "test skipped"; 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 cachedb_no_store.testns >fwd.log 2>&1 & +FWD_PID=$! +echo "FWD_PID=$FWD_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?@CONTROL_PATH\@?'$CONTROL_PATH'?' -e 's/@CONTROL_PID@/'$CONTROL_PID'/' < cachedb_no_store.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_unbound_up unbound.log diff --git a/testdata/cachedb_no_store.tdir/cachedb_no_store.servfail.testns b/testdata/cachedb_no_store.tdir/cachedb_no_store.servfail.testns new file mode 100644 index 000000000000..b41abb0ff629 --- /dev/null +++ b/testdata/cachedb_no_store.tdir/cachedb_no_store.servfail.testns @@ -0,0 +1,8 @@ +ENTRY_BEGIN +MATCH opcode +ADJUST copy_id copy_query +REPLY QR AA SERVFAIL +SECTION QUESTION +txt1.example.com. IN TXT +SECTION ANSWER +ENTRY_END diff --git a/testdata/cachedb_no_store.tdir/cachedb_no_store.test b/testdata/cachedb_no_store.tdir/cachedb_no_store.test new file mode 100644 index 000000000000..352026844776 --- /dev/null +++ b/testdata/cachedb_no_store.tdir/cachedb_no_store.test @@ -0,0 +1,132 @@ +# #-- cachedb_no_store.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 +get_ldns_testns + +# query for a text record that is stored by unbound's cache and cachedb +# in the testframe cache. +echo "> dig txt1.example.com." +dig @localhost -p $UNBOUND_PORT txt1.example.com. TXT | tee outfile +if grep "example text message" outfile; then + echo "OK" +else + echo "Not OK" + exit 1 +fi + +# stop the forwarder with servfail, to check the answer came from the cache +echo "> stop ldns-testns" +kill_pid $FWD_PID +echo "> start ldns-testns with servfails" +$LDNS_TESTNS -p $FWD_PORT cachedb_no_store.servfail.testns >fwd2.log 2>&1 & +FWD_PID=$! +echo "FWD_PID=$FWD_PID" >> .tpkg.var.test +wait_ldns_testns_up fwd2.log + +echo "> dig txt1.example.com. from unbound cache" +dig @localhost -p $UNBOUND_PORT txt1.example.com. TXT | tee outfile +if grep "example text message" outfile; then + echo "OK" +else + echo "Not OK" + exit 1 +fi + +# clear the cache of unbound, but not cachedb testframe cache +echo "> unbound-control flush" +$PRE/unbound-control -c ub.conf flush_type txt1.example.com. TXT +if test $? -ne 0; then + echo "wrong exit value." + exit 1 +else + echo "exit value: OK" +fi + +echo "> dig txt1.example.com. from cachedb" +dig @localhost -p $UNBOUND_PORT txt1.example.com. TXT | tee outfile +if grep "example text message" outfile; then + echo "OK" +else + echo "Not OK" + exit 1 +fi + +# start the forwarder again. +echo "> stop ldns-testns" +kill_pid $FWD_PID +echo "> start ldns-testns" +$LDNS_TESTNS -p $FWD_PORT cachedb_no_store.testns >fwd3.log 2>&1 & +FWD_PID=$! +echo "FWD_PID=$FWD_PID" >> .tpkg.var.test +wait_ldns_testns_up fwd3.log + +# stop unbound to flush the cachedb cache +echo "> stop unbound" +kill_pid `cat unbound.pid` + +echo "" +echo "> config unbound with cachedb-no-store: yes" +echo "cachedb: cachedb-no-store: yes" >> ub.conf + +# start unbound again. +echo "> start unbound" +$PRE/unbound -d -c ub.conf >unbound2.log 2>&1 & +UNBOUND_PID=$! +echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test +wait_unbound_up unbound2.log + +echo "" +echo "> dig txt1.example.com." +dig @localhost -p $UNBOUND_PORT txt1.example.com. TXT | tee outfile +if grep "example text message" outfile; then + echo "OK" +else + echo "Not OK" + exit 1 +fi + +# stop the forwarder with servfail, to check the answer came from the cache +echo "> stop ldns-testns" +kill_pid $FWD_PID +echo "> start ldns-testns with servfails" +$LDNS_TESTNS -p $FWD_PORT cachedb_no_store.servfail.testns >fwd4.log 2>&1 & +FWD_PID=$! +echo "FWD_PID=$FWD_PID" >> .tpkg.var.test +wait_ldns_testns_up fwd4.log + +echo "> dig txt1.example.com. from unbound cache" +dig @localhost -p $UNBOUND_PORT txt1.example.com. TXT | tee outfile +if grep "example text message" outfile; then + echo "OK" +else + echo "Not OK" + exit 1 +fi + +# clear the cache of unbound, but not cachedb testframe cache +echo "> unbound-control flush" +$PRE/unbound-control -c ub.conf flush_type txt1.example.com. TXT +if test $? -ne 0; then + echo "wrong exit value." + exit 1 +else + echo "exit value: OK" +fi + +echo "> dig txt1.example.com. from cachedb, but that has no message stored" +dig @localhost -p $UNBOUND_PORT txt1.example.com. TXT | tee outfile +if grep "SERVFAIL" outfile; then + echo "OK" +else + echo "Not OK" + exit 1 +fi + +exit 0 diff --git a/testdata/cachedb_no_store.tdir/cachedb_no_store.testns b/testdata/cachedb_no_store.tdir/cachedb_no_store.testns new file mode 100644 index 000000000000..282b224f82bd --- /dev/null +++ b/testdata/cachedb_no_store.tdir/cachedb_no_store.testns @@ -0,0 +1,9 @@ +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +txt1.example.com. IN TXT +SECTION ANSWER +txt1.example.com. IN TXT "example text message" +ENTRY_END diff --git a/testdata/disable_edns_do.rpl b/testdata/disable_edns_do.rpl new file mode 100644 index 000000000000..82a16da062f1 --- /dev/null +++ b/testdata/disable_edns_do.rpl @@ -0,0 +1,164 @@ +; config options +; The island of trust is at example.com +server: + target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" + trust-anchor-signaling: no + minimal-responses: no + disable-edns-do: yes + +stub-zone: + name: "." + stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. +CONFIG_END + +SCENARIO_BEGIN Test lookup with disable-edns-do + +; 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, when sent with EDNS DO +ENTRY_BEGIN +MATCH opcode qtype qname DO +ADJUST copy_id +REPLY QR AA DO 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 + +; response to query of interest, when sent without DO +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 +SECTION AUTHORITY +example.com. IN NS ns.example.com. +SECTION ADDITIONAL +ns.example.com. IN A 1.2.3.4 +ENTRY_END +RANGE_END + +STEP 1 QUERY +ENTRY_BEGIN +REPLY RD DO +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 +SECTION AUTHORITY +example.com. IN NS ns.example.com. +SECTION ADDITIONAL +ns.example.com. IN A 1.2.3.4 +ENTRY_END + +SCENARIO_END diff --git a/testdata/dns64_lookup.rpl b/testdata/dns64_lookup.rpl index 898d0d01ad16..327f7dfed89a 100644 --- a/testdata/dns64_lookup.rpl +++ b/testdata/dns64_lookup.rpl @@ -4,6 +4,8 @@ server: qname-minimisation: "no" module-config: "dns64 validator iterator" dns64-prefix: 64:ff9b::0/96 + dns64-ignore-aaaa: ip6ignore.example.com + dns64-ignore-aaaa: ip6only.example.com minimal-responses: no stub-zone: @@ -15,6 +17,7 @@ SCENARIO_BEGIN Test dns64 lookup and synthesis. ; normal A lookup should still succeed ; AAAA is synthesized if not present. ; AAAA if present, is passed through unchanged. +; AAAA if present (but configured to be ignored) but no A, AAAA is passed through unchanged. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 200 @@ -140,33 +143,6 @@ SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END -ENTRY_BEGIN -MATCH opcode qtype qname -ADJUST copy_id -REPLY QR NOERROR -SECTION QUESTION -broken.example.com. IN AAAA -SECTION ANSWER -; NO AAAA present -SECTION AUTHORITY -example.com. IN SOA a. b. 1 2 3 4 5 -ENTRY_END - -ENTRY_BEGIN -MATCH opcode qtype qname -ADJUST copy_id -REPLY QR NOERROR -SECTION QUESTION -broken.example.com. IN A -SECTION ANSWER -broken.example.com. IN A 5.6.7.8 -broken.example.com. IN A \# 3 030405 -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 qtype qname ADJUST copy_id @@ -181,6 +157,61 @@ SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +ip6ignore.example.com. IN AAAA +SECTION ANSWER +ip6ignore.example.com. IN AAAA 1:2:3::4 +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 qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +ip6ignore.example.com. IN A +SECTION ANSWER +ip6ignore.example.com. IN A 5.6.7.8 +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 qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +ip6only.example.com. IN AAAA +SECTION ANSWER +ip6only.example.com. IN AAAA 1:2:3::4 +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 qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +ip6only.example.com. IN A +SECTION ANSWER +; NO A present +SECTION AUTHORITY +example.com. IN SOA a. b. 1 2 3 4 5 +ENTRY_END + + ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id @@ -284,12 +315,12 @@ SECTION AUTHORITY 7.6.5.in-addr.arpa. IN NS ns.example.com. ENTRY_END -; synthesize from broken, malformed A records +; ignore AAAA and synthesize from A record 5.6.7.8 STEP 80 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION -broken.example.com. IN AAAA +ip6ignore.example.com. IN AAAA ENTRY_END ; recursion happens here. @@ -298,11 +329,36 @@ ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION -broken.example.com. IN AAAA +ip6ignore.example.com. IN AAAA SECTION ANSWER +ip6ignore.example.com. IN AAAA 64:ff9b::506:708 SECTION AUTHORITY -example.com. IN SOA a. b. 1 2 3 4 5 +example.com. IN NS ns.example.com. SECTION ADDITIONAL +ns.example.com. IN A 1.2.3.4 +ENTRY_END + +; try to ignore AAAA but no A record to synthesize, fallback to AAAA +STEP 100 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +ip6only.example.com. IN AAAA +ENTRY_END + +; recursion happens here. +STEP 110 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +ip6only.example.com. IN AAAA +SECTION ANSWER +ip6only.example.com. IN AAAA 1:2:3::4 +SECTION AUTHORITY +example.com. IN NS ns.example.com. +SECTION ADDITIONAL +ns.example.com. IN A 1.2.3.4 ENTRY_END SCENARIO_END diff --git a/testdata/ipset.tdir/ipset.conf b/testdata/ipset.tdir/ipset.conf index 7cc34912dd2f..3a5eb7b644dd 100644 --- a/testdata/ipset.tdir/ipset.conf +++ b/testdata/ipset.tdir/ipset.conf @@ -18,6 +18,9 @@ stub-zone: stub-zone: name: "example.com." stub-addr: "127.0.0.1@@TOPORT@" +stub-zone: + name: "lookslikeexample.net." + stub-addr: "127.0.0.1@@TOPORT@" ipset: name-v4: atotallymadeupnamefor4 name-v6: atotallymadeupnamefor6 diff --git a/testdata/ipset.tdir/ipset.test b/testdata/ipset.tdir/ipset.test index 4dab457bab90..bfe17b6e6776 100644 --- a/testdata/ipset.tdir/ipset.test +++ b/testdata/ipset.tdir/ipset.test @@ -146,6 +146,29 @@ else exit 1 fi +echo "> dig lookslikeexample.net. AAAA" +dig @127.0.0.1 -p $UNBOUND_PORT lookslikeexample.net. AAAA | tee outfile +echo "> check answer" +if grep "::4" outfile; then + echo "OK" +else + echo "> cat logfiles" + cat fwd.log + cat unbound.log + echo "Not OK" + exit 1 +fi +echo "> check ipset" +if grep "ipset: add ::4 to atotallymadeupnamefor6 for lookslikeexample.net." unbound.log; then + echo "> cat logfiles" + cat fwd.log + cat unbound.log + echo "Not OK" + exit 1 +else + echo "ipset OK" +fi + echo "> cat logfiles" cat tap.log cat tap.errlog diff --git a/testdata/ipset.tdir/ipset.testns b/testdata/ipset.tdir/ipset.testns index 2b626e915ea7..f67d77ed6928 100644 --- a/testdata/ipset.tdir/ipset.testns +++ b/testdata/ipset.tdir/ipset.testns @@ -101,3 +101,13 @@ target.example.com. IN AAAA SECTION ANSWER target.example.com. IN AAAA ::3 ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +lookslikeexample.net. IN AAAA +SECTION ANSWER +lookslikeexample.net. IN AAAA ::4 +ENTRY_END diff --git a/testdata/iter_ignore_empty.rpl b/testdata/iter_ignore_empty.rpl index c70dd7e8df7b..4b2f695b8501 100644 --- a/testdata/iter_ignore_empty.rpl +++ b/testdata/iter_ignore_empty.rpl @@ -78,6 +78,18 @@ example2.com. IN NS ns2.example2.com. SECTION ADDITIONAL ns2.example2.com. IN A 1.2.3.5 ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +foo.com. IN NS +SECTION AUTHORITY +foo.com. IN NS ns.foo.com. +SECTION ADDITIONAL +ns.foo.com. IN A 1.2.3.5 +ENTRY_END RANGE_END ; ns.example.com. @@ -172,6 +184,27 @@ www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 ENTRY_END + +; foo.com +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +www.foo.com. IN A +SECTION ANSWER +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +ns.foo.com. IN AAAA +SECTION ANSWER +SECTION AUTHORITY +;foo.com. IN SOA ns2.foo.com root.foo.com 4 14400 3600 604800 3600 +ENTRY_END RANGE_END STEP 1 QUERY @@ -195,4 +228,21 @@ ENTRY_END ; wait for pending nameserver lookups. STEP 20 TRAFFIC +; Test that a nodata stays a nodata. +STEP 30 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +www.foo.com. IN A +ENTRY_END + +STEP 40 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +www.foo.com. IN A +SECTION ANSWER +ENTRY_END + SCENARIO_END diff --git a/testdata/iter_scrub_rr_length.rpl b/testdata/iter_scrub_rr_length.rpl new file mode 100644 index 000000000000..2ef73c2fe152 --- /dev/null +++ b/testdata/iter_scrub_rr_length.rpl @@ -0,0 +1,298 @@ +; config options +server: + target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" + minimal-responses: no + rrset-roundrobin: no + ede: yes + log-servfail: yes + +stub-zone: + name: "." + stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. +CONFIG_END + +SCENARIO_BEGIN Test scrub of RRs of inappropriate length + +; K.ROOT-SERVERS.NET. +RANGE_BEGIN 0 200 + 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 200 + 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 200 + 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 +www.example.com. IN A \# 3 030405 +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 qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +www.example.com. IN AAAA +SECTION ANSWER +www.example.com. IN AAAA 2001:db8::1234 +www.example.com. IN AAAA \# 48 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F +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 qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +broken1.example.com. IN A +SECTION ANSWER +broken1.example.com. IN A \# 3 030405 +broken1.example.com. IN A \# 3 030406 +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 qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +broken1.example.com. IN AAAA +SECTION ANSWER +broken1.example.com. IN AAAA \# 48 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F +broken1.example.com. IN AAAA \# 48 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E30 +broken1.example.com. IN AAAA \# 48 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E31 +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 qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +broken2.example.com. IN A +SECTION ANSWER +broken2.example.com. IN A 1.2.3.4 +broken2.example.com. IN A \# 3 030405 +broken2.example.com. IN A 1.2.3.5 +broken2.example.com. IN A \# 3 030406 +SECTION AUTHORITY +example.com. IN NS ns.example.com. +SECTION ADDITIONAL +ns.example.com. IN A \# 3 030407 +ns.example.com. IN A 1.2.3.6 +ns.example.com. IN A \# 3 030408 +ns.example.com. IN A \# 3 030409 +ns.example.com. IN A 1.2.3.7 +ENTRY_END +RANGE_END + +STEP 1 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +www.example.com. IN A +ENTRY_END + +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 +SECTION AUTHORITY +example.com. IN NS ns.example.com. +SECTION ADDITIONAL +ns.example.com. IN A 1.2.3.4 +ENTRY_END + +STEP 20 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +www.example.com. IN AAAA +ENTRY_END + +STEP 30 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +www.example.com. IN AAAA +SECTION ANSWER +www.example.com. IN AAAA 2001:db8::1234 +SECTION AUTHORITY +example.com. IN NS ns.example.com. +SECTION ADDITIONAL +ns.example.com. IN A 1.2.3.4 +ENTRY_END + +STEP 40 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +broken1.example.com. IN A +ENTRY_END + +STEP 50 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +broken1.example.com. IN A +SECTION ANSWER +SECTION AUTHORITY +example.com. IN NS ns.example.com. +SECTION ADDITIONAL +ns.example.com. IN A 1.2.3.4 +ENTRY_END + +STEP 60 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +broken1.example.com. IN AAAA +ENTRY_END + +STEP 70 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +broken1.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 + +STEP 80 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +broken2.example.com. IN A +ENTRY_END + +STEP 90 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +broken2.example.com. IN A +SECTION ANSWER +broken2.example.com. IN A 1.2.3.4 +broken2.example.com. IN A 1.2.3.5 +SECTION AUTHORITY +example.com. IN NS ns.example.com. +SECTION ADDITIONAL +ns.example.com. IN A 1.2.3.6 +ns.example.com. IN A 1.2.3.7 +ENTRY_END + +STEP 100 QUERY +ENTRY_BEGIN +REPLY RD CD DO +SECTION QUESTION +www.example.com. IN A +ENTRY_END + +STEP 110 CHECK_ANSWER +ENTRY_BEGIN +MATCH all ede=0 +REPLY QR RD CD RA DO NOERROR +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +www.example.com. IN A 10.20.30.40 +SECTION AUTHORITY +example.com. IN NS ns.example.com. +SECTION ADDITIONAL +ns.example.com. IN A 1.2.3.6 +ns.example.com. IN A 1.2.3.7 +ENTRY_END + +SCENARIO_END diff --git a/testdata/pymod.tdir/pymod.py b/testdata/pymod.tdir/pymod.py index 1eb7af5b16e5..f1e988b39a3a 100644 --- a/testdata/pymod.tdir/pymod.py +++ b/testdata/pymod.tdir/pymod.py @@ -37,12 +37,7 @@ import os def init(id, cfg): - scripts=[] - s = cfg.python_script - while s != None: - scripts.append(s.str) - s = s.next - log_info("pythonmod: init called, module id is %d port: %d script: %s" % (id, cfg.port, scripts)) + log_info("pythonmod: init called, module id is %d port: %d script: %s" % (id, cfg.port, mod_env['script'])) return True def deinit(id): diff --git a/testdata/pymod_thread.tdir/pymod_thread.py b/testdata/pymod_thread.tdir/pymod_thread.py index 30c2588758f5..58304ab467c1 100644 --- a/testdata/pymod_thread.tdir/pymod_thread.py +++ b/testdata/pymod_thread.tdir/pymod_thread.py @@ -37,7 +37,7 @@ import os def init(id, cfg): - log_info("pythonmod: init called, module id is %d port: %d script: %s" % (id, cfg.port, cfg.python_script)) + log_info("pythonmod: init called, module id is %d port: %d script: %s" % (id, cfg.port, mod_env['script'])) return True def deinit(id): diff --git a/testdata/root_zonemd.tdir/root_zonemd.conf b/testdata/root_zonemd.tdir/root_zonemd.conf new file mode 100644 index 000000000000..befb4fbe97b3 --- /dev/null +++ b/testdata/root_zonemd.tdir/root_zonemd.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 + # for the test, so that DNSSEC verification works. + #val-override-date: 20230929090000 + trust-anchor: ". DS 20326 8 2 E06D44B80B8F1D39A95C0B0D7C65D08458E880409BBC683457104237C7F8EC8D" + +remote-control: + control-enable: yes + control-interface: @CONTROL_PATH@/controlpipe.@CONTROL_PID@ + control-use-cert: no + +# for the test, an upstream server in the test setup. +stub-zone: + name: "." + stub-addr: 127.0.0.1@@TOPORT@ + +# hyperlocal root zone +auth-zone: + name: "." + fallback-enabled: yes + for-downstream: no + for-upstream: yes + zonefile: "root.zone" + zonemd-check: yes + zonemd-reject-absence: yes diff --git a/testdata/root_zonemd.tdir/root_zonemd.dsc b/testdata/root_zonemd.tdir/root_zonemd.dsc new file mode 100644 index 000000000000..8015ac2d13ad --- /dev/null +++ b/testdata/root_zonemd.tdir/root_zonemd.dsc @@ -0,0 +1,16 @@ +BaseName: root_zonemd +Version: 1.0 +Description: ZONEMD check for root zone +CreationDate: Fri 29 Sep 09:00:00 CEST 2023 +Maintainer: dr. W.C.A. Wijngaards +Category: +Component: +CmdDepends: +Depends: +Help: +Pre: root_zonemd.pre +Post: root_zonemd.post +Test: root_zonemd.test +AuxFiles: +Passed: +Failure: diff --git a/testdata/root_zonemd.tdir/root_zonemd.post b/testdata/root_zonemd.tdir/root_zonemd.post new file mode 100644 index 000000000000..a28599fafe7a --- /dev/null +++ b/testdata/root_zonemd.tdir/root_zonemd.post @@ -0,0 +1,14 @@ +# #-- root_zonemd.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 +echo "> cat logfiles" +cat fwd.log +cat unbound.log +kill_pid $FWD_PID +kill_pid $UNBOUND_PID +rm -f $CONTROL_PATH/controlpipe.$CONTROL_PID diff --git a/testdata/root_zonemd.tdir/root_zonemd.pre b/testdata/root_zonemd.tdir/root_zonemd.pre new file mode 100644 index 000000000000..fe369bb20bbb --- /dev/null +++ b/testdata/root_zonemd.tdir/root_zonemd.pre @@ -0,0 +1,50 @@ +# #-- root_zonemd.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 + +# attempt to download the root zone +from=k.root-servers.net +dig @$from . AXFR > root.txt +if test $? -ne 0; then + echo "could not fetch root zone" + skip_test "could not fetch root zone" +fi +grep " SOA " root.txt | head -1 > root.soa +cat root.soa >> root.zone +grep -v " SOA " root.txt >> root.zone +echo "fetched root.zone" +ls -l root.zone +cat root.soa + +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 root_zonemd.testns >fwd.log 2>&1 & +FWD_PID=$! +echo "FWD_PID=$FWD_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?@CONTROL_PATH\@?'$CONTROL_PATH'?' -e 's/@CONTROL_PID@/'$CONTROL_PID'/' < root_zonemd.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 +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/root_zonemd.tdir/root_zonemd.test b/testdata/root_zonemd.tdir/root_zonemd.test new file mode 100644 index 000000000000..da64ab6e9c2d --- /dev/null +++ b/testdata/root_zonemd.tdir/root_zonemd.test @@ -0,0 +1,51 @@ +# #-- root_zonemd.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 +echo "> dig www.example.com." +dig @localhost -p $UNBOUND_PORT . SOA | tee outfile +echo "> check answer" +if grep root-servers outfile | grep "nstld.verisign-grs.com"; then + echo "OK" +else + echo "Not OK" + exit 1 +fi + +echo "> 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 + +# This is the output when an unsupported algorithm is used. +if grep "auth zone . ZONEMD unsupported algorithm" unbound.log; then + echo "OK" +else + echo "ZONEMD verification not OK" + exit 1 +fi + +echo "> unbound-control auth_zone_reload ." +$PRE/unbound-control -c ub.conf auth_zone_reload . 2>&1 | tee outfile +if test $? -ne 0; then + echo "wrong exit value." + exit 1 +fi +# The output of the reload can be checked. +#echo "> check unbound-control output" +#if grep "example.com: ZONEMD verification successful" outfile; then + #echo "OK" +#else + #echo "Not OK" + #exit 1 +#fi + +exit 0 diff --git a/testdata/root_zonemd.tdir/root_zonemd.testns b/testdata/root_zonemd.tdir/root_zonemd.testns new file mode 100644 index 000000000000..d538f2215ecf --- /dev/null +++ b/testdata/root_zonemd.tdir/root_zonemd.testns @@ -0,0 +1,9 @@ +# reply to everything +ENTRY_BEGIN +MATCH opcode +ADJUST copy_id copy_query +REPLY QR SERVFAIL +SECTION QUESTION +example.com. IN SOA +SECTION ANSWER +ENTRY_END diff --git a/testdata/rpz_cached_cname.rpl b/testdata/rpz_cached_cname.rpl new file mode 100644 index 000000000000..198b946310bf --- /dev/null +++ b/testdata/rpz_cached_cname.rpl @@ -0,0 +1,122 @@ +; config options +server: + module-config: "respip validator iterator" + target-fetch-policy: "0 0 0 0 0" + qname-minimisation: no + rrset-roundrobin: no + access-control: 192.0.0.0/8 allow + +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 +rpz.example.com. 3600 IN SOA ns.rpz.example.com. hostmaster.rpz.example.com. 1 3600 900 86400 3600 +rpz.example.com. 3600 IN NS ns.rpz.example.net. +a.foo.rpz.example.com. 120 IN A 10.99.99.99 +TEMPFILE_END + +stub-zone: + name: "." + stub-addr: 10.20.30.40 + +CONFIG_END + +SCENARIO_BEGIN Test RPZ with cached CNAME to A record + +RANGE_BEGIN 0 100 + ADDRESS 10.20.30.40 + +ENTRY_BEGIN +MATCH opcode qname qtype +ADJUST copy_id +REPLY QR NOERROR AA +SECTION QUESTION +. IN NS +SECTION ANSWER +. IN NS ns. +SECTION ADDITIONAL +ns. IN NS 10.20.30.40 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qname qtype +ADJUST copy_id +REPLY QR NOERROR AA +SECTION QUESTION +b.foo. IN A +SECTION ANSWER +b.foo. 30 CNAME a.foo. +a.foo. 30 A 1.2.3.4 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qname qtype +ADJUST copy_id +REPLY QR NOERROR AA +SECTION QUESTION +a.foo. IN A +SECTION ANSWER +a.foo. A 1.2.3.4 +ENTRY_END + +RANGE_END + +STEP 10 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +a.foo. IN A +ENTRY_END + +STEP 20 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA AA NOERROR +SECTION QUESTION +a.foo. IN A +SECTION ANSWER +a.foo. 120 A 10.99.99.99 +ENTRY_END + +STEP 30 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +b.foo. IN A +ENTRY_END + +STEP 40 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA AA NOERROR +SECTION QUESTION +b.foo. IN A +SECTION ANSWER +b.foo. 30 CNAME a.foo. +a.foo. 120 A 10.99.99.99 +ENTRY_END + +STEP 50 TIME_PASSES ELAPSE 3 + +STEP 60 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +b.foo. IN A +ENTRY_END + +STEP 70 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA AA NOERROR +SECTION QUESTION +b.foo. IN A +SECTION ANSWER +b.foo. 30 CNAME a.foo. +a.foo. 120 A 10.99.99.99 +ENTRY_END + +SCENARIO_END diff --git a/testdata/rpz_nsdname.rpl b/testdata/rpz_nsdname.rpl index 1c678cc13bad..a4e9bb31d30e 100644 --- a/testdata/rpz_nsdname.rpl +++ b/testdata/rpz_nsdname.rpl @@ -225,6 +225,36 @@ ENTRY_END RANGE_END +; dd. ------------------------------------------------------------------------ +RANGE_BEGIN 0 100 + ADDRESS 8.8.3.8 + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +dd. IN NS +SECTION ANSWER +dd. IN NS ns1.dd. +SECTION ADDITIONAL +ns1.dd. IN A 8.8.3.8 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +gotham.dd. IN A +SECTION AUTHORITY +gotham.dd. IN NS ns1.gotham.dd. +SECTION ADDITIONAL +ns1.gotham.dd. IN A 192.0.3.1 +ENTRY_END + +RANGE_END + ; ff. ------------------------------------------------------------------------ RANGE_BEGIN 0 100 ADDRESS 8.8.6.8 @@ -303,6 +333,22 @@ ENTRY_END RANGE_END +; ns1.gotham.dd. ------------------------------------------------------------- +RANGE_BEGIN 0 100 + ADDRESS 192.0.3.1 + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +gotham.dd. IN A +SECTION ANSWER +gotham.dd. IN A 192.0.3.2 +ENTRY_END + +RANGE_END + ; ns1.gotham.ff. ------------------------------------------------------------- RANGE_BEGIN 0 100 ADDRESS 192.0.5.1 @@ -387,4 +433,39 @@ SECTION ANSWER gotham.ff. IN A 127.0.0.1 ENTRY_END +STEP 40 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +gotham.dd. IN A +ENTRY_END + +; should come back truncated because TCP is required. +STEP 41 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA TC NOERROR +SECTION QUESTION +gotham.dd. IN A +SECTION ANSWER +ENTRY_END + +STEP 42 QUERY +ENTRY_BEGIN +MATCH TCP +REPLY RD +SECTION QUESTION +gotham.dd. IN A +ENTRY_END + +STEP 43 CHECK_ANSWER +ENTRY_BEGIN +MATCH all TCP +REPLY QR RD RA NOERROR +SECTION QUESTION +gotham.dd. IN A +SECTION ANSWER +gotham.dd. IN A 192.0.3.2 +ENTRY_END + SCENARIO_END diff --git a/testdata/subnet_prezero.crpl b/testdata/subnet_prezero.crpl new file mode 100644 index 000000000000..22cdfffb03b3 --- /dev/null +++ b/testdata/subnet_prezero.crpl @@ -0,0 +1,155 @@ +; subnet unit test +server: + trust-anchor-signaling: no + send-client-subnet: 1.2.3.4 + send-client-subnet: 1.2.3.5 + target-fetch-policy: "0 0 0 0 0" + module-config: "subnetcache validator iterator" + qname-minimisation: no + minimal-responses: no + +stub-zone: + name: "example.com" + stub-addr: 1.2.3.4 +CONFIG_END + +SCENARIO_BEGIN Test subnetcache source prefix zero from client. +; In RFC7871 section-7.1.2 (para. 2). +; It says that the recursor must send no EDNS subnet or its own address +; in the EDNS subnet to the upstream server. And use that answer for the +; source prefix length zero query. That type of query is for privacy. +; The authority server is then going to use the resolver's IP, if any, to +; tailor the answer to the query source address. + +; ns.example.com +RANGE_BEGIN 0 100 + ADDRESS 1.2.3.4 + +; reply with 0.0.0.0/0 in reply +; For the test the answers for 0.0.0.0/0 queries are SERVFAIL, the normal +; answers are NOERROR. +ENTRY_BEGIN +MATCH opcode qtype qname ednsdata +ADJUST copy_id +REPLY QR AA DO SERVFAIL +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +www.example.com. IN CNAME star.c10r.example.com. +SECTION ADDITIONAL +HEX_EDNSDATA_BEGIN + 00 08 00 04 ; OPCODE=subnet, optlen + 00 01 00 00 ; ip4, scope 0, source 0 + ; 0.0.0.0/0 +HEX_EDNSDATA_END +ENTRY_END + +; reply without subnet +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA DO NOERROR +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +www.example.com. IN CNAME star.c10r.example.com. +ENTRY_END + +; delegation answer for c10r.example.com, with subnet /0 +ENTRY_BEGIN +MATCH opcode subdomain ednsdata +ADJUST copy_id copy_query +REPLY QR DO SERVFAIL +SECTION QUESTION +c10r.example.com. IN NS +SECTION AUTHORITY +c10r.example.com. IN NS ns.c10r.example.com. +SECTION ADDITIONAL +ns.c10r.example.com. IN A 1.2.3.5 +HEX_EDNSDATA_BEGIN + 00 08 00 04 ; OPCODE=subnet, optlen + 00 01 00 00 ; ip4, scope 0, source 0 + ; 0.0.0.0/0 +HEX_EDNSDATA_END +ENTRY_END + +; delegation answer for c10r.example.com, without subnet +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR DO NOERROR +SECTION QUESTION +c10r.example.com. IN NS +SECTION AUTHORITY +c10r.example.com. IN NS ns.c10r.example.com. +SECTION ADDITIONAL +ns.c10r.example.com. IN A 1.2.3.5 +ENTRY_END +RANGE_END + +; ns.c10r.example.com +RANGE_BEGIN 0 100 + ADDRESS 1.2.3.5 + +; reply with 0.0.0.0/0 in reply +ENTRY_BEGIN +MATCH opcode qtype qname ednsdata +ADJUST copy_id +REPLY QR AA DO SERVFAIL +SECTION QUESTION +star.c10r.example.com. IN A +SECTION ANSWER +star.c10r.example.com. IN A 1.2.3.6 +SECTION ADDITIONAL +HEX_EDNSDATA_BEGIN + 00 08 00 04 ; OPCODE=subnet, optlen + 00 01 00 00 ; ip4, scope 0, source 0 + ; 0.0.0.0/0 +HEX_EDNSDATA_END +ENTRY_END + +; reply without subnet +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA DO NOERROR +SECTION QUESTION +star.c10r.example.com. IN A +SECTION ANSWER +star.c10r.example.com. IN A 1.2.3.6 +ENTRY_END +RANGE_END + +; ask for www.example.com +; server answers with CNAME to a delegation, that then +; returns a /24 answer. +STEP 1 QUERY +ENTRY_BEGIN +REPLY RD DO +SECTION QUESTION +www.example.com. IN A +SECTION ADDITIONAL +HEX_EDNSDATA_BEGIN + 00 08 00 04 ; OPCODE=subnet, optlen + 00 01 00 00 ; ip4, scope 0, source 0 + ; 0.0.0.0/0 +HEX_EDNSDATA_END +ENTRY_END + +STEP 10 CHECK_ANSWER +ENTRY_BEGIN +MATCH all ednsdata +REPLY QR RD RA DO NOERROR +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +www.example.com. IN CNAME star.c10r.example.com. +star.c10r.example.com. IN A 1.2.3.6 +SECTION ADDITIONAL +HEX_EDNSDATA_BEGIN + 00 08 00 04 ; OPCODE=subnet, optlen + 00 01 00 00 ; ip4, scope 0, source 0 + ; 0.0.0.0/0 +HEX_EDNSDATA_END +ENTRY_END +SCENARIO_END diff --git a/testdata/val_scrub_rr_length.rpl b/testdata/val_scrub_rr_length.rpl new file mode 100644 index 000000000000..0219b918e421 --- /dev/null +++ b/testdata/val_scrub_rr_length.rpl @@ -0,0 +1,164 @@ +; config options +; The island of trust is at example.com +server: + trust-anchor: "example.com. IN DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af" + val-override-date: "20070916134226" + target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" + trust-anchor-signaling: no + minimal-responses: no + rrset-roundrobin: no + ede: yes + log-servfail: yes + +stub-zone: + name: "." + stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. +CONFIG_END + +SCENARIO_BEGIN Test validator with scrub of RR for inappropriate length + +; 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 8 2 3600 20070926134150 20070829134150 55566 example.com. cHdLVCzujUQs6b67c1SmCX+/br4tgOg86Gj/R/x+PKUQmWHyeVwBSTlJuLOHbca3CQoyIQc+V2ilK6fjwjbY/dLk4uOlux8L+Zn7HsUXSOwJPIjsM3LuTa8CYDMvYhOP7KGR+vNpJVSsQ25pyDn6Rzsdl3E7DAf7uSkPV8VJwa8= +SECTION ADDITIONAL +ns.example.com. IN A 1.2.3.4 +ns.example.com. 3600 IN RRSIG A 8 3 3600 20070926134150 20070829134150 55566 example.com. PBwNifMNxTXlDorHX1neq1wUhWLmqk+PZ+PBZCI5BJAmakdgOXdLQiVqlKaErJyA/4uN+99fUf6/DqxwgxL8FIPdBkxMOTJaKrCFjEhL6qozTd3+DI6qFJPgTm1lrkpvb9W72MtK2vxAyT5I/bG2SWKdpzOaQXysbDb2hnxq3as= +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. IN DNSKEY 256 3 8 AwEAAdug/L739i0mgN2nuK/bhxu3wFn5Ud9nK2+XUmZQlPUEZUC5YZvm1rfMmEWTGBn87fFxEu/kjFZHJ55JLzqsbbpVHLbmKCTT2gYR2FV2WDKROGKuYbVkJIXdKAjJ0ONuK507NinYvlWXIoxHn22KAWOd9wKgSTNHBlmGkX+ts3hh ;{id = 55566 (zsk), size = 1024b} +example.com. 3600 IN RRSIG DNSKEY 8 2 3600 20070926134150 20070829134150 55566 example.com. Ni7Q17l2dzKcAnHdU3Mycpdwo0I6qgGxRvBhBNI43xIUFHJpgKpbeMFxKvVTkbwHyMPMIuHmOaC82IBhOpGD10SExVh4erQhWS3Hvl+m4Cwl3WI9N+AW6CTB9yj+d4xzX3bHjjBt6MSk4bU8ABR7qIoAjgjY7zdtUDWQlaM+d18= +SECTION AUTHORITY +example.com. IN NS ns.example.com. +example.com. 3600 IN RRSIG NS 8 2 3600 20070926134150 20070829134150 55566 example.com. cHdLVCzujUQs6b67c1SmCX+/br4tgOg86Gj/R/x+PKUQmWHyeVwBSTlJuLOHbca3CQoyIQc+V2ilK6fjwjbY/dLk4uOlux8L+Zn7HsUXSOwJPIjsM3LuTa8CYDMvYhOP7KGR+vNpJVSsQ25pyDn6Rzsdl3E7DAf7uSkPV8VJwa8= +SECTION ADDITIONAL +ns.example.com. IN A 1.2.3.4 +ns.example.com. 3600 IN RRSIG A 8 3 3600 20070926134150 20070829134150 55566 example.com. PBwNifMNxTXlDorHX1neq1wUhWLmqk+PZ+PBZCI5BJAmakdgOXdLQiVqlKaErJyA/4uN+99fUf6/DqxwgxL8FIPdBkxMOTJaKrCFjEhL6qozTd3+DI6qFJPgTm1lrkpvb9W72MtK2vxAyT5I/bG2SWKdpzOaQXysbDb2hnxq3as= +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +ns.example.com. IN AAAA +SECTION AUTHORITY +example.com. IN NS ns.example.com. +example.com. 3600 IN RRSIG NS 8 2 3600 20070926134150 20070829134150 55566 example.com. cHdLVCzujUQs6b67c1SmCX+/br4tgOg86Gj/R/x+PKUQmWHyeVwBSTlJuLOHbca3CQoyIQc+V2ilK6fjwjbY/dLk4uOlux8L+Zn7HsUXSOwJPIjsM3LuTa8CYDMvYhOP7KGR+vNpJVSsQ25pyDn6Rzsdl3E7DAf7uSkPV8VJwa8= +SECTION ADDITIONAL +ns.example.com. IN A 1.2.3.4 +ns.example.com. 3600 IN RRSIG A 8 3 3600 20070926134150 20070829134150 55566 example.com. PBwNifMNxTXlDorHX1neq1wUhWLmqk+PZ+PBZCI5BJAmakdgOXdLQiVqlKaErJyA/4uN+99fUf6/DqxwgxL8FIPdBkxMOTJaKrCFjEhL6qozTd3+DI6qFJPgTm1lrkpvb9W72MtK2vxAyT5I/bG2SWKdpzOaQXysbDb2hnxq3as= +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 +www.example.com. IN A \# 5 0102030405 +; RRSIG includes the malformed record. +www.example.com. 3600 IN RRSIG A 8 3 3600 20070926134150 20070829134150 55566 example.com. W4WFu9B81uRvp3Dj8uLIscypznKWuLuKrZqVg1on5/45/3/xyjHvj3TjTL3gruWFXPiQpldvOstXLZ5eN3OpqILdkVey0eqVATujpHwIruY6GWztVx5WptmFfK6E6zzshZ3RmAARqq/czQ+IZli2A9xixdY2H0o1dSU6gohEjjE= +SECTION AUTHORITY +example.com. IN NS ns.example.com. +example.com. 3600 IN RRSIG NS 8 2 3600 20070926134150 20070829134150 55566 example.com. cHdLVCzujUQs6b67c1SmCX+/br4tgOg86Gj/R/x+PKUQmWHyeVwBSTlJuLOHbca3CQoyIQc+V2ilK6fjwjbY/dLk4uOlux8L+Zn7HsUXSOwJPIjsM3LuTa8CYDMvYhOP7KGR+vNpJVSsQ25pyDn6Rzsdl3E7DAf7uSkPV8VJwa8= +SECTION ADDITIONAL +ns.example.com. IN A 1.2.3.4 +ns.example.com. 3600 IN RRSIG A 8 3 3600 20070926134150 20070829134150 55566 example.com. PBwNifMNxTXlDorHX1neq1wUhWLmqk+PZ+PBZCI5BJAmakdgOXdLQiVqlKaErJyA/4uN+99fUf6/DqxwgxL8FIPdBkxMOTJaKrCFjEhL6qozTd3+DI6qFJPgTm1lrkpvb9W72MtK2vxAyT5I/bG2SWKdpzOaQXysbDb2hnxq3as= +ENTRY_END +RANGE_END + +STEP 1 QUERY +ENTRY_BEGIN +REPLY RD DO +SECTION QUESTION +www.example.com. IN A +ENTRY_END + +; recursion happens here. +STEP 10 CHECK_ANSWER +ENTRY_BEGIN +MATCH all ede=0 +REPLY QR RD RA DO SERVFAIL +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +ENTRY_END + +SCENARIO_END diff --git a/util/config_file.c b/util/config_file.c index 454096342326..31ae8c8080e5 100644 --- a/util/config_file.c +++ b/util/config_file.c @@ -271,6 +271,7 @@ config_create(void) cfg->val_permissive_mode = 0; cfg->aggressive_nsec = 1; cfg->ignore_cd = 0; + cfg->disable_edns_do = 0; cfg->serve_expired = 0; cfg->serve_expired_ttl = 0; cfg->serve_expired_ttl_reset = 0; @@ -381,6 +382,7 @@ config_create(void) #ifdef USE_CACHEDB if(!(cfg->cachedb_backend = strdup("testframe"))) goto error_exit; if(!(cfg->cachedb_secret = strdup("default"))) goto error_exit; + cfg->cachedb_no_store = 0; #ifdef USE_REDIS if(!(cfg->redis_server_host = strdup("127.0.0.1"))) goto error_exit; cfg->redis_server_path = NULL; @@ -388,6 +390,7 @@ config_create(void) cfg->redis_timeout = 100; cfg->redis_server_port = 6379; cfg->redis_expire_records = 0; + cfg->redis_logical_db = 0; #endif /* USE_REDIS */ #endif /* USE_CACHEDB */ #ifdef USE_IPSET @@ -690,6 +693,7 @@ int config_set_option(struct config_file* cfg, const char* opt, else S_YNO("val-permissive-mode:", val_permissive_mode) else S_YNO("aggressive-nsec:", aggressive_nsec) else S_YNO("ignore-cd-flag:", ignore_cd) + else S_YNO("disable-edns-do:", disable_edns_do) else if(strcmp(opt, "serve-expired:") == 0) { IS_YES_OR_NO; cfg->serve_expired = (strcmp(val, "yes") == 0); SERVE_EXPIRED = cfg->serve_expired; } @@ -819,6 +823,9 @@ int config_set_option(struct config_file* cfg, const char* opt, { IS_NUMBER_OR_ZERO; cfg->ipsecmod_max_ttl = atoi(val); } else S_YNO("ipsecmod-strict:", ipsecmod_strict) #endif +#ifdef USE_CACHEDB + else S_YNO("cachedb-no-store:", cachedb_no_store) +#endif /* USE_CACHEDB */ else if(strcmp(opt, "define-tag:") ==0) { return config_add_tag(cfg, val); /* val_sig_skew_min, max and val_max_restart are copied into val_env @@ -1149,6 +1156,7 @@ config_get_option(struct config_file* cfg, const char* opt, else O_YNO(opt, "val-permissive-mode", val_permissive_mode) else O_YNO(opt, "aggressive-nsec", aggressive_nsec) else O_YNO(opt, "ignore-cd-flag", ignore_cd) + else O_YNO(opt, "disable-edns-do", disable_edns_do) else O_YNO(opt, "serve-expired", serve_expired) else O_DEC(opt, "serve-expired-ttl", serve_expired_ttl) else O_YNO(opt, "serve-expired-ttl-reset", serve_expired_ttl_reset) @@ -1306,6 +1314,7 @@ config_get_option(struct config_file* cfg, const char* opt, #ifdef USE_CACHEDB else O_STR(opt, "backend", cachedb_backend) else O_STR(opt, "secret-seed", cachedb_secret) + else O_YNO(opt, "cachedb-no-store", cachedb_no_store) #ifdef USE_REDIS else O_STR(opt, "redis-server-host", redis_server_host) else O_DEC(opt, "redis-server-port", redis_server_port) @@ -1313,6 +1322,7 @@ config_get_option(struct config_file* cfg, const char* opt, else O_STR(opt, "redis-server-password", redis_server_password) else O_DEC(opt, "redis-timeout", redis_timeout) else O_YNO(opt, "redis-expire-records", redis_expire_records) + else O_DEC(opt, "redis-logical-db", redis_logical_db) #endif /* USE_REDIS */ #endif /* USE_CACHEDB */ #ifdef USE_IPSET diff --git a/util/config_file.h b/util/config_file.h index 452f3c6a78fb..ad22b8330e36 100644 --- a/util/config_file.h +++ b/util/config_file.h @@ -409,6 +409,8 @@ struct config_file { int aggressive_nsec; /** ignore the CD flag in incoming queries and refuse them bogus data */ int ignore_cd; + /** disable EDNS DO flag in outgoing requests */ + int disable_edns_do; /** serve expired entries and prefetch them */ int serve_expired; /** serve expired entries until TTL after expiration */ @@ -699,6 +701,8 @@ struct config_file { char* cachedb_backend; /** secret seed for hash key calculation */ char* cachedb_secret; + /** cachedb that does not store, but only reads from database, if on */ + int cachedb_no_store; #ifdef USE_REDIS /** redis server's IP address or host name */ char* redis_server_host; @@ -712,6 +716,8 @@ struct config_file { int redis_timeout; /** set timeout on redis records based on DNS response ttl */ int redis_expire_records; + /** set the redis logical database upon connection */ + int redis_logical_db; #endif #endif /** Downstream DNS Cookies */ diff --git a/util/configlexer.c b/util/configlexer.c index 546800c2c56a..8a2b9448cad1 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 381 -#define YY_END_OF_BUFFER 382 +#define YY_NUM_RULES 384 +#define YY_END_OF_BUFFER 385 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info @@ -363,423 +363,427 @@ struct yy_trans_info flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static const flex_int16_t yy_accept[3778] = +static const flex_int16_t yy_accept[3807] = { 0, - 1, 1, 355, 355, 359, 359, 363, 363, 367, 367, - 1, 1, 371, 371, 375, 375, 382, 379, 1, 353, - 353, 380, 2, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 380, 355, 356, 356, 357, - 380, 359, 360, 360, 361, 380, 366, 363, 364, 364, - 365, 380, 367, 368, 368, 369, 380, 378, 354, 2, - 358, 378, 380, 374, 371, 372, 372, 373, 380, 375, - 376, 376, 377, 380, 379, 0, 1, 2, 2, 2, - 2, 379, 379, 379, 379, 379, 379, 379, 379, 379, + 1, 1, 358, 358, 362, 362, 366, 366, 370, 370, + 1, 1, 374, 374, 378, 378, 385, 382, 1, 356, + 356, 383, 2, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 383, 358, 359, 359, 360, + 383, 362, 363, 363, 364, 383, 369, 366, 367, 367, + 368, 383, 370, 371, 371, 372, 383, 381, 357, 2, + 361, 381, 383, 377, 374, 375, 375, 376, 383, 378, + 379, 379, 380, 383, 382, 0, 1, 2, 2, 2, + 2, 382, 382, 382, 382, 382, 382, 382, 382, 382, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 355, 0, 359, 0, 366, 0, 363, 367, 0, 378, - 0, 2, 2, 378, 374, 0, 371, 375, 0, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 358, 0, 362, 0, 369, 0, 366, 370, 0, 381, + 0, 2, 2, 381, 377, 0, 374, 378, 0, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 378, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 381, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 351, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 136, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 146, 379, 379, 379, 379, 379, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 354, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 136, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 146, 382, 382, 382, 382, 382, - 379, 379, 378, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 118, 379, - 379, 350, 379, 379, 379, 379, 379, 379, 379, 379, + 382, 382, 381, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 118, 382, + 382, 353, 382, 382, 382, 382, 382, 382, 382, 382, - 8, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 137, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 151, 379, 379, - 378, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, + 8, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 137, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 151, 382, 382, + 381, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 341, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 344, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 378, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 71, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 265, 379, 14, 15, 379, 379, 20, 19, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 381, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 71, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 266, 382, 14, 15, 382, 382, 20, 19, - 379, 379, 244, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 144, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 242, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, + 382, 382, 245, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 144, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 243, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, - 379, 379, 379, 379, 379, 379, 379, 379, 3, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 378, 379, 379, 379, 379, 379, 379, 379, 379, 333, - 379, 379, 332, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 3, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 381, 382, 382, 382, 382, 382, 382, 382, 382, + 334, 382, 382, 382, 333, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 362, 379, 379, 379, - 379, 379, 379, 379, 379, 70, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 74, 379, 302, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 342, 343, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 75, 379, 379, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 365, 382, + 382, 382, 382, 382, 382, 382, 382, 70, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 74, 382, 303, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 345, 346, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 75, - 145, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 140, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 231, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 22, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 172, 379, 379, 379, 379, 379, - 378, 362, 379, 379, 379, 379, 379, 379, 379, 379, + 382, 382, 145, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 140, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 232, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 22, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 172, 382, 382, + 382, 382, 382, 381, 365, 382, 382, 382, 382, 382, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 116, 379, 379, 379, 379, - 379, 379, 379, 310, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 16, 379, 379, 379, 379, 379, - 379, 379, 379, 199, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 171, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 116, + 382, 382, 382, 382, 382, 382, 382, 382, 311, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 16, + 382, 382, 382, 382, 382, 382, 382, 382, 200, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 171, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 115, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 37, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 38, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 72, 379, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 115, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 37, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 38, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 143, - 379, 379, 379, 378, 379, 379, 379, 379, 379, 379, - 135, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 73, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 269, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 200, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, + 382, 382, 382, 382, 72, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 143, 382, 382, 382, 381, + 382, 382, 382, 382, 382, 382, 135, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 73, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 270, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 201, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, - 379, 379, 379, 379, 379, 379, 379, 60, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 288, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 65, 379, 66, - 379, 379, 379, 379, 379, 379, 119, 379, 120, 379, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 60, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 289, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 65, 382, 66, 382, - 379, 379, 379, 379, 117, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 7, 379, - 379, 379, 379, 378, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 254, 379, 379, 379, 379, 175, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 270, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, + 382, 382, 382, 382, 382, 119, 382, 120, 382, 382, + 382, 382, 382, 117, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 7, 382, 382, + 382, 382, 381, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 255, 382, 382, 382, 382, 382, + 175, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 271, 382, 382, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 51, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 61, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 222, 379, 221, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 17, 18, 379, 379, 379, 379, 379, 379, 379, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 51, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 61, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 223, 382, 222, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, - 379, 379, 379, 379, 379, 379, 379, 76, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 230, 379, 379, 379, 379, 379, 379, 379, 122, - 379, 121, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 213, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 152, 379, - 379, 379, 378, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 110, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 97, 379, 379, 379, 379, + 382, 382, 17, 18, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 76, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 231, 382, 382, 382, 382, 382, 382, + 382, 122, 382, 121, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 214, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 152, 382, 382, 382, 381, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 110, 382, 382, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 243, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 102, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 69, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 216, - 217, 379, 379, 379, 304, 379, 379, 379, 379, 379, + 382, 382, 382, 382, 382, 382, 382, 382, 97, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 244, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 102, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 69, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 6, 379, 379, 379, 379, 379, 379, 379, 323, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 308, - 379, 379, 379, 379, 379, 379, 379, 334, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 48, 379, 379, 379, 379, 379, 50, - 379, 379, 379, 98, 379, 379, 379, 379, 379, 58, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, + 382, 382, 382, 217, 218, 382, 382, 382, 305, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 6, 382, 382, 382, 382, + 382, 382, 382, 324, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 309, 382, 382, 382, 382, 382, + 382, 382, 335, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 48, 382, + 382, 382, 382, 382, 50, 382, 382, 382, 98, 382, - 379, 378, 379, 209, 379, 379, 379, 147, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 235, - 379, 379, 210, 379, 379, 379, 250, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 59, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 149, - 128, 379, 129, 379, 379, 379, 379, 127, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 168, 379, - 379, 56, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, + 382, 382, 382, 382, 58, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 381, 382, 210, 382, + 382, 382, 147, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 236, 382, 382, 211, 382, + 382, 382, 382, 251, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 59, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 149, 128, 382, 129, + 382, 382, 382, 382, 127, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 168, 382, 382, 56, 382, - 379, 379, 286, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 211, 379, 379, 379, 379, 379, 214, 379, - 220, 379, 379, 379, 379, 379, 379, 379, 379, 249, - 379, 379, 379, 379, 379, 379, 253, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 114, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 141, - 379, 379, 379, 379, 379, 379, 379, 379, 67, 379, - 379, 379, 379, 31, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 21, 379, 379, 379, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 287, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 212, + 382, 382, 382, 382, 382, 215, 382, 221, 382, 382, + 382, 382, 382, 382, 382, 382, 250, 382, 382, 382, + 382, 382, 382, 254, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 114, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 141, 382, 382, + 382, 382, 382, 382, 382, 382, 67, 382, 382, 382, - 379, 379, 379, 379, 32, 41, 379, 180, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 207, 379, 379, 378, 379, 379, 379, 379, - 346, 379, 379, 84, 86, 379, 379, 379, 379, 379, - 379, 379, 347, 379, 379, 379, 379, 379, 379, 312, - 379, 379, 379, 379, 266, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 130, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 167, 379, 52, 379, 379, 379, 379, 379, 379, + 382, 31, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 21, 382, 382, 382, 382, 382, + 382, 382, 32, 41, 382, 180, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 208, 382, 382, 381, 382, 382, 382, 382, 349, 382, + 382, 84, 86, 382, 382, 382, 382, 382, 382, 382, + 382, 350, 382, 382, 382, 382, 382, 382, 382, 313, + 382, 382, 382, 382, 267, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 130, 382, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 260, 379, 379, 379, 379, 379, - 379, 379, 379, 327, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 174, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 321, - 379, 379, 379, 379, 241, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 339, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 192, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 167, 382, 52, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 261, 382, 382, 382, 382, 382, + 382, 382, 382, 328, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 174, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 322, + 382, 382, 382, 382, 242, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 341, 382, 382, 382, - 123, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 187, 379, 201, 379, 379, 379, - 379, 379, 379, 379, 378, 379, 155, 379, 379, 379, - 379, 379, 109, 379, 379, 379, 379, 233, 379, 379, - 379, 379, 379, 379, 251, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 278, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 148, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 193, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 123, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 187, 382, 202, 382, 382, + 382, 382, 382, 382, 382, 381, 382, 155, 382, 382, + 382, 382, 382, 382, 109, 382, 382, 382, 382, 234, + 382, 382, 382, 382, 382, 382, 382, 252, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 279, 382, 382, 382, 382, 382, - 379, 379, 191, 379, 379, 379, 379, 379, 379, 379, - 87, 379, 88, 379, 379, 379, 379, 379, 263, 379, - 379, 379, 379, 379, 68, 330, 379, 379, 379, 379, - 379, 96, 202, 379, 223, 379, 255, 379, 379, 215, - 305, 379, 379, 379, 379, 300, 379, 379, 379, 80, - 379, 204, 379, 379, 379, 379, 379, 379, 9, 379, - 379, 379, 379, 379, 113, 379, 379, 379, 379, 379, - 379, 292, 379, 379, 379, 379, 379, 232, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, + 382, 382, 382, 382, 382, 382, 148, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 191, 382, 382, 382, 382, + 382, 382, 382, 87, 382, 88, 382, 382, 382, 382, + 382, 264, 382, 382, 382, 382, 382, 68, 331, 382, + 382, 382, 382, 382, 96, 203, 382, 224, 382, 256, + 382, 382, 216, 306, 382, 382, 382, 382, 301, 382, + 382, 382, 80, 382, 205, 382, 382, 382, 382, 382, + 382, 9, 382, 382, 382, 382, 382, 113, 382, 382, + 382, 382, 382, 382, 293, 382, 382, 382, 382, 382, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 378, 379, 379, 379, 379, 190, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 176, 379, 311, 379, 379, 379, 379, 379, 277, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 245, 379, 379, 379, 379, 379, 379, 303, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 173, 379, 379, 379, + 382, 233, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 381, 382, + 382, 382, 382, 190, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 192, 176, 382, 312, 382, + 382, 382, 382, 382, 278, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 246, 382, 382, 382, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 331, 379, - 203, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 79, 81, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 112, 379, 379, 379, 379, 379, 379, 290, - 379, 379, 379, 379, 379, 379, 307, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 237, 379, 39, 33, 35, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 40, 379, - 34, 36, 379, 42, 379, 379, 379, 379, 379, 379, + 382, 382, 382, 304, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 173, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 332, 382, 204, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 79, 81, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 112, 382, + 382, 382, 382, 382, 382, 291, 382, 382, 382, 382, + 382, 382, 382, 308, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 238, 382, 39, - 379, 108, 379, 186, 379, 379, 379, 379, 379, 379, - 379, 378, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 239, 236, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 78, 379, 379, 379, 150, 379, - 131, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 169, 53, 379, 379, 379, 370, 13, 379, - 379, 379, 379, 379, 379, 379, 156, 379, 379, 379, - 379, 379, 379, 379, 379, 325, 379, 328, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, + 33, 35, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 40, 382, 34, 36, 382, + 42, 382, 382, 382, 382, 382, 382, 382, 108, 382, + 186, 382, 382, 382, 382, 382, 382, 382, 381, 382, + 382, 382, 382, 382, 382, 336, 382, 382, 382, 382, + 382, 240, 237, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 78, 382, 382, 382, 150, 382, 131, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 169, 53, 382, 382, 382, 373, 13, 382, 382, 382, - 379, 12, 379, 379, 23, 379, 379, 379, 379, 379, - 379, 379, 296, 379, 379, 379, 379, 379, 379, 309, - 379, 379, 379, 379, 82, 379, 247, 379, 379, 379, - 379, 379, 238, 379, 379, 379, 379, 77, 379, 379, - 379, 379, 379, 379, 24, 379, 379, 49, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 185, 184, 379, 379, 370, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 240, 234, 379, 252, 379, 379, - 313, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 197, 379, 379, 379, 379, + 382, 382, 382, 382, 156, 382, 382, 382, 382, 382, + 382, 382, 382, 326, 382, 329, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 12, + 382, 382, 23, 382, 382, 382, 382, 382, 382, 382, + 297, 382, 382, 343, 382, 382, 382, 382, 310, 382, + 382, 382, 382, 82, 382, 248, 382, 382, 382, 382, + 382, 239, 382, 382, 382, 382, 77, 382, 382, 382, + 382, 382, 382, 24, 382, 382, 49, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 185, + 184, 382, 382, 373, 382, 382, 382, 382, 382, 382, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 89, 379, - 379, 379, 379, 379, 379, 379, 379, 291, 379, 379, - 379, 379, 219, 379, 379, 379, 379, 379, 379, 246, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 298, 379, 379, 379, 335, 379, 337, 336, 182, 379, - 379, 379, 83, 379, 379, 379, 379, 193, 379, 379, - 379, 379, 379, 124, 126, 125, 379, 379, 379, 26, - 379, 379, 177, 379, 179, 379, 224, 379, 379, 379, - 379, 183, 379, 379, 379, 379, 256, 379, 379, 379, + 382, 382, 382, 241, 235, 382, 253, 382, 382, 314, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 198, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 89, 382, 382, + 382, 382, 382, 382, 382, 382, 292, 382, 382, 382, + 382, 220, 382, 382, 382, 382, 382, 382, 247, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 299, + 382, 382, 382, 337, 382, 339, 338, 182, 382, 382, + 382, 83, 382, 382, 382, 382, 194, 382, 382, 382, - 379, 379, 379, 379, 158, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 268, 379, 379, - 379, 379, 379, 379, 379, 348, 379, 28, 379, 306, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 94, 225, - 379, 379, 262, 379, 379, 379, 289, 379, 329, 379, - 218, 379, 379, 301, 379, 379, 379, 299, 62, 379, - 379, 379, 379, 379, 379, 379, 4, 379, 379, 379, - 379, 379, 139, 379, 157, 379, 379, 379, 198, 30, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, + 382, 382, 124, 126, 125, 382, 382, 382, 26, 382, + 382, 177, 382, 179, 382, 225, 382, 382, 382, 382, + 183, 382, 382, 382, 382, 257, 382, 382, 382, 382, + 382, 382, 382, 158, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 269, 382, 382, 382, + 382, 382, 382, 382, 351, 382, 28, 382, 307, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 94, 226, 382, + 382, 263, 382, 382, 382, 290, 382, 330, 382, 219, + 382, 382, 302, 382, 382, 382, 300, 62, 382, 382, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 259, - 43, 44, 379, 379, 379, 379, 379, 379, 379, 314, - 379, 379, 379, 379, 379, 379, 379, 276, 379, 379, - 379, 379, 379, 379, 379, 379, 228, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 93, 92, 379, 379, 63, 379, 379, 287, - 295, 379, 264, 379, 379, 379, 379, 379, 11, 379, - 379, 379, 379, 352, 379, 379, 379, 379, 379, 138, - 379, 379, 379, 379, 379, 379, 226, 99, 379, 379, - 46, 379, 379, 379, 379, 379, 379, 379, 379, 189, + 382, 382, 382, 382, 382, 4, 382, 382, 382, 382, + 382, 139, 382, 157, 382, 382, 382, 199, 30, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 260, 43, + 44, 382, 382, 382, 382, 382, 382, 382, 315, 382, + 382, 382, 382, 382, 382, 382, 277, 382, 382, 382, + 382, 382, 382, 382, 382, 229, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 93, 92, 382, 382, 63, 382, 382, 288, 296, + 382, 265, 382, 382, 382, 382, 382, 11, 382, 382, - 379, 379, 379, 379, 379, 379, 379, 160, 379, 379, - 379, 379, 267, 379, 379, 379, 379, 379, 275, 379, - 379, 379, 379, 153, 379, 379, 379, 132, 134, 133, - 379, 379, 379, 101, 105, 100, 379, 170, 379, 379, - 379, 379, 90, 379, 261, 297, 379, 379, 379, 379, - 379, 379, 10, 379, 379, 379, 379, 379, 293, 340, - 379, 379, 379, 379, 379, 379, 379, 379, 345, 45, - 379, 379, 379, 379, 379, 188, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, + 382, 382, 355, 382, 382, 382, 382, 382, 138, 382, + 382, 382, 382, 382, 382, 227, 99, 382, 382, 46, + 382, 382, 382, 382, 382, 382, 382, 382, 189, 382, + 382, 382, 382, 382, 382, 382, 160, 382, 382, 382, + 382, 268, 382, 382, 382, 382, 382, 276, 382, 382, + 382, 382, 153, 382, 382, 382, 132, 134, 133, 382, + 382, 382, 101, 105, 100, 382, 170, 382, 382, 382, + 382, 90, 382, 262, 298, 382, 382, 382, 382, 382, + 382, 10, 382, 382, 382, 382, 382, 294, 342, 382, + 382, 382, 382, 382, 382, 382, 382, 348, 45, 382, - 379, 106, 104, 379, 379, 57, 379, 379, 91, 379, - 326, 379, 379, 379, 379, 25, 379, 379, 379, 379, - 379, 212, 379, 379, 338, 379, 379, 379, 379, 227, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 208, - 379, 379, 178, 85, 379, 379, 379, 379, 379, 315, - 379, 379, 379, 379, 379, 379, 379, 272, 379, 379, - 271, 154, 379, 379, 103, 379, 54, 379, 379, 161, - 162, 165, 166, 163, 164, 95, 324, 379, 379, 294, - 142, 379, 379, 379, 379, 27, 379, 181, 379, 379, - 379, 379, 206, 379, 258, 379, 379, 379, 379, 379, + 382, 382, 382, 382, 188, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 106, 104, 382, 382, 57, 382, 382, 91, 382, 327, + 382, 382, 382, 382, 25, 382, 382, 382, 382, 382, + 213, 382, 382, 340, 382, 382, 382, 382, 228, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 209, 382, + 382, 178, 85, 382, 382, 382, 382, 382, 316, 382, + 382, 382, 382, 382, 382, 382, 273, 382, 382, 272, + 154, 382, 382, 103, 382, 54, 382, 382, 161, 162, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 195, 194, 229, - 47, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 322, 379, 379, 379, 379, - 111, 379, 257, 379, 285, 319, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 349, 379, 107, - 55, 64, 5, 379, 379, 248, 379, 379, 320, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 273, 29, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, + 165, 166, 163, 164, 95, 325, 382, 382, 295, 142, + 382, 382, 382, 382, 27, 382, 181, 382, 382, 382, + 382, 207, 382, 259, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 196, 195, 230, 47, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 323, 382, 382, 382, 382, 111, + 382, 258, 382, 286, 320, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 352, 382, 107, 55, - 379, 379, 274, 379, 379, 379, 159, 379, 379, 379, - 379, 379, 379, 379, 379, 196, 379, 205, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 316, 379, 379, - 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, - 379, 379, 379, 379, 379, 344, 379, 379, 281, 379, - 379, 379, 379, 379, 317, 379, 379, 379, 379, 379, - 379, 318, 379, 379, 379, 279, 379, 282, 283, 379, - 379, 379, 379, 379, 280, 284, 0 + 64, 5, 382, 382, 249, 382, 382, 321, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 274, 29, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 275, 382, 382, 382, 159, 382, 382, 382, 382, + 382, 382, 382, 382, 197, 382, 206, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 317, 382, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, + 382, 382, 382, 382, 347, 382, 382, 282, 382, 382, + 382, 382, 382, 318, 382, 382, 382, 382, 382, 382, + 319, 382, 382, 382, 280, 382, 283, 284, 382, 382, + + 382, 382, 382, 281, 285, 0 } ; static const YY_CHAR yy_ec[256] = @@ -825,17 +829,17 @@ static const YY_CHAR yy_meta[67] = 1, 1, 1, 1, 1, 1 } ; -static const flex_int16_t yy_base[3796] = +static const flex_int16_t yy_base[3825] = { 0, 0, 0, 64, 67, 70, 72, 78, 84, 89, 92, - 131, 137, 112, 118, 123, 142, 616, 527, 96,10717, - 10717,10717, 160, 185, 116, 183, 229, 132, 175, 173, + 131, 137, 112, 118, 123, 142, 616, 527, 96,10823, + 10823,10823, 160, 185, 116, 183, 229, 132, 175, 173, 232, 50, 66, 120, 263, 275, 159, 323, 134, 375, - 416, 286, 308, 283, 126, 258, 516,10717,10717,10717, - 95, 496,10717,10717,10717, 187, 471, 490,10717,10717, - 10717, 238, 449,10717,10717,10717, 104, 401,10717, 351, - 10717, 194, 369, 379, 381,10717,10717,10717, 375, 309, - 10717,10717,10717, 146, 307, 392, 177, 0, 405, 0, + 416, 286, 308, 283, 126, 258, 516,10823,10823,10823, + 95, 496,10823,10823,10823, 187, 471, 490,10823,10823, + 10823, 238, 449,10823,10823,10823, 104, 401,10823, 351, + 10823, 194, 369, 379, 381,10823,10823,10823, 375, 309, + 10823,10823,10823, 146, 307, 392, 177, 0, 405, 0, 0, 201, 270, 233, 230, 310, 259, 290, 371, 178, 335, 396, 413, 415, 330, 358, 417, 368, 442, 402, @@ -861,15 +865,15 @@ static const flex_int16_t yy_base[3796] = 1015, 1014, 1017, 1022, 1019, 1037, 1011, 1042, 1050, 1052, 1058, 167, 1043, 1064, 1066, 1055, 1072, 1075, 1070, 1080, - 1081, 1049,10717, 1088, 1082, 1108, 1102, 1111, 1106, 1112, + 1081, 1049,10823, 1088, 1082, 1108, 1102, 1111, 1106, 1112, 1114, 1116, 1117, 1098, 1103, 1099, 1115, 1123, 1129, 1131, 1130, 1133, 1135, 1163, 1147, 1166, 1155, 1171, 1170, 1156, 1205, 1172, 1157, 1180, 1250, 1174, 1176, 1194, 1207, 1220, 320, 1208, 1178, 1237, 1203, 1204, 1243, 1239, 1247, 1258, 1273, 1262, 1264, 1272, 1286, 1288, 1290, 1284, 1259, 1289, - 1232, 1306,10717, 1292, 1305, 1245, 1316, 1330, 1337, 1324, + 1232, 1306,10823, 1292, 1305, 1245, 1316, 1330, 1337, 1324, 1281, 1355, 1317, 1322, 1319, 1327, 1351, 1403, 1451, 1339, - 1360, 1346, 1357, 1366,10717, 1392, 1382, 1500, 1387, 1391, + 1360, 1346, 1357, 1366,10823, 1392, 1382, 1500, 1387, 1391, 1410, 1407, 1405, 1398, 1431, 1432, 1409, 1352, 1438, 1423, 1350, 1448, 1465, 1459, 1457, 1460, 1478, 1458, 1490, 1483, @@ -879,16 +883,16 @@ static const flex_int16_t yy_base[3796] = 1593, 1602, 1601, 1620, 1617, 1615, 1614, 1616, 1629, 1630, 1651, 1595, 1415, 1653, 1642, 1659, 1664, 1668, 1656, 1675, 1679, 1683, 1691, 1689, 1685, 1686, 1695, 1706, 1687, 1698, - 1712, 1716, 1714, 1723, 1732, 1719, 1728, 1439,10717, 1743, - 1741,10717, 1727, 1744, 1736, 1749, 1739, 1756, 1745, 1750, + 1712, 1716, 1714, 1723, 1732, 1719, 1728, 1439,10823, 1743, + 1741,10823, 1727, 1744, 1736, 1749, 1739, 1756, 1745, 1750, - 10717, 1773, 1763, 1774, 1778, 1768, 1779, 1771, 1783, 1792, + 10823, 1773, 1763, 1774, 1778, 1768, 1779, 1771, 1783, 1792, 1772, 1803, 1799, 1790, 1800, 1807, 1801, 1805, 1809, 1827, 1819, 1830, 1822, 1826, 1836, 1831, 1832, 1841, 1846, 1834, - 1857, 1842, 1903,10717, 1859, 1860, 1865, 1862, 1869, 1886, + 1857, 1842, 1903,10823, 1859, 1860, 1865, 1862, 1869, 1886, 1878, 1893, 1905, 1885, 1920, 1924, 1926, 1953, 1927, 1912, 1930, 1936, 1941, 1963, 1874, 1965, 1956, 1962, 1960, 1972, - 1957, 1955, 1989, 1969, 1987, 1980, 1991,10717, 1999, 2005, + 1957, 1955, 1989, 1969, 1987, 1980, 1991,10823, 1999, 2005, 2007, 1875, 1998, 2000, 1993, 2003, 1986, 2004, 2022, 2024, 2016, 2021, 2030, 2033, 2045, 2052, 2046, 2057, 2064, 2049, 2050, 2048, 2051, 2060, 2067, 2086, 2047, 2069, 2085, 2082, @@ -897,779 +901,785 @@ static const flex_int16_t yy_base[3796] = 2112, 2116, 2101, 2103, 2114, 2118, 2113, 2127, 2133, 2129, 2131, 2145, 2134, 2148, 2141, 2156, 2144, 2160, 2161, 2143, 2158, 2170, 2172, 2164, 2178, 2195, 2182, 2193, 2184, 2188, - 2205, 2208, 2209, 2197,10717, 2219, 2217, 2215, 2234, 2236, + 2205, 2208, 2209, 2197,10823, 2219, 2217, 2215, 2234, 2236, 2225, 2242, 2227, 2230, 2244, 2245, 2254, 2229, 2262, 2255, 2261, 2268, 2256, 2252, 2274, 2275, 2282, 2272, 2286, 2293, 2299, 2287, 2302, 2301, 2297, 2298, 2304, 2311, 2308, 2313, - 2317, 2339, 2333, 2321, 2332, 2325, 2355, 2334, 2338, 2352, - 2358, 2343, 2360, 2370, 2356, 2366, 2373, 2374, 2387, 2361, + 2317, 2339, 2333, 2321, 2332, 2325, 2355, 2334, 2338, 2357, + 2358, 2348, 2361, 2366, 2352, 2379, 2374, 2383, 2384, 2388, - 2365, 2401, 2391, 2394, 2384, 2408, 2393, 2411, 2398, 2397, - 2423, 2426, 2428, 2407, 2431, 2425, 2421, 2434, 2436, 2442, - 2440, 2461, 2450, 2467, 2452, 2456, 2454, 2463, 2468, 2477, - 2471, 2483, 2487, 2488, 2493, 2486, 2498, 2502, 2494, 2518, - 2520, 2513, 2522, 2515, 2523, 2531, 2532, 2533, 2530, 2549, - 2550, 2554, 2538, 2564, 2566, 2560, 2565, 2558, 2559, 2575, - 2568, 2579, 2585, 2594, 2599, 2587, 2595, 2593, 2606, 2596, - 2592, 2615, 2637, 2616, 2620, 2618,10717, 2622, 2623, 2629, - 2612, 2630, 2639, 2628, 2640, 2649, 2652, 2655, 2645, 2644, - 2650, 2696,10717, 2668,10717,10717, 1473, 2667,10717,10717, + 2393, 2404, 2391, 2394, 2398, 2410, 2397, 2411, 2406, 2408, + 2424, 2429, 2422, 2425, 2433, 2430, 2435, 2440, 2443, 2446, + 2456, 2474, 2451, 2453, 2461, 2449, 2467, 2465, 2468, 2478, + 2483, 2480, 2493, 2485, 2499, 2496, 2500, 2516, 2508, 2527, + 2525, 2520, 2512, 2526, 2524, 2535, 2541, 2514, 2546, 2543, + 2558, 2562, 2547, 2561, 2567, 2560, 2568, 2570, 2577, 2573, + 2580, 2505, 2576, 2598, 2606, 2597, 2603, 2599, 2613, 2607, + 2596, 2615, 2626, 2636, 2624, 2623,10823, 2628, 2618, 2630, + 2638, 2642, 2640, 2639, 2643, 2665, 2660, 2670, 2653, 2656, + 2655, 2707,10823, 2657,10823,10823, 1473, 2669,10823,10823, - 2677, 2687,10717, 2680, 2694, 2690, 2676, 2720, 2711, 2721, - 2719, 2713, 2723, 2714, 2679, 2764, 2732, 2728, 2742, 2735, - 2750, 2743, 2769, 2770, 2759, 2779, 2772, 2788, 2798, 2822, - 2797, 2806, 2793, 2814, 2817, 2816, 2820, 2824, 2709, 2825, - 2826, 2836, 2833, 2812, 2839, 2834, 2856, 2847, 2853, 2869, - 2850, 2859, 2851, 2761, 2874, 2872, 2881,10717, 2882, 2880, - 2875, 2884, 2885, 2895, 2883, 2896, 2889, 2898, 2909, 2913, - 2918, 2906, 2919, 2908, 2916, 2925, 2930, 2920, 2912, 2915, - 2941, 2940, 2942, 2958, 2964, 2944, 2947,10717, 2951, 2954, - 2946, 2967, 2971, 2976, 2977, 2961, 2959, 2974, 2987, 3013, + 2684, 2688,10823, 2679, 2697, 2696, 2698, 2706, 2717, 2721, + 2720, 2724, 2736, 2732, 2740, 2779, 2735, 2733, 2745, 2743, + 2772, 2744, 2774, 2782, 2765, 2785, 2789, 2795, 2799, 2828, + 2808, 2818, 2817, 2825, 2833, 2831, 2835, 2843, 2690, 2837, + 2829, 2850, 2845, 2847, 2852, 2846, 2877, 2865, 2868, 2883, + 2870, 2873, 2864, 2762, 2894, 2887, 2906,10823, 2897, 2769, + 2890, 2900, 2896, 2856, 2898, 2895, 2915, 2914, 2923, 2928, + 2932, 2921, 2926, 2922, 2933, 2947, 2929, 2944, 2941, 2945, + 2952, 2960, 2946, 2970, 2949, 2959, 2956,10823, 2971, 2973, + 2961, 2978, 2987, 2981, 2991, 2996, 2989, 2986, 2997, 3002, - 2978, 2994, 2997, 2996, 3007, 2993, 3008, 3022,10717, 3027, - 3018, 3009, 3023, 3010, 3036, 3039, 3042, 3024, 3044, 3038, - 3049, 3057, 3052, 3048, 3053, 3068, 3066, 3065, 3063, 3069, - 3079, 3090, 3073, 3096, 3102, 3084, 3093, 3106, 3099, 3108, - 3104, 3100, 3117, 3112, 3114, 3123, 3126, 3131, 3142, 3133, - 3128, 3143, 3157, 3150, 3137, 3153, 3161, 3141, 3170, 3172, - 3181, 3175, 3164, 3174, 3184, 3176, 3185, 3168, 3189, 3201, - 3215, 3191, 3203, 3221, 3198, 3209, 3211, 3227, 3216,10717, - 3200, 3223,10717, 3228, 3225, 3236, 3282, 3234, 3268, 3261, - 3252, 3270, 3248, 3274, 3262, 3272, 3275, 3292, 3281, 3301, + 3027, 3012, 3009, 3016, 3013, 3025, 3017, 3028, 3045,10823, + 3033, 3047, 3030, 3044, 3042, 3059, 3050, 3060, 3057, 3061, + 3058, 3066, 3078, 3074, 3076, 3071, 3087, 3088, 3083, 3085, + 3097, 3107, 3094, 3103, 3115, 3118, 3106, 3108, 3123, 3116, + 3129, 3119, 3126, 3122, 3131, 3134, 3162, 3165, 3153, 3170, + 3155, 3152, 3175, 3176, 3173, 3164, 3178, 3179, 3166, 3185, + 3181, 3193, 3192, 3189, 3188, 3214, 3203, 3218, 3206, 3216, + 3226, 3231, 3212, 3228, 3234, 3225, 3237, 3245, 3241, 3248, + 10823, 3239, 3251, 3256,10823, 3264, 3259, 3255, 3304, 3284, + 3294, 3281, 3287, 3296, 3274, 3314, 3290, 3310, 3322, 3316, - 3297, 3313, 3300, 3316, 3314, 3318, 3308, 3332, 3325, 3320, - 3327, 3350, 3333, 3352, 3263, 3356, 3362, 477, 3369, 3343, - 3348, 3353, 3398, 3364, 3363, 3360, 3366, 3380, 3383, 3392, - 3395, 3370, 3402, 3401, 3411, 3405, 3407, 3432, 3423, 3396, - 3426, 3422, 3428, 3452, 3450, 3436,10717, 3463, 3457, 3447, - 3465, 3448, 3473, 3467, 3459,10717, 3462, 3476, 3464, 3481, - 3486, 3477, 3497, 3489, 3487, 3490, 3494, 3511, 3516, 3512, - 3513, 3524,10717, 3499,10717, 3517, 3507, 3521, 3536, 3537, - 3534, 3535, 3532, 3540, 3551, 3560,10717,10717, 3561, 3564, - 3562, 3573, 3575, 3577, 3570, 3580, 3572,10717, 3578, 3586, + 3333, 3326, 3334, 3340, 3323, 3353, 3343, 3354, 3349, 3339, + 3351, 3350, 3360, 3374, 3367, 3383, 3254, 3389, 3392, 477, + 3394, 3371, 3378, 3384, 3429, 3395, 3399, 3398, 3401, 3417, + 3409, 3415, 3419, 3411, 3438, 3432, 3434, 3431, 3468, 3461, + 3457, 3454, 3467, 3459, 3471, 3473, 3481, 3470,10823, 3476, + 3484, 3482, 3486, 3479, 3507, 3500, 3496,10823, 3511, 3512, + 3506, 3529, 3516, 3517, 3526, 3510, 3527, 3535, 3533, 3537, + 3542, 3534, 3548, 3564,10823, 3550,10823, 3556, 3554, 3559, + 3571, 3585, 3560, 3575, 3572, 3573, 3591, 3599,10823,10823, + 3600, 3602, 3586, 3593, 3613, 3614, 3601, 3609, 3606,10823, - 10717, 3607, 3588, 3587, 3596, 3589, 3602, 3601, 3612, 3605, - 3629, 3606, 3632, 3616, 3635, 3627,10717, 3643, 3639, 3628, - 3645, 3646, 3647, 3648, 3655, 3656, 3652,10717, 3659, 3669, - 3674, 3668, 3686, 3693, 3688, 3676, 3695, 3699, 3684, 3687, - 3690, 3701, 3692, 3713, 3714, 3723, 3725, 3729, 3728, 3731, - 3740,10717, 3733, 3721, 3722, 3748, 3741, 3744, 3745, 3750, - 3757, 3752, 3755, 3761, 3773, 3767, 3775, 3765, 3781, 3768, - 3758, 3795, 3784, 3791, 3798, 3785, 3792, 3797, 3803, 552, - 3810, 3807, 3808, 3788,10717, 3819, 3817, 3824, 3834, 3836, - 3822, 115, 3831, 3835, 3840, 3848, 3820, 3849, 3857, 3851, + 3622, 3630,10823, 3641, 3620, 3636, 3629, 3628, 3634, 3637, + 3640, 3646, 3661, 3657, 3633, 3679, 3663, 3677, 3667,10823, + 3686, 3680, 3668, 3688, 3691, 3684, 3690, 3692, 3707, 3709, + 10823, 3695, 3713, 3719, 3710, 3703, 3732, 3724, 3717, 3738, + 3742, 3727, 3728, 3730, 3746, 3740, 3766, 3768, 3769, 3770, + 3773, 3771, 3774, 3776,10823, 3777, 3763, 3764, 3788, 3780, + 3786, 3783, 3790, 3789, 3796, 3801, 3815, 3819, 3813, 3825, + 3809, 3817, 3812, 3837, 3838, 3828, 3845, 3834, 3840, 3821, + 3841, 3842, 552, 3848, 3854, 3852, 3849,10823, 3864, 3873, + 3870, 3877, 3879, 3865, 115, 3875, 3880, 3876, 3891, 3890, - 3865, 3875, 3858, 3868, 3879, 3877, 3869, 3872, 3884, 3878, - 3888, 3887, 3896, 3897, 3899,10717, 3894, 3905, 3904, 3910, - 3921, 3908, 3924,10717, 3932, 3941, 3939, 3933, 3946, 3947, - 3954, 3931, 3958, 3955,10717, 3967, 3956, 3966, 3952, 3981, - 3973, 3979, 3970,10717, 3992, 3991, 3993, 3984, 4002, 3997, - 4000, 3995, 4006, 4011, 4023, 4017, 4033, 4027, 4022, 4024, - 4025, 4036, 4031, 4044, 4020, 4054, 4056, 4052, 4050, 4059, - 4063, 4066, 4062, 4069, 4096, 4077,10717, 4099, 4080, 4086, - 4090, 4088, 4093, 4101, 4104, 4134, 4091, 4105, 4117, 4120, - 4161, 4125, 4131, 4144, 4148, 4136, 4145, 4150, 4146, 4155, + 3893, 3894, 3904, 3918, 3919, 3910, 3911, 3923, 3930, 3929, + 3922, 3926, 3937, 3933, 3920, 3938, 3951, 3947, 3952,10823, + 3943, 3959, 3968, 3963, 3961, 3974, 3957, 3978,10823, 3987, + 3995, 3988, 3982, 3999, 3998, 4008, 4009, 4013, 4007,10823, + 4022, 4010, 4005, 4018, 4025, 4032, 4036, 4023,10823, 4041, + 4043, 4055, 4044, 4056, 4049, 4057, 4050, 4052, 4059, 4069, + 4070, 4082, 4083, 4071, 4079, 4084, 4097, 4086, 4093, 4112, + 4094, 4098, 4106, 4108, 4107, 4120, 4117, 4113, 4122, 4124, + 4128,10823, 4151, 4139, 4129, 4144, 4140, 4141, 4153, 4149, + 4174, 4163, 4159, 4164, 4171, 4209, 4176, 4184, 4167, 4196, - 4158, 4171, 4163, 4197, 4179, 4176, 4188, 4209, 4205, 4186, - 4190, 4207, 4204, 4196, 4221, 4219, 4233, 4215, 4226, 4227, - 4259, 4238, 4235, 4254, 4260, 4245,10717, 4247, 4265, 4244, - 4266, 4276, 4294, 4281, 4239, 4291, 4283, 4289, 4282, 4286, - 4300, 4304, 4318, 4303, 4312, 4308, 4321, 4323, 4324, 4327, - 4311, 4330, 4331, 4340, 4344, 4343, 4347, 4360,10717, 4363, - 4364, 4346, 4367, 4368, 4357, 4372, 4374, 4373, 4385, 4386, - 4387, 4383, 4389, 4371, 4394, 4391, 4390, 4414, 4413, 4418, - 4405,10717, 4424, 4410, 4415, 4421, 4416, 4434, 4436, 4451, - 4455, 4454, 4461, 4460, 4446, 4463, 4467, 4457,10717, 4472, + 4202, 4199, 4188, 4216, 4220, 4211, 4192, 4226, 4253, 4230, + 4215, 4235, 4236, 4243, 4242, 4241, 4259, 4252, 4247, 4272, + 4269, 4276, 4277, 4280, 4268, 4303, 4293, 4273, 4288, 4307, + 4286,10823, 4306, 4311, 4302, 4300, 4327, 4340, 4332, 4333, + 4325, 4338, 4337, 4346, 4339, 4352, 4348, 4361, 4356, 4360, + 4368, 4363, 4375, 4367, 4382, 4379, 4374, 4385, 4388, 4301, + 4390, 4396, 4395, 4409,10823, 4394, 4420, 4407, 4419, 4414, + 4413, 4416, 4429, 4434, 4421, 4423, 4424, 4431, 4443, 4432, + 4451, 4447, 4469, 4457, 4456, 4466, 4455,10823, 4472, 4464, + 4474, 4480, 4483, 4481, 4490, 4499, 4500, 4506, 4508, 4510, - 4473, 4471, 4475, 4477, 4484, 4486, 4468, 4508, 4489,10717, - 4507, 4492, 4504, 4500, 4497, 4495, 4526, 4528, 4519, 4522, - 10717, 4531, 4534, 4520, 4523, 4539, 4542, 4541, 4537, 4552, - 4546, 4558, 4557, 4564, 4530, 4565, 4569,10717, 4568, 4602, - 4586, 4581, 4585, 4580, 4591, 4601, 4617, 4596, 4608, 4597, - 10717, 4631, 4623, 4628, 4641, 4615, 4621, 4633, 4635, 4648, - 4652, 4638, 4643, 4654, 4644,10717, 4655, 4658, 4670, 4671, - 4673, 4674, 4668, 4678, 4681, 4686, 4690, 4680, 4691, 4695, - 4697, 4707, 4704, 4718, 4708, 4713, 4720, 4719, 4724, 4715, - 4735, 4729, 4731, 4753, 4765, 4747, 4762, 4764, 4760, 4751, + 4501, 4512, 4513, 4516,10823, 4521, 4526, 4517, 4527, 4528, + 4525, 4531, 4530, 4551, 4540,10823, 4557, 4545, 4554, 4555, + 4546, 4542, 4576, 4579, 4569, 4572,10823, 4581, 4574, 4578, + 4584, 4580, 4592, 4595, 4568, 4611, 4596, 4593, 4599, 4619, + 4610, 4614, 4606, 4625,10823, 4613, 4620, 4653, 4631, 4633, + 4627, 4636, 4651, 4652, 4660, 4655, 4669, 4658,10823, 4678, + 4677, 4663, 4688, 4683, 4680, 4682, 4684, 4698, 4707, 4695, + 4694, 4715, 4697,10823, 4704, 4701, 4705, 4725, 4731, 4730, + 4724, 4741, 4737, 4738, 4736, 4742, 4744, 4745, 4747, 4762, + 4770, 4768, 4761, 4764, 4763, 4771, 4791, 4781, 4776, 4782, - 4748, 4768, 4770, 4775, 4777, 4778, 4781,10717, 4783, 4780, - 4789, 4794, 4787, 4804, 4800, 4806, 4816, 4802, 4811, 4827, - 4809, 4828, 4853, 4856, 4814, 4836, 4833, 4838, 4849, 4861, - 4843, 4848, 4851, 4840, 4867, 4855, 4870, 4871, 4865, 4876, - 4882, 4875, 4892, 4885, 4896, 4887, 4888, 4897, 4902, 4908, - 4899, 4910, 4926, 4933, 4911, 4923, 4928, 4939, 4941, 4946, - 4952, 4931, 4947, 4950, 4948, 4974,10717, 4954, 4960, 4955, - 4964, 4969, 4990, 4989, 5000, 4983, 4991, 5005, 4997, 5009, - 5010, 4988, 5001, 5017, 5003, 5011, 5022,10717, 5015,10717, - 5039, 5024, 5038, 5046, 5044, 5028,10717, 5052,10717, 5051, + 4798, 4806, 4815, 4800, 4812, 4816, 4811, 4804, 4801, 4819, + 4826, 4835, 4837, 4833, 4847,10823, 4836, 4841, 4843, 4832, + 4844, 4851, 4839, 4866, 4857, 4860, 4868, 4877, 4872, 4870, + 4906, 4910, 4871, 4887, 4892, 4893, 4881, 4897, 4903, 4901, + 4905, 4930, 4926, 4909, 4914, 4920, 4916, 4945, 4925, 4940, + 4950, 4932, 4947, 4936, 4941, 4957, 4961, 4952, 4943, 4970, + 4974, 4962, 4967, 4971, 4969, 4995, 4999, 5000, 5002, 4991, + 4994, 5001, 4998, 5028,10823, 4996, 5012, 5019, 5025, 5023, + 5029, 5035, 5039, 5021, 5038, 5036, 5059, 5055, 5054, 5064, + 5057, 5051, 5066, 5063, 5078, 5079,10823, 5070,10823, 5094, - 5056, 5041, 5042, 5060,10717, 5059, 5040, 5070, 5055, 5072, - 5079, 5078, 5073, 5077, 5097, 5081, 5082, 5100, 5089, 5108, - 5103, 5085, 5111, 5112, 5119, 5114, 5129, 5121, 5115, 5139, - 5124, 5146, 5127, 5138, 5141, 5151, 5145, 5162,10717, 5150, - 5166, 5168, 5170, 5171, 5165, 5172, 5184, 5174, 5180, 5191, - 5189, 5201, 5192, 5202, 5209, 5211, 5216, 5214, 5223, 5219, - 5228, 5215, 5231, 5232,10717, 5226, 5244, 5238, 5239,10717, - 5249, 5236, 5255, 5267, 5259, 5251, 5262, 5271, 5278, 5270, - 5263, 5265, 5304, 5296, 5294, 5290,10717, 5302, 5298, 5289, - 5305, 5313, 5300, 5323, 5333, 5334, 5318, 5341, 5338, 5343, + 5071, 5095, 5098, 5106, 5087,10823, 5103,10823, 5105, 5109, + 5096, 5097, 5101,10823, 5115, 5110, 5121, 5102, 5123, 5119, + 5134, 5130, 5133, 5148, 5140, 5160, 5155, 5150, 5144, 5157, + 5138, 5146, 5168, 5171, 5170, 5186, 5177, 5174, 5190, 5180, + 5201, 5181, 5187, 5198, 5207, 5197, 5205,10823, 5220, 5219, + 5213, 5218, 5215, 5217, 5225, 5236, 5227, 5232, 5242, 5247, + 5259, 5240, 5245, 5252, 5261, 5267, 5268, 5250, 5278, 5284, + 5286, 5279, 5290, 5288,10823, 5282, 5301, 5283, 5285, 5308, + 10823, 5313, 5295, 5320, 5323, 5311, 5309, 5315, 5329, 5333, + 5326, 5331, 5335, 5360, 5338, 5359, 5365,10823, 5340, 5367, - 5331, 5329, 5335, 5332, 5350, 5360, 5362, 5368, 5359, 5372, - 5355, 5371, 5373, 5379, 5365, 5370, 5381, 5366, 5374, 5388, - 5393, 5395, 5386, 5389, 5415, 5416, 5405, 5420,10717, 5413, - 5421, 5417, 5431, 5408, 5422, 5436, 5423, 5450, 5458, 5452, - 10717, 5439, 5442, 5463, 5455, 5469, 5457, 5460, 5449, 5475, - 5482, 5477, 5496, 5498, 5489,10717, 5497,10717, 5481, 5508, - 5513, 5514, 5509, 5504, 5523, 5515, 5516, 5527, 5540, 5542, - 5525, 5530, 5553, 5541, 5543, 5552, 5544, 5572, 5538, 5555, - 5571, 5575, 5569, 5573, 5570, 5574, 5580, 5579, 5609, 5600, - 5601,10717,10717, 5587, 5597, 5616, 5620, 5602, 5621, 5632, + 5348, 5371, 5369, 5353, 5386, 5388, 5380, 5396, 5401, 5393, + 5398, 5395, 5391, 5387, 5390, 5413, 5394, 5424, 5431, 5422, + 5436, 5411, 5437, 5432, 5439, 5423, 5425, 5433, 5428, 5426, + 5443, 5451, 5453, 5458, 5452, 5478, 5454, 5468, 5479,10823, + 5481, 5484, 5475, 5494, 5470, 5483, 5471, 5498, 5513, 5500, + 5510,10823, 5522, 5504, 5525, 5517, 5531, 5518, 5521, 5514, + 5536, 5541, 5540, 5546, 5557, 5548,10823, 5556,10823, 5545, + 5575, 5547, 5579, 5573, 5568, 5584, 5588, 5577, 5580, 5589, + 5596, 5605, 5597, 5604, 5600, 5606, 5611, 5610, 5630, 5616, + 5625, 5635, 5641, 5637, 5628, 5638, 5632, 5646, 5647, 5658, - 5634, 5629, 5626, 5607, 5642, 5628, 5671,10717, 5640, 5655, - 5650, 5669, 5661, 5656, 5660, 5679, 5685, 5681, 5677, 5689, - 5687,10717, 5680, 5683, 5695, 5690, 5698, 5712, 5697,10717, - 5718,10717, 5704, 5710, 5713, 5720, 5714, 5724, 5722, 5725, - 5730, 5740, 5744, 5763, 5749, 5769, 5762, 5753, 5768, 5752, - 5755, 5756, 5774, 5764, 5783, 5776, 5770, 5787,10717, 5788, - 5789, 5790, 5801, 5792, 5802, 5803, 5811, 5795,10717, 5813, - 5814, 5828, 5815, 5822, 5826, 5825, 5834, 5829, 5843, 5852, - 5845, 5853, 5850, 5851,10717, 5847, 5849, 5870, 5855, 5865, - 5875, 5868, 5882, 5871, 5888,10717, 5894, 5892, 5905, 5903, + 5649, 5667,10823,10823, 5645, 5662, 5681, 5683, 5668, 5687, + 5697, 5690, 5692, 5688, 5699, 5685, 5695, 5715, 5739,10823, + 5721, 5722, 5714, 5740, 5724, 5726, 5728, 5744, 5752, 5749, + 5742, 5755, 5751,10823, 5741, 5750, 5760, 5763, 5762, 5777, + 5764,10823, 5784,10823, 5766, 5776, 5779, 5788, 5789, 5790, + 5787, 5801, 5805, 5806, 5815, 5809, 5813, 5836, 5821, 5822, + 5834, 5819, 5823, 5825, 5838, 5840, 5848, 5832, 5842, 5837, + 10823, 5860, 5850, 5868, 5869, 5856, 5873, 5879, 5877, 5865, + 10823, 5880, 5881, 5895, 5882, 5887, 5889, 5893, 5907, 5904, + 5910, 5921, 5913, 5917, 5916, 5918, 5915,10823, 5914, 5929, - 5895, 5902, 5908, 5886, 5898, 5896, 5909, 5912, 5919, 5928, - 5930, 5925, 5938, 5936, 5929, 5948, 5954, 5935, 5961, 5921, - 5947,10717, 5955, 5964, 5965, 5962, 5946, 5977, 5980, 5989, - 5997, 5999, 5981, 6000, 6002, 5988, 5991, 5992, 6014, 6016, - 6007, 6019,10717, 6030, 6015, 6036, 6021, 6027, 6010, 6042, - 6038, 6031, 6047, 6050, 6040, 6043, 6048, 6056, 6065, 6063, - 6078, 6084, 6067, 6081, 6080, 6086, 6082, 6090, 6094, 6107, - 10717, 6089, 6092, 6105, 6113, 6111, 6116, 6091, 6126, 6121, - 6123, 6136, 6119, 6150, 6132, 6133, 6153, 6156, 6137,10717, - 10717, 6161, 6140, 6160,10717, 6164, 6149, 6171, 6166, 6159, + 5937, 5940, 5920, 5953, 5936, 5955, 5941, 5966,10823, 5964, + 5975, 5962, 5977, 5973, 5972, 5976, 5980, 5954, 5965, 5979, + 5990, 5989, 6004, 5986, 6000, 6003, 6010, 6011, 5999, 6029, + 6023, 6017, 6025, 6045, 6022,10823, 6035, 6038, 6039, 6037, + 6047, 6046, 6055, 6062, 6054, 6076, 6059, 6077, 6082, 6066, + 6070, 6074, 6088, 6096, 6097, 6099,10823, 6104, 6089, 6110, + 6085, 6106, 6092, 6118, 6113, 6105, 6115, 6128, 6124, 6109, + 6136, 6138, 6145, 6144, 6155, 6148, 6154, 6151, 6157, 6158, + 6159, 6163, 6173, 6186,10823, 6197, 6181, 6178, 6196, 6188, + 6187, 6208, 6200, 6192, 6190, 6216, 6204, 6220, 6213, 6210, - 6176, 6174, 6168, 6179, 6192, 6195, 6181, 6208, 6205, 6184, - 6197,10717, 6219, 6215, 6223, 6218, 6221, 6230, 6225,10717, - 6214, 6234, 6239, 6244, 6242, 6241, 6243, 6240, 6250, 6246, - 6261, 6254, 6248, 6278, 6235, 6287, 6269, 6277, 6280,10717, - 6275, 6271, 6298, 6294, 6285, 6291, 6302,10717, 6296, 6304, - 6312, 6318, 6319, 6326, 6323, 6329, 6327, 6334, 6320, 6335, - 6339, 6347, 6337, 6351, 6353, 6368, 6354, 6360, 6362, 6356, - 6377, 6381, 6384,10717, 6383, 6390, 6366, 6398, 6391,10717, - 6397, 6412, 6395,10717, 6410, 6394, 6409, 6404, 6428,10717, - 6415, 6422, 6417, 6431, 6413, 6439, 6423, 6440, 6446, 6433, + 6227, 6234, 6222,10823,10823, 6241, 6219, 6236,10823, 6243, + 6229, 6256, 6239, 6237, 6248, 6265, 6246, 6259, 6269, 6272, + 6261, 6277, 6282, 6264, 6268,10823, 6298, 6292, 6303, 6280, + 6295, 6311, 6308,10823, 6293, 6318, 6315, 6316, 6314, 6313, + 6306, 6317, 6329, 6319, 6344, 6333, 6335, 6348, 6339, 6340, + 6359, 6337, 6350, 6369,10823, 6360, 6363, 6367, 6368, 6374, + 6364, 6355,10823, 6384, 6377, 6392, 6396, 6397, 6405, 6400, + 6410, 6415, 6413, 6401, 6407, 6416, 6412, 6418, 6427, 6430, + 6451, 6434, 6440, 6454, 6443, 6460, 6462, 6464,10823, 6457, + 6469, 6472, 6470, 6471,10823, 6473, 6506, 6477,10823, 6481, - 6437, 6443, 6449,10717, 6450, 6444, 6464,10717, 6451, 6465, - 6473, 6480, 6481, 6466, 6487, 6477, 6489, 6479, 6488,10717, - 6493, 6499,10717, 6500, 6490, 6504,10717, 6506, 6507, 6517, - 6509, 6514, 6530, 6532, 6525, 6511, 6520, 6533, 6521, 6524, - 6549, 6551, 6559, 6545, 6552, 6547, 6544,10717, 6572, 6550, - 6566, 6578, 6562, 6580, 6585, 6579, 6576, 6593, 6583,10717, - 10717, 6601,10717, 6610, 6588, 6600, 6603,10717, 6602, 6608, - 6631, 6615, 6633, 6636, 6625, 6623, 6645, 6640,10717, 6647, - 6650,10717, 6630, 6649, 6659, 6642, 6657, 6663, 6661, 6669, - 6678, 6668, 6680, 6682, 6683, 6688, 6675, 6684, 6702, 6704, + 6483, 6489, 6476, 6510,10823, 6499, 6513, 6502, 6519, 6497, + 6518, 6501, 6530, 6527, 6512, 6515, 6529, 6536,10823, 6539, + 6533, 6538,10823, 6532, 6550, 6554, 6564, 6567, 6556, 6549, + 6573, 6566, 6579, 6568, 6576,10823, 6581, 6587,10823, 6589, + 6593, 6578, 6601,10823, 6595, 6598, 6599, 6588, 6600, 6613, + 6616, 6620, 6630, 6612, 6624, 6617, 6619, 6637, 6644, 6647, + 6634, 6645, 6640, 6639,10823, 6672, 6651, 6661, 6666, 6636, + 6676, 6678, 6674, 6668, 6685, 6679,10823,10823, 6655,10823, + 6688, 6682, 6694, 6704,10823, 6707, 6709, 6699, 6711, 6726, + 6706, 6715, 6712, 6724, 6732,10823, 6741, 6742,10823, 6721, - 6695, 6730,10717, 6703, 6711, 6712, 6713, 6708, 6721, 6739, - 6738, 6727,10717, 6750, 6735, 6740, 6751, 6745,10717, 6762, - 10717, 6757, 6764, 6768, 6779, 6767, 6770, 6676, 6772,10717, - 6785, 6774, 6793, 6777, 6791, 6807,10717, 6800, 6806, 6798, - 6804, 6801, 6815, 6819, 6813, 6817, 6850, 6827,10717, 6820, - 6838, 6843, 6837, 6840, 6846, 6844, 6849, 6863, 6856, 6858, - 6854, 6881, 6874, 6866, 6879, 6890, 6883, 6893, 6876,10717, - 6896, 6902, 6907, 6901, 6931, 6903, 6923, 6921,10717, 6924, - 6927, 6908, 6938,10717, 6934, 6936, 6946, 6875, 6935, 6949, - 6950, 6959, 6954, 6958, 6942, 6973,10717, 6976, 6977, 6970, + 6739, 6737, 6738, 6751, 6753, 6754, 6759, 6781, 6756, 6734, + 6764, 6769, 6780, 6736, 6779, 6778, 6799, 6787, 6819,10823, + 6796, 6801, 6800, 6813, 6814, 6809, 6815, 6826, 6827,10823, + 6828, 6842, 6839, 6845, 6854,10823, 6853,10823, 6846, 6858, + 6851, 6866, 6856, 6859, 6803, 6872,10823, 6874, 6873, 6870, + 6878, 6891, 6880,10823, 6893, 6903, 6894, 6895, 6890, 6916, + 6919, 6902, 6914, 6932, 6920,10823, 6917, 6931, 6921, 6934, + 6937, 6939, 6941, 6942, 6954, 6947, 6955, 6949, 6959, 6972, + 6970, 6963, 6977, 6984, 6964, 6966, 6969,10823, 6991, 6994, + 6990, 6989, 7013, 6997, 7011, 7014,10823, 7012, 7015, 6996, - 6982, 6986, 6983, 6980,10717,10717, 7002,10717, 6995, 6997, - 6996, 7009, 7005, 7017, 7012, 7022, 7033, 7016, 7018, 7036, - 7041, 7029,10717, 7032, 6868, 7028, 7070, 7057, 7067, 7063, - 10717, 7064, 7054,10717,10717, 7071, 7081, 7076, 7075, 7078, - 7077, 7065,10717, 7091, 7090, 7086, 7088, 7106, 7105,10717, - 7115, 7100, 7117, 7104,10717, 7101, 7125, 7112, 7114, 7131, - 7122, 7127, 7139, 7145, 7133, 7137, 7157, 7153, 7160, 7151, - 7147, 7158, 7163, 7152, 7178, 7180, 7179, 7181,10717, 7186, - 7172, 7182, 7185, 7188, 7190, 7200, 7195, 7213, 7202, 7231, - 7235,10717, 7217,10717, 7220, 7222, 7228, 7237, 7245, 7242, + 7024,10823, 7018, 7035, 7023, 7034, 7030, 7042, 7045, 7049, + 7019, 7050, 7051, 7062,10823, 7056, 7061, 7054, 7075, 7079, + 7076, 7078,10823,10823, 7091,10823, 7092, 7081, 7094, 7095, + 7089, 7090, 7115, 7111, 7127, 7112, 7116, 7124, 7129, 7119, + 10823, 7125, 7138, 7123, 7153, 7154, 7163, 7157,10823, 7156, + 7146,10823,10823, 7149, 7168, 7173, 7169, 7170, 7176, 7180, + 7171,10823, 7184, 7187, 7181, 7205, 7182, 7207, 7190,10823, + 7214, 7200, 7217, 7203,10823, 7197, 7226, 7213, 7210, 7230, + 7224, 7227, 7239, 7233, 7234, 7228, 7260, 7252, 7241, 7253, + 7248, 7254, 7265, 7257, 7273, 7269, 7270, 7285,10823, 7281, - 7243, 7250, 7241, 7247, 7259, 7263, 7255, 7251, 7277, 7257, - 7270, 7272, 7275, 7290,10717, 7289, 7292, 7280, 7300, 7296, - 7309, 7310, 7306,10717, 7319, 7314, 7320, 7317, 7325, 7326, - 7312, 7330, 7327, 7342, 7328, 7344, 7348, 7350, 7346, 7353, - 7358, 7347, 7363, 7351, 7369,10717, 7374, 7366, 7375, 7368, - 7380, 7376, 7377, 7396, 7404, 7382, 7392, 7385, 7395,10717, - 7401, 7410, 7413, 7240,10717, 7414, 7403, 7412, 7421, 7438, - 7417, 7427, 7428, 7437, 7456,10717, 7449, 7431, 7443, 7439, - 7441, 7454, 7460, 7462, 7466, 7465, 7480, 7492,10717, 7490, - 7479, 7498, 7499, 7500, 7486, 7501, 7502, 7507, 7515, 7509, + 7283, 7287, 7292, 7290, 7294, 7301, 7303, 7295, 7304, 7300, + 7328,10823, 7317,10823, 7322, 7312, 7330, 7339, 7323, 7337, + 7349, 7345, 7329, 7334, 7346, 7352, 7366, 7371, 7372, 7377, + 7363, 7368, 7369, 7385,10823, 7380, 7387, 7376, 7396, 7399, + 7400, 7402, 7401,10823, 7412, 7405, 7410, 7407, 7420, 7421, + 7422, 7431, 7418, 7440, 7427, 7438, 7450, 7451, 7439, 7446, + 7458, 7444, 7456, 7448, 7445,10823, 7469, 7460, 7457, 7479, + 7463, 7487, 7488, 7490, 7496, 7495, 7480, 7483, 7500,10823, + 7489, 7486, 7509, 7516,10823, 7508, 7503, 7510, 7519, 7536, + 7538, 7522, 7537, 7543, 7529, 7551,10823, 7548, 7530, 7546, - 10717, 7519, 7528, 7539, 7525, 7526, 7550, 7527, 7534, 7561, - 7552, 7553, 7538, 7546, 7565, 7554, 7555, 7560, 7580, 7584, - 7556, 7577, 7583, 7590,10717, 7578,10717, 7579, 7591, 7601, - 7608, 7613, 7603, 7618, 7604, 7628,10717, 7616, 7617, 7615, - 7636, 7625,10717, 7626, 7631, 7639, 7644,10717, 7659, 7652, - 7649, 7655, 7637, 7671,10717, 7668, 7670, 7675, 7690, 7692, - 7679, 7691, 7687, 7702, 7681, 7695, 7685, 7710, 7697, 7699, - 7700,10717, 7712, 7718, 7723, 7720, 7728, 7726, 7732, 7722, - 7730, 7744, 7738,10717, 7749, 7736, 7746, 7747, 7750, 7768, - 7755, 7753, 7784, 7780, 7769, 7787, 7771, 7773, 7782, 7785, + 7545, 7558, 7563, 7567, 7557, 7561, 7578, 7589, 7593,10823, + 7597, 7588, 7590, 7594, 7601, 7577, 7585, 7609, 7610, 7626, + 7608,10823, 7627, 7636, 7637, 7624, 7648, 7649, 7629, 7640, + 7652, 7657, 7660, 7645, 7658, 7675, 7653, 7672, 7674, 7677, + 7679, 7676, 7696, 7698, 7691,10823, 7687,10823, 7689, 7685, + 7710, 7701, 7718, 7715, 7725, 7728, 7721,10823, 7704, 7713, + 7730, 7717, 7740, 7734,10823, 7723, 7742, 7748, 7752,10823, + 7762, 7766, 7753, 7760, 7774, 7777, 7780,10823, 7778, 7779, + 7783, 7789, 7791, 7785, 7795, 7797, 7801, 7805, 7799, 7800, + 7822, 7808, 7806, 7809,10823, 7821, 7827, 7831, 7829, 7832, - 7783, 7803,10717, 7793, 7802, 7816, 7811, 7813, 7814, 7823, - 10717, 7815,10717, 7812, 7819, 7834, 7841, 7836,10717, 7851, - 7832, 7852, 7830, 7857,10717,10717, 7861, 7839, 7860, 7867, - 7864,10717,10717, 7869,10717, 7859,10717, 7862, 7874,10717, - 10717, 7870, 7879, 7880, 7887,10717, 7888, 7904, 7895,10717, - 7910,10717, 7885, 7891, 7912, 7900, 7897, 7918,10717, 7902, - 7925, 7914, 7922, 7930,10717, 7917, 7938, 7936, 7956, 7940, - 7939,10717, 7959, 7961, 7943, 7952, 7950,10717, 7974, 7973, - 7977, 7960, 7967, 7979, 7985, 7991, 7970, 7994, 7995, 8005, - 7996, 8004, 8009, 8013, 8000, 8025, 8026, 8028, 8017, 8031, + 7833, 7836, 7835, 7839, 7851, 7840,10823, 7860, 7848, 7854, + 7856, 7857, 7869, 7859, 7872, 7890, 7882, 7892, 7896, 7884, + 7886, 7889, 7907, 7900, 7891,10823, 7898, 7906, 7909, 7899, + 7933, 7923, 7928,10823, 7929,10823, 7926, 7932, 7941, 7944, + 7950,10823, 7949, 7939, 7958, 7917, 7962,10823,10823, 7960, + 7967, 7968, 7945, 7966,10823,10823, 7982,10823, 7965,10823, + 7970, 7985,10823,10823, 7981, 7972, 7978, 7979,10823, 7999, + 8009, 8003,10823, 8015,10823, 8021, 7997, 8018, 8006, 8007, + 8027,10823, 8016, 8034, 8026, 8028, 8020,10823, 8023, 8042, + 8046, 8062, 8045, 8043,10823, 8060, 8065, 8069, 8055, 8056, - 8012, 8040, 8037, 8046, 8048, 8042, 8039, 8050, 8041, 8057, - 8055, 8063, 8060, 8070, 8080, 8072, 8085, 8081, 8084, 8082, - 8075, 8087, 8076, 8097, 8100, 8104, 8101, 8089, 8105, 8116, - 8106, 8112, 8114, 8132, 8123, 8137, 8139, 8131, 8140,10717, - 8127, 8147, 8153, 8157, 8154, 8165, 8166, 8151, 8177, 8178, - 10717, 8182,10717, 8184, 8172, 8175, 8181, 8174,10717, 8187, - 8197, 8196, 8199, 8211, 8201, 8223, 8202, 8212, 8213, 8232, - 10717, 8237, 8235, 8229, 8239, 8227, 8244,10717, 8242, 8253, - 8247, 8249, 8254, 8248, 8258, 8259, 8266, 8263, 8264, 8285, - 8280, 8295, 8296, 8278, 8290, 8291,10717, 8301, 8302, 8314, + 8059,10823, 8079, 8081, 8083, 8066, 8082, 8086, 8089, 8095, + 8098, 8100, 8093, 8118, 8108, 8109, 8125, 8117, 8104, 8133, + 8134, 8137, 8126, 8140, 8131, 8143, 8146, 8150, 8153, 8156, + 8139, 8160, 8162, 8158, 8174, 8171, 8165, 8188, 8191, 8183, + 8193, 8185, 8189, 8192, 8180, 8198, 8202, 8206, 8205, 8219, + 8208, 8187, 8214, 8223, 8215, 8224, 8221, 8235, 8232, 8246, + 8245, 8241, 8242,10823, 8240, 8253, 8252, 8255, 8273, 8263, + 8281, 8282, 8288, 8289, 8290,10823,10823, 8292,10823, 8294, + 8279, 8285, 8280, 8283,10823, 8307, 8310, 8308, 8309, 8322, + 8312, 8336, 8313, 8323, 8324, 8343,10823, 8348, 8345, 8339, - 8303, 8309, 8304, 8307, 8306, 8310, 8313, 8312, 8318, 8323, - 8333, 8340, 8329, 8347, 8353, 8357, 8356, 8361,10717, 8345, - 10717, 8354, 8350, 8374, 8346, 8370, 8367, 8384, 8372, 8376, - 10717,10717, 8378, 8382, 8401, 8406, 8393, 8394, 8407, 8399, - 8402, 8411,10717, 8403, 8409, 8426, 8419, 8440, 8428,10717, - 8433, 8427, 8430, 8435, 8436, 8452,10717, 8446, 8455, 8457, - 8465, 8469, 8453, 8471, 8473, 8468, 8470, 8475, 8474, 8481, - 10717, 8482,10717,10717,10717, 8488, 8497, 8485, 8490, 8498, - 8505, 8509, 8501, 8514, 8517, 8519, 8500, 8516,10717, 8529, - 10717,10717, 8530,10717, 8534, 8528, 8543, 8532, 8533, 8545, + 8340, 8337, 8347,10823, 8367, 8361, 8359, 8360, 8363, 8375, + 8368, 8366, 8373, 8369, 8379, 8388, 8390, 8399, 8401, 8387, + 8395, 8410,10823, 8420, 8421, 8265, 8405, 8409, 8414, 8411, + 8417, 8428, 8435, 8419, 8422, 8425, 8440, 8448, 8441, 8458, + 8462, 8453, 8468, 8465,10823, 8452,10823, 8467, 8454, 8472, + 8481, 8477, 8485, 8488, 8486, 8483,10823,10823, 8487, 8498, + 8514, 8496, 8503, 8504, 8519, 8510, 8509, 8523,10823, 8511, + 8520, 8533, 8536, 8542, 8543,10823, 8537, 8555, 8538, 8549, + 8551, 8553, 8557,10823, 8560, 8562, 8570, 8576, 8561, 8575, + 8581, 8585, 8582, 8580, 8593, 8586, 8592,10823, 8589,10823, - 8555,10717, 8549,10717, 8546, 8560, 8553, 8571, 8574, 8572, - 8566, 8583, 8579, 8584, 8570, 8576, 8601, 8595, 8604, 8587, - 8603, 8607, 8609,10717,10717, 8606, 8617, 8615, 8625, 8621, - 8632, 8624, 8628, 8635, 8636, 8631, 8634, 8642, 8633, 8629, - 8648, 8652, 8658, 8647,10717, 8664, 8667, 8675,10717, 8661, - 10717, 8677, 8681, 8684, 8665, 8674, 8694, 8697, 8692, 8698, - 8691, 8685,10717,10717, 8705, 8701, 8709,10717,10717, 8708, - 8711, 8717, 8720, 8726, 8722, 8721,10717, 8732, 8734, 8744, - 8736, 8746, 8742, 8752, 8756,10717, 8747,10717, 8760, 8761, - 8776, 8766, 8782, 8786, 8771, 8767, 8800, 8796, 8789, 8774, + 10823,10823, 8613, 8602, 8600, 8615, 8612, 8617, 8618, 8619, + 8626, 8627, 8624, 8623, 8632,10823, 8634,10823,10823, 8651, + 10823, 8655, 8650, 8661, 8640, 8646, 8659, 8663,10823, 8654, + 10823, 8667, 8674, 8670, 8676, 8680, 8684, 8681, 8702, 8697, + 8705, 8691, 8695, 8316, 8712,10823, 8714, 8706, 8718, 8719, + 8720,10823,10823, 8722, 8725, 8727, 8743, 8729, 8746, 8739, + 8731, 8755, 8758, 8756, 8745, 8761, 8747, 8772, 8776, 8770, + 8752, 8728,10823, 8774, 8779, 8786,10823, 8782,10823, 8788, + 8795, 8799, 8780, 8792, 8801, 8803, 8813, 8808, 8819, 8824, + 10823,10823, 8815, 8839, 8830,10823,10823, 8826, 8827, 8828, - 8801,10717, 8795, 8792,10717, 8813, 8807, 8811, 8802, 8816, - 8814, 8821,10717, 8824, 8817, 8839, 8822, 8846, 8850,10717, - 8853, 8851, 8849, 8847,10717, 8858,10717, 8840, 8859, 8857, - 8870, 8863,10717, 8841, 8872, 8873, 8878,10717, 8871, 8889, - 8894, 8898, 8882, 8890,10717, 8904, 8896,10717, 8888, 8907, - 8909, 8911, 8897, 8913, 8905, 8915, 8929, 8931, 8927, 8940, - 10717,10717, 8934, 8941, 73, 8952, 8926, 8928, 8930, 8945, - 8964, 8937, 8959, 8965,10717,10717, 8961,10717, 8972, 8971, - 10717, 8956, 8979, 8968, 8967, 8992, 8986, 8983, 8973, 9002, - 8991, 9012, 9006, 8998, 9008,10717, 9026, 9027, 9009, 9034, + 8840, 8838, 8842, 8843,10823, 8852, 8855, 8857, 8853, 8869, + 8856, 8873, 8874,10823, 8872,10823, 8870, 8877, 8892, 8882, + 8899, 8908, 8883, 8888, 8916, 8912, 8905, 8896, 8917,10823, + 8909, 8911,10823, 8930, 8925, 8923, 8919, 8933, 8931, 8926, + 10823, 8955, 8943,10823, 8942, 8936, 8962, 8965,10823, 8966, + 8963, 8968, 8969,10823, 8971,10823, 8952, 8970, 8964, 8985, + 8989,10823, 8957, 8986, 8987, 9008,10823, 8981, 9010, 9011, + 9012, 9004, 9005,10823, 9019, 9002,10823, 9003, 9021, 9024, + 9022, 9026, 9027, 9030, 9037, 9042, 9031, 9040, 9057,10823, + 10823, 9064, 9058, 73, 9065, 9039, 9051, 9052, 9067, 9079, - 9036, 9039, 9044, 9047, 9050, 9022, 9041, 9032, 9030, 9049, - 9055, 9057, 9061, 9065, 9072, 9066, 9067, 9071,10717, 9090, - 9095, 9097, 9088, 9101, 9096, 9099, 9092,10717, 9105, 9109, - 9106, 9107,10717, 9111, 9126, 9131, 9120, 9132, 9133,10717, - 9127, 9121, 9125, 9146, 9147, 9130, 9144, 9136, 9159, 9166, - 10717, 9157, 9171, 9160,10717, 9173,10717,10717,10717, 9176, - 9165, 9175,10717, 9185, 9182, 9174, 9177,10717, 9190, 9194, - 9201, 9216, 9193,10717,10717,10717, 9200, 9208, 9209,10717, - 9204, 9219,10717, 9217,10717, 9212,10717, 9236, 9237, 9246, - 9221,10717, 9244, 9240, 9245, 9254,10717, 9234, 9238, 9250, + 9050, 9076, 9081,10823,10823, 9082,10823, 9078, 9090,10823, + 9070, 9098, 9103, 9094, 9091, 9092, 9106, 9102, 9115, 9113, + 9121, 9120, 9117, 9133,10823, 9150, 9157, 9137, 9135, 9145, + 9148, 9154, 9164, 9166, 9142, 9169, 9151, 9153, 9161, 9172, + 9182, 9176, 9184, 9181, 9180, 9185, 9198,10823, 9202, 9204, + 9207, 9206, 9215, 9213, 9223, 9208,10823, 9220, 9217, 9230, + 9231,10823, 9238, 9232, 9234, 9239, 9240, 9245,10823, 9242, + 9252, 9256, 9258, 9255, 9259, 9263, 9265, 9257, 9293,10823, + 9281, 9286, 9269,10823, 9282,10823,10823,10823, 9298, 9271, + 9285,10823, 9275, 9292, 9289, 9300,10823, 9310, 9311, 9308, - 9257, 9263, 9243, 9270,10717, 9284, 9273, 9282, 9288, 9274, - 9279, 9277, 9289, 9281, 9300, 9295, 9296,10717, 9303, 9308, - 9312, 9323, 9309, 9314, 9316,10717, 9318,10717, 9332,10717, - 9333, 9335, 9336, 9350, 9343, 9326, 9345, 9353, 9362, 9351, - 9363, 9365, 9359, 9369, 9358, 9374, 9382, 9378,10717,10717, - 9404, 9386,10717, 9396, 9403, 9406,10717, 9391,10717, 9407, - 10717, 9392, 9399,10717, 9411, 9401, 9420,10717,10717, 9421, - 9426, 9413, 9437, 9418, 9436, 9431,10717, 9453, 9442, 9432, - 9439, 9455,10717, 9465,10717, 9447, 9466, 9470,10717,10717, - 9449, 9459, 9462, 9472, 9464, 9468, 9490, 9476, 9491, 9481, + 9320, 9316,10823,10823,10823, 9304, 9327, 9325,10823, 9319, + 9341,10823, 9330,10823, 9337,10823, 9335, 9343, 9322, 9344, + 10823, 9346, 9347, 9349, 9378,10823, 9365, 9372, 9377, 9374, + 9361, 9367, 9384,10823, 9396, 9388, 9390, 9397, 9380, 9391, + 9400, 9407, 9401, 9405, 9404, 9414,10823, 9422, 9428, 9430, + 9436, 9423, 9425, 9432,10823, 9418,10823, 9443,10823, 9431, + 9441, 9448, 9462, 9463, 9457, 9458, 9468, 9474, 9460, 9471, + 9481, 9469, 9465, 9485, 9486, 9494, 9495,10823,10823, 9502, + 9501,10823, 9510, 9517, 9519,10823, 9499,10823, 9523,10823, + 9508, 9509,10823, 9522, 9518, 9526,10823,10823, 9530, 9512, - 9510, 9477, 9495, 9493, 9511, 9504, 9518, 9522, 9515,10717, - 10717,10717, 9512, 9506, 9534, 9530, 9529, 9540, 9523,10717, - 9539, 9547, 9549, 9536, 9563, 9552, 9560,10717, 9550, 9546, - 9553, 9559, 9565, 9556, 9568, 9576,10717, 9588, 9593, 9594, - 9595, 9587, 9599, 9598, 9606, 9607, 9608, 9609, 9597, 9592, - 9613, 9611,10717,10717, 9623, 9614,10717, 9629, 9632,10717, - 10717, 9620,10717, 9624, 9626, 9633, 9627, 9641,10717, 9655, - 9635, 9644, 9650,10717, 9638, 9665, 9667, 9670, 9668,10717, - 9660, 9685, 9666, 9662, 9679, 9691,10717,10717, 9677, 9683, - 10717, 9700, 9697, 9689, 9712, 9705, 9701, 9714, 9710,10717, + 9539, 9538, 9533, 9540, 9536,10823, 9561, 9550, 9549, 9551, + 9570,10823, 9576,10823, 9552, 9578, 9575,10823,10823, 9559, + 9558, 9574, 9587, 9577, 9573, 9590, 9583, 9589, 9586, 9617, + 9596, 9610, 9604, 9618, 9611, 9625, 9627, 9631,10823,10823, + 10823, 9623, 9614, 9644, 9629, 9637, 9648, 9642,10823, 9641, + 9647, 9658, 9651, 9653, 9659, 9665,10823, 9654, 9661, 9657, + 9678, 9672, 9675, 9673, 9674,10823, 9695, 9696, 9698, 9702, + 9697, 9703, 9712, 9713, 9714, 9706, 9717, 9718, 9693, 9732, + 9721,10823,10823, 9728, 9720,10823, 9737, 9743,10823,10823, + 9730,10823, 9729, 9738, 9735, 9739, 9766,10823, 9750, 9742, - 9716, 9721, 9711, 9713, 9729, 9723, 9739,10717, 9738, 9730, - 9732, 9743,10717, 9737, 9751, 9757, 9750, 9764,10717, 9776, - 9760, 9724, 9778,10717, 9765, 9786, 9782,10717,10717,10717, - 9788, 9793, 9796,10717,10717,10717, 9784,10717, 9797, 9801, - 9798, 9804,10717, 9803,10717,10717, 9814, 9836, 9838, 9819, - 9840, 9825,10717, 9816, 9823, 9842, 9831, 9833,10717,10717, - 9851, 9852, 9834, 9835, 9859, 9857, 9848, 9850,10717,10717, - 9846, 9861, 9879, 9863, 9874,10717, 9867, 9882, 9892, 9891, - 9895, 9902, 9903, 9890, 9899, 9912, 9913, 9727, 9908, 9910, - 9907, 9915, 9931, 9919, 9941, 9916, 9939, 9944, 9949, 9935, + 9752, 9758,10823, 9753, 9765, 9775, 9782, 9779,10823, 9778, + 9757, 9770, 9784, 9781, 9799,10823,10823, 9791, 9789,10823, + 9807, 9809, 9801, 9824, 9808, 9813, 9822, 9827,10823, 9825, + 9828, 9817, 9818, 9841, 9831, 9844,10823, 9845, 9842, 9847, + 9855,10823, 9839, 9860, 9868, 9862, 9873,10823, 9874, 9870, + 9896, 9887,10823, 9884, 9895, 9880,10823,10823,10823, 9881, + 9899, 9905,10823,10823,10823, 9900,10823, 9916, 9913, 9902, + 9924,10823, 9919,10823,10823, 9928, 9939, 9951, 9930, 9954, + 9929,10823, 9936, 9935, 9947, 9940, 9945,10823,10823, 9964, + 9968, 9950, 9953, 9960, 9975, 9961, 9956,10823,10823, 9957, - 9948,10717,10717, 9954, 9942,10717, 9957, 9952,10717, 9946, - 10717, 9959, 9967, 9970, 9974,10717, 9978, 9982, 9985, 9987, - 9963,10717, 9983, 9993,10717, 9995, 9990, 9984, 9980,10717, - 9988, 9998, 9994,10002, 9991,10011,10016,10007,10004,10717, - 10017,10036,10717,10717,10019,10038,10021,10044,10031,10717, - 10039,10055,10040,10048,10033,10043,10046,10717,10050,10069, - 10717,10717,10080,10070,10717,10086,10717,10064,10072,10717, - 10717,10717,10717,10717,10717,10717,10717,10088,10091,10717, - 10717,10082,10098,10100,10101,10717,10102,10717,10081,10097, - 10099,10096,10717,10118,10717,10111,10124,10131,10137,10125, + 9983, 9985, 9984, 9986,10823, 9980, 9994,10004, 9996,10007, + 10014,10015,10003,10017,10024,10029,10032,10012,10023,10019, + 10042,10043,10034,10052,10059,10049,10057,10058,10051,10063, + 10823,10823,10062,10067,10823,10071,10064,10823,10065,10823, + 10072,10077,10087,10088,10823,10096,10097,10101,10102,10079, + 10823,10094,10107,10823,10109,10104,10099,10092,10823,10110, + 10116,10108,10117,10118,10128,10130,10119,10122,10823,10135, + 10148,10823,10823,10138,10155,10137,10152,10143,10823,10164, + 10171,10145,10146,10157,10169,10165,10823,10168,10180,10823, + 10823,10193,10184,10823,10201,10823,10178,10186,10823,10823, - 10141,10133,10128,10126,10138,10123,10155,10163,10164,10151, - 10158,10165,10175,10167,10110,10168,10182,10717,10717,10717, - 10717,10184,10169,10157,10191,10193,10204,10201,10208,10202, - 10190,10209,10214,10217,10199,10215,10228,10220,10226,10235, - 10233,10223,10245,10252,10254,10717,10256,10244,10239,10263, - 10717,10249,10717,10250,10717,10717,10269,10272,10266,10261, - 10283,10287,10270,10262,10279,10289,10292,10717,10303,10717, - 10717,10717,10717,10288,10285,10717,10290,10314,10717,10293, - 10317,10307,10310,10311,10308,10328,10334,10329,10717,10717, - 10332,10330,10343,10342,10341,10363,10364,10366,10367,10369, + 10823,10823,10823,10823,10823,10823,10195,10207,10823,10823, + 10196,10212,10215,10217,10823,10218,10823,10198,10223,10226, + 10220,10823,10224,10823,10229,10208,10236,10247,10228,10253, + 10245,10242,10244,10248,10257,10251,10268,10271,10281,10269, + 10275,10289,10273,10297,10279,10296,10823,10823,10823,10823, + 10291,10295,10303,10298,10311,10319,10312,10327,10310,10313, + 10328,10330,10336,10318,10334,10353,10337,10332,10345,10352, + 10346,10365,10367,10369,10823,10374,10360,10362,10382,10823, + 10368,10823,10370,10823,10823,10384,10385,10390,10372,10358, + 10395,10389,10387,10401,10399,10405,10823,10406,10823,10823, - 10357,10368,10717,10377,10373,10380,10717,10379,10389,10375, - 10392,10393,10386,10395,10402,10717,10396,10717,10417,10409, - 10420,10407,10413,10424,10427,10438,10433,10717,10404,10448, - 10431,10455,10460,10457,10459,10444,10467,10464,10470,10468, - 10471,10473,10482,10476,10483,10717,10479,10485,10717,10487, - 10506,10494,10496,10516,10717,10518,10503,10505,10519,10525, - 10527,10717,10526,10535,10529,10717,10532,10717,10717,10543, - 10531,10538,10539,10541,10717,10717,10717,10597,10604,10611, - 10618,10625,10632,10639, 100,10646,10653,10660,10667,10674, - 10681,10688,10695,10702,10709 + 10823,10823,10402,10414,10823,10410,10415,10823,10416,10430, + 10421,10425,10426,10437,10444,10450,10445,10823,10823,10448, + 10442,10451,10454,10453,10464,10472,10469,10479,10481,10471, + 10493,10823,10489,10487,10494,10823,10498,10485,10496,10488, + 10491,10514,10505,10509,10823,10525,10823,10527,10530,10523, + 10516,10519,10520,10543,10540,10546,10823,10537,10547,10549, + 10555,10557,10572,10554,10560,10578,10575,10587,10591,10585, + 10586,10581,10596,10584,10823,10594,10590,10823,10605,10617, + 10606,10607,10614,10823,10597,10612,10616,10628,10638,10633, + 10823,10645,10646,10641,10823,10642,10823,10823,10649,10632, + 10644,10650,10657,10823,10823,10823,10703,10710,10717,10724, + 10731,10738,10745, 100,10752,10759,10766,10773,10780,10787, + 10794,10801,10808,10815 } ; -static const flex_int16_t yy_def[3796] = +static const flex_int16_t yy_def[3825] = { 0, - 3777, 1, 3778, 3778, 3779, 3779, 3780, 3780, 3781, 3781, - 3782, 3782, 3783, 3783, 3784, 3784, 3777, 3785, 3777, 3777, - 3777, 3777, 3786, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3787, 3777, 3777, 3777, - 3787, 3788, 3777, 3777, 3777, 3788, 3789, 3777, 3777, 3777, - 3777, 3789, 3790, 3777, 3777, 3777, 3790, 3791, 3777, 3792, - 3777, 3791, 3791, 3793, 3777, 3777, 3777, 3777, 3793, 3794, - 3777, 3777, 3777, 3794, 3785, 3785, 3777, 3795, 3786, 3795, - 3786, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, + 3806, 1, 3807, 3807, 3808, 3808, 3809, 3809, 3810, 3810, + 3811, 3811, 3812, 3812, 3813, 3813, 3806, 3814, 3806, 3806, + 3806, 3806, 3815, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3816, 3806, 3806, 3806, + 3816, 3817, 3806, 3806, 3806, 3817, 3818, 3806, 3806, 3806, + 3806, 3818, 3819, 3806, 3806, 3806, 3819, 3820, 3806, 3821, + 3806, 3820, 3820, 3822, 3806, 3806, 3806, 3806, 3822, 3823, + 3806, 3806, 3806, 3823, 3814, 3814, 3806, 3824, 3815, 3824, + 3815, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3787, 3787, 3788, 3788, 3789, 3789, 3777, 3790, 3790, 3791, - 3791, 3792, 3792, 3791, 3793, 3793, 3777, 3794, 3794, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3816, 3816, 3817, 3817, 3818, 3818, 3806, 3819, 3819, 3820, + 3820, 3821, 3821, 3820, 3822, 3822, 3806, 3823, 3823, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3791, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3820, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3777, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3777, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3777, 3785, 3785, 3785, 3785, 3785, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3806, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3806, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3806, 3814, 3814, 3814, 3814, 3814, - 3785, 3785, 3791, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3777, 3785, - 3785, 3777, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, + 3814, 3814, 3820, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3806, 3814, + 3814, 3806, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, - 3777, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3777, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3777, 3785, 3785, - 3791, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, + 3806, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3806, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3806, 3814, 3814, + 3820, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3777, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3806, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3791, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3777, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3777, 3785, 3777, 3777, 3785, 3785, 3777, 3777, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3820, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3806, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3806, 3814, 3806, 3806, 3814, 3814, 3806, 3806, - 3785, 3785, 3777, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3777, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3777, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, + 3814, 3814, 3806, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3806, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3806, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3777, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3791, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3777, - 3785, 3785, 3777, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3806, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3820, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3806, 3814, 3814, 3814, 3806, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3777, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3777, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3777, 3785, 3777, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3777, 3777, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3777, 3785, 3785, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3806, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3806, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3806, 3814, 3806, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3806, 3806, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3806, - 3777, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3777, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3777, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3777, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3777, 3785, 3785, 3785, 3785, 3785, - 3791, 3791, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, + 3814, 3814, 3806, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3806, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3806, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3806, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3806, 3814, 3814, + 3814, 3814, 3814, 3820, 3820, 3814, 3814, 3814, 3814, 3814, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3777, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3777, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3777, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3777, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3777, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3806, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3806, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3806, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3806, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3806, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3777, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3777, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3777, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3777, 3785, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3806, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3806, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3806, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3777, - 3785, 3785, 3785, 3791, 3785, 3785, 3785, 3785, 3785, 3785, - 3777, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3777, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3777, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3777, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, + 3814, 3814, 3814, 3814, 3806, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3806, 3814, 3814, 3814, 3820, + 3814, 3814, 3814, 3814, 3814, 3814, 3806, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3806, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3806, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3806, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3777, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3777, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3777, 3785, 3777, - 3785, 3785, 3785, 3785, 3785, 3785, 3777, 3785, 3777, 3785, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3806, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3806, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3806, 3814, 3806, 3814, - 3785, 3785, 3785, 3785, 3777, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3777, 3785, - 3785, 3785, 3785, 3791, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3777, 3785, 3785, 3785, 3785, 3777, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3777, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, + 3814, 3814, 3814, 3814, 3814, 3806, 3814, 3806, 3814, 3814, + 3814, 3814, 3814, 3806, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3806, 3814, 3814, + 3814, 3814, 3820, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3806, 3814, 3814, 3814, 3814, 3814, + 3806, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3806, 3814, 3814, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3777, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3777, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3777, 3785, 3777, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3777, 3777, 3785, 3785, 3785, 3785, 3785, 3785, 3785, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3806, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3806, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3806, 3814, 3806, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3777, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3777, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3777, - 3785, 3777, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3777, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3777, 3785, - 3785, 3785, 3791, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3777, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3777, 3785, 3785, 3785, 3785, + 3814, 3814, 3806, 3806, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3806, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3806, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3806, 3814, 3806, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3806, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3806, 3814, 3814, 3814, 3820, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3806, 3814, 3814, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3777, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3777, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3777, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3777, - 3777, 3785, 3785, 3785, 3777, 3785, 3785, 3785, 3785, 3785, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3806, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3806, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3806, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3806, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3777, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3777, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3777, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3777, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3777, 3785, 3785, 3785, 3785, 3785, 3777, - 3785, 3785, 3785, 3777, 3785, 3785, 3785, 3785, 3785, 3777, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, + 3814, 3814, 3814, 3806, 3806, 3814, 3814, 3814, 3806, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3806, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3806, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3806, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3806, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3806, 3814, + 3814, 3814, 3814, 3814, 3806, 3814, 3814, 3814, 3806, 3814, - 3785, 3791, 3785, 3777, 3785, 3785, 3785, 3777, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3777, - 3785, 3785, 3777, 3785, 3785, 3785, 3777, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3777, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3777, - 3777, 3785, 3777, 3785, 3785, 3785, 3785, 3777, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3777, 3785, - 3785, 3777, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, + 3814, 3814, 3814, 3814, 3806, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3820, 3814, 3806, 3814, + 3814, 3814, 3806, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3806, 3814, 3814, 3806, 3814, + 3814, 3814, 3814, 3806, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3806, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3806, 3806, 3814, 3806, + 3814, 3814, 3814, 3814, 3806, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3806, 3814, 3814, 3806, 3814, - 3785, 3785, 3777, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3777, 3785, 3785, 3785, 3785, 3785, 3777, 3785, - 3777, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3777, - 3785, 3785, 3785, 3785, 3785, 3785, 3777, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3777, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3777, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3777, 3785, - 3785, 3785, 3785, 3777, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3777, 3785, 3785, 3785, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3806, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3806, + 3814, 3814, 3814, 3814, 3814, 3806, 3814, 3806, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3806, 3814, 3814, 3814, + 3814, 3814, 3814, 3806, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3806, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3806, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3806, 3814, 3814, 3814, - 3785, 3785, 3785, 3785, 3777, 3777, 3785, 3777, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3777, 3785, 3785, 3791, 3785, 3785, 3785, 3785, - 3777, 3785, 3785, 3777, 3777, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3777, 3785, 3785, 3785, 3785, 3785, 3785, 3777, - 3785, 3785, 3785, 3785, 3777, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3777, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3777, 3785, 3777, 3785, 3785, 3785, 3785, 3785, 3785, + 3814, 3806, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3806, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3806, 3806, 3814, 3806, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3806, 3814, 3814, 3820, 3814, 3814, 3814, 3814, 3806, 3814, + 3814, 3806, 3806, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3806, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3806, + 3814, 3814, 3814, 3814, 3806, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3806, 3814, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3777, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3777, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3777, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3777, - 3785, 3785, 3785, 3785, 3777, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3777, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3777, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3806, 3814, 3806, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3806, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3806, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3806, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3806, + 3814, 3814, 3814, 3814, 3806, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3806, 3814, 3814, 3814, - 3777, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3777, 3785, 3777, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3791, 3785, 3777, 3785, 3785, 3785, - 3785, 3785, 3777, 3785, 3785, 3785, 3785, 3777, 3785, 3785, - 3785, 3785, 3785, 3785, 3777, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3777, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3777, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3806, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3806, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3806, 3814, 3806, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3820, 3814, 3806, 3814, 3814, + 3814, 3814, 3814, 3814, 3806, 3814, 3814, 3814, 3814, 3806, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3806, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3806, 3814, 3814, 3814, 3814, 3814, - 3785, 3785, 3777, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3777, 3785, 3777, 3785, 3785, 3785, 3785, 3785, 3777, 3785, - 3785, 3785, 3785, 3785, 3777, 3777, 3785, 3785, 3785, 3785, - 3785, 3777, 3777, 3785, 3777, 3785, 3777, 3785, 3785, 3777, - 3777, 3785, 3785, 3785, 3785, 3777, 3785, 3785, 3785, 3777, - 3785, 3777, 3785, 3785, 3785, 3785, 3785, 3785, 3777, 3785, - 3785, 3785, 3785, 3785, 3777, 3785, 3785, 3785, 3785, 3785, - 3785, 3777, 3785, 3785, 3785, 3785, 3785, 3777, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, + 3814, 3814, 3814, 3814, 3814, 3814, 3806, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3806, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3806, 3814, 3806, 3814, 3814, 3814, 3814, + 3814, 3806, 3814, 3814, 3814, 3814, 3814, 3806, 3806, 3814, + 3814, 3814, 3814, 3814, 3806, 3806, 3814, 3806, 3814, 3806, + 3814, 3814, 3806, 3806, 3814, 3814, 3814, 3814, 3806, 3814, + 3814, 3814, 3806, 3814, 3806, 3814, 3814, 3814, 3814, 3814, + 3814, 3806, 3814, 3814, 3814, 3814, 3814, 3806, 3814, 3814, + 3814, 3814, 3814, 3814, 3806, 3814, 3814, 3814, 3814, 3814, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3791, 3785, 3785, 3785, 3785, 3777, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3777, 3785, 3777, 3785, 3785, 3785, 3785, 3785, 3777, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3777, 3785, 3785, 3785, 3785, 3785, 3785, 3777, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3777, 3785, 3785, 3785, + 3814, 3806, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3820, 3814, + 3814, 3814, 3814, 3806, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3806, 3806, 3814, 3806, 3814, + 3814, 3814, 3814, 3814, 3806, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3806, 3814, 3814, 3814, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3777, 3785, - 3777, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3777, 3777, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3777, 3785, 3785, 3785, 3785, 3785, 3785, 3777, - 3785, 3785, 3785, 3785, 3785, 3785, 3777, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3777, 3785, 3777, 3777, 3777, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3777, 3785, - 3777, 3777, 3785, 3777, 3785, 3785, 3785, 3785, 3785, 3785, + 3814, 3814, 3814, 3806, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3806, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3806, 3814, 3806, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3806, 3806, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3806, 3814, + 3814, 3814, 3814, 3814, 3814, 3806, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3806, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3806, 3814, 3806, - 3785, 3777, 3785, 3777, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3791, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3777, 3777, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3777, 3785, 3785, 3785, 3777, 3785, - 3777, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3777, 3777, 3785, 3785, 3785, 3777, 3777, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3777, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3777, 3785, 3777, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, + 3806, 3806, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3806, 3814, 3806, 3806, 3814, + 3806, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3806, 3814, + 3806, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3820, 3814, + 3814, 3814, 3814, 3814, 3814, 3806, 3814, 3814, 3814, 3814, + 3814, 3806, 3806, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3806, 3814, 3814, 3814, 3806, 3814, 3806, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3806, 3806, 3814, 3814, 3814, 3806, 3806, 3814, 3814, 3814, - 3785, 3777, 3785, 3785, 3777, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3777, 3785, 3785, 3785, 3785, 3785, 3785, 3777, - 3785, 3785, 3785, 3785, 3777, 3785, 3777, 3785, 3785, 3785, - 3785, 3785, 3777, 3785, 3785, 3785, 3785, 3777, 3785, 3785, - 3785, 3785, 3785, 3785, 3777, 3785, 3785, 3777, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3777, 3777, 3785, 3785, 3791, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3777, 3777, 3785, 3777, 3785, 3785, - 3777, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3777, 3785, 3785, 3785, 3785, + 3814, 3814, 3814, 3814, 3806, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3806, 3814, 3806, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3806, + 3814, 3814, 3806, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3806, 3814, 3814, 3806, 3814, 3814, 3814, 3814, 3806, 3814, + 3814, 3814, 3814, 3806, 3814, 3806, 3814, 3814, 3814, 3814, + 3814, 3806, 3814, 3814, 3814, 3814, 3806, 3814, 3814, 3814, + 3814, 3814, 3814, 3806, 3814, 3814, 3806, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3806, + 3806, 3814, 3814, 3820, 3814, 3814, 3814, 3814, 3814, 3814, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3777, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3777, 3785, 3785, - 3785, 3785, 3777, 3785, 3785, 3785, 3785, 3785, 3785, 3777, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3777, 3785, 3785, 3785, 3777, 3785, 3777, 3777, 3777, 3785, - 3785, 3785, 3777, 3785, 3785, 3785, 3785, 3777, 3785, 3785, - 3785, 3785, 3785, 3777, 3777, 3777, 3785, 3785, 3785, 3777, - 3785, 3785, 3777, 3785, 3777, 3785, 3777, 3785, 3785, 3785, - 3785, 3777, 3785, 3785, 3785, 3785, 3777, 3785, 3785, 3785, + 3814, 3814, 3814, 3806, 3806, 3814, 3806, 3814, 3814, 3806, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3806, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3806, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3806, 3814, 3814, 3814, + 3814, 3806, 3814, 3814, 3814, 3814, 3814, 3814, 3806, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3806, + 3814, 3814, 3814, 3806, 3814, 3806, 3806, 3806, 3814, 3814, + 3814, 3806, 3814, 3814, 3814, 3814, 3806, 3814, 3814, 3814, - 3785, 3785, 3785, 3785, 3777, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3777, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3777, 3785, 3777, 3785, 3777, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3777, 3777, - 3785, 3785, 3777, 3785, 3785, 3785, 3777, 3785, 3777, 3785, - 3777, 3785, 3785, 3777, 3785, 3785, 3785, 3777, 3777, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3777, 3785, 3785, 3785, - 3785, 3785, 3777, 3785, 3777, 3785, 3785, 3785, 3777, 3777, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, + 3814, 3814, 3806, 3806, 3806, 3814, 3814, 3814, 3806, 3814, + 3814, 3806, 3814, 3806, 3814, 3806, 3814, 3814, 3814, 3814, + 3806, 3814, 3814, 3814, 3814, 3806, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3806, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3806, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3806, 3814, 3806, 3814, 3806, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3806, 3806, 3814, + 3814, 3806, 3814, 3814, 3814, 3806, 3814, 3806, 3814, 3806, + 3814, 3814, 3806, 3814, 3814, 3814, 3806, 3806, 3814, 3814, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3777, - 3777, 3777, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3777, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3777, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3777, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3777, 3777, 3785, 3785, 3777, 3785, 3785, 3777, - 3777, 3785, 3777, 3785, 3785, 3785, 3785, 3785, 3777, 3785, - 3785, 3785, 3785, 3777, 3785, 3785, 3785, 3785, 3785, 3777, - 3785, 3785, 3785, 3785, 3785, 3785, 3777, 3777, 3785, 3785, - 3777, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3777, + 3814, 3814, 3814, 3814, 3814, 3806, 3814, 3814, 3814, 3814, + 3814, 3806, 3814, 3806, 3814, 3814, 3814, 3806, 3806, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3806, 3806, + 3806, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3806, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3806, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3806, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3806, 3806, 3814, 3814, 3806, 3814, 3814, 3806, 3806, + 3814, 3806, 3814, 3814, 3814, 3814, 3814, 3806, 3814, 3814, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3777, 3785, 3785, - 3785, 3785, 3777, 3785, 3785, 3785, 3785, 3785, 3777, 3785, - 3785, 3785, 3785, 3777, 3785, 3785, 3785, 3777, 3777, 3777, - 3785, 3785, 3785, 3777, 3777, 3777, 3785, 3777, 3785, 3785, - 3785, 3785, 3777, 3785, 3777, 3777, 3785, 3785, 3785, 3785, - 3785, 3785, 3777, 3785, 3785, 3785, 3785, 3785, 3777, 3777, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3777, 3777, - 3785, 3785, 3785, 3785, 3785, 3777, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, + 3814, 3814, 3806, 3814, 3814, 3814, 3814, 3814, 3806, 3814, + 3814, 3814, 3814, 3814, 3814, 3806, 3806, 3814, 3814, 3806, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3806, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3806, 3814, 3814, 3814, + 3814, 3806, 3814, 3814, 3814, 3814, 3814, 3806, 3814, 3814, + 3814, 3814, 3806, 3814, 3814, 3814, 3806, 3806, 3806, 3814, + 3814, 3814, 3806, 3806, 3806, 3814, 3806, 3814, 3814, 3814, + 3814, 3806, 3814, 3806, 3806, 3814, 3814, 3814, 3814, 3814, + 3814, 3806, 3814, 3814, 3814, 3814, 3814, 3806, 3806, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3806, 3806, 3814, - 3785, 3777, 3777, 3785, 3785, 3777, 3785, 3785, 3777, 3785, - 3777, 3785, 3785, 3785, 3785, 3777, 3785, 3785, 3785, 3785, - 3785, 3777, 3785, 3785, 3777, 3785, 3785, 3785, 3785, 3777, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3777, - 3785, 3785, 3777, 3777, 3785, 3785, 3785, 3785, 3785, 3777, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3777, 3785, 3785, - 3777, 3777, 3785, 3785, 3777, 3785, 3777, 3785, 3785, 3777, - 3777, 3777, 3777, 3777, 3777, 3777, 3777, 3785, 3785, 3777, - 3777, 3785, 3785, 3785, 3785, 3777, 3785, 3777, 3785, 3785, - 3785, 3785, 3777, 3785, 3777, 3785, 3785, 3785, 3785, 3785, + 3814, 3814, 3814, 3814, 3806, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3806, 3806, 3814, 3814, 3806, 3814, 3814, 3806, 3814, 3806, + 3814, 3814, 3814, 3814, 3806, 3814, 3814, 3814, 3814, 3814, + 3806, 3814, 3814, 3806, 3814, 3814, 3814, 3814, 3806, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3806, 3814, + 3814, 3806, 3806, 3814, 3814, 3814, 3814, 3814, 3806, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3806, 3814, 3814, 3806, + 3806, 3814, 3814, 3806, 3814, 3806, 3814, 3814, 3806, 3806, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3777, 3777, 3777, - 3777, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3777, 3785, 3785, 3785, 3785, - 3777, 3785, 3777, 3785, 3777, 3777, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3777, 3785, 3777, - 3777, 3777, 3777, 3785, 3785, 3777, 3785, 3785, 3777, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3777, 3777, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, + 3806, 3806, 3806, 3806, 3806, 3806, 3814, 3814, 3806, 3806, + 3814, 3814, 3814, 3814, 3806, 3814, 3806, 3814, 3814, 3814, + 3814, 3806, 3814, 3806, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3806, 3806, 3806, 3806, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3806, 3814, 3814, 3814, 3814, 3806, + 3814, 3806, 3814, 3806, 3806, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3806, 3814, 3806, 3806, - 3785, 3785, 3777, 3785, 3785, 3785, 3777, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3777, 3785, 3777, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3777, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, - 3785, 3785, 3785, 3785, 3785, 3777, 3785, 3785, 3777, 3785, - 3785, 3785, 3785, 3785, 3777, 3785, 3785, 3785, 3785, 3785, - 3785, 3777, 3785, 3785, 3785, 3777, 3785, 3777, 3777, 3785, - 3785, 3785, 3785, 3785, 3777, 3777, 0, 3777, 3777, 3777, - 3777, 3777, 3777, 3777, 3777, 3777, 3777, 3777, 3777, 3777, - 3777, 3777, 3777, 3777, 3777 + 3806, 3806, 3814, 3814, 3806, 3814, 3814, 3806, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3806, 3806, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3806, 3814, 3814, 3814, 3806, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3806, 3814, 3806, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3806, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, 3814, + 3814, 3814, 3814, 3814, 3806, 3814, 3814, 3806, 3814, 3814, + 3814, 3814, 3814, 3806, 3814, 3814, 3814, 3814, 3814, 3814, + 3806, 3814, 3814, 3814, 3806, 3814, 3806, 3806, 3814, 3814, + 3814, 3814, 3814, 3806, 3806, 0, 3806, 3806, 3806, 3806, + 3806, 3806, 3806, 3806, 3806, 3806, 3806, 3806, 3806, 3806, + 3806, 3806, 3806, 3806 } ; -static const flex_int16_t yy_nxt[10784] = +static const flex_int16_t yy_nxt[10890] = { 0, 18, 19, 20, 21, 22, 23, 22, 18, 18, 18, 18, 18, 22, 24, 25, 26, 27, 28, 29, 18, @@ -1723,7 +1733,7 @@ static const flex_int16_t yy_nxt[10784] = 192, 86, 86, 209, 86, 86, 86, 86, 193, 203, 144, 205, 86, 145, 194, 214, 195, 211, 204, 201, 146, 213, 196, 197, 147, 148, 206, 207, 210, 230, - 209, 86, 212, 219, 208, 1245, 203, 86, 169, 86, + 209, 86, 212, 219, 208, 1250, 203, 86, 169, 86, 86, 167, 86, 86, 211, 204, 215, 222, 213, 216, 221, 229, 86, 206, 207, 210, 230, 220, 86, 212, @@ -1732,119 +1742,119 @@ static const flex_int16_t yy_nxt[10784] = 228, 238, 235, 86, 220, 164, 233, 236, 226, 217, 218, 86, 86, 86, 223, 224, 237, 240, 234, 225, 86, 86, 227, 86, 86, 162, 232, 228, 238, 235, - 239, 1404, 241, 233, 236, 226, 86, 251, 242, 86, + 239, 1410, 241, 233, 236, 226, 86, 251, 242, 86, 86, 86, 243, 237, 240, 245, 247, 248, 244, 86, 252, 86, 86, 86, 257, 253, 249, 239, 258, 241, 86, 86, 250, 86, 251, 242, 259, 269, 86, 243, 86, 260, 245, 247, 248, 244, 254, 252, 86, 261, - 267, 257, 253, 249, 264, 3777, 86, 255, 86, 250, + 267, 257, 253, 249, 264, 3806, 86, 255, 86, 250, 86, 256, 270, 259, 269, 265, 262, 273, 260, 263, 86, 271, 268, 254, 86, 86, 261, 267, 86, 274, - 275, 264, 86, 272, 255, 3777, 277, 86, 256, 270, - 278, 276, 265, 262, 273, 86, 263, 3777, 271, 268, - 86, 86, 3777, 86, 3777, 279, 274, 275, 86, 165, + 275, 264, 86, 272, 255, 3806, 277, 86, 256, 270, + 278, 276, 265, 262, 273, 86, 263, 3806, 271, 268, + 86, 86, 3806, 86, 3806, 279, 274, 275, 86, 165, 272, 165, 165, 277, 165, 178, 178, 278, 276, 170, 280, 170, 170, 90, 170, 90, 90, 281, 90, 171, - 283, 175, 279, 175, 175, 3777, 175, 284, 288, 86, + 283, 175, 279, 175, 175, 3806, 175, 284, 288, 86, 285, 282, 86, 286, 86, 290, 291, 280, 293, 86, - 287, 3777, 289, 86, 86, 86, 292, 283, 86, 86, + 287, 3806, 289, 86, 86, 86, 292, 283, 86, 86, 294, 173, 86, 295, 284, 288, 299, 285, 282, 300, 286, 86, 290, 291, 296, 293, 86, 287, 86, 289, 297, 86, 298, 292, 86, 310, 311, 294, 86, 323, 295, 314, 312, 299, 302, 86, 300, 313, 303, 86, 86, 86, 317, 318, 315, 316, 86, 297, 319, 298, - 86, 86, 310, 311, 321, 304, 323, 86, 314, 3777, - 324, 3777, 86, 322, 86, 303, 86, 86, 3777, 317, - 318, 315, 316, 86, 325, 328, 320, 86, 3777, 349, + 86, 86, 310, 311, 321, 304, 323, 86, 314, 3806, + 324, 3806, 86, 322, 86, 303, 86, 86, 3806, 317, + 318, 315, 316, 86, 325, 328, 320, 86, 3806, 349, 86, 321, 304, 305, 86, 86, 86, 324, 306, 326, - 322, 329, 327, 307, 3777, 330, 3777, 338, 337, 308, + 322, 329, 327, 307, 3806, 330, 3806, 338, 337, 308, 309, 325, 328, 320, 86, 86, 86, 336, 86, 340, 305, 86, 341, 86, 344, 306, 326, 86, 329, 327, 307, 86, 330, 342, 338, 337, 308, 309, 331, 86, - 350, 332, 346, 333, 336, 86, 340, 3777, 352, 353, - 3777, 344, 348, 354, 86, 334, 347, 335, 86, 357, - 342, 355, 86, 358, 86, 331, 356, 350, 332, 3777, - 333, 359, 86, 3777, 86, 361, 353, 86, 364, 348, + 350, 332, 346, 333, 336, 86, 340, 3806, 352, 353, + 3806, 344, 348, 354, 86, 334, 347, 335, 86, 357, + 342, 355, 86, 358, 86, 331, 356, 350, 332, 3806, + 333, 359, 86, 3806, 86, 361, 353, 86, 364, 348, 86, 86, 334, 347, 335, 86, 86, 360, 355, 365, 358, 86, 86, 356, 86, 362, 86, 366, 359, 367, 368, 369, 361, 371, 363, 364, 370, 372, 86, 86, 86, 86, 373, 86, 360, 374, 365, 86, 86, 378, 375, 86, 362, 376, 366, 382, 367, 368, 369, 86, - 371, 363, 381, 370, 383, 377, 384, 86, 3777, 86, + 371, 363, 381, 370, 383, 377, 384, 86, 3806, 86, 86, 86, 374, 379, 380, 386, 86, 375, 86, 385, 376, 86, 86, 86, 388, 387, 389, 86, 86, 381, - 390, 383, 377, 384, 391, 392, 393, 395, 86, 3777, + 390, 383, 377, 384, 391, 392, 393, 395, 86, 3806, 379, 380, 386, 394, 86, 86, 385, 398, 396, 86, - 86, 399, 387, 3777, 3777, 401, 86, 390, 86, 86, + 86, 399, 387, 3806, 3806, 401, 86, 390, 86, 86, 403, 402, 392, 393, 86, 404, 86, 405, 400, 86, - 394, 397, 3777, 86, 406, 171, 86, 407, 399, 86, + 394, 397, 3806, 86, 406, 171, 86, 407, 399, 86, 86, 86, 401, 86, 409, 408, 86, 403, 402, 86, 410, 411, 404, 412, 405, 400, 414, 413, 397, 86, 416, 406, 415, 418, 407, 419, 86, 417, 421, 422, 86, 409, 408, 86, 86, 86, 86, 420, 86, 86, 412, 86, 86, 86, 413, 423, 424, 416, 86, 415, - 418, 425, 419, 427, 417, 421, 86, 428, 3777, 429, - 437, 86, 86, 430, 420, 431, 434, 3777, 86, 86, - 433, 86, 423, 424, 86, 438, 3777, 86, 425, 432, + 418, 425, 419, 427, 417, 421, 86, 428, 3806, 429, + 437, 86, 86, 430, 420, 431, 434, 3806, 86, 86, + 433, 86, 423, 424, 86, 438, 3806, 86, 425, 432, 427, 435, 436, 86, 428, 86, 429, 437, 439, 86, 430, 86, 431, 434, 86, 440, 441, 433, 442, 86, 86, 86, 443, 447, 448, 445, 432, 86, 435, 436, - 450, 446, 452, 451, 3777, 439, 454, 86, 86, 444, + 450, 446, 452, 451, 3806, 439, 454, 86, 86, 444, 453, 86, 86, 441, 455, 86, 457, 86, 449, 443, 86, 86, 445, 86, 86, 86, 86, 450, 446, 452, 451, 456, 86, 454, 458, 459, 444, 453, 86, 86, 86, 455, 86, 457, 86, 449, 460, 461, 465, 464, - 467, 462, 3777, 3777, 3777, 466, 86, 475, 456, 483, - 492, 458, 459, 474, 86, 86, 86, 476, 463, 3777, + 467, 462, 3806, 3806, 3806, 466, 86, 475, 456, 483, + 492, 458, 459, 474, 86, 86, 86, 476, 463, 3806, - 3777, 484, 86, 460, 461, 86, 464, 467, 462, 86, + 3806, 484, 86, 460, 461, 86, 464, 467, 462, 86, 86, 86, 466, 86, 475, 86, 483, 86, 485, 86, 474, 486, 487, 491, 476, 463, 468, 488, 484, 469, - 495, 496, 489, 86, 470, 471, 472, 473, 3777, 512, - 3777, 3777, 86, 86, 86, 485, 86, 86, 486, 487, - 491, 3777, 519, 468, 3777, 3777, 469, 495, 496, 86, + 495, 496, 489, 86, 470, 471, 472, 473, 3806, 512, + 3806, 3806, 86, 86, 86, 485, 86, 86, 486, 487, + 491, 3806, 519, 468, 3806, 3806, 469, 495, 496, 86, 499, 470, 471, 472, 473, 477, 493, 478, 500, 494, - 501, 86, 497, 498, 3777, 503, 86, 504, 86, 479, - 480, 481, 86, 482, 86, 3777, 86, 499, 526, 86, + 501, 86, 497, 498, 3806, 503, 86, 504, 86, 479, + 480, 481, 86, 482, 86, 3806, 86, 499, 526, 86, 502, 510, 477, 493, 478, 500, 494, 86, 86, 497, 498, 86, 503, 86, 504, 507, 479, 480, 481, 505, 482, 86, 86, 506, 508, 509, 511, 502, 510, 513, 86, 514, 518, 86, 517, 86, 533, 86, 86, 86, - 515, 86, 507, 520, 3777, 532, 505, 516, 531, 534, + 515, 86, 507, 520, 3806, 532, 505, 516, 531, 534, 506, 508, 509, 511, 86, 86, 513, 521, 514, 518, 525, 517, 523, 522, 524, 86, 86, 515, 86, 576, - 520, 86, 532, 86, 516, 531, 86, 3777, 535, 86, + 520, 86, 532, 86, 516, 531, 86, 3806, 535, 86, 527, 548, 591, 551, 521, 549, 86, 525, 86, 523, - 522, 524, 579, 528, 552, 86, 529, 3777, 530, 86, + 522, 524, 579, 528, 552, 86, 529, 3806, 530, 86, 86, 86, 553, 550, 86, 535, 86, 527, 548, 86, - 551, 3777, 549, 3777, 86, 86, 3777, 554, 556, 579, + 551, 3806, 549, 3806, 86, 86, 3806, 554, 556, 579, 528, 552, 566, 529, 565, 530, 536, 567, 537, 553, 550, 86, 568, 555, 538, 569, 86, 645, 539, 572, 86, 86, 570, 540, 554, 556, 541, 86, 571, 566, - 575, 565, 86, 536, 171, 537, 86, 3777, 86, 86, - 555, 538, 569, 574, 86, 539, 572, 3777, 573, 570, - 540, 578, 86, 541, 542, 571, 543, 575, 577, 3777, + 575, 565, 86, 536, 171, 537, 86, 3806, 86, 86, + 555, 538, 569, 574, 86, 539, 572, 3806, 573, 570, + 540, 578, 86, 541, 542, 571, 543, 575, 577, 3806, 86, 86, 581, 671, 580, 588, 583, 86, 86, 544, - 574, 582, 545, 1008, 546, 573, 547, 86, 578, 585, + 574, 582, 545, 1010, 546, 573, 547, 86, 578, 585, 86, 542, 586, 543, 584, 577, 86, 86, 86, 86, 671, 580, 588, 583, 86, 587, 544, 589, 582, 545, 590, 546, 86, 547, 557, 558, 585, 86, 592, 586, 594, 584, 86, 593, 559, 560, 561, 562, 563, 86, 86, 564, 587, 595, 589, 86, 596, 590, 597, 86, - 86, 557, 558, 3777, 86, 592, 86, 594, 598, 599, + 86, 557, 558, 3806, 86, 592, 86, 594, 598, 599, 593, 559, 560, 561, 562, 563, 600, 601, 564, 86, 595, 604, 602, 603, 608, 597, 605, 606, 86, 86, 86, 86, 86, 607, 612, 598, 599, 86, 609, 610, - 86, 3777, 615, 3777, 613, 86, 86, 616, 604, 602, + 86, 3806, 615, 3806, 613, 86, 86, 616, 604, 602, 603, 608, 617, 605, 606, 86, 611, 86, 86, 614, 607, 612, 618, 86, 86, 609, 610, 86, 86, 615, @@ -1853,43 +1863,43 @@ static const flex_int16_t yy_nxt[10784] = 639, 640, 86, 638, 86, 86, 623, 633, 624, 619, 86, 86, 620, 86, 632, 634, 641, 644, 86, 635, 637, 621, 622, 86, 86, 86, 86, 639, 640, 86, - 638, 3777, 642, 623, 643, 624, 625, 647, 86, 86, - 646, 649, 648, 641, 626, 627, 3777, 637, 628, 629, - 3777, 86, 630, 651, 650, 3777, 3777, 3777, 86, 642, + 638, 3806, 642, 623, 643, 624, 625, 647, 86, 86, + 646, 649, 648, 641, 626, 627, 3806, 637, 628, 629, + 3806, 86, 630, 651, 650, 3806, 3806, 3806, 86, 642, 86, 643, 86, 625, 647, 86, 653, 646, 86, 648, 654, 626, 627, 86, 655, 628, 629, 86, 652, 630, 651, 650, 656, 657, 86, 663, 659, 658, 86, 660, 662, 661, 86, 653, 86, 86, 86, 654, 86, 664, - 86, 655, 665, 3777, 86, 652, 667, 86, 666, 656, + 86, 655, 665, 3806, 86, 652, 667, 86, 666, 656, 657, 670, 663, 659, 658, 86, 660, 662, 661, 668, - 672, 86, 669, 86, 673, 86, 664, 3777, 86, 665, - 674, 3777, 86, 667, 675, 666, 86, 86, 670, 676, + 672, 86, 669, 86, 673, 86, 664, 3806, 86, 665, + 674, 3806, 86, 667, 675, 666, 86, 86, 670, 676, 677, 86, 678, 679, 681, 86, 668, 680, 86, 669, 86, 673, 86, 86, 86, 686, 688, 674, 86, 86, 690, 675, 689, 684, 687, 86, 676, 677, 692, 678, 679, 681, 86, 682, 680, 683, 685, 86, 699, 691, - 86, 86, 86, 86, 695, 3777, 696, 86, 86, 689, + 86, 86, 86, 86, 695, 3806, 696, 86, 86, 689, 684, 687, 86, 693, 701, 692, 694, 697, 698, 86, - 682, 86, 683, 685, 702, 3777, 691, 700, 86, 86, + 682, 86, 683, 685, 702, 3806, 691, 700, 86, 86, 86, 695, 86, 696, 86, 704, 86, 705, 86, 710, 693, 701, 708, 694, 697, 698, 706, 703, 86, 707, 709, 86, 713, 712, 700, 86, 86, 715, 711, 86, - 86, 86, 704, 86, 705, 86, 710, 3777, 727, 708, + 86, 86, 704, 86, 705, 86, 710, 3806, 727, 708, 86, 86, 764, 706, 703, 86, 707, 709, 714, 713, - 712, 724, 726, 725, 715, 711, 86, 3777, 86, 86, + 712, 724, 726, 725, 715, 711, 86, 3806, 86, 86, - 728, 86, 3777, 729, 86, 727, 730, 3777, 86, 731, - 3777, 748, 734, 86, 86, 714, 716, 86, 724, 726, - 725, 717, 732, 718, 86, 86, 733, 728, 3777, 719, + 728, 86, 3806, 729, 86, 727, 730, 3806, 86, 731, + 3806, 748, 734, 86, 86, 714, 716, 86, 724, 726, + 725, 717, 732, 718, 86, 86, 733, 728, 3806, 719, 729, 720, 86, 730, 721, 722, 731, 735, 748, 734, - 743, 723, 86, 716, 86, 744, 3777, 739, 717, 732, + 743, 723, 86, 716, 86, 744, 3806, 739, 717, 732, 718, 86, 737, 733, 742, 738, 719, 736, 720, 86, 740, 721, 722, 86, 735, 86, 86, 743, 723, 86, - 741, 745, 744, 746, 739, 86, 747, 3777, 749, 737, + 741, 745, 744, 746, 739, 86, 747, 3806, 749, 737, 86, 742, 738, 750, 736, 753, 751, 752, 754, 755, - 757, 3777, 86, 769, 86, 86, 86, 741, 745, 86, + 757, 3806, 86, 769, 86, 86, 86, 741, 745, 86, 746, 86, 86, 747, 86, 749, 756, 759, 86, 760, 750, 86, 753, 751, 752, 754, 755, 757, 758, 86, @@ -1909,13 +1919,13 @@ static const flex_int16_t yy_nxt[10784] = 86, 789, 86, 806, 790, 86, 804, 805, 813, 815, 810, 86, 86, 86, 807, 86, 811, 86, 814, 809, 808, 818, 812, 817, 819, 820, 86, 821, 86, 822, - 86, 823, 86, 86, 826, 813, 815, 3777, 825, 829, - 86, 830, 86, 86, 86, 814, 827, 86, 818, 3777, + 86, 823, 86, 86, 826, 813, 815, 3806, 825, 829, + 86, 830, 86, 86, 86, 814, 827, 86, 818, 3806, 817, 819, 820, 824, 821, 86, 822, 86, 823, 86, - 86, 826, 828, 86, 831, 825, 837, 3777, 830, 86, + 86, 826, 828, 86, 831, 825, 837, 3806, 830, 86, 832, 86, 836, 827, 838, 833, 839, 86, 834, 835, - 824, 86, 840, 86, 843, 841, 844, 86, 3777, 828, + 824, 86, 840, 86, 843, 841, 844, 86, 3806, 828, 846, 831, 86, 837, 86, 842, 86, 832, 845, 836, 850, 838, 833, 839, 86, 834, 835, 86, 86, 840, 847, 843, 841, 849, 86, 852, 86, 846, 86, 851, @@ -1926,940 +1936,951 @@ static const flex_int16_t yy_nxt[10784] = 86, 86, 864, 859, 868, 863, 866, 86, 869, 870, 871, 86, 861, 86, 86, 872, 862, 873, 874, 860, - 880, 86, 3777, 865, 876, 86, 86, 875, 878, 864, + 880, 86, 3806, 865, 876, 86, 86, 875, 878, 864, 877, 868, 86, 866, 881, 869, 86, 86, 86, 879, 86, 86, 872, 86, 873, 874, 882, 86, 883, 885, 86, 876, 86, 886, 875, 878, 86, 877, 884, 889, - 86, 881, 887, 890, 86, 894, 879, 888, 904, 891, - 3777, 86, 86, 86, 895, 883, 885, 86, 86, 899, - 886, 896, 86, 892, 893, 884, 889, 897, 898, 905, - 890, 86, 900, 901, 86, 86, 891, 86, 908, 86, - - 86, 895, 902, 909, 86, 86, 899, 910, 896, 86, - 892, 893, 86, 86, 897, 898, 905, 903, 906, 900, - 901, 911, 912, 86, 913, 914, 86, 916, 907, 902, - 86, 915, 86, 86, 910, 3777, 86, 86, 921, 920, - 86, 922, 923, 3777, 903, 906, 86, 86, 911, 912, - 86, 913, 914, 917, 916, 907, 918, 3777, 915, 919, - 86, 924, 86, 925, 86, 86, 920, 86, 922, 923, - 86, 927, 926, 86, 931, 86, 928, 930, 934, 86, - 917, 86, 933, 918, 932, 929, 919, 938, 924, 86, - 925, 86, 3777, 86, 935, 86, 3777, 3777, 927, 926, - - 86, 936, 86, 928, 930, 934, 86, 86, 937, 933, - 86, 932, 929, 939, 938, 940, 86, 944, 941, 946, - 947, 935, 86, 942, 943, 86, 86, 86, 936, 945, - 3777, 948, 86, 86, 3777, 937, 949, 86, 952, 950, - 939, 86, 940, 3777, 944, 941, 946, 947, 954, 953, - 942, 943, 86, 951, 86, 957, 945, 86, 948, 86, - 955, 86, 86, 949, 956, 952, 950, 959, 958, 86, - 86, 86, 86, 960, 961, 954, 953, 86, 3777, 966, - 951, 962, 957, 963, 965, 967, 970, 955, 86, 86, - 964, 956, 969, 86, 959, 958, 968, 86, 86, 86, - - 960, 961, 971, 86, 86, 86, 966, 86, 962, 972, - 963, 965, 967, 974, 86, 973, 975, 964, 86, 969, - 976, 977, 978, 968, 171, 979, 86, 980, 983, 971, - 987, 86, 86, 86, 86, 86, 972, 984, 86, 985, - 974, 3777, 973, 975, 989, 86, 990, 976, 977, 978, - 981, 86, 979, 986, 86, 86, 994, 86, 982, 86, - 988, 86, 86, 991, 984, 992, 985, 86, 86, 86, - 993, 989, 995, 990, 996, 997, 86, 981, 86, 86, - 986, 998, 999, 86, 86, 982, 1023, 988, 86, 86, - 991, 86, 992, 3777, 86, 1007, 1009, 993, 1010, 995, - - 3777, 996, 997, 3777, 1015, 1011, 86, 86, 998, 999, - 1000, 1014, 1013, 1001, 1012, 86, 86, 1002, 86, 86, - 1003, 1056, 1007, 1009, 1017, 1010, 86, 1004, 1005, 86, - 1006, 1015, 1011, 86, 1018, 86, 1016, 1000, 1014, 1013, - 1001, 1012, 1019, 1020, 1002, 1033, 1022, 1003, 86, 1021, - 86, 1017, 86, 86, 1004, 1005, 3777, 1006, 86, 86, - 86, 1018, 86, 1016, 1032, 1035, 1036, 86, 1071, 1019, - 1020, 86, 1033, 1022, 86, 1034, 1021, 1024, 1025, 1037, - 1026, 86, 86, 1027, 3777, 1038, 3777, 1040, 1028, 86, - 1041, 1032, 1035, 1036, 1029, 1030, 1042, 1031, 86, 1043, - - 86, 1039, 1034, 86, 1024, 1025, 1037, 1026, 86, 86, - 1027, 86, 1038, 1045, 1040, 1028, 1048, 1041, 86, 1049, - 1050, 1029, 1030, 1042, 1031, 1044, 1043, 86, 1039, 1046, - 1052, 1051, 86, 1053, 1047, 1054, 86, 86, 3777, 1057, - 1045, 1055, 3777, 1048, 1061, 86, 1049, 1050, 3777, 1060, - 1058, 86, 1044, 86, 1063, 86, 86, 1052, 1051, 86, - 1053, 86, 1054, 86, 86, 86, 1057, 1059, 1055, 1064, - 1062, 1061, 86, 86, 1065, 86, 1060, 1058, 86, 1066, - 1068, 1063, 1067, 1069, 1073, 1070, 86, 1077, 1074, 86, - 86, 1072, 86, 1075, 1059, 86, 1064, 1062, 86, 1076, - - 1082, 1065, 1081, 1083, 1084, 1078, 1066, 1068, 86, 1067, - 1069, 86, 1070, 86, 86, 1079, 1085, 1080, 1072, 86, - 86, 86, 86, 86, 86, 1087, 1076, 1082, 86, 1086, - 1088, 1084, 1078, 1092, 86, 86, 1089, 86, 1091, 1090, - 1096, 1093, 1079, 1085, 1080, 86, 1097, 86, 86, 1094, - 1095, 86, 86, 1098, 86, 86, 1086, 86, 86, 86, - 1092, 1099, 1100, 1089, 86, 1091, 1090, 1096, 1093, 86, - 1101, 1102, 1105, 1097, 1103, 1106, 1094, 1095, 1104, 86, - 86, 86, 1107, 86, 1108, 86, 86, 1112, 1099, 1100, - 86, 1110, 1109, 86, 1111, 1114, 1113, 86, 86, 1105, - - 86, 1103, 1106, 86, 1118, 1104, 86, 1119, 3777, 1107, - 86, 1108, 1115, 86, 1112, 86, 86, 86, 1110, 1109, - 1116, 1111, 1114, 1113, 1120, 1117, 86, 1121, 1122, 1123, - 1128, 1118, 86, 86, 1119, 86, 86, 1125, 1124, 1115, - 1130, 1127, 1129, 1131, 3777, 1126, 86, 86, 86, 86, - 3777, 1120, 86, 1132, 1121, 1122, 1123, 86, 1135, 1137, - 1142, 86, 86, 86, 1125, 1124, 86, 1130, 1127, 1129, - 1131, 1133, 1126, 1139, 1134, 86, 1136, 86, 86, 1141, - 1132, 86, 1140, 86, 1138, 1135, 1137, 86, 86, 1143, - 1144, 86, 86, 1145, 1146, 1147, 86, 1148, 1133, 1150, - - 1139, 1134, 86, 1136, 86, 86, 1141, 86, 86, 1140, - 1149, 1138, 86, 1151, 1152, 1153, 1143, 1144, 86, 3777, - 1145, 1146, 1147, 86, 1148, 1154, 1150, 1155, 1157, 86, - 1163, 1156, 86, 1164, 1159, 86, 1158, 1149, 86, 86, - 1151, 86, 1153, 86, 1161, 86, 1162, 86, 1160, 1166, - 1169, 86, 1154, 86, 1155, 1157, 86, 1165, 1156, 1167, - 1168, 1159, 86, 1158, 1170, 86, 1171, 86, 1172, 3777, - 86, 1161, 86, 1162, 1176, 1160, 86, 1173, 1175, 1178, - 86, 86, 86, 1177, 1165, 1174, 1167, 1168, 1179, 86, - 1180, 1183, 86, 1171, 1181, 1172, 86, 1185, 1186, 1182, - - 86, 1176, 3777, 86, 1173, 1175, 1187, 86, 1184, 86, - 1177, 86, 1174, 86, 86, 86, 1188, 1180, 1193, 1194, - 86, 1181, 1191, 86, 86, 1186, 1182, 1192, 86, 1189, - 86, 1190, 1196, 1187, 1195, 1184, 1201, 86, 1198, 86, - 86, 1197, 86, 1188, 1199, 1193, 1194, 1200, 86, 1202, - 86, 1212, 3777, 1203, 171, 86, 1189, 1204, 1190, 1196, - 86, 1195, 86, 1201, 86, 1198, 86, 86, 1197, 1205, - 1242, 1199, 3777, 86, 1200, 86, 1202, 1214, 1212, 1215, - 1203, 1213, 1216, 3777, 1204, 1217, 3777, 86, 1223, 1219, - 1218, 86, 1221, 1224, 3777, 3777, 1205, 1206, 1220, 1207, - - 86, 86, 86, 1208, 1214, 1209, 1215, 86, 1213, 86, - 1210, 86, 1217, 86, 86, 1211, 1219, 1218, 1222, 1221, - 86, 86, 1225, 1226, 1206, 1220, 1207, 1229, 3777, 1227, - 1208, 86, 1209, 1230, 1234, 1233, 86, 1210, 1232, 86, - 86, 1228, 1211, 1231, 1235, 1222, 1237, 86, 1238, 1225, - 1226, 1240, 86, 86, 1229, 86, 1227, 86, 1236, 86, - 1230, 1234, 1233, 1243, 86, 1232, 86, 1239, 1228, 1241, - 1231, 86, 86, 1237, 1244, 1238, 1246, 1247, 1240, 1248, - 1258, 3777, 86, 1249, 3777, 1236, 1259, 86, 1257, 86, - 1260, 86, 86, 1261, 1239, 86, 1241, 3777, 1265, 86, - - 1262, 86, 86, 86, 1247, 86, 1248, 1258, 86, 86, - 1249, 1250, 1263, 1259, 1270, 1257, 1251, 1260, 1252, 86, - 1261, 1264, 86, 3777, 1253, 1265, 1273, 1262, 1266, 1254, - 1255, 86, 1267, 1269, 86, 86, 1256, 86, 1250, 1263, - 86, 86, 1268, 1251, 86, 1252, 86, 1272, 1264, 1271, - 86, 1253, 1275, 1273, 1274, 1266, 1254, 1255, 1276, 1267, - 1269, 86, 86, 1256, 1277, 86, 1278, 86, 1279, 1268, - 1280, 86, 1281, 1284, 1272, 86, 1271, 3777, 1282, 1275, - 1285, 1274, 1283, 1288, 1286, 1276, 86, 86, 1291, 86, - 1287, 86, 1290, 1278, 3777, 1279, 86, 1289, 86, 1281, - - 1284, 86, 86, 86, 86, 1282, 86, 1292, 1293, 1283, - 1288, 1286, 86, 1296, 1294, 86, 86, 1287, 1298, 1290, - 86, 1295, 1297, 3777, 1289, 86, 86, 1304, 86, 86, - 1301, 1303, 1299, 86, 1292, 1293, 86, 1300, 86, 1306, - 1296, 1294, 1302, 1305, 1309, 1298, 86, 3777, 1295, 1297, - 86, 86, 86, 1308, 1304, 86, 86, 1301, 1307, 1299, - 86, 1311, 1312, 86, 1300, 1310, 1306, 1313, 1314, 1302, - 1305, 86, 3777, 86, 86, 86, 86, 1315, 1316, 86, - 1308, 1317, 1320, 1318, 1321, 1307, 1319, 3777, 1311, 1312, - 86, 1322, 1310, 1326, 1313, 1314, 3777, 1324, 1327, 86, - - 86, 86, 1331, 86, 1315, 1316, 1325, 1323, 1317, 86, - 1318, 86, 86, 1319, 86, 1330, 86, 86, 1322, 86, - 1328, 1333, 1332, 1329, 1324, 86, 86, 86, 86, 1331, - 1334, 1335, 1337, 1325, 1323, 86, 1338, 1336, 1339, 1340, - 86, 86, 1330, 1341, 86, 86, 86, 1328, 1333, 1332, - 1329, 86, 1342, 1343, 1345, 86, 1344, 1334, 1335, 1337, - 3777, 1346, 1347, 1348, 1336, 1339, 86, 86, 86, 1350, - 1341, 86, 1351, 1352, 86, 1349, 1353, 1354, 86, 1342, - 1343, 1345, 86, 1344, 86, 86, 86, 86, 1346, 1347, - 1348, 86, 1356, 1358, 86, 86, 1350, 1355, 86, 1351, - - 1352, 1357, 1349, 1353, 1354, 1359, 1361, 86, 86, 1360, - 1362, 3777, 1363, 86, 1364, 86, 1367, 1368, 1365, 1356, - 1369, 1370, 1366, 86, 1355, 86, 86, 86, 1357, 86, - 1371, 86, 86, 1361, 86, 1374, 1360, 1362, 86, 1363, - 86, 1364, 1372, 1367, 1368, 1365, 1373, 1376, 1375, 1366, - 1377, 1378, 86, 86, 1379, 1380, 1382, 3777, 1381, 3777, - 86, 86, 86, 3777, 86, 1395, 1383, 86, 86, 1372, - 86, 1384, 86, 1373, 1385, 1375, 1388, 1377, 1378, 86, - 86, 1379, 1386, 86, 86, 1381, 1387, 86, 1389, 86, - 1390, 86, 1391, 1383, 86, 1392, 86, 86, 1384, 1394, - - 86, 1385, 1396, 1388, 86, 1393, 86, 86, 1398, 1386, - 1399, 1397, 86, 1387, 86, 1389, 1400, 1390, 1401, 1391, - 86, 1402, 1392, 86, 86, 1408, 1394, 86, 1406, 1410, - 86, 86, 1393, 1403, 86, 1398, 86, 86, 1397, 1407, - 1405, 1419, 86, 1400, 1411, 1401, 86, 86, 1402, 86, - 1409, 1412, 1408, 1413, 1414, 1406, 86, 1415, 86, 86, - 1403, 171, 1416, 86, 1417, 1418, 1407, 1405, 1419, 1421, - 86, 1411, 1423, 86, 86, 86, 1420, 1409, 1412, 86, - 1413, 1414, 1424, 1422, 1415, 1426, 1425, 86, 86, 1416, - 86, 1417, 1418, 1427, 1428, 1429, 86, 86, 1430, 3777, - - 3777, 1431, 1434, 1420, 86, 1432, 1438, 86, 86, 3777, - 1422, 86, 1426, 1425, 86, 1435, 86, 86, 86, 1433, - 1427, 1428, 1429, 86, 1436, 1430, 86, 86, 1431, 1434, - 1437, 1439, 1432, 86, 1440, 86, 86, 1441, 86, 1442, - 1443, 1444, 1435, 86, 86, 1451, 1433, 86, 1448, 86, - 1445, 1436, 1446, 3777, 1449, 1447, 1450, 1437, 1439, 1461, - 86, 1440, 1455, 86, 1441, 1452, 1442, 1443, 1444, 1454, - 86, 86, 86, 1453, 3777, 1448, 1457, 1445, 86, 1446, - 86, 1449, 1447, 1450, 1458, 86, 86, 1459, 1456, 1455, - 1460, 86, 1452, 86, 86, 86, 1454, 86, 1462, 1463, - - 1453, 1465, 1464, 1457, 1466, 86, 86, 3777, 1467, 86, - 1468, 1458, 86, 1471, 1459, 1456, 1469, 1460, 86, 1470, - 86, 1472, 1473, 86, 3777, 1462, 1463, 1487, 1465, 1464, - 86, 86, 86, 1474, 86, 1467, 86, 1468, 1476, 86, - 1471, 86, 1475, 1469, 1478, 86, 1470, 1477, 1472, 1473, - 86, 1480, 1479, 1481, 1484, 1483, 86, 1482, 1485, 86, - 1474, 86, 86, 86, 86, 1476, 86, 1486, 3777, 1475, - 86, 1478, 86, 1490, 1477, 86, 3777, 1491, 1480, 1479, - 1481, 1484, 1483, 86, 1482, 1485, 1488, 1493, 1489, 86, - 1492, 86, 3777, 86, 1486, 86, 1496, 1494, 86, 1495, - - 1490, 86, 86, 1497, 1491, 86, 1499, 1500, 86, 1498, - 1502, 3777, 1501, 1488, 1493, 1489, 86, 1492, 1505, 86, - 1503, 1504, 1509, 1496, 1494, 86, 1495, 86, 1506, 86, - 86, 1510, 86, 1512, 1500, 86, 1498, 1502, 86, 1501, - 86, 1507, 1511, 86, 86, 1505, 1508, 1503, 1504, 1509, - 1520, 1522, 1521, 1524, 3777, 1506, 86, 1526, 1510, 86, - 1512, 1523, 3777, 1527, 86, 3777, 1525, 3777, 3777, 1511, - 86, 1529, 1528, 86, 1513, 86, 1531, 1520, 1514, 1521, - 1524, 1515, 1516, 86, 86, 86, 1517, 86, 1523, 86, - 1527, 3777, 1518, 1525, 86, 1536, 1519, 86, 1529, 1528, - - 86, 1513, 86, 1531, 1530, 1514, 1535, 1539, 1515, 1516, - 86, 1534, 1532, 1517, 1533, 86, 1537, 3777, 86, 1518, - 1538, 3777, 1540, 1519, 1541, 86, 1543, 86, 1544, 86, - 1542, 1530, 1547, 1535, 1539, 86, 86, 1545, 1534, 1532, - 1546, 1533, 1548, 86, 86, 3777, 86, 1538, 86, 1540, - 3777, 1541, 1549, 1543, 86, 1555, 3777, 1542, 86, 1547, - 86, 1556, 3777, 1561, 1545, 86, 86, 1557, 1560, 1548, - 1558, 1559, 86, 1569, 86, 3777, 1563, 86, 86, 1549, - 1550, 3777, 1555, 86, 86, 1551, 86, 1552, 1556, 1553, - 1561, 1554, 1562, 86, 1557, 1560, 1564, 1565, 86, 86, - - 1569, 1566, 1568, 1563, 86, 86, 1567, 1550, 1570, 1571, - 1572, 1576, 1551, 1573, 1552, 86, 1553, 1574, 1554, 1562, - 86, 86, 86, 1564, 1565, 86, 1575, 1578, 86, 1568, - 86, 1577, 1579, 86, 1580, 1570, 1571, 1572, 1581, 86, - 1573, 1585, 86, 86, 1574, 1583, 1584, 86, 1587, 1582, - 86, 86, 1588, 1575, 1578, 1590, 3777, 86, 1577, 1579, - 86, 1580, 86, 86, 1591, 1581, 86, 1586, 1585, 86, - 86, 1589, 1583, 1584, 1592, 1587, 1582, 1595, 1593, 86, - 1597, 1594, 86, 86, 1599, 86, 86, 1600, 1596, 1598, - 1601, 1591, 3777, 3777, 1586, 1605, 86, 1610, 1589, 86, - - 1607, 1592, 86, 86, 1595, 1593, 86, 86, 1594, 1608, - 86, 86, 86, 86, 1600, 1596, 1598, 1601, 1602, 1603, - 1604, 1606, 86, 1609, 86, 86, 86, 1607, 86, 86, - 86, 1611, 1613, 86, 1612, 1614, 1608, 1616, 1618, 1615, - 1617, 3777, 1619, 3777, 86, 1602, 1603, 1604, 1606, 86, - 1609, 1620, 86, 86, 86, 86, 1621, 86, 1611, 1613, - 86, 1612, 1614, 86, 1616, 1618, 1615, 1617, 1622, 1619, - 1623, 1624, 3777, 86, 1625, 86, 1627, 1626, 1620, 1631, - 1632, 1628, 1630, 1621, 1635, 86, 1629, 3777, 1633, 3777, - 86, 1638, 1634, 86, 86, 1622, 86, 1623, 1624, 86, - - 86, 1625, 86, 1627, 1626, 1636, 86, 86, 1628, 1630, - 86, 86, 86, 1629, 86, 1633, 86, 1637, 1638, 1634, - 1639, 1640, 1642, 86, 1641, 86, 1643, 1644, 86, 1645, - 1646, 86, 1636, 1647, 86, 1648, 86, 1649, 1651, 171, - 3777, 3777, 1665, 86, 1637, 1650, 86, 86, 1640, 1642, - 1659, 1641, 1654, 1643, 1644, 1655, 1645, 1646, 86, 86, - 1652, 86, 86, 1656, 1649, 86, 1653, 86, 1657, 86, - 86, 1658, 1650, 86, 1663, 3777, 86, 1659, 86, 1654, - 86, 86, 1655, 1661, 1660, 86, 1667, 1652, 1662, 3777, - 1656, 86, 3777, 1653, 1664, 1657, 86, 86, 1658, 1668, - - 1666, 1663, 1672, 86, 86, 1673, 1674, 86, 86, 1669, - 1661, 1660, 3777, 1667, 1670, 1662, 1671, 1680, 1675, 86, - 86, 1664, 1681, 1682, 86, 86, 1668, 1666, 1676, 1672, - 86, 1677, 1673, 1674, 1678, 86, 86, 1679, 1683, 1684, - 86, 86, 3777, 1671, 1680, 1675, 1688, 86, 1686, 1681, - 1682, 1685, 1691, 1687, 86, 1676, 86, 3777, 1677, 1689, - 86, 1678, 86, 1690, 1679, 1692, 1684, 86, 1694, 1693, - 86, 1696, 86, 1688, 86, 1695, 1697, 86, 1685, 1691, - 86, 1698, 86, 86, 1701, 1705, 1689, 86, 1699, 1702, - 1690, 86, 1692, 86, 86, 1694, 1693, 86, 1696, 1704, - - 1700, 3777, 1695, 1697, 1703, 1706, 1709, 86, 1698, 86, - 86, 1701, 86, 86, 1707, 1699, 1702, 86, 1710, 86, - 86, 1708, 1711, 1714, 1713, 86, 1704, 1700, 1712, 86, - 86, 1703, 1706, 1709, 86, 1715, 86, 1720, 1716, 1717, - 1719, 1707, 1721, 86, 1724, 1710, 86, 86, 1708, 1711, - 1714, 1713, 86, 1718, 86, 1712, 1722, 86, 86, 86, - 1725, 1723, 1715, 86, 1720, 1716, 1717, 1719, 86, 1721, - 86, 1724, 1726, 1727, 86, 1728, 1729, 1734, 1730, 1731, - 1718, 1732, 1735, 1722, 1736, 1733, 86, 86, 1723, 3777, - 86, 1737, 86, 3777, 1738, 1741, 1742, 3777, 3777, 86, - - 1727, 86, 1728, 86, 86, 1730, 1731, 86, 1732, 86, - 1743, 1745, 1733, 1739, 86, 1740, 86, 86, 1737, 86, - 86, 1738, 86, 1742, 1744, 1748, 86, 1747, 86, 1749, - 1746, 1751, 3777, 86, 1750, 1753, 3777, 1743, 1745, 86, - 1739, 86, 1740, 86, 1752, 86, 1759, 1768, 86, 1760, - 86, 1744, 1748, 86, 1747, 86, 1749, 1746, 1751, 1754, - 1755, 1750, 1753, 1757, 1761, 1756, 86, 86, 1758, 1762, - 1763, 1752, 86, 1759, 1765, 86, 1760, 86, 1764, 86, - 1766, 1767, 86, 1774, 1769, 1770, 1754, 86, 86, 3777, - 86, 1761, 86, 1776, 86, 86, 1762, 1763, 1772, 1777, - - 86, 1765, 1771, 1773, 86, 1764, 86, 1766, 1767, 86, - 86, 1769, 1770, 1775, 86, 86, 1778, 1779, 1780, 1781, - 1776, 86, 3777, 3777, 86, 1772, 86, 86, 1782, 1771, - 1773, 86, 1785, 1783, 1784, 86, 86, 1786, 86, 1787, - 1775, 86, 1789, 1778, 1779, 1780, 1781, 86, 1788, 86, - 86, 1792, 1791, 1793, 1790, 1782, 1796, 3777, 3777, 1785, - 1783, 1784, 86, 1794, 1786, 86, 1787, 86, 1795, 1789, - 86, 1798, 86, 1799, 1797, 1788, 3777, 1804, 86, 1791, - 86, 1790, 1805, 1796, 1803, 86, 86, 86, 1800, 86, - 1794, 86, 1801, 86, 86, 1795, 1806, 1807, 1798, 86, - - 1799, 1797, 1808, 86, 1804, 1802, 1809, 1810, 86, 1805, - 1811, 1803, 1813, 86, 1814, 1800, 1812, 3777, 1821, 1801, - 1817, 3777, 86, 1806, 1807, 1815, 1816, 86, 86, 86, - 86, 1818, 1802, 1809, 1822, 1820, 86, 1811, 1819, 86, - 86, 1814, 86, 1812, 86, 1823, 1824, 1817, 86, 86, - 86, 1828, 1815, 1816, 86, 1826, 86, 1825, 1818, 1827, - 1829, 86, 1820, 86, 1830, 1819, 1831, 86, 1832, 1833, - 1834, 3777, 1823, 1837, 1836, 3777, 1839, 86, 86, 86, - 86, 86, 1826, 86, 1825, 86, 1827, 1829, 1835, 1847, - 86, 86, 1841, 1831, 86, 86, 1833, 1834, 86, 86, - - 1837, 1836, 1838, 1839, 1840, 1842, 1843, 1846, 1844, 86, - 1849, 86, 86, 1848, 1845, 1835, 86, 86, 86, 1841, - 86, 86, 1852, 3777, 86, 1854, 3777, 1859, 86, 1838, - 1851, 1840, 1842, 1843, 1846, 1844, 86, 1849, 1850, 86, - 1848, 1845, 86, 1853, 1856, 1855, 1857, 86, 1858, 1852, - 86, 86, 1854, 86, 86, 1860, 1861, 1851, 86, 1862, - 86, 1863, 1869, 86, 1865, 1850, 86, 1866, 86, 1864, - 1853, 1856, 1855, 1857, 3777, 1858, 1867, 86, 86, 1868, - 86, 1870, 1860, 1861, 86, 86, 1862, 1872, 1863, 86, - 86, 1865, 3777, 1871, 1866, 1874, 1864, 3777, 1875, 1873, - - 1878, 86, 1881, 1867, 86, 86, 1868, 86, 1870, 86, - 171, 86, 1880, 86, 1872, 1876, 1877, 1879, 1882, 86, - 1871, 1885, 1874, 86, 1883, 1875, 1873, 1878, 86, 1881, - 86, 86, 1886, 1887, 1884, 1891, 1890, 1889, 1893, 1880, - 86, 86, 1876, 1877, 1879, 1882, 1888, 1892, 86, 1894, - 86, 1883, 1895, 86, 86, 86, 1896, 1898, 86, 1886, - 1887, 1884, 86, 1890, 1889, 86, 1899, 86, 1901, 1897, - 86, 86, 1900, 1888, 1892, 86, 1894, 86, 86, 1895, - 1902, 1904, 3777, 86, 1898, 1903, 1906, 1909, 86, 1905, - 86, 1907, 3777, 1899, 86, 1901, 1897, 1910, 86, 1900, - - 1908, 86, 86, 1914, 86, 1916, 86, 1902, 1904, 86, - 86, 1915, 1903, 1906, 1909, 1919, 1905, 86, 1907, 1911, - 1921, 1917, 1912, 1918, 1910, 1922, 1920, 1908, 86, 86, - 1924, 1927, 1916, 86, 1913, 86, 1923, 86, 1915, 86, - 1925, 86, 1919, 86, 86, 1929, 1911, 1921, 1917, 1912, - 1918, 1926, 86, 1920, 1928, 3777, 1931, 86, 1927, 1932, - 1930, 1913, 86, 1923, 1934, 1935, 1933, 1936, 86, 1937, - 86, 86, 86, 86, 86, 1938, 1939, 86, 1926, 1940, - 86, 1928, 86, 1931, 3777, 1943, 1932, 1930, 1942, 86, - 1941, 1934, 1935, 1933, 86, 1945, 1944, 1948, 86, 86, - - 3777, 86, 1946, 1939, 86, 86, 1949, 86, 1947, 86, - 86, 86, 86, 86, 1950, 1942, 1953, 1941, 86, 1951, - 86, 1952, 1945, 1944, 1948, 86, 1954, 86, 86, 1946, - 1956, 1955, 86, 1949, 86, 1947, 1957, 1959, 1962, 1958, - 1963, 1950, 1961, 1953, 86, 1960, 1951, 86, 1952, 1966, - 1964, 1971, 86, 1954, 86, 86, 86, 1956, 1955, 86, - 86, 86, 86, 1957, 1959, 1967, 1958, 1963, 1965, 1961, - 86, 1969, 1960, 1970, 1972, 86, 1966, 1964, 86, 1974, - 1973, 86, 1975, 1968, 1976, 1978, 1977, 3777, 86, 86, - 3777, 86, 1967, 3777, 86, 1965, 86, 86, 1969, 86, - - 1970, 1972, 86, 1980, 1981, 1979, 1974, 1973, 86, 1975, - 1968, 1976, 1978, 1977, 86, 1982, 86, 1985, 1988, 1983, - 86, 86, 1984, 1989, 1986, 1990, 1991, 1995, 86, 1987, - 1980, 1981, 1979, 1992, 1993, 86, 86, 86, 1994, 3777, - 2000, 1996, 1982, 86, 1985, 1988, 1983, 86, 86, 1984, - 1989, 1986, 86, 86, 86, 86, 1987, 1998, 1997, 1999, - 1992, 1993, 86, 2001, 86, 1994, 86, 2000, 1996, 86, - 2002, 2004, 2003, 2005, 2009, 2006, 2010, 86, 2011, 86, - 86, 86, 86, 86, 1998, 1997, 1999, 2012, 2013, 3777, - 2001, 86, 86, 2007, 86, 2015, 2008, 2002, 2004, 2003, - - 2005, 2009, 2006, 2010, 2016, 2014, 2017, 2018, 86, 86, - 86, 86, 86, 86, 86, 2013, 2019, 2021, 86, 86, - 2007, 2020, 2015, 2008, 2023, 2022, 86, 2024, 3777, 2025, - 2027, 2016, 2014, 2017, 2018, 2026, 86, 2036, 3777, 86, - 86, 86, 2028, 2035, 2021, 2029, 86, 2031, 86, 2030, - 2033, 2023, 2022, 2034, 2024, 86, 2025, 2027, 2038, 86, - 86, 2032, 2026, 2046, 2036, 86, 2041, 86, 86, 2028, - 2035, 86, 2029, 86, 2031, 2037, 2030, 2033, 2039, 86, - 2034, 86, 2042, 2040, 2043, 2038, 2044, 2045, 2032, 86, - 2047, 2048, 2049, 2041, 86, 86, 2052, 2057, 2050, 86, - - 86, 3777, 2037, 2051, 2061, 2053, 3777, 3777, 86, 2042, - 86, 2043, 2054, 2044, 2045, 2055, 86, 2047, 86, 86, - 86, 2056, 86, 2058, 86, 2050, 86, 2059, 86, 86, - 2051, 2067, 2053, 2060, 86, 2063, 86, 86, 2062, 2054, - 2066, 2064, 2055, 86, 2065, 2068, 2070, 2069, 2056, 86, - 2058, 86, 86, 86, 2059, 2071, 2076, 86, 2067, 86, - 2060, 86, 2063, 86, 86, 2062, 2072, 2066, 2064, 86, - 2073, 2065, 2068, 2070, 2069, 2074, 2077, 2078, 2079, 86, - 2080, 3777, 2071, 86, 2081, 2082, 2084, 2083, 86, 2085, - 2086, 86, 86, 2072, 86, 86, 2075, 2073, 2088, 3777, - - 2090, 86, 86, 86, 2078, 2079, 2092, 86, 86, 86, - 2087, 2081, 2082, 86, 2083, 86, 2085, 2089, 2093, 2095, - 2096, 2091, 86, 2075, 2094, 2088, 86, 86, 86, 86, - 2098, 86, 2097, 2092, 86, 2100, 2099, 2087, 2104, 2102, - 86, 86, 86, 2101, 2089, 2093, 2095, 2096, 2091, 2103, - 86, 2094, 86, 86, 171, 2108, 2105, 2098, 2106, 2097, - 2107, 86, 2100, 2099, 86, 86, 2102, 86, 86, 2109, - 2101, 2110, 2111, 86, 2112, 2113, 2103, 2116, 2114, 2117, - 2120, 2115, 86, 2105, 86, 2106, 86, 2107, 86, 86, - 86, 86, 86, 2119, 86, 2118, 2109, 2121, 2110, 2111, - - 2123, 2112, 2113, 2122, 86, 2114, 2117, 86, 2115, 86, - 86, 2124, 2126, 2125, 86, 2127, 2129, 3777, 2131, 2128, - 2119, 86, 2118, 2130, 2121, 86, 2133, 86, 2149, 2135, - 2122, 86, 2132, 86, 86, 86, 2136, 86, 2124, 2134, - 2125, 86, 86, 2129, 86, 2131, 2128, 86, 86, 2137, - 2130, 86, 2139, 2133, 2138, 2140, 2135, 2141, 86, 2132, - 86, 2143, 2147, 2136, 86, 2144, 2134, 86, 86, 86, - 2142, 2146, 2145, 2148, 86, 86, 2137, 86, 2155, 2139, - 2150, 2138, 2140, 2151, 2141, 86, 86, 86, 2143, 2147, - 2154, 2156, 2144, 86, 86, 2152, 2153, 2142, 2146, 2145, - - 86, 86, 2159, 86, 86, 2155, 2157, 2150, 2158, 2160, - 2151, 2161, 2163, 2162, 2170, 2164, 86, 2154, 2156, 86, - 86, 2165, 2152, 2153, 2166, 2167, 2168, 86, 86, 2159, - 86, 86, 2169, 2157, 2171, 2158, 86, 2172, 86, 86, - 2162, 86, 2164, 2174, 2176, 2173, 86, 2177, 2165, 86, - 2179, 2166, 2167, 86, 86, 86, 2175, 2178, 86, 2169, - 86, 2171, 2182, 2180, 2181, 2185, 86, 2183, 3777, 86, - 86, 2176, 2173, 2186, 2177, 86, 2184, 86, 2187, 86, - 2188, 86, 86, 2175, 2178, 2189, 86, 86, 3777, 86, - 2180, 2181, 2185, 2197, 2183, 86, 2202, 3777, 2209, 2194, - - 2186, 2203, 86, 2184, 86, 2187, 86, 2188, 2190, 2191, - 2192, 2195, 2196, 2200, 2198, 2193, 3777, 86, 2204, 86, - 86, 86, 2199, 86, 2201, 86, 2194, 2206, 86, 86, - 86, 86, 2205, 86, 2207, 2190, 2191, 2192, 2195, 2196, - 2200, 2198, 2193, 2208, 86, 2204, 86, 2210, 2213, 2199, - 86, 2201, 86, 2211, 2206, 86, 2212, 2214, 86, 2205, - 86, 2207, 86, 2215, 2216, 86, 2218, 2217, 2219, 2220, - 2208, 86, 86, 2221, 2210, 86, 86, 2222, 2226, 86, - 2211, 2223, 2225, 2212, 2214, 2224, 2230, 2228, 86, 86, - 2215, 2216, 86, 2218, 2217, 86, 2220, 2227, 86, 86, - - 86, 2231, 2229, 86, 2222, 86, 2232, 86, 2223, 2225, - 86, 2233, 2224, 86, 2228, 86, 2234, 2237, 86, 2235, - 86, 2236, 2238, 86, 2227, 2239, 2240, 3777, 2231, 2229, - 2242, 86, 2241, 2232, 86, 3777, 86, 2245, 2233, 2246, - 2244, 2248, 2261, 2234, 86, 2247, 2235, 86, 2236, 2238, - 2243, 2249, 2239, 86, 86, 3777, 3777, 86, 86, 2241, - 86, 2250, 86, 2251, 86, 2255, 2246, 2244, 2252, 86, - 2256, 2254, 2247, 86, 86, 2253, 2257, 2243, 86, 86, - 86, 86, 86, 86, 2258, 86, 2259, 86, 2250, 86, - 2251, 2260, 2255, 86, 2262, 2252, 2265, 2256, 2254, 3777, - - 86, 2263, 2253, 2257, 2264, 2268, 2270, 2267, 86, 3777, - 86, 2258, 2266, 2259, 86, 2269, 86, 86, 2260, 86, - 2275, 2271, 2272, 2265, 86, 2276, 86, 2274, 2263, 2273, - 86, 2264, 2268, 86, 2267, 86, 2277, 86, 2279, 2266, - 2278, 86, 2269, 86, 2280, 2281, 2284, 2275, 2271, 2272, - 2282, 86, 2276, 2285, 2274, 2283, 2273, 86, 86, 86, - 3777, 2286, 86, 2277, 2288, 86, 86, 2278, 86, 2289, - 2287, 2280, 2281, 86, 86, 2292, 86, 2282, 86, 2295, - 2285, 2296, 2283, 2290, 2293, 2291, 86, 2294, 2286, 2297, - 86, 2288, 86, 86, 2298, 86, 2289, 2287, 2303, 86, - - 2299, 86, 2309, 2305, 2300, 86, 2295, 86, 2296, 2306, - 2290, 2293, 2291, 2301, 2294, 2304, 86, 2310, 2302, 2307, - 86, 2298, 86, 86, 2308, 2303, 2312, 2299, 2313, 86, - 86, 2300, 2311, 86, 86, 2314, 86, 86, 2316, 2315, - 2301, 2317, 2304, 86, 2318, 2302, 2320, 2322, 86, 86, - 2319, 86, 86, 2312, 86, 2313, 86, 2321, 2323, 2311, - 2326, 86, 86, 2331, 2324, 2316, 2315, 86, 2317, 2325, - 86, 2318, 86, 2327, 2328, 2329, 86, 2319, 86, 86, - 2332, 2330, 171, 86, 2321, 86, 2333, 2326, 86, 86, - 86, 2324, 2334, 2335, 2337, 2338, 2325, 2340, 2336, 3777, - - 2327, 2328, 2329, 86, 86, 86, 2339, 2332, 2330, 2341, - 2342, 2343, 86, 2333, 2345, 2344, 86, 2346, 86, 86, - 86, 2350, 2338, 2355, 2340, 2336, 86, 86, 86, 86, - 2347, 2348, 86, 2339, 2349, 2351, 2341, 2342, 86, 86, - 2354, 2345, 2344, 86, 2346, 86, 86, 2352, 86, 2353, - 86, 2358, 2356, 86, 2357, 2359, 86, 2347, 2348, 86, - 86, 2349, 2351, 86, 86, 2360, 2362, 2354, 2361, 86, - 2366, 86, 86, 2364, 2352, 2363, 2353, 2365, 2358, 2356, - 2369, 2357, 2359, 86, 86, 2367, 86, 2370, 86, 86, - 86, 86, 2360, 2373, 2372, 2361, 2368, 2366, 86, 2371, - - 2364, 86, 2363, 2375, 2365, 86, 2374, 2369, 2378, 2376, - 2377, 86, 2367, 2379, 2370, 86, 2381, 86, 86, 86, - 2373, 2372, 86, 2368, 86, 2380, 2371, 86, 2382, 2384, - 2375, 2383, 86, 2374, 2385, 2378, 2376, 2377, 2386, 86, - 86, 86, 86, 2381, 2387, 3777, 2388, 86, 3777, 86, - 2389, 2390, 2380, 2391, 86, 2382, 2384, 2392, 2383, 2394, - 2393, 2385, 86, 2395, 86, 2396, 2398, 2397, 2399, 86, - 86, 2387, 86, 2388, 3777, 86, 2400, 2389, 2390, 86, - 2391, 86, 2403, 2442, 86, 3777, 86, 2393, 86, 86, - 2395, 2404, 2396, 2402, 2397, 2399, 86, 2401, 86, 2405, - - 86, 2406, 86, 2400, 2407, 2412, 2408, 86, 86, 2403, - 2409, 2414, 2410, 2411, 86, 86, 2415, 86, 2404, 86, - 2402, 86, 86, 86, 2401, 2424, 2405, 86, 2406, 2413, - 2416, 2407, 2412, 2408, 86, 2421, 2423, 2409, 2425, 2410, - 2411, 86, 86, 86, 2417, 2418, 2422, 86, 2419, 2431, - 86, 86, 86, 2426, 2427, 2428, 2413, 2416, 3777, 2429, - 86, 2420, 2421, 2423, 2434, 2425, 86, 2430, 2433, 86, - 2432, 2417, 2418, 2422, 86, 2419, 2431, 86, 86, 86, - 2426, 2427, 2428, 2435, 86, 2437, 2429, 2436, 2420, 86, - 86, 2434, 2438, 2439, 2430, 2433, 86, 2432, 2440, 2444, - - 2445, 86, 2441, 86, 2443, 2446, 86, 86, 2448, 86, - 2435, 86, 2437, 86, 2436, 2447, 86, 2450, 86, 2438, - 2439, 2449, 2455, 2451, 86, 2440, 2444, 2445, 2452, 2441, - 86, 2443, 86, 2454, 2453, 2448, 2456, 86, 2457, 86, - 86, 2458, 2447, 86, 2450, 86, 86, 2461, 2449, 2465, - 2451, 2462, 86, 2466, 86, 2452, 86, 2459, 86, 86, - 2454, 2453, 2460, 2456, 2463, 2457, 86, 2464, 2458, 2467, - 2470, 2468, 2472, 2471, 2461, 2534, 86, 86, 2462, 86, - 2466, 2469, 86, 86, 2473, 86, 2476, 2501, 86, 86, - 2477, 2463, 2478, 86, 2464, 86, 2467, 86, 2468, 2472, - - 2471, 2474, 86, 2479, 2480, 86, 2482, 86, 2469, 2475, - 2481, 2473, 2483, 86, 86, 86, 3777, 2477, 86, 2478, - 86, 2486, 86, 2484, 3777, 2495, 2485, 2490, 2474, 86, - 2479, 2480, 86, 2482, 2487, 86, 2475, 2481, 2488, 2483, - 86, 86, 86, 2489, 2491, 2492, 86, 86, 2486, 2493, - 2484, 2494, 2495, 2485, 2490, 2496, 2498, 3777, 3777, 2497, - 86, 2487, 86, 86, 3777, 2502, 86, 2500, 2499, 2508, - 86, 2491, 2492, 86, 86, 86, 2493, 86, 2494, 2503, - 2504, 86, 2496, 2498, 2507, 86, 2497, 2505, 86, 86, - 2509, 2506, 2502, 86, 2500, 2499, 2508, 86, 86, 2513, - - 2510, 2511, 2512, 2514, 2515, 3777, 2503, 2504, 3777, 86, - 2516, 2507, 86, 2519, 2505, 86, 86, 2509, 2506, 86, - 2517, 86, 86, 2521, 2525, 86, 2513, 2510, 2511, 2512, - 2514, 2515, 2520, 2518, 86, 86, 86, 2516, 2524, 2522, - 2519, 86, 2523, 2526, 86, 2527, 2528, 2517, 86, 2529, - 2521, 86, 2530, 3777, 2532, 86, 86, 86, 2531, 2520, - 2518, 86, 2535, 2533, 2538, 2524, 2522, 171, 86, 2523, - 2526, 86, 86, 2528, 2539, 86, 2529, 2536, 2540, 2530, - 86, 2532, 2537, 2543, 2541, 2531, 2542, 2548, 3777, 2535, - 2533, 2549, 3777, 86, 2544, 2551, 86, 2547, 2552, 2554, - - 2555, 2550, 86, 86, 86, 2540, 86, 2553, 2545, 86, - 86, 2541, 2557, 2542, 86, 86, 86, 86, 2549, 2546, - 86, 2544, 2551, 2556, 2547, 86, 2554, 86, 2550, 86, - 86, 2558, 2559, 2560, 2553, 2545, 2561, 3777, 2562, 86, - 86, 2565, 2563, 86, 86, 86, 2546, 2564, 2566, 2572, - 2556, 86, 2567, 86, 86, 2568, 86, 3777, 2558, 2559, - 2560, 86, 2570, 2561, 86, 2562, 86, 2571, 2565, 2563, - 86, 2569, 86, 2573, 2564, 2566, 86, 2575, 86, 2567, - 2574, 2576, 2568, 2580, 86, 2577, 86, 2579, 2578, 2570, - 86, 86, 86, 2584, 2571, 2581, 86, 86, 2569, 86, - - 2573, 3777, 86, 2586, 2575, 2582, 2585, 2574, 2576, 2583, - 2580, 86, 2577, 2587, 2579, 2578, 2588, 86, 86, 86, - 86, 86, 2581, 2589, 86, 86, 2590, 86, 2592, 86, - 2586, 2591, 2582, 2585, 86, 2594, 2583, 2593, 2595, 86, - 2587, 86, 2596, 2588, 2597, 2598, 2600, 2666, 2599, 3777, - 2589, 2601, 86, 2590, 2603, 2592, 86, 3777, 2591, 86, - 2604, 86, 2594, 2611, 2593, 2605, 2606, 86, 2610, 2613, - 86, 2597, 2598, 2600, 86, 2599, 86, 2602, 2601, 86, - 86, 86, 86, 2607, 86, 2608, 86, 2604, 2609, 86, - 86, 2612, 2605, 2606, 86, 2610, 86, 2614, 86, 2615, - - 2616, 2619, 86, 2617, 2602, 2620, 2618, 2621, 3777, 86, - 2607, 86, 2608, 2622, 86, 2609, 86, 2623, 2612, 86, - 2624, 2625, 2626, 2627, 2614, 3777, 2615, 2616, 86, 86, - 2617, 86, 2620, 2618, 2621, 86, 2628, 2632, 2633, 86, - 2622, 2631, 2635, 2634, 2623, 86, 2629, 2624, 86, 86, - 2627, 86, 2630, 86, 2637, 2638, 86, 2636, 86, 86, - 2640, 2639, 2641, 2628, 86, 86, 86, 86, 2631, 86, - 2634, 2644, 2642, 2629, 2643, 2646, 2645, 2647, 2650, 2630, - 2652, 86, 2638, 86, 2636, 86, 86, 86, 2639, 86, - 86, 2649, 86, 2654, 2659, 2655, 3777, 86, 2644, 2642, - - 2648, 2643, 86, 2645, 2647, 86, 2651, 86, 86, 2662, - 2653, 2656, 2661, 86, 86, 86, 86, 2657, 2649, 86, - 2654, 86, 2655, 2660, 86, 2665, 3777, 2648, 2663, 2672, - 2668, 86, 2658, 2651, 86, 86, 2662, 2653, 2656, 2661, - 86, 2664, 86, 86, 2657, 2674, 2667, 2669, 2670, 86, - 2660, 86, 86, 86, 2671, 2663, 86, 2668, 2673, 2658, - 86, 2678, 2680, 2679, 2675, 2681, 86, 86, 2664, 2676, - 86, 2682, 2674, 2667, 2669, 2670, 86, 86, 86, 2686, - 86, 2671, 86, 2677, 2683, 2673, 2687, 2684, 86, 2680, - 2679, 2675, 2681, 86, 2688, 86, 2676, 2692, 2682, 86, - - 2685, 86, 3777, 2693, 86, 86, 2686, 2689, 3777, 3777, - 2677, 2683, 3777, 2687, 2684, 2694, 2695, 2696, 86, 86, - 3777, 2688, 2690, 2697, 2691, 86, 2698, 2685, 2700, 86, - 2693, 86, 2701, 2707, 2689, 2699, 2703, 86, 86, 86, - 86, 86, 2694, 2695, 2696, 2704, 86, 2702, 86, 2690, - 2697, 2691, 2706, 2698, 86, 2700, 2705, 2708, 86, 2701, - 2709, 2710, 2699, 2703, 86, 86, 86, 86, 2711, 2712, - 2713, 2715, 2704, 86, 2702, 2714, 2718, 86, 86, 2706, - 2716, 2719, 2722, 2705, 2723, 86, 2717, 2709, 2710, 86, - 2724, 86, 86, 86, 86, 86, 2712, 2713, 2715, 86, - - 86, 2720, 2714, 2718, 86, 2721, 2725, 2716, 2719, 2722, - 2726, 2727, 2728, 2717, 2729, 2730, 86, 86, 86, 86, - 3777, 2735, 86, 86, 2733, 3777, 2731, 2740, 2720, 86, - 86, 2734, 2721, 2725, 2732, 3777, 3777, 2726, 2727, 2728, - 86, 2729, 86, 171, 2738, 2739, 2742, 86, 2735, 2751, - 2743, 2733, 86, 2731, 86, 86, 86, 86, 2734, 2744, - 2736, 2732, 2737, 2741, 86, 86, 2745, 86, 2746, 2748, - 86, 2738, 2739, 2742, 2747, 86, 86, 2743, 86, 2750, - 2753, 2749, 3777, 86, 2752, 2754, 2744, 2736, 86, 2737, - 2741, 86, 2755, 2745, 86, 2746, 2748, 2756, 86, 2757, - - 2758, 2747, 3777, 2759, 2766, 2762, 2750, 86, 2749, 86, - 86, 2752, 2754, 2760, 86, 2761, 2764, 2768, 86, 2755, - 86, 2763, 3777, 2765, 86, 2767, 86, 2758, 2769, 86, - 86, 86, 2762, 2770, 86, 2771, 86, 2772, 86, 86, - 2760, 86, 2761, 2764, 2768, 2773, 2777, 2774, 2763, 86, - 2765, 86, 2767, 2775, 2776, 2769, 2778, 86, 3777, 86, - 2770, 86, 86, 2779, 2772, 86, 2780, 86, 2781, 86, - 2787, 86, 2773, 2777, 2774, 86, 2784, 86, 2782, 2783, - 2775, 2776, 2790, 86, 2785, 86, 86, 2786, 86, 86, - 2779, 2788, 86, 2780, 86, 2781, 3777, 2787, 2789, 3777, - - 2791, 2792, 2795, 2784, 2793, 2782, 2783, 86, 86, 2790, - 86, 2785, 86, 2794, 2786, 2797, 2796, 2798, 2801, 86, - 2802, 86, 86, 86, 86, 2789, 86, 2791, 2792, 2795, - 2799, 2793, 86, 2800, 2803, 3777, 2805, 2804, 2806, 3777, - 2794, 86, 86, 2796, 2798, 2807, 2817, 2808, 3777, 2810, - 86, 86, 86, 86, 86, 86, 2809, 2799, 86, 2812, - 2800, 2803, 86, 2805, 2804, 2806, 2811, 2813, 2814, 86, - 2815, 86, 2807, 86, 2808, 86, 2810, 2816, 86, 2819, - 86, 2821, 3777, 2809, 2818, 2820, 2812, 2825, 2823, 2822, - 86, 86, 2833, 2811, 2813, 2814, 86, 2815, 86, 86, - - 86, 86, 2824, 86, 2816, 2829, 86, 2831, 86, 86, - 2827, 2818, 2820, 86, 2825, 2823, 2822, 2826, 86, 86, - 2828, 2830, 2832, 2834, 86, 2835, 86, 86, 2836, 2824, - 86, 2837, 2829, 2839, 86, 2838, 86, 2827, 2841, 86, - 2840, 86, 2843, 86, 2826, 2844, 2842, 2828, 2830, 86, - 2834, 86, 2835, 86, 2846, 2836, 86, 86, 2837, 2845, - 2839, 86, 2838, 2847, 86, 2841, 2849, 2840, 3777, 86, - 2848, 2850, 2844, 2842, 2852, 86, 2851, 86, 86, 86, - 2855, 2846, 86, 2853, 2854, 2857, 2845, 2856, 2860, 86, - 2859, 86, 3777, 2849, 2858, 86, 2864, 2848, 86, 86, - - 86, 2852, 2862, 2851, 2861, 2863, 86, 2855, 3777, 86, - 2853, 2854, 86, 86, 2856, 2860, 86, 2859, 86, 2866, - 2865, 2858, 2867, 2864, 86, 2871, 2870, 2872, 2868, 2862, - 86, 2861, 2863, 86, 86, 86, 2869, 2873, 2874, 86, - 2875, 2876, 2878, 86, 86, 2877, 2866, 2865, 86, 2867, - 2880, 86, 86, 2870, 2872, 2868, 86, 2879, 3777, 2881, - 3777, 2882, 3777, 2869, 86, 86, 2883, 86, 2876, 2878, - 86, 2884, 2877, 2886, 2885, 2889, 86, 2880, 86, 86, - 86, 86, 2891, 2888, 2879, 86, 2881, 86, 2882, 86, - 2887, 2890, 2892, 2883, 86, 2893, 86, 2894, 2884, 86, - - 2886, 2885, 86, 2896, 2899, 2895, 2897, 2898, 2900, 86, - 2888, 86, 2902, 2904, 86, 86, 3777, 2887, 2890, 86, - 86, 86, 2893, 86, 86, 2903, 86, 2905, 86, 2901, - 2896, 2899, 2895, 2897, 2898, 2900, 86, 2906, 2909, 86, - 86, 2907, 2908, 86, 86, 86, 2911, 2912, 2910, 3777, - 2913, 86, 2903, 86, 2905, 86, 2901, 2917, 2915, 3777, - 2914, 3777, 171, 2924, 2906, 2909, 86, 2916, 2907, 2908, - 86, 86, 2920, 2911, 2912, 2910, 86, 2913, 86, 86, - 2921, 2918, 2922, 2923, 2917, 2915, 86, 2914, 2919, 2925, - 86, 2926, 86, 86, 2916, 2927, 86, 2928, 2930, 2920, - - 3777, 2932, 2929, 3777, 86, 86, 3777, 2921, 2918, 2922, - 2923, 86, 2931, 86, 86, 2919, 86, 86, 2926, 2933, - 86, 86, 2927, 86, 2928, 2930, 86, 2934, 2932, 2929, - 2935, 2936, 2937, 2938, 2940, 86, 86, 2939, 86, 2931, - 86, 86, 2941, 2942, 3777, 2943, 2933, 2945, 2948, 3777, - 86, 86, 86, 2944, 2934, 2946, 2949, 2935, 2936, 2937, - 2938, 2940, 86, 2950, 2939, 2951, 86, 2955, 86, 2941, - 2942, 86, 2943, 2947, 86, 2948, 86, 2952, 86, 2953, - 2944, 86, 2946, 86, 2954, 2956, 86, 86, 86, 2957, - 2950, 2959, 86, 86, 2955, 2960, 2958, 86, 86, 2962, - - 2947, 2961, 86, 86, 2952, 86, 2953, 2963, 2964, 2967, - 2965, 2954, 2956, 2968, 2969, 3777, 2957, 86, 2959, 86, - 2966, 2970, 2960, 2958, 86, 2977, 2962, 2976, 2961, 86, - 86, 2973, 2975, 2971, 86, 86, 2967, 2965, 2974, 2972, - 86, 86, 86, 86, 2978, 86, 86, 2966, 86, 86, - 2979, 86, 86, 86, 2976, 2980, 2981, 86, 2973, 2975, - 2971, 2983, 86, 2982, 2984, 2974, 2972, 2985, 86, 2986, - 2987, 2978, 86, 2988, 3777, 2990, 2989, 2979, 2993, 86, - 3777, 2991, 2980, 2981, 86, 86, 86, 2994, 2983, 86, - 2982, 2984, 86, 86, 2985, 86, 86, 2987, 2992, 2995, - - 86, 2996, 2990, 2989, 2997, 2993, 86, 2998, 2991, 86, - 2999, 86, 3000, 86, 2994, 86, 3001, 86, 3002, 3005, - 3003, 86, 3006, 86, 3004, 2992, 2995, 3008, 2996, 3007, - 3009, 2997, 86, 86, 2998, 3012, 3010, 2999, 86, 3000, - 86, 86, 86, 3001, 3011, 86, 86, 3003, 86, 3006, - 86, 3004, 3013, 3014, 3008, 3018, 3007, 3009, 86, 3016, - 3015, 3017, 3012, 3010, 3020, 86, 86, 86, 3019, 86, - 3021, 3011, 86, 3023, 86, 86, 3022, 3777, 3024, 86, - 3014, 3025, 3018, 3027, 3026, 86, 3016, 3015, 3017, 3029, - 3028, 86, 86, 3033, 86, 3019, 86, 3021, 3030, 3031, - - 3023, 3035, 3038, 3022, 86, 3024, 3032, 86, 86, 86, - 86, 3026, 86, 86, 86, 3034, 3029, 3028, 3036, 3037, - 86, 86, 3042, 3039, 86, 3030, 3031, 86, 3035, 86, - 3040, 3045, 3046, 3032, 3041, 3043, 86, 86, 3044, 86, - 86, 3048, 3034, 3047, 86, 3036, 3037, 3049, 86, 3042, - 3039, 3050, 3053, 86, 3051, 86, 86, 3040, 86, 3046, - 3052, 3041, 3043, 3058, 3054, 3044, 3055, 86, 86, 86, - 3047, 86, 86, 86, 3049, 3056, 3057, 3059, 3050, 3053, - 3060, 3051, 86, 3061, 86, 86, 3062, 3052, 86, 3063, - 3058, 3054, 86, 3055, 86, 3065, 3777, 3064, 3066, 86, - - 3068, 3067, 3056, 3057, 3059, 86, 3069, 3060, 3070, 86, - 86, 86, 3071, 86, 3073, 86, 3063, 3072, 86, 3075, - 3074, 3076, 171, 86, 3064, 3066, 86, 3068, 3067, 3078, - 3079, 3077, 3080, 3069, 86, 3085, 3092, 3081, 3082, 3071, - 86, 3073, 86, 86, 3072, 86, 86, 3074, 86, 3083, - 3084, 3086, 3088, 3087, 86, 3093, 86, 3079, 3077, 3096, - 86, 3089, 3090, 86, 86, 3082, 3091, 86, 86, 3094, - 86, 86, 86, 86, 86, 86, 3083, 3084, 3086, 3088, - 3087, 86, 3095, 3097, 3098, 3100, 86, 86, 3089, 3090, - 3099, 86, 3777, 3091, 3101, 3104, 3094, 86, 3102, 3105, - - 86, 3103, 3111, 86, 86, 3108, 86, 3110, 3113, 3095, - 3097, 3098, 3100, 86, 86, 3106, 86, 3099, 3107, 3109, - 86, 3101, 3104, 86, 86, 3102, 3105, 3114, 3103, 3111, - 86, 86, 3108, 86, 3110, 3112, 86, 86, 3119, 3115, - 86, 3120, 3106, 3116, 86, 3107, 3109, 86, 86, 3117, - 86, 3118, 3121, 3122, 3114, 3123, 86, 3124, 3777, 86, - 86, 86, 3112, 3125, 3128, 86, 3115, 3126, 3120, 3127, - 3116, 86, 3777, 86, 3130, 86, 3117, 3132, 3118, 3121, - 3122, 86, 3123, 86, 3124, 86, 86, 3129, 3133, 3135, - 3125, 86, 3131, 3136, 3126, 86, 3127, 3138, 3777, 86, - - 86, 3130, 3137, 3134, 3132, 86, 86, 3139, 3140, 3141, - 86, 3142, 3777, 86, 3129, 86, 3144, 3145, 3143, 3131, - 3146, 86, 3147, 3777, 3138, 86, 3151, 3148, 86, 3137, - 3134, 86, 3149, 3777, 86, 86, 3141, 3153, 3142, 86, - 86, 86, 3150, 3144, 3145, 3143, 86, 3154, 3152, 3147, - 86, 3155, 86, 86, 3148, 86, 86, 3156, 3157, 3149, - 86, 86, 3158, 86, 3153, 3159, 3161, 3160, 3162, 3150, - 3163, 3777, 3164, 3170, 3154, 3152, 3165, 3167, 86, 86, - 86, 3166, 3168, 3174, 3156, 86, 86, 3169, 86, 86, - 86, 3173, 86, 3161, 3160, 3162, 86, 86, 86, 3164, - - 3170, 3175, 86, 3165, 3171, 3172, 3176, 3178, 3166, 86, - 86, 86, 86, 3177, 3169, 3179, 3180, 86, 3173, 3183, - 3182, 86, 3184, 3185, 3186, 3187, 3181, 86, 86, 86, - 3188, 3171, 3172, 86, 3178, 86, 86, 86, 3191, 3192, - 3177, 3194, 3179, 86, 86, 3189, 86, 3182, 86, 3184, - 86, 3186, 86, 3181, 86, 3190, 3193, 3188, 3195, 3196, - 3199, 3198, 3200, 3201, 3197, 86, 86, 86, 86, 86, - 86, 3202, 3189, 86, 3203, 3204, 86, 3205, 3206, 86, - 86, 3211, 3190, 3193, 86, 3195, 3208, 3199, 3198, 3200, - 3201, 86, 3207, 3209, 3210, 86, 3212, 3213, 86, 3217, - - 86, 3203, 3204, 86, 86, 3206, 86, 86, 3211, 3214, - 86, 86, 86, 3208, 3218, 3216, 3215, 3219, 86, 3207, - 3209, 3210, 86, 3212, 3213, 86, 3217, 3220, 3224, 3223, - 86, 86, 3222, 3225, 3227, 3221, 3214, 86, 3226, 3228, - 3229, 86, 3216, 3215, 3219, 86, 3230, 86, 86, 3231, - 3236, 86, 3232, 3777, 3220, 3224, 3223, 3233, 3237, 3222, - 3234, 86, 3221, 3235, 3238, 86, 86, 3229, 3239, 86, - 3240, 86, 3777, 86, 3242, 86, 3231, 3236, 86, 3232, - 86, 3241, 3244, 86, 3233, 3237, 86, 3234, 86, 86, - 3235, 3238, 3243, 3245, 86, 3239, 86, 3240, 3246, 3247, - - 86, 3242, 3249, 3248, 86, 86, 86, 3250, 3241, 3244, - 86, 86, 3251, 3253, 3254, 3252, 3255, 3257, 3259, 3243, - 3245, 3777, 3256, 3261, 3260, 3246, 3247, 86, 3258, 86, - 3248, 86, 3264, 3268, 86, 86, 86, 3269, 86, 3251, - 86, 3254, 3252, 3255, 86, 86, 86, 3262, 86, 3256, - 86, 3260, 3263, 3265, 3266, 3258, 3777, 3267, 3777, 86, - 86, 3272, 3270, 3274, 86, 86, 86, 3273, 3271, 86, - 86, 86, 86, 3276, 3262, 86, 3280, 3283, 3277, 3263, - 3265, 3266, 3278, 86, 3267, 86, 86, 3777, 3272, 3270, - 3274, 3275, 3279, 3282, 3273, 3271, 86, 3285, 86, 86, - - 3281, 3284, 3289, 3280, 86, 86, 3290, 3288, 3286, 3278, - 86, 3287, 86, 86, 86, 86, 86, 3293, 3275, 3279, - 3282, 86, 3291, 3292, 86, 3295, 3298, 3281, 3284, 86, - 3296, 3777, 86, 86, 3288, 3286, 3297, 3294, 3287, 86, - 86, 3299, 3304, 86, 3293, 3300, 3310, 86, 86, 3291, - 3311, 86, 3295, 3301, 3302, 86, 86, 3296, 86, 3303, - 86, 3305, 3312, 3297, 3294, 3306, 3777, 3308, 3299, 3304, - 3309, 3307, 3300, 86, 3315, 86, 86, 86, 3313, 86, - 3301, 3302, 86, 86, 86, 86, 3303, 3316, 3305, 86, - 3318, 3317, 3306, 86, 3308, 3314, 86, 3309, 3307, 3319, - - 3320, 3315, 86, 3322, 3321, 3313, 3324, 3326, 3328, 86, - 3323, 3325, 86, 86, 3316, 3777, 86, 3318, 86, 3329, - 86, 86, 3314, 86, 3777, 3330, 3319, 86, 86, 3331, - 3322, 3321, 3327, 3324, 86, 86, 3332, 3323, 3325, 86, - 3333, 3334, 86, 3335, 3337, 3777, 3329, 86, 86, 3777, - 3336, 86, 3330, 86, 3343, 86, 3331, 86, 3338, 3327, - 3339, 3340, 86, 3332, 3342, 86, 3341, 3333, 3334, 3777, - 3335, 86, 86, 3345, 86, 86, 3344, 3336, 3349, 3346, - 3350, 3343, 86, 3347, 86, 3338, 3353, 3339, 3340, 86, - 86, 3342, 86, 3341, 3354, 3348, 3352, 86, 86, 3351, - - 3345, 86, 86, 3344, 86, 3349, 3346, 3350, 86, 3355, - 3347, 3356, 3358, 86, 3359, 3360, 3357, 86, 3361, 3363, - 3364, 86, 3348, 3352, 3362, 86, 3351, 3365, 3366, 3367, - 86, 86, 3777, 3369, 3371, 86, 3355, 3368, 86, 3358, - 86, 3359, 86, 86, 3372, 86, 86, 3364, 3374, 3777, - 86, 3362, 86, 3373, 3365, 3366, 3367, 86, 3370, 86, - 86, 3371, 3375, 3378, 3368, 86, 3376, 3380, 3377, 3379, - 86, 86, 3381, 3383, 3387, 86, 86, 3777, 86, 3382, - 3373, 86, 3777, 3385, 3388, 3370, 86, 3384, 86, 3375, - 3378, 3389, 86, 3376, 86, 3377, 3379, 3386, 86, 3393, - - 3390, 86, 3391, 86, 86, 86, 3382, 86, 3397, 86, - 3385, 86, 3394, 3395, 3384, 86, 86, 3396, 3389, 3398, - 86, 3392, 3777, 3400, 3386, 3399, 3393, 3390, 3404, 86, - 86, 3401, 86, 3402, 86, 3397, 3405, 3403, 3406, 3394, - 3395, 3407, 3408, 86, 3409, 86, 3398, 3410, 3392, 86, - 86, 86, 3399, 3411, 86, 3404, 3412, 86, 3401, 3413, - 3402, 86, 86, 3405, 3403, 3406, 3414, 3415, 86, 86, - 3416, 3409, 3419, 86, 3420, 86, 3421, 3424, 86, 86, - 3411, 3417, 3418, 3412, 3423, 86, 86, 3425, 86, 86, - 3422, 86, 86, 3414, 3415, 86, 3426, 3427, 86, 86, - - 3428, 3420, 86, 3421, 86, 3429, 3430, 86, 3417, 3418, - 3434, 3423, 3431, 3432, 3425, 86, 3433, 3422, 3435, 3436, - 3441, 3438, 3439, 3426, 3427, 3777, 86, 86, 3442, 3437, - 3440, 86, 86, 86, 86, 3443, 86, 86, 86, 3431, - 3432, 3445, 3444, 3433, 3446, 86, 86, 86, 86, 3439, - 86, 3447, 86, 86, 3452, 3442, 3437, 3440, 3448, 86, - 3449, 3451, 86, 86, 3450, 86, 86, 3453, 86, 3444, - 3457, 86, 86, 3454, 86, 3455, 3456, 86, 3447, 3459, - 86, 3452, 3460, 86, 3461, 3448, 3458, 3449, 3451, 86, - 3462, 3450, 3463, 3465, 86, 3469, 3466, 3457, 3464, 86, - - 3454, 86, 3455, 3456, 86, 86, 86, 86, 3467, 86, - 3468, 3461, 3470, 3458, 3471, 3472, 86, 3462, 86, 3473, - 3465, 3475, 86, 3466, 86, 3464, 3476, 3477, 86, 3474, - 86, 3497, 3478, 3777, 3551, 3467, 86, 3468, 3479, 86, - 86, 3471, 3472, 3480, 86, 3481, 3482, 3483, 3475, 86, - 86, 86, 86, 86, 3477, 86, 3474, 3484, 3485, 3478, - 86, 3486, 86, 86, 3487, 3479, 86, 3489, 86, 86, - 3480, 86, 3481, 3482, 3483, 3488, 86, 86, 86, 3490, - 3777, 3494, 86, 3493, 3484, 3485, 3491, 3492, 3486, 86, - 86, 3487, 3496, 3495, 3489, 3498, 86, 3499, 3777, 86, - - 3502, 3500, 3488, 86, 86, 3503, 3490, 3501, 3494, 3506, - 3493, 3505, 3504, 3491, 3492, 86, 3509, 86, 3507, 3496, - 3495, 86, 3498, 86, 3499, 86, 3511, 86, 3500, 3508, - 3510, 3516, 86, 3520, 3501, 86, 86, 86, 3505, 3504, - 86, 3519, 86, 86, 3521, 3507, 3512, 3513, 3514, 3515, - 3517, 3518, 3777, 86, 3522, 86, 3508, 3510, 86, 3524, - 3520, 3523, 86, 3525, 86, 3526, 3527, 3528, 3519, 3530, - 86, 3521, 86, 86, 86, 86, 3529, 86, 3531, 86, - 3534, 86, 3532, 3533, 3536, 86, 3524, 86, 3523, 86, - 86, 86, 3526, 3527, 3528, 3535, 86, 3538, 86, 3539, - - 86, 3537, 86, 3529, 3540, 3531, 86, 3534, 3542, 3532, - 3533, 3536, 3541, 86, 3543, 3544, 3546, 3545, 86, 3777, - 3549, 86, 3535, 3559, 3538, 3550, 3539, 3777, 3537, 86, - 86, 86, 3555, 3547, 86, 3542, 3548, 3553, 86, 3541, - 3554, 86, 86, 3546, 3545, 3552, 86, 86, 3556, 86, - 3557, 86, 86, 3558, 86, 86, 3561, 3560, 86, 3555, - 3547, 3562, 3563, 3548, 3553, 3564, 3565, 3554, 3566, 3567, - 86, 3570, 3552, 3568, 86, 3556, 3569, 3557, 86, 3571, - 86, 86, 3572, 86, 3560, 86, 3573, 86, 86, 3563, - 3574, 86, 3564, 86, 3575, 3566, 86, 3576, 86, 3577, - - 3568, 3578, 86, 3569, 3579, 3580, 86, 3581, 3583, 86, - 3586, 3582, 3584, 86, 3588, 3585, 3593, 86, 3589, 86, - 3592, 86, 86, 86, 86, 3587, 86, 86, 3578, 86, - 86, 3579, 86, 86, 86, 3583, 3590, 86, 3582, 3584, - 3591, 86, 3585, 86, 3594, 3589, 86, 3592, 3595, 3596, - 86, 3777, 3587, 3597, 3601, 86, 86, 3599, 86, 3598, - 86, 3600, 3602, 3590, 3605, 3604, 3603, 3591, 3608, 3777, - 86, 3594, 86, 3606, 3607, 86, 3596, 86, 86, 86, - 3597, 3601, 86, 86, 3599, 86, 3598, 86, 3600, 86, - 3609, 3605, 3604, 3603, 86, 3608, 3610, 3611, 3777, 3612, - - 3606, 3607, 3613, 86, 3614, 3615, 3616, 3617, 86, 86, - 3618, 86, 3619, 3620, 3621, 3624, 3622, 3609, 3623, 86, - 86, 86, 3646, 3610, 3611, 86, 3612, 86, 3625, 3613, - 86, 3614, 3615, 3616, 3617, 86, 86, 86, 86, 86, - 86, 86, 3624, 3622, 3626, 3623, 3627, 3628, 3629, 86, - 86, 3630, 3631, 3777, 3632, 3625, 3635, 86, 3633, 3634, - 3637, 3777, 86, 86, 86, 86, 3636, 86, 3641, 3651, - 86, 3626, 86, 3627, 3628, 3629, 86, 86, 3630, 3631, - 86, 3632, 3638, 3635, 3639, 3633, 3634, 3637, 3640, 3643, - 86, 3642, 3644, 3636, 86, 3641, 86, 86, 3645, 3648, - - 3647, 3650, 86, 86, 86, 3653, 86, 86, 86, 3638, - 3649, 3639, 3652, 3655, 86, 3640, 3643, 3654, 3642, 3644, - 3656, 86, 3658, 86, 3659, 3645, 3648, 3647, 3650, 86, - 86, 3660, 86, 3657, 3661, 3664, 3662, 3649, 86, 3652, - 86, 86, 3663, 86, 3654, 3668, 3665, 86, 86, 3658, - 3666, 3659, 3667, 86, 86, 3669, 86, 3670, 3660, 86, - 3657, 3661, 86, 3662, 3671, 86, 3672, 86, 3673, 3663, - 3675, 3674, 86, 3665, 86, 3676, 3677, 3666, 86, 3667, - 3678, 3679, 3669, 86, 86, 3680, 3681, 3686, 86, 86, - 3683, 86, 3682, 86, 3684, 86, 3685, 3675, 3674, 3777, - - 86, 86, 86, 3677, 3689, 86, 3688, 3678, 86, 86, - 3687, 86, 3680, 3681, 3686, 3690, 3693, 3692, 86, 3682, - 3777, 3691, 86, 3685, 86, 3695, 86, 86, 86, 86, - 3694, 86, 86, 3688, 3696, 3698, 3699, 3687, 3697, 3700, - 3777, 3703, 86, 3693, 3692, 3701, 86, 86, 3691, 86, - 86, 3702, 3695, 86, 3707, 3777, 86, 3694, 3708, 3777, - 3705, 3696, 3698, 3699, 3704, 3697, 3700, 86, 86, 86, - 3709, 86, 3701, 86, 3706, 3715, 3777, 3710, 3702, 3777, - 86, 86, 86, 3711, 3712, 3708, 3713, 3705, 3714, 3716, - 3717, 3704, 3718, 3724, 3721, 3719, 86, 3777, 3777, 3777, - - 3777, 3706, 86, 86, 3710, 86, 86, 86, 86, 3727, - 3711, 3712, 86, 3713, 86, 3714, 86, 3717, 86, 86, - 3720, 3721, 3719, 3722, 3723, 86, 3725, 3726, 86, 3728, - 3729, 86, 86, 3730, 86, 86, 3727, 3731, 3732, 3777, - 3735, 86, 3738, 86, 3733, 3777, 86, 3720, 86, 3734, - 3722, 3723, 86, 3725, 3726, 3736, 86, 3729, 3737, 86, - 3730, 3739, 3740, 86, 3731, 3732, 86, 3735, 3741, 3738, - 86, 3733, 86, 3742, 3743, 3745, 3734, 86, 3744, 3746, - 3749, 3747, 3736, 86, 3748, 3737, 3777, 86, 3739, 3740, - 3750, 3755, 3751, 3753, 86, 3741, 86, 3777, 86, 86, - - 3742, 3743, 3745, 86, 3757, 3744, 86, 86, 3747, 86, - 86, 3748, 86, 3752, 3754, 86, 3756, 3750, 86, 3751, - 3753, 86, 86, 3758, 86, 3759, 86, 3760, 3777, 3761, - 3762, 3757, 3765, 86, 3763, 86, 3764, 3766, 3768, 3777, - 3752, 3754, 86, 3756, 86, 86, 3767, 3769, 3770, 3771, - 3758, 3775, 3759, 3776, 3760, 86, 3761, 86, 86, 3765, - 3772, 3763, 3773, 3764, 86, 86, 86, 3777, 86, 3774, - 86, 86, 3777, 3767, 86, 3770, 3771, 86, 86, 3777, - 86, 3777, 86, 3777, 3777, 3777, 3777, 3772, 3777, 3773, - 3777, 3777, 3777, 3777, 3777, 3777, 3774, 47, 47, 47, - - 47, 47, 47, 47, 52, 52, 52, 52, 52, 52, - 52, 57, 57, 57, 57, 57, 57, 57, 63, 63, - 63, 63, 63, 63, 63, 68, 68, 68, 68, 68, - 68, 68, 74, 74, 74, 74, 74, 74, 74, 80, - 80, 80, 80, 80, 80, 80, 89, 89, 3777, 89, - 89, 89, 89, 161, 161, 3777, 3777, 3777, 161, 161, - 163, 163, 3777, 3777, 163, 3777, 163, 165, 3777, 3777, - 3777, 3777, 3777, 165, 168, 168, 3777, 3777, 3777, 168, - 168, 170, 3777, 3777, 3777, 3777, 3777, 170, 172, 172, - 3777, 172, 172, 172, 172, 175, 3777, 3777, 3777, 3777, - - 3777, 175, 178, 178, 3777, 3777, 3777, 178, 178, 90, - 90, 3777, 90, 90, 90, 90, 17, 3777, 3777, 3777, - 3777, 3777, 3777, 3777, 3777, 3777, 3777, 3777, 3777, 3777, - 3777, 3777, 3777, 3777, 3777, 3777, 3777, 3777, 3777, 3777, - 3777, 3777, 3777, 3777, 3777, 3777, 3777, 3777, 3777, 3777, - 3777, 3777, 3777, 3777, 3777, 3777, 3777, 3777, 3777, 3777, - 3777, 3777, 3777, 3777, 3777, 3777, 3777, 3777, 3777, 3777, - 3777, 3777, 3777, 3777, 3777, 3777, 3777, 3777, 3777, 3777, - 3777, 3777, 3777 + 86, 881, 887, 890, 86, 895, 879, 888, 3806, 3806, + 3806, 86, 86, 86, 891, 883, 885, 86, 86, 896, + 886, 892, 897, 898, 899, 884, 889, 86, 893, 894, + 890, 86, 900, 901, 86, 905, 86, 86, 909, 903, + + 86, 891, 902, 910, 3806, 86, 896, 911, 892, 897, + 898, 899, 3806, 86, 904, 893, 894, 906, 86, 900, + 901, 907, 86, 86, 913, 915, 903, 86, 914, 902, + 86, 908, 86, 86, 911, 912, 86, 86, 917, 916, + 922, 904, 3806, 86, 906, 86, 923, 86, 907, 86, + 86, 913, 915, 920, 918, 914, 924, 921, 908, 919, + 932, 86, 912, 86, 86, 917, 916, 925, 86, 86, + 926, 3806, 86, 923, 86, 934, 927, 3806, 931, 86, + 920, 918, 86, 924, 921, 86, 919, 928, 86, 929, + 86, 935, 86, 933, 925, 86, 936, 926, 930, 939, + + 86, 937, 934, 927, 86, 931, 86, 86, 3806, 938, + 940, 3806, 971, 86, 928, 942, 929, 86, 935, 86, + 933, 941, 86, 936, 86, 930, 939, 945, 937, 943, + 944, 946, 86, 947, 948, 86, 938, 940, 86, 86, + 949, 950, 942, 952, 86, 957, 951, 86, 941, 953, + 954, 86, 955, 86, 945, 86, 943, 944, 946, 86, + 947, 948, 959, 86, 86, 86, 86, 949, 950, 956, + 952, 958, 957, 951, 86, 960, 953, 954, 963, 955, + 86, 961, 86, 962, 964, 86, 86, 966, 3806, 959, + 965, 967, 3806, 972, 969, 3806, 956, 86, 958, 86, + + 86, 86, 960, 968, 970, 963, 86, 86, 961, 86, + 962, 964, 86, 973, 966, 171, 86, 965, 967, 86, + 972, 969, 974, 975, 976, 989, 977, 981, 978, 980, + 968, 970, 3806, 979, 3806, 86, 86, 86, 86, 982, + 973, 986, 86, 984, 987, 86, 86, 983, 985, 974, + 975, 976, 86, 977, 86, 978, 980, 86, 992, 988, + 979, 990, 86, 86, 993, 86, 982, 86, 986, 86, + 991, 987, 996, 995, 983, 86, 994, 86, 86, 86, + 997, 86, 86, 999, 1009, 992, 988, 1001, 990, 998, + 3806, 993, 86, 1000, 86, 86, 86, 991, 1011, 86, + + 995, 3806, 1058, 994, 86, 1012, 1013, 997, 86, 86, + 999, 1009, 3806, 1014, 1001, 1015, 998, 1016, 86, 3806, + 1000, 1002, 1018, 86, 1003, 1011, 1017, 86, 1004, 86, + 1019, 1005, 1012, 1013, 1020, 86, 86, 86, 1006, 1007, + 1014, 1008, 1015, 1021, 1016, 86, 86, 1025, 1002, 1018, + 1035, 1003, 3806, 1017, 1022, 1004, 86, 1019, 1005, 86, + 86, 1020, 1023, 86, 1024, 1006, 1007, 1034, 1008, 1073, + 1021, 86, 86, 1037, 86, 86, 1079, 1035, 1036, 86, + 1039, 1022, 86, 86, 86, 3806, 3806, 3806, 1038, 1023, + 1040, 1024, 1026, 1027, 1034, 1028, 1043, 3806, 1029, 1042, + + 1037, 86, 1044, 1030, 86, 1036, 1041, 1039, 86, 1031, + 1032, 86, 1033, 86, 1047, 1038, 1045, 1040, 86, 1026, + 1027, 86, 1028, 1043, 86, 1029, 1042, 1050, 86, 1044, + 1030, 1051, 1046, 1041, 86, 1048, 1031, 1032, 86, 1033, + 1049, 1047, 1053, 1045, 1052, 3806, 1054, 86, 1055, 3806, + 1056, 1059, 3806, 1060, 1050, 3806, 86, 86, 1051, 1046, + 1057, 1062, 3806, 1083, 86, 3806, 1065, 86, 86, 1053, + 86, 1052, 86, 1054, 86, 1055, 86, 1056, 1059, 1063, + 1060, 1061, 86, 1064, 86, 86, 86, 1057, 1062, 86, + 1066, 86, 1067, 1065, 1068, 86, 1069, 1071, 1072, 1075, + + 1070, 3806, 1085, 86, 86, 3806, 1063, 86, 1061, 86, + 1064, 1074, 86, 1076, 1078, 1084, 86, 1066, 1077, 1067, + 1080, 1068, 86, 1069, 1071, 1072, 86, 1070, 1082, 86, + 1086, 1081, 1087, 86, 86, 86, 86, 86, 1074, 86, + 1089, 1078, 1084, 1088, 1090, 86, 1092, 1080, 1096, 3806, + 1094, 1091, 1093, 86, 86, 1082, 1104, 1086, 1081, 1087, + 86, 86, 86, 1095, 1100, 86, 1102, 86, 86, 1098, + 1088, 86, 86, 1092, 1097, 1096, 1099, 1094, 1091, 1093, + 86, 1101, 1103, 86, 86, 86, 86, 1106, 86, 1105, + 1095, 86, 1107, 1102, 1108, 86, 1098, 1109, 86, 86, + + 86, 1097, 1112, 1099, 1111, 1110, 1113, 3806, 1101, 86, + 86, 3806, 86, 1114, 1106, 1115, 1105, 86, 1117, 1107, + 86, 1108, 1122, 1116, 1109, 86, 86, 1118, 86, 1112, + 86, 1111, 1110, 1113, 1119, 86, 86, 3806, 1121, 1120, + 1114, 86, 1115, 1123, 1124, 1117, 1125, 1130, 86, 1122, + 1116, 86, 86, 1126, 1118, 86, 86, 3806, 1127, 1131, + 1128, 1133, 3806, 1132, 86, 1121, 86, 86, 1129, 86, + 1123, 1124, 86, 1125, 1130, 1134, 1135, 3806, 1145, 1140, + 1126, 86, 1136, 86, 86, 1127, 86, 1128, 1133, 86, + 1132, 1138, 1137, 1139, 1142, 1129, 86, 86, 86, 86, + + 86, 1141, 1134, 1135, 1143, 86, 1140, 1144, 1146, 1136, + 86, 1148, 1147, 86, 1152, 86, 1149, 86, 1138, 1137, + 1139, 1142, 86, 1150, 86, 1151, 86, 86, 1141, 1153, + 1155, 1143, 1154, 86, 1144, 1146, 86, 1156, 1148, 1147, + 1157, 1152, 86, 1149, 1158, 86, 86, 86, 1159, 1160, + 1150, 1161, 1151, 1163, 86, 86, 1153, 86, 86, 1154, + 1162, 86, 86, 1164, 1156, 86, 1165, 1157, 86, 1166, + 86, 1158, 1167, 86, 3806, 1159, 1160, 1169, 1161, 1168, + 1163, 1170, 1172, 1173, 1171, 3806, 3806, 1162, 1181, 1174, + 1164, 86, 86, 1165, 86, 1175, 1178, 3806, 1180, 1179, + + 1182, 86, 1176, 86, 86, 86, 1168, 1183, 1170, 86, + 1177, 1171, 86, 1185, 86, 86, 1174, 86, 86, 1184, + 86, 1186, 1175, 1178, 86, 1180, 1179, 86, 86, 1176, + 1188, 86, 86, 1190, 1183, 1187, 1189, 1177, 1194, 1196, + 1185, 1191, 86, 1195, 1197, 86, 1184, 1198, 3806, 3806, + 3806, 86, 3806, 86, 1192, 86, 1193, 86, 1202, 1199, + 1190, 1247, 1187, 1189, 86, 86, 1196, 86, 1191, 1200, + 171, 1197, 1201, 86, 1198, 1204, 86, 1205, 86, 1203, + 86, 1192, 1206, 1193, 86, 1202, 1199, 86, 1209, 1207, + 86, 1208, 3806, 86, 86, 86, 1200, 1218, 86, 1201, + + 3806, 1216, 1204, 86, 1205, 3806, 1203, 1217, 1220, 1206, + 3806, 1221, 3806, 86, 1219, 1209, 1207, 1224, 1208, 1210, + 86, 1211, 3806, 86, 1218, 1212, 86, 1213, 1216, 86, + 1222, 1223, 1214, 86, 1217, 86, 1225, 1215, 1221, 1226, + 1228, 1219, 1227, 86, 1224, 1229, 1210, 1230, 1211, 86, + 1234, 1240, 1212, 86, 1213, 86, 1232, 1222, 1223, 1214, + 1231, 86, 86, 1225, 1215, 86, 1226, 1237, 1233, 1227, + 1235, 1238, 86, 86, 1230, 1239, 1242, 1234, 86, 86, + 1236, 1243, 86, 1232, 1241, 1245, 3806, 1231, 86, 86, + 86, 1244, 86, 86, 1237, 1233, 1248, 1235, 1238, 86, + + 1246, 1251, 1239, 1242, 1249, 1252, 86, 1236, 1243, 1253, + 86, 1241, 1245, 86, 1254, 3806, 1263, 86, 1244, 1262, + 3806, 3806, 86, 86, 1264, 1265, 1267, 1246, 86, 3806, + 1266, 86, 1252, 86, 86, 1268, 1253, 86, 86, 1270, + 86, 1254, 1255, 1263, 3806, 1269, 1262, 1256, 86, 1257, + 86, 1264, 1265, 1267, 86, 1258, 86, 1266, 86, 1274, + 1259, 1260, 1268, 1272, 1271, 1273, 1270, 1261, 86, 1255, + 86, 86, 1269, 86, 1256, 1275, 1257, 86, 1276, 3806, + 3806, 1277, 1258, 1285, 1278, 1282, 1274, 1259, 1260, 1280, + 1272, 1271, 1273, 86, 1261, 1279, 86, 1283, 86, 1286, + + 86, 1281, 1284, 1288, 1289, 1276, 86, 86, 1277, 86, + 86, 1278, 86, 1287, 1290, 86, 1280, 1291, 86, 3806, + 86, 86, 1279, 86, 1283, 86, 1286, 1292, 1281, 1284, + 1288, 1289, 1293, 1294, 1295, 86, 1296, 1297, 3806, 86, + 1287, 3806, 1300, 1299, 1291, 86, 86, 3806, 1298, 86, + 86, 86, 1306, 1301, 1292, 86, 86, 1303, 1304, 1293, + 1294, 1295, 3806, 1305, 1297, 86, 86, 1302, 86, 1300, + 1299, 1308, 86, 86, 86, 1298, 86, 1307, 1309, 1306, + 1301, 86, 1310, 3806, 1303, 1304, 1311, 86, 1313, 86, + 1305, 1315, 1314, 86, 1302, 86, 1312, 3806, 86, 86, + + 1318, 1316, 1317, 86, 1307, 1309, 1324, 1323, 1319, 1310, + 86, 86, 86, 1311, 86, 1313, 1320, 1321, 1315, 1322, + 1325, 1326, 1327, 1312, 86, 86, 3806, 1318, 1316, 1317, + 86, 1329, 86, 1324, 1323, 1319, 1328, 1331, 86, 86, + 86, 86, 1332, 1320, 1321, 86, 1322, 1335, 86, 1327, + 1330, 1336, 86, 86, 1333, 1337, 1340, 1334, 1329, 86, + 1338, 86, 1339, 1328, 1344, 1345, 3806, 86, 86, 86, + 1341, 1342, 86, 86, 1335, 86, 86, 1330, 1336, 86, + 86, 1333, 1337, 1340, 1334, 86, 1346, 1338, 1343, 1339, + 1347, 3806, 1345, 1349, 1348, 1351, 86, 1341, 1342, 1350, + + 86, 1352, 86, 3806, 3806, 1353, 86, 86, 1354, 1357, + 1364, 1356, 1355, 1360, 3806, 1343, 86, 1347, 86, 86, + 1349, 1348, 1351, 86, 1358, 86, 1350, 86, 1352, 86, + 86, 86, 1353, 1359, 86, 1354, 1357, 1362, 1356, 1355, + 1360, 1361, 86, 1363, 1365, 1366, 86, 1367, 86, 86, + 3806, 1358, 86, 1368, 3806, 1369, 86, 1370, 86, 1371, + 1359, 1373, 1372, 86, 1362, 1374, 86, 86, 1361, 86, + 1363, 86, 1366, 1375, 1367, 1376, 1377, 86, 1380, 86, + 1368, 86, 1369, 1382, 1370, 86, 1371, 1378, 1373, 1372, + 1379, 1381, 1374, 1384, 1383, 1386, 1385, 1387, 1388, 3806, + + 3806, 3806, 86, 86, 1389, 86, 1391, 86, 86, 86, + 86, 1390, 86, 86, 1378, 86, 86, 1379, 1381, 86, + 1384, 1383, 86, 1385, 1387, 86, 1392, 86, 86, 86, + 1394, 1389, 1393, 1391, 1395, 86, 1396, 3806, 1390, 1398, + 86, 1399, 1397, 1400, 1401, 1402, 1405, 1407, 86, 3806, + 3806, 86, 86, 1392, 86, 1403, 86, 1394, 86, 1393, + 86, 1395, 1404, 1396, 86, 1408, 1398, 86, 1399, 1397, + 1400, 1406, 1409, 86, 1407, 1412, 86, 86, 1411, 86, + 86, 86, 1403, 1413, 86, 1416, 1414, 86, 86, 1404, + 1417, 86, 1408, 86, 1418, 1415, 1419, 1420, 1406, 1409, + + 1423, 1421, 1412, 86, 171, 1411, 1427, 1422, 1424, 86, + 1413, 1425, 86, 1414, 86, 86, 86, 1417, 86, 86, + 1426, 1418, 1415, 1419, 1420, 1429, 1430, 1423, 1421, 86, + 86, 3806, 86, 86, 1422, 1424, 1428, 1431, 1425, 1432, + 1433, 3806, 3806, 86, 1434, 3806, 1435, 1426, 1436, 86, + 86, 1440, 1437, 1441, 1438, 1445, 3806, 86, 86, 86, + 1439, 86, 86, 1428, 1431, 86, 1432, 1433, 86, 86, + 1442, 1434, 86, 1435, 1443, 1436, 86, 86, 1440, 1437, + 1441, 1438, 86, 1444, 1447, 1446, 86, 1439, 1449, 1451, + 86, 86, 1450, 1448, 1459, 1452, 86, 1442, 86, 3806, + + 86, 1443, 86, 1456, 1453, 1458, 1454, 86, 1457, 1455, + 1444, 1447, 1446, 86, 3806, 1449, 1451, 86, 1460, 1450, + 1448, 86, 1452, 1462, 1461, 1469, 86, 86, 1465, 1468, + 1456, 1453, 1458, 1454, 86, 1457, 1455, 86, 86, 1466, + 1463, 1467, 1470, 1464, 86, 1460, 86, 86, 86, 86, + 1462, 1461, 86, 1474, 1473, 1465, 1468, 86, 1471, 1472, + 1475, 86, 86, 3806, 86, 1479, 1466, 1463, 1467, 1470, + 1464, 86, 1476, 1478, 3806, 86, 1477, 1481, 1480, 1482, + 86, 1473, 86, 86, 1484, 1471, 1472, 1475, 86, 86, + 1483, 86, 1479, 1485, 86, 86, 86, 1486, 86, 1476, + + 1478, 1487, 1489, 1477, 1481, 1480, 1482, 1488, 86, 86, + 86, 1484, 1490, 1493, 1491, 1492, 1494, 1483, 86, 1495, + 1485, 86, 86, 86, 1486, 86, 1496, 1498, 1487, 1489, + 1497, 1505, 86, 86, 1488, 1499, 86, 86, 1500, 1490, + 1493, 1491, 1492, 1494, 1501, 86, 86, 86, 1502, 1504, + 1503, 86, 86, 1496, 1498, 1509, 86, 1497, 1507, 86, + 1506, 86, 1499, 86, 1510, 1500, 1508, 86, 86, 1512, + 1513, 1501, 1511, 1514, 1530, 1502, 1504, 1503, 86, 86, + 86, 1515, 1509, 86, 1520, 1518, 1516, 1506, 86, 1519, + 86, 1510, 86, 1508, 1517, 1534, 1512, 1513, 86, 1511, + + 1514, 1528, 86, 86, 3806, 1529, 86, 3806, 3806, 1531, + 86, 1520, 1518, 86, 3806, 86, 1519, 3806, 3806, 1532, + 1533, 1517, 1521, 86, 1537, 1538, 1522, 86, 1528, 1523, + 1524, 86, 1529, 1535, 1525, 86, 1531, 1536, 86, 1539, + 1526, 86, 1544, 1545, 1527, 1543, 1532, 1533, 86, 1521, + 86, 1537, 1538, 1522, 86, 86, 1523, 1524, 1546, 86, + 1535, 1525, 1542, 1547, 1536, 86, 1539, 1526, 1540, 86, + 1541, 1527, 1543, 1548, 86, 86, 1549, 1551, 1550, 1552, + 86, 86, 86, 1554, 3806, 1546, 86, 1553, 3806, 1542, + 1547, 86, 86, 1557, 1555, 1540, 1556, 1541, 86, 1564, + + 1548, 1565, 3806, 1549, 1551, 1550, 3806, 86, 86, 1568, + 1563, 86, 86, 1597, 1553, 86, 86, 1566, 1567, 86, + 1557, 1555, 1569, 1556, 1558, 86, 1564, 86, 1565, 1559, + 1572, 1560, 86, 1561, 1571, 1562, 1568, 1563, 1570, 86, + 86, 86, 86, 3806, 3806, 86, 86, 1574, 1573, 1569, + 86, 1558, 1575, 1576, 1577, 1579, 1559, 1572, 1560, 1578, + 1561, 1571, 1562, 1580, 86, 1570, 86, 1581, 1585, 1586, + 1582, 86, 86, 3806, 1584, 1573, 86, 86, 86, 86, + 1576, 1577, 1579, 1583, 1587, 86, 1578, 86, 1588, 1589, + 1580, 86, 1590, 1591, 1581, 86, 1586, 1582, 1593, 86, + + 86, 1584, 86, 1592, 1594, 1596, 86, 86, 1599, 1602, + 1583, 1587, 1600, 86, 86, 1588, 1589, 1598, 86, 1590, + 1591, 86, 1595, 1601, 86, 1593, 1606, 86, 1608, 86, + 1592, 1594, 1596, 86, 86, 86, 1602, 1603, 1604, 1600, + 1605, 3806, 1609, 1614, 1598, 1607, 86, 3806, 86, 1595, + 1601, 1610, 86, 86, 1611, 86, 1612, 1613, 86, 86, + 86, 1616, 86, 86, 1603, 1604, 1617, 1605, 86, 1609, + 86, 86, 1607, 86, 1620, 1615, 1619, 1621, 1610, 1618, + 1622, 1611, 86, 1612, 1613, 1623, 86, 1624, 1616, 3806, + 86, 1625, 3806, 1617, 86, 86, 86, 1627, 1629, 1626, + + 3806, 1620, 1615, 86, 1621, 86, 1618, 1622, 86, 1628, + 1630, 86, 1623, 86, 1624, 1632, 1631, 3806, 1625, 86, + 86, 1634, 86, 1633, 1627, 1629, 1626, 1635, 1640, 86, + 1637, 1636, 1638, 1641, 1642, 1644, 1628, 1630, 86, 86, + 86, 1639, 1632, 1631, 1643, 86, 1645, 86, 1634, 86, + 1633, 86, 86, 1647, 1635, 86, 86, 1637, 1636, 1638, + 86, 1642, 1646, 1648, 86, 86, 86, 86, 1639, 86, + 86, 1643, 1649, 1645, 1650, 1651, 1652, 1655, 1654, 86, + 1647, 86, 1653, 1656, 86, 86, 1657, 1658, 1660, 1646, + 86, 1664, 3806, 86, 171, 1659, 86, 3806, 1668, 1649, + + 1661, 1650, 1651, 1652, 1655, 1654, 1662, 86, 86, 1653, + 1663, 86, 1665, 86, 1658, 86, 1666, 86, 86, 86, + 86, 1667, 1659, 86, 1669, 1668, 1675, 1661, 1670, 1672, + 1671, 86, 86, 1662, 86, 86, 1673, 1663, 86, 1665, + 1674, 1676, 1677, 1666, 1678, 86, 1679, 1684, 1667, 86, + 86, 1669, 86, 86, 1683, 1670, 1672, 1671, 86, 86, + 1680, 1682, 1685, 1673, 86, 1681, 86, 1674, 1676, 1677, + 86, 1678, 86, 1679, 1684, 86, 1691, 1689, 1686, 1687, + 1690, 1683, 1688, 1692, 1693, 1694, 1696, 3806, 1682, 1685, + 86, 86, 86, 1695, 86, 1697, 3806, 86, 3806, 86, + + 1698, 1702, 86, 1691, 1689, 1686, 1687, 1690, 86, 1688, + 1692, 1693, 1701, 1696, 1699, 1703, 86, 86, 1700, 86, + 1695, 86, 86, 86, 1704, 1705, 1706, 86, 1702, 1708, + 1709, 1710, 1707, 86, 86, 1711, 86, 86, 1712, 1701, + 86, 1699, 1703, 86, 86, 1700, 86, 1713, 1716, 3806, + 3806, 1704, 1705, 1706, 86, 1715, 1708, 1709, 1710, 1707, + 1714, 1717, 1711, 86, 86, 1712, 1718, 1719, 1720, 86, + 86, 1721, 1722, 3806, 1713, 86, 86, 86, 1723, 1724, + 86, 86, 1715, 86, 86, 1726, 86, 1714, 1717, 1725, + 1728, 1727, 1730, 1718, 1719, 1720, 1729, 1733, 1721, 1722, + + 86, 86, 86, 86, 1731, 1723, 1724, 86, 1732, 86, + 86, 1735, 1726, 1736, 1734, 86, 1725, 1728, 1727, 1730, + 86, 86, 1737, 1729, 1733, 1739, 1738, 3806, 1740, 1741, + 86, 1731, 1742, 1745, 1743, 1732, 1744, 86, 1735, 86, + 86, 1734, 1746, 86, 1747, 86, 1748, 3806, 1752, 3806, + 86, 86, 1739, 1738, 86, 86, 1741, 1753, 86, 1742, + 1749, 1743, 1755, 1744, 1754, 86, 1758, 3806, 1756, 3806, + 1760, 86, 86, 1748, 86, 86, 86, 1757, 86, 1750, + 86, 1751, 86, 86, 1753, 1759, 86, 1749, 1762, 1755, + 86, 1754, 1761, 1758, 1763, 1756, 86, 1760, 1764, 86, + + 1771, 1765, 1774, 1770, 1757, 86, 1750, 86, 1751, 86, + 86, 86, 1759, 1766, 1775, 1762, 86, 1768, 1767, 1761, + 86, 1763, 1769, 1772, 1773, 1764, 86, 1771, 1765, 1774, + 1770, 86, 86, 1777, 1776, 1778, 86, 1779, 3806, 1781, + 86, 1775, 86, 1780, 86, 86, 1782, 1783, 86, 86, + 1772, 1773, 1785, 86, 1784, 86, 1786, 1788, 1787, 86, + 1777, 1776, 1778, 1789, 86, 86, 1781, 1791, 1790, 86, + 1780, 86, 1792, 1782, 1783, 86, 1796, 1799, 1795, 86, + 86, 1784, 86, 1786, 86, 1787, 86, 1798, 1793, 86, + 1789, 86, 1794, 1802, 1791, 1790, 86, 1797, 1800, 1792, + + 86, 86, 1801, 1796, 1799, 1795, 86, 1803, 86, 86, + 86, 1804, 3806, 86, 1798, 1793, 1807, 1805, 1806, 1794, + 1802, 1808, 1809, 1810, 1797, 1800, 1814, 1815, 1822, 1801, + 86, 3806, 3806, 86, 86, 86, 1816, 86, 86, 86, + 86, 86, 1811, 1807, 1805, 1806, 1812, 1820, 1808, 1809, + 1810, 86, 1817, 1814, 1815, 1818, 1821, 1819, 86, 1813, + 86, 1824, 86, 1816, 86, 1823, 1825, 86, 86, 1811, + 1827, 3806, 1826, 1812, 86, 86, 3806, 86, 86, 1817, + 1828, 1830, 1818, 1821, 1819, 1833, 1813, 1831, 1824, 1829, + 86, 1834, 1823, 86, 86, 1832, 86, 1827, 86, 1826, + + 1835, 1836, 86, 86, 1837, 86, 3806, 1828, 1830, 86, + 86, 1839, 1838, 1840, 1831, 1842, 1829, 86, 86, 1841, + 1843, 1844, 1832, 1851, 1845, 1846, 86, 1835, 3806, 1847, + 1848, 1837, 1853, 86, 86, 86, 86, 86, 1839, 1838, + 86, 86, 86, 1849, 86, 86, 1841, 1843, 86, 86, + 1851, 1845, 1846, 1850, 86, 1852, 1847, 1848, 86, 1853, + 86, 1854, 86, 1855, 1856, 1857, 1858, 1859, 1860, 86, + 1849, 1861, 86, 86, 1862, 1864, 3806, 86, 1865, 86, + 1850, 1866, 1852, 86, 1863, 86, 1871, 86, 1854, 86, + 1855, 1856, 1857, 1858, 86, 1860, 86, 1867, 1861, 86, + + 1868, 1862, 1864, 1869, 1870, 1865, 1872, 86, 1866, 86, + 86, 1863, 1873, 86, 1874, 1875, 86, 3806, 1876, 86, + 86, 1877, 1880, 1878, 1867, 86, 86, 1868, 1879, 86, + 1869, 1870, 1881, 1872, 1882, 1884, 86, 86, 1883, 1873, + 86, 1874, 1875, 1885, 86, 1876, 86, 1886, 1877, 1880, + 1878, 1887, 86, 1890, 171, 1879, 86, 86, 86, 86, + 1893, 1882, 1884, 1892, 86, 1883, 86, 1888, 1889, 1891, + 1885, 86, 1895, 1898, 1886, 86, 1894, 1896, 1887, 86, + 1890, 86, 1901, 1897, 86, 1900, 86, 1893, 1899, 86, + 1892, 86, 1902, 1904, 1888, 1889, 1891, 1906, 86, 1895, + + 86, 1903, 3806, 1894, 1896, 1907, 86, 86, 1908, 1901, + 1897, 1905, 1900, 1909, 1910, 1899, 1911, 86, 86, 1902, + 3806, 86, 86, 86, 86, 86, 1912, 86, 1903, 86, + 1913, 1914, 1907, 1915, 86, 1908, 1916, 1917, 1905, 1918, + 86, 1910, 1919, 1911, 1920, 1928, 1921, 86, 86, 3806, + 86, 3806, 86, 1912, 86, 1923, 1922, 1913, 1914, 86, + 1915, 1932, 86, 1916, 1917, 86, 1918, 1924, 86, 1919, + 86, 1920, 86, 1921, 86, 1925, 1929, 86, 1926, 86, + 1930, 1936, 1923, 1922, 1933, 1934, 1935, 86, 1932, 1937, + 1927, 3806, 86, 1938, 1924, 1939, 1931, 1940, 86, 86, + + 1943, 1950, 1925, 1929, 86, 1926, 86, 1930, 86, 1941, + 86, 1933, 1934, 1935, 1942, 1944, 1937, 1927, 1947, 86, + 1945, 1946, 1948, 1931, 1940, 86, 86, 86, 1949, 86, + 86, 1951, 86, 86, 86, 86, 1941, 86, 1952, 1953, + 86, 1942, 1944, 1954, 1957, 1947, 1955, 1945, 1946, 1948, + 86, 3806, 86, 1959, 1956, 1949, 1958, 1960, 1963, 1962, + 1961, 86, 86, 86, 86, 86, 1953, 86, 1970, 1964, + 86, 86, 86, 1955, 3806, 86, 86, 1965, 86, 1966, + 1959, 1956, 86, 1958, 1960, 1963, 1962, 1961, 1967, 1968, + 86, 86, 86, 86, 1969, 1970, 1964, 86, 1972, 1971, + + 1975, 1976, 1977, 1979, 1965, 1973, 1966, 86, 1974, 86, + 86, 1978, 3806, 1983, 86, 1967, 1968, 86, 86, 3806, + 86, 1969, 86, 86, 1980, 1972, 1971, 1975, 1981, 1977, + 1979, 1984, 1973, 86, 1985, 1974, 1986, 86, 1978, 86, + 1983, 1988, 1987, 86, 1989, 1990, 1982, 1991, 3806, 86, + 1992, 1980, 86, 86, 3806, 1981, 86, 86, 1984, 2004, + 86, 86, 1994, 1986, 86, 1996, 1993, 1995, 1988, 1987, + 86, 1989, 1990, 1982, 1991, 86, 1999, 1992, 1997, 86, + 86, 1998, 2002, 2000, 86, 86, 86, 86, 2001, 1994, + 2003, 2005, 1996, 1993, 1995, 86, 86, 2006, 2007, 2008, + + 2009, 3806, 2010, 1999, 3806, 1997, 2012, 86, 1998, 2002, + 2000, 2011, 86, 2013, 86, 2001, 86, 2003, 86, 86, + 2014, 2016, 3806, 86, 2006, 2007, 2008, 86, 86, 2010, + 2015, 2017, 2019, 2012, 2018, 86, 86, 3806, 2011, 86, + 2013, 2020, 2025, 86, 86, 86, 2024, 2014, 2016, 86, + 86, 2021, 2023, 2026, 2022, 86, 2027, 2015, 2017, 2019, + 2028, 2018, 2030, 2029, 86, 2033, 2035, 86, 2020, 86, + 2034, 86, 2031, 2024, 86, 2032, 86, 86, 2021, 2023, + 86, 2022, 2037, 2027, 86, 86, 86, 2028, 86, 2030, + 2029, 2036, 2038, 2035, 2039, 3806, 2041, 86, 2040, 2031, + + 3806, 86, 2032, 2045, 3806, 2049, 86, 86, 2042, 2037, + 2043, 3806, 2050, 2047, 2044, 2051, 2048, 2046, 2036, 2038, + 86, 2039, 86, 2041, 86, 2040, 86, 86, 2052, 86, + 2045, 86, 2049, 2061, 86, 2042, 86, 2043, 86, 2050, + 2047, 2044, 2051, 2048, 2046, 2053, 2054, 2056, 2058, 2057, + 2060, 2055, 3806, 86, 86, 2052, 2063, 2059, 2062, 2064, + 86, 86, 2067, 86, 3806, 86, 2065, 86, 2066, 2068, + 2072, 2076, 2053, 2069, 2056, 2058, 2057, 2060, 86, 86, + 86, 86, 2070, 86, 2059, 2062, 2071, 2073, 86, 86, + 86, 86, 2074, 2065, 86, 2066, 2068, 2078, 2075, 86, + + 2069, 86, 86, 86, 2077, 86, 2082, 2079, 2081, 2070, + 2080, 2083, 2084, 2071, 2073, 86, 86, 3806, 86, 2074, + 2091, 2089, 2085, 86, 2078, 2075, 86, 86, 86, 86, + 2086, 2077, 2087, 2082, 2079, 2081, 2093, 2080, 2083, 2084, + 86, 2088, 2090, 2092, 86, 86, 2095, 2094, 86, 2085, + 2099, 2096, 86, 2097, 86, 2101, 2098, 2086, 86, 2087, + 86, 86, 86, 2093, 86, 2100, 2102, 2104, 2088, 2090, + 2103, 86, 2105, 86, 2094, 86, 86, 86, 2096, 86, + 2097, 86, 2106, 2098, 2107, 3806, 2108, 86, 2109, 86, + 2110, 3806, 2100, 2102, 2104, 86, 2111, 2103, 2112, 86, + + 2113, 2119, 2115, 2114, 86, 3806, 2117, 86, 86, 2106, + 2116, 2107, 86, 2108, 2118, 2109, 86, 2110, 86, 86, + 86, 171, 2123, 2111, 2120, 2112, 86, 2113, 86, 2115, + 2114, 2121, 86, 2117, 86, 2122, 2126, 2116, 2124, 2125, + 2127, 2118, 2128, 86, 2132, 2130, 86, 2129, 2136, 86, + 2134, 2120, 86, 86, 86, 86, 86, 86, 2121, 86, + 86, 2131, 2122, 2126, 2133, 2124, 2125, 2127, 86, 2128, + 2137, 2135, 2130, 2138, 2129, 86, 86, 2134, 2139, 86, + 86, 2140, 2141, 2142, 2143, 2144, 2148, 3806, 2131, 3806, + 2146, 2133, 86, 86, 86, 2147, 2145, 2137, 2135, 2149, + + 2138, 86, 3806, 86, 86, 86, 2152, 2154, 2140, 2150, + 2142, 86, 86, 2148, 86, 86, 86, 2146, 86, 86, + 2151, 2153, 2147, 2145, 2155, 86, 2149, 2157, 86, 86, + 2156, 2160, 2158, 2152, 2154, 3806, 2150, 2165, 86, 86, + 2163, 3806, 86, 86, 2164, 2159, 2161, 2151, 2153, 86, + 86, 2155, 2166, 2162, 2157, 2167, 86, 2156, 2160, 2158, + 2173, 86, 86, 2168, 86, 2171, 2177, 2163, 86, 2169, + 2170, 2164, 2159, 2161, 86, 2176, 86, 86, 86, 2172, + 2162, 2174, 2167, 2175, 86, 86, 86, 2173, 2178, 2180, + 2168, 2179, 2171, 86, 86, 2181, 2169, 2170, 86, 2182, + + 2185, 86, 2176, 2183, 2187, 86, 2172, 2184, 2174, 86, + 2175, 2189, 2186, 86, 2188, 86, 86, 2191, 2179, 2190, + 2192, 86, 2181, 2193, 86, 2196, 2182, 86, 86, 2194, + 2183, 86, 2198, 2195, 2184, 86, 86, 2197, 86, 2186, + 2199, 2188, 2201, 86, 86, 86, 2190, 2192, 86, 86, + 2193, 2200, 86, 2202, 86, 2203, 2194, 86, 2204, 2198, + 2195, 2205, 2206, 86, 2197, 2214, 3806, 86, 3806, 2201, + 3806, 3806, 2207, 2208, 2209, 86, 3806, 86, 2200, 2210, + 2202, 2212, 2203, 86, 86, 2204, 2211, 86, 2205, 2213, + 86, 2215, 2217, 86, 86, 2216, 86, 86, 86, 2207, + + 2208, 2209, 86, 2218, 2219, 2222, 2210, 2221, 2212, 2220, + 2223, 2224, 86, 2211, 2225, 2226, 2213, 86, 2215, 2217, + 86, 2227, 2216, 2229, 2228, 86, 86, 86, 2230, 86, + 2218, 86, 2222, 2232, 2221, 86, 86, 2223, 2224, 86, + 2235, 2225, 2231, 86, 2234, 2233, 2236, 86, 2227, 86, + 2229, 2228, 86, 2238, 2237, 86, 2239, 2240, 86, 86, + 2232, 86, 2242, 2243, 2241, 2245, 86, 2235, 86, 2231, + 2244, 2234, 2233, 86, 2246, 86, 86, 2247, 86, 2248, + 86, 2237, 86, 2239, 2240, 86, 2249, 86, 2250, 2242, + 2253, 2241, 2245, 2251, 2254, 86, 2256, 2244, 86, 2252, + + 86, 2246, 2255, 86, 86, 2257, 2248, 86, 86, 2258, + 2259, 86, 2260, 2249, 2261, 2250, 86, 2253, 2262, 86, + 2251, 86, 2263, 2256, 2264, 2265, 2252, 2266, 3806, 2255, + 3806, 86, 86, 2267, 86, 2268, 2258, 86, 2270, 2260, + 2269, 2261, 86, 2273, 2272, 86, 2278, 86, 2271, 2263, + 86, 2264, 86, 86, 86, 86, 86, 86, 86, 2274, + 2267, 2277, 2268, 2275, 2279, 2270, 2280, 2269, 86, 2281, + 2273, 2272, 86, 2276, 86, 2271, 86, 2282, 86, 86, + 2288, 3806, 2291, 86, 2287, 2283, 2274, 86, 2277, 86, + 2275, 2279, 2285, 2293, 86, 2290, 2281, 2286, 86, 86, + + 2276, 2284, 86, 86, 2282, 2294, 86, 86, 86, 2291, + 2289, 2287, 2283, 86, 2295, 2292, 86, 2297, 2296, 2285, + 2293, 2298, 2290, 86, 2286, 2302, 2299, 3806, 2284, 2306, + 3806, 86, 2294, 2304, 2303, 86, 86, 2289, 2300, 86, + 86, 2295, 2292, 2301, 86, 2296, 86, 2305, 2298, 86, + 2307, 86, 86, 2299, 86, 86, 2306, 86, 2310, 2308, + 2304, 2303, 2309, 3806, 2311, 2300, 86, 2312, 2314, 86, + 2301, 2313, 2315, 86, 2305, 2316, 3806, 2307, 2318, 86, + 2317, 3806, 86, 2323, 2327, 2324, 2308, 2322, 2328, 2309, + 86, 2311, 2319, 86, 2312, 2314, 86, 2320, 2313, 86, + + 2331, 86, 2316, 86, 2321, 2318, 2330, 2317, 86, 86, + 86, 86, 86, 2325, 2322, 86, 86, 2332, 2326, 2319, + 86, 2329, 86, 2333, 2320, 2338, 2335, 2331, 86, 2334, + 3806, 2321, 2336, 2330, 2337, 2339, 86, 2340, 86, 2341, + 86, 86, 3806, 2342, 2349, 86, 2344, 2343, 2329, 86, + 2333, 86, 86, 2335, 86, 2348, 2334, 86, 86, 2336, + 2345, 2337, 2339, 2346, 2347, 2350, 86, 2351, 171, 86, + 2342, 86, 86, 2344, 2343, 86, 2352, 86, 86, 2353, + 2356, 2355, 2348, 2354, 2357, 3806, 2359, 2345, 86, 86, + 2346, 2347, 2350, 86, 2351, 86, 2358, 2360, 2361, 2362, + + 2370, 3806, 2365, 86, 2363, 86, 86, 86, 2355, 2364, + 2354, 2357, 86, 2359, 2366, 86, 2369, 86, 86, 2367, + 86, 2371, 2368, 2358, 2360, 2361, 86, 86, 86, 2365, + 2372, 2363, 86, 2373, 86, 2374, 2364, 86, 86, 86, + 86, 2366, 2375, 2369, 2376, 2377, 2367, 2378, 2371, 2368, + 2379, 86, 86, 2380, 2382, 86, 86, 2372, 86, 86, + 2373, 2381, 2374, 86, 2383, 2386, 2384, 2399, 2392, 86, + 2385, 2376, 2377, 86, 2378, 86, 86, 2379, 86, 86, + 2380, 2389, 2390, 86, 86, 2387, 86, 2391, 2381, 2393, + 86, 2383, 2386, 2384, 86, 2392, 2388, 2385, 2395, 2394, + + 86, 2396, 2397, 2400, 2398, 86, 2406, 86, 2389, 2390, + 2401, 86, 2387, 86, 2391, 86, 2393, 86, 86, 3806, + 2409, 86, 2402, 2388, 86, 2395, 2394, 86, 2396, 2397, + 2400, 2398, 2403, 86, 2404, 2405, 2412, 2401, 86, 2408, + 2407, 2410, 2411, 86, 2418, 86, 86, 2409, 86, 2402, + 86, 86, 2413, 2414, 86, 2415, 2416, 2417, 2427, 2403, + 86, 2404, 2405, 86, 2419, 86, 2408, 2407, 2410, 2411, + 2420, 86, 2423, 86, 2431, 86, 86, 86, 86, 2413, + 86, 86, 2415, 2416, 2417, 2427, 2422, 2421, 2428, 2426, + 86, 2419, 86, 86, 2424, 86, 2429, 2420, 86, 2423, + + 2432, 2431, 2425, 86, 2430, 2433, 2434, 3806, 86, 3806, + 2462, 2435, 3806, 2422, 2421, 2428, 2426, 86, 86, 86, + 86, 2424, 2436, 2429, 2443, 2444, 86, 2432, 2441, 2425, + 2447, 2430, 2433, 2437, 2438, 86, 2442, 2439, 86, 86, + 86, 2446, 86, 2448, 2445, 2450, 3806, 3806, 86, 2436, + 2440, 2443, 86, 86, 86, 2441, 2451, 2447, 86, 2449, + 2437, 2438, 2453, 2442, 2439, 86, 86, 86, 2446, 2452, + 2448, 2445, 2450, 2454, 2455, 2458, 2456, 2440, 86, 2457, + 2459, 86, 2466, 2451, 86, 86, 2449, 2460, 2464, 2453, + 86, 2461, 86, 86, 2469, 86, 2452, 86, 86, 2465, + + 2454, 2455, 2458, 2456, 2463, 86, 2457, 2459, 2468, 86, + 2470, 86, 86, 86, 2460, 2464, 2467, 86, 2461, 86, + 2471, 2469, 2474, 2475, 2472, 2473, 2465, 2477, 3806, 86, + 86, 2463, 86, 86, 86, 2468, 2476, 2470, 2478, 2479, + 2481, 86, 86, 2467, 2480, 2484, 2485, 2471, 2482, 2474, + 2486, 2472, 2473, 86, 2477, 86, 86, 2483, 86, 86, + 86, 2490, 2487, 2476, 2491, 2478, 2494, 2481, 2488, 2492, + 86, 86, 2484, 86, 2489, 2482, 86, 2486, 86, 2493, + 86, 86, 2497, 2502, 2483, 2501, 86, 2498, 86, 2487, + 2499, 2491, 2495, 86, 86, 2488, 2492, 2500, 86, 2503, + + 2496, 2489, 86, 86, 2507, 86, 2493, 2504, 86, 86, + 2502, 86, 2501, 2516, 2498, 2505, 86, 2499, 2506, 2495, + 2509, 2511, 2508, 86, 2500, 2510, 2503, 2496, 86, 86, + 86, 2507, 2512, 86, 2504, 86, 86, 2514, 2513, 2515, + 2516, 2517, 2505, 2518, 2521, 2506, 2522, 3806, 2511, 2508, + 86, 86, 86, 86, 86, 2519, 2527, 86, 86, 2512, + 2523, 3806, 86, 86, 2514, 2513, 2515, 2520, 2517, 86, + 2518, 2521, 2524, 86, 86, 2525, 2528, 2526, 2529, 2530, + 2531, 86, 2519, 2527, 86, 2532, 2533, 2523, 86, 86, + 86, 3806, 2534, 86, 2520, 86, 2535, 2536, 3806, 2524, + + 86, 86, 2525, 2528, 2526, 2529, 2530, 2531, 2537, 2538, + 2540, 2545, 2532, 2533, 86, 86, 2541, 86, 86, 2534, + 86, 2542, 2539, 2535, 2536, 2543, 2544, 2546, 86, 86, + 86, 86, 2547, 86, 86, 2537, 2538, 2540, 2545, 2548, + 2551, 3806, 2549, 2541, 2553, 2555, 2552, 2550, 2542, 2539, + 86, 86, 2543, 2544, 86, 86, 2554, 2556, 86, 2547, + 2557, 2559, 171, 86, 86, 2558, 86, 2551, 86, 2549, + 2560, 2553, 2561, 2552, 2550, 3806, 2562, 86, 2563, 2564, + 2565, 3806, 2570, 2554, 2556, 86, 2566, 3806, 86, 2571, + 2569, 2574, 86, 86, 2578, 86, 86, 2580, 2576, 2561, + + 2567, 2573, 86, 2562, 2572, 2563, 2564, 86, 86, 86, + 86, 2568, 86, 2566, 2575, 86, 2571, 2569, 2577, 86, + 86, 86, 3806, 86, 2579, 2576, 86, 2567, 2573, 86, + 2581, 2572, 2582, 2583, 2585, 2584, 86, 2588, 2568, 86, + 2595, 2575, 86, 2586, 86, 2577, 86, 2589, 2587, 86, + 2593, 2579, 86, 86, 2590, 2591, 86, 2581, 2598, 2582, + 2583, 2585, 2584, 86, 2588, 86, 86, 86, 2594, 86, + 2586, 2592, 86, 86, 2589, 2587, 2596, 2593, 86, 2597, + 86, 2590, 2591, 2599, 2601, 2598, 2600, 86, 2603, 2602, + 2604, 86, 86, 86, 2605, 2594, 86, 2607, 2592, 86, + + 2606, 2608, 3806, 2596, 86, 3806, 2597, 2618, 86, 86, + 2599, 2601, 86, 2600, 2609, 2603, 2602, 2604, 2610, 2616, + 86, 2605, 86, 2611, 86, 2612, 86, 2606, 2608, 86, + 2613, 86, 2614, 86, 86, 2619, 2615, 2617, 2622, 86, + 86, 2609, 86, 86, 2620, 2610, 2616, 2621, 2623, 2626, + 2611, 86, 2612, 2624, 2629, 2625, 86, 2613, 3806, 2614, + 2628, 86, 86, 2615, 2617, 2622, 2627, 86, 86, 86, + 2630, 2620, 2631, 86, 2621, 2623, 86, 2632, 86, 2633, + 2624, 2629, 2625, 2634, 86, 86, 2635, 2628, 86, 2636, + 2637, 86, 2642, 2627, 2639, 2638, 3806, 2630, 2640, 2631, + + 2643, 2641, 86, 2644, 2632, 86, 2633, 86, 86, 2645, + 86, 86, 2648, 2635, 2649, 86, 86, 2637, 2650, 86, + 2646, 2639, 2638, 2647, 86, 2640, 86, 2643, 2641, 2651, + 2644, 2654, 2655, 2656, 3806, 86, 2645, 2652, 86, 86, + 86, 86, 2653, 2658, 86, 2650, 86, 2646, 2659, 86, + 2647, 86, 2660, 2657, 2661, 2662, 2651, 86, 2654, 86, + 86, 86, 2663, 2664, 2652, 2665, 86, 2666, 2669, 2653, + 86, 2667, 2673, 2668, 2670, 2659, 2671, 86, 86, 86, + 2657, 2661, 2662, 86, 86, 86, 2672, 86, 2674, 86, + 86, 2675, 2665, 2676, 2666, 86, 86, 86, 2667, 86, + + 2668, 2670, 86, 2671, 2677, 2679, 2678, 2682, 86, 2680, + 2684, 2683, 3806, 2672, 2685, 2674, 2686, 2687, 86, 86, + 2676, 2688, 86, 2689, 2681, 86, 86, 86, 86, 86, + 2691, 2677, 2679, 2678, 86, 86, 2680, 2684, 2683, 86, + 2690, 2685, 86, 2686, 2687, 2692, 2693, 86, 86, 86, + 2695, 2681, 2694, 2696, 2697, 86, 2699, 2691, 86, 2698, + 2702, 86, 2703, 3806, 2700, 2704, 3806, 2690, 86, 86, + 3806, 2705, 2692, 2693, 2710, 86, 86, 86, 2701, 2694, + 2696, 2697, 86, 2699, 86, 86, 2698, 86, 2706, 2703, + 86, 2700, 2704, 2707, 2708, 2709, 86, 86, 2705, 2711, + + 86, 2710, 86, 2712, 2716, 2701, 86, 2718, 2713, 3806, + 2722, 2719, 2717, 3806, 2721, 2706, 86, 86, 2720, 3806, + 2707, 2708, 2709, 2714, 86, 2715, 2711, 86, 86, 86, + 2712, 2724, 86, 86, 2718, 2713, 86, 2722, 2719, 2717, + 86, 2721, 2723, 2725, 2727, 2720, 2726, 86, 86, 86, + 2714, 2730, 2715, 2728, 2729, 2731, 2732, 3806, 2724, 2735, + 3806, 3806, 2733, 86, 3806, 86, 86, 2734, 86, 2723, + 2725, 2727, 3806, 2726, 2736, 86, 86, 2737, 2730, 86, + 2728, 2729, 2738, 2739, 86, 2741, 3806, 86, 86, 2733, + 2740, 86, 86, 2742, 2734, 2743, 86, 86, 2744, 86, + + 2745, 2736, 2746, 2747, 2737, 2748, 2752, 2749, 2754, 2738, + 2739, 86, 2741, 86, 86, 86, 86, 2740, 86, 2750, + 2742, 2751, 2743, 2753, 86, 2744, 86, 2745, 86, 2746, + 86, 2755, 2762, 2752, 2749, 86, 2757, 86, 2758, 2756, + 86, 2763, 2764, 86, 2765, 2759, 2750, 2768, 2751, 86, + 2753, 2767, 86, 2760, 86, 2761, 86, 86, 2755, 2762, + 86, 2766, 86, 2757, 86, 2758, 2756, 171, 2763, 86, + 2769, 2765, 2759, 86, 2768, 2770, 2771, 2772, 2767, 86, + 2760, 86, 2761, 2773, 2775, 2774, 2776, 86, 2766, 2777, + 2779, 86, 86, 2778, 2780, 3806, 2782, 2769, 2783, 86, + + 2781, 86, 2770, 2771, 2772, 86, 2784, 2785, 3806, 3806, + 2773, 2775, 2774, 86, 2787, 2792, 86, 86, 86, 86, + 2778, 2780, 86, 2786, 86, 2789, 2794, 2781, 86, 2788, + 86, 2790, 2793, 2784, 86, 2791, 86, 2795, 86, 86, + 86, 2787, 2796, 2797, 86, 86, 2798, 86, 86, 2799, + 2786, 3806, 2789, 2794, 2800, 2803, 2788, 2801, 2790, 2793, + 86, 86, 2791, 2804, 2795, 2805, 86, 2802, 86, 2796, + 86, 86, 86, 2798, 86, 86, 2799, 2806, 86, 86, + 2807, 2800, 2803, 2810, 2801, 2811, 2808, 86, 2809, 2813, + 86, 2812, 2805, 86, 2802, 86, 86, 2814, 86, 86, + + 2815, 3806, 3806, 2823, 2806, 2816, 2827, 2807, 86, 2817, + 2810, 86, 2811, 2808, 2818, 2809, 2813, 2819, 2812, 3806, + 2820, 86, 2824, 86, 2821, 86, 2826, 2815, 86, 86, + 86, 86, 2816, 2822, 2825, 86, 2817, 86, 86, 86, + 2828, 2818, 2830, 2829, 2819, 86, 86, 2820, 86, 2824, + 2831, 2821, 2832, 2826, 2834, 2840, 86, 2845, 2833, 2835, + 2822, 2825, 86, 2836, 2837, 86, 2838, 86, 86, 2830, + 2829, 86, 86, 2839, 2843, 2841, 2842, 2831, 86, 2832, + 86, 2834, 2840, 86, 86, 2833, 2835, 2846, 86, 86, + 2836, 2837, 2844, 2838, 2847, 2848, 2849, 86, 2851, 86, + + 2839, 86, 2841, 2842, 86, 86, 86, 86, 2853, 86, + 2852, 86, 2854, 2850, 2846, 2857, 2855, 86, 86, 2844, + 86, 86, 2848, 2849, 86, 2851, 2856, 2858, 2859, 2860, + 3806, 2861, 2869, 3806, 2862, 2853, 86, 2852, 86, 2854, + 2850, 2863, 86, 2855, 2864, 86, 86, 2865, 86, 2866, + 2867, 2870, 2868, 2856, 86, 86, 2860, 86, 2861, 86, + 86, 2862, 86, 2871, 2872, 86, 86, 86, 2863, 2873, + 2875, 2864, 2876, 86, 2865, 2874, 2866, 2867, 2870, 2868, + 2877, 86, 86, 2878, 86, 86, 2879, 2880, 2881, 2882, + 2871, 2872, 2883, 2884, 86, 86, 2886, 2875, 86, 86, + + 2885, 86, 2874, 2887, 86, 86, 2889, 2877, 86, 2890, + 2878, 2888, 3806, 2879, 2880, 2881, 2882, 2893, 86, 2883, + 86, 86, 86, 2886, 2891, 86, 2892, 2885, 86, 2898, + 2887, 2899, 86, 2889, 86, 2894, 2890, 86, 2888, 86, + 2895, 2896, 2897, 86, 2893, 2900, 2901, 86, 86, 2902, + 2903, 2891, 3806, 2892, 2904, 3806, 86, 86, 2899, 2907, + 2906, 2905, 2894, 2908, 86, 86, 2909, 2895, 2896, 2897, + 86, 2911, 86, 86, 3806, 3806, 86, 2903, 86, 86, + 2910, 2904, 86, 2916, 2912, 86, 2907, 2906, 2905, 86, + 2908, 2914, 86, 2909, 2913, 86, 2917, 86, 2911, 86, + + 2918, 86, 2915, 2919, 86, 2921, 2920, 2910, 2923, 2922, + 86, 2912, 2925, 86, 3806, 2926, 2924, 2929, 2914, 86, + 2931, 2913, 86, 2917, 86, 2932, 86, 86, 86, 2915, + 86, 86, 86, 2920, 2927, 2923, 2922, 86, 2928, 2925, + 2930, 86, 2926, 2924, 86, 86, 2933, 86, 2934, 2938, + 2936, 2935, 2932, 86, 86, 2937, 2939, 3806, 86, 2940, + 86, 2927, 86, 86, 2946, 2928, 2941, 2930, 2942, 2943, + 2944, 171, 2998, 2933, 86, 2934, 2938, 2936, 2935, 86, + 86, 86, 2937, 2939, 86, 86, 2940, 2945, 2948, 2949, + 2947, 86, 86, 2941, 86, 2942, 2943, 2944, 2950, 2951, + + 2952, 2953, 86, 2954, 86, 2955, 3806, 2956, 2958, 2957, + 2960, 2959, 86, 3806, 2945, 2948, 2949, 2947, 86, 86, + 86, 86, 86, 3099, 86, 2950, 2951, 86, 86, 86, + 2954, 86, 2955, 86, 2956, 2958, 2957, 2960, 2959, 2961, + 2962, 2964, 2963, 2965, 2966, 2968, 86, 86, 86, 86, + 2967, 86, 86, 2969, 2970, 86, 2971, 2973, 2976, 2977, + 3806, 86, 86, 86, 2972, 2974, 2961, 2962, 2964, 2963, + 2965, 2966, 2968, 2979, 2975, 86, 86, 2967, 86, 86, + 2969, 2970, 86, 2971, 86, 2976, 86, 86, 2978, 2980, + 2981, 2972, 2974, 2982, 2983, 2984, 2985, 2987, 86, 86, + + 86, 2975, 86, 2986, 2989, 86, 86, 86, 86, 2990, + 2988, 2991, 86, 2992, 86, 2978, 2980, 2981, 86, 2993, + 2982, 2983, 2984, 2985, 2987, 2994, 86, 86, 2995, 86, + 2986, 2989, 2996, 2997, 86, 2999, 2990, 2988, 86, 3000, + 86, 3001, 3002, 3003, 86, 3004, 2993, 3005, 86, 86, + 86, 3006, 2994, 86, 3007, 2995, 86, 3008, 86, 86, + 86, 86, 2999, 3009, 86, 3014, 3000, 86, 3001, 3002, + 3003, 3010, 3004, 3011, 86, 3012, 3013, 3016, 3006, 86, + 86, 3007, 3015, 3017, 3008, 3019, 3806, 86, 3018, 3806, + 3009, 86, 86, 86, 3022, 3806, 3020, 86, 3010, 3806, + + 3011, 86, 3012, 3013, 86, 3024, 86, 86, 3030, 3015, + 3017, 86, 3019, 3021, 3026, 3018, 86, 3023, 3025, 3027, + 86, 3022, 86, 3020, 86, 86, 86, 86, 3028, 3029, + 3031, 3033, 3024, 3034, 3032, 86, 3035, 86, 3037, 3036, + 3021, 3026, 86, 86, 3023, 3025, 3027, 3038, 86, 86, + 86, 3039, 3040, 86, 3041, 3028, 3029, 3031, 86, 86, + 3034, 3032, 86, 3035, 3043, 3037, 3036, 3044, 3042, 3049, + 3045, 3047, 86, 3054, 3038, 86, 86, 86, 3039, 3040, + 3046, 86, 86, 3051, 3050, 3048, 3052, 3806, 86, 3053, + 86, 3043, 86, 3056, 86, 3042, 86, 3045, 3047, 86, + + 86, 86, 3057, 3058, 3062, 3806, 3055, 3046, 3059, 86, + 3051, 3050, 3048, 3052, 86, 86, 3053, 3060, 3061, 86, + 86, 86, 3063, 3065, 86, 86, 3064, 3067, 86, 3057, + 3058, 86, 86, 3055, 3066, 3059, 3074, 3068, 3806, 86, + 3071, 86, 3069, 3070, 3060, 3061, 3077, 3072, 3073, 3063, + 3065, 86, 86, 3064, 86, 3075, 86, 86, 86, 3076, + 3082, 3066, 86, 86, 3068, 86, 86, 3071, 3078, 3069, + 3070, 86, 3079, 86, 3072, 3073, 3080, 3083, 3081, 86, + 3084, 3086, 3075, 3085, 3087, 86, 3076, 3082, 3090, 86, + 86, 3088, 3091, 86, 86, 3078, 3806, 3089, 86, 3079, + + 86, 3092, 86, 3080, 3083, 3081, 86, 3084, 3086, 86, + 3085, 3087, 3093, 86, 3094, 86, 3095, 3806, 3088, 86, + 86, 3097, 3096, 86, 3089, 3098, 3806, 3101, 3092, 3100, + 86, 3104, 3105, 3102, 86, 3103, 86, 3107, 3114, 3093, + 3125, 171, 3108, 3095, 86, 86, 3111, 3106, 3097, 3096, + 3109, 86, 3098, 86, 3101, 3110, 3100, 86, 86, 86, + 3102, 86, 3103, 3112, 86, 3113, 86, 86, 86, 3108, + 86, 3115, 3118, 3111, 3106, 3116, 3124, 3117, 86, 3121, + 3120, 3119, 86, 3122, 86, 86, 86, 3123, 3806, 3806, + 3112, 86, 3113, 3126, 86, 86, 3127, 86, 3115, 3118, + + 86, 3128, 3116, 3124, 3117, 3130, 3129, 3120, 3119, 86, + 3133, 86, 3131, 86, 3123, 86, 3132, 3134, 86, 86, + 3126, 86, 3135, 3127, 3136, 86, 3137, 86, 3128, 3138, + 3806, 86, 3130, 3129, 86, 3139, 3806, 3133, 86, 3131, + 86, 3140, 86, 3132, 3134, 3141, 3142, 86, 3143, 3135, + 3148, 3136, 86, 3137, 86, 3806, 3138, 3144, 86, 3145, + 3146, 3149, 3139, 86, 3806, 86, 86, 86, 3140, 86, + 3153, 3147, 3141, 3151, 3150, 3143, 3152, 86, 86, 86, + 3154, 86, 86, 3156, 3144, 3157, 3145, 3146, 3149, 3806, + 3155, 86, 86, 3161, 86, 86, 86, 3153, 3147, 3159, + + 3151, 3150, 3160, 3152, 3162, 3158, 3164, 3154, 86, 86, + 3156, 86, 86, 86, 3166, 3165, 86, 3155, 3167, 3163, + 3161, 86, 86, 3168, 3169, 3170, 3159, 86, 3806, 3160, + 3173, 86, 3158, 3171, 3172, 86, 3174, 3175, 86, 3177, + 3176, 3166, 3806, 3180, 86, 3167, 3163, 86, 86, 3178, + 86, 86, 3170, 3181, 3184, 86, 86, 3173, 86, 3179, + 3171, 3172, 86, 3174, 86, 86, 3177, 3176, 3182, 86, + 86, 3185, 86, 3183, 3186, 86, 3178, 3187, 3188, 3189, + 3181, 86, 86, 3192, 3193, 3190, 3179, 3194, 3195, 3199, + 3191, 86, 3196, 3203, 86, 3182, 86, 3197, 3185, 3806, + + 3183, 86, 86, 86, 86, 86, 3189, 86, 86, 86, + 86, 3193, 3190, 3198, 3194, 3195, 3199, 3191, 3200, 3201, + 86, 3202, 3204, 3205, 86, 86, 86, 3206, 86, 3207, + 3208, 3209, 3210, 3212, 3214, 3211, 3806, 3213, 3220, 3216, + 3198, 86, 86, 86, 86, 3200, 3201, 86, 3202, 86, + 86, 86, 3221, 3215, 3206, 3217, 3207, 3208, 86, 3210, + 86, 86, 3211, 86, 3213, 86, 86, 3218, 3219, 86, + 86, 3223, 3225, 3222, 3227, 3224, 86, 3226, 86, 86, + 3215, 86, 3217, 3228, 3229, 3230, 3231, 3232, 3806, 86, + 86, 86, 3233, 3234, 3218, 3219, 86, 86, 3236, 3235, + + 3222, 3227, 3224, 86, 86, 3237, 86, 3238, 3243, 86, + 3228, 3229, 3230, 3239, 3232, 86, 3240, 86, 86, 3233, + 86, 86, 3244, 3241, 3242, 3236, 3235, 3247, 3246, 86, + 86, 86, 3237, 86, 3238, 3243, 3249, 86, 3245, 3248, + 3239, 86, 86, 3240, 3250, 86, 3251, 3259, 3252, 3244, + 3241, 3242, 86, 3253, 86, 3246, 86, 3254, 3260, 86, + 86, 3261, 3255, 3249, 3256, 3245, 3248, 3262, 3258, 3257, + 3265, 3250, 86, 3251, 86, 3252, 86, 3263, 3806, 3264, + 3253, 86, 3269, 3267, 86, 3260, 3266, 86, 3261, 86, + 86, 3268, 86, 86, 3262, 3258, 86, 3265, 3270, 3271, + + 86, 3273, 3274, 86, 3263, 86, 3264, 3272, 86, 3269, + 3267, 86, 3275, 3266, 3278, 86, 3279, 3276, 3268, 86, + 86, 86, 3280, 86, 86, 3270, 3271, 3282, 3273, 3274, + 3277, 3283, 3286, 3281, 3272, 3806, 3287, 86, 3285, 3275, + 3284, 86, 3288, 86, 3276, 86, 86, 86, 3289, 3280, + 3290, 3293, 86, 3291, 86, 3292, 86, 3277, 3283, 86, + 3281, 3294, 86, 3287, 3297, 3285, 3295, 3284, 3298, 86, + 86, 86, 3296, 86, 3299, 3289, 3300, 86, 86, 86, + 3291, 86, 3292, 3312, 86, 3309, 3302, 3314, 3294, 3304, + 3301, 86, 3303, 3295, 86, 86, 86, 86, 86, 3296, + + 3305, 3299, 86, 3300, 86, 3306, 3307, 3308, 86, 3310, + 86, 3313, 3309, 3302, 86, 3311, 3304, 3301, 3315, 3303, + 86, 86, 3318, 3319, 86, 86, 3316, 3321, 86, 3320, + 3317, 86, 86, 3307, 3308, 3332, 3310, 86, 3313, 86, + 3322, 3323, 3311, 86, 3324, 3315, 3325, 86, 3327, 86, + 86, 3326, 3330, 3316, 3328, 86, 3320, 3317, 86, 86, + 3331, 86, 3332, 3334, 86, 3333, 86, 3322, 3323, 86, + 3329, 3324, 3335, 3325, 86, 3336, 86, 3339, 3326, 3330, + 86, 3328, 86, 86, 3340, 86, 86, 3331, 86, 3341, + 3334, 3337, 3333, 3343, 3338, 3342, 3806, 3329, 3344, 3335, + + 86, 3345, 3336, 3346, 86, 3347, 86, 3348, 3806, 3349, + 3350, 86, 3355, 86, 3806, 3351, 86, 86, 3337, 86, + 3343, 3338, 3342, 86, 3353, 3344, 3357, 86, 3345, 86, + 86, 3354, 3347, 3352, 3348, 86, 86, 3350, 3358, 86, + 86, 3356, 3351, 86, 86, 3359, 86, 3360, 3806, 3361, + 3365, 3353, 3363, 86, 3362, 3366, 3367, 86, 3354, 3364, + 3352, 86, 86, 3806, 86, 3358, 3368, 86, 3356, 86, + 86, 86, 3359, 3369, 3360, 86, 3361, 3365, 3370, 3363, + 86, 3362, 86, 3367, 3371, 3372, 3364, 86, 3374, 3373, + 3379, 3375, 3376, 3368, 3378, 3380, 86, 86, 3382, 86, + + 3369, 86, 86, 3377, 86, 3370, 3383, 86, 86, 3385, + 86, 3371, 3372, 86, 3386, 3374, 3373, 3379, 3375, 3376, + 86, 3378, 3380, 3381, 86, 86, 3384, 3387, 3388, 3389, + 3377, 3390, 3391, 86, 86, 3392, 3393, 3394, 86, 3395, + 86, 86, 3398, 3397, 3399, 3401, 3396, 86, 86, 86, + 3381, 86, 3403, 3384, 3387, 3388, 86, 86, 86, 3391, + 3400, 86, 86, 3393, 3394, 86, 3395, 3404, 3402, 86, + 3397, 3399, 86, 3396, 3405, 86, 3406, 86, 86, 86, + 3407, 3408, 3409, 3410, 3411, 3412, 3416, 3400, 86, 86, + 86, 86, 3413, 3414, 3404, 3402, 3415, 86, 86, 3417, + + 86, 3405, 3420, 3406, 3418, 3419, 3422, 3407, 3408, 86, + 3423, 3411, 86, 86, 86, 86, 86, 86, 3424, 3413, + 3414, 3421, 86, 3415, 3425, 86, 86, 3426, 86, 86, + 3429, 3418, 3419, 3422, 3427, 86, 3428, 3423, 3430, 3806, + 3431, 3437, 3432, 86, 3433, 3424, 3435, 3434, 3421, 86, + 86, 3436, 3438, 86, 3426, 3439, 86, 86, 3441, 3442, + 3445, 3427, 86, 3428, 86, 3430, 86, 3431, 86, 3432, + 86, 3433, 3440, 3435, 3434, 3443, 86, 3448, 3449, 3438, + 86, 86, 3444, 86, 3453, 3441, 86, 86, 3446, 3447, + 86, 3450, 86, 86, 3451, 3456, 86, 86, 86, 3440, + + 86, 3455, 3443, 3452, 86, 3449, 3454, 3457, 3458, 3444, + 3459, 86, 86, 86, 86, 3446, 3447, 86, 3450, 3460, + 3462, 3451, 3456, 3461, 3463, 3464, 3465, 3466, 3455, 3467, + 3452, 3469, 86, 3454, 86, 86, 86, 86, 3471, 3470, + 3472, 86, 86, 3468, 3806, 86, 3460, 3462, 3473, 3474, + 3461, 86, 86, 86, 3466, 3475, 86, 86, 3469, 86, + 86, 3476, 3482, 3477, 3492, 3471, 3479, 86, 86, 86, + 3468, 86, 3478, 3480, 86, 3473, 86, 86, 86, 3481, + 3483, 86, 86, 3484, 3485, 3486, 3487, 3488, 3476, 86, + 3477, 86, 86, 3479, 3489, 3490, 86, 86, 3495, 3478, + + 3480, 3498, 3493, 3806, 86, 86, 3481, 3483, 3491, 86, + 3484, 3485, 3486, 3487, 86, 3494, 3496, 86, 86, 3499, + 86, 86, 3490, 86, 3497, 3495, 3500, 3501, 86, 3493, + 86, 3502, 3503, 3504, 3505, 3491, 3806, 3806, 86, 3806, + 86, 3507, 3494, 3496, 3506, 3508, 86, 86, 86, 3509, + 3510, 3497, 86, 3500, 3501, 3512, 86, 86, 3511, 3503, + 3504, 86, 3513, 86, 86, 3514, 86, 86, 3507, 3518, + 86, 3506, 3508, 3515, 3806, 3806, 3509, 3510, 86, 3516, + 86, 86, 3512, 86, 86, 3511, 86, 3517, 3519, 3513, + 3523, 3524, 3514, 3531, 86, 3522, 3518, 3520, 3521, 86, + + 3515, 86, 3525, 3526, 3527, 3530, 3516, 86, 3806, 86, + 3529, 3532, 86, 86, 3517, 3519, 3528, 3523, 3524, 86, + 86, 3533, 3522, 86, 3520, 3521, 86, 3534, 3535, 3525, + 3536, 3527, 3530, 3537, 86, 86, 3538, 3529, 86, 86, + 3540, 86, 3545, 3528, 86, 3548, 3539, 3806, 3533, 3541, + 3542, 3806, 86, 3549, 3534, 86, 3550, 3536, 86, 3551, + 3537, 3543, 3544, 86, 3546, 3547, 3806, 86, 86, 86, + 3552, 3553, 3548, 3539, 86, 86, 3554, 3558, 86, 86, + 3549, 3555, 3556, 3550, 86, 3557, 86, 3559, 3561, 86, + 86, 3560, 86, 86, 3562, 86, 86, 3552, 3553, 86, + + 86, 3564, 3563, 86, 3558, 3565, 3806, 86, 3555, 3556, + 3567, 3568, 3557, 3566, 86, 3561, 3569, 3570, 3560, 86, + 3571, 3562, 86, 86, 86, 86, 3572, 3573, 3564, 3563, + 3574, 3806, 3565, 86, 3575, 86, 3578, 3567, 3568, 3580, + 3566, 3579, 86, 86, 3570, 3576, 86, 3571, 3577, 3581, + 3582, 86, 3583, 86, 86, 3806, 86, 3574, 86, 3584, + 3585, 3575, 86, 86, 3587, 3586, 3588, 3589, 86, 3590, + 3591, 86, 3576, 86, 3594, 3577, 3581, 3582, 3592, 3583, + 3593, 86, 86, 3596, 3599, 3597, 3584, 3585, 86, 3600, + 86, 86, 3586, 3595, 3589, 3598, 86, 86, 86, 3601, + + 3602, 86, 86, 86, 86, 3592, 86, 3593, 3603, 3604, + 86, 86, 3597, 3605, 3606, 3608, 86, 3607, 86, 3609, + 3595, 3610, 3598, 3612, 3613, 3611, 86, 86, 3615, 3617, + 3806, 86, 3621, 86, 3622, 86, 86, 3614, 86, 3616, + 86, 86, 3608, 86, 3607, 3618, 86, 86, 86, 86, + 3612, 3613, 3611, 3619, 3620, 86, 86, 86, 86, 3621, + 3624, 86, 3623, 3633, 3614, 3628, 3616, 86, 3625, 86, + 3626, 3632, 3618, 3629, 86, 3627, 86, 86, 3631, 3630, + 3619, 3620, 86, 3806, 86, 86, 3637, 86, 3634, 3623, + 3633, 86, 3628, 3636, 86, 3625, 86, 3626, 3632, 3635, + + 3629, 3638, 3627, 86, 86, 3806, 3630, 86, 86, 3639, + 86, 3640, 3644, 3637, 3641, 3634, 3642, 86, 3643, 86, + 3636, 3646, 3645, 86, 3647, 86, 3635, 3648, 3638, 3649, + 3650, 3657, 86, 3651, 86, 86, 3639, 86, 3640, 3644, + 86, 3641, 3653, 3642, 3652, 3643, 86, 86, 3646, 3645, + 3655, 86, 3654, 3658, 86, 3660, 86, 86, 3657, 86, + 3651, 3659, 86, 86, 3656, 86, 3661, 86, 86, 3653, + 3662, 3652, 3806, 3663, 3664, 86, 3665, 3655, 3667, 3654, + 3658, 86, 3660, 86, 86, 3806, 86, 86, 3659, 3668, + 86, 3656, 86, 3661, 3666, 3669, 86, 3662, 3670, 3672, + + 3663, 3664, 3671, 3665, 3674, 3667, 3673, 86, 86, 3675, + 86, 3676, 86, 3677, 86, 3680, 3668, 3678, 86, 3681, + 86, 3666, 3669, 3682, 3684, 3670, 3672, 3679, 86, 3671, + 86, 3674, 3683, 3673, 86, 86, 86, 86, 3676, 3685, + 3677, 3686, 86, 3688, 3678, 3687, 3681, 3689, 3806, 86, + 86, 86, 86, 3690, 3679, 3691, 3695, 86, 86, 3683, + 3693, 3692, 3696, 3694, 3697, 3712, 86, 86, 3686, 86, + 3688, 86, 3687, 86, 3689, 86, 86, 3699, 3698, 3700, + 3690, 3701, 3691, 3695, 86, 86, 3702, 3703, 3692, 3696, + 3694, 86, 86, 3704, 3705, 3706, 3708, 86, 3709, 86, + + 3707, 86, 3713, 3711, 86, 3698, 86, 86, 86, 86, + 3710, 86, 3715, 86, 3703, 3714, 3717, 3718, 3719, 3806, + 3704, 86, 3706, 86, 86, 3709, 86, 3707, 86, 86, + 3711, 3723, 3716, 3806, 86, 3720, 3722, 3710, 86, 3715, + 86, 86, 3714, 3717, 86, 86, 3721, 3725, 3724, 86, + 3727, 3728, 3726, 86, 86, 86, 3806, 3732, 3723, 3716, + 86, 3730, 3720, 3722, 86, 86, 3736, 3731, 3729, 86, + 3737, 3738, 3734, 3721, 3725, 3724, 86, 3727, 3728, 3726, + 3733, 86, 3735, 86, 86, 3739, 3740, 86, 3730, 86, + 86, 3806, 86, 86, 3731, 3729, 3741, 3737, 3742, 3734, + + 3744, 3745, 3743, 86, 3746, 3806, 3747, 3733, 86, 3735, + 86, 86, 3739, 3740, 3748, 3750, 3749, 3806, 86, 3751, + 86, 3753, 3752, 3741, 86, 3742, 86, 86, 86, 3743, + 86, 3746, 86, 86, 3755, 86, 3754, 86, 3756, 3757, + 3760, 3748, 3750, 3749, 86, 3763, 3751, 3761, 86, 3752, + 3762, 3758, 3806, 86, 3759, 86, 3764, 3765, 86, 86, + 3768, 3755, 86, 3754, 86, 3756, 86, 3760, 3770, 86, + 3771, 3766, 3763, 3773, 3761, 3767, 86, 3762, 3758, 86, + 3769, 3759, 86, 3764, 3765, 86, 86, 3768, 86, 3772, + 3775, 3774, 3776, 86, 86, 3770, 86, 3771, 3766, 86, + + 3773, 3777, 3767, 3778, 3779, 3780, 3784, 3769, 3806, 3791, + 3806, 86, 3781, 3782, 86, 3783, 3772, 86, 3774, 3776, + 86, 3785, 3786, 86, 86, 86, 86, 3790, 3777, 86, + 86, 3779, 3780, 86, 3787, 86, 86, 3788, 3789, 3781, + 3782, 3794, 3783, 3792, 86, 86, 86, 3793, 3785, 3786, + 3795, 86, 3796, 86, 3790, 86, 86, 3797, 3798, 3800, + 3799, 3787, 3804, 3802, 3788, 3789, 3801, 86, 3794, 3805, + 3792, 86, 86, 3806, 3793, 3803, 3806, 86, 3806, 3796, + 86, 86, 3806, 86, 86, 86, 3800, 3799, 86, 86, + 3802, 3806, 3806, 3801, 3806, 3806, 86, 3806, 3806, 3806, + + 3806, 3806, 3803, 47, 47, 47, 47, 47, 47, 47, + 52, 52, 52, 52, 52, 52, 52, 57, 57, 57, + 57, 57, 57, 57, 63, 63, 63, 63, 63, 63, + 63, 68, 68, 68, 68, 68, 68, 68, 74, 74, + 74, 74, 74, 74, 74, 80, 80, 80, 80, 80, + 80, 80, 89, 89, 3806, 89, 89, 89, 89, 161, + 161, 3806, 3806, 3806, 161, 161, 163, 163, 3806, 3806, + 163, 3806, 163, 165, 3806, 3806, 3806, 3806, 3806, 165, + 168, 168, 3806, 3806, 3806, 168, 168, 170, 3806, 3806, + 3806, 3806, 3806, 170, 172, 172, 3806, 172, 172, 172, + + 172, 175, 3806, 3806, 3806, 3806, 3806, 175, 178, 178, + 3806, 3806, 3806, 178, 178, 90, 90, 3806, 90, 90, + 90, 90, 17, 3806, 3806, 3806, 3806, 3806, 3806, 3806, + 3806, 3806, 3806, 3806, 3806, 3806, 3806, 3806, 3806, 3806, + 3806, 3806, 3806, 3806, 3806, 3806, 3806, 3806, 3806, 3806, + 3806, 3806, 3806, 3806, 3806, 3806, 3806, 3806, 3806, 3806, + 3806, 3806, 3806, 3806, 3806, 3806, 3806, 3806, 3806, 3806, + 3806, 3806, 3806, 3806, 3806, 3806, 3806, 3806, 3806, 3806, + 3806, 3806, 3806, 3806, 3806, 3806, 3806, 3806, 3806 } ; -static const flex_int16_t yy_chk[10784] = +static const flex_int16_t yy_chk[10890] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -2872,12 +2893,12 @@ static const flex_int16_t yy_chk[10784] = 7, 7, 7, 33, 7, 8, 8, 8, 8, 32, 8, 9, 9, 9, 10, 10, 10, 19, 51, 51, - 3785, 19, 233, 3, 32, 33, 4, 67, 67, 5, - 33, 6, 3065, 13, 13, 13, 13, 7, 13, 14, + 3814, 19, 233, 3, 32, 33, 4, 67, 67, 5, + 33, 6, 3094, 13, 13, 13, 13, 7, 13, 14, 14, 14, 14, 8, 14, 15, 15, 15, 9, 25, 233, 10, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 16, 16, 16, 34, 28, 84, - 84, 13, 11, 45, 1192, 25, 25, 14, 12, 34, + 84, 13, 11, 45, 1195, 25, 25, 14, 12, 34, 39, 23, 15, 23, 23, 45, 23, 178, 28, 602, 11, 28, 23, 39, 34, 28, 12, 302, 87, 11, 45, 16, 87, 162, 162, 12, 30, 39, 29, 177, @@ -2913,19 +2934,19 @@ static const flex_int16_t yy_chk[10784] = 102, 117, 103, 112, 104, 41, 107, 228, 103, 109, 41, 110, 112, 41, 103, 117, 103, 114, 109, 107, 41, 116, 104, 104, 41, 41, 111, 111, 113, 125, - 112, 109, 115, 119, 111, 1018, 109, 113, 63, 115, + 112, 109, 115, 119, 111, 1020, 109, 113, 63, 115, 114, 58, 111, 116, 114, 109, 118, 121, 116, 118, 120, 124, 125, 111, 111, 113, 125, 119, 120, 115, - 57, 111, 118, 118, 124, 119, 1018, 121, 122, 121, + 57, 111, 118, 118, 124, 119, 1020, 121, 122, 121, 118, 128, 122, 118, 121, 123, 118, 120, 124, 127, 123, 132, 129, 123, 119, 52, 127, 130, 122, 118, 118, 128, 122, 127, 121, 122, 131, 134, 128, 122, 129, 130, 123, 131, 132, 47, 127, 123, 132, 129, - 133, 1180, 135, 127, 130, 122, 18, 141, 136, 133, + 133, 1183, 135, 127, 130, 122, 18, 141, 136, 133, 134, 135, 136, 131, 134, 137, 139, 140, 136, 141, 142, 142, 137, 139, 145, 143, 140, 133, 146, 135, - 136, 1180, 140, 143, 141, 136, 146, 153, 145, 136, + 136, 1183, 140, 143, 141, 136, 146, 153, 145, 136, 140, 147, 137, 139, 140, 136, 144, 142, 153, 148, 151, 145, 143, 140, 149, 17, 147, 144, 151, 140, @@ -3120,933 +3141,944 @@ static const flex_int16_t yy_chk[10784] = 677, 669, 670, 667, 681, 670, 675, 676, 671, 679, 674, 673, 672, 677, 673, 674, 682, 679, 683, 685, 678, 676, 680, 686, 675, 678, 681, 677, 684, 688, - 684, 681, 687, 689, 686, 691, 679, 687, 700, 690, - 0, 685, 683, 688, 692, 683, 685, 689, 682, 696, - 686, 693, 692, 690, 690, 684, 688, 694, 695, 701, - 689, 690, 697, 698, 687, 695, 690, 691, 703, 693, - - 700, 692, 699, 703, 701, 696, 696, 704, 693, 694, - 690, 690, 697, 698, 694, 695, 701, 699, 702, 697, - 698, 705, 706, 705, 707, 708, 699, 710, 702, 699, - 703, 709, 707, 704, 704, 0, 710, 709, 715, 714, - 702, 716, 717, 0, 699, 702, 714, 706, 705, 706, - 708, 707, 708, 711, 710, 702, 712, 0, 709, 713, - 717, 718, 711, 719, 716, 712, 714, 713, 716, 717, - 715, 721, 720, 718, 724, 719, 722, 723, 727, 721, - 711, 720, 726, 712, 725, 722, 713, 731, 718, 723, - 719, 725, 0, 727, 728, 726, 0, 0, 721, 720, - - 722, 729, 728, 722, 723, 727, 724, 729, 730, 726, - 731, 725, 722, 732, 731, 733, 730, 736, 734, 738, - 739, 728, 732, 735, 735, 736, 733, 734, 729, 737, - 0, 740, 735, 739, 0, 730, 741, 737, 744, 742, - 732, 738, 733, 0, 736, 734, 738, 739, 746, 745, - 735, 735, 742, 743, 744, 749, 737, 740, 740, 741, - 747, 743, 745, 741, 748, 744, 742, 751, 750, 749, - 746, 747, 748, 752, 753, 746, 745, 753, 0, 758, - 743, 754, 749, 755, 757, 759, 762, 747, 750, 751, - 756, 748, 761, 752, 751, 750, 760, 758, 759, 756, - - 752, 753, 763, 754, 757, 755, 758, 761, 754, 764, - 755, 757, 759, 766, 760, 765, 767, 756, 762, 761, - 768, 769, 770, 760, 763, 771, 766, 772, 774, 763, - 779, 771, 768, 764, 767, 770, 764, 775, 765, 776, - 766, 0, 765, 767, 781, 769, 782, 768, 769, 770, - 773, 781, 771, 778, 772, 774, 786, 776, 773, 775, - 780, 778, 779, 783, 775, 784, 776, 784, 780, 782, - 785, 781, 787, 782, 788, 789, 773, 773, 783, 785, - 778, 790, 791, 790, 789, 773, 815, 780, 786, 791, - 783, 787, 784, 0, 788, 794, 798, 785, 801, 787, - - 0, 788, 789, 0, 807, 802, 798, 794, 790, 791, - 792, 806, 805, 792, 804, 807, 801, 792, 815, 804, - 792, 839, 794, 798, 809, 801, 802, 792, 792, 806, - 792, 807, 802, 805, 810, 792, 808, 792, 806, 805, - 792, 804, 811, 812, 792, 818, 814, 792, 839, 813, - 809, 809, 812, 814, 792, 792, 0, 792, 811, 808, - 810, 810, 813, 808, 817, 820, 821, 818, 854, 811, - 812, 817, 818, 814, 820, 819, 813, 816, 816, 822, - 816, 819, 822, 816, 0, 823, 0, 824, 816, 821, - 825, 817, 820, 821, 816, 816, 826, 816, 825, 827, - - 854, 823, 819, 816, 816, 816, 822, 816, 823, 824, - 816, 827, 823, 829, 824, 816, 831, 825, 826, 832, - 833, 816, 816, 826, 816, 828, 827, 828, 823, 830, - 835, 834, 833, 836, 830, 837, 831, 829, 0, 840, - 829, 838, 0, 831, 844, 832, 832, 833, 0, 843, - 841, 844, 828, 834, 846, 836, 835, 835, 834, 837, - 836, 830, 837, 838, 840, 841, 840, 842, 838, 847, - 845, 844, 843, 846, 848, 842, 843, 841, 845, 849, - 851, 846, 850, 852, 856, 853, 848, 860, 857, 851, - 853, 855, 849, 857, 842, 847, 847, 845, 852, 859, - - 865, 848, 864, 866, 867, 861, 849, 851, 850, 850, - 852, 856, 853, 855, 861, 862, 868, 863, 855, 860, - 857, 859, 865, 862, 863, 870, 859, 865, 867, 869, - 871, 867, 861, 875, 864, 866, 872, 868, 874, 873, - 879, 876, 862, 868, 863, 872, 880, 874, 869, 877, - 878, 879, 870, 881, 880, 875, 869, 871, 873, 878, - 875, 882, 883, 872, 876, 874, 873, 879, 876, 877, - 884, 885, 889, 880, 886, 890, 877, 878, 887, 882, - 881, 883, 891, 886, 892, 891, 887, 896, 882, 883, - 889, 894, 893, 890, 895, 898, 897, 884, 897, 889, - - 896, 886, 890, 885, 901, 887, 892, 902, 0, 891, - 893, 892, 899, 898, 896, 894, 895, 901, 894, 893, - 900, 895, 898, 897, 903, 900, 899, 904, 905, 906, - 911, 901, 906, 902, 902, 904, 903, 908, 907, 899, - 913, 910, 912, 914, 0, 908, 905, 907, 912, 914, - 0, 903, 900, 915, 904, 905, 906, 911, 918, 920, - 925, 908, 913, 918, 908, 907, 910, 913, 910, 912, - 914, 916, 908, 922, 917, 915, 919, 920, 916, 924, - 915, 917, 923, 919, 921, 918, 920, 924, 921, 926, - 927, 923, 925, 928, 929, 930, 922, 931, 916, 933, - - 922, 917, 929, 919, 928, 927, 924, 926, 930, 923, - 932, 921, 933, 934, 935, 936, 926, 927, 931, 0, - 928, 929, 930, 936, 931, 937, 933, 938, 940, 932, - 946, 939, 937, 947, 942, 934, 941, 932, 939, 942, - 934, 935, 936, 941, 944, 938, 945, 940, 943, 949, - 952, 944, 937, 945, 938, 940, 943, 948, 939, 950, - 951, 942, 946, 941, 953, 947, 954, 951, 955, 0, - 948, 944, 950, 945, 958, 943, 955, 956, 957, 960, - 958, 949, 952, 959, 948, 956, 950, 951, 961, 954, - 962, 965, 956, 954, 963, 955, 953, 967, 968, 964, - - 957, 958, 0, 963, 956, 957, 969, 968, 966, 959, - 959, 960, 956, 964, 962, 966, 970, 962, 972, 973, - 961, 963, 971, 965, 967, 968, 964, 971, 969, 970, - 972, 970, 975, 969, 974, 966, 981, 975, 977, 981, - 970, 976, 973, 970, 978, 972, 973, 979, 976, 982, - 977, 988, 0, 984, 971, 979, 970, 985, 970, 975, - 974, 974, 982, 981, 985, 977, 978, 984, 976, 986, - 1015, 978, 0, 988, 979, 986, 982, 990, 988, 991, - 984, 989, 992, 0, 985, 993, 0, 993, 999, 995, - 994, 991, 997, 999, 0, 0, 986, 987, 996, 987, - - 990, 995, 1015, 987, 990, 987, 991, 989, 989, 992, - 987, 996, 993, 994, 997, 987, 995, 994, 998, 997, - 999, 987, 1000, 1001, 987, 996, 987, 1003, 0, 1002, - 987, 998, 987, 1004, 1007, 1006, 1001, 987, 1005, 1003, - 1000, 1002, 987, 1004, 1008, 998, 1010, 1007, 1011, 1000, - 1001, 1013, 1002, 1005, 1003, 1004, 1002, 1006, 1009, 1010, - 1004, 1007, 1006, 1016, 1009, 1005, 1011, 1012, 1002, 1014, - 1004, 1008, 1013, 1010, 1017, 1011, 1019, 1020, 1013, 1021, - 1025, 0, 1020, 1022, 0, 1009, 1026, 1021, 1024, 1012, - 1027, 1014, 1022, 1028, 1012, 1016, 1014, 0, 1032, 1026, - - 1029, 1017, 1025, 1024, 1020, 1027, 1021, 1025, 1019, 1032, - 1022, 1023, 1030, 1026, 1037, 1024, 1023, 1027, 1023, 1028, - 1028, 1031, 1029, 0, 1023, 1032, 1040, 1029, 1033, 1023, - 1023, 1030, 1034, 1036, 1031, 1040, 1023, 1023, 1023, 1030, - 1034, 1033, 1035, 1023, 1036, 1023, 1037, 1039, 1031, 1038, - 1035, 1023, 1042, 1040, 1041, 1033, 1023, 1023, 1043, 1034, - 1036, 1042, 1039, 1023, 1044, 1041, 1045, 1043, 1046, 1035, - 1048, 1038, 1049, 1052, 1039, 1046, 1038, 0, 1050, 1042, - 1053, 1041, 1051, 1057, 1054, 1043, 1050, 1052, 1060, 1045, - 1055, 1044, 1059, 1045, 0, 1046, 1049, 1058, 1055, 1049, - - 1052, 1057, 1048, 1059, 1051, 1050, 1054, 1061, 1062, 1051, - 1057, 1054, 1053, 1065, 1063, 1058, 1062, 1055, 1067, 1059, - 1060, 1064, 1066, 0, 1058, 1061, 1065, 1074, 1064, 1066, - 1070, 1072, 1068, 1067, 1061, 1062, 1063, 1069, 1074, 1077, - 1065, 1063, 1071, 1076, 1080, 1067, 1077, 0, 1064, 1066, - 1068, 1070, 1071, 1079, 1074, 1069, 1076, 1070, 1078, 1068, - 1078, 1082, 1083, 1072, 1069, 1081, 1077, 1084, 1085, 1071, - 1076, 1083, 0, 1081, 1082, 1079, 1080, 1086, 1089, 1084, - 1079, 1090, 1093, 1091, 1094, 1078, 1092, 0, 1082, 1083, - 1085, 1095, 1081, 1100, 1084, 1085, 0, 1097, 1100, 1086, - - 1089, 1091, 1104, 1090, 1086, 1089, 1099, 1096, 1090, 1095, - 1091, 1097, 1092, 1092, 1093, 1103, 1094, 1099, 1095, 1096, - 1102, 1106, 1105, 1102, 1097, 1100, 1104, 1103, 1106, 1104, - 1107, 1108, 1110, 1099, 1096, 1105, 1111, 1109, 1112, 1113, - 1108, 1107, 1103, 1114, 1110, 1112, 1102, 1102, 1106, 1105, - 1102, 1109, 1115, 1116, 1119, 1114, 1118, 1107, 1108, 1110, - 0, 1120, 1121, 1122, 1109, 1112, 1116, 1120, 1111, 1124, - 1114, 1113, 1125, 1126, 1115, 1123, 1127, 1129, 1119, 1115, - 1116, 1119, 1118, 1118, 1121, 1122, 1123, 1124, 1120, 1121, - 1122, 1127, 1131, 1133, 1125, 1126, 1124, 1130, 1129, 1125, - - 1126, 1132, 1123, 1127, 1129, 1134, 1136, 1132, 1130, 1135, - 1137, 0, 1138, 1131, 1139, 1136, 1142, 1143, 1140, 1131, - 1144, 1145, 1141, 1139, 1130, 1133, 1140, 1135, 1132, 1141, - 1146, 1143, 1134, 1136, 1137, 1149, 1135, 1137, 1138, 1138, - 1142, 1139, 1147, 1142, 1143, 1140, 1148, 1151, 1150, 1141, - 1153, 1154, 1144, 1145, 1155, 1156, 1158, 0, 1157, 0, - 1154, 1155, 1146, 0, 1147, 1171, 1159, 1149, 1148, 1147, - 1150, 1160, 1153, 1148, 1161, 1150, 1164, 1153, 1154, 1151, - 1157, 1155, 1162, 1158, 1159, 1157, 1163, 1156, 1165, 1160, - 1166, 1162, 1167, 1159, 1163, 1168, 1161, 1171, 1160, 1170, - - 1164, 1161, 1172, 1164, 1168, 1169, 1166, 1170, 1174, 1162, - 1175, 1173, 1165, 1163, 1167, 1165, 1176, 1166, 1177, 1167, - 1169, 1178, 1168, 1173, 1176, 1184, 1170, 1184, 1182, 1187, - 1174, 1177, 1169, 1179, 1172, 1174, 1178, 1175, 1173, 1183, - 1181, 1197, 1179, 1176, 1188, 1177, 1182, 1183, 1178, 1181, - 1186, 1189, 1184, 1190, 1191, 1182, 1187, 1193, 1186, 1197, - 1179, 1191, 1194, 1188, 1195, 1196, 1183, 1181, 1197, 1199, - 1193, 1188, 1201, 1189, 1194, 1190, 1198, 1186, 1189, 1195, - 1190, 1191, 1202, 1200, 1193, 1204, 1203, 1196, 1198, 1194, - 1200, 1195, 1196, 1205, 1206, 1207, 1199, 1203, 1208, 0, - - 0, 1209, 1212, 1198, 1201, 1210, 1217, 1204, 1207, 0, - 1200, 1208, 1204, 1203, 1202, 1213, 1206, 1210, 1205, 1211, - 1205, 1206, 1207, 1209, 1214, 1208, 1212, 1211, 1209, 1212, - 1215, 1218, 1210, 1217, 1219, 1213, 1214, 1220, 1215, 1221, - 1222, 1223, 1213, 1219, 1218, 1228, 1211, 1222, 1225, 1220, - 1223, 1214, 1223, 0, 1226, 1223, 1227, 1215, 1218, 1239, - 1221, 1219, 1232, 1223, 1220, 1229, 1221, 1222, 1223, 1231, - 1232, 1225, 1228, 1230, 0, 1225, 1234, 1223, 1227, 1223, - 1226, 1226, 1223, 1227, 1236, 1229, 1230, 1237, 1233, 1232, - 1238, 1239, 1229, 1231, 1234, 1237, 1231, 1233, 1240, 1241, - - 1230, 1243, 1242, 1234, 1245, 1238, 1236, 0, 1246, 1243, - 1247, 1236, 1241, 1250, 1237, 1233, 1248, 1238, 1242, 1249, - 1240, 1251, 1252, 1248, 0, 1240, 1241, 1265, 1243, 1242, - 1246, 1245, 1247, 1253, 1252, 1246, 1250, 1247, 1255, 1251, - 1250, 1249, 1254, 1248, 1256, 1253, 1249, 1255, 1251, 1252, - 1254, 1258, 1257, 1259, 1262, 1261, 1256, 1260, 1263, 1265, - 1253, 1259, 1255, 1260, 1261, 1255, 1258, 1264, 0, 1254, - 1263, 1256, 1257, 1268, 1255, 1262, 0, 1269, 1258, 1257, - 1259, 1262, 1261, 1264, 1260, 1263, 1266, 1271, 1267, 1269, - 1270, 1268, 0, 1266, 1264, 1267, 1274, 1272, 1270, 1273, - - 1268, 1273, 1271, 1275, 1269, 1272, 1278, 1279, 1274, 1276, - 1281, 0, 1280, 1266, 1271, 1267, 1276, 1270, 1284, 1279, - 1282, 1283, 1287, 1274, 1272, 1280, 1273, 1282, 1285, 1281, - 1287, 1288, 1283, 1290, 1279, 1275, 1276, 1281, 1278, 1280, - 1284, 1286, 1289, 1285, 1288, 1284, 1286, 1282, 1283, 1287, - 1292, 1294, 1293, 1296, 0, 1285, 1289, 1298, 1288, 1290, - 1290, 1295, 0, 1299, 1292, 0, 1297, 0, 0, 1289, - 1293, 1301, 1300, 1286, 1291, 1296, 1303, 1292, 1291, 1293, - 1296, 1291, 1291, 1294, 1297, 1299, 1291, 1295, 1295, 1298, - 1299, 0, 1291, 1297, 1300, 1307, 1291, 1301, 1301, 1300, - - 1291, 1291, 1303, 1303, 1302, 1291, 1306, 1310, 1291, 1291, - 1302, 1305, 1304, 1291, 1304, 1306, 1308, 0, 1305, 1291, - 1309, 0, 1311, 1291, 1312, 1310, 1314, 1307, 1315, 1311, - 1313, 1302, 1318, 1306, 1310, 1314, 1304, 1316, 1305, 1304, - 1317, 1304, 1319, 1313, 1309, 0, 1312, 1309, 1308, 1311, - 0, 1312, 1320, 1314, 1318, 1322, 0, 1313, 1316, 1318, - 1315, 1323, 0, 1328, 1316, 1319, 1320, 1324, 1326, 1319, - 1325, 1325, 1317, 1335, 1323, 0, 1330, 1322, 1335, 1320, - 1321, 0, 1322, 1330, 1326, 1321, 1328, 1321, 1323, 1321, - 1328, 1321, 1329, 1324, 1324, 1326, 1331, 1332, 1321, 1325, - - 1335, 1333, 1334, 1330, 1329, 1331, 1333, 1321, 1336, 1337, - 1338, 1342, 1321, 1339, 1321, 1332, 1321, 1340, 1321, 1329, - 1334, 1339, 1337, 1331, 1332, 1340, 1341, 1344, 1338, 1334, - 1336, 1343, 1345, 1333, 1346, 1336, 1337, 1338, 1347, 1341, - 1339, 1351, 1344, 1342, 1340, 1349, 1350, 1346, 1353, 1348, - 1351, 1345, 1354, 1341, 1344, 1356, 0, 1343, 1343, 1345, - 1347, 1346, 1348, 1349, 1357, 1347, 1350, 1352, 1351, 1352, - 1353, 1355, 1349, 1350, 1358, 1353, 1348, 1362, 1360, 1354, - 1364, 1361, 1356, 1355, 1366, 1362, 1357, 1367, 1363, 1365, - 1368, 1357, 0, 0, 1352, 1372, 1365, 1377, 1355, 1358, - - 1374, 1358, 1360, 1361, 1362, 1360, 1363, 1364, 1361, 1375, - 1374, 1366, 1368, 1367, 1367, 1363, 1365, 1368, 1369, 1370, - 1371, 1373, 1372, 1376, 1369, 1370, 1371, 1374, 1373, 1377, - 1376, 1378, 1380, 1375, 1379, 1381, 1375, 1384, 1386, 1383, - 1385, 0, 1387, 0, 1381, 1369, 1370, 1371, 1373, 1384, - 1376, 1388, 1379, 1378, 1385, 1387, 1389, 1380, 1378, 1380, - 1386, 1379, 1381, 1383, 1384, 1386, 1383, 1385, 1390, 1387, - 1391, 1392, 0, 1388, 1393, 1389, 1395, 1394, 1388, 1400, - 1401, 1396, 1398, 1389, 1404, 1395, 1397, 0, 1402, 0, - 1390, 1407, 1403, 1392, 1391, 1390, 1398, 1391, 1392, 1394, - - 1393, 1393, 1396, 1395, 1394, 1405, 1397, 1407, 1396, 1398, - 1402, 1400, 1401, 1397, 1403, 1402, 1404, 1406, 1407, 1403, - 1408, 1409, 1412, 1405, 1411, 1406, 1413, 1414, 1409, 1415, - 1416, 1412, 1405, 1417, 1416, 1418, 1415, 1419, 1422, 1414, - 0, 0, 1435, 1413, 1406, 1420, 1411, 1408, 1409, 1412, - 1429, 1411, 1424, 1413, 1414, 1425, 1415, 1416, 1419, 1424, - 1423, 1420, 1425, 1426, 1419, 1417, 1423, 1418, 1427, 1435, - 1422, 1428, 1420, 1423, 1433, 0, 1429, 1429, 1426, 1424, - 1428, 1427, 1425, 1431, 1430, 1431, 1437, 1423, 1432, 0, - 1426, 1430, 0, 1423, 1434, 1427, 1433, 1432, 1428, 1439, - - 1436, 1433, 1442, 1434, 1436, 1443, 1444, 1439, 1437, 1440, - 1431, 1430, 0, 1437, 1440, 1432, 1441, 1448, 1445, 1444, - 1442, 1434, 1449, 1450, 1443, 1441, 1439, 1436, 1446, 1442, - 1445, 1446, 1443, 1444, 1447, 1448, 1450, 1447, 1452, 1453, - 1446, 1440, 0, 1441, 1448, 1445, 1456, 1449, 1455, 1449, - 1450, 1454, 1459, 1455, 1456, 1446, 1447, 0, 1446, 1457, - 1457, 1447, 1453, 1458, 1447, 1460, 1453, 1454, 1462, 1461, - 1452, 1464, 1458, 1456, 1459, 1463, 1465, 1462, 1454, 1459, - 1455, 1467, 1463, 1465, 1470, 1474, 1457, 1460, 1468, 1471, - 1458, 1461, 1460, 1464, 1467, 1462, 1461, 1468, 1464, 1473, - - 1469, 0, 1463, 1465, 1472, 1475, 1478, 1473, 1467, 1469, - 1470, 1470, 1471, 1472, 1476, 1468, 1471, 1474, 1479, 1478, - 1475, 1477, 1480, 1483, 1482, 1476, 1473, 1469, 1481, 1477, - 1479, 1472, 1475, 1478, 1480, 1484, 1481, 1489, 1485, 1486, - 1488, 1476, 1490, 1483, 1493, 1479, 1482, 1485, 1477, 1480, - 1483, 1482, 1486, 1487, 1490, 1481, 1491, 1484, 1488, 1487, - 1494, 1492, 1484, 1489, 1489, 1485, 1486, 1488, 1492, 1490, - 1493, 1493, 1495, 1496, 1491, 1497, 1498, 1503, 1499, 1500, - 1487, 1501, 1504, 1491, 1505, 1502, 1496, 1501, 1492, 0, - 1500, 1506, 1494, 0, 1507, 1509, 1510, 0, 0, 1499, - - 1496, 1497, 1497, 1498, 1495, 1499, 1500, 1502, 1501, 1503, - 1511, 1513, 1502, 1507, 1504, 1507, 1505, 1506, 1506, 1510, - 1507, 1507, 1509, 1510, 1512, 1516, 1513, 1515, 1511, 1517, - 1514, 1519, 0, 1512, 1518, 1521, 0, 1511, 1513, 1515, - 1507, 1518, 1507, 1514, 1520, 1516, 1525, 1534, 1521, 1526, - 1519, 1512, 1516, 1525, 1515, 1517, 1517, 1514, 1519, 1522, - 1523, 1518, 1521, 1524, 1527, 1523, 1520, 1522, 1524, 1528, - 1529, 1520, 1527, 1525, 1531, 1526, 1526, 1528, 1530, 1534, - 1532, 1533, 1531, 1540, 1535, 1536, 1522, 1532, 1529, 0, - 1533, 1527, 1523, 1542, 1536, 1524, 1528, 1529, 1538, 1543, - - 1530, 1531, 1537, 1539, 1539, 1530, 1535, 1532, 1533, 1537, - 1538, 1535, 1536, 1541, 1542, 1540, 1544, 1545, 1546, 1547, - 1542, 1541, 0, 0, 1544, 1538, 1546, 1547, 1548, 1537, - 1539, 1543, 1551, 1549, 1550, 1545, 1548, 1552, 1551, 1553, - 1541, 1549, 1555, 1544, 1545, 1546, 1547, 1550, 1554, 1552, - 1555, 1558, 1557, 1559, 1556, 1548, 1562, 0, 0, 1551, - 1549, 1550, 1556, 1560, 1552, 1553, 1553, 1557, 1561, 1555, - 1562, 1564, 1554, 1565, 1563, 1554, 0, 1569, 1558, 1557, - 1559, 1556, 1570, 1562, 1568, 1560, 1563, 1565, 1566, 1564, - 1560, 1561, 1566, 1568, 1570, 1561, 1571, 1572, 1564, 1569, - - 1565, 1563, 1573, 1571, 1569, 1566, 1574, 1575, 1572, 1570, - 1576, 1568, 1578, 1566, 1579, 1566, 1577, 0, 1586, 1566, - 1582, 0, 1576, 1571, 1572, 1580, 1581, 1582, 1574, 1573, - 1577, 1583, 1566, 1574, 1587, 1585, 1579, 1576, 1584, 1575, - 1583, 1579, 1585, 1577, 1578, 1589, 1591, 1582, 1580, 1581, - 1586, 1595, 1580, 1581, 1589, 1593, 1584, 1592, 1583, 1594, - 1596, 1587, 1585, 1592, 1598, 1584, 1600, 1596, 1601, 1602, - 1603, 0, 1589, 1607, 1606, 0, 1609, 1593, 1591, 1607, - 1602, 1603, 1593, 1595, 1592, 1594, 1594, 1596, 1604, 1617, - 1600, 1598, 1611, 1600, 1609, 1601, 1602, 1603, 1606, 1604, - - 1607, 1606, 1608, 1609, 1610, 1612, 1613, 1616, 1614, 1608, - 1619, 1610, 1613, 1618, 1615, 1604, 1614, 1612, 1611, 1611, - 1616, 1617, 1622, 0, 1622, 1624, 0, 1629, 1619, 1608, - 1621, 1610, 1612, 1613, 1616, 1614, 1615, 1619, 1620, 1618, - 1618, 1615, 1621, 1623, 1626, 1625, 1627, 1620, 1628, 1622, - 1623, 1624, 1624, 1626, 1629, 1630, 1631, 1621, 1625, 1632, - 1628, 1633, 1640, 1631, 1635, 1620, 1633, 1636, 1627, 1634, - 1623, 1626, 1625, 1627, 0, 1628, 1637, 1634, 1630, 1638, - 1635, 1641, 1630, 1631, 1637, 1632, 1632, 1643, 1633, 1640, - 1636, 1635, 0, 1642, 1636, 1645, 1634, 0, 1646, 1644, - - 1648, 1638, 1651, 1637, 1645, 1641, 1638, 1642, 1641, 1643, - 1644, 1646, 1650, 1648, 1643, 1647, 1647, 1649, 1652, 1649, - 1642, 1655, 1645, 1647, 1653, 1646, 1644, 1648, 1651, 1651, - 1650, 1653, 1656, 1657, 1654, 1661, 1660, 1659, 1663, 1650, - 1652, 1654, 1647, 1647, 1649, 1652, 1658, 1662, 1655, 1664, - 1656, 1653, 1666, 1658, 1662, 1657, 1667, 1669, 1660, 1656, - 1657, 1654, 1659, 1660, 1659, 1666, 1671, 1661, 1673, 1668, - 1663, 1664, 1672, 1658, 1662, 1672, 1664, 1668, 1669, 1666, - 1674, 1676, 0, 1667, 1669, 1675, 1678, 1681, 1671, 1677, - 1676, 1679, 0, 1671, 1673, 1673, 1668, 1682, 1675, 1672, - - 1680, 1677, 1681, 1684, 1682, 1686, 1674, 1674, 1676, 1680, - 1678, 1685, 1675, 1678, 1681, 1689, 1677, 1679, 1679, 1683, - 1691, 1686, 1683, 1688, 1682, 1692, 1690, 1680, 1690, 1686, - 1694, 1697, 1686, 1685, 1683, 1684, 1693, 1689, 1685, 1693, - 1695, 1688, 1689, 1683, 1691, 1699, 1683, 1691, 1686, 1683, - 1688, 1696, 1692, 1690, 1698, 0, 1701, 1697, 1697, 1702, - 1700, 1683, 1694, 1693, 1704, 1705, 1703, 1706, 1702, 1707, - 1701, 1704, 1695, 1696, 1703, 1708, 1709, 1699, 1696, 1710, - 1698, 1698, 1700, 1701, 0, 1713, 1702, 1700, 1712, 1705, - 1711, 1704, 1705, 1703, 1711, 1715, 1714, 1718, 1709, 1706, - - 0, 1707, 1716, 1709, 1715, 1718, 1719, 1708, 1717, 1716, - 1712, 1710, 1713, 1719, 1720, 1712, 1723, 1711, 1714, 1721, - 1717, 1722, 1715, 1714, 1718, 1723, 1724, 1720, 1724, 1716, - 1726, 1725, 1721, 1719, 1722, 1717, 1727, 1730, 1733, 1728, - 1734, 1720, 1732, 1723, 1727, 1731, 1721, 1734, 1722, 1737, - 1735, 1742, 1730, 1724, 1725, 1726, 1732, 1726, 1725, 1728, - 1731, 1735, 1737, 1727, 1730, 1738, 1728, 1734, 1736, 1732, - 1733, 1739, 1731, 1740, 1743, 1736, 1737, 1735, 1742, 1745, - 1744, 1743, 1746, 1738, 1747, 1749, 1748, 0, 1749, 1738, - 0, 1740, 1738, 0, 1745, 1736, 1747, 1739, 1739, 1748, - - 1740, 1743, 1744, 1751, 1752, 1750, 1745, 1744, 1746, 1746, - 1738, 1747, 1749, 1748, 1750, 1753, 1752, 1755, 1759, 1754, - 1759, 1751, 1754, 1760, 1757, 1761, 1762, 1766, 1755, 1757, - 1751, 1752, 1750, 1763, 1764, 1753, 1757, 1754, 1765, 0, - 1771, 1767, 1753, 1764, 1755, 1759, 1754, 1760, 1763, 1754, - 1760, 1757, 1761, 1762, 1766, 1767, 1757, 1769, 1768, 1770, - 1763, 1764, 1765, 1772, 1771, 1765, 1768, 1771, 1767, 1772, - 1773, 1775, 1774, 1776, 1779, 1777, 1780, 1779, 1781, 1769, - 1774, 1770, 1775, 1777, 1769, 1768, 1770, 1782, 1783, 0, - 1772, 1776, 1773, 1778, 1780, 1785, 1778, 1773, 1775, 1774, - - 1776, 1779, 1777, 1780, 1786, 1784, 1787, 1788, 1783, 1785, - 1781, 1778, 1784, 1786, 1782, 1783, 1789, 1790, 1788, 1787, - 1778, 1789, 1785, 1778, 1794, 1791, 1794, 1795, 0, 1796, - 1798, 1786, 1784, 1787, 1788, 1797, 1795, 1804, 0, 1790, - 1791, 1798, 1799, 1803, 1790, 1800, 1804, 1801, 1789, 1800, - 1802, 1794, 1791, 1802, 1795, 1796, 1796, 1798, 1806, 1797, - 1799, 1801, 1797, 1814, 1804, 1803, 1809, 1806, 1802, 1799, - 1803, 1800, 1800, 1801, 1801, 1805, 1800, 1802, 1807, 1809, - 1802, 1805, 1810, 1807, 1811, 1806, 1812, 1813, 1801, 1811, - 1815, 1816, 1817, 1809, 1810, 1814, 1820, 1826, 1818, 1815, - - 1813, 0, 1805, 1819, 1829, 1821, 0, 0, 1812, 1810, - 1807, 1811, 1823, 1812, 1813, 1824, 1819, 1815, 1816, 1823, - 1818, 1825, 1824, 1827, 1817, 1818, 1821, 1828, 1820, 1826, - 1819, 1837, 1821, 1828, 1825, 1833, 1829, 1827, 1831, 1823, - 1836, 1834, 1824, 1833, 1835, 1838, 1840, 1839, 1825, 1834, - 1827, 1828, 1835, 1837, 1828, 1841, 1845, 1831, 1837, 1836, - 1828, 1839, 1833, 1838, 1840, 1831, 1842, 1836, 1834, 1841, - 1843, 1835, 1838, 1840, 1839, 1844, 1846, 1847, 1848, 1842, - 1849, 0, 1841, 1843, 1850, 1851, 1853, 1852, 1845, 1854, - 1855, 1850, 1848, 1842, 1851, 1852, 1844, 1843, 1857, 0, - - 1860, 1847, 1844, 1854, 1847, 1848, 1862, 1849, 1846, 1857, - 1856, 1850, 1851, 1853, 1852, 1856, 1854, 1858, 1863, 1865, - 1866, 1861, 1855, 1844, 1864, 1857, 1858, 1860, 1861, 1862, - 1868, 1864, 1867, 1862, 1868, 1871, 1870, 1856, 1875, 1873, - 1863, 1865, 1866, 1872, 1858, 1863, 1865, 1866, 1861, 1874, - 1867, 1864, 1870, 1871, 1873, 1879, 1876, 1868, 1877, 1867, - 1878, 1874, 1871, 1870, 1876, 1875, 1873, 1872, 1878, 1880, - 1872, 1881, 1882, 1877, 1883, 1884, 1874, 1888, 1886, 1889, - 1892, 1887, 1879, 1876, 1881, 1877, 1886, 1878, 1887, 1883, - 1884, 1880, 1882, 1891, 1889, 1890, 1880, 1893, 1881, 1882, - - 1895, 1883, 1884, 1894, 1890, 1886, 1889, 1892, 1887, 1888, - 1894, 1897, 1899, 1898, 1891, 1900, 1902, 0, 1904, 1901, - 1891, 1893, 1890, 1903, 1893, 1904, 1906, 1895, 1920, 1908, - 1894, 1898, 1905, 1897, 1901, 1906, 1909, 1905, 1897, 1907, - 1898, 1902, 1900, 1902, 1899, 1904, 1901, 1903, 1907, 1910, - 1903, 1908, 1912, 1906, 1911, 1913, 1908, 1914, 1909, 1905, - 1920, 1915, 1918, 1909, 1912, 1916, 1907, 1910, 1915, 1911, - 1914, 1917, 1916, 1919, 1918, 1914, 1910, 1913, 1927, 1912, - 1921, 1911, 1913, 1923, 1914, 1927, 1921, 1916, 1915, 1918, - 1926, 1928, 1916, 1917, 1923, 1924, 1925, 1914, 1917, 1916, - - 1919, 1926, 1930, 1924, 1925, 1927, 1929, 1921, 1929, 1931, - 1923, 1932, 1934, 1933, 1941, 1935, 1928, 1926, 1928, 1929, - 1933, 1936, 1924, 1925, 1937, 1938, 1939, 1936, 1930, 1930, - 1937, 1938, 1940, 1929, 1942, 1929, 1931, 1944, 1932, 1934, - 1933, 1935, 1935, 1946, 1948, 1945, 1941, 1949, 1936, 1949, - 1951, 1937, 1938, 1939, 1945, 1940, 1947, 1950, 1942, 1940, - 1947, 1942, 1954, 1952, 1953, 1957, 1948, 1955, 0, 1944, - 1952, 1948, 1945, 1958, 1949, 1946, 1956, 1951, 1959, 1955, - 1960, 1950, 1956, 1947, 1950, 1961, 1953, 1957, 0, 1954, - 1952, 1953, 1957, 1966, 1955, 1958, 1972, 0, 1978, 1963, - - 1958, 1972, 1960, 1956, 1959, 1959, 1963, 1960, 1962, 1962, - 1962, 1964, 1965, 1969, 1967, 1962, 0, 1961, 1973, 1965, - 1964, 1967, 1968, 1962, 1970, 1966, 1963, 1975, 1972, 1968, - 1978, 1973, 1974, 1969, 1976, 1962, 1962, 1962, 1964, 1965, - 1969, 1967, 1962, 1977, 1974, 1973, 1970, 1979, 1982, 1968, - 1976, 1970, 1975, 1980, 1975, 1977, 1981, 1983, 1983, 1974, - 1980, 1976, 1981, 1984, 1985, 1979, 1987, 1986, 1988, 1989, - 1977, 1985, 1986, 1992, 1979, 1982, 1989, 1993, 1998, 1993, - 1980, 1994, 1997, 1981, 1983, 1996, 2002, 2000, 1997, 1984, - 1984, 1985, 1987, 1987, 1986, 1988, 1989, 1999, 2000, 1994, - - 1992, 2003, 2001, 1996, 1993, 1999, 2004, 2003, 1994, 1997, - 1998, 2005, 1996, 2002, 2000, 2001, 2006, 2009, 2004, 2007, - 2007, 2008, 2010, 2010, 1999, 2011, 2013, 0, 2003, 2001, - 2015, 2005, 2014, 2004, 2006, 0, 2011, 2018, 2005, 2019, - 2017, 2022, 2035, 2006, 2009, 2021, 2007, 2008, 2008, 2010, - 2016, 2023, 2011, 2021, 2014, 0, 0, 2016, 2013, 2014, - 2017, 2024, 2015, 2025, 2019, 2029, 2019, 2017, 2026, 2018, - 2030, 2028, 2021, 2022, 2035, 2027, 2031, 2016, 2023, 2028, - 2026, 2025, 2027, 2024, 2032, 2030, 2033, 2033, 2024, 2029, - 2025, 2034, 2029, 2032, 2036, 2026, 2039, 2030, 2028, 0, - - 2031, 2037, 2027, 2031, 2038, 2042, 2044, 2041, 2037, 0, - 2042, 2032, 2039, 2033, 2041, 2043, 2038, 2034, 2034, 2039, - 2050, 2045, 2046, 2039, 2045, 2051, 2036, 2049, 2037, 2047, - 2046, 2038, 2042, 2044, 2041, 2049, 2052, 2043, 2054, 2039, - 2053, 2047, 2043, 2050, 2055, 2056, 2058, 2050, 2045, 2046, - 2057, 2051, 2051, 2059, 2049, 2057, 2047, 2052, 2053, 2059, - 0, 2060, 2055, 2052, 2062, 2054, 2057, 2053, 2056, 2063, - 2061, 2055, 2056, 2058, 2060, 2066, 2063, 2057, 2061, 2069, - 2059, 2070, 2057, 2064, 2067, 2065, 2062, 2068, 2060, 2071, - 2064, 2062, 2065, 2067, 2072, 2070, 2063, 2061, 2077, 2068, - - 2073, 2069, 2083, 2079, 2075, 2077, 2069, 2066, 2070, 2081, - 2064, 2067, 2065, 2076, 2068, 2078, 2071, 2085, 2076, 2082, - 2072, 2072, 2075, 2073, 2082, 2077, 2087, 2073, 2088, 2076, - 2079, 2075, 2086, 2086, 2083, 2089, 2081, 2078, 2092, 2091, - 2076, 2093, 2078, 2088, 2094, 2076, 2096, 2098, 2087, 2085, - 2095, 2082, 2095, 2087, 2091, 2088, 2093, 2097, 2099, 2086, - 2102, 2092, 2097, 2109, 2100, 2092, 2091, 2089, 2093, 2101, - 2094, 2094, 2100, 2103, 2105, 2106, 2101, 2095, 2096, 2098, - 2110, 2107, 2102, 2106, 2097, 2099, 2111, 2102, 2103, 2105, - 2109, 2100, 2112, 2113, 2115, 2116, 2101, 2118, 2114, 0, - - 2103, 2105, 2106, 2107, 2110, 2114, 2117, 2110, 2107, 2119, - 2121, 2122, 2111, 2111, 2125, 2124, 2116, 2126, 2118, 2112, - 2113, 2131, 2116, 2136, 2118, 2114, 2115, 2119, 2117, 2125, - 2128, 2129, 2121, 2117, 2130, 2132, 2119, 2121, 2122, 2124, - 2135, 2125, 2124, 2126, 2126, 2128, 2129, 2133, 2131, 2134, - 2136, 2139, 2137, 2132, 2138, 2140, 2130, 2128, 2129, 2137, - 2139, 2130, 2132, 2140, 2135, 2141, 2143, 2135, 2142, 2133, - 2147, 2134, 2138, 2145, 2133, 2144, 2134, 2146, 2139, 2137, - 2150, 2138, 2140, 2147, 2144, 2149, 2146, 2151, 2141, 2150, - 2142, 2145, 2141, 2154, 2153, 2142, 2149, 2147, 2143, 2152, - - 2145, 2153, 2144, 2156, 2146, 2151, 2155, 2150, 2159, 2157, - 2158, 2149, 2149, 2162, 2151, 2157, 2165, 2152, 2156, 2154, - 2154, 2153, 2159, 2149, 2155, 2164, 2152, 2165, 2166, 2169, - 2156, 2167, 2158, 2155, 2170, 2159, 2157, 2158, 2171, 2166, - 2162, 2169, 2167, 2165, 2172, 0, 2173, 2170, 0, 2164, - 2174, 2175, 2164, 2176, 2172, 2166, 2169, 2177, 2167, 2180, - 2178, 2170, 2176, 2181, 2175, 2183, 2185, 2184, 2186, 2183, - 2171, 2172, 2173, 2173, 0, 2174, 2187, 2174, 2175, 2178, - 2176, 2186, 2190, 2228, 2177, 0, 2180, 2178, 2184, 2181, - 2181, 2191, 2183, 2189, 2184, 2186, 2187, 2188, 2185, 2191, - - 2189, 2192, 2188, 2187, 2193, 2198, 2194, 2192, 2190, 2190, - 2195, 2200, 2196, 2197, 2197, 2228, 2200, 2191, 2191, 2193, - 2189, 2194, 2195, 2198, 2188, 2207, 2191, 2196, 2192, 2199, - 2201, 2193, 2198, 2194, 2201, 2204, 2206, 2195, 2208, 2196, - 2197, 2199, 2204, 2200, 2202, 2202, 2205, 2208, 2202, 2215, - 2205, 2206, 2207, 2209, 2210, 2211, 2199, 2201, 0, 2212, - 2209, 2202, 2204, 2206, 2218, 2208, 2212, 2214, 2217, 2202, - 2216, 2202, 2202, 2205, 2215, 2202, 2215, 2211, 2210, 2216, - 2209, 2210, 2211, 2220, 2218, 2223, 2212, 2222, 2202, 2214, - 2217, 2218, 2224, 2225, 2214, 2217, 2222, 2216, 2226, 2231, - - 2232, 2220, 2227, 2223, 2229, 2233, 2226, 2224, 2235, 2227, - 2220, 2229, 2223, 2232, 2222, 2234, 2234, 2238, 2225, 2224, - 2225, 2236, 2243, 2239, 2231, 2226, 2231, 2232, 2240, 2227, - 2235, 2229, 2233, 2242, 2241, 2235, 2244, 2240, 2245, 2238, - 2242, 2246, 2234, 2241, 2238, 2239, 2236, 2248, 2236, 2253, - 2239, 2250, 2245, 2254, 2243, 2240, 2246, 2247, 2244, 2250, - 2242, 2241, 2247, 2244, 2251, 2245, 2248, 2252, 2246, 2255, - 2258, 2256, 2260, 2259, 2248, 2325, 2253, 2251, 2250, 2254, - 2254, 2257, 2252, 2256, 2261, 2255, 2263, 2288, 2257, 2247, - 2264, 2251, 2265, 2261, 2252, 2259, 2255, 2260, 2256, 2260, - - 2259, 2262, 2258, 2266, 2267, 2264, 2269, 2325, 2257, 2262, - 2268, 2261, 2271, 2263, 2288, 2269, 0, 2264, 2265, 2265, - 2262, 2273, 2267, 2272, 0, 2282, 2272, 2276, 2262, 2266, - 2266, 2267, 2268, 2269, 2274, 2271, 2262, 2268, 2275, 2271, - 2274, 2272, 2276, 2275, 2277, 2278, 2273, 2282, 2273, 2280, - 2272, 2281, 2282, 2272, 2276, 2283, 2286, 0, 0, 2285, - 2278, 2274, 2277, 2280, 0, 2289, 2281, 2287, 2286, 2295, - 2275, 2277, 2278, 2285, 2289, 2286, 2280, 2283, 2281, 2290, - 2291, 2295, 2283, 2286, 2294, 2287, 2285, 2292, 2290, 2291, - 2296, 2293, 2289, 2293, 2287, 2286, 2295, 2294, 2292, 2301, - - 2298, 2299, 2300, 2302, 2303, 0, 2290, 2291, 0, 2300, - 2304, 2294, 2296, 2309, 2292, 2298, 2299, 2296, 2293, 2304, - 2307, 2301, 2303, 2311, 2315, 2302, 2301, 2298, 2299, 2300, - 2302, 2303, 2310, 2307, 2309, 2311, 2310, 2304, 2314, 2312, - 2309, 2307, 2313, 2316, 2313, 2317, 2318, 2307, 2312, 2319, - 2311, 2315, 2320, 0, 2322, 2318, 2314, 2319, 2321, 2310, - 2307, 2316, 2326, 2324, 2328, 2314, 2312, 2326, 2322, 2313, - 2316, 2324, 2317, 2318, 2329, 2320, 2319, 2327, 2330, 2320, - 2321, 2322, 2327, 2336, 2332, 2321, 2333, 2339, 0, 2326, - 2324, 2340, 0, 2333, 2337, 2342, 2328, 2338, 2344, 2346, - - 2347, 2341, 2330, 2332, 2342, 2330, 2329, 2345, 2337, 2327, - 2336, 2332, 2349, 2333, 2339, 2338, 2341, 2340, 2340, 2337, - 2337, 2337, 2342, 2348, 2338, 2346, 2346, 2347, 2341, 2345, - 2344, 2351, 2352, 2353, 2345, 2337, 2354, 0, 2356, 2352, - 2356, 2359, 2357, 2354, 2349, 2348, 2337, 2358, 2360, 2366, - 2348, 2358, 2361, 2359, 2351, 2362, 2353, 0, 2351, 2352, - 2353, 2361, 2364, 2354, 2357, 2356, 2362, 2365, 2359, 2357, - 2360, 2363, 2365, 2367, 2358, 2360, 2366, 2369, 2363, 2361, - 2368, 2370, 2362, 2374, 2364, 2371, 2371, 2373, 2372, 2364, - 2370, 2374, 2368, 2378, 2365, 2375, 2367, 2372, 2363, 2369, - - 2367, 0, 2373, 2381, 2369, 2376, 2380, 2368, 2370, 2377, - 2374, 2381, 2371, 2382, 2373, 2372, 2383, 2375, 2377, 2376, - 2378, 2382, 2375, 2384, 2383, 2380, 2385, 2384, 2387, 2385, - 2381, 2386, 2376, 2380, 2387, 2389, 2377, 2388, 2390, 2386, - 2382, 2389, 2391, 2383, 2393, 2395, 2397, 2464, 2396, 0, - 2384, 2398, 2388, 2385, 2400, 2387, 2393, 0, 2386, 2395, - 2401, 2396, 2389, 2408, 2388, 2402, 2403, 2397, 2407, 2410, - 2390, 2393, 2395, 2397, 2391, 2396, 2398, 2399, 2398, 2464, - 2403, 2400, 2401, 2404, 2399, 2405, 2404, 2401, 2406, 2402, - 2408, 2409, 2402, 2403, 2407, 2407, 2410, 2411, 2405, 2412, - - 2413, 2416, 2406, 2414, 2399, 2417, 2414, 2418, 0, 2411, - 2404, 2412, 2405, 2419, 2413, 2406, 2409, 2420, 2409, 2418, - 2420, 2421, 2422, 2423, 2411, 0, 2412, 2413, 2416, 2414, - 2414, 2417, 2417, 2414, 2418, 2420, 2425, 2429, 2430, 2419, - 2419, 2428, 2432, 2431, 2420, 2423, 2426, 2420, 2421, 2422, - 2423, 2431, 2427, 2426, 2434, 2435, 2428, 2433, 2425, 2427, - 2437, 2436, 2438, 2425, 2429, 2430, 2433, 2435, 2428, 2432, - 2431, 2441, 2439, 2426, 2440, 2443, 2442, 2444, 2448, 2427, - 2450, 2434, 2435, 2436, 2433, 2439, 2442, 2437, 2436, 2438, - 2444, 2447, 2440, 2452, 2456, 2453, 0, 2441, 2441, 2439, - - 2445, 2440, 2443, 2442, 2444, 2448, 2449, 2450, 2445, 2459, - 2451, 2454, 2458, 2447, 2449, 2452, 2453, 2455, 2447, 2451, - 2452, 2456, 2453, 2457, 2458, 2463, 0, 2445, 2461, 2471, - 2467, 2457, 2455, 2449, 2459, 2454, 2459, 2451, 2454, 2458, - 2461, 2462, 2467, 2455, 2455, 2473, 2466, 2468, 2469, 2462, - 2457, 2468, 2463, 2466, 2470, 2461, 2471, 2467, 2472, 2455, - 2469, 2477, 2479, 2478, 2474, 2480, 2472, 2473, 2462, 2475, - 2478, 2481, 2473, 2466, 2468, 2469, 2474, 2470, 2480, 2485, - 2481, 2470, 2479, 2475, 2482, 2472, 2486, 2483, 2477, 2479, - 2478, 2474, 2480, 2482, 2487, 2475, 2475, 2490, 2481, 2483, - - 2484, 2484, 0, 2491, 2486, 2485, 2485, 2488, 0, 0, - 2475, 2482, 0, 2486, 2483, 2492, 2493, 2494, 2491, 2487, - 0, 2487, 2488, 2495, 2488, 2495, 2496, 2484, 2498, 2490, - 2491, 2488, 2499, 2506, 2488, 2497, 2502, 2492, 2493, 2494, - 2496, 2497, 2492, 2493, 2494, 2503, 2498, 2500, 2500, 2488, - 2495, 2488, 2505, 2496, 2499, 2498, 2504, 2507, 2502, 2499, - 2508, 2509, 2497, 2502, 2505, 2506, 2508, 2503, 2510, 2511, - 2512, 2514, 2503, 2509, 2500, 2513, 2517, 2513, 2504, 2505, - 2515, 2518, 2521, 2504, 2522, 2514, 2516, 2508, 2509, 2507, - 2523, 2511, 2512, 2516, 2517, 2521, 2511, 2512, 2514, 2518, - - 2510, 2519, 2513, 2517, 2515, 2520, 2524, 2515, 2518, 2521, - 2526, 2528, 2529, 2516, 2530, 2531, 2522, 2526, 2528, 2519, - 0, 2535, 2523, 2520, 2533, 0, 2532, 2540, 2519, 2524, - 2529, 2534, 2520, 2524, 2532, 0, 0, 2526, 2528, 2529, - 2530, 2530, 2533, 2535, 2538, 2539, 2542, 2531, 2535, 2553, - 2544, 2533, 2532, 2532, 2540, 2538, 2539, 2534, 2534, 2545, - 2536, 2532, 2536, 2541, 2542, 2544, 2546, 2536, 2547, 2550, - 2545, 2538, 2539, 2542, 2549, 2541, 2553, 2544, 2546, 2552, - 2556, 2551, 0, 2547, 2554, 2557, 2545, 2536, 2551, 2536, - 2541, 2550, 2558, 2546, 2552, 2547, 2550, 2559, 2549, 2560, - - 2561, 2549, 0, 2562, 2569, 2565, 2552, 2556, 2551, 2557, - 2554, 2554, 2557, 2563, 2558, 2564, 2567, 2571, 2561, 2558, - 2565, 2566, 0, 2568, 2567, 2570, 2563, 2561, 2573, 2559, - 2562, 2560, 2565, 2574, 2566, 2575, 2569, 2576, 2570, 2571, - 2563, 2564, 2564, 2567, 2571, 2577, 2581, 2578, 2566, 2568, - 2568, 2573, 2570, 2579, 2580, 2573, 2582, 2574, 0, 2576, - 2574, 2580, 2575, 2583, 2576, 2578, 2585, 2577, 2586, 2581, - 2592, 2579, 2577, 2581, 2578, 2586, 2589, 2583, 2587, 2588, - 2579, 2580, 2595, 2582, 2590, 2587, 2588, 2591, 2585, 2589, - 2583, 2593, 2592, 2585, 2591, 2586, 0, 2592, 2594, 0, - - 2596, 2597, 2600, 2589, 2598, 2587, 2588, 2590, 2595, 2595, - 2597, 2590, 2598, 2599, 2591, 2602, 2601, 2604, 2607, 2594, - 2608, 2599, 2601, 2593, 2600, 2594, 2596, 2596, 2597, 2600, - 2605, 2598, 2604, 2606, 2609, 0, 2612, 2610, 2614, 0, - 2599, 2605, 2602, 2601, 2604, 2615, 2628, 2616, 0, 2618, - 2607, 2614, 2608, 2609, 2612, 2606, 2617, 2605, 2615, 2621, - 2606, 2609, 2610, 2612, 2610, 2614, 2620, 2622, 2623, 2623, - 2624, 2621, 2615, 2616, 2616, 2618, 2618, 2627, 2628, 2630, - 2617, 2634, 0, 2617, 2629, 2631, 2621, 2642, 2638, 2636, - 2620, 2622, 2653, 2620, 2622, 2623, 2624, 2624, 2636, 2629, - - 2627, 2638, 2639, 2631, 2627, 2647, 2630, 2649, 2634, 2642, - 2644, 2629, 2631, 2639, 2642, 2638, 2636, 2643, 2643, 2644, - 2645, 2648, 2651, 2654, 2653, 2655, 2645, 2647, 2656, 2639, - 2654, 2657, 2647, 2660, 2649, 2658, 2657, 2644, 2662, 2656, - 2661, 2660, 2664, 2648, 2643, 2666, 2663, 2645, 2648, 2651, - 2654, 2655, 2655, 2662, 2668, 2656, 2666, 2658, 2657, 2667, - 2660, 2663, 2658, 2669, 2661, 2662, 2671, 2661, 0, 2664, - 2670, 2673, 2666, 2663, 2675, 2668, 2674, 2667, 2671, 2670, - 2677, 2668, 2675, 2676, 2676, 2680, 2667, 2679, 2683, 2677, - 2682, 2676, 0, 2671, 2681, 2669, 2687, 2670, 2673, 2682, - - 2674, 2675, 2685, 2674, 2684, 2686, 2683, 2677, 0, 2687, - 2676, 2676, 2680, 2679, 2679, 2683, 2681, 2682, 2684, 2689, - 2688, 2681, 2690, 2687, 2685, 2694, 2693, 2695, 2691, 2685, - 2686, 2684, 2686, 2688, 2689, 2691, 2692, 2696, 2697, 2695, - 2698, 2699, 2701, 2692, 2690, 2700, 2689, 2688, 2693, 2690, - 2703, 2701, 2694, 2693, 2695, 2691, 2699, 2702, 0, 2704, - 0, 2705, 0, 2692, 2696, 2697, 2706, 2698, 2699, 2701, - 2700, 2707, 2700, 2709, 2708, 2712, 2703, 2703, 2707, 2702, - 2709, 2706, 2714, 2711, 2702, 2704, 2704, 2705, 2705, 2708, - 2710, 2713, 2715, 2706, 2711, 2716, 2710, 2717, 2707, 2713, - - 2709, 2708, 2712, 2719, 2722, 2718, 2720, 2721, 2723, 2714, - 2711, 2716, 2725, 2727, 2721, 2723, 0, 2710, 2713, 2715, - 2718, 2720, 2716, 2719, 2717, 2726, 2722, 2728, 2728, 2724, - 2719, 2722, 2718, 2720, 2721, 2723, 2724, 2729, 2732, 2725, - 2727, 2730, 2731, 2726, 2729, 2731, 2734, 2735, 2733, 0, - 2736, 2732, 2726, 2733, 2728, 2730, 2724, 2741, 2738, 0, - 2737, 0, 2735, 2748, 2729, 2732, 2741, 2739, 2730, 2731, - 2738, 2734, 2744, 2734, 2735, 2733, 2736, 2736, 2737, 2739, - 2745, 2742, 2746, 2747, 2741, 2738, 2742, 2737, 2743, 2749, - 2748, 2750, 2743, 2745, 2739, 2752, 2744, 2754, 2756, 2744, - - 0, 2758, 2755, 0, 2746, 2747, 0, 2745, 2742, 2746, - 2747, 2755, 2757, 2758, 2756, 2743, 2749, 2750, 2750, 2760, - 2757, 2752, 2752, 2754, 2754, 2756, 2760, 2761, 2758, 2755, - 2762, 2763, 2764, 2765, 2767, 2762, 2761, 2766, 2763, 2757, - 2765, 2767, 2768, 2769, 0, 2770, 2760, 2773, 2776, 0, - 2764, 2768, 2769, 2772, 2761, 2774, 2777, 2762, 2763, 2764, - 2765, 2767, 2766, 2779, 2766, 2780, 2776, 2784, 2774, 2768, - 2769, 2770, 2770, 2775, 2773, 2776, 2772, 2781, 2775, 2782, - 2772, 2779, 2774, 2777, 2783, 2785, 2781, 2784, 2782, 2786, - 2779, 2788, 2780, 2783, 2784, 2789, 2787, 2785, 2786, 2791, - - 2775, 2790, 2788, 2789, 2781, 2787, 2782, 2792, 2793, 2796, - 2794, 2783, 2785, 2798, 2799, 0, 2786, 2794, 2788, 2791, - 2795, 2800, 2789, 2787, 2790, 2807, 2791, 2806, 2790, 2795, - 2796, 2803, 2805, 2801, 2792, 2793, 2796, 2794, 2804, 2802, - 2798, 2799, 2801, 2803, 2808, 2805, 2804, 2795, 2802, 2806, - 2809, 2808, 2807, 2800, 2806, 2810, 2811, 2809, 2803, 2805, - 2801, 2813, 2810, 2812, 2814, 2804, 2802, 2815, 2813, 2816, - 2817, 2808, 2811, 2818, 0, 2822, 2820, 2809, 2825, 2812, - 0, 2823, 2810, 2811, 2820, 2825, 2814, 2826, 2813, 2823, - 2812, 2814, 2815, 2822, 2815, 2817, 2816, 2817, 2824, 2827, - - 2818, 2828, 2822, 2820, 2829, 2825, 2827, 2830, 2823, 2826, - 2833, 2829, 2834, 2824, 2826, 2830, 2835, 2833, 2836, 2839, - 2837, 2834, 2840, 2828, 2838, 2824, 2827, 2842, 2828, 2841, - 2844, 2829, 2837, 2838, 2830, 2847, 2845, 2833, 2840, 2834, - 2835, 2841, 2844, 2835, 2846, 2836, 2839, 2837, 2845, 2840, - 2842, 2838, 2848, 2849, 2842, 2854, 2841, 2844, 2847, 2852, - 2851, 2853, 2847, 2845, 2856, 2846, 2852, 2849, 2855, 2853, - 2858, 2846, 2851, 2860, 2854, 2855, 2859, 0, 2861, 2848, - 2849, 2862, 2854, 2864, 2863, 2858, 2852, 2851, 2853, 2866, - 2865, 2856, 2863, 2870, 2859, 2855, 2860, 2858, 2867, 2868, - - 2860, 2876, 2879, 2859, 2861, 2861, 2869, 2866, 2862, 2867, - 2864, 2863, 2865, 2869, 2868, 2872, 2866, 2865, 2877, 2878, - 2870, 2872, 2883, 2880, 2878, 2867, 2868, 2876, 2876, 2879, - 2881, 2886, 2887, 2869, 2882, 2884, 2877, 2880, 2885, 2887, - 2883, 2890, 2872, 2888, 2881, 2877, 2878, 2893, 2882, 2883, - 2880, 2895, 2898, 2884, 2896, 2888, 2885, 2881, 2886, 2887, - 2897, 2882, 2884, 2905, 2899, 2885, 2900, 2896, 2890, 2893, - 2888, 2898, 2899, 2895, 2893, 2901, 2903, 2906, 2895, 2898, - 2907, 2896, 2897, 2908, 2900, 2905, 2909, 2897, 2903, 2910, - 2905, 2899, 2907, 2900, 2901, 2912, 0, 2911, 2913, 2906, - - 2915, 2914, 2901, 2903, 2906, 2911, 2916, 2907, 2917, 2915, - 2908, 2910, 2918, 2909, 2920, 2916, 2910, 2919, 2913, 2922, - 2921, 2923, 2912, 2914, 2911, 2913, 2920, 2915, 2914, 2927, - 2928, 2926, 2929, 2916, 2918, 2933, 2940, 2929, 2930, 2918, - 2917, 2920, 2921, 2919, 2919, 2926, 2922, 2921, 2923, 2931, - 2932, 2934, 2936, 2935, 2928, 2941, 2927, 2928, 2926, 2944, - 2930, 2937, 2938, 2932, 2929, 2930, 2939, 2933, 2940, 2942, - 2936, 2931, 2939, 2937, 2934, 2935, 2931, 2932, 2934, 2936, - 2935, 2938, 2943, 2946, 2947, 2950, 2944, 2941, 2937, 2938, - 2948, 2942, 0, 2939, 2952, 2955, 2942, 2943, 2953, 2956, - - 2950, 2954, 2962, 2946, 2955, 2959, 2947, 2961, 2966, 2943, - 2946, 2947, 2950, 2956, 2948, 2957, 2952, 2948, 2958, 2960, - 2953, 2952, 2955, 2954, 2962, 2953, 2956, 2967, 2954, 2962, - 2961, 2959, 2959, 2957, 2961, 2965, 2958, 2960, 2974, 2970, - 2966, 2975, 2957, 2971, 2965, 2958, 2960, 2970, 2967, 2972, - 2971, 2973, 2976, 2978, 2967, 2979, 2972, 2980, 0, 2973, - 2976, 2975, 2965, 2981, 2984, 2974, 2970, 2982, 2975, 2983, - 2971, 2978, 0, 2979, 2987, 2981, 2972, 2990, 2973, 2976, - 2978, 2983, 2979, 2980, 2980, 2982, 2987, 2985, 2991, 2993, - 2981, 2984, 2989, 2994, 2982, 2985, 2983, 2996, 0, 2989, - - 2990, 2987, 2995, 2992, 2990, 2992, 2996, 2997, 2998, 2999, - 2995, 3000, 0, 3000, 2985, 2991, 3003, 3004, 3001, 2989, - 3006, 2993, 3007, 0, 2996, 2994, 3011, 3008, 2999, 2995, - 2992, 3004, 3009, 0, 3003, 2998, 2999, 3014, 3000, 2997, - 3001, 3009, 3010, 3003, 3004, 3001, 3007, 3015, 3012, 3007, - 3008, 3016, 3006, 3011, 3008, 3010, 3015, 3017, 3018, 3009, - 3012, 3017, 3019, 3014, 3014, 3021, 3023, 3022, 3024, 3010, - 3026, 0, 3028, 3034, 3015, 3012, 3029, 3031, 3016, 3028, - 3034, 3030, 3031, 3039, 3017, 3018, 3024, 3032, 3023, 3019, - 3022, 3037, 3021, 3023, 3022, 3024, 3030, 3026, 3029, 3028, - - 3034, 3040, 3032, 3029, 3035, 3036, 3041, 3043, 3030, 3031, - 3039, 3035, 3036, 3042, 3032, 3044, 3046, 3037, 3037, 3050, - 3049, 3043, 3051, 3052, 3053, 3054, 3047, 3049, 3040, 3044, - 3055, 3035, 3036, 3041, 3043, 3047, 3053, 3042, 3058, 3059, - 3042, 3063, 3044, 3046, 3055, 3056, 3050, 3049, 3051, 3051, - 3052, 3053, 3054, 3047, 3056, 3057, 3060, 3055, 3064, 3066, - 3068, 3067, 3069, 3070, 3066, 3067, 3059, 3068, 3057, 3069, - 3058, 3071, 3056, 3063, 3072, 3073, 3072, 3074, 3077, 3060, - 3064, 3084, 3057, 3060, 3070, 3064, 3080, 3068, 3067, 3069, - 3070, 3066, 3079, 3082, 3083, 3082, 3085, 3085, 3073, 3089, - - 3077, 3072, 3073, 3071, 3074, 3077, 3085, 3084, 3084, 3086, - 3080, 3079, 3089, 3080, 3090, 3088, 3087, 3091, 3083, 3079, - 3082, 3083, 3088, 3085, 3085, 3087, 3089, 3092, 3095, 3094, - 3091, 3086, 3093, 3097, 3098, 3092, 3086, 3094, 3097, 3098, - 3099, 3090, 3088, 3087, 3091, 3093, 3100, 3095, 3099, 3101, - 3106, 3092, 3102, 0, 3092, 3095, 3094, 3103, 3107, 3093, - 3104, 3106, 3092, 3105, 3108, 3097, 3098, 3099, 3109, 3109, - 3110, 3108, 0, 3100, 3112, 3101, 3101, 3106, 3102, 3102, - 3107, 3111, 3114, 3103, 3103, 3107, 3104, 3104, 3110, 3105, - 3105, 3108, 3113, 3115, 3111, 3109, 3112, 3110, 3116, 3117, - - 3113, 3112, 3120, 3118, 3114, 3116, 3117, 3121, 3111, 3114, - 3118, 3115, 3122, 3124, 3125, 3123, 3126, 3129, 3131, 3113, - 3115, 0, 3127, 3134, 3132, 3116, 3117, 3123, 3130, 3120, - 3118, 3127, 3137, 3142, 3121, 3125, 3122, 3143, 3126, 3122, - 3124, 3125, 3123, 3126, 3129, 3131, 3132, 3135, 3130, 3127, - 3134, 3132, 3136, 3138, 3139, 3130, 0, 3141, 0, 3137, - 3142, 3146, 3144, 3148, 3143, 3135, 3141, 3147, 3145, 3146, - 3136, 3138, 3139, 3150, 3135, 3148, 3154, 3161, 3150, 3136, - 3138, 3139, 3152, 3147, 3141, 3144, 3145, 0, 3146, 3144, - 3148, 3149, 3153, 3160, 3147, 3145, 3152, 3164, 3149, 3154, - - 3156, 3162, 3169, 3154, 3161, 3150, 3170, 3167, 3165, 3152, - 3153, 3166, 3156, 3166, 3162, 3160, 3167, 3173, 3149, 3153, - 3160, 3165, 3171, 3172, 3164, 3178, 3182, 3156, 3162, 3169, - 3179, 0, 3173, 3170, 3167, 3165, 3181, 3177, 3166, 3177, - 3171, 3184, 3191, 3181, 3173, 3186, 3198, 3178, 3179, 3171, - 3199, 3186, 3178, 3188, 3189, 3172, 3184, 3179, 3182, 3190, - 3191, 3193, 3200, 3181, 3177, 3194, 0, 3196, 3184, 3191, - 3196, 3195, 3186, 3198, 3203, 3188, 3189, 3199, 3201, 3194, - 3188, 3189, 3203, 3193, 3195, 3190, 3190, 3204, 3193, 3200, - 3207, 3206, 3194, 3196, 3196, 3202, 3201, 3196, 3195, 3208, - - 3209, 3203, 3202, 3211, 3210, 3201, 3213, 3215, 3217, 3204, - 3212, 3214, 3207, 3210, 3204, 0, 3212, 3207, 3211, 3219, - 3214, 3208, 3202, 3206, 0, 3220, 3208, 3209, 3213, 3221, - 3211, 3210, 3216, 3213, 3216, 3217, 3222, 3212, 3214, 3215, - 3223, 3224, 3219, 3225, 3229, 0, 3219, 3220, 3223, 0, - 3227, 3221, 3220, 3224, 3236, 3225, 3221, 3227, 3231, 3216, - 3232, 3233, 3222, 3222, 3235, 3236, 3234, 3223, 3224, 0, - 3225, 3229, 3231, 3238, 3232, 3233, 3237, 3227, 3242, 3239, - 3243, 3236, 3235, 3240, 3237, 3231, 3246, 3232, 3233, 3234, - 3240, 3235, 3238, 3234, 3247, 3241, 3245, 3245, 3243, 3244, - - 3238, 3239, 3241, 3237, 3242, 3242, 3239, 3243, 3244, 3248, - 3240, 3251, 3252, 3246, 3254, 3255, 3251, 3248, 3256, 3260, - 3262, 3247, 3241, 3245, 3258, 3252, 3244, 3263, 3265, 3266, - 3258, 3262, 0, 3270, 3272, 3254, 3248, 3267, 3263, 3252, - 3266, 3254, 3255, 3251, 3273, 3256, 3260, 3262, 3275, 0, - 3265, 3258, 3272, 3274, 3263, 3265, 3266, 3274, 3271, 3267, - 3270, 3272, 3276, 3280, 3267, 3271, 3278, 3282, 3279, 3281, - 3276, 3280, 3284, 3287, 3293, 3275, 3273, 0, 3281, 3286, - 3274, 3279, 0, 3291, 3294, 3271, 3286, 3288, 3291, 3276, - 3280, 3295, 3278, 3278, 3282, 3279, 3281, 3292, 3292, 3298, - - 3296, 3293, 3297, 3295, 3284, 3287, 3286, 3296, 3302, 3288, - 3291, 3294, 3299, 3300, 3288, 3298, 3302, 3301, 3295, 3303, - 3300, 3297, 0, 3305, 3292, 3304, 3298, 3296, 3309, 3297, - 3299, 3306, 3304, 3307, 3303, 3302, 3313, 3308, 3314, 3299, - 3300, 3315, 3316, 3306, 3317, 3314, 3303, 3318, 3297, 3301, - 3305, 3313, 3304, 3319, 3309, 3309, 3321, 3307, 3306, 3322, - 3307, 3308, 3319, 3313, 3308, 3314, 3323, 3324, 3317, 3316, - 3325, 3317, 3327, 3315, 3329, 3324, 3330, 3333, 3321, 3318, - 3319, 3326, 3326, 3321, 3332, 3330, 3322, 3334, 3323, 3329, - 3331, 3326, 3331, 3323, 3324, 3334, 3335, 3336, 3332, 3327, - - 3338, 3329, 3325, 3330, 3333, 3339, 3340, 3335, 3326, 3326, - 3344, 3332, 3341, 3342, 3334, 3336, 3343, 3331, 3345, 3346, - 3351, 3348, 3349, 3335, 3336, 0, 3342, 3338, 3352, 3347, - 3350, 3350, 3339, 3340, 3341, 3355, 3349, 3344, 3343, 3341, - 3342, 3358, 3356, 3343, 3359, 3345, 3346, 3347, 3348, 3349, - 3352, 3362, 3351, 3356, 3368, 3352, 3347, 3350, 3364, 3362, - 3365, 3367, 3355, 3364, 3366, 3365, 3367, 3370, 3358, 3356, - 3375, 3359, 3366, 3371, 3371, 3372, 3373, 3375, 3362, 3377, - 3368, 3368, 3378, 3372, 3379, 3364, 3376, 3365, 3367, 3373, - 3381, 3366, 3382, 3384, 3370, 3390, 3385, 3375, 3383, 3381, - - 3371, 3384, 3372, 3373, 3376, 3383, 3377, 3379, 3386, 3378, - 3389, 3379, 3392, 3376, 3393, 3394, 3389, 3381, 3385, 3395, - 3384, 3397, 3390, 3385, 3382, 3383, 3398, 3399, 3394, 3396, - 3386, 3422, 3401, 0, 3488, 3386, 3393, 3389, 3402, 3392, - 3397, 3393, 3394, 3403, 3396, 3404, 3405, 3406, 3397, 3399, - 3403, 3395, 3404, 3398, 3399, 3401, 3396, 3407, 3409, 3401, - 3402, 3410, 3406, 3422, 3411, 3402, 3488, 3414, 3405, 3410, - 3403, 3411, 3404, 3405, 3406, 3412, 3414, 3409, 3407, 3415, - 0, 3418, 3412, 3417, 3407, 3409, 3416, 3416, 3410, 3417, - 3415, 3411, 3421, 3420, 3414, 3423, 3416, 3425, 0, 3421, - - 3431, 3426, 3412, 3418, 3425, 3432, 3415, 3427, 3418, 3439, - 3417, 3437, 3433, 3416, 3416, 3420, 3442, 3423, 3440, 3421, - 3420, 3427, 3423, 3437, 3425, 3426, 3447, 3431, 3426, 3441, - 3444, 3450, 3432, 3454, 3427, 3433, 3439, 3441, 3437, 3433, - 3440, 3452, 3444, 3442, 3455, 3440, 3448, 3448, 3449, 3449, - 3451, 3451, 0, 3447, 3456, 3454, 3441, 3444, 3450, 3458, - 3454, 3457, 3455, 3461, 3452, 3462, 3463, 3464, 3452, 3466, - 3457, 3455, 3458, 3463, 3464, 3448, 3465, 3449, 3467, 3451, - 3472, 3456, 3468, 3471, 3474, 3471, 3458, 3467, 3457, 3468, - 3461, 3462, 3462, 3463, 3464, 3473, 3466, 3477, 3465, 3478, - - 3472, 3475, 3474, 3465, 3479, 3467, 3477, 3472, 3481, 3468, - 3471, 3474, 3480, 3475, 3482, 3483, 3485, 3484, 3473, 0, - 3487, 3478, 3473, 3496, 3477, 3487, 3478, 0, 3475, 3484, - 3480, 3479, 3492, 3486, 3481, 3481, 3486, 3490, 3485, 3480, - 3491, 3482, 3483, 3485, 3484, 3489, 3491, 3489, 3493, 3490, - 3494, 3486, 3487, 3495, 3492, 3496, 3498, 3497, 3494, 3492, - 3486, 3499, 3500, 3486, 3490, 3501, 3504, 3491, 3505, 3507, - 3493, 3512, 3489, 3508, 3500, 3493, 3510, 3494, 3497, 3513, - 3495, 3505, 3514, 3498, 3497, 3510, 3515, 3501, 3499, 3500, - 3517, 3508, 3501, 3504, 3518, 3505, 3507, 3519, 3512, 3520, - - 3508, 3521, 3521, 3510, 3523, 3524, 3513, 3526, 3528, 3514, - 3532, 3527, 3529, 3515, 3534, 3531, 3539, 3517, 3535, 3529, - 3538, 3518, 3523, 3528, 3519, 3533, 3520, 3531, 3521, 3527, - 3535, 3523, 3524, 3533, 3526, 3528, 3536, 3532, 3527, 3529, - 3537, 3534, 3531, 3539, 3541, 3535, 3538, 3538, 3542, 3545, - 3536, 0, 3533, 3546, 3551, 3537, 3541, 3548, 3545, 3547, - 3547, 3549, 3552, 3536, 3555, 3554, 3553, 3537, 3559, 0, - 3549, 3541, 3555, 3556, 3557, 3542, 3545, 3546, 3551, 3553, - 3546, 3551, 3556, 3548, 3548, 3557, 3547, 3554, 3549, 3559, - 3560, 3555, 3554, 3553, 3552, 3559, 3563, 3564, 0, 3566, - - 3556, 3557, 3568, 3568, 3569, 3578, 3579, 3582, 3560, 3564, - 3583, 3569, 3584, 3585, 3587, 3591, 3589, 3560, 3590, 3563, - 3589, 3582, 3615, 3563, 3564, 3566, 3566, 3578, 3592, 3568, - 3579, 3569, 3578, 3579, 3582, 3592, 3590, 3583, 3591, 3584, - 3585, 3587, 3591, 3589, 3594, 3590, 3596, 3597, 3598, 3615, - 3596, 3599, 3600, 0, 3601, 3592, 3604, 3594, 3602, 3603, - 3606, 0, 3606, 3597, 3600, 3604, 3605, 3603, 3610, 3624, - 3598, 3594, 3602, 3596, 3597, 3598, 3599, 3605, 3599, 3600, - 3601, 3601, 3607, 3604, 3608, 3602, 3603, 3606, 3609, 3612, - 3610, 3611, 3613, 3605, 3607, 3610, 3624, 3611, 3614, 3617, - - 3616, 3623, 3608, 3609, 3612, 3626, 3614, 3616, 3623, 3607, - 3622, 3608, 3625, 3628, 3613, 3609, 3612, 3627, 3611, 3613, - 3629, 3617, 3631, 3622, 3632, 3614, 3617, 3616, 3623, 3631, - 3625, 3633, 3626, 3630, 3634, 3637, 3635, 3622, 3635, 3625, - 3628, 3630, 3636, 3627, 3627, 3641, 3638, 3629, 3632, 3631, - 3639, 3632, 3640, 3633, 3636, 3642, 3634, 3643, 3633, 3638, - 3630, 3634, 3642, 3635, 3644, 3639, 3645, 3637, 3647, 3636, - 3649, 3648, 3641, 3638, 3640, 3650, 3652, 3639, 3649, 3640, - 3654, 3657, 3642, 3648, 3643, 3658, 3659, 3664, 3652, 3654, - 3661, 3644, 3660, 3645, 3662, 3647, 3663, 3649, 3648, 0, - - 3660, 3664, 3650, 3652, 3667, 3659, 3666, 3654, 3657, 3663, - 3665, 3658, 3658, 3659, 3664, 3669, 3677, 3675, 3665, 3660, - 0, 3674, 3661, 3663, 3675, 3680, 3662, 3674, 3666, 3677, - 3678, 3667, 3680, 3666, 3681, 3683, 3684, 3665, 3682, 3685, - 0, 3688, 3669, 3677, 3675, 3686, 3682, 3685, 3674, 3683, - 3684, 3687, 3680, 3678, 3694, 0, 3681, 3678, 3695, 0, - 3692, 3681, 3683, 3684, 3691, 3682, 3685, 3686, 3688, 3692, - 3696, 3691, 3686, 3687, 3693, 3702, 0, 3697, 3687, 0, - 3695, 3694, 3693, 3698, 3699, 3695, 3700, 3692, 3701, 3704, - 3705, 3691, 3706, 3713, 3710, 3708, 3701, 0, 0, 0, - - 0, 3693, 3696, 3697, 3697, 3698, 3699, 3702, 3700, 3717, - 3698, 3699, 3705, 3700, 3710, 3701, 3704, 3705, 3708, 3706, - 3709, 3710, 3708, 3711, 3712, 3713, 3714, 3715, 3709, 3719, - 3720, 3711, 3712, 3720, 3714, 3717, 3717, 3721, 3722, 0, - 3725, 3715, 3729, 3729, 3723, 0, 3722, 3709, 3720, 3724, - 3711, 3712, 3723, 3714, 3715, 3726, 3719, 3720, 3727, 3721, - 3720, 3730, 3731, 3724, 3721, 3722, 3725, 3725, 3732, 3729, - 3731, 3723, 3727, 3733, 3734, 3736, 3724, 3726, 3735, 3737, - 3740, 3738, 3726, 3736, 3739, 3727, 0, 3730, 3730, 3731, - 3741, 3747, 3742, 3744, 3732, 3732, 3734, 0, 3735, 3733, - - 3733, 3734, 3736, 3738, 3750, 3735, 3737, 3740, 3738, 3739, - 3741, 3739, 3742, 3743, 3745, 3744, 3748, 3741, 3747, 3742, - 3744, 3743, 3745, 3751, 3748, 3752, 3750, 3753, 0, 3754, - 3756, 3750, 3759, 3752, 3757, 3753, 3758, 3760, 3763, 0, - 3743, 3745, 3757, 3748, 3758, 3751, 3761, 3764, 3765, 3767, - 3751, 3773, 3752, 3774, 3753, 3754, 3754, 3756, 3759, 3759, - 3770, 3757, 3771, 3758, 3760, 3763, 3761, 0, 3765, 3772, - 3771, 3767, 0, 3761, 3764, 3765, 3767, 3772, 3773, 0, - 3774, 0, 3770, 0, 0, 0, 0, 3770, 0, 3771, - 0, 0, 0, 0, 0, 0, 3772, 3778, 3778, 3778, - - 3778, 3778, 3778, 3778, 3779, 3779, 3779, 3779, 3779, 3779, - 3779, 3780, 3780, 3780, 3780, 3780, 3780, 3780, 3781, 3781, - 3781, 3781, 3781, 3781, 3781, 3782, 3782, 3782, 3782, 3782, - 3782, 3782, 3783, 3783, 3783, 3783, 3783, 3783, 3783, 3784, - 3784, 3784, 3784, 3784, 3784, 3784, 3786, 3786, 0, 3786, - 3786, 3786, 3786, 3787, 3787, 0, 0, 0, 3787, 3787, - 3788, 3788, 0, 0, 3788, 0, 3788, 3789, 0, 0, - 0, 0, 0, 3789, 3790, 3790, 0, 0, 0, 3790, - 3790, 3791, 0, 0, 0, 0, 0, 3791, 3792, 3792, - 0, 3792, 3792, 3792, 3792, 3793, 0, 0, 0, 0, - - 0, 3793, 3794, 3794, 0, 0, 0, 3794, 3794, 3795, - 3795, 0, 3795, 3795, 3795, 3795, 3777, 3777, 3777, 3777, - 3777, 3777, 3777, 3777, 3777, 3777, 3777, 3777, 3777, 3777, - 3777, 3777, 3777, 3777, 3777, 3777, 3777, 3777, 3777, 3777, - 3777, 3777, 3777, 3777, 3777, 3777, 3777, 3777, 3777, 3777, - 3777, 3777, 3777, 3777, 3777, 3777, 3777, 3777, 3777, 3777, - 3777, 3777, 3777, 3777, 3777, 3777, 3777, 3777, 3777, 3777, - 3777, 3777, 3777, 3777, 3777, 3777, 3777, 3777, 3777, 3777, - 3777, 3777, 3777 + 684, 681, 687, 689, 686, 691, 679, 687, 0, 0, + 0, 685, 683, 688, 690, 683, 685, 689, 682, 692, + 686, 690, 693, 694, 695, 684, 688, 692, 690, 690, + 689, 695, 696, 697, 687, 700, 690, 691, 703, 699, + + 693, 690, 698, 703, 0, 694, 692, 704, 690, 693, + 694, 695, 0, 697, 699, 690, 690, 701, 696, 696, + 697, 702, 698, 699, 706, 708, 699, 700, 707, 698, + 703, 702, 701, 704, 704, 705, 707, 705, 710, 709, + 715, 699, 0, 702, 701, 709, 716, 710, 702, 706, + 708, 706, 708, 713, 711, 707, 717, 714, 702, 712, + 724, 713, 705, 711, 714, 710, 709, 718, 712, 716, + 719, 0, 715, 716, 717, 726, 720, 0, 723, 718, + 713, 711, 719, 717, 714, 720, 712, 721, 726, 722, + 723, 727, 724, 725, 718, 721, 728, 719, 722, 731, + + 725, 729, 726, 720, 728, 723, 727, 729, 0, 730, + 732, 0, 762, 722, 721, 734, 722, 730, 727, 732, + 725, 733, 731, 728, 734, 722, 731, 736, 729, 735, + 735, 737, 733, 738, 739, 736, 730, 732, 735, 737, + 740, 741, 734, 743, 762, 748, 742, 739, 733, 744, + 745, 743, 746, 748, 736, 738, 735, 735, 737, 742, + 738, 739, 750, 745, 741, 744, 740, 740, 741, 747, + 743, 749, 748, 742, 746, 751, 744, 745, 754, 746, + 747, 752, 750, 753, 755, 749, 753, 757, 0, 750, + 756, 758, 0, 763, 760, 0, 747, 751, 749, 756, + + 754, 752, 751, 759, 761, 754, 755, 757, 752, 758, + 753, 755, 760, 764, 757, 763, 759, 756, 758, 761, + 763, 760, 765, 766, 767, 779, 768, 772, 769, 771, + 759, 761, 0, 770, 0, 771, 766, 764, 768, 773, + 764, 775, 767, 774, 776, 765, 770, 773, 774, 765, + 766, 767, 769, 768, 772, 769, 771, 779, 782, 778, + 770, 780, 776, 775, 783, 773, 773, 778, 775, 780, + 781, 776, 786, 785, 773, 774, 784, 781, 784, 783, + 787, 782, 785, 789, 794, 782, 778, 791, 780, 788, + 0, 783, 789, 790, 791, 790, 794, 781, 798, 787, + + 785, 0, 839, 784, 786, 801, 802, 787, 798, 788, + 789, 794, 0, 804, 791, 805, 788, 806, 804, 0, + 790, 792, 808, 801, 792, 798, 807, 802, 792, 839, + 809, 792, 801, 802, 810, 806, 805, 807, 792, 792, + 804, 792, 805, 811, 806, 808, 792, 815, 792, 808, + 818, 792, 0, 807, 812, 792, 809, 809, 792, 811, + 810, 810, 813, 812, 814, 792, 792, 817, 792, 854, + 811, 814, 818, 820, 817, 813, 860, 818, 819, 815, + 822, 812, 820, 822, 819, 0, 0, 0, 821, 813, + 823, 814, 816, 816, 817, 816, 825, 0, 816, 824, + + 820, 854, 826, 816, 825, 819, 823, 822, 860, 816, + 816, 821, 816, 823, 829, 821, 827, 823, 816, 816, + 816, 824, 816, 825, 826, 816, 824, 831, 827, 826, + 816, 832, 828, 823, 828, 830, 816, 816, 829, 816, + 830, 829, 834, 827, 833, 0, 835, 831, 836, 0, + 837, 840, 0, 841, 831, 0, 833, 832, 832, 828, + 838, 843, 0, 864, 834, 0, 846, 830, 841, 834, + 836, 833, 835, 835, 837, 836, 840, 837, 840, 844, + 841, 842, 838, 845, 843, 846, 844, 838, 843, 842, + 847, 845, 848, 846, 849, 864, 850, 852, 853, 856, + + 851, 0, 866, 853, 848, 0, 844, 849, 842, 851, + 845, 855, 852, 857, 859, 865, 847, 847, 857, 848, + 861, 849, 850, 850, 852, 853, 856, 851, 863, 861, + 867, 862, 868, 855, 866, 863, 859, 865, 855, 862, + 870, 859, 865, 869, 871, 857, 873, 861, 877, 0, + 875, 872, 874, 868, 867, 863, 885, 867, 862, 868, + 872, 874, 869, 876, 881, 873, 883, 870, 877, 879, + 869, 871, 875, 873, 878, 877, 880, 875, 872, 874, + 879, 882, 884, 878, 880, 883, 876, 887, 885, 886, + 876, 881, 889, 883, 890, 887, 879, 891, 886, 882, + + 891, 878, 894, 880, 893, 892, 895, 0, 882, 884, + 889, 0, 890, 896, 887, 897, 886, 892, 899, 889, + 894, 890, 903, 898, 891, 898, 893, 900, 897, 894, + 895, 893, 892, 895, 901, 896, 899, 0, 902, 901, + 896, 900, 897, 904, 905, 899, 906, 911, 903, 903, + 898, 902, 905, 907, 900, 904, 907, 0, 908, 912, + 909, 914, 0, 913, 906, 902, 901, 908, 909, 913, + 904, 905, 911, 906, 911, 915, 916, 0, 926, 921, + 907, 915, 917, 914, 909, 908, 912, 909, 914, 917, + 913, 919, 918, 920, 923, 909, 919, 921, 916, 918, + + 920, 922, 915, 916, 924, 922, 921, 925, 927, 917, + 926, 929, 928, 924, 933, 925, 930, 923, 919, 918, + 920, 923, 929, 931, 930, 932, 927, 928, 922, 934, + 936, 924, 935, 933, 925, 927, 931, 937, 929, 928, + 938, 933, 934, 930, 939, 937, 932, 938, 940, 941, + 931, 942, 932, 944, 935, 940, 934, 936, 942, 935, + 943, 944, 939, 945, 937, 943, 946, 938, 941, 947, + 945, 939, 948, 946, 0, 940, 941, 950, 942, 949, + 944, 951, 953, 954, 952, 0, 0, 943, 961, 955, + 945, 952, 949, 946, 951, 956, 958, 0, 960, 959, + + 962, 947, 957, 956, 948, 959, 949, 963, 951, 950, + 957, 952, 955, 965, 953, 954, 955, 957, 958, 964, + 961, 966, 956, 958, 960, 960, 959, 965, 964, 957, + 968, 963, 962, 970, 963, 967, 969, 957, 972, 973, + 965, 971, 967, 972, 974, 969, 964, 975, 0, 0, + 0, 973, 0, 966, 971, 970, 971, 968, 979, 976, + 970, 1017, 967, 969, 976, 971, 973, 974, 971, 977, + 972, 974, 978, 975, 975, 982, 977, 983, 982, 980, + 979, 971, 984, 971, 978, 979, 976, 980, 988, 986, + 983, 987, 0, 1017, 988, 984, 977, 992, 987, 978, + + 0, 990, 982, 986, 983, 0, 980, 991, 994, 984, + 0, 995, 0, 995, 993, 988, 986, 997, 987, 989, + 992, 989, 0, 990, 992, 989, 993, 989, 990, 997, + 996, 996, 989, 991, 991, 994, 998, 989, 995, 999, + 1001, 993, 1000, 989, 997, 1001, 989, 1002, 989, 998, + 1005, 1010, 989, 996, 989, 1000, 1004, 996, 996, 989, + 1003, 999, 1005, 998, 989, 1002, 999, 1007, 1004, 1000, + 1006, 1008, 1001, 1003, 1002, 1009, 1012, 1005, 1010, 1004, + 1006, 1013, 1007, 1004, 1011, 1015, 0, 1003, 1009, 1012, + 1011, 1014, 1006, 1008, 1007, 1004, 1018, 1006, 1008, 1013, + + 1016, 1021, 1009, 1012, 1019, 1022, 1015, 1006, 1013, 1023, + 1022, 1011, 1015, 1014, 1024, 0, 1027, 1023, 1014, 1026, + 0, 0, 1016, 1024, 1028, 1029, 1031, 1016, 1018, 0, + 1030, 1019, 1022, 1021, 1026, 1032, 1023, 1028, 1027, 1034, + 1029, 1024, 1025, 1027, 0, 1033, 1026, 1025, 1031, 1025, + 1034, 1028, 1029, 1031, 1032, 1025, 1030, 1030, 1033, 1038, + 1025, 1025, 1032, 1036, 1035, 1037, 1034, 1025, 1025, 1025, + 1038, 1036, 1033, 1037, 1025, 1039, 1025, 1035, 1040, 0, + 0, 1041, 1025, 1050, 1042, 1046, 1038, 1025, 1025, 1044, + 1036, 1035, 1037, 1042, 1025, 1043, 1041, 1047, 1044, 1051, + + 1040, 1045, 1048, 1053, 1054, 1040, 1043, 1039, 1041, 1048, + 1045, 1042, 1046, 1052, 1055, 1050, 1044, 1056, 1054, 0, + 1047, 1052, 1043, 1051, 1047, 1053, 1051, 1057, 1045, 1048, + 1053, 1054, 1059, 1060, 1061, 1057, 1062, 1063, 0, 1056, + 1052, 0, 1066, 1065, 1056, 1061, 1055, 0, 1064, 1066, + 1059, 1060, 1072, 1067, 1057, 1063, 1064, 1069, 1070, 1059, + 1060, 1061, 0, 1071, 1063, 1065, 1067, 1068, 1062, 1066, + 1065, 1074, 1069, 1072, 1068, 1064, 1070, 1073, 1076, 1072, + 1067, 1071, 1078, 0, 1069, 1070, 1079, 1073, 1081, 1076, + 1071, 1083, 1082, 1079, 1068, 1078, 1080, 0, 1080, 1083, + + 1086, 1084, 1085, 1074, 1073, 1076, 1094, 1093, 1087, 1078, + 1081, 1085, 1086, 1079, 1084, 1081, 1088, 1091, 1083, 1092, + 1095, 1096, 1097, 1080, 1082, 1093, 0, 1086, 1084, 1085, + 1087, 1099, 1094, 1094, 1093, 1087, 1098, 1102, 1088, 1091, + 1097, 1092, 1102, 1088, 1091, 1099, 1092, 1105, 1098, 1097, + 1101, 1106, 1095, 1096, 1104, 1107, 1110, 1104, 1099, 1105, + 1108, 1101, 1109, 1098, 1114, 1115, 0, 1108, 1107, 1102, + 1111, 1112, 1115, 1109, 1105, 1106, 1110, 1101, 1106, 1111, + 1104, 1104, 1107, 1110, 1104, 1112, 1116, 1108, 1113, 1109, + 1117, 0, 1115, 1119, 1118, 1122, 1114, 1111, 1112, 1121, + + 1113, 1123, 1117, 0, 0, 1124, 1119, 1123, 1125, 1128, + 1136, 1127, 1126, 1132, 0, 1113, 1118, 1117, 1116, 1122, + 1119, 1118, 1122, 1126, 1129, 1121, 1121, 1124, 1123, 1127, + 1125, 1128, 1124, 1130, 1132, 1125, 1128, 1134, 1127, 1126, + 1132, 1133, 1136, 1135, 1137, 1138, 1129, 1139, 1130, 1135, + 0, 1129, 1133, 1140, 0, 1141, 1139, 1142, 1134, 1143, + 1130, 1145, 1144, 1138, 1134, 1146, 1142, 1143, 1133, 1144, + 1135, 1137, 1138, 1147, 1139, 1148, 1149, 1140, 1152, 1146, + 1140, 1141, 1141, 1154, 1142, 1145, 1143, 1150, 1145, 1144, + 1151, 1153, 1146, 1157, 1156, 1159, 1158, 1160, 1161, 0, + + 0, 0, 1157, 1158, 1162, 1147, 1164, 1148, 1149, 1150, + 1152, 1163, 1151, 1153, 1150, 1154, 1156, 1151, 1153, 1160, + 1157, 1156, 1162, 1158, 1160, 1161, 1165, 1159, 1164, 1163, + 1167, 1162, 1166, 1164, 1168, 1165, 1169, 0, 1163, 1171, + 1166, 1172, 1170, 1173, 1174, 1175, 1178, 1180, 1171, 0, + 0, 1173, 1169, 1165, 1167, 1176, 1172, 1167, 1168, 1166, + 1180, 1168, 1177, 1169, 1170, 1181, 1171, 1176, 1172, 1170, + 1173, 1179, 1182, 1178, 1180, 1185, 1174, 1175, 1184, 1179, + 1181, 1182, 1176, 1186, 1177, 1190, 1187, 1184, 1187, 1177, + 1191, 1186, 1181, 1185, 1192, 1189, 1193, 1194, 1179, 1182, + + 1198, 1196, 1185, 1189, 1194, 1184, 1202, 1197, 1199, 1191, + 1186, 1200, 1190, 1187, 1196, 1198, 1192, 1191, 1193, 1197, + 1201, 1192, 1189, 1193, 1194, 1204, 1205, 1198, 1196, 1200, + 1199, 0, 1201, 1202, 1197, 1199, 1203, 1206, 1200, 1207, + 1208, 0, 0, 1203, 1209, 0, 1210, 1201, 1211, 1206, + 1207, 1215, 1212, 1216, 1213, 1221, 0, 1204, 1205, 1215, + 1214, 1211, 1208, 1203, 1206, 1212, 1207, 1208, 1210, 1209, + 1217, 1209, 1214, 1210, 1218, 1211, 1213, 1216, 1215, 1212, + 1216, 1213, 1221, 1219, 1223, 1222, 1218, 1214, 1225, 1227, + 1217, 1219, 1226, 1224, 1233, 1228, 1227, 1217, 1222, 0, + + 1225, 1218, 1224, 1230, 1228, 1232, 1228, 1223, 1231, 1228, + 1219, 1223, 1222, 1226, 0, 1225, 1227, 1228, 1234, 1226, + 1224, 1233, 1228, 1236, 1235, 1244, 1230, 1232, 1239, 1243, + 1230, 1228, 1232, 1228, 1231, 1231, 1228, 1235, 1234, 1241, + 1237, 1242, 1245, 1238, 1243, 1234, 1239, 1236, 1237, 1242, + 1236, 1235, 1238, 1250, 1248, 1239, 1243, 1244, 1246, 1247, + 1251, 1241, 1248, 0, 1245, 1255, 1241, 1237, 1242, 1245, + 1238, 1246, 1252, 1254, 0, 1247, 1253, 1257, 1256, 1258, + 1250, 1248, 1251, 1253, 1260, 1246, 1247, 1251, 1255, 1257, + 1259, 1258, 1255, 1260, 1252, 1254, 1256, 1261, 1259, 1252, + + 1254, 1262, 1264, 1253, 1257, 1256, 1258, 1263, 1260, 1261, + 1264, 1260, 1265, 1268, 1266, 1267, 1269, 1259, 1265, 1270, + 1260, 1262, 1263, 1266, 1261, 1268, 1271, 1273, 1262, 1264, + 1272, 1280, 1269, 1271, 1263, 1274, 1267, 1272, 1275, 1265, + 1268, 1266, 1267, 1269, 1276, 1273, 1275, 1274, 1277, 1279, + 1278, 1270, 1278, 1271, 1273, 1285, 1277, 1272, 1283, 1276, + 1281, 1279, 1274, 1280, 1286, 1275, 1284, 1281, 1285, 1288, + 1289, 1276, 1287, 1290, 1299, 1277, 1279, 1278, 1284, 1287, + 1288, 1291, 1285, 1286, 1295, 1293, 1291, 1281, 1290, 1294, + 1283, 1286, 1289, 1284, 1292, 1303, 1288, 1289, 1293, 1287, + + 1290, 1297, 1292, 1294, 0, 1298, 1299, 0, 0, 1300, + 1295, 1295, 1293, 1291, 0, 1297, 1294, 0, 0, 1301, + 1302, 1292, 1296, 1298, 1306, 1307, 1296, 1303, 1297, 1296, + 1296, 1307, 1298, 1304, 1296, 1300, 1300, 1305, 1302, 1308, + 1296, 1301, 1312, 1313, 1296, 1311, 1301, 1302, 1296, 1296, + 1306, 1306, 1307, 1296, 1311, 1304, 1296, 1296, 1314, 1305, + 1304, 1296, 1310, 1315, 1305, 1308, 1308, 1296, 1309, 1310, + 1309, 1296, 1311, 1316, 1312, 1313, 1317, 1319, 1318, 1320, + 1316, 1315, 1314, 1322, 0, 1314, 1319, 1321, 0, 1310, + 1315, 1318, 1309, 1325, 1323, 1309, 1324, 1309, 1317, 1328, + + 1316, 1329, 0, 1317, 1319, 1318, 0, 1325, 1321, 1331, + 1327, 1320, 1328, 1360, 1321, 1322, 1323, 1330, 1330, 1324, + 1325, 1323, 1333, 1324, 1326, 1331, 1328, 1329, 1329, 1326, + 1336, 1326, 1327, 1326, 1335, 1326, 1331, 1327, 1334, 1336, + 1360, 1335, 1326, 0, 0, 1333, 1330, 1338, 1337, 1333, + 1334, 1326, 1338, 1339, 1340, 1342, 1326, 1336, 1326, 1341, + 1326, 1335, 1326, 1343, 1341, 1334, 1337, 1344, 1348, 1349, + 1345, 1339, 1340, 0, 1347, 1337, 1343, 1342, 1345, 1338, + 1339, 1340, 1342, 1346, 1350, 1344, 1341, 1347, 1351, 1352, + 1343, 1346, 1353, 1354, 1344, 1349, 1349, 1345, 1356, 1350, + + 1348, 1347, 1352, 1355, 1357, 1359, 1354, 1351, 1362, 1366, + 1346, 1350, 1363, 1357, 1353, 1351, 1352, 1361, 1356, 1353, + 1354, 1355, 1358, 1364, 1358, 1356, 1370, 1359, 1372, 1361, + 1355, 1357, 1359, 1366, 1363, 1362, 1366, 1367, 1368, 1363, + 1369, 0, 1373, 1378, 1361, 1371, 1368, 0, 1364, 1358, + 1364, 1374, 1371, 1370, 1375, 1372, 1376, 1377, 1369, 1367, + 1375, 1380, 1376, 1377, 1367, 1368, 1381, 1369, 1373, 1373, + 1378, 1380, 1371, 1374, 1384, 1379, 1383, 1385, 1374, 1382, + 1386, 1375, 1379, 1376, 1377, 1387, 1382, 1389, 1380, 0, + 1381, 1390, 0, 1381, 1387, 1385, 1384, 1392, 1394, 1391, + + 0, 1384, 1379, 1390, 1385, 1386, 1382, 1386, 1383, 1393, + 1395, 1389, 1387, 1391, 1389, 1397, 1396, 0, 1390, 1392, + 1394, 1399, 1393, 1398, 1392, 1394, 1391, 1400, 1406, 1395, + 1402, 1401, 1403, 1407, 1408, 1410, 1393, 1395, 1396, 1397, + 1401, 1404, 1397, 1396, 1409, 1398, 1411, 1399, 1399, 1400, + 1398, 1402, 1403, 1413, 1400, 1404, 1408, 1402, 1401, 1403, + 1406, 1408, 1412, 1414, 1411, 1407, 1409, 1410, 1404, 1413, + 1412, 1409, 1415, 1411, 1417, 1418, 1419, 1422, 1421, 1415, + 1413, 1422, 1420, 1423, 1418, 1421, 1424, 1425, 1428, 1412, + 1414, 1431, 0, 1419, 1420, 1426, 1417, 0, 1435, 1415, + + 1429, 1417, 1418, 1419, 1422, 1421, 1429, 1435, 1425, 1420, + 1430, 1426, 1432, 1429, 1425, 1423, 1433, 1430, 1424, 1432, + 1428, 1434, 1426, 1431, 1436, 1435, 1442, 1429, 1437, 1439, + 1438, 1433, 1438, 1429, 1434, 1437, 1440, 1430, 1439, 1432, + 1441, 1443, 1444, 1433, 1446, 1443, 1447, 1451, 1434, 1441, + 1436, 1436, 1446, 1442, 1450, 1437, 1439, 1438, 1440, 1447, + 1448, 1449, 1452, 1440, 1444, 1448, 1451, 1441, 1443, 1444, + 1449, 1446, 1450, 1447, 1451, 1452, 1456, 1455, 1453, 1454, + 1455, 1450, 1454, 1457, 1458, 1460, 1462, 0, 1449, 1452, + 1453, 1454, 1448, 1461, 1456, 1463, 0, 1458, 0, 1455, + + 1463, 1467, 1462, 1456, 1455, 1453, 1454, 1455, 1457, 1454, + 1457, 1458, 1466, 1462, 1464, 1468, 1461, 1460, 1465, 1465, + 1461, 1466, 1464, 1467, 1469, 1470, 1471, 1463, 1467, 1473, + 1475, 1476, 1472, 1471, 1470, 1477, 1473, 1468, 1478, 1466, + 1476, 1464, 1468, 1475, 1477, 1465, 1469, 1479, 1482, 0, + 0, 1469, 1470, 1471, 1472, 1481, 1473, 1475, 1476, 1472, + 1480, 1483, 1477, 1481, 1478, 1478, 1484, 1485, 1486, 1480, + 1479, 1487, 1488, 0, 1479, 1485, 1483, 1484, 1489, 1490, + 1482, 1486, 1481, 1487, 1488, 1492, 1489, 1480, 1483, 1491, + 1494, 1493, 1496, 1484, 1485, 1486, 1495, 1499, 1487, 1488, + + 1493, 1490, 1495, 1494, 1497, 1489, 1490, 1492, 1498, 1491, + 1496, 1501, 1492, 1502, 1500, 1499, 1491, 1494, 1493, 1496, + 1498, 1500, 1503, 1495, 1499, 1505, 1504, 0, 1506, 1507, + 1497, 1497, 1508, 1511, 1509, 1498, 1510, 1501, 1501, 1504, + 1509, 1500, 1512, 1508, 1513, 1502, 1514, 0, 1517, 0, + 1507, 1505, 1505, 1504, 1503, 1506, 1507, 1518, 1510, 1508, + 1515, 1509, 1520, 1510, 1519, 1511, 1523, 0, 1521, 0, + 1525, 1520, 1514, 1514, 1512, 1517, 1513, 1522, 1523, 1515, + 1518, 1515, 1519, 1521, 1518, 1524, 1515, 1515, 1527, 1520, + 1522, 1519, 1526, 1523, 1528, 1521, 1525, 1525, 1529, 1526, + + 1534, 1530, 1537, 1533, 1522, 1524, 1515, 1527, 1515, 1530, + 1533, 1529, 1524, 1531, 1538, 1527, 1528, 1532, 1531, 1526, + 1537, 1528, 1532, 1535, 1536, 1529, 1534, 1534, 1530, 1537, + 1533, 1535, 1536, 1540, 1539, 1541, 1538, 1542, 0, 1544, + 1540, 1538, 1539, 1543, 1541, 1531, 1545, 1546, 1544, 1532, + 1535, 1536, 1548, 1545, 1547, 1547, 1549, 1551, 1550, 1546, + 1540, 1539, 1541, 1552, 1549, 1543, 1544, 1554, 1553, 1542, + 1543, 1552, 1555, 1545, 1546, 1554, 1559, 1562, 1558, 1550, + 1555, 1547, 1559, 1549, 1548, 1550, 1553, 1561, 1556, 1551, + 1552, 1558, 1557, 1565, 1554, 1553, 1556, 1560, 1563, 1555, + + 1557, 1562, 1564, 1559, 1562, 1558, 1563, 1566, 1565, 1560, + 1564, 1567, 0, 1561, 1561, 1556, 1570, 1568, 1569, 1557, + 1565, 1571, 1572, 1573, 1560, 1563, 1576, 1577, 1584, 1564, + 1570, 0, 0, 1571, 1566, 1576, 1578, 1573, 1567, 1568, + 1572, 1569, 1574, 1570, 1568, 1569, 1574, 1582, 1571, 1572, + 1573, 1577, 1579, 1576, 1577, 1580, 1583, 1581, 1578, 1574, + 1584, 1586, 1580, 1578, 1579, 1585, 1587, 1574, 1581, 1574, + 1589, 0, 1588, 1574, 1582, 1586, 0, 1585, 1583, 1579, + 1590, 1592, 1580, 1583, 1581, 1595, 1574, 1593, 1586, 1591, + 1592, 1596, 1585, 1589, 1588, 1594, 1591, 1589, 1587, 1588, + + 1598, 1600, 1594, 1590, 1601, 1593, 0, 1590, 1592, 1598, + 1601, 1603, 1602, 1604, 1593, 1607, 1591, 1595, 1596, 1605, + 1609, 1610, 1594, 1618, 1611, 1612, 1605, 1598, 0, 1613, + 1615, 1601, 1620, 1600, 1602, 1611, 1612, 1603, 1603, 1602, + 1613, 1618, 1607, 1616, 1609, 1604, 1605, 1609, 1610, 1616, + 1618, 1611, 1612, 1617, 1615, 1619, 1613, 1615, 1620, 1620, + 1617, 1621, 1619, 1622, 1623, 1624, 1625, 1626, 1627, 1622, + 1616, 1628, 1623, 1621, 1629, 1631, 0, 1631, 1632, 1625, + 1617, 1633, 1619, 1629, 1630, 1632, 1638, 1624, 1621, 1628, + 1622, 1623, 1624, 1625, 1627, 1627, 1630, 1634, 1628, 1626, + + 1635, 1629, 1631, 1636, 1637, 1632, 1639, 1633, 1633, 1635, + 1634, 1630, 1640, 1638, 1641, 1642, 1637, 0, 1643, 1640, + 1642, 1644, 1647, 1645, 1634, 1636, 1643, 1635, 1646, 1639, + 1636, 1637, 1649, 1639, 1650, 1652, 1646, 1644, 1651, 1640, + 1641, 1641, 1642, 1653, 1647, 1643, 1645, 1654, 1644, 1647, + 1645, 1655, 1651, 1657, 1653, 1646, 1654, 1652, 1650, 1649, + 1660, 1650, 1652, 1659, 1655, 1651, 1657, 1656, 1656, 1658, + 1653, 1658, 1662, 1665, 1654, 1656, 1661, 1663, 1655, 1662, + 1657, 1659, 1668, 1664, 1663, 1667, 1660, 1660, 1666, 1668, + 1659, 1664, 1669, 1671, 1656, 1656, 1658, 1673, 1661, 1662, + + 1665, 1670, 0, 1661, 1663, 1674, 1666, 1667, 1676, 1668, + 1664, 1672, 1667, 1677, 1678, 1666, 1679, 1669, 1672, 1669, + 0, 1676, 1678, 1670, 1679, 1671, 1680, 1674, 1670, 1673, + 1682, 1683, 1674, 1684, 1683, 1676, 1685, 1686, 1672, 1687, + 1677, 1678, 1688, 1679, 1689, 1695, 1690, 1680, 1687, 0, + 1686, 0, 1682, 1680, 1688, 1692, 1691, 1682, 1683, 1684, + 1684, 1699, 1685, 1685, 1686, 1691, 1687, 1693, 1689, 1688, + 1692, 1689, 1690, 1690, 1693, 1694, 1696, 1695, 1694, 1699, + 1697, 1703, 1692, 1691, 1700, 1701, 1702, 1701, 1699, 1704, + 1694, 0, 1704, 1705, 1693, 1706, 1697, 1707, 1696, 1694, + + 1710, 1717, 1694, 1696, 1697, 1694, 1700, 1697, 1703, 1708, + 1702, 1700, 1701, 1702, 1709, 1711, 1704, 1694, 1714, 1707, + 1712, 1713, 1715, 1697, 1707, 1705, 1714, 1706, 1716, 1715, + 1713, 1718, 1710, 1717, 1712, 1708, 1708, 1711, 1719, 1720, + 1709, 1709, 1711, 1721, 1724, 1714, 1722, 1712, 1713, 1715, + 1722, 0, 1716, 1726, 1723, 1716, 1725, 1727, 1730, 1729, + 1728, 1720, 1726, 1718, 1727, 1730, 1720, 1729, 1737, 1731, + 1719, 1724, 1728, 1722, 0, 1721, 1723, 1732, 1725, 1733, + 1726, 1723, 1731, 1725, 1727, 1730, 1729, 1728, 1734, 1735, + 1732, 1735, 1733, 1737, 1736, 1737, 1731, 1734, 1739, 1738, + + 1743, 1744, 1745, 1747, 1732, 1741, 1733, 1738, 1742, 1745, + 1747, 1746, 0, 1750, 1743, 1734, 1735, 1736, 1739, 0, + 1741, 1736, 1746, 1742, 1748, 1739, 1738, 1743, 1749, 1745, + 1747, 1751, 1741, 1744, 1753, 1742, 1754, 1748, 1746, 1750, + 1750, 1756, 1755, 1754, 1757, 1758, 1749, 1759, 0, 1751, + 1760, 1748, 1749, 1760, 0, 1749, 1756, 1758, 1751, 1772, + 1759, 1753, 1762, 1754, 1755, 1764, 1761, 1763, 1756, 1755, + 1757, 1757, 1758, 1749, 1759, 1761, 1766, 1760, 1765, 1763, + 1762, 1765, 1770, 1768, 1770, 1764, 1772, 1766, 1768, 1762, + 1771, 1773, 1764, 1761, 1763, 1768, 1765, 1774, 1775, 1776, + + 1777, 0, 1778, 1766, 0, 1765, 1780, 1775, 1765, 1770, + 1768, 1779, 1774, 1781, 1771, 1768, 1778, 1771, 1773, 1779, + 1782, 1784, 0, 1776, 1774, 1775, 1776, 1777, 1780, 1778, + 1783, 1785, 1787, 1780, 1786, 1781, 1783, 0, 1779, 1785, + 1781, 1788, 1792, 1784, 1782, 1786, 1791, 1782, 1784, 1788, + 1787, 1789, 1790, 1793, 1789, 1790, 1794, 1783, 1785, 1787, + 1795, 1786, 1797, 1796, 1791, 1800, 1801, 1795, 1788, 1789, + 1800, 1797, 1798, 1791, 1792, 1799, 1794, 1796, 1789, 1790, + 1793, 1789, 1805, 1794, 1805, 1798, 1799, 1795, 1801, 1797, + 1796, 1802, 1806, 1801, 1807, 0, 1809, 1800, 1808, 1798, + + 0, 1806, 1799, 1812, 0, 1814, 1802, 1809, 1810, 1805, + 1811, 0, 1815, 1813, 1811, 1816, 1813, 1812, 1802, 1806, + 1807, 1807, 1808, 1809, 1816, 1808, 1810, 1814, 1817, 1812, + 1812, 1813, 1814, 1826, 1817, 1810, 1811, 1811, 1815, 1815, + 1813, 1811, 1816, 1813, 1812, 1818, 1819, 1821, 1823, 1822, + 1825, 1819, 0, 1823, 1818, 1817, 1828, 1824, 1827, 1829, + 1821, 1822, 1832, 1825, 0, 1826, 1830, 1827, 1831, 1833, + 1838, 1841, 1818, 1835, 1821, 1823, 1822, 1825, 1819, 1824, + 1835, 1831, 1836, 1828, 1824, 1827, 1837, 1839, 1830, 1836, + 1833, 1829, 1840, 1830, 1832, 1831, 1833, 1845, 1840, 1837, + + 1835, 1839, 1838, 1841, 1843, 1845, 1849, 1846, 1848, 1836, + 1847, 1850, 1851, 1837, 1839, 1846, 1840, 0, 1847, 1840, + 1857, 1856, 1852, 1843, 1845, 1840, 1851, 1848, 1849, 1850, + 1853, 1843, 1854, 1849, 1846, 1848, 1859, 1847, 1850, 1851, + 1852, 1855, 1856, 1858, 1853, 1854, 1861, 1860, 1856, 1852, + 1865, 1862, 1857, 1863, 1855, 1867, 1864, 1853, 1862, 1854, + 1859, 1860, 1863, 1859, 1864, 1866, 1868, 1870, 1855, 1856, + 1869, 1868, 1872, 1861, 1860, 1858, 1870, 1865, 1862, 1866, + 1863, 1869, 1873, 1864, 1874, 0, 1875, 1867, 1876, 1873, + 1877, 0, 1866, 1868, 1870, 1876, 1878, 1869, 1879, 1872, + + 1880, 1887, 1883, 1882, 1880, 0, 1885, 1874, 1875, 1873, + 1884, 1874, 1877, 1875, 1886, 1876, 1879, 1877, 1878, 1882, + 1883, 1885, 1891, 1878, 1888, 1879, 1886, 1880, 1887, 1883, + 1882, 1889, 1888, 1885, 1884, 1890, 1894, 1884, 1892, 1893, + 1895, 1886, 1896, 1890, 1901, 1899, 1889, 1897, 1905, 1891, + 1903, 1888, 1893, 1899, 1897, 1895, 1894, 1896, 1889, 1903, + 1892, 1900, 1890, 1894, 1902, 1892, 1893, 1895, 1900, 1896, + 1906, 1904, 1899, 1907, 1897, 1905, 1901, 1903, 1908, 1902, + 1907, 1910, 1911, 1912, 1913, 1914, 1918, 0, 1900, 0, + 1916, 1902, 1904, 1918, 1906, 1917, 1915, 1906, 1904, 1919, + + 1907, 1912, 0, 1910, 1919, 1908, 1922, 1924, 1910, 1920, + 1912, 1915, 1914, 1918, 1911, 1916, 1913, 1916, 1920, 1917, + 1921, 1923, 1917, 1915, 1925, 1924, 1919, 1927, 1922, 1921, + 1926, 1929, 1928, 1922, 1924, 0, 1920, 1933, 1929, 1925, + 1931, 0, 1926, 1923, 1932, 1928, 1930, 1921, 1923, 1927, + 1928, 1925, 1934, 1930, 1927, 1935, 1932, 1926, 1929, 1928, + 1942, 1935, 1931, 1937, 1933, 1940, 1945, 1931, 1930, 1938, + 1939, 1932, 1928, 1930, 1937, 1944, 1940, 1938, 1939, 1941, + 1930, 1943, 1935, 1943, 1934, 1942, 1941, 1942, 1946, 1948, + 1937, 1947, 1940, 1945, 1943, 1949, 1938, 1939, 1947, 1950, + + 1953, 1944, 1944, 1951, 1955, 1950, 1941, 1952, 1943, 1951, + 1943, 1958, 1954, 1952, 1956, 1946, 1948, 1960, 1947, 1959, + 1961, 1949, 1949, 1962, 1961, 1965, 1950, 1953, 1959, 1963, + 1951, 1963, 1967, 1964, 1952, 1954, 1955, 1966, 1956, 1954, + 1968, 1956, 1970, 1958, 1966, 1962, 1959, 1961, 1970, 1960, + 1962, 1969, 1965, 1971, 1967, 1972, 1963, 1964, 1973, 1967, + 1964, 1974, 1975, 1969, 1966, 1980, 0, 1968, 0, 1970, + 0, 0, 1976, 1976, 1976, 1971, 0, 1972, 1969, 1976, + 1971, 1978, 1972, 1974, 1973, 1973, 1977, 1976, 1974, 1979, + 1978, 1981, 1983, 1977, 1975, 1982, 1979, 1980, 1981, 1976, + + 1976, 1976, 1982, 1984, 1986, 1988, 1976, 1987, 1978, 1986, + 1989, 1990, 1983, 1977, 1991, 1992, 1979, 1988, 1981, 1983, + 1987, 1993, 1982, 1995, 1994, 1984, 1991, 1990, 1996, 1995, + 1984, 1994, 1988, 1998, 1987, 1989, 1986, 1989, 1990, 1993, + 2001, 1991, 1997, 1997, 2000, 1999, 2002, 1992, 1993, 2000, + 1995, 1994, 1999, 2006, 2003, 1996, 2007, 2008, 2007, 1998, + 1998, 2003, 2011, 2012, 2010, 2014, 2001, 2001, 2011, 1997, + 2013, 2000, 1999, 2002, 2015, 2008, 2014, 2016, 2013, 2017, + 2006, 2003, 2010, 2007, 2008, 2017, 2018, 2015, 2019, 2011, + 2022, 2010, 2014, 2020, 2023, 2012, 2025, 2013, 2018, 2021, + + 2021, 2015, 2024, 2024, 2016, 2027, 2017, 2025, 2019, 2028, + 2029, 2020, 2030, 2018, 2031, 2019, 2022, 2022, 2032, 2030, + 2020, 2023, 2033, 2025, 2035, 2036, 2021, 2037, 0, 2024, + 0, 2028, 2035, 2038, 2031, 2039, 2028, 2027, 2041, 2030, + 2040, 2031, 2029, 2044, 2043, 2041, 2049, 2033, 2042, 2033, + 2032, 2035, 2040, 2039, 2037, 2038, 2042, 2036, 2044, 2045, + 2038, 2048, 2039, 2046, 2050, 2041, 2051, 2040, 2043, 2052, + 2044, 2043, 2046, 2047, 2047, 2042, 2052, 2053, 2049, 2050, + 2059, 0, 2062, 2045, 2058, 2054, 2045, 2048, 2048, 2053, + 2046, 2050, 2056, 2065, 2062, 2061, 2052, 2057, 2051, 2056, + + 2047, 2054, 2057, 2061, 2053, 2066, 2058, 2059, 2054, 2062, + 2060, 2058, 2054, 2060, 2067, 2064, 2065, 2069, 2068, 2056, + 2065, 2070, 2061, 2064, 2057, 2073, 2071, 0, 2054, 2077, + 0, 2066, 2066, 2075, 2074, 2067, 2068, 2060, 2072, 2070, + 2074, 2067, 2064, 2072, 2069, 2068, 2075, 2076, 2070, 2071, + 2078, 2077, 2073, 2071, 2072, 2076, 2077, 2078, 2081, 2079, + 2075, 2074, 2080, 0, 2082, 2072, 2079, 2083, 2085, 2080, + 2072, 2084, 2086, 2082, 2076, 2087, 0, 2078, 2090, 2083, + 2088, 0, 2085, 2094, 2098, 2096, 2079, 2093, 2100, 2080, + 2081, 2082, 2091, 2084, 2083, 2085, 2090, 2091, 2084, 2086, + + 2103, 2087, 2087, 2088, 2092, 2090, 2102, 2088, 2091, 2093, + 2094, 2092, 2096, 2097, 2093, 2103, 2098, 2104, 2097, 2091, + 2100, 2101, 2101, 2106, 2091, 2111, 2108, 2103, 2102, 2107, + 0, 2092, 2109, 2102, 2110, 2112, 2110, 2113, 2106, 2114, + 2112, 2108, 0, 2115, 2124, 2097, 2117, 2116, 2101, 2104, + 2106, 2115, 2107, 2108, 2116, 2122, 2107, 2111, 2109, 2109, + 2118, 2110, 2112, 2120, 2121, 2125, 2114, 2126, 2117, 2113, + 2115, 2124, 2121, 2117, 2116, 2118, 2127, 2122, 2120, 2128, + 2131, 2130, 2122, 2129, 2132, 0, 2134, 2118, 2130, 2125, + 2120, 2121, 2125, 2126, 2126, 2129, 2133, 2135, 2137, 2138, + + 2148, 0, 2142, 2127, 2140, 2132, 2128, 2134, 2130, 2141, + 2129, 2132, 2131, 2134, 2143, 2135, 2147, 2142, 2133, 2145, + 2137, 2149, 2146, 2133, 2135, 2137, 2138, 2148, 2140, 2142, + 2150, 2140, 2141, 2151, 2145, 2152, 2141, 2146, 2147, 2149, + 2143, 2143, 2153, 2147, 2154, 2155, 2145, 2156, 2149, 2146, + 2157, 2154, 2150, 2158, 2160, 2151, 2156, 2150, 2157, 2152, + 2151, 2159, 2152, 2155, 2161, 2164, 2162, 2179, 2170, 2153, + 2163, 2154, 2155, 2161, 2156, 2170, 2158, 2157, 2164, 2163, + 2158, 2167, 2168, 2159, 2162, 2166, 2160, 2169, 2159, 2171, + 2167, 2161, 2164, 2162, 2179, 2170, 2166, 2163, 2173, 2172, + + 2168, 2174, 2175, 2181, 2176, 2169, 2188, 2174, 2167, 2168, + 2182, 2166, 2166, 2173, 2169, 2171, 2171, 2172, 2176, 0, + 2191, 2182, 2183, 2166, 2175, 2173, 2172, 2181, 2174, 2175, + 2181, 2176, 2184, 2183, 2186, 2187, 2194, 2182, 2188, 2190, + 2189, 2192, 2193, 2184, 2202, 2191, 2186, 2191, 2187, 2183, + 2189, 2193, 2195, 2197, 2192, 2198, 2200, 2201, 2210, 2184, + 2200, 2186, 2187, 2194, 2203, 2190, 2190, 2189, 2192, 2193, + 2204, 2195, 2207, 2210, 2214, 2214, 2202, 2203, 2201, 2195, + 2197, 2198, 2198, 2200, 2201, 2210, 2206, 2205, 2211, 2209, + 2204, 2203, 2205, 2206, 2208, 2209, 2212, 2204, 2207, 2207, + + 2215, 2214, 2208, 2211, 2213, 2216, 2217, 0, 2212, 0, + 2245, 2217, 0, 2206, 2205, 2211, 2209, 2216, 2215, 2213, + 2208, 2208, 2218, 2212, 2223, 2224, 2218, 2215, 2221, 2208, + 2227, 2213, 2216, 2219, 2219, 2221, 2222, 2219, 2217, 2223, + 2222, 2226, 2245, 2228, 2225, 2231, 0, 0, 2226, 2218, + 2219, 2223, 2224, 2225, 2227, 2221, 2232, 2227, 2219, 2229, + 2219, 2219, 2234, 2222, 2219, 2228, 2229, 2231, 2226, 2233, + 2228, 2225, 2231, 2235, 2237, 2241, 2239, 2219, 2233, 2240, + 2242, 2232, 2250, 2232, 2234, 2239, 2229, 2243, 2248, 2234, + 2241, 2244, 2237, 2235, 2253, 2243, 2233, 2240, 2244, 2249, + + 2235, 2237, 2241, 2239, 2246, 2242, 2240, 2242, 2252, 2250, + 2255, 2246, 2249, 2248, 2243, 2248, 2251, 2251, 2244, 2253, + 2256, 2253, 2259, 2260, 2257, 2258, 2249, 2262, 0, 2259, + 2252, 2246, 2255, 2257, 2258, 2252, 2261, 2255, 2263, 2264, + 2265, 2262, 2256, 2251, 2264, 2269, 2270, 2256, 2267, 2259, + 2271, 2257, 2258, 2263, 2262, 2260, 2267, 2268, 2261, 2265, + 2269, 2275, 2272, 2261, 2276, 2263, 2279, 2265, 2273, 2277, + 2268, 2264, 2269, 2270, 2274, 2267, 2271, 2271, 2272, 2278, + 2273, 2274, 2281, 2286, 2268, 2285, 2276, 2282, 2278, 2272, + 2283, 2276, 2280, 2275, 2277, 2273, 2277, 2284, 2279, 2287, + + 2280, 2274, 2282, 2285, 2291, 2286, 2278, 2289, 2287, 2281, + 2286, 2280, 2285, 2300, 2282, 2290, 2283, 2283, 2290, 2280, + 2293, 2294, 2292, 2284, 2284, 2293, 2287, 2280, 2292, 2291, + 2289, 2291, 2295, 2290, 2289, 2300, 2294, 2298, 2296, 2299, + 2300, 2301, 2290, 2303, 2305, 2290, 2306, 0, 2294, 2292, + 2295, 2298, 2293, 2296, 2299, 2304, 2311, 2303, 2311, 2295, + 2307, 0, 2305, 2301, 2298, 2296, 2299, 2304, 2301, 2307, + 2303, 2305, 2308, 2306, 2304, 2309, 2312, 2310, 2313, 2314, + 2316, 2308, 2304, 2311, 2309, 2317, 2318, 2307, 2310, 2312, + 2313, 0, 2319, 2318, 2304, 2316, 2320, 2321, 0, 2308, + + 2317, 2314, 2309, 2312, 2310, 2313, 2314, 2316, 2322, 2325, + 2327, 2332, 2317, 2318, 2319, 2321, 2328, 2322, 2320, 2319, + 2328, 2329, 2325, 2320, 2321, 2330, 2331, 2333, 2331, 2332, + 2325, 2327, 2334, 2329, 2330, 2322, 2325, 2327, 2332, 2335, + 2338, 0, 2336, 2328, 2340, 2343, 2339, 2337, 2329, 2325, + 2334, 2336, 2330, 2331, 2333, 2337, 2342, 2344, 2340, 2334, + 2345, 2346, 2344, 2338, 2342, 2345, 2335, 2338, 2339, 2336, + 2347, 2340, 2348, 2339, 2337, 0, 2350, 2343, 2351, 2354, + 2355, 0, 2358, 2342, 2344, 2351, 2356, 0, 2354, 2359, + 2357, 2363, 2345, 2346, 2367, 2350, 2348, 2369, 2365, 2348, + + 2356, 2361, 2347, 2350, 2360, 2351, 2354, 2355, 2357, 2358, + 2361, 2356, 2356, 2356, 2364, 2359, 2359, 2357, 2366, 2360, + 2365, 2367, 0, 2363, 2368, 2365, 2364, 2356, 2361, 2369, + 2371, 2360, 2372, 2373, 2376, 2374, 2376, 2379, 2356, 2372, + 2386, 2364, 2374, 2377, 2366, 2366, 2368, 2380, 2378, 2379, + 2384, 2368, 2378, 2371, 2381, 2382, 2373, 2371, 2389, 2372, + 2373, 2376, 2374, 2381, 2379, 2377, 2382, 2386, 2385, 2380, + 2377, 2383, 2384, 2385, 2380, 2378, 2387, 2384, 2383, 2388, + 2389, 2381, 2382, 2390, 2392, 2389, 2391, 2391, 2394, 2393, + 2395, 2388, 2390, 2392, 2396, 2385, 2394, 2398, 2383, 2387, + + 2397, 2400, 0, 2387, 2393, 0, 2388, 2410, 2396, 2397, + 2390, 2392, 2395, 2391, 2401, 2394, 2393, 2395, 2402, 2408, + 2400, 2396, 2401, 2403, 2398, 2404, 2402, 2397, 2400, 2404, + 2405, 2403, 2406, 2405, 2408, 2411, 2407, 2409, 2416, 2410, + 2406, 2401, 2407, 2409, 2413, 2402, 2408, 2415, 2417, 2420, + 2403, 2416, 2404, 2418, 2423, 2419, 2413, 2405, 0, 2406, + 2422, 2415, 2419, 2407, 2409, 2416, 2421, 2411, 2423, 2417, + 2424, 2413, 2425, 2424, 2415, 2417, 2420, 2426, 2418, 2427, + 2418, 2423, 2419, 2428, 2422, 2425, 2429, 2422, 2421, 2430, + 2431, 2426, 2436, 2421, 2433, 2432, 0, 2424, 2434, 2425, + + 2437, 2434, 2431, 2438, 2426, 2427, 2427, 2432, 2433, 2439, + 2428, 2429, 2441, 2429, 2442, 2438, 2430, 2431, 2443, 2436, + 2440, 2433, 2432, 2440, 2434, 2434, 2437, 2437, 2434, 2445, + 2438, 2448, 2449, 2450, 0, 2439, 2439, 2446, 2440, 2441, + 2443, 2442, 2447, 2452, 2446, 2443, 2448, 2440, 2453, 2447, + 2440, 2445, 2454, 2451, 2455, 2456, 2445, 2453, 2448, 2449, + 2450, 2451, 2457, 2458, 2446, 2459, 2455, 2460, 2463, 2447, + 2452, 2461, 2468, 2462, 2464, 2453, 2465, 2456, 2459, 2454, + 2451, 2455, 2456, 2462, 2465, 2460, 2467, 2464, 2469, 2457, + 2458, 2470, 2459, 2471, 2460, 2463, 2469, 2461, 2461, 2468, + + 2462, 2464, 2471, 2465, 2472, 2474, 2473, 2476, 2467, 2475, + 2478, 2477, 0, 2467, 2479, 2469, 2481, 2482, 2470, 2477, + 2471, 2483, 2478, 2484, 2475, 2482, 2472, 2473, 2481, 2474, + 2487, 2472, 2474, 2473, 2476, 2475, 2475, 2478, 2477, 2479, + 2486, 2479, 2487, 2481, 2482, 2488, 2489, 2486, 2483, 2488, + 2491, 2475, 2490, 2492, 2493, 2484, 2495, 2487, 2489, 2494, + 2498, 2492, 2499, 0, 2496, 2500, 0, 2486, 2495, 2499, + 0, 2501, 2488, 2489, 2506, 2490, 2493, 2491, 2496, 2490, + 2492, 2493, 2494, 2495, 2501, 2500, 2494, 2498, 2502, 2499, + 2496, 2496, 2500, 2503, 2504, 2505, 2505, 2502, 2501, 2507, + + 2506, 2506, 2503, 2508, 2511, 2496, 2504, 2513, 2509, 0, + 2517, 2514, 2512, 0, 2516, 2502, 2516, 2507, 2515, 0, + 2503, 2504, 2505, 2509, 2517, 2509, 2507, 2512, 2508, 2513, + 2508, 2519, 2509, 2514, 2513, 2509, 2511, 2517, 2514, 2512, + 2515, 2516, 2518, 2520, 2523, 2515, 2521, 2521, 2518, 2519, + 2509, 2526, 2509, 2524, 2525, 2527, 2528, 0, 2519, 2531, + 0, 0, 2529, 2526, 0, 2520, 2523, 2530, 2529, 2518, + 2520, 2523, 0, 2521, 2532, 2524, 2525, 2533, 2526, 2530, + 2524, 2525, 2534, 2535, 2534, 2537, 0, 2527, 2528, 2529, + 2536, 2531, 2537, 2538, 2530, 2539, 2532, 2535, 2540, 2533, + + 2541, 2532, 2542, 2543, 2533, 2544, 2550, 2545, 2552, 2534, + 2535, 2538, 2537, 2539, 2536, 2542, 2540, 2536, 2541, 2547, + 2538, 2549, 2539, 2551, 2550, 2540, 2547, 2541, 2549, 2542, + 2545, 2553, 2559, 2550, 2545, 2543, 2554, 2544, 2555, 2553, + 2552, 2560, 2561, 2559, 2562, 2556, 2547, 2566, 2549, 2551, + 2551, 2564, 2560, 2557, 2554, 2557, 2562, 2553, 2553, 2559, + 2557, 2563, 2566, 2554, 2555, 2555, 2553, 2556, 2560, 2561, + 2567, 2562, 2556, 2564, 2566, 2568, 2569, 2571, 2564, 2563, + 2557, 2567, 2557, 2572, 2574, 2573, 2575, 2568, 2563, 2576, + 2579, 2569, 2573, 2577, 2580, 0, 2582, 2567, 2583, 2574, + + 2581, 2571, 2568, 2569, 2571, 2572, 2584, 2585, 0, 0, + 2572, 2574, 2573, 2575, 2587, 2592, 2576, 2579, 2580, 2577, + 2577, 2580, 2581, 2586, 2584, 2589, 2594, 2581, 2582, 2588, + 2583, 2590, 2593, 2584, 2585, 2591, 2586, 2596, 2589, 2590, + 2587, 2587, 2597, 2598, 2588, 2593, 2599, 2592, 2594, 2600, + 2586, 0, 2589, 2594, 2601, 2604, 2588, 2602, 2590, 2593, + 2596, 2591, 2591, 2605, 2596, 2606, 2597, 2603, 2599, 2597, + 2598, 2600, 2601, 2599, 2603, 2602, 2600, 2608, 2604, 2606, + 2609, 2601, 2604, 2612, 2602, 2613, 2610, 2609, 2611, 2615, + 2605, 2614, 2606, 2610, 2603, 2611, 2612, 2616, 2614, 2608, + + 2617, 0, 0, 2625, 2608, 2618, 2630, 2609, 2613, 2619, + 2612, 2615, 2613, 2610, 2620, 2611, 2615, 2621, 2614, 0, + 2622, 2617, 2627, 2620, 2623, 2621, 2629, 2617, 2622, 2616, + 2625, 2618, 2618, 2624, 2628, 2619, 2619, 2627, 2630, 2624, + 2631, 2620, 2633, 2632, 2621, 2628, 2623, 2622, 2629, 2627, + 2635, 2623, 2637, 2629, 2639, 2646, 2646, 2653, 2638, 2640, + 2624, 2628, 2632, 2641, 2643, 2637, 2644, 2633, 2635, 2633, + 2632, 2638, 2631, 2645, 2651, 2647, 2650, 2635, 2644, 2637, + 2639, 2639, 2646, 2640, 2653, 2638, 2640, 2654, 2643, 2641, + 2641, 2643, 2652, 2644, 2657, 2659, 2661, 2645, 2665, 2650, + + 2645, 2647, 2647, 2650, 2659, 2654, 2651, 2652, 2667, 2661, + 2666, 2666, 2668, 2662, 2654, 2672, 2670, 2667, 2668, 2652, + 2665, 2657, 2659, 2661, 2662, 2665, 2671, 2674, 2676, 2677, + 0, 2678, 2687, 0, 2679, 2667, 2677, 2666, 2670, 2668, + 2662, 2680, 2672, 2670, 2681, 2679, 2680, 2683, 2671, 2684, + 2685, 2689, 2686, 2671, 2674, 2683, 2677, 2678, 2678, 2687, + 2676, 2679, 2689, 2690, 2691, 2685, 2681, 2686, 2680, 2692, + 2694, 2681, 2696, 2684, 2683, 2693, 2684, 2685, 2689, 2686, + 2697, 2690, 2694, 2698, 2693, 2691, 2699, 2700, 2700, 2701, + 2690, 2691, 2703, 2704, 2699, 2700, 2706, 2694, 2701, 2696, + + 2705, 2692, 2693, 2707, 2697, 2706, 2709, 2697, 2698, 2710, + 2698, 2708, 0, 2699, 2700, 2700, 2701, 2713, 2703, 2703, + 2704, 2707, 2705, 2706, 2711, 2708, 2712, 2705, 2709, 2718, + 2707, 2719, 2713, 2709, 2710, 2714, 2710, 2711, 2708, 2712, + 2715, 2716, 2717, 2719, 2713, 2720, 2721, 2715, 2716, 2722, + 2723, 2711, 0, 2712, 2724, 0, 2718, 2714, 2719, 2727, + 2726, 2725, 2714, 2728, 2717, 2723, 2729, 2715, 2716, 2717, + 2725, 2731, 2720, 2721, 0, 0, 2722, 2723, 2731, 2724, + 2730, 2724, 2726, 2736, 2732, 2727, 2727, 2726, 2725, 2728, + 2728, 2734, 2729, 2729, 2733, 2730, 2737, 2734, 2731, 2732, + + 2738, 2733, 2735, 2739, 2737, 2741, 2740, 2730, 2743, 2742, + 2736, 2732, 2745, 2735, 0, 2746, 2744, 2749, 2734, 2745, + 2751, 2733, 2740, 2737, 2742, 2752, 2752, 2738, 2743, 2735, + 2739, 2744, 2741, 2740, 2747, 2743, 2742, 2746, 2748, 2745, + 2750, 2747, 2746, 2744, 2749, 2748, 2753, 2751, 2754, 2758, + 2756, 2755, 2752, 2753, 2755, 2757, 2759, 0, 2750, 2760, + 2757, 2747, 2754, 2756, 2767, 2748, 2761, 2750, 2762, 2763, + 2765, 2759, 2826, 2753, 2758, 2754, 2758, 2756, 2755, 2765, + 2762, 2763, 2757, 2759, 2761, 2760, 2760, 2766, 2769, 2770, + 2768, 2767, 2766, 2761, 2768, 2762, 2763, 2765, 2771, 2772, + + 2773, 2774, 2770, 2775, 2826, 2778, 0, 2780, 2782, 2781, + 2784, 2783, 2769, 0, 2766, 2769, 2770, 2768, 2781, 2783, + 2771, 2772, 2784, 2944, 2782, 2771, 2772, 2773, 2774, 2775, + 2775, 2778, 2778, 2780, 2780, 2782, 2781, 2784, 2783, 2786, + 2787, 2789, 2788, 2790, 2791, 2793, 2786, 2788, 2789, 2787, + 2792, 2791, 2793, 2794, 2795, 2944, 2796, 2799, 2802, 2803, + 0, 2790, 2794, 2795, 2798, 2800, 2786, 2787, 2789, 2788, + 2790, 2791, 2793, 2806, 2801, 2792, 2802, 2792, 2800, 2801, + 2794, 2795, 2796, 2796, 2799, 2802, 2803, 2798, 2805, 2807, + 2808, 2798, 2800, 2809, 2810, 2811, 2812, 2814, 2807, 2808, + + 2806, 2801, 2809, 2813, 2816, 2812, 2805, 2811, 2814, 2817, + 2815, 2818, 2813, 2819, 2810, 2805, 2807, 2808, 2815, 2820, + 2809, 2810, 2811, 2812, 2814, 2821, 2820, 2816, 2822, 2817, + 2813, 2816, 2824, 2825, 2821, 2827, 2817, 2815, 2818, 2828, + 2819, 2829, 2830, 2831, 2827, 2832, 2820, 2833, 2828, 2822, + 2830, 2834, 2821, 2829, 2835, 2822, 2831, 2836, 2834, 2824, + 2825, 2835, 2827, 2837, 2836, 2842, 2828, 2832, 2829, 2830, + 2831, 2838, 2832, 2839, 2833, 2840, 2841, 2844, 2834, 2837, + 2839, 2835, 2843, 2846, 2836, 2849, 0, 2838, 2848, 0, + 2837, 2846, 2842, 2849, 2852, 0, 2850, 2840, 2838, 0, + + 2839, 2841, 2840, 2841, 2844, 2854, 2848, 2843, 2862, 2843, + 2846, 2850, 2849, 2851, 2856, 2848, 2852, 2853, 2855, 2859, + 2851, 2852, 2856, 2850, 2853, 2855, 2859, 2854, 2860, 2861, + 2863, 2865, 2854, 2866, 2864, 2862, 2867, 2860, 2870, 2868, + 2851, 2856, 2863, 2864, 2853, 2855, 2859, 2871, 2867, 2866, + 2870, 2872, 2873, 2861, 2874, 2860, 2861, 2863, 2865, 2871, + 2866, 2864, 2868, 2867, 2877, 2870, 2868, 2878, 2875, 2883, + 2879, 2881, 2872, 2889, 2871, 2873, 2877, 2879, 2872, 2873, + 2880, 2874, 2875, 2886, 2885, 2882, 2887, 0, 2880, 2888, + 2881, 2877, 2882, 2891, 2878, 2875, 2883, 2879, 2881, 2885, + + 2889, 2886, 2892, 2893, 2897, 0, 2890, 2880, 2894, 2887, + 2886, 2885, 2882, 2887, 2890, 2888, 2888, 2895, 2896, 2894, + 2891, 2893, 2899, 2904, 2892, 2896, 2903, 2906, 2899, 2892, + 2893, 2897, 2895, 2890, 2905, 2894, 2913, 2907, 0, 2905, + 2910, 2904, 2908, 2909, 2895, 2896, 2917, 2911, 2912, 2899, + 2904, 2907, 2903, 2903, 2906, 2914, 2908, 2909, 2910, 2915, + 2925, 2905, 2914, 2913, 2907, 2911, 2912, 2910, 2920, 2908, + 2909, 2915, 2922, 2917, 2911, 2912, 2923, 2926, 2924, 2925, + 2927, 2930, 2914, 2928, 2932, 2926, 2915, 2925, 2935, 2923, + 2920, 2933, 2936, 2930, 2922, 2920, 0, 2934, 2927, 2922, + + 2924, 2937, 2928, 2923, 2926, 2924, 2932, 2927, 2930, 2934, + 2928, 2932, 2938, 2933, 2939, 2935, 2940, 0, 2933, 2936, + 2938, 2942, 2941, 2937, 2934, 2943, 0, 2947, 2937, 2945, + 2942, 2950, 2951, 2948, 2943, 2949, 2940, 2955, 2961, 2938, + 2972, 2939, 2956, 2940, 2941, 2948, 2958, 2954, 2942, 2941, + 2957, 2945, 2943, 2947, 2947, 2957, 2945, 2949, 2950, 2951, + 2948, 2954, 2949, 2959, 2955, 2960, 2956, 2972, 2958, 2956, + 2961, 2962, 2965, 2958, 2954, 2963, 2971, 2964, 2960, 2968, + 2967, 2966, 2957, 2969, 2965, 2959, 2967, 2970, 0, 0, + 2959, 2971, 2960, 2974, 2962, 2964, 2975, 2963, 2962, 2965, + + 2966, 2976, 2963, 2971, 2964, 2980, 2978, 2967, 2966, 2970, + 2983, 2968, 2981, 2974, 2970, 2969, 2982, 2984, 2975, 2983, + 2974, 2978, 2985, 2975, 2986, 2976, 2987, 2980, 2976, 2988, + 0, 2984, 2980, 2978, 2981, 2989, 0, 2983, 2982, 2981, + 2985, 2990, 2986, 2982, 2984, 2993, 2994, 2988, 2995, 2985, + 3002, 2986, 2987, 2987, 2993, 0, 2988, 2998, 2989, 2999, + 3000, 3003, 2989, 2990, 0, 2998, 2999, 3000, 2990, 2995, + 3008, 3001, 2993, 3006, 3004, 2995, 3007, 3002, 2994, 3001, + 3009, 3003, 3004, 3011, 2998, 3012, 2999, 3000, 3003, 0, + 3010, 3006, 3009, 3018, 3007, 3011, 3008, 3008, 3001, 3015, + + 3006, 3004, 3017, 3007, 3019, 3013, 3021, 3009, 3010, 3017, + 3011, 3015, 3012, 3013, 3023, 3022, 3018, 3010, 3024, 3020, + 3018, 3020, 3023, 3025, 3026, 3027, 3015, 3024, 0, 3017, + 3031, 3019, 3013, 3028, 3029, 3028, 3032, 3034, 3021, 3036, + 3035, 3023, 0, 3039, 3027, 3024, 3020, 3022, 3031, 3037, + 3032, 3026, 3027, 3040, 3045, 3025, 3029, 3031, 3037, 3038, + 3028, 3029, 3036, 3032, 3035, 3040, 3036, 3035, 3042, 3034, + 3039, 3046, 3038, 3043, 3047, 3046, 3037, 3048, 3050, 3051, + 3040, 3045, 3043, 3055, 3057, 3052, 3038, 3058, 3059, 3063, + 3053, 3057, 3060, 3068, 3042, 3042, 3063, 3060, 3046, 0, + + 3043, 3047, 3051, 3059, 3048, 3050, 3051, 3052, 3053, 3058, + 3055, 3057, 3052, 3061, 3058, 3059, 3063, 3053, 3064, 3065, + 3068, 3066, 3069, 3070, 3060, 3064, 3065, 3071, 3061, 3072, + 3073, 3075, 3076, 3079, 3081, 3078, 0, 3080, 3087, 3083, + 3061, 3076, 3078, 3072, 3073, 3064, 3065, 3066, 3066, 3069, + 3070, 3071, 3088, 3082, 3071, 3084, 3072, 3073, 3075, 3076, + 3079, 3081, 3078, 3080, 3080, 3082, 3083, 3085, 3086, 3084, + 3087, 3092, 3095, 3089, 3096, 3093, 3085, 3095, 3096, 3088, + 3082, 3086, 3084, 3097, 3098, 3099, 3100, 3101, 0, 3101, + 3097, 3098, 3102, 3103, 3085, 3086, 3089, 3093, 3108, 3106, + + 3089, 3096, 3093, 3092, 3095, 3109, 3099, 3111, 3115, 3111, + 3097, 3098, 3099, 3112, 3101, 3102, 3113, 3108, 3100, 3102, + 3103, 3106, 3116, 3114, 3114, 3108, 3106, 3119, 3118, 3109, + 3115, 3116, 3109, 3114, 3111, 3115, 3121, 3112, 3117, 3120, + 3112, 3118, 3113, 3113, 3121, 3117, 3122, 3129, 3123, 3116, + 3114, 3114, 3120, 3124, 3119, 3118, 3123, 3126, 3130, 3122, + 3121, 3131, 3126, 3121, 3127, 3117, 3120, 3132, 3128, 3127, + 3135, 3121, 3124, 3122, 3129, 3123, 3128, 3133, 0, 3134, + 3124, 3135, 3139, 3137, 3130, 3130, 3136, 3131, 3131, 3126, + 3137, 3138, 3138, 3132, 3132, 3128, 3127, 3135, 3140, 3141, + + 3139, 3143, 3144, 3133, 3133, 3134, 3134, 3142, 3136, 3139, + 3137, 3140, 3145, 3136, 3149, 3142, 3150, 3146, 3138, 3145, + 3144, 3141, 3151, 3143, 3146, 3140, 3141, 3153, 3143, 3144, + 3147, 3154, 3158, 3152, 3142, 0, 3159, 3147, 3156, 3145, + 3155, 3149, 3160, 3150, 3146, 3152, 3151, 3156, 3161, 3151, + 3163, 3166, 3154, 3164, 3153, 3165, 3159, 3147, 3154, 3158, + 3152, 3167, 3155, 3159, 3171, 3156, 3168, 3155, 3172, 3160, + 3161, 3164, 3170, 3165, 3173, 3161, 3174, 3163, 3166, 3167, + 3164, 3170, 3165, 3190, 3168, 3183, 3176, 3193, 3167, 3178, + 3175, 3171, 3177, 3168, 3174, 3172, 3178, 3173, 3175, 3170, + + 3179, 3173, 3176, 3174, 3177, 3179, 3181, 3182, 3183, 3185, + 3190, 3191, 3183, 3176, 3193, 3189, 3178, 3175, 3194, 3177, + 3181, 3185, 3198, 3199, 3191, 3182, 3195, 3201, 3195, 3200, + 3196, 3194, 3179, 3181, 3182, 3219, 3185, 3189, 3191, 3196, + 3202, 3206, 3189, 3206, 3207, 3194, 3208, 3200, 3211, 3198, + 3199, 3210, 3217, 3195, 3213, 3202, 3200, 3196, 3210, 3201, + 3218, 3219, 3219, 3222, 3208, 3220, 3207, 3202, 3206, 3213, + 3215, 3207, 3223, 3208, 3217, 3224, 3215, 3227, 3210, 3217, + 3211, 3213, 3218, 3220, 3228, 3222, 3223, 3218, 3224, 3229, + 3222, 3225, 3220, 3231, 3225, 3230, 0, 3215, 3232, 3223, + + 3231, 3233, 3224, 3235, 3227, 3236, 3232, 3237, 0, 3238, + 3239, 3228, 3244, 3230, 0, 3240, 3229, 3225, 3225, 3239, + 3231, 3225, 3230, 3233, 3242, 3232, 3246, 3236, 3233, 3237, + 3240, 3243, 3236, 3241, 3237, 3235, 3238, 3239, 3248, 3241, + 3243, 3245, 3240, 3245, 3244, 3249, 3242, 3250, 0, 3251, + 3256, 3242, 3253, 3246, 3252, 3258, 3260, 3256, 3243, 3254, + 3241, 3248, 3252, 0, 3253, 3248, 3261, 3249, 3245, 3250, + 3260, 3254, 3249, 3262, 3250, 3251, 3251, 3256, 3263, 3253, + 3261, 3252, 3258, 3260, 3264, 3265, 3254, 3262, 3267, 3266, + 3272, 3268, 3269, 3261, 3271, 3273, 3265, 3266, 3275, 3269, + + 3262, 3263, 3264, 3270, 3273, 3263, 3276, 3267, 3272, 3280, + 3270, 3264, 3265, 3268, 3280, 3267, 3266, 3272, 3268, 3269, + 3271, 3271, 3273, 3274, 3274, 3275, 3277, 3281, 3283, 3284, + 3270, 3285, 3287, 3276, 3277, 3289, 3291, 3292, 3287, 3294, + 3281, 3280, 3299, 3296, 3300, 3302, 3295, 3291, 3292, 3283, + 3274, 3300, 3304, 3277, 3281, 3283, 3284, 3295, 3285, 3287, + 3301, 3294, 3289, 3291, 3292, 3296, 3294, 3305, 3303, 3299, + 3296, 3300, 3303, 3295, 3307, 3305, 3308, 3302, 3301, 3304, + 3309, 3310, 3311, 3313, 3315, 3316, 3322, 3301, 3309, 3308, + 3310, 3315, 3317, 3320, 3305, 3303, 3321, 3321, 3320, 3323, + + 3307, 3307, 3326, 3308, 3324, 3325, 3327, 3309, 3310, 3311, + 3328, 3315, 3325, 3322, 3317, 3313, 3324, 3316, 3329, 3317, + 3320, 3326, 3327, 3321, 3330, 3329, 3323, 3331, 3328, 3326, + 3334, 3324, 3325, 3327, 3332, 3331, 3333, 3328, 3335, 0, + 3336, 3345, 3337, 3333, 3338, 3329, 3343, 3342, 3326, 3332, + 3335, 3344, 3346, 3343, 3331, 3347, 3330, 3334, 3350, 3351, + 3354, 3332, 3342, 3333, 3336, 3335, 3337, 3336, 3345, 3337, + 3338, 3338, 3348, 3343, 3342, 3352, 3346, 3356, 3358, 3346, + 3350, 3348, 3353, 3344, 3362, 3350, 3351, 3347, 3355, 3355, + 3353, 3359, 3354, 3358, 3360, 3365, 3360, 3352, 3355, 3348, + + 3359, 3364, 3352, 3361, 3356, 3358, 3363, 3367, 3368, 3353, + 3369, 3362, 3364, 3365, 3363, 3355, 3355, 3361, 3359, 3370, + 3372, 3360, 3365, 3371, 3373, 3374, 3375, 3376, 3364, 3377, + 3361, 3379, 3379, 3363, 3367, 3368, 3371, 3369, 3381, 3380, + 3384, 3370, 3372, 3378, 0, 3376, 3370, 3372, 3385, 3387, + 3371, 3373, 3374, 3375, 3376, 3388, 3377, 3378, 3379, 3385, + 3381, 3391, 3399, 3393, 3411, 3381, 3395, 3384, 3393, 3391, + 3378, 3380, 3394, 3396, 3395, 3385, 3387, 3394, 3396, 3397, + 3400, 3400, 3388, 3401, 3402, 3404, 3405, 3406, 3391, 3399, + 3393, 3401, 3404, 3395, 3407, 3408, 3411, 3402, 3414, 3394, + + 3396, 3419, 3412, 0, 3405, 3397, 3397, 3400, 3410, 3412, + 3401, 3402, 3404, 3405, 3406, 3413, 3415, 3410, 3408, 3421, + 3414, 3407, 3408, 3413, 3418, 3414, 3422, 3423, 3419, 3412, + 3418, 3424, 3425, 3426, 3427, 3410, 0, 0, 3415, 0, + 3423, 3430, 3413, 3415, 3428, 3431, 3421, 3425, 3422, 3432, + 3433, 3418, 3426, 3422, 3423, 3435, 3432, 3433, 3434, 3425, + 3426, 3427, 3436, 3424, 3430, 3438, 3428, 3431, 3430, 3443, + 3435, 3428, 3431, 3439, 0, 0, 3432, 3433, 3443, 3440, + 3434, 3439, 3435, 3436, 3438, 3434, 3440, 3441, 3444, 3436, + 3447, 3449, 3438, 3460, 3441, 3446, 3443, 3445, 3445, 3444, + + 3439, 3446, 3450, 3451, 3452, 3456, 3440, 3445, 0, 3450, + 3455, 3461, 3447, 3449, 3441, 3444, 3454, 3447, 3449, 3456, + 3460, 3462, 3446, 3454, 3445, 3445, 3452, 3466, 3468, 3450, + 3469, 3452, 3456, 3470, 3455, 3451, 3471, 3455, 3461, 3466, + 3476, 3470, 3479, 3454, 3462, 3481, 3473, 0, 3462, 3477, + 3477, 0, 3469, 3483, 3466, 3468, 3484, 3469, 3473, 3485, + 3470, 3478, 3478, 3471, 3480, 3480, 0, 3476, 3481, 3479, + 3486, 3487, 3481, 3473, 3484, 3483, 3490, 3494, 3477, 3486, + 3483, 3491, 3492, 3484, 3487, 3493, 3485, 3495, 3497, 3492, + 3478, 3496, 3493, 3480, 3500, 3497, 3500, 3486, 3487, 3494, + + 3496, 3502, 3501, 3490, 3494, 3503, 0, 3491, 3491, 3492, + 3506, 3507, 3493, 3504, 3495, 3497, 3508, 3509, 3496, 3506, + 3510, 3500, 3501, 3503, 3502, 3504, 3511, 3512, 3502, 3501, + 3513, 0, 3503, 3507, 3514, 3509, 3516, 3506, 3507, 3517, + 3504, 3516, 3513, 3508, 3509, 3515, 3510, 3510, 3515, 3518, + 3519, 3518, 3520, 3511, 3512, 0, 3514, 3513, 3520, 3521, + 3522, 3514, 3519, 3515, 3524, 3523, 3525, 3526, 3516, 3527, + 3528, 3517, 3515, 3523, 3533, 3515, 3518, 3519, 3529, 3520, + 3530, 3521, 3522, 3536, 3541, 3537, 3521, 3522, 3526, 3542, + 3529, 3524, 3523, 3534, 3526, 3539, 3527, 3528, 3525, 3543, + + 3544, 3533, 3530, 3537, 3539, 3529, 3534, 3530, 3546, 3547, + 3536, 3541, 3537, 3548, 3549, 3552, 3542, 3550, 3550, 3553, + 3534, 3555, 3539, 3557, 3558, 3556, 3543, 3544, 3561, 3563, + 0, 3558, 3567, 3552, 3568, 3546, 3547, 3560, 3557, 3562, + 3548, 3549, 3552, 3556, 3550, 3564, 3553, 3562, 3555, 3560, + 3557, 3558, 3556, 3565, 3566, 3561, 3563, 3564, 3567, 3567, + 3571, 3568, 3570, 3583, 3560, 3577, 3562, 3565, 3574, 3566, + 3575, 3582, 3564, 3578, 3570, 3576, 3576, 3574, 3581, 3580, + 3565, 3566, 3578, 0, 3582, 3583, 3588, 3571, 3584, 3570, + 3583, 3577, 3577, 3586, 3575, 3574, 3584, 3575, 3582, 3585, + + 3578, 3589, 3576, 3580, 3586, 0, 3580, 3588, 3585, 3592, + 3581, 3593, 3607, 3588, 3595, 3584, 3597, 3597, 3598, 3589, + 3586, 3611, 3608, 3593, 3612, 3598, 3585, 3613, 3589, 3614, + 3616, 3626, 3592, 3618, 3607, 3611, 3592, 3618, 3593, 3607, + 3595, 3595, 3620, 3597, 3619, 3598, 3608, 3626, 3611, 3608, + 3623, 3612, 3621, 3627, 3613, 3629, 3614, 3616, 3626, 3621, + 3618, 3628, 3619, 3623, 3625, 3620, 3630, 3629, 3625, 3620, + 3631, 3619, 0, 3632, 3633, 3627, 3634, 3623, 3636, 3621, + 3627, 3632, 3629, 3633, 3631, 0, 3628, 3634, 3628, 3637, + 3636, 3625, 3630, 3630, 3635, 3638, 3635, 3631, 3639, 3641, + + 3632, 3633, 3640, 3634, 3643, 3636, 3642, 3637, 3640, 3644, + 3638, 3645, 3643, 3646, 3641, 3653, 3637, 3651, 3645, 3654, + 3639, 3635, 3638, 3655, 3657, 3639, 3641, 3652, 3642, 3640, + 3651, 3643, 3656, 3642, 3652, 3646, 3644, 3654, 3645, 3658, + 3646, 3659, 3653, 3661, 3651, 3660, 3654, 3662, 0, 3659, + 3655, 3657, 3660, 3663, 3652, 3664, 3668, 3664, 3656, 3656, + 3666, 3665, 3669, 3667, 3670, 3690, 3658, 3661, 3659, 3662, + 3661, 3668, 3660, 3665, 3662, 3663, 3667, 3672, 3671, 3673, + 3663, 3674, 3664, 3668, 3669, 3671, 3676, 3677, 3665, 3669, + 3667, 3670, 3666, 3678, 3679, 3681, 3686, 3690, 3687, 3677, + + 3683, 3678, 3691, 3689, 3672, 3671, 3673, 3681, 3674, 3683, + 3688, 3689, 3693, 3676, 3677, 3692, 3695, 3696, 3698, 0, + 3678, 3679, 3681, 3686, 3687, 3687, 3693, 3683, 3692, 3688, + 3689, 3707, 3694, 0, 3691, 3703, 3706, 3688, 3695, 3693, + 3694, 3703, 3692, 3695, 3696, 3698, 3704, 3710, 3709, 3706, + 3712, 3713, 3711, 3704, 3707, 3709, 0, 3717, 3707, 3694, + 3711, 3715, 3703, 3706, 3712, 3713, 3723, 3716, 3714, 3710, + 3724, 3725, 3721, 3704, 3710, 3709, 3714, 3712, 3713, 3711, + 3720, 3721, 3722, 3715, 3717, 3726, 3727, 3720, 3715, 3716, + 3722, 0, 3724, 3723, 3716, 3714, 3728, 3724, 3729, 3721, + + 3731, 3733, 3730, 3725, 3734, 0, 3735, 3720, 3727, 3722, + 3730, 3726, 3726, 3727, 3737, 3739, 3738, 0, 3728, 3740, + 3729, 3742, 3741, 3728, 3738, 3729, 3734, 3740, 3733, 3730, + 3741, 3734, 3731, 3735, 3744, 3739, 3743, 3737, 3746, 3748, + 3750, 3737, 3739, 3738, 3743, 3753, 3740, 3751, 3744, 3741, + 3752, 3749, 0, 3742, 3749, 3751, 3754, 3755, 3752, 3753, + 3759, 3744, 3750, 3743, 3746, 3746, 3748, 3750, 3761, 3749, + 3762, 3756, 3753, 3764, 3751, 3758, 3758, 3752, 3749, 3755, + 3760, 3749, 3754, 3754, 3755, 3756, 3759, 3759, 3760, 3763, + 3766, 3765, 3767, 3764, 3761, 3761, 3762, 3762, 3756, 3765, + + 3764, 3768, 3758, 3769, 3770, 3771, 3776, 3760, 0, 3785, + 0, 3763, 3772, 3773, 3767, 3774, 3763, 3766, 3765, 3767, + 3772, 3777, 3779, 3774, 3770, 3771, 3768, 3783, 3768, 3777, + 3769, 3770, 3771, 3776, 3780, 3773, 3785, 3781, 3782, 3772, + 3773, 3788, 3774, 3786, 3779, 3781, 3782, 3787, 3777, 3779, + 3789, 3786, 3790, 3783, 3783, 3787, 3780, 3792, 3793, 3796, + 3794, 3780, 3802, 3800, 3781, 3782, 3799, 3788, 3788, 3803, + 3786, 3800, 3790, 0, 3787, 3801, 0, 3789, 0, 3790, + 3794, 3796, 0, 3801, 3792, 3793, 3796, 3794, 3799, 3802, + 3800, 0, 0, 3799, 0, 0, 3803, 0, 0, 0, + + 0, 0, 3801, 3807, 3807, 3807, 3807, 3807, 3807, 3807, + 3808, 3808, 3808, 3808, 3808, 3808, 3808, 3809, 3809, 3809, + 3809, 3809, 3809, 3809, 3810, 3810, 3810, 3810, 3810, 3810, + 3810, 3811, 3811, 3811, 3811, 3811, 3811, 3811, 3812, 3812, + 3812, 3812, 3812, 3812, 3812, 3813, 3813, 3813, 3813, 3813, + 3813, 3813, 3815, 3815, 0, 3815, 3815, 3815, 3815, 3816, + 3816, 0, 0, 0, 3816, 3816, 3817, 3817, 0, 0, + 3817, 0, 3817, 3818, 0, 0, 0, 0, 0, 3818, + 3819, 3819, 0, 0, 0, 3819, 3819, 3820, 0, 0, + 0, 0, 0, 3820, 3821, 3821, 0, 3821, 3821, 3821, + + 3821, 3822, 0, 0, 0, 0, 0, 3822, 3823, 3823, + 0, 0, 0, 3823, 3823, 3824, 3824, 0, 3824, 3824, + 3824, 3824, 3806, 3806, 3806, 3806, 3806, 3806, 3806, 3806, + 3806, 3806, 3806, 3806, 3806, 3806, 3806, 3806, 3806, 3806, + 3806, 3806, 3806, 3806, 3806, 3806, 3806, 3806, 3806, 3806, + 3806, 3806, 3806, 3806, 3806, 3806, 3806, 3806, 3806, 3806, + 3806, 3806, 3806, 3806, 3806, 3806, 3806, 3806, 3806, 3806, + 3806, 3806, 3806, 3806, 3806, 3806, 3806, 3806, 3806, 3806, + 3806, 3806, 3806, 3806, 3806, 3806, 3806, 3806, 3806 } ; static yy_state_type yy_last_accepting_state; @@ -4252,7 +4284,7 @@ static void config_end_include(void) } #endif -#line 4253 "" +#line 4285 "" #define YY_NO_INPUT 1 #line 191 "util/configlexer.lex" #ifndef YY_NO_UNPUT @@ -4261,9 +4293,9 @@ static void config_end_include(void) #ifndef YY_NO_INPUT #define YY_NO_INPUT 1 #endif -#line 4262 "" +#line 4294 "" -#line 4264 "" +#line 4296 "" #define INITIAL 0 #define quotedstring 1 @@ -4487,7 +4519,7 @@ YY_DECL { #line 211 "util/configlexer.lex" -#line 4488 "" +#line 4520 "" while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ { @@ -4520,13 +4552,13 @@ YY_DECL 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 >= 3778 ) + if ( yy_current_state >= 3807 ) 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] != 10717 ); + while ( yy_base[yy_current_state] != 10823 ); yy_find_action: yy_act = yy_accept[yy_current_state]; @@ -5511,576 +5543,576 @@ YY_RULE_SETUP case 192: YY_RULE_SETUP #line 406 "util/configlexer.lex" -{ YDVAR(1, VAR_SERVE_EXPIRED) } +{ YDVAR(1, VAR_DISABLE_EDNS_DO) } YY_BREAK case 193: YY_RULE_SETUP #line 407 "util/configlexer.lex" -{ YDVAR(1, VAR_SERVE_EXPIRED_TTL) } +{ YDVAR(1, VAR_SERVE_EXPIRED) } YY_BREAK case 194: YY_RULE_SETUP #line 408 "util/configlexer.lex" -{ YDVAR(1, VAR_SERVE_EXPIRED_TTL_RESET) } +{ YDVAR(1, VAR_SERVE_EXPIRED_TTL) } YY_BREAK case 195: YY_RULE_SETUP #line 409 "util/configlexer.lex" -{ YDVAR(1, VAR_SERVE_EXPIRED_REPLY_TTL) } +{ YDVAR(1, VAR_SERVE_EXPIRED_TTL_RESET) } YY_BREAK case 196: YY_RULE_SETUP #line 410 "util/configlexer.lex" -{ YDVAR(1, VAR_SERVE_EXPIRED_CLIENT_TIMEOUT) } +{ YDVAR(1, VAR_SERVE_EXPIRED_REPLY_TTL) } YY_BREAK case 197: YY_RULE_SETUP #line 411 "util/configlexer.lex" -{ YDVAR(1, VAR_EDE_SERVE_EXPIRED) } +{ YDVAR(1, VAR_SERVE_EXPIRED_CLIENT_TIMEOUT) } YY_BREAK case 198: YY_RULE_SETUP #line 412 "util/configlexer.lex" -{ YDVAR(1, VAR_SERVE_ORIGINAL_TTL) } +{ YDVAR(1, VAR_EDE_SERVE_EXPIRED) } YY_BREAK case 199: YY_RULE_SETUP #line 413 "util/configlexer.lex" -{ YDVAR(1, VAR_FAKE_DSA) } +{ YDVAR(1, VAR_SERVE_ORIGINAL_TTL) } YY_BREAK case 200: YY_RULE_SETUP #line 414 "util/configlexer.lex" -{ YDVAR(1, VAR_FAKE_SHA1) } +{ YDVAR(1, VAR_FAKE_DSA) } YY_BREAK case 201: YY_RULE_SETUP #line 415 "util/configlexer.lex" -{ YDVAR(1, VAR_VAL_LOG_LEVEL) } +{ YDVAR(1, VAR_FAKE_SHA1) } YY_BREAK case 202: YY_RULE_SETUP #line 416 "util/configlexer.lex" -{ YDVAR(1, VAR_KEY_CACHE_SIZE) } +{ YDVAR(1, VAR_VAL_LOG_LEVEL) } YY_BREAK case 203: YY_RULE_SETUP #line 417 "util/configlexer.lex" -{ YDVAR(1, VAR_KEY_CACHE_SLABS) } +{ YDVAR(1, VAR_KEY_CACHE_SIZE) } YY_BREAK case 204: YY_RULE_SETUP #line 418 "util/configlexer.lex" -{ YDVAR(1, VAR_NEG_CACHE_SIZE) } +{ YDVAR(1, VAR_KEY_CACHE_SLABS) } YY_BREAK case 205: YY_RULE_SETUP #line 419 "util/configlexer.lex" -{ - YDVAR(1, VAR_VAL_NSEC3_KEYSIZE_ITERATIONS) } +{ YDVAR(1, VAR_NEG_CACHE_SIZE) } YY_BREAK case 206: YY_RULE_SETUP -#line 421 "util/configlexer.lex" -{ YDVAR(1, VAR_ZONEMD_PERMISSIVE_MODE) } +#line 420 "util/configlexer.lex" +{ + YDVAR(1, VAR_VAL_NSEC3_KEYSIZE_ITERATIONS) } YY_BREAK case 207: YY_RULE_SETUP #line 422 "util/configlexer.lex" -{ YDVAR(1, VAR_ZONEMD_CHECK) } +{ YDVAR(1, VAR_ZONEMD_PERMISSIVE_MODE) } YY_BREAK case 208: YY_RULE_SETUP #line 423 "util/configlexer.lex" -{ YDVAR(1, VAR_ZONEMD_REJECT_ABSENCE) } +{ YDVAR(1, VAR_ZONEMD_CHECK) } YY_BREAK case 209: YY_RULE_SETUP #line 424 "util/configlexer.lex" -{ YDVAR(1, VAR_ADD_HOLDDOWN) } +{ YDVAR(1, VAR_ZONEMD_REJECT_ABSENCE) } YY_BREAK case 210: YY_RULE_SETUP #line 425 "util/configlexer.lex" -{ YDVAR(1, VAR_DEL_HOLDDOWN) } +{ YDVAR(1, VAR_ADD_HOLDDOWN) } YY_BREAK case 211: YY_RULE_SETUP #line 426 "util/configlexer.lex" -{ YDVAR(1, VAR_KEEP_MISSING) } +{ YDVAR(1, VAR_DEL_HOLDDOWN) } YY_BREAK case 212: YY_RULE_SETUP #line 427 "util/configlexer.lex" -{ YDVAR(1, VAR_PERMIT_SMALL_HOLDDOWN) } +{ YDVAR(1, VAR_KEEP_MISSING) } YY_BREAK case 213: YY_RULE_SETUP #line 428 "util/configlexer.lex" -{ YDVAR(1, VAR_USE_SYSLOG) } +{ YDVAR(1, VAR_PERMIT_SMALL_HOLDDOWN) } YY_BREAK case 214: YY_RULE_SETUP #line 429 "util/configlexer.lex" -{ YDVAR(1, VAR_LOG_IDENTITY) } +{ YDVAR(1, VAR_USE_SYSLOG) } YY_BREAK case 215: YY_RULE_SETUP #line 430 "util/configlexer.lex" -{ YDVAR(1, VAR_LOG_TIME_ASCII) } +{ YDVAR(1, VAR_LOG_IDENTITY) } YY_BREAK case 216: YY_RULE_SETUP #line 431 "util/configlexer.lex" -{ YDVAR(1, VAR_LOG_QUERIES) } +{ YDVAR(1, VAR_LOG_TIME_ASCII) } YY_BREAK case 217: YY_RULE_SETUP #line 432 "util/configlexer.lex" -{ YDVAR(1, VAR_LOG_REPLIES) } +{ YDVAR(1, VAR_LOG_QUERIES) } YY_BREAK case 218: YY_RULE_SETUP #line 433 "util/configlexer.lex" -{ YDVAR(1, VAR_LOG_TAG_QUERYREPLY) } +{ YDVAR(1, VAR_LOG_REPLIES) } YY_BREAK case 219: YY_RULE_SETUP #line 434 "util/configlexer.lex" -{ YDVAR(1, VAR_LOG_LOCAL_ACTIONS) } +{ YDVAR(1, VAR_LOG_TAG_QUERYREPLY) } YY_BREAK case 220: YY_RULE_SETUP #line 435 "util/configlexer.lex" -{ YDVAR(1, VAR_LOG_SERVFAIL) } +{ YDVAR(1, VAR_LOG_LOCAL_ACTIONS) } YY_BREAK case 221: YY_RULE_SETUP #line 436 "util/configlexer.lex" -{ YDVAR(2, VAR_LOCAL_ZONE) } +{ YDVAR(1, VAR_LOG_SERVFAIL) } YY_BREAK case 222: YY_RULE_SETUP #line 437 "util/configlexer.lex" -{ YDVAR(1, VAR_LOCAL_DATA) } +{ YDVAR(2, VAR_LOCAL_ZONE) } YY_BREAK case 223: YY_RULE_SETUP #line 438 "util/configlexer.lex" -{ YDVAR(1, VAR_LOCAL_DATA_PTR) } +{ YDVAR(1, VAR_LOCAL_DATA) } YY_BREAK case 224: YY_RULE_SETUP #line 439 "util/configlexer.lex" -{ YDVAR(1, VAR_UNBLOCK_LAN_ZONES) } +{ YDVAR(1, VAR_LOCAL_DATA_PTR) } YY_BREAK case 225: YY_RULE_SETUP #line 440 "util/configlexer.lex" -{ YDVAR(1, VAR_INSECURE_LAN_ZONES) } +{ YDVAR(1, VAR_UNBLOCK_LAN_ZONES) } YY_BREAK case 226: YY_RULE_SETUP #line 441 "util/configlexer.lex" -{ YDVAR(1, VAR_STATISTICS_INTERVAL) } +{ YDVAR(1, VAR_INSECURE_LAN_ZONES) } YY_BREAK case 227: YY_RULE_SETUP #line 442 "util/configlexer.lex" -{ YDVAR(1, VAR_STATISTICS_CUMULATIVE) } +{ YDVAR(1, VAR_STATISTICS_INTERVAL) } YY_BREAK case 228: YY_RULE_SETUP #line 443 "util/configlexer.lex" -{ YDVAR(1, VAR_EXTENDED_STATISTICS) } +{ YDVAR(1, VAR_STATISTICS_CUMULATIVE) } YY_BREAK case 229: YY_RULE_SETUP #line 444 "util/configlexer.lex" -{ YDVAR(1, VAR_STATISTICS_INHIBIT_ZERO) } +{ YDVAR(1, VAR_EXTENDED_STATISTICS) } YY_BREAK case 230: YY_RULE_SETUP #line 445 "util/configlexer.lex" -{ YDVAR(1, VAR_SHM_ENABLE) } +{ YDVAR(1, VAR_STATISTICS_INHIBIT_ZERO) } YY_BREAK case 231: YY_RULE_SETUP #line 446 "util/configlexer.lex" -{ YDVAR(1, VAR_SHM_KEY) } +{ YDVAR(1, VAR_SHM_ENABLE) } YY_BREAK case 232: YY_RULE_SETUP #line 447 "util/configlexer.lex" -{ YDVAR(0, VAR_REMOTE_CONTROL) } +{ YDVAR(1, VAR_SHM_KEY) } YY_BREAK case 233: YY_RULE_SETUP #line 448 "util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_ENABLE) } +{ YDVAR(0, VAR_REMOTE_CONTROL) } YY_BREAK case 234: YY_RULE_SETUP #line 449 "util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_INTERFACE) } +{ YDVAR(1, VAR_CONTROL_ENABLE) } YY_BREAK case 235: YY_RULE_SETUP #line 450 "util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_PORT) } +{ YDVAR(1, VAR_CONTROL_INTERFACE) } YY_BREAK case 236: YY_RULE_SETUP #line 451 "util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_USE_CERT) } +{ YDVAR(1, VAR_CONTROL_PORT) } YY_BREAK case 237: YY_RULE_SETUP #line 452 "util/configlexer.lex" -{ YDVAR(1, VAR_SERVER_KEY_FILE) } +{ YDVAR(1, VAR_CONTROL_USE_CERT) } YY_BREAK case 238: YY_RULE_SETUP #line 453 "util/configlexer.lex" -{ YDVAR(1, VAR_SERVER_CERT_FILE) } +{ YDVAR(1, VAR_SERVER_KEY_FILE) } YY_BREAK case 239: YY_RULE_SETUP #line 454 "util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_KEY_FILE) } +{ YDVAR(1, VAR_SERVER_CERT_FILE) } YY_BREAK case 240: YY_RULE_SETUP #line 455 "util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_CERT_FILE) } +{ YDVAR(1, VAR_CONTROL_KEY_FILE) } YY_BREAK case 241: YY_RULE_SETUP #line 456 "util/configlexer.lex" -{ YDVAR(1, VAR_PYTHON_SCRIPT) } +{ YDVAR(1, VAR_CONTROL_CERT_FILE) } YY_BREAK case 242: YY_RULE_SETUP #line 457 "util/configlexer.lex" -{ YDVAR(0, VAR_PYTHON) } +{ YDVAR(1, VAR_PYTHON_SCRIPT) } YY_BREAK case 243: YY_RULE_SETUP #line 458 "util/configlexer.lex" -{ YDVAR(1, VAR_DYNLIB_FILE) } +{ YDVAR(0, VAR_PYTHON) } YY_BREAK case 244: YY_RULE_SETUP #line 459 "util/configlexer.lex" -{ YDVAR(0, VAR_DYNLIB) } +{ YDVAR(1, VAR_DYNLIB_FILE) } YY_BREAK case 245: YY_RULE_SETUP #line 460 "util/configlexer.lex" -{ YDVAR(1, VAR_DOMAIN_INSECURE) } +{ YDVAR(0, VAR_DYNLIB) } YY_BREAK case 246: YY_RULE_SETUP #line 461 "util/configlexer.lex" -{ YDVAR(1, VAR_MINIMAL_RESPONSES) } +{ YDVAR(1, VAR_DOMAIN_INSECURE) } YY_BREAK case 247: YY_RULE_SETUP #line 462 "util/configlexer.lex" -{ YDVAR(1, VAR_RRSET_ROUNDROBIN) } +{ YDVAR(1, VAR_MINIMAL_RESPONSES) } YY_BREAK case 248: YY_RULE_SETUP #line 463 "util/configlexer.lex" -{ YDVAR(1, VAR_UNKNOWN_SERVER_TIME_LIMIT) } +{ YDVAR(1, VAR_RRSET_ROUNDROBIN) } YY_BREAK case 249: YY_RULE_SETUP #line 464 "util/configlexer.lex" -{ YDVAR(1, VAR_MAX_UDP_SIZE) } +{ YDVAR(1, VAR_UNKNOWN_SERVER_TIME_LIMIT) } YY_BREAK case 250: YY_RULE_SETUP #line 465 "util/configlexer.lex" -{ YDVAR(1, VAR_DNS64_PREFIX) } +{ YDVAR(1, VAR_MAX_UDP_SIZE) } YY_BREAK case 251: YY_RULE_SETUP #line 466 "util/configlexer.lex" -{ YDVAR(1, VAR_DNS64_SYNTHALL) } +{ YDVAR(1, VAR_DNS64_PREFIX) } YY_BREAK case 252: YY_RULE_SETUP #line 467 "util/configlexer.lex" -{ YDVAR(1, VAR_DNS64_IGNORE_AAAA) } +{ YDVAR(1, VAR_DNS64_SYNTHALL) } YY_BREAK case 253: YY_RULE_SETUP #line 468 "util/configlexer.lex" -{ YDVAR(1, VAR_NAT64_PREFIX) } +{ YDVAR(1, VAR_DNS64_IGNORE_AAAA) } YY_BREAK case 254: YY_RULE_SETUP #line 469 "util/configlexer.lex" -{ YDVAR(1, VAR_DEFINE_TAG) } +{ YDVAR(1, VAR_NAT64_PREFIX) } YY_BREAK case 255: YY_RULE_SETUP #line 470 "util/configlexer.lex" -{ YDVAR(2, VAR_LOCAL_ZONE_TAG) } +{ YDVAR(1, VAR_DEFINE_TAG) } YY_BREAK case 256: YY_RULE_SETUP #line 471 "util/configlexer.lex" -{ YDVAR(2, VAR_ACCESS_CONTROL_TAG) } +{ YDVAR(2, VAR_LOCAL_ZONE_TAG) } YY_BREAK case 257: YY_RULE_SETUP #line 472 "util/configlexer.lex" -{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_ACTION) } +{ YDVAR(2, VAR_ACCESS_CONTROL_TAG) } YY_BREAK case 258: YY_RULE_SETUP #line 473 "util/configlexer.lex" -{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_DATA) } +{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_ACTION) } YY_BREAK case 259: YY_RULE_SETUP #line 474 "util/configlexer.lex" -{ YDVAR(2, VAR_ACCESS_CONTROL_VIEW) } +{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_DATA) } YY_BREAK case 260: YY_RULE_SETUP #line 475 "util/configlexer.lex" -{ YDVAR(2, VAR_INTERFACE_TAG) } +{ YDVAR(2, VAR_ACCESS_CONTROL_VIEW) } YY_BREAK case 261: YY_RULE_SETUP #line 476 "util/configlexer.lex" -{ YDVAR(3, VAR_INTERFACE_TAG_ACTION) } +{ YDVAR(2, VAR_INTERFACE_TAG) } YY_BREAK case 262: YY_RULE_SETUP #line 477 "util/configlexer.lex" -{ YDVAR(3, VAR_INTERFACE_TAG_DATA) } +{ YDVAR(3, VAR_INTERFACE_TAG_ACTION) } YY_BREAK case 263: YY_RULE_SETUP #line 478 "util/configlexer.lex" -{ YDVAR(2, VAR_INTERFACE_VIEW) } +{ YDVAR(3, VAR_INTERFACE_TAG_DATA) } YY_BREAK case 264: YY_RULE_SETUP #line 479 "util/configlexer.lex" -{ YDVAR(3, VAR_LOCAL_ZONE_OVERRIDE) } +{ YDVAR(2, VAR_INTERFACE_VIEW) } YY_BREAK case 265: YY_RULE_SETUP #line 480 "util/configlexer.lex" -{ YDVAR(0, VAR_DNSTAP) } +{ YDVAR(3, VAR_LOCAL_ZONE_OVERRIDE) } YY_BREAK case 266: YY_RULE_SETUP #line 481 "util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_ENABLE) } +{ YDVAR(0, VAR_DNSTAP) } YY_BREAK case 267: YY_RULE_SETUP #line 482 "util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_BIDIRECTIONAL) } +{ YDVAR(1, VAR_DNSTAP_ENABLE) } YY_BREAK case 268: YY_RULE_SETUP #line 483 "util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_SOCKET_PATH) } +{ YDVAR(1, VAR_DNSTAP_BIDIRECTIONAL) } YY_BREAK case 269: YY_RULE_SETUP #line 484 "util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_IP) } +{ YDVAR(1, VAR_DNSTAP_SOCKET_PATH) } YY_BREAK case 270: YY_RULE_SETUP #line 485 "util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_TLS) } +{ YDVAR(1, VAR_DNSTAP_IP) } YY_BREAK case 271: YY_RULE_SETUP #line 486 "util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_TLS_SERVER_NAME) } +{ YDVAR(1, VAR_DNSTAP_TLS) } YY_BREAK case 272: YY_RULE_SETUP #line 487 "util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_TLS_CERT_BUNDLE) } +{ YDVAR(1, VAR_DNSTAP_TLS_SERVER_NAME) } YY_BREAK case 273: YY_RULE_SETUP #line 488 "util/configlexer.lex" -{ - YDVAR(1, VAR_DNSTAP_TLS_CLIENT_KEY_FILE) } +{ YDVAR(1, VAR_DNSTAP_TLS_CERT_BUNDLE) } YY_BREAK case 274: YY_RULE_SETUP -#line 490 "util/configlexer.lex" +#line 489 "util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_TLS_CLIENT_CERT_FILE) } + YDVAR(1, VAR_DNSTAP_TLS_CLIENT_KEY_FILE) } YY_BREAK case 275: YY_RULE_SETUP -#line 492 "util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_SEND_IDENTITY) } +#line 491 "util/configlexer.lex" +{ + YDVAR(1, VAR_DNSTAP_TLS_CLIENT_CERT_FILE) } YY_BREAK case 276: YY_RULE_SETUP #line 493 "util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_SEND_VERSION) } +{ YDVAR(1, VAR_DNSTAP_SEND_IDENTITY) } YY_BREAK case 277: YY_RULE_SETUP #line 494 "util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_IDENTITY) } +{ YDVAR(1, VAR_DNSTAP_SEND_VERSION) } YY_BREAK case 278: YY_RULE_SETUP #line 495 "util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_VERSION) } +{ YDVAR(1, VAR_DNSTAP_IDENTITY) } YY_BREAK case 279: YY_RULE_SETUP #line 496 "util/configlexer.lex" -{ - YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES) } +{ YDVAR(1, VAR_DNSTAP_VERSION) } YY_BREAK case 280: YY_RULE_SETUP -#line 498 "util/configlexer.lex" +#line 497 "util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES) } YY_BREAK case 281: YY_RULE_SETUP -#line 500 "util/configlexer.lex" +#line 499 "util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES) } YY_BREAK case 282: YY_RULE_SETUP -#line 502 "util/configlexer.lex" +#line 501 "util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES) } YY_BREAK case 283: YY_RULE_SETUP -#line 504 "util/configlexer.lex" +#line 503 "util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES) } YY_BREAK case 284: YY_RULE_SETUP -#line 506 "util/configlexer.lex" +#line 505 "util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) } YY_BREAK case 285: YY_RULE_SETUP -#line 508 "util/configlexer.lex" -{ YDVAR(1, VAR_DISABLE_DNSSEC_LAME_CHECK) } +#line 507 "util/configlexer.lex" +{ + YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) } YY_BREAK case 286: YY_RULE_SETUP #line 509 "util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT) } +{ YDVAR(1, VAR_DISABLE_DNSSEC_LAME_CHECK) } YY_BREAK case 287: YY_RULE_SETUP #line 510 "util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT_COOKIE) } +{ YDVAR(1, VAR_IP_RATELIMIT) } YY_BREAK case 288: YY_RULE_SETUP #line 511 "util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT) } +{ YDVAR(1, VAR_IP_RATELIMIT_COOKIE) } YY_BREAK case 289: YY_RULE_SETUP #line 512 "util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT_SLABS) } +{ YDVAR(1, VAR_RATELIMIT) } YY_BREAK case 290: YY_RULE_SETUP #line 513 "util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT_SLABS) } +{ YDVAR(1, VAR_IP_RATELIMIT_SLABS) } YY_BREAK case 291: YY_RULE_SETUP #line 514 "util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT_SIZE) } +{ YDVAR(1, VAR_RATELIMIT_SLABS) } YY_BREAK case 292: YY_RULE_SETUP #line 515 "util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT_SIZE) } +{ YDVAR(1, VAR_IP_RATELIMIT_SIZE) } YY_BREAK case 293: YY_RULE_SETUP #line 516 "util/configlexer.lex" -{ YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) } +{ YDVAR(1, VAR_RATELIMIT_SIZE) } YY_BREAK case 294: YY_RULE_SETUP #line 517 "util/configlexer.lex" -{ YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) } +{ YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) } YY_BREAK case 295: YY_RULE_SETUP #line 518 "util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT_FACTOR) } +{ YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) } YY_BREAK case 296: YY_RULE_SETUP #line 519 "util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT_FACTOR) } +{ YDVAR(1, VAR_IP_RATELIMIT_FACTOR) } YY_BREAK case 297: YY_RULE_SETUP #line 520 "util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT_BACKOFF) } +{ YDVAR(1, VAR_RATELIMIT_FACTOR) } YY_BREAK case 298: YY_RULE_SETUP #line 521 "util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT_BACKOFF) } +{ YDVAR(1, VAR_IP_RATELIMIT_BACKOFF) } YY_BREAK case 299: YY_RULE_SETUP #line 522 "util/configlexer.lex" -{ YDVAR(1, VAR_OUTBOUND_MSG_RETRY) } +{ YDVAR(1, VAR_RATELIMIT_BACKOFF) } YY_BREAK case 300: YY_RULE_SETUP #line 523 "util/configlexer.lex" -{ YDVAR(1, VAR_MAX_SENT_COUNT) } +{ YDVAR(1, VAR_OUTBOUND_MSG_RETRY) } YY_BREAK case 301: YY_RULE_SETUP #line 524 "util/configlexer.lex" -{ YDVAR(1, VAR_MAX_QUERY_RESTARTS) } +{ YDVAR(1, VAR_MAX_SENT_COUNT) } YY_BREAK case 302: YY_RULE_SETUP #line 525 "util/configlexer.lex" -{ YDVAR(1, VAR_LOW_RTT) } +{ YDVAR(1, VAR_MAX_QUERY_RESTARTS) } YY_BREAK case 303: YY_RULE_SETUP #line 526 "util/configlexer.lex" -{ YDVAR(1, VAR_FAST_SERVER_NUM) } +{ YDVAR(1, VAR_LOW_RTT) } YY_BREAK case 304: YY_RULE_SETUP #line 527 "util/configlexer.lex" -{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } +{ YDVAR(1, VAR_FAST_SERVER_NUM) } YY_BREAK case 305: YY_RULE_SETUP @@ -6095,119 +6127,119 @@ YY_RULE_SETUP case 307: YY_RULE_SETUP #line 530 "util/configlexer.lex" -{ YDVAR(2, VAR_RESPONSE_IP_TAG) } +{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } YY_BREAK case 308: YY_RULE_SETUP #line 531 "util/configlexer.lex" -{ YDVAR(2, VAR_RESPONSE_IP) } +{ YDVAR(2, VAR_RESPONSE_IP_TAG) } YY_BREAK case 309: YY_RULE_SETUP #line 532 "util/configlexer.lex" -{ YDVAR(2, VAR_RESPONSE_IP_DATA) } +{ YDVAR(2, VAR_RESPONSE_IP) } YY_BREAK case 310: YY_RULE_SETUP #line 533 "util/configlexer.lex" -{ YDVAR(0, VAR_DNSCRYPT) } +{ YDVAR(2, VAR_RESPONSE_IP_DATA) } YY_BREAK case 311: YY_RULE_SETUP #line 534 "util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_ENABLE) } +{ YDVAR(0, VAR_DNSCRYPT) } YY_BREAK case 312: YY_RULE_SETUP #line 535 "util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PORT) } +{ YDVAR(1, VAR_DNSCRYPT_ENABLE) } YY_BREAK case 313: YY_RULE_SETUP #line 536 "util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PROVIDER) } +{ YDVAR(1, VAR_DNSCRYPT_PORT) } YY_BREAK case 314: YY_RULE_SETUP #line 537 "util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_SECRET_KEY) } +{ YDVAR(1, VAR_DNSCRYPT_PROVIDER) } YY_BREAK case 315: YY_RULE_SETUP #line 538 "util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT) } +{ YDVAR(1, VAR_DNSCRYPT_SECRET_KEY) } YY_BREAK case 316: YY_RULE_SETUP #line 539 "util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT_ROTATED) } +{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT) } YY_BREAK case 317: YY_RULE_SETUP #line 540 "util/configlexer.lex" -{ - YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE) } +{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT_ROTATED) } YY_BREAK case 318: YY_RULE_SETUP -#line 542 "util/configlexer.lex" +#line 541 "util/configlexer.lex" { - YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS) } + YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE) } YY_BREAK case 319: YY_RULE_SETUP -#line 544 "util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SIZE) } +#line 543 "util/configlexer.lex" +{ + YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS) } YY_BREAK case 320: YY_RULE_SETUP #line 545 "util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SLABS) } +{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SIZE) } YY_BREAK case 321: YY_RULE_SETUP #line 546 "util/configlexer.lex" -{ YDVAR(1, VAR_PAD_RESPONSES) } +{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SLABS) } YY_BREAK case 322: YY_RULE_SETUP #line 547 "util/configlexer.lex" -{ YDVAR(1, VAR_PAD_RESPONSES_BLOCK_SIZE) } +{ YDVAR(1, VAR_PAD_RESPONSES) } YY_BREAK case 323: YY_RULE_SETUP #line 548 "util/configlexer.lex" -{ YDVAR(1, VAR_PAD_QUERIES) } +{ YDVAR(1, VAR_PAD_RESPONSES_BLOCK_SIZE) } YY_BREAK case 324: YY_RULE_SETUP #line 549 "util/configlexer.lex" -{ YDVAR(1, VAR_PAD_QUERIES_BLOCK_SIZE) } +{ YDVAR(1, VAR_PAD_QUERIES) } YY_BREAK case 325: YY_RULE_SETUP #line 550 "util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_ENABLED) } +{ YDVAR(1, VAR_PAD_QUERIES_BLOCK_SIZE) } YY_BREAK case 326: YY_RULE_SETUP #line 551 "util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_IGNORE_BOGUS) } +{ YDVAR(1, VAR_IPSECMOD_ENABLED) } YY_BREAK case 327: YY_RULE_SETUP #line 552 "util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_HOOK) } +{ YDVAR(1, VAR_IPSECMOD_IGNORE_BOGUS) } YY_BREAK case 328: YY_RULE_SETUP #line 553 "util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_MAX_TTL) } +{ YDVAR(1, VAR_IPSECMOD_HOOK) } YY_BREAK case 329: YY_RULE_SETUP #line 554 "util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_WHITELIST) } +{ YDVAR(1, VAR_IPSECMOD_MAX_TTL) } YY_BREAK case 330: YY_RULE_SETUP @@ -6217,148 +6249,163 @@ YY_RULE_SETUP case 331: YY_RULE_SETUP #line 556 "util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_STRICT) } +{ YDVAR(1, VAR_IPSECMOD_WHITELIST) } YY_BREAK case 332: YY_RULE_SETUP #line 557 "util/configlexer.lex" -{ YDVAR(0, VAR_CACHEDB) } +{ YDVAR(1, VAR_IPSECMOD_STRICT) } YY_BREAK case 333: YY_RULE_SETUP #line 558 "util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_BACKEND) } +{ YDVAR(0, VAR_CACHEDB) } YY_BREAK case 334: YY_RULE_SETUP #line 559 "util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_SECRETSEED) } +{ YDVAR(1, VAR_CACHEDB_BACKEND) } YY_BREAK case 335: YY_RULE_SETUP #line 560 "util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISHOST) } +{ YDVAR(1, VAR_CACHEDB_SECRETSEED) } YY_BREAK case 336: YY_RULE_SETUP #line 561 "util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISPORT) } +{ YDVAR(1, VAR_CACHEDB_NO_STORE) } YY_BREAK case 337: YY_RULE_SETUP #line 562 "util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISPATH) } +{ YDVAR(1, VAR_CACHEDB_REDISHOST) } YY_BREAK case 338: YY_RULE_SETUP #line 563 "util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISPASSWORD) } +{ YDVAR(1, VAR_CACHEDB_REDISPORT) } YY_BREAK case 339: YY_RULE_SETUP #line 564 "util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISTIMEOUT) } +{ YDVAR(1, VAR_CACHEDB_REDISPATH) } YY_BREAK case 340: YY_RULE_SETUP #line 565 "util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISEXPIRERECORDS) } +{ YDVAR(1, VAR_CACHEDB_REDISPASSWORD) } YY_BREAK case 341: YY_RULE_SETUP #line 566 "util/configlexer.lex" -{ YDVAR(0, VAR_IPSET) } +{ YDVAR(1, VAR_CACHEDB_REDISTIMEOUT) } YY_BREAK case 342: YY_RULE_SETUP #line 567 "util/configlexer.lex" -{ YDVAR(1, VAR_IPSET_NAME_V4) } +{ YDVAR(1, VAR_CACHEDB_REDISEXPIRERECORDS) } YY_BREAK case 343: YY_RULE_SETUP #line 568 "util/configlexer.lex" -{ YDVAR(1, VAR_IPSET_NAME_V6) } +{ YDVAR(1, VAR_CACHEDB_REDISLOGICALDB) } YY_BREAK case 344: YY_RULE_SETUP #line 569 "util/configlexer.lex" -{ YDVAR(1, VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM) } +{ YDVAR(0, VAR_IPSET) } YY_BREAK case 345: YY_RULE_SETUP #line 570 "util/configlexer.lex" -{ YDVAR(2, VAR_TCP_CONNECTION_LIMIT) } +{ YDVAR(1, VAR_IPSET_NAME_V4) } YY_BREAK case 346: YY_RULE_SETUP #line 571 "util/configlexer.lex" -{ YDVAR(1, VAR_ANSWER_COOKIE ) } +{ YDVAR(1, VAR_IPSET_NAME_V6) } YY_BREAK case 347: YY_RULE_SETUP #line 572 "util/configlexer.lex" -{ YDVAR(1, VAR_COOKIE_SECRET) } +{ YDVAR(1, VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM) } YY_BREAK case 348: YY_RULE_SETUP #line 573 "util/configlexer.lex" -{ YDVAR(2, VAR_EDNS_CLIENT_STRING) } +{ YDVAR(2, VAR_TCP_CONNECTION_LIMIT) } YY_BREAK case 349: YY_RULE_SETUP #line 574 "util/configlexer.lex" -{ YDVAR(1, VAR_EDNS_CLIENT_STRING_OPCODE) } +{ YDVAR(1, VAR_ANSWER_COOKIE ) } YY_BREAK case 350: YY_RULE_SETUP #line 575 "util/configlexer.lex" -{ YDVAR(1, VAR_NSID ) } +{ YDVAR(1, VAR_COOKIE_SECRET) } YY_BREAK case 351: YY_RULE_SETUP #line 576 "util/configlexer.lex" -{ YDVAR(1, VAR_EDE ) } +{ YDVAR(2, VAR_EDNS_CLIENT_STRING) } YY_BREAK case 352: YY_RULE_SETUP #line 577 "util/configlexer.lex" -{ YDVAR(1, VAR_PROXY_PROTOCOL_PORT) } +{ YDVAR(1, VAR_EDNS_CLIENT_STRING_OPCODE) } YY_BREAK case 353: -/* rule 353 can match eol */ YY_RULE_SETUP #line 578 "util/configlexer.lex" +{ YDVAR(1, VAR_NSID ) } + YY_BREAK +case 354: +YY_RULE_SETUP +#line 579 "util/configlexer.lex" +{ YDVAR(1, VAR_EDE ) } + YY_BREAK +case 355: +YY_RULE_SETUP +#line 580 "util/configlexer.lex" +{ YDVAR(1, VAR_PROXY_PROTOCOL_PORT) } + YY_BREAK +case 356: +/* rule 356 can match eol */ +YY_RULE_SETUP +#line 581 "util/configlexer.lex" { LEXOUT(("NL\n")); cfg_parser->line++; } YY_BREAK /* Quoted strings. Strip leading and ending quotes */ -case 354: +case 357: YY_RULE_SETUP -#line 581 "util/configlexer.lex" +#line 584 "util/configlexer.lex" { BEGIN(quotedstring); LEXOUT(("QS ")); } YY_BREAK case YY_STATE_EOF(quotedstring): -#line 582 "util/configlexer.lex" +#line 585 "util/configlexer.lex" { yyerror("EOF inside quoted string"); if(--num_args == 0) { BEGIN(INITIAL); } else { BEGIN(val); } } YY_BREAK -case 355: +case 358: YY_RULE_SETUP -#line 587 "util/configlexer.lex" +#line 590 "util/configlexer.lex" { LEXOUT(("STR(%s) ", yytext)); yymore(); } YY_BREAK -case 356: -/* rule 356 can match eol */ +case 359: +/* rule 359 can match eol */ YY_RULE_SETUP -#line 588 "util/configlexer.lex" +#line 591 "util/configlexer.lex" { yyerror("newline inside quoted string, no end \""); cfg_parser->line++; BEGIN(INITIAL); } YY_BREAK -case 357: +case 360: YY_RULE_SETUP -#line 590 "util/configlexer.lex" +#line 593 "util/configlexer.lex" { LEXOUT(("QE ")); if(--num_args == 0) { BEGIN(INITIAL); } @@ -6371,34 +6418,34 @@ YY_RULE_SETUP } YY_BREAK /* Single Quoted strings. Strip leading and ending quotes */ -case 358: +case 361: YY_RULE_SETUP -#line 602 "util/configlexer.lex" +#line 605 "util/configlexer.lex" { BEGIN(singlequotedstr); LEXOUT(("SQS ")); } YY_BREAK case YY_STATE_EOF(singlequotedstr): -#line 603 "util/configlexer.lex" +#line 606 "util/configlexer.lex" { yyerror("EOF inside quoted string"); if(--num_args == 0) { BEGIN(INITIAL); } else { BEGIN(val); } } YY_BREAK -case 359: +case 362: YY_RULE_SETUP -#line 608 "util/configlexer.lex" +#line 611 "util/configlexer.lex" { LEXOUT(("STR(%s) ", yytext)); yymore(); } YY_BREAK -case 360: -/* rule 360 can match eol */ +case 363: +/* rule 363 can match eol */ YY_RULE_SETUP -#line 609 "util/configlexer.lex" +#line 612 "util/configlexer.lex" { yyerror("newline inside quoted string, no end '"); cfg_parser->line++; BEGIN(INITIAL); } YY_BREAK -case 361: +case 364: YY_RULE_SETUP -#line 611 "util/configlexer.lex" +#line 614 "util/configlexer.lex" { LEXOUT(("SQE ")); if(--num_args == 0) { BEGIN(INITIAL); } @@ -6411,38 +6458,38 @@ YY_RULE_SETUP } YY_BREAK /* include: directive */ -case 362: +case 365: YY_RULE_SETUP -#line 623 "util/configlexer.lex" +#line 626 "util/configlexer.lex" { LEXOUT(("v(%s) ", yytext)); inc_prev = YYSTATE; BEGIN(include); } YY_BREAK case YY_STATE_EOF(include): -#line 625 "util/configlexer.lex" +#line 628 "util/configlexer.lex" { yyerror("EOF inside include directive"); BEGIN(inc_prev); } YY_BREAK -case 363: -YY_RULE_SETUP -#line 629 "util/configlexer.lex" -{ LEXOUT(("ISP ")); /* ignore */ } - YY_BREAK -case 364: -/* rule 364 can match eol */ -YY_RULE_SETUP -#line 630 "util/configlexer.lex" -{ LEXOUT(("NL\n")); cfg_parser->line++;} - YY_BREAK -case 365: -YY_RULE_SETUP -#line 631 "util/configlexer.lex" -{ LEXOUT(("IQS ")); BEGIN(include_quoted); } - YY_BREAK case 366: YY_RULE_SETUP #line 632 "util/configlexer.lex" +{ LEXOUT(("ISP ")); /* ignore */ } + YY_BREAK +case 367: +/* rule 367 can match eol */ +YY_RULE_SETUP +#line 633 "util/configlexer.lex" +{ LEXOUT(("NL\n")); cfg_parser->line++;} + YY_BREAK +case 368: +YY_RULE_SETUP +#line 634 "util/configlexer.lex" +{ LEXOUT(("IQS ")); BEGIN(include_quoted); } + YY_BREAK +case 369: +YY_RULE_SETUP +#line 635 "util/configlexer.lex" { LEXOUT(("Iunquotedstr(%s) ", yytext)); config_start_include_glob(yytext, 0); @@ -6450,27 +6497,27 @@ YY_RULE_SETUP } YY_BREAK case YY_STATE_EOF(include_quoted): -#line 637 "util/configlexer.lex" +#line 640 "util/configlexer.lex" { yyerror("EOF inside quoted string"); BEGIN(inc_prev); } YY_BREAK -case 367: +case 370: YY_RULE_SETUP -#line 641 "util/configlexer.lex" +#line 644 "util/configlexer.lex" { LEXOUT(("ISTR(%s) ", yytext)); yymore(); } YY_BREAK -case 368: -/* rule 368 can match eol */ +case 371: +/* rule 371 can match eol */ YY_RULE_SETUP -#line 642 "util/configlexer.lex" +#line 645 "util/configlexer.lex" { yyerror("newline before \" in include name"); cfg_parser->line++; BEGIN(inc_prev); } YY_BREAK -case 369: +case 372: YY_RULE_SETUP -#line 644 "util/configlexer.lex" +#line 647 "util/configlexer.lex" { LEXOUT(("IQE ")); yytext[yyleng - 1] = '\0'; @@ -6480,7 +6527,7 @@ YY_RULE_SETUP YY_BREAK case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(val): -#line 650 "util/configlexer.lex" +#line 653 "util/configlexer.lex" { LEXOUT(("LEXEOF ")); yy_set_bol(1); /* Set beginning of line, so "^" rules match. */ @@ -6495,39 +6542,39 @@ case YY_STATE_EOF(val): } YY_BREAK /* include-toplevel: directive */ -case 370: +case 373: YY_RULE_SETUP -#line 664 "util/configlexer.lex" +#line 667 "util/configlexer.lex" { LEXOUT(("v(%s) ", yytext)); inc_prev = YYSTATE; BEGIN(include_toplevel); } YY_BREAK case YY_STATE_EOF(include_toplevel): -#line 667 "util/configlexer.lex" +#line 670 "util/configlexer.lex" { yyerror("EOF inside include_toplevel directive"); BEGIN(inc_prev); } YY_BREAK -case 371: -YY_RULE_SETUP -#line 671 "util/configlexer.lex" -{ LEXOUT(("ITSP ")); /* ignore */ } - YY_BREAK -case 372: -/* rule 372 can match eol */ -YY_RULE_SETUP -#line 672 "util/configlexer.lex" -{ LEXOUT(("NL\n")); cfg_parser->line++; } - YY_BREAK -case 373: -YY_RULE_SETUP -#line 673 "util/configlexer.lex" -{ LEXOUT(("ITQS ")); BEGIN(include_toplevel_quoted); } - YY_BREAK case 374: YY_RULE_SETUP #line 674 "util/configlexer.lex" +{ LEXOUT(("ITSP ")); /* ignore */ } + YY_BREAK +case 375: +/* rule 375 can match eol */ +YY_RULE_SETUP +#line 675 "util/configlexer.lex" +{ LEXOUT(("NL\n")); cfg_parser->line++; } + YY_BREAK +case 376: +YY_RULE_SETUP +#line 676 "util/configlexer.lex" +{ LEXOUT(("ITQS ")); BEGIN(include_toplevel_quoted); } + YY_BREAK +case 377: +YY_RULE_SETUP +#line 677 "util/configlexer.lex" { LEXOUT(("ITunquotedstr(%s) ", yytext)); config_start_include_glob(yytext, 1); @@ -6536,29 +6583,29 @@ YY_RULE_SETUP } YY_BREAK case YY_STATE_EOF(include_toplevel_quoted): -#line 680 "util/configlexer.lex" +#line 683 "util/configlexer.lex" { yyerror("EOF inside quoted string"); BEGIN(inc_prev); } YY_BREAK -case 375: +case 378: YY_RULE_SETUP -#line 684 "util/configlexer.lex" +#line 687 "util/configlexer.lex" { LEXOUT(("ITSTR(%s) ", yytext)); yymore(); } YY_BREAK -case 376: -/* rule 376 can match eol */ +case 379: +/* rule 379 can match eol */ YY_RULE_SETUP -#line 685 "util/configlexer.lex" +#line 688 "util/configlexer.lex" { yyerror("newline before \" in include name"); cfg_parser->line++; BEGIN(inc_prev); } YY_BREAK -case 377: +case 380: YY_RULE_SETUP -#line 689 "util/configlexer.lex" +#line 692 "util/configlexer.lex" { LEXOUT(("ITQE ")); yytext[yyleng - 1] = '\0'; @@ -6567,33 +6614,33 @@ YY_RULE_SETUP return (VAR_FORCE_TOPLEVEL); } YY_BREAK -case 378: +case 381: YY_RULE_SETUP -#line 697 "util/configlexer.lex" +#line 700 "util/configlexer.lex" { LEXOUT(("unquotedstr(%s) ", yytext)); if(--num_args == 0) { BEGIN(INITIAL); } yylval.str = strdup(yytext); return STRING_ARG; } YY_BREAK -case 379: +case 382: YY_RULE_SETUP -#line 701 "util/configlexer.lex" +#line 704 "util/configlexer.lex" { ub_c_error_msg("unknown keyword '%s'", yytext); } YY_BREAK -case 380: +case 383: YY_RULE_SETUP -#line 705 "util/configlexer.lex" +#line 708 "util/configlexer.lex" { ub_c_error_msg("stray '%s'", yytext); } YY_BREAK -case 381: +case 384: YY_RULE_SETUP -#line 709 "util/configlexer.lex" +#line 712 "util/configlexer.lex" ECHO; YY_BREAK -#line 6594 "" +#line 6641 "" case YY_END_OF_BUFFER: { @@ -6888,7 +6935,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 >= 3778 ) + if ( yy_current_state >= 3807 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; @@ -6916,11 +6963,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 >= 3778 ) + if ( yy_current_state >= 3807 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; - yy_is_jam = (yy_current_state == 3777); + yy_is_jam = (yy_current_state == 3806); return yy_is_jam ? 0 : yy_current_state; } @@ -7559,6 +7606,6 @@ void yyfree (void * ptr ) #define YYTABLES_NAME "yytables" -#line 709 "util/configlexer.lex" +#line 712 "util/configlexer.lex" diff --git a/util/configlexer.lex b/util/configlexer.lex index 3fcdfa62e033..fdc267434c7b 100644 --- a/util/configlexer.lex +++ b/util/configlexer.lex @@ -403,6 +403,7 @@ val-clean-additional{COLON} { YDVAR(1, VAR_VAL_CLEAN_ADDITIONAL) } val-permissive-mode{COLON} { YDVAR(1, VAR_VAL_PERMISSIVE_MODE) } aggressive-nsec{COLON} { YDVAR(1, VAR_AGGRESSIVE_NSEC) } ignore-cd-flag{COLON} { YDVAR(1, VAR_IGNORE_CD_FLAG) } +disable-edns-do{COLON} { YDVAR(1, VAR_DISABLE_EDNS_DO) } serve-expired{COLON} { YDVAR(1, VAR_SERVE_EXPIRED) } serve-expired-ttl{COLON} { YDVAR(1, VAR_SERVE_EXPIRED_TTL) } serve-expired-ttl-reset{COLON} { YDVAR(1, VAR_SERVE_EXPIRED_TTL_RESET) } @@ -557,12 +558,14 @@ ipsecmod-strict{COLON} { YDVAR(1, VAR_IPSECMOD_STRICT) } cachedb{COLON} { YDVAR(0, VAR_CACHEDB) } backend{COLON} { YDVAR(1, VAR_CACHEDB_BACKEND) } secret-seed{COLON} { YDVAR(1, VAR_CACHEDB_SECRETSEED) } +cachedb-no-store{COLON} { YDVAR(1, VAR_CACHEDB_NO_STORE) } redis-server-host{COLON} { YDVAR(1, VAR_CACHEDB_REDISHOST) } redis-server-port{COLON} { YDVAR(1, VAR_CACHEDB_REDISPORT) } redis-server-path{COLON} { YDVAR(1, VAR_CACHEDB_REDISPATH) } redis-server-password{COLON} { YDVAR(1, VAR_CACHEDB_REDISPASSWORD) } redis-timeout{COLON} { YDVAR(1, VAR_CACHEDB_REDISTIMEOUT) } redis-expire-records{COLON} { YDVAR(1, VAR_CACHEDB_REDISEXPIRERECORDS) } +redis-logical-db{COLON} { YDVAR(1, VAR_CACHEDB_REDISLOGICALDB) } ipset{COLON} { YDVAR(0, VAR_IPSET) } name-v4{COLON} { YDVAR(1, VAR_IPSET_NAME_V4) } name-v6{COLON} { YDVAR(1, VAR_IPSET_NAME_V6) } diff --git a/util/configparser.c b/util/configparser.c index b6271f12ab35..7b7d819b2aac 100644 --- a/util/configparser.c +++ b/util/configparser.c @@ -414,435 +414,441 @@ enum yysymbol_kind_t YYSYMBOL_VAR_CACHEDB_REDISEXPIRERECORDS = 285, /* VAR_CACHEDB_REDISEXPIRERECORDS */ YYSYMBOL_VAR_CACHEDB_REDISPATH = 286, /* VAR_CACHEDB_REDISPATH */ YYSYMBOL_VAR_CACHEDB_REDISPASSWORD = 287, /* VAR_CACHEDB_REDISPASSWORD */ - YYSYMBOL_VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 288, /* VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM */ - YYSYMBOL_VAR_FOR_UPSTREAM = 289, /* VAR_FOR_UPSTREAM */ - YYSYMBOL_VAR_AUTH_ZONE = 290, /* VAR_AUTH_ZONE */ - YYSYMBOL_VAR_ZONEFILE = 291, /* VAR_ZONEFILE */ - YYSYMBOL_VAR_MASTER = 292, /* VAR_MASTER */ - YYSYMBOL_VAR_URL = 293, /* VAR_URL */ - YYSYMBOL_VAR_FOR_DOWNSTREAM = 294, /* VAR_FOR_DOWNSTREAM */ - YYSYMBOL_VAR_FALLBACK_ENABLED = 295, /* VAR_FALLBACK_ENABLED */ - YYSYMBOL_VAR_TLS_ADDITIONAL_PORT = 296, /* VAR_TLS_ADDITIONAL_PORT */ - YYSYMBOL_VAR_LOW_RTT = 297, /* VAR_LOW_RTT */ - YYSYMBOL_VAR_LOW_RTT_PERMIL = 298, /* VAR_LOW_RTT_PERMIL */ - YYSYMBOL_VAR_FAST_SERVER_PERMIL = 299, /* VAR_FAST_SERVER_PERMIL */ - YYSYMBOL_VAR_FAST_SERVER_NUM = 300, /* VAR_FAST_SERVER_NUM */ - YYSYMBOL_VAR_ALLOW_NOTIFY = 301, /* VAR_ALLOW_NOTIFY */ - YYSYMBOL_VAR_TLS_WIN_CERT = 302, /* VAR_TLS_WIN_CERT */ - YYSYMBOL_VAR_TCP_CONNECTION_LIMIT = 303, /* VAR_TCP_CONNECTION_LIMIT */ - YYSYMBOL_VAR_ANSWER_COOKIE = 304, /* VAR_ANSWER_COOKIE */ - YYSYMBOL_VAR_COOKIE_SECRET = 305, /* VAR_COOKIE_SECRET */ - YYSYMBOL_VAR_IP_RATELIMIT_COOKIE = 306, /* VAR_IP_RATELIMIT_COOKIE */ - YYSYMBOL_VAR_FORWARD_NO_CACHE = 307, /* VAR_FORWARD_NO_CACHE */ - YYSYMBOL_VAR_STUB_NO_CACHE = 308, /* VAR_STUB_NO_CACHE */ - YYSYMBOL_VAR_LOG_SERVFAIL = 309, /* VAR_LOG_SERVFAIL */ - YYSYMBOL_VAR_DENY_ANY = 310, /* VAR_DENY_ANY */ - YYSYMBOL_VAR_UNKNOWN_SERVER_TIME_LIMIT = 311, /* VAR_UNKNOWN_SERVER_TIME_LIMIT */ - YYSYMBOL_VAR_LOG_TAG_QUERYREPLY = 312, /* VAR_LOG_TAG_QUERYREPLY */ - YYSYMBOL_VAR_STREAM_WAIT_SIZE = 313, /* VAR_STREAM_WAIT_SIZE */ - YYSYMBOL_VAR_TLS_CIPHERS = 314, /* VAR_TLS_CIPHERS */ - YYSYMBOL_VAR_TLS_CIPHERSUITES = 315, /* VAR_TLS_CIPHERSUITES */ - YYSYMBOL_VAR_TLS_USE_SNI = 316, /* VAR_TLS_USE_SNI */ - YYSYMBOL_VAR_IPSET = 317, /* VAR_IPSET */ - YYSYMBOL_VAR_IPSET_NAME_V4 = 318, /* VAR_IPSET_NAME_V4 */ - YYSYMBOL_VAR_IPSET_NAME_V6 = 319, /* VAR_IPSET_NAME_V6 */ - YYSYMBOL_VAR_TLS_SESSION_TICKET_KEYS = 320, /* VAR_TLS_SESSION_TICKET_KEYS */ - YYSYMBOL_VAR_RPZ = 321, /* VAR_RPZ */ - YYSYMBOL_VAR_TAGS = 322, /* VAR_TAGS */ - YYSYMBOL_VAR_RPZ_ACTION_OVERRIDE = 323, /* VAR_RPZ_ACTION_OVERRIDE */ - YYSYMBOL_VAR_RPZ_CNAME_OVERRIDE = 324, /* VAR_RPZ_CNAME_OVERRIDE */ - YYSYMBOL_VAR_RPZ_LOG = 325, /* VAR_RPZ_LOG */ - YYSYMBOL_VAR_RPZ_LOG_NAME = 326, /* VAR_RPZ_LOG_NAME */ - YYSYMBOL_VAR_DYNLIB = 327, /* VAR_DYNLIB */ - YYSYMBOL_VAR_DYNLIB_FILE = 328, /* VAR_DYNLIB_FILE */ - YYSYMBOL_VAR_EDNS_CLIENT_STRING = 329, /* VAR_EDNS_CLIENT_STRING */ - YYSYMBOL_VAR_EDNS_CLIENT_STRING_OPCODE = 330, /* VAR_EDNS_CLIENT_STRING_OPCODE */ - YYSYMBOL_VAR_NSID = 331, /* VAR_NSID */ - YYSYMBOL_VAR_ZONEMD_PERMISSIVE_MODE = 332, /* VAR_ZONEMD_PERMISSIVE_MODE */ - YYSYMBOL_VAR_ZONEMD_CHECK = 333, /* VAR_ZONEMD_CHECK */ - YYSYMBOL_VAR_ZONEMD_REJECT_ABSENCE = 334, /* VAR_ZONEMD_REJECT_ABSENCE */ - YYSYMBOL_VAR_RPZ_SIGNAL_NXDOMAIN_RA = 335, /* VAR_RPZ_SIGNAL_NXDOMAIN_RA */ - YYSYMBOL_VAR_INTERFACE_AUTOMATIC_PORTS = 336, /* VAR_INTERFACE_AUTOMATIC_PORTS */ - YYSYMBOL_VAR_EDE = 337, /* VAR_EDE */ - YYSYMBOL_VAR_INTERFACE_ACTION = 338, /* VAR_INTERFACE_ACTION */ - YYSYMBOL_VAR_INTERFACE_VIEW = 339, /* VAR_INTERFACE_VIEW */ - YYSYMBOL_VAR_INTERFACE_TAG = 340, /* VAR_INTERFACE_TAG */ - YYSYMBOL_VAR_INTERFACE_TAG_ACTION = 341, /* VAR_INTERFACE_TAG_ACTION */ - YYSYMBOL_VAR_INTERFACE_TAG_DATA = 342, /* VAR_INTERFACE_TAG_DATA */ - YYSYMBOL_VAR_PROXY_PROTOCOL_PORT = 343, /* VAR_PROXY_PROTOCOL_PORT */ - YYSYMBOL_VAR_STATISTICS_INHIBIT_ZERO = 344, /* VAR_STATISTICS_INHIBIT_ZERO */ - YYSYMBOL_VAR_HARDEN_UNKNOWN_ADDITIONAL = 345, /* VAR_HARDEN_UNKNOWN_ADDITIONAL */ - YYSYMBOL_YYACCEPT = 346, /* $accept */ - YYSYMBOL_toplevelvars = 347, /* toplevelvars */ - YYSYMBOL_toplevelvar = 348, /* toplevelvar */ - YYSYMBOL_force_toplevel = 349, /* force_toplevel */ - YYSYMBOL_serverstart = 350, /* serverstart */ - YYSYMBOL_contents_server = 351, /* contents_server */ - YYSYMBOL_content_server = 352, /* content_server */ - YYSYMBOL_stubstart = 353, /* stubstart */ - YYSYMBOL_contents_stub = 354, /* contents_stub */ - YYSYMBOL_content_stub = 355, /* content_stub */ - YYSYMBOL_forwardstart = 356, /* forwardstart */ - YYSYMBOL_contents_forward = 357, /* contents_forward */ - YYSYMBOL_content_forward = 358, /* content_forward */ - YYSYMBOL_viewstart = 359, /* viewstart */ - YYSYMBOL_contents_view = 360, /* contents_view */ - YYSYMBOL_content_view = 361, /* content_view */ - YYSYMBOL_authstart = 362, /* authstart */ - YYSYMBOL_contents_auth = 363, /* contents_auth */ - YYSYMBOL_content_auth = 364, /* content_auth */ - YYSYMBOL_rpz_tag = 365, /* rpz_tag */ - YYSYMBOL_rpz_action_override = 366, /* rpz_action_override */ - YYSYMBOL_rpz_cname_override = 367, /* rpz_cname_override */ - YYSYMBOL_rpz_log = 368, /* rpz_log */ - YYSYMBOL_rpz_log_name = 369, /* rpz_log_name */ - YYSYMBOL_rpz_signal_nxdomain_ra = 370, /* rpz_signal_nxdomain_ra */ - YYSYMBOL_rpzstart = 371, /* rpzstart */ - YYSYMBOL_contents_rpz = 372, /* contents_rpz */ - YYSYMBOL_content_rpz = 373, /* content_rpz */ - YYSYMBOL_server_num_threads = 374, /* server_num_threads */ - YYSYMBOL_server_verbosity = 375, /* server_verbosity */ - YYSYMBOL_server_statistics_interval = 376, /* server_statistics_interval */ - YYSYMBOL_server_statistics_cumulative = 377, /* server_statistics_cumulative */ - YYSYMBOL_server_extended_statistics = 378, /* server_extended_statistics */ - YYSYMBOL_server_statistics_inhibit_zero = 379, /* server_statistics_inhibit_zero */ - YYSYMBOL_server_shm_enable = 380, /* server_shm_enable */ - YYSYMBOL_server_shm_key = 381, /* server_shm_key */ - YYSYMBOL_server_port = 382, /* server_port */ - YYSYMBOL_server_send_client_subnet = 383, /* server_send_client_subnet */ - YYSYMBOL_server_client_subnet_zone = 384, /* server_client_subnet_zone */ - YYSYMBOL_server_client_subnet_always_forward = 385, /* server_client_subnet_always_forward */ - YYSYMBOL_server_client_subnet_opcode = 386, /* server_client_subnet_opcode */ - YYSYMBOL_server_max_client_subnet_ipv4 = 387, /* server_max_client_subnet_ipv4 */ - YYSYMBOL_server_max_client_subnet_ipv6 = 388, /* server_max_client_subnet_ipv6 */ - YYSYMBOL_server_min_client_subnet_ipv4 = 389, /* server_min_client_subnet_ipv4 */ - YYSYMBOL_server_min_client_subnet_ipv6 = 390, /* server_min_client_subnet_ipv6 */ - YYSYMBOL_server_max_ecs_tree_size_ipv4 = 391, /* server_max_ecs_tree_size_ipv4 */ - YYSYMBOL_server_max_ecs_tree_size_ipv6 = 392, /* server_max_ecs_tree_size_ipv6 */ - YYSYMBOL_server_interface = 393, /* server_interface */ - YYSYMBOL_server_outgoing_interface = 394, /* server_outgoing_interface */ - YYSYMBOL_server_outgoing_range = 395, /* server_outgoing_range */ - YYSYMBOL_server_outgoing_port_permit = 396, /* server_outgoing_port_permit */ - YYSYMBOL_server_outgoing_port_avoid = 397, /* server_outgoing_port_avoid */ - YYSYMBOL_server_outgoing_num_tcp = 398, /* server_outgoing_num_tcp */ - YYSYMBOL_server_incoming_num_tcp = 399, /* server_incoming_num_tcp */ - YYSYMBOL_server_interface_automatic = 400, /* server_interface_automatic */ - YYSYMBOL_server_interface_automatic_ports = 401, /* server_interface_automatic_ports */ - YYSYMBOL_server_do_ip4 = 402, /* server_do_ip4 */ - YYSYMBOL_server_do_ip6 = 403, /* server_do_ip6 */ - YYSYMBOL_server_do_nat64 = 404, /* server_do_nat64 */ - YYSYMBOL_server_do_udp = 405, /* server_do_udp */ - YYSYMBOL_server_do_tcp = 406, /* server_do_tcp */ - YYSYMBOL_server_prefer_ip4 = 407, /* server_prefer_ip4 */ - YYSYMBOL_server_prefer_ip6 = 408, /* server_prefer_ip6 */ - YYSYMBOL_server_tcp_mss = 409, /* server_tcp_mss */ - YYSYMBOL_server_outgoing_tcp_mss = 410, /* server_outgoing_tcp_mss */ - YYSYMBOL_server_tcp_idle_timeout = 411, /* server_tcp_idle_timeout */ - YYSYMBOL_server_max_reuse_tcp_queries = 412, /* server_max_reuse_tcp_queries */ - YYSYMBOL_server_tcp_reuse_timeout = 413, /* server_tcp_reuse_timeout */ - YYSYMBOL_server_tcp_auth_query_timeout = 414, /* server_tcp_auth_query_timeout */ - YYSYMBOL_server_tcp_keepalive = 415, /* server_tcp_keepalive */ - YYSYMBOL_server_tcp_keepalive_timeout = 416, /* server_tcp_keepalive_timeout */ - YYSYMBOL_server_sock_queue_timeout = 417, /* server_sock_queue_timeout */ - YYSYMBOL_server_tcp_upstream = 418, /* server_tcp_upstream */ - YYSYMBOL_server_udp_upstream_without_downstream = 419, /* server_udp_upstream_without_downstream */ - YYSYMBOL_server_ssl_upstream = 420, /* server_ssl_upstream */ - YYSYMBOL_server_ssl_service_key = 421, /* server_ssl_service_key */ - YYSYMBOL_server_ssl_service_pem = 422, /* server_ssl_service_pem */ - YYSYMBOL_server_ssl_port = 423, /* server_ssl_port */ - YYSYMBOL_server_tls_cert_bundle = 424, /* server_tls_cert_bundle */ - YYSYMBOL_server_tls_win_cert = 425, /* server_tls_win_cert */ - YYSYMBOL_server_tls_additional_port = 426, /* server_tls_additional_port */ - YYSYMBOL_server_tls_ciphers = 427, /* server_tls_ciphers */ - YYSYMBOL_server_tls_ciphersuites = 428, /* server_tls_ciphersuites */ - YYSYMBOL_server_tls_session_ticket_keys = 429, /* server_tls_session_ticket_keys */ - YYSYMBOL_server_tls_use_sni = 430, /* server_tls_use_sni */ - YYSYMBOL_server_https_port = 431, /* server_https_port */ - YYSYMBOL_server_http_endpoint = 432, /* server_http_endpoint */ - YYSYMBOL_server_http_max_streams = 433, /* server_http_max_streams */ - YYSYMBOL_server_http_query_buffer_size = 434, /* server_http_query_buffer_size */ - YYSYMBOL_server_http_response_buffer_size = 435, /* server_http_response_buffer_size */ - YYSYMBOL_server_http_nodelay = 436, /* server_http_nodelay */ - YYSYMBOL_server_http_notls_downstream = 437, /* server_http_notls_downstream */ - YYSYMBOL_server_use_systemd = 438, /* server_use_systemd */ - YYSYMBOL_server_do_daemonize = 439, /* server_do_daemonize */ - YYSYMBOL_server_use_syslog = 440, /* server_use_syslog */ - YYSYMBOL_server_log_time_ascii = 441, /* server_log_time_ascii */ - YYSYMBOL_server_log_queries = 442, /* server_log_queries */ - YYSYMBOL_server_log_replies = 443, /* server_log_replies */ - YYSYMBOL_server_log_tag_queryreply = 444, /* server_log_tag_queryreply */ - YYSYMBOL_server_log_servfail = 445, /* server_log_servfail */ - YYSYMBOL_server_log_local_actions = 446, /* server_log_local_actions */ - YYSYMBOL_server_chroot = 447, /* server_chroot */ - YYSYMBOL_server_username = 448, /* server_username */ - YYSYMBOL_server_directory = 449, /* server_directory */ - YYSYMBOL_server_logfile = 450, /* server_logfile */ - YYSYMBOL_server_pidfile = 451, /* server_pidfile */ - YYSYMBOL_server_root_hints = 452, /* server_root_hints */ - YYSYMBOL_server_dlv_anchor_file = 453, /* server_dlv_anchor_file */ - YYSYMBOL_server_dlv_anchor = 454, /* server_dlv_anchor */ - YYSYMBOL_server_auto_trust_anchor_file = 455, /* server_auto_trust_anchor_file */ - YYSYMBOL_server_trust_anchor_file = 456, /* server_trust_anchor_file */ - YYSYMBOL_server_trusted_keys_file = 457, /* server_trusted_keys_file */ - YYSYMBOL_server_trust_anchor = 458, /* server_trust_anchor */ - YYSYMBOL_server_trust_anchor_signaling = 459, /* server_trust_anchor_signaling */ - YYSYMBOL_server_root_key_sentinel = 460, /* server_root_key_sentinel */ - YYSYMBOL_server_domain_insecure = 461, /* server_domain_insecure */ - YYSYMBOL_server_hide_identity = 462, /* server_hide_identity */ - YYSYMBOL_server_hide_version = 463, /* server_hide_version */ - YYSYMBOL_server_hide_trustanchor = 464, /* server_hide_trustanchor */ - YYSYMBOL_server_hide_http_user_agent = 465, /* server_hide_http_user_agent */ - YYSYMBOL_server_identity = 466, /* server_identity */ - YYSYMBOL_server_version = 467, /* server_version */ - YYSYMBOL_server_http_user_agent = 468, /* server_http_user_agent */ - YYSYMBOL_server_nsid = 469, /* server_nsid */ - YYSYMBOL_server_so_rcvbuf = 470, /* server_so_rcvbuf */ - YYSYMBOL_server_so_sndbuf = 471, /* server_so_sndbuf */ - YYSYMBOL_server_so_reuseport = 472, /* server_so_reuseport */ - YYSYMBOL_server_ip_transparent = 473, /* server_ip_transparent */ - YYSYMBOL_server_ip_freebind = 474, /* server_ip_freebind */ - YYSYMBOL_server_ip_dscp = 475, /* server_ip_dscp */ - YYSYMBOL_server_stream_wait_size = 476, /* server_stream_wait_size */ - YYSYMBOL_server_edns_buffer_size = 477, /* server_edns_buffer_size */ - YYSYMBOL_server_msg_buffer_size = 478, /* server_msg_buffer_size */ - YYSYMBOL_server_msg_cache_size = 479, /* server_msg_cache_size */ - YYSYMBOL_server_msg_cache_slabs = 480, /* server_msg_cache_slabs */ - YYSYMBOL_server_num_queries_per_thread = 481, /* server_num_queries_per_thread */ - YYSYMBOL_server_jostle_timeout = 482, /* server_jostle_timeout */ - YYSYMBOL_server_delay_close = 483, /* server_delay_close */ - YYSYMBOL_server_udp_connect = 484, /* server_udp_connect */ - YYSYMBOL_server_unblock_lan_zones = 485, /* server_unblock_lan_zones */ - YYSYMBOL_server_insecure_lan_zones = 486, /* server_insecure_lan_zones */ - YYSYMBOL_server_rrset_cache_size = 487, /* server_rrset_cache_size */ - YYSYMBOL_server_rrset_cache_slabs = 488, /* server_rrset_cache_slabs */ - YYSYMBOL_server_infra_host_ttl = 489, /* server_infra_host_ttl */ - YYSYMBOL_server_infra_lame_ttl = 490, /* server_infra_lame_ttl */ - YYSYMBOL_server_infra_cache_numhosts = 491, /* server_infra_cache_numhosts */ - YYSYMBOL_server_infra_cache_lame_size = 492, /* server_infra_cache_lame_size */ - YYSYMBOL_server_infra_cache_slabs = 493, /* server_infra_cache_slabs */ - YYSYMBOL_server_infra_cache_min_rtt = 494, /* server_infra_cache_min_rtt */ - YYSYMBOL_server_infra_cache_max_rtt = 495, /* server_infra_cache_max_rtt */ - YYSYMBOL_server_infra_keep_probing = 496, /* server_infra_keep_probing */ - YYSYMBOL_server_target_fetch_policy = 497, /* server_target_fetch_policy */ - YYSYMBOL_server_harden_short_bufsize = 498, /* server_harden_short_bufsize */ - YYSYMBOL_server_harden_large_queries = 499, /* server_harden_large_queries */ - YYSYMBOL_server_harden_glue = 500, /* server_harden_glue */ - YYSYMBOL_server_harden_dnssec_stripped = 501, /* server_harden_dnssec_stripped */ - YYSYMBOL_server_harden_below_nxdomain = 502, /* server_harden_below_nxdomain */ - YYSYMBOL_server_harden_referral_path = 503, /* server_harden_referral_path */ - YYSYMBOL_server_harden_algo_downgrade = 504, /* server_harden_algo_downgrade */ - YYSYMBOL_server_harden_unknown_additional = 505, /* server_harden_unknown_additional */ - YYSYMBOL_server_use_caps_for_id = 506, /* server_use_caps_for_id */ - YYSYMBOL_server_caps_whitelist = 507, /* server_caps_whitelist */ - YYSYMBOL_server_private_address = 508, /* server_private_address */ - YYSYMBOL_server_private_domain = 509, /* server_private_domain */ - YYSYMBOL_server_prefetch = 510, /* server_prefetch */ - YYSYMBOL_server_prefetch_key = 511, /* server_prefetch_key */ - YYSYMBOL_server_deny_any = 512, /* server_deny_any */ - YYSYMBOL_server_unwanted_reply_threshold = 513, /* server_unwanted_reply_threshold */ - YYSYMBOL_server_do_not_query_address = 514, /* server_do_not_query_address */ - YYSYMBOL_server_do_not_query_localhost = 515, /* server_do_not_query_localhost */ - YYSYMBOL_server_access_control = 516, /* server_access_control */ - YYSYMBOL_server_interface_action = 517, /* server_interface_action */ - YYSYMBOL_server_module_conf = 518, /* server_module_conf */ - YYSYMBOL_server_val_override_date = 519, /* server_val_override_date */ - YYSYMBOL_server_val_sig_skew_min = 520, /* server_val_sig_skew_min */ - YYSYMBOL_server_val_sig_skew_max = 521, /* server_val_sig_skew_max */ - YYSYMBOL_server_val_max_restart = 522, /* server_val_max_restart */ - YYSYMBOL_server_cache_max_ttl = 523, /* server_cache_max_ttl */ - YYSYMBOL_server_cache_max_negative_ttl = 524, /* server_cache_max_negative_ttl */ - YYSYMBOL_server_cache_min_ttl = 525, /* server_cache_min_ttl */ - YYSYMBOL_server_bogus_ttl = 526, /* server_bogus_ttl */ - YYSYMBOL_server_val_clean_additional = 527, /* server_val_clean_additional */ - YYSYMBOL_server_val_permissive_mode = 528, /* server_val_permissive_mode */ - YYSYMBOL_server_aggressive_nsec = 529, /* server_aggressive_nsec */ - YYSYMBOL_server_ignore_cd_flag = 530, /* server_ignore_cd_flag */ - YYSYMBOL_server_serve_expired = 531, /* server_serve_expired */ - YYSYMBOL_server_serve_expired_ttl = 532, /* server_serve_expired_ttl */ - YYSYMBOL_server_serve_expired_ttl_reset = 533, /* server_serve_expired_ttl_reset */ - YYSYMBOL_server_serve_expired_reply_ttl = 534, /* server_serve_expired_reply_ttl */ - YYSYMBOL_server_serve_expired_client_timeout = 535, /* server_serve_expired_client_timeout */ - YYSYMBOL_server_ede_serve_expired = 536, /* server_ede_serve_expired */ - YYSYMBOL_server_serve_original_ttl = 537, /* server_serve_original_ttl */ - YYSYMBOL_server_fake_dsa = 538, /* server_fake_dsa */ - YYSYMBOL_server_fake_sha1 = 539, /* server_fake_sha1 */ - YYSYMBOL_server_val_log_level = 540, /* server_val_log_level */ - YYSYMBOL_server_val_nsec3_keysize_iterations = 541, /* server_val_nsec3_keysize_iterations */ - YYSYMBOL_server_zonemd_permissive_mode = 542, /* server_zonemd_permissive_mode */ - YYSYMBOL_server_add_holddown = 543, /* server_add_holddown */ - YYSYMBOL_server_del_holddown = 544, /* server_del_holddown */ - YYSYMBOL_server_keep_missing = 545, /* server_keep_missing */ - YYSYMBOL_server_permit_small_holddown = 546, /* server_permit_small_holddown */ - YYSYMBOL_server_key_cache_size = 547, /* server_key_cache_size */ - YYSYMBOL_server_key_cache_slabs = 548, /* server_key_cache_slabs */ - YYSYMBOL_server_neg_cache_size = 549, /* server_neg_cache_size */ - YYSYMBOL_server_local_zone = 550, /* server_local_zone */ - YYSYMBOL_server_local_data = 551, /* server_local_data */ - YYSYMBOL_server_local_data_ptr = 552, /* server_local_data_ptr */ - YYSYMBOL_server_minimal_responses = 553, /* server_minimal_responses */ - YYSYMBOL_server_rrset_roundrobin = 554, /* server_rrset_roundrobin */ - YYSYMBOL_server_unknown_server_time_limit = 555, /* server_unknown_server_time_limit */ - YYSYMBOL_server_max_udp_size = 556, /* server_max_udp_size */ - YYSYMBOL_server_dns64_prefix = 557, /* server_dns64_prefix */ - YYSYMBOL_server_dns64_synthall = 558, /* server_dns64_synthall */ - YYSYMBOL_server_dns64_ignore_aaaa = 559, /* server_dns64_ignore_aaaa */ - YYSYMBOL_server_nat64_prefix = 560, /* server_nat64_prefix */ - YYSYMBOL_server_define_tag = 561, /* server_define_tag */ - YYSYMBOL_server_local_zone_tag = 562, /* server_local_zone_tag */ - YYSYMBOL_server_access_control_tag = 563, /* server_access_control_tag */ - YYSYMBOL_server_access_control_tag_action = 564, /* server_access_control_tag_action */ - YYSYMBOL_server_access_control_tag_data = 565, /* server_access_control_tag_data */ - YYSYMBOL_server_local_zone_override = 566, /* server_local_zone_override */ - YYSYMBOL_server_access_control_view = 567, /* server_access_control_view */ - YYSYMBOL_server_interface_tag = 568, /* server_interface_tag */ - YYSYMBOL_server_interface_tag_action = 569, /* server_interface_tag_action */ - YYSYMBOL_server_interface_tag_data = 570, /* server_interface_tag_data */ - YYSYMBOL_server_interface_view = 571, /* server_interface_view */ - YYSYMBOL_server_response_ip_tag = 572, /* server_response_ip_tag */ - YYSYMBOL_server_ip_ratelimit = 573, /* server_ip_ratelimit */ - YYSYMBOL_server_ip_ratelimit_cookie = 574, /* server_ip_ratelimit_cookie */ - YYSYMBOL_server_ratelimit = 575, /* server_ratelimit */ - YYSYMBOL_server_ip_ratelimit_size = 576, /* server_ip_ratelimit_size */ - YYSYMBOL_server_ratelimit_size = 577, /* server_ratelimit_size */ - YYSYMBOL_server_ip_ratelimit_slabs = 578, /* server_ip_ratelimit_slabs */ - YYSYMBOL_server_ratelimit_slabs = 579, /* server_ratelimit_slabs */ - YYSYMBOL_server_ratelimit_for_domain = 580, /* server_ratelimit_for_domain */ - YYSYMBOL_server_ratelimit_below_domain = 581, /* server_ratelimit_below_domain */ - YYSYMBOL_server_ip_ratelimit_factor = 582, /* server_ip_ratelimit_factor */ - YYSYMBOL_server_ratelimit_factor = 583, /* server_ratelimit_factor */ - YYSYMBOL_server_ip_ratelimit_backoff = 584, /* server_ip_ratelimit_backoff */ - YYSYMBOL_server_ratelimit_backoff = 585, /* server_ratelimit_backoff */ - YYSYMBOL_server_outbound_msg_retry = 586, /* server_outbound_msg_retry */ - YYSYMBOL_server_max_sent_count = 587, /* server_max_sent_count */ - YYSYMBOL_server_max_query_restarts = 588, /* server_max_query_restarts */ - YYSYMBOL_server_low_rtt = 589, /* server_low_rtt */ - YYSYMBOL_server_fast_server_num = 590, /* server_fast_server_num */ - YYSYMBOL_server_fast_server_permil = 591, /* server_fast_server_permil */ - YYSYMBOL_server_qname_minimisation = 592, /* server_qname_minimisation */ - YYSYMBOL_server_qname_minimisation_strict = 593, /* server_qname_minimisation_strict */ - YYSYMBOL_server_pad_responses = 594, /* server_pad_responses */ - YYSYMBOL_server_pad_responses_block_size = 595, /* server_pad_responses_block_size */ - YYSYMBOL_server_pad_queries = 596, /* server_pad_queries */ - YYSYMBOL_server_pad_queries_block_size = 597, /* server_pad_queries_block_size */ - YYSYMBOL_server_ipsecmod_enabled = 598, /* server_ipsecmod_enabled */ - YYSYMBOL_server_ipsecmod_ignore_bogus = 599, /* server_ipsecmod_ignore_bogus */ - YYSYMBOL_server_ipsecmod_hook = 600, /* server_ipsecmod_hook */ - YYSYMBOL_server_ipsecmod_max_ttl = 601, /* server_ipsecmod_max_ttl */ - YYSYMBOL_server_ipsecmod_whitelist = 602, /* server_ipsecmod_whitelist */ - YYSYMBOL_server_ipsecmod_strict = 603, /* server_ipsecmod_strict */ - YYSYMBOL_server_edns_client_string = 604, /* server_edns_client_string */ - YYSYMBOL_server_edns_client_string_opcode = 605, /* server_edns_client_string_opcode */ - YYSYMBOL_server_ede = 606, /* server_ede */ - YYSYMBOL_server_proxy_protocol_port = 607, /* server_proxy_protocol_port */ - YYSYMBOL_stub_name = 608, /* stub_name */ - YYSYMBOL_stub_host = 609, /* stub_host */ - YYSYMBOL_stub_addr = 610, /* stub_addr */ - YYSYMBOL_stub_first = 611, /* stub_first */ - YYSYMBOL_stub_no_cache = 612, /* stub_no_cache */ - YYSYMBOL_stub_ssl_upstream = 613, /* stub_ssl_upstream */ - YYSYMBOL_stub_tcp_upstream = 614, /* stub_tcp_upstream */ - YYSYMBOL_stub_prime = 615, /* stub_prime */ - YYSYMBOL_forward_name = 616, /* forward_name */ - YYSYMBOL_forward_host = 617, /* forward_host */ - YYSYMBOL_forward_addr = 618, /* forward_addr */ - YYSYMBOL_forward_first = 619, /* forward_first */ - YYSYMBOL_forward_no_cache = 620, /* forward_no_cache */ - YYSYMBOL_forward_ssl_upstream = 621, /* forward_ssl_upstream */ - YYSYMBOL_forward_tcp_upstream = 622, /* forward_tcp_upstream */ - YYSYMBOL_auth_name = 623, /* auth_name */ - YYSYMBOL_auth_zonefile = 624, /* auth_zonefile */ - YYSYMBOL_auth_master = 625, /* auth_master */ - YYSYMBOL_auth_url = 626, /* auth_url */ - YYSYMBOL_auth_allow_notify = 627, /* auth_allow_notify */ - YYSYMBOL_auth_zonemd_check = 628, /* auth_zonemd_check */ - YYSYMBOL_auth_zonemd_reject_absence = 629, /* auth_zonemd_reject_absence */ - YYSYMBOL_auth_for_downstream = 630, /* auth_for_downstream */ - YYSYMBOL_auth_for_upstream = 631, /* auth_for_upstream */ - YYSYMBOL_auth_fallback_enabled = 632, /* auth_fallback_enabled */ - YYSYMBOL_view_name = 633, /* view_name */ - YYSYMBOL_view_local_zone = 634, /* view_local_zone */ - YYSYMBOL_view_response_ip = 635, /* view_response_ip */ - YYSYMBOL_view_response_ip_data = 636, /* view_response_ip_data */ - YYSYMBOL_view_local_data = 637, /* view_local_data */ - YYSYMBOL_view_local_data_ptr = 638, /* view_local_data_ptr */ - YYSYMBOL_view_first = 639, /* view_first */ - YYSYMBOL_rcstart = 640, /* rcstart */ - YYSYMBOL_contents_rc = 641, /* contents_rc */ - YYSYMBOL_content_rc = 642, /* content_rc */ - YYSYMBOL_rc_control_enable = 643, /* rc_control_enable */ - YYSYMBOL_rc_control_port = 644, /* rc_control_port */ - YYSYMBOL_rc_control_interface = 645, /* rc_control_interface */ - YYSYMBOL_rc_control_use_cert = 646, /* rc_control_use_cert */ - YYSYMBOL_rc_server_key_file = 647, /* rc_server_key_file */ - YYSYMBOL_rc_server_cert_file = 648, /* rc_server_cert_file */ - YYSYMBOL_rc_control_key_file = 649, /* rc_control_key_file */ - YYSYMBOL_rc_control_cert_file = 650, /* rc_control_cert_file */ - YYSYMBOL_dtstart = 651, /* dtstart */ - YYSYMBOL_contents_dt = 652, /* contents_dt */ - YYSYMBOL_content_dt = 653, /* content_dt */ - YYSYMBOL_dt_dnstap_enable = 654, /* dt_dnstap_enable */ - YYSYMBOL_dt_dnstap_bidirectional = 655, /* dt_dnstap_bidirectional */ - YYSYMBOL_dt_dnstap_socket_path = 656, /* dt_dnstap_socket_path */ - YYSYMBOL_dt_dnstap_ip = 657, /* dt_dnstap_ip */ - YYSYMBOL_dt_dnstap_tls = 658, /* dt_dnstap_tls */ - YYSYMBOL_dt_dnstap_tls_server_name = 659, /* dt_dnstap_tls_server_name */ - YYSYMBOL_dt_dnstap_tls_cert_bundle = 660, /* dt_dnstap_tls_cert_bundle */ - YYSYMBOL_dt_dnstap_tls_client_key_file = 661, /* dt_dnstap_tls_client_key_file */ - YYSYMBOL_dt_dnstap_tls_client_cert_file = 662, /* dt_dnstap_tls_client_cert_file */ - YYSYMBOL_dt_dnstap_send_identity = 663, /* dt_dnstap_send_identity */ - YYSYMBOL_dt_dnstap_send_version = 664, /* dt_dnstap_send_version */ - YYSYMBOL_dt_dnstap_identity = 665, /* dt_dnstap_identity */ - YYSYMBOL_dt_dnstap_version = 666, /* dt_dnstap_version */ - YYSYMBOL_dt_dnstap_log_resolver_query_messages = 667, /* dt_dnstap_log_resolver_query_messages */ - YYSYMBOL_dt_dnstap_log_resolver_response_messages = 668, /* dt_dnstap_log_resolver_response_messages */ - YYSYMBOL_dt_dnstap_log_client_query_messages = 669, /* dt_dnstap_log_client_query_messages */ - YYSYMBOL_dt_dnstap_log_client_response_messages = 670, /* dt_dnstap_log_client_response_messages */ - YYSYMBOL_dt_dnstap_log_forwarder_query_messages = 671, /* dt_dnstap_log_forwarder_query_messages */ - YYSYMBOL_dt_dnstap_log_forwarder_response_messages = 672, /* dt_dnstap_log_forwarder_response_messages */ - YYSYMBOL_pythonstart = 673, /* pythonstart */ - YYSYMBOL_contents_py = 674, /* contents_py */ - YYSYMBOL_content_py = 675, /* content_py */ - YYSYMBOL_py_script = 676, /* py_script */ - YYSYMBOL_dynlibstart = 677, /* dynlibstart */ - YYSYMBOL_contents_dl = 678, /* contents_dl */ - YYSYMBOL_content_dl = 679, /* content_dl */ - YYSYMBOL_dl_file = 680, /* dl_file */ - YYSYMBOL_server_disable_dnssec_lame_check = 681, /* server_disable_dnssec_lame_check */ - YYSYMBOL_server_log_identity = 682, /* server_log_identity */ - YYSYMBOL_server_response_ip = 683, /* server_response_ip */ - YYSYMBOL_server_response_ip_data = 684, /* server_response_ip_data */ - YYSYMBOL_dnscstart = 685, /* dnscstart */ - YYSYMBOL_contents_dnsc = 686, /* contents_dnsc */ - YYSYMBOL_content_dnsc = 687, /* content_dnsc */ - YYSYMBOL_dnsc_dnscrypt_enable = 688, /* dnsc_dnscrypt_enable */ - YYSYMBOL_dnsc_dnscrypt_port = 689, /* dnsc_dnscrypt_port */ - YYSYMBOL_dnsc_dnscrypt_provider = 690, /* dnsc_dnscrypt_provider */ - YYSYMBOL_dnsc_dnscrypt_provider_cert = 691, /* dnsc_dnscrypt_provider_cert */ - YYSYMBOL_dnsc_dnscrypt_provider_cert_rotated = 692, /* dnsc_dnscrypt_provider_cert_rotated */ - YYSYMBOL_dnsc_dnscrypt_secret_key = 693, /* dnsc_dnscrypt_secret_key */ - YYSYMBOL_dnsc_dnscrypt_shared_secret_cache_size = 694, /* dnsc_dnscrypt_shared_secret_cache_size */ - YYSYMBOL_dnsc_dnscrypt_shared_secret_cache_slabs = 695, /* dnsc_dnscrypt_shared_secret_cache_slabs */ - YYSYMBOL_dnsc_dnscrypt_nonce_cache_size = 696, /* dnsc_dnscrypt_nonce_cache_size */ - YYSYMBOL_dnsc_dnscrypt_nonce_cache_slabs = 697, /* dnsc_dnscrypt_nonce_cache_slabs */ - YYSYMBOL_cachedbstart = 698, /* cachedbstart */ - YYSYMBOL_contents_cachedb = 699, /* contents_cachedb */ - YYSYMBOL_content_cachedb = 700, /* content_cachedb */ - YYSYMBOL_cachedb_backend_name = 701, /* cachedb_backend_name */ - YYSYMBOL_cachedb_secret_seed = 702, /* cachedb_secret_seed */ - YYSYMBOL_redis_server_host = 703, /* redis_server_host */ - YYSYMBOL_redis_server_port = 704, /* redis_server_port */ - YYSYMBOL_redis_server_path = 705, /* redis_server_path */ - YYSYMBOL_redis_server_password = 706, /* redis_server_password */ - YYSYMBOL_redis_timeout = 707, /* redis_timeout */ - YYSYMBOL_redis_expire_records = 708, /* redis_expire_records */ - YYSYMBOL_server_tcp_connection_limit = 709, /* server_tcp_connection_limit */ - YYSYMBOL_server_answer_cookie = 710, /* server_answer_cookie */ - YYSYMBOL_server_cookie_secret = 711, /* server_cookie_secret */ - YYSYMBOL_ipsetstart = 712, /* ipsetstart */ - YYSYMBOL_contents_ipset = 713, /* contents_ipset */ - YYSYMBOL_content_ipset = 714, /* content_ipset */ - YYSYMBOL_ipset_name_v4 = 715, /* ipset_name_v4 */ - YYSYMBOL_ipset_name_v6 = 716 /* ipset_name_v6 */ + YYSYMBOL_VAR_CACHEDB_REDISLOGICALDB = 288, /* VAR_CACHEDB_REDISLOGICALDB */ + YYSYMBOL_VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 289, /* VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM */ + YYSYMBOL_VAR_FOR_UPSTREAM = 290, /* VAR_FOR_UPSTREAM */ + YYSYMBOL_VAR_AUTH_ZONE = 291, /* VAR_AUTH_ZONE */ + YYSYMBOL_VAR_ZONEFILE = 292, /* VAR_ZONEFILE */ + YYSYMBOL_VAR_MASTER = 293, /* VAR_MASTER */ + YYSYMBOL_VAR_URL = 294, /* VAR_URL */ + YYSYMBOL_VAR_FOR_DOWNSTREAM = 295, /* VAR_FOR_DOWNSTREAM */ + YYSYMBOL_VAR_FALLBACK_ENABLED = 296, /* VAR_FALLBACK_ENABLED */ + YYSYMBOL_VAR_TLS_ADDITIONAL_PORT = 297, /* VAR_TLS_ADDITIONAL_PORT */ + YYSYMBOL_VAR_LOW_RTT = 298, /* VAR_LOW_RTT */ + YYSYMBOL_VAR_LOW_RTT_PERMIL = 299, /* VAR_LOW_RTT_PERMIL */ + YYSYMBOL_VAR_FAST_SERVER_PERMIL = 300, /* VAR_FAST_SERVER_PERMIL */ + YYSYMBOL_VAR_FAST_SERVER_NUM = 301, /* VAR_FAST_SERVER_NUM */ + YYSYMBOL_VAR_ALLOW_NOTIFY = 302, /* VAR_ALLOW_NOTIFY */ + YYSYMBOL_VAR_TLS_WIN_CERT = 303, /* VAR_TLS_WIN_CERT */ + YYSYMBOL_VAR_TCP_CONNECTION_LIMIT = 304, /* VAR_TCP_CONNECTION_LIMIT */ + YYSYMBOL_VAR_ANSWER_COOKIE = 305, /* VAR_ANSWER_COOKIE */ + YYSYMBOL_VAR_COOKIE_SECRET = 306, /* VAR_COOKIE_SECRET */ + YYSYMBOL_VAR_IP_RATELIMIT_COOKIE = 307, /* VAR_IP_RATELIMIT_COOKIE */ + YYSYMBOL_VAR_FORWARD_NO_CACHE = 308, /* VAR_FORWARD_NO_CACHE */ + YYSYMBOL_VAR_STUB_NO_CACHE = 309, /* VAR_STUB_NO_CACHE */ + YYSYMBOL_VAR_LOG_SERVFAIL = 310, /* VAR_LOG_SERVFAIL */ + YYSYMBOL_VAR_DENY_ANY = 311, /* VAR_DENY_ANY */ + YYSYMBOL_VAR_UNKNOWN_SERVER_TIME_LIMIT = 312, /* VAR_UNKNOWN_SERVER_TIME_LIMIT */ + YYSYMBOL_VAR_LOG_TAG_QUERYREPLY = 313, /* VAR_LOG_TAG_QUERYREPLY */ + YYSYMBOL_VAR_STREAM_WAIT_SIZE = 314, /* VAR_STREAM_WAIT_SIZE */ + YYSYMBOL_VAR_TLS_CIPHERS = 315, /* VAR_TLS_CIPHERS */ + YYSYMBOL_VAR_TLS_CIPHERSUITES = 316, /* VAR_TLS_CIPHERSUITES */ + YYSYMBOL_VAR_TLS_USE_SNI = 317, /* VAR_TLS_USE_SNI */ + YYSYMBOL_VAR_IPSET = 318, /* VAR_IPSET */ + YYSYMBOL_VAR_IPSET_NAME_V4 = 319, /* VAR_IPSET_NAME_V4 */ + YYSYMBOL_VAR_IPSET_NAME_V6 = 320, /* VAR_IPSET_NAME_V6 */ + YYSYMBOL_VAR_TLS_SESSION_TICKET_KEYS = 321, /* VAR_TLS_SESSION_TICKET_KEYS */ + YYSYMBOL_VAR_RPZ = 322, /* VAR_RPZ */ + YYSYMBOL_VAR_TAGS = 323, /* VAR_TAGS */ + YYSYMBOL_VAR_RPZ_ACTION_OVERRIDE = 324, /* VAR_RPZ_ACTION_OVERRIDE */ + YYSYMBOL_VAR_RPZ_CNAME_OVERRIDE = 325, /* VAR_RPZ_CNAME_OVERRIDE */ + YYSYMBOL_VAR_RPZ_LOG = 326, /* VAR_RPZ_LOG */ + YYSYMBOL_VAR_RPZ_LOG_NAME = 327, /* VAR_RPZ_LOG_NAME */ + YYSYMBOL_VAR_DYNLIB = 328, /* VAR_DYNLIB */ + YYSYMBOL_VAR_DYNLIB_FILE = 329, /* VAR_DYNLIB_FILE */ + YYSYMBOL_VAR_EDNS_CLIENT_STRING = 330, /* VAR_EDNS_CLIENT_STRING */ + YYSYMBOL_VAR_EDNS_CLIENT_STRING_OPCODE = 331, /* VAR_EDNS_CLIENT_STRING_OPCODE */ + YYSYMBOL_VAR_NSID = 332, /* VAR_NSID */ + YYSYMBOL_VAR_ZONEMD_PERMISSIVE_MODE = 333, /* VAR_ZONEMD_PERMISSIVE_MODE */ + YYSYMBOL_VAR_ZONEMD_CHECK = 334, /* VAR_ZONEMD_CHECK */ + YYSYMBOL_VAR_ZONEMD_REJECT_ABSENCE = 335, /* VAR_ZONEMD_REJECT_ABSENCE */ + YYSYMBOL_VAR_RPZ_SIGNAL_NXDOMAIN_RA = 336, /* VAR_RPZ_SIGNAL_NXDOMAIN_RA */ + YYSYMBOL_VAR_INTERFACE_AUTOMATIC_PORTS = 337, /* VAR_INTERFACE_AUTOMATIC_PORTS */ + YYSYMBOL_VAR_EDE = 338, /* VAR_EDE */ + YYSYMBOL_VAR_INTERFACE_ACTION = 339, /* VAR_INTERFACE_ACTION */ + YYSYMBOL_VAR_INTERFACE_VIEW = 340, /* VAR_INTERFACE_VIEW */ + YYSYMBOL_VAR_INTERFACE_TAG = 341, /* VAR_INTERFACE_TAG */ + YYSYMBOL_VAR_INTERFACE_TAG_ACTION = 342, /* VAR_INTERFACE_TAG_ACTION */ + YYSYMBOL_VAR_INTERFACE_TAG_DATA = 343, /* VAR_INTERFACE_TAG_DATA */ + YYSYMBOL_VAR_PROXY_PROTOCOL_PORT = 344, /* VAR_PROXY_PROTOCOL_PORT */ + YYSYMBOL_VAR_STATISTICS_INHIBIT_ZERO = 345, /* VAR_STATISTICS_INHIBIT_ZERO */ + YYSYMBOL_VAR_HARDEN_UNKNOWN_ADDITIONAL = 346, /* VAR_HARDEN_UNKNOWN_ADDITIONAL */ + YYSYMBOL_VAR_DISABLE_EDNS_DO = 347, /* VAR_DISABLE_EDNS_DO */ + YYSYMBOL_VAR_CACHEDB_NO_STORE = 348, /* VAR_CACHEDB_NO_STORE */ + YYSYMBOL_YYACCEPT = 349, /* $accept */ + YYSYMBOL_toplevelvars = 350, /* toplevelvars */ + YYSYMBOL_toplevelvar = 351, /* toplevelvar */ + YYSYMBOL_force_toplevel = 352, /* force_toplevel */ + YYSYMBOL_serverstart = 353, /* serverstart */ + YYSYMBOL_contents_server = 354, /* contents_server */ + YYSYMBOL_content_server = 355, /* content_server */ + YYSYMBOL_stubstart = 356, /* stubstart */ + YYSYMBOL_contents_stub = 357, /* contents_stub */ + YYSYMBOL_content_stub = 358, /* content_stub */ + YYSYMBOL_forwardstart = 359, /* forwardstart */ + YYSYMBOL_contents_forward = 360, /* contents_forward */ + YYSYMBOL_content_forward = 361, /* content_forward */ + YYSYMBOL_viewstart = 362, /* viewstart */ + YYSYMBOL_contents_view = 363, /* contents_view */ + YYSYMBOL_content_view = 364, /* content_view */ + YYSYMBOL_authstart = 365, /* authstart */ + YYSYMBOL_contents_auth = 366, /* contents_auth */ + YYSYMBOL_content_auth = 367, /* content_auth */ + YYSYMBOL_rpz_tag = 368, /* rpz_tag */ + YYSYMBOL_rpz_action_override = 369, /* rpz_action_override */ + YYSYMBOL_rpz_cname_override = 370, /* rpz_cname_override */ + YYSYMBOL_rpz_log = 371, /* rpz_log */ + YYSYMBOL_rpz_log_name = 372, /* rpz_log_name */ + YYSYMBOL_rpz_signal_nxdomain_ra = 373, /* rpz_signal_nxdomain_ra */ + YYSYMBOL_rpzstart = 374, /* rpzstart */ + YYSYMBOL_contents_rpz = 375, /* contents_rpz */ + YYSYMBOL_content_rpz = 376, /* content_rpz */ + YYSYMBOL_server_num_threads = 377, /* server_num_threads */ + YYSYMBOL_server_verbosity = 378, /* server_verbosity */ + YYSYMBOL_server_statistics_interval = 379, /* server_statistics_interval */ + YYSYMBOL_server_statistics_cumulative = 380, /* server_statistics_cumulative */ + YYSYMBOL_server_extended_statistics = 381, /* server_extended_statistics */ + YYSYMBOL_server_statistics_inhibit_zero = 382, /* server_statistics_inhibit_zero */ + YYSYMBOL_server_shm_enable = 383, /* server_shm_enable */ + YYSYMBOL_server_shm_key = 384, /* server_shm_key */ + YYSYMBOL_server_port = 385, /* server_port */ + YYSYMBOL_server_send_client_subnet = 386, /* server_send_client_subnet */ + YYSYMBOL_server_client_subnet_zone = 387, /* server_client_subnet_zone */ + YYSYMBOL_server_client_subnet_always_forward = 388, /* server_client_subnet_always_forward */ + YYSYMBOL_server_client_subnet_opcode = 389, /* server_client_subnet_opcode */ + YYSYMBOL_server_max_client_subnet_ipv4 = 390, /* server_max_client_subnet_ipv4 */ + YYSYMBOL_server_max_client_subnet_ipv6 = 391, /* server_max_client_subnet_ipv6 */ + YYSYMBOL_server_min_client_subnet_ipv4 = 392, /* server_min_client_subnet_ipv4 */ + YYSYMBOL_server_min_client_subnet_ipv6 = 393, /* server_min_client_subnet_ipv6 */ + YYSYMBOL_server_max_ecs_tree_size_ipv4 = 394, /* server_max_ecs_tree_size_ipv4 */ + YYSYMBOL_server_max_ecs_tree_size_ipv6 = 395, /* server_max_ecs_tree_size_ipv6 */ + YYSYMBOL_server_interface = 396, /* server_interface */ + YYSYMBOL_server_outgoing_interface = 397, /* server_outgoing_interface */ + YYSYMBOL_server_outgoing_range = 398, /* server_outgoing_range */ + YYSYMBOL_server_outgoing_port_permit = 399, /* server_outgoing_port_permit */ + YYSYMBOL_server_outgoing_port_avoid = 400, /* server_outgoing_port_avoid */ + YYSYMBOL_server_outgoing_num_tcp = 401, /* server_outgoing_num_tcp */ + YYSYMBOL_server_incoming_num_tcp = 402, /* server_incoming_num_tcp */ + YYSYMBOL_server_interface_automatic = 403, /* server_interface_automatic */ + YYSYMBOL_server_interface_automatic_ports = 404, /* server_interface_automatic_ports */ + YYSYMBOL_server_do_ip4 = 405, /* server_do_ip4 */ + YYSYMBOL_server_do_ip6 = 406, /* server_do_ip6 */ + YYSYMBOL_server_do_nat64 = 407, /* server_do_nat64 */ + YYSYMBOL_server_do_udp = 408, /* server_do_udp */ + YYSYMBOL_server_do_tcp = 409, /* server_do_tcp */ + YYSYMBOL_server_prefer_ip4 = 410, /* server_prefer_ip4 */ + YYSYMBOL_server_prefer_ip6 = 411, /* server_prefer_ip6 */ + YYSYMBOL_server_tcp_mss = 412, /* server_tcp_mss */ + YYSYMBOL_server_outgoing_tcp_mss = 413, /* server_outgoing_tcp_mss */ + YYSYMBOL_server_tcp_idle_timeout = 414, /* server_tcp_idle_timeout */ + YYSYMBOL_server_max_reuse_tcp_queries = 415, /* server_max_reuse_tcp_queries */ + YYSYMBOL_server_tcp_reuse_timeout = 416, /* server_tcp_reuse_timeout */ + YYSYMBOL_server_tcp_auth_query_timeout = 417, /* server_tcp_auth_query_timeout */ + YYSYMBOL_server_tcp_keepalive = 418, /* server_tcp_keepalive */ + YYSYMBOL_server_tcp_keepalive_timeout = 419, /* server_tcp_keepalive_timeout */ + YYSYMBOL_server_sock_queue_timeout = 420, /* server_sock_queue_timeout */ + YYSYMBOL_server_tcp_upstream = 421, /* server_tcp_upstream */ + YYSYMBOL_server_udp_upstream_without_downstream = 422, /* server_udp_upstream_without_downstream */ + YYSYMBOL_server_ssl_upstream = 423, /* server_ssl_upstream */ + YYSYMBOL_server_ssl_service_key = 424, /* server_ssl_service_key */ + YYSYMBOL_server_ssl_service_pem = 425, /* server_ssl_service_pem */ + YYSYMBOL_server_ssl_port = 426, /* server_ssl_port */ + YYSYMBOL_server_tls_cert_bundle = 427, /* server_tls_cert_bundle */ + YYSYMBOL_server_tls_win_cert = 428, /* server_tls_win_cert */ + YYSYMBOL_server_tls_additional_port = 429, /* server_tls_additional_port */ + YYSYMBOL_server_tls_ciphers = 430, /* server_tls_ciphers */ + YYSYMBOL_server_tls_ciphersuites = 431, /* server_tls_ciphersuites */ + YYSYMBOL_server_tls_session_ticket_keys = 432, /* server_tls_session_ticket_keys */ + YYSYMBOL_server_tls_use_sni = 433, /* server_tls_use_sni */ + YYSYMBOL_server_https_port = 434, /* server_https_port */ + YYSYMBOL_server_http_endpoint = 435, /* server_http_endpoint */ + YYSYMBOL_server_http_max_streams = 436, /* server_http_max_streams */ + YYSYMBOL_server_http_query_buffer_size = 437, /* server_http_query_buffer_size */ + YYSYMBOL_server_http_response_buffer_size = 438, /* server_http_response_buffer_size */ + YYSYMBOL_server_http_nodelay = 439, /* server_http_nodelay */ + YYSYMBOL_server_http_notls_downstream = 440, /* server_http_notls_downstream */ + YYSYMBOL_server_use_systemd = 441, /* server_use_systemd */ + YYSYMBOL_server_do_daemonize = 442, /* server_do_daemonize */ + YYSYMBOL_server_use_syslog = 443, /* server_use_syslog */ + YYSYMBOL_server_log_time_ascii = 444, /* server_log_time_ascii */ + YYSYMBOL_server_log_queries = 445, /* server_log_queries */ + YYSYMBOL_server_log_replies = 446, /* server_log_replies */ + YYSYMBOL_server_log_tag_queryreply = 447, /* server_log_tag_queryreply */ + YYSYMBOL_server_log_servfail = 448, /* server_log_servfail */ + YYSYMBOL_server_log_local_actions = 449, /* server_log_local_actions */ + YYSYMBOL_server_chroot = 450, /* server_chroot */ + YYSYMBOL_server_username = 451, /* server_username */ + YYSYMBOL_server_directory = 452, /* server_directory */ + YYSYMBOL_server_logfile = 453, /* server_logfile */ + YYSYMBOL_server_pidfile = 454, /* server_pidfile */ + YYSYMBOL_server_root_hints = 455, /* server_root_hints */ + YYSYMBOL_server_dlv_anchor_file = 456, /* server_dlv_anchor_file */ + YYSYMBOL_server_dlv_anchor = 457, /* server_dlv_anchor */ + YYSYMBOL_server_auto_trust_anchor_file = 458, /* server_auto_trust_anchor_file */ + YYSYMBOL_server_trust_anchor_file = 459, /* server_trust_anchor_file */ + YYSYMBOL_server_trusted_keys_file = 460, /* server_trusted_keys_file */ + YYSYMBOL_server_trust_anchor = 461, /* server_trust_anchor */ + YYSYMBOL_server_trust_anchor_signaling = 462, /* server_trust_anchor_signaling */ + YYSYMBOL_server_root_key_sentinel = 463, /* server_root_key_sentinel */ + YYSYMBOL_server_domain_insecure = 464, /* server_domain_insecure */ + YYSYMBOL_server_hide_identity = 465, /* server_hide_identity */ + YYSYMBOL_server_hide_version = 466, /* server_hide_version */ + YYSYMBOL_server_hide_trustanchor = 467, /* server_hide_trustanchor */ + YYSYMBOL_server_hide_http_user_agent = 468, /* server_hide_http_user_agent */ + YYSYMBOL_server_identity = 469, /* server_identity */ + YYSYMBOL_server_version = 470, /* server_version */ + YYSYMBOL_server_http_user_agent = 471, /* server_http_user_agent */ + YYSYMBOL_server_nsid = 472, /* server_nsid */ + YYSYMBOL_server_so_rcvbuf = 473, /* server_so_rcvbuf */ + YYSYMBOL_server_so_sndbuf = 474, /* server_so_sndbuf */ + YYSYMBOL_server_so_reuseport = 475, /* server_so_reuseport */ + YYSYMBOL_server_ip_transparent = 476, /* server_ip_transparent */ + YYSYMBOL_server_ip_freebind = 477, /* server_ip_freebind */ + YYSYMBOL_server_ip_dscp = 478, /* server_ip_dscp */ + YYSYMBOL_server_stream_wait_size = 479, /* server_stream_wait_size */ + YYSYMBOL_server_edns_buffer_size = 480, /* server_edns_buffer_size */ + YYSYMBOL_server_msg_buffer_size = 481, /* server_msg_buffer_size */ + YYSYMBOL_server_msg_cache_size = 482, /* server_msg_cache_size */ + YYSYMBOL_server_msg_cache_slabs = 483, /* server_msg_cache_slabs */ + YYSYMBOL_server_num_queries_per_thread = 484, /* server_num_queries_per_thread */ + YYSYMBOL_server_jostle_timeout = 485, /* server_jostle_timeout */ + YYSYMBOL_server_delay_close = 486, /* server_delay_close */ + YYSYMBOL_server_udp_connect = 487, /* server_udp_connect */ + YYSYMBOL_server_unblock_lan_zones = 488, /* server_unblock_lan_zones */ + YYSYMBOL_server_insecure_lan_zones = 489, /* server_insecure_lan_zones */ + YYSYMBOL_server_rrset_cache_size = 490, /* server_rrset_cache_size */ + YYSYMBOL_server_rrset_cache_slabs = 491, /* server_rrset_cache_slabs */ + YYSYMBOL_server_infra_host_ttl = 492, /* server_infra_host_ttl */ + YYSYMBOL_server_infra_lame_ttl = 493, /* server_infra_lame_ttl */ + YYSYMBOL_server_infra_cache_numhosts = 494, /* server_infra_cache_numhosts */ + YYSYMBOL_server_infra_cache_lame_size = 495, /* server_infra_cache_lame_size */ + YYSYMBOL_server_infra_cache_slabs = 496, /* server_infra_cache_slabs */ + YYSYMBOL_server_infra_cache_min_rtt = 497, /* server_infra_cache_min_rtt */ + YYSYMBOL_server_infra_cache_max_rtt = 498, /* server_infra_cache_max_rtt */ + YYSYMBOL_server_infra_keep_probing = 499, /* server_infra_keep_probing */ + YYSYMBOL_server_target_fetch_policy = 500, /* server_target_fetch_policy */ + YYSYMBOL_server_harden_short_bufsize = 501, /* server_harden_short_bufsize */ + YYSYMBOL_server_harden_large_queries = 502, /* server_harden_large_queries */ + YYSYMBOL_server_harden_glue = 503, /* server_harden_glue */ + YYSYMBOL_server_harden_dnssec_stripped = 504, /* server_harden_dnssec_stripped */ + YYSYMBOL_server_harden_below_nxdomain = 505, /* server_harden_below_nxdomain */ + YYSYMBOL_server_harden_referral_path = 506, /* server_harden_referral_path */ + YYSYMBOL_server_harden_algo_downgrade = 507, /* server_harden_algo_downgrade */ + YYSYMBOL_server_harden_unknown_additional = 508, /* server_harden_unknown_additional */ + YYSYMBOL_server_use_caps_for_id = 509, /* server_use_caps_for_id */ + YYSYMBOL_server_caps_whitelist = 510, /* server_caps_whitelist */ + YYSYMBOL_server_private_address = 511, /* server_private_address */ + YYSYMBOL_server_private_domain = 512, /* server_private_domain */ + YYSYMBOL_server_prefetch = 513, /* server_prefetch */ + YYSYMBOL_server_prefetch_key = 514, /* server_prefetch_key */ + YYSYMBOL_server_deny_any = 515, /* server_deny_any */ + YYSYMBOL_server_unwanted_reply_threshold = 516, /* server_unwanted_reply_threshold */ + YYSYMBOL_server_do_not_query_address = 517, /* server_do_not_query_address */ + YYSYMBOL_server_do_not_query_localhost = 518, /* server_do_not_query_localhost */ + YYSYMBOL_server_access_control = 519, /* server_access_control */ + YYSYMBOL_server_interface_action = 520, /* server_interface_action */ + YYSYMBOL_server_module_conf = 521, /* server_module_conf */ + YYSYMBOL_server_val_override_date = 522, /* server_val_override_date */ + YYSYMBOL_server_val_sig_skew_min = 523, /* server_val_sig_skew_min */ + YYSYMBOL_server_val_sig_skew_max = 524, /* server_val_sig_skew_max */ + YYSYMBOL_server_val_max_restart = 525, /* server_val_max_restart */ + YYSYMBOL_server_cache_max_ttl = 526, /* server_cache_max_ttl */ + YYSYMBOL_server_cache_max_negative_ttl = 527, /* server_cache_max_negative_ttl */ + YYSYMBOL_server_cache_min_ttl = 528, /* server_cache_min_ttl */ + YYSYMBOL_server_bogus_ttl = 529, /* server_bogus_ttl */ + YYSYMBOL_server_val_clean_additional = 530, /* server_val_clean_additional */ + YYSYMBOL_server_val_permissive_mode = 531, /* server_val_permissive_mode */ + YYSYMBOL_server_aggressive_nsec = 532, /* server_aggressive_nsec */ + YYSYMBOL_server_ignore_cd_flag = 533, /* server_ignore_cd_flag */ + YYSYMBOL_server_disable_edns_do = 534, /* server_disable_edns_do */ + YYSYMBOL_server_serve_expired = 535, /* server_serve_expired */ + YYSYMBOL_server_serve_expired_ttl = 536, /* server_serve_expired_ttl */ + YYSYMBOL_server_serve_expired_ttl_reset = 537, /* server_serve_expired_ttl_reset */ + YYSYMBOL_server_serve_expired_reply_ttl = 538, /* server_serve_expired_reply_ttl */ + YYSYMBOL_server_serve_expired_client_timeout = 539, /* server_serve_expired_client_timeout */ + YYSYMBOL_server_ede_serve_expired = 540, /* server_ede_serve_expired */ + YYSYMBOL_server_serve_original_ttl = 541, /* server_serve_original_ttl */ + YYSYMBOL_server_fake_dsa = 542, /* server_fake_dsa */ + YYSYMBOL_server_fake_sha1 = 543, /* server_fake_sha1 */ + YYSYMBOL_server_val_log_level = 544, /* server_val_log_level */ + YYSYMBOL_server_val_nsec3_keysize_iterations = 545, /* server_val_nsec3_keysize_iterations */ + YYSYMBOL_server_zonemd_permissive_mode = 546, /* server_zonemd_permissive_mode */ + YYSYMBOL_server_add_holddown = 547, /* server_add_holddown */ + YYSYMBOL_server_del_holddown = 548, /* server_del_holddown */ + YYSYMBOL_server_keep_missing = 549, /* server_keep_missing */ + YYSYMBOL_server_permit_small_holddown = 550, /* server_permit_small_holddown */ + YYSYMBOL_server_key_cache_size = 551, /* server_key_cache_size */ + YYSYMBOL_server_key_cache_slabs = 552, /* server_key_cache_slabs */ + YYSYMBOL_server_neg_cache_size = 553, /* server_neg_cache_size */ + YYSYMBOL_server_local_zone = 554, /* server_local_zone */ + YYSYMBOL_server_local_data = 555, /* server_local_data */ + YYSYMBOL_server_local_data_ptr = 556, /* server_local_data_ptr */ + YYSYMBOL_server_minimal_responses = 557, /* server_minimal_responses */ + YYSYMBOL_server_rrset_roundrobin = 558, /* server_rrset_roundrobin */ + YYSYMBOL_server_unknown_server_time_limit = 559, /* server_unknown_server_time_limit */ + YYSYMBOL_server_max_udp_size = 560, /* server_max_udp_size */ + YYSYMBOL_server_dns64_prefix = 561, /* server_dns64_prefix */ + YYSYMBOL_server_dns64_synthall = 562, /* server_dns64_synthall */ + YYSYMBOL_server_dns64_ignore_aaaa = 563, /* server_dns64_ignore_aaaa */ + YYSYMBOL_server_nat64_prefix = 564, /* server_nat64_prefix */ + YYSYMBOL_server_define_tag = 565, /* server_define_tag */ + YYSYMBOL_server_local_zone_tag = 566, /* server_local_zone_tag */ + YYSYMBOL_server_access_control_tag = 567, /* server_access_control_tag */ + YYSYMBOL_server_access_control_tag_action = 568, /* server_access_control_tag_action */ + YYSYMBOL_server_access_control_tag_data = 569, /* server_access_control_tag_data */ + YYSYMBOL_server_local_zone_override = 570, /* server_local_zone_override */ + YYSYMBOL_server_access_control_view = 571, /* server_access_control_view */ + YYSYMBOL_server_interface_tag = 572, /* server_interface_tag */ + YYSYMBOL_server_interface_tag_action = 573, /* server_interface_tag_action */ + YYSYMBOL_server_interface_tag_data = 574, /* server_interface_tag_data */ + YYSYMBOL_server_interface_view = 575, /* server_interface_view */ + YYSYMBOL_server_response_ip_tag = 576, /* server_response_ip_tag */ + YYSYMBOL_server_ip_ratelimit = 577, /* server_ip_ratelimit */ + YYSYMBOL_server_ip_ratelimit_cookie = 578, /* server_ip_ratelimit_cookie */ + YYSYMBOL_server_ratelimit = 579, /* server_ratelimit */ + YYSYMBOL_server_ip_ratelimit_size = 580, /* server_ip_ratelimit_size */ + YYSYMBOL_server_ratelimit_size = 581, /* server_ratelimit_size */ + YYSYMBOL_server_ip_ratelimit_slabs = 582, /* server_ip_ratelimit_slabs */ + YYSYMBOL_server_ratelimit_slabs = 583, /* server_ratelimit_slabs */ + YYSYMBOL_server_ratelimit_for_domain = 584, /* server_ratelimit_for_domain */ + YYSYMBOL_server_ratelimit_below_domain = 585, /* server_ratelimit_below_domain */ + YYSYMBOL_server_ip_ratelimit_factor = 586, /* server_ip_ratelimit_factor */ + YYSYMBOL_server_ratelimit_factor = 587, /* server_ratelimit_factor */ + YYSYMBOL_server_ip_ratelimit_backoff = 588, /* server_ip_ratelimit_backoff */ + YYSYMBOL_server_ratelimit_backoff = 589, /* server_ratelimit_backoff */ + YYSYMBOL_server_outbound_msg_retry = 590, /* server_outbound_msg_retry */ + YYSYMBOL_server_max_sent_count = 591, /* server_max_sent_count */ + YYSYMBOL_server_max_query_restarts = 592, /* server_max_query_restarts */ + YYSYMBOL_server_low_rtt = 593, /* server_low_rtt */ + YYSYMBOL_server_fast_server_num = 594, /* server_fast_server_num */ + YYSYMBOL_server_fast_server_permil = 595, /* server_fast_server_permil */ + YYSYMBOL_server_qname_minimisation = 596, /* server_qname_minimisation */ + YYSYMBOL_server_qname_minimisation_strict = 597, /* server_qname_minimisation_strict */ + YYSYMBOL_server_pad_responses = 598, /* server_pad_responses */ + YYSYMBOL_server_pad_responses_block_size = 599, /* server_pad_responses_block_size */ + YYSYMBOL_server_pad_queries = 600, /* server_pad_queries */ + YYSYMBOL_server_pad_queries_block_size = 601, /* server_pad_queries_block_size */ + YYSYMBOL_server_ipsecmod_enabled = 602, /* server_ipsecmod_enabled */ + YYSYMBOL_server_ipsecmod_ignore_bogus = 603, /* server_ipsecmod_ignore_bogus */ + YYSYMBOL_server_ipsecmod_hook = 604, /* server_ipsecmod_hook */ + YYSYMBOL_server_ipsecmod_max_ttl = 605, /* server_ipsecmod_max_ttl */ + YYSYMBOL_server_ipsecmod_whitelist = 606, /* server_ipsecmod_whitelist */ + YYSYMBOL_server_ipsecmod_strict = 607, /* server_ipsecmod_strict */ + YYSYMBOL_server_edns_client_string = 608, /* server_edns_client_string */ + YYSYMBOL_server_edns_client_string_opcode = 609, /* server_edns_client_string_opcode */ + YYSYMBOL_server_ede = 610, /* server_ede */ + YYSYMBOL_server_proxy_protocol_port = 611, /* server_proxy_protocol_port */ + YYSYMBOL_stub_name = 612, /* stub_name */ + YYSYMBOL_stub_host = 613, /* stub_host */ + YYSYMBOL_stub_addr = 614, /* stub_addr */ + YYSYMBOL_stub_first = 615, /* stub_first */ + YYSYMBOL_stub_no_cache = 616, /* stub_no_cache */ + YYSYMBOL_stub_ssl_upstream = 617, /* stub_ssl_upstream */ + YYSYMBOL_stub_tcp_upstream = 618, /* stub_tcp_upstream */ + YYSYMBOL_stub_prime = 619, /* stub_prime */ + YYSYMBOL_forward_name = 620, /* forward_name */ + YYSYMBOL_forward_host = 621, /* forward_host */ + YYSYMBOL_forward_addr = 622, /* forward_addr */ + YYSYMBOL_forward_first = 623, /* forward_first */ + YYSYMBOL_forward_no_cache = 624, /* forward_no_cache */ + YYSYMBOL_forward_ssl_upstream = 625, /* forward_ssl_upstream */ + YYSYMBOL_forward_tcp_upstream = 626, /* forward_tcp_upstream */ + YYSYMBOL_auth_name = 627, /* auth_name */ + YYSYMBOL_auth_zonefile = 628, /* auth_zonefile */ + YYSYMBOL_auth_master = 629, /* auth_master */ + YYSYMBOL_auth_url = 630, /* auth_url */ + YYSYMBOL_auth_allow_notify = 631, /* auth_allow_notify */ + YYSYMBOL_auth_zonemd_check = 632, /* auth_zonemd_check */ + YYSYMBOL_auth_zonemd_reject_absence = 633, /* auth_zonemd_reject_absence */ + YYSYMBOL_auth_for_downstream = 634, /* auth_for_downstream */ + YYSYMBOL_auth_for_upstream = 635, /* auth_for_upstream */ + YYSYMBOL_auth_fallback_enabled = 636, /* auth_fallback_enabled */ + YYSYMBOL_view_name = 637, /* view_name */ + YYSYMBOL_view_local_zone = 638, /* view_local_zone */ + YYSYMBOL_view_response_ip = 639, /* view_response_ip */ + YYSYMBOL_view_response_ip_data = 640, /* view_response_ip_data */ + YYSYMBOL_view_local_data = 641, /* view_local_data */ + YYSYMBOL_view_local_data_ptr = 642, /* view_local_data_ptr */ + YYSYMBOL_view_first = 643, /* view_first */ + YYSYMBOL_rcstart = 644, /* rcstart */ + YYSYMBOL_contents_rc = 645, /* contents_rc */ + YYSYMBOL_content_rc = 646, /* content_rc */ + YYSYMBOL_rc_control_enable = 647, /* rc_control_enable */ + YYSYMBOL_rc_control_port = 648, /* rc_control_port */ + YYSYMBOL_rc_control_interface = 649, /* rc_control_interface */ + YYSYMBOL_rc_control_use_cert = 650, /* rc_control_use_cert */ + YYSYMBOL_rc_server_key_file = 651, /* rc_server_key_file */ + YYSYMBOL_rc_server_cert_file = 652, /* rc_server_cert_file */ + YYSYMBOL_rc_control_key_file = 653, /* rc_control_key_file */ + YYSYMBOL_rc_control_cert_file = 654, /* rc_control_cert_file */ + YYSYMBOL_dtstart = 655, /* dtstart */ + YYSYMBOL_contents_dt = 656, /* contents_dt */ + YYSYMBOL_content_dt = 657, /* content_dt */ + YYSYMBOL_dt_dnstap_enable = 658, /* dt_dnstap_enable */ + YYSYMBOL_dt_dnstap_bidirectional = 659, /* dt_dnstap_bidirectional */ + YYSYMBOL_dt_dnstap_socket_path = 660, /* dt_dnstap_socket_path */ + YYSYMBOL_dt_dnstap_ip = 661, /* dt_dnstap_ip */ + YYSYMBOL_dt_dnstap_tls = 662, /* dt_dnstap_tls */ + YYSYMBOL_dt_dnstap_tls_server_name = 663, /* dt_dnstap_tls_server_name */ + YYSYMBOL_dt_dnstap_tls_cert_bundle = 664, /* dt_dnstap_tls_cert_bundle */ + YYSYMBOL_dt_dnstap_tls_client_key_file = 665, /* dt_dnstap_tls_client_key_file */ + YYSYMBOL_dt_dnstap_tls_client_cert_file = 666, /* dt_dnstap_tls_client_cert_file */ + YYSYMBOL_dt_dnstap_send_identity = 667, /* dt_dnstap_send_identity */ + YYSYMBOL_dt_dnstap_send_version = 668, /* dt_dnstap_send_version */ + YYSYMBOL_dt_dnstap_identity = 669, /* dt_dnstap_identity */ + YYSYMBOL_dt_dnstap_version = 670, /* dt_dnstap_version */ + YYSYMBOL_dt_dnstap_log_resolver_query_messages = 671, /* dt_dnstap_log_resolver_query_messages */ + YYSYMBOL_dt_dnstap_log_resolver_response_messages = 672, /* dt_dnstap_log_resolver_response_messages */ + YYSYMBOL_dt_dnstap_log_client_query_messages = 673, /* dt_dnstap_log_client_query_messages */ + YYSYMBOL_dt_dnstap_log_client_response_messages = 674, /* dt_dnstap_log_client_response_messages */ + YYSYMBOL_dt_dnstap_log_forwarder_query_messages = 675, /* dt_dnstap_log_forwarder_query_messages */ + YYSYMBOL_dt_dnstap_log_forwarder_response_messages = 676, /* dt_dnstap_log_forwarder_response_messages */ + YYSYMBOL_pythonstart = 677, /* pythonstart */ + YYSYMBOL_contents_py = 678, /* contents_py */ + YYSYMBOL_content_py = 679, /* content_py */ + YYSYMBOL_py_script = 680, /* py_script */ + YYSYMBOL_dynlibstart = 681, /* dynlibstart */ + YYSYMBOL_contents_dl = 682, /* contents_dl */ + YYSYMBOL_content_dl = 683, /* content_dl */ + YYSYMBOL_dl_file = 684, /* dl_file */ + YYSYMBOL_server_disable_dnssec_lame_check = 685, /* server_disable_dnssec_lame_check */ + YYSYMBOL_server_log_identity = 686, /* server_log_identity */ + YYSYMBOL_server_response_ip = 687, /* server_response_ip */ + YYSYMBOL_server_response_ip_data = 688, /* server_response_ip_data */ + YYSYMBOL_dnscstart = 689, /* dnscstart */ + YYSYMBOL_contents_dnsc = 690, /* contents_dnsc */ + YYSYMBOL_content_dnsc = 691, /* content_dnsc */ + YYSYMBOL_dnsc_dnscrypt_enable = 692, /* dnsc_dnscrypt_enable */ + YYSYMBOL_dnsc_dnscrypt_port = 693, /* dnsc_dnscrypt_port */ + YYSYMBOL_dnsc_dnscrypt_provider = 694, /* dnsc_dnscrypt_provider */ + YYSYMBOL_dnsc_dnscrypt_provider_cert = 695, /* dnsc_dnscrypt_provider_cert */ + YYSYMBOL_dnsc_dnscrypt_provider_cert_rotated = 696, /* dnsc_dnscrypt_provider_cert_rotated */ + YYSYMBOL_dnsc_dnscrypt_secret_key = 697, /* dnsc_dnscrypt_secret_key */ + YYSYMBOL_dnsc_dnscrypt_shared_secret_cache_size = 698, /* dnsc_dnscrypt_shared_secret_cache_size */ + YYSYMBOL_dnsc_dnscrypt_shared_secret_cache_slabs = 699, /* dnsc_dnscrypt_shared_secret_cache_slabs */ + YYSYMBOL_dnsc_dnscrypt_nonce_cache_size = 700, /* dnsc_dnscrypt_nonce_cache_size */ + YYSYMBOL_dnsc_dnscrypt_nonce_cache_slabs = 701, /* dnsc_dnscrypt_nonce_cache_slabs */ + YYSYMBOL_cachedbstart = 702, /* cachedbstart */ + YYSYMBOL_contents_cachedb = 703, /* contents_cachedb */ + YYSYMBOL_content_cachedb = 704, /* content_cachedb */ + YYSYMBOL_cachedb_backend_name = 705, /* cachedb_backend_name */ + YYSYMBOL_cachedb_secret_seed = 706, /* cachedb_secret_seed */ + YYSYMBOL_cachedb_no_store = 707, /* cachedb_no_store */ + YYSYMBOL_redis_server_host = 708, /* redis_server_host */ + YYSYMBOL_redis_server_port = 709, /* redis_server_port */ + YYSYMBOL_redis_server_path = 710, /* redis_server_path */ + YYSYMBOL_redis_server_password = 711, /* redis_server_password */ + YYSYMBOL_redis_timeout = 712, /* redis_timeout */ + YYSYMBOL_redis_expire_records = 713, /* redis_expire_records */ + YYSYMBOL_redis_logical_db = 714, /* redis_logical_db */ + YYSYMBOL_server_tcp_connection_limit = 715, /* server_tcp_connection_limit */ + YYSYMBOL_server_answer_cookie = 716, /* server_answer_cookie */ + YYSYMBOL_server_cookie_secret = 717, /* server_cookie_secret */ + YYSYMBOL_ipsetstart = 718, /* ipsetstart */ + YYSYMBOL_contents_ipset = 719, /* contents_ipset */ + YYSYMBOL_content_ipset = 720, /* content_ipset */ + YYSYMBOL_ipset_name_v4 = 721, /* ipset_name_v4 */ + YYSYMBOL_ipset_name_v6 = 722 /* ipset_name_v6 */ }; typedef enum yysymbol_kind_t yysymbol_kind_t; @@ -1164,19 +1170,19 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 2 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 737 +#define YYLAST 744 /* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 346 +#define YYNTOKENS 349 /* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 371 +#define YYNNTS 374 /* YYNRULES -- Number of rules. */ -#define YYNRULES 719 +#define YYNRULES 725 /* YYNSTATES -- Number of states. */ -#define YYNSTATES 1076 +#define YYNSTATES 1085 /* YYMAXUTOK -- Last valid token kind. */ -#define YYMAXUTOK 600 +#define YYMAXUTOK 603 /* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM @@ -1250,85 +1256,86 @@ static const yytype_int16 yytranslate[] = 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 + 345, 346, 347, 348 }; #if YYDEBUG /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ static const yytype_int16 yyrline[] = { - 0, 204, 204, 204, 205, 205, 206, 206, 207, 207, - 207, 208, 208, 209, 209, 210, 210, 211, 213, 220, - 226, 227, 228, 228, 228, 229, 229, 230, 230, 230, - 231, 231, 231, 232, 232, 232, 233, 233, 234, 235, - 235, 235, 236, 236, 236, 237, 237, 238, 238, 239, - 239, 240, 240, 241, 241, 242, 242, 243, 243, 244, - 244, 245, 245, 245, 246, 246, 247, 247, 247, 248, - 248, 248, 249, 249, 250, 250, 251, 251, 252, 252, - 253, 253, 253, 254, 254, 255, 255, 256, 256, 256, - 257, 257, 258, 258, 259, 259, 260, 260, 260, 261, - 261, 262, 262, 263, 263, 264, 264, 265, 265, 266, - 266, 267, 267, 268, 268, 269, 269, 269, 270, 270, - 270, 271, 271, 271, 272, 272, 272, 272, 273, 274, - 274, 274, 275, 275, 275, 276, 276, 277, 277, 278, - 278, 278, 279, 279, 279, 280, 280, 281, 281, 281, - 282, 283, 283, 283, 284, 284, 284, 285, 285, 286, - 286, 287, 287, 288, 289, 289, 290, 290, 291, 291, - 292, 292, 293, 293, 294, 294, 295, 295, 296, 296, - 297, 297, 298, 298, 299, 299, 300, 300, 300, 301, - 301, 302, 302, 303, 303, 304, 304, 304, 305, 305, - 306, 307, 307, 308, 308, 309, 310, 310, 311, 311, - 312, 312, 312, 313, 313, 314, 314, 314, 315, 315, - 315, 316, 316, 317, 318, 318, 319, 319, 320, 320, - 321, 321, 322, 322, 322, 323, 323, 323, 324, 324, - 324, 325, 325, 326, 326, 327, 327, 328, 328, 328, - 329, 329, 330, 330, 331, 331, 332, 332, 333, 333, - 334, 334, 335, 337, 351, 352, 353, 353, 353, 353, - 353, 354, 354, 354, 356, 370, 371, 372, 372, 372, - 372, 373, 373, 373, 375, 391, 392, 393, 393, 393, - 393, 394, 394, 394, 396, 417, 418, 419, 419, 419, - 419, 420, 420, 420, 421, 421, 421, 424, 443, 460, - 468, 478, 485, 495, 514, 515, 516, 516, 516, 516, - 516, 517, 517, 517, 518, 518, 518, 518, 520, 529, - 538, 549, 558, 567, 576, 585, 596, 605, 617, 631, - 646, 657, 674, 691, 708, 725, 740, 755, 768, 783, - 792, 801, 810, 819, 828, 837, 844, 853, 862, 871, - 880, 889, 898, 907, 916, 925, 938, 949, 960, 971, - 980, 993, 1006, 1015, 1024, 1033, 1040, 1047, 1056, 1063, - 1072, 1080, 1087, 1094, 1102, 1111, 1119, 1135, 1143, 1151, - 1159, 1167, 1175, 1184, 1193, 1207, 1216, 1225, 1234, 1243, - 1252, 1261, 1268, 1275, 1301, 1309, 1316, 1323, 1330, 1337, - 1345, 1353, 1361, 1368, 1379, 1390, 1397, 1406, 1415, 1424, - 1433, 1440, 1447, 1454, 1470, 1478, 1486, 1496, 1506, 1516, - 1530, 1538, 1551, 1562, 1570, 1583, 1592, 1601, 1610, 1619, - 1629, 1639, 1647, 1660, 1669, 1677, 1686, 1694, 1707, 1716, - 1725, 1735, 1742, 1752, 1762, 1772, 1782, 1792, 1802, 1812, - 1822, 1832, 1839, 1846, 1853, 1862, 1871, 1880, 1889, 1896, - 1906, 1914, 1923, 1930, 1948, 1961, 1974, 1987, 1996, 2005, - 2014, 2023, 2033, 2043, 2054, 2063, 2072, 2081, 2090, 2099, - 2108, 2117, 2126, 2139, 2152, 2161, 2168, 2177, 2186, 2195, - 2204, 2214, 2222, 2235, 2243, 2299, 2306, 2321, 2331, 2341, - 2348, 2355, 2362, 2371, 2379, 2386, 2400, 2421, 2442, 2454, - 2466, 2478, 2487, 2508, 2520, 2532, 2541, 2562, 2571, 2580, - 2589, 2597, 2605, 2618, 2631, 2646, 2661, 2670, 2679, 2689, - 2699, 2708, 2717, 2726, 2732, 2741, 2750, 2760, 2770, 2780, - 2789, 2799, 2808, 2821, 2834, 2846, 2860, 2872, 2886, 2895, - 2906, 2915, 2922, 2932, 2939, 2946, 2955, 2964, 2974, 2984, - 2994, 3004, 3011, 3018, 3027, 3036, 3046, 3056, 3066, 3073, - 3080, 3087, 3095, 3105, 3115, 3125, 3135, 3145, 3155, 3211, - 3221, 3229, 3237, 3252, 3261, 3267, 3268, 3269, 3269, 3269, - 3270, 3270, 3270, 3271, 3271, 3273, 3283, 3292, 3299, 3306, - 3313, 3320, 3327, 3334, 3340, 3341, 3342, 3342, 3342, 3343, - 3343, 3343, 3344, 3345, 3345, 3346, 3346, 3347, 3347, 3348, - 3349, 3350, 3351, 3352, 3353, 3355, 3364, 3374, 3381, 3388, - 3397, 3404, 3411, 3418, 3425, 3434, 3443, 3450, 3457, 3467, - 3477, 3487, 3497, 3507, 3517, 3523, 3524, 3525, 3527, 3534, - 3540, 3541, 3542, 3544, 3551, 3561, 3568, 3577, 3585, 3591, - 3592, 3594, 3594, 3594, 3595, 3595, 3596, 3597, 3598, 3599, - 3600, 3602, 3611, 3620, 3627, 3636, 3643, 3652, 3660, 3673, - 3681, 3694, 3700, 3701, 3702, 3702, 3703, 3703, 3703, 3704, - 3704, 3704, 3706, 3718, 3730, 3742, 3757, 3769, 3781, 3794, - 3807, 3818, 3827, 3843, 3849, 3850, 3851, 3851, 3853, 3868 + 0, 205, 205, 205, 206, 206, 207, 207, 208, 208, + 208, 209, 209, 210, 210, 211, 211, 212, 214, 221, + 227, 228, 229, 229, 229, 230, 230, 231, 231, 231, + 232, 232, 232, 233, 233, 233, 234, 234, 235, 236, + 236, 236, 237, 237, 237, 238, 238, 239, 239, 240, + 240, 241, 241, 242, 242, 243, 243, 244, 244, 245, + 245, 246, 246, 246, 247, 247, 248, 248, 248, 249, + 249, 249, 250, 250, 251, 251, 252, 252, 253, 253, + 254, 254, 254, 255, 255, 256, 256, 257, 257, 257, + 258, 258, 259, 259, 260, 260, 261, 261, 261, 262, + 262, 263, 263, 264, 264, 265, 265, 266, 266, 267, + 267, 268, 268, 269, 269, 270, 270, 270, 271, 271, + 271, 272, 272, 272, 273, 273, 273, 273, 274, 275, + 275, 275, 276, 276, 276, 277, 277, 278, 278, 279, + 279, 279, 280, 280, 280, 281, 281, 282, 282, 282, + 283, 284, 284, 284, 285, 285, 285, 286, 286, 287, + 287, 288, 288, 289, 290, 290, 291, 291, 292, 292, + 293, 293, 294, 294, 295, 295, 296, 296, 297, 297, + 298, 298, 299, 299, 300, 300, 301, 301, 301, 302, + 302, 303, 303, 304, 304, 305, 305, 305, 306, 306, + 307, 308, 308, 309, 309, 310, 311, 311, 312, 312, + 313, 313, 313, 314, 314, 315, 315, 315, 316, 316, + 316, 317, 317, 318, 319, 319, 320, 320, 321, 321, + 322, 322, 323, 323, 323, 324, 324, 324, 325, 325, + 325, 326, 326, 327, 327, 328, 328, 329, 329, 329, + 330, 330, 331, 331, 332, 332, 333, 333, 334, 334, + 335, 335, 336, 336, 338, 352, 353, 354, 354, 354, + 354, 354, 355, 355, 355, 357, 371, 372, 373, 373, + 373, 373, 374, 374, 374, 376, 392, 393, 394, 394, + 394, 394, 395, 395, 395, 397, 418, 419, 420, 420, + 420, 420, 421, 421, 421, 422, 422, 422, 425, 444, + 461, 469, 479, 486, 496, 515, 516, 517, 517, 517, + 517, 517, 518, 518, 518, 519, 519, 519, 519, 521, + 530, 539, 550, 559, 568, 577, 586, 597, 606, 618, + 632, 647, 658, 675, 692, 709, 726, 741, 756, 769, + 784, 793, 802, 811, 820, 829, 838, 845, 854, 863, + 872, 881, 890, 899, 908, 917, 926, 939, 950, 961, + 972, 981, 994, 1007, 1016, 1025, 1034, 1041, 1048, 1057, + 1064, 1073, 1081, 1088, 1095, 1103, 1112, 1120, 1136, 1144, + 1152, 1160, 1168, 1176, 1185, 1194, 1208, 1217, 1226, 1235, + 1244, 1253, 1262, 1269, 1276, 1302, 1310, 1317, 1324, 1331, + 1338, 1346, 1354, 1362, 1369, 1380, 1391, 1398, 1407, 1416, + 1425, 1434, 1441, 1448, 1455, 1471, 1479, 1487, 1497, 1507, + 1517, 1531, 1539, 1552, 1563, 1571, 1584, 1593, 1602, 1611, + 1620, 1630, 1640, 1648, 1661, 1670, 1678, 1687, 1695, 1708, + 1717, 1726, 1736, 1743, 1753, 1763, 1773, 1783, 1793, 1803, + 1813, 1823, 1833, 1840, 1847, 1854, 1863, 1872, 1881, 1890, + 1897, 1907, 1915, 1924, 1931, 1949, 1962, 1975, 1988, 1997, + 2006, 2015, 2024, 2034, 2044, 2055, 2064, 2073, 2082, 2091, + 2100, 2109, 2118, 2127, 2136, 2149, 2162, 2171, 2178, 2187, + 2196, 2205, 2214, 2224, 2232, 2245, 2253, 2309, 2316, 2331, + 2341, 2351, 2358, 2365, 2372, 2381, 2389, 2396, 2410, 2431, + 2452, 2464, 2476, 2488, 2497, 2518, 2530, 2542, 2551, 2572, + 2581, 2590, 2599, 2607, 2615, 2628, 2641, 2656, 2671, 2680, + 2689, 2699, 2709, 2718, 2727, 2736, 2742, 2751, 2760, 2770, + 2780, 2790, 2799, 2809, 2818, 2831, 2844, 2856, 2870, 2882, + 2896, 2905, 2916, 2925, 2932, 2942, 2949, 2956, 2965, 2974, + 2984, 2994, 3004, 3014, 3021, 3028, 3037, 3046, 3056, 3066, + 3076, 3083, 3090, 3097, 3105, 3115, 3125, 3135, 3145, 3155, + 3165, 3221, 3231, 3239, 3247, 3262, 3271, 3277, 3278, 3279, + 3279, 3279, 3280, 3280, 3280, 3281, 3281, 3283, 3293, 3302, + 3309, 3316, 3323, 3330, 3337, 3344, 3350, 3351, 3352, 3352, + 3352, 3353, 3353, 3353, 3354, 3355, 3355, 3356, 3356, 3357, + 3357, 3358, 3359, 3360, 3361, 3362, 3363, 3365, 3374, 3384, + 3391, 3398, 3407, 3414, 3421, 3428, 3435, 3444, 3453, 3460, + 3467, 3477, 3487, 3497, 3507, 3517, 3527, 3533, 3534, 3535, + 3537, 3544, 3550, 3551, 3552, 3554, 3561, 3571, 3578, 3587, + 3595, 3601, 3602, 3604, 3604, 3604, 3605, 3605, 3606, 3607, + 3608, 3609, 3610, 3612, 3621, 3630, 3637, 3646, 3653, 3662, + 3670, 3683, 3691, 3704, 3710, 3711, 3712, 3712, 3713, 3713, + 3713, 3714, 3714, 3714, 3715, 3715, 3717, 3729, 3741, 3754, + 3766, 3781, 3793, 3805, 3818, 3831, 3846, 3857, 3866, 3882, + 3888, 3889, 3890, 3890, 3892, 3907 }; #endif @@ -1455,38 +1462,40 @@ static const char *const yytname[] = "VAR_CACHEDB_BACKEND", "VAR_CACHEDB_SECRETSEED", "VAR_CACHEDB_REDISHOST", "VAR_CACHEDB_REDISPORT", "VAR_CACHEDB_REDISTIMEOUT", "VAR_CACHEDB_REDISEXPIRERECORDS", "VAR_CACHEDB_REDISPATH", - "VAR_CACHEDB_REDISPASSWORD", "VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM", - "VAR_FOR_UPSTREAM", "VAR_AUTH_ZONE", "VAR_ZONEFILE", "VAR_MASTER", - "VAR_URL", "VAR_FOR_DOWNSTREAM", "VAR_FALLBACK_ENABLED", - "VAR_TLS_ADDITIONAL_PORT", "VAR_LOW_RTT", "VAR_LOW_RTT_PERMIL", - "VAR_FAST_SERVER_PERMIL", "VAR_FAST_SERVER_NUM", "VAR_ALLOW_NOTIFY", - "VAR_TLS_WIN_CERT", "VAR_TCP_CONNECTION_LIMIT", "VAR_ANSWER_COOKIE", - "VAR_COOKIE_SECRET", "VAR_IP_RATELIMIT_COOKIE", "VAR_FORWARD_NO_CACHE", - "VAR_STUB_NO_CACHE", "VAR_LOG_SERVFAIL", "VAR_DENY_ANY", - "VAR_UNKNOWN_SERVER_TIME_LIMIT", "VAR_LOG_TAG_QUERYREPLY", - "VAR_STREAM_WAIT_SIZE", "VAR_TLS_CIPHERS", "VAR_TLS_CIPHERSUITES", - "VAR_TLS_USE_SNI", "VAR_IPSET", "VAR_IPSET_NAME_V4", "VAR_IPSET_NAME_V6", - "VAR_TLS_SESSION_TICKET_KEYS", "VAR_RPZ", "VAR_TAGS", - "VAR_RPZ_ACTION_OVERRIDE", "VAR_RPZ_CNAME_OVERRIDE", "VAR_RPZ_LOG", - "VAR_RPZ_LOG_NAME", "VAR_DYNLIB", "VAR_DYNLIB_FILE", - "VAR_EDNS_CLIENT_STRING", "VAR_EDNS_CLIENT_STRING_OPCODE", "VAR_NSID", + "VAR_CACHEDB_REDISPASSWORD", "VAR_CACHEDB_REDISLOGICALDB", + "VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM", "VAR_FOR_UPSTREAM", + "VAR_AUTH_ZONE", "VAR_ZONEFILE", "VAR_MASTER", "VAR_URL", + "VAR_FOR_DOWNSTREAM", "VAR_FALLBACK_ENABLED", "VAR_TLS_ADDITIONAL_PORT", + "VAR_LOW_RTT", "VAR_LOW_RTT_PERMIL", "VAR_FAST_SERVER_PERMIL", + "VAR_FAST_SERVER_NUM", "VAR_ALLOW_NOTIFY", "VAR_TLS_WIN_CERT", + "VAR_TCP_CONNECTION_LIMIT", "VAR_ANSWER_COOKIE", "VAR_COOKIE_SECRET", + "VAR_IP_RATELIMIT_COOKIE", "VAR_FORWARD_NO_CACHE", "VAR_STUB_NO_CACHE", + "VAR_LOG_SERVFAIL", "VAR_DENY_ANY", "VAR_UNKNOWN_SERVER_TIME_LIMIT", + "VAR_LOG_TAG_QUERYREPLY", "VAR_STREAM_WAIT_SIZE", "VAR_TLS_CIPHERS", + "VAR_TLS_CIPHERSUITES", "VAR_TLS_USE_SNI", "VAR_IPSET", + "VAR_IPSET_NAME_V4", "VAR_IPSET_NAME_V6", "VAR_TLS_SESSION_TICKET_KEYS", + "VAR_RPZ", "VAR_TAGS", "VAR_RPZ_ACTION_OVERRIDE", + "VAR_RPZ_CNAME_OVERRIDE", "VAR_RPZ_LOG", "VAR_RPZ_LOG_NAME", + "VAR_DYNLIB", "VAR_DYNLIB_FILE", "VAR_EDNS_CLIENT_STRING", + "VAR_EDNS_CLIENT_STRING_OPCODE", "VAR_NSID", "VAR_ZONEMD_PERMISSIVE_MODE", "VAR_ZONEMD_CHECK", "VAR_ZONEMD_REJECT_ABSENCE", "VAR_RPZ_SIGNAL_NXDOMAIN_RA", "VAR_INTERFACE_AUTOMATIC_PORTS", "VAR_EDE", "VAR_INTERFACE_ACTION", "VAR_INTERFACE_VIEW", "VAR_INTERFACE_TAG", "VAR_INTERFACE_TAG_ACTION", "VAR_INTERFACE_TAG_DATA", "VAR_PROXY_PROTOCOL_PORT", "VAR_STATISTICS_INHIBIT_ZERO", "VAR_HARDEN_UNKNOWN_ADDITIONAL", - "$accept", "toplevelvars", "toplevelvar", "force_toplevel", - "serverstart", "contents_server", "content_server", "stubstart", - "contents_stub", "content_stub", "forwardstart", "contents_forward", - "content_forward", "viewstart", "contents_view", "content_view", - "authstart", "contents_auth", "content_auth", "rpz_tag", - "rpz_action_override", "rpz_cname_override", "rpz_log", "rpz_log_name", - "rpz_signal_nxdomain_ra", "rpzstart", "contents_rpz", "content_rpz", - "server_num_threads", "server_verbosity", "server_statistics_interval", - "server_statistics_cumulative", "server_extended_statistics", - "server_statistics_inhibit_zero", "server_shm_enable", "server_shm_key", - "server_port", "server_send_client_subnet", "server_client_subnet_zone", + "VAR_DISABLE_EDNS_DO", "VAR_CACHEDB_NO_STORE", "$accept", "toplevelvars", + "toplevelvar", "force_toplevel", "serverstart", "contents_server", + "content_server", "stubstart", "contents_stub", "content_stub", + "forwardstart", "contents_forward", "content_forward", "viewstart", + "contents_view", "content_view", "authstart", "contents_auth", + "content_auth", "rpz_tag", "rpz_action_override", "rpz_cname_override", + "rpz_log", "rpz_log_name", "rpz_signal_nxdomain_ra", "rpzstart", + "contents_rpz", "content_rpz", "server_num_threads", "server_verbosity", + "server_statistics_interval", "server_statistics_cumulative", + "server_extended_statistics", "server_statistics_inhibit_zero", + "server_shm_enable", "server_shm_key", "server_port", + "server_send_client_subnet", "server_client_subnet_zone", "server_client_subnet_always_forward", "server_client_subnet_opcode", "server_max_client_subnet_ipv4", "server_max_client_subnet_ipv6", "server_min_client_subnet_ipv4", "server_min_client_subnet_ipv6", @@ -1550,13 +1559,13 @@ static const char *const yytname[] = "server_cache_min_ttl", "server_bogus_ttl", "server_val_clean_additional", "server_val_permissive_mode", "server_aggressive_nsec", "server_ignore_cd_flag", - "server_serve_expired", "server_serve_expired_ttl", - "server_serve_expired_ttl_reset", "server_serve_expired_reply_ttl", - "server_serve_expired_client_timeout", "server_ede_serve_expired", - "server_serve_original_ttl", "server_fake_dsa", "server_fake_sha1", - "server_val_log_level", "server_val_nsec3_keysize_iterations", - "server_zonemd_permissive_mode", "server_add_holddown", - "server_del_holddown", "server_keep_missing", + "server_disable_edns_do", "server_serve_expired", + "server_serve_expired_ttl", "server_serve_expired_ttl_reset", + "server_serve_expired_reply_ttl", "server_serve_expired_client_timeout", + "server_ede_serve_expired", "server_serve_original_ttl", + "server_fake_dsa", "server_fake_sha1", "server_val_log_level", + "server_val_nsec3_keysize_iterations", "server_zonemd_permissive_mode", + "server_add_holddown", "server_del_holddown", "server_keep_missing", "server_permit_small_holddown", "server_key_cache_size", "server_key_cache_slabs", "server_neg_cache_size", "server_local_zone", "server_local_data", "server_local_data_ptr", "server_minimal_responses", @@ -1620,9 +1629,10 @@ static const char *const yytname[] = "dnsc_dnscrypt_shared_secret_cache_slabs", "dnsc_dnscrypt_nonce_cache_size", "dnsc_dnscrypt_nonce_cache_slabs", "cachedbstart", "contents_cachedb", "content_cachedb", - "cachedb_backend_name", "cachedb_secret_seed", "redis_server_host", - "redis_server_port", "redis_server_path", "redis_server_password", - "redis_timeout", "redis_expire_records", "server_tcp_connection_limit", + "cachedb_backend_name", "cachedb_secret_seed", "cachedb_no_store", + "redis_server_host", "redis_server_port", "redis_server_path", + "redis_server_password", "redis_timeout", "redis_expire_records", + "redis_logical_db", "server_tcp_connection_limit", "server_answer_cookie", "server_cookie_secret", "ipsetstart", "contents_ipset", "content_ipset", "ipset_name_v4", "ipset_name_v6", YY_NULLPTR }; @@ -1673,11 +1683,11 @@ static const yytype_int16 yytoknum[] = 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 + 595, 596, 597, 598, 599, 600, 601, 602, 603 }; #endif -#define YYPACT_NINF (-292) +#define YYPACT_NINF (-293) #define yypact_value_is_default(Yyn) \ ((Yyn) == YYPACT_NINF) @@ -1691,114 +1701,115 @@ static const yytype_int16 yytoknum[] = STATE-NUM. */ static const yytype_int16 yypact[] = { - -292, 266, -292, -292, -292, -292, -292, -292, -292, -292, - -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, - -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, - -292, -292, -13, 198, 226, 229, 56, 43, 302, -14, - -81, -291, 132, 129, -284, 31, 32, 33, 75, 76, - 77, 78, 79, 81, 82, 83, 89, 94, 121, 122, - 123, 125, 126, 134, 168, 213, 215, 236, 239, 240, - 241, 242, 243, 244, 245, 257, 258, 259, 260, 261, - 262, 264, 269, 270, 275, 278, 284, 285, 294, 295, - 296, 298, 299, 301, 305, 311, 312, 323, 328, 330, - 331, 332, 342, 343, 344, 346, 348, 349, 350, 351, - 352, 353, 361, 363, 364, 366, 367, 369, 370, 371, - 373, 374, 375, 376, 377, 378, 407, 408, 409, 410, - 411, 414, 415, 416, 417, 418, 419, 420, 421, 422, - 423, 424, 425, 426, 427, 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, 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, 493, 494, 495, - 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, - 507, 508, 509, 510, 511, 512, 513, 515, 516, 517, - 518, 519, 520, 521, 522, 524, 525, 526, 527, 528, - 529, 530, 531, 532, 533, 534, 536, 537, 538, 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, 568, 569, 570, - 571, 572, 574, 575, 576, 578, -292, -292, -292, -292, - -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, - -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, - -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, - -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, - -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, - -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, - -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, - -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, - -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, - -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, - -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, - -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, - -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, - -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, - -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, - -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, - -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, - -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, - -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, - -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, - -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, - -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, - -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, - -292, -292, -292, -292, -292, -292, -292, -292, 579, 580, - 581, 582, 584, 585, 586, 587, -292, -292, -292, -292, - -292, -292, -292, -292, -292, 588, 589, 590, 591, 592, - 593, 594, -292, -292, -292, -292, -292, -292, -292, -292, - 595, 596, 597, 598, 599, 600, 601, -292, -292, -292, - -292, -292, -292, -292, -292, 602, 603, 604, 605, 606, - 607, 608, 609, 610, 611, -292, -292, -292, -292, -292, - -292, -292, -292, -292, -292, -292, 612, 613, 614, 615, - 616, 617, -292, -292, -292, -292, -292, -292, -292, -292, - -292, -292, -292, -292, -292, 618, 619, 620, 621, 622, - 623, 624, 625, -292, -292, -292, -292, -292, -292, -292, - -292, -292, 626, 627, 628, 629, 630, 631, 632, 633, - 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, - 644, -292, -292, -292, -292, -292, -292, -292, -292, -292, - -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, - -292, 645, -292, -292, 646, -292, -292, 647, 648, 649, - 650, 651, 652, 653, 654, 655, 656, -292, -292, -292, - -292, -292, -292, -292, -292, -292, -292, -292, 657, 658, - 659, 660, 661, 662, 663, 664, -292, -292, -292, -292, - -292, -292, -292, -292, -292, 665, 666, -292, -292, -292, - -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, - -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, - -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, - -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, - -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, - -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, - -292, -292, 667, 668, -292, -292, -292, -292, -292, -292, - -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, - -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, - -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, - -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, - -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, - -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, - -292, -292, -292, -292, 669, 670, 671, -292, -292, -292, - -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, - 672, 673, -292, -292, -292, -292, -292, -292, -292, -292, - -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, - -292, -292, -292, 674, 675, 676, 677, 678, 679, -292, - -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, - -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, - -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, - -292, -292, -292, -292, 680, -292, -292, -292, -292, -292, - -292, -292, -292, -292, -292, -292, -292, 681, -292, -292, - -292, -292, -292, 682, 683, 684, 685, 686, -292, -292, - -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, - -292, -292, -292, -292, -292, -292, -292, 687, -292, -292, - 688, 689, -292, -292, -292, -292, -292, -292, -292, -292, - -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, - -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, - -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, - -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, - -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, - -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, - -292, -292, -292, -292, -292, -292, -292, 690, 691, 692, - -292, -292, -292, -292, -292, -292, 693, 694, -292, -292, - -292, -292, -292, -292, -292, -292 + -293, 267, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -13, 199, 122, 230, 56, 43, 272, 228, + -81, -292, -100, 112, -285, 31, 32, 33, 75, 76, + 77, 78, 79, 81, 82, 83, 89, 94, 121, 123, + 125, 126, 134, 160, 161, 162, 163, 164, 165, 166, + 213, 215, 235, 237, 240, 241, 242, 243, 244, 245, + 259, 260, 262, 263, 264, 265, 270, 271, 273, 276, + 279, 285, 286, 295, 296, 297, 299, 300, 302, 306, + 312, 313, 329, 331, 332, 333, 343, 344, 345, 347, + 349, 350, 351, 352, 353, 354, 370, 371, 372, 374, + 375, 376, 377, 378, 379, 410, 411, 412, 415, 416, + 417, 418, 419, 421, 422, 423, 424, 425, 426, 427, + 428, 430, 431, 432, 433, 434, 435, 436, 437, 438, + 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 451, 452, 453, 454, 455, 456, 457, 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, 494, 495, 496, 497, 499, 500, 501, 502, + 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, + 513, 514, 516, 517, 518, 519, 520, 521, 522, 523, + 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, + 534, 535, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 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, 576, + 577, 578, 580, 581, 582, 583, 584, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + 586, 587, 588, 589, 590, 591, 592, 593, -293, -293, + -293, -293, -293, -293, -293, -293, -293, 594, 595, 596, + 597, 598, 599, 600, -293, -293, -293, -293, -293, -293, + -293, -293, 601, 602, 603, 604, 605, 606, 607, -293, + -293, -293, -293, -293, -293, -293, -293, 608, 609, 610, + 611, 612, 613, 614, 615, 616, 617, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, 618, 619, + 620, 621, 622, 623, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, 624, 625, 626, + 627, 628, 629, 630, 631, -293, -293, -293, -293, -293, + -293, -293, -293, -293, 632, 633, 634, 635, 636, 637, + 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, + 648, 649, 650, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, 651, -293, -293, 652, -293, -293, 653, + 654, 655, 656, 657, 658, 659, 660, 661, 662, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, 673, 674, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, 675, 676, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + 677, 678, 679, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, 680, 681, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, 682, + 683, 684, 685, 686, 687, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + 688, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, 689, -293, -293, -293, -293, -293, 690, + 691, 692, 693, 694, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, 695, -293, -293, 696, 697, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, 698, 699, 700, -293, + -293, -293, -293, -293, -293, 701, 702, -293, -293, -293, + -293, -293, -293, -293, -293 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. @@ -1806,10 +1817,10 @@ static const yytype_int16 yypact[] = means the default is an error. */ static const yytype_int16 yydefact[] = { - 2, 0, 1, 18, 19, 263, 274, 594, 654, 613, - 284, 668, 691, 294, 713, 313, 659, 3, 17, 21, - 265, 276, 286, 296, 315, 596, 615, 656, 661, 670, - 693, 715, 4, 5, 6, 10, 14, 15, 8, 9, + 2, 0, 1, 18, 19, 264, 275, 596, 656, 615, + 285, 670, 693, 295, 719, 314, 661, 3, 17, 21, + 266, 277, 287, 297, 316, 598, 617, 658, 663, 672, + 695, 721, 4, 5, 6, 10, 14, 15, 8, 9, 7, 16, 11, 12, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1834,172 +1845,173 @@ static const yytype_int16 yydefact[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 20, 22, 23, 90, - 93, 102, 261, 218, 219, 24, 172, 173, 174, 175, - 176, 177, 178, 179, 180, 181, 39, 81, 25, 94, - 95, 50, 74, 89, 258, 26, 27, 28, 31, 32, - 29, 30, 33, 34, 35, 255, 256, 257, 36, 37, - 38, 126, 230, 127, 129, 130, 131, 232, 237, 233, - 244, 245, 246, 250, 132, 133, 134, 135, 136, 137, - 138, 214, 91, 80, 106, 124, 125, 242, 239, 128, - 40, 41, 42, 43, 44, 82, 96, 97, 113, 68, - 78, 69, 222, 223, 107, 60, 61, 221, 64, 62, - 63, 65, 253, 117, 121, 142, 154, 186, 157, 243, - 118, 75, 45, 46, 47, 104, 143, 144, 145, 146, - 48, 49, 51, 52, 54, 55, 53, 151, 152, 158, - 56, 57, 58, 66, 85, 122, 99, 153, 262, 92, - 182, 100, 101, 119, 120, 240, 105, 59, 83, 86, - 195, 67, 70, 108, 109, 110, 84, 183, 111, 71, - 72, 73, 231, 123, 205, 206, 207, 208, 209, 210, - 211, 212, 220, 112, 79, 254, 114, 115, 116, 184, - 76, 77, 98, 87, 88, 103, 139, 140, 241, 141, - 147, 148, 149, 150, 187, 188, 190, 192, 193, 191, - 194, 197, 198, 199, 196, 215, 155, 249, 156, 161, - 162, 159, 160, 163, 164, 166, 165, 168, 167, 169, - 170, 171, 234, 236, 235, 185, 200, 201, 202, 203, - 204, 224, 226, 225, 227, 228, 229, 251, 252, 259, - 260, 189, 213, 216, 217, 238, 247, 248, 0, 0, - 0, 0, 0, 0, 0, 0, 264, 266, 267, 268, - 270, 271, 272, 273, 269, 0, 0, 0, 0, 0, - 0, 0, 275, 277, 278, 279, 280, 281, 282, 283, - 0, 0, 0, 0, 0, 0, 0, 285, 287, 288, - 291, 292, 289, 293, 290, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 295, 297, 298, 299, 300, - 304, 305, 306, 301, 302, 303, 0, 0, 0, 0, - 0, 0, 318, 322, 323, 324, 325, 326, 314, 316, - 317, 319, 320, 321, 327, 0, 0, 0, 0, 0, - 0, 0, 0, 595, 597, 599, 598, 604, 600, 601, - 602, 603, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 20, 22, 23, + 90, 93, 102, 261, 218, 219, 24, 172, 173, 174, + 175, 176, 177, 178, 179, 180, 181, 39, 81, 25, + 94, 95, 50, 74, 89, 258, 26, 27, 28, 31, + 32, 29, 30, 33, 34, 35, 255, 256, 257, 36, + 37, 38, 126, 230, 127, 129, 130, 131, 232, 237, + 233, 244, 245, 246, 250, 132, 133, 134, 135, 136, + 137, 138, 214, 91, 80, 106, 124, 125, 242, 239, + 128, 40, 41, 42, 43, 44, 82, 96, 97, 113, + 68, 78, 69, 222, 223, 107, 60, 61, 221, 64, + 62, 63, 65, 253, 117, 121, 142, 154, 186, 157, + 243, 118, 75, 45, 46, 47, 104, 143, 144, 145, + 146, 48, 49, 51, 52, 54, 55, 53, 151, 152, + 158, 56, 57, 58, 66, 85, 122, 99, 153, 262, + 92, 182, 100, 101, 119, 120, 240, 105, 59, 83, + 86, 195, 67, 70, 108, 109, 110, 84, 183, 111, + 71, 72, 73, 231, 123, 263, 205, 206, 207, 208, + 209, 210, 211, 212, 220, 112, 79, 254, 114, 115, + 116, 184, 76, 77, 98, 87, 88, 103, 139, 140, + 241, 141, 147, 148, 149, 150, 187, 188, 190, 192, + 193, 191, 194, 197, 198, 199, 196, 215, 155, 249, + 156, 161, 162, 159, 160, 163, 164, 166, 165, 168, + 167, 169, 170, 171, 234, 236, 235, 185, 200, 201, + 202, 203, 204, 224, 226, 225, 227, 228, 229, 251, + 252, 259, 260, 189, 213, 216, 217, 238, 247, 248, + 0, 0, 0, 0, 0, 0, 0, 0, 265, 267, + 268, 269, 271, 272, 273, 274, 270, 0, 0, 0, + 0, 0, 0, 0, 276, 278, 279, 280, 281, 282, + 283, 284, 0, 0, 0, 0, 0, 0, 0, 286, + 288, 289, 292, 293, 290, 294, 291, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 296, 298, 299, + 300, 301, 305, 306, 307, 302, 303, 304, 0, 0, + 0, 0, 0, 0, 319, 323, 324, 325, 326, 327, + 315, 317, 318, 320, 321, 322, 328, 0, 0, 0, + 0, 0, 0, 0, 0, 597, 599, 601, 600, 606, + 602, 603, 604, 605, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 614, 616, 618, 617, 619, 620, 621, 622, 623, + 0, 0, 0, 616, 618, 620, 619, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, - 634, 0, 655, 657, 0, 660, 662, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 669, 671, 672, - 673, 675, 676, 674, 677, 678, 679, 680, 0, 0, - 0, 0, 0, 0, 0, 0, 692, 694, 695, 696, - 697, 700, 701, 698, 699, 0, 0, 714, 716, 717, - 329, 328, 336, 349, 347, 361, 356, 357, 358, 362, - 359, 360, 363, 364, 365, 369, 370, 371, 401, 402, - 403, 404, 405, 433, 434, 435, 441, 442, 352, 443, - 444, 447, 445, 446, 451, 452, 453, 468, 416, 417, - 420, 421, 454, 472, 410, 412, 473, 480, 481, 482, - 353, 432, 501, 502, 411, 495, 394, 348, 406, 469, - 477, 455, 0, 0, 505, 354, 330, 393, 460, 331, - 350, 351, 407, 408, 503, 457, 462, 463, 367, 366, - 332, 506, 436, 467, 395, 415, 474, 475, 476, 479, - 494, 409, 499, 497, 498, 424, 431, 464, 465, 425, - 426, 456, 484, 396, 397, 400, 372, 374, 368, 375, - 376, 377, 378, 385, 386, 387, 388, 389, 390, 391, - 507, 508, 510, 437, 438, 439, 440, 448, 449, 450, - 511, 512, 513, 514, 0, 0, 0, 458, 427, 429, - 664, 527, 532, 530, 529, 533, 531, 540, 541, 542, - 0, 0, 536, 537, 538, 539, 337, 338, 339, 340, - 341, 342, 343, 344, 345, 346, 461, 478, 500, 546, - 547, 428, 515, 0, 0, 0, 0, 0, 0, 485, - 486, 487, 488, 489, 490, 491, 492, 493, 665, 418, - 419, 422, 413, 483, 392, 334, 335, 414, 548, 549, - 550, 551, 552, 554, 553, 555, 556, 557, 373, 380, - 543, 545, 544, 379, 0, 711, 712, 528, 399, 466, - 509, 398, 430, 381, 382, 384, 383, 0, 559, 423, - 496, 355, 560, 0, 0, 0, 0, 0, 561, 333, - 459, 562, 563, 564, 569, 567, 568, 565, 566, 570, - 571, 572, 573, 575, 576, 574, 587, 0, 591, 592, - 0, 0, 593, 577, 585, 578, 579, 580, 584, 586, - 581, 582, 583, 307, 308, 309, 310, 311, 312, 605, - 607, 606, 609, 610, 611, 612, 608, 635, 637, 638, - 639, 640, 641, 642, 643, 644, 645, 636, 646, 647, - 648, 649, 650, 651, 652, 653, 658, 663, 681, 682, - 683, 686, 684, 685, 687, 688, 689, 690, 702, 703, - 704, 705, 708, 709, 706, 707, 718, 719, 470, 504, - 526, 666, 667, 534, 535, 516, 517, 0, 0, 0, - 521, 710, 558, 471, 525, 522, 0, 0, 588, 589, - 590, 520, 518, 519, 523, 524 + 634, 635, 636, 0, 657, 659, 0, 662, 664, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 671, + 673, 674, 675, 677, 678, 676, 679, 680, 681, 682, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 694, 696, 697, 704, 698, 699, 702, 703, 700, 701, + 705, 0, 0, 720, 722, 723, 330, 329, 337, 350, + 348, 362, 357, 358, 359, 363, 360, 361, 364, 365, + 366, 370, 371, 372, 402, 403, 404, 405, 406, 434, + 435, 436, 442, 443, 353, 444, 445, 448, 446, 447, + 452, 453, 454, 469, 417, 418, 421, 422, 455, 473, + 411, 413, 474, 481, 482, 483, 354, 433, 503, 504, + 412, 497, 395, 349, 407, 470, 478, 456, 0, 0, + 507, 355, 331, 394, 461, 332, 351, 352, 408, 409, + 505, 458, 463, 464, 368, 367, 333, 508, 437, 468, + 396, 416, 475, 476, 477, 480, 496, 410, 501, 499, + 500, 425, 432, 465, 466, 426, 427, 457, 485, 397, + 398, 401, 373, 375, 369, 376, 377, 378, 379, 386, + 387, 388, 389, 390, 391, 392, 509, 510, 512, 438, + 439, 440, 441, 449, 450, 451, 513, 514, 515, 516, + 0, 0, 0, 459, 428, 430, 666, 529, 534, 532, + 531, 535, 533, 542, 543, 544, 0, 0, 538, 539, + 540, 541, 338, 339, 340, 341, 342, 343, 344, 345, + 346, 347, 462, 479, 502, 548, 549, 429, 517, 0, + 0, 0, 0, 0, 0, 487, 488, 489, 490, 491, + 492, 493, 494, 495, 667, 419, 420, 423, 414, 484, + 393, 335, 336, 415, 550, 551, 552, 553, 554, 556, + 555, 557, 558, 559, 374, 381, 545, 547, 546, 380, + 0, 717, 718, 530, 400, 467, 511, 399, 431, 382, + 383, 385, 384, 0, 561, 424, 498, 356, 562, 0, + 0, 0, 0, 0, 563, 334, 460, 486, 564, 565, + 566, 571, 569, 570, 567, 568, 572, 573, 574, 575, + 577, 578, 576, 589, 0, 593, 594, 0, 0, 595, + 579, 587, 580, 581, 582, 586, 588, 583, 584, 585, + 308, 309, 310, 311, 312, 313, 607, 609, 608, 611, + 612, 613, 614, 610, 637, 639, 640, 641, 642, 643, + 644, 645, 646, 647, 638, 648, 649, 650, 651, 652, + 653, 654, 655, 660, 665, 683, 684, 685, 688, 686, + 687, 689, 690, 691, 692, 706, 707, 709, 710, 713, + 714, 711, 712, 715, 708, 724, 725, 471, 506, 528, + 668, 669, 536, 537, 518, 519, 0, 0, 0, 523, + 716, 560, 472, 527, 524, 0, 0, 590, 591, 592, + 522, 520, 521, 525, 526 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { - -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, - -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, - -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, - -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, - -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, - -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, - -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, - -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, - -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, - -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, - -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, - -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, - -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, - -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, - -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, - -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, - -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, - -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, - -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, - -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, - -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, - -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, - -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, - -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, - -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, - -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, - -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, - -292, -292, -292, -292, -292, -292, -292, 695, 696, 697, - 698, 699, -292, -292, 700, -292, -292, -292, -292, -292, - -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, - -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, - -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, - -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, - -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, - -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, - -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, - -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, - -292 + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, 95, 703, + 704, 705, 706, -293, -293, 707, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { - 0, 1, 17, 18, 19, 32, 286, 20, 33, 536, - 21, 34, 552, 22, 35, 567, 23, 36, 585, 602, - 603, 604, 605, 606, 607, 24, 37, 608, 287, 288, - 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, - 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, - 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, - 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, - 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, - 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, - 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, - 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, - 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, - 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, - 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, - 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, - 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, - 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, - 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, - 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, - 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, - 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, - 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, 537, 538, 539, 540, 541, 542, 543, 544, - 553, 554, 555, 556, 557, 558, 559, 586, 587, 588, - 589, 590, 591, 592, 593, 594, 595, 568, 569, 570, - 571, 572, 573, 574, 25, 38, 623, 624, 625, 626, - 627, 628, 629, 630, 631, 26, 39, 651, 652, 653, - 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, - 664, 665, 666, 667, 668, 669, 670, 27, 40, 672, - 673, 28, 41, 675, 676, 521, 522, 523, 524, 29, - 42, 687, 688, 689, 690, 691, 692, 693, 694, 695, - 696, 697, 30, 43, 706, 707, 708, 709, 710, 711, - 712, 713, 714, 525, 526, 527, 31, 44, 717, 718, - 719 + 0, 1, 17, 18, 19, 32, 287, 20, 33, 538, + 21, 34, 554, 22, 35, 569, 23, 36, 587, 604, + 605, 606, 607, 608, 609, 24, 37, 610, 288, 289, + 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, + 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, + 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, + 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, + 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, + 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, + 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, + 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, + 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, + 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, + 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, + 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, + 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, + 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 484, 485, 486, 487, 488, 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, 539, 540, 541, 542, 543, 544, 545, + 546, 555, 556, 557, 558, 559, 560, 561, 588, 589, + 590, 591, 592, 593, 594, 595, 596, 597, 570, 571, + 572, 573, 574, 575, 576, 25, 38, 625, 626, 627, + 628, 629, 630, 631, 632, 633, 26, 39, 653, 654, + 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 27, 40, + 674, 675, 28, 41, 677, 678, 523, 524, 525, 526, + 29, 42, 689, 690, 691, 692, 693, 694, 695, 696, + 697, 698, 699, 30, 43, 710, 711, 712, 713, 714, + 715, 716, 717, 718, 719, 720, 527, 528, 529, 31, + 44, 723, 724, 725 }; /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If @@ -2010,77 +2022,78 @@ static const yytype_int16 yytable[] = 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, - 75, 76, 77, 78, 715, 716, 671, 674, 79, 80, - 81, 720, 721, 722, 82, 83, 84, 85, 86, 87, + 75, 76, 77, 78, 721, 722, 673, 676, 79, 80, + 81, 726, 727, 728, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, - 118, 119, 120, 121, 122, 723, 724, 725, 726, 727, - 575, 728, 729, 730, 123, 124, 125, 126, 127, 731, - 128, 129, 130, 575, 732, 131, 132, 133, 134, 135, + 118, 119, 120, 121, 122, 729, 730, 731, 732, 733, + 577, 734, 735, 736, 123, 124, 125, 126, 127, 737, + 128, 129, 130, 577, 738, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, - 156, 733, 734, 735, 157, 736, 737, 158, 159, 160, - 161, 162, 163, 164, 738, 165, 166, 167, 168, 169, - 170, 171, 172, 173, 174, 175, 176, 177, 178, 632, - 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, - 643, 644, 645, 646, 647, 648, 649, 650, 739, 179, + 156, 739, 611, 740, 157, 741, 742, 158, 159, 160, + 161, 162, 163, 164, 743, 165, 166, 167, 168, 169, + 170, 171, 172, 173, 174, 175, 176, 177, 178, 679, + 680, 681, 682, 683, 684, 685, 686, 687, 688, 547, + 744, 745, 746, 747, 748, 749, 750, 548, 549, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, - 220, 221, 222, 740, 223, 741, 224, 225, 226, 227, + 220, 221, 222, 751, 223, 752, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, - 238, 239, 240, 241, 242, 528, 742, 529, 530, 743, - 744, 745, 746, 747, 748, 749, 243, 244, 245, 246, - 247, 248, 249, 250, 251, 252, 2, 750, 751, 752, - 753, 754, 755, 545, 756, 253, 560, 3, 4, 757, - 758, 546, 547, 254, 255, 759, 256, 257, 760, 258, - 259, 260, 261, 262, 761, 762, 263, 264, 265, 266, - 267, 268, 269, 270, 763, 764, 765, 271, 766, 767, - 531, 768, 561, 562, 5, 769, 272, 273, 274, 275, - 6, 770, 771, 276, 277, 278, 279, 280, 281, 282, - 283, 284, 285, 772, 577, 578, 579, 580, 773, 563, - 774, 775, 776, 532, 582, 576, 533, 577, 578, 579, - 580, 581, 777, 778, 779, 534, 780, 582, 781, 782, - 783, 784, 785, 786, 7, 596, 597, 598, 599, 600, - 548, 787, 549, 788, 789, 550, 790, 791, 601, 792, - 793, 794, 8, 795, 796, 797, 798, 799, 800, 583, - 584, 677, 678, 679, 680, 681, 682, 683, 684, 685, - 686, 615, 616, 617, 618, 619, 620, 621, 622, 698, - 699, 700, 701, 702, 703, 704, 705, 801, 802, 803, - 804, 805, 564, 565, 806, 807, 808, 809, 810, 811, - 812, 813, 814, 815, 816, 817, 818, 819, 9, 820, - 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, - 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, - 841, 842, 843, 844, 845, 846, 847, 566, 848, 849, + 238, 239, 240, 241, 242, 753, 530, 754, 531, 532, + 755, 756, 757, 758, 759, 760, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 550, 2, 551, 761, + 762, 552, 763, 764, 765, 766, 253, 562, 3, 4, + 767, 768, 0, 769, 254, 255, 770, 256, 257, 771, + 258, 259, 260, 261, 262, 772, 773, 263, 264, 265, + 266, 267, 268, 269, 270, 774, 775, 776, 271, 777, + 778, 533, 779, 563, 564, 5, 780, 272, 273, 274, + 275, 6, 781, 782, 276, 277, 278, 279, 280, 281, + 282, 283, 284, 285, 286, 579, 580, 581, 582, 783, + 565, 784, 785, 786, 534, 584, 578, 535, 579, 580, + 581, 582, 583, 787, 788, 789, 536, 790, 584, 791, + 792, 793, 794, 795, 796, 7, 598, 599, 600, 601, + 602, 617, 618, 619, 620, 621, 622, 623, 624, 603, + 797, 798, 799, 8, 800, 801, 802, 803, 804, 805, + 585, 586, 700, 701, 702, 703, 704, 705, 706, 707, + 708, 634, 635, 636, 637, 638, 639, 640, 641, 642, + 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, + 806, 807, 808, 566, 567, 809, 810, 811, 812, 813, + 553, 814, 815, 816, 817, 818, 819, 820, 821, 9, + 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, + 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, + 709, 842, 843, 844, 845, 846, 847, 848, 568, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, - 880, 881, 10, 882, 883, 884, 535, 885, 886, 887, + 880, 881, 882, 10, 883, 884, 885, 886, 537, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, - 898, 899, 900, 901, 11, 902, 903, 904, 905, 906, - 907, 908, 909, 551, 910, 911, 912, 913, 914, 915, - 916, 917, 918, 919, 920, 12, 921, 922, 923, 924, - 925, 926, 927, 928, 929, 930, 13, 931, 932, 933, - 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, - 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, - 954, 955, 956, 14, 957, 958, 959, 15, 960, 961, - 962, 963, 964, 16, 965, 966, 967, 968, 969, 970, - 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, - 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, - 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, - 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, - 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, - 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, - 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, - 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, - 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, - 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, - 1071, 1072, 1073, 1074, 1075, 0, 0, 0, 0, 0, + 898, 899, 900, 901, 902, 11, 903, 904, 905, 906, + 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, + 917, 918, 919, 920, 921, 922, 12, 923, 924, 925, + 926, 927, 928, 929, 930, 931, 932, 933, 13, 934, + 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, + 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, + 955, 956, 957, 958, 959, 14, 960, 961, 962, 15, + 963, 964, 965, 966, 967, 16, 968, 969, 970, 971, + 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, + 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, + 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, + 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, + 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, + 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, + 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, + 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, + 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, + 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, + 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, + 1082, 1083, 1084, 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, 609, 610, 611, 612, 613, 614 + 612, 613, 614, 615, 616 }; static const yytype_int16 yycheck[] = @@ -2088,7 +2101,7 @@ static const yytype_int16 yycheck[] = 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, - 43, 44, 45, 46, 318, 319, 117, 328, 51, 52, + 43, 44, 45, 46, 319, 320, 117, 329, 51, 52, 53, 10, 10, 10, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, @@ -2098,53 +2111,53 @@ static const yytype_int16 yycheck[] = 113, 114, 115, 47, 10, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, - 143, 10, 10, 10, 147, 10, 10, 150, 151, 152, + 143, 10, 37, 10, 147, 10, 10, 150, 151, 152, 153, 154, 155, 156, 10, 158, 159, 160, 161, 162, - 163, 164, 165, 166, 167, 168, 169, 170, 171, 173, - 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, - 184, 185, 186, 187, 188, 189, 190, 191, 10, 192, + 163, 164, 165, 166, 167, 168, 169, 170, 171, 259, + 260, 261, 262, 263, 264, 265, 266, 267, 268, 47, + 10, 10, 10, 10, 10, 10, 10, 55, 56, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 10, 237, 10, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, - 253, 254, 255, 256, 257, 47, 10, 49, 50, 10, + 253, 254, 255, 256, 257, 10, 47, 10, 49, 50, 10, 10, 10, 10, 10, 10, 269, 270, 271, 272, - 273, 274, 275, 276, 277, 278, 0, 10, 10, 10, - 10, 10, 10, 47, 10, 288, 47, 11, 12, 10, - 10, 55, 56, 296, 297, 10, 299, 300, 10, 302, - 303, 304, 305, 306, 10, 10, 309, 310, 311, 312, - 313, 314, 315, 316, 10, 10, 10, 320, 10, 10, - 112, 10, 83, 84, 48, 10, 329, 330, 331, 332, - 54, 10, 10, 336, 337, 338, 339, 340, 341, 342, - 343, 344, 345, 10, 291, 292, 293, 294, 10, 110, - 10, 10, 10, 145, 301, 289, 148, 291, 292, 293, - 294, 295, 10, 10, 10, 157, 10, 301, 10, 10, - 10, 10, 10, 10, 98, 322, 323, 324, 325, 326, - 144, 10, 146, 10, 10, 149, 10, 10, 335, 10, - 10, 10, 116, 10, 10, 10, 10, 10, 10, 333, - 334, 259, 260, 261, 262, 263, 264, 265, 266, 267, - 268, 99, 100, 101, 102, 103, 104, 105, 106, 280, - 281, 282, 283, 284, 285, 286, 287, 10, 10, 10, - 10, 10, 193, 194, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 172, 10, + 273, 274, 275, 276, 277, 278, 144, 0, 146, 10, + 10, 149, 10, 10, 10, 10, 289, 47, 11, 12, + 10, 10, -1, 10, 297, 298, 10, 300, 301, 10, + 303, 304, 305, 306, 307, 10, 10, 310, 311, 312, + 313, 314, 315, 316, 317, 10, 10, 10, 321, 10, + 10, 112, 10, 83, 84, 48, 10, 330, 331, 332, + 333, 54, 10, 10, 337, 338, 339, 340, 341, 342, + 343, 344, 345, 346, 347, 292, 293, 294, 295, 10, + 110, 10, 10, 10, 145, 302, 290, 148, 292, 293, + 294, 295, 296, 10, 10, 10, 157, 10, 302, 10, + 10, 10, 10, 10, 10, 98, 323, 324, 325, 326, + 327, 99, 100, 101, 102, 103, 104, 105, 106, 336, + 10, 10, 10, 116, 10, 10, 10, 10, 10, 10, + 334, 335, 280, 281, 282, 283, 284, 285, 286, 287, + 288, 173, 174, 175, 176, 177, 178, 179, 180, 181, + 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, + 10, 10, 10, 193, 194, 10, 10, 10, 10, 10, + 308, 10, 10, 10, 10, 10, 10, 10, 10, 172, 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, 238, 10, 10, + 348, 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, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 236, 10, 10, 10, 308, 10, 10, 10, + 10, 10, 10, 236, 10, 10, 10, 10, 309, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 258, 10, 10, 10, 10, 10, - 10, 10, 10, 307, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 279, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 290, 10, 10, 10, + 10, 10, 10, 10, 10, 258, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 279, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 291, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 317, 10, 10, 10, 321, 10, 10, - 10, 10, 10, 327, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 318, 10, 10, 10, 322, + 10, 10, 10, 10, 10, 328, 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, @@ -2155,21 +2168,22 @@ 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, -1, -1, -1, -1, -1, + 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, 37, 37, 37, 37, 37, 37 + 37, 37, 37, 37, 37 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const yytype_int16 yystos[] = { - 0, 347, 0, 11, 12, 48, 54, 98, 116, 172, - 236, 258, 279, 290, 317, 321, 327, 348, 349, 350, - 353, 356, 359, 362, 371, 640, 651, 673, 677, 685, - 698, 712, 351, 354, 357, 360, 363, 372, 641, 652, - 674, 678, 686, 699, 713, 13, 14, 15, 16, 17, + 0, 350, 0, 11, 12, 48, 54, 98, 116, 172, + 236, 258, 279, 291, 318, 322, 328, 351, 352, 353, + 356, 359, 362, 365, 374, 644, 655, 677, 681, 689, + 702, 718, 354, 357, 360, 363, 366, 375, 645, 656, + 678, 682, 690, 703, 719, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 51, @@ -2190,53 +2204,54 @@ static const yytype_int16 yystos[] = 233, 234, 235, 237, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 269, 270, 271, 272, 273, 274, 275, - 276, 277, 278, 288, 296, 297, 299, 300, 302, 303, - 304, 305, 306, 309, 310, 311, 312, 313, 314, 315, - 316, 320, 329, 330, 331, 332, 336, 337, 338, 339, - 340, 341, 342, 343, 344, 345, 352, 374, 375, 376, - 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, - 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, - 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, - 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, - 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, - 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, - 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, - 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, - 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, - 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, - 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, - 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, - 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, - 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, - 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, - 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, - 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, - 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, - 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, - 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, - 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, - 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, - 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, - 607, 681, 682, 683, 684, 709, 710, 711, 47, 49, - 50, 112, 145, 148, 157, 308, 355, 608, 609, 610, - 611, 612, 613, 614, 615, 47, 55, 56, 144, 146, - 149, 307, 358, 616, 617, 618, 619, 620, 621, 622, - 47, 83, 84, 110, 193, 194, 238, 361, 633, 634, - 635, 636, 637, 638, 639, 47, 289, 291, 292, 293, - 294, 295, 301, 333, 334, 364, 623, 624, 625, 626, - 627, 628, 629, 630, 631, 632, 322, 323, 324, 325, - 326, 335, 365, 366, 367, 368, 369, 370, 373, 623, - 624, 625, 626, 627, 630, 99, 100, 101, 102, 103, - 104, 105, 106, 642, 643, 644, 645, 646, 647, 648, - 649, 650, 173, 174, 175, 176, 177, 178, 179, 180, - 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, - 191, 653, 654, 655, 656, 657, 658, 659, 660, 661, - 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, - 672, 117, 675, 676, 328, 679, 680, 259, 260, 261, - 262, 263, 264, 265, 266, 267, 268, 687, 688, 689, - 690, 691, 692, 693, 694, 695, 696, 697, 280, 281, - 282, 283, 284, 285, 286, 287, 700, 701, 702, 703, - 704, 705, 706, 707, 708, 318, 319, 714, 715, 716, + 276, 277, 278, 289, 297, 298, 300, 301, 303, 304, + 305, 306, 307, 310, 311, 312, 313, 314, 315, 316, + 317, 321, 330, 331, 332, 333, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 355, 377, 378, + 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, + 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, + 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, + 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, + 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, + 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, + 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, + 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, + 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, + 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, + 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, + 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, + 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, + 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, + 579, 580, 581, 582, 583, 584, 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, 685, 686, 687, 688, 715, 716, 717, + 47, 49, 50, 112, 145, 148, 157, 309, 358, 612, + 613, 614, 615, 616, 617, 618, 619, 47, 55, 56, + 144, 146, 149, 308, 361, 620, 621, 622, 623, 624, + 625, 626, 47, 83, 84, 110, 193, 194, 238, 364, + 637, 638, 639, 640, 641, 642, 643, 47, 290, 292, + 293, 294, 295, 296, 302, 334, 335, 367, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 323, 324, + 325, 326, 327, 336, 368, 369, 370, 371, 372, 373, + 376, 627, 628, 629, 630, 631, 634, 99, 100, 101, + 102, 103, 104, 105, 106, 646, 647, 648, 649, 650, + 651, 652, 653, 654, 173, 174, 175, 176, 177, 178, + 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 657, 658, 659, 660, 661, 662, 663, + 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, + 674, 675, 676, 117, 679, 680, 329, 683, 684, 259, + 260, 261, 262, 263, 264, 265, 266, 267, 268, 691, + 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, + 280, 281, 282, 283, 284, 285, 286, 287, 288, 348, + 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, + 714, 319, 320, 720, 721, 722, 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, @@ -2272,84 +2287,85 @@ static const yytype_int16 yystos[] = 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10 + 10, 10, 10, 10, 10 }; /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_int16 yyr1[] = { - 0, 346, 347, 347, 348, 348, 348, 348, 348, 348, - 348, 348, 348, 348, 348, 348, 348, 348, 349, 350, - 351, 351, 352, 352, 352, 352, 352, 352, 352, 352, - 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, - 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, - 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, - 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, - 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, - 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, - 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, - 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, - 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, - 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, - 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, - 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, - 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, - 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, - 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, - 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, - 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, - 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, - 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, - 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, - 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, - 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, - 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, - 352, 352, 352, 353, 354, 354, 355, 355, 355, 355, + 0, 349, 350, 350, 351, 351, 351, 351, 351, 351, + 351, 351, 351, 351, 351, 351, 351, 351, 352, 353, + 354, 354, 355, 355, 355, 355, 355, 355, 355, 355, + 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, + 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, + 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, + 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, + 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, + 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, + 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, + 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, + 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, + 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, + 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, + 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, + 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, + 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, + 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, + 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, + 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, + 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, + 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, + 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, + 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, + 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, + 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 356, 357, 357, 358, 358, 358, - 358, 358, 358, 358, 359, 360, 360, 361, 361, 361, - 361, 361, 361, 361, 362, 363, 363, 364, 364, 364, - 364, 364, 364, 364, 364, 364, 364, 365, 366, 367, - 368, 369, 370, 371, 372, 372, 373, 373, 373, 373, - 373, 373, 373, 373, 373, 373, 373, 373, 374, 375, - 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, - 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, - 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, - 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, - 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, - 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, - 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, - 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, - 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, - 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, - 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, - 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, - 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, - 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, - 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, - 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, - 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, - 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, - 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, - 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, - 576, 577, 578, 579, 580, 581, 582, 583, 584, 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, 641, 642, 642, 642, - 642, 642, 642, 642, 642, 643, 644, 645, 646, 647, - 648, 649, 650, 651, 652, 652, 653, 653, 653, 653, - 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, - 653, 653, 653, 653, 653, 654, 655, 656, 657, 658, - 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, - 669, 670, 671, 672, 673, 674, 674, 675, 676, 677, - 678, 678, 679, 680, 681, 682, 683, 684, 685, 686, - 686, 687, 687, 687, 687, 687, 687, 687, 687, 687, - 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, - 697, 698, 699, 699, 700, 700, 700, 700, 700, 700, - 700, 700, 701, 702, 703, 704, 705, 706, 707, 708, - 709, 710, 711, 712, 713, 713, 714, 714, 715, 716 + 358, 358, 358, 358, 358, 359, 360, 360, 361, 361, + 361, 361, 361, 361, 361, 362, 363, 363, 364, 364, + 364, 364, 364, 364, 364, 365, 366, 366, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 368, 369, + 370, 371, 372, 373, 374, 375, 375, 376, 376, 376, + 376, 376, 376, 376, 376, 376, 376, 376, 376, 377, + 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, + 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, + 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, + 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, + 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, + 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, + 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, + 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, + 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, + 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, + 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, + 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, + 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, + 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, + 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, + 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, + 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, + 578, 579, 580, 581, 582, 583, 584, 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, 645, 646, + 646, 646, 646, 646, 646, 646, 646, 647, 648, 649, + 650, 651, 652, 653, 654, 655, 656, 656, 657, 657, + 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, + 657, 657, 657, 657, 657, 657, 657, 658, 659, 660, + 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, + 671, 672, 673, 674, 675, 676, 677, 678, 678, 679, + 680, 681, 682, 682, 683, 684, 685, 686, 687, 688, + 689, 690, 690, 691, 691, 691, 691, 691, 691, 691, + 691, 691, 691, 692, 693, 694, 695, 696, 697, 698, + 699, 700, 701, 702, 703, 703, 704, 704, 704, 704, + 704, 704, 704, 704, 704, 704, 705, 706, 707, 708, + 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, + 719, 719, 720, 720, 721, 722 }; /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ @@ -2381,13 +2397,13 @@ static const yytype_int8 yyr2[] = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 0, 1, 1, 1, - 1, 1, 1, 1, 1, 2, 0, 1, 1, 1, - 1, 1, 1, 1, 1, 2, 0, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, - 2, 2, 2, 1, 2, 0, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 2, 0, 1, 1, + 1, 1, 1, 1, 1, 1, 2, 0, 1, 1, + 1, 1, 1, 1, 1, 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, + 2, 2, 2, 2, 1, 2, 0, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -2402,31 +2418,32 @@ 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, - 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, 3, 2, 2, 2, 2, 2, - 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, 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, 3, 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, 2, 2, 2, 2, 2, + 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, 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, 2, 2, 2, 2, 2, 2, 2, 2, - 3, 2, 2, 1, 2, 0, 1, 1, 2, 2 + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 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, + 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, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 1, 2, 0, 1, + 2, 1, 2, 0, 1, 2, 2, 2, 3, 3, + 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 1, 2, 0, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 3, 2, 2, 1, + 2, 0, 1, 1, 2, 2 }; @@ -2894,25 +2911,25 @@ yyparse (void) switch (yyn) { case 18: /* force_toplevel: VAR_FORCE_TOPLEVEL */ -#line 214 "util/configparser.y" +#line 215 "util/configparser.y" { OUTYY(("\nP(force-toplevel)\n")); cfg_parser->started_toplevel = 0; } -#line 2903 "util/configparser.c" +#line 2920 "util/configparser.c" break; case 19: /* serverstart: VAR_SERVER */ -#line 221 "util/configparser.y" +#line 222 "util/configparser.y" { OUTYY(("\nP(server:)\n")); cfg_parser->started_toplevel = 1; } -#line 2912 "util/configparser.c" +#line 2929 "util/configparser.c" break; - case 263: /* stubstart: VAR_STUB_ZONE */ -#line 338 "util/configparser.y" + case 264: /* stubstart: VAR_STUB_ZONE */ +#line 339 "util/configparser.y" { struct config_stub* s; OUTYY(("\nP(stub_zone:)\n")); @@ -2925,11 +2942,11 @@ yyparse (void) yyerror("out of memory"); } } -#line 2929 "util/configparser.c" +#line 2946 "util/configparser.c" break; - case 274: /* forwardstart: VAR_FORWARD_ZONE */ -#line 357 "util/configparser.y" + case 275: /* forwardstart: VAR_FORWARD_ZONE */ +#line 358 "util/configparser.y" { struct config_stub* s; OUTYY(("\nP(forward_zone:)\n")); @@ -2942,11 +2959,11 @@ yyparse (void) yyerror("out of memory"); } } -#line 2946 "util/configparser.c" +#line 2963 "util/configparser.c" break; - case 284: /* viewstart: VAR_VIEW */ -#line 376 "util/configparser.y" + case 285: /* viewstart: VAR_VIEW */ +#line 377 "util/configparser.y" { struct config_view* s; OUTYY(("\nP(view:)\n")); @@ -2961,11 +2978,11 @@ yyparse (void) yyerror("out of memory"); } } -#line 2965 "util/configparser.c" +#line 2982 "util/configparser.c" break; - case 294: /* authstart: VAR_AUTH_ZONE */ -#line 397 "util/configparser.y" + case 295: /* authstart: VAR_AUTH_ZONE */ +#line 398 "util/configparser.y" { struct config_auth* s; OUTYY(("\nP(auth_zone:)\n")); @@ -2985,11 +3002,11 @@ yyparse (void) yyerror("out of memory"); } } -#line 2989 "util/configparser.c" +#line 3006 "util/configparser.c" break; - case 307: /* rpz_tag: VAR_TAGS STRING_ARG */ -#line 425 "util/configparser.y" + case 308: /* rpz_tag: VAR_TAGS STRING_ARG */ +#line 426 "util/configparser.y" { uint8_t* bitlist; size_t len = 0; @@ -3006,11 +3023,11 @@ yyparse (void) } } -#line 3010 "util/configparser.c" +#line 3027 "util/configparser.c" break; - case 308: /* rpz_action_override: VAR_RPZ_ACTION_OVERRIDE STRING_ARG */ -#line 444 "util/configparser.y" + case 309: /* rpz_action_override: VAR_RPZ_ACTION_OVERRIDE STRING_ARG */ +#line 445 "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 && @@ -3025,21 +3042,21 @@ yyparse (void) cfg_parser->cfg->auths->rpz_action_override = (yyvsp[0].str); } } -#line 3029 "util/configparser.c" +#line 3046 "util/configparser.c" break; - case 309: /* rpz_cname_override: VAR_RPZ_CNAME_OVERRIDE STRING_ARG */ -#line 461 "util/configparser.y" + case 310: /* rpz_cname_override: VAR_RPZ_CNAME_OVERRIDE STRING_ARG */ +#line 462 "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 3039 "util/configparser.c" +#line 3056 "util/configparser.c" break; - case 310: /* rpz_log: VAR_RPZ_LOG STRING_ARG */ -#line 469 "util/configparser.y" + case 311: /* rpz_log: VAR_RPZ_LOG STRING_ARG */ +#line 470 "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) @@ -3047,21 +3064,21 @@ yyparse (void) else cfg_parser->cfg->auths->rpz_log = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3051 "util/configparser.c" +#line 3068 "util/configparser.c" break; - case 311: /* rpz_log_name: VAR_RPZ_LOG_NAME STRING_ARG */ -#line 479 "util/configparser.y" + case 312: /* rpz_log_name: VAR_RPZ_LOG_NAME STRING_ARG */ +#line 480 "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 3061 "util/configparser.c" +#line 3078 "util/configparser.c" break; - case 312: /* rpz_signal_nxdomain_ra: VAR_RPZ_SIGNAL_NXDOMAIN_RA STRING_ARG */ -#line 486 "util/configparser.y" + case 313: /* rpz_signal_nxdomain_ra: VAR_RPZ_SIGNAL_NXDOMAIN_RA STRING_ARG */ +#line 487 "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) @@ -3069,11 +3086,11 @@ yyparse (void) else cfg_parser->cfg->auths->rpz_signal_nxdomain_ra = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3073 "util/configparser.c" +#line 3090 "util/configparser.c" break; - case 313: /* rpzstart: VAR_RPZ */ -#line 496 "util/configparser.y" + case 314: /* rpzstart: VAR_RPZ */ +#line 497 "util/configparser.y" { struct config_auth* s; OUTYY(("\nP(rpz:)\n")); @@ -3091,11 +3108,11 @@ yyparse (void) yyerror("out of memory"); } } -#line 3095 "util/configparser.c" +#line 3112 "util/configparser.c" break; - case 328: /* server_num_threads: VAR_NUM_THREADS STRING_ARG */ -#line 521 "util/configparser.y" + case 329: /* server_num_threads: VAR_NUM_THREADS STRING_ARG */ +#line 522 "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) @@ -3103,11 +3120,11 @@ yyparse (void) else cfg_parser->cfg->num_threads = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3107 "util/configparser.c" +#line 3124 "util/configparser.c" break; - case 329: /* server_verbosity: VAR_VERBOSITY STRING_ARG */ -#line 530 "util/configparser.y" + case 330: /* server_verbosity: VAR_VERBOSITY STRING_ARG */ +#line 531 "util/configparser.y" { OUTYY(("P(server_verbosity:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3115,11 +3132,11 @@ yyparse (void) else cfg_parser->cfg->verbosity = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3119 "util/configparser.c" +#line 3136 "util/configparser.c" break; - case 330: /* server_statistics_interval: VAR_STATISTICS_INTERVAL STRING_ARG */ -#line 539 "util/configparser.y" + case 331: /* server_statistics_interval: VAR_STATISTICS_INTERVAL STRING_ARG */ +#line 540 "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) @@ -3129,11 +3146,11 @@ yyparse (void) else cfg_parser->cfg->stat_interval = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3133 "util/configparser.c" +#line 3150 "util/configparser.c" break; - case 331: /* server_statistics_cumulative: VAR_STATISTICS_CUMULATIVE STRING_ARG */ -#line 550 "util/configparser.y" + case 332: /* server_statistics_cumulative: VAR_STATISTICS_CUMULATIVE STRING_ARG */ +#line 551 "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) @@ -3141,11 +3158,11 @@ yyparse (void) else cfg_parser->cfg->stat_cumulative = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3145 "util/configparser.c" +#line 3162 "util/configparser.c" break; - case 332: /* server_extended_statistics: VAR_EXTENDED_STATISTICS STRING_ARG */ -#line 559 "util/configparser.y" + case 333: /* server_extended_statistics: VAR_EXTENDED_STATISTICS STRING_ARG */ +#line 560 "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) @@ -3153,11 +3170,11 @@ yyparse (void) else cfg_parser->cfg->stat_extended = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3157 "util/configparser.c" +#line 3174 "util/configparser.c" break; - case 333: /* server_statistics_inhibit_zero: VAR_STATISTICS_INHIBIT_ZERO STRING_ARG */ -#line 568 "util/configparser.y" + case 334: /* server_statistics_inhibit_zero: VAR_STATISTICS_INHIBIT_ZERO STRING_ARG */ +#line 569 "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) @@ -3165,11 +3182,11 @@ yyparse (void) else cfg_parser->cfg->stat_inhibit_zero = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3169 "util/configparser.c" +#line 3186 "util/configparser.c" break; - case 334: /* server_shm_enable: VAR_SHM_ENABLE STRING_ARG */ -#line 577 "util/configparser.y" + case 335: /* server_shm_enable: VAR_SHM_ENABLE STRING_ARG */ +#line 578 "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) @@ -3177,11 +3194,11 @@ yyparse (void) else cfg_parser->cfg->shm_enable = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3181 "util/configparser.c" +#line 3198 "util/configparser.c" break; - case 335: /* server_shm_key: VAR_SHM_KEY STRING_ARG */ -#line 586 "util/configparser.y" + case 336: /* server_shm_key: VAR_SHM_KEY STRING_ARG */ +#line 587 "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) @@ -3191,11 +3208,11 @@ yyparse (void) else cfg_parser->cfg->shm_key = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3195 "util/configparser.c" +#line 3212 "util/configparser.c" break; - case 336: /* server_port: VAR_PORT STRING_ARG */ -#line 597 "util/configparser.y" + case 337: /* server_port: VAR_PORT STRING_ARG */ +#line 598 "util/configparser.y" { OUTYY(("P(server_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3203,11 +3220,11 @@ yyparse (void) else cfg_parser->cfg->port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3207 "util/configparser.c" +#line 3224 "util/configparser.c" break; - case 337: /* server_send_client_subnet: VAR_SEND_CLIENT_SUBNET STRING_ARG */ -#line 606 "util/configparser.y" + case 338: /* server_send_client_subnet: VAR_SEND_CLIENT_SUBNET STRING_ARG */ +#line 607 "util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(server_send_client_subnet:%s)\n", (yyvsp[0].str))); @@ -3218,11 +3235,11 @@ yyparse (void) free((yyvsp[0].str)); #endif } -#line 3222 "util/configparser.c" +#line 3239 "util/configparser.c" break; - case 338: /* server_client_subnet_zone: VAR_CLIENT_SUBNET_ZONE STRING_ARG */ -#line 618 "util/configparser.y" + case 339: /* server_client_subnet_zone: VAR_CLIENT_SUBNET_ZONE STRING_ARG */ +#line 619 "util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(server_client_subnet_zone:%s)\n", (yyvsp[0].str))); @@ -3234,11 +3251,11 @@ yyparse (void) free((yyvsp[0].str)); #endif } -#line 3238 "util/configparser.c" +#line 3255 "util/configparser.c" break; - case 339: /* server_client_subnet_always_forward: VAR_CLIENT_SUBNET_ALWAYS_FORWARD STRING_ARG */ -#line 632 "util/configparser.y" + case 340: /* server_client_subnet_always_forward: VAR_CLIENT_SUBNET_ALWAYS_FORWARD STRING_ARG */ +#line 633 "util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(server_client_subnet_always_forward:%s)\n", (yyvsp[0].str))); @@ -3252,11 +3269,11 @@ yyparse (void) #endif free((yyvsp[0].str)); } -#line 3256 "util/configparser.c" +#line 3273 "util/configparser.c" break; - case 340: /* server_client_subnet_opcode: VAR_CLIENT_SUBNET_OPCODE STRING_ARG */ -#line 647 "util/configparser.y" + case 341: /* server_client_subnet_opcode: VAR_CLIENT_SUBNET_OPCODE STRING_ARG */ +#line 648 "util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(client_subnet_opcode:%s)\n", (yyvsp[0].str))); @@ -3266,11 +3283,11 @@ yyparse (void) #endif free((yyvsp[0].str)); } -#line 3270 "util/configparser.c" +#line 3287 "util/configparser.c" break; - case 341: /* server_max_client_subnet_ipv4: VAR_MAX_CLIENT_SUBNET_IPV4 STRING_ARG */ -#line 658 "util/configparser.y" + case 342: /* server_max_client_subnet_ipv4: VAR_MAX_CLIENT_SUBNET_IPV4 STRING_ARG */ +#line 659 "util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(max_client_subnet_ipv4:%s)\n", (yyvsp[0].str))); @@ -3286,11 +3303,11 @@ yyparse (void) #endif free((yyvsp[0].str)); } -#line 3290 "util/configparser.c" +#line 3307 "util/configparser.c" break; - case 342: /* server_max_client_subnet_ipv6: VAR_MAX_CLIENT_SUBNET_IPV6 STRING_ARG */ -#line 675 "util/configparser.y" + case 343: /* server_max_client_subnet_ipv6: VAR_MAX_CLIENT_SUBNET_IPV6 STRING_ARG */ +#line 676 "util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(max_client_subnet_ipv6:%s)\n", (yyvsp[0].str))); @@ -3306,11 +3323,11 @@ yyparse (void) #endif free((yyvsp[0].str)); } -#line 3310 "util/configparser.c" +#line 3327 "util/configparser.c" break; - case 343: /* server_min_client_subnet_ipv4: VAR_MIN_CLIENT_SUBNET_IPV4 STRING_ARG */ -#line 692 "util/configparser.y" + case 344: /* server_min_client_subnet_ipv4: VAR_MIN_CLIENT_SUBNET_IPV4 STRING_ARG */ +#line 693 "util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(min_client_subnet_ipv4:%s)\n", (yyvsp[0].str))); @@ -3326,11 +3343,11 @@ yyparse (void) #endif free((yyvsp[0].str)); } -#line 3330 "util/configparser.c" +#line 3347 "util/configparser.c" break; - case 344: /* server_min_client_subnet_ipv6: VAR_MIN_CLIENT_SUBNET_IPV6 STRING_ARG */ -#line 709 "util/configparser.y" + case 345: /* server_min_client_subnet_ipv6: VAR_MIN_CLIENT_SUBNET_IPV6 STRING_ARG */ +#line 710 "util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(min_client_subnet_ipv6:%s)\n", (yyvsp[0].str))); @@ -3346,11 +3363,11 @@ yyparse (void) #endif free((yyvsp[0].str)); } -#line 3350 "util/configparser.c" +#line 3367 "util/configparser.c" break; - case 345: /* server_max_ecs_tree_size_ipv4: VAR_MAX_ECS_TREE_SIZE_IPV4 STRING_ARG */ -#line 726 "util/configparser.y" + case 346: /* server_max_ecs_tree_size_ipv4: VAR_MAX_ECS_TREE_SIZE_IPV4 STRING_ARG */ +#line 727 "util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(max_ecs_tree_size_ipv4:%s)\n", (yyvsp[0].str))); @@ -3364,11 +3381,11 @@ yyparse (void) #endif free((yyvsp[0].str)); } -#line 3368 "util/configparser.c" +#line 3385 "util/configparser.c" break; - case 346: /* server_max_ecs_tree_size_ipv6: VAR_MAX_ECS_TREE_SIZE_IPV6 STRING_ARG */ -#line 741 "util/configparser.y" + case 347: /* server_max_ecs_tree_size_ipv6: VAR_MAX_ECS_TREE_SIZE_IPV6 STRING_ARG */ +#line 742 "util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(max_ecs_tree_size_ipv6:%s)\n", (yyvsp[0].str))); @@ -3382,11 +3399,11 @@ yyparse (void) #endif free((yyvsp[0].str)); } -#line 3386 "util/configparser.c" +#line 3403 "util/configparser.c" break; - case 347: /* server_interface: VAR_INTERFACE STRING_ARG */ -#line 756 "util/configparser.y" + case 348: /* server_interface: VAR_INTERFACE STRING_ARG */ +#line 757 "util/configparser.y" { OUTYY(("P(server_interface:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->num_ifs == 0) @@ -3398,11 +3415,11 @@ yyparse (void) else cfg_parser->cfg->ifs[cfg_parser->cfg->num_ifs++] = (yyvsp[0].str); } -#line 3402 "util/configparser.c" +#line 3419 "util/configparser.c" break; - case 348: /* server_outgoing_interface: VAR_OUTGOING_INTERFACE STRING_ARG */ -#line 769 "util/configparser.y" + case 349: /* server_outgoing_interface: VAR_OUTGOING_INTERFACE STRING_ARG */ +#line 770 "util/configparser.y" { OUTYY(("P(server_outgoing_interface:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->num_out_ifs == 0) @@ -3416,11 +3433,11 @@ yyparse (void) cfg_parser->cfg->out_ifs[ cfg_parser->cfg->num_out_ifs++] = (yyvsp[0].str); } -#line 3420 "util/configparser.c" +#line 3437 "util/configparser.c" break; - case 349: /* server_outgoing_range: VAR_OUTGOING_RANGE STRING_ARG */ -#line 784 "util/configparser.y" + case 350: /* server_outgoing_range: VAR_OUTGOING_RANGE STRING_ARG */ +#line 785 "util/configparser.y" { OUTYY(("P(server_outgoing_range:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3428,11 +3445,11 @@ yyparse (void) else cfg_parser->cfg->outgoing_num_ports = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3432 "util/configparser.c" +#line 3449 "util/configparser.c" break; - case 350: /* server_outgoing_port_permit: VAR_OUTGOING_PORT_PERMIT STRING_ARG */ -#line 793 "util/configparser.y" + case 351: /* server_outgoing_port_permit: VAR_OUTGOING_PORT_PERMIT STRING_ARG */ +#line 794 "util/configparser.y" { OUTYY(("P(server_outgoing_port_permit:%s)\n", (yyvsp[0].str))); if(!cfg_mark_ports((yyvsp[0].str), 1, @@ -3440,11 +3457,11 @@ yyparse (void) yyerror("port number or range (\"low-high\") expected"); free((yyvsp[0].str)); } -#line 3444 "util/configparser.c" +#line 3461 "util/configparser.c" break; - case 351: /* server_outgoing_port_avoid: VAR_OUTGOING_PORT_AVOID STRING_ARG */ -#line 802 "util/configparser.y" + case 352: /* server_outgoing_port_avoid: VAR_OUTGOING_PORT_AVOID STRING_ARG */ +#line 803 "util/configparser.y" { OUTYY(("P(server_outgoing_port_avoid:%s)\n", (yyvsp[0].str))); if(!cfg_mark_ports((yyvsp[0].str), 0, @@ -3452,11 +3469,11 @@ yyparse (void) yyerror("port number or range (\"low-high\") expected"); free((yyvsp[0].str)); } -#line 3456 "util/configparser.c" +#line 3473 "util/configparser.c" break; - case 352: /* server_outgoing_num_tcp: VAR_OUTGOING_NUM_TCP STRING_ARG */ -#line 811 "util/configparser.y" + case 353: /* server_outgoing_num_tcp: VAR_OUTGOING_NUM_TCP STRING_ARG */ +#line 812 "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) @@ -3464,11 +3481,11 @@ yyparse (void) else cfg_parser->cfg->outgoing_num_tcp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3468 "util/configparser.c" +#line 3485 "util/configparser.c" break; - case 353: /* server_incoming_num_tcp: VAR_INCOMING_NUM_TCP STRING_ARG */ -#line 820 "util/configparser.y" + case 354: /* server_incoming_num_tcp: VAR_INCOMING_NUM_TCP STRING_ARG */ +#line 821 "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) @@ -3476,11 +3493,11 @@ yyparse (void) else cfg_parser->cfg->incoming_num_tcp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3480 "util/configparser.c" +#line 3497 "util/configparser.c" break; - case 354: /* server_interface_automatic: VAR_INTERFACE_AUTOMATIC STRING_ARG */ -#line 829 "util/configparser.y" + case 355: /* server_interface_automatic: VAR_INTERFACE_AUTOMATIC STRING_ARG */ +#line 830 "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) @@ -3488,21 +3505,21 @@ yyparse (void) else cfg_parser->cfg->if_automatic = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3492 "util/configparser.c" +#line 3509 "util/configparser.c" break; - case 355: /* server_interface_automatic_ports: VAR_INTERFACE_AUTOMATIC_PORTS STRING_ARG */ -#line 838 "util/configparser.y" + case 356: /* server_interface_automatic_ports: VAR_INTERFACE_AUTOMATIC_PORTS STRING_ARG */ +#line 839 "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 3502 "util/configparser.c" +#line 3519 "util/configparser.c" break; - case 356: /* server_do_ip4: VAR_DO_IP4 STRING_ARG */ -#line 845 "util/configparser.y" + case 357: /* server_do_ip4: VAR_DO_IP4 STRING_ARG */ +#line 846 "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) @@ -3510,11 +3527,11 @@ yyparse (void) else cfg_parser->cfg->do_ip4 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3514 "util/configparser.c" +#line 3531 "util/configparser.c" break; - case 357: /* server_do_ip6: VAR_DO_IP6 STRING_ARG */ -#line 854 "util/configparser.y" + case 358: /* server_do_ip6: VAR_DO_IP6 STRING_ARG */ +#line 855 "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) @@ -3522,11 +3539,11 @@ yyparse (void) else cfg_parser->cfg->do_ip6 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3526 "util/configparser.c" +#line 3543 "util/configparser.c" break; - case 358: /* server_do_nat64: VAR_DO_NAT64 STRING_ARG */ -#line 863 "util/configparser.y" + case 359: /* server_do_nat64: VAR_DO_NAT64 STRING_ARG */ +#line 864 "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) @@ -3534,11 +3551,11 @@ yyparse (void) else cfg_parser->cfg->do_nat64 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3538 "util/configparser.c" +#line 3555 "util/configparser.c" break; - case 359: /* server_do_udp: VAR_DO_UDP STRING_ARG */ -#line 872 "util/configparser.y" + case 360: /* server_do_udp: VAR_DO_UDP STRING_ARG */ +#line 873 "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) @@ -3546,11 +3563,11 @@ yyparse (void) else cfg_parser->cfg->do_udp = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3550 "util/configparser.c" +#line 3567 "util/configparser.c" break; - case 360: /* server_do_tcp: VAR_DO_TCP STRING_ARG */ -#line 881 "util/configparser.y" + case 361: /* server_do_tcp: VAR_DO_TCP STRING_ARG */ +#line 882 "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) @@ -3558,11 +3575,11 @@ yyparse (void) else cfg_parser->cfg->do_tcp = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3562 "util/configparser.c" +#line 3579 "util/configparser.c" break; - case 361: /* server_prefer_ip4: VAR_PREFER_IP4 STRING_ARG */ -#line 890 "util/configparser.y" + case 362: /* server_prefer_ip4: VAR_PREFER_IP4 STRING_ARG */ +#line 891 "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) @@ -3570,11 +3587,11 @@ yyparse (void) else cfg_parser->cfg->prefer_ip4 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3574 "util/configparser.c" +#line 3591 "util/configparser.c" break; - case 362: /* server_prefer_ip6: VAR_PREFER_IP6 STRING_ARG */ -#line 899 "util/configparser.y" + case 363: /* server_prefer_ip6: VAR_PREFER_IP6 STRING_ARG */ +#line 900 "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) @@ -3582,11 +3599,11 @@ yyparse (void) else cfg_parser->cfg->prefer_ip6 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3586 "util/configparser.c" +#line 3603 "util/configparser.c" break; - case 363: /* server_tcp_mss: VAR_TCP_MSS STRING_ARG */ -#line 908 "util/configparser.y" + case 364: /* server_tcp_mss: VAR_TCP_MSS STRING_ARG */ +#line 909 "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) @@ -3594,11 +3611,11 @@ yyparse (void) else cfg_parser->cfg->tcp_mss = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3598 "util/configparser.c" +#line 3615 "util/configparser.c" break; - case 364: /* server_outgoing_tcp_mss: VAR_OUTGOING_TCP_MSS STRING_ARG */ -#line 917 "util/configparser.y" + case 365: /* server_outgoing_tcp_mss: VAR_OUTGOING_TCP_MSS STRING_ARG */ +#line 918 "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) @@ -3606,11 +3623,11 @@ yyparse (void) else cfg_parser->cfg->outgoing_tcp_mss = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3610 "util/configparser.c" +#line 3627 "util/configparser.c" break; - case 365: /* server_tcp_idle_timeout: VAR_TCP_IDLE_TIMEOUT STRING_ARG */ -#line 926 "util/configparser.y" + case 366: /* server_tcp_idle_timeout: VAR_TCP_IDLE_TIMEOUT STRING_ARG */ +#line 927 "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) @@ -3622,11 +3639,11 @@ yyparse (void) else cfg_parser->cfg->tcp_idle_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3626 "util/configparser.c" +#line 3643 "util/configparser.c" break; - case 366: /* server_max_reuse_tcp_queries: VAR_MAX_REUSE_TCP_QUERIES STRING_ARG */ -#line 939 "util/configparser.y" + case 367: /* server_max_reuse_tcp_queries: VAR_MAX_REUSE_TCP_QUERIES STRING_ARG */ +#line 940 "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) @@ -3636,11 +3653,11 @@ yyparse (void) else cfg_parser->cfg->max_reuse_tcp_queries = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3640 "util/configparser.c" +#line 3657 "util/configparser.c" break; - case 367: /* server_tcp_reuse_timeout: VAR_TCP_REUSE_TIMEOUT STRING_ARG */ -#line 950 "util/configparser.y" + case 368: /* server_tcp_reuse_timeout: VAR_TCP_REUSE_TIMEOUT STRING_ARG */ +#line 951 "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) @@ -3650,11 +3667,11 @@ yyparse (void) else cfg_parser->cfg->tcp_reuse_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3654 "util/configparser.c" +#line 3671 "util/configparser.c" break; - case 368: /* server_tcp_auth_query_timeout: VAR_TCP_AUTH_QUERY_TIMEOUT STRING_ARG */ -#line 961 "util/configparser.y" + case 369: /* server_tcp_auth_query_timeout: VAR_TCP_AUTH_QUERY_TIMEOUT STRING_ARG */ +#line 962 "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) @@ -3664,11 +3681,11 @@ yyparse (void) else cfg_parser->cfg->tcp_auth_query_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3668 "util/configparser.c" +#line 3685 "util/configparser.c" break; - case 369: /* server_tcp_keepalive: VAR_EDNS_TCP_KEEPALIVE STRING_ARG */ -#line 972 "util/configparser.y" + case 370: /* server_tcp_keepalive: VAR_EDNS_TCP_KEEPALIVE STRING_ARG */ +#line 973 "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) @@ -3676,11 +3693,11 @@ yyparse (void) else cfg_parser->cfg->do_tcp_keepalive = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3680 "util/configparser.c" +#line 3697 "util/configparser.c" break; - case 370: /* server_tcp_keepalive_timeout: VAR_EDNS_TCP_KEEPALIVE_TIMEOUT STRING_ARG */ -#line 981 "util/configparser.y" + case 371: /* server_tcp_keepalive_timeout: VAR_EDNS_TCP_KEEPALIVE_TIMEOUT STRING_ARG */ +#line 982 "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) @@ -3692,11 +3709,11 @@ yyparse (void) else cfg_parser->cfg->tcp_keepalive_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3696 "util/configparser.c" +#line 3713 "util/configparser.c" break; - case 371: /* server_sock_queue_timeout: VAR_SOCK_QUEUE_TIMEOUT STRING_ARG */ -#line 994 "util/configparser.y" + case 372: /* server_sock_queue_timeout: VAR_SOCK_QUEUE_TIMEOUT STRING_ARG */ +#line 995 "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) @@ -3708,11 +3725,11 @@ yyparse (void) else cfg_parser->cfg->sock_queue_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3712 "util/configparser.c" +#line 3729 "util/configparser.c" break; - case 372: /* server_tcp_upstream: VAR_TCP_UPSTREAM STRING_ARG */ -#line 1007 "util/configparser.y" + case 373: /* server_tcp_upstream: VAR_TCP_UPSTREAM STRING_ARG */ +#line 1008 "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) @@ -3720,11 +3737,11 @@ yyparse (void) else cfg_parser->cfg->tcp_upstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3724 "util/configparser.c" +#line 3741 "util/configparser.c" break; - case 373: /* server_udp_upstream_without_downstream: VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM STRING_ARG */ -#line 1016 "util/configparser.y" + case 374: /* server_udp_upstream_without_downstream: VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM STRING_ARG */ +#line 1017 "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) @@ -3732,11 +3749,11 @@ yyparse (void) else cfg_parser->cfg->udp_upstream_without_downstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3736 "util/configparser.c" +#line 3753 "util/configparser.c" break; - case 374: /* server_ssl_upstream: VAR_SSL_UPSTREAM STRING_ARG */ -#line 1025 "util/configparser.y" + case 375: /* server_ssl_upstream: VAR_SSL_UPSTREAM STRING_ARG */ +#line 1026 "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) @@ -3744,31 +3761,31 @@ yyparse (void) else cfg_parser->cfg->ssl_upstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3748 "util/configparser.c" +#line 3765 "util/configparser.c" break; - case 375: /* server_ssl_service_key: VAR_SSL_SERVICE_KEY STRING_ARG */ -#line 1034 "util/configparser.y" + case 376: /* server_ssl_service_key: VAR_SSL_SERVICE_KEY STRING_ARG */ +#line 1035 "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 3758 "util/configparser.c" +#line 3775 "util/configparser.c" break; - case 376: /* server_ssl_service_pem: VAR_SSL_SERVICE_PEM STRING_ARG */ -#line 1041 "util/configparser.y" + case 377: /* server_ssl_service_pem: VAR_SSL_SERVICE_PEM STRING_ARG */ +#line 1042 "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 3768 "util/configparser.c" +#line 3785 "util/configparser.c" break; - case 377: /* server_ssl_port: VAR_SSL_PORT STRING_ARG */ -#line 1048 "util/configparser.y" + case 378: /* server_ssl_port: VAR_SSL_PORT STRING_ARG */ +#line 1049 "util/configparser.y" { OUTYY(("P(server_ssl_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3776,21 +3793,21 @@ yyparse (void) else cfg_parser->cfg->ssl_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3780 "util/configparser.c" +#line 3797 "util/configparser.c" break; - case 378: /* server_tls_cert_bundle: VAR_TLS_CERT_BUNDLE STRING_ARG */ -#line 1057 "util/configparser.y" + case 379: /* server_tls_cert_bundle: VAR_TLS_CERT_BUNDLE STRING_ARG */ +#line 1058 "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 3790 "util/configparser.c" +#line 3807 "util/configparser.c" break; - case 379: /* server_tls_win_cert: VAR_TLS_WIN_CERT STRING_ARG */ -#line 1064 "util/configparser.y" + case 380: /* server_tls_win_cert: VAR_TLS_WIN_CERT STRING_ARG */ +#line 1065 "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) @@ -3798,53 +3815,53 @@ yyparse (void) else cfg_parser->cfg->tls_win_cert = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3802 "util/configparser.c" +#line 3819 "util/configparser.c" break; - case 380: /* server_tls_additional_port: VAR_TLS_ADDITIONAL_PORT STRING_ARG */ -#line 1073 "util/configparser.y" + case 381: /* server_tls_additional_port: VAR_TLS_ADDITIONAL_PORT STRING_ARG */ +#line 1074 "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 3813 "util/configparser.c" +#line 3830 "util/configparser.c" break; - case 381: /* server_tls_ciphers: VAR_TLS_CIPHERS STRING_ARG */ -#line 1081 "util/configparser.y" + case 382: /* server_tls_ciphers: VAR_TLS_CIPHERS STRING_ARG */ +#line 1082 "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 3823 "util/configparser.c" +#line 3840 "util/configparser.c" break; - case 382: /* server_tls_ciphersuites: VAR_TLS_CIPHERSUITES STRING_ARG */ -#line 1088 "util/configparser.y" + case 383: /* server_tls_ciphersuites: VAR_TLS_CIPHERSUITES STRING_ARG */ +#line 1089 "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 3833 "util/configparser.c" +#line 3850 "util/configparser.c" break; - case 383: /* server_tls_session_ticket_keys: VAR_TLS_SESSION_TICKET_KEYS STRING_ARG */ -#line 1095 "util/configparser.y" + case 384: /* server_tls_session_ticket_keys: VAR_TLS_SESSION_TICKET_KEYS STRING_ARG */ +#line 1096 "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 3844 "util/configparser.c" +#line 3861 "util/configparser.c" break; - case 384: /* server_tls_use_sni: VAR_TLS_USE_SNI STRING_ARG */ -#line 1103 "util/configparser.y" + case 385: /* server_tls_use_sni: VAR_TLS_USE_SNI STRING_ARG */ +#line 1104 "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) @@ -3852,11 +3869,11 @@ yyparse (void) else cfg_parser->cfg->tls_use_sni = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3856 "util/configparser.c" +#line 3873 "util/configparser.c" break; - case 385: /* server_https_port: VAR_HTTPS_PORT STRING_ARG */ -#line 1112 "util/configparser.y" + case 386: /* server_https_port: VAR_HTTPS_PORT STRING_ARG */ +#line 1113 "util/configparser.y" { OUTYY(("P(server_https_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3864,11 +3881,11 @@ yyparse (void) else cfg_parser->cfg->https_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3868 "util/configparser.c" +#line 3885 "util/configparser.c" break; - case 386: /* server_http_endpoint: VAR_HTTP_ENDPOINT STRING_ARG */ -#line 1120 "util/configparser.y" + case 387: /* server_http_endpoint: VAR_HTTP_ENDPOINT STRING_ARG */ +#line 1121 "util/configparser.y" { OUTYY(("P(server_http_endpoint:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->http_endpoint); @@ -3884,11 +3901,11 @@ yyparse (void) cfg_parser->cfg->http_endpoint = (yyvsp[0].str); } } -#line 3888 "util/configparser.c" +#line 3905 "util/configparser.c" break; - case 387: /* server_http_max_streams: VAR_HTTP_MAX_STREAMS STRING_ARG */ -#line 1136 "util/configparser.y" + case 388: /* server_http_max_streams: VAR_HTTP_MAX_STREAMS STRING_ARG */ +#line 1137 "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) @@ -3896,11 +3913,11 @@ yyparse (void) else cfg_parser->cfg->http_max_streams = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3900 "util/configparser.c" +#line 3917 "util/configparser.c" break; - case 388: /* server_http_query_buffer_size: VAR_HTTP_QUERY_BUFFER_SIZE STRING_ARG */ -#line 1144 "util/configparser.y" + case 389: /* server_http_query_buffer_size: VAR_HTTP_QUERY_BUFFER_SIZE STRING_ARG */ +#line 1145 "util/configparser.y" { OUTYY(("P(server_http_query_buffer_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), @@ -3908,11 +3925,11 @@ yyparse (void) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 3912 "util/configparser.c" +#line 3929 "util/configparser.c" break; - case 389: /* server_http_response_buffer_size: VAR_HTTP_RESPONSE_BUFFER_SIZE STRING_ARG */ -#line 1152 "util/configparser.y" + case 390: /* server_http_response_buffer_size: VAR_HTTP_RESPONSE_BUFFER_SIZE STRING_ARG */ +#line 1153 "util/configparser.y" { OUTYY(("P(server_http_response_buffer_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), @@ -3920,11 +3937,11 @@ yyparse (void) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 3924 "util/configparser.c" +#line 3941 "util/configparser.c" break; - case 390: /* server_http_nodelay: VAR_HTTP_NODELAY STRING_ARG */ -#line 1160 "util/configparser.y" + case 391: /* server_http_nodelay: VAR_HTTP_NODELAY STRING_ARG */ +#line 1161 "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) @@ -3932,11 +3949,11 @@ yyparse (void) else cfg_parser->cfg->http_nodelay = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3936 "util/configparser.c" +#line 3953 "util/configparser.c" break; - case 391: /* server_http_notls_downstream: VAR_HTTP_NOTLS_DOWNSTREAM STRING_ARG */ -#line 1168 "util/configparser.y" + case 392: /* server_http_notls_downstream: VAR_HTTP_NOTLS_DOWNSTREAM STRING_ARG */ +#line 1169 "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) @@ -3944,11 +3961,11 @@ yyparse (void) else cfg_parser->cfg->http_notls_downstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3948 "util/configparser.c" +#line 3965 "util/configparser.c" break; - case 392: /* server_use_systemd: VAR_USE_SYSTEMD STRING_ARG */ -#line 1176 "util/configparser.y" + case 393: /* server_use_systemd: VAR_USE_SYSTEMD STRING_ARG */ +#line 1177 "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) @@ -3956,11 +3973,11 @@ yyparse (void) else cfg_parser->cfg->use_systemd = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3960 "util/configparser.c" +#line 3977 "util/configparser.c" break; - case 393: /* server_do_daemonize: VAR_DO_DAEMONIZE STRING_ARG */ -#line 1185 "util/configparser.y" + case 394: /* server_do_daemonize: VAR_DO_DAEMONIZE STRING_ARG */ +#line 1186 "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) @@ -3968,11 +3985,11 @@ yyparse (void) else cfg_parser->cfg->do_daemonize = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3972 "util/configparser.c" +#line 3989 "util/configparser.c" break; - case 394: /* server_use_syslog: VAR_USE_SYSLOG STRING_ARG */ -#line 1194 "util/configparser.y" + case 395: /* server_use_syslog: VAR_USE_SYSLOG STRING_ARG */ +#line 1195 "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) @@ -3985,11 +4002,11 @@ yyparse (void) #endif free((yyvsp[0].str)); } -#line 3989 "util/configparser.c" +#line 4006 "util/configparser.c" break; - case 395: /* server_log_time_ascii: VAR_LOG_TIME_ASCII STRING_ARG */ -#line 1208 "util/configparser.y" + case 396: /* server_log_time_ascii: VAR_LOG_TIME_ASCII STRING_ARG */ +#line 1209 "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) @@ -3997,11 +4014,11 @@ yyparse (void) else cfg_parser->cfg->log_time_ascii = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4001 "util/configparser.c" +#line 4018 "util/configparser.c" break; - case 396: /* server_log_queries: VAR_LOG_QUERIES STRING_ARG */ -#line 1217 "util/configparser.y" + case 397: /* server_log_queries: VAR_LOG_QUERIES STRING_ARG */ +#line 1218 "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) @@ -4009,11 +4026,11 @@ yyparse (void) else cfg_parser->cfg->log_queries = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4013 "util/configparser.c" +#line 4030 "util/configparser.c" break; - case 397: /* server_log_replies: VAR_LOG_REPLIES STRING_ARG */ -#line 1226 "util/configparser.y" + case 398: /* server_log_replies: VAR_LOG_REPLIES STRING_ARG */ +#line 1227 "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) @@ -4021,11 +4038,11 @@ yyparse (void) else cfg_parser->cfg->log_replies = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4025 "util/configparser.c" +#line 4042 "util/configparser.c" break; - case 398: /* server_log_tag_queryreply: VAR_LOG_TAG_QUERYREPLY STRING_ARG */ -#line 1235 "util/configparser.y" + case 399: /* server_log_tag_queryreply: VAR_LOG_TAG_QUERYREPLY STRING_ARG */ +#line 1236 "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) @@ -4033,11 +4050,11 @@ yyparse (void) else cfg_parser->cfg->log_tag_queryreply = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4037 "util/configparser.c" +#line 4054 "util/configparser.c" break; - case 399: /* server_log_servfail: VAR_LOG_SERVFAIL STRING_ARG */ -#line 1244 "util/configparser.y" + case 400: /* server_log_servfail: VAR_LOG_SERVFAIL STRING_ARG */ +#line 1245 "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) @@ -4045,11 +4062,11 @@ yyparse (void) else cfg_parser->cfg->log_servfail = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4049 "util/configparser.c" +#line 4066 "util/configparser.c" break; - case 400: /* server_log_local_actions: VAR_LOG_LOCAL_ACTIONS STRING_ARG */ -#line 1253 "util/configparser.y" + case 401: /* server_log_local_actions: VAR_LOG_LOCAL_ACTIONS STRING_ARG */ +#line 1254 "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) @@ -4057,31 +4074,31 @@ yyparse (void) else cfg_parser->cfg->log_local_actions = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4061 "util/configparser.c" +#line 4078 "util/configparser.c" break; - case 401: /* server_chroot: VAR_CHROOT STRING_ARG */ -#line 1262 "util/configparser.y" + case 402: /* server_chroot: VAR_CHROOT STRING_ARG */ +#line 1263 "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 4071 "util/configparser.c" +#line 4088 "util/configparser.c" break; - case 402: /* server_username: VAR_USERNAME STRING_ARG */ -#line 1269 "util/configparser.y" + case 403: /* server_username: VAR_USERNAME STRING_ARG */ +#line 1270 "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 4081 "util/configparser.c" +#line 4098 "util/configparser.c" break; - case 403: /* server_directory: VAR_DIRECTORY STRING_ARG */ -#line 1276 "util/configparser.y" + case 404: /* server_directory: VAR_DIRECTORY STRING_ARG */ +#line 1277 "util/configparser.y" { OUTYY(("P(server_directory:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->directory); @@ -4106,105 +4123,105 @@ yyparse (void) } } } -#line 4110 "util/configparser.c" +#line 4127 "util/configparser.c" break; - case 404: /* server_logfile: VAR_LOGFILE STRING_ARG */ -#line 1302 "util/configparser.y" + case 405: /* server_logfile: VAR_LOGFILE STRING_ARG */ +#line 1303 "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 4121 "util/configparser.c" +#line 4138 "util/configparser.c" break; - case 405: /* server_pidfile: VAR_PIDFILE STRING_ARG */ -#line 1310 "util/configparser.y" + case 406: /* server_pidfile: VAR_PIDFILE STRING_ARG */ +#line 1311 "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 4131 "util/configparser.c" +#line 4148 "util/configparser.c" break; - case 406: /* server_root_hints: VAR_ROOT_HINTS STRING_ARG */ -#line 1317 "util/configparser.y" + case 407: /* server_root_hints: VAR_ROOT_HINTS STRING_ARG */ +#line 1318 "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 4141 "util/configparser.c" +#line 4158 "util/configparser.c" break; - case 407: /* server_dlv_anchor_file: VAR_DLV_ANCHOR_FILE STRING_ARG */ -#line 1324 "util/configparser.y" + case 408: /* server_dlv_anchor_file: VAR_DLV_ANCHOR_FILE STRING_ARG */ +#line 1325 "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 4151 "util/configparser.c" +#line 4168 "util/configparser.c" break; - case 408: /* server_dlv_anchor: VAR_DLV_ANCHOR STRING_ARG */ -#line 1331 "util/configparser.y" + case 409: /* server_dlv_anchor: VAR_DLV_ANCHOR STRING_ARG */ +#line 1332 "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 4161 "util/configparser.c" +#line 4178 "util/configparser.c" break; - case 409: /* server_auto_trust_anchor_file: VAR_AUTO_TRUST_ANCHOR_FILE STRING_ARG */ -#line 1338 "util/configparser.y" + case 410: /* server_auto_trust_anchor_file: VAR_AUTO_TRUST_ANCHOR_FILE STRING_ARG */ +#line 1339 "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 4172 "util/configparser.c" +#line 4189 "util/configparser.c" break; - case 410: /* server_trust_anchor_file: VAR_TRUST_ANCHOR_FILE STRING_ARG */ -#line 1346 "util/configparser.y" + case 411: /* server_trust_anchor_file: VAR_TRUST_ANCHOR_FILE STRING_ARG */ +#line 1347 "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 4183 "util/configparser.c" +#line 4200 "util/configparser.c" break; - case 411: /* server_trusted_keys_file: VAR_TRUSTED_KEYS_FILE STRING_ARG */ -#line 1354 "util/configparser.y" + case 412: /* server_trusted_keys_file: VAR_TRUSTED_KEYS_FILE STRING_ARG */ +#line 1355 "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 4194 "util/configparser.c" +#line 4211 "util/configparser.c" break; - case 412: /* server_trust_anchor: VAR_TRUST_ANCHOR STRING_ARG */ -#line 1362 "util/configparser.y" + case 413: /* server_trust_anchor: VAR_TRUST_ANCHOR STRING_ARG */ +#line 1363 "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 4204 "util/configparser.c" +#line 4221 "util/configparser.c" break; - case 413: /* server_trust_anchor_signaling: VAR_TRUST_ANCHOR_SIGNALING STRING_ARG */ -#line 1369 "util/configparser.y" + case 414: /* server_trust_anchor_signaling: VAR_TRUST_ANCHOR_SIGNALING STRING_ARG */ +#line 1370 "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) @@ -4214,11 +4231,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4218 "util/configparser.c" +#line 4235 "util/configparser.c" break; - case 414: /* server_root_key_sentinel: VAR_ROOT_KEY_SENTINEL STRING_ARG */ -#line 1380 "util/configparser.y" + case 415: /* server_root_key_sentinel: VAR_ROOT_KEY_SENTINEL STRING_ARG */ +#line 1381 "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) @@ -4228,21 +4245,21 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4232 "util/configparser.c" +#line 4249 "util/configparser.c" break; - case 415: /* server_domain_insecure: VAR_DOMAIN_INSECURE STRING_ARG */ -#line 1391 "util/configparser.y" + case 416: /* server_domain_insecure: VAR_DOMAIN_INSECURE STRING_ARG */ +#line 1392 "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 4242 "util/configparser.c" +#line 4259 "util/configparser.c" break; - case 416: /* server_hide_identity: VAR_HIDE_IDENTITY STRING_ARG */ -#line 1398 "util/configparser.y" + case 417: /* server_hide_identity: VAR_HIDE_IDENTITY STRING_ARG */ +#line 1399 "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) @@ -4250,11 +4267,11 @@ yyparse (void) else cfg_parser->cfg->hide_identity = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4254 "util/configparser.c" +#line 4271 "util/configparser.c" break; - case 417: /* server_hide_version: VAR_HIDE_VERSION STRING_ARG */ -#line 1407 "util/configparser.y" + case 418: /* server_hide_version: VAR_HIDE_VERSION STRING_ARG */ +#line 1408 "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) @@ -4262,11 +4279,11 @@ yyparse (void) else cfg_parser->cfg->hide_version = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4266 "util/configparser.c" +#line 4283 "util/configparser.c" break; - case 418: /* server_hide_trustanchor: VAR_HIDE_TRUSTANCHOR STRING_ARG */ -#line 1416 "util/configparser.y" + case 419: /* server_hide_trustanchor: VAR_HIDE_TRUSTANCHOR STRING_ARG */ +#line 1417 "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) @@ -4274,11 +4291,11 @@ yyparse (void) else cfg_parser->cfg->hide_trustanchor = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4278 "util/configparser.c" +#line 4295 "util/configparser.c" break; - case 419: /* server_hide_http_user_agent: VAR_HIDE_HTTP_USER_AGENT STRING_ARG */ -#line 1425 "util/configparser.y" + case 420: /* server_hide_http_user_agent: VAR_HIDE_HTTP_USER_AGENT STRING_ARG */ +#line 1426 "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) @@ -4286,41 +4303,41 @@ yyparse (void) else cfg_parser->cfg->hide_http_user_agent = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4290 "util/configparser.c" +#line 4307 "util/configparser.c" break; - case 420: /* server_identity: VAR_IDENTITY STRING_ARG */ -#line 1434 "util/configparser.y" + case 421: /* server_identity: VAR_IDENTITY STRING_ARG */ +#line 1435 "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 4300 "util/configparser.c" +#line 4317 "util/configparser.c" break; - case 421: /* server_version: VAR_VERSION STRING_ARG */ -#line 1441 "util/configparser.y" + case 422: /* server_version: VAR_VERSION STRING_ARG */ +#line 1442 "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 4310 "util/configparser.c" +#line 4327 "util/configparser.c" break; - case 422: /* server_http_user_agent: VAR_HTTP_USER_AGENT STRING_ARG */ -#line 1448 "util/configparser.y" + case 423: /* server_http_user_agent: VAR_HTTP_USER_AGENT STRING_ARG */ +#line 1449 "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 4320 "util/configparser.c" +#line 4337 "util/configparser.c" break; - case 423: /* server_nsid: VAR_NSID STRING_ARG */ -#line 1455 "util/configparser.y" + case 424: /* server_nsid: VAR_NSID STRING_ARG */ +#line 1456 "util/configparser.y" { OUTYY(("P(server_nsid:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->nsid_cfg_str); @@ -4335,33 +4352,33 @@ yyparse (void) yyerror("the NSID must be either a hex string or an " "ascii character string prepended with ascii_."); } -#line 4339 "util/configparser.c" +#line 4356 "util/configparser.c" break; - case 424: /* server_so_rcvbuf: VAR_SO_RCVBUF STRING_ARG */ -#line 1471 "util/configparser.y" + case 425: /* server_so_rcvbuf: VAR_SO_RCVBUF STRING_ARG */ +#line 1472 "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 4350 "util/configparser.c" +#line 4367 "util/configparser.c" break; - case 425: /* server_so_sndbuf: VAR_SO_SNDBUF STRING_ARG */ -#line 1479 "util/configparser.y" + case 426: /* server_so_sndbuf: VAR_SO_SNDBUF STRING_ARG */ +#line 1480 "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 4361 "util/configparser.c" +#line 4378 "util/configparser.c" break; - case 426: /* server_so_reuseport: VAR_SO_REUSEPORT STRING_ARG */ -#line 1487 "util/configparser.y" + case 427: /* server_so_reuseport: VAR_SO_REUSEPORT STRING_ARG */ +#line 1488 "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) @@ -4370,11 +4387,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4374 "util/configparser.c" +#line 4391 "util/configparser.c" break; - case 427: /* server_ip_transparent: VAR_IP_TRANSPARENT STRING_ARG */ -#line 1497 "util/configparser.y" + case 428: /* server_ip_transparent: VAR_IP_TRANSPARENT STRING_ARG */ +#line 1498 "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) @@ -4383,11 +4400,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4387 "util/configparser.c" +#line 4404 "util/configparser.c" break; - case 428: /* server_ip_freebind: VAR_IP_FREEBIND STRING_ARG */ -#line 1507 "util/configparser.y" + case 429: /* server_ip_freebind: VAR_IP_FREEBIND STRING_ARG */ +#line 1508 "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) @@ -4396,11 +4413,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4400 "util/configparser.c" +#line 4417 "util/configparser.c" break; - case 429: /* server_ip_dscp: VAR_IP_DSCP STRING_ARG */ -#line 1517 "util/configparser.y" + case 430: /* server_ip_dscp: VAR_IP_DSCP STRING_ARG */ +#line 1518 "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) @@ -4413,22 +4430,22 @@ yyparse (void) cfg_parser->cfg->ip_dscp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4417 "util/configparser.c" +#line 4434 "util/configparser.c" break; - case 430: /* server_stream_wait_size: VAR_STREAM_WAIT_SIZE STRING_ARG */ -#line 1531 "util/configparser.y" + case 431: /* server_stream_wait_size: VAR_STREAM_WAIT_SIZE STRING_ARG */ +#line 1532 "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 4428 "util/configparser.c" +#line 4445 "util/configparser.c" break; - case 431: /* server_edns_buffer_size: VAR_EDNS_BUFFER_SIZE STRING_ARG */ -#line 1539 "util/configparser.y" + case 432: /* server_edns_buffer_size: VAR_EDNS_BUFFER_SIZE STRING_ARG */ +#line 1540 "util/configparser.y" { OUTYY(("P(server_edns_buffer_size:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4440,11 +4457,11 @@ yyparse (void) else cfg_parser->cfg->edns_buffer_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4444 "util/configparser.c" +#line 4461 "util/configparser.c" break; - case 432: /* server_msg_buffer_size: VAR_MSG_BUFFER_SIZE STRING_ARG */ -#line 1552 "util/configparser.y" + case 433: /* server_msg_buffer_size: VAR_MSG_BUFFER_SIZE STRING_ARG */ +#line 1553 "util/configparser.y" { OUTYY(("P(server_msg_buffer_size:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4454,22 +4471,22 @@ yyparse (void) else cfg_parser->cfg->msg_buffer_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4458 "util/configparser.c" +#line 4475 "util/configparser.c" break; - case 433: /* server_msg_cache_size: VAR_MSG_CACHE_SIZE STRING_ARG */ -#line 1563 "util/configparser.y" + case 434: /* server_msg_cache_size: VAR_MSG_CACHE_SIZE STRING_ARG */ +#line 1564 "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 4469 "util/configparser.c" +#line 4486 "util/configparser.c" break; - case 434: /* server_msg_cache_slabs: VAR_MSG_CACHE_SLABS STRING_ARG */ -#line 1571 "util/configparser.y" + case 435: /* server_msg_cache_slabs: VAR_MSG_CACHE_SLABS STRING_ARG */ +#line 1572 "util/configparser.y" { OUTYY(("P(server_msg_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) { @@ -4481,11 +4498,11 @@ yyparse (void) } free((yyvsp[0].str)); } -#line 4485 "util/configparser.c" +#line 4502 "util/configparser.c" break; - case 435: /* server_num_queries_per_thread: VAR_NUM_QUERIES_PER_THREAD STRING_ARG */ -#line 1584 "util/configparser.y" + case 436: /* server_num_queries_per_thread: VAR_NUM_QUERIES_PER_THREAD STRING_ARG */ +#line 1585 "util/configparser.y" { OUTYY(("P(server_num_queries_per_thread:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4493,11 +4510,11 @@ yyparse (void) else cfg_parser->cfg->num_queries_per_thread = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4497 "util/configparser.c" +#line 4514 "util/configparser.c" break; - case 436: /* server_jostle_timeout: VAR_JOSTLE_TIMEOUT STRING_ARG */ -#line 1593 "util/configparser.y" + case 437: /* server_jostle_timeout: VAR_JOSTLE_TIMEOUT STRING_ARG */ +#line 1594 "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) @@ -4505,11 +4522,11 @@ yyparse (void) else cfg_parser->cfg->jostle_time = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4509 "util/configparser.c" +#line 4526 "util/configparser.c" break; - case 437: /* server_delay_close: VAR_DELAY_CLOSE STRING_ARG */ -#line 1602 "util/configparser.y" + case 438: /* server_delay_close: VAR_DELAY_CLOSE STRING_ARG */ +#line 1603 "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) @@ -4517,11 +4534,11 @@ yyparse (void) else cfg_parser->cfg->delay_close = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4521 "util/configparser.c" +#line 4538 "util/configparser.c" break; - case 438: /* server_udp_connect: VAR_UDP_CONNECT STRING_ARG */ -#line 1611 "util/configparser.y" + case 439: /* server_udp_connect: VAR_UDP_CONNECT STRING_ARG */ +#line 1612 "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) @@ -4529,11 +4546,11 @@ yyparse (void) else cfg_parser->cfg->udp_connect = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4533 "util/configparser.c" +#line 4550 "util/configparser.c" break; - case 439: /* server_unblock_lan_zones: VAR_UNBLOCK_LAN_ZONES STRING_ARG */ -#line 1620 "util/configparser.y" + case 440: /* server_unblock_lan_zones: VAR_UNBLOCK_LAN_ZONES STRING_ARG */ +#line 1621 "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) @@ -4542,11 +4559,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4546 "util/configparser.c" +#line 4563 "util/configparser.c" break; - case 440: /* server_insecure_lan_zones: VAR_INSECURE_LAN_ZONES STRING_ARG */ -#line 1630 "util/configparser.y" + case 441: /* server_insecure_lan_zones: VAR_INSECURE_LAN_ZONES STRING_ARG */ +#line 1631 "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) @@ -4555,22 +4572,22 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4559 "util/configparser.c" +#line 4576 "util/configparser.c" break; - case 441: /* server_rrset_cache_size: VAR_RRSET_CACHE_SIZE STRING_ARG */ -#line 1640 "util/configparser.y" + case 442: /* server_rrset_cache_size: VAR_RRSET_CACHE_SIZE STRING_ARG */ +#line 1641 "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 4570 "util/configparser.c" +#line 4587 "util/configparser.c" break; - case 442: /* server_rrset_cache_slabs: VAR_RRSET_CACHE_SLABS STRING_ARG */ -#line 1648 "util/configparser.y" + case 443: /* server_rrset_cache_slabs: VAR_RRSET_CACHE_SLABS STRING_ARG */ +#line 1649 "util/configparser.y" { OUTYY(("P(server_rrset_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) { @@ -4582,11 +4599,11 @@ yyparse (void) } free((yyvsp[0].str)); } -#line 4586 "util/configparser.c" +#line 4603 "util/configparser.c" break; - case 443: /* server_infra_host_ttl: VAR_INFRA_HOST_TTL STRING_ARG */ -#line 1661 "util/configparser.y" + case 444: /* server_infra_host_ttl: VAR_INFRA_HOST_TTL STRING_ARG */ +#line 1662 "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) @@ -4594,22 +4611,22 @@ yyparse (void) else cfg_parser->cfg->host_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4598 "util/configparser.c" +#line 4615 "util/configparser.c" break; - case 444: /* server_infra_lame_ttl: VAR_INFRA_LAME_TTL STRING_ARG */ -#line 1670 "util/configparser.y" + case 445: /* server_infra_lame_ttl: VAR_INFRA_LAME_TTL STRING_ARG */ +#line 1671 "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 4609 "util/configparser.c" +#line 4626 "util/configparser.c" break; - case 445: /* server_infra_cache_numhosts: VAR_INFRA_CACHE_NUMHOSTS STRING_ARG */ -#line 1678 "util/configparser.y" + case 446: /* server_infra_cache_numhosts: VAR_INFRA_CACHE_NUMHOSTS STRING_ARG */ +#line 1679 "util/configparser.y" { OUTYY(("P(server_infra_cache_numhosts:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4617,22 +4634,22 @@ yyparse (void) else cfg_parser->cfg->infra_cache_numhosts = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4621 "util/configparser.c" +#line 4638 "util/configparser.c" break; - case 446: /* server_infra_cache_lame_size: VAR_INFRA_CACHE_LAME_SIZE STRING_ARG */ -#line 1687 "util/configparser.y" + case 447: /* server_infra_cache_lame_size: VAR_INFRA_CACHE_LAME_SIZE STRING_ARG */ +#line 1688 "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 4632 "util/configparser.c" +#line 4649 "util/configparser.c" break; - case 447: /* server_infra_cache_slabs: VAR_INFRA_CACHE_SLABS STRING_ARG */ -#line 1695 "util/configparser.y" + case 448: /* server_infra_cache_slabs: VAR_INFRA_CACHE_SLABS STRING_ARG */ +#line 1696 "util/configparser.y" { OUTYY(("P(server_infra_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) { @@ -4644,11 +4661,11 @@ yyparse (void) } free((yyvsp[0].str)); } -#line 4648 "util/configparser.c" +#line 4665 "util/configparser.c" break; - case 448: /* server_infra_cache_min_rtt: VAR_INFRA_CACHE_MIN_RTT STRING_ARG */ -#line 1708 "util/configparser.y" + case 449: /* server_infra_cache_min_rtt: VAR_INFRA_CACHE_MIN_RTT STRING_ARG */ +#line 1709 "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) @@ -4656,11 +4673,11 @@ yyparse (void) else cfg_parser->cfg->infra_cache_min_rtt = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4660 "util/configparser.c" +#line 4677 "util/configparser.c" break; - case 449: /* server_infra_cache_max_rtt: VAR_INFRA_CACHE_MAX_RTT STRING_ARG */ -#line 1717 "util/configparser.y" + case 450: /* server_infra_cache_max_rtt: VAR_INFRA_CACHE_MAX_RTT STRING_ARG */ +#line 1718 "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) @@ -4668,11 +4685,11 @@ yyparse (void) else cfg_parser->cfg->infra_cache_max_rtt = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4672 "util/configparser.c" +#line 4689 "util/configparser.c" break; - case 450: /* server_infra_keep_probing: VAR_INFRA_KEEP_PROBING STRING_ARG */ -#line 1726 "util/configparser.y" + case 451: /* server_infra_keep_probing: VAR_INFRA_KEEP_PROBING STRING_ARG */ +#line 1727 "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) @@ -4681,21 +4698,21 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4685 "util/configparser.c" +#line 4702 "util/configparser.c" break; - case 451: /* server_target_fetch_policy: VAR_TARGET_FETCH_POLICY STRING_ARG */ -#line 1736 "util/configparser.y" + case 452: /* server_target_fetch_policy: VAR_TARGET_FETCH_POLICY STRING_ARG */ +#line 1737 "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 4695 "util/configparser.c" +#line 4712 "util/configparser.c" break; - case 452: /* server_harden_short_bufsize: VAR_HARDEN_SHORT_BUFSIZE STRING_ARG */ -#line 1743 "util/configparser.y" + case 453: /* server_harden_short_bufsize: VAR_HARDEN_SHORT_BUFSIZE STRING_ARG */ +#line 1744 "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) @@ -4704,11 +4721,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4708 "util/configparser.c" +#line 4725 "util/configparser.c" break; - case 453: /* server_harden_large_queries: VAR_HARDEN_LARGE_QUERIES STRING_ARG */ -#line 1753 "util/configparser.y" + case 454: /* server_harden_large_queries: VAR_HARDEN_LARGE_QUERIES STRING_ARG */ +#line 1754 "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) @@ -4717,11 +4734,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4721 "util/configparser.c" +#line 4738 "util/configparser.c" break; - case 454: /* server_harden_glue: VAR_HARDEN_GLUE STRING_ARG */ -#line 1763 "util/configparser.y" + case 455: /* server_harden_glue: VAR_HARDEN_GLUE STRING_ARG */ +#line 1764 "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) @@ -4730,11 +4747,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4734 "util/configparser.c" +#line 4751 "util/configparser.c" break; - case 455: /* server_harden_dnssec_stripped: VAR_HARDEN_DNSSEC_STRIPPED STRING_ARG */ -#line 1773 "util/configparser.y" + case 456: /* server_harden_dnssec_stripped: VAR_HARDEN_DNSSEC_STRIPPED STRING_ARG */ +#line 1774 "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) @@ -4743,11 +4760,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4747 "util/configparser.c" +#line 4764 "util/configparser.c" break; - case 456: /* server_harden_below_nxdomain: VAR_HARDEN_BELOW_NXDOMAIN STRING_ARG */ -#line 1783 "util/configparser.y" + case 457: /* server_harden_below_nxdomain: VAR_HARDEN_BELOW_NXDOMAIN STRING_ARG */ +#line 1784 "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) @@ -4756,11 +4773,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4760 "util/configparser.c" +#line 4777 "util/configparser.c" break; - case 457: /* server_harden_referral_path: VAR_HARDEN_REFERRAL_PATH STRING_ARG */ -#line 1793 "util/configparser.y" + case 458: /* server_harden_referral_path: VAR_HARDEN_REFERRAL_PATH STRING_ARG */ +#line 1794 "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) @@ -4769,11 +4786,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4773 "util/configparser.c" +#line 4790 "util/configparser.c" break; - case 458: /* server_harden_algo_downgrade: VAR_HARDEN_ALGO_DOWNGRADE STRING_ARG */ -#line 1803 "util/configparser.y" + case 459: /* server_harden_algo_downgrade: VAR_HARDEN_ALGO_DOWNGRADE STRING_ARG */ +#line 1804 "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) @@ -4782,11 +4799,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4786 "util/configparser.c" +#line 4803 "util/configparser.c" break; - case 459: /* server_harden_unknown_additional: VAR_HARDEN_UNKNOWN_ADDITIONAL STRING_ARG */ -#line 1813 "util/configparser.y" + case 460: /* server_harden_unknown_additional: VAR_HARDEN_UNKNOWN_ADDITIONAL STRING_ARG */ +#line 1814 "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) @@ -4795,11 +4812,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4799 "util/configparser.c" +#line 4816 "util/configparser.c" break; - case 460: /* server_use_caps_for_id: VAR_USE_CAPS_FOR_ID STRING_ARG */ -#line 1823 "util/configparser.y" + case 461: /* server_use_caps_for_id: VAR_USE_CAPS_FOR_ID STRING_ARG */ +#line 1824 "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) @@ -4808,41 +4825,41 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4812 "util/configparser.c" +#line 4829 "util/configparser.c" break; - case 461: /* server_caps_whitelist: VAR_CAPS_WHITELIST STRING_ARG */ -#line 1833 "util/configparser.y" + case 462: /* server_caps_whitelist: VAR_CAPS_WHITELIST STRING_ARG */ +#line 1834 "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 4822 "util/configparser.c" +#line 4839 "util/configparser.c" break; - case 462: /* server_private_address: VAR_PRIVATE_ADDRESS STRING_ARG */ -#line 1840 "util/configparser.y" + case 463: /* server_private_address: VAR_PRIVATE_ADDRESS STRING_ARG */ +#line 1841 "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 4832 "util/configparser.c" +#line 4849 "util/configparser.c" break; - case 463: /* server_private_domain: VAR_PRIVATE_DOMAIN STRING_ARG */ -#line 1847 "util/configparser.y" + case 464: /* server_private_domain: VAR_PRIVATE_DOMAIN STRING_ARG */ +#line 1848 "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 4842 "util/configparser.c" +#line 4859 "util/configparser.c" break; - case 464: /* server_prefetch: VAR_PREFETCH STRING_ARG */ -#line 1854 "util/configparser.y" + case 465: /* server_prefetch: VAR_PREFETCH STRING_ARG */ +#line 1855 "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) @@ -4850,11 +4867,11 @@ yyparse (void) else cfg_parser->cfg->prefetch = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4854 "util/configparser.c" +#line 4871 "util/configparser.c" break; - case 465: /* server_prefetch_key: VAR_PREFETCH_KEY STRING_ARG */ -#line 1863 "util/configparser.y" + case 466: /* server_prefetch_key: VAR_PREFETCH_KEY STRING_ARG */ +#line 1864 "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) @@ -4862,11 +4879,11 @@ yyparse (void) else cfg_parser->cfg->prefetch_key = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4866 "util/configparser.c" +#line 4883 "util/configparser.c" break; - case 466: /* server_deny_any: VAR_DENY_ANY STRING_ARG */ -#line 1872 "util/configparser.y" + case 467: /* server_deny_any: VAR_DENY_ANY STRING_ARG */ +#line 1873 "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) @@ -4874,11 +4891,11 @@ yyparse (void) else cfg_parser->cfg->deny_any = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4878 "util/configparser.c" +#line 4895 "util/configparser.c" break; - case 467: /* server_unwanted_reply_threshold: VAR_UNWANTED_REPLY_THRESHOLD STRING_ARG */ -#line 1881 "util/configparser.y" + case 468: /* server_unwanted_reply_threshold: VAR_UNWANTED_REPLY_THRESHOLD STRING_ARG */ +#line 1882 "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) @@ -4886,21 +4903,21 @@ yyparse (void) else cfg_parser->cfg->unwanted_threshold = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4890 "util/configparser.c" +#line 4907 "util/configparser.c" break; - case 468: /* server_do_not_query_address: VAR_DO_NOT_QUERY_ADDRESS STRING_ARG */ -#line 1890 "util/configparser.y" + case 469: /* server_do_not_query_address: VAR_DO_NOT_QUERY_ADDRESS STRING_ARG */ +#line 1891 "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 4900 "util/configparser.c" +#line 4917 "util/configparser.c" break; - case 469: /* server_do_not_query_localhost: VAR_DO_NOT_QUERY_LOCALHOST STRING_ARG */ -#line 1897 "util/configparser.y" + case 470: /* server_do_not_query_localhost: VAR_DO_NOT_QUERY_LOCALHOST STRING_ARG */ +#line 1898 "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) @@ -4909,22 +4926,22 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4913 "util/configparser.c" +#line 4930 "util/configparser.c" break; - case 470: /* server_access_control: VAR_ACCESS_CONTROL STRING_ARG STRING_ARG */ -#line 1907 "util/configparser.y" + case 471: /* server_access_control: VAR_ACCESS_CONTROL STRING_ARG STRING_ARG */ +#line 1908 "util/configparser.y" { OUTYY(("P(server_access_control:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); validate_acl_action((yyvsp[0].str)); if(!cfg_str2list_insert(&cfg_parser->cfg->acls, (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding acl"); } -#line 4924 "util/configparser.c" +#line 4941 "util/configparser.c" break; - case 471: /* server_interface_action: VAR_INTERFACE_ACTION STRING_ARG STRING_ARG */ -#line 1915 "util/configparser.y" + case 472: /* server_interface_action: VAR_INTERFACE_ACTION STRING_ARG STRING_ARG */ +#line 1916 "util/configparser.y" { OUTYY(("P(server_interface_action:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); validate_acl_action((yyvsp[0].str)); @@ -4932,21 +4949,21 @@ yyparse (void) &cfg_parser->cfg->interface_actions, (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding acl"); } -#line 4936 "util/configparser.c" +#line 4953 "util/configparser.c" break; - case 472: /* server_module_conf: VAR_MODULE_CONF STRING_ARG */ -#line 1924 "util/configparser.y" + case 473: /* server_module_conf: VAR_MODULE_CONF STRING_ARG */ +#line 1925 "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 4946 "util/configparser.c" +#line 4963 "util/configparser.c" break; - case 473: /* server_val_override_date: VAR_VAL_OVERRIDE_DATE STRING_ARG */ -#line 1931 "util/configparser.y" + case 474: /* server_val_override_date: VAR_VAL_OVERRIDE_DATE STRING_ARG */ +#line 1932 "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) { @@ -4963,11 +4980,11 @@ yyparse (void) } free((yyvsp[0].str)); } -#line 4967 "util/configparser.c" +#line 4984 "util/configparser.c" break; - case 474: /* server_val_sig_skew_min: VAR_VAL_SIG_SKEW_MIN STRING_ARG */ -#line 1949 "util/configparser.y" + case 475: /* server_val_sig_skew_min: VAR_VAL_SIG_SKEW_MIN STRING_ARG */ +#line 1950 "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) { @@ -4979,11 +4996,11 @@ yyparse (void) } free((yyvsp[0].str)); } -#line 4983 "util/configparser.c" +#line 5000 "util/configparser.c" break; - case 475: /* server_val_sig_skew_max: VAR_VAL_SIG_SKEW_MAX STRING_ARG */ -#line 1962 "util/configparser.y" + case 476: /* server_val_sig_skew_max: VAR_VAL_SIG_SKEW_MAX STRING_ARG */ +#line 1963 "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) { @@ -4995,11 +5012,11 @@ yyparse (void) } free((yyvsp[0].str)); } -#line 4999 "util/configparser.c" +#line 5016 "util/configparser.c" break; - case 476: /* server_val_max_restart: VAR_VAL_MAX_RESTART STRING_ARG */ -#line 1975 "util/configparser.y" + case 477: /* server_val_max_restart: VAR_VAL_MAX_RESTART STRING_ARG */ +#line 1976 "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) { @@ -5011,11 +5028,11 @@ yyparse (void) } free((yyvsp[0].str)); } -#line 5015 "util/configparser.c" +#line 5032 "util/configparser.c" break; - case 477: /* server_cache_max_ttl: VAR_CACHE_MAX_TTL STRING_ARG */ -#line 1988 "util/configparser.y" + case 478: /* server_cache_max_ttl: VAR_CACHE_MAX_TTL STRING_ARG */ +#line 1989 "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) @@ -5023,11 +5040,11 @@ yyparse (void) else cfg_parser->cfg->max_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5027 "util/configparser.c" +#line 5044 "util/configparser.c" break; - case 478: /* server_cache_max_negative_ttl: VAR_CACHE_MAX_NEGATIVE_TTL STRING_ARG */ -#line 1997 "util/configparser.y" + case 479: /* server_cache_max_negative_ttl: VAR_CACHE_MAX_NEGATIVE_TTL STRING_ARG */ +#line 1998 "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) @@ -5035,11 +5052,11 @@ yyparse (void) else cfg_parser->cfg->max_negative_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5039 "util/configparser.c" +#line 5056 "util/configparser.c" break; - case 479: /* server_cache_min_ttl: VAR_CACHE_MIN_TTL STRING_ARG */ -#line 2006 "util/configparser.y" + case 480: /* server_cache_min_ttl: VAR_CACHE_MIN_TTL STRING_ARG */ +#line 2007 "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) @@ -5047,11 +5064,11 @@ yyparse (void) else cfg_parser->cfg->min_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5051 "util/configparser.c" +#line 5068 "util/configparser.c" break; - case 480: /* server_bogus_ttl: VAR_BOGUS_TTL STRING_ARG */ -#line 2015 "util/configparser.y" + case 481: /* server_bogus_ttl: VAR_BOGUS_TTL STRING_ARG */ +#line 2016 "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) @@ -5059,11 +5076,11 @@ yyparse (void) else cfg_parser->cfg->bogus_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5063 "util/configparser.c" +#line 5080 "util/configparser.c" break; - case 481: /* server_val_clean_additional: VAR_VAL_CLEAN_ADDITIONAL STRING_ARG */ -#line 2024 "util/configparser.y" + case 482: /* server_val_clean_additional: VAR_VAL_CLEAN_ADDITIONAL STRING_ARG */ +#line 2025 "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) @@ -5072,11 +5089,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5076 "util/configparser.c" +#line 5093 "util/configparser.c" break; - case 482: /* server_val_permissive_mode: VAR_VAL_PERMISSIVE_MODE STRING_ARG */ -#line 2034 "util/configparser.y" + case 483: /* server_val_permissive_mode: VAR_VAL_PERMISSIVE_MODE STRING_ARG */ +#line 2035 "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) @@ -5085,11 +5102,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5089 "util/configparser.c" +#line 5106 "util/configparser.c" break; - case 483: /* server_aggressive_nsec: VAR_AGGRESSIVE_NSEC STRING_ARG */ -#line 2044 "util/configparser.y" + case 484: /* server_aggressive_nsec: VAR_AGGRESSIVE_NSEC STRING_ARG */ +#line 2045 "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) @@ -5099,11 +5116,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5103 "util/configparser.c" +#line 5120 "util/configparser.c" break; - case 484: /* server_ignore_cd_flag: VAR_IGNORE_CD_FLAG STRING_ARG */ -#line 2055 "util/configparser.y" + case 485: /* server_ignore_cd_flag: VAR_IGNORE_CD_FLAG STRING_ARG */ +#line 2056 "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) @@ -5111,11 +5128,23 @@ yyparse (void) else cfg_parser->cfg->ignore_cd = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5115 "util/configparser.c" +#line 5132 "util/configparser.c" break; - case 485: /* server_serve_expired: VAR_SERVE_EXPIRED STRING_ARG */ -#line 2064 "util/configparser.y" + case 486: /* server_disable_edns_do: VAR_DISABLE_EDNS_DO STRING_ARG */ +#line 2065 "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) + yyerror("expected yes or no."); + else cfg_parser->cfg->disable_edns_do = (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); + } +#line 5144 "util/configparser.c" + break; + + case 487: /* server_serve_expired: VAR_SERVE_EXPIRED STRING_ARG */ +#line 2074 "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) @@ -5123,11 +5152,11 @@ yyparse (void) else cfg_parser->cfg->serve_expired = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5127 "util/configparser.c" +#line 5156 "util/configparser.c" break; - case 486: /* server_serve_expired_ttl: VAR_SERVE_EXPIRED_TTL STRING_ARG */ -#line 2073 "util/configparser.y" + case 488: /* server_serve_expired_ttl: VAR_SERVE_EXPIRED_TTL STRING_ARG */ +#line 2083 "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) @@ -5135,11 +5164,11 @@ yyparse (void) else cfg_parser->cfg->serve_expired_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5139 "util/configparser.c" +#line 5168 "util/configparser.c" break; - case 487: /* server_serve_expired_ttl_reset: VAR_SERVE_EXPIRED_TTL_RESET STRING_ARG */ -#line 2082 "util/configparser.y" + case 489: /* server_serve_expired_ttl_reset: VAR_SERVE_EXPIRED_TTL_RESET STRING_ARG */ +#line 2092 "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) @@ -5147,11 +5176,11 @@ yyparse (void) else cfg_parser->cfg->serve_expired_ttl_reset = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5151 "util/configparser.c" +#line 5180 "util/configparser.c" break; - case 488: /* server_serve_expired_reply_ttl: VAR_SERVE_EXPIRED_REPLY_TTL STRING_ARG */ -#line 2091 "util/configparser.y" + case 490: /* server_serve_expired_reply_ttl: VAR_SERVE_EXPIRED_REPLY_TTL STRING_ARG */ +#line 2101 "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) @@ -5159,11 +5188,11 @@ yyparse (void) else cfg_parser->cfg->serve_expired_reply_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5163 "util/configparser.c" +#line 5192 "util/configparser.c" break; - case 489: /* server_serve_expired_client_timeout: VAR_SERVE_EXPIRED_CLIENT_TIMEOUT STRING_ARG */ -#line 2100 "util/configparser.y" + case 491: /* server_serve_expired_client_timeout: VAR_SERVE_EXPIRED_CLIENT_TIMEOUT STRING_ARG */ +#line 2110 "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) @@ -5171,11 +5200,11 @@ yyparse (void) else cfg_parser->cfg->serve_expired_client_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5175 "util/configparser.c" +#line 5204 "util/configparser.c" break; - case 490: /* server_ede_serve_expired: VAR_EDE_SERVE_EXPIRED STRING_ARG */ -#line 2109 "util/configparser.y" + case 492: /* server_ede_serve_expired: VAR_EDE_SERVE_EXPIRED STRING_ARG */ +#line 2119 "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) @@ -5183,11 +5212,11 @@ yyparse (void) else cfg_parser->cfg->ede_serve_expired = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5187 "util/configparser.c" +#line 5216 "util/configparser.c" break; - case 491: /* server_serve_original_ttl: VAR_SERVE_ORIGINAL_TTL STRING_ARG */ -#line 2118 "util/configparser.y" + case 493: /* server_serve_original_ttl: VAR_SERVE_ORIGINAL_TTL STRING_ARG */ +#line 2128 "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) @@ -5195,11 +5224,11 @@ yyparse (void) else cfg_parser->cfg->serve_original_ttl = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5199 "util/configparser.c" +#line 5228 "util/configparser.c" break; - case 492: /* server_fake_dsa: VAR_FAKE_DSA STRING_ARG */ -#line 2127 "util/configparser.y" + case 494: /* server_fake_dsa: VAR_FAKE_DSA STRING_ARG */ +#line 2137 "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) @@ -5211,11 +5240,11 @@ yyparse (void) #endif free((yyvsp[0].str)); } -#line 5215 "util/configparser.c" +#line 5244 "util/configparser.c" break; - case 493: /* server_fake_sha1: VAR_FAKE_SHA1 STRING_ARG */ -#line 2140 "util/configparser.y" + case 495: /* server_fake_sha1: VAR_FAKE_SHA1 STRING_ARG */ +#line 2150 "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) @@ -5227,11 +5256,11 @@ yyparse (void) #endif free((yyvsp[0].str)); } -#line 5231 "util/configparser.c" +#line 5260 "util/configparser.c" break; - case 494: /* server_val_log_level: VAR_VAL_LOG_LEVEL STRING_ARG */ -#line 2153 "util/configparser.y" + case 496: /* server_val_log_level: VAR_VAL_LOG_LEVEL STRING_ARG */ +#line 2163 "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) @@ -5239,21 +5268,21 @@ yyparse (void) else cfg_parser->cfg->val_log_level = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5243 "util/configparser.c" +#line 5272 "util/configparser.c" break; - case 495: /* server_val_nsec3_keysize_iterations: VAR_VAL_NSEC3_KEYSIZE_ITERATIONS STRING_ARG */ -#line 2162 "util/configparser.y" + case 497: /* server_val_nsec3_keysize_iterations: VAR_VAL_NSEC3_KEYSIZE_ITERATIONS STRING_ARG */ +#line 2172 "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 5253 "util/configparser.c" +#line 5282 "util/configparser.c" break; - case 496: /* server_zonemd_permissive_mode: VAR_ZONEMD_PERMISSIVE_MODE STRING_ARG */ -#line 2169 "util/configparser.y" + case 498: /* server_zonemd_permissive_mode: VAR_ZONEMD_PERMISSIVE_MODE STRING_ARG */ +#line 2179 "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) @@ -5261,11 +5290,11 @@ yyparse (void) else cfg_parser->cfg->zonemd_permissive_mode = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5265 "util/configparser.c" +#line 5294 "util/configparser.c" break; - case 497: /* server_add_holddown: VAR_ADD_HOLDDOWN STRING_ARG */ -#line 2178 "util/configparser.y" + case 499: /* server_add_holddown: VAR_ADD_HOLDDOWN STRING_ARG */ +#line 2188 "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) @@ -5273,11 +5302,11 @@ yyparse (void) else cfg_parser->cfg->add_holddown = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5277 "util/configparser.c" +#line 5306 "util/configparser.c" break; - case 498: /* server_del_holddown: VAR_DEL_HOLDDOWN STRING_ARG */ -#line 2187 "util/configparser.y" + case 500: /* server_del_holddown: VAR_DEL_HOLDDOWN STRING_ARG */ +#line 2197 "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) @@ -5285,11 +5314,11 @@ yyparse (void) else cfg_parser->cfg->del_holddown = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5289 "util/configparser.c" +#line 5318 "util/configparser.c" break; - case 499: /* server_keep_missing: VAR_KEEP_MISSING STRING_ARG */ -#line 2196 "util/configparser.y" + case 501: /* server_keep_missing: VAR_KEEP_MISSING STRING_ARG */ +#line 2206 "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) @@ -5297,11 +5326,11 @@ yyparse (void) else cfg_parser->cfg->keep_missing = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5301 "util/configparser.c" +#line 5330 "util/configparser.c" break; - case 500: /* server_permit_small_holddown: VAR_PERMIT_SMALL_HOLDDOWN STRING_ARG */ -#line 2205 "util/configparser.y" + case 502: /* server_permit_small_holddown: VAR_PERMIT_SMALL_HOLDDOWN STRING_ARG */ +#line 2215 "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) @@ -5310,22 +5339,22 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5314 "util/configparser.c" +#line 5343 "util/configparser.c" break; - case 501: /* server_key_cache_size: VAR_KEY_CACHE_SIZE STRING_ARG */ -#line 2215 "util/configparser.y" + case 503: /* server_key_cache_size: VAR_KEY_CACHE_SIZE STRING_ARG */ +#line 2225 "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 5325 "util/configparser.c" +#line 5354 "util/configparser.c" break; - case 502: /* server_key_cache_slabs: VAR_KEY_CACHE_SLABS STRING_ARG */ -#line 2223 "util/configparser.y" + case 504: /* server_key_cache_slabs: VAR_KEY_CACHE_SLABS STRING_ARG */ +#line 2233 "util/configparser.y" { OUTYY(("P(server_key_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) { @@ -5337,22 +5366,22 @@ yyparse (void) } free((yyvsp[0].str)); } -#line 5341 "util/configparser.c" +#line 5370 "util/configparser.c" break; - case 503: /* server_neg_cache_size: VAR_NEG_CACHE_SIZE STRING_ARG */ -#line 2236 "util/configparser.y" + case 505: /* server_neg_cache_size: VAR_NEG_CACHE_SIZE STRING_ARG */ +#line 2246 "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 5352 "util/configparser.c" +#line 5381 "util/configparser.c" break; - case 504: /* server_local_zone: VAR_LOCAL_ZONE STRING_ARG STRING_ARG */ -#line 2244 "util/configparser.y" + case 506: /* server_local_zone: VAR_LOCAL_ZONE STRING_ARG STRING_ARG */ +#line 2254 "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 && @@ -5407,21 +5436,21 @@ yyparse (void) fatal_exit("out of memory adding local-zone"); } } -#line 5411 "util/configparser.c" +#line 5440 "util/configparser.c" break; - case 505: /* server_local_data: VAR_LOCAL_DATA STRING_ARG */ -#line 2300 "util/configparser.y" + case 507: /* server_local_data: VAR_LOCAL_DATA STRING_ARG */ +#line 2310 "util/configparser.y" { OUTYY(("P(server_local_data:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->local_data, (yyvsp[0].str))) fatal_exit("out of memory adding local-data"); } -#line 5421 "util/configparser.c" +#line 5450 "util/configparser.c" break; - case 506: /* server_local_data_ptr: VAR_LOCAL_DATA_PTR STRING_ARG */ -#line 2307 "util/configparser.y" + case 508: /* server_local_data_ptr: VAR_LOCAL_DATA_PTR STRING_ARG */ +#line 2317 "util/configparser.y" { char* ptr; OUTYY(("P(server_local_data_ptr:%s)\n", (yyvsp[0].str))); @@ -5435,11 +5464,11 @@ yyparse (void) yyerror("local-data-ptr could not be reversed"); } } -#line 5439 "util/configparser.c" +#line 5468 "util/configparser.c" break; - case 507: /* server_minimal_responses: VAR_MINIMAL_RESPONSES STRING_ARG */ -#line 2322 "util/configparser.y" + case 509: /* server_minimal_responses: VAR_MINIMAL_RESPONSES STRING_ARG */ +#line 2332 "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) @@ -5448,11 +5477,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5452 "util/configparser.c" +#line 5481 "util/configparser.c" break; - case 508: /* server_rrset_roundrobin: VAR_RRSET_ROUNDROBIN STRING_ARG */ -#line 2332 "util/configparser.y" + case 510: /* server_rrset_roundrobin: VAR_RRSET_ROUNDROBIN STRING_ARG */ +#line 2342 "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) @@ -5461,41 +5490,41 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5465 "util/configparser.c" +#line 5494 "util/configparser.c" break; - case 509: /* server_unknown_server_time_limit: VAR_UNKNOWN_SERVER_TIME_LIMIT STRING_ARG */ -#line 2342 "util/configparser.y" + case 511: /* server_unknown_server_time_limit: VAR_UNKNOWN_SERVER_TIME_LIMIT STRING_ARG */ +#line 2352 "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 5475 "util/configparser.c" +#line 5504 "util/configparser.c" break; - case 510: /* server_max_udp_size: VAR_MAX_UDP_SIZE STRING_ARG */ -#line 2349 "util/configparser.y" + case 512: /* server_max_udp_size: VAR_MAX_UDP_SIZE STRING_ARG */ +#line 2359 "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 5485 "util/configparser.c" +#line 5514 "util/configparser.c" break; - case 511: /* server_dns64_prefix: VAR_DNS64_PREFIX STRING_ARG */ -#line 2356 "util/configparser.y" + case 513: /* server_dns64_prefix: VAR_DNS64_PREFIX STRING_ARG */ +#line 2366 "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 5495 "util/configparser.c" +#line 5524 "util/configparser.c" break; - case 512: /* server_dns64_synthall: VAR_DNS64_SYNTHALL STRING_ARG */ -#line 2363 "util/configparser.y" + case 514: /* server_dns64_synthall: VAR_DNS64_SYNTHALL STRING_ARG */ +#line 2373 "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) @@ -5503,32 +5532,32 @@ yyparse (void) else cfg_parser->cfg->dns64_synthall = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5507 "util/configparser.c" +#line 5536 "util/configparser.c" break; - case 513: /* server_dns64_ignore_aaaa: VAR_DNS64_IGNORE_AAAA STRING_ARG */ -#line 2372 "util/configparser.y" + case 515: /* server_dns64_ignore_aaaa: VAR_DNS64_IGNORE_AAAA STRING_ARG */ +#line 2382 "util/configparser.y" { OUTYY(("P(dns64_ignore_aaaa:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->dns64_ignore_aaaa, (yyvsp[0].str))) fatal_exit("out of memory adding dns64-ignore-aaaa"); } -#line 5518 "util/configparser.c" +#line 5547 "util/configparser.c" break; - case 514: /* server_nat64_prefix: VAR_NAT64_PREFIX STRING_ARG */ -#line 2380 "util/configparser.y" + case 516: /* server_nat64_prefix: VAR_NAT64_PREFIX STRING_ARG */ +#line 2390 "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 5528 "util/configparser.c" +#line 5557 "util/configparser.c" break; - case 515: /* server_define_tag: VAR_DEFINE_TAG STRING_ARG */ -#line 2387 "util/configparser.y" + case 517: /* server_define_tag: VAR_DEFINE_TAG STRING_ARG */ +#line 2397 "util/configparser.y" { char* p, *s = (yyvsp[0].str); OUTYY(("P(server_define_tag:%s)\n", (yyvsp[0].str))); @@ -5541,11 +5570,11 @@ yyparse (void) } free((yyvsp[0].str)); } -#line 5545 "util/configparser.c" +#line 5574 "util/configparser.c" break; - case 516: /* server_local_zone_tag: VAR_LOCAL_ZONE_TAG STRING_ARG STRING_ARG */ -#line 2401 "util/configparser.y" + case 518: /* server_local_zone_tag: VAR_LOCAL_ZONE_TAG STRING_ARG STRING_ARG */ +#line 2411 "util/configparser.y" { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -5565,11 +5594,11 @@ yyparse (void) } } } -#line 5569 "util/configparser.c" +#line 5598 "util/configparser.c" break; - case 517: /* server_access_control_tag: VAR_ACCESS_CONTROL_TAG STRING_ARG STRING_ARG */ -#line 2422 "util/configparser.y" + case 519: /* server_access_control_tag: VAR_ACCESS_CONTROL_TAG STRING_ARG STRING_ARG */ +#line 2432 "util/configparser.y" { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -5589,11 +5618,11 @@ yyparse (void) } } } -#line 5593 "util/configparser.c" +#line 5622 "util/configparser.c" break; - case 518: /* server_access_control_tag_action: VAR_ACCESS_CONTROL_TAG_ACTION STRING_ARG STRING_ARG STRING_ARG */ -#line 2443 "util/configparser.y" + case 520: /* server_access_control_tag_action: VAR_ACCESS_CONTROL_TAG_ACTION STRING_ARG STRING_ARG STRING_ARG */ +#line 2453 "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, @@ -5604,11 +5633,11 @@ yyparse (void) free((yyvsp[0].str)); } } -#line 5608 "util/configparser.c" +#line 5637 "util/configparser.c" break; - case 519: /* server_access_control_tag_data: VAR_ACCESS_CONTROL_TAG_DATA STRING_ARG STRING_ARG STRING_ARG */ -#line 2455 "util/configparser.y" + case 521: /* server_access_control_tag_data: VAR_ACCESS_CONTROL_TAG_DATA STRING_ARG STRING_ARG STRING_ARG */ +#line 2465 "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, @@ -5619,11 +5648,11 @@ yyparse (void) free((yyvsp[0].str)); } } -#line 5623 "util/configparser.c" +#line 5652 "util/configparser.c" break; - case 520: /* server_local_zone_override: VAR_LOCAL_ZONE_OVERRIDE STRING_ARG STRING_ARG STRING_ARG */ -#line 2467 "util/configparser.y" + case 522: /* server_local_zone_override: VAR_LOCAL_ZONE_OVERRIDE STRING_ARG STRING_ARG STRING_ARG */ +#line 2477 "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, @@ -5634,11 +5663,11 @@ yyparse (void) free((yyvsp[0].str)); } } -#line 5638 "util/configparser.c" +#line 5667 "util/configparser.c" break; - case 521: /* server_access_control_view: VAR_ACCESS_CONTROL_VIEW STRING_ARG STRING_ARG */ -#line 2479 "util/configparser.y" + case 523: /* server_access_control_view: VAR_ACCESS_CONTROL_VIEW STRING_ARG STRING_ARG */ +#line 2489 "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, @@ -5646,11 +5675,11 @@ yyparse (void) yyerror("out of memory"); } } -#line 5650 "util/configparser.c" +#line 5679 "util/configparser.c" break; - case 522: /* server_interface_tag: VAR_INTERFACE_TAG STRING_ARG STRING_ARG */ -#line 2488 "util/configparser.y" + case 524: /* server_interface_tag: VAR_INTERFACE_TAG STRING_ARG STRING_ARG */ +#line 2498 "util/configparser.y" { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -5670,11 +5699,11 @@ yyparse (void) } } } -#line 5674 "util/configparser.c" +#line 5703 "util/configparser.c" break; - case 523: /* server_interface_tag_action: VAR_INTERFACE_TAG_ACTION STRING_ARG STRING_ARG STRING_ARG */ -#line 2509 "util/configparser.y" + case 525: /* server_interface_tag_action: VAR_INTERFACE_TAG_ACTION STRING_ARG STRING_ARG STRING_ARG */ +#line 2519 "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, @@ -5685,11 +5714,11 @@ yyparse (void) free((yyvsp[0].str)); } } -#line 5689 "util/configparser.c" +#line 5718 "util/configparser.c" break; - case 524: /* server_interface_tag_data: VAR_INTERFACE_TAG_DATA STRING_ARG STRING_ARG STRING_ARG */ -#line 2521 "util/configparser.y" + case 526: /* server_interface_tag_data: VAR_INTERFACE_TAG_DATA STRING_ARG STRING_ARG STRING_ARG */ +#line 2531 "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, @@ -5700,11 +5729,11 @@ yyparse (void) free((yyvsp[0].str)); } } -#line 5704 "util/configparser.c" +#line 5733 "util/configparser.c" break; - case 525: /* server_interface_view: VAR_INTERFACE_VIEW STRING_ARG STRING_ARG */ -#line 2533 "util/configparser.y" + case 527: /* server_interface_view: VAR_INTERFACE_VIEW STRING_ARG STRING_ARG */ +#line 2543 "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, @@ -5712,11 +5741,11 @@ yyparse (void) yyerror("out of memory"); } } -#line 5716 "util/configparser.c" +#line 5745 "util/configparser.c" break; - case 526: /* server_response_ip_tag: VAR_RESPONSE_IP_TAG STRING_ARG STRING_ARG */ -#line 2542 "util/configparser.y" + case 528: /* server_response_ip_tag: VAR_RESPONSE_IP_TAG STRING_ARG STRING_ARG */ +#line 2552 "util/configparser.y" { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -5736,11 +5765,11 @@ yyparse (void) } } } -#line 5740 "util/configparser.c" +#line 5769 "util/configparser.c" break; - case 527: /* server_ip_ratelimit: VAR_IP_RATELIMIT STRING_ARG */ -#line 2563 "util/configparser.y" + case 529: /* server_ip_ratelimit: VAR_IP_RATELIMIT STRING_ARG */ +#line 2573 "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) @@ -5748,11 +5777,11 @@ yyparse (void) else cfg_parser->cfg->ip_ratelimit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5752 "util/configparser.c" +#line 5781 "util/configparser.c" break; - case 528: /* server_ip_ratelimit_cookie: VAR_IP_RATELIMIT_COOKIE STRING_ARG */ -#line 2572 "util/configparser.y" + case 530: /* server_ip_ratelimit_cookie: VAR_IP_RATELIMIT_COOKIE STRING_ARG */ +#line 2582 "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) @@ -5760,11 +5789,11 @@ yyparse (void) else cfg_parser->cfg->ip_ratelimit_cookie = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5764 "util/configparser.c" +#line 5793 "util/configparser.c" break; - case 529: /* server_ratelimit: VAR_RATELIMIT STRING_ARG */ -#line 2581 "util/configparser.y" + case 531: /* server_ratelimit: VAR_RATELIMIT STRING_ARG */ +#line 2591 "util/configparser.y" { OUTYY(("P(server_ratelimit:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5772,33 +5801,33 @@ yyparse (void) else cfg_parser->cfg->ratelimit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5776 "util/configparser.c" +#line 5805 "util/configparser.c" break; - case 530: /* server_ip_ratelimit_size: VAR_IP_RATELIMIT_SIZE STRING_ARG */ -#line 2590 "util/configparser.y" + case 532: /* server_ip_ratelimit_size: VAR_IP_RATELIMIT_SIZE STRING_ARG */ +#line 2600 "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 5787 "util/configparser.c" +#line 5816 "util/configparser.c" break; - case 531: /* server_ratelimit_size: VAR_RATELIMIT_SIZE STRING_ARG */ -#line 2598 "util/configparser.y" + case 533: /* server_ratelimit_size: VAR_RATELIMIT_SIZE STRING_ARG */ +#line 2608 "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 5798 "util/configparser.c" +#line 5827 "util/configparser.c" break; - case 532: /* server_ip_ratelimit_slabs: VAR_IP_RATELIMIT_SLABS STRING_ARG */ -#line 2606 "util/configparser.y" + case 534: /* server_ip_ratelimit_slabs: VAR_IP_RATELIMIT_SLABS STRING_ARG */ +#line 2616 "util/configparser.y" { OUTYY(("P(server_ip_ratelimit_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) { @@ -5810,11 +5839,11 @@ yyparse (void) } free((yyvsp[0].str)); } -#line 5814 "util/configparser.c" +#line 5843 "util/configparser.c" break; - case 533: /* server_ratelimit_slabs: VAR_RATELIMIT_SLABS STRING_ARG */ -#line 2619 "util/configparser.y" + case 535: /* server_ratelimit_slabs: VAR_RATELIMIT_SLABS STRING_ARG */ +#line 2629 "util/configparser.y" { OUTYY(("P(server_ratelimit_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) { @@ -5826,11 +5855,11 @@ yyparse (void) } free((yyvsp[0].str)); } -#line 5830 "util/configparser.c" +#line 5859 "util/configparser.c" break; - case 534: /* server_ratelimit_for_domain: VAR_RATELIMIT_FOR_DOMAIN STRING_ARG STRING_ARG */ -#line 2632 "util/configparser.y" + case 536: /* server_ratelimit_for_domain: VAR_RATELIMIT_FOR_DOMAIN STRING_ARG STRING_ARG */ +#line 2642 "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) { @@ -5844,11 +5873,11 @@ yyparse (void) "ratelimit-for-domain"); } } -#line 5848 "util/configparser.c" +#line 5877 "util/configparser.c" break; - case 535: /* server_ratelimit_below_domain: VAR_RATELIMIT_BELOW_DOMAIN STRING_ARG STRING_ARG */ -#line 2647 "util/configparser.y" + case 537: /* server_ratelimit_below_domain: VAR_RATELIMIT_BELOW_DOMAIN STRING_ARG STRING_ARG */ +#line 2657 "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) { @@ -5862,11 +5891,11 @@ yyparse (void) "ratelimit-below-domain"); } } -#line 5866 "util/configparser.c" +#line 5895 "util/configparser.c" break; - case 536: /* server_ip_ratelimit_factor: VAR_IP_RATELIMIT_FACTOR STRING_ARG */ -#line 2662 "util/configparser.y" + case 538: /* server_ip_ratelimit_factor: VAR_IP_RATELIMIT_FACTOR STRING_ARG */ +#line 2672 "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) @@ -5874,11 +5903,11 @@ yyparse (void) else cfg_parser->cfg->ip_ratelimit_factor = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5878 "util/configparser.c" +#line 5907 "util/configparser.c" break; - case 537: /* server_ratelimit_factor: VAR_RATELIMIT_FACTOR STRING_ARG */ -#line 2671 "util/configparser.y" + case 539: /* server_ratelimit_factor: VAR_RATELIMIT_FACTOR STRING_ARG */ +#line 2681 "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) @@ -5886,11 +5915,11 @@ yyparse (void) else cfg_parser->cfg->ratelimit_factor = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5890 "util/configparser.c" +#line 5919 "util/configparser.c" break; - case 538: /* server_ip_ratelimit_backoff: VAR_IP_RATELIMIT_BACKOFF STRING_ARG */ -#line 2680 "util/configparser.y" + case 540: /* server_ip_ratelimit_backoff: VAR_IP_RATELIMIT_BACKOFF STRING_ARG */ +#line 2690 "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) @@ -5899,11 +5928,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5903 "util/configparser.c" +#line 5932 "util/configparser.c" break; - case 539: /* server_ratelimit_backoff: VAR_RATELIMIT_BACKOFF STRING_ARG */ -#line 2690 "util/configparser.y" + case 541: /* server_ratelimit_backoff: VAR_RATELIMIT_BACKOFF STRING_ARG */ +#line 2700 "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) @@ -5912,11 +5941,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5916 "util/configparser.c" +#line 5945 "util/configparser.c" break; - case 540: /* server_outbound_msg_retry: VAR_OUTBOUND_MSG_RETRY STRING_ARG */ -#line 2700 "util/configparser.y" + case 542: /* server_outbound_msg_retry: VAR_OUTBOUND_MSG_RETRY STRING_ARG */ +#line 2710 "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) @@ -5924,11 +5953,11 @@ yyparse (void) else cfg_parser->cfg->outbound_msg_retry = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5928 "util/configparser.c" +#line 5957 "util/configparser.c" break; - case 541: /* server_max_sent_count: VAR_MAX_SENT_COUNT STRING_ARG */ -#line 2709 "util/configparser.y" + case 543: /* server_max_sent_count: VAR_MAX_SENT_COUNT STRING_ARG */ +#line 2719 "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) @@ -5936,11 +5965,11 @@ yyparse (void) else cfg_parser->cfg->max_sent_count = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5940 "util/configparser.c" +#line 5969 "util/configparser.c" break; - case 542: /* server_max_query_restarts: VAR_MAX_QUERY_RESTARTS STRING_ARG */ -#line 2718 "util/configparser.y" + case 544: /* server_max_query_restarts: VAR_MAX_QUERY_RESTARTS STRING_ARG */ +#line 2728 "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) @@ -5948,20 +5977,20 @@ yyparse (void) else cfg_parser->cfg->max_query_restarts = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5952 "util/configparser.c" +#line 5981 "util/configparser.c" break; - case 543: /* server_low_rtt: VAR_LOW_RTT STRING_ARG */ -#line 2727 "util/configparser.y" + case 545: /* server_low_rtt: VAR_LOW_RTT STRING_ARG */ +#line 2737 "util/configparser.y" { OUTYY(("P(low-rtt option is deprecated, use fast-server-num instead)\n")); free((yyvsp[0].str)); } -#line 5961 "util/configparser.c" +#line 5990 "util/configparser.c" break; - case 544: /* server_fast_server_num: VAR_FAST_SERVER_NUM STRING_ARG */ -#line 2733 "util/configparser.y" + case 546: /* server_fast_server_num: VAR_FAST_SERVER_NUM STRING_ARG */ +#line 2743 "util/configparser.y" { OUTYY(("P(server_fast_server_num:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) <= 0) @@ -5969,11 +5998,11 @@ yyparse (void) else cfg_parser->cfg->fast_server_num = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5973 "util/configparser.c" +#line 6002 "util/configparser.c" break; - case 545: /* server_fast_server_permil: VAR_FAST_SERVER_PERMIL STRING_ARG */ -#line 2742 "util/configparser.y" + case 547: /* server_fast_server_permil: VAR_FAST_SERVER_PERMIL STRING_ARG */ +#line 2752 "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) @@ -5981,11 +6010,11 @@ yyparse (void) else cfg_parser->cfg->fast_server_permil = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5985 "util/configparser.c" +#line 6014 "util/configparser.c" break; - case 546: /* server_qname_minimisation: VAR_QNAME_MINIMISATION STRING_ARG */ -#line 2751 "util/configparser.y" + case 548: /* server_qname_minimisation: VAR_QNAME_MINIMISATION STRING_ARG */ +#line 2761 "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) @@ -5994,11 +6023,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5998 "util/configparser.c" +#line 6027 "util/configparser.c" break; - case 547: /* server_qname_minimisation_strict: VAR_QNAME_MINIMISATION_STRICT STRING_ARG */ -#line 2761 "util/configparser.y" + case 549: /* server_qname_minimisation_strict: VAR_QNAME_MINIMISATION_STRICT STRING_ARG */ +#line 2771 "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) @@ -6007,11 +6036,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6011 "util/configparser.c" +#line 6040 "util/configparser.c" break; - case 548: /* server_pad_responses: VAR_PAD_RESPONSES STRING_ARG */ -#line 2771 "util/configparser.y" + case 550: /* server_pad_responses: VAR_PAD_RESPONSES STRING_ARG */ +#line 2781 "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) @@ -6020,11 +6049,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6024 "util/configparser.c" +#line 6053 "util/configparser.c" break; - case 549: /* server_pad_responses_block_size: VAR_PAD_RESPONSES_BLOCK_SIZE STRING_ARG */ -#line 2781 "util/configparser.y" + case 551: /* server_pad_responses_block_size: VAR_PAD_RESPONSES_BLOCK_SIZE STRING_ARG */ +#line 2791 "util/configparser.y" { OUTYY(("P(server_pad_responses_block_size:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -6032,11 +6061,11 @@ yyparse (void) else cfg_parser->cfg->pad_responses_block_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 6036 "util/configparser.c" +#line 6065 "util/configparser.c" break; - case 550: /* server_pad_queries: VAR_PAD_QUERIES STRING_ARG */ -#line 2790 "util/configparser.y" + case 552: /* server_pad_queries: VAR_PAD_QUERIES STRING_ARG */ +#line 2800 "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) @@ -6045,11 +6074,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6049 "util/configparser.c" +#line 6078 "util/configparser.c" break; - case 551: /* server_pad_queries_block_size: VAR_PAD_QUERIES_BLOCK_SIZE STRING_ARG */ -#line 2800 "util/configparser.y" + case 553: /* server_pad_queries_block_size: VAR_PAD_QUERIES_BLOCK_SIZE STRING_ARG */ +#line 2810 "util/configparser.y" { OUTYY(("P(server_pad_queries_block_size:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -6057,11 +6086,11 @@ yyparse (void) else cfg_parser->cfg->pad_queries_block_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 6061 "util/configparser.c" +#line 6090 "util/configparser.c" break; - case 552: /* server_ipsecmod_enabled: VAR_IPSECMOD_ENABLED STRING_ARG */ -#line 2809 "util/configparser.y" + case 554: /* server_ipsecmod_enabled: VAR_IPSECMOD_ENABLED STRING_ARG */ +#line 2819 "util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_enabled:%s)\n", (yyvsp[0].str))); @@ -6073,11 +6102,11 @@ yyparse (void) #endif free((yyvsp[0].str)); } -#line 6077 "util/configparser.c" +#line 6106 "util/configparser.c" break; - case 553: /* server_ipsecmod_ignore_bogus: VAR_IPSECMOD_IGNORE_BOGUS STRING_ARG */ -#line 2822 "util/configparser.y" + case 555: /* server_ipsecmod_ignore_bogus: VAR_IPSECMOD_IGNORE_BOGUS STRING_ARG */ +#line 2832 "util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_ignore_bogus:%s)\n", (yyvsp[0].str))); @@ -6089,11 +6118,11 @@ yyparse (void) #endif free((yyvsp[0].str)); } -#line 6093 "util/configparser.c" +#line 6122 "util/configparser.c" break; - case 554: /* server_ipsecmod_hook: VAR_IPSECMOD_HOOK STRING_ARG */ -#line 2835 "util/configparser.y" + case 556: /* server_ipsecmod_hook: VAR_IPSECMOD_HOOK STRING_ARG */ +#line 2845 "util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_hook:%s)\n", (yyvsp[0].str))); @@ -6104,11 +6133,11 @@ yyparse (void) free((yyvsp[0].str)); #endif } -#line 6108 "util/configparser.c" +#line 6137 "util/configparser.c" break; - case 555: /* server_ipsecmod_max_ttl: VAR_IPSECMOD_MAX_TTL STRING_ARG */ -#line 2847 "util/configparser.y" + case 557: /* server_ipsecmod_max_ttl: VAR_IPSECMOD_MAX_TTL STRING_ARG */ +#line 2857 "util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_max_ttl:%s)\n", (yyvsp[0].str))); @@ -6121,11 +6150,11 @@ yyparse (void) free((yyvsp[0].str)); #endif } -#line 6125 "util/configparser.c" +#line 6154 "util/configparser.c" break; - case 556: /* server_ipsecmod_whitelist: VAR_IPSECMOD_WHITELIST STRING_ARG */ -#line 2861 "util/configparser.y" + case 558: /* server_ipsecmod_whitelist: VAR_IPSECMOD_WHITELIST STRING_ARG */ +#line 2871 "util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_whitelist:%s)\n", (yyvsp[0].str))); @@ -6136,11 +6165,11 @@ yyparse (void) free((yyvsp[0].str)); #endif } -#line 6140 "util/configparser.c" +#line 6169 "util/configparser.c" break; - case 557: /* server_ipsecmod_strict: VAR_IPSECMOD_STRICT STRING_ARG */ -#line 2873 "util/configparser.y" + case 559: /* server_ipsecmod_strict: VAR_IPSECMOD_STRICT STRING_ARG */ +#line 2883 "util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_strict:%s)\n", (yyvsp[0].str))); @@ -6153,11 +6182,11 @@ yyparse (void) free((yyvsp[0].str)); #endif } -#line 6157 "util/configparser.c" +#line 6186 "util/configparser.c" break; - case 558: /* server_edns_client_string: VAR_EDNS_CLIENT_STRING STRING_ARG STRING_ARG */ -#line 2887 "util/configparser.y" + case 560: /* server_edns_client_string: VAR_EDNS_CLIENT_STRING STRING_ARG STRING_ARG */ +#line 2897 "util/configparser.y" { OUTYY(("P(server_edns_client_string:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str2list_insert( @@ -6165,11 +6194,11 @@ yyparse (void) fatal_exit("out of memory adding " "edns-client-string"); } -#line 6169 "util/configparser.c" +#line 6198 "util/configparser.c" break; - case 559: /* server_edns_client_string_opcode: VAR_EDNS_CLIENT_STRING_OPCODE STRING_ARG */ -#line 2896 "util/configparser.y" + case 561: /* server_edns_client_string_opcode: VAR_EDNS_CLIENT_STRING_OPCODE STRING_ARG */ +#line 2906 "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) @@ -6179,11 +6208,11 @@ yyparse (void) else cfg_parser->cfg->edns_client_string_opcode = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 6183 "util/configparser.c" +#line 6212 "util/configparser.c" break; - case 560: /* server_ede: VAR_EDE STRING_ARG */ -#line 2907 "util/configparser.y" + case 562: /* server_ede: VAR_EDE STRING_ARG */ +#line 2917 "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) @@ -6191,21 +6220,21 @@ yyparse (void) else cfg_parser->cfg->ede = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6195 "util/configparser.c" +#line 6224 "util/configparser.c" break; - case 561: /* server_proxy_protocol_port: VAR_PROXY_PROTOCOL_PORT STRING_ARG */ -#line 2916 "util/configparser.y" + case 563: /* server_proxy_protocol_port: VAR_PROXY_PROTOCOL_PORT STRING_ARG */ +#line 2926 "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 6205 "util/configparser.c" +#line 6234 "util/configparser.c" break; - case 562: /* stub_name: VAR_NAME STRING_ARG */ -#line 2923 "util/configparser.y" + case 564: /* stub_name: VAR_NAME STRING_ARG */ +#line 2933 "util/configparser.y" { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->stubs->name) @@ -6214,31 +6243,31 @@ yyparse (void) free(cfg_parser->cfg->stubs->name); cfg_parser->cfg->stubs->name = (yyvsp[0].str); } -#line 6218 "util/configparser.c" +#line 6247 "util/configparser.c" break; - case 563: /* stub_host: VAR_STUB_HOST STRING_ARG */ -#line 2933 "util/configparser.y" + case 565: /* stub_host: VAR_STUB_HOST STRING_ARG */ +#line 2943 "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 6228 "util/configparser.c" +#line 6257 "util/configparser.c" break; - case 564: /* stub_addr: VAR_STUB_ADDR STRING_ARG */ -#line 2940 "util/configparser.y" + case 566: /* stub_addr: VAR_STUB_ADDR STRING_ARG */ +#line 2950 "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 6238 "util/configparser.c" +#line 6267 "util/configparser.c" break; - case 565: /* stub_first: VAR_STUB_FIRST STRING_ARG */ -#line 2947 "util/configparser.y" + case 567: /* stub_first: VAR_STUB_FIRST STRING_ARG */ +#line 2957 "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) @@ -6246,11 +6275,11 @@ yyparse (void) else cfg_parser->cfg->stubs->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6250 "util/configparser.c" +#line 6279 "util/configparser.c" break; - case 566: /* stub_no_cache: VAR_STUB_NO_CACHE STRING_ARG */ -#line 2956 "util/configparser.y" + case 568: /* stub_no_cache: VAR_STUB_NO_CACHE STRING_ARG */ +#line 2966 "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) @@ -6258,11 +6287,11 @@ yyparse (void) else cfg_parser->cfg->stubs->no_cache=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6262 "util/configparser.c" +#line 6291 "util/configparser.c" break; - case 567: /* stub_ssl_upstream: VAR_STUB_SSL_UPSTREAM STRING_ARG */ -#line 2965 "util/configparser.y" + case 569: /* stub_ssl_upstream: VAR_STUB_SSL_UPSTREAM STRING_ARG */ +#line 2975 "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) @@ -6271,11 +6300,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6275 "util/configparser.c" +#line 6304 "util/configparser.c" break; - case 568: /* stub_tcp_upstream: VAR_STUB_TCP_UPSTREAM STRING_ARG */ -#line 2975 "util/configparser.y" + case 570: /* stub_tcp_upstream: VAR_STUB_TCP_UPSTREAM STRING_ARG */ +#line 2985 "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) @@ -6284,11 +6313,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6288 "util/configparser.c" +#line 6317 "util/configparser.c" break; - case 569: /* stub_prime: VAR_STUB_PRIME STRING_ARG */ -#line 2985 "util/configparser.y" + case 571: /* stub_prime: VAR_STUB_PRIME STRING_ARG */ +#line 2995 "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) @@ -6297,11 +6326,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6301 "util/configparser.c" +#line 6330 "util/configparser.c" break; - case 570: /* forward_name: VAR_NAME STRING_ARG */ -#line 2995 "util/configparser.y" + case 572: /* forward_name: VAR_NAME STRING_ARG */ +#line 3005 "util/configparser.y" { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->forwards->name) @@ -6310,31 +6339,31 @@ yyparse (void) free(cfg_parser->cfg->forwards->name); cfg_parser->cfg->forwards->name = (yyvsp[0].str); } -#line 6314 "util/configparser.c" +#line 6343 "util/configparser.c" break; - case 571: /* forward_host: VAR_FORWARD_HOST STRING_ARG */ -#line 3005 "util/configparser.y" + case 573: /* forward_host: VAR_FORWARD_HOST STRING_ARG */ +#line 3015 "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 6324 "util/configparser.c" +#line 6353 "util/configparser.c" break; - case 572: /* forward_addr: VAR_FORWARD_ADDR STRING_ARG */ -#line 3012 "util/configparser.y" + case 574: /* forward_addr: VAR_FORWARD_ADDR STRING_ARG */ +#line 3022 "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 6334 "util/configparser.c" +#line 6363 "util/configparser.c" break; - case 573: /* forward_first: VAR_FORWARD_FIRST STRING_ARG */ -#line 3019 "util/configparser.y" + case 575: /* forward_first: VAR_FORWARD_FIRST STRING_ARG */ +#line 3029 "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) @@ -6342,11 +6371,11 @@ yyparse (void) else cfg_parser->cfg->forwards->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6346 "util/configparser.c" +#line 6375 "util/configparser.c" break; - case 574: /* forward_no_cache: VAR_FORWARD_NO_CACHE STRING_ARG */ -#line 3028 "util/configparser.y" + case 576: /* forward_no_cache: VAR_FORWARD_NO_CACHE STRING_ARG */ +#line 3038 "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) @@ -6354,11 +6383,11 @@ yyparse (void) else cfg_parser->cfg->forwards->no_cache=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6358 "util/configparser.c" +#line 6387 "util/configparser.c" break; - case 575: /* forward_ssl_upstream: VAR_FORWARD_SSL_UPSTREAM STRING_ARG */ -#line 3037 "util/configparser.y" + case 577: /* forward_ssl_upstream: VAR_FORWARD_SSL_UPSTREAM STRING_ARG */ +#line 3047 "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) @@ -6367,11 +6396,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6371 "util/configparser.c" +#line 6400 "util/configparser.c" break; - case 576: /* forward_tcp_upstream: VAR_FORWARD_TCP_UPSTREAM STRING_ARG */ -#line 3047 "util/configparser.y" + case 578: /* forward_tcp_upstream: VAR_FORWARD_TCP_UPSTREAM STRING_ARG */ +#line 3057 "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) @@ -6380,11 +6409,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6384 "util/configparser.c" +#line 6413 "util/configparser.c" break; - case 577: /* auth_name: VAR_NAME STRING_ARG */ -#line 3057 "util/configparser.y" + case 579: /* auth_name: VAR_NAME STRING_ARG */ +#line 3067 "util/configparser.y" { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->auths->name) @@ -6393,52 +6422,52 @@ yyparse (void) free(cfg_parser->cfg->auths->name); cfg_parser->cfg->auths->name = (yyvsp[0].str); } -#line 6397 "util/configparser.c" +#line 6426 "util/configparser.c" break; - case 578: /* auth_zonefile: VAR_ZONEFILE STRING_ARG */ -#line 3067 "util/configparser.y" + case 580: /* auth_zonefile: VAR_ZONEFILE STRING_ARG */ +#line 3077 "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 6407 "util/configparser.c" +#line 6436 "util/configparser.c" break; - case 579: /* auth_master: VAR_MASTER STRING_ARG */ -#line 3074 "util/configparser.y" + case 581: /* auth_master: VAR_MASTER STRING_ARG */ +#line 3084 "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 6417 "util/configparser.c" +#line 6446 "util/configparser.c" break; - case 580: /* auth_url: VAR_URL STRING_ARG */ -#line 3081 "util/configparser.y" + case 582: /* auth_url: VAR_URL STRING_ARG */ +#line 3091 "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 6427 "util/configparser.c" +#line 6456 "util/configparser.c" break; - case 581: /* auth_allow_notify: VAR_ALLOW_NOTIFY STRING_ARG */ -#line 3088 "util/configparser.y" + case 583: /* auth_allow_notify: VAR_ALLOW_NOTIFY STRING_ARG */ +#line 3098 "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 6438 "util/configparser.c" +#line 6467 "util/configparser.c" break; - case 582: /* auth_zonemd_check: VAR_ZONEMD_CHECK STRING_ARG */ -#line 3096 "util/configparser.y" + case 584: /* auth_zonemd_check: VAR_ZONEMD_CHECK STRING_ARG */ +#line 3106 "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) @@ -6447,11 +6476,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6451 "util/configparser.c" +#line 6480 "util/configparser.c" break; - case 583: /* auth_zonemd_reject_absence: VAR_ZONEMD_REJECT_ABSENCE STRING_ARG */ -#line 3106 "util/configparser.y" + case 585: /* auth_zonemd_reject_absence: VAR_ZONEMD_REJECT_ABSENCE STRING_ARG */ +#line 3116 "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) @@ -6460,11 +6489,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6464 "util/configparser.c" +#line 6493 "util/configparser.c" break; - case 584: /* auth_for_downstream: VAR_FOR_DOWNSTREAM STRING_ARG */ -#line 3116 "util/configparser.y" + case 586: /* auth_for_downstream: VAR_FOR_DOWNSTREAM STRING_ARG */ +#line 3126 "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) @@ -6473,11 +6502,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6477 "util/configparser.c" +#line 6506 "util/configparser.c" break; - case 585: /* auth_for_upstream: VAR_FOR_UPSTREAM STRING_ARG */ -#line 3126 "util/configparser.y" + case 587: /* auth_for_upstream: VAR_FOR_UPSTREAM STRING_ARG */ +#line 3136 "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) @@ -6486,11 +6515,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6490 "util/configparser.c" +#line 6519 "util/configparser.c" break; - case 586: /* auth_fallback_enabled: VAR_FALLBACK_ENABLED STRING_ARG */ -#line 3136 "util/configparser.y" + case 588: /* auth_fallback_enabled: VAR_FALLBACK_ENABLED STRING_ARG */ +#line 3146 "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) @@ -6499,11 +6528,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6503 "util/configparser.c" +#line 6532 "util/configparser.c" break; - case 587: /* view_name: VAR_NAME STRING_ARG */ -#line 3146 "util/configparser.y" + case 589: /* view_name: VAR_NAME STRING_ARG */ +#line 3156 "util/configparser.y" { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->views->name) @@ -6512,11 +6541,11 @@ yyparse (void) free(cfg_parser->cfg->views->name); cfg_parser->cfg->views->name = (yyvsp[0].str); } -#line 6516 "util/configparser.c" +#line 6545 "util/configparser.c" break; - case 588: /* view_local_zone: VAR_LOCAL_ZONE STRING_ARG STRING_ARG */ -#line 3156 "util/configparser.y" + case 590: /* view_local_zone: VAR_LOCAL_ZONE STRING_ARG STRING_ARG */ +#line 3166 "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 && @@ -6571,11 +6600,11 @@ yyparse (void) fatal_exit("out of memory adding local-zone"); } } -#line 6575 "util/configparser.c" +#line 6604 "util/configparser.c" break; - case 589: /* view_response_ip: VAR_RESPONSE_IP STRING_ARG STRING_ARG */ -#line 3212 "util/configparser.y" + case 591: /* view_response_ip: VAR_RESPONSE_IP STRING_ARG STRING_ARG */ +#line 3222 "util/configparser.y" { OUTYY(("P(view_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); validate_respip_action((yyvsp[0].str)); @@ -6584,33 +6613,33 @@ yyparse (void) fatal_exit("out of memory adding per-view " "response-ip action"); } -#line 6588 "util/configparser.c" +#line 6617 "util/configparser.c" break; - case 590: /* view_response_ip_data: VAR_RESPONSE_IP_DATA STRING_ARG STRING_ARG */ -#line 3222 "util/configparser.y" + case 592: /* view_response_ip_data: VAR_RESPONSE_IP_DATA STRING_ARG STRING_ARG */ +#line 3232 "util/configparser.y" { OUTYY(("P(view_response_ip_data:%s)\n", (yyvsp[-1].str))); if(!cfg_str2list_insert( &cfg_parser->cfg->views->respip_data, (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding response-ip-data"); } -#line 6599 "util/configparser.c" +#line 6628 "util/configparser.c" break; - case 591: /* view_local_data: VAR_LOCAL_DATA STRING_ARG */ -#line 3230 "util/configparser.y" + case 593: /* view_local_data: VAR_LOCAL_DATA STRING_ARG */ +#line 3240 "util/configparser.y" { OUTYY(("P(view_local_data:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->views->local_data, (yyvsp[0].str))) { fatal_exit("out of memory adding local-data"); } } -#line 6610 "util/configparser.c" +#line 6639 "util/configparser.c" break; - case 592: /* view_local_data_ptr: VAR_LOCAL_DATA_PTR STRING_ARG */ -#line 3238 "util/configparser.y" + case 594: /* view_local_data_ptr: VAR_LOCAL_DATA_PTR STRING_ARG */ +#line 3248 "util/configparser.y" { char* ptr; OUTYY(("P(view_local_data_ptr:%s)\n", (yyvsp[0].str))); @@ -6624,11 +6653,11 @@ yyparse (void) yyerror("local-data-ptr could not be reversed"); } } -#line 6628 "util/configparser.c" +#line 6657 "util/configparser.c" break; - case 593: /* view_first: VAR_VIEW_FIRST STRING_ARG */ -#line 3253 "util/configparser.y" + case 595: /* view_first: VAR_VIEW_FIRST STRING_ARG */ +#line 3263 "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) @@ -6636,20 +6665,20 @@ yyparse (void) else cfg_parser->cfg->views->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6640 "util/configparser.c" +#line 6669 "util/configparser.c" break; - case 594: /* rcstart: VAR_REMOTE_CONTROL */ -#line 3262 "util/configparser.y" + case 596: /* rcstart: VAR_REMOTE_CONTROL */ +#line 3272 "util/configparser.y" { OUTYY(("\nP(remote-control:)\n")); cfg_parser->started_toplevel = 1; } -#line 6649 "util/configparser.c" +#line 6678 "util/configparser.c" break; - case 605: /* rc_control_enable: VAR_CONTROL_ENABLE STRING_ARG */ -#line 3274 "util/configparser.y" + case 607: /* rc_control_enable: VAR_CONTROL_ENABLE STRING_ARG */ +#line 3284 "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) @@ -6658,11 +6687,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6662 "util/configparser.c" +#line 6691 "util/configparser.c" break; - case 606: /* rc_control_port: VAR_CONTROL_PORT STRING_ARG */ -#line 3284 "util/configparser.y" + case 608: /* rc_control_port: VAR_CONTROL_PORT STRING_ARG */ +#line 3294 "util/configparser.y" { OUTYY(("P(control_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -6670,80 +6699,80 @@ yyparse (void) else cfg_parser->cfg->control_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 6674 "util/configparser.c" +#line 6703 "util/configparser.c" break; - case 607: /* rc_control_interface: VAR_CONTROL_INTERFACE STRING_ARG */ -#line 3293 "util/configparser.y" + case 609: /* rc_control_interface: VAR_CONTROL_INTERFACE STRING_ARG */ +#line 3303 "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 6684 "util/configparser.c" +#line 6713 "util/configparser.c" break; - case 608: /* rc_control_use_cert: VAR_CONTROL_USE_CERT STRING_ARG */ -#line 3300 "util/configparser.y" + case 610: /* rc_control_use_cert: VAR_CONTROL_USE_CERT STRING_ARG */ +#line 3310 "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 6694 "util/configparser.c" +#line 6723 "util/configparser.c" break; - case 609: /* rc_server_key_file: VAR_SERVER_KEY_FILE STRING_ARG */ -#line 3307 "util/configparser.y" + case 611: /* rc_server_key_file: VAR_SERVER_KEY_FILE STRING_ARG */ +#line 3317 "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 6704 "util/configparser.c" +#line 6733 "util/configparser.c" break; - case 610: /* rc_server_cert_file: VAR_SERVER_CERT_FILE STRING_ARG */ -#line 3314 "util/configparser.y" + case 612: /* rc_server_cert_file: VAR_SERVER_CERT_FILE STRING_ARG */ +#line 3324 "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 6714 "util/configparser.c" +#line 6743 "util/configparser.c" break; - case 611: /* rc_control_key_file: VAR_CONTROL_KEY_FILE STRING_ARG */ -#line 3321 "util/configparser.y" + case 613: /* rc_control_key_file: VAR_CONTROL_KEY_FILE STRING_ARG */ +#line 3331 "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 6724 "util/configparser.c" +#line 6753 "util/configparser.c" break; - case 612: /* rc_control_cert_file: VAR_CONTROL_CERT_FILE STRING_ARG */ -#line 3328 "util/configparser.y" + case 614: /* rc_control_cert_file: VAR_CONTROL_CERT_FILE STRING_ARG */ +#line 3338 "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 6734 "util/configparser.c" +#line 6763 "util/configparser.c" break; - case 613: /* dtstart: VAR_DNSTAP */ -#line 3335 "util/configparser.y" + case 615: /* dtstart: VAR_DNSTAP */ +#line 3345 "util/configparser.y" { OUTYY(("\nP(dnstap:)\n")); cfg_parser->started_toplevel = 1; } -#line 6743 "util/configparser.c" +#line 6772 "util/configparser.c" break; - case 635: /* dt_dnstap_enable: VAR_DNSTAP_ENABLE STRING_ARG */ -#line 3356 "util/configparser.y" + case 637: /* dt_dnstap_enable: VAR_DNSTAP_ENABLE STRING_ARG */ +#line 3366 "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) @@ -6751,11 +6780,11 @@ yyparse (void) else cfg_parser->cfg->dnstap = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6755 "util/configparser.c" +#line 6784 "util/configparser.c" break; - case 636: /* dt_dnstap_bidirectional: VAR_DNSTAP_BIDIRECTIONAL STRING_ARG */ -#line 3365 "util/configparser.y" + case 638: /* dt_dnstap_bidirectional: VAR_DNSTAP_BIDIRECTIONAL STRING_ARG */ +#line 3375 "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) @@ -6764,31 +6793,31 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6768 "util/configparser.c" +#line 6797 "util/configparser.c" break; - case 637: /* dt_dnstap_socket_path: VAR_DNSTAP_SOCKET_PATH STRING_ARG */ -#line 3375 "util/configparser.y" + case 639: /* dt_dnstap_socket_path: VAR_DNSTAP_SOCKET_PATH STRING_ARG */ +#line 3385 "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 6778 "util/configparser.c" +#line 6807 "util/configparser.c" break; - case 638: /* dt_dnstap_ip: VAR_DNSTAP_IP STRING_ARG */ -#line 3382 "util/configparser.y" + case 640: /* dt_dnstap_ip: VAR_DNSTAP_IP STRING_ARG */ +#line 3392 "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 6788 "util/configparser.c" +#line 6817 "util/configparser.c" break; - case 639: /* dt_dnstap_tls: VAR_DNSTAP_TLS STRING_ARG */ -#line 3389 "util/configparser.y" + case 641: /* dt_dnstap_tls: VAR_DNSTAP_TLS STRING_ARG */ +#line 3399 "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) @@ -6796,51 +6825,51 @@ yyparse (void) else cfg_parser->cfg->dnstap_tls = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6800 "util/configparser.c" +#line 6829 "util/configparser.c" break; - case 640: /* dt_dnstap_tls_server_name: VAR_DNSTAP_TLS_SERVER_NAME STRING_ARG */ -#line 3398 "util/configparser.y" + case 642: /* dt_dnstap_tls_server_name: VAR_DNSTAP_TLS_SERVER_NAME STRING_ARG */ +#line 3408 "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 6810 "util/configparser.c" +#line 6839 "util/configparser.c" break; - case 641: /* dt_dnstap_tls_cert_bundle: VAR_DNSTAP_TLS_CERT_BUNDLE STRING_ARG */ -#line 3405 "util/configparser.y" + case 643: /* dt_dnstap_tls_cert_bundle: VAR_DNSTAP_TLS_CERT_BUNDLE STRING_ARG */ +#line 3415 "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 6820 "util/configparser.c" +#line 6849 "util/configparser.c" break; - case 642: /* dt_dnstap_tls_client_key_file: VAR_DNSTAP_TLS_CLIENT_KEY_FILE STRING_ARG */ -#line 3412 "util/configparser.y" + case 644: /* dt_dnstap_tls_client_key_file: VAR_DNSTAP_TLS_CLIENT_KEY_FILE STRING_ARG */ +#line 3422 "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 6830 "util/configparser.c" +#line 6859 "util/configparser.c" break; - case 643: /* dt_dnstap_tls_client_cert_file: VAR_DNSTAP_TLS_CLIENT_CERT_FILE STRING_ARG */ -#line 3419 "util/configparser.y" + case 645: /* dt_dnstap_tls_client_cert_file: VAR_DNSTAP_TLS_CLIENT_CERT_FILE STRING_ARG */ +#line 3429 "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 6840 "util/configparser.c" +#line 6869 "util/configparser.c" break; - case 644: /* dt_dnstap_send_identity: VAR_DNSTAP_SEND_IDENTITY STRING_ARG */ -#line 3426 "util/configparser.y" + case 646: /* dt_dnstap_send_identity: VAR_DNSTAP_SEND_IDENTITY STRING_ARG */ +#line 3436 "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) @@ -6848,11 +6877,11 @@ yyparse (void) else cfg_parser->cfg->dnstap_send_identity = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6852 "util/configparser.c" +#line 6881 "util/configparser.c" break; - case 645: /* dt_dnstap_send_version: VAR_DNSTAP_SEND_VERSION STRING_ARG */ -#line 3435 "util/configparser.y" + case 647: /* dt_dnstap_send_version: VAR_DNSTAP_SEND_VERSION STRING_ARG */ +#line 3445 "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) @@ -6860,31 +6889,31 @@ yyparse (void) else cfg_parser->cfg->dnstap_send_version = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6864 "util/configparser.c" +#line 6893 "util/configparser.c" break; - case 646: /* dt_dnstap_identity: VAR_DNSTAP_IDENTITY STRING_ARG */ -#line 3444 "util/configparser.y" + case 648: /* dt_dnstap_identity: VAR_DNSTAP_IDENTITY STRING_ARG */ +#line 3454 "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 6874 "util/configparser.c" +#line 6903 "util/configparser.c" break; - case 647: /* dt_dnstap_version: VAR_DNSTAP_VERSION STRING_ARG */ -#line 3451 "util/configparser.y" + case 649: /* dt_dnstap_version: VAR_DNSTAP_VERSION STRING_ARG */ +#line 3461 "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 6884 "util/configparser.c" +#line 6913 "util/configparser.c" break; - case 648: /* dt_dnstap_log_resolver_query_messages: VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES STRING_ARG */ -#line 3458 "util/configparser.y" + case 650: /* dt_dnstap_log_resolver_query_messages: VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES STRING_ARG */ +#line 3468 "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) @@ -6893,11 +6922,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6897 "util/configparser.c" +#line 6926 "util/configparser.c" break; - case 649: /* dt_dnstap_log_resolver_response_messages: VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES STRING_ARG */ -#line 3468 "util/configparser.y" + case 651: /* dt_dnstap_log_resolver_response_messages: VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES STRING_ARG */ +#line 3478 "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) @@ -6906,11 +6935,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6910 "util/configparser.c" +#line 6939 "util/configparser.c" break; - case 650: /* dt_dnstap_log_client_query_messages: VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES STRING_ARG */ -#line 3478 "util/configparser.y" + case 652: /* dt_dnstap_log_client_query_messages: VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES STRING_ARG */ +#line 3488 "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) @@ -6919,11 +6948,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6923 "util/configparser.c" +#line 6952 "util/configparser.c" break; - case 651: /* dt_dnstap_log_client_response_messages: VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES STRING_ARG */ -#line 3488 "util/configparser.y" + case 653: /* dt_dnstap_log_client_response_messages: VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES STRING_ARG */ +#line 3498 "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) @@ -6932,11 +6961,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6936 "util/configparser.c" +#line 6965 "util/configparser.c" break; - case 652: /* dt_dnstap_log_forwarder_query_messages: VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES STRING_ARG */ -#line 3498 "util/configparser.y" + case 654: /* dt_dnstap_log_forwarder_query_messages: VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES STRING_ARG */ +#line 3508 "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) @@ -6945,11 +6974,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6949 "util/configparser.c" +#line 6978 "util/configparser.c" break; - case 653: /* dt_dnstap_log_forwarder_response_messages: VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES STRING_ARG */ -#line 3508 "util/configparser.y" + case 655: /* dt_dnstap_log_forwarder_response_messages: VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES STRING_ARG */ +#line 3518 "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) @@ -6958,49 +6987,49 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6962 "util/configparser.c" +#line 6991 "util/configparser.c" break; - case 654: /* pythonstart: VAR_PYTHON */ -#line 3518 "util/configparser.y" + case 656: /* pythonstart: VAR_PYTHON */ +#line 3528 "util/configparser.y" { OUTYY(("\nP(python:)\n")); cfg_parser->started_toplevel = 1; } -#line 6971 "util/configparser.c" +#line 7000 "util/configparser.c" break; - case 658: /* py_script: VAR_PYTHON_SCRIPT STRING_ARG */ -#line 3528 "util/configparser.y" + case 660: /* py_script: VAR_PYTHON_SCRIPT STRING_ARG */ +#line 3538 "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 6981 "util/configparser.c" +#line 7010 "util/configparser.c" break; - case 659: /* dynlibstart: VAR_DYNLIB */ -#line 3535 "util/configparser.y" + case 661: /* dynlibstart: VAR_DYNLIB */ +#line 3545 "util/configparser.y" { OUTYY(("\nP(dynlib:)\n")); cfg_parser->started_toplevel = 1; } -#line 6990 "util/configparser.c" +#line 7019 "util/configparser.c" break; - case 663: /* dl_file: VAR_DYNLIB_FILE STRING_ARG */ -#line 3545 "util/configparser.y" + case 665: /* dl_file: VAR_DYNLIB_FILE STRING_ARG */ +#line 3555 "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 7000 "util/configparser.c" +#line 7029 "util/configparser.c" break; - case 664: /* server_disable_dnssec_lame_check: VAR_DISABLE_DNSSEC_LAME_CHECK STRING_ARG */ -#line 3552 "util/configparser.y" + case 666: /* server_disable_dnssec_lame_check: VAR_DISABLE_DNSSEC_LAME_CHECK STRING_ARG */ +#line 3562 "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) @@ -7009,21 +7038,21 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 7013 "util/configparser.c" +#line 7042 "util/configparser.c" break; - case 665: /* server_log_identity: VAR_LOG_IDENTITY STRING_ARG */ -#line 3562 "util/configparser.y" + case 667: /* server_log_identity: VAR_LOG_IDENTITY STRING_ARG */ +#line 3572 "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 7023 "util/configparser.c" +#line 7052 "util/configparser.c" break; - case 666: /* server_response_ip: VAR_RESPONSE_IP STRING_ARG STRING_ARG */ -#line 3569 "util/configparser.y" + case 668: /* server_response_ip: VAR_RESPONSE_IP STRING_ARG STRING_ARG */ +#line 3579 "util/configparser.y" { OUTYY(("P(server_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); validate_respip_action((yyvsp[0].str)); @@ -7031,31 +7060,31 @@ yyparse (void) (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding response-ip"); } -#line 7035 "util/configparser.c" +#line 7064 "util/configparser.c" break; - case 667: /* server_response_ip_data: VAR_RESPONSE_IP_DATA STRING_ARG STRING_ARG */ -#line 3578 "util/configparser.y" + case 669: /* server_response_ip_data: VAR_RESPONSE_IP_DATA STRING_ARG STRING_ARG */ +#line 3588 "util/configparser.y" { OUTYY(("P(server_response_ip_data:%s)\n", (yyvsp[-1].str))); if(!cfg_str2list_insert(&cfg_parser->cfg->respip_data, (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding response-ip-data"); } -#line 7046 "util/configparser.c" +#line 7075 "util/configparser.c" break; - case 668: /* dnscstart: VAR_DNSCRYPT */ -#line 3586 "util/configparser.y" + case 670: /* dnscstart: VAR_DNSCRYPT */ +#line 3596 "util/configparser.y" { OUTYY(("\nP(dnscrypt:)\n")); cfg_parser->started_toplevel = 1; } -#line 7055 "util/configparser.c" +#line 7084 "util/configparser.c" break; - case 681: /* dnsc_dnscrypt_enable: VAR_DNSCRYPT_ENABLE STRING_ARG */ -#line 3603 "util/configparser.y" + case 683: /* dnsc_dnscrypt_enable: VAR_DNSCRYPT_ENABLE STRING_ARG */ +#line 3613 "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) @@ -7063,11 +7092,11 @@ yyparse (void) else cfg_parser->cfg->dnscrypt = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 7067 "util/configparser.c" +#line 7096 "util/configparser.c" break; - case 682: /* dnsc_dnscrypt_port: VAR_DNSCRYPT_PORT STRING_ARG */ -#line 3612 "util/configparser.y" + case 684: /* dnsc_dnscrypt_port: VAR_DNSCRYPT_PORT STRING_ARG */ +#line 3622 "util/configparser.y" { OUTYY(("P(dnsc_dnscrypt_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -7075,21 +7104,21 @@ yyparse (void) else cfg_parser->cfg->dnscrypt_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 7079 "util/configparser.c" +#line 7108 "util/configparser.c" break; - case 683: /* dnsc_dnscrypt_provider: VAR_DNSCRYPT_PROVIDER STRING_ARG */ -#line 3621 "util/configparser.y" + case 685: /* dnsc_dnscrypt_provider: VAR_DNSCRYPT_PROVIDER STRING_ARG */ +#line 3631 "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 7089 "util/configparser.c" +#line 7118 "util/configparser.c" break; - case 684: /* dnsc_dnscrypt_provider_cert: VAR_DNSCRYPT_PROVIDER_CERT STRING_ARG */ -#line 3628 "util/configparser.y" + case 686: /* dnsc_dnscrypt_provider_cert: VAR_DNSCRYPT_PROVIDER_CERT STRING_ARG */ +#line 3638 "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))) @@ -7097,21 +7126,21 @@ yyparse (void) if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str))) fatal_exit("out of memory adding dnscrypt-provider-cert"); } -#line 7101 "util/configparser.c" +#line 7130 "util/configparser.c" break; - case 685: /* dnsc_dnscrypt_provider_cert_rotated: VAR_DNSCRYPT_PROVIDER_CERT_ROTATED STRING_ARG */ -#line 3637 "util/configparser.y" + case 687: /* dnsc_dnscrypt_provider_cert_rotated: VAR_DNSCRYPT_PROVIDER_CERT_ROTATED STRING_ARG */ +#line 3647 "util/configparser.y" { OUTYY(("P(dnsc_dnscrypt_provider_cert_rotated:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert_rotated, (yyvsp[0].str))) fatal_exit("out of memory adding dnscrypt-provider-cert-rotated"); } -#line 7111 "util/configparser.c" +#line 7140 "util/configparser.c" break; - case 686: /* dnsc_dnscrypt_secret_key: VAR_DNSCRYPT_SECRET_KEY STRING_ARG */ -#line 3644 "util/configparser.y" + case 688: /* dnsc_dnscrypt_secret_key: VAR_DNSCRYPT_SECRET_KEY STRING_ARG */ +#line 3654 "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))) @@ -7119,22 +7148,22 @@ yyparse (void) if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str))) fatal_exit("out of memory adding dnscrypt-secret-key"); } -#line 7123 "util/configparser.c" +#line 7152 "util/configparser.c" break; - case 687: /* dnsc_dnscrypt_shared_secret_cache_size: VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE STRING_ARG */ -#line 3653 "util/configparser.y" + case 689: /* dnsc_dnscrypt_shared_secret_cache_size: VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE STRING_ARG */ +#line 3663 "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 7134 "util/configparser.c" +#line 7163 "util/configparser.c" break; - case 688: /* dnsc_dnscrypt_shared_secret_cache_slabs: VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS STRING_ARG */ -#line 3661 "util/configparser.y" + case 690: /* dnsc_dnscrypt_shared_secret_cache_slabs: VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS STRING_ARG */ +#line 3671 "util/configparser.y" { OUTYY(("P(dnscrypt_shared_secret_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) { @@ -7146,22 +7175,22 @@ yyparse (void) } free((yyvsp[0].str)); } -#line 7150 "util/configparser.c" +#line 7179 "util/configparser.c" break; - case 689: /* dnsc_dnscrypt_nonce_cache_size: VAR_DNSCRYPT_NONCE_CACHE_SIZE STRING_ARG */ -#line 3674 "util/configparser.y" + case 691: /* dnsc_dnscrypt_nonce_cache_size: VAR_DNSCRYPT_NONCE_CACHE_SIZE STRING_ARG */ +#line 3684 "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 7161 "util/configparser.c" +#line 7190 "util/configparser.c" break; - case 690: /* dnsc_dnscrypt_nonce_cache_slabs: VAR_DNSCRYPT_NONCE_CACHE_SLABS STRING_ARG */ -#line 3682 "util/configparser.y" + case 692: /* dnsc_dnscrypt_nonce_cache_slabs: VAR_DNSCRYPT_NONCE_CACHE_SLABS STRING_ARG */ +#line 3692 "util/configparser.y" { OUTYY(("P(dnscrypt_nonce_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) { @@ -7173,20 +7202,20 @@ yyparse (void) } free((yyvsp[0].str)); } -#line 7177 "util/configparser.c" +#line 7206 "util/configparser.c" break; - case 691: /* cachedbstart: VAR_CACHEDB */ -#line 3695 "util/configparser.y" + case 693: /* cachedbstart: VAR_CACHEDB */ +#line 3705 "util/configparser.y" { OUTYY(("\nP(cachedb:)\n")); cfg_parser->started_toplevel = 1; } -#line 7186 "util/configparser.c" +#line 7215 "util/configparser.c" break; - case 702: /* cachedb_backend_name: VAR_CACHEDB_BACKEND STRING_ARG */ -#line 3707 "util/configparser.y" + case 706: /* cachedb_backend_name: VAR_CACHEDB_BACKEND STRING_ARG */ +#line 3718 "util/configparser.y" { #ifdef USE_CACHEDB OUTYY(("P(backend:%s)\n", (yyvsp[0].str))); @@ -7197,11 +7226,11 @@ yyparse (void) free((yyvsp[0].str)); #endif } -#line 7201 "util/configparser.c" +#line 7230 "util/configparser.c" break; - case 703: /* cachedb_secret_seed: VAR_CACHEDB_SECRETSEED STRING_ARG */ -#line 3719 "util/configparser.y" + case 707: /* cachedb_secret_seed: VAR_CACHEDB_SECRETSEED STRING_ARG */ +#line 3730 "util/configparser.y" { #ifdef USE_CACHEDB OUTYY(("P(secret-seed:%s)\n", (yyvsp[0].str))); @@ -7212,11 +7241,27 @@ yyparse (void) free((yyvsp[0].str)); #endif } -#line 7216 "util/configparser.c" +#line 7245 "util/configparser.c" break; - case 704: /* redis_server_host: VAR_CACHEDB_REDISHOST STRING_ARG */ -#line 3731 "util/configparser.y" + case 708: /* cachedb_no_store: VAR_CACHEDB_NO_STORE STRING_ARG */ +#line 3742 "util/configparser.y" + { + #ifdef USE_CACHEDB + OUTYY(("P(cachedb_no_store:%s)\n", (yyvsp[0].str))); + if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->cachedb_no_store = (strcmp((yyvsp[0].str), "yes")==0); + #else + OUTYY(("P(Compiled without cachedb, ignoring)\n")); + #endif + free((yyvsp[0].str)); + } +#line 7261 "util/configparser.c" + break; + + case 709: /* redis_server_host: VAR_CACHEDB_REDISHOST STRING_ARG */ +#line 3755 "util/configparser.y" { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_server_host:%s)\n", (yyvsp[0].str))); @@ -7227,11 +7272,11 @@ yyparse (void) free((yyvsp[0].str)); #endif } -#line 7231 "util/configparser.c" +#line 7276 "util/configparser.c" break; - case 705: /* redis_server_port: VAR_CACHEDB_REDISPORT STRING_ARG */ -#line 3743 "util/configparser.y" + case 710: /* redis_server_port: VAR_CACHEDB_REDISPORT STRING_ARG */ +#line 3767 "util/configparser.y" { #if defined(USE_CACHEDB) && defined(USE_REDIS) int port; @@ -7245,11 +7290,11 @@ yyparse (void) #endif free((yyvsp[0].str)); } -#line 7249 "util/configparser.c" +#line 7294 "util/configparser.c" break; - case 706: /* redis_server_path: VAR_CACHEDB_REDISPATH STRING_ARG */ -#line 3758 "util/configparser.y" + case 711: /* redis_server_path: VAR_CACHEDB_REDISPATH STRING_ARG */ +#line 3782 "util/configparser.y" { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_server_path:%s)\n", (yyvsp[0].str))); @@ -7260,11 +7305,11 @@ yyparse (void) free((yyvsp[0].str)); #endif } -#line 7264 "util/configparser.c" +#line 7309 "util/configparser.c" break; - case 707: /* redis_server_password: VAR_CACHEDB_REDISPASSWORD STRING_ARG */ -#line 3770 "util/configparser.y" + case 712: /* redis_server_password: VAR_CACHEDB_REDISPASSWORD STRING_ARG */ +#line 3794 "util/configparser.y" { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_server_password:%s)\n", (yyvsp[0].str))); @@ -7275,11 +7320,11 @@ yyparse (void) free((yyvsp[0].str)); #endif } -#line 7279 "util/configparser.c" +#line 7324 "util/configparser.c" break; - case 708: /* redis_timeout: VAR_CACHEDB_REDISTIMEOUT STRING_ARG */ -#line 3782 "util/configparser.y" + case 713: /* redis_timeout: VAR_CACHEDB_REDISTIMEOUT STRING_ARG */ +#line 3806 "util/configparser.y" { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_timeout:%s)\n", (yyvsp[0].str))); @@ -7291,11 +7336,11 @@ yyparse (void) #endif free((yyvsp[0].str)); } -#line 7295 "util/configparser.c" +#line 7340 "util/configparser.c" break; - case 709: /* redis_expire_records: VAR_CACHEDB_REDISEXPIRERECORDS STRING_ARG */ -#line 3795 "util/configparser.y" + case 714: /* redis_expire_records: VAR_CACHEDB_REDISEXPIRERECORDS STRING_ARG */ +#line 3819 "util/configparser.y" { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_expire_records:%s)\n", (yyvsp[0].str))); @@ -7307,11 +7352,29 @@ yyparse (void) #endif free((yyvsp[0].str)); } -#line 7311 "util/configparser.c" +#line 7356 "util/configparser.c" break; - case 710: /* server_tcp_connection_limit: VAR_TCP_CONNECTION_LIMIT STRING_ARG STRING_ARG */ -#line 3808 "util/configparser.y" + case 715: /* redis_logical_db: VAR_CACHEDB_REDISLOGICALDB STRING_ARG */ +#line 3832 "util/configparser.y" + { + #if defined(USE_CACHEDB) && defined(USE_REDIS) + int db; + OUTYY(("P(redis_logical_db:%s)\n", (yyvsp[0].str))); + db = atoi((yyvsp[0].str)); + if((db == 0 && strcmp((yyvsp[0].str), "0") != 0) || db < 0) + yyerror("valid redis logical database index expected"); + else cfg_parser->cfg->redis_logical_db = db; + #else + OUTYY(("P(Compiled without cachedb or redis, ignoring)\n")); + #endif + free((yyvsp[0].str)); + } +#line 7374 "util/configparser.c" + break; + + case 716: /* server_tcp_connection_limit: VAR_TCP_CONNECTION_LIMIT STRING_ARG STRING_ARG */ +#line 3847 "util/configparser.y" { OUTYY(("P(server_tcp_connection_limit:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if (atoi((yyvsp[0].str)) < 0) @@ -7321,11 +7384,11 @@ yyparse (void) fatal_exit("out of memory adding tcp connection limit"); } } -#line 7325 "util/configparser.c" +#line 7388 "util/configparser.c" break; - case 711: /* server_answer_cookie: VAR_ANSWER_COOKIE STRING_ARG */ -#line 3819 "util/configparser.y" + case 717: /* server_answer_cookie: VAR_ANSWER_COOKIE STRING_ARG */ +#line 3858 "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) @@ -7333,11 +7396,11 @@ yyparse (void) else cfg_parser->cfg->do_answer_cookie = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 7337 "util/configparser.c" +#line 7400 "util/configparser.c" break; - case 712: /* server_cookie_secret: VAR_COOKIE_SECRET STRING_ARG */ -#line 3828 "util/configparser.y" + case 718: /* server_cookie_secret: VAR_COOKIE_SECRET STRING_ARG */ +#line 3867 "util/configparser.y" { uint8_t secret[32]; size_t secret_len = sizeof(secret); @@ -7352,20 +7415,20 @@ yyparse (void) } free((yyvsp[0].str)); } -#line 7356 "util/configparser.c" +#line 7419 "util/configparser.c" break; - case 713: /* ipsetstart: VAR_IPSET */ -#line 3844 "util/configparser.y" + case 719: /* ipsetstart: VAR_IPSET */ +#line 3883 "util/configparser.y" { OUTYY(("\nP(ipset:)\n")); cfg_parser->started_toplevel = 1; } -#line 7365 "util/configparser.c" +#line 7428 "util/configparser.c" break; - case 718: /* ipset_name_v4: VAR_IPSET_NAME_V4 STRING_ARG */ -#line 3854 "util/configparser.y" + case 724: /* ipset_name_v4: VAR_IPSET_NAME_V4 STRING_ARG */ +#line 3893 "util/configparser.y" { #ifdef USE_IPSET OUTYY(("P(name-v4:%s)\n", (yyvsp[0].str))); @@ -7379,11 +7442,11 @@ yyparse (void) free((yyvsp[0].str)); #endif } -#line 7383 "util/configparser.c" +#line 7446 "util/configparser.c" break; - case 719: /* ipset_name_v6: VAR_IPSET_NAME_V6 STRING_ARG */ -#line 3869 "util/configparser.y" + case 725: /* ipset_name_v6: VAR_IPSET_NAME_V6 STRING_ARG */ +#line 3908 "util/configparser.y" { #ifdef USE_IPSET OUTYY(("P(name-v6:%s)\n", (yyvsp[0].str))); @@ -7397,11 +7460,11 @@ yyparse (void) free((yyvsp[0].str)); #endif } -#line 7401 "util/configparser.c" +#line 7464 "util/configparser.c" break; -#line 7405 "util/configparser.c" +#line 7468 "util/configparser.c" default: break; } @@ -7595,7 +7658,7 @@ yyparse (void) return yyresult; } -#line 3883 "util/configparser.y" +#line 3922 "util/configparser.y" /* parse helper routines could be here */ diff --git a/util/configparser.h b/util/configparser.h index 338dfbb72214..a3eeb0ae2f40 100644 --- a/util/configparser.h +++ b/util/configparser.h @@ -339,64 +339,67 @@ extern int yydebug; VAR_CACHEDB_REDISEXPIRERECORDS = 540, /* VAR_CACHEDB_REDISEXPIRERECORDS */ VAR_CACHEDB_REDISPATH = 541, /* VAR_CACHEDB_REDISPATH */ VAR_CACHEDB_REDISPASSWORD = 542, /* VAR_CACHEDB_REDISPASSWORD */ - VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 543, /* VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM */ - VAR_FOR_UPSTREAM = 544, /* VAR_FOR_UPSTREAM */ - VAR_AUTH_ZONE = 545, /* VAR_AUTH_ZONE */ - VAR_ZONEFILE = 546, /* VAR_ZONEFILE */ - VAR_MASTER = 547, /* VAR_MASTER */ - VAR_URL = 548, /* VAR_URL */ - VAR_FOR_DOWNSTREAM = 549, /* VAR_FOR_DOWNSTREAM */ - VAR_FALLBACK_ENABLED = 550, /* VAR_FALLBACK_ENABLED */ - VAR_TLS_ADDITIONAL_PORT = 551, /* VAR_TLS_ADDITIONAL_PORT */ - VAR_LOW_RTT = 552, /* VAR_LOW_RTT */ - VAR_LOW_RTT_PERMIL = 553, /* VAR_LOW_RTT_PERMIL */ - VAR_FAST_SERVER_PERMIL = 554, /* VAR_FAST_SERVER_PERMIL */ - VAR_FAST_SERVER_NUM = 555, /* VAR_FAST_SERVER_NUM */ - VAR_ALLOW_NOTIFY = 556, /* VAR_ALLOW_NOTIFY */ - VAR_TLS_WIN_CERT = 557, /* VAR_TLS_WIN_CERT */ - VAR_TCP_CONNECTION_LIMIT = 558, /* VAR_TCP_CONNECTION_LIMIT */ - VAR_ANSWER_COOKIE = 559, /* VAR_ANSWER_COOKIE */ - VAR_COOKIE_SECRET = 560, /* VAR_COOKIE_SECRET */ - VAR_IP_RATELIMIT_COOKIE = 561, /* VAR_IP_RATELIMIT_COOKIE */ - VAR_FORWARD_NO_CACHE = 562, /* VAR_FORWARD_NO_CACHE */ - VAR_STUB_NO_CACHE = 563, /* VAR_STUB_NO_CACHE */ - VAR_LOG_SERVFAIL = 564, /* VAR_LOG_SERVFAIL */ - VAR_DENY_ANY = 565, /* VAR_DENY_ANY */ - VAR_UNKNOWN_SERVER_TIME_LIMIT = 566, /* VAR_UNKNOWN_SERVER_TIME_LIMIT */ - VAR_LOG_TAG_QUERYREPLY = 567, /* VAR_LOG_TAG_QUERYREPLY */ - VAR_STREAM_WAIT_SIZE = 568, /* VAR_STREAM_WAIT_SIZE */ - VAR_TLS_CIPHERS = 569, /* VAR_TLS_CIPHERS */ - VAR_TLS_CIPHERSUITES = 570, /* VAR_TLS_CIPHERSUITES */ - VAR_TLS_USE_SNI = 571, /* VAR_TLS_USE_SNI */ - VAR_IPSET = 572, /* VAR_IPSET */ - VAR_IPSET_NAME_V4 = 573, /* VAR_IPSET_NAME_V4 */ - VAR_IPSET_NAME_V6 = 574, /* VAR_IPSET_NAME_V6 */ - VAR_TLS_SESSION_TICKET_KEYS = 575, /* VAR_TLS_SESSION_TICKET_KEYS */ - VAR_RPZ = 576, /* VAR_RPZ */ - VAR_TAGS = 577, /* VAR_TAGS */ - VAR_RPZ_ACTION_OVERRIDE = 578, /* VAR_RPZ_ACTION_OVERRIDE */ - VAR_RPZ_CNAME_OVERRIDE = 579, /* VAR_RPZ_CNAME_OVERRIDE */ - VAR_RPZ_LOG = 580, /* VAR_RPZ_LOG */ - VAR_RPZ_LOG_NAME = 581, /* VAR_RPZ_LOG_NAME */ - VAR_DYNLIB = 582, /* VAR_DYNLIB */ - VAR_DYNLIB_FILE = 583, /* VAR_DYNLIB_FILE */ - VAR_EDNS_CLIENT_STRING = 584, /* VAR_EDNS_CLIENT_STRING */ - VAR_EDNS_CLIENT_STRING_OPCODE = 585, /* VAR_EDNS_CLIENT_STRING_OPCODE */ - VAR_NSID = 586, /* VAR_NSID */ - VAR_ZONEMD_PERMISSIVE_MODE = 587, /* VAR_ZONEMD_PERMISSIVE_MODE */ - VAR_ZONEMD_CHECK = 588, /* VAR_ZONEMD_CHECK */ - VAR_ZONEMD_REJECT_ABSENCE = 589, /* VAR_ZONEMD_REJECT_ABSENCE */ - VAR_RPZ_SIGNAL_NXDOMAIN_RA = 590, /* VAR_RPZ_SIGNAL_NXDOMAIN_RA */ - VAR_INTERFACE_AUTOMATIC_PORTS = 591, /* VAR_INTERFACE_AUTOMATIC_PORTS */ - VAR_EDE = 592, /* VAR_EDE */ - VAR_INTERFACE_ACTION = 593, /* VAR_INTERFACE_ACTION */ - VAR_INTERFACE_VIEW = 594, /* VAR_INTERFACE_VIEW */ - VAR_INTERFACE_TAG = 595, /* VAR_INTERFACE_TAG */ - VAR_INTERFACE_TAG_ACTION = 596, /* VAR_INTERFACE_TAG_ACTION */ - VAR_INTERFACE_TAG_DATA = 597, /* VAR_INTERFACE_TAG_DATA */ - VAR_PROXY_PROTOCOL_PORT = 598, /* VAR_PROXY_PROTOCOL_PORT */ - VAR_STATISTICS_INHIBIT_ZERO = 599, /* VAR_STATISTICS_INHIBIT_ZERO */ - VAR_HARDEN_UNKNOWN_ADDITIONAL = 600 /* VAR_HARDEN_UNKNOWN_ADDITIONAL */ + VAR_CACHEDB_REDISLOGICALDB = 543, /* VAR_CACHEDB_REDISLOGICALDB */ + VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 544, /* VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM */ + VAR_FOR_UPSTREAM = 545, /* VAR_FOR_UPSTREAM */ + VAR_AUTH_ZONE = 546, /* VAR_AUTH_ZONE */ + VAR_ZONEFILE = 547, /* VAR_ZONEFILE */ + VAR_MASTER = 548, /* VAR_MASTER */ + VAR_URL = 549, /* VAR_URL */ + VAR_FOR_DOWNSTREAM = 550, /* VAR_FOR_DOWNSTREAM */ + VAR_FALLBACK_ENABLED = 551, /* VAR_FALLBACK_ENABLED */ + VAR_TLS_ADDITIONAL_PORT = 552, /* VAR_TLS_ADDITIONAL_PORT */ + VAR_LOW_RTT = 553, /* VAR_LOW_RTT */ + VAR_LOW_RTT_PERMIL = 554, /* VAR_LOW_RTT_PERMIL */ + VAR_FAST_SERVER_PERMIL = 555, /* VAR_FAST_SERVER_PERMIL */ + VAR_FAST_SERVER_NUM = 556, /* VAR_FAST_SERVER_NUM */ + VAR_ALLOW_NOTIFY = 557, /* VAR_ALLOW_NOTIFY */ + VAR_TLS_WIN_CERT = 558, /* VAR_TLS_WIN_CERT */ + VAR_TCP_CONNECTION_LIMIT = 559, /* VAR_TCP_CONNECTION_LIMIT */ + VAR_ANSWER_COOKIE = 560, /* VAR_ANSWER_COOKIE */ + VAR_COOKIE_SECRET = 561, /* VAR_COOKIE_SECRET */ + VAR_IP_RATELIMIT_COOKIE = 562, /* VAR_IP_RATELIMIT_COOKIE */ + VAR_FORWARD_NO_CACHE = 563, /* VAR_FORWARD_NO_CACHE */ + VAR_STUB_NO_CACHE = 564, /* VAR_STUB_NO_CACHE */ + VAR_LOG_SERVFAIL = 565, /* VAR_LOG_SERVFAIL */ + VAR_DENY_ANY = 566, /* VAR_DENY_ANY */ + VAR_UNKNOWN_SERVER_TIME_LIMIT = 567, /* VAR_UNKNOWN_SERVER_TIME_LIMIT */ + VAR_LOG_TAG_QUERYREPLY = 568, /* VAR_LOG_TAG_QUERYREPLY */ + VAR_STREAM_WAIT_SIZE = 569, /* VAR_STREAM_WAIT_SIZE */ + VAR_TLS_CIPHERS = 570, /* VAR_TLS_CIPHERS */ + VAR_TLS_CIPHERSUITES = 571, /* VAR_TLS_CIPHERSUITES */ + VAR_TLS_USE_SNI = 572, /* VAR_TLS_USE_SNI */ + VAR_IPSET = 573, /* VAR_IPSET */ + VAR_IPSET_NAME_V4 = 574, /* VAR_IPSET_NAME_V4 */ + VAR_IPSET_NAME_V6 = 575, /* VAR_IPSET_NAME_V6 */ + VAR_TLS_SESSION_TICKET_KEYS = 576, /* VAR_TLS_SESSION_TICKET_KEYS */ + VAR_RPZ = 577, /* VAR_RPZ */ + VAR_TAGS = 578, /* VAR_TAGS */ + VAR_RPZ_ACTION_OVERRIDE = 579, /* VAR_RPZ_ACTION_OVERRIDE */ + VAR_RPZ_CNAME_OVERRIDE = 580, /* VAR_RPZ_CNAME_OVERRIDE */ + VAR_RPZ_LOG = 581, /* VAR_RPZ_LOG */ + VAR_RPZ_LOG_NAME = 582, /* VAR_RPZ_LOG_NAME */ + VAR_DYNLIB = 583, /* VAR_DYNLIB */ + VAR_DYNLIB_FILE = 584, /* VAR_DYNLIB_FILE */ + VAR_EDNS_CLIENT_STRING = 585, /* VAR_EDNS_CLIENT_STRING */ + VAR_EDNS_CLIENT_STRING_OPCODE = 586, /* VAR_EDNS_CLIENT_STRING_OPCODE */ + VAR_NSID = 587, /* VAR_NSID */ + VAR_ZONEMD_PERMISSIVE_MODE = 588, /* VAR_ZONEMD_PERMISSIVE_MODE */ + VAR_ZONEMD_CHECK = 589, /* VAR_ZONEMD_CHECK */ + VAR_ZONEMD_REJECT_ABSENCE = 590, /* VAR_ZONEMD_REJECT_ABSENCE */ + VAR_RPZ_SIGNAL_NXDOMAIN_RA = 591, /* VAR_RPZ_SIGNAL_NXDOMAIN_RA */ + VAR_INTERFACE_AUTOMATIC_PORTS = 592, /* VAR_INTERFACE_AUTOMATIC_PORTS */ + VAR_EDE = 593, /* VAR_EDE */ + VAR_INTERFACE_ACTION = 594, /* VAR_INTERFACE_ACTION */ + VAR_INTERFACE_VIEW = 595, /* VAR_INTERFACE_VIEW */ + VAR_INTERFACE_TAG = 596, /* VAR_INTERFACE_TAG */ + VAR_INTERFACE_TAG_ACTION = 597, /* VAR_INTERFACE_TAG_ACTION */ + VAR_INTERFACE_TAG_DATA = 598, /* VAR_INTERFACE_TAG_DATA */ + VAR_PROXY_PROTOCOL_PORT = 599, /* VAR_PROXY_PROTOCOL_PORT */ + VAR_STATISTICS_INHIBIT_ZERO = 600, /* VAR_STATISTICS_INHIBIT_ZERO */ + VAR_HARDEN_UNKNOWN_ADDITIONAL = 601, /* VAR_HARDEN_UNKNOWN_ADDITIONAL */ + VAR_DISABLE_EDNS_DO = 602, /* VAR_DISABLE_EDNS_DO */ + VAR_CACHEDB_NO_STORE = 603 /* VAR_CACHEDB_NO_STORE */ }; typedef enum yytokentype yytoken_kind_t; #endif @@ -690,64 +693,67 @@ extern int yydebug; #define VAR_CACHEDB_REDISEXPIRERECORDS 540 #define VAR_CACHEDB_REDISPATH 541 #define VAR_CACHEDB_REDISPASSWORD 542 -#define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 543 -#define VAR_FOR_UPSTREAM 544 -#define VAR_AUTH_ZONE 545 -#define VAR_ZONEFILE 546 -#define VAR_MASTER 547 -#define VAR_URL 548 -#define VAR_FOR_DOWNSTREAM 549 -#define VAR_FALLBACK_ENABLED 550 -#define VAR_TLS_ADDITIONAL_PORT 551 -#define VAR_LOW_RTT 552 -#define VAR_LOW_RTT_PERMIL 553 -#define VAR_FAST_SERVER_PERMIL 554 -#define VAR_FAST_SERVER_NUM 555 -#define VAR_ALLOW_NOTIFY 556 -#define VAR_TLS_WIN_CERT 557 -#define VAR_TCP_CONNECTION_LIMIT 558 -#define VAR_ANSWER_COOKIE 559 -#define VAR_COOKIE_SECRET 560 -#define VAR_IP_RATELIMIT_COOKIE 561 -#define VAR_FORWARD_NO_CACHE 562 -#define VAR_STUB_NO_CACHE 563 -#define VAR_LOG_SERVFAIL 564 -#define VAR_DENY_ANY 565 -#define VAR_UNKNOWN_SERVER_TIME_LIMIT 566 -#define VAR_LOG_TAG_QUERYREPLY 567 -#define VAR_STREAM_WAIT_SIZE 568 -#define VAR_TLS_CIPHERS 569 -#define VAR_TLS_CIPHERSUITES 570 -#define VAR_TLS_USE_SNI 571 -#define VAR_IPSET 572 -#define VAR_IPSET_NAME_V4 573 -#define VAR_IPSET_NAME_V6 574 -#define VAR_TLS_SESSION_TICKET_KEYS 575 -#define VAR_RPZ 576 -#define VAR_TAGS 577 -#define VAR_RPZ_ACTION_OVERRIDE 578 -#define VAR_RPZ_CNAME_OVERRIDE 579 -#define VAR_RPZ_LOG 580 -#define VAR_RPZ_LOG_NAME 581 -#define VAR_DYNLIB 582 -#define VAR_DYNLIB_FILE 583 -#define VAR_EDNS_CLIENT_STRING 584 -#define VAR_EDNS_CLIENT_STRING_OPCODE 585 -#define VAR_NSID 586 -#define VAR_ZONEMD_PERMISSIVE_MODE 587 -#define VAR_ZONEMD_CHECK 588 -#define VAR_ZONEMD_REJECT_ABSENCE 589 -#define VAR_RPZ_SIGNAL_NXDOMAIN_RA 590 -#define VAR_INTERFACE_AUTOMATIC_PORTS 591 -#define VAR_EDE 592 -#define VAR_INTERFACE_ACTION 593 -#define VAR_INTERFACE_VIEW 594 -#define VAR_INTERFACE_TAG 595 -#define VAR_INTERFACE_TAG_ACTION 596 -#define VAR_INTERFACE_TAG_DATA 597 -#define VAR_PROXY_PROTOCOL_PORT 598 -#define VAR_STATISTICS_INHIBIT_ZERO 599 -#define VAR_HARDEN_UNKNOWN_ADDITIONAL 600 +#define VAR_CACHEDB_REDISLOGICALDB 543 +#define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 544 +#define VAR_FOR_UPSTREAM 545 +#define VAR_AUTH_ZONE 546 +#define VAR_ZONEFILE 547 +#define VAR_MASTER 548 +#define VAR_URL 549 +#define VAR_FOR_DOWNSTREAM 550 +#define VAR_FALLBACK_ENABLED 551 +#define VAR_TLS_ADDITIONAL_PORT 552 +#define VAR_LOW_RTT 553 +#define VAR_LOW_RTT_PERMIL 554 +#define VAR_FAST_SERVER_PERMIL 555 +#define VAR_FAST_SERVER_NUM 556 +#define VAR_ALLOW_NOTIFY 557 +#define VAR_TLS_WIN_CERT 558 +#define VAR_TCP_CONNECTION_LIMIT 559 +#define VAR_ANSWER_COOKIE 560 +#define VAR_COOKIE_SECRET 561 +#define VAR_IP_RATELIMIT_COOKIE 562 +#define VAR_FORWARD_NO_CACHE 563 +#define VAR_STUB_NO_CACHE 564 +#define VAR_LOG_SERVFAIL 565 +#define VAR_DENY_ANY 566 +#define VAR_UNKNOWN_SERVER_TIME_LIMIT 567 +#define VAR_LOG_TAG_QUERYREPLY 568 +#define VAR_STREAM_WAIT_SIZE 569 +#define VAR_TLS_CIPHERS 570 +#define VAR_TLS_CIPHERSUITES 571 +#define VAR_TLS_USE_SNI 572 +#define VAR_IPSET 573 +#define VAR_IPSET_NAME_V4 574 +#define VAR_IPSET_NAME_V6 575 +#define VAR_TLS_SESSION_TICKET_KEYS 576 +#define VAR_RPZ 577 +#define VAR_TAGS 578 +#define VAR_RPZ_ACTION_OVERRIDE 579 +#define VAR_RPZ_CNAME_OVERRIDE 580 +#define VAR_RPZ_LOG 581 +#define VAR_RPZ_LOG_NAME 582 +#define VAR_DYNLIB 583 +#define VAR_DYNLIB_FILE 584 +#define VAR_EDNS_CLIENT_STRING 585 +#define VAR_EDNS_CLIENT_STRING_OPCODE 586 +#define VAR_NSID 587 +#define VAR_ZONEMD_PERMISSIVE_MODE 588 +#define VAR_ZONEMD_CHECK 589 +#define VAR_ZONEMD_REJECT_ABSENCE 590 +#define VAR_RPZ_SIGNAL_NXDOMAIN_RA 591 +#define VAR_INTERFACE_AUTOMATIC_PORTS 592 +#define VAR_EDE 593 +#define VAR_INTERFACE_ACTION 594 +#define VAR_INTERFACE_VIEW 595 +#define VAR_INTERFACE_TAG 596 +#define VAR_INTERFACE_TAG_ACTION 597 +#define VAR_INTERFACE_TAG_DATA 598 +#define VAR_PROXY_PROTOCOL_PORT 599 +#define VAR_STATISTICS_INHIBIT_ZERO 600 +#define VAR_HARDEN_UNKNOWN_ADDITIONAL 601 +#define VAR_DISABLE_EDNS_DO 602 +#define VAR_CACHEDB_NO_STORE 603 /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED @@ -757,7 +763,7 @@ union YYSTYPE char* str; -#line 761 "util/configparser.h" +#line 767 "util/configparser.h" }; typedef union YYSTYPE YYSTYPE; diff --git a/util/configparser.y b/util/configparser.y index d8f25a67ebbf..da5d6608f1d5 100644 --- a/util/configparser.y +++ b/util/configparser.y @@ -179,6 +179,7 @@ extern struct config_parser_state* cfg_parser; %token VAR_CACHEDB VAR_CACHEDB_BACKEND VAR_CACHEDB_SECRETSEED %token VAR_CACHEDB_REDISHOST VAR_CACHEDB_REDISPORT VAR_CACHEDB_REDISTIMEOUT %token VAR_CACHEDB_REDISEXPIRERECORDS VAR_CACHEDB_REDISPATH VAR_CACHEDB_REDISPASSWORD +%token VAR_CACHEDB_REDISLOGICALDB %token VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM VAR_FOR_UPSTREAM %token VAR_AUTH_ZONE VAR_ZONEFILE VAR_MASTER VAR_URL VAR_FOR_DOWNSTREAM %token VAR_FALLBACK_ENABLED VAR_TLS_ADDITIONAL_PORT VAR_LOW_RTT VAR_LOW_RTT_PERMIL @@ -198,7 +199,7 @@ extern struct config_parser_state* cfg_parser; %token VAR_INTERFACE_ACTION VAR_INTERFACE_VIEW VAR_INTERFACE_TAG %token VAR_INTERFACE_TAG_ACTION VAR_INTERFACE_TAG_DATA %token VAR_PROXY_PROTOCOL_PORT VAR_STATISTICS_INHIBIT_ZERO -%token VAR_HARDEN_UNKNOWN_ADDITIONAL +%token VAR_HARDEN_UNKNOWN_ADDITIONAL VAR_DISABLE_EDNS_DO VAR_CACHEDB_NO_STORE %% toplevelvars: /* empty */ | toplevelvars toplevelvar ; @@ -332,7 +333,7 @@ content_server: server_num_threads | server_verbosity | server_port | server_tcp_reuse_timeout | server_tcp_auth_query_timeout | server_interface_automatic_ports | server_ede | server_proxy_protocol_port | server_statistics_inhibit_zero | - server_harden_unknown_additional + server_harden_unknown_additional | server_disable_edns_do ; stubstart: VAR_STUB_ZONE { @@ -2060,6 +2061,15 @@ server_ignore_cd_flag: VAR_IGNORE_CD_FLAG STRING_ARG free($2); } ; +server_disable_edns_do: VAR_DISABLE_EDNS_DO STRING_ARG + { + OUTYY(("P(server_disable_edns_do:%s)\n", $2)); + if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->disable_edns_do = (strcmp($2, "yes")==0); + free($2); + } + ; server_serve_expired: VAR_SERVE_EXPIRED STRING_ARG { OUTYY(("P(server_serve_expired:%s)\n", $2)); @@ -3701,7 +3711,8 @@ contents_cachedb: contents_cachedb content_cachedb | ; content_cachedb: cachedb_backend_name | cachedb_secret_seed | redis_server_host | redis_server_port | redis_timeout | - redis_expire_records | redis_server_path | redis_server_password + redis_expire_records | redis_server_path | redis_server_password | + cachedb_no_store | redis_logical_db ; cachedb_backend_name: VAR_CACHEDB_BACKEND STRING_ARG { @@ -3727,6 +3738,19 @@ cachedb_secret_seed: VAR_CACHEDB_SECRETSEED STRING_ARG #endif } ; +cachedb_no_store: VAR_CACHEDB_NO_STORE STRING_ARG + { + #ifdef USE_CACHEDB + OUTYY(("P(cachedb_no_store:%s)\n", $2)); + if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->cachedb_no_store = (strcmp($2, "yes")==0); + #else + OUTYY(("P(Compiled without cachedb, ignoring)\n")); + #endif + free($2); + } + ; redis_server_host: VAR_CACHEDB_REDISHOST STRING_ARG { #if defined(USE_CACHEDB) && defined(USE_REDIS) @@ -3804,6 +3828,21 @@ redis_expire_records: VAR_CACHEDB_REDISEXPIRERECORDS STRING_ARG free($2); } ; +redis_logical_db: VAR_CACHEDB_REDISLOGICALDB STRING_ARG + { + #if defined(USE_CACHEDB) && defined(USE_REDIS) + int db; + OUTYY(("P(redis_logical_db:%s)\n", $2)); + db = atoi($2); + if((db == 0 && strcmp($2, "0") != 0) || db < 0) + yyerror("valid redis logical database index expected"); + else cfg_parser->cfg->redis_logical_db = db; + #else + OUTYY(("P(Compiled without cachedb or redis, ignoring)\n")); + #endif + free($2); + } + ; server_tcp_connection_limit: VAR_TCP_CONNECTION_LIMIT STRING_ARG STRING_ARG { OUTYY(("P(server_tcp_connection_limit:%s %s)\n", $2, $3)); diff --git a/util/data/msgencode.c b/util/data/msgencode.c index a170eb7b8a67..80ae33a38661 100644 --- a/util/data/msgencode.c +++ b/util/data/msgencode.c @@ -1012,8 +1012,10 @@ reply_info_answer_encode(struct query_info* qinf, struct reply_info* rep, ede_size = calc_ede_option_size(edns, &ede_txt_size); if(sldns_buffer_capacity(pkt) < udpsize) udpsize = sldns_buffer_capacity(pkt); + if(!edns || !edns->edns_present) { + attach_edns = 0; /* EDEs are optional, try to fit anything else before them */ - if(udpsize < LDNS_HEADER_SIZE + edns_field_size - ede_size) { + } else if(udpsize < LDNS_HEADER_SIZE + edns_field_size - ede_size) { /* packet too small to contain edns, omit it. */ attach_edns = 0; } else { diff --git a/util/data/msgparse.c b/util/data/msgparse.c index b5414c6d0a55..d06b7bb25e6e 100644 --- a/util/data/msgparse.c +++ b/util/data/msgparse.c @@ -47,6 +47,7 @@ #include "util/regional.h" #include "util/rfc_1982.h" #include "util/edns.h" +#include "util/net_help.h" #include "sldns/rrdef.h" #include "sldns/sbuffer.h" #include "sldns/parseutil.h" @@ -1306,3 +1307,27 @@ log_edns_opt_list(enum verbosity_value level, const char* info_str, } } +/** remove RR from msgparse RRset, return true if rrset is entirely bad */ +int +msgparse_rrset_remove_rr(const char* str, sldns_buffer* pkt, struct rrset_parse* rrset, + struct rr_parse* prev, struct rr_parse* rr, struct sockaddr_storage* addr, socklen_t addrlen) +{ + if(verbosity >= VERB_QUERY && rrset->dname_len <= LDNS_MAX_DOMAINLEN && str) { + uint8_t buf[LDNS_MAX_DOMAINLEN+1]; + dname_pkt_copy(pkt, buf, rrset->dname); + if(addr) + log_name_addr(VERB_QUERY, str, buf, addr, addrlen); + else log_nametypeclass(VERB_QUERY, str, buf, + rrset->type, ntohs(rrset->rrset_class)); + } + if(prev) + prev->next = rr->next; + else rrset->rr_first = rr->next; + if(rrset->rr_last == rr) + rrset->rr_last = prev; + rrset->rr_count --; + rrset->size -= rr->size; + /* rr struct still exists, but is unlinked, so that in the for loop + * the rr->next works fine to continue. */ + return rrset->rr_count == 0; +} diff --git a/util/data/msgparse.h b/util/data/msgparse.h index b7dc235d677c..8e5c94a28cba 100644 --- a/util/data/msgparse.h +++ b/util/data/msgparse.h @@ -371,4 +371,22 @@ void msgparse_bucket_remove(struct msg_parse* msg, struct rrset_parse* rrset); void log_edns_opt_list(enum verbosity_value level, const char* info_str, struct edns_option* list); +/** + * Remove RR from msgparse RRset. + * @param str: this string is used for logging if verbose. If NULL, there is + * no logging of the remove. + * @param pkt: packet in buffer that is removed from. Used to log the name + * of the item removed. + * @param rrset: RRset that the RR is removed from. + * @param prev: previous RR in list, or NULL. + * @param rr: RR that is removed. + * @param addr: address used for logging, if verbose, or NULL then it is not + * used. + * @param addrlen: length of addr, if that is not NULL. + * @return true if rrset is entirely bad, it would then need to be removed. + */ +int msgparse_rrset_remove_rr(const char* str, struct sldns_buffer* pkt, + struct rrset_parse* rrset, struct rr_parse* prev, struct rr_parse* rr, + struct sockaddr_storage* addr, socklen_t addrlen); + #endif /* UTIL_DATA_MSGPARSE_H */ diff --git a/util/fptr_wlist.c b/util/fptr_wlist.c index 3b88da2358e5..43d38dc3797d 100644 --- a/util/fptr_wlist.c +++ b/util/fptr_wlist.c @@ -168,7 +168,9 @@ int fptr_whitelist_event(void (*fptr)(int, short, void *)) { if(fptr == &comm_point_udp_callback) return 1; +#if defined(AF_INET6) && defined(IPV6_PKTINFO) && defined(HAVE_RECVMSG) else if(fptr == &comm_point_udp_ancil_callback) return 1; +#endif else if(fptr == &comm_point_tcp_accept_callback) return 1; else if(fptr == &comm_point_tcp_handle_callback) return 1; else if(fptr == &comm_timer_callback) return 1; diff --git a/util/log.c b/util/log.c index dfbb23349944..a15ee920c0fb 100644 --- a/util/log.c +++ b/util/log.c @@ -187,7 +187,7 @@ void log_ident_set_default(const char* id) default_ident = id; } -void log_ident_revert_to_default() +void log_ident_revert_to_default(void) { ident = default_ident; } diff --git a/util/module.c b/util/module.c index 773dab853d2f..62e5de4a05bb 100644 --- a/util/module.c +++ b/util/module.c @@ -194,6 +194,24 @@ char* errinf_to_str_servfail(struct module_qstate* qstate) return p; } +char* errinf_to_str_misc(struct module_qstate* qstate) +{ + char buf[20480]; + char* p = buf; + size_t left = sizeof(buf); + struct errinf_strlist* s; + if(!qstate->errinf) + snprintf(p, left, "misc failure"); + else for(s=qstate->errinf; s; s=s->next) { + snprintf(p, left, "%s%s", (s==qstate->errinf?"":" "), s->str); + left -= strlen(p); p += strlen(p); + } + p = strdup(buf); + if(!p) + log_err("malloc failure in errinf_to_str"); + return p; +} + void errinf_rrset(struct module_qstate* qstate, struct ub_packed_rrset_key *rr) { char buf[1024]; diff --git a/util/module.h b/util/module.h index 5b6fcc93cf1e..8a9da3f931a1 100644 --- a/util/module.h +++ b/util/module.h @@ -691,6 +691,8 @@ struct module_qstate { struct respip_action_info* respip_action_info; /** if the query is rpz passthru, no further rpz processing for it */ int rpz_passthru; + /* Flag tcp required. */ + int tcp_required; /** whether the reply should be dropped */ int is_drop; @@ -842,6 +844,14 @@ sldns_ede_code errinf_to_reason_bogus(struct module_qstate* qstate); */ char* errinf_to_str_servfail(struct module_qstate* qstate); +/** + * Create error info in string. For misc failures that are not servfail. + * @param qstate: query state. + * @return string or NULL on malloc failure (already logged). + * This string is malloced and has to be freed by caller. + */ +char* errinf_to_str_misc(struct module_qstate* qstate); + /** * Initialize the edns known options by allocating the required space. * @param env: the module environment. diff --git a/util/net_help.c b/util/net_help.c index e559c9b2fa6a..8970247926d7 100644 --- a/util/net_help.c +++ b/util/net_help.c @@ -809,6 +809,7 @@ addr_to_nat64(const struct sockaddr_storage* addr, struct sockaddr_in *sin = (struct sockaddr_in *)addr; struct sockaddr_in6 *sin6; uint8_t *v4_byte; + int i; /* This needs to be checked by the caller */ log_assert(addr->ss_family == AF_INET); @@ -826,7 +827,7 @@ addr_to_nat64(const struct sockaddr_storage* addr, nat64_prefixnet = nat64_prefixnet / 8; v4_byte = (uint8_t *)&sin->sin_addr.s_addr; - for(int i = 0; i < 4; i++) { + for(i = 0; i < 4; i++) { if(nat64_prefixnet == 8) { /* bits 64...71 are MBZ */ sin6->sin6_addr.s6_addr[nat64_prefixnet++] = 0; @@ -951,6 +952,111 @@ void log_crypto_err_code(const char* str, unsigned long err) #endif /* HAVE_SSL */ } +#ifdef HAVE_SSL +/** Print crypt erro with SSL_get_error want code and err_get_error code */ +static void log_crypto_err_io_code_arg(const char* str, int r, + unsigned long err, int err_present) +{ + int print_errno = 0, print_crypto_err = 0; + const char* inf = NULL; + + switch(r) { + case SSL_ERROR_NONE: + inf = "no error"; + break; + case SSL_ERROR_ZERO_RETURN: + inf = "channel closed"; + break; + case SSL_ERROR_WANT_READ: + inf = "want read"; + break; + case SSL_ERROR_WANT_WRITE: + inf = "want write"; + break; + case SSL_ERROR_WANT_CONNECT: + inf = "want connect"; + break; + case SSL_ERROR_WANT_ACCEPT: + inf = "want accept"; + break; + case SSL_ERROR_WANT_X509_LOOKUP: + inf = "want X509 lookup"; + break; +#ifdef SSL_ERROR_WANT_ASYNC + case SSL_ERROR_WANT_ASYNC: + inf = "want async"; + break; +#endif +#ifdef SSL_ERROR_WANT_ASYNC_JOB + case SSL_ERROR_WANT_ASYNC_JOB: + inf = "want async job"; + break; +#endif +#ifdef SSL_ERROR_WANT_CLIENT_HELLO_CB + case SSL_ERROR_WANT_CLIENT_HELLO_CB: + inf = "want client hello cb"; + break; +#endif + case SSL_ERROR_SYSCALL: + print_errno = 1; + inf = "syscall"; + break; + case SSL_ERROR_SSL: + print_crypto_err = 1; + inf = "SSL, usually protocol, error"; + break; + default: + inf = "unknown SSL_get_error result code"; + print_errno = 1; + print_crypto_err = 1; + } + if(print_crypto_err) { + if(print_errno) { + char buf[1024]; + snprintf(buf, sizeof(buf), "%s with errno %s", + str, strerror(errno)); + if(err_present) + log_crypto_err_code(buf, err); + else log_crypto_err(buf); + } else { + if(err_present) + log_crypto_err_code(str, err); + else log_crypto_err(str); + } + } else { + if(print_errno) { + if(errno == 0) + log_err("str: syscall error with errno %s", + strerror(errno)); + else log_err("str: %s", strerror(errno)); + } else { + log_err("str: %s", inf); + } + } +} +#endif /* HAVE_SSL */ + +void log_crypto_err_io(const char* str, int r) +{ +#ifdef HAVE_SSL + log_crypto_err_io_code_arg(str, r, 0, 0); +#else + (void)str; + (void)r; +#endif /* HAVE_SSL */ +} + +void log_crypto_err_io_code(const char* str, int r, unsigned long err) +{ +#ifdef HAVE_SSL + log_crypto_err_io_code_arg(str, r, err, 1); +#else + (void)str; + (void)r; + (void)err; +#endif /* HAVE_SSL */ +} + #ifdef HAVE_SSL /** log certificate details */ void diff --git a/util/net_help.h b/util/net_help.h index a9de910d5461..edaea42353d4 100644 --- a/util/net_help.h +++ b/util/net_help.h @@ -429,6 +429,24 @@ void log_crypto_err(const char* str); */ void log_crypto_err_code(const char* str, unsigned long err); +/** + * Log an error from libcrypto that came from SSL_write and so on, with + * a value from SSL_get_error, calls log_err. If that fails it logs with + * log_crypto_err. + * @param str: what failed + * @param r: output of SSL_get_error on the I/O operation result. + */ +void log_crypto_err_io(const char* str, int r); + +/** + * Log an error from libcrypt that came from an I/O routine with the + * errcode from ERR_get_error. Calls log_err() and log_crypto_err_code. + * @param str: what failed + * @param r: output of SSL_get_error on the I/O operation result. + * @param err: error code from ERR_get_error + */ +void log_crypto_err_io_code(const char* str, int r, unsigned long err); + /** * Log certificate details verbosity, string, of X509 cert * @param level: verbosity level diff --git a/util/netevent.c b/util/netevent.c index b9395a8998b9..141e48d48b3f 100644 --- a/util/netevent.c +++ b/util/netevent.c @@ -892,15 +892,18 @@ static int udp_recv_needs_log(int err) static int consume_pp2_header(struct sldns_buffer* buf, struct comm_reply* rep, int stream) { size_t size; - struct pp2_header *header = pp2_read_header(buf); - if(header == NULL) return 0; + struct pp2_header *header; + int err = pp2_read_header(sldns_buffer_begin(buf), + sldns_buffer_remaining(buf)); + if(err) return 0; + header = (struct pp2_header*)sldns_buffer_begin(buf); size = PP2_HEADER_SIZE + ntohs(header->len); if((header->ver_cmd & 0xF) == PP2_CMD_LOCAL) { /* A connection from the proxy itself. * No need to do anything with addresses. */ goto done; } - if(header->fam_prot == 0x00) { + if(header->fam_prot == PP2_UNSPEC_UNSPEC) { /* Unspecified family and protocol. This could be used for * health checks by proxies. * No need to do anything with addresses. */ @@ -908,8 +911,8 @@ static int consume_pp2_header(struct sldns_buffer* buf, struct comm_reply* rep, } /* Read the proxied address */ switch(header->fam_prot) { - case 0x11: /* AF_INET|STREAM */ - case 0x12: /* AF_INET|DGRAM */ + case PP2_INET_STREAM: + case PP2_INET_DGRAM: { struct sockaddr_in* addr = (struct sockaddr_in*)&rep->client_addr; @@ -920,8 +923,8 @@ static int consume_pp2_header(struct sldns_buffer* buf, struct comm_reply* rep, } /* Ignore the destination address; it should be us. */ break; - case 0x21: /* AF_INET6|STREAM */ - case 0x22: /* AF_INET6|DGRAM */ + case PP2_INET6_STREAM: + case PP2_INET6_DGRAM: { struct sockaddr_in6* addr = (struct sockaddr_in6*)&rep->client_addr; @@ -934,6 +937,10 @@ static int consume_pp2_header(struct sldns_buffer* buf, struct comm_reply* rep, } /* Ignore the destination address; it should be us. */ break; + default: + log_err("proxy_protocol: unsupported family and " + "protocol 0x%x", (int)header->fam_prot); + return 0; } rep->is_proxied = 1; done: @@ -948,10 +955,10 @@ static int consume_pp2_header(struct sldns_buffer* buf, struct comm_reply* rep, return 1; } +#if defined(AF_INET6) && defined(IPV6_PKTINFO) && defined(HAVE_RECVMSG) void comm_point_udp_ancil_callback(int fd, short event, void* arg) { -#if defined(AF_INET6) && defined(IPV6_PKTINFO) && defined(HAVE_RECVMSG) struct comm_reply rep; struct msghdr msg; struct iovec iov[1]; @@ -1063,21 +1070,21 @@ comm_point_udp_ancil_callback(int fd, short event, void* arg) fptr_ok(fptr_whitelist_comm_point(rep.c->callback)); if((*rep.c->callback)(rep.c, rep.c->cb_arg, NETEVENT_NOERROR, &rep)) { /* send back immediate reply */ - (void)comm_point_send_udp_msg_if(rep.c, rep.c->buffer, + struct sldns_buffer *buffer; +#ifdef USE_DNSCRYPT + buffer = rep.c->dnscrypt_buffer; +#else + buffer = rep.c->buffer; +#endif + (void)comm_point_send_udp_msg_if(rep.c, buffer, (struct sockaddr*)&rep.remote_addr, rep.remote_addrlen, &rep); } if(!rep.c || rep.c->fd == -1) /* commpoint closed */ break; } -#else - (void)fd; - (void)event; - (void)arg; - fatal_exit("recvmsg: No support for IPV6_PKTINFO; IP_PKTINFO or IP_RECVDSTADDR. " - "Please disable interface-automatic"); -#endif /* AF_INET6 && IPV6_PKTINFO && HAVE_RECVMSG */ } +#endif /* AF_INET6 && IPV6_PKTINFO && HAVE_RECVMSG */ void comm_point_udp_callback(int fd, short event, void* arg) @@ -1665,7 +1672,8 @@ ssl_handshake(struct comm_point* c) } else { unsigned long err = ERR_get_error(); if(!squelch_err_ssl_handshake(err)) { - log_crypto_err_code("ssl handshake failed", err); + log_crypto_err_io_code("ssl handshake failed", + want, err); log_addr(VERB_OPS, "ssl handshake failed", &c->repinfo.remote_addr, c->repinfo.remote_addrlen); @@ -1815,23 +1823,30 @@ ssl_handle_read(struct comm_point* c) strerror(errno)); return 0; } - log_crypto_err("could not SSL_read"); + log_crypto_err_io("could not SSL_read", + want); return 0; } c->tcp_byte_count += r; + sldns_buffer_skip(c->buffer, r); if(c->tcp_byte_count != current_read_size) return 1; c->pp2_header_state = pp2_header_init; } } if(c->pp2_header_state == pp2_header_init) { - header = pp2_read_header(c->buffer); - if(!header) { + int err; + err = pp2_read_header( + sldns_buffer_begin(c->buffer), + sldns_buffer_limit(c->buffer)); + if(err) { log_err("proxy_protocol: could not parse " - "PROXYv2 header"); + "PROXYv2 header (%s)", + pp_lookup_error(err)); return 0; } + header = (struct pp2_header*)sldns_buffer_begin(c->buffer); want_read_size = ntohs(header->len); - if(sldns_buffer_remaining(c->buffer) < + if(sldns_buffer_limit(c->buffer) < PP2_HEADER_SIZE + want_read_size) { log_err_addr("proxy_protocol: not enough " "buffer size to read PROXYv2 header", "", @@ -1876,10 +1891,12 @@ ssl_handle_read(struct comm_point* c) strerror(errno)); return 0; } - log_crypto_err("could not SSL_read"); + log_crypto_err_io("could not SSL_read", + want); return 0; } c->tcp_byte_count += r; + sldns_buffer_skip(c->buffer, r); if(c->tcp_byte_count != current_read_size) return 1; c->pp2_header_state = pp2_header_done; } @@ -1890,6 +1907,7 @@ ssl_handle_read(struct comm_point* c) c->repinfo.remote_addrlen); return 0; } + sldns_buffer_flip(c->buffer); if(!consume_pp2_header(c->buffer, &c->repinfo, 1)) { log_err_addr("proxy_protocol: could not consume " "PROXYv2 header", "", &c->repinfo.remote_addr, @@ -1934,7 +1952,7 @@ ssl_handle_read(struct comm_point* c) strerror(errno)); return 0; } - log_crypto_err("could not SSL_read"); + log_crypto_err_io("could not SSL_read", want); return 0; } c->tcp_byte_count += r; @@ -1984,7 +2002,7 @@ ssl_handle_read(struct comm_point* c) strerror(errno)); return 0; } - log_crypto_err("could not SSL_read"); + log_crypto_err_io("could not SSL_read", want); return 0; } sldns_buffer_skip(c->buffer, (ssize_t)r); @@ -2075,7 +2093,7 @@ ssl_handle_write(struct comm_point* c) strerror(errno)); return 0; } - log_crypto_err("could not SSL_write"); + log_crypto_err_io("could not SSL_write", want); return 0; } if(c->tcp_write_and_read) { @@ -2127,7 +2145,7 @@ ssl_handle_write(struct comm_point* c) strerror(errno)); return 0; } - log_crypto_err("could not SSL_write"); + log_crypto_err_io("could not SSL_write", want); return 0; } if(c->tcp_write_and_read) { @@ -2211,19 +2229,25 @@ comm_point_tcp_handle_read(int fd, struct comm_point* c, int short_ok) goto recv_error_initial; } c->tcp_byte_count += r; + sldns_buffer_skip(c->buffer, r); if(c->tcp_byte_count != current_read_size) return 1; c->pp2_header_state = pp2_header_init; } } if(c->pp2_header_state == pp2_header_init) { - header = pp2_read_header(c->buffer); - if(!header) { + int err; + err = pp2_read_header( + sldns_buffer_begin(c->buffer), + sldns_buffer_limit(c->buffer)); + if(err) { log_err("proxy_protocol: could not parse " - "PROXYv2 header"); + "PROXYv2 header (%s)", + pp_lookup_error(err)); return 0; } + header = (struct pp2_header*)sldns_buffer_begin(c->buffer); want_read_size = ntohs(header->len); - if(sldns_buffer_remaining(c->buffer) < + if(sldns_buffer_limit(c->buffer) < PP2_HEADER_SIZE + want_read_size) { log_err_addr("proxy_protocol: not enough " "buffer size to read PROXYv2 header", "", @@ -2250,6 +2274,7 @@ comm_point_tcp_handle_read(int fd, struct comm_point* c, int short_ok) goto recv_error; } c->tcp_byte_count += r; + sldns_buffer_skip(c->buffer, r); if(c->tcp_byte_count != current_read_size) return 1; c->pp2_header_state = pp2_header_done; } @@ -2260,6 +2285,7 @@ comm_point_tcp_handle_read(int fd, struct comm_point* c, int short_ok) c->repinfo.remote_addrlen); return 0; } + sldns_buffer_flip(c->buffer); if(!consume_pp2_header(c->buffer, &c->repinfo, 1)) { log_err_addr("proxy_protocol: could not consume " "PROXYv2 header", "", &c->repinfo.remote_addr, @@ -2913,7 +2939,7 @@ ssl_http_read_more(struct comm_point* c) strerror(errno)); return 0; } - log_crypto_err("could not SSL_read"); + log_crypto_err_io("could not SSL_read", want); return 0; } verbose(VERB_ALGO, "ssl http read more skip to %d + %d", @@ -3364,7 +3390,7 @@ ssize_t http2_recv_cb(nghttp2_session* ATTR_UNUSED(session), uint8_t* buf, strerror(errno)); return NGHTTP2_ERR_CALLBACK_FAILURE; } - log_crypto_err("could not SSL_read"); + log_crypto_err_io("could not SSL_read", want); return NGHTTP2_ERR_CALLBACK_FAILURE; } return r; @@ -3619,7 +3645,7 @@ ssl_http_write_more(struct comm_point* c) strerror(errno)); return 0; } - log_crypto_err("could not SSL_write"); + log_crypto_err_io("could not SSL_write", want); return 0; } sldns_buffer_skip(c->buffer, (ssize_t)r); @@ -3692,7 +3718,7 @@ ssize_t http2_send_cb(nghttp2_session* ATTR_UNUSED(session), const uint8_t* buf, strerror(errno)); return NGHTTP2_ERR_CALLBACK_FAILURE; } - log_crypto_err("could not SSL_write"); + log_crypto_err_io("could not SSL_write", want); return NGHTTP2_ERR_CALLBACK_FAILURE; } return r; @@ -3958,11 +3984,7 @@ comm_point_create_udp(struct comm_base *base, int fd, sldns_buffer* buffer, evbits = UB_EV_READ | UB_EV_PERSIST; /* ub_event stuff */ c->ev->ev = ub_event_new(base->eb->base, c->fd, evbits, -#ifdef USE_WINSOCK comm_point_udp_callback, c); -#else - comm_point_udp_ancil_callback, c); -#endif if(c->ev->ev == NULL) { log_err("could not baseset udp event"); comm_point_delete(c); @@ -3977,6 +3999,7 @@ comm_point_create_udp(struct comm_base *base, int fd, sldns_buffer* buffer, return c; } +#if defined(AF_INET6) && defined(IPV6_PKTINFO) && defined(HAVE_RECVMSG) struct comm_point* comm_point_create_udp_ancil(struct comm_base *base, int fd, sldns_buffer* buffer, int pp2_enabled, @@ -4039,6 +4062,7 @@ comm_point_create_udp_ancil(struct comm_base *base, int fd, c->event_added = 1; return c; } +#endif static struct comm_point* comm_point_create_tcp_handler(struct comm_base *base, diff --git a/util/proxy_protocol.c b/util/proxy_protocol.c index 757c5141db96..a18804974043 100644 --- a/util/proxy_protocol.c +++ b/util/proxy_protocol.c @@ -38,102 +38,162 @@ * * This file contains PROXY protocol functions. */ -#include "config.h" -#include "util/log.h" #include "util/proxy_protocol.h" -int -pp2_write_to_buf(struct sldns_buffer* buf, struct sockaddr_storage* src, +/** + * Internal struct initialized with function pointers for writing uint16 and + * uint32. + */ +struct proxy_protocol_data { + void (*write_uint16)(void* buf, uint16_t data); + void (*write_uint32)(void* buf, uint32_t data); +}; +struct proxy_protocol_data pp_data; + +/** + * Internal lookup table; could be further generic like sldns_lookup_table + * for all the future generic stuff. + */ +struct proxy_protocol_lookup_table { + int id; + const char *text; +}; + +/** + * Internal parsing error text; could be exposed with pp_lookup_error. + */ +static struct proxy_protocol_lookup_table pp_parse_errors_data[] = { + { PP_PARSE_NOERROR, "no parse error" }, + { PP_PARSE_SIZE, "not enough space for header" }, + { PP_PARSE_WRONG_HEADERv2, "could not match PROXYv2 header" }, + { PP_PARSE_UNKNOWN_CMD, "unknown command" }, + { PP_PARSE_UNKNOWN_FAM_PROT, "unknown family and protocol" }, +}; + +void +pp_init(void (*write_uint16)(void* buf, uint16_t data), + void (*write_uint32)(void* buf, uint32_t data)) { + pp_data.write_uint16 = write_uint16; + pp_data.write_uint32 = write_uint32; +} + +const char* +pp_lookup_error(enum pp_parse_errors error) { + return pp_parse_errors_data[error].text; +} + +size_t +pp2_write_to_buf(uint8_t* buf, size_t buflen, +#ifdef INET6 + struct sockaddr_storage* src, +#else + struct sockaddr_in* src, +#endif int stream) { int af; + size_t expected_size; if(!src) return 0; af = (int)((struct sockaddr_in*)src)->sin_family; - if(sldns_buffer_remaining(buf) < - PP2_HEADER_SIZE + (af==AF_INET?12:36)) { + expected_size = PP2_HEADER_SIZE + (af==AF_INET?12:36); + if(buflen < expected_size) { return 0; } /* sig */ - sldns_buffer_write(buf, PP2_SIG, PP2_SIG_LEN); + memcpy(buf, PP2_SIG, PP2_SIG_LEN); + buf += PP2_SIG_LEN; /* version and command */ - sldns_buffer_write_u8(buf, (PP2_VERSION << 4) | PP2_CMD_PROXY); - if(af==AF_INET) { + *buf = (PP2_VERSION << 4) | PP2_CMD_PROXY; + buf++; + switch(af) { + case AF_INET: /* family and protocol */ - sldns_buffer_write_u8(buf, - (PP2_AF_INET<<4) | - (stream?PP2_PROT_STREAM:PP2_PROT_DGRAM)); + *buf = (PP2_AF_INET<<4) | + (stream?PP2_PROT_STREAM:PP2_PROT_DGRAM); + buf++; /* length */ - sldns_buffer_write_u16(buf, 12); + (*pp_data.write_uint16)(buf, 12); + buf += 2; /* src addr */ - sldns_buffer_write(buf, + memcpy(buf, &((struct sockaddr_in*)src)->sin_addr.s_addr, 4); + buf += 4; /* dst addr */ - sldns_buffer_write_u32(buf, 0); + (*pp_data.write_uint32)(buf, 0); + buf += 4; /* src port */ - sldns_buffer_write(buf, + memcpy(buf, &((struct sockaddr_in*)src)->sin_port, 2); - /* dst port */ - sldns_buffer_write_u16(buf, 0); - } else { - /* family and protocol */ - sldns_buffer_write_u8(buf, - (PP2_AF_INET6<<4) | - (stream?PP2_PROT_STREAM:PP2_PROT_DGRAM)); - /* length */ - sldns_buffer_write_u16(buf, 36); - /* src addr */ - sldns_buffer_write(buf, - &((struct sockaddr_in6*)src)->sin6_addr, 16); + buf += 2; /* dst addr */ - sldns_buffer_set_at(buf, - sldns_buffer_position(buf), 0, 16); - sldns_buffer_skip(buf, 16); - /* src port */ - sldns_buffer_write(buf, - &((struct sockaddr_in6*)src)->sin6_port, 2); /* dst port */ - sldns_buffer_write_u16(buf, 0); + (*pp_data.write_uint16)(buf, 12); + break; +#ifdef INET6 + case AF_INET6: + /* family and protocol */ + *buf = (PP2_AF_INET6<<4) | + (stream?PP2_PROT_STREAM:PP2_PROT_DGRAM); + buf++; + /* length */ + (*pp_data.write_uint16)(buf, 36); + buf += 2; + /* src addr */ + memcpy(buf, + &((struct sockaddr_in6*)src)->sin6_addr, 16); + buf += 16; + /* dst addr */ + memset(buf, 0, 16); + buf += 16; + /* src port */ + memcpy(buf, &((struct sockaddr_in6*)src)->sin6_port, 2); + buf += 2; + /* dst port */ + (*pp_data.write_uint16)(buf, 0); + break; +#endif /* INET6 */ + case AF_UNIX: + /* fallthrough */ + default: + return 0; } - return 1; + return expected_size; } -struct pp2_header* -pp2_read_header(struct sldns_buffer* buf) +int +pp2_read_header(uint8_t* buf, size_t buflen) { size_t size; - struct pp2_header* header = (struct pp2_header*)sldns_buffer_begin(buf); + struct pp2_header* header = (struct pp2_header*)buf; /* Try to fail all the unsupported cases first. */ - if(sldns_buffer_remaining(buf) < PP2_HEADER_SIZE) { - log_err("proxy_protocol: not enough space for header"); - return NULL; + if(buflen < PP2_HEADER_SIZE) { + return PP_PARSE_SIZE; } /* Check for PROXYv2 header */ if(memcmp(header, PP2_SIG, PP2_SIG_LEN) != 0 || ((header->ver_cmd & 0xF0)>>4) != PP2_VERSION) { - log_err("proxy_protocol: could not match PROXYv2 header"); - return NULL; + return PP_PARSE_WRONG_HEADERv2; } /* Check the length */ size = PP2_HEADER_SIZE + ntohs(header->len); - if(sldns_buffer_remaining(buf) < size) { - log_err("proxy_protocol: not enough space for header"); - return NULL; + if(buflen < size) { + return PP_PARSE_SIZE; } /* Check for supported commands */ if((header->ver_cmd & 0xF) != PP2_CMD_LOCAL && (header->ver_cmd & 0xF) != PP2_CMD_PROXY) { - log_err("proxy_protocol: unsupported command"); - return NULL; + return PP_PARSE_UNKNOWN_CMD; } /* Check for supported family and protocol */ - if(header->fam_prot != 0x00 /* AF_UNSPEC|UNSPEC */ && - header->fam_prot != 0x11 /* AF_INET|STREAM */ && - header->fam_prot != 0x12 /* AF_INET|DGRAM */ && - header->fam_prot != 0x21 /* AF_INET6|STREAM */ && - header->fam_prot != 0x22 /* AF_INET6|DGRAM */) { - log_err("proxy_protocol: unsupported family and protocol"); - return NULL; + 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) { + return PP_PARSE_UNKNOWN_FAM_PROT; } /* We have a correct header */ - return header; + return PP_PARSE_NOERROR; } diff --git a/util/proxy_protocol.h b/util/proxy_protocol.h index 13cab9d7438e..ca81065bf49a 100644 --- a/util/proxy_protocol.h +++ b/util/proxy_protocol.h @@ -42,7 +42,7 @@ #ifndef PROXY_PROTOCOL_H #define PROXY_PROTOCOL_H -#include "sldns/sbuffer.h" +#include "config.h" /** PROXYv2 minimum header size */ #define PP2_HEADER_SIZE 16 @@ -51,11 +51,11 @@ #define PP2_SIG "\x0D\x0A\x0D\x0A\x00\x0D\x0A\x51\x55\x49\x54\x0A" #define PP2_SIG_LEN 12 -/** PROXYv2 version */ +/** PROXYv2 version (protocol value) */ #define PP2_VERSION 0x2 /** - * PROXYv2 command. + * PROXYv2 command (protocol value). */ enum pp2_command { PP2_CMD_LOCAL = 0x0, @@ -63,7 +63,7 @@ enum pp2_command { }; /** - * PROXYv2 address family. + * PROXYv2 address family (protocol value). */ enum pp2_af { PP2_AF_UNSPEC = 0x0, @@ -73,7 +73,7 @@ enum pp2_af { }; /** - * PROXYv2 protocol. + * PROXYv2 protocol (protocol value). */ enum pp2_protocol { PP2_PROT_UNSPEC = 0x0, @@ -81,6 +81,19 @@ enum pp2_protocol { PP2_PROT_DGRAM = 0x2 }; +/** + * Expected combinations of address family and protocol values used in checks. + */ +enum pp2_af_protocol_combination { + PP2_UNSPEC_UNSPEC = (PP2_AF_UNSPEC<<4)|PP2_PROT_UNSPEC, + PP2_INET_STREAM = (PP2_AF_INET<<4)|PP2_PROT_STREAM, + PP2_INET_DGRAM = (PP2_AF_INET<<4)|PP2_PROT_DGRAM, + PP2_INET6_STREAM = (PP2_AF_INET6<<4)|PP2_PROT_STREAM, + PP2_INET6_DGRAM = (PP2_AF_INET6<<4)|PP2_PROT_DGRAM, + PP2_UNIX_STREAM = (PP2_AF_UNIX<<4)|PP2_PROT_STREAM, + PP2_UNIX_DGRAM = (PP2_AF_UNIX<<4)|PP2_PROT_DGRAM +}; + /** * PROXYv2 header. */ @@ -109,23 +122,56 @@ struct pp2_header { } addr; }; +/** + * PROXY parse errors. + */ +enum pp_parse_errors { + PP_PARSE_NOERROR = 0, + PP_PARSE_SIZE, + PP_PARSE_WRONG_HEADERv2, + PP_PARSE_UNKNOWN_CMD, + PP_PARSE_UNKNOWN_FAM_PROT, +}; + +/** + * Initialize the internal proxy structure. + * @param write_uint16: pointer to a function that can write uint16. + * @param write_uint32: pointer to a function that can write uint32. + */ +void pp_init(void (*write_uint16)(void* buf, uint16_t data), + void (*write_uint32)(void* buf, uint32_t data)); + +/** + * Lookup the parsing error description. + * @param error: parsing error from pp2_read_header. + * @return the description. + */ +const char* pp_lookup_error(enum pp_parse_errors error); + /** * Write a PROXYv2 header at the current position of the buffer. - * @param buf: the buffer to write to. + * @param buf: pointer to the buffer to write data to. + * @param buflen: available size on the buffer. * @param src: the source address. * @param stream: if the protocol is stream or datagram. * @return 1 on success, 0 on failure. */ -int pp2_write_to_buf(struct sldns_buffer* buf, struct sockaddr_storage* src, +size_t pp2_write_to_buf(uint8_t* buf, size_t buflen, +#ifdef INET6 + struct sockaddr_storage* src, +#else + struct sockaddr_in* src, +#endif int stream); /** * Read a PROXYv2 header from the current position of the buffer. * It does initial validation and returns a pointer to the buffer position on * success. - * @param buf: the buffer to read from. - * @return the pointer to the buffer position on success, NULL on error. + * @param buf: pointer to the buffer data to read from. + * @param buflen: available size on the buffer. + * @return parsing error, 0 on success. */ -struct pp2_header* pp2_read_header(struct sldns_buffer* buf); +int pp2_read_header(uint8_t* buf, size_t buflen); #endif /* PROXY_PROTOCOL_H */ diff --git a/util/rfc_1982.c b/util/rfc_1982.c index c28deded606b..cf64e21d08fb 100644 --- a/util/rfc_1982.c +++ b/util/rfc_1982.c @@ -39,6 +39,7 @@ * This file contains functions for RFC 1982 serial number arithmetic. */ #include "config.h" +#include "util/rfc_1982.h" int compare_1982(uint32_t a, uint32_t b) diff --git a/util/siphash.c b/util/siphash.c index 0e1b597d0523..32797dff60e5 100644 --- a/util/siphash.c +++ b/util/siphash.c @@ -26,6 +26,11 @@ */ #include "config.h" +/** EDIT + * prevent warning from -Wmissing-prototypes + */ +#include "util/siphash.h" + /* default: SipHash-2-4 */ #define cROUNDS 2 #define dROUNDS 4 diff --git a/validator/val_anchor.c b/validator/val_anchor.c index b1a54e1f0195..8466a8923eb1 100644 --- a/validator/val_anchor.c +++ b/validator/val_anchor.c @@ -1322,3 +1322,24 @@ anchor_has_keytag(struct val_anchors* anchors, uint8_t* name, int namelabs, free(taglist); return 0; } + +struct trust_anchor* +anchors_find_any_noninsecure(struct val_anchors* anchors) +{ + struct trust_anchor* ta, *next; + lock_basic_lock(&anchors->lock); + ta=(struct trust_anchor*)rbtree_first(anchors->tree); + while((rbnode_type*)ta != RBTREE_NULL) { + next = (struct trust_anchor*)rbtree_next(&ta->node); + lock_basic_lock(&ta->lock); + if(ta->numDS != 0 || ta->numDNSKEY != 0) { + /* not an insecurepoint */ + lock_basic_unlock(&anchors->lock); + return ta; + } + lock_basic_unlock(&ta->lock); + ta = next; + } + lock_basic_unlock(&anchors->lock); + return NULL; +} diff --git a/validator/val_anchor.h b/validator/val_anchor.h index 1597a7d62fbe..02e7e17b5210 100644 --- a/validator/val_anchor.h +++ b/validator/val_anchor.h @@ -240,4 +240,12 @@ size_t anchor_list_keytags(struct trust_anchor* ta, uint16_t* list, size_t num); int anchor_has_keytag(struct val_anchors* anchors, uint8_t* name, int namelabs, size_t namelen, uint16_t dclass, uint16_t keytag); +/** + * Find an anchor that is not an insecure point, if any, or there are no + * DNSSEC verification anchors if none. + * @param anchors: anchor storage + * @return trust anchor or NULL. It is locked. + */ +struct trust_anchor* anchors_find_any_noninsecure(struct val_anchors* anchors); + #endif /* VALIDATOR_VAL_ANCHOR_H */ diff --git a/validator/validator.c b/validator/validator.c index 9de9d54db27c..6cd15cfc1c7c 100644 --- a/validator/validator.c +++ b/validator/validator.c @@ -200,6 +200,17 @@ val_init(struct module_env* env, int id) log_err("validator: could not apply configuration settings."); return 0; } + if(env->cfg->disable_edns_do) { + struct trust_anchor* anchor = anchors_find_any_noninsecure( + env->anchors); + if(anchor) { + char b[LDNS_MAX_DOMAINLEN+2]; + dname_str(anchor->name, b); + log_warn("validator: disable-edns-do is enabled, but there is a trust anchor for '%s'. Since DNSSEC could not work, the disable-edns-do setting is turned off. Continuing without it.", b); + lock_basic_unlock(&anchor->lock); + env->cfg->disable_edns_do = 0; + } + } return 1; }