From 9274d2630edb3897002142de374cf40d5eab2b59 Mon Sep 17 00:00:00 2001 From: Ralph Dolmans Date: Fri, 5 Apr 2019 17:38:43 +0200 Subject: [PATCH 01/56] Initial RPZ commit --- services/rpz.c | 442 +++++++++++++++++++++++++++++++++++++++++++++++++ services/rpz.h | 163 ++++++++++++++++++ 2 files changed, 605 insertions(+) create mode 100644 services/rpz.c create mode 100644 services/rpz.h diff --git a/services/rpz.c b/services/rpz.c new file mode 100644 index 000000000..4f159cb34 --- /dev/null +++ b/services/rpz.c @@ -0,0 +1,442 @@ +/* + * services/rpz.c - rpz service + * + * Copyright (c) 2019, NLnet Labs. All rights reserved. + * + * This software is open source. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * Neither the name of the NLNET LABS nor the names of its contributors may + * be used to endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * \file + * + * This file contains functions to enable RPZ service. + */ + +#include "config.h" +#include "services/rpz.h" +#include "util/config_file.h" +#include "sldns/wire2str.h" +#include "util/data/dname.h" +#include "util/net_help.h" +#include "util/log.h" +#include "util/data/dname.h" +#include "util/locks.h" + +/** string for RPZ action enum */ +static const char* +rpz_action_to_string(enum rpz_action a) +{ + switch(a) { + case RPZ_NXDOMAIN_ACTION: return "NXDOMAIN ACTION"; + case RPZ_NODATA_ACTION: return "NODATA ACTION"; + case RPZ_PASSTHRU_ACTION: return "PASSTHRU ACTION"; + case RPZ_DROP_ACTION: return "DROP ACTION"; + case RPZ_TCP_ONLY_ACTION: return "TCP ONLY ACTION"; + case RPZ_INVALID_ACTION: return "INVALID ACTION"; + case RPZ_LOCAL_DATA_ACTION: return "LOCAL DATA ACTION"; + } + return "UNKNOWN RPZ ACTION"; +} + +/** string for RPZ trigger enum */ +static const char* +rpz_trigger_to_string(enum rpz_trigger r) +{ + switch(r) { + case RPZ_QNAME_TRIGGER: return "QNAME TRIGGER"; + case RPZ_CLIENT_IP_TRIGGER: return "CLIENT IP TRIGGER"; + case RPZ_RESPONSE_IP_TRIGGER: return "RESPONSE IP TRIGGER"; + case RPZ_NSDNAME_TRIGGER: return "NSDNAME TRIGGER"; + case RPZ_NSIP_TRIGGER: return "NSIP TRIGGER"; + } + return "UNKNOWN RPZ TRIGGER"; +} + +/** + * Get the label that is just before the root label. + * @param dname: dname to work on + * @return: pointer to TLD label + */ +static uint8_t* +get_tld_label(uint8_t* dname) +{ + uint8_t* prevlab = dname; + + /* only root label */ + if(*dname == 0) + return NULL; + + while(*dname) { + dname = dname+*dname+1; + if(*dname != 0) + prevlab = dname; + } + return prevlab; +} + +/** + * Classify RPZ action for RR type/rdata + * @param rr_type: the RR type + * @param rdatawl: RDATA with 2 bytes length + * @param rdatalen: the length of rdatawl (including its 2 bytes length) + * @return: the RPZ action + */ +static enum rpz_action +rpz_rr_to_action(uint16_t rr_type, uint8_t* rdatawl, size_t rdatalen) +{ + char* endptr; + uint8_t* rdata; + int rdatalabs; + uint8_t* tldlab = NULL; + + switch(rr_type) { + case LDNS_RR_TYPE_SOA: + case LDNS_RR_TYPE_NS: + case LDNS_RR_TYPE_DNAME: + /* all DNSSEC-related RRs must be ignored */ + case LDNS_RR_TYPE_DNSKEY: + case LDNS_RR_TYPE_DS: + case LDNS_RR_TYPE_RRSIG: + case LDNS_RR_TYPE_NSEC: + case LDNS_RR_TYPE_NSEC3: + return RPZ_INVALID_ACTION; + case LDNS_RR_TYPE_CNAME: + break; + default: + return RPZ_LOCAL_DATA_ACTION; + } + + /* use CNAME target to determine RPZ action */ + log_assert(rr_type == LDNS_RR_TYPE_CNAME); + if(rdatalen < 3) + return RPZ_INVALID_ACTION; + + rdata = rdatawl + 2; /* 2 bytes of rdata length */ + if(dname_valid(rdata, rdatalen-2) != rdatalen-2) + return RPZ_INVALID_ACTION; + + rdatalabs = dname_count_labels(rdata); + if(rdatalabs == 1) + return RPZ_NXDOMAIN_ACTION; + else if(rdatalabs == 2) { + if(dname_subdomain_c(rdata, (uint8_t*)&"\001*\000")) + return RPZ_NODATA_ACTION; + else if(dname_subdomain_c(rdata, + (uint8_t*)&"\014rpz-passthru\000")) + return RPZ_PASSTHRU_ACTION; + else if(dname_subdomain_c(rdata, (uint8_t*)&"\010rpz-drop\000")) + return RPZ_DROP_ACTION; + else if(dname_subdomain_c(rdata, + (uint8_t*)&"\014rpz-tcp-only\000")) + return RPZ_TCP_ONLY_ACTION; + } + + /* all other TLDs starting with "rpz-" are invalid */ + tldlab = get_tld_label(rdata); + if(tldlab && dname_lab_startswith(tldlab, "rpz-", &endptr)) + return RPZ_INVALID_ACTION; + + /* no special label found */ + return RPZ_LOCAL_DATA_ACTION; +} + +/** Get RPZ trigger for dname */ +static enum rpz_trigger +rpz_dname_to_trigger(uint8_t* dname) +{ + uint8_t* tldlab; + char* endptr; + tldlab = get_tld_label(dname); + if(!tldlab || !dname_lab_startswith(tldlab, "rpz-", &endptr)) + return RPZ_QNAME_TRIGGER; + + if(dname_subdomain_c(tldlab, + (uint8_t*)&"\015rpz-client-ip\000")) + return RPZ_CLIENT_IP_TRIGGER; + else if(dname_subdomain_c(tldlab, (uint8_t*)&"\006rpz-ip\000")) + return RPZ_RESPONSE_IP_TRIGGER; + else if(dname_subdomain_c(tldlab, (uint8_t*)&"\013rpz-nsdname\000")) + return RPZ_NSDNAME_TRIGGER; + else if(dname_subdomain_c(tldlab, (uint8_t*)&"\010rpz-nsip\000")) + return RPZ_NSIP_TRIGGER; + + return RPZ_QNAME_TRIGGER; +} + +void rpz_delete(struct rpz* r) +{ + if(!r) + return; + local_zones_delete(r->local_zones); + free(r); +} + +int +rpz_clear_lz(struct rpz* r) +{ + /* must hold write lock on auth_zone */ + local_zones_delete(r->local_zones); + if(!(r->local_zones = local_zones_create())){ + return 0; + } + return 1; +} + +struct rpz* +rpz_create(struct config_auth* p) +{ + struct rpz* r = calloc(1, sizeof(*r)); + if(!r) + return 0; + + if(!(r->local_zones = local_zones_create())){ + free(r); + return 0; + } + r->taglist = memdup(p->rpz_taglist, p->rpz_taglistlen); + r->taglistlen = p->rpz_taglistlen; + return r; +} + +/** Remove RPZ zone name from dname */ +static size_t +strip_dname_origin(uint8_t* dname, size_t dnamelen, size_t originlen, + uint8_t* newdname) +{ + size_t newdnamelen; + if(dnamelen < originlen) + return 0; + newdnamelen = dnamelen - originlen; + memmove(newdname, dname, newdnamelen); + return newdnamelen + 1; /* + 1 for root label */ +} + +/** Insert RR into RPZ's local-zone */ +static int +rpz_insert_qname_trigger(struct rpz* r, uint8_t* dname, size_t dnamelen, + enum rpz_action a, uint16_t rrtype, uint16_t rrclass, uint32_t ttl, + uint8_t* rdata, size_t rdata_len, uint8_t* rr, size_t rr_len) +{ + struct local_zone* z; + enum localzone_type tp = local_zone_always_transparent; + int dnamelabs = dname_count_labels(dname); + char* rrstr; + + if(a == RPZ_NXDOMAIN_ACTION) + tp = local_zone_always_nxdomain; + else if(a == RPZ_NODATA_ACTION) + tp = local_zone_always_nodata; + else if(a == RPZ_DROP_ACTION) + tp = local_zone_deny; + else if(a == RPZ_PASSTHRU_ACTION) + tp = local_zone_always_transparent; + else if(a == RPZ_LOCAL_DATA_ACTION) + tp = local_zone_redirect; + else { + verbose(VERB_ALGO, "RPZ: skipping unusupported action: %s", + rpz_action_to_string(a)); + return 0; + } + + lock_rw_wrlock(&r->local_zones->lock); + /* exact match */ + z = local_zones_find(r->local_zones, dname, dnamelen, dnamelabs, + LDNS_RR_CLASS_IN); + if(z && a != RPZ_LOCAL_DATA_ACTION) { + rrstr = sldns_wire2str_rr(rr, rr_len); + verbose(VERB_ALGO, "RPZ: skipping duplicate record: '%s'", + rrstr); + free(rrstr); + lock_rw_unlock(&r->local_zones->lock); + return 0; + } + if(!z) { + z = local_zones_add_zone(r->local_zones, dname, dnamelen, + dnamelabs, rrclass, tp); + } + if(!z) { + log_warn("RPZ create failed"); + lock_rw_unlock(&r->local_zones->lock); + return 0; + } + if(a == RPZ_LOCAL_DATA_ACTION) { + /* insert data. TODO synth wildcard cname target on + * lookup */ + rrstr = sldns_wire2str_rr(rr, rr_len); + local_zone_enter_rr(z, dname, dnamelen, dnamelabs, + rrtype, rrclass, ttl, rdata, rdata_len, rrstr); + free(rrstr); + } + lock_rw_unlock(&r->local_zones->lock); + return 1; +} + +void +rpz_insert_rr(struct rpz* r, size_t aznamelen, uint8_t* dname, + size_t dnamelen, uint16_t rr_type, uint16_t rr_class, uint32_t rr_ttl, + uint8_t* rdatawl, size_t rdatalen, uint8_t* rr, size_t rr_len) +{ + size_t policydnamelen; + /* name is free'd in local_zone delete */ + uint8_t* policydname = calloc(1, LDNS_MAX_DOMAINLEN + 1); + enum rpz_trigger t; + enum rpz_action a; + + a = rpz_rr_to_action(rr_type, rdatawl, rdatalen); + if(!(policydnamelen = strip_dname_origin(dname, dnamelen, aznamelen, + policydname))) { + free(policydname); + return; + } + t = rpz_dname_to_trigger(policydname); + if(t == RPZ_QNAME_TRIGGER) { + rpz_insert_qname_trigger(r, policydname, policydnamelen, + a, rr_type, rr_class, rr_ttl, rdatawl, rdatalen, rr, + rr_len); + } + else { + free(policydname); + verbose(VERB_ALGO, "RPZ: skipping unusupported trigger: %s", + rpz_trigger_to_string(t)); + } +} + +void +rpz_remove_rr(struct rpz* r, size_t aznamelen, uint8_t* dname, + size_t dnamelen, uint16_t rr_type, uint16_t rr_class, uint8_t* rdatawl, + size_t rdatalen, uint8_t* rr, size_t rr_len) +{ + /* TODO: remove RR, used for IXFR */ +} + +struct local_zone* +rpz_find_zone(struct rpz* r, struct query_info* qinfo) +{ + uint8_t* ce; + size_t ce_len, ce_labs; + uint8_t wc[LDNS_MAX_DOMAINLEN]; + int exact; + struct local_zone* z = NULL; + lock_rw_rdlock(&r->local_zones->lock); + z = local_zones_find_le(r->local_zones, qinfo->qname, + qinfo->qname_len, dname_count_labels(qinfo->qname), + LDNS_RR_CLASS_IN, &exact); + if(!z) { + lock_rw_unlock(&r->local_zones->lock); + return NULL; + } + lock_rw_unlock(&r->local_zones->lock); + + if(exact) + return z; + + /* No exact match found, lookup wildcard. closest encloser must + * be the shared parent between the qname and the best local + * zone match, append '*' to that and do another lookup. */ + + ce = dname_get_shared_topdomain(z->name, qinfo->qname); + if(!ce /* should not happen */ || !*ce /* root */) { + lock_rw_unlock(&z->lock); + return NULL; + } + ce_labs = dname_count_size_labels(ce, &ce_len); + if(ce_len+2 > sizeof(wc)) { + lock_rw_unlock(&z->lock); + return NULL; + } + wc[0] = 1; /* length of wildcard label */ + wc[1] = (uint8_t)'*'; /* wildcard label */ + memmove(wc+2, ce, ce_len); + lock_rw_unlock(&z->lock); + + lock_rw_rdlock(&r->local_zones->lock); + z = local_zones_find_le(r->local_zones, wc, + ce_len+2, ce_labs+1, qinfo->qclass, &exact); + if(!z || !exact) { + lock_rw_unlock(&r->local_zones->lock); + return NULL; + } + lock_rw_rdlock(&z->lock); + lock_rw_unlock(&r->local_zones->lock); + return z; +} + +/** print log information for an applied RPZ policy. Based on local-zone's + * lz_inform_print(). + */ +static void +rpz_inform_print(struct local_zone* z, struct query_info* qinfo, + struct comm_reply* repinfo) +{ + char ip[128], txt[512]; + char zname[LDNS_MAX_DOMAINLEN+1]; + uint16_t port = ntohs(((struct sockaddr_in*)&repinfo->addr)->sin_port); + dname_str(z->name, zname); + addr_to_str(&repinfo->addr, repinfo->addrlen, ip, sizeof(ip)); + snprintf(txt, sizeof(txt), "RPZ applied %s %s %s@%u", zname, + local_zone_type2str(z->type), ip, (unsigned)port); + log_nametypeclass(0, txt, qinfo->qname, qinfo->qtype, qinfo->qclass); +} + +int +rpz_apply_qname_trigger(struct auth_zones* az, struct module_env* env, + struct query_info* qinfo, struct edns_data* edns, sldns_buffer* buf, + struct regional* temp, struct comm_reply* repinfo, + uint8_t* taglist, size_t taglen) +{ + struct rpz* r; + int ret; + struct local_zone* z = NULL; + struct local_data* ld = NULL; + lock_rw_rdlock(&az->rpz_lock); + for(r = az->rpz_first; r && !z; r = r->next) { + if(!r->taglist || taglist_intersect(r->taglist, + r->taglistlen, taglist, taglen)) + z = rpz_find_zone(r, qinfo); + } + lock_rw_unlock(&az->rpz_lock); + if(!z) + return 0; + + if(z->type == local_zone_redirect && local_data_answer(z, env, qinfo, + edns, repinfo, buf, temp, dname_count_labels(qinfo->qname), + &ld, z->type, -1, NULL, 0, NULL, 0)) { + rpz_inform_print(z, qinfo, repinfo); + return !qinfo->local_alias; + } + + ret = local_zones_zone_answer(z, env, qinfo, edns, repinfo, buf, temp, + 0 /* no local data used */, z->type); + lock_rw_unlock(&z->lock); + if(ret) + rpz_inform_print(z, qinfo, repinfo); + + return ret; +} diff --git a/services/rpz.h b/services/rpz.h new file mode 100644 index 000000000..a63189329 --- /dev/null +++ b/services/rpz.h @@ -0,0 +1,163 @@ +/* + * services/rpz.h - rpz service + * + * Copyright (c) 2019, NLnet Labs. All rights reserved. + * + * This software is open source. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * Neither the name of the NLNET LABS nor the names of its contributors may + * be used to endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * \file + * + * This file contains functions to enable RPZ service. + */ + +#ifndef SERVICES_RPZ_H +#define SERVICES_RPZ_H + +#include "services/localzone.h" +#include "util/locks.h" +#include "util/config_file.h" +#include "services/authzone.h" +#include "sldns/sbuffer.h" + +/** + * RPZ containing policies. Pointed to from corresponding authz-one. Part of a + * linked list to keep configuration order. Iterating or changing the linked + * list requires the rpz_lock from struct auth_zones. + */ +struct rpz { + struct local_zones* local_zones; + uint8_t* taglist; + size_t taglistlen; + struct rpz* next; + struct rpz* prev; + /* tags */ +}; + +/** + * RPZ triggers, only the QNAME trigger is currently supported in Unbound. + */ +enum rpz_trigger { + RPZ_QNAME_TRIGGER = 0, + /* unsupported triggers */ + RPZ_CLIENT_IP_TRIGGER, /* rpz-client-ip */ + RPZ_RESPONSE_IP_TRIGGER, /* rpz-ip */ + RPZ_NSDNAME_TRIGGER, /* rpz-nsdname */ + RPZ_NSIP_TRIGGER, /* rpz-nsip */ +}; + +/** + * RPZ actions. + */ +enum rpz_action { + RPZ_NXDOMAIN_ACTION = 0,/* CNAME . */ + RPZ_NODATA_ACTION, /* CNAME *. */ + RPZ_PASSTHRU_ACTION, /* CNAME rpz-passthru. */ + RPZ_DROP_ACTION, /* CNAME rpz-drop. */ + RPZ_TCP_ONLY_ACTION, /* CNAME rpz-tcp-only. */ + RPZ_INVALID_ACTION, /* CNAME with (child of) TLD starting with + "rpz-" in target, SOA, NS, DNAME and + DNSSEC-related records. */ + RPZ_LOCAL_DATA_ACTION, /* anything else */ +}; + +/** + * Create policy from RR and add to this RPZ. + * @param r: the rpz to add the policy to. + * @param aznamelen: the length of the auth-zone name + * @param dname: dname of the RR + * @param dnamelen: length of the dname + * @param rr_type: RR type of the RR + * @param rr_class: RR class of the RR + * @param rr_ttl: TTL of the RR + * @param rdatawl: rdata of the RR, prepended with the rdata size + * @param rdatalen: length if the RR, including the prepended rdata size + * @param rr: the complete RR, for logging purposes + * @param rr_len: the length of the complete RR + */ +void rpz_insert_rr(struct rpz* r, size_t aznamelen, uint8_t* dname, + size_t dnamelen, uint16_t rr_type, uint16_t rr_class, uint32_t rr_ttl, + uint8_t* rdatawl, size_t rdatalen, uint8_t* rr, size_t rr_len); + +/** + * Delete policy matching RR, used for IXFR. + * @param r: the rpz to add the policy to. + * @param aznamelen: the length of the auth-zone name + * @param dname: dname of the RR + * @param dnamelen: length of the dname + * @param rr_type: RR type of the RR + * @param rr_class: RR class of the RR + * @param rdatawl: rdata of the RR, prepended with the rdata size + * @param rdatalen: length if the RR, including the prepended rdata size + * @param rr: the complete RR, for logging purposes + * @param rr_len: the length of the complete RR + */ +void rpz_remove_rr(struct rpz* r, size_t aznamelen, uint8_t* dname, + size_t dnamelen, uint16_t rr_type, uint16_t rr_class, uint8_t* rdatawl, + size_t rdatalen, uint8_t* rr, size_t rr_len); + +/** + * Walk over the RPZ zones to find and apply a QNAME trigger policy. + * @param az: auth_zones struct, containing first RPZ item and RPZ lock + * @param env: module env + * @param qinfo: qinfo containing qname and qtype + * @param edns: edns data + * @param buf: buffer to write answer to + * @param temp: scratchpad + * @param repinfo: reply info + * @param taglist: taglist to lookup. + * @param taglen: lenth of taglist. + * @return: 1 if client answer is ready, 0 to continue resolving + */ +int rpz_apply_qname_trigger(struct auth_zones* az, struct module_env* env, + struct query_info* qinfo, struct edns_data* edns, sldns_buffer* buf, + struct regional* temp, struct comm_reply* repinfo, + uint8_t* taglist, size_t taglen); + +/** + * Delete RPZ + * @param r: RPZ struct to delete + */ +void rpz_delete(struct rpz* r); + +/** + * Clear local-zones in RPZ, used after reloading file or AXFR/HTTP transfer. + * @param r: RPZ to use + */ +int rpz_clear_lz(struct rpz* r); + +/** + * Create RPZ. RPZ must be added to linked list after creation. + * @return: the newly created RPZ + */ +struct rpz* rpz_create(struct config_auth* p); + +#endif /* SERVICES_RPZ_H */ From c66e47c37270687029a5d301097aad070daccdb2 Mon Sep 17 00:00:00 2001 From: Ralph Dolmans Date: Fri, 5 Apr 2019 17:39:10 +0200 Subject: [PATCH 02/56] Initial RPZ commit - now with all files --- Makefile.in | 373 ++-- daemon/worker.c | 12 + services/authzone.c | 53 +- services/authzone.h | 8 + services/localzone.c | 115 +- services/localzone.h | 52 + sldns/str2wire.c | 2 +- util/config_file.c | 2 + util/config_file.h | 7 + util/configlexer.c | 4719 +++++++++++++++++++++--------------------- util/configlexer.lex | 2 + util/configparser.c | 2745 ++++++++++++------------ util/configparser.h | 14 +- util/configparser.y | 44 +- util/data/dname.c | 2 +- 15 files changed, 4188 insertions(+), 3962 deletions(-) diff --git a/Makefile.in b/Makefile.in index 03a63476a..e2f5b4dd6 100644 --- a/Makefile.in +++ b/Makefile.in @@ -110,6 +110,7 @@ iterator/iter_delegpt.c iterator/iter_donotq.c iterator/iter_fwd.c \ iterator/iter_hints.c iterator/iter_priv.c iterator/iter_resptype.c \ iterator/iter_scrub.c iterator/iter_utils.c services/listen_dnsport.c \ services/localzone.c services/mesh.c services/modstack.c services/view.c \ +services/rpz.c \ services/outbound_list.c services/outside_network.c util/alloc.c \ util/config_file.c util/configlexer.c util/configparser.c \ util/shm_side/shm_main.c services/authzone.c \ @@ -135,7 +136,7 @@ outbound_list.lo alloc.lo config_file.lo configlexer.lo configparser.lo \ fptr_wlist.lo edns.lo locks.lo log.lo mini_event.lo module.lo net_help.lo \ random.lo rbtree.lo regional.lo rtt.lo dnstree.lo lookup3.lo lruhash.lo \ slabhash.lo tcp_conn_limit.lo timehist.lo tube.lo winsock_event.lo \ -autotrust.lo val_anchor.lo \ +autotrust.lo val_anchor.lo rpz.lo \ validator.lo val_kcache.lo val_kentry.lo val_neg.lo val_nsec3.lo val_nsec.lo \ val_secalgo.lo val_sigcrypt.lo val_utils.lo dns64.lo cachedb.lo redis.lo authzone.lo \ $(SUBNET_OBJ) $(PYTHONMOD_OBJ) $(CHECKLOCK_OBJ) $(DNSTAP_OBJ) $(DNSCRYPT_OBJ) \ @@ -641,11 +642,12 @@ dns.lo dns.o: $(srcdir)/services/cache/dns.c config.h $(srcdir)/iterator/iter_de $(srcdir)/util/data/dname.h $(srcdir)/util/module.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/rrdef.h \ $(srcdir)/util/net_help.h $(srcdir)/util/regional.h $(srcdir)/util/config_file.h $(srcdir)/sldns/sbuffer.h infra.lo infra.o: $(srcdir)/services/cache/infra.c config.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/str2wire.h \ - $(srcdir)/services/cache/infra.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ - $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/util/rtt.h $(srcdir)/util/netevent.h \ - $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/util/data/msgreply.h \ - $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/slabhash.h $(srcdir)/util/storage/lookup3.h \ - $(srcdir)/util/data/dname.h $(srcdir)/util/net_help.h $(srcdir)/util/config_file.h $(srcdir)/iterator/iterator.h \ + $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/wire2str.h $(srcdir)/services/cache/infra.h \ + $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/storage/dnstree.h \ + $(srcdir)/util/rbtree.h $(srcdir)/util/rtt.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ + $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \ + $(srcdir)/util/storage/slabhash.h $(srcdir)/util/storage/lookup3.h $(srcdir)/util/data/dname.h \ + $(srcdir)/util/net_help.h $(srcdir)/util/config_file.h $(srcdir)/iterator/iterator.h \ $(srcdir)/services/outbound_list.h $(srcdir)/util/module.h $(srcdir)/util/data/msgparse.h \ $(srcdir)/sldns/pkthdr.h rrset.lo rrset.o: $(srcdir)/services/cache/rrset.c config.h $(srcdir)/services/cache/rrset.h \ @@ -689,10 +691,10 @@ iterator.lo iterator.o: $(srcdir)/iterator/iterator.c config.h $(srcdir)/iterato $(srcdir)/validator/val_neg.h $(srcdir)/services/cache/dns.h $(srcdir)/services/cache/infra.h \ $(srcdir)/util/rtt.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ $(srcdir)/services/authzone.h $(srcdir)/services/mesh.h \ - $(srcdir)/services/modstack.h $(srcdir)/util/net_help.h $(srcdir)/util/regional.h $(srcdir)/util/data/dname.h \ - $(srcdir)/util/data/msgencode.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h $(srcdir)/util/config_file.h \ - $(srcdir)/util/random.h $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/parseutil.h \ - $(srcdir)/sldns/sbuffer.h + $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h $(srcdir)/services/view.h \ + $(srcdir)/sldns/sbuffer.h $(srcdir)/util/config_file.h $(srcdir)/util/net_help.h $(srcdir)/util/regional.h \ + $(srcdir)/util/data/dname.h $(srcdir)/util/data/msgencode.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h \ + $(srcdir)/util/random.h $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/parseutil.h iter_delegpt.lo iter_delegpt.o: $(srcdir)/iterator/iter_delegpt.c config.h $(srcdir)/iterator/iter_delegpt.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/regional.h \ @@ -752,7 +754,7 @@ localzone.lo localzone.o: $(srcdir)/services/localzone.c config.h $(srcdir)/serv $(srcdir)/util/rbtree.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/storage/dnstree.h \ $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/data/msgreply.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ - $(srcdir)/sldns/rrdef.h $(srcdir)/services/view.h $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/sbuffer.h \ + $(srcdir)/sldns/rrdef.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/str2wire.h \ $(srcdir)/util/regional.h $(srcdir)/util/config_file.h $(srcdir)/util/data/dname.h \ $(srcdir)/util/data/msgencode.h $(srcdir)/util/net_help.h $(srcdir)/util/netevent.h \ $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/util/as112.h @@ -775,12 +777,20 @@ modstack.lo modstack.o: $(srcdir)/services/modstack.c config.h $(srcdir)/service $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h $(srcdir)/dns64/dns64.h $(srcdir)/iterator/iterator.h \ $(srcdir)/services/outbound_list.h $(srcdir)/validator/validator.h $(srcdir)/validator/val_utils.h \ $(srcdir)/respip/respip.h $(srcdir)/services/localzone.h $(srcdir)/util/storage/dnstree.h \ - $(srcdir)/services/view.h $(PYTHONMOD_HEADER) $(srcdir)/ipsecmod/ipsecmod.h + $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h view.lo view.o: $(srcdir)/services/view.c config.h $(srcdir)/services/view.h $(srcdir)/util/rbtree.h \ $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/services/localzone.h $(srcdir)/util/storage/dnstree.h \ $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/data/msgreply.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ - $(srcdir)/sldns/rrdef.h $(srcdir)/util/config_file.h + $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/sbuffer.h $(srcdir)/util/config_file.h +rpz.lo rpz.o: $(srcdir)/services/rpz.c config.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h \ + $(srcdir)/util/rbtree.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/storage/dnstree.h \ + $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/data/msgreply.h \ + $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ + $(srcdir)/sldns/rrdef.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h $(srcdir)/util/config_file.h \ + $(srcdir)/services/authzone.h $(srcdir)/services/mesh.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ + $(srcdir)/services/modstack.h $(srcdir)/sldns/wire2str.h \ + $(srcdir)/util/data/dname.h $(srcdir)/util/net_help.h outbound_list.lo outbound_list.o: $(srcdir)/services/outbound_list.c config.h \ $(srcdir)/services/outbound_list.h $(srcdir)/services/outside_network.h $(srcdir)/util/rbtree.h \ $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ @@ -794,8 +804,7 @@ outside_network.lo outside_network.o: $(srcdir)/services/outside_network.c confi $(srcdir)/services/outbound_list.h $(srcdir)/util/module.h $(srcdir)/util/data/msgparse.h \ $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/data/msgencode.h $(srcdir)/util/data/dname.h \ $(srcdir)/util/net_help.h $(srcdir)/util/random.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h \ - $(srcdir)/services/mesh.h $(srcdir)/services/modstack.h $(srcdir)/sldns/sbuffer.h $(srcdir)/dnstap/dnstap.h \ - + $(srcdir)/services/mesh.h $(srcdir)/services/modstack.h $(srcdir)/sldns/sbuffer.h $(srcdir)/dnstap/dnstap.h alloc.lo alloc.o: $(srcdir)/util/alloc.c config.h $(srcdir)/util/alloc.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ $(srcdir)/util/regional.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h \ $(srcdir)/util/fptr_wlist.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ @@ -833,12 +842,13 @@ authzone.lo authzone.o: $(srcdir)/services/authzone.c config.h $(srcdir)/service $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/util/data/msgparse.h \ $(srcdir)/util/storage/lruhash.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/module.h \ $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/services/modstack.h \ - $(srcdir)/util/data/dname.h $(srcdir)/util/data/msgencode.h $(srcdir)/util/regional.h $(srcdir)/util/net_help.h \ - $(srcdir)/util/config_file.h $(srcdir)/util/random.h $(srcdir)/services/cache/dns.h \ - $(srcdir)/services/outside_network.h \ - $(srcdir)/services/listen_dnsport.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/str2wire.h \ - $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/parseutil.h $(srcdir)/sldns/keyraw.h \ - $(srcdir)/validator/val_nsec3.h $(srcdir)/validator/val_secalgo.h + $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h $(srcdir)/util/storage/dnstree.h \ + $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h $(srcdir)/util/config_file.h $(srcdir)/util/data/dname.h \ + $(srcdir)/util/data/msgencode.h $(srcdir)/util/regional.h $(srcdir)/util/net_help.h $(srcdir)/util/random.h \ + $(srcdir)/services/cache/dns.h $(srcdir)/services/outside_network.h \ + $(srcdir)/services/listen_dnsport.h $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/wire2str.h \ + $(srcdir)/sldns/parseutil.h $(srcdir)/sldns/keyraw.h $(srcdir)/validator/val_nsec3.h \ + $(srcdir)/validator/val_secalgo.h fptr_wlist.lo fptr_wlist.o: $(srcdir)/util/fptr_wlist.c config.h $(srcdir)/util/fptr_wlist.h \ $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/module.h \ @@ -846,7 +856,8 @@ fptr_wlist.lo fptr_wlist.o: $(srcdir)/util/fptr_wlist.c config.h $(srcdir)/util/ $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \ $(srcdir)/services/modstack.h $(srcdir)/util/mini_event.h $(srcdir)/util/rbtree.h \ $(srcdir)/services/outside_network.h $(srcdir)/services/localzone.h \ - $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h $(srcdir)/services/authzone.h \ + $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h \ + $(srcdir)/services/authzone.h $(srcdir)/services/rpz.h $(srcdir)/util/config_file.h \ $(srcdir)/services/cache/infra.h $(srcdir)/util/rtt.h $(srcdir)/services/cache/rrset.h \ $(srcdir)/util/storage/slabhash.h $(srcdir)/dns64/dns64.h $(srcdir)/iterator/iterator.h \ $(srcdir)/services/outbound_list.h $(srcdir)/iterator/iter_fwd.h $(srcdir)/validator/validator.h \ @@ -854,8 +865,7 @@ fptr_wlist.lo fptr_wlist.o: $(srcdir)/util/fptr_wlist.c config.h $(srcdir)/util/ $(srcdir)/validator/val_sigcrypt.h $(srcdir)/validator/val_kentry.h $(srcdir)/validator/val_neg.h \ $(srcdir)/validator/autotrust.h $(srcdir)/libunbound/libworker.h $(srcdir)/libunbound/context.h \ $(srcdir)/util/alloc.h $(srcdir)/libunbound/unbound.h $(srcdir)/libunbound/unbound-event.h \ - $(srcdir)/libunbound/worker.h $(srcdir)/sldns/sbuffer.h $(srcdir)/util/config_file.h $(srcdir)/respip/respip.h \ - $(PYTHONMOD_HEADER) $(srcdir)/ipsecmod/ipsecmod.h + $(srcdir)/libunbound/worker.h $(srcdir)/respip/respip.h locks.lo locks.o: $(srcdir)/util/locks.c config.h $(srcdir)/util/locks.h $(srcdir)/util/log.h log.lo log.o: $(srcdir)/util/log.c config.h $(srcdir)/util/log.h $(srcdir)/util/locks.h $(srcdir)/sldns/sbuffer.h mini_event.lo mini_event.o: $(srcdir)/util/mini_event.c config.h $(srcdir)/util/mini_event.h $(srcdir)/util/rbtree.h \ @@ -874,14 +884,12 @@ netevent.lo netevent.o: $(srcdir)/util/netevent.c config.h $(srcdir)/util/neteve $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \ $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h \ $(srcdir)/services/modstack.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/str2wire.h $(srcdir)/dnstap/dnstap.h \ - $(srcdir)/services/listen_dnsport.h \ - + $(srcdir)/services/listen_dnsport.h net_help.lo net_help.o: $(srcdir)/util/net_help.c config.h $(srcdir)/util/net_help.h $(srcdir)/util/log.h \ $(srcdir)/util/data/dname.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/module.h \ $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \ $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/regional.h $(srcdir)/util/config_file.h \ - $(srcdir)/sldns/parseutil.h $(srcdir)/sldns/wire2str.h \ - + $(srcdir)/sldns/parseutil.h $(srcdir)/sldns/wire2str.h random.lo random.o: $(srcdir)/util/random.c config.h $(srcdir)/util/random.h $(srcdir)/util/log.h rbtree.lo rbtree.o: $(srcdir)/util/rbtree.c config.h $(srcdir)/util/log.h $(srcdir)/util/fptr_wlist.h \ $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ @@ -916,7 +924,7 @@ tcp_conn_limit.lo tcp_conn_limit.o: $(srcdir)/util/tcp_conn_limit.c config.h $(s $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/util/locks.h $(srcdir)/services/localzone.h \ $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/data/msgreply.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ - $(srcdir)/sldns/rrdef.h $(srcdir)/services/view.h $(srcdir)/sldns/str2wire.h + $(srcdir)/sldns/rrdef.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/str2wire.h timehist.lo timehist.o: $(srcdir)/util/timehist.c config.h $(srcdir)/util/timehist.h $(srcdir)/util/log.h tube.lo tube.o: $(srcdir)/util/tube.c config.h $(srcdir)/util/tube.h $(srcdir)/util/log.h $(srcdir)/util/net_help.h \ $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ @@ -944,8 +952,7 @@ autotrust.lo autotrust.o: $(srcdir)/validator/autotrust.c config.h $(srcdir)/val $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ $(srcdir)/services/modstack.h $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h \ $(srcdir)/validator/val_kcache.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/str2wire.h \ - $(srcdir)/sldns/keyraw.h \ - + $(srcdir)/sldns/keyraw.h val_anchor.lo val_anchor.o: $(srcdir)/validator/val_anchor.c config.h $(srcdir)/validator/val_anchor.h \ $(srcdir)/util/rbtree.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/validator/val_sigcrypt.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h $(srcdir)/sldns/pkthdr.h \ @@ -972,13 +979,11 @@ val_kcache.lo val_kcache.o: $(srcdir)/validator/val_kcache.c config.h $(srcdir)/ val_kentry.lo val_kentry.o: $(srcdir)/validator/val_kentry.c config.h $(srcdir)/validator/val_kentry.h \ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/data/packed_rrset.h \ $(srcdir)/util/data/dname.h $(srcdir)/util/storage/lookup3.h $(srcdir)/util/regional.h $(srcdir)/util/net_help.h \ - $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/keyraw.h \ - -val_neg.lo val_neg.o: $(srcdir)/validator/val_neg.c config.h \ - $(srcdir)/validator/val_neg.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/rbtree.h \ - $(srcdir)/validator/val_nsec.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h \ - $(srcdir)/validator/val_nsec3.h $(srcdir)/validator/val_utils.h $(srcdir)/sldns/pkthdr.h \ - $(srcdir)/util/data/dname.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/net_help.h \ + $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/keyraw.h +val_neg.lo val_neg.o: $(srcdir)/validator/val_neg.c config.h $(srcdir)/validator/val_neg.h $(srcdir)/util/locks.h \ + $(srcdir)/util/log.h $(srcdir)/util/rbtree.h $(srcdir)/validator/val_nsec.h $(srcdir)/util/data/packed_rrset.h \ + $(srcdir)/util/storage/lruhash.h $(srcdir)/validator/val_nsec3.h $(srcdir)/validator/val_utils.h \ + $(srcdir)/sldns/pkthdr.h $(srcdir)/util/data/dname.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/net_help.h \ $(srcdir)/util/config_file.h $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h \ $(srcdir)/services/cache/dns.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/sbuffer.h val_nsec3.lo val_nsec3.o: $(srcdir)/validator/val_nsec3.c config.h $(srcdir)/validator/val_nsec3.h \ @@ -996,17 +1001,15 @@ val_nsec.lo val_nsec.o: $(srcdir)/validator/val_nsec.c config.h $(srcdir)/valida val_secalgo.lo val_secalgo.o: $(srcdir)/validator/val_secalgo.c config.h $(srcdir)/util/data/packed_rrset.h \ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/validator/val_secalgo.h \ $(srcdir)/validator/val_nsec3.h $(srcdir)/util/rbtree.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/keyraw.h \ - $(srcdir)/sldns/sbuffer.h \ - + $(srcdir)/sldns/sbuffer.h val_sigcrypt.lo val_sigcrypt.o: $(srcdir)/validator/val_sigcrypt.c config.h \ $(srcdir)/validator/val_sigcrypt.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h \ $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/sldns/pkthdr.h $(srcdir)/validator/val_secalgo.h \ $(srcdir)/validator/validator.h $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h \ $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/rrdef.h $(srcdir)/validator/val_utils.h \ $(srcdir)/util/data/dname.h $(srcdir)/util/rbtree.h $(srcdir)/util/net_help.h $(srcdir)/util/regional.h \ - $(srcdir)/util/config_file.h $(srcdir)/sldns/keyraw.h \ - $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/parseutil.h $(srcdir)/sldns/wire2str.h \ - + $(srcdir)/util/config_file.h $(srcdir)/sldns/keyraw.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/parseutil.h \ + $(srcdir)/sldns/wire2str.h val_utils.lo val_utils.o: $(srcdir)/validator/val_utils.c config.h $(srcdir)/validator/val_utils.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ $(srcdir)/sldns/pkthdr.h $(srcdir)/validator/validator.h $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h \ @@ -1038,33 +1041,14 @@ respip.lo respip.o: $(srcdir)/respip/respip.c config.h $(srcdir)/services/localz $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/module.h \ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \ $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/services/view.h \ - $(srcdir)/services/cache/dns.h $(srcdir)/sldns/str2wire.h $(srcdir)/util/config_file.h \ + $(srcdir)/sldns/sbuffer.h $(srcdir)/services/cache/dns.h $(srcdir)/sldns/str2wire.h $(srcdir)/util/config_file.h \ $(srcdir)/util/fptr_wlist.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ $(srcdir)/util/tube.h $(srcdir)/services/mesh.h \ $(srcdir)/services/modstack.h $(srcdir)/util/net_help.h $(srcdir)/util/regional.h $(srcdir)/respip/respip.h checklocks.lo checklocks.o: $(srcdir)/testcode/checklocks.c config.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ $(srcdir)/testcode/checklocks.h -dnstap.lo dnstap.o: $(srcdir)/dnstap/dnstap.c config.h $(srcdir)/sldns/sbuffer.h \ - $(srcdir)/util/config_file.h $(srcdir)/util/net_help.h $(srcdir)/util/log.h $(srcdir)/util/netevent.h \ - $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnstap/dnstap.h \ - dnstap/dnstap.pb-c.h -dnstap.pb-c.lo dnstap.pb-c.o: dnstap/dnstap.pb-c.c dnstap/dnstap.pb-c.h \ - -ipsecmod.lo ipsecmod.o: $(srcdir)/ipsecmod/ipsecmod.c config.h $(srcdir)/ipsecmod/ipsecmod.h \ - $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ - $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \ - $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/rbtree.h $(srcdir)/ipsecmod/ipsecmod-whitelist.h \ - $(srcdir)/util/storage/dnstree.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/netevent.h \ - $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/util/tube.h \ - $(srcdir)/services/mesh.h $(srcdir)/services/modstack.h $(srcdir)/util/regional.h $(srcdir)/util/net_help.h \ - $(srcdir)/util/config_file.h $(srcdir)/services/cache/dns.h $(srcdir)/sldns/wire2str.h -ipsecmod-whitelist.lo ipsecmod-whitelist.o: $(srcdir)/ipsecmod/ipsecmod-whitelist.c config.h \ - $(srcdir)/ipsecmod/ipsecmod.h $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \ - $(srcdir)/util/log.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \ - $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/rbtree.h \ - $(srcdir)/ipsecmod/ipsecmod-whitelist.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/regional.h \ - $(srcdir)/util/config_file.h $(srcdir)/util/data/dname.h $(srcdir)/sldns/str2wire.h +ipsecmod.lo ipsecmod.o: $(srcdir)/ipsecmod/ipsecmod.c config.h +ipsecmod-whitelist.lo ipsecmod-whitelist.o: $(srcdir)/ipsecmod/ipsecmod-whitelist.c config.h unitanchor.lo unitanchor.o: $(srcdir)/testcode/unitanchor.c config.h $(srcdir)/util/log.h $(srcdir)/util/data/dname.h \ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/testcode/unitmain.h \ $(srcdir)/validator/val_anchor.h $(srcdir)/util/rbtree.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/rrdef.h @@ -1073,8 +1057,7 @@ unitdname.lo unitdname.o: $(srcdir)/testcode/unitdname.c config.h $(srcdir)/util $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/rrdef.h unitlruhash.lo unitlruhash.o: $(srcdir)/testcode/unitlruhash.c config.h $(srcdir)/testcode/unitmain.h \ $(srcdir)/util/log.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/storage/slabhash.h -unitmain.lo unitmain.o: $(srcdir)/testcode/unitmain.c config.h \ - $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/keyraw.h \ +unitmain.lo unitmain.o: $(srcdir)/testcode/unitmain.c config.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/keyraw.h \ $(srcdir)/util/log.h $(srcdir)/testcode/unitmain.h $(srcdir)/util/alloc.h $(srcdir)/util/locks.h $(srcdir)/util/net_help.h \ $(srcdir)/util/config_file.h $(srcdir)/util/rtt.h $(srcdir)/util/timehist.h $(srcdir)/iterator/iterator.h \ $(srcdir)/services/outbound_list.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/storage/lruhash.h \ @@ -1082,7 +1065,7 @@ unitmain.lo unitmain.o: $(srcdir)/testcode/unitmain.c config.h \ $(srcdir)/sldns/pkthdr.h $(srcdir)/libunbound/unbound.h $(srcdir)/services/cache/infra.h \ $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ $(srcdir)/util/random.h $(srcdir)/respip/respip.h \ - $(srcdir)/services/localzone.h $(srcdir)/services/view.h + $(srcdir)/services/localzone.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h unitmsgparse.lo unitmsgparse.o: $(srcdir)/testcode/unitmsgparse.c config.h $(srcdir)/util/log.h \ $(srcdir)/testcode/unitmain.h $(srcdir)/util/data/msgparse.h $(srcdir)/util/storage/lruhash.h \ $(srcdir)/util/locks.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/data/msgreply.h \ @@ -1119,60 +1102,61 @@ unitauth.lo unitauth.o: $(srcdir)/testcode/unitauth.c config.h $(srcdir)/service $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/util/data/msgparse.h \ $(srcdir)/util/storage/lruhash.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/module.h \ $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/services/modstack.h \ - $(srcdir)/testcode/unitmain.h $(srcdir)/util/regional.h $(srcdir)/util/net_help.h $(srcdir)/util/config_file.h \ - $(srcdir)/services/cache/dns.h $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/sbuffer.h + $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h $(srcdir)/util/storage/dnstree.h \ + $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h $(srcdir)/util/config_file.h $(srcdir)/testcode/unitmain.h \ + $(srcdir)/util/regional.h $(srcdir)/util/net_help.h $(srcdir)/services/cache/dns.h $(srcdir)/sldns/str2wire.h \ + $(srcdir)/sldns/wire2str.h acl_list.lo acl_list.o: $(srcdir)/daemon/acl_list.c config.h $(srcdir)/daemon/acl_list.h \ $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/services/view.h $(srcdir)/util/locks.h \ $(srcdir)/util/log.h $(srcdir)/util/regional.h $(srcdir)/util/config_file.h $(srcdir)/util/net_help.h \ $(srcdir)/services/localzone.h $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h \ $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \ - $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/str2wire.h -cachedump.lo cachedump.o: $(srcdir)/daemon/cachedump.c config.h \ - $(srcdir)/daemon/cachedump.h $(srcdir)/daemon/remote.h $(srcdir)/daemon/worker.h $(srcdir)/libunbound/worker.h \ - $(srcdir)/sldns/sbuffer.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h \ - $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/util/alloc.h $(srcdir)/util/data/msgreply.h \ - $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/daemon/stats.h \ - $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/util/module.h $(srcdir)/dnstap/dnstap.h \ - $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h \ - $(srcdir)/services/cache/dns.h $(srcdir)/services/cache/infra.h $(srcdir)/util/storage/dnstree.h \ - $(srcdir)/util/rbtree.h $(srcdir)/util/rtt.h $(srcdir)/util/regional.h $(srcdir)/util/net_help.h \ - $(srcdir)/util/data/dname.h $(srcdir)/iterator/iterator.h $(srcdir)/services/outbound_list.h \ - $(srcdir)/iterator/iter_delegpt.h $(srcdir)/iterator/iter_utils.h $(srcdir)/iterator/iter_resptype.h \ - $(srcdir)/iterator/iter_fwd.h $(srcdir)/iterator/iter_hints.h $(srcdir)/sldns/wire2str.h \ - $(srcdir)/sldns/str2wire.h -daemon.lo daemon.o: $(srcdir)/daemon/daemon.c config.h \ - $(srcdir)/daemon/daemon.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/alloc.h $(srcdir)/services/modstack.h \ - $(srcdir)/daemon/worker.h \ - $(srcdir)/libunbound/worker.h $(srcdir)/sldns/sbuffer.h $(srcdir)/util/data/packed_rrset.h \ - $(srcdir)/util/storage/lruhash.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \ - $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/util/module.h \ - $(srcdir)/dnstap/dnstap.h $(srcdir)/daemon/remote.h \ - $(srcdir)/daemon/acl_list.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/services/view.h \ - $(srcdir)/util/config_file.h $(srcdir)/util/shm_side/shm_main.h $(srcdir)/util/storage/lookup3.h \ - $(srcdir)/util/storage/slabhash.h $(srcdir)/util/tcp_conn_limit.h $(srcdir)/services/listen_dnsport.h \ - $(srcdir)/services/cache/rrset.h $(srcdir)/services/cache/infra.h $(srcdir)/util/rtt.h \ - $(srcdir)/services/localzone.h $(srcdir)/services/authzone.h $(srcdir)/services/mesh.h $(srcdir)/util/random.h \ - $(srcdir)/util/tube.h $(srcdir)/util/net_help.h $(srcdir)/sldns/keyraw.h $(srcdir)/respip/respip.h -remote.lo remote.o: $(srcdir)/daemon/remote.c config.h \ - $(srcdir)/daemon/remote.h \ - $(srcdir)/daemon/worker.h $(srcdir)/libunbound/worker.h $(srcdir)/sldns/sbuffer.h \ + $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/str2wire.h +cachedump.lo cachedump.o: $(srcdir)/daemon/cachedump.c config.h $(srcdir)/daemon/cachedump.h \ + $(srcdir)/daemon/remote.h $(srcdir)/daemon/worker.h $(srcdir)/libunbound/worker.h $(srcdir)/sldns/sbuffer.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ $(srcdir)/util/alloc.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ $(srcdir)/sldns/rrdef.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h \ - $(srcdir)/util/module.h $(srcdir)/dnstap/dnstap.h $(srcdir)/daemon/daemon.h \ + $(srcdir)/util/module.h $(srcdir)/dnstap/dnstap.h \ + $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h $(srcdir)/services/cache/dns.h \ + $(srcdir)/services/cache/infra.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/util/rtt.h \ + $(srcdir)/util/regional.h $(srcdir)/util/net_help.h $(srcdir)/util/data/dname.h $(srcdir)/iterator/iterator.h \ + $(srcdir)/services/outbound_list.h $(srcdir)/iterator/iter_delegpt.h $(srcdir)/iterator/iter_utils.h \ + $(srcdir)/iterator/iter_resptype.h $(srcdir)/iterator/iter_fwd.h $(srcdir)/iterator/iter_hints.h \ + $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/str2wire.h +daemon.lo daemon.o: $(srcdir)/daemon/daemon.c config.h $(srcdir)/daemon/daemon.h $(srcdir)/util/locks.h \ + $(srcdir)/util/log.h $(srcdir)/util/alloc.h $(srcdir)/services/modstack.h \ + $(srcdir)/daemon/worker.h $(srcdir)/libunbound/worker.h \ + $(srcdir)/sldns/sbuffer.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h \ + $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/util/data/msgreply.h \ + $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/daemon/stats.h \ + $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/util/module.h $(srcdir)/dnstap/dnstap.h \ + $(srcdir)/daemon/remote.h $(srcdir)/daemon/acl_list.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h \ + $(srcdir)/services/view.h $(srcdir)/util/config_file.h $(srcdir)/util/shm_side/shm_main.h \ + $(srcdir)/util/storage/lookup3.h $(srcdir)/util/storage/slabhash.h $(srcdir)/util/tcp_conn_limit.h \ + $(srcdir)/services/listen_dnsport.h $(srcdir)/services/cache/rrset.h $(srcdir)/services/cache/infra.h \ + $(srcdir)/util/rtt.h $(srcdir)/services/localzone.h $(srcdir)/services/authzone.h $(srcdir)/services/mesh.h \ + $(srcdir)/services/rpz.h $(srcdir)/util/random.h $(srcdir)/util/tube.h $(srcdir)/util/net_help.h $(srcdir)/sldns/keyraw.h \ + $(srcdir)/respip/respip.h +remote.lo remote.o: $(srcdir)/daemon/remote.c config.h $(srcdir)/daemon/remote.h $(srcdir)/daemon/worker.h \ + $(srcdir)/libunbound/worker.h $(srcdir)/sldns/sbuffer.h $(srcdir)/util/data/packed_rrset.h \ + $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/netevent.h \ + $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/util/alloc.h \ + $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \ + $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/util/module.h \ + $(srcdir)/dnstap/dnstap.h $(srcdir)/daemon/daemon.h \ $(srcdir)/services/modstack.h $(srcdir)/daemon/cachedump.h $(srcdir)/util/config_file.h \ $(srcdir)/util/net_help.h $(srcdir)/services/listen_dnsport.h $(srcdir)/services/cache/rrset.h \ $(srcdir)/util/storage/slabhash.h $(srcdir)/services/cache/infra.h $(srcdir)/util/storage/dnstree.h \ $(srcdir)/util/rbtree.h $(srcdir)/util/rtt.h $(srcdir)/services/mesh.h $(srcdir)/services/localzone.h \ - $(srcdir)/services/view.h $(srcdir)/services/authzone.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h \ - $(srcdir)/util/data/dname.h $(srcdir)/validator/validator.h $(srcdir)/validator/val_utils.h \ - $(srcdir)/validator/val_kcache.h $(srcdir)/validator/val_kentry.h $(srcdir)/validator/val_anchor.h \ - $(srcdir)/iterator/iterator.h $(srcdir)/services/outbound_list.h $(srcdir)/iterator/iter_fwd.h \ - $(srcdir)/iterator/iter_hints.h $(srcdir)/iterator/iter_delegpt.h $(srcdir)/services/outside_network.h \ - $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/parseutil.h $(srcdir)/sldns/wire2str.h + $(srcdir)/services/view.h $(srcdir)/services/authzone.h $(srcdir)/services/rpz.h $(srcdir)/util/fptr_wlist.h \ + $(srcdir)/util/tube.h $(srcdir)/util/data/dname.h $(srcdir)/validator/validator.h \ + $(srcdir)/validator/val_utils.h $(srcdir)/validator/val_kcache.h $(srcdir)/validator/val_kentry.h \ + $(srcdir)/validator/val_anchor.h $(srcdir)/iterator/iterator.h $(srcdir)/services/outbound_list.h \ + $(srcdir)/iterator/iter_fwd.h $(srcdir)/iterator/iter_hints.h $(srcdir)/iterator/iter_delegpt.h \ + $(srcdir)/services/outside_network.h $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/parseutil.h \ + $(srcdir)/sldns/wire2str.h stats.lo stats.o: $(srcdir)/daemon/stats.c config.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h \ $(srcdir)/libunbound/unbound.h $(srcdir)/daemon/worker.h $(srcdir)/libunbound/worker.h $(srcdir)/sldns/sbuffer.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ @@ -1184,19 +1168,17 @@ stats.lo stats.o: $(srcdir)/daemon/stats.c config.h $(srcdir)/daemon/stats.h $(s $(srcdir)/util/tube.h $(srcdir)/util/net_help.h $(srcdir)/validator/validator.h $(srcdir)/validator/val_utils.h \ $(srcdir)/iterator/iterator.h $(srcdir)/services/outbound_list.h $(srcdir)/services/cache/rrset.h \ $(srcdir)/util/storage/slabhash.h $(srcdir)/services/cache/infra.h $(srcdir)/util/storage/dnstree.h \ - $(srcdir)/util/rtt.h $(srcdir)/services/authzone.h $(srcdir)/validator/val_kcache.h \ - $(srcdir)/validator/val_neg.h \ - + $(srcdir)/util/rtt.h $(srcdir)/services/authzone.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h \ + $(srcdir)/services/view.h $(srcdir)/validator/val_kcache.h $(srcdir)/validator/val_neg.h unbound.lo unbound.o: $(srcdir)/daemon/unbound.c config.h $(srcdir)/util/log.h $(srcdir)/daemon/daemon.h \ $(srcdir)/util/locks.h $(srcdir)/util/alloc.h $(srcdir)/services/modstack.h \ - $(srcdir)/daemon/remote.h \ - $(srcdir)/util/config_file.h $(srcdir)/util/storage/slabhash.h $(srcdir)/util/storage/lruhash.h \ - $(srcdir)/services/listen_dnsport.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/services/cache/rrset.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/services/cache/infra.h \ - $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/util/rtt.h $(srcdir)/util/data/msgreply.h \ - $(srcdir)/util/fptr_wlist.h $(srcdir)/util/module.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ - $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/net_help.h \ - $(srcdir)/util/ub_event.h + $(srcdir)/daemon/remote.h $(srcdir)/util/config_file.h \ + $(srcdir)/util/storage/slabhash.h $(srcdir)/util/storage/lruhash.h $(srcdir)/services/listen_dnsport.h \ + $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/services/cache/rrset.h \ + $(srcdir)/util/data/packed_rrset.h $(srcdir)/services/cache/infra.h $(srcdir)/util/storage/dnstree.h \ + $(srcdir)/util/rbtree.h $(srcdir)/util/rtt.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/fptr_wlist.h \ + $(srcdir)/util/module.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \ + $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/net_help.h $(srcdir)/util/ub_event.h worker.lo worker.o: $(srcdir)/daemon/worker.c config.h $(srcdir)/util/log.h $(srcdir)/util/net_help.h \ $(srcdir)/util/random.h $(srcdir)/daemon/worker.h $(srcdir)/libunbound/worker.h $(srcdir)/sldns/sbuffer.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \ @@ -1204,12 +1186,12 @@ worker.lo worker.o: $(srcdir)/daemon/worker.c config.h $(srcdir)/util/log.h $(sr $(srcdir)/util/alloc.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ $(srcdir)/sldns/rrdef.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h \ $(srcdir)/util/module.h $(srcdir)/dnstap/dnstap.h $(srcdir)/daemon/daemon.h \ - $(srcdir)/services/modstack.h $(srcdir)/daemon/remote.h \ - $(srcdir)/daemon/acl_list.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/services/view.h \ - $(srcdir)/util/config_file.h $(srcdir)/util/regional.h $(srcdir)/util/storage/slabhash.h \ - $(srcdir)/services/listen_dnsport.h $(srcdir)/services/outside_network.h \ - $(srcdir)/services/outbound_list.h $(srcdir)/services/cache/rrset.h $(srcdir)/services/cache/infra.h \ - $(srcdir)/util/rtt.h $(srcdir)/services/cache/dns.h $(srcdir)/services/authzone.h $(srcdir)/services/mesh.h \ + $(srcdir)/services/modstack.h $(srcdir)/daemon/remote.h $(srcdir)/daemon/acl_list.h \ + $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/services/view.h $(srcdir)/util/config_file.h \ + $(srcdir)/util/regional.h $(srcdir)/util/storage/slabhash.h $(srcdir)/services/listen_dnsport.h \ + $(srcdir)/services/outside_network.h $(srcdir)/services/outbound_list.h \ + $(srcdir)/services/cache/rrset.h $(srcdir)/services/cache/infra.h $(srcdir)/util/rtt.h \ + $(srcdir)/services/cache/dns.h $(srcdir)/services/authzone.h $(srcdir)/services/mesh.h $(srcdir)/services/rpz.h \ $(srcdir)/services/localzone.h $(srcdir)/util/data/msgencode.h $(srcdir)/util/data/dname.h \ $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h $(srcdir)/util/edns.h $(srcdir)/iterator/iter_fwd.h \ $(srcdir)/iterator/iter_hints.h $(srcdir)/validator/autotrust.h $(srcdir)/validator/val_anchor.h \ @@ -1218,9 +1200,8 @@ worker.lo worker.o: $(srcdir)/daemon/worker.c config.h $(srcdir)/util/log.h $(sr testbound.lo testbound.o: $(srcdir)/testcode/testbound.c config.h $(srcdir)/testcode/testpkts.h \ $(srcdir)/testcode/replay.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ $(srcdir)/util/rbtree.h $(srcdir)/testcode/fake_event.h \ - $(srcdir)/daemon/remote.h \ - $(srcdir)/util/config_file.h $(srcdir)/sldns/keyraw.h $(srcdir)/daemon/unbound.c $(srcdir)/util/log.h \ - $(srcdir)/daemon/daemon.h $(srcdir)/util/locks.h $(srcdir)/util/alloc.h $(srcdir)/services/modstack.h \ + $(srcdir)/daemon/remote.h $(srcdir)/util/config_file.h $(srcdir)/sldns/keyraw.h $(srcdir)/daemon/unbound.c \ + $(srcdir)/util/log.h $(srcdir)/daemon/daemon.h $(srcdir)/util/locks.h $(srcdir)/util/alloc.h $(srcdir)/services/modstack.h \ $(srcdir)/util/storage/slabhash.h $(srcdir)/util/storage/lruhash.h \ $(srcdir)/services/listen_dnsport.h $(srcdir)/services/cache/rrset.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/services/cache/infra.h $(srcdir)/util/storage/dnstree.h \ @@ -1237,12 +1218,12 @@ worker.lo worker.o: $(srcdir)/daemon/worker.c config.h $(srcdir)/util/log.h $(sr $(srcdir)/util/alloc.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ $(srcdir)/sldns/rrdef.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h \ $(srcdir)/util/module.h $(srcdir)/dnstap/dnstap.h $(srcdir)/daemon/daemon.h \ - $(srcdir)/services/modstack.h $(srcdir)/daemon/remote.h \ - $(srcdir)/daemon/acl_list.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/services/view.h \ - $(srcdir)/util/config_file.h $(srcdir)/util/regional.h $(srcdir)/util/storage/slabhash.h \ - $(srcdir)/services/listen_dnsport.h $(srcdir)/services/outside_network.h \ - $(srcdir)/services/outbound_list.h $(srcdir)/services/cache/rrset.h $(srcdir)/services/cache/infra.h \ - $(srcdir)/util/rtt.h $(srcdir)/services/cache/dns.h $(srcdir)/services/authzone.h $(srcdir)/services/mesh.h \ + $(srcdir)/services/modstack.h $(srcdir)/daemon/remote.h $(srcdir)/daemon/acl_list.h \ + $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/services/view.h $(srcdir)/util/config_file.h \ + $(srcdir)/util/regional.h $(srcdir)/util/storage/slabhash.h $(srcdir)/services/listen_dnsport.h \ + $(srcdir)/services/outside_network.h $(srcdir)/services/outbound_list.h \ + $(srcdir)/services/cache/rrset.h $(srcdir)/services/cache/infra.h $(srcdir)/util/rtt.h \ + $(srcdir)/services/cache/dns.h $(srcdir)/services/authzone.h $(srcdir)/services/mesh.h $(srcdir)/services/rpz.h \ $(srcdir)/services/localzone.h $(srcdir)/util/data/msgencode.h $(srcdir)/util/data/dname.h \ $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h $(srcdir)/util/edns.h $(srcdir)/iterator/iter_fwd.h \ $(srcdir)/iterator/iter_hints.h $(srcdir)/validator/autotrust.h $(srcdir)/validator/val_anchor.h \ @@ -1253,21 +1234,21 @@ acl_list.lo acl_list.o: $(srcdir)/daemon/acl_list.c config.h $(srcdir)/daemon/ac $(srcdir)/util/log.h $(srcdir)/util/regional.h $(srcdir)/util/config_file.h $(srcdir)/util/net_help.h \ $(srcdir)/services/localzone.h $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h \ $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \ - $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/str2wire.h -daemon.lo daemon.o: $(srcdir)/daemon/daemon.c config.h \ - $(srcdir)/daemon/daemon.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/alloc.h $(srcdir)/services/modstack.h \ - $(srcdir)/daemon/worker.h \ - $(srcdir)/libunbound/worker.h $(srcdir)/sldns/sbuffer.h $(srcdir)/util/data/packed_rrset.h \ - $(srcdir)/util/storage/lruhash.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \ - $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/util/module.h \ - $(srcdir)/dnstap/dnstap.h $(srcdir)/daemon/remote.h \ - $(srcdir)/daemon/acl_list.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/services/view.h \ - $(srcdir)/util/config_file.h $(srcdir)/util/shm_side/shm_main.h $(srcdir)/util/storage/lookup3.h \ - $(srcdir)/util/storage/slabhash.h $(srcdir)/util/tcp_conn_limit.h $(srcdir)/services/listen_dnsport.h \ - $(srcdir)/services/cache/rrset.h $(srcdir)/services/cache/infra.h $(srcdir)/util/rtt.h \ - $(srcdir)/services/localzone.h $(srcdir)/services/authzone.h $(srcdir)/services/mesh.h $(srcdir)/util/random.h \ - $(srcdir)/util/tube.h $(srcdir)/util/net_help.h $(srcdir)/sldns/keyraw.h $(srcdir)/respip/respip.h + $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/str2wire.h +daemon.lo daemon.o: $(srcdir)/daemon/daemon.c config.h $(srcdir)/daemon/daemon.h $(srcdir)/util/locks.h \ + $(srcdir)/util/log.h $(srcdir)/util/alloc.h $(srcdir)/services/modstack.h \ + $(srcdir)/daemon/worker.h $(srcdir)/libunbound/worker.h \ + $(srcdir)/sldns/sbuffer.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h \ + $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/util/data/msgreply.h \ + $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/daemon/stats.h \ + $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/util/module.h $(srcdir)/dnstap/dnstap.h \ + $(srcdir)/daemon/remote.h $(srcdir)/daemon/acl_list.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h \ + $(srcdir)/services/view.h $(srcdir)/util/config_file.h $(srcdir)/util/shm_side/shm_main.h \ + $(srcdir)/util/storage/lookup3.h $(srcdir)/util/storage/slabhash.h $(srcdir)/util/tcp_conn_limit.h \ + $(srcdir)/services/listen_dnsport.h $(srcdir)/services/cache/rrset.h $(srcdir)/services/cache/infra.h \ + $(srcdir)/util/rtt.h $(srcdir)/services/localzone.h $(srcdir)/services/authzone.h $(srcdir)/services/mesh.h \ + $(srcdir)/services/rpz.h $(srcdir)/util/random.h $(srcdir)/util/tube.h $(srcdir)/util/net_help.h $(srcdir)/sldns/keyraw.h \ + $(srcdir)/respip/respip.h stats.lo stats.o: $(srcdir)/daemon/stats.c config.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h \ $(srcdir)/libunbound/unbound.h $(srcdir)/daemon/worker.h $(srcdir)/libunbound/worker.h $(srcdir)/sldns/sbuffer.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ @@ -1279,9 +1260,8 @@ stats.lo stats.o: $(srcdir)/daemon/stats.c config.h $(srcdir)/daemon/stats.h $(s $(srcdir)/util/tube.h $(srcdir)/util/net_help.h $(srcdir)/validator/validator.h $(srcdir)/validator/val_utils.h \ $(srcdir)/iterator/iterator.h $(srcdir)/services/outbound_list.h $(srcdir)/services/cache/rrset.h \ $(srcdir)/util/storage/slabhash.h $(srcdir)/services/cache/infra.h $(srcdir)/util/storage/dnstree.h \ - $(srcdir)/util/rtt.h $(srcdir)/services/authzone.h $(srcdir)/validator/val_kcache.h \ - $(srcdir)/validator/val_neg.h \ - + $(srcdir)/util/rtt.h $(srcdir)/services/authzone.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h \ + $(srcdir)/services/view.h $(srcdir)/validator/val_kcache.h $(srcdir)/validator/val_neg.h replay.lo replay.o: $(srcdir)/testcode/replay.c config.h $(srcdir)/util/log.h $(srcdir)/util/net_help.h \ $(srcdir)/util/config_file.h $(srcdir)/testcode/replay.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ $(srcdir)/testcode/testpkts.h $(srcdir)/util/rbtree.h \ @@ -1321,9 +1301,9 @@ unbound-checkconf.lo unbound-checkconf.o: $(srcdir)/smallapp/unbound-checkconf.c $(srcdir)/iterator/iterator.h $(srcdir)/services/outbound_list.h $(srcdir)/iterator/iter_fwd.h \ $(srcdir)/util/rbtree.h $(srcdir)/iterator/iter_hints.h $(srcdir)/util/storage/dnstree.h \ $(srcdir)/validator/validator.h $(srcdir)/validator/val_utils.h $(srcdir)/services/localzone.h \ - $(srcdir)/services/view.h $(srcdir)/services/authzone.h $(srcdir)/services/mesh.h $(srcdir)/util/netevent.h \ - $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/services/modstack.h \ - $(srcdir)/respip/respip.h $(srcdir)/sldns/sbuffer.h $(PYTHONMOD_HEADER) + $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h $(srcdir)/services/authzone.h $(srcdir)/services/mesh.h \ + $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ + $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h $(srcdir)/respip/respip.h worker_cb.lo worker_cb.o: $(srcdir)/smallapp/worker_cb.c config.h $(srcdir)/libunbound/context.h \ $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/alloc.h $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h \ $(srcdir)/libunbound/unbound.h $(srcdir)/libunbound/unbound-event.h $(srcdir)/util/data/packed_rrset.h \ @@ -1338,10 +1318,10 @@ context.lo context.o: $(srcdir)/libunbound/context.c config.h $(srcdir)/libunbou $(srcdir)/util/storage/lruhash.h $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h \ $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/config_file.h \ $(srcdir)/util/net_help.h $(srcdir)/services/localzone.h $(srcdir)/util/storage/dnstree.h \ - $(srcdir)/services/view.h $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h \ - $(srcdir)/services/cache/infra.h $(srcdir)/util/rtt.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/services/authzone.h $(srcdir)/services/mesh.h \ - $(srcdir)/sldns/sbuffer.h + $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h $(srcdir)/services/cache/rrset.h \ + $(srcdir)/util/storage/slabhash.h $(srcdir)/services/cache/infra.h $(srcdir)/util/rtt.h \ + $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ + $(srcdir)/services/authzone.h $(srcdir)/services/mesh.h $(srcdir)/services/rpz.h libunbound.lo libunbound.o: $(srcdir)/libunbound/libunbound.c $(srcdir)/libunbound/unbound.h \ $(srcdir)/libunbound/unbound-event.h config.h $(srcdir)/libunbound/context.h $(srcdir)/util/locks.h \ $(srcdir)/util/log.h $(srcdir)/util/alloc.h $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h \ @@ -1350,61 +1330,55 @@ libunbound.lo libunbound.o: $(srcdir)/libunbound/libunbound.c $(srcdir)/libunbou $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/regional.h \ $(srcdir)/util/random.h $(srcdir)/util/net_help.h $(srcdir)/util/tube.h $(srcdir)/util/ub_event.h \ $(srcdir)/services/localzone.h $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h \ - $(srcdir)/services/cache/infra.h $(srcdir)/util/rtt.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/services/cache/rrset.h \ + $(srcdir)/sldns/sbuffer.h $(srcdir)/services/cache/infra.h $(srcdir)/util/rtt.h $(srcdir)/util/netevent.h \ + $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/services/cache/rrset.h \ $(srcdir)/util/storage/slabhash.h $(srcdir)/services/authzone.h $(srcdir)/services/mesh.h \ - $(srcdir)/sldns/sbuffer.h -libworker.lo libworker.o: $(srcdir)/libunbound/libworker.c config.h \ - $(srcdir)/libunbound/libworker.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h \ - $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/libunbound/context.h $(srcdir)/util/alloc.h $(srcdir)/util/rbtree.h \ - $(srcdir)/services/modstack.h $(srcdir)/libunbound/unbound.h $(srcdir)/libunbound/unbound-event.h \ - $(srcdir)/libunbound/worker.h $(srcdir)/sldns/sbuffer.h $(srcdir)/services/outside_network.h \ - $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/services/mesh.h $(srcdir)/util/data/msgparse.h \ - $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h \ - $(srcdir)/services/localzone.h $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h \ - $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h $(srcdir)/services/outbound_list.h \ - $(srcdir)/services/authzone.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h $(srcdir)/util/regional.h \ - $(srcdir)/util/random.h $(srcdir)/util/config_file.h $(srcdir)/util/storage/lookup3.h $(srcdir)/util/net_help.h \ + $(srcdir)/services/rpz.h +libworker.lo libworker.o: $(srcdir)/libunbound/libworker.c config.h $(srcdir)/libunbound/libworker.h \ + $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ + $(srcdir)/libunbound/context.h $(srcdir)/util/alloc.h $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h \ + $(srcdir)/libunbound/unbound.h $(srcdir)/libunbound/unbound-event.h $(srcdir)/libunbound/worker.h \ + $(srcdir)/sldns/sbuffer.h $(srcdir)/services/outside_network.h $(srcdir)/util/netevent.h \ + $(srcdir)/dnscrypt/dnscrypt.h \ + $(srcdir)/services/mesh.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \ + $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h $(srcdir)/services/localzone.h \ + $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h $(srcdir)/services/cache/rrset.h \ + $(srcdir)/util/storage/slabhash.h $(srcdir)/services/outbound_list.h $(srcdir)/services/authzone.h \ + $(srcdir)/services/rpz.h $(srcdir)/util/config_file.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h \ + $(srcdir)/util/regional.h $(srcdir)/util/random.h $(srcdir)/util/storage/lookup3.h $(srcdir)/util/net_help.h \ $(srcdir)/util/data/dname.h $(srcdir)/util/data/msgencode.h $(srcdir)/iterator/iter_fwd.h \ $(srcdir)/iterator/iter_hints.h $(srcdir)/sldns/str2wire.h unbound-host.lo unbound-host.o: $(srcdir)/smallapp/unbound-host.c config.h $(srcdir)/libunbound/unbound.h \ - $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/wire2str.h \ - + $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/wire2str.h asynclook.lo asynclook.o: $(srcdir)/testcode/asynclook.c config.h $(srcdir)/libunbound/unbound.h \ $(srcdir)/libunbound/context.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/alloc.h $(srcdir)/util/rbtree.h \ $(srcdir)/services/modstack.h $(srcdir)/libunbound/unbound-event.h $(srcdir)/util/data/packed_rrset.h \ - $(srcdir)/util/storage/lruhash.h $(srcdir)/sldns/rrdef.h \ - + $(srcdir)/util/storage/lruhash.h $(srcdir)/sldns/rrdef.h streamtcp.lo streamtcp.o: $(srcdir)/testcode/streamtcp.c config.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ $(srcdir)/util/net_help.h $(srcdir)/util/data/msgencode.h $(srcdir)/util/data/msgparse.h \ $(srcdir)/util/storage/lruhash.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)/sldns/sbuffer.h \ - $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/wire2str.h \ - + $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/wire2str.h perf.lo perf.o: $(srcdir)/testcode/perf.c config.h $(srcdir)/util/log.h $(srcdir)/util/locks.h $(srcdir)/util/net_help.h \ $(srcdir)/util/data/msgencode.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/storage/lruhash.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/str2wire.h delayer.lo delayer.o: $(srcdir)/testcode/delayer.c config.h $(srcdir)/util/net_help.h $(srcdir)/util/log.h \ $(srcdir)/util/config_file.h $(srcdir)/sldns/sbuffer.h -unbound-control.lo unbound-control.o: $(srcdir)/smallapp/unbound-control.c config.h \ - $(srcdir)/util/log.h $(srcdir)/util/config_file.h $(srcdir)/util/locks.h $(srcdir)/util/net_help.h \ - $(srcdir)/util/shm_side/shm_main.h $(srcdir)/libunbound/unbound.h $(srcdir)/daemon/stats.h \ - $(srcdir)/util/timehist.h $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/pkthdr.h +unbound-control.lo unbound-control.o: $(srcdir)/smallapp/unbound-control.c config.h $(srcdir)/util/log.h \ + $(srcdir)/util/config_file.h $(srcdir)/util/locks.h $(srcdir)/util/net_help.h $(srcdir)/util/shm_side/shm_main.h \ + $(srcdir)/libunbound/unbound.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/sldns/wire2str.h \ + $(srcdir)/sldns/pkthdr.h unbound-anchor.lo unbound-anchor.o: $(srcdir)/smallapp/unbound-anchor.c config.h $(srcdir)/libunbound/unbound.h \ - $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/parseutil.h \ - -petal.lo petal.o: $(srcdir)/testcode/petal.c config.h \ - + $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/parseutil.h +petal.lo petal.o: $(srcdir)/testcode/petal.c config.h pythonmod_utils.lo pythonmod_utils.o: $(srcdir)/pythonmod/pythonmod_utils.c config.h $(srcdir)/util/module.h \ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/data/msgreply.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ $(srcdir)/sldns/rrdef.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ $(srcdir)/util/net_help.h $(srcdir)/services/cache/dns.h \ $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h $(srcdir)/util/regional.h \ - $(srcdir)/iterator/iter_delegpt.h $(srcdir)/sldns/sbuffer.h \ - + $(srcdir)/iterator/iter_delegpt.h $(srcdir)/sldns/sbuffer.h win_svc.lo win_svc.o: $(srcdir)/winrc/win_svc.c config.h $(srcdir)/winrc/win_svc.h $(srcdir)/winrc/w_inst.h \ $(srcdir)/daemon/daemon.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/alloc.h $(srcdir)/services/modstack.h \ $(srcdir)/daemon/worker.h \ @@ -1412,8 +1386,8 @@ win_svc.lo win_svc.o: $(srcdir)/winrc/win_svc.c config.h $(srcdir)/winrc/win_svc $(srcdir)/util/storage/lruhash.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \ $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/util/module.h \ - $(srcdir)/dnstap/dnstap.h $(srcdir)/daemon/remote.h \ - $(srcdir)/util/config_file.h $(srcdir)/util/ub_event.h $(srcdir)/util/net_help.h + $(srcdir)/dnstap/dnstap.h $(srcdir)/daemon/remote.h $(srcdir)/util/config_file.h $(srcdir)/util/ub_event.h \ + $(srcdir)/util/net_help.h w_inst.lo w_inst.o: $(srcdir)/winrc/w_inst.c config.h $(srcdir)/winrc/w_inst.h $(srcdir)/winrc/win_svc.h unbound-service-install.lo unbound-service-install.o: $(srcdir)/winrc/unbound-service-install.c config.h \ $(srcdir)/winrc/w_inst.h @@ -1421,14 +1395,11 @@ unbound-service-remove.lo unbound-service-remove.o: $(srcdir)/winrc/unbound-serv $(srcdir)/winrc/w_inst.h anchor-update.lo anchor-update.o: $(srcdir)/winrc/anchor-update.c config.h $(srcdir)/libunbound/unbound.h \ $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/wire2str.h -keyraw.lo keyraw.o: $(srcdir)/sldns/keyraw.c config.h $(srcdir)/sldns/keyraw.h \ - $(srcdir)/sldns/rrdef.h \ - +keyraw.lo keyraw.o: $(srcdir)/sldns/keyraw.c config.h $(srcdir)/sldns/keyraw.h $(srcdir)/sldns/rrdef.h sbuffer.lo sbuffer.o: $(srcdir)/sldns/sbuffer.c config.h $(srcdir)/sldns/sbuffer.h wire2str.lo wire2str.o: $(srcdir)/sldns/wire2str.c config.h $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/str2wire.h \ $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/parseutil.h $(srcdir)/sldns/sbuffer.h \ - $(srcdir)/sldns/keyraw.h \ - + $(srcdir)/sldns/keyraw.h parse.lo parse.o: $(srcdir)/sldns/parse.c config.h $(srcdir)/sldns/parse.h $(srcdir)/sldns/parseutil.h \ $(srcdir)/sldns/sbuffer.h parseutil.lo parseutil.o: $(srcdir)/sldns/parseutil.c config.h $(srcdir)/sldns/parseutil.h @@ -1448,11 +1419,9 @@ snprintf.lo snprintf.o: $(srcdir)/compat/snprintf.c config.h strlcat.lo strlcat.o: $(srcdir)/compat/strlcat.c config.h strlcpy.lo strlcpy.o: $(srcdir)/compat/strlcpy.c config.h strptime.lo strptime.o: $(srcdir)/compat/strptime.c config.h -getentropy_linux.lo getentropy_linux.o: $(srcdir)/compat/getentropy_linux.c config.h \ - +getentropy_linux.lo getentropy_linux.o: $(srcdir)/compat/getentropy_linux.c config.h getentropy_osx.lo getentropy_osx.o: $(srcdir)/compat/getentropy_osx.c config.h -getentropy_solaris.lo getentropy_solaris.o: $(srcdir)/compat/getentropy_solaris.c config.h \ - +getentropy_solaris.lo getentropy_solaris.o: $(srcdir)/compat/getentropy_solaris.c config.h getentropy_win.lo getentropy_win.o: $(srcdir)/compat/getentropy_win.c explicit_bzero.lo explicit_bzero.o: $(srcdir)/compat/explicit_bzero.c config.h arc4random.lo arc4random.o: $(srcdir)/compat/arc4random.c config.h $(srcdir)/compat/chacha_private.h diff --git a/daemon/worker.c b/daemon/worker.c index fc93817a0..d1f6f9f84 100644 --- a/daemon/worker.c +++ b/daemon/worker.c @@ -1363,6 +1363,18 @@ worker_handle_request(struct comm_point* c, void* arg, int error, server_stats_insrcode(&worker->stats, c->buffer); goto send_reply; } + if(worker->env.auth_zones && + rpz_apply_qname_trigger(worker->env.auth_zones, + &worker->env, &qinfo, &edns, c->buffer, worker->scratchpad, + repinfo, acladdr->taglist, acladdr->taglen)) { + regional_free_all(worker->scratchpad); + if(sldns_buffer_limit(c->buffer) == 0) { + comm_point_drop_reply(repinfo); + return 0; + } + server_stats_insrcode(&worker->stats, c->buffer); + goto send_reply; + } if(worker->env.auth_zones && auth_zones_answer(worker->env.auth_zones, &worker->env, &qinfo, &edns, repinfo, c->buffer, worker->scratchpad)) { diff --git a/services/authzone.c b/services/authzone.c index d62467c9f..aad6028e6 100644 --- a/services/authzone.c +++ b/services/authzone.c @@ -381,11 +381,25 @@ auth_data_del(rbnode_type* n, void* ATTR_UNUSED(arg)) /** delete an auth zone structure (tree remove must be done elsewhere) */ static void -auth_zone_delete(struct auth_zone* z) +auth_zone_delete(struct auth_zone* z, struct auth_zones* az) { if(!z) return; lock_rw_destroy(&z->lock); traverse_postorder(&z->data, auth_data_del, NULL); + + if(az && z->rpz) { + /* keep RPZ linked list intact */ + lock_rw_wrlock(&az->rpz_lock); + if(z->rpz->prev) + z->rpz->prev->next = z->rpz->next; + else + az->rpz_first = z->rpz->next; + if(z->rpz->next) + z->rpz->next->prev = z->rpz->prev; + lock_rw_unlock(&az->rpz_lock); + } + if(z->rpz) + rpz_delete(z->rpz); free(z->name); free(z->zonefile); free(z); @@ -415,7 +429,7 @@ auth_zone_create(struct auth_zones* az, uint8_t* nm, size_t nmlen, /* z lock protects all, except rbtree itself, which is az->lock */ if(!rbtree_insert(&az->ztree, &z->node)) { lock_rw_unlock(&z->lock); - auth_zone_delete(z); + auth_zone_delete(z, NULL); log_warn("duplicate auth zone"); return NULL; } @@ -1178,6 +1192,10 @@ az_insert_rr(struct auth_zone* z, uint8_t* rr, size_t rr_len, log_err("cannot add RR to domain"); return 0; } + if(z->rpz) { + rpz_insert_rr(z->rpz, z->namelen, dname, dname_len, rr_type, rr_class, rr_ttl, rdata, + rdatalen, rr, rr_len); + } return 1; } @@ -1293,6 +1311,10 @@ az_remove_rr(struct auth_zone* z, uint8_t* rr, size_t rr_len, (void)rbtree_delete(&z->data, node); auth_data_delete(node); } + if(z->rpz) { + rpz_remove_rr(z->rpz, z->namelen, dname, dname_len, rr_type, + rr_class, rdata, rdatalen, rr, rr_len); + } return 1; } @@ -1585,6 +1607,9 @@ auth_zone_read_zonefile(struct auth_zone* z, struct config_file* cfg) /* clear the data tree */ traverse_postorder(&z->data, auth_data_del, NULL); rbtree_init(&z->data, &auth_data_cmp); + /* clear the RPZ local_zone tree */ + if(z->rpz) + rpz_clear_lz(z->rpz); memset(&state, 0, sizeof(state)); /* default TTL to 3600 */ @@ -1877,6 +1902,18 @@ auth_zones_cfg(struct auth_zones* az, struct config_auth* c) z->for_downstream = c->for_downstream; z->for_upstream = c->for_upstream; z->fallback_enabled = c->fallback_enabled; + if(c->isrpz && !z->rpz){ + if(!(z->rpz = rpz_create(c))){ + fatal_exit("Could not setup RPZ zones"); + return 0; + } + lock_rw_wrlock(&az->rpz_lock); + z->rpz->next = az->rpz_first; + if(az->rpz_first) + az->rpz_first->prev = z->rpz; + az->rpz_first = z->rpz; + lock_rw_unlock(&az->rpz_lock); + } /* xfer zone */ if(x) { @@ -1947,7 +1984,7 @@ az_delete_deleted_zones(struct auth_zones* az) auth_xfer_delete(xfr); } (void)rbtree_delete(&az->ztree, &z->node); - auth_zone_delete(z); + auth_zone_delete(z, az); z = next; } lock_rw_unlock(&az->lock); @@ -2061,7 +2098,7 @@ static void auth_zone_del(rbnode_type* n, void* ATTR_UNUSED(arg)) { struct auth_zone* z = (struct auth_zone*)n->key; - auth_zone_delete(z); + auth_zone_delete(z, NULL); } /** helper traverse to delete xfer zones */ @@ -4680,6 +4717,10 @@ apply_axfr(struct auth_xfer* xfr, struct auth_zone* z, /* clear the data tree */ traverse_postorder(&z->data, auth_data_del, NULL); rbtree_init(&z->data, &auth_data_cmp); + /* clear the RPZ local_zone tree */ + if(z->rpz) + rpz_clear_lz(z->rpz); + xfr->have_zone = 0; xfr->serial = 0; @@ -4776,6 +4817,10 @@ apply_http(struct auth_xfer* xfr, struct auth_zone* z, /* clear the data tree */ traverse_postorder(&z->data, auth_data_del, NULL); rbtree_init(&z->data, &auth_data_cmp); + /* clear the RPZ local_zone tree */ + if(z->rpz) + rpz_clear_lz(z->rpz); + xfr->have_zone = 0; xfr->serial = 0; diff --git a/services/authzone.h b/services/authzone.h index 4706803a8..52e276350 100644 --- a/services/authzone.h +++ b/services/authzone.h @@ -46,6 +46,7 @@ #include "util/rbtree.h" #include "util/locks.h" #include "services/mesh.h" +#include "services/rpz.h" struct ub_packed_rrset_key; struct regional; struct config_file; @@ -81,6 +82,11 @@ struct auth_zones { size_t num_query_up; /** number of queries downstream */ size_t num_query_down; + /** first rpz item in linked list */ + struct rpz* rpz_first; + /** rw lock for rpz linked list, needed when iterating or editing linked + * list. */ + lock_rw_type rpz_lock; }; /** @@ -126,6 +132,8 @@ struct auth_zone { /** for upstream: this zone answers queries that unbound intends to * send upstream. */ int for_upstream; + /** RPZ zones */ + struct rpz* rpz; /** zone has been deleted */ int zone_deleted; /** deletelist pointer, unused normally except during delete */ diff --git a/services/localzone.c b/services/localzone.c index 6295b17e2..63ff915e1 100644 --- a/services/localzone.c +++ b/services/localzone.c @@ -41,7 +41,6 @@ #include "config.h" #include "services/localzone.h" #include "sldns/str2wire.h" -#include "sldns/sbuffer.h" #include "util/regional.h" #include "util/config_file.h" #include "util/data/dname.h" @@ -443,42 +442,19 @@ lz_find_create_node(struct local_zone* z, uint8_t* nm, size_t nmlen, return 1; } -/** enter data RR into auth zone */ -static int -lz_enter_rr_into_zone(struct local_zone* z, const char* rrstr) +int +local_zone_enter_rr(struct local_zone* z, uint8_t* nm, size_t nmlen, + int nmlabs, uint16_t rrtype, uint16_t rrclass, time_t ttl, + uint8_t* rdata, size_t rdata_len, const char* rrstr) { - uint8_t* nm; - size_t nmlen; - int nmlabs; struct local_data* node; struct local_rrset* rrset; struct packed_rrset_data* pd; - uint16_t rrtype = 0, rrclass = 0; - time_t ttl = 0; - uint8_t rr[LDNS_RR_BUF_SIZE]; - uint8_t* rdata; - size_t rdata_len; - if(!rrstr_get_rr_content(rrstr, &nm, &rrtype, &rrclass, &ttl, rr, - sizeof(rr), &rdata, &rdata_len)) { - log_err("bad local-data: %s", rrstr); - return 0; - } - log_assert(z->dclass == rrclass); - if((z->type == local_zone_redirect || - z->type == local_zone_inform_redirect) && - query_dname_compare(z->name, nm) != 0) { - log_err("local-data in redirect zone must reside at top of zone" - ", not at %s", rrstr); - free(nm); - return 0; - } - nmlabs = dname_count_size_labels(nm, &nmlen); + if(!lz_find_create_node(z, nm, nmlen, nmlabs, &node)) { - free(nm); return 0; } log_assert(node); - free(nm); /* Reject it if we would end up having CNAME and other data (including * another CNAME) for a redirect zone. */ @@ -520,6 +496,39 @@ lz_enter_rr_into_zone(struct local_zone* z, const char* rrstr) return rrset_insert_rr(z->region, pd, rdata, rdata_len, ttl, rrstr); } +/** enter data RR into auth zone */ +int +lz_enter_rr_into_zone(struct local_zone* z, const char* rrstr) +{ + uint8_t* nm; + size_t nmlen; + int nmlabs, ret; + uint16_t rrtype = 0, rrclass = 0; + time_t ttl = 0; + uint8_t rr[LDNS_RR_BUF_SIZE]; + uint8_t* rdata; + size_t rdata_len; + if(!rrstr_get_rr_content(rrstr, &nm, &rrtype, &rrclass, &ttl, rr, + sizeof(rr), &rdata, &rdata_len)) { + log_err("bad local-data: %s", rrstr); + return 0; + } + log_assert(z->dclass == rrclass); + if((z->type == local_zone_redirect || + z->type == local_zone_inform_redirect) && + query_dname_compare(z->name, nm) != 0) { + log_err("local-data in redirect zone must reside at top of zone" + ", not at %s", rrstr); + free(nm); + return 0; + } + nmlabs = dname_count_size_labels(nm, &nmlen); + ret = local_zone_enter_rr(z, nm, nmlen, nmlabs, rrtype, rrclass, ttl, + rdata, rdata_len, rrstr); + free(nm); + return ret; +} + /** enter a data RR into auth data; a zone for it must exist */ static int lz_enter_rr_str(struct local_zones* zones, const char* rr) @@ -1113,6 +1122,23 @@ local_zones_find(struct local_zones* zones, return (struct local_zone*)rbtree_search(&zones->ztree, &key); } +struct local_zone* +local_zones_find_le(struct local_zones* zones, + uint8_t* name, size_t len, int labs, uint16_t dclass, + int* exact) +{ + struct local_zone key; + int r; + rbnode_type *node; + key.node.key = &key; + key.dclass = dclass; + key.name = name; + key.namelen = len; + key.namelabs = labs; + *exact = rbtree_find_less_equal(&zones->ztree, &key, &node); + return (struct local_zone*)node; +} + /** print all RRsets in local zone */ static void local_zone_out(struct local_zone* z) @@ -1310,7 +1336,7 @@ find_tag_datas(struct query_info* qinfo, struct config_strlist* list, } /** answer local data match */ -static int +int local_data_answer(struct local_zone* z, struct module_env* env, struct query_info* qinfo, struct edns_data* edns, struct comm_reply* repinfo, sldns_buffer* buf, @@ -1416,21 +1442,8 @@ local_zone_does_not_cover(struct local_zone* z, struct query_info* qinfo, return (lr == NULL); } -/** - * Answer in case where no exact match is found. - * @param z: zone for query. - * @param env: module environment. - * @param qinfo: query. - * @param edns: edns from query. - * @param repinfo: source address for checks. may be NULL. - * @param buf: buffer for answer. - * @param temp: temp region for encoding. - * @param ld: local data, if NULL, no such name exists in localdata. - * @param lz_type: type of the local zone. - * @return 1 if a reply is to be sent, 0 if not. - */ -static int -lz_zone_answer(struct local_zone* z, struct module_env* env, +int +local_zones_zone_answer(struct local_zone* z, struct module_env* env, struct query_info* qinfo, struct edns_data* edns, struct comm_reply* repinfo, sldns_buffer* buf, struct regional* temp, struct local_data* ld, enum localzone_type lz_type) @@ -1448,7 +1461,8 @@ lz_zone_answer(struct local_zone* z, struct module_env* env, } else if(lz_type == local_zone_static || lz_type == local_zone_redirect || lz_type == local_zone_inform_redirect || - lz_type == local_zone_always_nxdomain) { + lz_type == local_zone_always_nxdomain || + lz_type == local_zone_always_nodata) { /* for static, reply nodata or nxdomain * for redirect, reply nodata */ /* no additional section processing, @@ -1457,7 +1471,8 @@ lz_zone_answer(struct local_zone* z, struct module_env* env, * or using closest match for returning delegation downwards */ int rcode = (ld || lz_type == local_zone_redirect || - lz_type == local_zone_inform_redirect)? + lz_type == local_zone_inform_redirect || + lz_type == local_zone_always_nodata)? LDNS_RCODE_NOERROR:LDNS_RCODE_NXDOMAIN; if(z->soa) return local_encode(qinfo, env, edns, repinfo, buf, temp, @@ -1640,6 +1655,7 @@ local_zones_answer(struct local_zones* zones, struct module_env* env, if(lzt != local_zone_always_refuse && lzt != local_zone_always_transparent && lzt != local_zone_always_nxdomain + && lzt != local_zone_always_nodata && local_data_answer(z, env, qinfo, edns, repinfo, buf, temp, labs, &ld, lzt, tag, tag_datas, tag_datas_size, tagname, num_tags)) { lock_rw_unlock(&z->lock); @@ -1647,7 +1663,7 @@ local_zones_answer(struct local_zones* zones, struct module_env* env, * a local alias. */ return !qinfo->local_alias; } - r = lz_zone_answer(z, env, qinfo, edns, repinfo, buf, temp, ld, lzt); + r = local_zones_zone_answer(z, env, qinfo, edns, repinfo, buf, temp, ld, lzt); lock_rw_unlock(&z->lock); return r && !qinfo->local_alias; /* see above */ } @@ -1669,6 +1685,7 @@ const char* local_zone_type2str(enum localzone_type t) case local_zone_always_transparent: return "always_transparent"; case local_zone_always_refuse: return "always_refuse"; case local_zone_always_nxdomain: return "always_nxdomain"; + case local_zone_always_nodata: return "always_nodata"; case local_zone_noview: return "noview"; } return "badtyped"; @@ -1700,6 +1717,8 @@ int local_zone_str2type(const char* type, enum localzone_type* t) *t = local_zone_always_refuse; else if(strcmp(type, "always_nxdomain") == 0) *t = local_zone_always_nxdomain; + else if(strcmp(type, "always_nodata") == 0) + *t = local_zone_always_nodata; else if(strcmp(type, "noview") == 0) *t = local_zone_noview; else if(strcmp(type, "nodefault") == 0) diff --git a/services/localzone.h b/services/localzone.h index 1d6caeff2..96d67dbf3 100644 --- a/services/localzone.h +++ b/services/localzone.h @@ -46,6 +46,7 @@ #include "util/storage/dnstree.h" #include "util/module.h" #include "services/view.h" +#include "sldns/sbuffer.h" struct packed_rrset_data; struct ub_packed_rrset_key; struct regional; @@ -91,6 +92,8 @@ enum localzone_type { local_zone_always_refuse, /** answer with nxdomain, even when there is local data */ local_zone_always_nxdomain, + /** answer with noerror/nodata, even when there is local data */ + local_zone_always_nodata, /** answer not from the view, but global or no-answer */ local_zone_noview }; @@ -310,6 +313,25 @@ int local_zones_answer(struct local_zones* zones, struct module_env* env, struct config_strlist** tag_datas, size_t tag_datas_size, char** tagname, int num_tags, struct view* view); +/** + * Answer using the local zone only (not local data used). + * @param z: zone for query. + * @param env: module environment. + * @param qinfo: query. + * @param edns: edns from query. + * @param repinfo: source address for checks. may be NULL. + * @param buf: buffer for answer. + * @param temp: temp region for encoding. + * @param ld: local data, if NULL, no such name exists in localdata. + * @param lz_type: type of the local zone. + * @return 1 if a reply is to be sent, 0 if not. + */ +int +local_zones_zone_answer(struct local_zone* z, struct module_env* env, + struct query_info* qinfo, struct edns_data* edns, + struct comm_reply* repinfo, sldns_buffer* buf, struct regional* temp, + struct local_data* ld, enum localzone_type lz_type); + /** * Parse the string into localzone type. * @@ -340,6 +362,22 @@ const char* local_zone_type2str(enum localzone_type t); struct local_zone* local_zones_find(struct local_zones* zones, uint8_t* name, size_t len, int labs, uint16_t dclass); +/** + * Find zone that with exactly or smaller name/class + * User must lock the tree or result zone. + * @param zones: the zones tree + * @param name: dname to lookup + * @param len: length of name. + * @param labs: labelcount of name. + * @param dclass: class to lookup. + * @param exact: 1 on return is this is an exact match. + * @return the exact or smaller local_zone or NULL. + */ +struct local_zone* +local_zones_find_le(struct local_zones* zones, + uint8_t* name, size_t len, int labs, uint16_t dclass, + int* exact); + /** * Add a new zone. Caller must hold the zones lock. * Adjusts the other zones as well (parent pointers) after insertion. @@ -501,6 +539,8 @@ enum respip_action { respip_always_refuse = local_zone_always_refuse, /** answer with 'no such domain' response */ respip_always_nxdomain = local_zone_always_nxdomain, + /** answer with nodata response */ + respip_always_nodata = local_zone_always_nodata, /* The rest of the values are only possible as * access-control-tag-action */ @@ -515,4 +555,16 @@ enum respip_action { respip_typetransparent = local_zone_typetransparent, }; +int +local_data_answer(struct local_zone* z, struct module_env* env, + struct query_info* qinfo, struct edns_data* edns, + struct comm_reply* repinfo, sldns_buffer* buf, + struct regional* temp, int labs, struct local_data** ldp, + enum localzone_type lz_type, int tag, struct config_strlist** tag_datas, + size_t tag_datas_size, char** tagname, int num_tags); + +int +local_zone_enter_rr(struct local_zone* z, uint8_t* nm, size_t nmlen, + int nmlabs, uint16_t rrtype, uint16_t rrclass, time_t ttl, + uint8_t* rdata, size_t rdata_len, const char* rrstr); #endif /* SERVICES_LOCALZONE_H */ diff --git a/sldns/str2wire.c b/sldns/str2wire.c index 1a51bb695..d7b3471d8 100644 --- a/sldns/str2wire.c +++ b/sldns/str2wire.c @@ -165,7 +165,7 @@ int sldns_str2wire_dname_buf_origin(const char* str, uint8_t* buf, size_t* len, uint8_t* sldns_str2wire_dname(const char* str, size_t* len) { - uint8_t dname[LDNS_MAX_DOMAINLEN+1]; + uint8_t dname[LDNS_MAX_DOMAINLEN]; *len = sizeof(dname); if(sldns_str2wire_dname_buf(str, dname, len) == 0) { uint8_t* r = (uint8_t*)malloc(*len); diff --git a/util/config_file.c b/util/config_file.c index 9b60254d7..c12dc88d8 100644 --- a/util/config_file.c +++ b/util/config_file.c @@ -1268,6 +1268,8 @@ config_delauth(struct config_auth* p) config_delstrlist(p->urls); config_delstrlist(p->allow_notify); free(p->zonefile); + if(p->rpz_taglist) + free(p->rpz_taglist); free(p); } diff --git a/util/config_file.h b/util/config_file.h index 3cffdbff9..f8aa25ccf 100644 --- a/util/config_file.h +++ b/util/config_file.h @@ -631,6 +631,13 @@ struct config_auth { /** fallback to recursion to authorities if zone expired and other * reasons perhaps (like, query bogus) */ int fallback_enabled; + /** this zone is used to create local-zone policies */ + int isrpz; + /** rpz tags (or NULL) */ + uint8_t* rpz_taglist; + /** length of the taglist (in bytes) */ + size_t rpz_taglistlen; + }; /** diff --git a/util/configlexer.c b/util/configlexer.c index 2d9be6217..12abf841c 100644 --- a/util/configlexer.c +++ b/util/configlexer.c @@ -10,7 +10,7 @@ #define FLEX_SCANNER #define YY_FLEX_MAJOR_VERSION 2 #define YY_FLEX_MINOR_VERSION 6 -#define YY_FLEX_SUBMINOR_VERSION 1 +#define YY_FLEX_SUBMINOR_VERSION 4 #if YY_FLEX_SUBMINOR_VERSION > 0 #define FLEX_BETA #endif @@ -85,10 +85,16 @@ typedef unsigned int flex_uint32_t; #define UINT32_MAX (4294967295U) #endif +#ifndef SIZE_MAX +#define SIZE_MAX (~(size_t)0) +#endif + #endif /* ! C99 */ #endif /* ! FLEXINT_H */ +/* begin standard C++ headers. */ + /* TODO: this is always defined, so inline it */ #define yyconst const @@ -101,32 +107,26 @@ typedef unsigned int flex_uint32_t; /* Returned upon end-of-file. */ #define YY_NULL 0 -/* Promotes a possibly negative, possibly signed char to an unsigned - * integer for use as an array index. If the signed char is negative, - * we want to instead treat it as an 8-bit unsigned char, hence the - * double cast. +/* Promotes a possibly negative, possibly signed char to an + * integer in range [0..255] for use as an array index. */ -#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c) +#define YY_SC_TO_UI(c) ((YY_CHAR) (c)) /* Enter a start condition. This macro really ought to take a parameter, * but we do it the disgusting crufty way forced on us by the ()-less * definition of BEGIN. */ #define BEGIN (yy_start) = 1 + 2 * - /* Translate the current start state into a value that can be later handed * to BEGIN to return to the state. The YYSTATE alias is for lex * compatibility. */ #define YY_START (((yy_start) - 1) / 2) #define YYSTATE YY_START - /* Action number for EOF rule of a given start state. */ #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) - /* Special action meaning "start processing a new file". */ -#define YY_NEW_FILE yyrestart(yyin ) - +#define YY_NEW_FILE yyrestart( yyin ) #define YY_END_OF_BUFFER_CHAR 0 /* Size of default input buffer. */ @@ -163,7 +163,7 @@ extern FILE *yyin, *yyout; #define EOB_ACT_CONTINUE_SCAN 0 #define EOB_ACT_END_OF_FILE 1 #define EOB_ACT_LAST_MATCH 2 - + #define YY_LESS_LINENO(n) #define YY_LINENO_REWIND_TO(ptr) @@ -172,7 +172,7 @@ extern FILE *yyin, *yyout; do \ { \ /* Undo effects of setting up yytext. */ \ - yy_size_t yyless_macro_arg = (n); \ + int yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg);\ *yy_cp = (yy_hold_char); \ YY_RESTORE_YY_MORE_OFFSET \ @@ -180,7 +180,6 @@ extern FILE *yyin, *yyout; YY_DO_BEFORE_ACTION; /* set up yytext again */ \ } \ while ( 0 ) - #define unput(c) yyunput( c, (yytext_ptr) ) #ifndef YY_STRUCT_YY_BUFFER_STATE @@ -223,7 +222,7 @@ struct yy_buffer_state int yy_bs_lineno; /**< The line count. */ int yy_bs_column; /**< The column count. */ - + /* Whether to try to fill the input buffer when we reach the * end of it. */ @@ -262,7 +261,6 @@ static YY_BUFFER_STATE * yy_buffer_stack = NULL; /**< Stack as an array. */ #define YY_CURRENT_BUFFER ( (yy_buffer_stack) \ ? (yy_buffer_stack)[(yy_buffer_stack_top)] \ : NULL) - /* Same as previous macro, but useful when we know that the buffer stack is not * NULL or when we need an lvalue. For internal use only. */ @@ -283,62 +281,56 @@ static int yy_start = 0; /* start state number */ */ static int yy_did_buffer_switch_on_eof; -void yyrestart (FILE *input_file ); -void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer ); -YY_BUFFER_STATE yy_create_buffer (FILE *file,int size ); -void yy_delete_buffer (YY_BUFFER_STATE b ); -void yy_flush_buffer (YY_BUFFER_STATE b ); -void yypush_buffer_state (YY_BUFFER_STATE new_buffer ); -void yypop_buffer_state (void ); +void yyrestart ( FILE *input_file ); +void yy_switch_to_buffer ( YY_BUFFER_STATE new_buffer ); +YY_BUFFER_STATE yy_create_buffer ( FILE *file, int size ); +void yy_delete_buffer ( YY_BUFFER_STATE b ); +void yy_flush_buffer ( YY_BUFFER_STATE b ); +void yypush_buffer_state ( YY_BUFFER_STATE new_buffer ); +void yypop_buffer_state ( void ); -static void yyensure_buffer_stack (void ); -static void yy_load_buffer_state (void ); -static void yy_init_buffer (YY_BUFFER_STATE b,FILE *file ); +static void yyensure_buffer_stack ( void ); +static void yy_load_buffer_state ( void ); +static void yy_init_buffer ( YY_BUFFER_STATE b, FILE *file ); +#define YY_FLUSH_BUFFER yy_flush_buffer( YY_CURRENT_BUFFER ) -#define YY_FLUSH_BUFFER yy_flush_buffer(YY_CURRENT_BUFFER ) +YY_BUFFER_STATE yy_scan_buffer ( char *base, yy_size_t size ); +YY_BUFFER_STATE yy_scan_string ( const char *yy_str ); +YY_BUFFER_STATE yy_scan_bytes ( const char *bytes, int len ); -YY_BUFFER_STATE yy_scan_buffer (char *base,yy_size_t size ); -YY_BUFFER_STATE yy_scan_string (yyconst char *yy_str ); -YY_BUFFER_STATE yy_scan_bytes (yyconst char *bytes,int len ); - -void *yyalloc (yy_size_t ); -void *yyrealloc (void *,yy_size_t ); -void yyfree (void * ); +void *yyalloc ( yy_size_t ); +void *yyrealloc ( void *, yy_size_t ); +void yyfree ( void * ); #define yy_new_buffer yy_create_buffer - #define yy_set_interactive(is_interactive) \ { \ if ( ! YY_CURRENT_BUFFER ){ \ yyensure_buffer_stack (); \ YY_CURRENT_BUFFER_LVALUE = \ - yy_create_buffer(yyin,YY_BUF_SIZE ); \ + yy_create_buffer( yyin, YY_BUF_SIZE ); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ } - #define yy_set_bol(at_bol) \ { \ if ( ! YY_CURRENT_BUFFER ){\ yyensure_buffer_stack (); \ YY_CURRENT_BUFFER_LVALUE = \ - yy_create_buffer(yyin,YY_BUF_SIZE ); \ + yy_create_buffer( yyin, YY_BUF_SIZE ); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ } - #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) /* Begin user sect3 */ - -typedef unsigned char YY_CHAR; +typedef flex_uint8_t YY_CHAR; FILE *yyin = NULL, *yyout = NULL; typedef int yy_state_type; extern int yylineno; - int yylineno = 1; extern char *yytext; @@ -347,10 +339,10 @@ extern char *yytext; #endif #define yytext_ptr yytext -static yy_state_type yy_get_previous_state (void ); -static yy_state_type yy_try_NUL_trans (yy_state_type current_state ); -static int yy_get_next_buffer (void ); -static void yynoreturn yy_fatal_error (yyconst char* msg ); +static yy_state_type yy_get_previous_state ( void ); +static yy_state_type yy_try_NUL_trans ( yy_state_type current_state ); +static int yy_get_next_buffer ( void ); +static void yynoreturn yy_fatal_error ( const char* msg ); /* Done after the current pattern has been matched and before the * corresponding action - sets up yytext. @@ -362,9 +354,8 @@ static void yynoreturn yy_fatal_error (yyconst char* msg ); (yy_hold_char) = *yy_cp; \ *yy_cp = '\0'; \ (yy_c_buf_p) = yy_cp; - -#define YY_NUM_RULES 291 -#define YY_END_OF_BUFFER 292 +#define YY_NUM_RULES 293 +#define YY_END_OF_BUFFER 294 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info @@ -372,331 +363,331 @@ struct yy_trans_info flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static yyconst flex_int16_t yy_accept[2905] = +static const flex_int16_t yy_accept[2911] = { 0, - 1, 1, 273, 273, 277, 277, 281, 281, 285, 285, - 1, 1, 292, 289, 1, 271, 271, 290, 2, 290, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 273, 274, 274, 275, 290, 277, 278, 278, - 279, 290, 284, 281, 282, 282, 283, 290, 285, 286, - 286, 287, 290, 288, 272, 2, 276, 290, 288, 289, - 0, 1, 2, 2, 2, 2, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, + 1, 1, 275, 275, 279, 279, 283, 283, 287, 287, + 1, 1, 294, 291, 1, 273, 273, 292, 2, 292, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 275, 276, 276, 277, 292, 279, 280, 280, + 281, 292, 286, 283, 284, 284, 285, 292, 287, 288, + 288, 289, 292, 290, 274, 2, 278, 292, 290, 291, + 0, 1, 2, 2, 2, 2, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 273, - 0, 277, 0, 284, 0, 281, 285, 0, 288, 0, - 2, 2, 288, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 275, 0, 279, 0, 286, 0, 283, 287, 0, 290, + 0, 2, 2, 290, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 288, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 290, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 114, - 289, 289, 289, 289, 289, 289, 289, 288, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 112, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 116, 291, 291, 291, 291, 291, + 291, 291, 290, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 96, 289, 289, 289, 289, 289, 289, 8, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 119, 289, 288, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 96, 291, 291, 291, 291, + 291, 291, 8, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 113, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 121, 291, + 290, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 288, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 54, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 214, 289, 14, 15, 289, 18, - 17, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 290, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 54, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 216, 291, 14, 15, 291, 18, 17, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 113, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 198, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 3, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 115, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 200, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 3, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 289, 288, 289, 289, 289, 289, 289, 289, 289, 264, - 289, 289, 263, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 280, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 57, 289, 238, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 58, 289, 289, + 291, 291, 291, 291, 291, 291, 291, 290, 291, 291, + 291, 291, 291, 291, 291, 266, 291, 291, 265, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 282, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 57, 291, 240, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 187, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 20, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 138, 289, 289, - 280, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 94, 289, 289, 289, 289, 289, 289, 289, 246, + 291, 291, 291, 58, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 189, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 20, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 140, 291, 291, 282, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 94, 291, 291, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 159, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 137, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 93, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, + 291, 291, 291, 291, 291, 248, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 161, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 139, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 93, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 31, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 32, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 55, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 112, 289, 289, 289, 289, 289, - 111, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 56, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 160, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, + 291, 291, 291, 291, 291, 291, 31, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 32, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 55, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 114, 291, 291, 291, 291, 291, 111, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 56, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 162, 291, 291, 291, 291, 291, 291, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 45, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 229, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 49, 289, 50, 289, 289, 289, 289, 289, 97, 289, - 98, 289, 289, 289, 289, 95, 289, 289, 289, 289, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 45, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 231, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 49, 291, 50, 291, + 291, 291, 291, 291, 97, 291, 98, 291, 291, 291, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 7, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 207, 289, 289, 289, 289, 140, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 46, 289, 289, + 291, 95, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 7, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 209, 291, + 291, 291, 291, 142, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 179, 289, 178, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 16, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 59, 289, 289, 289, 289, 289, 289, - 289, 289, 186, 289, 289, 289, 289, 289, 289, 100, - 289, 99, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 170, 289, 289, 289, 289, 289, 289, 289, + 291, 291, 291, 46, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 181, 291, 180, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 16, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 59, + 291, 291, 291, 291, 291, 291, 291, 291, 188, 291, + 291, 291, 291, 291, 291, 100, 291, 99, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 172, 291, - 289, 120, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 78, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 82, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 53, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 173, 174, 289, 289, 289, 240, 289, + 291, 291, 291, 291, 291, 291, 291, 122, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 78, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 82, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 53, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 175, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 6, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 244, 289, 289, 289, 265, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 41, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 43, 289, 289, 289, 289, 289, 289, 289, 289, 166, - 289, 289, 289, 115, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 191, 289, 167, 289, 289, 289, + 176, 291, 291, 291, 242, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 6, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 246, 291, + 291, 291, 267, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 41, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 43, 291, 291, 291, + 291, 291, 291, 291, 291, 168, 291, 291, 291, 117, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 204, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 44, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 117, 105, 289, - 106, 289, 289, 289, 104, 289, 289, 289, 289, 289, - 289, 289, 289, 135, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 228, 289, 289, 289, 289, - 289, 289, 289, 289, 168, 289, 289, 289, 289, 289, - 171, 289, 177, 289, 289, 289, 289, 289, 203, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 92, 289, 289, 289, 289, 289, 289, + 193, 291, 169, 291, 291, 291, 206, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 44, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 119, 105, 291, 106, 291, 291, 291, + 104, 291, 291, 291, 291, 291, 291, 291, 291, 137, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 230, 291, 291, 291, 291, 291, 291, 291, 291, + 170, 291, 291, 291, 291, 291, 173, 291, 179, 291, + 291, 291, 291, 291, 205, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 92, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 51, 289, 289, 289, 25, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 19, - 289, 289, 289, 289, 289, 289, 26, 35, 289, 145, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 67, - 69, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 248, 289, 289, 289, 215, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 107, 289, 289, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 51, 291, 291, 291, 25, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 19, 291, 291, 291, 291, + 291, 291, 26, 35, 291, 147, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 67, 69, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 250, 291, 291, 291, 217, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 289, 289, 289, 289, 289, 289, 289, 134, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 259, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 139, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 197, 289, 289, 289, - 289, 289, 289, 289, 289, 268, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 156, 289, 289, 289, 289, - 289, 289, 289, 289, 101, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, + 291, 291, 291, 107, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 136, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 261, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 141, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 199, 291, 291, 291, 291, 291, 291, 291, + 291, 270, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 158, 291, 291, 291, 291, 291, 291, 291, 291, + 101, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 289, 289, 289, 289, 151, 289, 161, 289, 289, 289, - 289, 289, 123, 289, 289, 289, 289, 289, 88, 289, - 289, 289, 289, 189, 289, 289, 289, 289, 289, 289, - 205, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 220, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 116, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 155, 289, 289, 289, 289, 289, - 70, 71, 289, 289, 289, 289, 289, 52, 289, 289, - 289, 289, 289, 77, 162, 289, 180, 289, 208, 289, - 289, 172, 241, 289, 289, 289, 289, 289, 63, 289, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 153, 291, 163, 291, 291, 291, 291, 291, 125, 291, + 291, 291, 291, 291, 88, 291, 291, 291, 291, 191, + 291, 291, 291, 291, 291, 291, 207, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 222, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 118, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 157, 291, 291, 291, 291, 291, 70, 71, 291, 291, + 291, 291, 291, 52, 291, 291, 291, 291, 291, 77, + 164, 291, 182, 291, 210, 291, 291, 174, 243, 291, - 164, 289, 289, 289, 289, 289, 9, 289, 289, 289, - 91, 289, 289, 289, 289, 233, 289, 289, 289, 188, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 154, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 141, 289, 247, 289, - 289, 289, 289, 219, 289, 289, 289, 289, 289, 289, - 289, 289, 199, 289, 289, 289, 289, 239, 289, 289, + 291, 291, 291, 291, 63, 291, 166, 291, 291, 291, + 291, 291, 9, 291, 291, 291, 91, 291, 291, 291, + 291, 235, 291, 291, 291, 190, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 156, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 143, 291, 249, 291, 291, 291, 291, 221, + 291, 291, 291, 291, 291, 291, 291, 291, 201, 291, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 262, 289, 163, 289, 289, 289, 289, 289, - 289, 289, 62, 64, 289, 289, 289, 289, 289, 289, - 289, 90, 289, 289, 289, 289, 231, 289, 289, 289, - 243, 289, 289, 289, 289, 289, 289, 289, 193, 33, - 27, 29, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 34, 289, 28, 30, 289, 289, 289, 289, 289, - 289, 289, 289, 87, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, + 291, 291, 291, 241, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 264, 291, + 165, 291, 291, 291, 291, 291, 291, 291, 62, 64, + 291, 291, 291, 291, 291, 291, 291, 90, 291, 291, + 291, 291, 233, 291, 291, 291, 245, 291, 291, 291, + 291, 291, 291, 291, 195, 33, 27, 29, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 34, 291, 28, + 30, 291, 291, 291, 291, 291, 291, 291, 291, 87, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 289, 195, 192, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 61, 289, 289, - 118, 289, 108, 289, 289, 289, 289, 289, 289, 289, - 289, 136, 13, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 257, 289, 260, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 12, 289, 289, 21, 289, - 289, 289, 237, 289, 289, 289, 245, 289, 65, 289, - 201, 289, 289, 194, 289, 289, 60, 289, 289, 289, - 289, 22, 289, 42, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 150, 149, 289, 289, + 291, 291, 291, 291, 291, 291, 291, 197, 194, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 61, 291, 291, 120, 291, 108, 291, + 291, 291, 291, 291, 291, 291, 291, 138, 13, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 259, 291, + 262, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 12, 291, 291, 21, 291, 291, 291, 239, 291, + 291, 291, 247, 291, 65, 291, 203, 291, 291, 196, + 291, 291, 60, 291, 291, 291, 291, 22, 291, 42, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 289, 289, 289, 289, 289, 289, 289, 196, 190, 289, - 206, 289, 289, 249, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 72, 289, - 289, 289, 232, 289, 289, 289, 289, 176, 289, 289, - 289, 289, 200, 289, 289, 289, 289, 289, 289, 289, - 289, 266, 267, 147, 66, 289, 289, 157, 289, 289, - 102, 103, 289, 289, 289, 289, 142, 289, 144, 289, - 181, 289, 289, 289, 289, 148, 289, 289, 209, 289, - 289, 289, 289, 289, 289, 289, 125, 289, 289, 289, + 291, 291, 152, 151, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 198, 192, 291, 208, 291, 291, 251, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 72, 291, 291, 291, 234, 291, + 291, 291, 291, 178, 291, 291, 291, 291, 202, 291, + 291, 291, 291, 291, 291, 291, 291, 268, 269, 149, + 66, 291, 291, 159, 291, 291, 102, 103, 291, 291, + 291, 291, 144, 291, 146, 291, 183, 291, 291, 291, + 291, 150, 291, 291, 211, 291, 291, 291, 291, 291, - 289, 289, 289, 289, 289, 289, 289, 289, 216, 289, - 289, 289, 23, 289, 242, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 182, 289, 289, 230, - 289, 261, 289, 175, 289, 289, 289, 289, 47, 289, - 289, 289, 289, 4, 289, 289, 124, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 212, 36, 37, 289, 289, 289, 289, - 289, 289, 289, 250, 289, 289, 289, 289, 289, 289, - 218, 289, 289, 289, 185, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 75, 289, 48, 236, 289, 213, + 291, 291, 127, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 218, 291, 291, 291, 23, 291, + 244, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 184, 291, 291, 232, 291, 263, 291, 177, + 291, 291, 291, 291, 47, 291, 291, 291, 291, 4, + 291, 291, 126, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 214, + 36, 37, 291, 291, 291, 291, 291, 291, 291, 252, + 291, 291, 291, 291, 291, 291, 220, 291, 291, 291, + 187, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 289, 289, 289, 289, 11, 289, 289, 289, 289, 289, - 289, 289, 183, 79, 289, 39, 289, 289, 289, 289, - 289, 289, 289, 289, 153, 289, 289, 289, 289, 289, - 127, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 217, 121, 289, 289, 109, 110, 289, 289, 289, 81, - 85, 80, 289, 73, 289, 289, 289, 289, 289, 10, - 289, 289, 289, 234, 289, 289, 270, 38, 289, 289, - 289, 289, 289, 152, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 86, 84, 289, 74, 258, 289, 289, 289, + 75, 291, 48, 238, 291, 215, 291, 291, 291, 291, + 11, 291, 291, 291, 291, 291, 291, 291, 185, 79, + 291, 39, 291, 291, 291, 291, 291, 291, 291, 291, + 155, 291, 291, 291, 291, 291, 129, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 219, 123, 291, 291, + 109, 110, 291, 291, 291, 81, 85, 80, 291, 73, + 291, 291, 291, 291, 291, 10, 291, 291, 291, 236, + 291, 291, 272, 38, 291, 291, 291, 291, 291, 154, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 86, 84, - 289, 289, 289, 289, 169, 289, 289, 289, 184, 289, - 289, 289, 289, 289, 289, 289, 289, 143, 68, 289, - 289, 289, 289, 289, 251, 289, 289, 289, 289, 289, - 289, 289, 122, 289, 83, 128, 129, 132, 133, 130, - 131, 76, 289, 235, 289, 289, 146, 289, 289, 289, - 289, 289, 211, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 158, 40, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 89, 289, 210, 289, 227, 255, 289, 289, 289, 289, + 291, 74, 260, 291, 291, 291, 291, 291, 291, 291, + 171, 291, 291, 291, 186, 291, 291, 291, 291, 291, + 291, 291, 291, 145, 68, 291, 291, 291, 291, 291, + 253, 291, 291, 291, 291, 291, 291, 291, 124, 291, + 83, 130, 131, 134, 135, 132, 133, 76, 291, 237, + 291, 291, 148, 291, 291, 291, 291, 291, 213, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 160, 40, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 89, 291, 212, 291, - 289, 289, 289, 289, 289, 289, 5, 289, 202, 289, - 289, 256, 289, 289, 289, 289, 289, 289, 289, 289, - 24, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 126, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 165, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 252, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 269, 289, 289, 223, 289, 289, 289, 289, - 289, 253, 289, 289, 289, 289, 289, 289, 254, 289, - 289, 289, 221, 289, 224, 225, 289, 289, 289, 289, + 229, 257, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 5, 291, 204, 291, 291, 258, 291, 291, + 291, 291, 291, 291, 291, 291, 24, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 128, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 167, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 254, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 271, 291, + 291, 225, 291, 291, 291, 291, 291, 255, 291, 291, + 291, 291, 291, 291, 256, 291, 291, 291, 223, 291, - 289, 222, 226, 0 + 226, 227, 291, 291, 291, 291, 291, 224, 228, 0 } ; -static yyconst YY_CHAR yy_ec[256] = +static const YY_CHAR yy_ec[256] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, @@ -728,7 +719,7 @@ static yyconst YY_CHAR yy_ec[256] = 1, 1, 1, 1, 1 } ; -static yyconst YY_CHAR yy_meta[41] = +static const YY_CHAR yy_meta[41] = { 0, 1, 2, 3, 4, 5, 1, 6, 1, 1, 1, 1, 1, 7, 1, 1, 1, 1, 1, 1, 1, @@ -736,657 +727,659 @@ static yyconst YY_CHAR yy_meta[41] = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } ; -static yyconst flex_uint16_t yy_base[2919] = +static const flex_int16_t yy_base[2925] = { 0, 0, 0, 38, 41, 44, 46, 59, 65, 71, 77, - 90, 112, 2146, 1869, 81, 5674, 5674, 5674, 96, 52, + 90, 112, 2129, 1866, 81, 5681, 5681, 5681, 96, 52, 106, 63, 107, 111, 70, 128, 130, 133, 57, 88, - 76, 135, 141, 117, 148, 145, 160, 164, 185, 176, - 191, 152, 1830, 5674, 5674, 5674, 107, 1790, 5674, 5674, - 5674, 165, 1674, 1331, 5674, 5674, 5674, 211, 1221, 5674, - 5674, 5674, 180, 1211, 5674, 217, 5674, 221, 168, 962, - 225, 189, 0, 232, 0, 0, 226, 189, 85, 221, - 114, 227, 234, 156, 219, 235, 239, 236, 238, 132, - 246, 242, 241, 252, 244, 247, 266, 243, 258, 273, + 76, 135, 141, 117, 148, 145, 160, 164, 185, 177, + 189, 152, 1744, 5681, 5681, 5681, 107, 1174, 5681, 5681, + 5681, 165, 1056, 933, 5681, 5681, 5681, 211, 839, 5681, + 5681, 5681, 180, 829, 5681, 217, 5681, 221, 168, 761, + 225, 231, 0, 237, 0, 0, 226, 231, 85, 180, + 114, 238, 239, 156, 234, 206, 240, 232, 200, 132, + 253, 244, 245, 248, 256, 257, 264, 271, 249, 277, - 275, 187, 277, 278, 267, 274, 280, 283, 287, 289, - 295, 297, 298, 299, 304, 305, 306, 311, 307, 315, - 309, 313, 330, 318, 329, 325, 320, 335, 336, 339, - 340, 343, 345, 342, 346, 350, 349, 355, 357, 907, - 373, 754, 376, 671, 382, 632, 365, 386, 198, 390, - 394, 0, 386, 374, 396, 388, 392, 393, 257, 391, - 395, 397, 398, 400, 402, 415, 404, 413, 421, 423, - 427, 424, 431, 434, 435, 436, 437, 419, 448, 446, - 451, 443, 452, 454, 455, 458, 459, 474, 460, 461, - 410, 468, 476, 478, 485, 470, 488, 489, 486, 493, + 279, 262, 282, 285, 270, 272, 291, 293, 290, 299, + 301, 284, 302, 305, 310, 312, 311, 315, 313, 319, + 322, 318, 324, 327, 326, 193, 221, 334, 329, 340, + 342, 325, 348, 349, 350, 353, 354, 357, 363, 359, + 699, 379, 670, 381, 596, 388, 450, 365, 392, 278, + 396, 400, 0, 377, 392, 401, 367, 394, 396, 402, + 261, 398, 399, 403, 405, 406, 418, 407, 416, 422, + 426, 430, 427, 434, 424, 437, 439, 440, 429, 451, + 453, 454, 446, 455, 456, 458, 461, 462, 463, 472, + 465, 473, 484, 479, 488, 492, 475, 493, 496, 491, - 491, 501, 503, 499, 500, 502, 504, 505, 509, 510, - 512, 514, 517, 515, 516, 520, 522, 521, 529, 523, - 534, 535, 542, 537, 538, 544, 541, 555, 556, 547, - 558, 551, 559, 560, 565, 568, 575, 570, 567, 571, - 579, 574, 577, 578, 582, 580, 594, 601, 592, 599, - 602, 600, 605, 606, 607, 608, 584, 617, 610, 581, - 622, 628, 612, 626, 631, 618, 614, 633, 635, 637, - 644, 640, 647, 643, 648, 649, 650, 652, 661, 656, - 659, 658, 660, 662, 664, 665, 668, 666, 674, 669, - 678, 680, 688, 686, 685, 698, 690, 691, 695, 701, + 503, 499, 506, 507, 502, 498, 508, 510, 513, 515, + 516, 518, 517, 520, 521, 523, 525, 527, 528, 532, + 534, 535, 546, 541, 548, 543, 544, 551, 547, 554, + 558, 562, 555, 570, 565, 567, 568, 572, 579, 582, + 583, 575, 584, 578, 580, 586, 587, 588, 591, 601, + 606, 603, 604, 611, 610, 612, 613, 615, 616, 592, + 627, 619, 618, 632, 637, 623, 635, 638, 628, 630, + 640, 642, 647, 654, 649, 657, 650, 659, 658, 660, + 664, 671, 655, 666, 667, 668, 672, 674, 676, 678, + 680, 685, 683, 687, 691, 695, 693, 692, 705, 697, - 693, 708, 702, 723, 712, 724, 713, 705, 694, 719, - 732, 729, 735, 737, 738, 739, 740, 741, 742, 750, - 745, 748, 755, 758, 762, 766, 746, 772, 747, 776, - 770, 774, 781, 803, 778, 768, 780, 782, 785, 5674, - 808, 786, 828, 792, 787, 815, 810, 812, 801, 817, - 825, 818, 829, 813, 821, 835, 851, 836, 838, 846, - 848, 852, 850, 860, 861, 853, 856, 864, 875, 867, - 870, 871, 882, 874, 872, 877, 881, 883, 887, 896, - 889, 897, 884, 898, 901, 904, 902, 908, 905, 909, - 912, 926, 906, 923, 928, 925, 931, 933, 935, 936, + 700, 702, 708, 709, 715, 719, 730, 721, 734, 726, + 727, 735, 736, 739, 747, 740, 748, 749, 750, 751, + 753, 756, 716, 5681, 755, 759, 766, 767, 769, 776, + 768, 783, 778, 757, 790, 789, 791, 792, 814, 765, + 777, 793, 794, 797, 5681, 800, 806, 838, 807, 812, + 824, 810, 825, 826, 827, 834, 828, 855, 832, 831, + 848, 865, 844, 836, 860, 861, 863, 864, 872, 870, + 873, 874, 875, 883, 878, 881, 882, 894, 884, 885, + 890, 888, 896, 895, 905, 907, 900, 910, 911, 912, + 914, 913, 917, 915, 932, 929, 937, 918, 934, 941, - 937, 938, 946, 943, 942, 944, 949, 953, 955, 959, - 952, 945, 961, 966, 970, 967, 975, 977, 960, 983, - 5674, 985, 968, 980, 978, 990, 991, 5674, 993, 992, - 994, 1001, 996, 1004, 997, 1000, 1007, 1022, 999, 1006, - 1023, 1020, 1021, 783, 1024, 1025, 1027, 1028, 1030, 1031, - 1033, 1036, 1053, 1037, 1040, 1038, 1039, 1044, 1046, 1065, - 1048, 1051, 1062, 1066, 1077, 1064, 1081, 1068, 1076, 1085, - 1083, 1087, 1089, 1090, 1092, 1093, 1094, 1095, 1097, 1098, - 1099, 1103, 5674, 1101, 1111, 1119, 1118, 1105, 1121, 1122, - 1123, 1124, 1125, 1126, 1131, 1127, 1144, 1134, 1137, 1147, + 942, 923, 948, 944, 946, 950, 952, 960, 955, 956, + 958, 961, 962, 964, 968, 969, 970, 972, 974, 978, + 975, 985, 976, 983, 990, 5681, 992, 994, 995, 996, + 997, 998, 5681, 1000, 999, 1002, 1007, 1012, 1014, 1006, + 1009, 1022, 1031, 1024, 1026, 1034, 1013, 1032, 1035, 1038, + 1036, 1041, 1039, 1042, 1045, 1043, 1050, 1064, 5681, 1048, + 1051, 1049, 1055, 1060, 1067, 1077, 1058, 1087, 1069, 1079, + 1095, 1075, 1093, 1081, 1094, 1097, 1099, 1101, 1103, 1105, + 1106, 1107, 1108, 1110, 1111, 1109, 1112, 1113, 5681, 1116, + 1129, 1137, 1122, 1123, 1132, 1135, 1139, 1140, 1141, 1142, - 1145, 1148, 1132, 1150, 1153, 1152, 1154, 1156, 1167, 1162, - 1160, 1169, 1177, 1179, 1181, 1182, 1164, 1183, 1184, 1174, - 1187, 1188, 1192, 1190, 1196, 1194, 1205, 1200, 1201, 1202, - 1203, 1212, 1209, 1208, 1217, 1210, 1226, 1216, 1230, 1231, - 1218, 1224, 1243, 1233, 1238, 1240, 1245, 1246, 1247, 1248, - 1251, 1253, 1254, 1256, 1255, 1258, 1259, 1262, 1263, 1265, - 1270, 1277, 1272, 1273, 1280, 1284, 1285, 1286, 1293, 1290, - 1294, 1296, 1292, 1307, 1291, 1298, 1302, 1314, 1305, 1309, - 1310, 1313, 1323, 1320, 1325, 1334, 1326, 1312, 1336, 1329, - 1339, 1335, 1340, 1342, 1343, 1344, 1351, 1346, 1347, 1352, + 1144, 1148, 1153, 1163, 1147, 1166, 1150, 1161, 1165, 1167, + 1168, 1169, 1171, 1170, 1184, 1175, 1177, 1192, 1195, 1194, + 1197, 1204, 1181, 1200, 1201, 1199, 1205, 1207, 1209, 1185, + 1211, 1212, 1221, 1219, 1217, 1220, 1222, 1232, 1224, 1227, + 1228, 1233, 1237, 1234, 1239, 1243, 1245, 1246, 1253, 1249, + 1254, 1256, 1250, 1262, 1263, 1264, 1266, 1136, 1270, 1267, + 1269, 1274, 1276, 1271, 1275, 1277, 1281, 1294, 1292, 1296, + 1297, 1301, 1287, 1295, 1308, 1307, 1310, 1311, 1313, 1321, + 1303, 1317, 1319, 1328, 1323, 1324, 1326, 1329, 1340, 1325, + 1336, 1349, 1278, 1327, 1344, 1335, 1351, 1345, 1350, 1355, - 1354, 1355, 1349, 1359, 1357, 1376, 1361, 1365, 1363, 1366, - 1374, 1379, 1380, 1381, 1383, 1384, 1386, 1387, 1389, 1390, - 1394, 1392, 1407, 1395, 1391, 1404, 1408, 1413, 1414, 1419, - 1420, 1398, 1422, 1423, 1426, 1427, 1430, 1428, 1431, 1435, - 1437, 1438, 1441, 1443, 1444, 1446, 1449, 1453, 1454, 5674, - 1448, 1461, 1459, 1460, 1462, 1466, 1468, 1475, 1470, 1473, - 1471, 1472, 1476, 1483, 5674, 1484, 5674, 5674, 1477, 5674, - 5674, 1481, 1487, 1482, 1500, 1506, 1508, 1501, 1485, 1510, - 1511, 1519, 1532, 1515, 1514, 1522, 1516, 1518, 1526, 1523, - 1527, 1537, 1542, 1548, 1546, 1554, 1545, 1517, 1538, 1556, + 1356, 1357, 1364, 1361, 1360, 1359, 1366, 1362, 1367, 1370, + 1372, 1384, 1371, 1376, 1379, 1383, 1389, 1390, 1391, 1392, + 1394, 1395, 1397, 1399, 1401, 1396, 1406, 1404, 1416, 1403, + 1409, 1420, 1422, 1425, 1424, 1427, 1434, 1423, 1435, 1436, + 1426, 1437, 1438, 1443, 1444, 1449, 1451, 1452, 1454, 1456, + 1455, 1458, 1459, 1463, 1464, 5681, 1466, 1477, 1467, 1474, + 1472, 1475, 1479, 1486, 1481, 1483, 1488, 1482, 1491, 1493, + 5681, 1494, 5681, 5681, 1496, 5681, 5681, 1492, 1504, 1503, + 1495, 1516, 1520, 1514, 1508, 1518, 1522, 1529, 1543, 1528, + 1527, 1531, 1534, 1535, 1537, 1539, 1540, 1551, 1552, 1558, - 1555, 1558, 1561, 1562, 1564, 1566, 1567, 1565, 1570, 1571, - 1578, 1576, 1574, 1590, 5674, 1586, 1594, 1598, 1595, 1602, - 1601, 1597, 1599, 1605, 1606, 1609, 1608, 1610, 1612, 1616, - 1618, 1623, 1619, 5674, 1621, 1622, 1627, 1628, 1633, 1634, - 1635, 1620, 1640, 1642, 1643, 1644, 1646, 1647, 5674, 1585, - 1652, 1648, 1654, 1655, 1660, 1661, 1656, 1663, 1664, 1665, - 1667, 1666, 1668, 1685, 1677, 1682, 1672, 1675, 1690, 1692, - 1693, 1700, 1695, 1701, 1697, 1703, 1702, 1704, 1705, 1707, - 1714, 1709, 1718, 1713, 1725, 1734, 1716, 1721, 1729, 1730, - 1731, 1736, 1738, 1739, 1743, 1744, 1751, 1746, 1748, 1750, + 1554, 1560, 1567, 1556, 1564, 1570, 1571, 1573, 1572, 1575, + 1578, 1581, 1584, 1579, 1577, 1582, 1530, 1594, 1587, 1602, + 5681, 1598, 1606, 1611, 1607, 1614, 1610, 1609, 1616, 1617, + 1618, 1621, 1620, 1619, 1623, 1628, 1631, 1635, 1630, 5681, + 1632, 1633, 1640, 1634, 1644, 1646, 1648, 1650, 1652, 1654, + 1655, 1656, 1657, 1660, 5681, 1588, 1659, 1661, 1667, 1664, + 1666, 1668, 1670, 1673, 1678, 1676, 1679, 1677, 1684, 1696, + 1680, 1694, 1691, 1697, 1698, 1700, 1702, 1709, 1701, 1713, + 1705, 1712, 1715, 1716, 1717, 1719, 1724, 1723, 1732, 1727, + 1734, 1746, 1729, 1730, 1731, 1745, 1741, 1752, 1748, 1754, - 1753, 1755, 1756, 1759, 1764, 1760, 1767, 1769, 1762, 5674, - 1770, 1772, 5674, 1773, 1775, 1797, 1776, 1779, 1780, 1785, - 1778, 1788, 1789, 1791, 1807, 1801, 1817, 1809, 1810, 1819, - 1820, 1821, 1822, 1824, 1827, 1831, 1838, 1839, 1799, 1847, - 1846, 1828, 1829, 1843, 1862, 1844, 1849, 1851, 1852, 1857, - 1855, 1859, 1866, 1853, 1871, 1874, 1875, 5674, 1883, 1884, - 1878, 1885, 1892, 1889, 1891, 1893, 1895, 1896, 1905, 1900, - 1901, 1903, 1906, 1907, 1911, 1913, 1914, 1915, 1916, 1917, - 1933, 5674, 1919, 5674, 1918, 1928, 1930, 1929, 1936, 1937, - 1939, 1940, 1941, 1938, 1950, 1959, 1942, 5674, 1956, 1963, + 1755, 1756, 1764, 1759, 1761, 1763, 1765, 1767, 1768, 1771, + 1776, 1772, 1778, 1780, 1774, 5681, 1782, 1786, 5681, 1784, + 1787, 1809, 1788, 1791, 1790, 1797, 1792, 1799, 1801, 1807, + 1810, 1813, 1829, 1819, 1822, 1824, 1831, 1832, 1834, 1835, + 1838, 1841, 1849, 1850, 1854, 1845, 1857, 1842, 1855, 1858, + 1877, 1859, 1860, 1861, 1867, 1862, 1868, 1872, 1870, 1869, + 1881, 1887, 1889, 5681, 1898, 1899, 1882, 1894, 1910, 1890, + 1905, 1802, 1906, 1909, 1914, 1911, 1912, 1913, 1916, 1919, + 1917, 1922, 1921, 1923, 1929, 1926, 1944, 5681, 1939, 5681, + 1927, 1928, 1940, 1942, 1945, 1946, 1947, 1949, 1953, 1951, - 1960, 1965, 1966, 1958, 1967, 1969, 1971, 1976, 1973, 1981, - 1974, 1979, 1983, 1984, 1987, 1990, 1991, 1992, 5674, 1999, - 1994, 2001, 2008, 1998, 2006, 2009, 2011, 2012, 2016, 2017, - 2018, 2019, 2020, 2029, 2030, 2021, 2032, 2035, 2031, 5674, - 2028, 2039, 2047, 2043, 2045, 2042, 2049, 2050, 2052, 2053, - 2054, 2057, 2060, 2061, 2069, 2070, 2062, 2066, 2074, 2067, - 2076, 2079, 2082, 2081, 2083, 2084, 2085, 5674, 2087, 2089, - 124, 2093, 2094, 2096, 2095, 2102, 2098, 2101, 2118, 2119, - 2115, 2114, 2117, 2123, 2124, 2125, 2126, 2127, 2128, 2129, - 2131, 5674, 2105, 2133, 2134, 2136, 2139, 2140, 2143, 5674, + 1964, 1968, 1957, 5681, 1950, 1973, 1974, 1976, 1969, 1971, + 1977, 1980, 1981, 1988, 1984, 1992, 1987, 1985, 1989, 1997, + 1998, 2000, 2003, 1999, 5681, 2001, 2009, 2010, 2018, 2020, + 2013, 2015, 2021, 2026, 2017, 2023, 2028, 2029, 2030, 2037, + 2040, 2036, 2039, 2045, 2052, 5681, 2038, 2047, 2055, 2053, + 2060, 2054, 2057, 2051, 2061, 2062, 2068, 2070, 2071, 2072, + 2080, 2081, 2077, 2073, 2085, 2076, 2082, 2086, 2093, 2087, + 2090, 2094, 2097, 5681, 2100, 2102, 124, 2103, 2106, 2104, + 2107, 2109, 2111, 2108, 2120, 2129, 2125, 2124, 2127, 2131, + 2133, 2134, 2135, 2136, 2137, 2138, 2140, 5681, 2142, 2143, - 2153, 2156, 2142, 2155, 2163, 2158, 2164, 2165, 2167, 2172, - 2168, 2171, 5674, 2175, 2178, 2180, 2181, 2182, 2184, 2189, - 2191, 2192, 2193, 2196, 2194, 2195, 2199, 2197, 2200, 2204, - 2213, 2203, 2205, 2210, 2214, 5674, 2226, 2215, 2224, 2217, - 2228, 2227, 2241, 2231, 2234, 2236, 2242, 2251, 2244, 2238, - 2252, 2253, 2258, 2262, 2261, 2267, 2268, 2265, 2269, 2275, - 2277, 2278, 2279, 2283, 2281, 2284, 2285, 2286, 2293, 2294, - 2291, 2302, 2300, 2307, 2305, 2310, 5674, 2311, 2312, 2295, - 2317, 2325, 2322, 2323, 2329, 2330, 2331, 2332, 2333, 2334, - 2335, 2338, 2336, 2337, 2342, 2349, 2347, 2353, 2357, 2358, + 2146, 2148, 2152, 2149, 2151, 5681, 2160, 2166, 2168, 2162, + 2174, 2154, 2173, 2178, 2179, 2180, 2181, 2184, 5681, 2187, + 2188, 2189, 2190, 2191, 2195, 2197, 2200, 2201, 2202, 2205, + 2204, 2207, 2208, 2209, 2211, 2212, 2218, 2222, 2213, 2223, + 2225, 5681, 2235, 2226, 2231, 2227, 2236, 2238, 2252, 2242, + 2244, 2249, 2253, 2263, 2256, 2248, 2265, 2266, 2255, 2264, + 2280, 2270, 2278, 2284, 2277, 2287, 2289, 2279, 2290, 2291, + 2281, 2297, 2293, 2295, 2309, 2310, 2306, 2312, 2305, 2317, + 2322, 2315, 5681, 2324, 2327, 2329, 2330, 2337, 2332, 2333, + 2334, 2335, 2340, 2341, 2343, 2349, 2345, 2352, 2346, 2353, - 5674, 2359, 2361, 2363, 2364, 2370, 2365, 2372, 2374, 2376, - 2377, 2378, 2380, 2383, 2384, 2386, 2388, 2391, 2390, 2389, - 5674, 2394, 2395, 2396, 2404, 2405, 2411, 2412, 2414, 2418, - 2402, 2419, 2421, 2422, 5674, 2430, 2432, 2429, 2433, 2431, - 2436, 2437, 2439, 2441, 5674, 2442, 2443, 2450, 2451, 2446, - 5674, 2453, 2449, 2454, 2456, 2457, 2458, 2459, 2464, 2465, - 2467, 2470, 2473, 2477, 2478, 5674, 2479, 2487, 2488, 2480, - 2491, 2482, 2492, 2493, 2497, 2501, 2495, 2510, 2512, 2513, - 2514, 2494, 2517, 2518, 2519, 2521, 2522, 5674, 2515, 2525, - 2527, 2530, 2528, 2534, 2536, 2544, 2539, 2540, 2546, 2541, + 2356, 2357, 2365, 2358, 2368, 2370, 5681, 2374, 2375, 2369, + 2376, 2379, 2382, 2384, 2386, 2389, 2390, 2391, 2393, 2395, + 2396, 2397, 2398, 2400, 2404, 2401, 5681, 2405, 2407, 2413, + 2416, 2420, 2424, 2425, 2426, 2431, 2414, 2433, 2434, 2410, + 5681, 2443, 2444, 2435, 2448, 2445, 2446, 2447, 2450, 2451, + 5681, 2452, 2453, 2461, 2462, 2457, 5681, 2466, 2459, 2464, + 2468, 2467, 2469, 2474, 2470, 2477, 2478, 2483, 2486, 2482, + 2489, 5681, 2491, 2498, 2493, 2495, 2499, 2500, 2501, 2503, + 2512, 2506, 2509, 2519, 2522, 2524, 2515, 2525, 2527, 2528, + 2529, 2531, 2530, 5681, 2532, 2537, 2538, 2539, 2544, 2541, - 2547, 2548, 2549, 2550, 2553, 2561, 2563, 2564, 2566, 2568, - 2569, 2570, 2577, 2582, 2583, 2585, 5674, 2588, 2589, 2591, - 2578, 2580, 2592, 2595, 2597, 2599, 2601, 2603, 2604, 2605, - 2612, 2616, 2613, 2620, 2617, 2622, 2614, 2625, 2626, 2627, - 2628, 2635, 2632, 2631, 2640, 2639, 2638, 2648, 2643, 2649, - 2650, 2651, 2652, 2653, 2656, 2654, 2660, 2661, 2665, 2667, - 2675, 2676, 2677, 2678, 2681, 5674, 2680, 2682, 2684, 2690, - 2693, 2694, 2696, 2698, 2703, 2688, 2695, 2705, 2715, 2711, - 5674, 2712, 5674, 2714, 2716, 2717, 2726, 2719, 5674, 2723, - 5674, 2724, 2729, 2731, 2732, 5674, 2733, 2734, 2737, 2740, + 2542, 2549, 2552, 2553, 2554, 2558, 2560, 2557, 2562, 2563, + 2566, 2565, 2569, 2579, 2574, 2581, 2577, 2585, 2588, 2592, + 2593, 2595, 5681, 2600, 2597, 2602, 2591, 2603, 2604, 2605, + 2606, 2608, 2610, 2615, 2613, 2614, 2622, 2630, 2623, 2625, + 2631, 2632, 2635, 2634, 2636, 2637, 2638, 2646, 2642, 2641, + 2654, 2645, 2652, 2659, 2649, 2660, 2661, 2662, 2663, 2665, + 2669, 2670, 2672, 2666, 2674, 2682, 2685, 2683, 2688, 2690, + 2692, 5681, 2695, 2676, 2693, 2699, 2702, 2704, 2705, 2708, + 2714, 2706, 2707, 2716, 2723, 2720, 5681, 2721, 5681, 2722, + 2724, 2727, 2737, 2730, 5681, 2733, 5681, 2735, 2741, 2742, - 2738, 2742, 2743, 2744, 2745, 2750, 2752, 2756, 2755, 2757, - 2760, 2761, 2764, 2766, 2768, 2772, 2765, 2777, 2773, 2775, - 2783, 2782, 2784, 5674, 2791, 2788, 2793, 2792, 2794, 2796, - 2797, 2799, 2800, 2802, 2805, 2810, 2803, 2816, 2819, 2831, - 2809, 2832, 5674, 2813, 2834, 2817, 2835, 5674, 2837, 2828, - 2838, 2843, 2840, 2830, 2845, 2846, 2850, 2847, 2853, 2858, - 2862, 2863, 2857, 2865, 2855, 2869, 2877, 2874, 2881, 2883, - 2891, 2887, 2875, 2878, 2867, 2889, 2890, 2900, 2901, 2897, - 2904, 2899, 2903, 2906, 2907, 2910, 2911, 2913, 2915, 2916, - 2914, 2919, 2923, 2918, 2920, 2921, 2924, 5674, 2937, 2927, + 2744, 5681, 2745, 2734, 2746, 2751, 2747, 2749, 2753, 2756, + 2757, 2763, 2759, 2765, 2766, 2767, 2769, 2774, 2773, 2775, + 2782, 2784, 2776, 2785, 2779, 2787, 2789, 2794, 2795, 5681, + 2803, 2797, 2804, 2805, 2806, 2807, 2808, 2811, 2799, 2810, + 2812, 2817, 2814, 2826, 2831, 2829, 2827, 2839, 5681, 2835, + 2838, 2840, 2842, 5681, 2841, 2843, 2844, 2850, 2852, 2853, + 2854, 2855, 2856, 2860, 2861, 2862, 2870, 2873, 2874, 2877, + 2863, 2876, 2890, 2886, 2892, 2894, 2902, 2898, 2887, 2889, + 2885, 2897, 2905, 2912, 2915, 2911, 2919, 2899, 2918, 2921, + 2924, 2910, 2914, 2925, 2926, 2927, 2930, 2931, 2938, 2933, - 2934, 2941, 2943, 2946, 2925, 2944, 2948, 2950, 2952, 2954, - 2951, 5674, 2953, 5674, 2955, 2961, 2970, 2972, 2974, 2975, - 2976, 2978, 2981, 2982, 2983, 2984, 2985, 2987, 2990, 2991, - 2996, 2997, 2998, 3012, 2995, 3000, 3002, 3007, 3009, 3014, - 5674, 3016, 3017, 3018, 3022, 3023, 3024, 3027, 3031, 3030, - 3033, 3034, 3045, 5674, 3036, 3053, 3037, 3057, 3064, 3046, - 3065, 3060, 5674, 3049, 3061, 3068, 3063, 3070, 3077, 5674, - 3072, 5674, 3067, 3074, 3081, 3078, 3082, 3083, 3084, 3085, - 3091, 3094, 3103, 3092, 3100, 3101, 3102, 3104, 3113, 3106, - 3108, 3109, 5674, 3111, 3114, 3118, 3125, 3126, 3132, 3129, + 2935, 2936, 2937, 5681, 2947, 2939, 2943, 2951, 2949, 2954, + 2956, 2957, 2960, 2961, 2963, 2962, 2965, 5681, 2967, 5681, + 2966, 2983, 2973, 2978, 2984, 2979, 2985, 2990, 2992, 2993, + 2994, 2995, 2998, 3002, 3001, 3003, 3004, 3006, 3014, 3020, + 3007, 3011, 3021, 3009, 3025, 3026, 5681, 3028, 3029, 3030, + 3032, 3033, 3035, 3036, 3034, 3044, 3045, 3049, 3056, 5681, + 3054, 3058, 3057, 3060, 3069, 3065, 3077, 3072, 5681, 3061, + 3073, 3080, 3076, 3079, 3090, 5681, 3083, 5681, 3085, 3086, + 3092, 3093, 3094, 3095, 3096, 3097, 3099, 3109, 3112, 3101, + 3113, 3116, 3117, 3115, 3124, 3119, 3121, 3122, 5681, 3126, - 3116, 5674, 3133, 3136, 3123, 3140, 3141, 3144, 3145, 3146, - 3149, 3150, 3147, 3151, 3163, 3155, 3154, 3158, 3169, 3170, - 3175, 5674, 3176, 3156, 3183, 3179, 3180, 3182, 3185, 3186, - 3187, 3189, 3190, 3191, 3193, 3198, 3197, 3194, 3195, 3200, - 3201, 3214, 3211, 3203, 3215, 3219, 3218, 3221, 3225, 3226, - 3229, 3231, 3222, 3233, 3236, 3240, 3243, 3245, 3246, 3253, - 3248, 5674, 3255, 3252, 3260, 3256, 3259, 3258, 3265, 3269, - 3271, 3267, 3268, 3278, 3273, 5674, 3280, 3275, 3292, 3286, - 3276, 3301, 3296, 3282, 3277, 3300, 3303, 3306, 3304, 3308, - 3309, 3312, 3313, 5674, 5674, 3315, 3316, 3317, 5674, 3318, + 3123, 3127, 3130, 3139, 3142, 3129, 3132, 5681, 3145, 3149, + 3146, 3150, 3151, 3153, 3154, 3156, 3157, 3159, 3158, 3161, + 3172, 3164, 3167, 3173, 3175, 3180, 3187, 5681, 3184, 3182, + 3194, 3193, 3178, 3195, 3196, 3198, 3200, 3201, 3202, 3203, + 3204, 3205, 3206, 3207, 3214, 3209, 3210, 3216, 3230, 3211, + 3226, 3227, 3228, 3231, 3235, 3237, 3240, 3242, 3234, 3247, + 3252, 3244, 3250, 3256, 3257, 3264, 3259, 5681, 3266, 3263, + 3273, 3268, 3269, 3275, 3276, 3284, 3282, 3270, 3279, 3286, + 3283, 5681, 3298, 3288, 3285, 3289, 3291, 3310, 3305, 3307, + 3308, 3312, 2875, 3315, 3313, 3309, 3317, 3320, 3321, 5681, - 3319, 3328, 3321, 3323, 3331, 3325, 3334, 3335, 3336, 3338, - 3339, 5674, 3342, 3351, 3348, 3349, 3358, 3359, 3363, 3360, - 3357, 3350, 3354, 3367, 3369, 3371, 3374, 3375, 3383, 3378, - 3380, 3381, 5674, 3382, 3384, 3390, 5674, 3387, 3388, 3391, - 3399, 3394, 3407, 3404, 3410, 3396, 3412, 3413, 3414, 3416, - 3418, 3427, 3422, 3423, 3425, 3429, 3431, 5674, 3433, 3434, - 3439, 3441, 3444, 3452, 3453, 3454, 3449, 3455, 3456, 3463, - 5674, 3458, 3461, 3462, 3464, 3472, 3469, 3473, 3471, 5674, - 3476, 3477, 3479, 5674, 3478, 3485, 3493, 3495, 3480, 3503, - 3498, 3482, 3499, 3501, 5674, 3502, 5674, 3506, 3508, 3511, + 5681, 3323, 3324, 3325, 5681, 3326, 3330, 3338, 3337, 3339, + 3328, 3340, 3344, 3342, 3345, 3348, 3350, 5681, 3352, 3361, + 3356, 3358, 3369, 3370, 3372, 3354, 3373, 3367, 3362, 3377, + 3375, 3379, 3380, 3383, 3391, 3388, 3386, 3390, 5681, 3392, + 3395, 3396, 5681, 3398, 3399, 3407, 3393, 3405, 3415, 3409, + 3422, 3416, 3418, 3423, 3424, 3426, 3427, 3434, 3430, 3431, + 3439, 3440, 3444, 5681, 3443, 3449, 3433, 3451, 3455, 3462, + 3463, 3464, 3459, 3466, 3467, 3474, 5681, 3469, 3472, 3470, + 3473, 3483, 3475, 3484, 3480, 5681, 3487, 3486, 3488, 5681, + 3491, 3489, 3496, 3501, 3502, 3509, 3504, 3506, 3507, 3508, - 5674, 3513, 3514, 3516, 3518, 3515, 3522, 3523, 3530, 3519, - 3531, 3532, 3533, 3534, 3536, 3543, 3535, 5674, 3544, 3542, - 3546, 3547, 3553, 3551, 3554, 3559, 3557, 5674, 5674, 3566, - 5674, 3558, 3567, 3568, 5674, 3571, 3573, 3578, 3574, 3576, - 3579, 3589, 3582, 5674, 3585, 3580, 3593, 3595, 3596, 3597, - 3598, 3599, 3601, 3603, 3602, 5674, 3605, 3607, 3613, 3606, - 3614, 3620, 3626, 3615, 5674, 3628, 3630, 3622, 3636, 3637, - 5674, 3629, 5674, 3639, 3642, 3643, 3645, 3646, 5674, 3648, - 3649, 3653, 3654, 3656, 3658, 3659, 3662, 3666, 3668, 3675, - 3671, 3670, 3673, 5674, 3672, 3678, 3686, 3689, 3679, 3677, + 5681, 3514, 5681, 3512, 3516, 3520, 5681, 3518, 3523, 3524, + 3526, 3527, 3532, 3533, 3540, 3531, 3534, 3541, 3542, 3544, + 3545, 3552, 3549, 5681, 3553, 3555, 3547, 3557, 3560, 3562, + 3564, 3566, 3567, 5681, 5681, 3576, 5681, 3578, 3568, 3570, + 5681, 3572, 3577, 3588, 3579, 3589, 3592, 3598, 3593, 5681, + 3595, 3583, 3599, 3604, 3605, 3606, 3607, 3608, 3609, 3610, + 3611, 5681, 3612, 3615, 3622, 3616, 3623, 3628, 3624, 3633, + 5681, 3636, 3637, 3638, 3640, 3642, 5681, 3646, 5681, 3644, + 3648, 3647, 3650, 3651, 5681, 3658, 3654, 3664, 3661, 3666, + 3665, 3669, 3672, 3673, 3675, 3682, 3678, 3679, 3680, 5681, - 3693, 3695, 3696, 3699, 3702, 3704, 3705, 3708, 3703, 3710, - 3711, 3714, 3724, 3717, 3720, 5674, 3721, 3725, 3729, 5674, - 3727, 3728, 3736, 3738, 3731, 3739, 3742, 3741, 3744, 5674, - 3750, 3751, 3746, 3747, 3756, 3760, 5674, 5674, 3764, 5674, - 3765, 3753, 3767, 3754, 3743, 3775, 3774, 3777, 3779, 3780, - 3781, 3787, 3788, 3795, 3796, 3797, 3800, 3674, 3793, 5674, - 5674, 3805, 3806, 3802, 3809, 3814, 3798, 3812, 3822, 3818, - 3819, 3825, 3826, 3833, 5674, 3834, 3817, 3835, 5674, 3828, - 3836, 3829, 3840, 3842, 3843, 3844, 3846, 3850, 3848, 3851, - 3849, 3857, 3858, 3859, 3865, 3862, 3867, 5674, 3868, 3870, + 3681, 3684, 3686, 3689, 3693, 3694, 3702, 3699, 3701, 3697, + 3707, 3709, 3710, 3715, 3717, 3718, 3720, 3712, 3725, 3723, + 3728, 5681, 3729, 3731, 3734, 5681, 3735, 3737, 3738, 3743, + 3744, 3745, 3749, 3746, 3751, 5681, 3752, 3755, 3750, 3753, + 3754, 3768, 5681, 5681, 3769, 5681, 3772, 3756, 3761, 3771, + 3773, 3774, 3781, 3782, 3785, 3786, 3790, 3787, 3793, 3801, + 3802, 3803, 3804, 3808, 3799, 5681, 5681, 3810, 3811, 3813, + 3815, 3817, 3820, 3821, 3829, 3825, 3827, 3834, 3831, 3841, + 5681, 3838, 3824, 3843, 5681, 3840, 3845, 3846, 3848, 3849, + 3852, 3851, 3856, 3853, 3858, 3859, 3860, 3862, 3861, 3866, - 3871, 3872, 3873, 3874, 3879, 3882, 3881, 5674, 3883, 3885, - 3888, 3886, 3887, 3892, 3903, 3907, 3909, 3896, 3910, 3912, - 3915, 3917, 3914, 5674, 3920, 3918, 3921, 3922, 3929, 3931, - 3926, 3933, 3935, 3937, 3939, 3942, 3944, 3949, 3946, 3950, - 3951, 3952, 5674, 3956, 3958, 3955, 3963, 3964, 3966, 3967, - 3968, 3976, 3973, 3978, 3977, 3980, 5674, 3981, 3983, 3985, - 3986, 3988, 3989, 3994, 3995, 5674, 3998, 3991, 4005, 3999, - 4002, 4003, 4007, 4015, 4014, 5674, 4018, 4019, 4020, 4021, - 4022, 4023, 4026, 4027, 5674, 4032, 4033, 4036, 4045, 4029, - 4047, 4043, 4049, 4040, 4042, 4056, 4052, 4057, 4058, 4060, + 3868, 3872, 3876, 5681, 3877, 3878, 3879, 3882, 3883, 3884, + 3887, 3888, 3889, 5681, 3891, 3893, 3896, 3901, 3895, 3902, + 3911, 3917, 3919, 3913, 3920, 3921, 3923, 3925, 3926, 5681, + 3929, 3927, 3930, 3936, 3938, 3940, 3941, 3943, 3944, 3946, + 3949, 3951, 3953, 3955, 3957, 3958, 3959, 3961, 5681, 3963, + 3966, 3969, 3975, 3972, 3970, 3978, 3982, 3985, 3977, 3979, + 3986, 3992, 5681, 3987, 3989, 3993, 3995, 4001, 3997, 4002, + 4003, 5681, 4010, 4004, 4006, 4011, 4014, 4019, 4021, 4026, + 4015, 5681, 4022, 4027, 4031, 4023, 4029, 4033, 4038, 4037, + 5681, 4039, 4041, 4045, 4053, 4049, 4056, 4052, 4059, 4051, - 4062, 4070, 4074, 4071, 5674, 4063, 5674, 4072, 4077, 4079, - 4084, 4080, 5674, 4082, 4087, 4089, 4086, 4090, 5674, 4092, - 4091, 4094, 4096, 5674, 4110, 4106, 4095, 4105, 4119, 4120, - 5674, 4123, 4124, 4125, 4132, 4134, 4136, 4129, 4137, 4133, - 4139, 4097, 4140, 5674, 4142, 4144, 4149, 4150, 4151, 4152, - 4154, 4157, 4161, 5674, 4159, 4162, 4163, 4165, 4166, 4167, - 4168, 4175, 4171, 4176, 5674, 4180, 4181, 4184, 4185, 4112, - 5674, 5674, 4188, 4189, 4192, 4191, 4197, 5674, 4199, 4206, - 4201, 4205, 4207, 5674, 5674, 4209, 5674, 4210, 5674, 4211, - 4214, 5674, 5674, 4215, 4212, 4218, 4219, 4222, 5674, 4227, + 4055, 4058, 4062, 4065, 4066, 4069, 4067, 4079, 4083, 4080, + 5681, 4072, 5681, 4082, 4085, 4093, 4088, 4090, 5681, 4095, + 4098, 4100, 4094, 4096, 5681, 4101, 4102, 4104, 4103, 5681, + 4117, 4116, 4106, 4122, 4108, 4123, 5681, 4128, 4129, 4125, + 4137, 4139, 4136, 4138, 4140, 4142, 4143, 4144, 4145, 5681, + 4147, 4150, 4149, 4155, 4156, 4158, 4162, 4168, 4159, 5681, + 4164, 4161, 4170, 4171, 4173, 4174, 4175, 4182, 4183, 4179, + 5681, 4184, 4186, 4193, 4188, 4199, 5681, 5681, 4192, 4202, + 4195, 4204, 4207, 5681, 4205, 4216, 4211, 4213, 4215, 5681, + 5681, 4218, 5681, 4214, 5681, 4219, 4220, 5681, 5681, 4221, - 5674, 4235, 4231, 4233, 4234, 4236, 5674, 4239, 4240, 4243, - 5674, 4237, 4250, 4245, 4247, 5674, 4254, 4248, 4251, 5674, - 4259, 4265, 4261, 4268, 4255, 4270, 4271, 4272, 4274, 4276, - 4278, 4281, 4283, 4286, 4287, 4288, 4289, 4294, 4291, 4296, - 4297, 4299, 4301, 4302, 4307, 4310, 4311, 4304, 4312, 4313, - 4314, 4318, 4320, 4324, 4327, 4328, 4329, 4330, 4332, 4333, - 4335, 4338, 4342, 4331, 4341, 5674, 4336, 4343, 4347, 4358, - 4348, 4359, 4363, 4353, 4367, 4371, 5674, 4373, 5674, 4375, - 4360, 4369, 4377, 5674, 4379, 4382, 4381, 4384, 4383, 4385, - 4388, 4386, 5674, 4390, 4391, 4393, 4395, 5674, 4398, 4409, + 4222, 4229, 4235, 4228, 5681, 4238, 5681, 4231, 4241, 4239, + 4243, 4244, 5681, 4245, 4246, 4251, 5681, 4247, 4259, 4252, + 4254, 5681, 4261, 4257, 4262, 5681, 4266, 4272, 4263, 4273, + 4275, 4274, 4279, 4281, 4282, 4284, 4286, 4290, 4292, 4294, + 4295, 4297, 4298, 4303, 4296, 4300, 4305, 4307, 4310, 4311, + 4315, 4317, 4318, 4319, 4320, 4321, 4322, 4332, 4324, 4326, + 4335, 4336, 4328, 4338, 4339, 4340, 4341, 4347, 4350, 4351, + 4353, 5681, 4343, 4349, 4356, 4357, 4362, 4365, 4367, 4374, + 4378, 4380, 5681, 4382, 5681, 4384, 4369, 4375, 4388, 5681, + 4389, 4390, 4391, 4392, 4393, 4394, 4397, 4395, 5681, 4399, - 4397, 4401, 4410, 4411, 4412, 4414, 4418, 4416, 4421, 4423, - 4431, 4424, 4428, 4427, 4433, 4429, 4436, 4439, 4445, 4441, - 4448, 4452, 5674, 4453, 5674, 4454, 4455, 4457, 4458, 4459, - 4460, 4462, 5674, 5674, 4465, 4467, 4476, 4468, 4461, 4487, - 4473, 5674, 4482, 4484, 4490, 4491, 5674, 4492, 4493, 4495, - 5674, 4496, 4499, 4500, 4502, 4466, 4503, 4506, 5674, 5674, - 5674, 5674, 4509, 4507, 4517, 4511, 4514, 4521, 4522, 4526, - 4518, 5674, 4535, 5674, 5674, 4523, 4532, 4536, 4538, 4539, - 4540, 4542, 4541, 5674, 4545, 4548, 4552, 4546, 4555, 4563, - 4558, 4564, 4556, 4566, 4573, 4570, 4571, 4568, 4576, 4578, + 4400, 4401, 4404, 5681, 4411, 4406, 4416, 4417, 4418, 4421, + 4419, 4423, 4424, 4426, 4428, 4430, 4438, 4431, 4433, 4439, + 4442, 4443, 4444, 4446, 4450, 4454, 4455, 4460, 5681, 4456, + 5681, 4461, 4462, 4465, 4466, 4467, 4468, 4471, 5681, 5681, + 4469, 4473, 4479, 4480, 4474, 4483, 4487, 5681, 4484, 4493, + 4501, 4485, 5681, 4494, 4496, 4503, 5681, 4505, 4507, 4504, + 4509, 4510, 4512, 4519, 5681, 5681, 5681, 5681, 4520, 4511, + 4526, 4522, 4527, 4528, 4529, 4531, 4532, 5681, 4542, 5681, + 5681, 4534, 4543, 4536, 4544, 4545, 4546, 4551, 4554, 5681, + 4552, 4556, 4558, 4555, 4569, 4572, 4557, 4573, 4559, 4566, - 4580, 5674, 5674, 4582, 4586, 4587, 4594, 4591, 4592, 4604, - 4599, 4600, 4601, 4602, 4606, 4607, 4608, 5674, 4611, 4615, - 5674, 4609, 5674, 4619, 4622, 4613, 4623, 4625, 4626, 4628, - 4630, 5674, 5674, 4632, 4633, 4637, 4641, 4638, 4643, 4644, - 4646, 4642, 5674, 4647, 5674, 4648, 4650, 4664, 4649, 4666, - 4671, 4673, 4670, 4672, 4676, 5674, 4675, 4677, 5674, 4678, - 4679, 4683, 5674, 4685, 4688, 4692, 5674, 4695, 5674, 4697, - 5674, 4689, 4705, 5674, 4700, 4701, 5674, 4707, 4711, 4655, - 4703, 5674, 4708, 5674, 4712, 4714, 4717, 4722, 4715, 4724, - 4725, 4719, 4727, 4734, 4736, 4729, 5674, 5674, 4745, 4731, + 4580, 4576, 4582, 4575, 4586, 4588, 4593, 5681, 5681, 4585, + 4595, 4596, 4603, 4600, 4601, 4610, 4607, 4608, 4609, 4612, + 4614, 4615, 4616, 5681, 4619, 4623, 5681, 4617, 5681, 4625, + 4631, 4621, 4632, 4633, 4634, 4637, 4635, 5681, 5681, 4640, + 4641, 4646, 4648, 4649, 4651, 4652, 4654, 4650, 5681, 4655, + 5681, 4656, 4658, 4664, 4657, 4672, 4677, 4679, 4675, 4678, + 4680, 5681, 4681, 4683, 5681, 4684, 4687, 4689, 5681, 4691, + 4694, 4698, 5681, 4700, 5681, 4703, 5681, 4695, 4711, 5681, + 4706, 4707, 5681, 4713, 4717, 4718, 4709, 5681, 4714, 5681, + 4719, 4724, 4727, 4730, 4720, 4734, 4725, 4731, 4736, 4743, - 4740, 4742, 4743, 4752, 4747, 4751, 4757, 5674, 5674, 4748, - 5674, 4750, 4761, 5674, 4759, 4763, 4765, 4768, 4767, 4769, - 4774, 4771, 4775, 4778, 4793, 4776, 4780, 4790, 4796, 4798, - 4800, 4802, 4803, 4804, 4781, 4805, 4806, 4809, 5674, 4811, - 4812, 4813, 5674, 4817, 4820, 4822, 4823, 5674, 4833, 4825, - 4830, 4835, 5674, 4819, 4841, 4838, 4836, 4843, 4852, 4847, - 4848, 5674, 5674, 5674, 5674, 4850, 4853, 5674, 4854, 4855, - 5674, 5674, 4856, 4859, 4862, 4870, 5674, 4861, 5674, 4865, - 5674, 4869, 4872, 4875, 4878, 5674, 4879, 4888, 5674, 4891, - 4894, 4896, 4897, 4880, 4866, 4898, 5674, 4905, 4902, 4904, + 4741, 4742, 5681, 5681, 4753, 4744, 4745, 4748, 4751, 4760, + 4755, 4758, 4764, 5681, 5681, 4756, 5681, 4766, 4769, 5681, + 4759, 4770, 4771, 4776, 4775, 4777, 4778, 4783, 4779, 4786, + 4791, 4787, 4796, 4799, 4801, 4803, 4807, 4805, 4809, 4810, + 4811, 4813, 4812, 4815, 5681, 4817, 4820, 4818, 5681, 4825, + 4819, 4828, 4829, 5681, 4839, 4831, 4833, 4841, 5681, 4843, + 4845, 4847, 4846, 4848, 4858, 4849, 4856, 5681, 5681, 5681, + 5681, 4854, 4859, 5681, 4860, 4864, 5681, 5681, 4866, 4870, + 4867, 4874, 5681, 4871, 5681, 4872, 5681, 4873, 4875, 4881, + 4885, 5681, 4884, 4895, 5681, 4898, 4901, 4903, 4904, 4886, - 4911, 4883, 4908, 4912, 4913, 4920, 4915, 4919, 5674, 4916, - 4921, 4922, 5674, 4924, 5674, 4925, 4926, 4928, 4934, 4930, - 4933, 4937, 4944, 4927, 4948, 4941, 5674, 4951, 4955, 5674, - 4956, 5674, 4958, 5674, 4959, 4962, 4963, 4961, 5674, 4965, - 4967, 4968, 4969, 5674, 4970, 4972, 5674, 4976, 4973, 4983, - 4985, 4974, 4990, 4992, 4993, 4980, 5004, 4996, 4999, 4997, - 5006, 5007, 5012, 5674, 5674, 5674, 5008, 5001, 5022, 5019, - 5023, 5030, 5014, 5674, 5028, 5029, 5025, 5037, 5035, 5039, - 5674, 5041, 5027, 5036, 5674, 5043, 5048, 5049, 5050, 5051, - 5058, 5060, 5062, 5063, 5674, 5066, 5674, 5674, 5055, 5674, + 4888, 4905, 5681, 4914, 4911, 4912, 4919, 4909, 4915, 4920, + 4921, 4928, 4923, 4930, 5681, 4924, 4926, 4931, 5681, 4933, + 5681, 4934, 4937, 4938, 4935, 4940, 4945, 4946, 4952, 4949, + 4959, 4953, 5681, 4961, 4963, 5681, 4955, 5681, 4966, 5681, + 4967, 4968, 4969, 4973, 5681, 4971, 4974, 4977, 4979, 5681, + 4980, 4982, 5681, 4986, 4987, 4989, 4993, 4990, 5002, 4995, + 4999, 4997, 5011, 5003, 5004, 5007, 5013, 5015, 5019, 5681, + 5681, 5681, 5014, 5023, 5030, 5029, 5031, 5038, 5033, 5681, + 5035, 5036, 5025, 5045, 5037, 5047, 5681, 5049, 5042, 5050, + 5681, 5053, 5057, 5058, 5060, 5062, 5065, 5069, 5071, 5072, - 5067, 5069, 5070, 5071, 5674, 5076, 5073, 5077, 5079, 5081, - 5082, 5078, 5674, 5674, 5085, 5674, 5094, 5090, 5086, 5102, - 5098, 5099, 5104, 5106, 5674, 5105, 5108, 5109, 5112, 5113, - 5674, 5115, 5116, 5117, 5118, 5121, 5120, 5126, 5127, 5129, - 5674, 5674, 5122, 5132, 5674, 5674, 5131, 5141, 5146, 5674, - 5674, 5674, 5152, 5674, 5154, 5158, 5162, 5166, 5157, 5674, - 5168, 5147, 5169, 5674, 5170, 5172, 5674, 5674, 5149, 5173, - 5177, 5176, 5178, 5674, 5179, 5182, 5186, 5189, 5195, 5184, - 5196, 5198, 5206, 5208, 5190, 5203, 5192, 5204, 5211, 5212, - 5220, 5217, 5674, 5674, 5224, 5674, 5674, 5226, 5228, 5230, + 5681, 5076, 5681, 5681, 5066, 5681, 5073, 5078, 5079, 5080, + 5681, 5083, 5084, 5086, 5087, 5089, 5090, 5092, 5681, 5681, + 5094, 5681, 5103, 5099, 5091, 5113, 5108, 5110, 5112, 5114, + 5681, 5115, 5116, 5117, 5121, 5123, 5681, 5124, 5125, 5126, + 5127, 5130, 5134, 5137, 5128, 5138, 5681, 5681, 5131, 5139, + 5681, 5681, 5141, 5157, 5158, 5681, 5681, 5681, 5160, 5681, + 5164, 5168, 5172, 5176, 5167, 5681, 5178, 5161, 5175, 5681, + 5180, 5182, 5681, 5681, 5183, 5184, 5186, 5187, 5188, 5681, + 5192, 5193, 5194, 5198, 5200, 5201, 5204, 5205, 5212, 5213, + 5215, 5218, 5220, 5219, 5221, 5223, 5228, 5225, 5681, 5681, - 5233, 5235, 5237, 5239, 5674, 5240, 5242, 5243, 5674, 5245, - 5247, 5244, 5248, 5250, 5251, 5253, 5255, 5674, 5674, 5256, - 5257, 5258, 5265, 5267, 5674, 5269, 5276, 5273, 5275, 5271, - 5277, 5278, 5674, 5281, 5674, 5674, 5674, 5674, 5674, 5674, - 5674, 5674, 5279, 5674, 5289, 5292, 5674, 5283, 5293, 5297, - 5298, 5286, 5674, 5299, 5303, 5304, 5305, 5308, 5310, 5312, - 5313, 5315, 5319, 5316, 5321, 5317, 5320, 5674, 5674, 5328, - 5324, 5327, 5330, 5346, 5347, 5350, 5352, 5334, 5337, 5355, - 5354, 5356, 5343, 5360, 5369, 5362, 5364, 5366, 5367, 5371, - 5674, 5372, 5674, 5373, 5674, 5674, 5378, 5379, 5374, 5381, + 5232, 5681, 5681, 5235, 5237, 5239, 5244, 5246, 5248, 5250, + 5681, 5251, 5253, 5254, 5681, 5256, 5258, 5255, 5259, 5261, + 5262, 5264, 5266, 5681, 5681, 5267, 5142, 5268, 5276, 5269, + 5681, 5278, 5286, 5282, 5283, 5271, 5284, 5289, 5681, 5291, + 5681, 5681, 5681, 5681, 5681, 5681, 5681, 5681, 5292, 5681, + 5298, 5300, 5681, 5293, 5301, 5303, 5304, 5308, 5681, 5309, + 5312, 5313, 4890, 5311, 5314, 5317, 5319, 5321, 5320, 5325, + 5327, 5328, 5331, 5681, 5681, 5329, 5333, 5335, 5337, 5341, + 5344, 5348, 5355, 5352, 5356, 5357, 5358, 5359, 5361, 5362, + 5372, 5365, 5367, 5369, 5370, 5374, 5681, 5375, 5681, 5378, - 5389, 5394, 5385, 5390, 5392, 5396, 5674, 5393, 5674, 5398, - 5397, 5674, 5402, 5404, 5405, 5406, 5407, 5408, 5410, 5416, - 5674, 5414, 5417, 5426, 5418, 5434, 5429, 5433, 5435, 5437, - 5431, 5445, 5441, 5444, 5674, 5447, 5448, 5214, 5449, 5452, - 5459, 5454, 5456, 5457, 5674, 5461, 5463, 5465, 5455, 5462, - 5464, 5478, 5480, 5476, 5674, 5466, 5482, 5484, 5486, 5490, - 5488, 5494, 5495, 5497, 5499, 5329, 5506, 5500, 5502, 5498, - 5508, 5510, 5674, 5512, 5515, 5674, 5516, 5518, 5519, 5520, - 5524, 5674, 5527, 5522, 5528, 5530, 5533, 5535, 5674, 5537, - 5544, 5545, 5674, 5546, 5674, 5674, 5548, 5540, 5549, 5555, + 5681, 5681, 5381, 5382, 5384, 5385, 5394, 5397, 5393, 5395, + 5398, 5400, 5681, 5401, 5681, 5402, 5405, 5681, 5403, 5406, + 5410, 5412, 5413, 5414, 5415, 5419, 5681, 5418, 5422, 5428, + 5430, 5437, 5438, 5440, 5442, 5443, 5432, 5450, 5449, 5453, + 5681, 5455, 5446, 5222, 5456, 5457, 5464, 5460, 5461, 5462, + 5681, 5467, 5468, 5473, 5469, 5470, 5471, 5481, 5485, 5483, + 5681, 5472, 5486, 5491, 5492, 5494, 5497, 5499, 5500, 5504, + 5507, 5509, 5514, 5501, 5515, 5505, 5516, 5517, 5681, 5526, + 5518, 5681, 5523, 5527, 5520, 5529, 5530, 5681, 5534, 5535, + 5538, 5540, 5543, 5544, 5681, 5546, 5550, 5552, 5681, 5553, - 5557, 5674, 5674, 5674, 5582, 5589, 5596, 5603, 5610, 88, - 5617, 5624, 5631, 5638, 5645, 5652, 5659, 5666 + 5681, 5681, 5555, 5547, 5556, 5562, 5564, 5681, 5681, 5681, + 5589, 5596, 5603, 5610, 5617, 88, 5624, 5631, 5638, 5645, + 5652, 5659, 5666, 5673 } ; -static yyconst flex_int16_t yy_def[2919] = +static const flex_int16_t yy_def[2925] = { 0, - 2904, 1, 2905, 2905, 2906, 2906, 2907, 2907, 2908, 2908, - 2909, 2909, 2904, 2910, 2904, 2904, 2904, 2904, 2911, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2912, 2904, 2904, 2904, 2912, 2913, 2904, 2904, - 2904, 2913, 2914, 2904, 2904, 2904, 2904, 2914, 2915, 2904, - 2904, 2904, 2915, 2916, 2904, 2917, 2904, 2916, 2916, 2910, - 2910, 2904, 2918, 2911, 2918, 2911, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 1, 2911, 2911, 2912, 2912, 2913, 2913, 2914, 2914, + 2915, 2915, 2910, 2916, 2910, 2910, 2910, 2910, 2917, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2918, 2910, 2910, 2910, 2918, 2919, 2910, 2910, + 2910, 2919, 2920, 2910, 2910, 2910, 2910, 2920, 2921, 2910, + 2910, 2910, 2921, 2922, 2910, 2923, 2910, 2922, 2922, 2916, + 2916, 2910, 2924, 2917, 2924, 2917, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2912, - 2912, 2913, 2913, 2914, 2914, 2904, 2915, 2915, 2916, 2916, - 2917, 2917, 2916, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2918, 2918, 2919, 2919, 2920, 2920, 2910, 2921, 2921, 2922, + 2922, 2923, 2923, 2922, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2916, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2922, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2916, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2910, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2910, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2922, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2904, 2910, 2916, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2910, 2916, 2916, 2916, 2916, + 2916, 2916, 2910, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2910, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2910, 2916, + 2922, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2916, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2904, 2910, 2904, 2904, 2910, 2904, - 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2922, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2910, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2910, 2916, 2910, 2910, 2916, 2910, 2910, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2910, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2910, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2910, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2910, 2916, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904, - 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2904, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2922, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2910, 2916, 2916, 2910, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2910, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2910, 2916, 2910, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910, - 2916, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904, + 2916, 2916, 2916, 2910, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2910, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2910, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2910, 2916, 2916, 2922, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2910, 2916, 2916, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2916, 2916, 2916, 2916, 2916, 2910, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2910, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2910, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2910, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, - 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2916, 2916, 2916, 2916, 2916, 2916, 2910, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2910, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2910, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2910, 2916, 2916, 2916, 2916, 2916, 2910, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2910, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2910, 2916, 2916, 2916, 2916, 2916, 2916, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2904, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2904, 2910, - 2904, 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2910, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2910, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2910, 2916, 2910, 2916, + 2916, 2916, 2916, 2916, 2910, 2916, 2910, 2916, 2916, 2916, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2904, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910, + 2916, 2910, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2910, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2910, 2916, + 2916, 2916, 2916, 2910, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2904, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2904, - 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2916, 2916, 2916, 2910, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2910, 2916, 2910, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2910, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2910, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2910, 2916, + 2916, 2916, 2916, 2916, 2916, 2910, 2916, 2910, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2910, 2916, - 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2904, 2904, 2910, 2910, 2910, 2904, 2910, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2910, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2910, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2910, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2910, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2904, 2910, 2910, 2910, 2904, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904, - 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2904, 2910, 2904, 2910, 2910, 2910, + 2910, 2916, 2916, 2916, 2910, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2910, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2910, 2916, + 2916, 2916, 2910, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2910, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2910, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2910, 2916, 2916, 2916, 2910, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2904, 2910, - 2904, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, - 2904, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2904, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2916, 2910, 2916, 2916, 2916, 2910, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2910, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2910, 2910, 2916, 2910, 2916, 2916, 2916, + 2910, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2910, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2910, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2910, 2916, 2916, 2916, 2916, 2916, 2910, 2916, 2910, 2916, + 2916, 2916, 2916, 2916, 2910, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2904, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904, - 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2904, 2910, 2904, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904, - 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2904, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2910, 2916, 2916, 2916, 2910, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2910, 2916, 2916, 2916, 2916, + 2916, 2916, 2910, 2910, 2916, 2910, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2910, 2910, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2910, 2916, 2916, 2916, 2910, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2916, 2916, 2916, 2910, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2910, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2910, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2910, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2910, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2910, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2910, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2910, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2910, 2910, 2910, 2910, 2904, 2910, 2904, 2910, 2910, 2910, - 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2904, 2910, - 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, - 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, - 2904, 2904, 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910, - 2910, 2910, 2910, 2904, 2904, 2910, 2904, 2910, 2904, 2910, - 2910, 2904, 2904, 2910, 2910, 2910, 2910, 2910, 2904, 2910, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2910, 2916, 2910, 2916, 2916, 2916, 2916, 2916, 2910, 2916, + 2916, 2916, 2916, 2916, 2910, 2916, 2916, 2916, 2916, 2910, + 2916, 2916, 2916, 2916, 2916, 2916, 2910, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2910, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2910, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2910, 2916, 2916, 2916, 2916, 2916, 2910, 2910, 2916, 2916, + 2916, 2916, 2916, 2910, 2916, 2916, 2916, 2916, 2916, 2910, + 2910, 2916, 2910, 2916, 2910, 2916, 2916, 2910, 2910, 2916, - 2904, 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, - 2904, 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2904, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2904, 2910, - 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2904, 2910, 2910, + 2916, 2916, 2916, 2916, 2910, 2916, 2910, 2916, 2916, 2916, + 2916, 2916, 2910, 2916, 2916, 2916, 2910, 2916, 2916, 2916, + 2916, 2910, 2916, 2916, 2916, 2910, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2910, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2910, 2916, 2910, 2916, 2916, 2916, 2916, 2910, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2910, 2916, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2904, 2910, 2904, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2904, 2904, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2904, 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, - 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2904, - 2904, 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2904, 2910, 2904, 2904, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2916, 2916, 2916, 2910, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2910, 2916, + 2910, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2910, 2910, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2910, 2916, 2916, + 2916, 2916, 2910, 2916, 2916, 2916, 2910, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2910, 2910, 2910, 2910, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2910, 2916, 2910, + 2910, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2910, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2910, 2904, 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910, - 2904, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2904, 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2904, 2910, 2904, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2904, 2910, - 2910, 2910, 2904, 2910, 2910, 2910, 2904, 2910, 2904, 2910, - 2904, 2910, 2910, 2904, 2910, 2910, 2904, 2910, 2910, 2910, - 2910, 2904, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2904, 2910, 2910, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2910, 2910, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2910, 2916, 2916, 2910, 2916, 2910, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2910, 2910, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2910, 2916, + 2910, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2910, 2916, 2916, 2910, 2916, 2916, 2916, 2910, 2916, + 2916, 2916, 2910, 2916, 2910, 2916, 2910, 2916, 2916, 2910, + 2916, 2916, 2910, 2916, 2916, 2916, 2916, 2910, 2916, 2910, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2904, 2910, - 2904, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2910, - 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2904, 2910, 2910, - 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2904, 2904, 2904, 2904, 2910, 2910, 2904, 2910, 2910, - 2904, 2904, 2910, 2910, 2910, 2910, 2904, 2910, 2904, 2910, - 2904, 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2904, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, + 2916, 2916, 2910, 2910, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2910, 2910, 2916, 2910, 2916, 2916, 2910, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2910, 2916, 2916, 2916, 2910, 2916, + 2916, 2916, 2916, 2910, 2916, 2916, 2916, 2916, 2910, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2910, 2910, 2910, + 2910, 2916, 2916, 2910, 2916, 2916, 2910, 2910, 2916, 2916, + 2916, 2916, 2910, 2916, 2910, 2916, 2910, 2916, 2916, 2916, + 2916, 2910, 2916, 2916, 2910, 2916, 2916, 2916, 2916, 2916, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2910, - 2910, 2910, 2904, 2910, 2904, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2904, - 2910, 2904, 2910, 2904, 2910, 2910, 2910, 2910, 2904, 2910, - 2910, 2910, 2910, 2904, 2910, 2910, 2904, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2904, 2904, 2904, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, - 2904, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2904, 2910, 2904, 2904, 2910, 2904, + 2916, 2916, 2910, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2910, 2916, 2916, 2916, 2910, 2916, + 2910, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2910, 2916, 2916, 2910, 2916, 2910, 2916, 2910, + 2916, 2916, 2916, 2916, 2910, 2916, 2916, 2916, 2916, 2910, + 2916, 2916, 2910, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2910, + 2910, 2910, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2910, + 2916, 2916, 2916, 2916, 2916, 2916, 2910, 2916, 2916, 2916, + 2910, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2904, 2904, 2910, 2904, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, - 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2904, 2904, 2910, 2910, 2904, 2904, 2910, 2910, 2910, 2904, - 2904, 2904, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2904, - 2910, 2910, 2910, 2904, 2910, 2910, 2904, 2904, 2910, 2910, - 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2904, 2904, 2910, 2904, 2904, 2910, 2910, 2910, + 2910, 2916, 2910, 2910, 2916, 2910, 2916, 2916, 2916, 2916, + 2910, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2910, 2910, + 2916, 2910, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2910, 2916, 2916, 2916, 2916, 2916, 2910, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2910, 2910, 2916, 2916, + 2910, 2910, 2916, 2916, 2916, 2910, 2910, 2910, 2916, 2910, + 2916, 2916, 2916, 2916, 2916, 2910, 2916, 2916, 2916, 2910, + 2916, 2916, 2910, 2910, 2916, 2916, 2916, 2916, 2916, 2910, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2910, 2910, - 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2904, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2904, 2910, - 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2904, 2910, 2904, 2904, 2904, 2904, 2904, 2904, - 2904, 2904, 2910, 2904, 2910, 2910, 2904, 2910, 2910, 2910, - 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2904, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2904, 2910, 2904, 2910, 2904, 2904, 2910, 2910, 2910, 2910, + 2916, 2910, 2910, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2910, 2916, 2916, 2916, 2910, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2910, 2910, 2916, 2916, 2916, 2916, 2916, + 2910, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2910, 2916, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2916, 2910, + 2916, 2916, 2910, 2916, 2916, 2916, 2916, 2916, 2910, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2910, 2910, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2910, 2916, 2910, 2916, - 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2904, 2910, - 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2904, 2910, 2910, 2904, 2910, 2910, 2910, 2910, - 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2910, - 2910, 2910, 2904, 2910, 2904, 2904, 2910, 2910, 2910, 2910, + 2910, 2910, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2910, 2916, 2910, 2916, 2916, 2910, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2910, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2910, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2910, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2910, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2910, 2916, + 2916, 2910, 2916, 2916, 2916, 2916, 2916, 2910, 2916, 2916, + 2916, 2916, 2916, 2916, 2910, 2916, 2916, 2916, 2910, 2916, - 2910, 2904, 2904, 0, 2904, 2904, 2904, 2904, 2904, 2904, - 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904 + 2910, 2910, 2916, 2916, 2916, 2916, 2916, 2910, 2910, 0, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910 } ; -static yyconst flex_uint16_t yy_nxt[5715] = +static const flex_int16_t yy_nxt[5722] = { 0, 14, 15, 16, 17, 18, 19, 18, 14, 14, 14, 14, 14, 18, 20, 21, 22, 23, 24, 25, 26, @@ -1399,627 +1392,628 @@ static yyconst flex_uint16_t yy_nxt[5715] = 61, 62, 72, 71, 63, 102, 73, 92, 70, 71, 63, 15, 16, 17, 65, 66, 67, 75, 71, 75, - 75, 71, 75, 68, 104, 156, 103, 93, 75, 76, - 140, 140, 69, 15, 16, 17, 65, 66, 67, 71, + 75, 71, 75, 68, 104, 157, 103, 93, 75, 76, + 141, 141, 69, 15, 16, 17, 65, 66, 67, 71, 71, 83, 77, 78, 71, 68, 79, 71, 84, 87, - 71, 80, 85, 88, 69, 86, 89, 150, 90, 91, - 81, 71, 94, 71, 96, 71, 71, 158, 71, 105, + 71, 80, 85, 88, 69, 86, 89, 151, 90, 91, + 81, 71, 94, 71, 96, 71, 71, 159, 71, 105, 98, 112, 97, 99, 71, 109, 95, 106, 71, 110, - 100, 71, 101, 107, 171, 71, 113, 108, 142, 71, - 114, 142, 118, 71, 119, 111, 115, 71, 120, 116, - 139, 150, 123, 147, 147, 124, 117, 162, 121, 71, - 72, 122, 125, 132, 73, 153, 126, 127, 71, 128, + 100, 71, 101, 107, 172, 71, 113, 108, 143, 71, + 114, 143, 118, 71, 119, 111, 115, 71, 120, 116, + 140, 151, 124, 148, 148, 125, 117, 163, 121, 122, + 71, 123, 126, 71, 133, 154, 127, 128, 71, 129, - 71, 129, 71, 133, 71, 136, 155, 134, 135, 137, - 130, 150, 144, 138, 144, 144, 131, 144, 75, 190, - 75, 75, 149, 75, 149, 149, 70, 149, 70, 70, - 152, 70, 71, 75, 71, 75, 75, 70, 75, 71, - 71, 163, 154, 159, 75, 76, 157, 71, 71, 71, - 160, 71, 71, 172, 71, 71, 71, 71, 165, 71, - 71, 182, 164, 161, 166, 71, 167, 168, 169, 174, - 71, 71, 173, 170, 175, 179, 176, 177, 180, 71, - 71, 249, 188, 181, 178, 183, 71, 71, 71, 184, - 71, 71, 185, 71, 193, 191, 71, 199, 194, 196, + 224, 130, 71, 137, 134, 158, 71, 138, 135, 136, + 131, 139, 145, 71, 145, 145, 132, 145, 75, 71, + 75, 75, 150, 75, 150, 150, 70, 150, 70, 70, + 153, 70, 72, 165, 71, 171, 73, 70, 75, 71, + 75, 75, 155, 75, 71, 71, 225, 71, 156, 75, + 76, 71, 71, 71, 160, 161, 164, 71, 71, 166, + 173, 71, 71, 169, 170, 167, 71, 168, 162, 71, + 71, 175, 177, 178, 71, 71, 184, 71, 176, 174, + 179, 182, 253, 71, 71, 71, 189, 180, 181, 183, + 71, 151, 71, 185, 191, 71, 186, 71, 71, 199, - 71, 198, 71, 200, 197, 186, 187, 189, 71, 202, - 71, 71, 71, 201, 195, 192, 206, 71, 71, 71, - 71, 203, 71, 208, 71, 211, 71, 209, 71, 205, - 204, 71, 213, 71, 224, 207, 222, 216, 71, 210, - 212, 214, 71, 71, 221, 217, 218, 215, 71, 71, - 223, 225, 71, 71, 226, 71, 71, 219, 71, 71, - 232, 220, 71, 71, 236, 228, 227, 235, 71, 233, - 71, 229, 231, 239, 230, 237, 140, 140, 148, 142, - 238, 234, 142, 144, 240, 144, 144, 71, 144, 147, - 147, 149, 242, 149, 149, 75, 149, 75, 75, 150, + 192, 194, 197, 71, 71, 195, 71, 198, 200, 187, + 188, 190, 71, 201, 71, 71, 202, 205, 71, 203, + 193, 196, 207, 71, 71, 71, 71, 204, 71, 212, + 209, 71, 71, 206, 210, 71, 214, 71, 71, 71, + 71, 208, 71, 220, 211, 215, 213, 71, 226, 229, + 217, 216, 223, 71, 221, 71, 219, 218, 222, 233, + 230, 71, 71, 71, 235, 227, 71, 71, 228, 231, + 71, 239, 71, 236, 232, 238, 71, 234, 149, 240, + 71, 242, 141, 141, 143, 237, 243, 143, 241, 145, + 151, 145, 145, 244, 145, 148, 148, 150, 248, 150, - 75, 71, 241, 243, 71, 71, 71, 152, 71, 71, - 71, 71, 250, 71, 247, 71, 253, 71, 244, 245, - 246, 248, 256, 71, 255, 252, 71, 251, 71, 257, - 261, 259, 71, 254, 71, 260, 71, 71, 262, 293, - 71, 265, 258, 263, 71, 270, 266, 71, 71, 71, - 71, 267, 275, 272, 273, 276, 71, 268, 269, 71, - 264, 71, 274, 278, 71, 71, 271, 71, 71, 279, - 280, 71, 71, 71, 71, 294, 285, 286, 291, 282, - 281, 71, 283, 71, 277, 296, 284, 71, 287, 71, - 295, 71, 298, 288, 292, 300, 301, 297, 71, 71, + 150, 75, 150, 75, 75, 71, 75, 71, 246, 71, + 245, 71, 71, 153, 71, 71, 71, 250, 71, 71, + 71, 256, 249, 247, 251, 259, 252, 255, 258, 71, + 254, 71, 260, 264, 262, 71, 263, 71, 257, 71, + 71, 265, 71, 71, 268, 261, 266, 71, 273, 269, + 71, 147, 71, 71, 270, 275, 274, 276, 279, 71, + 271, 272, 278, 267, 71, 277, 71, 71, 71, 71, + 281, 71, 282, 283, 71, 71, 71, 290, 71, 288, + 289, 285, 291, 284, 286, 71, 71, 280, 71, 287, + 294, 297, 71, 298, 292, 299, 293, 71, 295, 301, - 304, 71, 71, 299, 71, 289, 71, 290, 306, 305, - 307, 302, 71, 71, 71, 71, 71, 71, 71, 308, - 303, 310, 71, 71, 312, 71, 309, 71, 71, 71, - 71, 314, 316, 71, 71, 71, 71, 311, 315, 317, - 321, 325, 71, 318, 313, 319, 323, 71, 71, 328, - 71, 71, 322, 320, 71, 71, 330, 71, 324, 331, - 71, 332, 333, 334, 71, 336, 326, 327, 71, 71, - 329, 71, 71, 71, 339, 341, 337, 340, 71, 335, - 71, 71, 343, 71, 71, 344, 338, 71, 71, 347, - 71, 71, 150, 71, 71, 71, 367, 71, 350, 342, + 303, 71, 296, 304, 71, 71, 71, 300, 302, 71, + 307, 71, 71, 309, 310, 71, 71, 308, 305, 71, + 71, 71, 311, 71, 312, 306, 71, 313, 71, 71, + 71, 71, 315, 71, 71, 319, 71, 317, 71, 324, + 71, 71, 320, 314, 318, 71, 325, 71, 71, 321, + 316, 327, 322, 329, 71, 332, 71, 71, 323, 71, + 71, 71, 334, 326, 71, 338, 335, 71, 71, 339, + 328, 71, 330, 331, 337, 71, 333, 341, 71, 336, + 71, 71, 344, 71, 345, 71, 346, 340, 71, 348, + 342, 151, 71, 71, 343, 71, 71, 71, 349, 71, - 352, 354, 345, 346, 348, 71, 349, 71, 355, 358, - 356, 351, 71, 71, 71, 71, 353, 357, 71, 71, - 71, 71, 364, 71, 365, 71, 366, 71, 359, 363, - 71, 71, 360, 146, 362, 71, 368, 361, 369, 71, - 371, 71, 374, 370, 71, 372, 71, 373, 71, 375, - 71, 378, 376, 71, 380, 382, 71, 71, 381, 377, - 71, 71, 71, 71, 385, 71, 383, 379, 387, 71, - 386, 71, 71, 71, 71, 71, 392, 71, 71, 71, - 393, 71, 71, 384, 145, 395, 391, 71, 397, 388, - 389, 71, 390, 71, 399, 401, 394, 396, 71, 71, + 71, 71, 352, 353, 71, 71, 357, 355, 359, 146, + 347, 351, 354, 360, 71, 350, 71, 71, 363, 71, + 356, 361, 362, 71, 71, 71, 71, 358, 71, 71, + 369, 71, 71, 372, 370, 371, 71, 368, 364, 365, + 71, 71, 367, 71, 366, 71, 373, 374, 71, 376, + 71, 71, 377, 71, 375, 71, 380, 378, 379, 381, + 71, 383, 71, 71, 385, 386, 387, 71, 71, 382, + 71, 71, 71, 71, 390, 388, 384, 71, 392, 71, + 71, 71, 391, 144, 71, 71, 397, 71, 393, 71, + 398, 71, 389, 71, 396, 400, 71, 394, 71, 402, - 398, 71, 402, 71, 71, 400, 71, 71, 71, 416, - 403, 71, 410, 412, 71, 71, 426, 413, 71, 414, - 404, 71, 411, 405, 421, 71, 71, 418, 406, 407, - 408, 409, 71, 425, 417, 415, 71, 71, 419, 420, - 422, 427, 71, 423, 428, 71, 424, 429, 71, 430, - 71, 71, 71, 71, 71, 71, 432, 437, 71, 71, - 71, 71, 440, 71, 433, 431, 439, 143, 71, 451, - 436, 71, 434, 446, 435, 71, 441, 453, 438, 71, - 442, 71, 444, 71, 445, 71, 443, 71, 447, 71, - 452, 71, 454, 71, 71, 71, 71, 455, 71, 71, + 71, 395, 406, 404, 71, 71, 71, 399, 71, 407, + 71, 401, 142, 71, 403, 71, 405, 408, 71, 415, + 417, 71, 71, 442, 418, 421, 419, 409, 71, 71, + 410, 416, 71, 426, 71, 411, 412, 413, 414, 71, + 71, 422, 420, 71, 423, 424, 425, 71, 71, 71, + 427, 433, 71, 71, 435, 430, 428, 431, 432, 429, + 71, 71, 71, 71, 71, 434, 71, 437, 71, 71, + 71, 457, 71, 445, 71, 438, 436, 444, 71, 71, + 71, 71, 71, 439, 441, 446, 440, 447, 443, 71, + 71, 71, 449, 448, 450, 451, 71, 458, 471, 452, - 71, 448, 466, 456, 449, 71, 450, 457, 467, 481, - 468, 465, 469, 472, 71, 458, 71, 459, 589, 460, - 480, 71, 482, 71, 470, 150, 71, 483, 71, 484, - 71, 71, 461, 486, 71, 462, 490, 463, 71, 464, - 471, 71, 71, 473, 474, 487, 485, 488, 71, 71, - 489, 71, 491, 475, 492, 476, 477, 478, 494, 71, - 479, 71, 493, 71, 71, 71, 71, 502, 495, 71, - 500, 497, 496, 71, 71, 503, 499, 71, 501, 498, - 71, 505, 507, 71, 71, 71, 504, 71, 71, 510, - 71, 506, 511, 512, 71, 71, 71, 71, 517, 509, + 456, 459, 71, 71, 71, 71, 71, 71, 461, 460, + 71, 472, 453, 71, 462, 454, 476, 455, 463, 71, + 71, 473, 474, 71, 475, 71, 464, 71, 465, 490, + 466, 488, 477, 478, 487, 486, 489, 71, 151, 71, + 71, 71, 151, 467, 71, 71, 468, 71, 469, 71, + 470, 71, 149, 479, 480, 493, 494, 71, 492, 491, + 495, 71, 496, 481, 498, 482, 483, 484, 71, 503, + 485, 497, 500, 71, 71, 499, 71, 71, 71, 508, + 502, 506, 501, 71, 509, 71, 71, 71, 71, 505, + 513, 71, 507, 504, 71, 71, 71, 71, 71, 511, - 71, 514, 71, 522, 519, 508, 515, 513, 516, 71, - 71, 71, 524, 520, 71, 71, 518, 71, 71, 71, - 141, 71, 71, 532, 528, 71, 533, 525, 521, 523, - 531, 527, 526, 535, 534, 529, 71, 530, 71, 71, - 536, 71, 537, 539, 71, 538, 71, 541, 71, 71, - 71, 71, 545, 546, 543, 71, 71, 71, 71, 71, - 547, 542, 71, 544, 540, 71, 71, 550, 71, 552, - 548, 551, 71, 71, 71, 71, 556, 553, 549, 71, - 71, 71, 558, 71, 554, 555, 557, 559, 71, 561, - 71, 71, 560, 71, 563, 562, 71, 564, 71, 565, + 516, 71, 512, 71, 517, 518, 510, 71, 71, 71, + 515, 523, 525, 71, 520, 522, 514, 519, 71, 521, + 71, 528, 526, 71, 71, 71, 71, 71, 71, 524, + 71, 71, 529, 538, 147, 534, 71, 527, 530, 537, + 531, 533, 71, 532, 541, 71, 535, 71, 536, 539, + 71, 540, 542, 543, 71, 71, 546, 71, 544, 71, + 545, 71, 547, 71, 549, 71, 551, 552, 71, 71, + 548, 71, 553, 71, 71, 71, 550, 71, 558, 556, + 557, 71, 71, 71, 554, 71, 559, 71, 71, 71, + 564, 71, 555, 560, 568, 565, 71, 563, 71, 567, - 568, 567, 566, 71, 71, 71, 71, 71, 575, 71, - 71, 577, 71, 71, 71, 578, 570, 71, 576, 71, - 71, 574, 584, 569, 571, 573, 572, 579, 580, 582, - 585, 581, 583, 71, 71, 71, 71, 71, 71, 588, - 71, 71, 591, 71, 71, 592, 71, 587, 594, 71, - 71, 71, 71, 71, 586, 608, 593, 71, 590, 71, - 595, 71, 597, 611, 71, 596, 71, 598, 607, 615, - 606, 609, 599, 610, 600, 71, 614, 71, 71, 71, - 601, 71, 602, 612, 618, 603, 604, 613, 617, 71, - 71, 616, 605, 620, 71, 619, 71, 621, 71, 624, + 566, 562, 561, 71, 570, 71, 571, 71, 71, 71, + 71, 71, 71, 71, 581, 71, 573, 569, 574, 71, + 71, 583, 71, 576, 584, 71, 71, 71, 572, 580, + 575, 577, 579, 578, 582, 71, 585, 71, 588, 71, + 593, 591, 590, 586, 71, 71, 587, 71, 71, 71, + 594, 71, 71, 597, 71, 71, 71, 589, 71, 598, + 600, 71, 71, 71, 71, 592, 614, 599, 71, 146, + 595, 71, 596, 71, 601, 602, 603, 71, 604, 613, + 71, 612, 71, 605, 617, 606, 620, 615, 71, 616, + 71, 607, 71, 608, 71, 618, 609, 610, 622, 619, - 71, 626, 71, 71, 622, 71, 71, 71, 71, 623, - 71, 71, 71, 632, 71, 628, 71, 627, 71, 633, - 629, 625, 636, 637, 150, 630, 639, 635, 638, 631, - 634, 71, 71, 641, 71, 71, 71, 71, 71, 71, - 71, 651, 646, 640, 71, 71, 648, 71, 649, 643, - 71, 644, 647, 642, 653, 645, 650, 71, 71, 656, - 71, 71, 652, 71, 655, 71, 71, 71, 659, 71, - 654, 658, 667, 71, 664, 71, 660, 71, 657, 665, - 71, 668, 71, 661, 669, 663, 662, 71, 666, 672, - 71, 670, 71, 671, 71, 71, 71, 71, 673, 674, + 71, 623, 624, 611, 626, 621, 71, 71, 71, 627, + 71, 630, 71, 625, 71, 632, 71, 628, 71, 71, + 71, 71, 71, 71, 71, 71, 71, 629, 638, 71, + 634, 633, 642, 639, 635, 71, 71, 631, 643, 636, + 641, 640, 151, 637, 645, 71, 644, 646, 71, 71, + 71, 647, 71, 71, 71, 71, 717, 71, 652, 654, + 71, 71, 649, 71, 648, 656, 71, 650, 653, 655, + 657, 651, 658, 659, 71, 660, 71, 661, 71, 71, + 71, 71, 71, 71, 71, 665, 664, 144, 71, 673, + 71, 670, 662, 666, 71, 663, 671, 71, 71, 669, - 71, 71, 675, 71, 678, 71, 676, 71, 677, 71, - 679, 682, 683, 71, 71, 71, 71, 684, 71, 688, - 686, 71, 71, 71, 150, 71, 680, 689, 681, 71, - 71, 71, 685, 691, 148, 690, 687, 71, 692, 71, - 695, 694, 693, 71, 71, 699, 71, 696, 697, 698, - 701, 71, 700, 71, 703, 702, 71, 704, 71, 71, - 71, 71, 707, 706, 71, 708, 71, 71, 71, 71, - 715, 71, 71, 711, 713, 71, 71, 709, 71, 705, - 712, 716, 710, 71, 721, 71, 71, 719, 714, 723, - 71, 722, 718, 71, 717, 720, 724, 71, 71, 71, + 667, 672, 675, 668, 674, 71, 676, 71, 71, 677, + 71, 678, 71, 71, 71, 679, 680, 71, 71, 681, + 71, 686, 71, 684, 71, 71, 683, 685, 689, 688, + 71, 682, 71, 71, 71, 71, 690, 71, 692, 694, + 71, 71, 695, 687, 697, 71, 71, 71, 691, 698, + 71, 701, 71, 699, 696, 693, 71, 703, 71, 71, + 707, 704, 71, 71, 700, 702, 71, 71, 712, 71, + 709, 708, 705, 710, 706, 71, 71, 71, 713, 71, + 71, 714, 71, 71, 71, 719, 721, 71, 71, 71, + 71, 71, 756, 715, 71, 711, 718, 716, 722, 725, - 728, 730, 725, 71, 71, 71, 71, 71, 729, 71, - 732, 71, 731, 727, 733, 71, 726, 735, 71, 734, - 71, 739, 71, 71, 736, 71, 71, 71, 742, 743, - 745, 741, 146, 71, 737, 738, 71, 740, 71, 71, - 750, 748, 71, 747, 744, 746, 749, 71, 71, 71, - 751, 752, 71, 71, 754, 71, 71, 71, 760, 71, - 71, 753, 71, 761, 71, 71, 755, 71, 71, 762, - 71, 756, 71, 757, 71, 758, 71, 759, 71, 71, - 763, 766, 764, 769, 767, 768, 765, 71, 770, 71, - 771, 774, 71, 71, 71, 772, 71, 71, 773, 71, + 71, 727, 720, 723, 724, 71, 726, 71, 71, 71, + 71, 728, 729, 730, 71, 734, 71, 736, 732, 731, + 71, 71, 733, 71, 71, 735, 71, 737, 739, 741, + 71, 738, 71, 740, 71, 745, 71, 71, 71, 71, + 71, 71, 71, 742, 748, 749, 747, 751, 71, 71, + 752, 743, 744, 71, 753, 746, 754, 71, 71, 758, + 750, 755, 71, 71, 71, 757, 760, 759, 71, 71, + 71, 766, 71, 71, 71, 71, 761, 71, 767, 71, + 71, 762, 768, 71, 71, 71, 763, 769, 764, 71, + 765, 775, 71, 771, 770, 773, 71, 71, 776, 772, - 71, 782, 71, 71, 71, 71, 783, 71, 71, 776, - 775, 71, 777, 781, 778, 779, 780, 71, 785, 786, - 71, 71, 784, 789, 788, 787, 71, 71, 791, 796, - 790, 792, 71, 71, 793, 71, 71, 794, 795, 71, - 71, 150, 797, 71, 71, 798, 802, 803, 71, 800, - 71, 71, 804, 799, 71, 801, 71, 71, 810, 71, - 806, 71, 71, 811, 805, 813, 71, 71, 816, 807, - 808, 812, 71, 71, 71, 71, 814, 818, 809, 71, - 815, 71, 822, 71, 71, 71, 71, 819, 71, 71, - 71, 823, 817, 824, 71, 71, 71, 71, 71, 821, + 774, 777, 71, 71, 71, 71, 780, 71, 71, 71, + 71, 778, 71, 788, 71, 779, 71, 71, 789, 71, + 782, 781, 71, 783, 787, 784, 785, 786, 790, 71, + 791, 792, 794, 71, 793, 71, 71, 71, 71, 71, + 71, 795, 797, 798, 799, 800, 796, 71, 71, 71, + 71, 71, 801, 805, 802, 803, 151, 71, 804, 806, + 809, 808, 71, 807, 71, 71, 810, 71, 71, 71, + 816, 71, 71, 817, 812, 819, 71, 71, 811, 71, + 71, 818, 813, 814, 822, 71, 820, 71, 71, 815, + 71, 824, 71, 828, 71, 71, 71, 825, 821, 71, - 71, 828, 825, 835, 820, 829, 836, 834, 830, 827, - 826, 837, 833, 71, 71, 831, 842, 838, 832, 71, - 839, 71, 840, 71, 71, 841, 845, 71, 71, 71, - 71, 71, 71, 853, 857, 71, 71, 843, 858, 71, - 71, 860, 867, 859, 844, 71, 846, 847, 854, 848, - 71, 71, 849, 855, 856, 71, 862, 850, 71, 71, - 866, 71, 864, 851, 852, 861, 863, 71, 71, 71, - 868, 71, 865, 869, 71, 71, 873, 71, 71, 71, - 71, 876, 872, 71, 71, 880, 882, 71, 870, 71, - 871, 71, 874, 875, 881, 878, 877, 883, 71, 71, + 823, 71, 829, 830, 71, 71, 71, 71, 71, 71, + 827, 834, 844, 826, 841, 835, 71, 71, 836, 831, + 832, 71, 839, 842, 833, 837, 840, 71, 838, 71, + 845, 71, 843, 71, 846, 71, 851, 886, 847, 848, + 71, 71, 71, 71, 71, 849, 859, 71, 71, 864, + 71, 863, 71, 71, 866, 850, 71, 852, 853, 865, + 854, 860, 861, 855, 71, 71, 868, 71, 856, 71, + 870, 71, 862, 71, 857, 858, 869, 71, 871, 867, + 71, 873, 872, 71, 71, 71, 71, 875, 71, 879, + 71, 71, 71, 878, 71, 71, 874, 71, 882, 888, - 918, 886, 884, 71, 885, 887, 879, 71, 71, 889, - 71, 71, 71, 888, 71, 71, 891, 890, 71, 71, - 892, 71, 71, 71, 898, 71, 893, 895, 896, 71, - 901, 71, 71, 71, 71, 71, 71, 894, 899, 900, - 71, 71, 897, 903, 904, 905, 71, 71, 71, 907, - 906, 902, 908, 71, 911, 71, 71, 71, 910, 71, - 71, 71, 909, 916, 919, 71, 914, 71, 71, 71, - 912, 917, 921, 71, 71, 913, 71, 71, 71, 71, - 71, 71, 920, 915, 929, 71, 927, 145, 71, 922, - 71, 925, 932, 923, 924, 71, 926, 930, 71, 933, + 71, 71, 884, 924, 876, 877, 880, 71, 881, 889, + 883, 71, 887, 892, 890, 71, 891, 885, 893, 71, + 71, 895, 71, 71, 71, 894, 896, 71, 897, 71, + 71, 71, 71, 71, 71, 904, 71, 898, 899, 901, + 902, 71, 907, 71, 71, 71, 71, 71, 71, 900, + 905, 903, 906, 71, 909, 910, 912, 71, 911, 71, + 913, 71, 908, 71, 914, 71, 917, 71, 71, 71, + 71, 925, 71, 71, 71, 915, 922, 71, 920, 71, + 71, 71, 918, 71, 923, 927, 71, 919, 916, 71, + 71, 71, 71, 71, 921, 926, 935, 71, 928, 929, - 931, 928, 936, 71, 935, 71, 71, 934, 71, 937, - 71, 939, 940, 71, 71, 71, 71, 71, 71, 938, - 71, 949, 71, 942, 944, 951, 71, 71, 941, 71, - 943, 71, 953, 955, 71, 945, 950, 947, 71, 946, - 948, 954, 71, 71, 71, 962, 952, 71, 959, 71, - 961, 71, 71, 956, 957, 963, 71, 71, 966, 71, - 968, 71, 958, 71, 71, 960, 71, 971, 150, 71, - 965, 970, 71, 71, 964, 71, 973, 71, 974, 967, - 71, 969, 71, 71, 972, 71, 71, 977, 71, 71, - 989, 71, 71, 71, 978, 975, 990, 992, 71, 980, + 933, 930, 939, 938, 71, 931, 932, 71, 936, 71, + 71, 71, 934, 71, 71, 71, 937, 943, 71, 940, + 945, 946, 71, 941, 942, 71, 71, 944, 71, 71, + 71, 955, 71, 950, 947, 948, 71, 71, 949, 957, + 71, 959, 71, 71, 71, 71, 961, 71, 951, 953, + 956, 952, 954, 960, 71, 968, 963, 142, 71, 71, + 958, 71, 962, 965, 964, 71, 967, 71, 71, 71, + 969, 972, 71, 974, 71, 966, 71, 71, 71, 977, + 151, 71, 971, 976, 71, 71, 970, 71, 979, 71, + 980, 71, 973, 71, 975, 71, 978, 71, 983, 71, - 976, 71, 71, 143, 71, 994, 981, 979, 991, 982, - 71, 1013, 71, 983, 71, 984, 993, 995, 996, 985, - 71, 986, 71, 71, 999, 997, 987, 1002, 998, 1000, - 71, 988, 71, 71, 71, 71, 1001, 71, 1004, 1006, - 71, 71, 71, 141, 71, 1011, 1012, 1003, 1005, 1007, - 1010, 71, 71, 1015, 1009, 1014, 71, 71, 1008, 71, - 71, 1017, 71, 1016, 71, 71, 71, 1027, 71, 1026, - 71, 1030, 71, 1031, 1018, 71, 1019, 1029, 1028, 71, - 1032, 1020, 71, 1021, 71, 1034, 1036, 71, 71, 1022, - 1038, 71, 1037, 1033, 1023, 1024, 71, 71, 71, 1042, + 71, 71, 995, 71, 71, 71, 984, 981, 996, 998, + 71, 982, 71, 986, 71, 71, 1000, 987, 997, 985, + 71, 988, 71, 71, 1051, 989, 71, 990, 1003, 1001, + 999, 991, 71, 992, 1002, 71, 1005, 71, 993, 1008, + 1004, 1006, 71, 994, 71, 71, 1007, 71, 71, 1010, + 1012, 71, 1009, 1020, 71, 71, 1017, 1018, 71, 1011, + 1016, 1013, 71, 71, 1021, 1015, 1019, 71, 71, 1014, + 71, 71, 71, 71, 71, 71, 1036, 1022, 1033, 71, + 71, 71, 71, 71, 1032, 71, 1037, 1023, 1034, 1024, + 71, 1025, 1035, 1038, 71, 71, 1026, 1039, 1027, 1042, - 1039, 1025, 71, 1035, 71, 71, 71, 1043, 71, 71, - 1040, 1041, 1048, 71, 71, 1045, 71, 1046, 71, 71, - 71, 1051, 1049, 1044, 71, 1047, 71, 71, 71, 71, - 71, 71, 71, 1050, 1053, 1058, 1056, 1057, 1055, 1052, - 1060, 71, 71, 71, 1054, 1062, 71, 1059, 1061, 71, - 71, 71, 71, 71, 71, 71, 1065, 1068, 1069, 1070, - 1071, 1063, 1064, 71, 1072, 1067, 1073, 1066, 1074, 71, - 1076, 71, 71, 71, 1078, 1077, 71, 1079, 71, 71, - 71, 1080, 71, 1086, 71, 1075, 71, 71, 1088, 71, - 1089, 1082, 71, 1081, 71, 1084, 71, 71, 1083, 1085, + 71, 1040, 71, 71, 1028, 1044, 1043, 71, 1049, 1029, + 1030, 71, 71, 1041, 1046, 1045, 1031, 1048, 71, 71, + 1047, 1054, 71, 71, 71, 71, 71, 71, 1052, 71, + 71, 1057, 71, 1055, 71, 71, 71, 1050, 1053, 71, + 71, 71, 71, 1062, 1056, 1063, 1059, 1061, 1064, 1058, + 1060, 1066, 71, 71, 1068, 71, 1065, 71, 71, 71, + 71, 1069, 71, 71, 71, 1074, 71, 1075, 1067, 1071, + 71, 1076, 1070, 1077, 1073, 1079, 1072, 71, 1078, 1081, + 1082, 71, 71, 1080, 71, 1083, 71, 71, 1084, 71, + 71, 1085, 1086, 71, 71, 1092, 1087, 71, 71, 1094, - 71, 1091, 1092, 71, 71, 71, 1087, 71, 1094, 1095, - 1101, 71, 71, 1090, 71, 1100, 1093, 1096, 1097, 71, - 1099, 71, 71, 1098, 71, 71, 1105, 1104, 1102, 71, - 71, 71, 71, 71, 71, 1109, 1111, 1112, 1116, 1113, - 1103, 71, 71, 71, 71, 71, 1110, 1106, 71, 1107, - 1114, 1108, 71, 1115, 1119, 71, 71, 1121, 71, 1117, - 71, 1120, 71, 71, 1122, 71, 71, 71, 1125, 1126, - 71, 1123, 1118, 71, 71, 71, 1131, 1132, 1127, 71, - 71, 1124, 71, 71, 1134, 1129, 1135, 71, 1128, 71, - 1133, 1139, 71, 1130, 71, 71, 71, 71, 71, 1136, + 71, 71, 71, 1095, 1088, 71, 1090, 1097, 1089, 1091, + 71, 71, 71, 71, 71, 1098, 71, 1093, 1100, 1096, + 1103, 1101, 71, 71, 1102, 1106, 71, 1099, 71, 1105, + 71, 71, 1107, 71, 71, 1108, 71, 1110, 1104, 71, + 1111, 71, 71, 71, 1117, 1115, 1109, 1118, 1112, 71, + 71, 71, 71, 71, 1119, 1113, 1116, 1120, 71, 1122, + 71, 1114, 1125, 1121, 71, 71, 71, 71, 71, 1123, + 71, 1126, 1127, 71, 71, 71, 1128, 1131, 1132, 1129, + 1124, 71, 1130, 71, 71, 71, 71, 1137, 1138, 71, + 71, 1140, 1133, 71, 71, 71, 1135, 1141, 71, 71, - 71, 1145, 71, 1137, 1138, 1141, 71, 71, 71, 71, - 1151, 71, 1140, 1149, 71, 71, 1142, 1166, 71, 1144, - 1146, 1148, 1147, 1143, 1150, 1153, 1154, 71, 71, 1156, - 71, 71, 71, 1155, 1152, 1157, 71, 71, 71, 71, - 71, 71, 71, 1160, 71, 2904, 71, 71, 1163, 71, - 1158, 1159, 71, 71, 1161, 71, 71, 1164, 1170, 1162, - 1167, 1172, 1178, 1165, 1169, 1168, 71, 1176, 71, 71, - 1173, 71, 1174, 1171, 1177, 1175, 71, 71, 71, 1180, - 71, 71, 1179, 1183, 71, 71, 1182, 1188, 71, 1181, - 1185, 71, 1186, 71, 71, 71, 1189, 71, 1190, 1184, + 71, 1134, 1145, 71, 1136, 1139, 71, 71, 1142, 1143, + 71, 1144, 1147, 71, 1151, 71, 71, 71, 1146, 71, + 71, 71, 71, 1157, 71, 1155, 1148, 1159, 2910, 1154, + 1152, 1156, 1150, 71, 1153, 1149, 1160, 71, 71, 1162, + 71, 1158, 71, 1161, 71, 1163, 71, 71, 71, 71, + 71, 71, 1166, 71, 1172, 71, 71, 1169, 1164, 71, + 1165, 71, 71, 1167, 71, 71, 1170, 71, 1168, 1178, + 1173, 1176, 1171, 71, 1182, 71, 1175, 1174, 1179, 71, + 1180, 71, 1177, 1181, 1183, 1187, 71, 71, 1184, 1185, + 1186, 71, 71, 71, 71, 1188, 1189, 71, 1191, 1194, - 1192, 1193, 71, 1187, 71, 71, 71, 71, 71, 71, - 71, 1194, 71, 71, 1191, 1200, 71, 71, 71, 1195, - 1196, 1198, 1199, 71, 1201, 1197, 71, 71, 71, 1202, - 71, 1206, 1205, 1210, 1203, 1204, 1209, 71, 1207, 71, - 71, 71, 1211, 1208, 71, 1212, 1214, 71, 1216, 71, - 1213, 71, 1215, 1217, 71, 71, 1221, 71, 2904, 1230, - 1229, 1219, 1220, 1218, 71, 71, 71, 1231, 1234, 1222, - 1228, 71, 1223, 1224, 71, 71, 1232, 1225, 71, 1237, - 71, 71, 71, 1226, 1233, 1235, 1236, 1227, 71, 1239, - 71, 71, 71, 1240, 71, 1241, 71, 71, 71, 71, + 71, 71, 71, 71, 71, 1192, 1195, 1196, 71, 1198, + 71, 1190, 1199, 71, 71, 71, 1193, 71, 71, 1200, + 71, 71, 71, 1197, 71, 71, 71, 1206, 1201, 1202, + 1204, 71, 1205, 1207, 1203, 71, 71, 1211, 71, 71, + 71, 1208, 1216, 1210, 71, 1209, 1213, 1215, 71, 71, + 1212, 71, 1218, 1217, 1220, 71, 1214, 71, 2910, 1222, + 1219, 71, 71, 1221, 1223, 71, 71, 1227, 71, 71, + 1235, 1225, 1236, 1238, 1224, 1226, 71, 71, 71, 71, + 1237, 1228, 1234, 71, 1229, 1230, 1239, 1240, 1241, 1231, + 71, 71, 71, 71, 71, 1232, 1242, 71, 1243, 1233, - 1249, 1250, 1246, 1238, 71, 1244, 71, 71, 71, 1251, - 1243, 1242, 1247, 71, 1245, 71, 1259, 1248, 71, 1252, - 71, 1258, 1253, 71, 71, 71, 1263, 1254, 1261, 1255, - 71, 1256, 1265, 1257, 1260, 71, 71, 1266, 71, 1264, - 1262, 1268, 71, 71, 71, 71, 71, 71, 71, 71, - 71, 71, 1270, 1275, 1273, 71, 1269, 1267, 1277, 1281, - 71, 1274, 71, 1271, 1272, 1276, 71, 1280, 1278, 1283, - 71, 71, 71, 1284, 71, 1285, 71, 71, 71, 1286, - 1279, 1282, 1289, 71, 1291, 71, 1288, 71, 1292, 71, - 71, 71, 1296, 71, 1293, 1287, 71, 71, 1290, 71, + 71, 1245, 71, 71, 71, 1246, 71, 1247, 71, 2910, + 71, 1244, 1248, 1250, 1251, 1252, 1255, 1256, 71, 71, + 1253, 1249, 71, 71, 1257, 71, 1254, 1259, 71, 1258, + 71, 1264, 1260, 1265, 1261, 71, 1262, 71, 1263, 1266, + 71, 1267, 71, 71, 1271, 71, 71, 71, 71, 1272, + 71, 1274, 1270, 71, 71, 1268, 71, 1276, 71, 71, + 1269, 1275, 71, 1281, 1279, 71, 71, 1273, 1283, 71, + 71, 71, 1277, 1278, 2910, 1286, 1280, 1287, 71, 1282, + 1289, 71, 71, 71, 1284, 1290, 1288, 71, 71, 71, + 1291, 1295, 71, 1292, 1285, 71, 1297, 71, 1294, 71, - 1298, 71, 71, 71, 71, 1302, 1300, 71, 71, 71, - 1304, 1294, 1295, 1301, 1306, 71, 1297, 71, 71, 1299, - 1303, 2904, 1307, 1305, 71, 71, 1308, 71, 1311, 1309, - 1310, 71, 71, 1313, 71, 71, 1312, 1317, 1314, 1318, - 1320, 1315, 71, 71, 71, 71, 71, 1319, 1316, 71, - 71, 1324, 71, 1321, 71, 71, 71, 1328, 1329, 71, - 1331, 1323, 71, 71, 71, 1330, 71, 71, 1322, 71, - 71, 71, 71, 1338, 1325, 1326, 1332, 71, 71, 1327, - 71, 1335, 1333, 71, 1336, 1343, 71, 1334, 1342, 1337, - 71, 71, 71, 71, 1347, 71, 1345, 1339, 1341, 1348, + 1298, 1293, 71, 71, 71, 1302, 71, 1299, 71, 71, + 71, 71, 1304, 71, 71, 1296, 1306, 71, 71, 1308, + 71, 1310, 1307, 71, 1300, 1301, 71, 71, 1303, 71, + 1305, 1312, 1309, 71, 1313, 1311, 1322, 71, 71, 71, + 1317, 1314, 1315, 1316, 71, 1319, 71, 71, 71, 1318, + 1323, 1324, 1320, 1325, 1321, 1326, 71, 71, 71, 71, + 71, 71, 1330, 71, 71, 71, 71, 1327, 1334, 1335, + 71, 1329, 71, 1337, 71, 71, 1336, 71, 1328, 71, + 71, 71, 71, 71, 1331, 1332, 1338, 71, 1344, 1333, + 71, 71, 1339, 1341, 1342, 71, 71, 1340, 1349, 71, - 71, 71, 1350, 1340, 71, 71, 71, 71, 71, 1352, - 71, 1346, 1351, 1344, 71, 1356, 1358, 1360, 1357, 1349, - 1353, 1354, 1359, 71, 1355, 71, 71, 71, 71, 1361, - 71, 71, 71, 1364, 71, 71, 1366, 1362, 71, 1368, - 71, 71, 1370, 71, 1373, 1374, 1363, 71, 1365, 71, - 1367, 1377, 71, 71, 71, 1369, 1371, 71, 1372, 71, - 71, 71, 71, 71, 1378, 1375, 71, 1384, 1376, 1381, - 1385, 1386, 1379, 1380, 71, 1382, 71, 71, 1389, 71, - 1383, 71, 71, 71, 1394, 1388, 2904, 1391, 1393, 1395, - 71, 71, 1387, 71, 1390, 71, 71, 1396, 71, 1397, + 1343, 1348, 71, 1345, 71, 1353, 71, 1351, 71, 1347, + 1354, 71, 71, 71, 71, 1346, 71, 1356, 1350, 71, + 1357, 1364, 71, 1352, 1355, 71, 1366, 1358, 71, 1359, + 1362, 1360, 71, 1363, 1361, 71, 1365, 71, 71, 1367, + 71, 71, 71, 71, 71, 71, 1372, 1369, 1368, 1374, + 71, 71, 71, 1379, 71, 71, 1383, 71, 1371, 1376, + 1373, 1380, 71, 1375, 1370, 71, 71, 71, 1377, 1378, + 71, 71, 1381, 71, 1382, 71, 71, 1384, 71, 71, + 1390, 1386, 71, 1391, 1392, 1385, 1387, 71, 1388, 1389, + 71, 1394, 71, 1395, 71, 1400, 1393, 2910, 71, 1401, - 1398, 71, 71, 1392, 71, 71, 1399, 1402, 71, 1401, - 71, 1405, 71, 1400, 71, 1404, 71, 71, 71, 1411, - 1403, 1408, 1407, 1413, 1412, 71, 71, 71, 1414, 71, - 71, 1409, 1406, 71, 1416, 71, 1419, 1410, 71, 71, - 71, 71, 1424, 1420, 71, 71, 1415, 1427, 71, 1417, - 1425, 71, 71, 71, 1418, 1430, 71, 1429, 1421, 1423, - 1422, 71, 71, 71, 71, 71, 71, 71, 1438, 71, - 1426, 1428, 2904, 71, 71, 1431, 1439, 1441, 71, 1435, - 71, 1432, 1433, 1434, 1437, 1442, 1440, 1436, 71, 71, - 71, 71, 1443, 71, 71, 71, 1447, 71, 1450, 1445, + 1397, 71, 1396, 1399, 71, 71, 71, 1402, 71, 1403, + 71, 1398, 1404, 71, 1405, 71, 71, 71, 71, 71, + 1411, 71, 1407, 71, 1406, 1410, 71, 71, 71, 1417, + 1408, 1413, 1409, 1414, 1418, 71, 71, 1419, 71, 1422, + 1415, 1412, 1420, 71, 71, 71, 1416, 71, 71, 71, + 71, 71, 1426, 1430, 71, 71, 1421, 1425, 71, 71, + 1431, 1433, 71, 1423, 1424, 71, 1436, 71, 1427, 1429, + 1428, 1435, 71, 71, 71, 71, 71, 1434, 71, 71, + 1432, 1437, 71, 71, 1444, 71, 1447, 71, 1445, 71, + 1441, 1446, 1438, 1439, 1440, 71, 71, 1443, 71, 1442, - 1448, 71, 1444, 71, 1446, 1454, 71, 71, 71, 71, - 1451, 71, 1455, 1449, 1456, 1457, 71, 1452, 71, 1453, - 1458, 1459, 1462, 1463, 71, 71, 1460, 71, 71, 71, - 71, 1467, 71, 1468, 1466, 1470, 71, 71, 1461, 71, - 1471, 1472, 71, 1464, 71, 71, 71, 71, 1465, 1475, - 71, 71, 1469, 71, 1478, 71, 71, 71, 71, 1477, - 1473, 1474, 1482, 71, 1484, 71, 1479, 1476, 71, 71, - 71, 1488, 1483, 71, 71, 1481, 1480, 71, 71, 71, - 1493, 71, 1491, 1485, 1486, 71, 71, 1489, 71, 1494, - 71, 1496, 1490, 1487, 1492, 71, 71, 71, 1495, 1498, + 1448, 71, 1449, 71, 1457, 71, 71, 1453, 71, 1450, + 1451, 1454, 71, 1456, 1460, 71, 1452, 71, 71, 71, + 71, 71, 1461, 1462, 1455, 1463, 1458, 71, 1459, 71, + 1468, 1464, 1469, 71, 71, 71, 71, 71, 1466, 1465, + 71, 1473, 1472, 71, 1474, 1476, 71, 71, 71, 1467, + 71, 1477, 1470, 1478, 71, 71, 1471, 71, 71, 71, + 71, 1481, 71, 1475, 71, 1484, 71, 1482, 1483, 71, + 71, 1479, 71, 1480, 1488, 1485, 71, 1490, 71, 71, + 71, 1494, 71, 1486, 1489, 1487, 71, 71, 71, 71, + 1491, 1497, 71, 1492, 1499, 71, 1495, 71, 71, 1502, - 1499, 71, 1501, 1502, 71, 71, 71, 71, 1497, 71, - 71, 1509, 71, 71, 1500, 71, 71, 1510, 71, 1503, - 1504, 1507, 71, 71, 1505, 1506, 71, 1513, 1514, 71, - 71, 1516, 71, 1511, 1508, 1512, 1515, 1517, 1518, 1520, - 1521, 71, 1519, 71, 71, 71, 1522, 71, 71, 1523, - 71, 71, 1527, 71, 1524, 1525, 71, 1528, 71, 71, - 71, 1530, 1532, 71, 1533, 1526, 71, 1529, 71, 1539, - 71, 71, 1534, 1531, 1536, 71, 71, 1537, 71, 1541, - 71, 1540, 71, 1542, 1545, 1544, 1535, 71, 71, 1538, - 71, 71, 1546, 1543, 71, 1547, 71, 1548, 1549, 1553, + 71, 1500, 71, 1498, 1493, 1496, 1505, 71, 71, 1501, + 71, 1504, 71, 1507, 1503, 1508, 71, 71, 71, 71, + 71, 71, 1515, 71, 71, 71, 1506, 71, 1509, 1516, + 71, 1510, 1517, 1513, 1519, 1520, 1524, 1511, 1512, 71, + 71, 1522, 71, 1518, 71, 1514, 1526, 1521, 71, 1523, + 1528, 71, 71, 71, 71, 71, 71, 71, 1533, 1531, + 1525, 1530, 1527, 71, 1534, 71, 71, 71, 71, 71, + 1539, 1538, 1529, 71, 71, 71, 71, 1545, 1542, 1535, + 1532, 1543, 1537, 71, 1536, 1540, 71, 71, 71, 71, + 71, 1546, 1550, 1544, 1541, 1548, 1547, 1551, 71, 71, - 71, 1551, 71, 71, 71, 1550, 1555, 1556, 1557, 1552, - 71, 1559, 71, 71, 71, 1558, 71, 71, 1562, 71, - 71, 1561, 1554, 71, 71, 1563, 71, 71, 71, 71, - 1571, 71, 71, 71, 71, 1560, 71, 71, 71, 1569, - 71, 1564, 1567, 1568, 1565, 1570, 1566, 71, 1574, 1576, - 71, 1572, 1578, 1573, 71, 1579, 71, 71, 1575, 71, - 1577, 71, 1582, 71, 71, 71, 71, 71, 71, 2904, - 1584, 1580, 1586, 1581, 71, 1583, 1587, 1593, 1585, 1588, - 1589, 1590, 1594, 71, 1595, 71, 1591, 71, 71, 71, - 1599, 71, 1598, 1592, 71, 71, 71, 71, 71, 1596, + 71, 1549, 71, 71, 1552, 71, 1553, 71, 1554, 1555, + 71, 71, 71, 1557, 1772, 71, 1556, 1559, 71, 1562, + 1558, 1561, 1563, 71, 71, 71, 1565, 71, 71, 1564, + 1560, 71, 71, 1568, 71, 1566, 1567, 71, 71, 71, + 71, 1570, 1569, 71, 71, 1577, 71, 1571, 71, 71, + 71, 71, 71, 1573, 1574, 1575, 71, 1576, 1572, 1582, + 71, 1584, 71, 1580, 71, 1585, 1578, 71, 1579, 71, + 71, 1581, 1583, 71, 71, 71, 71, 1586, 71, 71, + 71, 1587, 1590, 1592, 1593, 1600, 71, 1594, 1589, 1591, + 1601, 71, 71, 1588, 1595, 1596, 71, 71, 71, 1599, - 71, 1602, 1603, 71, 71, 1611, 1597, 1600, 71, 71, - 71, 71, 1606, 71, 1601, 71, 1605, 1604, 1608, 1610, - 71, 1609, 71, 1607, 1612, 71, 1614, 71, 1613, 71, - 71, 71, 1621, 1615, 1616, 71, 71, 71, 1617, 1618, - 71, 1625, 1624, 71, 71, 1623, 71, 71, 1620, 71, - 71, 1622, 1632, 1627, 1619, 1626, 1628, 1633, 71, 71, - 1635, 1629, 71, 1634, 1639, 1631, 71, 1630, 1636, 1637, - 71, 1638, 1640, 71, 71, 1644, 71, 71, 71, 1641, - 71, 71, 1642, 71, 1648, 71, 1646, 71, 1643, 1645, - 71, 71, 1647, 1649, 71, 71, 71, 71, 71, 1650, + 1597, 1604, 1605, 71, 1598, 71, 71, 71, 71, 1602, + 1603, 71, 1608, 1609, 71, 71, 71, 71, 1606, 71, + 71, 1617, 71, 1612, 71, 1607, 1614, 71, 1616, 1615, + 1610, 1611, 1618, 71, 71, 1613, 1622, 1620, 71, 71, + 1619, 71, 71, 71, 1627, 71, 71, 71, 71, 71, + 1631, 1624, 1621, 1630, 1623, 1629, 1633, 71, 71, 1634, + 1626, 1628, 71, 1638, 1632, 1641, 1625, 71, 1639, 71, + 71, 71, 1643, 71, 71, 1635, 1644, 2910, 71, 1636, + 1637, 1640, 71, 1645, 1646, 71, 71, 1650, 1642, 71, + 71, 1647, 71, 71, 1648, 1652, 71, 1654, 71, 71, - 1653, 1660, 1652, 1658, 71, 71, 1651, 71, 1654, 1655, - 1661, 1656, 1657, 71, 71, 71, 71, 71, 1662, 71, - 1667, 71, 71, 1671, 71, 1659, 71, 71, 2904, 71, - 1666, 71, 1664, 1663, 1665, 1673, 71, 1669, 71, 71, - 1670, 1668, 71, 1674, 1675, 71, 71, 1672, 1680, 71, - 1676, 1677, 1678, 71, 71, 1681, 1684, 71, 71, 71, - 71, 1679, 71, 71, 71, 1682, 1686, 71, 71, 71, - 1691, 71, 1685, 1683, 1687, 1688, 71, 1694, 1699, 1689, - 1692, 1695, 71, 71, 1690, 1693, 1696, 1697, 71, 71, - 1700, 1701, 71, 71, 1698, 71, 71, 1703, 71, 71, + 1649, 1653, 1651, 71, 1655, 71, 71, 71, 71, 71, + 71, 1664, 71, 1658, 71, 1659, 1666, 1656, 1657, 1667, + 1660, 1661, 71, 1662, 1663, 71, 71, 1668, 71, 71, + 71, 1673, 71, 1665, 71, 71, 71, 71, 1677, 71, + 71, 1672, 71, 71, 1679, 71, 1669, 1670, 1680, 1671, + 1675, 1683, 71, 1676, 1674, 71, 1678, 1681, 71, 71, + 1682, 1686, 71, 71, 71, 1690, 71, 71, 1684, 71, + 71, 71, 71, 1685, 71, 1688, 1692, 71, 1687, 1697, + 71, 1691, 1693, 1689, 1694, 71, 71, 1701, 71, 1698, + 1695, 71, 1700, 71, 1696, 71, 1702, 71, 1699, 1703, - 71, 1704, 71, 71, 71, 1702, 71, 71, 71, 1709, - 71, 71, 1713, 71, 71, 1710, 71, 1714, 1719, 1705, - 1707, 1708, 1706, 1711, 71, 1712, 1718, 71, 71, 1717, - 1715, 71, 71, 1716, 71, 71, 1724, 1720, 71, 71, - 1727, 1728, 71, 1729, 71, 1731, 71, 1721, 1722, 71, - 1732, 1723, 1725, 71, 1726, 1730, 71, 1735, 71, 71, - 1737, 71, 1739, 1736, 1738, 71, 71, 1741, 71, 71, - 1744, 71, 71, 71, 1733, 1743, 1746, 1734, 71, 1745, - 71, 71, 71, 1740, 71, 1753, 71, 1755, 71, 71, - 71, 71, 1756, 71, 1742, 71, 1747, 1748, 1749, 71, + 71, 1706, 1704, 1708, 1705, 1707, 71, 71, 71, 71, + 1709, 71, 1710, 71, 71, 71, 71, 71, 71, 71, + 71, 1715, 71, 71, 71, 1719, 1716, 71, 1724, 71, + 1717, 1711, 1713, 1714, 1718, 1712, 1720, 1725, 1723, 71, + 71, 71, 1722, 71, 71, 1726, 1730, 71, 71, 1721, + 71, 1733, 1734, 71, 1735, 71, 1728, 71, 1727, 1737, + 71, 1729, 1731, 71, 1732, 71, 1738, 1736, 1741, 71, + 71, 1743, 71, 1745, 1742, 1744, 71, 71, 1739, 71, + 1747, 71, 71, 71, 1740, 1749, 71, 1750, 71, 71, + 1751, 1752, 71, 1759, 1746, 71, 71, 71, 71, 71, - 1751, 1752, 1757, 1750, 1760, 71, 1754, 1758, 1761, 71, - 1759, 1764, 1765, 71, 71, 1763, 71, 71, 1762, 71, - 1767, 71, 71, 1770, 1771, 71, 71, 1773, 71, 71, - 71, 71, 71, 1779, 71, 1778, 71, 1768, 71, 1775, - 1776, 71, 1766, 1769, 71, 1782, 1772, 71, 71, 71, - 1785, 71, 71, 1777, 1774, 71, 1783, 1780, 1789, 1781, - 1788, 71, 71, 71, 71, 1792, 1793, 71, 1787, 1791, - 71, 71, 71, 71, 1784, 1794, 71, 1786, 1795, 1796, - 71, 1790, 71, 1797, 71, 1800, 1798, 71, 71, 1803, - 1804, 71, 1799, 71, 71, 71, 71, 71, 1807, 2904, + 1764, 71, 71, 1757, 71, 1761, 1748, 1753, 1754, 1755, + 1762, 71, 1758, 1765, 1756, 1763, 1760, 1767, 71, 1766, + 71, 71, 71, 71, 1771, 71, 71, 1768, 71, 1773, + 71, 1776, 1777, 71, 71, 1779, 71, 71, 71, 71, + 1769, 71, 1770, 71, 1775, 1784, 1774, 1781, 1782, 1785, + 71, 71, 71, 71, 1778, 71, 1787, 71, 71, 1791, + 1788, 71, 1780, 71, 1783, 71, 1789, 71, 1795, 71, + 1794, 71, 1801, 1786, 71, 71, 1798, 1799, 1797, 1793, + 71, 1790, 71, 71, 1800, 71, 71, 1792, 71, 1796, + 71, 1806, 71, 71, 1804, 1802, 71, 1809, 1810, 71, - 71, 71, 1801, 71, 71, 1813, 1816, 71, 1806, 71, - 1814, 1805, 71, 1802, 1808, 1809, 1810, 71, 1811, 1812, - 71, 1815, 1820, 71, 1817, 71, 71, 71, 1818, 71, - 1821, 71, 1824, 1819, 1827, 71, 71, 1830, 71, 1822, - 71, 1829, 71, 1831, 71, 1823, 71, 71, 1832, 1825, - 1828, 1826, 71, 1837, 71, 1833, 1838, 71, 1834, 1839, - 1841, 1842, 71, 1835, 1840, 71, 71, 71, 71, 71, - 1846, 71, 1836, 1844, 71, 71, 71, 71, 1848, 1851, - 1853, 1845, 71, 1847, 71, 71, 71, 1849, 1843, 71, - 71, 71, 71, 71, 1858, 71, 1854, 1857, 71, 1859, + 1803, 71, 1805, 71, 71, 71, 71, 1813, 71, 71, + 1807, 71, 71, 2910, 1812, 1821, 1819, 1822, 71, 1808, + 71, 1811, 71, 1814, 1817, 1815, 1820, 1816, 71, 71, + 1818, 71, 1823, 1824, 1826, 71, 71, 71, 1825, 71, + 71, 1833, 1830, 71, 71, 1828, 71, 71, 2910, 1835, + 1827, 1836, 71, 71, 1837, 1829, 71, 71, 1834, 1831, + 1832, 1838, 71, 1843, 71, 1839, 1842, 1844, 71, 1845, + 1847, 1848, 71, 1840, 1846, 71, 71, 71, 1841, 71, + 71, 1852, 71, 71, 1850, 71, 71, 71, 71, 1854, + 1857, 1859, 1851, 71, 1853, 1855, 71, 71, 1849, 71, - 1865, 1855, 1850, 2904, 1852, 1860, 71, 1861, 71, 1856, - 1863, 71, 71, 1862, 71, 71, 71, 1864, 1866, 71, - 1868, 71, 1869, 1867, 71, 1871, 71, 71, 71, 71, - 1875, 71, 71, 1870, 1874, 71, 71, 1876, 1872, 1873, - 1877, 1878, 1879, 71, 71, 71, 71, 71, 71, 71, - 1886, 1884, 1880, 1881, 1885, 71, 71, 71, 1888, 71, - 71, 1892, 1887, 1882, 71, 1883, 71, 71, 1891, 1889, - 71, 71, 71, 1890, 1899, 1893, 1894, 1896, 1898, 71, - 71, 71, 2904, 1897, 71, 1904, 71, 71, 1895, 71, - 1906, 71, 71, 71, 1907, 71, 1900, 1901, 71, 1902, + 71, 71, 71, 1865, 71, 1860, 1863, 1864, 1866, 71, + 1858, 1856, 1861, 1867, 71, 71, 1869, 71, 1862, 71, + 71, 71, 71, 1870, 1871, 71, 1872, 71, 1875, 71, + 1873, 71, 1874, 71, 1877, 1868, 71, 71, 1881, 71, + 71, 1876, 1880, 1878, 71, 71, 71, 71, 1879, 1882, + 1883, 1884, 1885, 71, 71, 71, 1887, 71, 71, 1892, + 71, 1890, 71, 1891, 1886, 71, 71, 1894, 71, 1897, + 71, 1898, 1888, 71, 1889, 71, 1893, 71, 1895, 71, + 71, 71, 1899, 71, 1902, 71, 1896, 1900, 1904, 71, + 71, 71, 71, 1903, 1905, 1910, 71, 1906, 1901, 1907, - 1903, 1908, 71, 1909, 1905, 1910, 71, 1912, 71, 71, - 71, 71, 71, 1911, 71, 71, 71, 1913, 71, 71, - 71, 1920, 1915, 1916, 1917, 1924, 71, 71, 71, 2904, - 1914, 1919, 1923, 71, 1921, 71, 1927, 1925, 1922, 71, - 1918, 71, 71, 71, 1928, 1931, 1930, 1926, 1929, 71, - 71, 1935, 71, 1932, 1933, 71, 71, 1934, 71, 71, - 1939, 71, 71, 1941, 1937, 1943, 71, 71, 1938, 71, - 1936, 71, 71, 1946, 1945, 71, 1942, 1947, 1940, 71, - 1948, 71, 1951, 71, 71, 71, 71, 71, 71, 1952, - 71, 71, 71, 1944, 1954, 2017, 1953, 1949, 1957, 71, + 1908, 71, 71, 1912, 1909, 71, 71, 1913, 71, 1911, + 1914, 71, 71, 1918, 1915, 1916, 1917, 71, 71, 71, + 71, 71, 71, 71, 71, 71, 1919, 2910, 71, 71, + 1926, 1921, 1922, 1923, 1930, 71, 71, 71, 1925, 1920, + 1929, 71, 1934, 1927, 1933, 1928, 71, 1931, 1924, 71, + 71, 71, 1937, 71, 1936, 71, 1932, 71, 1939, 71, + 71, 71, 1940, 71, 71, 1945, 1935, 71, 1941, 1938, + 1943, 71, 1944, 1947, 71, 1942, 1949, 71, 71, 71, + 1952, 1948, 71, 1946, 1951, 71, 71, 1953, 71, 1957, + 1954, 71, 71, 71, 71, 71, 1958, 71, 1963, 71, - 1961, 1950, 71, 1958, 1955, 1956, 71, 1959, 71, 71, - 1960, 1963, 71, 1962, 1966, 71, 71, 71, 71, 1968, - 1964, 71, 1969, 71, 71, 1970, 1973, 71, 1965, 1967, - 71, 1975, 1971, 71, 71, 1972, 1976, 71, 71, 1977, - 71, 71, 71, 1980, 71, 1978, 1979, 1981, 1974, 71, - 1985, 71, 71, 1982, 71, 71, 71, 71, 1984, 71, - 71, 1983, 1986, 71, 71, 1994, 71, 71, 1989, 71, - 1987, 1988, 1990, 71, 1995, 1991, 1992, 71, 71, 1993, - 71, 2003, 1996, 1997, 1999, 2002, 2005, 71, 71, 2000, - 71, 2007, 71, 71, 71, 2001, 1998, 2004, 2009, 2006, + 1950, 1960, 71, 1964, 1955, 1959, 71, 71, 1956, 1967, + 71, 1962, 71, 1961, 71, 71, 1969, 1968, 1970, 1972, + 71, 1965, 71, 71, 1974, 71, 1971, 1966, 71, 1975, + 71, 71, 1981, 71, 1973, 1979, 71, 1982, 71, 1976, + 1977, 71, 71, 1978, 71, 1983, 1980, 71, 71, 1986, + 71, 71, 1987, 1984, 1985, 1991, 71, 71, 71, 71, + 1990, 1988, 71, 71, 71, 71, 71, 71, 71, 71, + 1989, 2000, 2001, 1995, 71, 1992, 1993, 1997, 1994, 1996, + 1998, 71, 71, 1999, 71, 71, 71, 71, 2003, 2007, + 2002, 2005, 2006, 2011, 71, 71, 2010, 2013, 71, 71, - 71, 71, 2012, 2014, 2015, 2010, 71, 2013, 71, 71, - 71, 71, 2008, 71, 2011, 71, 2016, 2019, 71, 71, - 2020, 2024, 71, 2026, 2023, 71, 2018, 71, 2025, 2028, - 71, 71, 71, 2030, 2021, 71, 2029, 2031, 71, 71, - 2033, 71, 71, 2027, 2032, 2022, 71, 71, 71, 71, - 2035, 2034, 2036, 71, 2038, 71, 71, 71, 2044, 71, - 2041, 71, 71, 71, 71, 2039, 2037, 2045, 2040, 2047, - 71, 71, 71, 2043, 2042, 71, 2046, 2051, 71, 2054, - 71, 71, 2049, 71, 71, 71, 71, 71, 2048, 2055, - 2050, 2052, 71, 2053, 71, 71, 71, 2065, 71, 71, + 71, 2004, 2008, 71, 2012, 2016, 71, 2015, 2018, 2020, + 2021, 2009, 71, 2019, 71, 71, 71, 71, 2014, 2017, + 2022, 71, 2025, 71, 71, 2026, 71, 2030, 71, 2023, + 71, 2031, 2024, 71, 71, 2029, 2034, 71, 71, 2027, + 71, 2036, 71, 2035, 71, 2032, 2037, 71, 2039, 2038, + 2028, 71, 2033, 71, 71, 2040, 71, 2041, 71, 71, + 2042, 71, 71, 2044, 71, 71, 71, 2047, 2050, 71, + 2051, 71, 71, 71, 71, 71, 2046, 2053, 2043, 71, + 2049, 71, 2045, 2048, 2057, 71, 2052, 2055, 2060, 71, + 71, 71, 71, 2056, 2058, 71, 71, 71, 2061, 2054, - 71, 71, 2056, 2057, 2066, 71, 2060, 2062, 2058, 71, - 2059, 2064, 2067, 2061, 2068, 2063, 71, 2070, 2069, 2071, - 71, 2072, 71, 71, 2073, 71, 2075, 71, 71, 2078, - 71, 71, 2079, 71, 71, 71, 2074, 2076, 2080, 71, - 2077, 2084, 71, 2085, 71, 2087, 71, 2083, 71, 2089, - 71, 2081, 71, 2904, 2082, 71, 2092, 71, 2086, 71, - 2091, 2093, 71, 71, 71, 71, 2088, 2090, 71, 71, - 2099, 71, 2095, 2094, 2098, 2101, 71, 71, 2096, 71, - 71, 71, 2105, 2104, 2097, 2103, 71, 2100, 2107, 71, - 71, 71, 2111, 71, 71, 2102, 71, 2106, 71, 71, + 71, 71, 71, 2059, 71, 2071, 71, 2910, 71, 71, + 2062, 2063, 2072, 2068, 71, 71, 2066, 2910, 2064, 2070, + 2065, 2067, 2074, 2069, 71, 2076, 71, 2073, 2075, 2077, + 71, 2078, 71, 71, 71, 2081, 71, 2084, 71, 71, + 71, 2079, 71, 71, 2085, 2082, 2080, 2086, 2083, 71, + 2090, 71, 2091, 71, 71, 2093, 71, 71, 2095, 71, + 2087, 2089, 71, 2088, 71, 2098, 71, 2099, 71, 2097, + 71, 71, 71, 2092, 71, 2094, 71, 2096, 2105, 71, + 2101, 2104, 71, 71, 2100, 71, 2102, 2107, 71, 2109, + 71, 71, 71, 2103, 2110, 71, 2111, 2113, 71, 71, - 2116, 71, 71, 2115, 71, 2108, 2109, 71, 71, 2110, - 2120, 71, 71, 2114, 2112, 71, 71, 2125, 71, 2113, - 71, 2117, 2118, 2119, 2121, 2122, 2123, 71, 71, 2126, - 2127, 71, 71, 71, 71, 71, 71, 2130, 2131, 71, - 71, 2124, 71, 2129, 2135, 71, 71, 2128, 2133, 71, - 2137, 2138, 2140, 71, 2142, 71, 71, 2134, 71, 2132, - 71, 2143, 71, 2141, 2139, 71, 2136, 2144, 2146, 71, - 71, 71, 2147, 71, 2148, 71, 71, 2153, 2145, 2149, - 2150, 2154, 2151, 71, 71, 71, 2159, 71, 2155, 2152, - 71, 2158, 71, 71, 2157, 71, 2156, 71, 2160, 71, + 71, 2106, 71, 2108, 2117, 71, 71, 2115, 71, 2114, + 71, 2112, 2121, 2122, 71, 71, 71, 71, 2116, 71, + 2118, 2120, 2126, 71, 71, 2119, 2128, 71, 71, 2123, + 2124, 2125, 71, 2131, 71, 71, 71, 2127, 2129, 71, + 71, 2133, 71, 2132, 71, 2136, 71, 2135, 2134, 2137, + 71, 71, 71, 2130, 71, 2139, 2141, 2143, 71, 2144, + 2146, 2138, 71, 2148, 71, 71, 71, 2140, 71, 71, + 2149, 71, 71, 2145, 2153, 71, 2142, 2150, 71, 71, + 71, 2152, 71, 2147, 2154, 71, 2159, 2155, 2156, 2151, + 2160, 2157, 71, 71, 2158, 71, 71, 2161, 71, 2164, - 71, 2166, 71, 71, 71, 71, 2161, 71, 71, 71, - 71, 2164, 2168, 2162, 2167, 2163, 2165, 2169, 71, 71, - 2170, 2172, 2171, 71, 2174, 71, 2173, 2214, 2175, 2189, - 2176, 2177, 71, 71, 2178, 2179, 71, 71, 71, 2182, - 2180, 2183, 71, 2181, 2904, 71, 71, 71, 2184, 71, - 71, 2186, 71, 71, 2190, 71, 2185, 71, 2187, 2191, - 2192, 2193, 71, 71, 71, 71, 2188, 71, 2194, 2198, - 71, 2197, 71, 2195, 71, 71, 71, 2200, 71, 71, - 71, 71, 2207, 2204, 71, 2196, 2206, 2199, 71, 71, - 2208, 2212, 2203, 71, 71, 2201, 2202, 71, 71, 2211, + 2165, 71, 2166, 71, 2163, 2162, 71, 71, 71, 71, + 2167, 71, 2172, 71, 71, 71, 71, 71, 2174, 71, + 2183, 71, 2173, 2168, 2170, 2169, 2175, 2171, 2178, 71, + 71, 2176, 2177, 2179, 2180, 71, 71, 2184, 71, 2181, + 2185, 71, 71, 2187, 2188, 2186, 2189, 2182, 2190, 71, + 71, 71, 71, 71, 2192, 71, 71, 71, 71, 2196, + 71, 2199, 71, 71, 2197, 2191, 2198, 2193, 71, 71, + 2194, 71, 71, 2200, 71, 71, 2195, 71, 2201, 2203, + 2204, 71, 2206, 71, 71, 2205, 71, 71, 71, 2213, + 2210, 2202, 71, 2212, 2207, 71, 71, 71, 2209, 71, - 2205, 71, 71, 2216, 71, 71, 2213, 2209, 2217, 2210, - 71, 2219, 71, 2221, 71, 2215, 2220, 2223, 71, 71, - 71, 2225, 71, 71, 71, 71, 2222, 71, 71, 2224, - 2218, 71, 71, 2229, 2233, 71, 2231, 2232, 2227, 2234, - 71, 2226, 2235, 2228, 71, 2236, 71, 71, 71, 71, - 71, 2230, 71, 71, 2239, 2242, 71, 2244, 71, 2243, - 71, 71, 2237, 71, 71, 2241, 2247, 71, 71, 2238, - 2254, 2240, 71, 2250, 71, 2246, 2245, 2251, 71, 2252, - 2248, 71, 2249, 71, 71, 71, 2253, 71, 2259, 71, - 2260, 71, 2258, 2261, 71, 2262, 71, 2255, 2256, 71, + 2218, 71, 2214, 2208, 2217, 71, 71, 2211, 71, 2219, + 2215, 2223, 71, 2216, 2220, 71, 2222, 71, 71, 2221, + 71, 2225, 2226, 2227, 71, 2229, 71, 71, 71, 71, + 2231, 71, 71, 71, 71, 71, 2228, 2230, 2241, 2235, + 2239, 71, 71, 2224, 71, 2232, 2233, 2237, 71, 2234, + 2240, 71, 71, 2238, 71, 2242, 71, 71, 71, 71, + 71, 2236, 2245, 2248, 71, 71, 2250, 71, 2243, 2249, + 71, 2247, 71, 2253, 71, 71, 71, 2246, 2244, 71, + 2256, 2258, 2252, 2251, 2257, 71, 71, 71, 71, 2254, + 2260, 2259, 71, 2255, 71, 71, 2265, 71, 2266, 71, - 71, 71, 71, 2266, 71, 2257, 2265, 71, 2267, 71, - 71, 2263, 71, 2272, 71, 71, 2268, 71, 2264, 2274, - 71, 2269, 2275, 71, 71, 71, 71, 71, 2271, 2277, - 2270, 71, 2278, 71, 2273, 2276, 2281, 71, 2279, 2284, - 71, 71, 71, 71, 71, 71, 71, 2280, 71, 71, - 2285, 71, 2291, 2282, 71, 71, 71, 2283, 2288, 2293, - 71, 71, 2290, 2287, 2292, 2302, 71, 2295, 2286, 2294, - 2289, 71, 71, 71, 2298, 2299, 71, 2300, 2296, 2303, - 71, 2301, 71, 2297, 71, 2304, 71, 2305, 71, 2306, - 71, 2307, 71, 2308, 71, 71, 71, 71, 71, 71, + 2264, 2261, 2267, 71, 2268, 71, 2262, 71, 71, 71, + 71, 71, 2272, 71, 2263, 2271, 71, 2273, 71, 2269, + 71, 2274, 2278, 71, 71, 2275, 2270, 2280, 71, 2281, + 71, 71, 71, 71, 71, 71, 2277, 71, 2276, 71, + 2284, 71, 2282, 2279, 2283, 71, 2285, 2290, 71, 71, + 2287, 71, 71, 71, 71, 2286, 71, 2288, 2291, 2289, + 71, 2297, 71, 71, 71, 2294, 71, 2292, 2296, 71, + 71, 2293, 2298, 2304, 2301, 71, 2910, 2295, 71, 2299, + 71, 2300, 71, 2306, 2302, 2307, 2308, 71, 71, 2305, + 2309, 71, 2303, 71, 2310, 71, 2311, 71, 2312, 2314, - 2317, 71, 2318, 71, 71, 2314, 71, 2321, 71, 2309, - 71, 71, 2310, 2311, 71, 2320, 2312, 2313, 2315, 2316, - 2322, 2323, 71, 71, 71, 71, 2319, 71, 2324, 71, - 2326, 71, 2325, 2332, 71, 2333, 71, 71, 2334, 2327, - 71, 71, 71, 2328, 71, 2329, 71, 2330, 2331, 71, - 2904, 2338, 71, 2343, 71, 2335, 2336, 2341, 71, 2337, - 2342, 71, 2339, 2344, 2345, 71, 71, 71, 71, 2340, - 71, 71, 71, 71, 71, 71, 2347, 2351, 71, 71, - 71, 71, 2349, 2355, 2372, 2346, 71, 2348, 2356, 71, - 2360, 2350, 2358, 2352, 2353, 71, 2357, 71, 2354, 2359, + 2313, 71, 71, 71, 71, 71, 71, 71, 71, 2323, + 71, 2324, 71, 71, 71, 2320, 2327, 71, 2329, 71, + 2315, 2317, 2316, 2326, 71, 2319, 2318, 2321, 2322, 71, + 71, 71, 71, 2328, 71, 2325, 71, 71, 2332, 71, + 2338, 71, 2339, 71, 71, 2340, 71, 2330, 2331, 2333, + 2334, 71, 71, 2336, 2335, 71, 71, 71, 2337, 71, + 2344, 2342, 2341, 71, 2347, 2348, 2349, 71, 71, 71, + 2350, 2343, 2351, 71, 71, 71, 2345, 2346, 71, 71, + 71, 71, 71, 2353, 71, 2357, 71, 71, 2352, 2361, + 2355, 2362, 71, 71, 2354, 2365, 71, 71, 71, 2356, - 71, 2362, 2363, 71, 71, 71, 71, 2367, 71, 71, - 2361, 2369, 71, 71, 2371, 71, 71, 2364, 2374, 71, - 71, 2368, 71, 2375, 71, 2365, 2366, 71, 2373, 2377, - 71, 71, 2370, 2904, 71, 71, 71, 2378, 2382, 71, - 2379, 2385, 2376, 2380, 2381, 71, 2383, 2384, 71, 71, - 2386, 71, 71, 71, 71, 71, 2388, 2904, 71, 71, - 2389, 71, 2392, 2387, 2391, 71, 2394, 2397, 71, 71, - 2395, 71, 2390, 2393, 2396, 2398, 71, 71, 2399, 71, - 2403, 71, 2400, 71, 71, 2405, 71, 2401, 2404, 71, - 2408, 71, 2409, 71, 2407, 71, 2406, 2402, 2411, 71, + 71, 2358, 2360, 2359, 2366, 2364, 71, 71, 2363, 71, + 2368, 2370, 2367, 2369, 71, 2373, 71, 71, 71, 2375, + 71, 2377, 71, 71, 71, 71, 2910, 2371, 2378, 2372, + 2374, 2380, 71, 71, 2381, 71, 2376, 2379, 2383, 71, + 71, 71, 71, 2388, 71, 71, 2382, 71, 2384, 71, + 2386, 2387, 2391, 2385, 2390, 71, 71, 71, 71, 71, + 2389, 2392, 2394, 2393, 71, 71, 2395, 71, 71, 71, + 71, 71, 71, 2397, 2400, 2398, 2401, 2405, 2396, 71, + 2399, 2403, 71, 2402, 2404, 71, 71, 2409, 71, 71, + 2407, 2406, 2910, 71, 2410, 71, 2411, 2408, 71, 71, - 71, 2413, 2904, 2412, 71, 71, 2414, 71, 2410, 2415, - 2416, 2417, 71, 71, 71, 71, 2418, 71, 2419, 71, - 71, 71, 71, 2420, 71, 2423, 71, 2422, 71, 2425, - 2421, 2426, 71, 2424, 2427, 71, 71, 2428, 71, 71, - 2429, 71, 2434, 71, 2430, 71, 71, 2432, 2433, 2431, - 71, 71, 2435, 2439, 71, 71, 71, 71, 2443, 71, - 71, 71, 71, 71, 2436, 2441, 2437, 2447, 71, 2438, - 2440, 2473, 2442, 2450, 2444, 2445, 2448, 71, 2451, 71, - 2452, 2446, 2453, 71, 71, 71, 71, 2449, 71, 71, - 71, 71, 71, 2454, 2455, 2458, 71, 2456, 71, 2461, + 2414, 71, 2910, 2412, 2413, 2415, 71, 2417, 71, 71, + 2419, 2416, 2418, 71, 71, 2420, 71, 2423, 2421, 2422, + 71, 71, 71, 71, 2424, 71, 2425, 71, 71, 71, + 71, 2426, 71, 2429, 71, 2428, 71, 2431, 71, 2432, + 2427, 2430, 2433, 2434, 71, 71, 71, 71, 71, 2435, + 71, 2440, 2436, 71, 71, 2438, 2439, 2441, 2437, 71, + 2445, 71, 71, 71, 71, 71, 2449, 71, 71, 71, + 71, 71, 2442, 2447, 2443, 2453, 2454, 71, 2444, 2456, + 2448, 2446, 2450, 2451, 2457, 71, 2458, 2459, 71, 2452, + 71, 71, 71, 71, 71, 2455, 71, 71, 2461, 2460, - 2462, 71, 71, 2457, 2463, 71, 2459, 2464, 71, 2465, - 71, 2460, 2467, 71, 71, 2470, 71, 2468, 71, 2471, - 71, 71, 2466, 2472, 71, 71, 2477, 71, 71, 2474, - 71, 2478, 71, 2469, 2479, 71, 2481, 71, 71, 2475, - 71, 2485, 71, 2480, 71, 2476, 2487, 71, 2486, 71, - 2483, 2482, 2488, 71, 2484, 71, 71, 2489, 71, 2494, - 71, 71, 2493, 71, 71, 71, 2498, 2490, 2496, 2497, - 71, 2499, 71, 2491, 71, 2492, 71, 2500, 71, 2502, - 71, 71, 71, 2509, 71, 2495, 2505, 71, 71, 71, - 2904, 71, 2515, 71, 71, 2503, 2504, 2501, 2506, 2511, + 71, 2464, 71, 2462, 71, 2467, 2468, 71, 71, 2463, + 2469, 71, 2470, 71, 2465, 2471, 71, 2466, 2473, 71, + 71, 2476, 71, 2474, 71, 2477, 71, 71, 2472, 2478, + 71, 71, 71, 71, 2479, 2480, 2483, 71, 71, 2475, + 71, 2484, 2485, 71, 71, 2481, 2487, 71, 2486, 71, + 2491, 2488, 2482, 2492, 71, 71, 71, 71, 71, 2493, + 2494, 71, 2489, 2490, 71, 2495, 71, 2500, 71, 71, + 2499, 71, 71, 71, 2504, 2502, 2503, 71, 2497, 71, + 2496, 2498, 71, 71, 71, 2506, 2508, 2505, 71, 71, + 71, 71, 71, 2501, 2511, 2515, 71, 2507, 2518, 71, - 2512, 2508, 2507, 71, 2516, 2513, 71, 2510, 2514, 71, - 2517, 71, 2518, 71, 2519, 71, 71, 71, 71, 71, - 2523, 2521, 71, 2527, 71, 71, 71, 2524, 2528, 2530, - 71, 2520, 71, 71, 2532, 71, 71, 2522, 71, 2525, - 2531, 2533, 2526, 71, 2529, 2534, 71, 2535, 71, 71, - 2538, 71, 2536, 2539, 71, 2540, 71, 2537, 2541, 2543, - 71, 71, 2547, 71, 2544, 71, 71, 71, 71, 71, - 2546, 2542, 71, 2545, 71, 71, 2549, 2554, 71, 71, - 2550, 2552, 71, 71, 2548, 71, 2555, 2557, 71, 2559, - 2558, 71, 71, 71, 2551, 2553, 71, 2561, 2569, 2556, + 71, 2509, 2510, 2519, 71, 2514, 2512, 2517, 2521, 71, + 2513, 2516, 71, 2522, 71, 2523, 71, 2524, 71, 2520, + 71, 2525, 71, 71, 71, 71, 71, 2527, 71, 2533, + 71, 71, 71, 71, 2526, 2530, 2534, 2536, 71, 2537, + 2538, 71, 71, 2528, 71, 2531, 71, 2539, 2532, 2535, + 2529, 2540, 71, 2541, 71, 2542, 71, 2545, 71, 71, + 71, 71, 71, 2543, 2546, 2549, 2553, 71, 2547, 71, + 2550, 71, 71, 71, 2544, 2551, 2548, 71, 2552, 71, + 71, 2560, 2555, 71, 71, 71, 71, 71, 71, 2556, + 2554, 2563, 2558, 2564, 71, 2565, 2561, 71, 71, 71, - 2560, 71, 2562, 2564, 71, 2563, 2565, 71, 2566, 71, - 71, 71, 2571, 2568, 2575, 71, 2570, 71, 71, 2567, - 2572, 71, 2573, 2574, 71, 71, 71, 2579, 71, 71, - 2577, 2581, 71, 71, 71, 71, 2585, 71, 71, 71, - 71, 71, 2576, 71, 2578, 2588, 71, 71, 2582, 2583, - 71, 2586, 2587, 2580, 71, 2584, 2589, 71, 2592, 2590, - 2595, 71, 2593, 2597, 71, 2591, 2594, 2598, 71, 71, - 2600, 71, 71, 2596, 71, 71, 71, 2605, 71, 2604, - 71, 71, 71, 71, 2609, 71, 71, 71, 2601, 71, - 2599, 2602, 2603, 71, 2611, 2613, 71, 2614, 71, 2610, + 2559, 71, 2567, 71, 2557, 2784, 2562, 2566, 71, 2568, + 2570, 71, 2569, 2571, 71, 2572, 71, 71, 71, 2574, + 2575, 2577, 71, 2576, 71, 71, 2573, 71, 71, 2578, + 2579, 2580, 71, 71, 71, 2585, 71, 71, 2583, 71, + 2581, 71, 2587, 71, 71, 2591, 71, 71, 71, 2582, + 71, 71, 2584, 71, 2589, 2594, 2588, 2595, 71, 71, + 2592, 2586, 71, 2593, 2590, 71, 71, 2598, 71, 2596, + 2599, 2601, 71, 2603, 71, 2604, 71, 2597, 2606, 71, + 71, 71, 71, 2611, 71, 2602, 71, 71, 2600, 2605, + 71, 2610, 71, 71, 2615, 71, 2607, 2608, 2609, 71, - 2606, 2608, 2616, 71, 2607, 71, 71, 2615, 2612, 71, - 71, 2621, 71, 2620, 71, 2619, 2618, 71, 2625, 71, - 71, 71, 2617, 2626, 2623, 71, 2627, 71, 2622, 2630, - 2624, 2631, 71, 2628, 2629, 71, 71, 2633, 71, 2632, - 71, 71, 71, 71, 2638, 2634, 2635, 2636, 71, 71, - 71, 2641, 71, 2642, 71, 2645, 71, 2637, 2644, 2643, - 2646, 71, 71, 71, 71, 2639, 2640, 2647, 71, 2649, - 2650, 71, 2651, 71, 2652, 71, 71, 2648, 2654, 71, - 71, 2653, 71, 71, 71, 2659, 71, 2655, 2660, 71, - 71, 71, 71, 2664, 71, 71, 2666, 2667, 71, 71, + 71, 2619, 71, 71, 2617, 2620, 71, 2612, 71, 2616, + 71, 2614, 71, 2613, 2622, 71, 71, 71, 2627, 2624, + 71, 2625, 2618, 2621, 71, 2631, 71, 71, 71, 2629, + 2626, 2632, 71, 2633, 2623, 2628, 71, 2636, 71, 2634, + 2630, 2637, 71, 71, 71, 2639, 71, 2638, 71, 71, + 71, 71, 2644, 2641, 2642, 71, 2635, 2643, 71, 2647, + 71, 2648, 71, 71, 2640, 2651, 71, 2645, 2646, 2652, + 71, 71, 2650, 71, 2649, 71, 2653, 2656, 71, 71, + 2655, 2657, 71, 2658, 71, 71, 71, 2654, 2660, 71, + 2659, 71, 71, 71, 2665, 2666, 71, 71, 2661, 71, - 2661, 2663, 2656, 71, 2657, 2658, 2668, 71, 2669, 2671, - 2662, 71, 71, 2670, 2665, 71, 2674, 71, 71, 71, - 2673, 71, 71, 2672, 2675, 71, 71, 2678, 71, 71, - 71, 71, 2680, 71, 71, 71, 2681, 2679, 2676, 71, - 71, 2677, 71, 2693, 71, 71, 2904, 2690, 2682, 2686, - 2683, 2684, 2685, 2694, 71, 2691, 2687, 2688, 2692, 71, - 71, 2689, 71, 2695, 2696, 71, 2697, 71, 2698, 2699, - 71, 71, 2700, 2701, 2704, 71, 2702, 2703, 2706, 71, - 2705, 71, 71, 71, 2709, 71, 71, 2710, 2708, 71, - 71, 71, 71, 2711, 2712, 71, 2707, 71, 2713, 71, + 71, 2670, 71, 71, 71, 71, 2673, 71, 2662, 2669, + 2672, 2667, 71, 2663, 2664, 2674, 71, 2675, 2676, 2668, + 2677, 71, 2671, 71, 2680, 71, 71, 71, 71, 71, + 71, 2679, 2681, 2678, 71, 2684, 71, 71, 71, 71, + 71, 71, 2686, 71, 71, 2687, 2685, 71, 2682, 2683, + 71, 71, 71, 2699, 71, 71, 2696, 2688, 2761, 2689, + 2690, 2691, 2695, 2692, 2697, 2698, 2910, 2693, 2694, 2700, + 71, 71, 2702, 71, 71, 2701, 2703, 71, 2704, 2705, + 71, 71, 2706, 2707, 2710, 71, 2708, 2709, 71, 71, + 2711, 71, 2712, 71, 2715, 71, 71, 71, 2714, 71, - 2717, 2718, 71, 71, 2716, 71, 2714, 2719, 71, 71, - 2715, 71, 2720, 2724, 2721, 2726, 71, 71, 2725, 71, - 2722, 71, 2730, 2723, 71, 71, 2729, 71, 2727, 2731, - 71, 2728, 2733, 71, 2848, 2734, 2735, 71, 2736, 71, - 2737, 71, 2738, 71, 2732, 2739, 71, 2740, 71, 2741, - 71, 2742, 71, 71, 2744, 71, 71, 71, 71, 2747, - 71, 71, 2743, 71, 71, 2751, 71, 2753, 71, 71, - 71, 71, 2748, 2755, 2749, 2750, 2745, 2746, 71, 2757, - 71, 2752, 71, 2760, 71, 2759, 71, 2754, 71, 71, - 71, 71, 71, 2762, 71, 2767, 71, 2756, 2758, 71, + 71, 71, 2713, 2718, 2717, 71, 71, 71, 2723, 2719, + 2724, 71, 2725, 71, 71, 2722, 2720, 71, 71, 2730, + 2732, 2716, 2727, 2721, 2731, 71, 71, 2728, 71, 2726, + 2729, 71, 71, 71, 71, 71, 71, 2736, 71, 2737, + 2739, 71, 2854, 2740, 2741, 71, 2734, 2742, 71, 2743, + 71, 2744, 71, 2733, 2735, 2738, 2745, 71, 2746, 71, + 2747, 71, 2748, 71, 71, 2750, 71, 71, 71, 71, + 2753, 71, 71, 2749, 71, 71, 2757, 71, 2759, 71, + 71, 71, 71, 2754, 71, 2755, 2756, 2751, 2752, 71, + 2763, 71, 2758, 2766, 2765, 71, 71, 71, 2760, 71, - 2761, 2768, 71, 2763, 2769, 71, 71, 2765, 2764, 2766, - 71, 71, 71, 2774, 2772, 2771, 71, 71, 71, 2770, - 2778, 71, 2777, 71, 2780, 71, 71, 2776, 71, 71, - 71, 2773, 71, 71, 71, 2775, 2779, 71, 2781, 2791, - 71, 71, 71, 71, 2875, 2782, 2783, 71, 2784, 2786, - 71, 2787, 2792, 2788, 2785, 2789, 71, 2790, 2793, 71, - 71, 2794, 2795, 71, 2796, 71, 2797, 71, 71, 71, - 2798, 2799, 2800, 71, 2801, 71, 2804, 71, 2807, 71, - 71, 2802, 71, 2809, 71, 71, 71, 71, 2803, 2805, - 2812, 71, 71, 2813, 71, 2814, 2816, 2806, 71, 2808, + 2764, 2768, 71, 2769, 71, 71, 71, 2762, 2773, 2767, + 2774, 71, 2775, 71, 71, 2770, 71, 71, 2771, 2772, + 2778, 71, 71, 2777, 71, 71, 71, 71, 2786, 2776, + 71, 2783, 71, 71, 71, 2780, 2782, 2779, 71, 2785, + 71, 71, 71, 2787, 71, 2781, 71, 2797, 71, 2790, + 71, 2788, 2789, 2799, 71, 2792, 2795, 71, 2800, 2798, + 2801, 71, 2793, 2791, 2794, 71, 2796, 2802, 71, 71, + 71, 71, 71, 2805, 71, 71, 2806, 2807, 71, 2810, + 71, 2813, 71, 71, 2803, 71, 2815, 71, 71, 2804, + 2809, 71, 2811, 2818, 71, 71, 2819, 71, 71, 2808, - 2810, 2817, 71, 71, 2811, 71, 71, 71, 2821, 71, - 71, 71, 2818, 2815, 2824, 71, 2819, 71, 71, 71, - 71, 71, 2826, 71, 2820, 2823, 2822, 71, 2831, 71, - 71, 71, 2828, 2829, 2832, 2825, 2836, 2827, 2835, 71, - 2830, 2837, 71, 2838, 71, 2833, 71, 71, 71, 2834, - 71, 2839, 2843, 2840, 71, 2841, 2845, 71, 71, 2844, - 71, 71, 71, 2842, 2846, 71, 2851, 71, 71, 71, - 71, 2854, 71, 2855, 71, 71, 71, 71, 71, 71, - 2847, 2849, 2853, 2858, 2850, 2856, 2852, 2859, 2857, 71, - 2861, 71, 2862, 71, 2860, 71, 2866, 71, 2863, 71, + 2812, 2822, 2814, 2816, 2823, 2820, 71, 71, 71, 2817, + 71, 71, 2827, 71, 71, 71, 71, 2821, 71, 71, + 2824, 2825, 2830, 71, 2832, 71, 71, 71, 71, 2829, + 2826, 71, 71, 2837, 2828, 71, 2831, 2838, 2834, 2835, + 2841, 71, 2833, 71, 2843, 71, 2836, 2910, 2842, 2839, + 71, 71, 2844, 71, 2840, 71, 71, 2849, 2845, 71, + 2846, 2847, 71, 71, 2848, 2851, 71, 2850, 71, 71, + 71, 2857, 2852, 71, 71, 71, 2860, 71, 2853, 2861, + 71, 71, 71, 71, 71, 71, 71, 2859, 2855, 2856, + 2862, 2864, 2858, 2863, 71, 2868, 71, 2867, 71, 71, - 2868, 71, 2864, 71, 2869, 2865, 2870, 71, 71, 2873, - 71, 71, 71, 71, 2871, 71, 2867, 2874, 2876, 71, - 2877, 71, 2878, 71, 2882, 71, 2880, 2872, 71, 71, - 2879, 71, 71, 71, 2884, 71, 2885, 71, 2888, 2889, - 71, 71, 2881, 71, 2892, 2893, 71, 2883, 71, 2895, - 71, 2886, 2887, 71, 2890, 2894, 2896, 71, 71, 71, - 2891, 71, 71, 2904, 2898, 2897, 2899, 2902, 71, 2903, - 71, 2904, 2900, 2904, 2904, 2904, 2904, 2904, 2904, 2904, - 2904, 2901, 43, 43, 43, 43, 43, 43, 43, 48, - 48, 48, 48, 48, 48, 48, 53, 53, 53, 53, + 2872, 2865, 2866, 2869, 71, 71, 2874, 71, 2875, 2870, + 71, 2871, 71, 71, 71, 2876, 2879, 71, 71, 2877, + 71, 2883, 71, 2873, 2881, 2880, 2882, 71, 71, 71, + 71, 71, 2878, 71, 2886, 2884, 71, 2885, 2888, 71, + 71, 2890, 71, 71, 2894, 2891, 2895, 71, 71, 2887, + 2889, 71, 2892, 71, 2898, 2899, 71, 71, 2901, 71, + 71, 2893, 2902, 71, 2900, 71, 71, 2896, 71, 71, + 2897, 2904, 2903, 2905, 2908, 71, 2909, 71, 2910, 2906, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2907, 43, + 43, 43, 43, 43, 43, 43, 48, 48, 48, 48, - 53, 53, 53, 59, 59, 59, 59, 59, 59, 59, - 64, 64, 64, 64, 64, 64, 64, 74, 74, 2904, - 74, 74, 74, 74, 140, 140, 2904, 2904, 2904, 140, - 140, 142, 142, 2904, 2904, 142, 2904, 142, 144, 2904, - 2904, 2904, 2904, 2904, 144, 147, 147, 2904, 2904, 2904, - 147, 147, 149, 2904, 2904, 2904, 2904, 2904, 149, 151, - 151, 2904, 151, 151, 151, 151, 75, 75, 2904, 75, - 75, 75, 75, 13, 2904, 2904, 2904, 2904, 2904, 2904, - 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904, - 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904, + 48, 48, 48, 53, 53, 53, 53, 53, 53, 53, + 59, 59, 59, 59, 59, 59, 59, 64, 64, 64, + 64, 64, 64, 64, 74, 74, 2910, 74, 74, 74, + 74, 141, 141, 2910, 2910, 2910, 141, 141, 143, 143, + 2910, 2910, 143, 2910, 143, 145, 2910, 2910, 2910, 2910, + 2910, 145, 148, 148, 2910, 2910, 2910, 148, 148, 150, + 2910, 2910, 2910, 2910, 2910, 150, 152, 152, 2910, 152, + 152, 152, 152, 75, 75, 2910, 75, 75, 75, 75, + 13, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904, - 2904, 2904, 2904, 2904 + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910 } ; -static yyconst flex_int16_t yy_chk[5715] = +static const flex_int16_t yy_chk[5722] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -2029,627 +2023,628 @@ static yyconst flex_int16_t yy_chk[5715] = 5, 3, 6, 20, 4, 20, 20, 5, 20, 6, 7, 7, 7, 7, 20, 7, 8, 8, 8, 8, 29, 8, 7, 9, 9, 9, 22, 22, 8, 10, - 10, 10, 15, 25, 9, 29, 15, 25, 2910, 31, + 10, 10, 15, 25, 9, 29, 15, 25, 2916, 31, 10, 11, 11, 11, 11, 11, 11, 19, 79, 19, 19, 30, 19, 11, 31, 79, 30, 25, 19, 19, 47, 47, 11, 12, 12, 12, 12, 12, 12, 21, 23, 23, 21, 21, 24, 12, 21, 81, 23, 24, - 34, 21, 23, 24, 12, 23, 24, 971, 24, 24, + 34, 21, 23, 24, 12, 23, 24, 977, 24, 24, 21, 26, 26, 27, 27, 90, 28, 81, 32, 32, 28, 34, 27, 28, 33, 33, 26, 32, 36, 33, 28, 35, 28, 32, 90, 42, 35, 32, 52, 84, 35, 52, 36, 37, 37, 33, 35, 38, 37, 35, - 42, 69, 38, 63, 63, 38, 35, 84, 37, 40, - 72, 37, 38, 40, 72, 69, 38, 38, 39, 39, + 42, 69, 38, 63, 63, 38, 35, 84, 37, 37, + 40, 37, 38, 80, 40, 69, 38, 38, 39, 39, - 102, 39, 78, 40, 41, 41, 78, 40, 40, 41, - 39, 149, 58, 41, 58, 58, 39, 58, 66, 102, + 126, 39, 41, 41, 40, 80, 126, 41, 40, 40, + 39, 41, 58, 89, 58, 58, 39, 58, 66, 86, 66, 66, 68, 66, 68, 68, 71, 68, 71, 71, - 66, 71, 85, 74, 80, 74, 74, 71, 74, 77, - 82, 85, 77, 82, 74, 74, 80, 83, 86, 88, - 83, 89, 87, 91, 93, 92, 98, 95, 87, 91, - 96, 98, 86, 83, 87, 94, 87, 88, 88, 92, - 159, 99, 91, 89, 93, 95, 94, 94, 96, 97, - 105, 159, 101, 97, 94, 99, 100, 106, 101, 100, - 103, 104, 100, 107, 104, 103, 108, 107, 104, 105, + 66, 71, 72, 86, 127, 89, 72, 71, 74, 77, + 74, 74, 77, 74, 78, 88, 127, 85, 78, 74, + 74, 82, 83, 87, 82, 83, 85, 92, 93, 87, + 91, 94, 99, 88, 88, 87, 91, 87, 83, 95, + 96, 92, 94, 94, 161, 102, 99, 97, 93, 91, + 94, 97, 161, 105, 98, 106, 101, 95, 96, 98, + 100, 150, 101, 100, 102, 103, 100, 112, 104, 106, - 109, 106, 110, 108, 105, 100, 100, 101, 111, 110, - 112, 113, 114, 109, 104, 103, 114, 115, 116, 117, - 119, 111, 121, 116, 118, 118, 122, 116, 120, 113, - 112, 124, 120, 127, 127, 115, 125, 121, 126, 117, - 119, 120, 125, 123, 124, 122, 123, 120, 128, 129, - 126, 127, 130, 131, 127, 134, 132, 123, 133, 135, - 133, 123, 137, 136, 135, 129, 128, 134, 138, 133, - 139, 130, 132, 138, 131, 136, 141, 141, 147, 143, - 137, 133, 143, 145, 139, 145, 145, 154, 145, 148, - 148, 150, 154, 150, 150, 151, 150, 151, 151, 153, + 103, 104, 105, 109, 107, 104, 108, 105, 107, 100, + 100, 101, 110, 108, 111, 113, 109, 112, 114, 110, + 103, 104, 114, 115, 117, 116, 119, 111, 118, 118, + 116, 122, 120, 113, 116, 121, 120, 123, 132, 125, + 124, 115, 129, 124, 117, 120, 119, 128, 128, 129, + 121, 120, 125, 130, 124, 131, 123, 122, 124, 132, + 129, 133, 134, 135, 134, 128, 136, 137, 128, 130, + 138, 136, 140, 134, 131, 135, 139, 133, 148, 137, + 157, 139, 142, 142, 144, 134, 140, 144, 138, 146, + 154, 146, 146, 154, 146, 149, 149, 151, 157, 151, - 151, 156, 153, 155, 160, 157, 158, 151, 161, 155, - 162, 163, 160, 164, 158, 165, 163, 167, 155, 156, - 157, 158, 166, 191, 165, 162, 168, 161, 166, 166, - 170, 168, 178, 164, 169, 169, 170, 172, 171, 191, - 171, 172, 167, 171, 173, 173, 172, 174, 175, 176, - 177, 172, 178, 175, 176, 179, 182, 172, 172, 180, - 171, 179, 177, 180, 181, 183, 174, 184, 185, 181, - 182, 186, 187, 189, 190, 192, 186, 187, 189, 184, - 183, 192, 184, 196, 179, 194, 185, 188, 188, 193, - 193, 194, 195, 188, 190, 197, 198, 194, 195, 199, + 151, 152, 151, 152, 152, 155, 152, 158, 156, 159, + 155, 162, 163, 152, 156, 160, 164, 159, 165, 166, + 168, 164, 158, 156, 159, 167, 160, 163, 166, 169, + 162, 167, 167, 171, 169, 170, 170, 175, 165, 171, + 173, 172, 179, 172, 173, 168, 172, 174, 174, 173, + 176, 147, 177, 178, 173, 176, 175, 177, 180, 183, + 173, 173, 179, 172, 180, 178, 181, 182, 184, 185, + 181, 186, 182, 183, 187, 188, 189, 189, 191, 187, + 188, 185, 189, 184, 185, 190, 192, 180, 197, 186, + 190, 193, 194, 194, 189, 195, 189, 193, 191, 196, - 200, 197, 198, 196, 201, 188, 200, 188, 202, 201, - 203, 198, 204, 205, 202, 206, 203, 207, 208, 204, - 199, 206, 209, 210, 208, 211, 205, 212, 214, 215, - 213, 210, 212, 216, 218, 217, 220, 207, 211, 213, - 217, 221, 219, 214, 209, 215, 219, 221, 222, 223, - 224, 225, 218, 216, 227, 223, 225, 226, 220, 226, - 230, 227, 228, 229, 232, 231, 222, 222, 228, 229, - 224, 231, 233, 234, 234, 236, 232, 235, 235, 230, - 239, 236, 237, 238, 240, 238, 233, 242, 237, 240, - 243, 244, 241, 246, 260, 245, 260, 257, 243, 236, + 198, 195, 192, 199, 200, 196, 198, 195, 197, 199, + 201, 206, 202, 203, 204, 205, 201, 202, 199, 203, + 204, 207, 205, 208, 206, 200, 209, 207, 210, 211, + 213, 212, 209, 214, 215, 213, 216, 211, 217, 218, + 218, 219, 214, 208, 212, 220, 219, 221, 222, 215, + 210, 221, 216, 223, 224, 225, 226, 227, 217, 223, + 229, 225, 227, 220, 228, 231, 228, 230, 233, 232, + 222, 231, 224, 224, 230, 232, 226, 234, 235, 229, + 236, 237, 237, 234, 238, 238, 239, 233, 242, 240, + 235, 244, 239, 245, 236, 240, 241, 243, 241, 246, - 245, 247, 238, 239, 241, 249, 242, 247, 248, 251, - 249, 244, 250, 252, 248, 251, 246, 250, 253, 254, - 255, 256, 257, 259, 258, 263, 259, 267, 252, 256, - 258, 266, 253, 146, 255, 261, 261, 254, 262, 264, - 264, 262, 267, 263, 265, 265, 268, 266, 269, 268, - 270, 271, 269, 272, 273, 275, 274, 271, 274, 270, - 273, 275, 276, 277, 277, 278, 276, 272, 279, 280, - 278, 282, 281, 283, 279, 284, 284, 285, 286, 288, - 285, 287, 290, 276, 144, 287, 283, 289, 289, 280, - 281, 291, 282, 292, 291, 293, 286, 288, 295, 294, + 247, 248, 243, 244, 249, 260, 248, 246, 250, 145, + 239, 242, 245, 251, 250, 241, 252, 253, 254, 251, + 247, 252, 253, 255, 254, 256, 257, 249, 258, 259, + 260, 263, 262, 263, 261, 262, 266, 259, 255, 256, + 261, 269, 258, 270, 257, 264, 264, 265, 267, 267, + 265, 268, 268, 271, 266, 272, 271, 269, 270, 272, + 273, 274, 275, 277, 276, 277, 278, 274, 283, 273, + 276, 279, 278, 280, 280, 279, 275, 281, 282, 284, + 285, 286, 281, 143, 282, 287, 287, 288, 283, 289, + 288, 290, 279, 291, 286, 290, 293, 284, 292, 292, - 290, 293, 294, 297, 298, 292, 301, 309, 299, 301, - 295, 296, 297, 299, 300, 303, 309, 300, 308, 300, - 296, 302, 298, 296, 305, 305, 307, 303, 296, 296, - 296, 296, 310, 308, 302, 300, 304, 306, 304, 304, - 306, 310, 312, 307, 311, 311, 307, 312, 313, 313, - 314, 315, 316, 317, 318, 319, 315, 320, 321, 327, - 329, 322, 323, 320, 316, 314, 322, 142, 323, 329, - 319, 324, 317, 327, 318, 325, 324, 331, 321, 326, - 325, 336, 326, 331, 326, 328, 325, 332, 328, 330, - 330, 335, 332, 337, 333, 338, 444, 333, 339, 342, + 294, 285, 296, 294, 295, 298, 297, 289, 296, 297, + 300, 291, 141, 301, 293, 302, 295, 298, 299, 300, + 302, 303, 304, 323, 303, 304, 303, 299, 305, 323, + 299, 301, 306, 308, 308, 299, 299, 299, 299, 310, + 311, 305, 303, 307, 306, 307, 307, 309, 312, 313, + 309, 314, 314, 316, 316, 311, 310, 312, 313, 310, + 315, 317, 318, 319, 320, 315, 321, 318, 325, 322, + 334, 334, 326, 327, 70, 319, 317, 326, 340, 327, + 328, 331, 329, 320, 322, 328, 321, 329, 325, 330, + 341, 333, 330, 329, 330, 331, 332, 335, 340, 332, - 345, 328, 336, 333, 328, 344, 328, 333, 337, 345, - 338, 335, 339, 342, 349, 333, 334, 334, 444, 334, - 344, 341, 346, 347, 341, 348, 354, 346, 346, 347, - 350, 352, 334, 349, 355, 334, 353, 334, 351, 334, - 341, 343, 353, 343, 343, 350, 348, 351, 356, 358, - 352, 359, 354, 343, 355, 343, 343, 343, 357, 360, - 343, 361, 356, 363, 357, 362, 366, 364, 357, 367, - 362, 359, 358, 364, 365, 365, 361, 368, 363, 360, - 370, 367, 369, 371, 372, 375, 366, 374, 369, 372, - 376, 368, 373, 373, 377, 373, 378, 383, 378, 371, + 333, 336, 336, 335, 337, 338, 342, 343, 338, 337, + 344, 341, 332, 346, 338, 332, 346, 332, 338, 347, + 349, 342, 343, 352, 344, 350, 338, 339, 339, 352, + 339, 351, 346, 347, 350, 349, 351, 351, 353, 354, + 355, 357, 64, 339, 360, 359, 339, 356, 339, 364, + 339, 348, 59, 348, 348, 355, 356, 363, 354, 353, + 357, 361, 358, 348, 360, 348, 348, 348, 358, 364, + 348, 359, 362, 365, 366, 361, 367, 368, 362, 369, + 363, 367, 362, 370, 370, 369, 371, 372, 373, 366, + 374, 375, 368, 365, 376, 377, 374, 379, 380, 372, - 379, 375, 381, 381, 379, 370, 376, 374, 377, 380, - 382, 384, 383, 380, 385, 387, 378, 386, 389, 393, - 140, 388, 390, 389, 387, 391, 390, 384, 380, 382, - 388, 386, 385, 392, 391, 387, 394, 387, 396, 392, - 393, 395, 394, 396, 397, 395, 398, 398, 399, 400, - 401, 402, 402, 403, 400, 405, 404, 406, 412, 403, - 404, 399, 407, 401, 397, 411, 408, 407, 409, 409, - 405, 408, 410, 419, 413, 70, 412, 409, 406, 414, - 416, 423, 414, 415, 410, 411, 413, 415, 417, 417, - 418, 425, 416, 424, 419, 418, 420, 420, 422, 422, + 377, 382, 373, 381, 378, 378, 371, 378, 384, 383, + 376, 383, 384, 387, 380, 382, 375, 379, 385, 381, + 386, 386, 385, 388, 389, 390, 392, 391, 394, 383, + 393, 398, 387, 394, 54, 392, 402, 385, 388, 393, + 389, 391, 396, 390, 397, 395, 392, 399, 392, 395, + 397, 396, 398, 399, 400, 401, 402, 404, 400, 405, + 401, 403, 403, 406, 405, 407, 407, 408, 409, 410, + 404, 411, 409, 408, 412, 413, 406, 414, 414, 412, + 413, 415, 416, 417, 410, 418, 414, 419, 421, 423, + 419, 420, 411, 415, 423, 420, 424, 418, 422, 422, - 425, 424, 423, 426, 427, 430, 429, 431, 432, 433, - 435, 434, 439, 436, 432, 435, 427, 434, 433, 440, - 437, 431, 440, 426, 429, 430, 429, 436, 437, 438, - 441, 437, 439, 442, 443, 438, 441, 445, 446, 443, - 447, 448, 446, 449, 450, 447, 451, 442, 449, 452, - 454, 456, 457, 455, 441, 456, 448, 458, 445, 459, - 450, 461, 452, 459, 462, 451, 453, 453, 455, 462, - 454, 457, 453, 458, 453, 463, 461, 466, 460, 464, - 453, 468, 453, 460, 465, 453, 453, 460, 464, 469, - 465, 463, 453, 466, 467, 465, 471, 467, 470, 470, + 421, 417, 416, 425, 425, 427, 427, 428, 429, 430, + 431, 432, 435, 434, 437, 436, 429, 424, 430, 440, + 437, 439, 441, 432, 440, 438, 447, 439, 428, 436, + 431, 434, 435, 434, 438, 442, 441, 444, 443, 445, + 447, 446, 445, 442, 443, 448, 442, 446, 449, 451, + 448, 450, 453, 451, 452, 454, 456, 444, 455, 452, + 454, 460, 462, 457, 461, 446, 462, 453, 463, 53, + 449, 467, 450, 464, 455, 456, 457, 458, 458, 461, + 465, 460, 469, 458, 465, 458, 467, 463, 472, 464, + 466, 458, 470, 458, 474, 466, 458, 458, 469, 466, - 472, 472, 473, 474, 468, 475, 476, 477, 478, 469, - 479, 480, 481, 478, 484, 474, 482, 473, 488, 479, - 475, 471, 482, 484, 485, 476, 486, 481, 485, 477, - 480, 487, 486, 488, 489, 490, 491, 492, 493, 494, - 496, 498, 493, 487, 495, 503, 495, 498, 496, 490, - 499, 491, 494, 489, 500, 492, 497, 497, 501, 503, - 500, 502, 499, 504, 502, 506, 505, 507, 506, 508, - 501, 505, 511, 511, 509, 510, 507, 517, 504, 509, - 509, 512, 512, 507, 513, 508, 507, 520, 510, 516, - 513, 514, 514, 515, 515, 516, 518, 519, 517, 518, + 468, 470, 471, 458, 472, 468, 473, 475, 471, 473, + 476, 476, 477, 471, 478, 478, 479, 474, 480, 481, + 482, 483, 486, 484, 485, 487, 488, 475, 484, 490, + 480, 479, 488, 485, 481, 493, 494, 477, 490, 482, + 487, 486, 491, 483, 492, 495, 491, 493, 496, 558, + 492, 494, 497, 498, 499, 500, 558, 501, 499, 501, + 505, 502, 496, 507, 495, 503, 503, 497, 500, 502, + 504, 498, 505, 506, 508, 507, 504, 508, 509, 506, + 510, 511, 512, 514, 513, 512, 511, 48, 516, 517, + 517, 515, 509, 513, 523, 510, 515, 515, 530, 514, - 521, 522, 519, 524, 522, 523, 520, 526, 521, 525, - 523, 526, 527, 528, 529, 530, 531, 528, 527, 532, - 530, 534, 533, 536, 64, 532, 524, 533, 525, 538, - 535, 541, 529, 535, 59, 534, 531, 542, 535, 537, - 537, 536, 535, 539, 540, 541, 544, 538, 539, 540, - 543, 545, 542, 546, 545, 544, 543, 546, 547, 548, - 549, 550, 548, 547, 551, 549, 552, 553, 555, 554, - 556, 556, 557, 552, 554, 558, 559, 550, 560, 546, - 553, 557, 551, 561, 562, 563, 564, 560, 555, 564, - 562, 563, 559, 565, 558, 561, 565, 566, 567, 568, + 513, 516, 519, 513, 518, 518, 520, 520, 519, 521, + 521, 522, 526, 524, 525, 523, 524, 522, 527, 525, + 528, 530, 529, 528, 531, 532, 527, 529, 533, 532, + 535, 526, 534, 536, 533, 537, 534, 539, 536, 538, + 540, 541, 539, 531, 541, 538, 542, 544, 535, 541, + 543, 543, 545, 541, 540, 537, 546, 545, 547, 548, + 549, 546, 550, 553, 542, 544, 549, 551, 553, 552, + 551, 550, 547, 552, 548, 554, 555, 556, 554, 557, + 560, 555, 561, 559, 564, 560, 562, 562, 565, 563, + 566, 593, 593, 556, 567, 552, 559, 557, 563, 566, - 569, 571, 566, 570, 575, 573, 569, 571, 570, 572, - 573, 576, 572, 568, 574, 577, 567, 575, 579, 574, - 574, 578, 580, 581, 576, 588, 582, 578, 581, 582, - 583, 580, 54, 584, 577, 577, 583, 579, 585, 587, - 587, 586, 590, 585, 582, 584, 586, 586, 592, 589, - 588, 589, 591, 593, 591, 594, 595, 596, 597, 598, - 599, 590, 603, 598, 597, 600, 592, 601, 602, 599, - 605, 593, 604, 594, 607, 595, 609, 596, 608, 610, - 600, 603, 601, 606, 604, 605, 602, 611, 607, 606, - 608, 611, 612, 613, 614, 609, 615, 616, 610, 617, + 573, 568, 561, 564, 565, 569, 567, 568, 574, 570, + 571, 569, 570, 571, 572, 575, 581, 577, 573, 572, + 576, 575, 574, 577, 578, 576, 579, 578, 580, 581, + 582, 579, 583, 580, 580, 584, 585, 586, 590, 587, + 594, 584, 588, 582, 587, 588, 586, 589, 596, 591, + 590, 583, 583, 589, 591, 585, 592, 595, 598, 595, + 588, 592, 592, 599, 597, 594, 597, 596, 600, 601, + 602, 603, 606, 605, 604, 608, 598, 603, 604, 607, + 609, 599, 605, 610, 613, 611, 600, 606, 601, 614, + 602, 612, 615, 608, 607, 610, 616, 612, 613, 609, - 618, 618, 619, 620, 625, 622, 619, 621, 624, 613, - 612, 632, 614, 617, 615, 615, 616, 626, 621, 622, - 623, 627, 620, 625, 624, 623, 628, 629, 627, 632, - 626, 628, 630, 631, 629, 633, 634, 630, 631, 635, - 636, 638, 633, 637, 639, 634, 638, 639, 640, 636, - 641, 642, 640, 635, 643, 637, 644, 645, 646, 646, - 642, 651, 647, 647, 641, 648, 648, 649, 652, 643, - 644, 647, 653, 654, 652, 655, 649, 654, 645, 656, - 651, 657, 658, 659, 661, 662, 660, 655, 658, 663, - 669, 659, 653, 660, 672, 674, 664, 666, 679, 657, + 611, 614, 617, 618, 619, 620, 617, 621, 622, 626, + 623, 615, 624, 624, 625, 616, 630, 628, 625, 627, + 619, 618, 631, 620, 623, 621, 621, 622, 626, 629, + 627, 628, 630, 632, 629, 633, 638, 635, 634, 641, + 636, 631, 633, 634, 635, 636, 632, 637, 639, 640, + 642, 643, 637, 641, 638, 639, 644, 645, 640, 642, + 645, 644, 646, 643, 647, 648, 646, 649, 651, 650, + 652, 652, 653, 653, 648, 654, 654, 655, 647, 657, + 659, 653, 649, 650, 658, 661, 655, 660, 662, 651, + 658, 660, 663, 664, 665, 668, 666, 661, 657, 664, - 673, 664, 661, 672, 656, 664, 673, 669, 664, 663, - 662, 674, 666, 675, 678, 664, 679, 675, 664, 676, - 676, 677, 677, 680, 681, 678, 682, 685, 684, 687, - 698, 688, 682, 684, 688, 686, 690, 680, 689, 689, - 691, 691, 698, 690, 681, 683, 683, 683, 685, 683, - 692, 699, 683, 686, 687, 693, 693, 683, 697, 695, - 697, 694, 695, 683, 683, 692, 694, 696, 701, 700, - 699, 702, 696, 700, 703, 704, 704, 705, 708, 706, - 707, 707, 703, 709, 710, 711, 713, 713, 701, 712, - 702, 711, 705, 706, 712, 709, 708, 714, 750, 716, + 659, 667, 665, 666, 669, 678, 670, 672, 681, 675, + 663, 670, 681, 662, 678, 670, 680, 679, 670, 667, + 668, 685, 672, 679, 669, 670, 675, 684, 670, 682, + 682, 686, 680, 683, 683, 687, 688, 717, 684, 685, + 691, 690, 688, 717, 692, 686, 690, 693, 694, 695, + 695, 694, 696, 697, 697, 687, 689, 689, 689, 696, + 689, 691, 692, 689, 698, 699, 699, 701, 689, 704, + 701, 700, 693, 702, 689, 689, 700, 705, 702, 698, + 703, 704, 703, 706, 707, 709, 708, 706, 710, 710, + 715, 711, 714, 709, 712, 716, 705, 713, 713, 719, - 750, 717, 714, 714, 716, 718, 710, 717, 719, 720, - 722, 718, 723, 719, 721, 720, 722, 721, 724, 725, - 723, 727, 726, 728, 729, 729, 724, 726, 727, 730, - 732, 731, 733, 742, 735, 736, 732, 725, 730, 731, - 737, 738, 728, 735, 736, 737, 739, 740, 741, 739, - 738, 733, 740, 743, 743, 744, 745, 746, 742, 747, - 748, 752, 741, 748, 751, 751, 746, 753, 754, 757, - 744, 748, 753, 755, 756, 745, 758, 759, 760, 762, - 761, 763, 752, 747, 761, 767, 759, 53, 768, 754, - 765, 757, 764, 755, 756, 766, 758, 762, 764, 765, + 719, 756, 715, 756, 707, 708, 711, 718, 712, 720, + 714, 722, 718, 723, 720, 720, 722, 716, 724, 723, + 725, 726, 728, 727, 724, 725, 727, 726, 728, 729, + 730, 731, 734, 733, 732, 735, 735, 729, 730, 732, + 733, 736, 738, 739, 737, 741, 742, 744, 738, 731, + 736, 734, 737, 743, 741, 742, 744, 745, 743, 746, + 745, 747, 739, 748, 746, 749, 749, 750, 751, 752, + 753, 757, 757, 754, 758, 747, 754, 760, 752, 761, + 759, 762, 750, 763, 754, 759, 764, 751, 748, 766, + 768, 765, 767, 771, 753, 758, 767, 769, 760, 761, - 763, 760, 768, 769, 767, 770, 771, 766, 773, 769, - 775, 771, 772, 772, 774, 777, 776, 778, 779, 770, - 780, 781, 782, 774, 776, 783, 784, 781, 773, 787, - 775, 783, 785, 787, 788, 777, 782, 779, 785, 778, - 780, 786, 789, 790, 791, 793, 784, 786, 790, 792, - 792, 793, 794, 788, 789, 794, 795, 796, 797, 798, - 799, 799, 789, 800, 797, 791, 801, 802, 802, 803, - 796, 801, 804, 806, 795, 809, 804, 805, 805, 798, - 807, 800, 808, 811, 803, 812, 814, 808, 815, 817, - 817, 821, 818, 819, 809, 806, 818, 820, 820, 812, + 765, 762, 771, 770, 773, 763, 764, 772, 768, 770, + 774, 775, 766, 776, 779, 777, 769, 775, 781, 772, + 777, 778, 778, 773, 774, 782, 780, 776, 783, 784, + 785, 787, 786, 782, 779, 780, 788, 787, 781, 789, + 790, 791, 793, 794, 795, 789, 793, 791, 783, 785, + 788, 784, 786, 792, 797, 799, 795, 43, 796, 792, + 790, 799, 794, 796, 795, 798, 798, 800, 801, 802, + 800, 803, 804, 805, 805, 797, 806, 803, 807, 808, + 808, 809, 802, 807, 810, 812, 801, 815, 810, 811, + 811, 813, 804, 814, 806, 817, 809, 820, 814, 818, - 807, 822, 823, 48, 824, 822, 814, 811, 819, 815, - 816, 839, 839, 816, 826, 816, 821, 823, 824, 816, - 825, 816, 828, 829, 827, 825, 816, 829, 826, 827, - 827, 816, 830, 831, 832, 833, 828, 834, 831, 832, - 835, 842, 843, 43, 836, 837, 838, 830, 831, 833, - 836, 837, 838, 841, 835, 840, 844, 846, 834, 841, - 840, 843, 847, 842, 848, 849, 854, 847, 851, 846, - 850, 850, 852, 851, 844, 845, 845, 849, 848, 853, - 852, 845, 14, 845, 855, 854, 856, 856, 857, 845, - 859, 861, 857, 853, 845, 845, 859, 860, 862, 863, + 821, 823, 823, 825, 824, 827, 815, 812, 824, 826, + 826, 813, 828, 818, 829, 872, 828, 820, 825, 817, + 830, 821, 822, 831, 872, 822, 832, 822, 831, 829, + 827, 822, 834, 822, 830, 835, 833, 836, 822, 835, + 832, 833, 833, 822, 837, 838, 834, 839, 840, 837, + 838, 841, 836, 846, 842, 848, 843, 844, 846, 837, + 842, 839, 843, 844, 847, 841, 845, 845, 849, 840, + 847, 850, 852, 853, 854, 856, 856, 848, 853, 14, + 855, 857, 860, 859, 852, 858, 857, 849, 854, 850, + 851, 851, 855, 858, 861, 867, 851, 859, 851, 862, - 860, 845, 864, 855, 865, 863, 866, 864, 867, 868, - 861, 862, 869, 870, 871, 866, 872, 867, 869, 873, - 874, 872, 870, 865, 875, 868, 876, 877, 878, 879, - 880, 885, 883, 871, 874, 879, 877, 878, 876, 873, - 881, 886, 888, 887, 875, 885, 881, 880, 883, 889, - 890, 894, 891, 892, 893, 897, 888, 891, 892, 893, - 894, 886, 887, 895, 895, 890, 896, 889, 897, 899, - 900, 904, 896, 901, 901, 900, 900, 901, 902, 903, - 905, 902, 906, 908, 907, 899, 909, 911, 910, 908, - 911, 904, 912, 903, 910, 906, 913, 914, 905, 907, + 862, 860, 863, 870, 851, 865, 863, 868, 870, 851, + 851, 865, 866, 861, 867, 866, 851, 869, 871, 873, + 868, 875, 874, 869, 876, 877, 878, 875, 873, 879, + 881, 878, 880, 876, 883, 882, 884, 871, 874, 886, + 891, 892, 885, 883, 877, 884, 880, 882, 885, 879, + 881, 887, 889, 893, 891, 894, 886, 887, 895, 896, + 897, 892, 898, 905, 900, 897, 899, 898, 889, 894, + 903, 899, 893, 900, 896, 902, 895, 901, 901, 905, + 906, 902, 909, 903, 910, 906, 906, 907, 907, 908, + 911, 907, 908, 912, 913, 914, 909, 915, 918, 916, - 915, 913, 914, 916, 917, 918, 909, 921, 916, 917, - 924, 924, 920, 912, 922, 923, 915, 918, 920, 925, - 922, 923, 926, 921, 927, 928, 928, 927, 925, 929, - 930, 931, 932, 933, 936, 932, 934, 935, 939, 936, - 926, 941, 934, 935, 939, 937, 933, 929, 938, 930, - 937, 931, 942, 938, 943, 946, 944, 945, 945, 941, - 943, 944, 947, 948, 946, 949, 950, 951, 949, 950, - 952, 947, 942, 953, 954, 957, 955, 956, 951, 958, - 960, 948, 955, 956, 958, 953, 959, 959, 952, 961, - 957, 963, 962, 954, 964, 963, 965, 966, 967, 960, + 917, 914, 919, 917, 910, 916, 912, 919, 911, 913, + 920, 921, 924, 922, 926, 920, 923, 915, 922, 918, + 926, 923, 927, 928, 924, 929, 931, 921, 932, 928, + 935, 929, 930, 930, 933, 931, 936, 933, 927, 934, + 934, 937, 938, 939, 940, 938, 932, 941, 935, 942, + 940, 947, 943, 941, 942, 936, 939, 943, 944, 945, + 948, 937, 949, 944, 954, 945, 950, 952, 949, 947, + 953, 950, 951, 951, 955, 956, 952, 955, 956, 953, + 948, 957, 954, 958, 959, 960, 964, 961, 962, 966, + 963, 964, 957, 961, 962, 967, 959, 965, 965, 968, - 969, 970, 970, 961, 962, 965, 972, 973, 975, 974, - 977, 977, 964, 975, 978, 976, 966, 993, 993, 969, - 972, 974, 973, 967, 976, 979, 980, 982, 981, 982, - 983, 979, 980, 981, 978, 983, 984, 985, 986, 987, - 988, 989, 990, 986, 991, 13, 994, 995, 989, 996, - 984, 985, 997, 998, 987, 1003, 999, 990, 997, 988, - 994, 999, 1003, 991, 996, 995, 1001, 1001, 1004, 1002, - 999, 1006, 999, 998, 1002, 999, 1005, 1007, 1008, 1005, - 1009, 1011, 1004, 1008, 1012, 1010, 1007, 1014, 1014, 1006, - 1010, 1015, 1011, 1016, 1017, 1018, 1015, 1019, 1016, 1009, + 970, 958, 969, 971, 960, 963, 969, 972, 966, 967, + 973, 968, 971, 975, 976, 976, 978, 980, 970, 979, + 981, 984, 982, 983, 983, 981, 972, 985, 13, 980, + 978, 982, 975, 985, 979, 973, 986, 988, 987, 988, + 989, 984, 986, 987, 990, 989, 991, 992, 993, 994, + 995, 996, 992, 997, 999, 999, 1000, 995, 990, 1001, + 991, 1002, 1004, 993, 1005, 1003, 996, 1012, 994, 1005, + 1000, 1003, 997, 1007, 1007, 1010, 1002, 1001, 1005, 1008, + 1005, 1009, 1004, 1005, 1008, 1012, 1013, 1011, 1009, 1010, + 1011, 1014, 1015, 1016, 1017, 1013, 1014, 1018, 1016, 1020, - 1018, 1019, 1020, 1012, 1021, 1022, 1023, 1025, 1026, 1024, - 1028, 1020, 1027, 1029, 1017, 1026, 1032, 1030, 1033, 1021, - 1022, 1024, 1025, 1034, 1027, 1023, 1031, 1035, 1038, 1028, - 1040, 1032, 1031, 1037, 1029, 1030, 1035, 1039, 1033, 1037, - 1042, 1041, 1038, 1034, 1044, 1039, 1041, 1045, 1043, 1046, - 1040, 1050, 1042, 1043, 1043, 1047, 1047, 1049, 0, 1051, - 1050, 1045, 1046, 1044, 1048, 1051, 1052, 1052, 1055, 1048, - 1049, 1053, 1048, 1048, 1055, 1054, 1053, 1048, 1058, 1058, - 1056, 1057, 1059, 1048, 1054, 1056, 1057, 1048, 1060, 1060, - 1061, 1062, 1063, 1061, 1065, 1061, 1064, 1066, 1067, 1068, + 1020, 1021, 1022, 1023, 1024, 1017, 1021, 1022, 1025, 1024, + 1026, 1015, 1025, 1027, 1028, 1029, 1018, 1031, 1030, 1026, + 1032, 1033, 1034, 1023, 1035, 1036, 1039, 1032, 1027, 1028, + 1030, 1037, 1031, 1033, 1029, 1038, 1040, 1037, 1041, 1044, + 1046, 1034, 1043, 1036, 1045, 1035, 1039, 1041, 1043, 1047, + 1038, 1048, 1045, 1044, 1047, 1050, 1040, 1051, 0, 1049, + 1046, 1056, 1052, 1048, 1049, 1049, 1053, 1053, 1059, 1055, + 1056, 1051, 1057, 1059, 1050, 1052, 1054, 1060, 1057, 1058, + 1058, 1054, 1055, 1062, 1054, 1054, 1060, 1061, 1062, 1054, + 1065, 1063, 1068, 1061, 1071, 1054, 1063, 1064, 1064, 1054, - 1069, 1070, 1066, 1059, 1071, 1064, 1069, 1070, 1080, 1071, - 1063, 1062, 1067, 1073, 1065, 1072, 1075, 1068, 1075, 1072, - 1074, 1074, 1073, 1076, 1078, 1079, 1080, 1073, 1078, 1073, - 1081, 1073, 1082, 1073, 1076, 1083, 1084, 1082, 1082, 1081, - 1079, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1093, - 1094, 1092, 1086, 1091, 1089, 1095, 1085, 1083, 1093, 1097, - 1097, 1090, 1096, 1087, 1088, 1092, 1098, 1096, 1094, 1099, - 1099, 1100, 1102, 1100, 1103, 1102, 1104, 1105, 1107, 1103, - 1095, 1098, 1106, 1106, 1108, 1108, 1105, 1109, 1109, 1110, - 1111, 1112, 1113, 1113, 1110, 1104, 1114, 1115, 1107, 1116, + 1066, 1066, 1067, 1069, 1070, 1067, 1073, 1067, 1074, 0, + 1072, 1065, 1068, 1070, 1071, 1072, 1075, 1076, 1079, 1077, + 1073, 1069, 1075, 1076, 1077, 1078, 1074, 1079, 1082, 1078, + 1080, 1080, 1079, 1081, 1079, 1081, 1079, 1084, 1079, 1082, + 1085, 1084, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1088, + 1088, 1090, 1087, 1093, 1094, 1085, 1095, 1092, 1097, 1099, + 1086, 1091, 1096, 1097, 1095, 1098, 1100, 1089, 1099, 1101, + 1102, 1104, 1093, 1094, 0, 1102, 1096, 1103, 1103, 1098, + 1105, 1105, 1110, 1106, 1100, 1106, 1104, 1108, 1109, 1111, + 1108, 1112, 1112, 1109, 1101, 1113, 1114, 1114, 1111, 1115, - 1115, 1117, 1120, 1119, 1118, 1119, 1117, 1122, 1123, 1124, - 1122, 1111, 1112, 1118, 1124, 1131, 1114, 1125, 1126, 1116, - 1120, 0, 1125, 1123, 1127, 1128, 1126, 1129, 1129, 1127, - 1128, 1130, 1132, 1131, 1133, 1134, 1130, 1136, 1132, 1137, - 1139, 1133, 1138, 1136, 1140, 1137, 1139, 1138, 1134, 1141, - 1142, 1143, 1143, 1140, 1144, 1146, 1147, 1148, 1149, 1150, - 1152, 1142, 1153, 1148, 1149, 1150, 1152, 1154, 1141, 1155, - 1156, 1157, 1158, 1158, 1144, 1146, 1153, 1159, 1160, 1147, - 1161, 1155, 1153, 1162, 1156, 1163, 1163, 1154, 1162, 1157, - 1164, 1165, 1167, 1170, 1168, 1172, 1165, 1159, 1161, 1168, + 1115, 1110, 1116, 1117, 1118, 1119, 1119, 1116, 1120, 1121, + 1122, 1123, 1121, 1124, 1126, 1113, 1123, 1125, 1128, 1125, + 1129, 1128, 1124, 1140, 1117, 1118, 1130, 1137, 1120, 1131, + 1122, 1130, 1126, 1132, 1131, 1129, 1140, 1133, 1134, 1135, + 1135, 1132, 1133, 1134, 1136, 1137, 1138, 1139, 1144, 1136, + 1142, 1143, 1138, 1144, 1139, 1145, 1142, 1143, 1146, 1147, + 1148, 1145, 1149, 1149, 1150, 1152, 1153, 1146, 1154, 1155, + 1156, 1148, 1159, 1158, 1154, 1155, 1156, 1160, 1147, 1158, + 1162, 1161, 1163, 1165, 1150, 1152, 1159, 1164, 1164, 1153, + 1166, 1167, 1159, 1161, 1162, 1170, 1168, 1160, 1169, 1169, - 1168, 1169, 1170, 1160, 1171, 1173, 1174, 1182, 1177, 1172, - 1175, 1167, 1171, 1164, 1176, 1175, 1176, 1178, 1175, 1169, - 1173, 1174, 1177, 1178, 1174, 1179, 1180, 1181, 1189, 1179, - 1183, 1184, 1185, 1182, 1186, 1187, 1184, 1180, 1190, 1186, - 1191, 1193, 1189, 1192, 1192, 1193, 1181, 1194, 1183, 1195, - 1185, 1196, 1197, 1198, 1200, 1187, 1190, 1196, 1191, 1199, - 1201, 1202, 1203, 1204, 1197, 1194, 1205, 1203, 1195, 1200, - 1204, 1205, 1198, 1199, 1206, 1201, 1207, 1208, 1208, 1209, - 1202, 1210, 1211, 1212, 1213, 1207, 0, 1210, 1212, 1214, - 1213, 1221, 1206, 1222, 1209, 1214, 1215, 1215, 1216, 1216, + 1163, 1168, 1171, 1165, 1173, 1174, 1175, 1171, 1176, 1167, + 1174, 1174, 1177, 1178, 1179, 1166, 1180, 1176, 1170, 1182, + 1177, 1182, 1183, 1173, 1175, 1181, 1184, 1178, 1187, 1179, + 1181, 1180, 1184, 1181, 1180, 1185, 1183, 1186, 1188, 1185, + 1189, 1190, 1191, 1193, 1192, 1195, 1190, 1187, 1186, 1192, + 1196, 1197, 1198, 1198, 1200, 1201, 1202, 1199, 1189, 1195, + 1191, 1199, 1202, 1193, 1188, 1203, 1204, 1205, 1196, 1197, + 1208, 1206, 1200, 1207, 1201, 1209, 1210, 1203, 1212, 1211, + 1209, 1205, 1213, 1210, 1211, 1204, 1206, 1215, 1207, 1208, + 1217, 1213, 1214, 1214, 1216, 1219, 1212, 0, 1218, 1220, - 1218, 1218, 1219, 1211, 1220, 1223, 1219, 1222, 1224, 1221, - 1225, 1225, 1226, 1220, 1227, 1224, 1228, 1229, 1230, 1231, - 1223, 1228, 1227, 1232, 1231, 1231, 1233, 1237, 1232, 1232, - 1235, 1229, 1226, 1234, 1234, 1236, 1237, 1230, 1238, 1239, - 1240, 1241, 1242, 1238, 1244, 1243, 1233, 1245, 1242, 1235, - 1243, 1247, 1246, 1245, 1236, 1248, 1249, 1247, 1239, 1241, - 1240, 1248, 1250, 1251, 1252, 1253, 1254, 1256, 1256, 1255, - 1244, 1246, 0, 1257, 1258, 1249, 1257, 1259, 1259, 1253, - 1260, 1250, 1251, 1252, 1255, 1260, 1258, 1254, 1261, 1262, - 1263, 1264, 1261, 1267, 1265, 1268, 1265, 1269, 1267, 1263, + 1216, 1219, 1215, 1218, 1227, 1220, 1221, 1221, 1222, 1222, + 1225, 1217, 1224, 1224, 1225, 1226, 1228, 1229, 1230, 1231, + 1231, 1232, 1227, 1233, 1226, 1230, 1235, 1236, 1234, 1237, + 1228, 1233, 1229, 1234, 1237, 1237, 1239, 1238, 1240, 1240, + 1235, 1232, 1238, 1238, 1241, 1242, 1236, 1244, 1243, 1245, + 1246, 1247, 1244, 1248, 1250, 1249, 1239, 1243, 1252, 1248, + 1249, 1251, 1255, 1241, 1242, 1253, 1254, 1251, 1245, 1247, + 1246, 1253, 1254, 1256, 1257, 1258, 1259, 1252, 1260, 1264, + 1250, 1255, 1261, 1262, 1262, 1263, 1265, 1265, 1263, 1274, + 1259, 1264, 1256, 1257, 1258, 1266, 1268, 1261, 1267, 1260, - 1265, 1276, 1262, 1270, 1264, 1271, 1271, 1272, 1277, 1273, - 1268, 1274, 1272, 1265, 1273, 1274, 1275, 1269, 1278, 1270, - 1275, 1276, 1279, 1280, 1280, 1282, 1277, 1284, 1279, 1285, - 1286, 1286, 1288, 1287, 1285, 1290, 1290, 1292, 1278, 1287, - 1292, 1293, 1293, 1282, 1294, 1295, 1297, 1298, 1284, 1297, - 1299, 1301, 1288, 1300, 1300, 1302, 1303, 1304, 1305, 1299, - 1294, 1295, 1304, 1306, 1306, 1307, 1301, 1298, 1309, 1308, - 1310, 1310, 1305, 1311, 1312, 1303, 1302, 1313, 1317, 1314, - 1315, 1315, 1313, 1307, 1308, 1316, 1319, 1311, 1320, 1316, - 1318, 1318, 1312, 1309, 1314, 1322, 1321, 1323, 1317, 1320, + 1266, 1269, 1267, 1270, 1274, 1271, 1275, 1271, 1273, 1268, + 1269, 1271, 1276, 1273, 1277, 1277, 1270, 1278, 1279, 1282, + 1283, 1280, 1278, 1279, 1271, 1280, 1275, 1281, 1276, 1284, + 1285, 1281, 1286, 1286, 1288, 1290, 1285, 1291, 1283, 1282, + 1292, 1292, 1291, 1294, 1293, 1296, 1296, 1304, 1298, 1284, + 1293, 1298, 1288, 1299, 1299, 1300, 1290, 1301, 1303, 1305, + 1307, 1303, 1308, 1294, 1306, 1306, 1309, 1304, 1305, 1310, + 1311, 1300, 1313, 1301, 1310, 1307, 1312, 1312, 1314, 1315, + 1316, 1316, 1317, 1308, 1311, 1309, 1319, 1318, 1320, 1323, + 1313, 1319, 1325, 1314, 1321, 1321, 1317, 1322, 1324, 1324, - 1321, 1326, 1323, 1325, 1325, 1328, 1327, 1329, 1319, 1330, - 1331, 1331, 1332, 1333, 1322, 1334, 1337, 1332, 1335, 1326, - 1327, 1329, 1341, 1336, 1328, 1328, 1344, 1335, 1336, 1338, - 1346, 1338, 1339, 1333, 1330, 1334, 1337, 1339, 1340, 1342, - 1344, 1350, 1341, 1354, 1340, 1342, 1345, 1345, 1347, 1346, - 1349, 1351, 1351, 1353, 1347, 1349, 1352, 1352, 1355, 1356, - 1358, 1354, 1356, 1357, 1357, 1350, 1359, 1353, 1365, 1361, - 1363, 1360, 1358, 1355, 1360, 1361, 1362, 1360, 1364, 1363, - 1375, 1362, 1366, 1364, 1367, 1366, 1359, 1368, 1373, 1360, - 1367, 1374, 1368, 1365, 1369, 1369, 1370, 1370, 1371, 1375, + 1326, 1322, 1327, 1320, 1315, 1318, 1327, 1328, 1329, 1323, + 1332, 1326, 1339, 1329, 1325, 1331, 1331, 1333, 1334, 1335, + 1336, 1337, 1337, 1340, 1338, 1341, 1328, 1343, 1332, 1338, + 1342, 1333, 1339, 1335, 1341, 1342, 1346, 1334, 1334, 1344, + 1347, 1344, 1346, 1340, 1345, 1336, 1348, 1343, 1350, 1345, + 1351, 1351, 1348, 1352, 1355, 1353, 1356, 1357, 1357, 1355, + 1347, 1353, 1350, 1358, 1358, 1359, 1360, 1361, 1362, 1363, + 1363, 1362, 1352, 1364, 1365, 1366, 1371, 1367, 1366, 1359, + 1356, 1366, 1361, 1367, 1360, 1364, 1368, 1369, 1593, 1372, + 1370, 1368, 1372, 1366, 1365, 1370, 1369, 1373, 1381, 1374, - 1372, 1373, 1376, 1377, 1371, 1372, 1377, 1378, 1379, 1374, - 1380, 1381, 1382, 1378, 1379, 1380, 1383, 1381, 1384, 1384, - 1385, 1383, 1376, 1386, 1387, 1385, 1388, 1391, 1389, 1390, - 1393, 1394, 1392, 1395, 1396, 1382, 1393, 1397, 1405, 1391, - 1400, 1386, 1389, 1390, 1387, 1392, 1388, 1401, 1396, 1399, - 1399, 1394, 1401, 1395, 1402, 1402, 1403, 1406, 1397, 1404, - 1400, 1407, 1405, 1408, 1411, 1409, 1413, 1410, 1415, 0, - 1407, 1403, 1409, 1404, 1416, 1406, 1410, 1416, 1408, 1410, - 1411, 1413, 1417, 1417, 1418, 1418, 1413, 1419, 1420, 1421, - 1422, 1422, 1421, 1415, 1423, 1424, 1425, 1426, 1427, 1419, + 1379, 1371, 1380, 1373, 1374, 1375, 1375, 1376, 1376, 1377, + 1382, 1378, 1388, 1379, 1593, 1377, 1378, 1381, 1383, 1384, + 1380, 1383, 1385, 1392, 1386, 1384, 1387, 1393, 1385, 1386, + 1382, 1389, 1387, 1390, 1390, 1388, 1389, 1391, 1394, 1395, + 1396, 1392, 1391, 1397, 1398, 1399, 1400, 1393, 1401, 1402, + 1403, 1399, 1406, 1395, 1396, 1397, 1407, 1398, 1394, 1405, + 1405, 1407, 1409, 1402, 1408, 1408, 1400, 1410, 1401, 1411, + 1412, 1403, 1406, 1413, 1414, 1416, 1415, 1409, 1417, 1421, + 1419, 1410, 1413, 1415, 1416, 1423, 1423, 1416, 1412, 1414, + 1424, 1424, 1426, 1411, 1417, 1419, 1422, 1425, 1427, 1422, - 1428, 1425, 1426, 1429, 1430, 1433, 1420, 1423, 1435, 1431, - 1432, 1433, 1429, 1436, 1424, 1437, 1428, 1427, 1431, 1432, - 1438, 1431, 1439, 1430, 1434, 1434, 1436, 1440, 1435, 1442, - 1443, 1444, 1444, 1437, 1438, 1445, 1446, 1447, 1439, 1440, - 1448, 1448, 1447, 1450, 1449, 1446, 1451, 1452, 1443, 1455, - 1457, 1445, 1453, 1449, 1442, 1448, 1449, 1453, 1453, 1460, - 1456, 1450, 1464, 1455, 1460, 1452, 1456, 1451, 1457, 1458, - 1458, 1459, 1461, 1462, 1465, 1466, 1467, 1459, 1461, 1462, - 1473, 1466, 1464, 1468, 1469, 1471, 1468, 1474, 1465, 1467, - 1469, 1476, 1468, 1471, 1475, 1477, 1478, 1479, 1480, 1473, + 1419, 1427, 1428, 1428, 1421, 1429, 1430, 1431, 1432, 1425, + 1426, 1433, 1431, 1432, 1435, 1434, 1436, 1437, 1429, 1438, + 1441, 1439, 1444, 1435, 1442, 1430, 1437, 1439, 1438, 1437, + 1433, 1434, 1440, 1440, 1443, 1436, 1444, 1442, 1445, 1446, + 1441, 1448, 1449, 1450, 1450, 1451, 1452, 1455, 1453, 1454, + 1454, 1446, 1443, 1453, 1445, 1452, 1455, 1456, 1457, 1455, + 1449, 1451, 1458, 1459, 1454, 1462, 1448, 1461, 1459, 1459, + 1463, 1462, 1464, 1464, 1470, 1456, 1465, 0, 1466, 1457, + 1458, 1461, 1465, 1466, 1467, 1468, 1471, 1472, 1463, 1473, + 1467, 1468, 1474, 1472, 1470, 1474, 1477, 1475, 1479, 1480, - 1476, 1482, 1475, 1481, 1481, 1484, 1474, 1482, 1477, 1478, - 1483, 1479, 1480, 1485, 1486, 1487, 1483, 1488, 1484, 1490, - 1489, 1491, 1492, 1494, 1494, 1481, 1489, 1495, 0, 1501, - 1488, 1496, 1486, 1485, 1487, 1496, 1505, 1491, 1497, 1498, - 1492, 1490, 1500, 1497, 1498, 1499, 1503, 1495, 1504, 1504, - 1499, 1500, 1501, 1506, 1507, 1505, 1508, 1508, 1509, 1510, - 1513, 1503, 1511, 1512, 1514, 1506, 1510, 1517, 1516, 1524, - 1515, 1518, 1509, 1507, 1511, 1512, 1515, 1518, 1524, 1513, - 1516, 1519, 1519, 1520, 1514, 1517, 1520, 1521, 1521, 1523, - 1525, 1526, 1526, 1527, 1523, 1528, 1525, 1528, 1529, 1530, + 1471, 1474, 1473, 1475, 1477, 1481, 1482, 1483, 1484, 1485, + 1486, 1487, 1487, 1481, 1490, 1482, 1488, 1479, 1480, 1489, + 1483, 1484, 1488, 1485, 1486, 1489, 1491, 1490, 1494, 1492, + 1493, 1495, 1496, 1487, 1497, 1498, 1501, 1495, 1500, 1500, + 1502, 1494, 1506, 1503, 1502, 1507, 1491, 1492, 1503, 1493, + 1497, 1506, 1504, 1498, 1496, 1505, 1501, 1504, 1509, 1511, + 1505, 1510, 1510, 1512, 1513, 1514, 1514, 1515, 1507, 1516, + 1517, 1519, 1518, 1509, 1520, 1512, 1516, 1522, 1511, 1521, + 1523, 1515, 1517, 1513, 1518, 1521, 1524, 1525, 1525, 1522, + 1519, 1533, 1524, 1526, 1520, 1530, 1526, 1529, 1523, 1527, - 1531, 1529, 1532, 1533, 1534, 1527, 1535, 1538, 1539, 1534, - 1537, 1536, 1538, 1540, 1541, 1535, 1544, 1539, 1543, 1530, - 1532, 1533, 1531, 1536, 1543, 1537, 1542, 1542, 1545, 1541, - 1539, 1547, 1546, 1540, 1548, 1553, 1548, 1544, 1549, 1550, - 1550, 1551, 1551, 1552, 1552, 1554, 1554, 1545, 1546, 1555, - 1555, 1547, 1549, 1556, 1549, 1553, 1557, 1558, 1558, 1559, - 1560, 1561, 1563, 1559, 1561, 1564, 1560, 1565, 1563, 1566, - 1568, 1568, 1567, 1565, 1556, 1567, 1570, 1557, 1569, 1569, - 1572, 1573, 1570, 1564, 1571, 1574, 1575, 1577, 1578, 1581, - 1585, 1574, 1577, 1577, 1566, 1584, 1571, 1571, 1571, 1580, + 1527, 1531, 1529, 1533, 1530, 1532, 1532, 1531, 1534, 1535, + 1534, 1536, 1535, 1537, 1538, 1539, 1540, 1541, 1542, 1543, + 1544, 1540, 1546, 1547, 1550, 1544, 1541, 1545, 1548, 1548, + 1542, 1536, 1538, 1539, 1543, 1537, 1545, 1549, 1547, 1551, + 1552, 1553, 1546, 1549, 1554, 1550, 1554, 1559, 1555, 1545, + 1556, 1556, 1557, 1557, 1558, 1558, 1552, 1562, 1551, 1560, + 1560, 1553, 1555, 1563, 1555, 1561, 1561, 1559, 1564, 1564, + 1565, 1566, 1567, 1569, 1565, 1567, 1570, 1566, 1562, 1569, + 1571, 1572, 1573, 1578, 1563, 1573, 1571, 1574, 1574, 1575, + 1575, 1576, 1579, 1580, 1570, 1577, 1581, 1576, 1585, 1580, - 1572, 1573, 1578, 1571, 1581, 1579, 1575, 1579, 1582, 1583, - 1580, 1585, 1586, 1586, 1582, 1584, 1587, 1589, 1583, 1588, - 1588, 1590, 1591, 1591, 1592, 1592, 1593, 1596, 1596, 1597, - 1598, 1600, 1601, 1603, 1603, 1602, 1604, 1589, 1606, 1598, - 1600, 1602, 1587, 1590, 1605, 1606, 1593, 1607, 1608, 1609, - 1609, 1610, 1611, 1601, 1597, 1613, 1607, 1604, 1614, 1605, - 1613, 1615, 1616, 1622, 1614, 1617, 1618, 1623, 1611, 1616, - 1621, 1617, 1618, 1620, 1608, 1619, 1619, 1610, 1620, 1621, - 1624, 1615, 1625, 1622, 1626, 1625, 1623, 1627, 1628, 1628, - 1629, 1630, 1624, 1631, 1632, 1634, 1629, 1635, 1632, 0, + 1585, 1584, 1586, 1578, 1587, 1583, 1572, 1577, 1577, 1577, + 1583, 1583, 1579, 1586, 1577, 1584, 1581, 1588, 1589, 1587, + 1590, 1591, 1596, 1588, 1592, 1592, 1595, 1589, 1594, 1594, + 1597, 1597, 1598, 1598, 1599, 1602, 1602, 1603, 1604, 1606, + 1590, 1611, 1591, 1607, 1596, 1608, 1595, 1604, 1606, 1609, + 1609, 1608, 1610, 1612, 1599, 1614, 1611, 1613, 1615, 1615, + 1612, 1616, 1603, 1617, 1607, 1619, 1613, 1626, 1620, 1621, + 1619, 1622, 1626, 1610, 1620, 1629, 1623, 1624, 1622, 1617, + 1628, 1614, 1623, 1624, 1625, 1625, 1627, 1616, 1631, 1621, + 1630, 1631, 1632, 1633, 1629, 1627, 1634, 1634, 1635, 1637, - 1638, 1639, 1626, 1636, 1640, 1639, 1642, 1642, 1631, 1646, - 1640, 1630, 1641, 1627, 1632, 1634, 1635, 1644, 1636, 1638, - 1643, 1641, 1645, 1645, 1643, 1647, 1648, 1649, 1644, 1650, - 1646, 1651, 1649, 1644, 1652, 1653, 1654, 1655, 1655, 1647, - 1652, 1654, 1656, 1656, 1657, 1648, 1659, 1660, 1657, 1650, - 1653, 1651, 1661, 1662, 1662, 1659, 1663, 1663, 1660, 1664, - 1665, 1666, 1667, 1660, 1664, 1664, 1665, 1666, 1668, 1669, - 1670, 1672, 1661, 1668, 1673, 1674, 1670, 1675, 1673, 1676, - 1678, 1669, 1677, 1672, 1679, 1676, 1678, 1674, 1667, 1681, - 1682, 1685, 1683, 1689, 1685, 1692, 1679, 1683, 1686, 1686, + 1628, 1636, 1630, 1638, 1635, 1640, 1647, 1638, 1641, 1642, + 1632, 1644, 1645, 0, 1637, 1647, 1645, 1648, 1648, 1633, + 1646, 1636, 1650, 1638, 1642, 1640, 1646, 1641, 1649, 1652, + 1644, 1653, 1649, 1650, 1651, 1651, 1654, 1655, 1650, 1656, + 1657, 1658, 1655, 1659, 1660, 1653, 1667, 1658, 0, 1660, + 1652, 1661, 1661, 1662, 1662, 1654, 1665, 1663, 1659, 1656, + 1657, 1663, 1666, 1668, 1668, 1665, 1667, 1669, 1669, 1670, + 1671, 1672, 1673, 1666, 1670, 1670, 1671, 1672, 1666, 1674, + 1675, 1676, 1678, 1680, 1674, 1679, 1681, 1676, 1683, 1679, + 1682, 1684, 1675, 1685, 1678, 1680, 1682, 1684, 1673, 1688, - 1692, 1681, 1675, 0, 1677, 1687, 1687, 1688, 1688, 1682, - 1690, 1691, 1693, 1689, 1694, 1696, 1690, 1691, 1693, 1698, - 1696, 1699, 1698, 1694, 1700, 1700, 1702, 1703, 1706, 1704, - 1705, 1705, 1710, 1699, 1704, 1707, 1708, 1706, 1702, 1703, - 1707, 1708, 1709, 1709, 1711, 1712, 1713, 1714, 1717, 1715, - 1716, 1714, 1710, 1711, 1715, 1720, 1716, 1719, 1719, 1721, - 1722, 1722, 1717, 1712, 1724, 1713, 1723, 1725, 1721, 1719, - 1727, 1732, 1726, 1720, 1732, 1723, 1724, 1726, 1730, 1730, - 1733, 1734, 0, 1727, 1736, 1738, 1737, 1739, 1725, 1740, - 1740, 1738, 1741, 1746, 1741, 1743, 1733, 1734, 1745, 1736, + 1687, 1689, 1692, 1692, 1691, 1685, 1689, 1691, 1693, 1693, + 1683, 1681, 1687, 1694, 1694, 1695, 1696, 1697, 1688, 1698, + 1699, 1700, 1696, 1697, 1698, 1704, 1699, 1702, 1704, 1705, + 1700, 1708, 1702, 1706, 1706, 1695, 1709, 1710, 1711, 1711, + 1712, 1705, 1710, 1708, 1716, 1713, 1714, 1717, 1709, 1712, + 1713, 1714, 1715, 1715, 1718, 1719, 1717, 1720, 1721, 1722, + 1727, 1720, 1723, 1721, 1716, 1722, 1725, 1725, 1726, 1727, + 1728, 1728, 1718, 1729, 1719, 1730, 1723, 1731, 1725, 1732, + 1733, 1739, 1729, 1740, 1732, 1742, 1726, 1730, 1736, 1736, + 1743, 1738, 1745, 1733, 1738, 1744, 1752, 1739, 1731, 1740, - 1737, 1742, 1742, 1743, 1739, 1745, 1747, 1747, 1748, 1749, - 1750, 1751, 1752, 1746, 1753, 1755, 1754, 1748, 1757, 1760, - 1758, 1755, 1750, 1751, 1752, 1759, 1759, 1761, 1764, 0, - 1749, 1754, 1758, 1762, 1755, 1768, 1762, 1760, 1757, 1763, - 1753, 1766, 1772, 1767, 1763, 1767, 1766, 1761, 1764, 1769, - 1770, 1772, 1774, 1768, 1769, 1775, 1776, 1770, 1777, 1778, - 1777, 1780, 1781, 1780, 1775, 1782, 1782, 1783, 1776, 1784, - 1774, 1785, 1786, 1785, 1784, 1787, 1781, 1786, 1778, 1788, - 1787, 1789, 1790, 1792, 1791, 1795, 1793, 1858, 1790, 1791, - 1800, 1796, 1799, 1783, 1793, 1858, 1792, 1788, 1797, 1797, + 1742, 1744, 1746, 1746, 1743, 1747, 1749, 1747, 1751, 1745, + 1748, 1748, 1753, 1753, 1749, 1751, 1752, 1754, 1755, 1756, + 1757, 1758, 1759, 1760, 1761, 1763, 1754, 0, 1764, 1766, + 1761, 1756, 1757, 1758, 1765, 1765, 1767, 1769, 1760, 1755, + 1764, 1768, 1769, 1761, 1768, 1763, 1770, 1766, 1759, 1772, + 1773, 1774, 1773, 1775, 1772, 1776, 1767, 1780, 1775, 1778, + 1782, 1781, 1776, 1783, 1784, 1783, 1770, 1787, 1778, 1774, + 1781, 1786, 1782, 1786, 1789, 1780, 1788, 1788, 1791, 1790, + 1791, 1787, 1792, 1784, 1790, 1793, 1794, 1792, 1795, 1796, + 1793, 1797, 1798, 1799, 1801, 1796, 1797, 1802, 1803, 1803, - 1801, 1789, 1798, 1798, 1795, 1796, 1801, 1799, 1802, 1803, - 1800, 1803, 1804, 1802, 1805, 1805, 1809, 1806, 1807, 1807, - 1804, 1808, 1808, 1810, 1811, 1809, 1811, 1812, 1804, 1806, - 1814, 1813, 1810, 1815, 1817, 1810, 1813, 1813, 1818, 1814, - 1821, 1822, 1819, 1818, 1825, 1815, 1817, 1819, 1812, 1823, - 1824, 1824, 1826, 1821, 1828, 1827, 1845, 1829, 1823, 1833, - 1834, 1822, 1825, 1831, 1832, 1834, 1842, 1844, 1828, 1835, - 1826, 1827, 1829, 1836, 1835, 1831, 1832, 1839, 1841, 1833, - 1843, 1845, 1836, 1839, 1841, 1844, 1847, 1847, 1846, 1842, - 1848, 1849, 1849, 1850, 1851, 1843, 1839, 1846, 1851, 1848, + 1789, 1799, 1804, 1804, 1794, 1798, 1805, 1806, 1795, 1807, + 1810, 1802, 1808, 1801, 1809, 1807, 1809, 1808, 1810, 1811, + 1811, 1805, 1812, 1813, 1813, 1818, 1810, 1806, 1814, 1814, + 1815, 1816, 1819, 1817, 1812, 1817, 1820, 1819, 1819, 1815, + 1816, 1821, 1823, 1816, 1824, 1820, 1818, 1825, 1827, 1824, + 1828, 1829, 1825, 1821, 1823, 1830, 1830, 1831, 1832, 1834, + 1829, 1827, 1833, 1839, 1835, 1837, 1840, 1841, 1838, 1848, + 1828, 1840, 1841, 1834, 1849, 1831, 1832, 1837, 1833, 1835, + 1838, 1842, 1845, 1839, 1850, 1847, 1851, 1852, 1845, 1849, + 1842, 1847, 1848, 1853, 1853, 1854, 1852, 1855, 1855, 1856, - 1852, 1853, 1854, 1855, 1856, 1852, 1859, 1854, 1854, 1855, - 1856, 1867, 1850, 1857, 1853, 1864, 1857, 1862, 1862, 1863, - 1863, 1865, 1865, 1867, 1864, 1868, 1859, 1866, 1866, 1869, - 1877, 1870, 1871, 1871, 1863, 1869, 1870, 1872, 1872, 1873, - 1874, 1880, 1882, 1868, 1873, 1863, 1874, 1876, 1878, 1881, - 1877, 1876, 1878, 1883, 1881, 1884, 1885, 1886, 1887, 1887, - 1884, 1889, 1891, 1888, 1890, 1882, 1880, 1888, 1883, 1890, - 1892, 1893, 1894, 1886, 1885, 1896, 1889, 1894, 1895, 1897, - 1897, 1899, 1892, 1900, 1901, 1902, 1903, 1904, 1891, 1899, - 1893, 1895, 1905, 1896, 1907, 1906, 1909, 1910, 1910, 1912, + 1858, 1845, 1850, 1857, 1854, 1858, 1859, 1857, 1860, 1861, + 1862, 1851, 1865, 1860, 1860, 1861, 1862, 1863, 1856, 1859, + 1863, 1864, 1868, 1868, 1869, 1869, 1870, 1871, 1871, 1864, + 1872, 1872, 1865, 1873, 1874, 1870, 1875, 1883, 1876, 1869, + 1877, 1877, 1875, 1876, 1879, 1873, 1878, 1878, 1880, 1879, + 1869, 1882, 1874, 1886, 1880, 1882, 1884, 1883, 1887, 1888, + 1884, 1889, 1890, 1887, 1892, 1891, 1894, 1890, 1893, 1893, + 1894, 1895, 1896, 1897, 1899, 1898, 1889, 1896, 1886, 1900, + 1892, 1901, 1888, 1891, 1900, 1902, 1895, 1898, 1903, 1903, + 1905, 1906, 1907, 1899, 1901, 1908, 1909, 1910, 1905, 1897, - 1913, 1911, 1900, 1901, 1911, 1914, 1904, 1906, 1902, 1918, - 1903, 1909, 1912, 1905, 1913, 1907, 1915, 1915, 1914, 1916, - 1916, 1917, 1917, 1919, 1918, 1920, 1920, 1923, 1921, 1922, - 1922, 1926, 1923, 1925, 1927, 1928, 1919, 1921, 1925, 1931, - 1921, 1929, 1929, 1930, 1930, 1932, 1932, 1928, 1933, 1934, - 1934, 1926, 1935, 0, 1927, 1936, 1937, 1937, 1931, 1939, - 1936, 1938, 1938, 1940, 1941, 1942, 1933, 1935, 1946, 1944, - 1945, 1945, 1940, 1939, 1944, 1947, 1947, 1948, 1941, 1949, - 1950, 1951, 1951, 1950, 1942, 1949, 1953, 1946, 1952, 1952, - 1955, 1954, 1956, 1956, 1958, 1948, 1959, 1951, 1960, 1961, + 1911, 1912, 1913, 1902, 1915, 1916, 1916, 0, 1919, 1917, + 1906, 1907, 1917, 1912, 1918, 1920, 1910, 0, 1908, 1915, + 1909, 1911, 1919, 1913, 1921, 1921, 1924, 1918, 1920, 1922, + 1922, 1923, 1923, 1925, 1926, 1926, 1927, 1928, 1928, 1929, + 1932, 1924, 1931, 1933, 1929, 1927, 1925, 1931, 1927, 1934, + 1935, 1935, 1936, 1936, 1937, 1938, 1938, 1939, 1940, 1940, + 1932, 1934, 1941, 1933, 1942, 1943, 1943, 1944, 1944, 1942, + 1945, 1946, 1947, 1937, 1948, 1939, 1950, 1941, 1951, 1951, + 1946, 1950, 1952, 1955, 1945, 1954, 1947, 1953, 1953, 1955, + 1959, 1956, 1960, 1948, 1956, 1957, 1957, 1958, 1958, 1961, - 1962, 1962, 1963, 1961, 1968, 1953, 1954, 1964, 1965, 1955, - 1967, 1967, 1970, 1960, 1958, 1971, 1972, 1972, 1969, 1959, - 1973, 1963, 1964, 1965, 1968, 1969, 1970, 1975, 1974, 1973, - 1974, 1977, 1978, 1979, 1980, 1981, 1982, 1978, 1979, 1983, - 1984, 1971, 1990, 1977, 1983, 1986, 1987, 1975, 1981, 1988, - 1986, 1987, 1989, 1994, 1991, 1995, 1992, 1982, 1989, 1980, - 1991, 1992, 1993, 1990, 1988, 1997, 1984, 1993, 1995, 1996, - 1998, 1999, 1996, 2000, 1997, 2001, 2006, 2002, 1994, 1998, - 1999, 2003, 2000, 2002, 2004, 2008, 2010, 2003, 2004, 2001, - 2009, 2009, 2010, 2012, 2008, 2014, 2006, 2011, 2011, 2017, + 1964, 1952, 1965, 1954, 1962, 1962, 1966, 1960, 1967, 1959, + 1969, 1957, 1967, 1968, 1968, 1970, 1971, 1974, 1961, 1975, + 1964, 1966, 1973, 1973, 1976, 1965, 1975, 1977, 1981, 1969, + 1970, 1971, 1978, 1978, 1979, 1983, 1986, 1974, 1976, 1980, + 1984, 1980, 1987, 1979, 1985, 1984, 1988, 1983, 1981, 1985, + 1990, 1989, 1992, 1977, 1993, 1987, 1989, 1992, 1994, 1993, + 1995, 1986, 1996, 1997, 2000, 1998, 1995, 1988, 2001, 1997, + 1998, 2002, 1999, 1994, 2002, 2003, 1990, 1999, 2004, 2005, + 2007, 2001, 2006, 1996, 2003, 2012, 2008, 2004, 2005, 2000, + 2009, 2006, 2008, 2010, 2007, 2014, 2009, 2010, 2015, 2015, - 2015, 2016, 2016, 2018, 2021, 2020, 2011, 2022, 2027, 2023, - 2042, 2014, 2018, 2012, 2017, 2012, 2015, 2020, 2028, 2026, - 2021, 2023, 2022, 2025, 2026, 2070, 2025, 2070, 2027, 2042, - 2028, 2029, 2029, 2030, 2030, 2032, 2032, 2033, 2034, 2035, - 2033, 2036, 2038, 2034, 0, 2035, 2040, 2036, 2037, 2037, - 2039, 2039, 2041, 2043, 2043, 2045, 2038, 2046, 2040, 2045, - 2046, 2047, 2047, 2048, 2049, 2050, 2041, 2051, 2048, 2052, - 2052, 2051, 2055, 2049, 2053, 2056, 2057, 2055, 2058, 2059, - 2060, 2061, 2062, 2059, 2063, 2050, 2061, 2053, 2062, 2064, - 2063, 2068, 2058, 2066, 2067, 2056, 2057, 2068, 2069, 2067, + 2016, 2017, 2017, 2018, 2014, 2012, 2016, 2023, 2020, 2024, + 2017, 2021, 2022, 2022, 2026, 2027, 2029, 2028, 2024, 2033, + 2035, 2035, 2023, 2018, 2020, 2018, 2026, 2021, 2029, 2032, + 2031, 2027, 2028, 2031, 2032, 2034, 2036, 2036, 2040, 2033, + 2038, 2038, 2039, 2040, 2041, 2039, 2042, 2034, 2043, 2043, + 2041, 2044, 2042, 2045, 2045, 2046, 2047, 2048, 2049, 2049, + 2051, 2053, 2053, 2052, 2051, 2044, 2052, 2046, 2054, 2055, + 2047, 2056, 2059, 2054, 2062, 2057, 2048, 2061, 2055, 2057, + 2058, 2058, 2061, 2063, 2064, 2059, 2065, 2066, 2067, 2068, + 2065, 2056, 2070, 2067, 2062, 2068, 2069, 2072, 2064, 2073, - 2060, 2073, 2074, 2074, 2076, 2075, 2069, 2064, 2075, 2066, - 2077, 2077, 2079, 2080, 2081, 2073, 2079, 2082, 2082, 2080, - 2083, 2086, 2086, 2088, 2090, 2095, 2081, 2091, 2094, 2083, - 2076, 2096, 2097, 2094, 2098, 2098, 2096, 2097, 2090, 2100, - 2100, 2088, 2102, 2091, 2103, 2103, 2104, 2105, 2102, 2106, - 2112, 2095, 2108, 2109, 2106, 2110, 2110, 2113, 2114, 2112, - 2115, 2118, 2104, 2113, 2119, 2109, 2117, 2117, 2125, 2105, - 2125, 2108, 2121, 2121, 2123, 2115, 2114, 2122, 2122, 2123, - 2118, 2124, 2119, 2126, 2127, 2128, 2124, 2129, 2130, 2130, - 2131, 2131, 2129, 2132, 2132, 2133, 2133, 2126, 2127, 2134, + 2074, 2075, 2069, 2063, 2073, 2079, 2074, 2066, 2081, 2075, + 2070, 2081, 2076, 2072, 2076, 2080, 2080, 2082, 2085, 2079, + 2083, 2083, 2085, 2086, 2087, 2088, 2088, 2094, 2089, 2086, + 2092, 2092, 2096, 2097, 2100, 2101, 2087, 2089, 2108, 2100, + 2104, 2104, 2102, 2082, 2108, 2094, 2096, 2102, 2103, 2097, + 2106, 2106, 2110, 2103, 2109, 2109, 2111, 2112, 2114, 2115, + 2118, 2101, 2112, 2116, 2116, 2120, 2119, 2121, 2110, 2118, + 2124, 2115, 2119, 2123, 2123, 2125, 2129, 2114, 2111, 2127, + 2127, 2129, 2121, 2120, 2128, 2128, 2130, 2132, 2131, 2124, + 2131, 2130, 2133, 2125, 2134, 2135, 2136, 2136, 2137, 2137, - 2135, 2136, 2137, 2137, 2139, 2128, 2136, 2138, 2138, 2140, - 2141, 2134, 2142, 2143, 2143, 2144, 2139, 2148, 2135, 2145, - 2145, 2140, 2146, 2146, 2147, 2149, 2150, 2151, 2142, 2148, - 2141, 2152, 2149, 2153, 2144, 2147, 2152, 2154, 2150, 2155, - 2155, 2156, 2157, 2158, 2164, 2159, 2160, 2151, 2161, 2167, - 2156, 2162, 2162, 2153, 2165, 2163, 2168, 2154, 2159, 2164, - 2169, 2171, 2161, 2158, 2163, 2174, 2174, 2167, 2157, 2165, - 2160, 2170, 2172, 2181, 2170, 2171, 2173, 2172, 2168, 2175, - 2175, 2173, 2182, 2169, 2176, 2176, 2178, 2178, 2180, 2180, - 2183, 2181, 2185, 2182, 2187, 2186, 2189, 2188, 2190, 2192, + 2135, 2132, 2138, 2138, 2139, 2139, 2133, 2140, 2141, 2145, + 2142, 2143, 2143, 2146, 2134, 2142, 2144, 2144, 2147, 2140, + 2148, 2145, 2149, 2149, 2150, 2146, 2141, 2151, 2151, 2152, + 2152, 2153, 2154, 2155, 2156, 2157, 2148, 2159, 2147, 2160, + 2155, 2163, 2153, 2150, 2154, 2158, 2156, 2161, 2161, 2162, + 2158, 2164, 2165, 2166, 2167, 2157, 2173, 2159, 2162, 2160, + 2168, 2168, 2174, 2169, 2170, 2165, 2171, 2163, 2167, 2175, + 2176, 2164, 2169, 2176, 2173, 2177, 0, 2166, 2178, 2170, + 2179, 2171, 2187, 2178, 2174, 2179, 2180, 2180, 2188, 2177, + 2181, 2181, 2175, 2182, 2182, 2184, 2184, 2186, 2186, 2188, - 2192, 2191, 2194, 2194, 2195, 2189, 2196, 2197, 2197, 2183, - 2201, 2199, 2185, 2186, 2202, 2196, 2187, 2188, 2190, 2191, - 2199, 2200, 2200, 2203, 2204, 2205, 2195, 2206, 2201, 2208, - 2203, 2207, 2202, 2209, 2209, 2210, 2210, 2212, 2211, 2204, - 2214, 2213, 2216, 2205, 2211, 2206, 2215, 2207, 2208, 2217, - 0, 2215, 2218, 2220, 2220, 2212, 2213, 2218, 2219, 2214, - 2219, 2221, 2216, 2221, 2222, 2222, 2224, 2226, 2227, 2217, - 2228, 2229, 2230, 2231, 2239, 2232, 2226, 2230, 2235, 2256, - 2236, 2238, 2228, 2236, 2256, 2224, 2241, 2227, 2237, 2237, - 2241, 2229, 2239, 2231, 2232, 2243, 2238, 2244, 2235, 2240, + 2187, 2189, 2191, 2192, 2193, 2194, 2195, 2196, 2198, 2198, + 2197, 2200, 2200, 2201, 2202, 2195, 2203, 2203, 2206, 2206, + 2189, 2192, 2191, 2202, 2205, 2194, 2193, 2196, 2197, 2207, + 2208, 2209, 2211, 2205, 2210, 2201, 2212, 2213, 2209, 2214, + 2215, 2215, 2216, 2216, 2218, 2217, 2219, 2207, 2208, 2210, + 2211, 2217, 2220, 2213, 2212, 2221, 2222, 2223, 2214, 2224, + 2221, 2219, 2218, 2225, 2224, 2225, 2226, 2226, 2227, 2230, + 2227, 2220, 2228, 2228, 2232, 2233, 2222, 2223, 2234, 2235, + 2236, 2237, 2241, 2232, 2238, 2236, 2242, 2245, 2230, 2242, + 2234, 2243, 2243, 2244, 2233, 2246, 2246, 2249, 2252, 2235, - 2240, 2244, 2245, 2245, 2246, 2248, 2249, 2250, 2250, 2252, - 2243, 2253, 2253, 2254, 2255, 2255, 2257, 2246, 2258, 2258, - 2264, 2252, 2263, 2263, 2266, 2248, 2249, 2267, 2257, 2265, - 2265, 2271, 2254, 0, 2268, 2269, 2276, 2266, 2270, 2270, - 2267, 2276, 2264, 2268, 2269, 2277, 2271, 2273, 2273, 2278, - 2277, 2279, 2280, 2281, 2283, 2282, 2279, 0, 2285, 2288, - 2280, 2286, 2283, 2278, 2282, 2287, 2286, 2289, 2289, 2293, - 2287, 2291, 2281, 2285, 2288, 2290, 2290, 2292, 2291, 2294, - 2295, 2298, 2292, 2296, 2297, 2297, 2295, 2293, 2296, 2299, - 2300, 2300, 2301, 2301, 2299, 2304, 2298, 2294, 2305, 2305, + 2247, 2237, 2241, 2238, 2247, 2245, 2250, 2254, 2244, 2255, + 2250, 2252, 2249, 2251, 2251, 2256, 2256, 2260, 2258, 2259, + 2259, 2261, 2261, 2262, 2270, 2263, 0, 2254, 2262, 2255, + 2258, 2264, 2264, 2269, 2269, 2272, 2260, 2263, 2271, 2271, + 2273, 2274, 2275, 2276, 2276, 2277, 2270, 2282, 2272, 2284, + 2274, 2275, 2282, 2273, 2279, 2279, 2283, 2285, 2286, 2287, + 2277, 2283, 2285, 2284, 2288, 2291, 2286, 2289, 2294, 2292, + 2297, 2293, 2299, 2288, 2292, 2289, 2293, 2297, 2287, 2300, + 2291, 2295, 2295, 2294, 2296, 2296, 2298, 2301, 2304, 2302, + 2299, 2298, 0, 2301, 2302, 2303, 2303, 2300, 2310, 2305, - 2306, 2307, 0, 2306, 2308, 2309, 2307, 2307, 2304, 2308, - 2309, 2310, 2311, 2312, 2313, 2314, 2311, 2310, 2312, 2315, - 2316, 2317, 2322, 2313, 2319, 2316, 2326, 2315, 2320, 2319, - 2314, 2320, 2324, 2317, 2322, 2325, 2327, 2324, 2328, 2329, - 2325, 2330, 2330, 2331, 2326, 2334, 2335, 2328, 2329, 2327, - 2336, 2338, 2331, 2337, 2337, 2342, 2339, 2340, 2341, 2341, - 2344, 2346, 2349, 2347, 2334, 2339, 2335, 2347, 2380, 2336, - 2338, 2380, 2340, 2350, 2342, 2344, 2348, 2348, 2351, 2350, - 2352, 2346, 2353, 2353, 2351, 2354, 2352, 2349, 2357, 2355, - 2358, 2360, 2361, 2354, 2355, 2360, 2362, 2357, 2364, 2364, + 2306, 2306, 0, 2304, 2305, 2307, 2307, 2311, 2311, 2312, + 2313, 2310, 2312, 2314, 2315, 2313, 2313, 2316, 2314, 2315, + 2317, 2318, 2319, 2316, 2317, 2320, 2318, 2321, 2322, 2323, + 2328, 2319, 2325, 2322, 2332, 2321, 2326, 2325, 2330, 2326, + 2320, 2323, 2328, 2330, 2331, 2333, 2334, 2335, 2337, 2331, + 2336, 2336, 2332, 2340, 2341, 2334, 2335, 2337, 2333, 2342, + 2343, 2343, 2344, 2348, 2345, 2346, 2347, 2347, 2350, 2352, + 2355, 2353, 2340, 2345, 2341, 2353, 2354, 2354, 2342, 2356, + 2346, 2344, 2348, 2350, 2357, 2356, 2358, 2359, 2359, 2352, + 2357, 2360, 2358, 2361, 2363, 2355, 2364, 2366, 2361, 2360, - 2365, 2365, 2372, 2358, 2366, 2366, 2361, 2368, 2368, 2370, - 2370, 2362, 2373, 2375, 2376, 2376, 2381, 2373, 2373, 2378, - 2378, 2383, 2372, 2379, 2379, 2385, 2386, 2386, 2389, 2381, - 2387, 2387, 2392, 2375, 2388, 2388, 2390, 2390, 2391, 2383, - 2393, 2394, 2396, 2389, 2400, 2385, 2396, 2394, 2395, 2395, - 2392, 2391, 2399, 2401, 2393, 2402, 2403, 2399, 2399, 2404, - 2405, 2410, 2403, 2412, 2406, 2404, 2410, 2400, 2406, 2407, - 2407, 2412, 2415, 2401, 2413, 2402, 2416, 2413, 2417, 2416, - 2419, 2418, 2420, 2422, 2422, 2405, 2418, 2421, 2423, 2426, - 0, 2424, 2427, 2427, 2435, 2417, 2417, 2415, 2419, 2424, + 2367, 2366, 2368, 2363, 2370, 2370, 2371, 2371, 2378, 2364, + 2372, 2372, 2374, 2374, 2367, 2376, 2376, 2368, 2379, 2381, + 2382, 2382, 2387, 2379, 2379, 2384, 2384, 2389, 2378, 2385, + 2385, 2386, 2391, 2395, 2386, 2387, 2392, 2392, 2397, 2381, + 2393, 2393, 2394, 2394, 2398, 2389, 2396, 2396, 2395, 2399, + 2400, 2397, 2391, 2401, 2401, 2402, 2400, 2406, 2407, 2402, + 2405, 2408, 2398, 2399, 2409, 2405, 2405, 2410, 2411, 2416, + 2409, 2412, 2421, 2410, 2416, 2412, 2413, 2413, 2407, 2418, + 2406, 2408, 2419, 2422, 2423, 2419, 2422, 2418, 2425, 2424, + 2426, 2427, 2429, 2411, 2424, 2428, 2428, 2421, 2431, 2430, - 2425, 2421, 2420, 2428, 2428, 2425, 2425, 2423, 2426, 2429, - 2429, 2430, 2430, 2431, 2431, 2432, 2433, 2434, 2436, 2437, - 2435, 2433, 2438, 2440, 2440, 2441, 2442, 2436, 2441, 2444, - 2444, 2432, 2454, 2445, 2446, 2446, 2447, 2434, 2450, 2437, - 2445, 2447, 2438, 2451, 2442, 2449, 2449, 2450, 2452, 2457, - 2454, 2456, 2451, 2455, 2455, 2456, 2458, 2452, 2457, 2459, - 2460, 2461, 2466, 2466, 2459, 2459, 2467, 2469, 2470, 2473, - 2461, 2458, 2474, 2460, 2478, 2475, 2469, 2476, 2480, 2495, - 2470, 2474, 2482, 2476, 2467, 2483, 2478, 2482, 2484, 2484, - 2483, 2485, 2487, 2494, 2473, 2475, 2502, 2487, 2495, 2480, + 2432, 2423, 2423, 2431, 2431, 2427, 2425, 2430, 2433, 2433, + 2426, 2429, 2434, 2434, 2435, 2435, 2436, 2436, 2438, 2432, + 2437, 2437, 2439, 2440, 2441, 2443, 2442, 2439, 2444, 2446, + 2446, 2448, 2451, 2447, 2438, 2442, 2447, 2450, 2450, 2451, + 2452, 2452, 2453, 2440, 2456, 2443, 2457, 2453, 2444, 2448, + 2441, 2455, 2455, 2456, 2458, 2457, 2460, 2461, 2461, 2463, + 2462, 2464, 2466, 2458, 2462, 2465, 2472, 2472, 2463, 2467, + 2465, 2465, 2473, 2475, 2460, 2466, 2464, 2476, 2467, 2479, + 2481, 2482, 2475, 2480, 2484, 2486, 2488, 2482, 2489, 2476, + 2473, 2488, 2480, 2489, 2490, 2490, 2484, 2493, 2491, 2500, - 2485, 2488, 2488, 2490, 2490, 2488, 2491, 2491, 2492, 2492, - 2493, 2496, 2498, 2494, 2502, 2499, 2496, 2500, 2498, 2493, - 2499, 2503, 2500, 2501, 2501, 2504, 2505, 2506, 2507, 2510, - 2504, 2508, 2508, 2506, 2511, 2512, 2514, 2514, 2516, 2517, - 2524, 2518, 2503, 2520, 2505, 2518, 2521, 2519, 2510, 2511, - 2522, 2516, 2517, 2507, 2526, 2512, 2519, 2523, 2522, 2520, - 2525, 2525, 2523, 2528, 2528, 2521, 2524, 2529, 2529, 2531, - 2533, 2533, 2535, 2526, 2538, 2536, 2537, 2540, 2540, 2538, - 2541, 2542, 2543, 2545, 2545, 2546, 2549, 2552, 2535, 2548, - 2531, 2536, 2537, 2556, 2548, 2550, 2550, 2551, 2551, 2546, + 2481, 2501, 2493, 2763, 2479, 2763, 2486, 2491, 2494, 2494, + 2496, 2496, 2494, 2497, 2497, 2498, 2498, 2499, 2502, 2500, + 2501, 2504, 2508, 2502, 2505, 2506, 2499, 2504, 2509, 2505, + 2506, 2507, 2507, 2510, 2511, 2512, 2513, 2516, 2510, 2517, + 2508, 2512, 2514, 2514, 2518, 2520, 2520, 2522, 2525, 2509, + 2523, 2524, 2511, 2526, 2517, 2524, 2516, 2525, 2527, 2528, + 2522, 2513, 2530, 2523, 2518, 2529, 2532, 2528, 2537, 2526, + 2529, 2531, 2531, 2534, 2534, 2535, 2535, 2527, 2539, 2539, + 2541, 2542, 2543, 2546, 2546, 2532, 2544, 2547, 2530, 2537, + 2548, 2544, 2549, 2551, 2551, 2552, 2541, 2542, 2543, 2554, - 2541, 2543, 2553, 2553, 2542, 2554, 2555, 2552, 2549, 2558, - 2560, 2557, 2559, 2556, 2568, 2555, 2554, 2557, 2561, 2561, - 2562, 2567, 2553, 2562, 2559, 2563, 2563, 2573, 2558, 2569, - 2560, 2570, 2570, 2567, 2568, 2569, 2571, 2572, 2577, 2571, - 2583, 2575, 2576, 2572, 2578, 2573, 2575, 2576, 2579, 2584, - 2578, 2580, 2580, 2582, 2582, 2586, 2586, 2577, 2584, 2583, - 2587, 2587, 2588, 2589, 2590, 2579, 2579, 2588, 2599, 2590, - 2591, 2591, 2592, 2592, 2593, 2593, 2594, 2589, 2596, 2596, - 2601, 2594, 2602, 2603, 2604, 2604, 2607, 2599, 2606, 2606, - 2608, 2612, 2609, 2610, 2610, 2611, 2612, 2615, 2615, 2619, + 2555, 2556, 2556, 2558, 2554, 2557, 2557, 2547, 2560, 2552, + 2562, 2549, 2561, 2548, 2559, 2559, 2564, 2565, 2563, 2560, + 2566, 2561, 2555, 2558, 2563, 2567, 2567, 2573, 2568, 2565, + 2562, 2568, 2569, 2569, 2559, 2564, 2574, 2575, 2583, 2573, + 2566, 2576, 2576, 2575, 2577, 2578, 2579, 2577, 2581, 2582, + 2585, 2578, 2584, 2581, 2582, 2589, 2574, 2583, 2584, 2586, + 2586, 2588, 2588, 2590, 2579, 2592, 2592, 2585, 2585, 2593, + 2593, 2594, 2590, 2595, 2589, 2596, 2594, 2597, 2597, 2605, + 2596, 2598, 2598, 2599, 2599, 2600, 2607, 2595, 2602, 2602, + 2600, 2608, 2609, 2610, 2610, 2612, 2612, 2613, 2605, 2614, - 2607, 2609, 2601, 2618, 2602, 2603, 2617, 2617, 2618, 2620, - 2608, 2621, 2622, 2619, 2611, 2620, 2623, 2623, 2626, 2624, - 2622, 2627, 2628, 2621, 2624, 2629, 2630, 2628, 2632, 2633, - 2634, 2635, 2630, 2637, 2636, 2643, 2632, 2629, 2626, 2638, - 2639, 2627, 2640, 2647, 2647, 2644, 0, 2640, 2633, 2637, - 2634, 2635, 2636, 2648, 2648, 2643, 2638, 2638, 2644, 2649, - 2662, 2639, 2669, 2649, 2653, 2653, 2655, 2655, 2656, 2656, - 2659, 2656, 2657, 2657, 2659, 2657, 2658, 2658, 2662, 2658, - 2661, 2661, 2663, 2665, 2666, 2666, 2670, 2669, 2665, 2672, - 2671, 2673, 2675, 2670, 2671, 2676, 2663, 2680, 2672, 2677, + 2615, 2616, 2616, 2617, 2625, 2618, 2621, 2621, 2607, 2615, + 2618, 2613, 2624, 2608, 2609, 2623, 2623, 2624, 2625, 2614, + 2626, 2627, 2617, 2628, 2629, 2629, 2626, 2630, 2632, 2633, + 2634, 2628, 2630, 2627, 2635, 2634, 2636, 2638, 2639, 2640, + 2641, 2645, 2636, 2642, 2649, 2638, 2635, 2643, 2632, 2633, + 2644, 2646, 2650, 2653, 2653, 2727, 2646, 2639, 2727, 2640, + 2641, 2642, 2645, 2643, 2649, 2650, 0, 2644, 2644, 2654, + 2654, 2655, 2659, 2659, 2668, 2655, 2661, 2661, 2662, 2662, + 2665, 2662, 2663, 2663, 2665, 2663, 2664, 2664, 2669, 2664, + 2667, 2667, 2668, 2671, 2672, 2672, 2675, 2676, 2671, 2677, - 2677, 2678, 2678, 2685, 2676, 2687, 2673, 2679, 2679, 2681, - 2675, 2682, 2680, 2683, 2681, 2684, 2686, 2688, 2683, 2683, - 2682, 2684, 2688, 2682, 2689, 2690, 2687, 2838, 2685, 2689, - 2692, 2686, 2691, 2691, 2838, 2692, 2695, 2695, 2698, 2698, - 2699, 2699, 2700, 2700, 2690, 2701, 2701, 2702, 2702, 2703, - 2703, 2704, 2704, 2706, 2707, 2707, 2708, 2712, 2710, 2711, - 2711, 2713, 2706, 2714, 2715, 2715, 2716, 2717, 2717, 2720, - 2721, 2722, 2712, 2721, 2713, 2714, 2708, 2710, 2723, 2723, - 2724, 2716, 2726, 2727, 2730, 2726, 2728, 2720, 2729, 2727, - 2731, 2732, 2743, 2729, 2734, 2743, 2748, 2722, 2724, 2752, + 2678, 2679, 2669, 2677, 2676, 2681, 2682, 2683, 2683, 2678, + 2684, 2684, 2685, 2685, 2686, 2682, 2679, 2687, 2688, 2689, + 2690, 2675, 2687, 2681, 2689, 2689, 2690, 2688, 2691, 2686, + 2688, 2692, 2694, 2693, 2695, 2844, 2696, 2694, 2698, 2695, + 2697, 2697, 2844, 2698, 2701, 2701, 2692, 2704, 2704, 2705, + 2705, 2706, 2706, 2691, 2693, 2696, 2707, 2707, 2708, 2708, + 2709, 2709, 2710, 2710, 2712, 2713, 2713, 2714, 2718, 2716, + 2717, 2717, 2719, 2712, 2720, 2721, 2721, 2722, 2723, 2723, + 2726, 2728, 2730, 2718, 2736, 2719, 2720, 2714, 2716, 2729, + 2729, 2732, 2722, 2733, 2732, 2734, 2735, 2737, 2726, 2733, - 2728, 2745, 2745, 2730, 2746, 2746, 2749, 2732, 2731, 2734, - 2750, 2751, 2754, 2752, 2750, 2749, 2755, 2756, 2757, 2748, - 2757, 2758, 2756, 2759, 2759, 2760, 2761, 2755, 2762, 2764, - 2766, 2751, 2763, 2767, 2765, 2754, 2758, 2771, 2760, 2772, - 2772, 2770, 2866, 2773, 2866, 2761, 2762, 2778, 2763, 2765, - 2779, 2766, 2773, 2767, 2764, 2770, 2783, 2771, 2774, 2774, - 2775, 2775, 2776, 2776, 2777, 2777, 2778, 2781, 2780, 2782, - 2779, 2780, 2781, 2784, 2782, 2786, 2785, 2787, 2788, 2788, - 2789, 2783, 2785, 2790, 2790, 2792, 2794, 2799, 2784, 2786, - 2797, 2797, 2798, 2798, 2800, 2799, 2801, 2787, 2803, 2789, + 2730, 2735, 2738, 2736, 2740, 2749, 2754, 2728, 2749, 2734, + 2751, 2751, 2752, 2752, 2755, 2737, 2756, 2757, 2738, 2740, + 2756, 2758, 2760, 2755, 2764, 2761, 2762, 2765, 2765, 2754, + 2766, 2762, 2767, 2769, 2768, 2758, 2761, 2757, 2770, 2764, + 2771, 2772, 2776, 2766, 2773, 2760, 2777, 2778, 2778, 2769, + 2779, 2767, 2768, 2780, 2780, 2771, 2776, 2781, 2781, 2779, + 2782, 2782, 2772, 2770, 2773, 2784, 2777, 2783, 2783, 2785, + 2786, 2787, 2788, 2786, 2789, 2790, 2787, 2788, 2792, 2791, + 2793, 2794, 2794, 2795, 2784, 2791, 2796, 2796, 2798, 2785, + 2790, 2800, 2792, 2803, 2803, 2804, 2804, 2805, 2806, 2789, - 2792, 2802, 2801, 2804, 2794, 2805, 2808, 2802, 2806, 2806, - 2811, 2810, 2803, 2800, 2811, 2813, 2804, 2814, 2815, 2816, - 2817, 2818, 2814, 2819, 2805, 2810, 2808, 2822, 2819, 2820, - 2823, 2825, 2816, 2817, 2820, 2813, 2825, 2815, 2824, 2824, - 2818, 2826, 2827, 2827, 2831, 2822, 2828, 2826, 2829, 2823, - 2830, 2828, 2832, 2829, 2833, 2830, 2834, 2834, 2832, 2833, - 2836, 2837, 2839, 2831, 2836, 2840, 2841, 2842, 2849, 2843, - 2844, 2844, 2841, 2846, 2846, 2850, 2847, 2851, 2848, 2856, - 2837, 2839, 2843, 2848, 2840, 2847, 2842, 2849, 2847, 2854, - 2851, 2852, 2852, 2853, 2850, 2857, 2857, 2858, 2853, 2859, + 2793, 2807, 2795, 2798, 2808, 2805, 2809, 2807, 2810, 2800, + 2808, 2811, 2812, 2812, 2814, 2816, 2819, 2806, 2817, 2820, + 2809, 2810, 2817, 2821, 2820, 2822, 2823, 2824, 2825, 2816, + 2811, 2828, 2826, 2825, 2814, 2829, 2819, 2826, 2822, 2823, + 2830, 2830, 2821, 2831, 2832, 2837, 2824, 0, 2831, 2828, + 2832, 2833, 2833, 2834, 2829, 2835, 2836, 2838, 2834, 2843, + 2835, 2836, 2839, 2838, 2837, 2840, 2840, 2839, 2842, 2845, + 2846, 2847, 2842, 2848, 2849, 2850, 2850, 2847, 2843, 2852, + 2852, 2853, 2855, 2856, 2857, 2862, 2854, 2849, 2845, 2846, + 2853, 2854, 2848, 2853, 2858, 2858, 2860, 2857, 2859, 2863, - 2859, 2861, 2854, 2860, 2860, 2856, 2861, 2862, 2863, 2864, - 2864, 2870, 2865, 2868, 2862, 2869, 2858, 2865, 2867, 2867, - 2868, 2871, 2869, 2872, 2874, 2874, 2871, 2863, 2875, 2877, - 2870, 2878, 2879, 2880, 2877, 2884, 2878, 2881, 2881, 2883, - 2883, 2885, 2872, 2886, 2886, 2887, 2887, 2875, 2888, 2890, - 2890, 2879, 2880, 2898, 2884, 2888, 2891, 2891, 2892, 2894, - 2885, 2897, 2899, 0, 2894, 2892, 2897, 2900, 2900, 2901, - 2901, 0, 2898, 0, 0, 0, 0, 0, 0, 0, - 0, 2899, 2905, 2905, 2905, 2905, 2905, 2905, 2905, 2906, - 2906, 2906, 2906, 2906, 2906, 2906, 2907, 2907, 2907, 2907, + 2863, 2855, 2856, 2859, 2864, 2865, 2865, 2866, 2866, 2860, + 2867, 2862, 2868, 2869, 2874, 2867, 2870, 2870, 2876, 2868, + 2871, 2874, 2872, 2864, 2872, 2871, 2873, 2873, 2875, 2877, + 2878, 2881, 2869, 2885, 2877, 2875, 2883, 2876, 2880, 2880, + 2884, 2883, 2886, 2887, 2887, 2884, 2889, 2889, 2890, 2878, + 2881, 2891, 2885, 2892, 2892, 2893, 2893, 2894, 2896, 2896, + 2904, 2886, 2897, 2897, 2894, 2898, 2900, 2890, 2903, 2905, + 2891, 2900, 2898, 2903, 2906, 2906, 2907, 2907, 0, 2904, + 0, 0, 0, 0, 0, 0, 0, 0, 2905, 2911, + 2911, 2911, 2911, 2911, 2911, 2911, 2912, 2912, 2912, 2912, - 2907, 2907, 2907, 2908, 2908, 2908, 2908, 2908, 2908, 2908, - 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2911, 2911, 0, - 2911, 2911, 2911, 2911, 2912, 2912, 0, 0, 0, 2912, - 2912, 2913, 2913, 0, 0, 2913, 0, 2913, 2914, 0, - 0, 0, 0, 0, 2914, 2915, 2915, 0, 0, 0, - 2915, 2915, 2916, 0, 0, 0, 0, 0, 2916, 2917, - 2917, 0, 2917, 2917, 2917, 2917, 2918, 2918, 0, 2918, - 2918, 2918, 2918, 2904, 2904, 2904, 2904, 2904, 2904, 2904, - 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904, - 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904, + 2912, 2912, 2912, 2913, 2913, 2913, 2913, 2913, 2913, 2913, + 2914, 2914, 2914, 2914, 2914, 2914, 2914, 2915, 2915, 2915, + 2915, 2915, 2915, 2915, 2917, 2917, 0, 2917, 2917, 2917, + 2917, 2918, 2918, 0, 0, 0, 2918, 2918, 2919, 2919, + 0, 0, 2919, 0, 2919, 2920, 0, 0, 0, 0, + 0, 2920, 2921, 2921, 0, 0, 0, 2921, 2921, 2922, + 0, 0, 0, 0, 0, 2922, 2923, 2923, 0, 2923, + 2923, 2923, 2923, 2924, 2924, 0, 2924, 2924, 2924, 2924, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904, - 2904, 2904, 2904, 2904 + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2910 } ; static yy_state_type yy_last_accepting_state; @@ -2774,7 +2769,7 @@ static void config_start_include(const char* filename) config_include_stack = s; cfg_parser->filename = nm; cfg_parser->line = 1; - yy_switch_to_buffer(yy_create_buffer(input,YY_BUF_SIZE)); + yy_switch_to_buffer(yy_create_buffer(input, YY_BUF_SIZE)); } static void config_start_include_glob(const char* filename) @@ -2844,11 +2839,12 @@ static void config_end_include(void) #define yy_set_bol(at_bol) \ { \ if ( ! yy_current_buffer ) \ - yy_current_buffer = yy_create_buffer(yyin,YY_BUF_SIZE ); \ + yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \ yy_current_buffer->yy_ch_buf[0] = ((at_bol)?'\n':' '); \ } #endif +#line 2846 "" #define YY_NO_INPUT 1 #line 185 "./util/configlexer.lex" #ifndef YY_NO_UNPUT @@ -2857,8 +2853,9 @@ static void config_end_include(void) #ifndef YY_NO_INPUT #define YY_NO_INPUT 1 #endif +#line 2855 "" -#line 2860 "" +#line 2857 "" #define INITIAL 0 #define quotedstring 1 @@ -2879,36 +2876,36 @@ static void config_end_include(void) #define YY_EXTRA_TYPE void * #endif -static int yy_init_globals (void ); +static int yy_init_globals ( void ); /* Accessor methods to globals. These are made visible to non-reentrant scanners for convenience. */ -int yylex_destroy (void ); +int yylex_destroy ( void ); -int yyget_debug (void ); +int yyget_debug ( void ); -void yyset_debug (int debug_flag ); +void yyset_debug ( int debug_flag ); -YY_EXTRA_TYPE yyget_extra (void ); +YY_EXTRA_TYPE yyget_extra ( void ); -void yyset_extra (YY_EXTRA_TYPE user_defined ); +void yyset_extra ( YY_EXTRA_TYPE user_defined ); -FILE *yyget_in (void ); +FILE *yyget_in ( void ); -void yyset_in (FILE * _in_str ); +void yyset_in ( FILE * _in_str ); -FILE *yyget_out (void ); +FILE *yyget_out ( void ); -void yyset_out (FILE * _out_str ); +void yyset_out ( FILE * _out_str ); - int yyget_leng (void ); + int yyget_leng ( void ); -char *yyget_text (void ); +char *yyget_text ( void ); -int yyget_lineno (void ); +int yyget_lineno ( void ); -void yyset_lineno (int _line_number ); +void yyset_lineno ( int _line_number ); /* Macros after this point can all be overridden by user definitions in * section 1. @@ -2916,9 +2913,9 @@ void yyset_lineno (int _line_number ); #ifndef YY_SKIP_YYWRAP #ifdef __cplusplus -extern "C" int yywrap (void ); +extern "C" int yywrap ( void ); #else -extern int yywrap (void ); +extern int yywrap ( void ); #endif #endif @@ -2927,19 +2924,18 @@ extern int yywrap (void ); #endif #ifndef yytext_ptr -static void yy_flex_strncpy (char *,yyconst char *,int ); +static void yy_flex_strncpy ( char *, const char *, int ); #endif #ifdef YY_NEED_STRLEN -static int yy_flex_strlen (yyconst char * ); +static int yy_flex_strlen ( const char * ); #endif #ifndef YY_NO_INPUT - #ifdef __cplusplus -static int yyinput (void ); +static int yyinput ( void ); #else -static int input (void ); +static int input ( void ); #endif #endif @@ -3072,23 +3068,23 @@ YY_DECL if ( ! YY_CURRENT_BUFFER ) { yyensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = - yy_create_buffer(yyin,YY_BUF_SIZE ); + yy_create_buffer( yyin, YY_BUF_SIZE ); } - yy_load_buffer_state( ); + yy_load_buffer_state( ); } { #line 205 "./util/configlexer.lex" -#line 3083 "" +#line 3079 "" while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ { (yy_more_len) = 0; if ( (yy_more_flag) ) { - (yy_more_len) = (yy_c_buf_p) - (yytext_ptr); + (yy_more_len) = (int) ((yy_c_buf_p) - (yytext_ptr)); (yy_more_flag) = 0; } yy_cp = (yy_c_buf_p); @@ -3114,13 +3110,13 @@ yy_match: while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 2905 ) - yy_c = yy_meta[(unsigned int) yy_c]; + if ( yy_current_state >= 2911 ) + yy_c = yy_meta[yy_c]; } - yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c]; + yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; ++yy_cp; } - while ( yy_base[yy_current_state] != 5674 ); + while ( yy_base[yy_current_state] != 5681 ); yy_find_action: yy_act = yy_accept[yy_current_state]; @@ -3705,659 +3701,659 @@ YY_RULE_SETUP case 112: YY_RULE_SETUP #line 320 "./util/configlexer.lex" -{ YDVAR(1, VAR_ZONEFILE) } +{ YDVAR(0, VAR_RPZ) } YY_BREAK case 113: YY_RULE_SETUP #line 321 "./util/configlexer.lex" -{ YDVAR(1, VAR_MASTER) } +{ YDVAR(1, VAR_TAGS) } YY_BREAK case 114: YY_RULE_SETUP #line 322 "./util/configlexer.lex" -{ YDVAR(1, VAR_URL) } +{ YDVAR(1, VAR_ZONEFILE) } YY_BREAK case 115: YY_RULE_SETUP #line 323 "./util/configlexer.lex" -{ YDVAR(1, VAR_ALLOW_NOTIFY) } +{ YDVAR(1, VAR_MASTER) } YY_BREAK case 116: YY_RULE_SETUP #line 324 "./util/configlexer.lex" -{ YDVAR(1, VAR_FOR_DOWNSTREAM) } +{ YDVAR(1, VAR_URL) } YY_BREAK case 117: YY_RULE_SETUP #line 325 "./util/configlexer.lex" -{ YDVAR(1, VAR_FOR_UPSTREAM) } +{ YDVAR(1, VAR_ALLOW_NOTIFY) } YY_BREAK case 118: YY_RULE_SETUP #line 326 "./util/configlexer.lex" -{ YDVAR(1, VAR_FALLBACK_ENABLED) } +{ YDVAR(1, VAR_FOR_DOWNSTREAM) } YY_BREAK case 119: YY_RULE_SETUP #line 327 "./util/configlexer.lex" -{ YDVAR(0, VAR_VIEW) } +{ YDVAR(1, VAR_FOR_UPSTREAM) } YY_BREAK case 120: YY_RULE_SETUP #line 328 "./util/configlexer.lex" -{ YDVAR(1, VAR_VIEW_FIRST) } +{ YDVAR(1, VAR_FALLBACK_ENABLED) } YY_BREAK case 121: YY_RULE_SETUP #line 329 "./util/configlexer.lex" -{ YDVAR(1, VAR_DO_NOT_QUERY_ADDRESS) } +{ YDVAR(0, VAR_VIEW) } YY_BREAK case 122: YY_RULE_SETUP #line 330 "./util/configlexer.lex" -{ YDVAR(1, VAR_DO_NOT_QUERY_LOCALHOST) } +{ YDVAR(1, VAR_VIEW_FIRST) } YY_BREAK case 123: YY_RULE_SETUP #line 331 "./util/configlexer.lex" -{ YDVAR(2, VAR_ACCESS_CONTROL) } +{ YDVAR(1, VAR_DO_NOT_QUERY_ADDRESS) } YY_BREAK case 124: YY_RULE_SETUP #line 332 "./util/configlexer.lex" -{ YDVAR(1, VAR_SEND_CLIENT_SUBNET) } +{ YDVAR(1, VAR_DO_NOT_QUERY_LOCALHOST) } YY_BREAK case 125: YY_RULE_SETUP #line 333 "./util/configlexer.lex" -{ YDVAR(1, VAR_CLIENT_SUBNET_ZONE) } +{ YDVAR(2, VAR_ACCESS_CONTROL) } YY_BREAK case 126: YY_RULE_SETUP #line 334 "./util/configlexer.lex" -{ YDVAR(1, VAR_CLIENT_SUBNET_ALWAYS_FORWARD) } +{ YDVAR(1, VAR_SEND_CLIENT_SUBNET) } YY_BREAK case 127: YY_RULE_SETUP #line 335 "./util/configlexer.lex" -{ YDVAR(1, VAR_CLIENT_SUBNET_OPCODE) } +{ YDVAR(1, VAR_CLIENT_SUBNET_ZONE) } YY_BREAK case 128: YY_RULE_SETUP #line 336 "./util/configlexer.lex" -{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV4) } +{ YDVAR(1, VAR_CLIENT_SUBNET_ALWAYS_FORWARD) } YY_BREAK case 129: YY_RULE_SETUP #line 337 "./util/configlexer.lex" -{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV6) } +{ YDVAR(1, VAR_CLIENT_SUBNET_OPCODE) } YY_BREAK case 130: YY_RULE_SETUP #line 338 "./util/configlexer.lex" -{ YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV4) } +{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV4) } YY_BREAK case 131: YY_RULE_SETUP #line 339 "./util/configlexer.lex" -{ YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV6) } +{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV6) } YY_BREAK case 132: YY_RULE_SETUP #line 340 "./util/configlexer.lex" -{ YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV4) } +{ YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV4) } YY_BREAK case 133: YY_RULE_SETUP #line 341 "./util/configlexer.lex" -{ YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV6) } +{ YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV6) } YY_BREAK case 134: YY_RULE_SETUP #line 342 "./util/configlexer.lex" -{ YDVAR(1, VAR_HIDE_IDENTITY) } +{ YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV4) } YY_BREAK case 135: YY_RULE_SETUP #line 343 "./util/configlexer.lex" -{ YDVAR(1, VAR_HIDE_VERSION) } +{ YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV6) } YY_BREAK case 136: YY_RULE_SETUP #line 344 "./util/configlexer.lex" -{ YDVAR(1, VAR_HIDE_TRUSTANCHOR) } +{ YDVAR(1, VAR_HIDE_IDENTITY) } YY_BREAK case 137: YY_RULE_SETUP #line 345 "./util/configlexer.lex" -{ YDVAR(1, VAR_IDENTITY) } +{ YDVAR(1, VAR_HIDE_VERSION) } YY_BREAK case 138: YY_RULE_SETUP #line 346 "./util/configlexer.lex" -{ YDVAR(1, VAR_VERSION) } +{ YDVAR(1, VAR_HIDE_TRUSTANCHOR) } YY_BREAK case 139: YY_RULE_SETUP #line 347 "./util/configlexer.lex" -{ YDVAR(1, VAR_MODULE_CONF) } +{ YDVAR(1, VAR_IDENTITY) } YY_BREAK case 140: YY_RULE_SETUP #line 348 "./util/configlexer.lex" -{ YDVAR(1, VAR_DLV_ANCHOR) } +{ YDVAR(1, VAR_VERSION) } YY_BREAK case 141: YY_RULE_SETUP #line 349 "./util/configlexer.lex" -{ YDVAR(1, VAR_DLV_ANCHOR_FILE) } +{ YDVAR(1, VAR_MODULE_CONF) } YY_BREAK case 142: YY_RULE_SETUP #line 350 "./util/configlexer.lex" -{ YDVAR(1, VAR_TRUST_ANCHOR_FILE) } +{ YDVAR(1, VAR_DLV_ANCHOR) } YY_BREAK case 143: YY_RULE_SETUP #line 351 "./util/configlexer.lex" -{ YDVAR(1, VAR_AUTO_TRUST_ANCHOR_FILE) } +{ YDVAR(1, VAR_DLV_ANCHOR_FILE) } YY_BREAK case 144: YY_RULE_SETUP #line 352 "./util/configlexer.lex" -{ YDVAR(1, VAR_TRUSTED_KEYS_FILE) } +{ YDVAR(1, VAR_TRUST_ANCHOR_FILE) } YY_BREAK case 145: YY_RULE_SETUP #line 353 "./util/configlexer.lex" -{ YDVAR(1, VAR_TRUST_ANCHOR) } +{ YDVAR(1, VAR_AUTO_TRUST_ANCHOR_FILE) } YY_BREAK case 146: YY_RULE_SETUP #line 354 "./util/configlexer.lex" -{ YDVAR(1, VAR_TRUST_ANCHOR_SIGNALING) } +{ YDVAR(1, VAR_TRUSTED_KEYS_FILE) } YY_BREAK case 147: YY_RULE_SETUP #line 355 "./util/configlexer.lex" -{ YDVAR(1, VAR_ROOT_KEY_SENTINEL) } +{ YDVAR(1, VAR_TRUST_ANCHOR) } YY_BREAK case 148: YY_RULE_SETUP #line 356 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_OVERRIDE_DATE) } +{ YDVAR(1, VAR_TRUST_ANCHOR_SIGNALING) } YY_BREAK case 149: YY_RULE_SETUP #line 357 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_SIG_SKEW_MIN) } +{ YDVAR(1, VAR_ROOT_KEY_SENTINEL) } YY_BREAK case 150: YY_RULE_SETUP #line 358 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_SIG_SKEW_MAX) } +{ YDVAR(1, VAR_VAL_OVERRIDE_DATE) } YY_BREAK case 151: YY_RULE_SETUP #line 359 "./util/configlexer.lex" -{ YDVAR(1, VAR_BOGUS_TTL) } +{ YDVAR(1, VAR_VAL_SIG_SKEW_MIN) } YY_BREAK case 152: YY_RULE_SETUP #line 360 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_CLEAN_ADDITIONAL) } +{ YDVAR(1, VAR_VAL_SIG_SKEW_MAX) } YY_BREAK case 153: YY_RULE_SETUP #line 361 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_PERMISSIVE_MODE) } +{ YDVAR(1, VAR_BOGUS_TTL) } YY_BREAK case 154: YY_RULE_SETUP #line 362 "./util/configlexer.lex" -{ YDVAR(1, VAR_AGGRESSIVE_NSEC) } +{ YDVAR(1, VAR_VAL_CLEAN_ADDITIONAL) } YY_BREAK case 155: YY_RULE_SETUP #line 363 "./util/configlexer.lex" -{ YDVAR(1, VAR_IGNORE_CD_FLAG) } +{ YDVAR(1, VAR_VAL_PERMISSIVE_MODE) } YY_BREAK case 156: YY_RULE_SETUP #line 364 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVE_EXPIRED) } +{ YDVAR(1, VAR_AGGRESSIVE_NSEC) } YY_BREAK case 157: YY_RULE_SETUP #line 365 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVE_EXPIRED_TTL) } +{ YDVAR(1, VAR_IGNORE_CD_FLAG) } YY_BREAK case 158: YY_RULE_SETUP #line 366 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVE_EXPIRED_TTL_RESET) } +{ YDVAR(1, VAR_SERVE_EXPIRED) } YY_BREAK case 159: YY_RULE_SETUP #line 367 "./util/configlexer.lex" -{ YDVAR(1, VAR_FAKE_DSA) } +{ YDVAR(1, VAR_SERVE_EXPIRED_TTL) } YY_BREAK case 160: YY_RULE_SETUP #line 368 "./util/configlexer.lex" -{ YDVAR(1, VAR_FAKE_SHA1) } +{ YDVAR(1, VAR_SERVE_EXPIRED_TTL_RESET) } YY_BREAK case 161: YY_RULE_SETUP #line 369 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_LOG_LEVEL) } +{ YDVAR(1, VAR_FAKE_DSA) } YY_BREAK case 162: YY_RULE_SETUP #line 370 "./util/configlexer.lex" -{ YDVAR(1, VAR_KEY_CACHE_SIZE) } +{ YDVAR(1, VAR_FAKE_SHA1) } YY_BREAK case 163: YY_RULE_SETUP #line 371 "./util/configlexer.lex" -{ YDVAR(1, VAR_KEY_CACHE_SLABS) } +{ YDVAR(1, VAR_VAL_LOG_LEVEL) } YY_BREAK case 164: YY_RULE_SETUP #line 372 "./util/configlexer.lex" -{ YDVAR(1, VAR_NEG_CACHE_SIZE) } +{ YDVAR(1, VAR_KEY_CACHE_SIZE) } YY_BREAK case 165: YY_RULE_SETUP #line 373 "./util/configlexer.lex" -{ - YDVAR(1, VAR_VAL_NSEC3_KEYSIZE_ITERATIONS) } +{ YDVAR(1, VAR_KEY_CACHE_SLABS) } YY_BREAK case 166: YY_RULE_SETUP -#line 375 "./util/configlexer.lex" -{ YDVAR(1, VAR_ADD_HOLDDOWN) } +#line 374 "./util/configlexer.lex" +{ YDVAR(1, VAR_NEG_CACHE_SIZE) } YY_BREAK case 167: YY_RULE_SETUP -#line 376 "./util/configlexer.lex" -{ YDVAR(1, VAR_DEL_HOLDDOWN) } +#line 375 "./util/configlexer.lex" +{ + YDVAR(1, VAR_VAL_NSEC3_KEYSIZE_ITERATIONS) } YY_BREAK case 168: YY_RULE_SETUP #line 377 "./util/configlexer.lex" -{ YDVAR(1, VAR_KEEP_MISSING) } +{ YDVAR(1, VAR_ADD_HOLDDOWN) } YY_BREAK case 169: YY_RULE_SETUP #line 378 "./util/configlexer.lex" -{ YDVAR(1, VAR_PERMIT_SMALL_HOLDDOWN) } +{ YDVAR(1, VAR_DEL_HOLDDOWN) } YY_BREAK case 170: YY_RULE_SETUP #line 379 "./util/configlexer.lex" -{ YDVAR(1, VAR_USE_SYSLOG) } +{ YDVAR(1, VAR_KEEP_MISSING) } YY_BREAK case 171: YY_RULE_SETUP #line 380 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_IDENTITY) } +{ YDVAR(1, VAR_PERMIT_SMALL_HOLDDOWN) } YY_BREAK case 172: YY_RULE_SETUP #line 381 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_TIME_ASCII) } +{ YDVAR(1, VAR_USE_SYSLOG) } YY_BREAK case 173: YY_RULE_SETUP #line 382 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_QUERIES) } +{ YDVAR(1, VAR_LOG_IDENTITY) } YY_BREAK case 174: YY_RULE_SETUP #line 383 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_REPLIES) } +{ YDVAR(1, VAR_LOG_TIME_ASCII) } YY_BREAK case 175: YY_RULE_SETUP #line 384 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_TAG_QUERYREPLY) } +{ YDVAR(1, VAR_LOG_QUERIES) } YY_BREAK case 176: YY_RULE_SETUP #line 385 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_LOCAL_ACTIONS) } +{ YDVAR(1, VAR_LOG_REPLIES) } YY_BREAK case 177: YY_RULE_SETUP #line 386 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_SERVFAIL) } +{ YDVAR(1, VAR_LOG_TAG_QUERYREPLY) } YY_BREAK case 178: YY_RULE_SETUP #line 387 "./util/configlexer.lex" -{ YDVAR(2, VAR_LOCAL_ZONE) } +{ YDVAR(1, VAR_LOG_LOCAL_ACTIONS) } YY_BREAK case 179: YY_RULE_SETUP #line 388 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOCAL_DATA) } +{ YDVAR(1, VAR_LOG_SERVFAIL) } YY_BREAK case 180: YY_RULE_SETUP #line 389 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOCAL_DATA_PTR) } +{ YDVAR(2, VAR_LOCAL_ZONE) } YY_BREAK case 181: YY_RULE_SETUP #line 390 "./util/configlexer.lex" -{ YDVAR(1, VAR_UNBLOCK_LAN_ZONES) } +{ YDVAR(1, VAR_LOCAL_DATA) } YY_BREAK case 182: YY_RULE_SETUP #line 391 "./util/configlexer.lex" -{ YDVAR(1, VAR_INSECURE_LAN_ZONES) } +{ YDVAR(1, VAR_LOCAL_DATA_PTR) } YY_BREAK case 183: YY_RULE_SETUP #line 392 "./util/configlexer.lex" -{ YDVAR(1, VAR_STATISTICS_INTERVAL) } +{ YDVAR(1, VAR_UNBLOCK_LAN_ZONES) } YY_BREAK case 184: YY_RULE_SETUP #line 393 "./util/configlexer.lex" -{ YDVAR(1, VAR_STATISTICS_CUMULATIVE) } +{ YDVAR(1, VAR_INSECURE_LAN_ZONES) } YY_BREAK case 185: YY_RULE_SETUP #line 394 "./util/configlexer.lex" -{ YDVAR(1, VAR_EXTENDED_STATISTICS) } +{ YDVAR(1, VAR_STATISTICS_INTERVAL) } YY_BREAK case 186: YY_RULE_SETUP #line 395 "./util/configlexer.lex" -{ YDVAR(1, VAR_SHM_ENABLE) } +{ YDVAR(1, VAR_STATISTICS_CUMULATIVE) } YY_BREAK case 187: YY_RULE_SETUP #line 396 "./util/configlexer.lex" -{ YDVAR(1, VAR_SHM_KEY) } +{ YDVAR(1, VAR_EXTENDED_STATISTICS) } YY_BREAK case 188: YY_RULE_SETUP #line 397 "./util/configlexer.lex" -{ YDVAR(0, VAR_REMOTE_CONTROL) } +{ YDVAR(1, VAR_SHM_ENABLE) } YY_BREAK case 189: YY_RULE_SETUP #line 398 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_ENABLE) } +{ YDVAR(1, VAR_SHM_KEY) } YY_BREAK case 190: YY_RULE_SETUP #line 399 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_INTERFACE) } +{ YDVAR(0, VAR_REMOTE_CONTROL) } YY_BREAK case 191: YY_RULE_SETUP #line 400 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_PORT) } +{ YDVAR(1, VAR_CONTROL_ENABLE) } YY_BREAK case 192: YY_RULE_SETUP #line 401 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_USE_CERT) } +{ YDVAR(1, VAR_CONTROL_INTERFACE) } YY_BREAK case 193: YY_RULE_SETUP #line 402 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVER_KEY_FILE) } +{ YDVAR(1, VAR_CONTROL_PORT) } YY_BREAK case 194: YY_RULE_SETUP #line 403 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVER_CERT_FILE) } +{ YDVAR(1, VAR_CONTROL_USE_CERT) } YY_BREAK case 195: YY_RULE_SETUP #line 404 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_KEY_FILE) } +{ YDVAR(1, VAR_SERVER_KEY_FILE) } YY_BREAK case 196: YY_RULE_SETUP #line 405 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_CERT_FILE) } +{ YDVAR(1, VAR_SERVER_CERT_FILE) } YY_BREAK case 197: YY_RULE_SETUP #line 406 "./util/configlexer.lex" -{ YDVAR(1, VAR_PYTHON_SCRIPT) } +{ YDVAR(1, VAR_CONTROL_KEY_FILE) } YY_BREAK case 198: YY_RULE_SETUP #line 407 "./util/configlexer.lex" -{ YDVAR(0, VAR_PYTHON) } +{ YDVAR(1, VAR_CONTROL_CERT_FILE) } YY_BREAK case 199: YY_RULE_SETUP #line 408 "./util/configlexer.lex" -{ YDVAR(1, VAR_DOMAIN_INSECURE) } +{ YDVAR(1, VAR_PYTHON_SCRIPT) } YY_BREAK case 200: YY_RULE_SETUP #line 409 "./util/configlexer.lex" -{ YDVAR(1, VAR_MINIMAL_RESPONSES) } +{ YDVAR(0, VAR_PYTHON) } YY_BREAK case 201: YY_RULE_SETUP #line 410 "./util/configlexer.lex" -{ YDVAR(1, VAR_RRSET_ROUNDROBIN) } +{ YDVAR(1, VAR_DOMAIN_INSECURE) } YY_BREAK case 202: YY_RULE_SETUP #line 411 "./util/configlexer.lex" -{ YDVAR(1, VAR_UNKNOWN_SERVER_TIME_LIMIT) } +{ YDVAR(1, VAR_MINIMAL_RESPONSES) } YY_BREAK case 203: YY_RULE_SETUP #line 412 "./util/configlexer.lex" -{ YDVAR(1, VAR_MAX_UDP_SIZE) } +{ YDVAR(1, VAR_RRSET_ROUNDROBIN) } YY_BREAK case 204: YY_RULE_SETUP #line 413 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNS64_PREFIX) } +{ YDVAR(1, VAR_UNKNOWN_SERVER_TIME_LIMIT) } YY_BREAK case 205: YY_RULE_SETUP #line 414 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNS64_SYNTHALL) } +{ YDVAR(1, VAR_MAX_UDP_SIZE) } YY_BREAK case 206: YY_RULE_SETUP #line 415 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNS64_IGNORE_AAAA) } +{ YDVAR(1, VAR_DNS64_PREFIX) } YY_BREAK case 207: YY_RULE_SETUP #line 416 "./util/configlexer.lex" -{ YDVAR(1, VAR_DEFINE_TAG) } +{ YDVAR(1, VAR_DNS64_SYNTHALL) } YY_BREAK case 208: YY_RULE_SETUP #line 417 "./util/configlexer.lex" -{ YDVAR(2, VAR_LOCAL_ZONE_TAG) } +{ YDVAR(1, VAR_DNS64_IGNORE_AAAA) } YY_BREAK case 209: YY_RULE_SETUP #line 418 "./util/configlexer.lex" -{ YDVAR(2, VAR_ACCESS_CONTROL_TAG) } +{ YDVAR(1, VAR_DEFINE_TAG) } YY_BREAK case 210: YY_RULE_SETUP #line 419 "./util/configlexer.lex" -{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_ACTION) } +{ YDVAR(2, VAR_LOCAL_ZONE_TAG) } YY_BREAK case 211: YY_RULE_SETUP #line 420 "./util/configlexer.lex" -{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_DATA) } +{ YDVAR(2, VAR_ACCESS_CONTROL_TAG) } YY_BREAK case 212: YY_RULE_SETUP #line 421 "./util/configlexer.lex" -{ YDVAR(2, VAR_ACCESS_CONTROL_VIEW) } +{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_ACTION) } YY_BREAK case 213: YY_RULE_SETUP #line 422 "./util/configlexer.lex" -{ YDVAR(3, VAR_LOCAL_ZONE_OVERRIDE) } +{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_DATA) } YY_BREAK case 214: YY_RULE_SETUP #line 423 "./util/configlexer.lex" -{ YDVAR(0, VAR_DNSTAP) } +{ YDVAR(2, VAR_ACCESS_CONTROL_VIEW) } YY_BREAK case 215: YY_RULE_SETUP #line 424 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_ENABLE) } +{ YDVAR(3, VAR_LOCAL_ZONE_OVERRIDE) } YY_BREAK case 216: YY_RULE_SETUP #line 425 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_SOCKET_PATH) } +{ YDVAR(0, VAR_DNSTAP) } YY_BREAK case 217: YY_RULE_SETUP #line 426 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_SEND_IDENTITY) } +{ YDVAR(1, VAR_DNSTAP_ENABLE) } YY_BREAK case 218: YY_RULE_SETUP #line 427 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_SEND_VERSION) } +{ YDVAR(1, VAR_DNSTAP_SOCKET_PATH) } YY_BREAK case 219: YY_RULE_SETUP #line 428 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_IDENTITY) } +{ YDVAR(1, VAR_DNSTAP_SEND_IDENTITY) } YY_BREAK case 220: YY_RULE_SETUP #line 429 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_VERSION) } +{ YDVAR(1, VAR_DNSTAP_SEND_VERSION) } YY_BREAK case 221: YY_RULE_SETUP #line 430 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES) } +{ YDVAR(1, VAR_DNSTAP_IDENTITY) } YY_BREAK case 222: YY_RULE_SETUP -#line 432 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES) } +#line 431 "./util/configlexer.lex" +{ YDVAR(1, VAR_DNSTAP_VERSION) } YY_BREAK case 223: YY_RULE_SETUP -#line 434 "./util/configlexer.lex" +#line 432 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES) } YY_BREAK case 224: YY_RULE_SETUP -#line 436 "./util/configlexer.lex" +#line 434 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES) } YY_BREAK case 225: YY_RULE_SETUP -#line 438 "./util/configlexer.lex" +#line 436 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES) } YY_BREAK case 226: YY_RULE_SETUP -#line 440 "./util/configlexer.lex" +#line 438 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES) } YY_BREAK case 227: YY_RULE_SETUP -#line 442 "./util/configlexer.lex" -{ YDVAR(1, VAR_DISABLE_DNSSEC_LAME_CHECK) } +#line 440 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) } YY_BREAK case 228: YY_RULE_SETUP -#line 443 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT) } +#line 442 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) } YY_BREAK case 229: YY_RULE_SETUP #line 444 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT) } +{ YDVAR(1, VAR_DISABLE_DNSSEC_LAME_CHECK) } YY_BREAK case 230: YY_RULE_SETUP #line 445 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT_SLABS) } +{ YDVAR(1, VAR_IP_RATELIMIT) } YY_BREAK case 231: YY_RULE_SETUP #line 446 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT_SLABS) } +{ YDVAR(1, VAR_RATELIMIT) } YY_BREAK case 232: YY_RULE_SETUP #line 447 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT_SIZE) } +{ YDVAR(1, VAR_IP_RATELIMIT_SLABS) } YY_BREAK case 233: YY_RULE_SETUP #line 448 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT_SIZE) } +{ YDVAR(1, VAR_RATELIMIT_SLABS) } YY_BREAK case 234: YY_RULE_SETUP #line 449 "./util/configlexer.lex" -{ YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) } +{ YDVAR(1, VAR_IP_RATELIMIT_SIZE) } YY_BREAK case 235: YY_RULE_SETUP #line 450 "./util/configlexer.lex" -{ YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) } +{ YDVAR(1, VAR_RATELIMIT_SIZE) } YY_BREAK case 236: YY_RULE_SETUP #line 451 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT_FACTOR) } +{ YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) } YY_BREAK case 237: YY_RULE_SETUP #line 452 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT_FACTOR) } +{ YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) } YY_BREAK case 238: YY_RULE_SETUP #line 453 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOW_RTT) } +{ YDVAR(1, VAR_IP_RATELIMIT_FACTOR) } YY_BREAK case 239: YY_RULE_SETUP #line 454 "./util/configlexer.lex" -{ YDVAR(1, VAR_FAST_SERVER_NUM) } +{ YDVAR(1, VAR_RATELIMIT_FACTOR) } YY_BREAK case 240: YY_RULE_SETUP #line 455 "./util/configlexer.lex" -{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } +{ YDVAR(1, VAR_LOW_RTT) } YY_BREAK case 241: YY_RULE_SETUP #line 456 "./util/configlexer.lex" -{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } +{ YDVAR(1, VAR_FAST_SERVER_NUM) } YY_BREAK case 242: YY_RULE_SETUP @@ -4367,180 +4363,190 @@ YY_RULE_SETUP case 243: YY_RULE_SETUP #line 458 "./util/configlexer.lex" -{ YDVAR(2, VAR_RESPONSE_IP_TAG) } +{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } YY_BREAK case 244: YY_RULE_SETUP #line 459 "./util/configlexer.lex" -{ YDVAR(2, VAR_RESPONSE_IP) } +{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } YY_BREAK case 245: YY_RULE_SETUP #line 460 "./util/configlexer.lex" -{ YDVAR(2, VAR_RESPONSE_IP_DATA) } +{ YDVAR(2, VAR_RESPONSE_IP_TAG) } YY_BREAK case 246: YY_RULE_SETUP #line 461 "./util/configlexer.lex" -{ YDVAR(0, VAR_DNSCRYPT) } +{ YDVAR(2, VAR_RESPONSE_IP) } YY_BREAK case 247: YY_RULE_SETUP #line 462 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_ENABLE) } +{ YDVAR(2, VAR_RESPONSE_IP_DATA) } YY_BREAK case 248: YY_RULE_SETUP #line 463 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PORT) } +{ YDVAR(0, VAR_DNSCRYPT) } YY_BREAK case 249: YY_RULE_SETUP #line 464 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PROVIDER) } +{ YDVAR(1, VAR_DNSCRYPT_ENABLE) } YY_BREAK case 250: YY_RULE_SETUP #line 465 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_SECRET_KEY) } +{ YDVAR(1, VAR_DNSCRYPT_PORT) } YY_BREAK case 251: YY_RULE_SETUP #line 466 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT) } +{ YDVAR(1, VAR_DNSCRYPT_PROVIDER) } YY_BREAK case 252: YY_RULE_SETUP #line 467 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT_ROTATED) } +{ YDVAR(1, VAR_DNSCRYPT_SECRET_KEY) } YY_BREAK case 253: YY_RULE_SETUP #line 468 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE) } +{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT) } YY_BREAK case 254: YY_RULE_SETUP -#line 470 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS) } +#line 469 "./util/configlexer.lex" +{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT_ROTATED) } YY_BREAK case 255: YY_RULE_SETUP -#line 472 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SIZE) } +#line 470 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE) } YY_BREAK case 256: YY_RULE_SETUP -#line 473 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SLABS) } +#line 472 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS) } YY_BREAK case 257: YY_RULE_SETUP #line 474 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_ENABLED) } +{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SIZE) } YY_BREAK case 258: YY_RULE_SETUP #line 475 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_IGNORE_BOGUS) } +{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SLABS) } YY_BREAK case 259: YY_RULE_SETUP #line 476 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_HOOK) } +{ YDVAR(1, VAR_IPSECMOD_ENABLED) } YY_BREAK case 260: YY_RULE_SETUP #line 477 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_MAX_TTL) } +{ YDVAR(1, VAR_IPSECMOD_IGNORE_BOGUS) } YY_BREAK case 261: YY_RULE_SETUP #line 478 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_WHITELIST) } +{ YDVAR(1, VAR_IPSECMOD_HOOK) } YY_BREAK case 262: YY_RULE_SETUP #line 479 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_STRICT) } +{ YDVAR(1, VAR_IPSECMOD_MAX_TTL) } YY_BREAK case 263: YY_RULE_SETUP #line 480 "./util/configlexer.lex" -{ YDVAR(0, VAR_CACHEDB) } +{ YDVAR(1, VAR_IPSECMOD_WHITELIST) } YY_BREAK case 264: YY_RULE_SETUP #line 481 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_BACKEND) } +{ YDVAR(1, VAR_IPSECMOD_STRICT) } YY_BREAK case 265: YY_RULE_SETUP #line 482 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_SECRETSEED) } +{ YDVAR(0, VAR_CACHEDB) } YY_BREAK case 266: YY_RULE_SETUP #line 483 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISHOST) } +{ YDVAR(1, VAR_CACHEDB_BACKEND) } YY_BREAK case 267: YY_RULE_SETUP #line 484 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISPORT) } +{ YDVAR(1, VAR_CACHEDB_SECRETSEED) } YY_BREAK case 268: YY_RULE_SETUP #line 485 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISTIMEOUT) } +{ YDVAR(1, VAR_CACHEDB_REDISHOST) } YY_BREAK case 269: YY_RULE_SETUP #line 486 "./util/configlexer.lex" -{ YDVAR(1, VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM) } +{ YDVAR(1, VAR_CACHEDB_REDISPORT) } YY_BREAK case 270: YY_RULE_SETUP #line 487 "./util/configlexer.lex" -{ YDVAR(2, VAR_TCP_CONNECTION_LIMIT) } +{ YDVAR(1, VAR_CACHEDB_REDISTIMEOUT) } YY_BREAK case 271: -/* rule 271 can match eol */ YY_RULE_SETUP #line 488 "./util/configlexer.lex" +{ YDVAR(1, VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM) } + YY_BREAK +case 272: +YY_RULE_SETUP +#line 489 "./util/configlexer.lex" +{ YDVAR(2, VAR_TCP_CONNECTION_LIMIT) } + YY_BREAK +case 273: +/* rule 273 can match eol */ +YY_RULE_SETUP +#line 490 "./util/configlexer.lex" { LEXOUT(("NL\n")); cfg_parser->line++; } YY_BREAK /* Quoted strings. Strip leading and ending quotes */ -case 272: +case 274: YY_RULE_SETUP -#line 491 "./util/configlexer.lex" +#line 493 "./util/configlexer.lex" { BEGIN(quotedstring); LEXOUT(("QS ")); } YY_BREAK case YY_STATE_EOF(quotedstring): -#line 492 "./util/configlexer.lex" +#line 494 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); if(--num_args == 0) { BEGIN(INITIAL); } else { BEGIN(val); } } YY_BREAK -case 273: +case 275: YY_RULE_SETUP -#line 497 "./util/configlexer.lex" +#line 499 "./util/configlexer.lex" { LEXOUT(("STR(%s) ", yytext)); yymore(); } YY_BREAK -case 274: -/* rule 274 can match eol */ +case 276: +/* rule 276 can match eol */ YY_RULE_SETUP -#line 498 "./util/configlexer.lex" +#line 500 "./util/configlexer.lex" { yyerror("newline inside quoted string, no end \""); cfg_parser->line++; BEGIN(INITIAL); } YY_BREAK -case 275: +case 277: YY_RULE_SETUP -#line 500 "./util/configlexer.lex" +#line 502 "./util/configlexer.lex" { LEXOUT(("QE ")); if(--num_args == 0) { BEGIN(INITIAL); } @@ -4553,34 +4559,34 @@ YY_RULE_SETUP } YY_BREAK /* Single Quoted strings. Strip leading and ending quotes */ -case 276: +case 278: YY_RULE_SETUP -#line 512 "./util/configlexer.lex" +#line 514 "./util/configlexer.lex" { BEGIN(singlequotedstr); LEXOUT(("SQS ")); } YY_BREAK case YY_STATE_EOF(singlequotedstr): -#line 513 "./util/configlexer.lex" +#line 515 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); if(--num_args == 0) { BEGIN(INITIAL); } else { BEGIN(val); } } YY_BREAK -case 277: +case 279: YY_RULE_SETUP -#line 518 "./util/configlexer.lex" +#line 520 "./util/configlexer.lex" { LEXOUT(("STR(%s) ", yytext)); yymore(); } YY_BREAK -case 278: -/* rule 278 can match eol */ +case 280: +/* rule 280 can match eol */ YY_RULE_SETUP -#line 519 "./util/configlexer.lex" +#line 521 "./util/configlexer.lex" { yyerror("newline inside quoted string, no end '"); cfg_parser->line++; BEGIN(INITIAL); } YY_BREAK -case 279: +case 281: YY_RULE_SETUP -#line 521 "./util/configlexer.lex" +#line 523 "./util/configlexer.lex" { LEXOUT(("SQE ")); if(--num_args == 0) { BEGIN(INITIAL); } @@ -4593,38 +4599,38 @@ YY_RULE_SETUP } YY_BREAK /* include: directive */ -case 280: +case 282: YY_RULE_SETUP -#line 533 "./util/configlexer.lex" +#line 535 "./util/configlexer.lex" { LEXOUT(("v(%s) ", yytext)); inc_prev = YYSTATE; BEGIN(include); } YY_BREAK case YY_STATE_EOF(include): -#line 535 "./util/configlexer.lex" +#line 537 "./util/configlexer.lex" { yyerror("EOF inside include directive"); BEGIN(inc_prev); } YY_BREAK -case 281: -YY_RULE_SETUP -#line 539 "./util/configlexer.lex" -{ LEXOUT(("ISP ")); /* ignore */ } - YY_BREAK -case 282: -/* rule 282 can match eol */ -YY_RULE_SETUP -#line 540 "./util/configlexer.lex" -{ LEXOUT(("NL\n")); cfg_parser->line++;} - YY_BREAK case 283: YY_RULE_SETUP #line 541 "./util/configlexer.lex" -{ LEXOUT(("IQS ")); BEGIN(include_quoted); } +{ LEXOUT(("ISP ")); /* ignore */ } YY_BREAK case 284: +/* rule 284 can match eol */ YY_RULE_SETUP #line 542 "./util/configlexer.lex" +{ LEXOUT(("NL\n")); cfg_parser->line++;} + YY_BREAK +case 285: +YY_RULE_SETUP +#line 543 "./util/configlexer.lex" +{ LEXOUT(("IQS ")); BEGIN(include_quoted); } + YY_BREAK +case 286: +YY_RULE_SETUP +#line 544 "./util/configlexer.lex" { LEXOUT(("Iunquotedstr(%s) ", yytext)); config_start_include_glob(yytext); @@ -4632,27 +4638,27 @@ YY_RULE_SETUP } YY_BREAK case YY_STATE_EOF(include_quoted): -#line 547 "./util/configlexer.lex" +#line 549 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); BEGIN(inc_prev); } YY_BREAK -case 285: +case 287: YY_RULE_SETUP -#line 551 "./util/configlexer.lex" +#line 553 "./util/configlexer.lex" { LEXOUT(("ISTR(%s) ", yytext)); yymore(); } YY_BREAK -case 286: -/* rule 286 can match eol */ +case 288: +/* rule 288 can match eol */ YY_RULE_SETUP -#line 552 "./util/configlexer.lex" +#line 554 "./util/configlexer.lex" { yyerror("newline before \" in include name"); cfg_parser->line++; BEGIN(inc_prev); } YY_BREAK -case 287: +case 289: YY_RULE_SETUP -#line 554 "./util/configlexer.lex" +#line 556 "./util/configlexer.lex" { LEXOUT(("IQE ")); yytext[yyleng - 1] = '\0'; @@ -4662,7 +4668,7 @@ YY_RULE_SETUP YY_BREAK case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(val): -#line 560 "./util/configlexer.lex" +#line 562 "./util/configlexer.lex" { LEXOUT(("LEXEOF ")); yy_set_bol(1); /* Set beginning of line, so "^" rules match. */ @@ -4674,33 +4680,33 @@ case YY_STATE_EOF(val): } } YY_BREAK -case 288: +case 290: YY_RULE_SETUP -#line 571 "./util/configlexer.lex" +#line 573 "./util/configlexer.lex" { LEXOUT(("unquotedstr(%s) ", yytext)); if(--num_args == 0) { BEGIN(INITIAL); } yylval.str = strdup(yytext); return STRING_ARG; } YY_BREAK -case 289: +case 291: YY_RULE_SETUP -#line 575 "./util/configlexer.lex" +#line 577 "./util/configlexer.lex" { ub_c_error_msg("unknown keyword '%s'", yytext); } YY_BREAK -case 290: +case 292: YY_RULE_SETUP -#line 579 "./util/configlexer.lex" +#line 581 "./util/configlexer.lex" { ub_c_error_msg("stray '%s'", yytext); } YY_BREAK -case 291: +case 293: YY_RULE_SETUP -#line 583 "./util/configlexer.lex" +#line 585 "./util/configlexer.lex" ECHO; YY_BREAK -#line 4702 "" +#line 4708 "" case YY_END_OF_BUFFER: { @@ -4776,7 +4782,7 @@ ECHO; { (yy_did_buffer_switch_on_eof) = 0; - if ( yywrap( ) ) + if ( yywrap( ) ) { /* Note: because we've taken care in * yy_get_next_buffer() to have set up @@ -4843,7 +4849,7 @@ static int yy_get_next_buffer (void) { char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; char *source = (yytext_ptr); - yy_size_t number_to_move, i; + int number_to_move, i; int ret_val; if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] ) @@ -4872,7 +4878,7 @@ static int yy_get_next_buffer (void) /* Try to read more data. */ /* First move last chars to start of buffer. */ - number_to_move = (yy_size_t) ((yy_c_buf_p) - (yytext_ptr)) - 1; + number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr) - 1); for ( i = 0; i < number_to_move; ++i ) *(dest++) = *(source++); @@ -4908,7 +4914,8 @@ static int yy_get_next_buffer (void) b->yy_ch_buf = (char *) /* Include room in for 2 EOB chars. */ - yyrealloc((void *) b->yy_ch_buf,(yy_size_t) (b->yy_buf_size + 2) ); + yyrealloc( (void *) b->yy_ch_buf, + (yy_size_t) (b->yy_buf_size + 2) ); } else /* Can't grow it, we don't own it. */ @@ -4940,7 +4947,7 @@ static int yy_get_next_buffer (void) if ( number_to_move == YY_MORE_ADJ ) { ret_val = EOB_ACT_END_OF_FILE; - yyrestart(yyin ); + yyrestart( yyin ); } else @@ -4954,12 +4961,15 @@ static int yy_get_next_buffer (void) else ret_val = EOB_ACT_CONTINUE_SCAN; - if ((int) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { + if (((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { /* Extend the array by 50%, plus the number we really need. */ int new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1); - YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,(yy_size_t) new_size ); + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc( + (void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf, (yy_size_t) new_size ); if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); + /* "- 2" to take care of EOB's */ + YY_CURRENT_BUFFER_LVALUE->yy_buf_size = (int) (new_size - 2); } (yy_n_chars) += number_to_move; @@ -4991,10 +5001,10 @@ 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 >= 2905 ) - yy_c = yy_meta[(unsigned int) yy_c]; + if ( yy_current_state >= 2911 ) + yy_c = yy_meta[yy_c]; } - yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c]; + yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; } return yy_current_state; @@ -5019,11 +5029,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 >= 2905 ) - yy_c = yy_meta[(unsigned int) yy_c]; + if ( yy_current_state >= 2911 ) + yy_c = yy_meta[yy_c]; } - yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c]; - yy_is_jam = (yy_current_state == 2904); + yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; + yy_is_jam = (yy_current_state == 2910); return yy_is_jam ? 0 : yy_current_state; } @@ -5056,7 +5066,7 @@ static int yy_get_next_buffer (void) else { /* need more input */ - int offset = (yy_c_buf_p) - (yytext_ptr); + int offset = (int) ((yy_c_buf_p) - (yytext_ptr)); ++(yy_c_buf_p); switch ( yy_get_next_buffer( ) ) @@ -5073,13 +5083,13 @@ static int yy_get_next_buffer (void) */ /* Reset buffer status. */ - yyrestart(yyin ); + yyrestart( yyin ); /*FALLTHROUGH*/ case EOB_ACT_END_OF_FILE: { - if ( yywrap( ) ) + if ( yywrap( ) ) return 0; if ( ! (yy_did_buffer_switch_on_eof) ) @@ -5117,11 +5127,11 @@ static int yy_get_next_buffer (void) if ( ! YY_CURRENT_BUFFER ){ yyensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = - yy_create_buffer(yyin,YY_BUF_SIZE ); + yy_create_buffer( yyin, YY_BUF_SIZE ); } - yy_init_buffer(YY_CURRENT_BUFFER,input_file ); - yy_load_buffer_state( ); + yy_init_buffer( YY_CURRENT_BUFFER, input_file ); + yy_load_buffer_state( ); } /** Switch to a different input buffer. @@ -5149,7 +5159,7 @@ static int yy_get_next_buffer (void) } YY_CURRENT_BUFFER_LVALUE = new_buffer; - yy_load_buffer_state( ); + yy_load_buffer_state( ); /* We don't actually know whether we did this switch during * EOF (yywrap()) processing, but the only time this flag @@ -5177,7 +5187,7 @@ static void yy_load_buffer_state (void) { YY_BUFFER_STATE b; - b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state ) ); + b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) ); if ( ! b ) YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); @@ -5186,13 +5196,13 @@ static void yy_load_buffer_state (void) /* yy_ch_buf has to be 2 characters longer than the size given because * we need to put in 2 end-of-buffer characters. */ - b->yy_ch_buf = (char *) yyalloc((yy_size_t) (b->yy_buf_size + 2) ); + b->yy_ch_buf = (char *) yyalloc( (yy_size_t) (b->yy_buf_size + 2) ); if ( ! b->yy_ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); b->yy_is_our_buffer = 1; - yy_init_buffer(b,file ); + yy_init_buffer( b, file ); return b; } @@ -5211,9 +5221,9 @@ static void yy_load_buffer_state (void) YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; if ( b->yy_is_our_buffer ) - yyfree((void *) b->yy_ch_buf ); + yyfree( (void *) b->yy_ch_buf ); - yyfree((void *) b ); + yyfree( (void *) b ); } /* Initializes or reinitializes a buffer. @@ -5225,7 +5235,7 @@ static void yy_load_buffer_state (void) { int oerrno = errno; - yy_flush_buffer(b ); + yy_flush_buffer( b ); b->yy_input_file = file; b->yy_fill_buffer = 1; @@ -5268,7 +5278,7 @@ static void yy_load_buffer_state (void) b->yy_buffer_status = YY_BUFFER_NEW; if ( b == YY_CURRENT_BUFFER ) - yy_load_buffer_state( ); + yy_load_buffer_state( ); } /** Pushes the new state onto the stack. The new state becomes @@ -5299,7 +5309,7 @@ void yypush_buffer_state (YY_BUFFER_STATE new_buffer ) YY_CURRENT_BUFFER_LVALUE = new_buffer; /* copied from yy_switch_to_buffer. */ - yy_load_buffer_state( ); + yy_load_buffer_state( ); (yy_did_buffer_switch_on_eof) = 1; } @@ -5318,7 +5328,7 @@ void yypop_buffer_state (void) --(yy_buffer_stack_top); if (YY_CURRENT_BUFFER) { - yy_load_buffer_state( ); + yy_load_buffer_state( ); (yy_did_buffer_switch_on_eof) = 1; } } @@ -5328,7 +5338,7 @@ void yypop_buffer_state (void) */ static void yyensure_buffer_stack (void) { - int num_to_alloc; + yy_size_t num_to_alloc; if (!(yy_buffer_stack)) { @@ -5342,9 +5352,9 @@ static void yyensure_buffer_stack (void) ); if ( ! (yy_buffer_stack) ) YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); - + memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*)); - + (yy_buffer_stack_max) = num_to_alloc; (yy_buffer_stack_top) = 0; return; @@ -5373,7 +5383,7 @@ static void yyensure_buffer_stack (void) * @param base the character buffer * @param size the size in bytes of the character buffer * - * @return the newly allocated buffer state object. + * @return the newly allocated buffer state object. */ YY_BUFFER_STATE yy_scan_buffer (char * base, yy_size_t size ) { @@ -5385,7 +5395,7 @@ YY_BUFFER_STATE yy_scan_buffer (char * base, yy_size_t size ) /* They forgot to leave room for the EOB's. */ return NULL; - b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state ) ); + b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) ); if ( ! b ) YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" ); @@ -5399,7 +5409,7 @@ YY_BUFFER_STATE yy_scan_buffer (char * base, yy_size_t size ) b->yy_fill_buffer = 0; b->yy_buffer_status = YY_BUFFER_NEW; - yy_switch_to_buffer(b ); + yy_switch_to_buffer( b ); return b; } @@ -5412,10 +5422,10 @@ YY_BUFFER_STATE yy_scan_buffer (char * base, yy_size_t size ) * @note If you want to scan bytes that may contain NUL values, then use * yy_scan_bytes() instead. */ -YY_BUFFER_STATE yy_scan_string (yyconst char * yystr ) +YY_BUFFER_STATE yy_scan_string (const char * yystr ) { - return yy_scan_bytes(yystr,(int) strlen(yystr) ); + return yy_scan_bytes( yystr, (int) strlen(yystr) ); } /** Setup the input buffer state to scan the given bytes. The next call to yylex() will @@ -5425,7 +5435,7 @@ YY_BUFFER_STATE yy_scan_string (yyconst char * yystr ) * * @return the newly allocated buffer state object. */ -YY_BUFFER_STATE yy_scan_bytes (yyconst char * yybytes, int _yybytes_len ) +YY_BUFFER_STATE yy_scan_bytes (const char * yybytes, int _yybytes_len ) { YY_BUFFER_STATE b; char *buf; @@ -5434,7 +5444,7 @@ YY_BUFFER_STATE yy_scan_bytes (yyconst char * yybytes, int _yybytes_len ) /* Get memory for full buffer, including space for trailing EOB's. */ n = (yy_size_t) (_yybytes_len + 2); - buf = (char *) yyalloc(n ); + buf = (char *) yyalloc( n ); if ( ! buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" ); @@ -5443,7 +5453,7 @@ YY_BUFFER_STATE yy_scan_bytes (yyconst char * yybytes, int _yybytes_len ) buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR; - b = yy_scan_buffer(buf,n ); + b = yy_scan_buffer( buf, n ); if ( ! b ) YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" ); @@ -5459,9 +5469,9 @@ YY_BUFFER_STATE yy_scan_bytes (yyconst char * yybytes, int _yybytes_len ) #define YY_EXIT_FAILURE 2 #endif -static void yynoreturn yy_fatal_error (yyconst char* msg ) +static void yynoreturn yy_fatal_error (const char* msg ) { - (void) fprintf( stderr, "%s\n", msg ); + fprintf( stderr, "%s\n", msg ); exit( YY_EXIT_FAILURE ); } @@ -5472,7 +5482,7 @@ static void yynoreturn yy_fatal_error (yyconst char* msg ) do \ { \ /* Undo effects of setting up yytext. */ \ - yy_size_t yyless_macro_arg = (n); \ + int yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg);\ yytext[yyleng] = (yy_hold_char); \ (yy_c_buf_p) = yytext + yyless_macro_arg; \ @@ -5489,7 +5499,7 @@ static void yynoreturn yy_fatal_error (yyconst char* msg ) */ int yyget_lineno (void) { - + return yylineno; } @@ -5596,7 +5606,7 @@ int yylex_destroy (void) /* Pop the buffer stack, destroying each element. */ while(YY_CURRENT_BUFFER){ - yy_delete_buffer(YY_CURRENT_BUFFER ); + yy_delete_buffer( YY_CURRENT_BUFFER ); YY_CURRENT_BUFFER_LVALUE = NULL; yypop_buffer_state(); } @@ -5617,7 +5627,7 @@ int yylex_destroy (void) */ #ifndef yytext_ptr -static void yy_flex_strncpy (char* s1, yyconst char * s2, int n ) +static void yy_flex_strncpy (char* s1, const char * s2, int n ) { int i; @@ -5627,7 +5637,7 @@ static void yy_flex_strncpy (char* s1, yyconst char * s2, int n ) #endif #ifdef YY_NEED_STRLEN -static int yy_flex_strlen (yyconst char * s ) +static int yy_flex_strlen (const char * s ) { int n; for ( n = 0; s[n]; ++n ) @@ -5662,7 +5672,6 @@ void yyfree (void * ptr ) #define YYTABLES_NAME "yytables" -#line 583 "./util/configlexer.lex" - +#line 585 "./util/configlexer.lex" diff --git a/util/configlexer.lex b/util/configlexer.lex index 16b5bc547..52026dc49 100644 --- a/util/configlexer.lex +++ b/util/configlexer.lex @@ -317,6 +317,8 @@ forward-no-cache{COLON} { YDVAR(1, VAR_FORWARD_NO_CACHE) } forward-ssl-upstream{COLON} { YDVAR(1, VAR_FORWARD_SSL_UPSTREAM) } forward-tls-upstream{COLON} { YDVAR(1, VAR_FORWARD_SSL_UPSTREAM) } auth-zone{COLON} { YDVAR(0, VAR_AUTH_ZONE) } +rpz{COLON} { YDVAR(0, VAR_RPZ) } +tags{COLON} { YDVAR(1, VAR_TAGS) } zonefile{COLON} { YDVAR(1, VAR_ZONEFILE) } master{COLON} { YDVAR(1, VAR_MASTER) } url{COLON} { YDVAR(1, VAR_URL) } diff --git a/util/configparser.c b/util/configparser.c index 9253702bc..8f54d71e8 100644 --- a/util/configparser.c +++ b/util/configparser.c @@ -1,8 +1,8 @@ -/* A Bison parser, made by GNU Bison 3.0.5. */ +/* A Bison parser, made by GNU Bison 3.0.4. */ /* Bison implementation for Yacc-like parsers in C - Copyright (C) 1984, 1989-1990, 2000-2015, 2018 Free Software Foundation, Inc. + Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -44,7 +44,7 @@ #define YYBISON 1 /* Bison version. */ -#define YYBISON_VERSION "3.0.5" +#define YYBISON_VERSION "3.0.4" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" @@ -389,7 +389,9 @@ extern int yydebug; VAR_STREAM_WAIT_SIZE = 518, VAR_TLS_CIPHERS = 519, VAR_TLS_CIPHERSUITES = 520, - VAR_TLS_SESSION_TICKET_KEYS = 521 + VAR_TLS_SESSION_TICKET_KEYS = 521, + VAR_RPZ = 522, + VAR_TAGS = 523 }; #endif /* Tokens. */ @@ -657,6 +659,8 @@ extern int yydebug; #define VAR_TLS_CIPHERS 519 #define VAR_TLS_CIPHERSUITES 520 #define VAR_TLS_SESSION_TICKET_KEYS 521 +#define VAR_RPZ 522 +#define VAR_TAGS 523 /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED @@ -667,7 +671,7 @@ union YYSTYPE char* str; -#line 671 "util/configparser.c" /* yacc.c:355 */ +#line 675 "util/configparser.c" /* yacc.c:355 */ }; typedef union YYSTYPE YYSTYPE; @@ -684,7 +688,7 @@ int yyparse (void); /* Copy the second part of user declarations. */ -#line 688 "util/configparser.c" /* yacc.c:358 */ +#line 692 "util/configparser.c" /* yacc.c:358 */ #ifdef short # undef short @@ -926,21 +930,21 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 2 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 536 +#define YYLAST 565 /* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 267 +#define YYNTOKENS 269 /* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 286 +#define YYNNTS 290 /* YYNRULES -- Number of rules. */ -#define YYNRULES 549 +#define YYNRULES 557 /* YYNSTATES -- Number of states. */ -#define YYNSTATES 823 +#define YYNSTATES 832 /* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned by yylex, with out-of-bounds checking. */ #define YYUNDEFTOK 2 -#define YYMAXUTOK 521 +#define YYMAXUTOK 523 #define YYTRANSLATE(YYX) \ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) @@ -1001,7 +1005,7 @@ static const yytype_uint16 yytranslate[] = 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, - 265, 266 + 265, 266, 267, 268 }; #if YYDEBUG @@ -1009,60 +1013,61 @@ static const yytype_uint16 yytranslate[] = static const yytype_uint16 yyrline[] = { 0, 172, 172, 172, 173, 173, 174, 174, 175, 175, - 175, 176, 176, 177, 181, 186, 187, 188, 188, 188, - 189, 189, 190, 190, 191, 191, 192, 192, 192, 193, - 193, 194, 194, 194, 195, 195, 195, 196, 196, 197, - 197, 198, 198, 199, 199, 200, 200, 201, 201, 202, - 202, 203, 203, 204, 204, 204, 205, 205, 205, 206, - 206, 206, 207, 207, 208, 208, 209, 209, 210, 210, - 211, 211, 211, 212, 212, 213, 213, 214, 214, 214, - 215, 215, 216, 216, 217, 217, 218, 218, 218, 219, - 219, 220, 220, 221, 221, 222, 222, 223, 223, 224, - 224, 224, 225, 225, 226, 226, 226, 227, 227, 227, - 228, 228, 228, 229, 229, 229, 229, 230, 231, 231, - 231, 232, 232, 232, 233, 233, 234, 234, 235, 235, - 235, 236, 236, 237, 237, 237, 238, 238, 239, 239, - 240, 241, 241, 242, 242, 243, 243, 244, 245, 245, - 246, 246, 247, 247, 248, 248, 249, 249, 250, 250, - 250, 251, 251, 252, 252, 253, 253, 254, 254, 255, - 255, 256, 256, 256, 257, 257, 257, 258, 258, 258, - 259, 259, 260, 261, 261, 262, 262, 263, 263, 264, - 264, 265, 265, 265, 266, 266, 266, 267, 267, 267, - 268, 268, 269, 269, 270, 270, 272, 284, 285, 286, - 286, 286, 286, 286, 287, 287, 289, 301, 302, 303, - 303, 303, 303, 304, 304, 306, 320, 321, 322, 322, - 322, 322, 323, 323, 323, 325, 341, 342, 343, 343, - 343, 343, 344, 344, 344, 345, 347, 356, 365, 376, - 385, 394, 403, 414, 423, 434, 447, 462, 473, 490, - 507, 524, 541, 556, 571, 584, 599, 608, 617, 626, - 635, 644, 653, 662, 671, 680, 689, 698, 707, 716, - 729, 738, 751, 760, 769, 778, 785, 792, 801, 808, - 817, 825, 832, 839, 847, 856, 865, 879, 888, 897, - 906, 915, 924, 933, 940, 947, 973, 981, 988, 995, - 1002, 1009, 1017, 1025, 1033, 1040, 1051, 1062, 1069, 1078, - 1087, 1096, 1103, 1110, 1118, 1126, 1136, 1146, 1156, 1164, - 1177, 1188, 1196, 1209, 1218, 1227, 1236, 1246, 1256, 1264, - 1277, 1286, 1294, 1303, 1311, 1324, 1333, 1340, 1350, 1360, - 1370, 1380, 1390, 1400, 1410, 1420, 1427, 1434, 1441, 1450, - 1459, 1468, 1477, 1484, 1494, 1514, 1521, 1539, 1552, 1565, - 1574, 1583, 1592, 1601, 1611, 1621, 1632, 1641, 1650, 1659, - 1668, 1681, 1694, 1703, 1710, 1719, 1728, 1737, 1746, 1754, - 1767, 1775, 1808, 1815, 1830, 1840, 1850, 1857, 1864, 1871, - 1880, 1888, 1902, 1923, 1944, 1956, 1968, 1980, 1989, 2010, - 2020, 2029, 2037, 2045, 2058, 2071, 2086, 2101, 2110, 2119, - 2125, 2134, 2143, 2153, 2163, 2176, 2189, 2201, 2215, 2227, - 2241, 2251, 2258, 2265, 2274, 2283, 2293, 2303, 2313, 2320, - 2327, 2336, 2345, 2355, 2365, 2372, 2379, 2386, 2394, 2404, - 2414, 2424, 2434, 2466, 2476, 2484, 2492, 2507, 2516, 2521, - 2522, 2523, 2523, 2523, 2524, 2524, 2524, 2525, 2525, 2527, - 2537, 2546, 2553, 2560, 2567, 2574, 2581, 2588, 2593, 2594, - 2595, 2595, 2596, 2596, 2597, 2597, 2598, 2599, 2600, 2601, - 2602, 2603, 2605, 2614, 2621, 2630, 2639, 2646, 2653, 2663, - 2673, 2683, 2693, 2703, 2713, 2718, 2719, 2720, 2722, 2728, - 2738, 2745, 2754, 2762, 2767, 2768, 2770, 2770, 2770, 2771, - 2771, 2772, 2773, 2774, 2775, 2776, 2778, 2788, 2797, 2804, - 2813, 2820, 2829, 2837, 2850, 2858, 2871, 2876, 2877, 2878, - 2878, 2879, 2879, 2879, 2881, 2896, 2911, 2923, 2938, 2951 + 175, 176, 176, 177, 177, 181, 186, 187, 188, 188, + 188, 189, 189, 190, 190, 191, 191, 192, 192, 192, + 193, 193, 194, 194, 194, 195, 195, 195, 196, 196, + 197, 197, 198, 198, 199, 199, 200, 200, 201, 201, + 202, 202, 203, 203, 204, 204, 204, 205, 205, 205, + 206, 206, 206, 207, 207, 208, 208, 209, 209, 210, + 210, 211, 211, 211, 212, 212, 213, 213, 214, 214, + 214, 215, 215, 216, 216, 217, 217, 218, 218, 218, + 219, 219, 220, 220, 221, 221, 222, 222, 223, 223, + 224, 224, 224, 225, 225, 226, 226, 226, 227, 227, + 227, 228, 228, 228, 229, 229, 229, 229, 230, 231, + 231, 231, 232, 232, 232, 233, 233, 234, 234, 235, + 235, 235, 236, 236, 237, 237, 237, 238, 238, 239, + 239, 240, 241, 241, 242, 242, 243, 243, 244, 245, + 245, 246, 246, 247, 247, 248, 248, 249, 249, 250, + 250, 250, 251, 251, 252, 252, 253, 253, 254, 254, + 255, 255, 256, 256, 256, 257, 257, 257, 258, 258, + 258, 259, 259, 260, 261, 261, 262, 262, 263, 263, + 264, 264, 265, 265, 265, 266, 266, 266, 267, 267, + 267, 268, 268, 269, 269, 270, 270, 272, 284, 285, + 286, 286, 286, 286, 286, 287, 287, 289, 301, 302, + 303, 303, 303, 303, 304, 304, 306, 320, 321, 322, + 322, 322, 322, 323, 323, 323, 325, 342, 343, 344, + 344, 344, 344, 345, 345, 345, 346, 349, 366, 383, + 384, 385, 385, 385, 387, 396, 405, 416, 425, 434, + 443, 454, 463, 474, 487, 502, 513, 530, 547, 564, + 581, 596, 611, 624, 639, 648, 657, 666, 675, 684, + 693, 702, 711, 720, 729, 738, 747, 756, 769, 778, + 791, 800, 809, 818, 825, 832, 841, 848, 857, 865, + 872, 879, 887, 896, 905, 919, 928, 937, 946, 955, + 964, 973, 980, 987, 1013, 1021, 1028, 1035, 1042, 1049, + 1057, 1065, 1073, 1080, 1091, 1102, 1109, 1118, 1127, 1136, + 1143, 1150, 1158, 1166, 1176, 1186, 1196, 1204, 1217, 1228, + 1236, 1249, 1258, 1267, 1276, 1286, 1296, 1304, 1317, 1326, + 1334, 1343, 1351, 1364, 1373, 1380, 1390, 1400, 1410, 1420, + 1430, 1440, 1450, 1460, 1467, 1474, 1481, 1490, 1499, 1508, + 1517, 1524, 1534, 1554, 1561, 1579, 1592, 1605, 1614, 1623, + 1632, 1641, 1651, 1661, 1672, 1681, 1690, 1699, 1708, 1721, + 1734, 1743, 1750, 1759, 1768, 1777, 1786, 1794, 1807, 1815, + 1848, 1855, 1870, 1880, 1890, 1897, 1904, 1911, 1920, 1928, + 1942, 1963, 1984, 1996, 2008, 2020, 2029, 2050, 2060, 2069, + 2077, 2085, 2098, 2111, 2126, 2141, 2150, 2159, 2165, 2174, + 2183, 2193, 2203, 2216, 2229, 2241, 2255, 2267, 2281, 2291, + 2298, 2305, 2314, 2323, 2333, 2343, 2353, 2360, 2367, 2376, + 2385, 2395, 2405, 2412, 2419, 2426, 2434, 2444, 2454, 2464, + 2474, 2506, 2516, 2524, 2532, 2547, 2556, 2561, 2562, 2563, + 2563, 2563, 2564, 2564, 2564, 2565, 2565, 2567, 2577, 2586, + 2593, 2600, 2607, 2614, 2621, 2628, 2633, 2634, 2635, 2635, + 2636, 2636, 2637, 2637, 2638, 2639, 2640, 2641, 2642, 2643, + 2645, 2654, 2661, 2670, 2679, 2686, 2693, 2703, 2713, 2723, + 2733, 2743, 2753, 2758, 2759, 2760, 2762, 2768, 2778, 2785, + 2794, 2802, 2807, 2808, 2810, 2810, 2810, 2811, 2811, 2812, + 2813, 2814, 2815, 2816, 2818, 2828, 2837, 2844, 2853, 2860, + 2869, 2877, 2890, 2898, 2911, 2916, 2917, 2918, 2918, 2919, + 2919, 2919, 2921, 2936, 2951, 2963, 2978, 2991 }; #endif @@ -1169,12 +1174,13 @@ static const char *const yytname[] = "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_SESSION_TICKET_KEYS", "$accept", "toplevelvars", "toplevelvar", - "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", "server_num_threads", - "server_verbosity", "server_statistics_interval", + "VAR_TLS_SESSION_TICKET_KEYS", "VAR_RPZ", "VAR_TAGS", "$accept", + "toplevelvars", "toplevelvar", "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", "rpzstart", "contents_rpz", "content_rpz", + "server_num_threads", "server_verbosity", "server_statistics_interval", "server_statistics_cumulative", "server_extended_statistics", "server_shm_enable", "server_shm_key", "server_port", "server_send_client_subnet", "server_client_subnet_zone", @@ -1320,14 +1326,14 @@ static const yytype_uint16 yytoknum[] = 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 + 515, 516, 517, 518, 519, 520, 521, 522, 523 }; # endif -#define YYPACT_NINF -154 +#define YYPACT_NINF -192 #define yypact_value_is_default(Yystate) \ - (!!((Yystate) == (-154))) + (!!((Yystate) == (-192))) #define YYTABLE_NINF -1 @@ -1338,89 +1344,90 @@ static const yytype_uint16 yytoknum[] = STATE-NUM. */ static const yytype_int16 yypact[] = { - -154, 212, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, -154, -12, 102, 98, 166, 39, 213, - 142, -80, 52, -153, 22, 23, 24, 28, 29, 30, - 78, 79, 80, 84, 88, 89, 114, 115, 116, 118, - 129, 130, 132, 133, 134, 136, 141, 180, 182, 196, - 197, 200, 201, 203, 204, 205, 206, 214, 215, 216, - 217, 218, 220, 221, 222, 223, 225, 245, 247, 248, - 249, 250, 251, 253, 254, 255, 256, 257, 258, 259, - 272, 278, 279, 280, 281, 282, 297, 306, 307, 308, - 309, 310, 311, 313, 314, 315, 316, 317, 318, 319, - 320, 323, 324, 325, 326, 327, 328, 329, 330, 331, - 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, - 342, 343, 344, 346, 347, 348, 349, 351, 352, 354, - 355, 356, 357, 358, 359, 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, 405, 406, - 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, - 417, 418, 419, 421, 422, 423, 424, 425, 426, 427, - 428, 429, 430, 431, 432, 433, 434, 435, 436, 438, - 439, 440, 441, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, 442, 443, 444, 446, 447, 448, 449, - -154, -154, -154, -154, -154, -154, -154, -154, 450, 451, - 452, 453, 454, 455, -154, -154, -154, -154, -154, -154, - -154, 456, 457, 458, 459, 460, 461, 462, -154, -154, - -154, -154, -154, -154, -154, -154, 463, 464, 465, 466, - 467, 468, 469, 470, -154, -154, -154, -154, -154, -154, - -154, -154, -154, 471, 472, 473, 474, 475, 476, 477, - 478, -154, -154, -154, -154, -154, -154, -154, -154, -154, - 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, - 489, 490, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, -154, -154, 491, -154, -154, 492, 493, - 494, 495, 496, 497, 498, 499, 500, 501, -154, -154, - -154, -154, -154, -154, -154, -154, -154, -154, -154, 502, - 503, 504, 505, 506, -154, -154, -154, -154, -154, -154, - -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, -154, -154, -154, -154, -154, -154, 507, - 508, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, -154, -154, -154, 509, 510, 511, -154, - -154, -154, -154, -154, -154, -154, -154, -154, 512, 513, - -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, -154, -154, -154, -154, -154, -154, 514, - 515, 516, 517, 518, 519, -154, -154, -154, -154, -154, - -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - 520, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, 521, -154, -154, 522, 523, -154, -154, - -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, 524, 525, 526, -154, -154, -154, -154, -154, - -154, -154, -154 + -192, 0, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, 256, -42, -37, -38, + -35, -41, -44, -136, -104, -191, -177, -1, 2, 3, + 28, 29, 30, 33, 35, 36, 37, 38, 39, 55, + 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, + 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, + 77, 78, 79, 80, 81, 82, 83, 86, 87, 90, + 92, 93, 94, 95, 96, 97, 98, 99, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 138, 139, 140, 142, 143, 144, 145, + 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, + 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, + 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, + 187, 188, 189, 190, 191, 194, 195, 196, 198, 204, + 205, 207, 211, 212, 213, 214, 215, 216, 218, 219, + 220, 221, 222, 223, 224, 226, 227, 228, 229, 230, + 231, 232, 234, 235, 236, 237, 238, 239, 240, 241, + 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 289, 290, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, 291, 292, 296, 297, + 298, 340, 341, -192, -192, -192, -192, -192, -192, -192, + -192, 342, 343, 344, 345, 346, 347, -192, -192, -192, + -192, -192, -192, -192, 348, 352, 356, 357, 382, 383, + 384, -192, -192, -192, -192, -192, -192, -192, -192, 386, + 397, 398, 399, 400, 401, 402, 403, -192, -192, -192, + -192, -192, -192, -192, -192, -192, 404, -192, -192, -192, + -192, 405, 406, 407, 408, 409, 448, 450, 464, -192, + -192, -192, -192, -192, -192, -192, -192, -192, 465, 466, + 467, 468, 469, 470, 471, 472, 473, 474, 481, 482, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, 483, -192, -192, 484, 485, 486, 488, + 489, 490, 491, 492, 493, 494, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, 497, 500, 503, + 504, 513, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, 514, 515, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, 516, 517, 518, -192, -192, -192, + -192, -192, -192, -192, -192, -192, 519, 520, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, 521, 522, 523, + 524, 525, 526, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, 527, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, 528, -192, -192, 529, 530, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, 531, 532, 533, -192, -192, -192, -192, -192, -192, + -192, -192 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. @@ -1428,10 +1435,10 @@ static const yytype_int16 yypact[] = means the default is an error. */ static const yytype_uint16 yydefact[] = { - 2, 0, 1, 14, 206, 216, 458, 504, 477, 225, - 513, 536, 235, 3, 16, 208, 218, 227, 237, 460, - 479, 506, 515, 538, 4, 5, 6, 10, 13, 8, - 9, 7, 11, 12, 0, 0, 0, 0, 0, 0, + 2, 0, 1, 15, 207, 217, 466, 512, 485, 226, + 521, 544, 236, 248, 3, 17, 209, 219, 228, 238, + 250, 468, 487, 514, 523, 546, 4, 5, 6, 10, + 13, 14, 8, 9, 7, 11, 12, 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, @@ -1450,135 +1457,136 @@ static const yytype_uint16 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, 15, 17, 18, 80, 83, 92, 177, - 178, 19, 144, 145, 146, 147, 148, 149, 150, 151, - 152, 153, 31, 71, 20, 84, 85, 42, 64, 79, - 21, 22, 24, 25, 23, 26, 27, 28, 29, 30, - 115, 189, 116, 118, 119, 120, 191, 196, 192, 203, - 204, 205, 173, 81, 70, 96, 113, 114, 201, 198, - 117, 32, 33, 34, 35, 36, 72, 86, 87, 102, - 58, 68, 59, 181, 182, 97, 52, 53, 180, 54, - 55, 106, 110, 124, 133, 158, 202, 107, 65, 37, - 38, 39, 94, 125, 126, 127, 40, 41, 43, 44, - 46, 47, 45, 131, 48, 49, 50, 56, 75, 111, - 89, 132, 82, 154, 90, 91, 108, 109, 199, 95, - 51, 73, 76, 57, 60, 98, 99, 74, 155, 100, - 61, 62, 63, 190, 112, 168, 169, 170, 171, 179, - 101, 69, 103, 104, 105, 156, 66, 67, 88, 77, - 78, 93, 121, 122, 200, 123, 128, 129, 130, 159, - 160, 162, 164, 165, 163, 166, 174, 134, 135, 138, - 139, 136, 137, 140, 141, 143, 142, 193, 195, 194, - 157, 167, 183, 185, 184, 186, 187, 188, 161, 172, - 175, 176, 197, 0, 0, 0, 0, 0, 0, 0, - 207, 209, 210, 211, 213, 214, 215, 212, 0, 0, - 0, 0, 0, 0, 217, 219, 220, 221, 222, 223, - 224, 0, 0, 0, 0, 0, 0, 0, 226, 228, - 229, 232, 233, 230, 234, 231, 0, 0, 0, 0, - 0, 0, 0, 0, 236, 238, 239, 240, 241, 245, - 242, 243, 244, 0, 0, 0, 0, 0, 0, 0, - 0, 459, 461, 463, 462, 468, 464, 465, 466, 467, + 0, 0, 0, 0, 0, 0, 16, 18, 19, 81, + 84, 93, 178, 179, 20, 145, 146, 147, 148, 149, + 150, 151, 152, 153, 154, 32, 72, 21, 85, 86, + 43, 65, 80, 22, 23, 25, 26, 24, 27, 28, + 29, 30, 31, 116, 190, 117, 119, 120, 121, 192, + 197, 193, 204, 205, 206, 174, 82, 71, 97, 114, + 115, 202, 199, 118, 33, 34, 35, 36, 37, 73, + 87, 88, 103, 59, 69, 60, 182, 183, 98, 53, + 54, 181, 55, 56, 107, 111, 125, 134, 159, 203, + 108, 66, 38, 39, 40, 95, 126, 127, 128, 41, + 42, 44, 45, 47, 48, 46, 132, 49, 50, 51, + 57, 76, 112, 90, 133, 83, 155, 91, 92, 109, + 110, 200, 96, 52, 74, 77, 58, 61, 99, 100, + 75, 156, 101, 62, 63, 64, 191, 113, 169, 170, + 171, 172, 180, 102, 70, 104, 105, 106, 157, 67, + 68, 89, 78, 79, 94, 122, 123, 201, 124, 129, + 130, 131, 160, 161, 163, 165, 166, 164, 167, 175, + 135, 136, 139, 140, 137, 138, 141, 142, 144, 143, + 194, 196, 195, 158, 168, 184, 186, 185, 187, 188, + 189, 162, 173, 176, 177, 198, 0, 0, 0, 0, + 0, 0, 0, 208, 210, 211, 212, 214, 215, 216, + 213, 0, 0, 0, 0, 0, 0, 218, 220, 221, + 222, 223, 224, 225, 0, 0, 0, 0, 0, 0, + 0, 227, 229, 230, 233, 234, 231, 235, 232, 0, + 0, 0, 0, 0, 0, 0, 0, 237, 239, 240, + 241, 242, 246, 243, 244, 245, 0, 253, 249, 251, + 252, 0, 0, 0, 0, 0, 0, 0, 0, 467, + 469, 471, 470, 476, 472, 473, 474, 475, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 478, 480, 481, 482, 483, 484, 485, 486, - 487, 488, 489, 490, 491, 0, 505, 507, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 514, 516, - 517, 518, 520, 521, 519, 522, 523, 524, 525, 0, - 0, 0, 0, 0, 537, 539, 540, 541, 542, 543, - 247, 246, 253, 266, 264, 272, 273, 276, 274, 275, - 277, 278, 279, 280, 281, 303, 304, 305, 306, 307, - 331, 332, 333, 338, 339, 269, 340, 341, 344, 342, - 343, 346, 347, 348, 362, 318, 319, 321, 322, 349, - 365, 312, 314, 366, 372, 373, 374, 270, 330, 388, - 389, 313, 383, 296, 265, 308, 363, 369, 350, 0, - 0, 392, 271, 248, 295, 354, 249, 267, 268, 309, - 310, 390, 352, 356, 357, 250, 393, 334, 361, 297, - 317, 367, 368, 371, 382, 311, 386, 384, 385, 323, - 329, 358, 359, 324, 325, 351, 376, 298, 299, 302, - 282, 284, 285, 286, 287, 288, 394, 395, 397, 335, - 336, 337, 345, 398, 399, 400, 0, 0, 0, 353, - 326, 509, 409, 413, 411, 410, 414, 412, 0, 0, - 417, 418, 254, 255, 256, 257, 258, 259, 260, 261, - 262, 263, 355, 370, 387, 422, 423, 327, 401, 0, - 0, 0, 0, 0, 0, 377, 378, 379, 380, 381, - 510, 320, 315, 375, 294, 251, 252, 316, 424, 426, - 425, 427, 428, 429, 283, 290, 419, 421, 420, 289, - 0, 301, 360, 396, 300, 328, 291, 292, 293, 430, - 431, 432, 436, 435, 433, 434, 437, 438, 439, 440, - 442, 441, 451, 0, 455, 456, 0, 0, 457, 443, - 449, 444, 445, 446, 448, 450, 447, 469, 471, 470, - 473, 474, 475, 476, 472, 492, 493, 494, 495, 496, - 497, 498, 499, 500, 501, 502, 503, 508, 526, 527, - 528, 531, 529, 530, 532, 533, 534, 535, 544, 545, - 546, 547, 548, 364, 391, 408, 511, 512, 415, 416, - 402, 403, 0, 0, 0, 407, 549, 452, 453, 454, - 406, 404, 405 + 486, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 0, 513, 515, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 522, 524, 525, 526, + 528, 529, 527, 530, 531, 532, 533, 0, 0, 0, + 0, 0, 545, 547, 548, 549, 550, 551, 255, 254, + 261, 274, 272, 280, 281, 284, 282, 283, 285, 286, + 287, 288, 289, 311, 312, 313, 314, 315, 339, 340, + 341, 346, 347, 277, 348, 349, 352, 350, 351, 354, + 355, 356, 370, 326, 327, 329, 330, 357, 373, 320, + 322, 374, 380, 381, 382, 278, 338, 396, 397, 321, + 391, 304, 273, 316, 371, 377, 358, 0, 0, 400, + 279, 256, 303, 362, 257, 275, 276, 317, 318, 398, + 360, 364, 365, 258, 401, 342, 369, 305, 325, 375, + 376, 379, 390, 319, 394, 392, 393, 331, 337, 366, + 367, 332, 333, 359, 384, 306, 307, 310, 290, 292, + 293, 294, 295, 296, 402, 403, 405, 343, 344, 345, + 353, 406, 407, 408, 0, 0, 0, 361, 334, 517, + 417, 421, 419, 418, 422, 420, 0, 0, 425, 426, + 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, + 363, 378, 395, 430, 431, 335, 409, 0, 0, 0, + 0, 0, 0, 385, 386, 387, 388, 389, 518, 328, + 323, 383, 302, 259, 260, 324, 432, 434, 433, 435, + 436, 437, 291, 298, 427, 429, 428, 297, 0, 309, + 368, 404, 308, 336, 299, 300, 301, 438, 439, 440, + 444, 443, 441, 442, 445, 446, 447, 448, 450, 449, + 459, 0, 463, 464, 0, 0, 465, 451, 457, 452, + 453, 454, 456, 458, 455, 247, 477, 479, 478, 481, + 482, 483, 484, 480, 500, 501, 502, 503, 504, 505, + 506, 507, 508, 509, 510, 511, 516, 534, 535, 536, + 539, 537, 538, 540, 541, 542, 543, 552, 553, 554, + 555, 556, 372, 399, 416, 519, 520, 423, 424, 410, + 411, 0, 0, 0, 415, 557, 460, 461, 462, 414, + 412, 413 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { - -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, - -154, -154, -154, -154, -154, -154 + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -21, + 534, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { - -1, 1, 13, 14, 24, 223, 15, 25, 420, 16, - 26, 434, 17, 27, 448, 18, 28, 464, 224, 225, - 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, - 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, - 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, - 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, - 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, - 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, - 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, - 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, - 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, - 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, - 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, - 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, - 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, - 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, - 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, - 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, - 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, - 406, 407, 421, 422, 423, 424, 425, 426, 427, 435, - 436, 437, 438, 439, 440, 465, 466, 467, 468, 469, - 470, 471, 472, 449, 450, 451, 452, 453, 454, 455, - 19, 29, 481, 482, 483, 484, 485, 486, 487, 488, - 489, 20, 30, 502, 503, 504, 505, 506, 507, 508, - 509, 510, 511, 512, 513, 514, 21, 31, 516, 517, - 408, 409, 410, 411, 22, 32, 528, 529, 530, 531, - 532, 533, 534, 535, 536, 537, 538, 23, 33, 544, - 545, 546, 547, 548, 549, 412 + -1, 1, 14, 15, 26, 226, 16, 27, 423, 17, + 28, 437, 18, 29, 451, 19, 30, 467, 477, 20, + 31, 478, 227, 228, 229, 230, 231, 232, 233, 234, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, + 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, + 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, + 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, + 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 424, 425, 426, 427, + 428, 429, 430, 438, 439, 440, 441, 442, 443, 468, + 469, 470, 471, 472, 473, 474, 475, 452, 453, 454, + 455, 456, 457, 458, 21, 32, 489, 490, 491, 492, + 493, 494, 495, 496, 497, 22, 33, 510, 511, 512, + 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, + 23, 34, 524, 525, 411, 412, 413, 414, 24, 35, + 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, + 546, 25, 36, 552, 553, 554, 555, 556, 557, 415 }; /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If @@ -1586,179 +1594,186 @@ static const yytype_int16 yydefgoto[] = number is the opposite. If YYTABLE_NINF, syntax error. */ static const yytype_uint16 yytable[] = { - 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, - 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, - 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 515, 550, 551, 552, 65, 66, 67, 553, 554, - 555, 68, 69, 70, 71, 72, 73, 74, 75, 76, - 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, - 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, - 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, - 107, 108, 456, 539, 540, 541, 542, 543, 556, 557, - 558, 109, 110, 111, 559, 112, 113, 114, 560, 561, - 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, - 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, - 135, 136, 137, 138, 562, 563, 564, 139, 565, 140, - 141, 142, 143, 144, 145, 146, 147, 148, 149, 566, - 567, 428, 568, 569, 570, 413, 571, 414, 415, 429, - 430, 572, 150, 151, 152, 153, 154, 155, 156, 157, - 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, - 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, - 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, - 573, 188, 574, 189, 190, 191, 192, 193, 194, 195, - 196, 197, 198, 199, 200, 201, 575, 576, 416, 441, - 577, 578, 2, 579, 580, 581, 582, 202, 203, 204, - 205, 206, 207, 3, 583, 584, 585, 586, 587, 208, - 588, 589, 590, 591, 431, 592, 432, 209, 210, 417, - 211, 212, 418, 213, 214, 442, 443, 215, 216, 217, - 218, 219, 220, 221, 222, 593, 4, 594, 595, 596, - 597, 598, 5, 599, 600, 601, 602, 603, 604, 605, - 444, 518, 519, 520, 521, 522, 523, 524, 525, 526, - 527, 457, 606, 458, 459, 460, 461, 462, 607, 608, - 609, 610, 611, 463, 490, 491, 492, 493, 494, 495, - 496, 497, 498, 499, 500, 501, 6, 612, 473, 474, - 475, 476, 477, 478, 479, 480, 613, 614, 615, 616, - 617, 618, 7, 619, 620, 621, 622, 623, 624, 625, - 626, 445, 446, 627, 628, 629, 630, 631, 632, 633, - 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, - 644, 645, 646, 647, 648, 433, 649, 650, 651, 652, - 419, 653, 654, 8, 655, 656, 657, 658, 659, 660, - 447, 661, 662, 663, 664, 665, 666, 667, 668, 669, - 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, - 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, - 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, - 700, 701, 702, 703, 9, 704, 705, 706, 707, 708, - 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, - 10, 719, 720, 721, 722, 723, 724, 725, 726, 727, - 728, 729, 730, 731, 732, 733, 734, 11, 735, 736, - 737, 738, 739, 740, 741, 12, 742, 743, 744, 745, - 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, - 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, - 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, - 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, - 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, - 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, - 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, - 816, 817, 818, 819, 820, 821, 822 -}; - -static const yytype_uint16 yycheck[] = -{ - 12, 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, 111, 10, 10, 10, 47, 48, 49, 10, 10, - 10, 53, 54, 55, 56, 57, 58, 59, 60, 61, - 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 2, 416, 459, 417, 418, 444, 431, 523, 459, 558, + 479, 3, 559, 560, 432, 433, 498, 499, 500, 501, + 502, 503, 504, 505, 506, 507, 508, 509, 526, 527, + 528, 529, 530, 531, 532, 533, 534, 535, 561, 562, + 563, 445, 446, 564, 4, 565, 566, 567, 568, 569, + 5, 481, 482, 483, 484, 485, 486, 487, 488, 547, + 548, 549, 550, 551, 419, 570, 447, 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, 6, 420, 598, 599, 421, 434, + 600, 435, 601, 602, 603, 604, 605, 606, 607, 608, + 7, 609, 610, 611, 612, 613, 614, 615, 616, 617, + 618, 619, 620, 621, 622, 623, 624, 448, 449, 625, + 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, + 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, + 646, 8, 647, 648, 649, 650, 651, 652, 653, 654, + 655, 656, 657, 658, 659, 660, 450, 661, 662, 663, + 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, + 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, + 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, + 694, 695, 9, 461, 696, 697, 698, 460, 699, 461, + 462, 463, 464, 465, 700, 701, 422, 702, 10, 466, + 436, 703, 704, 705, 706, 707, 708, 476, 709, 710, + 711, 712, 713, 714, 715, 11, 716, 717, 718, 719, + 720, 721, 722, 12, 723, 724, 725, 726, 727, 728, + 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, + 739, 740, 741, 742, 743, 744, 0, 13, 37, 38, + 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, + 59, 60, 61, 62, 63, 64, 65, 66, 67, 745, + 746, 747, 748, 68, 69, 70, 749, 750, 751, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, - 92, 93, 43, 236, 237, 238, 239, 240, 10, 10, - 10, 103, 104, 105, 10, 107, 108, 109, 10, 10, - 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, - 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, - 132, 133, 134, 135, 10, 10, 10, 139, 10, 141, - 142, 143, 144, 145, 146, 147, 148, 149, 150, 10, - 10, 43, 10, 10, 10, 43, 10, 45, 46, 51, - 52, 10, 164, 165, 166, 167, 168, 169, 170, 171, - 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, - 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, - 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, - 10, 203, 10, 205, 206, 207, 208, 209, 210, 211, - 212, 213, 214, 215, 216, 217, 10, 10, 106, 43, - 10, 10, 0, 10, 10, 10, 10, 229, 230, 231, - 232, 233, 234, 11, 10, 10, 10, 10, 10, 241, - 10, 10, 10, 10, 136, 10, 138, 249, 250, 137, - 252, 253, 140, 255, 256, 79, 80, 259, 260, 261, - 262, 263, 264, 265, 266, 10, 44, 10, 10, 10, - 10, 10, 50, 10, 10, 10, 10, 10, 10, 10, - 104, 219, 220, 221, 222, 223, 224, 225, 226, 227, - 228, 242, 10, 244, 245, 246, 247, 248, 10, 10, - 10, 10, 10, 254, 152, 153, 154, 155, 156, 157, - 158, 159, 160, 161, 162, 163, 94, 10, 95, 96, - 97, 98, 99, 100, 101, 102, 10, 10, 10, 10, - 10, 10, 110, 10, 10, 10, 10, 10, 10, 10, - 10, 165, 166, 10, 10, 10, 10, 10, 10, 10, + 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, + 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, + 752, 753, 754, 755, 756, 757, 758, 759, 760, 112, + 113, 114, 761, 115, 116, 117, 762, 763, 118, 119, + 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, + 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, + 140, 141, 764, 765, 766, 142, 767, 143, 144, 145, + 146, 147, 148, 149, 150, 151, 152, 768, 769, 770, + 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, + 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, + 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, + 183, 184, 185, 186, 187, 188, 189, 190, 781, 191, + 782, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 783, 784, 785, 786, 787, 788, + 789, 790, 791, 792, 793, 205, 206, 207, 208, 209, + 210, 794, 795, 796, 797, 798, 799, 211, 800, 801, + 802, 803, 804, 805, 806, 212, 213, 807, 214, 215, + 808, 216, 217, 809, 810, 218, 219, 220, 221, 222, + 223, 224, 225, 811, 812, 813, 814, 815, 816, 817, + 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, + 828, 829, 830, 831, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 480 +}; + +static const yytype_int16 yycheck[] = +{ + 0, 43, 43, 45, 46, 43, 43, 111, 43, 10, + 31, 11, 10, 10, 51, 52, 152, 153, 154, 155, + 156, 157, 158, 159, 160, 161, 162, 163, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 10, 10, + 10, 79, 80, 10, 44, 10, 10, 10, 10, 10, + 50, 95, 96, 97, 98, 99, 100, 101, 102, 236, + 237, 238, 239, 240, 106, 10, 104, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 257, 10, 10, 10, 10, - 258, 10, 10, 151, 10, 10, 10, 10, 10, 10, - 204, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 94, 137, 10, 10, 140, 136, + 10, 138, 10, 10, 10, 10, 10, 10, 10, 10, + 110, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 165, 166, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 151, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 204, 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, 202, 10, 10, 10, 10, 10, + 10, 10, 202, 244, 10, 10, 10, 242, 10, 244, + 245, 246, 247, 248, 10, 10, 258, 10, 218, 254, + 257, 10, 10, 10, 10, 10, 10, 268, 10, 10, + 10, 10, 10, 10, 10, 235, 10, 10, 10, 10, + 10, 10, 10, 243, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 218, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 235, 10, 10, - 10, 10, 10, 10, 10, 243, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, -1, 267, 12, 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, 10, + 10, 10, 10, 47, 48, 49, 10, 10, 10, 53, + 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, + 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, + 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 103, + 104, 105, 10, 107, 108, 109, 10, 10, 112, 113, + 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, + 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, + 134, 135, 10, 10, 10, 139, 10, 141, 142, 143, + 144, 145, 146, 147, 148, 149, 150, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, + 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, + 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, + 194, 195, 196, 197, 198, 199, 200, 201, 10, 203, + 10, 205, 206, 207, 208, 209, 210, 211, 212, 213, + 214, 215, 216, 217, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 229, 230, 231, 232, 233, + 234, 10, 10, 10, 10, 10, 10, 241, 10, 10, + 10, 10, 10, 10, 10, 249, 250, 10, 252, 253, + 10, 255, 256, 10, 10, 259, 260, 261, 262, 263, + 264, 265, 266, 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, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10 + 10, 10, 10, 10, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 31 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const yytype_uint16 yystos[] = { - 0, 268, 0, 11, 44, 50, 94, 110, 151, 202, - 218, 235, 243, 269, 270, 273, 276, 279, 282, 497, - 508, 523, 531, 544, 271, 274, 277, 280, 283, 498, - 509, 524, 532, 545, 12, 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, 47, 48, 49, 53, 54, - 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, - 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, - 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, - 85, 86, 87, 88, 89, 90, 91, 92, 93, 103, - 104, 105, 107, 108, 109, 112, 113, 114, 115, 116, - 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, - 127, 128, 129, 130, 131, 132, 133, 134, 135, 139, - 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, - 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, - 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, - 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, - 194, 195, 196, 197, 198, 199, 200, 201, 203, 205, - 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, - 216, 217, 229, 230, 231, 232, 233, 234, 241, 249, - 250, 252, 253, 255, 256, 259, 260, 261, 262, 263, - 264, 265, 266, 272, 285, 286, 287, 288, 289, 290, - 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, - 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, - 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, - 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, - 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, - 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, - 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, - 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, - 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, - 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, - 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, - 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, - 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, - 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, - 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, - 461, 462, 463, 464, 465, 466, 467, 468, 527, 528, - 529, 530, 552, 43, 45, 46, 106, 137, 140, 258, - 275, 469, 470, 471, 472, 473, 474, 475, 43, 51, - 52, 136, 138, 257, 278, 476, 477, 478, 479, 480, - 481, 43, 79, 80, 104, 165, 166, 204, 281, 490, - 491, 492, 493, 494, 495, 496, 43, 242, 244, 245, - 246, 247, 248, 254, 284, 482, 483, 484, 485, 486, - 487, 488, 489, 95, 96, 97, 98, 99, 100, 101, - 102, 499, 500, 501, 502, 503, 504, 505, 506, 507, - 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, - 162, 163, 510, 511, 512, 513, 514, 515, 516, 517, - 518, 519, 520, 521, 522, 111, 525, 526, 219, 220, - 221, 222, 223, 224, 225, 226, 227, 228, 533, 534, - 535, 536, 537, 538, 539, 540, 541, 542, 543, 236, - 237, 238, 239, 240, 546, 547, 548, 549, 550, 551, + 0, 270, 0, 11, 44, 50, 94, 110, 151, 202, + 218, 235, 243, 267, 271, 272, 275, 278, 281, 284, + 288, 503, 514, 529, 537, 550, 273, 276, 279, 282, + 285, 289, 504, 515, 530, 538, 551, 12, 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, 47, 48, + 49, 53, 54, 55, 56, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, + 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, 93, 103, 104, 105, 107, 108, 109, 112, 113, + 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, + 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, + 134, 135, 139, 141, 142, 143, 144, 145, 146, 147, + 148, 149, 150, 164, 165, 166, 167, 168, 169, 170, + 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, + 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, + 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 203, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 229, 230, 231, 232, 233, + 234, 241, 249, 250, 252, 253, 255, 256, 259, 260, + 261, 262, 263, 264, 265, 266, 274, 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, 533, 534, 535, 536, 558, 43, 45, 46, 106, + 137, 140, 258, 277, 475, 476, 477, 478, 479, 480, + 481, 43, 51, 52, 136, 138, 257, 280, 482, 483, + 484, 485, 486, 487, 43, 79, 80, 104, 165, 166, + 204, 283, 496, 497, 498, 499, 500, 501, 502, 43, + 242, 244, 245, 246, 247, 248, 254, 286, 488, 489, + 490, 491, 492, 493, 494, 495, 268, 287, 290, 488, + 489, 95, 96, 97, 98, 99, 100, 101, 102, 505, + 506, 507, 508, 509, 510, 511, 512, 513, 152, 153, + 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, + 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 111, 531, 532, 219, 220, 221, 222, + 223, 224, 225, 226, 227, 228, 539, 540, 541, 542, + 543, 544, 545, 546, 547, 548, 549, 236, 237, 238, + 239, 240, 552, 553, 554, 555, 556, 557, 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, @@ -1786,127 +1801,129 @@ static const yytype_uint16 yystos[] = 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10 + 10, 10 }; /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint16 yyr1[] = { - 0, 267, 268, 268, 269, 269, 269, 269, 269, 269, - 269, 269, 269, 269, 270, 271, 271, 272, 272, 272, - 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, - 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, - 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, - 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, - 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, - 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, - 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, - 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, - 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, - 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, - 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, - 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, - 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, - 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, - 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, - 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, - 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, - 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, - 272, 272, 272, 272, 272, 272, 273, 274, 274, 275, - 275, 275, 275, 275, 275, 275, 276, 277, 277, 278, - 278, 278, 278, 278, 278, 279, 280, 280, 281, 281, - 281, 281, 281, 281, 281, 282, 283, 283, 284, 284, - 284, 284, 284, 284, 284, 284, 285, 286, 287, 288, - 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, - 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, - 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, - 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, - 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, - 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, - 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, - 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, - 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, - 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, - 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, - 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, - 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, - 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, - 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, - 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, - 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, - 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, - 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, - 498, 499, 499, 499, 499, 499, 499, 499, 499, 500, - 501, 502, 503, 504, 505, 506, 507, 508, 509, 509, - 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, - 510, 510, 511, 512, 513, 514, 515, 516, 517, 518, - 519, 520, 521, 522, 523, 524, 524, 525, 526, 527, - 528, 529, 530, 531, 532, 532, 533, 533, 533, 533, - 533, 533, 533, 533, 533, 533, 534, 535, 536, 537, - 538, 539, 540, 541, 542, 543, 544, 545, 545, 546, - 546, 546, 546, 546, 547, 548, 549, 550, 551, 552 + 0, 269, 270, 270, 271, 271, 271, 271, 271, 271, + 271, 271, 271, 271, 271, 272, 273, 273, 274, 274, + 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, + 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, + 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, + 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, + 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, + 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, + 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, + 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, + 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, + 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, + 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, + 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, + 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, + 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, + 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, + 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, + 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, + 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, + 274, 274, 274, 274, 274, 274, 274, 275, 276, 276, + 277, 277, 277, 277, 277, 277, 277, 278, 279, 279, + 280, 280, 280, 280, 280, 280, 281, 282, 282, 283, + 283, 283, 283, 283, 283, 283, 284, 285, 285, 286, + 286, 286, 286, 286, 286, 286, 286, 287, 288, 289, + 289, 290, 290, 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, 504, 505, + 505, 505, 505, 505, 505, 505, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 515, 515, 516, 516, + 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, + 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, + 527, 528, 529, 530, 530, 531, 532, 533, 534, 535, + 536, 537, 538, 538, 539, 539, 539, 539, 539, 539, + 539, 539, 539, 539, 540, 541, 542, 543, 544, 545, + 546, 547, 548, 549, 550, 551, 551, 552, 552, 552, + 552, 552, 553, 554, 555, 556, 557, 558 }; /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ static const yytype_uint8 yyr2[] = { 0, 2, 0, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 1, 2, 0, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 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, 2, 0, + 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, 1, 2, + 0, 1, 1, 1, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 3, 3, 4, 4, 4, 3, 3, 2, 2, 2, + 2, 2, 2, 3, 3, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 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, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 1, 2, 0, 1, 2, 2, 2, 3, + 3, 1, 2, 0, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 0, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 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, 2, 0, 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, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, - 2, 2, 2, 2, 2, 3, 3, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 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, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 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, 2, 2, 2, 2, 2, 3 + 1, 1, 2, 2, 2, 2, 2, 3 }; @@ -2267,7 +2284,6 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, case N: \ yyformat = S; \ break - default: /* Avoid compiler warnings. */ YYCASE_(0, YY_("syntax error")); YYCASE_(1, YY_("syntax error, unexpected %s")); YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s")); @@ -2583,16 +2599,16 @@ yyreduce: YY_REDUCE_PRINT (yyn); switch (yyn) { - case 14: -#line 182 "./util/configparser.y" /* yacc.c:1648 */ + case 15: +#line 182 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(server:)\n")); } -#line 2592 "util/configparser.c" /* yacc.c:1648 */ +#line 2608 "util/configparser.c" /* yacc.c:1646 */ break; - case 206: -#line 273 "./util/configparser.y" /* yacc.c:1648 */ + case 207: +#line 273 "./util/configparser.y" /* yacc.c:1646 */ { struct config_stub* s; OUTYY(("\nP(stub_zone:)\n")); @@ -2603,11 +2619,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 2607 "util/configparser.c" /* yacc.c:1648 */ +#line 2623 "util/configparser.c" /* yacc.c:1646 */ break; - case 216: -#line 290 "./util/configparser.y" /* yacc.c:1648 */ + case 217: +#line 290 "./util/configparser.y" /* yacc.c:1646 */ { struct config_stub* s; OUTYY(("\nP(forward_zone:)\n")); @@ -2618,11 +2634,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 2622 "util/configparser.c" /* yacc.c:1648 */ +#line 2638 "util/configparser.c" /* yacc.c:1646 */ break; - case 225: -#line 307 "./util/configparser.y" /* yacc.c:1648 */ + case 226: +#line 307 "./util/configparser.y" /* yacc.c:1646 */ { struct config_view* s; OUTYY(("\nP(view:)\n")); @@ -2635,11 +2651,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 2639 "util/configparser.c" /* yacc.c:1648 */ +#line 2655 "util/configparser.c" /* yacc.c:1646 */ break; - case 235: -#line 326 "./util/configparser.y" /* yacc.c:1648 */ + case 236: +#line 326 "./util/configparser.y" /* yacc.c:1646 */ { struct config_auth* s; OUTYY(("\nP(auth_zone:)\n")); @@ -2651,14 +2667,55 @@ yyreduce: s->for_downstream = 1; s->for_upstream = 1; s->fallback_enabled = 0; + s->isrpz = 0; } else yyerror("out of memory"); } -#line 2658 "util/configparser.c" /* yacc.c:1648 */ +#line 2675 "util/configparser.c" /* yacc.c:1646 */ break; - case 246: -#line 348 "./util/configparser.y" /* yacc.c:1648 */ + case 247: +#line 350 "./util/configparser.y" /* yacc.c:1646 */ + { + OUTYY(("P(server_local_zone_tag:%s)\n", (yyvsp[0].str))); + size_t len = 0; + uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), + &len); + free((yyvsp[0].str)); + if(!bitlist) { + yyerror("could not parse tags, (define-tag them first)"); + } + if(bitlist) { + cfg_parser->cfg->auths->rpz_taglist = bitlist; + cfg_parser->cfg->auths->rpz_taglistlen = len; + + } + } +#line 2695 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 248: +#line 367 "./util/configparser.y" /* yacc.c:1646 */ + { + struct config_auth* s; + OUTYY(("\nP(rpz:)\n")); + s = (struct config_auth*)calloc(1, sizeof(struct config_auth)); + if(s) { + s->next = cfg_parser->cfg->auths; + cfg_parser->cfg->auths = s; + /* defaults for RPZ auth zone */ + s->for_downstream = 0; + s->for_upstream = 0; + s->fallback_enabled = 0; + s->isrpz = 1; + } else + yyerror("out of memory"); + } +#line 2715 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 254: +#line 388 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_num_threads:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -2666,11 +2723,11 @@ yyreduce: else cfg_parser->cfg->num_threads = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2670 "util/configparser.c" /* yacc.c:1648 */ +#line 2727 "util/configparser.c" /* yacc.c:1646 */ break; - case 247: -#line 357 "./util/configparser.y" /* yacc.c:1648 */ + case 255: +#line 397 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_verbosity:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -2678,11 +2735,11 @@ yyreduce: else cfg_parser->cfg->verbosity = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2682 "util/configparser.c" /* yacc.c:1648 */ +#line 2739 "util/configparser.c" /* yacc.c:1646 */ break; - case 248: -#line 366 "./util/configparser.y" /* yacc.c:1648 */ + case 256: +#line 406 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_statistics_interval:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "") == 0 || strcmp((yyvsp[0].str), "0") == 0) @@ -2692,11 +2749,11 @@ yyreduce: else cfg_parser->cfg->stat_interval = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2696 "util/configparser.c" /* yacc.c:1648 */ +#line 2753 "util/configparser.c" /* yacc.c:1646 */ break; - case 249: -#line 377 "./util/configparser.y" /* yacc.c:1648 */ + case 257: +#line 417 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_statistics_cumulative:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2704,11 +2761,11 @@ yyreduce: else cfg_parser->cfg->stat_cumulative = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2708 "util/configparser.c" /* yacc.c:1648 */ +#line 2765 "util/configparser.c" /* yacc.c:1646 */ break; - case 250: -#line 386 "./util/configparser.y" /* yacc.c:1648 */ + case 258: +#line 426 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_extended_statistics:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2716,11 +2773,11 @@ yyreduce: else cfg_parser->cfg->stat_extended = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2720 "util/configparser.c" /* yacc.c:1648 */ +#line 2777 "util/configparser.c" /* yacc.c:1646 */ break; - case 251: -#line 395 "./util/configparser.y" /* yacc.c:1648 */ + case 259: +#line 435 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_shm_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2728,11 +2785,11 @@ yyreduce: else cfg_parser->cfg->shm_enable = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2732 "util/configparser.c" /* yacc.c:1648 */ +#line 2789 "util/configparser.c" /* yacc.c:1646 */ break; - case 252: -#line 404 "./util/configparser.y" /* yacc.c:1648 */ + case 260: +#line 444 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_shm_key:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "") == 0 || strcmp((yyvsp[0].str), "0") == 0) @@ -2742,11 +2799,11 @@ yyreduce: else cfg_parser->cfg->shm_key = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2746 "util/configparser.c" /* yacc.c:1648 */ +#line 2803 "util/configparser.c" /* yacc.c:1646 */ break; - case 253: -#line 415 "./util/configparser.y" /* yacc.c:1648 */ + case 261: +#line 455 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -2754,11 +2811,11 @@ yyreduce: else cfg_parser->cfg->port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2758 "util/configparser.c" /* yacc.c:1648 */ +#line 2815 "util/configparser.c" /* yacc.c:1646 */ break; - case 254: -#line 424 "./util/configparser.y" /* yacc.c:1648 */ + case 262: +#line 464 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(server_send_client_subnet:%s)\n", (yyvsp[0].str))); @@ -2768,11 +2825,11 @@ yyreduce: OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); #endif } -#line 2772 "util/configparser.c" /* yacc.c:1648 */ +#line 2829 "util/configparser.c" /* yacc.c:1646 */ break; - case 255: -#line 435 "./util/configparser.y" /* yacc.c:1648 */ + case 263: +#line 475 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(server_client_subnet_zone:%s)\n", (yyvsp[0].str))); @@ -2783,11 +2840,11 @@ yyreduce: OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); #endif } -#line 2787 "util/configparser.c" /* yacc.c:1648 */ +#line 2844 "util/configparser.c" /* yacc.c:1646 */ break; - case 256: -#line 448 "./util/configparser.y" /* yacc.c:1648 */ + case 264: +#line 488 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(server_client_subnet_always_forward:%s)\n", (yyvsp[0].str))); @@ -2801,11 +2858,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 2805 "util/configparser.c" /* yacc.c:1648 */ +#line 2862 "util/configparser.c" /* yacc.c:1646 */ break; - case 257: -#line 463 "./util/configparser.y" /* yacc.c:1648 */ + case 265: +#line 503 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(client_subnet_opcode:%s)\n", (yyvsp[0].str))); @@ -2815,11 +2872,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 2819 "util/configparser.c" /* yacc.c:1648 */ +#line 2876 "util/configparser.c" /* yacc.c:1646 */ break; - case 258: -#line 474 "./util/configparser.y" /* yacc.c:1648 */ + case 266: +#line 514 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(max_client_subnet_ipv4:%s)\n", (yyvsp[0].str))); @@ -2835,11 +2892,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 2839 "util/configparser.c" /* yacc.c:1648 */ +#line 2896 "util/configparser.c" /* yacc.c:1646 */ break; - case 259: -#line 491 "./util/configparser.y" /* yacc.c:1648 */ + case 267: +#line 531 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(max_client_subnet_ipv6:%s)\n", (yyvsp[0].str))); @@ -2855,11 +2912,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 2859 "util/configparser.c" /* yacc.c:1648 */ +#line 2916 "util/configparser.c" /* yacc.c:1646 */ break; - case 260: -#line 508 "./util/configparser.y" /* yacc.c:1648 */ + case 268: +#line 548 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(min_client_subnet_ipv4:%s)\n", (yyvsp[0].str))); @@ -2875,11 +2932,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 2879 "util/configparser.c" /* yacc.c:1648 */ +#line 2936 "util/configparser.c" /* yacc.c:1646 */ break; - case 261: -#line 525 "./util/configparser.y" /* yacc.c:1648 */ + case 269: +#line 565 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(min_client_subnet_ipv6:%s)\n", (yyvsp[0].str))); @@ -2895,11 +2952,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 2899 "util/configparser.c" /* yacc.c:1648 */ +#line 2956 "util/configparser.c" /* yacc.c:1646 */ break; - case 262: -#line 542 "./util/configparser.y" /* yacc.c:1648 */ + case 270: +#line 582 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(max_ecs_tree_size_ipv4:%s)\n", (yyvsp[0].str))); @@ -2913,11 +2970,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 2917 "util/configparser.c" /* yacc.c:1648 */ +#line 2974 "util/configparser.c" /* yacc.c:1646 */ break; - case 263: -#line 557 "./util/configparser.y" /* yacc.c:1648 */ + case 271: +#line 597 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(max_ecs_tree_size_ipv6:%s)\n", (yyvsp[0].str))); @@ -2931,11 +2988,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 2935 "util/configparser.c" /* yacc.c:1648 */ +#line 2992 "util/configparser.c" /* yacc.c:1646 */ break; - case 264: -#line 572 "./util/configparser.y" /* yacc.c:1648 */ + case 272: +#line 612 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_interface:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->num_ifs == 0) @@ -2947,11 +3004,11 @@ yyreduce: else cfg_parser->cfg->ifs[cfg_parser->cfg->num_ifs++] = (yyvsp[0].str); } -#line 2951 "util/configparser.c" /* yacc.c:1648 */ +#line 3008 "util/configparser.c" /* yacc.c:1646 */ break; - case 265: -#line 585 "./util/configparser.y" /* yacc.c:1648 */ + case 273: +#line 625 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_interface:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->num_out_ifs == 0) @@ -2965,11 +3022,11 @@ yyreduce: cfg_parser->cfg->out_ifs[ cfg_parser->cfg->num_out_ifs++] = (yyvsp[0].str); } -#line 2969 "util/configparser.c" /* yacc.c:1648 */ +#line 3026 "util/configparser.c" /* yacc.c:1646 */ break; - case 266: -#line 600 "./util/configparser.y" /* yacc.c:1648 */ + case 274: +#line 640 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_range:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -2977,11 +3034,11 @@ yyreduce: else cfg_parser->cfg->outgoing_num_ports = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2981 "util/configparser.c" /* yacc.c:1648 */ +#line 3038 "util/configparser.c" /* yacc.c:1646 */ break; - case 267: -#line 609 "./util/configparser.y" /* yacc.c:1648 */ + case 275: +#line 649 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_port_permit:%s)\n", (yyvsp[0].str))); if(!cfg_mark_ports((yyvsp[0].str), 1, @@ -2989,11 +3046,11 @@ yyreduce: yyerror("port number or range (\"low-high\") expected"); free((yyvsp[0].str)); } -#line 2993 "util/configparser.c" /* yacc.c:1648 */ +#line 3050 "util/configparser.c" /* yacc.c:1646 */ break; - case 268: -#line 618 "./util/configparser.y" /* yacc.c:1648 */ + case 276: +#line 658 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_port_avoid:%s)\n", (yyvsp[0].str))); if(!cfg_mark_ports((yyvsp[0].str), 0, @@ -3001,11 +3058,11 @@ yyreduce: yyerror("port number or range (\"low-high\") expected"); free((yyvsp[0].str)); } -#line 3005 "util/configparser.c" /* yacc.c:1648 */ +#line 3062 "util/configparser.c" /* yacc.c:1646 */ break; - case 269: -#line 627 "./util/configparser.y" /* yacc.c:1648 */ + case 277: +#line 667 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_num_tcp:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3013,11 +3070,11 @@ yyreduce: else cfg_parser->cfg->outgoing_num_tcp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3017 "util/configparser.c" /* yacc.c:1648 */ +#line 3074 "util/configparser.c" /* yacc.c:1646 */ break; - case 270: -#line 636 "./util/configparser.y" /* yacc.c:1648 */ + case 278: +#line 676 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_incoming_num_tcp:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3025,11 +3082,11 @@ yyreduce: else cfg_parser->cfg->incoming_num_tcp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3029 "util/configparser.c" /* yacc.c:1648 */ +#line 3086 "util/configparser.c" /* yacc.c:1646 */ break; - case 271: -#line 645 "./util/configparser.y" /* yacc.c:1648 */ + case 279: +#line 685 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_interface_automatic:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3037,11 +3094,11 @@ yyreduce: else cfg_parser->cfg->if_automatic = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3041 "util/configparser.c" /* yacc.c:1648 */ +#line 3098 "util/configparser.c" /* yacc.c:1646 */ break; - case 272: -#line 654 "./util/configparser.y" /* yacc.c:1648 */ + case 280: +#line 694 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_ip4:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3049,11 +3106,11 @@ yyreduce: else cfg_parser->cfg->do_ip4 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3053 "util/configparser.c" /* yacc.c:1648 */ +#line 3110 "util/configparser.c" /* yacc.c:1646 */ break; - case 273: -#line 663 "./util/configparser.y" /* yacc.c:1648 */ + case 281: +#line 703 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_ip6:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3061,11 +3118,11 @@ yyreduce: else cfg_parser->cfg->do_ip6 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3065 "util/configparser.c" /* yacc.c:1648 */ +#line 3122 "util/configparser.c" /* yacc.c:1646 */ break; - case 274: -#line 672 "./util/configparser.y" /* yacc.c:1648 */ + case 282: +#line 712 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_udp:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3073,11 +3130,11 @@ yyreduce: else cfg_parser->cfg->do_udp = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3077 "util/configparser.c" /* yacc.c:1648 */ +#line 3134 "util/configparser.c" /* yacc.c:1646 */ break; - case 275: -#line 681 "./util/configparser.y" /* yacc.c:1648 */ + case 283: +#line 721 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_tcp:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3085,11 +3142,11 @@ yyreduce: else cfg_parser->cfg->do_tcp = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3089 "util/configparser.c" /* yacc.c:1648 */ +#line 3146 "util/configparser.c" /* yacc.c:1646 */ break; - case 276: -#line 690 "./util/configparser.y" /* yacc.c:1648 */ + case 284: +#line 730 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_prefer_ip6:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3097,11 +3154,11 @@ yyreduce: else cfg_parser->cfg->prefer_ip6 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3101 "util/configparser.c" /* yacc.c:1648 */ +#line 3158 "util/configparser.c" /* yacc.c:1646 */ break; - case 277: -#line 699 "./util/configparser.y" /* yacc.c:1648 */ + case 285: +#line 739 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tcp_mss:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3109,11 +3166,11 @@ yyreduce: else cfg_parser->cfg->tcp_mss = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3113 "util/configparser.c" /* yacc.c:1648 */ +#line 3170 "util/configparser.c" /* yacc.c:1646 */ break; - case 278: -#line 708 "./util/configparser.y" /* yacc.c:1648 */ + case 286: +#line 748 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_tcp_mss:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3121,11 +3178,11 @@ yyreduce: else cfg_parser->cfg->outgoing_tcp_mss = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3125 "util/configparser.c" /* yacc.c:1648 */ +#line 3182 "util/configparser.c" /* yacc.c:1646 */ break; - case 279: -#line 717 "./util/configparser.y" /* yacc.c:1648 */ + case 287: +#line 757 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tcp_idle_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3137,11 +3194,11 @@ yyreduce: else cfg_parser->cfg->tcp_idle_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3141 "util/configparser.c" /* yacc.c:1648 */ +#line 3198 "util/configparser.c" /* yacc.c:1646 */ break; - case 280: -#line 730 "./util/configparser.y" /* yacc.c:1648 */ + case 288: +#line 770 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tcp_keepalive:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3149,11 +3206,11 @@ yyreduce: else cfg_parser->cfg->do_tcp_keepalive = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3153 "util/configparser.c" /* yacc.c:1648 */ +#line 3210 "util/configparser.c" /* yacc.c:1646 */ break; - case 281: -#line 739 "./util/configparser.y" /* yacc.c:1648 */ + case 289: +#line 779 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tcp_keepalive_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3165,11 +3222,11 @@ yyreduce: else cfg_parser->cfg->tcp_keepalive_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3169 "util/configparser.c" /* yacc.c:1648 */ +#line 3226 "util/configparser.c" /* yacc.c:1646 */ break; - case 282: -#line 752 "./util/configparser.y" /* yacc.c:1648 */ + case 290: +#line 792 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tcp_upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3177,11 +3234,11 @@ yyreduce: else cfg_parser->cfg->tcp_upstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3181 "util/configparser.c" /* yacc.c:1648 */ +#line 3238 "util/configparser.c" /* yacc.c:1646 */ break; - case 283: -#line 761 "./util/configparser.y" /* yacc.c:1648 */ + case 291: +#line 801 "./util/configparser.y" /* yacc.c:1646 */ { 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) @@ -3189,11 +3246,11 @@ yyreduce: else cfg_parser->cfg->udp_upstream_without_downstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3193 "util/configparser.c" /* yacc.c:1648 */ +#line 3250 "util/configparser.c" /* yacc.c:1646 */ break; - case 284: -#line 770 "./util/configparser.y" /* yacc.c:1648 */ + case 292: +#line 810 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ssl_upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3201,31 +3258,31 @@ yyreduce: else cfg_parser->cfg->ssl_upstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3205 "util/configparser.c" /* yacc.c:1648 */ +#line 3262 "util/configparser.c" /* yacc.c:1646 */ break; - case 285: -#line 779 "./util/configparser.y" /* yacc.c:1648 */ + case 293: +#line 819 "./util/configparser.y" /* yacc.c:1646 */ { 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 3215 "util/configparser.c" /* yacc.c:1648 */ +#line 3272 "util/configparser.c" /* yacc.c:1646 */ break; - case 286: -#line 786 "./util/configparser.y" /* yacc.c:1648 */ + case 294: +#line 826 "./util/configparser.y" /* yacc.c:1646 */ { 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 3225 "util/configparser.c" /* yacc.c:1648 */ +#line 3282 "util/configparser.c" /* yacc.c:1646 */ break; - case 287: -#line 793 "./util/configparser.y" /* yacc.c:1648 */ + case 295: +#line 833 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ssl_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3233,21 +3290,21 @@ yyreduce: else cfg_parser->cfg->ssl_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3237 "util/configparser.c" /* yacc.c:1648 */ +#line 3294 "util/configparser.c" /* yacc.c:1646 */ break; - case 288: -#line 802 "./util/configparser.y" /* yacc.c:1648 */ + case 296: +#line 842 "./util/configparser.y" /* yacc.c:1646 */ { 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 3247 "util/configparser.c" /* yacc.c:1648 */ +#line 3304 "util/configparser.c" /* yacc.c:1646 */ break; - case 289: -#line 809 "./util/configparser.y" /* yacc.c:1648 */ + case 297: +#line 849 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tls_win_cert:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3255,53 +3312,53 @@ yyreduce: else cfg_parser->cfg->tls_win_cert = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3259 "util/configparser.c" /* yacc.c:1648 */ +#line 3316 "util/configparser.c" /* yacc.c:1646 */ break; - case 290: -#line 818 "./util/configparser.y" /* yacc.c:1648 */ + case 298: +#line 858 "./util/configparser.y" /* yacc.c:1646 */ { 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 3270 "util/configparser.c" /* yacc.c:1648 */ +#line 3327 "util/configparser.c" /* yacc.c:1646 */ break; - case 291: -#line 826 "./util/configparser.y" /* yacc.c:1648 */ + case 299: +#line 866 "./util/configparser.y" /* yacc.c:1646 */ { 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 3280 "util/configparser.c" /* yacc.c:1648 */ +#line 3337 "util/configparser.c" /* yacc.c:1646 */ break; - case 292: -#line 833 "./util/configparser.y" /* yacc.c:1648 */ + case 300: +#line 873 "./util/configparser.y" /* yacc.c:1646 */ { 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 3290 "util/configparser.c" /* yacc.c:1648 */ +#line 3347 "util/configparser.c" /* yacc.c:1646 */ break; - case 293: -#line 840 "./util/configparser.y" /* yacc.c:1648 */ + case 301: +#line 880 "./util/configparser.y" /* yacc.c:1646 */ { 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 3301 "util/configparser.c" /* yacc.c:1648 */ +#line 3358 "util/configparser.c" /* yacc.c:1646 */ break; - case 294: -#line 848 "./util/configparser.y" /* yacc.c:1648 */ + case 302: +#line 888 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_use_systemd:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3309,11 +3366,11 @@ yyreduce: else cfg_parser->cfg->use_systemd = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3313 "util/configparser.c" /* yacc.c:1648 */ +#line 3370 "util/configparser.c" /* yacc.c:1646 */ break; - case 295: -#line 857 "./util/configparser.y" /* yacc.c:1648 */ + case 303: +#line 897 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_daemonize:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3321,11 +3378,11 @@ yyreduce: else cfg_parser->cfg->do_daemonize = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3325 "util/configparser.c" /* yacc.c:1648 */ +#line 3382 "util/configparser.c" /* yacc.c:1646 */ break; - case 296: -#line 866 "./util/configparser.y" /* yacc.c:1648 */ + case 304: +#line 906 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_use_syslog:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3338,11 +3395,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3342 "util/configparser.c" /* yacc.c:1648 */ +#line 3399 "util/configparser.c" /* yacc.c:1646 */ break; - case 297: -#line 880 "./util/configparser.y" /* yacc.c:1648 */ + case 305: +#line 920 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_time_ascii:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3350,11 +3407,11 @@ yyreduce: else cfg_parser->cfg->log_time_ascii = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3354 "util/configparser.c" /* yacc.c:1648 */ +#line 3411 "util/configparser.c" /* yacc.c:1646 */ break; - case 298: -#line 889 "./util/configparser.y" /* yacc.c:1648 */ + case 306: +#line 929 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_queries:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3362,11 +3419,11 @@ yyreduce: else cfg_parser->cfg->log_queries = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3366 "util/configparser.c" /* yacc.c:1648 */ +#line 3423 "util/configparser.c" /* yacc.c:1646 */ break; - case 299: -#line 898 "./util/configparser.y" /* yacc.c:1648 */ + case 307: +#line 938 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_replies:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3374,11 +3431,11 @@ yyreduce: else cfg_parser->cfg->log_replies = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3378 "util/configparser.c" /* yacc.c:1648 */ +#line 3435 "util/configparser.c" /* yacc.c:1646 */ break; - case 300: -#line 907 "./util/configparser.y" /* yacc.c:1648 */ + case 308: +#line 947 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_tag_queryreply:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3386,11 +3443,11 @@ yyreduce: else cfg_parser->cfg->log_tag_queryreply = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3390 "util/configparser.c" /* yacc.c:1648 */ +#line 3447 "util/configparser.c" /* yacc.c:1646 */ break; - case 301: -#line 916 "./util/configparser.y" /* yacc.c:1648 */ + case 309: +#line 956 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_servfail:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3398,11 +3455,11 @@ yyreduce: else cfg_parser->cfg->log_servfail = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3402 "util/configparser.c" /* yacc.c:1648 */ +#line 3459 "util/configparser.c" /* yacc.c:1646 */ break; - case 302: -#line 925 "./util/configparser.y" /* yacc.c:1648 */ + case 310: +#line 965 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_local_actions:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3410,31 +3467,31 @@ yyreduce: else cfg_parser->cfg->log_local_actions = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3414 "util/configparser.c" /* yacc.c:1648 */ +#line 3471 "util/configparser.c" /* yacc.c:1646 */ break; - case 303: -#line 934 "./util/configparser.y" /* yacc.c:1648 */ + case 311: +#line 974 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_chroot:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->chrootdir); cfg_parser->cfg->chrootdir = (yyvsp[0].str); } -#line 3424 "util/configparser.c" /* yacc.c:1648 */ +#line 3481 "util/configparser.c" /* yacc.c:1646 */ break; - case 304: -#line 941 "./util/configparser.y" /* yacc.c:1648 */ + case 312: +#line 981 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_username:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->username); cfg_parser->cfg->username = (yyvsp[0].str); } -#line 3434 "util/configparser.c" /* yacc.c:1648 */ +#line 3491 "util/configparser.c" /* yacc.c:1646 */ break; - case 305: -#line 948 "./util/configparser.y" /* yacc.c:1648 */ + case 313: +#line 988 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_directory:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->directory); @@ -3459,105 +3516,105 @@ yyreduce: } } } -#line 3463 "util/configparser.c" /* yacc.c:1648 */ +#line 3520 "util/configparser.c" /* yacc.c:1646 */ break; - case 306: -#line 974 "./util/configparser.y" /* yacc.c:1648 */ + case 314: +#line 1014 "./util/configparser.y" /* yacc.c:1646 */ { 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 3474 "util/configparser.c" /* yacc.c:1648 */ +#line 3531 "util/configparser.c" /* yacc.c:1646 */ break; - case 307: -#line 982 "./util/configparser.y" /* yacc.c:1648 */ + case 315: +#line 1022 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_pidfile:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->pidfile); cfg_parser->cfg->pidfile = (yyvsp[0].str); } -#line 3484 "util/configparser.c" /* yacc.c:1648 */ +#line 3541 "util/configparser.c" /* yacc.c:1646 */ break; - case 308: -#line 989 "./util/configparser.y" /* yacc.c:1648 */ + case 316: +#line 1029 "./util/configparser.y" /* yacc.c:1646 */ { 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 3494 "util/configparser.c" /* yacc.c:1648 */ +#line 3551 "util/configparser.c" /* yacc.c:1646 */ break; - case 309: -#line 996 "./util/configparser.y" /* yacc.c:1648 */ + case 317: +#line 1036 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_dlv_anchor_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dlv_anchor_file); cfg_parser->cfg->dlv_anchor_file = (yyvsp[0].str); } -#line 3504 "util/configparser.c" /* yacc.c:1648 */ +#line 3561 "util/configparser.c" /* yacc.c:1646 */ break; - case 310: -#line 1003 "./util/configparser.y" /* yacc.c:1648 */ + case 318: +#line 1043 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_dlv_anchor:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->dlv_anchor_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3514 "util/configparser.c" /* yacc.c:1648 */ +#line 3571 "util/configparser.c" /* yacc.c:1646 */ break; - case 311: -#line 1010 "./util/configparser.y" /* yacc.c:1648 */ + case 319: +#line 1050 "./util/configparser.y" /* yacc.c:1646 */ { 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 3525 "util/configparser.c" /* yacc.c:1648 */ +#line 3582 "util/configparser.c" /* yacc.c:1646 */ break; - case 312: -#line 1018 "./util/configparser.y" /* yacc.c:1648 */ + case 320: +#line 1058 "./util/configparser.y" /* yacc.c:1646 */ { 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 3536 "util/configparser.c" /* yacc.c:1648 */ +#line 3593 "util/configparser.c" /* yacc.c:1646 */ break; - case 313: -#line 1026 "./util/configparser.y" /* yacc.c:1648 */ + case 321: +#line 1066 "./util/configparser.y" /* yacc.c:1646 */ { 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 3547 "util/configparser.c" /* yacc.c:1648 */ +#line 3604 "util/configparser.c" /* yacc.c:1646 */ break; - case 314: -#line 1034 "./util/configparser.y" /* yacc.c:1648 */ + case 322: +#line 1074 "./util/configparser.y" /* yacc.c:1646 */ { 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 3557 "util/configparser.c" /* yacc.c:1648 */ +#line 3614 "util/configparser.c" /* yacc.c:1646 */ break; - case 315: -#line 1041 "./util/configparser.y" /* yacc.c:1648 */ + case 323: +#line 1081 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_trust_anchor_signaling:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3567,11 +3624,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3571 "util/configparser.c" /* yacc.c:1648 */ +#line 3628 "util/configparser.c" /* yacc.c:1646 */ break; - case 316: -#line 1052 "./util/configparser.y" /* yacc.c:1648 */ + case 324: +#line 1092 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_root_key_sentinel:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3581,21 +3638,21 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3585 "util/configparser.c" /* yacc.c:1648 */ +#line 3642 "util/configparser.c" /* yacc.c:1646 */ break; - case 317: -#line 1063 "./util/configparser.y" /* yacc.c:1648 */ + case 325: +#line 1103 "./util/configparser.y" /* yacc.c:1646 */ { 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 3595 "util/configparser.c" /* yacc.c:1648 */ +#line 3652 "util/configparser.c" /* yacc.c:1646 */ break; - case 318: -#line 1070 "./util/configparser.y" /* yacc.c:1648 */ + case 326: +#line 1110 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_hide_identity:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3603,11 +3660,11 @@ yyreduce: else cfg_parser->cfg->hide_identity = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3607 "util/configparser.c" /* yacc.c:1648 */ +#line 3664 "util/configparser.c" /* yacc.c:1646 */ break; - case 319: -#line 1079 "./util/configparser.y" /* yacc.c:1648 */ + case 327: +#line 1119 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_hide_version:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3615,11 +3672,11 @@ yyreduce: else cfg_parser->cfg->hide_version = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3619 "util/configparser.c" /* yacc.c:1648 */ +#line 3676 "util/configparser.c" /* yacc.c:1646 */ break; - case 320: -#line 1088 "./util/configparser.y" /* yacc.c:1648 */ + case 328: +#line 1128 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_hide_trustanchor:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3627,53 +3684,53 @@ yyreduce: else cfg_parser->cfg->hide_trustanchor = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3631 "util/configparser.c" /* yacc.c:1648 */ +#line 3688 "util/configparser.c" /* yacc.c:1646 */ break; - case 321: -#line 1097 "./util/configparser.y" /* yacc.c:1648 */ + case 329: +#line 1137 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_identity:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->identity); cfg_parser->cfg->identity = (yyvsp[0].str); } -#line 3641 "util/configparser.c" /* yacc.c:1648 */ +#line 3698 "util/configparser.c" /* yacc.c:1646 */ break; - case 322: -#line 1104 "./util/configparser.y" /* yacc.c:1648 */ + case 330: +#line 1144 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_version:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->version); cfg_parser->cfg->version = (yyvsp[0].str); } -#line 3651 "util/configparser.c" /* yacc.c:1648 */ +#line 3708 "util/configparser.c" /* yacc.c:1646 */ break; - case 323: -#line 1111 "./util/configparser.y" /* yacc.c:1648 */ + case 331: +#line 1151 "./util/configparser.y" /* yacc.c:1646 */ { 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 3662 "util/configparser.c" /* yacc.c:1648 */ +#line 3719 "util/configparser.c" /* yacc.c:1646 */ break; - case 324: -#line 1119 "./util/configparser.y" /* yacc.c:1648 */ + case 332: +#line 1159 "./util/configparser.y" /* yacc.c:1646 */ { 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 3673 "util/configparser.c" /* yacc.c:1648 */ +#line 3730 "util/configparser.c" /* yacc.c:1646 */ break; - case 325: -#line 1127 "./util/configparser.y" /* yacc.c:1648 */ + case 333: +#line 1167 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_so_reuseport:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3682,11 +3739,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3686 "util/configparser.c" /* yacc.c:1648 */ +#line 3743 "util/configparser.c" /* yacc.c:1646 */ break; - case 326: -#line 1137 "./util/configparser.y" /* yacc.c:1648 */ + case 334: +#line 1177 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_transparent:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3695,11 +3752,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3699 "util/configparser.c" /* yacc.c:1648 */ +#line 3756 "util/configparser.c" /* yacc.c:1646 */ break; - case 327: -#line 1147 "./util/configparser.y" /* yacc.c:1648 */ + case 335: +#line 1187 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_freebind:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3708,22 +3765,22 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3712 "util/configparser.c" /* yacc.c:1648 */ +#line 3769 "util/configparser.c" /* yacc.c:1646 */ break; - case 328: -#line 1157 "./util/configparser.y" /* yacc.c:1648 */ + case 336: +#line 1197 "./util/configparser.y" /* yacc.c:1646 */ { 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 3723 "util/configparser.c" /* yacc.c:1648 */ +#line 3780 "util/configparser.c" /* yacc.c:1646 */ break; - case 329: -#line 1165 "./util/configparser.y" /* yacc.c:1648 */ + case 337: +#line 1205 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_edns_buffer_size:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3735,11 +3792,11 @@ yyreduce: else cfg_parser->cfg->edns_buffer_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3739 "util/configparser.c" /* yacc.c:1648 */ +#line 3796 "util/configparser.c" /* yacc.c:1646 */ break; - case 330: -#line 1178 "./util/configparser.y" /* yacc.c:1648 */ + case 338: +#line 1218 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_msg_buffer_size:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3749,22 +3806,22 @@ yyreduce: else cfg_parser->cfg->msg_buffer_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3753 "util/configparser.c" /* yacc.c:1648 */ +#line 3810 "util/configparser.c" /* yacc.c:1646 */ break; - case 331: -#line 1189 "./util/configparser.y" /* yacc.c:1648 */ + case 339: +#line 1229 "./util/configparser.y" /* yacc.c:1646 */ { 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 3764 "util/configparser.c" /* yacc.c:1648 */ +#line 3821 "util/configparser.c" /* yacc.c:1646 */ break; - case 332: -#line 1197 "./util/configparser.y" /* yacc.c:1648 */ + case 340: +#line 1237 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_msg_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3776,11 +3833,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 3780 "util/configparser.c" /* yacc.c:1648 */ +#line 3837 "util/configparser.c" /* yacc.c:1646 */ break; - case 333: -#line 1210 "./util/configparser.y" /* yacc.c:1648 */ + case 341: +#line 1250 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_num_queries_per_thread:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3788,11 +3845,11 @@ yyreduce: else cfg_parser->cfg->num_queries_per_thread = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3792 "util/configparser.c" /* yacc.c:1648 */ +#line 3849 "util/configparser.c" /* yacc.c:1646 */ break; - case 334: -#line 1219 "./util/configparser.y" /* yacc.c:1648 */ + case 342: +#line 1259 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_jostle_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3800,11 +3857,11 @@ yyreduce: else cfg_parser->cfg->jostle_time = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3804 "util/configparser.c" /* yacc.c:1648 */ +#line 3861 "util/configparser.c" /* yacc.c:1646 */ break; - case 335: -#line 1228 "./util/configparser.y" /* yacc.c:1648 */ + case 343: +#line 1268 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_delay_close:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3812,11 +3869,11 @@ yyreduce: else cfg_parser->cfg->delay_close = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3816 "util/configparser.c" /* yacc.c:1648 */ +#line 3873 "util/configparser.c" /* yacc.c:1646 */ break; - case 336: -#line 1237 "./util/configparser.y" /* yacc.c:1648 */ + case 344: +#line 1277 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_unblock_lan_zones:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3825,11 +3882,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3829 "util/configparser.c" /* yacc.c:1648 */ +#line 3886 "util/configparser.c" /* yacc.c:1646 */ break; - case 337: -#line 1247 "./util/configparser.y" /* yacc.c:1648 */ + case 345: +#line 1287 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_insecure_lan_zones:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3838,22 +3895,22 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3842 "util/configparser.c" /* yacc.c:1648 */ +#line 3899 "util/configparser.c" /* yacc.c:1646 */ break; - case 338: -#line 1257 "./util/configparser.y" /* yacc.c:1648 */ + case 346: +#line 1297 "./util/configparser.y" /* yacc.c:1646 */ { 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 3853 "util/configparser.c" /* yacc.c:1648 */ +#line 3910 "util/configparser.c" /* yacc.c:1646 */ break; - case 339: -#line 1265 "./util/configparser.y" /* yacc.c:1648 */ + case 347: +#line 1305 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_rrset_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3865,11 +3922,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 3869 "util/configparser.c" /* yacc.c:1648 */ +#line 3926 "util/configparser.c" /* yacc.c:1646 */ break; - case 340: -#line 1278 "./util/configparser.y" /* yacc.c:1648 */ + case 348: +#line 1318 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_host_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3877,22 +3934,22 @@ yyreduce: else cfg_parser->cfg->host_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3881 "util/configparser.c" /* yacc.c:1648 */ +#line 3938 "util/configparser.c" /* yacc.c:1646 */ break; - case 341: -#line 1287 "./util/configparser.y" /* yacc.c:1648 */ + case 349: +#line 1327 "./util/configparser.y" /* yacc.c:1646 */ { 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 3892 "util/configparser.c" /* yacc.c:1648 */ +#line 3949 "util/configparser.c" /* yacc.c:1646 */ break; - case 342: -#line 1295 "./util/configparser.y" /* yacc.c:1648 */ + case 350: +#line 1335 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_cache_numhosts:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3900,22 +3957,22 @@ yyreduce: else cfg_parser->cfg->infra_cache_numhosts = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3904 "util/configparser.c" /* yacc.c:1648 */ +#line 3961 "util/configparser.c" /* yacc.c:1646 */ break; - case 343: -#line 1304 "./util/configparser.y" /* yacc.c:1648 */ + case 351: +#line 1344 "./util/configparser.y" /* yacc.c:1646 */ { 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 3915 "util/configparser.c" /* yacc.c:1648 */ +#line 3972 "util/configparser.c" /* yacc.c:1646 */ break; - case 344: -#line 1312 "./util/configparser.y" /* yacc.c:1648 */ + case 352: +#line 1352 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3927,11 +3984,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 3931 "util/configparser.c" /* yacc.c:1648 */ +#line 3988 "util/configparser.c" /* yacc.c:1646 */ break; - case 345: -#line 1325 "./util/configparser.y" /* yacc.c:1648 */ + case 353: +#line 1365 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_cache_min_rtt:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3939,21 +3996,21 @@ yyreduce: else cfg_parser->cfg->infra_cache_min_rtt = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3943 "util/configparser.c" /* yacc.c:1648 */ +#line 4000 "util/configparser.c" /* yacc.c:1646 */ break; - case 346: -#line 1334 "./util/configparser.y" /* yacc.c:1648 */ + case 354: +#line 1374 "./util/configparser.y" /* yacc.c:1646 */ { 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 3953 "util/configparser.c" /* yacc.c:1648 */ +#line 4010 "util/configparser.c" /* yacc.c:1646 */ break; - case 347: -#line 1341 "./util/configparser.y" /* yacc.c:1648 */ + case 355: +#line 1381 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_short_bufsize:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3962,11 +4019,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3966 "util/configparser.c" /* yacc.c:1648 */ +#line 4023 "util/configparser.c" /* yacc.c:1646 */ break; - case 348: -#line 1351 "./util/configparser.y" /* yacc.c:1648 */ + case 356: +#line 1391 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_large_queries:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3975,11 +4032,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3979 "util/configparser.c" /* yacc.c:1648 */ +#line 4036 "util/configparser.c" /* yacc.c:1646 */ break; - case 349: -#line 1361 "./util/configparser.y" /* yacc.c:1648 */ + case 357: +#line 1401 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_glue:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3988,11 +4045,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3992 "util/configparser.c" /* yacc.c:1648 */ +#line 4049 "util/configparser.c" /* yacc.c:1646 */ break; - case 350: -#line 1371 "./util/configparser.y" /* yacc.c:1648 */ + case 358: +#line 1411 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_dnssec_stripped:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4001,11 +4058,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4005 "util/configparser.c" /* yacc.c:1648 */ +#line 4062 "util/configparser.c" /* yacc.c:1646 */ break; - case 351: -#line 1381 "./util/configparser.y" /* yacc.c:1648 */ + case 359: +#line 1421 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_below_nxdomain:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4014,11 +4071,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4018 "util/configparser.c" /* yacc.c:1648 */ +#line 4075 "util/configparser.c" /* yacc.c:1646 */ break; - case 352: -#line 1391 "./util/configparser.y" /* yacc.c:1648 */ + case 360: +#line 1431 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_referral_path:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4027,11 +4084,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4031 "util/configparser.c" /* yacc.c:1648 */ +#line 4088 "util/configparser.c" /* yacc.c:1646 */ break; - case 353: -#line 1401 "./util/configparser.y" /* yacc.c:1648 */ + case 361: +#line 1441 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_algo_downgrade:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4040,11 +4097,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4044 "util/configparser.c" /* yacc.c:1648 */ +#line 4101 "util/configparser.c" /* yacc.c:1646 */ break; - case 354: -#line 1411 "./util/configparser.y" /* yacc.c:1648 */ + case 362: +#line 1451 "./util/configparser.y" /* yacc.c:1646 */ { 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) @@ -4053,41 +4110,41 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4057 "util/configparser.c" /* yacc.c:1648 */ +#line 4114 "util/configparser.c" /* yacc.c:1646 */ break; - case 355: -#line 1421 "./util/configparser.y" /* yacc.c:1648 */ + case 363: +#line 1461 "./util/configparser.y" /* yacc.c:1646 */ { 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 4067 "util/configparser.c" /* yacc.c:1648 */ +#line 4124 "util/configparser.c" /* yacc.c:1646 */ break; - case 356: -#line 1428 "./util/configparser.y" /* yacc.c:1648 */ + case 364: +#line 1468 "./util/configparser.y" /* yacc.c:1646 */ { 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 4077 "util/configparser.c" /* yacc.c:1648 */ +#line 4134 "util/configparser.c" /* yacc.c:1646 */ break; - case 357: -#line 1435 "./util/configparser.y" /* yacc.c:1648 */ + case 365: +#line 1475 "./util/configparser.y" /* yacc.c:1646 */ { 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 4087 "util/configparser.c" /* yacc.c:1648 */ +#line 4144 "util/configparser.c" /* yacc.c:1646 */ break; - case 358: -#line 1442 "./util/configparser.y" /* yacc.c:1648 */ + case 366: +#line 1482 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_prefetch:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4095,11 +4152,11 @@ yyreduce: else cfg_parser->cfg->prefetch = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4099 "util/configparser.c" /* yacc.c:1648 */ +#line 4156 "util/configparser.c" /* yacc.c:1646 */ break; - case 359: -#line 1451 "./util/configparser.y" /* yacc.c:1648 */ + case 367: +#line 1491 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_prefetch_key:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4107,11 +4164,11 @@ yyreduce: else cfg_parser->cfg->prefetch_key = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4111 "util/configparser.c" /* yacc.c:1648 */ +#line 4168 "util/configparser.c" /* yacc.c:1646 */ break; - case 360: -#line 1460 "./util/configparser.y" /* yacc.c:1648 */ + case 368: +#line 1500 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_deny_any:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4119,11 +4176,11 @@ yyreduce: else cfg_parser->cfg->deny_any = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4123 "util/configparser.c" /* yacc.c:1648 */ +#line 4180 "util/configparser.c" /* yacc.c:1646 */ break; - case 361: -#line 1469 "./util/configparser.y" /* yacc.c:1648 */ + case 369: +#line 1509 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_unwanted_reply_threshold:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4131,21 +4188,21 @@ yyreduce: else cfg_parser->cfg->unwanted_threshold = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4135 "util/configparser.c" /* yacc.c:1648 */ +#line 4192 "util/configparser.c" /* yacc.c:1646 */ break; - case 362: -#line 1478 "./util/configparser.y" /* yacc.c:1648 */ + case 370: +#line 1518 "./util/configparser.y" /* yacc.c:1646 */ { 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 4145 "util/configparser.c" /* yacc.c:1648 */ +#line 4202 "util/configparser.c" /* yacc.c:1646 */ break; - case 363: -#line 1485 "./util/configparser.y" /* yacc.c:1648 */ + case 371: +#line 1525 "./util/configparser.y" /* yacc.c:1646 */ { 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) @@ -4154,11 +4211,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4158 "util/configparser.c" /* yacc.c:1648 */ +#line 4215 "util/configparser.c" /* yacc.c:1646 */ break; - case 364: -#line 1495 "./util/configparser.y" /* yacc.c:1648 */ + case 372: +#line 1535 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_access_control:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "deny")!=0 && strcmp((yyvsp[0].str), "refuse")!=0 && @@ -4177,21 +4234,21 @@ yyreduce: fatal_exit("out of memory adding acl"); } } -#line 4181 "util/configparser.c" /* yacc.c:1648 */ +#line 4238 "util/configparser.c" /* yacc.c:1646 */ break; - case 365: -#line 1515 "./util/configparser.y" /* yacc.c:1648 */ + case 373: +#line 1555 "./util/configparser.y" /* yacc.c:1646 */ { 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 4191 "util/configparser.c" /* yacc.c:1648 */ +#line 4248 "util/configparser.c" /* yacc.c:1646 */ break; - case 366: -#line 1522 "./util/configparser.y" /* yacc.c:1648 */ + case 374: +#line 1562 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_override_date:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { @@ -4208,11 +4265,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4212 "util/configparser.c" /* yacc.c:1648 */ +#line 4269 "util/configparser.c" /* yacc.c:1646 */ break; - case 367: -#line 1540 "./util/configparser.y" /* yacc.c:1648 */ + case 375: +#line 1580 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_sig_skew_min:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { @@ -4224,11 +4281,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4228 "util/configparser.c" /* yacc.c:1648 */ +#line 4285 "util/configparser.c" /* yacc.c:1646 */ break; - case 368: -#line 1553 "./util/configparser.y" /* yacc.c:1648 */ + case 376: +#line 1593 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_sig_skew_max:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { @@ -4240,11 +4297,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4244 "util/configparser.c" /* yacc.c:1648 */ +#line 4301 "util/configparser.c" /* yacc.c:1646 */ break; - case 369: -#line 1566 "./util/configparser.y" /* yacc.c:1648 */ + case 377: +#line 1606 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_cache_max_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4252,11 +4309,11 @@ yyreduce: else cfg_parser->cfg->max_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4256 "util/configparser.c" /* yacc.c:1648 */ +#line 4313 "util/configparser.c" /* yacc.c:1646 */ break; - case 370: -#line 1575 "./util/configparser.y" /* yacc.c:1648 */ + case 378: +#line 1615 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_cache_max_negative_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4264,11 +4321,11 @@ yyreduce: else cfg_parser->cfg->max_negative_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4268 "util/configparser.c" /* yacc.c:1648 */ +#line 4325 "util/configparser.c" /* yacc.c:1646 */ break; - case 371: -#line 1584 "./util/configparser.y" /* yacc.c:1648 */ + case 379: +#line 1624 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_cache_min_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4276,11 +4333,11 @@ yyreduce: else cfg_parser->cfg->min_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4280 "util/configparser.c" /* yacc.c:1648 */ +#line 4337 "util/configparser.c" /* yacc.c:1646 */ break; - case 372: -#line 1593 "./util/configparser.y" /* yacc.c:1648 */ + case 380: +#line 1633 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_bogus_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4288,11 +4345,11 @@ yyreduce: else cfg_parser->cfg->bogus_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4292 "util/configparser.c" /* yacc.c:1648 */ +#line 4349 "util/configparser.c" /* yacc.c:1646 */ break; - case 373: -#line 1602 "./util/configparser.y" /* yacc.c:1648 */ + case 381: +#line 1642 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_clean_additional:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4301,11 +4358,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4305 "util/configparser.c" /* yacc.c:1648 */ +#line 4362 "util/configparser.c" /* yacc.c:1646 */ break; - case 374: -#line 1612 "./util/configparser.y" /* yacc.c:1648 */ + case 382: +#line 1652 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_permissive_mode:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4314,11 +4371,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4318 "util/configparser.c" /* yacc.c:1648 */ +#line 4375 "util/configparser.c" /* yacc.c:1646 */ break; - case 375: -#line 1622 "./util/configparser.y" /* yacc.c:1648 */ + case 383: +#line 1662 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_aggressive_nsec:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4328,11 +4385,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4332 "util/configparser.c" /* yacc.c:1648 */ +#line 4389 "util/configparser.c" /* yacc.c:1646 */ break; - case 376: -#line 1633 "./util/configparser.y" /* yacc.c:1648 */ + case 384: +#line 1673 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ignore_cd_flag:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4340,11 +4397,11 @@ yyreduce: else cfg_parser->cfg->ignore_cd = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4344 "util/configparser.c" /* yacc.c:1648 */ +#line 4401 "util/configparser.c" /* yacc.c:1646 */ break; - case 377: -#line 1642 "./util/configparser.y" /* yacc.c:1648 */ + case 385: +#line 1682 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_serve_expired:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4352,11 +4409,11 @@ yyreduce: else cfg_parser->cfg->serve_expired = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4356 "util/configparser.c" /* yacc.c:1648 */ +#line 4413 "util/configparser.c" /* yacc.c:1646 */ break; - case 378: -#line 1651 "./util/configparser.y" /* yacc.c:1648 */ + case 386: +#line 1691 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_serve_expired_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4364,11 +4421,11 @@ yyreduce: else cfg_parser->cfg->serve_expired_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4368 "util/configparser.c" /* yacc.c:1648 */ +#line 4425 "util/configparser.c" /* yacc.c:1646 */ break; - case 379: -#line 1660 "./util/configparser.y" /* yacc.c:1648 */ + case 387: +#line 1700 "./util/configparser.y" /* yacc.c:1646 */ { 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) @@ -4376,11 +4433,11 @@ yyreduce: else cfg_parser->cfg->serve_expired_ttl_reset = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4380 "util/configparser.c" /* yacc.c:1648 */ +#line 4437 "util/configparser.c" /* yacc.c:1646 */ break; - case 380: -#line 1669 "./util/configparser.y" /* yacc.c:1648 */ + case 388: +#line 1709 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_fake_dsa:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4392,11 +4449,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 4396 "util/configparser.c" /* yacc.c:1648 */ +#line 4453 "util/configparser.c" /* yacc.c:1646 */ break; - case 381: -#line 1682 "./util/configparser.y" /* yacc.c:1648 */ + case 389: +#line 1722 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_fake_sha1:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4408,11 +4465,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 4412 "util/configparser.c" /* yacc.c:1648 */ +#line 4469 "util/configparser.c" /* yacc.c:1646 */ break; - case 382: -#line 1695 "./util/configparser.y" /* yacc.c:1648 */ + case 390: +#line 1735 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_log_level:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4420,21 +4477,21 @@ yyreduce: else cfg_parser->cfg->val_log_level = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4424 "util/configparser.c" /* yacc.c:1648 */ +#line 4481 "util/configparser.c" /* yacc.c:1646 */ break; - case 383: -#line 1704 "./util/configparser.y" /* yacc.c:1648 */ + case 391: +#line 1744 "./util/configparser.y" /* yacc.c:1646 */ { 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 4434 "util/configparser.c" /* yacc.c:1648 */ +#line 4491 "util/configparser.c" /* yacc.c:1646 */ break; - case 384: -#line 1711 "./util/configparser.y" /* yacc.c:1648 */ + case 392: +#line 1751 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_add_holddown:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4442,11 +4499,11 @@ yyreduce: else cfg_parser->cfg->add_holddown = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4446 "util/configparser.c" /* yacc.c:1648 */ +#line 4503 "util/configparser.c" /* yacc.c:1646 */ break; - case 385: -#line 1720 "./util/configparser.y" /* yacc.c:1648 */ + case 393: +#line 1760 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_del_holddown:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4454,11 +4511,11 @@ yyreduce: else cfg_parser->cfg->del_holddown = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4458 "util/configparser.c" /* yacc.c:1648 */ +#line 4515 "util/configparser.c" /* yacc.c:1646 */ break; - case 386: -#line 1729 "./util/configparser.y" /* yacc.c:1648 */ + case 394: +#line 1769 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_keep_missing:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4466,11 +4523,11 @@ yyreduce: else cfg_parser->cfg->keep_missing = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4470 "util/configparser.c" /* yacc.c:1648 */ +#line 4527 "util/configparser.c" /* yacc.c:1646 */ break; - case 387: -#line 1738 "./util/configparser.y" /* yacc.c:1648 */ + case 395: +#line 1778 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_permit_small_holddown:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4479,22 +4536,22 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4483 "util/configparser.c" /* yacc.c:1648 */ +#line 4540 "util/configparser.c" /* yacc.c:1646 */ break; - case 388: -#line 1747 "./util/configparser.y" /* yacc.c:1648 */ + case 396: +#line 1787 "./util/configparser.y" /* yacc.c:1646 */ { 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 4494 "util/configparser.c" /* yacc.c:1648 */ +#line 4551 "util/configparser.c" /* yacc.c:1646 */ break; - case 389: -#line 1755 "./util/configparser.y" /* yacc.c:1648 */ + case 397: +#line 1795 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_key_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4506,22 +4563,22 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4510 "util/configparser.c" /* yacc.c:1648 */ +#line 4567 "util/configparser.c" /* yacc.c:1646 */ break; - case 390: -#line 1768 "./util/configparser.y" /* yacc.c:1648 */ + case 398: +#line 1808 "./util/configparser.y" /* yacc.c:1646 */ { 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 4521 "util/configparser.c" /* yacc.c:1648 */ +#line 4578 "util/configparser.c" /* yacc.c:1646 */ break; - case 391: -#line 1776 "./util/configparser.y" /* yacc.c:1648 */ + case 399: +#line 1816 "./util/configparser.y" /* yacc.c:1646 */ { 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 && @@ -4553,21 +4610,21 @@ yyreduce: fatal_exit("out of memory adding local-zone"); } } -#line 4557 "util/configparser.c" /* yacc.c:1648 */ +#line 4614 "util/configparser.c" /* yacc.c:1646 */ break; - case 392: -#line 1809 "./util/configparser.y" /* yacc.c:1648 */ + case 400: +#line 1849 "./util/configparser.y" /* yacc.c:1646 */ { 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 4567 "util/configparser.c" /* yacc.c:1648 */ +#line 4624 "util/configparser.c" /* yacc.c:1646 */ break; - case 393: -#line 1816 "./util/configparser.y" /* yacc.c:1648 */ + case 401: +#line 1856 "./util/configparser.y" /* yacc.c:1646 */ { char* ptr; OUTYY(("P(server_local_data_ptr:%s)\n", (yyvsp[0].str))); @@ -4581,11 +4638,11 @@ yyreduce: yyerror("local-data-ptr could not be reversed"); } } -#line 4585 "util/configparser.c" /* yacc.c:1648 */ +#line 4642 "util/configparser.c" /* yacc.c:1646 */ break; - case 394: -#line 1831 "./util/configparser.y" /* yacc.c:1648 */ + case 402: +#line 1871 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_minimal_responses:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4594,11 +4651,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4598 "util/configparser.c" /* yacc.c:1648 */ +#line 4655 "util/configparser.c" /* yacc.c:1646 */ break; - case 395: -#line 1841 "./util/configparser.y" /* yacc.c:1648 */ + case 403: +#line 1881 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_rrset_roundrobin:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4607,41 +4664,41 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4611 "util/configparser.c" /* yacc.c:1648 */ +#line 4668 "util/configparser.c" /* yacc.c:1646 */ break; - case 396: -#line 1851 "./util/configparser.y" /* yacc.c:1648 */ + case 404: +#line 1891 "./util/configparser.y" /* yacc.c:1646 */ { 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 4621 "util/configparser.c" /* yacc.c:1648 */ +#line 4678 "util/configparser.c" /* yacc.c:1646 */ break; - case 397: -#line 1858 "./util/configparser.y" /* yacc.c:1648 */ + case 405: +#line 1898 "./util/configparser.y" /* yacc.c:1646 */ { 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 4631 "util/configparser.c" /* yacc.c:1648 */ +#line 4688 "util/configparser.c" /* yacc.c:1646 */ break; - case 398: -#line 1865 "./util/configparser.y" /* yacc.c:1648 */ + case 406: +#line 1905 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dns64_prefix:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dns64_prefix); cfg_parser->cfg->dns64_prefix = (yyvsp[0].str); } -#line 4641 "util/configparser.c" /* yacc.c:1648 */ +#line 4698 "util/configparser.c" /* yacc.c:1646 */ break; - case 399: -#line 1872 "./util/configparser.y" /* yacc.c:1648 */ + case 407: +#line 1912 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_dns64_synthall:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4649,22 +4706,22 @@ yyreduce: else cfg_parser->cfg->dns64_synthall = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4653 "util/configparser.c" /* yacc.c:1648 */ +#line 4710 "util/configparser.c" /* yacc.c:1646 */ break; - case 400: -#line 1881 "./util/configparser.y" /* yacc.c:1648 */ + case 408: +#line 1921 "./util/configparser.y" /* yacc.c:1646 */ { 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 4664 "util/configparser.c" /* yacc.c:1648 */ +#line 4721 "util/configparser.c" /* yacc.c:1646 */ break; - case 401: -#line 1889 "./util/configparser.y" /* yacc.c:1648 */ + case 409: +#line 1929 "./util/configparser.y" /* yacc.c:1646 */ { char* p, *s = (yyvsp[0].str); OUTYY(("P(server_define_tag:%s)\n", (yyvsp[0].str))); @@ -4677,11 +4734,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4681 "util/configparser.c" /* yacc.c:1648 */ +#line 4738 "util/configparser.c" /* yacc.c:1646 */ break; - case 402: -#line 1903 "./util/configparser.y" /* yacc.c:1648 */ + case 410: +#line 1943 "./util/configparser.y" /* yacc.c:1646 */ { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -4701,11 +4758,11 @@ yyreduce: } } } -#line 4705 "util/configparser.c" /* yacc.c:1648 */ +#line 4762 "util/configparser.c" /* yacc.c:1646 */ break; - case 403: -#line 1924 "./util/configparser.y" /* yacc.c:1648 */ + case 411: +#line 1964 "./util/configparser.y" /* yacc.c:1646 */ { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -4725,11 +4782,11 @@ yyreduce: } } } -#line 4729 "util/configparser.c" /* yacc.c:1648 */ +#line 4786 "util/configparser.c" /* yacc.c:1646 */ break; - case 404: -#line 1945 "./util/configparser.y" /* yacc.c:1648 */ + case 412: +#line 1985 "./util/configparser.y" /* yacc.c:1646 */ { 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, @@ -4740,11 +4797,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 4744 "util/configparser.c" /* yacc.c:1648 */ +#line 4801 "util/configparser.c" /* yacc.c:1646 */ break; - case 405: -#line 1957 "./util/configparser.y" /* yacc.c:1648 */ + case 413: +#line 1997 "./util/configparser.y" /* yacc.c:1646 */ { 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, @@ -4755,11 +4812,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 4759 "util/configparser.c" /* yacc.c:1648 */ +#line 4816 "util/configparser.c" /* yacc.c:1646 */ break; - case 406: -#line 1969 "./util/configparser.y" /* yacc.c:1648 */ + case 414: +#line 2009 "./util/configparser.y" /* yacc.c:1646 */ { 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, @@ -4770,11 +4827,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 4774 "util/configparser.c" /* yacc.c:1648 */ +#line 4831 "util/configparser.c" /* yacc.c:1646 */ break; - case 407: -#line 1981 "./util/configparser.y" /* yacc.c:1648 */ + case 415: +#line 2021 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_access_control_view:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str2list_insert(&cfg_parser->cfg->acl_view, @@ -4782,11 +4839,11 @@ yyreduce: yyerror("out of memory"); } } -#line 4786 "util/configparser.c" /* yacc.c:1648 */ +#line 4843 "util/configparser.c" /* yacc.c:1646 */ break; - case 408: -#line 1990 "./util/configparser.y" /* yacc.c:1648 */ + case 416: +#line 2030 "./util/configparser.y" /* yacc.c:1646 */ { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -4806,11 +4863,11 @@ yyreduce: } } } -#line 4810 "util/configparser.c" /* yacc.c:1648 */ +#line 4867 "util/configparser.c" /* yacc.c:1646 */ break; - case 409: -#line 2011 "./util/configparser.y" /* yacc.c:1648 */ + case 417: +#line 2051 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_ratelimit:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4818,11 +4875,11 @@ yyreduce: else cfg_parser->cfg->ip_ratelimit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4822 "util/configparser.c" /* yacc.c:1648 */ +#line 4879 "util/configparser.c" /* yacc.c:1646 */ break; - case 410: -#line 2021 "./util/configparser.y" /* yacc.c:1648 */ + case 418: +#line 2061 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ratelimit:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4830,33 +4887,33 @@ yyreduce: else cfg_parser->cfg->ratelimit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4834 "util/configparser.c" /* yacc.c:1648 */ +#line 4891 "util/configparser.c" /* yacc.c:1646 */ break; - case 411: -#line 2030 "./util/configparser.y" /* yacc.c:1648 */ + case 419: +#line 2070 "./util/configparser.y" /* yacc.c:1646 */ { 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 4845 "util/configparser.c" /* yacc.c:1648 */ +#line 4902 "util/configparser.c" /* yacc.c:1646 */ break; - case 412: -#line 2038 "./util/configparser.y" /* yacc.c:1648 */ + case 420: +#line 2078 "./util/configparser.y" /* yacc.c:1646 */ { 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 4856 "util/configparser.c" /* yacc.c:1648 */ +#line 4913 "util/configparser.c" /* yacc.c:1646 */ break; - case 413: -#line 2046 "./util/configparser.y" /* yacc.c:1648 */ + case 421: +#line 2086 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_ratelimit_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4868,11 +4925,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4872 "util/configparser.c" /* yacc.c:1648 */ +#line 4929 "util/configparser.c" /* yacc.c:1646 */ break; - case 414: -#line 2059 "./util/configparser.y" /* yacc.c:1648 */ + case 422: +#line 2099 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ratelimit_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4884,11 +4941,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4888 "util/configparser.c" /* yacc.c:1648 */ +#line 4945 "util/configparser.c" /* yacc.c:1646 */ break; - case 415: -#line 2072 "./util/configparser.y" /* yacc.c:1648 */ + case 423: +#line 2112 "./util/configparser.y" /* yacc.c:1646 */ { 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) { @@ -4902,11 +4959,11 @@ yyreduce: "ratelimit-for-domain"); } } -#line 4906 "util/configparser.c" /* yacc.c:1648 */ +#line 4963 "util/configparser.c" /* yacc.c:1646 */ break; - case 416: -#line 2087 "./util/configparser.y" /* yacc.c:1648 */ + case 424: +#line 2127 "./util/configparser.y" /* yacc.c:1646 */ { 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) { @@ -4920,11 +4977,11 @@ yyreduce: "ratelimit-below-domain"); } } -#line 4924 "util/configparser.c" /* yacc.c:1648 */ +#line 4981 "util/configparser.c" /* yacc.c:1646 */ break; - case 417: -#line 2102 "./util/configparser.y" /* yacc.c:1648 */ + case 425: +#line 2142 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_ratelimit_factor:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4932,11 +4989,11 @@ yyreduce: else cfg_parser->cfg->ip_ratelimit_factor = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4936 "util/configparser.c" /* yacc.c:1648 */ +#line 4993 "util/configparser.c" /* yacc.c:1646 */ break; - case 418: -#line 2111 "./util/configparser.y" /* yacc.c:1648 */ + case 426: +#line 2151 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ratelimit_factor:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4944,20 +5001,20 @@ yyreduce: else cfg_parser->cfg->ratelimit_factor = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4948 "util/configparser.c" /* yacc.c:1648 */ +#line 5005 "util/configparser.c" /* yacc.c:1646 */ break; - case 419: -#line 2120 "./util/configparser.y" /* yacc.c:1648 */ + case 427: +#line 2160 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(low-rtt option is deprecated, use fast-server-num instead)\n")); free((yyvsp[0].str)); } -#line 4957 "util/configparser.c" /* yacc.c:1648 */ +#line 5014 "util/configparser.c" /* yacc.c:1646 */ break; - case 420: -#line 2126 "./util/configparser.y" /* yacc.c:1648 */ + case 428: +#line 2166 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_fast_server_num:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) <= 0) @@ -4965,11 +5022,11 @@ yyreduce: else cfg_parser->cfg->fast_server_num = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4969 "util/configparser.c" /* yacc.c:1648 */ +#line 5026 "util/configparser.c" /* yacc.c:1646 */ break; - case 421: -#line 2135 "./util/configparser.y" /* yacc.c:1648 */ + case 429: +#line 2175 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_fast_server_permil:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4977,11 +5034,11 @@ yyreduce: else cfg_parser->cfg->fast_server_permil = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4981 "util/configparser.c" /* yacc.c:1648 */ +#line 5038 "util/configparser.c" /* yacc.c:1646 */ break; - case 422: -#line 2144 "./util/configparser.y" /* yacc.c:1648 */ + case 430: +#line 2184 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_qname_minimisation:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4990,11 +5047,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4994 "util/configparser.c" /* yacc.c:1648 */ +#line 5051 "util/configparser.c" /* yacc.c:1646 */ break; - case 423: -#line 2154 "./util/configparser.y" /* yacc.c:1648 */ + case 431: +#line 2194 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_qname_minimisation_strict:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5003,11 +5060,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5007 "util/configparser.c" /* yacc.c:1648 */ +#line 5064 "util/configparser.c" /* yacc.c:1646 */ break; - case 424: -#line 2164 "./util/configparser.y" /* yacc.c:1648 */ + case 432: +#line 2204 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_enabled:%s)\n", (yyvsp[0].str))); @@ -5019,11 +5076,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 5023 "util/configparser.c" /* yacc.c:1648 */ +#line 5080 "util/configparser.c" /* yacc.c:1646 */ break; - case 425: -#line 2177 "./util/configparser.y" /* yacc.c:1648 */ + case 433: +#line 2217 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_ignore_bogus:%s)\n", (yyvsp[0].str))); @@ -5035,11 +5092,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 5039 "util/configparser.c" /* yacc.c:1648 */ +#line 5096 "util/configparser.c" /* yacc.c:1646 */ break; - case 426: -#line 2190 "./util/configparser.y" /* yacc.c:1648 */ + case 434: +#line 2230 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_hook:%s)\n", (yyvsp[0].str))); @@ -5050,11 +5107,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5054 "util/configparser.c" /* yacc.c:1648 */ +#line 5111 "util/configparser.c" /* yacc.c:1646 */ break; - case 427: -#line 2202 "./util/configparser.y" /* yacc.c:1648 */ + case 435: +#line 2242 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_max_ttl:%s)\n", (yyvsp[0].str))); @@ -5067,11 +5124,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5071 "util/configparser.c" /* yacc.c:1648 */ +#line 5128 "util/configparser.c" /* yacc.c:1646 */ break; - case 428: -#line 2216 "./util/configparser.y" /* yacc.c:1648 */ + case 436: +#line 2256 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_whitelist:%s)\n", (yyvsp[0].str))); @@ -5082,11 +5139,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5086 "util/configparser.c" /* yacc.c:1648 */ +#line 5143 "util/configparser.c" /* yacc.c:1646 */ break; - case 429: -#line 2228 "./util/configparser.y" /* yacc.c:1648 */ + case 437: +#line 2268 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_strict:%s)\n", (yyvsp[0].str))); @@ -5099,11 +5156,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5103 "util/configparser.c" /* yacc.c:1648 */ +#line 5160 "util/configparser.c" /* yacc.c:1646 */ break; - case 430: -#line 2242 "./util/configparser.y" /* yacc.c:1648 */ + case 438: +#line 2282 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->stubs->name) @@ -5112,31 +5169,31 @@ yyreduce: free(cfg_parser->cfg->stubs->name); cfg_parser->cfg->stubs->name = (yyvsp[0].str); } -#line 5116 "util/configparser.c" /* yacc.c:1648 */ +#line 5173 "util/configparser.c" /* yacc.c:1646 */ break; - case 431: -#line 2252 "./util/configparser.y" /* yacc.c:1648 */ + case 439: +#line 2292 "./util/configparser.y" /* yacc.c:1646 */ { 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 5126 "util/configparser.c" /* yacc.c:1648 */ +#line 5183 "util/configparser.c" /* yacc.c:1646 */ break; - case 432: -#line 2259 "./util/configparser.y" /* yacc.c:1648 */ + case 440: +#line 2299 "./util/configparser.y" /* yacc.c:1646 */ { 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 5136 "util/configparser.c" /* yacc.c:1648 */ +#line 5193 "util/configparser.c" /* yacc.c:1646 */ break; - case 433: -#line 2266 "./util/configparser.y" /* yacc.c:1648 */ + case 441: +#line 2306 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(stub-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5144,11 +5201,11 @@ yyreduce: else cfg_parser->cfg->stubs->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5148 "util/configparser.c" /* yacc.c:1648 */ +#line 5205 "util/configparser.c" /* yacc.c:1646 */ break; - case 434: -#line 2275 "./util/configparser.y" /* yacc.c:1648 */ + case 442: +#line 2315 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(stub-no-cache:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5156,11 +5213,11 @@ yyreduce: else cfg_parser->cfg->stubs->no_cache=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5160 "util/configparser.c" /* yacc.c:1648 */ +#line 5217 "util/configparser.c" /* yacc.c:1646 */ break; - case 435: -#line 2284 "./util/configparser.y" /* yacc.c:1648 */ + case 443: +#line 2324 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(stub-ssl-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5169,11 +5226,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5173 "util/configparser.c" /* yacc.c:1648 */ +#line 5230 "util/configparser.c" /* yacc.c:1646 */ break; - case 436: -#line 2294 "./util/configparser.y" /* yacc.c:1648 */ + case 444: +#line 2334 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(stub-prime:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5182,11 +5239,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5186 "util/configparser.c" /* yacc.c:1648 */ +#line 5243 "util/configparser.c" /* yacc.c:1646 */ break; - case 437: -#line 2304 "./util/configparser.y" /* yacc.c:1648 */ + case 445: +#line 2344 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->forwards->name) @@ -5195,31 +5252,31 @@ yyreduce: free(cfg_parser->cfg->forwards->name); cfg_parser->cfg->forwards->name = (yyvsp[0].str); } -#line 5199 "util/configparser.c" /* yacc.c:1648 */ +#line 5256 "util/configparser.c" /* yacc.c:1646 */ break; - case 438: -#line 2314 "./util/configparser.y" /* yacc.c:1648 */ + case 446: +#line 2354 "./util/configparser.y" /* yacc.c:1646 */ { 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 5209 "util/configparser.c" /* yacc.c:1648 */ +#line 5266 "util/configparser.c" /* yacc.c:1646 */ break; - case 439: -#line 2321 "./util/configparser.y" /* yacc.c:1648 */ + case 447: +#line 2361 "./util/configparser.y" /* yacc.c:1646 */ { 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 5219 "util/configparser.c" /* yacc.c:1648 */ +#line 5276 "util/configparser.c" /* yacc.c:1646 */ break; - case 440: -#line 2328 "./util/configparser.y" /* yacc.c:1648 */ + case 448: +#line 2368 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(forward-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5227,11 +5284,11 @@ yyreduce: else cfg_parser->cfg->forwards->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5231 "util/configparser.c" /* yacc.c:1648 */ +#line 5288 "util/configparser.c" /* yacc.c:1646 */ break; - case 441: -#line 2337 "./util/configparser.y" /* yacc.c:1648 */ + case 449: +#line 2377 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(forward-no-cache:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5239,11 +5296,11 @@ yyreduce: else cfg_parser->cfg->forwards->no_cache=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5243 "util/configparser.c" /* yacc.c:1648 */ +#line 5300 "util/configparser.c" /* yacc.c:1646 */ break; - case 442: -#line 2346 "./util/configparser.y" /* yacc.c:1648 */ + case 450: +#line 2386 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(forward-ssl-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5252,11 +5309,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5256 "util/configparser.c" /* yacc.c:1648 */ +#line 5313 "util/configparser.c" /* yacc.c:1646 */ break; - case 443: -#line 2356 "./util/configparser.y" /* yacc.c:1648 */ + case 451: +#line 2396 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->auths->name) @@ -5265,52 +5322,52 @@ yyreduce: free(cfg_parser->cfg->auths->name); cfg_parser->cfg->auths->name = (yyvsp[0].str); } -#line 5269 "util/configparser.c" /* yacc.c:1648 */ +#line 5326 "util/configparser.c" /* yacc.c:1646 */ break; - case 444: -#line 2366 "./util/configparser.y" /* yacc.c:1648 */ + case 452: +#line 2406 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(zonefile:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->auths->zonefile); cfg_parser->cfg->auths->zonefile = (yyvsp[0].str); } -#line 5279 "util/configparser.c" /* yacc.c:1648 */ +#line 5336 "util/configparser.c" /* yacc.c:1646 */ break; - case 445: -#line 2373 "./util/configparser.y" /* yacc.c:1648 */ + case 453: +#line 2413 "./util/configparser.y" /* yacc.c:1646 */ { 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 5289 "util/configparser.c" /* yacc.c:1648 */ +#line 5346 "util/configparser.c" /* yacc.c:1646 */ break; - case 446: -#line 2380 "./util/configparser.y" /* yacc.c:1648 */ + case 454: +#line 2420 "./util/configparser.y" /* yacc.c:1646 */ { 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 5299 "util/configparser.c" /* yacc.c:1648 */ +#line 5356 "util/configparser.c" /* yacc.c:1646 */ break; - case 447: -#line 2387 "./util/configparser.y" /* yacc.c:1648 */ + case 455: +#line 2427 "./util/configparser.y" /* yacc.c:1646 */ { 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 5310 "util/configparser.c" /* yacc.c:1648 */ +#line 5367 "util/configparser.c" /* yacc.c:1646 */ break; - case 448: -#line 2395 "./util/configparser.y" /* yacc.c:1648 */ + case 456: +#line 2435 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(for-downstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5319,11 +5376,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5323 "util/configparser.c" /* yacc.c:1648 */ +#line 5380 "util/configparser.c" /* yacc.c:1646 */ break; - case 449: -#line 2405 "./util/configparser.y" /* yacc.c:1648 */ + case 457: +#line 2445 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(for-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5332,11 +5389,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5336 "util/configparser.c" /* yacc.c:1648 */ +#line 5393 "util/configparser.c" /* yacc.c:1646 */ break; - case 450: -#line 2415 "./util/configparser.y" /* yacc.c:1648 */ + case 458: +#line 2455 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(fallback-enabled:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5345,11 +5402,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5349 "util/configparser.c" /* yacc.c:1648 */ +#line 5406 "util/configparser.c" /* yacc.c:1646 */ break; - case 451: -#line 2425 "./util/configparser.y" /* yacc.c:1648 */ + case 459: +#line 2465 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->views->name) @@ -5358,11 +5415,11 @@ yyreduce: free(cfg_parser->cfg->views->name); cfg_parser->cfg->views->name = (yyvsp[0].str); } -#line 5362 "util/configparser.c" /* yacc.c:1648 */ +#line 5419 "util/configparser.c" /* yacc.c:1646 */ break; - case 452: -#line 2435 "./util/configparser.y" /* yacc.c:1648 */ + case 460: +#line 2475 "./util/configparser.y" /* yacc.c:1646 */ { 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 && @@ -5393,11 +5450,11 @@ yyreduce: fatal_exit("out of memory adding local-zone"); } } -#line 5397 "util/configparser.c" /* yacc.c:1648 */ +#line 5454 "util/configparser.c" /* yacc.c:1646 */ break; - case 453: -#line 2467 "./util/configparser.y" /* yacc.c:1648 */ + case 461: +#line 2507 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(view_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); validate_respip_action((yyvsp[0].str)); @@ -5406,33 +5463,33 @@ yyreduce: fatal_exit("out of memory adding per-view " "response-ip action"); } -#line 5410 "util/configparser.c" /* yacc.c:1648 */ +#line 5467 "util/configparser.c" /* yacc.c:1646 */ break; - case 454: -#line 2477 "./util/configparser.y" /* yacc.c:1648 */ + case 462: +#line 2517 "./util/configparser.y" /* yacc.c:1646 */ { 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 5421 "util/configparser.c" /* yacc.c:1648 */ +#line 5478 "util/configparser.c" /* yacc.c:1646 */ break; - case 455: -#line 2485 "./util/configparser.y" /* yacc.c:1648 */ + case 463: +#line 2525 "./util/configparser.y" /* yacc.c:1646 */ { 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 5432 "util/configparser.c" /* yacc.c:1648 */ +#line 5489 "util/configparser.c" /* yacc.c:1646 */ break; - case 456: -#line 2493 "./util/configparser.y" /* yacc.c:1648 */ + case 464: +#line 2533 "./util/configparser.y" /* yacc.c:1646 */ { char* ptr; OUTYY(("P(view_local_data_ptr:%s)\n", (yyvsp[0].str))); @@ -5446,11 +5503,11 @@ yyreduce: yyerror("local-data-ptr could not be reversed"); } } -#line 5450 "util/configparser.c" /* yacc.c:1648 */ +#line 5507 "util/configparser.c" /* yacc.c:1646 */ break; - case 457: -#line 2508 "./util/configparser.y" /* yacc.c:1648 */ + case 465: +#line 2548 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(view-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5458,19 +5515,19 @@ yyreduce: else cfg_parser->cfg->views->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5462 "util/configparser.c" /* yacc.c:1648 */ +#line 5519 "util/configparser.c" /* yacc.c:1646 */ break; - case 458: -#line 2517 "./util/configparser.y" /* yacc.c:1648 */ + case 466: +#line 2557 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(remote-control:)\n")); } -#line 5470 "util/configparser.c" /* yacc.c:1648 */ +#line 5527 "util/configparser.c" /* yacc.c:1646 */ break; - case 469: -#line 2528 "./util/configparser.y" /* yacc.c:1648 */ + case 477: +#line 2568 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(control_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5479,11 +5536,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5483 "util/configparser.c" /* yacc.c:1648 */ +#line 5540 "util/configparser.c" /* yacc.c:1646 */ break; - case 470: -#line 2538 "./util/configparser.y" /* yacc.c:1648 */ + case 478: +#line 2578 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(control_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5491,79 +5548,79 @@ yyreduce: else cfg_parser->cfg->control_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5495 "util/configparser.c" /* yacc.c:1648 */ +#line 5552 "util/configparser.c" /* yacc.c:1646 */ break; - case 471: -#line 2547 "./util/configparser.y" /* yacc.c:1648 */ + case 479: +#line 2587 "./util/configparser.y" /* yacc.c:1646 */ { 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 5505 "util/configparser.c" /* yacc.c:1648 */ +#line 5562 "util/configparser.c" /* yacc.c:1646 */ break; - case 472: -#line 2554 "./util/configparser.y" /* yacc.c:1648 */ + case 480: +#line 2594 "./util/configparser.y" /* yacc.c:1646 */ { 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 5515 "util/configparser.c" /* yacc.c:1648 */ +#line 5572 "util/configparser.c" /* yacc.c:1646 */ break; - case 473: -#line 2561 "./util/configparser.y" /* yacc.c:1648 */ + case 481: +#line 2601 "./util/configparser.y" /* yacc.c:1646 */ { 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 5525 "util/configparser.c" /* yacc.c:1648 */ +#line 5582 "util/configparser.c" /* yacc.c:1646 */ break; - case 474: -#line 2568 "./util/configparser.y" /* yacc.c:1648 */ + case 482: +#line 2608 "./util/configparser.y" /* yacc.c:1646 */ { 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 5535 "util/configparser.c" /* yacc.c:1648 */ +#line 5592 "util/configparser.c" /* yacc.c:1646 */ break; - case 475: -#line 2575 "./util/configparser.y" /* yacc.c:1648 */ + case 483: +#line 2615 "./util/configparser.y" /* yacc.c:1646 */ { 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 5545 "util/configparser.c" /* yacc.c:1648 */ +#line 5602 "util/configparser.c" /* yacc.c:1646 */ break; - case 476: -#line 2582 "./util/configparser.y" /* yacc.c:1648 */ + case 484: +#line 2622 "./util/configparser.y" /* yacc.c:1646 */ { 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 5555 "util/configparser.c" /* yacc.c:1648 */ +#line 5612 "util/configparser.c" /* yacc.c:1646 */ break; - case 477: -#line 2589 "./util/configparser.y" /* yacc.c:1648 */ + case 485: +#line 2629 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(dnstap:)\n")); } -#line 5563 "util/configparser.c" /* yacc.c:1648 */ +#line 5620 "util/configparser.c" /* yacc.c:1646 */ break; - case 492: -#line 2606 "./util/configparser.y" /* yacc.c:1648 */ + case 500: +#line 2646 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5571,21 +5628,21 @@ yyreduce: else cfg_parser->cfg->dnstap = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5575 "util/configparser.c" /* yacc.c:1648 */ +#line 5632 "util/configparser.c" /* yacc.c:1646 */ break; - case 493: -#line 2615 "./util/configparser.y" /* yacc.c:1648 */ + case 501: +#line 2655 "./util/configparser.y" /* yacc.c:1646 */ { 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 5585 "util/configparser.c" /* yacc.c:1648 */ +#line 5642 "util/configparser.c" /* yacc.c:1646 */ break; - case 494: -#line 2622 "./util/configparser.y" /* yacc.c:1648 */ + case 502: +#line 2662 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_send_identity:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5593,11 +5650,11 @@ yyreduce: else cfg_parser->cfg->dnstap_send_identity = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5597 "util/configparser.c" /* yacc.c:1648 */ +#line 5654 "util/configparser.c" /* yacc.c:1646 */ break; - case 495: -#line 2631 "./util/configparser.y" /* yacc.c:1648 */ + case 503: +#line 2671 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_send_version:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5605,31 +5662,31 @@ yyreduce: else cfg_parser->cfg->dnstap_send_version = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5609 "util/configparser.c" /* yacc.c:1648 */ +#line 5666 "util/configparser.c" /* yacc.c:1646 */ break; - case 496: -#line 2640 "./util/configparser.y" /* yacc.c:1648 */ + case 504: +#line 2680 "./util/configparser.y" /* yacc.c:1646 */ { 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 5619 "util/configparser.c" /* yacc.c:1648 */ +#line 5676 "util/configparser.c" /* yacc.c:1646 */ break; - case 497: -#line 2647 "./util/configparser.y" /* yacc.c:1648 */ + case 505: +#line 2687 "./util/configparser.y" /* yacc.c:1646 */ { 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 5629 "util/configparser.c" /* yacc.c:1648 */ +#line 5686 "util/configparser.c" /* yacc.c:1646 */ break; - case 498: -#line 2654 "./util/configparser.y" /* yacc.c:1648 */ + case 506: +#line 2694 "./util/configparser.y" /* yacc.c:1646 */ { 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) @@ -5638,11 +5695,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5642 "util/configparser.c" /* yacc.c:1648 */ +#line 5699 "util/configparser.c" /* yacc.c:1646 */ break; - case 499: -#line 2664 "./util/configparser.y" /* yacc.c:1648 */ + case 507: +#line 2704 "./util/configparser.y" /* yacc.c:1646 */ { 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) @@ -5651,11 +5708,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5655 "util/configparser.c" /* yacc.c:1648 */ +#line 5712 "util/configparser.c" /* yacc.c:1646 */ break; - case 500: -#line 2674 "./util/configparser.y" /* yacc.c:1648 */ + case 508: +#line 2714 "./util/configparser.y" /* yacc.c:1646 */ { 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) @@ -5664,11 +5721,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5668 "util/configparser.c" /* yacc.c:1648 */ +#line 5725 "util/configparser.c" /* yacc.c:1646 */ break; - case 501: -#line 2684 "./util/configparser.y" /* yacc.c:1648 */ + case 509: +#line 2724 "./util/configparser.y" /* yacc.c:1646 */ { 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) @@ -5677,11 +5734,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5681 "util/configparser.c" /* yacc.c:1648 */ +#line 5738 "util/configparser.c" /* yacc.c:1646 */ break; - case 502: -#line 2694 "./util/configparser.y" /* yacc.c:1648 */ + case 510: +#line 2734 "./util/configparser.y" /* yacc.c:1646 */ { 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) @@ -5690,11 +5747,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5694 "util/configparser.c" /* yacc.c:1648 */ +#line 5751 "util/configparser.c" /* yacc.c:1646 */ break; - case 503: -#line 2704 "./util/configparser.y" /* yacc.c:1648 */ + case 511: +#line 2744 "./util/configparser.y" /* yacc.c:1646 */ { 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) @@ -5703,29 +5760,29 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5707 "util/configparser.c" /* yacc.c:1648 */ +#line 5764 "util/configparser.c" /* yacc.c:1646 */ break; - case 504: -#line 2714 "./util/configparser.y" /* yacc.c:1648 */ + case 512: +#line 2754 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(python:)\n")); } -#line 5715 "util/configparser.c" /* yacc.c:1648 */ +#line 5772 "util/configparser.c" /* yacc.c:1646 */ break; - case 508: -#line 2723 "./util/configparser.y" /* yacc.c:1648 */ + case 516: +#line 2763 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(python-script:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->python_script); cfg_parser->cfg->python_script = (yyvsp[0].str); } -#line 5725 "util/configparser.c" /* yacc.c:1648 */ +#line 5782 "util/configparser.c" /* yacc.c:1646 */ break; - case 509: -#line 2729 "./util/configparser.y" /* yacc.c:1648 */ + case 517: +#line 2769 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(disable_dnssec_lame_check:%s)\n", (yyvsp[0].str))); if (strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5734,21 +5791,21 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5738 "util/configparser.c" /* yacc.c:1648 */ +#line 5795 "util/configparser.c" /* yacc.c:1646 */ break; - case 510: -#line 2739 "./util/configparser.y" /* yacc.c:1648 */ + case 518: +#line 2779 "./util/configparser.y" /* yacc.c:1646 */ { 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 5748 "util/configparser.c" /* yacc.c:1648 */ +#line 5805 "util/configparser.c" /* yacc.c:1646 */ break; - case 511: -#line 2746 "./util/configparser.y" /* yacc.c:1648 */ + case 519: +#line 2786 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); validate_respip_action((yyvsp[0].str)); @@ -5756,30 +5813,30 @@ yyreduce: (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding response-ip"); } -#line 5760 "util/configparser.c" /* yacc.c:1648 */ +#line 5817 "util/configparser.c" /* yacc.c:1646 */ break; - case 512: -#line 2755 "./util/configparser.y" /* yacc.c:1648 */ + case 520: +#line 2795 "./util/configparser.y" /* yacc.c:1646 */ { 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 5771 "util/configparser.c" /* yacc.c:1648 */ +#line 5828 "util/configparser.c" /* yacc.c:1646 */ break; - case 513: -#line 2763 "./util/configparser.y" /* yacc.c:1648 */ + case 521: +#line 2803 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(dnscrypt:)\n")); } -#line 5779 "util/configparser.c" /* yacc.c:1648 */ +#line 5836 "util/configparser.c" /* yacc.c:1646 */ break; - case 526: -#line 2779 "./util/configparser.y" /* yacc.c:1648 */ + case 534: +#line 2819 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5787,11 +5844,11 @@ yyreduce: else cfg_parser->cfg->dnscrypt = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5791 "util/configparser.c" /* yacc.c:1648 */ +#line 5848 "util/configparser.c" /* yacc.c:1646 */ break; - case 527: -#line 2789 "./util/configparser.y" /* yacc.c:1648 */ + case 535: +#line 2829 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5799,21 +5856,21 @@ yyreduce: else cfg_parser->cfg->dnscrypt_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5803 "util/configparser.c" /* yacc.c:1648 */ +#line 5860 "util/configparser.c" /* yacc.c:1646 */ break; - case 528: -#line 2798 "./util/configparser.y" /* yacc.c:1648 */ + case 536: +#line 2838 "./util/configparser.y" /* yacc.c:1646 */ { 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 5813 "util/configparser.c" /* yacc.c:1648 */ +#line 5870 "util/configparser.c" /* yacc.c:1646 */ break; - case 529: -#line 2805 "./util/configparser.y" /* yacc.c:1648 */ + case 537: +#line 2845 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_provider_cert:%s)\n", (yyvsp[0].str))); if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str))) @@ -5821,21 +5878,21 @@ yyreduce: if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str))) fatal_exit("out of memory adding dnscrypt-provider-cert"); } -#line 5825 "util/configparser.c" /* yacc.c:1648 */ +#line 5882 "util/configparser.c" /* yacc.c:1646 */ break; - case 530: -#line 2814 "./util/configparser.y" /* yacc.c:1648 */ + case 538: +#line 2854 "./util/configparser.y" /* yacc.c:1646 */ { 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 5835 "util/configparser.c" /* yacc.c:1648 */ +#line 5892 "util/configparser.c" /* yacc.c:1646 */ break; - case 531: -#line 2821 "./util/configparser.y" /* yacc.c:1648 */ + case 539: +#line 2861 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_secret_key:%s)\n", (yyvsp[0].str))); if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str))) @@ -5843,22 +5900,22 @@ yyreduce: if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str))) fatal_exit("out of memory adding dnscrypt-secret-key"); } -#line 5847 "util/configparser.c" /* yacc.c:1648 */ +#line 5904 "util/configparser.c" /* yacc.c:1646 */ break; - case 532: -#line 2830 "./util/configparser.y" /* yacc.c:1648 */ + case 540: +#line 2870 "./util/configparser.y" /* yacc.c:1646 */ { 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 5858 "util/configparser.c" /* yacc.c:1648 */ +#line 5915 "util/configparser.c" /* yacc.c:1646 */ break; - case 533: -#line 2838 "./util/configparser.y" /* yacc.c:1648 */ + case 541: +#line 2878 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnscrypt_shared_secret_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5870,22 +5927,22 @@ yyreduce: } free((yyvsp[0].str)); } -#line 5874 "util/configparser.c" /* yacc.c:1648 */ +#line 5931 "util/configparser.c" /* yacc.c:1646 */ break; - case 534: -#line 2851 "./util/configparser.y" /* yacc.c:1648 */ + case 542: +#line 2891 "./util/configparser.y" /* yacc.c:1646 */ { 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 5885 "util/configparser.c" /* yacc.c:1648 */ +#line 5942 "util/configparser.c" /* yacc.c:1646 */ break; - case 535: -#line 2859 "./util/configparser.y" /* yacc.c:1648 */ + case 543: +#line 2899 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnscrypt_nonce_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5897,19 +5954,19 @@ yyreduce: } free((yyvsp[0].str)); } -#line 5901 "util/configparser.c" /* yacc.c:1648 */ - break; - - case 536: -#line 2872 "./util/configparser.y" /* yacc.c:1648 */ - { - OUTYY(("\nP(cachedb:)\n")); - } -#line 5909 "util/configparser.c" /* yacc.c:1648 */ +#line 5958 "util/configparser.c" /* yacc.c:1646 */ break; case 544: -#line 2882 "./util/configparser.y" /* yacc.c:1648 */ +#line 2912 "./util/configparser.y" /* yacc.c:1646 */ + { + OUTYY(("\nP(cachedb:)\n")); + } +#line 5966 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 552: +#line 2922 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_CACHEDB OUTYY(("P(backend:%s)\n", (yyvsp[0].str))); @@ -5923,11 +5980,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5927 "util/configparser.c" /* yacc.c:1648 */ +#line 5984 "util/configparser.c" /* yacc.c:1646 */ break; - case 545: -#line 2897 "./util/configparser.y" /* yacc.c:1648 */ + case 553: +#line 2937 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_CACHEDB OUTYY(("P(secret-seed:%s)\n", (yyvsp[0].str))); @@ -5941,11 +5998,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5945 "util/configparser.c" /* yacc.c:1648 */ +#line 6002 "util/configparser.c" /* yacc.c:1646 */ break; - case 546: -#line 2912 "./util/configparser.y" /* yacc.c:1648 */ + case 554: +#line 2952 "./util/configparser.y" /* yacc.c:1646 */ { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_server_host:%s)\n", (yyvsp[0].str))); @@ -5956,11 +6013,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5960 "util/configparser.c" /* yacc.c:1648 */ +#line 6017 "util/configparser.c" /* yacc.c:1646 */ break; - case 547: -#line 2924 "./util/configparser.y" /* yacc.c:1648 */ + case 555: +#line 2964 "./util/configparser.y" /* yacc.c:1646 */ { #if defined(USE_CACHEDB) && defined(USE_REDIS) int port; @@ -5974,11 +6031,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 5978 "util/configparser.c" /* yacc.c:1648 */ +#line 6035 "util/configparser.c" /* yacc.c:1646 */ break; - case 548: -#line 2939 "./util/configparser.y" /* yacc.c:1648 */ + case 556: +#line 2979 "./util/configparser.y" /* yacc.c:1646 */ { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_timeout:%s)\n", (yyvsp[0].str))); @@ -5990,11 +6047,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 5994 "util/configparser.c" /* yacc.c:1648 */ +#line 6051 "util/configparser.c" /* yacc.c:1646 */ break; - case 549: -#line 2952 "./util/configparser.y" /* yacc.c:1648 */ + case 557: +#line 2992 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tcp_connection_limit:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if (atoi((yyvsp[0].str)) < 0) @@ -6004,11 +6061,11 @@ yyreduce: fatal_exit("out of memory adding tcp connection limit"); } } -#line 6008 "util/configparser.c" /* yacc.c:1648 */ +#line 6065 "util/configparser.c" /* yacc.c:1646 */ break; -#line 6012 "util/configparser.c" /* yacc.c:1648 */ +#line 6069 "util/configparser.c" /* yacc.c:1646 */ default: break; } /* User semantic actions sometimes alter yychar, and that requires @@ -6236,7 +6293,7 @@ yyreturn: #endif return yyresult; } -#line 2962 "./util/configparser.y" /* yacc.c:1907 */ +#line 3002 "./util/configparser.y" /* yacc.c:1906 */ /* parse helper routines could be here */ diff --git a/util/configparser.h b/util/configparser.h index db6e94714..16f887acc 100644 --- a/util/configparser.h +++ b/util/configparser.h @@ -1,8 +1,8 @@ -/* A Bison parser, made by GNU Bison 3.0.5. */ +/* A Bison parser, made by GNU Bison 3.0.4. */ /* Bison interface for Yacc-like parsers in C - Copyright (C) 1984, 1989-1990, 2000-2015, 2018 Free Software Foundation, Inc. + Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -308,7 +308,9 @@ extern int yydebug; VAR_STREAM_WAIT_SIZE = 518, VAR_TLS_CIPHERS = 519, VAR_TLS_CIPHERSUITES = 520, - VAR_TLS_SESSION_TICKET_KEYS = 521 + VAR_TLS_SESSION_TICKET_KEYS = 521, + VAR_RPZ = 522, + VAR_TAGS = 523 }; #endif /* Tokens. */ @@ -576,17 +578,19 @@ extern int yydebug; #define VAR_TLS_CIPHERS 519 #define VAR_TLS_CIPHERSUITES 520 #define VAR_TLS_SESSION_TICKET_KEYS 521 +#define VAR_RPZ 522 +#define VAR_TAGS 523 /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED union YYSTYPE { -#line 66 "./util/configparser.y" /* yacc.c:1910 */ +#line 66 "./util/configparser.y" /* yacc.c:1909 */ char* str; -#line 590 "util/configparser.h" /* yacc.c:1910 */ +#line 594 "util/configparser.h" /* yacc.c:1909 */ }; typedef union YYSTYPE YYSTYPE; diff --git a/util/configparser.y b/util/configparser.y index c7b916966..61665558a 100644 --- a/util/configparser.y +++ b/util/configparser.y @@ -166,7 +166,7 @@ extern struct config_parser_state* cfg_parser; %token VAR_FORWARD_NO_CACHE VAR_STUB_NO_CACHE VAR_LOG_SERVFAIL VAR_DENY_ANY %token VAR_UNKNOWN_SERVER_TIME_LIMIT VAR_LOG_TAG_QUERYREPLY %token VAR_STREAM_WAIT_SIZE VAR_TLS_CIPHERS VAR_TLS_CIPHERSUITES -%token VAR_TLS_SESSION_TICKET_KEYS +%token VAR_TLS_SESSION_TICKET_KEYS VAR_RPZ VAR_TAGS %% toplevelvars: /* empty */ | toplevelvars toplevelvar ; @@ -174,7 +174,7 @@ toplevelvar: serverstart contents_server | stubstart contents_stub | forwardstart contents_forward | pythonstart contents_py | rcstart contents_rc | dtstart contents_dt | viewstart contents_view | dnscstart contents_dnsc | cachedbstart contents_cachedb | - authstart contents_auth + authstart contents_auth | rpzstart contents_rpz ; /* server: declaration */ @@ -334,6 +334,7 @@ authstart: VAR_AUTH_ZONE s->for_downstream = 1; s->for_upstream = 1; s->fallback_enabled = 0; + s->isrpz = 0; } else yyerror("out of memory"); } @@ -344,6 +345,45 @@ content_auth: auth_name | auth_zonefile | auth_master | auth_url | auth_for_downstream | auth_for_upstream | auth_fallback_enabled | auth_allow_notify ; + +rpz_tag: VAR_TAGS STRING_ARG + { + OUTYY(("P(server_local_zone_tag:%s)\n", $2)); + size_t len = 0; + uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, $2, + &len); + free($2); + if(!bitlist) { + yyerror("could not parse tags, (define-tag them first)"); + } + if(bitlist) { + cfg_parser->cfg->auths->rpz_taglist = bitlist; + cfg_parser->cfg->auths->rpz_taglistlen = len; + + } + } + ; +rpzstart: VAR_RPZ + { + struct config_auth* s; + OUTYY(("\nP(rpz:)\n")); + s = (struct config_auth*)calloc(1, sizeof(struct config_auth)); + if(s) { + s->next = cfg_parser->cfg->auths; + cfg_parser->cfg->auths = s; + /* defaults for RPZ auth zone */ + s->for_downstream = 0; + s->for_upstream = 0; + s->fallback_enabled = 0; + s->isrpz = 1; + } else + yyerror("out of memory"); + } + ; +contents_rpz: contents_rpz content_rpz + | ; +content_rpz: auth_name | auth_zonefile | rpz_tag + ; server_num_threads: VAR_NUM_THREADS STRING_ARG { OUTYY(("P(server_num_threads:%s)\n", $2)); diff --git a/util/data/dname.c b/util/data/dname.c index c7360f75f..8d8a5294c 100644 --- a/util/data/dname.c +++ b/util/data/dname.c @@ -584,7 +584,7 @@ void dname_str(uint8_t* dname, char* str) return; } len += lablen+1; - if(len >= LDNS_MAX_DOMAINLEN-1) { + if(len >= LDNS_MAX_DOMAINLEN) { *s++ = '&'; *s = 0; return; From edcf2ddd12210296be014d110924e2bd706c8f0a Mon Sep 17 00:00:00 2001 From: Ralph Dolmans Date: Wed, 10 Apr 2019 11:53:08 +0200 Subject: [PATCH 03/56] - Fix locking issue - Fixes for compiler warnings --- .gitignore | 1 + services/localzone.c | 1 - services/rpz.c | 27 +- util/configparser.c | 1112 +++++++++++++++++++++--------------------- util/configparser.y | 6 +- 5 files changed, 587 insertions(+), 560 deletions(-) diff --git a/.gitignore b/.gitignore index f4527fd81..c4de56987 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ *.lo *.o +cscope.out /.libs/ /Makefile /autom4te.cache/ diff --git a/services/localzone.c b/services/localzone.c index 63ff915e1..337dcb4d6 100644 --- a/services/localzone.c +++ b/services/localzone.c @@ -1128,7 +1128,6 @@ local_zones_find_le(struct local_zones* zones, int* exact) { struct local_zone key; - int r; rbnode_type *node; key.node.key = &key; key.dclass = dclass; diff --git a/services/rpz.c b/services/rpz.c index 4f159cb34..0b6c8df0d 100644 --- a/services/rpz.c +++ b/services/rpz.c @@ -167,7 +167,11 @@ rpz_rr_to_action(uint16_t rr_type, uint8_t* rdatawl, size_t rdatalen) return RPZ_LOCAL_DATA_ACTION; } -/** Get RPZ trigger for dname */ +/** + * Get RPZ trigger for dname + * @param dname: dname containing RPZ trigger + * @return: RPZ trigger enum + */ static enum rpz_trigger rpz_dname_to_trigger(uint8_t* dname) { @@ -195,6 +199,7 @@ void rpz_delete(struct rpz* r) if(!r) return; local_zones_delete(r->local_zones); + free(r->taglist); free(r); } @@ -334,9 +339,26 @@ rpz_remove_rr(struct rpz* r, size_t aznamelen, uint8_t* dname, size_t rdatalen, uint8_t* rr, size_t rr_len) { /* TODO: remove RR, used for IXFR */ + /* void cast all to prevent compiler warning */ + (void)r; + (void)aznamelen; + (void)dname; + (void)dnamelen; + (void)rr_type; + (void)rr_class; + (void)rdatawl; + (void)rdatalen; + (void)rr; + (void)rr_len; } -struct local_zone* +/** + * Find RPZ local-zone by qname. + * @param r: rpz containing local-zone tree + * @param qinfo: qinfo struct + * @return: NULL or local-zone holding rd lock + */ +static struct local_zone* rpz_find_zone(struct rpz* r, struct query_info* qinfo) { uint8_t* ce; @@ -352,6 +374,7 @@ rpz_find_zone(struct rpz* r, struct query_info* qinfo) lock_rw_unlock(&r->local_zones->lock); return NULL; } + lock_rw_rdlock(&z->lock); lock_rw_unlock(&r->local_zones->lock); if(exact) diff --git a/util/configparser.c b/util/configparser.c index 8f54d71e8..e19e3f8e8 100644 --- a/util/configparser.c +++ b/util/configparser.c @@ -1036,38 +1036,38 @@ static const yytype_uint16 yyrline[] = 286, 286, 286, 286, 286, 287, 287, 289, 301, 302, 303, 303, 303, 303, 304, 304, 306, 320, 321, 322, 322, 322, 322, 323, 323, 323, 325, 342, 343, 344, - 344, 344, 344, 345, 345, 345, 346, 349, 366, 383, - 384, 385, 385, 385, 387, 396, 405, 416, 425, 434, - 443, 454, 463, 474, 487, 502, 513, 530, 547, 564, - 581, 596, 611, 624, 639, 648, 657, 666, 675, 684, - 693, 702, 711, 720, 729, 738, 747, 756, 769, 778, - 791, 800, 809, 818, 825, 832, 841, 848, 857, 865, - 872, 879, 887, 896, 905, 919, 928, 937, 946, 955, - 964, 973, 980, 987, 1013, 1021, 1028, 1035, 1042, 1049, - 1057, 1065, 1073, 1080, 1091, 1102, 1109, 1118, 1127, 1136, - 1143, 1150, 1158, 1166, 1176, 1186, 1196, 1204, 1217, 1228, - 1236, 1249, 1258, 1267, 1276, 1286, 1296, 1304, 1317, 1326, - 1334, 1343, 1351, 1364, 1373, 1380, 1390, 1400, 1410, 1420, - 1430, 1440, 1450, 1460, 1467, 1474, 1481, 1490, 1499, 1508, - 1517, 1524, 1534, 1554, 1561, 1579, 1592, 1605, 1614, 1623, - 1632, 1641, 1651, 1661, 1672, 1681, 1690, 1699, 1708, 1721, - 1734, 1743, 1750, 1759, 1768, 1777, 1786, 1794, 1807, 1815, - 1848, 1855, 1870, 1880, 1890, 1897, 1904, 1911, 1920, 1928, - 1942, 1963, 1984, 1996, 2008, 2020, 2029, 2050, 2060, 2069, - 2077, 2085, 2098, 2111, 2126, 2141, 2150, 2159, 2165, 2174, - 2183, 2193, 2203, 2216, 2229, 2241, 2255, 2267, 2281, 2291, - 2298, 2305, 2314, 2323, 2333, 2343, 2353, 2360, 2367, 2376, - 2385, 2395, 2405, 2412, 2419, 2426, 2434, 2444, 2454, 2464, - 2474, 2506, 2516, 2524, 2532, 2547, 2556, 2561, 2562, 2563, - 2563, 2563, 2564, 2564, 2564, 2565, 2565, 2567, 2577, 2586, - 2593, 2600, 2607, 2614, 2621, 2628, 2633, 2634, 2635, 2635, - 2636, 2636, 2637, 2637, 2638, 2639, 2640, 2641, 2642, 2643, - 2645, 2654, 2661, 2670, 2679, 2686, 2693, 2703, 2713, 2723, - 2733, 2743, 2753, 2758, 2759, 2760, 2762, 2768, 2778, 2785, - 2794, 2802, 2807, 2808, 2810, 2810, 2810, 2811, 2811, 2812, - 2813, 2814, 2815, 2816, 2818, 2828, 2837, 2844, 2853, 2860, - 2869, 2877, 2890, 2898, 2911, 2916, 2917, 2918, 2918, 2919, - 2919, 2919, 2921, 2936, 2951, 2963, 2978, 2991 + 344, 344, 344, 345, 345, 345, 346, 349, 368, 385, + 386, 387, 387, 387, 389, 398, 407, 418, 427, 436, + 445, 456, 465, 476, 489, 504, 515, 532, 549, 566, + 583, 598, 613, 626, 641, 650, 659, 668, 677, 686, + 695, 704, 713, 722, 731, 740, 749, 758, 771, 780, + 793, 802, 811, 820, 827, 834, 843, 850, 859, 867, + 874, 881, 889, 898, 907, 921, 930, 939, 948, 957, + 966, 975, 982, 989, 1015, 1023, 1030, 1037, 1044, 1051, + 1059, 1067, 1075, 1082, 1093, 1104, 1111, 1120, 1129, 1138, + 1145, 1152, 1160, 1168, 1178, 1188, 1198, 1206, 1219, 1230, + 1238, 1251, 1260, 1269, 1278, 1288, 1298, 1306, 1319, 1328, + 1336, 1345, 1353, 1366, 1375, 1382, 1392, 1402, 1412, 1422, + 1432, 1442, 1452, 1462, 1469, 1476, 1483, 1492, 1501, 1510, + 1519, 1526, 1536, 1556, 1563, 1581, 1594, 1607, 1616, 1625, + 1634, 1643, 1653, 1663, 1674, 1683, 1692, 1701, 1710, 1723, + 1736, 1745, 1752, 1761, 1770, 1779, 1788, 1796, 1809, 1817, + 1850, 1857, 1872, 1882, 1892, 1899, 1906, 1913, 1922, 1930, + 1944, 1965, 1986, 1998, 2010, 2022, 2031, 2052, 2062, 2071, + 2079, 2087, 2100, 2113, 2128, 2143, 2152, 2161, 2167, 2176, + 2185, 2195, 2205, 2218, 2231, 2243, 2257, 2269, 2283, 2293, + 2300, 2307, 2316, 2325, 2335, 2345, 2355, 2362, 2369, 2378, + 2387, 2397, 2407, 2414, 2421, 2428, 2436, 2446, 2456, 2466, + 2476, 2508, 2518, 2526, 2534, 2549, 2558, 2563, 2564, 2565, + 2565, 2565, 2566, 2566, 2566, 2567, 2567, 2569, 2579, 2588, + 2595, 2602, 2609, 2616, 2623, 2630, 2635, 2636, 2637, 2637, + 2638, 2638, 2639, 2639, 2640, 2641, 2642, 2643, 2644, 2645, + 2647, 2656, 2663, 2672, 2681, 2688, 2695, 2705, 2715, 2725, + 2735, 2745, 2755, 2760, 2761, 2762, 2764, 2770, 2780, 2787, + 2796, 2804, 2809, 2810, 2812, 2812, 2812, 2813, 2813, 2814, + 2815, 2816, 2817, 2818, 2820, 2830, 2839, 2846, 2855, 2862, + 2871, 2879, 2892, 2900, 2913, 2918, 2919, 2920, 2920, 2921, + 2921, 2921, 2923, 2938, 2953, 2965, 2980, 2993 }; #endif @@ -2677,9 +2677,11 @@ yyreduce: case 247: #line 350 "./util/configparser.y" /* yacc.c:1646 */ { + size_t len; + uint8_t* bitlist; OUTYY(("P(server_local_zone_tag:%s)\n", (yyvsp[0].str))); - size_t len = 0; - uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), + len = 0; + bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), &len); free((yyvsp[0].str)); if(!bitlist) { @@ -2691,11 +2693,11 @@ yyreduce: } } -#line 2695 "util/configparser.c" /* yacc.c:1646 */ +#line 2697 "util/configparser.c" /* yacc.c:1646 */ break; case 248: -#line 367 "./util/configparser.y" /* yacc.c:1646 */ +#line 369 "./util/configparser.y" /* yacc.c:1646 */ { struct config_auth* s; OUTYY(("\nP(rpz:)\n")); @@ -2711,11 +2713,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 2715 "util/configparser.c" /* yacc.c:1646 */ +#line 2717 "util/configparser.c" /* yacc.c:1646 */ break; case 254: -#line 388 "./util/configparser.y" /* yacc.c:1646 */ +#line 390 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_num_threads:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -2723,11 +2725,11 @@ yyreduce: else cfg_parser->cfg->num_threads = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2727 "util/configparser.c" /* yacc.c:1646 */ +#line 2729 "util/configparser.c" /* yacc.c:1646 */ break; case 255: -#line 397 "./util/configparser.y" /* yacc.c:1646 */ +#line 399 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_verbosity:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -2735,11 +2737,11 @@ yyreduce: else cfg_parser->cfg->verbosity = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2739 "util/configparser.c" /* yacc.c:1646 */ +#line 2741 "util/configparser.c" /* yacc.c:1646 */ break; case 256: -#line 406 "./util/configparser.y" /* yacc.c:1646 */ +#line 408 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_statistics_interval:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "") == 0 || strcmp((yyvsp[0].str), "0") == 0) @@ -2749,11 +2751,11 @@ yyreduce: else cfg_parser->cfg->stat_interval = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2753 "util/configparser.c" /* yacc.c:1646 */ +#line 2755 "util/configparser.c" /* yacc.c:1646 */ break; case 257: -#line 417 "./util/configparser.y" /* yacc.c:1646 */ +#line 419 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_statistics_cumulative:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2761,11 +2763,11 @@ yyreduce: else cfg_parser->cfg->stat_cumulative = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2765 "util/configparser.c" /* yacc.c:1646 */ +#line 2767 "util/configparser.c" /* yacc.c:1646 */ break; case 258: -#line 426 "./util/configparser.y" /* yacc.c:1646 */ +#line 428 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_extended_statistics:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2773,11 +2775,11 @@ yyreduce: else cfg_parser->cfg->stat_extended = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2777 "util/configparser.c" /* yacc.c:1646 */ +#line 2779 "util/configparser.c" /* yacc.c:1646 */ break; case 259: -#line 435 "./util/configparser.y" /* yacc.c:1646 */ +#line 437 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_shm_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2785,11 +2787,11 @@ yyreduce: else cfg_parser->cfg->shm_enable = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2789 "util/configparser.c" /* yacc.c:1646 */ +#line 2791 "util/configparser.c" /* yacc.c:1646 */ break; case 260: -#line 444 "./util/configparser.y" /* yacc.c:1646 */ +#line 446 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_shm_key:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "") == 0 || strcmp((yyvsp[0].str), "0") == 0) @@ -2799,11 +2801,11 @@ yyreduce: else cfg_parser->cfg->shm_key = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2803 "util/configparser.c" /* yacc.c:1646 */ +#line 2805 "util/configparser.c" /* yacc.c:1646 */ break; case 261: -#line 455 "./util/configparser.y" /* yacc.c:1646 */ +#line 457 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -2811,11 +2813,11 @@ yyreduce: else cfg_parser->cfg->port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2815 "util/configparser.c" /* yacc.c:1646 */ +#line 2817 "util/configparser.c" /* yacc.c:1646 */ break; case 262: -#line 464 "./util/configparser.y" /* yacc.c:1646 */ +#line 466 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(server_send_client_subnet:%s)\n", (yyvsp[0].str))); @@ -2825,11 +2827,11 @@ yyreduce: OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); #endif } -#line 2829 "util/configparser.c" /* yacc.c:1646 */ +#line 2831 "util/configparser.c" /* yacc.c:1646 */ break; case 263: -#line 475 "./util/configparser.y" /* yacc.c:1646 */ +#line 477 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(server_client_subnet_zone:%s)\n", (yyvsp[0].str))); @@ -2840,11 +2842,11 @@ yyreduce: OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); #endif } -#line 2844 "util/configparser.c" /* yacc.c:1646 */ +#line 2846 "util/configparser.c" /* yacc.c:1646 */ break; case 264: -#line 488 "./util/configparser.y" /* yacc.c:1646 */ +#line 490 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(server_client_subnet_always_forward:%s)\n", (yyvsp[0].str))); @@ -2858,11 +2860,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 2862 "util/configparser.c" /* yacc.c:1646 */ +#line 2864 "util/configparser.c" /* yacc.c:1646 */ break; case 265: -#line 503 "./util/configparser.y" /* yacc.c:1646 */ +#line 505 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(client_subnet_opcode:%s)\n", (yyvsp[0].str))); @@ -2872,11 +2874,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 2876 "util/configparser.c" /* yacc.c:1646 */ +#line 2878 "util/configparser.c" /* yacc.c:1646 */ break; case 266: -#line 514 "./util/configparser.y" /* yacc.c:1646 */ +#line 516 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(max_client_subnet_ipv4:%s)\n", (yyvsp[0].str))); @@ -2892,11 +2894,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 2896 "util/configparser.c" /* yacc.c:1646 */ +#line 2898 "util/configparser.c" /* yacc.c:1646 */ break; case 267: -#line 531 "./util/configparser.y" /* yacc.c:1646 */ +#line 533 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(max_client_subnet_ipv6:%s)\n", (yyvsp[0].str))); @@ -2912,11 +2914,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 2916 "util/configparser.c" /* yacc.c:1646 */ +#line 2918 "util/configparser.c" /* yacc.c:1646 */ break; case 268: -#line 548 "./util/configparser.y" /* yacc.c:1646 */ +#line 550 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(min_client_subnet_ipv4:%s)\n", (yyvsp[0].str))); @@ -2932,11 +2934,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 2936 "util/configparser.c" /* yacc.c:1646 */ +#line 2938 "util/configparser.c" /* yacc.c:1646 */ break; case 269: -#line 565 "./util/configparser.y" /* yacc.c:1646 */ +#line 567 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(min_client_subnet_ipv6:%s)\n", (yyvsp[0].str))); @@ -2952,11 +2954,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 2956 "util/configparser.c" /* yacc.c:1646 */ +#line 2958 "util/configparser.c" /* yacc.c:1646 */ break; case 270: -#line 582 "./util/configparser.y" /* yacc.c:1646 */ +#line 584 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(max_ecs_tree_size_ipv4:%s)\n", (yyvsp[0].str))); @@ -2970,11 +2972,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 2974 "util/configparser.c" /* yacc.c:1646 */ +#line 2976 "util/configparser.c" /* yacc.c:1646 */ break; case 271: -#line 597 "./util/configparser.y" /* yacc.c:1646 */ +#line 599 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(max_ecs_tree_size_ipv6:%s)\n", (yyvsp[0].str))); @@ -2988,11 +2990,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 2992 "util/configparser.c" /* yacc.c:1646 */ +#line 2994 "util/configparser.c" /* yacc.c:1646 */ break; case 272: -#line 612 "./util/configparser.y" /* yacc.c:1646 */ +#line 614 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_interface:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->num_ifs == 0) @@ -3004,11 +3006,11 @@ yyreduce: else cfg_parser->cfg->ifs[cfg_parser->cfg->num_ifs++] = (yyvsp[0].str); } -#line 3008 "util/configparser.c" /* yacc.c:1646 */ +#line 3010 "util/configparser.c" /* yacc.c:1646 */ break; case 273: -#line 625 "./util/configparser.y" /* yacc.c:1646 */ +#line 627 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_interface:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->num_out_ifs == 0) @@ -3022,11 +3024,11 @@ yyreduce: cfg_parser->cfg->out_ifs[ cfg_parser->cfg->num_out_ifs++] = (yyvsp[0].str); } -#line 3026 "util/configparser.c" /* yacc.c:1646 */ +#line 3028 "util/configparser.c" /* yacc.c:1646 */ break; case 274: -#line 640 "./util/configparser.y" /* yacc.c:1646 */ +#line 642 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_range:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3034,11 +3036,11 @@ yyreduce: else cfg_parser->cfg->outgoing_num_ports = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3038 "util/configparser.c" /* yacc.c:1646 */ +#line 3040 "util/configparser.c" /* yacc.c:1646 */ break; case 275: -#line 649 "./util/configparser.y" /* yacc.c:1646 */ +#line 651 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_port_permit:%s)\n", (yyvsp[0].str))); if(!cfg_mark_ports((yyvsp[0].str), 1, @@ -3046,11 +3048,11 @@ yyreduce: yyerror("port number or range (\"low-high\") expected"); free((yyvsp[0].str)); } -#line 3050 "util/configparser.c" /* yacc.c:1646 */ +#line 3052 "util/configparser.c" /* yacc.c:1646 */ break; case 276: -#line 658 "./util/configparser.y" /* yacc.c:1646 */ +#line 660 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_port_avoid:%s)\n", (yyvsp[0].str))); if(!cfg_mark_ports((yyvsp[0].str), 0, @@ -3058,11 +3060,11 @@ yyreduce: yyerror("port number or range (\"low-high\") expected"); free((yyvsp[0].str)); } -#line 3062 "util/configparser.c" /* yacc.c:1646 */ +#line 3064 "util/configparser.c" /* yacc.c:1646 */ break; case 277: -#line 667 "./util/configparser.y" /* yacc.c:1646 */ +#line 669 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_num_tcp:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3070,11 +3072,11 @@ yyreduce: else cfg_parser->cfg->outgoing_num_tcp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3074 "util/configparser.c" /* yacc.c:1646 */ +#line 3076 "util/configparser.c" /* yacc.c:1646 */ break; case 278: -#line 676 "./util/configparser.y" /* yacc.c:1646 */ +#line 678 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_incoming_num_tcp:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3082,11 +3084,11 @@ yyreduce: else cfg_parser->cfg->incoming_num_tcp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3086 "util/configparser.c" /* yacc.c:1646 */ +#line 3088 "util/configparser.c" /* yacc.c:1646 */ break; case 279: -#line 685 "./util/configparser.y" /* yacc.c:1646 */ +#line 687 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_interface_automatic:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3094,11 +3096,11 @@ yyreduce: else cfg_parser->cfg->if_automatic = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3098 "util/configparser.c" /* yacc.c:1646 */ +#line 3100 "util/configparser.c" /* yacc.c:1646 */ break; case 280: -#line 694 "./util/configparser.y" /* yacc.c:1646 */ +#line 696 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_ip4:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3106,11 +3108,11 @@ yyreduce: else cfg_parser->cfg->do_ip4 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3110 "util/configparser.c" /* yacc.c:1646 */ +#line 3112 "util/configparser.c" /* yacc.c:1646 */ break; case 281: -#line 703 "./util/configparser.y" /* yacc.c:1646 */ +#line 705 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_ip6:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3118,11 +3120,11 @@ yyreduce: else cfg_parser->cfg->do_ip6 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3122 "util/configparser.c" /* yacc.c:1646 */ +#line 3124 "util/configparser.c" /* yacc.c:1646 */ break; case 282: -#line 712 "./util/configparser.y" /* yacc.c:1646 */ +#line 714 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_udp:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3130,11 +3132,11 @@ yyreduce: else cfg_parser->cfg->do_udp = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3134 "util/configparser.c" /* yacc.c:1646 */ +#line 3136 "util/configparser.c" /* yacc.c:1646 */ break; case 283: -#line 721 "./util/configparser.y" /* yacc.c:1646 */ +#line 723 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_tcp:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3142,11 +3144,11 @@ yyreduce: else cfg_parser->cfg->do_tcp = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3146 "util/configparser.c" /* yacc.c:1646 */ +#line 3148 "util/configparser.c" /* yacc.c:1646 */ break; case 284: -#line 730 "./util/configparser.y" /* yacc.c:1646 */ +#line 732 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_prefer_ip6:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3154,11 +3156,11 @@ yyreduce: else cfg_parser->cfg->prefer_ip6 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3158 "util/configparser.c" /* yacc.c:1646 */ +#line 3160 "util/configparser.c" /* yacc.c:1646 */ break; case 285: -#line 739 "./util/configparser.y" /* yacc.c:1646 */ +#line 741 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tcp_mss:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3166,11 +3168,11 @@ yyreduce: else cfg_parser->cfg->tcp_mss = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3170 "util/configparser.c" /* yacc.c:1646 */ +#line 3172 "util/configparser.c" /* yacc.c:1646 */ break; case 286: -#line 748 "./util/configparser.y" /* yacc.c:1646 */ +#line 750 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_tcp_mss:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3178,11 +3180,11 @@ yyreduce: else cfg_parser->cfg->outgoing_tcp_mss = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3182 "util/configparser.c" /* yacc.c:1646 */ +#line 3184 "util/configparser.c" /* yacc.c:1646 */ break; case 287: -#line 757 "./util/configparser.y" /* yacc.c:1646 */ +#line 759 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tcp_idle_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3194,11 +3196,11 @@ yyreduce: else cfg_parser->cfg->tcp_idle_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3198 "util/configparser.c" /* yacc.c:1646 */ +#line 3200 "util/configparser.c" /* yacc.c:1646 */ break; case 288: -#line 770 "./util/configparser.y" /* yacc.c:1646 */ +#line 772 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tcp_keepalive:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3206,11 +3208,11 @@ yyreduce: else cfg_parser->cfg->do_tcp_keepalive = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3210 "util/configparser.c" /* yacc.c:1646 */ +#line 3212 "util/configparser.c" /* yacc.c:1646 */ break; case 289: -#line 779 "./util/configparser.y" /* yacc.c:1646 */ +#line 781 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tcp_keepalive_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3222,11 +3224,11 @@ yyreduce: else cfg_parser->cfg->tcp_keepalive_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3226 "util/configparser.c" /* yacc.c:1646 */ +#line 3228 "util/configparser.c" /* yacc.c:1646 */ break; case 290: -#line 792 "./util/configparser.y" /* yacc.c:1646 */ +#line 794 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tcp_upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3234,11 +3236,11 @@ yyreduce: else cfg_parser->cfg->tcp_upstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3238 "util/configparser.c" /* yacc.c:1646 */ +#line 3240 "util/configparser.c" /* yacc.c:1646 */ break; case 291: -#line 801 "./util/configparser.y" /* yacc.c:1646 */ +#line 803 "./util/configparser.y" /* yacc.c:1646 */ { 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) @@ -3246,11 +3248,11 @@ yyreduce: else cfg_parser->cfg->udp_upstream_without_downstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3250 "util/configparser.c" /* yacc.c:1646 */ +#line 3252 "util/configparser.c" /* yacc.c:1646 */ break; case 292: -#line 810 "./util/configparser.y" /* yacc.c:1646 */ +#line 812 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ssl_upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3258,31 +3260,31 @@ yyreduce: else cfg_parser->cfg->ssl_upstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3262 "util/configparser.c" /* yacc.c:1646 */ +#line 3264 "util/configparser.c" /* yacc.c:1646 */ break; case 293: -#line 819 "./util/configparser.y" /* yacc.c:1646 */ +#line 821 "./util/configparser.y" /* yacc.c:1646 */ { 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 3272 "util/configparser.c" /* yacc.c:1646 */ +#line 3274 "util/configparser.c" /* yacc.c:1646 */ break; case 294: -#line 826 "./util/configparser.y" /* yacc.c:1646 */ +#line 828 "./util/configparser.y" /* yacc.c:1646 */ { 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 3282 "util/configparser.c" /* yacc.c:1646 */ +#line 3284 "util/configparser.c" /* yacc.c:1646 */ break; case 295: -#line 833 "./util/configparser.y" /* yacc.c:1646 */ +#line 835 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ssl_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3290,21 +3292,21 @@ yyreduce: else cfg_parser->cfg->ssl_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3294 "util/configparser.c" /* yacc.c:1646 */ +#line 3296 "util/configparser.c" /* yacc.c:1646 */ break; case 296: -#line 842 "./util/configparser.y" /* yacc.c:1646 */ +#line 844 "./util/configparser.y" /* yacc.c:1646 */ { 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 3304 "util/configparser.c" /* yacc.c:1646 */ +#line 3306 "util/configparser.c" /* yacc.c:1646 */ break; case 297: -#line 849 "./util/configparser.y" /* yacc.c:1646 */ +#line 851 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tls_win_cert:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3312,53 +3314,53 @@ yyreduce: else cfg_parser->cfg->tls_win_cert = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3316 "util/configparser.c" /* yacc.c:1646 */ +#line 3318 "util/configparser.c" /* yacc.c:1646 */ break; case 298: -#line 858 "./util/configparser.y" /* yacc.c:1646 */ +#line 860 "./util/configparser.y" /* yacc.c:1646 */ { 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 3327 "util/configparser.c" /* yacc.c:1646 */ +#line 3329 "util/configparser.c" /* yacc.c:1646 */ break; case 299: -#line 866 "./util/configparser.y" /* yacc.c:1646 */ +#line 868 "./util/configparser.y" /* yacc.c:1646 */ { 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 3337 "util/configparser.c" /* yacc.c:1646 */ +#line 3339 "util/configparser.c" /* yacc.c:1646 */ break; case 300: -#line 873 "./util/configparser.y" /* yacc.c:1646 */ +#line 875 "./util/configparser.y" /* yacc.c:1646 */ { 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 3347 "util/configparser.c" /* yacc.c:1646 */ +#line 3349 "util/configparser.c" /* yacc.c:1646 */ break; case 301: -#line 880 "./util/configparser.y" /* yacc.c:1646 */ +#line 882 "./util/configparser.y" /* yacc.c:1646 */ { 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 3358 "util/configparser.c" /* yacc.c:1646 */ +#line 3360 "util/configparser.c" /* yacc.c:1646 */ break; case 302: -#line 888 "./util/configparser.y" /* yacc.c:1646 */ +#line 890 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_use_systemd:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3366,11 +3368,11 @@ yyreduce: else cfg_parser->cfg->use_systemd = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3370 "util/configparser.c" /* yacc.c:1646 */ +#line 3372 "util/configparser.c" /* yacc.c:1646 */ break; case 303: -#line 897 "./util/configparser.y" /* yacc.c:1646 */ +#line 899 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_daemonize:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3378,11 +3380,11 @@ yyreduce: else cfg_parser->cfg->do_daemonize = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3382 "util/configparser.c" /* yacc.c:1646 */ +#line 3384 "util/configparser.c" /* yacc.c:1646 */ break; case 304: -#line 906 "./util/configparser.y" /* yacc.c:1646 */ +#line 908 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_use_syslog:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3395,11 +3397,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3399 "util/configparser.c" /* yacc.c:1646 */ +#line 3401 "util/configparser.c" /* yacc.c:1646 */ break; case 305: -#line 920 "./util/configparser.y" /* yacc.c:1646 */ +#line 922 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_time_ascii:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3407,11 +3409,11 @@ yyreduce: else cfg_parser->cfg->log_time_ascii = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3411 "util/configparser.c" /* yacc.c:1646 */ +#line 3413 "util/configparser.c" /* yacc.c:1646 */ break; case 306: -#line 929 "./util/configparser.y" /* yacc.c:1646 */ +#line 931 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_queries:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3419,11 +3421,11 @@ yyreduce: else cfg_parser->cfg->log_queries = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3423 "util/configparser.c" /* yacc.c:1646 */ +#line 3425 "util/configparser.c" /* yacc.c:1646 */ break; case 307: -#line 938 "./util/configparser.y" /* yacc.c:1646 */ +#line 940 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_replies:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3431,11 +3433,11 @@ yyreduce: else cfg_parser->cfg->log_replies = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3435 "util/configparser.c" /* yacc.c:1646 */ +#line 3437 "util/configparser.c" /* yacc.c:1646 */ break; case 308: -#line 947 "./util/configparser.y" /* yacc.c:1646 */ +#line 949 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_tag_queryreply:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3443,11 +3445,11 @@ yyreduce: else cfg_parser->cfg->log_tag_queryreply = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3447 "util/configparser.c" /* yacc.c:1646 */ +#line 3449 "util/configparser.c" /* yacc.c:1646 */ break; case 309: -#line 956 "./util/configparser.y" /* yacc.c:1646 */ +#line 958 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_servfail:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3455,11 +3457,11 @@ yyreduce: else cfg_parser->cfg->log_servfail = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3459 "util/configparser.c" /* yacc.c:1646 */ +#line 3461 "util/configparser.c" /* yacc.c:1646 */ break; case 310: -#line 965 "./util/configparser.y" /* yacc.c:1646 */ +#line 967 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_local_actions:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3467,31 +3469,31 @@ yyreduce: else cfg_parser->cfg->log_local_actions = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3471 "util/configparser.c" /* yacc.c:1646 */ +#line 3473 "util/configparser.c" /* yacc.c:1646 */ break; case 311: -#line 974 "./util/configparser.y" /* yacc.c:1646 */ +#line 976 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_chroot:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->chrootdir); cfg_parser->cfg->chrootdir = (yyvsp[0].str); } -#line 3481 "util/configparser.c" /* yacc.c:1646 */ +#line 3483 "util/configparser.c" /* yacc.c:1646 */ break; case 312: -#line 981 "./util/configparser.y" /* yacc.c:1646 */ +#line 983 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_username:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->username); cfg_parser->cfg->username = (yyvsp[0].str); } -#line 3491 "util/configparser.c" /* yacc.c:1646 */ +#line 3493 "util/configparser.c" /* yacc.c:1646 */ break; case 313: -#line 988 "./util/configparser.y" /* yacc.c:1646 */ +#line 990 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_directory:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->directory); @@ -3516,105 +3518,105 @@ yyreduce: } } } -#line 3520 "util/configparser.c" /* yacc.c:1646 */ +#line 3522 "util/configparser.c" /* yacc.c:1646 */ break; case 314: -#line 1014 "./util/configparser.y" /* yacc.c:1646 */ +#line 1016 "./util/configparser.y" /* yacc.c:1646 */ { 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 3531 "util/configparser.c" /* yacc.c:1646 */ +#line 3533 "util/configparser.c" /* yacc.c:1646 */ break; case 315: -#line 1022 "./util/configparser.y" /* yacc.c:1646 */ +#line 1024 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_pidfile:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->pidfile); cfg_parser->cfg->pidfile = (yyvsp[0].str); } -#line 3541 "util/configparser.c" /* yacc.c:1646 */ +#line 3543 "util/configparser.c" /* yacc.c:1646 */ break; case 316: -#line 1029 "./util/configparser.y" /* yacc.c:1646 */ +#line 1031 "./util/configparser.y" /* yacc.c:1646 */ { 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 3551 "util/configparser.c" /* yacc.c:1646 */ +#line 3553 "util/configparser.c" /* yacc.c:1646 */ break; case 317: -#line 1036 "./util/configparser.y" /* yacc.c:1646 */ +#line 1038 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_dlv_anchor_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dlv_anchor_file); cfg_parser->cfg->dlv_anchor_file = (yyvsp[0].str); } -#line 3561 "util/configparser.c" /* yacc.c:1646 */ +#line 3563 "util/configparser.c" /* yacc.c:1646 */ break; case 318: -#line 1043 "./util/configparser.y" /* yacc.c:1646 */ +#line 1045 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_dlv_anchor:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->dlv_anchor_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3571 "util/configparser.c" /* yacc.c:1646 */ +#line 3573 "util/configparser.c" /* yacc.c:1646 */ break; case 319: -#line 1050 "./util/configparser.y" /* yacc.c:1646 */ +#line 1052 "./util/configparser.y" /* yacc.c:1646 */ { 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 3582 "util/configparser.c" /* yacc.c:1646 */ +#line 3584 "util/configparser.c" /* yacc.c:1646 */ break; case 320: -#line 1058 "./util/configparser.y" /* yacc.c:1646 */ +#line 1060 "./util/configparser.y" /* yacc.c:1646 */ { 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 3593 "util/configparser.c" /* yacc.c:1646 */ +#line 3595 "util/configparser.c" /* yacc.c:1646 */ break; case 321: -#line 1066 "./util/configparser.y" /* yacc.c:1646 */ +#line 1068 "./util/configparser.y" /* yacc.c:1646 */ { 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 3604 "util/configparser.c" /* yacc.c:1646 */ +#line 3606 "util/configparser.c" /* yacc.c:1646 */ break; case 322: -#line 1074 "./util/configparser.y" /* yacc.c:1646 */ +#line 1076 "./util/configparser.y" /* yacc.c:1646 */ { 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 3614 "util/configparser.c" /* yacc.c:1646 */ +#line 3616 "util/configparser.c" /* yacc.c:1646 */ break; case 323: -#line 1081 "./util/configparser.y" /* yacc.c:1646 */ +#line 1083 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_trust_anchor_signaling:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3624,11 +3626,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3628 "util/configparser.c" /* yacc.c:1646 */ +#line 3630 "util/configparser.c" /* yacc.c:1646 */ break; case 324: -#line 1092 "./util/configparser.y" /* yacc.c:1646 */ +#line 1094 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_root_key_sentinel:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3638,21 +3640,21 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3642 "util/configparser.c" /* yacc.c:1646 */ +#line 3644 "util/configparser.c" /* yacc.c:1646 */ break; case 325: -#line 1103 "./util/configparser.y" /* yacc.c:1646 */ +#line 1105 "./util/configparser.y" /* yacc.c:1646 */ { 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 3652 "util/configparser.c" /* yacc.c:1646 */ +#line 3654 "util/configparser.c" /* yacc.c:1646 */ break; case 326: -#line 1110 "./util/configparser.y" /* yacc.c:1646 */ +#line 1112 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_hide_identity:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3660,11 +3662,11 @@ yyreduce: else cfg_parser->cfg->hide_identity = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3664 "util/configparser.c" /* yacc.c:1646 */ +#line 3666 "util/configparser.c" /* yacc.c:1646 */ break; case 327: -#line 1119 "./util/configparser.y" /* yacc.c:1646 */ +#line 1121 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_hide_version:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3672,11 +3674,11 @@ yyreduce: else cfg_parser->cfg->hide_version = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3676 "util/configparser.c" /* yacc.c:1646 */ +#line 3678 "util/configparser.c" /* yacc.c:1646 */ break; case 328: -#line 1128 "./util/configparser.y" /* yacc.c:1646 */ +#line 1130 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_hide_trustanchor:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3684,53 +3686,53 @@ yyreduce: else cfg_parser->cfg->hide_trustanchor = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3688 "util/configparser.c" /* yacc.c:1646 */ +#line 3690 "util/configparser.c" /* yacc.c:1646 */ break; case 329: -#line 1137 "./util/configparser.y" /* yacc.c:1646 */ +#line 1139 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_identity:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->identity); cfg_parser->cfg->identity = (yyvsp[0].str); } -#line 3698 "util/configparser.c" /* yacc.c:1646 */ +#line 3700 "util/configparser.c" /* yacc.c:1646 */ break; case 330: -#line 1144 "./util/configparser.y" /* yacc.c:1646 */ +#line 1146 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_version:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->version); cfg_parser->cfg->version = (yyvsp[0].str); } -#line 3708 "util/configparser.c" /* yacc.c:1646 */ +#line 3710 "util/configparser.c" /* yacc.c:1646 */ break; case 331: -#line 1151 "./util/configparser.y" /* yacc.c:1646 */ +#line 1153 "./util/configparser.y" /* yacc.c:1646 */ { 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 3719 "util/configparser.c" /* yacc.c:1646 */ +#line 3721 "util/configparser.c" /* yacc.c:1646 */ break; case 332: -#line 1159 "./util/configparser.y" /* yacc.c:1646 */ +#line 1161 "./util/configparser.y" /* yacc.c:1646 */ { 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 3730 "util/configparser.c" /* yacc.c:1646 */ +#line 3732 "util/configparser.c" /* yacc.c:1646 */ break; case 333: -#line 1167 "./util/configparser.y" /* yacc.c:1646 */ +#line 1169 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_so_reuseport:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3739,11 +3741,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3743 "util/configparser.c" /* yacc.c:1646 */ +#line 3745 "util/configparser.c" /* yacc.c:1646 */ break; case 334: -#line 1177 "./util/configparser.y" /* yacc.c:1646 */ +#line 1179 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_transparent:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3752,11 +3754,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3756 "util/configparser.c" /* yacc.c:1646 */ +#line 3758 "util/configparser.c" /* yacc.c:1646 */ break; case 335: -#line 1187 "./util/configparser.y" /* yacc.c:1646 */ +#line 1189 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_freebind:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3765,22 +3767,22 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3769 "util/configparser.c" /* yacc.c:1646 */ +#line 3771 "util/configparser.c" /* yacc.c:1646 */ break; case 336: -#line 1197 "./util/configparser.y" /* yacc.c:1646 */ +#line 1199 "./util/configparser.y" /* yacc.c:1646 */ { 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 3780 "util/configparser.c" /* yacc.c:1646 */ +#line 3782 "util/configparser.c" /* yacc.c:1646 */ break; case 337: -#line 1205 "./util/configparser.y" /* yacc.c:1646 */ +#line 1207 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_edns_buffer_size:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3792,11 +3794,11 @@ yyreduce: else cfg_parser->cfg->edns_buffer_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3796 "util/configparser.c" /* yacc.c:1646 */ +#line 3798 "util/configparser.c" /* yacc.c:1646 */ break; case 338: -#line 1218 "./util/configparser.y" /* yacc.c:1646 */ +#line 1220 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_msg_buffer_size:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3806,22 +3808,22 @@ yyreduce: else cfg_parser->cfg->msg_buffer_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3810 "util/configparser.c" /* yacc.c:1646 */ +#line 3812 "util/configparser.c" /* yacc.c:1646 */ break; case 339: -#line 1229 "./util/configparser.y" /* yacc.c:1646 */ +#line 1231 "./util/configparser.y" /* yacc.c:1646 */ { 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 3821 "util/configparser.c" /* yacc.c:1646 */ +#line 3823 "util/configparser.c" /* yacc.c:1646 */ break; case 340: -#line 1237 "./util/configparser.y" /* yacc.c:1646 */ +#line 1239 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_msg_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3833,11 +3835,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 3837 "util/configparser.c" /* yacc.c:1646 */ +#line 3839 "util/configparser.c" /* yacc.c:1646 */ break; case 341: -#line 1250 "./util/configparser.y" /* yacc.c:1646 */ +#line 1252 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_num_queries_per_thread:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3845,11 +3847,11 @@ yyreduce: else cfg_parser->cfg->num_queries_per_thread = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3849 "util/configparser.c" /* yacc.c:1646 */ +#line 3851 "util/configparser.c" /* yacc.c:1646 */ break; case 342: -#line 1259 "./util/configparser.y" /* yacc.c:1646 */ +#line 1261 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_jostle_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3857,11 +3859,11 @@ yyreduce: else cfg_parser->cfg->jostle_time = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3861 "util/configparser.c" /* yacc.c:1646 */ +#line 3863 "util/configparser.c" /* yacc.c:1646 */ break; case 343: -#line 1268 "./util/configparser.y" /* yacc.c:1646 */ +#line 1270 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_delay_close:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3869,11 +3871,11 @@ yyreduce: else cfg_parser->cfg->delay_close = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3873 "util/configparser.c" /* yacc.c:1646 */ +#line 3875 "util/configparser.c" /* yacc.c:1646 */ break; case 344: -#line 1277 "./util/configparser.y" /* yacc.c:1646 */ +#line 1279 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_unblock_lan_zones:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3882,11 +3884,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3886 "util/configparser.c" /* yacc.c:1646 */ +#line 3888 "util/configparser.c" /* yacc.c:1646 */ break; case 345: -#line 1287 "./util/configparser.y" /* yacc.c:1646 */ +#line 1289 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_insecure_lan_zones:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3895,22 +3897,22 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3899 "util/configparser.c" /* yacc.c:1646 */ +#line 3901 "util/configparser.c" /* yacc.c:1646 */ break; case 346: -#line 1297 "./util/configparser.y" /* yacc.c:1646 */ +#line 1299 "./util/configparser.y" /* yacc.c:1646 */ { 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 3910 "util/configparser.c" /* yacc.c:1646 */ +#line 3912 "util/configparser.c" /* yacc.c:1646 */ break; case 347: -#line 1305 "./util/configparser.y" /* yacc.c:1646 */ +#line 1307 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_rrset_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3922,11 +3924,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 3926 "util/configparser.c" /* yacc.c:1646 */ +#line 3928 "util/configparser.c" /* yacc.c:1646 */ break; case 348: -#line 1318 "./util/configparser.y" /* yacc.c:1646 */ +#line 1320 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_host_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3934,22 +3936,22 @@ yyreduce: else cfg_parser->cfg->host_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3938 "util/configparser.c" /* yacc.c:1646 */ +#line 3940 "util/configparser.c" /* yacc.c:1646 */ break; case 349: -#line 1327 "./util/configparser.y" /* yacc.c:1646 */ +#line 1329 "./util/configparser.y" /* yacc.c:1646 */ { 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 3949 "util/configparser.c" /* yacc.c:1646 */ +#line 3951 "util/configparser.c" /* yacc.c:1646 */ break; case 350: -#line 1335 "./util/configparser.y" /* yacc.c:1646 */ +#line 1337 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_cache_numhosts:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3957,22 +3959,22 @@ yyreduce: else cfg_parser->cfg->infra_cache_numhosts = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3961 "util/configparser.c" /* yacc.c:1646 */ +#line 3963 "util/configparser.c" /* yacc.c:1646 */ break; case 351: -#line 1344 "./util/configparser.y" /* yacc.c:1646 */ +#line 1346 "./util/configparser.y" /* yacc.c:1646 */ { 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 3972 "util/configparser.c" /* yacc.c:1646 */ +#line 3974 "util/configparser.c" /* yacc.c:1646 */ break; case 352: -#line 1352 "./util/configparser.y" /* yacc.c:1646 */ +#line 1354 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3984,11 +3986,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 3988 "util/configparser.c" /* yacc.c:1646 */ +#line 3990 "util/configparser.c" /* yacc.c:1646 */ break; case 353: -#line 1365 "./util/configparser.y" /* yacc.c:1646 */ +#line 1367 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_cache_min_rtt:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3996,21 +3998,21 @@ yyreduce: else cfg_parser->cfg->infra_cache_min_rtt = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4000 "util/configparser.c" /* yacc.c:1646 */ +#line 4002 "util/configparser.c" /* yacc.c:1646 */ break; case 354: -#line 1374 "./util/configparser.y" /* yacc.c:1646 */ +#line 1376 "./util/configparser.y" /* yacc.c:1646 */ { 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 4010 "util/configparser.c" /* yacc.c:1646 */ +#line 4012 "util/configparser.c" /* yacc.c:1646 */ break; case 355: -#line 1381 "./util/configparser.y" /* yacc.c:1646 */ +#line 1383 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_short_bufsize:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4019,11 +4021,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4023 "util/configparser.c" /* yacc.c:1646 */ +#line 4025 "util/configparser.c" /* yacc.c:1646 */ break; case 356: -#line 1391 "./util/configparser.y" /* yacc.c:1646 */ +#line 1393 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_large_queries:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4032,11 +4034,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4036 "util/configparser.c" /* yacc.c:1646 */ +#line 4038 "util/configparser.c" /* yacc.c:1646 */ break; case 357: -#line 1401 "./util/configparser.y" /* yacc.c:1646 */ +#line 1403 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_glue:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4045,11 +4047,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4049 "util/configparser.c" /* yacc.c:1646 */ +#line 4051 "util/configparser.c" /* yacc.c:1646 */ break; case 358: -#line 1411 "./util/configparser.y" /* yacc.c:1646 */ +#line 1413 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_dnssec_stripped:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4058,11 +4060,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4062 "util/configparser.c" /* yacc.c:1646 */ +#line 4064 "util/configparser.c" /* yacc.c:1646 */ break; case 359: -#line 1421 "./util/configparser.y" /* yacc.c:1646 */ +#line 1423 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_below_nxdomain:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4071,11 +4073,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4075 "util/configparser.c" /* yacc.c:1646 */ +#line 4077 "util/configparser.c" /* yacc.c:1646 */ break; case 360: -#line 1431 "./util/configparser.y" /* yacc.c:1646 */ +#line 1433 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_referral_path:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4084,11 +4086,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4088 "util/configparser.c" /* yacc.c:1646 */ +#line 4090 "util/configparser.c" /* yacc.c:1646 */ break; case 361: -#line 1441 "./util/configparser.y" /* yacc.c:1646 */ +#line 1443 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_algo_downgrade:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4097,11 +4099,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4101 "util/configparser.c" /* yacc.c:1646 */ +#line 4103 "util/configparser.c" /* yacc.c:1646 */ break; case 362: -#line 1451 "./util/configparser.y" /* yacc.c:1646 */ +#line 1453 "./util/configparser.y" /* yacc.c:1646 */ { 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) @@ -4110,41 +4112,41 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4114 "util/configparser.c" /* yacc.c:1646 */ +#line 4116 "util/configparser.c" /* yacc.c:1646 */ break; case 363: -#line 1461 "./util/configparser.y" /* yacc.c:1646 */ +#line 1463 "./util/configparser.y" /* yacc.c:1646 */ { 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 4124 "util/configparser.c" /* yacc.c:1646 */ +#line 4126 "util/configparser.c" /* yacc.c:1646 */ break; case 364: -#line 1468 "./util/configparser.y" /* yacc.c:1646 */ +#line 1470 "./util/configparser.y" /* yacc.c:1646 */ { 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 4134 "util/configparser.c" /* yacc.c:1646 */ +#line 4136 "util/configparser.c" /* yacc.c:1646 */ break; case 365: -#line 1475 "./util/configparser.y" /* yacc.c:1646 */ +#line 1477 "./util/configparser.y" /* yacc.c:1646 */ { 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 4144 "util/configparser.c" /* yacc.c:1646 */ +#line 4146 "util/configparser.c" /* yacc.c:1646 */ break; case 366: -#line 1482 "./util/configparser.y" /* yacc.c:1646 */ +#line 1484 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_prefetch:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4152,11 +4154,11 @@ yyreduce: else cfg_parser->cfg->prefetch = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4156 "util/configparser.c" /* yacc.c:1646 */ +#line 4158 "util/configparser.c" /* yacc.c:1646 */ break; case 367: -#line 1491 "./util/configparser.y" /* yacc.c:1646 */ +#line 1493 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_prefetch_key:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4164,11 +4166,11 @@ yyreduce: else cfg_parser->cfg->prefetch_key = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4168 "util/configparser.c" /* yacc.c:1646 */ +#line 4170 "util/configparser.c" /* yacc.c:1646 */ break; case 368: -#line 1500 "./util/configparser.y" /* yacc.c:1646 */ +#line 1502 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_deny_any:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4176,11 +4178,11 @@ yyreduce: else cfg_parser->cfg->deny_any = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4180 "util/configparser.c" /* yacc.c:1646 */ +#line 4182 "util/configparser.c" /* yacc.c:1646 */ break; case 369: -#line 1509 "./util/configparser.y" /* yacc.c:1646 */ +#line 1511 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_unwanted_reply_threshold:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4188,21 +4190,21 @@ yyreduce: else cfg_parser->cfg->unwanted_threshold = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4192 "util/configparser.c" /* yacc.c:1646 */ +#line 4194 "util/configparser.c" /* yacc.c:1646 */ break; case 370: -#line 1518 "./util/configparser.y" /* yacc.c:1646 */ +#line 1520 "./util/configparser.y" /* yacc.c:1646 */ { 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 4202 "util/configparser.c" /* yacc.c:1646 */ +#line 4204 "util/configparser.c" /* yacc.c:1646 */ break; case 371: -#line 1525 "./util/configparser.y" /* yacc.c:1646 */ +#line 1527 "./util/configparser.y" /* yacc.c:1646 */ { 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) @@ -4211,11 +4213,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4215 "util/configparser.c" /* yacc.c:1646 */ +#line 4217 "util/configparser.c" /* yacc.c:1646 */ break; case 372: -#line 1535 "./util/configparser.y" /* yacc.c:1646 */ +#line 1537 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_access_control:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "deny")!=0 && strcmp((yyvsp[0].str), "refuse")!=0 && @@ -4234,21 +4236,21 @@ yyreduce: fatal_exit("out of memory adding acl"); } } -#line 4238 "util/configparser.c" /* yacc.c:1646 */ +#line 4240 "util/configparser.c" /* yacc.c:1646 */ break; case 373: -#line 1555 "./util/configparser.y" /* yacc.c:1646 */ +#line 1557 "./util/configparser.y" /* yacc.c:1646 */ { 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 4248 "util/configparser.c" /* yacc.c:1646 */ +#line 4250 "util/configparser.c" /* yacc.c:1646 */ break; case 374: -#line 1562 "./util/configparser.y" /* yacc.c:1646 */ +#line 1564 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_override_date:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { @@ -4265,11 +4267,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4269 "util/configparser.c" /* yacc.c:1646 */ +#line 4271 "util/configparser.c" /* yacc.c:1646 */ break; case 375: -#line 1580 "./util/configparser.y" /* yacc.c:1646 */ +#line 1582 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_sig_skew_min:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { @@ -4281,11 +4283,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4285 "util/configparser.c" /* yacc.c:1646 */ +#line 4287 "util/configparser.c" /* yacc.c:1646 */ break; case 376: -#line 1593 "./util/configparser.y" /* yacc.c:1646 */ +#line 1595 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_sig_skew_max:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { @@ -4297,11 +4299,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4301 "util/configparser.c" /* yacc.c:1646 */ +#line 4303 "util/configparser.c" /* yacc.c:1646 */ break; case 377: -#line 1606 "./util/configparser.y" /* yacc.c:1646 */ +#line 1608 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_cache_max_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4309,11 +4311,11 @@ yyreduce: else cfg_parser->cfg->max_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4313 "util/configparser.c" /* yacc.c:1646 */ +#line 4315 "util/configparser.c" /* yacc.c:1646 */ break; case 378: -#line 1615 "./util/configparser.y" /* yacc.c:1646 */ +#line 1617 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_cache_max_negative_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4321,11 +4323,11 @@ yyreduce: else cfg_parser->cfg->max_negative_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4325 "util/configparser.c" /* yacc.c:1646 */ +#line 4327 "util/configparser.c" /* yacc.c:1646 */ break; case 379: -#line 1624 "./util/configparser.y" /* yacc.c:1646 */ +#line 1626 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_cache_min_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4333,11 +4335,11 @@ yyreduce: else cfg_parser->cfg->min_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4337 "util/configparser.c" /* yacc.c:1646 */ +#line 4339 "util/configparser.c" /* yacc.c:1646 */ break; case 380: -#line 1633 "./util/configparser.y" /* yacc.c:1646 */ +#line 1635 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_bogus_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4345,11 +4347,11 @@ yyreduce: else cfg_parser->cfg->bogus_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4349 "util/configparser.c" /* yacc.c:1646 */ +#line 4351 "util/configparser.c" /* yacc.c:1646 */ break; case 381: -#line 1642 "./util/configparser.y" /* yacc.c:1646 */ +#line 1644 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_clean_additional:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4358,11 +4360,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4362 "util/configparser.c" /* yacc.c:1646 */ +#line 4364 "util/configparser.c" /* yacc.c:1646 */ break; case 382: -#line 1652 "./util/configparser.y" /* yacc.c:1646 */ +#line 1654 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_permissive_mode:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4371,11 +4373,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4375 "util/configparser.c" /* yacc.c:1646 */ +#line 4377 "util/configparser.c" /* yacc.c:1646 */ break; case 383: -#line 1662 "./util/configparser.y" /* yacc.c:1646 */ +#line 1664 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_aggressive_nsec:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4385,11 +4387,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4389 "util/configparser.c" /* yacc.c:1646 */ +#line 4391 "util/configparser.c" /* yacc.c:1646 */ break; case 384: -#line 1673 "./util/configparser.y" /* yacc.c:1646 */ +#line 1675 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ignore_cd_flag:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4397,11 +4399,11 @@ yyreduce: else cfg_parser->cfg->ignore_cd = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4401 "util/configparser.c" /* yacc.c:1646 */ +#line 4403 "util/configparser.c" /* yacc.c:1646 */ break; case 385: -#line 1682 "./util/configparser.y" /* yacc.c:1646 */ +#line 1684 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_serve_expired:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4409,11 +4411,11 @@ yyreduce: else cfg_parser->cfg->serve_expired = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4413 "util/configparser.c" /* yacc.c:1646 */ +#line 4415 "util/configparser.c" /* yacc.c:1646 */ break; case 386: -#line 1691 "./util/configparser.y" /* yacc.c:1646 */ +#line 1693 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_serve_expired_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4421,11 +4423,11 @@ yyreduce: else cfg_parser->cfg->serve_expired_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4425 "util/configparser.c" /* yacc.c:1646 */ +#line 4427 "util/configparser.c" /* yacc.c:1646 */ break; case 387: -#line 1700 "./util/configparser.y" /* yacc.c:1646 */ +#line 1702 "./util/configparser.y" /* yacc.c:1646 */ { 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) @@ -4433,11 +4435,11 @@ yyreduce: else cfg_parser->cfg->serve_expired_ttl_reset = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4437 "util/configparser.c" /* yacc.c:1646 */ +#line 4439 "util/configparser.c" /* yacc.c:1646 */ break; case 388: -#line 1709 "./util/configparser.y" /* yacc.c:1646 */ +#line 1711 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_fake_dsa:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4449,11 +4451,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 4453 "util/configparser.c" /* yacc.c:1646 */ +#line 4455 "util/configparser.c" /* yacc.c:1646 */ break; case 389: -#line 1722 "./util/configparser.y" /* yacc.c:1646 */ +#line 1724 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_fake_sha1:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4465,11 +4467,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 4469 "util/configparser.c" /* yacc.c:1646 */ +#line 4471 "util/configparser.c" /* yacc.c:1646 */ break; case 390: -#line 1735 "./util/configparser.y" /* yacc.c:1646 */ +#line 1737 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_log_level:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4477,21 +4479,21 @@ yyreduce: else cfg_parser->cfg->val_log_level = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4481 "util/configparser.c" /* yacc.c:1646 */ +#line 4483 "util/configparser.c" /* yacc.c:1646 */ break; case 391: -#line 1744 "./util/configparser.y" /* yacc.c:1646 */ +#line 1746 "./util/configparser.y" /* yacc.c:1646 */ { 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 4491 "util/configparser.c" /* yacc.c:1646 */ +#line 4493 "util/configparser.c" /* yacc.c:1646 */ break; case 392: -#line 1751 "./util/configparser.y" /* yacc.c:1646 */ +#line 1753 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_add_holddown:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4499,11 +4501,11 @@ yyreduce: else cfg_parser->cfg->add_holddown = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4503 "util/configparser.c" /* yacc.c:1646 */ +#line 4505 "util/configparser.c" /* yacc.c:1646 */ break; case 393: -#line 1760 "./util/configparser.y" /* yacc.c:1646 */ +#line 1762 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_del_holddown:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4511,11 +4513,11 @@ yyreduce: else cfg_parser->cfg->del_holddown = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4515 "util/configparser.c" /* yacc.c:1646 */ +#line 4517 "util/configparser.c" /* yacc.c:1646 */ break; case 394: -#line 1769 "./util/configparser.y" /* yacc.c:1646 */ +#line 1771 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_keep_missing:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4523,11 +4525,11 @@ yyreduce: else cfg_parser->cfg->keep_missing = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4527 "util/configparser.c" /* yacc.c:1646 */ +#line 4529 "util/configparser.c" /* yacc.c:1646 */ break; case 395: -#line 1778 "./util/configparser.y" /* yacc.c:1646 */ +#line 1780 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_permit_small_holddown:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4536,22 +4538,22 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4540 "util/configparser.c" /* yacc.c:1646 */ +#line 4542 "util/configparser.c" /* yacc.c:1646 */ break; case 396: -#line 1787 "./util/configparser.y" /* yacc.c:1646 */ +#line 1789 "./util/configparser.y" /* yacc.c:1646 */ { 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 4551 "util/configparser.c" /* yacc.c:1646 */ +#line 4553 "util/configparser.c" /* yacc.c:1646 */ break; case 397: -#line 1795 "./util/configparser.y" /* yacc.c:1646 */ +#line 1797 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_key_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4563,22 +4565,22 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4567 "util/configparser.c" /* yacc.c:1646 */ +#line 4569 "util/configparser.c" /* yacc.c:1646 */ break; case 398: -#line 1808 "./util/configparser.y" /* yacc.c:1646 */ +#line 1810 "./util/configparser.y" /* yacc.c:1646 */ { 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 4578 "util/configparser.c" /* yacc.c:1646 */ +#line 4580 "util/configparser.c" /* yacc.c:1646 */ break; case 399: -#line 1816 "./util/configparser.y" /* yacc.c:1646 */ +#line 1818 "./util/configparser.y" /* yacc.c:1646 */ { 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 && @@ -4610,21 +4612,21 @@ yyreduce: fatal_exit("out of memory adding local-zone"); } } -#line 4614 "util/configparser.c" /* yacc.c:1646 */ +#line 4616 "util/configparser.c" /* yacc.c:1646 */ break; case 400: -#line 1849 "./util/configparser.y" /* yacc.c:1646 */ +#line 1851 "./util/configparser.y" /* yacc.c:1646 */ { 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 4624 "util/configparser.c" /* yacc.c:1646 */ +#line 4626 "util/configparser.c" /* yacc.c:1646 */ break; case 401: -#line 1856 "./util/configparser.y" /* yacc.c:1646 */ +#line 1858 "./util/configparser.y" /* yacc.c:1646 */ { char* ptr; OUTYY(("P(server_local_data_ptr:%s)\n", (yyvsp[0].str))); @@ -4638,11 +4640,11 @@ yyreduce: yyerror("local-data-ptr could not be reversed"); } } -#line 4642 "util/configparser.c" /* yacc.c:1646 */ +#line 4644 "util/configparser.c" /* yacc.c:1646 */ break; case 402: -#line 1871 "./util/configparser.y" /* yacc.c:1646 */ +#line 1873 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_minimal_responses:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4651,11 +4653,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4655 "util/configparser.c" /* yacc.c:1646 */ +#line 4657 "util/configparser.c" /* yacc.c:1646 */ break; case 403: -#line 1881 "./util/configparser.y" /* yacc.c:1646 */ +#line 1883 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_rrset_roundrobin:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4664,41 +4666,41 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4668 "util/configparser.c" /* yacc.c:1646 */ +#line 4670 "util/configparser.c" /* yacc.c:1646 */ break; case 404: -#line 1891 "./util/configparser.y" /* yacc.c:1646 */ +#line 1893 "./util/configparser.y" /* yacc.c:1646 */ { 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 4678 "util/configparser.c" /* yacc.c:1646 */ +#line 4680 "util/configparser.c" /* yacc.c:1646 */ break; case 405: -#line 1898 "./util/configparser.y" /* yacc.c:1646 */ +#line 1900 "./util/configparser.y" /* yacc.c:1646 */ { 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 4688 "util/configparser.c" /* yacc.c:1646 */ +#line 4690 "util/configparser.c" /* yacc.c:1646 */ break; case 406: -#line 1905 "./util/configparser.y" /* yacc.c:1646 */ +#line 1907 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dns64_prefix:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dns64_prefix); cfg_parser->cfg->dns64_prefix = (yyvsp[0].str); } -#line 4698 "util/configparser.c" /* yacc.c:1646 */ +#line 4700 "util/configparser.c" /* yacc.c:1646 */ break; case 407: -#line 1912 "./util/configparser.y" /* yacc.c:1646 */ +#line 1914 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_dns64_synthall:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4706,22 +4708,22 @@ yyreduce: else cfg_parser->cfg->dns64_synthall = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4710 "util/configparser.c" /* yacc.c:1646 */ +#line 4712 "util/configparser.c" /* yacc.c:1646 */ break; case 408: -#line 1921 "./util/configparser.y" /* yacc.c:1646 */ +#line 1923 "./util/configparser.y" /* yacc.c:1646 */ { 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 4721 "util/configparser.c" /* yacc.c:1646 */ +#line 4723 "util/configparser.c" /* yacc.c:1646 */ break; case 409: -#line 1929 "./util/configparser.y" /* yacc.c:1646 */ +#line 1931 "./util/configparser.y" /* yacc.c:1646 */ { char* p, *s = (yyvsp[0].str); OUTYY(("P(server_define_tag:%s)\n", (yyvsp[0].str))); @@ -4734,11 +4736,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4738 "util/configparser.c" /* yacc.c:1646 */ +#line 4740 "util/configparser.c" /* yacc.c:1646 */ break; case 410: -#line 1943 "./util/configparser.y" /* yacc.c:1646 */ +#line 1945 "./util/configparser.y" /* yacc.c:1646 */ { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -4758,11 +4760,11 @@ yyreduce: } } } -#line 4762 "util/configparser.c" /* yacc.c:1646 */ +#line 4764 "util/configparser.c" /* yacc.c:1646 */ break; case 411: -#line 1964 "./util/configparser.y" /* yacc.c:1646 */ +#line 1966 "./util/configparser.y" /* yacc.c:1646 */ { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -4782,11 +4784,11 @@ yyreduce: } } } -#line 4786 "util/configparser.c" /* yacc.c:1646 */ +#line 4788 "util/configparser.c" /* yacc.c:1646 */ break; case 412: -#line 1985 "./util/configparser.y" /* yacc.c:1646 */ +#line 1987 "./util/configparser.y" /* yacc.c:1646 */ { 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, @@ -4797,11 +4799,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 4801 "util/configparser.c" /* yacc.c:1646 */ +#line 4803 "util/configparser.c" /* yacc.c:1646 */ break; case 413: -#line 1997 "./util/configparser.y" /* yacc.c:1646 */ +#line 1999 "./util/configparser.y" /* yacc.c:1646 */ { 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, @@ -4812,11 +4814,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 4816 "util/configparser.c" /* yacc.c:1646 */ +#line 4818 "util/configparser.c" /* yacc.c:1646 */ break; case 414: -#line 2009 "./util/configparser.y" /* yacc.c:1646 */ +#line 2011 "./util/configparser.y" /* yacc.c:1646 */ { 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, @@ -4827,11 +4829,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 4831 "util/configparser.c" /* yacc.c:1646 */ +#line 4833 "util/configparser.c" /* yacc.c:1646 */ break; case 415: -#line 2021 "./util/configparser.y" /* yacc.c:1646 */ +#line 2023 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_access_control_view:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str2list_insert(&cfg_parser->cfg->acl_view, @@ -4839,11 +4841,11 @@ yyreduce: yyerror("out of memory"); } } -#line 4843 "util/configparser.c" /* yacc.c:1646 */ +#line 4845 "util/configparser.c" /* yacc.c:1646 */ break; case 416: -#line 2030 "./util/configparser.y" /* yacc.c:1646 */ +#line 2032 "./util/configparser.y" /* yacc.c:1646 */ { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -4863,11 +4865,11 @@ yyreduce: } } } -#line 4867 "util/configparser.c" /* yacc.c:1646 */ +#line 4869 "util/configparser.c" /* yacc.c:1646 */ break; case 417: -#line 2051 "./util/configparser.y" /* yacc.c:1646 */ +#line 2053 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_ratelimit:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4875,11 +4877,11 @@ yyreduce: else cfg_parser->cfg->ip_ratelimit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4879 "util/configparser.c" /* yacc.c:1646 */ +#line 4881 "util/configparser.c" /* yacc.c:1646 */ break; case 418: -#line 2061 "./util/configparser.y" /* yacc.c:1646 */ +#line 2063 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ratelimit:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4887,33 +4889,33 @@ yyreduce: else cfg_parser->cfg->ratelimit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4891 "util/configparser.c" /* yacc.c:1646 */ +#line 4893 "util/configparser.c" /* yacc.c:1646 */ break; case 419: -#line 2070 "./util/configparser.y" /* yacc.c:1646 */ +#line 2072 "./util/configparser.y" /* yacc.c:1646 */ { 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 4902 "util/configparser.c" /* yacc.c:1646 */ +#line 4904 "util/configparser.c" /* yacc.c:1646 */ break; case 420: -#line 2078 "./util/configparser.y" /* yacc.c:1646 */ +#line 2080 "./util/configparser.y" /* yacc.c:1646 */ { 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 4913 "util/configparser.c" /* yacc.c:1646 */ +#line 4915 "util/configparser.c" /* yacc.c:1646 */ break; case 421: -#line 2086 "./util/configparser.y" /* yacc.c:1646 */ +#line 2088 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_ratelimit_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4925,11 +4927,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4929 "util/configparser.c" /* yacc.c:1646 */ +#line 4931 "util/configparser.c" /* yacc.c:1646 */ break; case 422: -#line 2099 "./util/configparser.y" /* yacc.c:1646 */ +#line 2101 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ratelimit_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4941,11 +4943,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4945 "util/configparser.c" /* yacc.c:1646 */ +#line 4947 "util/configparser.c" /* yacc.c:1646 */ break; case 423: -#line 2112 "./util/configparser.y" /* yacc.c:1646 */ +#line 2114 "./util/configparser.y" /* yacc.c:1646 */ { 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) { @@ -4959,11 +4961,11 @@ yyreduce: "ratelimit-for-domain"); } } -#line 4963 "util/configparser.c" /* yacc.c:1646 */ +#line 4965 "util/configparser.c" /* yacc.c:1646 */ break; case 424: -#line 2127 "./util/configparser.y" /* yacc.c:1646 */ +#line 2129 "./util/configparser.y" /* yacc.c:1646 */ { 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) { @@ -4977,11 +4979,11 @@ yyreduce: "ratelimit-below-domain"); } } -#line 4981 "util/configparser.c" /* yacc.c:1646 */ +#line 4983 "util/configparser.c" /* yacc.c:1646 */ break; case 425: -#line 2142 "./util/configparser.y" /* yacc.c:1646 */ +#line 2144 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_ratelimit_factor:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4989,11 +4991,11 @@ yyreduce: else cfg_parser->cfg->ip_ratelimit_factor = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4993 "util/configparser.c" /* yacc.c:1646 */ +#line 4995 "util/configparser.c" /* yacc.c:1646 */ break; case 426: -#line 2151 "./util/configparser.y" /* yacc.c:1646 */ +#line 2153 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ratelimit_factor:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5001,20 +5003,20 @@ yyreduce: else cfg_parser->cfg->ratelimit_factor = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5005 "util/configparser.c" /* yacc.c:1646 */ +#line 5007 "util/configparser.c" /* yacc.c:1646 */ break; case 427: -#line 2160 "./util/configparser.y" /* yacc.c:1646 */ +#line 2162 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(low-rtt option is deprecated, use fast-server-num instead)\n")); free((yyvsp[0].str)); } -#line 5014 "util/configparser.c" /* yacc.c:1646 */ +#line 5016 "util/configparser.c" /* yacc.c:1646 */ break; case 428: -#line 2166 "./util/configparser.y" /* yacc.c:1646 */ +#line 2168 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_fast_server_num:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) <= 0) @@ -5022,11 +5024,11 @@ yyreduce: else cfg_parser->cfg->fast_server_num = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5026 "util/configparser.c" /* yacc.c:1646 */ +#line 5028 "util/configparser.c" /* yacc.c:1646 */ break; case 429: -#line 2175 "./util/configparser.y" /* yacc.c:1646 */ +#line 2177 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_fast_server_permil:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5034,11 +5036,11 @@ yyreduce: else cfg_parser->cfg->fast_server_permil = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5038 "util/configparser.c" /* yacc.c:1646 */ +#line 5040 "util/configparser.c" /* yacc.c:1646 */ break; case 430: -#line 2184 "./util/configparser.y" /* yacc.c:1646 */ +#line 2186 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_qname_minimisation:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5047,11 +5049,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5051 "util/configparser.c" /* yacc.c:1646 */ +#line 5053 "util/configparser.c" /* yacc.c:1646 */ break; case 431: -#line 2194 "./util/configparser.y" /* yacc.c:1646 */ +#line 2196 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_qname_minimisation_strict:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5060,11 +5062,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5064 "util/configparser.c" /* yacc.c:1646 */ +#line 5066 "util/configparser.c" /* yacc.c:1646 */ break; case 432: -#line 2204 "./util/configparser.y" /* yacc.c:1646 */ +#line 2206 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_enabled:%s)\n", (yyvsp[0].str))); @@ -5076,11 +5078,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 5080 "util/configparser.c" /* yacc.c:1646 */ +#line 5082 "util/configparser.c" /* yacc.c:1646 */ break; case 433: -#line 2217 "./util/configparser.y" /* yacc.c:1646 */ +#line 2219 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_ignore_bogus:%s)\n", (yyvsp[0].str))); @@ -5092,11 +5094,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 5096 "util/configparser.c" /* yacc.c:1646 */ +#line 5098 "util/configparser.c" /* yacc.c:1646 */ break; case 434: -#line 2230 "./util/configparser.y" /* yacc.c:1646 */ +#line 2232 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_hook:%s)\n", (yyvsp[0].str))); @@ -5107,11 +5109,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5111 "util/configparser.c" /* yacc.c:1646 */ +#line 5113 "util/configparser.c" /* yacc.c:1646 */ break; case 435: -#line 2242 "./util/configparser.y" /* yacc.c:1646 */ +#line 2244 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_max_ttl:%s)\n", (yyvsp[0].str))); @@ -5124,11 +5126,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5128 "util/configparser.c" /* yacc.c:1646 */ +#line 5130 "util/configparser.c" /* yacc.c:1646 */ break; case 436: -#line 2256 "./util/configparser.y" /* yacc.c:1646 */ +#line 2258 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_whitelist:%s)\n", (yyvsp[0].str))); @@ -5139,11 +5141,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5143 "util/configparser.c" /* yacc.c:1646 */ +#line 5145 "util/configparser.c" /* yacc.c:1646 */ break; case 437: -#line 2268 "./util/configparser.y" /* yacc.c:1646 */ +#line 2270 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_strict:%s)\n", (yyvsp[0].str))); @@ -5156,11 +5158,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5160 "util/configparser.c" /* yacc.c:1646 */ +#line 5162 "util/configparser.c" /* yacc.c:1646 */ break; case 438: -#line 2282 "./util/configparser.y" /* yacc.c:1646 */ +#line 2284 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->stubs->name) @@ -5169,31 +5171,31 @@ yyreduce: free(cfg_parser->cfg->stubs->name); cfg_parser->cfg->stubs->name = (yyvsp[0].str); } -#line 5173 "util/configparser.c" /* yacc.c:1646 */ +#line 5175 "util/configparser.c" /* yacc.c:1646 */ break; case 439: -#line 2292 "./util/configparser.y" /* yacc.c:1646 */ +#line 2294 "./util/configparser.y" /* yacc.c:1646 */ { 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 5183 "util/configparser.c" /* yacc.c:1646 */ +#line 5185 "util/configparser.c" /* yacc.c:1646 */ break; case 440: -#line 2299 "./util/configparser.y" /* yacc.c:1646 */ +#line 2301 "./util/configparser.y" /* yacc.c:1646 */ { 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 5193 "util/configparser.c" /* yacc.c:1646 */ +#line 5195 "util/configparser.c" /* yacc.c:1646 */ break; case 441: -#line 2306 "./util/configparser.y" /* yacc.c:1646 */ +#line 2308 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(stub-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5201,11 +5203,11 @@ yyreduce: else cfg_parser->cfg->stubs->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5205 "util/configparser.c" /* yacc.c:1646 */ +#line 5207 "util/configparser.c" /* yacc.c:1646 */ break; case 442: -#line 2315 "./util/configparser.y" /* yacc.c:1646 */ +#line 2317 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(stub-no-cache:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5213,11 +5215,11 @@ yyreduce: else cfg_parser->cfg->stubs->no_cache=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5217 "util/configparser.c" /* yacc.c:1646 */ +#line 5219 "util/configparser.c" /* yacc.c:1646 */ break; case 443: -#line 2324 "./util/configparser.y" /* yacc.c:1646 */ +#line 2326 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(stub-ssl-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5226,11 +5228,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5230 "util/configparser.c" /* yacc.c:1646 */ +#line 5232 "util/configparser.c" /* yacc.c:1646 */ break; case 444: -#line 2334 "./util/configparser.y" /* yacc.c:1646 */ +#line 2336 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(stub-prime:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5239,11 +5241,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5243 "util/configparser.c" /* yacc.c:1646 */ +#line 5245 "util/configparser.c" /* yacc.c:1646 */ break; case 445: -#line 2344 "./util/configparser.y" /* yacc.c:1646 */ +#line 2346 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->forwards->name) @@ -5252,31 +5254,31 @@ yyreduce: free(cfg_parser->cfg->forwards->name); cfg_parser->cfg->forwards->name = (yyvsp[0].str); } -#line 5256 "util/configparser.c" /* yacc.c:1646 */ +#line 5258 "util/configparser.c" /* yacc.c:1646 */ break; case 446: -#line 2354 "./util/configparser.y" /* yacc.c:1646 */ +#line 2356 "./util/configparser.y" /* yacc.c:1646 */ { 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 5266 "util/configparser.c" /* yacc.c:1646 */ +#line 5268 "util/configparser.c" /* yacc.c:1646 */ break; case 447: -#line 2361 "./util/configparser.y" /* yacc.c:1646 */ +#line 2363 "./util/configparser.y" /* yacc.c:1646 */ { 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 5276 "util/configparser.c" /* yacc.c:1646 */ +#line 5278 "util/configparser.c" /* yacc.c:1646 */ break; case 448: -#line 2368 "./util/configparser.y" /* yacc.c:1646 */ +#line 2370 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(forward-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5284,11 +5286,11 @@ yyreduce: else cfg_parser->cfg->forwards->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5288 "util/configparser.c" /* yacc.c:1646 */ +#line 5290 "util/configparser.c" /* yacc.c:1646 */ break; case 449: -#line 2377 "./util/configparser.y" /* yacc.c:1646 */ +#line 2379 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(forward-no-cache:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5296,11 +5298,11 @@ yyreduce: else cfg_parser->cfg->forwards->no_cache=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5300 "util/configparser.c" /* yacc.c:1646 */ +#line 5302 "util/configparser.c" /* yacc.c:1646 */ break; case 450: -#line 2386 "./util/configparser.y" /* yacc.c:1646 */ +#line 2388 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(forward-ssl-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5309,11 +5311,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5313 "util/configparser.c" /* yacc.c:1646 */ +#line 5315 "util/configparser.c" /* yacc.c:1646 */ break; case 451: -#line 2396 "./util/configparser.y" /* yacc.c:1646 */ +#line 2398 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->auths->name) @@ -5322,52 +5324,52 @@ yyreduce: free(cfg_parser->cfg->auths->name); cfg_parser->cfg->auths->name = (yyvsp[0].str); } -#line 5326 "util/configparser.c" /* yacc.c:1646 */ +#line 5328 "util/configparser.c" /* yacc.c:1646 */ break; case 452: -#line 2406 "./util/configparser.y" /* yacc.c:1646 */ +#line 2408 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(zonefile:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->auths->zonefile); cfg_parser->cfg->auths->zonefile = (yyvsp[0].str); } -#line 5336 "util/configparser.c" /* yacc.c:1646 */ +#line 5338 "util/configparser.c" /* yacc.c:1646 */ break; case 453: -#line 2413 "./util/configparser.y" /* yacc.c:1646 */ +#line 2415 "./util/configparser.y" /* yacc.c:1646 */ { 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 5346 "util/configparser.c" /* yacc.c:1646 */ +#line 5348 "util/configparser.c" /* yacc.c:1646 */ break; case 454: -#line 2420 "./util/configparser.y" /* yacc.c:1646 */ +#line 2422 "./util/configparser.y" /* yacc.c:1646 */ { 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 5356 "util/configparser.c" /* yacc.c:1646 */ +#line 5358 "util/configparser.c" /* yacc.c:1646 */ break; case 455: -#line 2427 "./util/configparser.y" /* yacc.c:1646 */ +#line 2429 "./util/configparser.y" /* yacc.c:1646 */ { 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 5367 "util/configparser.c" /* yacc.c:1646 */ +#line 5369 "util/configparser.c" /* yacc.c:1646 */ break; case 456: -#line 2435 "./util/configparser.y" /* yacc.c:1646 */ +#line 2437 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(for-downstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5376,11 +5378,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5380 "util/configparser.c" /* yacc.c:1646 */ +#line 5382 "util/configparser.c" /* yacc.c:1646 */ break; case 457: -#line 2445 "./util/configparser.y" /* yacc.c:1646 */ +#line 2447 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(for-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5389,11 +5391,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5393 "util/configparser.c" /* yacc.c:1646 */ +#line 5395 "util/configparser.c" /* yacc.c:1646 */ break; case 458: -#line 2455 "./util/configparser.y" /* yacc.c:1646 */ +#line 2457 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(fallback-enabled:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5402,11 +5404,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5406 "util/configparser.c" /* yacc.c:1646 */ +#line 5408 "util/configparser.c" /* yacc.c:1646 */ break; case 459: -#line 2465 "./util/configparser.y" /* yacc.c:1646 */ +#line 2467 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->views->name) @@ -5415,11 +5417,11 @@ yyreduce: free(cfg_parser->cfg->views->name); cfg_parser->cfg->views->name = (yyvsp[0].str); } -#line 5419 "util/configparser.c" /* yacc.c:1646 */ +#line 5421 "util/configparser.c" /* yacc.c:1646 */ break; case 460: -#line 2475 "./util/configparser.y" /* yacc.c:1646 */ +#line 2477 "./util/configparser.y" /* yacc.c:1646 */ { 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 && @@ -5450,11 +5452,11 @@ yyreduce: fatal_exit("out of memory adding local-zone"); } } -#line 5454 "util/configparser.c" /* yacc.c:1646 */ +#line 5456 "util/configparser.c" /* yacc.c:1646 */ break; case 461: -#line 2507 "./util/configparser.y" /* yacc.c:1646 */ +#line 2509 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(view_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); validate_respip_action((yyvsp[0].str)); @@ -5463,33 +5465,33 @@ yyreduce: fatal_exit("out of memory adding per-view " "response-ip action"); } -#line 5467 "util/configparser.c" /* yacc.c:1646 */ +#line 5469 "util/configparser.c" /* yacc.c:1646 */ break; case 462: -#line 2517 "./util/configparser.y" /* yacc.c:1646 */ +#line 2519 "./util/configparser.y" /* yacc.c:1646 */ { 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 5478 "util/configparser.c" /* yacc.c:1646 */ +#line 5480 "util/configparser.c" /* yacc.c:1646 */ break; case 463: -#line 2525 "./util/configparser.y" /* yacc.c:1646 */ +#line 2527 "./util/configparser.y" /* yacc.c:1646 */ { 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 5489 "util/configparser.c" /* yacc.c:1646 */ +#line 5491 "util/configparser.c" /* yacc.c:1646 */ break; case 464: -#line 2533 "./util/configparser.y" /* yacc.c:1646 */ +#line 2535 "./util/configparser.y" /* yacc.c:1646 */ { char* ptr; OUTYY(("P(view_local_data_ptr:%s)\n", (yyvsp[0].str))); @@ -5503,11 +5505,11 @@ yyreduce: yyerror("local-data-ptr could not be reversed"); } } -#line 5507 "util/configparser.c" /* yacc.c:1646 */ +#line 5509 "util/configparser.c" /* yacc.c:1646 */ break; case 465: -#line 2548 "./util/configparser.y" /* yacc.c:1646 */ +#line 2550 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(view-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5515,19 +5517,19 @@ yyreduce: else cfg_parser->cfg->views->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5519 "util/configparser.c" /* yacc.c:1646 */ +#line 5521 "util/configparser.c" /* yacc.c:1646 */ break; case 466: -#line 2557 "./util/configparser.y" /* yacc.c:1646 */ +#line 2559 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(remote-control:)\n")); } -#line 5527 "util/configparser.c" /* yacc.c:1646 */ +#line 5529 "util/configparser.c" /* yacc.c:1646 */ break; case 477: -#line 2568 "./util/configparser.y" /* yacc.c:1646 */ +#line 2570 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(control_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5536,11 +5538,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5540 "util/configparser.c" /* yacc.c:1646 */ +#line 5542 "util/configparser.c" /* yacc.c:1646 */ break; case 478: -#line 2578 "./util/configparser.y" /* yacc.c:1646 */ +#line 2580 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(control_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5548,79 +5550,79 @@ yyreduce: else cfg_parser->cfg->control_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5552 "util/configparser.c" /* yacc.c:1646 */ +#line 5554 "util/configparser.c" /* yacc.c:1646 */ break; case 479: -#line 2587 "./util/configparser.y" /* yacc.c:1646 */ +#line 2589 "./util/configparser.y" /* yacc.c:1646 */ { 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 5562 "util/configparser.c" /* yacc.c:1646 */ +#line 5564 "util/configparser.c" /* yacc.c:1646 */ break; case 480: -#line 2594 "./util/configparser.y" /* yacc.c:1646 */ +#line 2596 "./util/configparser.y" /* yacc.c:1646 */ { 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 5572 "util/configparser.c" /* yacc.c:1646 */ +#line 5574 "util/configparser.c" /* yacc.c:1646 */ break; case 481: -#line 2601 "./util/configparser.y" /* yacc.c:1646 */ +#line 2603 "./util/configparser.y" /* yacc.c:1646 */ { 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 5582 "util/configparser.c" /* yacc.c:1646 */ +#line 5584 "util/configparser.c" /* yacc.c:1646 */ break; case 482: -#line 2608 "./util/configparser.y" /* yacc.c:1646 */ +#line 2610 "./util/configparser.y" /* yacc.c:1646 */ { 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 5592 "util/configparser.c" /* yacc.c:1646 */ +#line 5594 "util/configparser.c" /* yacc.c:1646 */ break; case 483: -#line 2615 "./util/configparser.y" /* yacc.c:1646 */ +#line 2617 "./util/configparser.y" /* yacc.c:1646 */ { 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 5602 "util/configparser.c" /* yacc.c:1646 */ +#line 5604 "util/configparser.c" /* yacc.c:1646 */ break; case 484: -#line 2622 "./util/configparser.y" /* yacc.c:1646 */ +#line 2624 "./util/configparser.y" /* yacc.c:1646 */ { 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 5612 "util/configparser.c" /* yacc.c:1646 */ +#line 5614 "util/configparser.c" /* yacc.c:1646 */ break; case 485: -#line 2629 "./util/configparser.y" /* yacc.c:1646 */ +#line 2631 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(dnstap:)\n")); } -#line 5620 "util/configparser.c" /* yacc.c:1646 */ +#line 5622 "util/configparser.c" /* yacc.c:1646 */ break; case 500: -#line 2646 "./util/configparser.y" /* yacc.c:1646 */ +#line 2648 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5628,21 +5630,21 @@ yyreduce: else cfg_parser->cfg->dnstap = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5632 "util/configparser.c" /* yacc.c:1646 */ +#line 5634 "util/configparser.c" /* yacc.c:1646 */ break; case 501: -#line 2655 "./util/configparser.y" /* yacc.c:1646 */ +#line 2657 "./util/configparser.y" /* yacc.c:1646 */ { 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 5642 "util/configparser.c" /* yacc.c:1646 */ +#line 5644 "util/configparser.c" /* yacc.c:1646 */ break; case 502: -#line 2662 "./util/configparser.y" /* yacc.c:1646 */ +#line 2664 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_send_identity:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5650,11 +5652,11 @@ yyreduce: else cfg_parser->cfg->dnstap_send_identity = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5654 "util/configparser.c" /* yacc.c:1646 */ +#line 5656 "util/configparser.c" /* yacc.c:1646 */ break; case 503: -#line 2671 "./util/configparser.y" /* yacc.c:1646 */ +#line 2673 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_send_version:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5662,31 +5664,31 @@ yyreduce: else cfg_parser->cfg->dnstap_send_version = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5666 "util/configparser.c" /* yacc.c:1646 */ +#line 5668 "util/configparser.c" /* yacc.c:1646 */ break; case 504: -#line 2680 "./util/configparser.y" /* yacc.c:1646 */ +#line 2682 "./util/configparser.y" /* yacc.c:1646 */ { 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 5676 "util/configparser.c" /* yacc.c:1646 */ +#line 5678 "util/configparser.c" /* yacc.c:1646 */ break; case 505: -#line 2687 "./util/configparser.y" /* yacc.c:1646 */ +#line 2689 "./util/configparser.y" /* yacc.c:1646 */ { 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 5686 "util/configparser.c" /* yacc.c:1646 */ +#line 5688 "util/configparser.c" /* yacc.c:1646 */ break; case 506: -#line 2694 "./util/configparser.y" /* yacc.c:1646 */ +#line 2696 "./util/configparser.y" /* yacc.c:1646 */ { 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) @@ -5695,11 +5697,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5699 "util/configparser.c" /* yacc.c:1646 */ +#line 5701 "util/configparser.c" /* yacc.c:1646 */ break; case 507: -#line 2704 "./util/configparser.y" /* yacc.c:1646 */ +#line 2706 "./util/configparser.y" /* yacc.c:1646 */ { 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) @@ -5708,11 +5710,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5712 "util/configparser.c" /* yacc.c:1646 */ +#line 5714 "util/configparser.c" /* yacc.c:1646 */ break; case 508: -#line 2714 "./util/configparser.y" /* yacc.c:1646 */ +#line 2716 "./util/configparser.y" /* yacc.c:1646 */ { 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) @@ -5721,11 +5723,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5725 "util/configparser.c" /* yacc.c:1646 */ +#line 5727 "util/configparser.c" /* yacc.c:1646 */ break; case 509: -#line 2724 "./util/configparser.y" /* yacc.c:1646 */ +#line 2726 "./util/configparser.y" /* yacc.c:1646 */ { 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) @@ -5734,11 +5736,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5738 "util/configparser.c" /* yacc.c:1646 */ +#line 5740 "util/configparser.c" /* yacc.c:1646 */ break; case 510: -#line 2734 "./util/configparser.y" /* yacc.c:1646 */ +#line 2736 "./util/configparser.y" /* yacc.c:1646 */ { 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) @@ -5747,11 +5749,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5751 "util/configparser.c" /* yacc.c:1646 */ +#line 5753 "util/configparser.c" /* yacc.c:1646 */ break; case 511: -#line 2744 "./util/configparser.y" /* yacc.c:1646 */ +#line 2746 "./util/configparser.y" /* yacc.c:1646 */ { 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) @@ -5760,29 +5762,29 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5764 "util/configparser.c" /* yacc.c:1646 */ +#line 5766 "util/configparser.c" /* yacc.c:1646 */ break; case 512: -#line 2754 "./util/configparser.y" /* yacc.c:1646 */ +#line 2756 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(python:)\n")); } -#line 5772 "util/configparser.c" /* yacc.c:1646 */ +#line 5774 "util/configparser.c" /* yacc.c:1646 */ break; case 516: -#line 2763 "./util/configparser.y" /* yacc.c:1646 */ +#line 2765 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(python-script:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->python_script); cfg_parser->cfg->python_script = (yyvsp[0].str); } -#line 5782 "util/configparser.c" /* yacc.c:1646 */ +#line 5784 "util/configparser.c" /* yacc.c:1646 */ break; case 517: -#line 2769 "./util/configparser.y" /* yacc.c:1646 */ +#line 2771 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(disable_dnssec_lame_check:%s)\n", (yyvsp[0].str))); if (strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5791,21 +5793,21 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5795 "util/configparser.c" /* yacc.c:1646 */ +#line 5797 "util/configparser.c" /* yacc.c:1646 */ break; case 518: -#line 2779 "./util/configparser.y" /* yacc.c:1646 */ +#line 2781 "./util/configparser.y" /* yacc.c:1646 */ { 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 5805 "util/configparser.c" /* yacc.c:1646 */ +#line 5807 "util/configparser.c" /* yacc.c:1646 */ break; case 519: -#line 2786 "./util/configparser.y" /* yacc.c:1646 */ +#line 2788 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); validate_respip_action((yyvsp[0].str)); @@ -5813,30 +5815,30 @@ yyreduce: (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding response-ip"); } -#line 5817 "util/configparser.c" /* yacc.c:1646 */ +#line 5819 "util/configparser.c" /* yacc.c:1646 */ break; case 520: -#line 2795 "./util/configparser.y" /* yacc.c:1646 */ +#line 2797 "./util/configparser.y" /* yacc.c:1646 */ { 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 5828 "util/configparser.c" /* yacc.c:1646 */ +#line 5830 "util/configparser.c" /* yacc.c:1646 */ break; case 521: -#line 2803 "./util/configparser.y" /* yacc.c:1646 */ +#line 2805 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(dnscrypt:)\n")); } -#line 5836 "util/configparser.c" /* yacc.c:1646 */ +#line 5838 "util/configparser.c" /* yacc.c:1646 */ break; case 534: -#line 2819 "./util/configparser.y" /* yacc.c:1646 */ +#line 2821 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5844,11 +5846,11 @@ yyreduce: else cfg_parser->cfg->dnscrypt = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5848 "util/configparser.c" /* yacc.c:1646 */ +#line 5850 "util/configparser.c" /* yacc.c:1646 */ break; case 535: -#line 2829 "./util/configparser.y" /* yacc.c:1646 */ +#line 2831 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5856,21 +5858,21 @@ yyreduce: else cfg_parser->cfg->dnscrypt_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5860 "util/configparser.c" /* yacc.c:1646 */ +#line 5862 "util/configparser.c" /* yacc.c:1646 */ break; case 536: -#line 2838 "./util/configparser.y" /* yacc.c:1646 */ +#line 2840 "./util/configparser.y" /* yacc.c:1646 */ { 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 5870 "util/configparser.c" /* yacc.c:1646 */ +#line 5872 "util/configparser.c" /* yacc.c:1646 */ break; case 537: -#line 2845 "./util/configparser.y" /* yacc.c:1646 */ +#line 2847 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_provider_cert:%s)\n", (yyvsp[0].str))); if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str))) @@ -5878,21 +5880,21 @@ yyreduce: if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str))) fatal_exit("out of memory adding dnscrypt-provider-cert"); } -#line 5882 "util/configparser.c" /* yacc.c:1646 */ +#line 5884 "util/configparser.c" /* yacc.c:1646 */ break; case 538: -#line 2854 "./util/configparser.y" /* yacc.c:1646 */ +#line 2856 "./util/configparser.y" /* yacc.c:1646 */ { 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 5892 "util/configparser.c" /* yacc.c:1646 */ +#line 5894 "util/configparser.c" /* yacc.c:1646 */ break; case 539: -#line 2861 "./util/configparser.y" /* yacc.c:1646 */ +#line 2863 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_secret_key:%s)\n", (yyvsp[0].str))); if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str))) @@ -5900,22 +5902,22 @@ yyreduce: if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str))) fatal_exit("out of memory adding dnscrypt-secret-key"); } -#line 5904 "util/configparser.c" /* yacc.c:1646 */ +#line 5906 "util/configparser.c" /* yacc.c:1646 */ break; case 540: -#line 2870 "./util/configparser.y" /* yacc.c:1646 */ +#line 2872 "./util/configparser.y" /* yacc.c:1646 */ { 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 5915 "util/configparser.c" /* yacc.c:1646 */ +#line 5917 "util/configparser.c" /* yacc.c:1646 */ break; case 541: -#line 2878 "./util/configparser.y" /* yacc.c:1646 */ +#line 2880 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnscrypt_shared_secret_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5927,22 +5929,22 @@ yyreduce: } free((yyvsp[0].str)); } -#line 5931 "util/configparser.c" /* yacc.c:1646 */ +#line 5933 "util/configparser.c" /* yacc.c:1646 */ break; case 542: -#line 2891 "./util/configparser.y" /* yacc.c:1646 */ +#line 2893 "./util/configparser.y" /* yacc.c:1646 */ { 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 5942 "util/configparser.c" /* yacc.c:1646 */ +#line 5944 "util/configparser.c" /* yacc.c:1646 */ break; case 543: -#line 2899 "./util/configparser.y" /* yacc.c:1646 */ +#line 2901 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnscrypt_nonce_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5954,19 +5956,19 @@ yyreduce: } free((yyvsp[0].str)); } -#line 5958 "util/configparser.c" /* yacc.c:1646 */ +#line 5960 "util/configparser.c" /* yacc.c:1646 */ break; case 544: -#line 2912 "./util/configparser.y" /* yacc.c:1646 */ +#line 2914 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(cachedb:)\n")); } -#line 5966 "util/configparser.c" /* yacc.c:1646 */ +#line 5968 "util/configparser.c" /* yacc.c:1646 */ break; case 552: -#line 2922 "./util/configparser.y" /* yacc.c:1646 */ +#line 2924 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_CACHEDB OUTYY(("P(backend:%s)\n", (yyvsp[0].str))); @@ -5980,11 +5982,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5984 "util/configparser.c" /* yacc.c:1646 */ +#line 5986 "util/configparser.c" /* yacc.c:1646 */ break; case 553: -#line 2937 "./util/configparser.y" /* yacc.c:1646 */ +#line 2939 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_CACHEDB OUTYY(("P(secret-seed:%s)\n", (yyvsp[0].str))); @@ -5998,11 +6000,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6002 "util/configparser.c" /* yacc.c:1646 */ +#line 6004 "util/configparser.c" /* yacc.c:1646 */ break; case 554: -#line 2952 "./util/configparser.y" /* yacc.c:1646 */ +#line 2954 "./util/configparser.y" /* yacc.c:1646 */ { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_server_host:%s)\n", (yyvsp[0].str))); @@ -6013,11 +6015,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6017 "util/configparser.c" /* yacc.c:1646 */ +#line 6019 "util/configparser.c" /* yacc.c:1646 */ break; case 555: -#line 2964 "./util/configparser.y" /* yacc.c:1646 */ +#line 2966 "./util/configparser.y" /* yacc.c:1646 */ { #if defined(USE_CACHEDB) && defined(USE_REDIS) int port; @@ -6031,11 +6033,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 6035 "util/configparser.c" /* yacc.c:1646 */ +#line 6037 "util/configparser.c" /* yacc.c:1646 */ break; case 556: -#line 2979 "./util/configparser.y" /* yacc.c:1646 */ +#line 2981 "./util/configparser.y" /* yacc.c:1646 */ { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_timeout:%s)\n", (yyvsp[0].str))); @@ -6047,11 +6049,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 6051 "util/configparser.c" /* yacc.c:1646 */ +#line 6053 "util/configparser.c" /* yacc.c:1646 */ break; case 557: -#line 2992 "./util/configparser.y" /* yacc.c:1646 */ +#line 2994 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tcp_connection_limit:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if (atoi((yyvsp[0].str)) < 0) @@ -6061,11 +6063,11 @@ yyreduce: fatal_exit("out of memory adding tcp connection limit"); } } -#line 6065 "util/configparser.c" /* yacc.c:1646 */ +#line 6067 "util/configparser.c" /* yacc.c:1646 */ break; -#line 6069 "util/configparser.c" /* yacc.c:1646 */ +#line 6071 "util/configparser.c" /* yacc.c:1646 */ default: break; } /* User semantic actions sometimes alter yychar, and that requires @@ -6293,7 +6295,7 @@ yyreturn: #endif return yyresult; } -#line 3002 "./util/configparser.y" /* yacc.c:1906 */ +#line 3004 "./util/configparser.y" /* yacc.c:1906 */ /* parse helper routines could be here */ diff --git a/util/configparser.y b/util/configparser.y index 61665558a..a4fbf3ead 100644 --- a/util/configparser.y +++ b/util/configparser.y @@ -348,9 +348,11 @@ content_auth: auth_name | auth_zonefile | auth_master | auth_url | rpz_tag: VAR_TAGS STRING_ARG { + size_t len; + uint8_t* bitlist; OUTYY(("P(server_local_zone_tag:%s)\n", $2)); - size_t len = 0; - uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, $2, + len = 0; + bitlist = config_parse_taglist(cfg_parser->cfg, $2, &len); free($2); if(!bitlist) { From 74f11b852c4602008a40caaacec020fc64216d9e Mon Sep 17 00:00:00 2001 From: Ralph Dolmans Date: Thu, 11 Apr 2019 15:07:49 +0200 Subject: [PATCH 04/56] - apply chroot to auth-zone zonefile in unbound-checkconf --- smallapp/unbound-checkconf.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/smallapp/unbound-checkconf.c b/smallapp/unbound-checkconf.c index eddd3e172..0cf3d35aa 100644 --- a/smallapp/unbound-checkconf.c +++ b/smallapp/unbound-checkconf.c @@ -433,6 +433,7 @@ check_modules_exist(const char* module_conf) static void morechecks(struct config_file* cfg) { + struct config_auth* auth; warn_hosts("stub-host", cfg->stubs); warn_hosts("forward-host", cfg->forwards); interfacechecks(cfg); @@ -498,6 +499,12 @@ morechecks(struct config_file* cfg) cfg->trusted_keys_file_list, cfg->chrootdir, cfg); check_chroot_string("dlv-anchor-file", &cfg->dlv_anchor_file, cfg->chrootdir, cfg); + for(auth = cfg->auths; auth; auth = auth->next) { + char* az = (auth->isrpz) ? "rpz zonefile" : + "auth-zone zonefile"; + check_chroot_string(az, &auth->zonefile, + cfg->chrootdir, cfg); + } #ifdef USE_IPSECMOD if(cfg->ipsecmod_enabled && strstr(cfg->module_conf, "ipsecmod")) { /* only check hook if enabled */ From ba67920f9ac18c06f60a0952b933801105f3f4e6 Mon Sep 17 00:00:00 2001 From: Ralph Dolmans Date: Thu, 25 Apr 2019 14:46:45 +0200 Subject: [PATCH 05/56] - IXFR/AXFR support for RPZ --- services/authzone.c | 73 +- services/localzone.c | 14 +- services/localzone.h | 11 + services/rpz.c | 152 ++- util/configparser.c | 2001 +++++++++++++++++++------------------- util/configparser.y | 3 +- util/data/packed_rrset.c | 80 ++ util/data/packed_rrset.h | 24 + util/iana_ports.inc | 1 + 9 files changed, 1253 insertions(+), 1106 deletions(-) diff --git a/services/authzone.c b/services/authzone.c index aad6028e6..ae21f3f72 100644 --- a/services/authzone.c +++ b/services/authzone.c @@ -674,23 +674,6 @@ domain_remove_rrset(struct auth_data* node, uint16_t rr_type) } } -/** find an rr index in the rrset. returns true if found */ -static int -az_rrset_find_rr(struct packed_rrset_data* d, uint8_t* rdata, size_t len, - size_t* index) -{ - size_t i; - for(i=0; icount; i++) { - if(d->rr_len[i] != len) - continue; - if(memcmp(d->rr_data[i], rdata, len) == 0) { - *index = i; - return 1; - } - } - return 0; -} - /** find an rrsig index in the rrset. returns true if found */ static int az_rrset_find_rrsig(struct packed_rrset_data* d, uint8_t* rdata, size_t len, @@ -740,58 +723,10 @@ rrsig_rdata_get_type_covered(uint8_t* rdata, size_t rdatalen) static int rrset_remove_rr(struct auth_rrset* rrset, size_t index) { - struct packed_rrset_data* d, *old = rrset->data; - size_t i; - if(index >= old->count + old->rrsig_count) - return 0; /* index out of bounds */ - d = (struct packed_rrset_data*)calloc(1, packed_rrset_sizeof(old) - ( - sizeof(size_t) + sizeof(uint8_t*) + sizeof(time_t) + - old->rr_len[index])); - if(!d) { - log_err("malloc failure"); + struct packed_rrset_data* d = + packed_rrset_remove_rr(rrset->data, index, NULL); + if(!d) return 0; - } - d->ttl = old->ttl; - d->count = old->count; - d->rrsig_count = old->rrsig_count; - if(index < d->count) d->count--; - else d->rrsig_count--; - d->trust = old->trust; - d->security = old->security; - - /* set rr_len, needed for ptr_fixup */ - d->rr_len = (size_t*)((uint8_t*)d + - sizeof(struct packed_rrset_data)); - if(index > 0) - memmove(d->rr_len, old->rr_len, (index)*sizeof(size_t)); - if(index+1 < old->count+old->rrsig_count) - memmove(&d->rr_len[index], &old->rr_len[index+1], - (old->count+old->rrsig_count - (index+1))*sizeof(size_t)); - packed_rrset_ptr_fixup(d); - - /* move over ttls */ - if(index > 0) - memmove(d->rr_ttl, old->rr_ttl, (index)*sizeof(time_t)); - if(index+1 < old->count+old->rrsig_count) - memmove(&d->rr_ttl[index], &old->rr_ttl[index+1], - (old->count+old->rrsig_count - (index+1))*sizeof(time_t)); - - /* move over rr_data */ - for(i=0; icount+d->rrsig_count; i++) { - size_t oldi; - if(i < index) oldi = i; - else oldi = i+1; - memmove(d->rr_data[i], old->rr_data[oldi], d->rr_len[i]); - } - - /* recalc ttl (lowest of remaining RR ttls) */ - if(d->count + d->rrsig_count > 0) - d->ttl = d->rr_ttl[0]; - for(i=0; icount+d->rrsig_count; i++) { - if(d->rr_ttl[i] < d->ttl) - d->ttl = d->rr_ttl[i]; - } - free(rrset->data); rrset->data = d; return 1; @@ -1210,7 +1145,7 @@ az_domain_remove_rr(struct auth_data* node, uint16_t rr_type, /* find the plain RR of the given type */ if((rrset=az_domain_rrset(node, rr_type))!= NULL) { - if(az_rrset_find_rr(rrset->data, rdata, rdatalen, &index)) { + if(packed_rrset_find_rr(rrset->data, rdata, rdatalen, &index)) { if(rrset->data->count == 1 && rrset->data->rrsig_count == 0) { /* last RR, delete the rrset */ diff --git a/services/localzone.c b/services/localzone.c index 337dcb4d6..fda2b31eb 100644 --- a/services/localzone.c +++ b/services/localzone.c @@ -394,9 +394,8 @@ rrset_insert_rr(struct regional* region, struct packed_rrset_data* pd, return 1; } -/** find a data node by exact name */ -static struct local_data* -lz_find_node(struct local_zone* z, uint8_t* nm, size_t nmlen, int nmlabs) +struct local_data* +local_zone_find_data(struct local_zone* z, uint8_t* nm, size_t nmlen, int nmlabs) { struct local_data key; key.node.key = &key; @@ -411,7 +410,7 @@ static int lz_find_create_node(struct local_zone* z, uint8_t* nm, size_t nmlen, int nmlabs, struct local_data** res) { - struct local_data* ld = lz_find_node(z, nm, nmlen, nmlabs); + struct local_data* ld = local_zone_find_data(z, nm, nmlen, nmlabs); if(!ld) { /* create a domain name to store rr. */ ld = (struct local_data*)regional_alloc_zero(z->region, @@ -1395,6 +1394,7 @@ local_data_answer(struct local_zone* z, struct module_env* env, regional_alloc_init(temp, lr->rrset, sizeof(*lr->rrset)); if(!qinfo->local_alias->rrset) return 0; /* out of memory */ + /* TODO local_alias->rrset change cnam etarget */ qinfo->local_alias->rrset->rk.dname = qinfo->qname; qinfo->local_alias->rrset->rk.dname_len = qinfo->qname_len; return 1; @@ -1861,7 +1861,7 @@ del_empty_term(struct local_zone* z, struct local_data* d, return; dname_remove_label(&name, &len); labs--; - d = lz_find_node(z, name, len, labs); + d = local_zone_find_data(z, name, len, labs); } } @@ -1894,7 +1894,7 @@ void local_zones_del_data(struct local_zones* zones, z = local_zones_lookup(zones, name, len, labs, dclass, LDNS_RR_TYPE_DS); if(z) { lock_rw_wrlock(&z->lock); - d = lz_find_node(z, name, len, labs); + d = local_zone_find_data(z, name, len, labs); if(d) { del_local_rrset(d, LDNS_RR_TYPE_DS); del_empty_term(z, d, name, len, labs); @@ -1915,7 +1915,7 @@ void local_zones_del_data(struct local_zones* zones, lock_rw_unlock(&zones->lock); /* find the domain */ - d = lz_find_node(z, name, len, labs); + d = local_zone_find_data(z, name, len, labs); if(d) { /* no memory recycling for zone deletions ... */ d->rrsets = NULL; diff --git a/services/localzone.h b/services/localzone.h index 96d67dbf3..d8dfa0145 100644 --- a/services/localzone.h +++ b/services/localzone.h @@ -567,4 +567,15 @@ int local_zone_enter_rr(struct local_zone* z, uint8_t* nm, size_t nmlen, int nmlabs, uint16_t rrtype, uint16_t rrclass, time_t ttl, uint8_t* rdata, size_t rdata_len, const char* rrstr); + +/** + * Find a data node by exact name for a local zone + * @param z: local_zone containing data tree + * @param nm: name of local-data element to find + * @param nmlen: length of nm + * @param nmlabs: labs of nm + * @return local_data on exact match, NULL otherwise. + */ +struct local_data* +local_zone_find_data(struct local_zone* z, uint8_t* nm, size_t nmlen, int nmlabs); #endif /* SERVICES_LOCALZONE_H */ diff --git a/services/rpz.c b/services/rpz.c index 0b6c8df0d..ff9cf7e41 100644 --- a/services/rpz.c +++ b/services/rpz.c @@ -295,6 +295,8 @@ rpz_insert_qname_trigger(struct rpz* r, uint8_t* dname, size_t dnamelen, /* insert data. TODO synth wildcard cname target on * lookup */ rrstr = sldns_wire2str_rr(rr, rr_len); + /* TODO non region alloc so rrs can be free after IXFR deletion? + * */ local_zone_enter_rr(z, dname, dnamelen, dnamelabs, rrtype, rrclass, ttl, rdata, rdata_len, rrstr); free(rrstr); @@ -333,33 +335,17 @@ rpz_insert_rr(struct rpz* r, size_t aznamelen, uint8_t* dname, } } -void -rpz_remove_rr(struct rpz* r, size_t aznamelen, uint8_t* dname, - size_t dnamelen, uint16_t rr_type, uint16_t rr_class, uint8_t* rdatawl, - size_t rdatalen, uint8_t* rr, size_t rr_len) -{ - /* TODO: remove RR, used for IXFR */ - /* void cast all to prevent compiler warning */ - (void)r; - (void)aznamelen; - (void)dname; - (void)dnamelen; - (void)rr_type; - (void)rr_class; - (void)rdatawl; - (void)rdatalen; - (void)rr; - (void)rr_len; -} - /** * Find RPZ local-zone by qname. * @param r: rpz containing local-zone tree * @param qinfo: qinfo struct - * @return: NULL or local-zone holding rd lock + * @param only_exact: if 1 only excact (non wildcard) matches are returned + * @param wr: get write lock for local-zone if 1, read lock if 0 + * @return: NULL or local-zone holding rd or wr lock */ static struct local_zone* -rpz_find_zone(struct rpz* r, struct query_info* qinfo) +rpz_find_zone(struct rpz* r, uint8_t* qname, size_t qname_len, uint16_t qclass, + int only_exact, int wr) { uint8_t* ce; size_t ce_len, ce_labs; @@ -367,14 +353,17 @@ rpz_find_zone(struct rpz* r, struct query_info* qinfo) int exact; struct local_zone* z = NULL; lock_rw_rdlock(&r->local_zones->lock); - z = local_zones_find_le(r->local_zones, qinfo->qname, - qinfo->qname_len, dname_count_labels(qinfo->qname), + z = local_zones_find_le(r->local_zones, qname, qname_len, + dname_count_labels(qname), LDNS_RR_CLASS_IN, &exact); - if(!z) { + if(!z || (only_exact && !exact)) { lock_rw_unlock(&r->local_zones->lock); return NULL; } - lock_rw_rdlock(&z->lock); + if(wr) + lock_rw_wrlock(&z->lock); + else + lock_rw_rdlock(&z->lock); lock_rw_unlock(&r->local_zones->lock); if(exact) @@ -384,7 +373,7 @@ rpz_find_zone(struct rpz* r, struct query_info* qinfo) * be the shared parent between the qname and the best local * zone match, append '*' to that and do another lookup. */ - ce = dname_get_shared_topdomain(z->name, qinfo->qname); + ce = dname_get_shared_topdomain(z->name, qname); if(!ce /* should not happen */ || !*ce /* root */) { lock_rw_unlock(&z->lock); return NULL; @@ -401,16 +390,117 @@ rpz_find_zone(struct rpz* r, struct query_info* qinfo) lock_rw_rdlock(&r->local_zones->lock); z = local_zones_find_le(r->local_zones, wc, - ce_len+2, ce_labs+1, qinfo->qclass, &exact); + ce_len+2, ce_labs+1, qclass, &exact); if(!z || !exact) { lock_rw_unlock(&r->local_zones->lock); return NULL; } - lock_rw_rdlock(&z->lock); + if(wr) + lock_rw_wrlock(&z->lock); + else + lock_rw_rdlock(&z->lock); lock_rw_unlock(&r->local_zones->lock); return z; } +/** + * Remove RR from RPZ's local-data + * @param z: local-zone for RPZ, holding write lock + * @param policydname: dname of RR to remove + * @param policydnamelen: lenth of policydname + * @param rr_type: RR type of RR to remove + * @param rdata: rdata of RR to remove + * @param rdatalen: length of rdata + * @return: 1 if zone must be removed after RR deletion + */ +static int +rpz_data_delete_rr(struct local_zone* z, uint8_t* policydname, + size_t policydnamelen, uint16_t rr_type, uint8_t* rdata, + size_t rdatalen) +{ + struct local_data* ld; + struct packed_rrset_data* d; + size_t index; + ld = local_zone_find_data(z, policydname, policydnamelen, + dname_count_labels(policydname)); + if(ld) { + struct local_rrset* prev=NULL, *p=ld->rrsets; + while(p && ntohs(p->rrset->rk.type) != rr_type) { + prev = p; + p = p->next; + } + if(!p) + return 0; + d = (struct packed_rrset_data*)p->rrset->entry.data; + if(packed_rrset_find_rr(d, rdata, rdatalen, &index)) { + if(d->count == 1) { + /* no memory recycling for zone deletions ... */ + if(prev) prev->next = p->next; + else ld->rrsets = p->next; + + } + if(d->count > 1) { + struct packed_rrset_data* new; + new = packed_rrset_remove_rr(d, index, z->region); + if(!new) + return 0; + p->rrset->entry.data = new; + } + } + } + if(ld && ld->rrsets) + return 0; + return 1; +} + +void +rpz_remove_rr(struct rpz* r, size_t aznamelen, uint8_t* dname, + size_t dnamelen, uint16_t rr_type, uint16_t rr_class, uint8_t* rdatawl, + size_t rdatalen, uint8_t* rr, size_t rr_len) +{ + struct local_zone* z; + size_t policydnamelen; + /* name is free'd in local_zone delete */ + uint8_t* policydname = calloc(1, LDNS_MAX_DOMAINLEN + 1); + enum rpz_trigger t; + enum rpz_action a; + int delete_zone = 1; + + (void)rr; + (void)rr_len; + + a = rpz_rr_to_action(rr_type, rdatawl, rdatalen); + if(!(policydnamelen = strip_dname_origin(dname, dnamelen, aznamelen, + policydname))) { + free(policydname); + return; + } + t = rpz_dname_to_trigger(policydname); + if(t == RPZ_QNAME_TRIGGER) { + z = rpz_find_zone(r, policydname, policydnamelen, rr_class, + 1 /* only exact */, 1 /* wr lock */); + if(!z) { + verbose(VERB_ALGO, "RPZ: cannot remove RR from IXFR, " + "RPZ domain not found"); + free(policydname); + return; + } + if(a == RPZ_LOCAL_DATA_ACTION) + delete_zone = rpz_data_delete_rr(z, policydname, + policydnamelen, rr_type, rdatawl, rdatalen); + lock_rw_unlock(&z->lock); + if(delete_zone) { + local_zones_del_zone(r->local_zones, z); + } + } + else { + verbose(VERB_ALGO, "RPZ: skipping unusupported trigger: %s " + "while removing RPZ RRs", + rpz_trigger_to_string(t)); + } + free(policydname); +} + /** print log information for an applied RPZ policy. Based on local-zone's * lz_inform_print(). */ @@ -442,7 +532,8 @@ rpz_apply_qname_trigger(struct auth_zones* az, struct module_env* env, for(r = az->rpz_first; r && !z; r = r->next) { if(!r->taglist || taglist_intersect(r->taglist, r->taglistlen, taglist, taglen)) - z = rpz_find_zone(r, qinfo); + z = rpz_find_zone(r, qinfo->qname, qinfo->qname_len, + qinfo->qclass, 0, 0); } lock_rw_unlock(&az->rpz_lock); if(!z) @@ -457,9 +548,8 @@ rpz_apply_qname_trigger(struct auth_zones* az, struct module_env* env, ret = local_zones_zone_answer(z, env, qinfo, edns, repinfo, buf, temp, 0 /* no local data used */, z->type); + rpz_inform_print(z, qinfo, repinfo); lock_rw_unlock(&z->lock); - if(ret) - rpz_inform_print(z, qinfo, repinfo); return ret; } diff --git a/util/configparser.c b/util/configparser.c index e19e3f8e8..e380c9639 100644 --- a/util/configparser.c +++ b/util/configparser.c @@ -930,16 +930,16 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 2 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 565 +#define YYLAST 571 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 269 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 290 /* YYNRULES -- Number of rules. */ -#define YYNRULES 557 +#define YYNRULES 560 /* YYNSTATES -- Number of states. */ -#define YYNSTATES 832 +#define YYNSTATES 835 /* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned by yylex, with out-of-bounds checking. */ @@ -1037,37 +1037,38 @@ static const yytype_uint16 yyrline[] = 303, 303, 303, 303, 304, 304, 306, 320, 321, 322, 322, 322, 322, 323, 323, 323, 325, 342, 343, 344, 344, 344, 344, 345, 345, 345, 346, 349, 368, 385, - 386, 387, 387, 387, 389, 398, 407, 418, 427, 436, - 445, 456, 465, 476, 489, 504, 515, 532, 549, 566, - 583, 598, 613, 626, 641, 650, 659, 668, 677, 686, - 695, 704, 713, 722, 731, 740, 749, 758, 771, 780, - 793, 802, 811, 820, 827, 834, 843, 850, 859, 867, - 874, 881, 889, 898, 907, 921, 930, 939, 948, 957, - 966, 975, 982, 989, 1015, 1023, 1030, 1037, 1044, 1051, - 1059, 1067, 1075, 1082, 1093, 1104, 1111, 1120, 1129, 1138, - 1145, 1152, 1160, 1168, 1178, 1188, 1198, 1206, 1219, 1230, - 1238, 1251, 1260, 1269, 1278, 1288, 1298, 1306, 1319, 1328, - 1336, 1345, 1353, 1366, 1375, 1382, 1392, 1402, 1412, 1422, - 1432, 1442, 1452, 1462, 1469, 1476, 1483, 1492, 1501, 1510, - 1519, 1526, 1536, 1556, 1563, 1581, 1594, 1607, 1616, 1625, - 1634, 1643, 1653, 1663, 1674, 1683, 1692, 1701, 1710, 1723, - 1736, 1745, 1752, 1761, 1770, 1779, 1788, 1796, 1809, 1817, - 1850, 1857, 1872, 1882, 1892, 1899, 1906, 1913, 1922, 1930, - 1944, 1965, 1986, 1998, 2010, 2022, 2031, 2052, 2062, 2071, - 2079, 2087, 2100, 2113, 2128, 2143, 2152, 2161, 2167, 2176, - 2185, 2195, 2205, 2218, 2231, 2243, 2257, 2269, 2283, 2293, - 2300, 2307, 2316, 2325, 2335, 2345, 2355, 2362, 2369, 2378, - 2387, 2397, 2407, 2414, 2421, 2428, 2436, 2446, 2456, 2466, - 2476, 2508, 2518, 2526, 2534, 2549, 2558, 2563, 2564, 2565, - 2565, 2565, 2566, 2566, 2566, 2567, 2567, 2569, 2579, 2588, - 2595, 2602, 2609, 2616, 2623, 2630, 2635, 2636, 2637, 2637, - 2638, 2638, 2639, 2639, 2640, 2641, 2642, 2643, 2644, 2645, - 2647, 2656, 2663, 2672, 2681, 2688, 2695, 2705, 2715, 2725, - 2735, 2745, 2755, 2760, 2761, 2762, 2764, 2770, 2780, 2787, - 2796, 2804, 2809, 2810, 2812, 2812, 2812, 2813, 2813, 2814, - 2815, 2816, 2817, 2818, 2820, 2830, 2839, 2846, 2855, 2862, - 2871, 2879, 2892, 2900, 2913, 2918, 2919, 2920, 2920, 2921, - 2921, 2921, 2923, 2938, 2953, 2965, 2980, 2993 + 386, 387, 387, 387, 387, 387, 388, 390, 399, 408, + 419, 428, 437, 446, 457, 466, 477, 490, 505, 516, + 533, 550, 567, 584, 599, 614, 627, 642, 651, 660, + 669, 678, 687, 696, 705, 714, 723, 732, 741, 750, + 759, 772, 781, 794, 803, 812, 821, 828, 835, 844, + 851, 860, 868, 875, 882, 890, 899, 908, 922, 931, + 940, 949, 958, 967, 976, 983, 990, 1016, 1024, 1031, + 1038, 1045, 1052, 1060, 1068, 1076, 1083, 1094, 1105, 1112, + 1121, 1130, 1139, 1146, 1153, 1161, 1169, 1179, 1189, 1199, + 1207, 1220, 1231, 1239, 1252, 1261, 1270, 1279, 1289, 1299, + 1307, 1320, 1329, 1337, 1346, 1354, 1367, 1376, 1383, 1393, + 1403, 1413, 1423, 1433, 1443, 1453, 1463, 1470, 1477, 1484, + 1493, 1502, 1511, 1520, 1527, 1537, 1557, 1564, 1582, 1595, + 1608, 1617, 1626, 1635, 1644, 1654, 1664, 1675, 1684, 1693, + 1702, 1711, 1724, 1737, 1746, 1753, 1762, 1771, 1780, 1789, + 1797, 1810, 1818, 1851, 1858, 1873, 1883, 1893, 1900, 1907, + 1914, 1923, 1931, 1945, 1966, 1987, 1999, 2011, 2023, 2032, + 2053, 2063, 2072, 2080, 2088, 2101, 2114, 2129, 2144, 2153, + 2162, 2168, 2177, 2186, 2196, 2206, 2219, 2232, 2244, 2258, + 2270, 2284, 2294, 2301, 2308, 2317, 2326, 2336, 2346, 2356, + 2363, 2370, 2379, 2388, 2398, 2408, 2415, 2422, 2429, 2437, + 2447, 2457, 2467, 2477, 2509, 2519, 2527, 2535, 2550, 2559, + 2564, 2565, 2566, 2566, 2566, 2567, 2567, 2567, 2568, 2568, + 2570, 2580, 2589, 2596, 2603, 2610, 2617, 2624, 2631, 2636, + 2637, 2638, 2638, 2639, 2639, 2640, 2640, 2641, 2642, 2643, + 2644, 2645, 2646, 2648, 2657, 2664, 2673, 2682, 2689, 2696, + 2706, 2716, 2726, 2736, 2746, 2756, 2761, 2762, 2763, 2765, + 2771, 2781, 2788, 2797, 2805, 2810, 2811, 2813, 2813, 2813, + 2814, 2814, 2815, 2816, 2817, 2818, 2819, 2821, 2831, 2840, + 2847, 2856, 2863, 2872, 2880, 2893, 2901, 2914, 2919, 2920, + 2921, 2921, 2922, 2922, 2922, 2924, 2939, 2954, 2966, 2981, + 2994 }; #endif @@ -1347,8 +1348,8 @@ static const yytype_int16 yypact[] = -192, 0, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, 256, -42, -37, -38, - -35, -41, -44, -136, -104, -191, -177, -1, 2, 3, - 28, 29, 30, 33, 35, 36, 37, 38, 39, 55, + -23, -41, -62, -131, -104, -168, -191, -2, -1, 2, + 3, 6, 7, 8, 9, 33, 51, 52, 53, 55, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 86, 87, 90, @@ -1361,12 +1362,12 @@ static const yytype_int16 yypact[] = 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, - 187, 188, 189, 190, 191, 194, 195, 196, 198, 204, - 205, 207, 211, 212, 213, 214, 215, 216, 218, 219, - 220, 221, 222, 223, 224, 226, 227, 228, 229, 230, - 231, 232, 234, 235, 236, 237, 238, 239, 240, 241, - 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, - 252, 253, 254, 255, 289, 290, -192, -192, -192, -192, + 187, 188, 189, 190, 191, 196, 197, 198, 199, 200, + 201, 202, 204, 205, 207, 216, 218, 219, 220, 222, + 223, 224, 226, 227, 228, 229, 230, 231, 232, 234, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, + 255, 289, 290, 291, 292, 296, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, @@ -1385,49 +1386,49 @@ static const yytype_int16 yypact[] = -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, - -192, -192, -192, -192, -192, -192, 291, 292, 296, 297, - 298, 340, 341, -192, -192, -192, -192, -192, -192, -192, - -192, 342, 343, 344, 345, 346, 347, -192, -192, -192, - -192, -192, -192, -192, 348, 352, 356, 357, 382, 383, - 384, -192, -192, -192, -192, -192, -192, -192, -192, 386, - 397, 398, 399, 400, 401, 402, 403, -192, -192, -192, - -192, -192, -192, -192, -192, -192, 404, -192, -192, -192, - -192, 405, 406, 407, 408, 409, 448, 450, 464, -192, - -192, -192, -192, -192, -192, -192, -192, -192, 465, 466, - 467, 468, 469, 470, 471, 472, 473, 474, 481, 482, + -192, -192, -192, -192, -192, -192, 297, 298, 340, 341, + 342, 343, 344, -192, -192, -192, -192, -192, -192, -192, + -192, 345, 346, 347, 348, 352, 356, -192, -192, -192, + -192, -192, -192, -192, 357, 382, 383, 384, 386, 397, + 398, -192, -192, -192, -192, -192, -192, -192, -192, 399, + 400, 401, 402, 403, 404, 405, 406, -192, -192, -192, + -192, -192, -192, -192, -192, -192, 407, -192, -192, -192, + -192, -192, -192, -192, 408, 409, 448, 450, 464, 465, + 466, 467, -192, -192, -192, -192, -192, -192, -192, -192, + -192, 468, 469, 470, 471, 472, 473, 474, 481, 482, + 483, 484, 485, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, 486, -192, -192, 488, + 489, 490, 491, 492, 493, 494, 497, 500, 503, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, - -192, -192, -192, 483, -192, -192, 484, 485, 486, 488, - 489, 490, 491, 492, 493, 494, -192, -192, -192, -192, - -192, -192, -192, -192, -192, -192, -192, 497, 500, 503, - 504, 513, -192, -192, -192, -192, -192, -192, -192, -192, + 504, 513, 514, 515, 516, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, - -192, -192, -192, -192, -192, -192, -192, 514, 515, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + 517, 518, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, 519, 520, 521, + -192, -192, -192, -192, -192, -192, -192, -192, -192, 522, + 523, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + 524, 525, 526, 527, 528, 529, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, 530, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, 531, -192, -192, 532, 533, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, - -192, -192, -192, -192, 516, 517, 518, -192, -192, -192, - -192, -192, -192, -192, -192, -192, 519, 520, -192, -192, - -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, - -192, -192, -192, -192, -192, -192, -192, 521, 522, 523, - 524, 525, 526, -192, -192, -192, -192, -192, -192, -192, - -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, - -192, -192, -192, -192, -192, -192, -192, -192, 527, -192, - -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, - -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, - -192, 528, -192, -192, 529, 530, -192, -192, -192, -192, - -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, - -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, - -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, - -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, - -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, - -192, 531, 532, 533, -192, -192, -192, -192, -192, -192, - -192, -192 + -192, -192, -192, -192, 534, 535, 536, -192, -192, -192, + -192, -192, -192, -192, -192 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. @@ -1435,9 +1436,9 @@ static const yytype_int16 yypact[] = means the default is an error. */ static const yytype_uint16 yydefact[] = { - 2, 0, 1, 15, 207, 217, 466, 512, 485, 226, - 521, 544, 236, 248, 3, 17, 209, 219, 228, 238, - 250, 468, 487, 514, 523, 546, 4, 5, 6, 10, + 2, 0, 1, 15, 207, 217, 469, 515, 488, 226, + 524, 547, 236, 248, 3, 17, 209, 219, 228, 238, + 250, 471, 490, 517, 526, 549, 4, 5, 6, 10, 13, 14, 8, 9, 7, 11, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1483,42 +1484,42 @@ static const yytype_uint16 yydefact[] = 0, 227, 229, 230, 233, 234, 231, 235, 232, 0, 0, 0, 0, 0, 0, 0, 0, 237, 239, 240, 241, 242, 246, 243, 244, 245, 0, 253, 249, 251, - 252, 0, 0, 0, 0, 0, 0, 0, 0, 467, - 469, 471, 470, 476, 472, 473, 474, 475, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 486, 488, 489, 490, 491, 492, 493, 494, 495, 496, - 497, 498, 499, 0, 513, 515, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 522, 524, 525, 526, - 528, 529, 527, 530, 531, 532, 533, 0, 0, 0, - 0, 0, 545, 547, 548, 549, 550, 551, 255, 254, - 261, 274, 272, 280, 281, 284, 282, 283, 285, 286, - 287, 288, 289, 311, 312, 313, 314, 315, 339, 340, - 341, 346, 347, 277, 348, 349, 352, 350, 351, 354, - 355, 356, 370, 326, 327, 329, 330, 357, 373, 320, - 322, 374, 380, 381, 382, 278, 338, 396, 397, 321, - 391, 304, 273, 316, 371, 377, 358, 0, 0, 400, - 279, 256, 303, 362, 257, 275, 276, 317, 318, 398, - 360, 364, 365, 258, 401, 342, 369, 305, 325, 375, - 376, 379, 390, 319, 394, 392, 393, 331, 337, 366, - 367, 332, 333, 359, 384, 306, 307, 310, 290, 292, - 293, 294, 295, 296, 402, 403, 405, 343, 344, 345, - 353, 406, 407, 408, 0, 0, 0, 361, 334, 517, - 417, 421, 419, 418, 422, 420, 0, 0, 425, 426, - 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, - 363, 378, 395, 430, 431, 335, 409, 0, 0, 0, - 0, 0, 0, 385, 386, 387, 388, 389, 518, 328, - 323, 383, 302, 259, 260, 324, 432, 434, 433, 435, - 436, 437, 291, 298, 427, 429, 428, 297, 0, 309, - 368, 404, 308, 336, 299, 300, 301, 438, 439, 440, - 444, 443, 441, 442, 445, 446, 447, 448, 450, 449, - 459, 0, 463, 464, 0, 0, 465, 451, 457, 452, - 453, 454, 456, 458, 455, 247, 477, 479, 478, 481, - 482, 483, 484, 480, 500, 501, 502, 503, 504, 505, - 506, 507, 508, 509, 510, 511, 516, 534, 535, 536, - 539, 537, 538, 540, 541, 542, 543, 552, 553, 554, - 555, 556, 372, 399, 416, 519, 520, 423, 424, 410, - 411, 0, 0, 0, 415, 557, 460, 461, 462, 414, - 412, 413 + 252, 254, 255, 256, 0, 0, 0, 0, 0, 0, + 0, 0, 470, 472, 474, 473, 479, 475, 476, 477, + 478, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 489, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 502, 0, 516, 518, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 525, + 527, 528, 529, 531, 532, 530, 533, 534, 535, 536, + 0, 0, 0, 0, 0, 548, 550, 551, 552, 553, + 554, 258, 257, 264, 277, 275, 283, 284, 287, 285, + 286, 288, 289, 290, 291, 292, 314, 315, 316, 317, + 318, 342, 343, 344, 349, 350, 280, 351, 352, 355, + 353, 354, 357, 358, 359, 373, 329, 330, 332, 333, + 360, 376, 323, 325, 377, 383, 384, 385, 281, 341, + 399, 400, 324, 394, 307, 276, 319, 374, 380, 361, + 0, 0, 403, 282, 259, 306, 365, 260, 278, 279, + 320, 321, 401, 363, 367, 368, 261, 404, 345, 372, + 308, 328, 378, 379, 382, 393, 322, 397, 395, 396, + 334, 340, 369, 370, 335, 336, 362, 387, 309, 310, + 313, 293, 295, 296, 297, 298, 299, 405, 406, 408, + 346, 347, 348, 356, 409, 410, 411, 0, 0, 0, + 364, 337, 520, 420, 424, 422, 421, 425, 423, 0, + 0, 428, 429, 265, 266, 267, 268, 269, 270, 271, + 272, 273, 274, 366, 381, 398, 433, 434, 338, 412, + 0, 0, 0, 0, 0, 0, 388, 389, 390, 391, + 392, 521, 331, 326, 386, 305, 262, 263, 327, 435, + 437, 436, 438, 439, 440, 294, 301, 430, 432, 431, + 300, 0, 312, 371, 407, 311, 339, 302, 303, 304, + 441, 442, 443, 447, 446, 444, 445, 448, 449, 450, + 451, 453, 452, 462, 0, 466, 467, 0, 0, 468, + 454, 460, 455, 456, 457, 459, 461, 458, 247, 480, + 482, 481, 484, 485, 486, 487, 483, 503, 504, 505, + 506, 507, 508, 509, 510, 511, 512, 513, 514, 519, + 537, 538, 539, 542, 540, 541, 543, 544, 545, 546, + 555, 556, 557, 558, 559, 375, 402, 419, 522, 523, + 426, 427, 413, 414, 0, 0, 0, 418, 560, 463, + 464, 465, 417, 415, 416 }; /* YYPGOTO[NTERM-NUM]. */ @@ -1546,7 +1547,7 @@ static const yytype_int16 yypgoto[] = -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -21, - 534, -192, -192, -192, -192, -192, -192, -192, -192, -192, + 537, 538, 539, 540, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, @@ -1581,12 +1582,12 @@ static const yytype_int16 yydefgoto[] = 405, 406, 407, 408, 409, 410, 424, 425, 426, 427, 428, 429, 430, 438, 439, 440, 441, 442, 443, 468, 469, 470, 471, 472, 473, 474, 475, 452, 453, 454, - 455, 456, 457, 458, 21, 32, 489, 490, 491, 492, - 493, 494, 495, 496, 497, 22, 33, 510, 511, 512, - 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, - 23, 34, 524, 525, 411, 412, 413, 414, 24, 35, - 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, - 546, 25, 36, 552, 553, 554, 555, 556, 557, 415 + 455, 456, 457, 458, 21, 32, 492, 493, 494, 495, + 496, 497, 498, 499, 500, 22, 33, 513, 514, 515, + 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, + 23, 34, 527, 528, 411, 412, 413, 414, 24, 35, + 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, + 549, 25, 36, 555, 556, 557, 558, 559, 560, 415 }; /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If @@ -1594,30 +1595,30 @@ static const yytype_int16 yydefgoto[] = number is the opposite. If YYTABLE_NINF, syntax error. */ static const yytype_uint16 yytable[] = { - 2, 416, 459, 417, 418, 444, 431, 523, 459, 558, - 479, 3, 559, 560, 432, 433, 498, 499, 500, 501, - 502, 503, 504, 505, 506, 507, 508, 509, 526, 527, - 528, 529, 530, 531, 532, 533, 534, 535, 561, 562, - 563, 445, 446, 564, 4, 565, 566, 567, 568, 569, - 5, 481, 482, 483, 484, 485, 486, 487, 488, 547, - 548, 549, 550, 551, 419, 570, 447, 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, 6, 420, 598, 599, 421, 434, - 600, 435, 601, 602, 603, 604, 605, 606, 607, 608, - 7, 609, 610, 611, 612, 613, 614, 615, 616, 617, - 618, 619, 620, 621, 622, 623, 624, 448, 449, 625, - 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, - 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, - 646, 8, 647, 648, 649, 650, 651, 652, 653, 654, - 655, 656, 657, 658, 659, 660, 450, 661, 662, 663, - 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, - 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, - 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, - 694, 695, 9, 461, 696, 697, 698, 460, 699, 461, - 462, 463, 464, 465, 700, 701, 422, 702, 10, 466, - 436, 703, 704, 705, 706, 707, 708, 476, 709, 710, - 711, 712, 713, 714, 715, 11, 716, 717, 718, 719, + 2, 416, 459, 417, 418, 444, 431, 526, 561, 562, + 479, 3, 563, 564, 432, 433, 565, 566, 567, 568, + 459, 501, 502, 503, 504, 505, 506, 507, 508, 509, + 510, 511, 512, 484, 485, 486, 487, 488, 489, 490, + 491, 445, 446, 569, 4, 550, 551, 552, 553, 554, + 5, 529, 530, 531, 532, 533, 534, 535, 536, 537, + 538, 570, 571, 572, 419, 573, 447, 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, 6, 420, 601, 602, 421, 434, + 603, 435, 604, 605, 606, 607, 608, 609, 610, 611, + 7, 612, 613, 614, 615, 616, 617, 618, 619, 620, + 621, 622, 623, 624, 625, 626, 627, 448, 449, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, + 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, + 649, 8, 650, 651, 652, 653, 654, 655, 656, 657, + 658, 659, 660, 661, 662, 663, 450, 664, 665, 666, + 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, + 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, + 697, 698, 9, 461, 462, 463, 699, 700, 701, 702, + 703, 704, 705, 466, 706, 707, 422, 708, 10, 460, + 436, 461, 462, 463, 464, 465, 709, 476, 710, 711, + 712, 466, 713, 714, 715, 11, 716, 717, 718, 719, 720, 721, 722, 12, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 0, 13, 37, 38, @@ -1648,20 +1649,21 @@ static const yytype_uint16 yytable[] = 808, 216, 217, 809, 810, 218, 219, 220, 221, 222, 223, 224, 225, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, - 828, 829, 830, 831, 0, 0, 0, 0, 0, 0, + 828, 829, 830, 831, 832, 833, 834, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 480 + 0, 0, 0, 0, 0, 0, 0, 0, 480, 481, + 482, 483 }; static const yytype_int16 yycheck[] = { - 0, 43, 43, 45, 46, 43, 43, 111, 43, 10, - 31, 11, 10, 10, 51, 52, 152, 153, 154, 155, - 156, 157, 158, 159, 160, 161, 162, 163, 219, 220, - 221, 222, 223, 224, 225, 226, 227, 228, 10, 10, - 10, 79, 80, 10, 44, 10, 10, 10, 10, 10, - 50, 95, 96, 97, 98, 99, 100, 101, 102, 236, - 237, 238, 239, 240, 106, 10, 104, 10, 10, 10, + 0, 43, 43, 45, 46, 43, 43, 111, 10, 10, + 31, 11, 10, 10, 51, 52, 10, 10, 10, 10, + 43, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 95, 96, 97, 98, 99, 100, 101, + 102, 79, 80, 10, 44, 236, 237, 238, 239, 240, + 50, 219, 220, 221, 222, 223, 224, 225, 226, 227, + 228, 10, 10, 10, 106, 10, 104, 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, 94, 137, 10, 10, 140, 136, @@ -1675,10 +1677,10 @@ 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, 202, 244, 10, 10, 10, 242, 10, 244, - 245, 246, 247, 248, 10, 10, 258, 10, 218, 254, - 257, 10, 10, 10, 10, 10, 10, 268, 10, 10, - 10, 10, 10, 10, 10, 235, 10, 10, 10, 10, + 10, 10, 202, 244, 245, 246, 10, 10, 10, 10, + 10, 10, 10, 254, 10, 10, 258, 10, 218, 242, + 257, 244, 245, 246, 247, 248, 10, 268, 10, 10, + 10, 254, 10, 10, 10, 235, 10, 10, 10, 10, 10, 10, 10, 243, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, -1, 267, 12, 13, @@ -1709,9 +1711,10 @@ static const yytype_int16 yycheck[] = 10, 255, 256, 10, 10, 259, 260, 261, 262, 263, 264, 265, 266, 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, -1, + 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, 31 + -1, -1, -1, -1, -1, -1, -1, -1, 31, 31, + 31, 31 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing @@ -1766,14 +1769,15 @@ static const yytype_uint16 yystos[] = 204, 283, 496, 497, 498, 499, 500, 501, 502, 43, 242, 244, 245, 246, 247, 248, 254, 286, 488, 489, 490, 491, 492, 493, 494, 495, 268, 287, 290, 488, - 489, 95, 96, 97, 98, 99, 100, 101, 102, 505, - 506, 507, 508, 509, 510, 511, 512, 513, 152, 153, - 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, - 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, - 526, 527, 528, 111, 531, 532, 219, 220, 221, 222, - 223, 224, 225, 226, 227, 228, 539, 540, 541, 542, - 543, 544, 545, 546, 547, 548, 549, 236, 237, 238, - 239, 240, 552, 553, 554, 555, 556, 557, 10, 10, + 489, 490, 491, 492, 95, 96, 97, 98, 99, 100, + 101, 102, 505, 506, 507, 508, 509, 510, 511, 512, + 513, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 516, 517, 518, 519, 520, 521, 522, + 523, 524, 525, 526, 527, 528, 111, 531, 532, 219, + 220, 221, 222, 223, 224, 225, 226, 227, 228, 539, + 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, + 236, 237, 238, 239, 240, 552, 553, 554, 555, 556, + 557, 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, @@ -1800,8 +1804,7 @@ static const yytype_uint16 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, 10 + 10, 10, 10, 10, 10 }; /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ @@ -1832,37 +1835,38 @@ static const yytype_uint16 yyr1[] = 280, 280, 280, 280, 280, 280, 281, 282, 282, 283, 283, 283, 283, 283, 283, 283, 284, 285, 285, 286, 286, 286, 286, 286, 286, 286, 286, 287, 288, 289, - 289, 290, 290, 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, 504, 505, - 505, 505, 505, 505, 505, 505, 505, 506, 507, 508, - 509, 510, 511, 512, 513, 514, 515, 515, 516, 516, - 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, - 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, - 527, 528, 529, 530, 530, 531, 532, 533, 534, 535, - 536, 537, 538, 538, 539, 539, 539, 539, 539, 539, - 539, 539, 539, 539, 540, 541, 542, 543, 544, 545, - 546, 547, 548, 549, 550, 551, 551, 552, 552, 552, - 552, 552, 553, 554, 555, 556, 557, 558 + 289, 290, 290, 290, 290, 290, 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, 504, 505, 505, 505, 505, 505, 505, 505, 505, + 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, + 515, 516, 516, 516, 516, 516, 516, 516, 516, 516, + 516, 516, 516, 517, 518, 519, 520, 521, 522, 523, + 524, 525, 526, 527, 528, 529, 530, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 538, 539, 539, 539, + 539, 539, 539, 539, 539, 539, 539, 540, 541, 542, + 543, 544, 545, 546, 547, 548, 549, 550, 551, 551, + 552, 552, 552, 552, 552, 553, 554, 555, 556, 557, + 558 }; /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ @@ -1893,7 +1897,7 @@ static const yytype_uint8 yyr2[] = 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, 1, 2, - 0, 1, 1, 1, 2, 2, 2, 2, 2, 2, + 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -1905,25 +1909,26 @@ static const yytype_uint8 yyr2[] = 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 3, 3, 4, 4, 4, 3, 3, 2, 2, 2, - 2, 2, 2, 3, 3, 2, 2, 2, 2, 2, + 2, 2, 2, 3, 3, 4, 4, 4, 3, 3, + 2, 2, 2, 2, 2, 2, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 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, + 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, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 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, 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, 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, 2, 2, 2, 2, 2, 3 + 2, 2, 2, 2, 2, 2, 2, 1, 2, 0, + 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, + 3 }; @@ -2604,7 +2609,7 @@ yyreduce: { OUTYY(("\nP(server:)\n")); } -#line 2608 "util/configparser.c" /* yacc.c:1646 */ +#line 2613 "util/configparser.c" /* yacc.c:1646 */ break; case 207: @@ -2619,7 +2624,7 @@ yyreduce: } else yyerror("out of memory"); } -#line 2623 "util/configparser.c" /* yacc.c:1646 */ +#line 2628 "util/configparser.c" /* yacc.c:1646 */ break; case 217: @@ -2634,7 +2639,7 @@ yyreduce: } else yyerror("out of memory"); } -#line 2638 "util/configparser.c" /* yacc.c:1646 */ +#line 2643 "util/configparser.c" /* yacc.c:1646 */ break; case 226: @@ -2651,7 +2656,7 @@ yyreduce: } else yyerror("out of memory"); } -#line 2655 "util/configparser.c" /* yacc.c:1646 */ +#line 2660 "util/configparser.c" /* yacc.c:1646 */ break; case 236: @@ -2671,7 +2676,7 @@ yyreduce: } else yyerror("out of memory"); } -#line 2675 "util/configparser.c" /* yacc.c:1646 */ +#line 2680 "util/configparser.c" /* yacc.c:1646 */ break; case 247: @@ -2693,7 +2698,7 @@ yyreduce: } } -#line 2697 "util/configparser.c" /* yacc.c:1646 */ +#line 2702 "util/configparser.c" /* yacc.c:1646 */ break; case 248: @@ -2713,11 +2718,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 2717 "util/configparser.c" /* yacc.c:1646 */ +#line 2722 "util/configparser.c" /* yacc.c:1646 */ break; - case 254: -#line 390 "./util/configparser.y" /* yacc.c:1646 */ + case 257: +#line 391 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_num_threads:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -2725,11 +2730,11 @@ yyreduce: else cfg_parser->cfg->num_threads = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2729 "util/configparser.c" /* yacc.c:1646 */ +#line 2734 "util/configparser.c" /* yacc.c:1646 */ break; - case 255: -#line 399 "./util/configparser.y" /* yacc.c:1646 */ + case 258: +#line 400 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_verbosity:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -2737,11 +2742,11 @@ yyreduce: else cfg_parser->cfg->verbosity = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2741 "util/configparser.c" /* yacc.c:1646 */ +#line 2746 "util/configparser.c" /* yacc.c:1646 */ break; - case 256: -#line 408 "./util/configparser.y" /* yacc.c:1646 */ + case 259: +#line 409 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_statistics_interval:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "") == 0 || strcmp((yyvsp[0].str), "0") == 0) @@ -2751,11 +2756,11 @@ yyreduce: else cfg_parser->cfg->stat_interval = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2755 "util/configparser.c" /* yacc.c:1646 */ +#line 2760 "util/configparser.c" /* yacc.c:1646 */ break; - case 257: -#line 419 "./util/configparser.y" /* yacc.c:1646 */ + case 260: +#line 420 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_statistics_cumulative:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2763,11 +2768,11 @@ yyreduce: else cfg_parser->cfg->stat_cumulative = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2767 "util/configparser.c" /* yacc.c:1646 */ +#line 2772 "util/configparser.c" /* yacc.c:1646 */ break; - case 258: -#line 428 "./util/configparser.y" /* yacc.c:1646 */ + case 261: +#line 429 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_extended_statistics:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2775,11 +2780,11 @@ yyreduce: else cfg_parser->cfg->stat_extended = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2779 "util/configparser.c" /* yacc.c:1646 */ +#line 2784 "util/configparser.c" /* yacc.c:1646 */ break; - case 259: -#line 437 "./util/configparser.y" /* yacc.c:1646 */ + case 262: +#line 438 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_shm_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2787,11 +2792,11 @@ yyreduce: else cfg_parser->cfg->shm_enable = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2791 "util/configparser.c" /* yacc.c:1646 */ +#line 2796 "util/configparser.c" /* yacc.c:1646 */ break; - case 260: -#line 446 "./util/configparser.y" /* yacc.c:1646 */ + case 263: +#line 447 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_shm_key:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "") == 0 || strcmp((yyvsp[0].str), "0") == 0) @@ -2801,11 +2806,11 @@ yyreduce: else cfg_parser->cfg->shm_key = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2805 "util/configparser.c" /* yacc.c:1646 */ +#line 2810 "util/configparser.c" /* yacc.c:1646 */ break; - case 261: -#line 457 "./util/configparser.y" /* yacc.c:1646 */ + case 264: +#line 458 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -2813,11 +2818,11 @@ yyreduce: else cfg_parser->cfg->port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2817 "util/configparser.c" /* yacc.c:1646 */ +#line 2822 "util/configparser.c" /* yacc.c:1646 */ break; - case 262: -#line 466 "./util/configparser.y" /* yacc.c:1646 */ + case 265: +#line 467 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(server_send_client_subnet:%s)\n", (yyvsp[0].str))); @@ -2827,11 +2832,11 @@ yyreduce: OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); #endif } -#line 2831 "util/configparser.c" /* yacc.c:1646 */ +#line 2836 "util/configparser.c" /* yacc.c:1646 */ break; - case 263: -#line 477 "./util/configparser.y" /* yacc.c:1646 */ + case 266: +#line 478 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(server_client_subnet_zone:%s)\n", (yyvsp[0].str))); @@ -2842,11 +2847,11 @@ yyreduce: OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); #endif } -#line 2846 "util/configparser.c" /* yacc.c:1646 */ +#line 2851 "util/configparser.c" /* yacc.c:1646 */ break; - case 264: -#line 490 "./util/configparser.y" /* yacc.c:1646 */ + case 267: +#line 491 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(server_client_subnet_always_forward:%s)\n", (yyvsp[0].str))); @@ -2860,11 +2865,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 2864 "util/configparser.c" /* yacc.c:1646 */ +#line 2869 "util/configparser.c" /* yacc.c:1646 */ break; - case 265: -#line 505 "./util/configparser.y" /* yacc.c:1646 */ + case 268: +#line 506 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(client_subnet_opcode:%s)\n", (yyvsp[0].str))); @@ -2874,11 +2879,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 2878 "util/configparser.c" /* yacc.c:1646 */ +#line 2883 "util/configparser.c" /* yacc.c:1646 */ break; - case 266: -#line 516 "./util/configparser.y" /* yacc.c:1646 */ + case 269: +#line 517 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(max_client_subnet_ipv4:%s)\n", (yyvsp[0].str))); @@ -2894,11 +2899,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 2898 "util/configparser.c" /* yacc.c:1646 */ +#line 2903 "util/configparser.c" /* yacc.c:1646 */ break; - case 267: -#line 533 "./util/configparser.y" /* yacc.c:1646 */ + case 270: +#line 534 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(max_client_subnet_ipv6:%s)\n", (yyvsp[0].str))); @@ -2914,11 +2919,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 2918 "util/configparser.c" /* yacc.c:1646 */ +#line 2923 "util/configparser.c" /* yacc.c:1646 */ break; - case 268: -#line 550 "./util/configparser.y" /* yacc.c:1646 */ + case 271: +#line 551 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(min_client_subnet_ipv4:%s)\n", (yyvsp[0].str))); @@ -2934,11 +2939,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 2938 "util/configparser.c" /* yacc.c:1646 */ +#line 2943 "util/configparser.c" /* yacc.c:1646 */ break; - case 269: -#line 567 "./util/configparser.y" /* yacc.c:1646 */ + case 272: +#line 568 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(min_client_subnet_ipv6:%s)\n", (yyvsp[0].str))); @@ -2954,11 +2959,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 2958 "util/configparser.c" /* yacc.c:1646 */ +#line 2963 "util/configparser.c" /* yacc.c:1646 */ break; - case 270: -#line 584 "./util/configparser.y" /* yacc.c:1646 */ + case 273: +#line 585 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(max_ecs_tree_size_ipv4:%s)\n", (yyvsp[0].str))); @@ -2972,11 +2977,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 2976 "util/configparser.c" /* yacc.c:1646 */ +#line 2981 "util/configparser.c" /* yacc.c:1646 */ break; - case 271: -#line 599 "./util/configparser.y" /* yacc.c:1646 */ + case 274: +#line 600 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(max_ecs_tree_size_ipv6:%s)\n", (yyvsp[0].str))); @@ -2990,11 +2995,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 2994 "util/configparser.c" /* yacc.c:1646 */ +#line 2999 "util/configparser.c" /* yacc.c:1646 */ break; - case 272: -#line 614 "./util/configparser.y" /* yacc.c:1646 */ + case 275: +#line 615 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_interface:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->num_ifs == 0) @@ -3006,11 +3011,11 @@ yyreduce: else cfg_parser->cfg->ifs[cfg_parser->cfg->num_ifs++] = (yyvsp[0].str); } -#line 3010 "util/configparser.c" /* yacc.c:1646 */ +#line 3015 "util/configparser.c" /* yacc.c:1646 */ break; - case 273: -#line 627 "./util/configparser.y" /* yacc.c:1646 */ + case 276: +#line 628 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_interface:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->num_out_ifs == 0) @@ -3024,11 +3029,11 @@ yyreduce: cfg_parser->cfg->out_ifs[ cfg_parser->cfg->num_out_ifs++] = (yyvsp[0].str); } -#line 3028 "util/configparser.c" /* yacc.c:1646 */ +#line 3033 "util/configparser.c" /* yacc.c:1646 */ break; - case 274: -#line 642 "./util/configparser.y" /* yacc.c:1646 */ + case 277: +#line 643 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_range:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3036,11 +3041,11 @@ yyreduce: else cfg_parser->cfg->outgoing_num_ports = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3040 "util/configparser.c" /* yacc.c:1646 */ +#line 3045 "util/configparser.c" /* yacc.c:1646 */ break; - case 275: -#line 651 "./util/configparser.y" /* yacc.c:1646 */ + case 278: +#line 652 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_port_permit:%s)\n", (yyvsp[0].str))); if(!cfg_mark_ports((yyvsp[0].str), 1, @@ -3048,11 +3053,11 @@ yyreduce: yyerror("port number or range (\"low-high\") expected"); free((yyvsp[0].str)); } -#line 3052 "util/configparser.c" /* yacc.c:1646 */ +#line 3057 "util/configparser.c" /* yacc.c:1646 */ break; - case 276: -#line 660 "./util/configparser.y" /* yacc.c:1646 */ + case 279: +#line 661 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_port_avoid:%s)\n", (yyvsp[0].str))); if(!cfg_mark_ports((yyvsp[0].str), 0, @@ -3060,11 +3065,11 @@ yyreduce: yyerror("port number or range (\"low-high\") expected"); free((yyvsp[0].str)); } -#line 3064 "util/configparser.c" /* yacc.c:1646 */ +#line 3069 "util/configparser.c" /* yacc.c:1646 */ break; - case 277: -#line 669 "./util/configparser.y" /* yacc.c:1646 */ + case 280: +#line 670 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_num_tcp:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3072,11 +3077,11 @@ yyreduce: else cfg_parser->cfg->outgoing_num_tcp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3076 "util/configparser.c" /* yacc.c:1646 */ +#line 3081 "util/configparser.c" /* yacc.c:1646 */ break; - case 278: -#line 678 "./util/configparser.y" /* yacc.c:1646 */ + case 281: +#line 679 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_incoming_num_tcp:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3084,11 +3089,11 @@ yyreduce: else cfg_parser->cfg->incoming_num_tcp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3088 "util/configparser.c" /* yacc.c:1646 */ +#line 3093 "util/configparser.c" /* yacc.c:1646 */ break; - case 279: -#line 687 "./util/configparser.y" /* yacc.c:1646 */ + case 282: +#line 688 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_interface_automatic:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3096,11 +3101,11 @@ yyreduce: else cfg_parser->cfg->if_automatic = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3100 "util/configparser.c" /* yacc.c:1646 */ +#line 3105 "util/configparser.c" /* yacc.c:1646 */ break; - case 280: -#line 696 "./util/configparser.y" /* yacc.c:1646 */ + case 283: +#line 697 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_ip4:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3108,11 +3113,11 @@ yyreduce: else cfg_parser->cfg->do_ip4 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3112 "util/configparser.c" /* yacc.c:1646 */ +#line 3117 "util/configparser.c" /* yacc.c:1646 */ break; - case 281: -#line 705 "./util/configparser.y" /* yacc.c:1646 */ + case 284: +#line 706 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_ip6:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3120,11 +3125,11 @@ yyreduce: else cfg_parser->cfg->do_ip6 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3124 "util/configparser.c" /* yacc.c:1646 */ +#line 3129 "util/configparser.c" /* yacc.c:1646 */ break; - case 282: -#line 714 "./util/configparser.y" /* yacc.c:1646 */ + case 285: +#line 715 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_udp:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3132,11 +3137,11 @@ yyreduce: else cfg_parser->cfg->do_udp = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3136 "util/configparser.c" /* yacc.c:1646 */ +#line 3141 "util/configparser.c" /* yacc.c:1646 */ break; - case 283: -#line 723 "./util/configparser.y" /* yacc.c:1646 */ + case 286: +#line 724 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_tcp:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3144,11 +3149,11 @@ yyreduce: else cfg_parser->cfg->do_tcp = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3148 "util/configparser.c" /* yacc.c:1646 */ +#line 3153 "util/configparser.c" /* yacc.c:1646 */ break; - case 284: -#line 732 "./util/configparser.y" /* yacc.c:1646 */ + case 287: +#line 733 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_prefer_ip6:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3156,11 +3161,11 @@ yyreduce: else cfg_parser->cfg->prefer_ip6 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3160 "util/configparser.c" /* yacc.c:1646 */ +#line 3165 "util/configparser.c" /* yacc.c:1646 */ break; - case 285: -#line 741 "./util/configparser.y" /* yacc.c:1646 */ + case 288: +#line 742 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tcp_mss:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3168,11 +3173,11 @@ yyreduce: else cfg_parser->cfg->tcp_mss = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3172 "util/configparser.c" /* yacc.c:1646 */ +#line 3177 "util/configparser.c" /* yacc.c:1646 */ break; - case 286: -#line 750 "./util/configparser.y" /* yacc.c:1646 */ + case 289: +#line 751 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_tcp_mss:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3180,11 +3185,11 @@ yyreduce: else cfg_parser->cfg->outgoing_tcp_mss = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3184 "util/configparser.c" /* yacc.c:1646 */ +#line 3189 "util/configparser.c" /* yacc.c:1646 */ break; - case 287: -#line 759 "./util/configparser.y" /* yacc.c:1646 */ + case 290: +#line 760 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tcp_idle_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3196,11 +3201,11 @@ yyreduce: else cfg_parser->cfg->tcp_idle_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3200 "util/configparser.c" /* yacc.c:1646 */ +#line 3205 "util/configparser.c" /* yacc.c:1646 */ break; - case 288: -#line 772 "./util/configparser.y" /* yacc.c:1646 */ + case 291: +#line 773 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tcp_keepalive:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3208,11 +3213,11 @@ yyreduce: else cfg_parser->cfg->do_tcp_keepalive = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3212 "util/configparser.c" /* yacc.c:1646 */ +#line 3217 "util/configparser.c" /* yacc.c:1646 */ break; - case 289: -#line 781 "./util/configparser.y" /* yacc.c:1646 */ + case 292: +#line 782 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tcp_keepalive_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3224,11 +3229,11 @@ yyreduce: else cfg_parser->cfg->tcp_keepalive_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3228 "util/configparser.c" /* yacc.c:1646 */ +#line 3233 "util/configparser.c" /* yacc.c:1646 */ break; - case 290: -#line 794 "./util/configparser.y" /* yacc.c:1646 */ + case 293: +#line 795 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tcp_upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3236,11 +3241,11 @@ yyreduce: else cfg_parser->cfg->tcp_upstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3240 "util/configparser.c" /* yacc.c:1646 */ +#line 3245 "util/configparser.c" /* yacc.c:1646 */ break; - case 291: -#line 803 "./util/configparser.y" /* yacc.c:1646 */ + case 294: +#line 804 "./util/configparser.y" /* yacc.c:1646 */ { 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) @@ -3248,11 +3253,11 @@ yyreduce: else cfg_parser->cfg->udp_upstream_without_downstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3252 "util/configparser.c" /* yacc.c:1646 */ +#line 3257 "util/configparser.c" /* yacc.c:1646 */ break; - case 292: -#line 812 "./util/configparser.y" /* yacc.c:1646 */ + case 295: +#line 813 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ssl_upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3260,31 +3265,31 @@ yyreduce: else cfg_parser->cfg->ssl_upstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3264 "util/configparser.c" /* yacc.c:1646 */ +#line 3269 "util/configparser.c" /* yacc.c:1646 */ break; - case 293: -#line 821 "./util/configparser.y" /* yacc.c:1646 */ + case 296: +#line 822 "./util/configparser.y" /* yacc.c:1646 */ { 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 3274 "util/configparser.c" /* yacc.c:1646 */ +#line 3279 "util/configparser.c" /* yacc.c:1646 */ break; - case 294: -#line 828 "./util/configparser.y" /* yacc.c:1646 */ + case 297: +#line 829 "./util/configparser.y" /* yacc.c:1646 */ { 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 3284 "util/configparser.c" /* yacc.c:1646 */ +#line 3289 "util/configparser.c" /* yacc.c:1646 */ break; - case 295: -#line 835 "./util/configparser.y" /* yacc.c:1646 */ + case 298: +#line 836 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ssl_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3292,21 +3297,21 @@ yyreduce: else cfg_parser->cfg->ssl_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3296 "util/configparser.c" /* yacc.c:1646 */ +#line 3301 "util/configparser.c" /* yacc.c:1646 */ break; - case 296: -#line 844 "./util/configparser.y" /* yacc.c:1646 */ + case 299: +#line 845 "./util/configparser.y" /* yacc.c:1646 */ { 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 3306 "util/configparser.c" /* yacc.c:1646 */ +#line 3311 "util/configparser.c" /* yacc.c:1646 */ break; - case 297: -#line 851 "./util/configparser.y" /* yacc.c:1646 */ + case 300: +#line 852 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tls_win_cert:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3314,53 +3319,53 @@ yyreduce: else cfg_parser->cfg->tls_win_cert = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3318 "util/configparser.c" /* yacc.c:1646 */ +#line 3323 "util/configparser.c" /* yacc.c:1646 */ break; - case 298: -#line 860 "./util/configparser.y" /* yacc.c:1646 */ + case 301: +#line 861 "./util/configparser.y" /* yacc.c:1646 */ { 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 3329 "util/configparser.c" /* yacc.c:1646 */ +#line 3334 "util/configparser.c" /* yacc.c:1646 */ break; - case 299: -#line 868 "./util/configparser.y" /* yacc.c:1646 */ + case 302: +#line 869 "./util/configparser.y" /* yacc.c:1646 */ { 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 3339 "util/configparser.c" /* yacc.c:1646 */ +#line 3344 "util/configparser.c" /* yacc.c:1646 */ break; - case 300: -#line 875 "./util/configparser.y" /* yacc.c:1646 */ + case 303: +#line 876 "./util/configparser.y" /* yacc.c:1646 */ { 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 3349 "util/configparser.c" /* yacc.c:1646 */ +#line 3354 "util/configparser.c" /* yacc.c:1646 */ break; - case 301: -#line 882 "./util/configparser.y" /* yacc.c:1646 */ + case 304: +#line 883 "./util/configparser.y" /* yacc.c:1646 */ { 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 3360 "util/configparser.c" /* yacc.c:1646 */ +#line 3365 "util/configparser.c" /* yacc.c:1646 */ break; - case 302: -#line 890 "./util/configparser.y" /* yacc.c:1646 */ + case 305: +#line 891 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_use_systemd:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3368,11 +3373,11 @@ yyreduce: else cfg_parser->cfg->use_systemd = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3372 "util/configparser.c" /* yacc.c:1646 */ +#line 3377 "util/configparser.c" /* yacc.c:1646 */ break; - case 303: -#line 899 "./util/configparser.y" /* yacc.c:1646 */ + case 306: +#line 900 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_daemonize:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3380,11 +3385,11 @@ yyreduce: else cfg_parser->cfg->do_daemonize = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3384 "util/configparser.c" /* yacc.c:1646 */ +#line 3389 "util/configparser.c" /* yacc.c:1646 */ break; - case 304: -#line 908 "./util/configparser.y" /* yacc.c:1646 */ + case 307: +#line 909 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_use_syslog:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3397,11 +3402,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3401 "util/configparser.c" /* yacc.c:1646 */ +#line 3406 "util/configparser.c" /* yacc.c:1646 */ break; - case 305: -#line 922 "./util/configparser.y" /* yacc.c:1646 */ + case 308: +#line 923 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_time_ascii:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3409,11 +3414,11 @@ yyreduce: else cfg_parser->cfg->log_time_ascii = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3413 "util/configparser.c" /* yacc.c:1646 */ +#line 3418 "util/configparser.c" /* yacc.c:1646 */ break; - case 306: -#line 931 "./util/configparser.y" /* yacc.c:1646 */ + case 309: +#line 932 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_queries:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3421,11 +3426,11 @@ yyreduce: else cfg_parser->cfg->log_queries = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3425 "util/configparser.c" /* yacc.c:1646 */ +#line 3430 "util/configparser.c" /* yacc.c:1646 */ break; - case 307: -#line 940 "./util/configparser.y" /* yacc.c:1646 */ + case 310: +#line 941 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_replies:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3433,11 +3438,11 @@ yyreduce: else cfg_parser->cfg->log_replies = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3437 "util/configparser.c" /* yacc.c:1646 */ +#line 3442 "util/configparser.c" /* yacc.c:1646 */ break; - case 308: -#line 949 "./util/configparser.y" /* yacc.c:1646 */ + case 311: +#line 950 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_tag_queryreply:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3445,11 +3450,11 @@ yyreduce: else cfg_parser->cfg->log_tag_queryreply = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3449 "util/configparser.c" /* yacc.c:1646 */ +#line 3454 "util/configparser.c" /* yacc.c:1646 */ break; - case 309: -#line 958 "./util/configparser.y" /* yacc.c:1646 */ + case 312: +#line 959 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_servfail:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3457,11 +3462,11 @@ yyreduce: else cfg_parser->cfg->log_servfail = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3461 "util/configparser.c" /* yacc.c:1646 */ +#line 3466 "util/configparser.c" /* yacc.c:1646 */ break; - case 310: -#line 967 "./util/configparser.y" /* yacc.c:1646 */ + case 313: +#line 968 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_local_actions:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3469,31 +3474,31 @@ yyreduce: else cfg_parser->cfg->log_local_actions = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3473 "util/configparser.c" /* yacc.c:1646 */ +#line 3478 "util/configparser.c" /* yacc.c:1646 */ break; - case 311: -#line 976 "./util/configparser.y" /* yacc.c:1646 */ + case 314: +#line 977 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_chroot:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->chrootdir); cfg_parser->cfg->chrootdir = (yyvsp[0].str); } -#line 3483 "util/configparser.c" /* yacc.c:1646 */ +#line 3488 "util/configparser.c" /* yacc.c:1646 */ break; - case 312: -#line 983 "./util/configparser.y" /* yacc.c:1646 */ + case 315: +#line 984 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_username:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->username); cfg_parser->cfg->username = (yyvsp[0].str); } -#line 3493 "util/configparser.c" /* yacc.c:1646 */ +#line 3498 "util/configparser.c" /* yacc.c:1646 */ break; - case 313: -#line 990 "./util/configparser.y" /* yacc.c:1646 */ + case 316: +#line 991 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_directory:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->directory); @@ -3518,105 +3523,105 @@ yyreduce: } } } -#line 3522 "util/configparser.c" /* yacc.c:1646 */ +#line 3527 "util/configparser.c" /* yacc.c:1646 */ break; - case 314: -#line 1016 "./util/configparser.y" /* yacc.c:1646 */ + case 317: +#line 1017 "./util/configparser.y" /* yacc.c:1646 */ { 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 3533 "util/configparser.c" /* yacc.c:1646 */ +#line 3538 "util/configparser.c" /* yacc.c:1646 */ break; - case 315: -#line 1024 "./util/configparser.y" /* yacc.c:1646 */ + case 318: +#line 1025 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_pidfile:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->pidfile); cfg_parser->cfg->pidfile = (yyvsp[0].str); } -#line 3543 "util/configparser.c" /* yacc.c:1646 */ +#line 3548 "util/configparser.c" /* yacc.c:1646 */ break; - case 316: -#line 1031 "./util/configparser.y" /* yacc.c:1646 */ + case 319: +#line 1032 "./util/configparser.y" /* yacc.c:1646 */ { 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 3553 "util/configparser.c" /* yacc.c:1646 */ +#line 3558 "util/configparser.c" /* yacc.c:1646 */ break; - case 317: -#line 1038 "./util/configparser.y" /* yacc.c:1646 */ + case 320: +#line 1039 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_dlv_anchor_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dlv_anchor_file); cfg_parser->cfg->dlv_anchor_file = (yyvsp[0].str); } -#line 3563 "util/configparser.c" /* yacc.c:1646 */ +#line 3568 "util/configparser.c" /* yacc.c:1646 */ break; - case 318: -#line 1045 "./util/configparser.y" /* yacc.c:1646 */ + case 321: +#line 1046 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_dlv_anchor:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->dlv_anchor_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3573 "util/configparser.c" /* yacc.c:1646 */ +#line 3578 "util/configparser.c" /* yacc.c:1646 */ break; - case 319: -#line 1052 "./util/configparser.y" /* yacc.c:1646 */ + case 322: +#line 1053 "./util/configparser.y" /* yacc.c:1646 */ { 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 3584 "util/configparser.c" /* yacc.c:1646 */ +#line 3589 "util/configparser.c" /* yacc.c:1646 */ break; - case 320: -#line 1060 "./util/configparser.y" /* yacc.c:1646 */ + case 323: +#line 1061 "./util/configparser.y" /* yacc.c:1646 */ { 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 3595 "util/configparser.c" /* yacc.c:1646 */ +#line 3600 "util/configparser.c" /* yacc.c:1646 */ break; - case 321: -#line 1068 "./util/configparser.y" /* yacc.c:1646 */ + case 324: +#line 1069 "./util/configparser.y" /* yacc.c:1646 */ { 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 3606 "util/configparser.c" /* yacc.c:1646 */ +#line 3611 "util/configparser.c" /* yacc.c:1646 */ break; - case 322: -#line 1076 "./util/configparser.y" /* yacc.c:1646 */ + case 325: +#line 1077 "./util/configparser.y" /* yacc.c:1646 */ { 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 3616 "util/configparser.c" /* yacc.c:1646 */ +#line 3621 "util/configparser.c" /* yacc.c:1646 */ break; - case 323: -#line 1083 "./util/configparser.y" /* yacc.c:1646 */ + case 326: +#line 1084 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_trust_anchor_signaling:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3626,11 +3631,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3630 "util/configparser.c" /* yacc.c:1646 */ +#line 3635 "util/configparser.c" /* yacc.c:1646 */ break; - case 324: -#line 1094 "./util/configparser.y" /* yacc.c:1646 */ + case 327: +#line 1095 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_root_key_sentinel:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3640,21 +3645,21 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3644 "util/configparser.c" /* yacc.c:1646 */ +#line 3649 "util/configparser.c" /* yacc.c:1646 */ break; - case 325: -#line 1105 "./util/configparser.y" /* yacc.c:1646 */ + case 328: +#line 1106 "./util/configparser.y" /* yacc.c:1646 */ { 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 3654 "util/configparser.c" /* yacc.c:1646 */ +#line 3659 "util/configparser.c" /* yacc.c:1646 */ break; - case 326: -#line 1112 "./util/configparser.y" /* yacc.c:1646 */ + case 329: +#line 1113 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_hide_identity:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3662,11 +3667,11 @@ yyreduce: else cfg_parser->cfg->hide_identity = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3666 "util/configparser.c" /* yacc.c:1646 */ +#line 3671 "util/configparser.c" /* yacc.c:1646 */ break; - case 327: -#line 1121 "./util/configparser.y" /* yacc.c:1646 */ + case 330: +#line 1122 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_hide_version:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3674,11 +3679,11 @@ yyreduce: else cfg_parser->cfg->hide_version = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3678 "util/configparser.c" /* yacc.c:1646 */ +#line 3683 "util/configparser.c" /* yacc.c:1646 */ break; - case 328: -#line 1130 "./util/configparser.y" /* yacc.c:1646 */ + case 331: +#line 1131 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_hide_trustanchor:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3686,53 +3691,53 @@ yyreduce: else cfg_parser->cfg->hide_trustanchor = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3690 "util/configparser.c" /* yacc.c:1646 */ +#line 3695 "util/configparser.c" /* yacc.c:1646 */ break; - case 329: -#line 1139 "./util/configparser.y" /* yacc.c:1646 */ + case 332: +#line 1140 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_identity:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->identity); cfg_parser->cfg->identity = (yyvsp[0].str); } -#line 3700 "util/configparser.c" /* yacc.c:1646 */ +#line 3705 "util/configparser.c" /* yacc.c:1646 */ break; - case 330: -#line 1146 "./util/configparser.y" /* yacc.c:1646 */ + case 333: +#line 1147 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_version:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->version); cfg_parser->cfg->version = (yyvsp[0].str); } -#line 3710 "util/configparser.c" /* yacc.c:1646 */ +#line 3715 "util/configparser.c" /* yacc.c:1646 */ break; - case 331: -#line 1153 "./util/configparser.y" /* yacc.c:1646 */ + case 334: +#line 1154 "./util/configparser.y" /* yacc.c:1646 */ { 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 3721 "util/configparser.c" /* yacc.c:1646 */ +#line 3726 "util/configparser.c" /* yacc.c:1646 */ break; - case 332: -#line 1161 "./util/configparser.y" /* yacc.c:1646 */ + case 335: +#line 1162 "./util/configparser.y" /* yacc.c:1646 */ { 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 3732 "util/configparser.c" /* yacc.c:1646 */ +#line 3737 "util/configparser.c" /* yacc.c:1646 */ break; - case 333: -#line 1169 "./util/configparser.y" /* yacc.c:1646 */ + case 336: +#line 1170 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_so_reuseport:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3741,11 +3746,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3745 "util/configparser.c" /* yacc.c:1646 */ +#line 3750 "util/configparser.c" /* yacc.c:1646 */ break; - case 334: -#line 1179 "./util/configparser.y" /* yacc.c:1646 */ + case 337: +#line 1180 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_transparent:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3754,11 +3759,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3758 "util/configparser.c" /* yacc.c:1646 */ +#line 3763 "util/configparser.c" /* yacc.c:1646 */ break; - case 335: -#line 1189 "./util/configparser.y" /* yacc.c:1646 */ + case 338: +#line 1190 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_freebind:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3767,22 +3772,22 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3771 "util/configparser.c" /* yacc.c:1646 */ +#line 3776 "util/configparser.c" /* yacc.c:1646 */ break; - case 336: -#line 1199 "./util/configparser.y" /* yacc.c:1646 */ + case 339: +#line 1200 "./util/configparser.y" /* yacc.c:1646 */ { 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 3782 "util/configparser.c" /* yacc.c:1646 */ +#line 3787 "util/configparser.c" /* yacc.c:1646 */ break; - case 337: -#line 1207 "./util/configparser.y" /* yacc.c:1646 */ + case 340: +#line 1208 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_edns_buffer_size:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3794,11 +3799,11 @@ yyreduce: else cfg_parser->cfg->edns_buffer_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3798 "util/configparser.c" /* yacc.c:1646 */ +#line 3803 "util/configparser.c" /* yacc.c:1646 */ break; - case 338: -#line 1220 "./util/configparser.y" /* yacc.c:1646 */ + case 341: +#line 1221 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_msg_buffer_size:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3808,22 +3813,22 @@ yyreduce: else cfg_parser->cfg->msg_buffer_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3812 "util/configparser.c" /* yacc.c:1646 */ +#line 3817 "util/configparser.c" /* yacc.c:1646 */ break; - case 339: -#line 1231 "./util/configparser.y" /* yacc.c:1646 */ + case 342: +#line 1232 "./util/configparser.y" /* yacc.c:1646 */ { 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 3823 "util/configparser.c" /* yacc.c:1646 */ +#line 3828 "util/configparser.c" /* yacc.c:1646 */ break; - case 340: -#line 1239 "./util/configparser.y" /* yacc.c:1646 */ + case 343: +#line 1240 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_msg_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3835,11 +3840,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 3839 "util/configparser.c" /* yacc.c:1646 */ +#line 3844 "util/configparser.c" /* yacc.c:1646 */ break; - case 341: -#line 1252 "./util/configparser.y" /* yacc.c:1646 */ + case 344: +#line 1253 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_num_queries_per_thread:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3847,11 +3852,11 @@ yyreduce: else cfg_parser->cfg->num_queries_per_thread = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3851 "util/configparser.c" /* yacc.c:1646 */ +#line 3856 "util/configparser.c" /* yacc.c:1646 */ break; - case 342: -#line 1261 "./util/configparser.y" /* yacc.c:1646 */ + case 345: +#line 1262 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_jostle_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3859,11 +3864,11 @@ yyreduce: else cfg_parser->cfg->jostle_time = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3863 "util/configparser.c" /* yacc.c:1646 */ +#line 3868 "util/configparser.c" /* yacc.c:1646 */ break; - case 343: -#line 1270 "./util/configparser.y" /* yacc.c:1646 */ + case 346: +#line 1271 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_delay_close:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3871,11 +3876,11 @@ yyreduce: else cfg_parser->cfg->delay_close = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3875 "util/configparser.c" /* yacc.c:1646 */ +#line 3880 "util/configparser.c" /* yacc.c:1646 */ break; - case 344: -#line 1279 "./util/configparser.y" /* yacc.c:1646 */ + case 347: +#line 1280 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_unblock_lan_zones:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3884,11 +3889,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3888 "util/configparser.c" /* yacc.c:1646 */ +#line 3893 "util/configparser.c" /* yacc.c:1646 */ break; - case 345: -#line 1289 "./util/configparser.y" /* yacc.c:1646 */ + case 348: +#line 1290 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_insecure_lan_zones:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3897,22 +3902,22 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3901 "util/configparser.c" /* yacc.c:1646 */ +#line 3906 "util/configparser.c" /* yacc.c:1646 */ break; - case 346: -#line 1299 "./util/configparser.y" /* yacc.c:1646 */ + case 349: +#line 1300 "./util/configparser.y" /* yacc.c:1646 */ { 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 3912 "util/configparser.c" /* yacc.c:1646 */ +#line 3917 "util/configparser.c" /* yacc.c:1646 */ break; - case 347: -#line 1307 "./util/configparser.y" /* yacc.c:1646 */ + case 350: +#line 1308 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_rrset_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3924,11 +3929,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 3928 "util/configparser.c" /* yacc.c:1646 */ +#line 3933 "util/configparser.c" /* yacc.c:1646 */ break; - case 348: -#line 1320 "./util/configparser.y" /* yacc.c:1646 */ + case 351: +#line 1321 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_host_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3936,22 +3941,22 @@ yyreduce: else cfg_parser->cfg->host_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3940 "util/configparser.c" /* yacc.c:1646 */ +#line 3945 "util/configparser.c" /* yacc.c:1646 */ break; - case 349: -#line 1329 "./util/configparser.y" /* yacc.c:1646 */ + case 352: +#line 1330 "./util/configparser.y" /* yacc.c:1646 */ { 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 3951 "util/configparser.c" /* yacc.c:1646 */ +#line 3956 "util/configparser.c" /* yacc.c:1646 */ break; - case 350: -#line 1337 "./util/configparser.y" /* yacc.c:1646 */ + case 353: +#line 1338 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_cache_numhosts:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3959,22 +3964,22 @@ yyreduce: else cfg_parser->cfg->infra_cache_numhosts = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3963 "util/configparser.c" /* yacc.c:1646 */ +#line 3968 "util/configparser.c" /* yacc.c:1646 */ break; - case 351: -#line 1346 "./util/configparser.y" /* yacc.c:1646 */ + case 354: +#line 1347 "./util/configparser.y" /* yacc.c:1646 */ { 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 3974 "util/configparser.c" /* yacc.c:1646 */ +#line 3979 "util/configparser.c" /* yacc.c:1646 */ break; - case 352: -#line 1354 "./util/configparser.y" /* yacc.c:1646 */ + case 355: +#line 1355 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3986,11 +3991,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 3990 "util/configparser.c" /* yacc.c:1646 */ +#line 3995 "util/configparser.c" /* yacc.c:1646 */ break; - case 353: -#line 1367 "./util/configparser.y" /* yacc.c:1646 */ + case 356: +#line 1368 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_cache_min_rtt:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3998,21 +4003,21 @@ yyreduce: else cfg_parser->cfg->infra_cache_min_rtt = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4002 "util/configparser.c" /* yacc.c:1646 */ +#line 4007 "util/configparser.c" /* yacc.c:1646 */ break; - case 354: -#line 1376 "./util/configparser.y" /* yacc.c:1646 */ + case 357: +#line 1377 "./util/configparser.y" /* yacc.c:1646 */ { 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 4012 "util/configparser.c" /* yacc.c:1646 */ +#line 4017 "util/configparser.c" /* yacc.c:1646 */ break; - case 355: -#line 1383 "./util/configparser.y" /* yacc.c:1646 */ + case 358: +#line 1384 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_short_bufsize:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4021,11 +4026,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4025 "util/configparser.c" /* yacc.c:1646 */ +#line 4030 "util/configparser.c" /* yacc.c:1646 */ break; - case 356: -#line 1393 "./util/configparser.y" /* yacc.c:1646 */ + case 359: +#line 1394 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_large_queries:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4034,11 +4039,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4038 "util/configparser.c" /* yacc.c:1646 */ +#line 4043 "util/configparser.c" /* yacc.c:1646 */ break; - case 357: -#line 1403 "./util/configparser.y" /* yacc.c:1646 */ + case 360: +#line 1404 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_glue:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4047,11 +4052,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4051 "util/configparser.c" /* yacc.c:1646 */ +#line 4056 "util/configparser.c" /* yacc.c:1646 */ break; - case 358: -#line 1413 "./util/configparser.y" /* yacc.c:1646 */ + case 361: +#line 1414 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_dnssec_stripped:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4060,11 +4065,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4064 "util/configparser.c" /* yacc.c:1646 */ +#line 4069 "util/configparser.c" /* yacc.c:1646 */ break; - case 359: -#line 1423 "./util/configparser.y" /* yacc.c:1646 */ + case 362: +#line 1424 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_below_nxdomain:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4073,11 +4078,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4077 "util/configparser.c" /* yacc.c:1646 */ +#line 4082 "util/configparser.c" /* yacc.c:1646 */ break; - case 360: -#line 1433 "./util/configparser.y" /* yacc.c:1646 */ + case 363: +#line 1434 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_referral_path:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4086,11 +4091,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4090 "util/configparser.c" /* yacc.c:1646 */ +#line 4095 "util/configparser.c" /* yacc.c:1646 */ break; - case 361: -#line 1443 "./util/configparser.y" /* yacc.c:1646 */ + case 364: +#line 1444 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_algo_downgrade:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4099,11 +4104,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4103 "util/configparser.c" /* yacc.c:1646 */ +#line 4108 "util/configparser.c" /* yacc.c:1646 */ break; - case 362: -#line 1453 "./util/configparser.y" /* yacc.c:1646 */ + case 365: +#line 1454 "./util/configparser.y" /* yacc.c:1646 */ { 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) @@ -4112,41 +4117,41 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4116 "util/configparser.c" /* yacc.c:1646 */ +#line 4121 "util/configparser.c" /* yacc.c:1646 */ break; - case 363: -#line 1463 "./util/configparser.y" /* yacc.c:1646 */ + case 366: +#line 1464 "./util/configparser.y" /* yacc.c:1646 */ { 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 4126 "util/configparser.c" /* yacc.c:1646 */ +#line 4131 "util/configparser.c" /* yacc.c:1646 */ break; - case 364: -#line 1470 "./util/configparser.y" /* yacc.c:1646 */ + case 367: +#line 1471 "./util/configparser.y" /* yacc.c:1646 */ { 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 4136 "util/configparser.c" /* yacc.c:1646 */ +#line 4141 "util/configparser.c" /* yacc.c:1646 */ break; - case 365: -#line 1477 "./util/configparser.y" /* yacc.c:1646 */ + case 368: +#line 1478 "./util/configparser.y" /* yacc.c:1646 */ { 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 4146 "util/configparser.c" /* yacc.c:1646 */ +#line 4151 "util/configparser.c" /* yacc.c:1646 */ break; - case 366: -#line 1484 "./util/configparser.y" /* yacc.c:1646 */ + case 369: +#line 1485 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_prefetch:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4154,11 +4159,11 @@ yyreduce: else cfg_parser->cfg->prefetch = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4158 "util/configparser.c" /* yacc.c:1646 */ +#line 4163 "util/configparser.c" /* yacc.c:1646 */ break; - case 367: -#line 1493 "./util/configparser.y" /* yacc.c:1646 */ + case 370: +#line 1494 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_prefetch_key:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4166,11 +4171,11 @@ yyreduce: else cfg_parser->cfg->prefetch_key = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4170 "util/configparser.c" /* yacc.c:1646 */ +#line 4175 "util/configparser.c" /* yacc.c:1646 */ break; - case 368: -#line 1502 "./util/configparser.y" /* yacc.c:1646 */ + case 371: +#line 1503 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_deny_any:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4178,11 +4183,11 @@ yyreduce: else cfg_parser->cfg->deny_any = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4182 "util/configparser.c" /* yacc.c:1646 */ +#line 4187 "util/configparser.c" /* yacc.c:1646 */ break; - case 369: -#line 1511 "./util/configparser.y" /* yacc.c:1646 */ + case 372: +#line 1512 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_unwanted_reply_threshold:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4190,21 +4195,21 @@ yyreduce: else cfg_parser->cfg->unwanted_threshold = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4194 "util/configparser.c" /* yacc.c:1646 */ +#line 4199 "util/configparser.c" /* yacc.c:1646 */ break; - case 370: -#line 1520 "./util/configparser.y" /* yacc.c:1646 */ + case 373: +#line 1521 "./util/configparser.y" /* yacc.c:1646 */ { 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 4204 "util/configparser.c" /* yacc.c:1646 */ +#line 4209 "util/configparser.c" /* yacc.c:1646 */ break; - case 371: -#line 1527 "./util/configparser.y" /* yacc.c:1646 */ + case 374: +#line 1528 "./util/configparser.y" /* yacc.c:1646 */ { 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) @@ -4213,11 +4218,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4217 "util/configparser.c" /* yacc.c:1646 */ +#line 4222 "util/configparser.c" /* yacc.c:1646 */ break; - case 372: -#line 1537 "./util/configparser.y" /* yacc.c:1646 */ + case 375: +#line 1538 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_access_control:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "deny")!=0 && strcmp((yyvsp[0].str), "refuse")!=0 && @@ -4236,21 +4241,21 @@ yyreduce: fatal_exit("out of memory adding acl"); } } -#line 4240 "util/configparser.c" /* yacc.c:1646 */ +#line 4245 "util/configparser.c" /* yacc.c:1646 */ break; - case 373: -#line 1557 "./util/configparser.y" /* yacc.c:1646 */ + case 376: +#line 1558 "./util/configparser.y" /* yacc.c:1646 */ { 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 4250 "util/configparser.c" /* yacc.c:1646 */ +#line 4255 "util/configparser.c" /* yacc.c:1646 */ break; - case 374: -#line 1564 "./util/configparser.y" /* yacc.c:1646 */ + case 377: +#line 1565 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_override_date:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { @@ -4267,11 +4272,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4271 "util/configparser.c" /* yacc.c:1646 */ +#line 4276 "util/configparser.c" /* yacc.c:1646 */ break; - case 375: -#line 1582 "./util/configparser.y" /* yacc.c:1646 */ + case 378: +#line 1583 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_sig_skew_min:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { @@ -4283,11 +4288,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4287 "util/configparser.c" /* yacc.c:1646 */ +#line 4292 "util/configparser.c" /* yacc.c:1646 */ break; - case 376: -#line 1595 "./util/configparser.y" /* yacc.c:1646 */ + case 379: +#line 1596 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_sig_skew_max:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { @@ -4299,11 +4304,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4303 "util/configparser.c" /* yacc.c:1646 */ +#line 4308 "util/configparser.c" /* yacc.c:1646 */ break; - case 377: -#line 1608 "./util/configparser.y" /* yacc.c:1646 */ + case 380: +#line 1609 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_cache_max_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4311,11 +4316,11 @@ yyreduce: else cfg_parser->cfg->max_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4315 "util/configparser.c" /* yacc.c:1646 */ +#line 4320 "util/configparser.c" /* yacc.c:1646 */ break; - case 378: -#line 1617 "./util/configparser.y" /* yacc.c:1646 */ + case 381: +#line 1618 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_cache_max_negative_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4323,11 +4328,11 @@ yyreduce: else cfg_parser->cfg->max_negative_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4327 "util/configparser.c" /* yacc.c:1646 */ +#line 4332 "util/configparser.c" /* yacc.c:1646 */ break; - case 379: -#line 1626 "./util/configparser.y" /* yacc.c:1646 */ + case 382: +#line 1627 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_cache_min_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4335,11 +4340,11 @@ yyreduce: else cfg_parser->cfg->min_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4339 "util/configparser.c" /* yacc.c:1646 */ +#line 4344 "util/configparser.c" /* yacc.c:1646 */ break; - case 380: -#line 1635 "./util/configparser.y" /* yacc.c:1646 */ + case 383: +#line 1636 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_bogus_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4347,11 +4352,11 @@ yyreduce: else cfg_parser->cfg->bogus_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4351 "util/configparser.c" /* yacc.c:1646 */ +#line 4356 "util/configparser.c" /* yacc.c:1646 */ break; - case 381: -#line 1644 "./util/configparser.y" /* yacc.c:1646 */ + case 384: +#line 1645 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_clean_additional:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4360,11 +4365,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4364 "util/configparser.c" /* yacc.c:1646 */ +#line 4369 "util/configparser.c" /* yacc.c:1646 */ break; - case 382: -#line 1654 "./util/configparser.y" /* yacc.c:1646 */ + case 385: +#line 1655 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_permissive_mode:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4373,11 +4378,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4377 "util/configparser.c" /* yacc.c:1646 */ +#line 4382 "util/configparser.c" /* yacc.c:1646 */ break; - case 383: -#line 1664 "./util/configparser.y" /* yacc.c:1646 */ + case 386: +#line 1665 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_aggressive_nsec:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4387,11 +4392,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4391 "util/configparser.c" /* yacc.c:1646 */ +#line 4396 "util/configparser.c" /* yacc.c:1646 */ break; - case 384: -#line 1675 "./util/configparser.y" /* yacc.c:1646 */ + case 387: +#line 1676 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ignore_cd_flag:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4399,11 +4404,11 @@ yyreduce: else cfg_parser->cfg->ignore_cd = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4403 "util/configparser.c" /* yacc.c:1646 */ +#line 4408 "util/configparser.c" /* yacc.c:1646 */ break; - case 385: -#line 1684 "./util/configparser.y" /* yacc.c:1646 */ + case 388: +#line 1685 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_serve_expired:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4411,11 +4416,11 @@ yyreduce: else cfg_parser->cfg->serve_expired = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4415 "util/configparser.c" /* yacc.c:1646 */ +#line 4420 "util/configparser.c" /* yacc.c:1646 */ break; - case 386: -#line 1693 "./util/configparser.y" /* yacc.c:1646 */ + case 389: +#line 1694 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_serve_expired_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4423,11 +4428,11 @@ yyreduce: else cfg_parser->cfg->serve_expired_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4427 "util/configparser.c" /* yacc.c:1646 */ +#line 4432 "util/configparser.c" /* yacc.c:1646 */ break; - case 387: -#line 1702 "./util/configparser.y" /* yacc.c:1646 */ + case 390: +#line 1703 "./util/configparser.y" /* yacc.c:1646 */ { 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) @@ -4435,11 +4440,11 @@ yyreduce: else cfg_parser->cfg->serve_expired_ttl_reset = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4439 "util/configparser.c" /* yacc.c:1646 */ +#line 4444 "util/configparser.c" /* yacc.c:1646 */ break; - case 388: -#line 1711 "./util/configparser.y" /* yacc.c:1646 */ + case 391: +#line 1712 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_fake_dsa:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4451,11 +4456,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 4455 "util/configparser.c" /* yacc.c:1646 */ +#line 4460 "util/configparser.c" /* yacc.c:1646 */ break; - case 389: -#line 1724 "./util/configparser.y" /* yacc.c:1646 */ + case 392: +#line 1725 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_fake_sha1:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4467,11 +4472,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 4471 "util/configparser.c" /* yacc.c:1646 */ +#line 4476 "util/configparser.c" /* yacc.c:1646 */ break; - case 390: -#line 1737 "./util/configparser.y" /* yacc.c:1646 */ + case 393: +#line 1738 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_log_level:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4479,21 +4484,21 @@ yyreduce: else cfg_parser->cfg->val_log_level = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4483 "util/configparser.c" /* yacc.c:1646 */ +#line 4488 "util/configparser.c" /* yacc.c:1646 */ break; - case 391: -#line 1746 "./util/configparser.y" /* yacc.c:1646 */ + case 394: +#line 1747 "./util/configparser.y" /* yacc.c:1646 */ { 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 4493 "util/configparser.c" /* yacc.c:1646 */ +#line 4498 "util/configparser.c" /* yacc.c:1646 */ break; - case 392: -#line 1753 "./util/configparser.y" /* yacc.c:1646 */ + case 395: +#line 1754 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_add_holddown:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4501,11 +4506,11 @@ yyreduce: else cfg_parser->cfg->add_holddown = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4505 "util/configparser.c" /* yacc.c:1646 */ +#line 4510 "util/configparser.c" /* yacc.c:1646 */ break; - case 393: -#line 1762 "./util/configparser.y" /* yacc.c:1646 */ + case 396: +#line 1763 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_del_holddown:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4513,11 +4518,11 @@ yyreduce: else cfg_parser->cfg->del_holddown = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4517 "util/configparser.c" /* yacc.c:1646 */ +#line 4522 "util/configparser.c" /* yacc.c:1646 */ break; - case 394: -#line 1771 "./util/configparser.y" /* yacc.c:1646 */ + case 397: +#line 1772 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_keep_missing:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4525,11 +4530,11 @@ yyreduce: else cfg_parser->cfg->keep_missing = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4529 "util/configparser.c" /* yacc.c:1646 */ +#line 4534 "util/configparser.c" /* yacc.c:1646 */ break; - case 395: -#line 1780 "./util/configparser.y" /* yacc.c:1646 */ + case 398: +#line 1781 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_permit_small_holddown:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4538,22 +4543,22 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4542 "util/configparser.c" /* yacc.c:1646 */ +#line 4547 "util/configparser.c" /* yacc.c:1646 */ break; - case 396: -#line 1789 "./util/configparser.y" /* yacc.c:1646 */ + case 399: +#line 1790 "./util/configparser.y" /* yacc.c:1646 */ { 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 4553 "util/configparser.c" /* yacc.c:1646 */ +#line 4558 "util/configparser.c" /* yacc.c:1646 */ break; - case 397: -#line 1797 "./util/configparser.y" /* yacc.c:1646 */ + case 400: +#line 1798 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_key_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4565,22 +4570,22 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4569 "util/configparser.c" /* yacc.c:1646 */ +#line 4574 "util/configparser.c" /* yacc.c:1646 */ break; - case 398: -#line 1810 "./util/configparser.y" /* yacc.c:1646 */ + case 401: +#line 1811 "./util/configparser.y" /* yacc.c:1646 */ { 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 4580 "util/configparser.c" /* yacc.c:1646 */ +#line 4585 "util/configparser.c" /* yacc.c:1646 */ break; - case 399: -#line 1818 "./util/configparser.y" /* yacc.c:1646 */ + case 402: +#line 1819 "./util/configparser.y" /* yacc.c:1646 */ { 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 && @@ -4612,21 +4617,21 @@ yyreduce: fatal_exit("out of memory adding local-zone"); } } -#line 4616 "util/configparser.c" /* yacc.c:1646 */ +#line 4621 "util/configparser.c" /* yacc.c:1646 */ break; - case 400: -#line 1851 "./util/configparser.y" /* yacc.c:1646 */ + case 403: +#line 1852 "./util/configparser.y" /* yacc.c:1646 */ { 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 4626 "util/configparser.c" /* yacc.c:1646 */ +#line 4631 "util/configparser.c" /* yacc.c:1646 */ break; - case 401: -#line 1858 "./util/configparser.y" /* yacc.c:1646 */ + case 404: +#line 1859 "./util/configparser.y" /* yacc.c:1646 */ { char* ptr; OUTYY(("P(server_local_data_ptr:%s)\n", (yyvsp[0].str))); @@ -4640,11 +4645,11 @@ yyreduce: yyerror("local-data-ptr could not be reversed"); } } -#line 4644 "util/configparser.c" /* yacc.c:1646 */ +#line 4649 "util/configparser.c" /* yacc.c:1646 */ break; - case 402: -#line 1873 "./util/configparser.y" /* yacc.c:1646 */ + case 405: +#line 1874 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_minimal_responses:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4653,11 +4658,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4657 "util/configparser.c" /* yacc.c:1646 */ +#line 4662 "util/configparser.c" /* yacc.c:1646 */ break; - case 403: -#line 1883 "./util/configparser.y" /* yacc.c:1646 */ + case 406: +#line 1884 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_rrset_roundrobin:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4666,41 +4671,41 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4670 "util/configparser.c" /* yacc.c:1646 */ +#line 4675 "util/configparser.c" /* yacc.c:1646 */ break; - case 404: -#line 1893 "./util/configparser.y" /* yacc.c:1646 */ + case 407: +#line 1894 "./util/configparser.y" /* yacc.c:1646 */ { 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 4680 "util/configparser.c" /* yacc.c:1646 */ +#line 4685 "util/configparser.c" /* yacc.c:1646 */ break; - case 405: -#line 1900 "./util/configparser.y" /* yacc.c:1646 */ + case 408: +#line 1901 "./util/configparser.y" /* yacc.c:1646 */ { 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 4690 "util/configparser.c" /* yacc.c:1646 */ +#line 4695 "util/configparser.c" /* yacc.c:1646 */ break; - case 406: -#line 1907 "./util/configparser.y" /* yacc.c:1646 */ + case 409: +#line 1908 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dns64_prefix:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dns64_prefix); cfg_parser->cfg->dns64_prefix = (yyvsp[0].str); } -#line 4700 "util/configparser.c" /* yacc.c:1646 */ +#line 4705 "util/configparser.c" /* yacc.c:1646 */ break; - case 407: -#line 1914 "./util/configparser.y" /* yacc.c:1646 */ + case 410: +#line 1915 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_dns64_synthall:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4708,22 +4713,22 @@ yyreduce: else cfg_parser->cfg->dns64_synthall = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4712 "util/configparser.c" /* yacc.c:1646 */ +#line 4717 "util/configparser.c" /* yacc.c:1646 */ break; - case 408: -#line 1923 "./util/configparser.y" /* yacc.c:1646 */ + case 411: +#line 1924 "./util/configparser.y" /* yacc.c:1646 */ { 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 4723 "util/configparser.c" /* yacc.c:1646 */ +#line 4728 "util/configparser.c" /* yacc.c:1646 */ break; - case 409: -#line 1931 "./util/configparser.y" /* yacc.c:1646 */ + case 412: +#line 1932 "./util/configparser.y" /* yacc.c:1646 */ { char* p, *s = (yyvsp[0].str); OUTYY(("P(server_define_tag:%s)\n", (yyvsp[0].str))); @@ -4736,11 +4741,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4740 "util/configparser.c" /* yacc.c:1646 */ +#line 4745 "util/configparser.c" /* yacc.c:1646 */ break; - case 410: -#line 1945 "./util/configparser.y" /* yacc.c:1646 */ + case 413: +#line 1946 "./util/configparser.y" /* yacc.c:1646 */ { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -4760,11 +4765,11 @@ yyreduce: } } } -#line 4764 "util/configparser.c" /* yacc.c:1646 */ +#line 4769 "util/configparser.c" /* yacc.c:1646 */ break; - case 411: -#line 1966 "./util/configparser.y" /* yacc.c:1646 */ + case 414: +#line 1967 "./util/configparser.y" /* yacc.c:1646 */ { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -4784,11 +4789,11 @@ yyreduce: } } } -#line 4788 "util/configparser.c" /* yacc.c:1646 */ +#line 4793 "util/configparser.c" /* yacc.c:1646 */ break; - case 412: -#line 1987 "./util/configparser.y" /* yacc.c:1646 */ + case 415: +#line 1988 "./util/configparser.y" /* yacc.c:1646 */ { 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, @@ -4799,11 +4804,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 4803 "util/configparser.c" /* yacc.c:1646 */ +#line 4808 "util/configparser.c" /* yacc.c:1646 */ break; - case 413: -#line 1999 "./util/configparser.y" /* yacc.c:1646 */ + case 416: +#line 2000 "./util/configparser.y" /* yacc.c:1646 */ { 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, @@ -4814,11 +4819,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 4818 "util/configparser.c" /* yacc.c:1646 */ +#line 4823 "util/configparser.c" /* yacc.c:1646 */ break; - case 414: -#line 2011 "./util/configparser.y" /* yacc.c:1646 */ + case 417: +#line 2012 "./util/configparser.y" /* yacc.c:1646 */ { 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, @@ -4829,11 +4834,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 4833 "util/configparser.c" /* yacc.c:1646 */ +#line 4838 "util/configparser.c" /* yacc.c:1646 */ break; - case 415: -#line 2023 "./util/configparser.y" /* yacc.c:1646 */ + case 418: +#line 2024 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_access_control_view:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str2list_insert(&cfg_parser->cfg->acl_view, @@ -4841,11 +4846,11 @@ yyreduce: yyerror("out of memory"); } } -#line 4845 "util/configparser.c" /* yacc.c:1646 */ +#line 4850 "util/configparser.c" /* yacc.c:1646 */ break; - case 416: -#line 2032 "./util/configparser.y" /* yacc.c:1646 */ + case 419: +#line 2033 "./util/configparser.y" /* yacc.c:1646 */ { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -4865,11 +4870,11 @@ yyreduce: } } } -#line 4869 "util/configparser.c" /* yacc.c:1646 */ +#line 4874 "util/configparser.c" /* yacc.c:1646 */ break; - case 417: -#line 2053 "./util/configparser.y" /* yacc.c:1646 */ + case 420: +#line 2054 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_ratelimit:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4877,11 +4882,11 @@ yyreduce: else cfg_parser->cfg->ip_ratelimit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4881 "util/configparser.c" /* yacc.c:1646 */ +#line 4886 "util/configparser.c" /* yacc.c:1646 */ break; - case 418: -#line 2063 "./util/configparser.y" /* yacc.c:1646 */ + case 421: +#line 2064 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ratelimit:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4889,33 +4894,33 @@ yyreduce: else cfg_parser->cfg->ratelimit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4893 "util/configparser.c" /* yacc.c:1646 */ +#line 4898 "util/configparser.c" /* yacc.c:1646 */ break; - case 419: -#line 2072 "./util/configparser.y" /* yacc.c:1646 */ + case 422: +#line 2073 "./util/configparser.y" /* yacc.c:1646 */ { 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 4904 "util/configparser.c" /* yacc.c:1646 */ +#line 4909 "util/configparser.c" /* yacc.c:1646 */ break; - case 420: -#line 2080 "./util/configparser.y" /* yacc.c:1646 */ + case 423: +#line 2081 "./util/configparser.y" /* yacc.c:1646 */ { 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 4915 "util/configparser.c" /* yacc.c:1646 */ +#line 4920 "util/configparser.c" /* yacc.c:1646 */ break; - case 421: -#line 2088 "./util/configparser.y" /* yacc.c:1646 */ + case 424: +#line 2089 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_ratelimit_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4927,11 +4932,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4931 "util/configparser.c" /* yacc.c:1646 */ +#line 4936 "util/configparser.c" /* yacc.c:1646 */ break; - case 422: -#line 2101 "./util/configparser.y" /* yacc.c:1646 */ + case 425: +#line 2102 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ratelimit_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4943,11 +4948,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4947 "util/configparser.c" /* yacc.c:1646 */ +#line 4952 "util/configparser.c" /* yacc.c:1646 */ break; - case 423: -#line 2114 "./util/configparser.y" /* yacc.c:1646 */ + case 426: +#line 2115 "./util/configparser.y" /* yacc.c:1646 */ { 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) { @@ -4961,11 +4966,11 @@ yyreduce: "ratelimit-for-domain"); } } -#line 4965 "util/configparser.c" /* yacc.c:1646 */ +#line 4970 "util/configparser.c" /* yacc.c:1646 */ break; - case 424: -#line 2129 "./util/configparser.y" /* yacc.c:1646 */ + case 427: +#line 2130 "./util/configparser.y" /* yacc.c:1646 */ { 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) { @@ -4979,11 +4984,11 @@ yyreduce: "ratelimit-below-domain"); } } -#line 4983 "util/configparser.c" /* yacc.c:1646 */ +#line 4988 "util/configparser.c" /* yacc.c:1646 */ break; - case 425: -#line 2144 "./util/configparser.y" /* yacc.c:1646 */ + case 428: +#line 2145 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_ratelimit_factor:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4991,11 +4996,11 @@ yyreduce: else cfg_parser->cfg->ip_ratelimit_factor = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4995 "util/configparser.c" /* yacc.c:1646 */ +#line 5000 "util/configparser.c" /* yacc.c:1646 */ break; - case 426: -#line 2153 "./util/configparser.y" /* yacc.c:1646 */ + case 429: +#line 2154 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ratelimit_factor:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5003,20 +5008,20 @@ yyreduce: else cfg_parser->cfg->ratelimit_factor = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5007 "util/configparser.c" /* yacc.c:1646 */ +#line 5012 "util/configparser.c" /* yacc.c:1646 */ break; - case 427: -#line 2162 "./util/configparser.y" /* yacc.c:1646 */ + case 430: +#line 2163 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(low-rtt option is deprecated, use fast-server-num instead)\n")); free((yyvsp[0].str)); } -#line 5016 "util/configparser.c" /* yacc.c:1646 */ +#line 5021 "util/configparser.c" /* yacc.c:1646 */ break; - case 428: -#line 2168 "./util/configparser.y" /* yacc.c:1646 */ + case 431: +#line 2169 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_fast_server_num:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) <= 0) @@ -5024,11 +5029,11 @@ yyreduce: else cfg_parser->cfg->fast_server_num = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5028 "util/configparser.c" /* yacc.c:1646 */ +#line 5033 "util/configparser.c" /* yacc.c:1646 */ break; - case 429: -#line 2177 "./util/configparser.y" /* yacc.c:1646 */ + case 432: +#line 2178 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_fast_server_permil:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5036,11 +5041,11 @@ yyreduce: else cfg_parser->cfg->fast_server_permil = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5040 "util/configparser.c" /* yacc.c:1646 */ +#line 5045 "util/configparser.c" /* yacc.c:1646 */ break; - case 430: -#line 2186 "./util/configparser.y" /* yacc.c:1646 */ + case 433: +#line 2187 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_qname_minimisation:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5049,11 +5054,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5053 "util/configparser.c" /* yacc.c:1646 */ +#line 5058 "util/configparser.c" /* yacc.c:1646 */ break; - case 431: -#line 2196 "./util/configparser.y" /* yacc.c:1646 */ + case 434: +#line 2197 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_qname_minimisation_strict:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5062,11 +5067,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5066 "util/configparser.c" /* yacc.c:1646 */ +#line 5071 "util/configparser.c" /* yacc.c:1646 */ break; - case 432: -#line 2206 "./util/configparser.y" /* yacc.c:1646 */ + case 435: +#line 2207 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_enabled:%s)\n", (yyvsp[0].str))); @@ -5078,11 +5083,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 5082 "util/configparser.c" /* yacc.c:1646 */ +#line 5087 "util/configparser.c" /* yacc.c:1646 */ break; - case 433: -#line 2219 "./util/configparser.y" /* yacc.c:1646 */ + case 436: +#line 2220 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_ignore_bogus:%s)\n", (yyvsp[0].str))); @@ -5094,11 +5099,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 5098 "util/configparser.c" /* yacc.c:1646 */ +#line 5103 "util/configparser.c" /* yacc.c:1646 */ break; - case 434: -#line 2232 "./util/configparser.y" /* yacc.c:1646 */ + case 437: +#line 2233 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_hook:%s)\n", (yyvsp[0].str))); @@ -5109,11 +5114,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5113 "util/configparser.c" /* yacc.c:1646 */ +#line 5118 "util/configparser.c" /* yacc.c:1646 */ break; - case 435: -#line 2244 "./util/configparser.y" /* yacc.c:1646 */ + case 438: +#line 2245 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_max_ttl:%s)\n", (yyvsp[0].str))); @@ -5126,11 +5131,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5130 "util/configparser.c" /* yacc.c:1646 */ +#line 5135 "util/configparser.c" /* yacc.c:1646 */ break; - case 436: -#line 2258 "./util/configparser.y" /* yacc.c:1646 */ + case 439: +#line 2259 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_whitelist:%s)\n", (yyvsp[0].str))); @@ -5141,11 +5146,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5145 "util/configparser.c" /* yacc.c:1646 */ +#line 5150 "util/configparser.c" /* yacc.c:1646 */ break; - case 437: -#line 2270 "./util/configparser.y" /* yacc.c:1646 */ + case 440: +#line 2271 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_strict:%s)\n", (yyvsp[0].str))); @@ -5158,11 +5163,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5162 "util/configparser.c" /* yacc.c:1646 */ +#line 5167 "util/configparser.c" /* yacc.c:1646 */ break; - case 438: -#line 2284 "./util/configparser.y" /* yacc.c:1646 */ + case 441: +#line 2285 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->stubs->name) @@ -5171,31 +5176,31 @@ yyreduce: free(cfg_parser->cfg->stubs->name); cfg_parser->cfg->stubs->name = (yyvsp[0].str); } -#line 5175 "util/configparser.c" /* yacc.c:1646 */ +#line 5180 "util/configparser.c" /* yacc.c:1646 */ break; - case 439: -#line 2294 "./util/configparser.y" /* yacc.c:1646 */ + case 442: +#line 2295 "./util/configparser.y" /* yacc.c:1646 */ { 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 5185 "util/configparser.c" /* yacc.c:1646 */ +#line 5190 "util/configparser.c" /* yacc.c:1646 */ break; - case 440: -#line 2301 "./util/configparser.y" /* yacc.c:1646 */ + case 443: +#line 2302 "./util/configparser.y" /* yacc.c:1646 */ { 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 5195 "util/configparser.c" /* yacc.c:1646 */ +#line 5200 "util/configparser.c" /* yacc.c:1646 */ break; - case 441: -#line 2308 "./util/configparser.y" /* yacc.c:1646 */ + case 444: +#line 2309 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(stub-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5203,11 +5208,11 @@ yyreduce: else cfg_parser->cfg->stubs->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5207 "util/configparser.c" /* yacc.c:1646 */ +#line 5212 "util/configparser.c" /* yacc.c:1646 */ break; - case 442: -#line 2317 "./util/configparser.y" /* yacc.c:1646 */ + case 445: +#line 2318 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(stub-no-cache:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5215,11 +5220,11 @@ yyreduce: else cfg_parser->cfg->stubs->no_cache=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5219 "util/configparser.c" /* yacc.c:1646 */ +#line 5224 "util/configparser.c" /* yacc.c:1646 */ break; - case 443: -#line 2326 "./util/configparser.y" /* yacc.c:1646 */ + case 446: +#line 2327 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(stub-ssl-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5228,11 +5233,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5232 "util/configparser.c" /* yacc.c:1646 */ +#line 5237 "util/configparser.c" /* yacc.c:1646 */ break; - case 444: -#line 2336 "./util/configparser.y" /* yacc.c:1646 */ + case 447: +#line 2337 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(stub-prime:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5241,11 +5246,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5245 "util/configparser.c" /* yacc.c:1646 */ +#line 5250 "util/configparser.c" /* yacc.c:1646 */ break; - case 445: -#line 2346 "./util/configparser.y" /* yacc.c:1646 */ + case 448: +#line 2347 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->forwards->name) @@ -5254,31 +5259,31 @@ yyreduce: free(cfg_parser->cfg->forwards->name); cfg_parser->cfg->forwards->name = (yyvsp[0].str); } -#line 5258 "util/configparser.c" /* yacc.c:1646 */ +#line 5263 "util/configparser.c" /* yacc.c:1646 */ break; - case 446: -#line 2356 "./util/configparser.y" /* yacc.c:1646 */ + case 449: +#line 2357 "./util/configparser.y" /* yacc.c:1646 */ { 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 5268 "util/configparser.c" /* yacc.c:1646 */ +#line 5273 "util/configparser.c" /* yacc.c:1646 */ break; - case 447: -#line 2363 "./util/configparser.y" /* yacc.c:1646 */ + case 450: +#line 2364 "./util/configparser.y" /* yacc.c:1646 */ { 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 5278 "util/configparser.c" /* yacc.c:1646 */ +#line 5283 "util/configparser.c" /* yacc.c:1646 */ break; - case 448: -#line 2370 "./util/configparser.y" /* yacc.c:1646 */ + case 451: +#line 2371 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(forward-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5286,11 +5291,11 @@ yyreduce: else cfg_parser->cfg->forwards->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5290 "util/configparser.c" /* yacc.c:1646 */ +#line 5295 "util/configparser.c" /* yacc.c:1646 */ break; - case 449: -#line 2379 "./util/configparser.y" /* yacc.c:1646 */ + case 452: +#line 2380 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(forward-no-cache:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5298,11 +5303,11 @@ yyreduce: else cfg_parser->cfg->forwards->no_cache=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5302 "util/configparser.c" /* yacc.c:1646 */ +#line 5307 "util/configparser.c" /* yacc.c:1646 */ break; - case 450: -#line 2388 "./util/configparser.y" /* yacc.c:1646 */ + case 453: +#line 2389 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(forward-ssl-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5311,11 +5316,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5315 "util/configparser.c" /* yacc.c:1646 */ +#line 5320 "util/configparser.c" /* yacc.c:1646 */ break; - case 451: -#line 2398 "./util/configparser.y" /* yacc.c:1646 */ + case 454: +#line 2399 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->auths->name) @@ -5324,52 +5329,52 @@ yyreduce: free(cfg_parser->cfg->auths->name); cfg_parser->cfg->auths->name = (yyvsp[0].str); } -#line 5328 "util/configparser.c" /* yacc.c:1646 */ +#line 5333 "util/configparser.c" /* yacc.c:1646 */ break; - case 452: -#line 2408 "./util/configparser.y" /* yacc.c:1646 */ + case 455: +#line 2409 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(zonefile:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->auths->zonefile); cfg_parser->cfg->auths->zonefile = (yyvsp[0].str); } -#line 5338 "util/configparser.c" /* yacc.c:1646 */ +#line 5343 "util/configparser.c" /* yacc.c:1646 */ break; - case 453: -#line 2415 "./util/configparser.y" /* yacc.c:1646 */ + case 456: +#line 2416 "./util/configparser.y" /* yacc.c:1646 */ { 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 5348 "util/configparser.c" /* yacc.c:1646 */ +#line 5353 "util/configparser.c" /* yacc.c:1646 */ break; - case 454: -#line 2422 "./util/configparser.y" /* yacc.c:1646 */ + case 457: +#line 2423 "./util/configparser.y" /* yacc.c:1646 */ { 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 5358 "util/configparser.c" /* yacc.c:1646 */ +#line 5363 "util/configparser.c" /* yacc.c:1646 */ break; - case 455: -#line 2429 "./util/configparser.y" /* yacc.c:1646 */ + case 458: +#line 2430 "./util/configparser.y" /* yacc.c:1646 */ { 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 5369 "util/configparser.c" /* yacc.c:1646 */ +#line 5374 "util/configparser.c" /* yacc.c:1646 */ break; - case 456: -#line 2437 "./util/configparser.y" /* yacc.c:1646 */ + case 459: +#line 2438 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(for-downstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5378,11 +5383,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5382 "util/configparser.c" /* yacc.c:1646 */ +#line 5387 "util/configparser.c" /* yacc.c:1646 */ break; - case 457: -#line 2447 "./util/configparser.y" /* yacc.c:1646 */ + case 460: +#line 2448 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(for-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5391,11 +5396,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5395 "util/configparser.c" /* yacc.c:1646 */ +#line 5400 "util/configparser.c" /* yacc.c:1646 */ break; - case 458: -#line 2457 "./util/configparser.y" /* yacc.c:1646 */ + case 461: +#line 2458 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(fallback-enabled:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5404,11 +5409,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5408 "util/configparser.c" /* yacc.c:1646 */ +#line 5413 "util/configparser.c" /* yacc.c:1646 */ break; - case 459: -#line 2467 "./util/configparser.y" /* yacc.c:1646 */ + case 462: +#line 2468 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->views->name) @@ -5417,11 +5422,11 @@ yyreduce: free(cfg_parser->cfg->views->name); cfg_parser->cfg->views->name = (yyvsp[0].str); } -#line 5421 "util/configparser.c" /* yacc.c:1646 */ +#line 5426 "util/configparser.c" /* yacc.c:1646 */ break; - case 460: -#line 2477 "./util/configparser.y" /* yacc.c:1646 */ + case 463: +#line 2478 "./util/configparser.y" /* yacc.c:1646 */ { 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 && @@ -5452,11 +5457,11 @@ yyreduce: fatal_exit("out of memory adding local-zone"); } } -#line 5456 "util/configparser.c" /* yacc.c:1646 */ +#line 5461 "util/configparser.c" /* yacc.c:1646 */ break; - case 461: -#line 2509 "./util/configparser.y" /* yacc.c:1646 */ + case 464: +#line 2510 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(view_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); validate_respip_action((yyvsp[0].str)); @@ -5465,33 +5470,33 @@ yyreduce: fatal_exit("out of memory adding per-view " "response-ip action"); } -#line 5469 "util/configparser.c" /* yacc.c:1646 */ +#line 5474 "util/configparser.c" /* yacc.c:1646 */ break; - case 462: -#line 2519 "./util/configparser.y" /* yacc.c:1646 */ + case 465: +#line 2520 "./util/configparser.y" /* yacc.c:1646 */ { 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 5480 "util/configparser.c" /* yacc.c:1646 */ +#line 5485 "util/configparser.c" /* yacc.c:1646 */ break; - case 463: -#line 2527 "./util/configparser.y" /* yacc.c:1646 */ + case 466: +#line 2528 "./util/configparser.y" /* yacc.c:1646 */ { 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 5491 "util/configparser.c" /* yacc.c:1646 */ +#line 5496 "util/configparser.c" /* yacc.c:1646 */ break; - case 464: -#line 2535 "./util/configparser.y" /* yacc.c:1646 */ + case 467: +#line 2536 "./util/configparser.y" /* yacc.c:1646 */ { char* ptr; OUTYY(("P(view_local_data_ptr:%s)\n", (yyvsp[0].str))); @@ -5505,11 +5510,11 @@ yyreduce: yyerror("local-data-ptr could not be reversed"); } } -#line 5509 "util/configparser.c" /* yacc.c:1646 */ +#line 5514 "util/configparser.c" /* yacc.c:1646 */ break; - case 465: -#line 2550 "./util/configparser.y" /* yacc.c:1646 */ + case 468: +#line 2551 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(view-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5517,19 +5522,19 @@ yyreduce: else cfg_parser->cfg->views->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5521 "util/configparser.c" /* yacc.c:1646 */ +#line 5526 "util/configparser.c" /* yacc.c:1646 */ break; - case 466: -#line 2559 "./util/configparser.y" /* yacc.c:1646 */ + case 469: +#line 2560 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(remote-control:)\n")); } -#line 5529 "util/configparser.c" /* yacc.c:1646 */ +#line 5534 "util/configparser.c" /* yacc.c:1646 */ break; - case 477: -#line 2570 "./util/configparser.y" /* yacc.c:1646 */ + case 480: +#line 2571 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(control_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5538,11 +5543,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5542 "util/configparser.c" /* yacc.c:1646 */ +#line 5547 "util/configparser.c" /* yacc.c:1646 */ break; - case 478: -#line 2580 "./util/configparser.y" /* yacc.c:1646 */ + case 481: +#line 2581 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(control_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5550,79 +5555,79 @@ yyreduce: else cfg_parser->cfg->control_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5554 "util/configparser.c" /* yacc.c:1646 */ +#line 5559 "util/configparser.c" /* yacc.c:1646 */ break; - case 479: -#line 2589 "./util/configparser.y" /* yacc.c:1646 */ + case 482: +#line 2590 "./util/configparser.y" /* yacc.c:1646 */ { 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 5564 "util/configparser.c" /* yacc.c:1646 */ +#line 5569 "util/configparser.c" /* yacc.c:1646 */ break; - case 480: -#line 2596 "./util/configparser.y" /* yacc.c:1646 */ + case 483: +#line 2597 "./util/configparser.y" /* yacc.c:1646 */ { 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 5574 "util/configparser.c" /* yacc.c:1646 */ +#line 5579 "util/configparser.c" /* yacc.c:1646 */ break; - case 481: -#line 2603 "./util/configparser.y" /* yacc.c:1646 */ + case 484: +#line 2604 "./util/configparser.y" /* yacc.c:1646 */ { 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 5584 "util/configparser.c" /* yacc.c:1646 */ +#line 5589 "util/configparser.c" /* yacc.c:1646 */ break; - case 482: -#line 2610 "./util/configparser.y" /* yacc.c:1646 */ + case 485: +#line 2611 "./util/configparser.y" /* yacc.c:1646 */ { 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 5594 "util/configparser.c" /* yacc.c:1646 */ +#line 5599 "util/configparser.c" /* yacc.c:1646 */ break; - case 483: -#line 2617 "./util/configparser.y" /* yacc.c:1646 */ + case 486: +#line 2618 "./util/configparser.y" /* yacc.c:1646 */ { 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 5604 "util/configparser.c" /* yacc.c:1646 */ +#line 5609 "util/configparser.c" /* yacc.c:1646 */ break; - case 484: -#line 2624 "./util/configparser.y" /* yacc.c:1646 */ + case 487: +#line 2625 "./util/configparser.y" /* yacc.c:1646 */ { 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 5614 "util/configparser.c" /* yacc.c:1646 */ +#line 5619 "util/configparser.c" /* yacc.c:1646 */ break; - case 485: -#line 2631 "./util/configparser.y" /* yacc.c:1646 */ + case 488: +#line 2632 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(dnstap:)\n")); } -#line 5622 "util/configparser.c" /* yacc.c:1646 */ +#line 5627 "util/configparser.c" /* yacc.c:1646 */ break; - case 500: -#line 2648 "./util/configparser.y" /* yacc.c:1646 */ + case 503: +#line 2649 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5630,21 +5635,21 @@ yyreduce: else cfg_parser->cfg->dnstap = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5634 "util/configparser.c" /* yacc.c:1646 */ +#line 5639 "util/configparser.c" /* yacc.c:1646 */ break; - case 501: -#line 2657 "./util/configparser.y" /* yacc.c:1646 */ + case 504: +#line 2658 "./util/configparser.y" /* yacc.c:1646 */ { 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 5644 "util/configparser.c" /* yacc.c:1646 */ +#line 5649 "util/configparser.c" /* yacc.c:1646 */ break; - case 502: -#line 2664 "./util/configparser.y" /* yacc.c:1646 */ + case 505: +#line 2665 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_send_identity:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5652,11 +5657,11 @@ yyreduce: else cfg_parser->cfg->dnstap_send_identity = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5656 "util/configparser.c" /* yacc.c:1646 */ +#line 5661 "util/configparser.c" /* yacc.c:1646 */ break; - case 503: -#line 2673 "./util/configparser.y" /* yacc.c:1646 */ + case 506: +#line 2674 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_send_version:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5664,31 +5669,31 @@ yyreduce: else cfg_parser->cfg->dnstap_send_version = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5668 "util/configparser.c" /* yacc.c:1646 */ +#line 5673 "util/configparser.c" /* yacc.c:1646 */ break; - case 504: -#line 2682 "./util/configparser.y" /* yacc.c:1646 */ + case 507: +#line 2683 "./util/configparser.y" /* yacc.c:1646 */ { 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 5678 "util/configparser.c" /* yacc.c:1646 */ +#line 5683 "util/configparser.c" /* yacc.c:1646 */ break; - case 505: -#line 2689 "./util/configparser.y" /* yacc.c:1646 */ + case 508: +#line 2690 "./util/configparser.y" /* yacc.c:1646 */ { 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 5688 "util/configparser.c" /* yacc.c:1646 */ +#line 5693 "util/configparser.c" /* yacc.c:1646 */ break; - case 506: -#line 2696 "./util/configparser.y" /* yacc.c:1646 */ + case 509: +#line 2697 "./util/configparser.y" /* yacc.c:1646 */ { 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) @@ -5697,11 +5702,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5701 "util/configparser.c" /* yacc.c:1646 */ +#line 5706 "util/configparser.c" /* yacc.c:1646 */ break; - case 507: -#line 2706 "./util/configparser.y" /* yacc.c:1646 */ + case 510: +#line 2707 "./util/configparser.y" /* yacc.c:1646 */ { 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) @@ -5710,11 +5715,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5714 "util/configparser.c" /* yacc.c:1646 */ +#line 5719 "util/configparser.c" /* yacc.c:1646 */ break; - case 508: -#line 2716 "./util/configparser.y" /* yacc.c:1646 */ + case 511: +#line 2717 "./util/configparser.y" /* yacc.c:1646 */ { 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) @@ -5723,11 +5728,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5727 "util/configparser.c" /* yacc.c:1646 */ +#line 5732 "util/configparser.c" /* yacc.c:1646 */ break; - case 509: -#line 2726 "./util/configparser.y" /* yacc.c:1646 */ + case 512: +#line 2727 "./util/configparser.y" /* yacc.c:1646 */ { 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) @@ -5736,11 +5741,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5740 "util/configparser.c" /* yacc.c:1646 */ +#line 5745 "util/configparser.c" /* yacc.c:1646 */ break; - case 510: -#line 2736 "./util/configparser.y" /* yacc.c:1646 */ + case 513: +#line 2737 "./util/configparser.y" /* yacc.c:1646 */ { 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) @@ -5749,11 +5754,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5753 "util/configparser.c" /* yacc.c:1646 */ +#line 5758 "util/configparser.c" /* yacc.c:1646 */ break; - case 511: -#line 2746 "./util/configparser.y" /* yacc.c:1646 */ + case 514: +#line 2747 "./util/configparser.y" /* yacc.c:1646 */ { 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) @@ -5762,29 +5767,29 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5766 "util/configparser.c" /* yacc.c:1646 */ +#line 5771 "util/configparser.c" /* yacc.c:1646 */ break; - case 512: -#line 2756 "./util/configparser.y" /* yacc.c:1646 */ + case 515: +#line 2757 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(python:)\n")); } -#line 5774 "util/configparser.c" /* yacc.c:1646 */ +#line 5779 "util/configparser.c" /* yacc.c:1646 */ break; - case 516: -#line 2765 "./util/configparser.y" /* yacc.c:1646 */ + case 519: +#line 2766 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(python-script:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->python_script); cfg_parser->cfg->python_script = (yyvsp[0].str); } -#line 5784 "util/configparser.c" /* yacc.c:1646 */ +#line 5789 "util/configparser.c" /* yacc.c:1646 */ break; - case 517: -#line 2771 "./util/configparser.y" /* yacc.c:1646 */ + case 520: +#line 2772 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(disable_dnssec_lame_check:%s)\n", (yyvsp[0].str))); if (strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5793,21 +5798,21 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5797 "util/configparser.c" /* yacc.c:1646 */ +#line 5802 "util/configparser.c" /* yacc.c:1646 */ break; - case 518: -#line 2781 "./util/configparser.y" /* yacc.c:1646 */ + case 521: +#line 2782 "./util/configparser.y" /* yacc.c:1646 */ { 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 5807 "util/configparser.c" /* yacc.c:1646 */ +#line 5812 "util/configparser.c" /* yacc.c:1646 */ break; - case 519: -#line 2788 "./util/configparser.y" /* yacc.c:1646 */ + case 522: +#line 2789 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); validate_respip_action((yyvsp[0].str)); @@ -5815,30 +5820,30 @@ yyreduce: (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding response-ip"); } -#line 5819 "util/configparser.c" /* yacc.c:1646 */ +#line 5824 "util/configparser.c" /* yacc.c:1646 */ break; - case 520: -#line 2797 "./util/configparser.y" /* yacc.c:1646 */ + case 523: +#line 2798 "./util/configparser.y" /* yacc.c:1646 */ { 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 5830 "util/configparser.c" /* yacc.c:1646 */ +#line 5835 "util/configparser.c" /* yacc.c:1646 */ break; - case 521: -#line 2805 "./util/configparser.y" /* yacc.c:1646 */ + case 524: +#line 2806 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(dnscrypt:)\n")); } -#line 5838 "util/configparser.c" /* yacc.c:1646 */ +#line 5843 "util/configparser.c" /* yacc.c:1646 */ break; - case 534: -#line 2821 "./util/configparser.y" /* yacc.c:1646 */ + case 537: +#line 2822 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5846,11 +5851,11 @@ yyreduce: else cfg_parser->cfg->dnscrypt = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5850 "util/configparser.c" /* yacc.c:1646 */ +#line 5855 "util/configparser.c" /* yacc.c:1646 */ break; - case 535: -#line 2831 "./util/configparser.y" /* yacc.c:1646 */ + case 538: +#line 2832 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5858,21 +5863,21 @@ yyreduce: else cfg_parser->cfg->dnscrypt_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5862 "util/configparser.c" /* yacc.c:1646 */ +#line 5867 "util/configparser.c" /* yacc.c:1646 */ break; - case 536: -#line 2840 "./util/configparser.y" /* yacc.c:1646 */ + case 539: +#line 2841 "./util/configparser.y" /* yacc.c:1646 */ { 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 5872 "util/configparser.c" /* yacc.c:1646 */ +#line 5877 "util/configparser.c" /* yacc.c:1646 */ break; - case 537: -#line 2847 "./util/configparser.y" /* yacc.c:1646 */ + case 540: +#line 2848 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_provider_cert:%s)\n", (yyvsp[0].str))); if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str))) @@ -5880,21 +5885,21 @@ yyreduce: if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str))) fatal_exit("out of memory adding dnscrypt-provider-cert"); } -#line 5884 "util/configparser.c" /* yacc.c:1646 */ +#line 5889 "util/configparser.c" /* yacc.c:1646 */ break; - case 538: -#line 2856 "./util/configparser.y" /* yacc.c:1646 */ + case 541: +#line 2857 "./util/configparser.y" /* yacc.c:1646 */ { 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 5894 "util/configparser.c" /* yacc.c:1646 */ +#line 5899 "util/configparser.c" /* yacc.c:1646 */ break; - case 539: -#line 2863 "./util/configparser.y" /* yacc.c:1646 */ + case 542: +#line 2864 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_secret_key:%s)\n", (yyvsp[0].str))); if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str))) @@ -5902,22 +5907,22 @@ yyreduce: if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str))) fatal_exit("out of memory adding dnscrypt-secret-key"); } -#line 5906 "util/configparser.c" /* yacc.c:1646 */ +#line 5911 "util/configparser.c" /* yacc.c:1646 */ break; - case 540: -#line 2872 "./util/configparser.y" /* yacc.c:1646 */ + case 543: +#line 2873 "./util/configparser.y" /* yacc.c:1646 */ { 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 5917 "util/configparser.c" /* yacc.c:1646 */ +#line 5922 "util/configparser.c" /* yacc.c:1646 */ break; - case 541: -#line 2880 "./util/configparser.y" /* yacc.c:1646 */ + case 544: +#line 2881 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnscrypt_shared_secret_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5929,22 +5934,22 @@ yyreduce: } free((yyvsp[0].str)); } -#line 5933 "util/configparser.c" /* yacc.c:1646 */ +#line 5938 "util/configparser.c" /* yacc.c:1646 */ break; - case 542: -#line 2893 "./util/configparser.y" /* yacc.c:1646 */ + case 545: +#line 2894 "./util/configparser.y" /* yacc.c:1646 */ { 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 5944 "util/configparser.c" /* yacc.c:1646 */ +#line 5949 "util/configparser.c" /* yacc.c:1646 */ break; - case 543: -#line 2901 "./util/configparser.y" /* yacc.c:1646 */ + case 546: +#line 2902 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnscrypt_nonce_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5956,19 +5961,19 @@ yyreduce: } free((yyvsp[0].str)); } -#line 5960 "util/configparser.c" /* yacc.c:1646 */ +#line 5965 "util/configparser.c" /* yacc.c:1646 */ break; - case 544: -#line 2914 "./util/configparser.y" /* yacc.c:1646 */ + case 547: +#line 2915 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(cachedb:)\n")); } -#line 5968 "util/configparser.c" /* yacc.c:1646 */ +#line 5973 "util/configparser.c" /* yacc.c:1646 */ break; - case 552: -#line 2924 "./util/configparser.y" /* yacc.c:1646 */ + case 555: +#line 2925 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_CACHEDB OUTYY(("P(backend:%s)\n", (yyvsp[0].str))); @@ -5982,11 +5987,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5986 "util/configparser.c" /* yacc.c:1646 */ +#line 5991 "util/configparser.c" /* yacc.c:1646 */ break; - case 553: -#line 2939 "./util/configparser.y" /* yacc.c:1646 */ + case 556: +#line 2940 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_CACHEDB OUTYY(("P(secret-seed:%s)\n", (yyvsp[0].str))); @@ -6000,11 +6005,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6004 "util/configparser.c" /* yacc.c:1646 */ +#line 6009 "util/configparser.c" /* yacc.c:1646 */ break; - case 554: -#line 2954 "./util/configparser.y" /* yacc.c:1646 */ + case 557: +#line 2955 "./util/configparser.y" /* yacc.c:1646 */ { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_server_host:%s)\n", (yyvsp[0].str))); @@ -6015,11 +6020,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6019 "util/configparser.c" /* yacc.c:1646 */ +#line 6024 "util/configparser.c" /* yacc.c:1646 */ break; - case 555: -#line 2966 "./util/configparser.y" /* yacc.c:1646 */ + case 558: +#line 2967 "./util/configparser.y" /* yacc.c:1646 */ { #if defined(USE_CACHEDB) && defined(USE_REDIS) int port; @@ -6033,11 +6038,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 6037 "util/configparser.c" /* yacc.c:1646 */ +#line 6042 "util/configparser.c" /* yacc.c:1646 */ break; - case 556: -#line 2981 "./util/configparser.y" /* yacc.c:1646 */ + case 559: +#line 2982 "./util/configparser.y" /* yacc.c:1646 */ { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_timeout:%s)\n", (yyvsp[0].str))); @@ -6049,11 +6054,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 6053 "util/configparser.c" /* yacc.c:1646 */ +#line 6058 "util/configparser.c" /* yacc.c:1646 */ break; - case 557: -#line 2994 "./util/configparser.y" /* yacc.c:1646 */ + case 560: +#line 2995 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tcp_connection_limit:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if (atoi((yyvsp[0].str)) < 0) @@ -6063,11 +6068,11 @@ yyreduce: fatal_exit("out of memory adding tcp connection limit"); } } -#line 6067 "util/configparser.c" /* yacc.c:1646 */ +#line 6072 "util/configparser.c" /* yacc.c:1646 */ break; -#line 6071 "util/configparser.c" /* yacc.c:1646 */ +#line 6076 "util/configparser.c" /* yacc.c:1646 */ default: break; } /* User semantic actions sometimes alter yychar, and that requires @@ -6295,7 +6300,7 @@ yyreturn: #endif return yyresult; } -#line 3004 "./util/configparser.y" /* yacc.c:1906 */ +#line 3005 "./util/configparser.y" /* yacc.c:1906 */ /* parse helper routines could be here */ diff --git a/util/configparser.y b/util/configparser.y index a4fbf3ead..0cfd77a1a 100644 --- a/util/configparser.y +++ b/util/configparser.y @@ -384,7 +384,8 @@ rpzstart: VAR_RPZ ; contents_rpz: contents_rpz content_rpz | ; -content_rpz: auth_name | auth_zonefile | rpz_tag +content_rpz: auth_name | auth_zonefile | rpz_tag | auth_master | auth_url | + auth_allow_notify ; server_num_threads: VAR_NUM_THREADS STRING_ARG { diff --git a/util/data/packed_rrset.c b/util/data/packed_rrset.c index 7b9d5494d..9d21b9cc9 100644 --- a/util/data/packed_rrset.c +++ b/util/data/packed_rrset.c @@ -386,3 +386,83 @@ packed_rrset_copy_alloc(struct ub_packed_rrset_key* key, packed_rrset_ttl_add(dd, now); return dk; } + +int +packed_rrset_find_rr(struct packed_rrset_data* d, uint8_t* rdata, size_t len, + size_t* index) +{ + size_t i; + for(i=0; icount; i++) { + if(d->rr_len[i] != len) + continue; + if(memcmp(d->rr_data[i], rdata, len) == 0) { + *index = i; + return 1; + } + } + return 0; +} + +struct packed_rrset_data* +packed_rrset_remove_rr(struct packed_rrset_data* old, size_t index, + struct regional* region) +{ + struct packed_rrset_data* d; + size_t i; + if(index >= old->count + old->rrsig_count) + return NULL; /* index out of bounds */ + if(region) + d = (struct packed_rrset_data*)regional_alloc(region, + packed_rrset_sizeof(old) - ( sizeof(size_t) + + sizeof(uint8_t*) + sizeof(time_t) + old->rr_len[index])); + else + d = (struct packed_rrset_data*)calloc(1, + packed_rrset_sizeof(old) - ( sizeof(size_t) + + sizeof(uint8_t*) + sizeof(time_t) + old->rr_len[index])); + if(!d) { + log_err("malloc failure"); + return NULL; + } + d->ttl = old->ttl; + d->count = old->count; + d->rrsig_count = old->rrsig_count; + if(index < d->count) d->count--; + else d->rrsig_count--; + d->trust = old->trust; + d->security = old->security; + + /* set rr_len, needed for ptr_fixup */ + d->rr_len = (size_t*)((uint8_t*)d + + sizeof(struct packed_rrset_data)); + if(index > 0) + memmove(d->rr_len, old->rr_len, (index)*sizeof(size_t)); + if(index+1 < old->count+old->rrsig_count) + memmove(&d->rr_len[index], &old->rr_len[index+1], + (old->count+old->rrsig_count - (index+1))*sizeof(size_t)); + packed_rrset_ptr_fixup(d); + + /* move over ttls */ + if(index > 0) + memmove(d->rr_ttl, old->rr_ttl, (index)*sizeof(time_t)); + if(index+1 < old->count+old->rrsig_count) + memmove(&d->rr_ttl[index], &old->rr_ttl[index+1], + (old->count+old->rrsig_count - (index+1))*sizeof(time_t)); + + /* move over rr_data */ + for(i=0; icount+d->rrsig_count; i++) { + size_t oldi; + if(i < index) oldi = i; + else oldi = i+1; + memmove(d->rr_data[i], old->rr_data[oldi], d->rr_len[i]); + } + + /* recalc ttl (lowest of remaining RR ttls) */ + if(d->count + d->rrsig_count > 0) + d->ttl = d->rr_ttl[0]; + for(i=0; icount+d->rrsig_count; i++) { + if(d->rr_ttl[i] < d->ttl) + d->ttl = d->rr_ttl[i]; + } + + return d; +} diff --git a/util/data/packed_rrset.h b/util/data/packed_rrset.h index 3a5335ddf..cb2664c05 100644 --- a/util/data/packed_rrset.h +++ b/util/data/packed_rrset.h @@ -446,4 +446,28 @@ struct ub_packed_rrset_key* packed_rrset_copy_alloc( struct ub_packed_rrset_key* key, struct alloc_cache* alloc, time_t now); +/** + * Find RR index in packed rrset + * @param d: packed rrset + * @param rdata: RDATA of RR to find + * @param len: length of rdata + * @param index: pointer to int to store index of found RR + * @return 1 if RR found, 0 otherwise + */ +int +packed_rrset_find_rr(struct packed_rrset_data* d, uint8_t* rdata, size_t len, + size_t* index); + +/** + * Remove RR from packed rrset + * @param old: packed rrset containing RR to remove + * @param index: index of RR to remove + * @param region: region to use for allocation of new packet RR. Malloc used if + * NULL + * @return pointer to newly allocated packed rrset + */ +struct packed_rrset_data* +packed_rrset_remove_rr(struct packed_rrset_data* old, size_t index, + struct regional* region); + #endif /* UTIL_DATA_PACKED_RRSET_H */ diff --git a/util/iana_ports.inc b/util/iana_ports.inc index 5ead47f0f..6873ca9ab 100644 --- a/util/iana_ports.inc +++ b/util/iana_ports.inc @@ -4864,6 +4864,7 @@ 8805, 8807, 8808, +8809, 8873, 8880, 8883, From 83bf2fd2532c1fcaa3e613bef12810e6a3872eaf Mon Sep 17 00:00:00 2001 From: Ralph Dolmans Date: Thu, 25 Apr 2019 16:14:39 +0200 Subject: [PATCH 06/56] - locking issues --- services/rpz.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/services/rpz.c b/services/rpz.c index ff9cf7e41..e7c24fe49 100644 --- a/services/rpz.c +++ b/services/rpz.c @@ -352,7 +352,10 @@ rpz_find_zone(struct rpz* r, uint8_t* qname, size_t qname_len, uint16_t qclass, uint8_t wc[LDNS_MAX_DOMAINLEN]; int exact; struct local_zone* z = NULL; - lock_rw_rdlock(&r->local_zones->lock); + if(wr) + lock_rw_wrlock(&r->local_zones->lock); + else + lock_rw_rdlock(&r->local_zones->lock); z = local_zones_find_le(r->local_zones, qname, qname_len, dname_count_labels(qname), LDNS_RR_CLASS_IN, &exact); @@ -388,7 +391,10 @@ rpz_find_zone(struct rpz* r, uint8_t* qname, size_t qname_len, uint16_t qclass, memmove(wc+2, ce, ce_len); lock_rw_unlock(&z->lock); - lock_rw_rdlock(&r->local_zones->lock); + if(wr) + lock_rw_wrlock(&r->local_zones->lock); + else + lock_rw_rdlock(&r->local_zones->lock); z = local_zones_find_le(r->local_zones, wc, ce_len+2, ce_labs+1, qclass, &exact); if(!z || !exact) { @@ -466,6 +472,7 @@ rpz_remove_rr(struct rpz* r, size_t aznamelen, uint8_t* dname, enum rpz_action a; int delete_zone = 1; + /* TODO, use for logging */ (void)rr; (void)rr_len; @@ -480,6 +487,7 @@ rpz_remove_rr(struct rpz* r, size_t aznamelen, uint8_t* dname, z = rpz_find_zone(r, policydname, policydnamelen, rr_class, 1 /* only exact */, 1 /* wr lock */); if(!z) { + /* TODO, not for SOA, NS, DNSSEC related RR types */ verbose(VERB_ALGO, "RPZ: cannot remove RR from IXFR, " "RPZ domain not found"); free(policydname); @@ -543,6 +551,7 @@ rpz_apply_qname_trigger(struct auth_zones* az, struct module_env* env, edns, repinfo, buf, temp, dname_count_labels(qinfo->qname), &ld, z->type, -1, NULL, 0, NULL, 0)) { rpz_inform_print(z, qinfo, repinfo); + lock_rw_unlock(&z->lock); return !qinfo->local_alias; } From 8dac8c00cefbef8b30c0351d06e33a918d4e88b8 Mon Sep 17 00:00:00 2001 From: Ralph Dolmans Date: Thu, 25 Apr 2019 19:02:17 +0200 Subject: [PATCH 07/56] - Don't attempt an RPZ delete for unsupported actions --- services/rpz.c | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/services/rpz.c b/services/rpz.c index e7c24fe49..b479bed0b 100644 --- a/services/rpz.c +++ b/services/rpz.c @@ -292,8 +292,6 @@ rpz_insert_qname_trigger(struct rpz* r, uint8_t* dname, size_t dnamelen, return 0; } if(a == RPZ_LOCAL_DATA_ACTION) { - /* insert data. TODO synth wildcard cname target on - * lookup */ rrstr = sldns_wire2str_rr(rr, rr_len); /* TODO non region alloc so rrs can be free after IXFR deletion? * */ @@ -483,11 +481,10 @@ rpz_remove_rr(struct rpz* r, size_t aznamelen, uint8_t* dname, return; } t = rpz_dname_to_trigger(policydname); - if(t == RPZ_QNAME_TRIGGER) { + if(a != RPZ_INVALID_ACTION && t != RPZ_QNAME_TRIGGER) { z = rpz_find_zone(r, policydname, policydnamelen, rr_class, 1 /* only exact */, 1 /* wr lock */); if(!z) { - /* TODO, not for SOA, NS, DNSSEC related RR types */ verbose(VERB_ALGO, "RPZ: cannot remove RR from IXFR, " "RPZ domain not found"); free(policydname); @@ -501,11 +498,6 @@ rpz_remove_rr(struct rpz* r, size_t aznamelen, uint8_t* dname, local_zones_del_zone(r->local_zones, z); } } - else { - verbose(VERB_ALGO, "RPZ: skipping unusupported trigger: %s " - "while removing RPZ RRs", - rpz_trigger_to_string(t)); - } free(policydname); } From a7f68865e4622c39f85e2a62796341122f941d9c Mon Sep 17 00:00:00 2001 From: Ralph Dolmans Date: Thu, 25 Apr 2019 20:00:56 +0200 Subject: [PATCH 08/56] - Make IXFR deletion more robust --- services/authzone.c | 2 +- services/localzone.h | 4 +++- services/rpz.c | 56 ++++++++++++++++++++++++++++++-------------- services/rpz.h | 4 +--- 4 files changed, 44 insertions(+), 22 deletions(-) diff --git a/services/authzone.c b/services/authzone.c index 04f1c7d5a..a408166e5 100644 --- a/services/authzone.c +++ b/services/authzone.c @@ -1248,7 +1248,7 @@ az_remove_rr(struct auth_zone* z, uint8_t* rr, size_t rr_len, } if(z->rpz) { rpz_remove_rr(z->rpz, z->namelen, dname, dname_len, rr_type, - rr_class, rdata, rdatalen, rr, rr_len); + rr_class, rdata, rdatalen); } return 1; } diff --git a/services/localzone.h b/services/localzone.h index d8dfa0145..e8c493f63 100644 --- a/services/localzone.h +++ b/services/localzone.h @@ -95,7 +95,9 @@ enum localzone_type { /** answer with noerror/nodata, even when there is local data */ local_zone_always_nodata, /** answer not from the view, but global or no-answer */ - local_zone_noview + local_zone_noview, + /** Invalid type, cannot be used to generate answer */ + local_zone_invalid }; /** diff --git a/services/rpz.c b/services/rpz.c index b479bed0b..ab482e5a6 100644 --- a/services/rpz.c +++ b/services/rpz.c @@ -167,6 +167,37 @@ rpz_rr_to_action(uint16_t rr_type, uint8_t* rdatawl, size_t rdatalen) return RPZ_LOCAL_DATA_ACTION; } +static enum localzone_type +rpz_action_to_localzone_type(enum rpz_action a) +{ + switch(a) { + case RPZ_NXDOMAIN_ACTION: return local_zone_always_nxdomain; + case RPZ_NODATA_ACTION: return local_zone_always_nodata; + case RPZ_DROP_ACTION: return local_zone_deny; + case RPZ_PASSTHRU_ACTION: return local_zone_always_transparent; + case RPZ_LOCAL_DATA_ACTION: return local_zone_redirect; + case RPZ_INVALID_ACTION: + case RPZ_TCP_ONLY_ACTION: + default: + return local_zone_invalid; + } +} + +static enum rpz_action +localzone_type_to_rpz_action(enum localzone_type lzt) +{ + switch(lzt) { + case local_zone_always_nxdomain: return RPZ_NXDOMAIN_ACTION; + case local_zone_always_nodata: return RPZ_NODATA_ACTION; + case local_zone_deny: return RPZ_DROP_ACTION; + case local_zone_always_transparent: return RPZ_PASSTHRU_ACTION; + case local_zone_redirect: return RPZ_LOCAL_DATA_ACTION; + case local_zone_invalid: + default: + return RPZ_INVALID_ACTION; + } +} + /** * Get RPZ trigger for dname * @param dname: dname containing RPZ trigger @@ -254,17 +285,7 @@ rpz_insert_qname_trigger(struct rpz* r, uint8_t* dname, size_t dnamelen, int dnamelabs = dname_count_labels(dname); char* rrstr; - if(a == RPZ_NXDOMAIN_ACTION) - tp = local_zone_always_nxdomain; - else if(a == RPZ_NODATA_ACTION) - tp = local_zone_always_nodata; - else if(a == RPZ_DROP_ACTION) - tp = local_zone_deny; - else if(a == RPZ_PASSTHRU_ACTION) - tp = local_zone_always_transparent; - else if(a == RPZ_LOCAL_DATA_ACTION) - tp = local_zone_redirect; - else { + if(a == RPZ_TCP_ONLY_ACTION || a == RPZ_INVALID_ACTION) { verbose(VERB_ALGO, "RPZ: skipping unusupported action: %s", rpz_action_to_string(a)); return 0; @@ -283,6 +304,7 @@ rpz_insert_qname_trigger(struct rpz* r, uint8_t* dname, size_t dnamelen, return 0; } if(!z) { + tp = rpz_action_to_localzone_type(a); z = local_zones_add_zone(r->local_zones, dname, dnamelen, dnamelabs, rrclass, tp); } @@ -460,7 +482,7 @@ rpz_data_delete_rr(struct local_zone* z, uint8_t* policydname, void rpz_remove_rr(struct rpz* r, size_t aznamelen, uint8_t* dname, size_t dnamelen, uint16_t rr_type, uint16_t rr_class, uint8_t* rdatawl, - size_t rdatalen, uint8_t* rr, size_t rr_len) + size_t rdatalen) { struct local_zone* z; size_t policydnamelen; @@ -470,10 +492,6 @@ rpz_remove_rr(struct rpz* r, size_t aznamelen, uint8_t* dname, enum rpz_action a; int delete_zone = 1; - /* TODO, use for logging */ - (void)rr; - (void)rr_len; - a = rpz_rr_to_action(rr_type, rdatawl, rdatalen); if(!(policydnamelen = strip_dname_origin(dname, dnamelen, aznamelen, policydname))) { @@ -481,7 +499,7 @@ rpz_remove_rr(struct rpz* r, size_t aznamelen, uint8_t* dname, return; } t = rpz_dname_to_trigger(policydname); - if(a != RPZ_INVALID_ACTION && t != RPZ_QNAME_TRIGGER) { + if(a != RPZ_INVALID_ACTION && t == RPZ_QNAME_TRIGGER) { z = rpz_find_zone(r, policydname, policydnamelen, rr_class, 1 /* only exact */, 1 /* wr lock */); if(!z) { @@ -493,6 +511,10 @@ rpz_remove_rr(struct rpz* r, size_t aznamelen, uint8_t* dname, if(a == RPZ_LOCAL_DATA_ACTION) delete_zone = rpz_data_delete_rr(z, policydname, policydnamelen, rr_type, rdatawl, rdatalen); + else if(a != localzone_type_to_rpz_action(z->type)) { + free(policydname); + return; + } lock_rw_unlock(&z->lock); if(delete_zone) { local_zones_del_zone(r->local_zones, z); diff --git a/services/rpz.h b/services/rpz.h index a63189329..2d880d69d 100644 --- a/services/rpz.h +++ b/services/rpz.h @@ -117,12 +117,10 @@ void rpz_insert_rr(struct rpz* r, size_t aznamelen, uint8_t* dname, * @param rr_class: RR class of the RR * @param rdatawl: rdata of the RR, prepended with the rdata size * @param rdatalen: length if the RR, including the prepended rdata size - * @param rr: the complete RR, for logging purposes - * @param rr_len: the length of the complete RR */ void rpz_remove_rr(struct rpz* r, size_t aznamelen, uint8_t* dname, size_t dnamelen, uint16_t rr_type, uint16_t rr_class, uint8_t* rdatawl, - size_t rdatalen, uint8_t* rr, size_t rr_len); + size_t rdatalen); /** * Walk over the RPZ zones to find and apply a QNAME trigger policy. From b0b69321f9f1fee76014d76aee747c6922f1b1dd Mon Sep 17 00:00:00 2001 From: Ralph Dolmans Date: Thu, 16 May 2019 22:30:42 +0200 Subject: [PATCH 09/56] - Added RPZ action overrides - Added RPZ policy apply logging --- Makefile.in | 7 +- services/localzone.c | 1 + services/rpz.c | 188 +- services/rpz.h | 35 +- util/config_file.h | 8 +- util/configlexer.c | 4353 +++++++++++++++++++++--------------------- util/configlexer.lex | 3 + util/configparser.c | 2326 +++++++++++----------- util/configparser.h | 10 +- util/configparser.y | 45 +- 10 files changed, 3648 insertions(+), 3328 deletions(-) diff --git a/Makefile.in b/Makefile.in index e2f5b4dd6..c727ef399 100644 --- a/Makefile.in +++ b/Makefile.in @@ -636,8 +636,9 @@ depend: # Dependencies dns.lo dns.o: $(srcdir)/services/cache/dns.c config.h $(srcdir)/iterator/iter_delegpt.h $(srcdir)/util/log.h \ - $(srcdir)/validator/val_nsec.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h \ - $(srcdir)/util/locks.h $(srcdir)/validator/val_utils.h $(srcdir)/sldns/pkthdr.h $(srcdir)/services/cache/dns.h \ + $(srcdir)/iterator/iter_utils.h $(srcdir)/iterator/iter_resptype.h $(srcdir)/validator/val_nsec.h \ + $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \ + $(srcdir)/validator/val_utils.h $(srcdir)/sldns/pkthdr.h $(srcdir)/services/cache/dns.h \ $(srcdir)/util/data/msgreply.h $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h \ $(srcdir)/util/data/dname.h $(srcdir)/util/module.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/rrdef.h \ $(srcdir)/util/net_help.h $(srcdir)/util/regional.h $(srcdir)/util/config_file.h $(srcdir)/sldns/sbuffer.h @@ -790,7 +791,7 @@ rpz.lo rpz.o: $(srcdir)/services/rpz.c config.h $(srcdir)/services/rpz.h $(srcdi $(srcdir)/sldns/rrdef.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h $(srcdir)/util/config_file.h \ $(srcdir)/services/authzone.h $(srcdir)/services/mesh.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ $(srcdir)/services/modstack.h $(srcdir)/sldns/wire2str.h \ - $(srcdir)/util/data/dname.h $(srcdir)/util/net_help.h + $(srcdir)/sldns/str2wire.h $(srcdir)/util/data/dname.h $(srcdir)/util/net_help.h $(srcdir)/util/regional.h outbound_list.lo outbound_list.o: $(srcdir)/services/outbound_list.c config.h \ $(srcdir)/services/outbound_list.h $(srcdir)/services/outside_network.h $(srcdir)/util/rbtree.h \ $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ diff --git a/services/localzone.c b/services/localzone.c index fda2b31eb..5034de149 100644 --- a/services/localzone.c +++ b/services/localzone.c @@ -1686,6 +1686,7 @@ const char* local_zone_type2str(enum localzone_type t) case local_zone_always_nxdomain: return "always_nxdomain"; case local_zone_always_nodata: return "always_nodata"; case local_zone_noview: return "noview"; + case local_zone_invalid: return "invalid"; } return "badtyped"; } diff --git a/services/rpz.c b/services/rpz.c index ab482e5a6..5db7a1502 100644 --- a/services/rpz.c +++ b/services/rpz.c @@ -43,11 +43,13 @@ #include "services/rpz.h" #include "util/config_file.h" #include "sldns/wire2str.h" +#include "sldns/str2wire.h" #include "util/data/dname.h" #include "util/net_help.h" #include "util/log.h" #include "util/data/dname.h" #include "util/locks.h" +#include "util/regional.h" /** string for RPZ action enum */ static const char* @@ -61,10 +63,33 @@ rpz_action_to_string(enum rpz_action a) case RPZ_TCP_ONLY_ACTION: return "TCP ONLY ACTION"; case RPZ_INVALID_ACTION: return "INVALID ACTION"; case RPZ_LOCAL_DATA_ACTION: return "LOCAL DATA ACTION"; + case RPZ_DISABLED_ACTION: return "DISABLED ACTION"; + case RPZ_CNAME_OVERRIDE_ACTION: return "CNAME OVERRIDE ACTION"; + case RPZ_NO_OVERRIDE_ACTION: return "NO OVERRIDE ACTION"; } return "UNKNOWN RPZ ACTION"; } +static enum rpz_action +rpz_config_to_action(char* a) +{ + if(strcmp(a, "nxdomain") == 0) + return RPZ_NXDOMAIN_ACTION; + else if(strcmp(a, "nodata") == 0) + return RPZ_NODATA_ACTION; + else if(strcmp(a, "passthru") == 0) + return RPZ_PASSTHRU_ACTION; + else if(strcmp(a, "drop") == 0) + return RPZ_DROP_ACTION; + else if(strcmp(a, "tcp_only") == 0) + return RPZ_TCP_ONLY_ACTION; + else if(strcmp(a, "cname") == 0) + return RPZ_CNAME_OVERRIDE_ACTION; + else if(strcmp(a, "disabled") == 0) + return RPZ_DISABLED_ACTION; + return RPZ_INVALID_ACTION; +} + /** string for RPZ trigger enum */ static const char* rpz_trigger_to_string(enum rpz_trigger r) @@ -175,7 +200,9 @@ rpz_action_to_localzone_type(enum rpz_action a) case RPZ_NODATA_ACTION: return local_zone_always_nodata; case RPZ_DROP_ACTION: return local_zone_deny; case RPZ_PASSTHRU_ACTION: return local_zone_always_transparent; - case RPZ_LOCAL_DATA_ACTION: return local_zone_redirect; + case RPZ_LOCAL_DATA_ACTION: + case RPZ_CNAME_OVERRIDE_ACTION: + return local_zone_redirect; case RPZ_INVALID_ACTION: case RPZ_TCP_ONLY_ACTION: default: @@ -230,6 +257,7 @@ void rpz_delete(struct rpz* r) if(!r) return; local_zones_delete(r->local_zones); + regional_destroy(r->region); free(r->taglist); free(r); } @@ -245,6 +273,51 @@ rpz_clear_lz(struct rpz* r) return 1; } +/** new rrset containing CNAME override, does not yet contain a dname */ +static struct ub_packed_rrset_key* +new_cname_override(struct regional* region, uint8_t* ct, size_t ctlen) +{ + struct ub_packed_rrset_key* rrset; + struct packed_rrset_data* pd; + uint16_t rdlength = htons(ctlen); + rrset = (struct ub_packed_rrset_key*)regional_alloc_zero(region, + sizeof(*rrset)); + if(!rrset) { + log_err("out of memory"); + return NULL; + } + rrset->entry.key = rrset; + pd = (struct packed_rrset_data*)regional_alloc_zero(region, sizeof(*pd)); + if(!pd) { + log_err("out of memory"); + return NULL; + } + pd->trust = rrset_trust_prim_noglue; + pd->security = sec_status_insecure; + + pd->count = 1; + pd->rr_len = regional_alloc_zero(region, sizeof(*pd->rr_len)); + pd->rr_ttl = regional_alloc_zero(region, sizeof(*pd->rr_ttl)); + pd->rr_data = regional_alloc_zero(region, sizeof(*pd->rr_data)); + if(!pd->rr_len || !pd->rr_ttl || !pd->rr_data) { + log_err("out of memory"); + return NULL; + } + pd->rr_len[0] = ctlen+2; + pd->rr_ttl[0] = 3600; /* TODO, what should this be? */ + pd->rr_data[0] = regional_alloc_zero(region, 2 /* rdlength */ + ctlen); + if(!pd->rr_data[0]) { + log_err("out of memory"); + return NULL; + } + memcpy(pd->rr_data[0], &rdlength, 2); + memcpy(pd->rr_data[0]+2, ct, ctlen); + + rrset->entry.data = pd; + rrset->rk.type = htons(LDNS_RR_TYPE_CNAME); + rrset->rk.rrset_class = htons(LDNS_RR_CLASS_IN); + return rrset; +} struct rpz* rpz_create(struct config_auth* p) { @@ -252,12 +325,53 @@ rpz_create(struct config_auth* p) if(!r) return 0; + r->region = regional_create_custom(sizeof(struct regional)); + if(!r->region) { + free(r); + return 0; + } + if(!(r->local_zones = local_zones_create())){ free(r); return 0; } r->taglist = memdup(p->rpz_taglist, p->rpz_taglistlen); r->taglistlen = p->rpz_taglistlen; + if(p->rpz_action_override) { + r->action_override = rpz_config_to_action(p->rpz_action_override); + free(p->rpz_action_override); + p->rpz_action_override = NULL; + } + else + r->action_override = RPZ_NO_OVERRIDE_ACTION; + + if(r->action_override == RPZ_CNAME_OVERRIDE_ACTION) { + uint8_t nm[LDNS_MAX_DOMAINLEN+1]; + size_t nmlen = sizeof(nm); + + if(!p->rpz_cname) { + log_err("RPZ override with cname action found, but not " + "rpz-cname-override configured"); + free(r); + return 0; + } + + if(sldns_str2wire_dname_buf(p->rpz_cname, nm, &nmlen) != 0) { + log_err("cannot parse RPZ cname override: %s", + p->rpz_cname); + free(p->rpz_cname); + free(r); + return 0; + } + free(p->rpz_cname); + p->rpz_cname = NULL; + r->cname_override = new_cname_override(r->region, nm, nmlen); + if(!r->cname_override) { + free(r); + return 0; + } + } + r->log = p->rpz_log; return r; } @@ -286,7 +400,7 @@ rpz_insert_qname_trigger(struct rpz* r, uint8_t* dname, size_t dnamelen, char* rrstr; if(a == RPZ_TCP_ONLY_ACTION || a == RPZ_INVALID_ACTION) { - verbose(VERB_ALGO, "RPZ: skipping unusupported action: %s", + verbose(VERB_ALGO, "RPZ: skipping unsupported action: %s", rpz_action_to_string(a)); return 0; } @@ -527,16 +641,16 @@ rpz_remove_rr(struct rpz* r, size_t aznamelen, uint8_t* dname, * lz_inform_print(). */ static void -rpz_inform_print(struct local_zone* z, struct query_info* qinfo, +log_rpz_apply(uint8_t* dname, enum rpz_action a, struct query_info* qinfo, struct comm_reply* repinfo) { char ip[128], txt[512]; - char zname[LDNS_MAX_DOMAINLEN+1]; + char dnamestr[LDNS_MAX_DOMAINLEN+1]; uint16_t port = ntohs(((struct sockaddr_in*)&repinfo->addr)->sin_port); - dname_str(z->name, zname); + dname_str(dname, dnamestr); addr_to_str(&repinfo->addr, repinfo->addrlen, ip, sizeof(ip)); - snprintf(txt, sizeof(txt), "RPZ applied %s %s %s@%u", zname, - local_zone_type2str(z->type), ip, (unsigned)port); + snprintf(txt, sizeof(txt), "RPZ applied %s %s %s@%u", dnamestr, + rpz_action_to_string(a), ip, (unsigned)port); log_nametypeclass(0, txt, qinfo->qname, qinfo->qtype, qinfo->qclass); } @@ -548,30 +662,76 @@ rpz_apply_qname_trigger(struct auth_zones* az, struct module_env* env, { struct rpz* r; int ret; + enum localzone_type lzt; struct local_zone* z = NULL; struct local_data* ld = NULL; lock_rw_rdlock(&az->rpz_lock); - for(r = az->rpz_first; r && !z; r = r->next) { + for(r = az->rpz_first; r; r = r->next) { if(!r->taglist || taglist_intersect(r->taglist, - r->taglistlen, taglist, taglen)) + r->taglistlen, taglist, taglen)) { z = rpz_find_zone(r, qinfo->qname, qinfo->qname_len, qinfo->qclass, 0, 0); + if(z && r->action_override == RPZ_DISABLED_ACTION) { + if(r->log) + log_rpz_apply(z->name, + r->action_override, + qinfo,repinfo); + lock_rw_unlock(&z->lock); + z = NULL; + } + if(z) + break; + } } lock_rw_unlock(&az->rpz_lock); if(!z) return 0; - if(z->type == local_zone_redirect && local_data_answer(z, env, qinfo, + + if(r->action_override == RPZ_NO_OVERRIDE_ACTION) + lzt = z->type; + else + lzt = rpz_action_to_localzone_type(r->action_override); + + if(r->action_override == RPZ_CNAME_OVERRIDE_ACTION) { + qinfo->local_alias = + regional_alloc_zero(temp, sizeof(struct local_rrset)); + if(!qinfo->local_alias) { + lock_rw_unlock(&z->lock); + return 0; /* out of memory */ + } + qinfo->local_alias->rrset = + regional_alloc_init(temp, r->cname_override, + sizeof(*r->cname_override)); + if(!qinfo->local_alias->rrset) { + lock_rw_unlock(&z->lock); + return 0; /* out of memory */ + } + qinfo->local_alias->rrset->rk.dname = qinfo->qname; + qinfo->local_alias->rrset->rk.dname_len = qinfo->qname_len; + if(r->log) + log_rpz_apply(z->name, RPZ_CNAME_OVERRIDE_ACTION, + qinfo, repinfo); + lock_rw_unlock(&z->lock); + return 0; + } + + if(lzt == local_zone_redirect && local_data_answer(z, env, qinfo, edns, repinfo, buf, temp, dname_count_labels(qinfo->qname), - &ld, z->type, -1, NULL, 0, NULL, 0)) { - rpz_inform_print(z, qinfo, repinfo); + &ld, lzt, -1, NULL, 0, NULL, 0)) { + if(r->log) + log_rpz_apply(z->name, + localzone_type_to_rpz_action(lzt), qinfo, + repinfo); lock_rw_unlock(&z->lock); return !qinfo->local_alias; } ret = local_zones_zone_answer(z, env, qinfo, edns, repinfo, buf, temp, - 0 /* no local data used */, z->type); - rpz_inform_print(z, qinfo, repinfo); + 0 /* no local data used */, lzt); + if(r->log) + log_rpz_apply(z->name, localzone_type_to_rpz_action(lzt), + qinfo, repinfo); lock_rw_unlock(&z->lock); return ret; diff --git a/services/rpz.h b/services/rpz.h index 2d880d69d..8d9e5b376 100644 --- a/services/rpz.h +++ b/services/rpz.h @@ -48,20 +48,6 @@ #include "services/authzone.h" #include "sldns/sbuffer.h" -/** - * RPZ containing policies. Pointed to from corresponding authz-one. Part of a - * linked list to keep configuration order. Iterating or changing the linked - * list requires the rpz_lock from struct auth_zones. - */ -struct rpz { - struct local_zones* local_zones; - uint8_t* taglist; - size_t taglistlen; - struct rpz* next; - struct rpz* prev; - /* tags */ -}; - /** * RPZ triggers, only the QNAME trigger is currently supported in Unbound. */ @@ -87,6 +73,27 @@ enum rpz_action { "rpz-" in target, SOA, NS, DNAME and DNSSEC-related records. */ RPZ_LOCAL_DATA_ACTION, /* anything else */ + /* RPZ override actions */ + RPZ_DISABLED_ACTION, /* RPZ action disabled using override */ + RPZ_NO_OVERRIDE_ACTION, /* RPZ action no override*/ + RPZ_CNAME_OVERRIDE_ACTION, /* RPZ CNAME action override*/ +}; + +/** + * RPZ containing policies. Pointed to from corresponding authz-one. Part of a + * linked list to keep configuration order. Iterating or changing the linked + * list requires the rpz_lock from struct auth_zones. + */ +struct rpz { + struct local_zones* local_zones; + uint8_t* taglist; + size_t taglistlen; + enum rpz_action action_override; + struct ub_packed_rrset_key* cname_override; + int log; + struct rpz* next; + struct rpz* prev; + struct regional* region; }; /** diff --git a/util/config_file.h b/util/config_file.h index f8aa25ccf..603178541 100644 --- a/util/config_file.h +++ b/util/config_file.h @@ -637,7 +637,13 @@ struct config_auth { uint8_t* rpz_taglist; /** length of the taglist (in bytes) */ size_t rpz_taglistlen; - + /** Override RPZ action for this zone, regardless of zone content */ + char* rpz_action_override; + /** Log when this RPZ policy is applied */ + int rpz_log; + /** Always reply with this CNAME target if the cname override action is + * used */ + char* rpz_cname; }; /** diff --git a/util/configlexer.c b/util/configlexer.c index 12abf841c..c6b5260a8 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 293 -#define YY_END_OF_BUFFER 294 +#define YY_NUM_RULES 296 +#define YY_END_OF_BUFFER 297 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info @@ -363,328 +363,332 @@ struct yy_trans_info flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static const flex_int16_t yy_accept[2911] = +static const flex_int16_t yy_accept[2947] = { 0, - 1, 1, 275, 275, 279, 279, 283, 283, 287, 287, - 1, 1, 294, 291, 1, 273, 273, 292, 2, 292, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 275, 276, 276, 277, 292, 279, 280, 280, - 281, 292, 286, 283, 284, 284, 285, 292, 287, 288, - 288, 289, 292, 290, 274, 2, 278, 292, 290, 291, - 0, 1, 2, 2, 2, 2, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 1, 1, 278, 278, 282, 282, 286, 286, 290, 290, + 1, 1, 297, 294, 1, 276, 276, 295, 2, 295, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 278, 279, 279, 280, 295, 282, 283, 283, + 284, 295, 289, 286, 287, 287, 288, 295, 290, 291, + 291, 292, 295, 293, 277, 2, 281, 295, 293, 294, + 0, 1, 2, 2, 2, 2, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 275, 0, 279, 0, 286, 0, 283, 287, 0, 290, - 0, 2, 2, 290, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 278, 0, 282, 0, 289, 0, 286, 290, 0, 293, + 0, 2, 2, 293, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 290, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 293, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 112, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 116, 291, 291, 291, 291, 291, - 291, 291, 290, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 112, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 119, 294, 294, 294, 294, + 294, 294, 294, 293, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 96, 291, 291, 291, 291, - 291, 291, 8, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 113, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 121, 291, - 290, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 96, 294, 294, 294, + 294, 294, 294, 8, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 113, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 124, 294, 293, 294, 294, 294, 294, 294, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 290, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 54, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 216, 291, 14, 15, 291, 18, 17, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 293, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 54, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 219, 294, 14, + 15, 294, 18, 17, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 115, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 200, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 3, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 118, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 203, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 3, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 291, 291, 291, 291, 291, 291, 291, 290, 291, 291, - 291, 291, 291, 291, 291, 266, 291, 291, 265, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 282, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 57, 291, 240, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 293, 294, 294, + 294, 294, 294, 294, 294, 269, 294, 294, 268, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 285, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 57, 294, 243, - 291, 291, 291, 58, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 189, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 20, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 140, 291, 291, 282, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 94, 291, 291, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 58, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 116, 294, + 294, 294, 294, 294, 294, 294, 294, 192, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 20, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 143, 294, 294, 285, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 291, 291, 291, 291, 291, 248, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 161, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 139, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 93, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 94, 294, 294, 294, 294, 294, 294, 294, 251, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 164, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 142, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 93, 294, 294, 294, 294, - 291, 291, 291, 291, 291, 291, 31, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 32, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 55, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 114, 291, 291, 291, 291, 291, 111, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 56, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 162, 291, 291, 291, 291, 291, 291, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 31, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 32, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 55, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 117, 294, 294, 294, 294, + 294, 111, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 56, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 45, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 231, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 49, 291, 50, 291, - 291, 291, 291, 291, 97, 291, 98, 291, 291, 291, + 294, 294, 294, 294, 294, 294, 294, 294, 165, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 45, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 234, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 291, 95, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 7, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 209, 291, - 291, 291, 291, 142, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 294, 294, 294, 49, 294, 50, 294, 294, 294, 294, + 294, 97, 294, 98, 294, 294, 294, 294, 95, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 7, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 212, 294, 294, 294, 294, + 145, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 291, 291, 291, 46, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 181, 291, 180, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 16, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 59, - 291, 291, 291, 291, 291, 291, 291, 291, 188, 291, - 291, 291, 291, 291, 291, 100, 291, 99, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 172, 291, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 46, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 184, 294, 183, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 16, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 59, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 191, 294, 294, + 294, 294, 294, 294, 100, 294, 99, 294, 294, 294, - 291, 291, 291, 291, 291, 291, 291, 122, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 78, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 82, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 53, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 175, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 175, 294, 294, + 294, 294, 294, 294, 294, 294, 125, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 78, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 82, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 176, 291, 291, 291, 242, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 6, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 246, 291, - 291, 291, 267, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 41, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 43, 291, 291, 291, - 291, 291, 291, 291, 291, 168, 291, 291, 291, 117, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 53, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 178, 179, + 294, 294, 294, 245, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 6, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 249, 294, 294, + 294, 294, 294, 270, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 41, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 43, 294, 294, - 193, 291, 169, 291, 291, 291, 206, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 44, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 119, 105, 291, 106, 291, 291, 291, - 104, 291, 291, 291, 291, 291, 291, 291, 291, 137, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 230, 291, 291, 291, 291, 291, 291, 291, 291, - 170, 291, 291, 291, 291, 291, 173, 291, 179, 291, - 291, 291, 291, 291, 205, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 92, + 294, 294, 294, 294, 294, 294, 171, 294, 294, 294, + 120, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 196, 294, 172, 294, 294, 294, 209, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 44, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 122, 105, 294, 106, 294, 294, + 294, 104, 294, 294, 294, 294, 294, 294, 294, 294, + 140, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 233, 294, 294, 294, 294, 294, 294, 294, + 294, 173, 294, 294, 294, 294, 294, 176, 294, 182, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 51, 291, 291, 291, 25, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 19, 291, 291, 291, 291, - 291, 291, 26, 35, 291, 147, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 67, 69, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 250, 291, 291, 291, 217, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 294, 294, 294, 294, 294, 208, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 92, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 51, 294, 294, 294, 25, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 19, 294, + 294, 294, 294, 294, 294, 26, 35, 294, 150, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 67, 69, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 291, 291, 291, 107, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 136, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 261, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 141, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 199, 291, 291, 291, 291, 291, 291, 291, - 291, 270, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 158, 291, 291, 291, 291, 291, 291, 291, 291, - 101, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 294, 294, 294, 253, 294, 294, 294, 220, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 107, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 139, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 264, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 144, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 202, 294, 294, 294, 294, + 294, 294, 294, 294, 273, 294, 294, 294, 294, 294, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 153, 291, 163, 291, 291, 291, 291, 291, 125, 291, - 291, 291, 291, 291, 88, 291, 291, 291, 291, 191, - 291, 291, 291, 291, 291, 291, 207, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 222, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 118, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 157, 291, 291, 291, 291, 291, 70, 71, 291, 291, - 291, 291, 291, 52, 291, 291, 291, 291, 291, 77, - 164, 291, 182, 291, 210, 291, 291, 174, 243, 291, + 294, 294, 294, 294, 294, 294, 161, 294, 294, 294, + 294, 294, 294, 294, 294, 101, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 156, 294, 166, 294, 294, + 294, 294, 294, 128, 294, 294, 294, 294, 294, 88, + 294, 294, 294, 294, 194, 294, 294, 294, 294, 294, + 294, 210, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 225, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 121, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 160, 294, 294, 294, 294, - 291, 291, 291, 291, 63, 291, 166, 291, 291, 291, - 291, 291, 9, 291, 291, 291, 91, 291, 291, 291, - 291, 235, 291, 291, 291, 190, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 156, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 143, 291, 249, 291, 291, 291, 291, 221, - 291, 291, 291, 291, 291, 291, 291, 291, 201, 291, + 294, 70, 71, 294, 294, 294, 294, 294, 52, 294, + 294, 294, 294, 294, 77, 167, 294, 185, 294, 213, + 294, 294, 177, 246, 294, 294, 294, 294, 294, 63, + 294, 169, 294, 294, 294, 294, 294, 9, 294, 294, + 294, 91, 294, 294, 294, 294, 238, 294, 294, 294, + 193, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 159, 294, - 291, 291, 291, 241, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 264, 291, - 165, 291, 291, 291, 291, 291, 291, 291, 62, 64, - 291, 291, 291, 291, 291, 291, 291, 90, 291, 291, - 291, 291, 233, 291, 291, 291, 245, 291, 291, 291, - 291, 291, 291, 291, 195, 33, 27, 29, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 34, 291, 28, - 30, 291, 291, 291, 291, 291, 291, 291, 291, 87, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 146, + 294, 252, 294, 294, 294, 294, 224, 294, 294, 294, + 294, 294, 294, 294, 294, 204, 294, 294, 294, 294, + 244, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 267, 294, 168, 294, 294, + 294, 294, 294, 294, 294, 62, 64, 294, 294, 294, + 294, 294, 294, 294, 90, 294, 294, 294, 294, 236, + 294, 294, 294, 248, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 198, 33, 27, 29, 294, 294, 294, - 291, 291, 291, 291, 291, 291, 291, 197, 194, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 61, 291, 291, 120, 291, 108, 291, - 291, 291, 291, 291, 291, 291, 291, 138, 13, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 259, 291, - 262, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 12, 291, 291, 21, 291, 291, 291, 239, 291, - 291, 291, 247, 291, 65, 291, 203, 291, 291, 196, - 291, 291, 60, 291, 291, 291, 291, 22, 291, 42, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 294, 294, 294, 294, 294, 294, 34, 294, 28, 30, + 294, 294, 294, 294, 294, 294, 294, 294, 87, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 200, 197, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 61, 294, 294, 123, 294, 108, 294, 294, + 294, 294, 294, 294, 294, 294, 141, 13, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 262, 294, 265, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 12, 294, 294, 21, 294, 294, 294, 242, 294, 294, - 291, 291, 152, 151, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 198, 192, 291, 208, 291, 291, 251, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 72, 291, 291, 291, 234, 291, - 291, 291, 291, 178, 291, 291, 291, 291, 202, 291, - 291, 291, 291, 291, 291, 291, 291, 268, 269, 149, - 66, 291, 291, 159, 291, 291, 102, 103, 291, 291, - 291, 291, 144, 291, 146, 291, 183, 291, 291, 291, - 291, 150, 291, 291, 211, 291, 291, 291, 291, 291, + 294, 250, 294, 294, 294, 65, 294, 206, 294, 294, + 199, 294, 294, 60, 294, 294, 294, 294, 22, 294, + 42, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 155, 154, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 201, 195, 294, 211, 294, 294, + 254, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 72, 294, 294, 294, 237, + 294, 294, 294, 294, 181, 294, 294, 294, 294, 205, + 294, 294, 294, 294, 294, 294, 294, 294, 271, 272, - 291, 291, 127, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 218, 291, 291, 291, 23, 291, - 244, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 184, 291, 291, 232, 291, 263, 291, 177, - 291, 291, 291, 291, 47, 291, 291, 291, 291, 4, - 291, 291, 126, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 214, - 36, 37, 291, 291, 291, 291, 291, 291, 291, 252, - 291, 291, 291, 291, 291, 291, 220, 291, 291, 291, - 187, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 152, 294, 294, 66, 294, 294, 162, 294, 294, 102, + 103, 294, 294, 294, 294, 147, 294, 149, 294, 186, + 294, 294, 294, 294, 153, 294, 294, 214, 294, 294, + 294, 294, 294, 294, 294, 130, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 221, 294, 294, + 294, 23, 294, 247, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 187, 294, 294, 235, 294, + 266, 294, 180, 294, 294, 294, 294, 47, 294, 294, + 294, 294, 4, 294, 294, 294, 115, 129, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 75, 291, 48, 238, 291, 215, 291, 291, 291, 291, - 11, 291, 291, 291, 291, 291, 291, 291, 185, 79, - 291, 39, 291, 291, 291, 291, 291, 291, 291, 291, - 155, 291, 291, 291, 291, 291, 129, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 219, 123, 291, 291, - 109, 110, 291, 291, 291, 81, 85, 80, 291, 73, - 291, 291, 291, 291, 291, 10, 291, 291, 291, 236, - 291, 291, 272, 38, 291, 291, 291, 291, 291, 154, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 86, 84, + 294, 294, 294, 294, 217, 36, 37, 294, 294, 294, + 294, 294, 294, 294, 255, 294, 294, 294, 294, 294, + 294, 223, 294, 294, 294, 190, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 75, 294, 48, 241, 294, + 218, 294, 294, 294, 294, 11, 294, 294, 294, 294, + 294, 114, 294, 294, 188, 79, 294, 39, 294, 294, + 294, 294, 294, 294, 294, 294, 158, 294, 294, 294, + 294, 294, 132, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 222, 126, 294, 294, 109, 110, 294, 294, + 294, 81, 85, 80, 294, 73, 294, 294, 294, 294, - 291, 74, 260, 291, 291, 291, 291, 291, 291, 291, - 171, 291, 291, 291, 186, 291, 291, 291, 291, 291, - 291, 291, 291, 145, 68, 291, 291, 291, 291, 291, - 253, 291, 291, 291, 291, 291, 291, 291, 124, 291, - 83, 130, 131, 134, 135, 132, 133, 76, 291, 237, - 291, 291, 148, 291, 291, 291, 291, 291, 213, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 160, 40, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 89, 291, 212, 291, + 294, 10, 294, 294, 294, 239, 294, 294, 275, 38, + 294, 294, 294, 294, 294, 157, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 86, 84, 294, 74, 263, 294, + 294, 294, 294, 294, 294, 294, 174, 294, 294, 294, + 189, 294, 294, 294, 294, 294, 294, 294, 294, 148, + 68, 294, 294, 294, 294, 294, 256, 294, 294, 294, + 294, 294, 294, 294, 127, 294, 83, 133, 134, 137, + 138, 135, 136, 76, 294, 240, 294, 294, 151, 294, + 294, 294, 294, 294, 216, 294, 294, 294, 294, 294, - 229, 257, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 5, 291, 204, 291, 291, 258, 291, 291, - 291, 291, 291, 291, 291, 291, 24, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 128, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 167, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 254, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 271, 291, - 291, 225, 291, 291, 291, 291, 291, 255, 291, 291, - 291, 291, 291, 291, 256, 291, 291, 291, 223, 291, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 163, + 40, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 89, 294, 215, 294, 232, 260, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 5, 294, + 207, 294, 294, 261, 294, 294, 294, 294, 294, 294, + 294, 294, 24, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 131, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 170, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 257, 294, 294, 294, - 226, 227, 291, 291, 291, 291, 291, 224, 228, 0 + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 274, 294, 294, 228, 294, 294, + 294, 294, 294, 258, 294, 294, 294, 294, 294, 294, + 259, 294, 294, 294, 226, 294, 229, 230, 294, 294, + 294, 294, 294, 227, 231, 0 } ; static const YY_CHAR yy_ec[256] = @@ -727,15 +731,15 @@ static const YY_CHAR yy_meta[41] = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } ; -static const flex_int16_t yy_base[2925] = +static const flex_int16_t yy_base[2961] = { 0, 0, 0, 38, 41, 44, 46, 59, 65, 71, 77, - 90, 112, 2129, 1866, 81, 5681, 5681, 5681, 96, 52, + 90, 112, 2076, 2017, 81, 5748, 5748, 5748, 96, 52, 106, 63, 107, 111, 70, 128, 130, 133, 57, 88, 76, 135, 141, 117, 148, 145, 160, 164, 185, 177, - 189, 152, 1744, 5681, 5681, 5681, 107, 1174, 5681, 5681, - 5681, 165, 1056, 933, 5681, 5681, 5681, 211, 839, 5681, - 5681, 5681, 180, 829, 5681, 217, 5681, 221, 168, 761, + 189, 152, 1847, 5748, 5748, 5748, 107, 1709, 5748, 5748, + 5748, 165, 1601, 1344, 5748, 5748, 5748, 211, 1232, 5748, + 5748, 5748, 180, 1179, 5748, 217, 5748, 221, 168, 1072, 225, 231, 0, 237, 0, 0, 226, 231, 85, 180, 114, 238, 239, 156, 234, 206, 240, 232, 200, 132, 253, 244, 245, 248, 256, 257, 264, 271, 249, 277, @@ -744,7 +748,7 @@ static const flex_int16_t yy_base[2925] = 301, 284, 302, 305, 310, 312, 311, 315, 313, 319, 322, 318, 324, 327, 326, 193, 221, 334, 329, 340, 342, 325, 348, 349, 350, 353, 354, 357, 363, 359, - 699, 379, 670, 381, 596, 388, 450, 365, 392, 278, + 889, 379, 836, 381, 801, 388, 450, 365, 392, 278, 396, 400, 0, 377, 392, 401, 367, 394, 396, 402, 261, 398, 399, 403, 405, 406, 418, 407, 416, 422, 426, 430, 427, 434, 424, 437, 439, 440, 429, 451, @@ -752,634 +756,640 @@ static const flex_int16_t yy_base[2925] = 465, 473, 484, 479, 488, 492, 475, 493, 496, 491, 503, 499, 506, 507, 502, 498, 508, 510, 513, 515, - 516, 518, 517, 520, 521, 523, 525, 527, 528, 532, - 534, 535, 546, 541, 548, 543, 544, 551, 547, 554, - 558, 562, 555, 570, 565, 567, 568, 572, 579, 582, - 583, 575, 584, 578, 580, 586, 587, 588, 591, 601, - 606, 603, 604, 611, 610, 612, 613, 615, 616, 592, - 627, 619, 618, 632, 637, 623, 635, 638, 628, 630, - 640, 642, 647, 654, 649, 657, 650, 659, 658, 660, - 664, 671, 655, 666, 667, 668, 672, 674, 676, 678, - 680, 685, 683, 687, 691, 695, 693, 692, 705, 697, + 516, 518, 517, 520, 521, 523, 525, 533, 535, 526, + 534, 528, 547, 542, 549, 546, 548, 552, 551, 555, + 563, 564, 556, 565, 567, 568, 571, 574, 583, 584, + 585, 569, 576, 586, 580, 588, 589, 590, 591, 600, + 603, 602, 605, 612, 593, 611, 613, 615, 616, 617, + 626, 618, 628, 622, 635, 619, 633, 638, 627, 636, + 641, 645, 646, 653, 640, 656, 657, 658, 660, 661, + 663, 671, 666, 667, 648, 670, 672, 674, 675, 676, + 678, 687, 679, 689, 682, 690, 695, 691, 704, 699, - 700, 702, 708, 709, 715, 719, 730, 721, 734, 726, - 727, 735, 736, 739, 747, 740, 748, 749, 750, 751, - 753, 756, 716, 5681, 755, 759, 766, 767, 769, 776, - 768, 783, 778, 757, 790, 789, 791, 792, 814, 765, - 777, 793, 794, 797, 5681, 800, 806, 838, 807, 812, - 824, 810, 825, 826, 827, 834, 828, 855, 832, 831, - 848, 865, 844, 836, 860, 861, 863, 864, 872, 870, - 873, 874, 875, 883, 878, 881, 882, 894, 884, 885, - 890, 888, 896, 895, 905, 907, 900, 910, 911, 912, - 914, 913, 917, 915, 932, 929, 937, 918, 934, 941, + 700, 701, 707, 702, 714, 717, 730, 720, 731, 725, + 711, 735, 737, 739, 736, 747, 740, 749, 750, 751, + 743, 752, 715, 756, 5748, 753, 760, 764, 761, 769, + 772, 771, 776, 778, 781, 789, 791, 788, 796, 818, + 784, 786, 798, 800, 794, 5748, 803, 802, 842, 810, + 811, 829, 824, 812, 827, 832, 826, 831, 849, 814, + 848, 838, 859, 851, 855, 860, 862, 864, 866, 871, + 872, 867, 870, 876, 884, 879, 883, 886, 895, 885, + 894, 896, 888, 898, 897, 903, 908, 906, 911, 913, + 914, 916, 915, 919, 931, 917, 933, 940, 920, 938, - 942, 923, 948, 944, 946, 950, 952, 960, 955, 956, - 958, 961, 962, 964, 968, 969, 970, 972, 974, 978, - 975, 985, 976, 983, 990, 5681, 992, 994, 995, 996, - 997, 998, 5681, 1000, 999, 1002, 1007, 1012, 1014, 1006, - 1009, 1022, 1031, 1024, 1026, 1034, 1013, 1032, 1035, 1038, - 1036, 1041, 1039, 1042, 1045, 1043, 1050, 1064, 5681, 1048, - 1051, 1049, 1055, 1060, 1067, 1077, 1058, 1087, 1069, 1079, - 1095, 1075, 1093, 1081, 1094, 1097, 1099, 1101, 1103, 1105, - 1106, 1107, 1108, 1110, 1111, 1109, 1112, 1113, 5681, 1116, - 1129, 1137, 1122, 1123, 1132, 1135, 1139, 1140, 1141, 1142, + 923, 943, 939, 945, 947, 949, 950, 951, 961, 953, + 956, 958, 962, 964, 965, 968, 970, 973, 972, 975, + 977, 976, 982, 987, 985, 993, 5748, 995, 986, 989, + 999, 998, 1000, 5748, 1001, 1002, 1003, 1010, 1005, 1015, + 1011, 1013, 1020, 1023, 1024, 1025, 1035, 1030, 1033, 1043, + 1032, 1034, 1041, 1044, 1045, 1042, 1051, 1048, 1052, 1054, + 1056, 1074, 5748, 1057, 1055, 1058, 1059, 1060, 1067, 1086, + 1064, 1084, 1081, 1083, 1102, 1085, 1103, 1087, 1098, 1104, + 1099, 1108, 1111, 1113, 1112, 1114, 1115, 1116, 1119, 1117, + 1120, 1123, 5748, 1122, 1130, 1138, 1139, 1140, 1141, 1142, - 1144, 1148, 1153, 1163, 1147, 1166, 1150, 1161, 1165, 1167, - 1168, 1169, 1171, 1170, 1184, 1175, 1177, 1192, 1195, 1194, - 1197, 1204, 1181, 1200, 1201, 1199, 1205, 1207, 1209, 1185, - 1211, 1212, 1221, 1219, 1217, 1220, 1222, 1232, 1224, 1227, - 1228, 1233, 1237, 1234, 1239, 1243, 1245, 1246, 1253, 1249, - 1254, 1256, 1250, 1262, 1263, 1264, 1266, 1136, 1270, 1267, - 1269, 1274, 1276, 1271, 1275, 1277, 1281, 1294, 1292, 1296, - 1297, 1301, 1287, 1295, 1308, 1307, 1310, 1311, 1313, 1321, - 1303, 1317, 1319, 1328, 1323, 1324, 1326, 1329, 1340, 1325, - 1336, 1349, 1278, 1327, 1344, 1335, 1351, 1345, 1350, 1355, + 1143, 1144, 1145, 1146, 1148, 1153, 1164, 1171, 1154, 1173, + 1157, 1172, 1168, 1170, 1147, 1174, 1178, 1176, 1189, 1180, + 1191, 1196, 1204, 1200, 1202, 1209, 1184, 1207, 1181, 1206, + 1208, 1211, 1212, 1213, 1215, 1218, 1226, 1219, 1221, 1224, + 1227, 1237, 1228, 1230, 1238, 1235, 1242, 1240, 1249, 1251, + 1245, 1248, 1261, 1257, 1262, 1260, 1267, 1268, 1269, 1273, + 1252, 1275, 1277, 1276, 1278, 1280, 1283, 1284, 1285, 1287, + 1288, 1297, 1293, 1302, 1304, 1306, 1294, 1295, 1314, 1310, + 1319, 1317, 1316, 1324, 1322, 1325, 1326, 1333, 1328, 1330, + 1329, 1331, 1336, 1341, 1340, 1350, 1342, 1352, 1361, 1362, - 1356, 1357, 1364, 1361, 1360, 1359, 1366, 1362, 1367, 1370, - 1372, 1384, 1371, 1376, 1379, 1383, 1389, 1390, 1391, 1392, - 1394, 1395, 1397, 1399, 1401, 1396, 1406, 1404, 1416, 1403, - 1409, 1420, 1422, 1425, 1424, 1427, 1434, 1423, 1435, 1436, - 1426, 1437, 1438, 1443, 1444, 1449, 1451, 1452, 1454, 1456, - 1455, 1458, 1459, 1463, 1464, 5681, 1466, 1477, 1467, 1474, - 1472, 1475, 1479, 1486, 1481, 1483, 1488, 1482, 1491, 1493, - 5681, 1494, 5681, 5681, 1496, 5681, 5681, 1492, 1504, 1503, - 1495, 1516, 1520, 1514, 1508, 1518, 1522, 1529, 1543, 1528, - 1527, 1531, 1534, 1535, 1537, 1539, 1540, 1551, 1552, 1558, + 1349, 1364, 1353, 1365, 1359, 1368, 1369, 1356, 1370, 1379, + 1376, 1382, 1378, 1381, 1371, 1383, 1385, 1384, 1394, 1392, + 1395, 1398, 1400, 1401, 1403, 1404, 1408, 1409, 1410, 1411, + 1412, 1414, 1415, 1422, 1416, 1431, 1423, 1424, 1432, 1435, + 1441, 1437, 1447, 1448, 1438, 1450, 1440, 1451, 1454, 1455, + 1459, 1458, 1462, 1460, 1468, 1469, 1471, 1470, 1473, 1478, + 1476, 1480, 5748, 1481, 1488, 1483, 1486, 1492, 1493, 1494, + 1501, 1497, 1499, 1496, 1498, 1502, 1508, 5748, 1509, 5748, + 5748, 1511, 5748, 5748, 1507, 1515, 1510, 1525, 1531, 1533, + 1535, 1519, 1536, 1538, 1545, 1559, 1542, 1541, 1549, 1540, - 1554, 1560, 1567, 1556, 1564, 1570, 1571, 1573, 1572, 1575, - 1578, 1581, 1584, 1579, 1577, 1582, 1530, 1594, 1587, 1602, - 5681, 1598, 1606, 1611, 1607, 1614, 1610, 1609, 1616, 1617, - 1618, 1621, 1620, 1619, 1623, 1628, 1631, 1635, 1630, 5681, - 1632, 1633, 1640, 1634, 1644, 1646, 1648, 1650, 1652, 1654, - 1655, 1656, 1657, 1660, 5681, 1588, 1659, 1661, 1667, 1664, - 1666, 1668, 1670, 1673, 1678, 1676, 1679, 1677, 1684, 1696, - 1680, 1694, 1691, 1697, 1698, 1700, 1702, 1709, 1701, 1713, - 1705, 1712, 1715, 1716, 1717, 1719, 1724, 1723, 1732, 1727, - 1734, 1746, 1729, 1730, 1731, 1745, 1741, 1752, 1748, 1754, + 1548, 1544, 1557, 1552, 1554, 1555, 1568, 1572, 1574, 1580, + 1576, 1570, 1581, 1583, 1586, 1584, 1590, 1587, 1593, 1594, + 1596, 1597, 1598, 1606, 1599, 1611, 1618, 5748, 1608, 1621, + 1622, 1619, 1629, 1625, 1626, 1627, 1630, 1631, 1634, 1633, + 1636, 1642, 1637, 1643, 1650, 1645, 5748, 1647, 1648, 1653, + 1652, 1659, 1660, 1654, 1663, 1666, 1667, 1670, 1671, 1674, + 1673, 1676, 1677, 1679, 5748, 1681, 1687, 1678, 1691, 1684, + 1693, 1694, 1695, 1698, 1697, 1700, 1703, 1702, 1708, 1710, + 1712, 1716, 1711, 1715, 1719, 1722, 1726, 1733, 1724, 1734, + 1735, 1737, 1738, 1739, 1740, 1742, 1747, 1746, 1754, 1749, - 1755, 1756, 1764, 1759, 1761, 1763, 1765, 1767, 1768, 1771, - 1776, 1772, 1778, 1780, 1774, 5681, 1782, 1786, 5681, 1784, - 1787, 1809, 1788, 1791, 1790, 1797, 1792, 1799, 1801, 1807, - 1810, 1813, 1829, 1819, 1822, 1824, 1831, 1832, 1834, 1835, - 1838, 1841, 1849, 1850, 1854, 1845, 1857, 1842, 1855, 1858, - 1877, 1859, 1860, 1861, 1867, 1862, 1868, 1872, 1870, 1869, - 1881, 1887, 1889, 5681, 1898, 1899, 1882, 1894, 1910, 1890, - 1905, 1802, 1906, 1909, 1914, 1911, 1912, 1913, 1916, 1919, - 1917, 1922, 1921, 1923, 1929, 1926, 1944, 5681, 1939, 5681, - 1927, 1928, 1940, 1942, 1945, 1946, 1947, 1949, 1953, 1951, + 1756, 1757, 1763, 1752, 1753, 1770, 1764, 1776, 1772, 1778, + 1768, 1774, 1788, 1779, 1784, 1780, 1789, 1791, 1792, 1793, + 1795, 1800, 1801, 1803, 1804, 5748, 1802, 1805, 5748, 1809, + 1806, 1830, 1810, 1812, 1813, 1815, 1817, 1820, 1825, 1818, + 1831, 1834, 1844, 1845, 1849, 1837, 1850, 1856, 1854, 1857, + 1858, 1860, 1869, 1870, 1874, 1867, 1877, 1875, 1876, 1880, + 1899, 1879, 1881, 1882, 1889, 1883, 1885, 1894, 1892, 1893, + 1903, 1888, 1904, 5748, 1915, 1911, 1910, 1917, 1926, 1916, + 1923, 1924, 1927, 1928, 1937, 1932, 1934, 1935, 1938, 1943, + 1939, 1948, 1945, 1946, 1950, 1947, 1967, 5748, 1949, 5748, - 1964, 1968, 1957, 5681, 1950, 1973, 1974, 1976, 1969, 1971, - 1977, 1980, 1981, 1988, 1984, 1992, 1987, 1985, 1989, 1997, - 1998, 2000, 2003, 1999, 5681, 2001, 2009, 2010, 2018, 2020, - 2013, 2015, 2021, 2026, 2017, 2023, 2028, 2029, 2030, 2037, - 2040, 2036, 2039, 2045, 2052, 5681, 2038, 2047, 2055, 2053, - 2060, 2054, 2057, 2051, 2061, 2062, 2068, 2070, 2071, 2072, - 2080, 2081, 2077, 2073, 2085, 2076, 2082, 2086, 2093, 2087, - 2090, 2094, 2097, 5681, 2100, 2102, 124, 2103, 2106, 2104, - 2107, 2109, 2111, 2108, 2120, 2129, 2125, 2124, 2127, 2131, - 2133, 2134, 2135, 2136, 2137, 2138, 2140, 5681, 2142, 2143, + 1952, 1951, 1962, 1963, 1968, 1969, 1970, 1973, 1974, 1976, + 1982, 1993, 1988, 5748, 1980, 1995, 1998, 1997, 1990, 1972, + 1991, 2003, 2005, 2012, 2007, 2014, 2010, 2013, 5748, 2019, + 2011, 2021, 2023, 2015, 2024, 2030, 2033, 5748, 2034, 2036, + 2037, 2044, 2042, 2039, 2046, 2047, 2053, 2049, 2051, 2055, + 2056, 2058, 2063, 2066, 2068, 2069, 2072, 2082, 5748, 2061, + 2065, 2084, 2081, 2088, 2080, 2083, 2090, 2091, 2093, 2095, + 2097, 2098, 2099, 2107, 2109, 2102, 2100, 2112, 2104, 2113, + 2114, 2120, 2119, 2121, 2122, 2124, 5748, 2125, 2129, 124, + 2131, 2132, 2134, 2133, 2139, 2136, 2140, 2156, 2157, 2153, - 2146, 2148, 2152, 2149, 2151, 5681, 2160, 2166, 2168, 2162, - 2174, 2154, 2173, 2178, 2179, 2180, 2181, 2184, 5681, 2187, - 2188, 2189, 2190, 2191, 2195, 2197, 2200, 2201, 2202, 2205, - 2204, 2207, 2208, 2209, 2211, 2212, 2218, 2222, 2213, 2223, - 2225, 5681, 2235, 2226, 2231, 2227, 2236, 2238, 2252, 2242, - 2244, 2249, 2253, 2263, 2256, 2248, 2265, 2266, 2255, 2264, - 2280, 2270, 2278, 2284, 2277, 2287, 2289, 2279, 2290, 2291, - 2281, 2297, 2293, 2295, 2309, 2310, 2306, 2312, 2305, 2317, - 2322, 2315, 5681, 2324, 2327, 2329, 2330, 2337, 2332, 2333, - 2334, 2335, 2340, 2341, 2343, 2349, 2345, 2352, 2346, 2353, + 2152, 2159, 2155, 2161, 2162, 2163, 2165, 2166, 2168, 2170, + 5748, 2143, 2171, 2172, 2176, 2174, 2177, 2182, 5748, 2192, + 2181, 2188, 2194, 2199, 2200, 2203, 2204, 2205, 2206, 2210, + 2207, 5748, 2214, 2215, 2217, 2216, 2223, 2225, 2230, 2219, + 2227, 2231, 2232, 2233, 2238, 2235, 2237, 2240, 2241, 2243, + 2251, 2252, 2253, 2246, 5748, 2260, 2257, 2262, 2258, 2263, + 2264, 2275, 2265, 2267, 2277, 2279, 2291, 2282, 2283, 2293, + 2285, 2289, 2288, 2307, 2298, 2306, 2308, 2302, 2312, 2315, + 2305, 2316, 2317, 2319, 2322, 2321, 2324, 2336, 2337, 2328, + 2340, 2329, 2350, 2348, 2341, 5748, 2353, 2354, 2355, 2356, - 2356, 2357, 2365, 2358, 2368, 2370, 5681, 2374, 2375, 2369, - 2376, 2379, 2382, 2384, 2386, 2389, 2390, 2391, 2393, 2395, - 2396, 2397, 2398, 2400, 2404, 2401, 5681, 2405, 2407, 2413, - 2416, 2420, 2424, 2425, 2426, 2431, 2414, 2433, 2434, 2410, - 5681, 2443, 2444, 2435, 2448, 2445, 2446, 2447, 2450, 2451, - 5681, 2452, 2453, 2461, 2462, 2457, 5681, 2466, 2459, 2464, - 2468, 2467, 2469, 2474, 2470, 2477, 2478, 2483, 2486, 2482, - 2489, 5681, 2491, 2498, 2493, 2495, 2499, 2500, 2501, 2503, - 2512, 2506, 2509, 2519, 2522, 2524, 2515, 2525, 2527, 2528, - 2529, 2531, 2530, 5681, 2532, 2537, 2538, 2539, 2544, 2541, + 2364, 2359, 2361, 2360, 2362, 2367, 2368, 2370, 2378, 2375, + 2376, 2377, 2379, 2380, 2385, 2388, 2391, 2395, 2392, 2398, + 2399, 5748, 2402, 2404, 2400, 2406, 2411, 2408, 2417, 2420, + 2418, 2412, 2414, 2425, 2422, 2426, 2427, 2431, 2430, 2432, + 2437, 5748, 2438, 2443, 2440, 2444, 2446, 2448, 2451, 2459, + 2452, 2450, 2461, 2462, 2463, 5748, 2470, 2471, 2472, 2479, + 2466, 2474, 2478, 2481, 2482, 5748, 2483, 2484, 2491, 2492, + 2488, 5748, 2496, 2495, 2497, 2487, 2498, 2500, 2504, 2501, + 2506, 2508, 2511, 2514, 2510, 2519, 5748, 2520, 2528, 2523, + 2525, 2529, 2530, 2532, 2535, 2538, 2540, 2545, 2554, 2551, - 2542, 2549, 2552, 2553, 2554, 2558, 2560, 2557, 2562, 2563, - 2566, 2565, 2569, 2579, 2574, 2581, 2577, 2585, 2588, 2592, - 2593, 2595, 5681, 2600, 2597, 2602, 2591, 2603, 2604, 2605, - 2606, 2608, 2610, 2615, 2613, 2614, 2622, 2630, 2623, 2625, - 2631, 2632, 2635, 2634, 2636, 2637, 2638, 2646, 2642, 2641, - 2654, 2645, 2652, 2659, 2649, 2660, 2661, 2662, 2663, 2665, - 2669, 2670, 2672, 2666, 2674, 2682, 2685, 2683, 2688, 2690, - 2692, 5681, 2695, 2676, 2693, 2699, 2702, 2704, 2705, 2708, - 2714, 2706, 2707, 2716, 2723, 2720, 5681, 2721, 5681, 2722, - 2724, 2727, 2737, 2730, 5681, 2733, 5681, 2735, 2741, 2742, + 2549, 2552, 2536, 2556, 2558, 2557, 2561, 2564, 5748, 2565, + 2567, 2568, 2569, 2572, 2573, 2577, 2587, 2578, 2580, 2583, + 2588, 2589, 2582, 2593, 2595, 2600, 2592, 2606, 2607, 2594, + 2611, 2612, 2613, 2620, 2622, 2623, 2625, 5748, 2628, 2630, + 2629, 2619, 2621, 2631, 2632, 2640, 2636, 2642, 2643, 2644, + 2645, 2653, 2655, 2651, 2659, 2657, 2661, 2663, 2662, 2665, + 2666, 2669, 2674, 2670, 2673, 2683, 2678, 2679, 2688, 2681, + 2689, 2690, 2691, 2692, 2693, 2696, 2694, 2698, 2703, 2705, + 2702, 2712, 2713, 2718, 2717, 2719, 5748, 2723, 2720, 2722, + 2724, 2732, 2729, 2739, 2736, 2741, 2743, 2744, 2737, 2745, - 2744, 5681, 2745, 2734, 2746, 2751, 2747, 2749, 2753, 2756, - 2757, 2763, 2759, 2765, 2766, 2767, 2769, 2774, 2773, 2775, - 2782, 2784, 2776, 2785, 2779, 2787, 2789, 2794, 2795, 5681, - 2803, 2797, 2804, 2805, 2806, 2807, 2808, 2811, 2799, 2810, - 2812, 2817, 2814, 2826, 2831, 2829, 2827, 2839, 5681, 2835, - 2838, 2840, 2842, 5681, 2841, 2843, 2844, 2850, 2852, 2853, - 2854, 2855, 2856, 2860, 2861, 2862, 2870, 2873, 2874, 2877, - 2863, 2876, 2890, 2886, 2892, 2894, 2902, 2898, 2887, 2889, - 2885, 2897, 2905, 2912, 2915, 2911, 2919, 2899, 2918, 2921, - 2924, 2910, 2914, 2925, 2926, 2927, 2930, 2931, 2938, 2933, + 2749, 2756, 2753, 5748, 2754, 5748, 2755, 2759, 2760, 2768, + 2758, 5748, 2766, 5748, 2767, 2774, 2771, 2775, 5748, 2777, + 2779, 2781, 2782, 2785, 2784, 2788, 2789, 2792, 2795, 2786, + 2793, 2797, 2801, 2798, 2803, 2809, 2810, 2816, 2813, 2811, + 2818, 2820, 2823, 2824, 2826, 2827, 5748, 2830, 2833, 2835, + 2836, 2838, 2837, 2839, 2841, 2843, 2844, 2848, 2853, 2847, + 2859, 2860, 2872, 2850, 2874, 5748, 2869, 2876, 2854, 2871, + 5748, 2879, 2878, 2880, 2885, 2882, 2887, 2888, 2889, 2890, + 2894, 2893, 2898, 2914, 2895, 2909, 2907, 2897, 2917, 2921, + 2919, 2910, 2925, 2929, 2927, 2928, 2930, 2931, 2933, 2934, - 2935, 2936, 2937, 5681, 2947, 2939, 2943, 2951, 2949, 2954, - 2956, 2957, 2960, 2961, 2963, 2962, 2965, 5681, 2967, 5681, - 2966, 2983, 2973, 2978, 2984, 2979, 2985, 2990, 2992, 2993, - 2994, 2995, 2998, 3002, 3001, 3003, 3004, 3006, 3014, 3020, - 3007, 3011, 3021, 3009, 3025, 3026, 5681, 3028, 3029, 3030, - 3032, 3033, 3035, 3036, 3034, 3044, 3045, 3049, 3056, 5681, - 3054, 3058, 3057, 3060, 3069, 3065, 3077, 3072, 5681, 3061, - 3073, 3080, 3076, 3079, 3090, 5681, 3083, 5681, 3085, 3086, - 3092, 3093, 3094, 3095, 3096, 3097, 3099, 3109, 3112, 3101, - 3113, 3116, 3117, 3115, 3124, 3119, 3121, 3122, 5681, 3126, + 2942, 2944, 2935, 2945, 2943, 2946, 2955, 2947, 2949, 2956, + 2957, 2958, 2959, 2962, 2965, 2969, 2960, 2961, 2968, 2964, + 5748, 2971, 2975, 2979, 2986, 2983, 2988, 2989, 2990, 2991, + 2992, 2994, 2997, 2996, 5748, 2999, 5748, 2993, 3017, 3004, + 3011, 3015, 3005, 3021, 3026, 3016, 3022, 3028, 3030, 3031, + 3032, 3034, 3036, 3037, 3038, 3045, 3052, 3040, 3044, 3053, + 3042, 3054, 3061, 5748, 3058, 3059, 3062, 3064, 3065, 3067, + 3075, 3069, 3066, 3068, 3079, 3088, 5748, 3085, 3086, 3091, + 3098, 3093, 3095, 3102, 3100, 3109, 3104, 5748, 3106, 3107, + 3114, 3112, 3115, 3122, 5748, 3119, 5748, 3117, 3120, 3123, - 3123, 3127, 3130, 3139, 3142, 3129, 3132, 5681, 3145, 3149, - 3146, 3150, 3151, 3153, 3154, 3156, 3157, 3159, 3158, 3161, - 3172, 3164, 3167, 3173, 3175, 3180, 3187, 5681, 3184, 3182, - 3194, 3193, 3178, 3195, 3196, 3198, 3200, 3201, 3202, 3203, - 3204, 3205, 3206, 3207, 3214, 3209, 3210, 3216, 3230, 3211, - 3226, 3227, 3228, 3231, 3235, 3237, 3240, 3242, 3234, 3247, - 3252, 3244, 3250, 3256, 3257, 3264, 3259, 5681, 3266, 3263, - 3273, 3268, 3269, 3275, 3276, 3284, 3282, 3270, 3279, 3286, - 3283, 5681, 3298, 3288, 3285, 3289, 3291, 3310, 3305, 3307, - 3308, 3312, 2875, 3315, 3313, 3309, 3317, 3320, 3321, 5681, + 3128, 3129, 3130, 3132, 3133, 3135, 3144, 3151, 3140, 3141, + 3148, 3149, 3150, 3158, 3154, 3155, 3157, 5748, 3160, 3162, + 3165, 3167, 3173, 3174, 3177, 3164, 5748, 3170, 3181, 3183, + 3184, 3188, 3190, 3191, 3192, 3194, 3197, 3193, 3195, 3204, + 3201, 3200, 3208, 3211, 3216, 3221, 5748, 3217, 3223, 3230, + 3226, 3227, 3229, 3233, 3228, 3234, 3235, 3237, 3238, 3240, + 3242, 3244, 3241, 3251, 3245, 3247, 3258, 3267, 3250, 3263, + 3252, 3264, 3270, 3269, 3274, 3277, 3279, 3266, 3281, 3287, + 3289, 3290, 3292, 3293, 3300, 3295, 5748, 3302, 3299, 3307, + 3303, 3305, 3313, 3314, 3322, 3306, 3304, 3309, 3327, 3323, - 5681, 3323, 3324, 3325, 5681, 3326, 3330, 3338, 3337, 3339, - 3328, 3340, 3344, 3342, 3345, 3348, 3350, 5681, 3352, 3361, - 3356, 3358, 3369, 3370, 3372, 3354, 3373, 3367, 3362, 3377, - 3375, 3379, 3380, 3383, 3391, 3388, 3386, 3390, 5681, 3392, - 3395, 3396, 5681, 3398, 3399, 3407, 3393, 3405, 3415, 3409, - 3422, 3416, 3418, 3423, 3424, 3426, 3427, 3434, 3430, 3431, - 3439, 3440, 3444, 5681, 3443, 3449, 3433, 3451, 3455, 3462, - 3463, 3464, 3459, 3466, 3467, 3474, 5681, 3469, 3472, 3470, - 3473, 3483, 3475, 3484, 3480, 5681, 3487, 3486, 3488, 5681, - 3491, 3489, 3496, 3501, 3502, 3509, 3504, 3506, 3507, 3508, + 5748, 3332, 3330, 3333, 3334, 3336, 3346, 3338, 3337, 3339, + 3342, 3348, 3349, 3352, 3353, 3354, 3359, 3356, 5748, 5748, + 3362, 3363, 3364, 5748, 3368, 3365, 3384, 3367, 3369, 3370, + 3380, 3382, 3371, 3392, 3379, 3383, 5748, 3389, 3401, 3396, + 3400, 3404, 3408, 3410, 3406, 3403, 3413, 3415, 3414, 3417, + 3418, 3419, 3421, 3429, 3424, 3425, 3427, 5748, 3428, 3430, + 3432, 3435, 3438, 5748, 3439, 3442, 3443, 3441, 3456, 3457, + 3451, 3460, 3463, 3464, 3466, 3465, 3468, 3469, 3477, 3472, + 3474, 3476, 3480, 3482, 5748, 3483, 3490, 3473, 3495, 3497, + 3504, 3505, 3508, 3491, 3507, 3509, 3516, 5748, 3511, 3514, - 5681, 3514, 5681, 3512, 3516, 3520, 5681, 3518, 3523, 3524, - 3526, 3527, 3532, 3533, 3540, 3531, 3534, 3541, 3542, 3544, - 3545, 3552, 3549, 5681, 3553, 3555, 3547, 3557, 3560, 3562, - 3564, 3566, 3567, 5681, 5681, 3576, 5681, 3578, 3568, 3570, - 5681, 3572, 3577, 3588, 3579, 3589, 3592, 3598, 3593, 5681, - 3595, 3583, 3599, 3604, 3605, 3606, 3607, 3608, 3609, 3610, - 3611, 5681, 3612, 3615, 3622, 3616, 3623, 3628, 3624, 3633, - 5681, 3636, 3637, 3638, 3640, 3642, 5681, 3646, 5681, 3644, - 3648, 3647, 3650, 3651, 5681, 3658, 3654, 3664, 3661, 3666, - 3665, 3669, 3672, 3673, 3675, 3682, 3678, 3679, 3680, 5681, + 3513, 3515, 3526, 3500, 3530, 3519, 5748, 3527, 3528, 3529, + 5748, 3532, 3536, 3542, 3544, 3533, 3551, 3546, 3549, 3550, + 3548, 5748, 3555, 5748, 3558, 3559, 3562, 5748, 3564, 3565, + 3567, 3569, 3566, 3573, 3574, 3581, 3570, 3582, 3583, 3584, + 3585, 3587, 3594, 3586, 5748, 3595, 3593, 3597, 3598, 3604, + 3602, 3605, 3610, 3608, 5748, 5748, 3617, 5748, 3609, 3618, + 3619, 5748, 3622, 3624, 3629, 3625, 3627, 3630, 3640, 3633, + 5748, 3636, 3631, 3644, 3646, 3647, 3648, 3649, 3650, 3652, + 3654, 3653, 5748, 3656, 3658, 3664, 3657, 3665, 3671, 3677, + 3666, 5748, 3679, 3681, 3673, 3687, 3688, 5748, 3680, 5748, - 3681, 3684, 3686, 3689, 3693, 3694, 3702, 3699, 3701, 3697, - 3707, 3709, 3710, 3715, 3717, 3718, 3720, 3712, 3725, 3723, - 3728, 5681, 3729, 3731, 3734, 5681, 3735, 3737, 3738, 3743, - 3744, 3745, 3749, 3746, 3751, 5681, 3752, 3755, 3750, 3753, - 3754, 3768, 5681, 5681, 3769, 5681, 3772, 3756, 3761, 3771, - 3773, 3774, 3781, 3782, 3785, 3786, 3790, 3787, 3793, 3801, - 3802, 3803, 3804, 3808, 3799, 5681, 5681, 3810, 3811, 3813, - 3815, 3817, 3820, 3821, 3829, 3825, 3827, 3834, 3831, 3841, - 5681, 3838, 3824, 3843, 5681, 3840, 3845, 3846, 3848, 3849, - 3852, 3851, 3856, 3853, 3858, 3859, 3860, 3862, 3861, 3866, + 3690, 3693, 3694, 3696, 3697, 5748, 3699, 3700, 3704, 3705, + 3707, 3709, 3710, 3713, 3717, 3719, 3726, 3722, 3721, 3724, + 5748, 3723, 3729, 3737, 3740, 3730, 3728, 3744, 3746, 3747, + 3750, 3753, 3755, 3756, 3759, 3754, 3764, 3761, 3762, 3768, + 3765, 3778, 3773, 3775, 5748, 3776, 3780, 3784, 5748, 3781, + 3783, 3790, 3792, 3793, 3795, 3796, 3800, 3801, 5748, 3797, + 3798, 3802, 3815, 3818, 3808, 5748, 5748, 3819, 5748, 3821, + 3805, 3824, 3826, 3804, 3831, 3807, 3832, 3834, 3830, 3842, + 3843, 3837, 3853, 3851, 3860, 3855, 3725, 3836, 5748, 5748, + 3862, 3863, 3857, 3868, 3869, 3859, 3865, 3879, 3872, 3874, - 3868, 3872, 3876, 5681, 3877, 3878, 3879, 3882, 3883, 3884, - 3887, 3888, 3889, 5681, 3891, 3893, 3896, 3901, 3895, 3902, - 3911, 3917, 3919, 3913, 3920, 3921, 3923, 3925, 3926, 5681, - 3929, 3927, 3930, 3936, 3938, 3940, 3941, 3943, 3944, 3946, - 3949, 3951, 3953, 3955, 3957, 3958, 3959, 3961, 5681, 3963, - 3966, 3969, 3975, 3972, 3970, 3978, 3982, 3985, 3977, 3979, - 3986, 3992, 5681, 3987, 3989, 3993, 3995, 4001, 3997, 4002, - 4003, 5681, 4010, 4004, 4006, 4011, 4014, 4019, 4021, 4026, - 4015, 5681, 4022, 4027, 4031, 4023, 4029, 4033, 4038, 4037, - 5681, 4039, 4041, 4045, 4053, 4049, 4056, 4052, 4059, 4051, + 3881, 3882, 3890, 5748, 3888, 3876, 3891, 5748, 3885, 3893, + 3886, 3897, 3894, 3900, 3901, 3903, 3904, 3905, 3906, 3907, + 3913, 3915, 3914, 3916, 3921, 3923, 5748, 3924, 3926, 3927, + 3928, 3930, 3931, 3935, 3936, 3937, 5748, 3938, 3941, 3944, + 3942, 3943, 3949, 3959, 3964, 3966, 3952, 3961, 3968, 3970, + 3972, 3973, 5748, 3975, 3976, 3977, 3981, 3984, 3986, 3987, + 3989, 3990, 3992, 3994, 3995, 3999, 4002, 4003, 4004, 4005, + 4007, 5748, 4010, 4012, 4014, 4021, 4016, 4018, 4022, 4027, + 4030, 4023, 4031, 4032, 4036, 5748, 4037, 4038, 4039, 4040, + 4048, 4041, 4049, 4050, 5748, 4053, 4055, 4056, 4045, 4058, - 4055, 4058, 4062, 4065, 4066, 4069, 4067, 4079, 4083, 4080, - 5681, 4072, 5681, 4082, 4085, 4093, 4088, 4090, 5681, 4095, - 4098, 4100, 4094, 4096, 5681, 4101, 4102, 4104, 4103, 5681, - 4117, 4116, 4106, 4122, 4108, 4123, 5681, 4128, 4129, 4125, - 4137, 4139, 4136, 4138, 4140, 4142, 4143, 4144, 4145, 5681, - 4147, 4150, 4149, 4155, 4156, 4158, 4162, 4168, 4159, 5681, - 4164, 4161, 4170, 4171, 4173, 4174, 4175, 4182, 4183, 4179, - 5681, 4184, 4186, 4193, 4188, 4199, 5681, 5681, 4192, 4202, - 4195, 4204, 4207, 5681, 4205, 4216, 4211, 4213, 4215, 5681, - 5681, 4218, 5681, 4214, 5681, 4219, 4220, 5681, 5681, 4221, + 4062, 4066, 4067, 4069, 4070, 4071, 5748, 4073, 4074, 4077, + 4081, 4083, 4084, 4088, 4086, 5748, 4089, 4090, 4087, 4103, + 4098, 4107, 4099, 4108, 4100, 4109, 4111, 4115, 4117, 4118, + 4120, 4116, 4134, 4137, 4132, 5748, 4121, 5748, 4133, 4138, + 4146, 4143, 4135, 5748, 4145, 4147, 4149, 4150, 4151, 5748, + 4154, 4153, 4156, 4158, 5748, 4159, 4167, 4164, 4168, 4174, + 4175, 5748, 4178, 4179, 4181, 4189, 4191, 4188, 4190, 4192, + 4194, 4195, 4196, 4197, 5748, 4199, 4202, 4201, 4207, 4208, + 4210, 4214, 4220, 4110, 5748, 4211, 4213, 4221, 4222, 4223, + 4224, 4226, 4234, 4229, 4225, 5748, 4232, 4237, 4245, 4238, - 4222, 4229, 4235, 4228, 5681, 4238, 5681, 4231, 4241, 4239, - 4243, 4244, 5681, 4245, 4246, 4251, 5681, 4247, 4259, 4252, - 4254, 5681, 4261, 4257, 4262, 5681, 4266, 4272, 4263, 4273, - 4275, 4274, 4279, 4281, 4282, 4284, 4286, 4290, 4292, 4294, - 4295, 4297, 4298, 4303, 4296, 4300, 4305, 4307, 4310, 4311, - 4315, 4317, 4318, 4319, 4320, 4321, 4322, 4332, 4324, 4326, - 4335, 4336, 4328, 4338, 4339, 4340, 4341, 4347, 4350, 4351, - 4353, 5681, 4343, 4349, 4356, 4357, 4362, 4365, 4367, 4374, - 4378, 4380, 5681, 4382, 5681, 4384, 4369, 4375, 4388, 5681, - 4389, 4390, 4391, 4392, 4393, 4394, 4397, 4395, 5681, 4399, + 4247, 5748, 5748, 4240, 4250, 4252, 4253, 4256, 5748, 4258, + 4265, 4260, 4264, 4261, 5748, 5748, 4267, 5748, 4268, 5748, + 4269, 4271, 5748, 5748, 4273, 4274, 4275, 4276, 4285, 5748, + 4289, 5748, 4296, 4291, 4277, 4282, 4294, 5748, 4295, 4297, + 4302, 5748, 4298, 4311, 4303, 4308, 5748, 4313, 4306, 4310, + 5748, 4315, 4318, 4319, 4320, 4322, 4327, 4333, 4326, 4329, + 4330, 4334, 4337, 4342, 4345, 4347, 4348, 4349, 4351, 4352, + 4354, 4357, 4358, 4359, 4361, 4363, 4364, 4366, 4372, 4373, + 4368, 4374, 4375, 4376, 4385, 4378, 4382, 4389, 4386, 4391, + 4392, 4393, 4394, 4397, 4399, 4401, 4404, 4405, 5748, 4403, - 4400, 4401, 4404, 5681, 4411, 4406, 4416, 4417, 4418, 4421, - 4419, 4423, 4424, 4426, 4428, 4430, 4438, 4431, 4433, 4439, - 4442, 4443, 4444, 4446, 4450, 4454, 4455, 4460, 5681, 4456, - 5681, 4461, 4462, 4465, 4466, 4467, 4468, 4471, 5681, 5681, - 4469, 4473, 4479, 4480, 4474, 4483, 4487, 5681, 4484, 4493, - 4501, 4485, 5681, 4494, 4496, 4503, 5681, 4505, 4507, 4504, - 4509, 4510, 4512, 4519, 5681, 5681, 5681, 5681, 4520, 4511, - 4526, 4522, 4527, 4528, 4529, 4531, 4532, 5681, 4542, 5681, - 5681, 4534, 4543, 4536, 4544, 4545, 4546, 4551, 4554, 5681, - 4552, 4556, 4558, 4555, 4569, 4572, 4557, 4573, 4559, 4566, + 4407, 4408, 4413, 4409, 4422, 4425, 4415, 4433, 4434, 5748, + 4436, 5748, 4438, 4424, 4440, 4426, 5748, 4428, 4441, 4443, + 4444, 4446, 4447, 4450, 4452, 5748, 4457, 4449, 4454, 4461, + 5748, 4466, 4470, 4458, 4462, 4472, 4473, 4474, 4477, 4478, + 4481, 4483, 4485, 4493, 4486, 4490, 4489, 4491, 4497, 4498, + 4501, 4507, 4503, 4510, 4514, 5748, 4511, 5748, 4515, 4516, + 4519, 4520, 4521, 4522, 4525, 5748, 5748, 4523, 4529, 4528, + 4533, 4534, 4537, 4541, 5748, 4538, 4546, 4555, 4547, 5748, + 4539, 4549, 4557, 5748, 4551, 4558, 4561, 4571, 4562, 4573, + 4574, 4564, 4578, 5748, 5748, 5748, 5748, 4582, 4566, 4585, - 4580, 4576, 4582, 4575, 4586, 4588, 4593, 5681, 5681, 4585, - 4595, 4596, 4603, 4600, 4601, 4610, 4607, 4608, 4609, 4612, - 4614, 4615, 4616, 5681, 4619, 4623, 5681, 4617, 5681, 4625, - 4631, 4621, 4632, 4633, 4634, 4637, 4635, 5681, 5681, 4640, - 4641, 4646, 4648, 4649, 4651, 4652, 4654, 4650, 5681, 4655, - 5681, 4656, 4658, 4664, 4657, 4672, 4677, 4679, 4675, 4678, - 4680, 5681, 4681, 4683, 5681, 4684, 4687, 4689, 5681, 4691, - 4694, 4698, 5681, 4700, 5681, 4703, 5681, 4695, 4711, 5681, - 4706, 4707, 5681, 4713, 4717, 4718, 4709, 5681, 4714, 5681, - 4719, 4724, 4727, 4730, 4720, 4734, 4725, 4731, 4736, 4743, + 4580, 4586, 4587, 4589, 4591, 4592, 5748, 4595, 5748, 5748, + 4597, 4600, 4601, 4603, 4604, 4606, 4609, 4611, 5748, 4613, + 4616, 4617, 4614, 4624, 4627, 4568, 4630, 4620, 4631, 4639, + 4632, 4640, 4636, 4642, 4644, 4646, 5748, 5748, 4648, 4653, + 4654, 4656, 4658, 4659, 4666, 4665, 4662, 4668, 4670, 4671, + 4673, 4672, 5748, 4675, 4683, 5748, 4676, 5748, 4682, 4689, + 4674, 4690, 4691, 4693, 4695, 4697, 5748, 5748, 4698, 4681, + 4699, 4705, 4707, 4710, 4708, 4712, 4709, 5748, 4714, 5748, + 4713, 4716, 4722, 4715, 4730, 4731, 4738, 4735, 4736, 4737, + 5748, 4739, 4741, 5748, 4743, 4745, 4746, 5748, 4749, 4752, - 4741, 4742, 5681, 5681, 4753, 4744, 4745, 4748, 4751, 4760, - 4755, 4758, 4764, 5681, 5681, 4756, 5681, 4766, 4769, 5681, - 4759, 4770, 4771, 4776, 4775, 4777, 4778, 4783, 4779, 4786, - 4791, 4787, 4796, 4799, 4801, 4803, 4807, 4805, 4809, 4810, - 4811, 4813, 4812, 4815, 5681, 4817, 4820, 4818, 5681, 4825, - 4819, 4828, 4829, 5681, 4839, 4831, 4833, 4841, 5681, 4843, - 4845, 4847, 4846, 4848, 4858, 4849, 4856, 5681, 5681, 5681, - 5681, 4854, 4859, 5681, 4860, 4864, 5681, 5681, 4866, 4870, - 4867, 4874, 5681, 4871, 5681, 4872, 5681, 4873, 4875, 4881, - 4885, 5681, 4884, 4895, 5681, 4898, 4901, 4903, 4904, 4886, + 4756, 5748, 4758, 4760, 4762, 5748, 4766, 5748, 4753, 4769, + 5748, 4770, 4771, 5748, 4775, 4777, 4778, 4779, 5748, 4780, + 5748, 4782, 4784, 4785, 4788, 4789, 4794, 4795, 4791, 4796, + 4803, 4800, 4801, 5748, 5748, 4812, 4807, 4813, 4814, 4815, + 4822, 4817, 4819, 4825, 5748, 5748, 4826, 5748, 4820, 4829, + 5748, 4818, 4835, 4827, 4836, 4837, 4839, 4840, 4847, 4848, + 4849, 4862, 4850, 4852, 4863, 4865, 4870, 4872, 4858, 4875, + 4868, 4853, 4876, 4877, 4878, 5748, 4882, 4883, 4884, 5748, + 4890, 4887, 4892, 4895, 5748, 4904, 4896, 4899, 4901, 5748, + 4893, 4907, 4909, 4912, 4914, 4923, 4915, 4916, 5748, 5748, - 4888, 4905, 5681, 4914, 4911, 4912, 4919, 4909, 4915, 4920, - 4921, 4928, 4923, 4930, 5681, 4924, 4926, 4931, 5681, 4933, - 5681, 4934, 4937, 4938, 4935, 4940, 4945, 4946, 4952, 4949, - 4959, 4953, 5681, 4961, 4963, 5681, 4955, 5681, 4966, 5681, - 4967, 4968, 4969, 4973, 5681, 4971, 4974, 4977, 4979, 5681, - 4980, 4982, 5681, 4986, 4987, 4989, 4993, 4990, 5002, 4995, - 4999, 4997, 5011, 5003, 5004, 5007, 5013, 5015, 5019, 5681, - 5681, 5681, 5014, 5023, 5030, 5029, 5031, 5038, 5033, 5681, - 5035, 5036, 5025, 5045, 5037, 5047, 5681, 5049, 5042, 5050, - 5681, 5053, 5057, 5058, 5060, 5062, 5065, 5069, 5071, 5072, + 5748, 4919, 4927, 5748, 4931, 4918, 5748, 4932, 4933, 5748, + 5748, 4934, 4935, 4920, 4943, 5748, 4938, 5748, 4939, 5748, + 4942, 4946, 4948, 4952, 5748, 4953, 4962, 5748, 4955, 4957, + 4965, 4967, 4968, 4970, 4969, 5748, 4977, 4973, 4975, 4982, + 4972, 4979, 4986, 4983, 4993, 4984, 4995, 5748, 4985, 4992, + 4996, 5748, 4998, 5748, 4999, 5002, 5006, 5005, 5003, 5008, + 5013, 5017, 5011, 5024, 5020, 5748, 5026, 5029, 5748, 5030, + 5748, 5032, 5748, 5018, 5033, 5036, 5035, 5748, 5042, 5038, + 5043, 5044, 5748, 5045, 5047, 5054, 5748, 5748, 5050, 5048, + 5057, 5060, 5062, 5065, 5067, 5068, 5069, 5079, 5071, 5074, - 5681, 5076, 5681, 5681, 5066, 5681, 5073, 5078, 5079, 5080, - 5681, 5083, 5084, 5086, 5087, 5089, 5090, 5092, 5681, 5681, - 5094, 5681, 5103, 5099, 5091, 5113, 5108, 5110, 5112, 5114, - 5681, 5115, 5116, 5117, 5121, 5123, 5681, 5124, 5125, 5126, - 5127, 5130, 5134, 5137, 5128, 5138, 5681, 5681, 5131, 5139, - 5681, 5681, 5141, 5157, 5158, 5681, 5681, 5681, 5160, 5681, - 5164, 5168, 5172, 5176, 5167, 5681, 5178, 5161, 5175, 5681, - 5180, 5182, 5681, 5681, 5183, 5184, 5186, 5187, 5188, 5681, - 5192, 5193, 5194, 5198, 5200, 5201, 5204, 5205, 5212, 5213, - 5215, 5218, 5220, 5219, 5221, 5223, 5228, 5225, 5681, 5681, + 5072, 5076, 5080, 5087, 5748, 5748, 5748, 5081, 5085, 5097, + 5095, 5096, 5104, 5100, 5748, 5101, 5102, 5103, 5114, 5109, + 5111, 5748, 5113, 5115, 5116, 5748, 5120, 5124, 5128, 5117, + 5130, 5137, 5139, 5141, 5142, 5748, 5144, 5748, 5748, 5129, + 5748, 5132, 5145, 5146, 5149, 5748, 5152, 5155, 5153, 5156, + 5158, 5748, 5159, 5161, 5748, 5748, 5163, 5748, 5171, 5172, + 5160, 5181, 5164, 5179, 5183, 5180, 5748, 5184, 5186, 5188, + 5189, 5190, 5748, 5191, 5192, 5194, 5195, 5198, 5197, 5200, + 5202, 5203, 5748, 5748, 5205, 5207, 5748, 5748, 5210, 5222, + 5224, 5748, 5748, 5748, 5227, 5748, 5230, 5234, 5238, 5242, - 5232, 5681, 5681, 5235, 5237, 5239, 5244, 5246, 5248, 5250, - 5681, 5251, 5253, 5254, 5681, 5256, 5258, 5255, 5259, 5261, - 5262, 5264, 5266, 5681, 5681, 5267, 5142, 5268, 5276, 5269, - 5681, 5278, 5286, 5282, 5283, 5271, 5284, 5289, 5681, 5291, - 5681, 5681, 5681, 5681, 5681, 5681, 5681, 5681, 5292, 5681, - 5298, 5300, 5681, 5293, 5301, 5303, 5304, 5308, 5681, 5309, - 5312, 5313, 4890, 5311, 5314, 5317, 5319, 5321, 5320, 5325, - 5327, 5328, 5331, 5681, 5681, 5329, 5333, 5335, 5337, 5341, - 5344, 5348, 5355, 5352, 5356, 5357, 5358, 5359, 5361, 5362, - 5372, 5365, 5367, 5369, 5370, 5374, 5681, 5375, 5681, 5378, + 5233, 5748, 5244, 5241, 5246, 5748, 5245, 5248, 5748, 5748, + 5249, 5212, 5251, 5252, 5253, 5748, 5254, 5256, 5257, 5263, + 5267, 5264, 5270, 5269, 5277, 5286, 5273, 5282, 5283, 5284, + 5285, 5287, 5292, 5288, 5748, 5748, 5295, 5748, 5748, 5300, + 5302, 5308, 5310, 5312, 5314, 5316, 5748, 5296, 5318, 5303, + 5748, 5319, 5321, 5322, 5326, 5324, 5327, 5325, 5330, 5748, + 5748, 5331, 5332, 5333, 5341, 5334, 5748, 5343, 5350, 5347, + 5348, 5345, 5351, 5354, 5748, 5356, 5748, 5748, 5748, 5748, + 5748, 5748, 5748, 5748, 5355, 5748, 5363, 5366, 5748, 5357, + 5367, 5368, 5373, 5360, 5748, 5375, 5377, 5378, 5379, 5382, - 5681, 5681, 5381, 5382, 5384, 5385, 5394, 5397, 5393, 5395, - 5398, 5400, 5681, 5401, 5681, 5402, 5405, 5681, 5403, 5406, - 5410, 5412, 5413, 5414, 5415, 5419, 5681, 5418, 5422, 5428, - 5430, 5437, 5438, 5440, 5442, 5443, 5432, 5450, 5449, 5453, - 5681, 5455, 5446, 5222, 5456, 5457, 5464, 5460, 5461, 5462, - 5681, 5467, 5468, 5473, 5469, 5470, 5471, 5481, 5485, 5483, - 5681, 5472, 5486, 5491, 5492, 5494, 5497, 5499, 5500, 5504, - 5507, 5509, 5514, 5501, 5515, 5505, 5516, 5517, 5681, 5526, - 5518, 5681, 5523, 5527, 5520, 5529, 5530, 5681, 5534, 5535, - 5538, 5540, 5543, 5544, 5681, 5546, 5550, 5552, 5681, 5553, + 5384, 5386, 5387, 5389, 5392, 5390, 5394, 5391, 5396, 5748, + 5748, 5400, 5401, 5403, 5395, 5411, 5417, 5420, 5423, 5405, + 5413, 5425, 5426, 5427, 5429, 5430, 5440, 5435, 5436, 5438, + 5439, 5442, 5748, 5444, 5748, 5443, 5748, 5748, 5447, 5450, + 5452, 5448, 5463, 5468, 5455, 5453, 5464, 5471, 5748, 5465, + 5748, 5472, 5473, 5748, 5474, 5475, 5476, 5478, 5479, 5481, + 5482, 5484, 5748, 5488, 5490, 5497, 5493, 5505, 5501, 5503, + 5507, 5510, 5504, 5517, 5513, 5520, 5748, 5521, 5514, 5522, + 5516, 5524, 5532, 5527, 5528, 5530, 5748, 5537, 5538, 5534, + 5540, 5542, 5544, 5548, 5551, 5545, 5748, 5552, 5553, 5555, - 5681, 5681, 5555, 5547, 5556, 5562, 5564, 5681, 5681, 5681, - 5589, 5596, 5603, 5610, 5617, 88, 5624, 5631, 5638, 5645, - 5652, 5659, 5666, 5673 + 5562, 5564, 5566, 5560, 5568, 5570, 5572, 5573, 5580, 5576, + 5581, 5582, 5584, 5585, 5748, 5591, 5586, 5748, 5592, 5593, + 5594, 5595, 5599, 5748, 5603, 5596, 5606, 5607, 5610, 5611, + 5748, 5617, 5620, 5621, 5748, 5622, 5748, 5748, 5624, 5612, + 5623, 5633, 5635, 5748, 5748, 5748, 5656, 5663, 5670, 5677, + 5684, 88, 5691, 5698, 5705, 5712, 5719, 5726, 5733, 5740 } ; -static const flex_int16_t yy_def[2925] = +static const flex_int16_t yy_def[2961] = { 0, - 2910, 1, 2911, 2911, 2912, 2912, 2913, 2913, 2914, 2914, - 2915, 2915, 2910, 2916, 2910, 2910, 2910, 2910, 2917, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2918, 2910, 2910, 2910, 2918, 2919, 2910, 2910, - 2910, 2919, 2920, 2910, 2910, 2910, 2910, 2920, 2921, 2910, - 2910, 2910, 2921, 2922, 2910, 2923, 2910, 2922, 2922, 2916, - 2916, 2910, 2924, 2917, 2924, 2917, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2946, 1, 2947, 2947, 2948, 2948, 2949, 2949, 2950, 2950, + 2951, 2951, 2946, 2952, 2946, 2946, 2946, 2946, 2953, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2954, 2946, 2946, 2946, 2954, 2955, 2946, 2946, + 2946, 2955, 2956, 2946, 2946, 2946, 2946, 2956, 2957, 2946, + 2946, 2946, 2957, 2958, 2946, 2959, 2946, 2958, 2958, 2952, + 2952, 2946, 2960, 2953, 2960, 2953, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2918, 2918, 2919, 2919, 2920, 2920, 2910, 2921, 2921, 2922, - 2922, 2923, 2923, 2922, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2954, 2954, 2955, 2955, 2956, 2956, 2946, 2957, 2957, 2958, + 2958, 2959, 2959, 2958, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2922, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2958, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2910, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2910, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2922, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2958, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2910, 2916, 2916, 2916, 2916, - 2916, 2916, 2910, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2910, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2910, 2916, - 2922, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, + 2952, 2952, 2952, 2946, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2946, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2946, 2952, 2958, 2952, 2952, 2952, 2952, 2952, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2922, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2910, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2910, 2916, 2910, 2910, 2916, 2910, 2910, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2958, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2946, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2946, + 2946, 2952, 2946, 2946, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2910, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2910, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2910, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2922, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2910, 2916, 2916, 2910, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2910, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2910, 2916, 2910, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2958, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2946, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2946, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2946, - 2916, 2916, 2916, 2910, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2910, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2910, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2910, 2916, 2916, 2922, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2910, 2916, 2916, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2946, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2946, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2946, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2958, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2916, 2916, 2916, 2916, 2916, 2910, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2910, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2910, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2910, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2946, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2946, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2946, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, 2952, - 2916, 2916, 2916, 2916, 2916, 2916, 2910, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2910, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2910, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2910, 2916, 2916, 2916, 2916, 2916, 2910, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2910, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2910, 2916, 2916, 2916, 2916, 2916, 2916, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2946, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2946, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, 2952, + 2952, 2946, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2910, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2910, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2910, 2916, 2910, 2916, - 2916, 2916, 2916, 2916, 2910, 2916, 2910, 2916, 2916, 2916, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2946, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2916, 2910, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2910, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2910, 2916, - 2916, 2916, 2916, 2910, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2952, 2952, 2952, 2946, 2952, 2946, 2952, 2952, 2952, 2952, + 2952, 2946, 2952, 2946, 2952, 2952, 2952, 2952, 2946, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, 2952, + 2946, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2916, 2916, 2916, 2910, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2910, 2916, 2910, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2910, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2910, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2910, 2916, - 2916, 2916, 2916, 2916, 2916, 2910, 2916, 2910, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2910, 2916, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2946, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2946, 2952, 2946, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2946, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2952, + 2952, 2952, 2952, 2952, 2946, 2952, 2946, 2952, 2952, 2952, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2910, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2910, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2910, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2910, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2910, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2910, 2916, 2916, 2916, 2910, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2910, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2910, 2916, - 2916, 2916, 2910, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2910, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2910, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2910, 2916, 2916, 2916, 2910, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2946, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2946, 2946, + 2952, 2952, 2952, 2946, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2952, + 2952, 2952, 2952, 2946, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2952, - 2910, 2916, 2910, 2916, 2916, 2916, 2910, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2910, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2910, 2910, 2916, 2910, 2916, 2916, 2916, - 2910, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2910, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2910, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2910, 2916, 2916, 2916, 2916, 2916, 2910, 2916, 2910, 2916, - 2916, 2916, 2916, 2916, 2910, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2910, + 2952, 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, + 2946, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2946, 2952, 2946, 2952, 2952, 2952, 2946, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2946, 2946, 2952, 2946, 2952, 2952, + 2952, 2946, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2946, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2946, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2946, 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2946, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2910, 2916, 2916, 2916, 2910, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2910, 2916, 2916, 2916, 2916, - 2916, 2916, 2910, 2910, 2916, 2910, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2910, 2910, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2910, 2916, 2916, 2916, 2910, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2946, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, 2946, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2946, 2952, + 2952, 2952, 2952, 2952, 2952, 2946, 2946, 2952, 2946, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2946, 2946, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2916, 2916, 2916, 2910, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2910, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2910, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2910, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2910, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2910, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2910, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2910, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2952, 2952, 2952, 2946, 2952, 2952, 2952, 2946, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2946, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2946, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, 2952, 2952, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2910, 2916, 2910, 2916, 2916, 2916, 2916, 2916, 2910, 2916, - 2916, 2916, 2916, 2916, 2910, 2916, 2916, 2916, 2916, 2910, - 2916, 2916, 2916, 2916, 2916, 2916, 2910, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2910, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2910, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2910, 2916, 2916, 2916, 2916, 2916, 2910, 2910, 2916, 2916, - 2916, 2916, 2916, 2910, 2916, 2916, 2916, 2916, 2916, 2910, - 2910, 2916, 2910, 2916, 2910, 2916, 2916, 2910, 2910, 2916, + 2952, 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2946, 2952, 2952, + 2952, 2952, 2952, 2946, 2952, 2952, 2952, 2952, 2952, 2946, + 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, 2952, 2952, + 2952, 2946, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, 2952, - 2916, 2916, 2916, 2916, 2910, 2916, 2910, 2916, 2916, 2916, - 2916, 2916, 2910, 2916, 2916, 2916, 2910, 2916, 2916, 2916, - 2916, 2910, 2916, 2916, 2916, 2910, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2910, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2910, 2916, 2910, 2916, 2916, 2916, 2916, 2910, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2910, 2916, + 2952, 2946, 2946, 2952, 2952, 2952, 2952, 2952, 2946, 2952, + 2952, 2952, 2952, 2952, 2946, 2946, 2952, 2946, 2952, 2946, + 2952, 2952, 2946, 2946, 2952, 2952, 2952, 2952, 2952, 2946, + 2952, 2946, 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2952, + 2952, 2946, 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, + 2946, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2946, 2952, - 2916, 2916, 2916, 2910, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2910, 2916, - 2910, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2910, 2910, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2910, 2916, 2916, - 2916, 2916, 2910, 2916, 2916, 2916, 2910, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2910, 2910, 2910, 2910, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2910, 2916, 2910, - 2910, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2910, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2946, + 2952, 2946, 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, 2952, + 2946, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2946, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2946, 2946, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, 2952, 2946, + 2952, 2952, 2952, 2946, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2946, 2946, 2946, 2946, 2952, 2952, 2952, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2910, 2910, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2910, 2916, 2916, 2910, 2916, 2910, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2910, 2910, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2910, 2916, - 2910, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2910, 2916, 2916, 2910, 2916, 2916, 2916, 2910, 2916, - 2916, 2916, 2910, 2916, 2910, 2916, 2910, 2916, 2916, 2910, - 2916, 2916, 2910, 2916, 2916, 2916, 2916, 2910, 2916, 2910, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2952, 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2946, 2946, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2946, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2946, 2946, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2946, 2952, 2952, 2946, 2952, 2946, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2946, 2946, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2946, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2946, 2952, 2952, 2946, 2952, 2952, 2952, 2946, 2952, 2952, - 2916, 2916, 2910, 2910, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2910, 2910, 2916, 2910, 2916, 2916, 2910, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2910, 2916, 2916, 2916, 2910, 2916, - 2916, 2916, 2916, 2910, 2916, 2916, 2916, 2916, 2910, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2910, 2910, 2910, - 2910, 2916, 2916, 2910, 2916, 2916, 2910, 2910, 2916, 2916, - 2916, 2916, 2910, 2916, 2910, 2916, 2910, 2916, 2916, 2916, - 2916, 2910, 2916, 2916, 2910, 2916, 2916, 2916, 2916, 2916, + 2952, 2946, 2952, 2952, 2952, 2946, 2952, 2946, 2952, 2952, + 2946, 2952, 2952, 2946, 2952, 2952, 2952, 2952, 2946, 2952, + 2946, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2946, 2946, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2946, 2946, 2952, 2946, 2952, 2952, + 2946, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, 2946, + 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, 2952, 2946, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2946, 2946, - 2916, 2916, 2910, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2910, 2916, 2916, 2916, 2910, 2916, - 2910, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2910, 2916, 2916, 2910, 2916, 2910, 2916, 2910, - 2916, 2916, 2916, 2916, 2910, 2916, 2916, 2916, 2916, 2910, - 2916, 2916, 2910, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2910, - 2910, 2910, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2910, - 2916, 2916, 2916, 2916, 2916, 2916, 2910, 2916, 2916, 2916, - 2910, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, + 2946, 2952, 2952, 2946, 2952, 2952, 2946, 2952, 2952, 2946, + 2946, 2952, 2952, 2952, 2952, 2946, 2952, 2946, 2952, 2946, + 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2946, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2952, + 2952, 2946, 2952, 2946, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2946, 2952, + 2946, 2952, 2946, 2952, 2952, 2952, 2952, 2946, 2952, 2952, + 2952, 2952, 2946, 2952, 2952, 2952, 2946, 2946, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2910, 2916, 2910, 2910, 2916, 2910, 2916, 2916, 2916, 2916, - 2910, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2910, 2910, - 2916, 2910, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2910, 2916, 2916, 2916, 2916, 2916, 2910, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2910, 2910, 2916, 2916, - 2910, 2910, 2916, 2916, 2916, 2910, 2910, 2910, 2916, 2910, - 2916, 2916, 2916, 2916, 2916, 2910, 2916, 2916, 2916, 2910, - 2916, 2916, 2910, 2910, 2916, 2916, 2916, 2916, 2916, 2910, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2910, 2910, + 2952, 2952, 2952, 2952, 2946, 2946, 2946, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, 2952, 2952, + 2952, 2946, 2952, 2952, 2952, 2946, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2946, 2946, 2952, + 2946, 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, 2952, + 2952, 2946, 2952, 2952, 2946, 2946, 2952, 2946, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, + 2952, 2952, 2946, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2946, 2946, 2952, 2952, 2946, 2946, 2952, 2952, + 2952, 2946, 2946, 2946, 2952, 2946, 2952, 2952, 2952, 2952, - 2916, 2910, 2910, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2910, 2916, 2916, 2916, 2910, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2910, 2910, 2916, 2916, 2916, 2916, 2916, - 2910, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2910, 2916, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2916, 2910, - 2916, 2916, 2910, 2916, 2916, 2916, 2916, 2916, 2910, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2910, 2910, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2910, 2916, 2910, 2916, + 2952, 2946, 2952, 2952, 2952, 2946, 2952, 2952, 2946, 2946, + 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2946, 2946, 2952, 2946, 2946, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, + 2946, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2946, + 2946, 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2946, 2952, 2946, 2946, 2946, 2946, + 2946, 2946, 2946, 2946, 2952, 2946, 2952, 2952, 2946, 2952, + 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, 2952, 2952, - 2910, 2910, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2910, 2916, 2910, 2916, 2916, 2910, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2910, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2910, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2910, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2910, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, - 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2916, 2910, 2916, - 2916, 2910, 2916, 2916, 2916, 2916, 2916, 2910, 2916, 2916, - 2916, 2916, 2916, 2916, 2910, 2916, 2916, 2916, 2910, 2916, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2946, + 2946, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2946, 2952, 2946, 2952, 2946, 2946, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2946, 2952, + 2946, 2952, 2952, 2946, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2946, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, - 2910, 2910, 2916, 2916, 2916, 2916, 2916, 2910, 2910, 0, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910 + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2946, 2952, 2952, + 2952, 2952, 2952, 2946, 2952, 2952, 2952, 2952, 2952, 2952, + 2946, 2952, 2952, 2952, 2946, 2952, 2946, 2946, 2952, 2952, + 2952, 2952, 2952, 2946, 2946, 0, 2946, 2946, 2946, 2946, + 2946, 2946, 2946, 2946, 2946, 2946, 2946, 2946, 2946, 2946 } ; -static const flex_int16_t yy_nxt[5722] = +static const flex_int16_t yy_nxt[5789] = { 0, 14, 15, 16, 17, 18, 19, 18, 14, 14, 14, 14, 14, 18, 20, 21, 22, 23, 24, 25, 26, @@ -1439,581 +1449,587 @@ static const flex_int16_t yy_nxt[5722] = 303, 71, 296, 304, 71, 71, 71, 300, 302, 71, 307, 71, 71, 309, 310, 71, 71, 308, 305, 71, 71, 71, 311, 71, 312, 306, 71, 313, 71, 71, - 71, 71, 315, 71, 71, 319, 71, 317, 71, 324, - 71, 71, 320, 314, 318, 71, 325, 71, 71, 321, - 316, 327, 322, 329, 71, 332, 71, 71, 323, 71, - 71, 71, 334, 326, 71, 338, 335, 71, 71, 339, - 328, 71, 330, 331, 337, 71, 333, 341, 71, 336, - 71, 71, 344, 71, 345, 71, 346, 340, 71, 348, - 342, 151, 71, 71, 343, 71, 71, 71, 349, 71, + 71, 71, 315, 71, 71, 319, 71, 317, 71, 71, + 324, 71, 320, 314, 318, 325, 71, 71, 71, 321, + 316, 328, 322, 326, 330, 71, 333, 327, 323, 71, + 71, 71, 71, 329, 71, 71, 335, 336, 71, 71, + 339, 340, 342, 331, 332, 338, 71, 71, 71, 334, + 71, 71, 71, 337, 71, 345, 346, 71, 341, 71, + 347, 349, 343, 71, 353, 344, 71, 71, 71, 151, - 71, 71, 352, 353, 71, 71, 357, 355, 359, 146, - 347, 351, 354, 360, 71, 350, 71, 71, 363, 71, - 356, 361, 362, 71, 71, 71, 71, 358, 71, 71, - 369, 71, 71, 372, 370, 371, 71, 368, 364, 365, - 71, 71, 367, 71, 366, 71, 373, 374, 71, 376, - 71, 71, 377, 71, 375, 71, 380, 378, 379, 381, - 71, 383, 71, 71, 385, 386, 387, 71, 71, 382, - 71, 71, 71, 71, 390, 388, 384, 71, 392, 71, - 71, 71, 391, 144, 71, 71, 397, 71, 393, 71, - 398, 71, 389, 71, 396, 400, 71, 394, 71, 402, + 350, 71, 71, 71, 71, 352, 71, 360, 358, 356, + 361, 354, 355, 71, 348, 71, 71, 351, 71, 364, + 362, 365, 357, 363, 71, 71, 71, 359, 71, 71, + 71, 71, 71, 371, 372, 71, 374, 369, 366, 71, + 71, 71, 368, 373, 367, 375, 71, 377, 71, 71, + 376, 71, 378, 71, 71, 370, 379, 381, 71, 71, + 384, 71, 382, 386, 380, 388, 71, 385, 383, 71, + 71, 71, 387, 71, 71, 391, 71, 389, 393, 71, + 71, 392, 396, 71, 71, 71, 398, 71, 71, 71, + 399, 71, 71, 401, 390, 71, 397, 407, 395, 394, - 71, 395, 406, 404, 71, 71, 71, 399, 71, 407, - 71, 401, 142, 71, 403, 71, 405, 408, 71, 415, - 417, 71, 71, 442, 418, 421, 419, 409, 71, 71, - 410, 416, 71, 426, 71, 411, 412, 413, 414, 71, - 71, 422, 420, 71, 423, 424, 425, 71, 71, 71, - 427, 433, 71, 71, 435, 430, 428, 431, 432, 429, - 71, 71, 71, 71, 71, 434, 71, 437, 71, 71, - 71, 457, 71, 445, 71, 438, 436, 444, 71, 71, - 71, 71, 71, 439, 441, 446, 440, 447, 443, 71, - 71, 71, 449, 448, 450, 451, 71, 458, 471, 452, + 71, 403, 71, 71, 71, 405, 400, 406, 71, 402, + 404, 408, 71, 71, 71, 71, 409, 71, 422, 418, + 71, 416, 443, 419, 71, 420, 410, 71, 71, 411, + 71, 417, 427, 71, 412, 413, 414, 415, 71, 431, + 423, 421, 424, 71, 71, 425, 426, 428, 71, 71, + 71, 434, 71, 71, 435, 429, 71, 432, 430, 433, + 71, 436, 71, 71, 71, 71, 71, 438, 437, 71, + 444, 449, 445, 71, 71, 439, 441, 71, 448, 450, + 442, 446, 71, 440, 71, 71, 447, 451, 453, 71, + 454, 71, 456, 452, 71, 461, 462, 71, 455, 71, - 456, 459, 71, 71, 71, 71, 71, 71, 461, 460, - 71, 472, 453, 71, 462, 454, 476, 455, 463, 71, - 71, 473, 474, 71, 475, 71, 464, 71, 465, 490, - 466, 488, 477, 478, 487, 486, 489, 71, 151, 71, - 71, 71, 151, 467, 71, 71, 468, 71, 469, 71, - 470, 71, 149, 479, 480, 493, 494, 71, 492, 491, - 495, 71, 496, 481, 498, 482, 483, 484, 71, 503, - 485, 497, 500, 71, 71, 499, 71, 71, 71, 508, - 502, 506, 501, 71, 509, 71, 71, 71, 71, 505, - 513, 71, 507, 504, 71, 71, 71, 71, 71, 511, + 460, 71, 71, 463, 71, 457, 464, 71, 458, 71, + 459, 71, 465, 71, 146, 71, 71, 475, 466, 480, + 476, 479, 467, 71, 71, 151, 477, 71, 478, 482, + 468, 71, 469, 491, 470, 481, 492, 71, 490, 71, + 71, 493, 71, 494, 71, 71, 495, 471, 498, 144, + 472, 71, 473, 501, 474, 71, 500, 483, 484, 496, + 497, 71, 71, 499, 71, 503, 504, 485, 71, 486, + 487, 488, 71, 71, 489, 71, 505, 71, 512, 71, + 71, 502, 510, 71, 71, 71, 513, 506, 507, 71, + 509, 517, 71, 508, 511, 515, 71, 71, 71, 71, - 516, 71, 512, 71, 517, 518, 510, 71, 71, 71, - 515, 523, 525, 71, 520, 522, 514, 519, 71, 521, - 71, 528, 526, 71, 71, 71, 71, 71, 71, 524, - 71, 71, 529, 538, 147, 534, 71, 527, 530, 537, - 531, 533, 71, 532, 541, 71, 535, 71, 536, 539, - 71, 540, 542, 543, 71, 71, 546, 71, 544, 71, - 545, 71, 547, 71, 549, 71, 551, 552, 71, 71, - 548, 71, 553, 71, 71, 71, 550, 71, 558, 556, - 557, 71, 71, 71, 554, 71, 559, 71, 71, 71, - 564, 71, 555, 560, 568, 565, 71, 563, 71, 567, + 514, 71, 142, 516, 520, 521, 522, 71, 71, 71, + 71, 71, 519, 527, 529, 526, 71, 518, 523, 71, + 530, 71, 532, 524, 71, 525, 71, 71, 71, 71, + 71, 528, 71, 71, 543, 531, 71, 538, 533, 534, + 548, 541, 535, 537, 71, 536, 71, 545, 539, 542, + 540, 71, 71, 71, 546, 544, 71, 547, 71, 551, + 71, 549, 71, 71, 71, 555, 71, 553, 556, 71, + 557, 71, 550, 552, 71, 71, 554, 71, 71, 562, + 560, 71, 561, 71, 558, 71, 71, 563, 71, 71, + 71, 568, 559, 564, 569, 71, 571, 567, 71, 71, - 566, 562, 561, 71, 570, 71, 571, 71, 71, 71, - 71, 71, 71, 71, 581, 71, 573, 569, 574, 71, - 71, 583, 71, 576, 584, 71, 71, 71, 572, 580, - 575, 577, 579, 578, 582, 71, 585, 71, 588, 71, - 593, 591, 590, 586, 71, 71, 587, 71, 71, 71, - 594, 71, 71, 597, 71, 71, 71, 589, 71, 598, - 600, 71, 71, 71, 71, 592, 614, 599, 71, 146, - 595, 71, 596, 71, 601, 602, 603, 71, 604, 613, - 71, 612, 71, 605, 617, 606, 620, 615, 71, 616, - 71, 607, 71, 608, 71, 618, 609, 610, 622, 619, + 71, 570, 71, 565, 566, 572, 71, 574, 71, 575, + 577, 71, 71, 71, 71, 71, 71, 585, 71, 573, + 576, 578, 587, 71, 71, 580, 71, 586, 71, 588, + 584, 579, 581, 71, 582, 583, 71, 71, 71, 592, + 589, 590, 595, 71, 591, 71, 71, 71, 71, 597, + 598, 593, 601, 594, 71, 71, 71, 71, 71, 600, + 605, 71, 604, 596, 71, 71, 607, 71, 71, 71, + 71, 71, 71, 71, 599, 621, 602, 71, 603, 606, + 71, 608, 610, 620, 624, 71, 609, 71, 611, 623, + 619, 622, 627, 612, 71, 613, 71, 71, 71, 71, - 71, 623, 624, 611, 626, 621, 71, 71, 71, 627, - 71, 630, 71, 625, 71, 632, 71, 628, 71, 71, - 71, 71, 71, 71, 71, 71, 71, 629, 638, 71, - 634, 633, 642, 639, 635, 71, 71, 631, 643, 636, - 641, 640, 151, 637, 645, 71, 644, 646, 71, 71, - 71, 647, 71, 71, 71, 71, 717, 71, 652, 654, - 71, 71, 649, 71, 648, 656, 71, 650, 653, 655, - 657, 651, 658, 659, 71, 660, 71, 661, 71, 71, - 71, 71, 71, 71, 71, 665, 664, 144, 71, 673, - 71, 670, 662, 666, 71, 663, 671, 71, 71, 669, + 71, 614, 628, 615, 625, 630, 616, 617, 626, 631, + 629, 71, 71, 618, 633, 71, 71, 71, 637, 634, + 632, 71, 639, 635, 71, 71, 71, 71, 71, 71, + 71, 636, 71, 71, 645, 71, 71, 638, 641, 640, + 642, 646, 649, 151, 650, 652, 643, 651, 648, 647, + 644, 71, 71, 71, 71, 71, 71, 71, 71, 71, + 71, 71, 659, 661, 653, 671, 71, 71, 654, 656, + 71, 657, 660, 655, 662, 658, 663, 71, 664, 665, + 666, 71, 667, 71, 71, 71, 71, 71, 668, 71, + 672, 71, 151, 71, 71, 669, 677, 71, 670, 688, - 667, 672, 675, 668, 674, 71, 676, 71, 71, 677, - 71, 678, 71, 71, 71, 679, 680, 71, 71, 681, - 71, 686, 71, 684, 71, 71, 683, 685, 689, 688, - 71, 682, 71, 71, 71, 71, 690, 71, 692, 694, - 71, 71, 695, 687, 697, 71, 71, 71, 691, 698, - 71, 701, 71, 699, 696, 693, 71, 703, 71, 71, - 707, 704, 71, 71, 700, 702, 71, 71, 712, 71, - 709, 708, 705, 710, 706, 71, 71, 71, 713, 71, - 71, 714, 71, 71, 71, 719, 721, 71, 71, 71, - 71, 71, 756, 715, 71, 711, 718, 716, 722, 725, + 673, 678, 71, 680, 71, 676, 679, 674, 681, 71, + 675, 682, 683, 71, 684, 71, 685, 71, 686, 71, + 71, 71, 71, 687, 71, 71, 71, 691, 71, 690, + 692, 71, 71, 696, 71, 695, 697, 71, 689, 71, + 71, 71, 699, 71, 701, 149, 702, 694, 71, 693, + 71, 71, 698, 71, 704, 71, 708, 703, 71, 705, + 700, 71, 71, 706, 71, 71, 707, 710, 714, 711, + 71, 709, 712, 71, 71, 71, 713, 717, 716, 715, + 71, 71, 71, 723, 720, 719, 71, 721, 71, 71, + 71, 71, 728, 71, 726, 724, 71, 71, 71, 718, - 71, 727, 720, 723, 724, 71, 726, 71, 71, 71, - 71, 728, 729, 730, 71, 734, 71, 736, 732, 731, - 71, 71, 733, 71, 71, 735, 71, 737, 739, 741, - 71, 738, 71, 740, 71, 745, 71, 71, 71, 71, - 71, 71, 71, 742, 748, 749, 747, 751, 71, 71, - 752, 743, 744, 71, 753, 746, 754, 71, 71, 758, - 750, 755, 71, 71, 71, 757, 760, 759, 71, 71, - 71, 766, 71, 71, 71, 71, 761, 71, 767, 71, - 71, 762, 768, 71, 71, 71, 763, 769, 764, 71, - 765, 775, 71, 771, 770, 773, 71, 71, 776, 772, + 71, 71, 722, 725, 734, 729, 71, 71, 71, 732, + 71, 727, 735, 733, 731, 71, 730, 71, 736, 71, + 737, 741, 740, 71, 738, 739, 743, 71, 742, 71, + 71, 746, 71, 744, 745, 71, 747, 71, 71, 71, + 752, 71, 71, 71, 71, 147, 71, 755, 748, 71, + 757, 749, 754, 71, 71, 71, 759, 761, 750, 751, + 753, 758, 71, 71, 756, 71, 71, 762, 764, 71, + 763, 760, 71, 765, 71, 71, 766, 71, 71, 768, + 770, 71, 71, 71, 71, 769, 776, 767, 774, 71, + 771, 71, 71, 777, 71, 71, 71, 71, 71, 772, - 774, 777, 71, 71, 71, 71, 780, 71, 71, 71, - 71, 778, 71, 788, 71, 779, 71, 71, 789, 71, - 782, 781, 71, 783, 787, 784, 785, 786, 790, 71, - 791, 792, 794, 71, 793, 71, 71, 71, 71, 71, - 71, 795, 797, 798, 799, 800, 796, 71, 71, 71, - 71, 71, 801, 805, 802, 803, 151, 71, 804, 806, - 809, 808, 71, 807, 71, 71, 810, 71, 71, 71, - 816, 71, 71, 817, 812, 819, 71, 71, 811, 71, - 71, 818, 813, 814, 822, 71, 820, 71, 71, 815, - 71, 824, 71, 828, 71, 71, 71, 825, 821, 71, + 773, 785, 781, 775, 778, 71, 779, 71, 71, 780, + 783, 71, 784, 71, 71, 782, 71, 71, 790, 786, + 787, 71, 71, 71, 71, 71, 798, 71, 71, 71, + 788, 799, 789, 792, 791, 71, 71, 71, 797, 793, + 794, 795, 796, 802, 71, 71, 801, 800, 71, 803, + 71, 71, 804, 71, 71, 807, 805, 809, 806, 808, + 71, 71, 814, 71, 71, 810, 811, 71, 71, 812, + 813, 71, 151, 71, 819, 71, 816, 818, 815, 820, + 817, 71, 71, 71, 71, 826, 71, 821, 829, 71, + 822, 71, 827, 71, 71, 832, 71, 823, 824, 71, - 823, 71, 829, 830, 71, 71, 71, 71, 71, 71, - 827, 834, 844, 826, 841, 835, 71, 71, 836, 831, - 832, 71, 839, 842, 833, 837, 840, 71, 838, 71, - 845, 71, 843, 71, 846, 71, 851, 886, 847, 848, - 71, 71, 71, 71, 71, 849, 859, 71, 71, 864, - 71, 863, 71, 71, 866, 850, 71, 852, 853, 865, - 854, 860, 861, 855, 71, 71, 868, 71, 856, 71, - 870, 71, 862, 71, 857, 858, 869, 71, 871, 867, - 71, 873, 872, 71, 71, 71, 71, 875, 71, 879, - 71, 71, 71, 878, 71, 71, 874, 71, 882, 888, + 828, 71, 830, 834, 825, 71, 71, 71, 838, 71, + 71, 71, 71, 831, 71, 71, 833, 835, 839, 840, + 71, 71, 71, 71, 71, 837, 844, 841, 71, 851, + 845, 836, 71, 846, 852, 843, 842, 849, 71, 853, + 847, 850, 854, 848, 71, 855, 71, 856, 71, 71, + 858, 71, 861, 71, 71, 71, 874, 71, 71, 857, + 869, 71, 71, 859, 873, 71, 876, 71, 71, 878, + 71, 860, 71, 862, 863, 870, 864, 875, 872, 865, + 871, 71, 877, 71, 866, 71, 879, 71, 880, 71, + 867, 868, 881, 71, 71, 882, 71, 71, 885, 71, - 71, 71, 884, 924, 876, 877, 880, 71, 881, 889, - 883, 71, 887, 892, 890, 71, 891, 885, 893, 71, - 71, 895, 71, 71, 71, 894, 896, 71, 897, 71, - 71, 71, 71, 71, 71, 904, 71, 898, 899, 901, - 902, 71, 907, 71, 71, 71, 71, 71, 71, 900, - 905, 903, 906, 71, 909, 910, 912, 71, 911, 71, - 913, 71, 908, 71, 914, 71, 917, 71, 71, 71, - 71, 925, 71, 71, 71, 915, 922, 71, 920, 71, - 71, 71, 918, 71, 923, 927, 71, 919, 916, 71, - 71, 71, 71, 71, 921, 926, 935, 71, 928, 929, + 71, 883, 884, 71, 889, 888, 71, 71, 892, 71, + 71, 71, 71, 896, 146, 890, 886, 897, 887, 71, + 891, 71, 894, 898, 71, 899, 901, 893, 902, 903, + 900, 71, 71, 895, 71, 71, 905, 904, 71, 71, + 71, 906, 71, 71, 71, 907, 71, 71, 908, 71, + 71, 909, 911, 912, 914, 71, 71, 917, 71, 915, + 71, 71, 910, 71, 916, 71, 71, 71, 913, 919, + 920, 921, 71, 71, 922, 923, 71, 918, 924, 71, + 71, 925, 929, 71, 71, 930, 71, 71, 927, 71, + 71, 71, 71, 928, 71, 935, 937, 71, 933, 938, - 933, 930, 939, 938, 71, 931, 932, 71, 936, 71, - 71, 71, 934, 71, 71, 71, 937, 943, 71, 940, - 945, 946, 71, 941, 942, 71, 71, 944, 71, 71, - 71, 955, 71, 950, 947, 948, 71, 71, 949, 957, - 71, 959, 71, 71, 71, 71, 961, 71, 951, 953, - 956, 952, 954, 960, 71, 968, 963, 142, 71, 71, - 958, 71, 962, 965, 964, 71, 967, 71, 71, 71, - 969, 972, 71, 974, 71, 966, 71, 71, 71, 977, - 151, 71, 971, 976, 71, 71, 970, 71, 979, 71, - 980, 71, 973, 71, 975, 71, 978, 71, 983, 71, + 71, 926, 931, 936, 71, 932, 71, 71, 71, 940, + 71, 71, 939, 71, 934, 71, 71, 951, 941, 946, + 948, 71, 144, 71, 71, 71, 942, 943, 71, 71, + 944, 945, 71, 949, 952, 71, 947, 71, 956, 71, + 950, 953, 955, 954, 958, 959, 71, 71, 71, 957, + 71, 71, 71, 71, 968, 71, 961, 960, 963, 71, + 71, 970, 71, 972, 973, 71, 71, 71, 962, 71, + 71, 964, 966, 969, 965, 967, 71, 71, 976, 981, + 974, 71, 971, 71, 975, 71, 977, 71, 978, 71, + 980, 71, 71, 71, 982, 985, 987, 71, 979, 983, - 71, 71, 995, 71, 71, 71, 984, 981, 996, 998, - 71, 982, 71, 986, 71, 71, 1000, 987, 997, 985, - 71, 988, 71, 71, 1051, 989, 71, 990, 1003, 1001, - 999, 991, 71, 992, 1002, 71, 1005, 71, 993, 1008, - 1004, 1006, 71, 994, 71, 71, 1007, 71, 71, 1010, - 1012, 71, 1009, 1020, 71, 71, 1017, 1018, 71, 1011, - 1016, 1013, 71, 71, 1021, 1015, 1019, 71, 71, 1014, - 71, 71, 71, 71, 71, 71, 1036, 1022, 1033, 71, - 71, 71, 71, 71, 1032, 71, 1037, 1023, 1034, 1024, - 71, 1025, 1035, 1038, 71, 71, 1026, 1039, 1027, 1042, + 984, 71, 71, 990, 151, 71, 71, 989, 71, 993, + 992, 988, 986, 71, 71, 71, 71, 71, 71, 71, + 991, 996, 71, 71, 1008, 71, 71, 1011, 71, 1009, + 71, 71, 999, 71, 995, 994, 997, 1013, 71, 998, + 1001, 1010, 1000, 71, 71, 1015, 1002, 71, 1003, 1016, + 71, 1018, 1004, 1014, 1005, 1012, 1019, 71, 71, 1006, + 142, 1017, 71, 71, 1007, 1022, 1021, 71, 1023, 71, + 71, 71, 1020, 71, 1025, 1033, 1030, 1031, 1024, 1029, + 71, 1026, 71, 71, 1034, 1028, 1032, 71, 71, 71, + 71, 1027, 71, 71, 71, 71, 71, 1049, 71, 1046, - 71, 1040, 71, 71, 1028, 1044, 1043, 71, 1049, 1029, - 1030, 71, 71, 1041, 1046, 1045, 1031, 1048, 71, 71, - 1047, 1054, 71, 71, 71, 71, 71, 71, 1052, 71, - 71, 1057, 71, 1055, 71, 71, 71, 1050, 1053, 71, - 71, 71, 71, 1062, 1056, 1063, 1059, 1061, 1064, 1058, - 1060, 1066, 71, 71, 1068, 71, 1065, 71, 71, 71, - 71, 1069, 71, 71, 71, 1074, 71, 1075, 1067, 1071, - 71, 1076, 1070, 1077, 1073, 1079, 1072, 71, 1078, 1081, - 1082, 71, 71, 1080, 71, 1083, 71, 71, 1084, 71, - 71, 1085, 1086, 71, 71, 1092, 1087, 71, 71, 1094, + 1055, 71, 71, 1050, 1045, 71, 71, 71, 1036, 1047, + 1035, 1037, 71, 1038, 1048, 1051, 71, 71, 1039, 1052, + 1040, 1056, 1057, 71, 71, 1053, 1041, 1058, 71, 71, + 71, 1042, 1043, 1061, 1062, 1054, 71, 71, 1044, 71, + 71, 71, 1059, 1060, 1067, 71, 1064, 71, 71, 1065, + 71, 71, 71, 1070, 1068, 1063, 71, 1066, 71, 71, + 71, 71, 71, 71, 71, 71, 1069, 1075, 1076, 1077, + 1072, 1071, 1073, 1074, 1079, 71, 71, 1078, 1080, 1081, + 71, 71, 71, 71, 1082, 71, 71, 71, 1087, 71, + 1084, 1088, 1089, 71, 1083, 71, 1091, 1086, 1090, 1085, - 71, 71, 71, 1095, 1088, 71, 1090, 1097, 1089, 1091, - 71, 71, 71, 71, 71, 1098, 71, 1093, 1100, 1096, - 1103, 1101, 71, 71, 1102, 1106, 71, 1099, 71, 1105, - 71, 71, 1107, 71, 71, 1108, 71, 1110, 1104, 71, - 1111, 71, 71, 71, 1117, 1115, 1109, 1118, 1112, 71, - 71, 71, 71, 71, 1119, 1113, 1116, 1120, 71, 1122, - 71, 1114, 1125, 1121, 71, 71, 71, 71, 71, 1123, - 71, 1126, 1127, 71, 71, 71, 1128, 1131, 1132, 1129, - 1124, 71, 1130, 71, 71, 71, 71, 1137, 1138, 71, - 71, 1140, 1133, 71, 71, 71, 1135, 1141, 71, 71, + 1092, 71, 1095, 71, 71, 1101, 71, 1096, 71, 1094, + 71, 71, 1097, 1099, 1093, 1098, 71, 1100, 71, 1105, + 71, 1107, 1102, 71, 71, 71, 71, 71, 71, 1103, + 71, 1109, 71, 1104, 71, 1110, 71, 71, 1108, 1112, + 1106, 1113, 1115, 71, 1114, 1111, 71, 71, 1116, 71, + 71, 1121, 71, 1118, 1122, 71, 1120, 71, 1117, 71, + 71, 1123, 71, 1125, 71, 1119, 71, 1126, 71, 71, + 1132, 71, 1130, 1133, 71, 2946, 71, 1124, 71, 71, + 1127, 71, 71, 1128, 1131, 71, 1134, 1135, 1129, 1137, + 1136, 1140, 1138, 71, 71, 71, 71, 71, 1139, 1141, - 71, 1134, 1145, 71, 1136, 1139, 71, 71, 1142, 1143, - 71, 1144, 1147, 71, 1151, 71, 71, 71, 1146, 71, - 71, 71, 71, 1157, 71, 1155, 1148, 1159, 2910, 1154, - 1152, 1156, 1150, 71, 1153, 1149, 1160, 71, 71, 1162, - 71, 1158, 71, 1161, 71, 1163, 71, 71, 71, 71, - 71, 71, 1166, 71, 1172, 71, 71, 1169, 1164, 71, - 1165, 71, 71, 1167, 71, 71, 1170, 71, 1168, 1178, - 1173, 1176, 1171, 71, 1182, 71, 1175, 1174, 1179, 71, - 1180, 71, 1177, 1181, 1183, 1187, 71, 71, 1184, 1185, - 1186, 71, 71, 71, 71, 1188, 1189, 71, 1191, 1194, + 1142, 71, 1143, 71, 71, 1144, 71, 1146, 71, 1147, + 71, 71, 71, 71, 1152, 71, 1153, 71, 1155, 1148, + 71, 1145, 71, 1150, 1156, 71, 71, 71, 1149, 1160, + 1154, 1151, 71, 71, 71, 71, 1157, 71, 71, 1159, + 1158, 1166, 71, 1162, 71, 71, 71, 71, 1172, 71, + 1161, 1170, 71, 71, 1163, 1187, 71, 1165, 1167, 1169, + 1168, 1171, 1164, 1174, 1175, 71, 71, 1177, 71, 71, + 71, 1176, 71, 1173, 71, 71, 71, 1178, 71, 71, + 1181, 71, 1179, 71, 71, 71, 1184, 71, 1180, 71, + 71, 1182, 2946, 1191, 71, 71, 1185, 1183, 1188, 1198, - 71, 71, 71, 71, 71, 1192, 1195, 1196, 71, 1198, - 71, 1190, 1199, 71, 71, 71, 1193, 71, 71, 1200, - 71, 71, 71, 1197, 71, 71, 71, 1206, 1201, 1202, - 1204, 71, 1205, 1207, 1203, 71, 71, 1211, 71, 71, - 71, 1208, 1216, 1210, 71, 1209, 1213, 1215, 71, 71, - 1212, 71, 1218, 1217, 1220, 71, 1214, 71, 2910, 1222, - 1219, 71, 71, 1221, 1223, 71, 71, 1227, 71, 71, - 1235, 1225, 1236, 1238, 1224, 1226, 71, 71, 71, 71, - 1237, 1228, 1234, 71, 1229, 1230, 1239, 1240, 1241, 1231, - 71, 71, 71, 71, 71, 1232, 1242, 71, 1243, 1233, + 1193, 71, 1186, 1189, 1190, 71, 1197, 71, 1199, 1194, + 1192, 1195, 71, 71, 1196, 1201, 71, 71, 71, 71, + 71, 1200, 1204, 71, 1206, 1203, 1209, 71, 71, 71, + 71, 1202, 71, 1210, 1207, 1211, 71, 1205, 71, 1208, + 71, 1213, 1214, 71, 71, 71, 71, 1216, 71, 1212, + 71, 71, 1215, 71, 71, 1217, 71, 1219, 1221, 71, + 1222, 1220, 1226, 1218, 71, 71, 71, 1231, 1230, 1223, + 71, 71, 1225, 71, 1224, 71, 71, 71, 71, 1227, + 71, 1235, 1237, 1233, 1232, 1228, 1229, 1238, 71, 1236, + 71, 1234, 71, 1242, 1240, 71, 71, 1239, 71, 1252, - 71, 1245, 71, 71, 71, 1246, 71, 1247, 71, 2910, - 71, 1244, 1248, 1250, 1251, 1252, 1255, 1256, 71, 71, - 1253, 1249, 71, 71, 1257, 71, 1254, 1259, 71, 1258, - 71, 1264, 1260, 1265, 1261, 71, 1262, 71, 1263, 1266, - 71, 1267, 71, 71, 1271, 71, 71, 71, 71, 1272, - 71, 1274, 1270, 71, 71, 1268, 71, 1276, 71, 71, - 1269, 1275, 71, 1281, 1279, 71, 71, 1273, 1283, 71, - 71, 71, 1277, 1278, 2910, 1286, 1280, 1287, 71, 1282, - 1289, 71, 71, 71, 1284, 1290, 1288, 71, 71, 71, - 1291, 1295, 71, 1292, 1285, 71, 1297, 71, 1294, 71, + 1251, 71, 71, 1241, 71, 1250, 71, 1253, 1249, 1243, + 1254, 71, 1244, 1245, 1255, 71, 1256, 1246, 71, 71, + 71, 71, 1258, 1247, 1257, 71, 1260, 1248, 71, 71, + 71, 1261, 71, 1262, 71, 71, 1259, 71, 1263, 1265, + 1267, 71, 71, 1270, 1271, 2946, 1272, 1264, 1268, 71, + 71, 1274, 1266, 71, 71, 1269, 1275, 1273, 1276, 1280, + 1277, 71, 1278, 71, 1279, 1281, 71, 71, 71, 71, + 1282, 1286, 71, 71, 71, 71, 1287, 71, 1285, 1289, + 71, 71, 1283, 71, 1291, 1295, 1284, 1290, 71, 71, + 71, 71, 71, 71, 1288, 1298, 1296, 1294, 71, 1292, - 1298, 1293, 71, 71, 71, 1302, 71, 1299, 71, 71, - 71, 71, 1304, 71, 71, 1296, 1306, 71, 71, 1308, - 71, 1310, 1307, 71, 1300, 1301, 71, 71, 1303, 71, - 1305, 1312, 1309, 71, 1313, 1311, 1322, 71, 71, 71, - 1317, 1314, 1315, 1316, 71, 1319, 71, 71, 71, 1318, - 1323, 1324, 1320, 1325, 1321, 1326, 71, 71, 71, 71, - 71, 71, 1330, 71, 71, 71, 71, 1327, 1334, 1335, - 71, 1329, 71, 1337, 71, 71, 1336, 71, 1328, 71, - 71, 71, 71, 71, 1331, 1332, 1338, 71, 1344, 1333, - 71, 71, 1339, 1341, 1342, 71, 71, 1340, 1349, 71, + 1293, 71, 1300, 1297, 71, 71, 1299, 1304, 71, 1303, + 1306, 71, 71, 71, 1307, 71, 1301, 71, 1308, 71, + 1305, 71, 1309, 1312, 71, 71, 1302, 71, 1311, 1314, + 71, 71, 1310, 71, 1315, 71, 1316, 1319, 71, 71, + 71, 1313, 1321, 71, 71, 71, 1317, 1325, 1318, 1323, + 71, 71, 1324, 71, 1327, 1320, 71, 71, 1329, 71, + 1322, 71, 1330, 71, 71, 71, 1332, 1331, 1326, 1333, + 1335, 1328, 71, 1334, 71, 71, 71, 1340, 1341, 71, + 1337, 1336, 1338, 71, 71, 71, 1343, 71, 1344, 1339, + 1342, 71, 71, 1347, 71, 71, 71, 71, 1351, 1352, - 1343, 1348, 71, 1345, 71, 1353, 71, 1351, 71, 1347, - 1354, 71, 71, 71, 71, 1346, 71, 1356, 1350, 71, - 1357, 1364, 71, 1352, 1355, 71, 1366, 1358, 71, 1359, - 1362, 1360, 71, 1363, 1361, 71, 1365, 71, 71, 1367, - 71, 71, 71, 71, 71, 71, 1372, 1369, 1368, 1374, - 71, 71, 71, 1379, 71, 71, 1383, 71, 1371, 1376, - 1373, 1380, 71, 1375, 1370, 71, 71, 71, 1377, 1378, - 71, 71, 1381, 71, 1382, 71, 71, 1384, 71, 71, - 1390, 1386, 71, 1391, 1392, 1385, 1387, 71, 1388, 1389, - 71, 1394, 71, 1395, 71, 1400, 1393, 2910, 71, 1401, + 71, 71, 1346, 1354, 71, 71, 1345, 1353, 71, 71, + 71, 71, 1358, 71, 71, 1348, 1349, 71, 1361, 71, + 1350, 71, 1355, 71, 71, 1359, 1366, 71, 1356, 1365, + 1357, 1360, 71, 71, 1362, 1370, 71, 1368, 71, 1364, + 1371, 71, 71, 71, 1363, 71, 1367, 1373, 71, 71, + 1374, 71, 1369, 71, 1372, 1381, 1379, 1375, 71, 1380, + 1376, 1383, 71, 1377, 71, 71, 1378, 71, 1384, 71, + 71, 71, 1382, 1385, 71, 1387, 1389, 71, 71, 1391, + 71, 71, 71, 1396, 1386, 71, 71, 1388, 1390, 1397, + 71, 71, 1393, 71, 1400, 71, 71, 1392, 1394, 1395, - 1397, 71, 1396, 1399, 71, 71, 71, 1402, 71, 1403, - 71, 1398, 1404, 71, 1405, 71, 71, 71, 71, 71, - 1411, 71, 1407, 71, 1406, 1410, 71, 71, 71, 1417, - 1408, 1413, 1409, 1414, 1418, 71, 71, 1419, 71, 1422, - 1415, 1412, 1420, 71, 71, 71, 1416, 71, 71, 71, - 71, 71, 1426, 1430, 71, 71, 1421, 1425, 71, 71, - 1431, 1433, 71, 1423, 1424, 71, 1436, 71, 1427, 1429, - 1428, 1435, 71, 71, 71, 71, 71, 1434, 71, 71, - 1432, 1437, 71, 71, 1444, 71, 1447, 71, 1445, 71, - 1441, 1446, 1438, 1439, 1440, 71, 71, 1443, 71, 1442, + 71, 71, 71, 1401, 1398, 71, 71, 71, 71, 1399, + 1403, 1407, 1402, 71, 1406, 1408, 1404, 1405, 1409, 71, + 71, 1412, 1413, 1410, 71, 71, 71, 1417, 1411, 1418, + 1414, 1416, 71, 71, 71, 71, 71, 1419, 71, 1420, + 1421, 71, 71, 71, 71, 71, 1415, 1422, 1425, 71, + 1424, 1423, 1427, 71, 1428, 71, 71, 71, 71, 1426, + 1434, 1431, 1436, 1430, 71, 1435, 71, 1437, 71, 1429, + 71, 1432, 71, 1439, 71, 71, 71, 1433, 71, 71, + 1443, 1447, 71, 71, 1438, 1442, 71, 71, 1448, 1440, + 1450, 71, 71, 1441, 71, 1453, 71, 1444, 1452, 1445, - 1448, 71, 1449, 71, 1457, 71, 71, 1453, 71, 1450, - 1451, 1454, 71, 1456, 1460, 71, 1452, 71, 71, 71, - 71, 71, 1461, 1462, 1455, 1463, 1458, 71, 1459, 71, - 1468, 1464, 1469, 71, 71, 71, 71, 71, 1466, 1465, - 71, 1473, 1472, 71, 1474, 1476, 71, 71, 71, 1467, - 71, 1477, 1470, 1478, 71, 71, 1471, 71, 71, 71, - 71, 1481, 71, 1475, 71, 1484, 71, 1482, 1483, 71, - 71, 1479, 71, 1480, 1488, 1485, 71, 1490, 71, 71, - 71, 1494, 71, 1486, 1489, 1487, 71, 71, 71, 71, - 1491, 1497, 71, 1492, 1499, 71, 1495, 71, 71, 1502, + 1446, 71, 71, 71, 71, 71, 71, 71, 1461, 71, + 1451, 71, 1449, 1454, 1462, 71, 71, 1464, 71, 1458, + 1465, 1455, 1456, 1457, 1460, 71, 71, 1459, 1463, 1466, + 71, 71, 71, 71, 1470, 71, 71, 71, 1471, 1467, + 1468, 1473, 71, 1469, 1477, 71, 1479, 1478, 1474, 71, + 71, 1472, 71, 1476, 71, 1475, 71, 71, 71, 1481, + 1482, 1483, 71, 1487, 1480, 1488, 71, 71, 71, 71, + 1484, 71, 71, 71, 1492, 1493, 1485, 1491, 1495, 71, + 71, 71, 1486, 1496, 71, 1489, 1497, 71, 71, 1490, + 71, 1494, 71, 1500, 71, 71, 1503, 71, 71, 71, - 71, 1500, 71, 1498, 1493, 1496, 1505, 71, 71, 1501, - 71, 1504, 71, 1507, 1503, 1508, 71, 71, 71, 71, - 71, 71, 1515, 71, 71, 71, 1506, 71, 1509, 1516, - 71, 1510, 1517, 1513, 1519, 1520, 1524, 1511, 1512, 71, - 71, 1522, 71, 1518, 71, 1514, 1526, 1521, 71, 1523, - 1528, 71, 71, 71, 71, 71, 71, 71, 1533, 1531, - 1525, 1530, 1527, 71, 1534, 71, 71, 71, 71, 71, - 1539, 1538, 1529, 71, 71, 71, 71, 1545, 1542, 1535, - 1532, 1543, 1537, 71, 1536, 1540, 71, 71, 71, 71, - 71, 1546, 1550, 1544, 1541, 1548, 1547, 1551, 71, 71, + 1498, 71, 71, 1502, 1499, 71, 71, 1507, 71, 1509, + 71, 71, 1501, 1504, 71, 1513, 71, 1510, 1505, 1508, + 1506, 1511, 71, 71, 71, 1514, 71, 1516, 1518, 71, + 1519, 71, 1521, 71, 1515, 1512, 71, 71, 1517, 71, + 71, 1524, 1527, 71, 1520, 1526, 71, 1523, 71, 71, + 71, 71, 71, 1534, 71, 1522, 71, 71, 1525, 1535, + 71, 71, 1529, 71, 1528, 1532, 71, 71, 1530, 1531, + 1538, 1539, 71, 71, 1541, 1533, 1536, 1537, 1542, 1543, + 1540, 1545, 71, 1544, 71, 71, 1548, 71, 1547, 71, + 1549, 71, 71, 71, 1552, 71, 1546, 1550, 71, 1553, - 71, 1549, 71, 71, 1552, 71, 1553, 71, 1554, 1555, - 71, 71, 71, 1557, 1772, 71, 1556, 1559, 71, 1562, - 1558, 1561, 1563, 71, 71, 71, 1565, 71, 71, 1564, - 1560, 71, 71, 1568, 71, 1566, 1567, 71, 71, 71, - 71, 1570, 1569, 71, 71, 1577, 71, 1571, 71, 71, - 71, 71, 71, 1573, 1574, 1575, 71, 1576, 1572, 1582, - 71, 1584, 71, 1580, 71, 1585, 1578, 71, 1579, 71, - 71, 1581, 1583, 71, 71, 71, 71, 1586, 71, 71, - 71, 1587, 1590, 1592, 1593, 1600, 71, 1594, 1589, 1591, - 1601, 71, 71, 1588, 1595, 1596, 71, 71, 71, 1599, + 71, 71, 71, 71, 1558, 1557, 71, 71, 71, 1554, + 71, 71, 2946, 1565, 1561, 1551, 1556, 1562, 1555, 1559, + 71, 1564, 71, 71, 1572, 1567, 1560, 71, 1570, 1563, + 71, 1566, 71, 1569, 71, 1568, 1574, 1571, 71, 1573, + 71, 71, 71, 71, 71, 1575, 71, 71, 71, 1581, + 1580, 1582, 1584, 1583, 1576, 71, 71, 71, 71, 71, + 71, 1577, 71, 1578, 1586, 1588, 1579, 1587, 71, 71, + 71, 71, 71, 71, 71, 71, 1596, 71, 71, 1585, + 1589, 71, 71, 1601, 71, 1592, 1593, 1594, 71, 1590, + 1591, 1595, 71, 1597, 1598, 1599, 71, 1603, 1600, 71, - 1597, 1604, 1605, 71, 1598, 71, 71, 71, 71, 1602, - 1603, 71, 1608, 1609, 71, 71, 71, 71, 1606, 71, - 71, 1617, 71, 1612, 71, 1607, 1614, 71, 1616, 1615, - 1610, 1611, 1618, 71, 71, 1613, 1622, 1620, 71, 71, - 1619, 71, 71, 71, 1627, 71, 71, 71, 71, 71, - 1631, 1624, 1621, 1630, 1623, 1629, 1633, 71, 71, 1634, - 1626, 1628, 71, 1638, 1632, 1641, 1625, 71, 1639, 71, - 71, 71, 1643, 71, 71, 1635, 1644, 2910, 71, 1636, - 1637, 1640, 71, 1645, 1646, 71, 71, 1650, 1642, 71, - 71, 1647, 71, 71, 1648, 1652, 71, 1654, 71, 71, + 1604, 71, 71, 71, 71, 71, 71, 71, 1602, 71, + 71, 1605, 71, 1609, 1611, 1606, 1619, 71, 71, 1612, + 1610, 1608, 1613, 1620, 71, 1614, 1607, 1615, 71, 71, + 71, 1617, 1616, 1618, 71, 71, 1622, 1623, 1624, 71, + 1621, 71, 1625, 71, 71, 71, 1627, 71, 1628, 71, + 71, 71, 1636, 71, 1626, 71, 1631, 71, 71, 1633, + 1635, 1630, 1634, 1629, 1637, 71, 71, 71, 1632, 1641, + 1639, 71, 71, 1638, 71, 71, 1646, 71, 71, 71, + 71, 71, 71, 1642, 1640, 1649, 1643, 1648, 71, 1650, + 1645, 1652, 71, 1647, 1653, 1657, 1644, 1654, 71, 71, - 1649, 1653, 1651, 71, 1655, 71, 71, 71, 71, 71, - 71, 1664, 71, 1658, 71, 1659, 1666, 1656, 1657, 1667, - 1660, 1661, 71, 1662, 1663, 71, 71, 1668, 71, 71, - 71, 1673, 71, 1665, 71, 71, 71, 71, 1677, 71, - 71, 1672, 71, 71, 1679, 71, 1669, 1670, 1680, 1671, - 1675, 1683, 71, 1676, 1674, 71, 1678, 1681, 71, 71, - 1682, 1686, 71, 71, 71, 1690, 71, 71, 1684, 71, - 71, 71, 71, 1685, 71, 1688, 1692, 71, 1687, 1697, - 71, 1691, 1693, 1689, 1694, 71, 71, 1701, 71, 1698, - 1695, 71, 1700, 71, 1696, 71, 1702, 71, 1699, 1703, + 1658, 71, 1655, 1651, 71, 1662, 71, 1664, 71, 1665, + 1656, 71, 1659, 71, 1660, 71, 1667, 71, 1666, 71, + 71, 1671, 71, 1668, 1663, 71, 1661, 71, 71, 1675, + 71, 1673, 71, 71, 1670, 71, 71, 1674, 1672, 1669, + 1676, 71, 71, 71, 1679, 71, 71, 1685, 71, 1677, + 1680, 1687, 1678, 71, 71, 1681, 1682, 71, 1688, 1683, + 1684, 71, 71, 71, 71, 1694, 1689, 71, 71, 1686, + 71, 71, 1698, 71, 1690, 71, 1693, 71, 71, 1691, + 71, 1692, 1700, 71, 1696, 1701, 71, 71, 1697, 1695, + 71, 1702, 1703, 1707, 71, 1699, 71, 71, 1706, 1704, - 71, 1706, 1704, 1708, 1705, 1707, 71, 71, 71, 71, - 1709, 71, 1710, 71, 71, 71, 71, 71, 71, 71, - 71, 1715, 71, 71, 71, 1719, 1716, 71, 1724, 71, - 1717, 1711, 1713, 1714, 1718, 1712, 1720, 1725, 1723, 71, - 71, 71, 1722, 71, 71, 1726, 1730, 71, 71, 1721, - 71, 1733, 1734, 71, 1735, 71, 1728, 71, 1727, 1737, - 71, 1729, 1731, 71, 1732, 71, 1738, 1736, 1741, 71, - 71, 1743, 71, 1745, 1742, 1744, 71, 71, 1739, 71, - 1747, 71, 71, 71, 1740, 1749, 71, 1750, 71, 71, - 1751, 1752, 71, 1759, 1746, 71, 71, 71, 71, 71, + 1705, 71, 1711, 71, 71, 71, 71, 71, 71, 1709, + 71, 1718, 1713, 71, 71, 1708, 2946, 71, 1712, 1714, + 1710, 71, 1715, 1722, 71, 1716, 1719, 1721, 1717, 71, + 71, 1720, 1723, 1724, 71, 1725, 71, 1727, 1728, 71, + 71, 71, 71, 71, 1730, 1726, 71, 71, 71, 1731, + 71, 71, 1729, 71, 71, 71, 1736, 71, 71, 1740, + 71, 1732, 1737, 71, 71, 71, 1734, 1738, 1735, 1733, + 1745, 71, 1739, 1741, 1746, 1744, 71, 71, 1743, 71, + 71, 1749, 71, 71, 1747, 1751, 1742, 71, 1754, 1755, + 71, 1756, 71, 1758, 71, 1748, 1752, 1750, 1753, 1757, - 1764, 71, 71, 1757, 71, 1761, 1748, 1753, 1754, 1755, - 1762, 71, 1758, 1765, 1756, 1763, 1760, 1767, 71, 1766, - 71, 71, 71, 71, 1771, 71, 71, 1768, 71, 1773, - 71, 1776, 1777, 71, 71, 1779, 71, 71, 71, 71, - 1769, 71, 1770, 71, 1775, 1784, 1774, 1781, 1782, 1785, - 71, 71, 71, 71, 1778, 71, 1787, 71, 71, 1791, - 1788, 71, 1780, 71, 1783, 71, 1789, 71, 1795, 71, - 1794, 71, 1801, 1786, 71, 71, 1798, 1799, 1797, 1793, - 71, 1790, 71, 71, 1800, 71, 71, 1792, 71, 1796, - 71, 1806, 71, 71, 1804, 1802, 71, 1809, 1810, 71, + 71, 1759, 71, 71, 1762, 71, 71, 1764, 71, 1766, + 1763, 1765, 71, 71, 1768, 71, 71, 71, 71, 71, + 71, 1770, 71, 1760, 1761, 1771, 71, 71, 1772, 1773, + 1767, 1774, 1775, 1776, 1780, 71, 71, 1778, 1777, 1782, + 71, 1769, 1779, 71, 1783, 71, 71, 71, 1785, 71, + 71, 71, 71, 1788, 1792, 71, 1781, 1784, 1786, 71, + 1789, 71, 71, 1794, 1787, 71, 71, 71, 1797, 71, + 1790, 1798, 71, 1791, 1800, 71, 71, 71, 71, 1806, + 71, 71, 71, 71, 71, 1795, 1802, 1793, 1796, 1799, + 1803, 1805, 71, 71, 2946, 71, 71, 71, 1808, 1804, - 1803, 71, 1805, 71, 71, 71, 71, 1813, 71, 71, - 1807, 71, 71, 2910, 1812, 1821, 1819, 1822, 71, 1808, - 71, 1811, 71, 1814, 1817, 1815, 1820, 1816, 71, 71, - 1818, 71, 1823, 1824, 1826, 71, 71, 71, 1825, 71, - 71, 1833, 1830, 71, 71, 1828, 71, 71, 2910, 1835, - 1827, 1836, 71, 71, 1837, 1829, 71, 71, 1834, 1831, - 1832, 1838, 71, 1843, 71, 1839, 1842, 1844, 71, 1845, - 1847, 1848, 71, 1840, 1846, 71, 71, 71, 1841, 71, - 71, 1852, 71, 71, 1850, 71, 71, 71, 71, 1854, - 1857, 1859, 1851, 71, 1853, 1855, 71, 71, 1849, 71, + 1809, 1801, 71, 1807, 1810, 71, 1812, 1815, 1816, 71, + 1811, 1819, 1814, 71, 71, 1820, 71, 71, 1813, 71, + 1818, 71, 1821, 71, 1822, 1823, 71, 71, 71, 1817, + 71, 71, 71, 1827, 71, 1830, 1831, 71, 71, 1826, + 71, 71, 71, 71, 1834, 71, 1824, 1825, 71, 1828, + 1838, 71, 71, 1833, 71, 71, 71, 1832, 1829, 1842, + 1835, 1836, 1843, 1844, 71, 1837, 1840, 1839, 1845, 71, + 71, 1841, 1849, 71, 1846, 1847, 71, 71, 71, 71, + 1848, 71, 71, 1853, 1856, 71, 71, 71, 1859, 71, + 71, 1851, 1858, 71, 1860, 71, 71, 1850, 1852, 1861, - 71, 71, 71, 1865, 71, 1860, 1863, 1864, 1866, 71, - 1858, 1856, 1861, 1867, 71, 71, 1869, 71, 1862, 71, - 71, 71, 71, 1870, 1871, 71, 1872, 71, 1875, 71, - 1873, 71, 1874, 71, 1877, 1868, 71, 71, 1881, 71, - 71, 1876, 1880, 1878, 71, 71, 71, 71, 1879, 1882, - 1883, 1884, 1885, 71, 71, 71, 1887, 71, 71, 1892, - 71, 1890, 71, 1891, 1886, 71, 71, 1894, 71, 1897, - 71, 1898, 1888, 71, 1889, 71, 1893, 71, 1895, 71, - 71, 71, 1899, 71, 1902, 71, 1896, 1900, 1904, 71, - 71, 71, 71, 1903, 1905, 1910, 71, 1906, 1901, 1907, + 1857, 1854, 1855, 71, 71, 1862, 1865, 1866, 71, 1867, + 71, 1868, 1870, 71, 1863, 1871, 1869, 71, 71, 1864, + 71, 71, 71, 1875, 71, 1873, 71, 71, 71, 71, + 1872, 1877, 71, 1880, 1874, 1881, 1876, 1882, 1878, 71, + 71, 71, 71, 71, 1883, 71, 71, 1886, 1887, 71, + 1888, 2946, 1884, 1879, 1889, 71, 1890, 71, 1892, 71, + 1885, 71, 71, 71, 71, 1893, 1891, 1894, 71, 1895, + 1896, 71, 71, 1897, 1898, 71, 1900, 71, 71, 71, + 71, 1904, 71, 71, 1899, 1903, 71, 71, 1905, 1901, + 1902, 1906, 1907, 1908, 71, 71, 71, 71, 71, 71, - 1908, 71, 71, 1912, 1909, 71, 71, 1913, 71, 1911, - 1914, 71, 71, 1918, 1915, 1916, 1917, 71, 71, 71, - 71, 71, 71, 71, 71, 71, 1919, 2910, 71, 71, - 1926, 1921, 1922, 1923, 1930, 71, 71, 71, 1925, 1920, - 1929, 71, 1934, 1927, 1933, 1928, 71, 1931, 1924, 71, - 71, 71, 1937, 71, 1936, 71, 1932, 71, 1939, 71, - 71, 71, 1940, 71, 71, 1945, 1935, 71, 1941, 1938, - 1943, 71, 1944, 1947, 71, 1942, 1949, 71, 71, 71, - 1952, 1948, 71, 1946, 1951, 71, 71, 1953, 71, 1957, - 1954, 71, 71, 71, 71, 71, 1958, 71, 1963, 71, + 71, 1915, 1913, 1909, 1910, 1914, 71, 71, 71, 1917, + 71, 71, 1921, 1916, 1911, 71, 1912, 71, 71, 1920, + 1918, 71, 71, 71, 1919, 1928, 1922, 1923, 1925, 1927, + 71, 71, 71, 2946, 1926, 71, 1933, 71, 71, 1924, + 71, 1935, 71, 71, 71, 1936, 71, 1929, 1930, 71, + 1931, 1932, 1937, 71, 1938, 1934, 1939, 71, 1941, 71, + 71, 71, 71, 71, 1940, 71, 71, 71, 1942, 71, + 71, 71, 1949, 1944, 1945, 1946, 1953, 71, 71, 71, + 2946, 1943, 1948, 1952, 71, 1950, 71, 1956, 1954, 1951, + 71, 1947, 71, 71, 71, 1957, 1960, 1959, 1955, 1958, - 1950, 1960, 71, 1964, 1955, 1959, 71, 71, 1956, 1967, - 71, 1962, 71, 1961, 71, 71, 1969, 1968, 1970, 1972, - 71, 1965, 71, 71, 1974, 71, 1971, 1966, 71, 1975, - 71, 71, 1981, 71, 1973, 1979, 71, 1982, 71, 1976, - 1977, 71, 71, 1978, 71, 1983, 1980, 71, 71, 1986, - 71, 71, 1987, 1984, 1985, 1991, 71, 71, 71, 71, - 1990, 1988, 71, 71, 71, 71, 71, 71, 71, 71, - 1989, 2000, 2001, 1995, 71, 1992, 1993, 1997, 1994, 1996, - 1998, 71, 71, 1999, 71, 71, 71, 71, 2003, 2007, - 2002, 2005, 2006, 2011, 71, 71, 2010, 2013, 71, 71, + 71, 71, 1964, 71, 1961, 1962, 71, 71, 1963, 71, + 71, 1968, 71, 71, 1970, 1966, 1972, 71, 71, 1967, + 71, 1965, 71, 71, 1975, 1974, 71, 1971, 1976, 1969, + 71, 1977, 71, 1980, 71, 71, 71, 71, 71, 71, + 1981, 71, 71, 71, 1973, 1983, 2048, 1982, 1978, 1986, + 71, 1990, 1979, 71, 1987, 1984, 1985, 71, 1988, 71, + 71, 1989, 1992, 71, 1991, 1995, 71, 71, 71, 71, + 1997, 1993, 71, 1998, 71, 71, 1999, 71, 71, 1994, + 1996, 71, 2000, 2004, 2002, 2006, 71, 2003, 71, 71, + 2007, 71, 2001, 71, 71, 2008, 71, 71, 2011, 2005, - 71, 2004, 2008, 71, 2012, 2016, 71, 2015, 2018, 2020, - 2021, 2009, 71, 2019, 71, 71, 71, 71, 2014, 2017, - 2022, 71, 2025, 71, 71, 2026, 71, 2030, 71, 2023, - 71, 2031, 2024, 71, 71, 2029, 2034, 71, 71, 2027, - 71, 2036, 71, 2035, 71, 2032, 2037, 71, 2039, 2038, - 2028, 71, 2033, 71, 71, 2040, 71, 2041, 71, 71, - 2042, 71, 71, 2044, 71, 71, 71, 2047, 2050, 71, - 2051, 71, 71, 71, 71, 71, 2046, 2053, 2043, 71, - 2049, 71, 2045, 2048, 2057, 71, 2052, 2055, 2060, 71, - 71, 71, 71, 2056, 2058, 71, 71, 71, 2061, 2054, + 2009, 2010, 2012, 71, 2016, 71, 71, 2013, 71, 71, + 71, 71, 2015, 71, 71, 71, 2014, 71, 71, 2036, + 71, 71, 2022, 2023, 2017, 2019, 2018, 2020, 71, 2021, + 2027, 71, 71, 2025, 71, 2024, 2026, 71, 2028, 71, + 2030, 2031, 2034, 71, 71, 71, 2038, 71, 2946, 71, + 71, 2029, 2032, 2035, 2037, 71, 71, 2033, 2045, 2040, + 2043, 2041, 2039, 2042, 71, 2044, 71, 2046, 71, 2049, + 71, 2047, 71, 71, 2050, 71, 71, 2051, 71, 2054, + 2055, 71, 71, 2056, 2057, 71, 2059, 71, 2061, 71, + 2060, 2052, 71, 2062, 71, 71, 2058, 2064, 71, 71, - 71, 71, 71, 2059, 71, 2071, 71, 2910, 71, 71, - 2062, 2063, 2072, 2068, 71, 71, 2066, 2910, 2064, 2070, - 2065, 2067, 2074, 2069, 71, 2076, 71, 2073, 2075, 2077, - 71, 2078, 71, 71, 71, 2081, 71, 2084, 71, 71, - 71, 2079, 71, 71, 2085, 2082, 2080, 2086, 2083, 71, - 2090, 71, 2091, 71, 71, 2093, 71, 71, 2095, 71, - 2087, 2089, 71, 2088, 71, 2098, 71, 2099, 71, 2097, - 71, 71, 71, 2092, 71, 2094, 71, 2096, 2105, 71, - 2101, 2104, 71, 71, 2100, 71, 2102, 2107, 71, 2109, - 71, 71, 71, 2103, 2110, 71, 2111, 2113, 71, 71, + 2063, 71, 2053, 71, 71, 2065, 71, 71, 2067, 2066, + 71, 2069, 2072, 71, 71, 2075, 71, 71, 71, 71, + 71, 2076, 2070, 2068, 2078, 2071, 71, 71, 71, 71, + 2074, 2073, 2082, 2077, 71, 2085, 71, 71, 2080, 71, + 71, 71, 2083, 71, 71, 2086, 2079, 2081, 71, 71, + 71, 71, 2084, 2096, 71, 71, 71, 71, 2087, 2088, + 2097, 2093, 71, 2091, 2089, 71, 2095, 2090, 2098, 2092, + 2099, 2094, 71, 2101, 71, 2100, 2102, 71, 2103, 71, + 2104, 71, 2106, 71, 2109, 71, 71, 2105, 71, 71, + 71, 2110, 2107, 2111, 71, 2108, 2115, 71, 2116, 71, - 71, 2106, 71, 2108, 2117, 71, 71, 2115, 71, 2114, - 71, 2112, 2121, 2122, 71, 71, 71, 71, 2116, 71, - 2118, 2120, 2126, 71, 71, 2119, 2128, 71, 71, 2123, - 2124, 2125, 71, 2131, 71, 71, 71, 2127, 2129, 71, - 71, 2133, 71, 2132, 71, 2136, 71, 2135, 2134, 2137, - 71, 71, 71, 2130, 71, 2139, 2141, 2143, 71, 2144, - 2146, 2138, 71, 2148, 71, 71, 71, 2140, 71, 71, - 2149, 71, 71, 2145, 2153, 71, 2142, 2150, 71, 71, - 71, 2152, 71, 2147, 2154, 71, 2159, 2155, 2156, 2151, - 2160, 2157, 71, 71, 2158, 71, 71, 2161, 71, 2164, + 71, 2118, 71, 71, 2120, 71, 2114, 71, 71, 2112, + 2113, 2123, 71, 2122, 2124, 71, 71, 71, 71, 2117, + 71, 2119, 2121, 71, 2130, 71, 2126, 71, 2129, 71, + 2125, 71, 2127, 2132, 71, 71, 71, 2134, 2135, 2128, + 71, 2136, 2138, 71, 71, 71, 2131, 2133, 2142, 71, + 71, 71, 71, 71, 71, 2139, 2137, 2146, 71, 2140, + 2147, 71, 71, 71, 2141, 2151, 71, 2145, 71, 71, + 2143, 71, 2154, 2148, 2144, 71, 2153, 2149, 2150, 71, + 71, 2158, 71, 71, 71, 2160, 71, 71, 2152, 2155, + 71, 2159, 2163, 2156, 71, 2164, 71, 71, 2162, 71, - 2165, 71, 2166, 71, 2163, 2162, 71, 71, 71, 71, - 2167, 71, 2172, 71, 71, 71, 71, 71, 2174, 71, - 2183, 71, 2173, 2168, 2170, 2169, 2175, 2171, 2178, 71, - 71, 2176, 2177, 2179, 2180, 71, 71, 2184, 71, 2181, - 2185, 71, 71, 2187, 2188, 2186, 2189, 2182, 2190, 71, - 71, 71, 71, 71, 2192, 71, 71, 71, 71, 2196, - 71, 2199, 71, 71, 2197, 2191, 2198, 2193, 71, 71, - 2194, 71, 71, 2200, 71, 71, 2195, 71, 2201, 2203, - 2204, 71, 2206, 71, 71, 2205, 71, 71, 71, 2213, - 2210, 2202, 71, 2212, 2207, 71, 71, 71, 2209, 71, + 71, 71, 71, 71, 2161, 2157, 2168, 2170, 2171, 2166, + 2173, 71, 71, 71, 2175, 2172, 71, 2176, 2167, 2165, + 71, 71, 71, 71, 71, 2169, 2177, 2180, 71, 71, + 71, 71, 2174, 71, 71, 2179, 2232, 2181, 2178, 2182, + 2183, 2186, 2184, 2185, 2187, 71, 71, 71, 71, 2188, + 71, 71, 2191, 2192, 2189, 2190, 71, 2193, 71, 71, + 71, 2199, 71, 71, 71, 2194, 71, 71, 2195, 71, + 2196, 71, 71, 2201, 2197, 2206, 2198, 71, 2200, 2202, + 71, 71, 2203, 2205, 2204, 2207, 2210, 71, 71, 2211, + 2212, 71, 71, 2209, 71, 2213, 2215, 2208, 2216, 2214, - 2218, 71, 2214, 2208, 2217, 71, 71, 2211, 71, 2219, - 2215, 2223, 71, 2216, 2220, 71, 2222, 71, 71, 2221, - 71, 2225, 2226, 2227, 71, 2229, 71, 71, 71, 71, - 2231, 71, 71, 71, 71, 71, 2228, 2230, 2241, 2235, - 2239, 71, 71, 2224, 71, 2232, 2233, 2237, 71, 2234, - 2240, 71, 71, 2238, 71, 2242, 71, 71, 71, 71, - 71, 2236, 2245, 2248, 71, 71, 2250, 71, 2243, 2249, - 71, 2247, 71, 2253, 71, 71, 71, 2246, 2244, 71, - 2256, 2258, 2252, 2251, 2257, 71, 71, 71, 71, 2254, - 2260, 2259, 71, 2255, 71, 71, 2265, 71, 2266, 71, + 2217, 71, 71, 71, 71, 71, 2219, 71, 71, 71, + 71, 2223, 71, 2226, 71, 71, 2224, 2218, 2225, 2220, + 71, 71, 2221, 71, 71, 2227, 71, 71, 2222, 2233, + 2228, 2230, 2231, 71, 71, 71, 71, 71, 71, 71, + 2237, 2240, 71, 2229, 2239, 71, 2234, 71, 2241, 2236, + 71, 71, 2245, 71, 2235, 2244, 2242, 2238, 71, 2246, + 71, 2243, 2247, 71, 2249, 71, 71, 2248, 2250, 71, + 2252, 71, 2254, 71, 71, 2253, 2256, 71, 71, 2258, + 71, 71, 71, 2257, 71, 2255, 71, 71, 71, 71, + 71, 2262, 2251, 2264, 2265, 71, 2260, 2266, 71, 2259, - 2264, 2261, 2267, 71, 2268, 71, 2262, 71, 71, 71, - 71, 71, 2272, 71, 2263, 2271, 71, 2273, 71, 2269, - 71, 2274, 2278, 71, 71, 2275, 2270, 2280, 71, 2281, - 71, 71, 71, 71, 71, 71, 2277, 71, 2276, 71, - 2284, 71, 2282, 2279, 2283, 71, 2285, 2290, 71, 71, - 2287, 71, 71, 71, 71, 2286, 71, 2288, 2291, 2289, - 71, 2297, 71, 71, 71, 2294, 71, 2292, 2296, 71, - 71, 2293, 2298, 2304, 2301, 71, 2910, 2295, 71, 2299, - 71, 2300, 71, 2306, 2302, 2307, 2308, 71, 71, 2305, - 2309, 71, 2303, 71, 2310, 71, 2311, 71, 2312, 2314, + 2261, 2267, 71, 2268, 71, 2269, 2270, 71, 71, 71, + 71, 71, 2272, 2263, 2275, 71, 71, 2271, 2277, 71, + 2276, 71, 2274, 71, 71, 2280, 71, 2273, 71, 2283, + 2284, 71, 71, 71, 2278, 71, 2279, 2285, 2281, 71, + 71, 2282, 71, 71, 2287, 2288, 71, 71, 2289, 2294, + 71, 2286, 2293, 2290, 2295, 71, 2291, 2296, 71, 2297, + 71, 71, 71, 2292, 71, 71, 2301, 71, 2302, 2300, + 71, 71, 71, 2298, 71, 2307, 71, 71, 2309, 71, + 2299, 71, 2303, 2304, 2310, 71, 71, 71, 71, 71, + 2306, 71, 2305, 2312, 2313, 71, 2308, 2311, 71, 71, - 2313, 71, 71, 71, 71, 71, 71, 71, 71, 2323, - 71, 2324, 71, 71, 71, 2320, 2327, 71, 2329, 71, - 2315, 2317, 2316, 2326, 71, 2319, 2318, 2321, 2322, 71, - 71, 71, 71, 2328, 71, 2325, 71, 71, 2332, 71, - 2338, 71, 2339, 71, 71, 2340, 71, 2330, 2331, 2333, - 2334, 71, 71, 2336, 2335, 71, 71, 71, 2337, 71, - 2344, 2342, 2341, 71, 2347, 2348, 2349, 71, 71, 71, - 2350, 2343, 2351, 71, 71, 71, 2345, 2346, 71, 71, - 71, 71, 71, 2353, 71, 2357, 71, 71, 2352, 2361, - 2355, 2362, 71, 71, 2354, 2365, 71, 71, 71, 2356, + 2314, 2319, 71, 2316, 71, 71, 71, 71, 2320, 2315, + 71, 2317, 71, 2326, 71, 2318, 71, 71, 71, 2323, + 71, 71, 71, 2327, 2325, 2322, 71, 2337, 71, 2333, + 2321, 2324, 2328, 2329, 2330, 71, 2334, 71, 71, 71, + 2335, 71, 2331, 2336, 2332, 2338, 71, 71, 2339, 71, + 2340, 71, 2341, 71, 71, 2342, 71, 71, 2344, 71, + 71, 2345, 71, 71, 2343, 71, 2352, 71, 2349, 2353, + 71, 71, 2346, 2356, 71, 71, 2355, 2348, 2347, 71, + 2350, 2351, 2358, 71, 2354, 71, 71, 71, 2357, 2359, + 71, 71, 2361, 2360, 71, 2367, 71, 2368, 71, 71, - 71, 2358, 2360, 2359, 2366, 2364, 71, 71, 2363, 71, - 2368, 2370, 2367, 2369, 71, 2373, 71, 71, 71, 2375, - 71, 2377, 71, 71, 71, 71, 2910, 2371, 2378, 2372, - 2374, 2380, 71, 71, 2381, 71, 2376, 2379, 2383, 71, - 71, 71, 71, 2388, 71, 71, 2382, 71, 2384, 71, - 2386, 2387, 2391, 2385, 2390, 71, 71, 71, 71, 71, - 2389, 2392, 2394, 2393, 71, 71, 2395, 71, 71, 71, - 71, 71, 71, 2397, 2400, 2398, 2401, 2405, 2396, 71, - 2399, 2403, 71, 2402, 2404, 71, 71, 2409, 71, 71, - 2407, 2406, 2910, 71, 2410, 71, 2411, 2408, 71, 71, + 2369, 2362, 71, 71, 71, 2363, 71, 2365, 2364, 2373, + 71, 71, 2946, 2366, 71, 2378, 71, 2370, 2371, 2376, + 71, 2372, 2377, 71, 71, 2379, 2380, 71, 71, 71, + 2374, 2375, 71, 71, 71, 71, 71, 2382, 71, 2386, + 2391, 71, 71, 2381, 2384, 2390, 71, 71, 2383, 2394, + 71, 71, 71, 2385, 71, 2387, 2389, 2388, 2395, 71, + 71, 2392, 71, 2397, 71, 2393, 2396, 2398, 71, 2402, + 71, 71, 2400, 2399, 71, 71, 2403, 71, 2405, 71, + 2404, 71, 2401, 2406, 71, 2408, 71, 71, 2436, 2410, + 2411, 71, 2409, 71, 2407, 71, 2412, 2414, 71, 71, - 2414, 71, 2910, 2412, 2413, 2415, 71, 2417, 71, 71, - 2419, 2416, 2418, 71, 71, 2420, 71, 2423, 2421, 2422, - 71, 71, 71, 71, 2424, 71, 2425, 71, 71, 71, - 71, 2426, 71, 2429, 71, 2428, 71, 2431, 71, 2432, - 2427, 2430, 2433, 2434, 71, 71, 71, 71, 71, 2435, - 71, 2440, 2436, 71, 71, 2438, 2439, 2441, 2437, 71, - 2445, 71, 71, 71, 71, 71, 2449, 71, 71, 71, - 71, 71, 2442, 2447, 2443, 2453, 2454, 71, 2444, 2456, - 2448, 2446, 2450, 2451, 2457, 71, 2458, 2459, 71, 2452, - 71, 71, 71, 71, 71, 2455, 71, 71, 2461, 2460, + 71, 2413, 71, 2419, 71, 71, 2415, 2421, 71, 2417, + 71, 2418, 2416, 71, 71, 2422, 71, 71, 2423, 71, + 2420, 2425, 71, 2946, 71, 2426, 71, 71, 2424, 71, + 71, 2428, 2429, 71, 2431, 2432, 2434, 71, 2427, 2435, + 71, 2430, 2433, 71, 71, 71, 2440, 2946, 2437, 71, + 2441, 2438, 71, 71, 2442, 71, 2445, 71, 2446, 71, + 2444, 71, 2439, 2450, 2443, 2448, 71, 71, 2451, 71, + 2449, 71, 71, 2454, 2447, 71, 2452, 2453, 71, 71, + 2456, 71, 2455, 71, 71, 71, 71, 71, 71, 71, + 2457, 2460, 2459, 2462, 71, 71, 71, 2461, 2458, 2463, - 71, 2464, 71, 2462, 71, 2467, 2468, 71, 71, 2463, - 2469, 71, 2470, 71, 2465, 2471, 71, 2466, 2473, 71, - 71, 2476, 71, 2474, 71, 2477, 71, 71, 2472, 2478, - 71, 71, 71, 71, 2479, 2480, 2483, 71, 71, 2475, - 71, 2484, 2485, 71, 71, 2481, 2487, 71, 2486, 71, - 2491, 2488, 2482, 2492, 71, 71, 71, 71, 71, 2493, - 2494, 71, 2489, 2490, 71, 2495, 71, 2500, 71, 71, - 2499, 71, 71, 71, 2504, 2502, 2503, 71, 2497, 71, - 2496, 2498, 71, 71, 71, 2506, 2508, 2505, 71, 71, - 71, 71, 71, 2501, 2511, 2515, 71, 2507, 2518, 71, + 2465, 2464, 71, 71, 71, 2467, 71, 2466, 71, 2471, + 71, 71, 71, 2469, 2474, 2470, 2468, 2476, 71, 2472, + 71, 71, 71, 71, 2480, 71, 71, 71, 71, 71, + 2473, 2475, 2478, 2484, 2485, 71, 2479, 2487, 2488, 2477, + 2946, 2481, 2482, 71, 71, 2489, 2483, 2490, 71, 71, + 71, 71, 71, 2486, 71, 2492, 71, 2491, 71, 71, + 2495, 2493, 71, 2498, 2499, 71, 71, 2494, 2500, 71, + 2501, 71, 2496, 71, 2497, 71, 2506, 2502, 2504, 71, + 2503, 2507, 71, 71, 71, 2509, 2505, 2510, 71, 2511, + 71, 71, 71, 71, 2512, 71, 2516, 71, 71, 2517, - 71, 2509, 2510, 2519, 71, 2514, 2512, 2517, 2521, 71, - 2513, 2516, 71, 2522, 71, 2523, 71, 2524, 71, 2520, - 71, 2525, 71, 71, 71, 71, 71, 2527, 71, 2533, - 71, 71, 71, 71, 2526, 2530, 2534, 2536, 71, 2537, - 2538, 71, 71, 2528, 71, 2531, 71, 2539, 2532, 2535, - 2529, 2540, 71, 2541, 71, 2542, 71, 2545, 71, 71, - 71, 71, 71, 2543, 2546, 2549, 2553, 71, 2547, 71, - 2550, 71, 71, 71, 2544, 2551, 2548, 71, 2552, 71, - 71, 2560, 2555, 71, 71, 71, 71, 71, 71, 2556, - 2554, 2563, 2558, 2564, 71, 2565, 2561, 71, 71, 71, + 2518, 71, 71, 2508, 71, 2513, 2520, 71, 71, 71, + 2524, 2514, 2525, 71, 71, 2515, 71, 2519, 2526, 2527, + 71, 2521, 2522, 2523, 2528, 71, 71, 71, 71, 2533, + 71, 71, 71, 71, 2532, 71, 2535, 2536, 71, 71, + 71, 2538, 71, 2529, 2537, 2539, 2530, 2531, 71, 71, + 71, 2541, 71, 71, 2544, 2534, 2540, 2542, 2543, 2548, + 71, 71, 71, 71, 2554, 71, 71, 2547, 2545, 2551, + 2550, 71, 2546, 2946, 2552, 71, 71, 2555, 71, 2556, + 2549, 71, 2553, 71, 2557, 71, 2558, 2559, 71, 71, + 71, 71, 2562, 2560, 2566, 71, 71, 71, 2563, 2567, - 2559, 71, 2567, 71, 2557, 2784, 2562, 2566, 71, 2568, - 2570, 71, 2569, 2571, 71, 2572, 71, 71, 71, 2574, - 2575, 2577, 71, 2576, 71, 71, 2573, 71, 71, 2578, - 2579, 2580, 71, 71, 71, 2585, 71, 71, 2583, 71, - 2581, 71, 2587, 71, 71, 2591, 71, 71, 71, 2582, - 71, 71, 2584, 71, 2589, 2594, 2588, 2595, 71, 71, - 2592, 2586, 71, 2593, 2590, 71, 71, 2598, 71, 2596, - 2599, 2601, 71, 2603, 71, 2604, 71, 2597, 2606, 71, - 71, 71, 71, 2611, 71, 2602, 71, 71, 2600, 2605, - 71, 2610, 71, 71, 2615, 71, 2607, 2608, 2609, 71, + 71, 2561, 2569, 71, 2571, 71, 71, 2570, 71, 71, + 2564, 2565, 71, 2572, 71, 2568, 2573, 71, 2574, 2578, + 71, 2575, 71, 2576, 2577, 71, 2579, 71, 71, 71, + 2582, 71, 71, 71, 2580, 2583, 71, 2586, 2585, 2587, + 71, 2584, 2581, 2588, 71, 71, 71, 71, 71, 2589, + 2595, 71, 71, 2594, 2590, 71, 71, 2593, 2591, 71, + 2598, 71, 2600, 2596, 2599, 71, 71, 2605, 71, 2606, + 71, 2602, 2592, 2597, 2601, 71, 2603, 2607, 71, 2604, + 71, 71, 71, 71, 2612, 71, 71, 2611, 71, 2608, + 71, 2613, 71, 2614, 2615, 71, 71, 71, 71, 71, - 71, 2619, 71, 71, 2617, 2620, 71, 2612, 71, 2616, - 71, 2614, 71, 2613, 2622, 71, 71, 71, 2627, 2624, - 71, 2625, 2618, 2621, 71, 2631, 71, 71, 71, 2629, - 2626, 2632, 71, 2633, 2623, 2628, 71, 2636, 71, 2634, - 2630, 2637, 71, 71, 71, 2639, 71, 2638, 71, 71, - 71, 71, 2644, 2641, 2642, 71, 2635, 2643, 71, 2647, - 71, 2648, 71, 71, 2640, 2651, 71, 2645, 2646, 2652, - 71, 71, 2650, 71, 2649, 71, 2653, 2656, 71, 71, - 2655, 2657, 71, 2658, 71, 71, 71, 2654, 2660, 71, - 2659, 71, 71, 71, 2665, 2666, 71, 71, 2661, 71, + 2620, 2609, 2610, 2616, 2618, 71, 71, 2622, 71, 71, + 2626, 71, 71, 2617, 2619, 71, 71, 2623, 71, 71, + 2624, 71, 2621, 2629, 71, 2627, 71, 2630, 2628, 2625, + 71, 71, 2631, 71, 2633, 2634, 2636, 71, 2638, 71, + 2632, 2639, 71, 71, 2641, 71, 71, 2642, 71, 71, + 2635, 71, 2637, 2645, 2646, 71, 71, 71, 71, 2650, + 71, 71, 2643, 71, 2640, 2644, 2652, 71, 2653, 2655, + 71, 2647, 2656, 71, 2651, 71, 2649, 2658, 71, 2648, + 71, 71, 71, 2654, 71, 71, 2663, 71, 2667, 71, + 2661, 2660, 71, 71, 71, 2657, 2668, 2659, 71, 2665, - 71, 2670, 71, 71, 71, 71, 2673, 71, 2662, 2669, - 2672, 2667, 71, 2663, 2664, 2674, 71, 2675, 2676, 2668, - 2677, 71, 2671, 71, 2680, 71, 71, 71, 71, 71, - 71, 2679, 2681, 2678, 71, 2684, 71, 71, 71, 71, - 71, 71, 2686, 71, 71, 2687, 2685, 71, 2682, 2683, - 71, 71, 71, 2699, 71, 71, 2696, 2688, 2761, 2689, - 2690, 2691, 2695, 2692, 2697, 2698, 2910, 2693, 2694, 2700, - 71, 71, 2702, 71, 71, 2701, 2703, 71, 2704, 2705, - 71, 71, 2706, 2707, 2710, 71, 2708, 2709, 71, 71, - 2711, 71, 2712, 71, 2715, 71, 71, 71, 2714, 71, + 71, 2669, 2662, 2664, 2672, 2666, 2670, 2673, 71, 71, + 71, 2675, 2674, 71, 71, 71, 71, 71, 2671, 2677, + 2678, 2680, 71, 2683, 71, 2684, 71, 71, 71, 71, + 71, 2676, 2687, 71, 2946, 2679, 2688, 71, 2686, 2681, + 2682, 71, 71, 71, 2690, 71, 2689, 2685, 2691, 2692, + 71, 2693, 71, 2694, 71, 71, 2696, 71, 71, 71, + 2695, 2697, 71, 2701, 2702, 71, 71, 2698, 71, 71, + 2706, 71, 71, 71, 71, 2709, 71, 71, 2705, 2708, + 2699, 2700, 2703, 2710, 71, 71, 2704, 2712, 2713, 2714, + 2711, 2707, 71, 71, 71, 2716, 71, 71, 2717, 71, - 71, 71, 2713, 2718, 2717, 71, 71, 71, 2723, 2719, - 2724, 71, 2725, 71, 71, 2722, 2720, 71, 71, 2730, - 2732, 2716, 2727, 2721, 2731, 71, 71, 2728, 71, 2726, - 2729, 71, 71, 71, 71, 71, 71, 2736, 71, 2737, - 2739, 71, 2854, 2740, 2741, 71, 2734, 2742, 71, 2743, - 71, 2744, 71, 2733, 2735, 2738, 2745, 71, 2746, 71, - 2747, 71, 2748, 71, 71, 2750, 71, 71, 71, 71, - 2753, 71, 71, 2749, 71, 71, 2757, 71, 2759, 71, - 71, 71, 71, 2754, 71, 2755, 2756, 2751, 2752, 71, - 2763, 71, 2758, 2766, 2765, 71, 71, 71, 2760, 71, + 2715, 71, 71, 71, 71, 71, 2720, 71, 71, 2722, + 71, 71, 2723, 71, 2721, 71, 71, 2718, 71, 2719, + 71, 2732, 2735, 71, 2724, 71, 2728, 2725, 2726, 2727, + 2729, 2730, 2753, 2734, 2736, 71, 2731, 71, 2733, 2738, + 71, 2737, 2739, 71, 2740, 2741, 71, 71, 2742, 2743, + 2746, 71, 2744, 2745, 71, 71, 2747, 71, 71, 71, + 2751, 71, 71, 2750, 71, 71, 71, 71, 2754, 71, + 71, 2759, 2748, 2749, 2755, 2760, 71, 71, 2758, 2761, + 71, 2756, 71, 71, 2766, 2757, 71, 2752, 2763, 2767, + 71, 2764, 2762, 2768, 2765, 71, 71, 71, 71, 71, - 2764, 2768, 71, 2769, 71, 71, 71, 2762, 2773, 2767, - 2774, 71, 2775, 71, 71, 2770, 71, 71, 2771, 2772, - 2778, 71, 71, 2777, 71, 71, 71, 71, 2786, 2776, - 71, 2783, 71, 71, 71, 2780, 2782, 2779, 71, 2785, - 71, 71, 71, 2787, 71, 2781, 71, 2797, 71, 2790, - 71, 2788, 2789, 2799, 71, 2792, 2795, 71, 2800, 2798, - 2801, 71, 2793, 2791, 2794, 71, 2796, 2802, 71, 71, - 71, 71, 71, 2805, 71, 71, 2806, 2807, 71, 2810, - 71, 2813, 71, 71, 2803, 71, 2815, 71, 71, 2804, - 2809, 71, 2811, 2818, 71, 71, 2819, 71, 71, 2808, + 71, 71, 2772, 2773, 2775, 71, 2776, 2777, 71, 71, + 2770, 2769, 2778, 71, 2779, 71, 71, 2771, 2785, 2774, + 2780, 71, 2781, 71, 2782, 71, 2783, 71, 2784, 71, + 2786, 71, 71, 2789, 71, 71, 2787, 71, 71, 71, + 71, 2793, 2795, 71, 71, 71, 71, 71, 2797, 2792, + 2790, 2788, 2791, 2794, 71, 2799, 71, 2802, 71, 2801, + 71, 71, 2796, 71, 71, 2800, 2804, 71, 71, 71, + 71, 2809, 2798, 71, 2803, 2810, 71, 2805, 2811, 71, + 71, 71, 2806, 2807, 2808, 2814, 71, 2816, 71, 2813, + 71, 71, 71, 2812, 2820, 71, 2819, 71, 2822, 71, - 2812, 2822, 2814, 2816, 2823, 2820, 71, 71, 71, 2817, - 71, 71, 2827, 71, 71, 71, 71, 2821, 71, 71, - 2824, 2825, 2830, 71, 2832, 71, 71, 71, 71, 2829, - 2826, 71, 71, 2837, 2828, 71, 2831, 2838, 2834, 2835, - 2841, 71, 2833, 71, 2843, 71, 2836, 2910, 2842, 2839, - 71, 71, 2844, 71, 2840, 71, 71, 2849, 2845, 71, - 2846, 2847, 71, 71, 2848, 2851, 71, 2850, 71, 71, - 71, 2857, 2852, 71, 71, 71, 2860, 71, 2853, 2861, - 71, 71, 71, 71, 71, 71, 71, 2859, 2855, 2856, - 2862, 2864, 2858, 2863, 71, 2868, 71, 2867, 71, 71, + 71, 2818, 71, 71, 71, 71, 2815, 71, 71, 71, + 2821, 2817, 2823, 71, 71, 2833, 71, 2834, 71, 2824, + 2825, 2826, 2828, 2835, 71, 2829, 71, 2831, 2827, 2830, + 71, 2836, 2837, 71, 2832, 2838, 71, 2839, 71, 71, + 71, 2841, 71, 71, 2842, 2843, 2840, 2846, 71, 71, + 2849, 71, 71, 71, 2851, 71, 71, 71, 2845, 2854, + 71, 71, 2847, 71, 2855, 71, 71, 2844, 71, 2848, + 2858, 2850, 2852, 2856, 2853, 2859, 71, 71, 71, 2861, + 2857, 71, 2860, 2863, 71, 71, 71, 71, 71, 71, + 2866, 71, 71, 2868, 71, 71, 2862, 71, 2864, 2865, - 2872, 2865, 2866, 2869, 71, 71, 2874, 71, 2875, 2870, - 71, 2871, 71, 71, 71, 2876, 2879, 71, 71, 2877, - 71, 2883, 71, 2873, 2881, 2880, 2882, 71, 71, 71, - 71, 71, 2878, 71, 2886, 2884, 71, 2885, 2888, 71, - 71, 2890, 71, 71, 2894, 2891, 2895, 71, 71, 2887, - 2889, 71, 2892, 71, 2898, 2899, 71, 71, 2901, 71, - 71, 2893, 2902, 71, 2900, 71, 71, 2896, 71, 71, - 2897, 2904, 2903, 2905, 2908, 71, 2909, 71, 2910, 2906, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2907, 43, - 43, 43, 43, 43, 43, 43, 48, 48, 48, 48, + 2873, 71, 2874, 71, 2870, 2871, 71, 2867, 2869, 2877, + 71, 2878, 2879, 2872, 71, 2880, 71, 71, 71, 2875, + 71, 2881, 2876, 71, 2885, 2882, 71, 71, 2883, 71, + 71, 2886, 2887, 71, 71, 71, 2884, 71, 2888, 2893, + 71, 71, 2890, 71, 2896, 71, 2889, 71, 2891, 2897, + 71, 71, 2900, 71, 2895, 71, 2892, 71, 71, 2894, + 2898, 71, 2904, 2899, 71, 71, 71, 2908, 71, 2905, + 2903, 2906, 2901, 71, 2902, 71, 2910, 71, 2911, 71, + 2913, 71, 2915, 71, 2912, 71, 71, 2909, 2917, 71, + 2916, 2907, 2918, 71, 71, 71, 2919, 71, 71, 71, - 48, 48, 48, 53, 53, 53, 53, 53, 53, 53, - 59, 59, 59, 59, 59, 59, 59, 64, 64, 64, - 64, 64, 64, 64, 74, 74, 2910, 74, 74, 74, - 74, 141, 141, 2910, 2910, 2910, 141, 141, 143, 143, - 2910, 2910, 143, 2910, 143, 145, 2910, 2910, 2910, 2910, - 2910, 145, 148, 148, 2910, 2910, 2910, 148, 148, 150, - 2910, 2910, 2910, 2910, 2910, 150, 152, 152, 2910, 152, - 152, 152, 152, 75, 75, 2910, 75, 75, 75, 75, - 13, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2914, 2920, 2922, 2924, 71, 71, 71, 71, 71, 71, + 2926, 2927, 71, 2930, 2921, 2931, 71, 2923, 2925, 71, + 71, 2934, 2935, 71, 71, 71, 2928, 2929, 2932, 2937, + 71, 2936, 2938, 71, 71, 71, 71, 71, 2933, 2946, + 2940, 2939, 2941, 2946, 2942, 2944, 71, 2945, 71, 2946, + 2946, 2946, 2946, 2946, 2946, 2943, 43, 43, 43, 43, + 43, 43, 43, 48, 48, 48, 48, 48, 48, 48, + 53, 53, 53, 53, 53, 53, 53, 59, 59, 59, + 59, 59, 59, 59, 64, 64, 64, 64, 64, 64, + 64, 74, 74, 2946, 74, 74, 74, 74, 141, 141, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910 + 2946, 2946, 2946, 141, 141, 143, 143, 2946, 2946, 143, + 2946, 143, 145, 2946, 2946, 2946, 2946, 2946, 145, 148, + 148, 2946, 2946, 2946, 148, 148, 150, 2946, 2946, 2946, + 2946, 2946, 150, 152, 152, 2946, 152, 152, 152, 152, + 75, 75, 2946, 75, 75, 75, 75, 13, 2946, 2946, + 2946, 2946, 2946, 2946, 2946, 2946, 2946, 2946, 2946, 2946, + 2946, 2946, 2946, 2946, 2946, 2946, 2946, 2946, 2946, 2946, + 2946, 2946, 2946, 2946, 2946, 2946, 2946, 2946, 2946, 2946, + 2946, 2946, 2946, 2946, 2946, 2946, 2946, 2946 } ; -static const flex_int16_t yy_chk[5722] = +static const flex_int16_t yy_chk[5789] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -2023,13 +2039,13 @@ static const flex_int16_t yy_chk[5722] = 5, 3, 6, 20, 4, 20, 20, 5, 20, 6, 7, 7, 7, 7, 20, 7, 8, 8, 8, 8, 29, 8, 7, 9, 9, 9, 22, 22, 8, 10, - 10, 10, 15, 25, 9, 29, 15, 25, 2916, 31, + 10, 10, 15, 25, 9, 29, 15, 25, 2952, 31, 10, 11, 11, 11, 11, 11, 11, 19, 79, 19, 19, 30, 19, 11, 31, 79, 30, 25, 19, 19, 47, 47, 11, 12, 12, 12, 12, 12, 12, 21, 23, 23, 21, 21, 24, 12, 21, 81, 23, 24, - 34, 21, 23, 24, 12, 23, 24, 977, 24, 24, + 34, 21, 23, 24, 12, 23, 24, 990, 24, 24, 21, 26, 26, 27, 27, 90, 28, 81, 32, 32, 28, 34, 27, 28, 33, 33, 26, 32, 36, 33, 28, 35, 28, 32, 90, 42, 35, 32, 52, 84, @@ -2073,578 +2089,584 @@ static const flex_int16_t yy_chk[5722] = 198, 195, 192, 199, 200, 196, 198, 195, 197, 199, 201, 206, 202, 203, 204, 205, 201, 202, 199, 203, 204, 207, 205, 208, 206, 200, 209, 207, 210, 211, - 213, 212, 209, 214, 215, 213, 216, 211, 217, 218, - 218, 219, 214, 208, 212, 220, 219, 221, 222, 215, - 210, 221, 216, 223, 224, 225, 226, 227, 217, 223, - 229, 225, 227, 220, 228, 231, 228, 230, 233, 232, - 222, 231, 224, 224, 230, 232, 226, 234, 235, 229, - 236, 237, 237, 234, 238, 238, 239, 233, 242, 240, - 235, 244, 239, 245, 236, 240, 241, 243, 241, 246, + 213, 212, 209, 214, 215, 213, 216, 211, 217, 220, + 218, 222, 214, 208, 212, 218, 218, 221, 219, 215, + 210, 221, 216, 219, 223, 224, 225, 220, 217, 226, + 223, 227, 225, 222, 229, 228, 227, 228, 230, 233, + 231, 232, 234, 224, 224, 230, 231, 232, 234, 226, + 235, 236, 242, 229, 237, 237, 238, 238, 233, 243, + 239, 240, 235, 245, 243, 236, 239, 240, 241, 244, - 247, 248, 243, 244, 249, 260, 248, 246, 250, 145, - 239, 242, 245, 251, 250, 241, 252, 253, 254, 251, - 247, 252, 253, 255, 254, 256, 257, 249, 258, 259, - 260, 263, 262, 263, 261, 262, 266, 259, 255, 256, - 261, 269, 258, 270, 257, 264, 264, 265, 267, 267, - 265, 268, 268, 271, 266, 272, 271, 269, 270, 272, - 273, 274, 275, 277, 276, 277, 278, 274, 283, 273, - 276, 279, 278, 280, 280, 279, 275, 281, 282, 284, - 285, 286, 281, 143, 282, 287, 287, 288, 283, 289, - 288, 290, 279, 291, 286, 290, 293, 284, 292, 292, + 241, 246, 247, 248, 249, 242, 255, 250, 248, 246, + 251, 244, 245, 250, 239, 252, 251, 241, 253, 254, + 252, 255, 247, 253, 256, 254, 257, 249, 258, 259, + 260, 262, 266, 261, 262, 264, 264, 259, 256, 261, + 269, 263, 258, 263, 257, 265, 267, 267, 265, 270, + 266, 268, 268, 275, 271, 260, 269, 271, 272, 273, + 274, 285, 272, 276, 270, 278, 274, 275, 273, 276, + 277, 278, 277, 279, 280, 280, 281, 279, 282, 283, + 284, 281, 285, 286, 282, 287, 287, 288, 289, 290, + 288, 291, 293, 290, 279, 295, 286, 296, 284, 283, - 294, 285, 296, 294, 295, 298, 297, 289, 296, 297, - 300, 291, 141, 301, 293, 302, 295, 298, 299, 300, - 302, 303, 304, 323, 303, 304, 303, 299, 305, 323, - 299, 301, 306, 308, 308, 299, 299, 299, 299, 310, - 311, 305, 303, 307, 306, 307, 307, 309, 312, 313, - 309, 314, 314, 316, 316, 311, 310, 312, 313, 310, - 315, 317, 318, 319, 320, 315, 321, 318, 325, 322, - 334, 334, 326, 327, 70, 319, 317, 326, 340, 327, - 328, 331, 329, 320, 322, 328, 321, 329, 325, 330, - 341, 333, 330, 329, 330, 331, 332, 335, 340, 332, + 292, 292, 294, 296, 298, 294, 289, 295, 297, 291, + 293, 297, 300, 301, 302, 304, 298, 299, 304, 302, + 303, 300, 323, 303, 311, 303, 299, 305, 323, 299, + 306, 301, 308, 308, 299, 299, 299, 299, 310, 311, + 305, 303, 306, 307, 309, 307, 307, 309, 312, 315, + 313, 314, 314, 317, 315, 310, 321, 312, 310, 313, + 316, 316, 318, 319, 320, 322, 326, 318, 317, 324, + 324, 328, 324, 327, 329, 319, 321, 328, 327, 329, + 322, 324, 330, 320, 332, 331, 326, 330, 331, 333, + 331, 334, 333, 330, 335, 335, 336, 341, 332, 342, - 333, 336, 336, 335, 337, 338, 342, 343, 338, 337, - 344, 341, 332, 346, 338, 332, 346, 332, 338, 347, - 349, 342, 343, 352, 344, 350, 338, 339, 339, 352, - 339, 351, 346, 347, 350, 349, 351, 351, 353, 354, - 355, 357, 64, 339, 360, 359, 339, 356, 339, 364, - 339, 348, 59, 348, 348, 355, 356, 363, 354, 353, - 357, 361, 358, 348, 360, 348, 348, 348, 358, 364, - 348, 359, 362, 365, 366, 361, 367, 368, 362, 369, - 363, 367, 362, 370, 370, 369, 371, 372, 373, 366, - 374, 375, 368, 365, 376, 377, 374, 379, 380, 372, + 334, 338, 336, 337, 337, 333, 338, 345, 333, 339, + 333, 343, 339, 344, 145, 348, 347, 341, 339, 347, + 342, 345, 339, 350, 351, 354, 343, 360, 344, 348, + 339, 340, 340, 351, 340, 347, 352, 353, 350, 357, + 355, 352, 352, 353, 358, 356, 354, 340, 357, 143, + 340, 362, 340, 360, 340, 349, 359, 349, 349, 355, + 356, 361, 359, 358, 364, 362, 363, 349, 365, 349, + 349, 349, 363, 366, 349, 367, 363, 368, 370, 369, + 372, 361, 368, 373, 370, 371, 371, 364, 365, 374, + 367, 375, 376, 366, 369, 373, 377, 375, 380, 378, - 377, 382, 373, 381, 378, 378, 371, 378, 384, 383, - 376, 383, 384, 387, 380, 382, 375, 379, 385, 381, - 386, 386, 385, 388, 389, 390, 392, 391, 394, 383, - 393, 398, 387, 394, 54, 392, 402, 385, 388, 393, - 389, 391, 396, 390, 397, 395, 392, 399, 392, 395, - 397, 396, 398, 399, 400, 401, 402, 404, 400, 405, - 401, 403, 403, 406, 405, 407, 407, 408, 409, 410, - 404, 411, 409, 408, 412, 413, 406, 414, 414, 412, - 413, 415, 416, 417, 410, 418, 414, 419, 421, 423, - 419, 420, 411, 415, 423, 420, 424, 418, 422, 422, + 372, 383, 141, 374, 378, 379, 379, 381, 379, 382, + 385, 384, 377, 384, 385, 383, 386, 376, 380, 388, + 386, 387, 387, 381, 389, 382, 390, 391, 393, 392, + 396, 384, 394, 399, 396, 386, 401, 393, 388, 389, + 401, 394, 390, 392, 395, 391, 397, 398, 393, 395, + 393, 400, 403, 398, 399, 397, 402, 400, 404, 404, + 405, 402, 406, 407, 408, 408, 410, 406, 409, 411, + 410, 412, 403, 405, 409, 413, 407, 414, 415, 415, + 413, 416, 414, 417, 411, 419, 418, 415, 420, 422, + 421, 420, 412, 416, 421, 423, 423, 419, 425, 429, - 421, 417, 416, 425, 425, 427, 427, 428, 429, 430, - 431, 432, 435, 434, 437, 436, 429, 424, 430, 440, - 437, 439, 441, 432, 440, 438, 447, 439, 428, 436, - 431, 434, 435, 434, 438, 442, 441, 444, 443, 445, - 447, 446, 445, 442, 443, 448, 442, 446, 449, 451, - 448, 450, 453, 451, 452, 454, 456, 444, 455, 452, - 454, 460, 462, 457, 461, 446, 462, 453, 463, 53, - 449, 467, 450, 464, 455, 456, 457, 458, 458, 461, - 465, 460, 469, 458, 465, 458, 467, 463, 472, 464, - 466, 458, 470, 458, 474, 466, 458, 458, 469, 466, + 424, 422, 430, 417, 418, 424, 426, 426, 428, 428, + 430, 432, 431, 433, 435, 436, 437, 438, 439, 425, + 429, 431, 440, 438, 441, 433, 442, 439, 440, 441, + 437, 432, 435, 443, 435, 436, 444, 445, 446, 444, + 442, 443, 447, 448, 443, 451, 449, 452, 447, 449, + 450, 445, 452, 446, 453, 456, 450, 454, 455, 451, + 456, 458, 455, 448, 457, 459, 458, 460, 465, 461, + 464, 466, 467, 468, 450, 466, 453, 471, 454, 457, + 469, 459, 461, 465, 469, 70, 460, 462, 462, 468, + 464, 467, 471, 462, 473, 462, 474, 472, 476, 470, - 468, 470, 471, 458, 472, 468, 473, 475, 471, 473, - 476, 476, 477, 471, 478, 478, 479, 474, 480, 481, - 482, 483, 486, 484, 485, 487, 488, 475, 484, 490, - 480, 479, 488, 485, 481, 493, 494, 477, 490, 482, - 487, 486, 491, 483, 492, 495, 491, 493, 496, 558, - 492, 494, 497, 498, 499, 500, 558, 501, 499, 501, - 505, 502, 496, 507, 495, 503, 503, 497, 500, 502, - 504, 498, 505, 506, 508, 507, 504, 508, 509, 506, - 510, 511, 512, 514, 513, 512, 511, 48, 516, 517, - 517, 515, 509, 513, 523, 510, 515, 515, 530, 514, + 478, 462, 472, 462, 470, 474, 462, 462, 470, 475, + 473, 479, 481, 462, 476, 475, 477, 480, 480, 477, + 475, 482, 482, 478, 483, 485, 484, 486, 487, 488, + 490, 479, 489, 491, 488, 494, 492, 481, 484, 483, + 485, 489, 492, 495, 494, 496, 486, 495, 491, 490, + 487, 496, 497, 498, 499, 500, 501, 502, 503, 504, + 515, 505, 503, 505, 497, 515, 506, 509, 498, 500, + 511, 501, 504, 499, 506, 502, 507, 507, 508, 509, + 510, 513, 511, 514, 508, 512, 510, 516, 512, 518, + 516, 517, 64, 520, 529, 513, 519, 527, 514, 529, - 513, 516, 519, 513, 518, 518, 520, 520, 519, 521, - 521, 522, 526, 524, 525, 523, 524, 522, 527, 525, - 528, 530, 529, 528, 531, 532, 527, 529, 533, 532, - 535, 526, 534, 536, 533, 537, 534, 539, 536, 538, - 540, 541, 539, 531, 541, 538, 542, 544, 535, 541, - 543, 543, 545, 541, 540, 537, 546, 545, 547, 548, - 549, 546, 550, 553, 542, 544, 549, 551, 553, 552, - 551, 550, 547, 552, 548, 554, 555, 556, 554, 557, - 560, 555, 561, 559, 564, 560, 562, 562, 565, 563, - 566, 593, 593, 556, 567, 552, 559, 557, 563, 566, + 517, 519, 519, 521, 521, 518, 520, 517, 522, 522, + 517, 523, 524, 524, 525, 525, 526, 523, 527, 530, + 528, 531, 526, 528, 532, 533, 534, 532, 535, 531, + 533, 536, 538, 537, 539, 536, 538, 540, 530, 537, + 541, 543, 540, 544, 542, 59, 543, 535, 546, 534, + 542, 545, 539, 548, 545, 547, 547, 544, 551, 545, + 541, 552, 549, 545, 550, 561, 546, 549, 553, 550, + 554, 548, 551, 556, 553, 555, 552, 556, 555, 554, + 557, 558, 559, 561, 558, 557, 560, 559, 562, 564, + 563, 565, 566, 566, 564, 562, 567, 568, 569, 556, - 573, 568, 561, 564, 565, 569, 567, 568, 574, 570, - 571, 569, 570, 571, 572, 575, 581, 577, 573, 572, - 576, 575, 574, 577, 578, 576, 579, 578, 580, 581, - 582, 579, 583, 580, 580, 584, 585, 586, 590, 587, - 594, 584, 588, 582, 587, 588, 586, 589, 596, 591, - 590, 583, 583, 589, 591, 585, 592, 595, 598, 595, - 588, 592, 592, 599, 597, 594, 597, 596, 600, 601, - 602, 603, 606, 605, 604, 608, 598, 603, 604, 607, - 609, 599, 605, 610, 613, 611, 600, 606, 601, 614, - 602, 612, 615, 608, 607, 610, 616, 612, 613, 609, + 570, 571, 560, 563, 572, 567, 573, 577, 578, 570, + 572, 565, 573, 571, 569, 574, 568, 575, 574, 576, + 575, 579, 578, 580, 576, 577, 581, 579, 580, 583, + 582, 584, 581, 582, 583, 585, 584, 584, 586, 587, + 588, 589, 591, 590, 592, 54, 588, 591, 585, 593, + 593, 586, 590, 595, 594, 597, 595, 596, 587, 587, + 589, 594, 601, 596, 592, 598, 603, 597, 599, 608, + 598, 595, 605, 599, 599, 600, 600, 602, 604, 602, + 604, 606, 607, 609, 615, 603, 610, 601, 608, 611, + 605, 613, 610, 611, 614, 612, 616, 618, 617, 606, - 611, 614, 617, 618, 619, 620, 617, 621, 622, 626, - 623, 615, 624, 624, 625, 616, 630, 628, 625, 627, - 619, 618, 631, 620, 623, 621, 621, 622, 626, 629, - 627, 628, 630, 632, 629, 633, 638, 635, 634, 641, - 636, 631, 633, 634, 635, 636, 632, 637, 639, 640, - 642, 643, 637, 641, 638, 639, 644, 645, 640, 642, - 645, 644, 646, 643, 647, 648, 646, 649, 651, 650, - 652, 652, 653, 653, 648, 654, 654, 655, 647, 657, - 659, 653, 649, 650, 658, 661, 655, 660, 662, 651, - 658, 660, 663, 664, 665, 668, 666, 661, 657, 664, + 607, 619, 615, 609, 612, 620, 613, 619, 621, 614, + 617, 622, 618, 623, 624, 616, 625, 626, 624, 620, + 621, 627, 628, 629, 630, 631, 631, 632, 633, 635, + 622, 632, 623, 626, 625, 634, 637, 638, 630, 627, + 628, 628, 629, 635, 636, 639, 634, 633, 640, 636, + 642, 645, 637, 647, 641, 640, 638, 642, 639, 641, + 643, 644, 647, 646, 648, 643, 644, 649, 650, 645, + 646, 652, 651, 654, 652, 653, 649, 651, 648, 653, + 650, 655, 656, 658, 657, 659, 659, 654, 661, 661, + 655, 660, 660, 662, 664, 665, 666, 656, 657, 667, - 659, 667, 665, 666, 669, 678, 670, 672, 681, 675, - 663, 670, 681, 662, 678, 670, 680, 679, 670, 667, - 668, 685, 672, 679, 669, 670, 675, 684, 670, 682, - 682, 686, 680, 683, 683, 687, 688, 717, 684, 685, - 691, 690, 688, 717, 692, 686, 690, 693, 694, 695, - 695, 694, 696, 697, 697, 687, 689, 689, 689, 696, - 689, 691, 692, 689, 698, 699, 699, 701, 689, 704, - 701, 700, 693, 702, 689, 689, 700, 705, 702, 698, - 703, 704, 703, 706, 707, 709, 708, 706, 710, 710, - 715, 711, 714, 709, 712, 716, 705, 713, 713, 719, + 660, 665, 662, 667, 658, 668, 669, 670, 671, 674, + 672, 675, 673, 664, 671, 676, 666, 668, 672, 673, + 685, 677, 679, 687, 682, 670, 677, 674, 686, 685, + 677, 669, 692, 677, 686, 676, 675, 679, 688, 687, + 677, 682, 688, 677, 689, 689, 690, 690, 691, 693, + 692, 694, 695, 700, 698, 697, 702, 702, 695, 691, + 697, 701, 699, 693, 701, 704, 704, 705, 706, 706, + 703, 694, 696, 696, 696, 698, 696, 703, 700, 696, + 699, 707, 705, 712, 696, 708, 707, 709, 708, 711, + 696, 696, 709, 710, 713, 710, 714, 716, 713, 715, - 719, 756, 715, 756, 707, 708, 711, 718, 712, 720, - 714, 722, 718, 723, 720, 720, 722, 716, 724, 723, - 725, 726, 728, 727, 724, 725, 727, 726, 728, 729, - 730, 731, 734, 733, 732, 735, 735, 729, 730, 732, - 733, 736, 738, 739, 737, 741, 742, 744, 738, 731, - 736, 734, 737, 743, 741, 742, 744, 745, 743, 746, - 745, 747, 739, 748, 746, 749, 749, 750, 751, 752, - 753, 757, 757, 754, 758, 747, 754, 760, 752, 761, - 759, 762, 750, 763, 754, 759, 764, 751, 748, 766, - 768, 765, 767, 771, 753, 758, 767, 769, 760, 761, + 718, 711, 712, 717, 717, 716, 719, 720, 720, 721, + 722, 723, 725, 724, 53, 718, 714, 725, 715, 724, + 719, 729, 722, 726, 726, 727, 729, 721, 730, 731, + 727, 727, 732, 723, 730, 731, 733, 732, 734, 735, + 736, 734, 733, 737, 738, 735, 740, 739, 736, 741, + 743, 737, 739, 740, 742, 742, 744, 745, 746, 743, + 748, 749, 738, 745, 744, 751, 750, 754, 741, 748, + 749, 750, 752, 753, 751, 752, 755, 746, 753, 756, + 757, 754, 758, 758, 759, 759, 761, 760, 756, 762, + 763, 768, 764, 757, 766, 764, 766, 770, 762, 767, - 765, 762, 771, 770, 773, 763, 764, 772, 768, 770, - 774, 775, 766, 776, 779, 777, 769, 775, 781, 772, - 777, 778, 778, 773, 774, 782, 780, 776, 783, 784, - 785, 787, 786, 782, 779, 780, 788, 787, 781, 789, - 790, 791, 793, 794, 795, 789, 793, 791, 783, 785, - 788, 784, 786, 792, 797, 799, 795, 43, 796, 792, - 790, 799, 794, 796, 795, 798, 798, 800, 801, 802, - 800, 803, 804, 805, 805, 797, 806, 803, 807, 808, - 808, 809, 802, 807, 810, 812, 801, 815, 810, 811, - 811, 813, 804, 814, 806, 817, 809, 820, 814, 818, + 767, 755, 760, 764, 769, 761, 771, 772, 773, 769, + 775, 774, 768, 776, 763, 778, 777, 780, 770, 775, + 777, 779, 48, 780, 783, 781, 771, 772, 784, 782, + 773, 774, 785, 778, 781, 786, 776, 789, 785, 787, + 779, 782, 784, 783, 787, 788, 788, 790, 791, 786, + 792, 793, 794, 795, 797, 796, 790, 789, 792, 798, + 797, 799, 800, 801, 802, 804, 805, 799, 791, 801, + 802, 793, 795, 798, 794, 796, 803, 807, 805, 809, + 803, 811, 800, 806, 804, 809, 805, 812, 806, 808, + 808, 810, 814, 816, 810, 813, 815, 815, 807, 811, - 821, 823, 823, 825, 824, 827, 815, 812, 824, 826, - 826, 813, 828, 818, 829, 872, 828, 820, 825, 817, - 830, 821, 822, 831, 872, 822, 832, 822, 831, 829, - 827, 822, 834, 822, 830, 835, 833, 836, 822, 835, - 832, 833, 833, 822, 837, 838, 834, 839, 840, 837, - 838, 841, 836, 846, 842, 848, 843, 844, 846, 837, - 842, 839, 843, 844, 847, 841, 845, 845, 849, 840, - 847, 850, 852, 853, 854, 856, 856, 848, 853, 14, - 855, 857, 860, 859, 852, 858, 857, 849, 854, 850, - 851, 851, 855, 858, 861, 867, 851, 859, 851, 862, + 812, 813, 817, 818, 818, 819, 820, 817, 821, 821, + 820, 816, 814, 822, 823, 827, 824, 825, 828, 831, + 819, 824, 830, 833, 833, 834, 835, 836, 836, 834, + 837, 840, 828, 838, 823, 822, 825, 838, 839, 827, + 831, 835, 830, 832, 841, 840, 832, 842, 832, 841, + 846, 843, 832, 839, 832, 837, 843, 843, 844, 832, + 43, 842, 845, 847, 832, 846, 845, 849, 847, 848, + 850, 851, 844, 852, 848, 856, 853, 854, 847, 852, + 856, 849, 853, 854, 857, 851, 855, 855, 858, 859, + 857, 850, 862, 860, 863, 864, 866, 866, 867, 863, - 862, 860, 863, 870, 851, 865, 863, 868, 870, 851, - 851, 865, 866, 861, 867, 866, 851, 869, 871, 873, - 868, 875, 874, 869, 876, 877, 878, 875, 873, 879, - 881, 878, 880, 876, 883, 882, 884, 871, 874, 886, - 891, 892, 885, 883, 877, 884, 880, 882, 885, 879, - 881, 887, 889, 893, 891, 894, 886, 887, 895, 896, - 897, 892, 898, 905, 900, 897, 899, 898, 889, 894, - 903, 899, 893, 900, 896, 902, 895, 901, 901, 905, - 906, 902, 909, 903, 910, 906, 906, 907, 907, 908, - 911, 907, 908, 912, 913, 914, 909, 915, 918, 916, + 872, 872, 865, 867, 862, 869, 870, 868, 859, 864, + 858, 860, 861, 861, 865, 868, 871, 873, 861, 869, + 861, 873, 875, 877, 876, 870, 861, 876, 875, 880, + 878, 861, 861, 879, 880, 871, 881, 882, 861, 879, + 883, 884, 877, 878, 885, 886, 882, 887, 888, 883, + 885, 889, 891, 888, 886, 881, 890, 884, 893, 894, + 896, 892, 899, 895, 902, 901, 887, 893, 894, 895, + 890, 889, 891, 892, 897, 903, 904, 896, 899, 901, + 897, 905, 906, 907, 902, 920, 908, 909, 907, 910, + 904, 908, 909, 915, 903, 911, 911, 906, 910, 905, - 917, 914, 919, 917, 910, 916, 912, 919, 911, 913, - 920, 921, 924, 922, 926, 920, 923, 915, 922, 918, - 926, 923, 927, 928, 924, 929, 931, 921, 932, 928, - 935, 929, 930, 930, 933, 931, 936, 933, 927, 934, - 934, 937, 938, 939, 940, 938, 932, 941, 935, 942, - 940, 947, 943, 941, 942, 936, 939, 943, 944, 945, - 948, 937, 949, 944, 954, 945, 950, 952, 949, 947, - 953, 950, 951, 951, 955, 956, 952, 955, 956, 953, - 948, 957, 954, 958, 959, 960, 964, 961, 962, 966, - 963, 964, 957, 961, 962, 967, 959, 965, 965, 968, + 912, 913, 916, 919, 921, 920, 912, 916, 916, 915, + 918, 917, 917, 918, 913, 917, 922, 919, 923, 924, + 925, 926, 921, 927, 931, 924, 928, 926, 934, 922, + 14, 928, 930, 923, 932, 930, 933, 935, 927, 932, + 925, 933, 935, 936, 934, 931, 937, 939, 936, 940, + 941, 942, 944, 939, 943, 943, 941, 942, 937, 945, + 946, 944, 948, 946, 949, 940, 947, 947, 950, 951, + 953, 952, 951, 954, 960, 13, 953, 945, 961, 954, + 948, 955, 956, 949, 952, 957, 955, 956, 950, 958, + 957, 962, 960, 965, 963, 958, 966, 962, 961, 963, - 970, 958, 969, 971, 960, 963, 969, 972, 966, 967, - 973, 968, 971, 975, 976, 976, 978, 980, 970, 979, - 981, 984, 982, 983, 983, 981, 972, 985, 13, 980, - 978, 982, 975, 985, 979, 973, 986, 988, 987, 988, - 989, 984, 986, 987, 990, 989, 991, 992, 993, 994, - 995, 996, 992, 997, 999, 999, 1000, 995, 990, 1001, - 991, 1002, 1004, 993, 1005, 1003, 996, 1012, 994, 1005, - 1000, 1003, 997, 1007, 1007, 1010, 1002, 1001, 1005, 1008, - 1005, 1009, 1004, 1005, 1008, 1012, 1013, 1011, 1009, 1010, - 1011, 1014, 1015, 1016, 1017, 1013, 1014, 1018, 1016, 1020, + 964, 964, 965, 967, 968, 966, 969, 968, 970, 969, + 971, 972, 973, 977, 974, 976, 975, 979, 977, 970, + 974, 967, 975, 972, 978, 978, 980, 981, 971, 982, + 976, 973, 983, 982, 984, 985, 979, 986, 988, 981, + 980, 989, 989, 984, 991, 992, 994, 993, 996, 996, + 983, 994, 995, 997, 985, 1012, 1012, 988, 991, 993, + 992, 995, 986, 998, 999, 1001, 1000, 1001, 1003, 998, + 999, 1000, 1002, 997, 1004, 1005, 1006, 1002, 1007, 1008, + 1005, 1009, 1003, 1010, 1013, 1014, 1008, 1016, 1004, 1015, + 1017, 1006, 0, 1016, 1021, 1018, 1009, 1007, 1013, 1021, - 1020, 1021, 1022, 1023, 1024, 1017, 1021, 1022, 1025, 1024, - 1026, 1015, 1025, 1027, 1028, 1029, 1018, 1031, 1030, 1026, - 1032, 1033, 1034, 1023, 1035, 1036, 1039, 1032, 1027, 1028, - 1030, 1037, 1031, 1033, 1029, 1038, 1040, 1037, 1041, 1044, - 1046, 1034, 1043, 1036, 1045, 1035, 1039, 1041, 1043, 1047, - 1038, 1048, 1045, 1044, 1047, 1050, 1040, 1051, 0, 1049, - 1046, 1056, 1052, 1048, 1049, 1049, 1053, 1053, 1059, 1055, - 1056, 1051, 1057, 1059, 1050, 1052, 1054, 1060, 1057, 1058, - 1058, 1054, 1055, 1062, 1054, 1054, 1060, 1061, 1062, 1054, - 1065, 1063, 1068, 1061, 1071, 1054, 1063, 1064, 1064, 1054, + 1018, 1022, 1010, 1014, 1015, 1020, 1020, 1023, 1022, 1018, + 1017, 1018, 1024, 1025, 1018, 1024, 1026, 1027, 1028, 1029, + 1031, 1023, 1027, 1030, 1029, 1026, 1033, 1033, 1034, 1036, + 1035, 1025, 1040, 1034, 1030, 1035, 1037, 1028, 1038, 1031, + 1041, 1037, 1038, 1039, 1042, 1043, 1044, 1040, 1046, 1036, + 1047, 1045, 1039, 1048, 1049, 1041, 1050, 1043, 1045, 1054, + 1046, 1044, 1050, 1042, 1051, 1052, 1053, 1056, 1054, 1047, + 1057, 1059, 1049, 1056, 1048, 1058, 1060, 1061, 1063, 1051, + 1064, 1060, 1062, 1058, 1057, 1052, 1053, 1062, 1062, 1061, + 1065, 1059, 1066, 1066, 1064, 1068, 1069, 1063, 1071, 1071, - 1066, 1066, 1067, 1069, 1070, 1067, 1073, 1067, 1074, 0, - 1072, 1065, 1068, 1070, 1071, 1072, 1075, 1076, 1079, 1077, - 1073, 1069, 1075, 1076, 1077, 1078, 1074, 1079, 1082, 1078, - 1080, 1080, 1079, 1081, 1079, 1081, 1079, 1084, 1079, 1082, - 1085, 1084, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1088, - 1088, 1090, 1087, 1093, 1094, 1085, 1095, 1092, 1097, 1099, - 1086, 1091, 1096, 1097, 1095, 1098, 1100, 1089, 1099, 1101, - 1102, 1104, 1093, 1094, 0, 1102, 1096, 1103, 1103, 1098, - 1105, 1105, 1110, 1106, 1100, 1106, 1104, 1108, 1109, 1111, - 1108, 1112, 1112, 1109, 1101, 1113, 1114, 1114, 1111, 1115, + 1070, 1073, 1072, 1065, 1067, 1069, 1070, 1072, 1068, 1067, + 1073, 1075, 1067, 1067, 1074, 1078, 1075, 1067, 1081, 1076, + 1074, 1077, 1077, 1067, 1076, 1079, 1079, 1067, 1080, 1082, + 1083, 1080, 1084, 1080, 1086, 1085, 1078, 1087, 1081, 1083, + 1085, 1090, 1092, 1088, 1089, 0, 1090, 1082, 1086, 1088, + 1089, 1092, 1084, 1091, 1095, 1087, 1092, 1091, 1092, 1094, + 1092, 1094, 1092, 1093, 1093, 1095, 1097, 1098, 1099, 1100, + 1097, 1101, 1102, 1104, 1103, 1105, 1101, 1101, 1100, 1103, + 1106, 1107, 1098, 1108, 1105, 1109, 1099, 1104, 1110, 1111, + 1112, 1109, 1113, 1114, 1102, 1112, 1110, 1108, 1115, 1106, - 1115, 1110, 1116, 1117, 1118, 1119, 1119, 1116, 1120, 1121, - 1122, 1123, 1121, 1124, 1126, 1113, 1123, 1125, 1128, 1125, - 1129, 1128, 1124, 1140, 1117, 1118, 1130, 1137, 1120, 1131, - 1122, 1130, 1126, 1132, 1131, 1129, 1140, 1133, 1134, 1135, - 1135, 1132, 1133, 1134, 1136, 1137, 1138, 1139, 1144, 1136, - 1142, 1143, 1138, 1144, 1139, 1145, 1142, 1143, 1146, 1147, - 1148, 1145, 1149, 1149, 1150, 1152, 1153, 1146, 1154, 1155, - 1156, 1148, 1159, 1158, 1154, 1155, 1156, 1160, 1147, 1158, - 1162, 1161, 1163, 1165, 1150, 1152, 1159, 1164, 1164, 1153, - 1166, 1167, 1159, 1161, 1162, 1170, 1168, 1160, 1169, 1169, + 1107, 1116, 1114, 1111, 1117, 1119, 1113, 1118, 1118, 1117, + 1120, 1120, 1121, 1125, 1121, 1123, 1115, 1124, 1123, 1126, + 1119, 1128, 1124, 1127, 1127, 1132, 1116, 1133, 1126, 1129, + 1129, 1131, 1125, 1130, 1130, 1135, 1131, 1134, 1134, 1136, + 1137, 1128, 1136, 1139, 1138, 1140, 1132, 1140, 1133, 1138, + 1141, 1143, 1139, 1145, 1143, 1135, 1144, 1146, 1145, 1147, + 1137, 1148, 1146, 1152, 1149, 1151, 1148, 1147, 1141, 1149, + 1151, 1144, 1150, 1150, 1153, 1154, 1155, 1157, 1158, 1161, + 1153, 1152, 1154, 1157, 1158, 1159, 1160, 1162, 1161, 1155, + 1159, 1163, 1160, 1164, 1164, 1165, 1167, 1168, 1169, 1170, - 1163, 1168, 1171, 1165, 1173, 1174, 1175, 1171, 1176, 1167, - 1174, 1174, 1177, 1178, 1179, 1166, 1180, 1176, 1170, 1182, - 1177, 1182, 1183, 1173, 1175, 1181, 1184, 1178, 1187, 1179, - 1181, 1180, 1184, 1181, 1180, 1185, 1183, 1186, 1188, 1185, - 1189, 1190, 1191, 1193, 1192, 1195, 1190, 1187, 1186, 1192, - 1196, 1197, 1198, 1198, 1200, 1201, 1202, 1199, 1189, 1195, - 1191, 1199, 1202, 1193, 1188, 1203, 1204, 1205, 1196, 1197, - 1208, 1206, 1200, 1207, 1201, 1209, 1210, 1203, 1212, 1211, - 1209, 1205, 1213, 1210, 1211, 1204, 1206, 1215, 1207, 1208, - 1217, 1213, 1214, 1214, 1216, 1219, 1212, 0, 1218, 1220, + 1176, 1171, 1163, 1173, 1169, 1170, 1162, 1171, 1174, 1173, + 1175, 1177, 1176, 1178, 1180, 1165, 1167, 1179, 1179, 1181, + 1168, 1182, 1174, 1185, 1183, 1177, 1184, 1184, 1174, 1183, + 1175, 1178, 1186, 1188, 1180, 1189, 1190, 1186, 1191, 1182, + 1189, 1189, 1192, 1193, 1181, 1194, 1185, 1191, 1195, 1203, + 1192, 1196, 1188, 1197, 1190, 1197, 1196, 1193, 1198, 1196, + 1194, 1199, 1201, 1195, 1200, 1202, 1195, 1199, 1200, 1204, + 1206, 1205, 1198, 1201, 1207, 1203, 1205, 1208, 1210, 1207, + 1211, 1212, 1213, 1213, 1202, 1214, 1215, 1204, 1206, 1214, + 1216, 1218, 1210, 1219, 1217, 1223, 1220, 1208, 1211, 1212, - 1216, 1219, 1215, 1218, 1227, 1220, 1221, 1221, 1222, 1222, - 1225, 1217, 1224, 1224, 1225, 1226, 1228, 1229, 1230, 1231, - 1231, 1232, 1227, 1233, 1226, 1230, 1235, 1236, 1234, 1237, - 1228, 1233, 1229, 1234, 1237, 1237, 1239, 1238, 1240, 1240, - 1235, 1232, 1238, 1238, 1241, 1242, 1236, 1244, 1243, 1245, - 1246, 1247, 1244, 1248, 1250, 1249, 1239, 1243, 1252, 1248, - 1249, 1251, 1255, 1241, 1242, 1253, 1254, 1251, 1245, 1247, - 1246, 1253, 1254, 1256, 1257, 1258, 1259, 1252, 1260, 1264, - 1250, 1255, 1261, 1262, 1262, 1263, 1265, 1265, 1263, 1274, - 1259, 1264, 1256, 1257, 1258, 1266, 1268, 1261, 1267, 1260, + 1217, 1221, 1222, 1218, 1215, 1227, 1224, 1230, 1225, 1216, + 1220, 1224, 1219, 1226, 1223, 1225, 1221, 1222, 1226, 1228, + 1229, 1229, 1230, 1227, 1231, 1232, 1233, 1234, 1228, 1235, + 1231, 1233, 1242, 1234, 1243, 1235, 1236, 1236, 1237, 1237, + 1239, 1239, 1241, 1240, 1244, 1245, 1232, 1240, 1243, 1247, + 1242, 1241, 1245, 1246, 1246, 1248, 1249, 1250, 1251, 1244, + 1252, 1249, 1253, 1248, 1254, 1252, 1252, 1253, 1253, 1247, + 1256, 1250, 1255, 1255, 1257, 1259, 1258, 1251, 1260, 1261, + 1259, 1263, 1262, 1264, 1254, 1258, 1265, 1263, 1264, 1256, + 1266, 1267, 1268, 1257, 1270, 1269, 1266, 1260, 1268, 1261, - 1266, 1269, 1267, 1270, 1274, 1271, 1275, 1271, 1273, 1268, - 1269, 1271, 1276, 1273, 1277, 1277, 1270, 1278, 1279, 1282, - 1283, 1280, 1278, 1279, 1271, 1280, 1275, 1281, 1276, 1284, - 1285, 1281, 1286, 1286, 1288, 1290, 1285, 1291, 1283, 1282, - 1292, 1292, 1291, 1294, 1293, 1296, 1296, 1304, 1298, 1284, - 1293, 1298, 1288, 1299, 1299, 1300, 1290, 1301, 1303, 1305, - 1307, 1303, 1308, 1294, 1306, 1306, 1309, 1304, 1305, 1310, - 1311, 1300, 1313, 1301, 1310, 1307, 1312, 1312, 1314, 1315, - 1316, 1316, 1317, 1308, 1311, 1309, 1319, 1318, 1320, 1323, - 1313, 1319, 1325, 1314, 1321, 1321, 1317, 1322, 1324, 1324, + 1262, 1269, 1271, 1272, 1273, 1274, 1275, 1277, 1277, 1276, + 1267, 1278, 1265, 1270, 1278, 1281, 1279, 1280, 1280, 1274, + 1281, 1271, 1272, 1273, 1276, 1282, 1283, 1275, 1279, 1282, + 1285, 1284, 1286, 1289, 1286, 1290, 1288, 1291, 1286, 1283, + 1284, 1288, 1293, 1285, 1292, 1292, 1294, 1293, 1289, 1295, + 1299, 1286, 1294, 1291, 1296, 1290, 1297, 1298, 1300, 1296, + 1297, 1298, 1301, 1302, 1295, 1303, 1303, 1305, 1307, 1302, + 1299, 1311, 1308, 1309, 1309, 1310, 1300, 1308, 1313, 1313, + 1315, 1310, 1301, 1315, 1317, 1305, 1316, 1316, 1318, 1307, + 1320, 1311, 1321, 1320, 1322, 1323, 1323, 1325, 1324, 1330, - 1326, 1322, 1327, 1320, 1315, 1318, 1327, 1328, 1329, 1323, - 1332, 1326, 1339, 1329, 1325, 1331, 1331, 1333, 1334, 1335, - 1336, 1337, 1337, 1340, 1338, 1341, 1328, 1343, 1332, 1338, - 1342, 1333, 1339, 1335, 1341, 1342, 1346, 1334, 1334, 1344, - 1347, 1344, 1346, 1340, 1345, 1336, 1348, 1343, 1350, 1345, - 1351, 1351, 1348, 1352, 1355, 1353, 1356, 1357, 1357, 1355, - 1347, 1353, 1350, 1358, 1358, 1359, 1360, 1361, 1362, 1363, - 1363, 1362, 1352, 1364, 1365, 1366, 1371, 1367, 1366, 1359, - 1356, 1366, 1361, 1367, 1360, 1364, 1368, 1369, 1593, 1372, - 1370, 1368, 1372, 1366, 1365, 1370, 1369, 1373, 1381, 1374, + 1317, 1326, 1327, 1322, 1318, 1328, 1331, 1327, 1329, 1329, + 1332, 1334, 1321, 1324, 1333, 1333, 1335, 1330, 1325, 1328, + 1326, 1331, 1336, 1337, 1340, 1334, 1339, 1336, 1338, 1338, + 1339, 1341, 1341, 1342, 1335, 1332, 1343, 1344, 1337, 1345, + 1346, 1344, 1348, 1348, 1340, 1346, 1349, 1343, 1350, 1351, + 1353, 1352, 1354, 1354, 1355, 1342, 1356, 1357, 1345, 1355, + 1360, 1358, 1350, 1364, 1349, 1352, 1359, 1369, 1351, 1351, + 1358, 1359, 1361, 1362, 1361, 1353, 1356, 1357, 1362, 1363, + 1360, 1365, 1367, 1364, 1370, 1363, 1369, 1365, 1368, 1368, + 1370, 1373, 1372, 1374, 1374, 1376, 1367, 1372, 1375, 1375, - 1379, 1371, 1380, 1373, 1374, 1375, 1375, 1376, 1376, 1377, - 1382, 1378, 1388, 1379, 1593, 1377, 1378, 1381, 1383, 1384, - 1380, 1383, 1385, 1392, 1386, 1384, 1387, 1393, 1385, 1386, - 1382, 1389, 1387, 1390, 1390, 1388, 1389, 1391, 1394, 1395, - 1396, 1392, 1391, 1397, 1398, 1399, 1400, 1393, 1401, 1402, - 1403, 1399, 1406, 1395, 1396, 1397, 1407, 1398, 1394, 1405, - 1405, 1407, 1409, 1402, 1408, 1408, 1400, 1410, 1401, 1411, - 1412, 1403, 1406, 1413, 1414, 1416, 1415, 1409, 1417, 1421, - 1419, 1410, 1413, 1415, 1416, 1423, 1423, 1416, 1412, 1414, - 1424, 1424, 1426, 1411, 1417, 1419, 1422, 1425, 1427, 1422, + 1377, 1378, 1379, 1380, 1380, 1379, 1382, 1381, 1385, 1376, + 1388, 1383, 0, 1385, 1383, 1373, 1378, 1383, 1377, 1381, + 1387, 1384, 1386, 1392, 1392, 1387, 1382, 1384, 1390, 1383, + 1389, 1386, 1391, 1389, 1390, 1388, 1394, 1391, 1393, 1393, + 1395, 1396, 1394, 1397, 1398, 1395, 1399, 1400, 1403, 1401, + 1400, 1402, 1404, 1403, 1396, 1401, 1405, 1402, 1404, 1406, + 1408, 1397, 1409, 1398, 1406, 1408, 1399, 1407, 1407, 1410, + 1411, 1412, 1413, 1417, 1418, 1414, 1416, 1420, 1415, 1405, + 1409, 1419, 1416, 1422, 1422, 1412, 1413, 1414, 1423, 1410, + 1411, 1415, 1424, 1417, 1418, 1419, 1426, 1424, 1420, 1425, - 1419, 1427, 1428, 1428, 1421, 1429, 1430, 1431, 1432, 1425, - 1426, 1433, 1431, 1432, 1435, 1434, 1436, 1437, 1429, 1438, - 1441, 1439, 1444, 1435, 1442, 1430, 1437, 1439, 1438, 1437, - 1433, 1434, 1440, 1440, 1443, 1436, 1444, 1442, 1445, 1446, - 1441, 1448, 1449, 1450, 1450, 1451, 1452, 1455, 1453, 1454, - 1454, 1446, 1443, 1453, 1445, 1452, 1455, 1456, 1457, 1455, - 1449, 1451, 1458, 1459, 1454, 1462, 1448, 1461, 1459, 1459, - 1463, 1462, 1464, 1464, 1470, 1456, 1465, 0, 1466, 1457, - 1458, 1461, 1465, 1466, 1467, 1468, 1471, 1472, 1463, 1473, - 1467, 1468, 1474, 1472, 1470, 1474, 1477, 1475, 1479, 1480, + 1425, 1427, 1428, 1429, 1430, 1431, 1438, 1432, 1423, 1434, + 1433, 1426, 1436, 1430, 1432, 1427, 1440, 1440, 1443, 1433, + 1431, 1429, 1433, 1441, 1441, 1434, 1428, 1436, 1442, 1446, + 1439, 1438, 1436, 1439, 1444, 1447, 1443, 1444, 1445, 1445, + 1442, 1448, 1446, 1449, 1450, 1451, 1448, 1452, 1449, 1453, + 1454, 1455, 1456, 1458, 1447, 1461, 1452, 1459, 1456, 1454, + 1455, 1451, 1454, 1450, 1457, 1457, 1460, 1462, 1453, 1461, + 1459, 1465, 1466, 1458, 1463, 1467, 1467, 1468, 1469, 1473, + 1470, 1474, 1472, 1462, 1460, 1470, 1463, 1469, 1471, 1471, + 1466, 1472, 1475, 1468, 1472, 1476, 1465, 1473, 1478, 1479, - 1471, 1474, 1473, 1475, 1477, 1481, 1482, 1483, 1484, 1485, - 1486, 1487, 1487, 1481, 1490, 1482, 1488, 1479, 1480, 1489, - 1483, 1484, 1488, 1485, 1486, 1489, 1491, 1490, 1494, 1492, - 1493, 1495, 1496, 1487, 1497, 1498, 1501, 1495, 1500, 1500, - 1502, 1494, 1506, 1503, 1502, 1507, 1491, 1492, 1503, 1493, - 1497, 1506, 1504, 1498, 1496, 1505, 1501, 1504, 1509, 1511, - 1505, 1510, 1510, 1512, 1513, 1514, 1514, 1515, 1507, 1516, - 1517, 1519, 1518, 1509, 1520, 1512, 1516, 1522, 1511, 1521, - 1523, 1515, 1517, 1513, 1518, 1521, 1524, 1525, 1525, 1522, - 1519, 1533, 1524, 1526, 1520, 1530, 1526, 1529, 1523, 1527, + 1476, 1476, 1474, 1471, 1480, 1481, 1482, 1483, 1483, 1484, + 1475, 1481, 1478, 1485, 1479, 1484, 1486, 1487, 1485, 1489, + 1490, 1491, 1486, 1487, 1482, 1492, 1480, 1491, 1493, 1494, + 1498, 1493, 1496, 1499, 1490, 1494, 1500, 1493, 1492, 1489, + 1496, 1501, 1502, 1503, 1500, 1504, 1505, 1506, 1506, 1498, + 1501, 1507, 1499, 1509, 1510, 1502, 1503, 1507, 1508, 1504, + 1505, 1511, 1512, 1513, 1508, 1514, 1509, 1515, 1516, 1506, + 1517, 1514, 1519, 1519, 1510, 1520, 1513, 1526, 1521, 1511, + 1522, 1512, 1521, 1528, 1516, 1522, 1523, 1524, 1517, 1515, + 1525, 1523, 1524, 1529, 1529, 1520, 1530, 1531, 1528, 1525, - 1527, 1531, 1529, 1533, 1530, 1532, 1532, 1531, 1534, 1535, - 1534, 1536, 1535, 1537, 1538, 1539, 1540, 1541, 1542, 1543, - 1544, 1540, 1546, 1547, 1550, 1544, 1541, 1545, 1548, 1548, - 1542, 1536, 1538, 1539, 1543, 1537, 1545, 1549, 1547, 1551, - 1552, 1553, 1546, 1549, 1554, 1550, 1554, 1559, 1555, 1545, - 1556, 1556, 1557, 1557, 1558, 1558, 1552, 1562, 1551, 1560, - 1560, 1553, 1555, 1563, 1555, 1561, 1561, 1559, 1564, 1564, - 1565, 1566, 1567, 1569, 1565, 1567, 1570, 1566, 1562, 1569, - 1571, 1572, 1573, 1578, 1563, 1573, 1571, 1574, 1574, 1575, - 1575, 1576, 1579, 1580, 1570, 1577, 1581, 1576, 1585, 1580, + 1526, 1532, 1533, 1533, 1534, 1535, 1538, 1536, 1539, 1531, + 1537, 1540, 1535, 1542, 1541, 1530, 0, 1540, 1534, 1536, + 1532, 1543, 1537, 1544, 1544, 1538, 1541, 1543, 1539, 1545, + 1548, 1542, 1545, 1546, 1546, 1548, 1549, 1550, 1551, 1551, + 1552, 1555, 1553, 1550, 1553, 1549, 1554, 1556, 1557, 1554, + 1558, 1559, 1552, 1560, 1563, 1561, 1559, 1562, 1565, 1563, + 1566, 1555, 1560, 1569, 1564, 1571, 1557, 1561, 1558, 1556, + 1567, 1567, 1562, 1564, 1568, 1566, 1570, 1572, 1565, 1578, + 1568, 1571, 1574, 1573, 1569, 1573, 1564, 1575, 1575, 1576, + 1576, 1577, 1577, 1579, 1579, 1570, 1574, 1572, 1574, 1578, - 1585, 1584, 1586, 1578, 1587, 1583, 1572, 1577, 1577, 1577, - 1583, 1583, 1579, 1586, 1577, 1584, 1581, 1588, 1589, 1587, - 1590, 1591, 1596, 1588, 1592, 1592, 1595, 1589, 1594, 1594, - 1597, 1597, 1598, 1598, 1599, 1602, 1602, 1603, 1604, 1606, - 1590, 1611, 1591, 1607, 1596, 1608, 1595, 1604, 1606, 1609, - 1609, 1608, 1610, 1612, 1599, 1614, 1611, 1613, 1615, 1615, - 1612, 1616, 1603, 1617, 1607, 1619, 1613, 1626, 1620, 1621, - 1619, 1622, 1626, 1610, 1620, 1629, 1623, 1624, 1622, 1617, - 1628, 1614, 1623, 1624, 1625, 1625, 1627, 1616, 1631, 1621, - 1630, 1631, 1632, 1633, 1629, 1627, 1634, 1634, 1635, 1637, + 1580, 1580, 1581, 1582, 1583, 1583, 1584, 1585, 1586, 1588, + 1584, 1586, 1589, 1585, 1590, 1588, 1591, 1597, 1592, 1596, + 1590, 1592, 1598, 1581, 1582, 1593, 1593, 1594, 1594, 1595, + 1589, 1596, 1596, 1596, 1599, 1595, 1600, 1597, 1596, 1602, + 1599, 1591, 1598, 1603, 1602, 1602, 1604, 1605, 1604, 1606, + 1609, 1608, 1610, 1607, 1611, 1611, 1600, 1603, 1605, 1607, + 1608, 1612, 1613, 1613, 1606, 1614, 1615, 1616, 1616, 1618, + 1609, 1617, 1617, 1610, 1621, 1621, 1622, 1623, 1626, 1628, + 1628, 1625, 1629, 1630, 1633, 1614, 1623, 1612, 1615, 1618, + 1625, 1627, 1635, 1631, 0, 1632, 1636, 1627, 1630, 1626, - 1628, 1636, 1630, 1638, 1635, 1640, 1647, 1638, 1641, 1642, - 1632, 1644, 1645, 0, 1637, 1647, 1645, 1648, 1648, 1633, - 1646, 1636, 1650, 1638, 1642, 1640, 1646, 1641, 1649, 1652, - 1644, 1653, 1649, 1650, 1651, 1651, 1654, 1655, 1650, 1656, - 1657, 1658, 1655, 1659, 1660, 1653, 1667, 1658, 0, 1660, - 1652, 1661, 1661, 1662, 1662, 1654, 1665, 1663, 1659, 1656, - 1657, 1663, 1666, 1668, 1668, 1665, 1667, 1669, 1669, 1670, - 1671, 1672, 1673, 1666, 1670, 1670, 1671, 1672, 1666, 1674, - 1675, 1676, 1678, 1680, 1674, 1679, 1681, 1676, 1683, 1679, - 1682, 1684, 1675, 1685, 1678, 1680, 1682, 1684, 1673, 1688, + 1631, 1622, 1638, 1629, 1632, 1634, 1634, 1638, 1639, 1640, + 1633, 1642, 1636, 1641, 1639, 1643, 1646, 1642, 1635, 1645, + 1641, 1643, 1644, 1644, 1645, 1646, 1647, 1649, 1648, 1640, + 1650, 1651, 1652, 1650, 1653, 1653, 1654, 1655, 1656, 1649, + 1657, 1659, 1654, 1660, 1657, 1661, 1647, 1648, 1662, 1651, + 1661, 1663, 1665, 1656, 1668, 1666, 1667, 1655, 1652, 1666, + 1657, 1659, 1667, 1668, 1671, 1660, 1663, 1662, 1669, 1669, + 1670, 1665, 1672, 1672, 1670, 1671, 1673, 1674, 1676, 1675, + 1671, 1677, 1678, 1676, 1679, 1680, 1688, 1681, 1682, 1682, + 1679, 1674, 1681, 1683, 1683, 1684, 1686, 1673, 1675, 1684, - 1687, 1689, 1692, 1692, 1691, 1685, 1689, 1691, 1693, 1693, - 1683, 1681, 1687, 1694, 1694, 1695, 1696, 1697, 1688, 1698, - 1699, 1700, 1696, 1697, 1698, 1704, 1699, 1702, 1704, 1705, - 1700, 1708, 1702, 1706, 1706, 1695, 1709, 1710, 1711, 1711, - 1712, 1705, 1710, 1708, 1716, 1713, 1714, 1717, 1709, 1712, - 1713, 1714, 1715, 1715, 1718, 1719, 1717, 1720, 1721, 1722, - 1727, 1720, 1723, 1721, 1716, 1722, 1725, 1725, 1726, 1727, - 1728, 1728, 1718, 1729, 1719, 1730, 1723, 1731, 1725, 1732, - 1733, 1739, 1729, 1740, 1732, 1742, 1726, 1730, 1736, 1736, - 1743, 1738, 1745, 1733, 1738, 1744, 1752, 1739, 1731, 1740, + 1680, 1677, 1678, 1687, 1694, 1686, 1688, 1689, 1689, 1690, + 1690, 1691, 1692, 1704, 1687, 1693, 1691, 1691, 1692, 1687, + 1695, 1693, 1696, 1697, 1699, 1695, 1701, 1700, 1702, 1697, + 1694, 1700, 1706, 1703, 1696, 1704, 1699, 1705, 1701, 1703, + 1708, 1709, 1710, 1705, 1706, 1712, 1716, 1710, 1712, 1713, + 1713, 0, 1708, 1702, 1714, 1714, 1715, 1715, 1717, 1718, + 1709, 1721, 1719, 1720, 1717, 1718, 1716, 1719, 1723, 1720, + 1721, 1725, 1726, 1723, 1725, 1727, 1727, 1729, 1730, 1733, + 1731, 1732, 1732, 1737, 1726, 1731, 1734, 1735, 1733, 1729, + 1730, 1734, 1735, 1736, 1736, 1738, 1739, 1740, 1741, 1744, - 1742, 1744, 1746, 1746, 1743, 1747, 1749, 1747, 1751, 1745, - 1748, 1748, 1753, 1753, 1749, 1751, 1752, 1754, 1755, 1756, - 1757, 1758, 1759, 1760, 1761, 1763, 1754, 0, 1764, 1766, - 1761, 1756, 1757, 1758, 1765, 1765, 1767, 1769, 1760, 1755, - 1764, 1768, 1769, 1761, 1768, 1763, 1770, 1766, 1759, 1772, - 1773, 1774, 1773, 1775, 1772, 1776, 1767, 1780, 1775, 1778, - 1782, 1781, 1776, 1783, 1784, 1783, 1770, 1787, 1778, 1774, - 1781, 1786, 1782, 1786, 1789, 1780, 1788, 1788, 1791, 1790, - 1791, 1787, 1792, 1784, 1790, 1793, 1794, 1792, 1795, 1796, - 1793, 1797, 1798, 1799, 1801, 1796, 1797, 1802, 1803, 1803, + 1742, 1743, 1741, 1737, 1738, 1742, 1747, 1743, 1746, 1746, + 1748, 1749, 1749, 1744, 1739, 1751, 1740, 1750, 1752, 1748, + 1746, 1754, 1759, 1753, 1747, 1759, 1750, 1751, 1753, 1757, + 1757, 1760, 1761, 0, 1754, 1763, 1765, 1764, 1766, 1752, + 1767, 1767, 1765, 1768, 1773, 1768, 1770, 1760, 1761, 1772, + 1763, 1764, 1769, 1769, 1770, 1766, 1772, 1774, 1774, 1775, + 1776, 1777, 1778, 1779, 1773, 1780, 1782, 1781, 1775, 1784, + 1787, 1785, 1782, 1777, 1778, 1779, 1786, 1786, 1788, 1791, + 0, 1776, 1781, 1785, 1789, 1782, 1795, 1789, 1787, 1784, + 1790, 1780, 1793, 1799, 1794, 1790, 1794, 1793, 1788, 1791, - 1789, 1799, 1804, 1804, 1794, 1798, 1805, 1806, 1795, 1807, - 1810, 1802, 1808, 1801, 1809, 1807, 1809, 1808, 1810, 1811, - 1811, 1805, 1812, 1813, 1813, 1818, 1810, 1806, 1814, 1814, - 1815, 1816, 1819, 1817, 1812, 1817, 1820, 1819, 1819, 1815, - 1816, 1821, 1823, 1816, 1824, 1820, 1818, 1825, 1827, 1824, - 1828, 1829, 1825, 1821, 1823, 1830, 1830, 1831, 1832, 1834, - 1829, 1827, 1833, 1839, 1835, 1837, 1840, 1841, 1838, 1848, - 1828, 1840, 1841, 1834, 1849, 1831, 1832, 1837, 1833, 1835, - 1838, 1842, 1845, 1839, 1850, 1847, 1851, 1852, 1845, 1849, - 1842, 1847, 1848, 1853, 1853, 1854, 1852, 1855, 1855, 1856, + 1796, 1797, 1799, 1801, 1795, 1796, 1802, 1803, 1797, 1804, + 1805, 1804, 1807, 1808, 1807, 1802, 1809, 1809, 1810, 1803, + 1811, 1801, 1812, 1813, 1812, 1811, 1814, 1808, 1813, 1805, + 1815, 1814, 1816, 1817, 1819, 1818, 1822, 1820, 1887, 1817, + 1818, 1827, 1823, 1826, 1810, 1820, 1887, 1819, 1815, 1824, + 1824, 1828, 1816, 1825, 1825, 1822, 1823, 1828, 1826, 1829, + 1830, 1827, 1830, 1831, 1829, 1832, 1832, 1836, 1833, 1834, + 1834, 1831, 1835, 1835, 1838, 1839, 1836, 1837, 1841, 1831, + 1833, 1840, 1837, 1840, 1839, 1842, 1843, 1839, 1844, 1846, + 1842, 1842, 1838, 1847, 1850, 1843, 1851, 1848, 1847, 1841, - 1858, 1845, 1850, 1857, 1854, 1858, 1859, 1857, 1860, 1861, - 1862, 1851, 1865, 1860, 1860, 1861, 1862, 1863, 1856, 1859, - 1863, 1864, 1868, 1868, 1869, 1869, 1870, 1871, 1871, 1864, - 1872, 1872, 1865, 1873, 1874, 1870, 1875, 1883, 1876, 1869, - 1877, 1877, 1875, 1876, 1879, 1873, 1878, 1878, 1880, 1879, - 1869, 1882, 1874, 1886, 1880, 1882, 1884, 1883, 1887, 1888, - 1884, 1889, 1890, 1887, 1892, 1891, 1894, 1890, 1893, 1893, - 1894, 1895, 1896, 1897, 1899, 1898, 1889, 1896, 1886, 1900, - 1892, 1901, 1888, 1891, 1900, 1902, 1895, 1898, 1903, 1903, - 1905, 1906, 1907, 1899, 1901, 1908, 1909, 1910, 1905, 1897, + 1844, 1846, 1848, 1852, 1853, 1853, 1854, 1850, 1855, 1856, + 1860, 1861, 1852, 1857, 1858, 1862, 1851, 1874, 1871, 1876, + 1876, 1865, 1860, 1861, 1854, 1856, 1855, 1857, 1863, 1858, + 1865, 1864, 1868, 1863, 1870, 1862, 1864, 1872, 1868, 1873, + 1870, 1871, 1874, 1879, 1875, 1877, 1878, 1878, 0, 1888, + 1882, 1868, 1872, 1875, 1877, 1880, 1881, 1873, 1884, 1880, + 1883, 1881, 1879, 1882, 1884, 1883, 1883, 1885, 1886, 1888, + 1893, 1886, 1896, 1885, 1891, 1891, 1892, 1892, 1897, 1893, + 1894, 1894, 1895, 1895, 1896, 1899, 1898, 1900, 1900, 1906, + 1899, 1892, 1898, 1901, 1901, 1902, 1897, 1903, 1909, 1911, - 1911, 1912, 1913, 1902, 1915, 1916, 1916, 0, 1919, 1917, - 1906, 1907, 1917, 1912, 1918, 1920, 1910, 0, 1908, 1915, - 1909, 1911, 1919, 1913, 1921, 1921, 1924, 1918, 1920, 1922, - 1922, 1923, 1923, 1925, 1926, 1926, 1927, 1928, 1928, 1929, - 1932, 1924, 1931, 1933, 1929, 1927, 1925, 1931, 1927, 1934, - 1935, 1935, 1936, 1936, 1937, 1938, 1938, 1939, 1940, 1940, - 1932, 1934, 1941, 1933, 1942, 1943, 1943, 1944, 1944, 1942, - 1945, 1946, 1947, 1937, 1948, 1939, 1950, 1941, 1951, 1951, - 1946, 1950, 1952, 1955, 1945, 1954, 1947, 1953, 1953, 1955, - 1959, 1956, 1960, 1948, 1956, 1957, 1957, 1958, 1958, 1961, + 1902, 1905, 1892, 1903, 1907, 1905, 1910, 1913, 1907, 1906, + 1912, 1910, 1913, 1914, 1915, 1916, 1916, 1917, 1918, 1919, + 1920, 1917, 1911, 1909, 1919, 1912, 1921, 1923, 1922, 1924, + 1915, 1914, 1923, 1918, 1925, 1926, 1926, 1928, 1921, 1929, + 1930, 1931, 1924, 1932, 1933, 1928, 1920, 1922, 1934, 1935, + 1936, 1938, 1925, 1939, 1939, 1941, 1942, 1940, 1929, 1930, + 1940, 1935, 1943, 1933, 1931, 1947, 1938, 1932, 1941, 1934, + 1942, 1936, 1944, 1944, 1948, 1943, 1945, 1945, 1946, 1946, + 1947, 1949, 1949, 1950, 1951, 1951, 1952, 1948, 1954, 1955, + 1956, 1952, 1950, 1954, 1957, 1950, 1958, 1958, 1959, 1959, - 1964, 1952, 1965, 1954, 1962, 1962, 1966, 1960, 1967, 1959, - 1969, 1957, 1967, 1968, 1968, 1970, 1971, 1974, 1961, 1975, - 1964, 1966, 1973, 1973, 1976, 1965, 1975, 1977, 1981, 1969, - 1970, 1971, 1978, 1978, 1979, 1983, 1986, 1974, 1976, 1980, - 1984, 1980, 1987, 1979, 1985, 1984, 1988, 1983, 1981, 1985, - 1990, 1989, 1992, 1977, 1993, 1987, 1989, 1992, 1994, 1993, - 1995, 1986, 1996, 1997, 2000, 1998, 1995, 1988, 2001, 1997, - 1998, 2002, 1999, 1994, 2002, 2003, 1990, 1999, 2004, 2005, - 2007, 2001, 2006, 1996, 2003, 2012, 2008, 2004, 2005, 2000, - 2009, 2006, 2008, 2010, 2007, 2014, 2009, 2010, 2015, 2015, + 1960, 1961, 1961, 1962, 1963, 1963, 1957, 1964, 1965, 1955, + 1956, 1966, 1966, 1965, 1967, 1967, 1968, 1969, 1970, 1960, + 1971, 1962, 1964, 1973, 1974, 1974, 1969, 1975, 1973, 1977, + 1968, 1978, 1970, 1976, 1976, 1979, 1982, 1978, 1979, 1971, + 1980, 1980, 1981, 1981, 1983, 1984, 1975, 1977, 1985, 1985, + 1987, 1988, 1989, 1990, 1992, 1982, 1980, 1990, 1999, 1983, + 1991, 1991, 1993, 1994, 1984, 1996, 1996, 1989, 1997, 1998, + 1987, 2000, 1999, 1992, 1988, 2001, 1998, 1993, 1994, 2002, + 2003, 2003, 2004, 2005, 2006, 2005, 2008, 2009, 1997, 2000, + 2010, 2004, 2009, 2001, 2011, 2010, 2012, 2013, 2008, 2015, - 2016, 2017, 2017, 2018, 2014, 2012, 2016, 2023, 2020, 2024, - 2017, 2021, 2022, 2022, 2026, 2027, 2029, 2028, 2024, 2033, - 2035, 2035, 2023, 2018, 2020, 2018, 2026, 2021, 2029, 2032, - 2031, 2027, 2028, 2031, 2032, 2034, 2036, 2036, 2040, 2033, - 2038, 2038, 2039, 2040, 2041, 2039, 2042, 2034, 2043, 2043, - 2041, 2044, 2042, 2045, 2045, 2046, 2047, 2048, 2049, 2049, - 2051, 2053, 2053, 2052, 2051, 2044, 2052, 2046, 2054, 2055, - 2047, 2056, 2059, 2054, 2062, 2057, 2048, 2061, 2055, 2057, - 2058, 2058, 2061, 2063, 2064, 2059, 2065, 2066, 2067, 2068, - 2065, 2056, 2070, 2067, 2062, 2068, 2069, 2072, 2064, 2073, + 2019, 2014, 2017, 2018, 2006, 2002, 2014, 2017, 2018, 2012, + 2020, 2021, 2023, 2025, 2022, 2019, 2020, 2023, 2013, 2011, + 2022, 2024, 2026, 2084, 2027, 2015, 2024, 2027, 2028, 2032, + 2029, 2030, 2021, 2031, 2037, 2026, 2084, 2028, 2025, 2029, + 2030, 2033, 2031, 2032, 2034, 2035, 2039, 2033, 2043, 2035, + 2034, 2040, 2040, 2041, 2037, 2039, 2042, 2042, 2045, 2041, + 2046, 2047, 2047, 2048, 2049, 2042, 2052, 2051, 2043, 2053, + 2043, 2054, 2056, 2049, 2045, 2056, 2046, 2058, 2048, 2051, + 2057, 2059, 2052, 2054, 2053, 2057, 2060, 2060, 2061, 2061, + 2063, 2063, 2064, 2059, 2065, 2064, 2066, 2058, 2067, 2065, - 2074, 2075, 2069, 2063, 2073, 2079, 2074, 2066, 2081, 2075, - 2070, 2081, 2076, 2072, 2076, 2080, 2080, 2082, 2085, 2079, - 2083, 2083, 2085, 2086, 2087, 2088, 2088, 2094, 2089, 2086, - 2092, 2092, 2096, 2097, 2100, 2101, 2087, 2089, 2108, 2100, - 2104, 2104, 2102, 2082, 2108, 2094, 2096, 2102, 2103, 2097, - 2106, 2106, 2110, 2103, 2109, 2109, 2111, 2112, 2114, 2115, - 2118, 2101, 2112, 2116, 2116, 2120, 2119, 2121, 2110, 2118, - 2124, 2115, 2119, 2123, 2123, 2125, 2129, 2114, 2111, 2127, - 2127, 2129, 2121, 2120, 2128, 2128, 2130, 2132, 2131, 2124, - 2131, 2130, 2133, 2125, 2134, 2135, 2136, 2136, 2137, 2137, + 2068, 2068, 2066, 2069, 2067, 2070, 2070, 2071, 2072, 2073, + 2074, 2074, 2076, 2078, 2078, 2077, 2076, 2069, 2077, 2071, + 2079, 2080, 2072, 2081, 2086, 2079, 2087, 2082, 2073, 2086, + 2080, 2082, 2083, 2083, 2088, 2089, 2090, 2091, 2095, 2092, + 2090, 2093, 2094, 2081, 2092, 2097, 2087, 2093, 2094, 2089, + 2098, 2100, 2099, 2104, 2088, 2098, 2095, 2091, 2099, 2100, + 2101, 2097, 2101, 2105, 2105, 2106, 2107, 2104, 2106, 2108, + 2108, 2110, 2111, 2112, 2114, 2110, 2113, 2113, 2111, 2117, + 2117, 2119, 2121, 2114, 2122, 2112, 2125, 2126, 2127, 2128, + 2135, 2125, 2107, 2127, 2128, 2136, 2121, 2129, 2129, 2119, - 2135, 2132, 2138, 2138, 2139, 2139, 2133, 2140, 2141, 2145, - 2142, 2143, 2143, 2146, 2134, 2142, 2144, 2144, 2147, 2140, - 2148, 2145, 2149, 2149, 2150, 2146, 2141, 2151, 2151, 2152, - 2152, 2153, 2154, 2155, 2156, 2157, 2148, 2159, 2147, 2160, - 2155, 2163, 2153, 2150, 2154, 2158, 2156, 2161, 2161, 2162, - 2158, 2164, 2165, 2166, 2167, 2157, 2173, 2159, 2162, 2160, - 2168, 2168, 2174, 2169, 2170, 2165, 2171, 2163, 2167, 2175, - 2176, 2164, 2169, 2176, 2173, 2177, 0, 2166, 2178, 2170, - 2179, 2171, 2187, 2178, 2174, 2179, 2180, 2180, 2188, 2177, - 2181, 2181, 2175, 2182, 2182, 2184, 2184, 2186, 2186, 2188, + 2122, 2131, 2131, 2133, 2134, 2134, 2135, 2137, 2139, 2133, + 2140, 2143, 2137, 2126, 2141, 2141, 2145, 2136, 2144, 2149, + 2143, 2146, 2140, 2150, 2144, 2148, 2148, 2139, 2152, 2152, + 2153, 2153, 2154, 2155, 2145, 2156, 2146, 2154, 2149, 2159, + 2157, 2150, 2160, 2161, 2156, 2157, 2158, 2162, 2158, 2163, + 2163, 2155, 2162, 2159, 2164, 2164, 2160, 2165, 2165, 2166, + 2166, 2167, 2168, 2161, 2169, 2170, 2170, 2171, 2171, 2169, + 2172, 2173, 2174, 2167, 2175, 2176, 2176, 2177, 2178, 2178, + 2168, 2181, 2172, 2173, 2179, 2179, 2180, 2182, 2183, 2184, + 2175, 2186, 2174, 2181, 2182, 2187, 2177, 2180, 2185, 2189, - 2187, 2189, 2191, 2192, 2193, 2194, 2195, 2196, 2198, 2198, - 2197, 2200, 2200, 2201, 2202, 2195, 2203, 2203, 2206, 2206, - 2189, 2192, 2191, 2202, 2205, 2194, 2193, 2196, 2197, 2207, - 2208, 2209, 2211, 2205, 2210, 2201, 2212, 2213, 2209, 2214, - 2215, 2215, 2216, 2216, 2218, 2217, 2219, 2207, 2208, 2210, - 2211, 2217, 2220, 2213, 2212, 2221, 2222, 2223, 2214, 2224, - 2221, 2219, 2218, 2225, 2224, 2225, 2226, 2226, 2227, 2230, - 2227, 2220, 2228, 2228, 2232, 2233, 2222, 2223, 2234, 2235, - 2236, 2237, 2241, 2232, 2238, 2236, 2242, 2245, 2230, 2242, - 2234, 2243, 2243, 2244, 2233, 2246, 2246, 2249, 2252, 2235, + 2183, 2188, 2188, 2185, 2190, 2191, 2192, 2193, 2189, 2184, + 2194, 2186, 2195, 2195, 2196, 2187, 2200, 2197, 2198, 2192, + 2201, 2202, 2204, 2196, 2194, 2191, 2203, 2207, 2207, 2203, + 2190, 2193, 2197, 2198, 2200, 2205, 2204, 2214, 2206, 2216, + 2205, 2218, 2201, 2206, 2202, 2208, 2208, 2209, 2209, 2211, + 2211, 2213, 2213, 2215, 2219, 2214, 2220, 2221, 2216, 2222, + 2223, 2218, 2228, 2224, 2215, 2225, 2225, 2229, 2222, 2227, + 2227, 2234, 2219, 2230, 2230, 2235, 2229, 2221, 2220, 2232, + 2223, 2224, 2233, 2233, 2228, 2236, 2237, 2238, 2232, 2234, + 2239, 2240, 2236, 2235, 2241, 2242, 2242, 2243, 2243, 2245, - 2247, 2237, 2241, 2238, 2247, 2245, 2250, 2254, 2244, 2255, - 2250, 2252, 2249, 2251, 2251, 2256, 2256, 2260, 2258, 2259, - 2259, 2261, 2261, 2262, 2270, 2263, 0, 2254, 2262, 2255, - 2258, 2264, 2264, 2269, 2269, 2272, 2260, 2263, 2271, 2271, - 2273, 2274, 2275, 2276, 2276, 2277, 2270, 2282, 2272, 2284, - 2274, 2275, 2282, 2273, 2279, 2279, 2283, 2285, 2286, 2287, - 2277, 2283, 2285, 2284, 2288, 2291, 2286, 2289, 2294, 2292, - 2297, 2293, 2299, 2288, 2292, 2289, 2293, 2297, 2287, 2300, - 2291, 2295, 2295, 2294, 2296, 2296, 2298, 2301, 2304, 2302, - 2299, 2298, 0, 2301, 2302, 2303, 2303, 2300, 2310, 2305, + 2244, 2237, 2247, 2246, 2248, 2238, 2244, 2240, 2239, 2248, + 2249, 2250, 0, 2241, 2251, 2253, 2253, 2245, 2246, 2251, + 2252, 2247, 2252, 2254, 2257, 2254, 2255, 2255, 2259, 2260, + 2249, 2250, 2261, 2262, 2263, 2264, 2268, 2259, 2265, 2263, + 2270, 2270, 2269, 2257, 2261, 2269, 2271, 2272, 2260, 2273, + 2273, 2276, 2281, 2262, 2274, 2264, 2268, 2265, 2274, 2277, + 2279, 2271, 2282, 2277, 2285, 2272, 2276, 2278, 2278, 2283, + 2283, 2286, 2281, 2279, 2287, 2289, 2285, 2292, 2287, 2299, + 2286, 2326, 2282, 2288, 2288, 2290, 2290, 2291, 2326, 2292, + 2293, 2293, 2291, 2301, 2289, 2298, 2298, 2300, 2300, 2302, - 2306, 2306, 0, 2304, 2305, 2307, 2307, 2311, 2311, 2312, - 2313, 2310, 2312, 2314, 2315, 2313, 2313, 2316, 2314, 2315, - 2317, 2318, 2319, 2316, 2317, 2320, 2318, 2321, 2322, 2323, - 2328, 2319, 2325, 2322, 2332, 2321, 2326, 2325, 2330, 2326, - 2320, 2323, 2328, 2330, 2331, 2333, 2334, 2335, 2337, 2331, - 2336, 2336, 2332, 2340, 2341, 2334, 2335, 2337, 2333, 2342, - 2343, 2343, 2344, 2348, 2345, 2346, 2347, 2347, 2350, 2352, - 2355, 2353, 2340, 2345, 2341, 2353, 2354, 2354, 2342, 2356, - 2346, 2344, 2348, 2350, 2357, 2356, 2358, 2359, 2359, 2352, - 2357, 2360, 2358, 2361, 2363, 2355, 2364, 2366, 2361, 2360, + 2303, 2299, 2304, 2305, 2305, 2306, 2301, 2308, 2308, 2303, + 2311, 2304, 2302, 2312, 2313, 2311, 2314, 2315, 2312, 2316, + 2306, 2314, 2317, 0, 2318, 2315, 2320, 2323, 2313, 2321, + 2322, 2317, 2318, 2328, 2321, 2322, 2324, 2324, 2316, 2325, + 2325, 2320, 2323, 2327, 2329, 2331, 2330, 0, 2327, 2333, + 2331, 2328, 2330, 2332, 2332, 2334, 2335, 2335, 2336, 2336, + 2334, 2339, 2329, 2342, 2333, 2340, 2340, 2341, 2342, 2342, + 2341, 2343, 2344, 2345, 2339, 2347, 2343, 2344, 2346, 2345, + 2347, 2348, 2346, 2349, 2350, 2352, 2351, 2361, 2354, 2357, + 2348, 2351, 2350, 2354, 2370, 2359, 2355, 2352, 2349, 2355, - 2367, 2366, 2368, 2363, 2370, 2370, 2371, 2371, 2378, 2364, - 2372, 2372, 2374, 2374, 2367, 2376, 2376, 2368, 2379, 2381, - 2382, 2382, 2387, 2379, 2379, 2384, 2384, 2389, 2378, 2385, - 2385, 2386, 2391, 2395, 2386, 2387, 2392, 2392, 2397, 2381, - 2393, 2393, 2394, 2394, 2398, 2389, 2396, 2396, 2395, 2399, - 2400, 2397, 2391, 2401, 2401, 2402, 2400, 2406, 2407, 2402, - 2405, 2408, 2398, 2399, 2409, 2405, 2405, 2410, 2411, 2416, - 2409, 2412, 2421, 2410, 2416, 2412, 2413, 2413, 2407, 2418, - 2406, 2408, 2419, 2422, 2423, 2419, 2422, 2418, 2425, 2424, - 2426, 2427, 2429, 2411, 2424, 2428, 2428, 2421, 2431, 2430, + 2359, 2357, 2360, 2362, 2363, 2361, 2364, 2360, 2365, 2365, + 2366, 2369, 2371, 2363, 2370, 2364, 2362, 2372, 2372, 2366, + 2373, 2375, 2377, 2374, 2376, 2376, 2381, 2379, 2384, 2382, + 2369, 2371, 2374, 2382, 2383, 2383, 2375, 2385, 2386, 2373, + 0, 2377, 2379, 2385, 2386, 2387, 2381, 2388, 2388, 2389, + 2390, 2387, 2392, 2384, 2393, 2390, 2395, 2389, 2396, 2397, + 2395, 2392, 2399, 2399, 2400, 2400, 2409, 2393, 2401, 2401, + 2403, 2403, 2396, 2404, 2397, 2405, 2410, 2404, 2407, 2407, + 2405, 2410, 2410, 2412, 2413, 2413, 2409, 2415, 2415, 2416, + 2416, 2417, 2418, 2420, 2417, 2422, 2423, 2423, 2424, 2424, - 2432, 2423, 2423, 2431, 2431, 2427, 2425, 2430, 2433, 2433, - 2426, 2429, 2434, 2434, 2435, 2435, 2436, 2436, 2438, 2432, - 2437, 2437, 2439, 2440, 2441, 2443, 2442, 2439, 2444, 2446, - 2446, 2448, 2451, 2447, 2438, 2442, 2447, 2450, 2450, 2451, - 2452, 2452, 2453, 2440, 2456, 2443, 2457, 2453, 2444, 2448, - 2441, 2455, 2455, 2456, 2458, 2457, 2460, 2461, 2461, 2463, - 2462, 2464, 2466, 2458, 2462, 2465, 2472, 2472, 2463, 2467, - 2465, 2465, 2473, 2475, 2460, 2466, 2464, 2476, 2467, 2479, - 2481, 2482, 2475, 2480, 2484, 2486, 2488, 2482, 2489, 2476, - 2473, 2488, 2480, 2489, 2490, 2490, 2484, 2493, 2491, 2500, + 2425, 2425, 2426, 2412, 2429, 2418, 2427, 2427, 2428, 2430, + 2431, 2420, 2432, 2432, 2433, 2422, 2431, 2426, 2433, 2436, + 2437, 2428, 2429, 2430, 2436, 2436, 2438, 2439, 2440, 2441, + 2442, 2452, 2443, 2449, 2440, 2441, 2443, 2444, 2444, 2447, + 2454, 2449, 2450, 2437, 2447, 2450, 2438, 2439, 2453, 2455, + 2456, 2453, 2457, 2458, 2455, 2442, 2452, 2454, 2454, 2459, + 2459, 2460, 2461, 2463, 2464, 2464, 2472, 2458, 2456, 2462, + 2461, 2469, 2457, 0, 2462, 2462, 2465, 2465, 2466, 2466, + 2460, 2471, 2463, 2467, 2467, 2468, 2468, 2469, 2470, 2473, + 2474, 2475, 2472, 2470, 2477, 2477, 2478, 2479, 2473, 2478, - 2481, 2501, 2493, 2763, 2479, 2763, 2486, 2491, 2494, 2494, - 2496, 2496, 2494, 2497, 2497, 2498, 2498, 2499, 2502, 2500, - 2501, 2504, 2508, 2502, 2505, 2506, 2499, 2504, 2509, 2505, - 2506, 2507, 2507, 2510, 2511, 2512, 2513, 2516, 2510, 2517, - 2508, 2512, 2514, 2514, 2518, 2520, 2520, 2522, 2525, 2509, - 2523, 2524, 2511, 2526, 2517, 2524, 2516, 2525, 2527, 2528, - 2522, 2513, 2530, 2523, 2518, 2529, 2532, 2528, 2537, 2526, - 2529, 2531, 2531, 2534, 2534, 2535, 2535, 2527, 2539, 2539, - 2541, 2542, 2543, 2546, 2546, 2532, 2544, 2547, 2530, 2537, - 2548, 2544, 2549, 2551, 2551, 2552, 2541, 2542, 2543, 2554, + 2482, 2471, 2481, 2481, 2483, 2483, 2491, 2482, 2484, 2487, + 2474, 2475, 2488, 2484, 2489, 2479, 2486, 2486, 2487, 2492, + 2492, 2488, 2493, 2489, 2491, 2494, 2493, 2495, 2497, 2498, + 2496, 2506, 2502, 2514, 2494, 2496, 2496, 2502, 2498, 2503, + 2503, 2497, 2495, 2505, 2505, 2508, 2509, 2512, 2513, 2506, + 2515, 2517, 2519, 2514, 2508, 2521, 2515, 2513, 2509, 2522, + 2521, 2523, 2523, 2517, 2522, 2524, 2526, 2529, 2529, 2530, + 2530, 2526, 2512, 2519, 2524, 2527, 2527, 2531, 2531, 2527, + 2532, 2533, 2535, 2534, 2537, 2541, 2538, 2535, 2539, 2532, + 2537, 2538, 2542, 2539, 2540, 2540, 2544, 2546, 2549, 2543, - 2555, 2556, 2556, 2558, 2554, 2557, 2557, 2547, 2560, 2552, - 2562, 2549, 2561, 2548, 2559, 2559, 2564, 2565, 2563, 2560, - 2566, 2561, 2555, 2558, 2563, 2567, 2567, 2573, 2568, 2565, - 2562, 2568, 2569, 2569, 2559, 2564, 2574, 2575, 2583, 2573, - 2566, 2576, 2576, 2575, 2577, 2578, 2579, 2577, 2581, 2582, - 2585, 2578, 2584, 2581, 2582, 2589, 2574, 2583, 2584, 2586, - 2586, 2588, 2588, 2590, 2579, 2592, 2592, 2585, 2585, 2593, - 2593, 2594, 2590, 2595, 2589, 2596, 2594, 2597, 2597, 2605, - 2596, 2598, 2598, 2599, 2599, 2600, 2607, 2595, 2602, 2602, - 2600, 2608, 2609, 2610, 2610, 2612, 2612, 2613, 2605, 2614, + 2545, 2533, 2534, 2541, 2543, 2550, 2545, 2547, 2547, 2551, + 2553, 2553, 2555, 2542, 2544, 2556, 2559, 2549, 2558, 2557, + 2550, 2560, 2546, 2557, 2563, 2555, 2561, 2558, 2556, 2551, + 2562, 2574, 2559, 2565, 2561, 2562, 2564, 2564, 2567, 2567, + 2560, 2568, 2568, 2570, 2572, 2572, 2575, 2574, 2577, 2576, + 2563, 2580, 2565, 2577, 2579, 2579, 2581, 2582, 2584, 2584, + 2585, 2590, 2575, 2589, 2570, 2576, 2586, 2586, 2589, 2591, + 2591, 2580, 2592, 2592, 2585, 2593, 2582, 2594, 2594, 2581, + 2595, 2596, 2597, 2590, 2599, 2601, 2598, 2600, 2602, 2602, + 2596, 2595, 2598, 2603, 2608, 2593, 2603, 2594, 2609, 2600, - 2615, 2616, 2616, 2617, 2625, 2618, 2621, 2621, 2607, 2615, - 2618, 2613, 2624, 2608, 2609, 2623, 2623, 2624, 2625, 2614, - 2626, 2627, 2617, 2628, 2629, 2629, 2626, 2630, 2632, 2633, - 2634, 2628, 2630, 2627, 2635, 2634, 2636, 2638, 2639, 2640, - 2641, 2645, 2636, 2642, 2649, 2638, 2635, 2643, 2632, 2633, - 2644, 2646, 2650, 2653, 2653, 2727, 2646, 2639, 2727, 2640, - 2641, 2642, 2645, 2643, 2649, 2650, 0, 2644, 2644, 2654, - 2654, 2655, 2659, 2659, 2668, 2655, 2661, 2661, 2662, 2662, - 2665, 2662, 2663, 2663, 2665, 2663, 2664, 2664, 2669, 2664, - 2667, 2667, 2668, 2671, 2672, 2672, 2675, 2676, 2671, 2677, + 2604, 2604, 2597, 2599, 2610, 2601, 2608, 2611, 2611, 2612, + 2610, 2613, 2612, 2614, 2616, 2617, 2618, 2613, 2609, 2616, + 2617, 2619, 2620, 2621, 2621, 2623, 2623, 2619, 2624, 2625, + 2630, 2614, 2627, 2627, 0, 2618, 2628, 2628, 2625, 2620, + 2620, 2629, 2640, 2631, 2630, 2642, 2629, 2624, 2631, 2632, + 2632, 2633, 2633, 2634, 2634, 2635, 2637, 2637, 2643, 2644, + 2635, 2640, 2645, 2645, 2647, 2647, 2649, 2642, 2648, 2650, + 2651, 2651, 2653, 2661, 2654, 2657, 2657, 2663, 2650, 2654, + 2643, 2644, 2648, 2659, 2659, 2660, 2649, 2661, 2662, 2663, + 2660, 2653, 2664, 2666, 2662, 2665, 2665, 2668, 2666, 2669, - 2678, 2679, 2669, 2677, 2676, 2681, 2682, 2683, 2683, 2678, - 2684, 2684, 2685, 2685, 2686, 2682, 2679, 2687, 2688, 2689, - 2690, 2675, 2687, 2681, 2689, 2689, 2690, 2688, 2691, 2686, - 2688, 2692, 2694, 2693, 2695, 2844, 2696, 2694, 2698, 2695, - 2697, 2697, 2844, 2698, 2701, 2701, 2692, 2704, 2704, 2705, - 2705, 2706, 2706, 2691, 2693, 2696, 2707, 2707, 2708, 2708, - 2709, 2709, 2710, 2710, 2712, 2713, 2713, 2714, 2718, 2716, - 2717, 2717, 2719, 2712, 2720, 2721, 2721, 2722, 2723, 2723, - 2726, 2728, 2730, 2718, 2736, 2719, 2720, 2714, 2716, 2729, - 2729, 2732, 2722, 2733, 2732, 2734, 2735, 2737, 2726, 2733, + 2664, 2670, 2671, 2672, 2674, 2675, 2670, 2676, 2677, 2672, + 2679, 2678, 2674, 2680, 2671, 2681, 2682, 2668, 2685, 2669, + 2686, 2682, 2689, 2689, 2675, 2712, 2679, 2676, 2677, 2678, + 2680, 2680, 2712, 2686, 2690, 2690, 2681, 2691, 2685, 2695, + 2695, 2691, 2697, 2697, 2698, 2698, 2701, 2698, 2699, 2699, + 2701, 2699, 2700, 2700, 2704, 2700, 2703, 2703, 2707, 2705, + 2708, 2708, 2711, 2707, 2713, 2714, 2715, 2717, 2713, 2718, + 2719, 2719, 2704, 2705, 2714, 2720, 2720, 2722, 2718, 2721, + 2721, 2715, 2724, 2723, 2725, 2717, 2727, 2711, 2723, 2725, + 2725, 2724, 2722, 2726, 2724, 2728, 2729, 2730, 2731, 2726, - 2730, 2735, 2738, 2736, 2740, 2749, 2754, 2728, 2749, 2734, - 2751, 2751, 2752, 2752, 2755, 2737, 2756, 2757, 2738, 2740, - 2756, 2758, 2760, 2755, 2764, 2761, 2762, 2765, 2765, 2754, - 2766, 2762, 2767, 2769, 2768, 2758, 2761, 2757, 2770, 2764, - 2771, 2772, 2776, 2766, 2773, 2760, 2777, 2778, 2778, 2769, - 2779, 2767, 2768, 2780, 2780, 2771, 2776, 2781, 2781, 2779, - 2782, 2782, 2772, 2770, 2773, 2784, 2777, 2783, 2783, 2785, - 2786, 2787, 2788, 2786, 2789, 2790, 2787, 2788, 2792, 2791, - 2793, 2794, 2794, 2795, 2784, 2791, 2796, 2796, 2798, 2785, - 2790, 2800, 2792, 2803, 2803, 2804, 2804, 2805, 2806, 2789, + 2732, 2734, 2730, 2731, 2733, 2733, 2734, 2737, 2737, 2748, + 2728, 2727, 2740, 2740, 2741, 2741, 2750, 2729, 2748, 2732, + 2742, 2742, 2743, 2743, 2744, 2744, 2745, 2745, 2746, 2746, + 2749, 2749, 2752, 2753, 2753, 2754, 2750, 2756, 2758, 2755, + 2757, 2757, 2759, 2759, 2762, 2763, 2764, 2766, 2763, 2756, + 2754, 2752, 2755, 2758, 2765, 2765, 2768, 2769, 2772, 2768, + 2770, 2771, 2762, 2769, 2773, 2766, 2771, 2774, 2785, 2776, + 2790, 2785, 2764, 2794, 2770, 2787, 2787, 2772, 2788, 2788, + 2791, 2792, 2773, 2774, 2776, 2792, 2793, 2794, 2796, 2791, + 2797, 2798, 2799, 2790, 2799, 2800, 2798, 2801, 2801, 2802, - 2793, 2807, 2795, 2798, 2808, 2805, 2809, 2807, 2810, 2800, - 2808, 2811, 2812, 2812, 2814, 2816, 2819, 2806, 2817, 2820, - 2809, 2810, 2817, 2821, 2820, 2822, 2823, 2824, 2825, 2816, - 2811, 2828, 2826, 2825, 2814, 2829, 2819, 2826, 2822, 2823, - 2830, 2830, 2821, 2831, 2832, 2837, 2824, 0, 2831, 2828, - 2832, 2833, 2833, 2834, 2829, 2835, 2836, 2838, 2834, 2843, - 2835, 2836, 2839, 2838, 2837, 2840, 2840, 2839, 2842, 2845, - 2846, 2847, 2842, 2848, 2849, 2850, 2850, 2847, 2843, 2852, - 2852, 2853, 2855, 2856, 2857, 2862, 2854, 2849, 2845, 2846, - 2853, 2854, 2848, 2853, 2858, 2858, 2860, 2857, 2859, 2863, + 2803, 2797, 2804, 2806, 2808, 2805, 2793, 2807, 2815, 2809, + 2800, 2796, 2802, 2812, 2813, 2814, 2814, 2815, 2820, 2803, + 2804, 2805, 2807, 2816, 2816, 2808, 2821, 2812, 2806, 2809, + 2817, 2817, 2818, 2818, 2813, 2819, 2819, 2820, 2822, 2823, + 2824, 2822, 2825, 2826, 2823, 2824, 2821, 2827, 2828, 2829, + 2830, 2830, 2831, 2827, 2832, 2832, 2836, 2834, 2826, 2839, + 2839, 2842, 2828, 2840, 2840, 2841, 2846, 2825, 2845, 2829, + 2843, 2831, 2834, 2841, 2836, 2844, 2843, 2847, 2850, 2846, + 2842, 2844, 2845, 2848, 2848, 2852, 2853, 2855, 2856, 2857, + 2853, 2858, 2859, 2856, 2860, 2861, 2847, 2862, 2850, 2852, - 2863, 2855, 2856, 2859, 2864, 2865, 2865, 2866, 2866, 2860, - 2867, 2862, 2868, 2869, 2874, 2867, 2870, 2870, 2876, 2868, - 2871, 2874, 2872, 2864, 2872, 2871, 2873, 2873, 2875, 2877, - 2878, 2881, 2869, 2885, 2877, 2875, 2883, 2876, 2880, 2880, - 2884, 2883, 2886, 2887, 2887, 2884, 2889, 2889, 2890, 2878, - 2881, 2891, 2885, 2892, 2892, 2893, 2893, 2894, 2896, 2896, - 2904, 2886, 2897, 2897, 2894, 2898, 2900, 2890, 2903, 2905, - 2891, 2900, 2898, 2903, 2906, 2906, 2907, 2907, 0, 2904, - 0, 0, 0, 0, 0, 0, 0, 0, 2905, 2911, - 2911, 2911, 2911, 2911, 2911, 2911, 2912, 2912, 2912, 2912, + 2861, 2864, 2862, 2865, 2858, 2859, 2867, 2855, 2857, 2866, + 2866, 2867, 2868, 2860, 2869, 2869, 2870, 2873, 2868, 2864, + 2871, 2870, 2865, 2872, 2874, 2871, 2875, 2879, 2872, 2881, + 2874, 2875, 2876, 2876, 2878, 2880, 2873, 2882, 2878, 2883, + 2884, 2885, 2880, 2886, 2886, 2883, 2879, 2890, 2881, 2888, + 2888, 2889, 2890, 2891, 2885, 2892, 2882, 2893, 2896, 2884, + 2889, 2894, 2894, 2889, 2895, 2898, 2899, 2899, 2900, 2895, + 2893, 2896, 2891, 2904, 2892, 2901, 2901, 2902, 2902, 2903, + 2904, 2905, 2906, 2906, 2903, 2907, 2908, 2900, 2908, 2910, + 2907, 2898, 2909, 2909, 2911, 2912, 2910, 2913, 2914, 2917, - 2912, 2912, 2912, 2913, 2913, 2913, 2913, 2913, 2913, 2913, - 2914, 2914, 2914, 2914, 2914, 2914, 2914, 2915, 2915, 2915, - 2915, 2915, 2915, 2915, 2917, 2917, 0, 2917, 2917, 2917, - 2917, 2918, 2918, 0, 0, 0, 2918, 2918, 2919, 2919, - 0, 0, 2919, 0, 2919, 2920, 0, 0, 0, 0, - 0, 2920, 2921, 2921, 0, 0, 0, 2921, 2921, 2922, - 0, 0, 0, 0, 0, 2922, 2923, 2923, 0, 2923, - 2923, 2923, 2923, 2924, 2924, 0, 2924, 2924, 2924, 2924, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, + 2905, 2911, 2913, 2916, 2916, 2919, 2920, 2921, 2922, 2926, + 2919, 2920, 2923, 2923, 2912, 2925, 2925, 2914, 2917, 2927, + 2928, 2928, 2929, 2929, 2930, 2940, 2921, 2922, 2926, 2932, + 2932, 2930, 2933, 2933, 2934, 2936, 2941, 2939, 2927, 0, + 2936, 2934, 2939, 0, 2940, 2942, 2942, 2943, 2943, 0, + 0, 0, 0, 0, 0, 2941, 2947, 2947, 2947, 2947, + 2947, 2947, 2947, 2948, 2948, 2948, 2948, 2948, 2948, 2948, + 2949, 2949, 2949, 2949, 2949, 2949, 2949, 2950, 2950, 2950, + 2950, 2950, 2950, 2950, 2951, 2951, 2951, 2951, 2951, 2951, + 2951, 2953, 2953, 0, 2953, 2953, 2953, 2953, 2954, 2954, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, - 2910 + 0, 0, 0, 2954, 2954, 2955, 2955, 0, 0, 2955, + 0, 2955, 2956, 0, 0, 0, 0, 0, 2956, 2957, + 2957, 0, 0, 0, 2957, 2957, 2958, 0, 0, 0, + 0, 0, 2958, 2959, 2959, 0, 2959, 2959, 2959, 2959, + 2960, 2960, 0, 2960, 2960, 2960, 2960, 2946, 2946, 2946, + 2946, 2946, 2946, 2946, 2946, 2946, 2946, 2946, 2946, 2946, + 2946, 2946, 2946, 2946, 2946, 2946, 2946, 2946, 2946, 2946, + 2946, 2946, 2946, 2946, 2946, 2946, 2946, 2946, 2946, 2946, + 2946, 2946, 2946, 2946, 2946, 2946, 2946, 2946 } ; static yy_state_type yy_last_accepting_state; @@ -2844,7 +2866,7 @@ static void config_end_include(void) } #endif -#line 2846 "" +#line 2868 "" #define YY_NO_INPUT 1 #line 185 "./util/configlexer.lex" #ifndef YY_NO_UNPUT @@ -2853,9 +2875,9 @@ static void config_end_include(void) #ifndef YY_NO_INPUT #define YY_NO_INPUT 1 #endif -#line 2855 "" +#line 2877 "" -#line 2857 "" +#line 2879 "" #define INITIAL 0 #define quotedstring 1 @@ -3077,7 +3099,7 @@ YY_DECL { #line 205 "./util/configlexer.lex" -#line 3079 "" +#line 3101 "" while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ { @@ -3110,13 +3132,13 @@ yy_match: while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 2911 ) + if ( yy_current_state >= 2947 ) 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] != 5681 ); + while ( yy_base[yy_current_state] != 5748 ); yy_find_action: yy_act = yy_accept[yy_current_state]; @@ -3711,842 +3733,857 @@ YY_RULE_SETUP case 114: YY_RULE_SETUP #line 322 "./util/configlexer.lex" -{ YDVAR(1, VAR_ZONEFILE) } +{ YDVAR(1, VAR_RPZ_ACTION_OVERRIDE) } YY_BREAK case 115: YY_RULE_SETUP #line 323 "./util/configlexer.lex" -{ YDVAR(1, VAR_MASTER) } +{ YDVAR(1, VAR_RPZ_CNAME_OVERRIDE) } YY_BREAK case 116: YY_RULE_SETUP #line 324 "./util/configlexer.lex" -{ YDVAR(1, VAR_URL) } +{ YDVAR(1, VAR_RPZ_LOG) } YY_BREAK case 117: YY_RULE_SETUP #line 325 "./util/configlexer.lex" -{ YDVAR(1, VAR_ALLOW_NOTIFY) } +{ YDVAR(1, VAR_ZONEFILE) } YY_BREAK case 118: YY_RULE_SETUP #line 326 "./util/configlexer.lex" -{ YDVAR(1, VAR_FOR_DOWNSTREAM) } +{ YDVAR(1, VAR_MASTER) } YY_BREAK case 119: YY_RULE_SETUP #line 327 "./util/configlexer.lex" -{ YDVAR(1, VAR_FOR_UPSTREAM) } +{ YDVAR(1, VAR_URL) } YY_BREAK case 120: YY_RULE_SETUP #line 328 "./util/configlexer.lex" -{ YDVAR(1, VAR_FALLBACK_ENABLED) } +{ YDVAR(1, VAR_ALLOW_NOTIFY) } YY_BREAK case 121: YY_RULE_SETUP #line 329 "./util/configlexer.lex" -{ YDVAR(0, VAR_VIEW) } +{ YDVAR(1, VAR_FOR_DOWNSTREAM) } YY_BREAK case 122: YY_RULE_SETUP #line 330 "./util/configlexer.lex" -{ YDVAR(1, VAR_VIEW_FIRST) } +{ YDVAR(1, VAR_FOR_UPSTREAM) } YY_BREAK case 123: YY_RULE_SETUP #line 331 "./util/configlexer.lex" -{ YDVAR(1, VAR_DO_NOT_QUERY_ADDRESS) } +{ YDVAR(1, VAR_FALLBACK_ENABLED) } YY_BREAK case 124: YY_RULE_SETUP #line 332 "./util/configlexer.lex" -{ YDVAR(1, VAR_DO_NOT_QUERY_LOCALHOST) } +{ YDVAR(0, VAR_VIEW) } YY_BREAK case 125: YY_RULE_SETUP #line 333 "./util/configlexer.lex" -{ YDVAR(2, VAR_ACCESS_CONTROL) } +{ YDVAR(1, VAR_VIEW_FIRST) } YY_BREAK case 126: YY_RULE_SETUP #line 334 "./util/configlexer.lex" -{ YDVAR(1, VAR_SEND_CLIENT_SUBNET) } +{ YDVAR(1, VAR_DO_NOT_QUERY_ADDRESS) } YY_BREAK case 127: YY_RULE_SETUP #line 335 "./util/configlexer.lex" -{ YDVAR(1, VAR_CLIENT_SUBNET_ZONE) } +{ YDVAR(1, VAR_DO_NOT_QUERY_LOCALHOST) } YY_BREAK case 128: YY_RULE_SETUP #line 336 "./util/configlexer.lex" -{ YDVAR(1, VAR_CLIENT_SUBNET_ALWAYS_FORWARD) } +{ YDVAR(2, VAR_ACCESS_CONTROL) } YY_BREAK case 129: YY_RULE_SETUP #line 337 "./util/configlexer.lex" -{ YDVAR(1, VAR_CLIENT_SUBNET_OPCODE) } +{ YDVAR(1, VAR_SEND_CLIENT_SUBNET) } YY_BREAK case 130: YY_RULE_SETUP #line 338 "./util/configlexer.lex" -{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV4) } +{ YDVAR(1, VAR_CLIENT_SUBNET_ZONE) } YY_BREAK case 131: YY_RULE_SETUP #line 339 "./util/configlexer.lex" -{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV6) } +{ YDVAR(1, VAR_CLIENT_SUBNET_ALWAYS_FORWARD) } YY_BREAK case 132: YY_RULE_SETUP #line 340 "./util/configlexer.lex" -{ YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV4) } +{ YDVAR(1, VAR_CLIENT_SUBNET_OPCODE) } YY_BREAK case 133: YY_RULE_SETUP #line 341 "./util/configlexer.lex" -{ YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV6) } +{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV4) } YY_BREAK case 134: YY_RULE_SETUP #line 342 "./util/configlexer.lex" -{ YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV4) } +{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV6) } YY_BREAK case 135: YY_RULE_SETUP #line 343 "./util/configlexer.lex" -{ YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV6) } +{ YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV4) } YY_BREAK case 136: YY_RULE_SETUP #line 344 "./util/configlexer.lex" -{ YDVAR(1, VAR_HIDE_IDENTITY) } +{ YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV6) } YY_BREAK case 137: YY_RULE_SETUP #line 345 "./util/configlexer.lex" -{ YDVAR(1, VAR_HIDE_VERSION) } +{ YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV4) } YY_BREAK case 138: YY_RULE_SETUP #line 346 "./util/configlexer.lex" -{ YDVAR(1, VAR_HIDE_TRUSTANCHOR) } +{ YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV6) } YY_BREAK case 139: YY_RULE_SETUP #line 347 "./util/configlexer.lex" -{ YDVAR(1, VAR_IDENTITY) } +{ YDVAR(1, VAR_HIDE_IDENTITY) } YY_BREAK case 140: YY_RULE_SETUP #line 348 "./util/configlexer.lex" -{ YDVAR(1, VAR_VERSION) } +{ YDVAR(1, VAR_HIDE_VERSION) } YY_BREAK case 141: YY_RULE_SETUP #line 349 "./util/configlexer.lex" -{ YDVAR(1, VAR_MODULE_CONF) } +{ YDVAR(1, VAR_HIDE_TRUSTANCHOR) } YY_BREAK case 142: YY_RULE_SETUP #line 350 "./util/configlexer.lex" -{ YDVAR(1, VAR_DLV_ANCHOR) } +{ YDVAR(1, VAR_IDENTITY) } YY_BREAK case 143: YY_RULE_SETUP #line 351 "./util/configlexer.lex" -{ YDVAR(1, VAR_DLV_ANCHOR_FILE) } +{ YDVAR(1, VAR_VERSION) } YY_BREAK case 144: YY_RULE_SETUP #line 352 "./util/configlexer.lex" -{ YDVAR(1, VAR_TRUST_ANCHOR_FILE) } +{ YDVAR(1, VAR_MODULE_CONF) } YY_BREAK case 145: YY_RULE_SETUP #line 353 "./util/configlexer.lex" -{ YDVAR(1, VAR_AUTO_TRUST_ANCHOR_FILE) } +{ YDVAR(1, VAR_DLV_ANCHOR) } YY_BREAK case 146: YY_RULE_SETUP #line 354 "./util/configlexer.lex" -{ YDVAR(1, VAR_TRUSTED_KEYS_FILE) } +{ YDVAR(1, VAR_DLV_ANCHOR_FILE) } YY_BREAK case 147: YY_RULE_SETUP #line 355 "./util/configlexer.lex" -{ YDVAR(1, VAR_TRUST_ANCHOR) } +{ YDVAR(1, VAR_TRUST_ANCHOR_FILE) } YY_BREAK case 148: YY_RULE_SETUP #line 356 "./util/configlexer.lex" -{ YDVAR(1, VAR_TRUST_ANCHOR_SIGNALING) } +{ YDVAR(1, VAR_AUTO_TRUST_ANCHOR_FILE) } YY_BREAK case 149: YY_RULE_SETUP #line 357 "./util/configlexer.lex" -{ YDVAR(1, VAR_ROOT_KEY_SENTINEL) } +{ YDVAR(1, VAR_TRUSTED_KEYS_FILE) } YY_BREAK case 150: YY_RULE_SETUP #line 358 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_OVERRIDE_DATE) } +{ YDVAR(1, VAR_TRUST_ANCHOR) } YY_BREAK case 151: YY_RULE_SETUP #line 359 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_SIG_SKEW_MIN) } +{ YDVAR(1, VAR_TRUST_ANCHOR_SIGNALING) } YY_BREAK case 152: YY_RULE_SETUP #line 360 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_SIG_SKEW_MAX) } +{ YDVAR(1, VAR_ROOT_KEY_SENTINEL) } YY_BREAK case 153: YY_RULE_SETUP #line 361 "./util/configlexer.lex" -{ YDVAR(1, VAR_BOGUS_TTL) } +{ YDVAR(1, VAR_VAL_OVERRIDE_DATE) } YY_BREAK case 154: YY_RULE_SETUP #line 362 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_CLEAN_ADDITIONAL) } +{ YDVAR(1, VAR_VAL_SIG_SKEW_MIN) } YY_BREAK case 155: YY_RULE_SETUP #line 363 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_PERMISSIVE_MODE) } +{ YDVAR(1, VAR_VAL_SIG_SKEW_MAX) } YY_BREAK case 156: YY_RULE_SETUP #line 364 "./util/configlexer.lex" -{ YDVAR(1, VAR_AGGRESSIVE_NSEC) } +{ YDVAR(1, VAR_BOGUS_TTL) } YY_BREAK case 157: YY_RULE_SETUP #line 365 "./util/configlexer.lex" -{ YDVAR(1, VAR_IGNORE_CD_FLAG) } +{ YDVAR(1, VAR_VAL_CLEAN_ADDITIONAL) } YY_BREAK case 158: YY_RULE_SETUP #line 366 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVE_EXPIRED) } +{ YDVAR(1, VAR_VAL_PERMISSIVE_MODE) } YY_BREAK case 159: YY_RULE_SETUP #line 367 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVE_EXPIRED_TTL) } +{ YDVAR(1, VAR_AGGRESSIVE_NSEC) } YY_BREAK case 160: YY_RULE_SETUP #line 368 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVE_EXPIRED_TTL_RESET) } +{ YDVAR(1, VAR_IGNORE_CD_FLAG) } YY_BREAK case 161: YY_RULE_SETUP #line 369 "./util/configlexer.lex" -{ YDVAR(1, VAR_FAKE_DSA) } +{ YDVAR(1, VAR_SERVE_EXPIRED) } YY_BREAK case 162: YY_RULE_SETUP #line 370 "./util/configlexer.lex" -{ YDVAR(1, VAR_FAKE_SHA1) } +{ YDVAR(1, VAR_SERVE_EXPIRED_TTL) } YY_BREAK case 163: YY_RULE_SETUP #line 371 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_LOG_LEVEL) } +{ YDVAR(1, VAR_SERVE_EXPIRED_TTL_RESET) } YY_BREAK case 164: YY_RULE_SETUP #line 372 "./util/configlexer.lex" -{ YDVAR(1, VAR_KEY_CACHE_SIZE) } +{ YDVAR(1, VAR_FAKE_DSA) } YY_BREAK case 165: YY_RULE_SETUP #line 373 "./util/configlexer.lex" -{ YDVAR(1, VAR_KEY_CACHE_SLABS) } +{ YDVAR(1, VAR_FAKE_SHA1) } YY_BREAK case 166: YY_RULE_SETUP #line 374 "./util/configlexer.lex" -{ YDVAR(1, VAR_NEG_CACHE_SIZE) } +{ YDVAR(1, VAR_VAL_LOG_LEVEL) } YY_BREAK case 167: YY_RULE_SETUP #line 375 "./util/configlexer.lex" -{ - YDVAR(1, VAR_VAL_NSEC3_KEYSIZE_ITERATIONS) } +{ YDVAR(1, VAR_KEY_CACHE_SIZE) } YY_BREAK case 168: YY_RULE_SETUP -#line 377 "./util/configlexer.lex" -{ YDVAR(1, VAR_ADD_HOLDDOWN) } +#line 376 "./util/configlexer.lex" +{ YDVAR(1, VAR_KEY_CACHE_SLABS) } YY_BREAK case 169: YY_RULE_SETUP -#line 378 "./util/configlexer.lex" -{ YDVAR(1, VAR_DEL_HOLDDOWN) } +#line 377 "./util/configlexer.lex" +{ YDVAR(1, VAR_NEG_CACHE_SIZE) } YY_BREAK case 170: YY_RULE_SETUP -#line 379 "./util/configlexer.lex" -{ YDVAR(1, VAR_KEEP_MISSING) } +#line 378 "./util/configlexer.lex" +{ + YDVAR(1, VAR_VAL_NSEC3_KEYSIZE_ITERATIONS) } YY_BREAK case 171: YY_RULE_SETUP #line 380 "./util/configlexer.lex" -{ YDVAR(1, VAR_PERMIT_SMALL_HOLDDOWN) } +{ YDVAR(1, VAR_ADD_HOLDDOWN) } YY_BREAK case 172: YY_RULE_SETUP #line 381 "./util/configlexer.lex" -{ YDVAR(1, VAR_USE_SYSLOG) } +{ YDVAR(1, VAR_DEL_HOLDDOWN) } YY_BREAK case 173: YY_RULE_SETUP #line 382 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_IDENTITY) } +{ YDVAR(1, VAR_KEEP_MISSING) } YY_BREAK case 174: YY_RULE_SETUP #line 383 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_TIME_ASCII) } +{ YDVAR(1, VAR_PERMIT_SMALL_HOLDDOWN) } YY_BREAK case 175: YY_RULE_SETUP #line 384 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_QUERIES) } +{ YDVAR(1, VAR_USE_SYSLOG) } YY_BREAK case 176: YY_RULE_SETUP #line 385 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_REPLIES) } +{ YDVAR(1, VAR_LOG_IDENTITY) } YY_BREAK case 177: YY_RULE_SETUP #line 386 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_TAG_QUERYREPLY) } +{ YDVAR(1, VAR_LOG_TIME_ASCII) } YY_BREAK case 178: YY_RULE_SETUP #line 387 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_LOCAL_ACTIONS) } +{ YDVAR(1, VAR_LOG_QUERIES) } YY_BREAK case 179: YY_RULE_SETUP #line 388 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_SERVFAIL) } +{ YDVAR(1, VAR_LOG_REPLIES) } YY_BREAK case 180: YY_RULE_SETUP #line 389 "./util/configlexer.lex" -{ YDVAR(2, VAR_LOCAL_ZONE) } +{ YDVAR(1, VAR_LOG_TAG_QUERYREPLY) } YY_BREAK case 181: YY_RULE_SETUP #line 390 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOCAL_DATA) } +{ YDVAR(1, VAR_LOG_LOCAL_ACTIONS) } YY_BREAK case 182: YY_RULE_SETUP #line 391 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOCAL_DATA_PTR) } +{ YDVAR(1, VAR_LOG_SERVFAIL) } YY_BREAK case 183: YY_RULE_SETUP #line 392 "./util/configlexer.lex" -{ YDVAR(1, VAR_UNBLOCK_LAN_ZONES) } +{ YDVAR(2, VAR_LOCAL_ZONE) } YY_BREAK case 184: YY_RULE_SETUP #line 393 "./util/configlexer.lex" -{ YDVAR(1, VAR_INSECURE_LAN_ZONES) } +{ YDVAR(1, VAR_LOCAL_DATA) } YY_BREAK case 185: YY_RULE_SETUP #line 394 "./util/configlexer.lex" -{ YDVAR(1, VAR_STATISTICS_INTERVAL) } +{ YDVAR(1, VAR_LOCAL_DATA_PTR) } YY_BREAK case 186: YY_RULE_SETUP #line 395 "./util/configlexer.lex" -{ YDVAR(1, VAR_STATISTICS_CUMULATIVE) } +{ YDVAR(1, VAR_UNBLOCK_LAN_ZONES) } YY_BREAK case 187: YY_RULE_SETUP #line 396 "./util/configlexer.lex" -{ YDVAR(1, VAR_EXTENDED_STATISTICS) } +{ YDVAR(1, VAR_INSECURE_LAN_ZONES) } YY_BREAK case 188: YY_RULE_SETUP #line 397 "./util/configlexer.lex" -{ YDVAR(1, VAR_SHM_ENABLE) } +{ YDVAR(1, VAR_STATISTICS_INTERVAL) } YY_BREAK case 189: YY_RULE_SETUP #line 398 "./util/configlexer.lex" -{ YDVAR(1, VAR_SHM_KEY) } +{ YDVAR(1, VAR_STATISTICS_CUMULATIVE) } YY_BREAK case 190: YY_RULE_SETUP #line 399 "./util/configlexer.lex" -{ YDVAR(0, VAR_REMOTE_CONTROL) } +{ YDVAR(1, VAR_EXTENDED_STATISTICS) } YY_BREAK case 191: YY_RULE_SETUP #line 400 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_ENABLE) } +{ YDVAR(1, VAR_SHM_ENABLE) } YY_BREAK case 192: YY_RULE_SETUP #line 401 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_INTERFACE) } +{ YDVAR(1, VAR_SHM_KEY) } YY_BREAK case 193: YY_RULE_SETUP #line 402 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_PORT) } +{ YDVAR(0, VAR_REMOTE_CONTROL) } YY_BREAK case 194: YY_RULE_SETUP #line 403 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_USE_CERT) } +{ YDVAR(1, VAR_CONTROL_ENABLE) } YY_BREAK case 195: YY_RULE_SETUP #line 404 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVER_KEY_FILE) } +{ YDVAR(1, VAR_CONTROL_INTERFACE) } YY_BREAK case 196: YY_RULE_SETUP #line 405 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVER_CERT_FILE) } +{ YDVAR(1, VAR_CONTROL_PORT) } YY_BREAK case 197: YY_RULE_SETUP #line 406 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_KEY_FILE) } +{ YDVAR(1, VAR_CONTROL_USE_CERT) } YY_BREAK case 198: YY_RULE_SETUP #line 407 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_CERT_FILE) } +{ YDVAR(1, VAR_SERVER_KEY_FILE) } YY_BREAK case 199: YY_RULE_SETUP #line 408 "./util/configlexer.lex" -{ YDVAR(1, VAR_PYTHON_SCRIPT) } +{ YDVAR(1, VAR_SERVER_CERT_FILE) } YY_BREAK case 200: YY_RULE_SETUP #line 409 "./util/configlexer.lex" -{ YDVAR(0, VAR_PYTHON) } +{ YDVAR(1, VAR_CONTROL_KEY_FILE) } YY_BREAK case 201: YY_RULE_SETUP #line 410 "./util/configlexer.lex" -{ YDVAR(1, VAR_DOMAIN_INSECURE) } +{ YDVAR(1, VAR_CONTROL_CERT_FILE) } YY_BREAK case 202: YY_RULE_SETUP #line 411 "./util/configlexer.lex" -{ YDVAR(1, VAR_MINIMAL_RESPONSES) } +{ YDVAR(1, VAR_PYTHON_SCRIPT) } YY_BREAK case 203: YY_RULE_SETUP #line 412 "./util/configlexer.lex" -{ YDVAR(1, VAR_RRSET_ROUNDROBIN) } +{ YDVAR(0, VAR_PYTHON) } YY_BREAK case 204: YY_RULE_SETUP #line 413 "./util/configlexer.lex" -{ YDVAR(1, VAR_UNKNOWN_SERVER_TIME_LIMIT) } +{ YDVAR(1, VAR_DOMAIN_INSECURE) } YY_BREAK case 205: YY_RULE_SETUP #line 414 "./util/configlexer.lex" -{ YDVAR(1, VAR_MAX_UDP_SIZE) } +{ YDVAR(1, VAR_MINIMAL_RESPONSES) } YY_BREAK case 206: YY_RULE_SETUP #line 415 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNS64_PREFIX) } +{ YDVAR(1, VAR_RRSET_ROUNDROBIN) } YY_BREAK case 207: YY_RULE_SETUP #line 416 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNS64_SYNTHALL) } +{ YDVAR(1, VAR_UNKNOWN_SERVER_TIME_LIMIT) } YY_BREAK case 208: YY_RULE_SETUP #line 417 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNS64_IGNORE_AAAA) } +{ YDVAR(1, VAR_MAX_UDP_SIZE) } YY_BREAK case 209: YY_RULE_SETUP #line 418 "./util/configlexer.lex" -{ YDVAR(1, VAR_DEFINE_TAG) } +{ YDVAR(1, VAR_DNS64_PREFIX) } YY_BREAK case 210: YY_RULE_SETUP #line 419 "./util/configlexer.lex" -{ YDVAR(2, VAR_LOCAL_ZONE_TAG) } +{ YDVAR(1, VAR_DNS64_SYNTHALL) } YY_BREAK case 211: YY_RULE_SETUP #line 420 "./util/configlexer.lex" -{ YDVAR(2, VAR_ACCESS_CONTROL_TAG) } +{ YDVAR(1, VAR_DNS64_IGNORE_AAAA) } YY_BREAK case 212: YY_RULE_SETUP #line 421 "./util/configlexer.lex" -{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_ACTION) } +{ YDVAR(1, VAR_DEFINE_TAG) } YY_BREAK case 213: YY_RULE_SETUP #line 422 "./util/configlexer.lex" -{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_DATA) } +{ YDVAR(2, VAR_LOCAL_ZONE_TAG) } YY_BREAK case 214: YY_RULE_SETUP #line 423 "./util/configlexer.lex" -{ YDVAR(2, VAR_ACCESS_CONTROL_VIEW) } +{ YDVAR(2, VAR_ACCESS_CONTROL_TAG) } YY_BREAK case 215: YY_RULE_SETUP #line 424 "./util/configlexer.lex" -{ YDVAR(3, VAR_LOCAL_ZONE_OVERRIDE) } +{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_ACTION) } YY_BREAK case 216: YY_RULE_SETUP #line 425 "./util/configlexer.lex" -{ YDVAR(0, VAR_DNSTAP) } +{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_DATA) } YY_BREAK case 217: YY_RULE_SETUP #line 426 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_ENABLE) } +{ YDVAR(2, VAR_ACCESS_CONTROL_VIEW) } YY_BREAK case 218: YY_RULE_SETUP #line 427 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_SOCKET_PATH) } +{ YDVAR(3, VAR_LOCAL_ZONE_OVERRIDE) } YY_BREAK case 219: YY_RULE_SETUP #line 428 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_SEND_IDENTITY) } +{ YDVAR(0, VAR_DNSTAP) } YY_BREAK case 220: YY_RULE_SETUP #line 429 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_SEND_VERSION) } +{ YDVAR(1, VAR_DNSTAP_ENABLE) } YY_BREAK case 221: YY_RULE_SETUP #line 430 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_IDENTITY) } +{ YDVAR(1, VAR_DNSTAP_SOCKET_PATH) } YY_BREAK case 222: YY_RULE_SETUP #line 431 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_VERSION) } +{ YDVAR(1, VAR_DNSTAP_SEND_IDENTITY) } YY_BREAK case 223: YY_RULE_SETUP #line 432 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES) } +{ YDVAR(1, VAR_DNSTAP_SEND_VERSION) } YY_BREAK case 224: YY_RULE_SETUP -#line 434 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES) } +#line 433 "./util/configlexer.lex" +{ YDVAR(1, VAR_DNSTAP_IDENTITY) } YY_BREAK case 225: YY_RULE_SETUP -#line 436 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES) } +#line 434 "./util/configlexer.lex" +{ YDVAR(1, VAR_DNSTAP_VERSION) } YY_BREAK case 226: YY_RULE_SETUP -#line 438 "./util/configlexer.lex" +#line 435 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES) } YY_BREAK case 227: YY_RULE_SETUP -#line 440 "./util/configlexer.lex" +#line 437 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES) } YY_BREAK case 228: YY_RULE_SETUP -#line 442 "./util/configlexer.lex" +#line 439 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES) } YY_BREAK case 229: YY_RULE_SETUP -#line 444 "./util/configlexer.lex" -{ YDVAR(1, VAR_DISABLE_DNSSEC_LAME_CHECK) } +#line 441 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES) } YY_BREAK case 230: YY_RULE_SETUP -#line 445 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT) } +#line 443 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) } YY_BREAK case 231: YY_RULE_SETUP -#line 446 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT) } +#line 445 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) } YY_BREAK case 232: YY_RULE_SETUP #line 447 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT_SLABS) } +{ YDVAR(1, VAR_DISABLE_DNSSEC_LAME_CHECK) } YY_BREAK case 233: YY_RULE_SETUP #line 448 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT_SLABS) } +{ YDVAR(1, VAR_IP_RATELIMIT) } YY_BREAK case 234: YY_RULE_SETUP #line 449 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT_SIZE) } +{ YDVAR(1, VAR_RATELIMIT) } YY_BREAK case 235: YY_RULE_SETUP #line 450 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT_SIZE) } +{ YDVAR(1, VAR_IP_RATELIMIT_SLABS) } YY_BREAK case 236: YY_RULE_SETUP #line 451 "./util/configlexer.lex" -{ YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) } +{ YDVAR(1, VAR_RATELIMIT_SLABS) } YY_BREAK case 237: YY_RULE_SETUP #line 452 "./util/configlexer.lex" -{ YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) } +{ YDVAR(1, VAR_IP_RATELIMIT_SIZE) } YY_BREAK case 238: YY_RULE_SETUP #line 453 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT_FACTOR) } +{ YDVAR(1, VAR_RATELIMIT_SIZE) } YY_BREAK case 239: YY_RULE_SETUP #line 454 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT_FACTOR) } +{ YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) } YY_BREAK case 240: YY_RULE_SETUP #line 455 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOW_RTT) } +{ YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) } YY_BREAK case 241: YY_RULE_SETUP #line 456 "./util/configlexer.lex" -{ YDVAR(1, VAR_FAST_SERVER_NUM) } +{ YDVAR(1, VAR_IP_RATELIMIT_FACTOR) } YY_BREAK case 242: YY_RULE_SETUP #line 457 "./util/configlexer.lex" -{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } +{ YDVAR(1, VAR_RATELIMIT_FACTOR) } YY_BREAK case 243: YY_RULE_SETUP #line 458 "./util/configlexer.lex" -{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } +{ YDVAR(1, VAR_LOW_RTT) } YY_BREAK case 244: YY_RULE_SETUP #line 459 "./util/configlexer.lex" -{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } +{ YDVAR(1, VAR_FAST_SERVER_NUM) } YY_BREAK case 245: YY_RULE_SETUP #line 460 "./util/configlexer.lex" -{ YDVAR(2, VAR_RESPONSE_IP_TAG) } +{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } YY_BREAK case 246: YY_RULE_SETUP #line 461 "./util/configlexer.lex" -{ YDVAR(2, VAR_RESPONSE_IP) } +{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } YY_BREAK case 247: YY_RULE_SETUP #line 462 "./util/configlexer.lex" -{ YDVAR(2, VAR_RESPONSE_IP_DATA) } +{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } YY_BREAK case 248: YY_RULE_SETUP #line 463 "./util/configlexer.lex" -{ YDVAR(0, VAR_DNSCRYPT) } +{ YDVAR(2, VAR_RESPONSE_IP_TAG) } YY_BREAK case 249: YY_RULE_SETUP #line 464 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_ENABLE) } +{ YDVAR(2, VAR_RESPONSE_IP) } YY_BREAK case 250: YY_RULE_SETUP #line 465 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PORT) } +{ YDVAR(2, VAR_RESPONSE_IP_DATA) } YY_BREAK case 251: YY_RULE_SETUP #line 466 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PROVIDER) } +{ YDVAR(0, VAR_DNSCRYPT) } YY_BREAK case 252: YY_RULE_SETUP #line 467 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_SECRET_KEY) } +{ YDVAR(1, VAR_DNSCRYPT_ENABLE) } YY_BREAK case 253: YY_RULE_SETUP #line 468 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT) } +{ YDVAR(1, VAR_DNSCRYPT_PORT) } YY_BREAK case 254: YY_RULE_SETUP #line 469 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT_ROTATED) } +{ YDVAR(1, VAR_DNSCRYPT_PROVIDER) } YY_BREAK case 255: YY_RULE_SETUP #line 470 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE) } +{ YDVAR(1, VAR_DNSCRYPT_SECRET_KEY) } YY_BREAK case 256: YY_RULE_SETUP -#line 472 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS) } +#line 471 "./util/configlexer.lex" +{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT) } YY_BREAK case 257: YY_RULE_SETUP -#line 474 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SIZE) } +#line 472 "./util/configlexer.lex" +{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT_ROTATED) } YY_BREAK case 258: YY_RULE_SETUP -#line 475 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SLABS) } +#line 473 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE) } YY_BREAK case 259: YY_RULE_SETUP -#line 476 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_ENABLED) } +#line 475 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS) } YY_BREAK case 260: YY_RULE_SETUP #line 477 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_IGNORE_BOGUS) } +{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SIZE) } YY_BREAK case 261: YY_RULE_SETUP #line 478 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_HOOK) } +{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SLABS) } YY_BREAK case 262: YY_RULE_SETUP #line 479 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_MAX_TTL) } +{ YDVAR(1, VAR_IPSECMOD_ENABLED) } YY_BREAK case 263: YY_RULE_SETUP #line 480 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_WHITELIST) } +{ YDVAR(1, VAR_IPSECMOD_IGNORE_BOGUS) } YY_BREAK case 264: YY_RULE_SETUP #line 481 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_STRICT) } +{ YDVAR(1, VAR_IPSECMOD_HOOK) } YY_BREAK case 265: YY_RULE_SETUP #line 482 "./util/configlexer.lex" -{ YDVAR(0, VAR_CACHEDB) } +{ YDVAR(1, VAR_IPSECMOD_MAX_TTL) } YY_BREAK case 266: YY_RULE_SETUP #line 483 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_BACKEND) } +{ YDVAR(1, VAR_IPSECMOD_WHITELIST) } YY_BREAK case 267: YY_RULE_SETUP #line 484 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_SECRETSEED) } +{ YDVAR(1, VAR_IPSECMOD_STRICT) } YY_BREAK case 268: YY_RULE_SETUP #line 485 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISHOST) } +{ YDVAR(0, VAR_CACHEDB) } YY_BREAK case 269: YY_RULE_SETUP #line 486 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISPORT) } +{ YDVAR(1, VAR_CACHEDB_BACKEND) } YY_BREAK case 270: YY_RULE_SETUP #line 487 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISTIMEOUT) } +{ YDVAR(1, VAR_CACHEDB_SECRETSEED) } YY_BREAK case 271: YY_RULE_SETUP #line 488 "./util/configlexer.lex" -{ YDVAR(1, VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM) } +{ YDVAR(1, VAR_CACHEDB_REDISHOST) } YY_BREAK case 272: YY_RULE_SETUP #line 489 "./util/configlexer.lex" -{ YDVAR(2, VAR_TCP_CONNECTION_LIMIT) } +{ YDVAR(1, VAR_CACHEDB_REDISPORT) } YY_BREAK case 273: -/* rule 273 can match eol */ YY_RULE_SETUP #line 490 "./util/configlexer.lex" +{ YDVAR(1, VAR_CACHEDB_REDISTIMEOUT) } + YY_BREAK +case 274: +YY_RULE_SETUP +#line 491 "./util/configlexer.lex" +{ YDVAR(1, VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM) } + YY_BREAK +case 275: +YY_RULE_SETUP +#line 492 "./util/configlexer.lex" +{ YDVAR(2, VAR_TCP_CONNECTION_LIMIT) } + YY_BREAK +case 276: +/* rule 276 can match eol */ +YY_RULE_SETUP +#line 493 "./util/configlexer.lex" { LEXOUT(("NL\n")); cfg_parser->line++; } YY_BREAK /* Quoted strings. Strip leading and ending quotes */ -case 274: +case 277: YY_RULE_SETUP -#line 493 "./util/configlexer.lex" +#line 496 "./util/configlexer.lex" { BEGIN(quotedstring); LEXOUT(("QS ")); } YY_BREAK case YY_STATE_EOF(quotedstring): -#line 494 "./util/configlexer.lex" +#line 497 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); if(--num_args == 0) { BEGIN(INITIAL); } else { BEGIN(val); } } YY_BREAK -case 275: +case 278: YY_RULE_SETUP -#line 499 "./util/configlexer.lex" +#line 502 "./util/configlexer.lex" { LEXOUT(("STR(%s) ", yytext)); yymore(); } YY_BREAK -case 276: -/* rule 276 can match eol */ +case 279: +/* rule 279 can match eol */ YY_RULE_SETUP -#line 500 "./util/configlexer.lex" +#line 503 "./util/configlexer.lex" { yyerror("newline inside quoted string, no end \""); cfg_parser->line++; BEGIN(INITIAL); } YY_BREAK -case 277: +case 280: YY_RULE_SETUP -#line 502 "./util/configlexer.lex" +#line 505 "./util/configlexer.lex" { LEXOUT(("QE ")); if(--num_args == 0) { BEGIN(INITIAL); } @@ -4559,34 +4596,34 @@ YY_RULE_SETUP } YY_BREAK /* Single Quoted strings. Strip leading and ending quotes */ -case 278: +case 281: YY_RULE_SETUP -#line 514 "./util/configlexer.lex" +#line 517 "./util/configlexer.lex" { BEGIN(singlequotedstr); LEXOUT(("SQS ")); } YY_BREAK case YY_STATE_EOF(singlequotedstr): -#line 515 "./util/configlexer.lex" +#line 518 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); if(--num_args == 0) { BEGIN(INITIAL); } else { BEGIN(val); } } YY_BREAK -case 279: +case 282: YY_RULE_SETUP -#line 520 "./util/configlexer.lex" +#line 523 "./util/configlexer.lex" { LEXOUT(("STR(%s) ", yytext)); yymore(); } YY_BREAK -case 280: -/* rule 280 can match eol */ +case 283: +/* rule 283 can match eol */ YY_RULE_SETUP -#line 521 "./util/configlexer.lex" +#line 524 "./util/configlexer.lex" { yyerror("newline inside quoted string, no end '"); cfg_parser->line++; BEGIN(INITIAL); } YY_BREAK -case 281: +case 284: YY_RULE_SETUP -#line 523 "./util/configlexer.lex" +#line 526 "./util/configlexer.lex" { LEXOUT(("SQE ")); if(--num_args == 0) { BEGIN(INITIAL); } @@ -4599,38 +4636,38 @@ YY_RULE_SETUP } YY_BREAK /* include: directive */ -case 282: +case 285: YY_RULE_SETUP -#line 535 "./util/configlexer.lex" +#line 538 "./util/configlexer.lex" { LEXOUT(("v(%s) ", yytext)); inc_prev = YYSTATE; BEGIN(include); } YY_BREAK case YY_STATE_EOF(include): -#line 537 "./util/configlexer.lex" +#line 540 "./util/configlexer.lex" { yyerror("EOF inside include directive"); BEGIN(inc_prev); } YY_BREAK -case 283: -YY_RULE_SETUP -#line 541 "./util/configlexer.lex" -{ LEXOUT(("ISP ")); /* ignore */ } - YY_BREAK -case 284: -/* rule 284 can match eol */ -YY_RULE_SETUP -#line 542 "./util/configlexer.lex" -{ LEXOUT(("NL\n")); cfg_parser->line++;} - YY_BREAK -case 285: -YY_RULE_SETUP -#line 543 "./util/configlexer.lex" -{ LEXOUT(("IQS ")); BEGIN(include_quoted); } - YY_BREAK case 286: YY_RULE_SETUP #line 544 "./util/configlexer.lex" +{ LEXOUT(("ISP ")); /* ignore */ } + YY_BREAK +case 287: +/* rule 287 can match eol */ +YY_RULE_SETUP +#line 545 "./util/configlexer.lex" +{ LEXOUT(("NL\n")); cfg_parser->line++;} + YY_BREAK +case 288: +YY_RULE_SETUP +#line 546 "./util/configlexer.lex" +{ LEXOUT(("IQS ")); BEGIN(include_quoted); } + YY_BREAK +case 289: +YY_RULE_SETUP +#line 547 "./util/configlexer.lex" { LEXOUT(("Iunquotedstr(%s) ", yytext)); config_start_include_glob(yytext); @@ -4638,27 +4675,27 @@ YY_RULE_SETUP } YY_BREAK case YY_STATE_EOF(include_quoted): -#line 549 "./util/configlexer.lex" +#line 552 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); BEGIN(inc_prev); } YY_BREAK -case 287: +case 290: YY_RULE_SETUP -#line 553 "./util/configlexer.lex" +#line 556 "./util/configlexer.lex" { LEXOUT(("ISTR(%s) ", yytext)); yymore(); } YY_BREAK -case 288: -/* rule 288 can match eol */ +case 291: +/* rule 291 can match eol */ YY_RULE_SETUP -#line 554 "./util/configlexer.lex" +#line 557 "./util/configlexer.lex" { yyerror("newline before \" in include name"); cfg_parser->line++; BEGIN(inc_prev); } YY_BREAK -case 289: +case 292: YY_RULE_SETUP -#line 556 "./util/configlexer.lex" +#line 559 "./util/configlexer.lex" { LEXOUT(("IQE ")); yytext[yyleng - 1] = '\0'; @@ -4668,7 +4705,7 @@ YY_RULE_SETUP YY_BREAK case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(val): -#line 562 "./util/configlexer.lex" +#line 565 "./util/configlexer.lex" { LEXOUT(("LEXEOF ")); yy_set_bol(1); /* Set beginning of line, so "^" rules match. */ @@ -4680,33 +4717,33 @@ case YY_STATE_EOF(val): } } YY_BREAK -case 290: +case 293: YY_RULE_SETUP -#line 573 "./util/configlexer.lex" +#line 576 "./util/configlexer.lex" { LEXOUT(("unquotedstr(%s) ", yytext)); if(--num_args == 0) { BEGIN(INITIAL); } yylval.str = strdup(yytext); return STRING_ARG; } YY_BREAK -case 291: +case 294: YY_RULE_SETUP -#line 577 "./util/configlexer.lex" +#line 580 "./util/configlexer.lex" { ub_c_error_msg("unknown keyword '%s'", yytext); } YY_BREAK -case 292: +case 295: YY_RULE_SETUP -#line 581 "./util/configlexer.lex" +#line 584 "./util/configlexer.lex" { ub_c_error_msg("stray '%s'", yytext); } YY_BREAK -case 293: +case 296: YY_RULE_SETUP -#line 585 "./util/configlexer.lex" +#line 588 "./util/configlexer.lex" ECHO; YY_BREAK -#line 4708 "" +#line 4745 "" case YY_END_OF_BUFFER: { @@ -5001,7 +5038,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 >= 2911 ) + if ( yy_current_state >= 2947 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; @@ -5029,11 +5066,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 >= 2911 ) + if ( yy_current_state >= 2947 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; - yy_is_jam = (yy_current_state == 2910); + yy_is_jam = (yy_current_state == 2946); return yy_is_jam ? 0 : yy_current_state; } @@ -5672,6 +5709,6 @@ void yyfree (void * ptr ) #define YYTABLES_NAME "yytables" -#line 585 "./util/configlexer.lex" +#line 588 "./util/configlexer.lex" diff --git a/util/configlexer.lex b/util/configlexer.lex index 52026dc49..5b21042b7 100644 --- a/util/configlexer.lex +++ b/util/configlexer.lex @@ -319,6 +319,9 @@ forward-tls-upstream{COLON} { YDVAR(1, VAR_FORWARD_SSL_UPSTREAM) } auth-zone{COLON} { YDVAR(0, VAR_AUTH_ZONE) } rpz{COLON} { YDVAR(0, VAR_RPZ) } tags{COLON} { YDVAR(1, VAR_TAGS) } +rpz-action-override{COLON} { YDVAR(1, VAR_RPZ_ACTION_OVERRIDE) } +rpz-cname-override{COLON} { YDVAR(1, VAR_RPZ_CNAME_OVERRIDE) } +rpz-log{COLON} { YDVAR(1, VAR_RPZ_LOG) } zonefile{COLON} { YDVAR(1, VAR_ZONEFILE) } master{COLON} { YDVAR(1, VAR_MASTER) } url{COLON} { YDVAR(1, VAR_URL) } diff --git a/util/configparser.c b/util/configparser.c index e380c9639..4cfd58227 100644 --- a/util/configparser.c +++ b/util/configparser.c @@ -391,7 +391,10 @@ extern int yydebug; VAR_TLS_CIPHERSUITES = 520, VAR_TLS_SESSION_TICKET_KEYS = 521, VAR_RPZ = 522, - VAR_TAGS = 523 + VAR_TAGS = 523, + VAR_RPZ_ACTION_OVERRIDE = 524, + VAR_RPZ_CNAME_OVERRIDE = 525, + VAR_RPZ_LOG = 526 }; #endif /* Tokens. */ @@ -661,6 +664,9 @@ extern int yydebug; #define VAR_TLS_SESSION_TICKET_KEYS 521 #define VAR_RPZ 522 #define VAR_TAGS 523 +#define VAR_RPZ_ACTION_OVERRIDE 524 +#define VAR_RPZ_CNAME_OVERRIDE 525 +#define VAR_RPZ_LOG 526 /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED @@ -671,7 +677,7 @@ union YYSTYPE char* str; -#line 675 "util/configparser.c" /* yacc.c:355 */ +#line 681 "util/configparser.c" /* yacc.c:355 */ }; typedef union YYSTYPE YYSTYPE; @@ -688,7 +694,7 @@ int yyparse (void); /* Copy the second part of user declarations. */ -#line 692 "util/configparser.c" /* yacc.c:358 */ +#line 698 "util/configparser.c" /* yacc.c:358 */ #ifdef short # undef short @@ -930,21 +936,21 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 2 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 571 +#define YYLAST 577 /* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 269 +#define YYNTOKENS 272 /* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 290 +#define YYNNTS 293 /* YYNRULES -- Number of rules. */ -#define YYNRULES 560 +#define YYNRULES 566 /* YYNSTATES -- Number of states. */ -#define YYNSTATES 835 +#define YYNSTATES 844 /* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned by yylex, with out-of-bounds checking. */ #define YYUNDEFTOK 2 -#define YYMAXUTOK 523 +#define YYMAXUTOK 526 #define YYTRANSLATE(YYX) \ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) @@ -1005,70 +1011,70 @@ static const yytype_uint16 yytranslate[] = 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, - 265, 266, 267, 268 + 265, 266, 267, 268, 269, 270, 271 }; #if YYDEBUG /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ static const yytype_uint16 yyrline[] = { - 0, 172, 172, 172, 173, 173, 174, 174, 175, 175, - 175, 176, 176, 177, 177, 181, 186, 187, 188, 188, - 188, 189, 189, 190, 190, 191, 191, 192, 192, 192, - 193, 193, 194, 194, 194, 195, 195, 195, 196, 196, - 197, 197, 198, 198, 199, 199, 200, 200, 201, 201, - 202, 202, 203, 203, 204, 204, 204, 205, 205, 205, - 206, 206, 206, 207, 207, 208, 208, 209, 209, 210, - 210, 211, 211, 211, 212, 212, 213, 213, 214, 214, - 214, 215, 215, 216, 216, 217, 217, 218, 218, 218, - 219, 219, 220, 220, 221, 221, 222, 222, 223, 223, - 224, 224, 224, 225, 225, 226, 226, 226, 227, 227, - 227, 228, 228, 228, 229, 229, 229, 229, 230, 231, - 231, 231, 232, 232, 232, 233, 233, 234, 234, 235, - 235, 235, 236, 236, 237, 237, 237, 238, 238, 239, - 239, 240, 241, 241, 242, 242, 243, 243, 244, 245, - 245, 246, 246, 247, 247, 248, 248, 249, 249, 250, - 250, 250, 251, 251, 252, 252, 253, 253, 254, 254, - 255, 255, 256, 256, 256, 257, 257, 257, 258, 258, - 258, 259, 259, 260, 261, 261, 262, 262, 263, 263, - 264, 264, 265, 265, 265, 266, 266, 266, 267, 267, - 267, 268, 268, 269, 269, 270, 270, 272, 284, 285, - 286, 286, 286, 286, 286, 287, 287, 289, 301, 302, - 303, 303, 303, 303, 304, 304, 306, 320, 321, 322, - 322, 322, 322, 323, 323, 323, 325, 342, 343, 344, - 344, 344, 344, 345, 345, 345, 346, 349, 368, 385, - 386, 387, 387, 387, 387, 387, 388, 390, 399, 408, - 419, 428, 437, 446, 457, 466, 477, 490, 505, 516, - 533, 550, 567, 584, 599, 614, 627, 642, 651, 660, - 669, 678, 687, 696, 705, 714, 723, 732, 741, 750, - 759, 772, 781, 794, 803, 812, 821, 828, 835, 844, - 851, 860, 868, 875, 882, 890, 899, 908, 922, 931, - 940, 949, 958, 967, 976, 983, 990, 1016, 1024, 1031, - 1038, 1045, 1052, 1060, 1068, 1076, 1083, 1094, 1105, 1112, - 1121, 1130, 1139, 1146, 1153, 1161, 1169, 1179, 1189, 1199, - 1207, 1220, 1231, 1239, 1252, 1261, 1270, 1279, 1289, 1299, - 1307, 1320, 1329, 1337, 1346, 1354, 1367, 1376, 1383, 1393, - 1403, 1413, 1423, 1433, 1443, 1453, 1463, 1470, 1477, 1484, - 1493, 1502, 1511, 1520, 1527, 1537, 1557, 1564, 1582, 1595, - 1608, 1617, 1626, 1635, 1644, 1654, 1664, 1675, 1684, 1693, - 1702, 1711, 1724, 1737, 1746, 1753, 1762, 1771, 1780, 1789, - 1797, 1810, 1818, 1851, 1858, 1873, 1883, 1893, 1900, 1907, - 1914, 1923, 1931, 1945, 1966, 1987, 1999, 2011, 2023, 2032, - 2053, 2063, 2072, 2080, 2088, 2101, 2114, 2129, 2144, 2153, - 2162, 2168, 2177, 2186, 2196, 2206, 2219, 2232, 2244, 2258, - 2270, 2284, 2294, 2301, 2308, 2317, 2326, 2336, 2346, 2356, - 2363, 2370, 2379, 2388, 2398, 2408, 2415, 2422, 2429, 2437, - 2447, 2457, 2467, 2477, 2509, 2519, 2527, 2535, 2550, 2559, - 2564, 2565, 2566, 2566, 2566, 2567, 2567, 2567, 2568, 2568, - 2570, 2580, 2589, 2596, 2603, 2610, 2617, 2624, 2631, 2636, - 2637, 2638, 2638, 2639, 2639, 2640, 2640, 2641, 2642, 2643, - 2644, 2645, 2646, 2648, 2657, 2664, 2673, 2682, 2689, 2696, - 2706, 2716, 2726, 2736, 2746, 2756, 2761, 2762, 2763, 2765, - 2771, 2781, 2788, 2797, 2805, 2810, 2811, 2813, 2813, 2813, - 2814, 2814, 2815, 2816, 2817, 2818, 2819, 2821, 2831, 2840, - 2847, 2856, 2863, 2872, 2880, 2893, 2901, 2914, 2919, 2920, - 2921, 2921, 2922, 2922, 2922, 2924, 2939, 2954, 2966, 2981, - 2994 + 0, 173, 173, 173, 174, 174, 175, 175, 176, 176, + 176, 177, 177, 178, 178, 182, 187, 188, 189, 189, + 189, 190, 190, 191, 191, 192, 192, 193, 193, 193, + 194, 194, 195, 195, 195, 196, 196, 196, 197, 197, + 198, 198, 199, 199, 200, 200, 201, 201, 202, 202, + 203, 203, 204, 204, 205, 205, 205, 206, 206, 206, + 207, 207, 207, 208, 208, 209, 209, 210, 210, 211, + 211, 212, 212, 212, 213, 213, 214, 214, 215, 215, + 215, 216, 216, 217, 217, 218, 218, 219, 219, 219, + 220, 220, 221, 221, 222, 222, 223, 223, 224, 224, + 225, 225, 225, 226, 226, 227, 227, 227, 228, 228, + 228, 229, 229, 229, 230, 230, 230, 230, 231, 232, + 232, 232, 233, 233, 233, 234, 234, 235, 235, 236, + 236, 236, 237, 237, 238, 238, 238, 239, 239, 240, + 240, 241, 242, 242, 243, 243, 244, 244, 245, 246, + 246, 247, 247, 248, 248, 249, 249, 250, 250, 251, + 251, 251, 252, 252, 253, 253, 254, 254, 255, 255, + 256, 256, 257, 257, 257, 258, 258, 258, 259, 259, + 259, 260, 260, 261, 262, 262, 263, 263, 264, 264, + 265, 265, 266, 266, 266, 267, 267, 267, 268, 268, + 268, 269, 269, 270, 270, 271, 271, 273, 285, 286, + 287, 287, 287, 287, 287, 288, 288, 290, 302, 303, + 304, 304, 304, 304, 305, 305, 307, 321, 322, 323, + 323, 323, 323, 324, 324, 324, 326, 343, 344, 345, + 345, 345, 345, 346, 346, 346, 347, 350, 370, 387, + 398, 408, 425, 426, 427, 427, 427, 427, 427, 428, + 428, 428, 429, 431, 440, 449, 460, 469, 478, 487, + 498, 507, 518, 531, 546, 557, 574, 591, 608, 625, + 640, 655, 668, 683, 692, 701, 710, 719, 728, 737, + 746, 755, 764, 773, 782, 791, 800, 813, 822, 835, + 844, 853, 862, 869, 876, 885, 892, 901, 909, 916, + 923, 931, 940, 949, 963, 972, 981, 990, 999, 1008, + 1017, 1024, 1031, 1057, 1065, 1072, 1079, 1086, 1093, 1101, + 1109, 1117, 1124, 1135, 1146, 1153, 1162, 1171, 1180, 1187, + 1194, 1202, 1210, 1220, 1230, 1240, 1248, 1261, 1272, 1280, + 1293, 1302, 1311, 1320, 1330, 1340, 1348, 1361, 1370, 1378, + 1387, 1395, 1408, 1417, 1424, 1434, 1444, 1454, 1464, 1474, + 1484, 1494, 1504, 1511, 1518, 1525, 1534, 1543, 1552, 1561, + 1568, 1578, 1598, 1605, 1623, 1636, 1649, 1658, 1667, 1676, + 1685, 1695, 1705, 1716, 1725, 1734, 1743, 1752, 1765, 1778, + 1787, 1794, 1803, 1812, 1821, 1830, 1838, 1851, 1859, 1892, + 1899, 1914, 1924, 1934, 1941, 1948, 1955, 1964, 1972, 1986, + 2007, 2028, 2040, 2052, 2064, 2073, 2094, 2104, 2113, 2121, + 2129, 2142, 2155, 2170, 2185, 2194, 2203, 2209, 2218, 2227, + 2237, 2247, 2260, 2273, 2285, 2299, 2311, 2325, 2335, 2342, + 2349, 2358, 2367, 2377, 2387, 2397, 2404, 2411, 2420, 2429, + 2439, 2449, 2456, 2463, 2470, 2478, 2488, 2498, 2508, 2518, + 2550, 2560, 2568, 2576, 2591, 2600, 2605, 2606, 2607, 2607, + 2607, 2608, 2608, 2608, 2609, 2609, 2611, 2621, 2630, 2637, + 2644, 2651, 2658, 2665, 2672, 2677, 2678, 2679, 2679, 2680, + 2680, 2681, 2681, 2682, 2683, 2684, 2685, 2686, 2687, 2689, + 2698, 2705, 2714, 2723, 2730, 2737, 2747, 2757, 2767, 2777, + 2787, 2797, 2802, 2803, 2804, 2806, 2812, 2822, 2829, 2838, + 2846, 2851, 2852, 2854, 2854, 2854, 2855, 2855, 2856, 2857, + 2858, 2859, 2860, 2862, 2872, 2881, 2888, 2897, 2904, 2913, + 2921, 2934, 2942, 2955, 2960, 2961, 2962, 2962, 2963, 2963, + 2963, 2965, 2980, 2995, 3007, 3022, 3035 }; #endif @@ -1175,16 +1181,18 @@ static const char *const yytname[] = "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_SESSION_TICKET_KEYS", "VAR_RPZ", "VAR_TAGS", "$accept", - "toplevelvars", "toplevelvar", "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", "rpzstart", "contents_rpz", "content_rpz", - "server_num_threads", "server_verbosity", "server_statistics_interval", - "server_statistics_cumulative", "server_extended_statistics", - "server_shm_enable", "server_shm_key", "server_port", - "server_send_client_subnet", "server_client_subnet_zone", + "VAR_TLS_SESSION_TICKET_KEYS", "VAR_RPZ", "VAR_TAGS", + "VAR_RPZ_ACTION_OVERRIDE", "VAR_RPZ_CNAME_OVERRIDE", "VAR_RPZ_LOG", + "$accept", "toplevelvars", "toplevelvar", "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", "rpzstart", "contents_rpz", + "content_rpz", "server_num_threads", "server_verbosity", + "server_statistics_interval", "server_statistics_cumulative", + "server_extended_statistics", "server_shm_enable", "server_shm_key", + "server_port", "server_send_client_subnet", "server_client_subnet_zone", "server_client_subnet_always_forward", "server_client_subnet_opcode", "server_max_client_subnet_ipv4", "server_max_client_subnet_ipv6", "server_min_client_subnet_ipv4", "server_min_client_subnet_ipv6", @@ -1327,7 +1335,8 @@ static const yytype_uint16 yytoknum[] = 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 + 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, + 525, 526 }; # endif @@ -1363,11 +1372,11 @@ static const yytype_int16 yypact[] = 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 196, 197, 198, 199, 200, - 201, 202, 204, 205, 207, 216, 218, 219, 220, 222, - 223, 224, 226, 227, 228, 229, 230, 231, 232, 234, - 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, - 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, - 255, 289, 290, 291, 292, 296, -192, -192, -192, -192, + 201, 202, 204, 205, 207, 216, 222, 223, 224, 226, + 227, 228, 229, 230, 231, 232, 234, 235, 236, 237, + 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, + 248, 249, 250, 251, 252, 253, 254, 255, 289, 290, + 291, 292, 296, 297, 298, 340, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, @@ -1386,49 +1395,50 @@ static const yytype_int16 yypact[] = -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, - -192, -192, -192, -192, -192, -192, 297, 298, 340, 341, - 342, 343, 344, -192, -192, -192, -192, -192, -192, -192, - -192, 345, 346, 347, 348, 352, 356, -192, -192, -192, - -192, -192, -192, -192, 357, 382, 383, 384, 386, 397, - 398, -192, -192, -192, -192, -192, -192, -192, -192, 399, - 400, 401, 402, 403, 404, 405, 406, -192, -192, -192, - -192, -192, -192, -192, -192, -192, 407, -192, -192, -192, - -192, -192, -192, -192, 408, 409, 448, 450, 464, 465, - 466, 467, -192, -192, -192, -192, -192, -192, -192, -192, - -192, 468, 469, 470, 471, 472, 473, 474, 481, 482, - 483, 484, 485, -192, -192, -192, -192, -192, -192, -192, - -192, -192, -192, -192, -192, -192, 486, -192, -192, 488, - 489, 490, 491, 492, 493, 494, 497, 500, 503, -192, + -192, -192, -192, -192, -192, -192, 341, 342, 343, 344, + 345, 346, 347, -192, -192, -192, -192, -192, -192, -192, + -192, 348, 352, 356, 357, 382, 383, -192, -192, -192, + -192, -192, -192, -192, 384, 386, 397, 398, 399, 400, + 401, -192, -192, -192, -192, -192, -192, -192, -192, 402, + 403, 404, 405, 406, 407, 408, 409, -192, -192, -192, + -192, -192, -192, -192, -192, -192, 448, 450, 464, 465, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, - 504, 513, 514, 515, 516, -192, -192, -192, -192, -192, + 466, 467, 468, 469, 470, 471, 472, 473, -192, -192, + -192, -192, -192, -192, -192, -192, -192, 474, 481, 482, + 483, 484, 485, 486, 488, 489, 490, 491, 492, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, 493, -192, -192, 494, 497, 500, 503, 504, + 513, 514, 515, 516, 517, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, 518, 519, 520, 521, + 522, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, - -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, - 517, 518, -192, -192, -192, -192, -192, -192, -192, -192, - -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, - -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, - -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, - -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, - -192, -192, -192, -192, -192, -192, -192, 519, 520, 521, - -192, -192, -192, -192, -192, -192, -192, -192, -192, 522, - 523, -192, -192, -192, -192, -192, -192, -192, -192, -192, - -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, - 524, 525, 526, 527, 528, 529, -192, -192, -192, -192, - -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, - -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, - -192, 530, -192, -192, -192, -192, -192, -192, -192, -192, - -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, - -192, -192, -192, -192, 531, -192, -192, 532, 533, -192, + -192, -192, -192, -192, -192, -192, 523, 524, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, - -192, -192, -192, -192, 534, 535, 536, -192, -192, -192, - -192, -192, -192, -192, -192 + -192, -192, -192, 525, 526, 527, -192, -192, -192, -192, + -192, -192, -192, -192, -192, 528, 529, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, 530, 531, 532, 533, + 534, 535, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, 536, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + 537, -192, -192, 538, 539, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, 540, 541, 542, -192, -192, -192, -192, + -192, -192, -192, -192 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. @@ -1436,9 +1446,9 @@ static const yytype_int16 yypact[] = means the default is an error. */ static const yytype_uint16 yydefact[] = { - 2, 0, 1, 15, 207, 217, 469, 515, 488, 226, - 524, 547, 236, 248, 3, 17, 209, 219, 228, 238, - 250, 471, 490, 517, 526, 549, 4, 5, 6, 10, + 2, 0, 1, 15, 207, 217, 475, 521, 494, 226, + 530, 553, 236, 251, 3, 17, 209, 219, 228, 238, + 253, 477, 496, 523, 532, 555, 4, 5, 6, 10, 13, 14, 8, 9, 7, 11, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1483,43 +1493,44 @@ static const yytype_uint16 yydefact[] = 222, 223, 224, 225, 0, 0, 0, 0, 0, 0, 0, 227, 229, 230, 233, 234, 231, 235, 232, 0, 0, 0, 0, 0, 0, 0, 0, 237, 239, 240, - 241, 242, 246, 243, 244, 245, 0, 253, 249, 251, - 252, 254, 255, 256, 0, 0, 0, 0, 0, 0, - 0, 0, 470, 472, 474, 473, 479, 475, 476, 477, - 478, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 489, 491, 492, 493, 494, 495, 496, - 497, 498, 499, 500, 501, 502, 0, 516, 518, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 525, - 527, 528, 529, 531, 532, 530, 533, 534, 535, 536, - 0, 0, 0, 0, 0, 548, 550, 551, 552, 553, - 554, 258, 257, 264, 277, 275, 283, 284, 287, 285, - 286, 288, 289, 290, 291, 292, 314, 315, 316, 317, - 318, 342, 343, 344, 349, 350, 280, 351, 352, 355, - 353, 354, 357, 358, 359, 373, 329, 330, 332, 333, - 360, 376, 323, 325, 377, 383, 384, 385, 281, 341, - 399, 400, 324, 394, 307, 276, 319, 374, 380, 361, - 0, 0, 403, 282, 259, 306, 365, 260, 278, 279, - 320, 321, 401, 363, 367, 368, 261, 404, 345, 372, - 308, 328, 378, 379, 382, 393, 322, 397, 395, 396, - 334, 340, 369, 370, 335, 336, 362, 387, 309, 310, - 313, 293, 295, 296, 297, 298, 299, 405, 406, 408, - 346, 347, 348, 356, 409, 410, 411, 0, 0, 0, - 364, 337, 520, 420, 424, 422, 421, 425, 423, 0, - 0, 428, 429, 265, 266, 267, 268, 269, 270, 271, - 272, 273, 274, 366, 381, 398, 433, 434, 338, 412, - 0, 0, 0, 0, 0, 0, 388, 389, 390, 391, - 392, 521, 331, 326, 386, 305, 262, 263, 327, 435, - 437, 436, 438, 439, 440, 294, 301, 430, 432, 431, - 300, 0, 312, 371, 407, 311, 339, 302, 303, 304, - 441, 442, 443, 447, 446, 444, 445, 448, 449, 450, - 451, 453, 452, 462, 0, 466, 467, 0, 0, 468, - 454, 460, 455, 456, 457, 459, 461, 458, 247, 480, - 482, 481, 484, 485, 486, 487, 483, 503, 504, 505, - 506, 507, 508, 509, 510, 511, 512, 513, 514, 519, - 537, 538, 539, 542, 540, 541, 543, 544, 545, 546, - 555, 556, 557, 558, 559, 375, 402, 419, 522, 523, - 426, 427, 413, 414, 0, 0, 0, 418, 560, 463, - 464, 465, 417, 415, 416 + 241, 242, 246, 243, 244, 245, 0, 0, 0, 0, + 256, 260, 261, 262, 252, 254, 255, 257, 258, 259, + 0, 0, 0, 0, 0, 0, 0, 0, 476, 478, + 480, 479, 485, 481, 482, 483, 484, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 495, + 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, + 507, 508, 0, 522, 524, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 531, 533, 534, 535, 537, + 538, 536, 539, 540, 541, 542, 0, 0, 0, 0, + 0, 554, 556, 557, 558, 559, 560, 264, 263, 270, + 283, 281, 289, 290, 293, 291, 292, 294, 295, 296, + 297, 298, 320, 321, 322, 323, 324, 348, 349, 350, + 355, 356, 286, 357, 358, 361, 359, 360, 363, 364, + 365, 379, 335, 336, 338, 339, 366, 382, 329, 331, + 383, 389, 390, 391, 287, 347, 405, 406, 330, 400, + 313, 282, 325, 380, 386, 367, 0, 0, 409, 288, + 265, 312, 371, 266, 284, 285, 326, 327, 407, 369, + 373, 374, 267, 410, 351, 378, 314, 334, 384, 385, + 388, 399, 328, 403, 401, 402, 340, 346, 375, 376, + 341, 342, 368, 393, 315, 316, 319, 299, 301, 302, + 303, 304, 305, 411, 412, 414, 352, 353, 354, 362, + 415, 416, 417, 0, 0, 0, 370, 343, 526, 426, + 430, 428, 427, 431, 429, 0, 0, 434, 435, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 372, + 387, 404, 439, 440, 344, 418, 0, 0, 0, 0, + 0, 0, 394, 395, 396, 397, 398, 527, 337, 332, + 392, 311, 268, 269, 333, 441, 443, 442, 444, 445, + 446, 300, 307, 436, 438, 437, 306, 0, 318, 377, + 413, 317, 345, 308, 309, 310, 447, 448, 449, 453, + 452, 450, 451, 454, 455, 456, 457, 459, 458, 468, + 0, 472, 473, 0, 0, 474, 460, 466, 461, 462, + 463, 465, 467, 464, 247, 248, 249, 250, 486, 488, + 487, 490, 491, 492, 493, 489, 509, 510, 511, 512, + 513, 514, 515, 516, 517, 518, 519, 520, 525, 543, + 544, 545, 548, 546, 547, 549, 550, 551, 552, 561, + 562, 563, 564, 565, 381, 408, 425, 528, 529, 432, + 433, 419, 420, 0, 0, 0, 424, 566, 469, 470, + 471, 423, 421, 422 }; /* YYPGOTO[NTERM-NUM]. */ @@ -1546,48 +1557,50 @@ static const yytype_int16 yypgoto[] = -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, - -192, -192, -192, -192, -192, -192, -192, -192, -192, -21, - 537, 538, 539, 540, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -21, 543, 544, 545, 546, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, - -192, -192, -192, -192, -192, -192, -192, -192, -192, -192 + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { -1, 1, 14, 15, 26, 226, 16, 27, 423, 17, - 28, 437, 18, 29, 451, 19, 30, 467, 477, 20, - 31, 478, 227, 228, 229, 230, 231, 232, 233, 234, - 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, - 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, - 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, - 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, - 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, - 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, - 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, - 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, - 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, - 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, - 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, - 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, - 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, - 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, - 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, - 405, 406, 407, 408, 409, 410, 424, 425, 426, 427, - 428, 429, 430, 438, 439, 440, 441, 442, 443, 468, - 469, 470, 471, 472, 473, 474, 475, 452, 453, 454, - 455, 456, 457, 458, 21, 32, 492, 493, 494, 495, - 496, 497, 498, 499, 500, 22, 33, 513, 514, 515, - 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, - 23, 34, 527, 528, 411, 412, 413, 414, 24, 35, - 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, - 549, 25, 36, 555, 556, 557, 558, 559, 560, 415 + 28, 437, 18, 29, 451, 19, 30, 467, 480, 481, + 482, 483, 20, 31, 484, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, + 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, + 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, + 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, + 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, + 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, + 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 424, + 425, 426, 427, 428, 429, 430, 438, 439, 440, 441, + 442, 443, 468, 469, 470, 471, 472, 473, 474, 475, + 452, 453, 454, 455, 456, 457, 458, 21, 32, 498, + 499, 500, 501, 502, 503, 504, 505, 506, 22, 33, + 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, + 529, 530, 531, 23, 34, 533, 534, 411, 412, 413, + 414, 24, 35, 545, 546, 547, 548, 549, 550, 551, + 552, 553, 554, 555, 25, 36, 561, 562, 563, 564, + 565, 566, 415 }; /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If @@ -1595,64 +1608,64 @@ static const yytype_int16 yydefgoto[] = number is the opposite. If YYTABLE_NINF, syntax error. */ static const yytype_uint16 yytable[] = { - 2, 416, 459, 417, 418, 444, 431, 526, 561, 562, - 479, 3, 563, 564, 432, 433, 565, 566, 567, 568, - 459, 501, 502, 503, 504, 505, 506, 507, 508, 509, - 510, 511, 512, 484, 485, 486, 487, 488, 489, 490, - 491, 445, 446, 569, 4, 550, 551, 552, 553, 554, - 5, 529, 530, 531, 532, 533, 534, 535, 536, 537, - 538, 570, 571, 572, 419, 573, 447, 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, 6, 420, 601, 602, 421, 434, - 603, 435, 604, 605, 606, 607, 608, 609, 610, 611, - 7, 612, 613, 614, 615, 616, 617, 618, 619, 620, - 621, 622, 623, 624, 625, 626, 627, 448, 449, 628, - 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, - 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, - 649, 8, 650, 651, 652, 653, 654, 655, 656, 657, - 658, 659, 660, 661, 662, 663, 450, 664, 665, 666, - 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, - 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, - 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, - 697, 698, 9, 461, 462, 463, 699, 700, 701, 702, - 703, 704, 705, 466, 706, 707, 422, 708, 10, 460, - 436, 461, 462, 463, 464, 465, 709, 476, 710, 711, - 712, 466, 713, 714, 715, 11, 716, 717, 718, 719, - 720, 721, 722, 12, 723, 724, 725, 726, 727, 728, - 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, - 739, 740, 741, 742, 743, 744, 0, 13, 37, 38, + 2, 416, 459, 417, 418, 444, 431, 532, 567, 568, + 485, 3, 569, 570, 432, 433, 571, 572, 573, 574, + 459, 507, 508, 509, 510, 511, 512, 513, 514, 515, + 516, 517, 518, 490, 491, 492, 493, 494, 495, 496, + 497, 445, 446, 575, 4, 556, 557, 558, 559, 560, + 5, 535, 536, 537, 538, 539, 540, 541, 542, 543, + 544, 576, 577, 578, 419, 579, 447, 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, 6, 420, 607, 608, 421, 434, + 609, 435, 610, 611, 612, 613, 614, 615, 616, 617, + 7, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 628, 629, 630, 631, 632, 633, 448, 449, 634, + 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, + 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, + 655, 8, 656, 657, 658, 659, 660, 661, 662, 663, + 664, 665, 666, 667, 668, 669, 450, 670, 671, 672, + 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, + 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, + 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, + 703, 704, 9, 461, 462, 463, 705, 706, 707, 708, + 709, 710, 711, 466, 712, 713, 422, 714, 10, 460, + 436, 461, 462, 463, 464, 465, 715, 476, 477, 478, + 479, 466, 716, 717, 718, 11, 719, 720, 721, 722, + 723, 724, 725, 12, 726, 727, 728, 729, 730, 731, + 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, + 742, 743, 744, 745, 746, 747, 0, 13, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, - 59, 60, 61, 62, 63, 64, 65, 66, 67, 745, - 746, 747, 748, 68, 69, 70, 749, 750, 751, 71, + 59, 60, 61, 62, 63, 64, 65, 66, 67, 748, + 749, 750, 751, 68, 69, 70, 752, 753, 754, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, - 752, 753, 754, 755, 756, 757, 758, 759, 760, 112, - 113, 114, 761, 115, 116, 117, 762, 763, 118, 119, + 755, 756, 757, 758, 759, 760, 761, 762, 763, 112, + 113, 114, 764, 115, 116, 117, 765, 766, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, - 140, 141, 764, 765, 766, 142, 767, 143, 144, 145, - 146, 147, 148, 149, 150, 151, 152, 768, 769, 770, - 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, + 140, 141, 767, 768, 769, 142, 770, 143, 144, 145, + 146, 147, 148, 149, 150, 151, 152, 771, 772, 773, + 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, - 183, 184, 185, 186, 187, 188, 189, 190, 781, 191, - 782, 192, 193, 194, 195, 196, 197, 198, 199, 200, - 201, 202, 203, 204, 783, 784, 785, 786, 787, 788, - 789, 790, 791, 792, 793, 205, 206, 207, 208, 209, - 210, 794, 795, 796, 797, 798, 799, 211, 800, 801, - 802, 803, 804, 805, 806, 212, 213, 807, 214, 215, - 808, 216, 217, 809, 810, 218, 219, 220, 221, 222, - 223, 224, 225, 811, 812, 813, 814, 815, 816, 817, - 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, - 828, 829, 830, 831, 832, 833, 834, 0, 0, 0, + 183, 184, 185, 186, 187, 188, 189, 190, 784, 191, + 785, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 786, 787, 788, 789, 790, 791, + 792, 793, 794, 795, 796, 205, 206, 207, 208, 209, + 210, 797, 798, 799, 800, 801, 802, 211, 803, 804, + 805, 806, 807, 808, 809, 212, 213, 810, 214, 215, + 811, 216, 217, 812, 813, 218, 219, 220, 221, 222, + 223, 224, 225, 814, 815, 816, 817, 818, 819, 820, + 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, + 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, + 841, 842, 843, 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, 480, 481, - 482, 483 + 0, 0, 0, 0, 486, 487, 488, 489 }; static const yytype_int16 yycheck[] = @@ -1679,8 +1692,8 @@ static const yytype_int16 yycheck[] = 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 202, 244, 245, 246, 10, 10, 10, 10, 10, 10, 10, 254, 10, 10, 258, 10, 218, 242, - 257, 244, 245, 246, 247, 248, 10, 268, 10, 10, - 10, 254, 10, 10, 10, 235, 10, 10, 10, 10, + 257, 244, 245, 246, 247, 248, 10, 268, 269, 270, + 271, 254, 10, 10, 10, 235, 10, 10, 10, 10, 10, 10, 10, 243, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, -1, 267, 12, 13, @@ -1711,20 +1724,20 @@ static const yytype_int16 yycheck[] = 10, 255, 256, 10, 10, 259, 260, 261, 262, 263, 264, 265, 266, 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, + 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, 31, 31, - 31, 31 + -1, -1, -1, -1, 31, 31, 31, 31 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const yytype_uint16 yystos[] = { - 0, 270, 0, 11, 44, 50, 94, 110, 151, 202, - 218, 235, 243, 267, 271, 272, 275, 278, 281, 284, - 288, 503, 514, 529, 537, 550, 273, 276, 279, 282, - 285, 289, 504, 515, 530, 538, 551, 12, 13, 14, + 0, 273, 0, 11, 44, 50, 94, 110, 151, 202, + 218, 235, 243, 267, 274, 275, 278, 281, 284, 287, + 294, 509, 520, 535, 543, 556, 276, 279, 282, 285, + 288, 295, 510, 521, 536, 544, 557, 12, 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, 47, 48, @@ -1743,41 +1756,41 @@ static const yytype_uint16 yystos[] = 201, 203, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 229, 230, 231, 232, 233, 234, 241, 249, 250, 252, 253, 255, 256, 259, 260, - 261, 262, 263, 264, 265, 266, 274, 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, 533, 534, 535, 536, 558, 43, 45, 46, 106, - 137, 140, 258, 277, 475, 476, 477, 478, 479, 480, - 481, 43, 51, 52, 136, 138, 257, 280, 482, 483, - 484, 485, 486, 487, 43, 79, 80, 104, 165, 166, - 204, 283, 496, 497, 498, 499, 500, 501, 502, 43, - 242, 244, 245, 246, 247, 248, 254, 286, 488, 489, - 490, 491, 492, 493, 494, 495, 268, 287, 290, 488, - 489, 490, 491, 492, 95, 96, 97, 98, 99, 100, - 101, 102, 505, 506, 507, 508, 509, 510, 511, 512, - 513, 152, 153, 154, 155, 156, 157, 158, 159, 160, - 161, 162, 163, 516, 517, 518, 519, 520, 521, 522, - 523, 524, 525, 526, 527, 528, 111, 531, 532, 219, - 220, 221, 222, 223, 224, 225, 226, 227, 228, 539, - 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, - 236, 237, 238, 239, 240, 552, 553, 554, 555, 556, - 557, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 261, 262, 263, 264, 265, 266, 277, 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, 539, 540, 541, 542, 564, 43, 45, 46, 106, + 137, 140, 258, 280, 481, 482, 483, 484, 485, 486, + 487, 43, 51, 52, 136, 138, 257, 283, 488, 489, + 490, 491, 492, 493, 43, 79, 80, 104, 165, 166, + 204, 286, 502, 503, 504, 505, 506, 507, 508, 43, + 242, 244, 245, 246, 247, 248, 254, 289, 494, 495, + 496, 497, 498, 499, 500, 501, 268, 269, 270, 271, + 290, 291, 292, 293, 296, 494, 495, 496, 497, 498, + 95, 96, 97, 98, 99, 100, 101, 102, 511, 512, + 513, 514, 515, 516, 517, 518, 519, 152, 153, 154, + 155, 156, 157, 158, 159, 160, 161, 162, 163, 522, + 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, + 533, 534, 111, 537, 538, 219, 220, 221, 222, 223, + 224, 225, 226, 227, 228, 545, 546, 547, 548, 549, + 550, 551, 552, 553, 554, 555, 236, 237, 238, 239, + 240, 558, 559, 560, 561, 562, 563, 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, @@ -1804,39 +1817,40 @@ static const yytype_uint16 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, 10, 10, 10, 10, + 10, 10, 10, 10 }; /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint16 yyr1[] = { - 0, 269, 270, 270, 271, 271, 271, 271, 271, 271, - 271, 271, 271, 271, 271, 272, 273, 273, 274, 274, - 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, - 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, - 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, - 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, - 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, - 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, - 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, - 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, - 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, - 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, - 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, - 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, - 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, - 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, - 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, - 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, - 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, - 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, - 274, 274, 274, 274, 274, 274, 274, 275, 276, 276, + 0, 272, 273, 273, 274, 274, 274, 274, 274, 274, + 274, 274, 274, 274, 274, 275, 276, 276, 277, 277, + 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, + 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, + 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, + 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, + 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, + 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, + 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, + 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, + 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, + 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, + 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, + 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, + 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, + 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, + 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, + 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, + 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, + 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 278, 279, 279, - 280, 280, 280, 280, 280, 280, 281, 282, 282, 283, + 280, 280, 280, 280, 280, 280, 280, 281, 282, 282, 283, 283, 283, 283, 283, 283, 284, 285, 285, 286, - 286, 286, 286, 286, 286, 286, 286, 287, 288, 289, - 289, 290, 290, 290, 290, 290, 290, 291, 292, 293, - 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, + 286, 286, 286, 286, 286, 286, 287, 288, 288, 289, + 289, 289, 289, 289, 289, 289, 289, 290, 291, 292, + 293, 294, 295, 295, 296, 296, 296, 296, 296, 296, + 296, 296, 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, @@ -1857,16 +1871,16 @@ static const yytype_uint16 yyr1[] = 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, 504, 505, 505, 505, 505, 505, 505, 505, 505, - 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, - 515, 516, 516, 516, 516, 516, 516, 516, 516, 516, - 516, 516, 516, 517, 518, 519, 520, 521, 522, 523, - 524, 525, 526, 527, 528, 529, 530, 530, 531, 532, - 533, 534, 535, 536, 537, 538, 538, 539, 539, 539, - 539, 539, 539, 539, 539, 539, 539, 540, 541, 542, - 543, 544, 545, 546, 547, 548, 549, 550, 551, 551, - 552, 552, 552, 552, 552, 553, 554, 555, 556, 557, - 558 + 504, 505, 506, 507, 508, 509, 510, 510, 511, 511, + 511, 511, 511, 511, 511, 511, 512, 513, 514, 515, + 516, 517, 518, 519, 520, 521, 521, 522, 522, 522, + 522, 522, 522, 522, 522, 522, 522, 522, 522, 523, + 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, + 534, 535, 536, 536, 537, 538, 539, 540, 541, 542, + 543, 544, 544, 545, 545, 545, 545, 545, 545, 545, + 545, 545, 545, 546, 547, 548, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 557, 558, 558, 558, 558, + 558, 559, 560, 561, 562, 563, 564 }; /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ @@ -1896,39 +1910,39 @@ static const yytype_uint8 yyr2[] = 1, 1, 1, 1, 1, 1, 1, 1, 2, 0, 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, 1, 2, - 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 3, 3, 4, 4, 4, 3, 3, - 2, 2, 2, 2, 2, 2, 3, 3, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 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, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 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, 2, 2, 2, 2, 2, - 3 + 2, 1, 2, 0, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, + 3, 4, 4, 4, 3, 3, 2, 2, 2, 2, + 2, 2, 3, 3, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 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, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 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, 2, 2, 2, 2, 2, 3 }; @@ -2605,15 +2619,15 @@ yyreduce: switch (yyn) { case 15: -#line 182 "./util/configparser.y" /* yacc.c:1646 */ +#line 183 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(server:)\n")); } -#line 2613 "util/configparser.c" /* yacc.c:1646 */ +#line 2627 "util/configparser.c" /* yacc.c:1646 */ break; case 207: -#line 273 "./util/configparser.y" /* yacc.c:1646 */ +#line 274 "./util/configparser.y" /* yacc.c:1646 */ { struct config_stub* s; OUTYY(("\nP(stub_zone:)\n")); @@ -2624,11 +2638,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 2628 "util/configparser.c" /* yacc.c:1646 */ +#line 2642 "util/configparser.c" /* yacc.c:1646 */ break; case 217: -#line 290 "./util/configparser.y" /* yacc.c:1646 */ +#line 291 "./util/configparser.y" /* yacc.c:1646 */ { struct config_stub* s; OUTYY(("\nP(forward_zone:)\n")); @@ -2639,11 +2653,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 2643 "util/configparser.c" /* yacc.c:1646 */ +#line 2657 "util/configparser.c" /* yacc.c:1646 */ break; case 226: -#line 307 "./util/configparser.y" /* yacc.c:1646 */ +#line 308 "./util/configparser.y" /* yacc.c:1646 */ { struct config_view* s; OUTYY(("\nP(view:)\n")); @@ -2656,11 +2670,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 2660 "util/configparser.c" /* yacc.c:1646 */ +#line 2674 "util/configparser.c" /* yacc.c:1646 */ break; case 236: -#line 326 "./util/configparser.y" /* yacc.c:1646 */ +#line 327 "./util/configparser.y" /* yacc.c:1646 */ { struct config_auth* s; OUTYY(("\nP(auth_zone:)\n")); @@ -2676,11 +2690,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 2680 "util/configparser.c" /* yacc.c:1646 */ +#line 2694 "util/configparser.c" /* yacc.c:1646 */ break; case 247: -#line 350 "./util/configparser.y" /* yacc.c:1646 */ +#line 351 "./util/configparser.y" /* yacc.c:1646 */ { size_t len; uint8_t* bitlist; @@ -2698,11 +2712,55 @@ yyreduce: } } -#line 2702 "util/configparser.c" /* yacc.c:1646 */ +#line 2716 "util/configparser.c" /* yacc.c:1646 */ break; case 248: -#line 369 "./util/configparser.y" /* yacc.c:1646 */ +#line 371 "./util/configparser.y" /* yacc.c:1646 */ + { + OUTYY(("P(rpz_action_override:%s)\n", (yyvsp[0].str))); + if(strcmp((yyvsp[0].str), "nxdomain")!=0 && strcmp((yyvsp[0].str), "nodata")!=0 && + strcmp((yyvsp[0].str), "passthru")!=0 && strcmp((yyvsp[0].str), "drop")!=0 && + strcmp((yyvsp[0].str), "cname")!=0 && strcmp((yyvsp[0].str), "disabled")!=0) { + yyerror("rpz-action-override action: expected nxdomain, " + "nodata, passthru, drop cname or disabled"); + free((yyvsp[0].str)); + cfg_parser->cfg->auths->rpz_action_override = NULL; + } + else { + cfg_parser->cfg->auths->rpz_action_override = (yyvsp[0].str); + } + } +#line 2735 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 249: +#line 388 "./util/configparser.y" /* yacc.c:1646 */ + { + OUTYY(("P(rpz_cname_override:%s)\n", (yyvsp[0].str))); + if(cfg_parser->cfg->auths->rpz_cname) + yyerror("there can only be one CNAME override per " + "RPZ"); + free(cfg_parser->cfg->auths->rpz_cname); + cfg_parser->cfg->auths->rpz_cname = (yyvsp[0].str); + } +#line 2748 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 250: +#line 399 "./util/configparser.y" /* yacc.c:1646 */ + { + OUTYY(("P(rpz_log:%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->auths->rpz_log = (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); + } +#line 2760 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 251: +#line 409 "./util/configparser.y" /* yacc.c:1646 */ { struct config_auth* s; OUTYY(("\nP(rpz:)\n")); @@ -2718,11 +2776,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 2722 "util/configparser.c" /* yacc.c:1646 */ +#line 2780 "util/configparser.c" /* yacc.c:1646 */ break; - case 257: -#line 391 "./util/configparser.y" /* yacc.c:1646 */ + case 263: +#line 432 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_num_threads:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -2730,11 +2788,11 @@ yyreduce: else cfg_parser->cfg->num_threads = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2734 "util/configparser.c" /* yacc.c:1646 */ +#line 2792 "util/configparser.c" /* yacc.c:1646 */ break; - case 258: -#line 400 "./util/configparser.y" /* yacc.c:1646 */ + case 264: +#line 441 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_verbosity:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -2742,11 +2800,11 @@ yyreduce: else cfg_parser->cfg->verbosity = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2746 "util/configparser.c" /* yacc.c:1646 */ +#line 2804 "util/configparser.c" /* yacc.c:1646 */ break; - case 259: -#line 409 "./util/configparser.y" /* yacc.c:1646 */ + case 265: +#line 450 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_statistics_interval:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "") == 0 || strcmp((yyvsp[0].str), "0") == 0) @@ -2756,11 +2814,11 @@ yyreduce: else cfg_parser->cfg->stat_interval = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2760 "util/configparser.c" /* yacc.c:1646 */ +#line 2818 "util/configparser.c" /* yacc.c:1646 */ break; - case 260: -#line 420 "./util/configparser.y" /* yacc.c:1646 */ + case 266: +#line 461 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_statistics_cumulative:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2768,11 +2826,11 @@ yyreduce: else cfg_parser->cfg->stat_cumulative = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2772 "util/configparser.c" /* yacc.c:1646 */ +#line 2830 "util/configparser.c" /* yacc.c:1646 */ break; - case 261: -#line 429 "./util/configparser.y" /* yacc.c:1646 */ + case 267: +#line 470 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_extended_statistics:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2780,11 +2838,11 @@ yyreduce: else cfg_parser->cfg->stat_extended = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2784 "util/configparser.c" /* yacc.c:1646 */ +#line 2842 "util/configparser.c" /* yacc.c:1646 */ break; - case 262: -#line 438 "./util/configparser.y" /* yacc.c:1646 */ + case 268: +#line 479 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_shm_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2792,11 +2850,11 @@ yyreduce: else cfg_parser->cfg->shm_enable = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2796 "util/configparser.c" /* yacc.c:1646 */ +#line 2854 "util/configparser.c" /* yacc.c:1646 */ break; - case 263: -#line 447 "./util/configparser.y" /* yacc.c:1646 */ + case 269: +#line 488 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_shm_key:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "") == 0 || strcmp((yyvsp[0].str), "0") == 0) @@ -2806,11 +2864,11 @@ yyreduce: else cfg_parser->cfg->shm_key = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2810 "util/configparser.c" /* yacc.c:1646 */ +#line 2868 "util/configparser.c" /* yacc.c:1646 */ break; - case 264: -#line 458 "./util/configparser.y" /* yacc.c:1646 */ + case 270: +#line 499 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -2818,11 +2876,11 @@ yyreduce: else cfg_parser->cfg->port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2822 "util/configparser.c" /* yacc.c:1646 */ +#line 2880 "util/configparser.c" /* yacc.c:1646 */ break; - case 265: -#line 467 "./util/configparser.y" /* yacc.c:1646 */ + case 271: +#line 508 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(server_send_client_subnet:%s)\n", (yyvsp[0].str))); @@ -2832,11 +2890,11 @@ yyreduce: OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); #endif } -#line 2836 "util/configparser.c" /* yacc.c:1646 */ +#line 2894 "util/configparser.c" /* yacc.c:1646 */ break; - case 266: -#line 478 "./util/configparser.y" /* yacc.c:1646 */ + case 272: +#line 519 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(server_client_subnet_zone:%s)\n", (yyvsp[0].str))); @@ -2847,11 +2905,11 @@ yyreduce: OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); #endif } -#line 2851 "util/configparser.c" /* yacc.c:1646 */ +#line 2909 "util/configparser.c" /* yacc.c:1646 */ break; - case 267: -#line 491 "./util/configparser.y" /* yacc.c:1646 */ + case 273: +#line 532 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(server_client_subnet_always_forward:%s)\n", (yyvsp[0].str))); @@ -2865,11 +2923,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 2869 "util/configparser.c" /* yacc.c:1646 */ +#line 2927 "util/configparser.c" /* yacc.c:1646 */ break; - case 268: -#line 506 "./util/configparser.y" /* yacc.c:1646 */ + case 274: +#line 547 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(client_subnet_opcode:%s)\n", (yyvsp[0].str))); @@ -2879,11 +2937,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 2883 "util/configparser.c" /* yacc.c:1646 */ +#line 2941 "util/configparser.c" /* yacc.c:1646 */ break; - case 269: -#line 517 "./util/configparser.y" /* yacc.c:1646 */ + case 275: +#line 558 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(max_client_subnet_ipv4:%s)\n", (yyvsp[0].str))); @@ -2899,11 +2957,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 2903 "util/configparser.c" /* yacc.c:1646 */ +#line 2961 "util/configparser.c" /* yacc.c:1646 */ break; - case 270: -#line 534 "./util/configparser.y" /* yacc.c:1646 */ + case 276: +#line 575 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(max_client_subnet_ipv6:%s)\n", (yyvsp[0].str))); @@ -2919,11 +2977,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 2923 "util/configparser.c" /* yacc.c:1646 */ +#line 2981 "util/configparser.c" /* yacc.c:1646 */ break; - case 271: -#line 551 "./util/configparser.y" /* yacc.c:1646 */ + case 277: +#line 592 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(min_client_subnet_ipv4:%s)\n", (yyvsp[0].str))); @@ -2939,11 +2997,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 2943 "util/configparser.c" /* yacc.c:1646 */ +#line 3001 "util/configparser.c" /* yacc.c:1646 */ break; - case 272: -#line 568 "./util/configparser.y" /* yacc.c:1646 */ + case 278: +#line 609 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(min_client_subnet_ipv6:%s)\n", (yyvsp[0].str))); @@ -2959,11 +3017,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 2963 "util/configparser.c" /* yacc.c:1646 */ +#line 3021 "util/configparser.c" /* yacc.c:1646 */ break; - case 273: -#line 585 "./util/configparser.y" /* yacc.c:1646 */ + case 279: +#line 626 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(max_ecs_tree_size_ipv4:%s)\n", (yyvsp[0].str))); @@ -2977,11 +3035,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 2981 "util/configparser.c" /* yacc.c:1646 */ +#line 3039 "util/configparser.c" /* yacc.c:1646 */ break; - case 274: -#line 600 "./util/configparser.y" /* yacc.c:1646 */ + case 280: +#line 641 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(max_ecs_tree_size_ipv6:%s)\n", (yyvsp[0].str))); @@ -2995,11 +3053,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 2999 "util/configparser.c" /* yacc.c:1646 */ +#line 3057 "util/configparser.c" /* yacc.c:1646 */ break; - case 275: -#line 615 "./util/configparser.y" /* yacc.c:1646 */ + case 281: +#line 656 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_interface:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->num_ifs == 0) @@ -3011,11 +3069,11 @@ yyreduce: else cfg_parser->cfg->ifs[cfg_parser->cfg->num_ifs++] = (yyvsp[0].str); } -#line 3015 "util/configparser.c" /* yacc.c:1646 */ +#line 3073 "util/configparser.c" /* yacc.c:1646 */ break; - case 276: -#line 628 "./util/configparser.y" /* yacc.c:1646 */ + case 282: +#line 669 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_interface:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->num_out_ifs == 0) @@ -3029,11 +3087,11 @@ yyreduce: cfg_parser->cfg->out_ifs[ cfg_parser->cfg->num_out_ifs++] = (yyvsp[0].str); } -#line 3033 "util/configparser.c" /* yacc.c:1646 */ +#line 3091 "util/configparser.c" /* yacc.c:1646 */ break; - case 277: -#line 643 "./util/configparser.y" /* yacc.c:1646 */ + case 283: +#line 684 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_range:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3041,11 +3099,11 @@ yyreduce: else cfg_parser->cfg->outgoing_num_ports = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3045 "util/configparser.c" /* yacc.c:1646 */ +#line 3103 "util/configparser.c" /* yacc.c:1646 */ break; - case 278: -#line 652 "./util/configparser.y" /* yacc.c:1646 */ + case 284: +#line 693 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_port_permit:%s)\n", (yyvsp[0].str))); if(!cfg_mark_ports((yyvsp[0].str), 1, @@ -3053,11 +3111,11 @@ yyreduce: yyerror("port number or range (\"low-high\") expected"); free((yyvsp[0].str)); } -#line 3057 "util/configparser.c" /* yacc.c:1646 */ +#line 3115 "util/configparser.c" /* yacc.c:1646 */ break; - case 279: -#line 661 "./util/configparser.y" /* yacc.c:1646 */ + case 285: +#line 702 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_port_avoid:%s)\n", (yyvsp[0].str))); if(!cfg_mark_ports((yyvsp[0].str), 0, @@ -3065,11 +3123,11 @@ yyreduce: yyerror("port number or range (\"low-high\") expected"); free((yyvsp[0].str)); } -#line 3069 "util/configparser.c" /* yacc.c:1646 */ +#line 3127 "util/configparser.c" /* yacc.c:1646 */ break; - case 280: -#line 670 "./util/configparser.y" /* yacc.c:1646 */ + case 286: +#line 711 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_num_tcp:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3077,11 +3135,11 @@ yyreduce: else cfg_parser->cfg->outgoing_num_tcp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3081 "util/configparser.c" /* yacc.c:1646 */ +#line 3139 "util/configparser.c" /* yacc.c:1646 */ break; - case 281: -#line 679 "./util/configparser.y" /* yacc.c:1646 */ + case 287: +#line 720 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_incoming_num_tcp:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3089,11 +3147,11 @@ yyreduce: else cfg_parser->cfg->incoming_num_tcp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3093 "util/configparser.c" /* yacc.c:1646 */ +#line 3151 "util/configparser.c" /* yacc.c:1646 */ break; - case 282: -#line 688 "./util/configparser.y" /* yacc.c:1646 */ + case 288: +#line 729 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_interface_automatic:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3101,11 +3159,11 @@ yyreduce: else cfg_parser->cfg->if_automatic = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3105 "util/configparser.c" /* yacc.c:1646 */ +#line 3163 "util/configparser.c" /* yacc.c:1646 */ break; - case 283: -#line 697 "./util/configparser.y" /* yacc.c:1646 */ + case 289: +#line 738 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_ip4:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3113,11 +3171,11 @@ yyreduce: else cfg_parser->cfg->do_ip4 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3117 "util/configparser.c" /* yacc.c:1646 */ +#line 3175 "util/configparser.c" /* yacc.c:1646 */ break; - case 284: -#line 706 "./util/configparser.y" /* yacc.c:1646 */ + case 290: +#line 747 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_ip6:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3125,11 +3183,11 @@ yyreduce: else cfg_parser->cfg->do_ip6 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3129 "util/configparser.c" /* yacc.c:1646 */ +#line 3187 "util/configparser.c" /* yacc.c:1646 */ break; - case 285: -#line 715 "./util/configparser.y" /* yacc.c:1646 */ + case 291: +#line 756 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_udp:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3137,11 +3195,11 @@ yyreduce: else cfg_parser->cfg->do_udp = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3141 "util/configparser.c" /* yacc.c:1646 */ +#line 3199 "util/configparser.c" /* yacc.c:1646 */ break; - case 286: -#line 724 "./util/configparser.y" /* yacc.c:1646 */ + case 292: +#line 765 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_tcp:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3149,11 +3207,11 @@ yyreduce: else cfg_parser->cfg->do_tcp = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3153 "util/configparser.c" /* yacc.c:1646 */ +#line 3211 "util/configparser.c" /* yacc.c:1646 */ break; - case 287: -#line 733 "./util/configparser.y" /* yacc.c:1646 */ + case 293: +#line 774 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_prefer_ip6:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3161,11 +3219,11 @@ yyreduce: else cfg_parser->cfg->prefer_ip6 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3165 "util/configparser.c" /* yacc.c:1646 */ +#line 3223 "util/configparser.c" /* yacc.c:1646 */ break; - case 288: -#line 742 "./util/configparser.y" /* yacc.c:1646 */ + case 294: +#line 783 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tcp_mss:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3173,11 +3231,11 @@ yyreduce: else cfg_parser->cfg->tcp_mss = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3177 "util/configparser.c" /* yacc.c:1646 */ +#line 3235 "util/configparser.c" /* yacc.c:1646 */ break; - case 289: -#line 751 "./util/configparser.y" /* yacc.c:1646 */ + case 295: +#line 792 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_tcp_mss:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3185,11 +3243,11 @@ yyreduce: else cfg_parser->cfg->outgoing_tcp_mss = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3189 "util/configparser.c" /* yacc.c:1646 */ +#line 3247 "util/configparser.c" /* yacc.c:1646 */ break; - case 290: -#line 760 "./util/configparser.y" /* yacc.c:1646 */ + case 296: +#line 801 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tcp_idle_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3201,11 +3259,11 @@ yyreduce: else cfg_parser->cfg->tcp_idle_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3205 "util/configparser.c" /* yacc.c:1646 */ +#line 3263 "util/configparser.c" /* yacc.c:1646 */ break; - case 291: -#line 773 "./util/configparser.y" /* yacc.c:1646 */ + case 297: +#line 814 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tcp_keepalive:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3213,11 +3271,11 @@ yyreduce: else cfg_parser->cfg->do_tcp_keepalive = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3217 "util/configparser.c" /* yacc.c:1646 */ +#line 3275 "util/configparser.c" /* yacc.c:1646 */ break; - case 292: -#line 782 "./util/configparser.y" /* yacc.c:1646 */ + case 298: +#line 823 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tcp_keepalive_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3229,11 +3287,11 @@ yyreduce: else cfg_parser->cfg->tcp_keepalive_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3233 "util/configparser.c" /* yacc.c:1646 */ +#line 3291 "util/configparser.c" /* yacc.c:1646 */ break; - case 293: -#line 795 "./util/configparser.y" /* yacc.c:1646 */ + case 299: +#line 836 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tcp_upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3241,11 +3299,11 @@ yyreduce: else cfg_parser->cfg->tcp_upstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3245 "util/configparser.c" /* yacc.c:1646 */ +#line 3303 "util/configparser.c" /* yacc.c:1646 */ break; - case 294: -#line 804 "./util/configparser.y" /* yacc.c:1646 */ + case 300: +#line 845 "./util/configparser.y" /* yacc.c:1646 */ { 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) @@ -3253,11 +3311,11 @@ yyreduce: else cfg_parser->cfg->udp_upstream_without_downstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3257 "util/configparser.c" /* yacc.c:1646 */ +#line 3315 "util/configparser.c" /* yacc.c:1646 */ break; - case 295: -#line 813 "./util/configparser.y" /* yacc.c:1646 */ + case 301: +#line 854 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ssl_upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3265,31 +3323,31 @@ yyreduce: else cfg_parser->cfg->ssl_upstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3269 "util/configparser.c" /* yacc.c:1646 */ +#line 3327 "util/configparser.c" /* yacc.c:1646 */ break; - case 296: -#line 822 "./util/configparser.y" /* yacc.c:1646 */ + case 302: +#line 863 "./util/configparser.y" /* yacc.c:1646 */ { 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 3279 "util/configparser.c" /* yacc.c:1646 */ +#line 3337 "util/configparser.c" /* yacc.c:1646 */ break; - case 297: -#line 829 "./util/configparser.y" /* yacc.c:1646 */ + case 303: +#line 870 "./util/configparser.y" /* yacc.c:1646 */ { 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 3289 "util/configparser.c" /* yacc.c:1646 */ +#line 3347 "util/configparser.c" /* yacc.c:1646 */ break; - case 298: -#line 836 "./util/configparser.y" /* yacc.c:1646 */ + case 304: +#line 877 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ssl_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3297,21 +3355,21 @@ yyreduce: else cfg_parser->cfg->ssl_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3301 "util/configparser.c" /* yacc.c:1646 */ +#line 3359 "util/configparser.c" /* yacc.c:1646 */ break; - case 299: -#line 845 "./util/configparser.y" /* yacc.c:1646 */ + case 305: +#line 886 "./util/configparser.y" /* yacc.c:1646 */ { 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 3311 "util/configparser.c" /* yacc.c:1646 */ +#line 3369 "util/configparser.c" /* yacc.c:1646 */ break; - case 300: -#line 852 "./util/configparser.y" /* yacc.c:1646 */ + case 306: +#line 893 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tls_win_cert:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3319,53 +3377,53 @@ yyreduce: else cfg_parser->cfg->tls_win_cert = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3323 "util/configparser.c" /* yacc.c:1646 */ +#line 3381 "util/configparser.c" /* yacc.c:1646 */ break; - case 301: -#line 861 "./util/configparser.y" /* yacc.c:1646 */ + case 307: +#line 902 "./util/configparser.y" /* yacc.c:1646 */ { 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 3334 "util/configparser.c" /* yacc.c:1646 */ +#line 3392 "util/configparser.c" /* yacc.c:1646 */ break; - case 302: -#line 869 "./util/configparser.y" /* yacc.c:1646 */ + case 308: +#line 910 "./util/configparser.y" /* yacc.c:1646 */ { 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 3344 "util/configparser.c" /* yacc.c:1646 */ +#line 3402 "util/configparser.c" /* yacc.c:1646 */ break; - case 303: -#line 876 "./util/configparser.y" /* yacc.c:1646 */ + case 309: +#line 917 "./util/configparser.y" /* yacc.c:1646 */ { 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 3354 "util/configparser.c" /* yacc.c:1646 */ +#line 3412 "util/configparser.c" /* yacc.c:1646 */ break; - case 304: -#line 883 "./util/configparser.y" /* yacc.c:1646 */ + case 310: +#line 924 "./util/configparser.y" /* yacc.c:1646 */ { 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 3365 "util/configparser.c" /* yacc.c:1646 */ +#line 3423 "util/configparser.c" /* yacc.c:1646 */ break; - case 305: -#line 891 "./util/configparser.y" /* yacc.c:1646 */ + case 311: +#line 932 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_use_systemd:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3373,11 +3431,11 @@ yyreduce: else cfg_parser->cfg->use_systemd = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3377 "util/configparser.c" /* yacc.c:1646 */ +#line 3435 "util/configparser.c" /* yacc.c:1646 */ break; - case 306: -#line 900 "./util/configparser.y" /* yacc.c:1646 */ + case 312: +#line 941 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_daemonize:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3385,11 +3443,11 @@ yyreduce: else cfg_parser->cfg->do_daemonize = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3389 "util/configparser.c" /* yacc.c:1646 */ +#line 3447 "util/configparser.c" /* yacc.c:1646 */ break; - case 307: -#line 909 "./util/configparser.y" /* yacc.c:1646 */ + case 313: +#line 950 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_use_syslog:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3402,11 +3460,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3406 "util/configparser.c" /* yacc.c:1646 */ +#line 3464 "util/configparser.c" /* yacc.c:1646 */ break; - case 308: -#line 923 "./util/configparser.y" /* yacc.c:1646 */ + case 314: +#line 964 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_time_ascii:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3414,11 +3472,11 @@ yyreduce: else cfg_parser->cfg->log_time_ascii = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3418 "util/configparser.c" /* yacc.c:1646 */ +#line 3476 "util/configparser.c" /* yacc.c:1646 */ break; - case 309: -#line 932 "./util/configparser.y" /* yacc.c:1646 */ + case 315: +#line 973 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_queries:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3426,11 +3484,11 @@ yyreduce: else cfg_parser->cfg->log_queries = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3430 "util/configparser.c" /* yacc.c:1646 */ +#line 3488 "util/configparser.c" /* yacc.c:1646 */ break; - case 310: -#line 941 "./util/configparser.y" /* yacc.c:1646 */ + case 316: +#line 982 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_replies:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3438,11 +3496,11 @@ yyreduce: else cfg_parser->cfg->log_replies = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3442 "util/configparser.c" /* yacc.c:1646 */ +#line 3500 "util/configparser.c" /* yacc.c:1646 */ break; - case 311: -#line 950 "./util/configparser.y" /* yacc.c:1646 */ + case 317: +#line 991 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_tag_queryreply:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3450,11 +3508,11 @@ yyreduce: else cfg_parser->cfg->log_tag_queryreply = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3454 "util/configparser.c" /* yacc.c:1646 */ +#line 3512 "util/configparser.c" /* yacc.c:1646 */ break; - case 312: -#line 959 "./util/configparser.y" /* yacc.c:1646 */ + case 318: +#line 1000 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_servfail:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3462,11 +3520,11 @@ yyreduce: else cfg_parser->cfg->log_servfail = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3466 "util/configparser.c" /* yacc.c:1646 */ +#line 3524 "util/configparser.c" /* yacc.c:1646 */ break; - case 313: -#line 968 "./util/configparser.y" /* yacc.c:1646 */ + case 319: +#line 1009 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_local_actions:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3474,31 +3532,31 @@ yyreduce: else cfg_parser->cfg->log_local_actions = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3478 "util/configparser.c" /* yacc.c:1646 */ +#line 3536 "util/configparser.c" /* yacc.c:1646 */ break; - case 314: -#line 977 "./util/configparser.y" /* yacc.c:1646 */ + case 320: +#line 1018 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_chroot:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->chrootdir); cfg_parser->cfg->chrootdir = (yyvsp[0].str); } -#line 3488 "util/configparser.c" /* yacc.c:1646 */ +#line 3546 "util/configparser.c" /* yacc.c:1646 */ break; - case 315: -#line 984 "./util/configparser.y" /* yacc.c:1646 */ + case 321: +#line 1025 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_username:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->username); cfg_parser->cfg->username = (yyvsp[0].str); } -#line 3498 "util/configparser.c" /* yacc.c:1646 */ +#line 3556 "util/configparser.c" /* yacc.c:1646 */ break; - case 316: -#line 991 "./util/configparser.y" /* yacc.c:1646 */ + case 322: +#line 1032 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_directory:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->directory); @@ -3523,105 +3581,105 @@ yyreduce: } } } -#line 3527 "util/configparser.c" /* yacc.c:1646 */ +#line 3585 "util/configparser.c" /* yacc.c:1646 */ break; - case 317: -#line 1017 "./util/configparser.y" /* yacc.c:1646 */ + case 323: +#line 1058 "./util/configparser.y" /* yacc.c:1646 */ { 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 3538 "util/configparser.c" /* yacc.c:1646 */ +#line 3596 "util/configparser.c" /* yacc.c:1646 */ break; - case 318: -#line 1025 "./util/configparser.y" /* yacc.c:1646 */ + case 324: +#line 1066 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_pidfile:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->pidfile); cfg_parser->cfg->pidfile = (yyvsp[0].str); } -#line 3548 "util/configparser.c" /* yacc.c:1646 */ +#line 3606 "util/configparser.c" /* yacc.c:1646 */ break; - case 319: -#line 1032 "./util/configparser.y" /* yacc.c:1646 */ + case 325: +#line 1073 "./util/configparser.y" /* yacc.c:1646 */ { 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 3558 "util/configparser.c" /* yacc.c:1646 */ +#line 3616 "util/configparser.c" /* yacc.c:1646 */ break; - case 320: -#line 1039 "./util/configparser.y" /* yacc.c:1646 */ + case 326: +#line 1080 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_dlv_anchor_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dlv_anchor_file); cfg_parser->cfg->dlv_anchor_file = (yyvsp[0].str); } -#line 3568 "util/configparser.c" /* yacc.c:1646 */ +#line 3626 "util/configparser.c" /* yacc.c:1646 */ break; - case 321: -#line 1046 "./util/configparser.y" /* yacc.c:1646 */ + case 327: +#line 1087 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_dlv_anchor:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->dlv_anchor_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3578 "util/configparser.c" /* yacc.c:1646 */ +#line 3636 "util/configparser.c" /* yacc.c:1646 */ break; - case 322: -#line 1053 "./util/configparser.y" /* yacc.c:1646 */ + case 328: +#line 1094 "./util/configparser.y" /* yacc.c:1646 */ { 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 3589 "util/configparser.c" /* yacc.c:1646 */ +#line 3647 "util/configparser.c" /* yacc.c:1646 */ break; - case 323: -#line 1061 "./util/configparser.y" /* yacc.c:1646 */ + case 329: +#line 1102 "./util/configparser.y" /* yacc.c:1646 */ { 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 3600 "util/configparser.c" /* yacc.c:1646 */ +#line 3658 "util/configparser.c" /* yacc.c:1646 */ break; - case 324: -#line 1069 "./util/configparser.y" /* yacc.c:1646 */ + case 330: +#line 1110 "./util/configparser.y" /* yacc.c:1646 */ { 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 3611 "util/configparser.c" /* yacc.c:1646 */ +#line 3669 "util/configparser.c" /* yacc.c:1646 */ break; - case 325: -#line 1077 "./util/configparser.y" /* yacc.c:1646 */ + case 331: +#line 1118 "./util/configparser.y" /* yacc.c:1646 */ { 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 3621 "util/configparser.c" /* yacc.c:1646 */ +#line 3679 "util/configparser.c" /* yacc.c:1646 */ break; - case 326: -#line 1084 "./util/configparser.y" /* yacc.c:1646 */ + case 332: +#line 1125 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_trust_anchor_signaling:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3631,11 +3689,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3635 "util/configparser.c" /* yacc.c:1646 */ +#line 3693 "util/configparser.c" /* yacc.c:1646 */ break; - case 327: -#line 1095 "./util/configparser.y" /* yacc.c:1646 */ + case 333: +#line 1136 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_root_key_sentinel:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3645,21 +3703,21 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3649 "util/configparser.c" /* yacc.c:1646 */ +#line 3707 "util/configparser.c" /* yacc.c:1646 */ break; - case 328: -#line 1106 "./util/configparser.y" /* yacc.c:1646 */ + case 334: +#line 1147 "./util/configparser.y" /* yacc.c:1646 */ { 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 3659 "util/configparser.c" /* yacc.c:1646 */ +#line 3717 "util/configparser.c" /* yacc.c:1646 */ break; - case 329: -#line 1113 "./util/configparser.y" /* yacc.c:1646 */ + case 335: +#line 1154 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_hide_identity:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3667,11 +3725,11 @@ yyreduce: else cfg_parser->cfg->hide_identity = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3671 "util/configparser.c" /* yacc.c:1646 */ +#line 3729 "util/configparser.c" /* yacc.c:1646 */ break; - case 330: -#line 1122 "./util/configparser.y" /* yacc.c:1646 */ + case 336: +#line 1163 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_hide_version:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3679,11 +3737,11 @@ yyreduce: else cfg_parser->cfg->hide_version = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3683 "util/configparser.c" /* yacc.c:1646 */ +#line 3741 "util/configparser.c" /* yacc.c:1646 */ break; - case 331: -#line 1131 "./util/configparser.y" /* yacc.c:1646 */ + case 337: +#line 1172 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_hide_trustanchor:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3691,53 +3749,53 @@ yyreduce: else cfg_parser->cfg->hide_trustanchor = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3695 "util/configparser.c" /* yacc.c:1646 */ +#line 3753 "util/configparser.c" /* yacc.c:1646 */ break; - case 332: -#line 1140 "./util/configparser.y" /* yacc.c:1646 */ + case 338: +#line 1181 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_identity:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->identity); cfg_parser->cfg->identity = (yyvsp[0].str); } -#line 3705 "util/configparser.c" /* yacc.c:1646 */ +#line 3763 "util/configparser.c" /* yacc.c:1646 */ break; - case 333: -#line 1147 "./util/configparser.y" /* yacc.c:1646 */ + case 339: +#line 1188 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_version:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->version); cfg_parser->cfg->version = (yyvsp[0].str); } -#line 3715 "util/configparser.c" /* yacc.c:1646 */ +#line 3773 "util/configparser.c" /* yacc.c:1646 */ break; - case 334: -#line 1154 "./util/configparser.y" /* yacc.c:1646 */ + case 340: +#line 1195 "./util/configparser.y" /* yacc.c:1646 */ { 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 3726 "util/configparser.c" /* yacc.c:1646 */ +#line 3784 "util/configparser.c" /* yacc.c:1646 */ break; - case 335: -#line 1162 "./util/configparser.y" /* yacc.c:1646 */ + case 341: +#line 1203 "./util/configparser.y" /* yacc.c:1646 */ { 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 3737 "util/configparser.c" /* yacc.c:1646 */ +#line 3795 "util/configparser.c" /* yacc.c:1646 */ break; - case 336: -#line 1170 "./util/configparser.y" /* yacc.c:1646 */ + case 342: +#line 1211 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_so_reuseport:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3746,11 +3804,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3750 "util/configparser.c" /* yacc.c:1646 */ +#line 3808 "util/configparser.c" /* yacc.c:1646 */ break; - case 337: -#line 1180 "./util/configparser.y" /* yacc.c:1646 */ + case 343: +#line 1221 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_transparent:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3759,11 +3817,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3763 "util/configparser.c" /* yacc.c:1646 */ +#line 3821 "util/configparser.c" /* yacc.c:1646 */ break; - case 338: -#line 1190 "./util/configparser.y" /* yacc.c:1646 */ + case 344: +#line 1231 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_freebind:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3772,22 +3830,22 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3776 "util/configparser.c" /* yacc.c:1646 */ +#line 3834 "util/configparser.c" /* yacc.c:1646 */ break; - case 339: -#line 1200 "./util/configparser.y" /* yacc.c:1646 */ + case 345: +#line 1241 "./util/configparser.y" /* yacc.c:1646 */ { 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 3787 "util/configparser.c" /* yacc.c:1646 */ +#line 3845 "util/configparser.c" /* yacc.c:1646 */ break; - case 340: -#line 1208 "./util/configparser.y" /* yacc.c:1646 */ + case 346: +#line 1249 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_edns_buffer_size:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3799,11 +3857,11 @@ yyreduce: else cfg_parser->cfg->edns_buffer_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3803 "util/configparser.c" /* yacc.c:1646 */ +#line 3861 "util/configparser.c" /* yacc.c:1646 */ break; - case 341: -#line 1221 "./util/configparser.y" /* yacc.c:1646 */ + case 347: +#line 1262 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_msg_buffer_size:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3813,22 +3871,22 @@ yyreduce: else cfg_parser->cfg->msg_buffer_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3817 "util/configparser.c" /* yacc.c:1646 */ +#line 3875 "util/configparser.c" /* yacc.c:1646 */ break; - case 342: -#line 1232 "./util/configparser.y" /* yacc.c:1646 */ + case 348: +#line 1273 "./util/configparser.y" /* yacc.c:1646 */ { 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 3828 "util/configparser.c" /* yacc.c:1646 */ +#line 3886 "util/configparser.c" /* yacc.c:1646 */ break; - case 343: -#line 1240 "./util/configparser.y" /* yacc.c:1646 */ + case 349: +#line 1281 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_msg_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3840,11 +3898,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 3844 "util/configparser.c" /* yacc.c:1646 */ +#line 3902 "util/configparser.c" /* yacc.c:1646 */ break; - case 344: -#line 1253 "./util/configparser.y" /* yacc.c:1646 */ + case 350: +#line 1294 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_num_queries_per_thread:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3852,11 +3910,11 @@ yyreduce: else cfg_parser->cfg->num_queries_per_thread = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3856 "util/configparser.c" /* yacc.c:1646 */ +#line 3914 "util/configparser.c" /* yacc.c:1646 */ break; - case 345: -#line 1262 "./util/configparser.y" /* yacc.c:1646 */ + case 351: +#line 1303 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_jostle_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3864,11 +3922,11 @@ yyreduce: else cfg_parser->cfg->jostle_time = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3868 "util/configparser.c" /* yacc.c:1646 */ +#line 3926 "util/configparser.c" /* yacc.c:1646 */ break; - case 346: -#line 1271 "./util/configparser.y" /* yacc.c:1646 */ + case 352: +#line 1312 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_delay_close:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3876,11 +3934,11 @@ yyreduce: else cfg_parser->cfg->delay_close = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3880 "util/configparser.c" /* yacc.c:1646 */ +#line 3938 "util/configparser.c" /* yacc.c:1646 */ break; - case 347: -#line 1280 "./util/configparser.y" /* yacc.c:1646 */ + case 353: +#line 1321 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_unblock_lan_zones:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3889,11 +3947,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3893 "util/configparser.c" /* yacc.c:1646 */ +#line 3951 "util/configparser.c" /* yacc.c:1646 */ break; - case 348: -#line 1290 "./util/configparser.y" /* yacc.c:1646 */ + case 354: +#line 1331 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_insecure_lan_zones:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3902,22 +3960,22 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3906 "util/configparser.c" /* yacc.c:1646 */ +#line 3964 "util/configparser.c" /* yacc.c:1646 */ break; - case 349: -#line 1300 "./util/configparser.y" /* yacc.c:1646 */ + case 355: +#line 1341 "./util/configparser.y" /* yacc.c:1646 */ { 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 3917 "util/configparser.c" /* yacc.c:1646 */ +#line 3975 "util/configparser.c" /* yacc.c:1646 */ break; - case 350: -#line 1308 "./util/configparser.y" /* yacc.c:1646 */ + case 356: +#line 1349 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_rrset_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3929,11 +3987,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 3933 "util/configparser.c" /* yacc.c:1646 */ +#line 3991 "util/configparser.c" /* yacc.c:1646 */ break; - case 351: -#line 1321 "./util/configparser.y" /* yacc.c:1646 */ + case 357: +#line 1362 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_host_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3941,22 +3999,22 @@ yyreduce: else cfg_parser->cfg->host_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3945 "util/configparser.c" /* yacc.c:1646 */ +#line 4003 "util/configparser.c" /* yacc.c:1646 */ break; - case 352: -#line 1330 "./util/configparser.y" /* yacc.c:1646 */ + case 358: +#line 1371 "./util/configparser.y" /* yacc.c:1646 */ { 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 3956 "util/configparser.c" /* yacc.c:1646 */ +#line 4014 "util/configparser.c" /* yacc.c:1646 */ break; - case 353: -#line 1338 "./util/configparser.y" /* yacc.c:1646 */ + case 359: +#line 1379 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_cache_numhosts:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3964,22 +4022,22 @@ yyreduce: else cfg_parser->cfg->infra_cache_numhosts = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3968 "util/configparser.c" /* yacc.c:1646 */ +#line 4026 "util/configparser.c" /* yacc.c:1646 */ break; - case 354: -#line 1347 "./util/configparser.y" /* yacc.c:1646 */ + case 360: +#line 1388 "./util/configparser.y" /* yacc.c:1646 */ { 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 3979 "util/configparser.c" /* yacc.c:1646 */ +#line 4037 "util/configparser.c" /* yacc.c:1646 */ break; - case 355: -#line 1355 "./util/configparser.y" /* yacc.c:1646 */ + case 361: +#line 1396 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3991,11 +4049,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 3995 "util/configparser.c" /* yacc.c:1646 */ +#line 4053 "util/configparser.c" /* yacc.c:1646 */ break; - case 356: -#line 1368 "./util/configparser.y" /* yacc.c:1646 */ + case 362: +#line 1409 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_cache_min_rtt:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4003,21 +4061,21 @@ yyreduce: else cfg_parser->cfg->infra_cache_min_rtt = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4007 "util/configparser.c" /* yacc.c:1646 */ +#line 4065 "util/configparser.c" /* yacc.c:1646 */ break; - case 357: -#line 1377 "./util/configparser.y" /* yacc.c:1646 */ + case 363: +#line 1418 "./util/configparser.y" /* yacc.c:1646 */ { 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 4017 "util/configparser.c" /* yacc.c:1646 */ +#line 4075 "util/configparser.c" /* yacc.c:1646 */ break; - case 358: -#line 1384 "./util/configparser.y" /* yacc.c:1646 */ + case 364: +#line 1425 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_short_bufsize:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4026,11 +4084,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4030 "util/configparser.c" /* yacc.c:1646 */ +#line 4088 "util/configparser.c" /* yacc.c:1646 */ break; - case 359: -#line 1394 "./util/configparser.y" /* yacc.c:1646 */ + case 365: +#line 1435 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_large_queries:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4039,11 +4097,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4043 "util/configparser.c" /* yacc.c:1646 */ +#line 4101 "util/configparser.c" /* yacc.c:1646 */ break; - case 360: -#line 1404 "./util/configparser.y" /* yacc.c:1646 */ + case 366: +#line 1445 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_glue:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4052,11 +4110,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4056 "util/configparser.c" /* yacc.c:1646 */ +#line 4114 "util/configparser.c" /* yacc.c:1646 */ break; - case 361: -#line 1414 "./util/configparser.y" /* yacc.c:1646 */ + case 367: +#line 1455 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_dnssec_stripped:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4065,11 +4123,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4069 "util/configparser.c" /* yacc.c:1646 */ +#line 4127 "util/configparser.c" /* yacc.c:1646 */ break; - case 362: -#line 1424 "./util/configparser.y" /* yacc.c:1646 */ + case 368: +#line 1465 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_below_nxdomain:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4078,11 +4136,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4082 "util/configparser.c" /* yacc.c:1646 */ +#line 4140 "util/configparser.c" /* yacc.c:1646 */ break; - case 363: -#line 1434 "./util/configparser.y" /* yacc.c:1646 */ + case 369: +#line 1475 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_referral_path:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4091,11 +4149,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4095 "util/configparser.c" /* yacc.c:1646 */ +#line 4153 "util/configparser.c" /* yacc.c:1646 */ break; - case 364: -#line 1444 "./util/configparser.y" /* yacc.c:1646 */ + case 370: +#line 1485 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_algo_downgrade:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4104,11 +4162,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4108 "util/configparser.c" /* yacc.c:1646 */ +#line 4166 "util/configparser.c" /* yacc.c:1646 */ break; - case 365: -#line 1454 "./util/configparser.y" /* yacc.c:1646 */ + case 371: +#line 1495 "./util/configparser.y" /* yacc.c:1646 */ { 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) @@ -4117,41 +4175,41 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4121 "util/configparser.c" /* yacc.c:1646 */ +#line 4179 "util/configparser.c" /* yacc.c:1646 */ break; - case 366: -#line 1464 "./util/configparser.y" /* yacc.c:1646 */ + case 372: +#line 1505 "./util/configparser.y" /* yacc.c:1646 */ { 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 4131 "util/configparser.c" /* yacc.c:1646 */ +#line 4189 "util/configparser.c" /* yacc.c:1646 */ break; - case 367: -#line 1471 "./util/configparser.y" /* yacc.c:1646 */ + case 373: +#line 1512 "./util/configparser.y" /* yacc.c:1646 */ { 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 4141 "util/configparser.c" /* yacc.c:1646 */ +#line 4199 "util/configparser.c" /* yacc.c:1646 */ break; - case 368: -#line 1478 "./util/configparser.y" /* yacc.c:1646 */ + case 374: +#line 1519 "./util/configparser.y" /* yacc.c:1646 */ { 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 4151 "util/configparser.c" /* yacc.c:1646 */ +#line 4209 "util/configparser.c" /* yacc.c:1646 */ break; - case 369: -#line 1485 "./util/configparser.y" /* yacc.c:1646 */ + case 375: +#line 1526 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_prefetch:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4159,11 +4217,11 @@ yyreduce: else cfg_parser->cfg->prefetch = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4163 "util/configparser.c" /* yacc.c:1646 */ +#line 4221 "util/configparser.c" /* yacc.c:1646 */ break; - case 370: -#line 1494 "./util/configparser.y" /* yacc.c:1646 */ + case 376: +#line 1535 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_prefetch_key:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4171,11 +4229,11 @@ yyreduce: else cfg_parser->cfg->prefetch_key = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4175 "util/configparser.c" /* yacc.c:1646 */ +#line 4233 "util/configparser.c" /* yacc.c:1646 */ break; - case 371: -#line 1503 "./util/configparser.y" /* yacc.c:1646 */ + case 377: +#line 1544 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_deny_any:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4183,11 +4241,11 @@ yyreduce: else cfg_parser->cfg->deny_any = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4187 "util/configparser.c" /* yacc.c:1646 */ +#line 4245 "util/configparser.c" /* yacc.c:1646 */ break; - case 372: -#line 1512 "./util/configparser.y" /* yacc.c:1646 */ + case 378: +#line 1553 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_unwanted_reply_threshold:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4195,21 +4253,21 @@ yyreduce: else cfg_parser->cfg->unwanted_threshold = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4199 "util/configparser.c" /* yacc.c:1646 */ +#line 4257 "util/configparser.c" /* yacc.c:1646 */ break; - case 373: -#line 1521 "./util/configparser.y" /* yacc.c:1646 */ + case 379: +#line 1562 "./util/configparser.y" /* yacc.c:1646 */ { 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 4209 "util/configparser.c" /* yacc.c:1646 */ +#line 4267 "util/configparser.c" /* yacc.c:1646 */ break; - case 374: -#line 1528 "./util/configparser.y" /* yacc.c:1646 */ + case 380: +#line 1569 "./util/configparser.y" /* yacc.c:1646 */ { 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) @@ -4218,11 +4276,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4222 "util/configparser.c" /* yacc.c:1646 */ +#line 4280 "util/configparser.c" /* yacc.c:1646 */ break; - case 375: -#line 1538 "./util/configparser.y" /* yacc.c:1646 */ + case 381: +#line 1579 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_access_control:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "deny")!=0 && strcmp((yyvsp[0].str), "refuse")!=0 && @@ -4241,21 +4299,21 @@ yyreduce: fatal_exit("out of memory adding acl"); } } -#line 4245 "util/configparser.c" /* yacc.c:1646 */ +#line 4303 "util/configparser.c" /* yacc.c:1646 */ break; - case 376: -#line 1558 "./util/configparser.y" /* yacc.c:1646 */ + case 382: +#line 1599 "./util/configparser.y" /* yacc.c:1646 */ { 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 4255 "util/configparser.c" /* yacc.c:1646 */ +#line 4313 "util/configparser.c" /* yacc.c:1646 */ break; - case 377: -#line 1565 "./util/configparser.y" /* yacc.c:1646 */ + case 383: +#line 1606 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_override_date:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { @@ -4272,11 +4330,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4276 "util/configparser.c" /* yacc.c:1646 */ +#line 4334 "util/configparser.c" /* yacc.c:1646 */ break; - case 378: -#line 1583 "./util/configparser.y" /* yacc.c:1646 */ + case 384: +#line 1624 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_sig_skew_min:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { @@ -4288,11 +4346,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4292 "util/configparser.c" /* yacc.c:1646 */ +#line 4350 "util/configparser.c" /* yacc.c:1646 */ break; - case 379: -#line 1596 "./util/configparser.y" /* yacc.c:1646 */ + case 385: +#line 1637 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_sig_skew_max:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { @@ -4304,11 +4362,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4308 "util/configparser.c" /* yacc.c:1646 */ +#line 4366 "util/configparser.c" /* yacc.c:1646 */ break; - case 380: -#line 1609 "./util/configparser.y" /* yacc.c:1646 */ + case 386: +#line 1650 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_cache_max_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4316,11 +4374,11 @@ yyreduce: else cfg_parser->cfg->max_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4320 "util/configparser.c" /* yacc.c:1646 */ +#line 4378 "util/configparser.c" /* yacc.c:1646 */ break; - case 381: -#line 1618 "./util/configparser.y" /* yacc.c:1646 */ + case 387: +#line 1659 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_cache_max_negative_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4328,11 +4386,11 @@ yyreduce: else cfg_parser->cfg->max_negative_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4332 "util/configparser.c" /* yacc.c:1646 */ +#line 4390 "util/configparser.c" /* yacc.c:1646 */ break; - case 382: -#line 1627 "./util/configparser.y" /* yacc.c:1646 */ + case 388: +#line 1668 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_cache_min_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4340,11 +4398,11 @@ yyreduce: else cfg_parser->cfg->min_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4344 "util/configparser.c" /* yacc.c:1646 */ +#line 4402 "util/configparser.c" /* yacc.c:1646 */ break; - case 383: -#line 1636 "./util/configparser.y" /* yacc.c:1646 */ + case 389: +#line 1677 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_bogus_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4352,11 +4410,11 @@ yyreduce: else cfg_parser->cfg->bogus_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4356 "util/configparser.c" /* yacc.c:1646 */ +#line 4414 "util/configparser.c" /* yacc.c:1646 */ break; - case 384: -#line 1645 "./util/configparser.y" /* yacc.c:1646 */ + case 390: +#line 1686 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_clean_additional:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4365,11 +4423,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4369 "util/configparser.c" /* yacc.c:1646 */ +#line 4427 "util/configparser.c" /* yacc.c:1646 */ break; - case 385: -#line 1655 "./util/configparser.y" /* yacc.c:1646 */ + case 391: +#line 1696 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_permissive_mode:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4378,11 +4436,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4382 "util/configparser.c" /* yacc.c:1646 */ +#line 4440 "util/configparser.c" /* yacc.c:1646 */ break; - case 386: -#line 1665 "./util/configparser.y" /* yacc.c:1646 */ + case 392: +#line 1706 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_aggressive_nsec:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4392,11 +4450,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4396 "util/configparser.c" /* yacc.c:1646 */ +#line 4454 "util/configparser.c" /* yacc.c:1646 */ break; - case 387: -#line 1676 "./util/configparser.y" /* yacc.c:1646 */ + case 393: +#line 1717 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ignore_cd_flag:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4404,11 +4462,11 @@ yyreduce: else cfg_parser->cfg->ignore_cd = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4408 "util/configparser.c" /* yacc.c:1646 */ +#line 4466 "util/configparser.c" /* yacc.c:1646 */ break; - case 388: -#line 1685 "./util/configparser.y" /* yacc.c:1646 */ + case 394: +#line 1726 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_serve_expired:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4416,11 +4474,11 @@ yyreduce: else cfg_parser->cfg->serve_expired = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4420 "util/configparser.c" /* yacc.c:1646 */ +#line 4478 "util/configparser.c" /* yacc.c:1646 */ break; - case 389: -#line 1694 "./util/configparser.y" /* yacc.c:1646 */ + case 395: +#line 1735 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_serve_expired_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4428,11 +4486,11 @@ yyreduce: else cfg_parser->cfg->serve_expired_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4432 "util/configparser.c" /* yacc.c:1646 */ +#line 4490 "util/configparser.c" /* yacc.c:1646 */ break; - case 390: -#line 1703 "./util/configparser.y" /* yacc.c:1646 */ + case 396: +#line 1744 "./util/configparser.y" /* yacc.c:1646 */ { 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) @@ -4440,11 +4498,11 @@ yyreduce: else cfg_parser->cfg->serve_expired_ttl_reset = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4444 "util/configparser.c" /* yacc.c:1646 */ +#line 4502 "util/configparser.c" /* yacc.c:1646 */ break; - case 391: -#line 1712 "./util/configparser.y" /* yacc.c:1646 */ + case 397: +#line 1753 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_fake_dsa:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4456,11 +4514,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 4460 "util/configparser.c" /* yacc.c:1646 */ +#line 4518 "util/configparser.c" /* yacc.c:1646 */ break; - case 392: -#line 1725 "./util/configparser.y" /* yacc.c:1646 */ + case 398: +#line 1766 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_fake_sha1:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4472,11 +4530,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 4476 "util/configparser.c" /* yacc.c:1646 */ +#line 4534 "util/configparser.c" /* yacc.c:1646 */ break; - case 393: -#line 1738 "./util/configparser.y" /* yacc.c:1646 */ + case 399: +#line 1779 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_log_level:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4484,21 +4542,21 @@ yyreduce: else cfg_parser->cfg->val_log_level = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4488 "util/configparser.c" /* yacc.c:1646 */ +#line 4546 "util/configparser.c" /* yacc.c:1646 */ break; - case 394: -#line 1747 "./util/configparser.y" /* yacc.c:1646 */ + case 400: +#line 1788 "./util/configparser.y" /* yacc.c:1646 */ { 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 4498 "util/configparser.c" /* yacc.c:1646 */ +#line 4556 "util/configparser.c" /* yacc.c:1646 */ break; - case 395: -#line 1754 "./util/configparser.y" /* yacc.c:1646 */ + case 401: +#line 1795 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_add_holddown:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4506,11 +4564,11 @@ yyreduce: else cfg_parser->cfg->add_holddown = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4510 "util/configparser.c" /* yacc.c:1646 */ +#line 4568 "util/configparser.c" /* yacc.c:1646 */ break; - case 396: -#line 1763 "./util/configparser.y" /* yacc.c:1646 */ + case 402: +#line 1804 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_del_holddown:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4518,11 +4576,11 @@ yyreduce: else cfg_parser->cfg->del_holddown = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4522 "util/configparser.c" /* yacc.c:1646 */ +#line 4580 "util/configparser.c" /* yacc.c:1646 */ break; - case 397: -#line 1772 "./util/configparser.y" /* yacc.c:1646 */ + case 403: +#line 1813 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_keep_missing:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4530,11 +4588,11 @@ yyreduce: else cfg_parser->cfg->keep_missing = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4534 "util/configparser.c" /* yacc.c:1646 */ +#line 4592 "util/configparser.c" /* yacc.c:1646 */ break; - case 398: -#line 1781 "./util/configparser.y" /* yacc.c:1646 */ + case 404: +#line 1822 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_permit_small_holddown:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4543,22 +4601,22 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4547 "util/configparser.c" /* yacc.c:1646 */ +#line 4605 "util/configparser.c" /* yacc.c:1646 */ break; - case 399: -#line 1790 "./util/configparser.y" /* yacc.c:1646 */ + case 405: +#line 1831 "./util/configparser.y" /* yacc.c:1646 */ { 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 4558 "util/configparser.c" /* yacc.c:1646 */ +#line 4616 "util/configparser.c" /* yacc.c:1646 */ break; - case 400: -#line 1798 "./util/configparser.y" /* yacc.c:1646 */ + case 406: +#line 1839 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_key_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4570,22 +4628,22 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4574 "util/configparser.c" /* yacc.c:1646 */ +#line 4632 "util/configparser.c" /* yacc.c:1646 */ break; - case 401: -#line 1811 "./util/configparser.y" /* yacc.c:1646 */ + case 407: +#line 1852 "./util/configparser.y" /* yacc.c:1646 */ { 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 4585 "util/configparser.c" /* yacc.c:1646 */ +#line 4643 "util/configparser.c" /* yacc.c:1646 */ break; - case 402: -#line 1819 "./util/configparser.y" /* yacc.c:1646 */ + case 408: +#line 1860 "./util/configparser.y" /* yacc.c:1646 */ { 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 && @@ -4617,21 +4675,21 @@ yyreduce: fatal_exit("out of memory adding local-zone"); } } -#line 4621 "util/configparser.c" /* yacc.c:1646 */ +#line 4679 "util/configparser.c" /* yacc.c:1646 */ break; - case 403: -#line 1852 "./util/configparser.y" /* yacc.c:1646 */ + case 409: +#line 1893 "./util/configparser.y" /* yacc.c:1646 */ { 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 4631 "util/configparser.c" /* yacc.c:1646 */ +#line 4689 "util/configparser.c" /* yacc.c:1646 */ break; - case 404: -#line 1859 "./util/configparser.y" /* yacc.c:1646 */ + case 410: +#line 1900 "./util/configparser.y" /* yacc.c:1646 */ { char* ptr; OUTYY(("P(server_local_data_ptr:%s)\n", (yyvsp[0].str))); @@ -4645,11 +4703,11 @@ yyreduce: yyerror("local-data-ptr could not be reversed"); } } -#line 4649 "util/configparser.c" /* yacc.c:1646 */ +#line 4707 "util/configparser.c" /* yacc.c:1646 */ break; - case 405: -#line 1874 "./util/configparser.y" /* yacc.c:1646 */ + case 411: +#line 1915 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_minimal_responses:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4658,11 +4716,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4662 "util/configparser.c" /* yacc.c:1646 */ +#line 4720 "util/configparser.c" /* yacc.c:1646 */ break; - case 406: -#line 1884 "./util/configparser.y" /* yacc.c:1646 */ + case 412: +#line 1925 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_rrset_roundrobin:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4671,41 +4729,41 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4675 "util/configparser.c" /* yacc.c:1646 */ +#line 4733 "util/configparser.c" /* yacc.c:1646 */ break; - case 407: -#line 1894 "./util/configparser.y" /* yacc.c:1646 */ + case 413: +#line 1935 "./util/configparser.y" /* yacc.c:1646 */ { 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 4685 "util/configparser.c" /* yacc.c:1646 */ +#line 4743 "util/configparser.c" /* yacc.c:1646 */ break; - case 408: -#line 1901 "./util/configparser.y" /* yacc.c:1646 */ + case 414: +#line 1942 "./util/configparser.y" /* yacc.c:1646 */ { 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 4695 "util/configparser.c" /* yacc.c:1646 */ +#line 4753 "util/configparser.c" /* yacc.c:1646 */ break; - case 409: -#line 1908 "./util/configparser.y" /* yacc.c:1646 */ + case 415: +#line 1949 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dns64_prefix:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dns64_prefix); cfg_parser->cfg->dns64_prefix = (yyvsp[0].str); } -#line 4705 "util/configparser.c" /* yacc.c:1646 */ +#line 4763 "util/configparser.c" /* yacc.c:1646 */ break; - case 410: -#line 1915 "./util/configparser.y" /* yacc.c:1646 */ + case 416: +#line 1956 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_dns64_synthall:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4713,22 +4771,22 @@ yyreduce: else cfg_parser->cfg->dns64_synthall = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4717 "util/configparser.c" /* yacc.c:1646 */ +#line 4775 "util/configparser.c" /* yacc.c:1646 */ break; - case 411: -#line 1924 "./util/configparser.y" /* yacc.c:1646 */ + case 417: +#line 1965 "./util/configparser.y" /* yacc.c:1646 */ { 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 4728 "util/configparser.c" /* yacc.c:1646 */ +#line 4786 "util/configparser.c" /* yacc.c:1646 */ break; - case 412: -#line 1932 "./util/configparser.y" /* yacc.c:1646 */ + case 418: +#line 1973 "./util/configparser.y" /* yacc.c:1646 */ { char* p, *s = (yyvsp[0].str); OUTYY(("P(server_define_tag:%s)\n", (yyvsp[0].str))); @@ -4741,11 +4799,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4745 "util/configparser.c" /* yacc.c:1646 */ +#line 4803 "util/configparser.c" /* yacc.c:1646 */ break; - case 413: -#line 1946 "./util/configparser.y" /* yacc.c:1646 */ + case 419: +#line 1987 "./util/configparser.y" /* yacc.c:1646 */ { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -4765,11 +4823,11 @@ yyreduce: } } } -#line 4769 "util/configparser.c" /* yacc.c:1646 */ +#line 4827 "util/configparser.c" /* yacc.c:1646 */ break; - case 414: -#line 1967 "./util/configparser.y" /* yacc.c:1646 */ + case 420: +#line 2008 "./util/configparser.y" /* yacc.c:1646 */ { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -4789,11 +4847,11 @@ yyreduce: } } } -#line 4793 "util/configparser.c" /* yacc.c:1646 */ +#line 4851 "util/configparser.c" /* yacc.c:1646 */ break; - case 415: -#line 1988 "./util/configparser.y" /* yacc.c:1646 */ + case 421: +#line 2029 "./util/configparser.y" /* yacc.c:1646 */ { 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, @@ -4804,11 +4862,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 4808 "util/configparser.c" /* yacc.c:1646 */ +#line 4866 "util/configparser.c" /* yacc.c:1646 */ break; - case 416: -#line 2000 "./util/configparser.y" /* yacc.c:1646 */ + case 422: +#line 2041 "./util/configparser.y" /* yacc.c:1646 */ { 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, @@ -4819,11 +4877,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 4823 "util/configparser.c" /* yacc.c:1646 */ +#line 4881 "util/configparser.c" /* yacc.c:1646 */ break; - case 417: -#line 2012 "./util/configparser.y" /* yacc.c:1646 */ + case 423: +#line 2053 "./util/configparser.y" /* yacc.c:1646 */ { 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, @@ -4834,11 +4892,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 4838 "util/configparser.c" /* yacc.c:1646 */ +#line 4896 "util/configparser.c" /* yacc.c:1646 */ break; - case 418: -#line 2024 "./util/configparser.y" /* yacc.c:1646 */ + case 424: +#line 2065 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_access_control_view:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str2list_insert(&cfg_parser->cfg->acl_view, @@ -4846,11 +4904,11 @@ yyreduce: yyerror("out of memory"); } } -#line 4850 "util/configparser.c" /* yacc.c:1646 */ +#line 4908 "util/configparser.c" /* yacc.c:1646 */ break; - case 419: -#line 2033 "./util/configparser.y" /* yacc.c:1646 */ + case 425: +#line 2074 "./util/configparser.y" /* yacc.c:1646 */ { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -4870,11 +4928,11 @@ yyreduce: } } } -#line 4874 "util/configparser.c" /* yacc.c:1646 */ +#line 4932 "util/configparser.c" /* yacc.c:1646 */ break; - case 420: -#line 2054 "./util/configparser.y" /* yacc.c:1646 */ + case 426: +#line 2095 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_ratelimit:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4882,11 +4940,11 @@ yyreduce: else cfg_parser->cfg->ip_ratelimit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4886 "util/configparser.c" /* yacc.c:1646 */ +#line 4944 "util/configparser.c" /* yacc.c:1646 */ break; - case 421: -#line 2064 "./util/configparser.y" /* yacc.c:1646 */ + case 427: +#line 2105 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ratelimit:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4894,33 +4952,33 @@ yyreduce: else cfg_parser->cfg->ratelimit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4898 "util/configparser.c" /* yacc.c:1646 */ +#line 4956 "util/configparser.c" /* yacc.c:1646 */ break; - case 422: -#line 2073 "./util/configparser.y" /* yacc.c:1646 */ + case 428: +#line 2114 "./util/configparser.y" /* yacc.c:1646 */ { 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 4909 "util/configparser.c" /* yacc.c:1646 */ +#line 4967 "util/configparser.c" /* yacc.c:1646 */ break; - case 423: -#line 2081 "./util/configparser.y" /* yacc.c:1646 */ + case 429: +#line 2122 "./util/configparser.y" /* yacc.c:1646 */ { 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 4920 "util/configparser.c" /* yacc.c:1646 */ +#line 4978 "util/configparser.c" /* yacc.c:1646 */ break; - case 424: -#line 2089 "./util/configparser.y" /* yacc.c:1646 */ + case 430: +#line 2130 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_ratelimit_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4932,11 +4990,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4936 "util/configparser.c" /* yacc.c:1646 */ +#line 4994 "util/configparser.c" /* yacc.c:1646 */ break; - case 425: -#line 2102 "./util/configparser.y" /* yacc.c:1646 */ + case 431: +#line 2143 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ratelimit_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4948,11 +5006,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4952 "util/configparser.c" /* yacc.c:1646 */ +#line 5010 "util/configparser.c" /* yacc.c:1646 */ break; - case 426: -#line 2115 "./util/configparser.y" /* yacc.c:1646 */ + case 432: +#line 2156 "./util/configparser.y" /* yacc.c:1646 */ { 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) { @@ -4966,11 +5024,11 @@ yyreduce: "ratelimit-for-domain"); } } -#line 4970 "util/configparser.c" /* yacc.c:1646 */ +#line 5028 "util/configparser.c" /* yacc.c:1646 */ break; - case 427: -#line 2130 "./util/configparser.y" /* yacc.c:1646 */ + case 433: +#line 2171 "./util/configparser.y" /* yacc.c:1646 */ { 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) { @@ -4984,11 +5042,11 @@ yyreduce: "ratelimit-below-domain"); } } -#line 4988 "util/configparser.c" /* yacc.c:1646 */ +#line 5046 "util/configparser.c" /* yacc.c:1646 */ break; - case 428: -#line 2145 "./util/configparser.y" /* yacc.c:1646 */ + case 434: +#line 2186 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_ratelimit_factor:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4996,11 +5054,11 @@ yyreduce: else cfg_parser->cfg->ip_ratelimit_factor = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5000 "util/configparser.c" /* yacc.c:1646 */ +#line 5058 "util/configparser.c" /* yacc.c:1646 */ break; - case 429: -#line 2154 "./util/configparser.y" /* yacc.c:1646 */ + case 435: +#line 2195 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ratelimit_factor:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5008,20 +5066,20 @@ yyreduce: else cfg_parser->cfg->ratelimit_factor = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5012 "util/configparser.c" /* yacc.c:1646 */ +#line 5070 "util/configparser.c" /* yacc.c:1646 */ break; - case 430: -#line 2163 "./util/configparser.y" /* yacc.c:1646 */ + case 436: +#line 2204 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(low-rtt option is deprecated, use fast-server-num instead)\n")); free((yyvsp[0].str)); } -#line 5021 "util/configparser.c" /* yacc.c:1646 */ +#line 5079 "util/configparser.c" /* yacc.c:1646 */ break; - case 431: -#line 2169 "./util/configparser.y" /* yacc.c:1646 */ + case 437: +#line 2210 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_fast_server_num:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) <= 0) @@ -5029,11 +5087,11 @@ yyreduce: else cfg_parser->cfg->fast_server_num = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5033 "util/configparser.c" /* yacc.c:1646 */ +#line 5091 "util/configparser.c" /* yacc.c:1646 */ break; - case 432: -#line 2178 "./util/configparser.y" /* yacc.c:1646 */ + case 438: +#line 2219 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_fast_server_permil:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5041,11 +5099,11 @@ yyreduce: else cfg_parser->cfg->fast_server_permil = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5045 "util/configparser.c" /* yacc.c:1646 */ +#line 5103 "util/configparser.c" /* yacc.c:1646 */ break; - case 433: -#line 2187 "./util/configparser.y" /* yacc.c:1646 */ + case 439: +#line 2228 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_qname_minimisation:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5054,11 +5112,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5058 "util/configparser.c" /* yacc.c:1646 */ +#line 5116 "util/configparser.c" /* yacc.c:1646 */ break; - case 434: -#line 2197 "./util/configparser.y" /* yacc.c:1646 */ + case 440: +#line 2238 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_qname_minimisation_strict:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5067,11 +5125,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5071 "util/configparser.c" /* yacc.c:1646 */ +#line 5129 "util/configparser.c" /* yacc.c:1646 */ break; - case 435: -#line 2207 "./util/configparser.y" /* yacc.c:1646 */ + case 441: +#line 2248 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_enabled:%s)\n", (yyvsp[0].str))); @@ -5083,11 +5141,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 5087 "util/configparser.c" /* yacc.c:1646 */ +#line 5145 "util/configparser.c" /* yacc.c:1646 */ break; - case 436: -#line 2220 "./util/configparser.y" /* yacc.c:1646 */ + case 442: +#line 2261 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_ignore_bogus:%s)\n", (yyvsp[0].str))); @@ -5099,11 +5157,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 5103 "util/configparser.c" /* yacc.c:1646 */ +#line 5161 "util/configparser.c" /* yacc.c:1646 */ break; - case 437: -#line 2233 "./util/configparser.y" /* yacc.c:1646 */ + case 443: +#line 2274 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_hook:%s)\n", (yyvsp[0].str))); @@ -5114,11 +5172,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5118 "util/configparser.c" /* yacc.c:1646 */ +#line 5176 "util/configparser.c" /* yacc.c:1646 */ break; - case 438: -#line 2245 "./util/configparser.y" /* yacc.c:1646 */ + case 444: +#line 2286 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_max_ttl:%s)\n", (yyvsp[0].str))); @@ -5131,11 +5189,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5135 "util/configparser.c" /* yacc.c:1646 */ +#line 5193 "util/configparser.c" /* yacc.c:1646 */ break; - case 439: -#line 2259 "./util/configparser.y" /* yacc.c:1646 */ + case 445: +#line 2300 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_whitelist:%s)\n", (yyvsp[0].str))); @@ -5146,11 +5204,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5150 "util/configparser.c" /* yacc.c:1646 */ +#line 5208 "util/configparser.c" /* yacc.c:1646 */ break; - case 440: -#line 2271 "./util/configparser.y" /* yacc.c:1646 */ + case 446: +#line 2312 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_strict:%s)\n", (yyvsp[0].str))); @@ -5163,11 +5221,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5167 "util/configparser.c" /* yacc.c:1646 */ +#line 5225 "util/configparser.c" /* yacc.c:1646 */ break; - case 441: -#line 2285 "./util/configparser.y" /* yacc.c:1646 */ + case 447: +#line 2326 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->stubs->name) @@ -5176,31 +5234,31 @@ yyreduce: free(cfg_parser->cfg->stubs->name); cfg_parser->cfg->stubs->name = (yyvsp[0].str); } -#line 5180 "util/configparser.c" /* yacc.c:1646 */ +#line 5238 "util/configparser.c" /* yacc.c:1646 */ break; - case 442: -#line 2295 "./util/configparser.y" /* yacc.c:1646 */ + case 448: +#line 2336 "./util/configparser.y" /* yacc.c:1646 */ { 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 5190 "util/configparser.c" /* yacc.c:1646 */ +#line 5248 "util/configparser.c" /* yacc.c:1646 */ break; - case 443: -#line 2302 "./util/configparser.y" /* yacc.c:1646 */ + case 449: +#line 2343 "./util/configparser.y" /* yacc.c:1646 */ { 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 5200 "util/configparser.c" /* yacc.c:1646 */ +#line 5258 "util/configparser.c" /* yacc.c:1646 */ break; - case 444: -#line 2309 "./util/configparser.y" /* yacc.c:1646 */ + case 450: +#line 2350 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(stub-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5208,11 +5266,11 @@ yyreduce: else cfg_parser->cfg->stubs->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5212 "util/configparser.c" /* yacc.c:1646 */ +#line 5270 "util/configparser.c" /* yacc.c:1646 */ break; - case 445: -#line 2318 "./util/configparser.y" /* yacc.c:1646 */ + case 451: +#line 2359 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(stub-no-cache:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5220,11 +5278,11 @@ yyreduce: else cfg_parser->cfg->stubs->no_cache=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5224 "util/configparser.c" /* yacc.c:1646 */ +#line 5282 "util/configparser.c" /* yacc.c:1646 */ break; - case 446: -#line 2327 "./util/configparser.y" /* yacc.c:1646 */ + case 452: +#line 2368 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(stub-ssl-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5233,11 +5291,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5237 "util/configparser.c" /* yacc.c:1646 */ +#line 5295 "util/configparser.c" /* yacc.c:1646 */ break; - case 447: -#line 2337 "./util/configparser.y" /* yacc.c:1646 */ + case 453: +#line 2378 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(stub-prime:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5246,11 +5304,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5250 "util/configparser.c" /* yacc.c:1646 */ +#line 5308 "util/configparser.c" /* yacc.c:1646 */ break; - case 448: -#line 2347 "./util/configparser.y" /* yacc.c:1646 */ + case 454: +#line 2388 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->forwards->name) @@ -5259,31 +5317,31 @@ yyreduce: free(cfg_parser->cfg->forwards->name); cfg_parser->cfg->forwards->name = (yyvsp[0].str); } -#line 5263 "util/configparser.c" /* yacc.c:1646 */ +#line 5321 "util/configparser.c" /* yacc.c:1646 */ break; - case 449: -#line 2357 "./util/configparser.y" /* yacc.c:1646 */ + case 455: +#line 2398 "./util/configparser.y" /* yacc.c:1646 */ { 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 5273 "util/configparser.c" /* yacc.c:1646 */ +#line 5331 "util/configparser.c" /* yacc.c:1646 */ break; - case 450: -#line 2364 "./util/configparser.y" /* yacc.c:1646 */ + case 456: +#line 2405 "./util/configparser.y" /* yacc.c:1646 */ { 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 5283 "util/configparser.c" /* yacc.c:1646 */ +#line 5341 "util/configparser.c" /* yacc.c:1646 */ break; - case 451: -#line 2371 "./util/configparser.y" /* yacc.c:1646 */ + case 457: +#line 2412 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(forward-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5291,11 +5349,11 @@ yyreduce: else cfg_parser->cfg->forwards->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5295 "util/configparser.c" /* yacc.c:1646 */ +#line 5353 "util/configparser.c" /* yacc.c:1646 */ break; - case 452: -#line 2380 "./util/configparser.y" /* yacc.c:1646 */ + case 458: +#line 2421 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(forward-no-cache:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5303,11 +5361,11 @@ yyreduce: else cfg_parser->cfg->forwards->no_cache=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5307 "util/configparser.c" /* yacc.c:1646 */ +#line 5365 "util/configparser.c" /* yacc.c:1646 */ break; - case 453: -#line 2389 "./util/configparser.y" /* yacc.c:1646 */ + case 459: +#line 2430 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(forward-ssl-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5316,11 +5374,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5320 "util/configparser.c" /* yacc.c:1646 */ +#line 5378 "util/configparser.c" /* yacc.c:1646 */ break; - case 454: -#line 2399 "./util/configparser.y" /* yacc.c:1646 */ + case 460: +#line 2440 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->auths->name) @@ -5329,52 +5387,52 @@ yyreduce: free(cfg_parser->cfg->auths->name); cfg_parser->cfg->auths->name = (yyvsp[0].str); } -#line 5333 "util/configparser.c" /* yacc.c:1646 */ +#line 5391 "util/configparser.c" /* yacc.c:1646 */ break; - case 455: -#line 2409 "./util/configparser.y" /* yacc.c:1646 */ + case 461: +#line 2450 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(zonefile:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->auths->zonefile); cfg_parser->cfg->auths->zonefile = (yyvsp[0].str); } -#line 5343 "util/configparser.c" /* yacc.c:1646 */ +#line 5401 "util/configparser.c" /* yacc.c:1646 */ break; - case 456: -#line 2416 "./util/configparser.y" /* yacc.c:1646 */ + case 462: +#line 2457 "./util/configparser.y" /* yacc.c:1646 */ { 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 5353 "util/configparser.c" /* yacc.c:1646 */ +#line 5411 "util/configparser.c" /* yacc.c:1646 */ break; - case 457: -#line 2423 "./util/configparser.y" /* yacc.c:1646 */ + case 463: +#line 2464 "./util/configparser.y" /* yacc.c:1646 */ { 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 5363 "util/configparser.c" /* yacc.c:1646 */ +#line 5421 "util/configparser.c" /* yacc.c:1646 */ break; - case 458: -#line 2430 "./util/configparser.y" /* yacc.c:1646 */ + case 464: +#line 2471 "./util/configparser.y" /* yacc.c:1646 */ { 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 5374 "util/configparser.c" /* yacc.c:1646 */ +#line 5432 "util/configparser.c" /* yacc.c:1646 */ break; - case 459: -#line 2438 "./util/configparser.y" /* yacc.c:1646 */ + case 465: +#line 2479 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(for-downstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5383,11 +5441,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5387 "util/configparser.c" /* yacc.c:1646 */ +#line 5445 "util/configparser.c" /* yacc.c:1646 */ break; - case 460: -#line 2448 "./util/configparser.y" /* yacc.c:1646 */ + case 466: +#line 2489 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(for-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5396,11 +5454,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5400 "util/configparser.c" /* yacc.c:1646 */ +#line 5458 "util/configparser.c" /* yacc.c:1646 */ break; - case 461: -#line 2458 "./util/configparser.y" /* yacc.c:1646 */ + case 467: +#line 2499 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(fallback-enabled:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5409,11 +5467,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5413 "util/configparser.c" /* yacc.c:1646 */ +#line 5471 "util/configparser.c" /* yacc.c:1646 */ break; - case 462: -#line 2468 "./util/configparser.y" /* yacc.c:1646 */ + case 468: +#line 2509 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->views->name) @@ -5422,11 +5480,11 @@ yyreduce: free(cfg_parser->cfg->views->name); cfg_parser->cfg->views->name = (yyvsp[0].str); } -#line 5426 "util/configparser.c" /* yacc.c:1646 */ +#line 5484 "util/configparser.c" /* yacc.c:1646 */ break; - case 463: -#line 2478 "./util/configparser.y" /* yacc.c:1646 */ + case 469: +#line 2519 "./util/configparser.y" /* yacc.c:1646 */ { 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 && @@ -5457,11 +5515,11 @@ yyreduce: fatal_exit("out of memory adding local-zone"); } } -#line 5461 "util/configparser.c" /* yacc.c:1646 */ +#line 5519 "util/configparser.c" /* yacc.c:1646 */ break; - case 464: -#line 2510 "./util/configparser.y" /* yacc.c:1646 */ + case 470: +#line 2551 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(view_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); validate_respip_action((yyvsp[0].str)); @@ -5470,33 +5528,33 @@ yyreduce: fatal_exit("out of memory adding per-view " "response-ip action"); } -#line 5474 "util/configparser.c" /* yacc.c:1646 */ +#line 5532 "util/configparser.c" /* yacc.c:1646 */ break; - case 465: -#line 2520 "./util/configparser.y" /* yacc.c:1646 */ + case 471: +#line 2561 "./util/configparser.y" /* yacc.c:1646 */ { 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 5485 "util/configparser.c" /* yacc.c:1646 */ +#line 5543 "util/configparser.c" /* yacc.c:1646 */ break; - case 466: -#line 2528 "./util/configparser.y" /* yacc.c:1646 */ + case 472: +#line 2569 "./util/configparser.y" /* yacc.c:1646 */ { 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 5496 "util/configparser.c" /* yacc.c:1646 */ +#line 5554 "util/configparser.c" /* yacc.c:1646 */ break; - case 467: -#line 2536 "./util/configparser.y" /* yacc.c:1646 */ + case 473: +#line 2577 "./util/configparser.y" /* yacc.c:1646 */ { char* ptr; OUTYY(("P(view_local_data_ptr:%s)\n", (yyvsp[0].str))); @@ -5510,11 +5568,11 @@ yyreduce: yyerror("local-data-ptr could not be reversed"); } } -#line 5514 "util/configparser.c" /* yacc.c:1646 */ +#line 5572 "util/configparser.c" /* yacc.c:1646 */ break; - case 468: -#line 2551 "./util/configparser.y" /* yacc.c:1646 */ + case 474: +#line 2592 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(view-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5522,19 +5580,19 @@ yyreduce: else cfg_parser->cfg->views->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5526 "util/configparser.c" /* yacc.c:1646 */ +#line 5584 "util/configparser.c" /* yacc.c:1646 */ break; - case 469: -#line 2560 "./util/configparser.y" /* yacc.c:1646 */ + case 475: +#line 2601 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(remote-control:)\n")); } -#line 5534 "util/configparser.c" /* yacc.c:1646 */ +#line 5592 "util/configparser.c" /* yacc.c:1646 */ break; - case 480: -#line 2571 "./util/configparser.y" /* yacc.c:1646 */ + case 486: +#line 2612 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(control_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5543,11 +5601,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5547 "util/configparser.c" /* yacc.c:1646 */ +#line 5605 "util/configparser.c" /* yacc.c:1646 */ break; - case 481: -#line 2581 "./util/configparser.y" /* yacc.c:1646 */ + case 487: +#line 2622 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(control_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5555,79 +5613,79 @@ yyreduce: else cfg_parser->cfg->control_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5559 "util/configparser.c" /* yacc.c:1646 */ +#line 5617 "util/configparser.c" /* yacc.c:1646 */ break; - case 482: -#line 2590 "./util/configparser.y" /* yacc.c:1646 */ + case 488: +#line 2631 "./util/configparser.y" /* yacc.c:1646 */ { 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 5569 "util/configparser.c" /* yacc.c:1646 */ +#line 5627 "util/configparser.c" /* yacc.c:1646 */ break; - case 483: -#line 2597 "./util/configparser.y" /* yacc.c:1646 */ + case 489: +#line 2638 "./util/configparser.y" /* yacc.c:1646 */ { 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 5579 "util/configparser.c" /* yacc.c:1646 */ +#line 5637 "util/configparser.c" /* yacc.c:1646 */ break; - case 484: -#line 2604 "./util/configparser.y" /* yacc.c:1646 */ + case 490: +#line 2645 "./util/configparser.y" /* yacc.c:1646 */ { 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 5589 "util/configparser.c" /* yacc.c:1646 */ +#line 5647 "util/configparser.c" /* yacc.c:1646 */ break; - case 485: -#line 2611 "./util/configparser.y" /* yacc.c:1646 */ + case 491: +#line 2652 "./util/configparser.y" /* yacc.c:1646 */ { 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 5599 "util/configparser.c" /* yacc.c:1646 */ +#line 5657 "util/configparser.c" /* yacc.c:1646 */ break; - case 486: -#line 2618 "./util/configparser.y" /* yacc.c:1646 */ + case 492: +#line 2659 "./util/configparser.y" /* yacc.c:1646 */ { 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 5609 "util/configparser.c" /* yacc.c:1646 */ +#line 5667 "util/configparser.c" /* yacc.c:1646 */ break; - case 487: -#line 2625 "./util/configparser.y" /* yacc.c:1646 */ + case 493: +#line 2666 "./util/configparser.y" /* yacc.c:1646 */ { 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 5619 "util/configparser.c" /* yacc.c:1646 */ +#line 5677 "util/configparser.c" /* yacc.c:1646 */ break; - case 488: -#line 2632 "./util/configparser.y" /* yacc.c:1646 */ + case 494: +#line 2673 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(dnstap:)\n")); } -#line 5627 "util/configparser.c" /* yacc.c:1646 */ +#line 5685 "util/configparser.c" /* yacc.c:1646 */ break; - case 503: -#line 2649 "./util/configparser.y" /* yacc.c:1646 */ + case 509: +#line 2690 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5635,21 +5693,21 @@ yyreduce: else cfg_parser->cfg->dnstap = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5639 "util/configparser.c" /* yacc.c:1646 */ +#line 5697 "util/configparser.c" /* yacc.c:1646 */ break; - case 504: -#line 2658 "./util/configparser.y" /* yacc.c:1646 */ + case 510: +#line 2699 "./util/configparser.y" /* yacc.c:1646 */ { 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 5649 "util/configparser.c" /* yacc.c:1646 */ +#line 5707 "util/configparser.c" /* yacc.c:1646 */ break; - case 505: -#line 2665 "./util/configparser.y" /* yacc.c:1646 */ + case 511: +#line 2706 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_send_identity:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5657,11 +5715,11 @@ yyreduce: else cfg_parser->cfg->dnstap_send_identity = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5661 "util/configparser.c" /* yacc.c:1646 */ +#line 5719 "util/configparser.c" /* yacc.c:1646 */ break; - case 506: -#line 2674 "./util/configparser.y" /* yacc.c:1646 */ + case 512: +#line 2715 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_send_version:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5669,31 +5727,31 @@ yyreduce: else cfg_parser->cfg->dnstap_send_version = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5673 "util/configparser.c" /* yacc.c:1646 */ +#line 5731 "util/configparser.c" /* yacc.c:1646 */ break; - case 507: -#line 2683 "./util/configparser.y" /* yacc.c:1646 */ + case 513: +#line 2724 "./util/configparser.y" /* yacc.c:1646 */ { 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 5683 "util/configparser.c" /* yacc.c:1646 */ +#line 5741 "util/configparser.c" /* yacc.c:1646 */ break; - case 508: -#line 2690 "./util/configparser.y" /* yacc.c:1646 */ + case 514: +#line 2731 "./util/configparser.y" /* yacc.c:1646 */ { 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 5693 "util/configparser.c" /* yacc.c:1646 */ +#line 5751 "util/configparser.c" /* yacc.c:1646 */ break; - case 509: -#line 2697 "./util/configparser.y" /* yacc.c:1646 */ + case 515: +#line 2738 "./util/configparser.y" /* yacc.c:1646 */ { 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) @@ -5702,11 +5760,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5706 "util/configparser.c" /* yacc.c:1646 */ +#line 5764 "util/configparser.c" /* yacc.c:1646 */ break; - case 510: -#line 2707 "./util/configparser.y" /* yacc.c:1646 */ + case 516: +#line 2748 "./util/configparser.y" /* yacc.c:1646 */ { 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) @@ -5715,11 +5773,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5719 "util/configparser.c" /* yacc.c:1646 */ +#line 5777 "util/configparser.c" /* yacc.c:1646 */ break; - case 511: -#line 2717 "./util/configparser.y" /* yacc.c:1646 */ + case 517: +#line 2758 "./util/configparser.y" /* yacc.c:1646 */ { 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) @@ -5728,11 +5786,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5732 "util/configparser.c" /* yacc.c:1646 */ +#line 5790 "util/configparser.c" /* yacc.c:1646 */ break; - case 512: -#line 2727 "./util/configparser.y" /* yacc.c:1646 */ + case 518: +#line 2768 "./util/configparser.y" /* yacc.c:1646 */ { 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) @@ -5741,11 +5799,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5745 "util/configparser.c" /* yacc.c:1646 */ +#line 5803 "util/configparser.c" /* yacc.c:1646 */ break; - case 513: -#line 2737 "./util/configparser.y" /* yacc.c:1646 */ + case 519: +#line 2778 "./util/configparser.y" /* yacc.c:1646 */ { 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) @@ -5754,11 +5812,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5758 "util/configparser.c" /* yacc.c:1646 */ +#line 5816 "util/configparser.c" /* yacc.c:1646 */ break; - case 514: -#line 2747 "./util/configparser.y" /* yacc.c:1646 */ + case 520: +#line 2788 "./util/configparser.y" /* yacc.c:1646 */ { 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) @@ -5767,29 +5825,29 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5771 "util/configparser.c" /* yacc.c:1646 */ +#line 5829 "util/configparser.c" /* yacc.c:1646 */ break; - case 515: -#line 2757 "./util/configparser.y" /* yacc.c:1646 */ + case 521: +#line 2798 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(python:)\n")); } -#line 5779 "util/configparser.c" /* yacc.c:1646 */ +#line 5837 "util/configparser.c" /* yacc.c:1646 */ break; - case 519: -#line 2766 "./util/configparser.y" /* yacc.c:1646 */ + case 525: +#line 2807 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(python-script:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->python_script); cfg_parser->cfg->python_script = (yyvsp[0].str); } -#line 5789 "util/configparser.c" /* yacc.c:1646 */ +#line 5847 "util/configparser.c" /* yacc.c:1646 */ break; - case 520: -#line 2772 "./util/configparser.y" /* yacc.c:1646 */ + case 526: +#line 2813 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(disable_dnssec_lame_check:%s)\n", (yyvsp[0].str))); if (strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5798,21 +5856,21 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5802 "util/configparser.c" /* yacc.c:1646 */ +#line 5860 "util/configparser.c" /* yacc.c:1646 */ break; - case 521: -#line 2782 "./util/configparser.y" /* yacc.c:1646 */ + case 527: +#line 2823 "./util/configparser.y" /* yacc.c:1646 */ { 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 5812 "util/configparser.c" /* yacc.c:1646 */ +#line 5870 "util/configparser.c" /* yacc.c:1646 */ break; - case 522: -#line 2789 "./util/configparser.y" /* yacc.c:1646 */ + case 528: +#line 2830 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); validate_respip_action((yyvsp[0].str)); @@ -5820,30 +5878,30 @@ yyreduce: (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding response-ip"); } -#line 5824 "util/configparser.c" /* yacc.c:1646 */ +#line 5882 "util/configparser.c" /* yacc.c:1646 */ break; - case 523: -#line 2798 "./util/configparser.y" /* yacc.c:1646 */ + case 529: +#line 2839 "./util/configparser.y" /* yacc.c:1646 */ { 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 5835 "util/configparser.c" /* yacc.c:1646 */ +#line 5893 "util/configparser.c" /* yacc.c:1646 */ break; - case 524: -#line 2806 "./util/configparser.y" /* yacc.c:1646 */ + case 530: +#line 2847 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(dnscrypt:)\n")); } -#line 5843 "util/configparser.c" /* yacc.c:1646 */ +#line 5901 "util/configparser.c" /* yacc.c:1646 */ break; - case 537: -#line 2822 "./util/configparser.y" /* yacc.c:1646 */ + case 543: +#line 2863 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5851,11 +5909,11 @@ yyreduce: else cfg_parser->cfg->dnscrypt = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5855 "util/configparser.c" /* yacc.c:1646 */ +#line 5913 "util/configparser.c" /* yacc.c:1646 */ break; - case 538: -#line 2832 "./util/configparser.y" /* yacc.c:1646 */ + case 544: +#line 2873 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5863,21 +5921,21 @@ yyreduce: else cfg_parser->cfg->dnscrypt_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5867 "util/configparser.c" /* yacc.c:1646 */ +#line 5925 "util/configparser.c" /* yacc.c:1646 */ break; - case 539: -#line 2841 "./util/configparser.y" /* yacc.c:1646 */ + case 545: +#line 2882 "./util/configparser.y" /* yacc.c:1646 */ { 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 5877 "util/configparser.c" /* yacc.c:1646 */ +#line 5935 "util/configparser.c" /* yacc.c:1646 */ break; - case 540: -#line 2848 "./util/configparser.y" /* yacc.c:1646 */ + case 546: +#line 2889 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_provider_cert:%s)\n", (yyvsp[0].str))); if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str))) @@ -5885,21 +5943,21 @@ yyreduce: if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str))) fatal_exit("out of memory adding dnscrypt-provider-cert"); } -#line 5889 "util/configparser.c" /* yacc.c:1646 */ +#line 5947 "util/configparser.c" /* yacc.c:1646 */ break; - case 541: -#line 2857 "./util/configparser.y" /* yacc.c:1646 */ + case 547: +#line 2898 "./util/configparser.y" /* yacc.c:1646 */ { 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 5899 "util/configparser.c" /* yacc.c:1646 */ +#line 5957 "util/configparser.c" /* yacc.c:1646 */ break; - case 542: -#line 2864 "./util/configparser.y" /* yacc.c:1646 */ + case 548: +#line 2905 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_secret_key:%s)\n", (yyvsp[0].str))); if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str))) @@ -5907,22 +5965,22 @@ yyreduce: if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str))) fatal_exit("out of memory adding dnscrypt-secret-key"); } -#line 5911 "util/configparser.c" /* yacc.c:1646 */ +#line 5969 "util/configparser.c" /* yacc.c:1646 */ break; - case 543: -#line 2873 "./util/configparser.y" /* yacc.c:1646 */ + case 549: +#line 2914 "./util/configparser.y" /* yacc.c:1646 */ { 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 5922 "util/configparser.c" /* yacc.c:1646 */ +#line 5980 "util/configparser.c" /* yacc.c:1646 */ break; - case 544: -#line 2881 "./util/configparser.y" /* yacc.c:1646 */ + case 550: +#line 2922 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnscrypt_shared_secret_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5934,22 +5992,22 @@ yyreduce: } free((yyvsp[0].str)); } -#line 5938 "util/configparser.c" /* yacc.c:1646 */ +#line 5996 "util/configparser.c" /* yacc.c:1646 */ break; - case 545: -#line 2894 "./util/configparser.y" /* yacc.c:1646 */ + case 551: +#line 2935 "./util/configparser.y" /* yacc.c:1646 */ { 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 5949 "util/configparser.c" /* yacc.c:1646 */ +#line 6007 "util/configparser.c" /* yacc.c:1646 */ break; - case 546: -#line 2902 "./util/configparser.y" /* yacc.c:1646 */ + case 552: +#line 2943 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnscrypt_nonce_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5961,19 +6019,19 @@ yyreduce: } free((yyvsp[0].str)); } -#line 5965 "util/configparser.c" /* yacc.c:1646 */ +#line 6023 "util/configparser.c" /* yacc.c:1646 */ break; - case 547: -#line 2915 "./util/configparser.y" /* yacc.c:1646 */ + case 553: +#line 2956 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(cachedb:)\n")); } -#line 5973 "util/configparser.c" /* yacc.c:1646 */ +#line 6031 "util/configparser.c" /* yacc.c:1646 */ break; - case 555: -#line 2925 "./util/configparser.y" /* yacc.c:1646 */ + case 561: +#line 2966 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_CACHEDB OUTYY(("P(backend:%s)\n", (yyvsp[0].str))); @@ -5987,11 +6045,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5991 "util/configparser.c" /* yacc.c:1646 */ +#line 6049 "util/configparser.c" /* yacc.c:1646 */ break; - case 556: -#line 2940 "./util/configparser.y" /* yacc.c:1646 */ + case 562: +#line 2981 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_CACHEDB OUTYY(("P(secret-seed:%s)\n", (yyvsp[0].str))); @@ -6005,11 +6063,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6009 "util/configparser.c" /* yacc.c:1646 */ +#line 6067 "util/configparser.c" /* yacc.c:1646 */ break; - case 557: -#line 2955 "./util/configparser.y" /* yacc.c:1646 */ + case 563: +#line 2996 "./util/configparser.y" /* yacc.c:1646 */ { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_server_host:%s)\n", (yyvsp[0].str))); @@ -6020,11 +6078,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6024 "util/configparser.c" /* yacc.c:1646 */ +#line 6082 "util/configparser.c" /* yacc.c:1646 */ break; - case 558: -#line 2967 "./util/configparser.y" /* yacc.c:1646 */ + case 564: +#line 3008 "./util/configparser.y" /* yacc.c:1646 */ { #if defined(USE_CACHEDB) && defined(USE_REDIS) int port; @@ -6038,11 +6096,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 6042 "util/configparser.c" /* yacc.c:1646 */ +#line 6100 "util/configparser.c" /* yacc.c:1646 */ break; - case 559: -#line 2982 "./util/configparser.y" /* yacc.c:1646 */ + case 565: +#line 3023 "./util/configparser.y" /* yacc.c:1646 */ { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_timeout:%s)\n", (yyvsp[0].str))); @@ -6054,11 +6112,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 6058 "util/configparser.c" /* yacc.c:1646 */ +#line 6116 "util/configparser.c" /* yacc.c:1646 */ break; - case 560: -#line 2995 "./util/configparser.y" /* yacc.c:1646 */ + case 566: +#line 3036 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tcp_connection_limit:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if (atoi((yyvsp[0].str)) < 0) @@ -6068,11 +6126,11 @@ yyreduce: fatal_exit("out of memory adding tcp connection limit"); } } -#line 6072 "util/configparser.c" /* yacc.c:1646 */ +#line 6130 "util/configparser.c" /* yacc.c:1646 */ break; -#line 6076 "util/configparser.c" /* yacc.c:1646 */ +#line 6134 "util/configparser.c" /* yacc.c:1646 */ default: break; } /* User semantic actions sometimes alter yychar, and that requires @@ -6300,7 +6358,7 @@ yyreturn: #endif return yyresult; } -#line 3005 "./util/configparser.y" /* yacc.c:1906 */ +#line 3046 "./util/configparser.y" /* yacc.c:1906 */ /* parse helper routines could be here */ diff --git a/util/configparser.h b/util/configparser.h index 16f887acc..511a44f10 100644 --- a/util/configparser.h +++ b/util/configparser.h @@ -310,7 +310,10 @@ extern int yydebug; VAR_TLS_CIPHERSUITES = 520, VAR_TLS_SESSION_TICKET_KEYS = 521, VAR_RPZ = 522, - VAR_TAGS = 523 + VAR_TAGS = 523, + VAR_RPZ_ACTION_OVERRIDE = 524, + VAR_RPZ_CNAME_OVERRIDE = 525, + VAR_RPZ_LOG = 526 }; #endif /* Tokens. */ @@ -580,6 +583,9 @@ extern int yydebug; #define VAR_TLS_SESSION_TICKET_KEYS 521 #define VAR_RPZ 522 #define VAR_TAGS 523 +#define VAR_RPZ_ACTION_OVERRIDE 524 +#define VAR_RPZ_CNAME_OVERRIDE 525 +#define VAR_RPZ_LOG 526 /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED @@ -590,7 +596,7 @@ union YYSTYPE char* str; -#line 594 "util/configparser.h" /* yacc.c:1909 */ +#line 600 "util/configparser.h" /* yacc.c:1909 */ }; typedef union YYSTYPE YYSTYPE; diff --git a/util/configparser.y b/util/configparser.y index 0cfd77a1a..ebe1eeaa6 100644 --- a/util/configparser.y +++ b/util/configparser.y @@ -166,7 +166,8 @@ extern struct config_parser_state* cfg_parser; %token VAR_FORWARD_NO_CACHE VAR_STUB_NO_CACHE VAR_LOG_SERVFAIL VAR_DENY_ANY %token VAR_UNKNOWN_SERVER_TIME_LIMIT VAR_LOG_TAG_QUERYREPLY %token VAR_STREAM_WAIT_SIZE VAR_TLS_CIPHERS VAR_TLS_CIPHERSUITES -%token VAR_TLS_SESSION_TICKET_KEYS VAR_RPZ VAR_TAGS +%token VAR_TLS_SESSION_TICKET_KEYS VAR_RPZ VAR_TAGS VAR_RPZ_ACTION_OVERRIDE +%token VAR_RPZ_CNAME_OVERRIDE VAR_RPZ_LOG %% toplevelvars: /* empty */ | toplevelvars toplevelvar ; @@ -365,6 +366,45 @@ rpz_tag: VAR_TAGS STRING_ARG } } ; + +rpz_action_override: VAR_RPZ_ACTION_OVERRIDE STRING_ARG + { + OUTYY(("P(rpz_action_override:%s)\n", $2)); + if(strcmp($2, "nxdomain")!=0 && strcmp($2, "nodata")!=0 && + strcmp($2, "passthru")!=0 && strcmp($2, "drop")!=0 && + strcmp($2, "cname")!=0 && strcmp($2, "disabled")!=0) { + yyerror("rpz-action-override action: expected nxdomain, " + "nodata, passthru, drop cname or disabled"); + free($2); + cfg_parser->cfg->auths->rpz_action_override = NULL; + } + else { + cfg_parser->cfg->auths->rpz_action_override = $2; + } + } + ; + +rpz_cname_override: VAR_RPZ_CNAME_OVERRIDE STRING_ARG + { + OUTYY(("P(rpz_cname_override:%s)\n", $2)); + if(cfg_parser->cfg->auths->rpz_cname) + yyerror("there can only be one CNAME override per " + "RPZ"); + free(cfg_parser->cfg->auths->rpz_cname); + cfg_parser->cfg->auths->rpz_cname = $2; + } + ; + +rpz_log: VAR_RPZ_LOG STRING_ARG + { + OUTYY(("P(rpz_log:%s)\n", $2)); + if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->auths->rpz_log = (strcmp($2, "yes")==0); + free($2); + } + ; + rpzstart: VAR_RPZ { struct config_auth* s; @@ -385,7 +425,8 @@ rpzstart: VAR_RPZ contents_rpz: contents_rpz content_rpz | ; content_rpz: auth_name | auth_zonefile | rpz_tag | auth_master | auth_url | - auth_allow_notify + auth_allow_notify | rpz_action_override | rpz_cname_override | + rpz_log ; server_num_threads: VAR_NUM_THREADS STRING_ARG { From 268580f34856d803c33b653c315a7b036220704a Mon Sep 17 00:00:00 2001 From: Ralph Dolmans Date: Mon, 3 Jun 2019 15:46:39 +0200 Subject: [PATCH 10/56] Added RPZ log name and stats --- daemon/remote.c | 11 + daemon/worker.c | 2 +- libunbound/unbound.h | 4 + services/rpz.c | 65 +- services/rpz.h | 12 +- util/config_file.h | 2 + util/configlexer.c | 3794 +++++++++++++++++++++--------------------- util/configlexer.lex | 1 + util/configparser.c | 2346 +++++++++++++------------- util/configparser.h | 6 +- util/configparser.y | 15 +- 11 files changed, 3169 insertions(+), 3089 deletions(-) diff --git a/daemon/remote.c b/daemon/remote.c index 1689154f5..85300972d 100644 --- a/daemon/remote.c +++ b/daemon/remote.c @@ -69,6 +69,7 @@ #include "services/mesh.h" #include "services/localzone.h" #include "services/authzone.h" +#include "services/rpz.h" #include "util/storage/slabhash.h" #include "util/fptr_wlist.h" #include "util/data/dname.h" @@ -1045,6 +1046,16 @@ print_ext(RES* ssl, struct ub_stats_info* s) (unsigned)s->svr.infra_cache_count)) return 0; if(!ssl_printf(ssl, "key.cache.count"SQ"%u\n", (unsigned)s->svr.key_cache_count)) return 0; + /* applied RPZ actions */ + for(i=0; isvr.rpz_action[i] == RPZ_NO_OVERRIDE_ACTION) + continue; + if(inhibit_zero && s->svr.rpz_action[i] == 0) + continue; + if(!ssl_printf(ssl, "num.rpz.action.%s"SQ"%lu\n", + rpz_action_to_string(i), + (unsigned long)s->svr.rpz_action[i])) return 0; + } #ifdef USE_DNSCRYPT if(!ssl_printf(ssl, "dnscrypt_shared_secret.cache.count"SQ"%u\n", (unsigned)s->svr.shared_secret_cache_count)) return 0; diff --git a/daemon/worker.c b/daemon/worker.c index d1f6f9f84..8440dd22c 100644 --- a/daemon/worker.c +++ b/daemon/worker.c @@ -1366,7 +1366,7 @@ worker_handle_request(struct comm_point* c, void* arg, int error, if(worker->env.auth_zones && rpz_apply_qname_trigger(worker->env.auth_zones, &worker->env, &qinfo, &edns, c->buffer, worker->scratchpad, - repinfo, acladdr->taglist, acladdr->taglen)) { + repinfo, acladdr->taglist, acladdr->taglen, &worker->stats)) { regional_free_all(worker->scratchpad); if(sldns_buffer_limit(c->buffer) == 0) { comm_point_drop_reply(repinfo); diff --git a/libunbound/unbound.h b/libunbound/unbound.h index 682ba5530..491222e72 100644 --- a/libunbound/unbound.h +++ b/libunbound/unbound.h @@ -654,6 +654,8 @@ struct ub_shm_stat_info { #define UB_STATS_OPCODE_NUM 16 /** number of histogram buckets */ #define UB_STATS_BUCKET_NUM 40 +/** number of RPZ actions */ +#define UB_STATS_RPZ_ACTION_NUM 10 /** per worker statistics. */ struct ub_server_stats { @@ -785,6 +787,8 @@ struct ub_server_stats { long long mem_stream_wait; /** number of TLS connection resume */ long long qtls_resume; + /** RPZ action stats */ + long long rpz_action[UB_STATS_RPZ_ACTION_NUM]; }; /** diff --git a/services/rpz.c b/services/rpz.c index 5db7a1502..1e3d39fab 100644 --- a/services/rpz.c +++ b/services/rpz.c @@ -51,23 +51,22 @@ #include "util/locks.h" #include "util/regional.h" -/** string for RPZ action enum */ -static const char* +const char* rpz_action_to_string(enum rpz_action a) { switch(a) { - case RPZ_NXDOMAIN_ACTION: return "NXDOMAIN ACTION"; - case RPZ_NODATA_ACTION: return "NODATA ACTION"; - case RPZ_PASSTHRU_ACTION: return "PASSTHRU ACTION"; - case RPZ_DROP_ACTION: return "DROP ACTION"; - case RPZ_TCP_ONLY_ACTION: return "TCP ONLY ACTION"; - case RPZ_INVALID_ACTION: return "INVALID ACTION"; - case RPZ_LOCAL_DATA_ACTION: return "LOCAL DATA ACTION"; - case RPZ_DISABLED_ACTION: return "DISABLED ACTION"; - case RPZ_CNAME_OVERRIDE_ACTION: return "CNAME OVERRIDE ACTION"; - case RPZ_NO_OVERRIDE_ACTION: return "NO OVERRIDE ACTION"; + case RPZ_NXDOMAIN_ACTION: return "nxdomain"; + case RPZ_NODATA_ACTION: return "nodata"; + case RPZ_PASSTHRU_ACTION: return "passthru"; + case RPZ_DROP_ACTION: return "drop"; + case RPZ_TCP_ONLY_ACTION: return "tcp_only"; + case RPZ_INVALID_ACTION: return "invalid"; + case RPZ_LOCAL_DATA_ACTION: return "local_data"; + case RPZ_DISABLED_ACTION: return "disabled"; + case RPZ_CNAME_OVERRIDE_ACTION: return "cname_override"; + case RPZ_NO_OVERRIDE_ACTION: return "no_override"; } - return "UNKNOWN RPZ ACTION"; + return "unknown"; } static enum rpz_action @@ -95,13 +94,13 @@ static const char* rpz_trigger_to_string(enum rpz_trigger r) { switch(r) { - case RPZ_QNAME_TRIGGER: return "QNAME TRIGGER"; - case RPZ_CLIENT_IP_TRIGGER: return "CLIENT IP TRIGGER"; - case RPZ_RESPONSE_IP_TRIGGER: return "RESPONSE IP TRIGGER"; - case RPZ_NSDNAME_TRIGGER: return "NSDNAME TRIGGER"; - case RPZ_NSIP_TRIGGER: return "NSIP TRIGGER"; + case RPZ_QNAME_TRIGGER: return "qname"; + case RPZ_CLIENT_IP_TRIGGER: return "client_ip"; + case RPZ_RESPONSE_IP_TRIGGER: return "response_ip"; + case RPZ_NSDNAME_TRIGGER: return "nsdname"; + case RPZ_NSIP_TRIGGER: return "nsip"; } - return "UNKNOWN RPZ TRIGGER"; + return "unknown"; } /** @@ -335,7 +334,7 @@ rpz_create(struct config_auth* p) free(r); return 0; } - r->taglist = memdup(p->rpz_taglist, p->rpz_taglistlen); + r->taglist = p->rpz_taglist; r->taglistlen = p->rpz_taglistlen; if(p->rpz_action_override) { r->action_override = rpz_config_to_action(p->rpz_action_override); @@ -372,6 +371,7 @@ rpz_create(struct config_auth* p) } } r->log = p->rpz_log; + r->log_name = p->rpz_log_name; return r; } @@ -642,15 +642,20 @@ rpz_remove_rr(struct rpz* r, size_t aznamelen, uint8_t* dname, */ static void log_rpz_apply(uint8_t* dname, enum rpz_action a, struct query_info* qinfo, - struct comm_reply* repinfo) + struct comm_reply* repinfo, char* log_name) { char ip[128], txt[512]; char dnamestr[LDNS_MAX_DOMAINLEN+1]; uint16_t port = ntohs(((struct sockaddr_in*)&repinfo->addr)->sin_port); dname_str(dname, dnamestr); addr_to_str(&repinfo->addr, repinfo->addrlen, ip, sizeof(ip)); - snprintf(txt, sizeof(txt), "RPZ applied %s %s %s@%u", dnamestr, - rpz_action_to_string(a), ip, (unsigned)port); + if(log_name) + snprintf(txt, sizeof(txt), "RPZ applied [%s] %s %s %s@%u", + log_name, dnamestr, rpz_action_to_string(a), ip, + (unsigned)port); + else + snprintf(txt, sizeof(txt), "RPZ applied %s %s %s@%u", + dnamestr, rpz_action_to_string(a), ip, (unsigned)port); log_nametypeclass(0, txt, qinfo->qname, qinfo->qtype, qinfo->qclass); } @@ -658,7 +663,7 @@ int rpz_apply_qname_trigger(struct auth_zones* az, struct module_env* env, struct query_info* qinfo, struct edns_data* edns, sldns_buffer* buf, struct regional* temp, struct comm_reply* repinfo, - uint8_t* taglist, size_t taglen) + uint8_t* taglist, size_t taglen, struct ub_server_stats* stats) { struct rpz* r; int ret; @@ -675,7 +680,8 @@ rpz_apply_qname_trigger(struct auth_zones* az, struct module_env* env, if(r->log) log_rpz_apply(z->name, r->action_override, - qinfo,repinfo); + qinfo, repinfo, r->log_name); + stats->rpz_action[r->action_override]++; lock_rw_unlock(&z->lock); z = NULL; } @@ -711,7 +717,8 @@ rpz_apply_qname_trigger(struct auth_zones* az, struct module_env* env, qinfo->local_alias->rrset->rk.dname_len = qinfo->qname_len; if(r->log) log_rpz_apply(z->name, RPZ_CNAME_OVERRIDE_ACTION, - qinfo, repinfo); + qinfo, repinfo, r->log_name); + stats->rpz_action[RPZ_CNAME_OVERRIDE_ACTION]++; lock_rw_unlock(&z->lock); return 0; } @@ -722,7 +729,8 @@ rpz_apply_qname_trigger(struct auth_zones* az, struct module_env* env, if(r->log) log_rpz_apply(z->name, localzone_type_to_rpz_action(lzt), qinfo, - repinfo); + repinfo, r->log_name); + stats->rpz_action[localzone_type_to_rpz_action(lzt)]++; lock_rw_unlock(&z->lock); return !qinfo->local_alias; } @@ -731,7 +739,8 @@ rpz_apply_qname_trigger(struct auth_zones* az, struct module_env* env, 0 /* no local data used */, lzt); if(r->log) log_rpz_apply(z->name, localzone_type_to_rpz_action(lzt), - qinfo, repinfo); + qinfo, repinfo, r->log_name); + stats->rpz_action[localzone_type_to_rpz_action(lzt)]++; lock_rw_unlock(&z->lock); return ret; diff --git a/services/rpz.h b/services/rpz.h index 8d9e5b376..3bf7e43e0 100644 --- a/services/rpz.h +++ b/services/rpz.h @@ -47,6 +47,7 @@ #include "util/config_file.h" #include "services/authzone.h" #include "sldns/sbuffer.h" +#include "daemon/stats.h" /** * RPZ triggers, only the QNAME trigger is currently supported in Unbound. @@ -91,6 +92,7 @@ struct rpz { enum rpz_action action_override; struct ub_packed_rrset_key* cname_override; int log; + char* log_name; struct rpz* next; struct rpz* prev; struct regional* region; @@ -140,12 +142,13 @@ void rpz_remove_rr(struct rpz* r, size_t aznamelen, uint8_t* dname, * @param repinfo: reply info * @param taglist: taglist to lookup. * @param taglen: lenth of taglist. + * @param stats: worker stats struct * @return: 1 if client answer is ready, 0 to continue resolving */ int rpz_apply_qname_trigger(struct auth_zones* az, struct module_env* env, struct query_info* qinfo, struct edns_data* edns, sldns_buffer* buf, struct regional* temp, struct comm_reply* repinfo, - uint8_t* taglist, size_t taglen); + uint8_t* taglist, size_t taglen, struct ub_server_stats* stats); /** * Delete RPZ @@ -165,4 +168,11 @@ int rpz_clear_lz(struct rpz* r); */ struct rpz* rpz_create(struct config_auth* p); +/** + * String for RPZ action enum + * @param a: RPZ action to get string for + * @return: string for RPZ action + */ +const char* rpz_action_to_string(enum rpz_action a); + #endif /* SERVICES_RPZ_H */ diff --git a/util/config_file.h b/util/config_file.h index 603178541..3bcd3db0a 100644 --- a/util/config_file.h +++ b/util/config_file.h @@ -641,6 +641,8 @@ struct config_auth { char* rpz_action_override; /** Log when this RPZ policy is applied */ int rpz_log; + /** Display this name in the log when RPZ policy is applied */ + char* rpz_log_name; /** Always reply with this CNAME target if the cname override action is * used */ char* rpz_cname; diff --git a/util/configlexer.c b/util/configlexer.c index c6b5260a8..3b8d6d40f 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 296 -#define YY_END_OF_BUFFER 297 +#define YY_NUM_RULES 297 +#define YY_END_OF_BUFFER 298 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info @@ -363,332 +363,333 @@ struct yy_trans_info flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static const flex_int16_t yy_accept[2947] = +static const flex_int16_t yy_accept[2953] = { 0, - 1, 1, 278, 278, 282, 282, 286, 286, 290, 290, - 1, 1, 297, 294, 1, 276, 276, 295, 2, 295, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 278, 279, 279, 280, 295, 282, 283, 283, - 284, 295, 289, 286, 287, 287, 288, 295, 290, 291, - 291, 292, 295, 293, 277, 2, 281, 295, 293, 294, - 0, 1, 2, 2, 2, 2, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 1, 1, 279, 279, 283, 283, 287, 287, 291, 291, + 1, 1, 298, 295, 1, 277, 277, 296, 2, 296, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 279, 280, 280, 281, 296, 283, 284, 284, + 285, 296, 290, 287, 288, 288, 289, 296, 291, 292, + 292, 293, 296, 294, 278, 2, 282, 296, 294, 295, + 0, 1, 2, 2, 2, 2, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 278, 0, 282, 0, 289, 0, 286, 290, 0, 293, - 0, 2, 2, 293, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 279, 0, 283, 0, 290, 0, 287, 291, 0, 294, + 0, 2, 2, 294, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 293, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 294, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 112, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 119, 294, 294, 294, 294, - 294, 294, 294, 293, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 112, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 120, 295, 295, 295, 295, + 295, 295, 295, 294, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 96, 294, 294, 294, - 294, 294, 294, 8, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 113, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 124, 294, 293, 294, 294, 294, 294, 294, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 96, 295, 295, 295, + 295, 295, 295, 8, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 113, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 125, 295, 294, 295, 295, 295, 295, 295, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 293, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 54, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 219, 294, 14, - 15, 294, 18, 17, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 294, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 54, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 220, 295, 14, + 15, 295, 18, 17, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 118, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 203, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 3, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 119, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 204, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 3, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 293, 294, 294, - 294, 294, 294, 294, 294, 269, 294, 294, 268, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 285, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 57, 294, 243, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 294, 295, 295, + 295, 295, 295, 295, 295, 270, 295, 295, 269, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 286, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 57, 295, 244, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 58, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 116, 294, - 294, 294, 294, 294, 294, 294, 294, 192, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 20, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 143, 294, 294, 285, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 58, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 116, + 295, 295, 295, 295, 295, 295, 295, 295, 193, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 20, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 144, 295, 295, + 286, 295, 295, 295, 295, 295, 295, 295, 295, 295, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 94, 294, 294, 294, 294, 294, 294, 294, 251, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 164, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 142, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 93, 294, 294, 294, 294, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 94, 295, 295, 295, 295, 295, 295, 295, 252, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 165, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 143, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 93, 295, 295, 295, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 31, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 32, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 55, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 117, 294, 294, 294, 294, - 294, 111, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 56, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 31, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 32, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 55, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 118, 295, 295, + 295, 295, 295, 111, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 56, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, - 294, 294, 294, 294, 294, 294, 294, 294, 165, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 45, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 234, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 166, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 45, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 235, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, - 294, 294, 294, 49, 294, 50, 294, 294, 294, 294, - 294, 97, 294, 98, 294, 294, 294, 294, 95, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 7, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 212, 294, 294, 294, 294, - 145, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 295, 295, 295, 295, 295, 295, 49, 295, 50, 295, + 295, 295, 295, 295, 97, 295, 98, 295, 295, 295, + 295, 95, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 7, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 213, 295, + 295, 295, 295, 146, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 46, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 184, 294, 183, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 16, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 59, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 191, 294, 294, - 294, 294, 294, 294, 100, 294, 99, 294, 294, 294, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 46, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 185, 295, 184, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 16, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 59, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 192, 295, 295, 295, 295, 295, 295, 100, 295, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 175, 294, 294, - 294, 294, 294, 294, 294, 294, 125, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 78, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 82, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 99, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 176, 295, 295, 295, 295, 295, 295, 295, 295, + 126, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 78, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 82, 295, 295, 295, 295, 295, 295, 295, 295, 295, - 53, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 178, 179, - 294, 294, 294, 245, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 6, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 249, 294, 294, - 294, 294, 294, 270, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 41, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 43, 294, 294, + 295, 295, 295, 295, 53, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 179, 180, 295, 295, 295, 246, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 6, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 250, 295, 295, 295, 295, 295, 295, 271, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 41, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, - 294, 294, 294, 294, 294, 294, 171, 294, 294, 294, - 120, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 196, 294, 172, 294, 294, 294, 209, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 44, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 122, 105, 294, 106, 294, 294, - 294, 104, 294, 294, 294, 294, 294, 294, 294, 294, - 140, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 233, 294, 294, 294, 294, 294, 294, 294, - 294, 173, 294, 294, 294, 294, 294, 176, 294, 182, + 295, 295, 43, 295, 295, 295, 295, 295, 295, 295, + 295, 172, 295, 295, 295, 121, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 197, 295, 173, 295, + 295, 295, 210, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 44, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 123, + 105, 295, 106, 295, 295, 295, 104, 295, 295, 295, + 295, 295, 295, 295, 295, 141, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 234, 295, 295, + 295, 295, 295, 295, 295, 295, 174, 295, 295, 295, - 294, 294, 294, 294, 294, 208, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 92, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 51, 294, 294, 294, 25, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 19, 294, - 294, 294, 294, 294, 294, 26, 35, 294, 150, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 67, 69, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 295, 295, 177, 295, 183, 295, 295, 295, 295, 295, + 209, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 92, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 117, 295, 295, 295, 295, 295, 295, + 51, 295, 295, 295, 25, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 19, 295, 295, 295, 295, 295, + 295, 26, 35, 295, 151, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 67, 69, 295, 295, 295, 295, - 294, 294, 294, 253, 294, 294, 294, 220, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 107, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 139, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 264, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 144, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 202, 294, 294, 294, 294, - 294, 294, 294, 294, 273, 294, 294, 294, 294, 294, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 254, + 295, 295, 295, 221, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 107, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 140, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 265, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 145, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 203, 295, 295, 295, 295, 295, 295, 295, 295, - 294, 294, 294, 294, 294, 294, 161, 294, 294, 294, - 294, 294, 294, 294, 294, 101, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 156, 294, 166, 294, 294, - 294, 294, 294, 128, 294, 294, 294, 294, 294, 88, - 294, 294, 294, 294, 194, 294, 294, 294, 294, 294, - 294, 210, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 225, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 121, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 160, 294, 294, 294, 294, + 274, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 162, 295, 295, 295, 295, 295, 295, 295, + 295, 101, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 157, 295, 167, 295, 295, 295, 295, 295, 129, + 295, 295, 295, 295, 295, 88, 295, 295, 295, 295, + 195, 295, 295, 295, 295, 295, 295, 211, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 226, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 122, 295, 295, 295, 295, 295, 295, 295, 295, 295, - 294, 70, 71, 294, 294, 294, 294, 294, 52, 294, - 294, 294, 294, 294, 77, 167, 294, 185, 294, 213, - 294, 294, 177, 246, 294, 294, 294, 294, 294, 63, - 294, 169, 294, 294, 294, 294, 294, 9, 294, 294, - 294, 91, 294, 294, 294, 294, 238, 294, 294, 294, - 193, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 159, 294, + 295, 161, 295, 295, 295, 295, 295, 70, 71, 295, + 295, 295, 295, 295, 52, 295, 295, 295, 295, 295, + 77, 168, 295, 186, 295, 214, 295, 295, 178, 247, + 295, 295, 295, 295, 295, 63, 295, 170, 295, 295, + 295, 295, 295, 9, 295, 295, 295, 91, 295, 295, + 295, 295, 239, 295, 295, 295, 194, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 146, - 294, 252, 294, 294, 294, 294, 224, 294, 294, 294, - 294, 294, 294, 294, 294, 204, 294, 294, 294, 294, - 244, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 267, 294, 168, 294, 294, - 294, 294, 294, 294, 294, 62, 64, 294, 294, 294, - 294, 294, 294, 294, 90, 294, 294, 294, 294, 236, - 294, 294, 294, 248, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 198, 33, 27, 29, 294, 294, 294, + 295, 295, 295, 295, 160, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 147, 295, 253, 295, 295, + 295, 295, 225, 295, 295, 295, 295, 295, 295, 295, + 295, 205, 295, 295, 295, 295, 245, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 268, 295, 169, 295, 295, 295, 295, 295, 295, + 295, 62, 64, 295, 295, 295, 295, 295, 295, 295, + 90, 295, 295, 295, 295, 237, 295, 295, 295, 249, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 199, - 294, 294, 294, 294, 294, 294, 34, 294, 28, 30, - 294, 294, 294, 294, 294, 294, 294, 294, 87, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 200, 197, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 61, 294, 294, 123, 294, 108, 294, 294, - 294, 294, 294, 294, 294, 294, 141, 13, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 262, 294, 265, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 12, 294, 294, 21, 294, 294, 294, 242, 294, 294, + 33, 27, 29, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 34, 295, 28, 30, 295, 295, 295, 295, + 295, 295, 295, 295, 87, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 201, 198, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 61, 295, + 295, 124, 295, 108, 295, 295, 295, 295, 295, 295, + 295, 295, 142, 13, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 263, 295, 266, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 12, 295, 295, 21, - 294, 250, 294, 294, 294, 65, 294, 206, 294, 294, - 199, 294, 294, 60, 294, 294, 294, 294, 22, 294, - 42, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 155, 154, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 201, 195, 294, 211, 294, 294, - 254, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 72, 294, 294, 294, 237, - 294, 294, 294, 294, 181, 294, 294, 294, 294, 205, - 294, 294, 294, 294, 294, 294, 294, 294, 271, 272, + 295, 295, 295, 243, 295, 295, 295, 251, 295, 295, + 295, 65, 295, 207, 295, 295, 200, 295, 295, 60, + 295, 295, 295, 295, 22, 295, 42, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 156, + 155, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 202, 196, 295, 212, 295, 295, 255, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 72, 295, 295, 295, 238, 295, 295, 295, 295, + 182, 295, 295, 295, 295, 206, 295, 295, 295, 295, - 152, 294, 294, 66, 294, 294, 162, 294, 294, 102, - 103, 294, 294, 294, 294, 147, 294, 149, 294, 186, - 294, 294, 294, 294, 153, 294, 294, 214, 294, 294, - 294, 294, 294, 294, 294, 130, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 221, 294, 294, - 294, 23, 294, 247, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 187, 294, 294, 235, 294, - 266, 294, 180, 294, 294, 294, 294, 47, 294, 294, - 294, 294, 4, 294, 294, 294, 115, 129, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 295, 295, 295, 295, 272, 273, 153, 295, 295, 66, + 295, 295, 163, 295, 295, 102, 103, 295, 295, 295, + 295, 148, 295, 150, 295, 187, 295, 295, 295, 295, + 154, 295, 295, 215, 295, 295, 295, 295, 295, 295, + 295, 131, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 222, 295, 295, 295, 23, 295, 248, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 188, 295, 295, 236, 295, 267, 295, 181, 295, + 295, 295, 295, 47, 295, 295, 295, 295, 4, 295, + 295, 295, 115, 130, 295, 295, 295, 295, 295, 295, - 294, 294, 294, 294, 217, 36, 37, 294, 294, 294, - 294, 294, 294, 294, 255, 294, 294, 294, 294, 294, - 294, 223, 294, 294, 294, 190, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 75, 294, 48, 241, 294, - 218, 294, 294, 294, 294, 11, 294, 294, 294, 294, - 294, 114, 294, 294, 188, 79, 294, 39, 294, 294, - 294, 294, 294, 294, 294, 294, 158, 294, 294, 294, - 294, 294, 132, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 222, 126, 294, 294, 109, 110, 294, 294, - 294, 81, 85, 80, 294, 73, 294, 294, 294, 294, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 218, 36, 37, 295, 295, 295, 295, 295, 295, 295, + 256, 295, 295, 295, 295, 295, 295, 224, 295, 295, + 295, 191, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 75, 295, 48, 242, 295, 219, 295, 295, 295, + 295, 11, 295, 295, 295, 295, 295, 114, 295, 295, + 189, 79, 295, 39, 295, 295, 295, 295, 295, 295, + 295, 295, 159, 295, 295, 295, 295, 295, 133, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 223, 127, + 295, 295, 109, 110, 295, 295, 295, 81, 85, 80, - 294, 10, 294, 294, 294, 239, 294, 294, 275, 38, - 294, 294, 294, 294, 294, 157, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 86, 84, 294, 74, 263, 294, - 294, 294, 294, 294, 294, 294, 174, 294, 294, 294, - 189, 294, 294, 294, 294, 294, 294, 294, 294, 148, - 68, 294, 294, 294, 294, 294, 256, 294, 294, 294, - 294, 294, 294, 294, 127, 294, 83, 133, 134, 137, - 138, 135, 136, 76, 294, 240, 294, 294, 151, 294, - 294, 294, 294, 294, 216, 294, 294, 294, 294, 294, + 295, 73, 295, 295, 295, 295, 295, 10, 295, 295, + 295, 240, 295, 295, 276, 38, 295, 295, 295, 295, + 295, 158, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 86, 84, 295, 74, 264, 295, 295, 295, 295, 295, + 295, 295, 175, 295, 295, 295, 190, 295, 295, 295, + 295, 295, 295, 295, 295, 149, 68, 295, 295, 295, + 295, 295, 257, 295, 295, 295, 295, 295, 295, 295, + 128, 295, 83, 134, 135, 138, 139, 136, 137, 76, + 295, 241, 295, 295, 152, 295, 295, 295, 295, 295, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 163, - 40, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 89, 294, 215, 294, 232, 260, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 5, 294, - 207, 294, 294, 261, 294, 294, 294, 294, 294, 294, - 294, 294, 24, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 131, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 170, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 257, 294, 294, 294, + 217, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 164, 40, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 89, 295, + 216, 295, 233, 261, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 5, 295, 208, 295, 295, 262, + 295, 295, 295, 295, 295, 295, 295, 295, 24, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 132, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 171, 295, 295, 295, 295, 295, 295, 295, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 274, 294, 294, 228, 294, 294, - 294, 294, 294, 258, 294, 294, 294, 294, 294, 294, - 259, 294, 294, 294, 226, 294, 229, 230, 294, 294, - 294, 294, 294, 227, 231, 0 + 295, 295, 258, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 275, 295, 295, 229, 295, 295, 295, 295, 295, 259, + 295, 295, 295, 295, 295, 295, 260, 295, 295, 295, + 227, 295, 230, 231, 295, 295, 295, 295, 295, 228, + 232, 0 } ; static const YY_CHAR yy_ec[256] = @@ -731,15 +732,15 @@ static const YY_CHAR yy_meta[41] = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } ; -static const flex_int16_t yy_base[2961] = +static const flex_int16_t yy_base[2967] = { 0, 0, 0, 38, 41, 44, 46, 59, 65, 71, 77, - 90, 112, 2076, 2017, 81, 5748, 5748, 5748, 96, 52, + 90, 112, 2157, 1903, 81, 5765, 5765, 5765, 96, 52, 106, 63, 107, 111, 70, 128, 130, 133, 57, 88, 76, 135, 141, 117, 148, 145, 160, 164, 185, 177, - 189, 152, 1847, 5748, 5748, 5748, 107, 1709, 5748, 5748, - 5748, 165, 1601, 1344, 5748, 5748, 5748, 211, 1232, 5748, - 5748, 5748, 180, 1179, 5748, 217, 5748, 221, 168, 1072, + 189, 152, 1864, 5765, 5765, 5765, 107, 1824, 5765, 5765, + 5765, 165, 1601, 1344, 5765, 5765, 5765, 211, 1232, 5765, + 5765, 5765, 180, 1179, 5765, 217, 5765, 221, 168, 1072, 225, 231, 0, 237, 0, 0, 226, 231, 85, 180, 114, 238, 239, 156, 234, 206, 240, 232, 200, 132, 253, 244, 245, 248, 256, 257, 264, 271, 249, 277, @@ -768,9 +769,9 @@ static const flex_int16_t yy_base[2961] = 700, 701, 707, 702, 714, 717, 730, 720, 731, 725, 711, 735, 737, 739, 736, 747, 740, 749, 750, 751, - 743, 752, 715, 756, 5748, 753, 760, 764, 761, 769, + 743, 752, 715, 756, 5765, 753, 760, 764, 761, 769, 772, 771, 776, 778, 781, 789, 791, 788, 796, 818, - 784, 786, 798, 800, 794, 5748, 803, 802, 842, 810, + 784, 786, 798, 800, 794, 5765, 803, 802, 842, 810, 811, 829, 824, 812, 827, 832, 826, 831, 849, 814, 848, 838, 859, 851, 855, 860, 862, 864, 866, 871, 872, 867, 870, 876, 884, 879, 883, 886, 895, 885, @@ -779,14 +780,14 @@ static const flex_int16_t yy_base[2961] = 923, 943, 939, 945, 947, 949, 950, 951, 961, 953, 956, 958, 962, 964, 965, 968, 970, 973, 972, 975, - 977, 976, 982, 987, 985, 993, 5748, 995, 986, 989, - 999, 998, 1000, 5748, 1001, 1002, 1003, 1010, 1005, 1015, + 977, 976, 982, 987, 985, 993, 5765, 995, 986, 989, + 999, 998, 1000, 5765, 1001, 1002, 1003, 1010, 1005, 1015, 1011, 1013, 1020, 1023, 1024, 1025, 1035, 1030, 1033, 1043, 1032, 1034, 1041, 1044, 1045, 1042, 1051, 1048, 1052, 1054, - 1056, 1074, 5748, 1057, 1055, 1058, 1059, 1060, 1067, 1086, + 1056, 1074, 5765, 1057, 1055, 1058, 1059, 1060, 1067, 1086, 1064, 1084, 1081, 1083, 1102, 1085, 1103, 1087, 1098, 1104, 1099, 1108, 1111, 1113, 1112, 1114, 1115, 1116, 1119, 1117, - 1120, 1123, 5748, 1122, 1130, 1138, 1139, 1140, 1141, 1142, + 1120, 1123, 5765, 1122, 1130, 1138, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1148, 1153, 1164, 1171, 1154, 1173, 1157, 1172, 1168, 1170, 1147, 1174, 1178, 1176, 1189, 1180, @@ -805,591 +806,593 @@ static const flex_int16_t yy_base[2961] = 1412, 1414, 1415, 1422, 1416, 1431, 1423, 1424, 1432, 1435, 1441, 1437, 1447, 1448, 1438, 1450, 1440, 1451, 1454, 1455, 1459, 1458, 1462, 1460, 1468, 1469, 1471, 1470, 1473, 1478, - 1476, 1480, 5748, 1481, 1488, 1483, 1486, 1492, 1493, 1494, - 1501, 1497, 1499, 1496, 1498, 1502, 1508, 5748, 1509, 5748, - 5748, 1511, 5748, 5748, 1507, 1515, 1510, 1525, 1531, 1533, + 1476, 1480, 5765, 1481, 1488, 1483, 1486, 1492, 1493, 1494, + 1501, 1497, 1499, 1496, 1498, 1502, 1508, 5765, 1509, 5765, + 5765, 1511, 5765, 5765, 1507, 1515, 1510, 1525, 1531, 1533, 1535, 1519, 1536, 1538, 1545, 1559, 1542, 1541, 1549, 1540, 1548, 1544, 1557, 1552, 1554, 1555, 1568, 1572, 1574, 1580, 1576, 1570, 1581, 1583, 1586, 1584, 1590, 1587, 1593, 1594, - 1596, 1597, 1598, 1606, 1599, 1611, 1618, 5748, 1608, 1621, + 1596, 1597, 1598, 1606, 1599, 1611, 1618, 5765, 1608, 1621, 1622, 1619, 1629, 1625, 1626, 1627, 1630, 1631, 1634, 1633, - 1636, 1642, 1637, 1643, 1650, 1645, 5748, 1647, 1648, 1653, - 1652, 1659, 1660, 1654, 1663, 1666, 1667, 1670, 1671, 1674, - 1673, 1676, 1677, 1679, 5748, 1681, 1687, 1678, 1691, 1684, - 1693, 1694, 1695, 1698, 1697, 1700, 1703, 1702, 1708, 1710, - 1712, 1716, 1711, 1715, 1719, 1722, 1726, 1733, 1724, 1734, - 1735, 1737, 1738, 1739, 1740, 1742, 1747, 1746, 1754, 1749, + 1636, 1642, 1637, 1643, 1650, 1645, 5765, 1647, 1648, 1653, + 1652, 1659, 1660, 1654, 1663, 1666, 1667, 1677, 1669, 1672, + 1673, 1674, 1678, 1679, 5765, 1684, 1694, 1685, 1691, 1689, + 1681, 1695, 1697, 1698, 1699, 1700, 1703, 1704, 1705, 1717, + 1712, 1713, 1709, 1716, 1714, 1726, 1727, 1734, 1729, 1735, + 1731, 1737, 1736, 1738, 1739, 1741, 1748, 1743, 1752, 1747, - 1756, 1757, 1763, 1752, 1753, 1770, 1764, 1776, 1772, 1778, - 1768, 1774, 1788, 1779, 1784, 1780, 1789, 1791, 1792, 1793, - 1795, 1800, 1801, 1803, 1804, 5748, 1802, 1805, 5748, 1809, - 1806, 1830, 1810, 1812, 1813, 1815, 1817, 1820, 1825, 1818, - 1831, 1834, 1844, 1845, 1849, 1837, 1850, 1856, 1854, 1857, - 1858, 1860, 1869, 1870, 1874, 1867, 1877, 1875, 1876, 1880, - 1899, 1879, 1881, 1882, 1889, 1883, 1885, 1894, 1892, 1893, - 1903, 1888, 1904, 5748, 1915, 1911, 1910, 1917, 1926, 1916, - 1923, 1924, 1927, 1928, 1937, 1932, 1934, 1935, 1938, 1943, - 1939, 1948, 1945, 1946, 1950, 1947, 1967, 5748, 1949, 5748, + 1759, 1768, 1750, 1755, 1763, 1764, 1765, 1770, 1772, 1773, + 1777, 1778, 1785, 1780, 1782, 1784, 1787, 1789, 1790, 1793, + 1798, 1794, 1801, 1803, 1796, 5765, 1804, 1806, 5765, 1807, + 1809, 1831, 1810, 1813, 1814, 1819, 1812, 1822, 1823, 1825, + 1841, 1835, 1851, 1843, 1844, 1853, 1854, 1855, 1856, 1858, + 1861, 1865, 1872, 1873, 1833, 1881, 1880, 1862, 1863, 1877, + 1896, 1878, 1883, 1885, 1886, 1891, 1889, 1893, 1900, 1887, + 1905, 1908, 1909, 5765, 1917, 1918, 1912, 1919, 1926, 1923, + 1925, 1927, 1929, 1930, 1939, 1934, 1935, 1937, 1940, 1941, + 1945, 1947, 1948, 1949, 1950, 1951, 1967, 5765, 1953, 5765, - 1952, 1951, 1962, 1963, 1968, 1969, 1970, 1973, 1974, 1976, - 1982, 1993, 1988, 5748, 1980, 1995, 1998, 1997, 1990, 1972, - 1991, 2003, 2005, 2012, 2007, 2014, 2010, 2013, 5748, 2019, - 2011, 2021, 2023, 2015, 2024, 2030, 2033, 5748, 2034, 2036, - 2037, 2044, 2042, 2039, 2046, 2047, 2053, 2049, 2051, 2055, - 2056, 2058, 2063, 2066, 2068, 2069, 2072, 2082, 5748, 2061, - 2065, 2084, 2081, 2088, 2080, 2083, 2090, 2091, 2093, 2095, - 2097, 2098, 2099, 2107, 2109, 2102, 2100, 2112, 2104, 2113, - 2114, 2120, 2119, 2121, 2122, 2124, 5748, 2125, 2129, 124, - 2131, 2132, 2134, 2133, 2139, 2136, 2140, 2156, 2157, 2153, + 1952, 1962, 1964, 1963, 1970, 1971, 1973, 1974, 1975, 1972, + 1984, 1993, 1976, 5765, 1990, 1997, 1994, 1999, 2000, 1992, + 2001, 2003, 2005, 2010, 2007, 2015, 2008, 2013, 2011, 5765, + 2021, 2017, 2026, 2028, 2029, 2030, 2032, 2022, 5765, 2036, + 2039, 2040, 2047, 2044, 2048, 2049, 2050, 2051, 2054, 2056, + 2058, 2059, 2060, 2069, 2070, 2061, 2071, 2074, 2083, 5765, + 2068, 2065, 2087, 2084, 2091, 2088, 2092, 2080, 2093, 2099, + 2094, 2082, 2095, 2103, 2110, 2112, 2108, 2109, 2116, 2111, + 2113, 2117, 2124, 2118, 2119, 2121, 2125, 5765, 2126, 2132, + 124, 2133, 2134, 2139, 2137, 2135, 2153, 2138, 2154, 2161, - 2152, 2159, 2155, 2161, 2162, 2163, 2165, 2166, 2168, 2170, - 5748, 2143, 2171, 2172, 2176, 2174, 2177, 2182, 5748, 2192, - 2181, 2188, 2194, 2199, 2200, 2203, 2204, 2205, 2206, 2210, - 2207, 5748, 2214, 2215, 2217, 2216, 2223, 2225, 2230, 2219, - 2227, 2231, 2232, 2233, 2238, 2235, 2237, 2240, 2241, 2243, - 2251, 2252, 2253, 2246, 5748, 2260, 2257, 2262, 2258, 2263, - 2264, 2275, 2265, 2267, 2277, 2279, 2291, 2282, 2283, 2293, - 2285, 2289, 2288, 2307, 2298, 2306, 2308, 2302, 2312, 2315, - 2305, 2316, 2317, 2319, 2322, 2321, 2324, 2336, 2337, 2328, - 2340, 2329, 2350, 2348, 2341, 5748, 2353, 2354, 2355, 2356, + 2141, 2157, 2160, 2156, 2162, 2163, 2164, 2166, 2167, 2169, + 2171, 5765, 2173, 2175, 2177, 2178, 2180, 2181, 2183, 5765, + 2191, 2182, 2196, 2194, 2204, 2198, 2200, 2205, 2206, 2212, + 2211, 2213, 5765, 2215, 2218, 2219, 2220, 2221, 2227, 2228, + 2229, 2230, 2233, 2234, 2235, 2236, 2239, 2238, 2241, 2242, + 2247, 2248, 2249, 2254, 2255, 5765, 2265, 2256, 2258, 2261, + 2267, 2268, 2277, 2273, 2275, 2278, 2282, 2293, 2284, 2279, + 2296, 2285, 2294, 2295, 2309, 2300, 2308, 2310, 2307, 2314, + 2317, 2318, 2319, 2321, 2323, 2324, 2325, 2326, 2333, 2340, + 2331, 2341, 2342, 2346, 2350, 2352, 5765, 2349, 2354, 2355, - 2364, 2359, 2361, 2360, 2362, 2367, 2368, 2370, 2378, 2375, - 2376, 2377, 2379, 2380, 2385, 2388, 2391, 2395, 2392, 2398, - 2399, 5748, 2402, 2404, 2400, 2406, 2411, 2408, 2417, 2420, - 2418, 2412, 2414, 2425, 2422, 2426, 2427, 2431, 2430, 2432, - 2437, 5748, 2438, 2443, 2440, 2444, 2446, 2448, 2451, 2459, - 2452, 2450, 2461, 2462, 2463, 5748, 2470, 2471, 2472, 2479, - 2466, 2474, 2478, 2481, 2482, 5748, 2483, 2484, 2491, 2492, - 2488, 5748, 2496, 2495, 2497, 2487, 2498, 2500, 2504, 2501, - 2506, 2508, 2511, 2514, 2510, 2519, 5748, 2520, 2528, 2523, - 2525, 2529, 2530, 2532, 2535, 2538, 2540, 2545, 2554, 2551, + 2357, 2365, 2361, 2367, 2368, 2370, 2371, 2374, 2375, 2384, + 2376, 2380, 2381, 2386, 2385, 2387, 2392, 2394, 2397, 2401, + 2398, 2404, 2405, 5765, 2332, 2406, 2408, 2409, 2415, 2412, + 2417, 2420, 2423, 2422, 2424, 2426, 2429, 2430, 2431, 2434, + 2435, 2436, 2437, 5765, 2447, 2441, 2448, 2452, 2446, 2458, + 2459, 2460, 2462, 2465, 2466, 2468, 2469, 5765, 2476, 2477, + 2473, 2480, 2479, 2481, 2484, 2486, 2487, 5765, 2489, 2490, + 2497, 2498, 2493, 5765, 2502, 2494, 2501, 2503, 2504, 2505, + 2510, 2506, 2512, 2516, 2517, 2520, 2524, 2525, 5765, 2527, + 2539, 2531, 2532, 2528, 2529, 2535, 2540, 2548, 2440, 2545, - 2549, 2552, 2536, 2556, 2558, 2557, 2561, 2564, 5748, 2565, - 2567, 2568, 2569, 2572, 2573, 2577, 2587, 2578, 2580, 2583, - 2588, 2589, 2582, 2593, 2595, 2600, 2592, 2606, 2607, 2594, - 2611, 2612, 2613, 2620, 2622, 2623, 2625, 5748, 2628, 2630, - 2629, 2619, 2621, 2631, 2632, 2640, 2636, 2642, 2643, 2644, - 2645, 2653, 2655, 2651, 2659, 2657, 2661, 2663, 2662, 2665, - 2666, 2669, 2674, 2670, 2673, 2683, 2678, 2679, 2688, 2681, - 2689, 2690, 2691, 2692, 2693, 2696, 2694, 2698, 2703, 2705, - 2702, 2712, 2713, 2718, 2717, 2719, 5748, 2723, 2720, 2722, - 2724, 2732, 2729, 2739, 2736, 2741, 2743, 2744, 2737, 2745, + 2557, 2560, 2552, 2542, 2544, 2554, 2562, 2565, 2566, 2568, + 5765, 2573, 2574, 2575, 2576, 2578, 2579, 2580, 2590, 2569, + 2585, 2586, 2591, 2594, 2589, 2596, 2595, 2598, 2605, 2607, + 2610, 2612, 2613, 2614, 2615, 2624, 2628, 2625, 2629, 5765, + 2632, 2617, 2633, 2634, 2636, 2638, 2637, 2639, 2641, 2643, + 2649, 2645, 2646, 2663, 2670, 2647, 2655, 2658, 2660, 2666, + 2668, 2671, 2672, 2676, 2680, 2678, 2681, 2688, 2684, 2685, + 2693, 2686, 2689, 2695, 2696, 2697, 2698, 2701, 2699, 2706, + 2710, 2713, 2718, 2717, 2720, 2725, 2724, 2726, 5765, 2730, + 2727, 2729, 2731, 2739, 2736, 2746, 2743, 2744, 2748, 2750, - 2749, 2756, 2753, 5748, 2754, 5748, 2755, 2759, 2760, 2768, - 2758, 5748, 2766, 5748, 2767, 2774, 2771, 2775, 5748, 2777, - 2779, 2781, 2782, 2785, 2784, 2788, 2789, 2792, 2795, 2786, - 2793, 2797, 2801, 2798, 2803, 2809, 2810, 2816, 2813, 2811, - 2818, 2820, 2823, 2824, 2826, 2827, 5748, 2830, 2833, 2835, - 2836, 2838, 2837, 2839, 2841, 2843, 2844, 2848, 2853, 2847, - 2859, 2860, 2872, 2850, 2874, 5748, 2869, 2876, 2854, 2871, - 5748, 2879, 2878, 2880, 2885, 2882, 2887, 2888, 2889, 2890, - 2894, 2893, 2898, 2914, 2895, 2909, 2907, 2897, 2917, 2921, - 2919, 2910, 2925, 2929, 2927, 2928, 2930, 2931, 2933, 2934, + 2751, 2752, 2756, 2759, 2766, 2762, 5765, 2763, 5765, 2764, + 2765, 2767, 2775, 2771, 5765, 2777, 5765, 2780, 2787, 2773, + 2778, 5765, 2790, 2782, 2788, 2795, 2784, 2792, 2798, 2800, + 2801, 2803, 2806, 2807, 2808, 2809, 2811, 2812, 2814, 2816, + 2821, 2823, 2818, 2828, 2826, 2832, 2835, 2834, 2836, 5765, + 2845, 2837, 2840, 2842, 2846, 2847, 2849, 2851, 2857, 2858, + 2859, 2864, 2863, 2702, 2865, 2873, 2866, 2880, 5765, 2871, + 2876, 2879, 2881, 5765, 2884, 2882, 2890, 2892, 2888, 2894, + 2895, 2896, 2900, 2897, 2903, 2908, 2913, 2915, 2916, 2917, + 2904, 2918, 2930, 2927, 2933, 2935, 2937, 2938, 2928, 2939, - 2942, 2944, 2935, 2945, 2943, 2946, 2955, 2947, 2949, 2956, - 2957, 2958, 2959, 2962, 2965, 2969, 2960, 2961, 2968, 2964, - 5748, 2971, 2975, 2979, 2986, 2983, 2988, 2989, 2990, 2991, - 2992, 2994, 2997, 2996, 5748, 2999, 5748, 2993, 3017, 3004, - 3011, 3015, 3005, 3021, 3026, 3016, 3022, 3028, 3030, 3031, - 3032, 3034, 3036, 3037, 3038, 3045, 3052, 3040, 3044, 3053, - 3042, 3054, 3061, 5748, 3058, 3059, 3062, 3064, 3065, 3067, - 3075, 3069, 3066, 3068, 3079, 3088, 5748, 3085, 3086, 3091, - 3098, 3093, 3095, 3102, 3100, 3109, 3104, 5748, 3106, 3107, - 3114, 3112, 3115, 3122, 5748, 3119, 5748, 3117, 3120, 3123, + 2940, 2942, 2944, 2951, 2952, 2948, 2955, 2950, 2956, 2964, + 2960, 2954, 2958, 2966, 2905, 2967, 2968, 2969, 2976, 2971, + 2974, 2975, 2977, 5765, 2984, 2979, 2985, 2987, 2992, 2995, + 2993, 2996, 2997, 3000, 3001, 3004, 3002, 5765, 3005, 5765, + 3003, 3019, 3011, 3024, 3021, 3012, 3026, 3032, 3027, 3034, + 3036, 3037, 3035, 3039, 3038, 3043, 3048, 3049, 3050, 3046, + 3051, 3052, 3056, 3059, 3061, 3063, 5765, 3064, 3066, 3067, + 3069, 3070, 3076, 3082, 3078, 3080, 3072, 3086, 3100, 5765, + 3088, 3091, 3092, 3096, 3109, 3095, 3108, 3111, 3110, 3118, + 3116, 5765, 3117, 3119, 3126, 3121, 3127, 3129, 5765, 3124, - 3128, 3129, 3130, 3132, 3133, 3135, 3144, 3151, 3140, 3141, - 3148, 3149, 3150, 3158, 3154, 3155, 3157, 5748, 3160, 3162, - 3165, 3167, 3173, 3174, 3177, 3164, 5748, 3170, 3181, 3183, - 3184, 3188, 3190, 3191, 3192, 3194, 3197, 3193, 3195, 3204, - 3201, 3200, 3208, 3211, 3216, 3221, 5748, 3217, 3223, 3230, - 3226, 3227, 3229, 3233, 3228, 3234, 3235, 3237, 3238, 3240, - 3242, 3244, 3241, 3251, 3245, 3247, 3258, 3267, 3250, 3263, - 3252, 3264, 3270, 3269, 3274, 3277, 3279, 3266, 3281, 3287, - 3289, 3290, 3292, 3293, 3300, 3295, 5748, 3302, 3299, 3307, - 3303, 3305, 3313, 3314, 3322, 3306, 3304, 3309, 3327, 3323, + 5765, 3125, 3128, 3131, 3140, 3135, 3138, 3141, 3142, 3146, + 3158, 3159, 3150, 3154, 3143, 3157, 3160, 3168, 3164, 3165, + 3166, 5765, 3170, 3171, 3175, 3172, 3178, 3180, 3187, 3182, + 5765, 3188, 3190, 3192, 3194, 3193, 3198, 3195, 3200, 3201, + 3202, 3199, 3204, 3216, 3208, 3215, 3217, 3222, 3225, 3227, + 5765, 3229, 3230, 3237, 3236, 3232, 3238, 3242, 3241, 3243, + 3246, 3248, 3247, 3249, 3250, 3253, 3251, 3254, 3255, 3257, + 3260, 3273, 3269, 3270, 3271, 3274, 3277, 3281, 3282, 3285, + 3292, 3278, 3300, 3301, 3286, 3288, 3304, 3306, 3311, 3293, + 5765, 3314, 3312, 3319, 3315, 3317, 3322, 3323, 3331, 3329, - 5748, 3332, 3330, 3333, 3334, 3336, 3346, 3338, 3337, 3339, - 3342, 3348, 3349, 3352, 3353, 3354, 3359, 3356, 5748, 5748, - 3362, 3363, 3364, 5748, 3368, 3365, 3384, 3367, 3369, 3370, - 3380, 3382, 3371, 3392, 3379, 3383, 5748, 3389, 3401, 3396, - 3400, 3404, 3408, 3410, 3406, 3403, 3413, 3415, 3414, 3417, - 3418, 3419, 3421, 3429, 3424, 3425, 3427, 5748, 3428, 3430, - 3432, 3435, 3438, 5748, 3439, 3442, 3443, 3441, 3456, 3457, - 3451, 3460, 3463, 3464, 3466, 3465, 3468, 3469, 3477, 3472, - 3474, 3476, 3480, 3482, 5748, 3483, 3490, 3473, 3495, 3497, - 3504, 3505, 3508, 3491, 3507, 3509, 3516, 5748, 3511, 3514, + 3316, 3318, 3332, 3327, 5765, 3334, 3335, 3337, 3344, 3345, + 3352, 3350, 3351, 3353, 3357, 3354, 3361, 3358, 3363, 3364, + 3367, 3368, 5765, 5765, 3370, 3372, 3373, 5765, 3375, 3377, + 3387, 3390, 3379, 3376, 3386, 3383, 3394, 3395, 3399, 3401, + 5765, 3402, 3409, 3404, 3405, 3414, 3416, 3419, 3406, 3413, + 3415, 3421, 3426, 3427, 3423, 3428, 3431, 3439, 3429, 3436, + 3442, 5765, 3437, 3434, 3443, 3445, 3447, 3450, 5765, 3452, + 3455, 3458, 3460, 3468, 3470, 3461, 3476, 3463, 3473, 3478, + 3480, 3479, 3481, 3488, 3483, 3486, 3490, 3492, 3496, 5765, + 3494, 3495, 3502, 3505, 3508, 3515, 3516, 3518, 3513, 3519, - 3513, 3515, 3526, 3500, 3530, 3519, 5748, 3527, 3528, 3529, - 5748, 3532, 3536, 3542, 3544, 3533, 3551, 3546, 3549, 3550, - 3548, 5748, 3555, 5748, 3558, 3559, 3562, 5748, 3564, 3565, - 3567, 3569, 3566, 3573, 3574, 3581, 3570, 3582, 3583, 3584, - 3585, 3587, 3594, 3586, 5748, 3595, 3593, 3597, 3598, 3604, - 3602, 3605, 3610, 3608, 5748, 5748, 3617, 5748, 3609, 3618, - 3619, 5748, 3622, 3624, 3629, 3625, 3627, 3630, 3640, 3633, - 5748, 3636, 3631, 3644, 3646, 3647, 3648, 3649, 3650, 3652, - 3654, 3653, 5748, 3656, 3658, 3664, 3657, 3665, 3671, 3677, - 3666, 5748, 3679, 3681, 3673, 3687, 3688, 5748, 3680, 5748, + 3517, 3526, 5765, 3521, 3523, 3525, 3528, 3536, 3532, 3540, + 3531, 5765, 3535, 3538, 3541, 5765, 3542, 3548, 3551, 3556, + 3544, 3558, 3559, 3561, 3562, 3560, 5765, 3567, 5765, 3570, + 3563, 3576, 5765, 3571, 3574, 3579, 3581, 3578, 3585, 3588, + 3592, 3582, 3589, 3594, 3595, 3596, 3599, 3603, 3601, 5765, + 3605, 3607, 3609, 3610, 3613, 3608, 3616, 3619, 3621, 5765, + 5765, 3627, 5765, 3628, 3623, 3629, 5765, 3632, 3630, 3641, + 3633, 3642, 3636, 3649, 3646, 5765, 3651, 3640, 3652, 3655, + 3656, 3657, 3659, 3661, 3662, 3663, 3666, 5765, 3667, 3668, + 3675, 3665, 3670, 3676, 3681, 3682, 5765, 3684, 3691, 3692, - 3690, 3693, 3694, 3696, 3697, 5748, 3699, 3700, 3704, 3705, - 3707, 3709, 3710, 3713, 3717, 3719, 3726, 3722, 3721, 3724, - 5748, 3723, 3729, 3737, 3740, 3730, 3728, 3744, 3746, 3747, - 3750, 3753, 3755, 3756, 3759, 3754, 3764, 3761, 3762, 3768, - 3765, 3778, 3773, 3775, 5748, 3776, 3780, 3784, 5748, 3781, - 3783, 3790, 3792, 3793, 3795, 3796, 3800, 3801, 5748, 3797, - 3798, 3802, 3815, 3818, 3808, 5748, 5748, 3819, 5748, 3821, - 3805, 3824, 3826, 3804, 3831, 3807, 3832, 3834, 3830, 3842, - 3843, 3837, 3853, 3851, 3860, 3855, 3725, 3836, 5748, 5748, - 3862, 3863, 3857, 3868, 3869, 3859, 3865, 3879, 3872, 3874, + 3694, 3696, 5765, 3695, 5765, 3697, 3698, 3700, 3706, 3701, + 5765, 3709, 3705, 3714, 3716, 3717, 3721, 3724, 3725, 3718, + 3726, 3733, 3732, 3728, 3731, 5765, 3734, 3735, 3744, 3747, + 3740, 3738, 3751, 3752, 3754, 3759, 3761, 3750, 3763, 3765, + 3768, 3769, 3770, 5765, 3771, 3776, 3772, 3785, 3773, 3786, + 5765, 3787, 3789, 3790, 5765, 3791, 3781, 3796, 3803, 3792, + 3797, 3800, 3806, 3807, 5765, 3809, 3811, 3808, 3812, 3813, + 3824, 5765, 5765, 3819, 5765, 3826, 3814, 3827, 3829, 3830, + 3831, 3835, 3836, 3844, 3839, 3846, 3848, 3841, 3857, 3865, + 3866, 3849, 3861, 3862, 5765, 5765, 3864, 3870, 3867, 3873, - 3881, 3882, 3890, 5748, 3888, 3876, 3891, 5748, 3885, 3893, - 3886, 3897, 3894, 3900, 3901, 3903, 3904, 3905, 3906, 3907, - 3913, 3915, 3914, 3916, 3921, 3923, 5748, 3924, 3926, 3927, - 3928, 3930, 3931, 3935, 3936, 3937, 5748, 3938, 3941, 3944, - 3942, 3943, 3949, 3959, 3964, 3966, 3952, 3961, 3968, 3970, - 3972, 3973, 5748, 3975, 3976, 3977, 3981, 3984, 3986, 3987, - 3989, 3990, 3992, 3994, 3995, 3999, 4002, 4003, 4004, 4005, - 4007, 5748, 4010, 4012, 4014, 4021, 4016, 4018, 4022, 4027, - 4030, 4023, 4031, 4032, 4036, 5748, 4037, 4038, 4039, 4040, - 4048, 4041, 4049, 4050, 5748, 4053, 4055, 4056, 4045, 4058, + 3874, 3868, 3877, 3884, 3881, 3887, 3890, 3892, 3899, 5765, + 3879, 3891, 3894, 5765, 3900, 3901, 3903, 3902, 3904, 3905, + 3908, 3913, 3910, 3907, 3915, 3916, 3918, 3919, 3927, 3921, + 3928, 3936, 5765, 3929, 3931, 3933, 3939, 3940, 3941, 3944, + 3943, 3945, 5765, 3948, 3954, 3956, 3957, 3947, 3958, 3967, + 3973, 3975, 3969, 3976, 3977, 3979, 3981, 3982, 5765, 3985, + 3983, 3986, 3992, 3994, 3996, 3997, 3999, 4000, 4002, 4005, + 4007, 4009, 4011, 4013, 4014, 4015, 4017, 5765, 4019, 4022, + 4025, 4031, 4028, 4026, 4034, 4038, 4041, 4033, 4035, 4042, + 4048, 5765, 4043, 4045, 4049, 4051, 4057, 4053, 4058, 4059, - 4062, 4066, 4067, 4069, 4070, 4071, 5748, 4073, 4074, 4077, - 4081, 4083, 4084, 4088, 4086, 5748, 4089, 4090, 4087, 4103, - 4098, 4107, 4099, 4108, 4100, 4109, 4111, 4115, 4117, 4118, - 4120, 4116, 4134, 4137, 4132, 5748, 4121, 5748, 4133, 4138, - 4146, 4143, 4135, 5748, 4145, 4147, 4149, 4150, 4151, 5748, - 4154, 4153, 4156, 4158, 5748, 4159, 4167, 4164, 4168, 4174, - 4175, 5748, 4178, 4179, 4181, 4189, 4191, 4188, 4190, 4192, - 4194, 4195, 4196, 4197, 5748, 4199, 4202, 4201, 4207, 4208, - 4210, 4214, 4220, 4110, 5748, 4211, 4213, 4221, 4222, 4223, - 4224, 4226, 4234, 4229, 4225, 5748, 4232, 4237, 4245, 4238, + 5765, 4066, 4060, 4062, 4067, 4070, 4071, 4075, 4076, 4078, + 3949, 4079, 5765, 4082, 4085, 4086, 4083, 4084, 4092, 4093, + 4095, 5765, 4100, 4102, 4096, 4109, 4104, 4112, 4110, 4114, + 4116, 4117, 4120, 4118, 4122, 4124, 4126, 4128, 4138, 4140, + 4139, 5765, 4129, 5765, 4136, 4146, 4150, 4151, 4137, 5765, + 4148, 4153, 4155, 4156, 4158, 5765, 4161, 4162, 4165, 4163, + 5765, 4174, 4176, 4166, 4170, 4184, 4187, 5765, 4190, 4191, + 4192, 4185, 4199, 4196, 4198, 4200, 4202, 4203, 4204, 4205, + 5765, 4168, 4207, 4209, 4211, 4213, 4215, 4220, 4219, 4221, + 5765, 4225, 4226, 4227, 4228, 4229, 4231, 4232, 4244, 4239, - 4247, 5748, 5748, 4240, 4250, 4252, 4253, 4256, 5748, 4258, - 4265, 4260, 4264, 4261, 5748, 5748, 4267, 5748, 4268, 5748, - 4269, 4271, 5748, 5748, 4273, 4274, 4275, 4276, 4285, 5748, - 4289, 5748, 4296, 4291, 4277, 4282, 4294, 5748, 4295, 4297, - 4302, 5748, 4298, 4311, 4303, 4308, 5748, 4313, 4306, 4310, - 5748, 4315, 4318, 4319, 4320, 4322, 4327, 4333, 4326, 4329, - 4330, 4334, 4337, 4342, 4345, 4347, 4348, 4349, 4351, 4352, - 4354, 4357, 4358, 4359, 4361, 4363, 4364, 4366, 4372, 4373, - 4368, 4374, 4375, 4376, 4385, 4378, 4382, 4389, 4386, 4391, - 4392, 4393, 4394, 4397, 4399, 4401, 4404, 4405, 5748, 4403, + 4236, 5765, 4240, 4243, 4255, 4250, 4257, 5765, 5765, 4252, + 4260, 4262, 4241, 4263, 5765, 4268, 4275, 4270, 4274, 4271, + 5765, 5765, 4277, 5765, 4278, 5765, 4279, 4281, 5765, 5765, + 4283, 4284, 4285, 4286, 4295, 5765, 4299, 5765, 4306, 4301, + 4287, 4289, 4304, 5765, 4305, 4307, 4313, 5765, 4308, 4320, + 4315, 4316, 5765, 4322, 4318, 4323, 5765, 4325, 4328, 4329, + 4330, 4335, 4338, 4340, 4332, 4336, 4339, 4347, 4354, 4356, + 4358, 4361, 4351, 4349, 4364, 4365, 4370, 4362, 4368, 4372, + 4373, 4376, 4377, 4379, 4382, 4383, 4385, 4384, 4386, 4387, + 4388, 4390, 4395, 4400, 4402, 4401, 4403, 4404, 4405, 4406, - 4407, 4408, 4413, 4409, 4422, 4425, 4415, 4433, 4434, 5748, - 4436, 5748, 4438, 4424, 4440, 4426, 5748, 4428, 4441, 4443, - 4444, 4446, 4447, 4450, 4452, 5748, 4457, 4449, 4454, 4461, - 5748, 4466, 4470, 4458, 4462, 4472, 4473, 4474, 4477, 4478, - 4481, 4483, 4485, 4493, 4486, 4490, 4489, 4491, 4497, 4498, - 4501, 4507, 4503, 4510, 4514, 5748, 4511, 5748, 4515, 4516, - 4519, 4520, 4521, 4522, 4525, 5748, 5748, 4523, 4529, 4528, - 4533, 4534, 4537, 4541, 5748, 4538, 4546, 4555, 4547, 5748, - 4539, 4549, 4557, 5748, 4551, 4558, 4561, 4571, 4562, 4573, - 4574, 4564, 4578, 5748, 5748, 5748, 5748, 4582, 4566, 4585, + 4408, 4412, 4413, 4416, 5765, 4414, 4418, 4419, 4422, 4424, + 4430, 4434, 4437, 4444, 4445, 5765, 4447, 5765, 4449, 4433, + 4441, 4453, 5765, 4454, 4455, 4456, 4457, 4458, 4459, 4462, + 4460, 5765, 4464, 4465, 4466, 4469, 5765, 4476, 4471, 4481, + 4482, 4483, 4486, 4484, 4488, 4489, 4491, 4493, 4495, 4503, + 4496, 4498, 4504, 4507, 4508, 4509, 4511, 4515, 4519, 4520, + 4525, 5765, 4521, 5765, 4526, 4527, 4530, 4531, 4532, 4533, + 4536, 5765, 5765, 4534, 4538, 4544, 4545, 4539, 4548, 4552, + 5765, 4549, 4558, 4566, 4550, 5765, 4559, 4561, 4568, 5765, + 4570, 4569, 4571, 4573, 4574, 4577, 4580, 4583, 4587, 5765, - 4580, 4586, 4587, 4589, 4591, 4592, 5748, 4595, 5748, 5748, - 4597, 4600, 4601, 4603, 4604, 4606, 4609, 4611, 5748, 4613, - 4616, 4617, 4614, 4624, 4627, 4568, 4630, 4620, 4631, 4639, - 4632, 4640, 4636, 4642, 4644, 4646, 5748, 5748, 4648, 4653, - 4654, 4656, 4658, 4659, 4666, 4665, 4662, 4668, 4670, 4671, - 4673, 4672, 5748, 4675, 4683, 5748, 4676, 5748, 4682, 4689, - 4674, 4690, 4691, 4693, 4695, 4697, 5748, 5748, 4698, 4681, - 4699, 4705, 4707, 4710, 4708, 4712, 4709, 5748, 4714, 5748, - 4713, 4716, 4722, 4715, 4730, 4731, 4738, 4735, 4736, 4737, - 5748, 4739, 4741, 5748, 4743, 4745, 4746, 5748, 4749, 4752, + 5765, 5765, 5765, 4588, 4584, 4591, 4592, 4594, 4599, 4600, + 4597, 4598, 5765, 4602, 5765, 5765, 4610, 4611, 4603, 4614, + 4604, 4618, 4620, 4622, 5765, 4621, 4623, 4626, 4624, 4633, + 4635, 4638, 4641, 4625, 4640, 4648, 4644, 4650, 4647, 4652, + 4654, 4656, 5765, 5765, 4659, 4661, 4663, 4670, 4668, 4671, + 4680, 4675, 4677, 4678, 4681, 4683, 4684, 4685, 5765, 4688, + 4692, 5765, 4686, 5765, 4694, 4700, 4690, 4701, 4702, 4703, + 4706, 4704, 5765, 5765, 4709, 4710, 4715, 4717, 4718, 4720, + 4721, 4723, 4719, 5765, 4724, 5765, 4725, 4727, 4733, 4726, + 4741, 4746, 4748, 4744, 4747, 4749, 5765, 4750, 4752, 5765, - 4756, 5748, 4758, 4760, 4762, 5748, 4766, 5748, 4753, 4769, - 5748, 4770, 4771, 5748, 4775, 4777, 4778, 4779, 5748, 4780, - 5748, 4782, 4784, 4785, 4788, 4789, 4794, 4795, 4791, 4796, - 4803, 4800, 4801, 5748, 5748, 4812, 4807, 4813, 4814, 4815, - 4822, 4817, 4819, 4825, 5748, 5748, 4826, 5748, 4820, 4829, - 5748, 4818, 4835, 4827, 4836, 4837, 4839, 4840, 4847, 4848, - 4849, 4862, 4850, 4852, 4863, 4865, 4870, 4872, 4858, 4875, - 4868, 4853, 4876, 4877, 4878, 5748, 4882, 4883, 4884, 5748, - 4890, 4887, 4892, 4895, 5748, 4904, 4896, 4899, 4901, 5748, - 4893, 4907, 4909, 4912, 4914, 4923, 4915, 4916, 5748, 5748, + 4753, 4756, 4758, 5765, 4760, 4763, 4767, 5765, 4769, 4771, + 4772, 5765, 4779, 5765, 4764, 4782, 5765, 4774, 4785, 5765, + 4788, 4790, 4780, 4791, 5765, 4792, 5765, 4793, 4796, 4797, + 4800, 4801, 4803, 4805, 4806, 4807, 4814, 4812, 4815, 5765, + 5765, 4823, 4809, 4820, 4825, 4827, 4834, 4826, 4831, 4830, + 5765, 5765, 4836, 5765, 4838, 4839, 5765, 4837, 4844, 4843, + 4848, 4849, 4850, 4852, 4855, 4856, 4857, 4864, 4859, 4869, + 4871, 4873, 4876, 4879, 4881, 4882, 4883, 4884, 4885, 4886, + 4888, 5765, 4890, 4892, 4891, 5765, 4899, 4893, 4902, 4907, + 5765, 4905, 4911, 4913, 4914, 5765, 4915, 4917, 4921, 4918, - 5748, 4919, 4927, 5748, 4931, 4918, 5748, 4932, 4933, 5748, - 5748, 4934, 4935, 4920, 4943, 5748, 4938, 5748, 4939, 5748, - 4942, 4946, 4948, 4952, 5748, 4953, 4962, 5748, 4955, 4957, - 4965, 4967, 4968, 4970, 4969, 5748, 4977, 4973, 4975, 4982, - 4972, 4979, 4986, 4983, 4993, 4984, 4995, 5748, 4985, 4992, - 4996, 5748, 4998, 5748, 4999, 5002, 5006, 5005, 5003, 5008, - 5013, 5017, 5011, 5024, 5020, 5748, 5026, 5029, 5748, 5030, - 5748, 5032, 5748, 5018, 5033, 5036, 5035, 5748, 5042, 5038, - 5043, 5044, 5748, 5045, 5047, 5054, 5748, 5748, 5050, 5048, - 5057, 5060, 5062, 5065, 5067, 5068, 5069, 5079, 5071, 5074, + 4919, 4930, 4926, 4928, 5765, 5765, 5765, 4931, 4941, 5765, + 4943, 4932, 5765, 4935, 4945, 5765, 5765, 4938, 4946, 4947, + 4954, 5765, 4949, 5765, 4951, 5765, 4953, 4959, 4965, 4960, + 5765, 4968, 4970, 5765, 4976, 4978, 4980, 4981, 4962, 4983, + 4984, 5765, 4991, 4987, 4988, 4995, 4986, 4996, 4998, 4997, + 5005, 5000, 5007, 5765, 5001, 5008, 5009, 5765, 5011, 5765, + 5013, 5014, 4952, 5012, 5016, 5018, 5022, 5019, 5028, 5034, + 5031, 5765, 5036, 5039, 5765, 5040, 5765, 5042, 5765, 5043, + 5044, 5046, 5047, 5765, 5049, 5045, 5051, 5053, 5765, 5055, + 5057, 5064, 5765, 5765, 5068, 5058, 5067, 5070, 5075, 5077, - 5072, 5076, 5080, 5087, 5748, 5748, 5748, 5081, 5085, 5097, - 5095, 5096, 5104, 5100, 5748, 5101, 5102, 5103, 5114, 5109, - 5111, 5748, 5113, 5115, 5116, 5748, 5120, 5124, 5128, 5117, - 5130, 5137, 5139, 5141, 5142, 5748, 5144, 5748, 5748, 5129, - 5748, 5132, 5145, 5146, 5149, 5748, 5152, 5155, 5153, 5156, - 5158, 5748, 5159, 5161, 5748, 5748, 5163, 5748, 5171, 5172, - 5160, 5181, 5164, 5179, 5183, 5180, 5748, 5184, 5186, 5188, - 5189, 5190, 5748, 5191, 5192, 5194, 5195, 5198, 5197, 5200, - 5202, 5203, 5748, 5748, 5205, 5207, 5748, 5748, 5210, 5222, - 5224, 5748, 5748, 5748, 5227, 5748, 5230, 5234, 5238, 5242, + 5078, 5079, 5081, 5090, 5083, 5082, 5085, 5087, 5097, 5091, + 5765, 5765, 5765, 5098, 5093, 5109, 5107, 5108, 5118, 5099, + 5765, 5114, 5115, 5104, 5122, 5121, 5125, 5765, 5127, 5128, + 5131, 5765, 5130, 5133, 5136, 5134, 5137, 5144, 5146, 5150, + 5151, 5765, 5153, 5765, 5765, 5135, 5765, 5155, 5157, 5158, + 5159, 5765, 5162, 5164, 5163, 5165, 5167, 5765, 5168, 5170, + 5765, 5765, 5172, 5765, 5182, 5184, 5176, 5191, 5186, 5188, + 5193, 5194, 5765, 5195, 5197, 5200, 5201, 5202, 5765, 5203, + 5204, 5206, 5207, 5210, 5209, 5212, 5214, 5216, 5765, 5765, + 5218, 5219, 5765, 5765, 5234, 5237, 5169, 5765, 5765, 5765, - 5233, 5748, 5244, 5241, 5246, 5748, 5245, 5248, 5748, 5748, - 5249, 5212, 5251, 5252, 5253, 5748, 5254, 5256, 5257, 5263, - 5267, 5264, 5270, 5269, 5277, 5286, 5273, 5282, 5283, 5284, - 5285, 5287, 5292, 5288, 5748, 5748, 5295, 5748, 5748, 5300, - 5302, 5308, 5310, 5312, 5314, 5316, 5748, 5296, 5318, 5303, - 5748, 5319, 5321, 5322, 5326, 5324, 5327, 5325, 5330, 5748, - 5748, 5331, 5332, 5333, 5341, 5334, 5748, 5343, 5350, 5347, - 5348, 5345, 5351, 5354, 5748, 5356, 5748, 5748, 5748, 5748, - 5748, 5748, 5748, 5748, 5355, 5748, 5363, 5366, 5748, 5357, - 5367, 5368, 5373, 5360, 5748, 5375, 5377, 5378, 5379, 5382, + 5240, 5765, 5242, 5246, 5250, 5254, 5220, 5765, 5256, 5231, + 5245, 5765, 5253, 5261, 5765, 5765, 5257, 5262, 5263, 5264, + 5265, 5765, 5266, 5268, 5270, 5275, 5279, 5272, 5276, 5283, + 5291, 5294, 5286, 5289, 5293, 5296, 5297, 5298, 5300, 5303, + 5765, 5765, 5306, 5765, 5765, 5310, 5313, 5316, 5319, 5321, + 5323, 5325, 5765, 5326, 5328, 5329, 5765, 5331, 5333, 5330, + 5334, 5336, 5337, 5339, 5341, 5765, 5765, 5342, 5343, 5344, + 5351, 5353, 5765, 5355, 5362, 5359, 5361, 5357, 5363, 5364, + 5765, 5367, 5765, 5765, 5765, 5765, 5765, 5765, 5765, 5765, + 5365, 5765, 5375, 5378, 5765, 5369, 5379, 5383, 5384, 5372, - 5384, 5386, 5387, 5389, 5392, 5390, 5394, 5391, 5396, 5748, - 5748, 5400, 5401, 5403, 5395, 5411, 5417, 5420, 5423, 5405, - 5413, 5425, 5426, 5427, 5429, 5430, 5440, 5435, 5436, 5438, - 5439, 5442, 5748, 5444, 5748, 5443, 5748, 5748, 5447, 5450, - 5452, 5448, 5463, 5468, 5455, 5453, 5464, 5471, 5748, 5465, - 5748, 5472, 5473, 5748, 5474, 5475, 5476, 5478, 5479, 5481, - 5482, 5484, 5748, 5488, 5490, 5497, 5493, 5505, 5501, 5503, - 5507, 5510, 5504, 5517, 5513, 5520, 5748, 5521, 5514, 5522, - 5516, 5524, 5532, 5527, 5528, 5530, 5748, 5537, 5538, 5534, - 5540, 5542, 5544, 5548, 5551, 5545, 5748, 5552, 5553, 5555, + 5765, 5385, 5389, 5390, 4665, 5391, 5393, 5396, 5397, 5399, + 5398, 5401, 5403, 5402, 5405, 5765, 5765, 5407, 5410, 5412, + 5413, 5420, 5427, 5432, 5434, 5424, 5415, 5436, 5437, 5440, + 5429, 5438, 5447, 5444, 5446, 5449, 5450, 5452, 5765, 5455, + 5765, 5456, 5765, 5765, 5460, 5461, 5457, 5463, 5473, 5477, + 5464, 5468, 5472, 5476, 5765, 5479, 5765, 5480, 5483, 5765, + 5484, 5485, 5486, 5488, 5489, 5492, 5493, 5495, 5765, 5496, + 5497, 5507, 5503, 5515, 5512, 5517, 5518, 5519, 5510, 5526, + 5525, 5528, 5765, 5531, 5521, 5532, 5533, 5534, 5542, 5537, + 5538, 5543, 5765, 5546, 5548, 5549, 5547, 5550, 5555, 5558, - 5562, 5564, 5566, 5560, 5568, 5570, 5572, 5573, 5580, 5576, - 5581, 5582, 5584, 5585, 5748, 5591, 5586, 5748, 5592, 5593, - 5594, 5595, 5599, 5748, 5603, 5596, 5606, 5607, 5610, 5611, - 5748, 5617, 5620, 5621, 5748, 5622, 5748, 5748, 5624, 5612, - 5623, 5633, 5635, 5748, 5748, 5748, 5656, 5663, 5670, 5677, - 5684, 88, 5691, 5698, 5705, 5712, 5719, 5726, 5733, 5740 + 5562, 5561, 5765, 5563, 5564, 5571, 5572, 5575, 5577, 5578, + 5579, 5581, 5583, 5584, 5592, 5587, 5593, 5595, 5596, 5597, + 5765, 5603, 5599, 5765, 5604, 5605, 5606, 5607, 5611, 5765, + 5620, 5608, 5613, 5621, 5624, 5628, 5765, 5630, 5634, 5631, + 5765, 5636, 5765, 5765, 5637, 5639, 5640, 5644, 5646, 5765, + 5765, 5765, 5673, 5680, 5687, 5694, 5701, 88, 5708, 5715, + 5722, 5729, 5736, 5743, 5750, 5757 } ; -static const flex_int16_t yy_def[2961] = +static const flex_int16_t yy_def[2967] = { 0, - 2946, 1, 2947, 2947, 2948, 2948, 2949, 2949, 2950, 2950, - 2951, 2951, 2946, 2952, 2946, 2946, 2946, 2946, 2953, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2954, 2946, 2946, 2946, 2954, 2955, 2946, 2946, - 2946, 2955, 2956, 2946, 2946, 2946, 2946, 2956, 2957, 2946, - 2946, 2946, 2957, 2958, 2946, 2959, 2946, 2958, 2958, 2952, - 2952, 2946, 2960, 2953, 2960, 2953, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 1, 2953, 2953, 2954, 2954, 2955, 2955, 2956, 2956, + 2957, 2957, 2952, 2958, 2952, 2952, 2952, 2952, 2959, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2960, 2952, 2952, 2952, 2960, 2961, 2952, 2952, + 2952, 2961, 2962, 2952, 2952, 2952, 2952, 2962, 2963, 2952, + 2952, 2952, 2963, 2964, 2952, 2965, 2952, 2964, 2964, 2958, + 2958, 2952, 2966, 2959, 2966, 2959, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2954, 2954, 2955, 2955, 2956, 2956, 2946, 2957, 2957, 2958, - 2958, 2959, 2959, 2958, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2960, 2960, 2961, 2961, 2962, 2962, 2952, 2963, 2963, 2964, + 2964, 2965, 2965, 2964, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2958, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2964, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2958, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2952, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2952, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2964, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, - 2952, 2952, 2952, 2946, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2946, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2946, 2952, 2958, 2952, 2952, 2952, 2952, 2952, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2952, 2958, 2958, 2958, + 2958, 2958, 2958, 2952, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2952, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2952, 2958, 2964, 2958, 2958, 2958, 2958, 2958, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2958, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2946, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2946, - 2946, 2952, 2946, 2946, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2964, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2952, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2952, 2958, 2952, + 2952, 2958, 2952, 2952, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2952, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2952, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2952, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2958, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2946, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2946, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2946, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2964, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2952, 2958, 2958, 2952, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2952, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2952, 2958, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2946, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2946, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2946, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2958, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2952, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2952, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2952, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2952, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2952, 2958, 2958, + 2964, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2946, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2946, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2946, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, 2952, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2952, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2952, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2952, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2952, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2952, 2958, 2958, 2958, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2946, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2946, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, 2952, - 2952, 2946, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2952, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2952, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2952, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2952, 2958, 2958, + 2958, 2958, 2958, 2952, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2952, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2946, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2952, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2952, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2952, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, - 2952, 2952, 2952, 2946, 2952, 2946, 2952, 2952, 2952, 2952, - 2952, 2946, 2952, 2946, 2952, 2952, 2952, 2952, 2946, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, 2952, - 2946, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2958, 2958, 2958, 2958, 2958, 2958, 2952, 2958, 2952, 2958, + 2958, 2958, 2958, 2958, 2952, 2958, 2952, 2958, 2958, 2958, + 2958, 2952, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2952, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2952, 2958, + 2958, 2958, 2958, 2952, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2946, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2946, 2952, 2946, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2946, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2952, - 2952, 2952, 2952, 2952, 2946, 2952, 2946, 2952, 2952, 2952, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2952, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2952, 2958, 2952, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2952, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2952, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2952, 2958, 2958, 2958, 2958, 2958, 2958, 2952, 2958, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2952, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2952, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2952, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2952, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, - 2946, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2946, 2946, - 2952, 2952, 2952, 2946, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2952, - 2952, 2952, 2952, 2946, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2952, + 2958, 2958, 2958, 2958, 2952, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2952, 2952, 2958, 2958, 2958, 2952, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2952, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2952, 2958, 2958, 2958, 2958, 2958, 2958, 2952, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2952, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, - 2952, 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, - 2946, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2946, 2952, 2946, 2952, 2952, 2952, 2946, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2946, 2946, 2952, 2946, 2952, 2952, - 2952, 2946, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2946, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2946, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2946, 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2946, + 2958, 2958, 2952, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2952, 2958, 2958, 2958, 2952, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2952, 2958, 2952, 2958, + 2958, 2958, 2952, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2952, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2952, + 2952, 2958, 2952, 2958, 2958, 2958, 2952, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2952, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2952, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2952, 2958, 2958, 2958, - 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2946, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, 2946, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2946, 2952, - 2952, 2952, 2952, 2952, 2952, 2946, 2946, 2952, 2946, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2946, 2946, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2958, 2958, 2952, 2958, 2952, 2958, 2958, 2958, 2958, 2958, + 2952, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2952, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2952, 2958, 2958, 2958, 2958, 2958, 2958, + 2952, 2958, 2958, 2958, 2952, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2952, 2958, 2958, 2958, 2958, 2958, + 2958, 2952, 2952, 2958, 2952, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2952, 2952, 2958, 2958, 2958, 2958, - 2952, 2952, 2952, 2946, 2952, 2952, 2952, 2946, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2946, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2946, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, 2952, 2952, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2952, + 2958, 2958, 2958, 2952, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2952, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2952, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2952, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2952, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2952, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, - 2952, 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2946, 2952, 2952, - 2952, 2952, 2952, 2946, 2952, 2952, 2952, 2952, 2952, 2946, - 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, 2952, 2952, - 2952, 2946, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, 2952, + 2952, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2952, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2952, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2952, 2958, 2952, 2958, 2958, 2958, 2958, 2958, 2952, + 2958, 2958, 2958, 2958, 2958, 2952, 2958, 2958, 2958, 2958, + 2952, 2958, 2958, 2958, 2958, 2958, 2958, 2952, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2952, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2952, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, - 2952, 2946, 2946, 2952, 2952, 2952, 2952, 2952, 2946, 2952, - 2952, 2952, 2952, 2952, 2946, 2946, 2952, 2946, 2952, 2946, - 2952, 2952, 2946, 2946, 2952, 2952, 2952, 2952, 2952, 2946, - 2952, 2946, 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2952, - 2952, 2946, 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, - 2946, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2946, 2952, + 2958, 2952, 2958, 2958, 2958, 2958, 2958, 2952, 2952, 2958, + 2958, 2958, 2958, 2958, 2952, 2958, 2958, 2958, 2958, 2958, + 2952, 2952, 2958, 2952, 2958, 2952, 2958, 2958, 2952, 2952, + 2958, 2958, 2958, 2958, 2958, 2952, 2958, 2952, 2958, 2958, + 2958, 2958, 2958, 2952, 2958, 2958, 2958, 2952, 2958, 2958, + 2958, 2958, 2952, 2958, 2958, 2958, 2952, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2946, - 2952, 2946, 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, 2952, - 2946, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2946, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2946, 2946, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, 2952, 2946, - 2952, 2952, 2952, 2946, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2946, 2946, 2946, 2946, 2952, 2952, 2952, + 2958, 2958, 2958, 2958, 2952, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2952, 2958, 2952, 2958, 2958, + 2958, 2958, 2952, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2952, 2958, 2958, 2958, 2958, 2952, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2952, 2958, 2952, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2952, 2952, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2952, 2958, 2958, 2958, 2958, 2952, 2958, 2958, 2958, 2952, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2946, 2946, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2946, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2946, 2946, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2946, 2952, 2952, 2946, 2952, 2946, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2946, 2946, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2946, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2946, 2952, 2952, 2946, 2952, 2952, 2952, 2946, 2952, 2952, + 2952, 2952, 2952, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2952, 2958, 2952, 2952, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2952, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2952, 2952, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2952, 2958, + 2958, 2952, 2958, 2952, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2952, 2952, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2952, 2958, 2952, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2952, 2958, 2958, 2952, - 2952, 2946, 2952, 2952, 2952, 2946, 2952, 2946, 2952, 2952, - 2946, 2952, 2952, 2946, 2952, 2952, 2952, 2952, 2946, 2952, - 2946, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2946, 2946, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2946, 2946, 2952, 2946, 2952, 2952, - 2946, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, 2946, - 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, 2952, 2946, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2946, 2946, + 2958, 2958, 2958, 2952, 2958, 2958, 2958, 2952, 2958, 2958, + 2958, 2952, 2958, 2952, 2958, 2958, 2952, 2958, 2958, 2952, + 2958, 2958, 2958, 2958, 2952, 2958, 2952, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2952, + 2952, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2952, 2952, 2958, 2952, 2958, 2958, 2952, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2952, 2958, 2958, 2958, 2952, 2958, 2958, 2958, 2958, + 2952, 2958, 2958, 2958, 2958, 2952, 2958, 2958, 2958, 2958, - 2946, 2952, 2952, 2946, 2952, 2952, 2946, 2952, 2952, 2946, - 2946, 2952, 2952, 2952, 2952, 2946, 2952, 2946, 2952, 2946, - 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2946, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2952, - 2952, 2946, 2952, 2946, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2946, 2952, - 2946, 2952, 2946, 2952, 2952, 2952, 2952, 2946, 2952, 2952, - 2952, 2952, 2946, 2952, 2952, 2952, 2946, 2946, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2958, 2958, 2958, 2958, 2952, 2952, 2952, 2958, 2958, 2952, + 2958, 2958, 2952, 2958, 2958, 2952, 2952, 2958, 2958, 2958, + 2958, 2952, 2958, 2952, 2958, 2952, 2958, 2958, 2958, 2958, + 2952, 2958, 2958, 2952, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2952, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2952, 2958, 2958, 2958, 2952, 2958, 2952, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2952, 2958, 2958, 2952, 2958, 2952, 2958, 2952, 2958, + 2958, 2958, 2958, 2952, 2958, 2958, 2958, 2958, 2952, 2958, + 2958, 2958, 2952, 2952, 2958, 2958, 2958, 2958, 2958, 2958, - 2952, 2952, 2952, 2952, 2946, 2946, 2946, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, 2952, 2952, - 2952, 2946, 2952, 2952, 2952, 2946, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2946, 2946, 2952, - 2946, 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, 2952, - 2952, 2946, 2952, 2952, 2946, 2946, 2952, 2946, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, - 2952, 2952, 2946, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2946, 2946, 2952, 2952, 2946, 2946, 2952, 2952, - 2952, 2946, 2946, 2946, 2952, 2946, 2952, 2952, 2952, 2952, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2952, 2952, 2952, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2952, 2958, 2958, 2958, 2958, 2958, 2958, 2952, 2958, 2958, + 2958, 2952, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2952, 2958, 2952, 2952, 2958, 2952, 2958, 2958, 2958, + 2958, 2952, 2958, 2958, 2958, 2958, 2958, 2952, 2958, 2958, + 2952, 2952, 2958, 2952, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2952, 2958, 2958, 2958, 2958, 2958, 2952, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2952, 2952, + 2958, 2958, 2952, 2952, 2958, 2958, 2958, 2952, 2952, 2952, - 2952, 2946, 2952, 2952, 2952, 2946, 2952, 2952, 2946, 2946, - 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2946, 2946, 2952, 2946, 2946, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, - 2946, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2946, - 2946, 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2946, 2952, 2946, 2946, 2946, 2946, - 2946, 2946, 2946, 2946, 2952, 2946, 2952, 2952, 2946, 2952, - 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, 2952, 2952, + 2958, 2952, 2958, 2958, 2958, 2958, 2958, 2952, 2958, 2958, + 2958, 2952, 2958, 2958, 2952, 2952, 2958, 2958, 2958, 2958, + 2958, 2952, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2952, 2952, 2958, 2952, 2952, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2952, 2958, 2958, 2958, 2952, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2952, 2952, 2958, 2958, 2958, + 2958, 2958, 2952, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2952, 2958, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2958, 2952, 2958, 2958, 2952, 2958, 2958, 2958, 2958, 2958, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2946, - 2946, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2946, 2952, 2946, 2952, 2946, 2946, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2946, 2952, - 2946, 2952, 2952, 2946, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2946, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2952, + 2952, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2952, 2952, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2952, 2958, + 2952, 2958, 2952, 2952, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2952, 2958, 2952, 2958, 2958, 2952, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2952, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2952, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2952, 2958, 2958, 2958, 2958, 2958, 2958, 2958, - 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, - 2952, 2952, 2952, 2952, 2946, 2952, 2952, 2946, 2952, 2952, - 2952, 2952, 2952, 2946, 2952, 2952, 2952, 2952, 2952, 2952, - 2946, 2952, 2952, 2952, 2946, 2952, 2946, 2946, 2952, 2952, - 2952, 2952, 2952, 2946, 2946, 0, 2946, 2946, 2946, 2946, - 2946, 2946, 2946, 2946, 2946, 2946, 2946, 2946, 2946, 2946 + 2958, 2958, 2952, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, 2958, + 2952, 2958, 2958, 2952, 2958, 2958, 2958, 2958, 2958, 2952, + 2958, 2958, 2958, 2958, 2958, 2958, 2952, 2958, 2958, 2958, + 2952, 2958, 2952, 2952, 2958, 2958, 2958, 2958, 2958, 2952, + 2952, 0, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952 } ; -static const flex_int16_t yy_nxt[5789] = +static const flex_int16_t yy_nxt[5806] = { 0, 14, 15, 16, 17, 18, 19, 18, 14, 14, 14, 14, 14, 18, 20, 21, 22, 23, 24, 25, 26, @@ -1575,461 +1578,464 @@ static const flex_int16_t yy_nxt[5789] = 71, 909, 911, 912, 914, 71, 71, 917, 71, 915, 71, 71, 910, 71, 916, 71, 71, 71, 913, 919, 920, 921, 71, 71, 922, 923, 71, 918, 924, 71, - 71, 925, 929, 71, 71, 930, 71, 71, 927, 71, - 71, 71, 71, 928, 71, 935, 937, 71, 933, 938, + 71, 925, 71, 931, 929, 71, 71, 71, 927, 930, + 71, 71, 71, 928, 71, 936, 934, 71, 71, 938, - 71, 926, 931, 936, 71, 932, 71, 71, 71, 940, - 71, 71, 939, 71, 934, 71, 71, 951, 941, 946, - 948, 71, 144, 71, 71, 71, 942, 943, 71, 71, - 944, 945, 71, 949, 952, 71, 947, 71, 956, 71, - 950, 953, 955, 954, 958, 959, 71, 71, 71, 957, - 71, 71, 71, 71, 968, 71, 961, 960, 963, 71, - 71, 970, 71, 972, 973, 71, 71, 71, 962, 71, - 71, 964, 966, 969, 965, 967, 71, 71, 976, 981, - 974, 71, 971, 71, 975, 71, 977, 71, 978, 71, - 980, 71, 71, 71, 982, 985, 987, 71, 979, 983, + 932, 926, 71, 937, 71, 933, 939, 71, 71, 941, + 71, 71, 71, 71, 943, 935, 71, 71, 71, 940, + 949, 947, 71, 942, 952, 71, 71, 71, 944, 71, + 71, 946, 945, 957, 953, 950, 948, 951, 954, 71, + 71, 955, 71, 956, 71, 959, 960, 71, 71, 71, + 71, 71, 71, 958, 71, 969, 71, 962, 964, 971, + 71, 71, 961, 71, 963, 71, 973, 975, 71, 965, + 970, 967, 71, 966, 968, 974, 71, 71, 71, 982, + 972, 71, 979, 71, 981, 71, 71, 976, 977, 983, + 71, 71, 986, 71, 988, 71, 978, 71, 71, 980, - 984, 71, 71, 990, 151, 71, 71, 989, 71, 993, - 992, 988, 986, 71, 71, 71, 71, 71, 71, 71, - 991, 996, 71, 71, 1008, 71, 71, 1011, 71, 1009, - 71, 71, 999, 71, 995, 994, 997, 1013, 71, 998, - 1001, 1010, 1000, 71, 71, 1015, 1002, 71, 1003, 1016, - 71, 1018, 1004, 1014, 1005, 1012, 1019, 71, 71, 1006, - 142, 1017, 71, 71, 1007, 1022, 1021, 71, 1023, 71, - 71, 71, 1020, 71, 1025, 1033, 1030, 1031, 1024, 1029, - 71, 1026, 71, 71, 1034, 1028, 1032, 71, 71, 71, - 71, 1027, 71, 71, 71, 71, 71, 1049, 71, 1046, + 71, 991, 151, 71, 985, 990, 71, 71, 984, 71, + 993, 71, 994, 987, 71, 989, 71, 71, 992, 71, + 71, 997, 71, 71, 1009, 71, 71, 71, 998, 995, + 1010, 1012, 71, 1000, 996, 71, 71, 144, 71, 1014, + 1001, 999, 1011, 1002, 71, 1033, 71, 1003, 71, 1004, + 1013, 1015, 1016, 1005, 71, 1006, 71, 71, 1019, 1017, + 1007, 1022, 1018, 1020, 71, 1008, 71, 71, 71, 71, + 1021, 71, 1024, 1026, 71, 71, 71, 142, 71, 1031, + 1032, 1023, 1025, 1027, 1030, 71, 71, 1035, 1029, 1034, + 71, 71, 1028, 71, 71, 1037, 71, 1036, 71, 71, - 1055, 71, 71, 1050, 1045, 71, 71, 71, 1036, 1047, - 1035, 1037, 71, 1038, 1048, 1051, 71, 71, 1039, 1052, - 1040, 1056, 1057, 71, 71, 1053, 1041, 1058, 71, 71, - 71, 1042, 1043, 1061, 1062, 1054, 71, 71, 1044, 71, - 71, 71, 1059, 1060, 1067, 71, 1064, 71, 71, 1065, - 71, 71, 71, 1070, 1068, 1063, 71, 1066, 71, 71, - 71, 71, 71, 71, 71, 71, 1069, 1075, 1076, 1077, - 1072, 1071, 1073, 1074, 1079, 71, 71, 1078, 1080, 1081, - 71, 71, 71, 71, 1082, 71, 71, 71, 1087, 71, - 1084, 1088, 1089, 71, 1083, 71, 1091, 1086, 1090, 1085, + 71, 1047, 71, 1046, 71, 1050, 71, 1051, 1038, 71, + 1039, 1049, 1048, 71, 1052, 1040, 71, 1041, 71, 1054, + 1056, 71, 71, 1042, 1058, 71, 1057, 1053, 1043, 1044, + 71, 71, 71, 1062, 1059, 1045, 71, 1055, 71, 71, + 71, 1063, 71, 71, 1060, 1061, 1068, 71, 71, 1065, + 71, 1066, 71, 71, 71, 1071, 1069, 1064, 71, 1067, + 71, 71, 71, 71, 71, 71, 71, 1070, 1073, 1078, + 1076, 1077, 1075, 1072, 1080, 71, 71, 71, 1074, 1082, + 71, 1079, 1081, 71, 71, 71, 71, 71, 71, 71, + 1085, 1088, 1089, 1090, 1091, 1083, 1084, 71, 1092, 1087, - 1092, 71, 1095, 71, 71, 1101, 71, 1096, 71, 1094, - 71, 71, 1097, 1099, 1093, 1098, 71, 1100, 71, 1105, - 71, 1107, 1102, 71, 71, 71, 71, 71, 71, 1103, - 71, 1109, 71, 1104, 71, 1110, 71, 71, 1108, 1112, - 1106, 1113, 1115, 71, 1114, 1111, 71, 71, 1116, 71, - 71, 1121, 71, 1118, 1122, 71, 1120, 71, 1117, 71, - 71, 1123, 71, 1125, 71, 1119, 71, 1126, 71, 71, - 1132, 71, 1130, 1133, 71, 2946, 71, 1124, 71, 71, - 1127, 71, 71, 1128, 1131, 71, 1134, 1135, 1129, 1137, - 1136, 1140, 1138, 71, 71, 71, 71, 71, 1139, 1141, + 1093, 1086, 1094, 71, 1096, 71, 71, 71, 1098, 1097, + 71, 1099, 71, 71, 71, 1100, 71, 1106, 71, 1095, + 71, 71, 1108, 71, 71, 1102, 71, 1101, 71, 1104, + 71, 1110, 1103, 1105, 71, 71, 1109, 1112, 1111, 71, + 1107, 71, 71, 71, 1114, 71, 1115, 1119, 1117, 71, + 1118, 1113, 71, 71, 1123, 1120, 1124, 71, 1116, 1122, + 71, 71, 71, 71, 71, 1128, 1127, 71, 1121, 71, + 1125, 71, 71, 71, 71, 1132, 1134, 1135, 71, 1136, + 1126, 71, 71, 71, 71, 1129, 1133, 71, 1130, 1137, + 1139, 1131, 1138, 71, 1142, 71, 71, 71, 1141, 1140, - 1142, 71, 1143, 71, 71, 1144, 71, 1146, 71, 1147, - 71, 71, 71, 71, 1152, 71, 1153, 71, 1155, 1148, - 71, 1145, 71, 1150, 1156, 71, 71, 71, 1149, 1160, - 1154, 1151, 71, 71, 71, 71, 1157, 71, 71, 1159, - 1158, 1166, 71, 1162, 71, 71, 71, 71, 1172, 71, - 1161, 1170, 71, 71, 1163, 1187, 71, 1165, 1167, 1169, - 1168, 1171, 1164, 1174, 1175, 71, 71, 1177, 71, 71, - 71, 1176, 71, 1173, 71, 71, 71, 1178, 71, 71, - 1181, 71, 1179, 71, 71, 71, 1184, 71, 1180, 71, - 71, 1182, 2946, 1191, 71, 71, 1185, 1183, 1188, 1198, + 71, 71, 1143, 1144, 71, 71, 71, 71, 71, 1148, + 1145, 1147, 71, 1151, 1146, 1149, 71, 1154, 1150, 1155, + 1152, 71, 71, 71, 71, 71, 71, 1157, 1158, 71, + 71, 71, 71, 1162, 71, 1153, 1156, 71, 71, 71, + 1160, 1164, 1161, 1159, 1168, 71, 71, 71, 71, 1163, + 71, 71, 71, 1165, 71, 1172, 2952, 1173, 1167, 1178, + 1169, 1176, 1170, 1166, 1171, 1174, 71, 71, 1177, 71, + 71, 1175, 1179, 71, 71, 71, 71, 71, 1180, 71, + 71, 1183, 71, 1181, 71, 1189, 71, 1186, 71, 1182, + 71, 71, 1184, 71, 71, 71, 71, 1187, 1185, 1193, - 1193, 71, 1186, 1189, 1190, 71, 1197, 71, 1199, 1194, - 1192, 1195, 71, 71, 1196, 1201, 71, 71, 71, 71, - 71, 1200, 1204, 71, 1206, 1203, 1209, 71, 71, 71, - 71, 1202, 71, 1210, 1207, 1211, 71, 1205, 71, 1208, - 71, 1213, 1214, 71, 71, 71, 71, 1216, 71, 1212, - 71, 71, 1215, 71, 71, 1217, 71, 1219, 1221, 71, - 1222, 1220, 1226, 1218, 71, 71, 71, 1231, 1230, 1223, - 71, 71, 1225, 71, 1224, 71, 71, 71, 71, 1227, - 71, 1235, 1237, 1233, 1232, 1228, 1229, 1238, 71, 1236, - 71, 1234, 71, 1242, 1240, 71, 71, 1239, 71, 1252, + 1200, 1195, 1190, 1188, 71, 1199, 1192, 71, 1191, 71, + 1196, 71, 1197, 71, 1194, 1198, 1201, 71, 71, 71, + 1203, 1202, 1205, 1206, 71, 71, 71, 1211, 71, 1204, + 1208, 71, 71, 71, 71, 1209, 1212, 1213, 1207, 1215, + 71, 71, 71, 71, 1216, 1210, 71, 71, 71, 71, + 1217, 71, 71, 1214, 71, 71, 1223, 1218, 1219, 1221, + 71, 71, 71, 1222, 1224, 1220, 1228, 71, 71, 71, + 1225, 71, 1233, 1227, 71, 1226, 1229, 1232, 71, 1235, + 71, 71, 1230, 1234, 1239, 1237, 71, 1231, 71, 1240, + 71, 71, 71, 1238, 1236, 71, 1244, 71, 71, 1254, - 1251, 71, 71, 1241, 71, 1250, 71, 1253, 1249, 1243, - 1254, 71, 1244, 1245, 1255, 71, 1256, 1246, 71, 71, - 71, 71, 1258, 1247, 1257, 71, 1260, 1248, 71, 71, - 71, 1261, 71, 1262, 71, 71, 1259, 71, 1263, 1265, - 1267, 71, 71, 1270, 1271, 2946, 1272, 1264, 1268, 71, - 71, 1274, 1266, 71, 71, 1269, 1275, 1273, 1276, 1280, - 1277, 71, 1278, 71, 1279, 1281, 71, 71, 71, 71, - 1282, 1286, 71, 71, 71, 71, 1287, 71, 1285, 1289, - 71, 71, 1283, 71, 1291, 1295, 1284, 1290, 71, 71, - 71, 71, 71, 71, 1288, 1298, 1296, 1294, 71, 1292, + 2952, 1252, 1242, 1253, 1243, 1241, 71, 71, 71, 71, + 1251, 1245, 1255, 71, 1246, 1247, 1257, 1256, 1258, 1248, + 71, 71, 71, 71, 1260, 1249, 1259, 71, 1262, 1250, + 71, 71, 71, 1263, 71, 1264, 71, 71, 71, 71, + 1272, 1261, 1269, 1267, 71, 71, 71, 1273, 1311, 1274, + 1266, 1265, 1270, 71, 71, 71, 1268, 1271, 1275, 71, + 1281, 1282, 71, 71, 1276, 71, 1284, 71, 71, 1277, + 71, 1278, 1288, 1279, 71, 1280, 1283, 1289, 71, 1287, + 71, 71, 1285, 71, 71, 1291, 1286, 71, 71, 71, + 1298, 1297, 1293, 71, 71, 1292, 1290, 71, 71, 71, - 1293, 71, 1300, 1297, 71, 71, 1299, 1304, 71, 1303, - 1306, 71, 71, 71, 1307, 71, 1301, 71, 1308, 71, - 1305, 71, 1309, 1312, 71, 71, 1302, 71, 1311, 1314, - 71, 71, 1310, 71, 1315, 71, 1316, 1319, 71, 71, - 71, 1313, 1321, 71, 71, 71, 1317, 1325, 1318, 1323, - 71, 71, 1324, 71, 1327, 1320, 71, 71, 1329, 71, - 1322, 71, 1330, 71, 71, 71, 1332, 1331, 1326, 1333, - 1335, 1328, 71, 1334, 71, 71, 71, 1340, 1341, 71, - 1337, 1336, 1338, 71, 71, 71, 1343, 71, 1344, 1339, - 1342, 71, 71, 1347, 71, 71, 71, 71, 1351, 1352, + 71, 1299, 1296, 1294, 1301, 71, 1295, 71, 1300, 1303, + 71, 71, 1302, 1307, 71, 1306, 1309, 71, 71, 71, + 1310, 71, 71, 1304, 1312, 71, 1308, 1315, 71, 1317, + 71, 1314, 1305, 71, 1318, 71, 71, 71, 1322, 71, + 1313, 1319, 71, 71, 71, 1316, 1324, 71, 71, 71, + 71, 1328, 1326, 71, 71, 1384, 1320, 1327, 1321, 71, + 71, 71, 1323, 1330, 1325, 71, 1332, 1334, 1329, 1331, + 1333, 71, 71, 71, 1337, 71, 1335, 1336, 71, 71, + 1338, 71, 71, 1343, 1344, 1340, 71, 1346, 1341, 71, + 71, 1345, 71, 71, 71, 1342, 1339, 71, 1350, 71, - 71, 71, 1346, 1354, 71, 71, 1345, 1353, 71, 71, - 71, 71, 1358, 71, 71, 1348, 1349, 71, 1361, 71, - 1350, 71, 1355, 71, 71, 1359, 1366, 71, 1356, 1365, - 1357, 1360, 71, 71, 1362, 1370, 71, 1368, 71, 1364, - 1371, 71, 71, 71, 1363, 71, 1367, 1373, 71, 71, - 1374, 71, 1369, 71, 1372, 1381, 1379, 1375, 71, 1380, - 1376, 1383, 71, 1377, 71, 71, 1378, 71, 1384, 71, - 71, 71, 1382, 1385, 71, 1387, 1389, 71, 71, 1391, - 71, 71, 71, 1396, 1386, 71, 71, 1388, 1390, 1397, - 71, 71, 1393, 71, 1400, 71, 71, 1392, 1394, 1395, + 71, 1347, 71, 71, 1354, 1355, 71, 71, 1349, 1357, + 71, 71, 1356, 1348, 71, 71, 71, 71, 71, 71, + 1351, 1358, 1352, 71, 1364, 71, 1353, 1359, 1361, 71, + 71, 1362, 1369, 71, 1360, 1368, 1363, 71, 71, 1365, + 71, 71, 71, 1371, 71, 71, 1373, 1367, 71, 1377, + 1366, 1374, 71, 71, 1376, 71, 1378, 71, 71, 1372, + 1370, 71, 1375, 1379, 1386, 71, 1382, 71, 1380, 1383, + 71, 1381, 1385, 71, 1389, 71, 1388, 1387, 71, 71, + 1392, 71, 71, 1390, 1394, 1391, 71, 71, 71, 71, + 1399, 71, 71, 71, 1404, 1400, 1393, 1403, 71, 71, - 71, 71, 71, 1401, 1398, 71, 71, 71, 71, 1399, - 1403, 1407, 1402, 71, 1406, 1408, 1404, 1405, 1409, 71, - 71, 1412, 1413, 1410, 71, 71, 71, 1417, 1411, 1418, - 1414, 1416, 71, 71, 71, 71, 71, 1419, 71, 1420, - 1421, 71, 71, 71, 71, 71, 1415, 1422, 1425, 71, - 1424, 1423, 1427, 71, 1428, 71, 71, 71, 71, 1426, - 1434, 1431, 1436, 1430, 71, 1435, 71, 1437, 71, 1429, - 71, 1432, 71, 1439, 71, 71, 71, 1433, 71, 71, - 1443, 1447, 71, 71, 1438, 1442, 71, 71, 1448, 1440, - 1450, 71, 71, 1441, 71, 1453, 71, 1444, 1452, 1445, + 1396, 1395, 71, 71, 71, 1397, 1398, 71, 71, 71, + 1401, 71, 1402, 1406, 1410, 1411, 1412, 1405, 71, 1407, + 71, 1409, 1408, 71, 1415, 71, 71, 71, 71, 1414, + 71, 1420, 1417, 1419, 1425, 1421, 1413, 71, 71, 1422, + 1416, 71, 71, 1423, 1424, 71, 71, 71, 1418, 71, + 71, 71, 71, 1431, 71, 1426, 71, 1430, 71, 71, + 71, 2952, 71, 1428, 1433, 1427, 1429, 1434, 71, 1442, + 1437, 71, 1435, 71, 1432, 1438, 71, 1439, 1436, 71, + 1441, 71, 1440, 71, 71, 71, 1446, 1450, 1445, 71, + 1443, 71, 1444, 71, 71, 1453, 1451, 71, 71, 71, - 1446, 71, 71, 71, 71, 71, 71, 71, 1461, 71, - 1451, 71, 1449, 1454, 1462, 71, 71, 1464, 71, 1458, - 1465, 1455, 1456, 1457, 1460, 71, 71, 1459, 1463, 1466, - 71, 71, 71, 71, 1470, 71, 71, 71, 1471, 1467, - 1468, 1473, 71, 1469, 1477, 71, 1479, 1478, 1474, 71, - 71, 1472, 71, 1476, 71, 1475, 71, 71, 71, 1481, - 1482, 1483, 71, 1487, 1480, 1488, 71, 71, 71, 71, - 1484, 71, 71, 71, 1492, 1493, 1485, 1491, 1495, 71, - 71, 71, 1486, 1496, 71, 1489, 1497, 71, 71, 1490, - 71, 1494, 71, 1500, 71, 71, 1503, 71, 71, 71, + 1456, 71, 71, 1447, 1455, 1448, 71, 1449, 71, 71, + 71, 71, 71, 1464, 71, 71, 1454, 1545, 1457, 71, + 1452, 1458, 1465, 71, 1461, 1467, 71, 1459, 1460, 1463, + 71, 71, 1462, 71, 1469, 1466, 1468, 71, 71, 71, + 71, 1473, 71, 71, 71, 1474, 1470, 1471, 1476, 71, + 1472, 1480, 71, 1482, 1481, 1477, 71, 71, 1475, 71, + 1479, 71, 1478, 71, 71, 71, 1485, 1486, 1487, 71, + 1484, 1483, 71, 1491, 1492, 71, 71, 71, 71, 71, + 71, 1496, 1497, 1495, 71, 1488, 71, 1489, 71, 1499, + 71, 71, 1490, 71, 1493, 71, 1500, 71, 1494, 1501, - 1498, 71, 71, 1502, 1499, 71, 71, 1507, 71, 1509, - 71, 71, 1501, 1504, 71, 1513, 71, 1510, 1505, 1508, - 1506, 1511, 71, 71, 71, 1514, 71, 1516, 1518, 71, - 1519, 71, 1521, 71, 1515, 1512, 71, 71, 1517, 71, - 71, 1524, 1527, 71, 1520, 1526, 71, 1523, 71, 71, - 71, 71, 71, 1534, 71, 1522, 71, 71, 1525, 1535, - 71, 71, 1529, 71, 1528, 1532, 71, 71, 1530, 1531, - 1538, 1539, 71, 71, 1541, 1533, 1536, 1537, 1542, 1543, - 1540, 1545, 71, 1544, 71, 71, 1548, 71, 1547, 71, - 1549, 71, 71, 71, 1552, 71, 1546, 1550, 71, 1553, + 71, 71, 1502, 71, 1498, 71, 1504, 1503, 71, 1507, + 1506, 71, 1508, 71, 71, 1505, 71, 1513, 1511, 71, + 71, 71, 71, 1517, 71, 71, 1509, 71, 1512, 71, + 1510, 71, 1520, 1522, 71, 1515, 71, 1514, 1518, 71, + 1523, 71, 1525, 1519, 1521, 71, 1516, 71, 71, 71, + 71, 1524, 1528, 71, 1530, 71, 1527, 1531, 71, 71, + 71, 1526, 71, 1538, 71, 2952, 1529, 1533, 1532, 1539, + 71, 71, 71, 1536, 1534, 1535, 71, 71, 71, 71, + 1547, 1542, 1543, 1546, 71, 1537, 71, 1549, 1551, 71, + 1540, 1541, 71, 71, 71, 71, 1544, 71, 1550, 1548, - 71, 71, 71, 71, 1558, 1557, 71, 71, 71, 1554, - 71, 71, 2946, 1565, 1561, 1551, 1556, 1562, 1555, 1559, - 71, 1564, 71, 71, 1572, 1567, 1560, 71, 1570, 1563, - 71, 1566, 71, 1569, 71, 1568, 1574, 1571, 71, 1573, - 71, 71, 71, 71, 71, 1575, 71, 71, 71, 1581, - 1580, 1582, 1584, 1583, 1576, 71, 71, 71, 71, 71, - 71, 1577, 71, 1578, 1586, 1588, 1579, 1587, 71, 71, - 71, 71, 71, 71, 71, 71, 1596, 71, 71, 1585, - 1589, 71, 71, 1601, 71, 1592, 1593, 1594, 71, 1590, - 1591, 1595, 71, 1597, 1598, 1599, 71, 1603, 1600, 71, + 1553, 71, 1554, 71, 1556, 71, 1557, 71, 71, 71, + 71, 1552, 1561, 71, 1562, 1558, 71, 71, 71, 1555, + 1568, 71, 1563, 1560, 1565, 1559, 71, 1566, 71, 71, + 71, 71, 1596, 1569, 1573, 1571, 1564, 1574, 1570, 1567, + 71, 71, 1572, 71, 1578, 1575, 71, 1576, 71, 1577, + 71, 71, 71, 71, 1580, 71, 1579, 71, 1585, 1586, + 1584, 71, 1588, 71, 71, 71, 1587, 71, 71, 71, + 1581, 71, 1582, 71, 1590, 1583, 1591, 71, 1592, 71, + 71, 71, 71, 1600, 71, 1593, 1589, 71, 71, 71, + 71, 1594, 71, 1598, 1597, 1599, 1605, 71, 71, 1595, - 1604, 71, 71, 71, 71, 71, 71, 71, 1602, 71, - 71, 1605, 71, 1609, 1611, 1606, 1619, 71, 71, 1612, - 1610, 1608, 1613, 1620, 71, 1614, 1607, 1615, 71, 71, - 71, 1617, 1616, 1618, 71, 71, 1622, 1623, 1624, 71, - 1621, 71, 1625, 71, 71, 71, 1627, 71, 1628, 71, - 71, 71, 1636, 71, 1626, 71, 1631, 71, 71, 1633, - 1635, 1630, 1634, 1629, 1637, 71, 71, 71, 1632, 1641, - 1639, 71, 71, 1638, 71, 71, 1646, 71, 71, 71, - 71, 71, 71, 1642, 1640, 1649, 1643, 1648, 71, 1650, - 1645, 1652, 71, 1647, 1653, 1657, 1644, 1654, 71, 71, + 71, 1608, 1603, 1607, 1601, 71, 71, 1602, 71, 71, + 71, 1604, 1606, 71, 71, 71, 71, 71, 71, 1613, + 1609, 1615, 1610, 1623, 71, 71, 1616, 1612, 1614, 1617, + 1611, 1618, 71, 1619, 71, 1622, 1624, 71, 1620, 71, + 71, 1621, 1627, 1626, 1628, 71, 1625, 71, 71, 71, + 71, 71, 71, 1629, 1631, 1632, 71, 1640, 1641, 71, + 1635, 71, 71, 71, 71, 71, 1630, 1633, 1634, 71, + 1637, 1639, 71, 1638, 71, 1636, 71, 71, 1643, 71, + 71, 1650, 71, 71, 1642, 71, 1645, 1644, 1647, 71, + 1646, 71, 1652, 71, 1653, 71, 1654, 1649, 1651, 71, - 1658, 71, 1655, 1651, 71, 1662, 71, 1664, 71, 1665, - 1656, 71, 1659, 71, 1660, 71, 1667, 71, 1666, 71, - 71, 1671, 71, 1668, 1663, 71, 1661, 71, 71, 1675, - 71, 1673, 71, 71, 1670, 71, 71, 1674, 1672, 1669, - 1676, 71, 71, 71, 1679, 71, 71, 1685, 71, 1677, - 1680, 1687, 1678, 71, 71, 1681, 1682, 71, 1688, 1683, - 1684, 71, 71, 71, 71, 1694, 1689, 71, 71, 1686, - 71, 71, 1698, 71, 1690, 71, 1693, 71, 71, 1691, - 71, 1692, 1700, 71, 1696, 1701, 71, 71, 1697, 1695, - 71, 1702, 1703, 1707, 71, 1699, 71, 71, 1706, 1704, + 1656, 71, 1648, 1657, 71, 71, 1659, 1661, 71, 71, + 1655, 1658, 1662, 71, 1666, 1663, 1667, 1660, 1670, 1664, + 1669, 71, 71, 71, 71, 1672, 1668, 1665, 1671, 71, + 71, 71, 71, 1676, 71, 1673, 1680, 71, 71, 71, + 71, 71, 71, 1678, 71, 1681, 1675, 1677, 71, 1679, + 1674, 71, 1684, 71, 71, 71, 71, 1682, 1690, 71, + 1683, 1686, 1685, 71, 1687, 1692, 1693, 71, 1688, 1689, + 71, 71, 71, 71, 1696, 1699, 1694, 71, 71, 71, + 1691, 71, 1703, 71, 71, 71, 1698, 1695, 71, 1697, + 1706, 71, 1705, 71, 1701, 71, 1707, 1702, 1708, 1700, - 1705, 71, 1711, 71, 71, 71, 71, 71, 71, 1709, - 71, 1718, 1713, 71, 71, 1708, 2946, 71, 1712, 1714, - 1710, 71, 1715, 1722, 71, 1716, 1719, 1721, 1717, 71, - 71, 1720, 1723, 1724, 71, 1725, 71, 1727, 1728, 71, - 71, 71, 71, 71, 1730, 1726, 71, 71, 71, 1731, - 71, 71, 1729, 71, 71, 71, 1736, 71, 71, 1740, - 71, 1732, 1737, 71, 71, 71, 1734, 1738, 1735, 1733, - 1745, 71, 1739, 1741, 1746, 1744, 71, 71, 1743, 71, - 71, 1749, 71, 71, 1747, 1751, 1742, 71, 1754, 1755, - 71, 1756, 71, 1758, 71, 1748, 1752, 1750, 1753, 1757, + 71, 71, 1712, 71, 1704, 71, 71, 71, 71, 1709, + 1716, 71, 71, 71, 71, 71, 1711, 71, 1710, 1714, + 1718, 71, 1717, 1723, 1713, 1715, 1719, 1720, 71, 71, + 71, 1721, 2952, 1724, 1727, 71, 1726, 1722, 71, 1729, + 71, 1728, 71, 71, 1732, 71, 1725, 1730, 1733, 71, + 71, 71, 1731, 1735, 71, 71, 71, 1734, 1736, 71, + 71, 71, 71, 71, 71, 1741, 71, 71, 71, 1745, + 71, 1742, 1750, 71, 1737, 1743, 1746, 1739, 1738, 1740, + 1751, 1744, 71, 71, 71, 1749, 71, 71, 1748, 1747, + 71, 71, 1756, 2952, 71, 71, 1759, 1760, 71, 71, - 71, 1759, 71, 71, 1762, 71, 71, 1764, 71, 1766, - 1763, 1765, 71, 71, 1768, 71, 71, 71, 71, 71, - 71, 1770, 71, 1760, 1761, 1771, 71, 71, 1772, 1773, - 1767, 1774, 1775, 1776, 1780, 71, 71, 1778, 1777, 1782, - 71, 1769, 1779, 71, 1783, 71, 71, 71, 1785, 71, - 71, 71, 71, 1788, 1792, 71, 1781, 1784, 1786, 71, - 1789, 71, 71, 1794, 1787, 71, 71, 71, 1797, 71, - 1790, 1798, 71, 1791, 1800, 71, 71, 71, 71, 1806, - 71, 71, 71, 71, 71, 1795, 1802, 1793, 1796, 1799, - 1803, 1805, 71, 71, 2946, 71, 71, 71, 1808, 1804, + 1754, 71, 1753, 1752, 1761, 71, 71, 1755, 1757, 1770, + 1758, 1762, 1763, 71, 71, 1764, 1767, 71, 1769, 71, + 1765, 1771, 1766, 1768, 71, 71, 1773, 71, 71, 71, + 71, 71, 71, 1775, 1776, 71, 71, 1777, 1778, 1785, + 71, 1787, 71, 1772, 71, 71, 1788, 71, 71, 1783, + 71, 1784, 1790, 1774, 1779, 1780, 1781, 71, 71, 1793, + 1786, 1782, 1789, 71, 71, 71, 71, 71, 1791, 1797, + 71, 71, 1794, 1792, 71, 1799, 71, 71, 1802, 1803, + 71, 71, 1805, 71, 1795, 71, 71, 1796, 71, 71, + 71, 1800, 71, 1798, 1810, 1807, 71, 1808, 1801, 71, - 1809, 1801, 71, 1807, 1810, 71, 1812, 1815, 1816, 71, - 1811, 1819, 1814, 71, 71, 1820, 71, 71, 1813, 71, - 1818, 71, 1821, 71, 1822, 1823, 71, 71, 71, 1817, - 71, 71, 71, 1827, 71, 1830, 1831, 71, 71, 1826, - 71, 71, 71, 71, 1834, 71, 1824, 1825, 71, 1828, - 1838, 71, 71, 1833, 71, 71, 71, 1832, 1829, 1842, - 1835, 1836, 1843, 1844, 71, 1837, 1840, 1839, 1845, 71, - 71, 1841, 1849, 71, 1846, 1847, 71, 71, 71, 71, - 1848, 71, 71, 1853, 1856, 71, 71, 71, 1859, 71, - 71, 1851, 1858, 71, 1860, 71, 71, 1850, 1852, 1861, + 71, 1804, 1811, 71, 1813, 1815, 1814, 71, 71, 1817, + 1806, 1809, 71, 1812, 71, 71, 1821, 71, 71, 71, + 1820, 1824, 71, 1825, 1827, 1823, 71, 71, 71, 71, + 1819, 1826, 71, 1816, 71, 1828, 71, 1822, 1818, 71, + 71, 71, 71, 1832, 71, 1835, 1836, 71, 1829, 71, + 71, 1831, 71, 1830, 1833, 71, 71, 1844, 71, 1839, + 71, 1843, 1837, 71, 1838, 71, 2952, 1834, 71, 1842, + 1841, 71, 1848, 71, 71, 1840, 71, 1849, 1846, 1845, + 1851, 71, 1850, 71, 1847, 1853, 71, 1852, 1855, 71, + 1854, 71, 71, 71, 71, 1862, 71, 1856, 1859, 71, - 1857, 1854, 1855, 71, 71, 1862, 1865, 1866, 71, 1867, - 71, 1868, 1870, 71, 1863, 1871, 1869, 71, 71, 1864, - 71, 71, 71, 1875, 71, 1873, 71, 71, 71, 71, - 1872, 1877, 71, 1880, 1874, 1881, 1876, 1882, 1878, 71, - 71, 71, 71, 71, 1883, 71, 71, 1886, 1887, 71, - 1888, 2946, 1884, 1879, 1889, 71, 1890, 71, 1892, 71, - 1885, 71, 71, 71, 71, 1893, 1891, 1894, 71, 1895, - 1896, 71, 71, 1897, 1898, 71, 1900, 71, 71, 71, - 71, 1904, 71, 71, 1899, 1903, 71, 71, 1905, 1901, - 1902, 1906, 1907, 1908, 71, 71, 71, 71, 71, 71, + 1857, 71, 1865, 71, 1864, 71, 1866, 71, 71, 71, + 1858, 1863, 1860, 1867, 1861, 71, 1868, 1872, 71, 1869, + 1873, 71, 1874, 1876, 1870, 1877, 71, 1875, 71, 71, + 71, 71, 71, 1881, 71, 1871, 71, 1879, 71, 71, + 1883, 71, 1880, 1886, 71, 71, 1882, 1888, 71, 71, + 1884, 71, 1878, 71, 71, 71, 1889, 71, 1893, 1892, + 1890, 71, 1894, 1895, 71, 1898, 1885, 1887, 1896, 71, + 1891, 71, 71, 71, 71, 71, 71, 1897, 1899, 1900, + 71, 1901, 1902, 71, 71, 1903, 1904, 71, 1905, 71, + 1906, 71, 71, 1910, 71, 71, 1907, 1909, 71, 1908, - 71, 1915, 1913, 1909, 1910, 1914, 71, 71, 71, 1917, - 71, 71, 1921, 1916, 1911, 71, 1912, 71, 71, 1920, - 1918, 71, 71, 71, 1919, 1928, 1922, 1923, 1925, 1927, - 71, 71, 71, 2946, 1926, 71, 1933, 71, 71, 1924, - 71, 1935, 71, 71, 71, 1936, 71, 1929, 1930, 71, - 1931, 1932, 1937, 71, 1938, 1934, 1939, 71, 1941, 71, - 71, 71, 71, 71, 1940, 71, 71, 71, 1942, 71, - 71, 71, 1949, 1944, 1945, 1946, 1953, 71, 71, 71, - 2946, 1943, 1948, 1952, 71, 1950, 71, 1956, 1954, 1951, - 71, 1947, 71, 71, 71, 1957, 1960, 1959, 1955, 1958, + 1911, 71, 71, 1912, 1914, 71, 1913, 71, 71, 71, + 1921, 1916, 71, 1919, 71, 1915, 71, 1920, 71, 1923, + 71, 71, 71, 71, 1927, 1917, 71, 1918, 1922, 71, + 1924, 1926, 71, 1929, 71, 1928, 71, 1931, 1925, 1933, + 71, 71, 71, 71, 1934, 71, 71, 1932, 1939, 71, + 1930, 1942, 1935, 71, 71, 71, 1941, 1938, 1936, 71, + 1937, 1943, 71, 1940, 71, 71, 1947, 1944, 71, 71, + 71, 1945, 71, 1946, 71, 71, 71, 1948, 71, 71, + 71, 71, 1950, 71, 1951, 1955, 1952, 1959, 71, 71, + 1949, 1954, 1962, 1958, 71, 71, 1960, 71, 1956, 1963, - 71, 71, 1964, 71, 1961, 1962, 71, 71, 1963, 71, - 71, 1968, 71, 71, 1970, 1966, 1972, 71, 71, 1967, - 71, 1965, 71, 71, 1975, 1974, 71, 1971, 1976, 1969, - 71, 1977, 71, 1980, 71, 71, 71, 71, 71, 71, - 1981, 71, 71, 71, 1973, 1983, 2048, 1982, 1978, 1986, - 71, 1990, 1979, 71, 1987, 1984, 1985, 71, 1988, 71, - 71, 1989, 1992, 71, 1991, 1995, 71, 71, 71, 71, - 1997, 1993, 71, 1998, 71, 71, 1999, 71, 71, 1994, - 1996, 71, 2000, 2004, 2002, 2006, 71, 2003, 71, 71, - 2007, 71, 2001, 71, 71, 2008, 71, 71, 2011, 2005, + 1957, 1953, 1965, 1961, 71, 71, 1966, 71, 71, 71, + 71, 71, 1968, 71, 71, 1964, 1969, 1970, 71, 71, + 1972, 1974, 71, 1967, 1976, 1973, 1978, 71, 1971, 71, + 71, 71, 1977, 1975, 71, 1980, 1981, 71, 71, 71, + 1986, 71, 1982, 1983, 71, 71, 71, 71, 71, 1984, + 1987, 71, 1989, 71, 1988, 1979, 1992, 71, 1996, 1985, + 71, 1993, 1991, 71, 71, 71, 1990, 71, 1994, 1998, + 1997, 1995, 71, 2001, 71, 2002, 71, 2003, 71, 2004, + 1999, 71, 71, 71, 71, 71, 71, 2006, 2000, 71, + 2005, 2010, 2012, 2008, 71, 2014, 2009, 2013, 71, 71, - 2009, 2010, 2012, 71, 2016, 71, 71, 2013, 71, 71, - 71, 71, 2015, 71, 71, 71, 2014, 71, 71, 2036, - 71, 71, 2022, 2023, 2017, 2019, 2018, 2020, 71, 2021, - 2027, 71, 71, 2025, 71, 2024, 2026, 71, 2028, 71, - 2030, 2031, 2034, 71, 71, 71, 2038, 71, 2946, 71, - 71, 2029, 2032, 2035, 2037, 71, 71, 2033, 2045, 2040, - 2043, 2041, 2039, 2042, 71, 2044, 71, 2046, 71, 2049, - 71, 2047, 71, 71, 2050, 71, 71, 2051, 71, 2054, - 2055, 71, 71, 2056, 2057, 71, 2059, 71, 2061, 71, - 2060, 2052, 71, 2062, 71, 71, 2058, 2064, 71, 71, + 71, 2007, 71, 71, 71, 71, 2011, 2017, 2018, 71, + 71, 2015, 2016, 71, 2020, 2022, 71, 2019, 2021, 71, + 71, 71, 71, 2023, 71, 71, 71, 71, 2024, 2025, + 2031, 2032, 71, 2026, 2028, 2027, 2029, 71, 2034, 71, + 71, 2030, 71, 71, 71, 2036, 2033, 2042, 71, 71, + 2037, 2035, 71, 2041, 71, 2038, 2044, 71, 2043, 71, + 2039, 71, 71, 2046, 2049, 2053, 2047, 2048, 2040, 2050, + 71, 2045, 2051, 2052, 71, 71, 2056, 71, 71, 71, + 71, 71, 2054, 71, 2057, 2061, 71, 71, 2062, 2060, + 71, 2065, 71, 2063, 71, 2055, 2071, 71, 2058, 2066, - 2063, 71, 2053, 71, 71, 2065, 71, 71, 2067, 2066, - 71, 2069, 2072, 71, 71, 2075, 71, 71, 71, 71, - 71, 2076, 2070, 2068, 2078, 2071, 71, 71, 71, 71, - 2074, 2073, 2082, 2077, 71, 2085, 71, 71, 2080, 71, - 71, 71, 2083, 71, 71, 2086, 2079, 2081, 71, 71, - 71, 71, 2084, 2096, 71, 71, 71, 71, 2087, 2088, - 2097, 2093, 71, 2091, 2089, 71, 2095, 2090, 2098, 2092, - 2099, 2094, 71, 2101, 71, 2100, 2102, 71, 2103, 71, - 2104, 71, 2106, 71, 2109, 71, 71, 2105, 71, 71, - 71, 2110, 2107, 2111, 71, 2108, 2115, 71, 2116, 71, + 71, 2067, 2068, 71, 71, 71, 2070, 71, 2064, 2059, + 2069, 2073, 71, 71, 71, 71, 71, 71, 71, 2075, + 71, 71, 2078, 71, 2072, 2081, 71, 2082, 71, 71, + 2077, 71, 71, 2084, 71, 2083, 2079, 2080, 2074, 2076, + 71, 71, 71, 2086, 71, 2088, 71, 2089, 2091, 71, + 2092, 2087, 71, 71, 71, 2085, 71, 71, 71, 2090, + 71, 71, 71, 2093, 2166, 2094, 2102, 71, 2099, 71, + 71, 71, 2103, 2097, 2105, 2095, 2101, 2096, 2098, 2100, + 71, 2107, 71, 2104, 2106, 2108, 71, 2109, 71, 71, + 71, 2112, 71, 2115, 71, 71, 71, 2110, 71, 71, - 71, 2118, 71, 71, 2120, 71, 2114, 71, 71, 2112, - 2113, 2123, 71, 2122, 2124, 71, 71, 71, 71, 2117, - 71, 2119, 2121, 71, 2130, 71, 2126, 71, 2129, 71, - 2125, 71, 2127, 2132, 71, 71, 71, 2134, 2135, 2128, - 71, 2136, 2138, 71, 71, 71, 2131, 2133, 2142, 71, - 71, 71, 71, 71, 71, 2139, 2137, 2146, 71, 2140, - 2147, 71, 71, 71, 2141, 2151, 71, 2145, 71, 71, - 2143, 71, 2154, 2148, 2144, 71, 2153, 2149, 2150, 71, - 71, 2158, 71, 71, 71, 2160, 71, 71, 2152, 2155, - 71, 2159, 2163, 2156, 71, 2164, 71, 71, 2162, 71, + 2116, 2113, 2111, 2117, 2114, 71, 2121, 71, 2122, 71, + 71, 2124, 71, 71, 2126, 71, 2118, 2120, 71, 2119, + 71, 2129, 71, 2130, 71, 2128, 71, 71, 71, 2123, + 71, 2125, 71, 2127, 2136, 71, 2132, 2135, 71, 71, + 2131, 71, 2133, 2138, 71, 2140, 71, 71, 71, 2134, + 2141, 71, 2142, 2144, 71, 71, 71, 2137, 71, 2139, + 2148, 71, 71, 2146, 71, 2145, 71, 2143, 2152, 2153, + 71, 71, 71, 71, 2147, 71, 2149, 2151, 2157, 71, + 71, 2150, 2159, 71, 71, 2154, 2155, 2156, 71, 71, + 2164, 71, 71, 2158, 2160, 71, 71, 71, 71, 71, - 71, 71, 71, 71, 2161, 2157, 2168, 2170, 2171, 2166, - 2173, 71, 71, 71, 2175, 2172, 71, 2176, 2167, 2165, - 71, 71, 71, 71, 71, 2169, 2177, 2180, 71, 71, - 71, 71, 2174, 71, 71, 2179, 2232, 2181, 2178, 2182, - 2183, 2186, 2184, 2185, 2187, 71, 71, 71, 71, 2188, - 71, 71, 2191, 2192, 2189, 2190, 71, 2193, 71, 71, - 71, 2199, 71, 71, 71, 2194, 71, 71, 2195, 71, - 2196, 71, 71, 2201, 2197, 2206, 2198, 71, 2200, 2202, - 71, 71, 2203, 2205, 2204, 2207, 2210, 71, 71, 2211, - 2212, 71, 71, 2209, 71, 2213, 2215, 2208, 2216, 2214, + 2165, 2161, 2162, 2169, 2170, 71, 71, 2168, 71, 71, + 2172, 2174, 2167, 71, 2163, 71, 2179, 71, 2176, 2181, + 2177, 2171, 71, 71, 2178, 71, 2173, 71, 2182, 71, + 71, 71, 2183, 71, 2175, 71, 2186, 71, 2180, 71, + 2187, 71, 71, 2185, 2188, 2192, 2189, 2193, 2190, 71, + 71, 71, 71, 71, 2184, 2191, 2194, 2198, 2196, 71, + 2197, 71, 2195, 71, 71, 2199, 71, 2205, 71, 71, + 2201, 71, 2202, 2200, 71, 71, 71, 2203, 71, 71, + 2207, 71, 2204, 71, 2206, 2230, 2208, 71, 2211, 71, + 2212, 2209, 2221, 2210, 2213, 2215, 2216, 71, 71, 2214, - 2217, 71, 71, 71, 71, 71, 2219, 71, 71, 71, - 71, 2223, 71, 2226, 71, 71, 2224, 2218, 2225, 2220, - 71, 71, 2221, 71, 71, 2227, 71, 71, 2222, 2233, - 2228, 2230, 2231, 71, 71, 71, 71, 71, 71, 71, - 2237, 2240, 71, 2229, 2239, 71, 2234, 71, 2241, 2236, - 71, 71, 2245, 71, 2235, 2244, 2242, 2238, 71, 2246, - 71, 2243, 2247, 71, 2249, 71, 71, 2248, 2250, 71, - 2252, 71, 2254, 71, 71, 2253, 2256, 71, 71, 2258, - 71, 71, 71, 2257, 71, 2255, 71, 71, 71, 71, - 71, 2262, 2251, 2264, 2265, 71, 2260, 2266, 71, 2259, + 71, 2217, 2218, 71, 71, 71, 2222, 2219, 2223, 71, + 2220, 71, 71, 71, 2225, 71, 71, 71, 71, 2229, + 71, 2232, 71, 2231, 71, 2224, 71, 2226, 71, 2233, + 2227, 2237, 71, 71, 71, 2234, 2228, 2236, 71, 71, + 71, 71, 71, 2239, 71, 71, 2243, 2238, 2235, 71, + 2245, 2246, 71, 71, 71, 2242, 71, 71, 2247, 2240, + 2241, 2250, 2251, 71, 2244, 71, 2952, 2248, 71, 2249, + 71, 2252, 2253, 71, 2255, 71, 71, 2258, 2256, 2254, + 2257, 71, 2260, 71, 71, 2259, 2262, 71, 71, 2264, + 71, 71, 71, 2263, 71, 2261, 71, 71, 71, 71, - 2261, 2267, 71, 2268, 71, 2269, 2270, 71, 71, 71, - 71, 71, 2272, 2263, 2275, 71, 71, 2271, 2277, 71, - 2276, 71, 2274, 71, 71, 2280, 71, 2273, 71, 2283, - 2284, 71, 71, 71, 2278, 71, 2279, 2285, 2281, 71, - 71, 2282, 71, 71, 2287, 2288, 71, 71, 2289, 2294, - 71, 2286, 2293, 2290, 2295, 71, 2291, 2296, 71, 2297, - 71, 71, 71, 2292, 71, 71, 2301, 71, 2302, 2300, - 71, 71, 71, 2298, 71, 2307, 71, 71, 2309, 71, - 2299, 71, 2303, 2304, 2310, 71, 71, 71, 71, 71, - 2306, 71, 2305, 2312, 2313, 71, 2308, 2311, 71, 71, + 71, 2268, 71, 2270, 2271, 2952, 2266, 2272, 71, 2265, + 2267, 2273, 71, 2274, 71, 2275, 2276, 71, 71, 71, + 71, 71, 2278, 2269, 2277, 2281, 71, 2283, 71, 71, + 2282, 71, 2280, 71, 2286, 71, 71, 2279, 71, 2289, + 2290, 71, 71, 71, 2285, 71, 2284, 2291, 71, 71, + 2287, 71, 71, 71, 2288, 2295, 2294, 2293, 2952, 2296, + 71, 2292, 71, 2297, 71, 2299, 2300, 71, 2301, 71, + 2302, 71, 2298, 2303, 71, 71, 2304, 71, 71, 2307, + 2305, 71, 2306, 71, 2308, 71, 71, 2309, 2313, 71, + 71, 2315, 71, 2310, 2316, 71, 71, 71, 71, 71, - 2314, 2319, 71, 2316, 71, 71, 71, 71, 2320, 2315, - 71, 2317, 71, 2326, 71, 2318, 71, 71, 71, 2323, - 71, 71, 71, 2327, 2325, 2322, 71, 2337, 71, 2333, - 2321, 2324, 2328, 2329, 2330, 71, 2334, 71, 71, 71, - 2335, 71, 2331, 2336, 2332, 2338, 71, 71, 2339, 71, - 2340, 71, 2341, 71, 71, 2342, 71, 71, 2344, 71, - 71, 2345, 71, 71, 2343, 71, 2352, 71, 2349, 2353, - 71, 71, 2346, 2356, 71, 71, 2355, 2348, 2347, 71, - 2350, 2351, 2358, 71, 2354, 71, 71, 71, 2357, 2359, - 71, 71, 2361, 2360, 71, 2367, 71, 2368, 71, 71, + 71, 71, 2312, 71, 2319, 2311, 2322, 2317, 71, 2314, + 2318, 2320, 2325, 71, 71, 71, 71, 71, 71, 71, + 2321, 71, 2332, 2323, 2326, 71, 71, 71, 2324, 71, + 2329, 71, 71, 2331, 2333, 71, 2328, 71, 2339, 2952, + 2327, 2334, 2330, 71, 2335, 2336, 71, 71, 2341, 2343, + 71, 2340, 2342, 2337, 71, 2338, 2344, 71, 71, 2345, + 71, 2346, 71, 2347, 2348, 2349, 71, 71, 71, 71, + 71, 71, 71, 71, 2358, 71, 2359, 71, 71, 71, + 2355, 2362, 71, 2364, 71, 2350, 2352, 2351, 2361, 71, + 2354, 2353, 2356, 2357, 71, 71, 71, 71, 2363, 71, - 2369, 2362, 71, 71, 71, 2363, 71, 2365, 2364, 2373, - 71, 71, 2946, 2366, 71, 2378, 71, 2370, 2371, 2376, - 71, 2372, 2377, 71, 71, 2379, 2380, 71, 71, 71, - 2374, 2375, 71, 71, 71, 71, 71, 2382, 71, 2386, - 2391, 71, 71, 2381, 2384, 2390, 71, 71, 2383, 2394, - 71, 71, 71, 2385, 71, 2387, 2389, 2388, 2395, 71, - 71, 2392, 71, 2397, 71, 2393, 2396, 2398, 71, 2402, - 71, 71, 2400, 2399, 71, 71, 2403, 71, 2405, 71, - 2404, 71, 2401, 2406, 71, 2408, 71, 71, 2436, 2410, - 2411, 71, 2409, 71, 2407, 71, 2412, 2414, 71, 71, + 2360, 71, 71, 2367, 71, 2373, 71, 2374, 71, 71, + 2375, 71, 2365, 2366, 2368, 2369, 71, 71, 2371, 2370, + 71, 71, 71, 2372, 71, 2379, 2377, 2376, 71, 2382, + 2383, 2384, 71, 71, 71, 2385, 2378, 2386, 71, 71, + 71, 2380, 2381, 71, 71, 71, 71, 71, 2388, 71, + 2392, 71, 71, 2387, 2396, 2390, 2397, 71, 71, 2389, + 2400, 71, 71, 71, 2391, 71, 2393, 2395, 2394, 2401, + 2399, 71, 71, 2398, 71, 2403, 2405, 2402, 2404, 71, + 2408, 71, 71, 71, 71, 2412, 71, 71, 2411, 2414, + 71, 2410, 2406, 71, 2407, 2409, 71, 71, 2415, 2417, - 71, 2413, 71, 2419, 71, 71, 2415, 2421, 71, 2417, - 71, 2418, 2416, 71, 71, 2422, 71, 71, 2423, 71, - 2420, 2425, 71, 2946, 71, 2426, 71, 71, 2424, 71, - 71, 2428, 2429, 71, 2431, 2432, 2434, 71, 2427, 2435, - 71, 2430, 2433, 71, 71, 71, 2440, 2946, 2437, 71, - 2441, 2438, 71, 71, 2442, 71, 2445, 71, 2446, 71, - 2444, 71, 2439, 2450, 2443, 2448, 71, 71, 2451, 71, - 2449, 71, 71, 2454, 2447, 71, 2452, 2453, 71, 71, - 2456, 71, 2455, 71, 71, 71, 71, 71, 71, 71, - 2457, 2460, 2459, 2462, 71, 71, 71, 2461, 2458, 2463, + 71, 71, 2418, 2420, 71, 71, 2413, 71, 2416, 2425, + 71, 71, 71, 71, 2427, 71, 71, 71, 2421, 2419, + 2422, 2423, 2424, 71, 71, 2432, 2426, 71, 2428, 2429, + 2430, 71, 2431, 71, 71, 71, 71, 71, 71, 71, + 2952, 2437, 2434, 2435, 2438, 2440, 71, 2441, 71, 2436, + 2433, 71, 2439, 71, 71, 2446, 2444, 71, 2442, 2443, + 71, 71, 2447, 71, 2448, 71, 2451, 71, 2452, 71, + 2450, 2445, 71, 2454, 71, 2449, 71, 2456, 71, 2455, + 2826, 71, 2457, 71, 71, 2453, 2458, 2460, 71, 2459, + 71, 71, 2461, 71, 71, 2462, 71, 71, 71, 71, - 2465, 2464, 71, 71, 71, 2467, 71, 2466, 71, 2471, - 71, 71, 71, 2469, 2474, 2470, 2468, 2476, 71, 2472, - 71, 71, 71, 71, 2480, 71, 71, 71, 71, 71, - 2473, 2475, 2478, 2484, 2485, 71, 2479, 2487, 2488, 2477, - 2946, 2481, 2482, 71, 71, 2489, 2483, 2490, 71, 71, - 71, 71, 71, 2486, 71, 2492, 71, 2491, 71, 71, - 2495, 2493, 71, 2498, 2499, 71, 71, 2494, 2500, 71, - 2501, 71, 2496, 71, 2497, 71, 2506, 2502, 2504, 71, - 2503, 2507, 71, 71, 71, 2509, 2505, 2510, 71, 2511, - 71, 71, 71, 71, 2512, 71, 2516, 71, 71, 2517, + 2463, 71, 2466, 71, 2465, 71, 2468, 71, 2469, 2464, + 2467, 2470, 2471, 71, 71, 71, 71, 71, 2472, 71, + 2477, 2473, 71, 71, 2475, 2476, 2478, 2474, 71, 2482, + 71, 71, 71, 71, 71, 2486, 71, 71, 71, 71, + 71, 2479, 2484, 2480, 2490, 2491, 71, 2481, 2493, 2485, + 2483, 2487, 2488, 2494, 71, 2495, 2496, 71, 2489, 71, + 71, 71, 71, 71, 2492, 71, 71, 2498, 2497, 71, + 2501, 71, 2499, 71, 2504, 2505, 71, 71, 2500, 2506, + 71, 2507, 71, 2502, 71, 71, 2503, 71, 2508, 2512, + 2509, 2510, 71, 71, 2513, 71, 2518, 2511, 71, 2515, - 2518, 71, 71, 2508, 71, 2513, 2520, 71, 71, 71, - 2524, 2514, 2525, 71, 71, 2515, 71, 2519, 2526, 2527, - 71, 2521, 2522, 2523, 2528, 71, 71, 71, 71, 2533, - 71, 71, 71, 71, 2532, 71, 2535, 2536, 71, 71, - 71, 2538, 71, 2529, 2537, 2539, 2530, 2531, 71, 71, - 71, 2541, 71, 71, 2544, 2534, 2540, 2542, 2543, 2548, - 71, 71, 71, 71, 2554, 71, 71, 2547, 2545, 2551, - 2550, 71, 2546, 2946, 2552, 71, 71, 2555, 71, 2556, - 2549, 71, 2553, 71, 2557, 71, 2558, 2559, 71, 71, - 71, 71, 2562, 2560, 2566, 71, 71, 71, 2563, 2567, + 2516, 71, 2517, 71, 71, 71, 71, 2514, 2522, 71, + 71, 2523, 2524, 71, 71, 2526, 71, 2519, 71, 71, + 71, 2530, 71, 2520, 2531, 71, 2521, 71, 71, 2525, + 2533, 2527, 2532, 71, 2529, 2534, 71, 2528, 71, 71, + 71, 2539, 2542, 71, 71, 2535, 2538, 71, 2541, 71, + 71, 71, 71, 2536, 2543, 2545, 71, 71, 2537, 2544, + 2547, 71, 71, 71, 2540, 71, 2550, 2554, 71, 71, + 71, 2557, 71, 2548, 2549, 2546, 2558, 71, 2556, 2553, + 2551, 2560, 71, 2552, 71, 2561, 71, 2562, 2555, 71, + 2563, 2559, 71, 2564, 71, 71, 71, 71, 71, 71, - 71, 2561, 2569, 71, 2571, 71, 71, 2570, 71, 71, - 2564, 2565, 71, 2572, 71, 2568, 2573, 71, 2574, 2578, - 71, 2575, 71, 2576, 2577, 71, 2579, 71, 71, 71, - 2582, 71, 71, 71, 2580, 2583, 71, 2586, 2585, 2587, - 71, 2584, 2581, 2588, 71, 71, 71, 71, 71, 2589, - 2595, 71, 71, 2594, 2590, 71, 71, 2593, 2591, 71, - 2598, 71, 2600, 2596, 2599, 71, 71, 2605, 71, 2606, - 71, 2602, 2592, 2597, 2601, 71, 2603, 2607, 71, 2604, - 71, 71, 71, 71, 2612, 71, 71, 2611, 71, 2608, - 71, 2613, 71, 2614, 2615, 71, 71, 71, 71, 71, + 2566, 71, 2572, 71, 71, 71, 71, 2569, 2573, 2952, + 2565, 2575, 71, 2576, 2577, 71, 2567, 2579, 71, 2570, + 71, 2571, 2574, 2568, 71, 2578, 71, 71, 71, 2584, + 71, 71, 71, 2580, 71, 2581, 2582, 2588, 2585, 71, + 2586, 71, 2589, 71, 71, 71, 2583, 2587, 71, 2592, + 2591, 71, 2590, 2593, 71, 2594, 71, 2596, 71, 71, + 71, 2601, 71, 2595, 71, 71, 71, 71, 2599, 2635, + 2597, 2604, 71, 71, 2602, 71, 2598, 2605, 71, 2606, + 2600, 71, 2607, 71, 2609, 2603, 2608, 2610, 2611, 71, + 2612, 71, 2613, 71, 71, 2615, 71, 71, 2618, 71, - 2620, 2609, 2610, 2616, 2618, 71, 71, 2622, 71, 71, - 2626, 71, 71, 2617, 2619, 71, 71, 2623, 71, 71, - 2624, 71, 2621, 2629, 71, 2627, 71, 2630, 2628, 2625, - 71, 71, 2631, 71, 2633, 2634, 2636, 71, 2638, 71, - 2632, 2639, 71, 71, 2641, 71, 71, 2642, 71, 71, - 2635, 71, 2637, 2645, 2646, 71, 71, 71, 71, 2650, - 71, 71, 2643, 71, 2640, 2644, 2652, 71, 2653, 2655, - 71, 2647, 2656, 71, 2651, 71, 2649, 2658, 71, 2648, - 71, 71, 71, 2654, 71, 71, 2663, 71, 2667, 71, - 2661, 2660, 71, 71, 71, 2657, 2668, 2659, 71, 2665, + 71, 71, 2617, 2614, 71, 2619, 2620, 2621, 71, 71, + 71, 71, 2626, 71, 71, 2616, 2624, 2622, 71, 2628, + 71, 71, 71, 2632, 71, 71, 71, 71, 2625, 71, + 2623, 71, 71, 2629, 2636, 71, 2630, 2640, 2627, 2633, + 2634, 71, 2631, 2639, 71, 2637, 2642, 71, 2644, 71, + 2638, 2645, 71, 71, 2647, 71, 71, 71, 71, 71, + 71, 2652, 71, 2643, 71, 2651, 71, 2641, 71, 2656, + 71, 71, 2648, 2649, 2646, 2650, 2658, 71, 2653, 2661, + 71, 71, 2662, 71, 2657, 2655, 2659, 2654, 71, 2664, + 71, 71, 71, 2660, 71, 71, 71, 2669, 71, 2673, - 71, 2669, 2662, 2664, 2672, 2666, 2670, 2673, 71, 71, - 71, 2675, 2674, 71, 71, 71, 71, 71, 2671, 2677, - 2678, 2680, 71, 2683, 71, 2684, 71, 71, 71, 71, - 71, 2676, 2687, 71, 2946, 2679, 2688, 71, 2686, 2681, - 2682, 71, 71, 71, 2690, 71, 2689, 2685, 2691, 2692, - 71, 2693, 71, 2694, 71, 71, 2696, 71, 71, 71, - 2695, 2697, 71, 2701, 2702, 71, 71, 2698, 71, 71, - 2706, 71, 71, 71, 71, 2709, 71, 71, 2705, 2708, - 2699, 2700, 2703, 2710, 71, 71, 2704, 2712, 2713, 2714, - 2711, 2707, 71, 71, 71, 2716, 71, 71, 2717, 71, + 71, 2667, 2666, 71, 71, 2675, 71, 2671, 2663, 2665, + 71, 71, 71, 2674, 2668, 2670, 2678, 71, 2672, 2679, + 71, 71, 71, 2676, 2680, 2681, 2677, 71, 71, 2686, + 2682, 71, 2683, 2684, 71, 71, 2685, 2689, 71, 2690, + 71, 71, 2693, 71, 71, 2694, 71, 71, 71, 71, + 71, 2687, 2688, 2692, 2695, 2697, 2698, 71, 2699, 71, + 2691, 2696, 2700, 71, 71, 2702, 71, 2703, 71, 2701, + 71, 71, 71, 2707, 2708, 71, 71, 71, 71, 2712, + 71, 71, 71, 71, 2715, 71, 2743, 2711, 2714, 71, + 2704, 2709, 2705, 2706, 2716, 71, 2710, 71, 2719, 71, - 2715, 71, 71, 71, 71, 71, 2720, 71, 71, 2722, - 71, 71, 2723, 71, 2721, 71, 71, 2718, 71, 2719, - 71, 2732, 2735, 71, 2724, 71, 2728, 2725, 2726, 2727, - 2729, 2730, 2753, 2734, 2736, 71, 2731, 71, 2733, 2738, - 71, 2737, 2739, 71, 2740, 2741, 71, 71, 2742, 2743, - 2746, 71, 2744, 2745, 71, 71, 2747, 71, 71, 71, - 2751, 71, 71, 2750, 71, 71, 71, 71, 2754, 71, - 71, 2759, 2748, 2749, 2755, 2760, 71, 71, 2758, 2761, - 71, 2756, 71, 71, 2766, 2757, 71, 2752, 2763, 2767, - 71, 2764, 2762, 2768, 2765, 71, 71, 71, 71, 71, + 2713, 71, 2717, 2718, 71, 2722, 71, 71, 71, 2721, + 71, 2720, 2723, 71, 71, 71, 71, 71, 2726, 71, + 71, 2728, 71, 71, 2729, 71, 2727, 71, 2724, 71, + 2725, 71, 71, 71, 2738, 2952, 2730, 2752, 2734, 2731, + 2732, 2733, 2735, 2736, 71, 2740, 2741, 71, 2737, 2742, + 71, 2739, 2744, 71, 2745, 71, 2746, 2747, 71, 71, + 2748, 2749, 2754, 71, 2750, 2751, 71, 71, 2753, 71, + 71, 2756, 2755, 2757, 71, 71, 71, 71, 71, 71, + 2760, 71, 2759, 71, 2765, 71, 2761, 2766, 71, 71, + 2764, 2767, 71, 2762, 2769, 2758, 71, 2763, 2772, 71, - 71, 71, 2772, 2773, 2775, 71, 2776, 2777, 71, 71, - 2770, 2769, 2778, 71, 2779, 71, 71, 2771, 2785, 2774, - 2780, 71, 2781, 71, 2782, 71, 2783, 71, 2784, 71, - 2786, 71, 71, 2789, 71, 71, 2787, 71, 71, 71, - 71, 2793, 2795, 71, 71, 71, 71, 71, 2797, 2792, - 2790, 2788, 2791, 2794, 71, 2799, 71, 2802, 71, 2801, - 71, 71, 2796, 71, 71, 2800, 2804, 71, 71, 71, - 71, 2809, 2798, 71, 2803, 2810, 71, 2805, 2811, 71, - 71, 71, 2806, 2807, 2808, 2814, 71, 2816, 71, 2813, - 71, 71, 71, 2812, 2820, 71, 2819, 71, 2822, 71, + 2768, 2774, 71, 2773, 71, 2770, 71, 71, 2771, 71, + 71, 71, 2781, 71, 2778, 2779, 71, 2776, 2783, 71, + 2952, 2782, 2784, 71, 2775, 2785, 71, 2777, 2786, 71, + 2780, 2787, 71, 2788, 71, 2789, 71, 2790, 71, 71, + 2792, 71, 71, 71, 71, 2795, 71, 71, 2791, 71, + 71, 2799, 71, 2801, 71, 71, 71, 71, 2796, 2803, + 2797, 2798, 2793, 2794, 71, 2805, 71, 2800, 71, 2808, + 71, 2807, 71, 2802, 71, 71, 71, 71, 71, 2810, + 71, 2815, 71, 2804, 2806, 71, 2809, 2816, 71, 2811, + 2817, 71, 71, 2813, 2812, 2814, 71, 71, 71, 2822, - 71, 2818, 71, 71, 71, 71, 2815, 71, 71, 71, - 2821, 2817, 2823, 71, 71, 2833, 71, 2834, 71, 2824, - 2825, 2826, 2828, 2835, 71, 2829, 71, 2831, 2827, 2830, - 71, 2836, 2837, 71, 2832, 2838, 71, 2839, 71, 71, - 71, 2841, 71, 71, 2842, 2843, 2840, 2846, 71, 71, - 2849, 71, 71, 71, 2851, 71, 71, 71, 2845, 2854, - 71, 71, 2847, 71, 2855, 71, 71, 2844, 71, 2848, - 2858, 2850, 2852, 2856, 2853, 2859, 71, 71, 71, 2861, - 2857, 71, 2860, 2863, 71, 71, 71, 71, 71, 71, - 2866, 71, 71, 2868, 71, 71, 2862, 71, 2864, 2865, + 2820, 2819, 71, 71, 71, 2818, 71, 2828, 2825, 71, + 71, 71, 71, 2824, 71, 71, 71, 2821, 71, 2827, + 71, 2823, 2829, 71, 2839, 71, 71, 2832, 71, 2830, + 2831, 2834, 2841, 71, 2837, 2840, 2835, 71, 2836, 2833, + 71, 2842, 71, 2838, 2843, 71, 2844, 71, 2846, 71, + 71, 71, 2847, 71, 2852, 2848, 2845, 71, 2849, 71, + 71, 2855, 71, 71, 2857, 71, 2851, 2850, 71, 71, + 71, 2853, 2860, 71, 71, 2861, 71, 71, 2862, 2854, + 2864, 71, 2856, 2858, 2865, 71, 71, 2859, 2869, 71, + 71, 2866, 71, 71, 2867, 2863, 71, 71, 71, 71, - 2873, 71, 2874, 71, 2870, 2871, 71, 2867, 2869, 2877, - 71, 2878, 2879, 2872, 71, 2880, 71, 71, 71, 2875, - 71, 2881, 2876, 71, 2885, 2882, 71, 71, 2883, 71, - 71, 2886, 2887, 71, 71, 71, 2884, 71, 2888, 2893, - 71, 71, 2890, 71, 2896, 71, 2889, 71, 2891, 2897, - 71, 71, 2900, 71, 2895, 71, 2892, 71, 71, 2894, - 2898, 71, 2904, 2899, 71, 71, 71, 2908, 71, 2905, - 2903, 2906, 2901, 71, 2902, 71, 2910, 71, 2911, 71, - 2913, 71, 2915, 71, 2912, 71, 71, 2909, 2917, 71, - 2916, 2907, 2918, 71, 71, 71, 2919, 71, 71, 71, + 2872, 71, 71, 2874, 2868, 71, 71, 2871, 71, 71, + 71, 2879, 2870, 2880, 2876, 2877, 71, 2873, 2875, 2883, + 71, 2884, 2885, 71, 2878, 71, 2886, 2881, 71, 2882, + 71, 71, 71, 2891, 71, 2887, 2888, 2889, 71, 71, + 2893, 71, 2890, 2892, 71, 71, 71, 71, 2894, 2899, + 71, 71, 2896, 2895, 2952, 71, 71, 2902, 2903, 71, + 71, 71, 71, 71, 2901, 2897, 2898, 2906, 71, 2900, + 2904, 71, 2910, 2905, 71, 71, 71, 71, 2914, 2907, + 2911, 2909, 2908, 2952, 71, 71, 2916, 2912, 71, 2917, + 71, 71, 71, 2921, 71, 2918, 71, 71, 2919, 2923, - 2914, 2920, 2922, 2924, 71, 71, 71, 71, 71, 71, - 2926, 2927, 71, 2930, 2921, 2931, 71, 2923, 2925, 71, - 71, 2934, 2935, 71, 71, 71, 2928, 2929, 2932, 2937, - 71, 2936, 2938, 71, 71, 71, 71, 71, 2933, 2946, - 2940, 2939, 2941, 2946, 2942, 2944, 71, 2945, 71, 2946, - 2946, 2946, 2946, 2946, 2946, 2943, 43, 43, 43, 43, - 43, 43, 43, 48, 48, 48, 48, 48, 48, 48, - 53, 53, 53, 53, 53, 53, 53, 59, 59, 59, - 59, 59, 59, 59, 64, 64, 64, 64, 64, 64, - 64, 74, 74, 2946, 74, 74, 74, 74, 141, 141, + 71, 2922, 2913, 2915, 2924, 71, 71, 2925, 71, 71, + 71, 2920, 71, 2926, 2928, 2930, 71, 71, 71, 71, + 71, 71, 2932, 2933, 71, 2936, 71, 2927, 2952, 2929, + 2952, 2931, 2937, 71, 71, 2940, 2941, 71, 2934, 2935, + 2938, 71, 2943, 71, 71, 2939, 2944, 71, 2942, 71, + 71, 2945, 71, 71, 2946, 2947, 2950, 71, 2951, 71, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2948, 2949, 43, 43, 43, 43, 43, 43, 43, + 48, 48, 48, 48, 48, 48, 48, 53, 53, 53, + 53, 53, 53, 53, 59, 59, 59, 59, 59, 59, - 2946, 2946, 2946, 141, 141, 143, 143, 2946, 2946, 143, - 2946, 143, 145, 2946, 2946, 2946, 2946, 2946, 145, 148, - 148, 2946, 2946, 2946, 148, 148, 150, 2946, 2946, 2946, - 2946, 2946, 150, 152, 152, 2946, 152, 152, 152, 152, - 75, 75, 2946, 75, 75, 75, 75, 13, 2946, 2946, - 2946, 2946, 2946, 2946, 2946, 2946, 2946, 2946, 2946, 2946, - 2946, 2946, 2946, 2946, 2946, 2946, 2946, 2946, 2946, 2946, - 2946, 2946, 2946, 2946, 2946, 2946, 2946, 2946, 2946, 2946, - 2946, 2946, 2946, 2946, 2946, 2946, 2946, 2946 + 59, 64, 64, 64, 64, 64, 64, 64, 74, 74, + 2952, 74, 74, 74, 74, 141, 141, 2952, 2952, 2952, + 141, 141, 143, 143, 2952, 2952, 143, 2952, 143, 145, + 2952, 2952, 2952, 2952, 2952, 145, 148, 148, 2952, 2952, + 2952, 148, 148, 150, 2952, 2952, 2952, 2952, 2952, 150, + 152, 152, 2952, 152, 152, 152, 152, 75, 75, 2952, + 75, 75, 75, 75, 13, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + + 2952, 2952, 2952, 2952, 2952 } ; -static const flex_int16_t yy_chk[5789] = +static const flex_int16_t yy_chk[5806] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -2039,13 +2045,13 @@ static const flex_int16_t yy_chk[5789] = 5, 3, 6, 20, 4, 20, 20, 5, 20, 6, 7, 7, 7, 7, 20, 7, 8, 8, 8, 8, 29, 8, 7, 9, 9, 9, 22, 22, 8, 10, - 10, 10, 15, 25, 9, 29, 15, 25, 2952, 31, + 10, 10, 15, 25, 9, 29, 15, 25, 2958, 31, 10, 11, 11, 11, 11, 11, 11, 19, 79, 19, 19, 30, 19, 11, 31, 79, 30, 25, 19, 19, 47, 47, 11, 12, 12, 12, 12, 12, 12, 21, 23, 23, 21, 21, 24, 12, 21, 81, 23, 24, - 34, 21, 23, 24, 12, 23, 24, 990, 24, 24, + 34, 21, 23, 24, 12, 23, 24, 991, 24, 24, 21, 26, 26, 27, 27, 90, 28, 81, 32, 32, 28, 34, 27, 28, 33, 33, 26, 32, 36, 33, 28, 35, 28, 32, 90, 42, 35, 32, 52, 84, @@ -2215,458 +2221,461 @@ static const flex_int16_t yy_chk[5789] = 743, 737, 739, 740, 742, 742, 744, 745, 746, 743, 748, 749, 738, 745, 744, 751, 750, 754, 741, 748, 749, 750, 752, 753, 751, 752, 755, 746, 753, 756, - 757, 754, 758, 758, 759, 759, 761, 760, 756, 762, - 763, 768, 764, 757, 766, 764, 766, 770, 762, 767, + 757, 754, 759, 759, 758, 760, 761, 762, 756, 758, + 758, 763, 764, 757, 771, 764, 762, 766, 768, 766, - 767, 755, 760, 764, 769, 761, 771, 772, 773, 769, - 775, 774, 768, 776, 763, 778, 777, 780, 770, 775, - 777, 779, 48, 780, 783, 781, 771, 772, 784, 782, - 773, 774, 785, 778, 781, 786, 776, 789, 785, 787, - 779, 782, 784, 783, 787, 788, 788, 790, 791, 786, - 792, 793, 794, 795, 797, 796, 790, 789, 792, 798, - 797, 799, 800, 801, 802, 804, 805, 799, 791, 801, - 802, 793, 795, 798, 794, 796, 803, 807, 805, 809, - 803, 811, 800, 806, 804, 809, 805, 812, 806, 808, - 808, 810, 814, 816, 810, 813, 815, 815, 807, 811, + 760, 755, 770, 764, 769, 761, 767, 767, 772, 769, + 773, 774, 775, 776, 771, 763, 777, 778, 779, 768, + 777, 775, 783, 770, 780, 781, 782, 785, 772, 784, + 780, 774, 773, 785, 781, 778, 776, 779, 782, 786, + 787, 783, 789, 784, 791, 787, 788, 788, 790, 793, + 792, 794, 795, 786, 796, 797, 798, 790, 792, 799, + 800, 797, 789, 803, 791, 799, 801, 803, 804, 793, + 798, 795, 801, 794, 796, 802, 805, 806, 807, 809, + 800, 802, 806, 808, 808, 809, 810, 804, 805, 810, + 811, 812, 813, 814, 815, 815, 805, 816, 813, 807, - 812, 813, 817, 818, 818, 819, 820, 817, 821, 821, - 820, 816, 814, 822, 823, 827, 824, 825, 828, 831, - 819, 824, 830, 833, 833, 834, 835, 836, 836, 834, - 837, 840, 828, 838, 823, 822, 825, 838, 839, 827, - 831, 835, 830, 832, 841, 840, 832, 842, 832, 841, - 846, 843, 832, 839, 832, 837, 843, 843, 844, 832, - 43, 842, 845, 847, 832, 846, 845, 849, 847, 848, - 850, 851, 844, 852, 848, 856, 853, 854, 847, 852, - 856, 849, 853, 854, 857, 851, 855, 855, 858, 859, - 857, 850, 862, 860, 863, 864, 866, 866, 867, 863, + 817, 818, 818, 819, 812, 817, 820, 822, 811, 825, + 820, 821, 821, 814, 823, 816, 824, 827, 819, 828, + 830, 824, 831, 833, 833, 837, 834, 835, 825, 822, + 834, 836, 836, 828, 823, 838, 839, 48, 840, 838, + 830, 827, 835, 831, 832, 855, 855, 832, 842, 832, + 837, 839, 840, 832, 841, 832, 844, 845, 843, 841, + 832, 845, 842, 843, 843, 832, 846, 847, 848, 849, + 844, 850, 847, 848, 851, 858, 859, 43, 852, 853, + 854, 846, 847, 849, 852, 853, 854, 857, 851, 856, + 860, 862, 850, 857, 856, 859, 863, 858, 864, 865, - 872, 872, 865, 867, 862, 869, 870, 868, 859, 864, - 858, 860, 861, 861, 865, 868, 871, 873, 861, 869, - 861, 873, 875, 877, 876, 870, 861, 876, 875, 880, - 878, 861, 861, 879, 880, 871, 881, 882, 861, 879, - 883, 884, 877, 878, 885, 886, 882, 887, 888, 883, - 885, 889, 891, 888, 886, 881, 890, 884, 893, 894, - 896, 892, 899, 895, 902, 901, 887, 893, 894, 895, - 890, 889, 891, 892, 897, 903, 904, 896, 899, 901, - 897, 905, 906, 907, 902, 920, 908, 909, 907, 910, - 904, 908, 909, 915, 903, 911, 911, 906, 910, 905, + 870, 863, 867, 862, 866, 866, 868, 867, 860, 861, + 861, 865, 864, 869, 868, 861, 14, 861, 871, 870, + 872, 872, 873, 861, 875, 877, 873, 869, 861, 861, + 875, 876, 878, 879, 876, 861, 880, 871, 881, 879, + 882, 880, 883, 884, 877, 878, 885, 886, 887, 882, + 888, 883, 885, 889, 890, 888, 886, 881, 891, 884, + 892, 893, 894, 895, 896, 901, 899, 887, 890, 895, + 893, 894, 892, 889, 897, 902, 904, 903, 891, 901, + 897, 896, 899, 905, 906, 910, 907, 908, 909, 913, + 904, 907, 908, 909, 910, 902, 903, 911, 911, 906, - 912, 913, 916, 919, 921, 920, 912, 916, 916, 915, - 918, 917, 917, 918, 913, 917, 922, 919, 923, 924, - 925, 926, 921, 927, 931, 924, 928, 926, 934, 922, - 14, 928, 930, 923, 932, 930, 933, 935, 927, 932, - 925, 933, 935, 936, 934, 931, 937, 939, 936, 940, - 941, 942, 944, 939, 943, 943, 941, 942, 937, 945, - 946, 944, 948, 946, 949, 940, 947, 947, 950, 951, - 953, 952, 951, 954, 960, 13, 953, 945, 961, 954, - 948, 955, 956, 949, 952, 957, 955, 956, 950, 958, - 957, 962, 960, 965, 963, 958, 966, 962, 961, 963, + 912, 905, 913, 915, 916, 920, 912, 917, 917, 916, + 916, 917, 918, 919, 921, 918, 922, 924, 923, 915, + 925, 927, 926, 924, 929, 920, 928, 919, 926, 922, + 932, 928, 921, 923, 931, 938, 927, 931, 929, 933, + 925, 934, 935, 936, 933, 937, 934, 938, 936, 940, + 937, 932, 941, 942, 943, 940, 944, 944, 935, 942, + 943, 945, 946, 947, 948, 948, 947, 949, 941, 950, + 945, 951, 952, 953, 956, 952, 954, 955, 962, 956, + 946, 961, 954, 955, 957, 949, 953, 958, 950, 957, + 959, 951, 958, 968, 963, 972, 959, 964, 962, 961, - 964, 964, 965, 967, 968, 966, 969, 968, 970, 969, - 971, 972, 973, 977, 974, 976, 975, 979, 977, 970, - 974, 967, 975, 972, 978, 978, 980, 981, 971, 982, - 976, 973, 983, 982, 984, 985, 979, 986, 988, 981, - 980, 989, 989, 984, 991, 992, 994, 993, 996, 996, - 983, 994, 995, 997, 985, 1012, 1012, 988, 991, 993, - 992, 995, 986, 998, 999, 1001, 1000, 1001, 1003, 998, - 999, 1000, 1002, 997, 1004, 1005, 1006, 1002, 1007, 1008, - 1005, 1009, 1003, 1010, 1013, 1014, 1008, 1016, 1004, 1015, - 1017, 1006, 0, 1016, 1021, 1018, 1009, 1007, 1013, 1021, + 963, 966, 964, 965, 965, 967, 969, 971, 973, 969, + 966, 968, 970, 972, 967, 970, 974, 975, 971, 976, + 973, 977, 978, 975, 980, 976, 981, 978, 979, 979, + 982, 984, 985, 983, 986, 974, 977, 983, 987, 989, + 981, 985, 982, 980, 990, 990, 992, 993, 996, 984, + 995, 998, 994, 986, 1001, 995, 13, 996, 989, 1001, + 992, 999, 993, 987, 994, 997, 997, 999, 1000, 1004, + 1002, 998, 1002, 1003, 1000, 1005, 1006, 1007, 1003, 1008, + 1009, 1006, 1010, 1004, 1011, 1013, 1013, 1009, 1014, 1005, + 1015, 1016, 1007, 1017, 1018, 1022, 1019, 1010, 1008, 1017, - 1018, 1022, 1010, 1014, 1015, 1020, 1020, 1023, 1022, 1018, - 1017, 1018, 1024, 1025, 1018, 1024, 1026, 1027, 1028, 1029, - 1031, 1023, 1027, 1030, 1029, 1026, 1033, 1033, 1034, 1036, - 1035, 1025, 1040, 1034, 1030, 1035, 1037, 1028, 1038, 1031, - 1041, 1037, 1038, 1039, 1042, 1043, 1044, 1040, 1046, 1036, - 1047, 1045, 1039, 1048, 1049, 1041, 1050, 1043, 1045, 1054, - 1046, 1044, 1050, 1042, 1051, 1052, 1053, 1056, 1054, 1047, - 1057, 1059, 1049, 1056, 1048, 1058, 1060, 1061, 1063, 1051, - 1064, 1060, 1062, 1058, 1057, 1052, 1053, 1062, 1062, 1061, - 1065, 1059, 1066, 1066, 1064, 1068, 1069, 1063, 1071, 1071, + 1022, 1019, 1014, 1011, 1021, 1021, 1016, 1024, 1015, 1023, + 1019, 1026, 1019, 1027, 1018, 1019, 1023, 1025, 1028, 1029, + 1025, 1024, 1027, 1028, 1031, 1030, 1032, 1034, 1034, 1026, + 1030, 1035, 1036, 1037, 1038, 1031, 1035, 1036, 1029, 1038, + 1039, 1040, 1041, 1042, 1039, 1032, 1043, 1044, 1045, 1046, + 1040, 1048, 1047, 1037, 1049, 1050, 1046, 1041, 1042, 1044, + 1051, 1052, 1053, 1045, 1047, 1043, 1051, 1054, 1055, 1058, + 1048, 1059, 1057, 1050, 1060, 1049, 1052, 1055, 1057, 1059, + 1061, 1062, 1053, 1058, 1063, 1061, 1064, 1054, 1065, 1063, + 1063, 1066, 1070, 1062, 1060, 1067, 1067, 1069, 1072, 1072, - 1070, 1073, 1072, 1065, 1067, 1069, 1070, 1072, 1068, 1067, - 1073, 1075, 1067, 1067, 1074, 1078, 1075, 1067, 1081, 1076, - 1074, 1077, 1077, 1067, 1076, 1079, 1079, 1067, 1080, 1082, - 1083, 1080, 1084, 1080, 1086, 1085, 1078, 1087, 1081, 1083, - 1085, 1090, 1092, 1088, 1089, 0, 1090, 1082, 1086, 1088, - 1089, 1092, 1084, 1091, 1095, 1087, 1092, 1091, 1092, 1094, - 1092, 1094, 1092, 1093, 1093, 1095, 1097, 1098, 1099, 1100, - 1097, 1101, 1102, 1104, 1103, 1105, 1101, 1101, 1100, 1103, - 1106, 1107, 1098, 1108, 1105, 1109, 1099, 1104, 1110, 1111, - 1112, 1109, 1113, 1114, 1102, 1112, 1110, 1108, 1115, 1106, + 0, 1070, 1065, 1071, 1066, 1064, 1068, 1073, 1074, 1071, + 1069, 1068, 1073, 1076, 1068, 1068, 1075, 1074, 1076, 1068, + 1079, 1077, 1075, 1078, 1078, 1068, 1077, 1080, 1080, 1068, + 1081, 1082, 1083, 1081, 1084, 1081, 1085, 1086, 1087, 1088, + 1089, 1079, 1086, 1084, 1091, 1125, 1089, 1090, 1125, 1091, + 1083, 1082, 1087, 1090, 1092, 1093, 1085, 1088, 1092, 1094, + 1094, 1095, 1098, 1095, 1093, 1096, 1098, 1099, 1100, 1093, + 1101, 1093, 1102, 1093, 1103, 1093, 1096, 1102, 1102, 1101, + 1104, 1105, 1099, 1106, 1107, 1104, 1100, 1108, 1109, 1111, + 1111, 1110, 1106, 1112, 1113, 1105, 1103, 1110, 1115, 1114, - 1107, 1116, 1114, 1111, 1117, 1119, 1113, 1118, 1118, 1117, - 1120, 1120, 1121, 1125, 1121, 1123, 1115, 1124, 1123, 1126, - 1119, 1128, 1124, 1127, 1127, 1132, 1116, 1133, 1126, 1129, - 1129, 1131, 1125, 1130, 1130, 1135, 1131, 1134, 1134, 1136, - 1137, 1128, 1136, 1139, 1138, 1140, 1132, 1140, 1133, 1138, - 1141, 1143, 1139, 1145, 1143, 1135, 1144, 1146, 1145, 1147, - 1137, 1148, 1146, 1152, 1149, 1151, 1148, 1147, 1141, 1149, - 1151, 1144, 1150, 1150, 1153, 1154, 1155, 1157, 1158, 1161, - 1153, 1152, 1154, 1157, 1158, 1159, 1160, 1162, 1161, 1155, - 1159, 1163, 1160, 1164, 1164, 1165, 1167, 1168, 1169, 1170, + 1116, 1112, 1109, 1107, 1114, 1117, 1108, 1118, 1113, 1116, + 1119, 1121, 1115, 1120, 1120, 1119, 1122, 1122, 1123, 1126, + 1123, 1127, 1128, 1117, 1126, 1130, 1121, 1129, 1129, 1131, + 1131, 1128, 1118, 1132, 1132, 1134, 1133, 1135, 1136, 1136, + 1127, 1133, 1137, 1138, 1139, 1130, 1138, 1140, 1141, 1142, + 1143, 1142, 1140, 1199, 1146, 1199, 1134, 1141, 1135, 1149, + 1145, 1147, 1137, 1145, 1139, 1148, 1147, 1149, 1143, 1146, + 1148, 1150, 1151, 1152, 1152, 1153, 1150, 1151, 1154, 1155, + 1153, 1156, 1157, 1159, 1160, 1155, 1161, 1162, 1156, 1159, + 1160, 1161, 1163, 1162, 1164, 1157, 1154, 1165, 1166, 1166, - 1176, 1171, 1163, 1173, 1169, 1170, 1162, 1171, 1174, 1173, - 1175, 1177, 1176, 1178, 1180, 1165, 1167, 1179, 1179, 1181, - 1168, 1182, 1174, 1185, 1183, 1177, 1184, 1184, 1174, 1183, - 1175, 1178, 1186, 1188, 1180, 1189, 1190, 1186, 1191, 1182, - 1189, 1189, 1192, 1193, 1181, 1194, 1185, 1191, 1195, 1203, - 1192, 1196, 1188, 1197, 1190, 1197, 1196, 1193, 1198, 1196, - 1194, 1199, 1201, 1195, 1200, 1202, 1195, 1199, 1200, 1204, - 1206, 1205, 1198, 1201, 1207, 1203, 1205, 1208, 1210, 1207, - 1211, 1212, 1213, 1213, 1202, 1214, 1215, 1204, 1206, 1214, - 1216, 1218, 1210, 1219, 1217, 1223, 1220, 1208, 1211, 1212, + 1167, 1163, 1169, 1170, 1171, 1172, 1173, 1176, 1165, 1175, + 1171, 1172, 1173, 1164, 1177, 1175, 1178, 1179, 1180, 1182, + 1167, 1176, 1169, 1181, 1181, 1183, 1170, 1176, 1178, 1184, + 1185, 1179, 1186, 1186, 1177, 1185, 1180, 1187, 1188, 1182, + 1190, 1194, 1195, 1188, 1192, 1193, 1191, 1184, 1196, 1194, + 1183, 1191, 1191, 1197, 1193, 1204, 1195, 1205, 1200, 1190, + 1187, 1198, 1192, 1196, 1201, 1203, 1198, 1206, 1197, 1198, + 1201, 1197, 1200, 1202, 1204, 1207, 1203, 1202, 1208, 1209, + 1207, 1210, 1220, 1205, 1209, 1206, 1212, 1213, 1214, 1215, + 1215, 1216, 1217, 1218, 1220, 1216, 1208, 1219, 1221, 1222, - 1217, 1221, 1222, 1218, 1215, 1227, 1224, 1230, 1225, 1216, - 1220, 1224, 1219, 1226, 1223, 1225, 1221, 1222, 1226, 1228, - 1229, 1229, 1230, 1227, 1231, 1232, 1233, 1234, 1228, 1235, - 1231, 1233, 1242, 1234, 1243, 1235, 1236, 1236, 1237, 1237, - 1239, 1239, 1241, 1240, 1244, 1245, 1232, 1240, 1243, 1247, - 1242, 1241, 1245, 1246, 1246, 1248, 1249, 1250, 1251, 1244, - 1252, 1249, 1253, 1248, 1254, 1252, 1252, 1253, 1253, 1247, - 1256, 1250, 1255, 1255, 1257, 1259, 1258, 1251, 1260, 1261, - 1259, 1263, 1262, 1264, 1254, 1258, 1265, 1263, 1264, 1256, - 1266, 1267, 1268, 1257, 1270, 1269, 1266, 1260, 1268, 1261, + 1212, 1210, 1225, 1219, 1223, 1213, 1214, 1224, 1227, 1226, + 1217, 1228, 1218, 1222, 1226, 1227, 1228, 1221, 1229, 1223, + 1230, 1225, 1224, 1231, 1231, 1232, 1233, 1234, 1235, 1230, + 1242, 1236, 1233, 1235, 1242, 1237, 1229, 1236, 1238, 1238, + 1232, 1237, 1239, 1239, 1241, 1241, 1243, 1244, 1234, 1245, + 1247, 1246, 1248, 1248, 1249, 1243, 1250, 1247, 1252, 1253, + 1256, 0, 1251, 1245, 1250, 1244, 1246, 1251, 1257, 1257, + 1254, 1258, 1252, 1259, 1249, 1254, 1254, 1255, 1253, 1260, + 1256, 1261, 1255, 1255, 1262, 1263, 1261, 1265, 1260, 1264, + 1258, 1266, 1259, 1265, 1267, 1268, 1266, 1269, 1270, 1272, - 1262, 1269, 1271, 1272, 1273, 1274, 1275, 1277, 1277, 1276, - 1267, 1278, 1265, 1270, 1278, 1281, 1279, 1280, 1280, 1274, - 1281, 1271, 1272, 1273, 1276, 1282, 1283, 1275, 1279, 1282, - 1285, 1284, 1286, 1289, 1286, 1290, 1288, 1291, 1286, 1283, - 1284, 1288, 1293, 1285, 1292, 1292, 1294, 1293, 1289, 1295, - 1299, 1286, 1294, 1291, 1296, 1290, 1297, 1298, 1300, 1296, - 1297, 1298, 1301, 1302, 1295, 1303, 1303, 1305, 1307, 1302, - 1299, 1311, 1308, 1309, 1309, 1310, 1300, 1308, 1313, 1313, - 1315, 1310, 1301, 1315, 1317, 1305, 1316, 1316, 1318, 1307, - 1320, 1311, 1321, 1320, 1322, 1323, 1323, 1325, 1324, 1330, + 1271, 1268, 1273, 1262, 1270, 1263, 1271, 1264, 1274, 1275, + 1276, 1277, 1279, 1279, 1278, 1364, 1269, 1364, 1272, 1280, + 1267, 1273, 1280, 1281, 1276, 1282, 1282, 1274, 1275, 1278, + 1284, 1283, 1277, 1285, 1284, 1281, 1283, 1287, 1286, 1288, + 1291, 1288, 1292, 1290, 1293, 1288, 1285, 1286, 1290, 1295, + 1287, 1294, 1294, 1296, 1295, 1291, 1297, 1298, 1288, 1296, + 1293, 1299, 1292, 1300, 1301, 1302, 1299, 1300, 1301, 1303, + 1298, 1297, 1304, 1305, 1306, 1306, 1308, 1310, 1311, 1305, + 1312, 1312, 1313, 1311, 1314, 1302, 1320, 1303, 1313, 1316, + 1316, 1321, 1304, 1318, 1308, 1324, 1318, 1327, 1310, 1319, - 1317, 1326, 1327, 1322, 1318, 1328, 1331, 1327, 1329, 1329, - 1332, 1334, 1321, 1324, 1333, 1333, 1335, 1330, 1325, 1328, - 1326, 1331, 1336, 1337, 1340, 1334, 1339, 1336, 1338, 1338, - 1339, 1341, 1341, 1342, 1335, 1332, 1343, 1344, 1337, 1345, - 1346, 1344, 1348, 1348, 1340, 1346, 1349, 1343, 1350, 1351, - 1353, 1352, 1354, 1354, 1355, 1342, 1356, 1357, 1345, 1355, - 1360, 1358, 1350, 1364, 1349, 1352, 1359, 1369, 1351, 1351, - 1358, 1359, 1361, 1362, 1361, 1353, 1356, 1357, 1362, 1363, - 1360, 1365, 1367, 1364, 1370, 1363, 1369, 1365, 1368, 1368, - 1370, 1373, 1372, 1374, 1374, 1376, 1367, 1372, 1375, 1375, + 1319, 1325, 1320, 1323, 1314, 1328, 1323, 1321, 1326, 1326, + 1325, 1329, 1327, 1330, 1331, 1324, 1332, 1332, 1330, 1333, + 1334, 1335, 1336, 1336, 1337, 1338, 1328, 1339, 1331, 1340, + 1329, 1343, 1339, 1341, 1341, 1334, 1342, 1333, 1337, 1345, + 1342, 1344, 1344, 1338, 1340, 1346, 1335, 1348, 1347, 1349, + 1352, 1343, 1347, 1353, 1349, 1354, 1346, 1351, 1351, 1355, + 1356, 1345, 1357, 1357, 1358, 0, 1348, 1353, 1352, 1358, + 1359, 1360, 1361, 1355, 1354, 1354, 1363, 1362, 1365, 1367, + 1366, 1361, 1362, 1365, 1370, 1356, 1366, 1368, 1371, 1371, + 1359, 1360, 1372, 1368, 1373, 1376, 1363, 1375, 1370, 1367, - 1377, 1378, 1379, 1380, 1380, 1379, 1382, 1381, 1385, 1376, - 1388, 1383, 0, 1385, 1383, 1373, 1378, 1383, 1377, 1381, - 1387, 1384, 1386, 1392, 1392, 1387, 1382, 1384, 1390, 1383, - 1389, 1386, 1391, 1389, 1390, 1388, 1394, 1391, 1393, 1393, - 1395, 1396, 1394, 1397, 1398, 1395, 1399, 1400, 1403, 1401, - 1400, 1402, 1404, 1403, 1396, 1401, 1405, 1402, 1404, 1406, - 1408, 1397, 1409, 1398, 1406, 1408, 1399, 1407, 1407, 1410, - 1411, 1412, 1413, 1417, 1418, 1414, 1416, 1420, 1415, 1405, - 1409, 1419, 1416, 1422, 1422, 1412, 1413, 1414, 1423, 1410, - 1411, 1415, 1424, 1417, 1418, 1419, 1426, 1424, 1420, 1425, + 1373, 1379, 1375, 1377, 1377, 1378, 1378, 1380, 1381, 1382, + 1384, 1372, 1382, 1383, 1383, 1379, 1385, 1391, 1415, 1376, + 1387, 1386, 1384, 1381, 1386, 1380, 1387, 1386, 1388, 1389, + 1390, 1392, 1415, 1388, 1392, 1390, 1385, 1393, 1389, 1386, + 1394, 1399, 1391, 1393, 1397, 1394, 1395, 1395, 1396, 1396, + 1397, 1398, 1400, 1401, 1399, 1402, 1398, 1403, 1404, 1405, + 1403, 1406, 1407, 1408, 1404, 1405, 1406, 1412, 1407, 1409, + 1400, 1413, 1401, 1411, 1409, 1402, 1410, 1410, 1411, 1414, + 1416, 1417, 1418, 1419, 1420, 1412, 1408, 1421, 1422, 1419, + 1423, 1413, 1426, 1417, 1416, 1418, 1425, 1425, 1427, 1414, - 1425, 1427, 1428, 1429, 1430, 1431, 1438, 1432, 1423, 1434, - 1433, 1426, 1436, 1430, 1432, 1427, 1440, 1440, 1443, 1433, - 1431, 1429, 1433, 1441, 1441, 1434, 1428, 1436, 1442, 1446, - 1439, 1438, 1436, 1439, 1444, 1447, 1443, 1444, 1445, 1445, - 1442, 1448, 1446, 1449, 1450, 1451, 1448, 1452, 1449, 1453, - 1454, 1455, 1456, 1458, 1447, 1461, 1452, 1459, 1456, 1454, - 1455, 1451, 1454, 1450, 1457, 1457, 1460, 1462, 1453, 1461, - 1459, 1465, 1466, 1458, 1463, 1467, 1467, 1468, 1469, 1473, - 1470, 1474, 1472, 1462, 1460, 1470, 1463, 1469, 1471, 1471, - 1466, 1472, 1475, 1468, 1472, 1476, 1465, 1473, 1478, 1479, + 1428, 1428, 1422, 1427, 1420, 1429, 1431, 1421, 1430, 1432, + 1433, 1423, 1426, 1434, 1435, 1437, 1441, 1436, 1439, 1433, + 1429, 1435, 1430, 1443, 1443, 1446, 1436, 1432, 1434, 1436, + 1431, 1437, 1442, 1439, 1445, 1442, 1444, 1444, 1439, 1447, + 1449, 1441, 1447, 1446, 1448, 1448, 1445, 1450, 1453, 1451, + 1452, 1455, 1454, 1449, 1451, 1452, 1456, 1459, 1460, 1460, + 1455, 1457, 1458, 1459, 1461, 1462, 1450, 1453, 1454, 1463, + 1457, 1458, 1464, 1457, 1465, 1456, 1466, 1468, 1462, 1469, + 1470, 1470, 1471, 1472, 1461, 1477, 1464, 1463, 1466, 1473, + 1465, 1475, 1472, 1476, 1473, 1474, 1474, 1469, 1471, 1478, - 1476, 1476, 1474, 1471, 1480, 1481, 1482, 1483, 1483, 1484, - 1475, 1481, 1478, 1485, 1479, 1484, 1486, 1487, 1485, 1489, - 1490, 1491, 1486, 1487, 1482, 1492, 1480, 1491, 1493, 1494, - 1498, 1493, 1496, 1499, 1490, 1494, 1500, 1493, 1492, 1489, - 1496, 1501, 1502, 1503, 1500, 1504, 1505, 1506, 1506, 1498, - 1501, 1507, 1499, 1509, 1510, 1502, 1503, 1507, 1508, 1504, - 1505, 1511, 1512, 1513, 1508, 1514, 1509, 1515, 1516, 1506, - 1517, 1514, 1519, 1519, 1510, 1520, 1513, 1526, 1521, 1511, - 1522, 1512, 1521, 1528, 1516, 1522, 1523, 1524, 1517, 1515, - 1525, 1523, 1524, 1529, 1529, 1520, 1530, 1531, 1528, 1525, + 1475, 1481, 1468, 1475, 1482, 1483, 1477, 1479, 1486, 1484, + 1474, 1476, 1479, 1479, 1484, 1481, 1485, 1478, 1488, 1482, + 1487, 1487, 1485, 1489, 1488, 1490, 1486, 1483, 1489, 1491, + 1493, 1490, 1494, 1495, 1496, 1491, 1498, 1500, 1502, 1495, + 1497, 1503, 1498, 1497, 1504, 1500, 1494, 1496, 1506, 1497, + 1493, 1507, 1504, 1505, 1508, 1509, 1515, 1502, 1510, 1510, + 1503, 1506, 1505, 1513, 1507, 1511, 1512, 1514, 1508, 1509, + 1516, 1511, 1512, 1517, 1515, 1518, 1513, 1519, 1520, 1521, + 1510, 1518, 1523, 1523, 1524, 1526, 1517, 1514, 1525, 1516, + 1526, 1527, 1525, 1528, 1520, 1530, 1527, 1521, 1528, 1519, - 1526, 1532, 1533, 1533, 1534, 1535, 1538, 1536, 1539, 1531, - 1537, 1540, 1535, 1542, 1541, 1530, 0, 1540, 1534, 1536, - 1532, 1543, 1537, 1544, 1544, 1538, 1541, 1543, 1539, 1545, - 1548, 1542, 1545, 1546, 1546, 1548, 1549, 1550, 1551, 1551, - 1552, 1555, 1553, 1550, 1553, 1549, 1554, 1556, 1557, 1554, - 1558, 1559, 1552, 1560, 1563, 1561, 1559, 1562, 1565, 1563, - 1566, 1555, 1560, 1569, 1564, 1571, 1557, 1561, 1558, 1556, - 1567, 1567, 1562, 1564, 1568, 1566, 1570, 1572, 1565, 1578, - 1568, 1571, 1574, 1573, 1569, 1573, 1564, 1575, 1575, 1576, - 1576, 1577, 1577, 1579, 1579, 1570, 1574, 1572, 1574, 1578, + 1529, 1532, 1533, 1533, 1524, 1534, 1536, 1535, 1538, 1529, + 1537, 1537, 1542, 1539, 1540, 1541, 1532, 1543, 1530, 1535, + 1539, 1545, 1538, 1544, 1534, 1536, 1540, 1541, 1546, 1544, + 1547, 1542, 0, 1545, 1548, 1548, 1547, 1543, 1549, 1550, + 1550, 1549, 1552, 1553, 1554, 1556, 1546, 1552, 1555, 1555, + 1554, 1557, 1553, 1557, 1559, 1558, 1560, 1556, 1558, 1561, + 1563, 1562, 1564, 1565, 1567, 1563, 1566, 1568, 1569, 1567, + 1570, 1564, 1571, 1571, 1559, 1565, 1568, 1561, 1560, 1562, + 1572, 1566, 1573, 1574, 1575, 1570, 1572, 1576, 1569, 1568, + 1577, 1582, 1577, 0, 1578, 1579, 1579, 1580, 1580, 1585, - 1580, 1580, 1581, 1582, 1583, 1583, 1584, 1585, 1586, 1588, - 1584, 1586, 1589, 1585, 1590, 1588, 1591, 1597, 1592, 1596, - 1590, 1592, 1598, 1581, 1582, 1593, 1593, 1594, 1594, 1595, - 1589, 1596, 1596, 1596, 1599, 1595, 1600, 1597, 1596, 1602, - 1599, 1591, 1598, 1603, 1602, 1602, 1604, 1605, 1604, 1606, - 1609, 1608, 1610, 1607, 1611, 1611, 1600, 1603, 1605, 1607, - 1608, 1612, 1613, 1613, 1606, 1614, 1615, 1616, 1616, 1618, - 1609, 1617, 1617, 1610, 1621, 1621, 1622, 1623, 1626, 1628, - 1628, 1625, 1629, 1630, 1633, 1614, 1623, 1612, 1615, 1618, - 1625, 1627, 1635, 1631, 0, 1632, 1636, 1627, 1630, 1626, + 1575, 1586, 1574, 1573, 1581, 1581, 1590, 1576, 1578, 1590, + 1578, 1582, 1583, 1583, 1584, 1584, 1587, 1587, 1589, 1588, + 1585, 1592, 1586, 1588, 1589, 1593, 1594, 1592, 1595, 1601, + 1596, 1602, 1594, 1596, 1597, 1597, 1598, 1598, 1599, 1603, + 1604, 1606, 1600, 1593, 1599, 1603, 1606, 1606, 1607, 1601, + 1608, 1602, 1608, 1595, 1600, 1600, 1600, 1609, 1610, 1611, + 1604, 1600, 1607, 1612, 1613, 1611, 1614, 1616, 1609, 1615, + 1615, 1618, 1612, 1610, 1617, 1617, 1619, 1620, 1620, 1621, + 1621, 1622, 1625, 1625, 1613, 1626, 1627, 1614, 1629, 1634, + 1630, 1618, 1633, 1616, 1631, 1627, 1636, 1629, 1619, 1635, - 1631, 1622, 1638, 1629, 1632, 1634, 1634, 1638, 1639, 1640, - 1633, 1642, 1636, 1641, 1639, 1643, 1646, 1642, 1635, 1645, - 1641, 1643, 1644, 1644, 1645, 1646, 1647, 1649, 1648, 1640, - 1650, 1651, 1652, 1650, 1653, 1653, 1654, 1655, 1656, 1649, - 1657, 1659, 1654, 1660, 1657, 1661, 1647, 1648, 1662, 1651, - 1661, 1663, 1665, 1656, 1668, 1666, 1667, 1655, 1652, 1666, - 1657, 1659, 1667, 1668, 1671, 1660, 1663, 1662, 1669, 1669, - 1670, 1665, 1672, 1672, 1670, 1671, 1673, 1674, 1676, 1675, - 1671, 1677, 1678, 1676, 1679, 1680, 1688, 1681, 1682, 1682, - 1679, 1674, 1681, 1683, 1683, 1684, 1686, 1673, 1675, 1684, + 1631, 1622, 1632, 1632, 1634, 1636, 1635, 1637, 1638, 1638, + 1626, 1630, 1639, 1633, 1640, 1642, 1643, 1644, 1645, 1649, + 1642, 1646, 1643, 1647, 1649, 1645, 1650, 1646, 1651, 1647, + 1640, 1648, 1648, 1637, 1652, 1650, 1655, 1644, 1639, 1653, + 1654, 1656, 1659, 1654, 1657, 1657, 1658, 1664, 1651, 1660, + 1663, 1653, 1658, 1652, 1655, 1661, 1665, 1666, 1666, 1661, + 1667, 1665, 1659, 1668, 1660, 1670, 0, 1656, 1671, 1664, + 1663, 1672, 1671, 1673, 1676, 1661, 1678, 1672, 1668, 1667, + 1674, 1674, 1673, 1675, 1670, 1676, 1679, 1675, 1677, 1677, + 1676, 1680, 1682, 1681, 1683, 1684, 1685, 1678, 1681, 1686, - 1680, 1677, 1678, 1687, 1694, 1686, 1688, 1689, 1689, 1690, - 1690, 1691, 1692, 1704, 1687, 1693, 1691, 1691, 1692, 1687, - 1695, 1693, 1696, 1697, 1699, 1695, 1701, 1700, 1702, 1697, - 1694, 1700, 1706, 1703, 1696, 1704, 1699, 1705, 1701, 1703, - 1708, 1709, 1710, 1705, 1706, 1712, 1716, 1710, 1712, 1713, - 1713, 0, 1708, 1702, 1714, 1714, 1715, 1715, 1717, 1718, - 1709, 1721, 1719, 1720, 1717, 1718, 1716, 1719, 1723, 1720, - 1721, 1725, 1726, 1723, 1725, 1727, 1727, 1729, 1730, 1733, - 1731, 1732, 1732, 1737, 1726, 1731, 1734, 1735, 1733, 1729, - 1730, 1734, 1735, 1736, 1736, 1738, 1739, 1740, 1741, 1744, + 1679, 1684, 1687, 1687, 1686, 1688, 1688, 1691, 1692, 1689, + 1680, 1685, 1682, 1689, 1683, 1693, 1691, 1694, 1694, 1692, + 1695, 1695, 1696, 1697, 1692, 1698, 1699, 1696, 1696, 1697, + 1701, 1698, 1700, 1702, 1704, 1693, 1705, 1700, 1706, 1702, + 1705, 1707, 1701, 1708, 1711, 1709, 1704, 1710, 1713, 1708, + 1706, 1714, 1699, 1710, 1715, 1717, 1711, 1721, 1717, 1715, + 1713, 1718, 1718, 1719, 1719, 1722, 1707, 1709, 1720, 1720, + 1714, 1722, 1723, 1726, 1724, 1725, 1731, 1721, 1723, 1724, + 1728, 1725, 1726, 1730, 1734, 1728, 1730, 1735, 1731, 1732, + 1732, 1738, 1736, 1737, 1737, 1742, 1734, 1736, 1739, 1735, - 1742, 1743, 1741, 1737, 1738, 1742, 1747, 1743, 1746, 1746, - 1748, 1749, 1749, 1744, 1739, 1751, 1740, 1750, 1752, 1748, - 1746, 1754, 1759, 1753, 1747, 1759, 1750, 1751, 1753, 1757, - 1757, 1760, 1761, 0, 1754, 1763, 1765, 1764, 1766, 1752, - 1767, 1767, 1765, 1768, 1773, 1768, 1770, 1760, 1761, 1772, - 1763, 1764, 1769, 1769, 1770, 1766, 1772, 1774, 1774, 1775, - 1776, 1777, 1778, 1779, 1773, 1780, 1782, 1781, 1775, 1784, - 1787, 1785, 1782, 1777, 1778, 1779, 1786, 1786, 1788, 1791, - 0, 1776, 1781, 1785, 1789, 1782, 1795, 1789, 1787, 1784, - 1790, 1780, 1793, 1799, 1794, 1790, 1794, 1793, 1788, 1791, + 1738, 1740, 1743, 1739, 1741, 1741, 1740, 1744, 1745, 1746, + 1748, 1743, 1747, 1746, 1749, 1742, 1748, 1747, 1751, 1751, + 1752, 1756, 1753, 1754, 1754, 1744, 1755, 1745, 1749, 1757, + 1751, 1753, 1758, 1756, 1759, 1755, 1765, 1758, 1752, 1762, + 1762, 1764, 1766, 1769, 1764, 1768, 1771, 1759, 1770, 1773, + 1757, 1773, 1765, 1778, 1770, 1772, 1772, 1769, 1766, 1775, + 1768, 1774, 1774, 1771, 1777, 1779, 1779, 1775, 1780, 1781, + 1782, 1777, 1783, 1778, 1784, 1785, 1786, 1780, 1792, 1787, + 1789, 1790, 1782, 1793, 1783, 1787, 1784, 1791, 1791, 1794, + 1781, 1786, 1794, 1790, 1795, 1796, 1792, 1798, 1787, 1795, - 1796, 1797, 1799, 1801, 1795, 1796, 1802, 1803, 1797, 1804, - 1805, 1804, 1807, 1808, 1807, 1802, 1809, 1809, 1810, 1803, - 1811, 1801, 1812, 1813, 1812, 1811, 1814, 1808, 1813, 1805, - 1815, 1814, 1816, 1817, 1819, 1818, 1822, 1820, 1887, 1817, - 1818, 1827, 1823, 1826, 1810, 1820, 1887, 1819, 1815, 1824, - 1824, 1828, 1816, 1825, 1825, 1822, 1823, 1828, 1826, 1829, - 1830, 1827, 1830, 1831, 1829, 1832, 1832, 1836, 1833, 1834, - 1834, 1831, 1835, 1835, 1838, 1839, 1836, 1837, 1841, 1831, - 1833, 1840, 1837, 1840, 1839, 1842, 1843, 1839, 1844, 1846, - 1842, 1842, 1838, 1847, 1850, 1843, 1851, 1848, 1847, 1841, + 1789, 1785, 1798, 1793, 1799, 1800, 1799, 1801, 1804, 1802, + 1806, 1807, 1801, 1808, 1810, 1796, 1802, 1804, 1813, 1809, + 1807, 1809, 1812, 1800, 1812, 1808, 1814, 1814, 1806, 1815, + 1816, 1820, 1813, 1810, 1817, 1816, 1817, 1818, 1819, 1821, + 1822, 1824, 1818, 1819, 1825, 1823, 1822, 1827, 1828, 1820, + 1823, 1832, 1825, 1831, 1824, 1815, 1829, 1829, 1833, 1821, + 1830, 1830, 1828, 1838, 1833, 1834, 1827, 1835, 1831, 1835, + 1834, 1832, 1836, 1837, 1837, 1838, 1839, 1839, 1840, 1840, + 1836, 1841, 1842, 1843, 1845, 1847, 1849, 1842, 1836, 1846, + 1841, 1846, 1848, 1845, 1857, 1849, 1845, 1848, 1848, 1850, - 1844, 1846, 1848, 1852, 1853, 1853, 1854, 1850, 1855, 1856, - 1860, 1861, 1852, 1857, 1858, 1862, 1851, 1874, 1871, 1876, - 1876, 1865, 1860, 1861, 1854, 1856, 1855, 1857, 1863, 1858, - 1865, 1864, 1868, 1863, 1870, 1862, 1864, 1872, 1868, 1873, - 1870, 1871, 1874, 1879, 1875, 1877, 1878, 1878, 0, 1888, - 1882, 1868, 1872, 1875, 1877, 1880, 1881, 1873, 1884, 1880, - 1883, 1881, 1879, 1882, 1884, 1883, 1883, 1885, 1886, 1888, - 1893, 1886, 1896, 1885, 1891, 1891, 1892, 1892, 1897, 1893, - 1894, 1894, 1895, 1895, 1896, 1899, 1898, 1900, 1900, 1906, - 1899, 1892, 1898, 1901, 1901, 1902, 1897, 1903, 1909, 1911, + 1852, 1843, 1853, 1854, 1856, 1860, 1847, 1853, 1854, 1858, + 1861, 1850, 1852, 1862, 1857, 1859, 1859, 1856, 1858, 1863, + 1864, 1868, 1866, 1860, 1867, 1869, 1870, 1877, 1861, 1862, + 1869, 1870, 1874, 1863, 1866, 1864, 1867, 1871, 1874, 1876, + 1878, 1868, 1879, 1880, 1881, 1876, 1871, 1882, 1882, 1883, + 1877, 1874, 1885, 1881, 1888, 1878, 1884, 1884, 1883, 1886, + 1879, 1887, 1892, 1886, 1889, 1892, 1887, 1888, 1880, 1889, + 1889, 1885, 1890, 1891, 1893, 1894, 1897, 1897, 1890, 1891, + 1899, 1902, 1893, 1898, 1898, 1900, 1900, 1901, 1901, 1899, + 1903, 1904, 1911, 1902, 1905, 1894, 1911, 1904, 1898, 1905, - 1902, 1905, 1892, 1903, 1907, 1905, 1910, 1913, 1907, 1906, - 1912, 1910, 1913, 1914, 1915, 1916, 1916, 1917, 1918, 1919, - 1920, 1917, 1911, 1909, 1919, 1912, 1921, 1923, 1922, 1924, - 1915, 1914, 1923, 1918, 1925, 1926, 1926, 1928, 1921, 1929, - 1930, 1931, 1924, 1932, 1933, 1928, 1920, 1922, 1934, 1935, - 1936, 1938, 1925, 1939, 1939, 1941, 1942, 1940, 1929, 1930, - 1940, 1935, 1943, 1933, 1931, 1947, 1938, 1932, 1941, 1934, - 1942, 1936, 1944, 1944, 1948, 1943, 1945, 1945, 1946, 1946, - 1947, 1949, 1949, 1950, 1951, 1951, 1952, 1948, 1954, 1955, - 1956, 1952, 1950, 1954, 1957, 1950, 1958, 1958, 1959, 1959, + 1906, 1906, 1907, 1907, 1912, 1908, 1909, 1913, 1903, 1898, + 1908, 1913, 1909, 1915, 1916, 1918, 1917, 1919, 1920, 1916, + 1924, 1921, 1919, 1923, 1912, 1922, 1922, 1923, 1925, 1926, + 1918, 1927, 1928, 1925, 1930, 1924, 1920, 1921, 1915, 1917, + 1929, 1931, 1934, 1927, 1935, 1929, 1936, 1930, 1932, 1932, + 1934, 1928, 1937, 1938, 1939, 1926, 1941, 1940, 1942, 1931, + 1948, 1944, 2011, 1935, 2011, 1936, 1945, 1945, 1941, 1946, + 1947, 1949, 1946, 1939, 1948, 1937, 1944, 1938, 1940, 1942, + 1950, 1950, 1953, 1947, 1949, 1951, 1951, 1952, 1952, 1954, + 1955, 1955, 1956, 1957, 1957, 1958, 1961, 1953, 1960, 1962, - 1960, 1961, 1961, 1962, 1963, 1963, 1957, 1964, 1965, 1955, - 1956, 1966, 1966, 1965, 1967, 1967, 1968, 1969, 1970, 1960, - 1971, 1962, 1964, 1973, 1974, 1974, 1969, 1975, 1973, 1977, - 1968, 1978, 1970, 1976, 1976, 1979, 1982, 1978, 1979, 1971, - 1980, 1980, 1981, 1981, 1983, 1984, 1975, 1977, 1985, 1985, - 1987, 1988, 1989, 1990, 1992, 1982, 1980, 1990, 1999, 1983, - 1991, 1991, 1993, 1994, 1984, 1996, 1996, 1989, 1997, 1998, - 1987, 2000, 1999, 1992, 1988, 2001, 1998, 1993, 1994, 2002, - 2003, 2003, 2004, 2005, 2006, 2005, 2008, 2009, 1997, 2000, - 2010, 2004, 2009, 2001, 2011, 2010, 2012, 2013, 2008, 2015, + 1958, 1956, 1954, 1960, 1956, 1963, 1964, 1964, 1965, 1965, + 1966, 1967, 1967, 1968, 1969, 1969, 1961, 1963, 1970, 1962, + 1971, 1972, 1972, 1973, 1973, 1971, 1974, 1975, 1976, 1966, + 1977, 1968, 1979, 1970, 1980, 1980, 1975, 1979, 1981, 1984, + 1974, 1983, 1976, 1982, 1982, 1984, 1988, 1985, 1989, 1977, + 1985, 1986, 1986, 1987, 1987, 1990, 1993, 1981, 1994, 1983, + 1991, 1991, 1995, 1989, 1996, 1988, 1998, 1986, 1996, 1997, + 1997, 1999, 2000, 2003, 1990, 2004, 1993, 1995, 2002, 2002, + 2005, 1994, 2004, 2006, 2007, 1998, 1999, 2000, 2008, 2009, + 2009, 2010, 2012, 2003, 2005, 2014, 2017, 2018, 2015, 2016, - 2019, 2014, 2017, 2018, 2006, 2002, 2014, 2017, 2018, 2012, - 2020, 2021, 2023, 2025, 2022, 2019, 2020, 2023, 2013, 2011, - 2022, 2024, 2026, 2084, 2027, 2015, 2024, 2027, 2028, 2032, - 2029, 2030, 2021, 2031, 2037, 2026, 2084, 2028, 2025, 2029, - 2030, 2033, 2031, 2032, 2034, 2035, 2039, 2033, 2043, 2035, - 2034, 2040, 2040, 2041, 2037, 2039, 2042, 2042, 2045, 2041, - 2046, 2047, 2047, 2048, 2049, 2042, 2052, 2051, 2043, 2053, - 2043, 2054, 2056, 2049, 2045, 2056, 2046, 2058, 2048, 2051, - 2057, 2059, 2052, 2054, 2053, 2057, 2060, 2060, 2061, 2061, - 2063, 2063, 2064, 2059, 2065, 2064, 2066, 2058, 2067, 2065, + 2010, 2006, 2007, 2015, 2016, 2019, 2020, 2014, 2021, 2025, + 2018, 2020, 2012, 2023, 2008, 2024, 2026, 2027, 2023, 2028, + 2024, 2017, 2026, 2029, 2025, 2028, 2019, 2030, 2029, 2031, + 2032, 2034, 2030, 2033, 2021, 2035, 2033, 2036, 2027, 2037, + 2034, 2038, 2043, 2032, 2035, 2039, 2036, 2040, 2037, 2045, + 2049, 2039, 2041, 2040, 2031, 2038, 2041, 2047, 2045, 2046, + 2046, 2051, 2043, 2047, 2048, 2048, 2052, 2053, 2053, 2054, + 2049, 2055, 2049, 2048, 2057, 2058, 2060, 2051, 2059, 2064, + 2055, 2082, 2052, 2065, 2054, 2082, 2057, 2062, 2060, 2063, + 2062, 2058, 2072, 2059, 2063, 2065, 2066, 2066, 2072, 2064, - 2068, 2068, 2066, 2069, 2067, 2070, 2070, 2071, 2072, 2073, - 2074, 2074, 2076, 2078, 2078, 2077, 2076, 2069, 2077, 2071, - 2079, 2080, 2072, 2081, 2086, 2079, 2087, 2082, 2073, 2086, - 2080, 2082, 2083, 2083, 2088, 2089, 2090, 2091, 2095, 2092, - 2090, 2093, 2094, 2081, 2092, 2097, 2087, 2093, 2094, 2089, - 2098, 2100, 2099, 2104, 2088, 2098, 2095, 2091, 2099, 2100, - 2101, 2097, 2101, 2105, 2105, 2106, 2107, 2104, 2106, 2108, - 2108, 2110, 2111, 2112, 2114, 2110, 2113, 2113, 2111, 2117, - 2117, 2119, 2121, 2114, 2122, 2112, 2125, 2126, 2127, 2128, - 2135, 2125, 2107, 2127, 2128, 2136, 2121, 2129, 2129, 2119, + 2067, 2067, 2069, 2069, 2070, 2071, 2073, 2070, 2074, 2074, + 2071, 2075, 2073, 2076, 2076, 2077, 2078, 2079, 2080, 2080, + 2083, 2084, 2084, 2083, 2085, 2075, 2086, 2077, 2087, 2085, + 2078, 2089, 2089, 2088, 2090, 2086, 2079, 2088, 2092, 2093, + 2094, 2095, 2096, 2092, 2097, 2098, 2096, 2090, 2087, 2101, + 2098, 2099, 2100, 2103, 2113, 2095, 2104, 2099, 2100, 2093, + 2094, 2104, 2105, 2106, 2097, 2110, 0, 2101, 2105, 2103, + 2107, 2106, 2107, 2111, 2111, 2112, 2114, 2114, 2112, 2110, + 2113, 2116, 2117, 2118, 2120, 2116, 2119, 2119, 2117, 2123, + 2123, 2125, 2127, 2120, 2128, 2118, 2131, 2132, 2133, 2134, - 2122, 2131, 2131, 2133, 2134, 2134, 2135, 2137, 2139, 2133, - 2140, 2143, 2137, 2126, 2141, 2141, 2145, 2136, 2144, 2149, - 2143, 2146, 2140, 2150, 2144, 2148, 2148, 2139, 2152, 2152, - 2153, 2153, 2154, 2155, 2145, 2156, 2146, 2154, 2149, 2159, - 2157, 2150, 2160, 2161, 2156, 2157, 2158, 2162, 2158, 2163, - 2163, 2155, 2162, 2159, 2164, 2164, 2160, 2165, 2165, 2166, - 2166, 2167, 2168, 2161, 2169, 2170, 2170, 2171, 2171, 2169, - 2172, 2173, 2174, 2167, 2175, 2176, 2176, 2177, 2178, 2178, - 2168, 2181, 2172, 2173, 2179, 2179, 2180, 2182, 2183, 2184, - 2175, 2186, 2174, 2181, 2182, 2187, 2177, 2180, 2185, 2189, + 2141, 2131, 2142, 2133, 2134, 0, 2127, 2135, 2135, 2125, + 2128, 2137, 2137, 2139, 2140, 2140, 2141, 2143, 2145, 2139, + 2146, 2149, 2143, 2132, 2142, 2147, 2147, 2150, 2151, 2152, + 2149, 2155, 2146, 2150, 2154, 2154, 2156, 2145, 2158, 2158, + 2159, 2159, 2160, 2161, 2152, 2165, 2151, 2160, 2162, 2166, + 2155, 2163, 2167, 2164, 2156, 2164, 2163, 2162, 0, 2165, + 2168, 2161, 2174, 2166, 2173, 2168, 2169, 2169, 2170, 2170, + 2171, 2171, 2167, 2172, 2172, 2178, 2173, 2175, 2176, 2176, + 2174, 2179, 2175, 2177, 2177, 2180, 2181, 2178, 2182, 2182, + 2183, 2184, 2184, 2179, 2185, 2185, 2186, 2188, 2187, 2189, - 2183, 2188, 2188, 2185, 2190, 2191, 2192, 2193, 2189, 2184, - 2194, 2186, 2195, 2195, 2196, 2187, 2200, 2197, 2198, 2192, - 2201, 2202, 2204, 2196, 2194, 2191, 2203, 2207, 2207, 2203, - 2190, 2193, 2197, 2198, 2200, 2205, 2204, 2214, 2206, 2216, - 2205, 2218, 2201, 2206, 2202, 2208, 2208, 2209, 2209, 2211, - 2211, 2213, 2213, 2215, 2219, 2214, 2220, 2221, 2216, 2222, - 2223, 2218, 2228, 2224, 2215, 2225, 2225, 2229, 2222, 2227, - 2227, 2234, 2219, 2230, 2230, 2235, 2229, 2221, 2220, 2232, - 2223, 2224, 2233, 2233, 2228, 2236, 2237, 2238, 2232, 2234, - 2239, 2240, 2236, 2235, 2241, 2242, 2242, 2243, 2243, 2245, + 2190, 2191, 2181, 2192, 2188, 2180, 2191, 2186, 2193, 2183, + 2187, 2189, 2194, 2194, 2196, 2195, 2197, 2198, 2199, 2200, + 2190, 2201, 2201, 2192, 2195, 2202, 2203, 2206, 2193, 2204, + 2198, 2207, 2208, 2200, 2202, 2209, 2197, 2210, 2209, 0, + 2196, 2203, 2199, 2211, 2204, 2206, 2220, 2212, 2211, 2213, + 2213, 2210, 2212, 2207, 2221, 2208, 2214, 2214, 2215, 2215, + 2217, 2217, 2219, 2219, 2220, 2221, 2222, 2224, 2225, 2226, + 2227, 2228, 2229, 2231, 2231, 2230, 2233, 2233, 2234, 2235, + 2228, 2236, 2236, 2239, 2239, 2222, 2225, 2224, 2235, 2238, + 2227, 2226, 2229, 2230, 2240, 2241, 2242, 2244, 2238, 2243, - 2244, 2237, 2247, 2246, 2248, 2238, 2244, 2240, 2239, 2248, - 2249, 2250, 0, 2241, 2251, 2253, 2253, 2245, 2246, 2251, - 2252, 2247, 2252, 2254, 2257, 2254, 2255, 2255, 2259, 2260, - 2249, 2250, 2261, 2262, 2263, 2264, 2268, 2259, 2265, 2263, - 2270, 2270, 2269, 2257, 2261, 2269, 2271, 2272, 2260, 2273, - 2273, 2276, 2281, 2262, 2274, 2264, 2268, 2265, 2274, 2277, - 2279, 2271, 2282, 2277, 2285, 2272, 2276, 2278, 2278, 2283, - 2283, 2286, 2281, 2279, 2287, 2289, 2285, 2292, 2287, 2299, - 2286, 2326, 2282, 2288, 2288, 2290, 2290, 2291, 2326, 2292, - 2293, 2293, 2291, 2301, 2289, 2298, 2298, 2300, 2300, 2302, + 2234, 2245, 2246, 2242, 2247, 2248, 2248, 2249, 2249, 2251, + 2250, 2252, 2240, 2241, 2243, 2244, 2250, 2253, 2246, 2245, + 2254, 2255, 2256, 2247, 2257, 2254, 2252, 2251, 2258, 2257, + 2258, 2259, 2259, 2260, 2263, 2260, 2253, 2261, 2261, 2265, + 2266, 2255, 2256, 2267, 2268, 2269, 2270, 2274, 2265, 2271, + 2269, 2275, 2278, 2263, 2275, 2267, 2276, 2276, 2277, 2266, + 2279, 2279, 2282, 2285, 2268, 2280, 2270, 2274, 2271, 2280, + 2278, 2283, 2287, 2277, 2288, 2283, 2285, 2282, 2284, 2284, + 2289, 2289, 2292, 2291, 2293, 2294, 2294, 2295, 2293, 2296, + 2296, 2292, 2287, 2297, 2288, 2291, 2298, 2305, 2297, 2299, - 2303, 2299, 2304, 2305, 2305, 2306, 2301, 2308, 2308, 2303, - 2311, 2304, 2302, 2312, 2313, 2311, 2314, 2315, 2312, 2316, - 2306, 2314, 2317, 0, 2318, 2315, 2320, 2323, 2313, 2321, - 2322, 2317, 2318, 2328, 2321, 2322, 2324, 2324, 2316, 2325, - 2325, 2320, 2323, 2327, 2329, 2331, 2330, 0, 2327, 2333, - 2331, 2328, 2330, 2332, 2332, 2334, 2335, 2335, 2336, 2336, - 2334, 2339, 2329, 2342, 2333, 2340, 2340, 2341, 2342, 2342, - 2341, 2343, 2344, 2345, 2339, 2347, 2343, 2344, 2346, 2345, - 2347, 2348, 2346, 2349, 2350, 2352, 2351, 2361, 2354, 2357, - 2348, 2351, 2350, 2354, 2370, 2359, 2355, 2352, 2349, 2355, + 2299, 2304, 2304, 2306, 2306, 2307, 2295, 2308, 2298, 2311, + 2311, 2312, 2309, 2310, 2314, 2314, 2319, 2321, 2307, 2305, + 2308, 2309, 2310, 2317, 2318, 2321, 2312, 2320, 2317, 2318, + 2319, 2322, 2320, 2323, 2326, 2324, 2327, 2329, 2334, 2328, + 0, 2327, 2323, 2324, 2328, 2330, 2330, 2331, 2331, 2326, + 2322, 2332, 2329, 2335, 2333, 2336, 2334, 2337, 2332, 2333, + 2339, 2336, 2337, 2338, 2338, 2340, 2341, 2341, 2342, 2342, + 2340, 2335, 2345, 2346, 2346, 2339, 2347, 2348, 2805, 2347, + 2805, 2349, 2348, 2348, 2350, 2345, 2349, 2351, 2352, 2350, + 2353, 2354, 2352, 2351, 2355, 2353, 2356, 2357, 2358, 2363, - 2359, 2357, 2360, 2362, 2363, 2361, 2364, 2360, 2365, 2365, - 2366, 2369, 2371, 2363, 2370, 2364, 2362, 2372, 2372, 2366, - 2373, 2375, 2377, 2374, 2376, 2376, 2381, 2379, 2384, 2382, - 2369, 2371, 2374, 2382, 2383, 2383, 2375, 2385, 2386, 2373, - 0, 2377, 2379, 2385, 2386, 2387, 2381, 2388, 2388, 2389, - 2390, 2387, 2392, 2384, 2393, 2390, 2395, 2389, 2396, 2397, - 2395, 2392, 2399, 2399, 2400, 2400, 2409, 2393, 2401, 2401, - 2403, 2403, 2396, 2404, 2397, 2405, 2410, 2404, 2407, 2407, - 2405, 2410, 2410, 2412, 2413, 2413, 2409, 2415, 2415, 2416, - 2416, 2417, 2418, 2420, 2417, 2422, 2423, 2423, 2424, 2424, + 2354, 2360, 2357, 2367, 2356, 2361, 2360, 2365, 2361, 2355, + 2358, 2363, 2365, 2366, 2368, 2369, 2370, 2372, 2366, 2371, + 2371, 2367, 2375, 2376, 2369, 2370, 2372, 2368, 2377, 2378, + 2378, 2379, 2383, 2380, 2381, 2382, 2382, 2385, 2387, 2390, + 2388, 2375, 2380, 2376, 2388, 2389, 2389, 2377, 2391, 2381, + 2379, 2383, 2385, 2392, 2391, 2393, 2394, 2394, 2387, 2392, + 2395, 2393, 2396, 2398, 2390, 2399, 2401, 2396, 2395, 2402, + 2401, 2403, 2398, 2405, 2405, 2406, 2406, 2415, 2399, 2407, + 2407, 2409, 2409, 2402, 2410, 2411, 2403, 2418, 2410, 2416, + 2411, 2413, 2413, 2423, 2416, 2416, 2423, 2415, 2419, 2419, - 2425, 2425, 2426, 2412, 2429, 2418, 2427, 2427, 2428, 2430, - 2431, 2420, 2432, 2432, 2433, 2422, 2431, 2426, 2433, 2436, - 2437, 2428, 2429, 2430, 2436, 2436, 2438, 2439, 2440, 2441, - 2442, 2452, 2443, 2449, 2440, 2441, 2443, 2444, 2444, 2447, - 2454, 2449, 2450, 2437, 2447, 2450, 2438, 2439, 2453, 2455, - 2456, 2453, 2457, 2458, 2455, 2442, 2452, 2454, 2454, 2459, - 2459, 2460, 2461, 2463, 2464, 2464, 2472, 2458, 2456, 2462, - 2461, 2469, 2457, 0, 2462, 2462, 2465, 2465, 2466, 2466, - 2460, 2471, 2463, 2467, 2467, 2468, 2468, 2469, 2470, 2473, - 2474, 2475, 2472, 2470, 2477, 2477, 2478, 2479, 2473, 2478, + 2421, 2421, 2422, 2422, 2424, 2426, 2428, 2418, 2429, 2429, + 2430, 2430, 2431, 2431, 2432, 2433, 2433, 2424, 2434, 2435, + 2436, 2437, 2443, 2426, 2438, 2438, 2428, 2437, 2439, 2432, + 2442, 2434, 2439, 2444, 2436, 2442, 2442, 2435, 2445, 2448, + 2446, 2447, 2450, 2450, 2449, 2443, 2446, 2447, 2449, 2453, + 2458, 2455, 2456, 2444, 2453, 2456, 2460, 2459, 2445, 2455, + 2459, 2461, 2462, 2463, 2448, 2464, 2461, 2465, 2465, 2466, + 2467, 2468, 2469, 2460, 2460, 2458, 2468, 2468, 2467, 2464, + 2462, 2470, 2470, 2463, 2471, 2471, 2472, 2472, 2466, 2473, + 2473, 2469, 2474, 2474, 2475, 2476, 2477, 2478, 2479, 2480, - 2482, 2471, 2481, 2481, 2483, 2483, 2491, 2482, 2484, 2487, - 2474, 2475, 2488, 2484, 2489, 2479, 2486, 2486, 2487, 2492, - 2492, 2488, 2493, 2489, 2491, 2494, 2493, 2495, 2497, 2498, - 2496, 2506, 2502, 2514, 2494, 2496, 2496, 2502, 2498, 2503, - 2503, 2497, 2495, 2505, 2505, 2508, 2509, 2512, 2513, 2506, - 2515, 2517, 2519, 2514, 2508, 2521, 2515, 2513, 2509, 2522, - 2521, 2523, 2523, 2517, 2522, 2524, 2526, 2529, 2529, 2530, - 2530, 2526, 2512, 2519, 2524, 2527, 2527, 2531, 2531, 2527, - 2532, 2533, 2535, 2534, 2537, 2541, 2538, 2535, 2539, 2532, - 2537, 2538, 2542, 2539, 2540, 2540, 2544, 2546, 2549, 2543, + 2476, 2481, 2483, 2483, 2485, 2484, 2488, 2479, 2484, 0, + 2475, 2487, 2487, 2488, 2489, 2489, 2477, 2492, 2492, 2480, + 2490, 2481, 2485, 2478, 2493, 2490, 2494, 2495, 2497, 2498, + 2498, 2500, 2501, 2493, 2499, 2494, 2495, 2502, 2499, 2503, + 2500, 2504, 2502, 2502, 2508, 2512, 2497, 2501, 2514, 2508, + 2504, 2518, 2503, 2509, 2509, 2511, 2511, 2514, 2515, 2519, + 2520, 2521, 2523, 2512, 2525, 2563, 2527, 2521, 2519, 2563, + 2515, 2527, 2528, 2530, 2523, 2539, 2518, 2528, 2529, 2529, + 2520, 2532, 2530, 2533, 2533, 2525, 2532, 2533, 2535, 2535, + 2536, 2536, 2537, 2537, 2538, 2539, 2540, 2541, 2543, 2547, - 2545, 2533, 2534, 2541, 2543, 2550, 2545, 2547, 2547, 2551, - 2553, 2553, 2555, 2542, 2544, 2556, 2559, 2549, 2558, 2557, - 2550, 2560, 2546, 2557, 2563, 2555, 2561, 2558, 2556, 2551, - 2562, 2574, 2559, 2565, 2561, 2562, 2564, 2564, 2567, 2567, - 2560, 2568, 2568, 2570, 2572, 2572, 2575, 2574, 2577, 2576, - 2563, 2580, 2565, 2577, 2579, 2579, 2581, 2582, 2584, 2584, - 2585, 2590, 2575, 2589, 2570, 2576, 2586, 2586, 2589, 2591, - 2591, 2580, 2592, 2592, 2585, 2593, 2582, 2594, 2594, 2581, - 2595, 2596, 2597, 2590, 2599, 2601, 2598, 2600, 2602, 2602, - 2596, 2595, 2598, 2603, 2608, 2593, 2603, 2594, 2609, 2600, + 2544, 2545, 2541, 2538, 2543, 2544, 2545, 2546, 2546, 2548, + 2550, 2549, 2551, 2552, 2555, 2540, 2549, 2547, 2551, 2553, + 2553, 2556, 2557, 2559, 2559, 2564, 2561, 2562, 2550, 2565, + 2548, 2566, 2568, 2555, 2564, 2567, 2556, 2568, 2552, 2561, + 2562, 2569, 2557, 2567, 2571, 2565, 2570, 2570, 2573, 2573, + 2566, 2574, 2574, 2576, 2578, 2578, 2580, 2581, 2586, 2582, + 2583, 2585, 2585, 2571, 2587, 2583, 2588, 2569, 2590, 2590, + 2591, 2596, 2580, 2581, 2576, 2582, 2592, 2592, 2586, 2597, + 2597, 2595, 2598, 2598, 2591, 2588, 2595, 2587, 2599, 2600, + 2600, 2601, 2602, 2596, 2603, 2606, 2605, 2604, 2607, 2608, - 2604, 2604, 2597, 2599, 2610, 2601, 2608, 2611, 2611, 2612, - 2610, 2613, 2612, 2614, 2616, 2617, 2618, 2613, 2609, 2616, - 2617, 2619, 2620, 2621, 2621, 2623, 2623, 2619, 2624, 2625, - 2630, 2614, 2627, 2627, 0, 2618, 2628, 2628, 2625, 2620, - 2620, 2629, 2640, 2631, 2630, 2642, 2629, 2624, 2631, 2632, - 2632, 2633, 2633, 2634, 2634, 2635, 2637, 2637, 2643, 2644, - 2635, 2640, 2645, 2645, 2647, 2647, 2649, 2642, 2648, 2650, - 2651, 2651, 2653, 2661, 2654, 2657, 2657, 2663, 2650, 2654, - 2643, 2644, 2648, 2659, 2659, 2660, 2649, 2661, 2662, 2663, - 2660, 2653, 2664, 2666, 2662, 2665, 2665, 2668, 2666, 2669, + 2608, 2602, 2601, 2604, 2610, 2610, 2615, 2606, 2599, 2600, + 2609, 2614, 2620, 2609, 2603, 2605, 2616, 2624, 2607, 2617, + 2617, 2618, 2616, 2614, 2618, 2619, 2615, 2622, 2623, 2625, + 2620, 2619, 2622, 2623, 2626, 2625, 2624, 2627, 2627, 2629, + 2629, 2630, 2633, 2633, 2631, 2634, 2634, 2636, 2646, 2635, + 2637, 2626, 2626, 2631, 2635, 2637, 2638, 2638, 2639, 2639, + 2630, 2636, 2640, 2640, 2641, 2643, 2643, 2646, 2648, 2641, + 2649, 2650, 2651, 2651, 2653, 2653, 2655, 2654, 2656, 2657, + 2657, 2659, 2697, 2660, 2663, 2663, 2697, 2656, 2660, 2667, + 2648, 2654, 2649, 2650, 2665, 2665, 2655, 2666, 2668, 2669, - 2664, 2670, 2671, 2672, 2674, 2675, 2670, 2676, 2677, 2672, - 2679, 2678, 2674, 2680, 2671, 2681, 2682, 2668, 2685, 2669, - 2686, 2682, 2689, 2689, 2675, 2712, 2679, 2676, 2677, 2678, - 2680, 2680, 2712, 2686, 2690, 2690, 2681, 2691, 2685, 2695, - 2695, 2691, 2697, 2697, 2698, 2698, 2701, 2698, 2699, 2699, - 2701, 2699, 2700, 2700, 2704, 2700, 2703, 2703, 2707, 2705, - 2708, 2708, 2711, 2707, 2713, 2714, 2715, 2717, 2713, 2718, - 2719, 2719, 2704, 2705, 2714, 2720, 2720, 2722, 2718, 2721, - 2721, 2715, 2724, 2723, 2725, 2717, 2727, 2711, 2723, 2725, - 2725, 2724, 2722, 2726, 2724, 2728, 2729, 2730, 2731, 2726, + 2659, 2670, 2666, 2667, 2668, 2671, 2671, 2672, 2674, 2670, + 2675, 2669, 2672, 2676, 2677, 2678, 2680, 2681, 2676, 2682, + 2683, 2678, 2685, 2684, 2680, 2686, 2677, 2687, 2674, 2688, + 2675, 2691, 2692, 2707, 2688, 0, 2681, 2707, 2685, 2682, + 2683, 2684, 2686, 2686, 2710, 2692, 2695, 2695, 2687, 2696, + 2696, 2691, 2701, 2701, 2703, 2703, 2704, 2704, 2711, 2704, + 2705, 2705, 2710, 2705, 2706, 2706, 2713, 2706, 2709, 2709, + 2717, 2713, 2711, 2714, 2714, 2718, 2719, 2720, 2721, 2723, + 2719, 2724, 2718, 2725, 2725, 2728, 2720, 2726, 2726, 2729, + 2724, 2727, 2727, 2721, 2729, 2717, 2730, 2723, 2731, 2733, - 2732, 2734, 2730, 2731, 2733, 2733, 2734, 2737, 2737, 2748, - 2728, 2727, 2740, 2740, 2741, 2741, 2750, 2729, 2748, 2732, - 2742, 2742, 2743, 2743, 2744, 2744, 2745, 2745, 2746, 2746, - 2749, 2749, 2752, 2753, 2753, 2754, 2750, 2756, 2758, 2755, - 2757, 2757, 2759, 2759, 2762, 2763, 2764, 2766, 2763, 2756, - 2754, 2752, 2755, 2758, 2765, 2765, 2768, 2769, 2772, 2768, - 2770, 2771, 2762, 2769, 2773, 2766, 2771, 2774, 2785, 2776, - 2790, 2785, 2764, 2794, 2770, 2787, 2787, 2772, 2788, 2788, - 2791, 2792, 2773, 2774, 2776, 2792, 2793, 2794, 2796, 2791, - 2797, 2798, 2799, 2790, 2799, 2800, 2798, 2801, 2801, 2802, + 2728, 2732, 2734, 2731, 2731, 2730, 2735, 2732, 2730, 2736, + 2737, 2738, 2739, 2739, 2736, 2737, 2740, 2734, 2743, 2743, + 0, 2740, 2746, 2746, 2733, 2747, 2747, 2735, 2748, 2748, + 2738, 2749, 2749, 2750, 2750, 2751, 2751, 2752, 2752, 2754, + 2755, 2755, 2756, 2760, 2758, 2759, 2759, 2761, 2754, 2762, + 2763, 2763, 2764, 2765, 2765, 2768, 2769, 2770, 2760, 2769, + 2761, 2762, 2756, 2758, 2771, 2771, 2772, 2764, 2774, 2775, + 2778, 2774, 2776, 2768, 2777, 2775, 2779, 2780, 2791, 2777, + 2782, 2791, 2796, 2770, 2772, 2800, 2776, 2793, 2793, 2778, + 2794, 2794, 2797, 2780, 2779, 2782, 2798, 2799, 2802, 2800, - 2803, 2797, 2804, 2806, 2808, 2805, 2793, 2807, 2815, 2809, - 2800, 2796, 2802, 2812, 2813, 2814, 2814, 2815, 2820, 2803, - 2804, 2805, 2807, 2816, 2816, 2808, 2821, 2812, 2806, 2809, - 2817, 2817, 2818, 2818, 2813, 2819, 2819, 2820, 2822, 2823, - 2824, 2822, 2825, 2826, 2823, 2824, 2821, 2827, 2828, 2829, - 2830, 2830, 2831, 2827, 2832, 2832, 2836, 2834, 2826, 2839, - 2839, 2842, 2828, 2840, 2840, 2841, 2846, 2825, 2845, 2829, - 2843, 2831, 2834, 2841, 2836, 2844, 2843, 2847, 2850, 2846, - 2842, 2844, 2845, 2848, 2848, 2852, 2853, 2855, 2856, 2857, - 2853, 2858, 2859, 2856, 2860, 2861, 2847, 2862, 2850, 2852, + 2798, 2797, 2803, 2804, 2806, 2796, 2807, 2807, 2804, 2808, + 2809, 2811, 2810, 2803, 2812, 2814, 2813, 2799, 2815, 2806, + 2818, 2802, 2808, 2819, 2820, 2820, 2821, 2811, 2827, 2809, + 2810, 2813, 2822, 2822, 2818, 2821, 2814, 2826, 2815, 2812, + 2823, 2823, 2831, 2819, 2824, 2824, 2825, 2825, 2827, 2828, + 2829, 2832, 2828, 2830, 2833, 2829, 2826, 2834, 2830, 2835, + 2833, 2836, 2836, 2837, 2838, 2838, 2832, 2831, 2840, 2842, + 2847, 2834, 2845, 2845, 2846, 2846, 2848, 2851, 2847, 2835, + 2849, 2852, 2837, 2840, 2850, 2853, 2849, 2842, 2854, 2854, + 2850, 2851, 2856, 2858, 2852, 2848, 2859, 2861, 2862, 2863, - 2861, 2864, 2862, 2865, 2858, 2859, 2867, 2855, 2857, 2866, - 2866, 2867, 2868, 2860, 2869, 2869, 2870, 2873, 2868, 2864, - 2871, 2870, 2865, 2872, 2874, 2871, 2875, 2879, 2872, 2881, - 2874, 2875, 2876, 2876, 2878, 2880, 2873, 2882, 2878, 2883, - 2884, 2885, 2880, 2886, 2886, 2883, 2879, 2890, 2881, 2888, - 2888, 2889, 2890, 2891, 2885, 2892, 2882, 2893, 2896, 2884, - 2889, 2894, 2894, 2889, 2895, 2898, 2899, 2899, 2900, 2895, - 2893, 2896, 2891, 2904, 2892, 2901, 2901, 2902, 2902, 2903, - 2904, 2905, 2906, 2906, 2903, 2907, 2908, 2900, 2908, 2910, - 2907, 2898, 2909, 2909, 2911, 2912, 2910, 2913, 2914, 2917, + 2859, 2864, 2865, 2862, 2853, 2866, 2867, 2858, 2868, 2870, + 2871, 2867, 2856, 2868, 2864, 2865, 2873, 2861, 2863, 2872, + 2872, 2873, 2874, 2879, 2866, 2875, 2875, 2870, 2874, 2871, + 2876, 2877, 2878, 2880, 2885, 2876, 2877, 2878, 2881, 2880, + 2882, 2882, 2879, 2881, 2884, 2886, 2887, 2888, 2884, 2889, + 2890, 2891, 2886, 2885, 0, 2889, 2892, 2892, 2894, 2894, + 2897, 2895, 2896, 2898, 2891, 2887, 2888, 2896, 2899, 2890, + 2895, 2900, 2900, 2895, 2902, 2901, 2904, 2905, 2905, 2897, + 2901, 2899, 2898, 0, 2906, 2907, 2907, 2902, 2908, 2908, + 2909, 2910, 2911, 2912, 2912, 2909, 2913, 2914, 2910, 2914, - 2905, 2911, 2913, 2916, 2916, 2919, 2920, 2921, 2922, 2926, - 2919, 2920, 2923, 2923, 2912, 2925, 2925, 2914, 2917, 2927, - 2928, 2928, 2929, 2929, 2930, 2940, 2921, 2922, 2926, 2932, - 2932, 2930, 2933, 2933, 2934, 2936, 2941, 2939, 2927, 0, - 2936, 2934, 2939, 0, 2940, 2942, 2942, 2943, 2943, 0, - 0, 0, 0, 0, 0, 2941, 2947, 2947, 2947, 2947, - 2947, 2947, 2947, 2948, 2948, 2948, 2948, 2948, 2948, 2948, - 2949, 2949, 2949, 2949, 2949, 2949, 2949, 2950, 2950, 2950, - 2950, 2950, 2950, 2950, 2951, 2951, 2951, 2951, 2951, 2951, - 2951, 2953, 2953, 0, 2953, 2953, 2953, 2953, 2954, 2954, + 2916, 2913, 2904, 2906, 2915, 2915, 2917, 2916, 2918, 2919, + 2920, 2911, 2923, 2917, 2919, 2922, 2922, 2925, 2926, 2927, + 2928, 2932, 2925, 2926, 2929, 2929, 2933, 2918, 0, 2920, + 0, 2923, 2931, 2931, 2934, 2934, 2935, 2935, 2927, 2928, + 2932, 2936, 2938, 2938, 2940, 2933, 2939, 2939, 2936, 2942, + 2945, 2940, 2946, 2947, 2942, 2945, 2948, 2948, 2949, 2949, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2946, 2947, 2953, 2953, 2953, 2953, 2953, 2953, 2953, + 2954, 2954, 2954, 2954, 2954, 2954, 2954, 2955, 2955, 2955, + 2955, 2955, 2955, 2955, 2956, 2956, 2956, 2956, 2956, 2956, - 0, 0, 0, 2954, 2954, 2955, 2955, 0, 0, 2955, - 0, 2955, 2956, 0, 0, 0, 0, 0, 2956, 2957, - 2957, 0, 0, 0, 2957, 2957, 2958, 0, 0, 0, - 0, 0, 2958, 2959, 2959, 0, 2959, 2959, 2959, 2959, - 2960, 2960, 0, 2960, 2960, 2960, 2960, 2946, 2946, 2946, - 2946, 2946, 2946, 2946, 2946, 2946, 2946, 2946, 2946, 2946, - 2946, 2946, 2946, 2946, 2946, 2946, 2946, 2946, 2946, 2946, - 2946, 2946, 2946, 2946, 2946, 2946, 2946, 2946, 2946, 2946, - 2946, 2946, 2946, 2946, 2946, 2946, 2946, 2946 + 2956, 2957, 2957, 2957, 2957, 2957, 2957, 2957, 2959, 2959, + 0, 2959, 2959, 2959, 2959, 2960, 2960, 0, 0, 0, + 2960, 2960, 2961, 2961, 0, 0, 2961, 0, 2961, 2962, + 0, 0, 0, 0, 0, 2962, 2963, 2963, 0, 0, + 0, 2963, 2963, 2964, 0, 0, 0, 0, 0, 2964, + 2965, 2965, 0, 2965, 2965, 2965, 2965, 2966, 2966, 0, + 2966, 2966, 2966, 2966, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + + 2952, 2952, 2952, 2952, 2952 } ; static yy_state_type yy_last_accepting_state; @@ -2866,7 +2875,7 @@ static void config_end_include(void) } #endif -#line 2868 "" +#line 2877 "" #define YY_NO_INPUT 1 #line 185 "./util/configlexer.lex" #ifndef YY_NO_UNPUT @@ -2875,9 +2884,9 @@ static void config_end_include(void) #ifndef YY_NO_INPUT #define YY_NO_INPUT 1 #endif -#line 2877 "" +#line 2886 "" -#line 2879 "" +#line 2888 "" #define INITIAL 0 #define quotedstring 1 @@ -3099,7 +3108,7 @@ YY_DECL { #line 205 "./util/configlexer.lex" -#line 3101 "" +#line 3110 "" while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ { @@ -3132,13 +3141,13 @@ yy_match: while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 2947 ) + if ( yy_current_state >= 2953 ) 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] != 5748 ); + while ( yy_base[yy_current_state] != 5765 ); yy_find_action: yy_act = yy_accept[yy_current_state]; @@ -3748,654 +3757,654 @@ YY_RULE_SETUP case 117: YY_RULE_SETUP #line 325 "./util/configlexer.lex" -{ YDVAR(1, VAR_ZONEFILE) } +{ YDVAR(1, VAR_RPZ_LOG_NAME) } YY_BREAK case 118: YY_RULE_SETUP #line 326 "./util/configlexer.lex" -{ YDVAR(1, VAR_MASTER) } +{ YDVAR(1, VAR_ZONEFILE) } YY_BREAK case 119: YY_RULE_SETUP #line 327 "./util/configlexer.lex" -{ YDVAR(1, VAR_URL) } +{ YDVAR(1, VAR_MASTER) } YY_BREAK case 120: YY_RULE_SETUP #line 328 "./util/configlexer.lex" -{ YDVAR(1, VAR_ALLOW_NOTIFY) } +{ YDVAR(1, VAR_URL) } YY_BREAK case 121: YY_RULE_SETUP #line 329 "./util/configlexer.lex" -{ YDVAR(1, VAR_FOR_DOWNSTREAM) } +{ YDVAR(1, VAR_ALLOW_NOTIFY) } YY_BREAK case 122: YY_RULE_SETUP #line 330 "./util/configlexer.lex" -{ YDVAR(1, VAR_FOR_UPSTREAM) } +{ YDVAR(1, VAR_FOR_DOWNSTREAM) } YY_BREAK case 123: YY_RULE_SETUP #line 331 "./util/configlexer.lex" -{ YDVAR(1, VAR_FALLBACK_ENABLED) } +{ YDVAR(1, VAR_FOR_UPSTREAM) } YY_BREAK case 124: YY_RULE_SETUP #line 332 "./util/configlexer.lex" -{ YDVAR(0, VAR_VIEW) } +{ YDVAR(1, VAR_FALLBACK_ENABLED) } YY_BREAK case 125: YY_RULE_SETUP #line 333 "./util/configlexer.lex" -{ YDVAR(1, VAR_VIEW_FIRST) } +{ YDVAR(0, VAR_VIEW) } YY_BREAK case 126: YY_RULE_SETUP #line 334 "./util/configlexer.lex" -{ YDVAR(1, VAR_DO_NOT_QUERY_ADDRESS) } +{ YDVAR(1, VAR_VIEW_FIRST) } YY_BREAK case 127: YY_RULE_SETUP #line 335 "./util/configlexer.lex" -{ YDVAR(1, VAR_DO_NOT_QUERY_LOCALHOST) } +{ YDVAR(1, VAR_DO_NOT_QUERY_ADDRESS) } YY_BREAK case 128: YY_RULE_SETUP #line 336 "./util/configlexer.lex" -{ YDVAR(2, VAR_ACCESS_CONTROL) } +{ YDVAR(1, VAR_DO_NOT_QUERY_LOCALHOST) } YY_BREAK case 129: YY_RULE_SETUP #line 337 "./util/configlexer.lex" -{ YDVAR(1, VAR_SEND_CLIENT_SUBNET) } +{ YDVAR(2, VAR_ACCESS_CONTROL) } YY_BREAK case 130: YY_RULE_SETUP #line 338 "./util/configlexer.lex" -{ YDVAR(1, VAR_CLIENT_SUBNET_ZONE) } +{ YDVAR(1, VAR_SEND_CLIENT_SUBNET) } YY_BREAK case 131: YY_RULE_SETUP #line 339 "./util/configlexer.lex" -{ YDVAR(1, VAR_CLIENT_SUBNET_ALWAYS_FORWARD) } +{ YDVAR(1, VAR_CLIENT_SUBNET_ZONE) } YY_BREAK case 132: YY_RULE_SETUP #line 340 "./util/configlexer.lex" -{ YDVAR(1, VAR_CLIENT_SUBNET_OPCODE) } +{ YDVAR(1, VAR_CLIENT_SUBNET_ALWAYS_FORWARD) } YY_BREAK case 133: YY_RULE_SETUP #line 341 "./util/configlexer.lex" -{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV4) } +{ YDVAR(1, VAR_CLIENT_SUBNET_OPCODE) } YY_BREAK case 134: YY_RULE_SETUP #line 342 "./util/configlexer.lex" -{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV6) } +{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV4) } YY_BREAK case 135: YY_RULE_SETUP #line 343 "./util/configlexer.lex" -{ YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV4) } +{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV6) } YY_BREAK case 136: YY_RULE_SETUP #line 344 "./util/configlexer.lex" -{ YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV6) } +{ YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV4) } YY_BREAK case 137: YY_RULE_SETUP #line 345 "./util/configlexer.lex" -{ YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV4) } +{ YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV6) } YY_BREAK case 138: YY_RULE_SETUP #line 346 "./util/configlexer.lex" -{ YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV6) } +{ YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV4) } YY_BREAK case 139: YY_RULE_SETUP #line 347 "./util/configlexer.lex" -{ YDVAR(1, VAR_HIDE_IDENTITY) } +{ YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV6) } YY_BREAK case 140: YY_RULE_SETUP #line 348 "./util/configlexer.lex" -{ YDVAR(1, VAR_HIDE_VERSION) } +{ YDVAR(1, VAR_HIDE_IDENTITY) } YY_BREAK case 141: YY_RULE_SETUP #line 349 "./util/configlexer.lex" -{ YDVAR(1, VAR_HIDE_TRUSTANCHOR) } +{ YDVAR(1, VAR_HIDE_VERSION) } YY_BREAK case 142: YY_RULE_SETUP #line 350 "./util/configlexer.lex" -{ YDVAR(1, VAR_IDENTITY) } +{ YDVAR(1, VAR_HIDE_TRUSTANCHOR) } YY_BREAK case 143: YY_RULE_SETUP #line 351 "./util/configlexer.lex" -{ YDVAR(1, VAR_VERSION) } +{ YDVAR(1, VAR_IDENTITY) } YY_BREAK case 144: YY_RULE_SETUP #line 352 "./util/configlexer.lex" -{ YDVAR(1, VAR_MODULE_CONF) } +{ YDVAR(1, VAR_VERSION) } YY_BREAK case 145: YY_RULE_SETUP #line 353 "./util/configlexer.lex" -{ YDVAR(1, VAR_DLV_ANCHOR) } +{ YDVAR(1, VAR_MODULE_CONF) } YY_BREAK case 146: YY_RULE_SETUP #line 354 "./util/configlexer.lex" -{ YDVAR(1, VAR_DLV_ANCHOR_FILE) } +{ YDVAR(1, VAR_DLV_ANCHOR) } YY_BREAK case 147: YY_RULE_SETUP #line 355 "./util/configlexer.lex" -{ YDVAR(1, VAR_TRUST_ANCHOR_FILE) } +{ YDVAR(1, VAR_DLV_ANCHOR_FILE) } YY_BREAK case 148: YY_RULE_SETUP #line 356 "./util/configlexer.lex" -{ YDVAR(1, VAR_AUTO_TRUST_ANCHOR_FILE) } +{ YDVAR(1, VAR_TRUST_ANCHOR_FILE) } YY_BREAK case 149: YY_RULE_SETUP #line 357 "./util/configlexer.lex" -{ YDVAR(1, VAR_TRUSTED_KEYS_FILE) } +{ YDVAR(1, VAR_AUTO_TRUST_ANCHOR_FILE) } YY_BREAK case 150: YY_RULE_SETUP #line 358 "./util/configlexer.lex" -{ YDVAR(1, VAR_TRUST_ANCHOR) } +{ YDVAR(1, VAR_TRUSTED_KEYS_FILE) } YY_BREAK case 151: YY_RULE_SETUP #line 359 "./util/configlexer.lex" -{ YDVAR(1, VAR_TRUST_ANCHOR_SIGNALING) } +{ YDVAR(1, VAR_TRUST_ANCHOR) } YY_BREAK case 152: YY_RULE_SETUP #line 360 "./util/configlexer.lex" -{ YDVAR(1, VAR_ROOT_KEY_SENTINEL) } +{ YDVAR(1, VAR_TRUST_ANCHOR_SIGNALING) } YY_BREAK case 153: YY_RULE_SETUP #line 361 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_OVERRIDE_DATE) } +{ YDVAR(1, VAR_ROOT_KEY_SENTINEL) } YY_BREAK case 154: YY_RULE_SETUP #line 362 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_SIG_SKEW_MIN) } +{ YDVAR(1, VAR_VAL_OVERRIDE_DATE) } YY_BREAK case 155: YY_RULE_SETUP #line 363 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_SIG_SKEW_MAX) } +{ YDVAR(1, VAR_VAL_SIG_SKEW_MIN) } YY_BREAK case 156: YY_RULE_SETUP #line 364 "./util/configlexer.lex" -{ YDVAR(1, VAR_BOGUS_TTL) } +{ YDVAR(1, VAR_VAL_SIG_SKEW_MAX) } YY_BREAK case 157: YY_RULE_SETUP #line 365 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_CLEAN_ADDITIONAL) } +{ YDVAR(1, VAR_BOGUS_TTL) } YY_BREAK case 158: YY_RULE_SETUP #line 366 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_PERMISSIVE_MODE) } +{ YDVAR(1, VAR_VAL_CLEAN_ADDITIONAL) } YY_BREAK case 159: YY_RULE_SETUP #line 367 "./util/configlexer.lex" -{ YDVAR(1, VAR_AGGRESSIVE_NSEC) } +{ YDVAR(1, VAR_VAL_PERMISSIVE_MODE) } YY_BREAK case 160: YY_RULE_SETUP #line 368 "./util/configlexer.lex" -{ YDVAR(1, VAR_IGNORE_CD_FLAG) } +{ YDVAR(1, VAR_AGGRESSIVE_NSEC) } YY_BREAK case 161: YY_RULE_SETUP #line 369 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVE_EXPIRED) } +{ YDVAR(1, VAR_IGNORE_CD_FLAG) } YY_BREAK case 162: YY_RULE_SETUP #line 370 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVE_EXPIRED_TTL) } +{ YDVAR(1, VAR_SERVE_EXPIRED) } YY_BREAK case 163: YY_RULE_SETUP #line 371 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVE_EXPIRED_TTL_RESET) } +{ YDVAR(1, VAR_SERVE_EXPIRED_TTL) } YY_BREAK case 164: YY_RULE_SETUP #line 372 "./util/configlexer.lex" -{ YDVAR(1, VAR_FAKE_DSA) } +{ YDVAR(1, VAR_SERVE_EXPIRED_TTL_RESET) } YY_BREAK case 165: YY_RULE_SETUP #line 373 "./util/configlexer.lex" -{ YDVAR(1, VAR_FAKE_SHA1) } +{ YDVAR(1, VAR_FAKE_DSA) } YY_BREAK case 166: YY_RULE_SETUP #line 374 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_LOG_LEVEL) } +{ YDVAR(1, VAR_FAKE_SHA1) } YY_BREAK case 167: YY_RULE_SETUP #line 375 "./util/configlexer.lex" -{ YDVAR(1, VAR_KEY_CACHE_SIZE) } +{ YDVAR(1, VAR_VAL_LOG_LEVEL) } YY_BREAK case 168: YY_RULE_SETUP #line 376 "./util/configlexer.lex" -{ YDVAR(1, VAR_KEY_CACHE_SLABS) } +{ YDVAR(1, VAR_KEY_CACHE_SIZE) } YY_BREAK case 169: YY_RULE_SETUP #line 377 "./util/configlexer.lex" -{ YDVAR(1, VAR_NEG_CACHE_SIZE) } +{ YDVAR(1, VAR_KEY_CACHE_SLABS) } YY_BREAK case 170: YY_RULE_SETUP #line 378 "./util/configlexer.lex" -{ - YDVAR(1, VAR_VAL_NSEC3_KEYSIZE_ITERATIONS) } +{ YDVAR(1, VAR_NEG_CACHE_SIZE) } YY_BREAK case 171: YY_RULE_SETUP -#line 380 "./util/configlexer.lex" -{ YDVAR(1, VAR_ADD_HOLDDOWN) } +#line 379 "./util/configlexer.lex" +{ + YDVAR(1, VAR_VAL_NSEC3_KEYSIZE_ITERATIONS) } YY_BREAK case 172: YY_RULE_SETUP #line 381 "./util/configlexer.lex" -{ YDVAR(1, VAR_DEL_HOLDDOWN) } +{ YDVAR(1, VAR_ADD_HOLDDOWN) } YY_BREAK case 173: YY_RULE_SETUP #line 382 "./util/configlexer.lex" -{ YDVAR(1, VAR_KEEP_MISSING) } +{ YDVAR(1, VAR_DEL_HOLDDOWN) } YY_BREAK case 174: YY_RULE_SETUP #line 383 "./util/configlexer.lex" -{ YDVAR(1, VAR_PERMIT_SMALL_HOLDDOWN) } +{ YDVAR(1, VAR_KEEP_MISSING) } YY_BREAK case 175: YY_RULE_SETUP #line 384 "./util/configlexer.lex" -{ YDVAR(1, VAR_USE_SYSLOG) } +{ YDVAR(1, VAR_PERMIT_SMALL_HOLDDOWN) } YY_BREAK case 176: YY_RULE_SETUP #line 385 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_IDENTITY) } +{ YDVAR(1, VAR_USE_SYSLOG) } YY_BREAK case 177: YY_RULE_SETUP #line 386 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_TIME_ASCII) } +{ YDVAR(1, VAR_LOG_IDENTITY) } YY_BREAK case 178: YY_RULE_SETUP #line 387 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_QUERIES) } +{ YDVAR(1, VAR_LOG_TIME_ASCII) } YY_BREAK case 179: YY_RULE_SETUP #line 388 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_REPLIES) } +{ YDVAR(1, VAR_LOG_QUERIES) } YY_BREAK case 180: YY_RULE_SETUP #line 389 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_TAG_QUERYREPLY) } +{ YDVAR(1, VAR_LOG_REPLIES) } YY_BREAK case 181: YY_RULE_SETUP #line 390 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_LOCAL_ACTIONS) } +{ YDVAR(1, VAR_LOG_TAG_QUERYREPLY) } YY_BREAK case 182: YY_RULE_SETUP #line 391 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_SERVFAIL) } +{ YDVAR(1, VAR_LOG_LOCAL_ACTIONS) } YY_BREAK case 183: YY_RULE_SETUP #line 392 "./util/configlexer.lex" -{ YDVAR(2, VAR_LOCAL_ZONE) } +{ YDVAR(1, VAR_LOG_SERVFAIL) } YY_BREAK case 184: YY_RULE_SETUP #line 393 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOCAL_DATA) } +{ YDVAR(2, VAR_LOCAL_ZONE) } YY_BREAK case 185: YY_RULE_SETUP #line 394 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOCAL_DATA_PTR) } +{ YDVAR(1, VAR_LOCAL_DATA) } YY_BREAK case 186: YY_RULE_SETUP #line 395 "./util/configlexer.lex" -{ YDVAR(1, VAR_UNBLOCK_LAN_ZONES) } +{ YDVAR(1, VAR_LOCAL_DATA_PTR) } YY_BREAK case 187: YY_RULE_SETUP #line 396 "./util/configlexer.lex" -{ YDVAR(1, VAR_INSECURE_LAN_ZONES) } +{ YDVAR(1, VAR_UNBLOCK_LAN_ZONES) } YY_BREAK case 188: YY_RULE_SETUP #line 397 "./util/configlexer.lex" -{ YDVAR(1, VAR_STATISTICS_INTERVAL) } +{ YDVAR(1, VAR_INSECURE_LAN_ZONES) } YY_BREAK case 189: YY_RULE_SETUP #line 398 "./util/configlexer.lex" -{ YDVAR(1, VAR_STATISTICS_CUMULATIVE) } +{ YDVAR(1, VAR_STATISTICS_INTERVAL) } YY_BREAK case 190: YY_RULE_SETUP #line 399 "./util/configlexer.lex" -{ YDVAR(1, VAR_EXTENDED_STATISTICS) } +{ YDVAR(1, VAR_STATISTICS_CUMULATIVE) } YY_BREAK case 191: YY_RULE_SETUP #line 400 "./util/configlexer.lex" -{ YDVAR(1, VAR_SHM_ENABLE) } +{ YDVAR(1, VAR_EXTENDED_STATISTICS) } YY_BREAK case 192: YY_RULE_SETUP #line 401 "./util/configlexer.lex" -{ YDVAR(1, VAR_SHM_KEY) } +{ YDVAR(1, VAR_SHM_ENABLE) } YY_BREAK case 193: YY_RULE_SETUP #line 402 "./util/configlexer.lex" -{ YDVAR(0, VAR_REMOTE_CONTROL) } +{ YDVAR(1, VAR_SHM_KEY) } YY_BREAK case 194: YY_RULE_SETUP #line 403 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_ENABLE) } +{ YDVAR(0, VAR_REMOTE_CONTROL) } YY_BREAK case 195: YY_RULE_SETUP #line 404 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_INTERFACE) } +{ YDVAR(1, VAR_CONTROL_ENABLE) } YY_BREAK case 196: YY_RULE_SETUP #line 405 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_PORT) } +{ YDVAR(1, VAR_CONTROL_INTERFACE) } YY_BREAK case 197: YY_RULE_SETUP #line 406 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_USE_CERT) } +{ YDVAR(1, VAR_CONTROL_PORT) } YY_BREAK case 198: YY_RULE_SETUP #line 407 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVER_KEY_FILE) } +{ YDVAR(1, VAR_CONTROL_USE_CERT) } YY_BREAK case 199: YY_RULE_SETUP #line 408 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVER_CERT_FILE) } +{ YDVAR(1, VAR_SERVER_KEY_FILE) } YY_BREAK case 200: YY_RULE_SETUP #line 409 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_KEY_FILE) } +{ YDVAR(1, VAR_SERVER_CERT_FILE) } YY_BREAK case 201: YY_RULE_SETUP #line 410 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_CERT_FILE) } +{ YDVAR(1, VAR_CONTROL_KEY_FILE) } YY_BREAK case 202: YY_RULE_SETUP #line 411 "./util/configlexer.lex" -{ YDVAR(1, VAR_PYTHON_SCRIPT) } +{ YDVAR(1, VAR_CONTROL_CERT_FILE) } YY_BREAK case 203: YY_RULE_SETUP #line 412 "./util/configlexer.lex" -{ YDVAR(0, VAR_PYTHON) } +{ YDVAR(1, VAR_PYTHON_SCRIPT) } YY_BREAK case 204: YY_RULE_SETUP #line 413 "./util/configlexer.lex" -{ YDVAR(1, VAR_DOMAIN_INSECURE) } +{ YDVAR(0, VAR_PYTHON) } YY_BREAK case 205: YY_RULE_SETUP #line 414 "./util/configlexer.lex" -{ YDVAR(1, VAR_MINIMAL_RESPONSES) } +{ YDVAR(1, VAR_DOMAIN_INSECURE) } YY_BREAK case 206: YY_RULE_SETUP #line 415 "./util/configlexer.lex" -{ YDVAR(1, VAR_RRSET_ROUNDROBIN) } +{ YDVAR(1, VAR_MINIMAL_RESPONSES) } YY_BREAK case 207: YY_RULE_SETUP #line 416 "./util/configlexer.lex" -{ YDVAR(1, VAR_UNKNOWN_SERVER_TIME_LIMIT) } +{ YDVAR(1, VAR_RRSET_ROUNDROBIN) } YY_BREAK case 208: YY_RULE_SETUP #line 417 "./util/configlexer.lex" -{ YDVAR(1, VAR_MAX_UDP_SIZE) } +{ YDVAR(1, VAR_UNKNOWN_SERVER_TIME_LIMIT) } YY_BREAK case 209: YY_RULE_SETUP #line 418 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNS64_PREFIX) } +{ YDVAR(1, VAR_MAX_UDP_SIZE) } YY_BREAK case 210: YY_RULE_SETUP #line 419 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNS64_SYNTHALL) } +{ YDVAR(1, VAR_DNS64_PREFIX) } YY_BREAK case 211: YY_RULE_SETUP #line 420 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNS64_IGNORE_AAAA) } +{ YDVAR(1, VAR_DNS64_SYNTHALL) } YY_BREAK case 212: YY_RULE_SETUP #line 421 "./util/configlexer.lex" -{ YDVAR(1, VAR_DEFINE_TAG) } +{ YDVAR(1, VAR_DNS64_IGNORE_AAAA) } YY_BREAK case 213: YY_RULE_SETUP #line 422 "./util/configlexer.lex" -{ YDVAR(2, VAR_LOCAL_ZONE_TAG) } +{ YDVAR(1, VAR_DEFINE_TAG) } YY_BREAK case 214: YY_RULE_SETUP #line 423 "./util/configlexer.lex" -{ YDVAR(2, VAR_ACCESS_CONTROL_TAG) } +{ YDVAR(2, VAR_LOCAL_ZONE_TAG) } YY_BREAK case 215: YY_RULE_SETUP #line 424 "./util/configlexer.lex" -{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_ACTION) } +{ YDVAR(2, VAR_ACCESS_CONTROL_TAG) } YY_BREAK case 216: YY_RULE_SETUP #line 425 "./util/configlexer.lex" -{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_DATA) } +{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_ACTION) } YY_BREAK case 217: YY_RULE_SETUP #line 426 "./util/configlexer.lex" -{ YDVAR(2, VAR_ACCESS_CONTROL_VIEW) } +{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_DATA) } YY_BREAK case 218: YY_RULE_SETUP #line 427 "./util/configlexer.lex" -{ YDVAR(3, VAR_LOCAL_ZONE_OVERRIDE) } +{ YDVAR(2, VAR_ACCESS_CONTROL_VIEW) } YY_BREAK case 219: YY_RULE_SETUP #line 428 "./util/configlexer.lex" -{ YDVAR(0, VAR_DNSTAP) } +{ YDVAR(3, VAR_LOCAL_ZONE_OVERRIDE) } YY_BREAK case 220: YY_RULE_SETUP #line 429 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_ENABLE) } +{ YDVAR(0, VAR_DNSTAP) } YY_BREAK case 221: YY_RULE_SETUP #line 430 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_SOCKET_PATH) } +{ YDVAR(1, VAR_DNSTAP_ENABLE) } YY_BREAK case 222: YY_RULE_SETUP #line 431 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_SEND_IDENTITY) } +{ YDVAR(1, VAR_DNSTAP_SOCKET_PATH) } YY_BREAK case 223: YY_RULE_SETUP #line 432 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_SEND_VERSION) } +{ YDVAR(1, VAR_DNSTAP_SEND_IDENTITY) } YY_BREAK case 224: YY_RULE_SETUP #line 433 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_IDENTITY) } +{ YDVAR(1, VAR_DNSTAP_SEND_VERSION) } YY_BREAK case 225: YY_RULE_SETUP #line 434 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_VERSION) } +{ YDVAR(1, VAR_DNSTAP_IDENTITY) } YY_BREAK case 226: YY_RULE_SETUP #line 435 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES) } +{ YDVAR(1, VAR_DNSTAP_VERSION) } YY_BREAK case 227: YY_RULE_SETUP -#line 437 "./util/configlexer.lex" +#line 436 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES) } YY_BREAK case 228: YY_RULE_SETUP -#line 439 "./util/configlexer.lex" +#line 438 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES) } YY_BREAK case 229: YY_RULE_SETUP -#line 441 "./util/configlexer.lex" +#line 440 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES) } YY_BREAK case 230: YY_RULE_SETUP -#line 443 "./util/configlexer.lex" +#line 442 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES) } YY_BREAK case 231: YY_RULE_SETUP -#line 445 "./util/configlexer.lex" +#line 444 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) } YY_BREAK case 232: YY_RULE_SETUP -#line 447 "./util/configlexer.lex" -{ YDVAR(1, VAR_DISABLE_DNSSEC_LAME_CHECK) } +#line 446 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) } YY_BREAK case 233: YY_RULE_SETUP #line 448 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT) } +{ YDVAR(1, VAR_DISABLE_DNSSEC_LAME_CHECK) } YY_BREAK case 234: YY_RULE_SETUP #line 449 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT) } +{ YDVAR(1, VAR_IP_RATELIMIT) } YY_BREAK case 235: YY_RULE_SETUP #line 450 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT_SLABS) } +{ YDVAR(1, VAR_RATELIMIT) } YY_BREAK case 236: YY_RULE_SETUP #line 451 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT_SLABS) } +{ YDVAR(1, VAR_IP_RATELIMIT_SLABS) } YY_BREAK case 237: YY_RULE_SETUP #line 452 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT_SIZE) } +{ YDVAR(1, VAR_RATELIMIT_SLABS) } YY_BREAK case 238: YY_RULE_SETUP #line 453 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT_SIZE) } +{ YDVAR(1, VAR_IP_RATELIMIT_SIZE) } YY_BREAK case 239: YY_RULE_SETUP #line 454 "./util/configlexer.lex" -{ YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) } +{ YDVAR(1, VAR_RATELIMIT_SIZE) } YY_BREAK case 240: YY_RULE_SETUP #line 455 "./util/configlexer.lex" -{ YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) } +{ YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) } YY_BREAK case 241: YY_RULE_SETUP #line 456 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT_FACTOR) } +{ YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) } YY_BREAK case 242: YY_RULE_SETUP #line 457 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT_FACTOR) } +{ YDVAR(1, VAR_IP_RATELIMIT_FACTOR) } YY_BREAK case 243: YY_RULE_SETUP #line 458 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOW_RTT) } +{ YDVAR(1, VAR_RATELIMIT_FACTOR) } YY_BREAK case 244: YY_RULE_SETUP #line 459 "./util/configlexer.lex" -{ YDVAR(1, VAR_FAST_SERVER_NUM) } +{ YDVAR(1, VAR_LOW_RTT) } YY_BREAK case 245: YY_RULE_SETUP #line 460 "./util/configlexer.lex" -{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } +{ YDVAR(1, VAR_FAST_SERVER_NUM) } YY_BREAK case 246: YY_RULE_SETUP @@ -4410,180 +4419,185 @@ YY_RULE_SETUP case 248: YY_RULE_SETUP #line 463 "./util/configlexer.lex" -{ YDVAR(2, VAR_RESPONSE_IP_TAG) } +{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } YY_BREAK case 249: YY_RULE_SETUP #line 464 "./util/configlexer.lex" -{ YDVAR(2, VAR_RESPONSE_IP) } +{ YDVAR(2, VAR_RESPONSE_IP_TAG) } YY_BREAK case 250: YY_RULE_SETUP #line 465 "./util/configlexer.lex" -{ YDVAR(2, VAR_RESPONSE_IP_DATA) } +{ YDVAR(2, VAR_RESPONSE_IP) } YY_BREAK case 251: YY_RULE_SETUP #line 466 "./util/configlexer.lex" -{ YDVAR(0, VAR_DNSCRYPT) } +{ YDVAR(2, VAR_RESPONSE_IP_DATA) } YY_BREAK case 252: YY_RULE_SETUP #line 467 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_ENABLE) } +{ YDVAR(0, VAR_DNSCRYPT) } YY_BREAK case 253: YY_RULE_SETUP #line 468 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PORT) } +{ YDVAR(1, VAR_DNSCRYPT_ENABLE) } YY_BREAK case 254: YY_RULE_SETUP #line 469 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PROVIDER) } +{ YDVAR(1, VAR_DNSCRYPT_PORT) } YY_BREAK case 255: YY_RULE_SETUP #line 470 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_SECRET_KEY) } +{ YDVAR(1, VAR_DNSCRYPT_PROVIDER) } YY_BREAK case 256: YY_RULE_SETUP #line 471 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT) } +{ YDVAR(1, VAR_DNSCRYPT_SECRET_KEY) } YY_BREAK case 257: YY_RULE_SETUP #line 472 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT_ROTATED) } +{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT) } YY_BREAK case 258: YY_RULE_SETUP #line 473 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE) } +{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT_ROTATED) } YY_BREAK case 259: YY_RULE_SETUP -#line 475 "./util/configlexer.lex" +#line 474 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS) } + YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE) } YY_BREAK case 260: YY_RULE_SETUP -#line 477 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SIZE) } +#line 476 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS) } YY_BREAK case 261: YY_RULE_SETUP #line 478 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SLABS) } +{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SIZE) } YY_BREAK case 262: YY_RULE_SETUP #line 479 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_ENABLED) } +{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SLABS) } YY_BREAK case 263: YY_RULE_SETUP #line 480 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_IGNORE_BOGUS) } +{ YDVAR(1, VAR_IPSECMOD_ENABLED) } YY_BREAK case 264: YY_RULE_SETUP #line 481 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_HOOK) } +{ YDVAR(1, VAR_IPSECMOD_IGNORE_BOGUS) } YY_BREAK case 265: YY_RULE_SETUP #line 482 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_MAX_TTL) } +{ YDVAR(1, VAR_IPSECMOD_HOOK) } YY_BREAK case 266: YY_RULE_SETUP #line 483 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_WHITELIST) } +{ YDVAR(1, VAR_IPSECMOD_MAX_TTL) } YY_BREAK case 267: YY_RULE_SETUP #line 484 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_STRICT) } +{ YDVAR(1, VAR_IPSECMOD_WHITELIST) } YY_BREAK case 268: YY_RULE_SETUP #line 485 "./util/configlexer.lex" -{ YDVAR(0, VAR_CACHEDB) } +{ YDVAR(1, VAR_IPSECMOD_STRICT) } YY_BREAK case 269: YY_RULE_SETUP #line 486 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_BACKEND) } +{ YDVAR(0, VAR_CACHEDB) } YY_BREAK case 270: YY_RULE_SETUP #line 487 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_SECRETSEED) } +{ YDVAR(1, VAR_CACHEDB_BACKEND) } YY_BREAK case 271: YY_RULE_SETUP #line 488 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISHOST) } +{ YDVAR(1, VAR_CACHEDB_SECRETSEED) } YY_BREAK case 272: YY_RULE_SETUP #line 489 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISPORT) } +{ YDVAR(1, VAR_CACHEDB_REDISHOST) } YY_BREAK case 273: YY_RULE_SETUP #line 490 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISTIMEOUT) } +{ YDVAR(1, VAR_CACHEDB_REDISPORT) } YY_BREAK case 274: YY_RULE_SETUP #line 491 "./util/configlexer.lex" -{ YDVAR(1, VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM) } +{ YDVAR(1, VAR_CACHEDB_REDISTIMEOUT) } YY_BREAK case 275: YY_RULE_SETUP #line 492 "./util/configlexer.lex" -{ YDVAR(2, VAR_TCP_CONNECTION_LIMIT) } +{ YDVAR(1, VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM) } YY_BREAK case 276: -/* rule 276 can match eol */ YY_RULE_SETUP #line 493 "./util/configlexer.lex" +{ YDVAR(2, VAR_TCP_CONNECTION_LIMIT) } + YY_BREAK +case 277: +/* rule 277 can match eol */ +YY_RULE_SETUP +#line 494 "./util/configlexer.lex" { LEXOUT(("NL\n")); cfg_parser->line++; } YY_BREAK /* Quoted strings. Strip leading and ending quotes */ -case 277: +case 278: YY_RULE_SETUP -#line 496 "./util/configlexer.lex" +#line 497 "./util/configlexer.lex" { BEGIN(quotedstring); LEXOUT(("QS ")); } YY_BREAK case YY_STATE_EOF(quotedstring): -#line 497 "./util/configlexer.lex" +#line 498 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); if(--num_args == 0) { BEGIN(INITIAL); } else { BEGIN(val); } } YY_BREAK -case 278: -YY_RULE_SETUP -#line 502 "./util/configlexer.lex" -{ LEXOUT(("STR(%s) ", yytext)); yymore(); } - YY_BREAK case 279: -/* rule 279 can match eol */ YY_RULE_SETUP #line 503 "./util/configlexer.lex" +{ LEXOUT(("STR(%s) ", yytext)); yymore(); } + YY_BREAK +case 280: +/* rule 280 can match eol */ +YY_RULE_SETUP +#line 504 "./util/configlexer.lex" { yyerror("newline inside quoted string, no end \""); cfg_parser->line++; BEGIN(INITIAL); } YY_BREAK -case 280: +case 281: YY_RULE_SETUP -#line 505 "./util/configlexer.lex" +#line 506 "./util/configlexer.lex" { LEXOUT(("QE ")); if(--num_args == 0) { BEGIN(INITIAL); } @@ -4596,34 +4610,34 @@ YY_RULE_SETUP } YY_BREAK /* Single Quoted strings. Strip leading and ending quotes */ -case 281: +case 282: YY_RULE_SETUP -#line 517 "./util/configlexer.lex" +#line 518 "./util/configlexer.lex" { BEGIN(singlequotedstr); LEXOUT(("SQS ")); } YY_BREAK case YY_STATE_EOF(singlequotedstr): -#line 518 "./util/configlexer.lex" +#line 519 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); if(--num_args == 0) { BEGIN(INITIAL); } else { BEGIN(val); } } YY_BREAK -case 282: -YY_RULE_SETUP -#line 523 "./util/configlexer.lex" -{ LEXOUT(("STR(%s) ", yytext)); yymore(); } - YY_BREAK case 283: -/* rule 283 can match eol */ YY_RULE_SETUP #line 524 "./util/configlexer.lex" +{ LEXOUT(("STR(%s) ", yytext)); yymore(); } + YY_BREAK +case 284: +/* rule 284 can match eol */ +YY_RULE_SETUP +#line 525 "./util/configlexer.lex" { yyerror("newline inside quoted string, no end '"); cfg_parser->line++; BEGIN(INITIAL); } YY_BREAK -case 284: +case 285: YY_RULE_SETUP -#line 526 "./util/configlexer.lex" +#line 527 "./util/configlexer.lex" { LEXOUT(("SQE ")); if(--num_args == 0) { BEGIN(INITIAL); } @@ -4636,38 +4650,38 @@ YY_RULE_SETUP } YY_BREAK /* include: directive */ -case 285: +case 286: YY_RULE_SETUP -#line 538 "./util/configlexer.lex" +#line 539 "./util/configlexer.lex" { LEXOUT(("v(%s) ", yytext)); inc_prev = YYSTATE; BEGIN(include); } YY_BREAK case YY_STATE_EOF(include): -#line 540 "./util/configlexer.lex" +#line 541 "./util/configlexer.lex" { yyerror("EOF inside include directive"); BEGIN(inc_prev); } YY_BREAK -case 286: -YY_RULE_SETUP -#line 544 "./util/configlexer.lex" -{ LEXOUT(("ISP ")); /* ignore */ } - YY_BREAK case 287: -/* rule 287 can match eol */ YY_RULE_SETUP #line 545 "./util/configlexer.lex" -{ LEXOUT(("NL\n")); cfg_parser->line++;} +{ LEXOUT(("ISP ")); /* ignore */ } YY_BREAK case 288: +/* rule 288 can match eol */ YY_RULE_SETUP #line 546 "./util/configlexer.lex" -{ LEXOUT(("IQS ")); BEGIN(include_quoted); } +{ LEXOUT(("NL\n")); cfg_parser->line++;} YY_BREAK case 289: YY_RULE_SETUP #line 547 "./util/configlexer.lex" +{ LEXOUT(("IQS ")); BEGIN(include_quoted); } + YY_BREAK +case 290: +YY_RULE_SETUP +#line 548 "./util/configlexer.lex" { LEXOUT(("Iunquotedstr(%s) ", yytext)); config_start_include_glob(yytext); @@ -4675,27 +4689,27 @@ YY_RULE_SETUP } YY_BREAK case YY_STATE_EOF(include_quoted): -#line 552 "./util/configlexer.lex" +#line 553 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); BEGIN(inc_prev); } YY_BREAK -case 290: -YY_RULE_SETUP -#line 556 "./util/configlexer.lex" -{ LEXOUT(("ISTR(%s) ", yytext)); yymore(); } - YY_BREAK case 291: -/* rule 291 can match eol */ YY_RULE_SETUP #line 557 "./util/configlexer.lex" +{ LEXOUT(("ISTR(%s) ", yytext)); yymore(); } + YY_BREAK +case 292: +/* rule 292 can match eol */ +YY_RULE_SETUP +#line 558 "./util/configlexer.lex" { yyerror("newline before \" in include name"); cfg_parser->line++; BEGIN(inc_prev); } YY_BREAK -case 292: +case 293: YY_RULE_SETUP -#line 559 "./util/configlexer.lex" +#line 560 "./util/configlexer.lex" { LEXOUT(("IQE ")); yytext[yyleng - 1] = '\0'; @@ -4705,7 +4719,7 @@ YY_RULE_SETUP YY_BREAK case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(val): -#line 565 "./util/configlexer.lex" +#line 566 "./util/configlexer.lex" { LEXOUT(("LEXEOF ")); yy_set_bol(1); /* Set beginning of line, so "^" rules match. */ @@ -4717,33 +4731,33 @@ case YY_STATE_EOF(val): } } YY_BREAK -case 293: +case 294: YY_RULE_SETUP -#line 576 "./util/configlexer.lex" +#line 577 "./util/configlexer.lex" { LEXOUT(("unquotedstr(%s) ", yytext)); if(--num_args == 0) { BEGIN(INITIAL); } yylval.str = strdup(yytext); return STRING_ARG; } YY_BREAK -case 294: +case 295: YY_RULE_SETUP -#line 580 "./util/configlexer.lex" +#line 581 "./util/configlexer.lex" { ub_c_error_msg("unknown keyword '%s'", yytext); } YY_BREAK -case 295: +case 296: YY_RULE_SETUP -#line 584 "./util/configlexer.lex" +#line 585 "./util/configlexer.lex" { ub_c_error_msg("stray '%s'", yytext); } YY_BREAK -case 296: +case 297: YY_RULE_SETUP -#line 588 "./util/configlexer.lex" +#line 589 "./util/configlexer.lex" ECHO; YY_BREAK -#line 4745 "" +#line 4759 "" case YY_END_OF_BUFFER: { @@ -5038,7 +5052,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 >= 2947 ) + if ( yy_current_state >= 2953 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; @@ -5066,11 +5080,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 >= 2947 ) + if ( yy_current_state >= 2953 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; - yy_is_jam = (yy_current_state == 2946); + yy_is_jam = (yy_current_state == 2952); return yy_is_jam ? 0 : yy_current_state; } @@ -5709,6 +5723,6 @@ void yyfree (void * ptr ) #define YYTABLES_NAME "yytables" -#line 588 "./util/configlexer.lex" +#line 589 "./util/configlexer.lex" diff --git a/util/configlexer.lex b/util/configlexer.lex index 5b21042b7..ccd394e23 100644 --- a/util/configlexer.lex +++ b/util/configlexer.lex @@ -322,6 +322,7 @@ tags{COLON} { YDVAR(1, VAR_TAGS) } rpz-action-override{COLON} { YDVAR(1, VAR_RPZ_ACTION_OVERRIDE) } rpz-cname-override{COLON} { YDVAR(1, VAR_RPZ_CNAME_OVERRIDE) } rpz-log{COLON} { YDVAR(1, VAR_RPZ_LOG) } +rpz-log-name{COLON} { YDVAR(1, VAR_RPZ_LOG_NAME) } zonefile{COLON} { YDVAR(1, VAR_ZONEFILE) } master{COLON} { YDVAR(1, VAR_MASTER) } url{COLON} { YDVAR(1, VAR_URL) } diff --git a/util/configparser.c b/util/configparser.c index 4cfd58227..05b65090f 100644 --- a/util/configparser.c +++ b/util/configparser.c @@ -394,7 +394,8 @@ extern int yydebug; VAR_TAGS = 523, VAR_RPZ_ACTION_OVERRIDE = 524, VAR_RPZ_CNAME_OVERRIDE = 525, - VAR_RPZ_LOG = 526 + VAR_RPZ_LOG = 526, + VAR_RPZ_LOG_NAME = 527 }; #endif /* Tokens. */ @@ -667,6 +668,7 @@ extern int yydebug; #define VAR_RPZ_ACTION_OVERRIDE 524 #define VAR_RPZ_CNAME_OVERRIDE 525 #define VAR_RPZ_LOG 526 +#define VAR_RPZ_LOG_NAME 527 /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED @@ -677,7 +679,7 @@ union YYSTYPE char* str; -#line 681 "util/configparser.c" /* yacc.c:355 */ +#line 683 "util/configparser.c" /* yacc.c:355 */ }; typedef union YYSTYPE YYSTYPE; @@ -694,7 +696,7 @@ int yyparse (void); /* Copy the second part of user declarations. */ -#line 698 "util/configparser.c" /* yacc.c:358 */ +#line 700 "util/configparser.c" /* yacc.c:358 */ #ifdef short # undef short @@ -936,21 +938,21 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 2 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 577 +#define YYLAST 579 /* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 272 +#define YYNTOKENS 273 /* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 293 +#define YYNNTS 294 /* YYNRULES -- Number of rules. */ -#define YYNRULES 566 +#define YYNRULES 568 /* YYNSTATES -- Number of states. */ -#define YYNSTATES 844 +#define YYNSTATES 847 /* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned by yylex, with out-of-bounds checking. */ #define YYUNDEFTOK 2 -#define YYMAXUTOK 526 +#define YYMAXUTOK 527 #define YYTRANSLATE(YYX) \ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) @@ -1011,7 +1013,7 @@ static const yytype_uint16 yytranslate[] = 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, - 265, 266, 267, 268, 269, 270, 271 + 265, 266, 267, 268, 269, 270, 271, 272 }; #if YYDEBUG @@ -1043,38 +1045,38 @@ static const yytype_uint16 yyrline[] = 304, 304, 304, 304, 305, 305, 307, 321, 322, 323, 323, 323, 323, 324, 324, 324, 326, 343, 344, 345, 345, 345, 345, 346, 346, 346, 347, 350, 370, 387, - 398, 408, 425, 426, 427, 427, 427, 427, 427, 428, - 428, 428, 429, 431, 440, 449, 460, 469, 478, 487, - 498, 507, 518, 531, 546, 557, 574, 591, 608, 625, - 640, 655, 668, 683, 692, 701, 710, 719, 728, 737, - 746, 755, 764, 773, 782, 791, 800, 813, 822, 835, - 844, 853, 862, 869, 876, 885, 892, 901, 909, 916, - 923, 931, 940, 949, 963, 972, 981, 990, 999, 1008, - 1017, 1024, 1031, 1057, 1065, 1072, 1079, 1086, 1093, 1101, - 1109, 1117, 1124, 1135, 1146, 1153, 1162, 1171, 1180, 1187, - 1194, 1202, 1210, 1220, 1230, 1240, 1248, 1261, 1272, 1280, - 1293, 1302, 1311, 1320, 1330, 1340, 1348, 1361, 1370, 1378, - 1387, 1395, 1408, 1417, 1424, 1434, 1444, 1454, 1464, 1474, - 1484, 1494, 1504, 1511, 1518, 1525, 1534, 1543, 1552, 1561, - 1568, 1578, 1598, 1605, 1623, 1636, 1649, 1658, 1667, 1676, - 1685, 1695, 1705, 1716, 1725, 1734, 1743, 1752, 1765, 1778, - 1787, 1794, 1803, 1812, 1821, 1830, 1838, 1851, 1859, 1892, - 1899, 1914, 1924, 1934, 1941, 1948, 1955, 1964, 1972, 1986, - 2007, 2028, 2040, 2052, 2064, 2073, 2094, 2104, 2113, 2121, - 2129, 2142, 2155, 2170, 2185, 2194, 2203, 2209, 2218, 2227, - 2237, 2247, 2260, 2273, 2285, 2299, 2311, 2325, 2335, 2342, - 2349, 2358, 2367, 2377, 2387, 2397, 2404, 2411, 2420, 2429, - 2439, 2449, 2456, 2463, 2470, 2478, 2488, 2498, 2508, 2518, - 2550, 2560, 2568, 2576, 2591, 2600, 2605, 2606, 2607, 2607, - 2607, 2608, 2608, 2608, 2609, 2609, 2611, 2621, 2630, 2637, - 2644, 2651, 2658, 2665, 2672, 2677, 2678, 2679, 2679, 2680, - 2680, 2681, 2681, 2682, 2683, 2684, 2685, 2686, 2687, 2689, - 2698, 2705, 2714, 2723, 2730, 2737, 2747, 2757, 2767, 2777, - 2787, 2797, 2802, 2803, 2804, 2806, 2812, 2822, 2829, 2838, - 2846, 2851, 2852, 2854, 2854, 2854, 2855, 2855, 2856, 2857, - 2858, 2859, 2860, 2862, 2872, 2881, 2888, 2897, 2904, 2913, - 2921, 2934, 2942, 2955, 2960, 2961, 2962, 2962, 2963, 2963, - 2963, 2965, 2980, 2995, 3007, 3022, 3035 + 398, 408, 419, 436, 437, 438, 438, 438, 438, 438, + 439, 439, 439, 440, 440, 442, 451, 460, 471, 480, + 489, 498, 509, 518, 529, 542, 557, 568, 585, 602, + 619, 636, 651, 666, 679, 694, 703, 712, 721, 730, + 739, 748, 757, 766, 775, 784, 793, 802, 811, 824, + 833, 846, 855, 864, 873, 880, 887, 896, 903, 912, + 920, 927, 934, 942, 951, 960, 974, 983, 992, 1001, + 1010, 1019, 1028, 1035, 1042, 1068, 1076, 1083, 1090, 1097, + 1104, 1112, 1120, 1128, 1135, 1146, 1157, 1164, 1173, 1182, + 1191, 1198, 1205, 1213, 1221, 1231, 1241, 1251, 1259, 1272, + 1283, 1291, 1304, 1313, 1322, 1331, 1341, 1351, 1359, 1372, + 1381, 1389, 1398, 1406, 1419, 1428, 1435, 1445, 1455, 1465, + 1475, 1485, 1495, 1505, 1515, 1522, 1529, 1536, 1545, 1554, + 1563, 1572, 1579, 1589, 1609, 1616, 1634, 1647, 1660, 1669, + 1678, 1687, 1696, 1706, 1716, 1727, 1736, 1745, 1754, 1763, + 1776, 1789, 1798, 1805, 1814, 1823, 1832, 1841, 1849, 1862, + 1870, 1903, 1910, 1925, 1935, 1945, 1952, 1959, 1966, 1975, + 1983, 1997, 2018, 2039, 2051, 2063, 2075, 2084, 2105, 2115, + 2124, 2132, 2140, 2153, 2166, 2181, 2196, 2205, 2214, 2220, + 2229, 2238, 2248, 2258, 2271, 2284, 2296, 2310, 2322, 2336, + 2346, 2353, 2360, 2369, 2378, 2388, 2398, 2408, 2415, 2422, + 2431, 2440, 2450, 2460, 2467, 2474, 2481, 2489, 2499, 2509, + 2519, 2529, 2561, 2571, 2579, 2587, 2602, 2611, 2616, 2617, + 2618, 2618, 2618, 2619, 2619, 2619, 2620, 2620, 2622, 2632, + 2641, 2648, 2655, 2662, 2669, 2676, 2683, 2688, 2689, 2690, + 2690, 2691, 2691, 2692, 2692, 2693, 2694, 2695, 2696, 2697, + 2698, 2700, 2709, 2716, 2725, 2734, 2741, 2748, 2758, 2768, + 2778, 2788, 2798, 2808, 2813, 2814, 2815, 2817, 2823, 2833, + 2840, 2849, 2857, 2862, 2863, 2865, 2865, 2865, 2866, 2866, + 2867, 2868, 2869, 2870, 2871, 2873, 2883, 2892, 2899, 2908, + 2915, 2924, 2932, 2945, 2953, 2966, 2971, 2972, 2973, 2973, + 2974, 2974, 2974, 2976, 2991, 3006, 3018, 3033, 3046 }; #endif @@ -1183,16 +1185,17 @@ static const char *const yytname[] = "VAR_STREAM_WAIT_SIZE", "VAR_TLS_CIPHERS", "VAR_TLS_CIPHERSUITES", "VAR_TLS_SESSION_TICKET_KEYS", "VAR_RPZ", "VAR_TAGS", "VAR_RPZ_ACTION_OVERRIDE", "VAR_RPZ_CNAME_OVERRIDE", "VAR_RPZ_LOG", - "$accept", "toplevelvars", "toplevelvar", "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", "rpzstart", "contents_rpz", - "content_rpz", "server_num_threads", "server_verbosity", - "server_statistics_interval", "server_statistics_cumulative", - "server_extended_statistics", "server_shm_enable", "server_shm_key", - "server_port", "server_send_client_subnet", "server_client_subnet_zone", + "VAR_RPZ_LOG_NAME", "$accept", "toplevelvars", "toplevelvar", + "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", + "rpzstart", "contents_rpz", "content_rpz", "server_num_threads", + "server_verbosity", "server_statistics_interval", + "server_statistics_cumulative", "server_extended_statistics", + "server_shm_enable", "server_shm_key", "server_port", + "server_send_client_subnet", "server_client_subnet_zone", "server_client_subnet_always_forward", "server_client_subnet_opcode", "server_max_client_subnet_ipv4", "server_max_client_subnet_ipv6", "server_min_client_subnet_ipv4", "server_min_client_subnet_ipv6", @@ -1336,14 +1339,14 @@ static const yytype_uint16 yytoknum[] = 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 + 525, 526, 527 }; # endif -#define YYPACT_NINF -192 +#define YYPACT_NINF -209 #define yypact_value_is_default(Yystate) \ - (!!((Yystate) == (-192))) + (!!((Yystate) == (-209))) #define YYTABLE_NINF -1 @@ -1354,12 +1357,12 @@ static const yytype_uint16 yytoknum[] = STATE-NUM. */ static const yytype_int16 yypact[] = { - -192, 0, -192, -192, -192, -192, -192, -192, -192, -192, - -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, - -192, -192, -192, -192, -192, -192, 256, -42, -37, -38, - -23, -41, -62, -131, -104, -168, -191, -2, -1, 2, - 3, 6, 7, 8, 9, 33, 51, 52, 53, 55, - 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, + -209, 0, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, 256, -42, -37, -38, + -8, -41, -28, -136, -104, -168, -208, -2, -1, 2, + 3, 23, 24, 26, 27, 28, 29, 30, 33, 35, + 36, 37, 38, 39, 51, 52, 53, 55, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 86, 87, 90, 92, 93, 94, 95, 96, 97, 98, 99, 101, 102, @@ -1372,73 +1375,73 @@ static const yytype_int16 yypact[] = 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 196, 197, 198, 199, 200, - 201, 202, 204, 205, 207, 216, 222, 223, 224, 226, - 227, 228, 229, 230, 231, 232, 234, 235, 236, 237, - 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, - 248, 249, 250, 251, 252, 253, 254, 255, 289, 290, - 291, 292, 296, 297, 298, 340, -192, -192, -192, -192, - -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, - -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, - -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, - -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, - -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, - -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, - -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, - -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, - -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, - -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, - -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, - -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, - -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, - -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, - -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, - -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, - -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, - -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, - -192, -192, -192, -192, -192, -192, 341, 342, 343, 344, - 345, 346, 347, -192, -192, -192, -192, -192, -192, -192, - -192, 348, 352, 356, 357, 382, 383, -192, -192, -192, - -192, -192, -192, -192, 384, 386, 397, 398, 399, 400, - 401, -192, -192, -192, -192, -192, -192, -192, -192, 402, - 403, 404, 405, 406, 407, 408, 409, -192, -192, -192, - -192, -192, -192, -192, -192, -192, 448, 450, 464, 465, - -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, - 466, 467, 468, 469, 470, 471, 472, 473, -192, -192, - -192, -192, -192, -192, -192, -192, -192, 474, 481, 482, - 483, 484, 485, 486, 488, 489, 490, 491, 492, -192, - -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, - -192, -192, 493, -192, -192, 494, 497, 500, 503, 504, - 513, 514, 515, 516, 517, -192, -192, -192, -192, -192, - -192, -192, -192, -192, -192, -192, 518, 519, 520, 521, - 522, -192, -192, -192, -192, -192, -192, -192, -192, -192, - -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, - -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, - -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, - -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, - -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, - -192, -192, -192, -192, -192, -192, 523, 524, -192, -192, - -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, - -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, - -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, - -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, - -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, - -192, -192, -192, 525, 526, 527, -192, -192, -192, -192, - -192, -192, -192, -192, -192, 528, 529, -192, -192, -192, - -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, - -192, -192, -192, -192, -192, -192, 530, 531, 532, 533, - 534, 535, -192, -192, -192, -192, -192, -192, -192, -192, - -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, - -192, -192, -192, -192, -192, -192, -192, 536, -192, -192, - -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, - -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, - 537, -192, -192, 538, 539, -192, -192, -192, -192, -192, - -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, - -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, - -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, - -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, - -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, - -192, -192, -192, 540, 541, 542, -192, -192, -192, -192, - -192, -192, -192, -192 + 201, 202, 204, 205, 207, 209, 211, 212, 213, 214, + 215, 216, 222, 223, 231, 232, 234, 235, 237, 238, + 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 289, 290, 291, + 292, 296, 297, 298, 340, 341, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, 342, 343, 344, 345, + 346, 347, 348, -209, -209, -209, -209, -209, -209, -209, + -209, 352, 356, 357, 382, 383, 384, -209, -209, -209, + -209, -209, -209, -209, 386, 397, 398, 399, 400, 401, + 402, -209, -209, -209, -209, -209, -209, -209, -209, 403, + 404, 405, 406, 407, 408, 409, 448, -209, -209, -209, + -209, -209, -209, -209, -209, -209, 450, 464, 465, 466, + 467, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, 468, 469, 470, 471, 472, 473, 474, 481, + -209, -209, -209, -209, -209, -209, -209, -209, -209, 482, + 483, 484, 485, 486, 488, 489, 490, 491, 492, 493, + 494, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, 497, -209, -209, 500, 503, 504, + 513, 514, 515, 516, 517, 518, 519, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, 520, 521, + 522, 523, 524, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, 525, 526, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, 527, 528, 529, -209, -209, + -209, -209, -209, -209, -209, -209, -209, 530, 531, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, 532, 533, + 534, 535, 536, 537, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, 538, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, 539, -209, -209, 540, 541, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, 542, 543, 544, -209, + -209, -209, -209, -209, -209, -209, -209 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. @@ -1446,9 +1449,9 @@ static const yytype_int16 yypact[] = means the default is an error. */ static const yytype_uint16 yydefact[] = { - 2, 0, 1, 15, 207, 217, 475, 521, 494, 226, - 530, 553, 236, 251, 3, 17, 209, 219, 228, 238, - 253, 477, 496, 523, 532, 555, 4, 5, 6, 10, + 2, 0, 1, 15, 207, 217, 477, 523, 496, 226, + 532, 555, 236, 252, 3, 17, 209, 219, 228, 238, + 254, 479, 498, 525, 534, 557, 4, 5, 6, 10, 13, 14, 8, 9, 7, 11, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1494,113 +1497,113 @@ static const yytype_uint16 yydefact[] = 0, 227, 229, 230, 233, 234, 231, 235, 232, 0, 0, 0, 0, 0, 0, 0, 0, 237, 239, 240, 241, 242, 246, 243, 244, 245, 0, 0, 0, 0, - 256, 260, 261, 262, 252, 254, 255, 257, 258, 259, - 0, 0, 0, 0, 0, 0, 0, 0, 476, 478, - 480, 479, 485, 481, 482, 483, 484, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 495, - 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, - 507, 508, 0, 522, 524, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 531, 533, 534, 535, 537, - 538, 536, 539, 540, 541, 542, 0, 0, 0, 0, - 0, 554, 556, 557, 558, 559, 560, 264, 263, 270, - 283, 281, 289, 290, 293, 291, 292, 294, 295, 296, - 297, 298, 320, 321, 322, 323, 324, 348, 349, 350, - 355, 356, 286, 357, 358, 361, 359, 360, 363, 364, - 365, 379, 335, 336, 338, 339, 366, 382, 329, 331, - 383, 389, 390, 391, 287, 347, 405, 406, 330, 400, - 313, 282, 325, 380, 386, 367, 0, 0, 409, 288, - 265, 312, 371, 266, 284, 285, 326, 327, 407, 369, - 373, 374, 267, 410, 351, 378, 314, 334, 384, 385, - 388, 399, 328, 403, 401, 402, 340, 346, 375, 376, - 341, 342, 368, 393, 315, 316, 319, 299, 301, 302, - 303, 304, 305, 411, 412, 414, 352, 353, 354, 362, - 415, 416, 417, 0, 0, 0, 370, 343, 526, 426, - 430, 428, 427, 431, 429, 0, 0, 434, 435, 271, - 272, 273, 274, 275, 276, 277, 278, 279, 280, 372, - 387, 404, 439, 440, 344, 418, 0, 0, 0, 0, - 0, 0, 394, 395, 396, 397, 398, 527, 337, 332, - 392, 311, 268, 269, 333, 441, 443, 442, 444, 445, - 446, 300, 307, 436, 438, 437, 306, 0, 318, 377, - 413, 317, 345, 308, 309, 310, 447, 448, 449, 453, - 452, 450, 451, 454, 455, 456, 457, 459, 458, 468, - 0, 472, 473, 0, 0, 474, 460, 466, 461, 462, - 463, 465, 467, 464, 247, 248, 249, 250, 486, 488, - 487, 490, 491, 492, 493, 489, 509, 510, 511, 512, - 513, 514, 515, 516, 517, 518, 519, 520, 525, 543, - 544, 545, 548, 546, 547, 549, 550, 551, 552, 561, - 562, 563, 564, 565, 381, 408, 425, 528, 529, 432, - 433, 419, 420, 0, 0, 0, 424, 566, 469, 470, - 471, 423, 421, 422 + 0, 257, 261, 262, 263, 264, 253, 255, 256, 258, + 259, 260, 0, 0, 0, 0, 0, 0, 0, 0, + 478, 480, 482, 481, 487, 483, 484, 485, 486, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 497, 499, 500, 501, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 0, 524, 526, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 533, 535, 536, + 537, 539, 540, 538, 541, 542, 543, 544, 0, 0, + 0, 0, 0, 556, 558, 559, 560, 561, 562, 266, + 265, 272, 285, 283, 291, 292, 295, 293, 294, 296, + 297, 298, 299, 300, 322, 323, 324, 325, 326, 350, + 351, 352, 357, 358, 288, 359, 360, 363, 361, 362, + 365, 366, 367, 381, 337, 338, 340, 341, 368, 384, + 331, 333, 385, 391, 392, 393, 289, 349, 407, 408, + 332, 402, 315, 284, 327, 382, 388, 369, 0, 0, + 411, 290, 267, 314, 373, 268, 286, 287, 328, 329, + 409, 371, 375, 376, 269, 412, 353, 380, 316, 336, + 386, 387, 390, 401, 330, 405, 403, 404, 342, 348, + 377, 378, 343, 344, 370, 395, 317, 318, 321, 301, + 303, 304, 305, 306, 307, 413, 414, 416, 354, 355, + 356, 364, 417, 418, 419, 0, 0, 0, 372, 345, + 528, 428, 432, 430, 429, 433, 431, 0, 0, 436, + 437, 273, 274, 275, 276, 277, 278, 279, 280, 281, + 282, 374, 389, 406, 441, 442, 346, 420, 0, 0, + 0, 0, 0, 0, 396, 397, 398, 399, 400, 529, + 339, 334, 394, 313, 270, 271, 335, 443, 445, 444, + 446, 447, 448, 302, 309, 438, 440, 439, 308, 0, + 320, 379, 415, 319, 347, 310, 311, 312, 449, 450, + 451, 455, 454, 452, 453, 456, 457, 458, 459, 461, + 460, 470, 0, 474, 475, 0, 0, 476, 462, 468, + 463, 464, 465, 467, 469, 466, 247, 248, 249, 250, + 251, 488, 490, 489, 492, 493, 494, 495, 491, 511, + 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, + 522, 527, 545, 546, 547, 550, 548, 549, 551, 552, + 553, 554, 563, 564, 565, 566, 567, 383, 410, 427, + 530, 531, 434, 435, 421, 422, 0, 0, 0, 426, + 568, 471, 472, 473, 425, 423, 424 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { - -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, - -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, - -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, - -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, - -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, - -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, - -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, - -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, - -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, - -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, - -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, - -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, - -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, - -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, - -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, - -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, - -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, - -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, - -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, - -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, - -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, - -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, - -192, -192, -21, 543, 544, 545, 546, -192, -192, -192, - -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, - -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, - -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, - -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, - -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, - -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, - -192, -192, -192 + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -21, 545, 546, 547, 548, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { -1, 1, 14, 15, 26, 226, 16, 27, 423, 17, - 28, 437, 18, 29, 451, 19, 30, 467, 480, 481, - 482, 483, 20, 31, 484, 227, 228, 229, 230, 231, - 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, - 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, - 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, - 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, - 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, - 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, - 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, - 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, - 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, - 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, - 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, - 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, - 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, - 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, - 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, - 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, - 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, - 402, 403, 404, 405, 406, 407, 408, 409, 410, 424, - 425, 426, 427, 428, 429, 430, 438, 439, 440, 441, - 442, 443, 468, 469, 470, 471, 472, 473, 474, 475, - 452, 453, 454, 455, 456, 457, 458, 21, 32, 498, - 499, 500, 501, 502, 503, 504, 505, 506, 22, 33, - 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, - 529, 530, 531, 23, 34, 533, 534, 411, 412, 413, - 414, 24, 35, 545, 546, 547, 548, 549, 550, 551, - 552, 553, 554, 555, 25, 36, 561, 562, 563, 564, - 565, 566, 415 + 28, 437, 18, 29, 451, 19, 30, 467, 481, 482, + 483, 484, 485, 20, 31, 486, 227, 228, 229, 230, + 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, + 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, + 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, + 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, + 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, + 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, + 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, + 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, + 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, + 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, + 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, + 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, + 424, 425, 426, 427, 428, 429, 430, 438, 439, 440, + 441, 442, 443, 468, 469, 470, 471, 472, 473, 474, + 475, 452, 453, 454, 455, 456, 457, 458, 21, 32, + 500, 501, 502, 503, 504, 505, 506, 507, 508, 22, + 33, 521, 522, 523, 524, 525, 526, 527, 528, 529, + 530, 531, 532, 533, 23, 34, 535, 536, 411, 412, + 413, 414, 24, 35, 547, 548, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 25, 36, 563, 564, 565, + 566, 567, 568, 415 }; /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If @@ -1608,76 +1611,76 @@ static const yytype_int16 yydefgoto[] = number is the opposite. If YYTABLE_NINF, syntax error. */ static const yytype_uint16 yytable[] = { - 2, 416, 459, 417, 418, 444, 431, 532, 567, 568, - 485, 3, 569, 570, 432, 433, 571, 572, 573, 574, - 459, 507, 508, 509, 510, 511, 512, 513, 514, 515, - 516, 517, 518, 490, 491, 492, 493, 494, 495, 496, - 497, 445, 446, 575, 4, 556, 557, 558, 559, 560, - 5, 535, 536, 537, 538, 539, 540, 541, 542, 543, - 544, 576, 577, 578, 419, 579, 447, 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, 6, 420, 607, 608, 421, 434, - 609, 435, 610, 611, 612, 613, 614, 615, 616, 617, - 7, 618, 619, 620, 621, 622, 623, 624, 625, 626, - 627, 628, 629, 630, 631, 632, 633, 448, 449, 634, - 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, - 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, - 655, 8, 656, 657, 658, 659, 660, 661, 662, 663, - 664, 665, 666, 667, 668, 669, 450, 670, 671, 672, - 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, - 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, - 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, - 703, 704, 9, 461, 462, 463, 705, 706, 707, 708, - 709, 710, 711, 466, 712, 713, 422, 714, 10, 460, - 436, 461, 462, 463, 464, 465, 715, 476, 477, 478, - 479, 466, 716, 717, 718, 11, 719, 720, 721, 722, - 723, 724, 725, 12, 726, 727, 728, 729, 730, 731, - 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, - 742, 743, 744, 745, 746, 747, 0, 13, 37, 38, + 2, 416, 459, 417, 418, 444, 431, 534, 569, 570, + 487, 3, 571, 572, 432, 433, 509, 510, 511, 512, + 513, 514, 515, 516, 517, 518, 519, 520, 558, 559, + 560, 561, 562, 573, 574, 459, 575, 576, 577, 578, + 579, 445, 446, 580, 4, 581, 582, 583, 584, 585, + 5, 537, 538, 539, 540, 541, 542, 543, 544, 545, + 546, 586, 587, 588, 419, 589, 447, 492, 493, 494, + 495, 496, 497, 498, 499, 590, 591, 592, 593, 594, + 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 6, 420, 609, 610, 421, 434, + 611, 435, 612, 613, 614, 615, 616, 617, 618, 619, + 7, 620, 621, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 633, 634, 635, 448, 449, 636, + 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, + 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, + 657, 8, 658, 659, 660, 661, 662, 663, 664, 665, + 666, 667, 668, 669, 670, 671, 450, 672, 673, 674, + 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, + 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, + 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, + 705, 706, 9, 461, 462, 463, 707, 708, 709, 710, + 711, 712, 713, 466, 714, 715, 422, 716, 10, 717, + 436, 718, 719, 720, 721, 722, 723, 476, 477, 478, + 479, 480, 724, 725, 460, 11, 461, 462, 463, 464, + 465, 726, 727, 12, 728, 729, 466, 730, 731, 732, + 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, + 743, 744, 745, 746, 747, 748, 0, 13, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, - 59, 60, 61, 62, 63, 64, 65, 66, 67, 748, - 749, 750, 751, 68, 69, 70, 752, 753, 754, 71, + 59, 60, 61, 62, 63, 64, 65, 66, 67, 749, + 750, 751, 752, 68, 69, 70, 753, 754, 755, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, - 755, 756, 757, 758, 759, 760, 761, 762, 763, 112, - 113, 114, 764, 115, 116, 117, 765, 766, 118, 119, + 756, 757, 758, 759, 760, 761, 762, 763, 764, 112, + 113, 114, 765, 115, 116, 117, 766, 767, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, - 140, 141, 767, 768, 769, 142, 770, 143, 144, 145, - 146, 147, 148, 149, 150, 151, 152, 771, 772, 773, - 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, + 140, 141, 768, 769, 770, 142, 771, 143, 144, 145, + 146, 147, 148, 149, 150, 151, 152, 772, 773, 774, + 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, - 183, 184, 185, 186, 187, 188, 189, 190, 784, 191, - 785, 192, 193, 194, 195, 196, 197, 198, 199, 200, - 201, 202, 203, 204, 786, 787, 788, 789, 790, 791, - 792, 793, 794, 795, 796, 205, 206, 207, 208, 209, - 210, 797, 798, 799, 800, 801, 802, 211, 803, 804, - 805, 806, 807, 808, 809, 212, 213, 810, 214, 215, - 811, 216, 217, 812, 813, 218, 219, 220, 221, 222, - 223, 224, 225, 814, 815, 816, 817, 818, 819, 820, - 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, - 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, - 841, 842, 843, 0, 0, 0, 0, 0, 0, 0, + 183, 184, 185, 186, 187, 188, 189, 190, 785, 191, + 786, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 787, 788, 789, 790, 791, 792, + 793, 794, 795, 796, 797, 205, 206, 207, 208, 209, + 210, 798, 799, 800, 801, 802, 803, 211, 804, 805, + 806, 807, 808, 809, 810, 212, 213, 811, 214, 215, + 812, 216, 217, 813, 814, 218, 219, 220, 221, 222, + 223, 224, 225, 815, 816, 817, 818, 819, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 486, 487, 488, 489 + 0, 0, 0, 0, 0, 0, 488, 489, 490, 491 }; static const yytype_int16 yycheck[] = { 0, 43, 43, 45, 46, 43, 43, 111, 10, 10, - 31, 11, 10, 10, 51, 52, 10, 10, 10, 10, - 43, 152, 153, 154, 155, 156, 157, 158, 159, 160, - 161, 162, 163, 95, 96, 97, 98, 99, 100, 101, - 102, 79, 80, 10, 44, 236, 237, 238, 239, 240, + 31, 11, 10, 10, 51, 52, 152, 153, 154, 155, + 156, 157, 158, 159, 160, 161, 162, 163, 236, 237, + 238, 239, 240, 10, 10, 43, 10, 10, 10, 10, + 10, 79, 80, 10, 44, 10, 10, 10, 10, 10, 50, 219, 220, 221, 222, 223, 224, 225, 226, 227, - 228, 10, 10, 10, 106, 10, 104, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 228, 10, 10, 10, 106, 10, 104, 95, 96, 97, + 98, 99, 100, 101, 102, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 94, 137, 10, 10, 140, 136, 10, 138, 10, 10, 10, 10, 10, 10, 10, 10, @@ -1691,10 +1694,10 @@ 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, 202, 244, 245, 246, 10, 10, 10, 10, - 10, 10, 10, 254, 10, 10, 258, 10, 218, 242, - 257, 244, 245, 246, 247, 248, 10, 268, 269, 270, - 271, 254, 10, 10, 10, 235, 10, 10, 10, 10, - 10, 10, 10, 243, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 254, 10, 10, 258, 10, 218, 10, + 257, 10, 10, 10, 10, 10, 10, 268, 269, 270, + 271, 272, 10, 10, 242, 235, 244, 245, 246, 247, + 248, 10, 10, 243, 10, 10, 254, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, -1, 267, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, @@ -1725,19 +1728,19 @@ static const yytype_int16 yycheck[] = 264, 265, 266, 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, -1, -1, + 10, 10, 10, 10, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 31, 31, 31, 31 + -1, -1, -1, -1, -1, -1, 31, 31, 31, 31 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const yytype_uint16 yystos[] = { - 0, 273, 0, 11, 44, 50, 94, 110, 151, 202, - 218, 235, 243, 267, 274, 275, 278, 281, 284, 287, - 294, 509, 520, 535, 543, 556, 276, 279, 282, 285, - 288, 295, 510, 521, 536, 544, 557, 12, 13, 14, + 0, 274, 0, 11, 44, 50, 94, 110, 151, 202, + 218, 235, 243, 267, 275, 276, 279, 282, 285, 288, + 296, 511, 522, 537, 545, 558, 277, 280, 283, 286, + 289, 297, 512, 523, 538, 546, 559, 12, 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, 47, 48, @@ -1756,41 +1759,41 @@ static const yytype_uint16 yystos[] = 201, 203, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 229, 230, 231, 232, 233, 234, 241, 249, 250, 252, 253, 255, 256, 259, 260, - 261, 262, 263, 264, 265, 266, 277, 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, 539, 540, 541, 542, 564, 43, 45, 46, 106, - 137, 140, 258, 280, 481, 482, 483, 484, 485, 486, - 487, 43, 51, 52, 136, 138, 257, 283, 488, 489, - 490, 491, 492, 493, 43, 79, 80, 104, 165, 166, - 204, 286, 502, 503, 504, 505, 506, 507, 508, 43, - 242, 244, 245, 246, 247, 248, 254, 289, 494, 495, - 496, 497, 498, 499, 500, 501, 268, 269, 270, 271, - 290, 291, 292, 293, 296, 494, 495, 496, 497, 498, - 95, 96, 97, 98, 99, 100, 101, 102, 511, 512, - 513, 514, 515, 516, 517, 518, 519, 152, 153, 154, - 155, 156, 157, 158, 159, 160, 161, 162, 163, 522, - 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, - 533, 534, 111, 537, 538, 219, 220, 221, 222, 223, - 224, 225, 226, 227, 228, 545, 546, 547, 548, 549, - 550, 551, 552, 553, 554, 555, 236, 237, 238, 239, - 240, 558, 559, 560, 561, 562, 563, 10, 10, 10, + 261, 262, 263, 264, 265, 266, 278, 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, 541, 542, 543, 544, 566, 43, 45, 46, 106, + 137, 140, 258, 281, 483, 484, 485, 486, 487, 488, + 489, 43, 51, 52, 136, 138, 257, 284, 490, 491, + 492, 493, 494, 495, 43, 79, 80, 104, 165, 166, + 204, 287, 504, 505, 506, 507, 508, 509, 510, 43, + 242, 244, 245, 246, 247, 248, 254, 290, 496, 497, + 498, 499, 500, 501, 502, 503, 268, 269, 270, 271, + 272, 291, 292, 293, 294, 295, 298, 496, 497, 498, + 499, 500, 95, 96, 97, 98, 99, 100, 101, 102, + 513, 514, 515, 516, 517, 518, 519, 520, 521, 152, + 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, + 163, 524, 525, 526, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 111, 539, 540, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 547, 548, 549, + 550, 551, 552, 553, 554, 555, 556, 557, 236, 237, + 238, 239, 240, 560, 561, 562, 563, 564, 565, 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, @@ -1818,39 +1821,39 @@ static const yytype_uint16 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_uint16 yyr1[] = { - 0, 272, 273, 273, 274, 274, 274, 274, 274, 274, - 274, 274, 274, 274, 274, 275, 276, 276, 277, 277, - 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, - 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, - 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, - 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, - 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, - 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, - 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, - 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, - 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, - 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, - 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, - 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, - 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, - 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, - 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, - 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, - 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, - 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, - 277, 277, 277, 277, 277, 277, 277, 278, 279, 279, - 280, 280, 280, 280, 280, 280, 280, 281, 282, 282, - 283, 283, 283, 283, 283, 283, 284, 285, 285, 286, - 286, 286, 286, 286, 286, 286, 287, 288, 288, 289, - 289, 289, 289, 289, 289, 289, 289, 290, 291, 292, - 293, 294, 295, 295, 296, 296, 296, 296, 296, 296, - 296, 296, 296, 297, 298, 299, 300, 301, 302, 303, + 0, 273, 274, 274, 275, 275, 275, 275, 275, 275, + 275, 275, 275, 275, 275, 276, 277, 277, 278, 278, + 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, + 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, + 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, + 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, + 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, + 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, + 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, + 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, + 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, + 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, + 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, + 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, + 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, + 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, + 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, + 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, + 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, + 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, + 278, 278, 278, 278, 278, 278, 278, 279, 280, 280, + 281, 281, 281, 281, 281, 281, 281, 282, 283, 283, + 284, 284, 284, 284, 284, 284, 285, 286, 286, 287, + 287, 287, 287, 287, 287, 287, 288, 289, 289, 290, + 290, 290, 290, 290, 290, 290, 290, 291, 292, 293, + 294, 295, 296, 297, 297, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 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, @@ -1871,16 +1874,16 @@ static const yytype_uint16 yyr1[] = 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, 510, 511, 511, - 511, 511, 511, 511, 511, 511, 512, 513, 514, 515, - 516, 517, 518, 519, 520, 521, 521, 522, 522, 522, - 522, 522, 522, 522, 522, 522, 522, 522, 522, 523, + 504, 505, 506, 507, 508, 509, 510, 511, 512, 512, + 513, 513, 513, 513, 513, 513, 513, 513, 514, 515, + 516, 517, 518, 519, 520, 521, 522, 523, 523, 524, + 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, - 534, 535, 536, 536, 537, 538, 539, 540, 541, 542, - 543, 544, 544, 545, 545, 545, 545, 545, 545, 545, - 545, 545, 545, 546, 547, 548, 549, 550, 551, 552, - 553, 554, 555, 556, 557, 557, 558, 558, 558, 558, - 558, 559, 560, 561, 562, 563, 564 + 534, 535, 536, 537, 538, 538, 539, 540, 541, 542, + 543, 544, 545, 546, 546, 547, 547, 547, 547, 547, + 547, 547, 547, 547, 547, 548, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 559, 560, 560, + 560, 560, 560, 561, 562, 563, 564, 565, 566 }; /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ @@ -1911,8 +1914,8 @@ static const yytype_uint8 yyr2[] = 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, 2, 2, - 2, 1, 2, 0, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 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, 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, @@ -1924,25 +1927,25 @@ static const yytype_uint8 yyr2[] = 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, - 3, 4, 4, 4, 3, 3, 2, 2, 2, 2, - 2, 2, 3, 3, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 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, 2, + 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, + 2, 2, 2, 2, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 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, 2, 2, 2, 2, 2, 3 + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 3, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 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, 2, 2, 2, 2, 2, 3 }; @@ -2623,7 +2626,7 @@ yyreduce: { OUTYY(("\nP(server:)\n")); } -#line 2627 "util/configparser.c" /* yacc.c:1646 */ +#line 2630 "util/configparser.c" /* yacc.c:1646 */ break; case 207: @@ -2638,7 +2641,7 @@ yyreduce: } else yyerror("out of memory"); } -#line 2642 "util/configparser.c" /* yacc.c:1646 */ +#line 2645 "util/configparser.c" /* yacc.c:1646 */ break; case 217: @@ -2653,7 +2656,7 @@ yyreduce: } else yyerror("out of memory"); } -#line 2657 "util/configparser.c" /* yacc.c:1646 */ +#line 2660 "util/configparser.c" /* yacc.c:1646 */ break; case 226: @@ -2670,7 +2673,7 @@ yyreduce: } else yyerror("out of memory"); } -#line 2674 "util/configparser.c" /* yacc.c:1646 */ +#line 2677 "util/configparser.c" /* yacc.c:1646 */ break; case 236: @@ -2690,7 +2693,7 @@ yyreduce: } else yyerror("out of memory"); } -#line 2694 "util/configparser.c" /* yacc.c:1646 */ +#line 2697 "util/configparser.c" /* yacc.c:1646 */ break; case 247: @@ -2712,7 +2715,7 @@ yyreduce: } } -#line 2716 "util/configparser.c" /* yacc.c:1646 */ +#line 2719 "util/configparser.c" /* yacc.c:1646 */ break; case 248: @@ -2731,7 +2734,7 @@ yyreduce: cfg_parser->cfg->auths->rpz_action_override = (yyvsp[0].str); } } -#line 2735 "util/configparser.c" /* yacc.c:1646 */ +#line 2738 "util/configparser.c" /* yacc.c:1646 */ break; case 249: @@ -2744,7 +2747,7 @@ yyreduce: free(cfg_parser->cfg->auths->rpz_cname); cfg_parser->cfg->auths->rpz_cname = (yyvsp[0].str); } -#line 2748 "util/configparser.c" /* yacc.c:1646 */ +#line 2751 "util/configparser.c" /* yacc.c:1646 */ break; case 250: @@ -2756,11 +2759,24 @@ yyreduce: else cfg_parser->cfg->auths->rpz_log = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2760 "util/configparser.c" /* yacc.c:1646 */ +#line 2763 "util/configparser.c" /* yacc.c:1646 */ break; case 251: #line 409 "./util/configparser.y" /* yacc.c:1646 */ + { + OUTYY(("P(rpz_log_name:%s)\n", (yyvsp[0].str))); + if(cfg_parser->cfg->auths->rpz_log_name) + yyerror("RPZ log name, there can only be one " + "rpz-log-name per rpz"); + free(cfg_parser->cfg->auths->rpz_log_name); + cfg_parser->cfg->auths->rpz_log_name = (yyvsp[0].str); + } +#line 2776 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 252: +#line 420 "./util/configparser.y" /* yacc.c:1646 */ { struct config_auth* s; OUTYY(("\nP(rpz:)\n")); @@ -2776,11 +2792,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 2780 "util/configparser.c" /* yacc.c:1646 */ +#line 2796 "util/configparser.c" /* yacc.c:1646 */ break; - case 263: -#line 432 "./util/configparser.y" /* yacc.c:1646 */ + case 265: +#line 443 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_num_threads:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -2788,11 +2804,11 @@ yyreduce: else cfg_parser->cfg->num_threads = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2792 "util/configparser.c" /* yacc.c:1646 */ +#line 2808 "util/configparser.c" /* yacc.c:1646 */ break; - case 264: -#line 441 "./util/configparser.y" /* yacc.c:1646 */ + case 266: +#line 452 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_verbosity:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -2800,11 +2816,11 @@ yyreduce: else cfg_parser->cfg->verbosity = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2804 "util/configparser.c" /* yacc.c:1646 */ +#line 2820 "util/configparser.c" /* yacc.c:1646 */ break; - case 265: -#line 450 "./util/configparser.y" /* yacc.c:1646 */ + case 267: +#line 461 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_statistics_interval:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "") == 0 || strcmp((yyvsp[0].str), "0") == 0) @@ -2814,11 +2830,11 @@ yyreduce: else cfg_parser->cfg->stat_interval = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2818 "util/configparser.c" /* yacc.c:1646 */ +#line 2834 "util/configparser.c" /* yacc.c:1646 */ break; - case 266: -#line 461 "./util/configparser.y" /* yacc.c:1646 */ + case 268: +#line 472 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_statistics_cumulative:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2826,11 +2842,11 @@ yyreduce: else cfg_parser->cfg->stat_cumulative = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2830 "util/configparser.c" /* yacc.c:1646 */ +#line 2846 "util/configparser.c" /* yacc.c:1646 */ break; - case 267: -#line 470 "./util/configparser.y" /* yacc.c:1646 */ + case 269: +#line 481 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_extended_statistics:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2838,11 +2854,11 @@ yyreduce: else cfg_parser->cfg->stat_extended = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2842 "util/configparser.c" /* yacc.c:1646 */ +#line 2858 "util/configparser.c" /* yacc.c:1646 */ break; - case 268: -#line 479 "./util/configparser.y" /* yacc.c:1646 */ + case 270: +#line 490 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_shm_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2850,11 +2866,11 @@ yyreduce: else cfg_parser->cfg->shm_enable = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2854 "util/configparser.c" /* yacc.c:1646 */ +#line 2870 "util/configparser.c" /* yacc.c:1646 */ break; - case 269: -#line 488 "./util/configparser.y" /* yacc.c:1646 */ + case 271: +#line 499 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_shm_key:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "") == 0 || strcmp((yyvsp[0].str), "0") == 0) @@ -2864,11 +2880,11 @@ yyreduce: else cfg_parser->cfg->shm_key = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2868 "util/configparser.c" /* yacc.c:1646 */ +#line 2884 "util/configparser.c" /* yacc.c:1646 */ break; - case 270: -#line 499 "./util/configparser.y" /* yacc.c:1646 */ + case 272: +#line 510 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -2876,11 +2892,11 @@ yyreduce: else cfg_parser->cfg->port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2880 "util/configparser.c" /* yacc.c:1646 */ +#line 2896 "util/configparser.c" /* yacc.c:1646 */ break; - case 271: -#line 508 "./util/configparser.y" /* yacc.c:1646 */ + case 273: +#line 519 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(server_send_client_subnet:%s)\n", (yyvsp[0].str))); @@ -2890,11 +2906,11 @@ yyreduce: OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); #endif } -#line 2894 "util/configparser.c" /* yacc.c:1646 */ +#line 2910 "util/configparser.c" /* yacc.c:1646 */ break; - case 272: -#line 519 "./util/configparser.y" /* yacc.c:1646 */ + case 274: +#line 530 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(server_client_subnet_zone:%s)\n", (yyvsp[0].str))); @@ -2905,11 +2921,11 @@ yyreduce: OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); #endif } -#line 2909 "util/configparser.c" /* yacc.c:1646 */ +#line 2925 "util/configparser.c" /* yacc.c:1646 */ break; - case 273: -#line 532 "./util/configparser.y" /* yacc.c:1646 */ + case 275: +#line 543 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(server_client_subnet_always_forward:%s)\n", (yyvsp[0].str))); @@ -2923,11 +2939,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 2927 "util/configparser.c" /* yacc.c:1646 */ +#line 2943 "util/configparser.c" /* yacc.c:1646 */ break; - case 274: -#line 547 "./util/configparser.y" /* yacc.c:1646 */ + case 276: +#line 558 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(client_subnet_opcode:%s)\n", (yyvsp[0].str))); @@ -2937,11 +2953,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 2941 "util/configparser.c" /* yacc.c:1646 */ +#line 2957 "util/configparser.c" /* yacc.c:1646 */ break; - case 275: -#line 558 "./util/configparser.y" /* yacc.c:1646 */ + case 277: +#line 569 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(max_client_subnet_ipv4:%s)\n", (yyvsp[0].str))); @@ -2957,11 +2973,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 2961 "util/configparser.c" /* yacc.c:1646 */ +#line 2977 "util/configparser.c" /* yacc.c:1646 */ break; - case 276: -#line 575 "./util/configparser.y" /* yacc.c:1646 */ + case 278: +#line 586 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(max_client_subnet_ipv6:%s)\n", (yyvsp[0].str))); @@ -2977,11 +2993,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 2981 "util/configparser.c" /* yacc.c:1646 */ +#line 2997 "util/configparser.c" /* yacc.c:1646 */ break; - case 277: -#line 592 "./util/configparser.y" /* yacc.c:1646 */ + case 279: +#line 603 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(min_client_subnet_ipv4:%s)\n", (yyvsp[0].str))); @@ -2997,11 +3013,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3001 "util/configparser.c" /* yacc.c:1646 */ +#line 3017 "util/configparser.c" /* yacc.c:1646 */ break; - case 278: -#line 609 "./util/configparser.y" /* yacc.c:1646 */ + case 280: +#line 620 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(min_client_subnet_ipv6:%s)\n", (yyvsp[0].str))); @@ -3017,11 +3033,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3021 "util/configparser.c" /* yacc.c:1646 */ +#line 3037 "util/configparser.c" /* yacc.c:1646 */ break; - case 279: -#line 626 "./util/configparser.y" /* yacc.c:1646 */ + case 281: +#line 637 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(max_ecs_tree_size_ipv4:%s)\n", (yyvsp[0].str))); @@ -3035,11 +3051,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3039 "util/configparser.c" /* yacc.c:1646 */ +#line 3055 "util/configparser.c" /* yacc.c:1646 */ break; - case 280: -#line 641 "./util/configparser.y" /* yacc.c:1646 */ + case 282: +#line 652 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(max_ecs_tree_size_ipv6:%s)\n", (yyvsp[0].str))); @@ -3053,11 +3069,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3057 "util/configparser.c" /* yacc.c:1646 */ +#line 3073 "util/configparser.c" /* yacc.c:1646 */ break; - case 281: -#line 656 "./util/configparser.y" /* yacc.c:1646 */ + case 283: +#line 667 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_interface:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->num_ifs == 0) @@ -3069,11 +3085,11 @@ yyreduce: else cfg_parser->cfg->ifs[cfg_parser->cfg->num_ifs++] = (yyvsp[0].str); } -#line 3073 "util/configparser.c" /* yacc.c:1646 */ +#line 3089 "util/configparser.c" /* yacc.c:1646 */ break; - case 282: -#line 669 "./util/configparser.y" /* yacc.c:1646 */ + case 284: +#line 680 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_interface:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->num_out_ifs == 0) @@ -3087,11 +3103,11 @@ yyreduce: cfg_parser->cfg->out_ifs[ cfg_parser->cfg->num_out_ifs++] = (yyvsp[0].str); } -#line 3091 "util/configparser.c" /* yacc.c:1646 */ +#line 3107 "util/configparser.c" /* yacc.c:1646 */ break; - case 283: -#line 684 "./util/configparser.y" /* yacc.c:1646 */ + case 285: +#line 695 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_range:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3099,11 +3115,11 @@ yyreduce: else cfg_parser->cfg->outgoing_num_ports = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3103 "util/configparser.c" /* yacc.c:1646 */ +#line 3119 "util/configparser.c" /* yacc.c:1646 */ break; - case 284: -#line 693 "./util/configparser.y" /* yacc.c:1646 */ + case 286: +#line 704 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_port_permit:%s)\n", (yyvsp[0].str))); if(!cfg_mark_ports((yyvsp[0].str), 1, @@ -3111,11 +3127,11 @@ yyreduce: yyerror("port number or range (\"low-high\") expected"); free((yyvsp[0].str)); } -#line 3115 "util/configparser.c" /* yacc.c:1646 */ +#line 3131 "util/configparser.c" /* yacc.c:1646 */ break; - case 285: -#line 702 "./util/configparser.y" /* yacc.c:1646 */ + case 287: +#line 713 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_port_avoid:%s)\n", (yyvsp[0].str))); if(!cfg_mark_ports((yyvsp[0].str), 0, @@ -3123,11 +3139,11 @@ yyreduce: yyerror("port number or range (\"low-high\") expected"); free((yyvsp[0].str)); } -#line 3127 "util/configparser.c" /* yacc.c:1646 */ +#line 3143 "util/configparser.c" /* yacc.c:1646 */ break; - case 286: -#line 711 "./util/configparser.y" /* yacc.c:1646 */ + case 288: +#line 722 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_num_tcp:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3135,11 +3151,11 @@ yyreduce: else cfg_parser->cfg->outgoing_num_tcp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3139 "util/configparser.c" /* yacc.c:1646 */ +#line 3155 "util/configparser.c" /* yacc.c:1646 */ break; - case 287: -#line 720 "./util/configparser.y" /* yacc.c:1646 */ + case 289: +#line 731 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_incoming_num_tcp:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3147,11 +3163,11 @@ yyreduce: else cfg_parser->cfg->incoming_num_tcp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3151 "util/configparser.c" /* yacc.c:1646 */ +#line 3167 "util/configparser.c" /* yacc.c:1646 */ break; - case 288: -#line 729 "./util/configparser.y" /* yacc.c:1646 */ + case 290: +#line 740 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_interface_automatic:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3159,11 +3175,11 @@ yyreduce: else cfg_parser->cfg->if_automatic = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3163 "util/configparser.c" /* yacc.c:1646 */ +#line 3179 "util/configparser.c" /* yacc.c:1646 */ break; - case 289: -#line 738 "./util/configparser.y" /* yacc.c:1646 */ + case 291: +#line 749 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_ip4:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3171,11 +3187,11 @@ yyreduce: else cfg_parser->cfg->do_ip4 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3175 "util/configparser.c" /* yacc.c:1646 */ +#line 3191 "util/configparser.c" /* yacc.c:1646 */ break; - case 290: -#line 747 "./util/configparser.y" /* yacc.c:1646 */ + case 292: +#line 758 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_ip6:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3183,11 +3199,11 @@ yyreduce: else cfg_parser->cfg->do_ip6 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3187 "util/configparser.c" /* yacc.c:1646 */ +#line 3203 "util/configparser.c" /* yacc.c:1646 */ break; - case 291: -#line 756 "./util/configparser.y" /* yacc.c:1646 */ + case 293: +#line 767 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_udp:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3195,11 +3211,11 @@ yyreduce: else cfg_parser->cfg->do_udp = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3199 "util/configparser.c" /* yacc.c:1646 */ +#line 3215 "util/configparser.c" /* yacc.c:1646 */ break; - case 292: -#line 765 "./util/configparser.y" /* yacc.c:1646 */ + case 294: +#line 776 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_tcp:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3207,11 +3223,11 @@ yyreduce: else cfg_parser->cfg->do_tcp = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3211 "util/configparser.c" /* yacc.c:1646 */ +#line 3227 "util/configparser.c" /* yacc.c:1646 */ break; - case 293: -#line 774 "./util/configparser.y" /* yacc.c:1646 */ + case 295: +#line 785 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_prefer_ip6:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3219,11 +3235,11 @@ yyreduce: else cfg_parser->cfg->prefer_ip6 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3223 "util/configparser.c" /* yacc.c:1646 */ +#line 3239 "util/configparser.c" /* yacc.c:1646 */ break; - case 294: -#line 783 "./util/configparser.y" /* yacc.c:1646 */ + case 296: +#line 794 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tcp_mss:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3231,11 +3247,11 @@ yyreduce: else cfg_parser->cfg->tcp_mss = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3235 "util/configparser.c" /* yacc.c:1646 */ +#line 3251 "util/configparser.c" /* yacc.c:1646 */ break; - case 295: -#line 792 "./util/configparser.y" /* yacc.c:1646 */ + case 297: +#line 803 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_tcp_mss:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3243,11 +3259,11 @@ yyreduce: else cfg_parser->cfg->outgoing_tcp_mss = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3247 "util/configparser.c" /* yacc.c:1646 */ +#line 3263 "util/configparser.c" /* yacc.c:1646 */ break; - case 296: -#line 801 "./util/configparser.y" /* yacc.c:1646 */ + case 298: +#line 812 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tcp_idle_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3259,11 +3275,11 @@ yyreduce: else cfg_parser->cfg->tcp_idle_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3263 "util/configparser.c" /* yacc.c:1646 */ +#line 3279 "util/configparser.c" /* yacc.c:1646 */ break; - case 297: -#line 814 "./util/configparser.y" /* yacc.c:1646 */ + case 299: +#line 825 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tcp_keepalive:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3271,11 +3287,11 @@ yyreduce: else cfg_parser->cfg->do_tcp_keepalive = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3275 "util/configparser.c" /* yacc.c:1646 */ +#line 3291 "util/configparser.c" /* yacc.c:1646 */ break; - case 298: -#line 823 "./util/configparser.y" /* yacc.c:1646 */ + case 300: +#line 834 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tcp_keepalive_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3287,11 +3303,11 @@ yyreduce: else cfg_parser->cfg->tcp_keepalive_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3291 "util/configparser.c" /* yacc.c:1646 */ +#line 3307 "util/configparser.c" /* yacc.c:1646 */ break; - case 299: -#line 836 "./util/configparser.y" /* yacc.c:1646 */ + case 301: +#line 847 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tcp_upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3299,11 +3315,11 @@ yyreduce: else cfg_parser->cfg->tcp_upstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3303 "util/configparser.c" /* yacc.c:1646 */ +#line 3319 "util/configparser.c" /* yacc.c:1646 */ break; - case 300: -#line 845 "./util/configparser.y" /* yacc.c:1646 */ + case 302: +#line 856 "./util/configparser.y" /* yacc.c:1646 */ { 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) @@ -3311,11 +3327,11 @@ yyreduce: else cfg_parser->cfg->udp_upstream_without_downstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3315 "util/configparser.c" /* yacc.c:1646 */ +#line 3331 "util/configparser.c" /* yacc.c:1646 */ break; - case 301: -#line 854 "./util/configparser.y" /* yacc.c:1646 */ + case 303: +#line 865 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ssl_upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3323,31 +3339,31 @@ yyreduce: else cfg_parser->cfg->ssl_upstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3327 "util/configparser.c" /* yacc.c:1646 */ +#line 3343 "util/configparser.c" /* yacc.c:1646 */ break; - case 302: -#line 863 "./util/configparser.y" /* yacc.c:1646 */ + case 304: +#line 874 "./util/configparser.y" /* yacc.c:1646 */ { 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 3337 "util/configparser.c" /* yacc.c:1646 */ +#line 3353 "util/configparser.c" /* yacc.c:1646 */ break; - case 303: -#line 870 "./util/configparser.y" /* yacc.c:1646 */ + case 305: +#line 881 "./util/configparser.y" /* yacc.c:1646 */ { 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 3347 "util/configparser.c" /* yacc.c:1646 */ +#line 3363 "util/configparser.c" /* yacc.c:1646 */ break; - case 304: -#line 877 "./util/configparser.y" /* yacc.c:1646 */ + case 306: +#line 888 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ssl_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3355,21 +3371,21 @@ yyreduce: else cfg_parser->cfg->ssl_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3359 "util/configparser.c" /* yacc.c:1646 */ +#line 3375 "util/configparser.c" /* yacc.c:1646 */ break; - case 305: -#line 886 "./util/configparser.y" /* yacc.c:1646 */ + case 307: +#line 897 "./util/configparser.y" /* yacc.c:1646 */ { 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 3369 "util/configparser.c" /* yacc.c:1646 */ +#line 3385 "util/configparser.c" /* yacc.c:1646 */ break; - case 306: -#line 893 "./util/configparser.y" /* yacc.c:1646 */ + case 308: +#line 904 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tls_win_cert:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3377,53 +3393,53 @@ yyreduce: else cfg_parser->cfg->tls_win_cert = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3381 "util/configparser.c" /* yacc.c:1646 */ +#line 3397 "util/configparser.c" /* yacc.c:1646 */ break; - case 307: -#line 902 "./util/configparser.y" /* yacc.c:1646 */ + case 309: +#line 913 "./util/configparser.y" /* yacc.c:1646 */ { 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 3392 "util/configparser.c" /* yacc.c:1646 */ +#line 3408 "util/configparser.c" /* yacc.c:1646 */ break; - case 308: -#line 910 "./util/configparser.y" /* yacc.c:1646 */ + case 310: +#line 921 "./util/configparser.y" /* yacc.c:1646 */ { 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 3402 "util/configparser.c" /* yacc.c:1646 */ +#line 3418 "util/configparser.c" /* yacc.c:1646 */ break; - case 309: -#line 917 "./util/configparser.y" /* yacc.c:1646 */ + case 311: +#line 928 "./util/configparser.y" /* yacc.c:1646 */ { 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 3412 "util/configparser.c" /* yacc.c:1646 */ +#line 3428 "util/configparser.c" /* yacc.c:1646 */ break; - case 310: -#line 924 "./util/configparser.y" /* yacc.c:1646 */ + case 312: +#line 935 "./util/configparser.y" /* yacc.c:1646 */ { 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 3423 "util/configparser.c" /* yacc.c:1646 */ +#line 3439 "util/configparser.c" /* yacc.c:1646 */ break; - case 311: -#line 932 "./util/configparser.y" /* yacc.c:1646 */ + case 313: +#line 943 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_use_systemd:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3431,11 +3447,11 @@ yyreduce: else cfg_parser->cfg->use_systemd = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3435 "util/configparser.c" /* yacc.c:1646 */ +#line 3451 "util/configparser.c" /* yacc.c:1646 */ break; - case 312: -#line 941 "./util/configparser.y" /* yacc.c:1646 */ + case 314: +#line 952 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_daemonize:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3443,11 +3459,11 @@ yyreduce: else cfg_parser->cfg->do_daemonize = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3447 "util/configparser.c" /* yacc.c:1646 */ +#line 3463 "util/configparser.c" /* yacc.c:1646 */ break; - case 313: -#line 950 "./util/configparser.y" /* yacc.c:1646 */ + case 315: +#line 961 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_use_syslog:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3460,11 +3476,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3464 "util/configparser.c" /* yacc.c:1646 */ +#line 3480 "util/configparser.c" /* yacc.c:1646 */ break; - case 314: -#line 964 "./util/configparser.y" /* yacc.c:1646 */ + case 316: +#line 975 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_time_ascii:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3472,11 +3488,11 @@ yyreduce: else cfg_parser->cfg->log_time_ascii = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3476 "util/configparser.c" /* yacc.c:1646 */ +#line 3492 "util/configparser.c" /* yacc.c:1646 */ break; - case 315: -#line 973 "./util/configparser.y" /* yacc.c:1646 */ + case 317: +#line 984 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_queries:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3484,11 +3500,11 @@ yyreduce: else cfg_parser->cfg->log_queries = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3488 "util/configparser.c" /* yacc.c:1646 */ +#line 3504 "util/configparser.c" /* yacc.c:1646 */ break; - case 316: -#line 982 "./util/configparser.y" /* yacc.c:1646 */ + case 318: +#line 993 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_replies:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3496,11 +3512,11 @@ yyreduce: else cfg_parser->cfg->log_replies = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3500 "util/configparser.c" /* yacc.c:1646 */ +#line 3516 "util/configparser.c" /* yacc.c:1646 */ break; - case 317: -#line 991 "./util/configparser.y" /* yacc.c:1646 */ + case 319: +#line 1002 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_tag_queryreply:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3508,11 +3524,11 @@ yyreduce: else cfg_parser->cfg->log_tag_queryreply = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3512 "util/configparser.c" /* yacc.c:1646 */ +#line 3528 "util/configparser.c" /* yacc.c:1646 */ break; - case 318: -#line 1000 "./util/configparser.y" /* yacc.c:1646 */ + case 320: +#line 1011 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_servfail:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3520,11 +3536,11 @@ yyreduce: else cfg_parser->cfg->log_servfail = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3524 "util/configparser.c" /* yacc.c:1646 */ +#line 3540 "util/configparser.c" /* yacc.c:1646 */ break; - case 319: -#line 1009 "./util/configparser.y" /* yacc.c:1646 */ + case 321: +#line 1020 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_local_actions:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3532,31 +3548,31 @@ yyreduce: else cfg_parser->cfg->log_local_actions = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3536 "util/configparser.c" /* yacc.c:1646 */ +#line 3552 "util/configparser.c" /* yacc.c:1646 */ break; - case 320: -#line 1018 "./util/configparser.y" /* yacc.c:1646 */ + case 322: +#line 1029 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_chroot:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->chrootdir); cfg_parser->cfg->chrootdir = (yyvsp[0].str); } -#line 3546 "util/configparser.c" /* yacc.c:1646 */ +#line 3562 "util/configparser.c" /* yacc.c:1646 */ break; - case 321: -#line 1025 "./util/configparser.y" /* yacc.c:1646 */ + case 323: +#line 1036 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_username:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->username); cfg_parser->cfg->username = (yyvsp[0].str); } -#line 3556 "util/configparser.c" /* yacc.c:1646 */ +#line 3572 "util/configparser.c" /* yacc.c:1646 */ break; - case 322: -#line 1032 "./util/configparser.y" /* yacc.c:1646 */ + case 324: +#line 1043 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_directory:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->directory); @@ -3581,105 +3597,105 @@ yyreduce: } } } -#line 3585 "util/configparser.c" /* yacc.c:1646 */ +#line 3601 "util/configparser.c" /* yacc.c:1646 */ break; - case 323: -#line 1058 "./util/configparser.y" /* yacc.c:1646 */ + case 325: +#line 1069 "./util/configparser.y" /* yacc.c:1646 */ { 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 3596 "util/configparser.c" /* yacc.c:1646 */ +#line 3612 "util/configparser.c" /* yacc.c:1646 */ break; - case 324: -#line 1066 "./util/configparser.y" /* yacc.c:1646 */ + case 326: +#line 1077 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_pidfile:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->pidfile); cfg_parser->cfg->pidfile = (yyvsp[0].str); } -#line 3606 "util/configparser.c" /* yacc.c:1646 */ +#line 3622 "util/configparser.c" /* yacc.c:1646 */ break; - case 325: -#line 1073 "./util/configparser.y" /* yacc.c:1646 */ + case 327: +#line 1084 "./util/configparser.y" /* yacc.c:1646 */ { 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 3616 "util/configparser.c" /* yacc.c:1646 */ +#line 3632 "util/configparser.c" /* yacc.c:1646 */ break; - case 326: -#line 1080 "./util/configparser.y" /* yacc.c:1646 */ + case 328: +#line 1091 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_dlv_anchor_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dlv_anchor_file); cfg_parser->cfg->dlv_anchor_file = (yyvsp[0].str); } -#line 3626 "util/configparser.c" /* yacc.c:1646 */ +#line 3642 "util/configparser.c" /* yacc.c:1646 */ break; - case 327: -#line 1087 "./util/configparser.y" /* yacc.c:1646 */ + case 329: +#line 1098 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_dlv_anchor:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->dlv_anchor_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3636 "util/configparser.c" /* yacc.c:1646 */ +#line 3652 "util/configparser.c" /* yacc.c:1646 */ break; - case 328: -#line 1094 "./util/configparser.y" /* yacc.c:1646 */ + case 330: +#line 1105 "./util/configparser.y" /* yacc.c:1646 */ { 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 3647 "util/configparser.c" /* yacc.c:1646 */ +#line 3663 "util/configparser.c" /* yacc.c:1646 */ break; - case 329: -#line 1102 "./util/configparser.y" /* yacc.c:1646 */ + case 331: +#line 1113 "./util/configparser.y" /* yacc.c:1646 */ { 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 3658 "util/configparser.c" /* yacc.c:1646 */ +#line 3674 "util/configparser.c" /* yacc.c:1646 */ break; - case 330: -#line 1110 "./util/configparser.y" /* yacc.c:1646 */ + case 332: +#line 1121 "./util/configparser.y" /* yacc.c:1646 */ { 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 3669 "util/configparser.c" /* yacc.c:1646 */ +#line 3685 "util/configparser.c" /* yacc.c:1646 */ break; - case 331: -#line 1118 "./util/configparser.y" /* yacc.c:1646 */ + case 333: +#line 1129 "./util/configparser.y" /* yacc.c:1646 */ { 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 3679 "util/configparser.c" /* yacc.c:1646 */ +#line 3695 "util/configparser.c" /* yacc.c:1646 */ break; - case 332: -#line 1125 "./util/configparser.y" /* yacc.c:1646 */ + case 334: +#line 1136 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_trust_anchor_signaling:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3689,11 +3705,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3693 "util/configparser.c" /* yacc.c:1646 */ +#line 3709 "util/configparser.c" /* yacc.c:1646 */ break; - case 333: -#line 1136 "./util/configparser.y" /* yacc.c:1646 */ + case 335: +#line 1147 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_root_key_sentinel:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3703,21 +3719,21 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3707 "util/configparser.c" /* yacc.c:1646 */ +#line 3723 "util/configparser.c" /* yacc.c:1646 */ break; - case 334: -#line 1147 "./util/configparser.y" /* yacc.c:1646 */ + case 336: +#line 1158 "./util/configparser.y" /* yacc.c:1646 */ { 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 3717 "util/configparser.c" /* yacc.c:1646 */ +#line 3733 "util/configparser.c" /* yacc.c:1646 */ break; - case 335: -#line 1154 "./util/configparser.y" /* yacc.c:1646 */ + case 337: +#line 1165 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_hide_identity:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3725,11 +3741,11 @@ yyreduce: else cfg_parser->cfg->hide_identity = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3729 "util/configparser.c" /* yacc.c:1646 */ +#line 3745 "util/configparser.c" /* yacc.c:1646 */ break; - case 336: -#line 1163 "./util/configparser.y" /* yacc.c:1646 */ + case 338: +#line 1174 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_hide_version:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3737,11 +3753,11 @@ yyreduce: else cfg_parser->cfg->hide_version = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3741 "util/configparser.c" /* yacc.c:1646 */ +#line 3757 "util/configparser.c" /* yacc.c:1646 */ break; - case 337: -#line 1172 "./util/configparser.y" /* yacc.c:1646 */ + case 339: +#line 1183 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_hide_trustanchor:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3749,53 +3765,53 @@ yyreduce: else cfg_parser->cfg->hide_trustanchor = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3753 "util/configparser.c" /* yacc.c:1646 */ +#line 3769 "util/configparser.c" /* yacc.c:1646 */ break; - case 338: -#line 1181 "./util/configparser.y" /* yacc.c:1646 */ + case 340: +#line 1192 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_identity:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->identity); cfg_parser->cfg->identity = (yyvsp[0].str); } -#line 3763 "util/configparser.c" /* yacc.c:1646 */ +#line 3779 "util/configparser.c" /* yacc.c:1646 */ break; - case 339: -#line 1188 "./util/configparser.y" /* yacc.c:1646 */ + case 341: +#line 1199 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_version:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->version); cfg_parser->cfg->version = (yyvsp[0].str); } -#line 3773 "util/configparser.c" /* yacc.c:1646 */ +#line 3789 "util/configparser.c" /* yacc.c:1646 */ break; - case 340: -#line 1195 "./util/configparser.y" /* yacc.c:1646 */ + case 342: +#line 1206 "./util/configparser.y" /* yacc.c:1646 */ { 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 3784 "util/configparser.c" /* yacc.c:1646 */ +#line 3800 "util/configparser.c" /* yacc.c:1646 */ break; - case 341: -#line 1203 "./util/configparser.y" /* yacc.c:1646 */ + case 343: +#line 1214 "./util/configparser.y" /* yacc.c:1646 */ { 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 3795 "util/configparser.c" /* yacc.c:1646 */ +#line 3811 "util/configparser.c" /* yacc.c:1646 */ break; - case 342: -#line 1211 "./util/configparser.y" /* yacc.c:1646 */ + case 344: +#line 1222 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_so_reuseport:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3804,11 +3820,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3808 "util/configparser.c" /* yacc.c:1646 */ +#line 3824 "util/configparser.c" /* yacc.c:1646 */ break; - case 343: -#line 1221 "./util/configparser.y" /* yacc.c:1646 */ + case 345: +#line 1232 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_transparent:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3817,11 +3833,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3821 "util/configparser.c" /* yacc.c:1646 */ +#line 3837 "util/configparser.c" /* yacc.c:1646 */ break; - case 344: -#line 1231 "./util/configparser.y" /* yacc.c:1646 */ + case 346: +#line 1242 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_freebind:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3830,22 +3846,22 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3834 "util/configparser.c" /* yacc.c:1646 */ +#line 3850 "util/configparser.c" /* yacc.c:1646 */ break; - case 345: -#line 1241 "./util/configparser.y" /* yacc.c:1646 */ + case 347: +#line 1252 "./util/configparser.y" /* yacc.c:1646 */ { 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 3845 "util/configparser.c" /* yacc.c:1646 */ +#line 3861 "util/configparser.c" /* yacc.c:1646 */ break; - case 346: -#line 1249 "./util/configparser.y" /* yacc.c:1646 */ + case 348: +#line 1260 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_edns_buffer_size:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3857,11 +3873,11 @@ yyreduce: else cfg_parser->cfg->edns_buffer_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3861 "util/configparser.c" /* yacc.c:1646 */ +#line 3877 "util/configparser.c" /* yacc.c:1646 */ break; - case 347: -#line 1262 "./util/configparser.y" /* yacc.c:1646 */ + case 349: +#line 1273 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_msg_buffer_size:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3871,22 +3887,22 @@ yyreduce: else cfg_parser->cfg->msg_buffer_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3875 "util/configparser.c" /* yacc.c:1646 */ +#line 3891 "util/configparser.c" /* yacc.c:1646 */ break; - case 348: -#line 1273 "./util/configparser.y" /* yacc.c:1646 */ + case 350: +#line 1284 "./util/configparser.y" /* yacc.c:1646 */ { 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 3886 "util/configparser.c" /* yacc.c:1646 */ +#line 3902 "util/configparser.c" /* yacc.c:1646 */ break; - case 349: -#line 1281 "./util/configparser.y" /* yacc.c:1646 */ + case 351: +#line 1292 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_msg_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3898,11 +3914,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 3902 "util/configparser.c" /* yacc.c:1646 */ +#line 3918 "util/configparser.c" /* yacc.c:1646 */ break; - case 350: -#line 1294 "./util/configparser.y" /* yacc.c:1646 */ + case 352: +#line 1305 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_num_queries_per_thread:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3910,11 +3926,11 @@ yyreduce: else cfg_parser->cfg->num_queries_per_thread = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3914 "util/configparser.c" /* yacc.c:1646 */ +#line 3930 "util/configparser.c" /* yacc.c:1646 */ break; - case 351: -#line 1303 "./util/configparser.y" /* yacc.c:1646 */ + case 353: +#line 1314 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_jostle_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3922,11 +3938,11 @@ yyreduce: else cfg_parser->cfg->jostle_time = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3926 "util/configparser.c" /* yacc.c:1646 */ +#line 3942 "util/configparser.c" /* yacc.c:1646 */ break; - case 352: -#line 1312 "./util/configparser.y" /* yacc.c:1646 */ + case 354: +#line 1323 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_delay_close:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3934,11 +3950,11 @@ yyreduce: else cfg_parser->cfg->delay_close = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3938 "util/configparser.c" /* yacc.c:1646 */ +#line 3954 "util/configparser.c" /* yacc.c:1646 */ break; - case 353: -#line 1321 "./util/configparser.y" /* yacc.c:1646 */ + case 355: +#line 1332 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_unblock_lan_zones:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3947,11 +3963,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3951 "util/configparser.c" /* yacc.c:1646 */ +#line 3967 "util/configparser.c" /* yacc.c:1646 */ break; - case 354: -#line 1331 "./util/configparser.y" /* yacc.c:1646 */ + case 356: +#line 1342 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_insecure_lan_zones:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3960,22 +3976,22 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3964 "util/configparser.c" /* yacc.c:1646 */ +#line 3980 "util/configparser.c" /* yacc.c:1646 */ break; - case 355: -#line 1341 "./util/configparser.y" /* yacc.c:1646 */ + case 357: +#line 1352 "./util/configparser.y" /* yacc.c:1646 */ { 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 3975 "util/configparser.c" /* yacc.c:1646 */ +#line 3991 "util/configparser.c" /* yacc.c:1646 */ break; - case 356: -#line 1349 "./util/configparser.y" /* yacc.c:1646 */ + case 358: +#line 1360 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_rrset_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3987,11 +4003,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 3991 "util/configparser.c" /* yacc.c:1646 */ +#line 4007 "util/configparser.c" /* yacc.c:1646 */ break; - case 357: -#line 1362 "./util/configparser.y" /* yacc.c:1646 */ + case 359: +#line 1373 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_host_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3999,22 +4015,22 @@ yyreduce: else cfg_parser->cfg->host_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4003 "util/configparser.c" /* yacc.c:1646 */ +#line 4019 "util/configparser.c" /* yacc.c:1646 */ break; - case 358: -#line 1371 "./util/configparser.y" /* yacc.c:1646 */ + case 360: +#line 1382 "./util/configparser.y" /* yacc.c:1646 */ { 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 4014 "util/configparser.c" /* yacc.c:1646 */ +#line 4030 "util/configparser.c" /* yacc.c:1646 */ break; - case 359: -#line 1379 "./util/configparser.y" /* yacc.c:1646 */ + case 361: +#line 1390 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_cache_numhosts:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4022,22 +4038,22 @@ yyreduce: else cfg_parser->cfg->infra_cache_numhosts = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4026 "util/configparser.c" /* yacc.c:1646 */ +#line 4042 "util/configparser.c" /* yacc.c:1646 */ break; - case 360: -#line 1388 "./util/configparser.y" /* yacc.c:1646 */ + case 362: +#line 1399 "./util/configparser.y" /* yacc.c:1646 */ { 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 4037 "util/configparser.c" /* yacc.c:1646 */ +#line 4053 "util/configparser.c" /* yacc.c:1646 */ break; - case 361: -#line 1396 "./util/configparser.y" /* yacc.c:1646 */ + case 363: +#line 1407 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4049,11 +4065,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4053 "util/configparser.c" /* yacc.c:1646 */ +#line 4069 "util/configparser.c" /* yacc.c:1646 */ break; - case 362: -#line 1409 "./util/configparser.y" /* yacc.c:1646 */ + case 364: +#line 1420 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_cache_min_rtt:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4061,21 +4077,21 @@ yyreduce: else cfg_parser->cfg->infra_cache_min_rtt = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4065 "util/configparser.c" /* yacc.c:1646 */ +#line 4081 "util/configparser.c" /* yacc.c:1646 */ break; - case 363: -#line 1418 "./util/configparser.y" /* yacc.c:1646 */ + case 365: +#line 1429 "./util/configparser.y" /* yacc.c:1646 */ { 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 4075 "util/configparser.c" /* yacc.c:1646 */ +#line 4091 "util/configparser.c" /* yacc.c:1646 */ break; - case 364: -#line 1425 "./util/configparser.y" /* yacc.c:1646 */ + case 366: +#line 1436 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_short_bufsize:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4084,11 +4100,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4088 "util/configparser.c" /* yacc.c:1646 */ +#line 4104 "util/configparser.c" /* yacc.c:1646 */ break; - case 365: -#line 1435 "./util/configparser.y" /* yacc.c:1646 */ + case 367: +#line 1446 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_large_queries:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4097,11 +4113,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4101 "util/configparser.c" /* yacc.c:1646 */ +#line 4117 "util/configparser.c" /* yacc.c:1646 */ break; - case 366: -#line 1445 "./util/configparser.y" /* yacc.c:1646 */ + case 368: +#line 1456 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_glue:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4110,11 +4126,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4114 "util/configparser.c" /* yacc.c:1646 */ +#line 4130 "util/configparser.c" /* yacc.c:1646 */ break; - case 367: -#line 1455 "./util/configparser.y" /* yacc.c:1646 */ + case 369: +#line 1466 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_dnssec_stripped:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4123,11 +4139,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4127 "util/configparser.c" /* yacc.c:1646 */ +#line 4143 "util/configparser.c" /* yacc.c:1646 */ break; - case 368: -#line 1465 "./util/configparser.y" /* yacc.c:1646 */ + case 370: +#line 1476 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_below_nxdomain:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4136,11 +4152,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4140 "util/configparser.c" /* yacc.c:1646 */ +#line 4156 "util/configparser.c" /* yacc.c:1646 */ break; - case 369: -#line 1475 "./util/configparser.y" /* yacc.c:1646 */ + case 371: +#line 1486 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_referral_path:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4149,11 +4165,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4153 "util/configparser.c" /* yacc.c:1646 */ +#line 4169 "util/configparser.c" /* yacc.c:1646 */ break; - case 370: -#line 1485 "./util/configparser.y" /* yacc.c:1646 */ + case 372: +#line 1496 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_algo_downgrade:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4162,11 +4178,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4166 "util/configparser.c" /* yacc.c:1646 */ +#line 4182 "util/configparser.c" /* yacc.c:1646 */ break; - case 371: -#line 1495 "./util/configparser.y" /* yacc.c:1646 */ + case 373: +#line 1506 "./util/configparser.y" /* yacc.c:1646 */ { 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) @@ -4175,41 +4191,41 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4179 "util/configparser.c" /* yacc.c:1646 */ +#line 4195 "util/configparser.c" /* yacc.c:1646 */ break; - case 372: -#line 1505 "./util/configparser.y" /* yacc.c:1646 */ + case 374: +#line 1516 "./util/configparser.y" /* yacc.c:1646 */ { 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 4189 "util/configparser.c" /* yacc.c:1646 */ +#line 4205 "util/configparser.c" /* yacc.c:1646 */ break; - case 373: -#line 1512 "./util/configparser.y" /* yacc.c:1646 */ + case 375: +#line 1523 "./util/configparser.y" /* yacc.c:1646 */ { 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 4199 "util/configparser.c" /* yacc.c:1646 */ +#line 4215 "util/configparser.c" /* yacc.c:1646 */ break; - case 374: -#line 1519 "./util/configparser.y" /* yacc.c:1646 */ + case 376: +#line 1530 "./util/configparser.y" /* yacc.c:1646 */ { 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 4209 "util/configparser.c" /* yacc.c:1646 */ +#line 4225 "util/configparser.c" /* yacc.c:1646 */ break; - case 375: -#line 1526 "./util/configparser.y" /* yacc.c:1646 */ + case 377: +#line 1537 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_prefetch:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4217,11 +4233,11 @@ yyreduce: else cfg_parser->cfg->prefetch = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4221 "util/configparser.c" /* yacc.c:1646 */ +#line 4237 "util/configparser.c" /* yacc.c:1646 */ break; - case 376: -#line 1535 "./util/configparser.y" /* yacc.c:1646 */ + case 378: +#line 1546 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_prefetch_key:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4229,11 +4245,11 @@ yyreduce: else cfg_parser->cfg->prefetch_key = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4233 "util/configparser.c" /* yacc.c:1646 */ +#line 4249 "util/configparser.c" /* yacc.c:1646 */ break; - case 377: -#line 1544 "./util/configparser.y" /* yacc.c:1646 */ + case 379: +#line 1555 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_deny_any:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4241,11 +4257,11 @@ yyreduce: else cfg_parser->cfg->deny_any = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4245 "util/configparser.c" /* yacc.c:1646 */ +#line 4261 "util/configparser.c" /* yacc.c:1646 */ break; - case 378: -#line 1553 "./util/configparser.y" /* yacc.c:1646 */ + case 380: +#line 1564 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_unwanted_reply_threshold:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4253,21 +4269,21 @@ yyreduce: else cfg_parser->cfg->unwanted_threshold = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4257 "util/configparser.c" /* yacc.c:1646 */ +#line 4273 "util/configparser.c" /* yacc.c:1646 */ break; - case 379: -#line 1562 "./util/configparser.y" /* yacc.c:1646 */ + case 381: +#line 1573 "./util/configparser.y" /* yacc.c:1646 */ { 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 4267 "util/configparser.c" /* yacc.c:1646 */ +#line 4283 "util/configparser.c" /* yacc.c:1646 */ break; - case 380: -#line 1569 "./util/configparser.y" /* yacc.c:1646 */ + case 382: +#line 1580 "./util/configparser.y" /* yacc.c:1646 */ { 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) @@ -4276,11 +4292,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4280 "util/configparser.c" /* yacc.c:1646 */ +#line 4296 "util/configparser.c" /* yacc.c:1646 */ break; - case 381: -#line 1579 "./util/configparser.y" /* yacc.c:1646 */ + case 383: +#line 1590 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_access_control:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "deny")!=0 && strcmp((yyvsp[0].str), "refuse")!=0 && @@ -4299,21 +4315,21 @@ yyreduce: fatal_exit("out of memory adding acl"); } } -#line 4303 "util/configparser.c" /* yacc.c:1646 */ +#line 4319 "util/configparser.c" /* yacc.c:1646 */ break; - case 382: -#line 1599 "./util/configparser.y" /* yacc.c:1646 */ + case 384: +#line 1610 "./util/configparser.y" /* yacc.c:1646 */ { 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 4313 "util/configparser.c" /* yacc.c:1646 */ +#line 4329 "util/configparser.c" /* yacc.c:1646 */ break; - case 383: -#line 1606 "./util/configparser.y" /* yacc.c:1646 */ + case 385: +#line 1617 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_override_date:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { @@ -4330,11 +4346,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4334 "util/configparser.c" /* yacc.c:1646 */ +#line 4350 "util/configparser.c" /* yacc.c:1646 */ break; - case 384: -#line 1624 "./util/configparser.y" /* yacc.c:1646 */ + case 386: +#line 1635 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_sig_skew_min:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { @@ -4346,11 +4362,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4350 "util/configparser.c" /* yacc.c:1646 */ +#line 4366 "util/configparser.c" /* yacc.c:1646 */ break; - case 385: -#line 1637 "./util/configparser.y" /* yacc.c:1646 */ + case 387: +#line 1648 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_sig_skew_max:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { @@ -4362,11 +4378,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4366 "util/configparser.c" /* yacc.c:1646 */ +#line 4382 "util/configparser.c" /* yacc.c:1646 */ break; - case 386: -#line 1650 "./util/configparser.y" /* yacc.c:1646 */ + case 388: +#line 1661 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_cache_max_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4374,11 +4390,11 @@ yyreduce: else cfg_parser->cfg->max_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4378 "util/configparser.c" /* yacc.c:1646 */ +#line 4394 "util/configparser.c" /* yacc.c:1646 */ break; - case 387: -#line 1659 "./util/configparser.y" /* yacc.c:1646 */ + case 389: +#line 1670 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_cache_max_negative_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4386,11 +4402,11 @@ yyreduce: else cfg_parser->cfg->max_negative_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4390 "util/configparser.c" /* yacc.c:1646 */ +#line 4406 "util/configparser.c" /* yacc.c:1646 */ break; - case 388: -#line 1668 "./util/configparser.y" /* yacc.c:1646 */ + case 390: +#line 1679 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_cache_min_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4398,11 +4414,11 @@ yyreduce: else cfg_parser->cfg->min_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4402 "util/configparser.c" /* yacc.c:1646 */ +#line 4418 "util/configparser.c" /* yacc.c:1646 */ break; - case 389: -#line 1677 "./util/configparser.y" /* yacc.c:1646 */ + case 391: +#line 1688 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_bogus_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4410,11 +4426,11 @@ yyreduce: else cfg_parser->cfg->bogus_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4414 "util/configparser.c" /* yacc.c:1646 */ +#line 4430 "util/configparser.c" /* yacc.c:1646 */ break; - case 390: -#line 1686 "./util/configparser.y" /* yacc.c:1646 */ + case 392: +#line 1697 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_clean_additional:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4423,11 +4439,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4427 "util/configparser.c" /* yacc.c:1646 */ +#line 4443 "util/configparser.c" /* yacc.c:1646 */ break; - case 391: -#line 1696 "./util/configparser.y" /* yacc.c:1646 */ + case 393: +#line 1707 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_permissive_mode:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4436,11 +4452,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4440 "util/configparser.c" /* yacc.c:1646 */ +#line 4456 "util/configparser.c" /* yacc.c:1646 */ break; - case 392: -#line 1706 "./util/configparser.y" /* yacc.c:1646 */ + case 394: +#line 1717 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_aggressive_nsec:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4450,11 +4466,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4454 "util/configparser.c" /* yacc.c:1646 */ +#line 4470 "util/configparser.c" /* yacc.c:1646 */ break; - case 393: -#line 1717 "./util/configparser.y" /* yacc.c:1646 */ + case 395: +#line 1728 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ignore_cd_flag:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4462,11 +4478,11 @@ yyreduce: else cfg_parser->cfg->ignore_cd = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4466 "util/configparser.c" /* yacc.c:1646 */ +#line 4482 "util/configparser.c" /* yacc.c:1646 */ break; - case 394: -#line 1726 "./util/configparser.y" /* yacc.c:1646 */ + case 396: +#line 1737 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_serve_expired:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4474,11 +4490,11 @@ yyreduce: else cfg_parser->cfg->serve_expired = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4478 "util/configparser.c" /* yacc.c:1646 */ +#line 4494 "util/configparser.c" /* yacc.c:1646 */ break; - case 395: -#line 1735 "./util/configparser.y" /* yacc.c:1646 */ + case 397: +#line 1746 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_serve_expired_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4486,11 +4502,11 @@ yyreduce: else cfg_parser->cfg->serve_expired_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4490 "util/configparser.c" /* yacc.c:1646 */ +#line 4506 "util/configparser.c" /* yacc.c:1646 */ break; - case 396: -#line 1744 "./util/configparser.y" /* yacc.c:1646 */ + case 398: +#line 1755 "./util/configparser.y" /* yacc.c:1646 */ { 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) @@ -4498,11 +4514,11 @@ yyreduce: else cfg_parser->cfg->serve_expired_ttl_reset = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4502 "util/configparser.c" /* yacc.c:1646 */ +#line 4518 "util/configparser.c" /* yacc.c:1646 */ break; - case 397: -#line 1753 "./util/configparser.y" /* yacc.c:1646 */ + case 399: +#line 1764 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_fake_dsa:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4514,11 +4530,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 4518 "util/configparser.c" /* yacc.c:1646 */ +#line 4534 "util/configparser.c" /* yacc.c:1646 */ break; - case 398: -#line 1766 "./util/configparser.y" /* yacc.c:1646 */ + case 400: +#line 1777 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_fake_sha1:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4530,11 +4546,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 4534 "util/configparser.c" /* yacc.c:1646 */ +#line 4550 "util/configparser.c" /* yacc.c:1646 */ break; - case 399: -#line 1779 "./util/configparser.y" /* yacc.c:1646 */ + case 401: +#line 1790 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_log_level:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4542,21 +4558,21 @@ yyreduce: else cfg_parser->cfg->val_log_level = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4546 "util/configparser.c" /* yacc.c:1646 */ +#line 4562 "util/configparser.c" /* yacc.c:1646 */ break; - case 400: -#line 1788 "./util/configparser.y" /* yacc.c:1646 */ + case 402: +#line 1799 "./util/configparser.y" /* yacc.c:1646 */ { 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 4556 "util/configparser.c" /* yacc.c:1646 */ +#line 4572 "util/configparser.c" /* yacc.c:1646 */ break; - case 401: -#line 1795 "./util/configparser.y" /* yacc.c:1646 */ + case 403: +#line 1806 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_add_holddown:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4564,11 +4580,11 @@ yyreduce: else cfg_parser->cfg->add_holddown = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4568 "util/configparser.c" /* yacc.c:1646 */ +#line 4584 "util/configparser.c" /* yacc.c:1646 */ break; - case 402: -#line 1804 "./util/configparser.y" /* yacc.c:1646 */ + case 404: +#line 1815 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_del_holddown:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4576,11 +4592,11 @@ yyreduce: else cfg_parser->cfg->del_holddown = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4580 "util/configparser.c" /* yacc.c:1646 */ +#line 4596 "util/configparser.c" /* yacc.c:1646 */ break; - case 403: -#line 1813 "./util/configparser.y" /* yacc.c:1646 */ + case 405: +#line 1824 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_keep_missing:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4588,11 +4604,11 @@ yyreduce: else cfg_parser->cfg->keep_missing = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4592 "util/configparser.c" /* yacc.c:1646 */ +#line 4608 "util/configparser.c" /* yacc.c:1646 */ break; - case 404: -#line 1822 "./util/configparser.y" /* yacc.c:1646 */ + case 406: +#line 1833 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_permit_small_holddown:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4601,22 +4617,22 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4605 "util/configparser.c" /* yacc.c:1646 */ +#line 4621 "util/configparser.c" /* yacc.c:1646 */ break; - case 405: -#line 1831 "./util/configparser.y" /* yacc.c:1646 */ + case 407: +#line 1842 "./util/configparser.y" /* yacc.c:1646 */ { 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 4616 "util/configparser.c" /* yacc.c:1646 */ +#line 4632 "util/configparser.c" /* yacc.c:1646 */ break; - case 406: -#line 1839 "./util/configparser.y" /* yacc.c:1646 */ + case 408: +#line 1850 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_key_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4628,22 +4644,22 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4632 "util/configparser.c" /* yacc.c:1646 */ +#line 4648 "util/configparser.c" /* yacc.c:1646 */ break; - case 407: -#line 1852 "./util/configparser.y" /* yacc.c:1646 */ + case 409: +#line 1863 "./util/configparser.y" /* yacc.c:1646 */ { 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 4643 "util/configparser.c" /* yacc.c:1646 */ +#line 4659 "util/configparser.c" /* yacc.c:1646 */ break; - case 408: -#line 1860 "./util/configparser.y" /* yacc.c:1646 */ + case 410: +#line 1871 "./util/configparser.y" /* yacc.c:1646 */ { 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 && @@ -4675,21 +4691,21 @@ yyreduce: fatal_exit("out of memory adding local-zone"); } } -#line 4679 "util/configparser.c" /* yacc.c:1646 */ +#line 4695 "util/configparser.c" /* yacc.c:1646 */ break; - case 409: -#line 1893 "./util/configparser.y" /* yacc.c:1646 */ + case 411: +#line 1904 "./util/configparser.y" /* yacc.c:1646 */ { 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 4689 "util/configparser.c" /* yacc.c:1646 */ +#line 4705 "util/configparser.c" /* yacc.c:1646 */ break; - case 410: -#line 1900 "./util/configparser.y" /* yacc.c:1646 */ + case 412: +#line 1911 "./util/configparser.y" /* yacc.c:1646 */ { char* ptr; OUTYY(("P(server_local_data_ptr:%s)\n", (yyvsp[0].str))); @@ -4703,11 +4719,11 @@ yyreduce: yyerror("local-data-ptr could not be reversed"); } } -#line 4707 "util/configparser.c" /* yacc.c:1646 */ +#line 4723 "util/configparser.c" /* yacc.c:1646 */ break; - case 411: -#line 1915 "./util/configparser.y" /* yacc.c:1646 */ + case 413: +#line 1926 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_minimal_responses:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4716,11 +4732,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4720 "util/configparser.c" /* yacc.c:1646 */ +#line 4736 "util/configparser.c" /* yacc.c:1646 */ break; - case 412: -#line 1925 "./util/configparser.y" /* yacc.c:1646 */ + case 414: +#line 1936 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_rrset_roundrobin:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4729,41 +4745,41 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4733 "util/configparser.c" /* yacc.c:1646 */ +#line 4749 "util/configparser.c" /* yacc.c:1646 */ break; - case 413: -#line 1935 "./util/configparser.y" /* yacc.c:1646 */ + case 415: +#line 1946 "./util/configparser.y" /* yacc.c:1646 */ { 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 4743 "util/configparser.c" /* yacc.c:1646 */ +#line 4759 "util/configparser.c" /* yacc.c:1646 */ break; - case 414: -#line 1942 "./util/configparser.y" /* yacc.c:1646 */ + case 416: +#line 1953 "./util/configparser.y" /* yacc.c:1646 */ { 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 4753 "util/configparser.c" /* yacc.c:1646 */ +#line 4769 "util/configparser.c" /* yacc.c:1646 */ break; - case 415: -#line 1949 "./util/configparser.y" /* yacc.c:1646 */ + case 417: +#line 1960 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dns64_prefix:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dns64_prefix); cfg_parser->cfg->dns64_prefix = (yyvsp[0].str); } -#line 4763 "util/configparser.c" /* yacc.c:1646 */ +#line 4779 "util/configparser.c" /* yacc.c:1646 */ break; - case 416: -#line 1956 "./util/configparser.y" /* yacc.c:1646 */ + case 418: +#line 1967 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_dns64_synthall:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4771,22 +4787,22 @@ yyreduce: else cfg_parser->cfg->dns64_synthall = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4775 "util/configparser.c" /* yacc.c:1646 */ +#line 4791 "util/configparser.c" /* yacc.c:1646 */ break; - case 417: -#line 1965 "./util/configparser.y" /* yacc.c:1646 */ + case 419: +#line 1976 "./util/configparser.y" /* yacc.c:1646 */ { 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 4786 "util/configparser.c" /* yacc.c:1646 */ +#line 4802 "util/configparser.c" /* yacc.c:1646 */ break; - case 418: -#line 1973 "./util/configparser.y" /* yacc.c:1646 */ + case 420: +#line 1984 "./util/configparser.y" /* yacc.c:1646 */ { char* p, *s = (yyvsp[0].str); OUTYY(("P(server_define_tag:%s)\n", (yyvsp[0].str))); @@ -4799,11 +4815,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4803 "util/configparser.c" /* yacc.c:1646 */ +#line 4819 "util/configparser.c" /* yacc.c:1646 */ break; - case 419: -#line 1987 "./util/configparser.y" /* yacc.c:1646 */ + case 421: +#line 1998 "./util/configparser.y" /* yacc.c:1646 */ { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -4823,11 +4839,11 @@ yyreduce: } } } -#line 4827 "util/configparser.c" /* yacc.c:1646 */ +#line 4843 "util/configparser.c" /* yacc.c:1646 */ break; - case 420: -#line 2008 "./util/configparser.y" /* yacc.c:1646 */ + case 422: +#line 2019 "./util/configparser.y" /* yacc.c:1646 */ { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -4847,11 +4863,11 @@ yyreduce: } } } -#line 4851 "util/configparser.c" /* yacc.c:1646 */ +#line 4867 "util/configparser.c" /* yacc.c:1646 */ break; - case 421: -#line 2029 "./util/configparser.y" /* yacc.c:1646 */ + case 423: +#line 2040 "./util/configparser.y" /* yacc.c:1646 */ { 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, @@ -4862,11 +4878,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 4866 "util/configparser.c" /* yacc.c:1646 */ +#line 4882 "util/configparser.c" /* yacc.c:1646 */ break; - case 422: -#line 2041 "./util/configparser.y" /* yacc.c:1646 */ + case 424: +#line 2052 "./util/configparser.y" /* yacc.c:1646 */ { 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, @@ -4877,11 +4893,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 4881 "util/configparser.c" /* yacc.c:1646 */ +#line 4897 "util/configparser.c" /* yacc.c:1646 */ break; - case 423: -#line 2053 "./util/configparser.y" /* yacc.c:1646 */ + case 425: +#line 2064 "./util/configparser.y" /* yacc.c:1646 */ { 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, @@ -4892,11 +4908,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 4896 "util/configparser.c" /* yacc.c:1646 */ +#line 4912 "util/configparser.c" /* yacc.c:1646 */ break; - case 424: -#line 2065 "./util/configparser.y" /* yacc.c:1646 */ + case 426: +#line 2076 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_access_control_view:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str2list_insert(&cfg_parser->cfg->acl_view, @@ -4904,11 +4920,11 @@ yyreduce: yyerror("out of memory"); } } -#line 4908 "util/configparser.c" /* yacc.c:1646 */ +#line 4924 "util/configparser.c" /* yacc.c:1646 */ break; - case 425: -#line 2074 "./util/configparser.y" /* yacc.c:1646 */ + case 427: +#line 2085 "./util/configparser.y" /* yacc.c:1646 */ { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -4928,11 +4944,11 @@ yyreduce: } } } -#line 4932 "util/configparser.c" /* yacc.c:1646 */ +#line 4948 "util/configparser.c" /* yacc.c:1646 */ break; - case 426: -#line 2095 "./util/configparser.y" /* yacc.c:1646 */ + case 428: +#line 2106 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_ratelimit:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4940,11 +4956,11 @@ yyreduce: else cfg_parser->cfg->ip_ratelimit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4944 "util/configparser.c" /* yacc.c:1646 */ +#line 4960 "util/configparser.c" /* yacc.c:1646 */ break; - case 427: -#line 2105 "./util/configparser.y" /* yacc.c:1646 */ + case 429: +#line 2116 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ratelimit:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4952,33 +4968,33 @@ yyreduce: else cfg_parser->cfg->ratelimit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4956 "util/configparser.c" /* yacc.c:1646 */ +#line 4972 "util/configparser.c" /* yacc.c:1646 */ break; - case 428: -#line 2114 "./util/configparser.y" /* yacc.c:1646 */ + case 430: +#line 2125 "./util/configparser.y" /* yacc.c:1646 */ { 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 4967 "util/configparser.c" /* yacc.c:1646 */ +#line 4983 "util/configparser.c" /* yacc.c:1646 */ break; - case 429: -#line 2122 "./util/configparser.y" /* yacc.c:1646 */ + case 431: +#line 2133 "./util/configparser.y" /* yacc.c:1646 */ { 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 4978 "util/configparser.c" /* yacc.c:1646 */ +#line 4994 "util/configparser.c" /* yacc.c:1646 */ break; - case 430: -#line 2130 "./util/configparser.y" /* yacc.c:1646 */ + case 432: +#line 2141 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_ratelimit_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4990,11 +5006,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4994 "util/configparser.c" /* yacc.c:1646 */ +#line 5010 "util/configparser.c" /* yacc.c:1646 */ break; - case 431: -#line 2143 "./util/configparser.y" /* yacc.c:1646 */ + case 433: +#line 2154 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ratelimit_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5006,11 +5022,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 5010 "util/configparser.c" /* yacc.c:1646 */ +#line 5026 "util/configparser.c" /* yacc.c:1646 */ break; - case 432: -#line 2156 "./util/configparser.y" /* yacc.c:1646 */ + case 434: +#line 2167 "./util/configparser.y" /* yacc.c:1646 */ { 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) { @@ -5024,11 +5040,11 @@ yyreduce: "ratelimit-for-domain"); } } -#line 5028 "util/configparser.c" /* yacc.c:1646 */ +#line 5044 "util/configparser.c" /* yacc.c:1646 */ break; - case 433: -#line 2171 "./util/configparser.y" /* yacc.c:1646 */ + case 435: +#line 2182 "./util/configparser.y" /* yacc.c:1646 */ { 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) { @@ -5042,11 +5058,11 @@ yyreduce: "ratelimit-below-domain"); } } -#line 5046 "util/configparser.c" /* yacc.c:1646 */ +#line 5062 "util/configparser.c" /* yacc.c:1646 */ break; - case 434: -#line 2186 "./util/configparser.y" /* yacc.c:1646 */ + case 436: +#line 2197 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_ratelimit_factor:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5054,11 +5070,11 @@ yyreduce: else cfg_parser->cfg->ip_ratelimit_factor = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5058 "util/configparser.c" /* yacc.c:1646 */ +#line 5074 "util/configparser.c" /* yacc.c:1646 */ break; - case 435: -#line 2195 "./util/configparser.y" /* yacc.c:1646 */ + case 437: +#line 2206 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ratelimit_factor:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5066,20 +5082,20 @@ yyreduce: else cfg_parser->cfg->ratelimit_factor = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5070 "util/configparser.c" /* yacc.c:1646 */ +#line 5086 "util/configparser.c" /* yacc.c:1646 */ break; - case 436: -#line 2204 "./util/configparser.y" /* yacc.c:1646 */ + case 438: +#line 2215 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(low-rtt option is deprecated, use fast-server-num instead)\n")); free((yyvsp[0].str)); } -#line 5079 "util/configparser.c" /* yacc.c:1646 */ +#line 5095 "util/configparser.c" /* yacc.c:1646 */ break; - case 437: -#line 2210 "./util/configparser.y" /* yacc.c:1646 */ + case 439: +#line 2221 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_fast_server_num:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) <= 0) @@ -5087,11 +5103,11 @@ yyreduce: else cfg_parser->cfg->fast_server_num = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5091 "util/configparser.c" /* yacc.c:1646 */ +#line 5107 "util/configparser.c" /* yacc.c:1646 */ break; - case 438: -#line 2219 "./util/configparser.y" /* yacc.c:1646 */ + case 440: +#line 2230 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_fast_server_permil:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5099,11 +5115,11 @@ yyreduce: else cfg_parser->cfg->fast_server_permil = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5103 "util/configparser.c" /* yacc.c:1646 */ +#line 5119 "util/configparser.c" /* yacc.c:1646 */ break; - case 439: -#line 2228 "./util/configparser.y" /* yacc.c:1646 */ + case 441: +#line 2239 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_qname_minimisation:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5112,11 +5128,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5116 "util/configparser.c" /* yacc.c:1646 */ +#line 5132 "util/configparser.c" /* yacc.c:1646 */ break; - case 440: -#line 2238 "./util/configparser.y" /* yacc.c:1646 */ + case 442: +#line 2249 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_qname_minimisation_strict:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5125,11 +5141,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5129 "util/configparser.c" /* yacc.c:1646 */ +#line 5145 "util/configparser.c" /* yacc.c:1646 */ break; - case 441: -#line 2248 "./util/configparser.y" /* yacc.c:1646 */ + case 443: +#line 2259 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_enabled:%s)\n", (yyvsp[0].str))); @@ -5141,11 +5157,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 5145 "util/configparser.c" /* yacc.c:1646 */ +#line 5161 "util/configparser.c" /* yacc.c:1646 */ break; - case 442: -#line 2261 "./util/configparser.y" /* yacc.c:1646 */ + case 444: +#line 2272 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_ignore_bogus:%s)\n", (yyvsp[0].str))); @@ -5157,11 +5173,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 5161 "util/configparser.c" /* yacc.c:1646 */ +#line 5177 "util/configparser.c" /* yacc.c:1646 */ break; - case 443: -#line 2274 "./util/configparser.y" /* yacc.c:1646 */ + case 445: +#line 2285 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_hook:%s)\n", (yyvsp[0].str))); @@ -5172,11 +5188,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5176 "util/configparser.c" /* yacc.c:1646 */ +#line 5192 "util/configparser.c" /* yacc.c:1646 */ break; - case 444: -#line 2286 "./util/configparser.y" /* yacc.c:1646 */ + case 446: +#line 2297 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_max_ttl:%s)\n", (yyvsp[0].str))); @@ -5189,11 +5205,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5193 "util/configparser.c" /* yacc.c:1646 */ +#line 5209 "util/configparser.c" /* yacc.c:1646 */ break; - case 445: -#line 2300 "./util/configparser.y" /* yacc.c:1646 */ + case 447: +#line 2311 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_whitelist:%s)\n", (yyvsp[0].str))); @@ -5204,11 +5220,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5208 "util/configparser.c" /* yacc.c:1646 */ +#line 5224 "util/configparser.c" /* yacc.c:1646 */ break; - case 446: -#line 2312 "./util/configparser.y" /* yacc.c:1646 */ + case 448: +#line 2323 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_strict:%s)\n", (yyvsp[0].str))); @@ -5221,11 +5237,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5225 "util/configparser.c" /* yacc.c:1646 */ +#line 5241 "util/configparser.c" /* yacc.c:1646 */ break; - case 447: -#line 2326 "./util/configparser.y" /* yacc.c:1646 */ + case 449: +#line 2337 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->stubs->name) @@ -5234,31 +5250,31 @@ yyreduce: free(cfg_parser->cfg->stubs->name); cfg_parser->cfg->stubs->name = (yyvsp[0].str); } -#line 5238 "util/configparser.c" /* yacc.c:1646 */ +#line 5254 "util/configparser.c" /* yacc.c:1646 */ break; - case 448: -#line 2336 "./util/configparser.y" /* yacc.c:1646 */ + case 450: +#line 2347 "./util/configparser.y" /* yacc.c:1646 */ { 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 5248 "util/configparser.c" /* yacc.c:1646 */ +#line 5264 "util/configparser.c" /* yacc.c:1646 */ break; - case 449: -#line 2343 "./util/configparser.y" /* yacc.c:1646 */ + case 451: +#line 2354 "./util/configparser.y" /* yacc.c:1646 */ { 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 5258 "util/configparser.c" /* yacc.c:1646 */ +#line 5274 "util/configparser.c" /* yacc.c:1646 */ break; - case 450: -#line 2350 "./util/configparser.y" /* yacc.c:1646 */ + case 452: +#line 2361 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(stub-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5266,11 +5282,11 @@ yyreduce: else cfg_parser->cfg->stubs->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5270 "util/configparser.c" /* yacc.c:1646 */ +#line 5286 "util/configparser.c" /* yacc.c:1646 */ break; - case 451: -#line 2359 "./util/configparser.y" /* yacc.c:1646 */ + case 453: +#line 2370 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(stub-no-cache:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5278,11 +5294,11 @@ yyreduce: else cfg_parser->cfg->stubs->no_cache=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5282 "util/configparser.c" /* yacc.c:1646 */ +#line 5298 "util/configparser.c" /* yacc.c:1646 */ break; - case 452: -#line 2368 "./util/configparser.y" /* yacc.c:1646 */ + case 454: +#line 2379 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(stub-ssl-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5291,11 +5307,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5295 "util/configparser.c" /* yacc.c:1646 */ +#line 5311 "util/configparser.c" /* yacc.c:1646 */ break; - case 453: -#line 2378 "./util/configparser.y" /* yacc.c:1646 */ + case 455: +#line 2389 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(stub-prime:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5304,11 +5320,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5308 "util/configparser.c" /* yacc.c:1646 */ +#line 5324 "util/configparser.c" /* yacc.c:1646 */ break; - case 454: -#line 2388 "./util/configparser.y" /* yacc.c:1646 */ + case 456: +#line 2399 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->forwards->name) @@ -5317,31 +5333,31 @@ yyreduce: free(cfg_parser->cfg->forwards->name); cfg_parser->cfg->forwards->name = (yyvsp[0].str); } -#line 5321 "util/configparser.c" /* yacc.c:1646 */ +#line 5337 "util/configparser.c" /* yacc.c:1646 */ break; - case 455: -#line 2398 "./util/configparser.y" /* yacc.c:1646 */ + case 457: +#line 2409 "./util/configparser.y" /* yacc.c:1646 */ { 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 5331 "util/configparser.c" /* yacc.c:1646 */ +#line 5347 "util/configparser.c" /* yacc.c:1646 */ break; - case 456: -#line 2405 "./util/configparser.y" /* yacc.c:1646 */ + case 458: +#line 2416 "./util/configparser.y" /* yacc.c:1646 */ { 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 5341 "util/configparser.c" /* yacc.c:1646 */ +#line 5357 "util/configparser.c" /* yacc.c:1646 */ break; - case 457: -#line 2412 "./util/configparser.y" /* yacc.c:1646 */ + case 459: +#line 2423 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(forward-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5349,11 +5365,11 @@ yyreduce: else cfg_parser->cfg->forwards->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5353 "util/configparser.c" /* yacc.c:1646 */ +#line 5369 "util/configparser.c" /* yacc.c:1646 */ break; - case 458: -#line 2421 "./util/configparser.y" /* yacc.c:1646 */ + case 460: +#line 2432 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(forward-no-cache:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5361,11 +5377,11 @@ yyreduce: else cfg_parser->cfg->forwards->no_cache=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5365 "util/configparser.c" /* yacc.c:1646 */ +#line 5381 "util/configparser.c" /* yacc.c:1646 */ break; - case 459: -#line 2430 "./util/configparser.y" /* yacc.c:1646 */ + case 461: +#line 2441 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(forward-ssl-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5374,11 +5390,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5378 "util/configparser.c" /* yacc.c:1646 */ +#line 5394 "util/configparser.c" /* yacc.c:1646 */ break; - case 460: -#line 2440 "./util/configparser.y" /* yacc.c:1646 */ + case 462: +#line 2451 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->auths->name) @@ -5387,52 +5403,52 @@ yyreduce: free(cfg_parser->cfg->auths->name); cfg_parser->cfg->auths->name = (yyvsp[0].str); } -#line 5391 "util/configparser.c" /* yacc.c:1646 */ +#line 5407 "util/configparser.c" /* yacc.c:1646 */ break; - case 461: -#line 2450 "./util/configparser.y" /* yacc.c:1646 */ + case 463: +#line 2461 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(zonefile:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->auths->zonefile); cfg_parser->cfg->auths->zonefile = (yyvsp[0].str); } -#line 5401 "util/configparser.c" /* yacc.c:1646 */ +#line 5417 "util/configparser.c" /* yacc.c:1646 */ break; - case 462: -#line 2457 "./util/configparser.y" /* yacc.c:1646 */ + case 464: +#line 2468 "./util/configparser.y" /* yacc.c:1646 */ { 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 5411 "util/configparser.c" /* yacc.c:1646 */ +#line 5427 "util/configparser.c" /* yacc.c:1646 */ break; - case 463: -#line 2464 "./util/configparser.y" /* yacc.c:1646 */ + case 465: +#line 2475 "./util/configparser.y" /* yacc.c:1646 */ { 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 5421 "util/configparser.c" /* yacc.c:1646 */ +#line 5437 "util/configparser.c" /* yacc.c:1646 */ break; - case 464: -#line 2471 "./util/configparser.y" /* yacc.c:1646 */ + case 466: +#line 2482 "./util/configparser.y" /* yacc.c:1646 */ { 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 5432 "util/configparser.c" /* yacc.c:1646 */ +#line 5448 "util/configparser.c" /* yacc.c:1646 */ break; - case 465: -#line 2479 "./util/configparser.y" /* yacc.c:1646 */ + case 467: +#line 2490 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(for-downstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5441,11 +5457,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5445 "util/configparser.c" /* yacc.c:1646 */ +#line 5461 "util/configparser.c" /* yacc.c:1646 */ break; - case 466: -#line 2489 "./util/configparser.y" /* yacc.c:1646 */ + case 468: +#line 2500 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(for-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5454,11 +5470,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5458 "util/configparser.c" /* yacc.c:1646 */ +#line 5474 "util/configparser.c" /* yacc.c:1646 */ break; - case 467: -#line 2499 "./util/configparser.y" /* yacc.c:1646 */ + case 469: +#line 2510 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(fallback-enabled:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5467,11 +5483,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5471 "util/configparser.c" /* yacc.c:1646 */ +#line 5487 "util/configparser.c" /* yacc.c:1646 */ break; - case 468: -#line 2509 "./util/configparser.y" /* yacc.c:1646 */ + case 470: +#line 2520 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->views->name) @@ -5480,11 +5496,11 @@ yyreduce: free(cfg_parser->cfg->views->name); cfg_parser->cfg->views->name = (yyvsp[0].str); } -#line 5484 "util/configparser.c" /* yacc.c:1646 */ +#line 5500 "util/configparser.c" /* yacc.c:1646 */ break; - case 469: -#line 2519 "./util/configparser.y" /* yacc.c:1646 */ + case 471: +#line 2530 "./util/configparser.y" /* yacc.c:1646 */ { 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 && @@ -5515,11 +5531,11 @@ yyreduce: fatal_exit("out of memory adding local-zone"); } } -#line 5519 "util/configparser.c" /* yacc.c:1646 */ +#line 5535 "util/configparser.c" /* yacc.c:1646 */ break; - case 470: -#line 2551 "./util/configparser.y" /* yacc.c:1646 */ + case 472: +#line 2562 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(view_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); validate_respip_action((yyvsp[0].str)); @@ -5528,33 +5544,33 @@ yyreduce: fatal_exit("out of memory adding per-view " "response-ip action"); } -#line 5532 "util/configparser.c" /* yacc.c:1646 */ +#line 5548 "util/configparser.c" /* yacc.c:1646 */ break; - case 471: -#line 2561 "./util/configparser.y" /* yacc.c:1646 */ + case 473: +#line 2572 "./util/configparser.y" /* yacc.c:1646 */ { 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 5543 "util/configparser.c" /* yacc.c:1646 */ +#line 5559 "util/configparser.c" /* yacc.c:1646 */ break; - case 472: -#line 2569 "./util/configparser.y" /* yacc.c:1646 */ + case 474: +#line 2580 "./util/configparser.y" /* yacc.c:1646 */ { 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 5554 "util/configparser.c" /* yacc.c:1646 */ +#line 5570 "util/configparser.c" /* yacc.c:1646 */ break; - case 473: -#line 2577 "./util/configparser.y" /* yacc.c:1646 */ + case 475: +#line 2588 "./util/configparser.y" /* yacc.c:1646 */ { char* ptr; OUTYY(("P(view_local_data_ptr:%s)\n", (yyvsp[0].str))); @@ -5568,11 +5584,11 @@ yyreduce: yyerror("local-data-ptr could not be reversed"); } } -#line 5572 "util/configparser.c" /* yacc.c:1646 */ +#line 5588 "util/configparser.c" /* yacc.c:1646 */ break; - case 474: -#line 2592 "./util/configparser.y" /* yacc.c:1646 */ + case 476: +#line 2603 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(view-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5580,19 +5596,19 @@ yyreduce: else cfg_parser->cfg->views->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5584 "util/configparser.c" /* yacc.c:1646 */ +#line 5600 "util/configparser.c" /* yacc.c:1646 */ break; - case 475: -#line 2601 "./util/configparser.y" /* yacc.c:1646 */ + case 477: +#line 2612 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(remote-control:)\n")); } -#line 5592 "util/configparser.c" /* yacc.c:1646 */ +#line 5608 "util/configparser.c" /* yacc.c:1646 */ break; - case 486: -#line 2612 "./util/configparser.y" /* yacc.c:1646 */ + case 488: +#line 2623 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(control_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5601,11 +5617,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5605 "util/configparser.c" /* yacc.c:1646 */ +#line 5621 "util/configparser.c" /* yacc.c:1646 */ break; - case 487: -#line 2622 "./util/configparser.y" /* yacc.c:1646 */ + case 489: +#line 2633 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(control_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5613,79 +5629,79 @@ yyreduce: else cfg_parser->cfg->control_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5617 "util/configparser.c" /* yacc.c:1646 */ +#line 5633 "util/configparser.c" /* yacc.c:1646 */ break; - case 488: -#line 2631 "./util/configparser.y" /* yacc.c:1646 */ + case 490: +#line 2642 "./util/configparser.y" /* yacc.c:1646 */ { 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 5627 "util/configparser.c" /* yacc.c:1646 */ +#line 5643 "util/configparser.c" /* yacc.c:1646 */ break; - case 489: -#line 2638 "./util/configparser.y" /* yacc.c:1646 */ + case 491: +#line 2649 "./util/configparser.y" /* yacc.c:1646 */ { 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 5637 "util/configparser.c" /* yacc.c:1646 */ +#line 5653 "util/configparser.c" /* yacc.c:1646 */ break; - case 490: -#line 2645 "./util/configparser.y" /* yacc.c:1646 */ + case 492: +#line 2656 "./util/configparser.y" /* yacc.c:1646 */ { 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 5647 "util/configparser.c" /* yacc.c:1646 */ +#line 5663 "util/configparser.c" /* yacc.c:1646 */ break; - case 491: -#line 2652 "./util/configparser.y" /* yacc.c:1646 */ + case 493: +#line 2663 "./util/configparser.y" /* yacc.c:1646 */ { 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 5657 "util/configparser.c" /* yacc.c:1646 */ +#line 5673 "util/configparser.c" /* yacc.c:1646 */ break; - case 492: -#line 2659 "./util/configparser.y" /* yacc.c:1646 */ + case 494: +#line 2670 "./util/configparser.y" /* yacc.c:1646 */ { 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 5667 "util/configparser.c" /* yacc.c:1646 */ +#line 5683 "util/configparser.c" /* yacc.c:1646 */ break; - case 493: -#line 2666 "./util/configparser.y" /* yacc.c:1646 */ + case 495: +#line 2677 "./util/configparser.y" /* yacc.c:1646 */ { 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 5677 "util/configparser.c" /* yacc.c:1646 */ +#line 5693 "util/configparser.c" /* yacc.c:1646 */ break; - case 494: -#line 2673 "./util/configparser.y" /* yacc.c:1646 */ + case 496: +#line 2684 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(dnstap:)\n")); } -#line 5685 "util/configparser.c" /* yacc.c:1646 */ +#line 5701 "util/configparser.c" /* yacc.c:1646 */ break; - case 509: -#line 2690 "./util/configparser.y" /* yacc.c:1646 */ + case 511: +#line 2701 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5693,21 +5709,21 @@ yyreduce: else cfg_parser->cfg->dnstap = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5697 "util/configparser.c" /* yacc.c:1646 */ +#line 5713 "util/configparser.c" /* yacc.c:1646 */ break; - case 510: -#line 2699 "./util/configparser.y" /* yacc.c:1646 */ + case 512: +#line 2710 "./util/configparser.y" /* yacc.c:1646 */ { 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 5707 "util/configparser.c" /* yacc.c:1646 */ +#line 5723 "util/configparser.c" /* yacc.c:1646 */ break; - case 511: -#line 2706 "./util/configparser.y" /* yacc.c:1646 */ + case 513: +#line 2717 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_send_identity:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5715,11 +5731,11 @@ yyreduce: else cfg_parser->cfg->dnstap_send_identity = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5719 "util/configparser.c" /* yacc.c:1646 */ +#line 5735 "util/configparser.c" /* yacc.c:1646 */ break; - case 512: -#line 2715 "./util/configparser.y" /* yacc.c:1646 */ + case 514: +#line 2726 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_send_version:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5727,31 +5743,31 @@ yyreduce: else cfg_parser->cfg->dnstap_send_version = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5731 "util/configparser.c" /* yacc.c:1646 */ +#line 5747 "util/configparser.c" /* yacc.c:1646 */ break; - case 513: -#line 2724 "./util/configparser.y" /* yacc.c:1646 */ + case 515: +#line 2735 "./util/configparser.y" /* yacc.c:1646 */ { 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 5741 "util/configparser.c" /* yacc.c:1646 */ +#line 5757 "util/configparser.c" /* yacc.c:1646 */ break; - case 514: -#line 2731 "./util/configparser.y" /* yacc.c:1646 */ + case 516: +#line 2742 "./util/configparser.y" /* yacc.c:1646 */ { 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 5751 "util/configparser.c" /* yacc.c:1646 */ +#line 5767 "util/configparser.c" /* yacc.c:1646 */ break; - case 515: -#line 2738 "./util/configparser.y" /* yacc.c:1646 */ + case 517: +#line 2749 "./util/configparser.y" /* yacc.c:1646 */ { 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) @@ -5760,11 +5776,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5764 "util/configparser.c" /* yacc.c:1646 */ +#line 5780 "util/configparser.c" /* yacc.c:1646 */ break; - case 516: -#line 2748 "./util/configparser.y" /* yacc.c:1646 */ + case 518: +#line 2759 "./util/configparser.y" /* yacc.c:1646 */ { 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) @@ -5773,11 +5789,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5777 "util/configparser.c" /* yacc.c:1646 */ +#line 5793 "util/configparser.c" /* yacc.c:1646 */ break; - case 517: -#line 2758 "./util/configparser.y" /* yacc.c:1646 */ + case 519: +#line 2769 "./util/configparser.y" /* yacc.c:1646 */ { 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) @@ -5786,11 +5802,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5790 "util/configparser.c" /* yacc.c:1646 */ +#line 5806 "util/configparser.c" /* yacc.c:1646 */ break; - case 518: -#line 2768 "./util/configparser.y" /* yacc.c:1646 */ + case 520: +#line 2779 "./util/configparser.y" /* yacc.c:1646 */ { 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) @@ -5799,11 +5815,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5803 "util/configparser.c" /* yacc.c:1646 */ +#line 5819 "util/configparser.c" /* yacc.c:1646 */ break; - case 519: -#line 2778 "./util/configparser.y" /* yacc.c:1646 */ + case 521: +#line 2789 "./util/configparser.y" /* yacc.c:1646 */ { 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) @@ -5812,11 +5828,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5816 "util/configparser.c" /* yacc.c:1646 */ +#line 5832 "util/configparser.c" /* yacc.c:1646 */ break; - case 520: -#line 2788 "./util/configparser.y" /* yacc.c:1646 */ + case 522: +#line 2799 "./util/configparser.y" /* yacc.c:1646 */ { 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) @@ -5825,29 +5841,29 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5829 "util/configparser.c" /* yacc.c:1646 */ +#line 5845 "util/configparser.c" /* yacc.c:1646 */ break; - case 521: -#line 2798 "./util/configparser.y" /* yacc.c:1646 */ + case 523: +#line 2809 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(python:)\n")); } -#line 5837 "util/configparser.c" /* yacc.c:1646 */ +#line 5853 "util/configparser.c" /* yacc.c:1646 */ break; - case 525: -#line 2807 "./util/configparser.y" /* yacc.c:1646 */ + case 527: +#line 2818 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(python-script:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->python_script); cfg_parser->cfg->python_script = (yyvsp[0].str); } -#line 5847 "util/configparser.c" /* yacc.c:1646 */ +#line 5863 "util/configparser.c" /* yacc.c:1646 */ break; - case 526: -#line 2813 "./util/configparser.y" /* yacc.c:1646 */ + case 528: +#line 2824 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(disable_dnssec_lame_check:%s)\n", (yyvsp[0].str))); if (strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5856,21 +5872,21 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5860 "util/configparser.c" /* yacc.c:1646 */ +#line 5876 "util/configparser.c" /* yacc.c:1646 */ break; - case 527: -#line 2823 "./util/configparser.y" /* yacc.c:1646 */ + case 529: +#line 2834 "./util/configparser.y" /* yacc.c:1646 */ { 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 5870 "util/configparser.c" /* yacc.c:1646 */ +#line 5886 "util/configparser.c" /* yacc.c:1646 */ break; - case 528: -#line 2830 "./util/configparser.y" /* yacc.c:1646 */ + case 530: +#line 2841 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); validate_respip_action((yyvsp[0].str)); @@ -5878,30 +5894,30 @@ yyreduce: (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding response-ip"); } -#line 5882 "util/configparser.c" /* yacc.c:1646 */ +#line 5898 "util/configparser.c" /* yacc.c:1646 */ break; - case 529: -#line 2839 "./util/configparser.y" /* yacc.c:1646 */ + case 531: +#line 2850 "./util/configparser.y" /* yacc.c:1646 */ { 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 5893 "util/configparser.c" /* yacc.c:1646 */ +#line 5909 "util/configparser.c" /* yacc.c:1646 */ break; - case 530: -#line 2847 "./util/configparser.y" /* yacc.c:1646 */ + case 532: +#line 2858 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(dnscrypt:)\n")); } -#line 5901 "util/configparser.c" /* yacc.c:1646 */ +#line 5917 "util/configparser.c" /* yacc.c:1646 */ break; - case 543: -#line 2863 "./util/configparser.y" /* yacc.c:1646 */ + case 545: +#line 2874 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5909,11 +5925,11 @@ yyreduce: else cfg_parser->cfg->dnscrypt = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5913 "util/configparser.c" /* yacc.c:1646 */ +#line 5929 "util/configparser.c" /* yacc.c:1646 */ break; - case 544: -#line 2873 "./util/configparser.y" /* yacc.c:1646 */ + case 546: +#line 2884 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5921,21 +5937,21 @@ yyreduce: else cfg_parser->cfg->dnscrypt_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5925 "util/configparser.c" /* yacc.c:1646 */ +#line 5941 "util/configparser.c" /* yacc.c:1646 */ break; - case 545: -#line 2882 "./util/configparser.y" /* yacc.c:1646 */ + case 547: +#line 2893 "./util/configparser.y" /* yacc.c:1646 */ { 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 5935 "util/configparser.c" /* yacc.c:1646 */ +#line 5951 "util/configparser.c" /* yacc.c:1646 */ break; - case 546: -#line 2889 "./util/configparser.y" /* yacc.c:1646 */ + case 548: +#line 2900 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_provider_cert:%s)\n", (yyvsp[0].str))); if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str))) @@ -5943,21 +5959,21 @@ yyreduce: if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str))) fatal_exit("out of memory adding dnscrypt-provider-cert"); } -#line 5947 "util/configparser.c" /* yacc.c:1646 */ +#line 5963 "util/configparser.c" /* yacc.c:1646 */ break; - case 547: -#line 2898 "./util/configparser.y" /* yacc.c:1646 */ + case 549: +#line 2909 "./util/configparser.y" /* yacc.c:1646 */ { 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 5957 "util/configparser.c" /* yacc.c:1646 */ +#line 5973 "util/configparser.c" /* yacc.c:1646 */ break; - case 548: -#line 2905 "./util/configparser.y" /* yacc.c:1646 */ + case 550: +#line 2916 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_secret_key:%s)\n", (yyvsp[0].str))); if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str))) @@ -5965,22 +5981,22 @@ yyreduce: if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str))) fatal_exit("out of memory adding dnscrypt-secret-key"); } -#line 5969 "util/configparser.c" /* yacc.c:1646 */ +#line 5985 "util/configparser.c" /* yacc.c:1646 */ break; - case 549: -#line 2914 "./util/configparser.y" /* yacc.c:1646 */ + case 551: +#line 2925 "./util/configparser.y" /* yacc.c:1646 */ { 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 5980 "util/configparser.c" /* yacc.c:1646 */ +#line 5996 "util/configparser.c" /* yacc.c:1646 */ break; - case 550: -#line 2922 "./util/configparser.y" /* yacc.c:1646 */ + case 552: +#line 2933 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnscrypt_shared_secret_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5992,22 +6008,22 @@ yyreduce: } free((yyvsp[0].str)); } -#line 5996 "util/configparser.c" /* yacc.c:1646 */ +#line 6012 "util/configparser.c" /* yacc.c:1646 */ break; - case 551: -#line 2935 "./util/configparser.y" /* yacc.c:1646 */ + case 553: +#line 2946 "./util/configparser.y" /* yacc.c:1646 */ { 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 6007 "util/configparser.c" /* yacc.c:1646 */ +#line 6023 "util/configparser.c" /* yacc.c:1646 */ break; - case 552: -#line 2943 "./util/configparser.y" /* yacc.c:1646 */ + case 554: +#line 2954 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnscrypt_nonce_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -6019,19 +6035,19 @@ yyreduce: } free((yyvsp[0].str)); } -#line 6023 "util/configparser.c" /* yacc.c:1646 */ +#line 6039 "util/configparser.c" /* yacc.c:1646 */ break; - case 553: -#line 2956 "./util/configparser.y" /* yacc.c:1646 */ + case 555: +#line 2967 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(cachedb:)\n")); } -#line 6031 "util/configparser.c" /* yacc.c:1646 */ +#line 6047 "util/configparser.c" /* yacc.c:1646 */ break; - case 561: -#line 2966 "./util/configparser.y" /* yacc.c:1646 */ + case 563: +#line 2977 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_CACHEDB OUTYY(("P(backend:%s)\n", (yyvsp[0].str))); @@ -6045,11 +6061,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6049 "util/configparser.c" /* yacc.c:1646 */ +#line 6065 "util/configparser.c" /* yacc.c:1646 */ break; - case 562: -#line 2981 "./util/configparser.y" /* yacc.c:1646 */ + case 564: +#line 2992 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_CACHEDB OUTYY(("P(secret-seed:%s)\n", (yyvsp[0].str))); @@ -6063,11 +6079,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6067 "util/configparser.c" /* yacc.c:1646 */ +#line 6083 "util/configparser.c" /* yacc.c:1646 */ break; - case 563: -#line 2996 "./util/configparser.y" /* yacc.c:1646 */ + case 565: +#line 3007 "./util/configparser.y" /* yacc.c:1646 */ { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_server_host:%s)\n", (yyvsp[0].str))); @@ -6078,11 +6094,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6082 "util/configparser.c" /* yacc.c:1646 */ +#line 6098 "util/configparser.c" /* yacc.c:1646 */ break; - case 564: -#line 3008 "./util/configparser.y" /* yacc.c:1646 */ + case 566: +#line 3019 "./util/configparser.y" /* yacc.c:1646 */ { #if defined(USE_CACHEDB) && defined(USE_REDIS) int port; @@ -6096,11 +6112,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 6100 "util/configparser.c" /* yacc.c:1646 */ +#line 6116 "util/configparser.c" /* yacc.c:1646 */ break; - case 565: -#line 3023 "./util/configparser.y" /* yacc.c:1646 */ + case 567: +#line 3034 "./util/configparser.y" /* yacc.c:1646 */ { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_timeout:%s)\n", (yyvsp[0].str))); @@ -6112,11 +6128,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 6116 "util/configparser.c" /* yacc.c:1646 */ +#line 6132 "util/configparser.c" /* yacc.c:1646 */ break; - case 566: -#line 3036 "./util/configparser.y" /* yacc.c:1646 */ + case 568: +#line 3047 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tcp_connection_limit:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if (atoi((yyvsp[0].str)) < 0) @@ -6126,11 +6142,11 @@ yyreduce: fatal_exit("out of memory adding tcp connection limit"); } } -#line 6130 "util/configparser.c" /* yacc.c:1646 */ +#line 6146 "util/configparser.c" /* yacc.c:1646 */ break; -#line 6134 "util/configparser.c" /* yacc.c:1646 */ +#line 6150 "util/configparser.c" /* yacc.c:1646 */ default: break; } /* User semantic actions sometimes alter yychar, and that requires @@ -6358,7 +6374,7 @@ yyreturn: #endif return yyresult; } -#line 3046 "./util/configparser.y" /* yacc.c:1906 */ +#line 3057 "./util/configparser.y" /* yacc.c:1906 */ /* parse helper routines could be here */ diff --git a/util/configparser.h b/util/configparser.h index 511a44f10..bb9e21eb4 100644 --- a/util/configparser.h +++ b/util/configparser.h @@ -313,7 +313,8 @@ extern int yydebug; VAR_TAGS = 523, VAR_RPZ_ACTION_OVERRIDE = 524, VAR_RPZ_CNAME_OVERRIDE = 525, - VAR_RPZ_LOG = 526 + VAR_RPZ_LOG = 526, + VAR_RPZ_LOG_NAME = 527 }; #endif /* Tokens. */ @@ -586,6 +587,7 @@ extern int yydebug; #define VAR_RPZ_ACTION_OVERRIDE 524 #define VAR_RPZ_CNAME_OVERRIDE 525 #define VAR_RPZ_LOG 526 +#define VAR_RPZ_LOG_NAME 527 /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED @@ -596,7 +598,7 @@ union YYSTYPE char* str; -#line 600 "util/configparser.h" /* yacc.c:1909 */ +#line 602 "util/configparser.h" /* yacc.c:1909 */ }; typedef union YYSTYPE YYSTYPE; diff --git a/util/configparser.y b/util/configparser.y index ebe1eeaa6..e4537aa31 100644 --- a/util/configparser.y +++ b/util/configparser.y @@ -167,7 +167,7 @@ extern struct config_parser_state* cfg_parser; %token VAR_UNKNOWN_SERVER_TIME_LIMIT VAR_LOG_TAG_QUERYREPLY %token VAR_STREAM_WAIT_SIZE VAR_TLS_CIPHERS VAR_TLS_CIPHERSUITES %token VAR_TLS_SESSION_TICKET_KEYS VAR_RPZ VAR_TAGS VAR_RPZ_ACTION_OVERRIDE -%token VAR_RPZ_CNAME_OVERRIDE VAR_RPZ_LOG +%token VAR_RPZ_CNAME_OVERRIDE VAR_RPZ_LOG VAR_RPZ_LOG_NAME %% toplevelvars: /* empty */ | toplevelvars toplevelvar ; @@ -405,6 +405,17 @@ rpz_log: VAR_RPZ_LOG STRING_ARG } ; +rpz_log_name: VAR_RPZ_LOG_NAME STRING_ARG + { + OUTYY(("P(rpz_log_name:%s)\n", $2)); + if(cfg_parser->cfg->auths->rpz_log_name) + yyerror("RPZ log name, there can only be one " + "rpz-log-name per rpz"); + free(cfg_parser->cfg->auths->rpz_log_name); + cfg_parser->cfg->auths->rpz_log_name = $2; + } + ; + rpzstart: VAR_RPZ { struct config_auth* s; @@ -426,7 +437,7 @@ contents_rpz: contents_rpz content_rpz | ; content_rpz: auth_name | auth_zonefile | rpz_tag | auth_master | auth_url | auth_allow_notify | rpz_action_override | rpz_cname_override | - rpz_log + rpz_log | rpz_log_name ; server_num_threads: VAR_NUM_THREADS STRING_ARG { From bc83e0b01691fdf766ad2318414a620e829e1c07 Mon Sep 17 00:00:00 2001 From: Ralph Dolmans Date: Tue, 4 Jun 2019 12:38:44 +0200 Subject: [PATCH 11/56] fix double free issue --- doc/example.conf.in | 13 +++++++++++++ services/rpz.c | 10 +++------- util/config_file.c | 6 ++++-- 3 files changed, 20 insertions(+), 9 deletions(-) diff --git a/doc/example.conf.in b/doc/example.conf.in index c78156fe1..be1606fa1 100644 --- a/doc/example.conf.in +++ b/doc/example.conf.in @@ -991,3 +991,16 @@ remote-control: # redis-server-port: 6379 # # timeout (in ms) for communication with the redis server # redis-timeout: 100 + +# Response Policy Zones +# RPZ policies. Applied in order of configuration. QNAME trigger is the only +# supported trigger. Supported actions are: NXDOMAIN, NODATA, PASSTHRU, DROP and +# Local Data. Policy can be loaded from file or using zone transfer. +# rpz: +# name: "rpz.example.com" +# zonefile: "rpz.example.com" +# rpz-action-override: cname +# rpz-cname-override: www.example.org +# rpz-log: yes +# rpz-log-name: "example policy" +# tags: "example" diff --git a/services/rpz.c b/services/rpz.c index 1e3d39fab..fdc10b8dd 100644 --- a/services/rpz.c +++ b/services/rpz.c @@ -258,6 +258,7 @@ void rpz_delete(struct rpz* r) local_zones_delete(r->local_zones); regional_destroy(r->region); free(r->taglist); + free(r->log_name); free(r); } @@ -334,12 +335,10 @@ rpz_create(struct config_auth* p) free(r); return 0; } - r->taglist = p->rpz_taglist; r->taglistlen = p->rpz_taglistlen; + r->taglist = memdup(p->rpz_taglist, r->taglistlen); if(p->rpz_action_override) { r->action_override = rpz_config_to_action(p->rpz_action_override); - free(p->rpz_action_override); - p->rpz_action_override = NULL; } else r->action_override = RPZ_NO_OVERRIDE_ACTION; @@ -358,12 +357,9 @@ rpz_create(struct config_auth* p) if(sldns_str2wire_dname_buf(p->rpz_cname, nm, &nmlen) != 0) { log_err("cannot parse RPZ cname override: %s", p->rpz_cname); - free(p->rpz_cname); free(r); return 0; } - free(p->rpz_cname); - p->rpz_cname = NULL; r->cname_override = new_cname_override(r->region, nm, nmlen); if(!r->cname_override) { free(r); @@ -371,7 +367,7 @@ rpz_create(struct config_auth* p) } } r->log = p->rpz_log; - r->log_name = p->rpz_log_name; + r->log_name = strdup(p->rpz_log_name); return r; } diff --git a/util/config_file.c b/util/config_file.c index c12dc88d8..dbd5a7bad 100644 --- a/util/config_file.c +++ b/util/config_file.c @@ -1268,8 +1268,10 @@ config_delauth(struct config_auth* p) config_delstrlist(p->urls); config_delstrlist(p->allow_notify); free(p->zonefile); - if(p->rpz_taglist) - free(p->rpz_taglist); + free(p->rpz_taglist); + free(p->rpz_action_override); + free(p->rpz_cname); + free(p->rpz_log_name); free(p); } From a77c35ef50833a8cc6f506190ba430f16e8cab6f Mon Sep 17 00:00:00 2001 From: Ralph Dolmans Date: Tue, 4 Jun 2019 15:39:08 +0200 Subject: [PATCH 12/56] Add RPZ config options to unbound.conf man page. --- doc/unbound.conf.5.in | 50 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/doc/unbound.conf.5.in b/doc/unbound.conf.5.in index eff757e67..cee2393b4 100644 --- a/doc/unbound.conf.5.in +++ b/doc/unbound.conf.5.in @@ -2073,6 +2073,56 @@ If this timeout expires Unbound closes the connection, treats it as if the Redis server does not have the requested data, and will try to re-establish a new connection later. This option defaults to 100 milliseconds. +.SS Response Policy Zone Options +.LP +Response Policy Zones are configured with \fBrpz:\fR, and each one must have a +\fBname:\fR. There can be multiple ones, by listing multiple rpz clauses, each +with a different name. RPZ clauses are applied in order of configuration. +.P +Only the QNAME trigger is supported. The supported RPZ actions are: NXDOMAIN, +NODATA, PASSTHRU, DROP and Local Data. RPZ QNAME triggers are applied after +\fBlocal-zones\fR and before \fBauth-zones\fR. +.TP +.B name: \fI +Name of the authority zone. +.TP +.B master: \fI +Where to download a copy of the zone from, with AXFR and IXFR. Multiple +masters can be specified. They are all tried if one fails. +.TP +.B allow\-notify: \fI +With allow\-notify you can specify additional sources of notifies. +When notified, the server attempts to first probe and then zone transfer. +If the notify is from a master, it first attempts that master. Otherwise +other masters are attempted. If there are no masters, but only urls, the +file is downloaded when notified. The masters from master: statements are +allowed notify by default. +.TP +.B zonefile: \fI +The filename where the zone is stored. If not given then no zonefile is used. +If the file does not exist or is empty, unbound will attempt to fetch zone +data (eg. from the master servers). +.TP +.B rpz\-action\-override: \fI +Always use this RPZ action for matching triggers from this zone. Possible action +are: nxdomain, nodata, passthru, drop, disabled and cname. +.TP +.B rpz\-cname\-override: \fI +The CNAME target domain to use if the cname action is configured for +\fBrpz\-action\-override\fR. +.TP +.B rpz\-log: \fI +Log all applied RPZ actions. Default is no. +.TP +.B rpz\-log\-name: \fI +Specify a string to be part of the log line, for easy referencing. +.TP +.B tags: \fI +Limit the policies from this RPZ clause to clients with a matching tag. Tags +need to be defined in \fBdefine\-tag\fR and can be assiged to client addresses +using \fBaccess\-control\-tag\fR. Enclose list of tags in quotes ("") and put +spaces between tags. If no tags are specified the policies from this clause will +be applied for all clients. .SH "MEMORY CONTROL EXAMPLE" In the example config settings below memory usage is reduced. Some service levels are lower, notable very large data and a high TCP load are no longer From 3021e320dd8ce6eb41fa0022e93d34acd361b23f Mon Sep 17 00:00:00 2001 From: Ralph Dolmans Date: Wed, 5 Jun 2019 14:26:57 +0200 Subject: [PATCH 13/56] Only strdup rpz_log_name when configured --- services/rpz.c | 3 +- util/configparser.c | 1120 +++++++++++++++++++++---------------------- util/configparser.y | 6 - 3 files changed, 559 insertions(+), 570 deletions(-) diff --git a/services/rpz.c b/services/rpz.c index fdc10b8dd..b19157b03 100644 --- a/services/rpz.c +++ b/services/rpz.c @@ -367,7 +367,8 @@ rpz_create(struct config_auth* p) } } r->log = p->rpz_log; - r->log_name = strdup(p->rpz_log_name); + if(p->rpz_log_name) + r->log_name = strdup(p->rpz_log_name); return r; } diff --git a/util/configparser.c b/util/configparser.c index 05b65090f..9264e32d5 100644 --- a/util/configparser.c +++ b/util/configparser.c @@ -1045,38 +1045,38 @@ static const yytype_uint16 yyrline[] = 304, 304, 304, 304, 305, 305, 307, 321, 322, 323, 323, 323, 323, 324, 324, 324, 326, 343, 344, 345, 345, 345, 345, 346, 346, 346, 347, 350, 370, 387, - 398, 408, 419, 436, 437, 438, 438, 438, 438, 438, - 439, 439, 439, 440, 440, 442, 451, 460, 471, 480, - 489, 498, 509, 518, 529, 542, 557, 568, 585, 602, - 619, 636, 651, 666, 679, 694, 703, 712, 721, 730, - 739, 748, 757, 766, 775, 784, 793, 802, 811, 824, - 833, 846, 855, 864, 873, 880, 887, 896, 903, 912, - 920, 927, 934, 942, 951, 960, 974, 983, 992, 1001, - 1010, 1019, 1028, 1035, 1042, 1068, 1076, 1083, 1090, 1097, - 1104, 1112, 1120, 1128, 1135, 1146, 1157, 1164, 1173, 1182, - 1191, 1198, 1205, 1213, 1221, 1231, 1241, 1251, 1259, 1272, - 1283, 1291, 1304, 1313, 1322, 1331, 1341, 1351, 1359, 1372, - 1381, 1389, 1398, 1406, 1419, 1428, 1435, 1445, 1455, 1465, - 1475, 1485, 1495, 1505, 1515, 1522, 1529, 1536, 1545, 1554, - 1563, 1572, 1579, 1589, 1609, 1616, 1634, 1647, 1660, 1669, - 1678, 1687, 1696, 1706, 1716, 1727, 1736, 1745, 1754, 1763, - 1776, 1789, 1798, 1805, 1814, 1823, 1832, 1841, 1849, 1862, - 1870, 1903, 1910, 1925, 1935, 1945, 1952, 1959, 1966, 1975, - 1983, 1997, 2018, 2039, 2051, 2063, 2075, 2084, 2105, 2115, - 2124, 2132, 2140, 2153, 2166, 2181, 2196, 2205, 2214, 2220, - 2229, 2238, 2248, 2258, 2271, 2284, 2296, 2310, 2322, 2336, - 2346, 2353, 2360, 2369, 2378, 2388, 2398, 2408, 2415, 2422, - 2431, 2440, 2450, 2460, 2467, 2474, 2481, 2489, 2499, 2509, - 2519, 2529, 2561, 2571, 2579, 2587, 2602, 2611, 2616, 2617, - 2618, 2618, 2618, 2619, 2619, 2619, 2620, 2620, 2622, 2632, - 2641, 2648, 2655, 2662, 2669, 2676, 2683, 2688, 2689, 2690, - 2690, 2691, 2691, 2692, 2692, 2693, 2694, 2695, 2696, 2697, - 2698, 2700, 2709, 2716, 2725, 2734, 2741, 2748, 2758, 2768, - 2778, 2788, 2798, 2808, 2813, 2814, 2815, 2817, 2823, 2833, - 2840, 2849, 2857, 2862, 2863, 2865, 2865, 2865, 2866, 2866, - 2867, 2868, 2869, 2870, 2871, 2873, 2883, 2892, 2899, 2908, - 2915, 2924, 2932, 2945, 2953, 2966, 2971, 2972, 2973, 2973, - 2974, 2974, 2974, 2976, 2991, 3006, 3018, 3033, 3046 + 395, 405, 413, 430, 431, 432, 432, 432, 432, 432, + 433, 433, 433, 434, 434, 436, 445, 454, 465, 474, + 483, 492, 503, 512, 523, 536, 551, 562, 579, 596, + 613, 630, 645, 660, 673, 688, 697, 706, 715, 724, + 733, 742, 751, 760, 769, 778, 787, 796, 805, 818, + 827, 840, 849, 858, 867, 874, 881, 890, 897, 906, + 914, 921, 928, 936, 945, 954, 968, 977, 986, 995, + 1004, 1013, 1022, 1029, 1036, 1062, 1070, 1077, 1084, 1091, + 1098, 1106, 1114, 1122, 1129, 1140, 1151, 1158, 1167, 1176, + 1185, 1192, 1199, 1207, 1215, 1225, 1235, 1245, 1253, 1266, + 1277, 1285, 1298, 1307, 1316, 1325, 1335, 1345, 1353, 1366, + 1375, 1383, 1392, 1400, 1413, 1422, 1429, 1439, 1449, 1459, + 1469, 1479, 1489, 1499, 1509, 1516, 1523, 1530, 1539, 1548, + 1557, 1566, 1573, 1583, 1603, 1610, 1628, 1641, 1654, 1663, + 1672, 1681, 1690, 1700, 1710, 1721, 1730, 1739, 1748, 1757, + 1770, 1783, 1792, 1799, 1808, 1817, 1826, 1835, 1843, 1856, + 1864, 1897, 1904, 1919, 1929, 1939, 1946, 1953, 1960, 1969, + 1977, 1991, 2012, 2033, 2045, 2057, 2069, 2078, 2099, 2109, + 2118, 2126, 2134, 2147, 2160, 2175, 2190, 2199, 2208, 2214, + 2223, 2232, 2242, 2252, 2265, 2278, 2290, 2304, 2316, 2330, + 2340, 2347, 2354, 2363, 2372, 2382, 2392, 2402, 2409, 2416, + 2425, 2434, 2444, 2454, 2461, 2468, 2475, 2483, 2493, 2503, + 2513, 2523, 2555, 2565, 2573, 2581, 2596, 2605, 2610, 2611, + 2612, 2612, 2612, 2613, 2613, 2613, 2614, 2614, 2616, 2626, + 2635, 2642, 2649, 2656, 2663, 2670, 2677, 2682, 2683, 2684, + 2684, 2685, 2685, 2686, 2686, 2687, 2688, 2689, 2690, 2691, + 2692, 2694, 2703, 2710, 2719, 2728, 2735, 2742, 2752, 2762, + 2772, 2782, 2792, 2802, 2807, 2808, 2809, 2811, 2817, 2827, + 2834, 2843, 2851, 2856, 2857, 2859, 2859, 2859, 2860, 2860, + 2861, 2862, 2863, 2864, 2865, 2867, 2877, 2886, 2893, 2902, + 2909, 2918, 2926, 2939, 2947, 2960, 2965, 2966, 2967, 2967, + 2968, 2968, 2968, 2970, 2985, 3000, 3012, 3027, 3040 }; #endif @@ -2741,17 +2741,14 @@ yyreduce: #line 388 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(rpz_cname_override:%s)\n", (yyvsp[0].str))); - if(cfg_parser->cfg->auths->rpz_cname) - yyerror("there can only be one CNAME override per " - "RPZ"); free(cfg_parser->cfg->auths->rpz_cname); cfg_parser->cfg->auths->rpz_cname = (yyvsp[0].str); } -#line 2751 "util/configparser.c" /* yacc.c:1646 */ +#line 2748 "util/configparser.c" /* yacc.c:1646 */ break; case 250: -#line 399 "./util/configparser.y" /* yacc.c:1646 */ +#line 396 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(rpz_log:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2759,24 +2756,21 @@ yyreduce: else cfg_parser->cfg->auths->rpz_log = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2763 "util/configparser.c" /* yacc.c:1646 */ +#line 2760 "util/configparser.c" /* yacc.c:1646 */ break; case 251: -#line 409 "./util/configparser.y" /* yacc.c:1646 */ +#line 406 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(rpz_log_name:%s)\n", (yyvsp[0].str))); - if(cfg_parser->cfg->auths->rpz_log_name) - yyerror("RPZ log name, there can only be one " - "rpz-log-name per rpz"); free(cfg_parser->cfg->auths->rpz_log_name); cfg_parser->cfg->auths->rpz_log_name = (yyvsp[0].str); } -#line 2776 "util/configparser.c" /* yacc.c:1646 */ +#line 2770 "util/configparser.c" /* yacc.c:1646 */ break; case 252: -#line 420 "./util/configparser.y" /* yacc.c:1646 */ +#line 414 "./util/configparser.y" /* yacc.c:1646 */ { struct config_auth* s; OUTYY(("\nP(rpz:)\n")); @@ -2792,11 +2786,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 2796 "util/configparser.c" /* yacc.c:1646 */ +#line 2790 "util/configparser.c" /* yacc.c:1646 */ break; case 265: -#line 443 "./util/configparser.y" /* yacc.c:1646 */ +#line 437 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_num_threads:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -2804,11 +2798,11 @@ yyreduce: else cfg_parser->cfg->num_threads = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2808 "util/configparser.c" /* yacc.c:1646 */ +#line 2802 "util/configparser.c" /* yacc.c:1646 */ break; case 266: -#line 452 "./util/configparser.y" /* yacc.c:1646 */ +#line 446 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_verbosity:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -2816,11 +2810,11 @@ yyreduce: else cfg_parser->cfg->verbosity = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2820 "util/configparser.c" /* yacc.c:1646 */ +#line 2814 "util/configparser.c" /* yacc.c:1646 */ break; case 267: -#line 461 "./util/configparser.y" /* yacc.c:1646 */ +#line 455 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_statistics_interval:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "") == 0 || strcmp((yyvsp[0].str), "0") == 0) @@ -2830,11 +2824,11 @@ yyreduce: else cfg_parser->cfg->stat_interval = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2834 "util/configparser.c" /* yacc.c:1646 */ +#line 2828 "util/configparser.c" /* yacc.c:1646 */ break; case 268: -#line 472 "./util/configparser.y" /* yacc.c:1646 */ +#line 466 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_statistics_cumulative:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2842,11 +2836,11 @@ yyreduce: else cfg_parser->cfg->stat_cumulative = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2846 "util/configparser.c" /* yacc.c:1646 */ +#line 2840 "util/configparser.c" /* yacc.c:1646 */ break; case 269: -#line 481 "./util/configparser.y" /* yacc.c:1646 */ +#line 475 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_extended_statistics:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2854,11 +2848,11 @@ yyreduce: else cfg_parser->cfg->stat_extended = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2858 "util/configparser.c" /* yacc.c:1646 */ +#line 2852 "util/configparser.c" /* yacc.c:1646 */ break; case 270: -#line 490 "./util/configparser.y" /* yacc.c:1646 */ +#line 484 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_shm_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2866,11 +2860,11 @@ yyreduce: else cfg_parser->cfg->shm_enable = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2870 "util/configparser.c" /* yacc.c:1646 */ +#line 2864 "util/configparser.c" /* yacc.c:1646 */ break; case 271: -#line 499 "./util/configparser.y" /* yacc.c:1646 */ +#line 493 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_shm_key:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "") == 0 || strcmp((yyvsp[0].str), "0") == 0) @@ -2880,11 +2874,11 @@ yyreduce: else cfg_parser->cfg->shm_key = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2884 "util/configparser.c" /* yacc.c:1646 */ +#line 2878 "util/configparser.c" /* yacc.c:1646 */ break; case 272: -#line 510 "./util/configparser.y" /* yacc.c:1646 */ +#line 504 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -2892,11 +2886,11 @@ yyreduce: else cfg_parser->cfg->port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2896 "util/configparser.c" /* yacc.c:1646 */ +#line 2890 "util/configparser.c" /* yacc.c:1646 */ break; case 273: -#line 519 "./util/configparser.y" /* yacc.c:1646 */ +#line 513 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(server_send_client_subnet:%s)\n", (yyvsp[0].str))); @@ -2906,11 +2900,11 @@ yyreduce: OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); #endif } -#line 2910 "util/configparser.c" /* yacc.c:1646 */ +#line 2904 "util/configparser.c" /* yacc.c:1646 */ break; case 274: -#line 530 "./util/configparser.y" /* yacc.c:1646 */ +#line 524 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(server_client_subnet_zone:%s)\n", (yyvsp[0].str))); @@ -2921,11 +2915,11 @@ yyreduce: OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); #endif } -#line 2925 "util/configparser.c" /* yacc.c:1646 */ +#line 2919 "util/configparser.c" /* yacc.c:1646 */ break; case 275: -#line 543 "./util/configparser.y" /* yacc.c:1646 */ +#line 537 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(server_client_subnet_always_forward:%s)\n", (yyvsp[0].str))); @@ -2939,11 +2933,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 2943 "util/configparser.c" /* yacc.c:1646 */ +#line 2937 "util/configparser.c" /* yacc.c:1646 */ break; case 276: -#line 558 "./util/configparser.y" /* yacc.c:1646 */ +#line 552 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(client_subnet_opcode:%s)\n", (yyvsp[0].str))); @@ -2953,11 +2947,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 2957 "util/configparser.c" /* yacc.c:1646 */ +#line 2951 "util/configparser.c" /* yacc.c:1646 */ break; case 277: -#line 569 "./util/configparser.y" /* yacc.c:1646 */ +#line 563 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(max_client_subnet_ipv4:%s)\n", (yyvsp[0].str))); @@ -2973,11 +2967,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 2977 "util/configparser.c" /* yacc.c:1646 */ +#line 2971 "util/configparser.c" /* yacc.c:1646 */ break; case 278: -#line 586 "./util/configparser.y" /* yacc.c:1646 */ +#line 580 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(max_client_subnet_ipv6:%s)\n", (yyvsp[0].str))); @@ -2993,11 +2987,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 2997 "util/configparser.c" /* yacc.c:1646 */ +#line 2991 "util/configparser.c" /* yacc.c:1646 */ break; case 279: -#line 603 "./util/configparser.y" /* yacc.c:1646 */ +#line 597 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(min_client_subnet_ipv4:%s)\n", (yyvsp[0].str))); @@ -3013,11 +3007,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3017 "util/configparser.c" /* yacc.c:1646 */ +#line 3011 "util/configparser.c" /* yacc.c:1646 */ break; case 280: -#line 620 "./util/configparser.y" /* yacc.c:1646 */ +#line 614 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(min_client_subnet_ipv6:%s)\n", (yyvsp[0].str))); @@ -3033,11 +3027,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3037 "util/configparser.c" /* yacc.c:1646 */ +#line 3031 "util/configparser.c" /* yacc.c:1646 */ break; case 281: -#line 637 "./util/configparser.y" /* yacc.c:1646 */ +#line 631 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(max_ecs_tree_size_ipv4:%s)\n", (yyvsp[0].str))); @@ -3051,11 +3045,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3055 "util/configparser.c" /* yacc.c:1646 */ +#line 3049 "util/configparser.c" /* yacc.c:1646 */ break; case 282: -#line 652 "./util/configparser.y" /* yacc.c:1646 */ +#line 646 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(max_ecs_tree_size_ipv6:%s)\n", (yyvsp[0].str))); @@ -3069,11 +3063,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3073 "util/configparser.c" /* yacc.c:1646 */ +#line 3067 "util/configparser.c" /* yacc.c:1646 */ break; case 283: -#line 667 "./util/configparser.y" /* yacc.c:1646 */ +#line 661 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_interface:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->num_ifs == 0) @@ -3085,11 +3079,11 @@ yyreduce: else cfg_parser->cfg->ifs[cfg_parser->cfg->num_ifs++] = (yyvsp[0].str); } -#line 3089 "util/configparser.c" /* yacc.c:1646 */ +#line 3083 "util/configparser.c" /* yacc.c:1646 */ break; case 284: -#line 680 "./util/configparser.y" /* yacc.c:1646 */ +#line 674 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_interface:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->num_out_ifs == 0) @@ -3103,11 +3097,11 @@ yyreduce: cfg_parser->cfg->out_ifs[ cfg_parser->cfg->num_out_ifs++] = (yyvsp[0].str); } -#line 3107 "util/configparser.c" /* yacc.c:1646 */ +#line 3101 "util/configparser.c" /* yacc.c:1646 */ break; case 285: -#line 695 "./util/configparser.y" /* yacc.c:1646 */ +#line 689 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_range:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3115,11 +3109,11 @@ yyreduce: else cfg_parser->cfg->outgoing_num_ports = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3119 "util/configparser.c" /* yacc.c:1646 */ +#line 3113 "util/configparser.c" /* yacc.c:1646 */ break; case 286: -#line 704 "./util/configparser.y" /* yacc.c:1646 */ +#line 698 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_port_permit:%s)\n", (yyvsp[0].str))); if(!cfg_mark_ports((yyvsp[0].str), 1, @@ -3127,11 +3121,11 @@ yyreduce: yyerror("port number or range (\"low-high\") expected"); free((yyvsp[0].str)); } -#line 3131 "util/configparser.c" /* yacc.c:1646 */ +#line 3125 "util/configparser.c" /* yacc.c:1646 */ break; case 287: -#line 713 "./util/configparser.y" /* yacc.c:1646 */ +#line 707 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_port_avoid:%s)\n", (yyvsp[0].str))); if(!cfg_mark_ports((yyvsp[0].str), 0, @@ -3139,11 +3133,11 @@ yyreduce: yyerror("port number or range (\"low-high\") expected"); free((yyvsp[0].str)); } -#line 3143 "util/configparser.c" /* yacc.c:1646 */ +#line 3137 "util/configparser.c" /* yacc.c:1646 */ break; case 288: -#line 722 "./util/configparser.y" /* yacc.c:1646 */ +#line 716 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_num_tcp:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3151,11 +3145,11 @@ yyreduce: else cfg_parser->cfg->outgoing_num_tcp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3155 "util/configparser.c" /* yacc.c:1646 */ +#line 3149 "util/configparser.c" /* yacc.c:1646 */ break; case 289: -#line 731 "./util/configparser.y" /* yacc.c:1646 */ +#line 725 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_incoming_num_tcp:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3163,11 +3157,11 @@ yyreduce: else cfg_parser->cfg->incoming_num_tcp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3167 "util/configparser.c" /* yacc.c:1646 */ +#line 3161 "util/configparser.c" /* yacc.c:1646 */ break; case 290: -#line 740 "./util/configparser.y" /* yacc.c:1646 */ +#line 734 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_interface_automatic:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3175,11 +3169,11 @@ yyreduce: else cfg_parser->cfg->if_automatic = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3179 "util/configparser.c" /* yacc.c:1646 */ +#line 3173 "util/configparser.c" /* yacc.c:1646 */ break; case 291: -#line 749 "./util/configparser.y" /* yacc.c:1646 */ +#line 743 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_ip4:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3187,11 +3181,11 @@ yyreduce: else cfg_parser->cfg->do_ip4 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3191 "util/configparser.c" /* yacc.c:1646 */ +#line 3185 "util/configparser.c" /* yacc.c:1646 */ break; case 292: -#line 758 "./util/configparser.y" /* yacc.c:1646 */ +#line 752 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_ip6:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3199,11 +3193,11 @@ yyreduce: else cfg_parser->cfg->do_ip6 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3203 "util/configparser.c" /* yacc.c:1646 */ +#line 3197 "util/configparser.c" /* yacc.c:1646 */ break; case 293: -#line 767 "./util/configparser.y" /* yacc.c:1646 */ +#line 761 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_udp:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3211,11 +3205,11 @@ yyreduce: else cfg_parser->cfg->do_udp = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3215 "util/configparser.c" /* yacc.c:1646 */ +#line 3209 "util/configparser.c" /* yacc.c:1646 */ break; case 294: -#line 776 "./util/configparser.y" /* yacc.c:1646 */ +#line 770 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_tcp:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3223,11 +3217,11 @@ yyreduce: else cfg_parser->cfg->do_tcp = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3227 "util/configparser.c" /* yacc.c:1646 */ +#line 3221 "util/configparser.c" /* yacc.c:1646 */ break; case 295: -#line 785 "./util/configparser.y" /* yacc.c:1646 */ +#line 779 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_prefer_ip6:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3235,11 +3229,11 @@ yyreduce: else cfg_parser->cfg->prefer_ip6 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3239 "util/configparser.c" /* yacc.c:1646 */ +#line 3233 "util/configparser.c" /* yacc.c:1646 */ break; case 296: -#line 794 "./util/configparser.y" /* yacc.c:1646 */ +#line 788 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tcp_mss:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3247,11 +3241,11 @@ yyreduce: else cfg_parser->cfg->tcp_mss = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3251 "util/configparser.c" /* yacc.c:1646 */ +#line 3245 "util/configparser.c" /* yacc.c:1646 */ break; case 297: -#line 803 "./util/configparser.y" /* yacc.c:1646 */ +#line 797 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_tcp_mss:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3259,11 +3253,11 @@ yyreduce: else cfg_parser->cfg->outgoing_tcp_mss = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3263 "util/configparser.c" /* yacc.c:1646 */ +#line 3257 "util/configparser.c" /* yacc.c:1646 */ break; case 298: -#line 812 "./util/configparser.y" /* yacc.c:1646 */ +#line 806 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tcp_idle_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3275,11 +3269,11 @@ yyreduce: else cfg_parser->cfg->tcp_idle_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3279 "util/configparser.c" /* yacc.c:1646 */ +#line 3273 "util/configparser.c" /* yacc.c:1646 */ break; case 299: -#line 825 "./util/configparser.y" /* yacc.c:1646 */ +#line 819 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tcp_keepalive:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3287,11 +3281,11 @@ yyreduce: else cfg_parser->cfg->do_tcp_keepalive = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3291 "util/configparser.c" /* yacc.c:1646 */ +#line 3285 "util/configparser.c" /* yacc.c:1646 */ break; case 300: -#line 834 "./util/configparser.y" /* yacc.c:1646 */ +#line 828 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tcp_keepalive_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3303,11 +3297,11 @@ yyreduce: else cfg_parser->cfg->tcp_keepalive_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3307 "util/configparser.c" /* yacc.c:1646 */ +#line 3301 "util/configparser.c" /* yacc.c:1646 */ break; case 301: -#line 847 "./util/configparser.y" /* yacc.c:1646 */ +#line 841 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tcp_upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3315,11 +3309,11 @@ yyreduce: else cfg_parser->cfg->tcp_upstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3319 "util/configparser.c" /* yacc.c:1646 */ +#line 3313 "util/configparser.c" /* yacc.c:1646 */ break; case 302: -#line 856 "./util/configparser.y" /* yacc.c:1646 */ +#line 850 "./util/configparser.y" /* yacc.c:1646 */ { 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) @@ -3327,11 +3321,11 @@ yyreduce: else cfg_parser->cfg->udp_upstream_without_downstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3331 "util/configparser.c" /* yacc.c:1646 */ +#line 3325 "util/configparser.c" /* yacc.c:1646 */ break; case 303: -#line 865 "./util/configparser.y" /* yacc.c:1646 */ +#line 859 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ssl_upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3339,31 +3333,31 @@ yyreduce: else cfg_parser->cfg->ssl_upstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3343 "util/configparser.c" /* yacc.c:1646 */ +#line 3337 "util/configparser.c" /* yacc.c:1646 */ break; case 304: -#line 874 "./util/configparser.y" /* yacc.c:1646 */ +#line 868 "./util/configparser.y" /* yacc.c:1646 */ { 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 3353 "util/configparser.c" /* yacc.c:1646 */ +#line 3347 "util/configparser.c" /* yacc.c:1646 */ break; case 305: -#line 881 "./util/configparser.y" /* yacc.c:1646 */ +#line 875 "./util/configparser.y" /* yacc.c:1646 */ { 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 3363 "util/configparser.c" /* yacc.c:1646 */ +#line 3357 "util/configparser.c" /* yacc.c:1646 */ break; case 306: -#line 888 "./util/configparser.y" /* yacc.c:1646 */ +#line 882 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ssl_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3371,21 +3365,21 @@ yyreduce: else cfg_parser->cfg->ssl_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3375 "util/configparser.c" /* yacc.c:1646 */ +#line 3369 "util/configparser.c" /* yacc.c:1646 */ break; case 307: -#line 897 "./util/configparser.y" /* yacc.c:1646 */ +#line 891 "./util/configparser.y" /* yacc.c:1646 */ { 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 3385 "util/configparser.c" /* yacc.c:1646 */ +#line 3379 "util/configparser.c" /* yacc.c:1646 */ break; case 308: -#line 904 "./util/configparser.y" /* yacc.c:1646 */ +#line 898 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tls_win_cert:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3393,53 +3387,53 @@ yyreduce: else cfg_parser->cfg->tls_win_cert = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3397 "util/configparser.c" /* yacc.c:1646 */ +#line 3391 "util/configparser.c" /* yacc.c:1646 */ break; case 309: -#line 913 "./util/configparser.y" /* yacc.c:1646 */ +#line 907 "./util/configparser.y" /* yacc.c:1646 */ { 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 3408 "util/configparser.c" /* yacc.c:1646 */ +#line 3402 "util/configparser.c" /* yacc.c:1646 */ break; case 310: -#line 921 "./util/configparser.y" /* yacc.c:1646 */ +#line 915 "./util/configparser.y" /* yacc.c:1646 */ { 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 3418 "util/configparser.c" /* yacc.c:1646 */ +#line 3412 "util/configparser.c" /* yacc.c:1646 */ break; case 311: -#line 928 "./util/configparser.y" /* yacc.c:1646 */ +#line 922 "./util/configparser.y" /* yacc.c:1646 */ { 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 3428 "util/configparser.c" /* yacc.c:1646 */ +#line 3422 "util/configparser.c" /* yacc.c:1646 */ break; case 312: -#line 935 "./util/configparser.y" /* yacc.c:1646 */ +#line 929 "./util/configparser.y" /* yacc.c:1646 */ { 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 3439 "util/configparser.c" /* yacc.c:1646 */ +#line 3433 "util/configparser.c" /* yacc.c:1646 */ break; case 313: -#line 943 "./util/configparser.y" /* yacc.c:1646 */ +#line 937 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_use_systemd:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3447,11 +3441,11 @@ yyreduce: else cfg_parser->cfg->use_systemd = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3451 "util/configparser.c" /* yacc.c:1646 */ +#line 3445 "util/configparser.c" /* yacc.c:1646 */ break; case 314: -#line 952 "./util/configparser.y" /* yacc.c:1646 */ +#line 946 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_daemonize:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3459,11 +3453,11 @@ yyreduce: else cfg_parser->cfg->do_daemonize = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3463 "util/configparser.c" /* yacc.c:1646 */ +#line 3457 "util/configparser.c" /* yacc.c:1646 */ break; case 315: -#line 961 "./util/configparser.y" /* yacc.c:1646 */ +#line 955 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_use_syslog:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3476,11 +3470,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3480 "util/configparser.c" /* yacc.c:1646 */ +#line 3474 "util/configparser.c" /* yacc.c:1646 */ break; case 316: -#line 975 "./util/configparser.y" /* yacc.c:1646 */ +#line 969 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_time_ascii:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3488,11 +3482,11 @@ yyreduce: else cfg_parser->cfg->log_time_ascii = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3492 "util/configparser.c" /* yacc.c:1646 */ +#line 3486 "util/configparser.c" /* yacc.c:1646 */ break; case 317: -#line 984 "./util/configparser.y" /* yacc.c:1646 */ +#line 978 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_queries:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3500,11 +3494,11 @@ yyreduce: else cfg_parser->cfg->log_queries = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3504 "util/configparser.c" /* yacc.c:1646 */ +#line 3498 "util/configparser.c" /* yacc.c:1646 */ break; case 318: -#line 993 "./util/configparser.y" /* yacc.c:1646 */ +#line 987 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_replies:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3512,11 +3506,11 @@ yyreduce: else cfg_parser->cfg->log_replies = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3516 "util/configparser.c" /* yacc.c:1646 */ +#line 3510 "util/configparser.c" /* yacc.c:1646 */ break; case 319: -#line 1002 "./util/configparser.y" /* yacc.c:1646 */ +#line 996 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_tag_queryreply:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3524,11 +3518,11 @@ yyreduce: else cfg_parser->cfg->log_tag_queryreply = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3528 "util/configparser.c" /* yacc.c:1646 */ +#line 3522 "util/configparser.c" /* yacc.c:1646 */ break; case 320: -#line 1011 "./util/configparser.y" /* yacc.c:1646 */ +#line 1005 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_servfail:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3536,11 +3530,11 @@ yyreduce: else cfg_parser->cfg->log_servfail = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3540 "util/configparser.c" /* yacc.c:1646 */ +#line 3534 "util/configparser.c" /* yacc.c:1646 */ break; case 321: -#line 1020 "./util/configparser.y" /* yacc.c:1646 */ +#line 1014 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_local_actions:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3548,31 +3542,31 @@ yyreduce: else cfg_parser->cfg->log_local_actions = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3552 "util/configparser.c" /* yacc.c:1646 */ +#line 3546 "util/configparser.c" /* yacc.c:1646 */ break; case 322: -#line 1029 "./util/configparser.y" /* yacc.c:1646 */ +#line 1023 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_chroot:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->chrootdir); cfg_parser->cfg->chrootdir = (yyvsp[0].str); } -#line 3562 "util/configparser.c" /* yacc.c:1646 */ +#line 3556 "util/configparser.c" /* yacc.c:1646 */ break; case 323: -#line 1036 "./util/configparser.y" /* yacc.c:1646 */ +#line 1030 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_username:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->username); cfg_parser->cfg->username = (yyvsp[0].str); } -#line 3572 "util/configparser.c" /* yacc.c:1646 */ +#line 3566 "util/configparser.c" /* yacc.c:1646 */ break; case 324: -#line 1043 "./util/configparser.y" /* yacc.c:1646 */ +#line 1037 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_directory:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->directory); @@ -3597,105 +3591,105 @@ yyreduce: } } } -#line 3601 "util/configparser.c" /* yacc.c:1646 */ +#line 3595 "util/configparser.c" /* yacc.c:1646 */ break; case 325: -#line 1069 "./util/configparser.y" /* yacc.c:1646 */ +#line 1063 "./util/configparser.y" /* yacc.c:1646 */ { 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 3612 "util/configparser.c" /* yacc.c:1646 */ +#line 3606 "util/configparser.c" /* yacc.c:1646 */ break; case 326: -#line 1077 "./util/configparser.y" /* yacc.c:1646 */ +#line 1071 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_pidfile:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->pidfile); cfg_parser->cfg->pidfile = (yyvsp[0].str); } -#line 3622 "util/configparser.c" /* yacc.c:1646 */ +#line 3616 "util/configparser.c" /* yacc.c:1646 */ break; case 327: -#line 1084 "./util/configparser.y" /* yacc.c:1646 */ +#line 1078 "./util/configparser.y" /* yacc.c:1646 */ { 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 3632 "util/configparser.c" /* yacc.c:1646 */ +#line 3626 "util/configparser.c" /* yacc.c:1646 */ break; case 328: -#line 1091 "./util/configparser.y" /* yacc.c:1646 */ +#line 1085 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_dlv_anchor_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dlv_anchor_file); cfg_parser->cfg->dlv_anchor_file = (yyvsp[0].str); } -#line 3642 "util/configparser.c" /* yacc.c:1646 */ +#line 3636 "util/configparser.c" /* yacc.c:1646 */ break; case 329: -#line 1098 "./util/configparser.y" /* yacc.c:1646 */ +#line 1092 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_dlv_anchor:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->dlv_anchor_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3652 "util/configparser.c" /* yacc.c:1646 */ +#line 3646 "util/configparser.c" /* yacc.c:1646 */ break; case 330: -#line 1105 "./util/configparser.y" /* yacc.c:1646 */ +#line 1099 "./util/configparser.y" /* yacc.c:1646 */ { 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 3663 "util/configparser.c" /* yacc.c:1646 */ +#line 3657 "util/configparser.c" /* yacc.c:1646 */ break; case 331: -#line 1113 "./util/configparser.y" /* yacc.c:1646 */ +#line 1107 "./util/configparser.y" /* yacc.c:1646 */ { 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 3674 "util/configparser.c" /* yacc.c:1646 */ +#line 3668 "util/configparser.c" /* yacc.c:1646 */ break; case 332: -#line 1121 "./util/configparser.y" /* yacc.c:1646 */ +#line 1115 "./util/configparser.y" /* yacc.c:1646 */ { 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 3685 "util/configparser.c" /* yacc.c:1646 */ +#line 3679 "util/configparser.c" /* yacc.c:1646 */ break; case 333: -#line 1129 "./util/configparser.y" /* yacc.c:1646 */ +#line 1123 "./util/configparser.y" /* yacc.c:1646 */ { 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 3695 "util/configparser.c" /* yacc.c:1646 */ +#line 3689 "util/configparser.c" /* yacc.c:1646 */ break; case 334: -#line 1136 "./util/configparser.y" /* yacc.c:1646 */ +#line 1130 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_trust_anchor_signaling:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3705,11 +3699,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3709 "util/configparser.c" /* yacc.c:1646 */ +#line 3703 "util/configparser.c" /* yacc.c:1646 */ break; case 335: -#line 1147 "./util/configparser.y" /* yacc.c:1646 */ +#line 1141 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_root_key_sentinel:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3719,21 +3713,21 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3723 "util/configparser.c" /* yacc.c:1646 */ +#line 3717 "util/configparser.c" /* yacc.c:1646 */ break; case 336: -#line 1158 "./util/configparser.y" /* yacc.c:1646 */ +#line 1152 "./util/configparser.y" /* yacc.c:1646 */ { 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 3733 "util/configparser.c" /* yacc.c:1646 */ +#line 3727 "util/configparser.c" /* yacc.c:1646 */ break; case 337: -#line 1165 "./util/configparser.y" /* yacc.c:1646 */ +#line 1159 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_hide_identity:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3741,11 +3735,11 @@ yyreduce: else cfg_parser->cfg->hide_identity = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3745 "util/configparser.c" /* yacc.c:1646 */ +#line 3739 "util/configparser.c" /* yacc.c:1646 */ break; case 338: -#line 1174 "./util/configparser.y" /* yacc.c:1646 */ +#line 1168 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_hide_version:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3753,11 +3747,11 @@ yyreduce: else cfg_parser->cfg->hide_version = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3757 "util/configparser.c" /* yacc.c:1646 */ +#line 3751 "util/configparser.c" /* yacc.c:1646 */ break; case 339: -#line 1183 "./util/configparser.y" /* yacc.c:1646 */ +#line 1177 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_hide_trustanchor:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3765,53 +3759,53 @@ yyreduce: else cfg_parser->cfg->hide_trustanchor = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3769 "util/configparser.c" /* yacc.c:1646 */ +#line 3763 "util/configparser.c" /* yacc.c:1646 */ break; case 340: -#line 1192 "./util/configparser.y" /* yacc.c:1646 */ +#line 1186 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_identity:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->identity); cfg_parser->cfg->identity = (yyvsp[0].str); } -#line 3779 "util/configparser.c" /* yacc.c:1646 */ +#line 3773 "util/configparser.c" /* yacc.c:1646 */ break; case 341: -#line 1199 "./util/configparser.y" /* yacc.c:1646 */ +#line 1193 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_version:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->version); cfg_parser->cfg->version = (yyvsp[0].str); } -#line 3789 "util/configparser.c" /* yacc.c:1646 */ +#line 3783 "util/configparser.c" /* yacc.c:1646 */ break; case 342: -#line 1206 "./util/configparser.y" /* yacc.c:1646 */ +#line 1200 "./util/configparser.y" /* yacc.c:1646 */ { 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 3800 "util/configparser.c" /* yacc.c:1646 */ +#line 3794 "util/configparser.c" /* yacc.c:1646 */ break; case 343: -#line 1214 "./util/configparser.y" /* yacc.c:1646 */ +#line 1208 "./util/configparser.y" /* yacc.c:1646 */ { 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 3811 "util/configparser.c" /* yacc.c:1646 */ +#line 3805 "util/configparser.c" /* yacc.c:1646 */ break; case 344: -#line 1222 "./util/configparser.y" /* yacc.c:1646 */ +#line 1216 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_so_reuseport:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3820,11 +3814,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3824 "util/configparser.c" /* yacc.c:1646 */ +#line 3818 "util/configparser.c" /* yacc.c:1646 */ break; case 345: -#line 1232 "./util/configparser.y" /* yacc.c:1646 */ +#line 1226 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_transparent:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3833,11 +3827,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3837 "util/configparser.c" /* yacc.c:1646 */ +#line 3831 "util/configparser.c" /* yacc.c:1646 */ break; case 346: -#line 1242 "./util/configparser.y" /* yacc.c:1646 */ +#line 1236 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_freebind:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3846,22 +3840,22 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3850 "util/configparser.c" /* yacc.c:1646 */ +#line 3844 "util/configparser.c" /* yacc.c:1646 */ break; case 347: -#line 1252 "./util/configparser.y" /* yacc.c:1646 */ +#line 1246 "./util/configparser.y" /* yacc.c:1646 */ { 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 3861 "util/configparser.c" /* yacc.c:1646 */ +#line 3855 "util/configparser.c" /* yacc.c:1646 */ break; case 348: -#line 1260 "./util/configparser.y" /* yacc.c:1646 */ +#line 1254 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_edns_buffer_size:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3873,11 +3867,11 @@ yyreduce: else cfg_parser->cfg->edns_buffer_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3877 "util/configparser.c" /* yacc.c:1646 */ +#line 3871 "util/configparser.c" /* yacc.c:1646 */ break; case 349: -#line 1273 "./util/configparser.y" /* yacc.c:1646 */ +#line 1267 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_msg_buffer_size:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3887,22 +3881,22 @@ yyreduce: else cfg_parser->cfg->msg_buffer_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3891 "util/configparser.c" /* yacc.c:1646 */ +#line 3885 "util/configparser.c" /* yacc.c:1646 */ break; case 350: -#line 1284 "./util/configparser.y" /* yacc.c:1646 */ +#line 1278 "./util/configparser.y" /* yacc.c:1646 */ { 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 3902 "util/configparser.c" /* yacc.c:1646 */ +#line 3896 "util/configparser.c" /* yacc.c:1646 */ break; case 351: -#line 1292 "./util/configparser.y" /* yacc.c:1646 */ +#line 1286 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_msg_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3914,11 +3908,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 3918 "util/configparser.c" /* yacc.c:1646 */ +#line 3912 "util/configparser.c" /* yacc.c:1646 */ break; case 352: -#line 1305 "./util/configparser.y" /* yacc.c:1646 */ +#line 1299 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_num_queries_per_thread:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3926,11 +3920,11 @@ yyreduce: else cfg_parser->cfg->num_queries_per_thread = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3930 "util/configparser.c" /* yacc.c:1646 */ +#line 3924 "util/configparser.c" /* yacc.c:1646 */ break; case 353: -#line 1314 "./util/configparser.y" /* yacc.c:1646 */ +#line 1308 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_jostle_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3938,11 +3932,11 @@ yyreduce: else cfg_parser->cfg->jostle_time = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3942 "util/configparser.c" /* yacc.c:1646 */ +#line 3936 "util/configparser.c" /* yacc.c:1646 */ break; case 354: -#line 1323 "./util/configparser.y" /* yacc.c:1646 */ +#line 1317 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_delay_close:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3950,11 +3944,11 @@ yyreduce: else cfg_parser->cfg->delay_close = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3954 "util/configparser.c" /* yacc.c:1646 */ +#line 3948 "util/configparser.c" /* yacc.c:1646 */ break; case 355: -#line 1332 "./util/configparser.y" /* yacc.c:1646 */ +#line 1326 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_unblock_lan_zones:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3963,11 +3957,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3967 "util/configparser.c" /* yacc.c:1646 */ +#line 3961 "util/configparser.c" /* yacc.c:1646 */ break; case 356: -#line 1342 "./util/configparser.y" /* yacc.c:1646 */ +#line 1336 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_insecure_lan_zones:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3976,22 +3970,22 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3980 "util/configparser.c" /* yacc.c:1646 */ +#line 3974 "util/configparser.c" /* yacc.c:1646 */ break; case 357: -#line 1352 "./util/configparser.y" /* yacc.c:1646 */ +#line 1346 "./util/configparser.y" /* yacc.c:1646 */ { 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 3991 "util/configparser.c" /* yacc.c:1646 */ +#line 3985 "util/configparser.c" /* yacc.c:1646 */ break; case 358: -#line 1360 "./util/configparser.y" /* yacc.c:1646 */ +#line 1354 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_rrset_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4003,11 +3997,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4007 "util/configparser.c" /* yacc.c:1646 */ +#line 4001 "util/configparser.c" /* yacc.c:1646 */ break; case 359: -#line 1373 "./util/configparser.y" /* yacc.c:1646 */ +#line 1367 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_host_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4015,22 +4009,22 @@ yyreduce: else cfg_parser->cfg->host_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4019 "util/configparser.c" /* yacc.c:1646 */ +#line 4013 "util/configparser.c" /* yacc.c:1646 */ break; case 360: -#line 1382 "./util/configparser.y" /* yacc.c:1646 */ +#line 1376 "./util/configparser.y" /* yacc.c:1646 */ { 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 4030 "util/configparser.c" /* yacc.c:1646 */ +#line 4024 "util/configparser.c" /* yacc.c:1646 */ break; case 361: -#line 1390 "./util/configparser.y" /* yacc.c:1646 */ +#line 1384 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_cache_numhosts:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4038,22 +4032,22 @@ yyreduce: else cfg_parser->cfg->infra_cache_numhosts = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4042 "util/configparser.c" /* yacc.c:1646 */ +#line 4036 "util/configparser.c" /* yacc.c:1646 */ break; case 362: -#line 1399 "./util/configparser.y" /* yacc.c:1646 */ +#line 1393 "./util/configparser.y" /* yacc.c:1646 */ { 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 4053 "util/configparser.c" /* yacc.c:1646 */ +#line 4047 "util/configparser.c" /* yacc.c:1646 */ break; case 363: -#line 1407 "./util/configparser.y" /* yacc.c:1646 */ +#line 1401 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4065,11 +4059,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4069 "util/configparser.c" /* yacc.c:1646 */ +#line 4063 "util/configparser.c" /* yacc.c:1646 */ break; case 364: -#line 1420 "./util/configparser.y" /* yacc.c:1646 */ +#line 1414 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_cache_min_rtt:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4077,21 +4071,21 @@ yyreduce: else cfg_parser->cfg->infra_cache_min_rtt = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4081 "util/configparser.c" /* yacc.c:1646 */ +#line 4075 "util/configparser.c" /* yacc.c:1646 */ break; case 365: -#line 1429 "./util/configparser.y" /* yacc.c:1646 */ +#line 1423 "./util/configparser.y" /* yacc.c:1646 */ { 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 4091 "util/configparser.c" /* yacc.c:1646 */ +#line 4085 "util/configparser.c" /* yacc.c:1646 */ break; case 366: -#line 1436 "./util/configparser.y" /* yacc.c:1646 */ +#line 1430 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_short_bufsize:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4100,11 +4094,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4104 "util/configparser.c" /* yacc.c:1646 */ +#line 4098 "util/configparser.c" /* yacc.c:1646 */ break; case 367: -#line 1446 "./util/configparser.y" /* yacc.c:1646 */ +#line 1440 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_large_queries:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4113,11 +4107,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4117 "util/configparser.c" /* yacc.c:1646 */ +#line 4111 "util/configparser.c" /* yacc.c:1646 */ break; case 368: -#line 1456 "./util/configparser.y" /* yacc.c:1646 */ +#line 1450 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_glue:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4126,11 +4120,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4130 "util/configparser.c" /* yacc.c:1646 */ +#line 4124 "util/configparser.c" /* yacc.c:1646 */ break; case 369: -#line 1466 "./util/configparser.y" /* yacc.c:1646 */ +#line 1460 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_dnssec_stripped:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4139,11 +4133,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4143 "util/configparser.c" /* yacc.c:1646 */ +#line 4137 "util/configparser.c" /* yacc.c:1646 */ break; case 370: -#line 1476 "./util/configparser.y" /* yacc.c:1646 */ +#line 1470 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_below_nxdomain:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4152,11 +4146,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4156 "util/configparser.c" /* yacc.c:1646 */ +#line 4150 "util/configparser.c" /* yacc.c:1646 */ break; case 371: -#line 1486 "./util/configparser.y" /* yacc.c:1646 */ +#line 1480 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_referral_path:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4165,11 +4159,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4169 "util/configparser.c" /* yacc.c:1646 */ +#line 4163 "util/configparser.c" /* yacc.c:1646 */ break; case 372: -#line 1496 "./util/configparser.y" /* yacc.c:1646 */ +#line 1490 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_algo_downgrade:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4178,11 +4172,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4182 "util/configparser.c" /* yacc.c:1646 */ +#line 4176 "util/configparser.c" /* yacc.c:1646 */ break; case 373: -#line 1506 "./util/configparser.y" /* yacc.c:1646 */ +#line 1500 "./util/configparser.y" /* yacc.c:1646 */ { 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) @@ -4191,41 +4185,41 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4195 "util/configparser.c" /* yacc.c:1646 */ +#line 4189 "util/configparser.c" /* yacc.c:1646 */ break; case 374: -#line 1516 "./util/configparser.y" /* yacc.c:1646 */ +#line 1510 "./util/configparser.y" /* yacc.c:1646 */ { 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 4205 "util/configparser.c" /* yacc.c:1646 */ +#line 4199 "util/configparser.c" /* yacc.c:1646 */ break; case 375: -#line 1523 "./util/configparser.y" /* yacc.c:1646 */ +#line 1517 "./util/configparser.y" /* yacc.c:1646 */ { 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 4215 "util/configparser.c" /* yacc.c:1646 */ +#line 4209 "util/configparser.c" /* yacc.c:1646 */ break; case 376: -#line 1530 "./util/configparser.y" /* yacc.c:1646 */ +#line 1524 "./util/configparser.y" /* yacc.c:1646 */ { 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 4225 "util/configparser.c" /* yacc.c:1646 */ +#line 4219 "util/configparser.c" /* yacc.c:1646 */ break; case 377: -#line 1537 "./util/configparser.y" /* yacc.c:1646 */ +#line 1531 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_prefetch:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4233,11 +4227,11 @@ yyreduce: else cfg_parser->cfg->prefetch = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4237 "util/configparser.c" /* yacc.c:1646 */ +#line 4231 "util/configparser.c" /* yacc.c:1646 */ break; case 378: -#line 1546 "./util/configparser.y" /* yacc.c:1646 */ +#line 1540 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_prefetch_key:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4245,11 +4239,11 @@ yyreduce: else cfg_parser->cfg->prefetch_key = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4249 "util/configparser.c" /* yacc.c:1646 */ +#line 4243 "util/configparser.c" /* yacc.c:1646 */ break; case 379: -#line 1555 "./util/configparser.y" /* yacc.c:1646 */ +#line 1549 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_deny_any:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4257,11 +4251,11 @@ yyreduce: else cfg_parser->cfg->deny_any = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4261 "util/configparser.c" /* yacc.c:1646 */ +#line 4255 "util/configparser.c" /* yacc.c:1646 */ break; case 380: -#line 1564 "./util/configparser.y" /* yacc.c:1646 */ +#line 1558 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_unwanted_reply_threshold:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4269,21 +4263,21 @@ yyreduce: else cfg_parser->cfg->unwanted_threshold = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4273 "util/configparser.c" /* yacc.c:1646 */ +#line 4267 "util/configparser.c" /* yacc.c:1646 */ break; case 381: -#line 1573 "./util/configparser.y" /* yacc.c:1646 */ +#line 1567 "./util/configparser.y" /* yacc.c:1646 */ { 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 4283 "util/configparser.c" /* yacc.c:1646 */ +#line 4277 "util/configparser.c" /* yacc.c:1646 */ break; case 382: -#line 1580 "./util/configparser.y" /* yacc.c:1646 */ +#line 1574 "./util/configparser.y" /* yacc.c:1646 */ { 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) @@ -4292,11 +4286,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4296 "util/configparser.c" /* yacc.c:1646 */ +#line 4290 "util/configparser.c" /* yacc.c:1646 */ break; case 383: -#line 1590 "./util/configparser.y" /* yacc.c:1646 */ +#line 1584 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_access_control:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "deny")!=0 && strcmp((yyvsp[0].str), "refuse")!=0 && @@ -4315,21 +4309,21 @@ yyreduce: fatal_exit("out of memory adding acl"); } } -#line 4319 "util/configparser.c" /* yacc.c:1646 */ +#line 4313 "util/configparser.c" /* yacc.c:1646 */ break; case 384: -#line 1610 "./util/configparser.y" /* yacc.c:1646 */ +#line 1604 "./util/configparser.y" /* yacc.c:1646 */ { 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 4329 "util/configparser.c" /* yacc.c:1646 */ +#line 4323 "util/configparser.c" /* yacc.c:1646 */ break; case 385: -#line 1617 "./util/configparser.y" /* yacc.c:1646 */ +#line 1611 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_override_date:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { @@ -4346,11 +4340,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4350 "util/configparser.c" /* yacc.c:1646 */ +#line 4344 "util/configparser.c" /* yacc.c:1646 */ break; case 386: -#line 1635 "./util/configparser.y" /* yacc.c:1646 */ +#line 1629 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_sig_skew_min:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { @@ -4362,11 +4356,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4366 "util/configparser.c" /* yacc.c:1646 */ +#line 4360 "util/configparser.c" /* yacc.c:1646 */ break; case 387: -#line 1648 "./util/configparser.y" /* yacc.c:1646 */ +#line 1642 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_sig_skew_max:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { @@ -4378,11 +4372,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4382 "util/configparser.c" /* yacc.c:1646 */ +#line 4376 "util/configparser.c" /* yacc.c:1646 */ break; case 388: -#line 1661 "./util/configparser.y" /* yacc.c:1646 */ +#line 1655 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_cache_max_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4390,11 +4384,11 @@ yyreduce: else cfg_parser->cfg->max_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4394 "util/configparser.c" /* yacc.c:1646 */ +#line 4388 "util/configparser.c" /* yacc.c:1646 */ break; case 389: -#line 1670 "./util/configparser.y" /* yacc.c:1646 */ +#line 1664 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_cache_max_negative_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4402,11 +4396,11 @@ yyreduce: else cfg_parser->cfg->max_negative_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4406 "util/configparser.c" /* yacc.c:1646 */ +#line 4400 "util/configparser.c" /* yacc.c:1646 */ break; case 390: -#line 1679 "./util/configparser.y" /* yacc.c:1646 */ +#line 1673 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_cache_min_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4414,11 +4408,11 @@ yyreduce: else cfg_parser->cfg->min_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4418 "util/configparser.c" /* yacc.c:1646 */ +#line 4412 "util/configparser.c" /* yacc.c:1646 */ break; case 391: -#line 1688 "./util/configparser.y" /* yacc.c:1646 */ +#line 1682 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_bogus_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4426,11 +4420,11 @@ yyreduce: else cfg_parser->cfg->bogus_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4430 "util/configparser.c" /* yacc.c:1646 */ +#line 4424 "util/configparser.c" /* yacc.c:1646 */ break; case 392: -#line 1697 "./util/configparser.y" /* yacc.c:1646 */ +#line 1691 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_clean_additional:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4439,11 +4433,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4443 "util/configparser.c" /* yacc.c:1646 */ +#line 4437 "util/configparser.c" /* yacc.c:1646 */ break; case 393: -#line 1707 "./util/configparser.y" /* yacc.c:1646 */ +#line 1701 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_permissive_mode:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4452,11 +4446,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4456 "util/configparser.c" /* yacc.c:1646 */ +#line 4450 "util/configparser.c" /* yacc.c:1646 */ break; case 394: -#line 1717 "./util/configparser.y" /* yacc.c:1646 */ +#line 1711 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_aggressive_nsec:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4466,11 +4460,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4470 "util/configparser.c" /* yacc.c:1646 */ +#line 4464 "util/configparser.c" /* yacc.c:1646 */ break; case 395: -#line 1728 "./util/configparser.y" /* yacc.c:1646 */ +#line 1722 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ignore_cd_flag:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4478,11 +4472,11 @@ yyreduce: else cfg_parser->cfg->ignore_cd = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4482 "util/configparser.c" /* yacc.c:1646 */ +#line 4476 "util/configparser.c" /* yacc.c:1646 */ break; case 396: -#line 1737 "./util/configparser.y" /* yacc.c:1646 */ +#line 1731 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_serve_expired:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4490,11 +4484,11 @@ yyreduce: else cfg_parser->cfg->serve_expired = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4494 "util/configparser.c" /* yacc.c:1646 */ +#line 4488 "util/configparser.c" /* yacc.c:1646 */ break; case 397: -#line 1746 "./util/configparser.y" /* yacc.c:1646 */ +#line 1740 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_serve_expired_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4502,11 +4496,11 @@ yyreduce: else cfg_parser->cfg->serve_expired_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4506 "util/configparser.c" /* yacc.c:1646 */ +#line 4500 "util/configparser.c" /* yacc.c:1646 */ break; case 398: -#line 1755 "./util/configparser.y" /* yacc.c:1646 */ +#line 1749 "./util/configparser.y" /* yacc.c:1646 */ { 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) @@ -4514,11 +4508,11 @@ yyreduce: else cfg_parser->cfg->serve_expired_ttl_reset = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4518 "util/configparser.c" /* yacc.c:1646 */ +#line 4512 "util/configparser.c" /* yacc.c:1646 */ break; case 399: -#line 1764 "./util/configparser.y" /* yacc.c:1646 */ +#line 1758 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_fake_dsa:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4530,11 +4524,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 4534 "util/configparser.c" /* yacc.c:1646 */ +#line 4528 "util/configparser.c" /* yacc.c:1646 */ break; case 400: -#line 1777 "./util/configparser.y" /* yacc.c:1646 */ +#line 1771 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_fake_sha1:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4546,11 +4540,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 4550 "util/configparser.c" /* yacc.c:1646 */ +#line 4544 "util/configparser.c" /* yacc.c:1646 */ break; case 401: -#line 1790 "./util/configparser.y" /* yacc.c:1646 */ +#line 1784 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_log_level:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4558,21 +4552,21 @@ yyreduce: else cfg_parser->cfg->val_log_level = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4562 "util/configparser.c" /* yacc.c:1646 */ +#line 4556 "util/configparser.c" /* yacc.c:1646 */ break; case 402: -#line 1799 "./util/configparser.y" /* yacc.c:1646 */ +#line 1793 "./util/configparser.y" /* yacc.c:1646 */ { 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 4572 "util/configparser.c" /* yacc.c:1646 */ +#line 4566 "util/configparser.c" /* yacc.c:1646 */ break; case 403: -#line 1806 "./util/configparser.y" /* yacc.c:1646 */ +#line 1800 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_add_holddown:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4580,11 +4574,11 @@ yyreduce: else cfg_parser->cfg->add_holddown = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4584 "util/configparser.c" /* yacc.c:1646 */ +#line 4578 "util/configparser.c" /* yacc.c:1646 */ break; case 404: -#line 1815 "./util/configparser.y" /* yacc.c:1646 */ +#line 1809 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_del_holddown:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4592,11 +4586,11 @@ yyreduce: else cfg_parser->cfg->del_holddown = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4596 "util/configparser.c" /* yacc.c:1646 */ +#line 4590 "util/configparser.c" /* yacc.c:1646 */ break; case 405: -#line 1824 "./util/configparser.y" /* yacc.c:1646 */ +#line 1818 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_keep_missing:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4604,11 +4598,11 @@ yyreduce: else cfg_parser->cfg->keep_missing = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4608 "util/configparser.c" /* yacc.c:1646 */ +#line 4602 "util/configparser.c" /* yacc.c:1646 */ break; case 406: -#line 1833 "./util/configparser.y" /* yacc.c:1646 */ +#line 1827 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_permit_small_holddown:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4617,22 +4611,22 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4621 "util/configparser.c" /* yacc.c:1646 */ +#line 4615 "util/configparser.c" /* yacc.c:1646 */ break; case 407: -#line 1842 "./util/configparser.y" /* yacc.c:1646 */ +#line 1836 "./util/configparser.y" /* yacc.c:1646 */ { 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 4632 "util/configparser.c" /* yacc.c:1646 */ +#line 4626 "util/configparser.c" /* yacc.c:1646 */ break; case 408: -#line 1850 "./util/configparser.y" /* yacc.c:1646 */ +#line 1844 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_key_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4644,22 +4638,22 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4648 "util/configparser.c" /* yacc.c:1646 */ +#line 4642 "util/configparser.c" /* yacc.c:1646 */ break; case 409: -#line 1863 "./util/configparser.y" /* yacc.c:1646 */ +#line 1857 "./util/configparser.y" /* yacc.c:1646 */ { 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 4659 "util/configparser.c" /* yacc.c:1646 */ +#line 4653 "util/configparser.c" /* yacc.c:1646 */ break; case 410: -#line 1871 "./util/configparser.y" /* yacc.c:1646 */ +#line 1865 "./util/configparser.y" /* yacc.c:1646 */ { 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 && @@ -4691,21 +4685,21 @@ yyreduce: fatal_exit("out of memory adding local-zone"); } } -#line 4695 "util/configparser.c" /* yacc.c:1646 */ +#line 4689 "util/configparser.c" /* yacc.c:1646 */ break; case 411: -#line 1904 "./util/configparser.y" /* yacc.c:1646 */ +#line 1898 "./util/configparser.y" /* yacc.c:1646 */ { 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 4705 "util/configparser.c" /* yacc.c:1646 */ +#line 4699 "util/configparser.c" /* yacc.c:1646 */ break; case 412: -#line 1911 "./util/configparser.y" /* yacc.c:1646 */ +#line 1905 "./util/configparser.y" /* yacc.c:1646 */ { char* ptr; OUTYY(("P(server_local_data_ptr:%s)\n", (yyvsp[0].str))); @@ -4719,11 +4713,11 @@ yyreduce: yyerror("local-data-ptr could not be reversed"); } } -#line 4723 "util/configparser.c" /* yacc.c:1646 */ +#line 4717 "util/configparser.c" /* yacc.c:1646 */ break; case 413: -#line 1926 "./util/configparser.y" /* yacc.c:1646 */ +#line 1920 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_minimal_responses:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4732,11 +4726,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4736 "util/configparser.c" /* yacc.c:1646 */ +#line 4730 "util/configparser.c" /* yacc.c:1646 */ break; case 414: -#line 1936 "./util/configparser.y" /* yacc.c:1646 */ +#line 1930 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_rrset_roundrobin:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4745,41 +4739,41 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4749 "util/configparser.c" /* yacc.c:1646 */ +#line 4743 "util/configparser.c" /* yacc.c:1646 */ break; case 415: -#line 1946 "./util/configparser.y" /* yacc.c:1646 */ +#line 1940 "./util/configparser.y" /* yacc.c:1646 */ { 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 4759 "util/configparser.c" /* yacc.c:1646 */ +#line 4753 "util/configparser.c" /* yacc.c:1646 */ break; case 416: -#line 1953 "./util/configparser.y" /* yacc.c:1646 */ +#line 1947 "./util/configparser.y" /* yacc.c:1646 */ { 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 4769 "util/configparser.c" /* yacc.c:1646 */ +#line 4763 "util/configparser.c" /* yacc.c:1646 */ break; case 417: -#line 1960 "./util/configparser.y" /* yacc.c:1646 */ +#line 1954 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dns64_prefix:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dns64_prefix); cfg_parser->cfg->dns64_prefix = (yyvsp[0].str); } -#line 4779 "util/configparser.c" /* yacc.c:1646 */ +#line 4773 "util/configparser.c" /* yacc.c:1646 */ break; case 418: -#line 1967 "./util/configparser.y" /* yacc.c:1646 */ +#line 1961 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_dns64_synthall:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4787,22 +4781,22 @@ yyreduce: else cfg_parser->cfg->dns64_synthall = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4791 "util/configparser.c" /* yacc.c:1646 */ +#line 4785 "util/configparser.c" /* yacc.c:1646 */ break; case 419: -#line 1976 "./util/configparser.y" /* yacc.c:1646 */ +#line 1970 "./util/configparser.y" /* yacc.c:1646 */ { 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 4802 "util/configparser.c" /* yacc.c:1646 */ +#line 4796 "util/configparser.c" /* yacc.c:1646 */ break; case 420: -#line 1984 "./util/configparser.y" /* yacc.c:1646 */ +#line 1978 "./util/configparser.y" /* yacc.c:1646 */ { char* p, *s = (yyvsp[0].str); OUTYY(("P(server_define_tag:%s)\n", (yyvsp[0].str))); @@ -4815,11 +4809,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4819 "util/configparser.c" /* yacc.c:1646 */ +#line 4813 "util/configparser.c" /* yacc.c:1646 */ break; case 421: -#line 1998 "./util/configparser.y" /* yacc.c:1646 */ +#line 1992 "./util/configparser.y" /* yacc.c:1646 */ { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -4839,11 +4833,11 @@ yyreduce: } } } -#line 4843 "util/configparser.c" /* yacc.c:1646 */ +#line 4837 "util/configparser.c" /* yacc.c:1646 */ break; case 422: -#line 2019 "./util/configparser.y" /* yacc.c:1646 */ +#line 2013 "./util/configparser.y" /* yacc.c:1646 */ { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -4863,11 +4857,11 @@ yyreduce: } } } -#line 4867 "util/configparser.c" /* yacc.c:1646 */ +#line 4861 "util/configparser.c" /* yacc.c:1646 */ break; case 423: -#line 2040 "./util/configparser.y" /* yacc.c:1646 */ +#line 2034 "./util/configparser.y" /* yacc.c:1646 */ { 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, @@ -4878,11 +4872,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 4882 "util/configparser.c" /* yacc.c:1646 */ +#line 4876 "util/configparser.c" /* yacc.c:1646 */ break; case 424: -#line 2052 "./util/configparser.y" /* yacc.c:1646 */ +#line 2046 "./util/configparser.y" /* yacc.c:1646 */ { 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, @@ -4893,11 +4887,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 4897 "util/configparser.c" /* yacc.c:1646 */ +#line 4891 "util/configparser.c" /* yacc.c:1646 */ break; case 425: -#line 2064 "./util/configparser.y" /* yacc.c:1646 */ +#line 2058 "./util/configparser.y" /* yacc.c:1646 */ { 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, @@ -4908,11 +4902,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 4912 "util/configparser.c" /* yacc.c:1646 */ +#line 4906 "util/configparser.c" /* yacc.c:1646 */ break; case 426: -#line 2076 "./util/configparser.y" /* yacc.c:1646 */ +#line 2070 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_access_control_view:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str2list_insert(&cfg_parser->cfg->acl_view, @@ -4920,11 +4914,11 @@ yyreduce: yyerror("out of memory"); } } -#line 4924 "util/configparser.c" /* yacc.c:1646 */ +#line 4918 "util/configparser.c" /* yacc.c:1646 */ break; case 427: -#line 2085 "./util/configparser.y" /* yacc.c:1646 */ +#line 2079 "./util/configparser.y" /* yacc.c:1646 */ { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -4944,11 +4938,11 @@ yyreduce: } } } -#line 4948 "util/configparser.c" /* yacc.c:1646 */ +#line 4942 "util/configparser.c" /* yacc.c:1646 */ break; case 428: -#line 2106 "./util/configparser.y" /* yacc.c:1646 */ +#line 2100 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_ratelimit:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4956,11 +4950,11 @@ yyreduce: else cfg_parser->cfg->ip_ratelimit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4960 "util/configparser.c" /* yacc.c:1646 */ +#line 4954 "util/configparser.c" /* yacc.c:1646 */ break; case 429: -#line 2116 "./util/configparser.y" /* yacc.c:1646 */ +#line 2110 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ratelimit:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4968,33 +4962,33 @@ yyreduce: else cfg_parser->cfg->ratelimit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4972 "util/configparser.c" /* yacc.c:1646 */ +#line 4966 "util/configparser.c" /* yacc.c:1646 */ break; case 430: -#line 2125 "./util/configparser.y" /* yacc.c:1646 */ +#line 2119 "./util/configparser.y" /* yacc.c:1646 */ { 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 4983 "util/configparser.c" /* yacc.c:1646 */ +#line 4977 "util/configparser.c" /* yacc.c:1646 */ break; case 431: -#line 2133 "./util/configparser.y" /* yacc.c:1646 */ +#line 2127 "./util/configparser.y" /* yacc.c:1646 */ { 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 4994 "util/configparser.c" /* yacc.c:1646 */ +#line 4988 "util/configparser.c" /* yacc.c:1646 */ break; case 432: -#line 2141 "./util/configparser.y" /* yacc.c:1646 */ +#line 2135 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_ratelimit_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5006,11 +5000,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 5010 "util/configparser.c" /* yacc.c:1646 */ +#line 5004 "util/configparser.c" /* yacc.c:1646 */ break; case 433: -#line 2154 "./util/configparser.y" /* yacc.c:1646 */ +#line 2148 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ratelimit_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5022,11 +5016,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 5026 "util/configparser.c" /* yacc.c:1646 */ +#line 5020 "util/configparser.c" /* yacc.c:1646 */ break; case 434: -#line 2167 "./util/configparser.y" /* yacc.c:1646 */ +#line 2161 "./util/configparser.y" /* yacc.c:1646 */ { 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) { @@ -5040,11 +5034,11 @@ yyreduce: "ratelimit-for-domain"); } } -#line 5044 "util/configparser.c" /* yacc.c:1646 */ +#line 5038 "util/configparser.c" /* yacc.c:1646 */ break; case 435: -#line 2182 "./util/configparser.y" /* yacc.c:1646 */ +#line 2176 "./util/configparser.y" /* yacc.c:1646 */ { 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) { @@ -5058,11 +5052,11 @@ yyreduce: "ratelimit-below-domain"); } } -#line 5062 "util/configparser.c" /* yacc.c:1646 */ +#line 5056 "util/configparser.c" /* yacc.c:1646 */ break; case 436: -#line 2197 "./util/configparser.y" /* yacc.c:1646 */ +#line 2191 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_ratelimit_factor:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5070,11 +5064,11 @@ yyreduce: else cfg_parser->cfg->ip_ratelimit_factor = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5074 "util/configparser.c" /* yacc.c:1646 */ +#line 5068 "util/configparser.c" /* yacc.c:1646 */ break; case 437: -#line 2206 "./util/configparser.y" /* yacc.c:1646 */ +#line 2200 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ratelimit_factor:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5082,20 +5076,20 @@ yyreduce: else cfg_parser->cfg->ratelimit_factor = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5086 "util/configparser.c" /* yacc.c:1646 */ +#line 5080 "util/configparser.c" /* yacc.c:1646 */ break; case 438: -#line 2215 "./util/configparser.y" /* yacc.c:1646 */ +#line 2209 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(low-rtt option is deprecated, use fast-server-num instead)\n")); free((yyvsp[0].str)); } -#line 5095 "util/configparser.c" /* yacc.c:1646 */ +#line 5089 "util/configparser.c" /* yacc.c:1646 */ break; case 439: -#line 2221 "./util/configparser.y" /* yacc.c:1646 */ +#line 2215 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_fast_server_num:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) <= 0) @@ -5103,11 +5097,11 @@ yyreduce: else cfg_parser->cfg->fast_server_num = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5107 "util/configparser.c" /* yacc.c:1646 */ +#line 5101 "util/configparser.c" /* yacc.c:1646 */ break; case 440: -#line 2230 "./util/configparser.y" /* yacc.c:1646 */ +#line 2224 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_fast_server_permil:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5115,11 +5109,11 @@ yyreduce: else cfg_parser->cfg->fast_server_permil = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5119 "util/configparser.c" /* yacc.c:1646 */ +#line 5113 "util/configparser.c" /* yacc.c:1646 */ break; case 441: -#line 2239 "./util/configparser.y" /* yacc.c:1646 */ +#line 2233 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_qname_minimisation:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5128,11 +5122,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5132 "util/configparser.c" /* yacc.c:1646 */ +#line 5126 "util/configparser.c" /* yacc.c:1646 */ break; case 442: -#line 2249 "./util/configparser.y" /* yacc.c:1646 */ +#line 2243 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_qname_minimisation_strict:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5141,11 +5135,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5145 "util/configparser.c" /* yacc.c:1646 */ +#line 5139 "util/configparser.c" /* yacc.c:1646 */ break; case 443: -#line 2259 "./util/configparser.y" /* yacc.c:1646 */ +#line 2253 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_enabled:%s)\n", (yyvsp[0].str))); @@ -5157,11 +5151,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 5161 "util/configparser.c" /* yacc.c:1646 */ +#line 5155 "util/configparser.c" /* yacc.c:1646 */ break; case 444: -#line 2272 "./util/configparser.y" /* yacc.c:1646 */ +#line 2266 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_ignore_bogus:%s)\n", (yyvsp[0].str))); @@ -5173,11 +5167,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 5177 "util/configparser.c" /* yacc.c:1646 */ +#line 5171 "util/configparser.c" /* yacc.c:1646 */ break; case 445: -#line 2285 "./util/configparser.y" /* yacc.c:1646 */ +#line 2279 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_hook:%s)\n", (yyvsp[0].str))); @@ -5188,11 +5182,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5192 "util/configparser.c" /* yacc.c:1646 */ +#line 5186 "util/configparser.c" /* yacc.c:1646 */ break; case 446: -#line 2297 "./util/configparser.y" /* yacc.c:1646 */ +#line 2291 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_max_ttl:%s)\n", (yyvsp[0].str))); @@ -5205,11 +5199,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5209 "util/configparser.c" /* yacc.c:1646 */ +#line 5203 "util/configparser.c" /* yacc.c:1646 */ break; case 447: -#line 2311 "./util/configparser.y" /* yacc.c:1646 */ +#line 2305 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_whitelist:%s)\n", (yyvsp[0].str))); @@ -5220,11 +5214,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5224 "util/configparser.c" /* yacc.c:1646 */ +#line 5218 "util/configparser.c" /* yacc.c:1646 */ break; case 448: -#line 2323 "./util/configparser.y" /* yacc.c:1646 */ +#line 2317 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_strict:%s)\n", (yyvsp[0].str))); @@ -5237,11 +5231,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5241 "util/configparser.c" /* yacc.c:1646 */ +#line 5235 "util/configparser.c" /* yacc.c:1646 */ break; case 449: -#line 2337 "./util/configparser.y" /* yacc.c:1646 */ +#line 2331 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->stubs->name) @@ -5250,31 +5244,31 @@ yyreduce: free(cfg_parser->cfg->stubs->name); cfg_parser->cfg->stubs->name = (yyvsp[0].str); } -#line 5254 "util/configparser.c" /* yacc.c:1646 */ +#line 5248 "util/configparser.c" /* yacc.c:1646 */ break; case 450: -#line 2347 "./util/configparser.y" /* yacc.c:1646 */ +#line 2341 "./util/configparser.y" /* yacc.c:1646 */ { 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 5264 "util/configparser.c" /* yacc.c:1646 */ +#line 5258 "util/configparser.c" /* yacc.c:1646 */ break; case 451: -#line 2354 "./util/configparser.y" /* yacc.c:1646 */ +#line 2348 "./util/configparser.y" /* yacc.c:1646 */ { 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 5274 "util/configparser.c" /* yacc.c:1646 */ +#line 5268 "util/configparser.c" /* yacc.c:1646 */ break; case 452: -#line 2361 "./util/configparser.y" /* yacc.c:1646 */ +#line 2355 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(stub-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5282,11 +5276,11 @@ yyreduce: else cfg_parser->cfg->stubs->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5286 "util/configparser.c" /* yacc.c:1646 */ +#line 5280 "util/configparser.c" /* yacc.c:1646 */ break; case 453: -#line 2370 "./util/configparser.y" /* yacc.c:1646 */ +#line 2364 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(stub-no-cache:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5294,11 +5288,11 @@ yyreduce: else cfg_parser->cfg->stubs->no_cache=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5298 "util/configparser.c" /* yacc.c:1646 */ +#line 5292 "util/configparser.c" /* yacc.c:1646 */ break; case 454: -#line 2379 "./util/configparser.y" /* yacc.c:1646 */ +#line 2373 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(stub-ssl-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5307,11 +5301,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5311 "util/configparser.c" /* yacc.c:1646 */ +#line 5305 "util/configparser.c" /* yacc.c:1646 */ break; case 455: -#line 2389 "./util/configparser.y" /* yacc.c:1646 */ +#line 2383 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(stub-prime:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5320,11 +5314,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5324 "util/configparser.c" /* yacc.c:1646 */ +#line 5318 "util/configparser.c" /* yacc.c:1646 */ break; case 456: -#line 2399 "./util/configparser.y" /* yacc.c:1646 */ +#line 2393 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->forwards->name) @@ -5333,31 +5327,31 @@ yyreduce: free(cfg_parser->cfg->forwards->name); cfg_parser->cfg->forwards->name = (yyvsp[0].str); } -#line 5337 "util/configparser.c" /* yacc.c:1646 */ +#line 5331 "util/configparser.c" /* yacc.c:1646 */ break; case 457: -#line 2409 "./util/configparser.y" /* yacc.c:1646 */ +#line 2403 "./util/configparser.y" /* yacc.c:1646 */ { 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 5347 "util/configparser.c" /* yacc.c:1646 */ +#line 5341 "util/configparser.c" /* yacc.c:1646 */ break; case 458: -#line 2416 "./util/configparser.y" /* yacc.c:1646 */ +#line 2410 "./util/configparser.y" /* yacc.c:1646 */ { 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 5357 "util/configparser.c" /* yacc.c:1646 */ +#line 5351 "util/configparser.c" /* yacc.c:1646 */ break; case 459: -#line 2423 "./util/configparser.y" /* yacc.c:1646 */ +#line 2417 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(forward-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5365,11 +5359,11 @@ yyreduce: else cfg_parser->cfg->forwards->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5369 "util/configparser.c" /* yacc.c:1646 */ +#line 5363 "util/configparser.c" /* yacc.c:1646 */ break; case 460: -#line 2432 "./util/configparser.y" /* yacc.c:1646 */ +#line 2426 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(forward-no-cache:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5377,11 +5371,11 @@ yyreduce: else cfg_parser->cfg->forwards->no_cache=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5381 "util/configparser.c" /* yacc.c:1646 */ +#line 5375 "util/configparser.c" /* yacc.c:1646 */ break; case 461: -#line 2441 "./util/configparser.y" /* yacc.c:1646 */ +#line 2435 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(forward-ssl-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5390,11 +5384,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5394 "util/configparser.c" /* yacc.c:1646 */ +#line 5388 "util/configparser.c" /* yacc.c:1646 */ break; case 462: -#line 2451 "./util/configparser.y" /* yacc.c:1646 */ +#line 2445 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->auths->name) @@ -5403,52 +5397,52 @@ yyreduce: free(cfg_parser->cfg->auths->name); cfg_parser->cfg->auths->name = (yyvsp[0].str); } -#line 5407 "util/configparser.c" /* yacc.c:1646 */ +#line 5401 "util/configparser.c" /* yacc.c:1646 */ break; case 463: -#line 2461 "./util/configparser.y" /* yacc.c:1646 */ +#line 2455 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(zonefile:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->auths->zonefile); cfg_parser->cfg->auths->zonefile = (yyvsp[0].str); } -#line 5417 "util/configparser.c" /* yacc.c:1646 */ +#line 5411 "util/configparser.c" /* yacc.c:1646 */ break; case 464: -#line 2468 "./util/configparser.y" /* yacc.c:1646 */ +#line 2462 "./util/configparser.y" /* yacc.c:1646 */ { 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 5427 "util/configparser.c" /* yacc.c:1646 */ +#line 5421 "util/configparser.c" /* yacc.c:1646 */ break; case 465: -#line 2475 "./util/configparser.y" /* yacc.c:1646 */ +#line 2469 "./util/configparser.y" /* yacc.c:1646 */ { 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 5437 "util/configparser.c" /* yacc.c:1646 */ +#line 5431 "util/configparser.c" /* yacc.c:1646 */ break; case 466: -#line 2482 "./util/configparser.y" /* yacc.c:1646 */ +#line 2476 "./util/configparser.y" /* yacc.c:1646 */ { 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 5448 "util/configparser.c" /* yacc.c:1646 */ +#line 5442 "util/configparser.c" /* yacc.c:1646 */ break; case 467: -#line 2490 "./util/configparser.y" /* yacc.c:1646 */ +#line 2484 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(for-downstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5457,11 +5451,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5461 "util/configparser.c" /* yacc.c:1646 */ +#line 5455 "util/configparser.c" /* yacc.c:1646 */ break; case 468: -#line 2500 "./util/configparser.y" /* yacc.c:1646 */ +#line 2494 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(for-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5470,11 +5464,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5474 "util/configparser.c" /* yacc.c:1646 */ +#line 5468 "util/configparser.c" /* yacc.c:1646 */ break; case 469: -#line 2510 "./util/configparser.y" /* yacc.c:1646 */ +#line 2504 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(fallback-enabled:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5483,11 +5477,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5487 "util/configparser.c" /* yacc.c:1646 */ +#line 5481 "util/configparser.c" /* yacc.c:1646 */ break; case 470: -#line 2520 "./util/configparser.y" /* yacc.c:1646 */ +#line 2514 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->views->name) @@ -5496,11 +5490,11 @@ yyreduce: free(cfg_parser->cfg->views->name); cfg_parser->cfg->views->name = (yyvsp[0].str); } -#line 5500 "util/configparser.c" /* yacc.c:1646 */ +#line 5494 "util/configparser.c" /* yacc.c:1646 */ break; case 471: -#line 2530 "./util/configparser.y" /* yacc.c:1646 */ +#line 2524 "./util/configparser.y" /* yacc.c:1646 */ { 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 && @@ -5531,11 +5525,11 @@ yyreduce: fatal_exit("out of memory adding local-zone"); } } -#line 5535 "util/configparser.c" /* yacc.c:1646 */ +#line 5529 "util/configparser.c" /* yacc.c:1646 */ break; case 472: -#line 2562 "./util/configparser.y" /* yacc.c:1646 */ +#line 2556 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(view_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); validate_respip_action((yyvsp[0].str)); @@ -5544,33 +5538,33 @@ yyreduce: fatal_exit("out of memory adding per-view " "response-ip action"); } -#line 5548 "util/configparser.c" /* yacc.c:1646 */ +#line 5542 "util/configparser.c" /* yacc.c:1646 */ break; case 473: -#line 2572 "./util/configparser.y" /* yacc.c:1646 */ +#line 2566 "./util/configparser.y" /* yacc.c:1646 */ { 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 5559 "util/configparser.c" /* yacc.c:1646 */ +#line 5553 "util/configparser.c" /* yacc.c:1646 */ break; case 474: -#line 2580 "./util/configparser.y" /* yacc.c:1646 */ +#line 2574 "./util/configparser.y" /* yacc.c:1646 */ { 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 5570 "util/configparser.c" /* yacc.c:1646 */ +#line 5564 "util/configparser.c" /* yacc.c:1646 */ break; case 475: -#line 2588 "./util/configparser.y" /* yacc.c:1646 */ +#line 2582 "./util/configparser.y" /* yacc.c:1646 */ { char* ptr; OUTYY(("P(view_local_data_ptr:%s)\n", (yyvsp[0].str))); @@ -5584,11 +5578,11 @@ yyreduce: yyerror("local-data-ptr could not be reversed"); } } -#line 5588 "util/configparser.c" /* yacc.c:1646 */ +#line 5582 "util/configparser.c" /* yacc.c:1646 */ break; case 476: -#line 2603 "./util/configparser.y" /* yacc.c:1646 */ +#line 2597 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(view-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5596,19 +5590,19 @@ yyreduce: else cfg_parser->cfg->views->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5600 "util/configparser.c" /* yacc.c:1646 */ +#line 5594 "util/configparser.c" /* yacc.c:1646 */ break; case 477: -#line 2612 "./util/configparser.y" /* yacc.c:1646 */ +#line 2606 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(remote-control:)\n")); } -#line 5608 "util/configparser.c" /* yacc.c:1646 */ +#line 5602 "util/configparser.c" /* yacc.c:1646 */ break; case 488: -#line 2623 "./util/configparser.y" /* yacc.c:1646 */ +#line 2617 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(control_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5617,11 +5611,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5621 "util/configparser.c" /* yacc.c:1646 */ +#line 5615 "util/configparser.c" /* yacc.c:1646 */ break; case 489: -#line 2633 "./util/configparser.y" /* yacc.c:1646 */ +#line 2627 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(control_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5629,79 +5623,79 @@ yyreduce: else cfg_parser->cfg->control_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5633 "util/configparser.c" /* yacc.c:1646 */ +#line 5627 "util/configparser.c" /* yacc.c:1646 */ break; case 490: -#line 2642 "./util/configparser.y" /* yacc.c:1646 */ +#line 2636 "./util/configparser.y" /* yacc.c:1646 */ { 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 5643 "util/configparser.c" /* yacc.c:1646 */ +#line 5637 "util/configparser.c" /* yacc.c:1646 */ break; case 491: -#line 2649 "./util/configparser.y" /* yacc.c:1646 */ +#line 2643 "./util/configparser.y" /* yacc.c:1646 */ { 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 5653 "util/configparser.c" /* yacc.c:1646 */ +#line 5647 "util/configparser.c" /* yacc.c:1646 */ break; case 492: -#line 2656 "./util/configparser.y" /* yacc.c:1646 */ +#line 2650 "./util/configparser.y" /* yacc.c:1646 */ { 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 5663 "util/configparser.c" /* yacc.c:1646 */ +#line 5657 "util/configparser.c" /* yacc.c:1646 */ break; case 493: -#line 2663 "./util/configparser.y" /* yacc.c:1646 */ +#line 2657 "./util/configparser.y" /* yacc.c:1646 */ { 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 5673 "util/configparser.c" /* yacc.c:1646 */ +#line 5667 "util/configparser.c" /* yacc.c:1646 */ break; case 494: -#line 2670 "./util/configparser.y" /* yacc.c:1646 */ +#line 2664 "./util/configparser.y" /* yacc.c:1646 */ { 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 5683 "util/configparser.c" /* yacc.c:1646 */ +#line 5677 "util/configparser.c" /* yacc.c:1646 */ break; case 495: -#line 2677 "./util/configparser.y" /* yacc.c:1646 */ +#line 2671 "./util/configparser.y" /* yacc.c:1646 */ { 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 5693 "util/configparser.c" /* yacc.c:1646 */ +#line 5687 "util/configparser.c" /* yacc.c:1646 */ break; case 496: -#line 2684 "./util/configparser.y" /* yacc.c:1646 */ +#line 2678 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(dnstap:)\n")); } -#line 5701 "util/configparser.c" /* yacc.c:1646 */ +#line 5695 "util/configparser.c" /* yacc.c:1646 */ break; case 511: -#line 2701 "./util/configparser.y" /* yacc.c:1646 */ +#line 2695 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5709,21 +5703,21 @@ yyreduce: else cfg_parser->cfg->dnstap = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5713 "util/configparser.c" /* yacc.c:1646 */ +#line 5707 "util/configparser.c" /* yacc.c:1646 */ break; case 512: -#line 2710 "./util/configparser.y" /* yacc.c:1646 */ +#line 2704 "./util/configparser.y" /* yacc.c:1646 */ { 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 5723 "util/configparser.c" /* yacc.c:1646 */ +#line 5717 "util/configparser.c" /* yacc.c:1646 */ break; case 513: -#line 2717 "./util/configparser.y" /* yacc.c:1646 */ +#line 2711 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_send_identity:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5731,11 +5725,11 @@ yyreduce: else cfg_parser->cfg->dnstap_send_identity = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5735 "util/configparser.c" /* yacc.c:1646 */ +#line 5729 "util/configparser.c" /* yacc.c:1646 */ break; case 514: -#line 2726 "./util/configparser.y" /* yacc.c:1646 */ +#line 2720 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_send_version:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5743,31 +5737,31 @@ yyreduce: else cfg_parser->cfg->dnstap_send_version = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5747 "util/configparser.c" /* yacc.c:1646 */ +#line 5741 "util/configparser.c" /* yacc.c:1646 */ break; case 515: -#line 2735 "./util/configparser.y" /* yacc.c:1646 */ +#line 2729 "./util/configparser.y" /* yacc.c:1646 */ { 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 5757 "util/configparser.c" /* yacc.c:1646 */ +#line 5751 "util/configparser.c" /* yacc.c:1646 */ break; case 516: -#line 2742 "./util/configparser.y" /* yacc.c:1646 */ +#line 2736 "./util/configparser.y" /* yacc.c:1646 */ { 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 5767 "util/configparser.c" /* yacc.c:1646 */ +#line 5761 "util/configparser.c" /* yacc.c:1646 */ break; case 517: -#line 2749 "./util/configparser.y" /* yacc.c:1646 */ +#line 2743 "./util/configparser.y" /* yacc.c:1646 */ { 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) @@ -5776,11 +5770,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5780 "util/configparser.c" /* yacc.c:1646 */ +#line 5774 "util/configparser.c" /* yacc.c:1646 */ break; case 518: -#line 2759 "./util/configparser.y" /* yacc.c:1646 */ +#line 2753 "./util/configparser.y" /* yacc.c:1646 */ { 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) @@ -5789,11 +5783,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5793 "util/configparser.c" /* yacc.c:1646 */ +#line 5787 "util/configparser.c" /* yacc.c:1646 */ break; case 519: -#line 2769 "./util/configparser.y" /* yacc.c:1646 */ +#line 2763 "./util/configparser.y" /* yacc.c:1646 */ { 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) @@ -5802,11 +5796,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5806 "util/configparser.c" /* yacc.c:1646 */ +#line 5800 "util/configparser.c" /* yacc.c:1646 */ break; case 520: -#line 2779 "./util/configparser.y" /* yacc.c:1646 */ +#line 2773 "./util/configparser.y" /* yacc.c:1646 */ { 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) @@ -5815,11 +5809,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5819 "util/configparser.c" /* yacc.c:1646 */ +#line 5813 "util/configparser.c" /* yacc.c:1646 */ break; case 521: -#line 2789 "./util/configparser.y" /* yacc.c:1646 */ +#line 2783 "./util/configparser.y" /* yacc.c:1646 */ { 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) @@ -5828,11 +5822,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5832 "util/configparser.c" /* yacc.c:1646 */ +#line 5826 "util/configparser.c" /* yacc.c:1646 */ break; case 522: -#line 2799 "./util/configparser.y" /* yacc.c:1646 */ +#line 2793 "./util/configparser.y" /* yacc.c:1646 */ { 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) @@ -5841,29 +5835,29 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5845 "util/configparser.c" /* yacc.c:1646 */ +#line 5839 "util/configparser.c" /* yacc.c:1646 */ break; case 523: -#line 2809 "./util/configparser.y" /* yacc.c:1646 */ +#line 2803 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(python:)\n")); } -#line 5853 "util/configparser.c" /* yacc.c:1646 */ +#line 5847 "util/configparser.c" /* yacc.c:1646 */ break; case 527: -#line 2818 "./util/configparser.y" /* yacc.c:1646 */ +#line 2812 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(python-script:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->python_script); cfg_parser->cfg->python_script = (yyvsp[0].str); } -#line 5863 "util/configparser.c" /* yacc.c:1646 */ +#line 5857 "util/configparser.c" /* yacc.c:1646 */ break; case 528: -#line 2824 "./util/configparser.y" /* yacc.c:1646 */ +#line 2818 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(disable_dnssec_lame_check:%s)\n", (yyvsp[0].str))); if (strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5872,21 +5866,21 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5876 "util/configparser.c" /* yacc.c:1646 */ +#line 5870 "util/configparser.c" /* yacc.c:1646 */ break; case 529: -#line 2834 "./util/configparser.y" /* yacc.c:1646 */ +#line 2828 "./util/configparser.y" /* yacc.c:1646 */ { 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 5886 "util/configparser.c" /* yacc.c:1646 */ +#line 5880 "util/configparser.c" /* yacc.c:1646 */ break; case 530: -#line 2841 "./util/configparser.y" /* yacc.c:1646 */ +#line 2835 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); validate_respip_action((yyvsp[0].str)); @@ -5894,30 +5888,30 @@ yyreduce: (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding response-ip"); } -#line 5898 "util/configparser.c" /* yacc.c:1646 */ +#line 5892 "util/configparser.c" /* yacc.c:1646 */ break; case 531: -#line 2850 "./util/configparser.y" /* yacc.c:1646 */ +#line 2844 "./util/configparser.y" /* yacc.c:1646 */ { 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 5909 "util/configparser.c" /* yacc.c:1646 */ +#line 5903 "util/configparser.c" /* yacc.c:1646 */ break; case 532: -#line 2858 "./util/configparser.y" /* yacc.c:1646 */ +#line 2852 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(dnscrypt:)\n")); } -#line 5917 "util/configparser.c" /* yacc.c:1646 */ +#line 5911 "util/configparser.c" /* yacc.c:1646 */ break; case 545: -#line 2874 "./util/configparser.y" /* yacc.c:1646 */ +#line 2868 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5925,11 +5919,11 @@ yyreduce: else cfg_parser->cfg->dnscrypt = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5929 "util/configparser.c" /* yacc.c:1646 */ +#line 5923 "util/configparser.c" /* yacc.c:1646 */ break; case 546: -#line 2884 "./util/configparser.y" /* yacc.c:1646 */ +#line 2878 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5937,21 +5931,21 @@ yyreduce: else cfg_parser->cfg->dnscrypt_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5941 "util/configparser.c" /* yacc.c:1646 */ +#line 5935 "util/configparser.c" /* yacc.c:1646 */ break; case 547: -#line 2893 "./util/configparser.y" /* yacc.c:1646 */ +#line 2887 "./util/configparser.y" /* yacc.c:1646 */ { 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 5951 "util/configparser.c" /* yacc.c:1646 */ +#line 5945 "util/configparser.c" /* yacc.c:1646 */ break; case 548: -#line 2900 "./util/configparser.y" /* yacc.c:1646 */ +#line 2894 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_provider_cert:%s)\n", (yyvsp[0].str))); if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str))) @@ -5959,21 +5953,21 @@ yyreduce: if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str))) fatal_exit("out of memory adding dnscrypt-provider-cert"); } -#line 5963 "util/configparser.c" /* yacc.c:1646 */ +#line 5957 "util/configparser.c" /* yacc.c:1646 */ break; case 549: -#line 2909 "./util/configparser.y" /* yacc.c:1646 */ +#line 2903 "./util/configparser.y" /* yacc.c:1646 */ { 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 5973 "util/configparser.c" /* yacc.c:1646 */ +#line 5967 "util/configparser.c" /* yacc.c:1646 */ break; case 550: -#line 2916 "./util/configparser.y" /* yacc.c:1646 */ +#line 2910 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_secret_key:%s)\n", (yyvsp[0].str))); if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str))) @@ -5981,22 +5975,22 @@ yyreduce: if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str))) fatal_exit("out of memory adding dnscrypt-secret-key"); } -#line 5985 "util/configparser.c" /* yacc.c:1646 */ +#line 5979 "util/configparser.c" /* yacc.c:1646 */ break; case 551: -#line 2925 "./util/configparser.y" /* yacc.c:1646 */ +#line 2919 "./util/configparser.y" /* yacc.c:1646 */ { 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 5996 "util/configparser.c" /* yacc.c:1646 */ +#line 5990 "util/configparser.c" /* yacc.c:1646 */ break; case 552: -#line 2933 "./util/configparser.y" /* yacc.c:1646 */ +#line 2927 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnscrypt_shared_secret_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -6008,22 +6002,22 @@ yyreduce: } free((yyvsp[0].str)); } -#line 6012 "util/configparser.c" /* yacc.c:1646 */ +#line 6006 "util/configparser.c" /* yacc.c:1646 */ break; case 553: -#line 2946 "./util/configparser.y" /* yacc.c:1646 */ +#line 2940 "./util/configparser.y" /* yacc.c:1646 */ { 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 6023 "util/configparser.c" /* yacc.c:1646 */ +#line 6017 "util/configparser.c" /* yacc.c:1646 */ break; case 554: -#line 2954 "./util/configparser.y" /* yacc.c:1646 */ +#line 2948 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnscrypt_nonce_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -6035,19 +6029,19 @@ yyreduce: } free((yyvsp[0].str)); } -#line 6039 "util/configparser.c" /* yacc.c:1646 */ +#line 6033 "util/configparser.c" /* yacc.c:1646 */ break; case 555: -#line 2967 "./util/configparser.y" /* yacc.c:1646 */ +#line 2961 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(cachedb:)\n")); } -#line 6047 "util/configparser.c" /* yacc.c:1646 */ +#line 6041 "util/configparser.c" /* yacc.c:1646 */ break; case 563: -#line 2977 "./util/configparser.y" /* yacc.c:1646 */ +#line 2971 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_CACHEDB OUTYY(("P(backend:%s)\n", (yyvsp[0].str))); @@ -6061,11 +6055,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6065 "util/configparser.c" /* yacc.c:1646 */ +#line 6059 "util/configparser.c" /* yacc.c:1646 */ break; case 564: -#line 2992 "./util/configparser.y" /* yacc.c:1646 */ +#line 2986 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_CACHEDB OUTYY(("P(secret-seed:%s)\n", (yyvsp[0].str))); @@ -6079,11 +6073,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6083 "util/configparser.c" /* yacc.c:1646 */ +#line 6077 "util/configparser.c" /* yacc.c:1646 */ break; case 565: -#line 3007 "./util/configparser.y" /* yacc.c:1646 */ +#line 3001 "./util/configparser.y" /* yacc.c:1646 */ { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_server_host:%s)\n", (yyvsp[0].str))); @@ -6094,11 +6088,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6098 "util/configparser.c" /* yacc.c:1646 */ +#line 6092 "util/configparser.c" /* yacc.c:1646 */ break; case 566: -#line 3019 "./util/configparser.y" /* yacc.c:1646 */ +#line 3013 "./util/configparser.y" /* yacc.c:1646 */ { #if defined(USE_CACHEDB) && defined(USE_REDIS) int port; @@ -6112,11 +6106,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 6116 "util/configparser.c" /* yacc.c:1646 */ +#line 6110 "util/configparser.c" /* yacc.c:1646 */ break; case 567: -#line 3034 "./util/configparser.y" /* yacc.c:1646 */ +#line 3028 "./util/configparser.y" /* yacc.c:1646 */ { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_timeout:%s)\n", (yyvsp[0].str))); @@ -6128,11 +6122,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 6132 "util/configparser.c" /* yacc.c:1646 */ +#line 6126 "util/configparser.c" /* yacc.c:1646 */ break; case 568: -#line 3047 "./util/configparser.y" /* yacc.c:1646 */ +#line 3041 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tcp_connection_limit:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if (atoi((yyvsp[0].str)) < 0) @@ -6142,11 +6136,11 @@ yyreduce: fatal_exit("out of memory adding tcp connection limit"); } } -#line 6146 "util/configparser.c" /* yacc.c:1646 */ +#line 6140 "util/configparser.c" /* yacc.c:1646 */ break; -#line 6150 "util/configparser.c" /* yacc.c:1646 */ +#line 6144 "util/configparser.c" /* yacc.c:1646 */ default: break; } /* User semantic actions sometimes alter yychar, and that requires @@ -6374,7 +6368,7 @@ yyreturn: #endif return yyresult; } -#line 3057 "./util/configparser.y" /* yacc.c:1906 */ +#line 3051 "./util/configparser.y" /* yacc.c:1906 */ /* parse helper routines could be here */ diff --git a/util/configparser.y b/util/configparser.y index e4537aa31..47e954818 100644 --- a/util/configparser.y +++ b/util/configparser.y @@ -387,9 +387,6 @@ rpz_action_override: VAR_RPZ_ACTION_OVERRIDE STRING_ARG rpz_cname_override: VAR_RPZ_CNAME_OVERRIDE STRING_ARG { OUTYY(("P(rpz_cname_override:%s)\n", $2)); - if(cfg_parser->cfg->auths->rpz_cname) - yyerror("there can only be one CNAME override per " - "RPZ"); free(cfg_parser->cfg->auths->rpz_cname); cfg_parser->cfg->auths->rpz_cname = $2; } @@ -408,9 +405,6 @@ rpz_log: VAR_RPZ_LOG STRING_ARG rpz_log_name: VAR_RPZ_LOG_NAME STRING_ARG { OUTYY(("P(rpz_log_name:%s)\n", $2)); - if(cfg_parser->cfg->auths->rpz_log_name) - yyerror("RPZ log name, there can only be one " - "rpz-log-name per rpz"); free(cfg_parser->cfg->auths->rpz_log_name); cfg_parser->cfg->auths->rpz_log_name = $2; } From 395d83cfc8bb86dfe47e2becb9885d13599998c1 Mon Sep 17 00:00:00 2001 From: Ralph Dolmans Date: Mon, 24 Jun 2019 16:01:01 +0200 Subject: [PATCH 14/56] Procedures to parse RPZ ip address notation. --- services/rpz.c | 47 +++++++++++++++++++++++++ services/rpz.h | 2 +- util/data/dname.c | 13 +++++++ util/data/dname.h | 8 +++++ util/net_help.c | 87 +++++++++++++++++++++++++++++++++++++++++++++++ util/net_help.h | 10 ++++++ 6 files changed, 166 insertions(+), 1 deletion(-) diff --git a/services/rpz.c b/services/rpz.c index b19157b03..ef2d504ca 100644 --- a/services/rpz.c +++ b/services/rpz.c @@ -436,6 +436,48 @@ rpz_insert_qname_trigger(struct rpz* r, uint8_t* dname, size_t dnamelen, return 1; } +/** Insert RR into RPZ's ACL tree */ +static int +rpz_insert_client_ip_trigger(struct rpz* r, uint8_t* dname, size_t dnamelen, + enum rpz_action a, uint16_t rrtype, uint16_t rrclass, uint32_t ttl, + uint8_t* rdata, size_t rdata_len, uint8_t* rr, size_t rr_len) +{ + /* TODO: remove void casts */ + (void)r; + (void)dnamelen; + (void)rrtype; + (void)rrclass; + (void)ttl; + (void)rdata; + (void)rdata_len; + (void)rr; + (void)rr_len; + + if(a == RPZ_DROP_ACTION) { + /* insert into r->acl tree */ + struct sockaddr_storage addr; + char str[INET6_ADDRSTRLEN]; + socklen_t addrlen; + int net, af; + if(!netblockdnametoaddr(dname, &addr, &addrlen, &net, &af)) + return 0; + /* TODO insert into acl tree */ +#if 0 + if((inet_ntop(af, + (af == AF_INET) ? + (void*)&((struct sockaddr_in*)&addr)->sin_addr : + (void*)&((struct sockaddr_in6*)&addr)->sin6_addr, + str, INET6_ADDRSTRLEN))) + log_info("rpz %s/%d\n", str, net); +#endif + } else { + verbose(VERB_ALGO, "RPZ: skipping unsupported action: %s", + rpz_action_to_string(a)); + return 0; + } + return 0; +} + void rpz_insert_rr(struct rpz* r, size_t aznamelen, uint8_t* dname, size_t dnamelen, uint16_t rr_type, uint16_t rr_class, uint32_t rr_ttl, @@ -459,6 +501,11 @@ rpz_insert_rr(struct rpz* r, size_t aznamelen, uint8_t* dname, a, rr_type, rr_class, rr_ttl, rdatawl, rdatalen, rr, rr_len); } + else if(t == RPZ_CLIENT_IP_TRIGGER) { + rpz_insert_client_ip_trigger(r, policydname, policydnamelen, + a, rr_type, rr_class, rr_ttl, rdatawl, rdatalen, rr, + rr_len); + } else { free(policydname); verbose(VERB_ALGO, "RPZ: skipping unusupported trigger: %s", diff --git a/services/rpz.h b/services/rpz.h index 3bf7e43e0..64fac1ea4 100644 --- a/services/rpz.h +++ b/services/rpz.h @@ -81,7 +81,7 @@ enum rpz_action { }; /** - * RPZ containing policies. Pointed to from corresponding authz-one. Part of a + * RPZ containing policies. Pointed to from corresponding auth-zone. Part of a * linked list to keep configuration order. Iterating or changing the linked * list requires the rpz_lock from struct auth_zones. */ diff --git a/util/data/dname.c b/util/data/dname.c index 8d8a5294c..cf3545f7c 100644 --- a/util/data/dname.c +++ b/util/data/dname.c @@ -546,6 +546,19 @@ dname_lab_startswith(uint8_t* label, char* prefix, char** endptr) return 1; } +int +dname_has_label(uint8_t* dname, uint8_t* label) +{ + uint8_t lablen = *dname++; + while(lablen) { + if(*label == lablen && memcmp(dname, label+1, lablen) == 0) + return 1; + dname += lablen; + lablen = *dname++; + } + return 0; +} + int dname_buffer_write(sldns_buffer* pkt, uint8_t* dname) { diff --git a/util/data/dname.h b/util/data/dname.h index 53a33c689..a7939fb6e 100644 --- a/util/data/dname.h +++ b/util/data/dname.h @@ -196,6 +196,14 @@ int dname_lab_cmp(uint8_t* d1, int labs1, uint8_t* d2, int labs2, int* mlabs); */ int dname_lab_startswith(uint8_t* label, char* prefix, char** endptr); +/** + * Check if dname contains label + * @param dname: dname + * @param label: label to be checked for presence in dname + * @return: 1 if dname has this label, 0 otherwise + */ +int dname_has_label(uint8_t* dname, uint8_t* label); + /** * See if domain name d1 is a strict subdomain of d2. * That is a subdomain, but not equal. diff --git a/util/net_help.c b/util/net_help.c index 13bcdf808..9bc240c5d 100644 --- a/util/net_help.c +++ b/util/net_help.c @@ -284,6 +284,93 @@ int netblockstrtoaddr(const char* str, int port, struct sockaddr_storage* addr, return 1; } +/* RPZ format address dname to network byte order address */ +static int ipdnametoaddr(uint8_t* dname, struct sockaddr_storage* addr, + socklen_t* addrlen, int* af) +{ + uint8_t* ia; + size_t dnamelabs = dname_count_labels(dname); + uint8_t lablen; + char* e = NULL; + int z = 0; + int i; + *af = AF_INET; + if(dnamelabs > 6 || dname_has_label(dname, (uint8_t*)"\002zz")) { + *af = AF_INET6; + } + lablen = *dname++; + i = (*af == AF_INET) ? 3 : 15; + if(*af == AF_INET6) { + struct sockaddr_in6* sa = (struct sockaddr_in6*)addr; + *addrlen = (socklen_t)sizeof(struct sockaddr_in6); + memset(sa, 0, *addrlen); + sa->sin6_family = AF_INET6; + ia = (uint8_t*)&sa->sin6_addr; + } else { /* ip4 */ + struct sockaddr_in* sa = (struct sockaddr_in*)addr; + *addrlen = (socklen_t)sizeof(struct sockaddr_in); + memset(sa, 0, *addrlen); + sa->sin_family = AF_INET; + ia = (uint8_t*)&sa->sin_addr; + } + while(lablen && i >= 0) { + char buff[lablen+1]; + uint16_t chunk; /* big enough to not overflow on IPv6 hextet */ + if((*af == AF_INET && (lablen > 3 || dnamelabs > 6)) || + (*af == AF_INET6 && (lablen > 4 || dnamelabs > 10))) { + return 0; + } + if(memcmp(dname, "zz", 2) == 0 && *af == AF_INET6) { + /* add one or more 0 labels */ + int zl = 11 - dnamelabs; + if(z || zl < 0) + return 0; + z = 1; + i -= (zl*2); + memset(ia+(i+1), 0, zl*2); + } else { + memcpy(buff, dname, lablen); + buff[lablen] = '\0'; + chunk = strtol(buff, &e, (*af == AF_INET) ? 10 : 16); + if(!e || *e != '\0' || (*af == AF_INET && chunk > 255)) + return 0; + if(*af == AF_INET) { + ia[i] = (uint8_t)chunk; + i--; + } else { + /* ia in network byte order */ + ia[i-1] = (uint8_t)(chunk >> 8); + ia[i] = (uint8_t)(chunk & 0x00FF); + i -= 2; + } + } + dname += lablen; + lablen = *dname++; + } + if(i != -1) + /* input too short */ + return 0; + return 1; +} + +int netblockdnametoaddr(uint8_t* dname, struct sockaddr_storage* addr, + socklen_t* addrlen, int* net, int* af) +{ + int e; + char buff[3 /* 3 digit netblock */ + 1]; + if(*dname > 3) + /* netblock invalid */ + return 0; + memcpy(buff, dname+1, *dname); + buff[(*dname)+1] = '\0'; + *net = atoi(buff); + dname += *dname; + dname++; + if(!ipdnametoaddr(dname, addr, addrlen, af)) + return 0; + return 1; +} + int authextstrtoaddr(char* str, struct sockaddr_storage* addr, socklen_t* addrlen, char** auth_name) { diff --git a/util/net_help.h b/util/net_help.h index 0b197fbdd..183d25951 100644 --- a/util/net_help.h +++ b/util/net_help.h @@ -464,4 +464,14 @@ int tls_session_ticket_key_cb(void *s, unsigned char* key_name,unsigned char* iv /** Free memory used for TLS session ticket keys */ void listen_sslctx_delete_ticket_keys(void); +/** + * RPZ format netblock to network byte order address and netblock + * @param dname: the dname containing RPZ format netblock + * @param addr: where to store sockaddr. + * @param addrlen: length of stored sockaddr is returned. + * @param af: where to store address family. + * @return 0 on error. + */ +int netblockdnametoaddr(uint8_t* dname, struct sockaddr_storage* addr, + socklen_t* addrlen, int* net, int* af); #endif /* NET_HELP_H */ From a8d6147ae426c392c47e9a989715b9a3c92f4bca Mon Sep 17 00:00:00 2001 From: Ralph Dolmans Date: Tue, 16 Jul 2019 18:43:16 +0200 Subject: [PATCH 15/56] - Added RPZ response IP support --- daemon/daemon.c | 9 +- daemon/daemon.h | 2 + daemon/worker.c | 31 ++-- libunbound/context.c | 3 +- respip/respip.c | 203 +++++++++++++++----------- respip/respip.h | 83 +++++++++-- services/authzone.c | 21 ++- services/authzone.h | 3 +- services/localzone.h | 2 + services/rpz.c | 269 ++++++++++++++++++++++++++--------- services/rpz.h | 13 +- smallapp/unbound-checkconf.c | 3 +- util/config_file.c | 2 +- util/config_file.h | 2 +- util/net_help.c | 3 +- util/storage/dnstree.c | 13 +- util/storage/dnstree.h | 7 + 17 files changed, 473 insertions(+), 196 deletions(-) diff --git a/daemon/daemon.c b/daemon/daemon.c index 7461a26e2..de67b073d 100644 --- a/daemon/daemon.c +++ b/daemon/daemon.c @@ -616,7 +616,8 @@ daemon_fork(struct daemon* daemon) have_view_respip_cfg; /* read auth zonefiles */ - if(!auth_zones_apply_cfg(daemon->env->auth_zones, daemon->cfg, 1)) + if(!auth_zones_apply_cfg(daemon->env->auth_zones, daemon->cfg, 1, + &daemon->use_rpz)) fatal_exit("auth_zones could not be setup"); /* setup modules */ @@ -628,6 +629,12 @@ daemon_fork(struct daemon* daemon) if(daemon->use_response_ip && modstack_find(&daemon->mods, "respip") < 0) fatal_exit("response-ip options require respip module"); + /* RPZ response ip triggers don't work as expected without the respip + * module. To avoid run-time operational surprise we reject such + * configuration. */ + if(daemon->use_rpz && + modstack_find(&daemon->mods, "respip") < 0) + fatal_exit("RPZ requires the respip module"); /* first create all the worker structures, so we can pass * them to the newly created threads. diff --git a/daemon/daemon.h b/daemon/daemon.h index 5749dbef8..3effbafb7 100644 --- a/daemon/daemon.h +++ b/daemon/daemon.h @@ -132,6 +132,8 @@ struct daemon { struct respip_set* respip_set; /** some response-ip tags or actions are configured if true */ int use_response_ip; + /** some RPZ policies are configured */ + int use_rpz; #ifdef USE_DNSCRYPT /** the dnscrypt environment */ struct dnsc_env* dnscenv; diff --git a/daemon/worker.c b/daemon/worker.c index 8440dd22c..547a7610b 100644 --- a/daemon/worker.c +++ b/daemon/worker.c @@ -572,7 +572,7 @@ static int apply_respip_action(struct worker* worker, const struct query_info* qinfo, struct respip_client_info* cinfo, struct reply_info* rep, struct comm_reply* repinfo, struct ub_packed_rrset_key** alias_rrset, - struct reply_info** encode_repp) + struct reply_info** encode_repp, struct auth_zones* az) { struct respip_action_info actinfo = {respip_none, NULL}; @@ -582,7 +582,7 @@ apply_respip_action(struct worker* worker, const struct query_info* qinfo, return 1; if(!respip_rewrite_reply(qinfo, cinfo, rep, encode_repp, &actinfo, - alias_rrset, 0, worker->scratchpad)) + alias_rrset, 0, worker->scratchpad, az)) return 0; /* xxx_deny actions mean dropping the reply, unless the original reply @@ -709,20 +709,20 @@ answer_from_cache(struct worker* worker, struct query_info* qinfo, (int)(flags&LDNS_RCODE_MASK), edns, repinfo, worker->scratchpad)) goto bail_out; *alias_rrset = NULL; /* avoid confusion if caller set it to non-NULL */ - if(worker->daemon->use_response_ip && !partial_rep && - !apply_respip_action(worker, qinfo, cinfo, rep, repinfo, alias_rrset, - &encode_rep)) { + if((worker->daemon->use_response_ip || worker->daemon->use_rpz) && + !partial_rep && !apply_respip_action(worker, qinfo, cinfo, rep, + repinfo, alias_rrset, + &encode_rep, worker->env.auth_zones)) { goto bail_out; } else if(partial_rep && !respip_merge_cname(partial_rep, qinfo, rep, cinfo, - must_validate, &encode_rep, worker->scratchpad)) { + must_validate, &encode_rep, worker->scratchpad, + worker->env.auth_zones)) { goto bail_out; } if(encode_rep != rep) secure = 0; /* if rewritten, it can't be considered "secure" */ if(!encode_rep || *alias_rrset) { - sldns_buffer_clear(repinfo->c->buffer); - sldns_buffer_flip(repinfo->c->buffer); if(!encode_rep) *need_drop = 1; else { @@ -768,12 +768,18 @@ bail_out: * being deferred). */ static void reply_and_prefetch(struct worker* worker, struct query_info* qinfo, - uint16_t flags, struct comm_reply* repinfo, time_t leeway) + uint16_t flags, struct comm_reply* repinfo, time_t leeway, int noreply) { /* first send answer to client to keep its latency * as small as a cachereply */ - if(sldns_buffer_limit(repinfo->c->buffer) != 0) + if(!noreply) { + if(repinfo->c->tcp_req_info) { + sldns_buffer_copy( + repinfo->c->tcp_req_info->spool_buffer, + repinfo->c->buffer); + } comm_point_send_reply(repinfo); + } server_stats_prefetch(&worker->stats, worker); /* create the prefetch in the mesh as a normal lookup without @@ -1445,7 +1451,7 @@ worker_handle_request(struct comm_point* c, void* arg, int error, /* If we may apply IP-based actions to the answer, build the client * information. As this can be expensive, skip it if there is * absolutely no possibility of it. */ - if(worker->daemon->use_response_ip && + if((worker->daemon->use_response_ip || worker->daemon->use_rpz) && (qinfo.qtype == LDNS_RR_TYPE_A || qinfo.qtype == LDNS_RR_TYPE_AAAA || qinfo.qtype == LDNS_RR_TYPE_ANY)) { @@ -1490,7 +1496,8 @@ lookup_cache: lock_rw_unlock(&e->lock); reply_and_prefetch(worker, lookup_qinfo, sldns_buffer_read_u16_at(c->buffer, 2), - repinfo, leeway); + repinfo, leeway, + (partial_rep || need_drop)); if(!partial_rep) { rc = 0; regional_free_all(worker->scratchpad); diff --git a/libunbound/context.c b/libunbound/context.c index 20e3680ec..524544a91 100644 --- a/libunbound/context.c +++ b/libunbound/context.c @@ -55,6 +55,7 @@ int context_finalize(struct ub_ctx* ctx) { + int is_rpz; struct config_file* cfg = ctx->env->cfg; verbosity = cfg->verbosity; if(ctx->logfile_override) @@ -69,7 +70,7 @@ context_finalize(struct ub_ctx* ctx) return UB_NOMEM; if(!local_zones_apply_cfg(ctx->local_zones, cfg)) return UB_INITFAIL; - if(!auth_zones_apply_cfg(ctx->env->auth_zones, cfg, 1)) + if(!auth_zones_apply_cfg(ctx->env->auth_zones, cfg, 1i, &is_rpz)) return UB_INITFAIL; if(!slabhash_is_size(ctx->env->msg_cache, cfg->msg_cache_size, cfg->msg_cache_slabs)) { diff --git a/respip/respip.c b/respip/respip.c index d61877b55..176abea82 100644 --- a/respip/respip.c +++ b/respip/respip.c @@ -12,6 +12,7 @@ #include "config.h" #include "services/localzone.h" +#include "services/authzone.h" #include "services/cache/dns.h" #include "sldns/str2wire.h" #include "util/config_file.h" @@ -25,30 +26,6 @@ #include "services/view.h" #include "sldns/rrdef.h" -/** - * Conceptual set of IP addresses for response AAAA or A records that should - * trigger special actions. - */ -struct respip_set { - struct regional* region; - struct rbtree_type ip_tree; - char* const* tagname; /* shallow copy of tag names, for logging */ - int num_tags; /* number of tagname entries */ -}; - -/** An address span with response control information */ -struct resp_addr { - /** node in address tree */ - struct addr_tree_node node; - /** tag bitlist */ - uint8_t* taglist; - /** length of the taglist (in bytes) */ - size_t taglen; - /** action for this address span */ - enum respip_action action; - /** "local data" for this node */ - struct ub_packed_rrset_key* data; -}; /** Subset of resp_addr.node, used for inform-variant logging */ struct respip_addr_info { @@ -88,6 +65,7 @@ respip_set_create(void) return NULL; } addr_tree_init(&set->ip_tree); + lock_rw_init(&set->lock); return set; } @@ -96,6 +74,7 @@ respip_set_delete(struct respip_set* set) { if(!set) return; + lock_rw_destroy(&set->lock); regional_destroy(set->region); free(set); } @@ -108,12 +87,49 @@ respip_set_get_tree(struct respip_set* set) return &set->ip_tree; } +struct resp_addr* +respip_sockaddr_find_or_create(struct respip_set* set, struct sockaddr_storage* addr, + socklen_t addrlen, int net, int create, const char* ipstr) +{ + struct resp_addr* node; + node = (struct resp_addr*)addr_tree_find(&set->ip_tree, addr, addrlen, net); + if(!node && create) { + node = regional_alloc_zero(set->region, sizeof(*node)); + if(!node) { + log_err("out of memory"); + return NULL; + } + lock_rw_init(&node->lock); + node->action = respip_none; + if(!addr_tree_insert(&set->ip_tree, &node->node, addr, + addrlen, net)) { + /* We know we didn't find it, so this should be + * impossible. */ + log_warn("unexpected: duplicate address: %s", ipstr); + } + } + return node; +} + +void +respip_sockaddr_delete(struct respip_set* set, struct resp_addr* node) +{ + struct resp_addr* prev; + prev = (struct resp_addr*)rbtree_previous((struct rbnode_type*)node); + lock_rw_destroy(&node->lock); + rbtree_delete(&set->ip_tree, node); + /* no free'ing, all allocated in region */ + if(!prev) + addr_tree_init_parents((rbtree_type*)set); + else + addr_tree_init_parents_node(&prev->node); +} + /** returns the node in the address tree for the specified netblock string; * non-existent node will be created if 'create' is true */ static struct resp_addr* respip_find_or_create(struct respip_set* set, const char* ipstr, int create) { - struct resp_addr* node; struct sockaddr_storage addr; int net; socklen_t addrlen; @@ -122,22 +138,8 @@ respip_find_or_create(struct respip_set* set, const char* ipstr, int create) log_err("cannot parse netblock: '%s'", ipstr); return NULL; } - node = (struct resp_addr*)addr_tree_find(&set->ip_tree, &addr, addrlen, net); - if(!node && create) { - node = regional_alloc_zero(set->region, sizeof(*node)); - if(!node) { - log_err("out of memory"); - return NULL; - } - node->action = respip_none; - if(!addr_tree_insert(&set->ip_tree, &node->node, &addr, - addrlen, net)) { - /* We know we didn't find it, so this should be - * impossible. */ - log_warn("unexpected: duplicate address: %s", ipstr); - } - } - return node; + return respip_sockaddr_find_or_create(set, &addr, addrlen, net, create, + ipstr); } static int @@ -191,6 +193,8 @@ respip_action_cfg(struct respip_set* set, const char* ipstr, action = respip_always_refuse; else if(strcmp(actnstr, "always_nxdomain") == 0) action = respip_always_nxdomain; + else if(strcmp(actnstr, "always_nodata") == 0) + action = respip_always_nodata; else { log_err("unknown response-ip action %s", actnstr); return 0; @@ -232,8 +236,43 @@ new_rrset(struct regional* region, uint16_t rrtype, uint16_t rrclass) } /** enter local data as resource records into a response-ip node */ -static int + +int respip_enter_rr(struct regional* region, struct resp_addr* raddr, + uint16_t rrtype, uint16_t rrclass, time_t ttl, uint8_t* rdata, + size_t rdata_len, const char* rrstr, const char* netblockstr) +{ + struct packed_rrset_data* pd; + struct sockaddr* sa; + sa = (struct sockaddr*)&raddr->node.addr; + if (rrtype == LDNS_RR_TYPE_CNAME && raddr->data) { + log_err("CNAME response-ip data (%s) can not co-exist with other " + "response-ip data for netblock %s", rrstr, netblockstr); + return 0; + } else if (raddr->data && + raddr->data->rk.type == htons(LDNS_RR_TYPE_CNAME)) { + log_err("response-ip data (%s) can not be added; CNAME response-ip " + "data already in place for netblock %s", rrstr, netblockstr); + return 0; + } else if((rrtype != LDNS_RR_TYPE_CNAME) && + ((sa->sa_family == AF_INET && rrtype != LDNS_RR_TYPE_A) || + (sa->sa_family == AF_INET6 && rrtype != LDNS_RR_TYPE_AAAA))) { + log_err("response-ip data %s record type does not correspond " + "to netblock %s address family", rrstr, netblockstr); + return 0; + } + + if(!raddr->data) { + raddr->data = new_rrset(region, rrtype, rrclass); + if(!raddr->data) + return 0; + } + pd = raddr->data->entry.data; + return rrset_insert_rr(region, pd, rdata, rdata_len, ttl, rrstr); +} + +static int +respip_enter_rrstr(struct regional* region, struct resp_addr* raddr, const char* rrstr, const char* netblock) { uint8_t* nm; @@ -244,8 +283,6 @@ respip_enter_rr(struct regional* region, struct resp_addr* raddr, size_t rdata_len = 0; char buf[65536]; char bufshort[64]; - struct packed_rrset_data* pd; - struct sockaddr* sa; int ret; if(raddr->action != respip_redirect && raddr->action != respip_inform_redirect) { @@ -265,31 +302,8 @@ respip_enter_rr(struct regional* region, struct resp_addr* raddr, return 0; } free(nm); - sa = (struct sockaddr*)&raddr->node.addr; - if (rrtype == LDNS_RR_TYPE_CNAME && raddr->data) { - log_err("CNAME response-ip data (%s) can not co-exist with other " - "response-ip data for netblock %s", rrstr, netblock); - return 0; - } else if (raddr->data && - raddr->data->rk.type == htons(LDNS_RR_TYPE_CNAME)) { - log_err("response-ip data (%s) can not be added; CNAME response-ip " - "data already in place for netblock %s", rrstr, netblock); - return 0; - } else if((rrtype != LDNS_RR_TYPE_CNAME) && - ((sa->sa_family == AF_INET && rrtype != LDNS_RR_TYPE_A) || - (sa->sa_family == AF_INET6 && rrtype != LDNS_RR_TYPE_AAAA))) { - log_err("response-ip data %s record type does not correspond " - "to netblock %s address family", rrstr, netblock); - return 0; - } - - if(!raddr->data) { - raddr->data = new_rrset(region, rrtype, rrclass); - if(!raddr->data) - return 0; - } - pd = raddr->data->entry.data; - return rrset_insert_rr(region, pd, rdata, rdata_len, ttl, rrstr); + return respip_enter_rr(region, raddr, rrtype, rrclass, ttl, rdata, + rdata_len, rrstr, netblock); } static int @@ -303,7 +317,7 @@ respip_data_cfg(struct respip_set* set, const char* ipstr, const char* rrstr) "response-ip node for %s not found", rrstr, ipstr); return 0; } - return respip_enter_rr(set->region, node, rrstr, ipstr); + return respip_enter_rrstr(set->region, node, rrstr, ipstr); } static int @@ -361,6 +375,7 @@ respip_set_apply_cfg(struct respip_set* set, char* const* tagname, int num_tags, free(pd); pd = np; } + addr_tree_init_parents(&set->ip_tree); return 1; } @@ -557,9 +572,10 @@ rdata2sockaddr(const struct packed_rrset_data* rd, uint16_t rtype, size_t i, * rep->rrsets for the RRset that contains the matching IP address record * (the index is normally 0, but can be larger than that if this is a CNAME * chain or type-ANY response). + * Returns resp_addr holding read lock. */ -static const struct resp_addr* -respip_addr_lookup(const struct reply_info *rep, struct rbtree_type* iptree, +static struct resp_addr* +respip_addr_lookup(const struct reply_info *rep, struct respip_set* rs, size_t* rrset_id) { size_t i; @@ -567,6 +583,7 @@ respip_addr_lookup(const struct reply_info *rep, struct rbtree_type* iptree, struct sockaddr_storage ss; socklen_t addrlen; + lock_rw_rdlock(&rs->lock); for(i=0; ian_numrrsets; i++) { size_t j; const struct packed_rrset_data* rd; @@ -578,15 +595,17 @@ respip_addr_lookup(const struct reply_info *rep, struct rbtree_type* iptree, for(j = 0; j < rd->count; j++) { if(!rdata2sockaddr(rd, rtype, j, &ss, &addrlen)) continue; - ra = (struct resp_addr*)addr_tree_lookup(iptree, &ss, - addrlen); + ra = (struct resp_addr*)addr_tree_lookup(&rs->ip_tree, + &ss, addrlen); if(ra) { *rrset_id = i; + lock_rw_rdlock(&ra->lock); + lock_rw_unlock(&rs->lock); return ra; } } } - + lock_rw_unlock(&rs->lock); return NULL; } @@ -754,6 +773,7 @@ respip_nodata_answer(uint16_t qtype, enum respip_action action, return 1; } else if(action == respip_static || action == respip_redirect || action == respip_always_nxdomain || + action == respip_always_nodata || action == respip_inform_redirect) { /* Since we don't know about other types of the owner name, * we generally return NOERROR/NODATA unless an NXDOMAIN action @@ -817,7 +837,7 @@ respip_rewrite_reply(const struct query_info* qinfo, const struct respip_client_info* cinfo, const struct reply_info* rep, struct reply_info** new_repp, struct respip_action_info* actinfo, struct ub_packed_rrset_key** alias_rrset, int search_only, - struct regional* region) + struct regional* region, struct auth_zones* az) { const uint8_t* ctaglist; size_t ctaglen; @@ -830,9 +850,10 @@ respip_rewrite_reply(const struct query_info* qinfo, size_t rrset_id = 0; enum respip_action action = respip_none; int tag = -1; - const struct resp_addr* raddr = NULL; + struct resp_addr* raddr = NULL; int ret = 1; struct ub_packed_rrset_key* redirect_rrset = NULL; + struct rpz* r; if(!cinfo) goto done; @@ -859,7 +880,7 @@ respip_rewrite_reply(const struct query_info* qinfo, lock_rw_rdlock(&view->lock); if(view->respip_set) { if((raddr = respip_addr_lookup(rep, - &view->respip_set->ip_tree, &rrset_id))) { + view->respip_set, &rrset_id))) { /** for per-view respip directives the action * can only be direct (i.e. not tag-based) */ action = raddr->action; @@ -868,7 +889,7 @@ respip_rewrite_reply(const struct query_info* qinfo, if(!raddr && !view->isfirst) goto done; } - if(!raddr && ipset && (raddr = respip_addr_lookup(rep, &ipset->ip_tree, + if(!raddr && ipset && (raddr = respip_addr_lookup(rep, ipset, &rrset_id))) { action = (enum respip_action)local_data_find_tag_action( raddr->taglist, raddr->taglen, ctaglist, ctaglen, @@ -876,6 +897,17 @@ respip_rewrite_reply(const struct query_info* qinfo, (enum localzone_type)raddr->action, &tag, ipset->tagname, ipset->num_tags); } + lock_rw_rdlock(&az->rpz_lock); + for(r = az->rpz_first; r && !raddr; r = r->next) { + if(!r->taglist || taglist_intersect(r->taglist, + r->taglistlen, ctaglist, ctaglen)) { + if((raddr = respip_addr_lookup(rep, + r->respip_set, &rrset_id))) { + action = raddr->action; + } + } + } + lock_rw_unlock(&az->rpz_lock); if(raddr && !search_only) { int result = 0; @@ -884,6 +916,7 @@ respip_rewrite_reply(const struct query_info* qinfo, if(action != respip_always_refuse && action != respip_always_transparent && action != respip_always_nxdomain + && action != respip_always_nodata && (result = respip_data_answer(raddr, action, qinfo->qtype, rep, rrset_id, new_repp, tag, tag_datas, tag_datas_size, ipset->tagname, ipset->num_tags, @@ -920,6 +953,8 @@ respip_rewrite_reply(const struct query_info* qinfo, ret = populate_action_info(actinfo, action, raddr, redirect_rrset, tag, ipset, search_only, region); } + if(raddr) + lock_rw_unlock(&raddr->lock); return ret; } @@ -981,7 +1016,7 @@ respip_operate(struct module_qstate* qstate, enum module_ev event, int id, if(!respip_rewrite_reply(&qstate->qinfo, qstate->client_info, qstate->return_msg->rep, &new_rep, &actinfo, &alias_rrset, 0, - qstate->region)) { + qstate->region, qstate->env->auth_zones)) { goto servfail; } if(actinfo.action != respip_none) { @@ -1027,7 +1062,8 @@ int respip_merge_cname(struct reply_info* base_rep, const struct query_info* qinfo, const struct reply_info* tgt_rep, const struct respip_client_info* cinfo, int must_validate, - struct reply_info** new_repp, struct regional* region) + struct reply_info** new_repp, struct regional* region, + struct auth_zones* az) { struct reply_info* new_rep; struct reply_info* tmp_rep = NULL; /* just a placeholder */ @@ -1053,7 +1089,7 @@ respip_merge_cname(struct reply_info* base_rep, /* see if the target reply would be subject to a response-ip action. */ if(!respip_rewrite_reply(qinfo, cinfo, tgt_rep, &tmp_rep, &actinfo, - &alias_rrset, 1, region)) + &alias_rrset, 1, region, az)) return 0; if(actinfo.action != respip_none) { log_info("CNAME target of redirect response-ip action would " @@ -1105,7 +1141,8 @@ respip_inform_super(struct module_qstate* qstate, int id, if(!respip_merge_cname(super->return_msg->rep, &qstate->qinfo, qstate->return_msg->rep, super->client_info, - super->env->need_to_validate, &new_rep, super->region)) + super->env->need_to_validate, &new_rep, super->region, + qstate->env->auth_zones)) goto fail; super->return_msg->rep = new_rep; return; diff --git a/respip/respip.h b/respip/respip.h index 01309caec..d2d39872c 100644 --- a/respip/respip.h +++ b/respip/respip.h @@ -14,19 +14,37 @@ #include "util/module.h" #include "services/localzone.h" +#include "util/locks.h" /** - * Set of response IP addresses with associated actions and tags. - * Forward declaration only here. Actual definition is hidden within the - * module. + * Conceptual set of IP addresses for response AAAA or A records that should + * trigger special actions. */ -struct respip_set; +struct respip_set { + struct regional* region; + struct rbtree_type ip_tree; + lock_rw_type lock; /* lock on the respip tree */ + char* const* tagname; /* shallow copy of tag names, for logging */ + int num_tags; /* number of tagname entries */ +}; + + +/** An address span with response control information */ +struct resp_addr { + /** node in address tree */ + struct addr_tree_node node; + /** lock on the node item */ + lock_rw_type lock; + /** tag bitlist */ + uint8_t* taglist; + /** length of the taglist (in bytes) */ + size_t taglen; + /** action for this address span */ + enum respip_action action; + /** "local data" for this node */ + struct ub_packed_rrset_key* data; +}; -/** - * Forward declaration for the structure that represents a node in the - * respip_set address tree - */ -struct resp_addr; /** * Forward declaration for the structure that represents a tree of view data. @@ -124,12 +142,14 @@ int respip_views_apply_cfg(struct views* vs, struct config_file* cfg, * @param new_repp: pointer placeholder for the merged reply. will be intact * on error. * @param region: allocator to build *new_repp. + * @param az: auth zones containing RPZ information. * @return 1 on success, 0 on error. */ int respip_merge_cname(struct reply_info* base_rep, const struct query_info* qinfo, const struct reply_info* tgt_rep, const struct respip_client_info* cinfo, int must_validate, - struct reply_info** new_repp, struct regional* region); + struct reply_info** new_repp, struct regional* region, + struct auth_zones* az); /** * See if any IP-based action should apply to any IP address of AAAA/A answer @@ -148,6 +168,7 @@ int respip_merge_cname(struct reply_info* base_rep, * @param alias_rrset: must not be NULL. * @param search_only: if true, only check if an action would apply. actionp * will be set (or intact) accordingly but the modified reply won't be built. + * @param az: auth zones containing RPZ information. * @param region: allocator to build *new_repp. * @return 1 on success, 0 on error. */ @@ -156,7 +177,7 @@ int respip_rewrite_reply(const struct query_info* qinfo, const struct reply_info *rep, struct reply_info** new_repp, struct respip_action_info* actinfo, struct ub_packed_rrset_key** alias_rrset, - int search_only, struct regional* region); + int search_only, struct regional* region, struct auth_zones* az); /** * Get the response-ip function block. @@ -227,4 +248,44 @@ void respip_inform_print(struct respip_addr_info* respip_addr, uint8_t* qname, uint16_t qtype, uint16_t qclass, struct local_rrset* local_alias, struct comm_reply* repinfo); +/** + * Find resp_addr in tree, create and add to tree if it does not exist. + * @param set: struct containing the tree and region to alloc new node on. + * should hold write lock. + * @param addr: address to look up. + * @param addrlen: length of addr. + * @param net: netblock to lookup. + * @param create: create node if it does not exist when 1. + * @param ipstr: human redable ip string, for logging. + * @return newly created of found node, not holding lock. + */ +struct resp_addr* +respip_sockaddr_find_or_create(struct respip_set* set, struct sockaddr_storage* addr, + socklen_t addrlen, int net, int create, const char* ipstr); + +/** + * Add RR to resp_addr's RRset. Create RRset is not existing. + * @param region: region to alloc RR(set). + * @param raddr: resp_addr containing RRset. Must hold write lock. + * @param rrtype: RR type. + * @param rrclass: RR class. + * @param ttl: TTL. + * @param rdata: RDATA. + * @param rdata_len: length of rdata. + * @param rrstr: RR as string, for logging + * @param netblockstr: netblock as string, for logging + * @return 0 on error + */ +int +respip_enter_rr(struct regional* region, struct resp_addr* raddr, + uint16_t rrtype, uint16_t rrclass, time_t ttl, uint8_t* rdata, + size_t rdata_len, const char* rrstr, const char* netblockstr); + +/** + * Delete resp_addr node from tree. + * @param set: struct containing tree. Must hold write lock. + * @param node: node to delete. Must hold write lock. + */ +void +respip_sockaddr_delete(struct respip_set* set, struct resp_addr* node); #endif /* RESPIP_RESPIP_H */ diff --git a/services/authzone.c b/services/authzone.c index a408166e5..3594fe41d 100644 --- a/services/authzone.c +++ b/services/authzone.c @@ -1542,9 +1542,9 @@ auth_zone_read_zonefile(struct auth_zone* z, struct config_file* cfg) /* clear the data tree */ traverse_postorder(&z->data, auth_data_del, NULL); rbtree_init(&z->data, &auth_data_cmp); - /* clear the RPZ local_zone tree */ + /* clear the RPZ policies */ if(z->rpz) - rpz_clear_lz(z->rpz); + rpz_clear(z->rpz); memset(&state, 0, sizeof(state)); /* default TTL to 3600 */ @@ -1564,6 +1564,9 @@ auth_zone_read_zonefile(struct auth_zone* z, struct config_file* cfg) return 0; } fclose(in); + + if(z->rpz) + rpz_finish_config(z->rpz); return 1; } @@ -1926,7 +1929,7 @@ az_delete_deleted_zones(struct auth_zones* az) } int auth_zones_apply_cfg(struct auth_zones* az, struct config_file* cfg, - int setup) + int setup, int* is_rpz) { struct config_auth* p; az_setall_deleted(az); @@ -1935,6 +1938,7 @@ int auth_zones_apply_cfg(struct auth_zones* az, struct config_file* cfg, log_warn("auth-zone without a name, skipped"); continue; } + *is_rpz = (*is_rpz || p->isrpz); if(!auth_zones_cfg(az, p)) { log_err("cannot config auth zone %s", p->name); return 0; @@ -4654,9 +4658,9 @@ apply_axfr(struct auth_xfer* xfr, struct auth_zone* z, /* clear the data tree */ traverse_postorder(&z->data, auth_data_del, NULL); rbtree_init(&z->data, &auth_data_cmp); - /* clear the RPZ local_zone tree */ + /* clear the RPZ policies */ if(z->rpz) - rpz_clear_lz(z->rpz); + rpz_clear(z->rpz); xfr->have_zone = 0; xfr->serial = 0; @@ -4754,9 +4758,9 @@ apply_http(struct auth_xfer* xfr, struct auth_zone* z, /* clear the data tree */ traverse_postorder(&z->data, auth_data_del, NULL); rbtree_init(&z->data, &auth_data_cmp); - /* clear the RPZ local_zone tree */ + /* clear the RPZ policies */ if(z->rpz) - rpz_clear_lz(z->rpz); + rpz_clear(z->rpz); xfr->have_zone = 0; xfr->serial = 0; @@ -4937,6 +4941,9 @@ xfr_process_chunk_list(struct auth_xfer* xfr, struct module_env* env, if(xfr->have_zone) xfr->lease_time = *env->now; + if(z->rpz) + rpz_finish_config(z->rpz); + /* unlock */ lock_rw_unlock(&z->lock); diff --git a/services/authzone.h b/services/authzone.h index 00f5d6655..968ff7218 100644 --- a/services/authzone.h +++ b/services/authzone.h @@ -468,10 +468,11 @@ struct auth_zones* auth_zones_create(void); * @param az: auth zones structure * @param cfg: config to apply. * @param setup: if true, also sets up values in the auth zones structure + * @param is_rpz: set to 1 if at least one RPZ zone is configured. * @return false on failure. */ int auth_zones_apply_cfg(struct auth_zones* az, struct config_file* cfg, - int setup); + int setup, int* iz_rpz); /** initial pick up of worker timeouts, ties events to worker event loop * @param az: auth zones structure diff --git a/services/localzone.h b/services/localzone.h index e8c493f63..a476f36c9 100644 --- a/services/localzone.h +++ b/services/localzone.h @@ -555,6 +555,8 @@ enum respip_action { respip_transparent = local_zone_transparent, /** gives response data (if any), else nodata answer. */ respip_typetransparent = local_zone_typetransparent, + /** type invalid */ + respip_invalid = local_zone_invalid, }; int diff --git a/services/rpz.c b/services/rpz.c index ef2d504ca..0b39c95c9 100644 --- a/services/rpz.c +++ b/services/rpz.c @@ -209,6 +209,24 @@ rpz_action_to_localzone_type(enum rpz_action a) } } +static enum respip_action +rpz_action_to_respip_action(enum rpz_action a) +{ + switch(a) { + case RPZ_NXDOMAIN_ACTION: return respip_always_nxdomain; + case RPZ_NODATA_ACTION: return respip_always_nodata; + case RPZ_DROP_ACTION: return respip_deny; + case RPZ_PASSTHRU_ACTION: return respip_always_transparent; + case RPZ_LOCAL_DATA_ACTION: + case RPZ_CNAME_OVERRIDE_ACTION: + return respip_redirect; + case RPZ_INVALID_ACTION: + case RPZ_TCP_ONLY_ACTION: + default: + return respip_invalid; + } +} + static enum rpz_action localzone_type_to_rpz_action(enum localzone_type lzt) { @@ -256,6 +274,7 @@ void rpz_delete(struct rpz* r) if(!r) return; local_zones_delete(r->local_zones); + respip_set_delete(r->respip_set); regional_destroy(r->region); free(r->taglist); free(r->log_name); @@ -263,16 +282,28 @@ void rpz_delete(struct rpz* r) } int -rpz_clear_lz(struct rpz* r) +rpz_clear(struct rpz* r) { /* must hold write lock on auth_zone */ local_zones_delete(r->local_zones); + respip_set_delete(r->respip_set); if(!(r->local_zones = local_zones_create())){ return 0; } + if(!(r->respip_set = respip_set_create())) { + return 0; + } return 1; } +void +rpz_finish_config(struct rpz* r) +{ + lock_rw_wrlock(&r->respip_set->lock); + addr_tree_init_parents(&r->respip_set->ip_tree); + lock_rw_unlock(&r->respip_set->lock); +} + /** new rrset containing CNAME override, does not yet contain a dname */ static struct ub_packed_rrset_key* new_cname_override(struct regional* region, uint8_t* ct, size_t ctlen) @@ -323,17 +354,18 @@ rpz_create(struct config_auth* p) { struct rpz* r = calloc(1, sizeof(*r)); if(!r) - return 0; + goto err; r->region = regional_create_custom(sizeof(struct regional)); if(!r->region) { - free(r); - return 0; + goto err; } if(!(r->local_zones = local_zones_create())){ - free(r); - return 0; + goto err; + } + if(!(r->respip_set = respip_set_create())) { + goto err; } r->taglistlen = p->rpz_taglistlen; r->taglist = memdup(p->rpz_taglist, r->taglistlen); @@ -350,26 +382,34 @@ rpz_create(struct config_auth* p) if(!p->rpz_cname) { log_err("RPZ override with cname action found, but not " "rpz-cname-override configured"); - free(r); - return 0; + goto err; } if(sldns_str2wire_dname_buf(p->rpz_cname, nm, &nmlen) != 0) { log_err("cannot parse RPZ cname override: %s", p->rpz_cname); - free(r); - return 0; + goto err; } r->cname_override = new_cname_override(r->region, nm, nmlen); if(!r->cname_override) { - free(r); - return 0; + goto err; } } r->log = p->rpz_log; if(p->rpz_log_name) r->log_name = strdup(p->rpz_log_name); return r; +err: + if(r) { + if(r->local_zones) + local_zones_delete(r->local_zones); + if(r->respip_set) + respip_set_delete(r->respip_set); + if(r->taglist) + free(r->taglist); + free(r); + } + return NULL; } /** Remove RPZ zone name from dname */ @@ -436,46 +476,46 @@ rpz_insert_qname_trigger(struct rpz* r, uint8_t* dname, size_t dnamelen, return 1; } -/** Insert RR into RPZ's ACL tree */ +/** Insert RR into RPZ's respip_set */ static int -rpz_insert_client_ip_trigger(struct rpz* r, uint8_t* dname, size_t dnamelen, +rpz_insert_response_ip_trigger(struct rpz* r, uint8_t* dname, enum rpz_action a, uint16_t rrtype, uint16_t rrclass, uint32_t ttl, uint8_t* rdata, size_t rdata_len, uint8_t* rr, size_t rr_len) { - /* TODO: remove void casts */ - (void)r; - (void)dnamelen; - (void)rrtype; - (void)rrclass; - (void)ttl; - (void)rdata; - (void)rdata_len; - (void)rr; - (void)rr_len; + struct resp_addr* node; + struct sockaddr_storage addr; + socklen_t addrlen; + int net, af; + char* rrstr = sldns_wire2str_rr(rr, rr_len); + enum respip_action respa = rpz_action_to_respip_action(a); - if(a == RPZ_DROP_ACTION) { - /* insert into r->acl tree */ - struct sockaddr_storage addr; - char str[INET6_ADDRSTRLEN]; - socklen_t addrlen; - int net, af; - if(!netblockdnametoaddr(dname, &addr, &addrlen, &net, &af)) - return 0; - /* TODO insert into acl tree */ -#if 0 - if((inet_ntop(af, - (af == AF_INET) ? - (void*)&((struct sockaddr_in*)&addr)->sin_addr : - (void*)&((struct sockaddr_in6*)&addr)->sin6_addr, - str, INET6_ADDRSTRLEN))) - log_info("rpz %s/%d\n", str, net); -#endif - } else { + if(a == RPZ_TCP_ONLY_ACTION || a == RPZ_INVALID_ACTION || + respa == respip_invalid) { verbose(VERB_ALGO, "RPZ: skipping unsupported action: %s", rpz_action_to_string(a)); return 0; } - return 0; + + if(!netblockdnametoaddr(dname, &addr, &addrlen, &net, &af)) + return 0; + + lock_rw_wrlock(&r->respip_set->lock); + if(!(node=respip_sockaddr_find_or_create(r->respip_set, &addr, addrlen, + net, 1, rrstr))) { + lock_rw_unlock(&r->respip_set->lock); + return 0; + } + + lock_rw_wrlock(&node->lock); + lock_rw_unlock(&r->respip_set->lock); + node->action = respa; + + if(a == RPZ_LOCAL_DATA_ACTION) { + respip_enter_rr(r->respip_set->region, node, rrtype, + rrclass, ttl, rdata, rdata_len, rrstr, ""); + } + lock_rw_unlock(&node->lock); + return 1; } void @@ -501,8 +541,8 @@ rpz_insert_rr(struct rpz* r, size_t aznamelen, uint8_t* dname, a, rr_type, rr_class, rr_ttl, rdatawl, rdatalen, rr, rr_len); } - else if(t == RPZ_CLIENT_IP_TRIGGER) { - rpz_insert_client_ip_trigger(r, policydname, policydnamelen, + else if(t == RPZ_RESPONSE_IP_TRIGGER) { + rpz_insert_response_ip_trigger(r, policydname, a, rr_type, rr_class, rr_ttl, rdatawl, rdatalen, rr, rr_len); } @@ -637,46 +677,135 @@ rpz_data_delete_rr(struct local_zone* z, uint8_t* policydname, return 1; } -void -rpz_remove_rr(struct rpz* r, size_t aznamelen, uint8_t* dname, - size_t dnamelen, uint16_t rr_type, uint16_t rr_class, uint8_t* rdatawl, - size_t rdatalen) +/** + * Remove RR from RPZ's respip set + * @param raddr: respip node + * @param rdata: rdata of RR to remove + * @param rdatalen: length of rdata + * @param region: RPZ's repsip_set region + * @return: 1 if zone must be removed after RR deletion + */ +static int +rpz_rrset_delete_rr(struct resp_addr* raddr, uint16_t rr_type, uint8_t* rdata, + size_t rdatalen, struct regional* region) +{ + size_t index; + struct packed_rrset_data* d; + if(!raddr->data) + return 1; + d = raddr->data->entry.data; + if(ntohs(raddr->data->rk.type) != rr_type) { + return 0; + } + if(packed_rrset_find_rr(d, rdata, rdatalen, &index)) { + if(d->count == 1) { + /* regional alloc'd */ + raddr->data->entry.data = NULL; + raddr->data = NULL; + return 1; + } + if(d->count > 1) { + struct packed_rrset_data* new; + new = packed_rrset_remove_rr(d, index, region); + if(!new) + return 0; + raddr->data->entry.data = new; + } + } + return 0; + +} + +/** Remove RR from RPZ's local-zone */ +static void +rpz_remove_qname_trigger(struct rpz* r, uint8_t* dname, size_t dnamelen, + enum rpz_action a, uint16_t rr_type, uint16_t rr_class, + uint8_t* rdatawl, size_t rdatalen) { struct local_zone* z; + int delete_zone = 1; + z = rpz_find_zone(r, dname, dnamelen, rr_class, + 1 /* only exact */, 1 /* wr lock */); + if(!z) { + verbose(VERB_ALGO, "RPZ: cannot remove RR from IXFR, " + "RPZ domain not found"); + return; + } + if(a == RPZ_LOCAL_DATA_ACTION) + delete_zone = rpz_data_delete_rr(z, dname, + dnamelen, rr_type, rdatawl, rdatalen); + else if(a != localzone_type_to_rpz_action(z->type)) { + return; + } + lock_rw_unlock(&z->lock); + if(delete_zone) { + local_zones_del_zone(r->local_zones, z); + } + return; +} + +static void +rpz_remove_response_ip_trigger(struct rpz* r, uint8_t* dname, enum rpz_action a, + uint16_t rr_type, uint8_t* rdatawl, size_t rdatalen) +{ + struct resp_addr* node; + struct sockaddr_storage addr; + socklen_t addrlen; + int net, af; + int delete_respip = 1; + + if(!netblockdnametoaddr(dname, &addr, &addrlen, &net, &af)) + return; + + lock_rw_wrlock(&r->respip_set->lock); + if(!(node = (struct resp_addr*)addr_tree_find( + &r->respip_set->ip_tree, &addr, addrlen, net))) { + verbose(VERB_ALGO, "RPZ: cannot remove RR from IXFR, " + "RPZ domain not found"); + lock_rw_unlock(&r->respip_set->lock); + return; + } + + lock_rw_wrlock(&node->lock); + if(a == RPZ_LOCAL_DATA_ACTION) { + /* remove RR, signal whether RR can be removed */ + delete_respip = rpz_rrset_delete_rr(node, rr_type, rdatawl, + rdatalen, r->respip_set->region); + } + if(delete_respip) { + /* delete + reset parent pointers */ + respip_sockaddr_delete(r->respip_set, node); + } else { + lock_rw_unlock(&node->lock); + } + lock_rw_unlock(&r->respip_set->lock); +} + +void +rpz_remove_rr(struct rpz* r, size_t aznamelen, uint8_t* dname, size_t dnamelen, + uint16_t rr_type, uint16_t rr_class, uint8_t* rdatawl, size_t rdatalen) +{ size_t policydnamelen; /* name is free'd in local_zone delete */ uint8_t* policydname = calloc(1, LDNS_MAX_DOMAINLEN + 1); enum rpz_trigger t; enum rpz_action a; - int delete_zone = 1; a = rpz_rr_to_action(rr_type, rdatawl, rdatalen); + if(a == RPZ_INVALID_ACTION) + return; if(!(policydnamelen = strip_dname_origin(dname, dnamelen, aznamelen, policydname))) { free(policydname); return; } t = rpz_dname_to_trigger(policydname); - if(a != RPZ_INVALID_ACTION && t == RPZ_QNAME_TRIGGER) { - z = rpz_find_zone(r, policydname, policydnamelen, rr_class, - 1 /* only exact */, 1 /* wr lock */); - if(!z) { - verbose(VERB_ALGO, "RPZ: cannot remove RR from IXFR, " - "RPZ domain not found"); - free(policydname); - return; - } - if(a == RPZ_LOCAL_DATA_ACTION) - delete_zone = rpz_data_delete_rr(z, policydname, - policydnamelen, rr_type, rdatawl, rdatalen); - else if(a != localzone_type_to_rpz_action(z->type)) { - free(policydname); - return; - } - lock_rw_unlock(&z->lock); - if(delete_zone) { - local_zones_del_zone(r->local_zones, z); - } + if(t == RPZ_QNAME_TRIGGER) { + rpz_remove_qname_trigger(r, policydname, policydnamelen, a, + rr_type, rr_class, rdatawl, rdatalen); + } else if(t == RPZ_RESPONSE_IP_TRIGGER) { + rpz_remove_response_ip_trigger(r, policydname, a, rr_type, + rdatawl, rdatalen); } free(policydname); } diff --git a/services/rpz.h b/services/rpz.h index 64fac1ea4..a5b9e67ab 100644 --- a/services/rpz.h +++ b/services/rpz.h @@ -48,6 +48,7 @@ #include "services/authzone.h" #include "sldns/sbuffer.h" #include "daemon/stats.h" +#include "respip/respip.h" /** * RPZ triggers, only the QNAME trigger is currently supported in Unbound. @@ -87,6 +88,7 @@ enum rpz_action { */ struct rpz { struct local_zones* local_zones; + struct respip_set* respip_set; uint8_t* taglist; size_t taglistlen; enum rpz_action action_override; @@ -157,10 +159,11 @@ int rpz_apply_qname_trigger(struct auth_zones* az, struct module_env* env, void rpz_delete(struct rpz* r); /** - * Clear local-zones in RPZ, used after reloading file or AXFR/HTTP transfer. + * Clear local-zones and respip data in RPZ, used after reloading file or + * AXFR/HTTP transfer. * @param r: RPZ to use */ -int rpz_clear_lz(struct rpz* r); +int rpz_clear(struct rpz* r); /** * Create RPZ. RPZ must be added to linked list after creation. @@ -175,4 +178,10 @@ struct rpz* rpz_create(struct config_auth* p); */ const char* rpz_action_to_string(enum rpz_action a); +/** + * Prepare RPZ after procesing feed content. + * @param r: RPZ to use + */ +void rpz_finish_config(struct rpz* r); + #endif /* SERVICES_RPZ_H */ diff --git a/smallapp/unbound-checkconf.c b/smallapp/unbound-checkconf.c index 0cf3d35aa..713380600 100644 --- a/smallapp/unbound-checkconf.c +++ b/smallapp/unbound-checkconf.c @@ -642,8 +642,9 @@ check_hints(struct config_file* cfg) static void check_auth(struct config_file* cfg) { + int is_rpz; struct auth_zones* az = auth_zones_create(); - if(!az || !auth_zones_apply_cfg(az, cfg, 0)) { + if(!az || !auth_zones_apply_cfg(az, cfg, 0i, &is_rpz)) { fatal_exit("Could not setup authority zones"); } auth_zones_delete(az); diff --git a/util/config_file.c b/util/config_file.c index dbd5a7bad..1042d1a2c 100644 --- a/util/config_file.c +++ b/util/config_file.c @@ -1900,7 +1900,7 @@ char* config_taglist2str(struct config_file* cfg, uint8_t* taglist, return strdup(buf); } -int taglist_intersect(uint8_t* list1, size_t list1len, uint8_t* list2, +int taglist_intersect(uint8_t* list1, size_t list1len, const uint8_t* list2, size_t list2len) { size_t i; diff --git a/util/config_file.h b/util/config_file.h index 3bcd3db0a..a8fb88a4f 100644 --- a/util/config_file.h +++ b/util/config_file.h @@ -1036,7 +1036,7 @@ char* config_taglist2str(struct config_file* cfg, uint8_t* taglist, * @param list2len: length in bytes of second list. * @return true if there are tags in common, 0 if not. */ -int taglist_intersect(uint8_t* list1, size_t list1len, uint8_t* list2, +int taglist_intersect(uint8_t* list1, size_t list1len, const uint8_t* list2, size_t list2len); /** diff --git a/util/net_help.c b/util/net_help.c index 9bc240c5d..9ba5ca15b 100644 --- a/util/net_help.c +++ b/util/net_help.c @@ -356,13 +356,12 @@ static int ipdnametoaddr(uint8_t* dname, struct sockaddr_storage* addr, int netblockdnametoaddr(uint8_t* dname, struct sockaddr_storage* addr, socklen_t* addrlen, int* net, int* af) { - int e; char buff[3 /* 3 digit netblock */ + 1]; if(*dname > 3) /* netblock invalid */ return 0; memcpy(buff, dname+1, *dname); - buff[(*dname)+1] = '\0'; + buff[*dname] = '\0'; *net = atoi(buff); dname += *dname; dname++; diff --git a/util/storage/dnstree.c b/util/storage/dnstree.c index 190369d85..f883044af 100644 --- a/util/storage/dnstree.c +++ b/util/storage/dnstree.c @@ -104,11 +104,12 @@ int addr_tree_insert(rbtree_type* tree, struct addr_tree_node* node, return rbtree_insert(tree, &node->node) != NULL; } -void addr_tree_init_parents(rbtree_type* tree) +void addr_tree_init_parents_node(struct addr_tree_node* node) { - struct addr_tree_node* node, *prev = NULL, *p; + struct addr_tree_node* prev = NULL, *p; int m; - RBTREE_FOR(node, struct addr_tree_node*, tree) { + for(; (rbnode_type*)node != RBTREE_NULL; + node = (struct addr_tree_node*)rbtree_next((rbnode_type*)node)) { node->parent = NULL; if(!prev || prev->addrlen != node->addrlen) { prev = node; @@ -130,6 +131,12 @@ void addr_tree_init_parents(rbtree_type* tree) } } +void addr_tree_init_parents(rbtree_type* tree) +{ + addr_tree_init_parents_node( + (struct addr_tree_node*)rbtree_first(tree)); +} + void name_tree_init_parents(rbtree_type* tree) { struct name_tree_node* node, *prev = NULL, *p; diff --git a/util/storage/dnstree.h b/util/storage/dnstree.h index 782644b63..d54602fd7 100644 --- a/util/storage/dnstree.h +++ b/util/storage/dnstree.h @@ -173,6 +173,13 @@ int addr_tree_insert(rbtree_type* tree, struct addr_tree_node* node, */ void addr_tree_init_parents(rbtree_type* tree); +/** + * Initialize parent pointers in partial addr tree. + * Reinitialize pointer for part of tree, used after node deletion + * @param node: node to start parent pointer initialization for. + */ +void addr_tree_init_parents_node(struct addr_tree_node* node); + /** * Lookup closest encloser in addr tree. * @param tree: addr tree From 9ce704541330731906663a58338e876f1cfc66da Mon Sep 17 00:00:00 2001 From: Ralph Dolmans Date: Tue, 16 Jul 2019 19:45:49 +0200 Subject: [PATCH 16/56] - Fix doxygen issue - Fix memory leak - IANA ports update - merge littlehash ASAN changes --- services/authzone.h | 2 +- services/rpz.c | 15 +++++++++++---- util/iana_ports.inc | 2 +- util/net_help.h | 1 + util/storage/lookup3.c | 8 ++++++-- 5 files changed, 20 insertions(+), 8 deletions(-) diff --git a/services/authzone.h b/services/authzone.h index 968ff7218..9bb131ad8 100644 --- a/services/authzone.h +++ b/services/authzone.h @@ -472,7 +472,7 @@ struct auth_zones* auth_zones_create(void); * @return false on failure. */ int auth_zones_apply_cfg(struct auth_zones* az, struct config_file* cfg, - int setup, int* iz_rpz); + int setup, int* is_rpz); /** initial pick up of worker timeouts, ties events to worker event loop * @param az: auth zones structure diff --git a/services/rpz.c b/services/rpz.c index 0b39c95c9..ecf32f430 100644 --- a/services/rpz.c +++ b/services/rpz.c @@ -556,7 +556,9 @@ rpz_insert_rr(struct rpz* r, size_t aznamelen, uint8_t* dname, /** * Find RPZ local-zone by qname. * @param r: rpz containing local-zone tree - * @param qinfo: qinfo struct + * @param qname: qname + * @param qname_len: length of qname + * @param qclass: qclass * @param only_exact: if 1 only excact (non wildcard) matches are returned * @param wr: get write lock for local-zone if 1, read lock if 0 * @return: NULL or local-zone holding rd or wr lock @@ -680,6 +682,7 @@ rpz_data_delete_rr(struct local_zone* z, uint8_t* policydname, /** * Remove RR from RPZ's respip set * @param raddr: respip node + * @param rr_type: RR type of RR to remove * @param rdata: rdata of RR to remove * @param rdatalen: length of rdata * @param region: RPZ's repsip_set region @@ -786,14 +789,18 @@ rpz_remove_rr(struct rpz* r, size_t aznamelen, uint8_t* dname, size_t dnamelen, uint16_t rr_type, uint16_t rr_class, uint8_t* rdatawl, size_t rdatalen) { size_t policydnamelen; - /* name is free'd in local_zone delete */ - uint8_t* policydname = calloc(1, LDNS_MAX_DOMAINLEN + 1); enum rpz_trigger t; enum rpz_action a; + uint8_t* policydname; + + if(!(policydname = calloc(1, LDNS_MAX_DOMAINLEN + 1))) + return; a = rpz_rr_to_action(rr_type, rdatawl, rdatalen); - if(a == RPZ_INVALID_ACTION) + if(a == RPZ_INVALID_ACTION) { + free(policydname); return; + } if(!(policydnamelen = strip_dname_origin(dname, dnamelen, aznamelen, policydname))) { free(policydname); diff --git a/util/iana_ports.inc b/util/iana_ports.inc index 6873ca9ab..8577073c8 100644 --- a/util/iana_ports.inc +++ b/util/iana_ports.inc @@ -1848,7 +1848,6 @@ 2197, 2198, 2199, -2200, 2201, 2202, 2203, @@ -4768,6 +4767,7 @@ 8088, 8097, 8100, +8111, 8115, 8116, 8118, diff --git a/util/net_help.h b/util/net_help.h index 183d25951..1eebae574 100644 --- a/util/net_help.h +++ b/util/net_help.h @@ -469,6 +469,7 @@ void listen_sslctx_delete_ticket_keys(void); * @param dname: the dname containing RPZ format netblock * @param addr: where to store sockaddr. * @param addrlen: length of stored sockaddr is returned. + * @param net: where to store netmask * @param af: where to store address family. * @return 0 on error. */ diff --git a/util/storage/lookup3.c b/util/storage/lookup3.c index cc1107481..bb25eb433 100644 --- a/util/storage/lookup3.c +++ b/util/storage/lookup3.c @@ -1,4 +1,7 @@ /* + May 2019(Wouter) patch to enable the valgrind clean implementation all the + time. This enables better security audit and checks, which is better + than the speedup. Git issue #30. Renamed the define ARRAY_CLEAN_ACCESS. February 2013(Wouter) patch defines for BSD endianness, from Brad Smith. January 2012(Wouter) added randomised initial value, fallout from 28c3. March 2007(Wouter) adapted from lookup3.c original, add config.h include. @@ -44,6 +47,7 @@ on 1 byte), but shoehorning those bytes into integers efficiently is messy. ------------------------------------------------------------------------------- */ /*#define SELF_TEST 1*/ +#define ARRAY_CLEAN_ACCESS 1 #include "config.h" #include "util/storage/lookup3.h" @@ -336,7 +340,7 @@ uint32_t hashlittle( const void *key, size_t length, uint32_t initval) u.ptr = key; if (HASH_LITTLE_ENDIAN && ((u.i & 0x3) == 0)) { const uint32_t *k = (const uint32_t *)key; /* read 32-bit chunks */ -#ifdef VALGRIND +#ifdef ARRAY_CLEAN_ACCESS const uint8_t *k8; #endif @@ -361,7 +365,7 @@ uint32_t hashlittle( const void *key, size_t length, uint32_t initval) * still catch it and complain. The masking trick does make the hash * noticeably faster for short strings (like English words). */ -#ifndef VALGRIND +#ifndef ARRAY_CLEAN_ACCESS switch(length) { From 1c5d08185379e9a0ab27307d285adc3e24f59574 Mon Sep 17 00:00:00 2001 From: Ralph Dolmans Date: Thu, 1 Aug 2019 14:31:37 +0200 Subject: [PATCH 17/56] - Add RPZ response IP override option, logging, and statistics --- daemon/stats.c | 4 ++ daemon/worker.c | 15 +++++++- respip/respip.c | 98 ++++++++++++++++++++++++++++++++++++++++++------- respip/respip.h | 13 +++++-- services/mesh.c | 12 +++++- services/mesh.h | 3 ++ services/rpz.c | 19 +++++++++- services/rpz.h | 11 ++++++ 8 files changed, 153 insertions(+), 22 deletions(-) diff --git a/daemon/stats.c b/daemon/stats.c index 504b0efcc..3cf0d2b8d 100644 --- a/daemon/stats.c +++ b/daemon/stats.c @@ -273,6 +273,8 @@ server_stats_compile(struct worker* worker, struct ub_stats_info* s, int reset) s->svr.ans_rcode_nodata += (long long)worker->env.mesh->ans_nodata; for(i=0; i<16; i++) s->svr.ans_rcode[i] += (long long)worker->env.mesh->ans_rcode[i]; + for(i=0; isvr.rpz_action[i] += (long long)worker->env.mesh->rpz_action[i]; timehist_export(worker->env.mesh->histogram, s->svr.hist, NUM_BUCKETS_HIST); /* values from outside network */ @@ -446,6 +448,8 @@ void server_stats_add(struct ub_stats_info* total, struct ub_stats_info* a) total->svr.ans_rcode[i] += a->svr.ans_rcode[i]; for(i=0; isvr.hist[i] += a->svr.hist[i]; + for(i=0; isvr.rpz_action[i] += a->svr.rpz_action[i]; } total->mesh_num_states += a->mesh_num_states; diff --git a/daemon/worker.c b/daemon/worker.c index 547a7610b..2cfc96845 100644 --- a/daemon/worker.c +++ b/daemon/worker.c @@ -61,6 +61,7 @@ #include "services/authzone.h" #include "services/mesh.h" #include "services/localzone.h" +#include "services/rpz.h" #include "util/data/msgparse.h" #include "util/data/msgencode.h" #include "util/data/dname.h" @@ -574,7 +575,8 @@ apply_respip_action(struct worker* worker, const struct query_info* qinfo, struct comm_reply* repinfo, struct ub_packed_rrset_key** alias_rrset, struct reply_info** encode_repp, struct auth_zones* az) { - struct respip_action_info actinfo = {respip_none, NULL}; + struct respip_action_info actinfo = {0}; + actinfo.action = respip_none; if(qinfo->qtype != LDNS_RR_TYPE_A && qinfo->qtype != LDNS_RR_TYPE_AAAA && @@ -595,9 +597,18 @@ apply_respip_action(struct worker* worker, const struct query_info* qinfo, /* If address info is returned, it means the action should be an * 'inform' variant and the information should be logged. */ if(actinfo.addrinfo) { - respip_inform_print(actinfo.addrinfo, qinfo->qname, + respip_inform_print(&actinfo, qinfo->qname, qinfo->qtype, qinfo->qclass, qinfo->local_alias, repinfo); + + if(worker->stats.extended && actinfo.rpz_used) { + /* TODO: does not work for disabled (override) actions */ + if(actinfo.rpz_cname_override) + worker->stats.rpz_action[RPZ_CNAME_OVERRIDE_ACTION]++; + else + worker->stats.rpz_action[ + respip_action_to_rpz_action(actinfo.action)]++; + } } return 1; diff --git a/respip/respip.c b/respip/respip.c index 176abea82..a529ccf62 100644 --- a/respip/respip.c +++ b/respip/respip.c @@ -656,6 +656,7 @@ make_new_reply_info(const struct reply_info* rep, struct regional* region, * the "no data" action in case of error. * @param raddr: address span that requires an action * @param action: action to apply + * @param data: RRset to use for override * @param qtype: original query type * @param rep: original reply message * @param rrset_id: the rrset ID in 'rep' to which the action should apply @@ -671,13 +672,14 @@ make_new_reply_info(const struct reply_info* rep, struct regional* region, */ static int respip_data_answer(const struct resp_addr* raddr, enum respip_action action, + struct ub_packed_rrset_key* data, uint16_t qtype, const struct reply_info* rep, size_t rrset_id, struct reply_info** new_repp, int tag, struct config_strlist** tag_datas, size_t tag_datas_size, char* const* tagname, int num_tags, struct ub_packed_rrset_key** redirect_rrsetp, struct regional* region) { - struct ub_packed_rrset_key* rp = raddr->data; + struct ub_packed_rrset_key* rp = data; struct reply_info* new_rep; *redirect_rrsetp = NULL; @@ -715,7 +717,7 @@ respip_data_answer(const struct resp_addr* raddr, enum respip_action action, * to replace the rrset's dname. Note that, unlike local data, we * rename the dname for other actions than redirect. This is because * response-ip-data isn't associated to any specific name. */ - if(rp == raddr->data) { + if(rp == data) { rp = copy_rrset(rp, region); if(!rp) return -1; @@ -807,16 +809,22 @@ populate_action_info(struct respip_action_info* actinfo, enum respip_action action, const struct resp_addr* raddr, const struct ub_packed_rrset_key* ATTR_UNUSED(rrset), int ATTR_UNUSED(tag), const struct respip_set* ATTR_UNUSED(ipset), - int ATTR_UNUSED(action_only), struct regional* region) + int ATTR_UNUSED(action_only), struct regional* region, int rpz_used, + int rpz_log, char* log_name, int rpz_cname_override) { if(action == respip_none || !raddr) return 1; actinfo->action = action; + actinfo->rpz_used = 1; + actinfo->rpz_log = rpz_log; + actinfo->log_name = log_name; + actinfo->rpz_cname_override = rpz_cname_override; /* for inform variants, make a copy of the matched address block for * later logging. We make a copy to proactively avoid disruption if * and when we allow a dynamic update to the respip tree. */ - if(action == respip_inform || action == respip_inform_deny) { + if(action == respip_inform || action == respip_inform_deny || + rpz_log) { struct respip_addr_info* a = regional_alloc_zero(region, sizeof(*a)); if(!a) { @@ -832,6 +840,30 @@ populate_action_info(struct respip_action_info* actinfo, return 1; } +static int +respip_use_rpz(struct resp_addr* raddr, struct rpz* r, + enum respip_action* action, + struct ub_packed_rrset_key** data, int* rpz_log, char** log_name, + int* rpz_cname_override, struct regional* region) +{ + if(r->action_override == RPZ_DISABLED_ACTION) { + return 0; + } + else if(r->action_override == RPZ_NO_OVERRIDE_ACTION) + *action = raddr->action; + else + *action = rpz_action_to_respip_action(r->action_override); + if(r->action_override == RPZ_CNAME_OVERRIDE_ACTION && + r->cname_override) { + *data = r->cname_override; + *rpz_cname_override = 1; + } + *rpz_log = r->log; + if(r->log_name) + *log_name = regional_strdup(region, r->log_name); + return 1; +} + int respip_rewrite_reply(const struct query_info* qinfo, const struct respip_client_info* cinfo, const struct reply_info* rep, @@ -854,6 +886,11 @@ respip_rewrite_reply(const struct query_info* qinfo, int ret = 1; struct ub_packed_rrset_key* redirect_rrset = NULL; struct rpz* r; + struct ub_packed_rrset_key* data = NULL; + int rpz_used = 0; + int rpz_log = 0; + int rpz_cname_override = 0; + char* log_name = NULL; if(!cinfo) goto done; @@ -903,7 +940,15 @@ respip_rewrite_reply(const struct query_info* qinfo, r->taglistlen, ctaglist, ctaglen)) { if((raddr = respip_addr_lookup(rep, r->respip_set, &rrset_id))) { - action = raddr->action; + } + if(raddr) { + if(!respip_use_rpz(raddr, r, &action, &data, + &rpz_log, &log_name, &rpz_cname_override, + region)) { + lock_rw_unlock(&raddr->lock); + raddr = NULL; + } + rpz_used = 1; } } } @@ -918,9 +963,10 @@ respip_rewrite_reply(const struct query_info* qinfo, && action != respip_always_nxdomain && action != respip_always_nodata && (result = respip_data_answer(raddr, action, - qinfo->qtype, rep, rrset_id, new_repp, tag, tag_datas, - tag_datas_size, ipset->tagname, ipset->num_tags, - &redirect_rrset, region)) < 0) { + (data) ? data : raddr->data, qinfo->qtype, rep, + rrset_id, new_repp, tag, tag_datas, tag_datas_size, + ipset->tagname, ipset->num_tags, &redirect_rrset, + region)) < 0) { ret = 0; goto done; } @@ -951,7 +997,8 @@ respip_rewrite_reply(const struct query_info* qinfo, *alias_rrset = redirect_rrset; /* on success, populate respip result structure */ ret = populate_action_info(actinfo, action, raddr, - redirect_rrset, tag, ipset, search_only, region); + redirect_rrset, tag, ipset, search_only, region, + rpz_used, rpz_log, log_name, rpz_cname_override); } if(raddr) lock_rw_unlock(&raddr->lock); @@ -1009,9 +1056,10 @@ respip_operate(struct module_qstate* qstate, enum module_ev event, int id, qstate->qinfo.qtype == LDNS_RR_TYPE_AAAA || qstate->qinfo.qtype == LDNS_RR_TYPE_ANY) && qstate->return_msg && qstate->return_msg->rep) { - struct respip_action_info actinfo = {respip_none, NULL}; struct reply_info* new_rep = qstate->return_msg->rep; struct ub_packed_rrset_key* alias_rrset = NULL; + struct respip_action_info actinfo = {0}; + actinfo.action = respip_none; if(!respip_rewrite_reply(&qstate->qinfo, qstate->client_info, qstate->return_msg->rep, @@ -1070,7 +1118,8 @@ respip_merge_cname(struct reply_info* base_rep, struct ub_packed_rrset_key* alias_rrset = NULL; /* ditto */ uint16_t tgt_rcode; size_t i, j; - struct respip_action_info actinfo = {respip_none, NULL}; + struct respip_action_info actinfo = {0}; + actinfo.action = respip_none; /* If the query for the CNAME target would result in an unusual rcode, * we generally translate it as a failure for the base query @@ -1201,12 +1250,15 @@ respip_set_is_empty(const struct respip_set* set) } void -respip_inform_print(struct respip_addr_info* respip_addr, uint8_t* qname, +respip_inform_print(struct respip_action_info* respip_actinfo, uint8_t* qname, uint16_t qtype, uint16_t qclass, struct local_rrset* local_alias, struct comm_reply* repinfo) { char srcip[128], respip[128], txt[512]; unsigned port; + struct respip_addr_info* respip_addr = respip_actinfo->addrinfo; + size_t txtlen = 0; + char* actionstr = NULL; if(local_alias) qname = local_alias->rrset->rk.dname; @@ -1216,7 +1268,25 @@ respip_inform_print(struct respip_addr_info* respip_addr, uint8_t* qname, addr_to_str(&repinfo->addr, repinfo->addrlen, srcip, sizeof(srcip)); addr_to_str(&respip_addr->addr, respip_addr->addrlen, respip, sizeof(respip)); - snprintf(txt, sizeof(txt), "%s/%d inform %s@%u", respip, - respip_addr->net, srcip, port); + if(respip_actinfo->rpz_log) { + txtlen += snprintf(txt+txtlen, sizeof(txt)-txtlen, "%s", + "RPZ applied "); + if(respip_actinfo->rpz_cname_override) + actionstr = strdup( + rpz_action_to_string(RPZ_CNAME_OVERRIDE_ACTION)); + else + actionstr = strdup(rpz_action_to_string( + respip_action_to_rpz_action( + respip_actinfo->action))); + } + if(respip_actinfo->log_name) { + txtlen += snprintf(txt+txtlen, sizeof(txt)-txtlen, + "[%s] ", respip_actinfo->log_name); + } + txtlen += snprintf(txt+txtlen, sizeof(txt)-txtlen, + "%s/%d %s %s@%u", respip, respip_addr->net, + (actionstr) ? actionstr : "inform", srcip, port); + if(actionstr) + free(actionstr); log_nametypeclass(0, txt, qname, qtype, qclass); } diff --git a/respip/respip.h b/respip/respip.h index d2d39872c..4fd3a08d9 100644 --- a/respip/respip.h +++ b/respip/respip.h @@ -49,6 +49,7 @@ struct resp_addr { /** * Forward declaration for the structure that represents a tree of view data. */ + struct views; struct respip_addr_info; @@ -78,6 +79,10 @@ struct respip_client_info { */ struct respip_action_info { enum respip_action action; + int rpz_used; + int rpz_log; + char* log_name; + int rpz_cname_override; struct respip_addr_info* addrinfo; /* set only for inform variants */ }; @@ -234,7 +239,7 @@ int respip_set_is_empty(const struct respip_set* set); /** * print log information for a query subject to an inform or inform-deny * response-ip action. - * @param respip_addr: response-ip information that causes the action + * @param respip_actinfo: response-ip information that causes the action * @param qname: query name in the context, will be ignored if local_alias is * non-NULL. * @param qtype: query type, in host byte order. @@ -244,9 +249,9 @@ int respip_set_is_empty(const struct respip_set* set); * query name. * @param repinfo: reply info containing the client's source address and port. */ -void respip_inform_print(struct respip_addr_info* respip_addr, uint8_t* qname, - uint16_t qtype, uint16_t qclass, struct local_rrset* local_alias, - struct comm_reply* repinfo); +void respip_inform_print(struct respip_action_info* respip_actinfo, + uint8_t* qname, uint16_t qtype, uint16_t qclass, + struct local_rrset* local_alias, struct comm_reply* repinfo); /** * Find resp_addr in tree, create and add to tree if it does not exist. diff --git a/services/mesh.c b/services/mesh.c index bee0f76a4..65f26390e 100644 --- a/services/mesh.c +++ b/services/mesh.c @@ -1180,10 +1180,19 @@ void mesh_query_done(struct mesh_state* mstate) * information should be logged for each client. */ if(mstate->s.respip_action_info && mstate->s.respip_action_info->addrinfo) { - respip_inform_print(mstate->s.respip_action_info->addrinfo, + respip_inform_print(mstate->s.respip_action_info, r->qname, mstate->s.qinfo.qtype, mstate->s.qinfo.qclass, r->local_alias, &r->query_reply); + if(mstate->s.env->cfg->stat_extended && + mstate->s.respip_action_info->rpz_used) { + /* TODO: does not work for disabled (override) actions */ + if(mstate->s.respip_action_info->rpz_cname_override) + mstate->s.env->mesh->rpz_action[RPZ_CNAME_OVERRIDE_ACTION]++; + else + mstate->s.env->mesh->rpz_action[respip_action_to_rpz_action( + mstate->s.respip_action_info->action)]++; + } } /* if this query is determined to be dropped during the @@ -1580,6 +1589,7 @@ mesh_stats_clear(struct mesh_area* mesh) mesh->ans_secure = 0; mesh->ans_bogus = 0; memset(&mesh->ans_rcode[0], 0, sizeof(size_t)*16); + memset(&mesh->rpz_action[0], 0, sizeof(size_t)*10); mesh->ans_nodata = 0; } diff --git a/services/mesh.h b/services/mesh.h index a2622844b..c28176465 100644 --- a/services/mesh.h +++ b/services/mesh.h @@ -51,6 +51,7 @@ #include "util/data/msgparse.h" #include "util/module.h" #include "services/modstack.h" +#include "services/rpz.h" struct sldns_buffer; struct mesh_state; struct mesh_reply; @@ -124,6 +125,8 @@ struct mesh_area { size_t ans_rcode[16]; /** (extended stats) rcode nodata in replies */ size_t ans_nodata; + /** (extended stats) type of applied RPZ action */ + size_t rpz_action[10]; /** backup of query if other operations recurse and need the * network buffers */ diff --git a/services/rpz.c b/services/rpz.c index ecf32f430..543ab148b 100644 --- a/services/rpz.c +++ b/services/rpz.c @@ -209,7 +209,7 @@ rpz_action_to_localzone_type(enum rpz_action a) } } -static enum respip_action +enum respip_action rpz_action_to_respip_action(enum rpz_action a) { switch(a) { @@ -242,6 +242,21 @@ localzone_type_to_rpz_action(enum localzone_type lzt) } } +enum rpz_action +respip_action_to_rpz_action(enum respip_action a) +{ + switch(a) { + case respip_always_nxdomain: return RPZ_NXDOMAIN_ACTION; + case respip_always_nodata: return RPZ_NODATA_ACTION; + case respip_deny: return RPZ_DROP_ACTION; + case respip_always_transparent: return RPZ_PASSTHRU_ACTION; + case respip_redirect: return RPZ_LOCAL_DATA_ACTION; + case respip_invalid: + default: + return RPZ_INVALID_ACTION; + } +} + /** * Get RPZ trigger for dname * @param dname: dname containing RPZ trigger @@ -861,6 +876,8 @@ rpz_apply_qname_trigger(struct auth_zones* az, struct module_env* env, log_rpz_apply(z->name, r->action_override, qinfo, repinfo, r->log_name); + /* TODO only register stats when stats_extended? + * */ stats->rpz_action[r->action_override]++; lock_rw_unlock(&z->lock); z = NULL; diff --git a/services/rpz.h b/services/rpz.h index a5b9e67ab..042773f33 100644 --- a/services/rpz.h +++ b/services/rpz.h @@ -178,10 +178,21 @@ struct rpz* rpz_create(struct config_auth* p); */ const char* rpz_action_to_string(enum rpz_action a); +enum rpz_action +respip_action_to_rpz_action(enum respip_action a); + /** * Prepare RPZ after procesing feed content. * @param r: RPZ to use */ void rpz_finish_config(struct rpz* r); +/** + * Classify respip action for RPZ action + * @param a: RPZ action + * @return: the respip action + */ +enum respip_action +rpz_action_to_respip_action(enum rpz_action a); + #endif /* SERVICES_RPZ_H */ From 0987a828777f418606736b50325eb558a3e0299b Mon Sep 17 00:00:00 2001 From: Ralph Dolmans Date: Wed, 7 Aug 2019 14:09:48 +0200 Subject: [PATCH 18/56] Add statistics support for disabled (action override) response IP RPZ triggers. --- daemon/worker.c | 4 +++- respip/respip.c | 10 +++++----- respip/respip.h | 1 + services/mesh.c | 4 +++- 4 files changed, 12 insertions(+), 7 deletions(-) diff --git a/daemon/worker.c b/daemon/worker.c index 2cfc96845..f321ad261 100644 --- a/daemon/worker.c +++ b/daemon/worker.c @@ -602,7 +602,9 @@ apply_respip_action(struct worker* worker, const struct query_info* qinfo, repinfo); if(worker->stats.extended && actinfo.rpz_used) { - /* TODO: does not work for disabled (override) actions */ + if(actinfo.rpz_disabled) + worker->stats.rpz_action[RPZ_DISABLED_ACTION] += + actinfo.rpz_disabled; if(actinfo.rpz_cname_override) worker->stats.rpz_action[RPZ_CNAME_OVERRIDE_ACTION]++; else diff --git a/respip/respip.c b/respip/respip.c index a529ccf62..57abed683 100644 --- a/respip/respip.c +++ b/respip/respip.c @@ -654,7 +654,6 @@ make_new_reply_info(const struct reply_info* rep, struct regional* region, * Note that this function distinguishes error conditions from "success but * not overridden". This is because we want to avoid accidentally applying * the "no data" action in case of error. - * @param raddr: address span that requires an action * @param action: action to apply * @param data: RRset to use for override * @param qtype: original query type @@ -671,7 +670,7 @@ make_new_reply_info(const struct reply_info* rep, struct regional* region, * @return 1 if overridden, 0 if not overridden, -1 on error. */ static int -respip_data_answer(const struct resp_addr* raddr, enum respip_action action, +respip_data_answer(enum respip_action action, struct ub_packed_rrset_key* data, uint16_t qtype, const struct reply_info* rep, size_t rrset_id, struct reply_info** new_repp, int tag, @@ -815,7 +814,7 @@ populate_action_info(struct respip_action_info* actinfo, if(action == respip_none || !raddr) return 1; actinfo->action = action; - actinfo->rpz_used = 1; + actinfo->rpz_used = rpz_used; actinfo->rpz_log = rpz_log; actinfo->log_name = log_name; actinfo->rpz_cname_override = rpz_cname_override; @@ -824,7 +823,7 @@ populate_action_info(struct respip_action_info* actinfo, * later logging. We make a copy to proactively avoid disruption if * and when we allow a dynamic update to the respip tree. */ if(action == respip_inform || action == respip_inform_deny || - rpz_log) { + rpz_used) { struct respip_addr_info* a = regional_alloc_zero(region, sizeof(*a)); if(!a) { @@ -947,6 +946,7 @@ respip_rewrite_reply(const struct query_info* qinfo, region)) { lock_rw_unlock(&raddr->lock); raddr = NULL; + actinfo->rpz_disabled++; } rpz_used = 1; } @@ -962,7 +962,7 @@ respip_rewrite_reply(const struct query_info* qinfo, && action != respip_always_transparent && action != respip_always_nxdomain && action != respip_always_nodata - && (result = respip_data_answer(raddr, action, + && (result = respip_data_answer(action, (data) ? data : raddr->data, qinfo->qtype, rep, rrset_id, new_repp, tag, tag_datas, tag_datas_size, ipset->tagname, ipset->num_tags, &redirect_rrset, diff --git a/respip/respip.h b/respip/respip.h index 4fd3a08d9..4a56b8d29 100644 --- a/respip/respip.h +++ b/respip/respip.h @@ -81,6 +81,7 @@ struct respip_action_info { enum respip_action action; int rpz_used; int rpz_log; + int rpz_disabled; char* log_name; int rpz_cname_override; struct respip_addr_info* addrinfo; /* set only for inform variants */ diff --git a/services/mesh.c b/services/mesh.c index 65f26390e..4e5e4d497 100644 --- a/services/mesh.c +++ b/services/mesh.c @@ -1186,7 +1186,9 @@ void mesh_query_done(struct mesh_state* mstate) &r->query_reply); if(mstate->s.env->cfg->stat_extended && mstate->s.respip_action_info->rpz_used) { - /* TODO: does not work for disabled (override) actions */ + if(mstate->s.respip_action_info->rpz_disabled) + mstate->s.env->mesh->rpz_action[RPZ_DISABLED_ACTION] += + mstate->s.respip_action_info->rpz_disabled; if(mstate->s.respip_action_info->rpz_cname_override) mstate->s.env->mesh->rpz_action[RPZ_CNAME_OVERRIDE_ACTION]++; else From abbb5c0f6d2a003ab818f834b74b2e5738070e36 Mon Sep 17 00:00:00 2001 From: Ralph Dolmans Date: Wed, 7 Aug 2019 14:53:23 +0200 Subject: [PATCH 19/56] Update RPZ man page and example.conf --- doc/example.conf.in | 8 +++++--- doc/unbound.conf.5.in | 9 ++++++--- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/doc/example.conf.in b/doc/example.conf.in index be1606fa1..987dfebdd 100644 --- a/doc/example.conf.in +++ b/doc/example.conf.in @@ -993,9 +993,11 @@ remote-control: # redis-timeout: 100 # Response Policy Zones -# RPZ policies. Applied in order of configuration. QNAME trigger is the only -# supported trigger. Supported actions are: NXDOMAIN, NODATA, PASSTHRU, DROP and -# Local Data. Policy can be loaded from file or using zone transfer. +# RPZ policies. Applied in order of configuration. QNAME and Response IP +# Address trigger are the only supported triggers. Supported actions are: +# NXDOMAIN, NODATA, PASSTHRU, DROP and Local Data. Polices can be loaded from +# file or using zone transfer. The respip module needs to be added to the +# module-config, e.g.: module-config: "respip validator iterator". # rpz: # name: "rpz.example.com" # zonefile: "rpz.example.com" diff --git a/doc/unbound.conf.5.in b/doc/unbound.conf.5.in index cee2393b4..edbaa601c 100644 --- a/doc/unbound.conf.5.in +++ b/doc/unbound.conf.5.in @@ -2077,10 +2077,13 @@ This option defaults to 100 milliseconds. .LP Response Policy Zones are configured with \fBrpz:\fR, and each one must have a \fBname:\fR. There can be multiple ones, by listing multiple rpz clauses, each -with a different name. RPZ clauses are applied in order of configuration. +with a different name. RPZ clauses are applied in order of configuration. The +\fBrespip\fR module needs to be added to the \fBmodule-config\fR, e.g.: +\fBmodule-config: "respip validator itarator"\fR. .P -Only the QNAME trigger is supported. The supported RPZ actions are: NXDOMAIN, -NODATA, PASSTHRU, DROP and Local Data. RPZ QNAME triggers are applied after +Only the QNAME and Response IP Address triggers are supported. The supported RPZ +actions are: NXDOMAIN, NODATA, PASSTHRU, DROP and Local Data. RPZ QNAME triggers +are applied after \fBlocal-zones\fR and before \fBauth-zones\fR. .TP .B name: \fI From 4eb7771f9714244848b38da2006b8848054d5d5d Mon Sep 17 00:00:00 2001 From: Ralph Dolmans Date: Thu, 8 Aug 2019 13:50:02 +0200 Subject: [PATCH 20/56] - Added RPZ/QNAME trigger test --- testdata/rpz_qname.rpl | 217 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 217 insertions(+) create mode 100644 testdata/rpz_qname.rpl diff --git a/testdata/rpz_qname.rpl b/testdata/rpz_qname.rpl new file mode 100644 index 000000000..d4076d72e --- /dev/null +++ b/testdata/rpz_qname.rpl @@ -0,0 +1,217 @@ +; config options +server: + module-config: "respip validator iterator" + target-fetch-policy: "0 0 0 0 0" + qname-minimisation: no + +rpz: + name: "rpz.example.com." + zonefile: +TEMPFILE_NAME rpz.example.com +TEMPFILE_CONTENTS rpz.example.com +$ORIGIN example.com. +rpz 3600 IN SOA ns1.rpz.example.com. hostmaster.rpz.example.com. ( + 1379078166 28800 7200 604800 7200 ) + 3600 IN NS ns1.rpz.example.com. + 3600 IN NS ns2.rpz.example.com. +$ORIGIN rpz.example.com. +a CNAME . +*.a TXT "wildcard local data" +b.a CNAME *. +c.a CNAME rpz-passthru. +TEMPFILE_END + +rpz: + name: "rpz2.example.com." + zonefile: +TEMPFILE_NAME rpz2.example.com +TEMPFILE_CONTENTS rpz2.example.com +$ORIGIN example.com. +rpz 3600 IN SOA ns1.rpz.example.com. hostmaster.rpz.example.com. ( + 1379078166 28800 7200 604800 7200 ) + 3600 IN NS ns1.rpz.example.com. + 3600 IN NS ns2.rpz.example.com. +$ORIGIN rpz2.example.com. +a TXT "local data 2nd zone" +d TXT "local data 2nd zone" +drop CNAME rpz-drop. +TEMPFILE_END + +stub-zone: + name: "a." + stub-addr: 10.20.30.40 +CONFIG_END + +SCENARIO_BEGIN Test all support RPZ action for QNAME trigger + +; c. +RANGE_BEGIN 0 100 + ADDRESS 10.20.30.40 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +a. IN NS +SECTION ANSWER +a. IN NS ns.a. +SECTION ADDITIONAL +ns.a IN A 10.20.30.40 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +c.a. IN TXT +SECTION ANSWER +c.a. IN TXT "answer from upstream ns" +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +x.b.a. IN TXT +SECTION ANSWER +x.b.a. IN TXT "answer from upstream ns" +ENTRY_END + +RANGE_END + +STEP 10 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +a. IN TXT +ENTRY_END + +STEP 11 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA AA NXDOMAIN +SECTION QUESTION +a. IN TXT +SECTION ANSWER +ENTRY_END + +STEP 20 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +a.a. IN TXT +ENTRY_END + +STEP 21 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA AA NOERROR +SECTION QUESTION +a.a. IN TXT +SECTION ANSWER +a.a. IN TXT "wildcard local data" +ENTRY_END + +STEP 30 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +b.a. IN TXT +ENTRY_END + +STEP 31 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA AA NOERROR +SECTION QUESTION +b.a. IN TXT +SECTION ANSWER +ENTRY_END + +STEP 40 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +x.a. IN TXT +ENTRY_END + +STEP 41 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA AA NOERROR +SECTION QUESTION +x.a. IN TXT +SECTION ANSWER +x.a. IN TXT "wildcard local data" +ENTRY_END + +STEP 50 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +x.a.a. IN TXT +ENTRY_END + +STEP 51 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA AA NOERROR +SECTION QUESTION +x.a.a. IN TXT +SECTION ANSWER +x.a.a. IN TXT "wildcard local data" +ENTRY_END + +STEP 60 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +c.a. IN TXT +ENTRY_END + +STEP 61 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +c.a. IN TXT +SECTION ANSWER +c.a. IN TXT "answer from upstream ns" +ENTRY_END + +STEP 70 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +x.b.a. IN TXT +ENTRY_END + +STEP 71 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +x.b.a. IN TXT +SECTION ANSWER +x.b.a. IN TXT "answer from upstream ns" +ENTRY_END + +STEP 80 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +d. IN TXT +ENTRY_END + +STEP 81 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA AA NOERROR +SECTION QUESTION +d. IN TXT +SECTION ANSWER +d. IN TXT "local data 2nd zone" +ENTRY_END +SCENARIO_END From 401fc154431b18febea4774005581ab864f94033 Mon Sep 17 00:00:00 2001 From: Ralph Dolmans Date: Thu, 8 Aug 2019 16:07:16 +0200 Subject: [PATCH 21/56] - Extend RPZ/QNAME trigger test - Fix potential memory leak --- services/rpz.c | 10 ++++++---- testdata/rpz_qname.rpl | 9 +++++++++ 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/services/rpz.c b/services/rpz.c index 543ab148b..3e016b7d4 100644 --- a/services/rpz.c +++ b/services/rpz.c @@ -552,14 +552,16 @@ rpz_insert_rr(struct rpz* r, size_t aznamelen, uint8_t* dname, } t = rpz_dname_to_trigger(policydname); if(t == RPZ_QNAME_TRIGGER) { - rpz_insert_qname_trigger(r, policydname, policydnamelen, + if(!rpz_insert_qname_trigger(r, policydname, policydnamelen, a, rr_type, rr_class, rr_ttl, rdatawl, rdatalen, rr, - rr_len); + rr_len)) + free(policydname); } else if(t == RPZ_RESPONSE_IP_TRIGGER) { - rpz_insert_response_ip_trigger(r, policydname, + if(!rpz_insert_response_ip_trigger(r, policydname, a, rr_type, rr_class, rr_ttl, rdatawl, rdatalen, rr, - rr_len); + rr_len)) + free(policydname); } else { free(policydname); diff --git a/testdata/rpz_qname.rpl b/testdata/rpz_qname.rpl index d4076d72e..600087ae0 100644 --- a/testdata/rpz_qname.rpl +++ b/testdata/rpz_qname.rpl @@ -16,6 +16,7 @@ rpz 3600 IN SOA ns1.rpz.example.com. hostmaster.rpz.example.com. ( 3600 IN NS ns2.rpz.example.com. $ORIGIN rpz.example.com. a CNAME . +a CNAME *. ; duplicate CNAME here on purpose *.a TXT "wildcard local data" b.a CNAME *. c.a CNAME rpz-passthru. @@ -214,4 +215,12 @@ d. IN TXT SECTION ANSWER d. IN TXT "local data 2nd zone" ENTRY_END + +; deny zone +STEP 90 QUERY +ENTRY_BEGIN +SECTION QUESTION +drop. IN TXT +ENTRY_END +; no answer is checked at exit of testbound. SCENARIO_END From 7180284d82f9c3e114637c46f8d005c7dbf66336 Mon Sep 17 00:00:00 2001 From: Ralph Dolmans Date: Thu, 8 Aug 2019 16:43:28 +0200 Subject: [PATCH 22/56] - Add RPZ/QNAME override test --- testdata/rpz_qname_override.rpl | 178 ++++++++++++++++++++++++++++++++ 1 file changed, 178 insertions(+) create mode 100644 testdata/rpz_qname_override.rpl diff --git a/testdata/rpz_qname_override.rpl b/testdata/rpz_qname_override.rpl new file mode 100644 index 000000000..d75049306 --- /dev/null +++ b/testdata/rpz_qname_override.rpl @@ -0,0 +1,178 @@ +; config options +server: + module-config: "respip validator iterator" + target-fetch-policy: "0 0 0 0 0" + qname-minimisation: no + +rpz: + name: "rpz.example.com." + rpz-action-override: disabled + zonefile: +TEMPFILE_NAME rpz.example.com +TEMPFILE_CONTENTS rpz.example.com +$ORIGIN rpz.example.com. +a TXT "record zone rpz.example.com" +TEMPFILE_END + +rpz: + name: "rpz2.example.com." + zonefile: +TEMPFILE_NAME rpz2.example.com +TEMPFILE_CONTENTS rpz2.example.com +$ORIGIN rpz2.example.com. +a TXT "record zone rpz2.example.com" +TEMPFILE_END + +rpz: + name: "rpz3.example.com." + rpz-action-override: nodata + zonefile: +TEMPFILE_NAME rpz3.example.com +TEMPFILE_CONTENTS rpz3.example.com +$ORIGIN rpz3.example.com. +b CNAME . +TEMPFILE_END + +rpz: + name: "rpz4.example.com." + rpz-action-override: nxdomain + zonefile: +TEMPFILE_NAME rpz4.example.com +TEMPFILE_CONTENTS rpz4.example.com +$ORIGIN rpz4.example.com. +c CNAME *. +TEMPFILE_END + +rpz: + name: "rpz5.example.com." + rpz-action-override: passthru + zonefile: +TEMPFILE_NAME rpz5.example.com +TEMPFILE_CONTENTS rpz5.example.com +$ORIGIN rpz5.example.com. +d TXT "should be override by passthru" +TEMPFILE_END + +rpz: + name: "rpz6.example.com." + rpz-action-override: cname + rpz-cname-override: "d." + zonefile: +TEMPFILE_NAME rpz6.example.com +TEMPFILE_CONTENTS rpz6.example.com +$ORIGIN rpz6.example.com. +e TXT "should be override by cname" +TEMPFILE_END + +stub-zone: + name: "d." + stub-addr: 10.20.30.40 +CONFIG_END + +SCENARIO_BEGIN Test RPZ action overrides for QNAME trigger + +; d. +RANGE_BEGIN 0 100 + ADDRESS 10.20.30.40 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +d. IN TXT +SECTION ANSWER +d. IN TXT "answer from upstream ns" +ENTRY_END + +RANGE_END + +; check disabled override, should be answered using next policy zone +STEP 10 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +a. IN TXT +ENTRY_END + +STEP 11 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA AA NOERROR +SECTION QUESTION +a. IN TXT +SECTION ANSWER +a TXT "record zone rpz2.example.com" +ENTRY_END + +; check nodata override, would be NXDOMAIN without override +STEP 20 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +b. IN TXT +ENTRY_END + +STEP 21 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA AA NOERROR +SECTION QUESTION +b. IN TXT +SECTION ANSWER +ENTRY_END + +; check nxdomain override, would be NODATA without override +STEP 30 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +c. IN TXT +ENTRY_END + +STEP 31 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA AA NXDOMAIN +SECTION QUESTION +c. IN TXT +SECTION ANSWER +ENTRY_END + +; check passthru override, would be localdata without override +STEP 40 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +d. IN TXT +ENTRY_END + +STEP 41 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +d. IN TXT +SECTION ANSWER +d. IN TXT "answer from upstream ns" +ENTRY_END + +; check cname override, would be localdata without override +STEP 50 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +e. IN TXT +ENTRY_END + +STEP 51 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA AA NOERROR +SECTION QUESTION +e. IN TXT +SECTION ANSWER +e. IN CNAME d. +d. IN TXT "answer from upstream ns" +ENTRY_END + +SCENARIO_END From 88fce791dfc8035cab27adb81808dd428e1e951b Mon Sep 17 00:00:00 2001 From: Ralph Dolmans Date: Mon, 12 Aug 2019 16:06:15 +0200 Subject: [PATCH 23/56] - Add RPZ respip test - Fix rpz memory leak --- services/rpz.c | 8 +- testdata/rpz_respip.rpl | 422 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 427 insertions(+), 3 deletions(-) create mode 100644 testdata/rpz_respip.rpl diff --git a/services/rpz.c b/services/rpz.c index 3e016b7d4..e3a890456 100644 --- a/services/rpz.c +++ b/services/rpz.c @@ -518,6 +518,7 @@ rpz_insert_response_ip_trigger(struct rpz* r, uint8_t* dname, if(!(node=respip_sockaddr_find_or_create(r->respip_set, &addr, addrlen, net, 1, rrstr))) { lock_rw_unlock(&r->respip_set->lock); + free(rrstr); return 0; } @@ -530,6 +531,7 @@ rpz_insert_response_ip_trigger(struct rpz* r, uint8_t* dname, rrclass, ttl, rdata, rdata_len, rrstr, ""); } lock_rw_unlock(&node->lock); + free(rrstr); return 1; } @@ -558,10 +560,10 @@ rpz_insert_rr(struct rpz* r, size_t aznamelen, uint8_t* dname, free(policydname); } else if(t == RPZ_RESPONSE_IP_TRIGGER) { - if(!rpz_insert_response_ip_trigger(r, policydname, + rpz_insert_response_ip_trigger(r, policydname, a, rr_type, rr_class, rr_ttl, rdatawl, rdatalen, rr, - rr_len)) - free(policydname); + rr_len); + free(policydname); } else { free(policydname); diff --git a/testdata/rpz_respip.rpl b/testdata/rpz_respip.rpl new file mode 100644 index 000000000..b3e5e43bf --- /dev/null +++ b/testdata/rpz_respip.rpl @@ -0,0 +1,422 @@ +; config options +server: + module-config: "respip validator iterator" + target-fetch-policy: "0 0 0 0 0" + do-not-query-localhost: no + qname-minimisation: no + + +rpz: + name: "rpz.example.com." + zonefile: +TEMPFILE_NAME rpz.example.com +TEMPFILE_CONTENTS rpz.example.com +$ORIGIN example.com. +rpz 3600 IN SOA ns1.rpz.example.com. hostmaster.rpz.example.com. ( + 1379078166 28800 7200 604800 7200 ) + 3600 IN NS ns1.rpz.example.com. + 3600 IN NS ns2.rpz.example.com. +$ORIGIN rpz.example.com. +8.0.0.0.10.rpz-ip CNAME *. +16.0.0.10.10.rpz-ip CNAME . +24.0.10.10.10.rpz-ip CNAME rpz-drop. +32.10.10.10.10.rpz-ip CNAME rpz-passthru. +32.zz.db8.2001.rpz-ip CNAME *. +48.zz.aa.db8.2001.rpz-ip CNAME . +64.zz.bb.aa.db8.2001.rpz-ip CNAME rpz-drop. +128.1.zz.cc.bb.aa.db8.2001.rpz-ip CNAME rpz-passthru. +128.123.zz.cc.bb.aa.db8.2001.rpz-ip AAAA 2001:db8::123 + +TEMPFILE_END + +rpz: + name: "rpz2.example.com." + zonefile: +TEMPFILE_NAME rpz2.example.com +TEMPFILE_CONTENTS rpz2.example.com +$ORIGIN example.com. +rpz2 3600 IN SOA ns1.rpz2.example.com. hostmaster.rpz2.example.com. ( + 1379078166 28800 7200 604800 7200 ) + 3600 IN NS ns1.rpz2.example.com. + 3600 IN NS ns2.rpz2.example.com. +$ORIGIN rpz2.example.com. +32.10.10.10.10.rpz-ip A 203.0.113.123 +32.123.2.0.192.rpz-ip A 203.0.113.123 +128.1.zz.cc.bb.aa.db8.2001.rpz-ip AAAA 2001:db1::123 +TEMPFILE_END + +stub-zone: + name: "." + stub-addr: 10.20.30.40 +CONFIG_END + +SCENARIO_BEGIN Test all supported RPZ action for response IP address trigger + +; c. +RANGE_BEGIN 0 100 + ADDRESS 10.20.30.40 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +. IN NS +SECTION ANSWER +. IN NS ns. +SECTION ADDITIONAL +ns. IN A 10.20.30.40 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +a. IN A +SECTION ANSWER +a. IN A 10.0.0.123 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +a. IN AAAA +SECTION ANSWER +a. IN AAAA 2001:db8::123 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +b. IN A +SECTION ANSWER +b. IN A 10.1.0.123 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +b. IN AAAA +SECTION ANSWER +b. IN AAAA 2001:db8:1::123 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +c. IN A +SECTION ANSWER +c. IN A 10.11.0.123 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +c. IN AAAA +SECTION ANSWER +c. IN AAAA 2001:db8:ff::123 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +d. IN A +SECTION ANSWER +d. IN A 10.10.0.123 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +d. IN AAAA +SECTION ANSWER +d. IN AAAA 2001:db8:aa::123 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +e. IN A +SECTION ANSWER +e. IN A 10.10.10.123 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +e. IN AAAA +SECTION ANSWER +e. IN AAAA 2001:db8:aa:bb::123 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +f. IN A +SECTION ANSWER +f. IN A 10.10.10.10 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +f. IN AAAA +SECTION ANSWER +f. IN AAAA 2001:db8:aa:bb:cc::1 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +g. IN A +SECTION ANSWER +g. IN A 192.0.2.123 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +g. IN AAAA +SECTION ANSWER +g. IN AAAA 2001:db8:aa:bb:cc::123 +ENTRY_END + +RANGE_END + +STEP 1 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +a. IN A +ENTRY_END + +STEP 2 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +a. IN A +SECTION ANSWER +ENTRY_END + +STEP 3 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +a. IN AAAA +ENTRY_END + +STEP 4 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +a. IN AAAA +SECTION ANSWER +ENTRY_END + +STEP 5 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +b. IN A +ENTRY_END + +STEP 6 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +b. IN A +SECTION ANSWER +ENTRY_END + +STEP 7 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +b. IN AAAA +ENTRY_END + +STEP 8 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +b. IN AAAA +SECTION ANSWER +ENTRY_END + +STEP 9 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +c. IN A +ENTRY_END + +STEP 10 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +c. IN A +SECTION ANSWER +ENTRY_END + +STEP 11 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +c. IN AAAA +ENTRY_END + +STEP 12 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +c. IN AAAA +SECTION ANSWER +ENTRY_END + +STEP 13 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +d. IN A +ENTRY_END + +STEP 14 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NXDOMAIN +SECTION QUESTION +d. IN A +SECTION ANSWER +ENTRY_END + +STEP 15 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +d. IN AAAA +ENTRY_END + +STEP 16 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NXDOMAIN +SECTION QUESTION +d. IN AAAA +SECTION ANSWER +ENTRY_END + +STEP 17 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +f. IN A +ENTRY_END + +STEP 18 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +f. IN A +SECTION ANSWER +f. IN A 10.10.10.10 +ENTRY_END + +STEP 19 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +f. IN AAAA +ENTRY_END + +STEP 20 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +f. IN AAAA +SECTION ANSWER +f. IN AAAA 2001:db8:aa:bb:cc::1 +ENTRY_END + +STEP 21 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +g. IN A +ENTRY_END + +STEP 22 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +g. IN A +SECTION ANSWER +g. IN A 203.0.113.123 +ENTRY_END + +STEP 23 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +g. IN AAAA +ENTRY_END + +STEP 24 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +g. IN AAAA +SECTION ANSWER +g. IN AAAA 2001:db8::123 +ENTRY_END + +; should be dropped +STEP 25 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +e. IN A +ENTRY_END +STEP 26 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +e. IN AAAA +ENTRY_END +STEP 27 TIME_PASSES ELAPSE 12 +SCENARIO_END From 4cbf4f4996056a7b559521da7fb6255d4485ee2d Mon Sep 17 00:00:00 2001 From: Ralph Dolmans Date: Mon, 12 Aug 2019 18:44:30 +0200 Subject: [PATCH 24/56] - Add RPZ response IP override test --- testdata/rpz_respip.rpl | 1 - testdata/rpz_respip_override.rpl | 235 +++++++++++++++++++++++++++++++ 2 files changed, 235 insertions(+), 1 deletion(-) create mode 100644 testdata/rpz_respip_override.rpl diff --git a/testdata/rpz_respip.rpl b/testdata/rpz_respip.rpl index b3e5e43bf..de2117b4b 100644 --- a/testdata/rpz_respip.rpl +++ b/testdata/rpz_respip.rpl @@ -2,7 +2,6 @@ server: module-config: "respip validator iterator" target-fetch-policy: "0 0 0 0 0" - do-not-query-localhost: no qname-minimisation: no diff --git a/testdata/rpz_respip_override.rpl b/testdata/rpz_respip_override.rpl new file mode 100644 index 000000000..f5672d621 --- /dev/null +++ b/testdata/rpz_respip_override.rpl @@ -0,0 +1,235 @@ +; config options +server: + module-config: "respip validator iterator" + target-fetch-policy: "0 0 0 0 0" + qname-minimisation: no + +rpz: + name: "rpz.example.com." + rpz-action-override: disabled + zonefile: +TEMPFILE_NAME rpz.example.com +TEMPFILE_CONTENTS rpz.example.com +$ORIGIN rpz.example.com. +32.1.113.0.203.rpz-ip A 192.0.2.1 +TEMPFILE_END + +rpz: + name: "rpz2.example.com." + zonefile: +TEMPFILE_NAME rpz2.example.com +TEMPFILE_CONTENTS rpz2.example.com +$ORIGIN rpz2.example.com. +32.1.113.0.203.rpz-ip A 192.0.2.2 +TEMPFILE_END + +rpz: + name: "rpz3.example.com." + rpz-action-override: nodata + zonefile: +TEMPFILE_NAME rpz3.example.com +TEMPFILE_CONTENTS rpz3.example.com +$ORIGIN rpz3.example.com. +32.3.113.0.203.rpz-ip CNAME . +TEMPFILE_END + +rpz: + name: "rpz4.example.com." + rpz-action-override: nxdomain + zonefile: +TEMPFILE_NAME rpz4.example.com +TEMPFILE_CONTENTS rpz4.example.com +$ORIGIN rpz4.example.com. +32.4.113.0.203.rpz-ip CNAME *. +TEMPFILE_END + +rpz: + name: "rpz5.example.com." + rpz-action-override: passthru + zonefile: +TEMPFILE_NAME rpz5.example.com +TEMPFILE_CONTENTS rpz5.example.com +$ORIGIN rpz5.example.com. +32.5.113.0.203.rpz-ip A 192.0.2.5 +TEMPFILE_END + +rpz: + name: "rpz6.example.com." + rpz-action-override: cname + rpz-cname-override: ns. + zonefile: +TEMPFILE_NAME rpz6.example.com +TEMPFILE_CONTENTS rpz6.example.com +$ORIGIN rpz6.example.com. +32.6.113.0.203.rpz-ip A 192.0.2.6 +TEMPFILE_END + +stub-zone: + name: "." + stub-addr: 10.20.30.40 +CONFIG_END + +SCENARIO_BEGIN Test all supported RPZ action for response IP address trigger + +; c. +RANGE_BEGIN 0 100 + ADDRESS 10.20.30.40 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +. IN NS +SECTION ANSWER +. IN NS ns. +SECTION ADDITIONAL +ns. IN A 10.20.30.40 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +ns. IN A +SECTION ANSWER +ns. IN A 10.20.30.40 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +a. IN A +SECTION ANSWER +a. IN A 203.0.113.1 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +b. IN A +SECTION ANSWER +b. IN A 203.0.113.3 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +c. IN A +SECTION ANSWER +c. IN A 203.0.113.4 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +d. IN A +SECTION ANSWER +d. IN A 203.0.113.5 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +e. IN A +SECTION ANSWER +e. IN A 203.0.113.6 +ENTRY_END + +RANGE_END + +STEP 1 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +a. IN A +ENTRY_END + +STEP 2 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +a. IN A +SECTION ANSWER +a. IN A 192.0.2.2 +ENTRY_END + +STEP 3 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +b. IN A +ENTRY_END + +STEP 4 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +b. IN A +SECTION ANSWER +ENTRY_END + +STEP 5 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +c. IN A +ENTRY_END + +STEP 6 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NXDOMAIN +SECTION QUESTION +c. IN A +SECTION ANSWER +ENTRY_END + +STEP 7 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +d. IN A +ENTRY_END + +STEP 8 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +d. IN A +SECTION ANSWER +d. IN A 203.0.113.5 +ENTRY_END + +STEP 9 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +e. IN A +ENTRY_END + +STEP 10 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +e. IN A +SECTION ANSWER +e. IN CNAME ns. +ns. IN A 10.20.30.40 +ENTRY_END + +SCENARIO_END From 965f16cc8900f46b5cdb460068c5890f87fa034e Mon Sep 17 00:00:00 2001 From: Ralph Dolmans Date: Tue, 13 Aug 2019 17:06:43 +0200 Subject: [PATCH 25/56] - Add RPZ AXFR test - Fix memory leak --- services/rpz.c | 10 +- testdata/rpz_axfr.rpl | 362 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 369 insertions(+), 3 deletions(-) create mode 100644 testdata/rpz_axfr.rpl diff --git a/services/rpz.c b/services/rpz.c index e3a890456..3118479a7 100644 --- a/services/rpz.c +++ b/services/rpz.c @@ -444,7 +444,8 @@ strip_dname_origin(uint8_t* dname, size_t dnamelen, size_t originlen, static int rpz_insert_qname_trigger(struct rpz* r, uint8_t* dname, size_t dnamelen, enum rpz_action a, uint16_t rrtype, uint16_t rrclass, uint32_t ttl, - uint8_t* rdata, size_t rdata_len, uint8_t* rr, size_t rr_len) + uint8_t* rdata, size_t rdata_len, uint8_t* rr, size_t rr_len, + int* newzone) { struct local_zone* z; enum localzone_type tp = local_zone_always_transparent; @@ -473,6 +474,7 @@ rpz_insert_qname_trigger(struct rpz* r, uint8_t* dname, size_t dnamelen, tp = rpz_action_to_localzone_type(a); z = local_zones_add_zone(r->local_zones, dname, dnamelen, dnamelabs, rrclass, tp); + *newzone = 1; } if(!z) { log_warn("RPZ create failed"); @@ -501,7 +503,7 @@ rpz_insert_response_ip_trigger(struct rpz* r, uint8_t* dname, struct sockaddr_storage addr; socklen_t addrlen; int net, af; - char* rrstr = sldns_wire2str_rr(rr, rr_len); + char* rrstr; enum respip_action respa = rpz_action_to_respip_action(a); if(a == RPZ_TCP_ONLY_ACTION || a == RPZ_INVALID_ACTION || @@ -515,6 +517,7 @@ rpz_insert_response_ip_trigger(struct rpz* r, uint8_t* dname, return 0; lock_rw_wrlock(&r->respip_set->lock); + rrstr = sldns_wire2str_rr(rr, rr_len); if(!(node=respip_sockaddr_find_or_create(r->respip_set, &addr, addrlen, net, 1, rrstr))) { lock_rw_unlock(&r->respip_set->lock); @@ -545,6 +548,7 @@ rpz_insert_rr(struct rpz* r, size_t aznamelen, uint8_t* dname, uint8_t* policydname = calloc(1, LDNS_MAX_DOMAINLEN + 1); enum rpz_trigger t; enum rpz_action a; + int newzone = 0; a = rpz_rr_to_action(rr_type, rdatawl, rdatalen); if(!(policydnamelen = strip_dname_origin(dname, dnamelen, aznamelen, @@ -556,7 +560,7 @@ rpz_insert_rr(struct rpz* r, size_t aznamelen, uint8_t* dname, if(t == RPZ_QNAME_TRIGGER) { if(!rpz_insert_qname_trigger(r, policydname, policydnamelen, a, rr_type, rr_class, rr_ttl, rdatawl, rdatalen, rr, - rr_len)) + rr_len, &newzone) || !newzone) free(policydname); } else if(t == RPZ_RESPONSE_IP_TRIGGER) { diff --git a/testdata/rpz_axfr.rpl b/testdata/rpz_axfr.rpl new file mode 100644 index 000000000..b5b84bfd3 --- /dev/null +++ b/testdata/rpz_axfr.rpl @@ -0,0 +1,362 @@ +; config options +server: + module-config: "respip validator iterator" + target-fetch-policy: "0 0 0 0 0" + qname-minimisation: no + +rpz: + name: "rpz.example.com." + master: 10.20.30.40 + zonefile: +TEMPFILE_NAME rpz.example.com +TEMPFILE_CONTENTS rpz.example.com +$ORIGIN rpz.example.com. +a IN CNAME *. +c IN TXT "hello from initial RPZ" +c IN TXT "another hello from initial RPZ" +d IN CNAME . +32.1.123.0.10.rpz-ip CNAME *. +32.3.123.0.10.rpz-ip A 10.66.0.3 +32.3.123.0.10.rpz-ip A 10.66.0.4 +32.4.123.0.10.rpz-ip CNAME . +TEMPFILE_END + +stub-zone: + name: "." + stub-addr: 10.20.30.40 + +CONFIG_END + +SCENARIO_BEGIN Test RPZ QNAME trigger, loaded using AXFR + +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. IN TXT +SECTION ANSWER +b. TXT "hello from upstream" +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qname qtype +ADJUST copy_id +REPLY QR NOERROR AA +SECTION QUESTION +d. IN TXT +SECTION ANSWER +d. TXT "hello from upstream" +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qname qtype +ADJUST copy_id +REPLY QR NOERROR AA +SECTION QUESTION +a.rpz-ip. IN A +SECTION ANSWER +a.rpz-ip. IN A 10.0.123.1 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qname qtype +ADJUST copy_id +REPLY QR NOERROR AA +SECTION QUESTION +c.rpz-ip. IN A +SECTION ANSWER +c.rpz-ip. IN A 10.0.123.3 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qname qtype +ADJUST copy_id +REPLY QR NOERROR AA +SECTION QUESTION +d.rpz-ip. IN A +SECTION ANSWER +d.rpz-ip. IN A 10.0.123.4 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qname qtype +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +rpz.example.com. IN SOA +SECTION ANSWER +rpz.example.com. IN SOA ns.rpz.example.com. hostmaster.rpz.example.com. 1 3600 900 86400 3600 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qname qtype +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +rpz.example.com. IN AXFR +SECTION ANSWER +rpz.example.com. IN SOA ns.rpz.example.com. hostmaster.rpz.example.com. 1 3600 900 86400 3600 +b.rpz.example.com. TXT "hello from RPZ" +c.rpz.example.com. TXT "hello from RPZ" +a.rpz.example.com. CNAME . +32.1.123.0.10.rpz-ip.rpz.example.com. CNAME . +32.3.123.0.10.rpz-ip.rpz.example.com. A 10.66.0.5 +32.3.123.0.10.rpz-ip.rpz.example.com. A 10.66.0.6 +rpz.example.com. IN SOA ns.rpz.example.com. hostmaster.rpz.example.com. 1 3600 900 86400 3600 +ENTRY_END + +RANGE_END + +STEP 1 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +b. IN TXT +ENTRY_END + +STEP 2 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +b. IN TXT +SECTION ANSWER +b. IN TXT "hello from upstream" +ENTRY_END + +STEP 3 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +a. IN TXT +ENTRY_END + +STEP 4 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA AA NOERROR +SECTION QUESTION +a. IN TXT +SECTION ANSWER +ENTRY_END + +STEP 5 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +a.rpz-ip. IN A +ENTRY_END + +STEP 6 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +a.rpz-ip. IN A +SECTION ANSWER +ENTRY_END + +STEP 7 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +c. IN TXT +ENTRY_END + +STEP 8 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA AA NOERROR +SECTION QUESTION +c. IN TXT +SECTION ANSWER +c. IN TXT "another hello from initial RPZ" +c. IN TXT "hello from initial RPZ" +ENTRY_END + +STEP 9 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +c.rpz-ip. IN A +ENTRY_END + +STEP 10 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +c.rpz-ip. IN A +SECTION ANSWER +c.rpz-ip. IN A 10.66.0.4 +c.rpz-ip. IN A 10.66.0.3 +ENTRY_END + +STEP 11 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +d. IN TXT +ENTRY_END + +STEP 12 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA AA NXDOMAIN +SECTION QUESTION +d. IN TXT +ENTRY_END + +STEP 13 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +d.rpz-ip. IN A +ENTRY_END + +STEP 14 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NXDOMAIN +SECTION QUESTION +d.rpz-ip. IN A +ENTRY_END + +STEP 30 TIME_PASSES ELAPSE 10 +STEP 40 TRAFFIC + +STEP 50 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +b. IN TXT +ENTRY_END + +STEP 51 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA AA NOERROR +SECTION QUESTION +b. IN TXT +SECTION ANSWER +b. IN TXT "hello from RPZ" +ENTRY_END + +STEP 52 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +a. IN TXT +ENTRY_END + +STEP 53 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA AA NXDOMAIN +SECTION QUESTION +a. IN TXT +SECTION ANSWER +ENTRY_END + +STEP 54 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +a.rpz-ip. IN A +ENTRY_END + +STEP 55 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NXDOMAIN +SECTION QUESTION +a.rpz-ip. IN A +SECTION ANSWER +ENTRY_END + +STEP 56 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +c. IN TXT +ENTRY_END + +STEP 57 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA AA NOERROR +SECTION QUESTION +c. IN TXT +SECTION ANSWER +c. IN TXT "hello from RPZ" +ENTRY_END + +STEP 58 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +c.rpz-ip. IN A +ENTRY_END + +STEP 59 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +c.rpz-ip. IN A +SECTION ANSWER +c.rpz-ip. IN A 10.66.0.6 +c.rpz-ip. IN A 10.66.0.5 +ENTRY_END + +STEP 60 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +d. IN TXT +ENTRY_END + +STEP 61 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +d. IN TXT +SECTION ANSWER +d. IN TXT "hello from upstream" +ENTRY_END + +STEP 62 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +d.rpz-ip. IN A +ENTRY_END + +STEP 63 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +d.rpz-ip. IN A +SECTION ANSWER +d.rpz-ip. IN A 10.0.123.4 +ENTRY_END + +SCENARIO_END From a16111d4712f6f80044071b7f64069a5923ba8ae Mon Sep 17 00:00:00 2001 From: Ralph Dolmans Date: Fri, 16 Aug 2019 12:13:30 +0200 Subject: [PATCH 26/56] Prevent potential double free --- services/rpz.c | 40 ++++++++++++++++++------------------ smallapp/unbound-checkconf.c | 2 +- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/services/rpz.c b/services/rpz.c index 3118479a7..a7605d8f6 100644 --- a/services/rpz.c +++ b/services/rpz.c @@ -441,21 +441,22 @@ strip_dname_origin(uint8_t* dname, size_t dnamelen, size_t originlen, } /** Insert RR into RPZ's local-zone */ -static int +static void rpz_insert_qname_trigger(struct rpz* r, uint8_t* dname, size_t dnamelen, enum rpz_action a, uint16_t rrtype, uint16_t rrclass, uint32_t ttl, - uint8_t* rdata, size_t rdata_len, uint8_t* rr, size_t rr_len, - int* newzone) + uint8_t* rdata, size_t rdata_len, uint8_t* rr, size_t rr_len) { struct local_zone* z; enum localzone_type tp = local_zone_always_transparent; int dnamelabs = dname_count_labels(dname); char* rrstr; + int newzone = 0; if(a == RPZ_TCP_ONLY_ACTION || a == RPZ_INVALID_ACTION) { verbose(VERB_ALGO, "RPZ: skipping unsupported action: %s", rpz_action_to_string(a)); - return 0; + free(dname); + return; } lock_rw_wrlock(&r->local_zones->lock); @@ -467,30 +468,31 @@ rpz_insert_qname_trigger(struct rpz* r, uint8_t* dname, size_t dnamelen, verbose(VERB_ALGO, "RPZ: skipping duplicate record: '%s'", rrstr); free(rrstr); + free(dname); lock_rw_unlock(&r->local_zones->lock); - return 0; + return; } if(!z) { tp = rpz_action_to_localzone_type(a); - z = local_zones_add_zone(r->local_zones, dname, dnamelen, - dnamelabs, rrclass, tp); - *newzone = 1; - } - if(!z) { - log_warn("RPZ create failed"); - lock_rw_unlock(&r->local_zones->lock); - return 0; + if(!(z = local_zones_add_zone(r->local_zones, dname, dnamelen, + dnamelabs, rrclass, tp))) { + log_warn("RPZ create failed"); + lock_rw_unlock(&r->local_zones->lock); + /* dname will be free'd in failed local_zone_create() */ + return; + } + newzone = 1; } if(a == RPZ_LOCAL_DATA_ACTION) { rrstr = sldns_wire2str_rr(rr, rr_len); - /* TODO non region alloc so rrs can be free after IXFR deletion? - * */ local_zone_enter_rr(z, dname, dnamelen, dnamelabs, rrtype, rrclass, ttl, rdata, rdata_len, rrstr); free(rrstr); } + if(!newzone) + free(dname); lock_rw_unlock(&r->local_zones->lock); - return 1; + return; } /** Insert RR into RPZ's respip_set */ @@ -548,7 +550,6 @@ rpz_insert_rr(struct rpz* r, size_t aznamelen, uint8_t* dname, uint8_t* policydname = calloc(1, LDNS_MAX_DOMAINLEN + 1); enum rpz_trigger t; enum rpz_action a; - int newzone = 0; a = rpz_rr_to_action(rr_type, rdatawl, rdatalen); if(!(policydnamelen = strip_dname_origin(dname, dnamelen, aznamelen, @@ -558,10 +559,9 @@ rpz_insert_rr(struct rpz* r, size_t aznamelen, uint8_t* dname, } t = rpz_dname_to_trigger(policydname); if(t == RPZ_QNAME_TRIGGER) { - if(!rpz_insert_qname_trigger(r, policydname, policydnamelen, + rpz_insert_qname_trigger(r, policydname, policydnamelen, a, rr_type, rr_class, rr_ttl, rdatawl, rdatalen, rr, - rr_len, &newzone) || !newzone) - free(policydname); + rr_len); } else if(t == RPZ_RESPONSE_IP_TRIGGER) { rpz_insert_response_ip_trigger(r, policydname, diff --git a/smallapp/unbound-checkconf.c b/smallapp/unbound-checkconf.c index 713380600..ce46822c0 100644 --- a/smallapp/unbound-checkconf.c +++ b/smallapp/unbound-checkconf.c @@ -642,7 +642,7 @@ check_hints(struct config_file* cfg) static void check_auth(struct config_file* cfg) { - int is_rpz; + int is_rpz = 0; struct auth_zones* az = auth_zones_create(); if(!az || !auth_zones_apply_cfg(az, cfg, 0i, &is_rpz)) { fatal_exit("Could not setup authority zones"); From ccb576f95e6cd4c10c04d4aa74f2d320d3dec872 Mon Sep 17 00:00:00 2001 From: Ralph Dolmans Date: Fri, 23 Aug 2019 12:15:37 +0200 Subject: [PATCH 27/56] - add always_deny action, use this one for RPZ - use localzone's memory layout when removing rr from rrset --- respip/respip.c | 11 +- services/localzone.c | 29 ++- services/localzone.h | 13 ++ services/rpz.c | 18 +- services/rpz.h | 1 + testdata/rpz_ixfr.rpl | 378 +++++++++++++++++++++++++++++++ testdata/rpz_qname_override.rpl | 19 ++ testdata/rpz_respip_override.rpl | 30 +++ 8 files changed, 483 insertions(+), 16 deletions(-) create mode 100644 testdata/rpz_ixfr.rpl diff --git a/respip/respip.c b/respip/respip.c index 57abed683..5da60ad0e 100644 --- a/respip/respip.c +++ b/respip/respip.c @@ -195,6 +195,8 @@ respip_action_cfg(struct respip_set* set, const char* ipstr, action = respip_always_nxdomain; else if(strcmp(actnstr, "always_nodata") == 0) action = respip_always_nodata; + else if(strcmp(actnstr, "always_deny") == 0) + action = respip_always_deny; else { log_err("unknown response-ip action %s", actnstr); return 0; @@ -962,6 +964,7 @@ respip_rewrite_reply(const struct query_info* qinfo, && action != respip_always_transparent && action != respip_always_nxdomain && action != respip_always_nodata + && action != respip_always_deny && (result = respip_data_answer(action, (data) ? data : raddr->data, qinfo->qtype, rep, rrset_id, new_repp, tag, tag_datas, tag_datas_size, @@ -1080,9 +1083,11 @@ respip_operate(struct module_qstate* qstate, enum module_ev event, int id, } else { qstate->respip_action_info = NULL; } - if (new_rep == qstate->return_msg->rep && + if (actinfo.action == respip_always_deny || + (new_rep == qstate->return_msg->rep && (actinfo.action == respip_deny || - actinfo.action == respip_inform_deny)) { + actinfo.action == respip_deny || + actinfo.action == respip_inform_deny))) { /* for deny-variant actions (unless response-ip * data is applied), mark the query state so * the response will be dropped for all @@ -1283,7 +1288,7 @@ respip_inform_print(struct respip_action_info* respip_actinfo, uint8_t* qname, txtlen += snprintf(txt+txtlen, sizeof(txt)-txtlen, "[%s] ", respip_actinfo->log_name); } - txtlen += snprintf(txt+txtlen, sizeof(txt)-txtlen, + snprintf(txt+txtlen, sizeof(txt)-txtlen, "%s/%d %s %s@%u", respip, respip_addr->net, (actionstr) ? actionstr : "inform", srcip, port); if(actionstr) diff --git a/services/localzone.c b/services/localzone.c index 5034de149..33062ea69 100644 --- a/services/localzone.c +++ b/services/localzone.c @@ -394,6 +394,27 @@ rrset_insert_rr(struct regional* region, struct packed_rrset_data* pd, return 1; } +/** Delete RR from local-zone RRset, wastes memory as the deleted RRs cannot be + * free'd (regionally alloc'd) */ +int +local_rrset_remove_rr(struct packed_rrset_data* pd, size_t index) +{ + if(index >= pd->count) { + log_warn("Trying to remove RR with out of bound index"); + return 0; + } + if(index - 1 < pd->count) { + /* not removing last element */ + size_t nexti = index + 1; + size_t num = pd->count - nexti; + memcpy(pd->rr_len+index, pd->rr_len+nexti, sizeof(*pd->rr_len)*num); + memcpy(pd->rr_ttl+index, pd->rr_ttl+nexti, sizeof(*pd->rr_ttl)*num); + memcpy(pd->rr_data+index, pd->rr_data+nexti, sizeof(*pd->rr_data)*num); + } + pd->count--; + return 1; +} + struct local_data* local_zone_find_data(struct local_zone* z, uint8_t* nm, size_t nmlen, int nmlabs) { @@ -1447,7 +1468,9 @@ local_zones_zone_answer(struct local_zone* z, struct module_env* env, struct comm_reply* repinfo, sldns_buffer* buf, struct regional* temp, struct local_data* ld, enum localzone_type lz_type) { - if(lz_type == local_zone_deny || lz_type == local_zone_inform_deny) { + if(lz_type == local_zone_deny || + lz_type == local_zone_always_deny || + lz_type == local_zone_inform_deny) { /** no reply at all, signal caller by clearing buffer. */ sldns_buffer_clear(buf); sldns_buffer_flip(buf); @@ -1655,6 +1678,7 @@ local_zones_answer(struct local_zones* zones, struct module_env* env, && lzt != local_zone_always_transparent && lzt != local_zone_always_nxdomain && lzt != local_zone_always_nodata + && lzt != local_zone_always_deny && local_data_answer(z, env, qinfo, edns, repinfo, buf, temp, labs, &ld, lzt, tag, tag_datas, tag_datas_size, tagname, num_tags)) { lock_rw_unlock(&z->lock); @@ -1685,6 +1709,7 @@ const char* local_zone_type2str(enum localzone_type t) case local_zone_always_refuse: return "always_refuse"; case local_zone_always_nxdomain: return "always_nxdomain"; case local_zone_always_nodata: return "always_nodata"; + case local_zone_always_deny: return "always_deny"; case local_zone_noview: return "noview"; case local_zone_invalid: return "invalid"; } @@ -1719,6 +1744,8 @@ int local_zone_str2type(const char* type, enum localzone_type* t) *t = local_zone_always_nxdomain; else if(strcmp(type, "always_nodata") == 0) *t = local_zone_always_nodata; + else if(strcmp(type, "always_deny") == 0) + *t = local_zone_always_deny; else if(strcmp(type, "noview") == 0) *t = local_zone_noview; else if(strcmp(type, "nodefault") == 0) diff --git a/services/localzone.h b/services/localzone.h index a476f36c9..10bfab82e 100644 --- a/services/localzone.h +++ b/services/localzone.h @@ -94,6 +94,8 @@ enum localzone_type { local_zone_always_nxdomain, /** answer with noerror/nodata, even when there is local data */ local_zone_always_nodata, + /** drop query, even when there is local data */ + local_zone_always_deny, /** answer not from the view, but global or no-answer */ local_zone_noview, /** Invalid type, cannot be used to generate answer */ @@ -513,6 +515,15 @@ int rrstr_get_rr_content(const char* str, uint8_t** nm, uint16_t* type, int rrset_insert_rr(struct regional* region, struct packed_rrset_data* pd, uint8_t* rdata, size_t rdata_len, time_t ttl, const char* rrstr); +/** + * Remove RR from rrset that is created using localzone's rrset_insert_rr. + * @param pd: the RRset containing the RR to remove + * @param index: index of RR to remove + * @return: 1 on success; 0 otherwise. + */ +int +local_rrset_remove_rr(struct packed_rrset_data* pd, size_t index); + /** * Valid response ip actions for the IP-response-driven-action feature; * defined here instead of in the respip module to enable sharing of enum @@ -543,6 +554,8 @@ enum respip_action { respip_always_nxdomain = local_zone_always_nxdomain, /** answer with nodata response */ respip_always_nodata = local_zone_always_nodata, + /** answer with nodata response */ + respip_always_deny = local_zone_always_deny, /* The rest of the values are only possible as * access-control-tag-action */ diff --git a/services/rpz.c b/services/rpz.c index a7605d8f6..8653a30f0 100644 --- a/services/rpz.c +++ b/services/rpz.c @@ -197,7 +197,7 @@ rpz_action_to_localzone_type(enum rpz_action a) switch(a) { case RPZ_NXDOMAIN_ACTION: return local_zone_always_nxdomain; case RPZ_NODATA_ACTION: return local_zone_always_nodata; - case RPZ_DROP_ACTION: return local_zone_deny; + case RPZ_DROP_ACTION: return local_zone_always_deny; case RPZ_PASSTHRU_ACTION: return local_zone_always_transparent; case RPZ_LOCAL_DATA_ACTION: case RPZ_CNAME_OVERRIDE_ACTION: @@ -215,7 +215,7 @@ rpz_action_to_respip_action(enum rpz_action a) switch(a) { case RPZ_NXDOMAIN_ACTION: return respip_always_nxdomain; case RPZ_NODATA_ACTION: return respip_always_nodata; - case RPZ_DROP_ACTION: return respip_deny; + case RPZ_DROP_ACTION: return respip_always_deny; case RPZ_PASSTHRU_ACTION: return respip_always_transparent; case RPZ_LOCAL_DATA_ACTION: case RPZ_CNAME_OVERRIDE_ACTION: @@ -233,7 +233,7 @@ localzone_type_to_rpz_action(enum localzone_type lzt) switch(lzt) { case local_zone_always_nxdomain: return RPZ_NXDOMAIN_ACTION; case local_zone_always_nodata: return RPZ_NODATA_ACTION; - case local_zone_deny: return RPZ_DROP_ACTION; + case local_zone_always_deny: return RPZ_DROP_ACTION; case local_zone_always_transparent: return RPZ_PASSTHRU_ACTION; case local_zone_redirect: return RPZ_LOCAL_DATA_ACTION; case local_zone_invalid: @@ -248,7 +248,7 @@ respip_action_to_rpz_action(enum respip_action a) switch(a) { case respip_always_nxdomain: return RPZ_NXDOMAIN_ACTION; case respip_always_nodata: return RPZ_NODATA_ACTION; - case respip_deny: return RPZ_DROP_ACTION; + case respip_always_deny: return RPZ_DROP_ACTION; case respip_always_transparent: return RPZ_PASSTHRU_ACTION; case respip_redirect: return RPZ_LOCAL_DATA_ACTION; case respip_invalid: @@ -689,11 +689,8 @@ rpz_data_delete_rr(struct local_zone* z, uint8_t* policydname, } if(d->count > 1) { - struct packed_rrset_data* new; - new = packed_rrset_remove_rr(d, index, z->region); - if(!new) + if(!local_rrset_remove_rr(d, index)) return 0; - p->rrset->entry.data = new; } } } @@ -731,11 +728,8 @@ rpz_rrset_delete_rr(struct resp_addr* raddr, uint16_t rr_type, uint8_t* rdata, return 1; } if(d->count > 1) { - struct packed_rrset_data* new; - new = packed_rrset_remove_rr(d, index, region); - if(!new) + if(!local_rrset_remove_rr(d, index)) return 0; - raddr->data->entry.data = new; } } return 0; diff --git a/services/rpz.h b/services/rpz.h index 042773f33..80edad822 100644 --- a/services/rpz.h +++ b/services/rpz.h @@ -44,6 +44,7 @@ #include "services/localzone.h" #include "util/locks.h" +#include "util/log.h" #include "util/config_file.h" #include "services/authzone.h" #include "sldns/sbuffer.h" diff --git a/testdata/rpz_ixfr.rpl b/testdata/rpz_ixfr.rpl new file mode 100644 index 000000000..3f7cb3d35 --- /dev/null +++ b/testdata/rpz_ixfr.rpl @@ -0,0 +1,378 @@ +; config options +server: + module-config: "respip validator iterator" + target-fetch-policy: "0 0 0 0 0" + qname-minimisation: no + +rpz: + name: "rpz.example.com." + master: 10.20.30.40 + 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.rpz.example.com. IN CNAME *. +c.rpz.example.com. IN TXT "hello from initial RPZ" +c.rpz.example.com. IN TXT "another hello from initial RPZ" +c.rpz.example.com. IN TXT "yet another hello from initial RPZ" +d.rpz.example.com. IN CNAME . +32.1.123.0.10.rpz-ip.rpz.example.com. CNAME *. +32.3.123.0.10.rpz-ip.rpz.example.com. A 10.66.0.3 +32.3.123.0.10.rpz-ip.rpz.example.com. A 10.66.0.4 +32.4.123.0.10.rpz-ip.rpz.example.com. CNAME . +TEMPFILE_END + +stub-zone: + name: "." + stub-addr: 10.20.30.40 + +CONFIG_END + +SCENARIO_BEGIN Test RPZ QNAME trigger, loaded using IXFR + +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. IN TXT +SECTION ANSWER +b. TXT "hello from upstream" +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qname qtype +ADJUST copy_id +REPLY QR NOERROR AA +SECTION QUESTION +d. IN TXT +SECTION ANSWER +d. TXT "hello from upstream" +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qname qtype +ADJUST copy_id +REPLY QR NOERROR AA +SECTION QUESTION +a.rpz-ip. IN A +SECTION ANSWER +a.rpz-ip. IN A 10.0.123.1 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qname qtype +ADJUST copy_id +REPLY QR NOERROR AA +SECTION QUESTION +c.rpz-ip. IN A +SECTION ANSWER +c.rpz-ip. IN A 10.0.123.3 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qname qtype +ADJUST copy_id +REPLY QR NOERROR AA +SECTION QUESTION +d.rpz-ip. IN A +SECTION ANSWER +d.rpz-ip. IN A 10.0.123.4 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qname qtype +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +rpz.example.com. IN SOA +SECTION ANSWER +rpz.example.com. IN SOA ns.rpz.example.com. hostmaster.rpz.example.com. 2 3600 900 86400 3600 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qname qtype +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +rpz.example.com. IN IXFR +SECTION ANSWER +rpz.example.com. IN SOA ns.rpz.example.com. hostmaster.rpz.example.com. 2 3600 900 86400 3600 +rpz.example.com. IN SOA ns.rpz.example.com. hostmaster.rpz.example.com. 1 3600 900 86400 3600 +a.rpz.example.com. IN CNAME *. +c.rpz.example.com. IN TXT "hello from initial RPZ" +c.rpz.example.com. IN TXT "another hello from initial RPZ" +d.rpz.example.com. IN CNAME . +32.1.123.0.10.rpz-ip.rpz.example.com. CNAME *. +32.3.123.0.10.rpz-ip.rpz.example.com. A 10.66.0.3 +32.3.123.0.10.rpz-ip.rpz.example.com. A 10.66.0.4 +32.4.123.0.10.rpz-ip.rpz.example.com. CNAME . +rpz.example.com. IN SOA ns.rpz.example.com. hostmaster.rpz.example.com. 2 3600 900 86400 3600 +b.rpz.example.com. TXT "hello from RPZ" +c.rpz.example.com. TXT "hello from RPZ" +a.rpz.example.com. CNAME . +32.1.123.0.10.rpz-ip.rpz.example.com. CNAME . +32.3.123.0.10.rpz-ip.rpz.example.com. A 10.66.0.5 +32.3.123.0.10.rpz-ip.rpz.example.com. A 10.66.0.6 +rpz.example.com. IN SOA ns.rpz.example.com. hostmaster.rpz.example.com. 2 3600 900 86400 3600 +ENTRY_END + +RANGE_END + +STEP 1 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +b. IN TXT +ENTRY_END + +STEP 2 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +b. IN TXT +SECTION ANSWER +b. IN TXT "hello from upstream" +ENTRY_END + +STEP 3 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +a. IN TXT +ENTRY_END + +STEP 4 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA AA NOERROR +SECTION QUESTION +a. IN TXT +SECTION ANSWER +ENTRY_END + +STEP 5 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +a.rpz-ip. IN A +ENTRY_END + +STEP 6 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +a.rpz-ip. IN A +SECTION ANSWER +ENTRY_END + +STEP 7 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +c. IN TXT +ENTRY_END + +STEP 8 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA AA NOERROR +SECTION QUESTION +c. IN TXT +SECTION ANSWER +c. IN TXT "yet another hello from initial RPZ" +c. IN TXT "another hello from initial RPZ" +c. IN TXT "hello from initial RPZ" +ENTRY_END + +STEP 9 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +c.rpz-ip. IN A +ENTRY_END + +STEP 10 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +c.rpz-ip. IN A +SECTION ANSWER +c.rpz-ip. IN A 10.66.0.4 +c.rpz-ip. IN A 10.66.0.3 +ENTRY_END + +STEP 11 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +d. IN TXT +ENTRY_END + +STEP 12 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA AA NXDOMAIN +SECTION QUESTION +d. IN TXT +ENTRY_END + +STEP 13 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +d.rpz-ip. IN A +ENTRY_END + + +STEP 15 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NXDOMAIN +SECTION QUESTION +d.rpz-ip. IN A +ENTRY_END + +STEP 16 TIME_PASSES ELAPSE 1 +STEP 30 TIME_PASSES ELAPSE 3600 +STEP 40 TRAFFIC + +STEP 50 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +b. IN TXT +ENTRY_END + +STEP 51 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA AA NOERROR +SECTION QUESTION +b. IN TXT +SECTION ANSWER +b. IN TXT "hello from RPZ" +ENTRY_END + +STEP 52 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +a. IN TXT +ENTRY_END + +STEP 53 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA AA NXDOMAIN +SECTION QUESTION +a. IN TXT +SECTION ANSWER +ENTRY_END + +STEP 54 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +a.rpz-ip. IN A +ENTRY_END + +STEP 55 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NXDOMAIN +SECTION QUESTION +a.rpz-ip. IN A +SECTION ANSWER +ENTRY_END + +STEP 56 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +c. IN TXT +ENTRY_END + +STEP 57 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA AA NOERROR +SECTION QUESTION +c. IN TXT +SECTION ANSWER +c. IN TXT "hello from RPZ" +c. IN TXT "yet another hello from initial RPZ" +ENTRY_END + +STEP 58 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +c.rpz-ip. IN A +ENTRY_END + +STEP 59 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +c.rpz-ip. IN A +SECTION ANSWER +c.rpz-ip. IN A 10.66.0.6 +c.rpz-ip. IN A 10.66.0.5 +ENTRY_END + +STEP 60 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +d. IN TXT +ENTRY_END + +STEP 61 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +d. IN TXT +SECTION ANSWER +d. IN TXT "hello from upstream" +ENTRY_END + +STEP 62 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +d.rpz-ip. IN A +ENTRY_END + +STEP 63 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +d.rpz-ip. IN A +SECTION ANSWER +d.rpz-ip. IN A 10.0.123.4 +ENTRY_END + +SCENARIO_END diff --git a/testdata/rpz_qname_override.rpl b/testdata/rpz_qname_override.rpl index d75049306..b2608e251 100644 --- a/testdata/rpz_qname_override.rpl +++ b/testdata/rpz_qname_override.rpl @@ -64,6 +64,16 @@ $ORIGIN rpz6.example.com. e TXT "should be override by cname" TEMPFILE_END +rpz: + name: "rpz7.example.com." + rpz-action-override: drop + zonefile: +TEMPFILE_NAME rpz7.example.com +TEMPFILE_CONTENTS rpz7.example.com +$ORIGIN rpz7.example.com. +f TXT "should be override by drop policy" +TEMPFILE_END + stub-zone: name: "d." stub-addr: 10.20.30.40 @@ -175,4 +185,13 @@ e. IN CNAME d. d. IN TXT "answer from upstream ns" ENTRY_END +; check drop override, would be localdata without override +STEP 60 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +f. IN TXT +ENTRY_END +; no answer is checked at exit of testbound. + SCENARIO_END diff --git a/testdata/rpz_respip_override.rpl b/testdata/rpz_respip_override.rpl index f5672d621..16d91378a 100644 --- a/testdata/rpz_respip_override.rpl +++ b/testdata/rpz_respip_override.rpl @@ -64,6 +64,16 @@ $ORIGIN rpz6.example.com. 32.6.113.0.203.rpz-ip A 192.0.2.6 TEMPFILE_END +rpz: + name: "rpz7.example.com." + rpz-action-override: drop + zonefile: +TEMPFILE_NAME rpz7.example.com +TEMPFILE_CONTENTS rpz7.example.com +$ORIGIN rpz7.example.com. +32.7.113.0.203.rpz-ip A 192.0.2.7 +TEMPFILE_END + stub-zone: name: "." stub-addr: 10.20.30.40 @@ -146,6 +156,16 @@ SECTION ANSWER e. IN A 203.0.113.6 ENTRY_END +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +f. IN A +SECTION ANSWER +f. IN A 203.0.113.7 +ENTRY_END + RANGE_END STEP 1 QUERY @@ -232,4 +252,14 @@ e. IN CNAME ns. ns. IN A 10.20.30.40 ENTRY_END +STEP 11 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +f. IN A +ENTRY_END +; no answer is checked at exit of testbound. + +STEP 12 TIME_PASSES ELAPSE 10 + SCENARIO_END From bc39217070015a5c07e0bbe0e51a5e50f3867738 Mon Sep 17 00:00:00 2001 From: Ralph Dolmans Date: Fri, 23 Aug 2019 12:45:34 +0200 Subject: [PATCH 28/56] Don't pass along unused parameter --- services/rpz.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/services/rpz.c b/services/rpz.c index 8653a30f0..b9fc03211 100644 --- a/services/rpz.c +++ b/services/rpz.c @@ -705,12 +705,11 @@ rpz_data_delete_rr(struct local_zone* z, uint8_t* policydname, * @param rr_type: RR type of RR to remove * @param rdata: rdata of RR to remove * @param rdatalen: length of rdata - * @param region: RPZ's repsip_set region * @return: 1 if zone must be removed after RR deletion */ static int rpz_rrset_delete_rr(struct resp_addr* raddr, uint16_t rr_type, uint8_t* rdata, - size_t rdatalen, struct regional* region) + size_t rdatalen) { size_t index; struct packed_rrset_data* d; @@ -790,7 +789,7 @@ rpz_remove_response_ip_trigger(struct rpz* r, uint8_t* dname, enum rpz_action a, if(a == RPZ_LOCAL_DATA_ACTION) { /* remove RR, signal whether RR can be removed */ delete_respip = rpz_rrset_delete_rr(node, rr_type, rdatawl, - rdatalen, r->respip_set->region); + rdatalen); } if(delete_respip) { /* delete + reset parent pointers */ From 4ac33aa104fb1a1dadf2cbeec9cbf5d37290c6a2 Mon Sep 17 00:00:00 2001 From: Ralph Dolmans Date: Mon, 9 Sep 2019 17:13:08 +0200 Subject: [PATCH 29/56] - Merge clean up - revert dname2str off by one fix - fix str2dname off by one at right location --- libunbound/context.c | 2 +- services/authzone.c | 54 +++++++++++++++++++++++++++++++-- sldns/str2wire.c | 6 ++-- util/data/dname.c | 2 +- util/data/packed_rrset.c | 64 ---------------------------------------- util/data/packed_rrset.h | 12 -------- 6 files changed, 56 insertions(+), 84 deletions(-) diff --git a/libunbound/context.c b/libunbound/context.c index cb09f1d94..d96722263 100644 --- a/libunbound/context.c +++ b/libunbound/context.c @@ -77,7 +77,7 @@ context_finalize(struct ub_ctx* ctx) return UB_NOMEM; if(!local_zones_apply_cfg(ctx->local_zones, cfg)) return UB_INITFAIL; - if(!auth_zones_apply_cfg(ctx->env->auth_zones, cfg, 1i, &is_rpz)) + if(!auth_zones_apply_cfg(ctx->env->auth_zones, cfg, 1, &is_rpz)) return UB_INITFAIL; if(!slabhash_is_size(ctx->env->msg_cache, cfg->msg_cache_size, cfg->msg_cache_slabs)) { diff --git a/services/authzone.c b/services/authzone.c index 926c6ef03..b49f7409a 100644 --- a/services/authzone.c +++ b/services/authzone.c @@ -723,10 +723,58 @@ rrsig_rdata_get_type_covered(uint8_t* rdata, size_t rdatalen) static int rrset_remove_rr(struct auth_rrset* rrset, size_t index) { - struct packed_rrset_data* d = - packed_rrset_remove_rr(rrset->data, index, NULL); - if(!d) + struct packed_rrset_data* d, *old = rrset->data; + size_t i; + if(index >= old->count + old->rrsig_count) + return 0; /* index out of bounds */ + d = (struct packed_rrset_data*)calloc(1, packed_rrset_sizeof(old) - ( + sizeof(size_t) + sizeof(uint8_t*) + sizeof(time_t) + + old->rr_len[index])); + if(!d) { + log_err("malloc failure"); return 0; + } + d->ttl = old->ttl; + d->count = old->count; + d->rrsig_count = old->rrsig_count; + if(index < d->count) d->count--; + else d->rrsig_count--; + d->trust = old->trust; + d->security = old->security; + + /* set rr_len, needed for ptr_fixup */ + d->rr_len = (size_t*)((uint8_t*)d + + sizeof(struct packed_rrset_data)); + if(index > 0) + memmove(d->rr_len, old->rr_len, (index)*sizeof(size_t)); + if(index+1 < old->count+old->rrsig_count) + memmove(&d->rr_len[index], &old->rr_len[index+1], + (old->count+old->rrsig_count - (index+1))*sizeof(size_t)); + packed_rrset_ptr_fixup(d); + + /* move over ttls */ + if(index > 0) + memmove(d->rr_ttl, old->rr_ttl, (index)*sizeof(time_t)); + if(index+1 < old->count+old->rrsig_count) + memmove(&d->rr_ttl[index], &old->rr_ttl[index+1], + (old->count+old->rrsig_count - (index+1))*sizeof(time_t)); + + /* move over rr_data */ + for(i=0; icount+d->rrsig_count; i++) { + size_t oldi; + if(i < index) oldi = i; + else oldi = i+1; + memmove(d->rr_data[i], old->rr_data[oldi], d->rr_len[i]); + } + + /* recalc ttl (lowest of remaining RR ttls) */ + if(d->count + d->rrsig_count > 0) + d->ttl = d->rr_ttl[0]; + for(i=0; icount+d->rrsig_count; i++) { + if(d->rr_ttl[i] < d->ttl) + d->ttl = d->rr_ttl[i]; + } + free(rrset->data); rrset->data = d; return 1; diff --git a/sldns/str2wire.c b/sldns/str2wire.c index f94ba890c..e6dab6477 100644 --- a/sldns/str2wire.c +++ b/sldns/str2wire.c @@ -80,7 +80,7 @@ static int sldns_str2wire_dname_buf_rel(const char* str, uint8_t* buf, for (s = str; *s; s++, q++) { if (q >= buf + *olen) return RET_ERR(LDNS_WIREPARSE_ERR_BUFFER_TOO_SMALL, q-buf); - if (q > buf + LDNS_MAX_DOMAINLEN) + if (q >= buf + LDNS_MAX_DOMAINLEN) return RET_ERR(LDNS_WIREPARSE_ERR_DOMAINNAME_OVERFLOW, q-buf); switch (*s) { case '.': @@ -117,7 +117,7 @@ static int sldns_str2wire_dname_buf_rel(const char* str, uint8_t* buf, if(rel) *rel = 1; if (q >= buf + *olen) return RET_ERR(LDNS_WIREPARSE_ERR_BUFFER_TOO_SMALL, q-buf); - if (q > buf + LDNS_MAX_DOMAINLEN) { + if (q >= buf + LDNS_MAX_DOMAINLEN) { return RET_ERR(LDNS_WIREPARSE_ERR_DOMAINNAME_OVERFLOW, q-buf); } if (label_len > LDNS_MAX_LABELLEN) { @@ -165,7 +165,7 @@ int sldns_str2wire_dname_buf_origin(const char* str, uint8_t* buf, size_t* len, uint8_t* sldns_str2wire_dname(const char* str, size_t* len) { - uint8_t dname[LDNS_MAX_DOMAINLEN]; + uint8_t dname[LDNS_MAX_DOMAINLEN+1]; *len = sizeof(dname); if(sldns_str2wire_dname_buf(str, dname, len) == 0) { uint8_t* r = (uint8_t*)malloc(*len); diff --git a/util/data/dname.c b/util/data/dname.c index cf3545f7c..f025bf699 100644 --- a/util/data/dname.c +++ b/util/data/dname.c @@ -597,7 +597,7 @@ void dname_str(uint8_t* dname, char* str) return; } len += lablen+1; - if(len >= LDNS_MAX_DOMAINLEN) { + if(len >= LDNS_MAX_DOMAINLEN-1) { *s++ = '&'; *s = 0; return; diff --git a/util/data/packed_rrset.c b/util/data/packed_rrset.c index 9d21b9cc9..7f3feb1d0 100644 --- a/util/data/packed_rrset.c +++ b/util/data/packed_rrset.c @@ -402,67 +402,3 @@ packed_rrset_find_rr(struct packed_rrset_data* d, uint8_t* rdata, size_t len, } return 0; } - -struct packed_rrset_data* -packed_rrset_remove_rr(struct packed_rrset_data* old, size_t index, - struct regional* region) -{ - struct packed_rrset_data* d; - size_t i; - if(index >= old->count + old->rrsig_count) - return NULL; /* index out of bounds */ - if(region) - d = (struct packed_rrset_data*)regional_alloc(region, - packed_rrset_sizeof(old) - ( sizeof(size_t) + - sizeof(uint8_t*) + sizeof(time_t) + old->rr_len[index])); - else - d = (struct packed_rrset_data*)calloc(1, - packed_rrset_sizeof(old) - ( sizeof(size_t) + - sizeof(uint8_t*) + sizeof(time_t) + old->rr_len[index])); - if(!d) { - log_err("malloc failure"); - return NULL; - } - d->ttl = old->ttl; - d->count = old->count; - d->rrsig_count = old->rrsig_count; - if(index < d->count) d->count--; - else d->rrsig_count--; - d->trust = old->trust; - d->security = old->security; - - /* set rr_len, needed for ptr_fixup */ - d->rr_len = (size_t*)((uint8_t*)d + - sizeof(struct packed_rrset_data)); - if(index > 0) - memmove(d->rr_len, old->rr_len, (index)*sizeof(size_t)); - if(index+1 < old->count+old->rrsig_count) - memmove(&d->rr_len[index], &old->rr_len[index+1], - (old->count+old->rrsig_count - (index+1))*sizeof(size_t)); - packed_rrset_ptr_fixup(d); - - /* move over ttls */ - if(index > 0) - memmove(d->rr_ttl, old->rr_ttl, (index)*sizeof(time_t)); - if(index+1 < old->count+old->rrsig_count) - memmove(&d->rr_ttl[index], &old->rr_ttl[index+1], - (old->count+old->rrsig_count - (index+1))*sizeof(time_t)); - - /* move over rr_data */ - for(i=0; icount+d->rrsig_count; i++) { - size_t oldi; - if(i < index) oldi = i; - else oldi = i+1; - memmove(d->rr_data[i], old->rr_data[oldi], d->rr_len[i]); - } - - /* recalc ttl (lowest of remaining RR ttls) */ - if(d->count + d->rrsig_count > 0) - d->ttl = d->rr_ttl[0]; - for(i=0; icount+d->rrsig_count; i++) { - if(d->rr_ttl[i] < d->ttl) - d->ttl = d->rr_ttl[i]; - } - - return d; -} diff --git a/util/data/packed_rrset.h b/util/data/packed_rrset.h index cb2664c05..59693dbf6 100644 --- a/util/data/packed_rrset.h +++ b/util/data/packed_rrset.h @@ -458,16 +458,4 @@ int packed_rrset_find_rr(struct packed_rrset_data* d, uint8_t* rdata, size_t len, size_t* index); -/** - * Remove RR from packed rrset - * @param old: packed rrset containing RR to remove - * @param index: index of RR to remove - * @param region: region to use for allocation of new packet RR. Malloc used if - * NULL - * @return pointer to newly allocated packed rrset - */ -struct packed_rrset_data* -packed_rrset_remove_rr(struct packed_rrset_data* old, size_t index, - struct regional* region); - #endif /* UTIL_DATA_PACKED_RRSET_H */ From f3dfb4d537b2c9e8cbc32a61efde6ff60d342fd3 Mon Sep 17 00:00:00 2001 From: Ralph Dolmans Date: Mon, 9 Sep 2019 18:54:23 +0200 Subject: [PATCH 30/56] Typo fix, reported by jpmens --- doc/unbound.conf.5.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/unbound.conf.5.in b/doc/unbound.conf.5.in index 5db810451..0a7e75db4 100644 --- a/doc/unbound.conf.5.in +++ b/doc/unbound.conf.5.in @@ -2086,7 +2086,7 @@ Response Policy Zones are configured with \fBrpz:\fR, and each one must have a \fBname:\fR. There can be multiple ones, by listing multiple rpz clauses, each with a different name. RPZ clauses are applied in order of configuration. The \fBrespip\fR module needs to be added to the \fBmodule-config\fR, e.g.: -\fBmodule-config: "respip validator itarator"\fR. +\fBmodule-config: "respip validator iterator"\fR. .P Only the QNAME and Response IP Address triggers are supported. The supported RPZ actions are: NXDOMAIN, NODATA, PASSTHRU, DROP and Local Data. RPZ QNAME triggers From bbb737ca5a3ed357fbe0736b2db625aa13a45b9d Mon Sep 17 00:00:00 2001 From: Ralph Dolmans Date: Fri, 22 Nov 2019 12:56:24 +0800 Subject: [PATCH 31/56] processing RPZ review feedback --- doc/example.conf.in | 9 ++++++--- doc/unbound-control.8.in | 5 +++++ doc/unbound.conf.5.in | 13 ++++++++++++- libunbound/context.c | 2 +- respip/respip.c | 29 +++++++++++++++++------------ respip/respip.h | 4 ++-- services/rpz.c | 7 ++----- smallapp/unbound-control.c | 9 +++++++++ 8 files changed, 54 insertions(+), 24 deletions(-) diff --git a/doc/example.conf.in b/doc/example.conf.in index bd6c0e03e..b30dca513 100644 --- a/doc/example.conf.in +++ b/doc/example.conf.in @@ -1009,12 +1009,15 @@ remote-control: # Response Policy Zones # RPZ policies. Applied in order of configuration. QNAME and Response IP # Address trigger are the only supported triggers. Supported actions are: -# NXDOMAIN, NODATA, PASSTHRU, DROP and Local Data. Polices can be loaded from -# file or using zone transfer. The respip module needs to be added to the -# module-config, e.g.: module-config: "respip validator iterator". +# NXDOMAIN, NODATA, PASSTHRU, DROP and Local Data. Policies can be loaded from +# file, using zone transfer, or using HTTP. The respip module needs to be added +# to the module-config, e.g.: module-config: "respip validator iterator". # rpz: # name: "rpz.example.com" # zonefile: "rpz.example.com" +# master: 192.0.2.0 +# allow-notify: 192.0.2.0/32 +# url: http://www.example.com/rpz.example.org.zone # rpz-action-override: cname # rpz-cname-override: www.example.org # rpz-log: yes diff --git a/doc/unbound-control.8.in b/doc/unbound-control.8.in index 6ea40009c..37f88abf7 100644 --- a/doc/unbound-control.8.in +++ b/doc/unbound-control.8.in @@ -660,6 +660,11 @@ Number of queries that got an answer that contained EDNS client subnet data. Number of queries answered from the edns client subnet cache. These are counted as cachemiss by the main counters, but hit the client subnet specific cache, after getting processed by the edns client subnet module. +.TP +.I num.rpz.action. +Number of queries answered using configured RPZ policy, per RPZ action type. +Possible actions are: nxdomain, nodata, passthru, drop, local_data, disabled, +and cname_override. .SH "FILES" .TP .I @ub_conf_file@ diff --git a/doc/unbound.conf.5.in b/doc/unbound.conf.5.in index 0a7e75db4..3a649f450 100644 --- a/doc/unbound.conf.5.in +++ b/doc/unbound.conf.5.in @@ -2100,6 +2100,17 @@ Name of the authority zone. Where to download a copy of the zone from, with AXFR and IXFR. Multiple masters can be specified. They are all tried if one fails. .TP +.B url: \fI +Where to download a zonefile for the zone. With http or https. An example +for the url is "http://www.example.com/example.org.zone". Multiple url +statements can be given, they are tried in turn. If only urls are given +the SOA refresh timer is used to wait for making new downloads. If also +masters are listed, the masters are first probed with UDP SOA queries to +see if the SOA serial number has changed, reducing the number of downloads. +If none of the urls work, the masters are tried with IXFR and AXFR. +For https, the \fBtls\-cert\-bundle\fR and the hostname from the url are used +to authenticate the connection. +.TP .B allow\-notify: \fI With allow\-notify you can specify additional sources of notifies. When notified, the server attempts to first probe and then zone transfer. @@ -2122,7 +2133,7 @@ The CNAME target domain to use if the cname action is configured for \fBrpz\-action\-override\fR. .TP .B rpz\-log: \fI -Log all applied RPZ actions. Default is no. +Log all applied RPZ actions for this RPZ zone. Default is no. .TP .B rpz\-log\-name: \fI Specify a string to be part of the log line, for easy referencing. diff --git a/libunbound/context.c b/libunbound/context.c index d96722263..6d62e32b5 100644 --- a/libunbound/context.c +++ b/libunbound/context.c @@ -55,7 +55,7 @@ int context_finalize(struct ub_ctx* ctx) { - int is_rpz; + int is_rpz = 0; struct config_file* cfg = ctx->env->cfg; verbosity = cfg->verbosity; if(ctx_logfile_overridden && !ctx->logfile_override) { diff --git a/respip/respip.c b/respip/respip.c index 5da60ad0e..e9baa6292 100644 --- a/respip/respip.c +++ b/respip/respip.c @@ -845,10 +845,11 @@ static int respip_use_rpz(struct resp_addr* raddr, struct rpz* r, enum respip_action* action, struct ub_packed_rrset_key** data, int* rpz_log, char** log_name, - int* rpz_cname_override, struct regional* region) + int* rpz_cname_override, struct regional* region, int* is_rpz) { if(r->action_override == RPZ_DISABLED_ACTION) { - return 0; + *is_rpz = 0; + return 1; } else if(r->action_override == RPZ_NO_OVERRIDE_ACTION) *action = raddr->action; @@ -861,7 +862,9 @@ respip_use_rpz(struct resp_addr* raddr, struct rpz* r, } *rpz_log = r->log; if(r->log_name) - *log_name = regional_strdup(region, r->log_name); + if(!(*log_name = regional_strdup(region, r->log_name))) + return 0; + *is_rpz = 1; return 1; } @@ -945,12 +948,16 @@ respip_rewrite_reply(const struct query_info* qinfo, if(raddr) { if(!respip_use_rpz(raddr, r, &action, &data, &rpz_log, &log_name, &rpz_cname_override, - region)) { + region, &rpz_used)) { + log_err("out of memory"); + lock_rw_unlock(&raddr->lock); + return 0; + } + if(!rpz_used) { lock_rw_unlock(&raddr->lock); raddr = NULL; actinfo->rpz_disabled++; } - rpz_used = 1; } } } @@ -1263,7 +1270,7 @@ respip_inform_print(struct respip_action_info* respip_actinfo, uint8_t* qname, unsigned port; struct respip_addr_info* respip_addr = respip_actinfo->addrinfo; size_t txtlen = 0; - char* actionstr = NULL; + const char* actionstr = NULL; if(local_alias) qname = local_alias->rrset->rk.dname; @@ -1277,12 +1284,12 @@ respip_inform_print(struct respip_action_info* respip_actinfo, uint8_t* qname, txtlen += snprintf(txt+txtlen, sizeof(txt)-txtlen, "%s", "RPZ applied "); if(respip_actinfo->rpz_cname_override) - actionstr = strdup( - rpz_action_to_string(RPZ_CNAME_OVERRIDE_ACTION)); + actionstr = rpz_action_to_string( + RPZ_CNAME_OVERRIDE_ACTION); else - actionstr = strdup(rpz_action_to_string( + actionstr = rpz_action_to_string( respip_action_to_rpz_action( - respip_actinfo->action))); + respip_actinfo->action)); } if(respip_actinfo->log_name) { txtlen += snprintf(txt+txtlen, sizeof(txt)-txtlen, @@ -1291,7 +1298,5 @@ respip_inform_print(struct respip_action_info* respip_actinfo, uint8_t* qname, snprintf(txt+txtlen, sizeof(txt)-txtlen, "%s/%d %s %s@%u", respip, respip_addr->net, (actionstr) ? actionstr : "inform", srcip, port); - if(actionstr) - free(actionstr); log_nametypeclass(0, txt, qname, qtype, qclass); } diff --git a/respip/respip.h b/respip/respip.h index 4a56b8d29..bbd471421 100644 --- a/respip/respip.h +++ b/respip/respip.h @@ -270,7 +270,7 @@ respip_sockaddr_find_or_create(struct respip_set* set, struct sockaddr_storage* socklen_t addrlen, int net, int create, const char* ipstr); /** - * Add RR to resp_addr's RRset. Create RRset is not existing. + * Add RR to resp_addr's RRset. Create RRset if not existing. * @param region: region to alloc RR(set). * @param raddr: resp_addr containing RRset. Must hold write lock. * @param rrtype: RR type. @@ -290,7 +290,7 @@ respip_enter_rr(struct regional* region, struct resp_addr* raddr, /** * Delete resp_addr node from tree. * @param set: struct containing tree. Must hold write lock. - * @param node: node to delete. Must hold write lock. + * @param node: node to delete. Not locked. */ void respip_sockaddr_delete(struct respip_set* set, struct resp_addr* node); diff --git a/services/rpz.c b/services/rpz.c index b9fc03211..d36f2268e 100644 --- a/services/rpz.c +++ b/services/rpz.c @@ -791,12 +791,9 @@ rpz_remove_response_ip_trigger(struct rpz* r, uint8_t* dname, enum rpz_action a, delete_respip = rpz_rrset_delete_rr(node, rr_type, rdatawl, rdatalen); } - if(delete_respip) { - /* delete + reset parent pointers */ + lock_rw_unlock(&node->lock); + if(delete_respip) respip_sockaddr_delete(r->respip_set, node); - } else { - lock_rw_unlock(&node->lock); - } lock_rw_unlock(&r->respip_set->lock); } diff --git a/smallapp/unbound-control.c b/smallapp/unbound-control.c index 01e2385fa..c5aae7a8c 100644 --- a/smallapp/unbound-control.c +++ b/smallapp/unbound-control.c @@ -62,6 +62,7 @@ #include "daemon/stats.h" #include "sldns/wire2str.h" #include "sldns/pkthdr.h" +#include "services/rpz.h" #ifdef HAVE_SYS_IPC_H #include "sys/ipc.h" @@ -372,6 +373,14 @@ static void print_extended(struct ub_stats_info* s) PR_UL("rrset.cache.count", s->svr.rrset_cache_count); PR_UL("infra.cache.count", s->svr.infra_cache_count); PR_UL("key.cache.count", s->svr.key_cache_count); + /* applied RPZ actions */ + for(i=0; isvr.rpz_action[i] == RPZ_NO_OVERRIDE_ACTION) + continue; + if(inhibit_zero && s->svr.rpz_action[i] == 0) + continue; + PR_UL_SUB("num.rpz.action", rpz_action_to_string(i), s->svr.rpz_action[i]); + } #ifdef USE_DNSCRYPT PR_UL("dnscrypt_shared_secret.cache.count", s->svr.shared_secret_cache_count); From ae4f6a259b8279a720d434585ae42c98a8beb600 Mon Sep 17 00:00:00 2001 From: Ralph Dolmans Date: Mon, 23 Dec 2019 16:02:43 +0100 Subject: [PATCH 32/56] Proccess more review feedback --- daemon/stats.c | 2 +- services/authzone.c | 6 +- services/localzone.c | 10 +- services/localzone.h | 33 ++ services/mesh.c | 4 +- services/mesh.h | 5 +- services/rpz.c | 141 +++-- services/rpz.h | 4 +- testdata/rpz_qname.rpl | 2 +- util/configparser.c | 1143 ++++++++++++++++++++-------------------- util/configparser.y | 5 +- util/data/dname.c | 8 +- util/net_help.h | 3 + 13 files changed, 727 insertions(+), 639 deletions(-) diff --git a/daemon/stats.c b/daemon/stats.c index 67f89372d..93a85c618 100644 --- a/daemon/stats.c +++ b/daemon/stats.c @@ -271,7 +271,7 @@ server_stats_compile(struct worker* worker, struct ub_stats_info* s, int reset) s->svr.ans_secure += (long long)worker->env.mesh->ans_secure; s->svr.ans_bogus += (long long)worker->env.mesh->ans_bogus; s->svr.ans_rcode_nodata += (long long)worker->env.mesh->ans_nodata; - for(i=0; i<16; i++) + for(i=0; isvr.ans_rcode[i] += (long long)worker->env.mesh->ans_rcode[i]; for(i=0; isvr.rpz_action[i] += (long long)worker->env.mesh->rpz_action[i]; diff --git a/services/authzone.c b/services/authzone.c index b49f7409a..e187ac6bf 100644 --- a/services/authzone.c +++ b/services/authzone.c @@ -1176,8 +1176,10 @@ az_insert_rr(struct auth_zone* z, uint8_t* rr, size_t rr_len, return 0; } if(z->rpz) { - rpz_insert_rr(z->rpz, z->namelen, dname, dname_len, rr_type, rr_class, rr_ttl, rdata, - rdatalen, rr, rr_len); + if(!(rpz_insert_rr(z->rpz, z->namelen, dname, dname_len, + rr_type, rr_class, rr_ttl, rdata, rdatalen, rr, + rr_len))) + return 0; } return 1; } diff --git a/services/localzone.c b/services/localzone.c index 33062ea69..bf1043825 100644 --- a/services/localzone.c +++ b/services/localzone.c @@ -399,17 +399,18 @@ rrset_insert_rr(struct regional* region, struct packed_rrset_data* pd, int local_rrset_remove_rr(struct packed_rrset_data* pd, size_t index) { + log_assert(pd->count > 0); if(index >= pd->count) { log_warn("Trying to remove RR with out of bound index"); return 0; } - if(index - 1 < pd->count) { + if(index + 1 < pd->count) { /* not removing last element */ size_t nexti = index + 1; size_t num = pd->count - nexti; - memcpy(pd->rr_len+index, pd->rr_len+nexti, sizeof(*pd->rr_len)*num); - memcpy(pd->rr_ttl+index, pd->rr_ttl+nexti, sizeof(*pd->rr_ttl)*num); - memcpy(pd->rr_data+index, pd->rr_data+nexti, sizeof(*pd->rr_data)*num); + memmove(pd->rr_len+index, pd->rr_len+nexti, sizeof(*pd->rr_len)*num); + memmove(pd->rr_ttl+index, pd->rr_ttl+nexti, sizeof(*pd->rr_ttl)*num); + memmove(pd->rr_data+index, pd->rr_data+nexti, sizeof(*pd->rr_data)*num); } pd->count--; return 1; @@ -1354,7 +1355,6 @@ find_tag_datas(struct query_info* qinfo, struct config_strlist* list, return result; } -/** answer local data match */ int local_data_answer(struct local_zone* z, struct module_env* env, struct query_info* qinfo, struct edns_data* edns, diff --git a/services/localzone.h b/services/localzone.h index 10bfab82e..b47c01f57 100644 --- a/services/localzone.h +++ b/services/localzone.h @@ -572,6 +572,25 @@ enum respip_action { respip_invalid = local_zone_invalid, }; +/** + * Get local data from local zone and encode answer. + * @param z: local zone to use + * @param env: module env + * @param qinfo: qinfo + * @param edns: edns data, for message encoding + * @param repinfo: reply info, for message encoding + * @param buf: commpoint buffer + * @param temp: scratchpad region + * @param labs: number of labels in qname + * @param ldp: where to store local data + * @param lzt: type of local zone + * @param tag: matching tag index + * @param tag_datas: alc specific tag data list + * @param tag_datas_size: size of tag_datas + * @param tagname: list of names of tags, for logging purpose + * @param num_tags: number of tags + * @return 1 on success + */ int local_data_answer(struct local_zone* z, struct module_env* env, struct query_info* qinfo, struct edns_data* edns, @@ -580,6 +599,20 @@ local_data_answer(struct local_zone* z, struct module_env* env, enum localzone_type lz_type, int tag, struct config_strlist** tag_datas, size_t tag_datas_size, char** tagname, int num_tags); +/** + * Add RR to local zone. + * @param z: local zone to add RR to + * @param nm: dname of RR + * @param nmlen: length of nm + * @param nmlabs: number of labels of nm + * @param rrtype: RR type + * @param rrclass: RR class + * @param ttl: TTL of RR to add + * @param rdata: RDATA of RR to add + * @param rdata_len: length of rdata + * @param rrstr: RR in string format, for logging + * @return: 1 on success + */ int local_zone_enter_rr(struct local_zone* z, uint8_t* nm, size_t nmlen, int nmlabs, uint16_t rrtype, uint16_t rrclass, time_t ttl, diff --git a/services/mesh.c b/services/mesh.c index 5827b93f0..898122df8 100644 --- a/services/mesh.c +++ b/services/mesh.c @@ -1592,8 +1592,8 @@ mesh_stats_clear(struct mesh_area* mesh) timehist_clear(mesh->histogram); mesh->ans_secure = 0; mesh->ans_bogus = 0; - memset(&mesh->ans_rcode[0], 0, sizeof(size_t)*16); - memset(&mesh->rpz_action[0], 0, sizeof(size_t)*10); + memset(&mesh->ans_rcode[0], 0, sizeof(size_t)*UB_STATS_RCODE_NUM); + memset(&mesh->rpz_action[0], 0, sizeof(size_t)*UB_STATS_RPZ_ACTION_NUM); mesh->ans_nodata = 0; } diff --git a/services/mesh.h b/services/mesh.h index c28176465..9c2b2c97c 100644 --- a/services/mesh.h +++ b/services/mesh.h @@ -52,6 +52,7 @@ #include "util/module.h" #include "services/modstack.h" #include "services/rpz.h" +#include "libunbound/unbound.h" struct sldns_buffer; struct mesh_state; struct mesh_reply; @@ -122,11 +123,11 @@ struct mesh_area { /** (extended stats) bogus replies */ size_t ans_bogus; /** (extended stats) rcodes in replies */ - size_t ans_rcode[16]; + size_t ans_rcode[UB_STATS_RCODE_NUM]; /** (extended stats) rcode nodata in replies */ size_t ans_nodata; /** (extended stats) type of applied RPZ action */ - size_t rpz_action[10]; + size_t rpz_action[UB_STATS_RPZ_ACTION_NUM]; /** backup of query if other operations recurse and need the * network buffers */ diff --git a/services/rpz.c b/services/rpz.c index d36f2268e..92d3b8663 100644 --- a/services/rpz.c +++ b/services/rpz.c @@ -51,6 +51,7 @@ #include "util/locks.h" #include "util/regional.h" +/** string for RPZ action enum */ const char* rpz_action_to_string(enum rpz_action a) { @@ -69,6 +70,7 @@ rpz_action_to_string(enum rpz_action a) return "unknown"; } +/** RPZ action enum for config string */ static enum rpz_action rpz_config_to_action(char* a) { @@ -106,19 +108,24 @@ rpz_trigger_to_string(enum rpz_trigger r) /** * Get the label that is just before the root label. * @param dname: dname to work on - * @return: pointer to TLD label + * @param maxdnamelen: maximum length of the dname + * @return: pointer to TLD label, NULL if not found or invalid dname */ static uint8_t* -get_tld_label(uint8_t* dname) +get_tld_label(uint8_t* dname, size_t maxdnamelen) { uint8_t* prevlab = dname; + size_t dnamelen = 0; /* only root label */ if(*dname == 0) return NULL; while(*dname) { - dname = dname+*dname+1; + dnamelen += ((size_t)*dname)+1; + if(dnamelen > maxdnamelen) + return NULL; + dname = dname+((size_t)*dname)+1; if(*dname != 0) prevlab = dname; } @@ -183,7 +190,7 @@ rpz_rr_to_action(uint16_t rr_type, uint8_t* rdatawl, size_t rdatalen) } /* all other TLDs starting with "rpz-" are invalid */ - tldlab = get_tld_label(rdata); + tldlab = get_tld_label(rdata, rdatalen-2); if(tldlab && dname_lab_startswith(tldlab, "rpz-", &endptr)) return RPZ_INVALID_ACTION; @@ -199,13 +206,11 @@ rpz_action_to_localzone_type(enum rpz_action a) case RPZ_NODATA_ACTION: return local_zone_always_nodata; case RPZ_DROP_ACTION: return local_zone_always_deny; case RPZ_PASSTHRU_ACTION: return local_zone_always_transparent; - case RPZ_LOCAL_DATA_ACTION: - case RPZ_CNAME_OVERRIDE_ACTION: - return local_zone_redirect; - case RPZ_INVALID_ACTION: - case RPZ_TCP_ONLY_ACTION: - default: - return local_zone_invalid; + case RPZ_LOCAL_DATA_ACTION: /* fallthrough */ + case RPZ_CNAME_OVERRIDE_ACTION: return local_zone_redirect; + case RPZ_INVALID_ACTION: /* fallthrough */ + case RPZ_TCP_ONLY_ACTION: /* fallthrough */ + default: return local_zone_invalid; } } @@ -217,13 +222,11 @@ rpz_action_to_respip_action(enum rpz_action a) case RPZ_NODATA_ACTION: return respip_always_nodata; case RPZ_DROP_ACTION: return respip_always_deny; case RPZ_PASSTHRU_ACTION: return respip_always_transparent; - case RPZ_LOCAL_DATA_ACTION: - case RPZ_CNAME_OVERRIDE_ACTION: - return respip_redirect; - case RPZ_INVALID_ACTION: - case RPZ_TCP_ONLY_ACTION: - default: - return respip_invalid; + case RPZ_LOCAL_DATA_ACTION: /* fallthrough */ + case RPZ_CNAME_OVERRIDE_ACTION: return respip_redirect; + case RPZ_INVALID_ACTION: /* fallthrough */ + case RPZ_TCP_ONLY_ACTION: /* fallthrough */ + default: return respip_invalid; } } @@ -260,14 +263,19 @@ respip_action_to_rpz_action(enum respip_action a) /** * Get RPZ trigger for dname * @param dname: dname containing RPZ trigger + * @param dname_len: length of the dname * @return: RPZ trigger enum */ static enum rpz_trigger -rpz_dname_to_trigger(uint8_t* dname) +rpz_dname_to_trigger(uint8_t* dname, size_t dname_len) { uint8_t* tldlab; char* endptr; - tldlab = get_tld_label(dname); + + if(dname_valid(dname, dname_len) != dname_len) + return RPZ_INVALID_TRIGGER; + + tldlab = get_tld_label(dname, dname_len); if(!tldlab || !dname_lab_startswith(tldlab, "rpz-", &endptr)) return RPZ_QNAME_TRIGGER; @@ -350,20 +358,21 @@ new_cname_override(struct regional* region, uint8_t* ct, size_t ctlen) return NULL; } pd->rr_len[0] = ctlen+2; - pd->rr_ttl[0] = 3600; /* TODO, what should this be? */ + pd->rr_ttl[0] = 3600; pd->rr_data[0] = regional_alloc_zero(region, 2 /* rdlength */ + ctlen); if(!pd->rr_data[0]) { log_err("out of memory"); return NULL; } - memcpy(pd->rr_data[0], &rdlength, 2); - memcpy(pd->rr_data[0]+2, ct, ctlen); + memmove(pd->rr_data[0], &rdlength, 2); + memmove(pd->rr_data[0]+2, ct, ctlen); rrset->entry.data = pd; rrset->rk.type = htons(LDNS_RR_TYPE_CNAME); rrset->rk.rrset_class = htons(LDNS_RR_CLASS_IN); return rrset; } + struct rpz* rpz_create(struct config_auth* p) { @@ -395,7 +404,7 @@ rpz_create(struct config_auth* p) size_t nmlen = sizeof(nm); if(!p->rpz_cname) { - log_err("RPZ override with cname action found, but not " + log_err("RPZ override with cname action found, but no " "rpz-cname-override configured"); goto err; } @@ -411,8 +420,11 @@ rpz_create(struct config_auth* p) } } r->log = p->rpz_log; - if(p->rpz_log_name) - r->log_name = strdup(p->rpz_log_name); + if(p->rpz_log_name) { + if(!(r->log_name = strdup(p->rpz_log_name))) + log_err("malloc failure on RPZ log_name strdup"); + goto err; + } return r; err: if(r) { @@ -427,16 +439,22 @@ err: return NULL; } -/** Remove RPZ zone name from dname */ +/** + * Remove RPZ zone name from dname + * Copy dname to newdname, without the originlen number of trailing bytes + */ static size_t strip_dname_origin(uint8_t* dname, size_t dnamelen, size_t originlen, - uint8_t* newdname) + uint8_t* newdname, size_t maxnewdnamelen) { size_t newdnamelen; if(dnamelen < originlen) return 0; newdnamelen = dnamelen - originlen; + if(newdnamelen+1 > maxnewdnamelen) + return 0; memmove(newdname, dname, newdnamelen); + memset(newdname+newdnamelen, 0, 1); return newdnamelen + 1; /* + 1 for root label */ } @@ -465,6 +483,13 @@ rpz_insert_qname_trigger(struct rpz* r, uint8_t* dname, size_t dnamelen, LDNS_RR_CLASS_IN); if(z && a != RPZ_LOCAL_DATA_ACTION) { rrstr = sldns_wire2str_rr(rr, rr_len); + if(!rrstr) { + log_err("malloc error while inserting RPZ qname " + "trigger"); + free(dname); + lock_rw_unlock(&r->local_zones->lock); + return; + } verbose(VERB_ALGO, "RPZ: skipping duplicate record: '%s'", rrstr); free(rrstr); @@ -485,6 +510,13 @@ rpz_insert_qname_trigger(struct rpz* r, uint8_t* dname, size_t dnamelen, } if(a == RPZ_LOCAL_DATA_ACTION) { rrstr = sldns_wire2str_rr(rr, rr_len); + if(!rrstr) { + log_err("malloc error while inserting RPZ qname " + "trigger"); + free(dname); + lock_rw_unlock(&r->local_zones->lock); + return; + } local_zone_enter_rr(z, dname, dnamelen, dnamelabs, rrtype, rrclass, ttl, rdata, rdata_len, rrstr); free(rrstr); @@ -520,6 +552,11 @@ rpz_insert_response_ip_trigger(struct rpz* r, uint8_t* dname, lock_rw_wrlock(&r->respip_set->lock); rrstr = sldns_wire2str_rr(rr, rr_len); + if(!rrstr) { + log_err("malloc error while inserting RPZ respip trigger"); + lock_rw_unlock(&r->respip_set->lock); + return 0; + } if(!(node=respip_sockaddr_find_or_create(r->respip_set, &addr, addrlen, net, 1, rrstr))) { lock_rw_unlock(&r->respip_set->lock); @@ -540,24 +577,35 @@ rpz_insert_response_ip_trigger(struct rpz* r, uint8_t* dname, return 1; } -void +int rpz_insert_rr(struct rpz* r, size_t aznamelen, uint8_t* dname, size_t dnamelen, uint16_t rr_type, uint16_t rr_class, uint32_t rr_ttl, uint8_t* rdatawl, size_t rdatalen, uint8_t* rr, size_t rr_len) { size_t policydnamelen; /* name is free'd in local_zone delete */ - uint8_t* policydname = calloc(1, LDNS_MAX_DOMAINLEN + 1); enum rpz_trigger t; enum rpz_action a; - + uint8_t* policydname; + + log_assert(dnamelen >= aznamelen); + if(!(policydname = calloc(1, (dnamelen-aznamelen)+1))) + return 0; + a = rpz_rr_to_action(rr_type, rdatawl, rdatalen); if(!(policydnamelen = strip_dname_origin(dname, dnamelen, aznamelen, - policydname))) { + policydname, (dnamelen-aznamelen)+1))) { free(policydname); - return; + return 0; + } + t = rpz_dname_to_trigger(policydname, policydnamelen); + verbose(VERB_OPS, "RPZ: found trigger: %s", + rpz_trigger_to_string(t)); + if(t == RPZ_INVALID_TRIGGER) { + free(policydname); + verbose(VERB_ALGO, "RPZ: skipping invalid trigger"); + return 1; } - t = rpz_dname_to_trigger(policydname); if(t == RPZ_QNAME_TRIGGER) { rpz_insert_qname_trigger(r, policydname, policydnamelen, a, rr_type, rr_class, rr_ttl, rdatawl, rdatalen, rr, @@ -574,6 +622,7 @@ rpz_insert_rr(struct rpz* r, size_t aznamelen, uint8_t* dname, verbose(VERB_ALGO, "RPZ: skipping unusupported trigger: %s", rpz_trigger_to_string(t)); } + return 1; } /** @@ -595,10 +644,11 @@ rpz_find_zone(struct rpz* r, uint8_t* qname, size_t qname_len, uint16_t qclass, uint8_t wc[LDNS_MAX_DOMAINLEN]; int exact; struct local_zone* z = NULL; - if(wr) + if(wr) { lock_rw_wrlock(&r->local_zones->lock); - else + } else { lock_rw_rdlock(&r->local_zones->lock); + } z = local_zones_find_le(r->local_zones, qname, qname_len, dname_count_labels(qname), LDNS_RR_CLASS_IN, &exact); @@ -606,10 +656,11 @@ rpz_find_zone(struct rpz* r, uint8_t* qname, size_t qname_len, uint16_t qclass, lock_rw_unlock(&r->local_zones->lock); return NULL; } - if(wr) + if(wr) { lock_rw_wrlock(&z->lock); - else + } else { lock_rw_rdlock(&z->lock); + } lock_rw_unlock(&r->local_zones->lock); if(exact) @@ -634,20 +685,22 @@ rpz_find_zone(struct rpz* r, uint8_t* qname, size_t qname_len, uint16_t qclass, memmove(wc+2, ce, ce_len); lock_rw_unlock(&z->lock); - if(wr) + if(wr) { lock_rw_wrlock(&r->local_zones->lock); - else + } else { lock_rw_rdlock(&r->local_zones->lock); + } z = local_zones_find_le(r->local_zones, wc, ce_len+2, ce_labs+1, qclass, &exact); if(!z || !exact) { lock_rw_unlock(&r->local_zones->lock); return NULL; } - if(wr) + if(wr) { lock_rw_wrlock(&z->lock); - else + } else { lock_rw_rdlock(&z->lock); + } lock_rw_unlock(&r->local_zones->lock); return z; } @@ -815,11 +868,11 @@ rpz_remove_rr(struct rpz* r, size_t aznamelen, uint8_t* dname, size_t dnamelen, return; } if(!(policydnamelen = strip_dname_origin(dname, dnamelen, aznamelen, - policydname))) { + policydname, LDNS_MAX_DOMAINLEN + 1))) { free(policydname); return; } - t = rpz_dname_to_trigger(policydname); + t = rpz_dname_to_trigger(policydname, policydnamelen); if(t == RPZ_QNAME_TRIGGER) { rpz_remove_qname_trigger(r, policydname, policydnamelen, a, rr_type, rr_class, rdatawl, rdatalen); diff --git a/services/rpz.h b/services/rpz.h index 80edad822..676a4f2a8 100644 --- a/services/rpz.h +++ b/services/rpz.h @@ -61,6 +61,7 @@ enum rpz_trigger { RPZ_RESPONSE_IP_TRIGGER, /* rpz-ip */ RPZ_NSDNAME_TRIGGER, /* rpz-nsdname */ RPZ_NSIP_TRIGGER, /* rpz-nsip */ + RPZ_INVALID_TRIGGER, /* dname does not contain valid trigger */ }; /** @@ -114,8 +115,9 @@ struct rpz { * @param rdatalen: length if the RR, including the prepended rdata size * @param rr: the complete RR, for logging purposes * @param rr_len: the length of the complete RR + * @return: 0 on error */ -void rpz_insert_rr(struct rpz* r, size_t aznamelen, uint8_t* dname, +int rpz_insert_rr(struct rpz* r, size_t aznamelen, uint8_t* dname, size_t dnamelen, uint16_t rr_type, uint16_t rr_class, uint32_t rr_ttl, uint8_t* rdatawl, size_t rdatalen, uint8_t* rr, size_t rr_len); diff --git a/testdata/rpz_qname.rpl b/testdata/rpz_qname.rpl index 600087ae0..6f93d955a 100644 --- a/testdata/rpz_qname.rpl +++ b/testdata/rpz_qname.rpl @@ -28,7 +28,7 @@ rpz: TEMPFILE_NAME rpz2.example.com TEMPFILE_CONTENTS rpz2.example.com $ORIGIN example.com. -rpz 3600 IN SOA ns1.rpz.example.com. hostmaster.rpz.example.com. ( +rpz2 3600 IN SOA ns1.rpz.example.com. hostmaster.rpz.example.com. ( 1379078166 28800 7200 604800 7200 ) 3600 IN NS ns1.rpz.example.com. 3600 IN NS ns2.rpz.example.com. diff --git a/util/configparser.c b/util/configparser.c index 6e95077f0..b141a052b 100644 --- a/util/configparser.c +++ b/util/configparser.c @@ -1051,40 +1051,40 @@ static const yytype_uint16 yyrline[] = 288, 289, 289, 289, 289, 289, 290, 290, 292, 304, 305, 306, 306, 306, 306, 307, 307, 309, 323, 324, 325, 325, 325, 325, 326, 326, 326, 328, 345, 346, - 347, 347, 347, 347, 348, 348, 348, 349, 352, 372, - 389, 397, 407, 415, 432, 433, 434, 434, 434, 434, - 434, 435, 435, 435, 436, 436, 438, 447, 456, 467, - 476, 485, 494, 505, 514, 525, 538, 553, 564, 581, - 598, 615, 632, 647, 662, 675, 690, 699, 708, 717, - 726, 735, 744, 753, 762, 771, 780, 789, 798, 807, - 820, 829, 842, 851, 860, 869, 876, 883, 892, 899, - 908, 916, 923, 930, 938, 947, 956, 970, 979, 988, - 997, 1006, 1015, 1024, 1031, 1038, 1064, 1072, 1079, 1086, - 1093, 1100, 1108, 1116, 1124, 1131, 1142, 1153, 1160, 1169, - 1178, 1187, 1194, 1201, 1209, 1217, 1227, 1237, 1247, 1255, - 1268, 1279, 1287, 1300, 1309, 1318, 1327, 1337, 1347, 1355, - 1368, 1377, 1385, 1394, 1402, 1415, 1424, 1431, 1441, 1451, - 1461, 1471, 1481, 1491, 1501, 1511, 1518, 1525, 1532, 1541, - 1550, 1559, 1568, 1575, 1585, 1605, 1612, 1630, 1643, 1656, - 1665, 1674, 1683, 1692, 1702, 1712, 1723, 1732, 1741, 1750, - 1759, 1772, 1785, 1794, 1801, 1810, 1819, 1828, 1837, 1845, - 1858, 1866, 1907, 1914, 1929, 1939, 1949, 1956, 1963, 1970, - 1979, 1987, 2001, 2022, 2043, 2055, 2067, 2079, 2088, 2109, - 2119, 2128, 2136, 2144, 2157, 2170, 2185, 2200, 2209, 2218, - 2224, 2233, 2242, 2252, 2262, 2275, 2288, 2300, 2314, 2326, - 2340, 2350, 2357, 2364, 2373, 2382, 2392, 2402, 2412, 2419, - 2426, 2435, 2444, 2454, 2464, 2471, 2478, 2485, 2493, 2503, - 2513, 2523, 2533, 2572, 2582, 2590, 2598, 2613, 2622, 2627, - 2628, 2629, 2629, 2629, 2630, 2630, 2630, 2631, 2631, 2633, - 2643, 2652, 2659, 2666, 2673, 2680, 2687, 2694, 2699, 2700, - 2701, 2701, 2702, 2702, 2703, 2703, 2704, 2705, 2706, 2707, - 2708, 2709, 2711, 2720, 2727, 2736, 2745, 2752, 2759, 2769, - 2779, 2789, 2799, 2809, 2819, 2824, 2825, 2826, 2828, 2834, - 2844, 2851, 2860, 2868, 2873, 2874, 2876, 2876, 2876, 2877, - 2877, 2878, 2879, 2880, 2881, 2882, 2884, 2894, 2903, 2910, - 2919, 2926, 2935, 2943, 2956, 2964, 2977, 2982, 2983, 2984, - 2984, 2985, 2985, 2985, 2987, 3002, 3017, 3029, 3044, 3057, - 3068, 3073, 3074, 3075, 3075, 3077, 3092 + 347, 347, 347, 347, 348, 348, 348, 349, 352, 371, + 388, 396, 406, 414, 431, 432, 433, 433, 433, 433, + 433, 434, 434, 434, 435, 435, 437, 446, 455, 466, + 475, 484, 493, 504, 513, 524, 537, 552, 563, 580, + 597, 614, 631, 646, 661, 674, 689, 698, 707, 716, + 725, 734, 743, 752, 761, 770, 779, 788, 797, 806, + 819, 828, 841, 850, 859, 868, 875, 882, 891, 898, + 907, 915, 922, 929, 937, 946, 955, 969, 978, 987, + 996, 1005, 1014, 1023, 1030, 1037, 1063, 1071, 1078, 1085, + 1092, 1099, 1107, 1115, 1123, 1130, 1141, 1152, 1159, 1168, + 1177, 1186, 1193, 1200, 1208, 1216, 1226, 1236, 1246, 1254, + 1267, 1278, 1286, 1299, 1308, 1317, 1326, 1336, 1346, 1354, + 1367, 1376, 1384, 1393, 1401, 1414, 1423, 1430, 1440, 1450, + 1460, 1470, 1480, 1490, 1500, 1510, 1517, 1524, 1531, 1540, + 1549, 1558, 1567, 1574, 1584, 1604, 1611, 1629, 1642, 1655, + 1664, 1673, 1682, 1691, 1701, 1711, 1722, 1731, 1740, 1749, + 1758, 1771, 1784, 1793, 1800, 1809, 1818, 1827, 1836, 1844, + 1857, 1865, 1906, 1913, 1928, 1938, 1948, 1955, 1962, 1969, + 1978, 1986, 2000, 2021, 2042, 2054, 2066, 2078, 2087, 2108, + 2118, 2127, 2135, 2143, 2156, 2169, 2184, 2199, 2208, 2217, + 2223, 2232, 2241, 2251, 2261, 2274, 2287, 2299, 2313, 2325, + 2339, 2349, 2356, 2363, 2372, 2381, 2391, 2401, 2411, 2418, + 2425, 2434, 2443, 2453, 2463, 2470, 2477, 2484, 2492, 2502, + 2512, 2522, 2532, 2571, 2581, 2589, 2597, 2612, 2621, 2626, + 2627, 2628, 2628, 2628, 2629, 2629, 2629, 2630, 2630, 2632, + 2642, 2651, 2658, 2665, 2672, 2679, 2686, 2693, 2698, 2699, + 2700, 2700, 2701, 2701, 2702, 2702, 2703, 2704, 2705, 2706, + 2707, 2708, 2710, 2719, 2726, 2735, 2744, 2751, 2758, 2768, + 2778, 2788, 2798, 2808, 2818, 2823, 2824, 2825, 2827, 2833, + 2843, 2850, 2859, 2867, 2872, 2873, 2875, 2875, 2875, 2876, + 2876, 2877, 2878, 2879, 2880, 2881, 2883, 2893, 2902, 2909, + 2918, 2925, 2934, 2942, 2955, 2963, 2976, 2981, 2982, 2983, + 2983, 2984, 2984, 2984, 2986, 3001, 3016, 3028, 3043, 3056, + 3067, 3072, 3073, 3074, 3074, 3076, 3091 }; #endif @@ -2717,10 +2717,9 @@ yyreduce: case 248: #line 353 "./util/configparser.y" /* yacc.c:1646 */ { - size_t len; uint8_t* bitlist; + size_t len = 0; OUTYY(("P(server_local_zone_tag:%s)\n", (yyvsp[0].str))); - len = 0; bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), &len); free((yyvsp[0].str)); @@ -2733,18 +2732,18 @@ yyreduce: } } -#line 2737 "util/configparser.c" /* yacc.c:1646 */ +#line 2736 "util/configparser.c" /* yacc.c:1646 */ break; case 249: -#line 373 "./util/configparser.y" /* yacc.c:1646 */ +#line 372 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(rpz_action_override:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "nxdomain")!=0 && strcmp((yyvsp[0].str), "nodata")!=0 && strcmp((yyvsp[0].str), "passthru")!=0 && strcmp((yyvsp[0].str), "drop")!=0 && strcmp((yyvsp[0].str), "cname")!=0 && strcmp((yyvsp[0].str), "disabled")!=0) { yyerror("rpz-action-override action: expected nxdomain, " - "nodata, passthru, drop cname or disabled"); + "nodata, passthru, drop, cname or disabled"); free((yyvsp[0].str)); cfg_parser->cfg->auths->rpz_action_override = NULL; } @@ -2752,21 +2751,21 @@ yyreduce: cfg_parser->cfg->auths->rpz_action_override = (yyvsp[0].str); } } -#line 2756 "util/configparser.c" /* yacc.c:1646 */ +#line 2755 "util/configparser.c" /* yacc.c:1646 */ break; case 250: -#line 390 "./util/configparser.y" /* yacc.c:1646 */ +#line 389 "./util/configparser.y" /* yacc.c:1646 */ { 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 2766 "util/configparser.c" /* yacc.c:1646 */ +#line 2765 "util/configparser.c" /* yacc.c:1646 */ break; case 251: -#line 398 "./util/configparser.y" /* yacc.c:1646 */ +#line 397 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(rpz_log:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2774,21 +2773,21 @@ yyreduce: else cfg_parser->cfg->auths->rpz_log = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2778 "util/configparser.c" /* yacc.c:1646 */ +#line 2777 "util/configparser.c" /* yacc.c:1646 */ break; case 252: -#line 408 "./util/configparser.y" /* yacc.c:1646 */ +#line 407 "./util/configparser.y" /* yacc.c:1646 */ { 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 2788 "util/configparser.c" /* yacc.c:1646 */ +#line 2787 "util/configparser.c" /* yacc.c:1646 */ break; case 253: -#line 416 "./util/configparser.y" /* yacc.c:1646 */ +#line 415 "./util/configparser.y" /* yacc.c:1646 */ { struct config_auth* s; OUTYY(("\nP(rpz:)\n")); @@ -2804,11 +2803,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 2808 "util/configparser.c" /* yacc.c:1646 */ +#line 2807 "util/configparser.c" /* yacc.c:1646 */ break; case 266: -#line 439 "./util/configparser.y" /* yacc.c:1646 */ +#line 438 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_num_threads:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -2816,11 +2815,11 @@ yyreduce: else cfg_parser->cfg->num_threads = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2820 "util/configparser.c" /* yacc.c:1646 */ +#line 2819 "util/configparser.c" /* yacc.c:1646 */ break; case 267: -#line 448 "./util/configparser.y" /* yacc.c:1646 */ +#line 447 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_verbosity:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -2828,11 +2827,11 @@ yyreduce: else cfg_parser->cfg->verbosity = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2832 "util/configparser.c" /* yacc.c:1646 */ +#line 2831 "util/configparser.c" /* yacc.c:1646 */ break; case 268: -#line 457 "./util/configparser.y" /* yacc.c:1646 */ +#line 456 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_statistics_interval:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "") == 0 || strcmp((yyvsp[0].str), "0") == 0) @@ -2842,11 +2841,11 @@ yyreduce: else cfg_parser->cfg->stat_interval = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2846 "util/configparser.c" /* yacc.c:1646 */ +#line 2845 "util/configparser.c" /* yacc.c:1646 */ break; case 269: -#line 468 "./util/configparser.y" /* yacc.c:1646 */ +#line 467 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_statistics_cumulative:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2854,11 +2853,11 @@ yyreduce: else cfg_parser->cfg->stat_cumulative = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2858 "util/configparser.c" /* yacc.c:1646 */ +#line 2857 "util/configparser.c" /* yacc.c:1646 */ break; case 270: -#line 477 "./util/configparser.y" /* yacc.c:1646 */ +#line 476 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_extended_statistics:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2866,11 +2865,11 @@ yyreduce: else cfg_parser->cfg->stat_extended = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2870 "util/configparser.c" /* yacc.c:1646 */ +#line 2869 "util/configparser.c" /* yacc.c:1646 */ break; case 271: -#line 486 "./util/configparser.y" /* yacc.c:1646 */ +#line 485 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_shm_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2878,11 +2877,11 @@ yyreduce: else cfg_parser->cfg->shm_enable = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2882 "util/configparser.c" /* yacc.c:1646 */ +#line 2881 "util/configparser.c" /* yacc.c:1646 */ break; case 272: -#line 495 "./util/configparser.y" /* yacc.c:1646 */ +#line 494 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_shm_key:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "") == 0 || strcmp((yyvsp[0].str), "0") == 0) @@ -2892,11 +2891,11 @@ yyreduce: else cfg_parser->cfg->shm_key = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2896 "util/configparser.c" /* yacc.c:1646 */ +#line 2895 "util/configparser.c" /* yacc.c:1646 */ break; case 273: -#line 506 "./util/configparser.y" /* yacc.c:1646 */ +#line 505 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -2904,11 +2903,11 @@ yyreduce: else cfg_parser->cfg->port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2908 "util/configparser.c" /* yacc.c:1646 */ +#line 2907 "util/configparser.c" /* yacc.c:1646 */ break; case 274: -#line 515 "./util/configparser.y" /* yacc.c:1646 */ +#line 514 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(server_send_client_subnet:%s)\n", (yyvsp[0].str))); @@ -2918,11 +2917,11 @@ yyreduce: OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); #endif } -#line 2922 "util/configparser.c" /* yacc.c:1646 */ +#line 2921 "util/configparser.c" /* yacc.c:1646 */ break; case 275: -#line 526 "./util/configparser.y" /* yacc.c:1646 */ +#line 525 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(server_client_subnet_zone:%s)\n", (yyvsp[0].str))); @@ -2933,11 +2932,11 @@ yyreduce: OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); #endif } -#line 2937 "util/configparser.c" /* yacc.c:1646 */ +#line 2936 "util/configparser.c" /* yacc.c:1646 */ break; case 276: -#line 539 "./util/configparser.y" /* yacc.c:1646 */ +#line 538 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(server_client_subnet_always_forward:%s)\n", (yyvsp[0].str))); @@ -2951,11 +2950,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 2955 "util/configparser.c" /* yacc.c:1646 */ +#line 2954 "util/configparser.c" /* yacc.c:1646 */ break; case 277: -#line 554 "./util/configparser.y" /* yacc.c:1646 */ +#line 553 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(client_subnet_opcode:%s)\n", (yyvsp[0].str))); @@ -2965,11 +2964,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 2969 "util/configparser.c" /* yacc.c:1646 */ +#line 2968 "util/configparser.c" /* yacc.c:1646 */ break; case 278: -#line 565 "./util/configparser.y" /* yacc.c:1646 */ +#line 564 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(max_client_subnet_ipv4:%s)\n", (yyvsp[0].str))); @@ -2985,11 +2984,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 2989 "util/configparser.c" /* yacc.c:1646 */ +#line 2988 "util/configparser.c" /* yacc.c:1646 */ break; case 279: -#line 582 "./util/configparser.y" /* yacc.c:1646 */ +#line 581 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(max_client_subnet_ipv6:%s)\n", (yyvsp[0].str))); @@ -3005,11 +3004,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3009 "util/configparser.c" /* yacc.c:1646 */ +#line 3008 "util/configparser.c" /* yacc.c:1646 */ break; case 280: -#line 599 "./util/configparser.y" /* yacc.c:1646 */ +#line 598 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(min_client_subnet_ipv4:%s)\n", (yyvsp[0].str))); @@ -3025,11 +3024,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3029 "util/configparser.c" /* yacc.c:1646 */ +#line 3028 "util/configparser.c" /* yacc.c:1646 */ break; case 281: -#line 616 "./util/configparser.y" /* yacc.c:1646 */ +#line 615 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(min_client_subnet_ipv6:%s)\n", (yyvsp[0].str))); @@ -3045,11 +3044,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3049 "util/configparser.c" /* yacc.c:1646 */ +#line 3048 "util/configparser.c" /* yacc.c:1646 */ break; case 282: -#line 633 "./util/configparser.y" /* yacc.c:1646 */ +#line 632 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(max_ecs_tree_size_ipv4:%s)\n", (yyvsp[0].str))); @@ -3063,11 +3062,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3067 "util/configparser.c" /* yacc.c:1646 */ +#line 3066 "util/configparser.c" /* yacc.c:1646 */ break; case 283: -#line 648 "./util/configparser.y" /* yacc.c:1646 */ +#line 647 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(max_ecs_tree_size_ipv6:%s)\n", (yyvsp[0].str))); @@ -3081,11 +3080,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3085 "util/configparser.c" /* yacc.c:1646 */ +#line 3084 "util/configparser.c" /* yacc.c:1646 */ break; case 284: -#line 663 "./util/configparser.y" /* yacc.c:1646 */ +#line 662 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_interface:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->num_ifs == 0) @@ -3097,11 +3096,11 @@ yyreduce: else cfg_parser->cfg->ifs[cfg_parser->cfg->num_ifs++] = (yyvsp[0].str); } -#line 3101 "util/configparser.c" /* yacc.c:1646 */ +#line 3100 "util/configparser.c" /* yacc.c:1646 */ break; case 285: -#line 676 "./util/configparser.y" /* yacc.c:1646 */ +#line 675 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_interface:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->num_out_ifs == 0) @@ -3115,11 +3114,11 @@ yyreduce: cfg_parser->cfg->out_ifs[ cfg_parser->cfg->num_out_ifs++] = (yyvsp[0].str); } -#line 3119 "util/configparser.c" /* yacc.c:1646 */ +#line 3118 "util/configparser.c" /* yacc.c:1646 */ break; case 286: -#line 691 "./util/configparser.y" /* yacc.c:1646 */ +#line 690 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_range:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3127,11 +3126,11 @@ yyreduce: else cfg_parser->cfg->outgoing_num_ports = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3131 "util/configparser.c" /* yacc.c:1646 */ +#line 3130 "util/configparser.c" /* yacc.c:1646 */ break; case 287: -#line 700 "./util/configparser.y" /* yacc.c:1646 */ +#line 699 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_port_permit:%s)\n", (yyvsp[0].str))); if(!cfg_mark_ports((yyvsp[0].str), 1, @@ -3139,11 +3138,11 @@ yyreduce: yyerror("port number or range (\"low-high\") expected"); free((yyvsp[0].str)); } -#line 3143 "util/configparser.c" /* yacc.c:1646 */ +#line 3142 "util/configparser.c" /* yacc.c:1646 */ break; case 288: -#line 709 "./util/configparser.y" /* yacc.c:1646 */ +#line 708 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_port_avoid:%s)\n", (yyvsp[0].str))); if(!cfg_mark_ports((yyvsp[0].str), 0, @@ -3151,11 +3150,11 @@ yyreduce: yyerror("port number or range (\"low-high\") expected"); free((yyvsp[0].str)); } -#line 3155 "util/configparser.c" /* yacc.c:1646 */ +#line 3154 "util/configparser.c" /* yacc.c:1646 */ break; case 289: -#line 718 "./util/configparser.y" /* yacc.c:1646 */ +#line 717 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_num_tcp:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3163,11 +3162,11 @@ yyreduce: else cfg_parser->cfg->outgoing_num_tcp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3167 "util/configparser.c" /* yacc.c:1646 */ +#line 3166 "util/configparser.c" /* yacc.c:1646 */ break; case 290: -#line 727 "./util/configparser.y" /* yacc.c:1646 */ +#line 726 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_incoming_num_tcp:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3175,11 +3174,11 @@ yyreduce: else cfg_parser->cfg->incoming_num_tcp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3179 "util/configparser.c" /* yacc.c:1646 */ +#line 3178 "util/configparser.c" /* yacc.c:1646 */ break; case 291: -#line 736 "./util/configparser.y" /* yacc.c:1646 */ +#line 735 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_interface_automatic:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3187,11 +3186,11 @@ yyreduce: else cfg_parser->cfg->if_automatic = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3191 "util/configparser.c" /* yacc.c:1646 */ +#line 3190 "util/configparser.c" /* yacc.c:1646 */ break; case 292: -#line 745 "./util/configparser.y" /* yacc.c:1646 */ +#line 744 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_ip4:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3199,11 +3198,11 @@ yyreduce: else cfg_parser->cfg->do_ip4 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3203 "util/configparser.c" /* yacc.c:1646 */ +#line 3202 "util/configparser.c" /* yacc.c:1646 */ break; case 293: -#line 754 "./util/configparser.y" /* yacc.c:1646 */ +#line 753 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_ip6:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3211,11 +3210,11 @@ yyreduce: else cfg_parser->cfg->do_ip6 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3215 "util/configparser.c" /* yacc.c:1646 */ +#line 3214 "util/configparser.c" /* yacc.c:1646 */ break; case 294: -#line 763 "./util/configparser.y" /* yacc.c:1646 */ +#line 762 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_udp:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3223,11 +3222,11 @@ yyreduce: else cfg_parser->cfg->do_udp = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3227 "util/configparser.c" /* yacc.c:1646 */ +#line 3226 "util/configparser.c" /* yacc.c:1646 */ break; case 295: -#line 772 "./util/configparser.y" /* yacc.c:1646 */ +#line 771 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_tcp:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3235,11 +3234,11 @@ yyreduce: else cfg_parser->cfg->do_tcp = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3239 "util/configparser.c" /* yacc.c:1646 */ +#line 3238 "util/configparser.c" /* yacc.c:1646 */ break; case 296: -#line 781 "./util/configparser.y" /* yacc.c:1646 */ +#line 780 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_prefer_ip6:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3247,11 +3246,11 @@ yyreduce: else cfg_parser->cfg->prefer_ip6 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3251 "util/configparser.c" /* yacc.c:1646 */ +#line 3250 "util/configparser.c" /* yacc.c:1646 */ break; case 297: -#line 790 "./util/configparser.y" /* yacc.c:1646 */ +#line 789 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tcp_mss:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3259,11 +3258,11 @@ yyreduce: else cfg_parser->cfg->tcp_mss = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3263 "util/configparser.c" /* yacc.c:1646 */ +#line 3262 "util/configparser.c" /* yacc.c:1646 */ break; case 298: -#line 799 "./util/configparser.y" /* yacc.c:1646 */ +#line 798 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_tcp_mss:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3271,11 +3270,11 @@ yyreduce: else cfg_parser->cfg->outgoing_tcp_mss = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3275 "util/configparser.c" /* yacc.c:1646 */ +#line 3274 "util/configparser.c" /* yacc.c:1646 */ break; case 299: -#line 808 "./util/configparser.y" /* yacc.c:1646 */ +#line 807 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tcp_idle_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3287,11 +3286,11 @@ yyreduce: else cfg_parser->cfg->tcp_idle_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3291 "util/configparser.c" /* yacc.c:1646 */ +#line 3290 "util/configparser.c" /* yacc.c:1646 */ break; case 300: -#line 821 "./util/configparser.y" /* yacc.c:1646 */ +#line 820 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tcp_keepalive:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3299,11 +3298,11 @@ yyreduce: else cfg_parser->cfg->do_tcp_keepalive = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3303 "util/configparser.c" /* yacc.c:1646 */ +#line 3302 "util/configparser.c" /* yacc.c:1646 */ break; case 301: -#line 830 "./util/configparser.y" /* yacc.c:1646 */ +#line 829 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tcp_keepalive_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3315,11 +3314,11 @@ yyreduce: else cfg_parser->cfg->tcp_keepalive_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3319 "util/configparser.c" /* yacc.c:1646 */ +#line 3318 "util/configparser.c" /* yacc.c:1646 */ break; case 302: -#line 843 "./util/configparser.y" /* yacc.c:1646 */ +#line 842 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tcp_upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3327,11 +3326,11 @@ yyreduce: else cfg_parser->cfg->tcp_upstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3331 "util/configparser.c" /* yacc.c:1646 */ +#line 3330 "util/configparser.c" /* yacc.c:1646 */ break; case 303: -#line 852 "./util/configparser.y" /* yacc.c:1646 */ +#line 851 "./util/configparser.y" /* yacc.c:1646 */ { 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) @@ -3339,11 +3338,11 @@ yyreduce: else cfg_parser->cfg->udp_upstream_without_downstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3343 "util/configparser.c" /* yacc.c:1646 */ +#line 3342 "util/configparser.c" /* yacc.c:1646 */ break; case 304: -#line 861 "./util/configparser.y" /* yacc.c:1646 */ +#line 860 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ssl_upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3351,31 +3350,31 @@ yyreduce: else cfg_parser->cfg->ssl_upstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3355 "util/configparser.c" /* yacc.c:1646 */ +#line 3354 "util/configparser.c" /* yacc.c:1646 */ break; case 305: -#line 870 "./util/configparser.y" /* yacc.c:1646 */ +#line 869 "./util/configparser.y" /* yacc.c:1646 */ { 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 3365 "util/configparser.c" /* yacc.c:1646 */ +#line 3364 "util/configparser.c" /* yacc.c:1646 */ break; case 306: -#line 877 "./util/configparser.y" /* yacc.c:1646 */ +#line 876 "./util/configparser.y" /* yacc.c:1646 */ { 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 3375 "util/configparser.c" /* yacc.c:1646 */ +#line 3374 "util/configparser.c" /* yacc.c:1646 */ break; case 307: -#line 884 "./util/configparser.y" /* yacc.c:1646 */ +#line 883 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ssl_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3383,21 +3382,21 @@ yyreduce: else cfg_parser->cfg->ssl_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3387 "util/configparser.c" /* yacc.c:1646 */ +#line 3386 "util/configparser.c" /* yacc.c:1646 */ break; case 308: -#line 893 "./util/configparser.y" /* yacc.c:1646 */ +#line 892 "./util/configparser.y" /* yacc.c:1646 */ { 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 3397 "util/configparser.c" /* yacc.c:1646 */ +#line 3396 "util/configparser.c" /* yacc.c:1646 */ break; case 309: -#line 900 "./util/configparser.y" /* yacc.c:1646 */ +#line 899 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tls_win_cert:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3405,53 +3404,53 @@ yyreduce: else cfg_parser->cfg->tls_win_cert = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3409 "util/configparser.c" /* yacc.c:1646 */ +#line 3408 "util/configparser.c" /* yacc.c:1646 */ break; case 310: -#line 909 "./util/configparser.y" /* yacc.c:1646 */ +#line 908 "./util/configparser.y" /* yacc.c:1646 */ { 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 3420 "util/configparser.c" /* yacc.c:1646 */ +#line 3419 "util/configparser.c" /* yacc.c:1646 */ break; case 311: -#line 917 "./util/configparser.y" /* yacc.c:1646 */ +#line 916 "./util/configparser.y" /* yacc.c:1646 */ { 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 3430 "util/configparser.c" /* yacc.c:1646 */ +#line 3429 "util/configparser.c" /* yacc.c:1646 */ break; case 312: -#line 924 "./util/configparser.y" /* yacc.c:1646 */ +#line 923 "./util/configparser.y" /* yacc.c:1646 */ { 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 3440 "util/configparser.c" /* yacc.c:1646 */ +#line 3439 "util/configparser.c" /* yacc.c:1646 */ break; case 313: -#line 931 "./util/configparser.y" /* yacc.c:1646 */ +#line 930 "./util/configparser.y" /* yacc.c:1646 */ { 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 3451 "util/configparser.c" /* yacc.c:1646 */ +#line 3450 "util/configparser.c" /* yacc.c:1646 */ break; case 314: -#line 939 "./util/configparser.y" /* yacc.c:1646 */ +#line 938 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_use_systemd:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3459,11 +3458,11 @@ yyreduce: else cfg_parser->cfg->use_systemd = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3463 "util/configparser.c" /* yacc.c:1646 */ +#line 3462 "util/configparser.c" /* yacc.c:1646 */ break; case 315: -#line 948 "./util/configparser.y" /* yacc.c:1646 */ +#line 947 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_daemonize:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3471,11 +3470,11 @@ yyreduce: else cfg_parser->cfg->do_daemonize = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3475 "util/configparser.c" /* yacc.c:1646 */ +#line 3474 "util/configparser.c" /* yacc.c:1646 */ break; case 316: -#line 957 "./util/configparser.y" /* yacc.c:1646 */ +#line 956 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_use_syslog:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3488,11 +3487,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3492 "util/configparser.c" /* yacc.c:1646 */ +#line 3491 "util/configparser.c" /* yacc.c:1646 */ break; case 317: -#line 971 "./util/configparser.y" /* yacc.c:1646 */ +#line 970 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_time_ascii:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3500,11 +3499,11 @@ yyreduce: else cfg_parser->cfg->log_time_ascii = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3504 "util/configparser.c" /* yacc.c:1646 */ +#line 3503 "util/configparser.c" /* yacc.c:1646 */ break; case 318: -#line 980 "./util/configparser.y" /* yacc.c:1646 */ +#line 979 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_queries:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3512,11 +3511,11 @@ yyreduce: else cfg_parser->cfg->log_queries = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3516 "util/configparser.c" /* yacc.c:1646 */ +#line 3515 "util/configparser.c" /* yacc.c:1646 */ break; case 319: -#line 989 "./util/configparser.y" /* yacc.c:1646 */ +#line 988 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_replies:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3524,11 +3523,11 @@ yyreduce: else cfg_parser->cfg->log_replies = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3528 "util/configparser.c" /* yacc.c:1646 */ +#line 3527 "util/configparser.c" /* yacc.c:1646 */ break; case 320: -#line 998 "./util/configparser.y" /* yacc.c:1646 */ +#line 997 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_tag_queryreply:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3536,11 +3535,11 @@ yyreduce: else cfg_parser->cfg->log_tag_queryreply = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3540 "util/configparser.c" /* yacc.c:1646 */ +#line 3539 "util/configparser.c" /* yacc.c:1646 */ break; case 321: -#line 1007 "./util/configparser.y" /* yacc.c:1646 */ +#line 1006 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_servfail:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3548,11 +3547,11 @@ yyreduce: else cfg_parser->cfg->log_servfail = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3552 "util/configparser.c" /* yacc.c:1646 */ +#line 3551 "util/configparser.c" /* yacc.c:1646 */ break; case 322: -#line 1016 "./util/configparser.y" /* yacc.c:1646 */ +#line 1015 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_local_actions:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3560,31 +3559,31 @@ yyreduce: else cfg_parser->cfg->log_local_actions = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3564 "util/configparser.c" /* yacc.c:1646 */ +#line 3563 "util/configparser.c" /* yacc.c:1646 */ break; case 323: -#line 1025 "./util/configparser.y" /* yacc.c:1646 */ +#line 1024 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_chroot:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->chrootdir); cfg_parser->cfg->chrootdir = (yyvsp[0].str); } -#line 3574 "util/configparser.c" /* yacc.c:1646 */ +#line 3573 "util/configparser.c" /* yacc.c:1646 */ break; case 324: -#line 1032 "./util/configparser.y" /* yacc.c:1646 */ +#line 1031 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_username:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->username); cfg_parser->cfg->username = (yyvsp[0].str); } -#line 3584 "util/configparser.c" /* yacc.c:1646 */ +#line 3583 "util/configparser.c" /* yacc.c:1646 */ break; case 325: -#line 1039 "./util/configparser.y" /* yacc.c:1646 */ +#line 1038 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_directory:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->directory); @@ -3609,105 +3608,105 @@ yyreduce: } } } -#line 3613 "util/configparser.c" /* yacc.c:1646 */ +#line 3612 "util/configparser.c" /* yacc.c:1646 */ break; case 326: -#line 1065 "./util/configparser.y" /* yacc.c:1646 */ +#line 1064 "./util/configparser.y" /* yacc.c:1646 */ { 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 3624 "util/configparser.c" /* yacc.c:1646 */ +#line 3623 "util/configparser.c" /* yacc.c:1646 */ break; case 327: -#line 1073 "./util/configparser.y" /* yacc.c:1646 */ +#line 1072 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_pidfile:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->pidfile); cfg_parser->cfg->pidfile = (yyvsp[0].str); } -#line 3634 "util/configparser.c" /* yacc.c:1646 */ +#line 3633 "util/configparser.c" /* yacc.c:1646 */ break; case 328: -#line 1080 "./util/configparser.y" /* yacc.c:1646 */ +#line 1079 "./util/configparser.y" /* yacc.c:1646 */ { 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 3644 "util/configparser.c" /* yacc.c:1646 */ +#line 3643 "util/configparser.c" /* yacc.c:1646 */ break; case 329: -#line 1087 "./util/configparser.y" /* yacc.c:1646 */ +#line 1086 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_dlv_anchor_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dlv_anchor_file); cfg_parser->cfg->dlv_anchor_file = (yyvsp[0].str); } -#line 3654 "util/configparser.c" /* yacc.c:1646 */ +#line 3653 "util/configparser.c" /* yacc.c:1646 */ break; case 330: -#line 1094 "./util/configparser.y" /* yacc.c:1646 */ +#line 1093 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_dlv_anchor:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->dlv_anchor_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3664 "util/configparser.c" /* yacc.c:1646 */ +#line 3663 "util/configparser.c" /* yacc.c:1646 */ break; case 331: -#line 1101 "./util/configparser.y" /* yacc.c:1646 */ +#line 1100 "./util/configparser.y" /* yacc.c:1646 */ { 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 3675 "util/configparser.c" /* yacc.c:1646 */ +#line 3674 "util/configparser.c" /* yacc.c:1646 */ break; case 332: -#line 1109 "./util/configparser.y" /* yacc.c:1646 */ +#line 1108 "./util/configparser.y" /* yacc.c:1646 */ { 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 3686 "util/configparser.c" /* yacc.c:1646 */ +#line 3685 "util/configparser.c" /* yacc.c:1646 */ break; case 333: -#line 1117 "./util/configparser.y" /* yacc.c:1646 */ +#line 1116 "./util/configparser.y" /* yacc.c:1646 */ { 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 3697 "util/configparser.c" /* yacc.c:1646 */ +#line 3696 "util/configparser.c" /* yacc.c:1646 */ break; case 334: -#line 1125 "./util/configparser.y" /* yacc.c:1646 */ +#line 1124 "./util/configparser.y" /* yacc.c:1646 */ { 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 3707 "util/configparser.c" /* yacc.c:1646 */ +#line 3706 "util/configparser.c" /* yacc.c:1646 */ break; case 335: -#line 1132 "./util/configparser.y" /* yacc.c:1646 */ +#line 1131 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_trust_anchor_signaling:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3717,11 +3716,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3721 "util/configparser.c" /* yacc.c:1646 */ +#line 3720 "util/configparser.c" /* yacc.c:1646 */ break; case 336: -#line 1143 "./util/configparser.y" /* yacc.c:1646 */ +#line 1142 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_root_key_sentinel:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3731,21 +3730,21 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3735 "util/configparser.c" /* yacc.c:1646 */ +#line 3734 "util/configparser.c" /* yacc.c:1646 */ break; case 337: -#line 1154 "./util/configparser.y" /* yacc.c:1646 */ +#line 1153 "./util/configparser.y" /* yacc.c:1646 */ { 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 3745 "util/configparser.c" /* yacc.c:1646 */ +#line 3744 "util/configparser.c" /* yacc.c:1646 */ break; case 338: -#line 1161 "./util/configparser.y" /* yacc.c:1646 */ +#line 1160 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_hide_identity:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3753,11 +3752,11 @@ yyreduce: else cfg_parser->cfg->hide_identity = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3757 "util/configparser.c" /* yacc.c:1646 */ +#line 3756 "util/configparser.c" /* yacc.c:1646 */ break; case 339: -#line 1170 "./util/configparser.y" /* yacc.c:1646 */ +#line 1169 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_hide_version:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3765,11 +3764,11 @@ yyreduce: else cfg_parser->cfg->hide_version = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3769 "util/configparser.c" /* yacc.c:1646 */ +#line 3768 "util/configparser.c" /* yacc.c:1646 */ break; case 340: -#line 1179 "./util/configparser.y" /* yacc.c:1646 */ +#line 1178 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_hide_trustanchor:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3777,53 +3776,53 @@ yyreduce: else cfg_parser->cfg->hide_trustanchor = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3781 "util/configparser.c" /* yacc.c:1646 */ +#line 3780 "util/configparser.c" /* yacc.c:1646 */ break; case 341: -#line 1188 "./util/configparser.y" /* yacc.c:1646 */ +#line 1187 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_identity:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->identity); cfg_parser->cfg->identity = (yyvsp[0].str); } -#line 3791 "util/configparser.c" /* yacc.c:1646 */ +#line 3790 "util/configparser.c" /* yacc.c:1646 */ break; case 342: -#line 1195 "./util/configparser.y" /* yacc.c:1646 */ +#line 1194 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_version:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->version); cfg_parser->cfg->version = (yyvsp[0].str); } -#line 3801 "util/configparser.c" /* yacc.c:1646 */ +#line 3800 "util/configparser.c" /* yacc.c:1646 */ break; case 343: -#line 1202 "./util/configparser.y" /* yacc.c:1646 */ +#line 1201 "./util/configparser.y" /* yacc.c:1646 */ { 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 3812 "util/configparser.c" /* yacc.c:1646 */ +#line 3811 "util/configparser.c" /* yacc.c:1646 */ break; case 344: -#line 1210 "./util/configparser.y" /* yacc.c:1646 */ +#line 1209 "./util/configparser.y" /* yacc.c:1646 */ { 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 3823 "util/configparser.c" /* yacc.c:1646 */ +#line 3822 "util/configparser.c" /* yacc.c:1646 */ break; case 345: -#line 1218 "./util/configparser.y" /* yacc.c:1646 */ +#line 1217 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_so_reuseport:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3832,11 +3831,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3836 "util/configparser.c" /* yacc.c:1646 */ +#line 3835 "util/configparser.c" /* yacc.c:1646 */ break; case 346: -#line 1228 "./util/configparser.y" /* yacc.c:1646 */ +#line 1227 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_transparent:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3845,11 +3844,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3849 "util/configparser.c" /* yacc.c:1646 */ +#line 3848 "util/configparser.c" /* yacc.c:1646 */ break; case 347: -#line 1238 "./util/configparser.y" /* yacc.c:1646 */ +#line 1237 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_freebind:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3858,22 +3857,22 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3862 "util/configparser.c" /* yacc.c:1646 */ +#line 3861 "util/configparser.c" /* yacc.c:1646 */ break; case 348: -#line 1248 "./util/configparser.y" /* yacc.c:1646 */ +#line 1247 "./util/configparser.y" /* yacc.c:1646 */ { 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 3873 "util/configparser.c" /* yacc.c:1646 */ +#line 3872 "util/configparser.c" /* yacc.c:1646 */ break; case 349: -#line 1256 "./util/configparser.y" /* yacc.c:1646 */ +#line 1255 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_edns_buffer_size:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3885,11 +3884,11 @@ yyreduce: else cfg_parser->cfg->edns_buffer_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3889 "util/configparser.c" /* yacc.c:1646 */ +#line 3888 "util/configparser.c" /* yacc.c:1646 */ break; case 350: -#line 1269 "./util/configparser.y" /* yacc.c:1646 */ +#line 1268 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_msg_buffer_size:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3899,22 +3898,22 @@ yyreduce: else cfg_parser->cfg->msg_buffer_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3903 "util/configparser.c" /* yacc.c:1646 */ +#line 3902 "util/configparser.c" /* yacc.c:1646 */ break; case 351: -#line 1280 "./util/configparser.y" /* yacc.c:1646 */ +#line 1279 "./util/configparser.y" /* yacc.c:1646 */ { 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 3914 "util/configparser.c" /* yacc.c:1646 */ +#line 3913 "util/configparser.c" /* yacc.c:1646 */ break; case 352: -#line 1288 "./util/configparser.y" /* yacc.c:1646 */ +#line 1287 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_msg_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3926,11 +3925,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 3930 "util/configparser.c" /* yacc.c:1646 */ +#line 3929 "util/configparser.c" /* yacc.c:1646 */ break; case 353: -#line 1301 "./util/configparser.y" /* yacc.c:1646 */ +#line 1300 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_num_queries_per_thread:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3938,11 +3937,11 @@ yyreduce: else cfg_parser->cfg->num_queries_per_thread = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3942 "util/configparser.c" /* yacc.c:1646 */ +#line 3941 "util/configparser.c" /* yacc.c:1646 */ break; case 354: -#line 1310 "./util/configparser.y" /* yacc.c:1646 */ +#line 1309 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_jostle_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3950,11 +3949,11 @@ yyreduce: else cfg_parser->cfg->jostle_time = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3954 "util/configparser.c" /* yacc.c:1646 */ +#line 3953 "util/configparser.c" /* yacc.c:1646 */ break; case 355: -#line 1319 "./util/configparser.y" /* yacc.c:1646 */ +#line 1318 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_delay_close:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3962,11 +3961,11 @@ yyreduce: else cfg_parser->cfg->delay_close = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3966 "util/configparser.c" /* yacc.c:1646 */ +#line 3965 "util/configparser.c" /* yacc.c:1646 */ break; case 356: -#line 1328 "./util/configparser.y" /* yacc.c:1646 */ +#line 1327 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_unblock_lan_zones:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3975,11 +3974,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3979 "util/configparser.c" /* yacc.c:1646 */ +#line 3978 "util/configparser.c" /* yacc.c:1646 */ break; case 357: -#line 1338 "./util/configparser.y" /* yacc.c:1646 */ +#line 1337 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_insecure_lan_zones:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3988,22 +3987,22 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3992 "util/configparser.c" /* yacc.c:1646 */ +#line 3991 "util/configparser.c" /* yacc.c:1646 */ break; case 358: -#line 1348 "./util/configparser.y" /* yacc.c:1646 */ +#line 1347 "./util/configparser.y" /* yacc.c:1646 */ { 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 4003 "util/configparser.c" /* yacc.c:1646 */ +#line 4002 "util/configparser.c" /* yacc.c:1646 */ break; case 359: -#line 1356 "./util/configparser.y" /* yacc.c:1646 */ +#line 1355 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_rrset_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4015,11 +4014,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4019 "util/configparser.c" /* yacc.c:1646 */ +#line 4018 "util/configparser.c" /* yacc.c:1646 */ break; case 360: -#line 1369 "./util/configparser.y" /* yacc.c:1646 */ +#line 1368 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_host_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4027,22 +4026,22 @@ yyreduce: else cfg_parser->cfg->host_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4031 "util/configparser.c" /* yacc.c:1646 */ +#line 4030 "util/configparser.c" /* yacc.c:1646 */ break; case 361: -#line 1378 "./util/configparser.y" /* yacc.c:1646 */ +#line 1377 "./util/configparser.y" /* yacc.c:1646 */ { 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 4042 "util/configparser.c" /* yacc.c:1646 */ +#line 4041 "util/configparser.c" /* yacc.c:1646 */ break; case 362: -#line 1386 "./util/configparser.y" /* yacc.c:1646 */ +#line 1385 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_cache_numhosts:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4050,22 +4049,22 @@ yyreduce: else cfg_parser->cfg->infra_cache_numhosts = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4054 "util/configparser.c" /* yacc.c:1646 */ +#line 4053 "util/configparser.c" /* yacc.c:1646 */ break; case 363: -#line 1395 "./util/configparser.y" /* yacc.c:1646 */ +#line 1394 "./util/configparser.y" /* yacc.c:1646 */ { 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 4065 "util/configparser.c" /* yacc.c:1646 */ +#line 4064 "util/configparser.c" /* yacc.c:1646 */ break; case 364: -#line 1403 "./util/configparser.y" /* yacc.c:1646 */ +#line 1402 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4077,11 +4076,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4081 "util/configparser.c" /* yacc.c:1646 */ +#line 4080 "util/configparser.c" /* yacc.c:1646 */ break; case 365: -#line 1416 "./util/configparser.y" /* yacc.c:1646 */ +#line 1415 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_cache_min_rtt:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4089,21 +4088,21 @@ yyreduce: else cfg_parser->cfg->infra_cache_min_rtt = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4093 "util/configparser.c" /* yacc.c:1646 */ +#line 4092 "util/configparser.c" /* yacc.c:1646 */ break; case 366: -#line 1425 "./util/configparser.y" /* yacc.c:1646 */ +#line 1424 "./util/configparser.y" /* yacc.c:1646 */ { 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 4103 "util/configparser.c" /* yacc.c:1646 */ +#line 4102 "util/configparser.c" /* yacc.c:1646 */ break; case 367: -#line 1432 "./util/configparser.y" /* yacc.c:1646 */ +#line 1431 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_short_bufsize:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4112,11 +4111,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4116 "util/configparser.c" /* yacc.c:1646 */ +#line 4115 "util/configparser.c" /* yacc.c:1646 */ break; case 368: -#line 1442 "./util/configparser.y" /* yacc.c:1646 */ +#line 1441 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_large_queries:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4125,11 +4124,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4129 "util/configparser.c" /* yacc.c:1646 */ +#line 4128 "util/configparser.c" /* yacc.c:1646 */ break; case 369: -#line 1452 "./util/configparser.y" /* yacc.c:1646 */ +#line 1451 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_glue:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4138,11 +4137,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4142 "util/configparser.c" /* yacc.c:1646 */ +#line 4141 "util/configparser.c" /* yacc.c:1646 */ break; case 370: -#line 1462 "./util/configparser.y" /* yacc.c:1646 */ +#line 1461 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_dnssec_stripped:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4151,11 +4150,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4155 "util/configparser.c" /* yacc.c:1646 */ +#line 4154 "util/configparser.c" /* yacc.c:1646 */ break; case 371: -#line 1472 "./util/configparser.y" /* yacc.c:1646 */ +#line 1471 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_below_nxdomain:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4164,11 +4163,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4168 "util/configparser.c" /* yacc.c:1646 */ +#line 4167 "util/configparser.c" /* yacc.c:1646 */ break; case 372: -#line 1482 "./util/configparser.y" /* yacc.c:1646 */ +#line 1481 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_referral_path:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4177,11 +4176,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4181 "util/configparser.c" /* yacc.c:1646 */ +#line 4180 "util/configparser.c" /* yacc.c:1646 */ break; case 373: -#line 1492 "./util/configparser.y" /* yacc.c:1646 */ +#line 1491 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_algo_downgrade:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4190,11 +4189,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4194 "util/configparser.c" /* yacc.c:1646 */ +#line 4193 "util/configparser.c" /* yacc.c:1646 */ break; case 374: -#line 1502 "./util/configparser.y" /* yacc.c:1646 */ +#line 1501 "./util/configparser.y" /* yacc.c:1646 */ { 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) @@ -4203,41 +4202,41 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4207 "util/configparser.c" /* yacc.c:1646 */ +#line 4206 "util/configparser.c" /* yacc.c:1646 */ break; case 375: -#line 1512 "./util/configparser.y" /* yacc.c:1646 */ +#line 1511 "./util/configparser.y" /* yacc.c:1646 */ { 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 4217 "util/configparser.c" /* yacc.c:1646 */ +#line 4216 "util/configparser.c" /* yacc.c:1646 */ break; case 376: -#line 1519 "./util/configparser.y" /* yacc.c:1646 */ +#line 1518 "./util/configparser.y" /* yacc.c:1646 */ { 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 4227 "util/configparser.c" /* yacc.c:1646 */ +#line 4226 "util/configparser.c" /* yacc.c:1646 */ break; case 377: -#line 1526 "./util/configparser.y" /* yacc.c:1646 */ +#line 1525 "./util/configparser.y" /* yacc.c:1646 */ { 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 4237 "util/configparser.c" /* yacc.c:1646 */ +#line 4236 "util/configparser.c" /* yacc.c:1646 */ break; case 378: -#line 1533 "./util/configparser.y" /* yacc.c:1646 */ +#line 1532 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_prefetch:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4245,11 +4244,11 @@ yyreduce: else cfg_parser->cfg->prefetch = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4249 "util/configparser.c" /* yacc.c:1646 */ +#line 4248 "util/configparser.c" /* yacc.c:1646 */ break; case 379: -#line 1542 "./util/configparser.y" /* yacc.c:1646 */ +#line 1541 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_prefetch_key:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4257,11 +4256,11 @@ yyreduce: else cfg_parser->cfg->prefetch_key = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4261 "util/configparser.c" /* yacc.c:1646 */ +#line 4260 "util/configparser.c" /* yacc.c:1646 */ break; case 380: -#line 1551 "./util/configparser.y" /* yacc.c:1646 */ +#line 1550 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_deny_any:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4269,11 +4268,11 @@ yyreduce: else cfg_parser->cfg->deny_any = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4273 "util/configparser.c" /* yacc.c:1646 */ +#line 4272 "util/configparser.c" /* yacc.c:1646 */ break; case 381: -#line 1560 "./util/configparser.y" /* yacc.c:1646 */ +#line 1559 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_unwanted_reply_threshold:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4281,21 +4280,21 @@ yyreduce: else cfg_parser->cfg->unwanted_threshold = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4285 "util/configparser.c" /* yacc.c:1646 */ +#line 4284 "util/configparser.c" /* yacc.c:1646 */ break; case 382: -#line 1569 "./util/configparser.y" /* yacc.c:1646 */ +#line 1568 "./util/configparser.y" /* yacc.c:1646 */ { 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 4295 "util/configparser.c" /* yacc.c:1646 */ +#line 4294 "util/configparser.c" /* yacc.c:1646 */ break; case 383: -#line 1576 "./util/configparser.y" /* yacc.c:1646 */ +#line 1575 "./util/configparser.y" /* yacc.c:1646 */ { 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) @@ -4304,11 +4303,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4308 "util/configparser.c" /* yacc.c:1646 */ +#line 4307 "util/configparser.c" /* yacc.c:1646 */ break; case 384: -#line 1586 "./util/configparser.y" /* yacc.c:1646 */ +#line 1585 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_access_control:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "deny")!=0 && strcmp((yyvsp[0].str), "refuse")!=0 && @@ -4327,21 +4326,21 @@ yyreduce: fatal_exit("out of memory adding acl"); } } -#line 4331 "util/configparser.c" /* yacc.c:1646 */ +#line 4330 "util/configparser.c" /* yacc.c:1646 */ break; case 385: -#line 1606 "./util/configparser.y" /* yacc.c:1646 */ +#line 1605 "./util/configparser.y" /* yacc.c:1646 */ { 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 4341 "util/configparser.c" /* yacc.c:1646 */ +#line 4340 "util/configparser.c" /* yacc.c:1646 */ break; case 386: -#line 1613 "./util/configparser.y" /* yacc.c:1646 */ +#line 1612 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_override_date:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { @@ -4358,11 +4357,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4362 "util/configparser.c" /* yacc.c:1646 */ +#line 4361 "util/configparser.c" /* yacc.c:1646 */ break; case 387: -#line 1631 "./util/configparser.y" /* yacc.c:1646 */ +#line 1630 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_sig_skew_min:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { @@ -4374,11 +4373,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4378 "util/configparser.c" /* yacc.c:1646 */ +#line 4377 "util/configparser.c" /* yacc.c:1646 */ break; case 388: -#line 1644 "./util/configparser.y" /* yacc.c:1646 */ +#line 1643 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_sig_skew_max:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { @@ -4390,11 +4389,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4394 "util/configparser.c" /* yacc.c:1646 */ +#line 4393 "util/configparser.c" /* yacc.c:1646 */ break; case 389: -#line 1657 "./util/configparser.y" /* yacc.c:1646 */ +#line 1656 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_cache_max_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4402,11 +4401,11 @@ yyreduce: else cfg_parser->cfg->max_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4406 "util/configparser.c" /* yacc.c:1646 */ +#line 4405 "util/configparser.c" /* yacc.c:1646 */ break; case 390: -#line 1666 "./util/configparser.y" /* yacc.c:1646 */ +#line 1665 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_cache_max_negative_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4414,11 +4413,11 @@ yyreduce: else cfg_parser->cfg->max_negative_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4418 "util/configparser.c" /* yacc.c:1646 */ +#line 4417 "util/configparser.c" /* yacc.c:1646 */ break; case 391: -#line 1675 "./util/configparser.y" /* yacc.c:1646 */ +#line 1674 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_cache_min_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4426,11 +4425,11 @@ yyreduce: else cfg_parser->cfg->min_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4430 "util/configparser.c" /* yacc.c:1646 */ +#line 4429 "util/configparser.c" /* yacc.c:1646 */ break; case 392: -#line 1684 "./util/configparser.y" /* yacc.c:1646 */ +#line 1683 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_bogus_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4438,11 +4437,11 @@ yyreduce: else cfg_parser->cfg->bogus_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4442 "util/configparser.c" /* yacc.c:1646 */ +#line 4441 "util/configparser.c" /* yacc.c:1646 */ break; case 393: -#line 1693 "./util/configparser.y" /* yacc.c:1646 */ +#line 1692 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_clean_additional:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4451,11 +4450,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4455 "util/configparser.c" /* yacc.c:1646 */ +#line 4454 "util/configparser.c" /* yacc.c:1646 */ break; case 394: -#line 1703 "./util/configparser.y" /* yacc.c:1646 */ +#line 1702 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_permissive_mode:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4464,11 +4463,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4468 "util/configparser.c" /* yacc.c:1646 */ +#line 4467 "util/configparser.c" /* yacc.c:1646 */ break; case 395: -#line 1713 "./util/configparser.y" /* yacc.c:1646 */ +#line 1712 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_aggressive_nsec:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4478,11 +4477,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4482 "util/configparser.c" /* yacc.c:1646 */ +#line 4481 "util/configparser.c" /* yacc.c:1646 */ break; case 396: -#line 1724 "./util/configparser.y" /* yacc.c:1646 */ +#line 1723 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ignore_cd_flag:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4490,11 +4489,11 @@ yyreduce: else cfg_parser->cfg->ignore_cd = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4494 "util/configparser.c" /* yacc.c:1646 */ +#line 4493 "util/configparser.c" /* yacc.c:1646 */ break; case 397: -#line 1733 "./util/configparser.y" /* yacc.c:1646 */ +#line 1732 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_serve_expired:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4502,11 +4501,11 @@ yyreduce: else cfg_parser->cfg->serve_expired = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4506 "util/configparser.c" /* yacc.c:1646 */ +#line 4505 "util/configparser.c" /* yacc.c:1646 */ break; case 398: -#line 1742 "./util/configparser.y" /* yacc.c:1646 */ +#line 1741 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_serve_expired_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4514,11 +4513,11 @@ yyreduce: else cfg_parser->cfg->serve_expired_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4518 "util/configparser.c" /* yacc.c:1646 */ +#line 4517 "util/configparser.c" /* yacc.c:1646 */ break; case 399: -#line 1751 "./util/configparser.y" /* yacc.c:1646 */ +#line 1750 "./util/configparser.y" /* yacc.c:1646 */ { 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) @@ -4526,11 +4525,11 @@ yyreduce: else cfg_parser->cfg->serve_expired_ttl_reset = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4530 "util/configparser.c" /* yacc.c:1646 */ +#line 4529 "util/configparser.c" /* yacc.c:1646 */ break; case 400: -#line 1760 "./util/configparser.y" /* yacc.c:1646 */ +#line 1759 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_fake_dsa:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4542,11 +4541,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 4546 "util/configparser.c" /* yacc.c:1646 */ +#line 4545 "util/configparser.c" /* yacc.c:1646 */ break; case 401: -#line 1773 "./util/configparser.y" /* yacc.c:1646 */ +#line 1772 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_fake_sha1:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4558,11 +4557,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 4562 "util/configparser.c" /* yacc.c:1646 */ +#line 4561 "util/configparser.c" /* yacc.c:1646 */ break; case 402: -#line 1786 "./util/configparser.y" /* yacc.c:1646 */ +#line 1785 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_log_level:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4570,21 +4569,21 @@ yyreduce: else cfg_parser->cfg->val_log_level = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4574 "util/configparser.c" /* yacc.c:1646 */ +#line 4573 "util/configparser.c" /* yacc.c:1646 */ break; case 403: -#line 1795 "./util/configparser.y" /* yacc.c:1646 */ +#line 1794 "./util/configparser.y" /* yacc.c:1646 */ { 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 4584 "util/configparser.c" /* yacc.c:1646 */ +#line 4583 "util/configparser.c" /* yacc.c:1646 */ break; case 404: -#line 1802 "./util/configparser.y" /* yacc.c:1646 */ +#line 1801 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_add_holddown:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4592,11 +4591,11 @@ yyreduce: else cfg_parser->cfg->add_holddown = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4596 "util/configparser.c" /* yacc.c:1646 */ +#line 4595 "util/configparser.c" /* yacc.c:1646 */ break; case 405: -#line 1811 "./util/configparser.y" /* yacc.c:1646 */ +#line 1810 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_del_holddown:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4604,11 +4603,11 @@ yyreduce: else cfg_parser->cfg->del_holddown = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4608 "util/configparser.c" /* yacc.c:1646 */ +#line 4607 "util/configparser.c" /* yacc.c:1646 */ break; case 406: -#line 1820 "./util/configparser.y" /* yacc.c:1646 */ +#line 1819 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_keep_missing:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4616,11 +4615,11 @@ yyreduce: else cfg_parser->cfg->keep_missing = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4620 "util/configparser.c" /* yacc.c:1646 */ +#line 4619 "util/configparser.c" /* yacc.c:1646 */ break; case 407: -#line 1829 "./util/configparser.y" /* yacc.c:1646 */ +#line 1828 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_permit_small_holddown:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4629,22 +4628,22 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4633 "util/configparser.c" /* yacc.c:1646 */ +#line 4632 "util/configparser.c" /* yacc.c:1646 */ break; case 408: -#line 1838 "./util/configparser.y" /* yacc.c:1646 */ +#line 1837 "./util/configparser.y" /* yacc.c:1646 */ { 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 4644 "util/configparser.c" /* yacc.c:1646 */ +#line 4643 "util/configparser.c" /* yacc.c:1646 */ break; case 409: -#line 1846 "./util/configparser.y" /* yacc.c:1646 */ +#line 1845 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_key_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4656,22 +4655,22 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4660 "util/configparser.c" /* yacc.c:1646 */ +#line 4659 "util/configparser.c" /* yacc.c:1646 */ break; case 410: -#line 1859 "./util/configparser.y" /* yacc.c:1646 */ +#line 1858 "./util/configparser.y" /* yacc.c:1646 */ { 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 4671 "util/configparser.c" /* yacc.c:1646 */ +#line 4670 "util/configparser.c" /* yacc.c:1646 */ break; case 411: -#line 1867 "./util/configparser.y" /* yacc.c:1646 */ +#line 1866 "./util/configparser.y" /* yacc.c:1646 */ { 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 && @@ -4711,21 +4710,21 @@ yyreduce: fatal_exit("out of memory adding local-zone"); } } -#line 4715 "util/configparser.c" /* yacc.c:1646 */ +#line 4714 "util/configparser.c" /* yacc.c:1646 */ break; case 412: -#line 1908 "./util/configparser.y" /* yacc.c:1646 */ +#line 1907 "./util/configparser.y" /* yacc.c:1646 */ { 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 4725 "util/configparser.c" /* yacc.c:1646 */ +#line 4724 "util/configparser.c" /* yacc.c:1646 */ break; case 413: -#line 1915 "./util/configparser.y" /* yacc.c:1646 */ +#line 1914 "./util/configparser.y" /* yacc.c:1646 */ { char* ptr; OUTYY(("P(server_local_data_ptr:%s)\n", (yyvsp[0].str))); @@ -4739,11 +4738,11 @@ yyreduce: yyerror("local-data-ptr could not be reversed"); } } -#line 4743 "util/configparser.c" /* yacc.c:1646 */ +#line 4742 "util/configparser.c" /* yacc.c:1646 */ break; case 414: -#line 1930 "./util/configparser.y" /* yacc.c:1646 */ +#line 1929 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_minimal_responses:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4752,11 +4751,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4756 "util/configparser.c" /* yacc.c:1646 */ +#line 4755 "util/configparser.c" /* yacc.c:1646 */ break; case 415: -#line 1940 "./util/configparser.y" /* yacc.c:1646 */ +#line 1939 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_rrset_roundrobin:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4765,41 +4764,41 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4769 "util/configparser.c" /* yacc.c:1646 */ +#line 4768 "util/configparser.c" /* yacc.c:1646 */ break; case 416: -#line 1950 "./util/configparser.y" /* yacc.c:1646 */ +#line 1949 "./util/configparser.y" /* yacc.c:1646 */ { 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 4779 "util/configparser.c" /* yacc.c:1646 */ +#line 4778 "util/configparser.c" /* yacc.c:1646 */ break; case 417: -#line 1957 "./util/configparser.y" /* yacc.c:1646 */ +#line 1956 "./util/configparser.y" /* yacc.c:1646 */ { 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 4789 "util/configparser.c" /* yacc.c:1646 */ +#line 4788 "util/configparser.c" /* yacc.c:1646 */ break; case 418: -#line 1964 "./util/configparser.y" /* yacc.c:1646 */ +#line 1963 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dns64_prefix:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dns64_prefix); cfg_parser->cfg->dns64_prefix = (yyvsp[0].str); } -#line 4799 "util/configparser.c" /* yacc.c:1646 */ +#line 4798 "util/configparser.c" /* yacc.c:1646 */ break; case 419: -#line 1971 "./util/configparser.y" /* yacc.c:1646 */ +#line 1970 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_dns64_synthall:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4807,22 +4806,22 @@ yyreduce: else cfg_parser->cfg->dns64_synthall = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4811 "util/configparser.c" /* yacc.c:1646 */ +#line 4810 "util/configparser.c" /* yacc.c:1646 */ break; case 420: -#line 1980 "./util/configparser.y" /* yacc.c:1646 */ +#line 1979 "./util/configparser.y" /* yacc.c:1646 */ { 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 4822 "util/configparser.c" /* yacc.c:1646 */ +#line 4821 "util/configparser.c" /* yacc.c:1646 */ break; case 421: -#line 1988 "./util/configparser.y" /* yacc.c:1646 */ +#line 1987 "./util/configparser.y" /* yacc.c:1646 */ { char* p, *s = (yyvsp[0].str); OUTYY(("P(server_define_tag:%s)\n", (yyvsp[0].str))); @@ -4835,11 +4834,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4839 "util/configparser.c" /* yacc.c:1646 */ +#line 4838 "util/configparser.c" /* yacc.c:1646 */ break; case 422: -#line 2002 "./util/configparser.y" /* yacc.c:1646 */ +#line 2001 "./util/configparser.y" /* yacc.c:1646 */ { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -4859,11 +4858,11 @@ yyreduce: } } } -#line 4863 "util/configparser.c" /* yacc.c:1646 */ +#line 4862 "util/configparser.c" /* yacc.c:1646 */ break; case 423: -#line 2023 "./util/configparser.y" /* yacc.c:1646 */ +#line 2022 "./util/configparser.y" /* yacc.c:1646 */ { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -4883,11 +4882,11 @@ yyreduce: } } } -#line 4887 "util/configparser.c" /* yacc.c:1646 */ +#line 4886 "util/configparser.c" /* yacc.c:1646 */ break; case 424: -#line 2044 "./util/configparser.y" /* yacc.c:1646 */ +#line 2043 "./util/configparser.y" /* yacc.c:1646 */ { 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, @@ -4898,11 +4897,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 4902 "util/configparser.c" /* yacc.c:1646 */ +#line 4901 "util/configparser.c" /* yacc.c:1646 */ break; case 425: -#line 2056 "./util/configparser.y" /* yacc.c:1646 */ +#line 2055 "./util/configparser.y" /* yacc.c:1646 */ { 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, @@ -4913,11 +4912,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 4917 "util/configparser.c" /* yacc.c:1646 */ +#line 4916 "util/configparser.c" /* yacc.c:1646 */ break; case 426: -#line 2068 "./util/configparser.y" /* yacc.c:1646 */ +#line 2067 "./util/configparser.y" /* yacc.c:1646 */ { 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, @@ -4928,11 +4927,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 4932 "util/configparser.c" /* yacc.c:1646 */ +#line 4931 "util/configparser.c" /* yacc.c:1646 */ break; case 427: -#line 2080 "./util/configparser.y" /* yacc.c:1646 */ +#line 2079 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_access_control_view:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str2list_insert(&cfg_parser->cfg->acl_view, @@ -4940,11 +4939,11 @@ yyreduce: yyerror("out of memory"); } } -#line 4944 "util/configparser.c" /* yacc.c:1646 */ +#line 4943 "util/configparser.c" /* yacc.c:1646 */ break; case 428: -#line 2089 "./util/configparser.y" /* yacc.c:1646 */ +#line 2088 "./util/configparser.y" /* yacc.c:1646 */ { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -4964,11 +4963,11 @@ yyreduce: } } } -#line 4968 "util/configparser.c" /* yacc.c:1646 */ +#line 4967 "util/configparser.c" /* yacc.c:1646 */ break; case 429: -#line 2110 "./util/configparser.y" /* yacc.c:1646 */ +#line 2109 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_ratelimit:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4976,11 +4975,11 @@ yyreduce: else cfg_parser->cfg->ip_ratelimit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4980 "util/configparser.c" /* yacc.c:1646 */ +#line 4979 "util/configparser.c" /* yacc.c:1646 */ break; case 430: -#line 2120 "./util/configparser.y" /* yacc.c:1646 */ +#line 2119 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ratelimit:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4988,33 +4987,33 @@ yyreduce: else cfg_parser->cfg->ratelimit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4992 "util/configparser.c" /* yacc.c:1646 */ +#line 4991 "util/configparser.c" /* yacc.c:1646 */ break; case 431: -#line 2129 "./util/configparser.y" /* yacc.c:1646 */ +#line 2128 "./util/configparser.y" /* yacc.c:1646 */ { 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 5003 "util/configparser.c" /* yacc.c:1646 */ +#line 5002 "util/configparser.c" /* yacc.c:1646 */ break; case 432: -#line 2137 "./util/configparser.y" /* yacc.c:1646 */ +#line 2136 "./util/configparser.y" /* yacc.c:1646 */ { 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 5014 "util/configparser.c" /* yacc.c:1646 */ +#line 5013 "util/configparser.c" /* yacc.c:1646 */ break; case 433: -#line 2145 "./util/configparser.y" /* yacc.c:1646 */ +#line 2144 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_ratelimit_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5026,11 +5025,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 5030 "util/configparser.c" /* yacc.c:1646 */ +#line 5029 "util/configparser.c" /* yacc.c:1646 */ break; case 434: -#line 2158 "./util/configparser.y" /* yacc.c:1646 */ +#line 2157 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ratelimit_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5042,11 +5041,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 5046 "util/configparser.c" /* yacc.c:1646 */ +#line 5045 "util/configparser.c" /* yacc.c:1646 */ break; case 435: -#line 2171 "./util/configparser.y" /* yacc.c:1646 */ +#line 2170 "./util/configparser.y" /* yacc.c:1646 */ { 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) { @@ -5060,11 +5059,11 @@ yyreduce: "ratelimit-for-domain"); } } -#line 5064 "util/configparser.c" /* yacc.c:1646 */ +#line 5063 "util/configparser.c" /* yacc.c:1646 */ break; case 436: -#line 2186 "./util/configparser.y" /* yacc.c:1646 */ +#line 2185 "./util/configparser.y" /* yacc.c:1646 */ { 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) { @@ -5078,11 +5077,11 @@ yyreduce: "ratelimit-below-domain"); } } -#line 5082 "util/configparser.c" /* yacc.c:1646 */ +#line 5081 "util/configparser.c" /* yacc.c:1646 */ break; case 437: -#line 2201 "./util/configparser.y" /* yacc.c:1646 */ +#line 2200 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_ratelimit_factor:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5090,11 +5089,11 @@ yyreduce: else cfg_parser->cfg->ip_ratelimit_factor = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5094 "util/configparser.c" /* yacc.c:1646 */ +#line 5093 "util/configparser.c" /* yacc.c:1646 */ break; case 438: -#line 2210 "./util/configparser.y" /* yacc.c:1646 */ +#line 2209 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ratelimit_factor:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5102,20 +5101,20 @@ yyreduce: else cfg_parser->cfg->ratelimit_factor = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5106 "util/configparser.c" /* yacc.c:1646 */ +#line 5105 "util/configparser.c" /* yacc.c:1646 */ break; case 439: -#line 2219 "./util/configparser.y" /* yacc.c:1646 */ +#line 2218 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(low-rtt option is deprecated, use fast-server-num instead)\n")); free((yyvsp[0].str)); } -#line 5115 "util/configparser.c" /* yacc.c:1646 */ +#line 5114 "util/configparser.c" /* yacc.c:1646 */ break; case 440: -#line 2225 "./util/configparser.y" /* yacc.c:1646 */ +#line 2224 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_fast_server_num:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) <= 0) @@ -5123,11 +5122,11 @@ yyreduce: else cfg_parser->cfg->fast_server_num = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5127 "util/configparser.c" /* yacc.c:1646 */ +#line 5126 "util/configparser.c" /* yacc.c:1646 */ break; case 441: -#line 2234 "./util/configparser.y" /* yacc.c:1646 */ +#line 2233 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_fast_server_permil:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5135,11 +5134,11 @@ yyreduce: else cfg_parser->cfg->fast_server_permil = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5139 "util/configparser.c" /* yacc.c:1646 */ +#line 5138 "util/configparser.c" /* yacc.c:1646 */ break; case 442: -#line 2243 "./util/configparser.y" /* yacc.c:1646 */ +#line 2242 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_qname_minimisation:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5148,11 +5147,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5152 "util/configparser.c" /* yacc.c:1646 */ +#line 5151 "util/configparser.c" /* yacc.c:1646 */ break; case 443: -#line 2253 "./util/configparser.y" /* yacc.c:1646 */ +#line 2252 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_qname_minimisation_strict:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5161,11 +5160,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5165 "util/configparser.c" /* yacc.c:1646 */ +#line 5164 "util/configparser.c" /* yacc.c:1646 */ break; case 444: -#line 2263 "./util/configparser.y" /* yacc.c:1646 */ +#line 2262 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_enabled:%s)\n", (yyvsp[0].str))); @@ -5177,11 +5176,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 5181 "util/configparser.c" /* yacc.c:1646 */ +#line 5180 "util/configparser.c" /* yacc.c:1646 */ break; case 445: -#line 2276 "./util/configparser.y" /* yacc.c:1646 */ +#line 2275 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_ignore_bogus:%s)\n", (yyvsp[0].str))); @@ -5193,11 +5192,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 5197 "util/configparser.c" /* yacc.c:1646 */ +#line 5196 "util/configparser.c" /* yacc.c:1646 */ break; case 446: -#line 2289 "./util/configparser.y" /* yacc.c:1646 */ +#line 2288 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_hook:%s)\n", (yyvsp[0].str))); @@ -5208,11 +5207,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5212 "util/configparser.c" /* yacc.c:1646 */ +#line 5211 "util/configparser.c" /* yacc.c:1646 */ break; case 447: -#line 2301 "./util/configparser.y" /* yacc.c:1646 */ +#line 2300 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_max_ttl:%s)\n", (yyvsp[0].str))); @@ -5225,11 +5224,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5229 "util/configparser.c" /* yacc.c:1646 */ +#line 5228 "util/configparser.c" /* yacc.c:1646 */ break; case 448: -#line 2315 "./util/configparser.y" /* yacc.c:1646 */ +#line 2314 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_whitelist:%s)\n", (yyvsp[0].str))); @@ -5240,11 +5239,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5244 "util/configparser.c" /* yacc.c:1646 */ +#line 5243 "util/configparser.c" /* yacc.c:1646 */ break; case 449: -#line 2327 "./util/configparser.y" /* yacc.c:1646 */ +#line 2326 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_strict:%s)\n", (yyvsp[0].str))); @@ -5257,11 +5256,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5261 "util/configparser.c" /* yacc.c:1646 */ +#line 5260 "util/configparser.c" /* yacc.c:1646 */ break; case 450: -#line 2341 "./util/configparser.y" /* yacc.c:1646 */ +#line 2340 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->stubs->name) @@ -5270,31 +5269,31 @@ yyreduce: free(cfg_parser->cfg->stubs->name); cfg_parser->cfg->stubs->name = (yyvsp[0].str); } -#line 5274 "util/configparser.c" /* yacc.c:1646 */ +#line 5273 "util/configparser.c" /* yacc.c:1646 */ break; case 451: -#line 2351 "./util/configparser.y" /* yacc.c:1646 */ +#line 2350 "./util/configparser.y" /* yacc.c:1646 */ { 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 5284 "util/configparser.c" /* yacc.c:1646 */ +#line 5283 "util/configparser.c" /* yacc.c:1646 */ break; case 452: -#line 2358 "./util/configparser.y" /* yacc.c:1646 */ +#line 2357 "./util/configparser.y" /* yacc.c:1646 */ { 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 5294 "util/configparser.c" /* yacc.c:1646 */ +#line 5293 "util/configparser.c" /* yacc.c:1646 */ break; case 453: -#line 2365 "./util/configparser.y" /* yacc.c:1646 */ +#line 2364 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(stub-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5302,11 +5301,11 @@ yyreduce: else cfg_parser->cfg->stubs->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5306 "util/configparser.c" /* yacc.c:1646 */ +#line 5305 "util/configparser.c" /* yacc.c:1646 */ break; case 454: -#line 2374 "./util/configparser.y" /* yacc.c:1646 */ +#line 2373 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(stub-no-cache:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5314,11 +5313,11 @@ yyreduce: else cfg_parser->cfg->stubs->no_cache=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5318 "util/configparser.c" /* yacc.c:1646 */ +#line 5317 "util/configparser.c" /* yacc.c:1646 */ break; case 455: -#line 2383 "./util/configparser.y" /* yacc.c:1646 */ +#line 2382 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(stub-ssl-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5327,11 +5326,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5331 "util/configparser.c" /* yacc.c:1646 */ +#line 5330 "util/configparser.c" /* yacc.c:1646 */ break; case 456: -#line 2393 "./util/configparser.y" /* yacc.c:1646 */ +#line 2392 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(stub-prime:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5340,11 +5339,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5344 "util/configparser.c" /* yacc.c:1646 */ +#line 5343 "util/configparser.c" /* yacc.c:1646 */ break; case 457: -#line 2403 "./util/configparser.y" /* yacc.c:1646 */ +#line 2402 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->forwards->name) @@ -5353,31 +5352,31 @@ yyreduce: free(cfg_parser->cfg->forwards->name); cfg_parser->cfg->forwards->name = (yyvsp[0].str); } -#line 5357 "util/configparser.c" /* yacc.c:1646 */ +#line 5356 "util/configparser.c" /* yacc.c:1646 */ break; case 458: -#line 2413 "./util/configparser.y" /* yacc.c:1646 */ +#line 2412 "./util/configparser.y" /* yacc.c:1646 */ { 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 5367 "util/configparser.c" /* yacc.c:1646 */ +#line 5366 "util/configparser.c" /* yacc.c:1646 */ break; case 459: -#line 2420 "./util/configparser.y" /* yacc.c:1646 */ +#line 2419 "./util/configparser.y" /* yacc.c:1646 */ { 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 5377 "util/configparser.c" /* yacc.c:1646 */ +#line 5376 "util/configparser.c" /* yacc.c:1646 */ break; case 460: -#line 2427 "./util/configparser.y" /* yacc.c:1646 */ +#line 2426 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(forward-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5385,11 +5384,11 @@ yyreduce: else cfg_parser->cfg->forwards->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5389 "util/configparser.c" /* yacc.c:1646 */ +#line 5388 "util/configparser.c" /* yacc.c:1646 */ break; case 461: -#line 2436 "./util/configparser.y" /* yacc.c:1646 */ +#line 2435 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(forward-no-cache:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5397,11 +5396,11 @@ yyreduce: else cfg_parser->cfg->forwards->no_cache=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5401 "util/configparser.c" /* yacc.c:1646 */ +#line 5400 "util/configparser.c" /* yacc.c:1646 */ break; case 462: -#line 2445 "./util/configparser.y" /* yacc.c:1646 */ +#line 2444 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(forward-ssl-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5410,11 +5409,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5414 "util/configparser.c" /* yacc.c:1646 */ +#line 5413 "util/configparser.c" /* yacc.c:1646 */ break; case 463: -#line 2455 "./util/configparser.y" /* yacc.c:1646 */ +#line 2454 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->auths->name) @@ -5423,52 +5422,52 @@ yyreduce: free(cfg_parser->cfg->auths->name); cfg_parser->cfg->auths->name = (yyvsp[0].str); } -#line 5427 "util/configparser.c" /* yacc.c:1646 */ +#line 5426 "util/configparser.c" /* yacc.c:1646 */ break; case 464: -#line 2465 "./util/configparser.y" /* yacc.c:1646 */ +#line 2464 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(zonefile:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->auths->zonefile); cfg_parser->cfg->auths->zonefile = (yyvsp[0].str); } -#line 5437 "util/configparser.c" /* yacc.c:1646 */ +#line 5436 "util/configparser.c" /* yacc.c:1646 */ break; case 465: -#line 2472 "./util/configparser.y" /* yacc.c:1646 */ +#line 2471 "./util/configparser.y" /* yacc.c:1646 */ { 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 5447 "util/configparser.c" /* yacc.c:1646 */ +#line 5446 "util/configparser.c" /* yacc.c:1646 */ break; case 466: -#line 2479 "./util/configparser.y" /* yacc.c:1646 */ +#line 2478 "./util/configparser.y" /* yacc.c:1646 */ { 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 5457 "util/configparser.c" /* yacc.c:1646 */ +#line 5456 "util/configparser.c" /* yacc.c:1646 */ break; case 467: -#line 2486 "./util/configparser.y" /* yacc.c:1646 */ +#line 2485 "./util/configparser.y" /* yacc.c:1646 */ { 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 5468 "util/configparser.c" /* yacc.c:1646 */ +#line 5467 "util/configparser.c" /* yacc.c:1646 */ break; case 468: -#line 2494 "./util/configparser.y" /* yacc.c:1646 */ +#line 2493 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(for-downstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5477,11 +5476,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5481 "util/configparser.c" /* yacc.c:1646 */ +#line 5480 "util/configparser.c" /* yacc.c:1646 */ break; case 469: -#line 2504 "./util/configparser.y" /* yacc.c:1646 */ +#line 2503 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(for-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5490,11 +5489,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5494 "util/configparser.c" /* yacc.c:1646 */ +#line 5493 "util/configparser.c" /* yacc.c:1646 */ break; case 470: -#line 2514 "./util/configparser.y" /* yacc.c:1646 */ +#line 2513 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(fallback-enabled:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5503,11 +5502,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5507 "util/configparser.c" /* yacc.c:1646 */ +#line 5506 "util/configparser.c" /* yacc.c:1646 */ break; case 471: -#line 2524 "./util/configparser.y" /* yacc.c:1646 */ +#line 2523 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->views->name) @@ -5516,11 +5515,11 @@ yyreduce: free(cfg_parser->cfg->views->name); cfg_parser->cfg->views->name = (yyvsp[0].str); } -#line 5520 "util/configparser.c" /* yacc.c:1646 */ +#line 5519 "util/configparser.c" /* yacc.c:1646 */ break; case 472: -#line 2534 "./util/configparser.y" /* yacc.c:1646 */ +#line 2533 "./util/configparser.y" /* yacc.c:1646 */ { 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 && @@ -5558,11 +5557,11 @@ yyreduce: fatal_exit("out of memory adding local-zone"); } } -#line 5562 "util/configparser.c" /* yacc.c:1646 */ +#line 5561 "util/configparser.c" /* yacc.c:1646 */ break; case 473: -#line 2573 "./util/configparser.y" /* yacc.c:1646 */ +#line 2572 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(view_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); validate_respip_action((yyvsp[0].str)); @@ -5571,33 +5570,33 @@ yyreduce: fatal_exit("out of memory adding per-view " "response-ip action"); } -#line 5575 "util/configparser.c" /* yacc.c:1646 */ +#line 5574 "util/configparser.c" /* yacc.c:1646 */ break; case 474: -#line 2583 "./util/configparser.y" /* yacc.c:1646 */ +#line 2582 "./util/configparser.y" /* yacc.c:1646 */ { 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 5586 "util/configparser.c" /* yacc.c:1646 */ +#line 5585 "util/configparser.c" /* yacc.c:1646 */ break; case 475: -#line 2591 "./util/configparser.y" /* yacc.c:1646 */ +#line 2590 "./util/configparser.y" /* yacc.c:1646 */ { 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 5597 "util/configparser.c" /* yacc.c:1646 */ +#line 5596 "util/configparser.c" /* yacc.c:1646 */ break; case 476: -#line 2599 "./util/configparser.y" /* yacc.c:1646 */ +#line 2598 "./util/configparser.y" /* yacc.c:1646 */ { char* ptr; OUTYY(("P(view_local_data_ptr:%s)\n", (yyvsp[0].str))); @@ -5611,11 +5610,11 @@ yyreduce: yyerror("local-data-ptr could not be reversed"); } } -#line 5615 "util/configparser.c" /* yacc.c:1646 */ +#line 5614 "util/configparser.c" /* yacc.c:1646 */ break; case 477: -#line 2614 "./util/configparser.y" /* yacc.c:1646 */ +#line 2613 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(view-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5623,19 +5622,19 @@ yyreduce: else cfg_parser->cfg->views->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5627 "util/configparser.c" /* yacc.c:1646 */ +#line 5626 "util/configparser.c" /* yacc.c:1646 */ break; case 478: -#line 2623 "./util/configparser.y" /* yacc.c:1646 */ +#line 2622 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(remote-control:)\n")); } -#line 5635 "util/configparser.c" /* yacc.c:1646 */ +#line 5634 "util/configparser.c" /* yacc.c:1646 */ break; case 489: -#line 2634 "./util/configparser.y" /* yacc.c:1646 */ +#line 2633 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(control_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5644,11 +5643,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5648 "util/configparser.c" /* yacc.c:1646 */ +#line 5647 "util/configparser.c" /* yacc.c:1646 */ break; case 490: -#line 2644 "./util/configparser.y" /* yacc.c:1646 */ +#line 2643 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(control_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5656,79 +5655,79 @@ yyreduce: else cfg_parser->cfg->control_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5660 "util/configparser.c" /* yacc.c:1646 */ +#line 5659 "util/configparser.c" /* yacc.c:1646 */ break; case 491: -#line 2653 "./util/configparser.y" /* yacc.c:1646 */ +#line 2652 "./util/configparser.y" /* yacc.c:1646 */ { 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 5670 "util/configparser.c" /* yacc.c:1646 */ +#line 5669 "util/configparser.c" /* yacc.c:1646 */ break; case 492: -#line 2660 "./util/configparser.y" /* yacc.c:1646 */ +#line 2659 "./util/configparser.y" /* yacc.c:1646 */ { 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 5680 "util/configparser.c" /* yacc.c:1646 */ +#line 5679 "util/configparser.c" /* yacc.c:1646 */ break; case 493: -#line 2667 "./util/configparser.y" /* yacc.c:1646 */ +#line 2666 "./util/configparser.y" /* yacc.c:1646 */ { 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 5690 "util/configparser.c" /* yacc.c:1646 */ +#line 5689 "util/configparser.c" /* yacc.c:1646 */ break; case 494: -#line 2674 "./util/configparser.y" /* yacc.c:1646 */ +#line 2673 "./util/configparser.y" /* yacc.c:1646 */ { 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 5700 "util/configparser.c" /* yacc.c:1646 */ +#line 5699 "util/configparser.c" /* yacc.c:1646 */ break; case 495: -#line 2681 "./util/configparser.y" /* yacc.c:1646 */ +#line 2680 "./util/configparser.y" /* yacc.c:1646 */ { 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 5710 "util/configparser.c" /* yacc.c:1646 */ +#line 5709 "util/configparser.c" /* yacc.c:1646 */ break; case 496: -#line 2688 "./util/configparser.y" /* yacc.c:1646 */ +#line 2687 "./util/configparser.y" /* yacc.c:1646 */ { 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 5720 "util/configparser.c" /* yacc.c:1646 */ +#line 5719 "util/configparser.c" /* yacc.c:1646 */ break; case 497: -#line 2695 "./util/configparser.y" /* yacc.c:1646 */ +#line 2694 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(dnstap:)\n")); } -#line 5728 "util/configparser.c" /* yacc.c:1646 */ +#line 5727 "util/configparser.c" /* yacc.c:1646 */ break; case 512: -#line 2712 "./util/configparser.y" /* yacc.c:1646 */ +#line 2711 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5736,21 +5735,21 @@ yyreduce: else cfg_parser->cfg->dnstap = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5740 "util/configparser.c" /* yacc.c:1646 */ +#line 5739 "util/configparser.c" /* yacc.c:1646 */ break; case 513: -#line 2721 "./util/configparser.y" /* yacc.c:1646 */ +#line 2720 "./util/configparser.y" /* yacc.c:1646 */ { 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 5750 "util/configparser.c" /* yacc.c:1646 */ +#line 5749 "util/configparser.c" /* yacc.c:1646 */ break; case 514: -#line 2728 "./util/configparser.y" /* yacc.c:1646 */ +#line 2727 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_send_identity:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5758,11 +5757,11 @@ yyreduce: else cfg_parser->cfg->dnstap_send_identity = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5762 "util/configparser.c" /* yacc.c:1646 */ +#line 5761 "util/configparser.c" /* yacc.c:1646 */ break; case 515: -#line 2737 "./util/configparser.y" /* yacc.c:1646 */ +#line 2736 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_send_version:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5770,31 +5769,31 @@ yyreduce: else cfg_parser->cfg->dnstap_send_version = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5774 "util/configparser.c" /* yacc.c:1646 */ +#line 5773 "util/configparser.c" /* yacc.c:1646 */ break; case 516: -#line 2746 "./util/configparser.y" /* yacc.c:1646 */ +#line 2745 "./util/configparser.y" /* yacc.c:1646 */ { 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 5784 "util/configparser.c" /* yacc.c:1646 */ +#line 5783 "util/configparser.c" /* yacc.c:1646 */ break; case 517: -#line 2753 "./util/configparser.y" /* yacc.c:1646 */ +#line 2752 "./util/configparser.y" /* yacc.c:1646 */ { 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 5794 "util/configparser.c" /* yacc.c:1646 */ +#line 5793 "util/configparser.c" /* yacc.c:1646 */ break; case 518: -#line 2760 "./util/configparser.y" /* yacc.c:1646 */ +#line 2759 "./util/configparser.y" /* yacc.c:1646 */ { 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) @@ -5803,11 +5802,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5807 "util/configparser.c" /* yacc.c:1646 */ +#line 5806 "util/configparser.c" /* yacc.c:1646 */ break; case 519: -#line 2770 "./util/configparser.y" /* yacc.c:1646 */ +#line 2769 "./util/configparser.y" /* yacc.c:1646 */ { 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) @@ -5816,11 +5815,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5820 "util/configparser.c" /* yacc.c:1646 */ +#line 5819 "util/configparser.c" /* yacc.c:1646 */ break; case 520: -#line 2780 "./util/configparser.y" /* yacc.c:1646 */ +#line 2779 "./util/configparser.y" /* yacc.c:1646 */ { 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) @@ -5829,11 +5828,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5833 "util/configparser.c" /* yacc.c:1646 */ +#line 5832 "util/configparser.c" /* yacc.c:1646 */ break; case 521: -#line 2790 "./util/configparser.y" /* yacc.c:1646 */ +#line 2789 "./util/configparser.y" /* yacc.c:1646 */ { 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) @@ -5842,11 +5841,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5846 "util/configparser.c" /* yacc.c:1646 */ +#line 5845 "util/configparser.c" /* yacc.c:1646 */ break; case 522: -#line 2800 "./util/configparser.y" /* yacc.c:1646 */ +#line 2799 "./util/configparser.y" /* yacc.c:1646 */ { 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) @@ -5855,11 +5854,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5859 "util/configparser.c" /* yacc.c:1646 */ +#line 5858 "util/configparser.c" /* yacc.c:1646 */ break; case 523: -#line 2810 "./util/configparser.y" /* yacc.c:1646 */ +#line 2809 "./util/configparser.y" /* yacc.c:1646 */ { 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) @@ -5868,29 +5867,29 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5872 "util/configparser.c" /* yacc.c:1646 */ +#line 5871 "util/configparser.c" /* yacc.c:1646 */ break; case 524: -#line 2820 "./util/configparser.y" /* yacc.c:1646 */ +#line 2819 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(python:)\n")); } -#line 5880 "util/configparser.c" /* yacc.c:1646 */ +#line 5879 "util/configparser.c" /* yacc.c:1646 */ break; case 528: -#line 2829 "./util/configparser.y" /* yacc.c:1646 */ +#line 2828 "./util/configparser.y" /* yacc.c:1646 */ { 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 5890 "util/configparser.c" /* yacc.c:1646 */ +#line 5889 "util/configparser.c" /* yacc.c:1646 */ break; case 529: -#line 2835 "./util/configparser.y" /* yacc.c:1646 */ +#line 2834 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(disable_dnssec_lame_check:%s)\n", (yyvsp[0].str))); if (strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5899,21 +5898,21 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5903 "util/configparser.c" /* yacc.c:1646 */ +#line 5902 "util/configparser.c" /* yacc.c:1646 */ break; case 530: -#line 2845 "./util/configparser.y" /* yacc.c:1646 */ +#line 2844 "./util/configparser.y" /* yacc.c:1646 */ { 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 5913 "util/configparser.c" /* yacc.c:1646 */ +#line 5912 "util/configparser.c" /* yacc.c:1646 */ break; case 531: -#line 2852 "./util/configparser.y" /* yacc.c:1646 */ +#line 2851 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); validate_respip_action((yyvsp[0].str)); @@ -5921,30 +5920,30 @@ yyreduce: (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding response-ip"); } -#line 5925 "util/configparser.c" /* yacc.c:1646 */ +#line 5924 "util/configparser.c" /* yacc.c:1646 */ break; case 532: -#line 2861 "./util/configparser.y" /* yacc.c:1646 */ +#line 2860 "./util/configparser.y" /* yacc.c:1646 */ { 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 5936 "util/configparser.c" /* yacc.c:1646 */ +#line 5935 "util/configparser.c" /* yacc.c:1646 */ break; case 533: -#line 2869 "./util/configparser.y" /* yacc.c:1646 */ +#line 2868 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(dnscrypt:)\n")); } -#line 5944 "util/configparser.c" /* yacc.c:1646 */ +#line 5943 "util/configparser.c" /* yacc.c:1646 */ break; case 546: -#line 2885 "./util/configparser.y" /* yacc.c:1646 */ +#line 2884 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5952,11 +5951,11 @@ yyreduce: else cfg_parser->cfg->dnscrypt = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5956 "util/configparser.c" /* yacc.c:1646 */ +#line 5955 "util/configparser.c" /* yacc.c:1646 */ break; case 547: -#line 2895 "./util/configparser.y" /* yacc.c:1646 */ +#line 2894 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5964,21 +5963,21 @@ yyreduce: else cfg_parser->cfg->dnscrypt_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5968 "util/configparser.c" /* yacc.c:1646 */ +#line 5967 "util/configparser.c" /* yacc.c:1646 */ break; case 548: -#line 2904 "./util/configparser.y" /* yacc.c:1646 */ +#line 2903 "./util/configparser.y" /* yacc.c:1646 */ { 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 5978 "util/configparser.c" /* yacc.c:1646 */ +#line 5977 "util/configparser.c" /* yacc.c:1646 */ break; case 549: -#line 2911 "./util/configparser.y" /* yacc.c:1646 */ +#line 2910 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_provider_cert:%s)\n", (yyvsp[0].str))); if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str))) @@ -5986,21 +5985,21 @@ yyreduce: if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str))) fatal_exit("out of memory adding dnscrypt-provider-cert"); } -#line 5990 "util/configparser.c" /* yacc.c:1646 */ +#line 5989 "util/configparser.c" /* yacc.c:1646 */ break; case 550: -#line 2920 "./util/configparser.y" /* yacc.c:1646 */ +#line 2919 "./util/configparser.y" /* yacc.c:1646 */ { 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 6000 "util/configparser.c" /* yacc.c:1646 */ +#line 5999 "util/configparser.c" /* yacc.c:1646 */ break; case 551: -#line 2927 "./util/configparser.y" /* yacc.c:1646 */ +#line 2926 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_secret_key:%s)\n", (yyvsp[0].str))); if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str))) @@ -6008,22 +6007,22 @@ yyreduce: if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str))) fatal_exit("out of memory adding dnscrypt-secret-key"); } -#line 6012 "util/configparser.c" /* yacc.c:1646 */ +#line 6011 "util/configparser.c" /* yacc.c:1646 */ break; case 552: -#line 2936 "./util/configparser.y" /* yacc.c:1646 */ +#line 2935 "./util/configparser.y" /* yacc.c:1646 */ { 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 6023 "util/configparser.c" /* yacc.c:1646 */ +#line 6022 "util/configparser.c" /* yacc.c:1646 */ break; case 553: -#line 2944 "./util/configparser.y" /* yacc.c:1646 */ +#line 2943 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnscrypt_shared_secret_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -6035,22 +6034,22 @@ yyreduce: } free((yyvsp[0].str)); } -#line 6039 "util/configparser.c" /* yacc.c:1646 */ +#line 6038 "util/configparser.c" /* yacc.c:1646 */ break; case 554: -#line 2957 "./util/configparser.y" /* yacc.c:1646 */ +#line 2956 "./util/configparser.y" /* yacc.c:1646 */ { 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 6050 "util/configparser.c" /* yacc.c:1646 */ +#line 6049 "util/configparser.c" /* yacc.c:1646 */ break; case 555: -#line 2965 "./util/configparser.y" /* yacc.c:1646 */ +#line 2964 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnscrypt_nonce_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -6062,19 +6061,19 @@ yyreduce: } free((yyvsp[0].str)); } -#line 6066 "util/configparser.c" /* yacc.c:1646 */ +#line 6065 "util/configparser.c" /* yacc.c:1646 */ break; case 556: -#line 2978 "./util/configparser.y" /* yacc.c:1646 */ +#line 2977 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(cachedb:)\n")); } -#line 6074 "util/configparser.c" /* yacc.c:1646 */ +#line 6073 "util/configparser.c" /* yacc.c:1646 */ break; case 564: -#line 2988 "./util/configparser.y" /* yacc.c:1646 */ +#line 2987 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_CACHEDB OUTYY(("P(backend:%s)\n", (yyvsp[0].str))); @@ -6088,11 +6087,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6092 "util/configparser.c" /* yacc.c:1646 */ +#line 6091 "util/configparser.c" /* yacc.c:1646 */ break; case 565: -#line 3003 "./util/configparser.y" /* yacc.c:1646 */ +#line 3002 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_CACHEDB OUTYY(("P(secret-seed:%s)\n", (yyvsp[0].str))); @@ -6106,11 +6105,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6110 "util/configparser.c" /* yacc.c:1646 */ +#line 6109 "util/configparser.c" /* yacc.c:1646 */ break; case 566: -#line 3018 "./util/configparser.y" /* yacc.c:1646 */ +#line 3017 "./util/configparser.y" /* yacc.c:1646 */ { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_server_host:%s)\n", (yyvsp[0].str))); @@ -6121,11 +6120,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6125 "util/configparser.c" /* yacc.c:1646 */ +#line 6124 "util/configparser.c" /* yacc.c:1646 */ break; case 567: -#line 3030 "./util/configparser.y" /* yacc.c:1646 */ +#line 3029 "./util/configparser.y" /* yacc.c:1646 */ { #if defined(USE_CACHEDB) && defined(USE_REDIS) int port; @@ -6139,11 +6138,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 6143 "util/configparser.c" /* yacc.c:1646 */ +#line 6142 "util/configparser.c" /* yacc.c:1646 */ break; case 568: -#line 3045 "./util/configparser.y" /* yacc.c:1646 */ +#line 3044 "./util/configparser.y" /* yacc.c:1646 */ { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_timeout:%s)\n", (yyvsp[0].str))); @@ -6155,11 +6154,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 6159 "util/configparser.c" /* yacc.c:1646 */ +#line 6158 "util/configparser.c" /* yacc.c:1646 */ break; case 569: -#line 3058 "./util/configparser.y" /* yacc.c:1646 */ +#line 3057 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tcp_connection_limit:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if (atoi((yyvsp[0].str)) < 0) @@ -6169,19 +6168,19 @@ yyreduce: fatal_exit("out of memory adding tcp connection limit"); } } -#line 6173 "util/configparser.c" /* yacc.c:1646 */ +#line 6172 "util/configparser.c" /* yacc.c:1646 */ break; case 570: -#line 3069 "./util/configparser.y" /* yacc.c:1646 */ +#line 3068 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(ipset:)\n")); } -#line 6181 "util/configparser.c" /* yacc.c:1646 */ +#line 6180 "util/configparser.c" /* yacc.c:1646 */ break; case 575: -#line 3078 "./util/configparser.y" /* yacc.c:1646 */ +#line 3077 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSET OUTYY(("P(name-v4:%s)\n", (yyvsp[0].str))); @@ -6195,11 +6194,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6199 "util/configparser.c" /* yacc.c:1646 */ +#line 6198 "util/configparser.c" /* yacc.c:1646 */ break; case 576: -#line 3093 "./util/configparser.y" /* yacc.c:1646 */ +#line 3092 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSET OUTYY(("P(name-v6:%s)\n", (yyvsp[0].str))); @@ -6213,11 +6212,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6217 "util/configparser.c" /* yacc.c:1646 */ +#line 6216 "util/configparser.c" /* yacc.c:1646 */ break; -#line 6221 "util/configparser.c" /* yacc.c:1646 */ +#line 6220 "util/configparser.c" /* yacc.c:1646 */ default: break; } /* User semantic actions sometimes alter yychar, and that requires @@ -6445,7 +6444,7 @@ yyreturn: #endif return yyresult; } -#line 3107 "./util/configparser.y" /* yacc.c:1906 */ +#line 3106 "./util/configparser.y" /* yacc.c:1906 */ /* parse helper routines could be here */ diff --git a/util/configparser.y b/util/configparser.y index b64147ed4..589caa195 100644 --- a/util/configparser.y +++ b/util/configparser.y @@ -351,10 +351,9 @@ content_auth: auth_name | auth_zonefile | auth_master | auth_url | rpz_tag: VAR_TAGS STRING_ARG { - size_t len; uint8_t* bitlist; + size_t len = 0; OUTYY(("P(server_local_zone_tag:%s)\n", $2)); - len = 0; bitlist = config_parse_taglist(cfg_parser->cfg, $2, &len); free($2); @@ -376,7 +375,7 @@ rpz_action_override: VAR_RPZ_ACTION_OVERRIDE STRING_ARG strcmp($2, "passthru")!=0 && strcmp($2, "drop")!=0 && strcmp($2, "cname")!=0 && strcmp($2, "disabled")!=0) { yyerror("rpz-action-override action: expected nxdomain, " - "nodata, passthru, drop cname or disabled"); + "nodata, passthru, drop, cname or disabled"); free($2); cfg_parser->cfg->auths->rpz_action_override = NULL; } diff --git a/util/data/dname.c b/util/data/dname.c index f025bf699..366d7a3f5 100644 --- a/util/data/dname.c +++ b/util/data/dname.c @@ -550,12 +550,8 @@ int dname_has_label(uint8_t* dname, uint8_t* label) { uint8_t lablen = *dname++; - while(lablen) { - if(*label == lablen && memcmp(dname, label+1, lablen) == 0) - return 1; - dname += lablen; - lablen = *dname++; - } + if(memlowercmp(dname, label, lablen) == 0) + return 1; return 0; } diff --git a/util/net_help.h b/util/net_help.h index 7a7437757..c7216817f 100644 --- a/util/net_help.h +++ b/util/net_help.h @@ -473,6 +473,9 @@ void listen_sslctx_delete_ticket_keys(void); /** * RPZ format netblock to network byte order address and netblock + * example RPZ netblock format dnames: + * - 24.10.100.51.198.rpz-ip -> 198.51.100.10/24 + * - 32.10.zz.db8.2001.rpz-ip -> 2001:db8:0:0:0:0:0:10/32 * @param dname: the dname containing RPZ format netblock * @param addr: where to store sockaddr. * @param addrlen: length of stored sockaddr is returned. From 2abaca7a494f1adbc8aa43833a3482627e315dd7 Mon Sep 17 00:00:00 2001 From: Ralph Dolmans Date: Mon, 23 Dec 2019 17:35:11 +0100 Subject: [PATCH 33/56] - Fix dname_has_label() code review changes --- util/data/dname.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/util/data/dname.c b/util/data/dname.c index 366d7a3f5..d55b1358d 100644 --- a/util/data/dname.c +++ b/util/data/dname.c @@ -549,9 +549,13 @@ dname_lab_startswith(uint8_t* label, char* prefix, char** endptr) int dname_has_label(uint8_t* dname, uint8_t* label) { - uint8_t lablen = *dname++; - if(memlowercmp(dname, label, lablen) == 0) - return 1; + uint8_t lablen = *dname; + while(lablen) { + if(lablen == *label && memlowercmp(dname, label, lablen) == 0) + return 1; + dname += lablen; + lablen = *dname; + } return 0; } From e0982858920063bc521cb20d23c5a71141f33db5 Mon Sep 17 00:00:00 2001 From: Ralph Dolmans Date: Wed, 15 Jan 2020 22:42:18 +0100 Subject: [PATCH 34/56] - Implement RPZ CNAME target wildcard synthesis --- services/localzone.c | 59 +++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 56 insertions(+), 3 deletions(-) diff --git a/services/localzone.c b/services/localzone.c index bf1043825..4c094cc9d 100644 --- a/services/localzone.c +++ b/services/localzone.c @@ -1407,17 +1407,70 @@ local_data_answer(struct local_zone* z, struct module_env* env, lz_type == local_zone_inform_redirect) && qinfo->qtype != LDNS_RR_TYPE_CNAME && lr->rrset->rk.type == htons(LDNS_RR_TYPE_CNAME)) { + uint8_t* ctarget; + size_t ctargetlen = 0; + qinfo->local_alias = regional_alloc_zero(temp, sizeof(struct local_rrset)); if(!qinfo->local_alias) return 0; /* out of memory */ - qinfo->local_alias->rrset = - regional_alloc_init(temp, lr->rrset, sizeof(*lr->rrset)); + qinfo->local_alias->rrset = regional_alloc_init( + temp, lr->rrset, sizeof(*lr->rrset)); if(!qinfo->local_alias->rrset) return 0; /* out of memory */ - /* TODO local_alias->rrset change cnam etarget */ qinfo->local_alias->rrset->rk.dname = qinfo->qname; qinfo->local_alias->rrset->rk.dname_len = qinfo->qname_len; + get_cname_target(lr->rrset, &ctarget, &ctargetlen); + if(!ctargetlen) + return 0; /* invalid cname */ + if(dname_is_wild(ctarget)) { + /* synthesize cname target */ + struct packed_rrset_data* d; + uint8_t newtarget[LDNS_MAX_DOMAINLEN]; + /* -3 for wildcard label and root label from qname */ + size_t newtargetlen = qinfo->qname_len + ctargetlen - 3; + + log_assert(ctargetlen >= 3); + log_assert(qinfo->qname_len >= 1); + + if(newtargetlen > LDNS_MAX_DOMAINLEN) { + qinfo->local_alias = NULL; + local_error_encode(qinfo, env, edns, repinfo, + buf, temp, LDNS_RCODE_YXDOMAIN, + (LDNS_RCODE_YXDOMAIN|BIT_AA)); + return 1; + } + memset(&qinfo->local_alias->rrset->entry, 0, + sizeof(qinfo->local_alias->rrset->entry)); + qinfo->local_alias->rrset->entry.key = + qinfo->local_alias->rrset; + qinfo->local_alias->rrset->entry.hash = + rrset_key_hash(&qinfo->local_alias->rrset->rk); + d = (struct packed_rrset_data*)regional_alloc_zero(temp, + sizeof(struct packed_rrset_data) + sizeof(size_t) + + sizeof(uint8_t*) + sizeof(time_t) + sizeof(uint16_t) + + newtargetlen); + if(!d) + return 0; /* out of memory */ + qinfo->local_alias->rrset->entry.data = d; + d->ttl = 0; /* 0 for synthesized CNAME TTL */ + d->count = 1; + d->rrsig_count = 0; + d->trust = rrset_trust_ans_noAA; + d->rr_len = (size_t*)((uint8_t*)d + + sizeof(struct packed_rrset_data)); + d->rr_len[0] = newtargetlen + sizeof(uint16_t); + packed_rrset_ptr_fixup(d); + d->rr_ttl[0] = d->ttl; + sldns_write_uint16(d->rr_data[0], newtargetlen); + /* write qname */ + memmove(d->rr_data[0] + sizeof(uint16_t), qinfo->qname, + qinfo->qname_len - 1); + /* write cname target wilcard wildcard label */ + memmove(d->rr_data[0] + sizeof(uint16_t) + + qinfo->qname_len - 1, ctarget + 2, + ctargetlen - 2); + } return 1; } if(lz_type == local_zone_redirect || From 14913d75c081024a66c553de1d03c7bfdc569755 Mon Sep 17 00:00:00 2001 From: Ralph Dolmans Date: Wed, 15 Jan 2020 22:45:29 +0100 Subject: [PATCH 35/56] - processed RPZ review feedback - fix potential locking issue - add extra out of bound checks --- services/rpz.c | 46 +++++++++++++++++++++++----------------- util/data/dname.c | 12 +++++------ util/data/dname.h | 3 ++- util/data/packed_rrset.h | 1 + util/net_help.c | 30 +++++++++++++++++--------- util/net_help.h | 5 +++-- 6 files changed, 58 insertions(+), 39 deletions(-) diff --git a/services/rpz.c b/services/rpz.c index 92d3b8663..3bb41916b 100644 --- a/services/rpz.c +++ b/services/rpz.c @@ -529,7 +529,7 @@ rpz_insert_qname_trigger(struct rpz* r, uint8_t* dname, size_t dnamelen, /** Insert RR into RPZ's respip_set */ static int -rpz_insert_response_ip_trigger(struct rpz* r, uint8_t* dname, +rpz_insert_response_ip_trigger(struct rpz* r, uint8_t* dname, size_t dnamelen, enum rpz_action a, uint16_t rrtype, uint16_t rrclass, uint32_t ttl, uint8_t* rdata, size_t rdata_len, uint8_t* rr, size_t rr_len) { @@ -547,7 +547,7 @@ rpz_insert_response_ip_trigger(struct rpz* r, uint8_t* dname, return 0; } - if(!netblockdnametoaddr(dname, &addr, &addrlen, &net, &af)) + if(!netblockdnametoaddr(dname, dnamelen, &addr, &addrlen, &net, &af)) return 0; lock_rw_wrlock(&r->respip_set->lock); @@ -599,8 +599,6 @@ rpz_insert_rr(struct rpz* r, size_t aznamelen, uint8_t* dname, return 0; } t = rpz_dname_to_trigger(policydname, policydnamelen); - verbose(VERB_OPS, "RPZ: found trigger: %s", - rpz_trigger_to_string(t)); if(t == RPZ_INVALID_TRIGGER) { free(policydname); verbose(VERB_ALGO, "RPZ: skipping invalid trigger"); @@ -612,7 +610,7 @@ rpz_insert_rr(struct rpz* r, size_t aznamelen, uint8_t* dname, rr_len); } else if(t == RPZ_RESPONSE_IP_TRIGGER) { - rpz_insert_response_ip_trigger(r, policydname, + rpz_insert_response_ip_trigger(r, policydname, policydnamelen, a, rr_type, rr_class, rr_ttl, rdatawl, rdatalen, rr, rr_len); free(policydname); @@ -633,11 +631,13 @@ rpz_insert_rr(struct rpz* r, size_t aznamelen, uint8_t* dname, * @param qclass: qclass * @param only_exact: if 1 only excact (non wildcard) matches are returned * @param wr: get write lock for local-zone if 1, read lock if 0 + * @param zones_keep_lock: if set do not release the r->local_zones lock, this + * makes the caller of this function responsible for releasing the lock. * @return: NULL or local-zone holding rd or wr lock */ static struct local_zone* rpz_find_zone(struct rpz* r, uint8_t* qname, size_t qname_len, uint16_t qclass, - int only_exact, int wr) + int only_exact, int wr, int zones_keep_lock) { uint8_t* ce; size_t ce_len, ce_labs; @@ -661,7 +661,9 @@ rpz_find_zone(struct rpz* r, uint8_t* qname, size_t qname_len, uint16_t qclass, } else { lock_rw_rdlock(&z->lock); } - lock_rw_unlock(&r->local_zones->lock); + if(!zones_keep_lock) { + lock_rw_unlock(&r->local_zones->lock); + } if(exact) return z; @@ -685,10 +687,12 @@ rpz_find_zone(struct rpz* r, uint8_t* qname, size_t qname_len, uint16_t qclass, memmove(wc+2, ce, ce_len); lock_rw_unlock(&z->lock); - if(wr) { - lock_rw_wrlock(&r->local_zones->lock); - } else { - lock_rw_rdlock(&r->local_zones->lock); + if(!zones_keep_lock) { + if(wr) { + lock_rw_wrlock(&r->local_zones->lock); + } else { + lock_rw_rdlock(&r->local_zones->lock); + } } z = local_zones_find_le(r->local_zones, wc, ce_len+2, ce_labs+1, qclass, &exact); @@ -701,7 +705,9 @@ rpz_find_zone(struct rpz* r, uint8_t* qname, size_t qname_len, uint16_t qclass, } else { lock_rw_rdlock(&z->lock); } - lock_rw_unlock(&r->local_zones->lock); + if(!zones_keep_lock) { + lock_rw_unlock(&r->local_zones->lock); + } return z; } @@ -739,7 +745,6 @@ rpz_data_delete_rr(struct local_zone* z, uint8_t* policydname, /* no memory recycling for zone deletions ... */ if(prev) prev->next = p->next; else ld->rrsets = p->next; - } if(d->count > 1) { if(!local_rrset_remove_rr(d, index)) @@ -797,7 +802,7 @@ rpz_remove_qname_trigger(struct rpz* r, uint8_t* dname, size_t dnamelen, struct local_zone* z; int delete_zone = 1; z = rpz_find_zone(r, dname, dnamelen, rr_class, - 1 /* only exact */, 1 /* wr lock */); + 1 /* only exact */, 1 /* wr lock */, 1 /* keep lock*/); if(!z) { verbose(VERB_ALGO, "RPZ: cannot remove RR from IXFR, " "RPZ domain not found"); @@ -813,12 +818,13 @@ rpz_remove_qname_trigger(struct rpz* r, uint8_t* dname, size_t dnamelen, if(delete_zone) { local_zones_del_zone(r->local_zones, z); } + lock_rw_unlock(&r->local_zones->lock); return; } static void -rpz_remove_response_ip_trigger(struct rpz* r, uint8_t* dname, enum rpz_action a, - uint16_t rr_type, uint8_t* rdatawl, size_t rdatalen) +rpz_remove_response_ip_trigger(struct rpz* r, uint8_t* dname, size_t dnamelen, + enum rpz_action a, uint16_t rr_type, uint8_t* rdatawl, size_t rdatalen) { struct resp_addr* node; struct sockaddr_storage addr; @@ -826,7 +832,7 @@ rpz_remove_response_ip_trigger(struct rpz* r, uint8_t* dname, enum rpz_action a, int net, af; int delete_respip = 1; - if(!netblockdnametoaddr(dname, &addr, &addrlen, &net, &af)) + if(!netblockdnametoaddr(dname, dnamelen, &addr, &addrlen, &net, &af)) return; lock_rw_wrlock(&r->respip_set->lock); @@ -877,8 +883,8 @@ rpz_remove_rr(struct rpz* r, size_t aznamelen, uint8_t* dname, size_t dnamelen, rpz_remove_qname_trigger(r, policydname, policydnamelen, a, rr_type, rr_class, rdatawl, rdatalen); } else if(t == RPZ_RESPONSE_IP_TRIGGER) { - rpz_remove_response_ip_trigger(r, policydname, a, rr_type, - rdatawl, rdatalen); + rpz_remove_response_ip_trigger(r, policydname, policydnamelen, + a, rr_type, rdatawl, rdatalen); } free(policydname); } @@ -921,7 +927,7 @@ rpz_apply_qname_trigger(struct auth_zones* az, struct module_env* env, if(!r->taglist || taglist_intersect(r->taglist, r->taglistlen, taglist, taglen)) { z = rpz_find_zone(r, qinfo->qname, qinfo->qname_len, - qinfo->qclass, 0, 0); + qinfo->qclass, 0, 0, 0); if(z && r->action_override == RPZ_DISABLED_ACTION) { if(r->log) log_rpz_apply(z->name, diff --git a/util/data/dname.c b/util/data/dname.c index d55b1358d..7c119e439 100644 --- a/util/data/dname.c +++ b/util/data/dname.c @@ -547,14 +547,14 @@ dname_lab_startswith(uint8_t* label, char* prefix, char** endptr) } int -dname_has_label(uint8_t* dname, uint8_t* label) +dname_has_label(uint8_t* dname, size_t dnamelen, uint8_t* label) { - uint8_t lablen = *dname; - while(lablen) { - if(lablen == *label && memlowercmp(dname, label, lablen) == 0) + int len = *dname; + while(*dname && len <= dnamelen) { + if(*dname == *label && memlowercmp(dname, label, *dname) == 0) return 1; - dname += lablen; - lablen = *dname; + len += *dname; + dname += *dname; } return 0; } diff --git a/util/data/dname.h b/util/data/dname.h index a7939fb6e..e37c11822 100644 --- a/util/data/dname.h +++ b/util/data/dname.h @@ -199,10 +199,11 @@ int dname_lab_startswith(uint8_t* label, char* prefix, char** endptr); /** * Check if dname contains label * @param dname: dname + * @param dnamelen: length of dname * @param label: label to be checked for presence in dname * @return: 1 if dname has this label, 0 otherwise */ -int dname_has_label(uint8_t* dname, uint8_t* label); +int dname_has_label(uint8_t* dname, size_t dnamelen, uint8_t* label); /** * See if domain name d1 is a strict subdomain of d2. diff --git a/util/data/packed_rrset.h b/util/data/packed_rrset.h index 59693dbf6..729877bab 100644 --- a/util/data/packed_rrset.h +++ b/util/data/packed_rrset.h @@ -448,6 +448,7 @@ struct ub_packed_rrset_key* packed_rrset_copy_alloc( /** * Find RR index in packed rrset + * Raw comparison, does not canonicalize RDATA * @param d: packed rrset * @param rdata: RDATA of RR to find * @param len: length of rdata diff --git a/util/net_help.c b/util/net_help.c index 3e5965882..be284d581 100644 --- a/util/net_help.c +++ b/util/net_help.c @@ -285,19 +285,22 @@ int netblockstrtoaddr(const char* str, int port, struct sockaddr_storage* addr, } /* RPZ format address dname to network byte order address */ -static int ipdnametoaddr(uint8_t* dname, struct sockaddr_storage* addr, - socklen_t* addrlen, int* af) +static int ipdnametoaddr(uint8_t* dname, size_t dnamelen, + struct sockaddr_storage* addr, socklen_t* addrlen, int* af) { uint8_t* ia; size_t dnamelabs = dname_count_labels(dname); uint8_t lablen; char* e = NULL; int z = 0; + int len = 0; int i; *af = AF_INET; - if(dnamelabs > 6 || dname_has_label(dname, (uint8_t*)"\002zz")) { + if(dnamelabs > 6 || + dname_has_label(dname, dnamelen, (uint8_t*)"\002zz")) { *af = AF_INET6; } + len = *dname; lablen = *dname++; i = (*af == AF_INET) ? 3 : 15; if(*af == AF_INET6) { @@ -313,21 +316,21 @@ static int ipdnametoaddr(uint8_t* dname, struct sockaddr_storage* addr, sa->sin_family = AF_INET; ia = (uint8_t*)&sa->sin_addr; } - while(lablen && i >= 0) { - char buff[lablen+1]; + while(lablen && i >= 0 && len <= dnamelen) { + char buff[LDNS_MAX_LABELLEN+1]; uint16_t chunk; /* big enough to not overflow on IPv6 hextet */ if((*af == AF_INET && (lablen > 3 || dnamelabs > 6)) || (*af == AF_INET6 && (lablen > 4 || dnamelabs > 10))) { return 0; } if(memcmp(dname, "zz", 2) == 0 && *af == AF_INET6) { - /* add one or more 0 labels */ + /* Add one or more 0 labels. Address is initialised at + * 0, so just skip the zero part. */ int zl = 11 - dnamelabs; if(z || zl < 0) return 0; z = 1; i -= (zl*2); - memset(ia+(i+1), 0, zl*2); } else { memcpy(buff, dname, lablen); buff[lablen] = '\0'; @@ -335,9 +338,11 @@ static int ipdnametoaddr(uint8_t* dname, struct sockaddr_storage* addr, if(!e || *e != '\0' || (*af == AF_INET && chunk > 255)) return 0; if(*af == AF_INET) { + log_assert(i < 4 && i >= 0); ia[i] = (uint8_t)chunk; i--; } else { + log_assert(i < 15 && i >= 1); /* ia in network byte order */ ia[i-1] = (uint8_t)(chunk >> 8); ia[i] = (uint8_t)(chunk & 0x00FF); @@ -346,6 +351,7 @@ static int ipdnametoaddr(uint8_t* dname, struct sockaddr_storage* addr, } dname += lablen; lablen = *dname++; + len += lablen; } if(i != -1) /* input too short */ @@ -353,8 +359,8 @@ static int ipdnametoaddr(uint8_t* dname, struct sockaddr_storage* addr, return 1; } -int netblockdnametoaddr(uint8_t* dname, struct sockaddr_storage* addr, - socklen_t* addrlen, int* net, int* af) +int netblockdnametoaddr(uint8_t* dname, size_t dnamelen, + struct sockaddr_storage* addr, socklen_t* addrlen, int* net, int* af) { char buff[3 /* 3 digit netblock */ + 1]; if(*dname > 3) @@ -363,9 +369,13 @@ int netblockdnametoaddr(uint8_t* dname, struct sockaddr_storage* addr, memcpy(buff, dname+1, *dname); buff[*dname] = '\0'; *net = atoi(buff); + if(*net == 0 && strcmp(buff, "0") != 0) + return 0; dname += *dname; dname++; - if(!ipdnametoaddr(dname, addr, addrlen, af)) + if(!ipdnametoaddr(dname, dnamelen, addr, addrlen, af)) + return 0; + if((*af == AF_INET6 && *net > 128) || (*af == AF_INET && *net > 32)) return 0; return 1; } diff --git a/util/net_help.h b/util/net_help.h index c7216817f..7a33a7203 100644 --- a/util/net_help.h +++ b/util/net_help.h @@ -477,12 +477,13 @@ void listen_sslctx_delete_ticket_keys(void); * - 24.10.100.51.198.rpz-ip -> 198.51.100.10/24 * - 32.10.zz.db8.2001.rpz-ip -> 2001:db8:0:0:0:0:0:10/32 * @param dname: the dname containing RPZ format netblock + * @param dnamelen: length of dname * @param addr: where to store sockaddr. * @param addrlen: length of stored sockaddr is returned. * @param net: where to store netmask * @param af: where to store address family. * @return 0 on error. */ -int netblockdnametoaddr(uint8_t* dname, struct sockaddr_storage* addr, - socklen_t* addrlen, int* net, int* af); +int netblockdnametoaddr(uint8_t* dname, size_t dnamelen, + struct sockaddr_storage* addr, socklen_t* addrlen, int* net, int* af); #endif /* NET_HELP_H */ From 344f12dd992286b36fc0679d50389782b33d6308 Mon Sep 17 00:00:00 2001 From: Ralph Dolmans Date: Wed, 15 Jan 2020 23:03:44 +0100 Subject: [PATCH 36/56] - fix compiler warnings --- services/localzone.c | 1 - services/rpz.c | 1 + util/data/dname.c | 2 +- util/net_help.c | 2 +- 4 files changed, 3 insertions(+), 3 deletions(-) diff --git a/services/localzone.c b/services/localzone.c index 4c094cc9d..9aa7bc247 100644 --- a/services/localzone.c +++ b/services/localzone.c @@ -1426,7 +1426,6 @@ local_data_answer(struct local_zone* z, struct module_env* env, if(dname_is_wild(ctarget)) { /* synthesize cname target */ struct packed_rrset_data* d; - uint8_t newtarget[LDNS_MAX_DOMAINLEN]; /* -3 for wildcard label and root label from qname */ size_t newtargetlen = qinfo->qname_len + ctargetlen - 3; diff --git a/services/rpz.c b/services/rpz.c index 3bb41916b..6622606d3 100644 --- a/services/rpz.c +++ b/services/rpz.c @@ -101,6 +101,7 @@ rpz_trigger_to_string(enum rpz_trigger r) case RPZ_RESPONSE_IP_TRIGGER: return "response_ip"; case RPZ_NSDNAME_TRIGGER: return "nsdname"; case RPZ_NSIP_TRIGGER: return "nsip"; + case RPZ_INVALID_TRIGGER: return "invalid"; } return "unknown"; } diff --git a/util/data/dname.c b/util/data/dname.c index 7c119e439..8a2db758c 100644 --- a/util/data/dname.c +++ b/util/data/dname.c @@ -549,7 +549,7 @@ dname_lab_startswith(uint8_t* label, char* prefix, char** endptr) int dname_has_label(uint8_t* dname, size_t dnamelen, uint8_t* label) { - int len = *dname; + size_t len = *dname; while(*dname && len <= dnamelen) { if(*dname == *label && memlowercmp(dname, label, *dname) == 0) return 1; diff --git a/util/net_help.c b/util/net_help.c index be284d581..2b624be8f 100644 --- a/util/net_help.c +++ b/util/net_help.c @@ -293,7 +293,7 @@ static int ipdnametoaddr(uint8_t* dname, size_t dnamelen, uint8_t lablen; char* e = NULL; int z = 0; - int len = 0; + size_t len = 0; int i; *af = AF_INET; if(dnamelabs > 6 || From 16543731f56c0805cf115cf8701b7e0d7ba7862f Mon Sep 17 00:00:00 2001 From: Ralph Dolmans Date: Wed, 15 Jan 2020 23:14:24 +0100 Subject: [PATCH 37/56] - Fix doxygen issue --- services/localzone.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/localzone.h b/services/localzone.h index b47c01f57..bb3593936 100644 --- a/services/localzone.h +++ b/services/localzone.h @@ -583,7 +583,7 @@ enum respip_action { * @param temp: scratchpad region * @param labs: number of labels in qname * @param ldp: where to store local data - * @param lzt: type of local zone + * @param lz_type: type of local zone * @param tag: matching tag index * @param tag_datas: alc specific tag data list * @param tag_datas_size: size of tag_datas From 627285af23f77be115a29aeda296b694d332f0e8 Mon Sep 17 00:00:00 2001 From: Ralph Dolmans Date: Wed, 15 Jan 2020 23:19:24 +0100 Subject: [PATCH 38/56] - Fix faulty assert --- util/net_help.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/util/net_help.c b/util/net_help.c index 2b624be8f..21367ebd9 100644 --- a/util/net_help.c +++ b/util/net_help.c @@ -342,7 +342,7 @@ static int ipdnametoaddr(uint8_t* dname, size_t dnamelen, ia[i] = (uint8_t)chunk; i--; } else { - log_assert(i < 15 && i >= 1); + log_assert(i < 16 && i >= 1); /* ia in network byte order */ ia[i-1] = (uint8_t)(chunk >> 8); ia[i] = (uint8_t)(chunk & 0x00FF); From 53d85f903ce96faa215e67e267e27a3e5de33c3b Mon Sep 17 00:00:00 2001 From: Ralph Dolmans Date: Thu, 16 Jan 2020 00:18:00 +0100 Subject: [PATCH 39/56] try to understand travis --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 45a7cb153..afe716aec 100644 --- a/.travis.yml +++ b/.travis.yml @@ -13,4 +13,5 @@ script: - ./configure --enable-debug --disable-flto - make - make test + - ./testbound -p ./testdata/rpz_respip.rpl - (cd testdata/clang-analysis.tdir; bash clang-analysis.test) From fd6456dd563acb80758ada32ce26f0a5fc0c1985 Mon Sep 17 00:00:00 2001 From: Ralph Dolmans Date: Thu, 16 Jan 2020 00:51:42 +0100 Subject: [PATCH 40/56] attemp to get more info out of travis --- .travis.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index afe716aec..f7ded5e56 100644 --- a/.travis.yml +++ b/.travis.yml @@ -9,9 +9,10 @@ addons: - libevent-dev - libexpat-dev - clang + - gdb script: - ./configure --enable-debug --disable-flto - make - make test - - ./testbound -p ./testdata/rpz_respip.rpl + - gdb -batch ./testbound -ex "r -p testdata/rpz_respip.rpl" -ex "bt" - (cd testdata/clang-analysis.tdir; bash clang-analysis.test) From 72c4c6b30ce7ae02ab2f383f35f550ef218ec8a6 Mon Sep 17 00:00:00 2001 From: Ralph Dolmans Date: Thu, 16 Jan 2020 01:36:07 +0100 Subject: [PATCH 41/56] - Fix the dname_has_label fix --- util/data/dname.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/util/data/dname.c b/util/data/dname.c index 793521276..10da71f6b 100644 --- a/util/data/dname.c +++ b/util/data/dname.c @@ -563,10 +563,11 @@ dname_has_label(uint8_t* dname, size_t dnamelen, uint8_t* label) { size_t len = *dname; while(*dname && len <= dnamelen) { - if(*dname == *label && memlowercmp(dname, label, *dname) == 0) + if(*dname == *label && memlowercmp(dname+1, label+1, *dname) == 0) return 1; len += *dname; dname += *dname; + dname++; } return 0; } From 24131ca29e3d682477c60e76760fbca30ee9c4af Mon Sep 17 00:00:00 2001 From: Ralph Dolmans Date: Thu, 16 Jan 2020 01:41:25 +0100 Subject: [PATCH 42/56] Revert travis verbosity --- .travis.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index f7ded5e56..45a7cb153 100644 --- a/.travis.yml +++ b/.travis.yml @@ -9,10 +9,8 @@ addons: - libevent-dev - libexpat-dev - clang - - gdb script: - ./configure --enable-debug --disable-flto - make - make test - - gdb -batch ./testbound -ex "r -p testdata/rpz_respip.rpl" -ex "bt" - (cd testdata/clang-analysis.tdir; bash clang-analysis.test) From b78373216d706ed4dca05501e7d1c2d9680065ff Mon Sep 17 00:00:00 2001 From: Ralph Dolmans Date: Thu, 16 Jan 2020 12:39:23 +0100 Subject: [PATCH 43/56] - Add cname target wc synth. to testbound test --- testdata/rpz_qname.rpl | 80 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 79 insertions(+), 1 deletion(-) diff --git a/testdata/rpz_qname.rpl b/testdata/rpz_qname.rpl index 6f93d955a..7940e9392 100644 --- a/testdata/rpz_qname.rpl +++ b/testdata/rpz_qname.rpl @@ -35,17 +35,22 @@ rpz2 3600 IN SOA ns1.rpz.example.com. hostmaster.rpz.example.com. ( $ORIGIN rpz2.example.com. a TXT "local data 2nd zone" d TXT "local data 2nd zone" +e CNAME *.a.example. +*.e CNAME *.b.example. drop CNAME rpz-drop. TEMPFILE_END stub-zone: name: "a." stub-addr: 10.20.30.40 +stub-zone: + name: "example." + stub-addr: 10.20.30.50 CONFIG_END SCENARIO_BEGIN Test all support RPZ action for QNAME trigger -; c. +; a. RANGE_BEGIN 0 100 ADDRESS 10.20.30.40 ENTRY_BEGIN @@ -82,6 +87,43 @@ ENTRY_END RANGE_END +; example. +RANGE_BEGIN 0 100 + ADDRESS 10.20.30.50 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example. IN NS +SECTION ANSWER +example. IN NS ns.example. +SECTION ADDITIONAL +ns.example IN A 10.20.30.50 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +e.a.example. IN TXT +SECTION ANSWER +e.a.example. IN TXT "e.a.example. answer from upstream ns" +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +something.e.b.example. IN TXT +SECTION ANSWER +something.e.b.example. IN TXT "*.b.example. answer from upstream ns" +ENTRY_END + +RANGE_END + STEP 10 QUERY ENTRY_BEGIN REPLY RD @@ -216,6 +258,42 @@ SECTION ANSWER d. IN TXT "local data 2nd zone" ENTRY_END +STEP 82 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +e. IN TXT +ENTRY_END + +STEP 83 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA AA NOERROR +SECTION QUESTION +e. IN TXT +SECTION ANSWER +e. IN CNAME e.a.example. +e.a.example. IN TXT "e.a.example. answer from upstream ns" +ENTRY_END + +STEP 84 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +something.e. IN TXT +ENTRY_END + +STEP 85 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA AA NOERROR +SECTION QUESTION +something.e. IN TXT +SECTION ANSWER +something.e. IN CNAME something.e.b.example. +something.e.b.example. IN TXT "*.b.example. answer from upstream ns" +ENTRY_END + ; deny zone STEP 90 QUERY ENTRY_BEGIN From bda4c4a375c20105b287c29d0b4ddef3028fe04b Mon Sep 17 00:00:00 2001 From: Ralph Dolmans Date: Thu, 16 Jan 2020 17:50:44 +0100 Subject: [PATCH 44/56] - improve dname_has_label(), add unit test --- testcode/unitdname.c | 28 ++++++++++++++++++++++++++++ util/data/dname.c | 12 ++++++++++-- 2 files changed, 38 insertions(+), 2 deletions(-) diff --git a/testcode/unitdname.c b/testcode/unitdname.c index 238c3edf7..b0c3fb057 100644 --- a/testcode/unitdname.c +++ b/testcode/unitdname.c @@ -794,6 +794,33 @@ dname_test_valid(void) , 4096) == 0); } +/** Test dname_has_label */ +static void +dname_test_has_label(void) +{ + unit_show_func("util/data/dname.c", "dname_has_label"); + /* label past root label */ + unit_assert(dname_has_label((uint8_t*)"\01a\0\01c", 5, (uint8_t*)"\01c") == 0); + /* label not found */ + unit_assert(dname_has_label((uint8_t*)"\02ab\01c\0", 6, (uint8_t*)"\01e") == 0); + /* buffer too short */ + unit_assert(dname_has_label((uint8_t*)"\02ab\01c\0", 5, (uint8_t*)"\0") == 0); + unit_assert(dname_has_label((uint8_t*)"\1a\0", 2, (uint8_t*)"\0") == 0); + unit_assert(dname_has_label((uint8_t*)"\02ab\01c", 4, (uint8_t*)"\01c") == 0); + unit_assert(dname_has_label((uint8_t*)"\02ab\03qwe\06oqieur\03def\01c\0", 19, (uint8_t*)"\01c") == 0); + + /* positive cases */ + unit_assert(dname_has_label((uint8_t*)"\0", 1, (uint8_t*)"\0") == 1); + unit_assert(dname_has_label((uint8_t*)"\1a\0", 3, (uint8_t*)"\0") == 1); + unit_assert(dname_has_label((uint8_t*)"\01a\0\01c", 5, (uint8_t*)"\0") == 1); + unit_assert(dname_has_label((uint8_t*)"\02ab\01c", 5, (uint8_t*)"\01c") == 1); + unit_assert(dname_has_label((uint8_t*)"\02ab\01c\0", 10, (uint8_t*)"\0") == 1); + unit_assert(dname_has_label((uint8_t*)"\02ab\01c\0", 7, (uint8_t*)"\0") == 1); + unit_assert(dname_has_label((uint8_t*)"\02ab\03qwe\06oqieur\03def\01c\0", 22, (uint8_t*)"\03def") == 1); + unit_assert(dname_has_label((uint8_t*)"\02ab\03qwe\06oqieur\03def\01c\0", 22, (uint8_t*)"\02ab") == 1); + unit_assert(dname_has_label((uint8_t*)"\02ab\03qwe\06oqieur\03def\01c\0", 22, (uint8_t*)"\01c") == 1); +} + /** test pkt_dname_tolower */ static void dname_test_pdtl(sldns_buffer* loopbuf, sldns_buffer* boundbuf) @@ -855,6 +882,7 @@ void dname_test(void) dname_test_canoncmp(); dname_test_topdomain(); dname_test_valid(); + dname_test_has_label(); sldns_buffer_free(buff); sldns_buffer_free(loopbuf); sldns_buffer_free(boundbuf); diff --git a/util/data/dname.c b/util/data/dname.c index 10da71f6b..239a56ac1 100644 --- a/util/data/dname.c +++ b/util/data/dname.c @@ -562,12 +562,20 @@ int dname_has_label(uint8_t* dname, size_t dnamelen, uint8_t* label) { size_t len = *dname; - while(*dname && len <= dnamelen) { - if(*dname == *label && memlowercmp(dname+1, label+1, *dname) == 0) + while(len <= dnamelen) { + if(!(*dname)) { + if(*dname == *label) + return 1; /* empty label match */ + /* termination label found, stop iterating */ + return 0; + } + if(*dname == *label && *label && + memlowercmp(dname+1, label+1, *dname) == 0) return 1; len += *dname; dname += *dname; dname++; + len++; } return 0; } From e00ce7e02eeb2f68f183d94151da4b9557680507 Mon Sep 17 00:00:00 2001 From: Ralph Dolmans Date: Thu, 16 Jan 2020 17:52:09 +0100 Subject: [PATCH 45/56] - extend rpz_respip.rpl with ipv6 without zz label case --- testdata/rpz_respip.rpl | 34 +++++++++++++++++++++++++++++++--- 1 file changed, 31 insertions(+), 3 deletions(-) diff --git a/testdata/rpz_respip.rpl b/testdata/rpz_respip.rpl index de2117b4b..94f998be6 100644 --- a/testdata/rpz_respip.rpl +++ b/testdata/rpz_respip.rpl @@ -25,6 +25,7 @@ $ORIGIN rpz.example.com. 64.zz.bb.aa.db8.2001.rpz-ip CNAME rpz-drop. 128.1.zz.cc.bb.aa.db8.2001.rpz-ip CNAME rpz-passthru. 128.123.zz.cc.bb.aa.db8.2001.rpz-ip AAAA 2001:db8::123 +128.124.0.0.cc.bb.aa.db8.2001.rpz-ip AAAA 2001:db8::124 TEMPFILE_END @@ -206,6 +207,16 @@ SECTION ANSWER g. IN AAAA 2001:db8:aa:bb:cc::123 ENTRY_END +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +h. IN AAAA +SECTION ANSWER +h. IN AAAA 2001:db8:aa:bb:cc::124 +ENTRY_END + RANGE_END STEP 1 QUERY @@ -404,18 +415,35 @@ SECTION ANSWER g. IN AAAA 2001:db8::123 ENTRY_END -; should be dropped STEP 25 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION +h. IN AAAA +ENTRY_END + +STEP 26 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +h. IN AAAA +SECTION ANSWER +h. IN AAAA 2001:db8::124 +ENTRY_END + +; should be dropped +STEP 27 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION e. IN A ENTRY_END -STEP 26 QUERY +STEP 28 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION e. IN AAAA ENTRY_END -STEP 27 TIME_PASSES ELAPSE 12 +STEP 29 TIME_PASSES ELAPSE 12 SCENARIO_END From 9df07b403694df1ce2c29eaf68d133c83af0f8b7 Mon Sep 17 00:00:00 2001 From: Ralph Dolmans Date: Tue, 28 Jan 2020 18:35:04 +0100 Subject: [PATCH 46/56] - Address review feedback --- services/rpz.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/services/rpz.c b/services/rpz.c index 97c2cff5c..72397998f 100644 --- a/services/rpz.c +++ b/services/rpz.c @@ -456,7 +456,7 @@ strip_dname_origin(uint8_t* dname, size_t dnamelen, size_t originlen, if(newdnamelen+1 > maxnewdnamelen) return 0; memmove(newdname, dname, newdnamelen); - memset(newdname+newdnamelen, 0, 1); + newdname[newdnamelen] = 0; return newdnamelen + 1; /* + 1 for root label */ } @@ -619,7 +619,7 @@ rpz_insert_rr(struct rpz* r, size_t aznamelen, uint8_t* dname, } else { free(policydname); - verbose(VERB_ALGO, "RPZ: skipping unusupported trigger: %s", + verbose(VERB_ALGO, "RPZ: skipping unsupported trigger: %s", rpz_trigger_to_string(t)); } return 1; From ef120738c00c83117060804d734976da898d365f Mon Sep 17 00:00:00 2001 From: Ralph Dolmans Date: Wed, 29 Jan 2020 10:57:29 +0100 Subject: [PATCH 47/56] - Fix RPZ's get_tld_label maxdnamelen check --- services/rpz.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/services/rpz.c b/services/rpz.c index 72397998f..37ea2aa53 100644 --- a/services/rpz.c +++ b/services/rpz.c @@ -118,13 +118,17 @@ get_tld_label(uint8_t* dname, size_t maxdnamelen) uint8_t* prevlab = dname; size_t dnamelen = 0; + /* one byte needed for label length */ + if(dnamelen+1 > maxdnamelen) + return NULL; + /* only root label */ if(*dname == 0) return NULL; while(*dname) { dnamelen += ((size_t)*dname)+1; - if(dnamelen > maxdnamelen) + if(dnamelen+1 > maxdnamelen) return NULL; dname = dname+((size_t)*dname)+1; if(*dname != 0) From 1d9185229ec11592b54b4afcc0aa16197b0ab857 Mon Sep 17 00:00:00 2001 From: Ralph Dolmans Date: Wed, 29 Jan 2020 11:30:22 +0100 Subject: [PATCH 48/56] - Make dname_has_label's dnamelen check work with 0 length --- testcode/unitdname.c | 1 + util/data/dname.c | 8 +++++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/testcode/unitdname.c b/testcode/unitdname.c index b0c3fb057..6769127b9 100644 --- a/testcode/unitdname.c +++ b/testcode/unitdname.c @@ -806,6 +806,7 @@ dname_test_has_label(void) /* buffer too short */ unit_assert(dname_has_label((uint8_t*)"\02ab\01c\0", 5, (uint8_t*)"\0") == 0); unit_assert(dname_has_label((uint8_t*)"\1a\0", 2, (uint8_t*)"\0") == 0); + unit_assert(dname_has_label((uint8_t*)"\0", 0, (uint8_t*)"\0") == 0); unit_assert(dname_has_label((uint8_t*)"\02ab\01c", 4, (uint8_t*)"\01c") == 0); unit_assert(dname_has_label((uint8_t*)"\02ab\03qwe\06oqieur\03def\01c\0", 19, (uint8_t*)"\01c") == 0); diff --git a/util/data/dname.c b/util/data/dname.c index 239a56ac1..c8f09ddbc 100644 --- a/util/data/dname.c +++ b/util/data/dname.c @@ -561,7 +561,13 @@ dname_lab_startswith(uint8_t* label, char* prefix, char** endptr) int dname_has_label(uint8_t* dname, size_t dnamelen, uint8_t* label) { - size_t len = *dname; + size_t len; + + /* 1 byte needed for the label length */ + if(dnamelen < 1) + return 0; + + len = *dname; while(len <= dnamelen) { if(!(*dname)) { if(*dname == *label) From 7da16febc40b81210544870beef5f7a89ebaa099 Mon Sep 17 00:00:00 2001 From: Ralph Dolmans Date: Wed, 29 Jan 2020 12:07:13 +0100 Subject: [PATCH 49/56] - Use consistent dname buffer sizes for RPZ --- services/rpz.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/rpz.c b/services/rpz.c index 37ea2aa53..ca3f1bfe6 100644 --- a/services/rpz.c +++ b/services/rpz.c @@ -647,7 +647,7 @@ rpz_find_zone(struct rpz* r, uint8_t* qname, size_t qname_len, uint16_t qclass, { uint8_t* ce; size_t ce_len, ce_labs; - uint8_t wc[LDNS_MAX_DOMAINLEN]; + uint8_t wc[LDNS_MAX_DOMAINLEN+1]; int exact; struct local_zone* z = NULL; if(wr) { From 88a706acf8f2af97b86052a2f4b441567d813151 Mon Sep 17 00:00:00 2001 From: Ralph Dolmans Date: Wed, 29 Jan 2020 15:16:44 +0100 Subject: [PATCH 50/56] - Add extra dnamelen checks to ipdnametoaddr and netblockdnametoaddr --- util/net_help.c | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/util/net_help.c b/util/net_help.c index 68a67fbd2..c1ff25d63 100644 --- a/util/net_help.c +++ b/util/net_help.c @@ -296,6 +296,11 @@ static int ipdnametoaddr(uint8_t* dname, size_t dnamelen, size_t len = 0; int i; *af = AF_INET; + + /* need 1 byte for label length */ + if(dnamelen < 1) + return 0; + if(dnamelabs > 6 || dname_has_label(dname, dnamelen, (uint8_t*)"\002zz")) { *af = AF_INET6; @@ -363,17 +368,23 @@ int netblockdnametoaddr(uint8_t* dname, size_t dnamelen, struct sockaddr_storage* addr, socklen_t* addrlen, int* net, int* af) { char buff[3 /* 3 digit netblock */ + 1]; - if(*dname > 3) + size_t nlablen; + if(dnamelen < 1 || *dname > 3) /* netblock invalid */ return 0; - memcpy(buff, dname+1, *dname); - buff[*dname] = '\0'; + nlablen = *dname; + + if(dnamelen < 1 + nlablen) + return 0; + + memcpy(buff, dname+1, nlablen); + buff[nlablen] = '\0'; *net = atoi(buff); if(*net == 0 && strcmp(buff, "0") != 0) return 0; - dname += *dname; + dname += nlablen; dname++; - if(!ipdnametoaddr(dname, dnamelen, addr, addrlen, af)) + if(!ipdnametoaddr(dname, dnamelen-1-nlablen, addr, addrlen, af)) return 0; if((*af == AF_INET6 && *net > 128) || (*af == AF_INET && *net > 32)) return 0; From 3609287344b3e559cbaa8859ee0006235bb4b56d Mon Sep 17 00:00:00 2001 From: Ralph Dolmans Date: Thu, 30 Jan 2020 14:05:56 +0100 Subject: [PATCH 51/56] - Fix RPZ stats RPZ_NO_OVERRIDE_ACTION check --- daemon/remote.c | 2 +- smallapp/unbound-control.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/daemon/remote.c b/daemon/remote.c index 6fc152858..68186937a 100644 --- a/daemon/remote.c +++ b/daemon/remote.c @@ -1048,7 +1048,7 @@ print_ext(RES* ssl, struct ub_stats_info* s) (unsigned)s->svr.key_cache_count)) return 0; /* applied RPZ actions */ for(i=0; isvr.rpz_action[i] == RPZ_NO_OVERRIDE_ACTION) + if(i == RPZ_NO_OVERRIDE_ACTION) continue; if(inhibit_zero && s->svr.rpz_action[i] == 0) continue; diff --git a/smallapp/unbound-control.c b/smallapp/unbound-control.c index f97aa393f..c6263c824 100644 --- a/smallapp/unbound-control.c +++ b/smallapp/unbound-control.c @@ -375,7 +375,7 @@ static void print_extended(struct ub_stats_info* s) PR_UL("key.cache.count", s->svr.key_cache_count); /* applied RPZ actions */ for(i=0; isvr.rpz_action[i] == RPZ_NO_OVERRIDE_ACTION) + if(i == RPZ_NO_OVERRIDE_ACTION) continue; if(inhibit_zero && s->svr.rpz_action[i] == 0) continue; From 833c4b1300f33fd07c336f65685084c368ecee6b Mon Sep 17 00:00:00 2001 From: Ralph Dolmans Date: Thu, 30 Jan 2020 14:25:45 +0100 Subject: [PATCH 52/56] - Revert addition of cscope.out to project .gitignore, should be in global ignore list --- .gitignore | 1 - 1 file changed, 1 deletion(-) diff --git a/.gitignore b/.gitignore index 084116535..22fedf0d7 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,5 @@ *.lo *.o -cscope.out /.libs/ /.source /Makefile From b9c9fc066f582f0dd5abbe86a27f2d3079b1c0f9 Mon Sep 17 00:00:00 2001 From: Ralph Dolmans Date: Thu, 30 Jan 2020 14:46:39 +0100 Subject: [PATCH 53/56] - Fix RPZ locking issues on error conditions --- respip/respip.c | 2 +- services/rpz.c | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/respip/respip.c b/respip/respip.c index 5f4ddf2ae..7147a051c 100644 --- a/respip/respip.c +++ b/respip/respip.c @@ -957,6 +957,7 @@ respip_rewrite_reply(const struct query_info* qinfo, region, &rpz_used)) { log_err("out of memory"); lock_rw_unlock(&raddr->lock); + lock_rw_unlock(&az->rpz_lock); return 0; } if(!rpz_used) { @@ -1099,7 +1100,6 @@ respip_operate(struct module_qstate* qstate, enum module_ev event, int id, if (actinfo.action == respip_always_deny || (new_rep == qstate->return_msg->rep && (actinfo.action == respip_deny || - actinfo.action == respip_deny || actinfo.action == respip_inform_deny))) { /* for deny-variant actions (unless response-ip * data is applied), mark the query state so diff --git a/services/rpz.c b/services/rpz.c index ca3f1bfe6..1047852ad 100644 --- a/services/rpz.c +++ b/services/rpz.c @@ -681,11 +681,17 @@ rpz_find_zone(struct rpz* r, uint8_t* qname, size_t qname_len, uint16_t qclass, ce = dname_get_shared_topdomain(z->name, qname); if(!ce /* should not happen */ || !*ce /* root */) { lock_rw_unlock(&z->lock); + if(zones_keep_lock) { + lock_rw_unlock(&r->local_zones->lock); + } return NULL; } ce_labs = dname_count_size_labels(ce, &ce_len); if(ce_len+2 > sizeof(wc)) { lock_rw_unlock(&z->lock); + if(zones_keep_lock) { + lock_rw_unlock(&r->local_zones->lock); + } return NULL; } wc[0] = 1; /* length of wildcard label */ From 2c459443da307f4b4cdb233a2bcee3cc3a3eae72 Mon Sep 17 00:00:00 2001 From: Ralph Dolmans Date: Thu, 30 Jan 2020 16:04:27 +0100 Subject: [PATCH 54/56] - Add changelog entry for RPZ merge --- doc/Changelog | 2 ++ 1 file changed, 2 insertions(+) diff --git a/doc/Changelog b/doc/Changelog index 932595208..1b78c8d6d 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -2,6 +2,8 @@ - Fix memory leak in error condition remote.c - Fix double free in error condition view.c - Fix memory leak in do_auth_zone_transfer on success + - Merge RPZ support into master. Only QNAME and Response IP triggers are + supported. 30 January 2020: Wouter - Fix subnet tests for disabled DSA algorithm by default. From 833021d84d09131e8c9dec6052e4f4e59e6470e8 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Thu, 30 Jan 2020 16:12:39 +0100 Subject: [PATCH 55/56] - Add build rule for ipset to Makefile --- Makefile.in | 3 +++ doc/Changelog | 1 + 2 files changed, 4 insertions(+) diff --git a/Makefile.in b/Makefile.in index e81131468..36e9b2f38 100644 --- a/Makefile.in +++ b/Makefile.in @@ -643,6 +643,9 @@ depend: fi rm -f $(DEPEND_TMP) $(DEPEND_TMP2) +# build rules +ipset.lo ipset.o: $(srcdir)/ipset/ipset.c + # Dependencies dns.lo dns.o: $(srcdir)/services/cache/dns.c config.h $(srcdir)/iterator/iter_delegpt.h $(srcdir)/util/log.h \ $(srcdir)/iterator/iter_utils.h $(srcdir)/iterator/iter_resptype.h $(srcdir)/validator/val_nsec.h \ diff --git a/doc/Changelog b/doc/Changelog index 1b78c8d6d..2bf844243 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -12,6 +12,7 @@ and Frzk. Updates the unbound.service systemd file and adds a portable systemd service file. - updated .gitignore for added contrib file. + - Add build rule for ipset to Makefile 29 January 2020: Ralph - Merge PR#156 from Alexander Berkes; Added unbound-control From a4244e79ca9a8e4d5fae2057a99e318417a88e1b Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Thu, 30 Jan 2020 16:15:51 +0100 Subject: [PATCH 56/56] - Add getentropy_freebsd.o to Makefile dependencies. --- Makefile.in | 1 + doc/Changelog | 1 + 2 files changed, 2 insertions(+) diff --git a/Makefile.in b/Makefile.in index 36e9b2f38..a20058cc2 100644 --- a/Makefile.in +++ b/Makefile.in @@ -1507,6 +1507,7 @@ snprintf.lo snprintf.o: $(srcdir)/compat/snprintf.c config.h strlcat.lo strlcat.o: $(srcdir)/compat/strlcat.c config.h strlcpy.lo strlcpy.o: $(srcdir)/compat/strlcpy.c config.h strptime.lo strptime.o: $(srcdir)/compat/strptime.c config.h +getentropy_freebsd.lo getentropy_freebsd.o: $(srcdir)/compat/getentropy_freebsd.c getentropy_linux.lo getentropy_linux.o: $(srcdir)/compat/getentropy_linux.c config.h getentropy_osx.lo getentropy_osx.o: $(srcdir)/compat/getentropy_osx.c getentropy_solaris.lo getentropy_solaris.o: $(srcdir)/compat/getentropy_solaris.c config.h diff --git a/doc/Changelog b/doc/Changelog index 2bf844243..4c215c3a5 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -13,6 +13,7 @@ a portable systemd service file. - updated .gitignore for added contrib file. - Add build rule for ipset to Makefile + - Add getentropy_freebsd.o to Makefile dependencies. 29 January 2020: Ralph - Merge PR#156 from Alexander Berkes; Added unbound-control